From 3851cfcad24e453201fe1c460ad4d4928de05dd9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Hertzog?= Date: Fri, 28 Sep 2018 14:09:34 +0100 Subject: [PATCH] Import pyside2_5.11.2.orig.tar.xz [dgit import orig pyside2_5.11.2.orig.tar.xz] --- .QT-ENTERPRISE-LICENSE-AGREEMENT | 849 + ...-APPLICATION-DEVELOPMENT-LICENSE-AGREEMENT | 912 + .QT-FOR-AUTOMATION-LICENSE-AGREEMENT | 812 + .QT-FOR-AUTOMOTIVE-LICENSE-AGREEMENT | 894 + .QT-FOR-DEVICE-CREATION-LICENSE-AGREEMENT | 912 + .gitattributes | 15 + .gitignore | 15 + .gitmodules | 4 + .travis.yml | 14 + CHANGES.rst | 405 + LICENSE.COMMERCIAL | 914 + LICENSE.FDL | 450 + LICENSE.GPL2 | 339 + LICENSE.GPLv3 | 686 + LICENSE.GPLv3-EXCEPT | 704 + LICENSE.LGPLv3 | 177 + MANIFEST.in | 40 + README.md | 53 + appveyor.yml | 18 + build_history/blacklist.txt | 90 + build_scripts/__init__.py | 38 + build_scripts/main.py | 1337 ++ build_scripts/options.py | 84 + build_scripts/platforms/__init__.py | 38 + build_scripts/platforms/linux.py | 112 + build_scripts/platforms/macos.py | 182 + build_scripts/platforms/unix.py | 167 + build_scripts/platforms/windows_desktop.py | 365 + build_scripts/qtinfo.py | 237 + build_scripts/utils.py | 1126 + build_scripts/wheel_override.py | 204 + checklibs.py | 386 + coin_build_instructions.py | 140 + coin_test_instructions.py | 90 + docs/.gitignore | 1 + docs/Makefile | 177 + docs/building/index.rst | 10 + docs/building/linux.rst | 138 + docs/building/macosx.rst | 263 + docs/building/options.rst | 99 + docs/building/windows.rst | 136 + docs/changes.rst | 4 + docs/conf.py | 301 + docs/index.rst | 69 + docs/installing/index.rst | 9 + docs/installing/linux.rst | 9 + docs/installing/macosx.rst | 32 + docs/installing/windows.rst | 33 + docs/make.bat | 281 + examples/3d/simple3d.py | 164 + examples/axcontainer/axviewer.py | 84 + examples/charts/audio.py | 128 + examples/charts/callout.py | 258 + examples/charts/chartthemes/README.md | 9 + examples/charts/chartthemes/main.py | 381 + examples/charts/chartthemes/themewidget.ui | 103 + examples/charts/donutbreakdown.py | 181 + examples/charts/legend.py | 252 + examples/charts/lineandbar.py | 117 + examples/charts/memoryusage.py | 126 + examples/charts/modeldata.py | 183 + examples/charts/nesteddonuts.py | 137 + examples/charts/percentbarchart.py | 99 + examples/corelib/threads/mandelbrot.py | 349 + examples/corelib/tools/codecs/codecs.py | 251 + examples/corelib/tools/regexp.py | 195 + .../tools/settingseditor/settingseditor.py | 722 + examples/datavisualization/bars3d.py | 115 + .../extending/chapter1-basics/app.qml | 64 + .../extending/chapter1-basics/basics.py | 100 + .../extending/chapter2-methods/app.qml | 70 + .../extending/chapter2-methods/methods.py | 105 + .../extending/chapter3-bindings/app.qml | 78 + .../extending/chapter3-bindings/bindings.py | 110 + .../chapter4-customPropertyTypes/app.qml | 60 + .../customPropertyTypes.py | 116 + .../extending/chapter5-listproperties/app.qml | 70 + .../chapter5-listproperties/listproperties.py | 128 + examples/declarative/scrolling.py | 73 + examples/declarative/signals/pytoqml1/main.py | 72 + .../declarative/signals/pytoqml1/view.qml | 73 + examples/declarative/signals/qmltopy1/main.py | 89 + .../declarative/signals/qmltopy1/view.qml | 85 + examples/declarative/signals/qmltopy2/main.py | 81 + .../declarative/signals/qmltopy2/view.qml | 80 + examples/declarative/signals/qmltopy3/main.py | 72 + .../declarative/signals/qmltopy3/view.qml | 103 + examples/declarative/signals/qmltopy4/main.py | 72 + .../declarative/signals/qmltopy4/view.qml | 68 + examples/declarative/textproperties/main.py | 112 + examples/declarative/textproperties/view.qml | 191 + examples/declarative/usingmodel.py | 102 + examples/declarative/view.qml | 65 + examples/examples.pyqtc | 103 + examples/macextras/macpasteboardmime.py | 127 + examples/multimedia/audiooutput.py | 301 + examples/multimedia/camera.py | 170 + examples/multimedia/player.py | 158 + examples/multimedia/shutter.svg | 21 + examples/network/blockingfortuneclient.py | 225 + examples/network/fortuneclient.py | 168 + examples/network/fortuneserver.py | 118 + examples/network/threadedfortuneserver.py | 153 + examples/opengl/2dpainting.py | 174 + examples/opengl/contextinfo.py | 251 + examples/opengl/grabber.py | 436 + examples/opengl/hellogl.py | 288 + examples/opengl/hellogl2.py | 473 + examples/opengl/overpainting.py | 386 + examples/opengl/samplebuffers.py | 193 + examples/opengl/textures/images/side1.png | Bin 0 -> 1044 bytes examples/opengl/textures/images/side2.png | Bin 0 -> 1768 bytes examples/opengl/textures/images/side3.png | Bin 0 -> 2323 bytes examples/opengl/textures/images/side4.png | Bin 0 -> 1342 bytes examples/opengl/textures/images/side5.png | Bin 0 -> 1959 bytes examples/opengl/textures/images/side6.png | Bin 0 -> 2446 bytes examples/opengl/textures/textures.py | 232 + examples/opengl/textures/textures.qrc | 10 + examples/opengl/textures/textures_rc.py | 797 + examples/samplebinding/CMakeLists.txt | 233 + examples/samplebinding/README.md | 223 + examples/samplebinding/bindings.h | 57 + examples/samplebinding/bindings.xml | 80 + examples/samplebinding/icecream.cpp | 65 + examples/samplebinding/icecream.h | 71 + examples/samplebinding/macros.h | 68 + examples/samplebinding/main.py | 102 + examples/samplebinding/truck.cpp | 138 + examples/samplebinding/truck.h | 84 + examples/script/README.md | 9 + examples/script/helloscript.py | 61 + examples/scriptableapplication/CMakeLists.txt | 197 + examples/scriptableapplication/README.md | 170 + examples/scriptableapplication/main.cpp | 64 + examples/scriptableapplication/mainwindow.cpp | 141 + examples/scriptableapplication/mainwindow.h | 76 + examples/scriptableapplication/pyside2.pri | 30 + .../scriptableapplication/pythonutils.cpp | 176 + examples/scriptableapplication/pythonutils.h | 81 + .../scriptableapplication.pro | 85 + .../scriptableapplication.xml | 56 + .../scriptableapplication/wrappedclasses.h | 56 + examples/texttospeech/texttospeech.py | 108 + examples/tutorial/t1.py | 57 + examples/tutorial/t10.py | 192 + examples/tutorial/t11.py | 264 + examples/tutorial/t12.py | 313 + examples/tutorial/t13.py | 396 + examples/tutorial/t14.py | 451 + examples/tutorial/t2.py | 60 + examples/tutorial/t3.py | 62 + examples/tutorial/t4.py | 67 + examples/tutorial/t5.py | 78 + examples/tutorial/t6.py | 91 + examples/tutorial/t7.py | 114 + examples/tutorial/t8.py | 153 + examples/tutorial/t9.py | 160 + examples/utils/pyside2_config.py | 302 + examples/utils/utils.py | 49 + examples/webenginequick/browser.qml | 53 + examples/webenginequick/quicknanobrowser.py | 59 + examples/webenginewidgets/simplebrowser.py | 102 + .../tabbedbrowser/bookmarkwidget.py | 268 + .../tabbedbrowser/browsertabwidget.py | 221 + .../tabbedbrowser/downloadwidget.py | 144 + .../tabbedbrowser/findtoolbar.py | 98 + .../webenginewidgets/tabbedbrowser/main.py | 386 + .../tabbedbrowser/tabbedbrowser.pyqtc | 6 + .../tabbedbrowser/webengineview.py | 90 + .../animation/animatedtiles/animatedtiles.py | 260 + .../animation/animatedtiles/animatedtiles.qrc | 11 + .../animatedtiles/animatedtiles_rc.py | 6144 +++++ .../animatedtiles/images/Time-For-Lunch-2.jpg | Bin 0 -> 32471 bytes .../animatedtiles/images/centered.png | Bin 0 -> 892 bytes .../animatedtiles/images/ellipse.png | Bin 0 -> 10767 bytes .../animatedtiles/images/figure8.png | Bin 0 -> 14050 bytes .../animatedtiles/images/kinetic.png | Bin 0 -> 6776 bytes .../animation/animatedtiles/images/random.png | Bin 0 -> 14969 bytes .../animation/animatedtiles/images/tile.png | Bin 0 -> 16337 bytes .../appchooser/accessories-dictionary.png | Bin 0 -> 5396 bytes .../animation/appchooser/akregator.png | Bin 0 -> 4873 bytes .../animation/appchooser/appchooser.py | 134 + .../animation/appchooser/appchooser.qrc | 8 + .../animation/appchooser/appchooser_rc.py | 1464 ++ .../widgets/animation/appchooser/digikam.png | Bin 0 -> 3334 bytes examples/widgets/animation/appchooser/k3b.png | Bin 0 -> 8220 bytes examples/widgets/animation/easing/easing.py | 260 + examples/widgets/animation/easing/easing.qrc | 5 + .../widgets/animation/easing/easing_rc.py | 403 + examples/widgets/animation/easing/form.ui | 205 + .../animation/easing/images/qt-logo.png | Bin 0 -> 5149 bytes examples/widgets/animation/easing/ui_form.py | 115 + examples/widgets/animation/states/states.py | 265 + .../widgets/animation/states/states_rc.py | 2221 ++ .../dialogs/classwizard/classwizard.py | 404 + .../dialogs/classwizard/classwizard.qrc | 11 + .../dialogs/classwizard/classwizard_rc.py | 3928 ++++ .../dialogs/classwizard/images/background.png | Bin 0 -> 22578 bytes .../dialogs/classwizard/images/banner.png | Bin 0 -> 3947 bytes .../dialogs/classwizard/images/logo1.png | Bin 0 -> 1619 bytes .../dialogs/classwizard/images/logo2.png | Bin 0 -> 1619 bytes .../dialogs/classwizard/images/logo3.png | Bin 0 -> 1619 bytes .../dialogs/classwizard/images/watermark1.png | Bin 0 -> 14516 bytes .../dialogs/classwizard/images/watermark2.png | Bin 0 -> 14912 bytes examples/widgets/dialogs/extension.py | 114 + examples/widgets/dialogs/findfiles.py | 211 + examples/widgets/dialogs/standarddialogs.py | 320 + examples/widgets/dialogs/trivialwizard.py | 113 + .../draggabletext/draggabletext.py | 156 + .../draggabletext/draggabletext.qrc | 5 + .../draggabletext/draggabletext_rc.py | 97 + .../draganddrop/draggabletext/words.txt | 41 + examples/widgets/effects/lighting.py | 145 + examples/widgets/graphicsview/anchorlayout.py | 126 + .../collidingmice/collidingmice.py | 217 + .../graphicsview/collidingmice/mice_rc.py | 271 + .../graphicsview/diagramscene/diagramscene.py | 825 + .../diagramscene/diagramscene.qrc | 19 + .../diagramscene/diagramscene_rc.py | 445 + .../diagramscene/images/background1.png | Bin 0 -> 112 bytes .../diagramscene/images/background2.png | Bin 0 -> 114 bytes .../diagramscene/images/background3.png | Bin 0 -> 116 bytes .../diagramscene/images/background4.png | Bin 0 -> 96 bytes .../graphicsview/diagramscene/images/bold.png | Bin 0 -> 274 bytes .../diagramscene/images/bringtofront.png | Bin 0 -> 293 bytes .../diagramscene/images/delete.png | Bin 0 -> 831 bytes .../diagramscene/images/floodfill.png | Bin 0 -> 282 bytes .../diagramscene/images/italic.png | Bin 0 -> 247 bytes .../diagramscene/images/linecolor.png | Bin 0 -> 145 bytes .../diagramscene/images/linepointer.png | Bin 0 -> 141 bytes .../diagramscene/images/pointer.png | Bin 0 -> 173 bytes .../diagramscene/images/sendtoback.png | Bin 0 -> 318 bytes .../diagramscene/images/textpointer.png | Bin 0 -> 753 bytes .../diagramscene/images/underline.png | Bin 0 -> 250 bytes .../dragdroprobot/dragdroprobot.py | 287 + .../dragdroprobot/dragdroprobot.qrc | 5 + .../dragdroprobot/dragdroprobot_rc.py | 1017 + .../dragdroprobot/images/head.png | Bin 0 -> 14972 bytes examples/widgets/graphicsview/elasticnodes.py | 414 + .../itemviews/addressbook/adddialogwidget.py | 103 + .../itemviews/addressbook/addressbook.py | 131 + .../itemviews/addressbook/addresswidget.py | 249 + .../itemviews/addressbook/newaddresstab.py | 94 + .../itemviews/addressbook/tablemodel.py | 147 + .../widgets/itemviews/basicsortfiltermodel.py | 203 + examples/widgets/itemviews/fetchmore.py | 148 + .../itemviews/stardelegate/stardelegate.py | 174 + .../itemviews/stardelegate/stareditor.py | 99 + .../itemviews/stardelegate/starrating.py | 102 + examples/widgets/layouts/basiclayouts.py | 135 + examples/widgets/layouts/dynamiclayouts.py | 171 + examples/widgets/layouts/flowlayout.py | 156 + .../mainwindows/application/application.py | 273 + .../mainwindows/application/application.qrc | 10 + .../mainwindows/application/application_rc.py | 645 + .../mainwindows/application/images/copy.png | Bin 0 -> 1338 bytes .../mainwindows/application/images/cut.png | Bin 0 -> 1323 bytes .../mainwindows/application/images/new.png | Bin 0 -> 852 bytes .../mainwindows/application/images/open.png | Bin 0 -> 2073 bytes .../mainwindows/application/images/paste.png | Bin 0 -> 1645 bytes .../mainwindows/application/images/save.png | Bin 0 -> 1187 bytes .../mainwindows/dockwidgets/dockwidgets.py | 304 + .../mainwindows/dockwidgets/dockwidgets.qrc | 8 + .../mainwindows/dockwidgets/dockwidgets_rc.py | 503 + .../mainwindows/dockwidgets/images/new.png | Bin 0 -> 977 bytes .../mainwindows/dockwidgets/images/print.png | Bin 0 -> 1732 bytes .../mainwindows/dockwidgets/images/save.png | Bin 0 -> 1894 bytes .../mainwindows/dockwidgets/images/undo.png | Bin 0 -> 1768 bytes .../widgets/mainwindows/mdi/images/copy.png | Bin 0 -> 1338 bytes .../widgets/mainwindows/mdi/images/cut.png | Bin 0 -> 1323 bytes .../widgets/mainwindows/mdi/images/new.png | Bin 0 -> 852 bytes .../widgets/mainwindows/mdi/images/open.png | Bin 0 -> 2073 bytes .../widgets/mainwindows/mdi/images/paste.png | Bin 0 -> 1645 bytes .../widgets/mainwindows/mdi/images/save.png | Bin 0 -> 1187 bytes examples/widgets/mainwindows/mdi/mdi.py | 448 + examples/widgets/mainwindows/mdi/mdi.qrc | 10 + examples/widgets/mainwindows/mdi/mdi_rc.py | 645 + .../painting/basicdrawing/basicdrawing.py | 350 + .../painting/basicdrawing/basicdrawing.qrc | 6 + .../painting/basicdrawing/basicdrawing_rc.py | 174 + .../painting/basicdrawing/images/brick.png | Bin 0 -> 856 bytes .../painting/basicdrawing/images/qt-logo.png | Bin 0 -> 533 bytes .../widgets/painting/concentriccircles.py | 147 + examples/widgets/richtext/orderform.py | 297 + .../widgets/richtext/syntaxhighlighter.py | 203 + .../syntaxhighlighter/examples/example | 79 + .../syntaxhighlighter/syntaxhighlighter.py | 180 + .../syntaxhighlighter/syntaxhighlighter.qrc | 5 + .../syntaxhighlighter/syntaxhighlighter_rc.py | 183 + .../richtext/textobject/files/heart.svg | 55 + .../widgets/richtext/textobject/textobject.py | 130 + examples/widgets/state-machine/eventtrans.py | 93 + examples/widgets/state-machine/factstates.py | 112 + examples/widgets/state-machine/pingpong.py | 97 + examples/widgets/state-machine/rogue.py | 203 + .../widgets/state-machine/trafficlight.py | 140 + .../widgets/state-machine/twowaybutton.py | 71 + .../widgets/tutorials/addressbook/part1.py | 75 + .../widgets/tutorials/addressbook/part2.py | 182 + .../widgets/tutorials/addressbook/part3.py | 247 + .../widgets/tutorials/addressbook/part4.py | 301 + .../widgets/tutorials/addressbook/part5.py | 361 + .../widgets/tutorials/addressbook/part6.py | 426 + .../widgets/tutorials/addressbook/part7.py | 478 + .../widgets/hellogl_openglwidget_legacy.py | 289 + examples/widgets/widgets/tetrix.py | 499 + examples/xml/dombookmarks/dombookmarks.py | 263 + examples/xml/dombookmarks/frank.xbel | 230 + examples/xml/dombookmarks/jennifer.xbel | 93 + examples/xmlpatterns/schema/files/contact.xsd | 25 + .../schema/files/invalid_contact.xml | 11 + .../schema/files/invalid_order.xml | 13 + .../schema/files/invalid_recipe.xml | 14 + examples/xmlpatterns/schema/files/order.xsd | 23 + examples/xmlpatterns/schema/files/recipe.xsd | 40 + .../schema/files/valid_contact.xml | 11 + .../xmlpatterns/schema/files/valid_order.xml | 18 + .../xmlpatterns/schema/files/valid_recipe.xml | 13 + examples/xmlpatterns/schema/schema.py | 278 + examples/xmlpatterns/schema/schema.qrc | 13 + examples/xmlpatterns/schema/schema.ui | 71 + examples/xmlpatterns/schema/schema_rc.py | 501 + examples/xmlpatterns/schema/ui_schema.py | 62 + ez_setup.py | 376 + header.BSD-OLD | 39 + missing_bindings.py | 442 + popenasync.py | 360 + setup.py | 304 + sources/patchelf/COPYING | 674 + sources/patchelf/README | 107 + sources/patchelf/elf.h | 2674 +++ sources/patchelf/patchelf.cc | 1239 + sources/pyside2-tools/AUTHORS | 12 + sources/pyside2-tools/CMakeLists.txt | 91 + sources/pyside2-tools/LICENSE-lupdate | 339 + sources/pyside2-tools/LICENSE-rcc | 342 + sources/pyside2-tools/LICENSE-uic | 372 + sources/pyside2-tools/README.md | 21 + sources/pyside2-tools/cmake_uninstall.cmake | 21 + .../pyside2-tools/pylupdate/CMakeLists.txt | 44 + sources/pyside2-tools/pylupdate/fetchtr.cpp | 891 + sources/pyside2-tools/pylupdate/main.cpp | 256 + sources/pyside2-tools/pylupdate/merge.cpp | 199 + .../pylupdate/metatranslator.cpp | 767 + .../pyside2-tools/pylupdate/metatranslator.h | 144 + sources/pyside2-tools/pylupdate/numberh.cpp | 240 + sources/pyside2-tools/pylupdate/proparser.cpp | 209 + sources/pyside2-tools/pylupdate/proparser.h | 34 + .../pyside2-tools/pylupdate/pyside2-lupdate.1 | 27 + sources/pyside2-tools/pylupdate/sametexth.cpp | 87 + sources/pyside2-tools/pylupdate/simtexth.cpp | 256 + sources/pyside2-tools/pylupdate/simtexth.h | 77 + .../pyside2-tools/pylupdate/translator.cpp | 1184 + sources/pyside2-tools/pylupdate/translator.h | 387 + sources/pyside2-tools/pyrcc/CMakeLists.txt | 18 + sources/pyside2-tools/pyrcc/main.cpp | 192 + sources/pyside2-tools/pyrcc/pyside2-rcc.1 | 43 + sources/pyside2-tools/pyrcc/rcc.cpp | 552 + sources/pyside2-tools/pyrcc/rcc.h | 154 + sources/pyside2-tools/pyside2-uic | 70 + .../pyside2uic/Compiler/__init__.py | 22 + .../pyside2uic/Compiler/compiler.py | 103 + .../pyside2uic/Compiler/indenter.py | 59 + .../pyside2-tools/pyside2uic/Compiler/misc.py | 52 + .../pyside2uic/Compiler/proxy_type.py | 59 + .../pyside2uic/Compiler/qobjectcreator.py | 165 + .../pyside2uic/Compiler/qtproxies.py | 408 + .../pyside2-tools/pyside2uic/__init__.py.in | 150 + sources/pyside2-tools/pyside2uic/driver.py | 128 + .../pyside2-tools/pyside2uic/exceptions.py | 31 + .../pyside2-tools/pyside2uic/icon_cache.py | 150 + .../pyside2-tools/pyside2uic/objcreator.py | 113 + .../pyside2uic/port_v2/__init__.py | 20 + .../pyside2uic/port_v2/as_string.py | 40 + .../pyside2uic/port_v2/ascii_upper.py | 32 + .../pyside2uic/port_v2/invoke.py | 48 + .../pyside2uic/port_v2/load_plugin.py | 39 + .../pyside2uic/port_v2/proxy_base.py | 27 + .../pyside2uic/port_v2/string_io.py | 27 + .../pyside2uic/port_v3/__init__.py | 20 + .../pyside2uic/port_v3/as_string.py | 41 + .../pyside2uic/port_v3/ascii_upper.py | 30 + .../pyside2uic/port_v3/invoke.py | 48 + .../pyside2uic/port_v3/load_plugin.py | 39 + .../pyside2uic/port_v3/proxy_base.py | 27 + .../pyside2uic/port_v3/string_io.py | 24 + .../pyside2-tools/pyside2uic/properties.py | 489 + .../pyside2-tools/pyside2uic/pyside2-uic.1 | 31 + sources/pyside2-tools/pyside2uic/uiparser.py | 889 + .../widget-plugins/qtdeclarative.py | 32 + .../pyside2uic/widget-plugins/qtwebkit.py | 34 + sources/pyside2-tools/qt_attribution.json | 44 + sources/pyside2-tools/tests/CMakeLists.txt | 5 + sources/pyside2-tools/tests/qwizard_test.ui | 67 + .../pyside2-tools/tests/rcc/CMakeLists.txt | 10 + .../tests/rcc/document-print-preview.png | Bin 0 -> 1719 bytes sources/pyside2-tools/tests/rcc/example.qrc | 7 + sources/pyside2-tools/tests/rcc/image.qrc | 5 + sources/pyside2-tools/tests/rcc/manychars.txt | 1 + .../pyside2-tools/tests/rcc/rcc_image_test.py | 16 + sources/pyside2-tools/tests/rcc/rcc_test.py | 31 + sources/pyside2-tools/tests/rcc/run_test.sh | 12 + sources/pyside2-tools/tests/rcc/shining.txt | 1 + sources/pyside2-tools/tests/rcc/words.txt | 1 + sources/pyside2/CMakeLists.txt | 557 + sources/pyside2/COPYING | 501 + sources/pyside2/PySide2/CMakeLists.txt | 100 + .../PySide2/Qt3DAnimation/CMakeLists.txt | 55 + .../Qt3DAnimation/typesystem_3danimation.xml | 70 + .../pyside2/PySide2/Qt3DCore/CMakeLists.txt | 74 + .../PySide2/Qt3DCore/typesystem_3dcore.xml | 92 + .../pyside2/PySide2/Qt3DExtras/CMakeLists.txt | 81 + .../Qt3DExtras/typesystem_3dextras.xml | 86 + .../pyside2/PySide2/Qt3DInput/CMakeLists.txt | 56 + .../PySide2/Qt3DInput/typesystem_3dinput.xml | 85 + .../pyside2/PySide2/Qt3DLogic/CMakeLists.txt | 37 + .../PySide2/Qt3DLogic/typesystem_3dlogic.xml | 49 + .../pyside2/PySide2/Qt3DRender/CMakeLists.txt | 155 + .../Qt3DRender/typesystem_3drender.xml | 259 + .../PySide2/QtAxContainer/CMakeLists.txt | 46 + .../QtAxContainer_global.post.h.in | 5 + .../QtAxContainer/typesystem_axcontainer.xml | 63 + .../pyside2/PySide2/QtCharts/CMakeLists.txt | 90 + .../PySide2/QtCharts/typesystem_charts.xml | 260 + .../PySide2/QtConcurrent/CMakeLists.txt | 31 + .../PySide2/QtConcurrent/curr_errors.txt | 21 + .../QtConcurrent/typesystem_concurrent.xml | 57 + sources/pyside2/PySide2/QtCore/CMakeLists.txt | 196 + .../QtCore/glue/qbytearray_bufferprotocol.cpp | 73 + .../QtCore/glue/qbytearray_mgetitem.cpp | 87 + .../QtCore/glue/qbytearray_msetitem.cpp | 158 + .../QtCore/glue/qcoreapplication_init.cpp | 50 + .../PySide2/QtCore/glue/qeasingcurve_glue.cpp | 159 + .../PySide2/QtCore/glue/qeasingcurve_glue.h | 66 + .../PySide2/QtCore/glue/qobject_connect.cpp | 227 + .../PySide2/QtCore/glue/qobject_findchild.cpp | 78 + .../PySide2/QtCore/typesystem_core.xml.in | 45 + .../PySide2/QtCore/typesystem_core_common.xml | 4426 ++++ .../PySide2/QtCore/typesystem_core_mac.xml | 57 + .../PySide2/QtCore/typesystem_core_win.xml | 90 + .../PySide2/QtCore/typesystem_core_x11.xml | 61 + .../QtDataVisualization/CMakeLists.txt | 70 + .../typesystem_datavisualization.xml | 465 + sources/pyside2/PySide2/QtGui/CMakeLists.txt | 250 + .../PySide2/QtGui/QtGui_global.post.h.in | 1 + .../QtGui/glue/qguiapplication_init.cpp | 50 + .../PySide2/QtGui/typesystem_gui.xml.in | 46 + .../PySide2/QtGui/typesystem_gui_common.xml | 3745 +++ .../PySide2/QtGui/typesystem_gui_mac.xml | 50 + .../PySide2/QtGui/typesystem_gui_win.xml | 42 + .../PySide2/QtGui/typesystem_gui_x11.xml | 42 + sources/pyside2/PySide2/QtHelp/CMakeLists.txt | 48 + .../PySide2/QtHelp/typesystem_help.xml | 66 + .../pyside2/PySide2/QtLocation/CMakeLists.txt | 80 + .../QtLocation/typesystem_location.xml | 116 + .../PySide2/QtMacExtras/CMakeLists.txt | 37 + .../QtMacExtras/typesystem_macextras.xml | 55 + .../PySide2/QtMultimedia/CMakeLists.txt | 134 + .../QtMultimedia/typesystem_multimedia.xml | 45 + .../typesystem_multimedia_common.xml | 400 + ...system_multimedia_forward_declarations.xml | 45 + .../QtMultimediaWidgets/CMakeLists.txt | 47 + .../typesystem_multimediawidgets.xml | 52 + .../pyside2/PySide2/QtNetwork/CMakeLists.txt | 88 + .../PySide2/QtNetwork/typesystem_network.xml | 345 + .../pyside2/PySide2/QtOpenGL/CMakeLists.txt | 46 + .../PySide2/QtOpenGL/typesystem_opengl.xml | 766 + .../PySide2/QtPositioning/CMakeLists.txt | 55 + .../QtPositioning/typesystem_positioning.xml | 80 + .../PySide2/QtPrintSupport/CMakeLists.txt | 44 + .../typesystem_printsupport.xml | 118 + sources/pyside2/PySide2/QtQml/CMakeLists.txt | 65 + .../PySide2/QtQml/pysideqmlregistertype.cpp | 496 + .../PySide2/QtQml/pysideqmlregistertype.h | 85 + .../pyside2/PySide2/QtQml/typesystem_qml.xml | 220 + .../pyside2/PySide2/QtQuick/CMakeLists.txt | 93 + .../QtQuick/pysidequickregistertype.cpp | 253 + .../PySide2/QtQuick/pysidequickregistertype.h | 52 + .../PySide2/QtQuick/typesystem_quick.xml | 174 + .../PySide2/QtQuickWidgets/CMakeLists.txt | 47 + .../typesystem_quickwidgets.xml | 54 + .../pyside2/PySide2/QtScript/CMakeLists.txt | 42 + .../QtScript/qscript_value_iterator_glue.cpp | 3 + .../PySide2/QtScript/typesystem_script.xml | 135 + .../PySide2/QtScriptTools/CMakeLists.txt | 41 + .../QtScriptTools/typesystem_scripttools.xml | 55 + .../pyside2/PySide2/QtScxml/CMakeLists.txt | 60 + .../PySide2/QtScxml/typesystem_scxml.xml | 71 + .../pyside2/PySide2/QtSensors/CMakeLists.txt | 106 + .../PySide2/QtSensors/typesystem_sensors.xml | 127 + sources/pyside2/PySide2/QtSql/CMakeLists.txt | 54 + .../PySide2/QtSql/QtSql_global.pre.h.in | 5 + .../pyside2/PySide2/QtSql/typesystem_sql.xml | 197 + sources/pyside2/PySide2/QtSvg/CMakeLists.txt | 41 + .../pyside2/PySide2/QtSvg/typesystem_svg.xml | 74 + sources/pyside2/PySide2/QtTest/CMakeLists.txt | 45 + .../PySide2/QtTest/QtTest_global.post.h.in | 1 + .../PySide2/QtTest/QtTest_global.pre.h.in | 5 + .../PySide2/QtTest/typesystem_test.xml | 168 + .../PySide2/QtTextToSpeech/CMakeLists.txt | 35 + .../typesystem_texttospeech.xml | 53 + .../pyside2/PySide2/QtUiTools/CMakeLists.txt | 41 + .../pyside2/PySide2/QtUiTools/glue/plugins.h | 64 + .../PySide2/QtUiTools/glue/uitools_loadui.cpp | 91 + .../PySide2/QtUiTools/typesystem_uitools.xml | 150 + .../PySide2/QtWebChannel/CMakeLists.txt | 33 + .../QtWebChannel/typesystem_webchannel.xml | 55 + .../PySide2/QtWebEngine/CMakeLists.txt | 32 + .../QtWebEngine/typesystem_webengine.xml | 45 + .../PySide2/QtWebEngineCore/CMakeLists.txt | 37 + .../typesystem_webenginecore.xml | 69 + .../PySide2/QtWebEngineWidgets/CMakeLists.txt | 58 + .../typesystem_webenginewidgets.xml | 107 + .../pyside2/PySide2/QtWebKit/CMakeLists.txt | 39 + .../PySide2/QtWebKit/typesystem_webkit.xml | 49 + .../PySide2/QtWebKitWidgets/CMakeLists.txt | 70 + .../typesystem_webkitwidgets.xml | 266 + .../PySide2/QtWebSockets/CMakeLists.txt | 41 + .../QtWebSockets/typesystem_websockets.xml | 78 + .../pyside2/PySide2/QtWidgets/CMakeLists.txt | 248 + .../QtWidgets/glue/qapplication_init.cpp | 50 + .../QtWidgets/glue/qlayout_help_functions.cpp | 161 + .../PySide2/QtWidgets/glue/qmenu_glue.cpp | 64 + .../PySide2/QtWidgets/glue/qmenubar_glue.cpp | 62 + .../PySide2/QtWidgets/glue/qwidget_glue.cpp | 104 + .../QtWidgets/typesystem_widgets.xml.in | 46 + .../QtWidgets/typesystem_widgets_common.xml | 3741 +++ .../QtWidgets/typesystem_widgets_mac.xml | 55 + .../QtWidgets/typesystem_widgets_win.xml | 42 + .../QtWidgets/typesystem_widgets_x11.xml | 42 + .../PySide2/QtWinExtras/CMakeLists.txt | 45 + .../QtWinExtras/typesystem_winextras.xml | 61 + .../PySide2/QtX11Extras/CMakeLists.txt | 37 + .../QtX11Extras/QtX11Extras_global.post.h.in | 1 + .../QtX11Extras/typesystem_x11extras.xml | 49 + sources/pyside2/PySide2/QtXml/CMakeLists.txt | 61 + .../pyside2/PySide2/QtXml/typesystem_xml.xml | 438 + .../PySide2/QtXmlPatterns/CMakeLists.txt | 45 + .../QtXmlPatterns/typesystem_xmlpatterns.xml | 125 + sources/pyside2/PySide2/__init__.py.in | 47 + sources/pyside2/PySide2/_config.py.in | 17 + sources/pyside2/PySide2/global.h.in | 57 + sources/pyside2/PySide2/licensecomment.txt | 38 + sources/pyside2/PySide2/pysideqtesttouch.h | 227 + sources/pyside2/PySide2/pysidewtypes.h | 66 + sources/pyside2/PySide2/qpytextobject.cpp | 50 + sources/pyside2/PySide2/qpytextobject.h | 63 + sources/pyside2/PySide2/qt.conf.in | 2 + sources/pyside2/PySide2/support/__init__.py | 48 + .../PySide2/support/signature/PSF-3.7.0.txt | 43 + .../PySide2/support/signature/__init__.py | 42 + .../support/signature/backport_inspect.py | 956 + .../support/signature/fix-complaints.py | 91 + .../PySide2/support/signature/loader.py | 110 + .../PySide2/support/signature/mapping.py | 477 + .../PySide2/support/signature/parser.py | 245 + .../support/signature/qt_attribution.json | 13 + .../PySide2/support/signature/typing27.py | 2288 ++ .../pyside2/PySide2/typesystem_templates.xml | 502 + .../pyside2/cmake/Macros/FindQt5Extra.cmake | 25 + .../pyside2/cmake/Macros/PySideModules.cmake | 223 + sources/pyside2/cmake/Macros/icecc.cmake | 11 + sources/pyside2/cmake_uninstall.cmake | 21 + sources/pyside2/doc/CMakeLists.txt | 139 + sources/pyside2/doc/_templates/layout.html | 40 + .../doc/_themes/pysidedocs/domainindex.html | 57 + .../doc/_themes/pysidedocs/searchbox.html | 12 + .../_themes/pysidedocs/static/bg_header.png | Bin 0 -> 36012 bytes .../doc/_themes/pysidedocs/static/bg_topo.jpg | Bin 0 -> 14237 bytes .../doc/_themes/pysidedocs/static/fakebar.png | Bin 0 -> 101 bytes .../_themes/pysidedocs/static/logo_python.jpg | Bin 0 -> 2660 bytes .../doc/_themes/pysidedocs/static/logo_qt.png | Bin 0 -> 1936 bytes .../doc/_themes/pysidedocs/static/minus.png | Bin 0 -> 199 bytes .../doc/_themes/pysidedocs/static/plus.png | Bin 0 -> 199 bytes .../_themes/pysidedocs/static/pysidedocs.css | 477 + .../_themes/pysidedocs/static/pysidelogo.png | Bin 0 -> 9473 bytes .../_themes/pysidedocs/static/relbar_bg.png | Bin 0 -> 130 bytes .../pyside2/doc/_themes/pysidedocs/theme.conf | 7 + sources/pyside2/doc/additionaldocs.lst | 585 + .../snippets/accessibilityfactorysnippet.cpp | 77 + .../snippets/accessibilitypluginsnippet.cpp | 84 + .../snippets/accessibilityslidersnippet.cpp | 271 + .../doc/src/snippets/alphachannel.cpp | 64 + .../doc/src/snippets/audio/main.cpp | 104 + .../doc/src/snippets/brush/brush.cpp | 96 + .../brush/gradientcreationsnippet.cpp | 72 + .../doc/src/snippets/brushstyles/main.cpp | 61 + .../doc/src/snippets/brushstyles/qt-logo.png | Bin 0 -> 15518 bytes .../src/snippets/brushstyles/renderarea.cpp | 88 + .../doc/src/snippets/brushstyles/renderarea.h | 71 + .../src/snippets/brushstyles/stylewidget.cpp | 154 + .../src/snippets/brushstyles/stylewidget.h | 108 + .../doc/src/snippets/buffer/buffer.cpp | 133 + .../doc/src/snippets/clipboard/clipwindow.cpp | 106 + .../doc/src/snippets/clipboard/clipwindow.h | 82 + .../doc/src/snippets/clipboard/main.cpp | 62 + .../src/snippets/code/doc_src_qnamespace.qdoc | 67 + .../doc/src/snippets/code/doc_src_qtcore.cpp | 53 + .../src/snippets/code/doc_src_qtnetwork.cpp | 53 + .../src/snippets/code/doc_src_qtopengl.cpp | 53 + .../snippets/code/doc_src_qtprintsupport.cpp | 53 + .../doc/src/snippets/code/doc_src_qtqml.cpp | 53 + .../doc/src/snippets/code/doc_src_qtquick.cpp | 53 + .../doc/src/snippets/code/doc_src_qtsql.cpp | 52 + .../doc/src/snippets/code/doc_src_qttest.cpp | 53 + .../src/snippets/code/doc_src_qtwidgets.cpp | 53 + .../doc/src/snippets/code/doc_src_qtxml.cpp | 53 + .../code/src.gui.text.qtextdocumentwriter.cpp | 55 + .../code/src.qdbus.qdbuspendingcall.cpp | 74 + .../code/src.qdbus.qdbuspendingreply.cpp | 73 + .../src.scripttools.qscriptenginedebugger.cpp | 59 + .../code/src_corelib_codecs_qtextcodec.cpp | 82 + .../src_corelib_codecs_qtextcodecplugin.cpp | 62 + .../code/src_corelib_concurrent_qfuture.cpp | 74 + ...corelib_concurrent_qfuturesynchronizer.cpp | 63 + .../src_corelib_concurrent_qfuturewatcher.cpp | 60 + ...relib_concurrent_qtconcurrentexception.cpp | 85 + ..._corelib_concurrent_qtconcurrentfilter.cpp | 181 + ...src_corelib_concurrent_qtconcurrentmap.cpp | 194 + ...src_corelib_concurrent_qtconcurrentrun.cpp | 110 + .../src_corelib_concurrent_qthreadpool.cpp | 59 + .../code/src_corelib_global_qglobal.cpp | 514 + .../src_corelib_io_qabstractfileengine.cpp | 112 + .../code/src_corelib_io_qdatastream.cpp | 135 + .../src/snippets/code/src_corelib_io_qdir.cpp | 179 + .../code/src_corelib_io_qdiriterator.cpp | 62 + .../snippets/code/src_corelib_io_qfile.cpp | 82 + .../code/src_corelib_io_qfileinfo.cpp | 148 + .../code/src_corelib_io_qiodevice.cpp | 98 + .../snippets/code/src_corelib_io_qprocess.cpp | 132 + .../code/src_corelib_io_qsettings.cpp | 327 + .../code/src_corelib_io_qtemporaryfile.cpp | 62 + .../code/src_corelib_io_qtextstream.cpp | 140 + .../src/snippets/code/src_corelib_io_qurl.cpp | 96 + ...orelib_kernel_qabstracteventdispatcher.cpp | 3 + .../src_corelib_kernel_qabstractitemmodel.cpp | 98 + .../src_corelib_kernel_qcoreapplication.cpp | 128 + .../code/src_corelib_kernel_qmetaobject.cpp | 132 + .../code/src_corelib_kernel_qmetatype.cpp | 119 + .../code/src_corelib_kernel_qmimedata.cpp | 107 + .../code/src_corelib_kernel_qobject.cpp | 369 + .../src_corelib_kernel_qsystemsemaphore.cpp | 71 + .../code/src_corelib_kernel_qtimer.cpp | 60 + .../code/src_corelib_plugin_qlibrary.cpp | 94 + .../code/src_corelib_plugin_quuid.cpp | 54 + ...src_corelib_statemachine_qstatemachine.cpp | 65 + .../code/src_corelib_thread_qatomic.cpp | 108 + .../code/src_corelib_thread_qmutex.cpp | 165 + .../code/src_corelib_thread_qmutexpool.cpp | 62 + .../src_corelib_thread_qreadwritelock.cpp | 111 + .../code/src_corelib_thread_qsemaphore.cpp | 83 + .../code/src_corelib_thread_qthread.cpp | 59 + ...src_corelib_thread_qwaitcondition_unix.cpp | 95 + .../code/src_corelib_tools_qbitarray.cpp | 239 + .../code/src_corelib_tools_qbytearray.cpp | 402 + .../code/src_corelib_tools_qdatetime.cpp | 156 + .../snippets/code/src_corelib_tools_qhash.cpp | 309 + .../code/src_corelib_tools_qlinkedlist.cpp | 214 + .../code/src_corelib_tools_qlistdata.cpp | 277 + .../code/src_corelib_tools_qlocale.cpp | 101 + .../snippets/code/src_corelib_tools_qmap.cpp | 323 + .../code/src_corelib_tools_qpoint.cpp | 161 + .../code/src_corelib_tools_qqueue.cpp | 58 + .../snippets/code/src_corelib_tools_qrect.cpp | 60 + .../code/src_corelib_tools_qregexp.cpp | 225 + .../snippets/code/src_corelib_tools_qsize.cpp | 146 + .../code/src_corelib_tools_qstring.cpp | 95 + .../code/src_corelib_tools_qtimeline.cpp | 65 + .../code/src_corelib_tools_qvector.cpp | 193 + .../code/src_corelib_xml_qxmlstream.cpp | 77 + .../code/src_gui_accessible_qaccessible.cpp | 57 + .../src_gui_dialogs_qabstractprintdialog.cpp | 55 + .../code/src_gui_dialogs_qfiledialog.cpp | 136 + .../code/src_gui_dialogs_qfontdialog.cpp | 90 + .../code/src_gui_dialogs_qmessagebox.cpp | 152 + .../snippets/code/src_gui_dialogs_qwizard.cpp | 81 + .../code/src_gui_effects_qgraphicseffect.cpp | 87 + ...c_gui_graphicsview_qgraphicsgridlayout.cpp | 63 + .../src_gui_graphicsview_qgraphicsitem.cpp | 249 + ...gui_graphicsview_qgraphicslinearlayout.cpp | 63 + ..._gui_graphicsview_qgraphicsproxywidget.cpp | 96 + .../src_gui_graphicsview_qgraphicsscene.cpp | 125 + ...c_gui_graphicsview_qgraphicssceneevent.cpp | 55 + .../src_gui_graphicsview_qgraphicsview.cpp | 136 + .../src_gui_graphicsview_qgraphicswidget.cpp | 75 + .../snippets/code/src_gui_image_qbitmap.cpp | 54 + .../src/snippets/code/src_gui_image_qicon.cpp | 82 + .../snippets/code/src_gui_image_qimage.cpp | 86 + .../code/src_gui_image_qimagereader.cpp | 75 + .../code/src_gui_image_qimagewriter.cpp | 69 + .../snippets/code/src_gui_image_qmovie.cpp | 63 + .../snippets/code/src_gui_image_qpixmap.cpp | 68 + .../code/src_gui_image_qpixmapcache.cpp | 66 + .../code/src_gui_image_qpixmapfilter.cpp | 72 + .../src_gui_itemviews_qabstractitemview.cpp | 67 + .../src_gui_itemviews_qdatawidgetmapper.cpp | 73 + .../src_gui_itemviews_qitemeditorfactory.cpp | 73 + .../src_gui_itemviews_qitemselectionmodel.cpp | 60 + .../src_gui_itemviews_qstandarditemmodel.cpp | 86 + .../code/src_gui_itemviews_qtablewidget.cpp | 55 + .../code/src_gui_itemviews_qtreewidget.cpp | 58 + .../snippets/code/src_gui_kernel_qaction.cpp | 59 + .../code/src_gui_kernel_qapplication.cpp | 167 + .../code/src_gui_kernel_qapplication_x11.cpp | 55 + .../code/src_gui_kernel_qclipboard.cpp | 63 + .../snippets/code/src_gui_kernel_qevent.cpp | 61 + .../code/src_gui_kernel_qformlayout.cpp | 86 + .../code/src_gui_kernel_qkeysequence.cpp | 69 + .../snippets/code/src_gui_kernel_qlayout.cpp | 75 + .../code/src_gui_kernel_qlayoutitem.cpp | 58 + .../code/src_gui_kernel_qshortcut.cpp | 65 + .../code/src_gui_kernel_qshortcutmap.cpp | 3 + .../snippets/code/src_gui_kernel_qsound.cpp | 59 + .../snippets/code/src_gui_kernel_qwidget.cpp | 150 + .../snippets/code/src_gui_painting_qbrush.cpp | 61 + .../snippets/code/src_gui_painting_qcolor.cpp | 59 + .../code/src_gui_painting_qdrawutil.cpp | 108 + .../code/src_gui_painting_qmatrix.cpp | 72 + .../code/src_gui_painting_qpainter.cpp | 261 + .../code/src_gui_painting_qpainterpath.cpp | 160 + .../snippets/code/src_gui_painting_qpen.cpp | 85 + .../code/src_gui_painting_qregion.cpp | 63 + .../code/src_gui_painting_qregion_unix.cpp | 68 + .../code/src_gui_painting_qtransform.cpp | 88 + .../snippets/code/src_gui_styles_qstyle.cpp | 58 + .../code/src_gui_styles_qstyleoption.cpp | 57 + .../src/snippets/code/src_gui_text_qfont.cpp | 77 + .../code/src_gui_text_qfontmetrics.cpp | 64 + .../code/src_gui_text_qsyntaxhighlighter.cpp | 124 + .../code/src_gui_text_qtextcursor.cpp | 90 + .../code/src_gui_text_qtextdocument.cpp | 60 + .../code/src_gui_text_qtextlayout.cpp | 73 + .../snippets/code/src_gui_util_qcompleter.cpp | 74 + .../code/src_gui_util_qdesktopservices.cpp | 65 + .../snippets/code/src_gui_util_qundostack.cpp | 120 + .../snippets/code/src_gui_util_qvalidator.cpp | 155 + .../code/src_gui_widgets_qabstractbutton.cpp | 69 + .../code/src_gui_widgets_qabstractspinbox.cpp | 58 + .../code/src_gui_widgets_qcalendarwidget.cpp | 83 + .../code/src_gui_widgets_qcheckbox.cpp | 3 + .../code/src_gui_widgets_qdatetimeedit.cpp | 89 + .../code/src_gui_widgets_qdockwidget.cpp | 57 + .../snippets/code/src_gui_widgets_qframe.cpp | 58 + .../code/src_gui_widgets_qgroupbox.cpp | 3 + .../snippets/code/src_gui_widgets_qlabel.cpp | 74 + .../code/src_gui_widgets_qlineedit.cpp | 57 + .../code/src_gui_widgets_qmainwindow.cpp | 65 + .../snippets/code/src_gui_widgets_qmenu.cpp | 87 + .../code/src_gui_widgets_qmenubar.cpp | 58 + .../code/src_gui_widgets_qplaintextedit.cpp | 64 + .../code/src_gui_widgets_qpushbutton.cpp | 3 + .../code/src_gui_widgets_qradiobutton.cpp | 3 + .../code/src_gui_widgets_qrubberband.cpp | 67 + .../code/src_gui_widgets_qscrollarea.cpp | 59 + .../code/src_gui_widgets_qspinbox.cpp | 90 + .../code/src_gui_widgets_qsplashscreen.cpp | 65 + .../code/src_gui_widgets_qsplitter.cpp | 57 + .../code/src_gui_widgets_qstatusbar.cpp | 3 + .../code/src_gui_widgets_qtextbrowser.cpp | 54 + .../code/src_gui_widgets_qtextedit.cpp | 69 + .../code/src_gui_widgets_qworkspace.cpp | 57 + .../snippets/code/src_network_access_qftp.cpp | 109 + .../code/src_network_access_qhttp.cpp | 132 + ...c_network_access_qnetworkaccessmanager.cpp | 86 + .../src_network_access_qnetworkdiskcache.cpp | 74 + .../src_network_access_qnetworkrequest.cpp | 3 + ...c_network_bearer_qnetworkconfigmanager.cpp | 58 + .../code/src_network_kernel_qhostaddress.cpp | 57 + .../code/src_network_kernel_qhostinfo.cpp | 92 + .../code/src_network_kernel_qnetworkproxy.cpp | 64 + .../src_network_socket_qabstractsocket.cpp | 78 + .../src_network_socket_qlocalsocket_unix.cpp | 62 + ...src_network_socket_qnativesocketengine.cpp | 71 + .../code/src_network_socket_qtcpserver.cpp | 3 + .../code/src_network_socket_qudpsocket.cpp | 67 + .../code/src_network_ssl_qsslcertificate.cpp | 54 + .../src_network_ssl_qsslconfiguration.cpp | 55 + .../code/src_network_ssl_qsslsocket.cpp | 100 + .../doc/src/snippets/code/src_opengl_qgl.cpp | 168 + .../snippets/code/src_opengl_qglcolormap.cpp | 74 + .../code/src_opengl_qglpixelbuffer.cpp | 69 + .../code/src_opengl_qglshaderprogram.cpp | 103 + .../snippets/code/src_qtestlib_qtestcase.cpp | 237 + .../snippets/code/src_script_qscriptable.cpp | 69 + .../snippets/code/src_script_qscriptclass.cpp | 59 + .../code/src_script_qscriptcontext.cpp | 73 + .../code/src_script_qscriptengine.cpp | 320 + .../code/src_script_qscriptengineagent.cpp | 62 + .../snippets/code/src_script_qscriptvalue.cpp | 91 + .../code/src_script_qscriptvalueiterator.cpp | 78 + .../code/src_sql_kernel_qsqldatabase.cpp | 146 + .../code/src_sql_kernel_qsqldriver.cpp | 73 + .../code/src_sql_kernel_qsqlerror.cpp | 56 + .../code/src_sql_kernel_qsqlindex.cpp | 55 + .../code/src_sql_kernel_qsqlquery.cpp | 88 + .../code/src_sql_kernel_qsqlresult.cpp | 88 + .../code/src_sql_models_qsqlquerymodel.cpp | 62 + .../src/snippets/code/src_xml_dom_qdom.cpp | 230 + .../src/snippets/code/src_xml_sax_qxml.cpp | 3 + ...c_xmlpatterns_api_qabstracturiresolver.cpp | 3 + ...tterns_api_qabstractxmlforwarditerator.cpp | 3 + ..._xmlpatterns_api_qabstractxmlnodemodel.cpp | 72 + ...c_xmlpatterns_api_qabstractxmlreceiver.cpp | 57 + ...rc_xmlpatterns_api_qsimplexmlnodemodel.cpp | 69 + .../src_xmlpatterns_api_qxmlformatter.cpp | 58 + .../code/src_xmlpatterns_api_qxmlname.cpp | 58 + .../code/src_xmlpatterns_api_qxmlquery.cpp | 202 + .../src_xmlpatterns_api_qxmlresultitems.cpp | 66 + .../src_xmlpatterns_api_qxmlserializer.cpp | 57 + ..._assistant_compat_lib_qassistantclient.cpp | 75 + ...lib_extension_default_extensionfactory.cpp | 85 + ...s_designer_src_lib_extension_extension.cpp | 65 + ...er_src_lib_extension_qextensionmanager.cpp | 67 + ...esigner_src_lib_sdk_abstractformeditor.cpp | 61 + ...esigner_src_lib_sdk_abstractformwindow.cpp | 75 + ...r_src_lib_sdk_abstractformwindowcursor.cpp | 58 + ..._src_lib_sdk_abstractformwindowmanager.cpp | 61 + ...er_src_lib_sdk_abstractobjectinspector.cpp | 61 + ...ner_src_lib_sdk_abstractpropertyeditor.cpp | 73 + ...designer_src_lib_sdk_abstractwidgetbox.cpp | 80 + ...gner_src_lib_uilib_abstractformbuilder.cpp | 67 + ...ols_designer_src_lib_uilib_formbuilder.cpp | 76 + ..._patternist_qapplicationargumentparser.cpp | 55 + ...ared_qtgradienteditor_qtgradientdialog.cpp | 94 + ...ed_qtpropertybrowser_qtpropertybrowser.cpp | 97 + ...ed_qtpropertybrowser_qtvariantproperty.cpp | 66 + ...shared_qttoolbardialog_qttoolbardialog.cpp | 62 + .../src/snippets/console/dbus_pingpong.txt | 3 + .../doc/src/snippets/coordsys/coordsys.cpp | 86 + .../src/snippets/customstyle/customstyle.cpp | 98 + .../src/snippets/customstyle/customstyle.h | 69 + .../doc/src/snippets/customstyle/main.cpp | 64 + .../doc/src/snippets/customviewstyle.cpp | 79 + .../designer/autoconnection/imagedialog.cpp | 79 + .../designer/autoconnection/imagedialog.h | 69 + .../designer/autoconnection/imagedialog.ui | 389 + .../snippets/designer/autoconnection/main.cpp | 61 + .../designer/imagedialog/imagedialog.ui | 389 + .../snippets/designer/imagedialog/main.cpp | 63 + .../multipleinheritance/imagedialog.cpp | 69 + .../multipleinheritance/imagedialog.h | 64 + .../multipleinheritance/imagedialog.ui | 389 + .../designer/multipleinheritance/main.cpp | 61 + .../designer/noautoconnection/imagedialog.cpp | 86 + .../designer/noautoconnection/imagedialog.h | 69 + .../designer/noautoconnection/imagedialog.ui | 389 + .../designer/noautoconnection/main.cpp | 61 + .../singleinheritance/imagedialog.cpp | 69 + .../designer/singleinheritance/imagedialog.h | 67 + .../designer/singleinheritance/imagedialog.ui | 389 + .../designer/singleinheritance/main.cpp | 61 + .../doc/src/snippets/dialogs/dialogs.cpp | 129 + .../doc/src/snippets/doc_src_qtcharts.cpp | 43 + .../doc/src/snippets/doc_src_qtgui.cpp | 53 + .../doc/src/snippets/doc_src_qtmultimedia.cpp | 53 + .../src/snippets/doc_src_qtxmlpatterns.cpp | 54 + .../dockwidgets/Resources/modules.html | 28 + .../dockwidgets/Resources/qtcore.html | 122 + .../snippets/dockwidgets/Resources/qtgui.html | 276 + .../dockwidgets/Resources/qtnetwork.html | 35 + .../dockwidgets/Resources/qtopengl.html | 27 + .../snippets/dockwidgets/Resources/qtsql.html | 39 + .../snippets/dockwidgets/Resources/qtxml.html | 53 + .../snippets/dockwidgets/Resources/titles.txt | 7 + .../src/snippets/dockwidgets/dockwidgets.qrc | 12 + .../doc/src/snippets/dockwidgets/main.cpp | 62 + .../src/snippets/dockwidgets/mainwindow.cpp | 131 + .../doc/src/snippets/dockwidgets/mainwindow.h | 80 + .../src/snippets/draganddrop/dragwidget.cpp | 163 + .../doc/src/snippets/draganddrop/dragwidget.h | 89 + .../doc/src/snippets/draganddrop/main.cpp | 63 + .../src/snippets/draganddrop/mainwindow.cpp | 94 + .../doc/src/snippets/draganddrop/mainwindow.h | 81 + .../doc/src/snippets/dragging/images.qrc | 5 + .../doc/src/snippets/dragging/images/file.png | Bin 0 -> 313 bytes .../doc/src/snippets/dragging/main.cpp | 61 + .../doc/src/snippets/dragging/mainwindow.cpp | 72 + .../doc/src/snippets/dragging/mainwindow.h | 81 + .../doc/src/snippets/dropactions/main.cpp | 61 + .../doc/src/snippets/dropactions/window.cpp | 115 + .../doc/src/snippets/dropactions/window.h | 81 + .../doc/src/snippets/droparea.cpp | 147 + .../doc/src/snippets/dropevents/main.cpp | 62 + .../doc/src/snippets/dropevents/window.cpp | 97 + .../doc/src/snippets/dropevents/window.h | 81 + .../doc/src/snippets/droprectangle/main.cpp | 61 + .../doc/src/snippets/droprectangle/window.cpp | 106 + .../doc/src/snippets/droprectangle/window.h | 81 + .../snippets/eventfilters/filterobject.cpp | 84 + .../src/snippets/eventfilters/filterobject.h | 69 + .../doc/src/snippets/eventfilters/main.cpp | 64 + .../doc/src/snippets/events/events.cpp | 107 + .../explicitlysharedemployee/employee.cpp | 119 + .../explicitlysharedemployee/employee.h | 84 + .../explicitlysharedemployee/main.cpp | 60 + .../doc/src/snippets/file/file.cpp | 130 + .../doc/src/snippets/filedialogurls.cpp | 71 + .../doc/src/snippets/fileinfo/main.cpp | 102 + .../snippets/graphicssceneadditemsnippet.cpp | 90 + .../src/snippets/i18n-non-qt-class/main.cpp | 64 + .../snippets/i18n-non-qt-class/myclass.cpp | 57 + .../src/snippets/i18n-non-qt-class/myclass.h | 69 + .../src/snippets/i18n-non-qt-class/myclass.ts | 12 + .../snippets/i18n-non-qt-class/resources.qrc | 6 + .../translations/i18n-non-qt-class_en.ts | 12 + .../translations/i18n-non-qt-class_fr.ts | 13 + .../doc/src/snippets/image/image.cpp | 69 + .../src/snippets/image/supportedformat.cpp | 56 + .../src/snippets/inherited-slot/button.cpp | 63 + .../doc/src/snippets/inherited-slot/button.h | 69 + .../doc/src/snippets/inherited-slot/main.cpp | 76 + .../doc/src/snippets/itemselection/main.cpp | 125 + .../doc/src/snippets/itemselection/model.h | 84 + .../doc/src/snippets/javastyle.cpp | 2755 +++ .../doc/src/snippets/layouts/layouts.cpp | 126 + .../doc/src/snippets/mainwindowsnippet.cpp | 58 + .../doc/src/snippets/matrix/matrix.cpp | 112 + .../doc/src/snippets/mdiareasnippets.cpp | 66 + .../doc/src/snippets/moc/main.cpp | 75 + .../doc/src/snippets/moc/myclass1.h | 75 + .../doc/src/snippets/moc/myclass2.h | 76 + .../doc/src/snippets/moc/myclass3.h | 69 + .../snippets/modelview-subclasses/main.cpp | 78 + .../snippets/modelview-subclasses/model.cpp | 162 + .../src/snippets/modelview-subclasses/model.h | 80 + .../snippets/modelview-subclasses/view.cpp | 324 + .../src/snippets/modelview-subclasses/view.h | 100 + .../snippets/modelview-subclasses/window.cpp | 122 + .../snippets/modelview-subclasses/window.h | 78 + .../doc/src/snippets/myscrollarea.cpp | 112 + .../doc/src/snippets/network/tcpwait.cpp | 71 + .../codesnippets/doc/src/snippets/ntfsp.cpp | 60 + .../src/snippets/painterpath/painterpath.cpp | 86 + .../src/snippets/patternist/anyHTMLElement.xq | 1 + .../snippets/patternist/anyXLinkAttribute.xq | 2 + .../src/snippets/patternist/bracesIncluded.xq | 1 + .../patternist/bracesIncludedResult.xml | 1 + .../src/snippets/patternist/bracesOmitted.xq | 1 + .../patternist/bracesOmittedResult.xml | 2 + .../patternist/computedTreeFragment.xq | 14 + .../src/snippets/patternist/copyAttribute.xq | 9 + .../doc/src/snippets/patternist/copyID.xq | 3 + .../snippets/patternist/directTreeFragment.xq | 7 + .../doc/src/snippets/patternist/doc.txt | 35 + .../src/snippets/patternist/docPlainHTML.xq | 1 + .../src/snippets/patternist/docPlainHTML2.xq | 1 + .../snippets/patternist/embedDataInXHTML.xq | 10 + .../snippets/patternist/embedDataInXHTML2.xq | 10 + .../snippets/patternist/emptyParagraphs.xq | 1 + .../snippets/patternist/escapeCurlyBraces.xq | 4 + .../patternist/escapeStringLiterals.xml | 2 + .../patternist/escapeStringLiterals.xq | 7 + .../patternist/expressionInsideAttribute.xq | 2 + .../src/snippets/patternist/filterOnPath.xq | 2 + .../src/snippets/patternist/filterOnStep.xq | 2 + .../src/snippets/patternist/firstParagraph.xq | 1 + .../patternist/fnStringOnAttribute.xq | 9 + .../doc/src/snippets/patternist/forClause.xq | 3 + .../doc/src/snippets/patternist/forClause2.xq | 3 + .../snippets/patternist/forClauseOnFeed.xq | 6 + .../doc/src/snippets/patternist/indented.xml | 5 + .../snippets/patternist/introAcneRemover.xq | 8 + .../src/snippets/patternist/introExample2.xq | 5 + .../patternist/introFileHierarchy.xml | 14 + .../snippets/patternist/introNavigateFS.xq | 12 + .../patternist/introductionExample.xq | 3 + .../snippets/patternist/invalidLetOrderBy.xq | 3 + .../doc/src/snippets/patternist/items.xq | 5 + .../doc/src/snippets/patternist/letOrderBy.xq | 4 + .../patternist/literalsAndOperators.xq | 2 + .../doc/src/snippets/patternist/mobeyDick.xml | 4 + .../snippets/patternist/nextLastParagraph.xq | 1 + .../nodeConstructorsAreExpressions.xq | 4 + .../patternist/nodeConstructorsInPaths.xq | 1 + .../patternist/nodeTestChildElement.xq | 1 + .../src/snippets/patternist/notIndented.xml | 1 + .../patternist/oneElementConstructor.xq | 1 + .../paragraphsExceptTheFiveFirst.xq | 1 + .../patternist/paragraphsWithTables.xq | 1 + .../doc/src/snippets/patternist/pathAB.xq | 1 + .../snippets/patternist/pathsAllParagraphs.xq | 1 + .../doc/src/snippets/patternist/simpleHTML.xq | 1 + .../src/snippets/patternist/simpleXHTML.xq | 2 + .../patternist/svgDocumentElement.xml | 1 + .../snippets/patternist/tablesInParagraphs.xq | 1 + .../src/snippets/patternist/twoSVGElements.xq | 5 + .../src/snippets/patternist/xmlStylesheet.xq | 1 + .../src/snippets/patternist/xsBooleanTrue.xq | 1 + .../patternist/xsvgDocumentElement.xml | 1 + .../src/snippets/persistentindexes/main.cpp | 61 + .../snippets/persistentindexes/mainwindow.cpp | 130 + .../snippets/persistentindexes/mainwindow.h | 80 + .../src/snippets/persistentindexes/model.h | 81 + .../doc/src/snippets/picture/picture.cpp | 121 + .../doc/src/snippets/plaintextlayout/main.cpp | 62 + .../src/snippets/plaintextlayout/window.cpp | 118 + .../doc/src/snippets/plaintextlayout/window.h | 71 + .../doc/src/snippets/pointer/pointer.cpp | 70 + .../doc/src/snippets/polygon/polygon.cpp | 96 + .../src/snippets/porting4-dropevents/main.cpp | 62 + .../snippets/porting4-dropevents/window.cpp | 134 + .../src/snippets/porting4-dropevents/window.h | 82 + .../src/snippets/printing-qprinter/errors.cpp | 68 + .../src/snippets/printing-qprinter/main.cpp | 63 + .../src/snippets/printing-qprinter/object.cpp | 81 + .../src/snippets/printing-qprinter/object.h | 62 + .../doc/src/snippets/process/process.cpp | 86 + .../src/snippets/qabstractsliderisnippet.cpp | 519 + .../doc/src/snippets/qcalendarwidget/main.cpp | 74 + .../doc/src/snippets/qcolumnview/main.cpp | 89 + .../doc/src/snippets/qdebug/qdebugsnippet.cpp | 83 + .../doc/src/snippets/qdir-filepaths/main.cpp | 64 + .../doc/src/snippets/qdir-listfiles/main.cpp | 64 + .../src/snippets/qdir-namefilters/main.cpp | 68 + .../doc/src/snippets/qelapsedtimer/main.cpp | 119 + .../doc/src/snippets/qfontdatabase/main.cpp | 74 + .../doc/src/snippets/qgl-namespace/main.cpp | 56 + .../doc/src/snippets/qlabel/main.cpp | 98 + .../doc/src/snippets/qlineargradient/main.cpp | 60 + .../snippets/qlineargradient/paintwidget.cpp | 77 + .../snippets/qlineargradient/paintwidget.h | 69 + .../doc/src/snippets/qlistview-dnd/main.cpp | 61 + .../src/snippets/qlistview-dnd/mainwindow.cpp | 93 + .../src/snippets/qlistview-dnd/mainwindow.h | 71 + .../doc/src/snippets/qlistview-dnd/model.cpp | 161 + .../doc/src/snippets/qlistview-dnd/model.h | 73 + .../doc/src/snippets/qlistview-using/main.cpp | 61 + .../snippets/qlistview-using/mainwindow.cpp | 147 + .../src/snippets/qlistview-using/mainwindow.h | 82 + .../doc/src/snippets/qlistview-using/model.h | 82 + .../doc/src/snippets/qlistwidget-dnd/main.cpp | 61 + .../snippets/qlistwidget-dnd/mainwindow.cpp | 97 + .../src/snippets/qlistwidget-dnd/mainwindow.h | 72 + .../src/snippets/qlistwidget-using/main.cpp | 61 + .../snippets/qlistwidget-using/mainwindow.cpp | 168 + .../snippets/qlistwidget-using/mainwindow.h | 82 + .../doc/src/snippets/qmacnativewidget/main.mm | 144 + .../doc/src/snippets/qmake/delegate.h | 50 + .../doc/src/snippets/qmake/main.cpp | 50 + .../doc/src/snippets/qmake/model.cpp | 50 + .../doc/src/snippets/qmake/model.h | 50 + .../src/snippets/qmake/paintwidget_unix.cpp | 54 + .../doc/src/snippets/qmake/view.h | 50 + .../snippets/qmetaobject-invokable/main.cpp | 62 + .../snippets/qmetaobject-invokable/window.cpp | 67 + .../snippets/qmetaobject-invokable/window.h | 68 + .../snippets/qprocess-environment/main.cpp | 88 + .../qprocess/qprocess-simpleexecution.cpp | 75 + .../doc/src/snippets/qquickview-ex.cpp | 67 + .../snippets/qsignalmapper/buttonwidget.cpp | 77 + .../src/snippets/qsignalmapper/buttonwidget.h | 70 + .../doc/src/snippets/qsignalmapper/main.cpp | 71 + .../src/snippets/qsignalmapper/mainwindow.h | 69 + .../qsortfilterproxymodel-details/main.cpp | 79 + .../snippets/qsortfilterproxymodel/main.cpp | 87 + .../doc/src/snippets/qsplashscreen/main.cpp | 66 + .../src/snippets/qsplashscreen/mainwindow.cpp | 60 + .../src/snippets/qsplashscreen/mainwindow.h | 64 + .../snippets/qsplashscreen/qsplashscreen.qrc | 5 + .../doc/src/snippets/qsplashscreen/splash.png | Bin 0 -> 27926 bytes .../doc/src/snippets/qsql-namespace/main.cpp | 56 + .../doc/src/snippets/qstack/main.cpp | 65 + .../doc/src/snippets/qstackedlayout/main.cpp | 99 + .../doc/src/snippets/qstackedwidget/main.cpp | 78 + .../src/snippets/qstandarditemmodel/main.cpp | 81 + .../doc/src/snippets/qstatustipevent/main.cpp | 74 + .../src/snippets/qstringlistmodel/main.cpp | 78 + .../doc/src/snippets/qstyleoption/main.cpp | 105 + .../doc/src/snippets/qstyleplugin/main.cpp | 107 + .../doc/src/snippets/qsvgwidget/main.cpp | 69 + .../src/snippets/qsvgwidget/qsvgwidget.qrc | 5 + .../doc/src/snippets/qsvgwidget/spheres.svg | 79 + .../doc/src/snippets/qsvgwidget/sunflower.svg | 188 + .../doc/src/snippets/qt-namespace/main.cpp | 56 + .../qtablewidget-dnd/Images/cubed.png | Bin 0 -> 437 bytes .../qtablewidget-dnd/Images/squared.png | Bin 0 -> 440 bytes .../src/snippets/qtablewidget-dnd/images.qrc | 6 + .../src/snippets/qtablewidget-dnd/main.cpp | 61 + .../snippets/qtablewidget-dnd/mainwindow.cpp | 153 + .../snippets/qtablewidget-dnd/mainwindow.h | 78 + .../snippets/qtablewidget-resizing/main.cpp | 61 + .../qtablewidget-resizing/mainwindow.cpp | 124 + .../qtablewidget-resizing/mainwindow.h | 77 + .../qtablewidget-using/Images/cubed.png | Bin 0 -> 437 bytes .../qtablewidget-using/Images/squared.png | Bin 0 -> 440 bytes .../snippets/qtablewidget-using/images.qrc | 6 + .../src/snippets/qtablewidget-using/main.cpp | 61 + .../qtablewidget-using/mainwindow.cpp | 159 + .../snippets/qtablewidget-using/mainwindow.h | 80 + .../doc/src/snippets/qtcast/qtcast.cpp | 89 + .../doc/src/snippets/qtcast/qtcast.h | 64 + .../doc/src/snippets/qtest-namespace/main.cpp | 57 + .../snippets/qtreeview-dnd/dragdropmodel.h | 72 + .../doc/src/snippets/qtreeview-dnd/main.cpp | 61 + .../src/snippets/qtreeview-dnd/mainwindow.cpp | 100 + .../src/snippets/qtreeview-dnd/mainwindow.h | 71 + .../src/snippets/qtreeview-dnd/treeitem.cpp | 135 + .../doc/src/snippets/qtreeview-dnd/treeitem.h | 81 + .../src/snippets/qtreeview-dnd/treemodel.cpp | 272 + .../src/snippets/qtreeview-dnd/treemodel.h | 89 + .../src/snippets/qtreewidget-using/main.cpp | 61 + .../snippets/qtreewidget-using/mainwindow.cpp | 111 + .../snippets/qtreewidget-using/mainwindow.h | 87 + .../qtreewidgetitemiterator-using/main.cpp | 61 + .../mainwindow.cpp | 59 + .../mainwindow.h | 87 + .../src/snippets/qtscript/evaluation/main.cpp | 60 + .../qtscript/registeringobjects/main.cpp | 66 + .../qtscript/registeringobjects/myobject.cpp | 63 + .../qtscript/registeringobjects/myobject.h | 67 + .../qtscript/registeringvalues/main.cpp | 62 + .../snippets/qtscript/scriptedslot/main.cpp | 82 + .../snippets/qtscript/scriptedslot/object.js | 18 + .../qtscript/scriptedslot/scriptedslot.qrc | 5 + .../snippets/quiloader/doc_src_qtuiloader.cpp | 53 + .../doc/src/snippets/quiloader/main.cpp | 77 + .../doc/src/snippets/quiloader/myform.ui | 130 + .../doc/src/snippets/quiloader/mywidget.cpp | 69 + .../doc/src/snippets/quiloader/mywidget.h | 62 + .../doc/src/snippets/quiloader/mywidget.qrc | 5 + .../src/snippets/qx11embedcontainer/main.cpp | 77 + .../snippets/qx11embedwidget/embedwidget.cpp | 76 + .../snippets/qx11embedwidget/embedwidget.h | 75 + .../doc/src/snippets/qx11embedwidget/main.cpp | 71 + .../src/snippets/qxmlquery/bindingExample.cpp | 59 + .../doc/src/snippets/qxmlschema/main.cpp | 124 + .../src/snippets/qxmlschemavalidator/main.cpp | 112 + .../src/snippets/qxmlstreamwriter/main.cpp | 86 + .../src/snippets/reading-selections/main.cpp | 69 + .../src/snippets/reading-selections/model.h | 84 + .../snippets/reading-selections/window.cpp | 130 + .../src/snippets/reading-selections/window.h | 77 + .../doc/src/snippets/scribe-overview/main.cpp | 81 + .../doc/src/snippets/scriptdebugger.cpp | 113 + .../src/snippets/separations/finalwidget.cpp | 136 + .../src/snippets/separations/finalwidget.h | 87 + .../doc/src/snippets/separations/main.cpp | 60 + .../src/snippets/separations/screenwidget.cpp | 227 + .../src/snippets/separations/screenwidget.h | 96 + .../doc/src/snippets/separations/viewer.cpp | 338 + .../doc/src/snippets/separations/viewer.h | 99 + .../doc/src/snippets/settings/settings.cpp | 188 + .../doc/src/snippets/shareddirmodel/main.cpp | 90 + .../src/snippets/sharedemployee/employee.cpp | 51 + .../src/snippets/sharedemployee/employee.h | 104 + .../doc/src/snippets/sharedemployee/main.cpp | 60 + .../src/snippets/sharedtablemodel/main.cpp | 99 + .../doc/src/snippets/sharedtablemodel/model.h | 84 + .../snippets/signalmapper/accountsfile.txt | 1 + .../src/snippets/signalmapper/filereader.cpp | 109 + .../src/snippets/signalmapper/filereader.h | 78 + .../doc/src/snippets/signalmapper/main.cpp | 63 + .../src/snippets/signalmapper/reportfile.txt | 2 + .../doc/src/snippets/signalmapper/taxfile.txt | 1 + .../snippets/signalsandslots/lcdnumber.cpp | 87 + .../src/snippets/signalsandslots/lcdnumber.h | 98 + .../signalsandslots/signalsandslots.cpp | 94 + .../signalsandslots/signalsandslots.h | 99 + .../doc/src/snippets/simplemodel-use/main.cpp | 103 + .../doc/src/snippets/simpleparse/handler.cpp | 148 + .../doc/src/snippets/simpleparse/handler.h | 77 + .../doc/src/snippets/simpleparse/main.cpp | 97 + .../doc/src/snippets/splitter/splitter.cpp | 76 + .../doc/src/snippets/splitterhandle/main.cpp | 67 + .../src/snippets/splitterhandle/splitter.cpp | 88 + .../src/snippets/splitterhandle/splitter.h | 61 + .../src/snippets/sqldatabase/sqldatabase.cpp | 489 + .../doc/src/snippets/streaming/main.cpp | 118 + .../doc/src/snippets/stringlistmodel/main.cpp | 89 + .../src/snippets/stringlistmodel/model.cpp | 170 + .../doc/src/snippets/stringlistmodel/model.h | 82 + .../doc/src/snippets/styles/styles.cpp | 80 + .../snippets/stylesheet/common-mistakes.cpp | 62 + .../src/snippets/textblock-formats/main.cpp | 128 + .../src/snippets/textblock-fragments/main.cpp | 62 + .../textblock-fragments/mainwindow.cpp | 158 + .../snippets/textblock-fragments/mainwindow.h | 75 + .../textblock-fragments/xmlwriter.cpp | 128 + .../snippets/textblock-fragments/xmlwriter.h | 74 + .../src/snippets/textdocument-blocks/main.cpp | 62 + .../textdocument-blocks/mainwindow.cpp | 166 + .../snippets/textdocument-blocks/mainwindow.h | 75 + .../textdocument-blocks/xmlwriter.cpp | 94 + .../snippets/textdocument-blocks/xmlwriter.h | 71 + .../textdocument-charformats/main.cpp | 102 + .../src/snippets/textdocument-css/main.cpp | 58 + .../snippets/textdocument-cursors/main.cpp | 89 + .../src/snippets/textdocument-find/main.cpp | 101 + .../src/snippets/textdocument-frames/main.cpp | 63 + .../textdocument-frames/mainwindow.cpp | 171 + .../snippets/textdocument-frames/mainwindow.h | 74 + .../textdocument-frames/xmlwriter.cpp | 126 + .../snippets/textdocument-frames/xmlwriter.h | 74 + .../snippets/textdocument-imagedrop/main.cpp | 62 + .../textdocument-imagedrop/textedit.cpp | 81 + .../textdocument-imagedrop/textedit.h | 66 + .../textdocument-imageformat/images.qrc | 6 + .../images/advert.png | Bin 0 -> 16291 bytes .../images/newimage.png | Bin 0 -> 5490 bytes .../textdocument-imageformat/main.cpp | 108 + .../snippets/textdocument-images/images.qrc | 5 + .../textdocument-images/images/advert.png | Bin 0 -> 16291 bytes .../src/snippets/textdocument-images/main.cpp | 82 + .../snippets/textdocument-listitems/main.cpp | 62 + .../textdocument-listitems/mainwindow.cpp | 207 + .../textdocument-listitems/mainwindow.h | 85 + .../src/snippets/textdocument-lists/main.cpp | 62 + .../textdocument-lists/mainwindow.cpp | 201 + .../snippets/textdocument-lists/mainwindow.h | 89 + .../snippets/textdocument-printing/main.cpp | 62 + .../textdocument-printing/mainwindow.cpp | 134 + .../textdocument-printing/mainwindow.h | 82 + .../snippets/textdocument-selections/main.cpp | 62 + .../textdocument-selections/mainwindow.cpp | 213 + .../textdocument-selections/mainwindow.h | 89 + .../src/snippets/textdocument-tables/main.cpp | 62 + .../textdocument-tables/mainwindow.cpp | 125 + .../snippets/textdocument-tables/mainwindow.h | 75 + .../textdocument-tables/xmlwriter.cpp | 163 + .../snippets/textdocument-tables/xmlwriter.h | 74 + .../snippets/textdocument-texttable/main.cpp | 56 + .../src/snippets/textdocumentendsnippet.cpp | 68 + .../doc/src/snippets/threads/threads.cpp | 130 + .../doc/src/snippets/threads/threads.h | 61 + .../doc/src/snippets/timeline/main.cpp | 82 + .../doc/src/snippets/timers/timers.cpp | 88 + .../doc/src/snippets/transform/main.cpp | 110 + .../uitools/calculatorform/calculatorform.ui | 303 + .../snippets/uitools/calculatorform/main.cpp | 67 + .../src/snippets/updating-selections/main.cpp | 69 + .../src/snippets/updating-selections/model.h | 84 + .../snippets/updating-selections/window.cpp | 119 + .../src/snippets/updating-selections/window.h | 77 + .../doc/src/snippets/webkit/webpage/main.cpp | 93 + .../doc/src/snippets/whatsthis/whatsthis.cpp | 57 + .../doc/src/snippets/widget-mask/main.cpp | 64 + .../doc/src/snippets/widget-mask/mask.qrc | 5 + .../doc/src/snippets/widget-mask/tux.png | Bin 0 -> 12191 bytes .../doc/src/snippets/widgetdelegate.cpp | 72 + .../widgets-tutorial/childwidget/main.cpp | 67 + .../widgets-tutorial/nestedlayouts/main.cpp | 98 + .../widgets-tutorial/toplevel/main.cpp | 63 + .../widgets-tutorial/windowlayout/main.cpp | 69 + .../src/snippets/xml/rsslisting/handler.cpp | 188 + .../doc/src/snippets/xml/rsslisting/handler.h | 84 + .../doc/src/snippets/xml/rsslisting/main.cpp | 73 + .../snippets/xml/rsslisting/rsslisting.cpp | 255 + .../src/snippets/xml/rsslisting/rsslisting.h | 96 + .../examples/dbus/example-client.py | 100 + .../examples/dbus/example-server.py | 119 + .../cppextensions/plugins/plugin.cpp | 68 + .../cppextensions/plugins/plugins.qml | 62 + .../dialogs/classwizard/classwizard.cpp | 259 + .../dialogs/classwizard/classwizard.qrc | 11 + .../dialogs/classwizard/images/background.png | Bin 0 -> 22578 bytes .../dialogs/classwizard/images/banner.png | Bin 0 -> 3947 bytes .../dialogs/classwizard/images/logo1.png | Bin 0 -> 1619 bytes .../dialogs/classwizard/images/logo2.png | Bin 0 -> 1619 bytes .../dialogs/classwizard/images/logo3.png | Bin 0 -> 1619 bytes .../dialogs/classwizard/images/watermark1.png | Bin 0 -> 14516 bytes .../dialogs/classwizard/images/watermark2.png | Bin 0 -> 14912 bytes .../examples/dialogs/classwizard/main.cpp | 73 + .../examples/dialogs/extension/finddialog.cpp | 119 + .../dialogs/licensewizard/images/logo.png | Bin 0 -> 1810 bytes .../licensewizard/images/watermark.png | Bin 0 -> 34998 bytes .../dialogs/licensewizard/licensewizard.cpp | 358 + .../dialogs/licensewizard/licensewizard.h | 173 + .../dialogs/licensewizard/licensewizard.qrc | 6 + .../examples/dialogs/licensewizard/main.cpp | 73 + .../dialogs/standarddialogs/dialog.cpp | 80 + .../examples/dialogs/tabdialog/tabdialog.cpp | 193 + .../dialogs/trivialwizard/trivialwizard.cpp | 143 + .../graphicsview/simpleanchorlayout/main.cpp | 72 + .../imageprovider/imageprovider-example.qml | 59 + .../examples/imageprovider/imageprovider.cpp | 83 + .../mysortfilterproxymodel.cpp | 109 + .../itemviews/pixelator/pixeldelegate.cpp | 103 + .../itemviews/simpledommodel/dommodel.cpp | 197 + .../examples/linguist/hellotr/main.cpp | 78 + .../mainwindows/application/mainwindow.cpp | 359 + .../mainwindows/dockwidgets/mainwindow.cpp | 255 + .../examples/mainwindows/mainwindow.cpp | 367 + .../examples/mainwindows/mdi/mainwindow.cpp | 381 + .../examples/mainwindows/menus/mainwindow.cpp | 367 + .../examples/mainwindows/sdi/mainwindow.cpp | 60 + .../examples/quick/plugins/plugins.qml | 61 + .../relationaltablemodel.cpp | 120 + .../richtext/textobject/svgtextobject.h | 79 + .../sql/querymodel/editablesqlmodel.cpp | 112 + .../examples/svggenerator/window.cpp | 107 + .../uitools/textfinder/textfinder.cpp | 141 + .../widgets/analogclock/analogclock.cpp | 155 + .../examples/widgets/groupbox/window.cpp | 187 + .../widgets/icons/iconsizespinbox.cpp | 72 + .../examples/widgets/spinboxes/window.cpp | 249 + .../xml/streambookmarks/xbelreader.cpp | 210 + .../examples/xml/streambookmarks/xbelreader.h | 90 + .../xml/streambookmarks/xbelwriter.cpp | 100 + .../snippets/customstyle/main.cpp | 61 + .../snippets/textdocument-resources/main.cpp | 93 + .../qtwebkit_qwebinspector_snippet.cpp | 60 + .../qtwebkit_qwebview_snippet.cpp | 80 + .../webkitsnippets/simple/main.cpp | 63 + .../webkitsnippets/webelement/main.cpp | 114 + .../webkitsnippets/webpage/main.cpp | 83 + sources/pyside2/doc/conf.py.in | 172 + sources/pyside2/doc/contents.rst | 18 + .../doc/extras/PySide.QtCore.ClassInfo.rst | 23 + .../doc/extras/PySide.QtCore.Signal.rst | 39 + .../pyside2/doc/extras/PySide.QtCore.Slot.rst | 39 + sources/pyside2/doc/extras/PySide.QtCore.rst | 5 + sources/pyside2/doc/extras/PySide.QtGui.rst | 7 + sources/pyside2/doc/extras/PySide.QtHelp.rst | 5 + .../doc/extras/PySide.QtMultimedia.rst | 7 + .../pyside2/doc/extras/PySide.QtNetwork.rst | 5 + .../pyside2/doc/extras/PySide.QtOpenGL.rst | 14 + .../pyside2/doc/extras/PySide.QtScript.rst | 21 + .../doc/extras/PySide.QtScriptTools.rst | 5 + sources/pyside2/doc/extras/PySide.QtSql.rst | 5 + sources/pyside2/doc/extras/PySide.QtSvg.rst | 5 + sources/pyside2/doc/extras/PySide.QtTest.rst | 7 + .../pyside2/doc/extras/PySide.QtUiTools.rst | 9 + .../pyside2/doc/extras/PySide.QtWebKit.rst | 94 + sources/pyside2/doc/extras/PySide.QtXml.rst | 5 + .../doc/extras/PySide.QtXmlPatterns.rst | 12 + sources/pyside2/doc/gettingstarted.rst | 87 + sources/pyside2/doc/index.rst | 111 + sources/pyside2/doc/inheritance_diagram.py | 372 + sources/pyside2/doc/modules.rst | 28 + sources/pyside2/doc/pyhtml2devhelp.py | 256 + sources/pyside2/doc/pyside-config.qdocconf.in | 17 + sources/pyside2/doc/pysideapi2.rst | 81 + sources/pyside2/doc/pysideinclude.py | 147 + sources/pyside2/doc/pysideversion.rst | 31 + .../pyside2/doc/qtattributionsscannertorst.py | 131 + .../qtmodules/pyside-qt3dextras.qdocconf.in | 3 + .../doc/qtmodules/pyside-qtcharts.qdocconf.in | 2 + .../qtmodules/pyside-qtconcurrent.qdocconf.in | 2 + .../doc/qtmodules/pyside-qtcore.qdocconf.in | 2 + .../pyside-qtdatavisualization.qdocconf.in | 2 + .../doc/qtmodules/pyside-qtgui.qdocconf.in | 2 + .../doc/qtmodules/pyside-qthelp.qdocconf.in | 2 + .../qtmodules/pyside-qtlocation.qdocconf.in | 3 + .../qtmodules/pyside-qtmacextras.qdocconf.in | 2 + .../pyside-qtmultimediawidgets.qdocconf.in | 3 + .../qtmodules/pyside-qtnetwork.qdocconf.in | 2 + .../doc/qtmodules/pyside-qtopengl.qdocconf.in | 2 + .../pyside-qtpositioning.qdocconf.in | 3 + .../pyside-qtprintsupport.qdocconf.in | 2 + .../doc/qtmodules/pyside-qtqml.qdocconf.in | 5 + .../pyside-qtquickwidgets.qdocconf.in | 3 + .../doc/qtmodules/pyside-qtscxml.qdocconf.in | 3 + .../qtmodules/pyside-qtsensors.qdocconf.in | 3 + .../doc/qtmodules/pyside-qtsql.qdocconf.in | 2 + .../doc/qtmodules/pyside-qtsvg.qdocconf.in | 2 + .../doc/qtmodules/pyside-qttest.qdocconf.in | 2 + .../pyside-qttexttospeech.qdocconf.in | 3 + .../qtmodules/pyside-qtuitools.qdocconf.in | 2 + .../qtmodules/pyside-qtwebchannel.qdocconf.in | 2 + .../pyside-qtwebenginewidgets.qdocconf.in | 3 + .../qtmodules/pyside-qtwebsockets.qdocconf.in | 2 + .../qtmodules/pyside-qtwidgets.qdocconf.in | 2 + .../qtmodules/pyside-qtwinextras.qdocconf.in | 2 + .../qtmodules/pyside-qtx11extras.qdocconf.in | 2 + .../doc/qtmodules/pyside-qtxml.qdocconf.in | 2 + .../pyside-qtxmlpatterns.qdocconf.in | 2 + sources/pyside2/doc/src/README.md | 1 + .../examples/images/tabbedbrowser.png | Bin 0 -> 37147 bytes .../doc/tutorials/examples/tabbedbrowser.rst | 57 + sources/pyside2/doc/tutorials/index.rst | 25 + .../declarative-adv-tutorial1.png | Bin 0 -> 203229 bytes .../declarative-adv-tutorial2.png | Bin 0 -> 249451 bytes .../declarative-adv-tutorial3.png | Bin 0 -> 283378 bytes .../declarative-adv-tutorial4.gif | Bin 0 -> 1687445 bytes .../declarative-samegame.png | Bin 0 -> 124904 bytes .../tutorials/qmladvancedtutorial/index.rst | 35 + .../qmladvancedtutorial/samegame.tar.bz2 | Bin 0 -> 60105 bytes .../samegame/samegame1/Block.qml | 63 + .../samegame/samegame1/Button.qml | 93 + .../samegame/samegame1/samegame.qml | 92 + .../samegame/samegame1/samegame1.qmlproject | 16 + .../samegame/samegame2/Block.qml | 61 + .../samegame/samegame2/Button.qml | 91 + .../samegame/samegame2/samegame.js | 63 + .../samegame/samegame2/samegame.qml | 95 + .../samegame/samegame2/samegame2.qmlproject | 16 + .../samegame/samegame3/Block.qml | 73 + .../samegame/samegame3/Button.qml | 91 + .../samegame/samegame3/Dialog.qml | 81 + .../samegame/samegame3/samegame.js | 174 + .../samegame/samegame3/samegame.qml | 119 + .../samegame/samegame3/samegame3.qmlproject | 16 + .../samegame/samegame4/content/BoomBlock.qml | 132 + .../samegame/samegame4/content/Button.qml | 91 + .../samegame/samegame4/content/Dialog.qml | 117 + .../samegame/samegame4/content/samegame.js | 225 + .../samegame/samegame4/highscores/README | 1 + .../samegame4/highscores/score_data.xml | 2 + .../samegame4/highscores/score_style.xsl | 28 + .../samegame/samegame4/highscores/scores.php | 31 + .../samegame/samegame4/samegame.qml | 125 + .../samegame/samegame4/samegame4.qmlproject | 16 + .../samegame/shared/pics/background.jpg | Bin 0 -> 36473 bytes .../samegame/shared/pics/blueStar.png | Bin 0 -> 278 bytes .../samegame/shared/pics/blueStone.png | Bin 0 -> 3054 bytes .../samegame/shared/pics/greenStar.png | Bin 0 -> 273 bytes .../samegame/shared/pics/greenStone.png | Bin 0 -> 2932 bytes .../samegame/shared/pics/redStar.png | Bin 0 -> 274 bytes .../samegame/shared/pics/redStone.png | Bin 0 -> 2902 bytes .../samegame/shared/pics/star.png | Bin 0 -> 262 bytes .../samegame/shared/pics/yellowStone.png | Bin 0 -> 3056 bytes .../qmladvancedtutorial/samegame1.rst | 71 + .../qmladvancedtutorial/samegame2.rst | 70 + .../qmladvancedtutorial/samegame3.rst | 124 + .../qmladvancedtutorial/samegame4.rst | 233 + .../qmltutorial/declarative-tutorial1.png | Bin 0 -> 3577 bytes .../qmltutorial/declarative-tutorial2.png | Bin 0 -> 3913 bytes .../declarative-tutorial3_animation.gif | Bin 0 -> 301974 bytes .../tutorials/qmltutorial/helloworld.tar.bz2 | Bin 0 -> 2401 bytes .../tutorials/qmltutorial/helloworld/Cell.qml | 82 + .../qmltutorial/helloworld/tutorial1.qml | 73 + .../qmltutorial/helloworld/tutorial2.qml | 82 + .../qmltutorial/helloworld/tutorial3.qml | 101 + .../doc/tutorials/qmltutorial/index.rst | 25 + .../doc/tutorials/qmltutorial/step1.rst | 66 + .../doc/tutorials/qmltutorial/step2.rst | 81 + .../doc/tutorials/qmltutorial/step3.rst | 46 + sources/pyside2/doc/typesystem_doc.xml.in | 63 + sources/pyside2/libpyside/CMakeLists.txt | 169 + .../libpyside/PySide2Config-spec.cmake.in | 18 + .../pyside2/libpyside/PySide2Config.cmake.in | 5 + .../libpyside/PySide2ConfigVersion.cmake.in | 10 + sources/pyside2/libpyside/destroylistener.cpp | 106 + sources/pyside2/libpyside/destroylistener.h | 72 + .../pyside2/libpyside/dynamicqmetaobject.cpp | 901 + .../pyside2/libpyside/dynamicqmetaobject.h | 82 + .../pyside2/libpyside/dynamicqmetaobject_p.h | 108 + sources/pyside2/libpyside/globalreceiver.cpp | 329 + sources/pyside2/libpyside/globalreceiver.h | 80 + .../pyside2/libpyside/globalreceiverv2.cpp | 357 + sources/pyside2/libpyside/globalreceiverv2.h | 148 + sources/pyside2/libpyside/pyside.cpp | 549 + sources/pyside2/libpyside/pyside.h | 172 + sources/pyside2/libpyside/pyside2.pc.in | 14 + sources/pyside2/libpyside/pysideclassinfo.cpp | 204 + sources/pyside2/libpyside/pysideclassinfo.h | 68 + sources/pyside2/libpyside/pysideclassinfo_p.h | 72 + sources/pyside2/libpyside/pysidemacros.h | 64 + .../pyside2/libpyside/pysidemetafunction.cpp | 227 + .../pyside2/libpyside/pysidemetafunction.h | 76 + .../pyside2/libpyside/pysidemetafunction_p.h | 62 + sources/pyside2/libpyside/pysideproperty.cpp | 497 + sources/pyside2/libpyside/pysideproperty.h | 117 + sources/pyside2/libpyside/pysideproperty_p.h | 184 + sources/pyside2/libpyside/pysideqflags.cpp | 211 + sources/pyside2/libpyside/pysideqflags.h | 79 + sources/pyside2/libpyside/pysidesignal.cpp | 1057 + sources/pyside2/libpyside/pysidesignal.h | 173 + sources/pyside2/libpyside/pysidesignal_p.h | 82 + sources/pyside2/libpyside/pysideslot.cpp | 194 + sources/pyside2/libpyside/pysideslot_p.h | 49 + sources/pyside2/libpyside/pysideweakref.cpp | 113 + sources/pyside2/libpyside/pysideweakref.h | 56 + .../pyside2/libpyside/signalmanager.cpp.in | 692 + sources/pyside2/libpyside/signalmanager.h | 122 + sources/pyside2/plugins/CMakeLists.txt | 36 + sources/pyside2/plugins/customwidget.cpp | 148 + sources/pyside2/plugins/customwidget.h | 81 + sources/pyside2/plugins/customwidgets.cpp | 84 + sources/pyside2/plugins/customwidgets.h | 71 + sources/pyside2/pyside_version.py | 55 + sources/pyside2/tests/CMakeLists.txt | 67 + .../tests/Qt3DAnimation/CMakeLists.txt | 1 + sources/pyside2/tests/Qt3DCore/CMakeLists.txt | 1 + .../pyside2/tests/Qt3DExtras/CMakeLists.txt | 1 + .../tests/Qt3DExtras/qt3dextras_test.py | 154 + .../pyside2/tests/Qt3DInput/CMakeLists.txt | 1 + .../pyside2/tests/Qt3DLogic/CMakeLists.txt | 1 + .../pyside2/tests/Qt3DQuick/CMakeLists.txt | 1 + .../pyside2/tests/Qt3DRender/CMakeLists.txt | 1 + .../tests/QtAxContainer/CMakeLists.txt | 1 + sources/pyside2/tests/QtCharts/CMakeLists.txt | 1 + .../pyside2/tests/QtCharts/qcharts_test.py | 63 + .../pyside2/tests/QtConcurrent/CMakeLists.txt | 1 + sources/pyside2/tests/QtCore/CMakeLists.txt | 133 + .../pyside2/tests/QtCore/attr_cache_py3k.py | 65 + .../tests/QtCore/blocking_signals_test.py | 143 + sources/pyside2/tests/QtCore/bug_1019.py | 60 + sources/pyside2/tests/QtCore/bug_1031.py | 33 + sources/pyside2/tests/QtCore/bug_1063.py | 58 + sources/pyside2/tests/QtCore/bug_1069.py | 50 + sources/pyside2/tests/QtCore/bug_278_test.py | 52 + sources/pyside2/tests/QtCore/bug_332.py | 46 + sources/pyside2/tests/QtCore/bug_408.py | 56 + sources/pyside2/tests/QtCore/bug_428.py | 46 + sources/pyside2/tests/QtCore/bug_462.py | 74 + sources/pyside2/tests/QtCore/bug_505.py | 50 + sources/pyside2/tests/QtCore/bug_515.py | 46 + sources/pyside2/tests/QtCore/bug_606.py | 62 + sources/pyside2/tests/QtCore/bug_656.py | 37 + sources/pyside2/tests/QtCore/bug_686.py | 116 + sources/pyside2/tests/QtCore/bug_699.py | 45 + sources/pyside2/tests/QtCore/bug_706.py | 55 + sources/pyside2/tests/QtCore/bug_820.py | 97 + sources/pyside2/tests/QtCore/bug_826.py | 57 + sources/pyside2/tests/QtCore/bug_829.py | 65 + sources/pyside2/tests/QtCore/bug_835.py | 93 + sources/pyside2/tests/QtCore/bug_920.py | 53 + sources/pyside2/tests/QtCore/bug_927.py | 52 + sources/pyside2/tests/QtCore/bug_931.py | 49 + sources/pyside2/tests/QtCore/bug_938.py | 43 + sources/pyside2/tests/QtCore/bug_953.py | 46 + sources/pyside2/tests/QtCore/bug_987.py | 43 + sources/pyside2/tests/QtCore/bug_994.py | 54 + .../pyside2/tests/QtCore/bug_PYSIDE-164.py | 69 + sources/pyside2/tests/QtCore/bug_PYSIDE-42.py | 44 + .../pyside2/tests/QtCore/child_event_test.py | 81 + .../pyside2/tests/QtCore/classinfo_test.py | 110 + sources/pyside2/tests/QtCore/deepcopy_test.py | 112 + .../pyside2/tests/QtCore/deletelater_test.py | 50 + .../tests/QtCore/destroysignal_test.py | 55 + .../tests/QtCore/duck_punching_test.py | 102 + .../pyside2/tests/QtCore/emoji_string_test.py | 78 + sources/pyside2/tests/QtCore/hash_test.py | 86 + sources/pyside2/tests/QtCore/inherits_test.py | 44 + sources/pyside2/tests/QtCore/max_signals.py | 62 + .../tests/QtCore/missing_symbols_test.py | 43 + .../pyside2/tests/QtCore/mockclass_test.py | 55 + .../pyside2/tests/QtCore/python_conversion.py | 93 + sources/pyside2/tests/QtCore/qabs_test.py | 48 + .../tests/QtCore/qabstractitemmodel_test.py | 69 + .../tests/QtCore/qabstracttransition_test.py | 184 + .../tests/QtCore/qanimationgroup_test.py | 53 + .../pyside2/tests/QtCore/qbitarray_test.py | 148 + .../QtCore/qbytearray_buffer_protocol_test.py | 53 + .../qbytearray_concatenation_operator_test.py | 59 + .../QtCore/qbytearray_operator_iadd_test.py | 87 + .../tests/QtCore/qbytearray_operator_test.py | 111 + .../pyside2/tests/QtCore/qbytearray_test.py | 270 + .../pyside2/tests/QtCore/qcollator_test.py | 61 + .../tests/QtCore/qcommandlineparser_test.py | 56 + .../QtCore/qcoreapplication_instance_test.py | 49 + .../tests/QtCore/qcoreapplication_test.py | 40 + .../pyside2/tests/QtCore/qdatastream_test.py | 355 + sources/pyside2/tests/QtCore/qdate_test.py | 62 + .../pyside2/tests/QtCore/qdatetime_test.py | 51 + .../pyside2/tests/QtCore/qeasingcurve_test.py | 54 + sources/pyside2/tests/QtCore/qenum_test.py | 74 + sources/pyside2/tests/QtCore/qevent_test.py | 53 + sources/pyside2/tests/QtCore/qfile_test.py | 88 + .../pyside2/tests/QtCore/qfileinfo_test.py | 44 + .../pyside2/tests/QtCore/qfileread_test.py | 83 + sources/pyside2/tests/QtCore/qflags_test.py | 121 + sources/pyside2/tests/QtCore/qhandle_test.py | 45 + .../tests/QtCore/qinstallmsghandler_test.py | 81 + sources/pyside2/tests/QtCore/qlinef_test.py | 49 + sources/pyside2/tests/QtCore/qlocale_test.py | 69 + .../pyside2/tests/QtCore/qlockfile_test.py | 55 + .../QtCore/qmessageauthenticationcode_test.py | 46 + .../pyside2/tests/QtCore/qmetaobject_test.py | 84 + .../tests/QtCore/qmimedatabase_test.py | 79 + .../qmodelindex_internalpointer_test.py | 78 + .../QtCore/qobject_children_segfault_test.py | 56 + .../QtCore/qobject_connect_notify_test.py | 104 + .../tests/QtCore/qobject_destructor.py | 47 + .../tests/QtCore/qobject_event_filter_test.py | 143 + .../tests/QtCore/qobject_inherits_test.py | 126 + .../QtCore/qobject_objectproperty_test.py | 58 + .../tests/QtCore/qobject_parent_test.py | 287 + .../tests/QtCore/qobject_property_test.py | 69 + .../QtCore/qobject_protected_methods_test.py | 67 + sources/pyside2/tests/QtCore/qobject_test.py | 83 + .../tests/QtCore/qobject_timer_event_test.py | 73 + .../QtCore/qobject_tr_as_instance_test.py | 67 + .../QtCore/qoperatingsystemversion_test.py | 40 + sources/pyside2/tests/QtCore/qpoint_test.py | 48 + sources/pyside2/tests/QtCore/qprocess_test.py | 58 + .../tests/QtCore/qproperty_decorator.py | 63 + .../tests/QtCore/qrandomgenerator_test.py | 49 + sources/pyside2/tests/QtCore/qrect_test.py | 141 + sources/pyside2/tests/QtCore/qregexp_test.py | 48 + .../tests/QtCore/qregularexpression_test.py | 56 + .../pyside2/tests/QtCore/qresource_test.py | 70 + sources/pyside2/tests/QtCore/qsize_test.py | 55 + .../pyside2/tests/QtCore/qslot_object_test.py | 76 + .../tests/QtCore/qsocketnotifier_test.py | 59 + sources/pyside2/tests/QtCore/qsrand_test.py | 44 + .../tests/QtCore/qstandardpaths_test.py | 50 + sources/pyside2/tests/QtCore/qstate_test.py | 64 + .../tests/QtCore/qstatemachine_test.py | 97 + .../pyside2/tests/QtCore/qstorageinfo_test.py | 43 + sources/pyside2/tests/QtCore/qstring_test.py | 51 + sources/pyside2/tests/QtCore/qsysinfo_test.py | 42 + .../pyside2/tests/QtCore/qtext_codec_test.py | 48 + .../pyside2/tests/QtCore/qtextstream_test.py | 115 + .../tests/QtCore/qthread_prod_cons_test.py | 136 + .../tests/QtCore/qthread_signal_test.py | 91 + sources/pyside2/tests/QtCore/qthread_test.py | 108 + .../tests/QtCore/qtimer_singleshot_test.py | 106 + .../tests/QtCore/qtimer_timeout_test.py | 87 + .../pyside2/tests/QtCore/qtimezone_test.py | 44 + .../pyside2/tests/QtCore/qtnamespace_test.py | 48 + sources/pyside2/tests/QtCore/quoteEnUS.txt | 1 + sources/pyside2/tests/QtCore/qurl_test.py | 163 + .../pyside2/tests/QtCore/qurlquery_test.py | 59 + sources/pyside2/tests/QtCore/quuid_test.py | 45 + .../tests/QtCore/qversionnumber_test.py | 48 + sources/pyside2/tests/QtCore/repr_test.py | 106 + sources/pyside2/tests/QtCore/resources.qrc | 7 + sources/pyside2/tests/QtCore/resources_mc.py | 3571 +++ sources/pyside2/tests/QtCore/sample.png | Bin 0 -> 55944 bytes .../tests/QtCore/setprop_on_ctor_test.py | 41 + .../tests/QtCore/staticMetaObject_test.py | 51 + .../tests/QtCore/static_method_test.py | 84 + .../tests/QtCore/thread_signals_test.py | 61 + sources/pyside2/tests/QtCore/tr_noop_test.py | 76 + .../pyside2/tests/QtCore/translation_test.py | 85 + .../tests/QtCore/translations/trans_latin.qm | Bin 0 -> 125 bytes .../tests/QtCore/translations/trans_latin.ts | 11 + .../QtCore/translations/trans_russian.qm | Bin 0 -> 114 bytes .../QtCore/translations/trans_russian.ts | 11 + .../tests/QtCore/unaryoperator_test.py | 67 + sources/pyside2/tests/QtCore/unicode_test.py | 63 + .../pyside2/tests/QtCore/versioninfo_test.py | 48 + .../tests/QtDataVisualization/CMakeLists.txt | 1 + .../datavisualization_test.py | 85 + .../pyside2/tests/QtDesigner/CMakeLists.txt | 1 + sources/pyside2/tests/QtGui/CMakeLists.txt | 48 + sources/pyside2/tests/QtGui/bug_1091.py | 40 + sources/pyside2/tests/QtGui/bug_300_test.py | 44 + sources/pyside2/tests/QtGui/bug_367.py | 50 + sources/pyside2/tests/QtGui/bug_480.py | 53 + sources/pyside2/tests/QtGui/bug_606.py | 54 + sources/pyside2/tests/QtGui/bug_617.py | 49 + sources/pyside2/tests/QtGui/bug_652.py | 58 + sources/pyside2/tests/QtGui/bug_660.py | 55 + sources/pyside2/tests/QtGui/bug_716.py | 36 + sources/pyside2/tests/QtGui/bug_740.py | 41 + sources/pyside2/tests/QtGui/bug_743.py | 43 + sources/pyside2/tests/QtGui/bug_991.py | 43 + sources/pyside2/tests/QtGui/bug_PYSIDE-344.py | 64 + sources/pyside2/tests/QtGui/bug_PYSIDE-41.py | 72 + sources/pyside2/tests/QtGui/deepcopy_test.py | 150 + .../float_to_int_implicit_conversion_test.py | 59 + .../pyside2/tests/QtGui/pyside_reload_test.py | 84 + .../pyside2/tests/QtGui/qcolor_reduce_test.py | 59 + sources/pyside2/tests/QtGui/qcolor_test.py | 122 + sources/pyside2/tests/QtGui/qcursor_test.py | 44 + .../QtGui/qdatastream_gui_operators_test.py | 63 + .../tests/QtGui/qdesktopservices_test.py | 43 + .../pyside2/tests/QtGui/qfontmetrics_test.py | 226 + .../tests/QtGui/qguiapplication_test.py | 40 + sources/pyside2/tests/QtGui/qicon_test.py | 44 + .../tests/QtGui/qitemselection_test.py | 47 + .../pyside2/tests/QtGui/qkeysequence_test.py | 48 + sources/pyside2/tests/QtGui/qmatrix_test.py | 86 + .../pyside2/tests/QtGui/qopenglbuffer_test.py | 93 + .../pyside2/tests/QtGui/qopenglwindow_test.py | 104 + sources/pyside2/tests/QtGui/qpainter_test.py | 111 + .../pyside2/tests/QtGui/qpdfwriter_test.py | 47 + .../pyside2/tests/QtGui/qpixelformat_test.py | 50 + sources/pyside2/tests/QtGui/qpixmap_test.py | 85 + .../pyside2/tests/QtGui/qpixmapcache_test.py | 72 + sources/pyside2/tests/QtGui/qpolygonf_test.py | 55 + .../tests/QtGui/qradialgradient_test.py | 57 + .../pyside2/tests/QtGui/qrasterwindow_test.py | 86 + sources/pyside2/tests/QtGui/qregion_test.py | 49 + .../pyside2/tests/QtGui/qstylehints_test.py | 42 + .../QtGui/qtextdocument_undoredo_test.py | 58 + .../tests/QtGui/qtextdocumentwriter_test.py | 48 + sources/pyside2/tests/QtGui/qtextline_test.py | 50 + .../pyside2/tests/QtGui/qtransform_test.py | 101 + sources/pyside2/tests/QtGui/repr_test.py | 117 + sources/pyside2/tests/QtGui/sample.png | Bin 0 -> 55944 bytes sources/pyside2/tests/QtGui/timed_app_test.py | 41 + sources/pyside2/tests/QtHelp/CMakeLists.txt | 2 + sources/pyside2/tests/QtHelp/help_test.py | 41 + .../tests/QtHelp/helpsearchengine_test.py | 44 + .../pyside2/tests/QtLocation/CMakeLists.txt | 1 + sources/pyside2/tests/QtLocation/location.py | 41 + .../pyside2/tests/QtMacExtras/CMakeLists.txt | 1 + .../pyside2/tests/QtMultimedia/CMakeLists.txt | 1 + .../pyside2/tests/QtMultimedia/audio_test.py | 72 + .../tests/QtMultimediaWidgets/CMakeLists.txt | 1 + .../QtMultimediaWidgets/qmultimediawidgets.py | 59 + .../pyside2/tests/QtNetwork/CMakeLists.txt | 8 + .../tests/QtNetwork/accessManager_test.py | 71 + sources/pyside2/tests/QtNetwork/bug_1084.py | 44 + sources/pyside2/tests/QtNetwork/bug_446.py | 77 + .../pyside2/tests/QtNetwork/dnslookup_test.py | 59 + .../tests/QtNetwork/qipv6address_test.py | 50 + .../pyside2/tests/QtNetwork/tcpserver_test.py | 52 + .../pyside2/tests/QtNetwork/udpsocket_test.py | 79 + sources/pyside2/tests/QtOpenGL/CMakeLists.txt | 2 + .../pyside2/tests/QtOpenGL/qglbuffer_test.py | 72 + .../pyside2/tests/QtOpenGL/qglwidget_test.py | 47 + .../tests/QtPositioning/CMakeLists.txt | 1 + .../tests/QtPositioning/positioning.py | 43 + .../tests/QtPrintSupport/CMakeLists.txt | 2 + .../pyside2/tests/QtPrintSupport/bug_500.py | 43 + .../returnquadruplesofnumbers_test.py | 103 + sources/pyside2/tests/QtQml/CMakeLists.txt | 20 + sources/pyside2/tests/QtQml/bug_1029.py | 58 + sources/pyside2/tests/QtQml/bug_1029.qml | 43 + sources/pyside2/tests/QtQml/bug_451.py | 100 + sources/pyside2/tests/QtQml/bug_451.qml | 54 + sources/pyside2/tests/QtQml/bug_456.py | 70 + sources/pyside2/tests/QtQml/bug_456.qml | 59 + sources/pyside2/tests/QtQml/bug_557.py | 43 + sources/pyside2/tests/QtQml/bug_726.py | 71 + sources/pyside2/tests/QtQml/bug_726.qml | 59 + sources/pyside2/tests/QtQml/bug_814.py | 73 + sources/pyside2/tests/QtQml/bug_814.qml | 36 + sources/pyside2/tests/QtQml/bug_825.py | 82 + sources/pyside2/tests/QtQml/bug_825.qml | 38 + sources/pyside2/tests/QtQml/bug_847.py | 86 + sources/pyside2/tests/QtQml/bug_847.qml | 62 + sources/pyside2/tests/QtQml/bug_915.py | 58 + sources/pyside2/tests/QtQml/bug_926.py | 69 + sources/pyside2/tests/QtQml/bug_926.qml | 45 + sources/pyside2/tests/QtQml/bug_951.py | 61 + sources/pyside2/tests/QtQml/bug_951.qml | 35 + sources/pyside2/tests/QtQml/bug_995.py | 43 + sources/pyside2/tests/QtQml/bug_995.qml | 40 + sources/pyside2/tests/QtQml/bug_997.py | 52 + sources/pyside2/tests/QtQml/bug_997.qml | 34 + .../pyside2/tests/QtQml/connect_python_qml.py | 65 + .../tests/QtQml/connect_python_qml.qml | 48 + sources/pyside2/tests/QtQml/hw.qml | 48 + .../tests/QtQml/javascript_exceptions.py | 103 + .../tests/QtQml/javascript_exceptions.qml | 53 + .../QtQml/qqmlincubator_incubateWhile.py | 96 + .../QtQml/qqmlincubator_incubateWhile.qml | 67 + .../qqmlincubator_incubateWhile_component.qml | 35 + .../pyside2/tests/QtQml/qqmlnetwork_test.py | 70 + .../tests/QtQml/qquickitem_grabToImage.py | 79 + .../tests/QtQml/qquickitem_grabToImage.qml | 69 + .../pyside2/tests/QtQml/qquickview_test.py | 86 + sources/pyside2/tests/QtQml/registertype.py | 118 + sources/pyside2/tests/QtQml/registertype.qml | 57 + sources/pyside2/tests/QtQml/view.qml | 43 + sources/pyside2/tests/QtQml/viewmodel.qml | 42 + sources/pyside2/tests/QtQuick/CMakeLists.txt | 1 + .../tests/QtQuickWidgets/CMakeLists.txt | 1 + sources/pyside2/tests/QtScript/CMakeLists.txt | 5 + sources/pyside2/tests/QtScript/base_test.py | 32 + sources/pyside2/tests/QtScript/bug_1022.py | 41 + sources/pyside2/tests/QtScript/engine_test.py | 41 + .../pyside2/tests/QtScript/property_test.py | 90 + .../tests/QtScript/qscriptvalue_test.py | 72 + .../tests/QtScriptTools/CMakeLists.txt | 1 + .../tests/QtScriptTools/debugger_test.py | 75 + sources/pyside2/tests/QtScxml/CMakeLists.txt | 1 + sources/pyside2/tests/QtScxml/test_dynamic.py | 53 + .../pyside2/tests/QtScxml/trafficlight.scxml | 89 + .../pyside2/tests/QtSensors/CMakeLists.txt | 1 + sources/pyside2/tests/QtSensors/sensors.py | 55 + sources/pyside2/tests/QtSql/CMakeLists.txt | 3 + sources/pyside2/tests/QtSql/bug_1013.py | 58 + .../QtSql/qsqldatabaseandqueries_test.py | 99 + .../pyside2/tests/QtSql/qvarianttype_test.py | 62 + sources/pyside2/tests/QtSvg/CMakeLists.txt | 3 + .../pyside2/tests/QtSvg/qsvggenerator_test.py | 63 + .../pyside2/tests/QtSvg/qsvgrenderer_test.py | 53 + .../pyside2/tests/QtSvg/qsvgwidget_test.py | 55 + sources/pyside2/tests/QtSvg/tiger.svg | 730 + sources/pyside2/tests/QtTest/CMakeLists.txt | 5 + sources/pyside2/tests/QtTest/click_test.py | 55 + .../pyside2/tests/QtTest/eventfilter_test.py | 75 + .../pyside2/tests/QtTest/qvalidator_test.py | 133 + .../pyside2/tests/QtTest/touchevent_test.py | 77 + .../tests/QtTextToSpeech/CMakeLists.txt | 1 + .../QtTextToSpeech/qtexttospeech_test.py | 63 + .../pyside2/tests/QtUiTools/CMakeLists.txt | 13 + sources/pyside2/tests/QtUiTools/action.ui | 16 + sources/pyside2/tests/QtUiTools/bug_1060.py | 46 + sources/pyside2/tests/QtUiTools/bug_1060.ui | 19 + sources/pyside2/tests/QtUiTools/bug_360.py | 64 + sources/pyside2/tests/QtUiTools/bug_376.py | 47 + sources/pyside2/tests/QtUiTools/bug_392.py | 75 + sources/pyside2/tests/QtUiTools/bug_426.py | 46 + sources/pyside2/tests/QtUiTools/bug_426.ui | 19 + sources/pyside2/tests/QtUiTools/bug_552.py | 49 + sources/pyside2/tests/QtUiTools/bug_552.ui | 42 + sources/pyside2/tests/QtUiTools/bug_797.py | 39 + sources/pyside2/tests/QtUiTools/bug_909.py | 52 + sources/pyside2/tests/QtUiTools/bug_909.ui | 31 + sources/pyside2/tests/QtUiTools/bug_913.py | 51 + sources/pyside2/tests/QtUiTools/bug_913.ui | 57 + sources/pyside2/tests/QtUiTools/bug_958.py | 52 + sources/pyside2/tests/QtUiTools/bug_958.ui | 48 + sources/pyside2/tests/QtUiTools/bug_965.py | 48 + sources/pyside2/tests/QtUiTools/bug_965.ui | 27 + sources/pyside2/tests/QtUiTools/minimal.ui | 6 + .../pyside2/tests/QtUiTools/pycustomwidget.ui | 36 + .../tests/QtUiTools/pycustomwidget2.ui | 48 + sources/pyside2/tests/QtUiTools/test.ui | 48 + sources/pyside2/tests/QtUiTools/ui_test.py | 41 + .../pyside2/tests/QtUiTools/uiloader_test.py | 71 + .../pyside2/tests/QtWebChannel/CMakeLists.txt | 1 + .../pyside2/tests/QtWebEngine/CMakeLists.txt | 29 + .../QtWebEngine/web_engine_initialize.py | 46 + .../tests/QtWebEngineCore/CMakeLists.txt | 29 + .../web_engine_custom_scheme.py | 65 + .../tests/QtWebEngineWidgets/CMakeLists.txt | 29 + .../pyside-474-qtwebengineview.py | 45 + sources/pyside2/tests/QtWebKit/CMakeLists.txt | 11 + sources/pyside2/tests/QtWebKit/bug_448.py | 47 + sources/pyside2/tests/QtWebKit/bug_694.py | 78 + sources/pyside2/tests/QtWebKit/bug_803.py | 46 + sources/pyside2/tests/QtWebKit/bug_899.py | 64 + sources/pyside2/tests/QtWebKit/bug_959.py | 128 + sources/pyside2/tests/QtWebKit/fox.html | 7 + .../pyside2/tests/QtWebKit/qml_plugin_test.py | 88 + .../tests/QtWebKit/qmlplugin/dummy.pys | 1 + .../tests/QtWebKit/qmlplugin/index.html | 5 + .../QtWebKit/qvariantlist_property_test.py | 71 + .../shouldInterruptjavascript_test.py | 56 + .../pyside2/tests/QtWebKit/webframe_test.py | 62 + .../pyside2/tests/QtWebKit/webpage_test.py | 88 + .../pyside2/tests/QtWebKit/webview_test.py | 94 + .../tests/QtWebKitWidgets/CMakeLists.txt | 1 + .../pyside2/tests/QtWebSockets/CMakeLists.txt | 1 + .../pyside2/tests/QtWidgets/CMakeLists.txt | 142 + .../pyside2/tests/QtWidgets/action_clear.py | 74 + .../tests/QtWidgets/add_action_test.py | 71 + sources/pyside2/tests/QtWidgets/api2_test.py | 89 + .../tests/QtWidgets/application_test.py | 51 + sources/pyside2/tests/QtWidgets/bug_1002.py | 47 + sources/pyside2/tests/QtWidgets/bug_1006.py | 111 + sources/pyside2/tests/QtWidgets/bug_1048.py | 36 + sources/pyside2/tests/QtWidgets/bug_1077.py | 45 + sources/pyside2/tests/QtWidgets/bug_172.py | 41 + sources/pyside2/tests/QtWidgets/bug_243.py | 45 + sources/pyside2/tests/QtWidgets/bug_307.py | 54 + sources/pyside2/tests/QtWidgets/bug_324.py | 60 + sources/pyside2/tests/QtWidgets/bug_338.py | 55 + sources/pyside2/tests/QtWidgets/bug_363.py | 54 + sources/pyside2/tests/QtWidgets/bug_389.py | 43 + sources/pyside2/tests/QtWidgets/bug_400.py | 54 + sources/pyside2/tests/QtWidgets/bug_416.py | 71 + sources/pyside2/tests/QtWidgets/bug_429.py | 38 + sources/pyside2/tests/QtWidgets/bug_430.py | 42 + sources/pyside2/tests/QtWidgets/bug_433.py | 43 + sources/pyside2/tests/QtWidgets/bug_467.py | 47 + sources/pyside2/tests/QtWidgets/bug_493.py | 51 + sources/pyside2/tests/QtWidgets/bug_512.py | 50 + sources/pyside2/tests/QtWidgets/bug_525.py | 49 + sources/pyside2/tests/QtWidgets/bug_546.py | 42 + sources/pyside2/tests/QtWidgets/bug_547.py | 85 + sources/pyside2/tests/QtWidgets/bug_549.py | 44 + sources/pyside2/tests/QtWidgets/bug_569.py | 47 + sources/pyside2/tests/QtWidgets/bug_575.py | 48 + sources/pyside2/tests/QtWidgets/bug_576.py | 62 + sources/pyside2/tests/QtWidgets/bug_585.py | 54 + sources/pyside2/tests/QtWidgets/bug_589.py | 47 + sources/pyside2/tests/QtWidgets/bug_632.py | 48 + sources/pyside2/tests/QtWidgets/bug_635.py | 57 + sources/pyside2/tests/QtWidgets/bug_640.py | 39 + sources/pyside2/tests/QtWidgets/bug_653.py | 45 + sources/pyside2/tests/QtWidgets/bug_662.py | 57 + sources/pyside2/tests/QtWidgets/bug_667.py | 53 + sources/pyside2/tests/QtWidgets/bug_668.py | 52 + sources/pyside2/tests/QtWidgets/bug_674.py | 51 + sources/pyside2/tests/QtWidgets/bug_675.py | 43 + sources/pyside2/tests/QtWidgets/bug_688.py | 116 + sources/pyside2/tests/QtWidgets/bug_693.py | 58 + sources/pyside2/tests/QtWidgets/bug_696.py | 55 + sources/pyside2/tests/QtWidgets/bug_711.py | 53 + sources/pyside2/tests/QtWidgets/bug_714.py | 54 + sources/pyside2/tests/QtWidgets/bug_722.py | 52 + sources/pyside2/tests/QtWidgets/bug_728.py | 51 + sources/pyside2/tests/QtWidgets/bug_736.py | 47 + sources/pyside2/tests/QtWidgets/bug_750.py | 54 + sources/pyside2/tests/QtWidgets/bug_778.py | 50 + sources/pyside2/tests/QtWidgets/bug_785.py | 58 + sources/pyside2/tests/QtWidgets/bug_793.py | 58 + sources/pyside2/tests/QtWidgets/bug_811.py | 61 + sources/pyside2/tests/QtWidgets/bug_834.py | 46 + sources/pyside2/tests/QtWidgets/bug_836.py | 56 + sources/pyside2/tests/QtWidgets/bug_844.py | 46 + sources/pyside2/tests/QtWidgets/bug_854.py | 68 + sources/pyside2/tests/QtWidgets/bug_860.py | 63 + sources/pyside2/tests/QtWidgets/bug_862.py | 67 + sources/pyside2/tests/QtWidgets/bug_871.py | 70 + sources/pyside2/tests/QtWidgets/bug_879.py | 58 + sources/pyside2/tests/QtWidgets/bug_919.py | 66 + sources/pyside2/tests/QtWidgets/bug_921.py | 79 + sources/pyside2/tests/QtWidgets/bug_941.py | 45 + sources/pyside2/tests/QtWidgets/bug_964.py | 47 + sources/pyside2/tests/QtWidgets/bug_967.py | 46 + sources/pyside2/tests/QtWidgets/bug_972.py | 67 + sources/pyside2/tests/QtWidgets/bug_979.py | 37 + sources/pyside2/tests/QtWidgets/bug_988.py | 46 + sources/pyside2/tests/QtWidgets/bug_998.py | 38 + .../tests/QtWidgets/customproxywidget_test.py | 62 + .../tests/QtWidgets/event_filter_test.py | 67 + .../QtWidgets/grandparent_method_test.py | 50 + .../tests/QtWidgets/hashabletype_test.py | 46 + .../pyside2/tests/QtWidgets/import_test.py | 2 + .../tests/QtWidgets/keep_reference_test.py | 103 + .../tests/QtWidgets/missing_symbols_test.py | 57 + .../tests/QtWidgets/paint_event_test.py | 98 + .../tests/QtWidgets/parent_method_test.py | 52 + .../tests/QtWidgets/private_mangle_test.py | 121 + .../tests/QtWidgets/python_properties_test.py | 44 + .../qabstracttextdocumentlayout_test.py | 75 + .../pyside2/tests/QtWidgets/qaction_test.py | 69 + .../pyside2/tests/QtWidgets/qapp_issue_585.py | 68 + sources/pyside2/tests/QtWidgets/qapp_test.py | 46 + .../qapplication_exit_segfault_test.py | 44 + .../QtWidgets/qapplication_singleton_test.py | 39 + .../tests/QtWidgets/qapplication_test.py | 40 + .../pyside2/tests/QtWidgets/qbrush_test.py | 52 + .../pyside2/tests/QtWidgets/qcolormap_test.py | 43 + .../tests/QtWidgets/qdynamic_signal.py | 55 + .../tests/QtWidgets/qfontdialog_test.py | 51 + .../tests/QtWidgets/qformlayout_test.py | 84 + .../QtWidgets/qgraphicsitem_isblocked_test.py | 58 + .../tests/QtWidgets/qgraphicsitem_test.py | 63 + .../QtWidgets/qgraphicsobjectreimpl_test.py | 76 + .../QtWidgets/qgraphicsproxywidget_test.py | 58 + .../tests/QtWidgets/qgraphicsscene_test.py | 197 + .../pyside2/tests/QtWidgets/qimage_test.py | 308 + .../tests/QtWidgets/qinputdialog_get_test.py | 52 + .../tests/QtWidgets/qkeysequenceedit_test.py | 46 + .../pyside2/tests/QtWidgets/qlabel_test.py | 89 + .../tests/QtWidgets/qlayout_ref_test.py | 179 + .../pyside2/tests/QtWidgets/qlayout_test.py | 140 + .../tests/QtWidgets/qlcdnumber_test.py | 44 + .../tests/QtWidgets/qlistwidget_test.py | 89 + .../tests/QtWidgets/qlistwidgetitem_test.py | 56 + .../tests/QtWidgets/qmainwindow_test.py | 113 + sources/pyside2/tests/QtWidgets/qmenu_test.py | 86 + .../pyside2/tests/QtWidgets/qmenuadd_test.py | 53 + .../tests/QtWidgets/qobject_mi_test.py | 70 + sources/pyside2/tests/QtWidgets/qpen_test.py | 72 + .../pyside2/tests/QtWidgets/qpicture_test.py | 66 + .../tests/QtWidgets/qpixmap_constructor.py | 279 + .../tests/QtWidgets/qpushbutton_test.py | 69 + .../pyside2/tests/QtWidgets/qshortcut_test.py | 76 + .../pyside2/tests/QtWidgets/qsplitter_test.py | 44 + .../QtWidgets/qstandarditemmodel_test.py | 108 + .../QtWidgets/qstring_qkeysequence_test.py | 61 + .../pyside2/tests/QtWidgets/qstyle_test.py | 83 + .../tests/QtWidgets/qtableview_test.py | 44 + .../tests/QtWidgets/qtabwidget_test.py | 56 + .../tests/QtWidgets/qtabwidgetclear_test.py | 63 + .../tests/QtWidgets/qtextedit_signal_test.py | 65 + .../pyside2/tests/QtWidgets/qtextedit_test.py | 60 + .../pyside2/tests/QtWidgets/qtoolbar_test.py | 62 + .../pyside2/tests/QtWidgets/qtoolbox_test.py | 59 + .../pyside2/tests/QtWidgets/qtreeview_test.py | 96 + .../tests/QtWidgets/qtreewidget_test.py | 64 + .../pyside2/tests/QtWidgets/qvariant_test.py | 76 + .../tests/QtWidgets/qwidget_setlayout_test.py | 61 + .../pyside2/tests/QtWidgets/qwidget_test.py | 55 + .../tests/QtWidgets/reference_count_test.py | 99 + sources/pyside2/tests/QtWidgets/sample.png | Bin 0 -> 55944 bytes .../pyside2/tests/QtWidgets/signature_test.py | 87 + .../tests/QtWidgets/standardpixmap_test.py | 43 + .../tests/QtWidgets/test_module_template.py | 40 + .../virtual_protected_inheritance_test.py | 97 + .../QtWidgets/virtual_pure_override_test.py | 77 + .../tests/QtWidgets/wrong_return_test.py | 58 + .../pyside2/tests/QtWinExtras/CMakeLists.txt | 1 + .../pyside2/tests/QtX11Extras/CMakeLists.txt | 1 + sources/pyside2/tests/QtXml/CMakeLists.txt | 2 + .../pyside2/tests/QtXml/qdomdocument_test.py | 98 + .../tests/QtXml/qxmlsimplereader_test.py | 63 + .../tests/QtXmlPatterns/CMakeLists.txt | 1 + .../tests/QtXmlPatterns/import_test.py | 59 + sources/pyside2/tests/mac/CMakeLists.txt | 1 + sources/pyside2/tests/mac/qmacstyle_test.py | 47 + sources/pyside2/tests/manually/README.txt | 5 + sources/pyside2/tests/manually/bug_841.py | 79 + .../pyside2/tests/pysidetest/CMakeLists.txt | 144 + .../tests/pysidetest/all_modules_load_test.py | 44 + sources/pyside2/tests/pysidetest/bug_1016.py | 40 + .../pyside2/tests/pysidetest/curr_errors.txt | 12 + .../tests/pysidetest/decoratedslot_test.py | 67 + .../pysidetest/delegatecreateseditor_test.py | 83 + sources/pyside2/tests/pysidetest/enum_test.py | 44 + .../pyside2/tests/pysidetest/hiddenobject.cpp | 44 + .../pyside2/tests/pysidetest/hiddenobject.h | 55 + .../homonymoussignalandmethod_test.py | 81 + .../tests/pysidetest/list_signal_test.py | 51 + .../pysidetest/mixin_signal_slots_test.py | 216 + .../tests/pysidetest/modelview_test.py | 99 + .../new_inherited_functions_test.py | 215 + sources/pyside2/tests/pysidetest/notify_id.py | 76 + .../tests/pysidetest/pysidetest_global.h | 34 + .../pysidetest/qapp_like_a_macro_test.py | 76 + .../pyside2/tests/pysidetest/qvariant_test.py | 45 + .../tests/pysidetest/signal_slot_warning.py | 70 + .../pysidetest/signalandnamespace_test.py | 120 + .../signalemissionfrompython_test.py | 107 + .../pysidetest/signalwithdefaultvalue_test.py | 95 + .../pyside2/tests/pysidetest/symbols.filter | 7 + .../pyside2/tests/pysidetest/testobject.cpp | 54 + sources/pyside2/tests/pysidetest/testobject.h | 140 + sources/pyside2/tests/pysidetest/testview.cpp | 52 + sources/pyside2/tests/pysidetest/testview.h | 61 + .../tests/pysidetest/typedef_signal_test.py | 54 + .../pysidetest/typesystem_pysidetest.xml | 64 + .../pyside2/tests/pysidetest/version_test.py | 47 + sources/pyside2/tests/registry/CMakeLists.txt | 40 + .../pyside2/tests/registry/existence_test.py | 156 + .../tests/registry/exists_darwin_5_11_1_ci.py | 18733 ++++++++++++++++ .../tests/registry/exists_darwin_5_6_4_ci.py | 15435 +++++++++++++ .../tests/registry/exists_darwin_5_9_4_ci.py | 16469 ++++++++++++++ .../tests/registry/exists_linux_5_11_1_ci.py | 18408 +++++++++++++++ .../tests/registry/exists_linux_5_6_4_ci.py | 15379 +++++++++++++ .../tests/registry/exists_linux_5_9_4_ci.py | 16262 ++++++++++++++ .../tests/registry/exists_win32_5_11_1_ci.py | 18619 +++++++++++++++ .../tests/registry/exists_win32_5_6_4_ci.py | 15672 +++++++++++++ .../tests/registry/exists_win32_5_9_4_ci.py | 16652 ++++++++++++++ .../pyside2/tests/registry/init_platform.py | 263 + sources/pyside2/tests/registry/util.py | 100 + sources/pyside2/tests/run_test.sh | 41 + sources/pyside2/tests/signals/CMakeLists.txt | 40 + .../tests/signals/args_dont_match_test.py | 50 + sources/pyside2/tests/signals/bug_189.py | 54 + sources/pyside2/tests/signals/bug_311.py | 70 + sources/pyside2/tests/signals/bug_312.py | 79 + sources/pyside2/tests/signals/bug_319.py | 63 + sources/pyside2/tests/signals/bug_79.py | 69 + .../pyside2/tests/signals/decorators_test.py | 105 + .../pyside2/tests/signals/disconnect_test.py | 88 + .../tests/signals/invalid_callback_test.py | 56 + .../pyside2/tests/signals/lambda_gui_test.py | 73 + sources/pyside2/tests/signals/lambda_test.py | 93 + .../tests/signals/leaking_signal_test.py | 43 + .../signals/multiple_connections_gui_test.py | 88 + .../signals/multiple_connections_test.py | 103 + .../pyside2/tests/signals/pysignal_test.py | 214 + .../tests/signals/qobject_destroyed_test.py | 50 + .../tests/signals/qobject_receivers_test.py | 76 + .../tests/signals/qobject_sender_test.py | 120 + sources/pyside2/tests/signals/ref01_test.py | 55 + sources/pyside2/tests/signals/ref02_test.py | 75 + sources/pyside2/tests/signals/ref03_test.py | 57 + sources/pyside2/tests/signals/ref04_test.py | 84 + sources/pyside2/tests/signals/ref05_test.py | 74 + sources/pyside2/tests/signals/ref06_test.py | 77 + .../signals/segfault_proxyparent_test.py | 86 + .../tests/signals/self_connect_test.py | 65 + .../tests/signals/short_circuit_test.py | 91 + .../signals/signal2signal_connect_test.py | 135 + .../tests/signals/signal_autoconnect_test.py | 59 + .../signal_connectiontype_support_test.py | 55 + .../tests/signals/signal_emission_gui_test.py | 141 + .../tests/signals/signal_emission_test.py | 152 + .../pyside2/tests/signals/signal_func_test.py | 49 + .../signals/signal_manager_refcount_test.py | 51 + .../tests/signals/signal_number_limit_test.py | 90 + .../tests/signals/signal_object_test.py | 115 + .../tests/signals/signal_signature_test.py | 114 + .../signal_with_primitive_type_test.py | 58 + .../signals/slot_reference_count_test.py | 81 + .../tests/signals/static_metaobject_test.py | 86 + sources/pyside2/tests/support/CMakeLists.txt | 1 + sources/pyside2/tests/support/voidptr_test.py | 47 + .../tests/tools/list-class-hierarchy.py | 117 + sources/pyside2/tests/util/color.py | 41 + sources/pyside2/tests/util/helper/__init__.py | 171 + .../pyside2/tests/util/helper/docmodifier.py | 116 + sources/pyside2/tests/util/httpd.py | 177 + .../util/module_wrapper/PySide/QtAssistant.py | 2 + .../util/module_wrapper/PySide/QtCore.py | 2 + .../util/module_wrapper/PySide/QtDesigner.py | 2 + .../tests/util/module_wrapper/PySide/QtGui.py | 2 + .../util/module_wrapper/PySide/QtHelp.py | 2 + .../util/module_wrapper/PySide/QtNetwork.py | 2 + .../util/module_wrapper/PySide/QtScript.py | 2 + .../tests/util/module_wrapper/PySide/QtSql.py | 2 + .../tests/util/module_wrapper/PySide/QtSvg.py | 2 + .../util/module_wrapper/PySide/QtTest.py | 2 + .../util/module_wrapper/PySide/QtWebKit.py | 2 + .../tests/util/module_wrapper/PySide/QtXml.py | 2 + .../module_wrapper/PySide/QtXmlPatterns.py | 2 + .../util/module_wrapper/PySide/__init__.py | 0 sources/pyside2/tests/util/processtimer.py | 77 + sources/pyside2/tests/util/py2xfunctions.py | 46 + sources/pyside2/tests/util/py3kcompat.py | 38 + sources/pyside2/tests/util/py3xfunctions.py | 54 + sources/pyside2/tests/util/pyqt_diff.py | 64 + sources/pyside2/tests/util/pyqtcheck.py | 74 + sources/pyside2/tests/util/rename_imports.sh | 42 + .../pyside2/tests/util/test_processtimer.py | 93 + sources/pyside2/tests/util/use_pyqt4.sh | 3 + sources/pyside2/tests/util/use_pyside.sh | 3 + .../pyside2/tests/util/valgrind-python.supp | 349 + sources/shiboken2/AUTHORS | 12 + sources/shiboken2/ApiExtractor/AUTHORS | 8 + sources/shiboken2/ApiExtractor/CMakeLists.txt | 98 + sources/shiboken2/ApiExtractor/COPYING | 342 + .../ApiExtractor/abstractmetabuilder.cpp | 3245 +++ .../ApiExtractor/abstractmetabuilder.h | 99 + .../ApiExtractor/abstractmetabuilder_p.h | 189 + .../ApiExtractor/abstractmetalang.cpp | 2467 ++ .../shiboken2/ApiExtractor/abstractmetalang.h | 1794 ++ .../ApiExtractor/abstractmetalang_typedefs.h | 51 + .../shiboken2/ApiExtractor/apiextractor.cpp | 307 + sources/shiboken2/ApiExtractor/apiextractor.h | 114 + .../ApiExtractor/apiextractormacros.h | 41 + .../ApiExtractor/clangparser/clangbuilder.cpp | 958 + .../ApiExtractor/clangparser/clangbuilder.h | 58 + .../clangparser/clangdebugutils.cpp | 150 + .../clangparser/clangdebugutils.h | 48 + .../ApiExtractor/clangparser/clangparser.cpp | 266 + .../ApiExtractor/clangparser/clangparser.h | 93 + .../ApiExtractor/clangparser/clangutils.cpp | 227 + .../ApiExtractor/clangparser/clangutils.h | 101 + .../clangparser/compilersupport.cpp | 383 + .../clangparser/compilersupport.h | 55 + .../ApiExtractor/cmake_uninstall.cmake | 21 + sources/shiboken2/ApiExtractor/dependency.h | 43 + .../shiboken2/ApiExtractor/doc/CMakeLists.txt | 10 + .../ApiExtractor/doc/_templates/index.html | 27 + .../ApiExtractor/doc/_templates/layout.html | 39 + .../doc/_themes/pysidedocs/searchbox.html | 12 + .../_themes/pysidedocs/static/bg_header.png | Bin 0 -> 36012 bytes .../doc/_themes/pysidedocs/static/bg_topo.jpg | Bin 0 -> 14237 bytes .../doc/_themes/pysidedocs/static/fakebar.png | Bin 0 -> 101 bytes .../_themes/pysidedocs/static/logo_indt.jpg | Bin 0 -> 3138 bytes .../pysidedocs/static/logo_openbossa.png | Bin 0 -> 4702 bytes .../_themes/pysidedocs/static/logo_python.jpg | Bin 0 -> 2660 bytes .../doc/_themes/pysidedocs/static/logo_qt.png | Bin 0 -> 4618 bytes .../_themes/pysidedocs/static/pysidedocs.css | 409 + .../_themes/pysidedocs/static/pysidelogo.png | Bin 0 -> 12969 bytes .../_themes/pysidedocs/static/relbar_bg.png | Bin 0 -> 130 bytes .../doc/_themes/pysidedocs/theme.conf | 7 + sources/shiboken2/ApiExtractor/doc/conf.py.in | 162 + .../shiboken2/ApiExtractor/doc/contents.rst | 9 + .../doc/dependency-apiextractor.svg | 360 + .../shiboken2/ApiExtractor/doc/overview.rst | 15 + .../shiboken2/ApiExtractor/doc/ownership.rst | 85 + .../shiboken2/ApiExtractor/doc/typesystem.rst | 29 + .../ApiExtractor/doc/typesystem_arguments.rst | 206 + .../doc/typesystem_conversionrule.rst | 113 + .../doc/typesystem_documentation.rst | 43 + .../doc/typesystem_manipulating_objects.rst | 132 + .../doc/typesystem_modify_function.rst | 78 + .../doc/typesystem_solving_compilation.rst | 70 + .../doc/typesystem_specifying_types.rst | 372 + .../ApiExtractor/doc/typesystem_templates.rst | 55 + sources/shiboken2/ApiExtractor/docparser.cpp | 336 + sources/shiboken2/ApiExtractor/docparser.h | 151 + .../shiboken2/ApiExtractor/doxygenparser.cpp | 206 + .../shiboken2/ApiExtractor/doxygenparser.h | 43 + sources/shiboken2/ApiExtractor/fileout.cpp | 247 + sources/shiboken2/ApiExtractor/fileout.h | 68 + sources/shiboken2/ApiExtractor/graph.cpp | 134 + sources/shiboken2/ApiExtractor/graph.h | 72 + sources/shiboken2/ApiExtractor/header_paths.h | 72 + sources/shiboken2/ApiExtractor/icecc.cmake | 11 + sources/shiboken2/ApiExtractor/include.cpp | 71 + sources/shiboken2/ApiExtractor/include.h | 92 + sources/shiboken2/ApiExtractor/merge.xsl | 82 + .../ApiExtractor/parser/codemodel.cpp | 1294 ++ .../shiboken2/ApiExtractor/parser/codemodel.h | 732 + .../ApiExtractor/parser/codemodel_enums.h | 44 + .../ApiExtractor/parser/codemodel_fwd.h | 82 + .../ApiExtractor/parser/enumvalue.cpp | 76 + .../shiboken2/ApiExtractor/parser/enumvalue.h | 70 + .../shiboken2/ApiExtractor/qtdocparser.cpp | 350 + sources/shiboken2/ApiExtractor/qtdocparser.h | 53 + .../shiboken2/ApiExtractor/reporthandler.cpp | 159 + .../shiboken2/ApiExtractor/reporthandler.h | 73 + sources/shiboken2/ApiExtractor/symbols.filter | 7 + .../ApiExtractor/tests/CMakeLists.txt | 74 + sources/shiboken2/ApiExtractor/tests/a.xml | 14 + .../tests/testabstractmetaclass.cpp | 560 + .../tests/testabstractmetaclass.h | 55 + .../tests/testabstractmetatype.cpp | 216 + .../ApiExtractor/tests/testabstractmetatype.h | 47 + .../ApiExtractor/tests/testaddfunction.cpp | 453 + .../ApiExtractor/tests/testaddfunction.h | 54 + .../ApiExtractor/tests/testarrayargument.cpp | 171 + .../ApiExtractor/tests/testarrayargument.h | 43 + .../ApiExtractor/tests/testcodeinjection.cpp | 106 + .../ApiExtractor/tests/testcodeinjection.h | 45 + .../ApiExtractor/tests/testcontainer.cpp | 105 + .../ApiExtractor/tests/testcontainer.h | 41 + .../tests/testconversionoperator.cpp | 188 + .../tests/testconversionoperator.h | 44 + .../tests/testconversionruletag.cpp | 250 + .../tests/testconversionruletag.h | 43 + .../tests/testctorinformation.cpp | 76 + .../ApiExtractor/tests/testctorinformation.h | 44 + .../tests/testdroptypeentries.cpp | 145 + .../ApiExtractor/tests/testdroptypeentries.h | 44 + .../tests/testdtorinformation.cpp | 86 + .../ApiExtractor/tests/testdtorinformation.h | 46 + .../shiboken2/ApiExtractor/tests/testenum.cpp | 435 + .../shiboken2/ApiExtractor/tests/testenum.h | 47 + .../ApiExtractor/tests/testextrainclude.cpp | 85 + .../ApiExtractor/tests/testextrainclude.h | 42 + .../ApiExtractor/tests/testfunctiontag.cpp | 97 + .../ApiExtractor/tests/testfunctiontag.h | 42 + .../tests/testimplicitconversions.cpp | 163 + .../tests/testimplicitconversions.h | 46 + .../ApiExtractor/tests/testinserttemplate.cpp | 130 + .../ApiExtractor/tests/testinserttemplate.h | 44 + .../tests/testmodifydocumentation.cpp | 98 + .../tests/testmodifydocumentation.h | 41 + .../ApiExtractor/tests/testmodifyfunction.cpp | 261 + .../ApiExtractor/tests/testmodifyfunction.h | 46 + .../tests/testmultipleinheritance.cpp | 75 + .../tests/testmultipleinheritance.h | 43 + .../ApiExtractor/tests/testnamespace.cpp | 96 + .../ApiExtractor/tests/testnamespace.h | 44 + .../ApiExtractor/tests/testnestedtypes.cpp | 128 + .../ApiExtractor/tests/testnestedtypes.h | 41 + .../tests/testnumericaltypedef.cpp | 119 + .../ApiExtractor/tests/testnumericaltypedef.h | 42 + .../tests/testprimitivetypetag.cpp | 60 + .../ApiExtractor/tests/testprimitivetypetag.h | 41 + .../ApiExtractor/tests/testrefcounttag.cpp | 100 + .../ApiExtractor/tests/testrefcounttag.h | 42 + .../tests/testreferencetopointer.cpp | 59 + .../tests/testreferencetopointer.h | 41 + .../ApiExtractor/tests/testremovefield.cpp | 62 + .../ApiExtractor/tests/testremovefield.h | 41 + .../ApiExtractor/tests/testremoveimplconv.cpp | 69 + .../ApiExtractor/tests/testremoveimplconv.h | 41 + .../tests/testremoveoperatormethod.cpp | 117 + .../tests/testremoveoperatormethod.h | 41 + .../ApiExtractor/tests/testresolvetype.cpp | 64 + .../ApiExtractor/tests/testresolvetype.h | 41 + .../tests/testreverseoperators.cpp | 139 + .../ApiExtractor/tests/testreverseoperators.h | 41 + .../ApiExtractor/tests/testtemplates.cpp | 441 + .../ApiExtractor/tests/testtemplates.h | 51 + .../ApiExtractor/tests/testtoposort.cpp | 69 + .../ApiExtractor/tests/testtoposort.h | 42 + .../ApiExtractor/tests/testtyperevision.cpp | 71 + .../ApiExtractor/tests/testtyperevision.h | 42 + .../shiboken2/ApiExtractor/tests/testutil.h | 78 + .../tests/testvaluetypedefaultctortag.cpp | 64 + .../tests/testvaluetypedefaultctortag.h | 41 + .../ApiExtractor/tests/testvoidarg.cpp | 87 + .../ApiExtractor/tests/testvoidarg.h | 42 + .../shiboken2/ApiExtractor/tests/utf8code.txt | 1 + .../shiboken2/ApiExtractor/typedatabase.cpp | 781 + sources/shiboken2/ApiExtractor/typedatabase.h | 191 + .../ApiExtractor/typedatabase_typedefs.h | 49 + sources/shiboken2/ApiExtractor/typeparser.cpp | 276 + sources/shiboken2/ApiExtractor/typeparser.h | 45 + sources/shiboken2/ApiExtractor/typesystem.cpp | 3065 +++ sources/shiboken2/ApiExtractor/typesystem.h | 1708 ++ .../shiboken2/ApiExtractor/typesystem_enums.h | 86 + sources/shiboken2/ApiExtractor/typesystem_p.h | 178 + .../ApiExtractor/typesystem_typedefs.h | 49 + sources/shiboken2/CMakeLists.txt | 467 + sources/shiboken2/COPYING | 342 + sources/shiboken2/COPYING.libsample | 501 + sources/shiboken2/COPYING.libshiboken | 501 + sources/shiboken2/Doxyfile | 311 + sources/shiboken2/cmake_uninstall.cmake | 21 + sources/shiboken2/data/CMakeLists.txt | 28 + .../data/GeneratorRunnerConfig.cmake.in | 17 + .../GeneratorRunnerConfigVersion.cmake.in | 10 + .../data/Shiboken2Config-spec.cmake.in | 32 + .../shiboken2/data/Shiboken2Config.cmake.in | 5 + .../data/Shiboken2ConfigVersion.cmake.in | 10 + sources/shiboken2/data/docgenerator.1 | 76 + sources/shiboken2/data/generatorrunner.1 | 76 + sources/shiboken2/data/generatorrunner.pc.in | 13 + sources/shiboken2/data/shiboken2.pc.in | 13 + sources/shiboken2/doc/CMakeLists.txt | 24 + sources/shiboken2/doc/README.md | 12 + sources/shiboken2/doc/_templates/index.html | 35 + sources/shiboken2/doc/_templates/layout.html | 29 + .../doc/_themes/pysidedocs/searchbox.html | 12 + .../_themes/pysidedocs/static/bg_header.png | Bin 0 -> 36012 bytes .../doc/_themes/pysidedocs/static/bg_topo.jpg | Bin 0 -> 14237 bytes .../doc/_themes/pysidedocs/static/fakebar.png | Bin 0 -> 101 bytes .../_themes/pysidedocs/static/logo_python.jpg | Bin 0 -> 2660 bytes .../doc/_themes/pysidedocs/static/logo_qt.png | Bin 0 -> 1032 bytes .../_themes/pysidedocs/static/pysidedocs.css | 475 + .../_themes/pysidedocs/static/pysidelogo.png | Bin 0 -> 12969 bytes .../_themes/pysidedocs/static/relbar_bg.png | Bin 0 -> 130 bytes .../doc/_themes/pysidedocs/theme.conf | 7 + .../shiboken2/doc/codeinjectionsemantics.rst | 397 + sources/shiboken2/doc/commandlineoptions.rst | 105 + sources/shiboken2/doc/conf.py.in | 162 + sources/shiboken2/doc/contents.rst | 17 + sources/shiboken2/doc/dependency-pyside.svg | 527 + sources/shiboken2/doc/faq.rst | 71 + sources/shiboken2/doc/images/.directory | 3 + .../doc/images/bindinggen-development.png | Bin 0 -> 32698 bytes .../doc/images/bindinggen-development.svg | 542 + sources/shiboken2/doc/images/boostgen.png | Bin 0 -> 153473 bytes sources/shiboken2/doc/images/converter.png | Bin 0 -> 22467 bytes sources/shiboken2/doc/images/converter.svg | 349 + .../shiboken2/doc/images/genrunnerarch.png | Bin 0 -> 68761 bytes .../shiboken2/doc/images/genrunnerarch.svg | 654 + .../shiboken2/doc/images/shibokenqtarch.png | Bin 0 -> 17602 bytes .../shiboken2/doc/images/shibokenqtarch.svg | 188 + sources/shiboken2/doc/overview.rst | 46 + sources/shiboken2/doc/ownership.rst | 153 + sources/shiboken2/doc/projectfile.rst | 67 + sources/shiboken2/doc/sequenceprotocol.rst | 29 + sources/shiboken2/doc/shiboken2.1 | 73 + sources/shiboken2/doc/shibokenmodule.rst | 79 + sources/shiboken2/doc/typeconverters.rst | 291 + sources/shiboken2/doc/typesystemvariables.rst | 334 + sources/shiboken2/doc/wordsofadvice.rst | 112 + sources/shiboken2/generator/CMakeLists.txt | 40 + sources/shiboken2/generator/generator.cpp | 854 + sources/shiboken2/generator/generator.h | 429 + sources/shiboken2/generator/main.cpp | 668 + .../shiboken2/generator/qtdoc/CMakeLists.txt | 21 + .../generator/qtdoc/qtdocgenerator.cpp | 2312 ++ .../generator/qtdoc/qtdocgenerator.h | 272 + .../generator/shiboken2/CMakeLists.txt | 28 + .../generator/shiboken2/cppgenerator.cpp | 5836 +++++ .../generator/shiboken2/cppgenerator.h | 368 + .../generator/shiboken2/headergenerator.cpp | 593 + .../generator/shiboken2/headergenerator.h | 67 + .../generator/shiboken2/overloaddata.cpp | 1091 + .../generator/shiboken2/overloaddata.h | 163 + .../generator/shiboken2/shibokengenerator.cpp | 2758 +++ .../generator/shiboken2/shibokengenerator.h | 535 + .../shiboken2/generator/shibokenconfig.h.in | 6 + sources/shiboken2/generatorrunnerconfig.h.in | 13 + sources/shiboken2/generatorrunnermacros.h | 48 + .../generators/shiboken/shiboken.cpp | 32 + sources/shiboken2/icecc.cmake | 11 + sources/shiboken2/libshiboken/CMakeLists.txt | 106 + sources/shiboken2/libshiboken/autodecref.h | 126 + sources/shiboken2/libshiboken/basewrapper.cpp | 1566 ++ sources/shiboken2/libshiboken/basewrapper.h | 448 + sources/shiboken2/libshiboken/basewrapper_p.h | 287 + .../shiboken2/libshiboken/bindingmanager.cpp | 346 + .../shiboken2/libshiboken/bindingmanager.h | 109 + .../libshiboken/bufferprocs_py37.cpp | 397 + .../shiboken2/libshiboken/bufferprocs_py37.h | 145 + .../shiboken2/libshiboken/debugfreehook.cpp | 194 + sources/shiboken2/libshiboken/debugfreehook.h | 61 + sources/shiboken2/libshiboken/gilstate.cpp | 68 + sources/shiboken2/libshiboken/gilstate.h | 63 + sources/shiboken2/libshiboken/helper.cpp | 144 + sources/shiboken2/libshiboken/helper.h | 95 + .../libshiboken/pep384_issue33738.cpp | 121 + sources/shiboken2/libshiboken/pep384impl.cpp | 635 + sources/shiboken2/libshiboken/pep384impl.h | 484 + .../shiboken2/libshiboken/pep384impl_doc.rst | 701 + .../shiboken2/libshiboken/python25compat.h | 104 + sources/shiboken2/libshiboken/qapp_macro.cpp | 197 + sources/shiboken2/libshiboken/qapp_macro.h | 53 + .../shiboken2/libshiboken/qt_attribution.json | 12 + .../libshiboken/sbkarrayconverter.cpp | 289 + .../shiboken2/libshiboken/sbkarrayconverter.h | 171 + .../libshiboken/sbkarrayconverter_p.h | 62 + .../shiboken2/libshiboken/sbkconverter.cpp | 597 + sources/shiboken2/libshiboken/sbkconverter.h | 402 + .../shiboken2/libshiboken/sbkconverter_p.h | 545 + sources/shiboken2/libshiboken/sbkdbg.h | 124 + sources/shiboken2/libshiboken/sbkenum.cpp | 673 + sources/shiboken2/libshiboken/sbkenum.h | 121 + sources/shiboken2/libshiboken/sbkmodule.cpp | 111 + sources/shiboken2/libshiboken/sbkmodule.h | 115 + .../libshiboken/sbknumpyarrayconverter.cpp | 308 + sources/shiboken2/libshiboken/sbkpython.h | 96 + sources/shiboken2/libshiboken/sbkstring.cpp | 208 + sources/shiboken2/libshiboken/sbkstring.h | 75 + sources/shiboken2/libshiboken/sbkversion.h.in | 53 + sources/shiboken2/libshiboken/shiboken.h | 59 + .../shiboken2/libshiboken/shibokenbuffer.cpp | 98 + .../shiboken2/libshiboken/shibokenbuffer.h | 85 + .../shiboken2/libshiboken/shibokenmacros.h | 63 + sources/shiboken2/libshiboken/signature.cpp | 707 + sources/shiboken2/libshiboken/signature.h | 53 + .../shiboken2/libshiboken/signature_doc.rst | 278 + .../libshiboken/threadstatesaver.cpp | 69 + .../shiboken2/libshiboken/threadstatesaver.h | 66 + .../tmp-referencetopython/sbkconverter.cpp | 213 + .../tmp-referencetopython/sbkconverter.h | 191 + sources/shiboken2/libshiboken/typespec.cpp | 776 + sources/shiboken2/libshiboken/typespec.h | 153 + sources/shiboken2/libshiboken/voidptr.cpp | 363 + sources/shiboken2/libshiboken/voidptr.h | 65 + sources/shiboken2/shiboken_version.py | 55 + .../shiboken2/shibokenmodule/CMakeLists.txt | 43 + sources/shiboken2/shibokenmodule/nothing.h | 0 .../shibokenmodule/shibokenmodule.txt.in | 16 + .../shibokenmodule/typesystem_shiboken.xml | 123 + sources/shiboken2/tests/CMakeLists.txt | 102 + .../tests/dumpcodemodel/CMakeLists.txt | 5 + .../shiboken2/tests/dumpcodemodel/main.cpp | 106 + .../shiboken2/tests/libminimal/CMakeLists.txt | 13 + .../tests/libminimal/libminimalmacros.h | 46 + .../shiboken2/tests/libminimal/listuser.cpp | 124 + sources/shiboken2/tests/libminimal/listuser.h | 75 + sources/shiboken2/tests/libminimal/minbool.h | 68 + sources/shiboken2/tests/libminimal/obj.cpp | 44 + sources/shiboken2/tests/libminimal/obj.h | 59 + .../shiboken2/tests/libminimal/typedef.cpp | 75 + sources/shiboken2/tests/libminimal/typedef.h | 54 + sources/shiboken2/tests/libminimal/val.h | 59 + .../shiboken2/tests/libother/CMakeLists.txt | 18 + .../libother/extendsnoimplicitconversion.h | 45 + .../shiboken2/tests/libother/libothermacros.h | 46 + sources/shiboken2/tests/libother/number.cpp | 59 + sources/shiboken2/tests/libother/number.h | 57 + .../shiboken2/tests/libother/otherderived.cpp | 64 + .../shiboken2/tests/libother/otherderived.h | 68 + .../tests/libother/othermultiplederived.cpp | 50 + .../tests/libother/othermultiplederived.h | 46 + .../tests/libother/otherobjecttype.cpp | 36 + .../tests/libother/otherobjecttype.h | 49 + .../shiboken2/tests/libsample/CMakeLists.txt | 57 + .../shiboken2/tests/libsample/abstract.cpp | 97 + sources/shiboken2/tests/libsample/abstract.h | 108 + .../shiboken2/tests/libsample/blackbox.cpp | 131 + sources/shiboken2/tests/libsample/blackbox.h | 67 + sources/shiboken2/tests/libsample/bucket.cpp | 86 + sources/shiboken2/tests/libsample/bucket.h | 59 + .../shiboken2/tests/libsample/bytearray.cpp | 214 + sources/shiboken2/tests/libsample/bytearray.h | 89 + .../shiboken2/tests/libsample/collector.cpp | 62 + sources/shiboken2/tests/libsample/collector.h | 71 + sources/shiboken2/tests/libsample/complex.cpp | 54 + sources/shiboken2/tests/libsample/complex.h | 55 + .../shiboken2/tests/libsample/ctorconvrule.h | 45 + sources/shiboken2/tests/libsample/cvlist.h | 53 + sources/shiboken2/tests/libsample/derived.cpp | 125 + sources/shiboken2/tests/libsample/derived.h | 95 + sources/shiboken2/tests/libsample/echo.cpp | 29 + sources/shiboken2/tests/libsample/echo.h | 55 + .../shiboken2/tests/libsample/expression.cpp | 137 + .../shiboken2/tests/libsample/expression.h | 64 + sources/shiboken2/tests/libsample/filter.cpp | 73 + sources/shiboken2/tests/libsample/filter.h | 99 + .../shiboken2/tests/libsample/functions.cpp | 255 + sources/shiboken2/tests/libsample/functions.h | 104 + sources/shiboken2/tests/libsample/handle.cpp | 44 + sources/shiboken2/tests/libsample/handle.h | 72 + .../tests/libsample/implicitconv.cpp | 66 + .../shiboken2/tests/libsample/implicitconv.h | 83 + .../shiboken2/tests/libsample/injectcode.cpp | 108 + .../shiboken2/tests/libsample/injectcode.h | 65 + .../tests/libsample/libsamplemacros.h | 46 + sources/shiboken2/tests/libsample/list.h | 106 + .../shiboken2/tests/libsample/listuser.cpp | 91 + sources/shiboken2/tests/libsample/listuser.h | 74 + sources/shiboken2/tests/libsample/main.cpp | 244 + sources/shiboken2/tests/libsample/mapuser.cpp | 69 + sources/shiboken2/tests/libsample/mapuser.h | 65 + .../shiboken2/tests/libsample/modelindex.h | 72 + .../tests/libsample/modifications.cpp | 151 + .../shiboken2/tests/libsample/modifications.h | 142 + .../tests/libsample/modified_constructor.cpp | 42 + .../tests/libsample/modified_constructor.h | 46 + .../tests/libsample/multiple_derived.cpp | 64 + .../tests/libsample/multiple_derived.h | 195 + .../tests/libsample/noimplicitconversion.h | 49 + .../tests/libsample/nondefaultctor.h | 75 + sources/shiboken2/tests/libsample/null.h | 44 + .../shiboken2/tests/libsample/objectmodel.cpp | 42 + .../shiboken2/tests/libsample/objectmodel.h | 58 + .../shiboken2/tests/libsample/objecttype.cpp | 311 + .../shiboken2/tests/libsample/objecttype.h | 185 + .../tests/libsample/objecttypebyvalue.h | 46 + .../tests/libsample/objecttypeholder.cpp | 52 + .../tests/libsample/objecttypeholder.h | 51 + .../tests/libsample/objecttypelayout.cpp | 68 + .../tests/libsample/objecttypelayout.h | 56 + .../tests/libsample/objecttypeoperators.cpp | 63 + .../tests/libsample/objecttypeoperators.h | 61 + .../shiboken2/tests/libsample/objectview.cpp | 54 + .../shiboken2/tests/libsample/objectview.h | 58 + sources/shiboken2/tests/libsample/oddbool.h | 83 + .../shiboken2/tests/libsample/onlycopy.cpp | 57 + sources/shiboken2/tests/libsample/onlycopy.h | 59 + .../shiboken2/tests/libsample/overload.cpp | 50 + sources/shiboken2/tests/libsample/overload.h | 143 + .../tests/libsample/overloadsort.cpp | 30 + .../shiboken2/tests/libsample/overloadsort.h | 88 + .../shiboken2/tests/libsample/pairuser.cpp | 57 + sources/shiboken2/tests/libsample/pairuser.h | 55 + sources/shiboken2/tests/libsample/pen.cpp | 67 + sources/shiboken2/tests/libsample/pen.h | 62 + sources/shiboken2/tests/libsample/photon.cpp | 50 + sources/shiboken2/tests/libsample/photon.h | 140 + sources/shiboken2/tests/libsample/point.cpp | 155 + sources/shiboken2/tests/libsample/point.h | 99 + .../shiboken2/tests/libsample/pointerholder.h | 45 + sources/shiboken2/tests/libsample/pointf.cpp | 126 + sources/shiboken2/tests/libsample/pointf.h | 88 + sources/shiboken2/tests/libsample/polygon.cpp | 75 + sources/shiboken2/tests/libsample/polygon.h | 66 + .../shiboken2/tests/libsample/privatector.h | 55 + .../shiboken2/tests/libsample/privatedtor.h | 60 + .../shiboken2/tests/libsample/protected.cpp | 32 + sources/shiboken2/tests/libsample/protected.h | 151 + sources/shiboken2/tests/libsample/rect.h | 86 + .../shiboken2/tests/libsample/reference.cpp | 78 + sources/shiboken2/tests/libsample/reference.h | 81 + .../tests/libsample/removednamespaces.h | 68 + sources/shiboken2/tests/libsample/sample.cpp | 47 + sources/shiboken2/tests/libsample/sample.h | 51 + .../tests/libsample/samplenamespace.cpp | 128 + .../tests/libsample/samplenamespace.h | 166 + sources/shiboken2/tests/libsample/sbkdate.cpp | 48 + sources/shiboken2/tests/libsample/sbkdate.h | 50 + .../shiboken2/tests/libsample/simplefile.cpp | 108 + .../shiboken2/tests/libsample/simplefile.h | 56 + sources/shiboken2/tests/libsample/size.cpp | 39 + sources/shiboken2/tests/libsample/size.h | 206 + .../shiboken2/tests/libsample/sometime.cpp | 99 + sources/shiboken2/tests/libsample/sometime.h | 92 + sources/shiboken2/tests/libsample/str.cpp | 185 + sources/shiboken2/tests/libsample/str.h | 78 + sources/shiboken2/tests/libsample/strlist.cpp | 57 + sources/shiboken2/tests/libsample/strlist.h | 65 + .../shiboken2/tests/libsample/templateptr.cpp | 33 + .../shiboken2/tests/libsample/templateptr.h | 43 + .../shiboken2/tests/libsample/transform.cpp | 65 + sources/shiboken2/tests/libsample/transform.h | 45 + .../tests/libsample/valueandvirtual.h | 47 + .../tests/libsample/virtualmethods.cpp | 78 + .../tests/libsample/virtualmethods.h | 157 + .../shiboken2/tests/libsample/voidholder.h | 54 + .../shiboken2/tests/libsmart/CMakeLists.txt | 11 + .../shiboken2/tests/libsmart/libsmartmacros.h | 46 + sources/shiboken2/tests/libsmart/smart.cpp | 174 + sources/shiboken2/tests/libsmart/smart.h | 210 + .../tests/minimalbinding/CMakeLists.txt | 40 + .../shiboken2/tests/minimalbinding/global.h | 33 + .../tests/minimalbinding/listuser_test.py | 323 + .../tests/minimalbinding/minbool_test.py | 64 + .../minimalbinding/minimal-binding.txt.in | 15 + .../tests/minimalbinding/obj_test.py | 114 + .../tests/minimalbinding/typedef_test.py | 116 + .../minimalbinding/typesystem_minimal.xml | 93 + .../tests/minimalbinding/val_test.py | 115 + .../tests/otherbinding/CMakeLists.txt | 51 + .../collector_external_operator_test.py | 58 + ...class_without_implicit_conversions_test.py | 73 + .../extended_multiply_operator_test.py | 64 + sources/shiboken2/tests/otherbinding/global.h | 35 + .../tests/otherbinding/module_reload_test.py | 61 + .../otherbinding/new_ctor_operator_test.py | 56 + .../tests/otherbinding/objtypehashes_test.py | 53 + .../tests/otherbinding/other-binding.txt.in | 18 + .../tests/otherbinding/otherderived_test.py | 120 + .../otherbinding/test_module_template.py | 40 + .../tests/otherbinding/typediscovery_test.py | 64 + .../tests/otherbinding/typesystem_other.xml | 15 + .../usersprimitivefromothermodule_test.py | 52 + .../tests/otherbinding/wrongctor_test.py | 53 + sources/shiboken2/tests/py3k.py | 2 + sources/shiboken2/tests/py3kcompat.py | 54 + .../tests/samplebinding/CMakeLists.txt | 151 + .../tests/samplebinding/__del___test.py | 50 + .../tests/samplebinding/abstract_test.py | 111 + .../tests/samplebinding/addedfunction_test.py | 62 + .../addedfunction_with_container_args_test.py | 51 + .../argumentmodifications_test.py | 111 + .../tests/samplebinding/array_numpy_test.py | 64 + .../samplebinding/array_sequence_test.py | 53 + .../tests/samplebinding/bug_554_test.py | 45 + .../tests/samplebinding/bug_704_test.py | 68 + .../bytearray_bufferprotocol.cpp | 55 + .../tests/samplebinding/bytearray_test.py | 151 + .../tests/samplebinding/child_return_test.py | 58 + .../tests/samplebinding/class_fields_test.py | 168 + .../tests/samplebinding/collector_test.py | 81 + .../tests/samplebinding/complex_test.py | 84 + .../samplebinding/conversion_operator_test.py | 55 + .../tests/samplebinding/copy_test.py | 86 + .../tests/samplebinding/ctorconvrule_test.py | 49 + .../tests/samplebinding/cyclic_test.py | 109 + .../tests/samplebinding/date_test.py | 58 + .../tests/samplebinding/decisor_test.py | 65 + .../tests/samplebinding/delete_test.py | 47 + .../tests/samplebinding/deprecated_test.py | 44 + .../tests/samplebinding/derived_test.py | 153 + .../tests/samplebinding/duck_punching_test.py | 176 + .../tests/samplebinding/echo_test.py | 52 + .../tests/samplebinding/enum_test.py | 181 + .../enumfromremovednamespace_test.py | 53 + .../event_loop_call_virtual_test.py | 70 + .../samplebinding/event_loop_thread_test.py | 96 + .../tests/samplebinding/filter_test.py | 45 + .../shiboken2/tests/samplebinding/global.h | 90 + .../tests/samplebinding/handleholder_test.py | 57 + .../tests/samplebinding/hashabletype_test.py | 54 + .../tests/samplebinding/ignorederefop_test.py | 38 + .../implicitconv_numerical_test.py | 151 + .../tests/samplebinding/implicitconv_test.py | 66 + .../samplebinding/inheritanceandscope_test.py | 48 + .../tests/samplebinding/injectcode_test.py | 132 + .../tests/samplebinding/innerclass_test.py | 42 + .../tests/samplebinding/intlist_test.py | 98 + .../invalid_virtual_return_test.py | 65 + .../samplebinding/keep_reference_test.py | 81 + .../tests/samplebinding/list_test.py | 121 + .../tests/samplebinding/lock_test.py | 95 + .../shiboken2/tests/samplebinding/map_test.py | 80 + .../tests/samplebinding/metaclass_test.py | 61 + .../samplebinding/mi_virtual_methods_test.py | 88 + .../tests/samplebinding/mixed_mi_test.py | 76 + .../tests/samplebinding/modelindex_test.py | 53 + .../tests/samplebinding/modelview_test.py | 78 + .../tests/samplebinding/modifications_test.py | 224 + .../modified_constructor_test.py | 49 + .../modifiedvirtualmethods_test.py | 248 + .../multi_cpp_inheritance_test.py | 105 + .../samplebinding/multiple_derived_test.py | 221 + .../tests/samplebinding/namespace_test.py | 69 + .../tests/samplebinding/newdivision_test.py | 42 + .../samplebinding/nondefaultctor_test.py | 71 + .../tests/samplebinding/nonzero_test.py | 43 + .../samplebinding/numericaltypedef_test.py | 56 + .../tests/samplebinding/numpy_test.py | 58 + .../tests/samplebinding/objecttype_test.py | 122 + .../objecttype_with_named_args_test.py | 72 + .../samplebinding/objecttypebyvalue_test.py | 42 + .../samplebinding/objecttypelayout_test.py | 302 + .../samplebinding/objecttypeoperators_test.py | 60 + ...pereferenceasvirtualmethodargument_test.py | 49 + .../tests/samplebinding/oddbool_test.py | 78 + .../oldstyleclass_as_number_test.py | 82 + .../tests/samplebinding/onlycopyclass_test.py | 57 + .../tests/samplebinding/overflow_test.py | 87 + .../samplebinding/overload_sorting_test.py | 92 + .../tests/samplebinding/overload_test.py | 209 + .../samplebinding/overloadwithdefault_test.py | 64 + .../ownership_argument_invalidation_test.py | 62 + .../ownership_delete_child_in_cpp_test.py | 54 + .../ownership_delete_child_in_python_test.py | 60 + .../ownership_delete_parent_test.py | 82 + .../ownership_invalidate_after_use_test.py | 110 + .../ownership_invalidate_child_test.py | 69 + ...wnership_invalidate_nonpolymorphic_test.py | 53 + .../ownership_invalidate_parent_test.py | 68 + .../ownership_reparenting_test.py | 130 + .../ownership_transference_test.py | 85 + .../tests/samplebinding/pair_test.py | 105 + .../shiboken2/tests/samplebinding/pen_test.py | 63 + .../tests/samplebinding/point_test.py | 109 + .../tests/samplebinding/pointerholder_test.py | 59 + .../tests/samplebinding/pointf_test.py | 69 + .../primitivereferenceargument_test.py | 49 + .../tests/samplebinding/privatector_test.py | 84 + .../tests/samplebinding/privatedtor_test.py | 99 + .../tests/samplebinding/protected_test.py | 357 + .../tests/samplebinding/pstrlist_test.py | 50 + .../tests/samplebinding/pystr_test.py | 49 + .../tests/samplebinding/python_thread_test.py | 116 + .../receive_null_cstring_test.py | 54 + .../tests/samplebinding/reference_test.py | 122 + .../samplebinding/referencetopointer_test.py | 97 + .../tests/samplebinding/return_null_test.py | 59 + .../tests/samplebinding/richcompare_test.py | 46 + .../tests/samplebinding/sample-binding.txt.in | 15 + .../tests/samplebinding/sample_test.py | 78 + .../tests/samplebinding/simplefile_glue.cpp | 34 + .../tests/samplebinding/simplefile_test.py | 81 + .../tests/samplebinding/size_test.py | 119 + .../static_nonstatic_methods_test.py | 109 + .../shiboken2/tests/samplebinding/str_test.py | 115 + .../tests/samplebinding/strlist_test.py | 112 + .../templateinheritingclass_test.py | 80 + .../tests/samplebinding/time_test.py | 139 + .../tests/samplebinding/transform_test.py | 56 + .../samplebinding/typeconverters_test.py | 189 + .../tests/samplebinding/typedealloc_test.py | 75 + .../samplebinding/typedtordoublefree_test.py | 54 + .../tests/samplebinding/typesystem_sample.xml | 2430 ++ .../tests/samplebinding/unsafe_parent_test.py | 54 + .../tests/samplebinding/useraddedctor_test.py | 45 + .../tests/samplebinding/virtualdtor_test.py | 76 + .../samplebinding/virtualmethods_test.py | 138 + .../samplebinding/visibilitychange_test.py | 47 + .../tests/samplebinding/voidholder_test.py | 69 + .../tests/samplebinding/weakref_test.py | 65 + .../samplebinding/writableclassdict_test.py | 52 + .../tests/shibokenmodule/module_test.py | 116 + .../tests/smartbinding/CMakeLists.txt | 42 + sources/shiboken2/tests/smartbinding/global.h | 29 + .../tests/smartbinding/smart-binding.txt.in | 15 + .../tests/smartbinding/smart_pointer_test.py | 147 + .../tests/smartbinding/typesystem_smart.xml | 23 + sources/shiboken2/tests/sphinxtabletest.cpp | 332 + sources/shiboken2/tests/sphinxtabletest.h | 54 + .../tests/test_generator/CMakeLists.txt | 68 + .../tests/test_generator/dummygenerator.cpp | 70 + .../tests/test_generator/dummygenerator.h | 49 + .../dummygentest-project.txt.in | 20 + .../tests/test_generator/dummygentest.cpp | 138 + .../tests/test_generator/dummygentest.h | 56 + .../test_generator/dummygentestconfig.h.in | 15 + .../shiboken2/tests/test_generator/main.cpp | 39 + .../tests/test_generator/run_test.cmake | 11 + .../tests/test_generator/test_global.h | 1 + .../tests/test_generator/test_typesystem.xml | 3 + testing/__init__.py | 61 + testing/blacklist.py | 125 + testing/buildlog.py | 121 + testing/command.py | 340 + testing/helper.py | 73 + testing/parser.py | 150 + testing/runner.py | 228 + testrunner.py | 46 + 2710 files changed, 483175 insertions(+) create mode 100644 .QT-ENTERPRISE-LICENSE-AGREEMENT create mode 100644 .QT-FOR-APPLICATION-DEVELOPMENT-LICENSE-AGREEMENT create mode 100644 .QT-FOR-AUTOMATION-LICENSE-AGREEMENT create mode 100644 .QT-FOR-AUTOMOTIVE-LICENSE-AGREEMENT create mode 100644 .QT-FOR-DEVICE-CREATION-LICENSE-AGREEMENT create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 .travis.yml create mode 100644 CHANGES.rst create mode 100644 LICENSE.COMMERCIAL create mode 100644 LICENSE.FDL create mode 100644 LICENSE.GPL2 create mode 100644 LICENSE.GPLv3 create mode 100644 LICENSE.GPLv3-EXCEPT create mode 100644 LICENSE.LGPLv3 create mode 100644 MANIFEST.in create mode 100644 README.md create mode 100644 appveyor.yml create mode 100644 build_history/blacklist.txt create mode 100644 build_scripts/__init__.py create mode 100644 build_scripts/main.py create mode 100644 build_scripts/options.py create mode 100644 build_scripts/platforms/__init__.py create mode 100644 build_scripts/platforms/linux.py create mode 100644 build_scripts/platforms/macos.py create mode 100644 build_scripts/platforms/unix.py create mode 100644 build_scripts/platforms/windows_desktop.py create mode 100644 build_scripts/qtinfo.py create mode 100644 build_scripts/utils.py create mode 100644 build_scripts/wheel_override.py create mode 100644 checklibs.py create mode 100644 coin_build_instructions.py create mode 100644 coin_test_instructions.py create mode 100644 docs/.gitignore create mode 100644 docs/Makefile create mode 100644 docs/building/index.rst create mode 100644 docs/building/linux.rst create mode 100644 docs/building/macosx.rst create mode 100644 docs/building/options.rst create mode 100644 docs/building/windows.rst create mode 100644 docs/changes.rst create mode 100644 docs/conf.py create mode 100644 docs/index.rst create mode 100644 docs/installing/index.rst create mode 100644 docs/installing/linux.rst create mode 100644 docs/installing/macosx.rst create mode 100644 docs/installing/windows.rst create mode 100644 docs/make.bat create mode 100644 examples/3d/simple3d.py create mode 100644 examples/axcontainer/axviewer.py create mode 100644 examples/charts/audio.py create mode 100644 examples/charts/callout.py create mode 100644 examples/charts/chartthemes/README.md create mode 100644 examples/charts/chartthemes/main.py create mode 100644 examples/charts/chartthemes/themewidget.ui create mode 100644 examples/charts/donutbreakdown.py create mode 100644 examples/charts/legend.py create mode 100644 examples/charts/lineandbar.py create mode 100644 examples/charts/memoryusage.py create mode 100644 examples/charts/modeldata.py create mode 100644 examples/charts/nesteddonuts.py create mode 100644 examples/charts/percentbarchart.py create mode 100755 examples/corelib/threads/mandelbrot.py create mode 100755 examples/corelib/tools/codecs/codecs.py create mode 100755 examples/corelib/tools/regexp.py create mode 100755 examples/corelib/tools/settingseditor/settingseditor.py create mode 100644 examples/datavisualization/bars3d.py create mode 100644 examples/declarative/extending/chapter1-basics/app.qml create mode 100644 examples/declarative/extending/chapter1-basics/basics.py create mode 100644 examples/declarative/extending/chapter2-methods/app.qml create mode 100644 examples/declarative/extending/chapter2-methods/methods.py create mode 100644 examples/declarative/extending/chapter3-bindings/app.qml create mode 100644 examples/declarative/extending/chapter3-bindings/bindings.py create mode 100644 examples/declarative/extending/chapter4-customPropertyTypes/app.qml create mode 100644 examples/declarative/extending/chapter4-customPropertyTypes/customPropertyTypes.py create mode 100644 examples/declarative/extending/chapter5-listproperties/app.qml create mode 100644 examples/declarative/extending/chapter5-listproperties/listproperties.py create mode 100755 examples/declarative/scrolling.py create mode 100644 examples/declarative/signals/pytoqml1/main.py create mode 100644 examples/declarative/signals/pytoqml1/view.qml create mode 100755 examples/declarative/signals/qmltopy1/main.py create mode 100644 examples/declarative/signals/qmltopy1/view.qml create mode 100755 examples/declarative/signals/qmltopy2/main.py create mode 100644 examples/declarative/signals/qmltopy2/view.qml create mode 100644 examples/declarative/signals/qmltopy3/main.py create mode 100644 examples/declarative/signals/qmltopy3/view.qml create mode 100644 examples/declarative/signals/qmltopy4/main.py create mode 100644 examples/declarative/signals/qmltopy4/view.qml create mode 100644 examples/declarative/textproperties/main.py create mode 100644 examples/declarative/textproperties/view.qml create mode 100644 examples/declarative/usingmodel.py create mode 100644 examples/declarative/view.qml create mode 100644 examples/examples.pyqtc create mode 100755 examples/macextras/macpasteboardmime.py create mode 100755 examples/multimedia/audiooutput.py create mode 100644 examples/multimedia/camera.py create mode 100644 examples/multimedia/player.py create mode 100644 examples/multimedia/shutter.svg create mode 100644 examples/network/blockingfortuneclient.py create mode 100755 examples/network/fortuneclient.py create mode 100755 examples/network/fortuneserver.py create mode 100755 examples/network/threadedfortuneserver.py create mode 100755 examples/opengl/2dpainting.py create mode 100644 examples/opengl/contextinfo.py create mode 100644 examples/opengl/grabber.py create mode 100755 examples/opengl/hellogl.py create mode 100755 examples/opengl/hellogl2.py create mode 100755 examples/opengl/overpainting.py create mode 100755 examples/opengl/samplebuffers.py create mode 100644 examples/opengl/textures/images/side1.png create mode 100644 examples/opengl/textures/images/side2.png create mode 100644 examples/opengl/textures/images/side3.png create mode 100644 examples/opengl/textures/images/side4.png create mode 100644 examples/opengl/textures/images/side5.png create mode 100644 examples/opengl/textures/images/side6.png create mode 100755 examples/opengl/textures/textures.py create mode 100644 examples/opengl/textures/textures.qrc create mode 100644 examples/opengl/textures/textures_rc.py create mode 100644 examples/samplebinding/CMakeLists.txt create mode 100644 examples/samplebinding/README.md create mode 100644 examples/samplebinding/bindings.h create mode 100644 examples/samplebinding/bindings.xml create mode 100644 examples/samplebinding/icecream.cpp create mode 100644 examples/samplebinding/icecream.h create mode 100644 examples/samplebinding/macros.h create mode 100644 examples/samplebinding/main.py create mode 100644 examples/samplebinding/truck.cpp create mode 100644 examples/samplebinding/truck.h create mode 100644 examples/script/README.md create mode 100755 examples/script/helloscript.py create mode 100644 examples/scriptableapplication/CMakeLists.txt create mode 100644 examples/scriptableapplication/README.md create mode 100644 examples/scriptableapplication/main.cpp create mode 100644 examples/scriptableapplication/mainwindow.cpp create mode 100644 examples/scriptableapplication/mainwindow.h create mode 100644 examples/scriptableapplication/pyside2.pri create mode 100644 examples/scriptableapplication/pythonutils.cpp create mode 100644 examples/scriptableapplication/pythonutils.h create mode 100644 examples/scriptableapplication/scriptableapplication.pro create mode 100644 examples/scriptableapplication/scriptableapplication.xml create mode 100644 examples/scriptableapplication/wrappedclasses.h create mode 100644 examples/texttospeech/texttospeech.py create mode 100644 examples/tutorial/t1.py create mode 100644 examples/tutorial/t10.py create mode 100644 examples/tutorial/t11.py create mode 100644 examples/tutorial/t12.py create mode 100644 examples/tutorial/t13.py create mode 100644 examples/tutorial/t14.py create mode 100644 examples/tutorial/t2.py create mode 100644 examples/tutorial/t3.py create mode 100644 examples/tutorial/t4.py create mode 100644 examples/tutorial/t5.py create mode 100644 examples/tutorial/t6.py create mode 100644 examples/tutorial/t7.py create mode 100644 examples/tutorial/t8.py create mode 100644 examples/tutorial/t9.py create mode 100644 examples/utils/pyside2_config.py create mode 100644 examples/utils/utils.py create mode 100644 examples/webenginequick/browser.qml create mode 100644 examples/webenginequick/quicknanobrowser.py create mode 100644 examples/webenginewidgets/simplebrowser.py create mode 100644 examples/webenginewidgets/tabbedbrowser/bookmarkwidget.py create mode 100644 examples/webenginewidgets/tabbedbrowser/browsertabwidget.py create mode 100644 examples/webenginewidgets/tabbedbrowser/downloadwidget.py create mode 100644 examples/webenginewidgets/tabbedbrowser/findtoolbar.py create mode 100644 examples/webenginewidgets/tabbedbrowser/main.py create mode 100644 examples/webenginewidgets/tabbedbrowser/tabbedbrowser.pyqtc create mode 100644 examples/webenginewidgets/tabbedbrowser/webengineview.py create mode 100755 examples/widgets/animation/animatedtiles/animatedtiles.py create mode 100644 examples/widgets/animation/animatedtiles/animatedtiles.qrc create mode 100644 examples/widgets/animation/animatedtiles/animatedtiles_rc.py create mode 100644 examples/widgets/animation/animatedtiles/images/Time-For-Lunch-2.jpg create mode 100644 examples/widgets/animation/animatedtiles/images/centered.png create mode 100644 examples/widgets/animation/animatedtiles/images/ellipse.png create mode 100644 examples/widgets/animation/animatedtiles/images/figure8.png create mode 100644 examples/widgets/animation/animatedtiles/images/kinetic.png create mode 100644 examples/widgets/animation/animatedtiles/images/random.png create mode 100644 examples/widgets/animation/animatedtiles/images/tile.png create mode 100644 examples/widgets/animation/appchooser/accessories-dictionary.png create mode 100644 examples/widgets/animation/appchooser/akregator.png create mode 100755 examples/widgets/animation/appchooser/appchooser.py create mode 100644 examples/widgets/animation/appchooser/appchooser.qrc create mode 100644 examples/widgets/animation/appchooser/appchooser_rc.py create mode 100644 examples/widgets/animation/appchooser/digikam.png create mode 100644 examples/widgets/animation/appchooser/k3b.png create mode 100644 examples/widgets/animation/easing/easing.py create mode 100644 examples/widgets/animation/easing/easing.qrc create mode 100644 examples/widgets/animation/easing/easing_rc.py create mode 100644 examples/widgets/animation/easing/form.ui create mode 100644 examples/widgets/animation/easing/images/qt-logo.png create mode 100644 examples/widgets/animation/easing/ui_form.py create mode 100755 examples/widgets/animation/states/states.py create mode 100644 examples/widgets/animation/states/states_rc.py create mode 100755 examples/widgets/dialogs/classwizard/classwizard.py create mode 100644 examples/widgets/dialogs/classwizard/classwizard.qrc create mode 100644 examples/widgets/dialogs/classwizard/classwizard_rc.py create mode 100644 examples/widgets/dialogs/classwizard/images/background.png create mode 100644 examples/widgets/dialogs/classwizard/images/banner.png create mode 100644 examples/widgets/dialogs/classwizard/images/logo1.png create mode 100644 examples/widgets/dialogs/classwizard/images/logo2.png create mode 100644 examples/widgets/dialogs/classwizard/images/logo3.png create mode 100644 examples/widgets/dialogs/classwizard/images/watermark1.png create mode 100644 examples/widgets/dialogs/classwizard/images/watermark2.png create mode 100755 examples/widgets/dialogs/extension.py create mode 100755 examples/widgets/dialogs/findfiles.py create mode 100644 examples/widgets/dialogs/standarddialogs.py create mode 100755 examples/widgets/dialogs/trivialwizard.py create mode 100755 examples/widgets/draganddrop/draggabletext/draggabletext.py create mode 100644 examples/widgets/draganddrop/draggabletext/draggabletext.qrc create mode 100644 examples/widgets/draganddrop/draggabletext/draggabletext_rc.py create mode 100644 examples/widgets/draganddrop/draggabletext/words.txt create mode 100755 examples/widgets/effects/lighting.py create mode 100755 examples/widgets/graphicsview/anchorlayout.py create mode 100644 examples/widgets/graphicsview/collidingmice/collidingmice.py create mode 100644 examples/widgets/graphicsview/collidingmice/mice_rc.py create mode 100755 examples/widgets/graphicsview/diagramscene/diagramscene.py create mode 100644 examples/widgets/graphicsview/diagramscene/diagramscene.qrc create mode 100644 examples/widgets/graphicsview/diagramscene/diagramscene_rc.py create mode 100644 examples/widgets/graphicsview/diagramscene/images/background1.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/background2.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/background3.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/background4.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/bold.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/bringtofront.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/delete.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/floodfill.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/italic.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/linecolor.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/linepointer.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/pointer.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/sendtoback.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/textpointer.png create mode 100644 examples/widgets/graphicsview/diagramscene/images/underline.png create mode 100644 examples/widgets/graphicsview/dragdroprobot/dragdroprobot.py create mode 100644 examples/widgets/graphicsview/dragdroprobot/dragdroprobot.qrc create mode 100644 examples/widgets/graphicsview/dragdroprobot/dragdroprobot_rc.py create mode 100644 examples/widgets/graphicsview/dragdroprobot/images/head.png create mode 100755 examples/widgets/graphicsview/elasticnodes.py create mode 100644 examples/widgets/itemviews/addressbook/adddialogwidget.py create mode 100644 examples/widgets/itemviews/addressbook/addressbook.py create mode 100644 examples/widgets/itemviews/addressbook/addresswidget.py create mode 100644 examples/widgets/itemviews/addressbook/newaddresstab.py create mode 100644 examples/widgets/itemviews/addressbook/tablemodel.py create mode 100755 examples/widgets/itemviews/basicsortfiltermodel.py create mode 100755 examples/widgets/itemviews/fetchmore.py create mode 100644 examples/widgets/itemviews/stardelegate/stardelegate.py create mode 100644 examples/widgets/itemviews/stardelegate/stareditor.py create mode 100644 examples/widgets/itemviews/stardelegate/starrating.py create mode 100755 examples/widgets/layouts/basiclayouts.py create mode 100644 examples/widgets/layouts/dynamiclayouts.py create mode 100755 examples/widgets/layouts/flowlayout.py create mode 100755 examples/widgets/mainwindows/application/application.py create mode 100644 examples/widgets/mainwindows/application/application.qrc create mode 100644 examples/widgets/mainwindows/application/application_rc.py create mode 100644 examples/widgets/mainwindows/application/images/copy.png create mode 100644 examples/widgets/mainwindows/application/images/cut.png create mode 100644 examples/widgets/mainwindows/application/images/new.png create mode 100644 examples/widgets/mainwindows/application/images/open.png create mode 100644 examples/widgets/mainwindows/application/images/paste.png create mode 100644 examples/widgets/mainwindows/application/images/save.png create mode 100644 examples/widgets/mainwindows/dockwidgets/dockwidgets.py create mode 100644 examples/widgets/mainwindows/dockwidgets/dockwidgets.qrc create mode 100644 examples/widgets/mainwindows/dockwidgets/dockwidgets_rc.py create mode 100644 examples/widgets/mainwindows/dockwidgets/images/new.png create mode 100644 examples/widgets/mainwindows/dockwidgets/images/print.png create mode 100644 examples/widgets/mainwindows/dockwidgets/images/save.png create mode 100644 examples/widgets/mainwindows/dockwidgets/images/undo.png create mode 100644 examples/widgets/mainwindows/mdi/images/copy.png create mode 100644 examples/widgets/mainwindows/mdi/images/cut.png create mode 100644 examples/widgets/mainwindows/mdi/images/new.png create mode 100644 examples/widgets/mainwindows/mdi/images/open.png create mode 100644 examples/widgets/mainwindows/mdi/images/paste.png create mode 100644 examples/widgets/mainwindows/mdi/images/save.png create mode 100755 examples/widgets/mainwindows/mdi/mdi.py create mode 100644 examples/widgets/mainwindows/mdi/mdi.qrc create mode 100644 examples/widgets/mainwindows/mdi/mdi_rc.py create mode 100755 examples/widgets/painting/basicdrawing/basicdrawing.py create mode 100644 examples/widgets/painting/basicdrawing/basicdrawing.qrc create mode 100644 examples/widgets/painting/basicdrawing/basicdrawing_rc.py create mode 100644 examples/widgets/painting/basicdrawing/images/brick.png create mode 100644 examples/widgets/painting/basicdrawing/images/qt-logo.png create mode 100755 examples/widgets/painting/concentriccircles.py create mode 100755 examples/widgets/richtext/orderform.py create mode 100755 examples/widgets/richtext/syntaxhighlighter.py create mode 100644 examples/widgets/richtext/syntaxhighlighter/examples/example create mode 100644 examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter.py create mode 100644 examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter.qrc create mode 100644 examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter_rc.py create mode 100644 examples/widgets/richtext/textobject/files/heart.svg create mode 100755 examples/widgets/richtext/textobject/textobject.py create mode 100755 examples/widgets/state-machine/eventtrans.py create mode 100755 examples/widgets/state-machine/factstates.py create mode 100755 examples/widgets/state-machine/pingpong.py create mode 100755 examples/widgets/state-machine/rogue.py create mode 100755 examples/widgets/state-machine/trafficlight.py create mode 100755 examples/widgets/state-machine/twowaybutton.py create mode 100755 examples/widgets/tutorials/addressbook/part1.py create mode 100755 examples/widgets/tutorials/addressbook/part2.py create mode 100755 examples/widgets/tutorials/addressbook/part3.py create mode 100755 examples/widgets/tutorials/addressbook/part4.py create mode 100755 examples/widgets/tutorials/addressbook/part5.py create mode 100755 examples/widgets/tutorials/addressbook/part6.py create mode 100755 examples/widgets/tutorials/addressbook/part7.py create mode 100755 examples/widgets/widgets/hellogl_openglwidget_legacy.py create mode 100644 examples/widgets/widgets/tetrix.py create mode 100755 examples/xml/dombookmarks/dombookmarks.py create mode 100644 examples/xml/dombookmarks/frank.xbel create mode 100644 examples/xml/dombookmarks/jennifer.xbel create mode 100644 examples/xmlpatterns/schema/files/contact.xsd create mode 100644 examples/xmlpatterns/schema/files/invalid_contact.xml create mode 100644 examples/xmlpatterns/schema/files/invalid_order.xml create mode 100644 examples/xmlpatterns/schema/files/invalid_recipe.xml create mode 100644 examples/xmlpatterns/schema/files/order.xsd create mode 100644 examples/xmlpatterns/schema/files/recipe.xsd create mode 100644 examples/xmlpatterns/schema/files/valid_contact.xml create mode 100644 examples/xmlpatterns/schema/files/valid_order.xml create mode 100644 examples/xmlpatterns/schema/files/valid_recipe.xml create mode 100755 examples/xmlpatterns/schema/schema.py create mode 100644 examples/xmlpatterns/schema/schema.qrc create mode 100644 examples/xmlpatterns/schema/schema.ui create mode 100644 examples/xmlpatterns/schema/schema_rc.py create mode 100644 examples/xmlpatterns/schema/ui_schema.py create mode 100644 ez_setup.py create mode 100644 header.BSD-OLD create mode 100644 missing_bindings.py create mode 100644 popenasync.py create mode 100644 setup.py create mode 100644 sources/patchelf/COPYING create mode 100644 sources/patchelf/README create mode 100644 sources/patchelf/elf.h create mode 100644 sources/patchelf/patchelf.cc create mode 100644 sources/pyside2-tools/AUTHORS create mode 100644 sources/pyside2-tools/CMakeLists.txt create mode 100644 sources/pyside2-tools/LICENSE-lupdate create mode 100644 sources/pyside2-tools/LICENSE-rcc create mode 100644 sources/pyside2-tools/LICENSE-uic create mode 100644 sources/pyside2-tools/README.md create mode 100644 sources/pyside2-tools/cmake_uninstall.cmake create mode 100644 sources/pyside2-tools/pylupdate/CMakeLists.txt create mode 100644 sources/pyside2-tools/pylupdate/fetchtr.cpp create mode 100644 sources/pyside2-tools/pylupdate/main.cpp create mode 100644 sources/pyside2-tools/pylupdate/merge.cpp create mode 100644 sources/pyside2-tools/pylupdate/metatranslator.cpp create mode 100644 sources/pyside2-tools/pylupdate/metatranslator.h create mode 100644 sources/pyside2-tools/pylupdate/numberh.cpp create mode 100644 sources/pyside2-tools/pylupdate/proparser.cpp create mode 100644 sources/pyside2-tools/pylupdate/proparser.h create mode 100644 sources/pyside2-tools/pylupdate/pyside2-lupdate.1 create mode 100644 sources/pyside2-tools/pylupdate/sametexth.cpp create mode 100644 sources/pyside2-tools/pylupdate/simtexth.cpp create mode 100644 sources/pyside2-tools/pylupdate/simtexth.h create mode 100644 sources/pyside2-tools/pylupdate/translator.cpp create mode 100644 sources/pyside2-tools/pylupdate/translator.h create mode 100644 sources/pyside2-tools/pyrcc/CMakeLists.txt create mode 100644 sources/pyside2-tools/pyrcc/main.cpp create mode 100644 sources/pyside2-tools/pyrcc/pyside2-rcc.1 create mode 100644 sources/pyside2-tools/pyrcc/rcc.cpp create mode 100644 sources/pyside2-tools/pyrcc/rcc.h create mode 100644 sources/pyside2-tools/pyside2-uic create mode 100644 sources/pyside2-tools/pyside2uic/Compiler/__init__.py create mode 100644 sources/pyside2-tools/pyside2uic/Compiler/compiler.py create mode 100644 sources/pyside2-tools/pyside2uic/Compiler/indenter.py create mode 100644 sources/pyside2-tools/pyside2uic/Compiler/misc.py create mode 100644 sources/pyside2-tools/pyside2uic/Compiler/proxy_type.py create mode 100644 sources/pyside2-tools/pyside2uic/Compiler/qobjectcreator.py create mode 100644 sources/pyside2-tools/pyside2uic/Compiler/qtproxies.py create mode 100644 sources/pyside2-tools/pyside2uic/__init__.py.in create mode 100644 sources/pyside2-tools/pyside2uic/driver.py create mode 100644 sources/pyside2-tools/pyside2uic/exceptions.py create mode 100644 sources/pyside2-tools/pyside2uic/icon_cache.py create mode 100644 sources/pyside2-tools/pyside2uic/objcreator.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v2/__init__.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v2/as_string.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v2/ascii_upper.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v2/invoke.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v2/load_plugin.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v2/proxy_base.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v2/string_io.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v3/__init__.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v3/as_string.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v3/ascii_upper.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v3/invoke.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v3/load_plugin.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v3/proxy_base.py create mode 100644 sources/pyside2-tools/pyside2uic/port_v3/string_io.py create mode 100644 sources/pyside2-tools/pyside2uic/properties.py create mode 100644 sources/pyside2-tools/pyside2uic/pyside2-uic.1 create mode 100644 sources/pyside2-tools/pyside2uic/uiparser.py create mode 100644 sources/pyside2-tools/pyside2uic/widget-plugins/qtdeclarative.py create mode 100644 sources/pyside2-tools/pyside2uic/widget-plugins/qtwebkit.py create mode 100644 sources/pyside2-tools/qt_attribution.json create mode 100644 sources/pyside2-tools/tests/CMakeLists.txt create mode 100644 sources/pyside2-tools/tests/qwizard_test.ui create mode 100644 sources/pyside2-tools/tests/rcc/CMakeLists.txt create mode 100644 sources/pyside2-tools/tests/rcc/document-print-preview.png create mode 100644 sources/pyside2-tools/tests/rcc/example.qrc create mode 100644 sources/pyside2-tools/tests/rcc/image.qrc create mode 100644 sources/pyside2-tools/tests/rcc/manychars.txt create mode 100644 sources/pyside2-tools/tests/rcc/rcc_image_test.py create mode 100644 sources/pyside2-tools/tests/rcc/rcc_test.py create mode 100755 sources/pyside2-tools/tests/rcc/run_test.sh create mode 100644 sources/pyside2-tools/tests/rcc/shining.txt create mode 100644 sources/pyside2-tools/tests/rcc/words.txt create mode 100644 sources/pyside2/CMakeLists.txt create mode 100644 sources/pyside2/COPYING create mode 100644 sources/pyside2/PySide2/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/Qt3DAnimation/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/Qt3DAnimation/typesystem_3danimation.xml create mode 100644 sources/pyside2/PySide2/Qt3DCore/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/Qt3DCore/typesystem_3dcore.xml create mode 100644 sources/pyside2/PySide2/Qt3DExtras/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/Qt3DExtras/typesystem_3dextras.xml create mode 100644 sources/pyside2/PySide2/Qt3DInput/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/Qt3DInput/typesystem_3dinput.xml create mode 100644 sources/pyside2/PySide2/Qt3DLogic/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/Qt3DLogic/typesystem_3dlogic.xml create mode 100644 sources/pyside2/PySide2/Qt3DRender/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/Qt3DRender/typesystem_3drender.xml create mode 100644 sources/pyside2/PySide2/QtAxContainer/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtAxContainer/QtAxContainer_global.post.h.in create mode 100644 sources/pyside2/PySide2/QtAxContainer/typesystem_axcontainer.xml create mode 100644 sources/pyside2/PySide2/QtCharts/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtCharts/typesystem_charts.xml create mode 100644 sources/pyside2/PySide2/QtConcurrent/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtConcurrent/curr_errors.txt create mode 100644 sources/pyside2/PySide2/QtConcurrent/typesystem_concurrent.xml create mode 100644 sources/pyside2/PySide2/QtCore/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtCore/glue/qbytearray_bufferprotocol.cpp create mode 100644 sources/pyside2/PySide2/QtCore/glue/qbytearray_mgetitem.cpp create mode 100644 sources/pyside2/PySide2/QtCore/glue/qbytearray_msetitem.cpp create mode 100644 sources/pyside2/PySide2/QtCore/glue/qcoreapplication_init.cpp create mode 100644 sources/pyside2/PySide2/QtCore/glue/qeasingcurve_glue.cpp create mode 100644 sources/pyside2/PySide2/QtCore/glue/qeasingcurve_glue.h create mode 100644 sources/pyside2/PySide2/QtCore/glue/qobject_connect.cpp create mode 100644 sources/pyside2/PySide2/QtCore/glue/qobject_findchild.cpp create mode 100644 sources/pyside2/PySide2/QtCore/typesystem_core.xml.in create mode 100644 sources/pyside2/PySide2/QtCore/typesystem_core_common.xml create mode 100644 sources/pyside2/PySide2/QtCore/typesystem_core_mac.xml create mode 100644 sources/pyside2/PySide2/QtCore/typesystem_core_win.xml create mode 100644 sources/pyside2/PySide2/QtCore/typesystem_core_x11.xml create mode 100644 sources/pyside2/PySide2/QtDataVisualization/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtDataVisualization/typesystem_datavisualization.xml create mode 100644 sources/pyside2/PySide2/QtGui/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtGui/QtGui_global.post.h.in create mode 100644 sources/pyside2/PySide2/QtGui/glue/qguiapplication_init.cpp create mode 100644 sources/pyside2/PySide2/QtGui/typesystem_gui.xml.in create mode 100644 sources/pyside2/PySide2/QtGui/typesystem_gui_common.xml create mode 100644 sources/pyside2/PySide2/QtGui/typesystem_gui_mac.xml create mode 100644 sources/pyside2/PySide2/QtGui/typesystem_gui_win.xml create mode 100644 sources/pyside2/PySide2/QtGui/typesystem_gui_x11.xml create mode 100644 sources/pyside2/PySide2/QtHelp/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtHelp/typesystem_help.xml create mode 100644 sources/pyside2/PySide2/QtLocation/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtLocation/typesystem_location.xml create mode 100644 sources/pyside2/PySide2/QtMacExtras/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtMacExtras/typesystem_macextras.xml create mode 100644 sources/pyside2/PySide2/QtMultimedia/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtMultimedia/typesystem_multimedia.xml create mode 100644 sources/pyside2/PySide2/QtMultimedia/typesystem_multimedia_common.xml create mode 100644 sources/pyside2/PySide2/QtMultimedia/typesystem_multimedia_forward_declarations.xml create mode 100644 sources/pyside2/PySide2/QtMultimediaWidgets/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtMultimediaWidgets/typesystem_multimediawidgets.xml create mode 100644 sources/pyside2/PySide2/QtNetwork/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtNetwork/typesystem_network.xml create mode 100644 sources/pyside2/PySide2/QtOpenGL/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtOpenGL/typesystem_opengl.xml create mode 100644 sources/pyside2/PySide2/QtPositioning/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtPositioning/typesystem_positioning.xml create mode 100644 sources/pyside2/PySide2/QtPrintSupport/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtPrintSupport/typesystem_printsupport.xml create mode 100644 sources/pyside2/PySide2/QtQml/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtQml/pysideqmlregistertype.cpp create mode 100644 sources/pyside2/PySide2/QtQml/pysideqmlregistertype.h create mode 100644 sources/pyside2/PySide2/QtQml/typesystem_qml.xml create mode 100644 sources/pyside2/PySide2/QtQuick/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtQuick/pysidequickregistertype.cpp create mode 100644 sources/pyside2/PySide2/QtQuick/pysidequickregistertype.h create mode 100644 sources/pyside2/PySide2/QtQuick/typesystem_quick.xml create mode 100644 sources/pyside2/PySide2/QtQuickWidgets/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtQuickWidgets/typesystem_quickwidgets.xml create mode 100644 sources/pyside2/PySide2/QtScript/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtScript/qscript_value_iterator_glue.cpp create mode 100644 sources/pyside2/PySide2/QtScript/typesystem_script.xml create mode 100644 sources/pyside2/PySide2/QtScriptTools/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtScriptTools/typesystem_scripttools.xml create mode 100644 sources/pyside2/PySide2/QtScxml/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtScxml/typesystem_scxml.xml create mode 100644 sources/pyside2/PySide2/QtSensors/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtSensors/typesystem_sensors.xml create mode 100644 sources/pyside2/PySide2/QtSql/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtSql/QtSql_global.pre.h.in create mode 100644 sources/pyside2/PySide2/QtSql/typesystem_sql.xml create mode 100644 sources/pyside2/PySide2/QtSvg/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtSvg/typesystem_svg.xml create mode 100644 sources/pyside2/PySide2/QtTest/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtTest/QtTest_global.post.h.in create mode 100644 sources/pyside2/PySide2/QtTest/QtTest_global.pre.h.in create mode 100644 sources/pyside2/PySide2/QtTest/typesystem_test.xml create mode 100644 sources/pyside2/PySide2/QtTextToSpeech/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtTextToSpeech/typesystem_texttospeech.xml create mode 100644 sources/pyside2/PySide2/QtUiTools/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtUiTools/glue/plugins.h create mode 100644 sources/pyside2/PySide2/QtUiTools/glue/uitools_loadui.cpp create mode 100644 sources/pyside2/PySide2/QtUiTools/typesystem_uitools.xml create mode 100644 sources/pyside2/PySide2/QtWebChannel/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtWebChannel/typesystem_webchannel.xml create mode 100644 sources/pyside2/PySide2/QtWebEngine/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtWebEngine/typesystem_webengine.xml create mode 100644 sources/pyside2/PySide2/QtWebEngineCore/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtWebEngineCore/typesystem_webenginecore.xml create mode 100644 sources/pyside2/PySide2/QtWebEngineWidgets/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtWebEngineWidgets/typesystem_webenginewidgets.xml create mode 100644 sources/pyside2/PySide2/QtWebKit/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtWebKit/typesystem_webkit.xml create mode 100644 sources/pyside2/PySide2/QtWebKitWidgets/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtWebKitWidgets/typesystem_webkitwidgets.xml create mode 100644 sources/pyside2/PySide2/QtWebSockets/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtWebSockets/typesystem_websockets.xml create mode 100644 sources/pyside2/PySide2/QtWidgets/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtWidgets/glue/qapplication_init.cpp create mode 100644 sources/pyside2/PySide2/QtWidgets/glue/qlayout_help_functions.cpp create mode 100644 sources/pyside2/PySide2/QtWidgets/glue/qmenu_glue.cpp create mode 100644 sources/pyside2/PySide2/QtWidgets/glue/qmenubar_glue.cpp create mode 100644 sources/pyside2/PySide2/QtWidgets/glue/qwidget_glue.cpp create mode 100644 sources/pyside2/PySide2/QtWidgets/typesystem_widgets.xml.in create mode 100644 sources/pyside2/PySide2/QtWidgets/typesystem_widgets_common.xml create mode 100644 sources/pyside2/PySide2/QtWidgets/typesystem_widgets_mac.xml create mode 100644 sources/pyside2/PySide2/QtWidgets/typesystem_widgets_win.xml create mode 100644 sources/pyside2/PySide2/QtWidgets/typesystem_widgets_x11.xml create mode 100644 sources/pyside2/PySide2/QtWinExtras/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtWinExtras/typesystem_winextras.xml create mode 100644 sources/pyside2/PySide2/QtX11Extras/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtX11Extras/QtX11Extras_global.post.h.in create mode 100644 sources/pyside2/PySide2/QtX11Extras/typesystem_x11extras.xml create mode 100644 sources/pyside2/PySide2/QtXml/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtXml/typesystem_xml.xml create mode 100644 sources/pyside2/PySide2/QtXmlPatterns/CMakeLists.txt create mode 100644 sources/pyside2/PySide2/QtXmlPatterns/typesystem_xmlpatterns.xml create mode 100644 sources/pyside2/PySide2/__init__.py.in create mode 100644 sources/pyside2/PySide2/_config.py.in create mode 100644 sources/pyside2/PySide2/global.h.in create mode 100644 sources/pyside2/PySide2/licensecomment.txt create mode 100644 sources/pyside2/PySide2/pysideqtesttouch.h create mode 100644 sources/pyside2/PySide2/pysidewtypes.h create mode 100644 sources/pyside2/PySide2/qpytextobject.cpp create mode 100644 sources/pyside2/PySide2/qpytextobject.h create mode 100644 sources/pyside2/PySide2/qt.conf.in create mode 100644 sources/pyside2/PySide2/support/__init__.py create mode 100644 sources/pyside2/PySide2/support/signature/PSF-3.7.0.txt create mode 100644 sources/pyside2/PySide2/support/signature/__init__.py create mode 100644 sources/pyside2/PySide2/support/signature/backport_inspect.py create mode 100644 sources/pyside2/PySide2/support/signature/fix-complaints.py create mode 100644 sources/pyside2/PySide2/support/signature/loader.py create mode 100644 sources/pyside2/PySide2/support/signature/mapping.py create mode 100644 sources/pyside2/PySide2/support/signature/parser.py create mode 100644 sources/pyside2/PySide2/support/signature/qt_attribution.json create mode 100644 sources/pyside2/PySide2/support/signature/typing27.py create mode 100644 sources/pyside2/PySide2/typesystem_templates.xml create mode 100644 sources/pyside2/cmake/Macros/FindQt5Extra.cmake create mode 100644 sources/pyside2/cmake/Macros/PySideModules.cmake create mode 100644 sources/pyside2/cmake/Macros/icecc.cmake create mode 100644 sources/pyside2/cmake_uninstall.cmake create mode 100644 sources/pyside2/doc/CMakeLists.txt create mode 100644 sources/pyside2/doc/_templates/layout.html create mode 100644 sources/pyside2/doc/_themes/pysidedocs/domainindex.html create mode 100644 sources/pyside2/doc/_themes/pysidedocs/searchbox.html create mode 100644 sources/pyside2/doc/_themes/pysidedocs/static/bg_header.png create mode 100644 sources/pyside2/doc/_themes/pysidedocs/static/bg_topo.jpg create mode 100644 sources/pyside2/doc/_themes/pysidedocs/static/fakebar.png create mode 100644 sources/pyside2/doc/_themes/pysidedocs/static/logo_python.jpg create mode 100644 sources/pyside2/doc/_themes/pysidedocs/static/logo_qt.png create mode 100644 sources/pyside2/doc/_themes/pysidedocs/static/minus.png create mode 100644 sources/pyside2/doc/_themes/pysidedocs/static/plus.png create mode 100644 sources/pyside2/doc/_themes/pysidedocs/static/pysidedocs.css create mode 100644 sources/pyside2/doc/_themes/pysidedocs/static/pysidelogo.png create mode 100644 sources/pyside2/doc/_themes/pysidedocs/static/relbar_bg.png create mode 100644 sources/pyside2/doc/_themes/pysidedocs/theme.conf create mode 100644 sources/pyside2/doc/additionaldocs.lst create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/accessibilityfactorysnippet.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/accessibilitypluginsnippet.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/accessibilityslidersnippet.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/alphachannel.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/audio/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/brush/brush.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/brush/gradientcreationsnippet.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/qt-logo.png create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/renderarea.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/renderarea.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/stylewidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/stylewidget.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/buffer/buffer.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/clipboard/clipwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/clipboard/clipwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/clipboard/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qnamespace.qdoc create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtcore.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtnetwork.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtopengl.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtprintsupport.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtqml.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtquick.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtsql.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qttest.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtwidgets.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtxml.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.gui.text.qtextdocumentwriter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.qdbus.qdbuspendingcall.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.qdbus.qdbuspendingreply.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.scripttools.qscriptenginedebugger.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_codecs_qtextcodec.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_codecs_qtextcodecplugin.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qfuture.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qfuturesynchronizer.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qfuturewatcher.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentexception.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qthreadpool.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_global_qglobal.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qabstractfileengine.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qdatastream.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qdir.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qdiriterator.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qfile.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qfileinfo.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qiodevice.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qprocess.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qsettings.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qtemporaryfile.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qtextstream.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qurl.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qabstracteventdispatcher.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qcoreapplication.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qmetaobject.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qmetatype.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qmimedata.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qobject.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qsystemsemaphore.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qtimer.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_plugin_qlibrary.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_plugin_quuid.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_statemachine_qstatemachine.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qatomic.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qmutex.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qmutexpool.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qreadwritelock.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qsemaphore.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qthread.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qwaitcondition_unix.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qbitarray.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qbytearray.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qdatetime.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qhash.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qlinkedlist.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qlistdata.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qlocale.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qmap.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qpoint.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qqueue.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qrect.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qregexp.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qsize.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qstring.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qtimeline.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qvector.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_xml_qxmlstream.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_accessible_qaccessible.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qabstractprintdialog.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qfontdialog.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qwizard.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_effects_qgraphicseffect.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsgridlayout.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicslinearlayout.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsproxywidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicssceneevent.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicswidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qbitmap.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qicon.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qimage.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qimagereader.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qimagewriter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qmovie.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qpixmap.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qpixmapcache.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qpixmapfilter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qabstractitemview.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qdatawidgetmapper.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qitemselectionmodel.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qtablewidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qtreewidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qaction.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qapplication.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qapplication_x11.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qclipboard.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qevent.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qformlayout.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qkeysequence.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qlayout.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qlayoutitem.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qshortcut.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qshortcutmap.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qsound.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qwidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qbrush.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qcolor.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qdrawutil.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qmatrix.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qpainter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qpainterpath.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qpen.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qregion.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qregion_unix.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qtransform.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_styles_qstyle.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_styles_qstyleoption.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qfont.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qfontmetrics.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qsyntaxhighlighter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qtextcursor.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qtextdocument.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qtextlayout.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qcompleter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qdesktopservices.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qundostack.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qvalidator.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qabstractbutton.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qabstractspinbox.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qcalendarwidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qcheckbox.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qdatetimeedit.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qdockwidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qframe.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qgroupbox.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qlabel.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qlineedit.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qmainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qmenu.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qmenubar.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qplaintextedit.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qpushbutton.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qradiobutton.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qrubberband.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qscrollarea.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qspinbox.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qsplashscreen.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qsplitter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qstatusbar.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qtextbrowser.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qtextedit.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qworkspace.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qftp.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qhttp.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qnetworkdiskcache.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qnetworkrequest.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_kernel_qhostaddress.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_kernel_qhostinfo.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_kernel_qnetworkproxy.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qabstractsocket.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qlocalsocket_unix.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qnativesocketengine.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qtcpserver.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qudpsocket.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_ssl_qsslcertificate.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_ssl_qsslconfiguration.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_ssl_qsslsocket.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qgl.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qglcolormap.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qglpixelbuffer.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qglshaderprogram.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_qtestlib_qtestcase.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptable.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptclass.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptcontext.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptengine.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptengineagent.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptvalue.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptvalueiterator.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqldatabase.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqldriver.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlerror.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlindex.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlquery.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlresult.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_models_qsqlquerymodel.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xml_dom_qdom.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xml_sax_qxml.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstracturiresolver.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstractxmlforwarditerator.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstractxmlnodemodel.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstractxmlreceiver.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qsimplexmlnodemodel.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlformatter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlname.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlquery.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlresultitems.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlserializer.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_assistant_compat_lib_qassistantclient.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_extension_default_extensionfactory.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_extension_extension.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_extension_qextensionmanager.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformeditor.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindowcursor.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindowmanager.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractobjectinspector.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractpropertyeditor.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractwidgetbox.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_uilib_abstractformbuilder.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_uilib_formbuilder.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_patternist_qapplicationargumentparser.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qtgradienteditor_qtgradientdialog.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qtpropertybrowser_qtpropertybrowser.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qtpropertybrowser_qtvariantproperty.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qttoolbardialog_qttoolbardialog.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/console/dbus_pingpong.txt create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/coordsys/coordsys.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/customstyle/customstyle.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/customstyle/customstyle.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/customstyle/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/customviewstyle.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/imagedialog.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/imagedialog.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/imagedialog.ui create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/imagedialog/imagedialog.ui create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/imagedialog/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/imagedialog.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/imagedialog.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/imagedialog.ui create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/imagedialog.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/imagedialog.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/imagedialog.ui create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/imagedialog.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/imagedialog.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/imagedialog.ui create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dialogs/dialogs.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtcharts.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtgui.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtmultimedia.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtxmlpatterns.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/modules.html create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtcore.html create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtgui.html create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtnetwork.html create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtopengl.html create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtsql.html create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtxml.html create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/titles.txt create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/dockwidgets.qrc create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/dragwidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/dragwidget.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/images.qrc create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/images/file.png create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dropactions/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dropactions/window.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dropactions/window.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/droparea.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dropevents/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dropevents/window.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/dropevents/window.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/droprectangle/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/droprectangle/window.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/droprectangle/window.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/eventfilters/filterobject.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/eventfilters/filterobject.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/eventfilters/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/events/events.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/explicitlysharedemployee/employee.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/explicitlysharedemployee/employee.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/explicitlysharedemployee/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/file/file.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/filedialogurls.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/fileinfo/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/graphicssceneadditemsnippet.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/myclass.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/myclass.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/myclass.ts create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/resources.qrc create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/translations/i18n-non-qt-class_en.ts create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/translations/i18n-non-qt-class_fr.ts create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/image/image.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/image/supportedformat.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/inherited-slot/button.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/inherited-slot/button.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/inherited-slot/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/itemselection/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/itemselection/model.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/javastyle.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/layouts/layouts.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/mainwindowsnippet.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/matrix/matrix.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/mdiareasnippets.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/moc/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/moc/myclass1.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/moc/myclass2.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/moc/myclass3.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/model.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/model.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/view.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/view.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/window.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/window.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/myscrollarea.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/network/tcpwait.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/ntfsp.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/painterpath/painterpath.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/anyHTMLElement.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/anyXLinkAttribute.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesIncluded.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesIncludedResult.xml create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesOmitted.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesOmittedResult.xml create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/computedTreeFragment.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/copyAttribute.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/copyID.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/directTreeFragment.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/doc.txt create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/docPlainHTML.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/docPlainHTML2.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/embedDataInXHTML.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/embedDataInXHTML2.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/emptyParagraphs.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/escapeCurlyBraces.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/escapeStringLiterals.xml create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/escapeStringLiterals.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/expressionInsideAttribute.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/filterOnPath.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/filterOnStep.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/firstParagraph.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/fnStringOnAttribute.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/forClause.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/forClause2.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/forClauseOnFeed.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/indented.xml create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introAcneRemover.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introExample2.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introFileHierarchy.xml create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introNavigateFS.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introductionExample.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/invalidLetOrderBy.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/items.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/letOrderBy.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/literalsAndOperators.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/mobeyDick.xml create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nextLastParagraph.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nodeConstructorsAreExpressions.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nodeConstructorsInPaths.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nodeTestChildElement.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/notIndented.xml create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/oneElementConstructor.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/paragraphsExceptTheFiveFirst.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/paragraphsWithTables.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/pathAB.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/pathsAllParagraphs.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/simpleHTML.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/simpleXHTML.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/svgDocumentElement.xml create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/tablesInParagraphs.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/twoSVGElements.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/xmlStylesheet.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/xsBooleanTrue.xq create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/xsvgDocumentElement.xml create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/model.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/picture/picture.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/plaintextlayout/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/plaintextlayout/window.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/plaintextlayout/window.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/pointer/pointer.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/polygon/polygon.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/porting4-dropevents/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/porting4-dropevents/window.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/porting4-dropevents/window.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/errors.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/object.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/object.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/process/process.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qabstractsliderisnippet.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qcalendarwidget/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qcolumnview/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qdebug/qdebugsnippet.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qdir-filepaths/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qdir-listfiles/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qdir-namefilters/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qelapsedtimer/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qfontdatabase/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qgl-namespace/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlabel/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlineargradient/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlineargradient/paintwidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlineargradient/paintwidget.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/model.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/model.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/model.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-dnd/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-dnd/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-dnd/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-using/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-using/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-using/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qmacnativewidget/main.mm create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/delegate.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/model.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/model.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/paintwidget_unix.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/view.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qmetaobject-invokable/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qmetaobject-invokable/window.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qmetaobject-invokable/window.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qprocess-environment/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qprocess/qprocess-simpleexecution.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qquickview-ex.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/buttonwidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/buttonwidget.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsortfilterproxymodel-details/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsortfilterproxymodel/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/qsplashscreen.qrc create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/splash.png create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsql-namespace/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qstack/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qstackedlayout/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qstackedwidget/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qstandarditemmodel/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qstatustipevent/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qstringlistmodel/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qstyleoption/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qstyleplugin/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/qsvgwidget.qrc create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/spheres.svg create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/sunflower.svg create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qt-namespace/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/Images/cubed.png create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/Images/squared.png create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/images.qrc create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-resizing/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-resizing/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-resizing/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/Images/cubed.png create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/Images/squared.png create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/images.qrc create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtcast/qtcast.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtcast/qtcast.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtest-namespace/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/dragdropmodel.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treeitem.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treeitem.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treemodel.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treemodel.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidget-using/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidget-using/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidget-using/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidgetitemiterator-using/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidgetitemiterator-using/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidgetitemiterator-using/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/evaluation/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringobjects/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringobjects/myobject.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringobjects/myobject.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringvalues/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/scriptedslot/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/scriptedslot/object.js create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/scriptedslot/scriptedslot.qrc create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/doc_src_qtuiloader.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/myform.ui create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/mywidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/mywidget.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/mywidget.qrc create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedcontainer/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedwidget/embedwidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedwidget/embedwidget.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedwidget/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlquery/bindingExample.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlschema/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlschemavalidator/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlstreamwriter/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/model.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/window.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/window.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/scribe-overview/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/scriptdebugger.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/separations/finalwidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/separations/finalwidget.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/separations/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/separations/screenwidget.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/separations/screenwidget.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/separations/viewer.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/separations/viewer.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/settings/settings.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/shareddirmodel/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/sharedemployee/employee.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/sharedemployee/employee.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/sharedemployee/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/sharedtablemodel/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/sharedtablemodel/model.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/accountsfile.txt create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/filereader.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/filereader.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/reportfile.txt create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/taxfile.txt create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/lcdnumber.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/lcdnumber.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/signalsandslots.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/signalsandslots.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/simplemodel-use/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/simpleparse/handler.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/simpleparse/handler.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/simpleparse/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/splitter/splitter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/splitterhandle/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/splitterhandle/splitter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/splitterhandle/splitter.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/sqldatabase/sqldatabase.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/streaming/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/stringlistmodel/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/stringlistmodel/model.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/stringlistmodel/model.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/styles/styles.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/stylesheet/common-mistakes.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-formats/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/xmlwriter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/xmlwriter.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/xmlwriter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/xmlwriter.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-charformats/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-css/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-cursors/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-find/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/xmlwriter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/xmlwriter.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imagedrop/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imagedrop/textedit.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imagedrop/textedit.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imageformat/images.qrc create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imageformat/images/advert.png create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imageformat/images/newimage.png create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imageformat/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-images/images.qrc create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-images/images/advert.png create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-images/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-listitems/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-listitems/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-listitems/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-lists/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-lists/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-lists/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-printing/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-printing/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-printing/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-selections/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-selections/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-selections/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/mainwindow.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/xmlwriter.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/xmlwriter.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-texttable/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/textdocumentendsnippet.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/threads/threads.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/threads/threads.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/timeline/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/timers/timers.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/transform/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/uitools/calculatorform/calculatorform.ui create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/uitools/calculatorform/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/model.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/window.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/window.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/webkit/webpage/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/whatsthis/whatsthis.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/widget-mask/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/widget-mask/mask.qrc create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/widget-mask/tux.png create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/widgetdelegate.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/childwidget/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/nestedlayouts/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/toplevel/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/windowlayout/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/handler.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/handler.h create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/rsslisting.cpp create mode 100644 sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/rsslisting.h create mode 100755 sources/pyside2/doc/codesnippets/examples/dbus/example-client.py create mode 100755 sources/pyside2/doc/codesnippets/examples/dbus/example-server.py create mode 100644 sources/pyside2/doc/codesnippets/examples/declarative/cppextensions/plugins/plugin.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/declarative/cppextensions/plugins/plugins.qml create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/classwizard.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/classwizard.qrc create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/background.png create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/banner.png create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/logo1.png create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/logo2.png create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/logo3.png create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/watermark1.png create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/watermark2.png create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/extension/finddialog.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/images/logo.png create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/images/watermark.png create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/licensewizard.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/licensewizard.h create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/licensewizard.qrc create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/standarddialogs/dialog.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/tabdialog/tabdialog.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/dialogs/trivialwizard/trivialwizard.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/graphicsview/simpleanchorlayout/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/imageprovider/imageprovider-example.qml create mode 100644 sources/pyside2/doc/codesnippets/examples/imageprovider/imageprovider.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/itemviews/customsortfiltermodel/mysortfilterproxymodel.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/itemviews/pixelator/pixeldelegate.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/itemviews/simpledommodel/dommodel.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/linguist/hellotr/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/mainwindows/application/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/mainwindows/dockwidgets/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/mainwindows/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/mainwindows/mdi/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/mainwindows/menus/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/mainwindows/sdi/mainwindow.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/quick/plugins/plugins.qml create mode 100644 sources/pyside2/doc/codesnippets/examples/relationaltablemodel/relationaltablemodel.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/richtext/textobject/svgtextobject.h create mode 100644 sources/pyside2/doc/codesnippets/examples/sql/querymodel/editablesqlmodel.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/svggenerator/window.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/uitools/textfinder/textfinder.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/widgets/analogclock/analogclock.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/widgets/groupbox/window.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/widgets/icons/iconsizespinbox.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/widgets/spinboxes/window.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/xml/streambookmarks/xbelreader.cpp create mode 100644 sources/pyside2/doc/codesnippets/examples/xml/streambookmarks/xbelreader.h create mode 100644 sources/pyside2/doc/codesnippets/examples/xml/streambookmarks/xbelwriter.cpp create mode 100644 sources/pyside2/doc/codesnippets/snippets/customstyle/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/snippets/textdocument-resources/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/webkitsnippets/qtwebkit_qwebinspector_snippet.cpp create mode 100644 sources/pyside2/doc/codesnippets/webkitsnippets/qtwebkit_qwebview_snippet.cpp create mode 100644 sources/pyside2/doc/codesnippets/webkitsnippets/simple/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/webkitsnippets/webelement/main.cpp create mode 100644 sources/pyside2/doc/codesnippets/webkitsnippets/webpage/main.cpp create mode 100644 sources/pyside2/doc/conf.py.in create mode 100644 sources/pyside2/doc/contents.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtCore.ClassInfo.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtCore.Signal.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtCore.Slot.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtCore.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtGui.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtHelp.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtMultimedia.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtNetwork.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtOpenGL.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtScript.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtScriptTools.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtSql.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtSvg.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtTest.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtUiTools.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtWebKit.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtXml.rst create mode 100644 sources/pyside2/doc/extras/PySide.QtXmlPatterns.rst create mode 100644 sources/pyside2/doc/gettingstarted.rst create mode 100644 sources/pyside2/doc/index.rst create mode 100644 sources/pyside2/doc/inheritance_diagram.py create mode 100644 sources/pyside2/doc/modules.rst create mode 100644 sources/pyside2/doc/pyhtml2devhelp.py create mode 100644 sources/pyside2/doc/pyside-config.qdocconf.in create mode 100644 sources/pyside2/doc/pysideapi2.rst create mode 100644 sources/pyside2/doc/pysideinclude.py create mode 100644 sources/pyside2/doc/pysideversion.rst create mode 100644 sources/pyside2/doc/qtattributionsscannertorst.py create mode 100644 sources/pyside2/doc/qtmodules/pyside-qt3dextras.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtcharts.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtconcurrent.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtcore.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtdatavisualization.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtgui.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qthelp.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtlocation.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtmacextras.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtmultimediawidgets.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtnetwork.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtopengl.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtpositioning.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtprintsupport.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtqml.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtquickwidgets.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtscxml.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtsensors.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtsql.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtsvg.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qttest.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qttexttospeech.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtuitools.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtwebchannel.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtwebenginewidgets.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtwebsockets.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtwidgets.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtwinextras.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtx11extras.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtxml.qdocconf.in create mode 100644 sources/pyside2/doc/qtmodules/pyside-qtxmlpatterns.qdocconf.in create mode 100644 sources/pyside2/doc/src/README.md create mode 100644 sources/pyside2/doc/tutorials/examples/images/tabbedbrowser.png create mode 100644 sources/pyside2/doc/tutorials/examples/tabbedbrowser.rst create mode 100644 sources/pyside2/doc/tutorials/index.rst create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-adv-tutorial1.png create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-adv-tutorial2.png create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-adv-tutorial3.png create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-adv-tutorial4.gif create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-samegame.png create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/index.rst create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame.tar.bz2 create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/Block.qml create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/Button.qml create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/samegame.qml create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/samegame1.qmlproject create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/Block.qml create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/Button.qml create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/samegame.js create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/samegame.qml create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/samegame2.qmlproject create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/Block.qml create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/Button.qml create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/Dialog.qml create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/samegame.js create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/samegame.qml create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/samegame3.qmlproject create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/BoomBlock.qml create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/Button.qml create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/Dialog.qml create mode 100755 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/samegame.js create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/README create mode 100755 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/score_data.xml create mode 100755 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/score_style.xsl create mode 100755 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/scores.php create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/samegame.qml create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/samegame4.qmlproject create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/background.jpg create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/blueStar.png create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/blueStone.png create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/greenStar.png create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/greenStone.png create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/redStar.png create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/redStone.png create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/star.png create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/yellowStone.png create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame1.rst create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame2.rst create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame3.rst create mode 100644 sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame4.rst create mode 100644 sources/pyside2/doc/tutorials/qmltutorial/declarative-tutorial1.png create mode 100644 sources/pyside2/doc/tutorials/qmltutorial/declarative-tutorial2.png create mode 100644 sources/pyside2/doc/tutorials/qmltutorial/declarative-tutorial3_animation.gif create mode 100644 sources/pyside2/doc/tutorials/qmltutorial/helloworld.tar.bz2 create mode 100644 sources/pyside2/doc/tutorials/qmltutorial/helloworld/Cell.qml create mode 100644 sources/pyside2/doc/tutorials/qmltutorial/helloworld/tutorial1.qml create mode 100644 sources/pyside2/doc/tutorials/qmltutorial/helloworld/tutorial2.qml create mode 100644 sources/pyside2/doc/tutorials/qmltutorial/helloworld/tutorial3.qml create mode 100644 sources/pyside2/doc/tutorials/qmltutorial/index.rst create mode 100644 sources/pyside2/doc/tutorials/qmltutorial/step1.rst create mode 100644 sources/pyside2/doc/tutorials/qmltutorial/step2.rst create mode 100644 sources/pyside2/doc/tutorials/qmltutorial/step3.rst create mode 100644 sources/pyside2/doc/typesystem_doc.xml.in create mode 100644 sources/pyside2/libpyside/CMakeLists.txt create mode 100644 sources/pyside2/libpyside/PySide2Config-spec.cmake.in create mode 100644 sources/pyside2/libpyside/PySide2Config.cmake.in create mode 100644 sources/pyside2/libpyside/PySide2ConfigVersion.cmake.in create mode 100644 sources/pyside2/libpyside/destroylistener.cpp create mode 100644 sources/pyside2/libpyside/destroylistener.h create mode 100644 sources/pyside2/libpyside/dynamicqmetaobject.cpp create mode 100644 sources/pyside2/libpyside/dynamicqmetaobject.h create mode 100644 sources/pyside2/libpyside/dynamicqmetaobject_p.h create mode 100644 sources/pyside2/libpyside/globalreceiver.cpp create mode 100644 sources/pyside2/libpyside/globalreceiver.h create mode 100644 sources/pyside2/libpyside/globalreceiverv2.cpp create mode 100644 sources/pyside2/libpyside/globalreceiverv2.h create mode 100644 sources/pyside2/libpyside/pyside.cpp create mode 100644 sources/pyside2/libpyside/pyside.h create mode 100644 sources/pyside2/libpyside/pyside2.pc.in create mode 100644 sources/pyside2/libpyside/pysideclassinfo.cpp create mode 100644 sources/pyside2/libpyside/pysideclassinfo.h create mode 100644 sources/pyside2/libpyside/pysideclassinfo_p.h create mode 100644 sources/pyside2/libpyside/pysidemacros.h create mode 100644 sources/pyside2/libpyside/pysidemetafunction.cpp create mode 100644 sources/pyside2/libpyside/pysidemetafunction.h create mode 100644 sources/pyside2/libpyside/pysidemetafunction_p.h create mode 100644 sources/pyside2/libpyside/pysideproperty.cpp create mode 100644 sources/pyside2/libpyside/pysideproperty.h create mode 100644 sources/pyside2/libpyside/pysideproperty_p.h create mode 100644 sources/pyside2/libpyside/pysideqflags.cpp create mode 100644 sources/pyside2/libpyside/pysideqflags.h create mode 100644 sources/pyside2/libpyside/pysidesignal.cpp create mode 100644 sources/pyside2/libpyside/pysidesignal.h create mode 100644 sources/pyside2/libpyside/pysidesignal_p.h create mode 100644 sources/pyside2/libpyside/pysideslot.cpp create mode 100644 sources/pyside2/libpyside/pysideslot_p.h create mode 100644 sources/pyside2/libpyside/pysideweakref.cpp create mode 100644 sources/pyside2/libpyside/pysideweakref.h create mode 100644 sources/pyside2/libpyside/signalmanager.cpp.in create mode 100644 sources/pyside2/libpyside/signalmanager.h create mode 100644 sources/pyside2/plugins/CMakeLists.txt create mode 100644 sources/pyside2/plugins/customwidget.cpp create mode 100644 sources/pyside2/plugins/customwidget.h create mode 100644 sources/pyside2/plugins/customwidgets.cpp create mode 100644 sources/pyside2/plugins/customwidgets.h create mode 100644 sources/pyside2/pyside_version.py create mode 100644 sources/pyside2/tests/CMakeLists.txt create mode 100644 sources/pyside2/tests/Qt3DAnimation/CMakeLists.txt create mode 100644 sources/pyside2/tests/Qt3DCore/CMakeLists.txt create mode 100644 sources/pyside2/tests/Qt3DExtras/CMakeLists.txt create mode 100644 sources/pyside2/tests/Qt3DExtras/qt3dextras_test.py create mode 100644 sources/pyside2/tests/Qt3DInput/CMakeLists.txt create mode 100644 sources/pyside2/tests/Qt3DLogic/CMakeLists.txt create mode 100644 sources/pyside2/tests/Qt3DQuick/CMakeLists.txt create mode 100644 sources/pyside2/tests/Qt3DRender/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtAxContainer/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtCharts/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtCharts/qcharts_test.py create mode 100644 sources/pyside2/tests/QtConcurrent/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtCore/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtCore/attr_cache_py3k.py create mode 100644 sources/pyside2/tests/QtCore/blocking_signals_test.py create mode 100644 sources/pyside2/tests/QtCore/bug_1019.py create mode 100644 sources/pyside2/tests/QtCore/bug_1031.py create mode 100644 sources/pyside2/tests/QtCore/bug_1063.py create mode 100644 sources/pyside2/tests/QtCore/bug_1069.py create mode 100644 sources/pyside2/tests/QtCore/bug_278_test.py create mode 100644 sources/pyside2/tests/QtCore/bug_332.py create mode 100644 sources/pyside2/tests/QtCore/bug_408.py create mode 100644 sources/pyside2/tests/QtCore/bug_428.py create mode 100644 sources/pyside2/tests/QtCore/bug_462.py create mode 100644 sources/pyside2/tests/QtCore/bug_505.py create mode 100644 sources/pyside2/tests/QtCore/bug_515.py create mode 100644 sources/pyside2/tests/QtCore/bug_606.py create mode 100644 sources/pyside2/tests/QtCore/bug_656.py create mode 100644 sources/pyside2/tests/QtCore/bug_686.py create mode 100644 sources/pyside2/tests/QtCore/bug_699.py create mode 100644 sources/pyside2/tests/QtCore/bug_706.py create mode 100644 sources/pyside2/tests/QtCore/bug_820.py create mode 100644 sources/pyside2/tests/QtCore/bug_826.py create mode 100644 sources/pyside2/tests/QtCore/bug_829.py create mode 100644 sources/pyside2/tests/QtCore/bug_835.py create mode 100644 sources/pyside2/tests/QtCore/bug_920.py create mode 100644 sources/pyside2/tests/QtCore/bug_927.py create mode 100644 sources/pyside2/tests/QtCore/bug_931.py create mode 100644 sources/pyside2/tests/QtCore/bug_938.py create mode 100644 sources/pyside2/tests/QtCore/bug_953.py create mode 100644 sources/pyside2/tests/QtCore/bug_987.py create mode 100644 sources/pyside2/tests/QtCore/bug_994.py create mode 100644 sources/pyside2/tests/QtCore/bug_PYSIDE-164.py create mode 100644 sources/pyside2/tests/QtCore/bug_PYSIDE-42.py create mode 100644 sources/pyside2/tests/QtCore/child_event_test.py create mode 100644 sources/pyside2/tests/QtCore/classinfo_test.py create mode 100644 sources/pyside2/tests/QtCore/deepcopy_test.py create mode 100644 sources/pyside2/tests/QtCore/deletelater_test.py create mode 100644 sources/pyside2/tests/QtCore/destroysignal_test.py create mode 100644 sources/pyside2/tests/QtCore/duck_punching_test.py create mode 100644 sources/pyside2/tests/QtCore/emoji_string_test.py create mode 100644 sources/pyside2/tests/QtCore/hash_test.py create mode 100644 sources/pyside2/tests/QtCore/inherits_test.py create mode 100644 sources/pyside2/tests/QtCore/max_signals.py create mode 100644 sources/pyside2/tests/QtCore/missing_symbols_test.py create mode 100644 sources/pyside2/tests/QtCore/mockclass_test.py create mode 100644 sources/pyside2/tests/QtCore/python_conversion.py create mode 100644 sources/pyside2/tests/QtCore/qabs_test.py create mode 100644 sources/pyside2/tests/QtCore/qabstractitemmodel_test.py create mode 100644 sources/pyside2/tests/QtCore/qabstracttransition_test.py create mode 100644 sources/pyside2/tests/QtCore/qanimationgroup_test.py create mode 100644 sources/pyside2/tests/QtCore/qbitarray_test.py create mode 100644 sources/pyside2/tests/QtCore/qbytearray_buffer_protocol_test.py create mode 100644 sources/pyside2/tests/QtCore/qbytearray_concatenation_operator_test.py create mode 100644 sources/pyside2/tests/QtCore/qbytearray_operator_iadd_test.py create mode 100644 sources/pyside2/tests/QtCore/qbytearray_operator_test.py create mode 100644 sources/pyside2/tests/QtCore/qbytearray_test.py create mode 100644 sources/pyside2/tests/QtCore/qcollator_test.py create mode 100644 sources/pyside2/tests/QtCore/qcommandlineparser_test.py create mode 100644 sources/pyside2/tests/QtCore/qcoreapplication_instance_test.py create mode 100644 sources/pyside2/tests/QtCore/qcoreapplication_test.py create mode 100644 sources/pyside2/tests/QtCore/qdatastream_test.py create mode 100644 sources/pyside2/tests/QtCore/qdate_test.py create mode 100644 sources/pyside2/tests/QtCore/qdatetime_test.py create mode 100644 sources/pyside2/tests/QtCore/qeasingcurve_test.py create mode 100644 sources/pyside2/tests/QtCore/qenum_test.py create mode 100644 sources/pyside2/tests/QtCore/qevent_test.py create mode 100644 sources/pyside2/tests/QtCore/qfile_test.py create mode 100644 sources/pyside2/tests/QtCore/qfileinfo_test.py create mode 100644 sources/pyside2/tests/QtCore/qfileread_test.py create mode 100644 sources/pyside2/tests/QtCore/qflags_test.py create mode 100644 sources/pyside2/tests/QtCore/qhandle_test.py create mode 100644 sources/pyside2/tests/QtCore/qinstallmsghandler_test.py create mode 100644 sources/pyside2/tests/QtCore/qlinef_test.py create mode 100644 sources/pyside2/tests/QtCore/qlocale_test.py create mode 100644 sources/pyside2/tests/QtCore/qlockfile_test.py create mode 100644 sources/pyside2/tests/QtCore/qmessageauthenticationcode_test.py create mode 100644 sources/pyside2/tests/QtCore/qmetaobject_test.py create mode 100644 sources/pyside2/tests/QtCore/qmimedatabase_test.py create mode 100644 sources/pyside2/tests/QtCore/qmodelindex_internalpointer_test.py create mode 100644 sources/pyside2/tests/QtCore/qobject_children_segfault_test.py create mode 100644 sources/pyside2/tests/QtCore/qobject_connect_notify_test.py create mode 100644 sources/pyside2/tests/QtCore/qobject_destructor.py create mode 100644 sources/pyside2/tests/QtCore/qobject_event_filter_test.py create mode 100644 sources/pyside2/tests/QtCore/qobject_inherits_test.py create mode 100644 sources/pyside2/tests/QtCore/qobject_objectproperty_test.py create mode 100644 sources/pyside2/tests/QtCore/qobject_parent_test.py create mode 100644 sources/pyside2/tests/QtCore/qobject_property_test.py create mode 100644 sources/pyside2/tests/QtCore/qobject_protected_methods_test.py create mode 100644 sources/pyside2/tests/QtCore/qobject_test.py create mode 100644 sources/pyside2/tests/QtCore/qobject_timer_event_test.py create mode 100644 sources/pyside2/tests/QtCore/qobject_tr_as_instance_test.py create mode 100644 sources/pyside2/tests/QtCore/qoperatingsystemversion_test.py create mode 100644 sources/pyside2/tests/QtCore/qpoint_test.py create mode 100644 sources/pyside2/tests/QtCore/qprocess_test.py create mode 100644 sources/pyside2/tests/QtCore/qproperty_decorator.py create mode 100644 sources/pyside2/tests/QtCore/qrandomgenerator_test.py create mode 100644 sources/pyside2/tests/QtCore/qrect_test.py create mode 100644 sources/pyside2/tests/QtCore/qregexp_test.py create mode 100644 sources/pyside2/tests/QtCore/qregularexpression_test.py create mode 100644 sources/pyside2/tests/QtCore/qresource_test.py create mode 100644 sources/pyside2/tests/QtCore/qsize_test.py create mode 100644 sources/pyside2/tests/QtCore/qslot_object_test.py create mode 100644 sources/pyside2/tests/QtCore/qsocketnotifier_test.py create mode 100644 sources/pyside2/tests/QtCore/qsrand_test.py create mode 100644 sources/pyside2/tests/QtCore/qstandardpaths_test.py create mode 100644 sources/pyside2/tests/QtCore/qstate_test.py create mode 100644 sources/pyside2/tests/QtCore/qstatemachine_test.py create mode 100644 sources/pyside2/tests/QtCore/qstorageinfo_test.py create mode 100644 sources/pyside2/tests/QtCore/qstring_test.py create mode 100644 sources/pyside2/tests/QtCore/qsysinfo_test.py create mode 100644 sources/pyside2/tests/QtCore/qtext_codec_test.py create mode 100644 sources/pyside2/tests/QtCore/qtextstream_test.py create mode 100644 sources/pyside2/tests/QtCore/qthread_prod_cons_test.py create mode 100644 sources/pyside2/tests/QtCore/qthread_signal_test.py create mode 100644 sources/pyside2/tests/QtCore/qthread_test.py create mode 100644 sources/pyside2/tests/QtCore/qtimer_singleshot_test.py create mode 100644 sources/pyside2/tests/QtCore/qtimer_timeout_test.py create mode 100644 sources/pyside2/tests/QtCore/qtimezone_test.py create mode 100644 sources/pyside2/tests/QtCore/qtnamespace_test.py create mode 100644 sources/pyside2/tests/QtCore/quoteEnUS.txt create mode 100644 sources/pyside2/tests/QtCore/qurl_test.py create mode 100644 sources/pyside2/tests/QtCore/qurlquery_test.py create mode 100644 sources/pyside2/tests/QtCore/quuid_test.py create mode 100644 sources/pyside2/tests/QtCore/qversionnumber_test.py create mode 100644 sources/pyside2/tests/QtCore/repr_test.py create mode 100644 sources/pyside2/tests/QtCore/resources.qrc create mode 100644 sources/pyside2/tests/QtCore/resources_mc.py create mode 100644 sources/pyside2/tests/QtCore/sample.png create mode 100644 sources/pyside2/tests/QtCore/setprop_on_ctor_test.py create mode 100644 sources/pyside2/tests/QtCore/staticMetaObject_test.py create mode 100644 sources/pyside2/tests/QtCore/static_method_test.py create mode 100644 sources/pyside2/tests/QtCore/thread_signals_test.py create mode 100644 sources/pyside2/tests/QtCore/tr_noop_test.py create mode 100644 sources/pyside2/tests/QtCore/translation_test.py create mode 100644 sources/pyside2/tests/QtCore/translations/trans_latin.qm create mode 100644 sources/pyside2/tests/QtCore/translations/trans_latin.ts create mode 100644 sources/pyside2/tests/QtCore/translations/trans_russian.qm create mode 100644 sources/pyside2/tests/QtCore/translations/trans_russian.ts create mode 100644 sources/pyside2/tests/QtCore/unaryoperator_test.py create mode 100644 sources/pyside2/tests/QtCore/unicode_test.py create mode 100644 sources/pyside2/tests/QtCore/versioninfo_test.py create mode 100644 sources/pyside2/tests/QtDataVisualization/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtDataVisualization/datavisualization_test.py create mode 100644 sources/pyside2/tests/QtDesigner/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtGui/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtGui/bug_1091.py create mode 100644 sources/pyside2/tests/QtGui/bug_300_test.py create mode 100644 sources/pyside2/tests/QtGui/bug_367.py create mode 100644 sources/pyside2/tests/QtGui/bug_480.py create mode 100644 sources/pyside2/tests/QtGui/bug_606.py create mode 100644 sources/pyside2/tests/QtGui/bug_617.py create mode 100644 sources/pyside2/tests/QtGui/bug_652.py create mode 100644 sources/pyside2/tests/QtGui/bug_660.py create mode 100644 sources/pyside2/tests/QtGui/bug_716.py create mode 100644 sources/pyside2/tests/QtGui/bug_740.py create mode 100644 sources/pyside2/tests/QtGui/bug_743.py create mode 100644 sources/pyside2/tests/QtGui/bug_991.py create mode 100644 sources/pyside2/tests/QtGui/bug_PYSIDE-344.py create mode 100644 sources/pyside2/tests/QtGui/bug_PYSIDE-41.py create mode 100644 sources/pyside2/tests/QtGui/deepcopy_test.py create mode 100644 sources/pyside2/tests/QtGui/float_to_int_implicit_conversion_test.py create mode 100644 sources/pyside2/tests/QtGui/pyside_reload_test.py create mode 100644 sources/pyside2/tests/QtGui/qcolor_reduce_test.py create mode 100644 sources/pyside2/tests/QtGui/qcolor_test.py create mode 100644 sources/pyside2/tests/QtGui/qcursor_test.py create mode 100644 sources/pyside2/tests/QtGui/qdatastream_gui_operators_test.py create mode 100644 sources/pyside2/tests/QtGui/qdesktopservices_test.py create mode 100644 sources/pyside2/tests/QtGui/qfontmetrics_test.py create mode 100644 sources/pyside2/tests/QtGui/qguiapplication_test.py create mode 100644 sources/pyside2/tests/QtGui/qicon_test.py create mode 100644 sources/pyside2/tests/QtGui/qitemselection_test.py create mode 100644 sources/pyside2/tests/QtGui/qkeysequence_test.py create mode 100644 sources/pyside2/tests/QtGui/qmatrix_test.py create mode 100644 sources/pyside2/tests/QtGui/qopenglbuffer_test.py create mode 100644 sources/pyside2/tests/QtGui/qopenglwindow_test.py create mode 100644 sources/pyside2/tests/QtGui/qpainter_test.py create mode 100644 sources/pyside2/tests/QtGui/qpdfwriter_test.py create mode 100644 sources/pyside2/tests/QtGui/qpixelformat_test.py create mode 100644 sources/pyside2/tests/QtGui/qpixmap_test.py create mode 100644 sources/pyside2/tests/QtGui/qpixmapcache_test.py create mode 100644 sources/pyside2/tests/QtGui/qpolygonf_test.py create mode 100644 sources/pyside2/tests/QtGui/qradialgradient_test.py create mode 100644 sources/pyside2/tests/QtGui/qrasterwindow_test.py create mode 100644 sources/pyside2/tests/QtGui/qregion_test.py create mode 100644 sources/pyside2/tests/QtGui/qstylehints_test.py create mode 100644 sources/pyside2/tests/QtGui/qtextdocument_undoredo_test.py create mode 100644 sources/pyside2/tests/QtGui/qtextdocumentwriter_test.py create mode 100644 sources/pyside2/tests/QtGui/qtextline_test.py create mode 100644 sources/pyside2/tests/QtGui/qtransform_test.py create mode 100644 sources/pyside2/tests/QtGui/repr_test.py create mode 100644 sources/pyside2/tests/QtGui/sample.png create mode 100644 sources/pyside2/tests/QtGui/timed_app_test.py create mode 100644 sources/pyside2/tests/QtHelp/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtHelp/help_test.py create mode 100644 sources/pyside2/tests/QtHelp/helpsearchengine_test.py create mode 100644 sources/pyside2/tests/QtLocation/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtLocation/location.py create mode 100644 sources/pyside2/tests/QtMacExtras/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtMultimedia/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtMultimedia/audio_test.py create mode 100644 sources/pyside2/tests/QtMultimediaWidgets/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtMultimediaWidgets/qmultimediawidgets.py create mode 100644 sources/pyside2/tests/QtNetwork/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtNetwork/accessManager_test.py create mode 100644 sources/pyside2/tests/QtNetwork/bug_1084.py create mode 100644 sources/pyside2/tests/QtNetwork/bug_446.py create mode 100644 sources/pyside2/tests/QtNetwork/dnslookup_test.py create mode 100644 sources/pyside2/tests/QtNetwork/qipv6address_test.py create mode 100644 sources/pyside2/tests/QtNetwork/tcpserver_test.py create mode 100644 sources/pyside2/tests/QtNetwork/udpsocket_test.py create mode 100644 sources/pyside2/tests/QtOpenGL/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtOpenGL/qglbuffer_test.py create mode 100644 sources/pyside2/tests/QtOpenGL/qglwidget_test.py create mode 100644 sources/pyside2/tests/QtPositioning/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtPositioning/positioning.py create mode 100644 sources/pyside2/tests/QtPrintSupport/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtPrintSupport/bug_500.py create mode 100644 sources/pyside2/tests/QtPrintSupport/returnquadruplesofnumbers_test.py create mode 100755 sources/pyside2/tests/QtQml/CMakeLists.txt create mode 100755 sources/pyside2/tests/QtQml/bug_1029.py create mode 100755 sources/pyside2/tests/QtQml/bug_1029.qml create mode 100755 sources/pyside2/tests/QtQml/bug_451.py create mode 100755 sources/pyside2/tests/QtQml/bug_451.qml create mode 100755 sources/pyside2/tests/QtQml/bug_456.py create mode 100755 sources/pyside2/tests/QtQml/bug_456.qml create mode 100755 sources/pyside2/tests/QtQml/bug_557.py create mode 100755 sources/pyside2/tests/QtQml/bug_726.py create mode 100755 sources/pyside2/tests/QtQml/bug_726.qml create mode 100755 sources/pyside2/tests/QtQml/bug_814.py create mode 100755 sources/pyside2/tests/QtQml/bug_814.qml create mode 100755 sources/pyside2/tests/QtQml/bug_825.py create mode 100755 sources/pyside2/tests/QtQml/bug_825.qml create mode 100755 sources/pyside2/tests/QtQml/bug_847.py create mode 100755 sources/pyside2/tests/QtQml/bug_847.qml create mode 100755 sources/pyside2/tests/QtQml/bug_915.py create mode 100755 sources/pyside2/tests/QtQml/bug_926.py create mode 100755 sources/pyside2/tests/QtQml/bug_926.qml create mode 100755 sources/pyside2/tests/QtQml/bug_951.py create mode 100755 sources/pyside2/tests/QtQml/bug_951.qml create mode 100755 sources/pyside2/tests/QtQml/bug_995.py create mode 100755 sources/pyside2/tests/QtQml/bug_995.qml create mode 100755 sources/pyside2/tests/QtQml/bug_997.py create mode 100755 sources/pyside2/tests/QtQml/bug_997.qml create mode 100644 sources/pyside2/tests/QtQml/connect_python_qml.py create mode 100755 sources/pyside2/tests/QtQml/connect_python_qml.qml create mode 100755 sources/pyside2/tests/QtQml/hw.qml create mode 100644 sources/pyside2/tests/QtQml/javascript_exceptions.py create mode 100644 sources/pyside2/tests/QtQml/javascript_exceptions.qml create mode 100644 sources/pyside2/tests/QtQml/qqmlincubator_incubateWhile.py create mode 100644 sources/pyside2/tests/QtQml/qqmlincubator_incubateWhile.qml create mode 100644 sources/pyside2/tests/QtQml/qqmlincubator_incubateWhile_component.qml create mode 100755 sources/pyside2/tests/QtQml/qqmlnetwork_test.py create mode 100644 sources/pyside2/tests/QtQml/qquickitem_grabToImage.py create mode 100644 sources/pyside2/tests/QtQml/qquickitem_grabToImage.qml create mode 100755 sources/pyside2/tests/QtQml/qquickview_test.py create mode 100755 sources/pyside2/tests/QtQml/registertype.py create mode 100755 sources/pyside2/tests/QtQml/registertype.qml create mode 100755 sources/pyside2/tests/QtQml/view.qml create mode 100755 sources/pyside2/tests/QtQml/viewmodel.qml create mode 100644 sources/pyside2/tests/QtQuick/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtQuickWidgets/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtScript/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtScript/base_test.py create mode 100644 sources/pyside2/tests/QtScript/bug_1022.py create mode 100644 sources/pyside2/tests/QtScript/engine_test.py create mode 100644 sources/pyside2/tests/QtScript/property_test.py create mode 100644 sources/pyside2/tests/QtScript/qscriptvalue_test.py create mode 100644 sources/pyside2/tests/QtScriptTools/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtScriptTools/debugger_test.py create mode 100644 sources/pyside2/tests/QtScxml/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtScxml/test_dynamic.py create mode 100644 sources/pyside2/tests/QtScxml/trafficlight.scxml create mode 100644 sources/pyside2/tests/QtSensors/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtSensors/sensors.py create mode 100644 sources/pyside2/tests/QtSql/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtSql/bug_1013.py create mode 100644 sources/pyside2/tests/QtSql/qsqldatabaseandqueries_test.py create mode 100644 sources/pyside2/tests/QtSql/qvarianttype_test.py create mode 100644 sources/pyside2/tests/QtSvg/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtSvg/qsvggenerator_test.py create mode 100644 sources/pyside2/tests/QtSvg/qsvgrenderer_test.py create mode 100644 sources/pyside2/tests/QtSvg/qsvgwidget_test.py create mode 100644 sources/pyside2/tests/QtSvg/tiger.svg create mode 100644 sources/pyside2/tests/QtTest/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtTest/click_test.py create mode 100644 sources/pyside2/tests/QtTest/eventfilter_test.py create mode 100644 sources/pyside2/tests/QtTest/qvalidator_test.py create mode 100644 sources/pyside2/tests/QtTest/touchevent_test.py create mode 100644 sources/pyside2/tests/QtTextToSpeech/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtTextToSpeech/qtexttospeech_test.py create mode 100644 sources/pyside2/tests/QtUiTools/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtUiTools/action.ui create mode 100644 sources/pyside2/tests/QtUiTools/bug_1060.py create mode 100644 sources/pyside2/tests/QtUiTools/bug_1060.ui create mode 100644 sources/pyside2/tests/QtUiTools/bug_360.py create mode 100644 sources/pyside2/tests/QtUiTools/bug_376.py create mode 100644 sources/pyside2/tests/QtUiTools/bug_392.py create mode 100644 sources/pyside2/tests/QtUiTools/bug_426.py create mode 100644 sources/pyside2/tests/QtUiTools/bug_426.ui create mode 100644 sources/pyside2/tests/QtUiTools/bug_552.py create mode 100644 sources/pyside2/tests/QtUiTools/bug_552.ui create mode 100644 sources/pyside2/tests/QtUiTools/bug_797.py create mode 100644 sources/pyside2/tests/QtUiTools/bug_909.py create mode 100644 sources/pyside2/tests/QtUiTools/bug_909.ui create mode 100644 sources/pyside2/tests/QtUiTools/bug_913.py create mode 100644 sources/pyside2/tests/QtUiTools/bug_913.ui create mode 100644 sources/pyside2/tests/QtUiTools/bug_958.py create mode 100644 sources/pyside2/tests/QtUiTools/bug_958.ui create mode 100644 sources/pyside2/tests/QtUiTools/bug_965.py create mode 100644 sources/pyside2/tests/QtUiTools/bug_965.ui create mode 100644 sources/pyside2/tests/QtUiTools/minimal.ui create mode 100644 sources/pyside2/tests/QtUiTools/pycustomwidget.ui create mode 100644 sources/pyside2/tests/QtUiTools/pycustomwidget2.ui create mode 100644 sources/pyside2/tests/QtUiTools/test.ui create mode 100644 sources/pyside2/tests/QtUiTools/ui_test.py create mode 100644 sources/pyside2/tests/QtUiTools/uiloader_test.py create mode 100644 sources/pyside2/tests/QtWebChannel/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtWebEngine/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtWebEngine/web_engine_initialize.py create mode 100644 sources/pyside2/tests/QtWebEngineCore/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtWebEngineCore/web_engine_custom_scheme.py create mode 100644 sources/pyside2/tests/QtWebEngineWidgets/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtWebEngineWidgets/pyside-474-qtwebengineview.py create mode 100644 sources/pyside2/tests/QtWebKit/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtWebKit/bug_448.py create mode 100644 sources/pyside2/tests/QtWebKit/bug_694.py create mode 100644 sources/pyside2/tests/QtWebKit/bug_803.py create mode 100644 sources/pyside2/tests/QtWebKit/bug_899.py create mode 100644 sources/pyside2/tests/QtWebKit/bug_959.py create mode 100644 sources/pyside2/tests/QtWebKit/fox.html create mode 100644 sources/pyside2/tests/QtWebKit/qml_plugin_test.py create mode 100644 sources/pyside2/tests/QtWebKit/qmlplugin/dummy.pys create mode 100644 sources/pyside2/tests/QtWebKit/qmlplugin/index.html create mode 100644 sources/pyside2/tests/QtWebKit/qvariantlist_property_test.py create mode 100644 sources/pyside2/tests/QtWebKit/shouldInterruptjavascript_test.py create mode 100644 sources/pyside2/tests/QtWebKit/webframe_test.py create mode 100644 sources/pyside2/tests/QtWebKit/webpage_test.py create mode 100644 sources/pyside2/tests/QtWebKit/webview_test.py create mode 100644 sources/pyside2/tests/QtWebKitWidgets/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtWebSockets/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtWidgets/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtWidgets/action_clear.py create mode 100644 sources/pyside2/tests/QtWidgets/add_action_test.py create mode 100644 sources/pyside2/tests/QtWidgets/api2_test.py create mode 100644 sources/pyside2/tests/QtWidgets/application_test.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_1002.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_1006.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_1048.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_1077.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_172.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_243.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_307.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_324.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_338.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_363.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_389.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_400.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_416.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_429.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_430.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_433.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_467.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_493.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_512.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_525.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_546.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_547.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_549.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_569.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_575.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_576.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_585.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_589.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_632.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_635.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_640.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_653.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_662.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_667.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_668.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_674.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_675.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_688.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_693.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_696.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_711.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_714.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_722.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_728.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_736.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_750.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_778.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_785.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_793.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_811.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_834.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_836.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_844.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_854.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_860.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_862.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_871.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_879.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_919.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_921.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_941.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_964.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_967.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_972.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_979.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_988.py create mode 100644 sources/pyside2/tests/QtWidgets/bug_998.py create mode 100644 sources/pyside2/tests/QtWidgets/customproxywidget_test.py create mode 100644 sources/pyside2/tests/QtWidgets/event_filter_test.py create mode 100644 sources/pyside2/tests/QtWidgets/grandparent_method_test.py create mode 100644 sources/pyside2/tests/QtWidgets/hashabletype_test.py create mode 100644 sources/pyside2/tests/QtWidgets/import_test.py create mode 100644 sources/pyside2/tests/QtWidgets/keep_reference_test.py create mode 100644 sources/pyside2/tests/QtWidgets/missing_symbols_test.py create mode 100644 sources/pyside2/tests/QtWidgets/paint_event_test.py create mode 100644 sources/pyside2/tests/QtWidgets/parent_method_test.py create mode 100644 sources/pyside2/tests/QtWidgets/private_mangle_test.py create mode 100644 sources/pyside2/tests/QtWidgets/python_properties_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qabstracttextdocumentlayout_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qaction_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qapp_issue_585.py create mode 100644 sources/pyside2/tests/QtWidgets/qapp_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qapplication_exit_segfault_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qapplication_singleton_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qapplication_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qbrush_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qcolormap_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qdynamic_signal.py create mode 100644 sources/pyside2/tests/QtWidgets/qfontdialog_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qformlayout_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qgraphicsitem_isblocked_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qgraphicsitem_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qgraphicsobjectreimpl_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qgraphicsproxywidget_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qgraphicsscene_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qimage_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qinputdialog_get_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qkeysequenceedit_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qlabel_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qlayout_ref_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qlayout_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qlcdnumber_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qlistwidget_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qlistwidgetitem_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qmainwindow_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qmenu_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qmenuadd_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qobject_mi_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qpen_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qpicture_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qpixmap_constructor.py create mode 100644 sources/pyside2/tests/QtWidgets/qpushbutton_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qshortcut_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qsplitter_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qstandarditemmodel_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qstring_qkeysequence_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qstyle_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qtableview_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qtabwidget_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qtabwidgetclear_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qtextedit_signal_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qtextedit_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qtoolbar_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qtoolbox_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qtreeview_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qtreewidget_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qvariant_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qwidget_setlayout_test.py create mode 100644 sources/pyside2/tests/QtWidgets/qwidget_test.py create mode 100644 sources/pyside2/tests/QtWidgets/reference_count_test.py create mode 100644 sources/pyside2/tests/QtWidgets/sample.png create mode 100644 sources/pyside2/tests/QtWidgets/signature_test.py create mode 100644 sources/pyside2/tests/QtWidgets/standardpixmap_test.py create mode 100644 sources/pyside2/tests/QtWidgets/test_module_template.py create mode 100644 sources/pyside2/tests/QtWidgets/virtual_protected_inheritance_test.py create mode 100644 sources/pyside2/tests/QtWidgets/virtual_pure_override_test.py create mode 100644 sources/pyside2/tests/QtWidgets/wrong_return_test.py create mode 100644 sources/pyside2/tests/QtWinExtras/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtX11Extras/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtXml/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtXml/qdomdocument_test.py create mode 100644 sources/pyside2/tests/QtXml/qxmlsimplereader_test.py create mode 100644 sources/pyside2/tests/QtXmlPatterns/CMakeLists.txt create mode 100644 sources/pyside2/tests/QtXmlPatterns/import_test.py create mode 100644 sources/pyside2/tests/mac/CMakeLists.txt create mode 100644 sources/pyside2/tests/mac/qmacstyle_test.py create mode 100644 sources/pyside2/tests/manually/README.txt create mode 100644 sources/pyside2/tests/manually/bug_841.py create mode 100644 sources/pyside2/tests/pysidetest/CMakeLists.txt create mode 100644 sources/pyside2/tests/pysidetest/all_modules_load_test.py create mode 100644 sources/pyside2/tests/pysidetest/bug_1016.py create mode 100644 sources/pyside2/tests/pysidetest/curr_errors.txt create mode 100644 sources/pyside2/tests/pysidetest/decoratedslot_test.py create mode 100644 sources/pyside2/tests/pysidetest/delegatecreateseditor_test.py create mode 100644 sources/pyside2/tests/pysidetest/enum_test.py create mode 100644 sources/pyside2/tests/pysidetest/hiddenobject.cpp create mode 100644 sources/pyside2/tests/pysidetest/hiddenobject.h create mode 100644 sources/pyside2/tests/pysidetest/homonymoussignalandmethod_test.py create mode 100644 sources/pyside2/tests/pysidetest/list_signal_test.py create mode 100644 sources/pyside2/tests/pysidetest/mixin_signal_slots_test.py create mode 100644 sources/pyside2/tests/pysidetest/modelview_test.py create mode 100644 sources/pyside2/tests/pysidetest/new_inherited_functions_test.py create mode 100644 sources/pyside2/tests/pysidetest/notify_id.py create mode 100644 sources/pyside2/tests/pysidetest/pysidetest_global.h create mode 100644 sources/pyside2/tests/pysidetest/qapp_like_a_macro_test.py create mode 100644 sources/pyside2/tests/pysidetest/qvariant_test.py create mode 100644 sources/pyside2/tests/pysidetest/signal_slot_warning.py create mode 100644 sources/pyside2/tests/pysidetest/signalandnamespace_test.py create mode 100644 sources/pyside2/tests/pysidetest/signalemissionfrompython_test.py create mode 100644 sources/pyside2/tests/pysidetest/signalwithdefaultvalue_test.py create mode 100644 sources/pyside2/tests/pysidetest/symbols.filter create mode 100644 sources/pyside2/tests/pysidetest/testobject.cpp create mode 100644 sources/pyside2/tests/pysidetest/testobject.h create mode 100644 sources/pyside2/tests/pysidetest/testview.cpp create mode 100644 sources/pyside2/tests/pysidetest/testview.h create mode 100644 sources/pyside2/tests/pysidetest/typedef_signal_test.py create mode 100644 sources/pyside2/tests/pysidetest/typesystem_pysidetest.xml create mode 100644 sources/pyside2/tests/pysidetest/version_test.py create mode 100644 sources/pyside2/tests/registry/CMakeLists.txt create mode 100644 sources/pyside2/tests/registry/existence_test.py create mode 100644 sources/pyside2/tests/registry/exists_darwin_5_11_1_ci.py create mode 100644 sources/pyside2/tests/registry/exists_darwin_5_6_4_ci.py create mode 100644 sources/pyside2/tests/registry/exists_darwin_5_9_4_ci.py create mode 100644 sources/pyside2/tests/registry/exists_linux_5_11_1_ci.py create mode 100644 sources/pyside2/tests/registry/exists_linux_5_6_4_ci.py create mode 100644 sources/pyside2/tests/registry/exists_linux_5_9_4_ci.py create mode 100644 sources/pyside2/tests/registry/exists_win32_5_11_1_ci.py create mode 100644 sources/pyside2/tests/registry/exists_win32_5_6_4_ci.py create mode 100644 sources/pyside2/tests/registry/exists_win32_5_9_4_ci.py create mode 100644 sources/pyside2/tests/registry/init_platform.py create mode 100644 sources/pyside2/tests/registry/util.py create mode 100755 sources/pyside2/tests/run_test.sh create mode 100644 sources/pyside2/tests/signals/CMakeLists.txt create mode 100644 sources/pyside2/tests/signals/args_dont_match_test.py create mode 100644 sources/pyside2/tests/signals/bug_189.py create mode 100644 sources/pyside2/tests/signals/bug_311.py create mode 100644 sources/pyside2/tests/signals/bug_312.py create mode 100644 sources/pyside2/tests/signals/bug_319.py create mode 100644 sources/pyside2/tests/signals/bug_79.py create mode 100644 sources/pyside2/tests/signals/decorators_test.py create mode 100644 sources/pyside2/tests/signals/disconnect_test.py create mode 100644 sources/pyside2/tests/signals/invalid_callback_test.py create mode 100644 sources/pyside2/tests/signals/lambda_gui_test.py create mode 100644 sources/pyside2/tests/signals/lambda_test.py create mode 100644 sources/pyside2/tests/signals/leaking_signal_test.py create mode 100644 sources/pyside2/tests/signals/multiple_connections_gui_test.py create mode 100644 sources/pyside2/tests/signals/multiple_connections_test.py create mode 100644 sources/pyside2/tests/signals/pysignal_test.py create mode 100644 sources/pyside2/tests/signals/qobject_destroyed_test.py create mode 100644 sources/pyside2/tests/signals/qobject_receivers_test.py create mode 100644 sources/pyside2/tests/signals/qobject_sender_test.py create mode 100644 sources/pyside2/tests/signals/ref01_test.py create mode 100644 sources/pyside2/tests/signals/ref02_test.py create mode 100644 sources/pyside2/tests/signals/ref03_test.py create mode 100644 sources/pyside2/tests/signals/ref04_test.py create mode 100644 sources/pyside2/tests/signals/ref05_test.py create mode 100644 sources/pyside2/tests/signals/ref06_test.py create mode 100644 sources/pyside2/tests/signals/segfault_proxyparent_test.py create mode 100644 sources/pyside2/tests/signals/self_connect_test.py create mode 100644 sources/pyside2/tests/signals/short_circuit_test.py create mode 100644 sources/pyside2/tests/signals/signal2signal_connect_test.py create mode 100644 sources/pyside2/tests/signals/signal_autoconnect_test.py create mode 100644 sources/pyside2/tests/signals/signal_connectiontype_support_test.py create mode 100644 sources/pyside2/tests/signals/signal_emission_gui_test.py create mode 100644 sources/pyside2/tests/signals/signal_emission_test.py create mode 100644 sources/pyside2/tests/signals/signal_func_test.py create mode 100644 sources/pyside2/tests/signals/signal_manager_refcount_test.py create mode 100644 sources/pyside2/tests/signals/signal_number_limit_test.py create mode 100644 sources/pyside2/tests/signals/signal_object_test.py create mode 100644 sources/pyside2/tests/signals/signal_signature_test.py create mode 100644 sources/pyside2/tests/signals/signal_with_primitive_type_test.py create mode 100644 sources/pyside2/tests/signals/slot_reference_count_test.py create mode 100644 sources/pyside2/tests/signals/static_metaobject_test.py create mode 100644 sources/pyside2/tests/support/CMakeLists.txt create mode 100644 sources/pyside2/tests/support/voidptr_test.py create mode 100755 sources/pyside2/tests/tools/list-class-hierarchy.py create mode 100644 sources/pyside2/tests/util/color.py create mode 100644 sources/pyside2/tests/util/helper/__init__.py create mode 100644 sources/pyside2/tests/util/helper/docmodifier.py create mode 100644 sources/pyside2/tests/util/httpd.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/QtAssistant.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/QtCore.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/QtDesigner.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/QtGui.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/QtHelp.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/QtNetwork.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/QtScript.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/QtSql.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/QtSvg.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/QtTest.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/QtWebKit.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/QtXml.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/QtXmlPatterns.py create mode 100644 sources/pyside2/tests/util/module_wrapper/PySide/__init__.py create mode 100644 sources/pyside2/tests/util/processtimer.py create mode 100644 sources/pyside2/tests/util/py2xfunctions.py create mode 100644 sources/pyside2/tests/util/py3kcompat.py create mode 100644 sources/pyside2/tests/util/py3xfunctions.py create mode 100644 sources/pyside2/tests/util/pyqt_diff.py create mode 100644 sources/pyside2/tests/util/pyqtcheck.py create mode 100755 sources/pyside2/tests/util/rename_imports.sh create mode 100644 sources/pyside2/tests/util/test_processtimer.py create mode 100644 sources/pyside2/tests/util/use_pyqt4.sh create mode 100644 sources/pyside2/tests/util/use_pyside.sh create mode 100644 sources/pyside2/tests/util/valgrind-python.supp create mode 100644 sources/shiboken2/AUTHORS create mode 100644 sources/shiboken2/ApiExtractor/AUTHORS create mode 100644 sources/shiboken2/ApiExtractor/CMakeLists.txt create mode 100644 sources/shiboken2/ApiExtractor/COPYING create mode 100644 sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp create mode 100644 sources/shiboken2/ApiExtractor/abstractmetabuilder.h create mode 100644 sources/shiboken2/ApiExtractor/abstractmetabuilder_p.h create mode 100644 sources/shiboken2/ApiExtractor/abstractmetalang.cpp create mode 100644 sources/shiboken2/ApiExtractor/abstractmetalang.h create mode 100644 sources/shiboken2/ApiExtractor/abstractmetalang_typedefs.h create mode 100644 sources/shiboken2/ApiExtractor/apiextractor.cpp create mode 100644 sources/shiboken2/ApiExtractor/apiextractor.h create mode 100644 sources/shiboken2/ApiExtractor/apiextractormacros.h create mode 100644 sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp create mode 100644 sources/shiboken2/ApiExtractor/clangparser/clangbuilder.h create mode 100644 sources/shiboken2/ApiExtractor/clangparser/clangdebugutils.cpp create mode 100644 sources/shiboken2/ApiExtractor/clangparser/clangdebugutils.h create mode 100644 sources/shiboken2/ApiExtractor/clangparser/clangparser.cpp create mode 100644 sources/shiboken2/ApiExtractor/clangparser/clangparser.h create mode 100644 sources/shiboken2/ApiExtractor/clangparser/clangutils.cpp create mode 100644 sources/shiboken2/ApiExtractor/clangparser/clangutils.h create mode 100644 sources/shiboken2/ApiExtractor/clangparser/compilersupport.cpp create mode 100644 sources/shiboken2/ApiExtractor/clangparser/compilersupport.h create mode 100644 sources/shiboken2/ApiExtractor/cmake_uninstall.cmake create mode 100644 sources/shiboken2/ApiExtractor/dependency.h create mode 100644 sources/shiboken2/ApiExtractor/doc/CMakeLists.txt create mode 100644 sources/shiboken2/ApiExtractor/doc/_templates/index.html create mode 100644 sources/shiboken2/ApiExtractor/doc/_templates/layout.html create mode 100644 sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/searchbox.html create mode 100644 sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/bg_header.png create mode 100644 sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/bg_topo.jpg create mode 100644 sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/fakebar.png create mode 100644 sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/logo_indt.jpg create mode 100644 sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/logo_openbossa.png create mode 100644 sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/logo_python.jpg create mode 100644 sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/logo_qt.png create mode 100644 sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/pysidedocs.css create mode 100644 sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/pysidelogo.png create mode 100644 sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/relbar_bg.png create mode 100644 sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/theme.conf create mode 100644 sources/shiboken2/ApiExtractor/doc/conf.py.in create mode 100644 sources/shiboken2/ApiExtractor/doc/contents.rst create mode 100644 sources/shiboken2/ApiExtractor/doc/dependency-apiextractor.svg create mode 100644 sources/shiboken2/ApiExtractor/doc/overview.rst create mode 100644 sources/shiboken2/ApiExtractor/doc/ownership.rst create mode 100644 sources/shiboken2/ApiExtractor/doc/typesystem.rst create mode 100644 sources/shiboken2/ApiExtractor/doc/typesystem_arguments.rst create mode 100644 sources/shiboken2/ApiExtractor/doc/typesystem_conversionrule.rst create mode 100644 sources/shiboken2/ApiExtractor/doc/typesystem_documentation.rst create mode 100644 sources/shiboken2/ApiExtractor/doc/typesystem_manipulating_objects.rst create mode 100644 sources/shiboken2/ApiExtractor/doc/typesystem_modify_function.rst create mode 100644 sources/shiboken2/ApiExtractor/doc/typesystem_solving_compilation.rst create mode 100644 sources/shiboken2/ApiExtractor/doc/typesystem_specifying_types.rst create mode 100644 sources/shiboken2/ApiExtractor/doc/typesystem_templates.rst create mode 100644 sources/shiboken2/ApiExtractor/docparser.cpp create mode 100644 sources/shiboken2/ApiExtractor/docparser.h create mode 100644 sources/shiboken2/ApiExtractor/doxygenparser.cpp create mode 100644 sources/shiboken2/ApiExtractor/doxygenparser.h create mode 100644 sources/shiboken2/ApiExtractor/fileout.cpp create mode 100644 sources/shiboken2/ApiExtractor/fileout.h create mode 100644 sources/shiboken2/ApiExtractor/graph.cpp create mode 100644 sources/shiboken2/ApiExtractor/graph.h create mode 100644 sources/shiboken2/ApiExtractor/header_paths.h create mode 100644 sources/shiboken2/ApiExtractor/icecc.cmake create mode 100644 sources/shiboken2/ApiExtractor/include.cpp create mode 100644 sources/shiboken2/ApiExtractor/include.h create mode 100644 sources/shiboken2/ApiExtractor/merge.xsl create mode 100644 sources/shiboken2/ApiExtractor/parser/codemodel.cpp create mode 100644 sources/shiboken2/ApiExtractor/parser/codemodel.h create mode 100644 sources/shiboken2/ApiExtractor/parser/codemodel_enums.h create mode 100644 sources/shiboken2/ApiExtractor/parser/codemodel_fwd.h create mode 100644 sources/shiboken2/ApiExtractor/parser/enumvalue.cpp create mode 100644 sources/shiboken2/ApiExtractor/parser/enumvalue.h create mode 100644 sources/shiboken2/ApiExtractor/qtdocparser.cpp create mode 100644 sources/shiboken2/ApiExtractor/qtdocparser.h create mode 100644 sources/shiboken2/ApiExtractor/reporthandler.cpp create mode 100644 sources/shiboken2/ApiExtractor/reporthandler.h create mode 100644 sources/shiboken2/ApiExtractor/symbols.filter create mode 100644 sources/shiboken2/ApiExtractor/tests/CMakeLists.txt create mode 100644 sources/shiboken2/ApiExtractor/tests/a.xml create mode 100644 sources/shiboken2/ApiExtractor/tests/testabstractmetaclass.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testabstractmetaclass.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testabstractmetatype.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testabstractmetatype.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testaddfunction.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testaddfunction.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testarrayargument.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testarrayargument.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testcodeinjection.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testcodeinjection.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testcontainer.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testcontainer.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testconversionoperator.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testconversionoperator.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testconversionruletag.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testconversionruletag.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testctorinformation.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testctorinformation.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testdroptypeentries.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testdroptypeentries.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testdtorinformation.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testdtorinformation.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testenum.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testenum.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testextrainclude.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testextrainclude.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testfunctiontag.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testfunctiontag.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testimplicitconversions.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testimplicitconversions.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testinserttemplate.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testinserttemplate.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testmodifydocumentation.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testmodifydocumentation.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testmodifyfunction.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testmodifyfunction.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testmultipleinheritance.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testmultipleinheritance.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testnamespace.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testnamespace.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testnestedtypes.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testnestedtypes.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testnumericaltypedef.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testnumericaltypedef.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testprimitivetypetag.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testprimitivetypetag.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testrefcounttag.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testrefcounttag.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testreferencetopointer.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testreferencetopointer.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testremovefield.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testremovefield.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testremoveimplconv.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testremoveimplconv.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testremoveoperatormethod.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testremoveoperatormethod.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testresolvetype.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testresolvetype.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testreverseoperators.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testreverseoperators.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testtemplates.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testtemplates.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testtoposort.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testtoposort.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testtyperevision.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testtyperevision.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testutil.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testvaluetypedefaultctortag.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testvaluetypedefaultctortag.h create mode 100644 sources/shiboken2/ApiExtractor/tests/testvoidarg.cpp create mode 100644 sources/shiboken2/ApiExtractor/tests/testvoidarg.h create mode 100644 sources/shiboken2/ApiExtractor/tests/utf8code.txt create mode 100644 sources/shiboken2/ApiExtractor/typedatabase.cpp create mode 100644 sources/shiboken2/ApiExtractor/typedatabase.h create mode 100644 sources/shiboken2/ApiExtractor/typedatabase_typedefs.h create mode 100644 sources/shiboken2/ApiExtractor/typeparser.cpp create mode 100644 sources/shiboken2/ApiExtractor/typeparser.h create mode 100644 sources/shiboken2/ApiExtractor/typesystem.cpp create mode 100644 sources/shiboken2/ApiExtractor/typesystem.h create mode 100644 sources/shiboken2/ApiExtractor/typesystem_enums.h create mode 100644 sources/shiboken2/ApiExtractor/typesystem_p.h create mode 100644 sources/shiboken2/ApiExtractor/typesystem_typedefs.h create mode 100644 sources/shiboken2/CMakeLists.txt create mode 100644 sources/shiboken2/COPYING create mode 100644 sources/shiboken2/COPYING.libsample create mode 100644 sources/shiboken2/COPYING.libshiboken create mode 100644 sources/shiboken2/Doxyfile create mode 100644 sources/shiboken2/cmake_uninstall.cmake create mode 100644 sources/shiboken2/data/CMakeLists.txt create mode 100644 sources/shiboken2/data/GeneratorRunnerConfig.cmake.in create mode 100644 sources/shiboken2/data/GeneratorRunnerConfigVersion.cmake.in create mode 100644 sources/shiboken2/data/Shiboken2Config-spec.cmake.in create mode 100644 sources/shiboken2/data/Shiboken2Config.cmake.in create mode 100644 sources/shiboken2/data/Shiboken2ConfigVersion.cmake.in create mode 100644 sources/shiboken2/data/docgenerator.1 create mode 100644 sources/shiboken2/data/generatorrunner.1 create mode 100644 sources/shiboken2/data/generatorrunner.pc.in create mode 100644 sources/shiboken2/data/shiboken2.pc.in create mode 100644 sources/shiboken2/doc/CMakeLists.txt create mode 100644 sources/shiboken2/doc/README.md create mode 100644 sources/shiboken2/doc/_templates/index.html create mode 100644 sources/shiboken2/doc/_templates/layout.html create mode 100644 sources/shiboken2/doc/_themes/pysidedocs/searchbox.html create mode 100644 sources/shiboken2/doc/_themes/pysidedocs/static/bg_header.png create mode 100644 sources/shiboken2/doc/_themes/pysidedocs/static/bg_topo.jpg create mode 100644 sources/shiboken2/doc/_themes/pysidedocs/static/fakebar.png create mode 100644 sources/shiboken2/doc/_themes/pysidedocs/static/logo_python.jpg create mode 100644 sources/shiboken2/doc/_themes/pysidedocs/static/logo_qt.png create mode 100644 sources/shiboken2/doc/_themes/pysidedocs/static/pysidedocs.css create mode 100644 sources/shiboken2/doc/_themes/pysidedocs/static/pysidelogo.png create mode 100644 sources/shiboken2/doc/_themes/pysidedocs/static/relbar_bg.png create mode 100644 sources/shiboken2/doc/_themes/pysidedocs/theme.conf create mode 100644 sources/shiboken2/doc/codeinjectionsemantics.rst create mode 100644 sources/shiboken2/doc/commandlineoptions.rst create mode 100644 sources/shiboken2/doc/conf.py.in create mode 100644 sources/shiboken2/doc/contents.rst create mode 100644 sources/shiboken2/doc/dependency-pyside.svg create mode 100644 sources/shiboken2/doc/faq.rst create mode 100644 sources/shiboken2/doc/images/.directory create mode 100644 sources/shiboken2/doc/images/bindinggen-development.png create mode 100644 sources/shiboken2/doc/images/bindinggen-development.svg create mode 100644 sources/shiboken2/doc/images/boostgen.png create mode 100644 sources/shiboken2/doc/images/converter.png create mode 100644 sources/shiboken2/doc/images/converter.svg create mode 100644 sources/shiboken2/doc/images/genrunnerarch.png create mode 100644 sources/shiboken2/doc/images/genrunnerarch.svg create mode 100644 sources/shiboken2/doc/images/shibokenqtarch.png create mode 100644 sources/shiboken2/doc/images/shibokenqtarch.svg create mode 100644 sources/shiboken2/doc/overview.rst create mode 100644 sources/shiboken2/doc/ownership.rst create mode 100644 sources/shiboken2/doc/projectfile.rst create mode 100644 sources/shiboken2/doc/sequenceprotocol.rst create mode 100644 sources/shiboken2/doc/shiboken2.1 create mode 100644 sources/shiboken2/doc/shibokenmodule.rst create mode 100644 sources/shiboken2/doc/typeconverters.rst create mode 100644 sources/shiboken2/doc/typesystemvariables.rst create mode 100644 sources/shiboken2/doc/wordsofadvice.rst create mode 100644 sources/shiboken2/generator/CMakeLists.txt create mode 100644 sources/shiboken2/generator/generator.cpp create mode 100644 sources/shiboken2/generator/generator.h create mode 100644 sources/shiboken2/generator/main.cpp create mode 100644 sources/shiboken2/generator/qtdoc/CMakeLists.txt create mode 100644 sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp create mode 100644 sources/shiboken2/generator/qtdoc/qtdocgenerator.h create mode 100644 sources/shiboken2/generator/shiboken2/CMakeLists.txt create mode 100644 sources/shiboken2/generator/shiboken2/cppgenerator.cpp create mode 100644 sources/shiboken2/generator/shiboken2/cppgenerator.h create mode 100644 sources/shiboken2/generator/shiboken2/headergenerator.cpp create mode 100644 sources/shiboken2/generator/shiboken2/headergenerator.h create mode 100644 sources/shiboken2/generator/shiboken2/overloaddata.cpp create mode 100644 sources/shiboken2/generator/shiboken2/overloaddata.h create mode 100644 sources/shiboken2/generator/shiboken2/shibokengenerator.cpp create mode 100644 sources/shiboken2/generator/shiboken2/shibokengenerator.h create mode 100644 sources/shiboken2/generator/shibokenconfig.h.in create mode 100644 sources/shiboken2/generatorrunnerconfig.h.in create mode 100644 sources/shiboken2/generatorrunnermacros.h create mode 100644 sources/shiboken2/generators/shiboken/shiboken.cpp create mode 100644 sources/shiboken2/icecc.cmake create mode 100644 sources/shiboken2/libshiboken/CMakeLists.txt create mode 100644 sources/shiboken2/libshiboken/autodecref.h create mode 100644 sources/shiboken2/libshiboken/basewrapper.cpp create mode 100644 sources/shiboken2/libshiboken/basewrapper.h create mode 100644 sources/shiboken2/libshiboken/basewrapper_p.h create mode 100644 sources/shiboken2/libshiboken/bindingmanager.cpp create mode 100644 sources/shiboken2/libshiboken/bindingmanager.h create mode 100644 sources/shiboken2/libshiboken/bufferprocs_py37.cpp create mode 100644 sources/shiboken2/libshiboken/bufferprocs_py37.h create mode 100644 sources/shiboken2/libshiboken/debugfreehook.cpp create mode 100644 sources/shiboken2/libshiboken/debugfreehook.h create mode 100644 sources/shiboken2/libshiboken/gilstate.cpp create mode 100644 sources/shiboken2/libshiboken/gilstate.h create mode 100644 sources/shiboken2/libshiboken/helper.cpp create mode 100644 sources/shiboken2/libshiboken/helper.h create mode 100644 sources/shiboken2/libshiboken/pep384_issue33738.cpp create mode 100644 sources/shiboken2/libshiboken/pep384impl.cpp create mode 100644 sources/shiboken2/libshiboken/pep384impl.h create mode 100644 sources/shiboken2/libshiboken/pep384impl_doc.rst create mode 100644 sources/shiboken2/libshiboken/python25compat.h create mode 100644 sources/shiboken2/libshiboken/qapp_macro.cpp create mode 100644 sources/shiboken2/libshiboken/qapp_macro.h create mode 100644 sources/shiboken2/libshiboken/qt_attribution.json create mode 100644 sources/shiboken2/libshiboken/sbkarrayconverter.cpp create mode 100644 sources/shiboken2/libshiboken/sbkarrayconverter.h create mode 100644 sources/shiboken2/libshiboken/sbkarrayconverter_p.h create mode 100644 sources/shiboken2/libshiboken/sbkconverter.cpp create mode 100644 sources/shiboken2/libshiboken/sbkconverter.h create mode 100644 sources/shiboken2/libshiboken/sbkconverter_p.h create mode 100644 sources/shiboken2/libshiboken/sbkdbg.h create mode 100644 sources/shiboken2/libshiboken/sbkenum.cpp create mode 100644 sources/shiboken2/libshiboken/sbkenum.h create mode 100644 sources/shiboken2/libshiboken/sbkmodule.cpp create mode 100644 sources/shiboken2/libshiboken/sbkmodule.h create mode 100644 sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp create mode 100644 sources/shiboken2/libshiboken/sbkpython.h create mode 100644 sources/shiboken2/libshiboken/sbkstring.cpp create mode 100644 sources/shiboken2/libshiboken/sbkstring.h create mode 100644 sources/shiboken2/libshiboken/sbkversion.h.in create mode 100644 sources/shiboken2/libshiboken/shiboken.h create mode 100644 sources/shiboken2/libshiboken/shibokenbuffer.cpp create mode 100644 sources/shiboken2/libshiboken/shibokenbuffer.h create mode 100644 sources/shiboken2/libshiboken/shibokenmacros.h create mode 100644 sources/shiboken2/libshiboken/signature.cpp create mode 100644 sources/shiboken2/libshiboken/signature.h create mode 100644 sources/shiboken2/libshiboken/signature_doc.rst create mode 100644 sources/shiboken2/libshiboken/threadstatesaver.cpp create mode 100644 sources/shiboken2/libshiboken/threadstatesaver.h create mode 100644 sources/shiboken2/libshiboken/tmp-referencetopython/sbkconverter.cpp create mode 100644 sources/shiboken2/libshiboken/tmp-referencetopython/sbkconverter.h create mode 100644 sources/shiboken2/libshiboken/typespec.cpp create mode 100644 sources/shiboken2/libshiboken/typespec.h create mode 100644 sources/shiboken2/libshiboken/voidptr.cpp create mode 100644 sources/shiboken2/libshiboken/voidptr.h create mode 100644 sources/shiboken2/shiboken_version.py create mode 100644 sources/shiboken2/shibokenmodule/CMakeLists.txt create mode 100644 sources/shiboken2/shibokenmodule/nothing.h create mode 100644 sources/shiboken2/shibokenmodule/shibokenmodule.txt.in create mode 100644 sources/shiboken2/shibokenmodule/typesystem_shiboken.xml create mode 100644 sources/shiboken2/tests/CMakeLists.txt create mode 100644 sources/shiboken2/tests/dumpcodemodel/CMakeLists.txt create mode 100644 sources/shiboken2/tests/dumpcodemodel/main.cpp create mode 100644 sources/shiboken2/tests/libminimal/CMakeLists.txt create mode 100644 sources/shiboken2/tests/libminimal/libminimalmacros.h create mode 100644 sources/shiboken2/tests/libminimal/listuser.cpp create mode 100644 sources/shiboken2/tests/libminimal/listuser.h create mode 100644 sources/shiboken2/tests/libminimal/minbool.h create mode 100644 sources/shiboken2/tests/libminimal/obj.cpp create mode 100644 sources/shiboken2/tests/libminimal/obj.h create mode 100644 sources/shiboken2/tests/libminimal/typedef.cpp create mode 100644 sources/shiboken2/tests/libminimal/typedef.h create mode 100644 sources/shiboken2/tests/libminimal/val.h create mode 100644 sources/shiboken2/tests/libother/CMakeLists.txt create mode 100644 sources/shiboken2/tests/libother/extendsnoimplicitconversion.h create mode 100644 sources/shiboken2/tests/libother/libothermacros.h create mode 100644 sources/shiboken2/tests/libother/number.cpp create mode 100644 sources/shiboken2/tests/libother/number.h create mode 100644 sources/shiboken2/tests/libother/otherderived.cpp create mode 100644 sources/shiboken2/tests/libother/otherderived.h create mode 100644 sources/shiboken2/tests/libother/othermultiplederived.cpp create mode 100644 sources/shiboken2/tests/libother/othermultiplederived.h create mode 100644 sources/shiboken2/tests/libother/otherobjecttype.cpp create mode 100644 sources/shiboken2/tests/libother/otherobjecttype.h create mode 100644 sources/shiboken2/tests/libsample/CMakeLists.txt create mode 100644 sources/shiboken2/tests/libsample/abstract.cpp create mode 100644 sources/shiboken2/tests/libsample/abstract.h create mode 100644 sources/shiboken2/tests/libsample/blackbox.cpp create mode 100644 sources/shiboken2/tests/libsample/blackbox.h create mode 100644 sources/shiboken2/tests/libsample/bucket.cpp create mode 100644 sources/shiboken2/tests/libsample/bucket.h create mode 100644 sources/shiboken2/tests/libsample/bytearray.cpp create mode 100644 sources/shiboken2/tests/libsample/bytearray.h create mode 100644 sources/shiboken2/tests/libsample/collector.cpp create mode 100644 sources/shiboken2/tests/libsample/collector.h create mode 100644 sources/shiboken2/tests/libsample/complex.cpp create mode 100644 sources/shiboken2/tests/libsample/complex.h create mode 100644 sources/shiboken2/tests/libsample/ctorconvrule.h create mode 100644 sources/shiboken2/tests/libsample/cvlist.h create mode 100644 sources/shiboken2/tests/libsample/derived.cpp create mode 100644 sources/shiboken2/tests/libsample/derived.h create mode 100644 sources/shiboken2/tests/libsample/echo.cpp create mode 100644 sources/shiboken2/tests/libsample/echo.h create mode 100644 sources/shiboken2/tests/libsample/expression.cpp create mode 100644 sources/shiboken2/tests/libsample/expression.h create mode 100644 sources/shiboken2/tests/libsample/filter.cpp create mode 100644 sources/shiboken2/tests/libsample/filter.h create mode 100644 sources/shiboken2/tests/libsample/functions.cpp create mode 100644 sources/shiboken2/tests/libsample/functions.h create mode 100644 sources/shiboken2/tests/libsample/handle.cpp create mode 100644 sources/shiboken2/tests/libsample/handle.h create mode 100644 sources/shiboken2/tests/libsample/implicitconv.cpp create mode 100644 sources/shiboken2/tests/libsample/implicitconv.h create mode 100644 sources/shiboken2/tests/libsample/injectcode.cpp create mode 100644 sources/shiboken2/tests/libsample/injectcode.h create mode 100644 sources/shiboken2/tests/libsample/libsamplemacros.h create mode 100644 sources/shiboken2/tests/libsample/list.h create mode 100644 sources/shiboken2/tests/libsample/listuser.cpp create mode 100644 sources/shiboken2/tests/libsample/listuser.h create mode 100644 sources/shiboken2/tests/libsample/main.cpp create mode 100644 sources/shiboken2/tests/libsample/mapuser.cpp create mode 100644 sources/shiboken2/tests/libsample/mapuser.h create mode 100644 sources/shiboken2/tests/libsample/modelindex.h create mode 100644 sources/shiboken2/tests/libsample/modifications.cpp create mode 100644 sources/shiboken2/tests/libsample/modifications.h create mode 100644 sources/shiboken2/tests/libsample/modified_constructor.cpp create mode 100644 sources/shiboken2/tests/libsample/modified_constructor.h create mode 100644 sources/shiboken2/tests/libsample/multiple_derived.cpp create mode 100644 sources/shiboken2/tests/libsample/multiple_derived.h create mode 100644 sources/shiboken2/tests/libsample/noimplicitconversion.h create mode 100644 sources/shiboken2/tests/libsample/nondefaultctor.h create mode 100644 sources/shiboken2/tests/libsample/null.h create mode 100644 sources/shiboken2/tests/libsample/objectmodel.cpp create mode 100644 sources/shiboken2/tests/libsample/objectmodel.h create mode 100644 sources/shiboken2/tests/libsample/objecttype.cpp create mode 100644 sources/shiboken2/tests/libsample/objecttype.h create mode 100644 sources/shiboken2/tests/libsample/objecttypebyvalue.h create mode 100644 sources/shiboken2/tests/libsample/objecttypeholder.cpp create mode 100644 sources/shiboken2/tests/libsample/objecttypeholder.h create mode 100644 sources/shiboken2/tests/libsample/objecttypelayout.cpp create mode 100644 sources/shiboken2/tests/libsample/objecttypelayout.h create mode 100644 sources/shiboken2/tests/libsample/objecttypeoperators.cpp create mode 100644 sources/shiboken2/tests/libsample/objecttypeoperators.h create mode 100644 sources/shiboken2/tests/libsample/objectview.cpp create mode 100644 sources/shiboken2/tests/libsample/objectview.h create mode 100644 sources/shiboken2/tests/libsample/oddbool.h create mode 100644 sources/shiboken2/tests/libsample/onlycopy.cpp create mode 100644 sources/shiboken2/tests/libsample/onlycopy.h create mode 100644 sources/shiboken2/tests/libsample/overload.cpp create mode 100644 sources/shiboken2/tests/libsample/overload.h create mode 100644 sources/shiboken2/tests/libsample/overloadsort.cpp create mode 100644 sources/shiboken2/tests/libsample/overloadsort.h create mode 100644 sources/shiboken2/tests/libsample/pairuser.cpp create mode 100644 sources/shiboken2/tests/libsample/pairuser.h create mode 100644 sources/shiboken2/tests/libsample/pen.cpp create mode 100644 sources/shiboken2/tests/libsample/pen.h create mode 100644 sources/shiboken2/tests/libsample/photon.cpp create mode 100644 sources/shiboken2/tests/libsample/photon.h create mode 100644 sources/shiboken2/tests/libsample/point.cpp create mode 100644 sources/shiboken2/tests/libsample/point.h create mode 100644 sources/shiboken2/tests/libsample/pointerholder.h create mode 100644 sources/shiboken2/tests/libsample/pointf.cpp create mode 100644 sources/shiboken2/tests/libsample/pointf.h create mode 100644 sources/shiboken2/tests/libsample/polygon.cpp create mode 100644 sources/shiboken2/tests/libsample/polygon.h create mode 100644 sources/shiboken2/tests/libsample/privatector.h create mode 100644 sources/shiboken2/tests/libsample/privatedtor.h create mode 100644 sources/shiboken2/tests/libsample/protected.cpp create mode 100644 sources/shiboken2/tests/libsample/protected.h create mode 100644 sources/shiboken2/tests/libsample/rect.h create mode 100644 sources/shiboken2/tests/libsample/reference.cpp create mode 100644 sources/shiboken2/tests/libsample/reference.h create mode 100644 sources/shiboken2/tests/libsample/removednamespaces.h create mode 100644 sources/shiboken2/tests/libsample/sample.cpp create mode 100644 sources/shiboken2/tests/libsample/sample.h create mode 100644 sources/shiboken2/tests/libsample/samplenamespace.cpp create mode 100644 sources/shiboken2/tests/libsample/samplenamespace.h create mode 100644 sources/shiboken2/tests/libsample/sbkdate.cpp create mode 100644 sources/shiboken2/tests/libsample/sbkdate.h create mode 100644 sources/shiboken2/tests/libsample/simplefile.cpp create mode 100644 sources/shiboken2/tests/libsample/simplefile.h create mode 100644 sources/shiboken2/tests/libsample/size.cpp create mode 100644 sources/shiboken2/tests/libsample/size.h create mode 100644 sources/shiboken2/tests/libsample/sometime.cpp create mode 100644 sources/shiboken2/tests/libsample/sometime.h create mode 100644 sources/shiboken2/tests/libsample/str.cpp create mode 100644 sources/shiboken2/tests/libsample/str.h create mode 100644 sources/shiboken2/tests/libsample/strlist.cpp create mode 100644 sources/shiboken2/tests/libsample/strlist.h create mode 100644 sources/shiboken2/tests/libsample/templateptr.cpp create mode 100644 sources/shiboken2/tests/libsample/templateptr.h create mode 100644 sources/shiboken2/tests/libsample/transform.cpp create mode 100644 sources/shiboken2/tests/libsample/transform.h create mode 100644 sources/shiboken2/tests/libsample/valueandvirtual.h create mode 100644 sources/shiboken2/tests/libsample/virtualmethods.cpp create mode 100644 sources/shiboken2/tests/libsample/virtualmethods.h create mode 100644 sources/shiboken2/tests/libsample/voidholder.h create mode 100644 sources/shiboken2/tests/libsmart/CMakeLists.txt create mode 100644 sources/shiboken2/tests/libsmart/libsmartmacros.h create mode 100644 sources/shiboken2/tests/libsmart/smart.cpp create mode 100644 sources/shiboken2/tests/libsmart/smart.h create mode 100644 sources/shiboken2/tests/minimalbinding/CMakeLists.txt create mode 100644 sources/shiboken2/tests/minimalbinding/global.h create mode 100644 sources/shiboken2/tests/minimalbinding/listuser_test.py create mode 100644 sources/shiboken2/tests/minimalbinding/minbool_test.py create mode 100644 sources/shiboken2/tests/minimalbinding/minimal-binding.txt.in create mode 100644 sources/shiboken2/tests/minimalbinding/obj_test.py create mode 100644 sources/shiboken2/tests/minimalbinding/typedef_test.py create mode 100644 sources/shiboken2/tests/minimalbinding/typesystem_minimal.xml create mode 100644 sources/shiboken2/tests/minimalbinding/val_test.py create mode 100644 sources/shiboken2/tests/otherbinding/CMakeLists.txt create mode 100644 sources/shiboken2/tests/otherbinding/collector_external_operator_test.py create mode 100755 sources/shiboken2/tests/otherbinding/conversion_operator_for_class_without_implicit_conversions_test.py create mode 100755 sources/shiboken2/tests/otherbinding/extended_multiply_operator_test.py create mode 100644 sources/shiboken2/tests/otherbinding/global.h create mode 100644 sources/shiboken2/tests/otherbinding/module_reload_test.py create mode 100755 sources/shiboken2/tests/otherbinding/new_ctor_operator_test.py create mode 100644 sources/shiboken2/tests/otherbinding/objtypehashes_test.py create mode 100644 sources/shiboken2/tests/otherbinding/other-binding.txt.in create mode 100644 sources/shiboken2/tests/otherbinding/otherderived_test.py create mode 100644 sources/shiboken2/tests/otherbinding/test_module_template.py create mode 100644 sources/shiboken2/tests/otherbinding/typediscovery_test.py create mode 100644 sources/shiboken2/tests/otherbinding/typesystem_other.xml create mode 100755 sources/shiboken2/tests/otherbinding/usersprimitivefromothermodule_test.py create mode 100644 sources/shiboken2/tests/otherbinding/wrongctor_test.py create mode 100644 sources/shiboken2/tests/py3k.py create mode 100644 sources/shiboken2/tests/py3kcompat.py create mode 100644 sources/shiboken2/tests/samplebinding/CMakeLists.txt create mode 100644 sources/shiboken2/tests/samplebinding/__del___test.py create mode 100644 sources/shiboken2/tests/samplebinding/abstract_test.py create mode 100644 sources/shiboken2/tests/samplebinding/addedfunction_test.py create mode 100644 sources/shiboken2/tests/samplebinding/addedfunction_with_container_args_test.py create mode 100644 sources/shiboken2/tests/samplebinding/argumentmodifications_test.py create mode 100644 sources/shiboken2/tests/samplebinding/array_numpy_test.py create mode 100644 sources/shiboken2/tests/samplebinding/array_sequence_test.py create mode 100644 sources/shiboken2/tests/samplebinding/bug_554_test.py create mode 100644 sources/shiboken2/tests/samplebinding/bug_704_test.py create mode 100644 sources/shiboken2/tests/samplebinding/bytearray_bufferprotocol.cpp create mode 100644 sources/shiboken2/tests/samplebinding/bytearray_test.py create mode 100644 sources/shiboken2/tests/samplebinding/child_return_test.py create mode 100644 sources/shiboken2/tests/samplebinding/class_fields_test.py create mode 100644 sources/shiboken2/tests/samplebinding/collector_test.py create mode 100644 sources/shiboken2/tests/samplebinding/complex_test.py create mode 100644 sources/shiboken2/tests/samplebinding/conversion_operator_test.py create mode 100644 sources/shiboken2/tests/samplebinding/copy_test.py create mode 100644 sources/shiboken2/tests/samplebinding/ctorconvrule_test.py create mode 100644 sources/shiboken2/tests/samplebinding/cyclic_test.py create mode 100644 sources/shiboken2/tests/samplebinding/date_test.py create mode 100644 sources/shiboken2/tests/samplebinding/decisor_test.py create mode 100644 sources/shiboken2/tests/samplebinding/delete_test.py create mode 100644 sources/shiboken2/tests/samplebinding/deprecated_test.py create mode 100644 sources/shiboken2/tests/samplebinding/derived_test.py create mode 100644 sources/shiboken2/tests/samplebinding/duck_punching_test.py create mode 100644 sources/shiboken2/tests/samplebinding/echo_test.py create mode 100644 sources/shiboken2/tests/samplebinding/enum_test.py create mode 100644 sources/shiboken2/tests/samplebinding/enumfromremovednamespace_test.py create mode 100644 sources/shiboken2/tests/samplebinding/event_loop_call_virtual_test.py create mode 100644 sources/shiboken2/tests/samplebinding/event_loop_thread_test.py create mode 100644 sources/shiboken2/tests/samplebinding/filter_test.py create mode 100644 sources/shiboken2/tests/samplebinding/global.h create mode 100644 sources/shiboken2/tests/samplebinding/handleholder_test.py create mode 100644 sources/shiboken2/tests/samplebinding/hashabletype_test.py create mode 100644 sources/shiboken2/tests/samplebinding/ignorederefop_test.py create mode 100644 sources/shiboken2/tests/samplebinding/implicitconv_numerical_test.py create mode 100644 sources/shiboken2/tests/samplebinding/implicitconv_test.py create mode 100755 sources/shiboken2/tests/samplebinding/inheritanceandscope_test.py create mode 100644 sources/shiboken2/tests/samplebinding/injectcode_test.py create mode 100644 sources/shiboken2/tests/samplebinding/innerclass_test.py create mode 100644 sources/shiboken2/tests/samplebinding/intlist_test.py create mode 100644 sources/shiboken2/tests/samplebinding/invalid_virtual_return_test.py create mode 100644 sources/shiboken2/tests/samplebinding/keep_reference_test.py create mode 100644 sources/shiboken2/tests/samplebinding/list_test.py create mode 100644 sources/shiboken2/tests/samplebinding/lock_test.py create mode 100644 sources/shiboken2/tests/samplebinding/map_test.py create mode 100644 sources/shiboken2/tests/samplebinding/metaclass_test.py create mode 100644 sources/shiboken2/tests/samplebinding/mi_virtual_methods_test.py create mode 100644 sources/shiboken2/tests/samplebinding/mixed_mi_test.py create mode 100644 sources/shiboken2/tests/samplebinding/modelindex_test.py create mode 100644 sources/shiboken2/tests/samplebinding/modelview_test.py create mode 100644 sources/shiboken2/tests/samplebinding/modifications_test.py create mode 100644 sources/shiboken2/tests/samplebinding/modified_constructor_test.py create mode 100644 sources/shiboken2/tests/samplebinding/modifiedvirtualmethods_test.py create mode 100644 sources/shiboken2/tests/samplebinding/multi_cpp_inheritance_test.py create mode 100644 sources/shiboken2/tests/samplebinding/multiple_derived_test.py create mode 100644 sources/shiboken2/tests/samplebinding/namespace_test.py create mode 100644 sources/shiboken2/tests/samplebinding/newdivision_test.py create mode 100644 sources/shiboken2/tests/samplebinding/nondefaultctor_test.py create mode 100644 sources/shiboken2/tests/samplebinding/nonzero_test.py create mode 100644 sources/shiboken2/tests/samplebinding/numericaltypedef_test.py create mode 100644 sources/shiboken2/tests/samplebinding/numpy_test.py create mode 100644 sources/shiboken2/tests/samplebinding/objecttype_test.py create mode 100755 sources/shiboken2/tests/samplebinding/objecttype_with_named_args_test.py create mode 100644 sources/shiboken2/tests/samplebinding/objecttypebyvalue_test.py create mode 100644 sources/shiboken2/tests/samplebinding/objecttypelayout_test.py create mode 100644 sources/shiboken2/tests/samplebinding/objecttypeoperators_test.py create mode 100644 sources/shiboken2/tests/samplebinding/objecttypereferenceasvirtualmethodargument_test.py create mode 100644 sources/shiboken2/tests/samplebinding/oddbool_test.py create mode 100644 sources/shiboken2/tests/samplebinding/oldstyleclass_as_number_test.py create mode 100644 sources/shiboken2/tests/samplebinding/onlycopyclass_test.py create mode 100644 sources/shiboken2/tests/samplebinding/overflow_test.py create mode 100644 sources/shiboken2/tests/samplebinding/overload_sorting_test.py create mode 100644 sources/shiboken2/tests/samplebinding/overload_test.py create mode 100644 sources/shiboken2/tests/samplebinding/overloadwithdefault_test.py create mode 100644 sources/shiboken2/tests/samplebinding/ownership_argument_invalidation_test.py create mode 100644 sources/shiboken2/tests/samplebinding/ownership_delete_child_in_cpp_test.py create mode 100644 sources/shiboken2/tests/samplebinding/ownership_delete_child_in_python_test.py create mode 100644 sources/shiboken2/tests/samplebinding/ownership_delete_parent_test.py create mode 100644 sources/shiboken2/tests/samplebinding/ownership_invalidate_after_use_test.py create mode 100644 sources/shiboken2/tests/samplebinding/ownership_invalidate_child_test.py create mode 100644 sources/shiboken2/tests/samplebinding/ownership_invalidate_nonpolymorphic_test.py create mode 100644 sources/shiboken2/tests/samplebinding/ownership_invalidate_parent_test.py create mode 100644 sources/shiboken2/tests/samplebinding/ownership_reparenting_test.py create mode 100644 sources/shiboken2/tests/samplebinding/ownership_transference_test.py create mode 100644 sources/shiboken2/tests/samplebinding/pair_test.py create mode 100644 sources/shiboken2/tests/samplebinding/pen_test.py create mode 100644 sources/shiboken2/tests/samplebinding/point_test.py create mode 100644 sources/shiboken2/tests/samplebinding/pointerholder_test.py create mode 100644 sources/shiboken2/tests/samplebinding/pointf_test.py create mode 100644 sources/shiboken2/tests/samplebinding/primitivereferenceargument_test.py create mode 100644 sources/shiboken2/tests/samplebinding/privatector_test.py create mode 100644 sources/shiboken2/tests/samplebinding/privatedtor_test.py create mode 100644 sources/shiboken2/tests/samplebinding/protected_test.py create mode 100644 sources/shiboken2/tests/samplebinding/pstrlist_test.py create mode 100644 sources/shiboken2/tests/samplebinding/pystr_test.py create mode 100644 sources/shiboken2/tests/samplebinding/python_thread_test.py create mode 100644 sources/shiboken2/tests/samplebinding/receive_null_cstring_test.py create mode 100644 sources/shiboken2/tests/samplebinding/reference_test.py create mode 100644 sources/shiboken2/tests/samplebinding/referencetopointer_test.py create mode 100644 sources/shiboken2/tests/samplebinding/return_null_test.py create mode 100644 sources/shiboken2/tests/samplebinding/richcompare_test.py create mode 100644 sources/shiboken2/tests/samplebinding/sample-binding.txt.in create mode 100644 sources/shiboken2/tests/samplebinding/sample_test.py create mode 100644 sources/shiboken2/tests/samplebinding/simplefile_glue.cpp create mode 100644 sources/shiboken2/tests/samplebinding/simplefile_test.py create mode 100644 sources/shiboken2/tests/samplebinding/size_test.py create mode 100644 sources/shiboken2/tests/samplebinding/static_nonstatic_methods_test.py create mode 100644 sources/shiboken2/tests/samplebinding/str_test.py create mode 100644 sources/shiboken2/tests/samplebinding/strlist_test.py create mode 100644 sources/shiboken2/tests/samplebinding/templateinheritingclass_test.py create mode 100644 sources/shiboken2/tests/samplebinding/time_test.py create mode 100644 sources/shiboken2/tests/samplebinding/transform_test.py create mode 100644 sources/shiboken2/tests/samplebinding/typeconverters_test.py create mode 100644 sources/shiboken2/tests/samplebinding/typedealloc_test.py create mode 100644 sources/shiboken2/tests/samplebinding/typedtordoublefree_test.py create mode 100644 sources/shiboken2/tests/samplebinding/typesystem_sample.xml create mode 100644 sources/shiboken2/tests/samplebinding/unsafe_parent_test.py create mode 100644 sources/shiboken2/tests/samplebinding/useraddedctor_test.py create mode 100644 sources/shiboken2/tests/samplebinding/virtualdtor_test.py create mode 100644 sources/shiboken2/tests/samplebinding/virtualmethods_test.py create mode 100644 sources/shiboken2/tests/samplebinding/visibilitychange_test.py create mode 100644 sources/shiboken2/tests/samplebinding/voidholder_test.py create mode 100644 sources/shiboken2/tests/samplebinding/weakref_test.py create mode 100644 sources/shiboken2/tests/samplebinding/writableclassdict_test.py create mode 100644 sources/shiboken2/tests/shibokenmodule/module_test.py create mode 100644 sources/shiboken2/tests/smartbinding/CMakeLists.txt create mode 100644 sources/shiboken2/tests/smartbinding/global.h create mode 100644 sources/shiboken2/tests/smartbinding/smart-binding.txt.in create mode 100644 sources/shiboken2/tests/smartbinding/smart_pointer_test.py create mode 100644 sources/shiboken2/tests/smartbinding/typesystem_smart.xml create mode 100644 sources/shiboken2/tests/sphinxtabletest.cpp create mode 100644 sources/shiboken2/tests/sphinxtabletest.h create mode 100644 sources/shiboken2/tests/test_generator/CMakeLists.txt create mode 100644 sources/shiboken2/tests/test_generator/dummygenerator.cpp create mode 100644 sources/shiboken2/tests/test_generator/dummygenerator.h create mode 100644 sources/shiboken2/tests/test_generator/dummygentest-project.txt.in create mode 100644 sources/shiboken2/tests/test_generator/dummygentest.cpp create mode 100644 sources/shiboken2/tests/test_generator/dummygentest.h create mode 100644 sources/shiboken2/tests/test_generator/dummygentestconfig.h.in create mode 100644 sources/shiboken2/tests/test_generator/main.cpp create mode 100644 sources/shiboken2/tests/test_generator/run_test.cmake create mode 100644 sources/shiboken2/tests/test_generator/test_global.h create mode 100644 sources/shiboken2/tests/test_generator/test_typesystem.xml create mode 100644 testing/__init__.py create mode 100644 testing/blacklist.py create mode 100644 testing/buildlog.py create mode 100644 testing/command.py create mode 100644 testing/helper.py create mode 100644 testing/parser.py create mode 100644 testing/runner.py create mode 100644 testrunner.py diff --git a/.QT-ENTERPRISE-LICENSE-AGREEMENT b/.QT-ENTERPRISE-LICENSE-AGREEMENT new file mode 100644 index 0000000..3f65508 --- /dev/null +++ b/.QT-ENTERPRISE-LICENSE-AGREEMENT @@ -0,0 +1,849 @@ +QT ENTERPRISE LICENSE AGREEMENT +Agreement version 3.0 + +This Enterprise License Agreement (“Agreement”) is a legal agreement between +The Qt Company (as defined below) and the Licensee (as defined below) for the +license of Licensed Software (as defined below). Capitalized terms used herein +are defined in Section 1. + +WHEREAS: + +(A) Licensee wishes to use the Licensed Software for the purpose of developing +and distributing Applications and/or Devices; and + +(B) The Qt Company is willing to grant the Licensee a right to use Licensed +Software for such purpose pursuant to term and conditions of this Agreement. + +NOW, THEREFORE, THE PARTIES HEREBY AGREE AS FOLLOWS: + +1. DEFINITIONS + +"Affiliate" of a Party shall mean an entity (i) which is directly or indirectly +controlling such Party; (ii) which is under the same direct or indirect +ownership or control as such Party; or (iii) which is directly or indirectly +owned or controlled by such Party. For these purposes, an entity shall be +treated as being controlled by another if that other entity has fifty percent +(50 %) or more of the votes in such entity, is able to direct its affairs and/or +to control the composition of its board of directors or equivalent body. + +“Applications” shall mean Licensee's software products created using the +Licensed Software, which may include the Redistributables, or part thereof. + +"Contractor(s)" shall mean third party consultants, distributors and contractors +performing services to a Party under applicable contractual arrangement. + +"Customer(s)" shall mean Licensee's end users to whom Licensee, directly or +indirectly, distributes copies of the Redistributables. + +"Deployment Platforms" shall mean operating systems specified in the License +Certificate, in which the Redistributables can be distributed pursuant to the +terms and conditions of this Agreement. + +"Designated User(s)" shall mean the employee(s) of Licensee or Licensee's +Affiliates acting within the scope of their employment or Licensee's Contractors +acting within the scope of their services for Licensee and on behalf of +Licensee. Designated Users shall be named in the License Certificate. + +"Development License" shall mean the license needed by the Licensee for each +Designated User to use the Licensed Software under the license grant described +in Section 3.1 of this Agreement. + +"Development Platforms" shall mean those operating systems specified in the +License Certificate, in which the Licensed Software can be used under the +Development License, but not distributed in any form or used for any other +purpose. + +"Devices" shall mean hardware devices or products that 1) are manufactured +and/or distributed by the Licensee or its Affiliates or Contractors, and (2)(i) +incorporate or integrate the Redistributables or parts thereof; or (ii) do not +incorporate or integrate the Redistributables at the time of distribution, but +where, when used by a Customer, the main user interface or substantial +functionality of such device is provided by Application(s) or otherwise depends +on the Licensed Software. + +"Distribution License(s)" shall mean the license required for distribution of +Redistributables in accordance with the license grant described in Section +3.2(ii)-(iii) of this Agreement. + +"Distribution License Packs" shall mean set of prepaid Distribution Licenses for +distribution of Redistributables, as defined in The Qt Company's standard price +list, quote, Purchase Order confirmation or in an appendix hereto, as the case +may be. + +"Initial Support Term" shall mean a time period of twelve (12) months, +calculated from the end of the Start- For-Free Term. + +"Intellectual Property Rights" shall mean patents (including utility models), +design patents, and designs (whether or not capable of registration), chip +topography rights and other like protection, copyrights, trademarks, service +marks, trade names, logos or other words or symbols and any other form of +statutory protection of any kind and applications for any of the foregoing as +well as any trade secrets. + +"Licensee" shall mean the individual or legal entity that is party to this +Agreement by accepting the terms hereof online in connection with installing the +Licensed Software. + +"License Certificate" shall mean a certificate accompanying the Licensed +Software and generated for each Designated User respectively. License +Certificate will specify the Designated User, the Development Platforms, +Deployment Platforms and the Term of this Agreement. The terms of the License +Certificate are considered part of this Agreement and shall be updated from time +to time to reflect any changes to the foregoing terms relating to Licensee's +rights to the Licensed Software. + +“Licensee’s Records” shall mean books and records that are likely to contain +information bearing on Licensee’s compliance with this Agreement or the +payments due to The Qt Company under this Agreement, including, but not limited +to: assembly logs, sales records and distribution records. + + “License Fee” shall mean the fee charged to the Licensee for rights granted + under the terms of this Agreement. + +"Licensed Software" shall mean all versions of The Qt Company's computer +software products, online or electronic documentation, associated media and +printed materials, including the source code, example programs and the +documentation, licensed to the Licensee under this Agreement. Licensed Software +does not include Third Party Software (as defined in Section 4) or Open Source +Qt. + +"Modified Software" shall mean bug-fixes, error corrections, patches or +modifications made to the Licensed Software by Licensee, including documentation +related thereto. + +"Online Services" shall mean any services or access to systems made available by +The Qt Company to the Licensee over the Internet relating to the Licensed +Software or for the purpose of use by the Licensee of the Licensed Software or +Support. Use of any such Online Services is discretionary for the Licensee and +some of them may be subject to additional fees. + +"Open Source Qt" shall mean all versions of The Qt Company's Qt computer +software products, online or electronic documentation, associated media and +printed materials, including the source code, example programs and the +documentation available under the terms of the GNU Lesser General Public +License, version 2.1 or later ("LGPL") or the GNU General Public License, +version 2.0 or later ("GPL"). + +"Party" or "Parties" shall mean Licensee and/or The Qt Company. + +"Redistributables" shall mean the portions of the Licensed Software set forth in +Appendix 1, Section 1 that may be distributed pursuant to the terms of this +Agreement in object code form only, including any relevant documentation. Where +relevant, any reference to Licensed Software in this Agreement shall include and +refer also to Redistributables. + +"Start-For-Free Term" shall mean the period of 30 days, or any such shorter +period as specified by The Qt Company, calculated from the date the Licensed +Software was initially delivered to the Licensee by The Qt Company. + +"Submitted Modified Software" shall have the meaning as set forth in Section +2.3. + +"Support" shall mean standard developer support that is provided by The Qt +Company to assist Designated Users in using the Licensed Software in accordance +with The Qt Company's standard support terms. + +“Support Renewal Term” shall mean a time period of twelve (12) months, or any +such other time period as agreed between the Parties, calculated from the end +of the Initial Support Term or previous Support Renewal Term, as applicable. + +"Support Term" shall mean the Initial Support Term and any possible Support +Renewal Terms(s) during which time the Licensee is eligible to receive for +Support for the Licensed Software. + +"Taxes" shall have the meaning set forth in Section 10.5. + +"Term" shall mean the validity period of this Agreement, as set forth in the +License Certificate. + +"Updates" shall mean a release or version of the Licensed Software containing +bug fixes, error corrections and other changes that are generally made available +to users of the Licensed Software that have contracted for Support. Updates are +generally depicted as a change to the digits following the decimal in the +Licensed Software version number. The Qt Company shall make Updates available to +the Licensee under the Support. Updates shall be considered as part of the +Licensed Software hereunder. + +“The Qt Company” shall mean: +(i) in the event Licensee is an individual residing in the United States or a +legal entity incorporated in the United States or having its headquarters in +the United States, The Qt Company Inc., a Delaware corporation with its office +at 2350 Mission College Blvd., Suite 1020, Santa Clara, CA 95054, USA.; or +(ii) in the event the Licensee is an individual residing outside of the United +States or a legal entity incorporated outside of the United States or having +its registered office outside of the United States, The Qt Company Ltd., a +Finnish company with its registered office at Bertel Jungin aukio D3A, +02600 Espoo, Finland. + +"Upgrades" shall mean a release or version of the Licensed Software containing +enhancements and new features and are generally depicted as a change to the +first digit of the Licensed Software version number. In the event Upgrades are +provided to the Licensee under this Agreement, they shall be considered as part +of the Licensed Software hereunder. + +2. OWNERSHIP + +2.1 Ownership of The Qt Company + +The Licensed Software is protected by copyright laws and international copyright +treaties, as well as other intellectual property laws and treaties. The Licensed +Software is licensed, not sold. + +All The Qt Company's Intellectual Property Rights are and shall remain the +exclusive property of The Qt Company or its licensors respectively. + +2.2 Ownership of Licensee + +All the Licensee's Intellectual Property Rights are and shall remain the +exclusive property of the Licensee or its licensors respectively. + +All Intellectual Property Rights to the Modified Software, Applications and +Devices shall remain with the Licensee and no rights thereto shall be granted by +the Licensee to The Qt Company under this Agreement (except as set forth in +Section 2.3 below). + +2.3 Modified Software + +Licensee may create Modified Software that breaks the source or binary +compatibility with the Licensed Software. This includes, but is not limited to, +changing the application programming interfaces ("API") by adding, changing or +deleting any variable, method, or class signature in the Licensed Software +and/or any inter-process protocols, services or standards in the Licensed +Software libraries. To the extent that Licensee breaks source or binary +compatibility with the Licensed Software, Licensee acknowledges that The Qt +Company's ability to provide Support may be prevented or limited and Licensee's +ability to make use of Updates may be restricted. + +To the extent Licensee submits Modified Software to The Qt Company (“Submitted +Modified Software”), Licensee hereby grants The Qt Company a sublicensable, +assignable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and +fully paid-up license, under all of Licensee’s Intellectual Property Rights, to +reproduce, adapt, translate, modify, and prepare derivative works of, publicly +display, publicly perform, sublicense, make available and distribute such +Submitted Modified Software as The Qt Company sees fit at its free and absolute +discretion. For the sake of clarity, the Licensee shall have no obligation to +provide Modified Software to The Qt Company. + +3. LICENSES GRANTED + +3.1 Development with Licensed Software + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non- exclusive, non-transferable license, valid for the +Term, to use, modify and copy the Licensed Software by Designated Users on the +Development Platforms for the sole purposes of designing, developing, +demonstrating and testing Application(s) and/or Devices, and to provide thereto +related support and other services to end-user Customers. + +Licensee may install copies of the Licensed Software on an unlimited number of +computers provided that (i) only the Designated Users may use the Licensed +Software, and (ii) all Designated Users must have a valid Development License to +use Licensed Software. + +Licensee may at any time designate another Designated User to replace a +then-current Designated User by notifying The Qt Company in writing, provided +that any Designated User may be replaced only once during any six-month period. + +3.2 Distribution of Redistributables + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non- exclusive, non-transferable license, valid for the +Term (excluding the Start-For-Free Term), to (i) distribute, by itself or +through its Contractors, Redistributables as installed, incorporated or +integrated into Applications for execution on the Deployment Platforms, and (ii) +distribute, by itself or through one or more tiers of Contractors, +Redistributables as installed, incorporated or integrated, or intended to be +installed, incorporated or integrated into Devices for execution on the +Deployment Platforms, and (iii) grant sublicenses to Redistributables, as +distributed hereunder, for Customers solely for Customer's internal use and to +the extent necessary in order for the Customers to use the Applications and/or +Devices for their respective intended purposes. + +Right to distribute the Redistributables as provided herein is conditional upon +the Licensee having purchased and paid the appropriate amount of Development and +Distribution Licenses from The Qt Company before distributing any +Redistributables to Customers. + +For the avoidance of any doubt it is specifically acknowledged and agreed that +distribution of Redistributables solely as installed, incorporated or integrated +into Applications for execution on the Deployment Platform(s), as specified in +(i) of the first paragraph of Section 3.2 above, i.e. with no connection to +Devices or intention to use in connection therewith, shall not require a +Distribution License. + +3.3 Further Requirements + +The licenses granted above in this Section 3 by The Qt Company to Licensee are +conditional and subject to Licensee's compliance with the following terms: + +(i) Licensee shall not remove or alter any copyright, trademark or other +proprietary rights notice contained in any portion of the Licensed Software; + +(ii) Applications must add primary and substantial functionality to the Licensed +Software; + +(iii) Applications may not pass on functionality which in any way makes it +possible for others to create software with the Licensed Software; provided +however that Licensee may use the Licensed Software's scripting and QML ("Qt +Quick") functionality solely in order to enable scripting, themes and styles +that augment the functionality and appearance of the Application(s) without +adding primary and substantial functionality to the Application(s); + +(iv) Applications must not compete with the Licensed Software; + +(v) Licensee shall not use The Qt Company's or any of its suppliers' names, +logos, or trademarks to market Applications, except that Licensee may use "Built +with Qt" logo to indicate that Application(s) was developed using the Licensed +Software; + +(vi) Licensee shall not distribute, sublicense or disclose source code of +Licensed Software to any third party (provided however that Licensee may appoint +employee(s) of Contractors as Designated Users to use Licensed Software pursuant +to this Agreement). Such right may be available for the Licensee subject to a +separate software development kit ("SDK") license agreement to be concluded with +The Qt Company; + +(vii) Licensee shall not grant the Customers a right to (i) make copies of the +Redistributables except when and to the extent required to use the Applications +and/or Devices for their intended purpose, (ii) modify the Redistributables or +create derivative works thereof, (iii) decompile, disassemble or otherwise +reverse engineer Redistributables, or (iv) redistribute any copy or portion of +the Redistributables to any third party, except as part of the onward sale of +the Device on which the Redistributables are installed; + +(viii) Licensee shall not and shall cause that its Affiliates or Contractors +shall not a) in any way combine, incorporate or integrate Licensed Software with, +or use Licensed Software for creation of, any software created with or +incorporating Open Source Qt, or b) incorporate or integrate Applications into +a hardware device or product other than a Device, unless Licensee has received +an advance written permission from The Qt Company to do so. Absent such written +permission, any and all distribution by the Licensee during the Term of a +hardware device or product a) which incorporate or integrate any part of Licensed +Software or Open Source Qt; or b) where the main user interface or substantial +functionality is provided by software build with Licensed Software or Open +Source Qt or otherwise depends on the Licensed Software or Open Source Qt, shall +be considered as distribution under this Agreement and dependent on compliance +thereof (including but not limited to obligation to pay applicable License Fees +for such distribution); + +(ix) Licensee shall cause all of its Affiliates and Contractors entitled to make +use of the licenses granted under this Agreement, to be contractually bound to +comply with the relevant terms of this Agreement and not to use the Licensed +Software beyond the terms hereof and for any purposes other than operating +within the scope of their services for Licensee. Licensee shall be responsible +for any and all actions and omissions of its Affiliates and Contractors relating +to the Licensed Software and use thereof (including but not limited to payment +of all applicable License Fees); + +(x) Except when and to the extent explicitly provided in this Section 3, +Licensee shall not transfer, publish, disclose, display or otherwise make +available the Licensed Software; + +(xi) Licensee shall not take any action inconsistent with The Qt Company's +Intellectual Property Rights; and + +(xii) Attempt or enlist a third party to conduct or attempt to conduct any of +the above. + +Above terms shall not be applicable if and to the extent they conflict with any +mandatory provisions of any applicable laws. + +Any use of Licensed Software beyond the provisions of this Agreement is strictly +prohibited and requires an additional license from The Qt Company. + +4. THIRD PARTY SOFTWARE + +The Licensed Software may provide links to third party libraries or code +(collectively "Third Party Software") to implement various functions. Third +Party Software does not comprise part of the Licensed Software. In some cases, +access to Third Party Software may be included in the Licensed Software. Such +Third Party Software will be listed in the ".../src/3rdparty" source tree +delivered with the Licensed Software or documented in the Licensed Software, as +such may be amended from time to time. Licensee acknowledges that use or +distribution of Third Party Software is in all respects subject to applicable +license terms of applicable third party right holders. + +5. PRE-RELEASE CODE + +The Licensed Software may contain pre-release code and functionality marked or +otherwise stated as “Technology Preview”, “Alpha”, “Beta” or similar +designation. Such pre-release code may be present in order to provide +experimental support for new platforms or preliminary versions of one or more +new functionalities. The pre-release code may not be at the level of +performance and compatibility of a final, generally available, product +offering of the Licensed Software. The pre-release parts of the Licensed +Software may not operate correctly, may contain errors and may be substantially +modified by The Qt Company prior to the first commercial product release, if +any. The Qt Company is under no obligation to make pre-release code +commercially available, or provide any Support or Updates relating thereto. +The Qt Company assumes no liability whatsoever regarding any pre-release code, +but any use thereof is exclusively at Licensee’s own risk and expense. + +6. LIMITED WARRANTY AND WARRANTY DISCLAIMER + +The Qt Company hereby represents and warrants that it has the power and +authority to grant the rights and licenses granted to Licensee under this +Agreement. + +Except as set forth above, the Licensed Software is licensed to Licensee "as +is". + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF +ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL WARRANTIES, +EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT +WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES NOT WARRANT THAT THE +LICENSED SOFTWARE WILL SATISFY LICENSEE'S REQUIREMENTS OR THAT IT WILL OPERATE +WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE UNINTERRUPTED. ALL +USE OF AND RELIANCE ON THE LICENSED SOFTWARE IS AT THE SOLE RISK OF AND +RESPONSIBILITY OF LICENSEE. + +Licensee's exclusive remedy and The Qt Company's entire liability for Licensed +Software shall be limited, at The Qt Company's option, to correction of the +error, replacement of the Licensed Software or return of the applicable fees +paid for the defective Licensed Software for the time period during which the +License is not able to utilize the Licensed Software under the terms of this +Agreement. + +7. INDEMNIFICATION AND LIMITATION OF LIABILITY + +7.1 Limitation of Liability + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, (II) +LICENSEE'S DUTY TO PAY ALL APPLICABLE LICENSE FEES AND COMPENSATIONS, AND (III) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER PARTY FOR ANY LOSS OF PROFIT, +LOSS OF DATA, LOSS OF BUSINESS OR GOODWILL OR ANY OTHER INDIRECT, SPECIAL, +CONSEQUENTIAL, INCIDENTAL OR PUNITIVE COST, DAMAGES OR EXPENSE OF ANY KIND, +HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THIS AGREEMENT. + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, (II) +LICENSEE'S DUTY TO PAY ALL APPLICABLE LICENSE FEES AND COMPENSATIONS, AND (III) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL EITHER PARTY'S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT EXCEED +THE AGGREGATE LICENSE FEES RECEIVED BY THE QT COMPANY FROM LICENSEE DURING THE +PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE EVENT RESULTING IN SUCH +LIABILITY. + +THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE RISKS UNDER THIS AGREEMENT BETWEEN +THE QT COMPANY AND LICENSEE AND THE PARTIES HAVE RELIED UPON THE LIMITATIONS SET +FORTH HEREIN IN DETERMINING WHETHER TO ENTER INTO THIS AGREEMENT. + +7.2 Licensee´s Indemnification Licensee shall indemnify and hold harmless The +Qt Company from and against any claim, injury, judgment, settlement, loss or +expense, including attorneys' fees related to: (a) Licensee's misrepresentation +in connection with The Qt Company or the Licensed Software or breach of this +Agreement, (b) the Application or Device (except where such cause of liability +is solely attributable to the Licensed Software). + +8. SUPPORT, UPDATES AND ONLINE SERVICES + +Licensee will be eligible to receive Support and Updates and to use the Online +Services during the Support Term. Unless otherwise decided by The Company at its +free and absolute discretion, Upgrades will not be included in the Support but +may be available subject to additional fees. + +Licenses granted under this Agreement shall include a prepaid Initial Support +Term. + +Initial Support Term shall be automatically extended to one or more Renewal +Term(s), unless and until either Party notifies the other Party in writing that +it does not wish to continue the Support, such notification to be provided to +the other Party no less than ninety (90) days before expiry of the Initial +Support Term or respective Renewal Term. During any such Extended Term Support +shall be available subject to prices and terms agreed between the Parties or, if +no advance agreement exists, subject to The Qt Company's standard pricing +applicable at the commencement date of any such Support Renewal Term. From time +to time The Qt Company may change support provided within each Support plan; +provided that during the respective Initial Support Term or Support Renewal Term +(as the case may be), the level of support provided by The Qt Company may not be +reduced without the consent of the Licensee. + +Unless otherwise agreed, The Qt Company shall not be responsible for providing +any service or support to the Customers. + +9. CONFIDENTIALITY + +Each Party acknowledges that during the Term of this Agreement each Party may +receive information about the other Party's business, business methods, business +plans, customers, business relations, technology, and other information, +including the terms of this Agreement, that is confidential and of great value +to the other Party, and the value of which would be significantly reduced if +disclosed to third parties ("Confidential Information"). Accordingly, when a +Party (the "Receiving Party") receives Confidential Information from the other +Party (the "Disclosing Party"), the Receiving Party shall only disclose such +information to employees and Contractors on a need to know basis, and shall +cause its employees and employees of its Affiliates to: (i) maintain any and all +Confidential Information in confidence; (ii) not disclose the Confidential +Information to a third party without the Disclosing Party's prior written +approval; and (iii) not, directly or indirectly, use the Confidential +Information for any purpose other than for exercising its rights and fulfilling +its responsibilities pursuant to this Agreement. Each Party shall take +reasonable measures to protect the Confidential Information of the other Party, +which measures shall not be less than the measures taken by such Party to +protect its own confidential and proprietary information. + +Obligation of confidentiality shall not apply to information that (i) is or +becomes generally known to the public through no act or omission of the +Receiving Party; (ii) was in the Receiving Party's lawful possession prior to +the disclosure hereunder and was not subject to limitations on disclosure or +use; (iii) is developed independently by employees or Contractors of the +Receiving Party or other persons working for the Receiving Party who have not +had access to the Confidential Information of the Disclosing Party, as proven by +the written records of the Receiving Party; (iv) is lawfully disclosed to the +Receiving Party without restrictions, by a third party not under an obligation +of confidentiality; or (v) the Receiving Party is legally compelled to disclose, +in which case the Receiving Party shall notify the Disclosing Party of such +compelled disclosure and assert the privileged and confidential nature of the +information and cooperate fully with the Disclosing Party to limit the scope of +disclosure and the dissemination of disclosed Confidential Information to the +minimum extent necessary. + +The obligations under this Section 9 shall continue to remain in force for a +period of five (5) years after the last disclosure, and, with respect to trade +secrets, for so long as such trade secrets are protected under applicable trade +secret laws. + +10. FEES, DELIVERY AND PAYMENT + +10.1 License Fees + +License Fees are described in The Qt Company's standard price list, quote or +Purchase Order confirmation or in an appendix hereto, as the case may be. The +License Fees shall not be refunded or claimed as a credit, even on the ground +that Distribution Licenses are not used, i.e. Redistributables are not actually +distributed corresponding to the Distribution Licenses purchased, or for any +other reason. + +10.2 Ordering Licenses + +Licensee may purchase Development Licenses and Distribution Licenses pursuant to +agreed pricing terms or, if no specific pricing terms have been agreed upon, at +The Qt Company's standard pricing terms applicable at the time of purchase. +Licensee shall submit all purchase orders for Development Licenses and +Distribution Licenses to The Qt Company by email or any other method acceptable +to The Qt Company (each such order is referred to herein as a "Purchase Order") +for confirmation, whereupon the Purchase Order shall become binding between the +Parties. + +10.3 Distribution License Packs + +Unless otherwise agreed, the Distribution Licenses are bought by way of +Distribution License Packs. Upon due payment of the ordered Distribution License +Pack(s), the Licensee will have an account of Distribution Licenses available +for installing, bundling or integrating (all jointly "installing") the +Redistributables with the Devices or for otherwise distributing the +Redistributables in accordance with this Agreement. Each time Licensee +"installs" or distributes a copy of Redistributables, then one Distribution +License is used, and Licensee's account of available Distribution Licenses is +decreased accordingly. Licensee may "install" copies of the Redistributables so +long as Licensee has Distribution Licenses remaining on its account. +Redistributables will be deemed to have been "installed" into a Device when one +of the following circumstances shall have occurred: a) the Redistributables have +been loaded onto the Device and used outside of the Licensee's premises or b) +the Device has been fully tested and placed into Licensee's inventory (or sold) +for the first time (i.e., Licensee will not be required to use (or pay for) more +than one Distribution License for each individual Device, e.g. in a situation +where a Device is returned to Licensee's inventory after delivery to a +distributor or sale to a Customer). In addition, if Licensee includes a back-up +copy of the Redistributables on a CD-ROM or other storage medium along with the +product, that backup copy of the Redistributables will not be deemed to have +been "installed" and will not require an additional Distribution License. + +10.4 Payment Terms + +License Fees and any other charges under this Agreement shall be paid by +Licensee no later than thirty (30) days from the date of the applicable invoice +from The Qt Company. The Qt Company will submit an invoice to Licensee after +the effective date of this Agreement and/or after The Qt Company receives a +Purchase Order from Licensee. A late payment charge of the lower of (a) one +percent per month; or (b) the interest rate stipulated by applicable law, +shall be charged on any unpaid balances that remain past due. The Qt Company +shall have the right to suspend, terminate or withhold grants of all rights to +the Licensed Software hereunder, including but not limited to the Developer +License, Distribution License, and Support, should Licensee fail to make +payment in a timely fashion. + +10.5 Taxes + +All License Fees and other charges payable hereunder are gross amounts but +exclusive of any value added tax, use tax, sales tax and other taxes, duties or +tariffs ("Taxes"). Such applicable Taxes shall be paid by Licensee, or, where +applicable, in lieu of payment of such Taxes, Licensee shall provide an +exemption certificate to The Qt Company and any applicable authority. + +11 RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS + +11.1 Licensee's Record-keeping + +Licensee shall at all times maintain accurate and up-to-date written records of +Licensee's activities related to the use of Licensed Software and distribution +of Redistributables. The records shall be adequate to determine Licensee's +compliance with the provisions of this Agreement and to demonstrate the number +of Designated Users and Redistributables distributed by Licensee. The records +shall conform to good accounting practices reasonably acceptable to The Qt +Company. Licensee shall, within thirty (30) days from the end of each calendar +quarter, deliver to The Qt Company a report detailing the number of Designated +Users and copies of Redistributables distributed by Licensee during that +calendar quarter, and also detailing the number of undistributed copies of +Redistributables made by Licensee and remaining in its account (i.e., +undistributed copies for which Distribution Licenses have been or need to be +obtained from The Qt Company). Such report shall contain such other information +as The Qt Company shall reasonably require from time to time. + +11.2. The Qt Company's Audit Rights + +The Qt Company or an independent auditor acting on behalf of The Qt Company's, +may, upon at least five (5) business days' prior written notice and at its +expense, audit Licensee with respect to the use of the Redistributables, but not +more frequently than once during each 6-month period. Such audit may be +conducted by mail, electronic means or through an in-person visit to Licensee's +place of business. Any such in-person audit shall be conducted during regular +business hours at Licensee's facilities and shall not unreasonably interfere +with Licensee's business activities. The Qt Company or the independent auditor +acting on behalf of The Qt Company shall be entitled to inspect Licensee's +Records. All such Licensee's Records and use thereof shall be subject to an +obligation of confidentiality under this Agreement. If an audit reveals that +Licensee is using the Licensed Software beyond scope of the licenses Licensee +has paid for, Licensee agrees to immediately pay The Qt Company any amounts owed +for such unauthorized use. In addition, in the event the audit reveals a +material violation of the terms of this Agreement (underpayment of more than 5% +of License Fees shall always be deemed a material violation for purposes of this +section), then the Licensee shall pay The Qt Company's reasonable cost of +conducting such audit. + +12 TERM AND TERMINATION + +12.1 Term + +This Agreement shall enter into force upon due acceptance by the Licensee and +remain in force for the Term, unless and until terminated pursuant to the terms +of this Section 12. + +12.2 Termination by The Qt Company + +The Qt Company shall have the right to terminate this Agreement upon thirty (30) +days prior written notice if (i) the Licensee is in material breach of any +obligation of this Agreement and fails to remedy such breach within such notice +period; (ii) or Licensee or any of its Affiliates bring a suit before any court +or administrative agency or otherwise assert a claim against The Qt Company's or +any of its Affiliates' Intellectual Property Rights or validity thereof. + +12.3 Mutual Right to Terminate + +Either Party shall have the right to terminate this Agreement immediately upon +written notice in the event that the other Party becomes insolvent, files for +any form of bankruptcy, makes any assignment for the benefit of creditors, has a +receiver, administrative receiver or officer appointed over the whole or a +substantial part of its assets, ceases to conduct business, or an act equivalent +to any of the above occurs under the laws of the jurisdiction of the other +Party. + +12.4 Parties´ Rights and Duties upon Termination + +Upon expiry or termination of the Agreement for any reason, Licensee shall, +within 30 days after such termination, cease and shall cause all Designated +Users (including those of its Affiliates' and Contractors') to cease using the +Licensed Software and distribution of the Redistributables under this Agreement. +Notwithstanding the above, in the event the Agreement expires or is terminated +for reason other than by The Qt Company pursuant to Section 12.2, the Licensee +is entitled, for a period of six (6) months after the effective date of +termination, to continue distribution of Devices under the Distribution Licenses +paid but unused at such effective date of termination. Upon any such termination +the Licensee shall destroy or return to The Qt Company all copies of the +Licensed Software and all related materials and will certify the same to The Qt +Company upon its request, provided however that Licensee may retain and exploit +such copies of the Licensed Software as it may reasonably require in providing +continued support to Customers. Expiry or termination of this Agreement for any +reason whatsoever shall not relieve Licensee of its obligation to pay any +License Fees accrued or payable to The Qt Company prior to the effective date of +termination, and Licensee shall immediately pay to The Qt Company all such fees +upon the effective date of termination. Termination of this Agreement shall not +affect any rights of Customers to continue use of Applications and Devices (and +therein incorporated Redistributables). + +13. GOVERNING LAW AND LEGAL VENUE + +In the event this Agreement is in the name of The Qt Company Inc., a Delaware +Corporation, then: +(i) this Agreement shall be construed and interpreted in accordance with the +laws of the State of California, USA, excluding its choice of law provisions; +(ii) the United Nations Convention on Contracts for the International Sale of +Goods will not apply to this Agreement; and +(iii) any dispute, claim or controversy arising out of or relating to this +Agreement or the breach, termination, enforcement, interpretation or validity +thereof, including the determination of the scope or applicability of this +Agreement to arbitrate, shall be determined by arbitration in San Francisco, +USA, before one arbitrator. The arbitration shall be administered by JAMS +pursuant to JAMS' Streamlined Arbitration Rules and Procedures. Judgment on +the Award may be entered in any court having jurisdiction. This Section shall +not preclude parties from seeking provisional remedies in aid of arbitration +from a court of appropriate jurisdiction. + +In the event this Agreement is in the name of The Qt Company Ltd., +a Finnish Company, then: +(i) This Agreement shall be construed and interpreted in accordance with the +laws of Finland, excluding its choice of law provisions; +(ii) The United Nations Convention on Contracts for the International Sale of +Goods will not apply to this Agreement; and +(iii) Any disputes, controversy or claim arising out of or relating to this +Agreement, or the breach, termination or validity thereof shall be shall be +finally settled by arbitration in accordance with the Arbitration Rules of +Finland Chamber of Commerce. The arbitration tribunal shall consist of one (1), +or if either Party so requires, of three (3), arbitrators. The award shall be +final and binding and enforceable in any court of competent jurisdiction. The +arbitration shall be held in Helsinki, Finland and the process shall be +conducted in the English language. This Section shall not preclude parties from +seeking provisional remedies in aid of arbitration from a court of appropriate +jurisdiction. + +14. GENERAL PROVISIONS + +14.1 No Assignment + +Licensee shall not be entitled to assign or transfer all or any of its rights, +benefits and obligations under this Agreement without the prior written consent +of The Qt Company, which shall not be unreasonably withheld or delayed. The Qt +Company shall be entitled to freely assign or transfer any of its rights, +benefits or obligations under this Agreement. + +14.2 No Third Party Representations + +Licensee shall make no representations or warranties concerning the Licensed +Software on behalf of The Qt Company. Any representation or warranty Licensee +makes or purports to make on The Qt Company's behalf shall be void as to The Qt +Company. + +14.3 Surviving Sections + +Any terms and conditions that by their nature or otherwise reasonably should +survive termination of this Agreement shall so be deemed to survive. + +14.4 Entire Agreement + +This Agreement, the exhibits hereto, the License Certificate and any applicable +Purchase Order constitute the complete agreement between the Parties and +supersedes all prior or contemporaneous discussions, representations, and +proposals, written or oral, with respect to the subject matters discussed +herein. In the event of any conflict or inconsistency between this Agreement and +any Purchase Order, the terms of this Agreement will prevail over the terms of +the Purchase Order with respect to such conflict or inconsistency. + +14.5 Modifications + +No modification of this Agreement shall be effective unless contained in a +writing executed by an authorized representative of each Party. No term or +condition contained in Licensee's Purchase Order shall apply unless expressly +accepted by The Qt Company in writing. If any provision of the Agreement is +found void or unenforceable, the remainder shall remain valid and enforceable +according to its terms. If any remedy provided is determined to have failed for +its essential purpose, all limitations of liability and exclusions of damages +set forth in this Agreement shall remain in effect. + +14.6 Force Majeure + +Except for the payment obligations hereunder, neither Party shall be liable to +the other for any delay or non-performance of its obligations hereunder in the +event and to the extent that such delay or non- performance is due to an event +of act of God, terrorist attack or other similar unforeseeable catastrophic +event that prevents either Party for fulfilling its obligations under this +Agreement and which such Party cannot avoid or circumvent ("Force Majeure +Event"). If the Force Majeure Event results in a delay or non- performance of a +Party for a period of three (3) months or longer, then either Party shall have +the right to terminate this Agreement with immediate effect without any +liability (except for the obligations of payment arising prior to the event of +Force Majeure) towards the other Party. + +14.7 Notices + +Any notice given by one Party to the other shall be deemed properly given and +deemed received if specifically acknowledged by the receiving Party in writing +or when successfully delivered to the recipient by hand, fax, or special courier +during normal business hours on a business day to the addresses specified for +The Qt Company in the beginning of this Agreement, and for the Licensee in the +Licensee's account profile. Each communication and document made or delivered by +one Party to the other Party pursuant to this Agreement shall be in the English +language. + +14.8 Export Control + +Licensee acknowledges that the Redistributables may be subject to export control +restrictions under the applicable laws of respective countries. Licensee shall +fully comply with all applicable export license restrictions and requirements as +well as with all laws and regulations relating to the Redistributables and +exercise of licenses hereunder and shall procure all necessary governmental +authorizations, including without limitation, all necessary licenses, approvals, +permissions or consents, where necessary for the re- exportation of the +Redistributables, Applications and/or Devices. + +14.9 No Implied License + +There are no implied licenses or other implied rights granted under this +Agreement, and all rights, save for those expressly granted hereunder, shall +remain with The Qt Company and its licensors. In addition, no licenses or +immunities are granted to the combination of the Licensed Software with any +other software or hardware not delivered by The Qt Company under this Agreement. + +14.10 Attorney Fees + +The prevailing Party in any action to enforce this Agreement shall be entitled +to recover its attorney's fees and costs in connection with such action. + +14.11 Severability + +If any provision of this Agreement shall be adjudged by any court of competent +jurisdiction to be unenforceable or invalid, that provision shall be limited or +eliminated to the minimum extent necessary so that this Agreement shall +otherwise remain in full force and effect and enforceable. + +IN WITNESS WHEREOF, the Parties hereto, intending to be legally bound hereby, +have caused this Agreement to be executed by Licensee's authorized +representative installing the Licensed Software and accepting the terms hereof +in connection therewith. + +Appendix 1 + +1. Parts of the Licensed Software that are permitted for distribution in object +code form only ("Redistributables") under this Agreement: + +- The Licensed Software's essential and add-on libraries + +- The Licensed Software's configuration tool ("qtconfig") + +- The Licensed Software's help tool ("Qt Assistant") + +- The Licensed Software's internationalization tools ("Qt Linguist", "lupdate", +"lrelease") + +- The Licensed Software's QML ("Qt Quick") launcher tool ("qmlscene" and +"qmlviewer") + +- The Licensed Software's installer framework + +2. Parts of the Licensed Software that are not permitted for distribution +include, but are not limited to: + +- The Licensed Software's source code and header files + +- The Licensed Software's documentation + +- The Licensed Software's documentation generation tool ("qdoc") + +- The Licensed Software's tool for writing makefiles ("qmake") + +- The Licensed Software's Meta Object Compiler ("moc") + +- The Licensed Software's User Interface Compiler ("uic" or in the case of Qt +Jambi: "juic") + +- The Licensed Software's Resource Compiler ("rcc") + +- The Licensed Software's generator (only in the case of Qt Jambi if applicable) + +- The Licensed Software's parts of the IDE tool ("Qt Creator") + +- The Licensed Software's Emulator + +- Build scripts, recipes and other material for creating the configuration of +Licensed Software and/or 3rd party components, including the reference operating +system configuration delivered in conjunction with the Licensed Software diff --git a/.QT-FOR-APPLICATION-DEVELOPMENT-LICENSE-AGREEMENT b/.QT-FOR-APPLICATION-DEVELOPMENT-LICENSE-AGREEMENT new file mode 100644 index 0000000..a6d14c2 --- /dev/null +++ b/.QT-FOR-APPLICATION-DEVELOPMENT-LICENSE-AGREEMENT @@ -0,0 +1,912 @@ +QT LICENSE AGREEMENT Agreement version 4.0 + +This License Agreement (“Agreement”) is a legal agreement between The Qt +Company (as defined below) and the Licensee (as defined below) for the license +of Licensed Software (as defined below). Capitalized terms used herein are +defined in Section 1. + +WHEREAS: + +(A). Licensee wishes to use the Licensed Software for the purpose of developing +and distributing Applications and/or Devices; and + +(B). The Qt Company is willing to grant the Licensee a right to use Licensed +Software for such purpose pursuant to term and conditions of this Agreement. + +NOW, THEREFORE, THE PARTIES HEREBY AGREE AS FOLLOWS: + +1. DEFINITIONS + +“Affiliate” of a Party shall mean an entity (i) which is directly or indirectly +controlling such Party; (ii) which is under the same direct or indirect +ownership or control as such Party; or (iii) which is directly or indirectly +owned or controlled by such Party. For these purposes, an entity shall be +treated as being controlled by another if that other entity has fifty percent +(50 %) or more of the votes in such entity, is able to direct its affairs +and/or to control the composition of its board of directors or equivalent body. + +“Applications” shall mean Licensee's software products created using the +Licensed Software, which may include the Redistributables, or part +thereof. + +“Contractor(s)” shall mean third party consultants, distributors and +contractors performing services to a Party under applicable contractual +arrangement. + +“Customer(s)” shall mean Licensee’s end users to whom Licensee, directly or +indirectly, distributes copies of the Redistributables. + +“Deployment Platforms” shall mean operating systems specified in the License +Certificate, in which the Redistributables can be distributed pursuant to the +terms and conditions of this Agreement. + +“Designated User(s)” shall mean the employee(s) of Licensee or Licensee’s +Affiliates acting within the scope of their employment or Licensee's +Contractors acting within the scope of their services for Licensee and on +behalf of Licensee. Designated Users shall be named in the License Certificate. + +“Development License” shall mean the license needed by the Licensee for each +Designated User to use the Licensed Software under the license grant described +in Section 3.1 of this Agreement. + +“Development Platforms” shall mean those operating systems specified in the +License Certificate, in which the Licensed Software can be used under the +Development License, but not distributed in any form or used for any other +purpose. + +“Devices” shall mean hardware devices or products that 1) are manufactured +and/or distributed by the Licensee or its Affiliates or Contractors, and +(2)(i) incorporate or integrate the Redistributables or parts thereof; or (ii) +do not incorporate or integrate the Redistributables at the time of +distribution, but where, when used by a Customer, the main user interface or +substantial functionality of such device is provided by Application(s) or +otherwise depends on the Licensed Software. + +“Distribution License(s)” shall mean the license required for distribution of +Redistributables in connection with Devices pursuant to license grant described +in Section 3.3 of this Agreement. + +“Distribution License Packs” shall mean set of prepaid Distribution Licenses +for distribution of Redistributables, as defined in The Qt Company’s standard +price list, quote, Purchase Order confirmation or in an appendix hereto, +as the case may be. + +“Intellectual Property Rights” shall mean patents (including utility models), +design patents, and designs (whether or not capable of registration), chip +topography rights and other like protection, copyrights, trademarks, service +marks, trade names, logos or other words or symbols and any other form of +statutory protection of any kind and applications for any of the foregoing as +well as any trade secrets. + +“License Certificate” shall mean a certificate generated by The Qt Company for +each Designated User respectively upon them downloading the licensed Software. +License Certificate will be available under respective Designated User’s Qt +Account at account.qt.io and it will specify the Designated User, the +Development Platforms, Deployment Platforms and the License Term. The terms of +the License Certificate are considered part of this Agreement and shall be +updated from time to time to reflect any agreed changes to the foregoing terms +relating to Designated User’s rights to the Licensed Software. + +“License Fee” shall mean the fee charged to the Licensee for rights granted +under the terms of this Agreement. + +“License Term” shall mean the agreed validity period of the Development +License of the respective Designated User, during which time the +Designated User is entitled to use the Licensed Software, as set forth in the +respective License Certificate. + +“Licensed Software” shall mean all versions of the + +(i) Qt Toolkit (including Qt Essentials, Qt Add-Ons and Value-Add modules) as +described in http://doc.qt.io/qt-5/qtmodules.html, + +(ii) Qt Creator (including Creator IDE tool) as described in +http://doc.qt.io/qtcreator/index.html, + +(iii) Qt 3D Studio as described in http://doc.qt.io/qt3dstudio/index.html, and + +as well as corresponding online or electronic documentation, associated media +and printed materials, including the source code, example programs and the +documentation, licensed to the Licensee under this Agreement. Licensed Software +does not include Third Party Software (as defined in Section 4), Open Source +Qt, or other software products of The Qt Company (for example Qt Safe Renderer +and Qt for Automation), unless such other software products of The Qt Company +are separately agreed in writing to be included in scope of the Licensed +Software. + +“Licensee” shall mean the individual or legal entity that is party to this +Agreement, as identified on the signature page hereof. + +“Licensee’s Records” shall mean books and records that are likely to contain +information bearing on Licensee’s compliance with this Agreement or the +payments due to The Qt Company under this Agreement, including, but not limited +to: assembly logs, sales records and distribution records. + +“Modified Software” shall have the meaning as set forth in Section 2.3. + +“Online Services” shall mean any services or access to systems made available +by The Qt Company to the Licensee over the Internet relating to the Licensed +Software or for the purpose of use by the Licensee of the Licensed Software or +Support. Use of any such Online Services is discretionary for the Licensee and +some of them may be subject to additional fees. + +“Open Source Qt” shall mean the non-commercial Qt computer software products, +licensed under the terms of the GNU Lesser General Public License, version +2.1 or later (“LGPL”) or the GNU General Public License, version 2.0 or later +(“GPL”). For clarity, Open Source Qt shall not be provided nor governed under +this Agreement. + +”Party” or “Parties” shall mean Licensee and/or The Qt Company. + +"Redistributables" shall mean the portions of the Licensed Software set forth +in Appendix 1, Section 1 that may be distributed pursuant to the terms of this +Agreement in object code form only, including any relevant documentation. +Where relevant, any reference to Licensed Software in this Agreement shall +include and refer also to Redistributables. + +“Renewal Term” shall mean an extension of previous License Term as agreed +between the Parties. + +“Submitted Modified Software” shall have the meaning as set forth in +Section 2.3. + +“Support” shall mean standard developer support that is provided by The Qt +Company to assist Designated Users in using the Licensed Software in +accordance with The Qt Company’s standard support terms and as further +defined in Section 8 hereunder. + +“Taxes” shall have the meaning set forth in Section 10.5. + +“Term” shall have the meaning set forth in Section 12. + +“The Qt Company” shall mean: + +(i) in the event Licensee is an individual residing in the United States or a +legal entity incorporated in the United States or having its headquarters in +the United States, The Qt Company Inc., a Delaware corporation with its office +at 2350 Mission College Blvd., Suite 1020, Santa Clara, CA 95054, USA.; or + +(ii) in the event the Licensee is an individual residing outside of the United +States or a legal entity incorporated outside of the United States or having +its registered office outside of the United States, The Qt Company Ltd., a +Finnish company with its registered office at Bertel Jungin aukio D3A, 02600 +Espoo, Finland. + +"Third Party Software " shall have the meaning set forth in Section 4. + +“Updates” shall mean a release or version of the Licensed Software containing +bug fixes, error corrections and other changes that are generally made +available to users of the Licensed Software that have contracted for Support. +Updates are generally depicted as a change to the digits following the decimal +in the Licensed Software version number. The Qt Company shall make Updates +available to the Licensee under the Support. Updates shall be considered as +part of the Licensed Software hereunder. + +“Upgrades” shall mean a release or version of the Licensed Software containing +enhancements and new features and are generally depicted as a change to the +first digit of the Licensed Software version number. In the event Upgrades are +provided to the Licensee under this Agreement, they shall be considered as +part of the Licensed Software hereunder. + +2. OWNERSHIP + +2.1 Ownership of The Qt Company + +The Licensed Software is protected by copyright laws and international +copyright treaties, as well as other intellectual property laws and treaties. +The Licensed Software is licensed, not sold. + +All The Qt Company's Intellectual Property Rights are and shall remain the +exclusive property of The Qt Company or its licensors respectively. + +2.2 Ownership of Licensee + +All the Licensee's Intellectual Property Rights are and shall remain the +exclusive property of the Licensee or its licensors respectively. + +All Intellectual Property Rights to the Modified Software, Applications and +Devices shall remain with the Licensee and no rights thereto shall be granted +by the Licensee to The Qt Company under this Agreement (except as set forth in +Section 2.3 below). + +2.3 Modified Software + +Licensee may create bug-fixes, error corrections, patches or modifications to +the Licensed Software (“Modified Software”). Such Modified Software may break +the source or binary compatibility with the Licensed Software (including +without limitation through changing the application programming interfaces +("API") or by adding, changing or deleting any variable, method, or class +signature in the Licensed Software and/or any inter-process protocols, services +or standards in the Licensed Software libraries). To the extent that Licensee’s +Modified Software so breaks source or binary compatibility with the Licensed +Software, Licensee acknowledges that The Qt Company's ability to provide +Support may be prevented or limited and Licensee's ability to make use of +Updates may be restricted. + +Licensee may, at its sole and absolute discretion, choose to submit Modified +Software to The Qt Company (“Submitted Modified Software”) in connection with +Licensee’s Support request, service request or otherwise. In the event Licensee +does so, then, Licensee hereby grants The Qt Company a sublicensable, +assignable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and +fully paid-up license, under all of Licensee’s Intellectual Property Rights, to +reproduce, adapt, translate, modify, and prepare derivative works of, publicly +display, publicly perform, sublicense, make available and distribute such +Submitted Modified Software as The Qt Company sees fit at its free and absolute +discretion. + +3. LICENSES GRANTED + +3.1 Development with Licensed Software + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non-exclusive, non-transferable license, valid for the +License Term, to use, modify and copy the Licensed Software by Designated Users +on the Development Platforms for the sole purposes of designing, developing, +demonstrating and testing Application(s) and/or Devices, and to provide thereto +related support and other related services to end-user Customers. + +Licensee may install copies of the Licensed Software on an unlimited number of +computers provided that (i) only the Designated Users may use the Licensed +Software, and (ii) all Designated Users must have a valid Development License +to use Licensed Software. + +Licensee may at any time designate another Designated User to replace a then- +current Designated User by notifying The Qt Company in writing, provided that +any Designated User may be replaced only once during any six-month period. + +Upon expiry of the initially agreed License Term, the respective License Terms +shall be automatically extended to one or more Renewal Term(s), unless and +until either Party notifies the other Party in writing that it does not wish to +continue the License Term, such notification to be provided to the other Party +no less than ninety (90) days before expiry of the respective License Term. +Unless otherwise agreed between the Parties, Renewal Term shall be of equal +length with the initial Term. + +Any such Renewal Term shall be subject to License Fees agreed between the +Parties or, if no advance agreement exists, subject to The Qt Company’s +standard pricing applicable at the commencement date of any such Renewal Term. + +3.2 Distribution of Applications + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non-exclusive, non-transferable, revocable (for cause +pursuant to this Agreement) right and license, valid for the Term, to + +(i) distribute, by itself or through its Contractors, Redistributables as +installed, incorporated or integrated into Applications for execution on the +Deployment Platforms, and + +(ii) grant sublicenses to Redistributables, as distributed hereunder, for +Customers solely for Customer’s internal use and to the extent necessary in +order for the Customers to use the Applications for their respective intended +purposes. + +Right to distribute the Redistributables as part of an Application as provided +herein is not royalty-bearing but is conditional upon the Licensee having paid +the agreed Development Licenses from The Qt Company before distributing any +Redistributables to Customers. + +3.3 Distribution of Devices + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non-exclusive, non-transferable, revocable (for cause +pursuant to this Agreement) right and license, valid for the Term, to + +(i) distribute, by itself or through one or more tiers of Contractors, +Redistributables as installed, incorporated or integrated, or intended to be +installed, incorporated or integrated into Devices for execution on the +Deployment Platforms, and + +(ii) grant sublicenses to Redistributables, as distributed hereunder, for +Customers solely for Customer’s internal use and to the extent necessary in +order for the Customers to use the Devices for their respective intended +purposes. + +Right to distribute the Redistributables with Devices as provided herein is +conditional upon the Licensee having purchased and paid the appropriate amount +of Development and Distribution Licenses from The Qt Company before +distributing any Redistributables to Customers. + +3.4 Further Requirements + +The licenses granted above in this Section 3 by The Qt Company to Licensee are +conditional and subject to Licensee's compliance with the following terms: + +(i) Licensee shall not remove or alter any copyright, trademark or other +proprietary rights notice contained in any portion of the Licensed Software; + +(ii) Applications must add primary and substantial functionality to the +Licensed Software; + +(iii) Applications may not pass on functionality which in any way makes it +possible for others to create software with the Licensed Software; provided +however that Licensee may use the Licensed Software's scripting and QML ("Qt +Quick") functionality solely in order to enable scripting, themes and styles +that augment the functionality and appearance of the Application(s) without +adding primary and substantial functionality to the Application(s); + +(iv) Applications must not compete with the Licensed Software; + +(v) Licensee shall not use The Qt Company's or any of its suppliers' names, +logos, or trademarks to market Applications, except that Licensee may use +“Built with Qt” logo to indicate that Application(s) was developed using the +Licensed Software; + +(vi) Licensee shall not distribute, sublicense or disclose source code of +Licensed Software to any third party (provided however that Licensee may +appoint employee(s) of Contractors as Designated Users to use Licensed +Software pursuant to this Agreement). Such right may be available for the +Licensee subject to a separate software development kit (“SDK”) license +agreement to be concluded with The Qt Company; + +(vii) Licensee shall not grant the Customers a right to (i) make copies of the +Redistributables except when and to the extent required to use the Applications +and/or Devices for their intended purpose, (ii) modify the Redistributables or +create derivative works thereof, (iii) decompile, disassemble or otherwise +reverse engineer Redistributables, or (iv) redistribute any copy or portion of +the Redistributables to any third party, except as part of the onward sale of +the Device on which the Redistributables are installed; + +(viii) Licensee shall not and shall cause that its Affiliates or Contractors +shall not a) in any way combine, incorporate or integrate Licensed Software +with, or use Licensed Software for creation of, any software created with or +incorporating Open Source Qt, or b) incorporate or integrate Applications +into a hardware device or product other than a Device, unless Licensee has +received an advance written permission from The Qt Company to do so. Absent +such written permission, any and all distribution by the Licensee during the +Term of a hardware device or product a) which incorporate or integrate any +part of Licensed Software or Open Source Qt; or b) where the main user +interface or substantial functionality is provided by software build with +Licensed Software or Open Source Qt or otherwise depends on the Licensed +Software or Open Source Qt, shall be considered as a Device distribution under +this Agreement and dependent on compliance thereof (including but not limited +to obligation to pay applicable License Fees for such distribution); + +(ix) Licensee shall cause all of its Affiliates and Contractors entitled to +make use of the licenses granted under this Agreement, to be contractually +bound to comply with the relevant terms of this Agreement and not to use the +Licensed Software beyond the terms hereof and for any purposes other than +operating within the scope of their services for Licensee. Licensee shall be +responsible for any and all actions and omissions of its Affiliates and +Contractors relating to the Licensed Software and use thereof (including but +not limited to payment of all applicable License Fees); + +(x) Except when and to the extent explicitly provided in this Section 3, +Licensee shall not transfer, publish, disclose, display or otherwise make +available the Licensed Software; + +; and + +(xi) Licensee shall not attempt or enlist a third party to conduct or attempt +to conduct any of the above. + +Above terms shall not be applicable if and to the extent they conflict with any +mandatory provisions of any applicable laws. + +Any use of Licensed Software beyond the provisions of this Agreement is +strictly prohibited and requires an additional license from The Qt Company. + +4. THIRD PARTY SOFTWARE + +The Licensed Software may provide links to third party libraries or code +(collectively "Third Party Software") to implement various functions. Third +Party Software does not comprise part of the Licensed Software. In some cases, +access to Third Party Software may be included in the Licensed Software. Such +Third Party Software will be listed in the ".../src/3rdparty" source tree +delivered with the Licensed Software or documented in the Licensed Software, as +such may be amended from time to time. Licensee acknowledges that use or +distribution of Third Party Software is in all respects subject to applicable +license terms of applicable third party right holders. + +5. PRE-RELEASE CODE + +The Licensed Software may contain pre-release code and functionality marked or +otherwise stated as “Technology Preview”, “Alpha”, “Beta” or similar +designation. Such pre-release code may be present in order to provide +experimental support for new platforms or preliminary versions of one or more +new functionalities. The pre-release code may not be at the level of +performance and compatibility of a final, generally available, product +offering of the Licensed Software. The pre-release parts of the Licensed +Software may not operate correctly, may contain errors and may be substantially +modified by The Qt Company prior to the first commercial product release, if +any. The Qt Company is under no obligation to make pre-release code +commercially available, or provide any Support or Updates relating thereto. The +Qt Company assumes no liability whatsoever regarding any pre-release code, but +any use thereof is exclusively at Licensee’s own risk and expense. + +6. LIMITED WARRANTY AND WARRANTY DISCLAIMER + +The Qt Company hereby represents and warrants that it has the power and +authority to grant the rights and licenses granted to Licensee under this +Agreement. + +Except as set forth above, the Licensed Software is licensed to Licensee +"as is" and Licensee’s exclusive remedy and The Qt Company’s entire liability +for errors in the Licensed Software shall be limited, at The Qt Company’s +option, to correction of the error, replacement of the Licensed Software or +return of the applicable fees paid for the defective Licensed Software for the +time period during which the License is not able to utilize the Licensed +Software under the terms of this Agreement. + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF +ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL OTHER +WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON- +INFRINGEMENT WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES NOT +WARRANT THAT THE LICENSED SOFTWARE WILL SATISFY LICENSEE’S REQUIREMENTS OR THAT +IT WILL OPERATE WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE +UNINTERRUPTED. ALL USE OF AND RELIANCE ON THE LICENSED SOFTWARE IS AT THE SOLE +RISK OF AND RESPONSIBILITY OF LICENSEE. + +7. INDEMNIFICATION AND LIMITATION OF LIABILITY + +7.1 Limitation of Liability + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER PARTY FOR ANY LOSS OF PROFIT, +LOSS OF DATA, LOSS OF BUSINESS OR GOODWILL OR ANY OTHER INDIRECT, SPECIAL, +CONSEQUENTIAL, INCIDENTAL OR PUNITIVE COST, DAMAGES OR EXPENSE OF ANY KIND, +HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THIS AGREEMENT. PARTIES +SPECIFICALLY AGREE THAT LICENSEE’S OBLIGATION TO PAY LICENSE AND OTHER FEES +CORRESPONDING TO ACTUAL USAGE OF LICENSED SOFTWARE HEREUNDER SHALL BE +CONSIDERED AS A DIRECT DAMAGE. + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL EITHER PARTY’S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT +EXCEED THE AGGREGATE LICENSE FEES PAID OR PAYABLE TO THE QT COMPANY FROM +LICENSEE DURING THE PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE +EVENT RESULTING IN SUCH LIABILITY. + +THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE RISKS UNDER THIS AGREEMENT +BETWEEN THE QT COMPANY AND LICENSEE AND THE PARTIES HAVE RELIED UPON THE +LIMITATIONS SET FORTH HEREIN IN DETERMINING WHETHER TO ENTER INTO THIS AGREEMENT. + +7.2 Licensee´s Indemnification + +Licensee shall indemnify and hold harmless The Qt Company from and against any +claim, injury, judgment, settlement, loss or expense, including attorneys' fees +related to: (a) Licensee’s misrepresentation in connection with The Qt Company +or the Licensed Software or breach of this Agreement, (b) the Application or +Device (except where such cause of liability is solely attributable to the +Licensed Software). + +8. SUPPORT, UPDATES AND ONLINE SERVICES + +Upon due payment of the agreed License Fees the Licensee will be eligible to +receive Support and Updates and to use the Online Services during the License +Term, provided, however, that in the event the License Term is longer than 36 +months, Support is provided only for the first 12 months, unless the Parties +specifically otherwise agree. + +Unless otherwise decided by The Company at its free and absolute discretion, +Upgrades will not be included in the Support but may be available subject to +additional fees. + +From time to time The Qt Company may change the Support terms, provided that +during the respective ongoing License Term the level of Support provided by The +Qt Company may not be reduced without the consent of the Licensee. + +Unless otherwise agreed, The Qt Company shall not be responsible for providing +any service or support to Customers. + +9. CONFIDENTIALITY + +Each Party acknowledges that during the Term of this Agreement each Party may +receive information about the other Party's business, business methods, +business plans, customers, business relations, technology, and other +information, including the terms of this Agreement, that is confidential and +of great value to the other Party, and the value of which would be +significantly reduced if disclosed to third parties (“Confidential +Information”). Accordingly, when a Party (the “Receiving Party”) receives +Confidential Information from the other Party (the “Disclosing Party”), the +Receiving Party shall only disclose such information to employees and +Contractors on a need to know basis, and shall cause its employees and +employees of its Affiliates to: (i) maintain any and all Confidential +Information in confidence; (ii) not disclose the Confidential Information to a +third party without the Disclosing Party's prior written approval; and (iii) +not, directly or indirectly, use the Confidential Information for any purpose +other than for exercising its rights and fulfilling its responsibilities +pursuant to this Agreement. Each Party shall take reasonable measures to +protect the Confidential Information of the other Party, which measures shall +not be less than the measures taken by such Party to protect its own +confidential and proprietary information. + +Obligation of confidentiality shall not apply to information that (i) is or +becomes generally known to the public through no act or omission of the +Receiving Party; (ii) was in the Receiving Party's lawful possession prior to +the disclosure hereunder and was not subject to limitations on disclosure or +use; (iii) is developed independently by employees or Contractors of the +Receiving Party or other persons working for the Receiving Party who have not +had access to the Confidential Information of the Disclosing Party, as proven +by the written records of the Receiving Party; (iv) is lawfully disclosed to +the Receiving Party without restrictions, by a third party not under an +obligation of confidentiality; or (v) the Receiving Party is legally compelled +to disclose, in which case the Receiving Party shall notify the Disclosing +Party of such compelled disclosure and assert the privileged and confidential +nature of the information and cooperate fully with the Disclosing Party to +limit the scope of disclosure and the dissemination of disclosed Confidential +Information to the minimum extent necessary. + +The obligations under this Section 9 shall continue to remain in force for a +period of five (5) years after the last disclosure, and, with respect to trade +secrets, for so long as such trade secrets are protected under applicable trade +secret laws. + +10. FEES, DELIVERY AND PAYMENT + +10.1 License Fees + +License Fees are described in The Qt Company’s standard price list, quote or +Purchase Order confirmation or in an appendix hereto, as the case may be. + +The License Fees shall not be refunded or claimed as a credit in any event or +for any reason whatsoever. + +10.2 Ordering Licenses + +Licensee may purchase Development Licenses and Distribution Licenses pursuant +to agreed pricing terms or, if no specific pricing terms have been agreed upon, +at The Qt Company's standard pricing terms applicable at the time of purchase. + +Licensee shall submit all purchase orders for Development Licenses and +Distribution Licenses to The Qt Company by email or any other method acceptable +to The Qt Company (each such order is referred to herein as a “Purchase Order”) +for confirmation, whereupon the Purchase Order shall become binding between the +Parties. + +10.3 Distribution License Packs + +Unless otherwise agreed, Distribution Licenses shall be purchased by way of +Distribution License Packs. + +Upon due payment of the ordered Distribution License Pack(s), the Licensee will +have an account of Distribution Licenses available for installing, bundling or +integrating (all jointly “installing”) the Redistributables with the Devices or +for otherwise distributing the Redistributables in accordance with this +Agreement. + +Each time Licensee “installs” or distributes a copy of Redistributables, then +one Distribution License is used, and Licensee’s account of available +Distribution Licenses is decreased accordingly. + +Licensee may “install” copies of the Redistributables so long as Licensee has +Distribution Licenses remaining on its account. + +Redistributables will be deemed to have been “installed” into a Device when one +of the following circumstances shall have occurred: a) the Redistributables +have been loaded onto the Device and used outside of the Licensee’s premises or +b) the Device has been fully tested and placed into Licensee's inventory +(or sold) for the first time (i.e., Licensee will not be required to use +(or pay for) more than one Distribution License for each individual Device, +e.g. in a situation where a Device is returned to Licensee's inventory after +delivery to a distributor or sale to a Customer). In addition, if Licensee +includes a back-up copy of the Redistributables on a CD-ROM or other storage +medium along with the product, that backup copy of the Redistributables will +not be deemed to have been “installed” and will not require an additional +Distribution License. + +10.4 Payment Terms + +License Fees and any other charges under this Agreement shall be paid by +Licensee no later than thirty (30) days from the date of the applicable invoice +from The Qt Company. + +The Qt Company will submit an invoice to Licensee after the date of this +Agreement and/or after The Qt Company receives a Purchase Order from +Licensee. + +A late payment charge of the lower of (a) one percent per month; or (b) the +interest rate stipulated by applicable law, shall be charged on any unpaid +balances that remain past due. + +The Qt Company shall have the right to suspend, terminate or withhold grants +of all rights to the Licensed Software hereunder, including but not limited to +the Developer License, Distribution License, and Support, should Licensee fail +to make payment in timely fashion. + +10.5 Taxes + +All License Fees and other charges payable hereunder are gross amounts but +exclusive of any value added tax, use tax, sales tax and other taxes, duties or +tariffs (“Taxes”). Such applicable Taxes shall be paid by Licensee, or, where +applicable, in lieu of payment of such Taxes, Licensee shall provide an +exemption certificate to The Qt Company and any applicable authority. + +11 RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS + +11.1 Licensee’s Record-keeping + +Licensee shall at all times maintain accurate and up-to-date written records of +Licensee’s activities related to the use of Licensed Software and distribution +of Redistributables. The records shall be adequate to determine Licensee’s +compliance with the provisions of this Agreement and to demonstrate the number +of Designated Users and Redistributables distributed by Licensee. The records +shall conform to good accounting practices reasonably acceptable to The Qt +Company. + +Licensee shall, within thirty (30) days from receiving The Qt Company’s request +to that effect, deliver to The Qt Company a report on Licensee’s usage of +Licensed Software, such report to copies of Redistributables distributed by +Licensee during that calendar quarter, and also detailing the number of +undistributed copies of Redistributables made by Licensee and remaining in its +account contain information, in sufficient detail, on (i) amount of users +working with Licensed Software, (ii) copies of Redistributables distributed by +Licensee during that calendar quarter, (iii) number of undistributed copies of +Redistributables and corresponding number of unused Distribution Licenses +remaining on Licensee’s account, and (iv) any other information as The Qt +Company may reasonably require from time to time. + +11.2. The Qt Company’s Audit Rights + +The Qt Company or an independent auditor acting on behalf of The Qt Company’s, +may, upon at least five (5) business days’ prior written notice and at its +expense, audit Licensee with respect to the use of the Redistributables, but +not more frequently than once during each 6-month period. Such audit may be +conducted by mail, electronic means or through an in-person visit to Licensee’s +place of business. Any such in-person audit shall be conducted during regular +business hours at Licensee's facilities and shall not unreasonably interfere +with Licensee's business activities. The Qt Company or the independent auditor +acting on behalf of The Qt Company shall be entitled to inspect Licensee’s +Records. All such Licensee’s Records and use thereof shall be subject to an +obligation of confidentiality under this Agreement. + +If an audit reveals that Licensee is using the Licensed Software beyond scope +of the licenses Licensee has paid for, Licensee agrees to immediately pay The +Qt Company any amounts owed for such unauthorized use. + +In addition, in the event the audit reveals a material violation of the terms +of this Agreement (underpayment of more than 5% of License Fees shall always be +deemed a material violation for purposes of this section), then the Licensee +shall pay The Qt Company's reasonable cost of conducting such audit. + +12 TERM AND TERMINATION + +12.1 Term + +This Agreement shall enter into force upon due acceptance by both Parties and +remain in force for as long as there is any Development License(s) in force +(“Term”), unless and until terminated pursuant to the terms of this Section 12. + +12.2 Termination by The Qt Company + +The Qt Company shall have the right to terminate this Agreement upon thirty +(30) days prior written notice if the Licensee is in material breach of any +obligation of this Agreement and fails to remedy such breach within such notice +period. + +12.3 Mutual Right to Terminate + +Either Party shall have the right to terminate this Agreement immediately upon +written notice in the event that the other Party becomes insolvent, files for +any form of bankruptcy, makes any assignment for the benefit of creditors, has +a receiver, administrative receiver or officer appointed over the whole or a +substantial part of its assets, ceases to conduct business, or an act +equivalent to any of the above occurs under the laws of the jurisdiction of the +other Party. + +12.4 Parties´ Rights and Duties upon Termination + +Upon expiry or termination of the Agreement Licensee shall cease and shall +cause all Designated Users (including those of its Affiliates’ and +Contractors’) to cease using the Licensed Software and distribution of the +Redistributables under this Agreement. + +Notwithstanding the above, in the event the Agreement expires or is terminated: + +(i) as a result of The Qt Company choosing not to renew the Development +License(s) as set forth in Section 3.1, then all valid licenses possessed by +the Licensee at such date shall be extended to be valid in perpetuity under the +terms of this Agreement and Licensee is entitled to purchase additional +licenses as set forth in Section 10.2; or + +(ii) for reason other than by The Qt Company pursuant to item (i) above or +pursuant to Section 12.2, then the Licensee is entitled, for a period of six +(6) months after the effective date of termination, to continue distribution of +Devices under the Distribution Licenses paid but unused at such effective date +of termination. + +Upon any such termination the Licensee shall destroy or return to The Qt +Company all copies of the Licensed Software and all related materials and will +certify the same to The Qt Company upon its request, provided however that +Licensee may retain and exploit such copies of the Licensed Software as it may +reasonably require in providing continued support to Customers. + +Expiry or termination of this Agreement for any reason whatsoever shall not +relieve Licensee of its obligation to pay any License Fees accrued or payable +to The Qt Company prior to the effective date of termination, and Licensee +shall immediately pay to The Qt Company all such fees upon the effective date +of termination. Termination of this Agreement shall not affect any rights of +Customers to continue use of Applications and Devices (and therein incorporated +Redistributables). + +12.5 Extension in case of bankruptcy + +In the event The Qt Company is declared bankrupt under a final, non-cancellable +decision by relevant court of law, and this Agreement is not, at the date of +expiry of the Development License(s) pursuant to Section 3.1, assigned to +party, who has assumed The Qt Company’s position as a legitimate licensor of +Licensed Software under this Agreement, then all valid licenses possessed by +the Licensee at such date of expiry, and which the Licensee has not notified +for expiry, shall be extended to be valid in perpetuity under the terms of +this Agreement. + +13. GOVERNING LAW AND LEGAL VENUE + +In the event this Agreement is in the name of The Qt Company Inc., a Delaware +Corporation, then: + +(i) this Agreement shall be construed and interpreted in accordance with the +laws of the State of California, USA, excluding its choice of law provisions; + +(ii) the United Nations Convention on Contracts for the International Sale of +Goods will not apply to this Agreement; and + +(iii) any dispute, claim or controversy arising out of or relating to this +Agreement or the breach, termination, enforcement, interpretation or validity +thereof, including the determination of the scope or applicability of this +Agreement to arbitrate, shall be determined by arbitration in San Francisco, +USA, before one arbitrator. The arbitration shall be administered by JAMS +pursuant to JAMS' Streamlined Arbitration Rules and Procedures. Judgment on the +Award may be entered in any court having jurisdiction. This Section shall not +preclude parties from seeking provisional remedies in aid of arbitration from a +court of appropriate jurisdiction. + +In the event this Agreement is in the name of The Qt Company Ltd., a Finnish +Company, then: + +(i) this Agreement shall be construed and interpreted in accordance with the +laws of Finland, excluding its choice of law provisions; + +(ii) the United Nations Convention on Contracts for the International Sale of +Goods will not apply to this Agreement; and + +(iii) any disputes, controversy or claim arising out of or relating to this +Agreement, or the breach, termination or validity thereof shall be shall be +finally settled by arbitration in accordance with the Arbitration Rules of +Finland Chamber of Commerce. The arbitration tribunal shall consist of one (1), +or if either Party so requires, of three (3), arbitrators. The award shall be +final and binding and enforceable in any court of competent jurisdiction. The +arbitration shall be held in Helsinki, Finland and the process shall be +conducted in the English language. This Section shall not preclude parties from +seeking provisional remedies in aid of arbitration from a court of appropriate +jurisdiction. + +14. GENERAL PROVISIONS + +14.1 No Assignment + +Except in the case of a merger or sale of substantially all of its corporate +assets, Licensee shall not be entitled to assign or transfer all or any of its +rights, benefits and obligations under this Agreement without the prior written +consent of The Qt Company, which shall not be unreasonably withheld or delayed. +The Qt Company shall be entitled to freely assign or transfer any of its +rights, benefits or obligations under this Agreement. + +14.2 No Third Party Representations + +Licensee shall make no representations or warranties concerning the Licensed +Software on behalf of The Qt Company. Any representation or warranty Licensee +makes or purports to make on The Qt Company’s behalf shall be void as to The +Qt Company. + +14.3 Surviving Sections + +Any terms and conditions that by their nature or otherwise reasonably should +survive termination of this Agreement shall so be deemed to survive. + +14.4 Entire Agreement + +This Agreement, the exhibits hereto, the License Certificate and any applicable +Purchase Order constitute the complete agreement between the Parties and +supersedes all prior or contemporaneous discussions, representations, and +proposals, written or oral, with respect to the subject matters discussed +herein. + +In the event of any conflict or inconsistency between this Agreement and any +Purchase Order, the terms of this Agreement will prevail over the terms of the +Purchase Order with respect to such conflict or inconsistency. + +Parties specifically acknowledge and agree that this Agreement prevails over +any click-to-accept or similar agreements the Designated Users may need to +accept online upon download of the Licensed Software, as may be required by +The Qt Company’s applicable processes relating to Licensed Software. + +14.5 Modifications + +No modification of this Agreement shall be effective unless contained in a +writing executed by an authorized representative of each Party. No term or +condition contained in Licensee's Purchase Order shall apply unless expressly +accepted by The Qt Company in writing. + +14.6 Force Majeure + +Except for the payment obligations hereunder, neither Party shall be liable to +the other for any delay or non-performance of its obligations hereunder in the +event and to the extent that such delay or non-performance is due to an event +of act of God, terrorist attack or other similar unforeseeable catastrophic +event that prevents either Party for fulfilling its obligations under this +Agreement and which such Party cannot avoid or circumvent (“Force Majeure +Event”). If the Force Majeure Event results in a delay or non-performance of a +Party for a period of three (3) months or longer, then either Party shall have +the right to terminate this Agreement with immediate effect without any +liability (except for the obligations of payment arising prior to the event of +Force Majeure) towards the other Party. + +14.7 Notices + +Any notice given by one Party to the other shall be deemed properly given and +deemed received if specifically acknowledged by the receiving Party in writing +or when successfully delivered to the recipient by hand, fax, or special +courier during normal business hours on a business day to the addresses +specified for each Party on the signature page. Each communication and document +made or delivered by one Party to the other Party pursuant to this Agreement +shall be in the English language. + +14.8 Export Control + +Licensee acknowledges that the Redistributables may be subject to export +control restrictions under the applicable laws of respective countries. +Licensee shall fully comply with all applicable export license restrictions +and requirements as well as with all laws and regulations relating to the +Redistributables and exercise of licenses hereunder and shall procure all +necessary governmental authorizations, including without limitation, all +necessary licenses, approvals, permissions or consents, where necessary for the +re-exportation of the Redistributables, Applications and/or Devices. + +14.9 No Implied License + +There are no implied licenses or other implied rights granted under this +Agreement, and all rights, save for those expressly granted hereunder, shall +remain with The Qt Company and its licensors. In addition, no licenses or +immunities are granted to the combination of the Licensed Software with any +other software or hardware not delivered by The Qt Company under this Agreement. + +14.10 Attorney Fees + +The prevailing Party in any action to enforce this Agreement shall be entitled +to recover its attorney’s fees and costs in connection with such action. + +14.11 Severability + +If any provision of this Agreement shall be adjudged by any court of competent +jurisdiction to be unenforceable or invalid, that provision shall be limited or +eliminated to the minimum extent necessary so that this Agreement shall +otherwise remain in full force and effect and enforceable. + + +IN WITNESS WHEREOF, the Parties hereto, intending to be legally bound hereby, +have caused this Agreement to be executed by Licensee's authorized +representative installing the Licensed Software and accepting the terms +hereof in connection therewith. + + +Appendix 1 + +1. Parts of the Licensed Software that are permitted for distribution in +object code form only (“Redistributables”) under this Agreement: + +- The Licensed Software's Qt Essentials and Qt Add-on libraries +- The Licensed Software's configuration tool (“qtconfig”) +- The Licensed Software's help tool (“Qt Assistant”) +- The Licensed Software's internationalization tools (“Qt Linguist”, “lupdate”, +“lrelease”) +- The Licensed Software's QML (“Qt Quick”) launcher tool (“qmlscene” or +“qmlviewer”) +- The Licensed Software's installer framework + +2. Parts of the Licensed Software that are not permitted for distribution +include, but are not limited to: + +- The Licensed Software's source code and header files +- The Licensed Software's documentation +- The Licensed Software’s documentation generation tool (“qdoc”) +- The Licensed Software's tool for writing makefiles (“qmake”) +- The Licensed Software's Meta Object Compiler (“moc”) +- The Licensed Software's User Interface Compiler (“uic”) +- The Licensed Software's Resource Compiler (“rcc”) +- The Licensed Software's parts of the IDE tool (“Qt Creator”) +- The Licensed Software’s parts of the Design tools (“Qt 3D Studio” or “Qt +Quick Designer”) +- The Licensed Software's Emulator diff --git a/.QT-FOR-AUTOMATION-LICENSE-AGREEMENT b/.QT-FOR-AUTOMATION-LICENSE-AGREEMENT new file mode 100644 index 0000000..0a1381e --- /dev/null +++ b/.QT-FOR-AUTOMATION-LICENSE-AGREEMENT @@ -0,0 +1,812 @@ +QT FOR AUTOMATION LICENSE AGREEMENT +Agreement version 3.0 + +This Qt for Automation License Agreement ("Agreement") is a legal agreement +between The Qt Company (as defined below) and the Licensee (as defined below) +for the license of Licensed Software (as defined below). Capitalized terms used +herein are defined in Section 1. + +WHEREAS: + +(A) Licensee wishes to use the Licensed Software for the purpose of developing +and distributing Applications and/or Devices; and +(B) The Qt Company is willing to grant the Licensee a right to use Licensed +Software for such purpose pursuant to term and conditions of this Agreement. + +NOW, THEREFORE, THE PARTIES HEREBY AGREE AS FOLLOWS: + +1. DEFINITIONS + +"Affiliate" of a Party shall mean an entity (i) which is directly or indirectly +controlling such Party; (ii) which is under the same direct or indirect +ownership or control as such Party; or (iii) which is directly or indirectly +owned or controlled by such Party. For these purposes, an entity shall be +treated as being controlled by another if that other entity has fifty percent +(50 %) or more of the votes in such entity, is able to direct its affairs and/or +to control the composition of its board of directors or equivalent body. + +"Applications" shall mean Licensee's software products created using the +Licensed Software, which may include the Redistributables, or part thereof. + +"Contractor(s)" shall mean third party consultants, distributors and contractors +performing services to a Party under applicable contractual arrangement. + +"Customer(s)" shall mean Licensee's end users to whom Licensee, directly or +indirectly, distributes copies of the Redistributables. + +"Deployment Platforms" shall mean operating systems specified in the License +Certificate, in which the Redistributables can be distributed pursuant to the +terms and conditions of this Agreement. + +"Designated User(s)" shall mean the employee(s) of Licensee or Licensee's +Affiliates acting within the scope of their employment or Licensee's +Contractors acting within the scope of their services for Licensee and on behalf +of Licensee. Designated Users shall be named in the License Certificate. + +"Development License" shall mean the license needed by the Licensee for each +Designated User to use the Licensed Software under the license grant described +in Section 3.1 of this Agreement. + +"Development Platforms" shall mean those operating systems specified in the +License Certificate, in which the Licensed Software can be used under the +Development License, but not distributed in any form or used for any other +purpose. + +"Devices" shall mean hardware devices or products that 1) are manufactured +and/or distributed by the Licensee or its Affiliates or Contractors, and (2)(i) +incorporate or integrate the Redistributables or parts thereof; or (ii) do not +incorporate or integrate the Redistributables at the time of distribution, but +where, when used by a Customer, the main user interface or substantial +functionality of such device is provided by Application(s) or otherwise depends +on the Licensed Software. + +"Distribution License(s)" shall mean the license required for distribution of +Redistributables in accordance with the license grant described in Section +3.2(ii)-(iii) of this Agreement. + +"Distribution License Packs" shall mean set of prepaid Distribution Licenses +for distribution of Redistributables, as defined in The Qt Company's standard +price list, quote, Purchase Order confirmation or in an appendix hereto, as the +case may be. + +"Initial Support Term" shall mean a time period of twelve (12) months, +calculated from the end of the Start-For-Free Term. In the event Term is set +for a shorter period than twelve (12) months, then Initial Support Term shall +be equal to the Term. + +"Intellectual +Property Rights" shall mean patents (including utility models), design patents, +and designs (whether or not capable of registration), chip topography rights and +other like protection, copyrights, trademarks, service marks, trade names, logos +or other words or symbols and any other form of statutory protection of any kind +and applications for any of the foregoing as well as any trade secrets. + +"Licensee" shall mean the individual or legal entity that is party to this +Agreement by accepting the terms hereof online in connection with installing the +Licensed Software. + +"License Certificate" shall mean a certificate accompanying the Licensed +Software and generated for each Designated User respectively. License +Certificate will specify the Designated User, the Development Platforms, +Deployment Platforms and the Term of this Agreement. The terms of the License +Certificate are considered part of this Agreement and shall be updated from time +to time to reflect any changes to the foregoing terms relating to Licensee's +rights to the Licensed Software. + +"Licensee's Records" shall mean books and records that are likely to contain +information bearing on Licensee's compliance with this Agreement or the payments +due to The Qt Company under this Agreement, including, but not limited to: +assembly logs, sales records and distribution records. + +"License Fee" shall mean the fee charged to the Licensee for rights +granted under the terms of this Agreement. + +"Licensed Software" shall mean all versions of The Qt Company's computer +software products, online or electronic documentation, associated media and +printed materials, including the source code, example programs and the +documentation, licensed to the Licensee under this Agreement. Licensed Software +does not include Third Party Software (as defined in Section 4) or Open Source +Qt. + +"Modified Software" shall mean bug-fixes, error corrections, patches or +modifications made to the Licensed Software by Licensee, including +documentation related thereto. + +"Online Services" shall mean any services or access to systems made available +by The Qt Company to the Licensee over the Internet relating to the Licensed +Software or for the purpose of use by the Licensee of the Licensed Software or +Support. Use of any such Online Services is discretionary for the Licensee and +some of them may be subject to additional fees. + +"Open Source Qt" shall mean all versions of The Qt Company's Qt computer +software products, online or electronic documentation, associated media and +printed materials, including the source code, example programs and the +documentation available under the terms of the GNU Lesser General Public +License, version 2.1 or later ("LGPL") or the GNU General Public License, +version 2.0 or later ("GPL"). + +"Party" or "Parties" shall mean Licensee and/or The Qt Company. + +"Redistributables" shall mean the portions of the Licensed Software set forth +in Appendix 1, Section 1 that may be distributed pursuant to the terms of this +Agreement in object code form only, including any relevant documentation. Where +relevant, any reference to Licensed Software in this Agreement shall include +and refer also to Redistributables. + +"Start-For-Free Term" shall mean the period of 30 days, or any such shorter +period as specified by The Qt Company, calculated from the date the Licensed +Software was initially delivered to the Licensee by The Qt Company. + +"Submitted Modified Software" shall have the meaning as set forth in Section +2.3. + +"Support" shall mean standard developer support that is provided by The Qt +Company to assist Designated Users in using the Licensed Software in accordance +with The Qt Company's standard support terms. + +"Support Renewal Term" shall mean a time period of twelve (12) months, or any +such other time period as agreed between the Parties, calculated from the end +of the Initial Support Term or previous Support Renewal Term, as applicable. + +"Support Term" shall mean the Initial Support Term and any possible +Support Renewal Terms(s) during which time the Licensee is eligible to receive +for Support for the Licensed Software. + +"Taxes" shall have the meaning set forth in Section 10.5. + +"Term" shall mean the validity period of this Agreement, as set +forth in the License Certificate. + +"The Qt Company" shall mean: +(i) in the event Licensee is an individual residing in the United States or a +legal entity incorporated in the United States or having its headquarters in +the United States, The Qt Company Inc., a Delaware corporation with its office +at 2350 Mission College Blvd., Suite 1020, Santa Clara, CA 95054, USA.; or +(ii) in the event the Licensee is an individual residing outside of the United +States or a legal entity incorporated outside of the United States or having its +registered office outside of the United States, The Qt Company Ltd., a Finnish +company with its registered office at Bertel Jungin aukio D3A, 02600 Espoo, +Finland. + +"Updates" shall mean a release or version of the Licensed Software containing +bug fixes, error corrections and other changes that are generally made available +to users of the Licensed Software that have contracted for Support. Updates are +generally depicted as a change to the digits following the decimal in the +Licensed Software version number. The Qt Company shall make Updates available to +the Licensee under the Support. Updates shall be considered as part of the +Licensed Software hereunder. + +"Upgrades" shall mean a release or version of the Licensed Software containing +enhancements and new features and are generally depicted as a change to the +first digit of the Licensed Software version number. In the event Upgrades are +provided to the Licensee under this Agreement, they shall be considered as part +of the Licensed Software hereunder. + +2. OWNERSHIP +2.1 Ownership of The Qt Company + +The Licensed Software is protected by copyright laws and international copyright +treaties, as well as other intellectual property laws and treaties. The Licensed +Software is licensed, not sold. + +All The Qt Company's Intellectual Property Rights are and shall remain the +exclusive property of The Qt Company or its licensors respectively. + +2.2 Ownership of Licensee + +All the Licensee's Intellectual Property Rights are and shall remain the +exclusive property of the Licensee or its licensors respectively. + +All Intellectual Property Rights to the Modified Software, Applications and +Devices shall remain with the Licensee and no rights thereto shall be granted by +the Licensee to The Qt Company under this Agreement (except as set forth in +Section 2.3 below). + +2.3 Modified Software + +Licensee may create Modified Software that breaks the source or binary +compatibility with the Licensed Software. This includes, but is not limited to, +changing the application programming interfaces ("API") by adding, changing or +deleting any variable, method, or class signature in the Licensed Software +and/or any inter-process protocols, services or standards in the Licensed +Software libraries. To the extent that Licensee breaks source or binary +compatibility with the Licensed Software, Licensee acknowledges that The Qt +Company's ability to provide Support may be prevented or limited and Licensee's +ability to make use of Updates may be restricted. + +To the extent Licensee submits Modified Software to The Qt Company ("Submitted +Modified Software"), Licensee hereby grants The Qt Company a sublicensable, +assignable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and +fully paid-up license, under all of Licensee's Intellectual Property Rights, to +reproduce, adapt, translate, modify, and prepare derivative works of, publicly +display, publicly perform, sublicense, make available and distribute such +Submitted Modified Software as The Qt Company sees fit at its free and absolute +discretion. For the sake of clarity, the Licensee shall have no obligation to +provide Modified Software to The Qt Company. + +3. LICENSES GRANTED +3.1 Development with Licensed Software + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non- exclusive, non-transferable license, valid for the +Term, to use, modify and copy the Licensed Software by Designated Users on the +Development Platforms for the sole purposes of designing, developing, +demonstrating and testing Application(s) and/or Devices, and to provide thereto +related support and other services to end-user Customers. + +Licensee may install copies of the Licensed Software on an unlimited number of +computers provided that (i) only the Designated Users may use the Licensed +Software, and (ii) all Designated Users must have a valid Development License to +use Licensed Software. + +Licensee may at any time designate another Designated User to replace a +then-current Designated User by notifying The Qt Company in writing, provided +that any Designated User may be replaced only once during any six-month period. + +3.2 Distribution of Redistributables + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non- exclusive, non-transferable license, valid for the +Term (excluding the Start-For-Free Term), to (i) distribute, by itself or +through its Contractors, Redistributables as installed, incorporated or +integrated into Applications for execution on the Deployment Platforms, and (ii) +distribute, by itself or through one or more tiers of Contractors, +Redistributables as installed, incorporated or integrated, or intended to be +installed, incorporated or integrated into Devices for execution on the +Deployment Platforms, and (iii) grant sublicenses to Redistributables, as +distributed hereunder, for Customers solely for Customer's internal use and to +the extent necessary in order for the Customers to use the Applications and/or +Devices for their respective intended purposes. + +Right to distribute the Redistributables as provided herein is conditional upon +the Licensee having purchased and paid the appropriate amount of Development and +Distribution Licenses from The Qt Company before distributing any +Redistributables to Customers. + +For the avoidance of any doubt it is specifically acknowledged and agreed that +distribution of Redistributables solely as installed, incorporated or integrated +into Applications for execution on the Deployment Platform(s), as specified in +(i) of the first paragraph of Section 3.2 above, i.e. with no connection to +Devices or intention to use in connection therewith, shall not require a +Distribution License. + +3.3 Further Requirements + +The licenses granted above in this Section 3 by The Qt Company to Licensee are +conditional and subject to Licensee's compliance with the following terms: + +(i) Licensee shall not remove or alter any copyright, trademark or other +proprietary rights notice contained in any portion of the Licensed Software; +(ii) Applications must add primary and substantial functionality to the Licensed +Software; +(iii) Applications may not pass on functionality which in any way +makes it possible for others to create software with the Licensed Software; +provided however that Licensee may use the Licensed Software's scripting and QML +("Qt Quick") functionality solely in order to enable scripting, themes and +styles that augment the functionality and appearance of the Application(s) +without adding primary and substantial functionality to the Application(s); +(iv) Applications must not compete with the Licensed Software; (v) Licensee +shall not use The Qt Company's or any of its suppliers' names, logos, or +trademarks to market Applications, except that Licensee may use "Built with Qt" +logo to indicate that Application(s) was developed using the Licensed Software; +(vi) Licensee shall not distribute, sublicense or disclose source code of +Licensed Software to any third party (provided however that Licensee may appoint +employee(s) of Contractors as Designated Users to use Licensed Software pursuant +to this Agreement). Such right may be available for the Licensee subject to a +separate software development kit ("SDK") license agreement to be concluded with +The Qt Company; +(vii) Licensee shall not grant the Customers a right to (i) make copies of the +Redistributables except when and to the extent required to use the +Applications and/or Devices for their intended purpose, (ii) modify the +Redistributables or create derivative works thereof, (iii) decompile, +disassemble or otherwise reverse engineer Redistributables, or (iv) redistribute +any copy or portion of the Redistributables to any third party, except as part +of the onward sale of the Device on which the Redistributables are installed; +(viii) Licensee shall not and shall cause that its Affiliates or Contractors +shall not a) in any way combine, incorporate or integrate Licensed Software +with, or use Licensed Software for creation of, any software created with or +incorporating Open Source Qt, or b) incorporate or integrate Applications into a +hardware device or product other than a Device, unless Licensee has received an +advance written permission from The Qt Company to do so. Absent such written +permission, any and all distribution by the Licensee during the Term of a +hardware device or product a) which incorporate or integrate any part of +Licensed Software or Open Source Qt; or b) where the main user interface or +substantial functionality is provided by software build with Licensed Software +or Open Source Qt or otherwise depends on the Licensed Software or Open Source +Qt, shall be considered as distribution under this Agreement and dependent on +compliance thereof (including but not limited to obligation to pay applicable +License Fees for such distribution); +(ix) Licensee shall cause all of its Affiliates and Contractors entitled to +make use of the licenses granted under this Agreement, to be contractually +bound to comply with the relevant terms of this Agreement and not to use the +Licensed Software beyond the terms hereof and for any purposes other than +operating within the scope of their services for Licensee. Licensee shall be +responsible for any and all actions and omissions of its Affiliates and +Contractors relating to the Licensed Software and use thereof (including but +not limited to payment of all applicable License Fees); +(x) Except when and to the extent explicitly provided in this Section 3, +Licensee shall not transfer, publish, disclose, display or otherwise make +available the Licensed Software; +(xi) Licensee shall not take any action inconsistent with The Qt Company's +Intellectual Property Rights; and (xii) Attempt or enlist a third party to +conduct or attempt to conduct any of the above. + +Above terms shall not be applicable if and to the extent they conflict with any +mandatory provisions of any applicable laws. + +Any use of Licensed Software beyond the provisions of this Agreement is strictly +prohibited and requires an additional license from The Qt Company. + +4. THIRD PARTY SOFTWARE + +The Licensed Software may provide links to third party libraries or code +(collectively "Third Party Software") to implement various functions. Third +Party Software does not comprise part of the Licensed Software. In some cases, +access to Third Party Software may be included in the Licensed Software. Such +Third Party Software will be listed in the ".../src/3rdparty" source tree +delivered with the Licensed Software or documented in the Licensed Software, as +such may be amended from time to time. Licensee acknowledges that use or +distribution of Third Party Software is in all respects subject to applicable +license terms of applicable third party right holders. + +5. PRE-RELEASE CODE + +The Licensed Software may contain pre-release code and functionality marked or +otherwise stated as "Technology Preview", "Alpha", "Beta" or similar +designation. Such pre-release code may be present in order to provide +experimental support for new platforms or preliminary versions of one or more +new functionalities. The pre-release code may not be at the level of performance +and compatibility of a final, generally available, product offering of the +Licensed Software. The pre-release parts of the Licensed Software may not +operate correctly, may contain errors and may be substantially modified by The +Qt Company prior to the first commercial product release, if any. The Qt Company +is under no obligation to make pre-release code commercially available, or +provide any Support or Updates relating thereto. The Qt Company assumes no +liability whatsoever regarding any pre-release code, but any use thereof is +exclusively at Licensee's own risk and expense. + +6. LIMITED WARRANTY AND WARRANTY DISCLAIMER + +The Qt Company hereby represents and warrants that it has the power and +authority to grant the rights and licenses granted to Licensee under this +Agreement. + +Except as set forth above, the Licensed Software is licensed to Licensee "as +is". + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF +ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL WARRANTIES, +EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT +WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES NOT WARRANT THAT THE +LICENSED SOFTWARE WILL SATISFY LICENSEE'S REQUIREMENTS OR THAT IT WILL OPERATE +WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE UNINTERRUPTED. ALL +USE OF AND RELIANCE ON THE LICENSED SOFTWARE IS AT THE SOLE RISK OF AND +RESPONSIBILITY OF LICENSEE. + +Licensee's exclusive remedy and The Qt Company's entire liability for Licensed +Software shall be limited, at The Qt Company's option, to correction of the +error, replacement of the Licensed Software or return of the applicable fees +paid for the defective Licensed Software for the time period during which the +License is not able to utilize the Licensed Software under the terms of this +Agreement. + +7. INDEMNIFICATION AND LIMITATION OF LIABILITY +7.1 Limitation of Liability + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, (II) +LICENSEE'S DUTY TO PAY ALL APPLICABLE LICENSE FEES AND COMPENSATIONS, AND (III) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER PARTY FOR ANY LOSS OF PROFIT, +LOSS OF DATA, LOSS OF BUSINESS OR GOODWILL OR ANY OTHER INDIRECT, SPECIAL, +CONSEQUENTIAL, INCIDENTAL OR PUNITIVE COST, DAMAGES OR EXPENSE OF ANY KIND, +HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THIS AGREEMENT. + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, (II) +LICENSEE'S DUTY TO PAY ALL APPLICABLE LICENSE FEES AND COMPENSATIONS, AND (III) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL EITHER PARTY'S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT EXCEED +THE AGGREGATE LICENSE FEES RECEIVED BY THE QT COMPANY FROM LICENSEE DURING THE +PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE EVENT RESULTING IN SUCH +LIABILITY. + +THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE RISKS UNDER THIS AGREEMENT BETWEEN +THE QT COMPANY AND LICENSEE AND THE PARTIES HAVE RELIED UPON THE LIMITATIONS SET +FORTH HEREIN IN DETERMINING WHETHER TO ENTER INTO THIS AGREEMENT. + +7.2 Licensee´s Indemnification Licensee shall indemnify and hold harmless The Qt +Company from and against any claim, injury, judgment, settlement, loss or +expense, including attorneys' fees related to: (a) Licensee's misrepresentation +in connection with The Qt Company or the Licensed Software or breach of this +Agreement, (b) the Application or Device (except where such cause of liability +is solely attributable to the Licensed Software). + +8. SUPPORT, UPDATES AND ONLINE SERVICES + +Licensee will be eligible to receive Support and Updates and to use the Online +Services during the Support Term. Unless otherwise decided by The Company at its +free and absolute discretion, Upgrades will not be included in the Support but +may be available subject to additional fees. + +Licenses granted under this Agreement shall include a prepaid Initial Support +Term. + +Initial Support Term shall be automatically extended to one or more Support +Renewal Term(s), unless and until either Party notifies the other Party in +writing that it does not wish to continue the Support, such notification to be +provided to the other Party no less than ninety (90) days before expiry of the +Initial Support Term or respective Support Renewal Term. During any such Support +Renewal Term Support shall be available subject to prices and terms agreed +between the Parties or, if no advance agreement exists, subject to The Qt +Company's standard pricing applicable at the commencement date of any such +Support Renewal Term. From time to time The Qt Company may change Support +provided within each Support plan; provided that during the respective Initial +Support Term or Support Renewal Term (as the case may be), the level of Support +provided by The Qt Company may not be reduced without the consent of the +Licensee. + +Unless otherwise agreed, The Qt Company shall not be responsible for providing +any service or support to the Customers. + +9. CONFIDENTIALITY + +Each Party acknowledges that during the Term of this Agreement each Party may +receive information about the other Party's business, business methods, business +plans, customers, business relations, technology, and other information, +including the terms of this Agreement, that is confidential and of great value +to the other Party, and the value of which would be significantly reduced if +disclosed to third parties ("Confidential Information"). Accordingly, when a +Party (the "Receiving Party") receives Confidential Information from the other +Party (the "Disclosing Party"), the Receiving Party shall only disclose such +information to employees and Contractors on a need to know basis, and shall +cause its employees and employees of its Affiliates to: (i) maintain any and all +Confidential Information in confidence; (ii) not disclose the Confidential +Information to a third party without the Disclosing Party's prior written +approval; and (iii) not, directly or indirectly, use the Confidential +Information for any purpose other than for exercising its rights and fulfilling +its responsibilities pursuant to this Agreement. Each Party shall take +reasonable measures to protect the Confidential Information of the other Party, +which measures shall not be less than the measures taken by such Party to +protect its own confidential and proprietary information. + +Obligation of confidentiality shall not apply to information that (i) is or +becomes generally known to the public through no act or omission of the +Receiving Party; (ii) was in the Receiving Party's lawful possession prior to +the disclosure hereunder and was not subject to limitations on disclosure or +use; (iii) is developed independently by employees or Contractors of the +Receiving Party or other persons working for the Receiving Party who have not +had access to the Confidential Information of the Disclosing Party, as proven by +the written records of the Receiving Party; (iv) is lawfully disclosed to the +Receiving Party without restrictions, by a third party not under an obligation +of confidentiality; or (v) the Receiving Party is legally compelled to disclose, +in which case the Receiving Party shall notify the Disclosing Party of such +compelled disclosure and assert the privileged and confidential nature of the +information and cooperate fully with the Disclosing Party to limit the scope of +disclosure and the dissemination of disclosed Confidential Information to the +minimum extent necessary. + +The obligations under this Section 9 shall continue to remain in force for a +period of five (5) years after the last disclosure, and, with respect to trade +secrets, for so long as such trade secrets are protected under applicable trade +secret laws. + +10. FEES, DELIVERY AND PAYMENT +10.1 License Fees + +License Fees are described in The Qt Company's standard price list, quote or +Purchase Order confirmation or in an appendix hereto, as the case may be. The +License Fees shall not be refunded or claimed as a credit, even on the ground +that Distribution Licenses are not used, i.e. Redistributables are not actually +distributed corresponding to the Distribution Licenses purchased, or for any +other reason. + +10.2 Ordering Licenses + +Licensee may purchase Development Licenses and Distribution Licenses pursuant to +agreed pricing terms or, if no specific pricing terms have been agreed upon, at +The Qt Company's standard pricing terms applicable at the time of purchase. +Licensee shall submit all purchase orders for Development Licenses and +Distribution Licenses to The Qt Company by email or any other method acceptable +to The Qt Company (each such order is referred to herein as a "Purchase Order") +for confirmation, whereupon the Purchase Order shall become binding between the +Parties. + +10.3 Distribution License Packs + +Unless otherwise agreed, the Distribution Licenses are bought by way of +Distribution License Packs. Upon due payment of the ordered Distribution License +Pack(s), the Licensee will have an account of Distribution Licenses available +for installing, bundling or integrating (all jointly "installing") the +Redistributables with the Devices or for otherwise distributing the +Redistributables in accordance with this Agreement. Each time Licensee +"installs" or distributes a copy of Redistributables, then one Distribution +License is used, and Licensee's account of available Distribution Licenses is +decreased accordingly. Licensee may "install" copies of the Redistributables so +long as Licensee has Distribution Licenses remaining on its account. +Redistributables will be deemed to have been "installed" into a Device when one +of the following circumstances shall have occurred: a) the Redistributables have +been loaded onto the Device and used outside of the Licensee's premises or b) +the Device has been fully tested and placed into Licensee's inventory (or sold) +for the first time (i.e., Licensee will not be required to use (or pay for) more +than one Distribution License for each individual Device, e.g. in a situation +where a Device is returned to Licensee's inventory after delivery to a +distributor or sale to a Customer). In addition, if Licensee includes a back-up +copy of the Redistributables on a CD-ROM or other storage medium along with the +product, that backup copy of the Redistributables will not be deemed to have +been "installed" and will not require an additional Distribution License. + +10.4 Payment Terms + +License Fees and any other charges under this Agreement shall be paid by +Licensee no later than thirty (30) days from the date of the applicable invoice +from The Qt Company. + +The Qt Company will submit an invoice to Licensee after the effective date of +this Agreement and/or after The Qt Company receives a Purchase Order from +Licensee. + +A late payment charge of the lower of (a) one percent per month; or (b) the +interest rate stipulated by applicable law, shall be charged on any unpaid +balances that remain past due. + +The Qt Company shall have the right to suspend, terminate or withhold grants of +all rights to the Licensed Software hereunder, including but not limited to the +Developer License, Distribution License, and Support, should Licensee fail to +make payment in a timely fashion. + +10.5 Taxes + +All License Fees and other charges payable hereunder are gross +amounts but exclusive of any value added tax, use tax, sales tax and other +taxes, duties or tariffs ("Taxes"). Such applicable Taxes shall be paid by +Licensee, or, where applicable, in lieu of payment of such Taxes, Licensee shall +provide an exemption certificate to The Qt Company and any applicable authority. + +11 RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS +11.1 Licensee's Record-keeping + +Licensee shall at all times maintain accurate and up-to-date written records of +Licensee's activities related to the use of Licensed Software and distribution +of Redistributables. The records shall be adequate to determine Licensee's +compliance with the provisions of this Agreement and to demonstrate the number +of Designated Users and Redistributables distributed by Licensee. The records +shall conform to good accounting practices reasonably acceptable to The Qt +Company. Licensee shall, within thirty (30) days from the end of each calendar +quarter, deliver to The Qt Company a report detailing the number of Designated +Users and copies of Redistributables distributed by Licensee during that +calendar quarter, and also detailing the number of undistributed copies of +Redistributables made by Licensee and remaining in its account (i.e., +undistributed copies for which Distribution Licenses have been or need to be +obtained from The Qt Company). Such report shall contain such other information +as The Qt Company shall reasonably require from time to time. + +11.2. The Qt Company's Audit Rights + +The Qt Company or an independent auditor acting on behalf of The Qt Company's, +may, upon at least five (5) business days' prior written notice and at its +expense, audit Licensee with respect to the use of the Redistributables, but not +more frequently than once during each 6-month period. Such audit may be +conducted by mail, electronic means or through an in-person visit to Licensee's +place of business. Any such in-person audit shall be conducted during regular +business hours at Licensee's facilities and shall not unreasonably interfere +with Licensee's business activities. The Qt Company or the independent auditor +acting on behalf of The Qt Company shall be entitled to inspect Licensee's +Records. All such Licensee's Records and use thereof shall be subject to an +obligation of confidentiality under this Agreement. + +If an audit reveals that Licensee is using the Licensed Software beyond scope of +the licenses Licensee has paid for, Licensee agrees to immediately pay The Qt +Company any amounts owed for such unauthorized use. + +In addition, in the event the audit reveals a material violation of the terms of +this Agreement (underpayment of more than 5% of License Fees shall always be +deemed a material violation for purposes of this section), then the Licensee +shall pay The Qt Company's reasonable cost of conducting such audit. + + + +12 TERM AND TERMINATION +12.1 Term + +This Agreement shall enter into force upon due acceptance by the Licensee and +remain in force for the Term, unless and until terminated pursuant to the terms +of this Section 12. + +12.2 Termination by The Qt Company + +The Qt Company shall have the right to terminate this Agreement upon thirty (30) +days prior written notice if (i) the Licensee is in material breach of any +obligation of this Agreement and fails to remedy such breach within such notice +period; (ii) or Licensee or any of its Affiliates bring a suit before any court +or administrative agency or otherwise assert a claim against The Qt Company's or +any of its Affiliates' Intellectual Property Rights or validity thereof. + + + +12.3 Mutual Right to Terminate + +Either Party shall have the right to terminate this Agreement immediately upon +written notice in the event that the other Party becomes insolvent, files for +any form of bankruptcy, makes any assignment for the benefit of creditors, has a +receiver, administrative receiver or officer appointed over the whole or a +substantial part of its assets, ceases to conduct business, or an act equivalent +to any of the above occurs under the laws of the jurisdiction of the other +Party. + +12.4 Parties´ Rights and Duties upon Termination + +Upon expiry or termination of the Agreement for any reason, Licensee shall, +within 30 days after such termination, cease and shall cause all Designated +Users (including those of its Affiliates' and Contractors') to cease using the +Licensed Software and distribution of the Redistributables under this Agreement. +Notwithstanding the above, in the event the Agreement expires or is terminated +for reason other than by The Qt Company pursuant to Section 12.2, the Licensee +is entitled, for a period of six (6) months after the effective date of +termination, to continue distribution of Devices under the Distribution Licenses +paid but unused at such effective date of termination. Upon any such termination +the Licensee shall destroy or return to The Qt Company all copies of the +Licensed Software and all related materials and will certify the same to The Qt +Company upon its request, provided however that Licensee may retain and exploit +such copies of the Licensed Software as it may reasonably require in providing +continued support to Customers. + +Expiry or termination of this Agreement for any reason whatsoever shall not +relieve Licensee of its obligation to pay any License Fees accrued or payable to +The Qt Company prior to the effective date of termination, and Licensee shall +immediately pay to The Qt Company all such fees upon the effective date of +termination. Termination of this Agreement shall not affect any rights of +Customers to continue use of Applications and Devices (and therein incorporated +Redistributables). + + + +13. GOVERNING LAW AND LEGAL VENUE + +In the event this Agreement is in the name of The Qt Company Inc., a Delaware +Corporation, then: +(i) this Agreement shall be construed and interpreted in accordance with +the laws of the State of California, USA, excluding its choice of law +provisions; +(ii) the United Nations Convention on Contracts for the International Sale of +Goods will not apply to this Agreement; and +(iii) any dispute, claim or controversy arising out of or relating to this +Agreement or the breach, termination, enforcement, interpretation or validity +thereof, including the determination of the scope or applicability of this +Agreement to arbitrate, shall be determined by arbitration in San Francisco, +USA, before one arbitrator. The arbitration shall be administered by JAMS +pursuant to JAMS' Streamlined Arbitration Rules and Procedures. Judgment on the +Award may be entered in any court having jurisdiction. This Section shall not +preclude parties from seeking provisional remedies in aid of arbitration from a +court of appropriate jurisdiction. + +In the event this Agreement is in the name of The Qt Company Ltd., a Finnish +Company, then: +(i) this Agreement shall be construed and interpreted in accordance with the +laws of Finland, excluding its choice of law provisions; +(ii) the United Nations Convention on Contracts for the International Sale of +Goods will not apply to this Agreement; and +(iii) any disputes, controversy or claim arising out of or relating to this +Agreement, or the breach, termination or validity thereof shall be shall be +finally settled by arbitration in accordance with the Arbitration Rules of +Finland Chamber of Commerce. The arbitration tribunal shall consist of one (1), +or if either Party so requires, of three (3), arbitrators. The award shall be +final and binding and enforceable in any court of competent jurisdiction. The +arbitration shall be held in Helsinki, Finland and the process shall be +conducted in the English language. This Section shall not preclude parties from +seeking provisional remedies in aid of arbitration from a court of appropriate +jurisdiction. + +14. GENERAL PROVISIONS +14.1 No Assignment + +Licensee shall not be entitled to assign or transfer all or any of its rights, +benefits and obligations under this Agreement without the prior written consent +of The Qt Company, which shall not be unreasonably withheld or delayed. The Qt +Company shall be entitled to freely assign or transfer any of its rights, +benefits or obligations under this Agreement. + +14.2 No Third Party Representations + +Licensee shall make no representations or warranties concerning the Licensed +Software on behalf of The Qt Company. Any representation or warranty Licensee +makes or purports to make on The Qt Company's behalf shall be void as to The Qt +Company. + +14.3 Surviving Sections + +Any terms and conditions that by their nature or otherwise reasonably should +survive termination of this Agreement shall so be deemed to survive. + +14.4 Entire Agreement + +This Agreement, the exhibits hereto, the License Certificate and any applicable +Purchase Order constitute the complete agreement between the Parties and +supersedes all prior or contemporaneous discussions, representations, and +proposals, written or oral, with respect to the subject matters discussed +herein. In the event of any conflict or inconsistency between this Agreement and +any Purchase Order, the terms of this Agreement will prevail over the terms of +the Purchase Order with respect to such conflict or inconsistency. + +14.5 Modifications + +No modification of this Agreement shall be effective unless contained in a +writing executed by an authorized representative of each Party. No term or +condition contained in Licensee's Purchase Order shall apply unless expressly +accepted by The Qt Company in writing. + +14.6 Force Majeure + +Except for the payment obligations hereunder, neither Party shall be liable to +the other for any delay or non-performance of its obligations hereunder in the +event and to the extent that such delay or non- performance is due to an event +of act of God, terrorist attack or other similar unforeseeable catastrophic +event that prevents either Party for fulfilling its obligations under this +Agreement and which such Party cannot avoid or circumvent ("Force Majeure +Event"). If the Force Majeure Event results in a delay or non- performance of a +Party for a period of three (3) months or longer, then either Party shall have +the right to terminate this Agreement with immediate effect without any +liability (except for the obligations of payment arising prior to the event of +Force Majeure) towards the other Party. + +14.7 Notices + +Any notice given by one Party to the other shall be deemed properly given and +deemed received if specifically acknowledged by the receiving Party in writing +or when successfully delivered to the recipient by hand, fax, or special courier +during normal business hours on a business day to the addresses specified for +The Qt Company in the beginning of this Agreement, and for the Licensee in the +Licensee's account profile. Each communication and document made or delivered by +one Party to the other Party pursuant to this Agreement shall be in the English +language. + + +14.8 Export Control + +Licensee acknowledges that the Redistributables may be subject to export control +restrictions under the applicable laws of respective countries. Licensee shall +fully comply with all applicable export license restrictions and requirements as +well as with all laws and regulations relating to the Redistributables and +exercise of licenses hereunder and shall procure all necessary governmental +authorizations, including without limitation, all necessary licenses, approvals, +permissions or consents, where necessary for the re- exportation of the +Redistributables, Applications and/or Devices. + +14.9 No Implied License + +There are no implied licenses or other implied rights granted under this +Agreement, and all rights, save for those expressly granted hereunder, shall +remain with The Qt Company and its licensors. In addition, no licenses or +immunities are granted to the combination of the Licensed Software with any +other software or hardware not delivered by The Qt Company under this Agreement. + +14.10 Attorney Fees + +The prevailing Party in any action to enforce this Agreement shall be entitled +to recover its attorney's fees and costs in connection with such action. + +14.11 Severability + +If any provision of this Agreement shall be adjudged by any court of competent +jurisdiction to be unenforceable or invalid, that provision shall be limited or +eliminated to the minimum extent necessary so that this Agreement shall +otherwise remain in full force and effect and enforceable. + + + +IN WITNESS WHEREOF, the Parties hereto, intending to be legally bound hereby, +have caused this Agreement to be executed by Licensee's authorized +representative installing the Licensed Software and accepting the terms hereof +in connection therewith. + +Appendix 1 + +1. Parts of the Licensed Software that are permitted for distribution in object +code form only ("Redistributables") under this Agreement: +- The Licensed Software's “Qt for Automation Modules”, as specified in the +relevant documentation. + +2. Parts of the Licensed Software that are not permitted for distribution +include, but are not limited to: +- No parts of the Licensed Software other than Redistributables are licensed to +the Licensee under this Agreement. + diff --git a/.QT-FOR-AUTOMOTIVE-LICENSE-AGREEMENT b/.QT-FOR-AUTOMOTIVE-LICENSE-AGREEMENT new file mode 100644 index 0000000..a2b9606 --- /dev/null +++ b/.QT-FOR-AUTOMOTIVE-LICENSE-AGREEMENT @@ -0,0 +1,894 @@ +QT AUTOMOTIVE SUITE LICENSE AGREEMENT +Agreement version 3.0 + +This Qt Automotive Suite License Agreement (“Agreement”) is a legal agreement +between The Qt Company (as defined below) and the Licensee (as defined below) +for the license of Licensed Software (as defined below). Capitalized terms used +herein are defined in Section 1. + +WHEREAS: + +(A) Licensee wishes to use the Licensed Software for the purpose of developing +and distributing Applications and/or Devices; and + +(B) The Qt Company is willing to grant the Licensee a right to use Licensed +Software for such purpose pursuant to term and conditions of this Agreement. + +NOW, THEREFORE, THE PARTIES HEREBY AGREE AS FOLLOWS: + +1. DEFINITIONS + +"Affiliate" of a Party shall mean an entity (i) which is directly or indirectly +controlling such Party; (ii) which is under the same direct or indirect +ownership or control as such Party; or (iii) which is directly or indirectly +owned or controlled by such Party. For these purposes, an entity shall be +treated as being controlled by another if that other entity has fifty percent +(50 %) or more of the votes in such entity, is able to direct its affairs and/or +to control the composition of its board of directors or equivalent body. + +"Applications" shall mean Licensee's software products created using the +Licensed Software in connection with the Program, which may include the +Redistributables, or part thereof. + +"Contractor(s)" shall mean third party consultants, distributors and contractors +performing services to a Party under applicable contractual arrangement. + +"Customer(s)" shall mean Licensee's end users to whom Licensee, directly or +indirectly, distributes copies of the Redistributables. + +"Deployment Platforms" shall mean operating systems specified in the License +Certificate, in which the Redistributables can be distributed pursuant to the +terms and conditions of this Agreement. + +"Designated User(s)" shall mean the employee(s) of Licensee or Licensee's +Affiliates acting within the scope of their employment or Licensee's +Contractors acting within the scope of their services for Licensee and on behalf +of Licensee. Designated Users shall be named in the License Certificate. + +"Development License" shall mean the license needed by the Licensee for each +Designated User to use the Licensed Software under the license grant described +in Section 3.1 of this Agreement. + +"Development Platforms" shall mean those operating systems specified in the +License Certificate, in which the Licensed Software can be used under the +Development License, but not distributed in any form or used for any other +purpose. + +"Devices" shall mean hardware devices or products that 1) are manufactured +and/or distributed by the Licensee or its Affiliates or Contractors in +connection with the Program, and (2)(i) incorporate or integrate the +Redistributables or parts thereof; or (ii) do not incorporate or integrate +the Redistributables at the time of distribution, but where, when used by a +Customer, the main user interface or substantial functionality of such +device is provided by Application(s) or otherwise depends on the Licensed +Software. + +"Distribution License(s)" shall mean the license required for distribution of +Redistributables in accordance with the license grant described in Section +3.2(ii)-(iii) of this Agreement. + +"Distribution License Packs" shall mean set of prepaid Distribution Licenses +for distribution of Redistributables, as defined in The Qt Company's standard +price list, quote, Purchase Order confirmation or in an appendix hereto, as the +case may be. + +"Initial Support Term" shall mean a time period of twelve (12) months, +calculated from the effective date of this Agreement. + +"Intellectual Property Rights" shall mean patents (including utility models), +design patents, and designs (whether or not capable of registration), chip +topography rights and other like protection, copyrights, trademarks, service +marks, trade names, logos or other words or symbols and any other form of +statutory protection of any kind and applications for any of the foregoing +as well as any trade secrets. +"Licensee" shall mean the individual or legal entity that is party to this +Agreement, as identified on the signature page hereof. + +"License Certificate" shall mean a certificate accompanying the Licensed +Software and generated for each Designated User respectively. License +Certificate will specify the Designated User, the Development Platforms, +Deployment Platforms, Program and the Term of this Agreement. The terms of the +License Certificate are considered part of this Agreement and shall be updated +from time to time to reflect any changes to the foregoing terms relating to +Licensee's rights to the Licensed Software. + +"Licensee's Records" shall mean books and records that are likely to contain +information bearing on Licensee's compliance with this Agreement or the payments +due to The Qt Company under this Agreement, including, but not limited to: +assembly logs, sales records and distribution records. + +"Licensee´s SDK Contractors" shall mean Contractors of Licensee, who have +purchased or received SDK from the Licensee relating to the Program. + +"License Fee" shall mean the fee charged to the Licensee for rights granted +under the terms of this Agreement. + +"Licensed Software" shall mean all versions of The Qt Company's computer +software products, online or electronic documentation, associated media and +printed materials, including the source code, example programs and the +documentation, licensed to the Licensee under this Agreement. Licensed Software +does not include Third Party Software (as defined in Section 4) or Open Source +Qt. + +"Modified Software" shall mean bug-fixes, error corrections, patches or +modifications made to the Licensed Software by Licensee, including documentation +related thereto. + +"Online Services" shall mean any services or access to systems made available +by The Qt Company to the Licensee over the Internet relating to the Licensed +Software or for the purpose of use by the Licensee of the Licensed Software or +Support. Use of any such Online Services is discretionary for the Licensee and +some of them may be subject to additional fees. + +"Open Source Qt" shall mean all versions of The Qt Company's Qt computer +software products, online or electronic documentation, associated media and +printed materials, including the source code, example programs and the +documentation available under the terms of the GNU Lesser General Public +License, version 2.1 or later ("LGPL") or the GNU General Public License, +version 2.0 or later ("GPL"). + +"Party" or "Parties" shall mean Licensee and/or The Qt Company. + +"Program" shall mean Licensee´s business program for which purpose the Licensee +is entitled to use the Licensed Software and grant the Licensee's SDK +Contractors a right to use the Licensed Software as part of a SDK. + +"Redistributables" shall mean the portions of the Licensed Software set forth +in Appendix 1, Section 1 that may be distributed pursuant to the terms of this +Agreement in object code form only, including any relevant documentation. Where +relevant, any reference to Licensed Software in this Agreement shall include and +refer also to Redistributables. + +"SDK" or "Software Development Kit" shall mean a combination of software modules +including Licensed Software intended to be utilized in connection with the +Program. + +"Submitted Modified Software" shall have the meaning as set forth in Section +2.3. + +"Support" shall mean standard developer support that is provided by +The Qt Company to assist Designated Users in using the Licensed Software in +accordance with The Qt Company's standard support terms. + +"Support Renewal Term" shall mean a time period of twelve (12) months, +calculated from the end of the Initial Support Term or previous Support Renewal +Term, as applicable. + +"Support Term" shall mean the Initial Support Term and any possible Support +Renewal Terms(s) during which time the Licensee is eligible to receive for +Support for the Licensed Software. + +"Taxes" shall have the meaning set forth in Section 10.5. + +"Term" shall mean the validity period of this Agreement, as set forth in the +License Certificate. + +“The Qt Company” shall mean: + +(i) in the event Licensee is an individual residing in the United States or a +legal entity incorporated in the United States or having its headquarters in the +United States, The Qt Company Inc., a Delaware corporation with its office at +2350 Mission College Blvd., Suite 1020, Santa Clara, CA 95054, USA.; or + +(ii) in the event the Licensee is an individual residing outside of the United +States or a legal entity incorporated outside of the United States or having its +registered office outside of the United States, The Qt Company Ltd., a Finnish +company with its registered office at Bertel Jungin aukio D3A, 02600 Espoo, +Finland. + +"Updates" shall mean a release or version of the Licensed Software containing +bug fixes, error corrections and other changes that are generally made available +to users of the Licensed Software that have contracted for Support. Updates are +generally depicted as a change to the digits following the decimal in the +Licensed Software version number. The Qt Company shall make Updates available to +the Licensee under the Support. Updates shall be considered as part of the +Licensed Software hereunder. + +"Upgrades" shall mean a release or version of the Licensed Software containing +enhancements and new features and are generally depicted as a change to the +first digit of the Licensed Software version number. In the event Upgrades are +provided to the Licensee under this Agreement, they shall be considered as part +of the Licensed Software hereunder. + +2. OWNERSHIP 2.1 + +Ownership of The Qt Company + +The Licensed Software is protected by copyright laws and international copyright +treaties, as well as other intellectual property laws and treaties. The Licensed +Software is licensed, not sold. + +All The Qt Company's Intellectual Property Rights are and shall remain the +exclusive property of The Qt Company or its licensors respectively. + +2.2 Ownership of Licensee + +All the Licensee's Intellectual Property Rights are and shall remain the +exclusive property of the Licensee or its licensors respectively. + +All Intellectual Property Rights to the Modified Software, Applications and +Devices shall remain with the Licensee and no rights thereto shall be granted by +the Licensee to The Qt Company under this Agreement (except as set forth in +Section 2.3 below). + +2.3 Modified Software + +Licensee may create Modified Software that breaks the source or binary +compatibility with the Licensed Software. This includes, but is not limited to, +changing the application programming interfaces ("API") by adding, changing or +deleting any variable, method, or class signature in the Licensed Software +and/or any inter-process protocols, services or standards in the Licensed +Software libraries. To the extent that Licensee breaks source or binary +compatibility with the Licensed Software, Licensee acknowledges that The Qt +Company's ability to provide Support may be prevented or limited and Licensee's +ability to make use of Updates may be restricted. + +To the extent Licensee submits Modified Software to The Qt Company ("Submitted +Modified Software"), Licensee hereby grants The Qt Company a sublicensable, +assignable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and +fully paid-up license, under all of Licensee's Intellectual Property Rights, to +reproduce, adapt, translate, modify, and prepare derivative works of, publicly +display, publicly perform, sublicense, make available and distribute such +Submitted Modified Software as The Qt Company sees fit at its free and absolute +discretion. For the sake of clarity, the Licensee shall have no obligation to +provide Modified Software to The Qt Company. + +3. LICENSES GRANTED + +3.1 Development with Licensed Software + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non- exclusive, non-transferable license, valid for the +Term, to use, modify and copy the Licensed Software by Designated Users on the +Development Platforms for the sole purposes of designing, developing, +demonstrating and testing Application(s) and/or Devices, and to provide thereto +related support and other services to end-user Customers. + +Licensee may install copies of the Licensed Software on an unlimited number of +computers provided that (i) only the Designated Users may use the Licensed +Software, and (ii) all Designated Users must have a valid Development License to +use Licensed Software. + +Licensee may at any time designate another Designated User to replace a +then-current Designated User by notifying The Qt Company in writing, provided +that any Designated User may be replaced only once during any six-month period. + +3.2 Distribution of Redistributables + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non- exclusive, non-transferable license, valid for the +Term, to (i) distribute, by itself or through its Contractors, Redistributables +as installed, incorporated or integrated into Applications for execution on the +Deployment Platforms, and (ii) distribute, by itself or through one or more +tiers of Contractors, Redistributables as installed, incorporated or integrated, +or intended to be installed, incorporated or integrated into Devices for +execution on the Deployment Platforms, and (iii) grant sublicenses to +Redistributables, as distributed hereunder, for Customers solely for Customer's +internal use and to the extent necessary in order for the Customers to use the +Applications and/or Devices for their respective intended purposes. + +Right to distribute the Redistributables as provided herein is conditional upon +the Licensee having purchased and paid the appropriate amount of Development and +Distribution Licenses from The Qt Company before distributing any +Redistributables to Customers. + +For the avoidance of any doubt it is specifically acknowledged and agreed that +distribution of Redistributables solely as installed, incorporated or integrated +into Applications for execution on the Deployment Platform(s), as specified in +(i) of the first paragraph of Section 3.2 above, i.e. with no connection to +Devices or intention to use in connection therewith, shall not require a +Distribution License. + +3.3 SDK License + +The Qt Company grants to Licensee a personal, worldwide, non-exclusive, +non-transferable license, valid for the Term, to (i) distribute Licensed +Software as a part of the SDK to Licensee´s SDK Contractors in connection with +the Program and (ii) in connection with the Program, by itself or by Licensee's +SDK Contractors, combine, incorporate or integrate Licensed Software with, or +use Licensed Software for creation of, any software created with or +incorporating Open Source Qt, provided, however, that: + +(i) the Licensee´s SDK Contractors are only entitled to use the Licensed +Software as part of SDK and for the sole purpose of developing software for +Devices that are distributed under the Program; and + +(ii) Licensee´s SDK Contractors shall not be entitled to distribute the SDK or +any part thereof to any third parties. + +For the avoidance of any doubt, the distribution of such software development +tools that do not contain Licensed Software shall not be covered by this +Agreement. + +3.4 Further Requirements + +The licenses granted above in this Section 3 by The Qt Company to Licensee are +conditional and subject to Licensee's compliance with the following terms: + +(i) Licensee shall not remove or alter any copyright, trademark or other +proprietary rights notice contained in any portion of the Licensed Software; + +(ii) Applications and SDKs must add primary and substantial functionality to the +Licensed Software; + +(iii) Applications may not pass on functionality which in any way makes it +possible for others to create software with the Licensed Software; provided +however that Licensee may use the Licensed Software's scripting and QML ("Qt +Quick") functionality solely in order to enable scripting, themes and styles +that augment the functionality and appearance of the Application(s) without +adding primary and substantial functionality to the Application(s); + +(iv) Applications and SDKs must not compete with the Licensed Software; + +(v) Licensee shall not use The Qt Company's or any of its suppliers' names, +logos, or trademarks to market Applications or SDKs, except that Licensee may +use "Built with Qt" logo to indicate that Application(s) was developed using +the Licensed Software; + +(vi) Except as expressly provided in Section 3.3, Licensee shall not +distribute, sublicense or disclose source code of Licensed Software to any third +party (provided however that Licensee may appoint employee(s) of Contractors as +Designated Users to use Licensed Software pursuant to this Agreement); + +(vii) Licensee shall not grant the Customers a right to (i) make copies of the +Redistributables except when and to the extent required to use the Applications +and/or Devices for their intended purpose, (ii) modify the Redistributables or +create derivative works thereof, (iii) decompile, disassemble or otherwise +reverse engineer Redistributables, or (iv) redistribute any copy or portion of +the Redistributables to any third party, except as part of the onward sale of +the Device on which the Redistributables are installed; + +(viii) Except as expressly provided in Section 3.3, Licensee shall not and +shall cause that its Affiliates, Contractors and Licensee's SDK Contractors +shall not a) in any way, combine, incorporate or integrate Licensed Software +with, or use Licensed Software for creation of, any software created with or +incorporating Open Source Qt or b) incorporate or integrate Applications into a +hardware device or product other than a Device, unless Licensee has received an +advance written permission from The Qt Company to do so. Unless specifically +otherwise agreed, any and all distribution by the Licensee during the Term of +a hardware device or product a) which incorporate or integrate any part of +Licensed Software or Open Source Qt; or b) where the main user interface or +substantial functionality is provided by software build with Licensed +Software or Open Source Qt or otherwise depends on the Licensed Software or Open +Open Source Qt, shall be considered as distribution under this Agreement and +dependent on compliance thereof (including but not limited to obligation to +pay applicable License Fees for such distribution); + +(ix) Licensee shall cause all of its Affiliates and Contractors entitled to make +use of the licenses granted under this Agreement, to be contractually bound to +comply with the relevant terms of this Agreement and not to use the Licensed +Software beyond the terms hereof and for any purposes other than operating +within the scope of their services for Licensee. Licensee shall be responsible +for any and all actions and omissions of its Affiliates and Contractors relating +to the Licensed Software and use thereof (including but not limited to payment +of all applicable License Fees); + +(x) Except when and to the extent explicitly provided in this Section 3, +Licensee shall not transfer, publish, disclose, display or otherwise make +available the Licensed Software; + +(xi) Licensee shall not take any action inconsistent with The Qt Company's +Intellectual Property Rights; and + +(xii) Attempt or enlist a third party to conduct or attempt to conduct any of +the above. + +Above terms shall not be applicable if and to the extent they conflict with any +mandatory provisions of any applicable laws. + +Any use of Licensed Software beyond the provisions of this Agreement is strictly +prohibited and requires an additional license from The Qt Company. + +4. THIRD PARTY SOFTWARE + +The Licensed Software may provide links to third party libraries or code +(collectively "Third Party Software") to implement various functions. Third +Party Software does not comprise part of the Licensed Software. In some cases, +access to Third Party Software may be included in the Licensed Software. Such +Third Party Software will be listed in the ".../src/3rdparty" source tree +delivered with the Licensed Software or documented in the Licensed Software, as +such may be amended from time to time. Licensee acknowledges that use or +distribution of Third Party Software is in all respects subject to applicable +license terms of applicable third party right holders. 5. PRE-RELEASE CODE + +The Licensed Software may contain pre-release code and functionality marked or +otherwise stated as "Technology Preview", "Alpha", "Beta" or similar +designation. Such pre-release code may be present in order to provide +experimental support for new platforms or preliminary versions of one or more +new functionalities. The pre-release code may not be at the level of performance +and compatibility of a final, generally available, product offering of the +Licensed Software. The pre-release parts of the Licensed Software may not +operate correctly, may contain errors and may be substantially modified by The +Qt Company prior to the first commercial product release, if any. The Qt Company +is under no obligation to make pre-release code commercially available, or +provide any Support or Updates relating thereto. The Qt Company assumes no +liability whatsoever regarding any pre-release code, but any use thereof is +exclusively at Licensee's own risk and expense. + +6. LIMITED WARRANTY AND WARRANTY DISCLAIMER + +The Qt Company hereby represents and warrants that it has the power and +authority to grant the rights and licenses granted to Licensee under this +Agreement. + +Except as set forth above, the Licensed Software is licensed to Licensee "as +is". + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF +ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL WARRANTIES, +EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT +WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES NOT WARRANT THAT THE +LICENSED SOFTWARE WILL SATISFY LICENSEE'S REQUIREMENTS OR THAT IT WILL OPERATE +WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE UNINTERRUPTED. ALL +USE OF AND RELIANCE ON THE LICENSED SOFTWARE IS AT THE SOLE RISK OF AND +RESPONSIBILITY OF LICENSEE. + +Licensee's exclusive remedy and The Qt Company's entire liability for Licensed +Software shall be limited, at The Qt Company's option, to correction of the +error, replacement of the Licensed Software or return of the applicable fees +paid for the defective Licensed Software for the time period during which the +License is not able to utilize the Licensed Software under the terms of this +Agreement. + +7. INDEMNIFICATION AND LIMITATION OF LIABILITY + +7.1 Limitation of Liability + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, (II) +LICENSEE'S DUTY TO PAY ALL APPLICABLE LICENSE FEES AND COMPENSATIONS, AND (III) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER PARTY FOR ANY LOSS OF PROFIT, +LOSS OF DATA, LOSS OF BUSINESS OR GOODWILL OR ANY OTHER INDIRECT, SPECIAL, +CONSEQUENTIAL, INCIDENTAL OR PUNITIVE COST, DAMAGES OR EXPENSE OF ANY KIND, +HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THIS AGREEMENT. + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, (II) +LICENSEE'S DUTY TO PAY ALL APPLICABLE LICENSE FEES AND COMPENSATIONS, AND (III) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL EITHER PARTY'S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT EXCEED +THE AGGREGATE LICENSE FEES RECEIVED BY THE QT COMPANY FROM LICENSEE DURING THE +PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE EVENT RESULTING IN SUCH +LIABILITY. + +THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE RISKS UNDER THIS AGREEMENT BETWEEN +THE QT COMPANY AND LICENSEE AND THE PARTIES HAVE RELIED UPON THE LIMITATIONS SET +FORTH HEREIN IN DETERMINING WHETHER TO ENTER INTO THIS AGREEMENT. + +7.2 Licensee´s Indemnification + +Licensee shall indemnify and hold harmless The Qt Company from and against any +claim, injury, judgment, settlement, loss or expense, including attorneys' fees +related to: (a) Licensee's misrepresentation in connection with The Qt Company +or the Licensed Software or breach of this Agreement, (b) the Application or +Device (except where such cause of liability is solely attributable to the +Licensed Software). + +8. SUPPORT, UPDATES AND ONLINE SERVICES + +Licensee will be eligible to receive Support and Updates and to use the Online +Services during the Support Term. Unless otherwise decided by The Company at its +free and absolute discretion, Upgrades will not be included in the Support but +may be available subject to additional fees. + +Licenses granted under this Agreement shall include a prepaid Initial Support +Term. + +Initial Support Term shall be automatically extended to one or more Support +Renewal Term(s), unless and until either Party notifies the other Party in +writing that it does not wish to continue the Support, such notification to be +provided to the other Party no less than ninety (90) days before expiry of the +Initial Support Term or respective Support Renewal Term. During any such Support +Renewal Term Support shall be available subject to prices and terms agreed +between the Parties or, if no advance agreement exists, subject to The Qt +Company's standard pricing applicable at the commencement date of any such +Support Renewal Term. From time to time The Qt Company may change Support +provided within each Support plan; provided that during the respective Initial +Support Term or Support Renewal Term (as the case may be), the level of Support +provided by The Qt Company may not be reduced without the consent of the +Licensee. + +Unless otherwise agreed, The Qt Company shall not be responsible for providing +any service or support to the Customers. + +9. CONFIDENTIALITY + +Each Party acknowledges that during the Term of this Agreement each Party may +receive information about the other Party's business, business methods, business +plans, customers, business relations, technology, and other information, +including the terms of this Agreement, that is confidential and of great value +to the other Party, and the value of which would be significantly reduced if +disclosed to third parties ("Confidential Information"). Accordingly, when a +Party (the "Receiving Party") receives Confidential Information from the other +Party (the "Disclosing Party"), the Receiving Party shall only disclose such +information to employees and Contractors on a need to know basis, and shall +cause its employees and employees of its Affiliates to: (i) maintain any and all +Confidential Information in confidence; (ii) not disclose the Confidential +Information to a third party without the Disclosing Party's prior written +approval; and (iii) not, directly or indirectly, use the Confidential +Information for any purpose other than for exercising its rights and fulfilling +its responsibilities pursuant to this Agreement. Each Party shall take +reasonable measures to protect the Confidential Information of the other Party, +which measures shall not be less than the measures taken by such Party to +protect its own confidential and proprietary information. + +Obligation of confidentiality shall not apply to information that (i) is or +becomes generally known to the public through no act or omission of the +Receiving Party; (ii) was in the Receiving Party's lawful possession prior to +the disclosure hereunder and was not subject to limitations on disclosure or +use; (iii) is developed independently by employees or Contractors of the +Receiving Party or other persons working for the Receiving Party who have not +had access to the Confidential Information of the Disclosing Party, as proven by +the written records of the Receiving Party; (iv) is lawfully disclosed to the +Receiving Party without restrictions, by a third party not under an obligation +of confidentiality; or (v) the Receiving Party is legally compelled to disclose, +in which case the Receiving Party shall notify the Disclosing Party of such +compelled disclosure and assert the privileged and confidential nature of the +information and cooperate fully with the Disclosing Party to limit the scope of +disclosure and the dissemination of disclosed Confidential Information to the +minimum extent necessary. + +The obligations under this Section 9 shall continue to remain in force for a +period of five (5) years after the last disclosure, and, with respect to trade +secrets, for so long as such trade secrets are protected under applicable trade +secret laws. + +10. FEES, DELIVERY AND PAYMENT + +10.1 License Fees + +License Fees are described in The Qt Company's standard price list, quote or +Purchase Order confirmation or in an appendix hereto, as the case may be. The +License Fees shall not be refunded or claimed as a credit, even on the ground +that Distribution Licenses are not used, i.e. Redistributables are not actually +distributed corresponding to the Distribution Licenses purchased, or for any +other reason. + +10.2 Ordering Licenses + +Licensee may purchase Development Licenses and Distribution Licenses pursuant to +agreed pricing terms or, if no specific pricing terms have been agreed upon, at +The Qt Company's standard pricing terms applicable at the time of purchase. + +Licensee shall submit all purchase orders for Development Licenses and +Distribution Licenses to The Qt Company by email or any other method acceptable +to The Qt Company (each such order is referred to herein as a "Purchase Order") +for confirmation, whereupon the Purchase Order shall become binding between the +Parties. + +10.3 Distribution + +License Packs Unless otherwise agreed, the Distribution Licenses are bought by +way of Distribution License Packs. + +Upon due payment of the ordered Distribution License Pack(s), the Licensee will +have an account of Distribution Licenses available for installing, bundling or +integrating (all jointly "installing") the Redistributables with the Devices or +for otherwise distributing the Redistributables in accordance with this +Agreement. + +Each time Licensee "installs" or distributes a copy of Redistributables, then +one Distribution License is used, and Licensee's account of available +Distribution Licenses is decreased accordingly. + +Licensee may "install" copies of the Redistributables so long as Licensee has +Distribution Licenses remaining on its account. + +Redistributables will be deemed to have been "installed" into a Device when one +of the following circumstances shall have occurred: a) the Redistributables +have been loaded onto the Device and used outside of the Licensee's premises or +b) the Device has been fully tested and placed into Licensee's inventory (or +sold) for the first time (i.e., Licensee will not be required to use (or pay +for) more than one Distribution License for each individual Device, e.g. in a +situation where a Device is returned to Licensee's inventory after delivery to +a distributor or sale to a Customer). In addition, if Licensee includes a +back-up copy of the Redistributables on a CD-ROM or other storage medium +along with the product, that backup copy of the Redistributables will not +be deemed to have been "installed" and will not require an additional +Distribution License. + +10.4 Payment Terms +License Fees and any other charges under this Agreement shall be paid by +Licensee no later than thirty (30) days from the date of the applicable invoice +from The Qt Company. + +The Qt Company will submit an invoice to Licensee after the date of this +Agreement and/or after The Qt Company receives a Purchase Order from Licensee. +A late payment charge of the lower of (a) one percent per month; or (b) the +interest rate stipulated by applicable law, shall be charged on any unpaid +balances that remain past due. + +The Qt Company shall have the right to suspend, terminate or withhold grants of +all rights to the Licensed Software hereunder, including but not limited to the +Developer License, Distribution License, and Support, should Licensee fail to +make payment in a timely fashion. + +10.5 Taxes +All License Fees and other charges payable hereunder are gross amounts but +exclusive of any value added tax, use tax, sales tax and other taxes, duties or +tariffs ("Taxes"). Such applicable Taxes shall be paid by Licensee, or, where +applicable, in lieu of payment of such Taxes, Licensee shall provide an +exemption certificate to The Qt Company and any applicable authority. + +11 RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS + +11.1 Licensee's Record-keeping + +Licensee shall at all times maintain accurate and up-to-date written records of +Licensee's activities related to the use of Licensed Software and distribution +of Redistributables. The records shall be adequate to determine Licensee's +compliance with the provisions of this Agreement and to demonstrate the number +of Designated Users and Redistributables distributed by Licensee. The records +shall conform to good accounting practices reasonably acceptable to The Qt +Company. + +Licensee shall, within thirty (30) days from the end of each calendar +quarter, deliver to The Qt Company a report detailing the number of Designated +Users and copies of Redistributables distributed by Licensee during that +calendar quarter, and also detailing the number of undistributed copies of +Redistributables made by Licensee and remaining in its account (i.e., +undistributed copies for which Distribution Licenses have been or need to be +obtained from The Qt Company). Such report shall contain such other information +as The Qt Company shall reasonably require from time to time. + +11.2. The Qt Company's Audit Rights + +The Qt Company or an independent auditor acting on behalf of The Qt Company's, +may, upon at least five (5) business days' prior written notice and at its +expense, audit Licensee with respect to the use of the Redistributables, but +not more frequently than once during each 6-month period. Such audit may be +conducted by mail, electronic means or through an in-person visit to +Licensee's place of business. Any such in-person audit shall be conducted +during regular business hours at Licensee's facilities and shall not +unreasonably interfere with Licensee's business activities. The Qt Company or +the independent auditor acting on behalf of The Qt Company shall be entitled to +inspect Licensee's Records. All such Licensee's Records and use thereof shall be +subject to an obligation of confidentiality under this Agreement. + +If an audit reveals that Licensee is using the Licensed Software beyond scope of +the licenses Licensee has paid for, Licensee agrees to immediately pay The Qt +Company any amounts owed for such unauthorized use. + +In addition, in the event the audit reveals a material violation of the terms of +this Agreement (underpayment of more than 5% of License Fees shall always be +deemed a material violation for purposes of this section), then the Licensee +shall pay The Qt Company's reasonable cost of conducting such audit. + +12 TERM AND TERMINATION + +12.1 Term + +This Agreement shall enter into force upon due acceptance by both Parties and +remain in force for the Term, unless and until terminated pursuant to the terms +of this Section 12. + +12.2 Termination by The Qt Company + +The Qt Company shall have the right to terminate this Agreement upon thirty +(30) days prior written notice if (i) the Licensee is in material breach of any +obligation of this Agreement and fails to remedy such breach within such notice +period; (ii) or Licensee or any of its Affiliates bring a suit before any court +or administrative agency or otherwise assert a claim against The Qt Company's +or any of its Affiliates' Intellectual Property Rights or validity thereof. + +12.3 Mutual Right to Terminate + +Either Party shall have the right to terminate this Agreement immediately upon +written notice in the event that the other Party becomes insolvent, files for +any form of bankruptcy, makes any assignment for the benefit of creditors, has a +receiver, administrative receiver or officer appointed over the whole or a +substantial part of its assets, ceases to conduct business, or an act equivalent +to any of the above occurs under the laws of the jurisdiction of the other +Party. + +12.4 Parties´ Rights and Duties upon Termination + +Upon expiry or termination of the Agreement for any reason, Licensee shall, +within 30 days after such termination, cease and shall cause all Designated +Users (including those of its Affiliates' and Contractors') and Licensee's SDK +Contractors to cease using the Licensed Software and distribution of the +Redistributables under this Agreement. Notwithstanding the above, in the event +the Agreement expires or is terminated for reason other than by The Qt Company +pursuant to Section 12.2, the Licensee is entitled, for a period of six (6) +months after the effective date of termination, to continue distribution of +Devices under the Distribution Licenses paid but unused at such effective date +of termination. + +Upon any such termination the Licensee shall destroy or return to The Qt +Company all copies of the Licensed Software and all related materials and will +certify the same to The Qt Company upon its request, provided however that +Licensee may retain and exploit such copies of the Licensed Software as it may +reasonably require in providing continued support to Customers. + +Expiry or termination of this Agreement for any reason whatsoever shall not +relieve Licensee of its obligation to pay any License Fees accrued or payable +to The Qt Company prior to the effective date of termination, and Licensee shall +immediately pay to The Qt Company all such fees upon the effective date of +termination. Termination of this Agreement shall not affect any rights of +Customers to continue use of Applications and Devices (and therein incorporated +Redistributables). + +13.GOVERNING LAW AND LEGAL VENUE + +In the event this Agreement is in the name of The Qt Company Inc., a Delaware +Corporation, then: + +(i) this Agreement shall be construed and interpreted in accordance with the +laws of the State of California, USA, excluding its choice of law provisions; + +(ii) the United Nations Convention on Contracts for the International Sale of +Goods will not apply to this Agreement; and + +(iii) any dispute, claim or controversy arising out of or relating to this +Agreement or the breach, termination, enforcement, interpretation or validity +thereof, including the determination of the scope or applicability of this +Agreement to arbitrate, shall be determined by arbitration in San Francisco, +USA, before one arbitrator. The arbitration shall be administered by JAMS +pursuant to JAMS' Streamlined Arbitration Rules and Procedures. Judgment on the +Award may be entered in any court having jurisdiction. This Section shall not +preclude parties from seeking provisional remedies in aid of arbitration from a +court of appropriate jurisdiction. + +In the event this Agreement is in the name of The Qt Company Ltd., a Finnish +Company, then: + +(i) this Agreement shall be construed and interpreted in accordance with the +laws of Finland, excluding its choice of law provisions; + +(ii) the United Nations Convention on Contracts for the International Sale of +Goods will not apply to this Agreement; and + +(iii) any disputes, controversy or claim arising out of or relating to this +Agreement, or the breach, termination or validity thereof shall be shall be +finally settled by arbitration in accordance with the Arbitration Rules of +Finland Chamber of Commerce. The arbitration tribunal shall consist of one (1), +or if either Party so requires, of three (3), arbitrators. The award shall be +final and binding and enforceable in any court of competent jurisdiction. The +arbitration shall be held in Helsinki, Finland and the process shall be +conducted in the English language. This Section shall not preclude parties from +seeking provisional remedies in aid of arbitration from a court of appropriate +jurisdiction. + +14. GENERAL PROVISIONS + +14.1 No Assignment Licensee + +shall not be entitled to assign or transfer all or any of its rights, benefits +and obligations under this Agreement without the prior written consent of The Qt +Company, which shall not be unreasonably withheld or delayed. The Qt Company +shall be entitled to freely assign or transfer any of its rights, benefits or +obligations under this Agreement. + +14.2 No Third Party Representations + +Licensee shall make no representations or warranties concerning the Licensed +Software on behalf of The Qt Company. Any representation or warranty Licensee +makes or purports to make on The Qt Company's behalf shall be void as to The Qt +Company. + +14.3 Surviving Sections + +Any terms and conditions that by their nature or otherwise reasonably should +survive termination of this Agreement shall so be deemed to survive. + +14.4 Entire Agreement + +This Agreement, the exhibits hereto, the License Certificate and any applicable +Purchase Order constitute the complete agreement between the Parties and +supersedes all prior or contemporaneous discussions, representations, and +proposals, written or oral, with respect to the subject matters discussed +herein. In the event of any conflict or inconsistency between this Agreement and +any Purchase Order, the terms of this Agreement will prevail over the terms of +the Purchase Order with respect to such conflict or inconsistency. + +14.5 Modifications + +No modification of this Agreement shall be effective unless contained in a +writing executed by an authorized representative of each Party. No term or +condition contained in Licensee's Purchase Order shall apply unless expressly +accepted by The Qt Company in writing. + +14.6 Force Majeure + +Except for the payment obligations hereunder, neither Party shall be liable to +the other for any delay or non-performance of its obligations hereunder in the +event and to the extent that such delay or non- performance is due to an event +of act of God, terrorist attack or other similar unforeseeable catastrophic +event that prevents either Party for fulfilling its obligations under this +Agreement and which such Party cannot avoid or circumvent ("Force Majeure +Event"). If the Force Majeure Event results in a delay or non- performance of a +Party for a period of three (3) months or longer, then either Party shall have +the right to terminate this Agreement with immediate effect without any +liability (except for the obligations of payment arising prior to the event of +Force Majeure) towards the other Party. + +14.7 Notices + +Any notice given by one Party to the other shall be deemed properly given and +deemed received if specifically acknowledged by the receiving Party in writing +or when successfully delivered to the recipient by hand, fax, or special courier +during normal business hours on a business day to the addresses specified for +The Qt Company in the beginning of this Agreement, and for the Licensee in the +Licensee’s account profile. Each communication and document made or delivered by +one Party to the other Party pursuant to this Agreement shall be in the English +language. + +14.8 Export Control +Licensee acknowledges that the Redistributables may be subject to export +control restrictions under the applicable laws of respective countries. +Licensee shall fully comply with all applicable export license restrictions +and requirements as well as with all lawses hereunder and shall procure all +necessary governmental authorizations, including without limitation, all +necessary licenses, approvals, permissions or consents, where necessary for +the re- exportation of the Redistributables, Applications +and/or Devices. + +14.9 No Implied License +There are no implied licenses or other implied rights granted under this +Agreement, and all rights, save for those expressly granted hereunder, shall +remain with The Qt Company and its licensors. In addition, no licenses or +immunities are granted to the combination of the Licensed Software with any +other software or hardware not delivered by The Qt Company under this Agreement. + +14.10 Attorney Fees + +The prevailing Party in any action to enforce this Agreement shall be entitled +to recover its attorney's fees and costs in connection with such action. + +14.11 Severability + +If any provision of this Agreement shall be adjudged by any court of competent +jurisdiction to be unenforceable or invalid, that provision shall be limited or +eliminated to the minimum extent necessary so that this Agreement shall +otherwise remain in full force and effect and enforceable. + +IN WITNESS WHEREOF, the Parties hereto, intending to be legally bound hereby, +have caused this Agreement to be executed by Licensee’s authorized +representative installing the Licensed Software and accepting the terms hereof +in connection therewith. + +Appendix 1 + +1. Parts of the Licensed Software that are permitted for distribution in object +code form only ("Redistributables") under this Agreement: + +- The Licensed Software's essential and add-on libraries + +- The Licensed Software's configuration tool ("qtconfig") + +- The Licensed Software's help tool ("Qt Assistant") + +- The Licensed Software's internationalization tools ("Qt Linguist", "lupdate", +"lrelease") + +- The Licensed Software's QML ("Qt Quick") launcher tool ("qmlscene" and +"qmlviewer") + +- The Licensed Software's installer framework + +2. Parts of the Licensed Software that are not permitted for distribution +include, but are not limited to: + +- The Licensed Software's source code and header files + +- The Licensed Software's documentation + +- The Licensed Software's documentation generation tool ("qdoc") + +- The Licensed Software's tool for writing makefiles ("qmake") + +- The Licensed Software's Meta Object Compiler ("moc") + +- The Licensed Software's User Interface Compiler ("uic" or in the case of Qt Jambi: "juic") + +- The Licensed Software's Resource Compiler ("rcc") + +- The Licensed Software's generator (only in the case of Qt Jambi if applicable) + +- The Licensed Software's parts of the IDE tool ("Qt Creator") + +- The Licensed Software's Emulator + +- Build scripts, recipes and other material for creating the +configuration of Licensed Software and/or 3rd party components, including the +reference operating system configuration delivered in conjunction with the diff --git a/.QT-FOR-DEVICE-CREATION-LICENSE-AGREEMENT b/.QT-FOR-DEVICE-CREATION-LICENSE-AGREEMENT new file mode 100644 index 0000000..a6d14c2 --- /dev/null +++ b/.QT-FOR-DEVICE-CREATION-LICENSE-AGREEMENT @@ -0,0 +1,912 @@ +QT LICENSE AGREEMENT Agreement version 4.0 + +This License Agreement (“Agreement”) is a legal agreement between The Qt +Company (as defined below) and the Licensee (as defined below) for the license +of Licensed Software (as defined below). Capitalized terms used herein are +defined in Section 1. + +WHEREAS: + +(A). Licensee wishes to use the Licensed Software for the purpose of developing +and distributing Applications and/or Devices; and + +(B). The Qt Company is willing to grant the Licensee a right to use Licensed +Software for such purpose pursuant to term and conditions of this Agreement. + +NOW, THEREFORE, THE PARTIES HEREBY AGREE AS FOLLOWS: + +1. DEFINITIONS + +“Affiliate” of a Party shall mean an entity (i) which is directly or indirectly +controlling such Party; (ii) which is under the same direct or indirect +ownership or control as such Party; or (iii) which is directly or indirectly +owned or controlled by such Party. For these purposes, an entity shall be +treated as being controlled by another if that other entity has fifty percent +(50 %) or more of the votes in such entity, is able to direct its affairs +and/or to control the composition of its board of directors or equivalent body. + +“Applications” shall mean Licensee's software products created using the +Licensed Software, which may include the Redistributables, or part +thereof. + +“Contractor(s)” shall mean third party consultants, distributors and +contractors performing services to a Party under applicable contractual +arrangement. + +“Customer(s)” shall mean Licensee’s end users to whom Licensee, directly or +indirectly, distributes copies of the Redistributables. + +“Deployment Platforms” shall mean operating systems specified in the License +Certificate, in which the Redistributables can be distributed pursuant to the +terms and conditions of this Agreement. + +“Designated User(s)” shall mean the employee(s) of Licensee or Licensee’s +Affiliates acting within the scope of their employment or Licensee's +Contractors acting within the scope of their services for Licensee and on +behalf of Licensee. Designated Users shall be named in the License Certificate. + +“Development License” shall mean the license needed by the Licensee for each +Designated User to use the Licensed Software under the license grant described +in Section 3.1 of this Agreement. + +“Development Platforms” shall mean those operating systems specified in the +License Certificate, in which the Licensed Software can be used under the +Development License, but not distributed in any form or used for any other +purpose. + +“Devices” shall mean hardware devices or products that 1) are manufactured +and/or distributed by the Licensee or its Affiliates or Contractors, and +(2)(i) incorporate or integrate the Redistributables or parts thereof; or (ii) +do not incorporate or integrate the Redistributables at the time of +distribution, but where, when used by a Customer, the main user interface or +substantial functionality of such device is provided by Application(s) or +otherwise depends on the Licensed Software. + +“Distribution License(s)” shall mean the license required for distribution of +Redistributables in connection with Devices pursuant to license grant described +in Section 3.3 of this Agreement. + +“Distribution License Packs” shall mean set of prepaid Distribution Licenses +for distribution of Redistributables, as defined in The Qt Company’s standard +price list, quote, Purchase Order confirmation or in an appendix hereto, +as the case may be. + +“Intellectual Property Rights” shall mean patents (including utility models), +design patents, and designs (whether or not capable of registration), chip +topography rights and other like protection, copyrights, trademarks, service +marks, trade names, logos or other words or symbols and any other form of +statutory protection of any kind and applications for any of the foregoing as +well as any trade secrets. + +“License Certificate” shall mean a certificate generated by The Qt Company for +each Designated User respectively upon them downloading the licensed Software. +License Certificate will be available under respective Designated User’s Qt +Account at account.qt.io and it will specify the Designated User, the +Development Platforms, Deployment Platforms and the License Term. The terms of +the License Certificate are considered part of this Agreement and shall be +updated from time to time to reflect any agreed changes to the foregoing terms +relating to Designated User’s rights to the Licensed Software. + +“License Fee” shall mean the fee charged to the Licensee for rights granted +under the terms of this Agreement. + +“License Term” shall mean the agreed validity period of the Development +License of the respective Designated User, during which time the +Designated User is entitled to use the Licensed Software, as set forth in the +respective License Certificate. + +“Licensed Software” shall mean all versions of the + +(i) Qt Toolkit (including Qt Essentials, Qt Add-Ons and Value-Add modules) as +described in http://doc.qt.io/qt-5/qtmodules.html, + +(ii) Qt Creator (including Creator IDE tool) as described in +http://doc.qt.io/qtcreator/index.html, + +(iii) Qt 3D Studio as described in http://doc.qt.io/qt3dstudio/index.html, and + +as well as corresponding online or electronic documentation, associated media +and printed materials, including the source code, example programs and the +documentation, licensed to the Licensee under this Agreement. Licensed Software +does not include Third Party Software (as defined in Section 4), Open Source +Qt, or other software products of The Qt Company (for example Qt Safe Renderer +and Qt for Automation), unless such other software products of The Qt Company +are separately agreed in writing to be included in scope of the Licensed +Software. + +“Licensee” shall mean the individual or legal entity that is party to this +Agreement, as identified on the signature page hereof. + +“Licensee’s Records” shall mean books and records that are likely to contain +information bearing on Licensee’s compliance with this Agreement or the +payments due to The Qt Company under this Agreement, including, but not limited +to: assembly logs, sales records and distribution records. + +“Modified Software” shall have the meaning as set forth in Section 2.3. + +“Online Services” shall mean any services or access to systems made available +by The Qt Company to the Licensee over the Internet relating to the Licensed +Software or for the purpose of use by the Licensee of the Licensed Software or +Support. Use of any such Online Services is discretionary for the Licensee and +some of them may be subject to additional fees. + +“Open Source Qt” shall mean the non-commercial Qt computer software products, +licensed under the terms of the GNU Lesser General Public License, version +2.1 or later (“LGPL”) or the GNU General Public License, version 2.0 or later +(“GPL”). For clarity, Open Source Qt shall not be provided nor governed under +this Agreement. + +”Party” or “Parties” shall mean Licensee and/or The Qt Company. + +"Redistributables" shall mean the portions of the Licensed Software set forth +in Appendix 1, Section 1 that may be distributed pursuant to the terms of this +Agreement in object code form only, including any relevant documentation. +Where relevant, any reference to Licensed Software in this Agreement shall +include and refer also to Redistributables. + +“Renewal Term” shall mean an extension of previous License Term as agreed +between the Parties. + +“Submitted Modified Software” shall have the meaning as set forth in +Section 2.3. + +“Support” shall mean standard developer support that is provided by The Qt +Company to assist Designated Users in using the Licensed Software in +accordance with The Qt Company’s standard support terms and as further +defined in Section 8 hereunder. + +“Taxes” shall have the meaning set forth in Section 10.5. + +“Term” shall have the meaning set forth in Section 12. + +“The Qt Company” shall mean: + +(i) in the event Licensee is an individual residing in the United States or a +legal entity incorporated in the United States or having its headquarters in +the United States, The Qt Company Inc., a Delaware corporation with its office +at 2350 Mission College Blvd., Suite 1020, Santa Clara, CA 95054, USA.; or + +(ii) in the event the Licensee is an individual residing outside of the United +States or a legal entity incorporated outside of the United States or having +its registered office outside of the United States, The Qt Company Ltd., a +Finnish company with its registered office at Bertel Jungin aukio D3A, 02600 +Espoo, Finland. + +"Third Party Software " shall have the meaning set forth in Section 4. + +“Updates” shall mean a release or version of the Licensed Software containing +bug fixes, error corrections and other changes that are generally made +available to users of the Licensed Software that have contracted for Support. +Updates are generally depicted as a change to the digits following the decimal +in the Licensed Software version number. The Qt Company shall make Updates +available to the Licensee under the Support. Updates shall be considered as +part of the Licensed Software hereunder. + +“Upgrades” shall mean a release or version of the Licensed Software containing +enhancements and new features and are generally depicted as a change to the +first digit of the Licensed Software version number. In the event Upgrades are +provided to the Licensee under this Agreement, they shall be considered as +part of the Licensed Software hereunder. + +2. OWNERSHIP + +2.1 Ownership of The Qt Company + +The Licensed Software is protected by copyright laws and international +copyright treaties, as well as other intellectual property laws and treaties. +The Licensed Software is licensed, not sold. + +All The Qt Company's Intellectual Property Rights are and shall remain the +exclusive property of The Qt Company or its licensors respectively. + +2.2 Ownership of Licensee + +All the Licensee's Intellectual Property Rights are and shall remain the +exclusive property of the Licensee or its licensors respectively. + +All Intellectual Property Rights to the Modified Software, Applications and +Devices shall remain with the Licensee and no rights thereto shall be granted +by the Licensee to The Qt Company under this Agreement (except as set forth in +Section 2.3 below). + +2.3 Modified Software + +Licensee may create bug-fixes, error corrections, patches or modifications to +the Licensed Software (“Modified Software”). Such Modified Software may break +the source or binary compatibility with the Licensed Software (including +without limitation through changing the application programming interfaces +("API") or by adding, changing or deleting any variable, method, or class +signature in the Licensed Software and/or any inter-process protocols, services +or standards in the Licensed Software libraries). To the extent that Licensee’s +Modified Software so breaks source or binary compatibility with the Licensed +Software, Licensee acknowledges that The Qt Company's ability to provide +Support may be prevented or limited and Licensee's ability to make use of +Updates may be restricted. + +Licensee may, at its sole and absolute discretion, choose to submit Modified +Software to The Qt Company (“Submitted Modified Software”) in connection with +Licensee’s Support request, service request or otherwise. In the event Licensee +does so, then, Licensee hereby grants The Qt Company a sublicensable, +assignable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and +fully paid-up license, under all of Licensee’s Intellectual Property Rights, to +reproduce, adapt, translate, modify, and prepare derivative works of, publicly +display, publicly perform, sublicense, make available and distribute such +Submitted Modified Software as The Qt Company sees fit at its free and absolute +discretion. + +3. LICENSES GRANTED + +3.1 Development with Licensed Software + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non-exclusive, non-transferable license, valid for the +License Term, to use, modify and copy the Licensed Software by Designated Users +on the Development Platforms for the sole purposes of designing, developing, +demonstrating and testing Application(s) and/or Devices, and to provide thereto +related support and other related services to end-user Customers. + +Licensee may install copies of the Licensed Software on an unlimited number of +computers provided that (i) only the Designated Users may use the Licensed +Software, and (ii) all Designated Users must have a valid Development License +to use Licensed Software. + +Licensee may at any time designate another Designated User to replace a then- +current Designated User by notifying The Qt Company in writing, provided that +any Designated User may be replaced only once during any six-month period. + +Upon expiry of the initially agreed License Term, the respective License Terms +shall be automatically extended to one or more Renewal Term(s), unless and +until either Party notifies the other Party in writing that it does not wish to +continue the License Term, such notification to be provided to the other Party +no less than ninety (90) days before expiry of the respective License Term. +Unless otherwise agreed between the Parties, Renewal Term shall be of equal +length with the initial Term. + +Any such Renewal Term shall be subject to License Fees agreed between the +Parties or, if no advance agreement exists, subject to The Qt Company’s +standard pricing applicable at the commencement date of any such Renewal Term. + +3.2 Distribution of Applications + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non-exclusive, non-transferable, revocable (for cause +pursuant to this Agreement) right and license, valid for the Term, to + +(i) distribute, by itself or through its Contractors, Redistributables as +installed, incorporated or integrated into Applications for execution on the +Deployment Platforms, and + +(ii) grant sublicenses to Redistributables, as distributed hereunder, for +Customers solely for Customer’s internal use and to the extent necessary in +order for the Customers to use the Applications for their respective intended +purposes. + +Right to distribute the Redistributables as part of an Application as provided +herein is not royalty-bearing but is conditional upon the Licensee having paid +the agreed Development Licenses from The Qt Company before distributing any +Redistributables to Customers. + +3.3 Distribution of Devices + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non-exclusive, non-transferable, revocable (for cause +pursuant to this Agreement) right and license, valid for the Term, to + +(i) distribute, by itself or through one or more tiers of Contractors, +Redistributables as installed, incorporated or integrated, or intended to be +installed, incorporated or integrated into Devices for execution on the +Deployment Platforms, and + +(ii) grant sublicenses to Redistributables, as distributed hereunder, for +Customers solely for Customer’s internal use and to the extent necessary in +order for the Customers to use the Devices for their respective intended +purposes. + +Right to distribute the Redistributables with Devices as provided herein is +conditional upon the Licensee having purchased and paid the appropriate amount +of Development and Distribution Licenses from The Qt Company before +distributing any Redistributables to Customers. + +3.4 Further Requirements + +The licenses granted above in this Section 3 by The Qt Company to Licensee are +conditional and subject to Licensee's compliance with the following terms: + +(i) Licensee shall not remove or alter any copyright, trademark or other +proprietary rights notice contained in any portion of the Licensed Software; + +(ii) Applications must add primary and substantial functionality to the +Licensed Software; + +(iii) Applications may not pass on functionality which in any way makes it +possible for others to create software with the Licensed Software; provided +however that Licensee may use the Licensed Software's scripting and QML ("Qt +Quick") functionality solely in order to enable scripting, themes and styles +that augment the functionality and appearance of the Application(s) without +adding primary and substantial functionality to the Application(s); + +(iv) Applications must not compete with the Licensed Software; + +(v) Licensee shall not use The Qt Company's or any of its suppliers' names, +logos, or trademarks to market Applications, except that Licensee may use +“Built with Qt” logo to indicate that Application(s) was developed using the +Licensed Software; + +(vi) Licensee shall not distribute, sublicense or disclose source code of +Licensed Software to any third party (provided however that Licensee may +appoint employee(s) of Contractors as Designated Users to use Licensed +Software pursuant to this Agreement). Such right may be available for the +Licensee subject to a separate software development kit (“SDK”) license +agreement to be concluded with The Qt Company; + +(vii) Licensee shall not grant the Customers a right to (i) make copies of the +Redistributables except when and to the extent required to use the Applications +and/or Devices for their intended purpose, (ii) modify the Redistributables or +create derivative works thereof, (iii) decompile, disassemble or otherwise +reverse engineer Redistributables, or (iv) redistribute any copy or portion of +the Redistributables to any third party, except as part of the onward sale of +the Device on which the Redistributables are installed; + +(viii) Licensee shall not and shall cause that its Affiliates or Contractors +shall not a) in any way combine, incorporate or integrate Licensed Software +with, or use Licensed Software for creation of, any software created with or +incorporating Open Source Qt, or b) incorporate or integrate Applications +into a hardware device or product other than a Device, unless Licensee has +received an advance written permission from The Qt Company to do so. Absent +such written permission, any and all distribution by the Licensee during the +Term of a hardware device or product a) which incorporate or integrate any +part of Licensed Software or Open Source Qt; or b) where the main user +interface or substantial functionality is provided by software build with +Licensed Software or Open Source Qt or otherwise depends on the Licensed +Software or Open Source Qt, shall be considered as a Device distribution under +this Agreement and dependent on compliance thereof (including but not limited +to obligation to pay applicable License Fees for such distribution); + +(ix) Licensee shall cause all of its Affiliates and Contractors entitled to +make use of the licenses granted under this Agreement, to be contractually +bound to comply with the relevant terms of this Agreement and not to use the +Licensed Software beyond the terms hereof and for any purposes other than +operating within the scope of their services for Licensee. Licensee shall be +responsible for any and all actions and omissions of its Affiliates and +Contractors relating to the Licensed Software and use thereof (including but +not limited to payment of all applicable License Fees); + +(x) Except when and to the extent explicitly provided in this Section 3, +Licensee shall not transfer, publish, disclose, display or otherwise make +available the Licensed Software; + +; and + +(xi) Licensee shall not attempt or enlist a third party to conduct or attempt +to conduct any of the above. + +Above terms shall not be applicable if and to the extent they conflict with any +mandatory provisions of any applicable laws. + +Any use of Licensed Software beyond the provisions of this Agreement is +strictly prohibited and requires an additional license from The Qt Company. + +4. THIRD PARTY SOFTWARE + +The Licensed Software may provide links to third party libraries or code +(collectively "Third Party Software") to implement various functions. Third +Party Software does not comprise part of the Licensed Software. In some cases, +access to Third Party Software may be included in the Licensed Software. Such +Third Party Software will be listed in the ".../src/3rdparty" source tree +delivered with the Licensed Software or documented in the Licensed Software, as +such may be amended from time to time. Licensee acknowledges that use or +distribution of Third Party Software is in all respects subject to applicable +license terms of applicable third party right holders. + +5. PRE-RELEASE CODE + +The Licensed Software may contain pre-release code and functionality marked or +otherwise stated as “Technology Preview”, “Alpha”, “Beta” or similar +designation. Such pre-release code may be present in order to provide +experimental support for new platforms or preliminary versions of one or more +new functionalities. The pre-release code may not be at the level of +performance and compatibility of a final, generally available, product +offering of the Licensed Software. The pre-release parts of the Licensed +Software may not operate correctly, may contain errors and may be substantially +modified by The Qt Company prior to the first commercial product release, if +any. The Qt Company is under no obligation to make pre-release code +commercially available, or provide any Support or Updates relating thereto. The +Qt Company assumes no liability whatsoever regarding any pre-release code, but +any use thereof is exclusively at Licensee’s own risk and expense. + +6. LIMITED WARRANTY AND WARRANTY DISCLAIMER + +The Qt Company hereby represents and warrants that it has the power and +authority to grant the rights and licenses granted to Licensee under this +Agreement. + +Except as set forth above, the Licensed Software is licensed to Licensee +"as is" and Licensee’s exclusive remedy and The Qt Company’s entire liability +for errors in the Licensed Software shall be limited, at The Qt Company’s +option, to correction of the error, replacement of the Licensed Software or +return of the applicable fees paid for the defective Licensed Software for the +time period during which the License is not able to utilize the Licensed +Software under the terms of this Agreement. + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF +ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL OTHER +WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON- +INFRINGEMENT WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES NOT +WARRANT THAT THE LICENSED SOFTWARE WILL SATISFY LICENSEE’S REQUIREMENTS OR THAT +IT WILL OPERATE WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE +UNINTERRUPTED. ALL USE OF AND RELIANCE ON THE LICENSED SOFTWARE IS AT THE SOLE +RISK OF AND RESPONSIBILITY OF LICENSEE. + +7. INDEMNIFICATION AND LIMITATION OF LIABILITY + +7.1 Limitation of Liability + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER PARTY FOR ANY LOSS OF PROFIT, +LOSS OF DATA, LOSS OF BUSINESS OR GOODWILL OR ANY OTHER INDIRECT, SPECIAL, +CONSEQUENTIAL, INCIDENTAL OR PUNITIVE COST, DAMAGES OR EXPENSE OF ANY KIND, +HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THIS AGREEMENT. PARTIES +SPECIFICALLY AGREE THAT LICENSEE’S OBLIGATION TO PAY LICENSE AND OTHER FEES +CORRESPONDING TO ACTUAL USAGE OF LICENSED SOFTWARE HEREUNDER SHALL BE +CONSIDERED AS A DIRECT DAMAGE. + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL EITHER PARTY’S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT +EXCEED THE AGGREGATE LICENSE FEES PAID OR PAYABLE TO THE QT COMPANY FROM +LICENSEE DURING THE PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE +EVENT RESULTING IN SUCH LIABILITY. + +THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE RISKS UNDER THIS AGREEMENT +BETWEEN THE QT COMPANY AND LICENSEE AND THE PARTIES HAVE RELIED UPON THE +LIMITATIONS SET FORTH HEREIN IN DETERMINING WHETHER TO ENTER INTO THIS AGREEMENT. + +7.2 Licensee´s Indemnification + +Licensee shall indemnify and hold harmless The Qt Company from and against any +claim, injury, judgment, settlement, loss or expense, including attorneys' fees +related to: (a) Licensee’s misrepresentation in connection with The Qt Company +or the Licensed Software or breach of this Agreement, (b) the Application or +Device (except where such cause of liability is solely attributable to the +Licensed Software). + +8. SUPPORT, UPDATES AND ONLINE SERVICES + +Upon due payment of the agreed License Fees the Licensee will be eligible to +receive Support and Updates and to use the Online Services during the License +Term, provided, however, that in the event the License Term is longer than 36 +months, Support is provided only for the first 12 months, unless the Parties +specifically otherwise agree. + +Unless otherwise decided by The Company at its free and absolute discretion, +Upgrades will not be included in the Support but may be available subject to +additional fees. + +From time to time The Qt Company may change the Support terms, provided that +during the respective ongoing License Term the level of Support provided by The +Qt Company may not be reduced without the consent of the Licensee. + +Unless otherwise agreed, The Qt Company shall not be responsible for providing +any service or support to Customers. + +9. CONFIDENTIALITY + +Each Party acknowledges that during the Term of this Agreement each Party may +receive information about the other Party's business, business methods, +business plans, customers, business relations, technology, and other +information, including the terms of this Agreement, that is confidential and +of great value to the other Party, and the value of which would be +significantly reduced if disclosed to third parties (“Confidential +Information”). Accordingly, when a Party (the “Receiving Party”) receives +Confidential Information from the other Party (the “Disclosing Party”), the +Receiving Party shall only disclose such information to employees and +Contractors on a need to know basis, and shall cause its employees and +employees of its Affiliates to: (i) maintain any and all Confidential +Information in confidence; (ii) not disclose the Confidential Information to a +third party without the Disclosing Party's prior written approval; and (iii) +not, directly or indirectly, use the Confidential Information for any purpose +other than for exercising its rights and fulfilling its responsibilities +pursuant to this Agreement. Each Party shall take reasonable measures to +protect the Confidential Information of the other Party, which measures shall +not be less than the measures taken by such Party to protect its own +confidential and proprietary information. + +Obligation of confidentiality shall not apply to information that (i) is or +becomes generally known to the public through no act or omission of the +Receiving Party; (ii) was in the Receiving Party's lawful possession prior to +the disclosure hereunder and was not subject to limitations on disclosure or +use; (iii) is developed independently by employees or Contractors of the +Receiving Party or other persons working for the Receiving Party who have not +had access to the Confidential Information of the Disclosing Party, as proven +by the written records of the Receiving Party; (iv) is lawfully disclosed to +the Receiving Party without restrictions, by a third party not under an +obligation of confidentiality; or (v) the Receiving Party is legally compelled +to disclose, in which case the Receiving Party shall notify the Disclosing +Party of such compelled disclosure and assert the privileged and confidential +nature of the information and cooperate fully with the Disclosing Party to +limit the scope of disclosure and the dissemination of disclosed Confidential +Information to the minimum extent necessary. + +The obligations under this Section 9 shall continue to remain in force for a +period of five (5) years after the last disclosure, and, with respect to trade +secrets, for so long as such trade secrets are protected under applicable trade +secret laws. + +10. FEES, DELIVERY AND PAYMENT + +10.1 License Fees + +License Fees are described in The Qt Company’s standard price list, quote or +Purchase Order confirmation or in an appendix hereto, as the case may be. + +The License Fees shall not be refunded or claimed as a credit in any event or +for any reason whatsoever. + +10.2 Ordering Licenses + +Licensee may purchase Development Licenses and Distribution Licenses pursuant +to agreed pricing terms or, if no specific pricing terms have been agreed upon, +at The Qt Company's standard pricing terms applicable at the time of purchase. + +Licensee shall submit all purchase orders for Development Licenses and +Distribution Licenses to The Qt Company by email or any other method acceptable +to The Qt Company (each such order is referred to herein as a “Purchase Order”) +for confirmation, whereupon the Purchase Order shall become binding between the +Parties. + +10.3 Distribution License Packs + +Unless otherwise agreed, Distribution Licenses shall be purchased by way of +Distribution License Packs. + +Upon due payment of the ordered Distribution License Pack(s), the Licensee will +have an account of Distribution Licenses available for installing, bundling or +integrating (all jointly “installing”) the Redistributables with the Devices or +for otherwise distributing the Redistributables in accordance with this +Agreement. + +Each time Licensee “installs” or distributes a copy of Redistributables, then +one Distribution License is used, and Licensee’s account of available +Distribution Licenses is decreased accordingly. + +Licensee may “install” copies of the Redistributables so long as Licensee has +Distribution Licenses remaining on its account. + +Redistributables will be deemed to have been “installed” into a Device when one +of the following circumstances shall have occurred: a) the Redistributables +have been loaded onto the Device and used outside of the Licensee’s premises or +b) the Device has been fully tested and placed into Licensee's inventory +(or sold) for the first time (i.e., Licensee will not be required to use +(or pay for) more than one Distribution License for each individual Device, +e.g. in a situation where a Device is returned to Licensee's inventory after +delivery to a distributor or sale to a Customer). In addition, if Licensee +includes a back-up copy of the Redistributables on a CD-ROM or other storage +medium along with the product, that backup copy of the Redistributables will +not be deemed to have been “installed” and will not require an additional +Distribution License. + +10.4 Payment Terms + +License Fees and any other charges under this Agreement shall be paid by +Licensee no later than thirty (30) days from the date of the applicable invoice +from The Qt Company. + +The Qt Company will submit an invoice to Licensee after the date of this +Agreement and/or after The Qt Company receives a Purchase Order from +Licensee. + +A late payment charge of the lower of (a) one percent per month; or (b) the +interest rate stipulated by applicable law, shall be charged on any unpaid +balances that remain past due. + +The Qt Company shall have the right to suspend, terminate or withhold grants +of all rights to the Licensed Software hereunder, including but not limited to +the Developer License, Distribution License, and Support, should Licensee fail +to make payment in timely fashion. + +10.5 Taxes + +All License Fees and other charges payable hereunder are gross amounts but +exclusive of any value added tax, use tax, sales tax and other taxes, duties or +tariffs (“Taxes”). Such applicable Taxes shall be paid by Licensee, or, where +applicable, in lieu of payment of such Taxes, Licensee shall provide an +exemption certificate to The Qt Company and any applicable authority. + +11 RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS + +11.1 Licensee’s Record-keeping + +Licensee shall at all times maintain accurate and up-to-date written records of +Licensee’s activities related to the use of Licensed Software and distribution +of Redistributables. The records shall be adequate to determine Licensee’s +compliance with the provisions of this Agreement and to demonstrate the number +of Designated Users and Redistributables distributed by Licensee. The records +shall conform to good accounting practices reasonably acceptable to The Qt +Company. + +Licensee shall, within thirty (30) days from receiving The Qt Company’s request +to that effect, deliver to The Qt Company a report on Licensee’s usage of +Licensed Software, such report to copies of Redistributables distributed by +Licensee during that calendar quarter, and also detailing the number of +undistributed copies of Redistributables made by Licensee and remaining in its +account contain information, in sufficient detail, on (i) amount of users +working with Licensed Software, (ii) copies of Redistributables distributed by +Licensee during that calendar quarter, (iii) number of undistributed copies of +Redistributables and corresponding number of unused Distribution Licenses +remaining on Licensee’s account, and (iv) any other information as The Qt +Company may reasonably require from time to time. + +11.2. The Qt Company’s Audit Rights + +The Qt Company or an independent auditor acting on behalf of The Qt Company’s, +may, upon at least five (5) business days’ prior written notice and at its +expense, audit Licensee with respect to the use of the Redistributables, but +not more frequently than once during each 6-month period. Such audit may be +conducted by mail, electronic means or through an in-person visit to Licensee’s +place of business. Any such in-person audit shall be conducted during regular +business hours at Licensee's facilities and shall not unreasonably interfere +with Licensee's business activities. The Qt Company or the independent auditor +acting on behalf of The Qt Company shall be entitled to inspect Licensee’s +Records. All such Licensee’s Records and use thereof shall be subject to an +obligation of confidentiality under this Agreement. + +If an audit reveals that Licensee is using the Licensed Software beyond scope +of the licenses Licensee has paid for, Licensee agrees to immediately pay The +Qt Company any amounts owed for such unauthorized use. + +In addition, in the event the audit reveals a material violation of the terms +of this Agreement (underpayment of more than 5% of License Fees shall always be +deemed a material violation for purposes of this section), then the Licensee +shall pay The Qt Company's reasonable cost of conducting such audit. + +12 TERM AND TERMINATION + +12.1 Term + +This Agreement shall enter into force upon due acceptance by both Parties and +remain in force for as long as there is any Development License(s) in force +(“Term”), unless and until terminated pursuant to the terms of this Section 12. + +12.2 Termination by The Qt Company + +The Qt Company shall have the right to terminate this Agreement upon thirty +(30) days prior written notice if the Licensee is in material breach of any +obligation of this Agreement and fails to remedy such breach within such notice +period. + +12.3 Mutual Right to Terminate + +Either Party shall have the right to terminate this Agreement immediately upon +written notice in the event that the other Party becomes insolvent, files for +any form of bankruptcy, makes any assignment for the benefit of creditors, has +a receiver, administrative receiver or officer appointed over the whole or a +substantial part of its assets, ceases to conduct business, or an act +equivalent to any of the above occurs under the laws of the jurisdiction of the +other Party. + +12.4 Parties´ Rights and Duties upon Termination + +Upon expiry or termination of the Agreement Licensee shall cease and shall +cause all Designated Users (including those of its Affiliates’ and +Contractors’) to cease using the Licensed Software and distribution of the +Redistributables under this Agreement. + +Notwithstanding the above, in the event the Agreement expires or is terminated: + +(i) as a result of The Qt Company choosing not to renew the Development +License(s) as set forth in Section 3.1, then all valid licenses possessed by +the Licensee at such date shall be extended to be valid in perpetuity under the +terms of this Agreement and Licensee is entitled to purchase additional +licenses as set forth in Section 10.2; or + +(ii) for reason other than by The Qt Company pursuant to item (i) above or +pursuant to Section 12.2, then the Licensee is entitled, for a period of six +(6) months after the effective date of termination, to continue distribution of +Devices under the Distribution Licenses paid but unused at such effective date +of termination. + +Upon any such termination the Licensee shall destroy or return to The Qt +Company all copies of the Licensed Software and all related materials and will +certify the same to The Qt Company upon its request, provided however that +Licensee may retain and exploit such copies of the Licensed Software as it may +reasonably require in providing continued support to Customers. + +Expiry or termination of this Agreement for any reason whatsoever shall not +relieve Licensee of its obligation to pay any License Fees accrued or payable +to The Qt Company prior to the effective date of termination, and Licensee +shall immediately pay to The Qt Company all such fees upon the effective date +of termination. Termination of this Agreement shall not affect any rights of +Customers to continue use of Applications and Devices (and therein incorporated +Redistributables). + +12.5 Extension in case of bankruptcy + +In the event The Qt Company is declared bankrupt under a final, non-cancellable +decision by relevant court of law, and this Agreement is not, at the date of +expiry of the Development License(s) pursuant to Section 3.1, assigned to +party, who has assumed The Qt Company’s position as a legitimate licensor of +Licensed Software under this Agreement, then all valid licenses possessed by +the Licensee at such date of expiry, and which the Licensee has not notified +for expiry, shall be extended to be valid in perpetuity under the terms of +this Agreement. + +13. GOVERNING LAW AND LEGAL VENUE + +In the event this Agreement is in the name of The Qt Company Inc., a Delaware +Corporation, then: + +(i) this Agreement shall be construed and interpreted in accordance with the +laws of the State of California, USA, excluding its choice of law provisions; + +(ii) the United Nations Convention on Contracts for the International Sale of +Goods will not apply to this Agreement; and + +(iii) any dispute, claim or controversy arising out of or relating to this +Agreement or the breach, termination, enforcement, interpretation or validity +thereof, including the determination of the scope or applicability of this +Agreement to arbitrate, shall be determined by arbitration in San Francisco, +USA, before one arbitrator. The arbitration shall be administered by JAMS +pursuant to JAMS' Streamlined Arbitration Rules and Procedures. Judgment on the +Award may be entered in any court having jurisdiction. This Section shall not +preclude parties from seeking provisional remedies in aid of arbitration from a +court of appropriate jurisdiction. + +In the event this Agreement is in the name of The Qt Company Ltd., a Finnish +Company, then: + +(i) this Agreement shall be construed and interpreted in accordance with the +laws of Finland, excluding its choice of law provisions; + +(ii) the United Nations Convention on Contracts for the International Sale of +Goods will not apply to this Agreement; and + +(iii) any disputes, controversy or claim arising out of or relating to this +Agreement, or the breach, termination or validity thereof shall be shall be +finally settled by arbitration in accordance with the Arbitration Rules of +Finland Chamber of Commerce. The arbitration tribunal shall consist of one (1), +or if either Party so requires, of three (3), arbitrators. The award shall be +final and binding and enforceable in any court of competent jurisdiction. The +arbitration shall be held in Helsinki, Finland and the process shall be +conducted in the English language. This Section shall not preclude parties from +seeking provisional remedies in aid of arbitration from a court of appropriate +jurisdiction. + +14. GENERAL PROVISIONS + +14.1 No Assignment + +Except in the case of a merger or sale of substantially all of its corporate +assets, Licensee shall not be entitled to assign or transfer all or any of its +rights, benefits and obligations under this Agreement without the prior written +consent of The Qt Company, which shall not be unreasonably withheld or delayed. +The Qt Company shall be entitled to freely assign or transfer any of its +rights, benefits or obligations under this Agreement. + +14.2 No Third Party Representations + +Licensee shall make no representations or warranties concerning the Licensed +Software on behalf of The Qt Company. Any representation or warranty Licensee +makes or purports to make on The Qt Company’s behalf shall be void as to The +Qt Company. + +14.3 Surviving Sections + +Any terms and conditions that by their nature or otherwise reasonably should +survive termination of this Agreement shall so be deemed to survive. + +14.4 Entire Agreement + +This Agreement, the exhibits hereto, the License Certificate and any applicable +Purchase Order constitute the complete agreement between the Parties and +supersedes all prior or contemporaneous discussions, representations, and +proposals, written or oral, with respect to the subject matters discussed +herein. + +In the event of any conflict or inconsistency between this Agreement and any +Purchase Order, the terms of this Agreement will prevail over the terms of the +Purchase Order with respect to such conflict or inconsistency. + +Parties specifically acknowledge and agree that this Agreement prevails over +any click-to-accept or similar agreements the Designated Users may need to +accept online upon download of the Licensed Software, as may be required by +The Qt Company’s applicable processes relating to Licensed Software. + +14.5 Modifications + +No modification of this Agreement shall be effective unless contained in a +writing executed by an authorized representative of each Party. No term or +condition contained in Licensee's Purchase Order shall apply unless expressly +accepted by The Qt Company in writing. + +14.6 Force Majeure + +Except for the payment obligations hereunder, neither Party shall be liable to +the other for any delay or non-performance of its obligations hereunder in the +event and to the extent that such delay or non-performance is due to an event +of act of God, terrorist attack or other similar unforeseeable catastrophic +event that prevents either Party for fulfilling its obligations under this +Agreement and which such Party cannot avoid or circumvent (“Force Majeure +Event”). If the Force Majeure Event results in a delay or non-performance of a +Party for a period of three (3) months or longer, then either Party shall have +the right to terminate this Agreement with immediate effect without any +liability (except for the obligations of payment arising prior to the event of +Force Majeure) towards the other Party. + +14.7 Notices + +Any notice given by one Party to the other shall be deemed properly given and +deemed received if specifically acknowledged by the receiving Party in writing +or when successfully delivered to the recipient by hand, fax, or special +courier during normal business hours on a business day to the addresses +specified for each Party on the signature page. Each communication and document +made or delivered by one Party to the other Party pursuant to this Agreement +shall be in the English language. + +14.8 Export Control + +Licensee acknowledges that the Redistributables may be subject to export +control restrictions under the applicable laws of respective countries. +Licensee shall fully comply with all applicable export license restrictions +and requirements as well as with all laws and regulations relating to the +Redistributables and exercise of licenses hereunder and shall procure all +necessary governmental authorizations, including without limitation, all +necessary licenses, approvals, permissions or consents, where necessary for the +re-exportation of the Redistributables, Applications and/or Devices. + +14.9 No Implied License + +There are no implied licenses or other implied rights granted under this +Agreement, and all rights, save for those expressly granted hereunder, shall +remain with The Qt Company and its licensors. In addition, no licenses or +immunities are granted to the combination of the Licensed Software with any +other software or hardware not delivered by The Qt Company under this Agreement. + +14.10 Attorney Fees + +The prevailing Party in any action to enforce this Agreement shall be entitled +to recover its attorney’s fees and costs in connection with such action. + +14.11 Severability + +If any provision of this Agreement shall be adjudged by any court of competent +jurisdiction to be unenforceable or invalid, that provision shall be limited or +eliminated to the minimum extent necessary so that this Agreement shall +otherwise remain in full force and effect and enforceable. + + +IN WITNESS WHEREOF, the Parties hereto, intending to be legally bound hereby, +have caused this Agreement to be executed by Licensee's authorized +representative installing the Licensed Software and accepting the terms +hereof in connection therewith. + + +Appendix 1 + +1. Parts of the Licensed Software that are permitted for distribution in +object code form only (“Redistributables”) under this Agreement: + +- The Licensed Software's Qt Essentials and Qt Add-on libraries +- The Licensed Software's configuration tool (“qtconfig”) +- The Licensed Software's help tool (“Qt Assistant”) +- The Licensed Software's internationalization tools (“Qt Linguist”, “lupdate”, +“lrelease”) +- The Licensed Software's QML (“Qt Quick”) launcher tool (“qmlscene” or +“qmlviewer”) +- The Licensed Software's installer framework + +2. Parts of the Licensed Software that are not permitted for distribution +include, but are not limited to: + +- The Licensed Software's source code and header files +- The Licensed Software's documentation +- The Licensed Software’s documentation generation tool (“qdoc”) +- The Licensed Software's tool for writing makefiles (“qmake”) +- The Licensed Software's Meta Object Compiler (“moc”) +- The Licensed Software's User Interface Compiler (“uic”) +- The Licensed Software's Resource Compiler (“rcc”) +- The Licensed Software's parts of the IDE tool (“Qt Creator”) +- The Licensed Software’s parts of the Design tools (“Qt 3D Studio” or “Qt +Quick Designer”) +- The Licensed Software's Emulator diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..0848fed --- /dev/null +++ b/.gitattributes @@ -0,0 +1,15 @@ +# Set the default behavior, in case people don't have core.autocrlf set. +* text=auto + +# Explicitly declare text files you want to always be normalized and converted +# to native line endings on checkout. +*.c text +*.h text +*.py text + +# Declare files that will always have CRLF line endings on checkout. +*.sln text eol=crlf + +# Denote all files that are truly binary and should not be modified. +*.png binary +*.jpg binary \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6a8b692 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +/build +/dist +/pyside*_build +/pyside*_package +/pyside*_install +/PySide +/PySide-*.*.* +/SciTE.* +/pysideuic +*.egg-info +*.pyc +distribute-*.egg +distribute-*.tar.gz +explore2 +build_history/2* diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..46377b8 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "sources/pyside2-tools"] + path = sources/pyside2-tools + branch = 5.9 + url = ../pyside-tools.git diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..8429d3a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,14 @@ +language: python +dist: trusty +python: + - "2.7" + - "3.5" +before_install: + - sudo add-apt-repository ppa:beineri/opt-qt551-trusty -y + - sudo apt-get update +install: + - sudo apt-get install qt55-meta-full -y +script: + - source /opt/qt55/bin/qt55-env.sh + - python setup.py install --jobs=2 --build-tests # --openssl=/path/to/openssl/bin + # how do we separate the build step and the tests, to see both as a result? diff --git a/CHANGES.rst b/CHANGES.rst new file mode 100644 index 0000000..7deaa8b --- /dev/null +++ b/CHANGES.rst @@ -0,0 +1,405 @@ +Changes +======= + +1.2.3 (2014-??-??) +------------------ + +Major changes +~~~~~~~~~~~~~ + +PySide-setup +************ + +- On Linux systems there is no more need to call the post-install script + +1.2.2 (2014-04-24) +------------------ + +Complete list of changes and bug fixes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +PySide +****** + +- Fix PYSIDE-190: QCoreApplication would deadlock on exit if the global + QThreadPool.globalInstance() is running a QRunnable with python code +- Change GlobalReceiver to explicitly 'use' [dis]connectNotify of the base + class in order to avoid hiding these with its own overloads. +- Add explicit casts when initializing an int[] using {}'s, as required + by C++11 to be "well formed" +- Fix PYSIDE-172: multiple rules for file +- Use file system encoding instead of assumed 'ascii' when registering + qt.conf in Qt resource system + +Shiboken +******** + +- Remove rejection lines that cause the sample_list test to fail +- Remove protected from samblebinding test +- Add parsing of 'noexcept' keyword +- Fix function rejections (i.e. support overloads) +- Fix building with python 3.3 and 3.4 +- Doc: Stop requiring sphinx.ext.refcounting with Sphinx 1.2+ +- Fix for containers with 'const' values +- Fix compilation issue on OS X 10.9 +- Only use fields in PyTypeObject when defining types +- Fix buffer overrun processing macro definitions +- Fix 'special' include handling +- Fix finding container base classes +- Refactor and improve added function resolving +- Work around MSVC's deficient in libsample/transform.cpp +- Fix description of sample/transform unit test +- Change wrapping and indent of some code in Handler::startElement to + improve consistency +- Fix '%#' substitution for # > 9 +- Improve dependencies for tests + +1.2.1 (2013-08-16) +------------------ + +Major changes +~~~~~~~~~~~~~ + +PySide +****** + +- In memory qt.conf generation and registration + +Shiboken +******** + +- Better support for more than 9 arguments to methods +- Avoiding a segfault when getting the .name attribute on an enum value with no name + +PySide-setup +************ + +- Switched to the new setuptools (v0.9.8) which has been merged with Distribute again and works for Python 2 and 3 with one codebase +- Support for building windows binaries with only Windows SDK installed (Visual Studio is no more required) +- Removed --msvc-version option. Required msvc compiler version is now resolved from python interpreter version + +1.2.0 (2013-07-02) +------------------ + +Major changes +~~~~~~~~~~~~~ + +PySide +****** + +- Fix multiple segfaults and better track the life time of Qt objects +- Fix multiple memory leaks + +Shiboken +******** + +- Install the shiboken module to site-packages +- Fix multiple segfaults + +PySide-setup +************ + +- On Windows system, when installing PySide binary distribution via easy_install, + there is no more need to call the post-install script +- Support for building windows binaries outside of Visual Studio command prompt +- Build and package the shiboken docs when sphinx is installed + +Complete list of changes and bug fixes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +PySide +****** + +- Set up PYTHONPATH for tests correctly +- Fix potential segfault at shutdown +- Fix PYSIDE-61 +- Tell Qt to look for qml imports in the PySide package +- fix build in C++11 mode +- Fix QByteArray memory leak +- Ignore QtCore import errors when initializing plugins folder +- Preload OpenSSL DLLs on Windows. +- Look first in the PySide package for Qt's plugins folder, instead of just in Qt's install or build folder +- Add explicit type conversion to fix mingw compile error +- Use QObject property to invalidate wrapper before deletion +- Invalidate metaObject wrapper before deletion +- Fix reference leak on convertion from a C++ map type to Python dict +- Change the order of pysitetest and signals directories because signals/disconnect_test.py depends on pysidetest module + +Shiboken +******** + +- Removed old logos from html docs +- Add missing return on module init error +- Don't break -Werror=non-virtual-dtor +- Fixing shiboken test for minimal binding test +- Decref reference to type object +- Fix segfault when using shiboken.delete +- Use non-static method def for instance methods +- Fix bug introduced when recursive_invalidate was added +- fix build in C++11 mode +- Prevent infinite recursion in invalidate +- Fix possible conflict with garbage collector +- Fix possible crash at exit +- Fix handling of unsigned long long and provide unittests +- Add test to illustrate issue on typedef enum +- Use getWrapperForQObject to convert if generating for PySide +- Allow compilation without a python shared library +- Use parent class's metaObject if wrapper is NULL +- Optionally assert on free'd pointer with a valid wrapper +- Find python3 libraries when built with pydebug enabled +- Fix PYSIDE-108 bug and add example +- PYSIDE-83 Fix segfault calling shiboken.dump +- Fix and test case for bug PYSIDE-72 +- Override all functions with the same name, not just one +- Update vector conversion +- Add typedef examples to minimal +- Add test files back to cmake +- Don't use it->second after erasing it +- Find function modifications defined in the 2nd+ base class. Fixes bug PYSIDE-54. +- Set a default hash function for all ObjectTypes. Fix bug PYSIDE-42. +- Fix compilation when there is no libxslt installed on the system. +- Fixed resolving of SOABI. SOABI is implemented on Linux, but not on Windows +- Don't use inline methods in dllexported classes to keep VC++ happy +- Use SpooledTemporaryFile in 2.6+ os.tmpfile() fails on win32 if process doesn't have admin permissions + +PySide-setup +************ + +- Support for building windows binaries outside of Visual Studio command prompt +- Build and package the shiboken docs when sphinx is installed +- Support Ubuntu 13.04 and Fedora 18 +- Fixed "develop" setuptools command +- Documentation updates +- Add --build-tests option to enable building the tests +- Add --jom and --jobs options +- Add --no-examples option to exclude the examples +- Add --relwithdebinfo option to enable a release-with-debug-info build mode +- Add --ignore-git option +- Add --make-spec option to specify make generator + +1.1.2 (2012-08-28) +------------------ + +Bug fixes +~~~~~~~~~ + +- During signal emission don't get return type after callback +- Invalidate QStandardModel::invisibleRootItem in clear() method +- QAbstractItemModel has wrong ownership policy for selectionModel() +- Improved QVector to python conversion +- Disable docstring generation if tools aren't found. +- Fixed some issues compiling PySide using VC++ +- Install the shiboken module to site-packages +- Fix compilation when there is no libxslt installed on the system. +- Set a default hash function for all ObjectTypes. +- Fix segfault calling shiboken.dump + +1.1.1 (2012-04-19) +------------------ + +Major changes +~~~~~~~~~~~~~ + +- Unified toolchain! No more GeneratorRunner and ApiExtractor, now you just need Shiboken to compile PySide. + +Bug fixes +~~~~~~~~~ + +- 1105 Spyder fails with HEAD +- 1126 Segfault when exception is raised in signalInstanceDisconnect +- 1135 SIGSEGV when loading custom widget using QUiLoader when overriding createWidget() +- 1041 QAbstractItemModel has wrong ownership policy for selectionModel() +- 1086 generatorrunner segfault processing #include +- 1110 Concurrency error causes GC heap corruption +- 1113 Instantiating QObject in user-defined QML element's constructor crashes if instantiated from QML +- 1129 Segmentation fault on close by QStandardItem/QStandardItemModel +- 1104 QSettings has problems with long integers +- 1108 tests/QtGui/pyside_reload_test.py fails when bytecode writing is disabled +- 1138 Subclassing of QUiLoader leads to "Internal C++ object already deleted" exception (again) +- 1124 QPainter.drawPixmapFragments should take a list as first argument +- 1065 Invalid example in QFileDialog documentation +- 1092 shiboken names itself a 'generator' +- 1094 shiboken doesn't complain about invalid options +- 1044 Incorrect call to parent constructor in example +- 1139 Crash at exit due to thread state (tstate) being NULL +- PYSIDE-41 QModelIndex unhashable + +1.1.0 (2012-01-02) +------------------ + +Major changes +~~~~~~~~~~~~~ + +- New type converter scheme + +Bug fixes +~~~~~~~~~ + +- 1010 Shiboken Cygwin patch +- 1034 Error compiling PySide with Python 3.2.2 32bit on Windows +- 1040 pyside-uic overwriting attributes before they are being used +- 1053 pyside-lupdate used with .pro files can't handle Windows paths that contain spaces +- 1060 Subclassing of QUiLoader leads to "Internal C++ object already deleted" exception +- 1063 Bug writing to files using "QTextStream + QFile + QTextEdit" on Linux +- 1069 QtCore.QDataStream silently fails on writing Python string +- 1077 Application exit crash when call QSyntaxHighlighter.document() +- 1082 OSX binary links are broken +- 1083 winId returns a PyCObject making it impossible to compare two winIds +- 1084 Crash (segfault) when writing unicode string on socket +- 1091 PixmapFragment and drawPixmapFragments are not bound +- 1095 No examples for shiboken tutorial +- 1097 QtGui.QShortcut.setKey requires QKeySequence +- 1101 Report invalid function signatures in typesystem +- 902 Expose Shiboken functionality through a Python module +- 969 viewOptions of QAbstractItemView error + +1.0.9 (2011-11-29) +------------------ + +Bug fixes +~~~~~~~~~ + +- 1058 Strange code in PySide/QtUiTools/glue/plugins.h +- 1057 valgrind detected "Conditional jump or move depends on uninitialised value" +- 1052 PySideConfig.cmake contains an infinite loop due to missing default for SHIBOKEN_PYTHON_SUFFIX +- 1048 QGridLayout.itemAtPosition() crashes when it should return None +- 1037 shiboken fails to build against python 3.2 (both normal and -dbg) on i386 (and others) +- 1036 Qt.KeyboardModifiers always evaluates to zero +- 1033 QDialog.DialogCode instances and return value from \QDialog.exec_ hash to different values +- 1031 QState.parentState() or QState.machine() causes python crash at exit +- 1029 qmlRegisterType Fails to Increase the Ref Count +- 1028 QWidget winId missing +- 1016 Calling of Q_INVOKABLE method returning not QVariant is impossible... +- 1013 connect to QSqlTableModel.primeInsert() causes crash +- 1012 FTBFS with hardening flags enabled +- 1011 PySide Cygwin patch +- 1010 Shiboken Cygwin patch +- 1009 GeneratorRunner Cygwin patch +- 1008 ApiExtractor Cygwin patch +- 891 ApiExtractor doesn't support doxygen as backend to doc generation. + +1.0.8 (2011-10-21) +------------------ + +Major changes +~~~~~~~~~~~~~ + +- Experimental Python3.2 support +- Qt4.8 beta support + +Bug fixes +~~~~~~~~~ + +- 1022 RuntimeError: maximum recursion depth exceeded while getting the str of an object +- 1019 Overriding QWidget.show or QWidget.hide do not work +- 944 Segfault on QIcon(None).pixmap() + +1.0.7 (2011-09-21) +------------------ + +Bug fixes +~~~~~~~~~ + +- 996 Missing dependencies for QtWebKit in buildscripts for Fedora +- 986 Documentation links +- 985 Provide versioned pyside-docs zip file to help packagers +- 981 QSettings docs should empathize the behavior changes of value() on different platforms +- 902 Expose Shiboken functionality through a Python module +- 997 QDeclarativePropertyMap doesn't work. +- 994 QIODevice.readData must use qmemcpy instead of qstrncpy +- 989 Pickling QColor fails +- 987 Disconnecting a signal that has not been connected +- 973 shouldInterruptJavaScript slot override is never called +- 966 QX11Info.display() missing +- 959 can't pass QVariant to the QtWebkit bridge +- 1006 Segfault in QLabel init +- 1002 Segmentation fault on PySide/Spyder exit +- 998 Segfault with Spyder after switching to another app +- 995 QDeclarativeView.itemAt returns faulty reference. (leading to SEGFAULT) +- 990 Segfault when trying to disconnect a signal that is not connected +- 975 Possible memory leak +- 991 The __repr__ of various types is broken +- 988 The type supplied with currentChanged signal in QTabWidget has changed in 1.0.6 + +1.0.6 (2011-08-22) +------------------ + +Major changes +~~~~~~~~~~~~~ + +- New documentation layout; +- Fixed some regressions from the last release (1.0.5); +- Optimizations during anonymous connection; + +Bug fixes +~~~~~~~~~ + +- 972 anchorlayout.py of graphicsview example raised a unwriteable memory exception when exits +- 953 Segfault when QObject is garbage collected after QTimer.singeShot +- 951 ComponentComplete not called on QDeclarativeItem subclass +- 965 Segfault in QtUiTools.QUiLoader.load +- 958 Segmentation fault with resource files +- 944 Segfault on QIcon(None).pixmap() +- 941 Signals with QtCore.Qt types as arguments has invalid signatures +- 964 QAbstractItemView.moveCursor() method is missing +- 963 What's This not displaying QTableWidget column header information as in Qt Designer +- 961 QColor.__repr__/__str__ should be more pythonic +- 960 QColor.__reduce__ is incorrect for HSL colors +- 950 implement Q_INVOKABLE +- 940 setAttributeArray/setUniformValueArray do not take arrays +- 931 isinstance() fails with Signal instances +- 928 100's of QGraphicItems with signal connections causes slowdown +- 930 Documentation mixes signals and functions. +- 923 Make QScriptValue (or QScriptValueIterator) implement the Python iterator protocol +- 922 QScriptValue's repr() should give some information about its data +- 900 QtCore.Property as decorator +- 895 jQuery version is outdated, distribution code de-duplication breaks documentation search +- 731 Can't specify more than a single 'since' argument +- 983 copy.deepcopy raises SystemError with QColor +- 947 NETWORK_ERR during interaction QtWebKit window with server +- 873 Deprecated methods could emit DeprecationWarning +- 831 PySide docs would have a "Inherited by" list for each class + +1.0.5 (2011-07-22) +------------------ + +Major changes +~~~~~~~~~~~~~ + +- Widgets present on "ui" files are exported in the root widget, check PySide ML thread for more information[1]; +- pyside-uic generate menubars without parent on MacOS plataform; +- Signal connection optimizations; + +Bug fixes +~~~~~~~~~ + +- 892 Segfault when destructing QWidget and QApplication has event filter installed +- 407 Crash while multiple inheriting with QObject and native python class +- 939 Shiboken::importModule must verify if PyImport_ImportModule succeeds +- 937 missing pid method in QProcess +- 927 Segfault on QThread code. +- 925 Segfault when passing a QScriptValue as QObject or when using .toVariant() on a QScriptValue +- 905 QtGui.QHBoxLayout.setMargin function call is created by pyside-uic, but this is not available in the pyside bindings +- 904 Repeatedly opening a QDialog with Qt.WA_DeleteOnClose set crashes PySide +- 899 Segfault with 'QVariantList' Property. +- 893 Shiboken leak reference in the parent control +- 878 Shiboken may generate incompatible modules if a new class is added. +- 938 QTemporaryFile JPEG problem +- 934 A __getitem__ of QByteArray behaves strange +- 929 pkg-config files do not know about Python version tags +- 926 qmlRegisterType does not work with QObject +- 924 Allow QScriptValue to be accessed via [] +- 921 Signals not automatically disconnected on object destruction +- 920 Cannot use same slot for two signals +- 919 Default arguments on QStyle methods not working +- 915 QDeclarativeView.scene().addItem(x) make the x object invalid +- 913 Widgets inside QTabWidget are not exported as members of the containing widget +- 910 installEventFilter() increments reference count on target object +- 907 pyside-uic adds MainWindow.setMenuBar(self.menubar) to the generated code under OS X +- 903 eventFilter in ItemDelegate +- 897 QObject.property() and QObject.setProperty() methods fails for user-defined properties +- 896 QObject.staticMetaObject() is missing +- 916 Missing info about when is possible to use keyword arguments in docs [was: QListWidgetItem's constructor ignores text parameter] +- 890 Add signal connection example for valueChanged(int) on QSpinBox to the docs +- 821 Mapping interface for QPixmapCache +- 909 Deletion of QMainWindow/QApplication leads to segmentation fault diff --git a/LICENSE.COMMERCIAL b/LICENSE.COMMERCIAL new file mode 100644 index 0000000..5dcd1f6 --- /dev/null +++ b/LICENSE.COMMERCIAL @@ -0,0 +1,914 @@ +QT LICENSE AGREEMENT Agreement version 4.0 + +This License Agreement (“Agreement”) is a legal agreement between The Qt +Company (as defined below) and the Licensee (as defined below) for the license +of Licensed Software (as defined below). Capitalized terms used herein are +defined in Section 1. + +WHEREAS: + +(A). Licensee wishes to use the Licensed Software for the purpose of developing +and distributing Applications and/or Devices; and + +(B). The Qt Company is willing to grant the Licensee a right to use Licensed +Software for such purpose pursuant to term and conditions of this Agreement. + +NOW, THEREFORE, THE PARTIES HEREBY AGREE AS FOLLOWS: + +1. DEFINITIONS + +“Affiliate” of a Party shall mean an entity (i) which is directly or indirectly +controlling such Party; (ii) which is under the same direct or indirect +ownership or control as such Party; or (iii) which is directly or indirectly +owned or controlled by such Party. For these purposes, an entity shall be +treated as being controlled by another if that other entity has fifty percent +(50 %) or more of the votes in such entity, is able to direct its affairs +and/or to control the composition of its board of directors or equivalent body. + +“Applications” shall mean Licensee's software products created using the +Licensed Software, which may include the Redistributables, or part +thereof. + +“Contractor(s)” shall mean third party consultants, distributors and +contractors performing services to a Party under applicable contractual +arrangement. + +“Customer(s)” shall mean Licensee’s end users to whom Licensee, directly or +indirectly, distributes copies of the Redistributables. + +“Deployment Platforms” shall mean operating systems specified in the License +Certificate, in which the Redistributables can be distributed pursuant to the +terms and conditions of this Agreement. + +“Designated User(s)” shall mean the employee(s) of Licensee or Licensee’s +Affiliates acting within the scope of their employment or Licensee's +Contractors acting within the scope of their services for Licensee and on +behalf of Licensee. Designated Users shall be named in the License Certificate. + +“Development License” shall mean the license needed by the Licensee for each +Designated User to use the Licensed Software under the license grant described +in Section 3.1 of this Agreement. + +“Development Platforms” shall mean those operating systems specified in the +License Certificate, in which the Licensed Software can be used under the +Development License, but not distributed in any form or used for any other +purpose. + +“Devices” shall mean hardware devices or products that 1) are manufactured +and/or distributed by the Licensee or its Affiliates or Contractors, and +(2)(i) incorporate or integrate the Redistributables or parts thereof; or (ii) +do not incorporate or integrate the Redistributables at the time of +distribution, but where, when used by a Customer, the main user interface or +substantial functionality of such device is provided by Application(s) or +otherwise depends on the Licensed Software. + +“Distribution License(s)” shall mean the license required for distribution of +Redistributables in connection with Devices pursuant to license grant described +in Section 3.3 of this Agreement. + +“Distribution License Packs” shall mean set of prepaid Distribution Licenses +for distribution of Redistributables, as defined in The Qt Company’s standard +price list, quote, Purchase Order confirmation or in an appendix hereto, +as the case may be. + +“Intellectual Property Rights” shall mean patents (including utility models), +design patents, and designs (whether or not capable of registration), chip +topography rights and other like protection, copyrights, trademarks, service +marks, trade names, logos or other words or symbols and any other form of +statutory protection of any kind and applications for any of the foregoing as +well as any trade secrets. + +“License Certificate” shall mean a certificate generated by The Qt Company for +each Designated User respectively upon them downloading the licensed Software. +License Certificate will be available under respective Designated User’s Qt +Account at account.qt.io and it will specify the Designated User, the +Development Platforms, Deployment Platforms and the License Term. The terms of +the License Certificate are considered part of this Agreement and shall be +updated from time to time to reflect any agreed changes to the foregoing terms +relating to Designated User’s rights to the Licensed Software. + +“License Fee” shall mean the fee charged to the Licensee for rights granted +under the terms of this Agreement. + +“License Term” shall mean the agreed validity period of the Development +License of the respective Designated User, during which time the +Designated User is entitled to use the Licensed Software, as set forth in the +respective License Certificate. + +“Licensed Software” shall mean all versions of the + +(i) Qt Toolkit (including Qt Essentials, Qt Add-Ons and Value-Add modules) as +described in http://doc.qt.io/qt-5/qtmodules.html, + +(ii). Qt Creator (including Creator IDE tool) as described in +http://doc.qt.io/qtcreator/index.html, + +(iii). Qt 3D Studio as described in http://doc.qt.io/qt3dstudio/index.html, and + +as well as corresponding online or electronic documentation, associated media +and printed materials, including the source code, example programs and the +documentation, licensed to the Licensee under this Agreement. Licensed Software +does not include Third Party Software (as defined in Section 4), Open Source +Qt, or other software products of The Qt Company (for example Qt Safe Renderer +and Qt for Automation), unless such other software products of The Qt Company +are separately agreed in writing to be included in scope of the Licensed +Software. + +“Licensee” shall mean the individual or legal entity that is party to this +Agreement, as identified on the signature page hereof. + +“Licensee’s Records” shall mean books and records that are likely to contain +information bearing on Licensee’s compliance with this Agreement or the +payments due to The Qt Company under this Agreement, including, but not limited +to: assembly logs, sales records and distribution records. + +“Modified Software” shall have the meaning as set forth in Section 2.3. + +“Online Services” shall mean any services or access to systems made available +by The Qt Company to the Licensee over the Internet relating to the Licensed +Software or for the purpose of use by the Licensee of the Licensed Software or +Support. Use of any such Online Services is discretionary for the Licensee and +some of them may be subject to additional fees. + +“Open Source Qt” shall mean the non-commercial Qt computer software products, +licensed under the terms of the GNU Lesser General Public License, version +2.1 or later (“LGPL”) or the GNU General Public License, version 2.0 or later +(“GPL”). For clarity, Open Source Qt shall not be provided nor governed under +this Agreement. + +”Party” or “Parties” shall mean Licensee and/or The Qt Company. + +"Redistributables" shall mean the portions of the Licensed Software set forth +in Appendix 1, Section 1 that may be distributed pursuant to the terms of this +Agreement in object code form only, including any relevant documentation. +Where relevant, any reference to Licensed Software in this Agreement shall +include and refer also to Redistributables. + +“Renewal Term” shall mean an extension of previous License Term as agreed +between the Parties. + +“Submitted Modified Software” shall have the meaning as set forth in +Section 2.3. + +“Support” shall mean standard developer support that is provided by The Qt +Company to assist Designated Users in using the Licensed Software in +accordance with The Qt Company’s standard support terms and as further +defined in Section 8 hereunder. + +“Taxes” shall have the meaning set forth in Section 10.5. + +“Term” shall have the meaning set forth in Section 12. + + “The Qt Company” shall mean: + +(i) in the event Licensee is an individual residing in the United States or a +legal entity incorporated in the United States or having its headquarters in +the United States, The Qt Company Inc., a Delaware corporation with its office +at 2350 Mission College Blvd., Suite 1020, Santa Clara, CA 95054, USA.; or + +(ii) in the event the Licensee is an individual residing outside of the United +States or a legal entity incorporated outside of the United States or having +its registered office outside of the United States, The Qt Company Ltd., a +Finnish company with its registered office at Bertel Jungin aukio D3A, 02600 +Espoo, Finland. + +"Third Party Software " shall have the meaning set forth in Section 4. + +“Updates” shall mean a release or version of the Licensed Software containing +bug fixes, error corrections and other changes that are generally made +available to users of the Licensed Software that have contracted for Support. +Updates are generally depicted as a change to the digits following the decimal +in the Licensed Software version number. The Qt Company shall make Updates +available to the Licensee under the Support. Updates shall be considered as +part of the Licensed Software hereunder. + +“Upgrades” shall mean a release or version of the Licensed Software containing +enhancements and new features and are generally depicted as a change to the +first digit of the Licensed Software version number. In the event Upgrades are +provided to the Licensee under this Agreement, they shall be considered as +part of the Licensed Software hereunder. + +2. OWNERSHIP + +2.1 Ownership of The Qt Company + +The Licensed Software is protected by copyright laws and international +copyright treaties, as well as other intellectual property laws and treaties. +The Licensed Software is licensed, not sold. + +All The Qt Company's Intellectual Property Rights are and shall remain the +exclusive property of The Qt Company or its licensors respectively. + +2.2 Ownership of Licensee + +All the Licensee's Intellectual Property Rights are and shall remain the +exclusive property of the Licensee or its licensors respectively. + +All Intellectual Property Rights to the Modified Software, Applications and +Devices shall remain with the Licensee and no rights thereto shall be granted +by the Licensee to The Qt Company under this Agreement (except as set forth in +Section 2.3 below). + +2.3 Modified Software + +Licensee may create bug-fixes, error corrections, patches or modifications to +the Licensed Software (“Modified Software”). Such Modified Software may break +the source or binary compatibility with the Licensed Software (including +without limitation through changing the application programming interfaces +("API") or by adding, changing or deleting any variable, method, or class +signature in the Licensed Software and/or any inter-process protocols, services +or standards in the Licensed Software libraries). To the extent that Licensee’s +Modified Software so breaks source or binary compatibility with the Licensed +Software, Licensee acknowledges that The Qt Company's ability to provide +Support may be prevented or limited and Licensee's ability to make use of +Updates may be restricted. + +Licensee may, at its sole and absolute discretion, choose to submit Modified +Software to The Qt Company (“Submitted Modified Software”) in connection with +Licensee’s Support request, service request or otherwise. In the event Licensee +does so, then, Licensee hereby grants The Qt Company a sublicensable, +assignable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and +fully paid-up license, under all of Licensee’s Intellectual Property Rights, to +reproduce, adapt, translate, modify, and prepare derivative works of, publicly +display, publicly perform, sublicense, make available and distribute such +Submitted Modified Software as The Qt Company sees fit at its free and absolute +discretion. + +3. LICENSES GRANTED + +3.1 Development with Licensed Software + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non-exclusive, non-transferable license, valid for the +License Term, to use, modify and copy the Licensed Software by Designated Users +on the Development Platforms for the sole purposes of designing, developing, +demonstrating and testing Application(s) and/or Devices, and to provide thereto +related support and other related services to end-user Customers. + +Licensee may install copies of the Licensed Software on an unlimited number of +computers provided that (i) only the Designated Users may use the Licensed +Software, and (ii) all Designated Users must have a valid Development License +to use Licensed Software. + +Licensee may at any time designate another Designated User to replace a then- +current Designated User by notifying The Qt Company in writing, provided that +any Designated User may be replaced only once during any six-month period. + +Upon expiry of the initially agreed License Term, the respective License Terms +shall be automatically extended to one or more Renewal Term(s), unless and +until either Party notifies the other Party in writing that it does not wish to +continue the License Term, such notification to be provided to the other Party +no less than ninety (90) days before expiry of the respective License Term. +Unless otherwise agreed between the Parties, Renewal Term shall be of equal +length with the initial Term. + +Any such Renewal Term shall be subject to License Fees agreed between the +Parties or, if no advance agreement exists, subject to The Qt Company’s +standard pricing applicable at the commencement date of any such Renewal Term. + +3.2 Distribution of Applications + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non-exclusive, non-transferable, revocable (for cause +pursuant to this Agreement) right and license, valid for the Term, to + +(i) distribute, by itself or through its Contractors, Redistributables as +installed, incorporated or integrated into Applications for execution on the +Deployment Platforms, and + +(ii) grant sublicenses to Redistributables, as distributed hereunder, for +Customers solely for Customer’s internal use and to the extent necessary in +order for the Customers to use the Applications for their respective intended +purposes. + +Right to distribute the Redistributables as part of an Application as provided +herein is not royalty-bearing but is conditional upon the Licensee having paid +the agreed Development Licenses from The Qt Company before distributing any +Redistributables to Customers. + +3.3 Distribution of Devices + +Subject to the terms of this Agreement, The Qt Company grants to Licensee a +personal, worldwide, non-exclusive, non-transferable, revocable (for cause +pursuant to this Agreement) right and license, valid for the Term, to + +(i) distribute, by itself or through one or more tiers of Contractors, +Redistributables as installed, incorporated or integrated, or intended to be +installed, incorporated or integrated into Devices for execution on the +Deployment Platforms, and + +(ii) grant sublicenses to Redistributables, as distributed hereunder, for +Customers solely for Customer’s internal use and to the extent necessary in +order for the Customers to use the Devices for their respective intended +purposes. + +Right to distribute the Redistributables with Devices as provided herein is +conditional upon the Licensee having purchased and paid the appropriate amount +of Development and Distribution Licenses from The Qt Company before +distributing any Redistributables to Customers. + +3.4 Further Requirements + +The licenses granted above in this Section 3 by The Qt Company to Licensee are +conditional and subject to Licensee's compliance with the following terms: + +(i) Licensee shall not remove or alter any copyright, trademark or other +proprietary rights notice contained in any portion of the Licensed Software; + +(ii) Applications must add primary and substantial functionality to the +Licensed Software; + +(iii) Applications may not pass on functionality which in any way makes it +possible for others to create software with the Licensed Software; provided +however that Licensee may use the Licensed Software's scripting and QML ("Qt +Quick") functionality solely in order to enable scripting, themes and styles +that augment the functionality and appearance of the Application(s) without +adding primary and substantial functionality to the Application(s); + +(iv) Applications must not compete with the Licensed Software; + +(v) Licensee shall not use The Qt Company's or any of its suppliers' names, +logos, or trademarks to market Applications, except that Licensee may use +“Built with Qt” logo to indicate that Application(s) was developed using the +Licensed Software; + +(vi) Licensee shall not distribute, sublicense or disclose source code of +Licensed Software to any third party (provided however that Licensee may +appoint employee(s) of Contractors as Designated Users to use Licensed +Software pursuant to this Agreement). Such right may be available for the +Licensee subject to a separate software development kit (“SDK”) license +agreement to be concluded with The Qt Company; + +(vii) Licensee shall not grant the Customers a right to (i) make copies of the +Redistributables except when and to the extent required to use the Applications +and/or Devices for their intended purpose, (ii) modify the Redistributables or +create derivative works thereof, (iii) decompile, disassemble or otherwise +reverse engineer Redistributables, or (iv) redistribute any copy or portion of +the Redistributables to any third party, except as part of the onward sale of +the Device on which the Redistributables are installed; + +(viii) Licensee shall not and shall cause that its Affiliates or Contractors +shall not a) in any way combine, incorporate or integrate Licensed Software +with, or use Licensed Software for creation of, any software created with or +incorporating Open Source Qt, or b) incorporate or integrate Applications +into a hardware device or product other than a Device, unless Licensee has +received an advance written permission from The Qt Company to do so. Absent +such written permission, any and all distribution by the Licensee during the +Term of a hardware device or product a) which incorporate or integrate any +part of Licensed Software or Open Source Qt; or b) where the main user +interface or substantial functionality is provided by software build with +Licensed Software or Open Source Qt or otherwise depends on the Licensed +Software or Open Source Qt, shall be considered as a Device distribution under +this Agreement and dependent on compliance thereof (including but not limited +to obligation to pay applicable License Fees for such distribution); + +(ix) Licensee shall cause all of its Affiliates and Contractors entitled to +make use of the licenses granted under this Agreement, to be contractually +bound to comply with the relevant terms of this Agreement and not to use the +Licensed Software beyond the terms hereof and for any purposes other than +operating within the scope of their services for Licensee. Licensee shall be +responsible for any and all actions and omissions of its Affiliates and +Contractors relating to the Licensed Software and use thereof (including but +not limited to payment of all applicable License Fees); + +(x) Except when and to the extent explicitly provided in this Section 3, +Licensee shall not transfer, publish, disclose, display or otherwise make +available the Licensed Software; + +; and + +(xi) Licensee shall not attempt or enlist a third party to conduct or attempt +to conduct any of the above. + +Above terms shall not be applicable if and to the extent they conflict with any +mandatory provisions of any applicable laws. + +Any use of Licensed Software beyond the provisions of this Agreement is +strictly prohibited and requires an additional license from The Qt Company. + +4. THIRD PARTY SOFTWARE + +The Licensed Software may provide links to third party libraries or code +(collectively "Third Party Software") to implement various functions. Third +Party Software does not comprise part of the Licensed Software. In some cases, +access to Third Party Software may be included in the Licensed Software. Such +Third Party Software will be listed in the ".../src/3rdparty" source tree +delivered with the Licensed Software or documented in the Licensed Software, as +such may be amended from time to time. Licensee acknowledges that use or +distribution of Third Party Software is in all respects subject to applicable +license terms of applicable third party right holders. + + 5. PRE-RELEASE CODE + +The Licensed Software may contain pre-release code and functionality marked or +otherwise stated as “Technology Preview”, “Alpha”, “Beta” or similar +designation. Such pre-release code may be present in order to provide +experimental support for new platforms or preliminary versions of one or more +new functionalities. The pre-release code may not be at the level of +performance and compatibility of a final, generally available, product +offering of the Licensed Software. The pre-release parts of the Licensed +Software may not operate correctly, may contain errors and may be substantially +modified by The Qt Company prior to the first commercial product release, if +any. The Qt Company is under no obligation to make pre-release code +commercially available, or provide any Support or Updates relating thereto. The +Qt Company assumes no liability whatsoever regarding any pre-release code, but +any use thereof is exclusively at Licensee’s own risk and expense. + +6. LIMITED WARRANTY AND WARRANTY DISCLAIMER + +The Qt Company hereby represents and warrants that it has the power and +authority to grant the rights and licenses granted to Licensee under this +Agreement. + +Except as set forth above, the Licensed Software is licensed to Licensee +"as is" and Licensee’s exclusive remedy and The Qt Company’s entire liability +for errors in the Licensed Software shall be limited, at The Qt Company’s +option, to correction of the error, replacement of the Licensed Software or +return of the applicable fees paid for the defective Licensed Software for the +time period during which the License is not able to utilize the Licensed +Software under the terms of this Agreement. + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF +ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL OTHER +WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON- +INFRINGEMENT WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES NOT +WARRANT THAT THE LICENSED SOFTWARE WILL SATISFY LICENSEE’S REQUIREMENTS OR THAT +IT WILL OPERATE WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE +UNINTERRUPTED. ALL USE OF AND RELIANCE ON THE LICENSED SOFTWARE IS AT THE SOLE +RISK OF AND RESPONSIBILITY OF LICENSEE. + +7. INDEMNIFICATION AND LIMITATION OF LIABILITY + +7.1 Limitation of Liability + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO +EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER PARTY FOR ANY LOSS OF PROFIT, +LOSS OF DATA, LOSS OF BUSINESS OR GOODWILL OR ANY OTHER INDIRECT, SPECIAL, +CONSEQUENTIAL, INCIDENTAL OR PUNITIVE COST, DAMAGES OR EXPENSE OF ANY KIND, +HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THIS AGREEMENT. PARTIES +SPECIFICALLY AGREE THAT LICENSEE’S OBLIGATION TO PAY LICENSE AND OTHER FEES +CORRESPONDING TO ACTUAL USAGE OF LICENSED SOFTWARE HEREUNDER SHALL BE +CONSIDERED AS A DIRECT DAMAGE. + +EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II) +BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL EITHER PARTY’S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT +EXCEED THE AGGREGATE LICENSE FEES PAID OR PAYABLE TO THE QT COMPANY FROM +LICENSEE DURING THE PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE +EVENT RESULTING IN SUCH LIABILITY. + +THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE RISKS UNDER THIS AGREEMENT +BETWEEN THE QT COMPANY AND LICENSEE AND THE PARTIES HAVE RELIED UPON THE +LIMITATIONS SET FORTH HEREIN IN DETERMINING WHETHER TO ENTER INTO THIS AGREEMENT. + +7.2 Licensee´s Indemnification + +Licensee shall indemnify and hold harmless The Qt Company from and against any +claim, injury, judgment, settlement, loss or expense, including attorneys' fees +related to: (a) Licensee’s misrepresentation in connection with The Qt Company +or the Licensed Software or breach of this Agreement, (b) the Application or +Device (except where such cause of liability is solely attributable to the +Licensed Software). + +8. SUPPORT, UPDATES AND ONLINE SERVICES + +Upon due payment of the agreed License Fees the Licensee will be eligible to +receive Support and Updates and to use the Online Services during the License +Term, provided, however, that in the event the License Term is longer than 36 +months, Support is provided only for the first 12 months, unless the Parties +specifically otherwise agree. + +Unless otherwise decided by The Company at its free and absolute discretion, +Upgrades will not be included in the Support but may be available subject to +additional fees. + +From time to time The Qt Company may change the Support terms, provided that +during the respective ongoing License Term the level of Support provided by The +Qt Company may not be reduced without the consent of the Licensee. + +Unless otherwise agreed, The Qt Company shall not be responsible for providing +any service or support to Customers. + +9. CONFIDENTIALITY + +Each Party acknowledges that during the Term of this Agreement each Party may +receive information about the other Party's business, business methods, +business plans, customers, business relations, technology, and other +information, including the terms of this Agreement, that is confidential and +of great value to the other Party, and the value of which would be +significantly reduced if disclosed to third parties (“Confidential +Information”). Accordingly, when a Party (the “Receiving Party”) receives +Confidential Information from the other Party (the “Disclosing Party”), the +Receiving Party shall only disclose such information to employees and +Contractors on a need to know basis, and shall cause its employees and +employees of its Affiliates to: (i) maintain any and all Confidential +Information in confidence; (ii) not disclose the Confidential Information to a +third party without the Disclosing Party's prior written approval; and (iii) +not, directly or indirectly, use the Confidential Information for any purpose +other than for exercising its rights and fulfilling its responsibilities +pursuant to this Agreement. Each Party shall take reasonable measures to +protect the Confidential Information of the other Party, which measures shall +not be less than the measures taken by such Party to protect its own +confidential and proprietary information. + +Obligation of confidentiality shall not apply to information that (i) is or +becomes generally known to the public through no act or omission of the +Receiving Party; (ii) was in the Receiving Party's lawful possession prior to +the disclosure hereunder and was not subject to limitations on disclosure or +use; (iii) is developed independently by employees or Contractors of the +Receiving Party or other persons working for the Receiving Party who have not +had access to the Confidential Information of the Disclosing Party, as proven +by the written records of the Receiving Party; (iv) is lawfully disclosed to +the Receiving Party without restrictions, by a third party not under an +obligation of confidentiality; or (v) the Receiving Party is legally compelled +to disclose, in which case the Receiving Party shall notify the Disclosing +Party of such compelled disclosure and assert the privileged and confidential +nature of the information and cooperate fully with the Disclosing Party to +limit the scope of disclosure and the dissemination of disclosed Confidential +Information to the minimum extent necessary. + +The obligations under this Section 9 shall continue to remain in force for a +period of five (5) years after the last disclosure, and, with respect to trade +secrets, for so long as such trade secrets are protected under applicable trade +secret laws. + +10. FEES, DELIVERY AND PAYMENT + +10.1 License Fees + +License Fees are described in The Qt Company’s standard price list, quote or +Purchase Order confirmation or in an appendix hereto, as the case may be. + +The License Fees shall not be refunded or claimed as a credit in any event or +for any reason whatsoever. + +10.2 Ordering Licenses + +Licensee may purchase Development Licenses and Distribution Licenses pursuant +to agreed pricing terms or, if no specific pricing terms have been agreed upon, +at The Qt Company's standard pricing terms applicable at the time of purchase. + +Licensee shall submit all purchase orders for Development Licenses and +Distribution Licenses to The Qt Company by email or any other method acceptable +to The Qt Company (each such order is referred to herein as a “Purchase Order”) +for confirmation, whereupon the Purchase Order shall become binding between the +Parties. + +10.3 Distribution License Packs + +Unless otherwise agreed, Distribution Licenses shall be purchased by way of +Distribution License Packs. + +Upon due payment of the ordered Distribution License Pack(s), the Licensee will +have an account of Distribution Licenses available for installing, bundling or +integrating (all jointly “installing”) the Redistributables with the Devices or +for otherwise distributing the Redistributables in accordance with this +Agreement. + +Each time Licensee “installs” or distributes a copy of Redistributables, then +one Distribution License is used, and Licensee’s account of available +Distribution Licenses is decreased accordingly. + +Licensee may “install” copies of the Redistributables so long as Licensee has +Distribution Licenses remaining on its account. + +Redistributables will be deemed to have been “installed” into a Device when one +of the following circumstances shall have occurred: a) the Redistributables +have been loaded onto the Device and used outside of the Licensee’s premises or +b) the Device has been fully tested and placed into Licensee's inventory +(or sold) for the first time (i.e., Licensee will not be required to use +(or pay for) more than one Distribution License for each individual Device, +e.g. in a situation where a Device is returned to Licensee's inventory after +delivery to a distributor or sale to a Customer). In addition, if Licensee +includes a back-up copy of the Redistributables on a CD-ROM or other storage +medium along with the product, that backup copy of the Redistributables will +not be deemed to have been “installed” and will not require an additional +Distribution License. + +10.4 Payment Terms + +License Fees and any other charges under this Agreement shall be paid by +Licensee no later than thirty (30) days from the date of the applicable invoice +from The Qt Company. + +The Qt Company will submit an invoice to Licensee after the date of this +Agreement and/or after The Qt Company receives a Purchase Order from +Licensee. + +A late payment charge of the lower of (a) one percent per month; or (b) the +interest rate stipulated by applicable law, shall be charged on any unpaid +balances that remain past due. + +The Qt Company shall have the right to suspend, terminate or withhold grants +of all rights to the Licensed Software hereunder, including but not limited to +the Developer License, Distribution License, and Support, should Licensee fail +to make payment in timely fashion. + +10.5 Taxes + +All License Fees and other charges payable hereunder are gross amounts but +exclusive of any value added tax, use tax, sales tax and other taxes, duties or +tariffs (“Taxes”). Such applicable Taxes shall be paid by Licensee, or, where +applicable, in lieu of payment of such Taxes, Licensee shall provide an +exemption certificate to The Qt Company and any applicable authority. + +11 RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS + +11.1 Licensee’s Record-keeping + +Licensee shall at all times maintain accurate and up-to-date written records of +Licensee’s activities related to the use of Licensed Software and distribution +of Redistributables. The records shall be adequate to determine Licensee’s +compliance with the provisions of this Agreement and to demonstrate the number +of Designated Users and Redistributables distributed by Licensee. The records +shall conform to good accounting practices reasonably acceptable to The Qt +Company. + +Licensee shall, within thirty (30) days from receiving The Qt Company’s request +to that effect, deliver to The Qt Company a report on Licensee’s usage of +Licensed Software, such report to copies of Redistributables distributed by +Licensee during that calendar quarter, and also detailing the number of +undistributed copies of Redistributables made by Licensee and remaining in its +account contain information, in sufficient detail, on (i) amount of users +working with Licensed Software, (ii) copies of Redistributables distributed by +Licensee during that calendar quarter, (iii) number of undistributed copies of +Redistributables and corresponding number of unused Distribution Licenses +remaining on Licensee’s account, and (iv) any other information as The Qt +Company may reasonably require from time to time. + +11.2. The Qt Company’s Audit Rights + +The Qt Company or an independent auditor acting on behalf of The Qt Company’s, +may, upon at least five (5) business days’ prior written notice and at its +expense, audit Licensee with respect to the use of the Redistributables, but +not more frequently than once during each 6-month period. Such audit may be +conducted by mail, electronic means or through an in-person visit to Licensee’s +place of business. Any such in-person audit shall be conducted during regular +business hours at Licensee's facilities and shall not unreasonably interfere +with Licensee's business activities. The Qt Company or the independent auditor +acting on behalf of The Qt Company shall be entitled to inspect Licensee’s +Records. All such Licensee’s Records and use thereof shall be subject to an +obligation of confidentiality under this Agreement. + +If an audit reveals that Licensee is using the Licensed Software beyond scope +of the licenses Licensee has paid for, Licensee agrees to immediately pay The +Qt Company any amounts owed for such unauthorized use. + +In addition, in the event the audit reveals a material violation of the terms +of this Agreement (underpayment of more than 5% of License Fees shall always be +deemed a material violation for purposes of this section), then the Licensee +shall pay The Qt Company's reasonable cost of conducting such audit. + +12 TERM AND TERMINATION + +12.1 Term + +This Agreement shall enter into force upon due acceptance by both Parties and +remain in force for as long as there is any Development License(s) in force +(“Term”), unless and until terminated pursuant to the terms of this Section 12. + +12.2 Termination by The Qt Company + +The Qt Company shall have the right to terminate this Agreement upon thirty +(30) days prior written notice if the Licensee is in material breach of any +obligation of this Agreement and fails to remedy such breach within such notice +period. + +12.3 Mutual Right to Terminate + +Either Party shall have the right to terminate this Agreement immediately upon +written notice in the event that the other Party becomes insolvent, files for +any form of bankruptcy, makes any assignment for the benefit of creditors, has +a receiver, administrative receiver or officer appointed over the whole or a +substantial part of its assets, ceases to conduct business, or an act +equivalent to any of the above occurs under the laws of the jurisdiction of the +other Party. + +12.4 Parties´ Rights and Duties upon Termination + +Upon expiry or termination of the Agreement Licensee shall cease and shall +cause all Designated Users (including those of its Affiliates’ and +Contractors’) to cease using the Licensed Software and distribution of the +Redistributables under this Agreement. + +Notwithstanding the above, in the event the Agreement expires or is terminated: + +(i) as a result of The Qt Company choosing not to renew the Development +License(s) as set forth in Section 3.1, then all valid licenses possessed by +the Licensee at such date shall be extended to be valid in perpetuity under the +terms of this Agreement and Licensee is entitled to purchase additional +licenses as set forth in Section 10.2; or + +(ii) for reason other than by The Qt Company pursuant to item (i) above or +pursuant to Section 12.2, then the Licensee is entitled, for a period of six +(6) months after the effective date of termination, to continue distribution of +Devices under the Distribution Licenses paid but unused at such effective date +of termination. + +Upon any such termination the Licensee shall destroy or return to The Qt +Company all copies of the Licensed Software and all related materials and will +certify the same to The Qt Company upon its request, provided however that +Licensee may retain and exploit such copies of the Licensed Software as it may +reasonably require in providing continued support to Customers. + +Expiry or termination of this Agreement for any reason whatsoever shall not +relieve Licensee of its obligation to pay any License Fees accrued or payable +to The Qt Company prior to the effective date of termination, and Licensee +shall immediately pay to The Qt Company all such fees upon the effective date +of termination. Termination of this Agreement shall not affect any rights of +Customers to continue use of Applications and Devices (and therein incorporated +Redistributables). + +12.5 Extension in case of bankruptcy + +In the event The Qt Company is declared bankrupt under a final, non-cancellable +decision by relevant court of law, and this Agreement is not, at the date of +expiry of the Development License(s) pursuant to Section 3.1, assigned to +party, who has assumed The Qt Company’s position as a legitimate licensor of +Licensed Software under this Agreement, then all valid licenses possessed by +the Licensee at such date of expiry, and which the Licensee has not notified +for expiry, shall be extended to be valid in perpetuity under the terms of +this Agreement. + +13. GOVERNING LAW AND LEGAL VENUE + +In the event this Agreement is in the name of The Qt Company Inc., a Delaware +Corporation, then: + +(i) this Agreement shall be construed and interpreted in accordance with the +laws of the State of California, USA, excluding its choice of law provisions; + +(ii) the United Nations Convention on Contracts for the International Sale of +Goods will not apply to this Agreement; and + +(iii) any dispute, claim or controversy arising out of or relating to this +Agreement or the breach, termination, enforcement, interpretation or validity +thereof, including the determination of the scope or applicability of this +Agreement to arbitrate, shall be determined by arbitration in San Francisco, +USA, before one arbitrator. The arbitration shall be administered by JAMS +pursuant to JAMS' Streamlined Arbitration Rules and Procedures. Judgment on the +Award may be entered in any court having jurisdiction. This Section shall not +preclude parties from seeking provisional remedies in aid of arbitration from a +court of appropriate jurisdiction. + +In the event this Agreement is in the name of The Qt Company Ltd., a Finnish +Company, then: + +(i) this Agreement shall be construed and interpreted in accordance with the +laws of Finland, excluding its choice of law provisions; + +(ii) the United Nations Convention on Contracts for the International Sale of +Goods will not apply to this Agreement; and + +(iii) any disputes, controversy or claim arising out of or relating to this +Agreement, or the breach, termination or validity thereof shall be shall be +finally settled by arbitration in accordance with the Arbitration Rules of +Finland Chamber of Commerce. The arbitration tribunal shall consist of one (1), +or if either Party so requires, of three (3), arbitrators. The award shall be +final and binding and enforceable in any court of competent jurisdiction. The +arbitration shall be held in Helsinki, Finland and the process shall be +conducted in the English language. This Section shall not preclude parties from +seeking provisional remedies in aid of arbitration from a court of appropriate +jurisdiction. + +14. GENERAL PROVISIONS + +14.1 No Assignment + +Except in the case of a merger or sale of substantially all of its corporate +assets, Licensee shall not be entitled to assign or transfer all or any of its +rights, benefits and obligations under this Agreement without the prior written +consent of The Qt Company, which shall not be unreasonably withheld or delayed. +The Qt Company shall be entitled to freely assign or transfer any of its +rights, benefits or obligations under this Agreement. + +14.2 No Third Party Representations + +Licensee shall make no representations or warranties concerning the Licensed +Software on behalf of The Qt Company. Any representation or warranty Licensee +makes or purports to make on The Qt Company’s behalf shall be void as to The +Qt Company. + +14.3 Surviving Sections + +Any terms and conditions that by their nature or otherwise reasonably should +survive termination of this Agreement shall so be deemed to survive. + +14.4 Entire Agreement + +This Agreement, the exhibits hereto, the License Certificate and any applicable +Purchase Order constitute the complete agreement between the Parties and +supersedes all prior or contemporaneous discussions, representations, and +proposals, written or oral, with respect to the subject matters discussed +herein. + +In the event of any conflict or inconsistency between this Agreement and any +Purchase Order, the terms of this Agreement will prevail over the terms of the +Purchase Order with respect to such conflict or inconsistency. + +Parties specifically acknowledge and agree that this Agreement prevails over +any click-to-accept or similar agreements the Designated Users may need to +accept online upon download of the Licensed Software, as may be required by +The Qt Company’s applicable processes relating to Licensed Software. + +14.5 Modifications + +No modification of this Agreement shall be effective unless contained in a +writing executed by an authorized representative of each Party. No term or +condition contained in Licensee's Purchase Order shall apply unless expressly +accepted by The Qt Company in writing. + +14.6 Force Majeure + +Except for the payment obligations hereunder, neither Party shall be liable to +the other for any delay or non-performance of its obligations hereunder in the +event and to the extent that such delay or non-performance is due to an event +of act of God, terrorist attack or other similar unforeseeable catastrophic +event that prevents either Party for fulfilling its obligations under this +Agreement and which such Party cannot avoid or circumvent (“Force Majeure +Event”). If the Force Majeure Event results in a delay or non-performance of a +Party for a period of three (3) months or longer, then either Party shall have +the right to terminate this Agreement with immediate effect without any +liability (except for the obligations of payment arising prior to the event of +Force Majeure) towards the other Party. + +14.7 Notices + +Any notice given by one Party to the other shall be deemed properly given and +deemed received if specifically acknowledged by the receiving Party in writing +or when successfully delivered to the recipient by hand, fax, or special +courier during normal business hours on a business day to the addresses +specified for each Party on the signature page. Each communication and document +made or delivered by one Party to the other Party pursuant to this Agreement +shall be in the English language. + +14.8 Export Control + +Licensee acknowledges that the Redistributables may be subject to export +control restrictions under the applicable laws of respective countries. +Licensee shall fully comply with all applicable export license restrictions +and requirements as well as with all laws and regulations relating to the +Redistributables and exercise of licenses hereunder and shall procure all +necessary governmental authorizations, including without limitation, all +necessary licenses, approvals, permissions or consents, where necessary for the +re-exportation of the Redistributables, Applications and/or Devices. + +14.9 No Implied License + +There are no implied licenses or other implied rights granted under this +Agreement, and all rights, save for those expressly granted hereunder, shall +remain with The Qt Company and its licensors. In addition, no licenses or +immunities are granted to the combination of the Licensed Software with any +other software or hardware not delivered by The Qt Company under this Agreement. + +14.10 Attorney Fees + +The prevailing Party in any action to enforce this Agreement shall be entitled +to recover its attorney’s fees and costs in connection with such action. + +14.11 Severability + +If any provision of this Agreement shall be adjudged by any court of competent +jurisdiction to be unenforceable or invalid, that provision shall be limited or +eliminated to the minimum extent necessary so that this Agreement shall +otherwise remain in full force and effect and enforceable. + + +IN WITNESS WHEREOF, the Parties hereto, intending to be legally bound hereby, +have caused this Agreement to be executed by Licensee's authorized +representative installing the Licensed Software and accepting the terms +hereof in connection therewith. + + +Appendix 1 + +1. Parts of the Licensed Software that are permitted for distribution in +object code form only (“Redistributables”) under this Agreement: + +- The Licensed Software's Qt Essentials and Qt Add-on libraries +- The Licensed Software's configuration tool (“qtconfig”) +- The Licensed Software's help tool (“Qt Assistant”) +- The Licensed Software's internationalization tools (“Qt Linguist”, “lupdate”, +“lrelease”) +- The Licensed Software's QML (“Qt Quick”) launcher tool (“qmlscene” or +“qmlviewer”) +- The Licensed Software's installer framework +- Qt for Python (PySide2) + +2. Parts of the Licensed Software that are not permitted for distribution +include, but are not limited to: + +- The Licensed Software's source code and header files +- The Licensed Software's documentation +- The Licensed Software’s documentation generation tool (“qdoc”) +- The Licensed Software's tool for writing makefiles (“qmake”) +- The Licensed Software's Meta Object Compiler (“moc”) +- The Licensed Software's User Interface Compiler (“uic”) +- The Licensed Software's Resource Compiler (“rcc”) +- The Licensed Software's parts of the IDE tool (“Qt Creator”) +- The Licensed Software’s parts of the Design tools (“Qt 3D Studio” or “Qt +Quick Designer”) +- The Licensed Software's Emulator + diff --git a/LICENSE.FDL b/LICENSE.FDL new file mode 100644 index 0000000..938bb8d --- /dev/null +++ b/LICENSE.FDL @@ -0,0 +1,450 @@ + GNU Free Documentation License + Version 1.3, 3 November 2008 + + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +0. PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document "free" in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + + +1. APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A "Secondary Section" is a named appendix or a front-matter section of +the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, SGML +or XML using a publicly available DTD, and standard-conforming simple +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or +processing tools are not generally available, and the +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +The "publisher" means any person or entity that distributes copies of +the Document to the public. + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +2. VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no +other conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + + +3. COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to +give them a chance to provide you with an updated version of the +Document. + + +4. MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. +B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement. +C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. +D. Preserve all the copyright notices of the Document. +E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. +F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. +G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. +H. Include an unaltered copy of this License. +I. Preserve the section Entitled "History", Preserve its Title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section Entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. +J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. +K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. +L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. +M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. +N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section. +O. Preserve any Warranty Disclaimers. + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + + +5. COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all sections +Entitled "Endorsements". + + +6. COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other +documents released under this License, and replace the individual +copies of this License in the various documents with a single copy +that is included in the collection, provided that you follow the rules +of this License for verbatim copying of each of the documents in all +other respects. + +You may extract a single document from such a collection, and +distribute it individually under this License, provided you insert a +copy of this License into the extracted document, and follow this +License in all other respects regarding verbatim copying of that +document. + + +7. AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + + +8. TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + + +9. TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + + +10. FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions of the +GNU Free Documentation License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in +detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +11. RELICENSING + +"Massive Multiauthor Collaboration Site" (or "MMC Site") means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +"Massive Multiauthor Collaboration" (or "MMC") contained in the site +means any set of copyrightable works thus published on the MMC site. + +"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +"Incorporate" means to publish or republish a Document, in whole or in +part, as part of another Document. + +An MMC is "eligible for relicensing" if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole or +in part into the MMC, (1) had no cover texts or invariant sections, and +(2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + + +ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. diff --git a/LICENSE.GPL2 b/LICENSE.GPL2 new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/LICENSE.GPL2 @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/LICENSE.GPLv3 b/LICENSE.GPLv3 new file mode 100644 index 0000000..71c4ad4 --- /dev/null +++ b/LICENSE.GPLv3 @@ -0,0 +1,686 @@ + GNU GENERAL PUBLIC LICENSE + + The Qt Toolkit is Copyright (C) 2015 The Qt Company Ltd. + Contact: http://www.qt.io/licensing/ + + You may use, distribute and copy the Qt Toolkit under the terms of + GNU Lesser General Public License version 3. That license references + the General Public License version 3, that is displayed below. Other + portions of the Qt Toolkit may be licensed directly under this license. + +------------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/LICENSE.GPLv3-EXCEPT b/LICENSE.GPLv3-EXCEPT new file mode 100644 index 0000000..b1cb1be --- /dev/null +++ b/LICENSE.GPLv3-EXCEPT @@ -0,0 +1,704 @@ +This is the GNU General Public License version 3, annotated with The +Qt Company GPL Exception 1.0: + +------------------------------------------------------------------------- + +The Qt Company GPL Exception 1.0 + +Exception 1: + +As a special exception you may create a larger work which contains the +output of this application and distribute that work under terms of your +choice, so long as the work is not otherwise derived from or based on +this application and so long as the work does not in itself generate +output that contains the output from this application in its original +or modified form. + +Exception 2: + +As a special exception, you have permission to combine this application +with Plugins licensed under the terms of your choice, to produce an +executable, and to copy and distribute the resulting executable under +the terms of your choice. However, the executable must be accompanied +by a prominent notice offering all users of the executable the entire +source code to this application, excluding the source code of the +independent modules, but including any changes you have made to this +application, under the terms of this license. + + +------------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/LICENSE.LGPLv3 b/LICENSE.LGPLv3 new file mode 100644 index 0000000..1f78e05 --- /dev/null +++ b/LICENSE.LGPLv3 @@ -0,0 +1,177 @@ + GNU LESSER GENERAL PUBLIC LICENSE + + The Qt Toolkit is Copyright (C) 2015 The Qt Company Ltd. + Contact: http://www.qt.io/licensing/ + + You may use, distribute and copy the Qt Toolkit under the terms of + GNU Lesser General Public License version 3, which is displayed below. + This license makes reference to the version 3 of the GNU General + Public License, which you can find in the LICENSE.GPLv3 file. + +------------------------------------------------------------------------- + + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..dd79b23 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,40 @@ +# +# MANIFEST.in +# +# Manifest template for creating the PySide source distribution. + +include MANIFEST.in +include CHANGES.rst +include README.rst +include ez_setup.py +include setup.py +include popenasync.py +include qtinfo.py +include utils.py + +# sources +recursive-include sources/patchelf ** +recursive-include sources/shiboken2 ** +recursive-include sources/pyside2 ** +recursive-include sources/pyside2-tools ** +# ignore .git +recursive-exclude sources/shiboken2/.git ** +recursive-exclude sources/pyside2/.git ** +recursive-exclude sources/pyside2-tools/.git ** + +# PySide package +recursive-include pyside_package/PySide2 ** +recursive-include pyside_package/PySide2/docs ** +recursive-include pyside_package/PySide2/plugins ** +recursive-include pyside_package/PySide2s ** +recursive-include pyside_package/PySide2/translations ** +recursive-include pyside_package/PySide2include ** +recursive-include pyside_package/PySide2/typesystems ** +recursive-include pyside_package/PySide2/examples ** + +# pysideuic package +recursive-include pyside_package/pysideuic ** +recursive-include pyside_package/pysideuic/Compiler ** +recursive-include pyside_package/pysideuic/port_v2 ** +recursive-include pyside_package/pysideuic/port_v3 ** +recursive-include pyside_package/pysideuic/widget-plugins ** diff --git a/README.md b/README.md new file mode 100644 index 0000000..cde0594 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# PySide2 + +### Introduction + +PySide is the [Python Qt bindings project](http://wiki.qt.io/PySide2), providing +access to the complete Qt 5.x framework as well as to generator tools for rapidly +generating bindings for any C++ libraries. + +The PySide project is developed in the open, with all facilities you'd expect +from any modern OSS project such as all code in a git repository and an open +design process. We welcome any contribution conforming to the +[Qt Contribution Agreement](https://www.qt.io/contributionagreement/). + + +PySide 2 supports Qt5. For building, please read about +[getting started](https://wiki.qt.io/PySide2_GettingStarted). +Then download the sources by running + + git clone https://code.qt.io/pyside/pyside-setup + +### Building + +#### Dependencies + +PySide versions following 5.6 use a C++ parser based on +[Clang](http://clang.org/). The Clang library (C-bindings), version 3.9 or +higher is required for building. Prebuilt versions of it can be downloaded from +[download.qt.io](http://download.qt.io/development_releases/prebuilt/libclang/). + +After unpacking the archive, set the environment variable *LLVM_INSTALL_DIR* to +point to the folder containing the *include* and *lib* directories of Clang: + + 7z x .../libclang-release_39-linux-Rhel7.2-gcc5.3-x86_64.7z + export LLVM_INSTALL_DIR=$PWD/libclang + +On Windows: + + 7z x .../libclang-release_39-windows-vs2015_64.7z + SET LLVM_INSTALL_DIR=%CD%\libclang + +#### Build Instructions + +You might consider using a virtual environment as described at +[getting started](https://wiki.qt.io/PySide2_GettingStarted). +You should be able to build: + + cd pyside-setup + python setup.py install + +The setup script will try to find the location of the qmake tool of the Qt +version to be used and the cmake build tool in the path. Non-standard +locations can be specified by the *--qmake=path_to_qmake* or +*--cmake=path_to_cmake* command line options. diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..09237be --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,18 @@ +init: + - cmd: C:\Python27-x64\python.exe --version + - cmd: C:\Python27-x64\python.exe -c "import platform; print(platform.machine())" + +install: + - cmd: git submodule update --init --recursive + +build_script: + - cmd: cmake --version + - cmd: rem curl -sLO https://download.qt.io/archive/qt/5.5/5.5.1/qt-opensource-windows-x86-msvc2013-5.5.1.exe + - cmd: rem 7z 9.20 fails to unpack the archive properly (only 13/585Mb are unpacked) + - cmd: rem 7z x qt-opensource-windows-x86-msvc2013-5.5.1.exe + - cmd: call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86_amd64 + - cmd: set QTDIR=C:\Qt\5.5\msvc2013_64 + - cmd: set PATH=%PATH%;%QTDIR%\bin + - cmd: qmake --version + - cmd: cd C:\projects\pyside2-setup + - cmd: C:\Python27-x64\python.exe setup.py install --openssl=C:\OpenSSL-Win32 diff --git a/build_history/blacklist.txt b/build_history/blacklist.txt new file mode 100644 index 0000000..a228f9e --- /dev/null +++ b/build_history/blacklist.txt @@ -0,0 +1,90 @@ +[pysidetest::delegatecreateseditor_test] + qt5.6 +[pysidetest::modelview_test] + darwin py3 +[pysidetest::qvariant_test] + darwin py3 +[pysidetest::utils_test] + win32 +[signals::signal_signature_test] + linux + darwin + win32 +[Qt3DExtras::qt3dextras_test] + linux + darwin +[QtCore::qfile_test] + win32 + darwin py3 +[QtCore::qfileread_test] + darwin +# Nested exception in Python 3 +[QtCore::qflags_test] + py3 +[QtCore::qobject_connect_notify_test] + linux + darwin + win32 +[QtGui::qmatrix_test] + win32 +[QtWidgets::bug_576] + linux + win32 + darwin py3 +[QtWidgets::returnquadruplesofnumbers_test] + linux + darwin + win32 +[QtWidgets::qstandarditemmodel_test] + py2 + py3 +[QtTest::touchevent_test] + linux + darwin + win32 +[QtMultimedia::audio_test] + linux + darwin + win32 +[QtQml::bug_951] + py3 +[QtQml::javascript_exceptions] + py3 +[QtScript::qscriptvalue_test] + linux + darwin + win32 +[QtScriptTools::debugger_test] + linux + darwin + win32 +# AttributeError: 'PySide2.QtQuick.QQuickItem' object has no attribute 'simpleFunction' +[QtQml::bug_451] + py2 + py3 +# Crashes with Python 2 on Windows +[QtQml::qqmlnetwork_test] + py2 win32 +[QtQml::qquickitem_grabToImage] + darwin +[smart::smart_pointer] + win32 + linux + darwin +# PYSIDE-474 +[QtWebEngineWidgets::pyside-474-qtwebengineview] + py2 + py3 +[QtCore::thread_signals_test] + win32 + linux + darwin +[QtCore::qthread_prod_cons_test] + win32 + linux + darwin +# PYSIDE-754 +[QtWebEngineCore::web_engine_custom_scheme] + win32 + linux + darwin diff --git a/build_scripts/__init__.py b/build_scripts/__init__.py new file mode 100644 index 0000000..571d374 --- /dev/null +++ b/build_scripts/__init__.py @@ -0,0 +1,38 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# diff --git a/build_scripts/main.py b/build_scripts/main.py new file mode 100644 index 0000000..b64d6f1 --- /dev/null +++ b/build_scripts/main.py @@ -0,0 +1,1337 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function +from distutils.version import LooseVersion + +import os +import time +from .utils import memoize, get_python_dict +from .options import * + +setup_script_dir = os.getcwd() +build_scripts_dir = os.path.join(setup_script_dir, 'build_scripts') +setup_py_path = os.path.join(setup_script_dir, "setup.py") + +@memoize +def get_package_timestamp(): + """ In a Coin CI build the returned timestamp will be the + Coin integration id timestamp. For regular builds it's + just the current timestamp or a user provided one.""" + if OPTION_PACKAGE_TIMESTAMP: + return OPTION_PACKAGE_TIMESTAMP + return int(time.time()) + +@memoize +def get_package_version(): + """ Returns the version string for the PySide2 package. """ + pyside_version_py = os.path.join( + setup_script_dir, "sources", "pyside2", "pyside_version.py") + d = get_python_dict(pyside_version_py) + + final_version = "{}.{}.{}".format( + d['major_version'], d['minor_version'], d['patch_version']) + pre_release_version_type = d['pre_release_version_type'] + pre_release_version = d['pre_release_version'] + if pre_release_version and pre_release_version_type: + final_version += pre_release_version_type + pre_release_version + + # Add the current timestamp to the version number, to suggest it + # is a development snapshot build. + if OPTION_SNAPSHOT_BUILD: + final_version += ".dev{}".format(get_package_timestamp()) + return final_version + +def get_setuptools_extension_modules(): + # Setting py_limited_api on the extension is the "correct" thing + # to do, but it doesn't actually do anything, because we + # override build_ext. So this is just foolproofing for the + # future. + extension_args = ('QtCore', []) + extension_kwargs = {} + if OPTION_LIMITED_API: + extension_kwargs['py_limited_api'] = True + extension_modules = [Extension(*extension_args, **extension_kwargs)] + return extension_modules + +# Buildable extensions. +contained_modules = ['shiboken2', 'pyside2', 'pyside2-tools'] + +# Git submodules: ["submodule_name", +# "location_relative_to_sources_folder"] +submodules = [["pyside2-tools"]] + +pyside_package_dir_name = "pyside_package" + +try: + import setuptools +except ImportError: + from ez_setup import use_setuptools + use_setuptools() + +import sys +import platform +import re +import fnmatch + +import difflib # for a close match of dirname and module +import functools + +from distutils import log +from distutils.errors import DistutilsOptionError +from distutils.errors import DistutilsSetupError +from distutils.sysconfig import get_config_var +from distutils.sysconfig import get_python_lib +from distutils.spawn import find_executable +from distutils.command.build import build as _build +from distutils.command.build_ext import build_ext as _build_ext +from distutils.util import get_platform + +from setuptools import setup, Extension +from setuptools.command.install import install as _install +from setuptools.command.install_lib import install_lib as _install_lib +from setuptools.command.bdist_egg import bdist_egg as _bdist_egg +from setuptools.command.develop import develop as _develop +from setuptools.command.build_py import build_py as _build_py + +from .qtinfo import QtInfo +from .utils import rmtree, detect_clang, copyfile, copydir, run_process_output, run_process +from .utils import update_env_path, init_msvc_env, filter_match, macos_fix_rpaths_for_library +from .platforms.unix import prepare_packages_posix +from .platforms.windows_desktop import prepare_packages_win32 +from .wheel_override import wheel_module_exists, get_bdist_wheel_override + +from textwrap import dedent + +# make sure that setup.py is run with an allowed python version +def check_allowed_python_version(): + import re + pattern = "'Programming Language :: Python :: (\d+)\.(\d+)'" + supported = [] + with open(setup_py_path) as setup: + for line in setup.readlines(): + found = re.search(pattern, line) + if found: + major = int(found.group(1)) + minor = int(found.group(2)) + supported.append( (major, minor) ) + this_py = sys.version_info[:2] + if this_py not in supported: + print("only these python versions are supported:", supported) + sys.exit(1) + +check_allowed_python_version() + +qt_src_dir = '' + +# This is used automatically by distutils.command.install object, to +# specify final installation location. +OPTION_FINAL_INSTALL_PREFIX = option_value("prefix") + + +if OPTION_QT_VERSION is None: + OPTION_QT_VERSION = "5" +if OPTION_QMAKE is None: + OPTION_QMAKE = find_executable("qmake-qt5") +if OPTION_QMAKE is None: + OPTION_QMAKE = find_executable("qmake") + +# make qtinfo.py independent of relative paths. +if OPTION_QMAKE is not None and os.path.exists(OPTION_QMAKE): + OPTION_QMAKE = os.path.abspath(OPTION_QMAKE) +if OPTION_CMAKE is not None and os.path.exists(OPTION_CMAKE): + OPTION_CMAKE = os.path.abspath(OPTION_CMAKE) + +QMAKE_COMMAND = None +# Checking whether qmake executable exists +if OPTION_QMAKE is not None and os.path.exists(OPTION_QMAKE): + # Looking whether qmake path is a link and whether the link exists + if os.path.islink(OPTION_QMAKE) and os.path.lexists(OPTION_QMAKE): + # Set -qt=X here. + if "qtchooser" in os.readlink(OPTION_QMAKE): + QMAKE_COMMAND = [OPTION_QMAKE, "-qt={}".format(OPTION_QT_VERSION)] +if not QMAKE_COMMAND: + QMAKE_COMMAND = [OPTION_QMAKE] + +if len(QMAKE_COMMAND) == 0 or QMAKE_COMMAND[0] is None: + print("qmake could not be found.") + sys.exit(1) +if not os.path.exists(QMAKE_COMMAND[0]): + print("'{}' does not exist.".format(QMAKE_COMMAND[0])) + sys.exit(1) +if OPTION_CMAKE is None: + OPTION_CMAKE = find_executable("cmake") + +if OPTION_CMAKE is None: + print("cmake could not be found.") + sys.exit(1) +if not os.path.exists(OPTION_CMAKE): + print("'{}' does not exist.".format(OPTION_CMAKE)) + sys.exit(1) + +if sys.platform == "win32": + if OPTION_MAKESPEC is None: + OPTION_MAKESPEC = "msvc" + if not OPTION_MAKESPEC in ["msvc", "mingw"]: + print("Invalid option --make-spec. Available values are {}".format( + ["msvc", "mingw"])) + sys.exit(1) +else: + if OPTION_MAKESPEC is None: + OPTION_MAKESPEC = "make" + if not OPTION_MAKESPEC in ["make"]: + print("Invalid option --make-spec. Available values are {}".format( + ["make"])) + sys.exit(1) + +if OPTION_JOBS: + if sys.platform == 'win32' and OPTION_NO_JOM: + print("Option --jobs can only be used with jom on Windows.") + sys.exit(1) + else: + if not OPTION_JOBS.startswith('-j'): + OPTION_JOBS = '-j' + OPTION_JOBS +else: + OPTION_JOBS = '' + +def is_debug_python(): + return getattr(sys, "gettotalrefcount", None) is not None + +# Return a prefix suitable for the _install/_build directory +def prefix(): + virtual_env_name = os.environ.get('VIRTUAL_ENV', None) + if virtual_env_name is not None: + name = os.path.basename(virtual_env_name) + else: + name = "pyside" + name += str(sys.version_info[0]) + if OPTION_DEBUG: + name += 'd' + if is_debug_python(): + name += 'p' + return name + +# Initialize, pull and checkout submodules +def prepare_sub_modules(): + print("Initializing submodules for PySide2 version: {}".format( + get_package_version())) + submodules_dir = os.path.join(setup_script_dir, "sources") + + # Create list of [name, desired branch, absolute path, desired + # branch] and determine whether all submodules are present + need_init_sub_modules = False + + for m in submodules: + module_name = m[0] + module_dir = m[1] if len(m) > 1 else '' + module_dir = os.path.join(submodules_dir, module_dir, module_name) + # Check for non-empty directory (repository checked out) + if not os.listdir(module_dir): + need_init_sub_modules = True + break + + if need_init_sub_modules: + git_update_cmd = ["git", "submodule", "update", "--init"] + if run_process(git_update_cmd) != 0: + m = ("Failed to initialize the git submodules: " + "update --init failed") + raise DistutilsSetupError(m) + git_pull_cmd = ["git", "submodule", "foreach", "git", "fetch", "--all"] + if run_process(git_pull_cmd) != 0: + m = ("Failed to initialize the git submodules: " + "git fetch --all failed") + raise DistutilsSetupError(m) + else: + print("All submodules present.") + + git_update_cmd = ["git", "submodule", "update"] + if run_process(git_update_cmd) != 0: + m = "Failed to checkout the correct git submodules SHA1s." + raise DistutilsSetupError(m) + +# Single global instance of QtInfo to be used later in multiple code +# paths. +qtinfo = QtInfo(QMAKE_COMMAND) + +def get_qt_version(): + qt_version = qtinfo.version + + if not qt_version: + log.error("Failed to query the Qt version with qmake {0}".format( + self.qtinfo.qmake_command)) + sys.exit(1) + + if LooseVersion(qtinfo.version) < LooseVersion("5.7"): + log.error("Incompatible Qt version detected: {}. " + "A Qt version >= 5.7 is required.".format(qt_version)) + sys.exit(1) + + return qt_version + +def prepare_build(): + if (os.path.isdir(".git") and not OPTION_IGNOREGIT and + not OPTION_ONLYPACKAGE and not OPTION_REUSE_BUILD): + prepare_sub_modules() + # Clean up temp and package folders + for n in [pyside_package_dir_name, "build"]: + d = os.path.join(setup_script_dir, n) + if os.path.isdir(d): + print("Removing {}".format(d)) + try: + rmtree(d) + except Exception as e: + print('***** problem removing "{}"'.format(d)) + print('ignored error: {}'.format(e)) + # Prepare package folders + ppdn = pyside_package_dir_name + absolute_paths = [os.path.join(ppdn, "PySide2"), + os.path.join(ppdn, "pyside2uic")] + for pkg in absolute_paths: + pkg_dir = os.path.join(setup_script_dir, pkg) + os.makedirs(pkg_dir) + # locate Qt sources for the documentation + if OPTION_QT_SRC is None: + install_prefix = qtinfo.prefix_dir + if install_prefix: + global qt_src_dir + # In-source, developer build + if install_prefix.endswith("qtbase"): + qt_src_dir = install_prefix + else: # SDK: Use 'Src' directory + qt_src_dir = os.path.join(os.path.dirname(install_prefix), + 'Src', 'qtbase') + +class PysideInstall(_install): + def __init__(self, *args, **kwargs): + _install.__init__(self, *args, **kwargs) + + def initialize_options (self): + _install.initialize_options(self) + + if sys.platform == 'darwin': + # Because we change the plat_name to include a correct + # deployment target on macOS distutils thinks we are + # cross-compiling, and throws an exception when trying to + # execute setup.py install. The check looks like this + # if self.warn_dir and build_plat != get_platform(): + # raise DistutilsPlatformError("Can't install when " + # "cross-compiling") + # Obviously get_platform will return the old deployment + # target. The fix is to disable the warn_dir flag, which + # was created for bdist_* derived classes to override, for + # similar cases. + self.warn_dir = False + + def run(self): + _install.run(self) + log.info('*** Install completed') + +class PysideDevelop(_develop): + + def __init__(self, *args, **kwargs): + _develop.__init__(self, *args, **kwargs) + + def run(self): + self.run_command("build") + _develop.run(self) + +class PysideBdistEgg(_bdist_egg): + + def __init__(self, *args, **kwargs): + _bdist_egg.__init__(self, *args, **kwargs) + + def run(self): + self.run_command("build") + _bdist_egg.run(self) + +class PysideBuildExt(_build_ext): + + def __init__(self, *args, **kwargs): + _build_ext.__init__(self, *args, **kwargs) + + def run(self): + pass + + + +# pyside_build_py and pyside_install_lib are reimplemented to preserve +# symlinks when distutils / setuptools copy files to various +# directories through the different build stages. +class PysideBuildPy(_build_py): + + def __init__(self, *args, **kwargs): + _build_py.__init__(self, *args, **kwargs) + + def build_package_data(self): + """Copies files from pyside_package into build/xxx directory""" + + for package, src_dir, build_dir, filenames in self.data_files: + for filename in filenames: + target = os.path.join(build_dir, filename) + self.mkpath(os.path.dirname(target)) + srcfile = os.path.abspath(os.path.join(src_dir, filename)) + # Using our own copyfile makes sure to preserve symlinks. + copyfile(srcfile, target) + +class PysideInstallLib(_install_lib): + + def __init__(self, *args, **kwargs): + _install_lib.__init__(self, *args, **kwargs) + + def install(self): + """ + Installs files from build/xxx directory into final + site-packages/PySide2 directory. + """ + + if os.path.isdir(self.build_dir): + # Using our own copydir makes sure to preserve symlinks. + outfiles = copydir(os.path.abspath(self.build_dir), + os.path.abspath(self.install_dir)) + else: + self.warn("'{}' does not exist -- " + "no Python modules to install".format(self.build_dir)) + return + return outfiles + +class PysideBuild(_build): + + def __init__(self, *args, **kwargs): + _build.__init__(self, *args, **kwargs) + + def finalize_options(self): + os_name_backup = os.name + if sys.platform == 'darwin': + self.plat_name = PysideBuild.macos_plat_name() + # This is a hack to circumvent the dubious check in + # distutils.commands.build -> finalize_options, which only + # allows setting the plat_name for windows NT. + # That is not the case for the wheel module though (which + # does allow setting plat_name), so we circumvent by faking + # the os name when finalizing the options, and then + # restoring the original os name. + os.name = "nt" + + _build.finalize_options(self) + + if sys.platform == 'darwin': + os.name = os_name_backup + + def initialize_options(self): + _build.initialize_options(self) + self.make_path = None + self.make_generator = None + self.debug = False + self.script_dir = None + self.sources_dir = None + self.build_dir = None + self.install_dir = None + self.py_executable = None + self.py_include_dir = None + self.py_library = None + self.py_version = None + self.py_arch = None + self.build_type = "Release" + self.qtinfo = None + self.build_tests = False + + def run(self): + prepare_build() + platform_arch = platform.architecture()[0] + log.info("Python architecture is {}".format(platform_arch)) + self.py_arch = platform_arch[:-3] + + build_type = "Debug" if OPTION_DEBUG else "Release" + if OPTION_RELWITHDEBINFO: + build_type = 'RelWithDebInfo' + + # Check env + make_path = None + make_generator = None + if not OPTION_ONLYPACKAGE: + if OPTION_MAKESPEC == "make": + make_name = "make" + make_generator = "Unix Makefiles" + elif OPTION_MAKESPEC == "msvc": + nmake_path = find_executable("nmake") + if nmake_path is None or not os.path.exists(nmake_path): + log.info("nmake not found. " + "Trying to initialize the MSVC env...") + init_msvc_env(platform_arch, build_type) + nmake_path = find_executable("nmake") + assert(nmake_path is not None and + os.path.exists(nmake_path)) + jom_path = None if OPTION_NO_JOM else find_executable("jom") + if jom_path is not None and os.path.exists(jom_path): + log.info("jom was found in {}".format(jom_path)) + make_name = "jom" + make_generator = "NMake Makefiles JOM" + else: + log.info("nmake was found in {}".format(nmake_path)) + make_name = "nmake" + make_generator = "NMake Makefiles" + if OPTION_JOBS: + msg = "Option --jobs can only be used with 'jom' on Windows." + raise DistutilsSetupError(msg) + elif OPTION_MAKESPEC == "mingw": + make_name = "mingw32-make" + make_generator = "MinGW Makefiles" + else: + raise DistutilsSetupError( + "Invalid option --make-spec.") + make_path = find_executable(make_name) + if make_path is None or not os.path.exists(make_path): + raise DistutilsSetupError("You need the program '{}' on your " + "system path to compile PySide2.".format(make_name)) + + if OPTION_CMAKE is None or not os.path.exists(OPTION_CMAKE): + raise DistutilsSetupError( + "Failed to find cmake." + " Please specify the path to cmake with " + "--cmake parameter.") + + if OPTION_QMAKE is None or not os.path.exists(OPTION_QMAKE): + raise DistutilsSetupError( + "Failed to find qmake." + " Please specify the path to qmake with --qmake parameter.") + + # Prepare parameters + py_executable = sys.executable + py_version = "{}.{}".format(sys.version_info[0], sys.version_info[1]) + py_include_dir = get_config_var("INCLUDEPY") + py_libdir = get_config_var("LIBDIR") + py_prefix = get_config_var("prefix") + if not py_prefix or not os.path.exists(py_prefix): + py_prefix = sys.prefix + if sys.platform == "win32": + py_scripts_dir = os.path.join(py_prefix, "Scripts") + else: + py_scripts_dir = os.path.join(py_prefix, "bin") + if py_libdir is None or not os.path.exists(py_libdir): + if sys.platform == "win32": + py_libdir = os.path.join(py_prefix, "libs") + else: + py_libdir = os.path.join(py_prefix, "lib") + if py_include_dir is None or not os.path.exists(py_include_dir): + if sys.platform == "win32": + py_include_dir = os.path.join(py_prefix, "include") + else: + py_include_dir = os.path.join(py_prefix, + "include/python{}".format(py_version)) + dbg_postfix = "" + if build_type == "Debug": + dbg_postfix = "_d" + if sys.platform == "win32": + if OPTION_MAKESPEC == "mingw": + static_lib_name = "libpython{}{}.a".format( + py_version.replace(".", ""), dbg_postfix) + py_library = os.path.join(py_libdir, static_lib_name) + else: + python_lib_name = "python{}{}.lib".format( + py_version.replace(".", ""), dbg_postfix) + py_library = os.path.join(py_libdir, python_lib_name) + else: + lib_exts = ['.so'] + if sys.platform == 'darwin': + lib_exts.append('.dylib') + if sys.version_info[0] > 2: + lib_suff = getattr(sys, 'abiflags', None) + else: # Python 2 + lib_suff = '' + lib_exts.append('.so.1') + # Suffix for OpenSuSE 13.01 + lib_exts.append('.so.1.0') + # static library as last gasp + lib_exts.append('.a') + + if sys.version_info[0] == 2 and dbg_postfix: + # For Python2 add a duplicate set of extensions + # combined with the dbg_postfix, so we test for both the + # debug version of the lib and the normal one. + # This allows a debug PySide2 to be built with a + # non-debug Python. + lib_exts = [dbg_postfix + e for e in lib_exts] + lib_exts + + python_library_found = False + libs_tried = [] + for lib_ext in lib_exts: + lib_name = "libpython{}{}{}".format(py_version, lib_suff, + lib_ext) + py_library = os.path.join(py_libdir, lib_name) + if os.path.exists(py_library): + python_library_found = True + break + libs_tried.append(py_library) + else: + # At least on macOS 10.11, the system Python 2.6 does + # not include a symlink to the framework file disguised + # as a .dylib file, thus finding the library would + # fail. + # Manually check if a framework file "Python" exists in + # the Python framework bundle. + if sys.platform == 'darwin' and sys.version_info[:2] == (2, 6): + # These manipulations essentially transform + # /System/Library/Frameworks/Python.framework/Versions/2.6/lib + # to + # /System/Library/Frameworks/Python.framework/Versions/2.6/Python + possible_framework_path = os.path.realpath( + os.path.join(py_libdir, '..')) + possible_framework_version = os.path.basename( + possible_framework_path) + possible_framework_library = os.path.join( + possible_framework_path, 'Python') + + if (possible_framework_version == '2.6' and + os.path.exists(possible_framework_library)): + py_library = possible_framework_library + python_library_found = True + else: + libs_tried.append(possible_framework_library) + + # Try to find shared libraries which have a multi arch + # suffix. + if not python_library_found: + py_multiarch = get_config_var("MULTIARCH") + if py_multiarch and not python_library_found: + try_py_libdir = os.path.join(py_libdir, py_multiarch) + libs_tried = [] + for lib_ext in lib_exts: + lib_name = "libpython{}{}{}".format( + py_version, lib_suff, lib_ext) + py_library = os.path.join(try_py_libdir, lib_name) + if os.path.exists(py_library): + py_libdir = try_py_libdir + python_library_found = True + break + libs_tried.append(py_library) + + if not python_library_found: + raise DistutilsSetupError( + "Failed to locate the Python library with {}".format( + ", ".join(libs_tried))) + + if py_library.endswith('.a'): + # Python was compiled as a static library + log.error("Failed to locate a dynamic Python library, " + "using {}".format(py_library)) + + self.qtinfo = qtinfo + qt_dir = os.path.dirname(OPTION_QMAKE) + qt_version = get_qt_version() + + # Update the PATH environment variable + additional_paths = [py_scripts_dir, qt_dir] + + # Add Clang to path for Windows. + # Revisit once Clang is bundled with Qt. + if (sys.platform == "win32" and + LooseVersion(self.qtinfo.version) >= LooseVersion("5.7.0")): + clang_dir = detect_clang() + if clang_dir[0]: + clangBinDir = os.path.join(clang_dir[0], 'bin') + if not clangBinDir in os.environ.get('PATH'): + log.info("Adding {} as detected by {} to PATH".format( + clangBinDir, clang_dir[1])) + additional_paths.append(clangBinDir) + else: + raise DistutilsSetupError("Failed to detect Clang when checking " + "LLVM_INSTALL_DIR, CLANG_INSTALL_DIR, llvm-config") + + update_env_path(additional_paths) + + build_name = "py{}-qt{}-{}-{}".format(py_version, qt_version, + platform.architecture()[0], build_type.lower()) + + script_dir = setup_script_dir + sources_dir = os.path.join(script_dir, "sources") + build_dir = os.path.join(script_dir, prefix() + "_build", + "{}".format(build_name)) + install_dir = os.path.join(script_dir, prefix() + "_install", + "{}".format(build_name)) + + # Try to ensure that tools built by this script (such as shiboken2) + # are found before any that may already be installed on the system. + update_env_path([os.path.join(install_dir, 'bin')]) + + # Tell cmake to look here for *.cmake files + os.environ['CMAKE_PREFIX_PATH'] = install_dir + + self.make_path = make_path + self.make_generator = make_generator + self.debug = OPTION_DEBUG + self.script_dir = script_dir + self.pyside_package_dir = os.path.join(self.script_dir, + pyside_package_dir_name) + self.sources_dir = sources_dir + self.build_dir = build_dir + self.install_dir = install_dir + self.py_executable = py_executable + self.py_include_dir = py_include_dir + self.py_library = py_library + self.py_version = py_version + self.build_type = build_type + self.site_packages_dir = get_python_lib(1, 0, prefix=install_dir) + self.build_tests = OPTION_BUILDTESTS + + setuptools_install_prefix = get_python_lib(1) + if OPTION_FINAL_INSTALL_PREFIX: + setuptools_install_prefix = OPTION_FINAL_INSTALL_PREFIX + + # Save the shiboken build dir path for clang deployment + # purposes. + self.shiboken_build_dir = os.path.join(self.build_dir, "shiboken2") + + log.info("=" * 30) + log.info("Package version: {}".format(get_package_version())) + log.info("Build type: {}".format(self.build_type)) + log.info("Build tests: {}".format(self.build_tests)) + log.info("-" * 3) + log.info("Make path: {}".format(self.make_path)) + log.info("Make generator: {}".format(self.make_generator)) + log.info("Make jobs: {}".format(OPTION_JOBS)) + log.info("-" * 3) + + log.info("setup.py directory: {}".format(self.script_dir)) + log.info("Build scripts directory: {}".format(build_scripts_dir)) + log.info("Sources directory: {}".format(self.sources_dir)) + + log.info(dedent(""" + Building PySide2 will create and touch directories + in the following order: + make build directory (py*_build/*/*) -> + make install directory (py*_install/*/*) -> + {} directory (pyside_package/*) -> + setuptools build directory (build/*/*) -> + setuptools install directory + (usually path-installed-python/lib/python*/site-packages/*) + """).format(pyside_package_dir_name)) + + log.info("make build directory: {}".format(self.build_dir)) + log.info("make install directory: {}".format(self.install_dir)) + log.info("{} directory: {}".format(pyside_package_dir_name, + self.pyside_package_dir)) + log.info("setuptools build directory: {}".format( + os.path.join(self.script_dir, "build"))) + log.info("setuptools install directory: {}".format( + setuptools_install_prefix)) + log.info("make-installed site-packages directory: {} \n" + " (only relevant for copying files from " + "'make install directory' to '{} directory'".format( + self.site_packages_dir, pyside_package_dir_name)) + log.info("-" * 3) + log.info("Python executable: {}".format(self.py_executable)) + log.info("Python includes: {}".format(self.py_include_dir)) + log.info("Python library: {}".format(self.py_library)) + log.info("Python prefix: {}".format(py_prefix)) + log.info("Python scripts: {}".format(py_scripts_dir)) + log.info("-" * 3) + log.info("Qt qmake: {}".format(self.qtinfo.qmake_command)) + log.info("Qt version: {}".format(self.qtinfo.version)) + log.info("Qt bins: {}".format(self.qtinfo.bins_dir)) + log.info("Qt docs: {}".format(self.qtinfo.docs_dir)) + log.info("Qt plugins: {}".format(self.qtinfo.plugins_dir)) + log.info("-" * 3) + if sys.platform == 'win32': + log.info("OpenSSL dll directory: {}".format(OPTION_OPENSSL)) + if sys.platform == 'darwin': + pyside_macos_deployment_target = ( + PysideBuild.macos_pyside_min_deployment_target() + ) + log.info("MACOSX_DEPLOYMENT_TARGET set to: {}".format( + pyside_macos_deployment_target)) + log.info("=" * 30) + + # Prepare folders + if not os.path.exists(self.sources_dir): + log.info("Creating sources folder {}...".format(self.sources_dir)) + os.makedirs(self.sources_dir) + if not os.path.exists(self.build_dir): + log.info("Creating build folder {}...".format(self.build_dir)) + os.makedirs(self.build_dir) + if not os.path.exists(self.install_dir): + log.info("Creating install folder {}...".format(self.install_dir)) + os.makedirs(self.install_dir) + + if not OPTION_ONLYPACKAGE: + # Build extensions + for ext in contained_modules: + self.build_extension(ext) + + if OPTION_BUILDTESTS: + # we record the latest successful build and note the + # build directory for supporting the tests. + timestamp = time.strftime('%Y-%m-%d_%H%M%S') + build_history = os.path.join(setup_script_dir, 'build_history') + unique_dir = os.path.join(build_history, timestamp) + os.makedirs(unique_dir) + fpath = os.path.join(unique_dir, 'build_dir.txt') + with open(fpath, 'w') as f: + print(build_dir, file=f) + log.info("Created {}".format(build_history)) + + if not OPTION_SKIP_PACKAGING: + # Build patchelf if needed + self.build_patchelf() + + # Prepare packages + self.prepare_packages() + + # Build packages + _build.run(self) + else: + log.info("Skipped preparing and building packages.") + log.info('*** Build completed') + + @staticmethod + def macos_qt_min_deployment_target(): + target = qtinfo.macos_min_deployment_target + + if not target: + raise DistutilsSetupError("Failed to query for Qt's " + "QMAKE_MACOSX_DEPLOYMENT_TARGET.") + return target + + @staticmethod + @memoize + def macos_pyside_min_deployment_target(): + """ + Compute and validate PySide2 MACOSX_DEPLOYMENT_TARGET value. + Candidate sources that are considered: + - setup.py provided value + - maximum value between minimum deployment target of the + Python interpreter and the minimum deployment target of + the Qt libraries. + If setup.py value is provided, that takes precedence. + Otherwise use the maximum of the above mentioned two values. + """ + python_target = get_config_var('MACOSX_DEPLOYMENT_TARGET') or None + qt_target = PysideBuild.macos_qt_min_deployment_target() + setup_target = OPTION_MACOS_DEPLOYMENT_TARGET + + qt_target_split = [int(x) for x in qt_target.split('.')] + if python_target: + python_target_split = [int(x) for x in python_target.split('.')] + if setup_target: + setup_target_split = [int(x) for x in setup_target.split('.')] + + message = ("Can't set MACOSX_DEPLOYMENT_TARGET value to {} because " + "{} was built with minimum deployment target set to {}.") + # setup.py provided OPTION_MACOS_DEPLOYMENT_TARGET value takes + # precedence. + if setup_target: + if python_target and setup_target_split < python_target_split: + raise DistutilsSetupError(message.format(setup_target, + "Python", python_target)) + if setup_target_split < qt_target_split: + raise DistutilsSetupError(message.format(setup_target, + "Qt", qt_target)) + # All checks clear, use setup.py provided value. + return setup_target + + # Setup.py value not provided, + # use same value as provided by Qt. + if python_target: + maximum_target = '.'.join([str(e) for e in max(python_target_split, + qt_target_split)]) + else: + maximum_target = qt_target + return maximum_target + + @staticmethod + @memoize + def macos_plat_name(): + deployment_target = PysideBuild.macos_pyside_min_deployment_target() + # Example triple "macosx-10.12-x86_64". + plat = get_platform().split("-") + plat_name = "{}-{}-{}".format(plat[0], deployment_target, plat[2]) + return plat_name + + def build_patchelf(self): + if not sys.platform.startswith('linux'): + return + self._patchelf_path = find_executable('patchelf') + if self._patchelf_path: + if not os.path.isabs(self._patchelf_path): + self._patchelf_path = os.path.join(os.getcwd(), + self._patchelf_path) + log.info("Using {} ...".format(self._patchelf_path)) + return + log.info("Building patchelf...") + module_src_dir = os.path.join(self.sources_dir, "patchelf") + build_cmd = [ + "g++", + "{}/patchelf.cc".format(module_src_dir), + "-o", + "patchelf", + ] + if run_process(build_cmd) != 0: + raise DistutilsSetupError("Error building patchelf") + self._patchelf_path = os.path.join(self.script_dir, "patchelf") + + def build_extension(self, extension): + # calculate the subrepos folder name + + log.info("Building module {}...".format(extension)) + + # Prepare folders + os.chdir(self.build_dir) + module_build_dir = os.path.join(self.build_dir, extension) + skipflag_file = module_build_dir + '-skip' + if os.path.exists(skipflag_file): + log.info("Skipping {} because {} exists".format(extension, + skipflag_file)) + return + + module_build_exists = os.path.exists(module_build_dir) + if module_build_exists: + if not OPTION_REUSE_BUILD: + log.info("Deleting module build folder {}...".format( + module_build_dir)) + try: + rmtree(module_build_dir) + except Exception as e: + print('***** problem removing "{}"'.format( + module_build_dir)) + print('ignored error: {}'.format(e)) + else: + log.info("Reusing module build folder {}...".format( + module_build_dir)) + if not os.path.exists(module_build_dir): + log.info("Creating module build folder {}...".format( + module_build_dir)) + os.makedirs(module_build_dir) + os.chdir(module_build_dir) + + module_src_dir = os.path.join(self.sources_dir, extension) + + # Build module + cmake_cmd = [ + OPTION_CMAKE, + "-G", self.make_generator, + "-DBUILD_TESTS={}".format(self.build_tests), + "-DQt5Help_DIR={}".format(self.qtinfo.docs_dir), + "-DCMAKE_BUILD_TYPE={}".format(self.build_type), + "-DCMAKE_INSTALL_PREFIX={}".format(self.install_dir), + module_src_dir + ] + cmake_cmd.append("-DPYTHON_EXECUTABLE={}".format(self.py_executable)) + cmake_cmd.append("-DPYTHON_INCLUDE_DIR={}".format(self.py_include_dir)) + cmake_cmd.append("-DPYTHON_LIBRARY={}".format(self.py_library)) + if OPTION_MODULE_SUBSET: + module_sub_set = '' + for m in OPTION_MODULE_SUBSET.split(','): + if m.startswith('Qt'): + m = m[2:] + if module_sub_set: + module_sub_set += ';' + module_sub_set += m + cmake_cmd.append("-DMODULES={}".format(module_sub_set)) + if OPTION_SKIP_MODULES: + skip_modules = '' + for m in OPTION_SKIP_MODULES.split(','): + if m.startswith('Qt'): + m = m[2:] + if skip_modules: + skip_modules += ';' + skip_modules += m + cmake_cmd.append("-DSKIP_MODULES={}".format(skip_modules)) + # Add source location for generating documentation + cmake_src_dir = OPTION_QT_SRC if OPTION_QT_SRC else qt_src_dir + cmake_cmd.append("-DQT_SRC_DIR={}".format(cmake_src_dir)) + log.info("Qt Source dir: {}".format(cmake_src_dir)) + + if self.build_type.lower() == 'debug': + cmake_cmd.append("-DPYTHON_DEBUG_LIBRARY={}".format( + self.py_library)) + + if OPTION_LIMITED_API == "yes": + cmake_cmd.append("-DFORCE_LIMITED_API=yes") + elif OPTION_LIMITED_API == "no": + cmake_cmd.append("-DFORCE_LIMITED_API=no") + elif not OPTION_LIMITED_API: + pass + else: + raise DistutilsSetupError("option limited-api must be 'yes' or 'no' " + "(default yes if applicable, i.e. python version >= 3.5)") + + if OPTION_VERBOSE_BUILD: + cmake_cmd.append("-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON") + + if OPTION_SANITIZE_ADDRESS: + # Some simple sanity checking. Only use at your own risk. + if (sys.platform.startswith('linux') or + sys.platform.startswith('darwin')): + cmake_cmd.append("-DSANITIZE_ADDRESS=ON") + else: + raise DistutilsSetupError("Address sanitizer can only be used " + "on Linux and macOS.") + + if extension.lower() == "pyside2": + pyside_qt_conf_prefix = '' + if OPTION_QT_CONF_PREFIX: + pyside_qt_conf_prefix = OPTION_QT_CONF_PREFIX + else: + if OPTION_STANDALONE: + pyside_qt_conf_prefix = '"Qt"' + if sys.platform == 'win32': + pyside_qt_conf_prefix = '"."' + cmake_cmd.append("-DPYSIDE_QT_CONF_PREFIX={}".format( + pyside_qt_conf_prefix)) + + # Pass package version to CMake, so this string can be + # embedded into _config.py file. + package_version = get_package_version() + cmake_cmd.append("-DPYSIDE_SETUP_PY_PACKAGE_VERSION={}".format( + package_version)) + + # In case if this is a snapshot build, also pass the + # timestamp as a separate value, because it the only + # version component that is actually generated by setup.py. + timestamp = '' + if OPTION_SNAPSHOT_BUILD: + timestamp = get_package_timestamp() + cmake_cmd.append("-DPYSIDE_SETUP_PY_PACKAGE_TIMESTAMP={}".format( + timestamp)) + + if extension.lower() in ["shiboken2", "pyside2-tools"]: + cmake_cmd.append("-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=yes") + if sys.version_info[0] > 2: + cmake_cmd.append("-DUSE_PYTHON_VERSION=3.3") + + if sys.platform == 'darwin': + if OPTION_MACOS_ARCH: + # also tell cmake which architecture to use + cmake_cmd.append("-DCMAKE_OSX_ARCHITECTURES:STRING={}".format( + OPTION_MACOS_ARCH)) + + if OPTION_MACOS_USE_LIBCPP: + # Explicitly link the libc++ standard library (useful + # for macOS deployment targets lower than 10.9). + # This is not on by default, because most libraries and + # executables on macOS <= 10.8 are linked to libstdc++, + # and mixing standard libraries can lead to crashes. + # On macOS >= 10.9 with a similar minimum deployment + # target, libc++ is linked in implicitly, thus the + # option is a no-op in those cases. + cmake_cmd.append("-DOSX_USE_LIBCPP=ON") + + if OPTION_MACOS_SYSROOT: + cmake_cmd.append("-DCMAKE_OSX_SYSROOT={}".format( + OPTION_MACOS_SYSROOT)) + else: + latest_sdk_path = run_process_output(['xcrun', + '--show-sdk-path']) + if latest_sdk_path: + latest_sdk_path = latest_sdk_path[0] + cmake_cmd.append("-DCMAKE_OSX_SYSROOT={}".format( + latest_sdk_path)) + + # Set macOS minimum deployment target (version). + # This is required so that calling + # run_process -> distutils.spawn() + # does not set its own minimum deployment target + # environment variable which is based on the python + # interpreter sysconfig value. + # Doing so could break the detected clang include paths + # for example. + deployment_target = \ + PysideBuild.macos_pyside_min_deployment_target() + cmake_cmd.append("-DCMAKE_OSX_DEPLOYMENT_TARGET={}".format( + deployment_target)) + os.environ['MACOSX_DEPLOYMENT_TARGET'] = deployment_target + + if not OPTION_SKIP_CMAKE: + log.info("Configuring module {} ({})...".format(extension, + module_src_dir)) + if run_process(cmake_cmd) != 0: + raise DistutilsSetupError("Error configuring {}".format( + extension)) + else: + log.info("Reusing old configuration for module {} ({})...".format( + extension, module_src_dir)) + + log.info("Compiling module {}...".format(extension)) + cmd_make = [self.make_path] + if OPTION_JOBS: + cmd_make.append(OPTION_JOBS) + if run_process(cmd_make) != 0: + raise DistutilsSetupError("Error compiling {}".format(extension)) + + if not OPTION_SKIP_DOCS: + if extension.lower() == "shiboken2": + try: + # Check if sphinx is installed to proceed. + import sphinx + + log.info("Generating Shiboken documentation") + if run_process([self.make_path, "doc"]) != 0: + raise DistutilsSetupError( + "Error generating documentation for {}".format( + extension)) + except ImportError: + log.info("Sphinx not found, skipping documentation build") + else: + log.info("Skipped documentation generation") + + + if not OPTION_SKIP_MAKE_INSTALL: + log.info("Installing module {}...".format(extension)) + # Need to wait a second, so installed file timestamps are + # older than build file timestamps. + # See https://gitlab.kitware.com/cmake/cmake/issues/16155 + # for issue details. + if sys.platform == 'darwin': + log.info("Waiting 1 second, to ensure installation is " + "successful...") + time.sleep(1) + if run_process([self.make_path, "install/fast"]) != 0: + raise DistutilsSetupError("Error pseudo installing {}".format( + extension)) + else: + log.info("Skipped installing module {}".format(extension)) + + os.chdir(self.script_dir) + + def prepare_packages(self): + try: + log.info("Preparing packages...") + vars = { + "site_packages_dir": self.site_packages_dir, + "sources_dir": self.sources_dir, + "install_dir": self.install_dir, + "build_dir": self.build_dir, + "script_dir": self.script_dir, + "pyside_package_dir": self.pyside_package_dir, + "ssl_libs_dir": OPTION_OPENSSL, + "py_version": self.py_version, + "qt_version": self.qtinfo.version, + "qt_bin_dir": self.qtinfo.bins_dir, + "qt_doc_dir": self.qtinfo.docs_dir, + "qt_lib_dir": self.qtinfo.libs_dir, + "qt_lib_execs_dir": self.qtinfo.lib_execs_dir, + "qt_plugins_dir": self.qtinfo.plugins_dir, + "qt_prefix_dir": self.qtinfo.prefix_dir, + "qt_translations_dir": self.qtinfo.translations_dir, + "qt_qml_dir": self.qtinfo.qml_dir, + "target_arch": self.py_arch, + } + os.chdir(self.script_dir) + + if sys.platform == "win32": + vars['dbg_postfix'] = OPTION_DEBUG and "_d" or "" + return prepare_packages_win32(self, vars) + else: + return prepare_packages_posix(self, vars) + except IOError as e: + print('setup.py/prepare_packages: ', e) + raise + + def qt_is_framework_build(self): + if os.path.isdir(self.qtinfo.headers_dir + "/../lib/QtCore.framework"): + return True + return False + + def get_built_pyside_config(self, vars): + # Get config that contains list of built modules, and + # SOVERSIONs of the built libraries. + pyside_package_dir = vars['pyside_package_dir'] + config_path = os.path.join(pyside_package_dir, "PySide2", "_config.py") + config = get_python_dict(config_path) + return config + + def is_webengine_built(self, built_modules): + return ('WebEngineWidgets' in built_modules or 'WebEngineCore' in built_modules + or 'WebEngine' in built_modules) + + def prepare_standalone_clang(self, is_win = False): + """ + Copies the libclang library to the pyside package so that + shiboken executable works. + """ + log.info('Finding path to the libclang shared library.') + cmake_cmd = [ + OPTION_CMAKE, + "-L", # Lists variables + "-N", # Just inspects the cache (faster) + "--build", # Specifies the build dir + self.shiboken_build_dir + ] + out = run_process_output(cmake_cmd) + lines = [s.strip() for s in out] + pattern = re.compile(r"CLANG_LIBRARY:FILEPATH=(.+)$") + + clang_lib_path = None + for line in lines: + match = pattern.search(line) + if match: + clang_lib_path = match.group(1) + break + + if not clang_lib_path: + raise RuntimeError("Could not find the location of the libclang " + "library inside the CMake cache file.") + + target_name = None + if is_win: + # clang_lib_path points to the static import library + # (lib/libclang.lib), whereas we want to copy the shared + # library (bin/libclang.dll). + clang_lib_path = re.sub(r'lib/libclang.lib$', 'bin/libclang.dll', + clang_lib_path) + else: + if sys.platform != 'darwin' and os.path.islink(clang_lib_path): + # On Linux, we get "libclang.so" from CMake which is + # a symlink: + # libclang.so -> libclang.so.6 -> libclang.so.6.0. + # shiboken2 links against libclang.so.6. So, we + # determine the target name by resolving just + # one symlink (note: os.path.realpath() resolves all). + target_name = os.readlink(clang_lib_path) + # We want to resolve any symlink on Linux and macOS, and + # copy the actual file. + clang_lib_path = os.path.realpath(clang_lib_path) + + if not target_name: + target_name = os.path.basename(clang_lib_path) + + # Path to directory containing libclang. + clang_lib_dir = os.path.dirname(clang_lib_path) + + # The destination will be the package folder near the other + # extension modules. + destination_dir = "{}/PySide2".format(os.path.join(self.script_dir, + 'pyside_package')) + if os.path.exists(clang_lib_path): + log.info('Copying libclang shared library {} to the package folder as {}.'.format( + clang_lib_path, target_name)) + basename = os.path.basename(clang_lib_path) + destination_path = os.path.join(destination_dir, target_name) + + # Need to modify permissions in case file is not writable + # (a reinstall would cause a permission denied error). + copyfile(clang_lib_path, destination_path, make_writable_by_owner=True) + else: + raise RuntimeError("Error copying libclang library " + "from {} to {}. ".format( + clang_lib_path, destination_dir)) + + def update_rpath(self, package_path, executables): + if sys.platform.startswith('linux'): + pyside_libs = [lib for lib in os.listdir( + package_path) if filter_match(lib, ["*.so", "*.so.*"])] + + def rpath_cmd(srcpath): + final_rpath = '' + # Command line rpath option takes precedence over + # automatically added one. + if OPTION_RPATH_VALUES: + final_rpath = OPTION_RPATH_VALUES + else: + # Add rpath values pointing to $ORIGIN and the + # installed qt lib directory. + local_rpath = '$ORIGIN/' + qt_lib_dir = self.qtinfo.libs_dir + if OPTION_STANDALONE: + qt_lib_dir = "$ORIGIN/Qt/lib" + final_rpath = local_rpath + ':' + qt_lib_dir + cmd = [self._patchelf_path, '--set-rpath', final_rpath, srcpath] + if run_process(cmd) != 0: + raise RuntimeError("Error patching rpath in " + srcpath) + + elif sys.platform == 'darwin': + pyside_libs = [lib for lib in os.listdir( + package_path) if filter_match(lib, ["*.so", "*.dylib"])] + def rpath_cmd(srcpath): + final_rpath = '' + # Command line rpath option takes precedence over + # automatically added one. + if OPTION_RPATH_VALUES: + final_rpath = OPTION_RPATH_VALUES + else: + if OPTION_STANDALONE: + final_rpath = "@loader_path/Qt/lib" + else: + final_rpath = self.qtinfo.libs_dir + macos_fix_rpaths_for_library(srcpath, final_rpath) + + else: + raise RuntimeError('Not configured for platform ' + + sys.platform) + + pyside_libs.extend(executables) + + # Update rpath in PySide2 libs + for srcname in pyside_libs: + srcpath = os.path.join(package_path, srcname) + if os.path.isdir(srcpath) or os.path.islink(srcpath): + continue + if not os.path.exists(srcpath): + continue + rpath_cmd(srcpath) + print("Patched rpath to '$ORIGIN/' (Linux) or " + "updated rpath (OS/X) in {}.".format(srcpath)) + + +try: + with open(os.path.join(setup_script_dir, 'README.rst')) as f: + README = f.read() + with open(os.path.join(setup_script_dir, 'CHANGES.rst')) as f: + CHANGES = f.read() +except IOError: + README = CHANGES = '' + + +cmd_class_dict = { + 'build': PysideBuild, + 'build_py': PysideBuildPy, + 'build_ext': PysideBuildExt, + 'bdist_egg': PysideBdistEgg, + 'develop': PysideDevelop, + 'install': PysideInstall, + 'install_lib': PysideInstallLib +} +if wheel_module_exists: + params = {} + params['qt_version'] = get_qt_version() + params['package_version'] = get_package_version() + if sys.platform == 'darwin': + params['macos_plat_name'] = PysideBuild.macos_plat_name() + pyside_bdist_wheel = get_bdist_wheel_override(params) + if pyside_bdist_wheel: + cmd_class_dict['bdist_wheel'] = pyside_bdist_wheel diff --git a/build_scripts/options.py b/build_scripts/options.py new file mode 100644 index 0000000..fd8b071 --- /dev/null +++ b/build_scripts/options.py @@ -0,0 +1,84 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +from .utils import has_option, option_value + +# Declare options +OPTION_DEBUG = has_option("debug") +OPTION_RELWITHDEBINFO = has_option('relwithdebinfo') +OPTION_QMAKE = option_value("qmake") +OPTION_QT_VERSION = option_value("qt") +OPTION_CMAKE = option_value("cmake") +OPTION_OPENSSL = option_value("openssl") +OPTION_ONLYPACKAGE = has_option("only-package") +OPTION_STANDALONE = has_option("standalone") +OPTION_MAKESPEC = option_value("make-spec") +OPTION_IGNOREGIT = has_option("ignore-git") +# don't generate documentation +OPTION_SKIP_DOCS = has_option("skip-docs") +# don't include pyside2-examples +OPTION_NOEXAMPLES = has_option("no-examples") +# number of parallel build jobs +OPTION_JOBS = option_value('jobs') +# Legacy, not used any more. +OPTION_JOM = has_option('jom') +# Do not use jom instead of nmake with msvc +OPTION_NO_JOM = has_option('no-jom') +OPTION_BUILDTESTS = has_option("build-tests") +OPTION_MACOS_ARCH = option_value("macos-arch") +OPTION_MACOS_USE_LIBCPP = has_option("macos-use-libc++") +OPTION_MACOS_SYSROOT = option_value("macos-sysroot") +OPTION_MACOS_DEPLOYMENT_TARGET = option_value("macos-deployment-target") +OPTION_XVFB = has_option("use-xvfb") +OPTION_REUSE_BUILD = has_option("reuse-build") +OPTION_SKIP_CMAKE = has_option("skip-cmake") +OPTION_SKIP_MAKE_INSTALL = has_option("skip-make-install") +OPTION_SKIP_PACKAGING = has_option("skip-packaging") +OPTION_SKIP_MODULES = option_value("skip-modules") +OPTION_MODULE_SUBSET = option_value("module-subset") +OPTION_RPATH_VALUES = option_value("rpath") +OPTION_QT_CONF_PREFIX = option_value("qt-conf-prefix") +OPTION_QT_SRC = option_value("qt-src-dir") +OPTION_VERBOSE_BUILD = has_option("verbose-build") +OPTION_SANITIZE_ADDRESS = has_option("sanitize-address") +OPTION_SNAPSHOT_BUILD = has_option("snapshot-build") +OPTION_LIMITED_API = option_value("limited-api") +OPTION_PACKAGE_TIMESTAMP = option_value("package-timestamp") diff --git a/build_scripts/platforms/__init__.py b/build_scripts/platforms/__init__.py new file mode 100644 index 0000000..571d374 --- /dev/null +++ b/build_scripts/platforms/__init__.py @@ -0,0 +1,38 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# diff --git a/build_scripts/platforms/linux.py b/build_scripts/platforms/linux.py new file mode 100644 index 0000000..4c38fef --- /dev/null +++ b/build_scripts/platforms/linux.py @@ -0,0 +1,112 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from ..options import * +from ..utils import copydir, copyfile, copy_icu_libs, find_files_using_glob + +def prepare_standalone_package_linux(self, executables, vars): + built_modules = vars['built_modules'] + + # /lib/* -> /PySide2/Qt/lib + destination_lib_dir = "{pyside_package_dir}/PySide2/Qt/lib" + copydir("{qt_lib_dir}", destination_lib_dir, + filter=[ + "libQt5*.so.?", + "libicu*.so.??", + ], + recursive=False, vars=vars, force_copy_symlinks=True) + + # Check if ICU libraries were copied over to the destination + # Qt libdir. + resolved_destination_lib_dir = destination_lib_dir.format(**vars) + maybe_icu_libs = find_files_using_glob(resolved_destination_lib_dir, + "libicu*") + + # If no ICU libraries are present in the Qt libdir (like when + # Qt is built against system ICU, or in the Coin CI where ICU + # libs are in a different directory) try to find out / resolve + # which ICU libs are used by QtCore (if used at all) using a + # custom written ldd, and copy the ICU libs to the Pyside Qt + # dir if necessary. We choose the QtCore lib to inspect, by + # checking which QtCore library the shiboken2 executable uses. + if not maybe_icu_libs: + copy_icu_libs(self._patchelf_path, resolved_destination_lib_dir) + + if self.is_webengine_built(built_modules): + copydir("{qt_lib_execs_dir}", + "{pyside_package_dir}/PySide2/Qt/libexec", + filter=None, + recursive=False, + vars=vars) + + copydir("{qt_prefix_dir}/resources", + "{pyside_package_dir}/PySide2/Qt/resources", + filter=None, + recursive=False, + vars=vars) + + # /plugins/* -> /PySide2/Qt/plugins + copydir("{qt_plugins_dir}", + "{pyside_package_dir}/PySide2/Qt/plugins", + filter=["*.so"], + recursive=True, + vars=vars) + + # /qml/* -> /PySide2/Qt/qml + copydir("{qt_qml_dir}", + "{pyside_package_dir}/PySide2/Qt/qml", + filter=None, + force=False, + recursive=True, + ignore=["*.so.debug"], + vars=vars) + + # /translations/* -> /PySide2/Qt/translations + + copydir("{qt_translations_dir}", + "{pyside_package_dir}/PySide2/Qt/translations", + filter=["*.qm", "*.pak"], + force=False, + vars=vars) + + # Copy the qt.conf file to libexec. + copyfile( + "{build_dir}/pyside2/PySide2/qt.conf", + "{pyside_package_dir}/PySide2/Qt/libexec", + vars=vars) diff --git a/build_scripts/platforms/macos.py b/build_scripts/platforms/macos.py new file mode 100644 index 0000000..936f4ca --- /dev/null +++ b/build_scripts/platforms/macos.py @@ -0,0 +1,182 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import fnmatch, os +from ..utils import copydir, copyfile, macos_fix_rpaths_for_library + +def prepare_standalone_package_macos(self, executables, vars): + built_modules = vars['built_modules'] + + # Directory filter for skipping unnecessary files. + def general_dir_filter(dir_name, parent_full_path, dir_full_path): + if fnmatch.fnmatch(dir_name, "*.dSYM"): + return False + return True + + # Filter out debug plugins and qml plugins in the + # debug_and_release config. + no_copy_debug = True + def file_variant_filter(file_name, file_full_path): + if self.qtinfo.build_type != 'debug_and_release': + return True + if file_name.endswith('_debug.dylib') and no_copy_debug: + return False + return True + + # /lib/* -> /PySide2/Qt/lib + if self.qt_is_framework_build(): + framework_built_modules = [ + 'Qt' + name + '.framework' for name in built_modules] + + def framework_dir_filter(dir_name, parent_full_path, + dir_full_path): + if '.framework' in dir_name: + if dir_name.startswith('QtWebEngine') and not \ + self.is_webengine_built(built_modules): + return False + if dir_name in ['Headers', 'fonts']: + return False + if dir_full_path.endswith('Versions/Current'): + return False + if dir_full_path.endswith('Versions/5/Resources'): + return False + if dir_full_path.endswith('Versions/5/Helpers'): + return False + return general_dir_filter(dir_name, parent_full_path, + dir_full_path) + + # Filter out debug frameworks in the + # debug_and_release config. + no_copy_debug = True + def framework_variant_filter(file_name, file_full_path): + if self.qtinfo.build_type != 'debug_and_release': + return True + dir_path = os.path.dirname(file_full_path) + in_framework = dir_path.endswith("Versions/5") + if file_name.endswith('_debug') and in_framework and no_copy_debug: + return False + return True + + copydir("{qt_lib_dir}", "{pyside_package_dir}/PySide2/Qt/lib", + recursive=True, vars=vars, + ignore=["*.la", "*.a", "*.cmake", "*.pc", "*.prl"], + dir_filter_function=framework_dir_filter, + file_filter_function=framework_variant_filter) + + # Fix rpath for WebEngine process executable. The already + # present rpath does not work because it assumes a symlink + # from Versions/5/Helpers, thus adding two more levels of + # directory hierarchy. + if self.is_webengine_built(built_modules): + qt_lib_path = "{pyside_package_dir}/PySide2/Qt/lib".format( + **vars) + bundle = "QtWebEngineCore.framework/Helpers/" + bundle += "QtWebEngineProcess.app" + binary = "Contents/MacOS/QtWebEngineProcess" + webengine_process_path = os.path.join(bundle, binary) + final_path = os.path.join(qt_lib_path, webengine_process_path) + rpath = "@loader_path/../../../../../" + macos_fix_rpaths_for_library(final_path, rpath) + else: + ignored_modules = [] + if not self.is_webengine_built(built_modules): + ignored_modules.extend(['libQt5WebEngine*.dylib']) + if 'WebKit' not in built_modules: + ignored_modules.extend(['libQt5WebKit*.dylib']) + accepted_modules = ['libQt5*.5.dylib'] + + copydir("{qt_lib_dir}", + "{pyside_package_dir}/PySide2/Qt/lib", + filter=accepted_modules, + ignore=ignored_modules, + file_filter_function=file_variant_filter, + recursive=True, vars=vars, force_copy_symlinks=True) + + if self.is_webengine_built(built_modules): + copydir("{qt_lib_execs_dir}", + "{pyside_package_dir}/PySide2/Qt/libexec", + filter=None, + recursive=False, + vars=vars) + + copydir("{qt_prefix_dir}/resources", + "{pyside_package_dir}/PySide2/Qt/resources", + filter=None, + recursive=False, + vars=vars) + + # Fix rpath for WebEngine process executable. + pyside_package_dir = vars['pyside_package_dir'] + qt_libexec_path = "{}/PySide2/Qt/libexec".format(pyside_package_dir) + binary = "QtWebEngineProcess" + final_path = os.path.join(qt_libexec_path, binary) + rpath = "@loader_path/../lib" + macos_fix_rpaths_for_library(final_path, rpath) + + # Copy the qt.conf file to libexec. + copyfile( + "{build_dir}/pyside2/PySide2/qt.conf", + "{pyside_package_dir}/PySide2/Qt/libexec", + vars=vars) + + # /plugins/* -> /PySide2/Qt/plugins + copydir("{qt_plugins_dir}", + "{pyside_package_dir}/PySide2/Qt/plugins", + filter=["*.dylib"], + recursive=True, + dir_filter_function=general_dir_filter, + file_filter_function=file_variant_filter, + vars=vars) + + # /qml/* -> /PySide2/Qt/qml + copydir("{qt_qml_dir}", + "{pyside_package_dir}/PySide2/Qt/qml", + filter=None, + recursive=True, + force=False, + dir_filter_function=general_dir_filter, + file_filter_function=file_variant_filter, + vars=vars) + + # /translations/* -> /PySide2/Qt/translations + copydir("{qt_translations_dir}", + "{pyside_package_dir}/PySide2/Qt/translations", + filter=["*.qm", "*.pak"], + force=False, + vars=vars) diff --git a/build_scripts/platforms/unix.py b/build_scripts/platforms/unix.py new file mode 100644 index 0000000..c93bbbb --- /dev/null +++ b/build_scripts/platforms/unix.py @@ -0,0 +1,167 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import os, re, sys +from .linux import prepare_standalone_package_linux +from .macos import prepare_standalone_package_macos +from ..options import * +from ..utils import copydir, copyfile, rmtree, makefile +from ..utils import regenerate_qt_resources + +def prepare_packages_posix(self, vars): + executables = [] + # /shiboken2/doc/html/* -> + # /PySide2/docs/shiboken2 + copydir( + "{build_dir}/shiboken2/doc/html", + "{pyside_package_dir}/PySide2/docs/shiboken2", + force=False, vars=vars) + # /lib/site-packages/PySide2/* -> /PySide2 + copydir( + "{site_packages_dir}/PySide2", + "{pyside_package_dir}/PySide2", + vars=vars) + # /lib/site-packages/shiboken2.so -> + # /PySide2/shiboken2.so + shiboken_module_name = 'shiboken2.so' + shiboken_src_path = "{site_packages_dir}".format(**vars) + maybe_shiboken_names = [f for f in os.listdir(shiboken_src_path) + if re.match(r'shiboken.*\.so', f)] + if maybe_shiboken_names: + shiboken_module_name = maybe_shiboken_names[0] + vars.update({'shiboken_module_name': shiboken_module_name}) + copyfile( + "{site_packages_dir}/{shiboken_module_name}", + "{pyside_package_dir}/PySide2/{shiboken_module_name}", + vars=vars) + # /lib/site-packages/pyside2uic/* -> + # /pyside2uic + copydir( + "{site_packages_dir}/pyside2uic", + "{pyside_package_dir}/pyside2uic", + force=False, vars=vars) + if sys.version_info[0] > 2: + rmtree("{pyside_package_dir}/pyside2uic/port_v2".format(**vars)) + else: + rmtree("{pyside_package_dir}/pyside2uic/port_v3".format(**vars)) + # /bin/pyside2-uic -> PySide2/scripts/uic.py + makefile( + "{pyside_package_dir}/PySide2/scripts/__init__.py", + vars=vars) + copyfile( + "{install_dir}/bin/pyside2-uic", + "{pyside_package_dir}/PySide2/scripts/uic.py", + force=False, vars=vars) + # /bin/* -> PySide2/ + executables.extend(copydir( + "{install_dir}/bin/", + "{pyside_package_dir}/PySide2", + filter=[ + "pyside2-lupdate", + "pyside2-rcc", + "shiboken2", + ], + recursive=False, vars=vars)) + # /lib/lib* -> PySide2/ + config = self.get_built_pyside_config(vars) + def adjusted_lib_name(name, version): + postfix = '' + if sys.platform.startswith('linux'): + postfix = '.so.' + version + elif sys.platform == 'darwin': + postfix = '.' + version + '.dylib' + return name + postfix + copydir( + "{install_dir}/lib/", + "{pyside_package_dir}/PySide2", + filter=[ + adjusted_lib_name("libpyside*", + config['pyside_library_soversion']), + adjusted_lib_name("libshiboken*", + config['shiboken_library_soversion']), + ], + recursive=False, vars=vars, force_copy_symlinks=True) + # /share/PySide2/typesystems/* -> + # /PySide2/typesystems + copydir( + "{install_dir}/share/PySide2/typesystems", + "{pyside_package_dir}/PySide2/typesystems", + vars=vars) + # /include/* -> /PySide2/include + copydir( + "{install_dir}/include", + "{pyside_package_dir}/PySide2/include", + vars=vars) + # /pyside2/PySide2/support/* -> + # /PySide2/support/* + copydir( + "{build_dir}/pyside2/PySide2/support", + "{pyside_package_dir}/PySide2/support", + vars=vars) + if not OPTION_NOEXAMPLES: + # examples/* -> /PySide2/examples + copydir(os.path.join(self.script_dir, "examples"), + "{pyside_package_dir}/PySide2/examples", + force=False, vars=vars) + # Re-generate examples Qt resource files for Python 3 + # compatibility + if sys.version_info[0] == 3: + examples_path = "{pyside_package_dir}/PySide2/examples".format( + **vars) + pyside_rcc_path = "{install_dir}/bin/pyside2-rcc".format( + **vars) + pyside_rcc_options = '-py3' + regenerate_qt_resources(examples_path, pyside_rcc_path, + pyside_rcc_options) + # Copy Qt libs to package + if OPTION_STANDALONE: + vars['built_modules'] = config['built_modules'] + if sys.platform == 'darwin': + prepare_standalone_package_macos(self, executables, vars) + else: + prepare_standalone_package_linux(self, executables, vars) + + # Copy over clang before rpath patching. + self.prepare_standalone_clang(is_win=False) + + # Update rpath to $ORIGIN + if (sys.platform.startswith('linux') or + sys.platform.startswith('darwin')): + self.update_rpath("{pyside_package_dir}/PySide2".format(**vars), + executables) diff --git a/build_scripts/platforms/windows_desktop.py b/build_scripts/platforms/windows_desktop.py new file mode 100644 index 0000000..3bf386a --- /dev/null +++ b/build_scripts/platforms/windows_desktop.py @@ -0,0 +1,365 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import functools +import os, re, sys +from ..options import * +from ..utils import copydir, copyfile, rmtree, makefile +from ..utils import regenerate_qt_resources, filter_match +from ..utils import download_and_extract_7z + +def prepare_packages_win32(self, vars): + # For now, debug symbols will not be shipped into the package. + copy_pdbs = False + pdbs = [] + if (self.debug or self.build_type == 'RelWithDebInfo') and copy_pdbs: + pdbs = ['*.pdb'] + # /lib/site-packages/PySide2/* -> /PySide2 + copydir( + "{site_packages_dir}/PySide2", + "{pyside_package_dir}/PySide2", + vars=vars) + built_modules = self.get_built_pyside_config(vars)['built_modules'] + + # /pyside2/PySide2/*.pdb -> /PySide2 + copydir( + "{build_dir}/pyside2/PySide2", + "{pyside_package_dir}/PySide2", + filter=pdbs, + recursive=False, vars=vars) + + # /shiboken2/doc/html/* -> + # /PySide2/docs/shiboken2 + copydir( + "{build_dir}/shiboken2/doc/html", + "{pyside_package_dir}/PySide2/docs/shiboken2", + force=False, vars=vars) + + # /lib/site-packages/shiboken2.pyd -> + # /PySide2/shiboken2.pyd + shiboken_module_name = 'shiboken2.pyd' + shiboken_src_path = "{site_packages_dir}".format(**vars) + maybe_shiboken_names = [f for f in os.listdir(shiboken_src_path) + if re.match(r'shiboken.*\.pyd', f)] + if maybe_shiboken_names: + shiboken_module_name = maybe_shiboken_names[0] + vars.update({'shiboken_module_name': shiboken_module_name}) + copyfile( + "{site_packages_dir}/{shiboken_module_name}", + "{pyside_package_dir}/PySide2/{shiboken_module_name}", + vars=vars) + # @TODO: Fix this .pdb file not to overwrite release + # {shibokengenerator}.pdb file. + # Task-number: PYSIDE-615 + copydir( + "{build_dir}/shiboken2/shibokenmodule", + "{pyside_package_dir}/PySide2", + filter=pdbs, + recursive=False, vars=vars) + + # /lib/site-packages/pyside2uic/* -> + # /pyside2uic + copydir( + "{site_packages_dir}/pyside2uic", + "{pyside_package_dir}/pyside2uic", + force=False, vars=vars) + if sys.version_info[0] > 2: + rmtree("{pyside_package_dir}/pyside2uic/port_v2".format(**vars)) + else: + rmtree("{pyside_package_dir}/pyside2uic/port_v3".format(**vars)) + + # /bin/pyside2-uic -> PySide2/scripts/uic.py + makefile( + "{pyside_package_dir}/PySide2/scripts/__init__.py", + vars=vars) + copyfile( + "{install_dir}/bin/pyside2-uic", + "{pyside_package_dir}/PySide2/scripts/uic.py", + force=False, vars=vars) + + # /bin/*.exe,*.dll,*.pdb -> PySide2/ + copydir( + "{install_dir}/bin/", + "{pyside_package_dir}/PySide2", + filter=["*.exe", "*.dll"], + recursive=False, vars=vars) + # @TODO: Fix this .pdb file not to overwrite release + # {shibokenmodule}.pdb file. + # Task-number: PYSIDE-615 + copydir( + "{build_dir}/shiboken2/generator", + "{pyside_package_dir}/PySide2", + filter=pdbs, + recursive=False, vars=vars) + + # /lib/*.lib -> PySide2/ + copydir( + "{install_dir}/lib/", + "{pyside_package_dir}/PySide2", + filter=["*.lib"], + recursive=False, vars=vars) + + # /share/PySide2/typesystems/* -> + # /PySide2/typesystems + copydir( + "{install_dir}/share/PySide2/typesystems", + "{pyside_package_dir}/PySide2/typesystems", + vars=vars) + + # /include/* -> /PySide2/include + copydir( + "{install_dir}/include", + "{pyside_package_dir}/PySide2/include", + vars=vars) + + # /pyside2/PySide2/support/* -> + # /PySide2/support/* + copydir( + "{build_dir}/pyside2/PySide2/support", + "{pyside_package_dir}/PySide2/support", + vars=vars) + + if not OPTION_NOEXAMPLES: + # examples/* -> /PySide2/examples + copydir(os.path.join(self.script_dir, "examples"), + "{pyside_package_dir}/PySide2/examples", + force=False, vars=vars) + # Re-generate examples Qt resource files for Python 3 + # compatibility + if sys.version_info[0] == 3: + examples_path = "{pyside_package_dir}/PySide2/examples".format( + **vars) + pyside_rcc_path = "{install_dir}/bin/pyside2-rcc".format( + **vars) + pyside_rcc_options = '-py3' + regenerate_qt_resources(examples_path, pyside_rcc_path, + pyside_rcc_options) + + # /* -> /PySide2/openssl + copydir("{ssl_libs_dir}", "{pyside_package_dir}/PySide2/openssl", + filter=[ + "libeay32.dll", + "ssleay32.dll"], + force=False, vars=vars) + + # /bin/*.dll and Qt *.exe -> /PySide2 + qt_artifacts_permanent = [ + "opengl*.dll", + "d3d*.dll", + "designer.exe", + "linguist.exe", + "lrelease.exe", + "lupdate.exe", + "lconvert.exe", + "qtdiag.exe" + ] + # MSVC redistributable + msvc_redist = [ + "concrt140.dll", + "msvcp140.dll", + "ucrtbase.dll", + "vcamp140.dll", + "vccorlib140.dll", + "vcomp140.dll" , + "vcruntime140.dll" + ] + + # Choose which EGL library variants to copy. + qt_artifacts_egl = [ + "libEGL{}.dll", + "libGLESv2{}.dll" + ] + if self.qtinfo.build_type != 'debug_and_release': + egl_suffix = '*' + elif self.debug: + egl_suffix = 'd' + else: + egl_suffix = '' + qt_artifacts_egl = [a.format(egl_suffix) for a in qt_artifacts_egl] + qt_artifacts_permanent += qt_artifacts_egl + qt_artifacts_permanent += msvc_redist + + # Extract Qt dependency dll's when building on Qt CI + # There is no proper CI env variable, so using agent launch params + in_coin = os.environ.get('COIN_LAUNCH_PARAMETERS', None) + if in_coin is not None: + redist_url = "http://download.qt.io/development_releases/prebuilt/vcredist//" + zip_file = "pyside_qt_deps_64.7z" + if "{target_arch}".format(**vars) == "32": + zip_file = "pyside_qt_deps_32.7z" + download_and_extract_7z(redist_url + zip_file, "{qt_bin_dir}".format(**vars)) + + copydir("{qt_bin_dir}", "{pyside_package_dir}/PySide2", + filter=qt_artifacts_permanent, + recursive=False, vars=vars) + + # /bin/*.dll and Qt *.pdbs -> /PySide2 part two + # File filter to copy only debug or only release files. + qt_dll_patterns = ["Qt5*{}.dll", "lib*{}.dll"] + if copy_pdbs: + qt_dll_patterns += ["Qt5*{}.pdb", "lib*{}.pdb"] + def qt_build_config_filter(patterns, file_name, file_full_path): + release = [a.format('') for a in patterns] + debug = [a.format('d') for a in patterns] + + # If qt is not a debug_and_release build, that means there + # is only one set of shared libraries, so we can just copy + # them. + if self.qtinfo.build_type != 'debug_and_release': + if filter_match(file_name, release): + return True + return False + + # In debug_and_release case, choosing which files to copy + # is more difficult. We want to copy only the files that + # match the PySide2 build type. So if PySide2 is built in + # debug mode, we want to copy only Qt debug libraries + # (ending with "d.dll"). Or vice versa. The problem is that + # some libraries have "d" as the last character of the + # actual library name (for example Qt5Gamepad.dll and + # Qt5Gamepadd.dll). So we can't just match a pattern ending + # in "d". Instead we check if there exists a file with the + # same name plus an additional "d" at the end, and using + # that information we can judge if the currently processed + # file is a debug or release file. + + # e.g. ["Qt5Cored", ".dll"] + file_split = os.path.splitext(file_name) + file_base_name = file_split[0] + file_ext = file_split[1] + # e.g. "/home/work/qt/qtbase/bin" + file_path_dir_name = os.path.dirname(file_full_path) + # e.g. "Qt5Coredd" + maybe_debug_name = file_base_name + 'd' + if self.debug: + filter = debug + def predicate(path): return not os.path.exists(path) + else: + filter = release + def predicate(path): return os.path.exists(path) + # e.g. "/home/work/qt/qtbase/bin/Qt5Coredd.dll" + other_config_path = os.path.join(file_path_dir_name, + maybe_debug_name + file_ext) + + if (filter_match(file_name, filter) and + predicate(other_config_path)): + return True + return False + + qt_dll_filter = functools.partial(qt_build_config_filter, + qt_dll_patterns) + copydir("{qt_bin_dir}", "{pyside_package_dir}/PySide2", + file_filter_function=qt_dll_filter, + recursive=False, vars=vars) + + # /plugins/* -> /PySide2/plugins + plugin_dll_patterns = ["*{}.dll"] + pdb_pattern = "*{}.pdb" + if copy_pdbs: + plugin_dll_patterns += [pdb_pattern] + plugin_dll_filter = functools.partial(qt_build_config_filter, + plugin_dll_patterns) + copydir("{qt_plugins_dir}", "{pyside_package_dir}/PySide2/plugins", + file_filter_function=plugin_dll_filter, + vars=vars) + + # /translations/* -> /PySide2/translations + copydir("{qt_translations_dir}", + "{pyside_package_dir}/PySide2/translations", + filter=["*.qm", "*.pak"], + force=False, + vars=vars) + + # /qml/* -> /PySide2/qml + qml_dll_patterns = ["*{}.dll"] + qml_ignore_patterns = qml_dll_patterns + [pdb_pattern] + qml_ignore = [a.format('') for a in qml_ignore_patterns] + + # Copy all files that are not dlls and pdbs (.qml, qmldir). + copydir("{qt_qml_dir}", "{pyside_package_dir}/PySide2/qml", + ignore=qml_ignore, + force=False, + recursive=True, + vars=vars) + + if copy_pdbs: + qml_dll_patterns += [pdb_pattern] + qml_dll_filter = functools.partial(qt_build_config_filter, + qml_dll_patterns) + + # Copy all dlls (and possibly pdbs). + copydir("{qt_qml_dir}", "{pyside_package_dir}/PySide2/qml", + file_filter_function=qml_dll_filter, + force=False, + recursive=True, + vars=vars) + + if self.is_webengine_built(built_modules): + copydir("{qt_prefix_dir}/resources", + "{pyside_package_dir}/PySide2/resources", + filter=None, + recursive=False, + vars=vars) + + filter = 'QtWebEngineProcess{}.exe'.format( + 'd' if self.debug else '') + copydir("{qt_bin_dir}", + "{pyside_package_dir}/PySide2", + filter=[filter], + recursive=False, vars=vars) + + # Copy the qt.conf file to prefix dir. + copyfile( + "{build_dir}/pyside2/PySide2/qt.conf", + "{pyside_package_dir}/PySide2", + vars=vars) + + self.prepare_standalone_clang(is_win=True) + + # pdb files for libshiboken and libpyside + copydir( + "{build_dir}/shiboken2/libshiboken", + "{pyside_package_dir}/PySide2", + filter=pdbs, + recursive=False, vars=vars) + copydir( + "{build_dir}/pyside2/libpyside", + "{pyside_package_dir}/PySide2", + filter=pdbs, + recursive=False, vars=vars) diff --git a/build_scripts/qtinfo.py b/build_scripts/qtinfo.py new file mode 100644 index 0000000..fbe8e68 --- /dev/null +++ b/build_scripts/qtinfo.py @@ -0,0 +1,237 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import os, sys, re, subprocess +from distutils.spawn import find_executable + +class QtInfo(object): + def __init__(self, qmake_command=None): + self.initialized = False + + if qmake_command: + self._qmake_command = qmake_command + else: + self._qmake_command = [find_executable("qmake"),] + + # Dict to cache qmake values. + self._query_dict = {} + # Dict to cache mkspecs variables. + self._mkspecs_dict = {} + # Initialize the properties. + self._init_properties() + + def get_qmake_command(self): + qmake_command_string = self._qmake_command[0] + for entry in self._qmake_command[1:]: + qmake_command_string += " {}".format(entry) + return qmake_command_string + + def get_version(self): + return self.get_property("QT_VERSION") + + def get_bins_path(self): + return self.get_property("QT_INSTALL_BINS") + + def get_libs_path(self): + return self.get_property("QT_INSTALL_LIBS") + + def get_libs_execs_path(self): + return self.get_property("QT_INSTALL_LIBEXECS") + + def get_plugins_path(self): + return self.get_property("QT_INSTALL_PLUGINS") + + def get_prefix_path(self): + return self.get_property("QT_INSTALL_PREFIX") + + def get_imports_path(self): + return self.get_property("QT_INSTALL_IMPORTS") + + def get_translations_path(self): + return self.get_property("QT_INSTALL_TRANSLATIONS") + + def get_headers_path(self): + return self.get_property("QT_INSTALL_HEADERS") + + def get_docs_path(self): + return self.get_property("QT_INSTALL_DOCS") + + def get_qml_path(self): + return self.get_property("QT_INSTALL_QML") + + def get_macos_deployment_target(self): + """ Return value is a macOS version or None. """ + return self.get_property("QMAKE_MACOSX_DEPLOYMENT_TARGET") + + def get_build_type(self): + """ + Return value is either debug, release, debug_release, or None. + """ + return self.get_property("BUILD_TYPE") + + def get_src_dir(self): + """ Return path to Qt src dir or None.. """ + return self.get_property("QT_INSTALL_PREFIX/src") + + def get_property(self, prop_name): + if prop_name not in self._query_dict: + return None + return self._query_dict[prop_name] + + def get_properties(self): + return self._query_dict + + def get_mkspecs_variables(self): + return self._mkspecs_dict + + def _get_qmake_output(self, args_list = []): + cmd = self._qmake_command + args_list + proc = subprocess.Popen(cmd, stdout = subprocess.PIPE, shell=False) + output = proc.communicate()[0] + proc.wait() + if proc.returncode != 0: + return None + if sys.version_info >= (3,): + output = str(output, 'ascii').strip() + else: + output = output.strip() + return output + + def _parse_query_properties(self, process_output): + props = {} + if not process_output: + return props + lines = [s.strip() for s in process_output.splitlines()] + for line in lines: + if line and ':' in line: + key, value = line.split(':', 1) + props[key] = value + return props + + def _get_query_properties(self): + output = self._get_qmake_output(['-query']) + self._query_dict = self._parse_query_properties(output) + + def _parse_qt_build_type(self): + key = 'QT_CONFIG' + if key not in self._mkspecs_dict: + return None + + qt_config = self._mkspecs_dict[key] + if 'debug_and_release' in qt_config: + return 'debug_and_release' + + split = qt_config.split(' ') + if 'release' in split and 'debug' in split: + return 'debug_and_release' + + if 'release' in split: + return 'release' + + if 'debug' in split: + return 'debug' + + return None + + def _get_other_properties(self): + # Get the src property separately, because it is not returned by + # qmake unless explicitly specified. + key = 'QT_INSTALL_PREFIX/src' + result = self._get_qmake_output(['-query', key]) + self._query_dict[key] = result + + # Get mkspecs variables and cache them. + self._get_qmake_mkspecs_variables() + + # Get macOS minimum deployment target. + key = 'QMAKE_MACOSX_DEPLOYMENT_TARGET' + if key in self._mkspecs_dict: + self._query_dict[key] = self._mkspecs_dict[key] + + # Figure out how Qt was built: + # debug mode, release mode, or both. + build_type = self._parse_qt_build_type() + if build_type: + self._query_dict['BUILD_TYPE'] = build_type + + def _init_properties(self): + self._get_query_properties() + self._get_other_properties() + + def _get_qmake_mkspecs_variables(self): + # Create empty temporary qmake project file. + temp_file_name = 'qmake_fake_empty_project.txt' + open(temp_file_name, 'a').close() + + # Query qmake for all of its mkspecs variables. + qmake_output = self._get_qmake_output(['-E', temp_file_name]) + lines = [s.strip() for s in qmake_output.splitlines()] + pattern = re.compile(r"^(.+?)=(.+?)$") + for line in lines: + found = pattern.search(line) + if found: + key = found.group(1).strip() + value = found.group(2).strip() + self._mkspecs_dict[key] = value + + # We need to clean up after qmake, which always creates a + # .qmake.stash file after a -E invocation. + qmake_stash_file = os.path.join(os.getcwd(), ".qmake.stash") + if os.path.exists(qmake_stash_file): + os.remove(qmake_stash_file) + + # Also clean up the temporary empty project file. + if os.path.exists(temp_file_name): + os.remove(temp_file_name) + + version = property(get_version) + bins_dir = property(get_bins_path) + libs_dir = property(get_libs_path) + lib_execs_dir = property(get_libs_execs_path) + plugins_dir = property(get_plugins_path) + prefix_dir = property(get_prefix_path) + qmake_command = property(get_qmake_command) + imports_dir = property(get_imports_path) + translations_dir = property(get_translations_path) + headers_dir = property(get_headers_path) + docs_dir = property(get_docs_path) + qml_dir = property(get_qml_path) + macos_min_deployment_target = property(get_macos_deployment_target) + build_type = property(get_build_type) + src_dir = property(get_src_dir) diff --git a/build_scripts/utils.py b/build_scripts/utils.py new file mode 100644 index 0000000..4c23a62 --- /dev/null +++ b/build_scripts/utils.py @@ -0,0 +1,1126 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +import os +import stat +import re +import stat +import errno +import time +import shutil +import subprocess +import fnmatch +import glob +import itertools +import popenasync +import glob + +# There is no urllib.request in Python2 +try: + import urllib.request as urllib +except ImportError: + import urllib + +from distutils import log +from distutils.errors import DistutilsOptionError +from distutils.errors import DistutilsSetupError +from distutils.spawn import spawn +from distutils.spawn import DistutilsExecError + +try: + WindowsError +except NameError: + WindowsError = None + + +def has_option(name): + try: + sys.argv.remove("--{}".format(name)) + return True + except ValueError: + pass + return False + + +def option_value(name): + for index, option in enumerate(sys.argv): + if option == '--' + name: + if index+1 >= len(sys.argv): + raise DistutilsOptionError("The option {} requires a " + "value".format(option)) + value = sys.argv[index+1] + sys.argv[index:index+2] = [] + return value + if option.startswith('--' + name + '='): + value = option[len(name)+3:] + sys.argv[index:index+1] = [] + return value + env_val = os.getenv(name.upper().replace('-', '_')) + return env_val + + +def filter_match(name, patterns): + for pattern in patterns: + if pattern is None: + continue + if fnmatch.fnmatch(name, pattern): + return True + return False + + +def update_env_path(newpaths): + paths = os.environ['PATH'].lower().split(os.pathsep) + for path in newpaths: + if not path.lower() in paths: + log.info("Inserting path '{}' to environment".format(path)) + paths.insert(0, path) + os.environ['PATH'] = path + os.pathsep + os.environ['PATH'] + + +def winsdk_setenv(platform_arch, build_type): + from distutils.msvc9compiler import VERSION as MSVC_VERSION + from distutils.msvc9compiler import Reg + from distutils.msvc9compiler import HKEYS + from distutils.msvc9compiler import WINSDK_BASE + + sdk_version_map = { + "v6.0a": 9.0, + "v6.1": 9.0, + "v7.0": 9.0, + "v7.0a": 10.0, + "v7.1": 10.0 + } + + log.info("Searching Windows SDK with MSVC compiler version {}".format( + MSVC_VERSION)) + setenv_paths = [] + for base in HKEYS: + sdk_versions = Reg.read_keys(base, WINSDK_BASE) + if sdk_versions: + for sdk_version in sdk_versions: + installationfolder = Reg.get_value(WINSDK_BASE + "\\" + + sdk_version, "installationfolder") + productversion = Reg.get_value(WINSDK_BASE + "\\" + + sdk_version, "productversion") + setenv_path = os.path.join(installationfolder, os.path.join( + 'bin', 'SetEnv.cmd')) + if not os.path.exists(setenv_path): + continue + if not sdk_version in sdk_version_map: + continue + if sdk_version_map[sdk_version] != MSVC_VERSION: + continue + setenv_paths.append(setenv_path) + if len(setenv_paths) == 0: + raise DistutilsSetupError( + "Failed to find the Windows SDK with MSVC compiler " + "version {}".format(MSVC_VERSION)) + for setenv_path in setenv_paths: + log.info("Found {}".format(setenv_path)) + + # Get SDK env (use latest SDK version installed on system) + setenv_path = setenv_paths[-1] + log.info("Using {} ".format(setenv_path)) + build_arch = "/x86" if platform_arch.startswith("32") else "/x64" + build_type = "/Debug" if build_type.lower() == "debug" else "/Release" + setenv_cmd = [setenv_path, build_arch, build_type] + setenv_env = get_environment_from_batch_command(setenv_cmd) + setenv_env_paths = os.pathsep.join([setenv_env[k] for k in setenv_env if k.upper() == 'PATH']).split(os.pathsep) + setenv_env_without_paths = dict([(k, setenv_env[k]) for k in setenv_env if k.upper() != 'PATH']) + + # Extend os.environ with SDK env + log.info("Initializing Windows SDK env...") + update_env_path(setenv_env_paths) + for k in sorted(setenv_env_without_paths): + v = setenv_env_without_paths[k] + log.info("Inserting '{} = {}' to environment".format(k, v)) + os.environ[k] = v + log.info("Done initializing Windows SDK env") + + +def find_vcdir(version): + """ + This is the customized version of + distutils.msvc9compiler.find_vcvarsall method + """ + from distutils.msvc9compiler import VS_BASE + from distutils.msvc9compiler import Reg + from distutils import log + vsbase = VS_BASE % version + try: + productdir = Reg.get_value(r"{}\Setup\VC".format(vsbase), "productdir") + except KeyError: + productdir = None + + # trying Express edition + if productdir is None: + try: + from distutils.msvc9compiler import VSEXPRESS_BASE + except ImportError: + pass + else: + vsbase = VSEXPRESS_BASE % version + try: + productdir = Reg.get_value(r"{}\Setup\VC".format(vsbase), + "productdir") + except KeyError: + productdir = None + log.debug("Unable to find productdir in registry") + + if not productdir or not os.path.isdir(productdir): + toolskey = "VS%0.f0COMNTOOLS" % version + toolsdir = os.environ.get(toolskey, None) + + if toolsdir and os.path.isdir(toolsdir): + productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC") + productdir = os.path.abspath(productdir) + if not os.path.isdir(productdir): + log.debug("{} is not a valid directory".format(productdir)) + return None + else: + log.debug("Env var {} is not set or invalid".format(toolskey)) + if not productdir: + log.debug("No productdir found") + return None + return productdir + + +def init_msvc_env(platform_arch, build_type): + from distutils.msvc9compiler import VERSION as MSVC_VERSION + + log.info("Searching MSVC compiler version {}".format(MSVC_VERSION)) + vcdir_path = find_vcdir(MSVC_VERSION) + if not vcdir_path: + raise DistutilsSetupError( + "Failed to find the MSVC compiler version {} on your " + "system.".format(MSVC_VERSION)) + else: + log.info("Found {}".format(vcdir_path)) + + log.info("Searching MSVC compiler {} environment init script".format( + MSVC_VERSION)) + if platform_arch.startswith("32"): + vcvars_path = os.path.join(vcdir_path, "bin", "vcvars32.bat") + else: + vcvars_path = os.path.join(vcdir_path, "bin", "vcvars64.bat") + if not os.path.exists(vcvars_path): + vcvars_path = os.path.join(vcdir_path, "bin", "amd64", + "vcvars64.bat") + if not os.path.exists(vcvars_path): + vcvars_path = os.path.join(vcdir_path, "bin", "amd64", + "vcvarsamd64.bat") + + if not os.path.exists(vcvars_path): + # MSVC init script not found, try to find and init Windows SDK env + log.error("Failed to find the MSVC compiler environment init script " + "(vcvars.bat) on your system.") + winsdk_setenv(platform_arch, build_type) + return + else: + log.info("Found {}".format(vcvars_path)) + + # Get MSVC env + log.info("Using MSVC {} in {}".format(MSVC_VERSION, vcvars_path)) + msvc_arch = "x86" if platform_arch.startswith("32") else "amd64" + log.info("Getting MSVC env for {} architecture".format(msvc_arch)) + vcvars_cmd = [vcvars_path, msvc_arch] + msvc_env = get_environment_from_batch_command(vcvars_cmd) + msvc_env_paths = os.pathsep.join([msvc_env[k] for k in msvc_env if k.upper() == 'PATH']).split(os.pathsep) + msvc_env_without_paths = dict([(k, msvc_env[k]) for k in msvc_env if k.upper() != 'PATH']) + + # Extend os.environ with MSVC env + log.info("Initializing MSVC env...") + update_env_path(msvc_env_paths) + for k in sorted(msvc_env_without_paths): + v = msvc_env_without_paths[k] + log.info("Inserting '{} = {}' to environment".format(k, v)) + os.environ[k] = v + log.info("Done initializing MSVC env") + + +def copyfile(src, dst, force=True, vars=None, force_copy_symlink=False, + make_writable_by_owner=False): + if vars is not None: + src = src.format(**vars) + dst = dst.format(**vars) + + if not os.path.exists(src) and not force: + log.info("**Skiping copy file {} to {}. " + "Source does not exists.".format(src, dst)) + return + + if not os.path.islink(src) or force_copy_symlink: + log.info("Copying file {} to {}.".format(src, dst)) + shutil.copy2(src, dst) + if make_writable_by_owner: + make_file_writable_by_owner(dst) + + else: + link_target_path = os.path.realpath(src) + if os.path.dirname(link_target_path) == os.path.dirname(src): + link_target = os.path.basename(link_target_path) + link_name = os.path.basename(src) + current_directory = os.getcwd() + try: + target_dir = dst if os.path.isdir(dst) else os.path.dirname(dst) + os.chdir(target_dir) + if os.path.exists(link_name): + os.remove(link_name) + log.info("Symlinking {} -> {} in {}.".format(link_name, + link_target, target_dir)) + os.symlink(link_target, link_name) + except OSError: + log.error("{} -> {}: Error creating symlink".format(link_name, + link_target)) + finally: + os.chdir(current_directory) + else: + log.error("{} -> {}: Can only create symlinks within the same " + "directory".format(src, link_target_path)) + + return dst + + +def makefile(dst, content=None, vars=None): + if vars is not None: + if content is not None: + content = content.format(**vars) + dst = dst.format(**vars) + + log.info("Making file {}.".format(dst)) + + dstdir = os.path.dirname(dst) + if not os.path.exists(dstdir): + os.makedirs(dstdir) + + f = open(dst, "wt") + if content is not None: + f.write(content) + f.close() + + +def copydir(src, dst, filter=None, ignore=None, force=True, recursive=True, + vars=None, dir_filter_function=None, file_filter_function=None, + force_copy_symlinks=False): + + if vars is not None: + src = src.format(**vars) + dst = dst.format(**vars) + if filter is not None: + for i in range(len(filter)): + filter[i] = filter[i].format(**vars) + if ignore is not None: + for i in range(len(ignore)): + ignore[i] = ignore[i].format(**vars) + + if not os.path.exists(src) and not force: + log.info("**Skiping copy tree {} to {}. Source does not exists. " + "filter={}. ignore={}.".format(src, dst, filter, ignore)) + return [] + + log.info("Copying tree {} to {}. filter={}. ignore={}.".format(src, dst, + filter, ignore)) + + names = os.listdir(src) + + results = [] + errors = [] + for name in names: + srcname = os.path.join(src, name) + dstname = os.path.join(dst, name) + try: + if os.path.isdir(srcname): + if (dir_filter_function and + not dir_filter_function(name, src, srcname)): + continue + if recursive: + results.extend( + copydir(srcname, dstname, filter, ignore, force, + recursive, vars, dir_filter_function, + file_filter_function, force_copy_symlinks)) + else: + if ((file_filter_function is not None and + not file_filter_function(name, srcname)) or + (filter is not None and + not filter_match(name, filter)) or + (ignore is not None and filter_match(name, ignore))): + continue + if not os.path.exists(dst): + os.makedirs(dst) + results.append(copyfile(srcname, dstname, True, vars, + force_copy_symlinks)) + # catch the Error from the recursive copytree so that we can + # continue with other files + except shutil.Error as err: + errors.extend(err.args[0]) + except EnvironmentError as why: + errors.append((srcname, dstname, str(why))) + try: + if os.path.exists(dst): + shutil.copystat(src, dst) + except OSError as why: + if WindowsError is not None and isinstance(why, WindowsError): + # Copying file access times may fail on Windows + pass + else: + errors.extend((src, dst, str(why))) + if errors: + raise EnvironmentError(errors) + return results + +def make_file_writable_by_owner(path): + current_permissions = stat.S_IMODE(os.lstat(path).st_mode) + os.chmod(path, current_permissions | stat.S_IWUSR) + +def rmtree(dirname, ignore=False): + def handle_remove_readonly(func, path, exc): + excvalue = exc[1] + if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES: + os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) # 0777 + func(path) + else: + raise + shutil.rmtree(dirname, ignore_errors=ignore, onerror=handle_remove_readonly) + +def run_process_output(args, initial_env=None): + if initial_env is None: + initial_env = os.environ + std_out = subprocess.Popen(args, env = initial_env, universal_newlines = 1, + stdout=subprocess.PIPE).stdout + result = [] + for raw_line in std_out.readlines(): + line = raw_line if sys.version_info >= (3,) else raw_line.decode('utf-8') + result.append(line.rstrip()) + return result + +def run_process(args, initial_env=None): + def _log(buffer, check_new_line=False): + ends_with_new_line = False + if buffer.endswith('\n'): + ends_with_new_line = True + if check_new_line and buffer.find('\n') == -1: + return buffer + lines = buffer.splitlines() + buffer = '' + if check_new_line and not ends_with_new_line: + buffer = lines[-1] + lines = lines[:-1] + for line in lines: + log.info(line.rstrip('\r')) + return buffer + _log("Running process in {0}: {1}".format(os.getcwd(), + " ".join([(" " in x and '"{0}"'.format(x) or x) for x in args]))) + + if sys.platform != "win32": + try: + spawn(args) + return 0 + except DistutilsExecError: + return -1 + + shell = False + if sys.platform == "win32": + shell = True + + if initial_env is None: + initial_env = os.environ + + proc = popenasync.Popen(args, + stdin = subprocess.PIPE, + stdout = subprocess.PIPE, + stderr = subprocess.STDOUT, + universal_newlines = 1, + shell = shell, + env = initial_env) + + log_buffer = None; + while proc.poll() is None: + log_buffer = _log(proc.read_async(wait=0.1, e=0)) + if log_buffer: + _log(log_buffer) + + proc.wait() + return proc.returncode + + +def get_environment_from_batch_command(env_cmd, initial=None): + """ + Take a command (either a single command or list of arguments) + and return the environment created after running that command. + Note that if the command must be a batch file or .cmd file, or the + changes to the environment will not be captured. + + If initial is supplied, it is used as the initial environment passed + to the child process. + """ + + def validate_pair(ob): + try: + if not (len(ob) == 2): + print("Unexpected result: {}".format(ob)) + raise ValueError + except: + return False + return True + + def consume(iter): + try: + while True: next(iter) + except StopIteration: + pass + + if not isinstance(env_cmd, (list, tuple)): + env_cmd = [env_cmd] + # construct the command that will alter the environment + env_cmd = subprocess.list2cmdline(env_cmd) + # create a tag so we can tell in the output when the proc is done + tag = 'Done running command' + # construct a cmd.exe command to do accomplish this + cmd = 'cmd.exe /E:ON /V:ON /s /c "{} && echo "{}" && set"'.format(env_cmd, + tag) + # launch the process + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, env=initial) + # parse the output sent to stdout + lines = proc.stdout + if sys.version_info[0] > 2: + # make sure the lines are strings + make_str = lambda s: s.decode() + lines = map(make_str, lines) + # consume whatever output occurs until the tag is reached + consume(itertools.takewhile(lambda l: tag not in l, lines)) + # define a way to handle each KEY=VALUE line + handle_line = lambda l: l.rstrip().split('=',1) + # parse key/values into pairs + pairs = map(handle_line, lines) + # make sure the pairs are valid + valid_pairs = filter(validate_pair, pairs) + # construct a dictionary of the pairs + result = dict(valid_pairs) + # let the process finish + proc.communicate() + return result + + +def regenerate_qt_resources(src, pyside_rcc_path, pyside_rcc_options): + names = os.listdir(src) + for name in names: + srcname = os.path.join(src, name) + if os.path.isdir(srcname): + regenerate_qt_resources(srcname, + pyside_rcc_path, + pyside_rcc_options) + elif srcname.endswith('.qrc'): + # Replace last occurence of '.qrc' in srcname + srcname_split = srcname.rsplit('.qrc', 1) + dstname = '_rc.py'.join(srcname_split) + if os.path.exists(dstname): + log.info('Regenerating {} from {}'.format(dstname, + os.path.basename(srcname))) + run_process([pyside_rcc_path, + pyside_rcc_options, + srcname, '-o', dstname]) + + +def back_tick(cmd, ret_err=False): + """ + Run command `cmd`, return stdout, or stdout, stderr, + return_code if `ret_err` is True. + + Roughly equivalent to ``check_output`` in Python 2.7 + + Parameters + ---------- + cmd : str + command to execute + ret_err : bool, optional + If True, return stderr and return_code in addition to stdout. + If False, just return stdout + + Returns + ------- + out : str or tuple + If `ret_err` is False, return stripped string containing stdout from + `cmd`. + If `ret_err` is True, return tuple of (stdout, stderr, return_code) + where ``stdout`` is the stripped stdout, and ``stderr`` is the stripped + stderr, and ``return_code`` is the process exit code. + + Raises + ------ + Raises RuntimeError if command returns non-zero exit code when ret_err + isn't set. + """ + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, shell=True) + out, err = proc.communicate() + if not isinstance(out, str): + # python 3 + out = out.decode() + err = err.decode() + retcode = proc.returncode + if retcode is None and not ret_err: + proc.terminate() + raise RuntimeError(cmd + ' process did not terminate') + if retcode != 0 and not ret_err: + raise RuntimeError("{} process returned code {}\n*** {}".format( + (cmd, retcode, err))) + out = out.strip() + if not ret_err: + return out + return out, err.strip(), retcode + + +MACOS_OUTNAME_RE = re.compile(r'\(compatibility version [\d.]+, current version ' + '[\d.]+\)') + +def macos_get_install_names(libpath): + """ + Get macOS library install names from library `libpath` using ``otool`` + + Parameters + ---------- + libpath : str + path to library + + Returns + ------- + install_names : list of str + install names in library `libpath` + """ + out = back_tick('otool -L ' + libpath) + libs = [line for line in out.split('\n')][1:] + return [MACOS_OUTNAME_RE.sub('', lib).strip() for lib in libs] + + +MACOS_RPATH_RE = re.compile(r"path (.+) \(offset \d+\)") + +def macos_get_rpaths(libpath): + """ Get rpath load commands from library `libpath` using ``otool`` + + Parameters + ---------- + libpath : str + path to library + + Returns + ------- + rpaths : list of str + rpath values stored in ``libpath`` + + Notes + ----- + See ``man dyld`` for more information on rpaths in libraries + """ + lines = back_tick('otool -l ' + libpath).split('\n') + ctr = 0 + rpaths = [] + while ctr < len(lines): + line = lines[ctr].strip() + if line != 'cmd LC_RPATH': + ctr += 1 + continue + assert lines[ctr + 1].strip().startswith('cmdsize') + rpath_line = lines[ctr + 2].strip() + match = MACOS_RPATH_RE.match(rpath_line) + if match is None: + raise RuntimeError('Unexpected path line: ' + rpath_line) + rpaths.append(match.groups()[0]) + ctr += 3 + return rpaths + + +def macos_fix_rpaths_for_library(library_path, qt_lib_dir): + """ Adds required rpath load commands to given library. + + This is a necessary post-installation step, to allow loading PySide + modules without setting DYLD_LIBRARY_PATH or DYLD_FRAMEWORK_PATH. + The CMake rpath commands which are added at build time are used only + for testing (make check), and they are stripped once the equivalent + of make install is executed (except for shiboken, which currently + uses CMAKE_INSTALL_RPATH_USE_LINK_PATH, which might be necessary to + remove in the future). + + Parameters + ---------- + library_path : str + path to library for which to set rpaths. + qt_lib_dir : str + rpath to installed Qt lib directory. + """ + + install_names = macos_get_install_names(library_path) + existing_rpath_commands = macos_get_rpaths(library_path) + + needs_loader_path = False + for install_name in install_names: + # Absolute path, skip it. + if install_name[0] == '/': + continue + + # If there are dynamic library install names that contain + # @rpath tokens, we will provide an rpath load command with the + # value of "@loader_path". This will allow loading dependent + # libraries from within the same directory as 'library_path'. + if install_name[0] == '@': + needs_loader_path = True + break + + if needs_loader_path and "@loader_path" not in existing_rpath_commands: + back_tick('install_name_tool -add_rpath {rpath} {library_path}'.format( + rpath="@loader_path", library_path=library_path)) + + # If the library depends on a Qt library, add an rpath load comment + # pointing to the Qt lib directory. + macos_add_qt_rpath(library_path, qt_lib_dir, existing_rpath_commands, + install_names) + +def macos_add_qt_rpath(library_path, qt_lib_dir, + existing_rpath_commands = [], library_dependencies = []): + """ + Adds an rpath load command to the Qt lib directory if necessary + + Checks if library pointed to by 'library_path' has Qt dependencies, + and adds an rpath load command that points to the Qt lib directory + (qt_lib_dir). + """ + if not existing_rpath_commands: + existing_rpath_commands = macos_get_rpaths(library_path) + + # Return early if qt rpath is already present. + if qt_lib_dir in existing_rpath_commands: + return + + # Check if any library dependencies are Qt libraries (hacky). + if not library_dependencies: + library_dependencies = macos_get_install_names(library_path) + + needs_qt_rpath = False + for library in library_dependencies: + if 'Qt' in library: + needs_qt_rpath = True + break + + if needs_qt_rpath: + back_tick('install_name_tool -add_rpath {rpath} {library_path}'.format( + rpath=qt_lib_dir, library_path=library_path)) + +# Find an executable specified by a glob pattern ('foo*') in the OS path +def find_glob_in_path(pattern): + result = [] + if sys.platform == 'win32': + pattern += '.exe' + + for path in os.environ.get('PATH', '').split(os.pathsep): + for match in glob.glob(os.path.join(path, pattern)): + result.append(match) + return result + +# Locate the most recent version of llvm_config in the path. +def find_llvm_config(): + version_re = re.compile('(\d+)\.(\d+)\.(\d+)') + result = None + last_version_string = '000000' + for llvm_config in find_glob_in_path('llvm-config*'): + try: + output = run_process_output([llvm_config, '--version']) + if output: + match = version_re.match(output[0]) + if match: + version_string = '%02d%02d%02d' % (int(match.group(1)), + int(match.group(2)), int(match.group(3))) + if (version_string > last_version_string): + result = llvm_config + last_version_string = version_string + except OSError: + pass + return result + +# Add Clang to path for Windows for the shiboken ApiExtractor tests. +# Revisit once Clang is bundled with Qt. +def detect_clang(): + source = 'LLVM_INSTALL_DIR' + clang_dir = os.environ.get(source, None) + if not clang_dir: + source = 'CLANG_INSTALL_DIR' + clang_dir = os.environ.get(source, None) + if not clang_dir: + source = find_llvm_config() + try: + if source is not None: + output = run_process_output([source, '--prefix']) + if output: + clang_dir = output[0] + except OSError: + pass + if clang_dir: + arch = '64' if sys.maxsize > 2**31-1 else '32' + clang_dir = clang_dir.replace('_ARCH_', arch) + return (clang_dir, source) + +def download_and_extract_7z(fileurl, target): + """ Downloads 7z file from fileurl and extract to target """ + print("Downloading fileUrl {} ".format(fileurl)) + info = "" + try: + localfile, info = urllib.urlretrieve(fileurl) + except: + print("Error downloading {} : {}".format(fileurl, info)) + raise RuntimeError(' Error downloading {}'.format(fileurl)) + + try: + outputDir = "-o" + target + print("calling 7z x {} {}".format(localfile, outputDir)) + subprocess.call(["7z", "x", "-y", localfile, outputDir]) + except: + raise RuntimeError(' Error extracting {}'.format(localfile)) + +def split_and_strip(input): + lines = [s.strip() for s in input.splitlines()] + return lines + +def ldd_get_dependencies(executable_path): + """ + Returns a dictionary of dependencies that `executable_path` + depends on. + + The keys are library names and the values are the library paths. + + """ + output = ldd(executable_path) + lines = split_and_strip(output) + pattern = re.compile(r"\s*(.*?)\s+=>\s+(.*?)\s+\(.*\)") + dependencies = {} + for line in lines: + match = pattern.search(line) + if match: + dependencies[match.group(1)] = match.group(2) + return dependencies + +def ldd_get_paths_for_dependencies(dependencies_regex, executable_path = None, + dependencies = None): + """ + Returns file paths to shared library dependencies that match given + `dependencies_regex` against given `executable_path`. + + The function retrieves the list of shared library dependencies using + ld.so for the given `executable_path` in order to search for + libraries that match the `dependencies_regex`, and then returns a + list of absolute paths of the matching libraries. + + If no matching library is found in the list of dependencies, + an empty list is returned. + """ + + if not dependencies and not executable_path: + return None + + if not dependencies: + dependencies = ldd_get_dependencies(executable_path) + + pattern = re.compile(dependencies_regex) + + paths = [] + for key in dependencies: + match = pattern.search(key) + if match: + paths.append(dependencies[key]) + + return paths + +def ldd(executable_path): + """ + Returns ld.so output of shared library dependencies for given + `executable_path`. + + This is a partial port of /usr/bin/ldd from bash to Python. + The dependency list is retrieved by setting the + LD_TRACE_LOADED_OBJECTS=1 environment variable, and executing the + given path via the dynamic loader ld.so. + + Only works on Linux. The port is required to make this work on + systems that might not have ldd. + This is because ldd (on Ubuntu) is shipped in the libc-bin package + that, which might have a + minuscule percentage of not being installed. + + Parameters + ---------- + executable_path : str + path to executable or shared library. + + Returns + ------- + output : str + the raw output retrieved from the dynamic linker. + """ + + chosen_rtld = None + # List of ld's considered by ldd on Ubuntu (here's hoping it's the + # same on all distros). + rtld_list = ["/lib/ld-linux.so.2", "/lib64/ld-linux-x86-64.so.2", + "/libx32/ld-linux-x32.so.2"] + + # Choose appropriate runtime dynamic linker. + for rtld in rtld_list: + if os.path.isfile(rtld) and os.access(rtld, os.X_OK): + (_, _, code) = back_tick(rtld, True) + # Code 127 is returned by ld.so when called without any + # arguments (some kind of sanity check I guess). + if code == 127: + (_, _, code) = back_tick("{} --verify {}".format(rtld, + executable_path), True) + # Codes 0 and 2 mean given executable_path can be + # understood by ld.so. + if code in [0, 2]: + chosen_rtld = rtld + break + + if not chosen_rtld: + raise RuntimeError("Could not find appropriate ld.so to query " + "for dependencies.") + + # Query for shared library dependencies. + rtld_env = "LD_TRACE_LOADED_OBJECTS=1" + rtld_cmd = "{} {} {}".format(rtld_env, chosen_rtld, executable_path) + (out, _, return_code) = back_tick(rtld_cmd, True) + if return_code == 0: + return out + else: + raise RuntimeError("ld.so failed to query for dependent shared " + "libraries of {} ".format(executable_path)) + +def find_files_using_glob(path, pattern): + """ Returns list of files that matched glob `pattern` in `path`. """ + final_pattern = os.path.join(path, pattern) + maybe_files = glob.glob(final_pattern) + return maybe_files + +def find_qt_core_library_glob(lib_dir): + """ Returns path to the QtCore library found in `lib_dir`. """ + maybe_file = find_files_using_glob(lib_dir, "libQt5Core.so.?") + if len(maybe_file) == 1: + return maybe_file[0] + return None + +# @TODO: Possibly fix ICU library copying on macOS and Windows. +# This would require to implement the equivalent of the custom written +# ldd for the specified platforms. +# This has less priority because ICU libs are not used in the default +# Qt configuration build. +def copy_icu_libs(patchelf, destination_lib_dir): + """ + Copy ICU libraries that QtCore depends on, + to given `destination_lib_dir`. + """ + qt_core_library_path = find_qt_core_library_glob(destination_lib_dir) + + if not qt_core_library_path or not os.path.exists(qt_core_library_path): + raise RuntimeError('QtCore library does not exist at path: {}. ' + 'Failed to copy ICU libraries.'.format(qt_core_library_path)) + + dependencies = ldd_get_dependencies(qt_core_library_path) + + icu_regex = r"^libicu.+" + icu_compiled_pattern = re.compile(icu_regex) + icu_required = False + for dependency in dependencies: + match = icu_compiled_pattern.search(dependency) + if match: + icu_required = True + break + + if icu_required: + paths = ldd_get_paths_for_dependencies(icu_regex, + dependencies=dependencies) + if not paths: + raise RuntimeError("Failed to find the necessary ICU libraries " + "required by QtCore.") + log.info('Copying the detected ICU libraries required by QtCore.') + + if not os.path.exists(destination_lib_dir): + os.makedirs(destination_lib_dir) + + for path in paths: + basename = os.path.basename(path) + destination = os.path.join(destination_lib_dir, basename) + copyfile(path, destination, force_copy_symlink=True) + # Patch the ICU libraries to contain the $ORIGIN rpath + # value, so that only the local package libraries are used. + linux_set_rpaths(patchelf, destination, '$ORIGIN') + + # Patch the QtCore library to find the copied over ICU libraries + # (if necessary). + log.info("Checking if QtCore library needs a new rpath to make it " + "work with ICU libs.") + rpaths = linux_get_rpaths(qt_core_library_path) + if not rpaths or not rpaths_has_origin(rpaths): + log.info('Patching QtCore library to contain $ORIGIN rpath.') + rpaths.insert(0, '$ORIGIN') + new_rpaths_string = ":".join(rpaths) + linux_set_rpaths(patchelf, qt_core_library_path, new_rpaths_string) + +def linux_set_rpaths(patchelf, executable_path, rpath_string): + """ Patches the `executable_path` with a new rpath string. """ + + cmd = [patchelf, '--set-rpath', rpath_string, executable_path] + + if run_process(cmd) != 0: + raise RuntimeError("Error patching rpath in {}".format( + executable_path)) + +def linux_get_rpaths(executable_path): + """ + Returns a list of run path values embedded in the executable or just + an empty list. + """ + + cmd = "readelf -d {}".format(executable_path) + (out, err, code) = back_tick(cmd, True) + if code != 0: + raise RuntimeError("Running `readelf -d {}` failed with error " + "output:\n {}. ".format(executable_path, err)) + lines = split_and_strip(out) + pattern = re.compile(r"^.+?\(RUNPATH\).+?\[(.+?)\]$") + + rpath_line = None + for line in lines: + match = pattern.search(line) + if match: + rpath_line = match.group(1) + break + + rpaths = [] + + if rpath_line: + rpaths = rpath_line.split(':') + + return rpaths + +def rpaths_has_origin(rpaths): + """ + Return True if the specified list of rpaths has an "$ORIGIN" value + (aka current dir). + """ + if not rpaths: + return False + + pattern = re.compile(r"^\$ORIGIN(/)?$") + for rpath in rpaths: + match = pattern.search(rpath) + if match: + return True + return False + +def memoize(function): + """ + Decorator to wrap a function with a memoizing callable. + It returns cached values when the wrapped function is called with + the same arguments. + """ + memo = {} + def wrapper(*args): + if args in memo: + return memo[args] + else: + rv = function(*args) + memo[args] = rv + return rv + return wrapper + +def get_python_dict(python_script_path): + try: + with open(python_script_path) as f: + python_dict = {} + code = compile(f.read(), python_script_path, 'exec') + exec(code, {}, python_dict) + return python_dict + except IOError as e: + print("get_python_dict: Couldn't get dict from python " + "file: {}.".format(python_script_path)) + raise + +def install_pip_dependencies(env_pip, packages): + for p in packages: + run_instruction([env_pip, "install", p], "Failed to install " + p) + +def get_qtci_virtualEnv(python_ver, host, hostArch, targetArch): + _pExe = "python" + _env = "env" + str(python_ver) + env_python = _env + "/bin/python" + env_pip = _env + "/bin/pip" + + if host == "Windows": + print("New virtualenv to build " + targetArch + " in " + hostArch + " host.") + _pExe = "python.exe" + # With windows we are creating building 32-bit target in 64-bit host + if hostArch == "X86_64" and targetArch == "X86": + if python_ver == "3": + _pExe = os.path.join(os.getenv("PYTHON3_32_PATH"), "python.exe") + else: + _pExe = os.path.join(os.getenv("PYTHON2_32_PATH"), "python.exe") + else: + if python_ver == "3": + _pExe = os.path.join(os.getenv("PYTHON3_PATH"), "python.exe") + env_python = _env + "\\Scripts\\python.exe" + env_pip = _env + "\\Scripts\\pip.exe" + else: + if python_ver == "3": + _pExe = "python3" + return(_pExe, _env, env_pip, env_python) + +def run_instruction(instruction, error): + print("Running Coin instruction: " + ' '.join(str(e) for e in instruction)) + result = subprocess.call(instruction) + if result != 0: + print("ERROR : " + error) + exit(result) + +def acceptCITestConfiguration(hostOS, hostOSVer, targetArch, compiler): + # Disable unsupported CI configs for now + # NOTE: String must match with QT CI's storagesturct thrift + if hostOSVer in ["WinRT_10"]: + print("Disabled " + hostOSVer + " from Coin configuration") + return False + # With 5.11 CI will create two sets of release binaries, one with msvc 2015 and one with msvc 2017 + # we shouldn't release the 2015 version. BUT, 32 bit build is done only on msvc 2015... + if compiler in ["MSVC2015"] and targetArch in ["X86_64"]: + print("Disabled " + compiler + " to " + targetArch + " from Coin configuration") + return False + return True diff --git a/build_scripts/wheel_override.py b/build_scripts/wheel_override.py new file mode 100644 index 0000000..3a5c816 --- /dev/null +++ b/build_scripts/wheel_override.py @@ -0,0 +1,204 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + + +wheel_module_exists = False + +try: + import os, sys + + from distutils import log as logger + from wheel import pep425tags + from wheel.bdist_wheel import bdist_wheel as _bdist_wheel + from wheel.bdist_wheel import safer_name as _safer_name + from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag + from wheel.pep425tags import get_platform as wheel_get_platform + from email.generator import Generator + from wheel import __version__ as wheel_version + + from .options import * + + wheel_module_exists = True +except Exception as e: + _bdist_wheel, wheel_version = type, '' # dummy to make class statement happy + print('***** Exception while trying to prepare bdist_wheel override class: {}. ' + 'Skipping wheel overriding.'.format(e)) + +def get_bdist_wheel_override(params): + if wheel_module_exists: + class PysideBuildWheelDecorated(PysideBuildWheel): + def __init__(self, *args, **kwargs): + self.params = params + PysideBuildWheel.__init__(self, *args, **kwargs) + return PysideBuildWheelDecorated + else: + return None + +class PysideBuildWheel(_bdist_wheel): + def __init__(self, *args, **kwargs): + self.pyside_params = None + _bdist_wheel.__init__(self, *args, **kwargs) + + def finalize_options(self): + if sys.platform == 'darwin': + # Override the platform name to contain the correct + # minimum deployment target. + # This is used in the final wheel name. + self.plat_name = self.params['macos_plat_name'] + + # When limited API is requested, notify bdist_wheel to + # create a properly named package. + limited_api_enabled = OPTION_LIMITED_API and sys.version_info[0] >= 3 + if limited_api_enabled: + self.py_limited_api = "cp35.cp36.cp37" + + _bdist_wheel.finalize_options(self) + + @property + def wheel_dist_name(self): + # Slightly modified version of wheel's wheel_dist_name + # method, to add the Qt version as well. + # Example: + # PySide2-5.6-5.6.4-cp27-cp27m-macosx_10_10_intel.whl + # The PySide2 version is "5.6". + # The Qt version built against is "5.6.4". + qt_version = self.params['qt_version'] + package_version = self.params['package_version'] + wheel_version = "{}-{}".format(package_version, qt_version) + components = (_safer_name(self.distribution.get_name()), + wheel_version) + if self.build_number: + components += (self.build_number,) + return '-'.join(components) + + # Copy of get_tag from bdist_wheel.py, to allow setting a + # multi-python impl tag, by removing an assert. Otherwise we + # would have to rename wheels manually for limited api + # packages. Also we set "none" abi tag on Windows, because + # pip does not yet support "abi3" tag, leading to + # installation failure when tried. + def get_tag(self): + # bdist sets self.plat_name if unset, we should only use it for purepy + # wheels if the user supplied it. + if self.plat_name_supplied: + plat_name = self.plat_name + elif self.root_is_pure: + plat_name = 'any' + else: + plat_name = self.plat_name or wheel_get_platform() + if plat_name in ('linux-x86_64', 'linux_x86_64') and sys.maxsize == 2147483647: + plat_name = 'linux_i686' + + # To allow uploading to pypi, we need the wheel name + # to contain 'manylinux1'. + # The wheel which will be uploaded to pypi will be + # built on RHEL7, so it doesn't completely qualify for + # manylinux1 support, but it's the minimum requirement + # for building Qt. We only enable this for x64 limited + # api builds (which are the only ones uploaded to + # pypi). + # TODO: Add actual distro detection, instead of + # relying on limited_api option. + if plat_name in ('linux-x86_64', 'linux_x86_64') and sys.maxsize > 2147483647 \ + and (self.py_limited_api or sys.version_info[0] == 2): + plat_name = 'manylinux1_x86_64' + plat_name = plat_name.replace('-', '_').replace('.', '_') + + if self.root_is_pure: + if self.universal: + impl = 'py2.py3' + else: + impl = self.python_tag + tag = (impl, 'none', plat_name) + else: + impl_name = get_abbr_impl() + impl_ver = get_impl_ver() + impl = impl_name + impl_ver + # We don't work on CPython 3.1, 3.0. + if self.py_limited_api and (impl_name + impl_ver).startswith('cp3'): + impl = self.py_limited_api + abi_tag = "abi3" if sys.platform != "win32" else "none" + else: + abi_tag = str(get_abi_tag()).lower() + tag = (impl, abi_tag, plat_name) + supported_tags = pep425tags.get_supported( + supplied_platform=plat_name if self.plat_name_supplied else None) + # XXX switch to this alternate implementation for non-pure: + if (self.py_limited_api) or (plat_name in ('manylinux1_x86_64') and sys.version_info[0] == 2): + return tag + assert tag == supported_tags[0], "%s != %s" % (tag, supported_tags[0]) + assert tag in supported_tags, ( + "would build wheel with unsupported tag {}".format(tag)) + return tag + + # Copy of get_tag from bdist_wheel.py, to write a triplet Tag + # only once for the limited_api case. + def write_wheelfile(self, wheelfile_base, generator='bdist_wheel (' + wheel_version + ')'): + from email.message import Message + msg = Message() + msg['Wheel-Version'] = '1.0' # of the spec + msg['Generator'] = generator + msg['Root-Is-Purelib'] = str(self.root_is_pure).lower() + if self.build_number is not None: + msg['Build'] = self.build_number + + # Doesn't work for bdist_wininst + impl_tag, abi_tag, plat_tag = self.get_tag() + # To enable pypi upload we are adjusting the wheel name + pypi_ready = (OPTION_LIMITED_API and sys.version_info[0] >= 3) or (sys.version_info[0] == 2) + + def writeTag(impl): + for abi in abi_tag.split('.'): + for plat in plat_tag.split('.'): + msg['Tag'] = '-'.join((impl, abi, plat)) + if pypi_ready: + writeTag(impl_tag) + else: + for impl in impl_tag.split('.'): + writeTag(impl) + + wheelfile_path = os.path.join(wheelfile_base, 'WHEEL') + logger.info('creating %s', wheelfile_path) + with open(wheelfile_path, 'w') as f: + Generator(f, maxheaderlen=0).flatten(msg) + + +if not wheel_module_exists: + del PysideBuildWheel + diff --git a/checklibs.py b/checklibs.py new file mode 100644 index 0000000..18aa11e --- /dev/null +++ b/checklibs.py @@ -0,0 +1,386 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +#!/usr/bin/env python +# +# checklibs.py +# +# Check Mach-O dependencies. +# +# See http://www.entropy.ch/blog/Developer/2011/03/05/2011-Update-to-checklibs-Script-for-dynamic-library-dependencies.html +# +# Written by Marc Liyanage +# +# + +import subprocess, sys, re, os.path, optparse, collections +from pprint import pprint + + +class MachOFile: + + def __init__(self, image_path, arch, parent = None): + self.image_path = image_path + self._dependencies = [] + self._cache = dict(paths = {}, order = []) + self.arch = arch + self.parent = parent + self.header_info = {} + self.load_info() + self.add_to_cache() + + def load_info(self): + if not self.image_path.exists(): + return + self.load_header() + self.load_rpaths() + + def load_header(self): + # Get the mach-o header info, we're interested in the file type + # (executable, dylib) + cmd = 'otool -arch {0} -h "{1}"' + output = self.shell(cmd, [self.arch, self.image_path.resolved_path], + fatal = True) + if not output: + print("Unable to load mach header for {} ({}), architecture " + "mismatch? Use --arch option to pick architecture".format( + self.image_path.resolved_path, self.arch), file=sys.stderr) + exit() + (keys, values) = output.splitlines()[2:] + self.header_info = dict(zip(keys.split(), values.split())) + + def load_rpaths(self): + output = self.shell('otool -arch {0} -l "{1}"', + [self.arch, self.image_path.resolved_path], fatal = True) + # skip file name on first line + load_commands = re.split('Load command (\d+)', output)[1:] + self._rpaths = [] + load_commands = collections.deque(load_commands) + while load_commands: + load_commands.popleft() # command index + command = load_commands.popleft().strip().splitlines() + if command[0].find('LC_RPATH') == -1: + continue + + path = re.findall('path (.+) \(offset \d+\)$', command[2])[0] + image_path = self.image_path_for_recorded_path(path) + image_path.rpath_source = self + self._rpaths.append(image_path) + + def ancestors(self): + ancestors = [] + parent = self.parent + while parent: + ancestors.append(parent) + parent = parent.parent + + return ancestors + + def self_and_ancestors(self): + return [self] + self.ancestors() + + def rpaths(self): + return self._rpaths + + def all_rpaths(self): + rpaths = [] + for image in self.self_and_ancestors(): + rpaths.extend(image.rpaths()) + return rpaths + + def root(self): + if not self.parent: + return self + return self.ancestors()[-1] + + def executable_path(self): + root = self.root() + if root.is_executable(): + return root.image_path + return None + + def filetype(self): + return long(self.header_info.get('filetype', 0)) + + def is_dylib(self): + return self.filetype() == MachOFile.MH_DYLIB + + def is_executable(self): + return self.filetype() == MachOFile.MH_EXECUTE + + def all_dependencies(self): + self.walk_dependencies() + return self.cache()['order'] + + def walk_dependencies(self, known = {}): + if known.get(self.image_path.resolved_path): + return + + known[self.image_path.resolved_path] = self + + for item in self.dependencies(): + item.walk_dependencies(known) + + def dependencies(self): + if not self.image_path.exists(): + return [] + + if self._dependencies: + return self._dependencies + + output = self.shell('otool -arch {0} -L "{1}"', + [self.arch, self.image_path.resolved_path], fatal = True) + output = [line.strip() for line in output.splitlines()] + del(output[0]) + if self.is_dylib(): + # In the case of dylibs, the first line is the id line + del(output[0]) + + self._dependencies = [] + for line in output: + match = re.match('^(.+)\s+(\(.+)\)$', line) + if not match: + continue + recorded_path = match.group(1) + image_path = self.image_path_for_recorded_path(recorded_path) + image = self.lookup_or_make_item(image_path) + self._dependencies.append(image) + + return self._dependencies + + # The root item holds the cache, all lower-level requests bubble up + # the parent chain + def cache(self): + if self.parent: + return self.parent.cache() + return self._cache + + def add_to_cache(self): + cache = self.cache() + cache['paths'][self.image_path.resolved_path] = self + cache['order'].append(self) + + def cached_item_for_path(self, path): + if not path: + return None + return self.cache()['paths'].get(path) + + def lookup_or_make_item(self, image_path): + image = self.cached_item_for_path(image_path.resolved_path) + if not image: # cache miss + image = MachOFile(image_path, self.arch, parent = self) + return image + + def image_path_for_recorded_path(self, recorded_path): + path = ImagePath(None, recorded_path) + + # handle @executable_path + if recorded_path.startswith(ImagePath.EXECUTABLE_PATH_TOKEN): + executable_image_path = self.executable_path() + if executable_image_path: + path.resolved_path = os.path.normpath( + recorded_path.replace( + ImagePath.EXECUTABLE_PATH_TOKEN, + os.path.dirname(executable_image_path.resolved_path))) + + # handle @loader_path + elif recorded_path.startswith(ImagePath.LOADER_PATH_TOKEN): + path.resolved_path = os.path.normpath(recorded_path.replace( + ImagePath.LOADER_PATH_TOKEN, + os.path.dirname(self.image_path.resolved_path))) + + # handle @rpath + elif recorded_path.startswith(ImagePath.RPATH_TOKEN): + for rpath in self.all_rpaths(): + resolved_path = os.path.normpath(recorded_path.replace( + ImagePath.RPATH_TOKEN, rpath.resolved_path)) + if os.path.exists(resolved_path): + path.resolved_path = resolved_path + path.rpath_source = rpath.rpath_source + break + + # handle absolute path + elif recorded_path.startswith('/'): + path.resolved_path = recorded_path + + return path + + def __repr__(self): + return str(self.image_path) + + def dump(self): + print(self.image_path) + for dependency in self.dependencies(): + print('\t{0}'.format(dependency)) + + @staticmethod + def shell(cmd_format, args, fatal = False): + cmd = cmd_format.format(*args) + popen = subprocess.Popen(cmd, shell = True, stdout = subprocess.PIPE) + output = popen.communicate()[0] + if popen.returncode and fatal: + print("Nonzero exit status for shell command '{}'".format(cmd), + file=sys.stderr) + sys.exit(1) + + return output + + @classmethod + def architectures_for_image_at_path(cls, path): + output = cls.shell('file "{}"', [path]) + file_architectures = re.findall(r' executable (\w+)', output) + ordering = 'x86_64 i386'.split() + file_architectures = sorted(file_architectures, lambda a, b: cmp( + ordering.index(a), ordering.index(b))) + return file_architectures + + MH_EXECUTE = 0x2 + MH_DYLIB = 0x6 + MH_BUNDLE = 0x8 + + +# ANSI terminal coloring sequences +class Color: + HEADER = '\033[95m' + BLUE = '\033[94m' + GREEN = '\033[92m' + RED = '\033[91m' + ENDC = '\033[0m' + + @staticmethod + def red(string): + return Color.wrap(string, Color.RED) + + @staticmethod + def blue(string): + return Color.wrap(string, Color.BLUE) + + @staticmethod + def wrap(string, color): + return Color.HEADER + color + string + Color.ENDC + + +# This class holds path information for a mach-0 image file. +# It holds the path as it was recorded in the loading binary as well as +# the effective, resolved file system path. +# The former can contain @-replacement tokens. +# In the case where the recorded path contains an @rpath token that was +# resolved successfully, we also capture the path of the binary that +# supplied the rpath value that was used. +# That path itself can contain replacement tokens such as @loader_path. +class ImagePath: + + def __init__(self, resolved_path, recorded_path = None): + self.recorded_path = recorded_path + self.resolved_path = resolved_path + self.rpath_source = None + + def __repr__(self): + description = None + + if self.resolved_equals_recorded() or self.recorded_path == None: + description = self.resolved_path + else: + description = '{0} ({1})'.format(self.resolved_path, + self.recorded_path) + + if (not self.is_system_location()) and (not self.uses_dyld_token()): + description = Color.blue(description) + + if self.rpath_source: + description += ' (rpath source: {0})'.format( + self.rpath_source.image_path.resolved_path) + + if not self.exists(): + description += Color.red(' (missing)') + + return description + + def exists(self): + return self.resolved_path and os.path.exists(self.resolved_path) + + def resolved_equals_recorded(self): + return (self.resolved_path and self.recorded_path and + self.resolved_path == self.recorded_path) + + def uses_dyld_token(self): + return self.recorded_path and self.recorded_path.startswith('@') + + def is_system_location(self): + system_prefixes = ['/System/Library', '/usr/lib'] + for prefix in system_prefixes: + if self.resolved_path and self.resolved_path.startswith(prefix): + return True + + EXECUTABLE_PATH_TOKEN = '@executable_path' + LOADER_PATH_TOKEN = '@loader_path' + RPATH_TOKEN = '@rpath' + + +# Command line driver +parser = optparse.OptionParser( + usage = "Usage: %prog [options] path_to_mach_o_file") +parser.add_option( + "--arch", dest = "arch", help = "architecture", metavar = "ARCH") +parser.add_option( + "--all", dest = "include_system_libraries", + help = "Include system frameworks and libraries", action="store_true") +(options, args) = parser.parse_args() + +if len(args) < 1: + parser.print_help() + sys.exit(1) + +archs = MachOFile.architectures_for_image_at_path(args[0]) +if archs and not options.arch: + print('Analyzing architecture {}, override with --arch if needed'.format( + archs[0]), file=sys.stderr) + options.arch = archs[0] + +toplevel_image = MachOFile(ImagePath(args[0]), options.arch) + +for dependency in toplevel_image.all_dependencies(): + if (dependency.image_path.exists() and + (not options.include_system_libraries) and + dependency.image_path.is_system_location()): + continue + + dependency.dump() + print("\n") + diff --git a/coin_build_instructions.py b/coin_build_instructions.py new file mode 100644 index 0000000..aee0bf2 --- /dev/null +++ b/coin_build_instructions.py @@ -0,0 +1,140 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# +from build_scripts.utils import has_option +from build_scripts.utils import option_value +from build_scripts.utils import install_pip_dependencies +from build_scripts.utils import get_qtci_virtualEnv +from build_scripts.utils import run_instruction +from build_scripts.utils import rmtree +from build_scripts.utils import get_python_dict +from build_scripts.utils import acceptCITestConfiguration +import os + +# Values must match COIN thrift +CI_HOST_OS = option_value("os") +CI_TARGET_OS = option_value("targetOs") +CI_HOST_ARCH = option_value("hostArch") +CI_TARGET_ARCH = option_value("targetArch") +CI_HOST_OS_VER = option_value("osVer") +CI_ENV_INSTALL_DIR = option_value("instdir") +CI_ENV_AGENT_DIR = option_value("agentdir") +CI_COMPILER = option_value("compiler") +CI_INTEGRATION_ID = option_value("coinIntegrationId") +CI_FEATURES = [] +_ci_features = option_value("features") +if _ci_features is not None: + for f in _ci_features.split(', '): + CI_FEATURES.append(f) +CI_RELEASE_CONF = has_option("packaging") + +def get_current_script_path(): + """ Returns the absolute path containing this script. """ + try: + this_file = __file__ + except NameError: + this_file = sys.argv[0] + this_file = os.path.abspath(this_file) + return os.path.dirname(this_file) + +def is_snapshot_build(): + """ + Returns True if project needs to be built with --snapshot-build + + This is true if the version found in pyside_version.py is not a + pre-release version (no alphas, betas). + + This eliminates the need to remove the --snapshot-build option + on a per-release branch basis (less things to remember to do + for a release). + """ + setup_script_dir = get_current_script_path() + pyside_version_py = os.path.join( + setup_script_dir, "sources", "pyside2", "pyside_version.py") + d = get_python_dict(pyside_version_py) + + pre_release_version_type = d['pre_release_version_type'] + pre_release_version = d['pre_release_version'] + if pre_release_version or pre_release_version_type: + return True + return False + +def call_setup(python_ver): + _pExe, _env, env_pip, env_python = get_qtci_virtualEnv(python_ver, CI_HOST_OS, CI_HOST_ARCH, CI_TARGET_ARCH) + rmtree(_env, True) + run_instruction(["virtualenv", "-p", _pExe, _env], "Failed to create virtualenv") + install_pip_dependencies(env_pip, ["six", "wheel"]) + cmd = [env_python, "setup.py"] + if CI_RELEASE_CONF: + cmd += ["bdist_wheel", "--standalone"] + else: + cmd += ["build"] + if CI_HOST_OS == "MacOS": + cmd += ["--qmake=" + CI_ENV_INSTALL_DIR + "/bin/qmake"] + elif CI_HOST_OS == "Windows": + + cmd += ["--qmake=" + CI_ENV_INSTALL_DIR + "\\bin\\qmake.exe"] + else: + cmd += ["--qmake=" + CI_ENV_INSTALL_DIR + "/bin/qmake"] + cmd += ["--build-tests", + "--jobs=4", + "--verbose-build"] + if python_ver == "3": + cmd += ["--limited-api=yes"] + if is_snapshot_build(): + cmd += ["--snapshot-build"] + + cmd += ["--package-timestamp=" + CI_INTEGRATION_ID] + + run_instruction(cmd, "Failed to run setup.py") + +def run_build_instructions(): + if not acceptCITestConfiguration(CI_HOST_OS, CI_HOST_OS_VER, CI_TARGET_ARCH, CI_COMPILER): + exit() + + # Uses default python, hopefully we have python2 installed on all hosts + # Skip building using Python 2 on Windows, because of different MSVC C runtimes (VS2008 vs VS2015+) + if CI_HOST_OS != "Windows": + call_setup("") + + # In case of packaging build, we have to build also python3 wheel + if CI_RELEASE_CONF and CI_HOST_OS_VER not in ["RHEL_6_6"]: + call_setup("3") + +if __name__ == "__main__": + run_build_instructions() diff --git a/coin_test_instructions.py b/coin_test_instructions.py new file mode 100644 index 0000000..bd65b5b --- /dev/null +++ b/coin_test_instructions.py @@ -0,0 +1,90 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# +from build_scripts.utils import has_option +from build_scripts.utils import option_value +from build_scripts.utils import install_pip_dependencies +from build_scripts.utils import get_qtci_virtualEnv +from build_scripts.utils import run_instruction +from build_scripts.utils import rmtree +from build_scripts.utils import acceptCITestConfiguration +import os + +# Values must match COIN thrift +CI_HOST_OS = option_value("os") +CI_TARGET_OS = option_value("targetOs") +CI_HOST_ARCH = option_value("hostArch") +CI_TARGET_ARCH = option_value("targetArch") +CI_HOST_OS_VER = option_value("osVer") +CI_ENV_INSTALL_DIR = option_value("instdir") +CI_ENV_AGENT_DIR = option_value("agentdir") or "." +CI_COMPILER = option_value("compiler") +CI_FEATURES = [] +_ci_features = option_value("features") +if _ci_features is not None: + for f in _ci_features.split(', '): + CI_FEATURES.append(f) + +CI_RELEASE_CONF = has_option("packaging") + +def call_testrunner(python_ver, buildnro): + _pExe, _env, env_pip, env_python = get_qtci_virtualEnv(python_ver, CI_HOST_OS, CI_HOST_ARCH, CI_TARGET_ARCH) + rmtree(_env, True) + run_instruction(["virtualenv", "-p", _pExe, _env], "Failed to create virtualenv") + install_pip_dependencies(env_pip, ["six", "wheel"]) + cmd = [env_python, "testrunner.py", "test", + "--blacklist", "build_history/blacklist.txt", + "--buildno=" + buildnro] + run_instruction(cmd, "Failed to run testrunner.py") + +def run_test_instructions(): + if not acceptCITestConfiguration(CI_HOST_OS, CI_HOST_OS_VER, CI_TARGET_ARCH, CI_COMPILER): + exit() + + os.chdir(CI_ENV_AGENT_DIR) + testRun = 0 + # We didn't build for Python 2 in win + if CI_HOST_OS != "Windows": + call_testrunner("", str(testRun)) + testRun =+ 1 + # We know that second build was with python3 + if CI_RELEASE_CONF and CI_HOST_OS_VER not in ["RHEL_6_6"]: + call_testrunner("3", str(testRun)) + +if __name__ == "__main__": + run_test_instructions() diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..69fa449 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +_build/ diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..9077fad --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,177 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PySide.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PySide.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/PySide" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/PySide" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/docs/building/index.rst b/docs/building/index.rst new file mode 100644 index 0000000..daf78b9 --- /dev/null +++ b/docs/building/index.rst @@ -0,0 +1,10 @@ +Building PySide +=============== + +.. toctree:: + :maxdepth: 2 + + windows.rst + macosx.rst + linux.rst + options.rst diff --git a/docs/building/linux.rst b/docs/building/linux.rst new file mode 100644 index 0000000..84166c2 --- /dev/null +++ b/docs/building/linux.rst @@ -0,0 +1,138 @@ +.. _building_linux: + +Building PySide on a Linux System (Ubuntu 12.04 - 14.04) +======================================================== + +Installing prerequisites +------------------------ + +#. Install build dependencies: + + :: + + $ sudo apt-get install build-essential git cmake libqt4-dev libphonon-dev python2.7-dev libxml2-dev libxslt1-dev qtmobility-dev + +#. Install latest ``pip`` distribution into the Python you + installed in the first step: download `get-pip.py + `_ and run it using + the ``python`` interpreter of your Python 2.7 installation using a + command prompt: + + :: + + $ wget https://bootstrap.pypa.io/get-pip.py + $ sudo python2.7 get-pip.py + +#. Install latest ``wheel`` distribution: + + :: + + $ sudo pip2.7 install wheel + + +Building PySide distribution +---------------------------- + +#. Download ``PySide`` source distribution: + + :: + + $ wget https://pypi.python.org/packages/source/P/PySide/PySide-1.2.2.tar.gz + +#. Extract the source distribution: + + :: + + $ tar -xvzf PySide-1.2.2.tar.gz + +#. Switch to the distribution directory: + + :: + + $ cd PySide-1.2.2 + +#. Build the ``wheel`` binary distribution: + + :: + + $ python2.7 setup.py bdist_wheel --qmake=/usr/bin/qmake-qt4 + +#. Optionally you can build standalone version of distribution with embedded Qt libs: + + :: + + $ python2.7 setup.py bdist_wheel --qmake=/usr/bin/qmake-qt4 --standalone + + +Building PySide distribution from a Git repository +-------------------------------------------------- + +#. Clone ``PySide`` setup scripts from git repository: + + :: + + $ git clone https://github.com/PySide/pyside-setup.git pyside-setup + +#. Switch to the ``pyside-setup`` directory: + + :: + + $ cd pyside-setup + +#. Build ``PySide`` distribution: + + :: + + $ python2.7 setup.py bdist_wheel --qmake=/usr/bin/qmake-qt4 --version=1.2.2 + +#. Optionally you can build standalone version of distribution with embedded Qt libs: + + :: + + $ python2.7 setup.py bdist_wheel --qmake=/usr/bin/qmake-qt4 --version=1.2.2 --standalone + +#. To build the development version of ``PySide`` distribution, ignore the --version parameter: + + :: + + $ python2.7 setup.py bdist_wheel --qmake=/usr/bin/qmake-qt4 + + +Installing PySide distribution +------------------------------ + +#. After the successful build, install the distribution with ``pip``. The file name may vary depending on your platform so look into the ``dist`` directory for the correct name: + + :: + + $ ls dist + PySide-1.2.2-cp27-none-linux-x86_64.whl + $ sudo pip2.7 install dist/PySide-1.2.2-cp27-none-linux-x86_64.whl + + +Installing PySide distribution into ``virtual`` Python environment +------------------------------------------------------------------ + +#. Install latest ``virtualenv`` distribution: + + :: + + $ sudo pip2.7 virtualenv + +#. Use ``virtualenv`` to make a workspace: + + :: + + $ virtualenv-2.7 env + +#. Switch to the ``env`` directory: + + :: + + $ cd env + +#. Install the distribution with ``pip`` (wheel binary file name may vary by platform): + + :: + + $ bin/pip2.7 install ../dist/PySide-1.2.2-cp27-none-linux-x86_64.whl diff --git a/docs/building/macosx.rst b/docs/building/macosx.rst new file mode 100644 index 0000000..807b47b --- /dev/null +++ b/docs/building/macosx.rst @@ -0,0 +1,263 @@ +.. _building_macosx: + +Building PySide on a Mac OS X System +==================================== + +Mac OS X is a Unix flavor, partially based upon +`BSD Unix `_. + +The supported Mac OS X versions created by `Apple `_ are + +- OS X 10.6 *Snow Leopard* +- OS X 10.7 *Lion* +- OS X 10.8 *Mountain Lion* +- OS X 10.9 *Mavericks* +- OS X 10.10 *Yosemite* + +Mac OS X is a proprietary UNIX flavor of BSD Unix and only partially similar to +Linux. Therefore, the usual packages from Linux distributions cannot be used +without modifications. + +There are several known package managers which provide support for Mac OS X, namely + +- `MacPorts `_ +- `Fink `_ +- `Homebrew `_ + +The main purpose of all of these projects is to provide the missing Linux packages +for Mac OS X. + +Throughout this tutorial, we are only using `Homebrew `_, because +it appears to be the most light-weight package manager available. All installations +are made to /usr/local/(bin|lib|include|shared) by simple symlinks. + +But it should be easy to translate these instructions for the other, heavier package managers. + + +Installing prerequisites +------------------------ + +#. Install Package Manager: + + :: + + $ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" + + Follow the on-screen instructions to make adjustions, especially run + + :: + + $ brew doctor + + Also see the `homebrew homepage `_ for further information + +#. Install `Xcode `_ (optional): + + Follow the on-screen instructions. If you selected any extensions to be installed, + wait for their completion before you proceed. + + .. note:: + + If you are using Mavericks, you can also use the Xcode Command Line Tools without actually installing Xcode + (not tested, see this article: `How to Install Command Line Tools in OS X Mavericks (Without Xcode) + `_). + +#. Install the Xcode command Line Tools: + + After Xcode installation has finished, you can open a command shell and issue + + :: + + $ xcode-select --install + + This will open a dialog window with further instructions. + After the command line tools are installed, you will not need to use Xcode again + in order to set up PySide. + +#. Install build dependencies: + + :: + + $ brew install python cmake qt + + Remark: This installs ``Homebrew`` Python, which is fine for you as a single user. + If you are considering to build installers for external users, see the section + ``About PySide Distributions``. + +#. Install latest ``pip`` distribution into the Python you + installed in the first step: download `get-pip.py + `_ and run it using + the ``python`` interpreter of your Python 2.7 installation using a + command prompt: + + :: + + $ wget https://bootstrap.pypa.io/get-pip.py + $ sudo python2.7 get-pip.py + + .. note:: + + There are situations with older Python versions, where the above procedure does not work. + You can then use this last-resort work-around (tested):: + + $ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py + $ sudo python2.7 ez_setup.py + $ sudo easy_install pip + $ sudo pip install setuptools -U + $ sudo pip install wheel -U + +#. Install latest ``wheel`` distribution: + + :: + + $ sudo pip2.7 install wheel + + +About PySide Distribution +------------------------- + +If you want to build PySide for your own use, the above instructions are ok. + +But when you are considering to build PySide for other versions or other users, you need +to be aware of the following caveat: + +- Mac OS X has the concept of a ``MACOSX_DEPLOYMENT_TARGET`` + +- The current deployment targets which work with PySide are 10.6 to 10.9 . + +- All binary installers from https://www.python.org are built with the setting + +:: + + $ export MACOSX_DEPLOYMENT_TARGET=10.6 # Snow Leopard + +- The default setting for the deployment target of an extension (like PySide) + is always inherited from the Python used for building. + You can set the deployment target higher than that, but not below the + OS X version that was set during building your Python installation. + +- Current distributions like Homebrew set the deployment target to the same + value as the OS version they are built with. (I.E. 10.9 for Mavericks). + +- Example: A PySide, built on Mavericks, will therefore not run on a Python that was built + for Mountain Lion. + +Recommendation: + +- Use Homebrew's simplicity for your own machine. Do not use it for distributing. + +- Use one of the `Python.org Distributions `_ + or + +- Build your own Python, either from a tar archive ( + `Python 2.7 `_ or + `Python 3.4 `_), or from a + `Mercurial repository `_ with an explicit setting of + ``MACOSX_DEPLOYMENT_TARGET``. + +Building PySide distribution +---------------------------- + +#. Download ``PySide`` source distribution: + + :: + + $ wget https://pypi.python.org/packages/source/P/PySide/PySide-1.2.2.tar.gz + +#. Extract the source distribution: + + :: + + $ tar -xvzf PySide-1.2.2.tar.gz + +#. Switch to the distribution directory: + + :: + + $ cd PySide-1.2.2 + +#. Build the ``wheel`` binary distribution: + + :: + + $ python2.7 setup.py bdist_wheel + + +Building PySide distribution from a Git repository +-------------------------------------------------- + +#. Clone ``PySide`` setup scripts from git repository: + + :: + + $ git clone https://github.com/PySide/pyside-setup.git pyside-setup + +#. Switch to the ``pyside-setup`` directory: + + :: + + $ cd pyside-setup + +#. Build ``PySide`` distribution: + + :: + + $ python2.7 setup.py bdist_wheel --version=1.2.2 + + .. commented out, working on this + #. Optionally you can build standalone version of distribution with embedded Qt libs: + + :: + + $ python2.7 setup.py bdist_wheel --version=1.2.2 --standalone + +#. To build the development version of ``PySide`` distribution, ignore the --version parameter: + + :: + + $ python2.7 setup.py bdist_wheel + + +Installing PySide distribution +------------------------------ + +#. After the successful build, install the distribution with ``pip``: + + :: + + $ sudo pip2.7 install dist/PySide-1.2.2-cp27-none-linux-x86_64.whl + + +Installing PySide distribution into ``virtual`` Python environment +------------------------------------------------------------------ + +#. Install latest ``virtualenv`` distribution: + + :: + + $ sudo pip2.7 virtualenv + +#. Use ``virtualenv`` to make a workspace: + + :: + + $ virtualenv-2.7 env + +#. Activate the virtual Python in the ``env`` directory: + + :: + + $ source env/bin/activate + +#. Install the distribution with ``pip``: + + :: + + (env) $ pip install ../dist/PySide-1.2.2-cp27-none-linux-x86_64.whl + +#. Leave the virtual environment (optional): + + :: + + (env) $ deactivate + $ diff --git a/docs/building/options.rst b/docs/building/options.rst new file mode 100644 index 0000000..71e7f6a --- /dev/null +++ b/docs/building/options.rst @@ -0,0 +1,99 @@ +.. _building_options: + +PySide Setup Script command line options +======================================== + +Usage on a Windows System +------------------------- + +:: + + c:\> c:\Python27\python.exe setup.py [distribution_type] [options] + +Usage on a Linux/Mac OS X System +-------------------------------- + +:: + + python2.7 setup.py [distribution_type] [options] + + +Distribution types +------------------ + +``bdist_wheel`` + Create a wheel binary distribution. + This distribution type can be installed with ``pip``. + +``bdist_egg`` + Create an egg binary distribution. + This distribution type can be installed with ``easy_install``. + +``bdist_wininst`` + Create a standalone windows installer with embedded Qt libs and development tools. + This distribution type can be installed with ``easy_install``. + +``install`` + Install package to site packages folder. + +``develop`` + Install package in ``development mode``, such that it's available on + ``sys.path``, yet can still be edited directly from its source folder. + +``sdist`` + Create a full source distribution with included sources of PySide Setup Scripts, + PySide, Shiboken, PySide Tools and PySide Examples. + Can be used to build binary distribution in offline mode. + +Options +------- + +``--qmake`` + Specify the path to qmake. + Useful when the qmake is not in path or more than one Qt versions are installed. + +``--openssl`` + Specify the path to OpenSSL libs. + +``--only-package`` + Skip rebuilding everything and create distribution from prebuilt binaries. + Before using this option first time, the full distribution build is required. + +``--cmake`` + Specify the path to cmake. + Useful when the cmake is not in path. + +``--standalone`` + When enabled, all required Qt libs will be included in PySide distribution. + This option is allways enabled on Windows. + On Linux it's disabled by default. + + .. note:: + + This option does not work on Mac OS X, yet. + +``--version`` + Specify what version of PySide distribution to build. + This option is available only when the setup scripts are cloned from git repository. + +``--list-versions`` + List available versions of PySide distributions. + +``--ignore-git`` + Don't pull sources from git repository. + +``--make-spec`` + Specify the cmake makefile generator type. + Available values are ``msvc`` on Windows and ``make`` on Linux/Mac OS X. + +``--no-examples`` + Don't include PySide examples in PySide distribution + +``--jobs`` + Specify the number of parallel build jobs + +``--jom`` + Use `jom `_ instead of nmake with msvc + +``--build-tests`` + Enable building the tests diff --git a/docs/building/windows.rst b/docs/building/windows.rst new file mode 100644 index 0000000..72266c9 --- /dev/null +++ b/docs/building/windows.rst @@ -0,0 +1,136 @@ +.. _building_windows: + +Building PySide on a Windows System +=================================== + +Installing prerequisites +------------------------ + +#. Install `Python + `_. + +#. Install `Qt 4.8 libraries for Windows VS 2008 edition + `_ + when building against Python 2.6, 2.7 or 3.2. + + Install `Qt 4.8 libraries for Windows VS 2010 edition + `_ + when building against Python 3.3 or 3.4. + +#. Install `Cmake + `_. + +#. Install `Windows SDK v7.0 + `_ + when building against Python 2.6, 2.7 or 3.2. + + Install `Windows SDK v7.1 + `_ + when building against Python 3.3 or 3.4. + +#. Install `Git + `_. + +#. (Optional) Install `OpenSSL + `_. + +#. Install latest ``pip`` distribution into the Python you + installed in the first step: download `get-pip.py + `_ and run it using + the ``python`` interpreter of your Python 2.7 installation using a + command prompt: + + :: + + c:\> c:\Python27\python get-pip.py + +#. Install latest `wheel` distribution: + + :: + + c:\> c:\Python27\Scripts\pip install wheel + + +Building PySide distribution +---------------------------- + +#. Download and extract `PySide source distribution + `_ + +#. Switch to the distribution directory: + + :: + + c:\> cd PySide-1.2.2 + +#. Build the ``wheel`` binary distribution: + + :: + + c:\> c:\Python27\python.exe setup.py bdist_wheel --qmake=c:\Qt\4.8.5\bin\qmake.exe --openssl=c:\OpenSSL32bit\bin + + +Building PySide distribution from a Git repository +-------------------------------------------------- + +#. Clone ``PySide`` setup scripts from git repository: + + :: + + c:\> git clone https://github.com/PySide/pyside-setup.git pyside-setup + +#. Switch to the ``pyside-setup`` directory: + + :: + + c:\> cd pyside-setup + +#. Build the `wheel` binary distribution: + + :: + + c:\> c:\Python27\python.exe setup.py bdist_wheel --version=1.2.2 --qmake=c:\Qt\4.8.5\bin\qmake.exe --openssl=c:\OpenSSL32bit\bin + +#. To build the development version of ``PySide`` distribution, ignore the --version parameter: + + :: + + c:\> c:\Python27\python.exe setup.py bdist_wheel --qmake=c:\Qt\4.8.5\bin\qmake.exe --openssl=c:\OpenSSL32bit\bin + + +Installing PySide distribution +------------------------------ + +#. After the successful build, install the distribution with ``pip``: + + :: + + c:\> c:\Python27\Scripts\pip install dist\PySide-1.2.2-cp27-none-win32.whl + + +Installing PySide distribution into ``virtual`` Python environment +------------------------------------------------------------------ + +#. Install latest ``virtualenv`` distribution: + + :: + + c:\> c:\Python27\Scripts\pip install virtualenv + +#. Use ``virtualenv`` to make a workspace: + + :: + + c:\> c:\Python27\Scripts\virtualenv env + +#. Switch to the ``env`` directory: + + :: + + c:\> cd env + +#. Install the distribution with ``pip``: + + :: + + c:\> Scripts\pip install ..\dist\PySide-1.2.2-cp27-none-win32.whl diff --git a/docs/changes.rst b/docs/changes.rst new file mode 100644 index 0000000..41031dd --- /dev/null +++ b/docs/changes.rst @@ -0,0 +1,4 @@ +.. toctree:: + :maxdepth: 2 + +.. include:: ../CHANGES.rst diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..7f8bfb2 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,301 @@ +# -*- coding: utf-8 -*- +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# +# +# PySide documentation build configuration file, created by +# sphinx-quickstart on Mon May 12 22:14:54 2014. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'PySide' +copyright = u'2014, PySide Team' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '1.2.2' +# The full version, including alpha/beta/rc tags. +release = '1.2.2' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +#keep_warnings = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# on_rtd is whether we are on readthedocs.org +on_rtd = os.environ.get('READTHEDOCS', None) == 'True' + +if not on_rtd: + # only import and set the theme if we're building docs locally + import sphinx_rtd_theme + html_theme = 'sphinx_rtd_theme' + html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'PySidedoc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ('index', 'PySide.tex', u'PySide Documentation', + u'PySide Team', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'pyside', u'PySide Documentation', + [u'PySide Team'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'PySide', u'PySide Documentation', + u'PySide Team', 'PySide', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..b918c60 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,69 @@ +====== +PySide +====== + +.. image:: https://pypip.in/wheel/PySide/badge.png + :target: https://pypi.python.org/pypi/PySide/ + :alt: Wheel Status + +.. image:: https://pypip.in/download/PySide/badge.png + :target: https://pypi.python.org/pypi/PySide/ + :alt: Downloads + +.. image:: https://pypip.in/version/PySide/badge.png + :target: https://pypi.python.org/pypi/PySide/ + :alt: Latest Version + +.. image:: https://pypip.in/license/PySide/badge.png + :target: https://pypi.python.org/pypi/PySide/ + :alt: License + +.. image:: https://readthedocs.org/projects/pip/badge/ + :target: https://pyside.readthedocs.org + +| + +Introduction +============ + +PySide is the Python Qt bindings project, providing access the complete Qt 4.8 framework +as well as to generator tools for rapidly generating bindings for any C++ libraries. + +The PySide project is developed in the open, with all facilities you'd expect +from any modern OSS project such as all code in a git repository, an open +Bugzilla for reporting bugs, and an open design process. We welcome +any contribution without requiring a transfer of copyright. + +The PySide reference documentation is hosted at +`http://pyside.github.io/docs/pyside/ +`_. + + +Compatibility +============= + +PySide requires Python 2.6 or later and Qt 4.6 or better. + +.. note:: + + Qt 5.x is currently under construction. + + +Contents +======== + +.. toctree:: + :maxdepth: 2 + + installing/index.rst + building/index.rst + changes.rst + + +Feedback and getting involved +============================= + +- Mailing list: http://lists.qt-project.org/mailman/listinfo/pyside +- Issue tracker: https://bugreports.qt-project.org/browse/PYSIDE +- Code Repository: http://qt.gitorious.org/pyside +- Examples Code Repository: https://github.com/PySide/Examples diff --git a/docs/installing/index.rst b/docs/installing/index.rst new file mode 100644 index 0000000..ab4211f --- /dev/null +++ b/docs/installing/index.rst @@ -0,0 +1,9 @@ +Installing PySide +================= + +.. toctree:: + :maxdepth: 2 + + windows.rst + macosx.rst + linux.rst diff --git a/docs/installing/linux.rst b/docs/installing/linux.rst new file mode 100644 index 0000000..2fefd7c --- /dev/null +++ b/docs/installing/linux.rst @@ -0,0 +1,9 @@ +.. _installing_linux: + +Installing PySide on a Linux System +=================================== + +We do not provide binaries for Linux. Please read +the build instructions in section +`Building PySide on a Linux System +`_. diff --git a/docs/installing/macosx.rst b/docs/installing/macosx.rst new file mode 100644 index 0000000..214d52f --- /dev/null +++ b/docs/installing/macosx.rst @@ -0,0 +1,32 @@ +.. _installing_macosx: + +Installing PySide on a Mac OS X System +====================================== + +Installing prerequisites +------------------------ + +Install latest ``pip`` distribution: download `get-pip.py +`_ and run it using +the ``python`` interpreter. + +You need to install or build Qt 4.8 first, see the `Qt Project Documentation +`_. + +Alternatively you can use `Homebrew `_ and install Qt with + +:: + + $ brew install qt + +Installing PySide +----------------- + +To install PySide on Mac OS X you can choose from the following options: + +#. Use pip to install the ``wheel`` binary packages: + + :: + + $ pip install -U PySide + diff --git a/docs/installing/windows.rst b/docs/installing/windows.rst new file mode 100644 index 0000000..899e2e3 --- /dev/null +++ b/docs/installing/windows.rst @@ -0,0 +1,33 @@ +.. _installing_windows: + +Installing PySide on a Windows System +===================================== + +Installing prerequisites +------------------------ + +Install latest ``pip`` distribution: download `get-pip.py +`_ and run it using +the ``python`` interpreter. + +Installing PySide +----------------- + +To install PySide on Windows you can choose from the following options: + +#. Use pip to install the ``wheel`` binary packages: + + :: + + pip install -U PySide + +#. Use setuptools to install the ``egg`` binary packages (deprecated): + + :: + + easy_install -U PySide + +.. note:: + + Provided binaries are without any other external dependencies. + All required Qt libraries, development tools and examples are included. diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000..4e169af --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,281 @@ +::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:: +:: Copyright (C) 2017 The Qt Company Ltd. +:: Contact: https://www.qt.io/licensing/ +:: +:: This file is part of Qt for Python. +:: +:: $QT_BEGIN_LICENSE:LGPL$ +:: Commercial License Usage +:: Licensees holding valid commercial Qt licenses may use this file in +:: accordance with the commercial license agreement provided with the +:: Software or, alternatively, in accordance with the terms contained in +:: a written agreement between you and The Qt Company. For licensing terms +:: and conditions see https://www.qt.io/terms-conditions. For further +:: information use the contact form at https://www.qt.io/contact-us. +:: +:: GNU Lesser General Public License Usage +:: Alternatively, this file may be used under the terms of the GNU Lesser +:: General Public License version 3 as published by the Free Software +:: Foundation and appearing in the file LICENSE.LGPL3 included in the +:: packaging of this file. Please review the following information to +:: ensure the GNU Lesser General Public License version 3 requirements +:: will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +:: +:: GNU General Public License Usage +:: Alternatively, this file may be used under the terms of the GNU +:: General Public License version 2.0 or (at your option) the GNU General +:: Public license version 3 or any later version approved by the KDE Free +:: Qt Foundation. The licenses are as published by the Free Software +:: Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +:: included in the packaging of this file. Please review the following +:: information to ensure the GNU General Public License requirements will +:: be met: https://www.gnu.org/licenses/gpl-2.0.html and +:: https://www.gnu.org/licenses/gpl-3.0.html. +:: +:: $QT_END_LICENSE$ +:: +::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::# + +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=_build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . +set I18NSPHINXOPTS=%SPHINXOPTS% . +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. xml to make Docutils-native XML files + echo. pseudoxml to make pseudoxml-XML files for display purposes + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + + +%SPHINXBUILD% 2> nul +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\PySide.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\PySide.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdf" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf + cd %BUILDDIR%/.. + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdfja" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf-ja + cd %BUILDDIR%/.. + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +if "%1" == "xml" ( + %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The XML files are in %BUILDDIR%/xml. + goto end +) + +if "%1" == "pseudoxml" ( + %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. + goto end +) + +:end diff --git a/examples/3d/simple3d.py b/examples/3d/simple3d.py new file mode 100644 index 0000000..b97ee79 --- /dev/null +++ b/examples/3d/simple3d.py @@ -0,0 +1,164 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the qt3d/simple-cpp example from Qt v5.x""" + +import sys +from PySide2.QtCore import(Property, QObject, QPropertyAnimation, Signal, Slot) +from PySide2.QtGui import (QGuiApplication, QMatrix4x4, QQuaternion, QVector3D, QWindow) +from PySide2.Qt3DCore import (Qt3DCore) +from PySide2.Qt3DRender import (Qt3DRender) +from PySide2.Qt3DExtras import (Qt3DExtras) + +class OrbitTransformController(QObject): + def __init__(self, parent): + super(OrbitTransformController, self).__init__(parent) + self._target = None + self._matrix = QMatrix4x4() + self._radius = 1 + self._angle = 0 + + def setTarget(self, t): + self._target = t + + def getTarget(self): + return self._target + + def setRadius(self, radius): + if self._radius != radius: + self._radius = radius + self.updateMatrix() + self.radiusChanged.emit() + + def getRadius(self): + return self._radius + + def setAngle(self, angle): + if self._angle != angle: + self._angle = angle + self.updateMatrix() + self.angleChanged.emit() + + def getAngle(self): + return self._angle + + def updateMatrix(self): + self._matrix.setToIdentity() + self._matrix.rotate(self._angle, QVector3D(0, 1, 0)) + self._matrix.translate(self._radius, 0, 0) + if self._target is not None: + self._target.setMatrix(self._matrix) + + angleChanged = Signal() + radiusChanged = Signal() + angle = Property(float, getAngle, setAngle, notify=angleChanged) + radius = Property(float, getRadius, setRadius, notify=radiusChanged) + +class Window(Qt3DExtras.Qt3DWindow): + def __init__(self): + super(Window, self).__init__() + + # Camera + self.camera().lens().setPerspectiveProjection(45, 16 / 9, 0.1, 1000) + self.camera().setPosition(QVector3D(0, 0, 40)) + self.camera().setViewCenter(QVector3D(0, 0, 0)) + + # For camera controls + self.createScene() + self.camController = Qt3DExtras.QOrbitCameraController(self.rootEntity) + self.camController.setLinearSpeed(50) + self.camController.setLookSpeed(180) + self.camController.setCamera(self.camera()) + + self.setRootEntity(self.rootEntity) + + def createScene(self): + # Root entity + self.rootEntity = Qt3DCore.QEntity() + + # Material + self.material = Qt3DExtras.QPhongMaterial(self.rootEntity) + + # Torus + self.torusEntity = Qt3DCore.QEntity(self.rootEntity) + self.torusMesh = Qt3DExtras.QTorusMesh() + self.torusMesh.setRadius(5) + self.torusMesh.setMinorRadius(1) + self.torusMesh.setRings(100) + self.torusMesh.setSlices(20) + + self.torusTransform = Qt3DCore.QTransform() + self.torusTransform.setScale3D(QVector3D(1.5, 1, 0.5)) + self.torusTransform.setRotation(QQuaternion.fromAxisAndAngle(QVector3D(1, 0, 0), 45)) + + self.torusEntity.addComponent(self.torusMesh) + self.torusEntity.addComponent(self.torusTransform) + self.torusEntity.addComponent(self.material) + + # Sphere + self.sphereEntity = Qt3DCore.QEntity(self.rootEntity) + self.sphereMesh = Qt3DExtras.QSphereMesh() + self.sphereMesh.setRadius(3) + + self.sphereTransform = Qt3DCore.QTransform() + self.controller = OrbitTransformController(self.sphereTransform) + self.controller.setTarget(self.sphereTransform) + self.controller.setRadius(20) + + self.sphereRotateTransformAnimation = QPropertyAnimation(self.sphereTransform) + self.sphereRotateTransformAnimation.setTargetObject(self.controller) + self.sphereRotateTransformAnimation.setPropertyName(b"angle") + self.sphereRotateTransformAnimation.setStartValue(0) + self.sphereRotateTransformAnimation.setEndValue(360) + self.sphereRotateTransformAnimation.setDuration(10000) + self.sphereRotateTransformAnimation.setLoopCount(-1) + self.sphereRotateTransformAnimation.start() + + self.sphereEntity.addComponent(self.sphereMesh) + self.sphereEntity.addComponent(self.sphereTransform) + self.sphereEntity.addComponent(self.material) + +if __name__ == '__main__': + app = QGuiApplication(sys.argv) + view = Window() + view.show() + sys.exit(app.exec_()) diff --git a/examples/axcontainer/axviewer.py b/examples/axcontainer/axviewer.py new file mode 100644 index 0000000..7959389 --- /dev/null +++ b/examples/axcontainer/axviewer.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 Active Qt Viewer example""" + +import sys +from PySide2.QtAxContainer import QAxSelect, QAxWidget +from PySide2.QtGui import QKeySequence +from PySide2.QtWidgets import (QAction, qApp, QApplication, QDialog, QFileDialog, + QMainWindow, QMenu, QMenuBar, QMessageBox, QToolBar) + +class MainWindow(QMainWindow): + + def __init__(self): + super(MainWindow, self).__init__() + + toolBar = QToolBar() + self.addToolBar(toolBar) + fileMenu = self.menuBar().addMenu("&File") + loadAction = QAction("Load...", self, shortcut="Ctrl+L", triggered=self.load) + fileMenu.addAction(loadAction) + toolBar.addAction(loadAction) + exitAction = QAction("E&xit", self, shortcut="Ctrl+Q", triggered=self.close) + fileMenu.addAction(exitAction) + + aboutMenu = self.menuBar().addMenu("&About") + aboutQtAct = QAction("About &Qt", self, triggered=qApp.aboutQt) + aboutMenu.addAction(aboutQtAct) + self.axWidget = QAxWidget() + self.setCentralWidget(self.axWidget) + + def load(self): + axSelect = QAxSelect(self) + if axSelect.exec_() == QDialog.Accepted: + clsid = axSelect.clsid() + if not self.axWidget.setControl(clsid): + QMessageBox.warning(self, "AxViewer", "Unable to load " + clsid + ".") + +if __name__ == '__main__': + app = QApplication(sys.argv) + mainWin = MainWindow() + availableGeometry = app.desktop().availableGeometry(mainWin) + mainWin.resize(availableGeometry.width() / 3, availableGeometry.height() / 2) + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/charts/audio.py b/examples/charts/audio.py new file mode 100644 index 0000000..95b78d6 --- /dev/null +++ b/examples/charts/audio.py @@ -0,0 +1,128 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the charts/audio example from Qt v5.x""" + +import os +import sys +from PySide2.QtCharts import QtCharts +from PySide2.QtCore import QPointF, QRect, QSize +from PySide2.QtMultimedia import (QAudio, QAudioDeviceInfo, QAudioFormat, + QAudioInput) +from PySide2.QtWidgets import QApplication, QMainWindow, QMessageBox + +sampleCount = 2000 +resolution = 4 + +class MainWindow(QMainWindow): + def __init__(self, device): + super(MainWindow, self).__init__() + + self.series = QtCharts.QLineSeries() + self.chart = QtCharts.QChart() + self.chart.addSeries(self.series) + self.axisX = QtCharts.QValueAxis() + self.axisX.setRange(0, sampleCount) + self.axisX.setLabelFormat("%g") + self.axisX.setTitleText("Samples") + self.axisY = QtCharts.QValueAxis() + self.axisY.setRange(-1, 1) + self.axisY.setTitleText("Audio level") + self.chart.setAxisX(self.axisX, self.series) + self.chart.setAxisY(self.axisY, self.series) + self.chart.legend().hide() + self.chart.setTitle("Data from the microphone ({})".format(device.deviceName())) + + formatAudio = QAudioFormat() + formatAudio.setSampleRate(8000) + formatAudio.setChannelCount(1) + formatAudio.setSampleSize(8) + formatAudio.setCodec("audio/pcm") + formatAudio.setByteOrder(QAudioFormat.LittleEndian) + formatAudio.setSampleType(QAudioFormat.UnSignedInt) + + self.audioInput = QAudioInput(device, formatAudio, self) + self.ioDevice = self.audioInput.start() + self.ioDevice.readyRead.connect(self._readyRead) + + self.chartView = QtCharts.QChartView(self.chart) + self.setCentralWidget(self.chartView) + + self.buffer = [QPointF(x, 0) for x in range(sampleCount)] + self.series.append(self.buffer) + + def closeEvent(self, event): + if self.audioInput is not None: + self.audioInput.stop() + event.accept() + + def _readyRead(self): + data = self.ioDevice.readAll() + availableSamples = data.size() // resolution + start = 0 + if (availableSamples < sampleCount): + start = sampleCount - availableSamples + for s in range(start): + self.buffer[s].setY(self.buffer[s + availableSamples].y()) + + dataIndex = 0 + for s in range(start, sampleCount): + value = (ord(data[dataIndex]) - 128) / 128 + self.buffer[s].setY(value) + dataIndex = dataIndex + resolution + self.series.replace(self.buffer) + +if __name__ == '__main__': + app = QApplication(sys.argv) + + inputDevice = QAudioDeviceInfo.defaultInputDevice() + if (inputDevice.isNull()): + QMessageBox.warning(None, "audio", "There is no audio input device available.") + sys.exit(-1) + + mainWin = MainWindow(inputDevice) + mainWin.setWindowTitle("audio") + availableGeometry = app.desktop().availableGeometry(mainWin) + size = availableGeometry.height() * 3 / 4 + mainWin.resize(size, size) + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/charts/callout.py b/examples/charts/callout.py new file mode 100644 index 0000000..4b18b64 --- /dev/null +++ b/examples/charts/callout.py @@ -0,0 +1,258 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the Callout example from Qt v5.x""" + +import sys +from PySide2.QtWidgets import (QApplication, QWidget, QGraphicsScene, + QGraphicsView, QGraphicsSimpleTextItem, QGraphicsItem) +from PySide2.QtCore import Qt, QPointF, QRectF, QRect +from PySide2.QtCharts import QtCharts +from PySide2.QtGui import QPainter, QFont, QFontMetrics, QPainterPath, QColor + + +class Callout(QGraphicsItem): + + def __init__(self, chart): + QGraphicsItem.__init__(self, chart) + self._chart = chart + self._text = "" + self._textRect = QRectF() + self._anchor = QPointF() + self._font = QFont() + self._rect = QRectF() + + def boundingRect(self): + anchor = self.mapFromParent(self._chart.mapToPosition(self._anchor)) + rect = QRectF() + rect.setLeft(min(self._rect.left(), anchor.x())) + rect.setRight(max(self._rect.right(), anchor.x())) + rect.setTop(min(self._rect.top(), anchor.y())) + rect.setBottom(max(self._rect.bottom(), anchor.y())) + + return rect + + def paint(self, painter, option, widget): + path = QPainterPath() + path.addRoundedRect(self._rect, 5, 5) + anchor = self.mapFromParent(self._chart.mapToPosition(self._anchor)) + if not self._rect.contains(anchor) and not self._anchor.isNull(): + point1 = QPointF() + point2 = QPointF() + + # establish the position of the anchor point in relation to _rect + above = anchor.y() <= self._rect.top() + aboveCenter = (anchor.y() > self._rect.top() and + anchor.y() <= self._rect.center().y()) + belowCenter = (anchor.y() > self._rect.center().y() and + anchor.y() <= self._rect.bottom()) + below = anchor.y() > self._rect.bottom() + + onLeft = anchor.x() <= self._rect.left() + leftOfCenter = (anchor.x() > self._rect.left() and + anchor.x() <= self._rect.center().x()) + rightOfCenter = (anchor.x() > self._rect.center().x() and + anchor.x() <= self._rect.right()) + onRight = anchor.x() > self._rect.right() + + # get the nearest _rect corner. + x = (onRight + rightOfCenter) * self._rect.width() + y = (below + belowCenter) * self._rect.height() + cornerCase = ((above and onLeft) or (above and onRight) or + (below and onLeft) or (below and onRight)) + vertical = abs(anchor.x() - x) > abs(anchor.y() - y) + + x1 = (x + leftOfCenter * 10 - rightOfCenter * 20 + cornerCase * + int(not vertical) * (onLeft * 10 - onRight * 20)) + y1 = (y + aboveCenter * 10 - belowCenter * 20 + cornerCase * + vertical * (above * 10 - below * 20)) + point1.setX(x1) + point1.setY(y1) + + x2 = (x + leftOfCenter * 20 - rightOfCenter * 10 + cornerCase * + int(not vertical) * (onLeft * 20 - onRight * 10)) + y2 = (y + aboveCenter * 20 - belowCenter * 10 + cornerCase * + vertical * (above * 20 - below * 10)) + point2.setX(x2) + point2.setY(y2) + + path.moveTo(point1) + path.lineTo(anchor) + path.lineTo(point2) + path = path.simplified() + + painter.setBrush(QColor(255, 255, 255)) + painter.drawPath(path) + painter.drawText(self._textRect, self._text) + + def mousePressEvent(self, event): + event.setAccepted(True) + + def mouseMoveEvent(self, event): + if event.buttons() & Qt.LeftButton: + self.setPos(mapToParent( + event.pos() - event.buttonDownPos(Qt.LeftButton))) + event.setAccepted(True) + else: + event.setAccepted(False) + + def setText(self, text): + self._text = text + metrics = QFontMetrics(self._font) + self._textRect = QRectF(metrics.boundingRect( + QRect(0.0, 0.0, 150.0, 150.0),Qt.AlignLeft, self._text)) + self._textRect.translate(5, 5) + self.prepareGeometryChange() + self._rect = self._textRect.adjusted(-5, -5, 5, 5) + + def setAnchor(self, point): + self._anchor = QPointF(point) + + def updateGeometry(self): + self.prepareGeometryChange() + self.setPos(self._chart.mapToPosition( + self._anchor) + QPointF(10, -50)) + + +class View(QGraphicsView): + def __init__(self, parent = None): + super(View, self).__init__(parent) + self.setScene(QGraphicsScene(self)) + + self.setDragMode(QGraphicsView.NoDrag) + self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + + # Chart + self._chart = QtCharts.QChart() + self._chart.setMinimumSize(640, 480) + self._chart.setTitle("Hover the line to show callout. Click the line " + "to make it stay") + self._chart.legend().hide() + self.series = QtCharts.QLineSeries() + self.series.append(1, 3) + self.series.append(4, 5) + self.series.append(5, 4.5) + self.series.append(7, 1) + self.series.append(11, 2) + self._chart.addSeries(self.series) + + self.series2 = QtCharts.QSplineSeries() + self.series2.append(1.6, 1.4) + self.series2.append(2.4, 3.5) + self.series2.append(3.7, 2.5) + self.series2.append(7, 4) + self.series2.append(10, 2) + self._chart.addSeries(self.series2) + + self._chart.createDefaultAxes() + self._chart.setAcceptHoverEvents(True) + + self.setRenderHint(QPainter.Antialiasing) + self.scene().addItem(self._chart) + + self._coordX = QGraphicsSimpleTextItem(self._chart) + self._coordX.setPos( + self._chart.size().width()/2 - 50, self._chart.size().height()) + self._coordX.setText("X: "); + self._coordY = QGraphicsSimpleTextItem(self._chart) + self._coordY.setPos( + self._chart.size().width()/2 + 50, self._chart.size().height()) + self._coordY.setText("Y: ") + + self._callouts = [] + self._tooltip = Callout(self._chart) + + self.series.clicked.connect(self.keepCallout) + self.series.hovered.connect(self.tooltip) + + self.series2.clicked.connect(self.keepCallout) + self.series2.hovered.connect(self.tooltip) + + self.setMouseTracking(True) + + def resizeEvent(self, event): + if self.scene(): + self.scene().setSceneRect(QRectF(QPointF(0, 0), event.size())) + self._chart.resize(event.size()) + self._coordX.setPos( + self._chart.size().width()/2 - 50, + self._chart.size().height() - 20) + self._coordY.setPos( + self._chart.size().width()/2 + 50, + self._chart.size().height() - 20) + for callout in self._callouts: + callout.updateGeometry() + QGraphicsView.resizeEvent(self, event) + + + def mouseMoveEvent(self, event): + self._coordX.setText("X: {0:.2f}" + .format(self._chart.mapToValue(event.pos()).x())) + self._coordY.setText("Y: {0:.2f}" + .format(self._chart.mapToValue(event.pos()).y())) + QGraphicsView.mouseMoveEvent(self, event) + + def keepCallout(self): + self._callouts.append(self._tooltip); + self._tooltip = Callout(self._chart) + + def tooltip(self, point, state): + if self._tooltip == 0: + self._tooltip = Callout(self._chart) + + if state: + self._tooltip.setText("X: {0:.2f} \nY: {1:.2f} " + .format(point.x(),point.y())) + self._tooltip.setAnchor(point) + self._tooltip.setZValue(11) + self._tooltip.updateGeometry() + self._tooltip.show() + else: + self._tooltip.hide() + + +if __name__ == "__main__": + app = QApplication(sys.argv) + v = View() + v.show() + sys.exit(app.exec_()) diff --git a/examples/charts/chartthemes/README.md b/examples/charts/chartthemes/README.md new file mode 100644 index 0000000..e11fa93 --- /dev/null +++ b/examples/charts/chartthemes/README.md @@ -0,0 +1,9 @@ +# Chart themes + +To generated the file `ui_themewidget.py`, the following +command need to be executed: + +`pyside2-uic themewidget.ui > ui_themewidget.py` + +Also, if you modify the UI file, then you would need +to run the previous command again. diff --git a/examples/charts/chartthemes/main.py b/examples/charts/chartthemes/main.py new file mode 100644 index 0000000..2632597 --- /dev/null +++ b/examples/charts/chartthemes/main.py @@ -0,0 +1,381 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the Chart Themes example from Qt v5.x""" + +import sys +from PySide2.QtCore import qApp, QPointF, Qt +from PySide2.QtGui import QColor, QPainter, QPalette +from PySide2.QtWidgets import (QApplication, QMainWindow, QSizePolicy, + QWidget) +from PySide2.QtCharts import QtCharts + +from ui_themewidget import Ui_ThemeWidgetForm as ui + +from random import random, uniform + +class ThemeWidget(QWidget): + def __init__(self, parent): + QWidget.__init__(self, parent) + self.charts = [] + + self.ui = ui() + self.list_count = 3 + self.value_max = 10 + self.value_count = 7 + self.data_table = self.generate_random_data(self.list_count, + self.value_max, self.value_count) + + self.ui.setupUi(self) + self.populate_themebox() + self.populate_animationbox() + self.populate_legendbox() + + # Area Chart + chart_view = QtCharts.QChartView(self.create_areachart()) + self.ui.gridLayout.addWidget(chart_view, 1, 0) + self.charts.append(chart_view) + + # Pie Chart + chart_view = QtCharts.QChartView(self.createPieChart()) + chart_view.setSizePolicy(QSizePolicy.Ignored, + QSizePolicy.Ignored) + self.ui.gridLayout.addWidget(chart_view, 1, 1) + self.charts.append(chart_view) + + # Line Chart + chart_view = QtCharts.QChartView(self.createLineChart()) + self.ui.gridLayout.addWidget(chart_view, 1, 2) + self.charts.append(chart_view) + + # Bar Chart + chart_view = QtCharts.QChartView(self.createBarChart()) + self.ui.gridLayout.addWidget(chart_view, 2, 0) + self.charts.append(chart_view) + + # Spline Chart + chart_view = QtCharts.QChartView(self.createSplineChart()) + self.ui.gridLayout.addWidget(chart_view, 2, 1) + self.charts.append(chart_view) + + # Scatter Chart + chart_view = QtCharts.QChartView(self.create_scatterchart()) + self.ui.gridLayout.addWidget(chart_view, 2, 2) + self.charts.append(chart_view) + + # Set defaults + self.ui.antialiasCheckBox.setChecked(True) + + # Set the colors from the light theme as default ones + pal = qApp.palette() + pal.setColor(QPalette.Window, QColor(0xf0f0f0)) + pal.setColor(QPalette.WindowText, QColor(0x404044)) + qApp.setPalette(pal) + + self.updateUI() + + + def generate_random_data(self, list_count, value_max, value_count): + data_table = [] + for i in range(list_count): + data_list = [] + y_value = 0 + for j in range(value_count): + constant = value_max / float(value_count) + y_value += uniform(0, constant) + x_value = (j + random()) * constant + value = QPointF(x_value, y_value) + label = "Slice {}: {}".format(i, j) + data_list.append((value, label)) + data_table.append(data_list) + + return data_table + + def populate_themebox(self): + theme = self.ui.themeComboBox + qchart = QtCharts.QChart + + theme.addItem("Light", qchart.ChartThemeLight) + theme.addItem("Blue Cerulean", qchart.ChartThemeBlueCerulean) + theme.addItem("Dark", qchart.ChartThemeDark) + theme.addItem("Brown Sand", qchart.ChartThemeBrownSand) + theme.addItem("Blue NCS", qchart.ChartThemeBlueNcs) + theme.addItem("High Contrast", qchart.ChartThemeHighContrast) + theme.addItem("Blue Icy", qchart.ChartThemeBlueIcy) + theme.addItem("Qt", qchart.ChartThemeQt) + + def populate_animationbox(self): + animated = self.ui.animatedComboBox + qchart = QtCharts.QChart + + animated.addItem("No Animations", qchart.NoAnimation) + animated.addItem("GridAxis Animations", qchart.GridAxisAnimations) + animated.addItem("Series Animations", qchart.SeriesAnimations) + animated.addItem("All Animations", qchart.AllAnimations) + + def populate_legendbox(self): + legend = self.ui.legendComboBox + + legend.addItem("No Legend ", 0) + legend.addItem("Legend Top", Qt.AlignTop) + legend.addItem("Legend Bottom", Qt.AlignBottom) + legend.addItem("Legend Left", Qt.AlignLeft) + legend.addItem("Legend Right", Qt.AlignRight) + + def create_areachart(self): + chart = QtCharts.QChart() + chart.setTitle("Area Chart") + + # The lower series initialized to zero values + lower_series = None + name = "Series " + for i in range(len(self.data_table)): + upper_series = QtCharts.QLineSeries(chart) + for j in range(len(self.data_table[i])): + data = self.data_table[i][j] + if lower_series: + points = lower_series.pointsVector() + y_value = points[i].y() + data[0].y() + upper_series.append(QPointF(j, y_value)) + else: + upper_series.append(QPointF(j, data[0].y())) + area = QtCharts.QAreaSeries(upper_series, lower_series) + area.setName("{}{}".format(name, i)) + chart.addSeries(area) + lower_series = upper_series + + chart.createDefaultAxes() + chart.axisX().setRange(0, self.value_count - 1) + chart.axisY().setRange(0, self.value_max) + # Add space to label to add space between labels and axis + chart.axisY().setLabelFormat("%.1f ") + + return chart + + def createBarChart(self): + chart = QtCharts.QChart() + chart.setTitle("Bar chart") + + series = QtCharts.QStackedBarSeries(chart) + for i in range(len(self.data_table)): + barset = QtCharts.QBarSet("Bar set {}".format(i)) + for data in self.data_table[i]: + barset.append(data[0].y()) + series.append(barset) + + chart.addSeries(series) + + chart.createDefaultAxes() + chart.axisY().setRange(0, self.value_max * 2) + # Add space to label to add space between labels and axis + chart.axisY().setLabelFormat("%.1f ") + + return chart + + def createLineChart(self): + chart = QtCharts.QChart() + chart.setTitle("Line chart") + + name = "Series " + for i, lst in enumerate(self.data_table): + series = QtCharts.QLineSeries(chart) + for data in lst: + series.append(data[0]) + series.setName("{}{}".format(name, i)) + chart.addSeries(series) + + chart.createDefaultAxes() + chart.axisX().setRange(0, self.value_max) + chart.axisY().setRange(0, self.value_count) + # Add space to label to add space between labels and axis + chart.axisY().setLabelFormat("%.1f ") + + return chart + + def createPieChart(self): + chart = QtCharts.QChart() + chart.setTitle("Pie chart") + + series = QtCharts.QPieSeries(chart) + for data in self.data_table[0]: + slc = series.append(data[1], data[0].y()) + if data == self.data_table[0][0]: + # Show the first slice exploded with label + slc.setLabelVisible() + slc.setExploded() + slc.setExplodeDistanceFactor(0.5) + + series.setPieSize(0.4) + chart.addSeries(series) + + return chart + + def createSplineChart(self): + chart = QtCharts.QChart() + chart.setTitle("Spline chart") + name = "Series " + for i, lst in enumerate(self.data_table): + series = QtCharts.QSplineSeries(chart) + for data in lst: + series.append(data[0]) + series.setName("{}{}".format(name, i)) + chart.addSeries(series) + + chart.createDefaultAxes() + chart.axisX().setRange(0, self.value_max) + chart.axisY().setRange(0, self.value_count) + # Add space to label to add space between labels and axis + chart.axisY().setLabelFormat("%.1f ") + + return chart + + def create_scatterchart(self): + chart = QtCharts.QChart() + chart.setTitle("Scatter chart") + name = "Series " + for i, lst in enumerate(self.data_table): + series = QtCharts.QScatterSeries(chart) + for data in lst: + series.append(data[0]) + series.setName("{}{}".format(name, i)) + chart.addSeries(series) + + chart.createDefaultAxes() + chart.axisX().setRange(0, self.value_max) + chart.axisY().setRange(0, self.value_count) + # Add space to label to add space between labels and axis + chart.axisY().setLabelFormat("%.1f ") + + return chart + + def updateUI(self): + def set_colors(window_color, text_color): + pal = self.window().palette() + pal.setColor(QPalette.Window, window_color) + pal.setColor(QPalette.WindowText, text_color) + self.window().setPalette(pal) + + idx = self.ui.themeComboBox.currentIndex() + theme = self.ui.themeComboBox.itemData(idx) + qchart = QtCharts.QChart + + if len(self.charts): + chart_theme = self.charts[0].chart().theme() + if chart_theme != theme: + for chart_view in self.charts: + if theme == 0: + theme_name = qchart.ChartThemeLight + elif theme == 1: + theme_name = qchart.ChartThemeBlueCerulean + elif theme == 2: + theme_name = qchart.ChartThemeDark + elif theme == 3: + theme_name = qchart.ChartThemeBrownSand + elif theme == 4: + theme_name = qchart.ChartThemeBlueNcs + elif theme == 5: + theme_name = qchart.ChartThemeHighContrast + elif theme == 6: + theme_name = qchart.ChartThemeBlueIcy + elif theme == 7: + theme_name = qchart.ChartThemeQt + else: + theme_name = qchart.ChartThemeLight + + chart_view.chart().setTheme(theme_name) + + # Set palette colors based on selected theme + if theme == qchart.ChartThemeLight: + set_colors(QColor(0xf0f0f0), QColor(0x404044)) + elif theme == qchart.ChartThemeDark: + set_colors(QColor(0x121218), QColor(0xd6d6d6)) + elif theme == qchart.ChartThemeBlueCerulean: + set_colors(QColor(0x40434a), QColor(0xd6d6d6)) + elif theme == qchart.ChartThemeBrownSand: + set_colors(QColor(0x9e8965), QColor(0x404044)) + elif theme == qchart.ChartThemeBlueNcs: + set_colors(QColor(0x018bba), QColor(0x404044)) + elif theme == qchart.ChartThemeHighContrast: + set_colors(QColor(0xffab03), QColor(0x181818)) + elif theme == qchart.ChartThemeBlueIcy: + set_colors(QColor(0xcee7f0), QColor(0x404044)) + else: + set_colors(QColor(0xf0f0f0), QColor(0x404044)) + + + # Update antialiasing + checked = self.ui.antialiasCheckBox.isChecked() + for chart in self.charts: + chart.setRenderHint(QPainter.Antialiasing, checked) + + # Update animation options + idx = self.ui.animatedComboBox.currentIndex() + options = self.ui.animatedComboBox.itemData(idx) + + if len(self.charts): + chart = self.charts[0].chart() + animation_options = chart.animationOptions() + if animation_options != options: + for chart_view in self.charts: + chart_view.chart().setAnimationOptions(options) + + # Update legend alignment + idx = self.ui.legendComboBox.currentIndex() + alignment = self.ui.legendComboBox.itemData(idx) + + if not alignment: + for chart_view in self.charts: + chart_view.chart().legend().hide() + else: + for chart_view in self.charts: + chart_view.chart().legend().setAlignment(alignment) + chart_view.chart().legend().show() + + +if __name__ == "__main__": + app = QApplication(sys.argv) + window = QMainWindow() + widget = ThemeWidget(None) + window.setCentralWidget(widget) + available_geometry = app.desktop().availableGeometry(window) + size = available_geometry.height() * 0.75 + window.setFixedSize(size, size * 0.8) + window.show() + sys.exit(app.exec_()) diff --git a/examples/charts/chartthemes/themewidget.ui b/examples/charts/chartthemes/themewidget.ui new file mode 100644 index 0000000..9ea2bb7 --- /dev/null +++ b/examples/charts/chartthemes/themewidget.ui @@ -0,0 +1,103 @@ + + + ThemeWidgetForm + + + + 0 + 0 + 900 + 600 + + + + + + + + + Theme: + + + + + + + + + + Animation: + + + + + + + + + + Legend: + + + + + + + + + + Anti-aliasing + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + themeComboBox + currentIndexChanged(int) + ThemeWidgetForm + updateUI() + + + antialiasCheckBox + toggled(bool) + ThemeWidgetForm + updateUI() + + + legendComboBox + currentIndexChanged(int) + ThemeWidgetForm + updateUI() + + + animatedComboBox + currentIndexChanged(int) + ThemeWidgetForm + updateUI() + + + + updateUI() + + diff --git a/examples/charts/donutbreakdown.py b/examples/charts/donutbreakdown.py new file mode 100644 index 0000000..28a48b8 --- /dev/null +++ b/examples/charts/donutbreakdown.py @@ -0,0 +1,181 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the Donut Chart Breakdown example from Qt v5.x""" + + +import sys +from PySide2.QtCore import Qt +from PySide2.QtGui import QColor, QFont, QPainter +from PySide2.QtWidgets import QApplication, QMainWindow +from PySide2.QtCharts import QtCharts + +class MainSlice(QtCharts.QPieSlice): + def __init__(self, breakdown_series, parent=None): + super(MainSlice, self).__init__(parent) + + self.breakdown_series = breakdown_series + self.name = None + + self.percentageChanged.connect(self.update_label) + + def get_breakdown_series(self): + return self.breakdown_series + + def setName(self, name): + self.name = name + + def name(self): + return self.name + + def update_label(self): + self.setLabel("{} {:.2f}%".format(self.name, + self.percentage() * 100)) + + +class DonutBreakdownChart(QtCharts.QChart): + def __init__(self, parent=None): + super(DonutBreakdownChart, self).__init__(QtCharts.QChart.ChartTypeCartesian, parent, Qt.WindowFlags()) + self.main_series = QtCharts.QPieSeries() + self.main_series.setPieSize(0.7) + self.addSeries(self.main_series) + + def add_breakdown_series(self, breakdown_series, color): + font = QFont("Arial", 8) + + # add breakdown series as a slice to center pie + main_slice = MainSlice(breakdown_series) + main_slice.setName(breakdown_series.name()) + main_slice.setValue(breakdown_series.sum()) + self.main_series.append(main_slice) + + # customize the slice + main_slice.setBrush(color) + main_slice.setLabelVisible() + main_slice.setLabelColor(Qt.white) + main_slice.setLabelPosition(QtCharts.QPieSlice.LabelInsideHorizontal) + main_slice.setLabelFont(font) + + # position and customize the breakdown series + breakdown_series.setPieSize(0.8) + breakdown_series.setHoleSize(0.7) + breakdown_series.setLabelsVisible() + + for pie_slice in breakdown_series.slices(): + color = QColor(color).lighter(115) + pie_slice.setBrush(color) + pie_slice.setLabelFont(font) + + # add the series to the chart + self.addSeries(breakdown_series) + + # recalculate breakdown donut segments + self.recalculate_angles() + + # update customize legend markers + self.update_legend_markers() + + def recalculate_angles(self): + angle = 0 + slices = self.main_series.slices(); + for pie_slice in slices: + breakdown_series = pie_slice.get_breakdown_series() + breakdown_series.setPieStartAngle(angle) + angle += pie_slice.percentage() * 360.0 # full pie is 360.0 + breakdown_series.setPieEndAngle(angle) + + def update_legend_markers(self): + # go through all markers + for series in self.series(): + markers = self.legend().markers(series) + for marker in markers: + if series == self.main_series: + # hide markers from main series + marker.setVisible(False) + else: + # modify markers from breakdown series + marker.setLabel("{} {:.2f}%".format( + marker.slice().label(), + marker.slice().percentage() * 100, 0)) + marker.setFont(QFont("Arial", 8)) + +if __name__ == "__main__": + app = QApplication(sys.argv) + # Graph is based on data of: + # 'Total consumption of energy increased by 10 per cent in 2010' + # Statistics Finland, 13 December 2011 + # http://www.stat.fi/til/ekul/2010/ekul_2010_2011-12-13_tie_001_en.html + series1 = QtCharts.QPieSeries() + series1.setName("Fossil fuels") + series1.append("Oil", 353295) + series1.append("Coal", 188500) + series1.append("Natural gas", 148680) + series1.append("Peat", 94545) + + series2 = QtCharts.QPieSeries() + series2.setName("Renewables") + series2.append("Wood fuels", 319663) + series2.append("Hydro power", 45875) + series2.append("Wind power", 1060) + + series3 = QtCharts.QPieSeries() + series3.setName("Others") + series3.append("Nuclear energy", 238789) + series3.append("Import energy", 37802) + series3.append("Other", 32441) + + donut_breakdown = DonutBreakdownChart() + donut_breakdown.setAnimationOptions(QtCharts.QChart.AllAnimations) + donut_breakdown.setTitle("Total consumption of energy in Finland 2010") + donut_breakdown.legend().setAlignment(Qt.AlignRight) + donut_breakdown.add_breakdown_series(series1, Qt.red) + donut_breakdown.add_breakdown_series(series2, Qt.darkGreen) + donut_breakdown.add_breakdown_series(series3, Qt.darkBlue) + + window = QMainWindow() + chart_view = QtCharts.QChartView(donut_breakdown) + chart_view.setRenderHint(QPainter.Antialiasing) + window.setCentralWidget(chart_view) + available_geometry = app.desktop().availableGeometry(window) + size = available_geometry.height() * 0.75 + window.resize(size, size * 0.8) + window.show() + + sys.exit(app.exec_()) diff --git a/examples/charts/legend.py b/examples/charts/legend.py new file mode 100644 index 0000000..47099e7 --- /dev/null +++ b/examples/charts/legend.py @@ -0,0 +1,252 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the Legend example from Qt v5.x""" + +import sys +from PySide2.QtCore import Qt, QRectF +from PySide2.QtGui import QBrush, QColor, QPainter, QPen +from PySide2.QtWidgets import (QApplication, QDoubleSpinBox, + QFormLayout, QGridLayout, QGroupBox, QPushButton, QWidget) +from PySide2.QtCharts import QtCharts + +class MainWidget(QWidget): + def __init__(self, parent=None): + super(MainWidget, self).__init__(parent) + self.chart = QtCharts.QChart() + self.series = QtCharts.QBarSeries() + + self.main_layout = QGridLayout() + self.button_layout = QGridLayout() + self.font_layout = QFormLayout() + + self.font_size = QDoubleSpinBox() + + self.legend_posx = QDoubleSpinBox() + self.legend_posy = QDoubleSpinBox() + self.legend_width = QDoubleSpinBox() + self.legend_height = QDoubleSpinBox() + + self.detach_legend_button = QPushButton("Toggle attached") + self.detach_legend_button.clicked.connect(self.toggle_attached) + self.button_layout.addWidget(self.detach_legend_button, 0, 0) + + self.add_set_button = QPushButton("add barset") + self.add_set_button.clicked.connect(self.add_barset) + self.button_layout.addWidget(self.add_set_button, 2, 0) + + self.remove_barset_button = QPushButton("remove barset") + self.remove_barset_button.clicked.connect(self.remove_barset) + self.button_layout.addWidget(self.remove_barset_button, 3, 0) + + self.align_button = QPushButton("Align (Bottom)") + self.align_button.clicked.connect(self.set_legend_alignment) + self.button_layout.addWidget(self.align_button, 4, 0) + + self.bold_button = QPushButton("Toggle bold") + self.bold_button.clicked.connect(self.toggle_bold) + self.button_layout.addWidget(self.bold_button, 8, 0) + + self.italic_button = QPushButton("Toggle italic") + self.italic_button.clicked.connect(self.toggle_italic) + self.button_layout.addWidget(self.italic_button, 9, 0) + + self.legend_posx.valueChanged.connect(self.update_legend_layout) + self.legend_posy.valueChanged.connect(self.update_legend_layout) + self.legend_width.valueChanged.connect(self.update_legend_layout) + self.legend_height.valueChanged.connect(self.update_legend_layout) + + legend_layout = QFormLayout() + legend_layout.addRow("HPos", self.legend_posx) + legend_layout.addRow("VPos", self.legend_posy) + legend_layout.addRow("Width", self.legend_width) + legend_layout.addRow("Height", self.legend_height) + + self.legend_settings = QGroupBox("Detached legend") + self.legend_settings.setLayout(legend_layout) + self.button_layout.addWidget(self.legend_settings) + self.legend_settings.setVisible(False) + + # Create chart view with the chart + self.chart_view = QtCharts.QChartView(self.chart, self) + + # Create spinbox to modify font size + self.font_size.setValue(self.chart.legend().font().pointSizeF()) + self.font_size.valueChanged.connect(self.font_size_changed) + + self.font_layout.addRow("Legend font size", self.font_size) + + # Create layout for grid and detached legend + self.main_layout.addLayout(self.button_layout, 0, 0) + self.main_layout.addLayout(self.font_layout, 1, 0) + self.main_layout.addWidget(self.chart_view, 0, 1, 3, 1) + self.setLayout(self.main_layout) + + self.create_series() + + def create_series(self): + self.add_barset() + self.add_barset() + self.add_barset() + self.add_barset() + + self.chart.addSeries(self.series) + self.chart.setTitle("Legend detach example") + self.chart.createDefaultAxes() + + self.chart.legend().setVisible(True) + self.chart.legend().setAlignment(Qt.AlignBottom) + + self.chart_view.setRenderHint(QPainter.Antialiasing) + + def show_legend_spinbox(self): + self.legend_settings.setVisible(True) + chart_viewrect = self.chart_view.rect() + + self.legend_posx.setMinimum(0) + self.legend_posx.setMaximum(chart_viewrect.width()) + self.legend_posx.setValue(150) + + self.legend_posy.setMinimum(0) + self.legend_posy.setMaximum(chart_viewrect.height()) + self.legend_posy.setValue(150) + + self.legend_width.setMinimum(0) + self.legend_width.setMaximum(chart_viewrect.width()) + self.legend_width.setValue(150) + + self.legend_height.setMinimum(0) + self.legend_height.setMaximum(chart_viewrect.height()) + self.legend_height.setValue(75) + + def hideLegendSpinbox(self): + self.legend_settings.setVisible(False) + + def toggle_attached(self): + legend = self.chart.legend() + if legend.isAttachedToChart(): + legend.detachFromChart() + legend.setBackgroundVisible(True) + legend.setBrush(QBrush(QColor(128, 128, 128, 128))) + legend.setPen(QPen(QColor(192, 192, 192, 192))) + + self.show_legend_spinbox() + self.update_legend_layout() + else: + legend.attachToChart() + legend.setBackgroundVisible(False) + self.hideLegendSpinbox() + self.update() + + def add_barset(self): + series_count = self.series.count() + bar_set = QtCharts.QBarSet("set {}".format(series_count)) + delta = series_count * 0.1 + bar_set.append([1 + delta, 2 + delta, 3 + delta, 4 + delta]) + self.series.append(bar_set) + + def remove_barset(self): + sets = self.series.barSets() + len_sets = len(sets) + if len_sets > 0: + self.series.remove(sets[len_sets - 1]) + + def set_legend_alignment(self): + button = self.sender() + legend = self.chart.legend() + alignment = legend.alignment() + + if alignment == Qt.AlignTop: + legend.setAlignment(Qt.AlignLeft) + if button: + button.setText("Align (Left)") + elif alignment == Qt.AlignLeft: + legend.setAlignment(Qt.AlignBottom) + if button: + button.setText("Align (Bottom)") + elif alignment == Qt.AlignBottom: + legend.setAlignment(Qt.AlignRight) + if button: + button.setText("Align (Right)") + else: + if button: + button.setText("Align (Top)") + legend.setAlignment(Qt.AlignTop) + + def toggle_bold(self): + legend = self.chart.legend() + font = legend.font() + font.setBold(not font.bold()) + legend.setFont(font) + + def toggle_italic(self): + legend = self.chart.legend() + font = legend.font() + font.setItalic(not font.italic()) + legend.setFont(font) + + def font_size_changed(self): + legend = self.chart.legend() + font = legend.font() + font_size = self.font_size.value() + if font_size < 1: + font_size = 1 + font.setPointSizeF(font_size) + legend.setFont(font) + + def update_legend_layout(self): + legend = self.chart.legend() + + rect = QRectF(self.legend_posx.value(), + self.legend_posy.value(), + self.legend_width.value(), + self.legend_height.value()) + legend.setGeometry(rect) + + legend.update() + +if __name__ == "__main__": + app = QApplication(sys.argv) + w = MainWidget() + available_geometry = app.desktop().availableGeometry(w) + size = available_geometry.height() * 0.75 + w.setFixedSize(size, size) + w.show() + sys.exit(app.exec_()) diff --git a/examples/charts/lineandbar.py b/examples/charts/lineandbar.py new file mode 100644 index 0000000..958736c --- /dev/null +++ b/examples/charts/lineandbar.py @@ -0,0 +1,117 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the line/bar example from Qt v5.x""" + +import sys +from PySide2.QtCore import QPoint, Qt +from PySide2.QtGui import QPainter +from PySide2.QtWidgets import QMainWindow, QApplication +from PySide2.QtCharts import QtCharts + + +class TestChart(QMainWindow): + def __init__(self): + QMainWindow.__init__(self) + + self.set0 = QtCharts.QBarSet("Jane") + self.set1 = QtCharts.QBarSet("John") + self.set2 = QtCharts.QBarSet("Axel") + self.set3 = QtCharts.QBarSet("Mary") + self.set4 = QtCharts.QBarSet("Sam") + + self.set0.append([1, 2, 3, 4, 5, 6]) + self.set1.append([5, 0, 0, 4, 0, 7]) + self.set2.append([3, 5, 8, 13, 8, 5]) + self.set3.append([5, 6, 7, 3, 4, 5]) + self.set4.append([9, 7, 5, 3, 1, 2]) + + self.barSeries = QtCharts.QBarSeries() + self.barSeries.append(self.set0) + self.barSeries.append(self.set1) + self.barSeries.append(self.set2) + self.barSeries.append(self.set3) + self.barSeries.append(self.set4) + + self.lineSeries = QtCharts.QLineSeries() + self.lineSeries.setName("trend") + self.lineSeries.append(QPoint(0, 4)) + self.lineSeries.append(QPoint(1, 15)) + self.lineSeries.append(QPoint(2, 20)) + self.lineSeries.append(QPoint(3, 4)) + self.lineSeries.append(QPoint(4, 12)) + self.lineSeries.append(QPoint(5, 17)) + + self.chart = QtCharts.QChart() + self.chart.addSeries(self.barSeries) + self.chart.addSeries(self.lineSeries) + self.chart.setTitle("Line and barchart example") + + self.categories = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"] + self.axisX = QtCharts.QBarCategoryAxis() + self.axisX.append(self.categories) + self.chart.setAxisX(self.axisX, self.lineSeries) + self.chart.setAxisX(self.axisX, self.barSeries) + self.axisX.setRange("Jan", "Jun") + + self.axisY = QtCharts.QValueAxis() + self.chart.setAxisY(self.axisY, self.lineSeries) + self.chart.setAxisY(self.axisY, self.barSeries) + self.axisY.setRange(0, 20) + + self.chart.legend().setVisible(True) + self.chart.legend().setAlignment(Qt.AlignBottom) + + self.chartView = QtCharts.QChartView(self.chart) + self.chartView.setRenderHint(QPainter.Antialiasing) + + self.setCentralWidget(self.chartView) + + +if __name__ == "__main__": + app = QApplication(sys.argv) + + window = TestChart() + window.show() + window.resize(440, 300) + + sys.exit(app.exec_()) diff --git a/examples/charts/memoryusage.py b/examples/charts/memoryusage.py new file mode 100644 index 0000000..b2c8ed1 --- /dev/null +++ b/examples/charts/memoryusage.py @@ -0,0 +1,126 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 Charts example: Simple memory usage viewer""" + +import os +import sys +from PySide2.QtCore import QRect, QSize, QProcess +from PySide2.QtWidgets import QApplication, QMainWindow +from PySide2.QtCharts import QtCharts + +def runProcess(command, arguments): + process = QProcess() + process.start(command, arguments) + process.waitForFinished() + std_output = process.readAllStandardOutput().data().decode('utf-8') + return std_output.split('\n') + +def getMemoryUsage(): + result = [] + if sys.platform == 'win32': + # Windows: Obtain memory usage in KB from 'tasklist' + for line in runProcess('tasklist', [])[3:]: + if len(line) >= 74: + command = line[0:23].strip() + if command.endswith('.exe'): + command = command[0:len(command) - 4] + memoryUsage = float(line[64:74].strip().replace(',', '').replace('.', '')) + legend = '' + if memoryUsage > 10240: + legend = '{} {}M'.format(command, round(memoryUsage / 1024)) + else: + legend = '{} {}K'.format(command, round(memoryUsage)) + result.append([legend, memoryUsage]) + else: + # Unix: Obtain memory usage percentage from 'ps' + psOptions = ['-e', 'v'] + memoryColumn = 8 + commandColumn = 9 + if sys.platform == 'darwin': + psOptions = ['-e', '-v'] + memoryColumn = 11 + commandColumn = 12 + for line in runProcess('ps', psOptions): + tokens = line.split(None) + if len(tokens) > commandColumn and "PID" not in tokens: # Percentage and command + command = tokens[commandColumn] + if not command.startswith('['): + command = os.path.basename(command) + memoryUsage = round(float(tokens[memoryColumn].replace(',', '.'))) + legend = '{} {}%'.format(command, memoryUsage) + result.append([legend, memoryUsage]) + + result.sort(key = lambda x: x[1], reverse=True) + return result + +class MainWindow(QMainWindow): + + def __init__(self): + super(MainWindow, self).__init__() + + self.setWindowTitle('Memory Usage') + + memoryUsage = getMemoryUsage() + if len(memoryUsage) > 5: + memoryUsage = memoryUsage[0:4] + + self.series = QtCharts.QPieSeries() + for item in memoryUsage: + self.series.append(item[0], item[1]); + + slice = self.series.slices()[0] + slice.setExploded(); + slice.setLabelVisible(); + self.chart = QtCharts.QChart() + self.chart.addSeries(self.series); + self.chartView = QtCharts.QChartView(self.chart) + self.setCentralWidget(self.chartView) + +if __name__ == '__main__': + app = QApplication(sys.argv) + mainWin = MainWindow() + availableGeometry = app.desktop().availableGeometry(mainWin) + size = availableGeometry.height() * 3 / 4 + mainWin.resize(size, size) + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/charts/modeldata.py b/examples/charts/modeldata.py new file mode 100644 index 0000000..018e053 --- /dev/null +++ b/examples/charts/modeldata.py @@ -0,0 +1,183 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the Model Data example from Qt v5.x""" + +import sys +from random import randrange + +from PySide2.QtCore import QAbstractTableModel, QModelIndex, QRect, Qt +from PySide2.QtGui import QColor, QPainter +from PySide2.QtWidgets import (QApplication, QGridLayout, QHeaderView, + QTableView, QWidget) +from PySide2.QtCharts import QtCharts + +class CustomTableModel(QAbstractTableModel): + def __init__(self): + QAbstractTableModel.__init__(self) + self.input_data = [] + self.mapping = {} + self.column_count = 4 + self.row_count = 15 + + for i in range(self.row_count): + data_vec = [0]*self.column_count + for k in range(len(data_vec)): + if k % 2 == 0: + data_vec[k] = i * 50 + randrange(30) + else: + data_vec[k] = randrange(100) + self.input_data.append(data_vec) + + def rowCount(self, parent=QModelIndex()): + return len(self.input_data) + + def columnCount(self, parent=QModelIndex()): + return self.column_count + + def headerData(self, section, orientation, role): + if role != Qt.DisplayRole: + return None + + if orientation == Qt.Horizontal: + if section % 2 == 0: + return "x" + else: + return "y" + else: + return "{}".format(section + 1) + + def data(self, index, role=Qt.DisplayRole): + if role == Qt.DisplayRole: + return self.input_data[index.row()][index.column()] + elif role == Qt.EditRole: + return self.input_data[index.row()][index.column()] + elif role == Qt.BackgroundRole: + for color, rect in self.mapping.items(): + if rect.contains(index.column(), index.row()): + return QColor(color) + # cell not mapped return white color + return QColor(Qt.white); + return None + + def setData(self, index, value, role=Qt.EditRole): + if index.isValid() and role == Qt.EditRole: + self.input_data[index.row()][index.column()] = float(value) + self.dataChanged.emit(index, index) + return True + return False + + def flags(self, index): + return Qt.ItemIsEnabled | Qt.ItemIsEditable | Qt.ItemIsSelectable + + def add_mapping(self, color, area): + self.mapping[color] = area + + def clear_mapping(self): + self.mapping = {} + + + +class TableWidget(QWidget): + def __init__(self): + QWidget.__init__(self) + + self.model = CustomTableModel() + + self.table_view = QTableView() + self.table_view.setModel(self.model) + self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.table_view.verticalHeader().setSectionResizeMode(QHeaderView.Stretch) + + self.chart = QtCharts.QChart() + self.chart.setAnimationOptions(QtCharts.QChart.AllAnimations) + + self.series = QtCharts.QLineSeries() + self.series.setName("Line 1") + self.mapper = QtCharts.QVXYModelMapper(self) + self.mapper.setXColumn(0) + self.mapper.setYColumn(1) + self.mapper.setSeries(self.series) + self.mapper.setModel(self.model) + self.chart.addSeries(self.series) + + # for storing color hex from the series + seriesColorHex = "#000000" + + # get the color of the series and use it for showing the mapped area + seriesColorHex = "{}".format(self.series.pen().color().name()) + self.model.add_mapping(seriesColorHex, QRect(0, 0, 2, self.model.rowCount())) + + # series 2 + self.series = QtCharts.QLineSeries() + self.series.setName("Line 2") + + self.mapper = QtCharts.QVXYModelMapper(self) + self.mapper.setXColumn(2) + self.mapper.setYColumn(3) + self.mapper.setSeries(self.series) + self.mapper.setModel(self.model) + self.chart.addSeries(self.series) + + # get the color of the series and use it for showing the mapped area + seriesColorHex = "{}".format(self.series.pen().color().name()) + self.model.add_mapping(seriesColorHex, QRect(2, 0, 2, self.model.rowCount())); + + self.chart.createDefaultAxes() + self.chart_view = QtCharts.QChartView(self.chart) + self.chart_view.setRenderHint(QPainter.Antialiasing) + self.chart_view.setMinimumSize(640, 480) + + # create main layout + self.main_layout = QGridLayout() + self.main_layout.addWidget(self.table_view, 1, 0) + self.main_layout.addWidget(self.chart_view, 1, 1) + self.main_layout.setColumnStretch(1, 1) + self.main_layout.setColumnStretch(0, 0) + self.setLayout(self.main_layout) + + +if __name__ == "__main__": + app = QApplication(sys.argv) + w = TableWidget() + w.show() + sys.exit(app.exec_()) diff --git a/examples/charts/nesteddonuts.py b/examples/charts/nesteddonuts.py new file mode 100644 index 0000000..bee3c1c --- /dev/null +++ b/examples/charts/nesteddonuts.py @@ -0,0 +1,137 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the Nested Donuts example from Qt v5.x""" + +import sys + +from PySide2.QtCore import Qt, QTimer +from PySide2.QtGui import QPainter +from PySide2.QtWidgets import QApplication, QGridLayout, QWidget +from PySide2.QtCharts import QtCharts + +from random import randrange +from functools import partial + +class Widget(QWidget): + def __init__(self): + QWidget.__init__(self) + self.setMinimumSize(800, 600) + self.donuts = [] + self.chart_view = QtCharts.QChartView() + self.chart_view.setRenderHint(QPainter.Antialiasing) + self.chart = self.chart_view.chart() + self.chart.legend().setVisible(False) + self.chart.setTitle("Nested donuts demo") + self.chart.setAnimationOptions(QtCharts.QChart.AllAnimations) + + self.min_size = 0.1 + self.max_size = 0.9 + self.donut_count = 5 + + self.setup_donuts() + + # create main layout + self.main_layout = QGridLayout(self) + self.main_layout.addWidget(self.chart_view, 1, 1) + self.setLayout(self.main_layout) + + self.update_timer = QTimer(self) + self.update_timer.timeout.connect(self.update_rotation) + self.update_timer.start(1250) + + def setup_donuts(self): + for i in range(self.donut_count): + donut = QtCharts.QPieSeries() + slccount = randrange(3, 6) + for j in range(slccount): + value = randrange(100, 200) + + slc = QtCharts.QPieSlice(str(value), value) + slc.setLabelVisible(True) + slc.setLabelColor(Qt.white) + slc.setLabelPosition(QtCharts.QPieSlice.LabelInsideTangential) + + # Connection using an extra parameter for the slot + slc.hovered[bool].connect(partial(self.explode_slice, slc=slc)) + + donut.append(slc) + size = (self.max_size - self.min_size)/self.donut_count + donut.setHoleSize(self.min_size + i * size) + donut.setPieSize(self.min_size + (i + 1) * size) + + self.donuts.append(donut) + self.chart_view.chart().addSeries(donut) + + + + def update_rotation(self): + for donut in self.donuts: + phase_shift = randrange(-50, 100) + donut.setPieStartAngle(donut.pieStartAngle() + phase_shift) + donut.setPieEndAngle(donut.pieEndAngle() + phase_shift) + + def explode_slice(self, exploded, slc): + if exploded: + self.update_timer.stop() + slice_startangle = slc.startAngle() + slice_endangle = slc.startAngle() + slc.angleSpan() + + donut = slc.series() + idx = self.donuts.index(donut) + for i in range(idx + 1, len(self.donuts)): + self.donuts[i].setPieStartAngle(slice_endangle) + self.donuts[i].setPieEndAngle(360 + slice_startangle) + else: + for donut in self.donuts: + donut.setPieStartAngle(0) + donut.setPieEndAngle(360) + + self.update_timer.start() + + slc.setExploded(exploded) + +if __name__ == "__main__": + app = QApplication(sys.argv) + w = Widget() + w.show() + sys.exit(app.exec_()) diff --git a/examples/charts/percentbarchart.py b/examples/charts/percentbarchart.py new file mode 100644 index 0000000..f929206 --- /dev/null +++ b/examples/charts/percentbarchart.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the Percent Bar Chart example from Qt v5.x""" + +import sys +from PySide2.QtCore import Qt +from PySide2.QtGui import QPainter +from PySide2.QtWidgets import (QMainWindow, QApplication) +from PySide2.QtCharts import QtCharts + +class MainWindow(QMainWindow): + def __init__(self): + QMainWindow.__init__(self) + + set0 = QtCharts.QBarSet("Jane") + set1 = QtCharts.QBarSet("John") + set2 = QtCharts.QBarSet("Axel") + set3 = QtCharts.QBarSet("Mary") + set4 = QtCharts.QBarSet("Samantha") + + set0.append([1, 2, 3, 4, 5, 6]) + set1.append([5, 0, 0, 4, 0, 7]) + set2.append([3, 5, 8, 13, 8, 5]) + set3.append([5, 6, 7, 3, 4, 5]) + set4.append([9, 7, 5, 3, 1, 2]) + + series = QtCharts.QPercentBarSeries() + series.append(set0) + series.append(set1) + series.append(set2) + series.append(set3) + series.append(set4) + + chart = QtCharts.QChart() + chart.addSeries(series) + chart.setTitle("Simple percentbarchart example") + chart.setAnimationOptions(QtCharts.QChart.SeriesAnimations) + + categories = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"] + axis = QtCharts.QBarCategoryAxis() + axis.append(categories) + chart.createDefaultAxes() + chart.setAxisX(axis, series) + + chart.legend().setVisible(True) + chart.legend().setAlignment(Qt.AlignBottom) + + chart_view = QtCharts.QChartView(chart) + chart_view.setRenderHint(QPainter.Antialiasing) + + self.setCentralWidget(chart_view) + + +if __name__ == "__main__": + app = QApplication(sys.argv) + w = MainWindow() + w.resize(420, 300) + w.show() + sys.exit(app.exec_()) diff --git a/examples/corelib/threads/mandelbrot.py b/examples/corelib/threads/mandelbrot.py new file mode 100755 index 0000000..1ba4534 --- /dev/null +++ b/examples/corelib/threads/mandelbrot.py @@ -0,0 +1,349 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the corelib/threads/mandelbrot example from Qt v5.x, originating from PyQt""" + +from PySide2.QtCore import (Signal, QMutex, QMutexLocker, QPoint, QSize, Qt, + QThread, QWaitCondition) +from PySide2.QtGui import QColor, QImage, QPainter, QPixmap, qRgb +from PySide2.QtWidgets import QApplication, QWidget + + +DefaultCenterX = -0.647011 +DefaultCenterY = -0.0395159 +DefaultScale = 0.00403897 + +ZoomInFactor = 0.8 +ZoomOutFactor = 1 / ZoomInFactor +ScrollStep = 20 + + +class RenderThread(QThread): + ColormapSize = 512 + + renderedImage = Signal(QImage, float) + + def __init__(self, parent=None): + super(RenderThread, self).__init__(parent) + + self.mutex = QMutex() + self.condition = QWaitCondition() + self.centerX = 0.0 + self.centerY = 0.0 + self.scaleFactor = 0.0 + self.resultSize = QSize() + self.colormap = [] + + self.restart = False + self.abort = False + + for i in range(RenderThread.ColormapSize): + self.colormap.append(self.rgbFromWaveLength(380.0 + (i * 400.0 / RenderThread.ColormapSize))) + + def stop(self): + self.mutex.lock() + self.abort = True + self.condition.wakeOne() + self.mutex.unlock() + + self.wait(2000) + + def render(self, centerX, centerY, scaleFactor, resultSize): + locker = QMutexLocker(self.mutex) + + self.centerX = centerX + self.centerY = centerY + self.scaleFactor = scaleFactor + self.resultSize = resultSize + + if not self.isRunning(): + self.start(QThread.LowPriority) + else: + self.restart = True + self.condition.wakeOne() + + def run(self): + while True: + self.mutex.lock() + resultSize = self.resultSize + scaleFactor = self.scaleFactor + centerX = self.centerX + centerY = self.centerY + self.mutex.unlock() + + halfWidth = resultSize.width() // 2 + halfHeight = resultSize.height() // 2 + image = QImage(resultSize, QImage.Format_RGB32) + + NumPasses = 8 + curpass = 0 + + while curpass < NumPasses: + MaxIterations = (1 << (2 * curpass + 6)) + 32 + Limit = 4 + allBlack = True + + for y in range(-halfHeight, halfHeight): + if self.restart: + break + if self.abort: + return + + ay = 1j * (centerY + (y * scaleFactor)) + + for x in range(-halfWidth, halfWidth): + c0 = centerX + (x * scaleFactor) + ay + c = c0 + numIterations = 0 + + while numIterations < MaxIterations: + numIterations += 1 + c = c*c + c0 + if abs(c) >= Limit: + break + numIterations += 1 + c = c*c + c0 + if abs(c) >= Limit: + break + numIterations += 1 + c = c*c + c0 + if abs(c) >= Limit: + break + numIterations += 1 + c = c*c + c0 + if abs(c) >= Limit: + break + + if numIterations < MaxIterations: + image.setPixel(x + halfWidth, y + halfHeight, + self.colormap[numIterations % RenderThread.ColormapSize]) + allBlack = False + else: + image.setPixel(x + halfWidth, y + halfHeight, qRgb(0, 0, 0)) + + if allBlack and curpass == 0: + curpass = 4 + else: + if not self.restart: + self.renderedImage.emit(image, scaleFactor) + curpass += 1 + + self.mutex.lock() + if not self.restart: + self.condition.wait(self.mutex) + self.restart = False + self.mutex.unlock() + + def rgbFromWaveLength(self, wave): + r = 0.0 + g = 0.0 + b = 0.0 + + if wave >= 380.0 and wave <= 440.0: + r = -1.0 * (wave - 440.0) / (440.0 - 380.0) + b = 1.0 + elif wave >= 440.0 and wave <= 490.0: + g = (wave - 440.0) / (490.0 - 440.0) + b = 1.0 + elif wave >= 490.0 and wave <= 510.0: + g = 1.0 + b = -1.0 * (wave - 510.0) / (510.0 - 490.0) + elif wave >= 510.0 and wave <= 580.0: + r = (wave - 510.0) / (580.0 - 510.0) + g = 1.0 + elif wave >= 580.0 and wave <= 645.0: + r = 1.0 + g = -1.0 * (wave - 645.0) / (645.0 - 580.0) + elif wave >= 645.0 and wave <= 780.0: + r = 1.0 + + s = 1.0 + if wave > 700.0: + s = 0.3 + 0.7 * (780.0 - wave) / (780.0 - 700.0) + elif wave < 420.0: + s = 0.3 + 0.7 * (wave - 380.0) / (420.0 - 380.0) + + r = pow(r * s, 0.8) + g = pow(g * s, 0.8) + b = pow(b * s, 0.8) + + return qRgb(r*255, g*255, b*255) + + +class MandelbrotWidget(QWidget): + def __init__(self, parent=None): + super(MandelbrotWidget, self).__init__(parent) + + self.thread = RenderThread() + self.pixmap = QPixmap() + self.pixmapOffset = QPoint() + self.lastDragPos = QPoint() + + self.centerX = DefaultCenterX + self.centerY = DefaultCenterY + self.pixmapScale = DefaultScale + self.curScale = DefaultScale + + self.thread.renderedImage.connect(self.updatePixmap) + + self.setWindowTitle("Mandelbrot") + self.setCursor(Qt.CrossCursor) + self.resize(550, 400) + + def paintEvent(self, event): + painter = QPainter(self) + painter.fillRect(self.rect(), Qt.black) + + if self.pixmap.isNull(): + painter.setPen(Qt.white) + painter.drawText(self.rect(), Qt.AlignCenter, + "Rendering initial image, please wait...") + return + + if self.curScale == self.pixmapScale: + painter.drawPixmap(self.pixmapOffset, self.pixmap) + else: + scaleFactor = self.pixmapScale / self.curScale + newWidth = int(self.pixmap.width() * scaleFactor) + newHeight = int(self.pixmap.height() * scaleFactor) + newX = self.pixmapOffset.x() + (self.pixmap.width() - newWidth) / 2 + newY = self.pixmapOffset.y() + (self.pixmap.height() - newHeight) / 2 + + painter.save() + painter.translate(newX, newY) + painter.scale(scaleFactor, scaleFactor) + exposed, _ = painter.matrix().inverted() + exposed = exposed.mapRect(self.rect()).adjusted(-1, -1, 1, 1) + painter.drawPixmap(exposed, self.pixmap, exposed) + painter.restore() + + text = "Use mouse wheel or the '+' and '-' keys to zoom. Press and " \ + "hold left mouse button to scroll." + metrics = painter.fontMetrics() + textWidth = metrics.width(text) + + painter.setPen(Qt.NoPen) + painter.setBrush(QColor(0, 0, 0, 127)) + painter.drawRect((self.width() - textWidth) / 2 - 5, 0, textWidth + 10, + metrics.lineSpacing() + 5) + painter.setPen(Qt.white) + painter.drawText((self.width() - textWidth) / 2, + metrics.leading() + metrics.ascent(), text) + + def resizeEvent(self, event): + self.thread.render(self.centerX, self.centerY, self.curScale, self.size()) + + def keyPressEvent(self, event): + if event.key() == Qt.Key_Plus: + self.zoom(ZoomInFactor) + elif event.key() == Qt.Key_Minus: + self.zoom(ZoomOutFactor) + elif event.key() == Qt.Key_Left: + self.scroll(-ScrollStep, 0) + elif event.key() == Qt.Key_Right: + self.scroll(+ScrollStep, 0) + elif event.key() == Qt.Key_Down: + self.scroll(0, -ScrollStep) + elif event.key() == Qt.Key_Up: + self.scroll(0, +ScrollStep) + else: + super(MandelbrotWidget, self).keyPressEvent(event) + + def wheelEvent(self, event): + numDegrees = event.angleDelta().y() / 8 + numSteps = numDegrees / 15.0 + self.zoom(pow(ZoomInFactor, numSteps)) + + def mousePressEvent(self, event): + if event.buttons() == Qt.LeftButton: + self.lastDragPos = QPoint(event.pos()) + + def mouseMoveEvent(self, event): + if event.buttons() & Qt.LeftButton: + self.pixmapOffset += event.pos() - self.lastDragPos + self.lastDragPos = QPoint(event.pos()) + self.update() + + def mouseReleaseEvent(self, event): + if event.button() == Qt.LeftButton: + self.pixmapOffset += event.pos() - self.lastDragPos + self.lastDragPos = QPoint() + + deltaX = (self.width() - self.pixmap.width()) / 2 - self.pixmapOffset.x() + deltaY = (self.height() - self.pixmap.height()) / 2 - self.pixmapOffset.y() + self.scroll(deltaX, deltaY) + + def updatePixmap(self, image, scaleFactor): + if not self.lastDragPos.isNull(): + return + + self.pixmap = QPixmap.fromImage(image) + self.pixmapOffset = QPoint() + self.lastDragPosition = QPoint() + self.pixmapScale = scaleFactor + self.update() + + def zoom(self, zoomFactor): + self.curScale *= zoomFactor + self.update() + self.thread.render(self.centerX, self.centerY, self.curScale, + self.size()) + + def scroll(self, deltaX, deltaY): + self.centerX += deltaX * self.curScale + self.centerY += deltaY * self.curScale + self.update() + self.thread.render(self.centerX, self.centerY, self.curScale, + self.size()) + + +if __name__ == '__main__': + + import sys + + app = QApplication(sys.argv) + widget = MandelbrotWidget() + widget.show() + r = app.exec_() + widget.thread.stop() + sys.exit(r) diff --git a/examples/corelib/tools/codecs/codecs.py b/examples/corelib/tools/codecs/codecs.py new file mode 100755 index 0000000..abe70ba --- /dev/null +++ b/examples/corelib/tools/codecs/codecs.py @@ -0,0 +1,251 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/tools/codecs example from Qt v5.x""" + +from PySide2 import QtCore, QtGui, QtWidgets + + +def codec_name(codec): + try: + # Python v3. + name = str(codec.name(), encoding='ascii') + except TypeError: + # Python v2. + name = str(codec.name()) + + return name + + +class MainWindow(QtWidgets.QMainWindow): + def __init__(self): + super(MainWindow, self).__init__() + + self.textEdit = QtWidgets.QTextEdit() + self.textEdit.setLineWrapMode(QtWidgets.QTextEdit.NoWrap) + self.setCentralWidget(self.textEdit) + + self.codecs = [] + self.findCodecs() + + self.previewForm = PreviewForm(self) + self.previewForm.setCodecList(self.codecs) + + self.saveAsActs = [] + self.createActions() + self.createMenus() + + self.setWindowTitle("Codecs") + self.resize(500, 400) + + def open(self): + fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self) + if fileName: + inFile = QtCore.QFile(fileName) + if not inFile.open(QtCore.QFile.ReadOnly): + QtWidgets.QMessageBox.warning(self, "Codecs", + "Cannot read file %s:\n%s" % (fileName, inFile.errorString())) + return + + data = inFile.readAll() + + self.previewForm.setEncodedData(data) + if self.previewForm.exec_(): + self.textEdit.setPlainText(self.previewForm.decodedString()) + + def save(self): + fileName = QtWidgets.QFileDialog.getSaveFileName(self) + if fileName: + outFile = QtCore.QFile(fileName) + if not outFile.open(QtCore.QFile.WriteOnly|QtCore.QFile.Text): + QtWidgets.QMessageBox.warning(self, "Codecs", + "Cannot write file %s:\n%s" % (fileName, outFile.errorString())) + return + + action = self.sender() + codecName = action.data() + + out = QtCore.QTextStream(outFile) + out.setCodec(codecName) + out << self.textEdit.toPlainText() + + def about(self): + QtWidgets.QMessageBox.about(self, "About Codecs", + "The Codecs example demonstrates how to read and " + "write files using various encodings.") + + def aboutToShowSaveAsMenu(self): + currentText = self.textEdit.toPlainText() + + for action in self.saveAsActs: + codecName = str(action.data()) + codec = QtCore.QTextCodec.codecForName(codecName) + action.setVisible(codec and codec.canEncode(currentText)) + + def findCodecs(self): + codecMap = [] + iso8859RegExp = QtCore.QRegExp('ISO[- ]8859-([0-9]+).*') + + for mib in QtCore.QTextCodec.availableMibs(): + codec = QtCore.QTextCodec.codecForMib(mib) + sortKey = codec_name(codec).upper() + rank = 0 + + if sortKey.startswith('UTF-8'): + rank = 1 + elif sortKey.startswith('UTF-16'): + rank = 2 + elif iso8859RegExp.exactMatch(sortKey): + if len(iso8859RegExp.cap(1)) == 1: + rank = 3 + else: + rank = 4 + else: + rank = 5 + + codecMap.append((str(rank) + sortKey, codec)) + + codecMap.sort() + self.codecs = [item[-1] for item in codecMap] + + def createActions(self): + self.openAct = QtWidgets.QAction("&Open...", self, shortcut="Ctrl+O", + triggered=self.open) + + for codec in self.codecs: + name = codec_name(codec) + + action = QtWidgets.QAction(name + '...', self, triggered=self.save) + action.setData(name) + self.saveAsActs.append(action) + + self.exitAct = QtWidgets.QAction("E&xit", self, shortcut="Ctrl+Q", + triggered=self.close) + + self.aboutAct = QtWidgets.QAction("&About", self, triggered=self.about) + + self.aboutQtAct = QtWidgets.QAction("About &Qt", self, + triggered=QtWidgets.qApp.aboutQt) + + def createMenus(self): + self.saveAsMenu = QtWidgets.QMenu("&Save As", self) + for action in self.saveAsActs: + self.saveAsMenu.addAction(action) + + self.saveAsMenu.aboutToShow.connect(self.aboutToShowSaveAsMenu) + + self.fileMenu = QtWidgets.QMenu("&File", self) + self.fileMenu.addAction(self.openAct) + self.fileMenu.addMenu(self.saveAsMenu) + self.fileMenu.addSeparator() + self.fileMenu.addAction(self.exitAct) + + self.helpMenu = QtWidgets.QMenu("&Help", self) + self.helpMenu.addAction(self.aboutAct) + self.helpMenu.addAction(self.aboutQtAct) + + self.menuBar().addMenu(self.fileMenu) + self.menuBar().addSeparator() + self.menuBar().addMenu(self.helpMenu) + + +class PreviewForm(QtWidgets.QDialog): + def __init__(self, parent): + super(PreviewForm, self).__init__(parent) + + self.encodingComboBox = QtWidgets.QComboBox() + encodingLabel = QtWidgets.QLabel("&Encoding:") + encodingLabel.setBuddy(self.encodingComboBox) + + self.textEdit = QtWidgets.QTextEdit() + self.textEdit.setLineWrapMode(QtWidgets.QTextEdit.NoWrap) + self.textEdit.setReadOnly(True) + + buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel) + + self.encodingComboBox.activated.connect(self.updateTextEdit) + buttonBox.accepted.connect(self.accept) + buttonBox.rejected.connect(self.reject) + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(encodingLabel, 0, 0) + mainLayout.addWidget(self.encodingComboBox, 0, 1) + mainLayout.addWidget(self.textEdit, 1, 0, 1, 2) + mainLayout.addWidget(buttonBox, 2, 0, 1, 2) + self.setLayout(mainLayout) + + self.setWindowTitle("Choose Encoding") + self.resize(400, 300) + + def setCodecList(self, codecs): + self.encodingComboBox.clear() + for codec in codecs: + self.encodingComboBox.addItem(codec_name(codec), codec.mibEnum()) + + def setEncodedData(self, data): + self.encodedData = data + self.updateTextEdit() + + def decodedString(self): + return self.decodedStr + + def updateTextEdit(self): + mib = self.encodingComboBox.itemData(self.encodingComboBox.currentIndex()) + codec = QtCore.QTextCodec.codecForMib(mib) + + data = QtCore.QTextStream(self.encodedData) + data.setAutoDetectUnicode(False) + data.setCodec(codec) + + self.decodedStr = data.readAll() + self.textEdit.setPlainText(self.decodedStr) + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + mainWin = MainWindow() + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/corelib/tools/regexp.py b/examples/corelib/tools/regexp.py new file mode 100755 index 0000000..b641039 --- /dev/null +++ b/examples/corelib/tools/regexp.py @@ -0,0 +1,195 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/tools/regexp example from Qt v5.x""" + +from PySide2 import QtCore, QtGui, QtWidgets + + +class RegExpDialog(QtWidgets.QDialog): + MaxCaptures = 6 + + def __init__(self, parent=None): + super(RegExpDialog, self).__init__(parent) + + self.patternComboBox = QtWidgets.QComboBox() + self.patternComboBox.setEditable(True) + self.patternComboBox.setSizePolicy(QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred) + + patternLabel = QtWidgets.QLabel("&Pattern:") + patternLabel.setBuddy(self.patternComboBox) + + self.escapedPatternLineEdit = QtWidgets.QLineEdit() + self.escapedPatternLineEdit.setReadOnly(True) + palette = self.escapedPatternLineEdit.palette() + palette.setBrush(QtGui.QPalette.Base, + palette.brush(QtGui.QPalette.Disabled, QtGui.QPalette.Base)) + self.escapedPatternLineEdit.setPalette(palette) + + escapedPatternLabel = QtWidgets.QLabel("&Escaped Pattern:") + escapedPatternLabel.setBuddy(self.escapedPatternLineEdit) + + self.syntaxComboBox = QtWidgets.QComboBox() + self.syntaxComboBox.addItem("Regular expression v1", + QtCore.QRegExp.RegExp) + self.syntaxComboBox.addItem("Regular expression v2", + QtCore.QRegExp.RegExp2) + self.syntaxComboBox.addItem("Wildcard", QtCore.QRegExp.Wildcard) + self.syntaxComboBox.addItem("Fixed string", + QtCore.QRegExp.FixedString) + + syntaxLabel = QtWidgets.QLabel("&Pattern Syntax:") + syntaxLabel.setBuddy(self.syntaxComboBox) + + self.textComboBox = QtWidgets.QComboBox() + self.textComboBox.setEditable(True) + self.textComboBox.setSizePolicy(QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred) + + textLabel = QtWidgets.QLabel("&Text:") + textLabel.setBuddy(self.textComboBox) + + self.caseSensitiveCheckBox = QtWidgets.QCheckBox("Case &Sensitive") + self.caseSensitiveCheckBox.setChecked(True) + self.minimalCheckBox = QtWidgets.QCheckBox("&Minimal") + + indexLabel = QtWidgets.QLabel("Index of Match:") + self.indexEdit = QtWidgets.QLineEdit() + self.indexEdit.setReadOnly(True) + + matchedLengthLabel = QtWidgets.QLabel("Matched Length:") + self.matchedLengthEdit = QtWidgets.QLineEdit() + self.matchedLengthEdit.setReadOnly(True) + + self.captureLabels = [] + self.captureEdits = [] + for i in range(self.MaxCaptures): + self.captureLabels.append(QtWidgets.QLabel("Capture %d:" % i)) + self.captureEdits.append(QtWidgets.QLineEdit()) + self.captureEdits[i].setReadOnly(True) + self.captureLabels[0].setText("Match:") + + checkBoxLayout = QtWidgets.QHBoxLayout() + checkBoxLayout.addWidget(self.caseSensitiveCheckBox) + checkBoxLayout.addWidget(self.minimalCheckBox) + checkBoxLayout.addStretch(1) + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(patternLabel, 0, 0) + mainLayout.addWidget(self.patternComboBox, 0, 1) + mainLayout.addWidget(escapedPatternLabel, 1, 0) + mainLayout.addWidget(self.escapedPatternLineEdit, 1, 1) + mainLayout.addWidget(syntaxLabel, 2, 0) + mainLayout.addWidget(self.syntaxComboBox, 2, 1) + mainLayout.addLayout(checkBoxLayout, 3, 0, 1, 2) + mainLayout.addWidget(textLabel, 4, 0) + mainLayout.addWidget(self.textComboBox, 4, 1) + mainLayout.addWidget(indexLabel, 5, 0) + mainLayout.addWidget(self.indexEdit, 5, 1) + mainLayout.addWidget(matchedLengthLabel, 6, 0) + mainLayout.addWidget(self.matchedLengthEdit, 6, 1) + + for i in range(self.MaxCaptures): + mainLayout.addWidget(self.captureLabels[i], 7 + i, 0) + mainLayout.addWidget(self.captureEdits[i], 7 + i, 1) + self.setLayout(mainLayout) + + self.patternComboBox.editTextChanged.connect(self.refresh) + self.textComboBox.editTextChanged.connect(self.refresh) + self.caseSensitiveCheckBox.toggled.connect(self.refresh) + self.minimalCheckBox.toggled.connect(self.refresh) + self.syntaxComboBox.currentIndexChanged.connect(self.refresh) + + self.patternComboBox.addItem("[A-Za-z_]+([A-Za-z_0-9]*)") + self.textComboBox.addItem("(10 + delta4)* 32") + + self.setWindowTitle("RegExp") + self.setFixedHeight(self.sizeHint().height()) + self.refresh() + + def refresh(self): + self.setUpdatesEnabled(False) + + pattern = self.patternComboBox.currentText() + text = self.textComboBox.currentText() + + escaped = str(pattern) + escaped.replace('\\', '\\\\') + escaped.replace('"', '\\"') + self.escapedPatternLineEdit.setText('"' + escaped + '"') + + rx = QtCore.QRegExp(pattern) + cs = QtCore.Qt.CaseInsensitive + if self.caseSensitiveCheckBox.isChecked(): + cs = QtCore.Qt.CaseSensitive + rx.setCaseSensitivity(cs) + rx.setMinimal(self.minimalCheckBox.isChecked()) + syntax = self.syntaxComboBox.itemData(self.syntaxComboBox.currentIndex()) + rx.setPatternSyntax(QtCore.QRegExp.PatternSyntax(syntax)) + + palette = self.patternComboBox.palette() + if rx.isValid(): + palette.setColor(QtGui.QPalette.Text, + self.textComboBox.palette().color(QtGui.QPalette.Text)) + else: + palette.setColor(QtGui.QPalette.Text, QtCore.Qt.red) + self.patternComboBox.setPalette(palette) + + self.indexEdit.setText(str(rx.indexIn(text))) + self.matchedLengthEdit.setText(str(rx.matchedLength())) + + for i in range(self.MaxCaptures): + self.captureLabels[i].setEnabled(i <= rx.captureCount()) + self.captureEdits[i].setEnabled(i <= rx.captureCount()) + self.captureEdits[i].setText(rx.cap(i)) + + self.setUpdatesEnabled(True) + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + dialog = RegExpDialog() + sys.exit(dialog.exec_()) diff --git a/examples/corelib/tools/settingseditor/settingseditor.py b/examples/corelib/tools/settingseditor/settingseditor.py new file mode 100755 index 0000000..1587fe9 --- /dev/null +++ b/examples/corelib/tools/settingseditor/settingseditor.py @@ -0,0 +1,722 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/tools/settingseditor example from Qt v5.x""" + +import sys + +from PySide2 import QtCore, QtGui, QtWidgets + + +class MainWindow(QtWidgets.QMainWindow): + def __init__(self, parent=None): + super(MainWindow, self).__init__(parent) + + self.settingsTree = SettingsTree() + self.setCentralWidget(self.settingsTree) + + self.locationDialog = None + + self.createActions() + self.createMenus() + + self.autoRefreshAct.setChecked(True) + self.fallbacksAct.setChecked(True) + + self.setWindowTitle("Settings Editor") + self.resize(500, 600) + + def openSettings(self): + if self.locationDialog is None: + self.locationDialog = LocationDialog(self) + + if self.locationDialog.exec_(): + settings = QtCore.QSettings(self.locationDialog.format(), + self.locationDialog.scope(), + self.locationDialog.organization(), + self.locationDialog.application()) + self.setSettingsObject(settings) + self.fallbacksAct.setEnabled(True) + + def openIniFile(self): + fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open INI File", + '', "INI Files (*.ini *.conf)") + + if fileName: + settings = QtCore.QSettings(fileName, QtCore.QSettings.IniFormat) + self.setSettingsObject(settings) + self.fallbacksAct.setEnabled(False) + + def openPropertyList(self): + fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, + "Open Property List", '', "Property List Files (*.plist)") + + if fileName: + settings = QtCore.QSettings(fileName, QtCore.QSettings.NativeFormat) + self.setSettingsObject(settings) + self.fallbacksAct.setEnabled(False) + + def openRegistryPath(self): + path, ok = QtWidgets.QInputDialog.getText(self, "Open Registry Path", + "Enter the path in the Windows registry:", + QtWidgets.QLineEdit.Normal, 'HKEY_CURRENT_USER\\') + + if ok and path != '': + settings = QtCore.QSettings(path, QtCore.QSettings.NativeFormat) + self.setSettingsObject(settings) + self.fallbacksAct.setEnabled(False) + + def about(self): + QtWidgets.QMessageBox.about(self, "About Settings Editor", + "The Settings Editor example shows how to access " + "application settings using Qt.") + + def createActions(self): + self.openSettingsAct = QtWidgets.QAction("&Open Application Settings...", + self, shortcut="Ctrl+O", triggered=self.openSettings) + + self.openIniFileAct = QtWidgets.QAction("Open I&NI File...", self, + shortcut="Ctrl+N", triggered=self.openIniFile) + + self.openPropertyListAct = QtWidgets.QAction("Open macOS &Property List...", + self, shortcut="Ctrl+P", triggered=self.openPropertyList) + if sys.platform != 'darwin': + self.openPropertyListAct.setEnabled(False) + + self.openRegistryPathAct = QtWidgets.QAction( + "Open Windows &Registry Path...", self, shortcut="Ctrl+G", + triggered=self.openRegistryPath) + if sys.platform != 'win32': + self.openRegistryPathAct.setEnabled(False) + + self.refreshAct = QtWidgets.QAction("&Refresh", self, shortcut="Ctrl+R", + enabled=False, triggered=self.settingsTree.refresh) + + self.exitAct = QtWidgets.QAction("E&xit", self, shortcut="Ctrl+Q", + triggered=self.close) + + self.autoRefreshAct = QtWidgets.QAction("&Auto-Refresh", self, + shortcut="Ctrl+A", checkable=True, enabled=False) + self.autoRefreshAct.triggered[bool].connect(self.settingsTree.setAutoRefresh) + self.autoRefreshAct.triggered[bool].connect(self.refreshAct.setDisabled) + + self.fallbacksAct = QtWidgets.QAction("&Fallbacks", self, + shortcut="Ctrl+F", checkable=True, enabled=False) + self.fallbacksAct.triggered[bool].connect(self.settingsTree.setFallbacksEnabled) + + self.aboutAct = QtWidgets.QAction("&About", self, triggered=self.about) + + self.aboutQtAct = QtWidgets.QAction("About &Qt", self, + triggered=QtWidgets.qApp.aboutQt) + + def createMenus(self): + self.fileMenu = self.menuBar().addMenu("&File") + self.fileMenu.addAction(self.openSettingsAct) + self.fileMenu.addAction(self.openIniFileAct) + self.fileMenu.addAction(self.openPropertyListAct) + self.fileMenu.addAction(self.openRegistryPathAct) + self.fileMenu.addSeparator() + self.fileMenu.addAction(self.refreshAct) + self.fileMenu.addSeparator() + self.fileMenu.addAction(self.exitAct) + + self.optionsMenu = self.menuBar().addMenu("&Options") + self.optionsMenu.addAction(self.autoRefreshAct) + self.optionsMenu.addAction(self.fallbacksAct) + + self.menuBar().addSeparator() + + self.helpMenu = self.menuBar().addMenu("&Help") + self.helpMenu.addAction(self.aboutAct) + self.helpMenu.addAction(self.aboutQtAct) + + def setSettingsObject(self, settings): + settings.setFallbacksEnabled(self.fallbacksAct.isChecked()) + self.settingsTree.setSettingsObject(settings) + + self.refreshAct.setEnabled(True) + self.autoRefreshAct.setEnabled(True) + + niceName = settings.fileName() + niceName.replace('\\', '/') + niceName = niceName.split('/')[-1] + + if not settings.isWritable(): + niceName += " (read only)" + + self.setWindowTitle("%s - Settings Editor" % niceName) + + +class LocationDialog(QtWidgets.QDialog): + def __init__(self, parent=None): + super(LocationDialog, self).__init__(parent) + + self.formatComboBox = QtWidgets.QComboBox() + self.formatComboBox.addItem("Native") + self.formatComboBox.addItem("INI") + + self.scopeComboBox = QtWidgets.QComboBox() + self.scopeComboBox.addItem("User") + self.scopeComboBox.addItem("System") + + self.organizationComboBox = QtWidgets.QComboBox() + self.organizationComboBox.addItem("Trolltech") + self.organizationComboBox.setEditable(True) + + self.applicationComboBox = QtWidgets.QComboBox() + self.applicationComboBox.addItem("Any") + self.applicationComboBox.addItem("Application Example") + self.applicationComboBox.addItem("Assistant") + self.applicationComboBox.addItem("Designer") + self.applicationComboBox.addItem("Linguist") + self.applicationComboBox.setEditable(True) + self.applicationComboBox.setCurrentIndex(3) + + formatLabel = QtWidgets.QLabel("&Format:") + formatLabel.setBuddy(self.formatComboBox) + + scopeLabel = QtWidgets.QLabel("&Scope:") + scopeLabel.setBuddy(self.scopeComboBox) + + organizationLabel = QtWidgets.QLabel("&Organization:") + organizationLabel.setBuddy(self.organizationComboBox) + + applicationLabel = QtWidgets.QLabel("&Application:") + applicationLabel.setBuddy(self.applicationComboBox) + + self.locationsGroupBox = QtWidgets.QGroupBox("Setting Locations") + + self.locationsTable = QtWidgets.QTableWidget() + self.locationsTable.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection) + self.locationsTable.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) + self.locationsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.locationsTable.setColumnCount(2) + self.locationsTable.setHorizontalHeaderLabels(("Location", "Access")) + self.locationsTable.horizontalHeader().setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) + self.locationsTable.horizontalHeader().resizeSection(1, 180) + + self.buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel) + + self.formatComboBox.activated.connect(self.updateLocationsTable) + self.scopeComboBox.activated.connect(self.updateLocationsTable) + self.organizationComboBox.lineEdit().editingFinished.connect(self.updateLocationsTable) + self.applicationComboBox.lineEdit().editingFinished.connect(self.updateLocationsTable) + self.buttonBox.accepted.connect(self.accept) + self.buttonBox.rejected.connect(self.reject) + + locationsLayout = QtWidgets.QVBoxLayout() + locationsLayout.addWidget(self.locationsTable) + self.locationsGroupBox.setLayout(locationsLayout) + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(formatLabel, 0, 0) + mainLayout.addWidget(self.formatComboBox, 0, 1) + mainLayout.addWidget(scopeLabel, 1, 0) + mainLayout.addWidget(self.scopeComboBox, 1, 1) + mainLayout.addWidget(organizationLabel, 2, 0) + mainLayout.addWidget(self.organizationComboBox, 2, 1) + mainLayout.addWidget(applicationLabel, 3, 0) + mainLayout.addWidget(self.applicationComboBox, 3, 1) + mainLayout.addWidget(self.locationsGroupBox, 4, 0, 1, 2) + mainLayout.addWidget(self.buttonBox, 5, 0, 1, 2) + self.setLayout(mainLayout) + + self.updateLocationsTable() + + self.setWindowTitle("Open Application Settings") + self.resize(650, 400) + + def format(self): + if self.formatComboBox.currentIndex() == 0: + return QtCore.QSettings.NativeFormat + else: + return QtCore.QSettings.IniFormat + + def scope(self): + if self.scopeComboBox.currentIndex() == 0: + return QtCore.QSettings.UserScope + else: + return QtCore.QSettings.SystemScope + + def organization(self): + return self.organizationComboBox.currentText() + + def application(self): + if self.applicationComboBox.currentText() == "Any": + return '' + + return self.applicationComboBox.currentText() + + def updateLocationsTable(self): + self.locationsTable.setUpdatesEnabled(False) + self.locationsTable.setRowCount(0) + + for i in range(2): + if i == 0: + if self.scope() == QtCore.QSettings.SystemScope: + continue + + actualScope = QtCore.QSettings.UserScope + else: + actualScope = QtCore.QSettings.SystemScope + + for j in range(2): + if j == 0: + if not self.application(): + continue + + actualApplication = self.application() + else: + actualApplication = '' + + settings = QtCore.QSettings(self.format(), actualScope, + self.organization(), actualApplication) + + row = self.locationsTable.rowCount() + self.locationsTable.setRowCount(row + 1) + + item0 = QtWidgets.QTableWidgetItem() + item0.setText(settings.fileName()) + + item1 = QtWidgets.QTableWidgetItem() + disable = not (settings.childKeys() or settings.childGroups()) + + if row == 0: + if settings.isWritable(): + item1.setText("Read-write") + disable = False + else: + item1.setText("Read-only") + self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setDisabled(disable) + else: + item1.setText("Read-only fallback") + + if disable: + item0.setFlags(item0.flags() & ~QtCore.Qt.ItemIsEnabled) + item1.setFlags(item1.flags() & ~QtCore.Qt.ItemIsEnabled) + + self.locationsTable.setItem(row, 0, item0) + self.locationsTable.setItem(row, 1, item1) + + self.locationsTable.setUpdatesEnabled(True) + + +class SettingsTree(QtWidgets.QTreeWidget): + def __init__(self, parent=None): + super(SettingsTree, self).__init__(parent) + + self.setItemDelegate(VariantDelegate(self)) + + self.setHeaderLabels(("Setting", "Type", "Value")) + self.header().setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) + self.header().setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch) + + self.settings = None + self.refreshTimer = QtCore.QTimer() + self.refreshTimer.setInterval(2000) + self.autoRefresh = False + + self.groupIcon = QtGui.QIcon() + self.groupIcon.addPixmap(self.style().standardPixmap(QtWidgets.QStyle.SP_DirClosedIcon), + QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.groupIcon.addPixmap(self.style().standardPixmap(QtWidgets.QStyle.SP_DirOpenIcon), + QtGui.QIcon.Normal, QtGui.QIcon.On) + self.keyIcon = QtGui.QIcon() + self.keyIcon.addPixmap(self.style().standardPixmap(QtWidgets.QStyle.SP_FileIcon)) + + self.refreshTimer.timeout.connect(self.maybeRefresh) + + def setSettingsObject(self, settings): + self.settings = settings + self.clear() + + if self.settings is not None: + self.settings.setParent(self) + self.refresh() + if self.autoRefresh: + self.refreshTimer.start() + else: + self.refreshTimer.stop() + + def sizeHint(self): + return QtCore.QSize(800, 600) + + def setAutoRefresh(self, autoRefresh): + self.autoRefresh = autoRefresh + + if self.settings is not None: + if self.autoRefresh: + self.maybeRefresh() + self.refreshTimer.start() + else: + self.refreshTimer.stop() + + def setFallbacksEnabled(self, enabled): + if self.settings is not None: + self.settings.setFallbacksEnabled(enabled) + self.refresh() + + def maybeRefresh(self): + if self.state() != QtWidgets.QAbstractItemView.EditingState: + self.refresh() + + def refresh(self): + if self.settings is None: + return + + # The signal might not be connected. + try: + self.itemChanged.disconnect(self.updateSetting) + except: + pass + + self.settings.sync() + self.updateChildItems(None) + + self.itemChanged.connect(self.updateSetting) + + def event(self, event): + if event.type() == QtCore.QEvent.WindowActivate: + if self.isActiveWindow() and self.autoRefresh: + self.maybeRefresh() + + return super(SettingsTree, self).event(event) + + def updateSetting(self, item): + key = item.text(0) + ancestor = item.parent() + + while ancestor: + key = ancestor.text(0) + '/' + key + ancestor = ancestor.parent() + + d = item.data(2, QtCore.Qt.UserRole) + self.settings.setValue(key, item.data(2, QtCore.Qt.UserRole)) + + if self.autoRefresh: + self.refresh() + + def updateChildItems(self, parent): + dividerIndex = 0 + + for group in self.settings.childGroups(): + childIndex = self.findChild(parent, group, dividerIndex) + if childIndex != -1: + child = self.childAt(parent, childIndex) + child.setText(1, '') + child.setText(2, '') + child.setData(2, QtCore.Qt.UserRole, None) + self.moveItemForward(parent, childIndex, dividerIndex) + else: + child = self.createItem(group, parent, dividerIndex) + + child.setIcon(0, self.groupIcon) + dividerIndex += 1 + + self.settings.beginGroup(group) + self.updateChildItems(child) + self.settings.endGroup() + + for key in self.settings.childKeys(): + childIndex = self.findChild(parent, key, 0) + if childIndex == -1 or childIndex >= dividerIndex: + if childIndex != -1: + child = self.childAt(parent, childIndex) + for i in range(child.childCount()): + self.deleteItem(child, i) + self.moveItemForward(parent, childIndex, dividerIndex) + else: + child = self.createItem(key, parent, dividerIndex) + child.setIcon(0, self.keyIcon) + dividerIndex += 1 + else: + child = self.childAt(parent, childIndex) + + value = self.settings.value(key) + if value is None: + child.setText(1, 'Invalid') + else: + child.setText(1, value.__class__.__name__) + child.setText(2, VariantDelegate.displayText(value)) + child.setData(2, QtCore.Qt.UserRole, value) + + while dividerIndex < self.childCount(parent): + self.deleteItem(parent, dividerIndex) + + def createItem(self, text, parent, index): + after = None + + if index != 0: + after = self.childAt(parent, index - 1) + + if parent is not None: + item = QtWidgets.QTreeWidgetItem(parent, after) + else: + item = QtWidgets.QTreeWidgetItem(self, after) + + item.setText(0, text) + item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable) + return item + + def deleteItem(self, parent, index): + if parent is not None: + item = parent.takeChild(index) + else: + item = self.takeTopLevelItem(index) + del item + + def childAt(self, parent, index): + if parent is not None: + return parent.child(index) + else: + return self.topLevelItem(index) + + def childCount(self, parent): + if parent is not None: + return parent.childCount() + else: + return self.topLevelItemCount() + + def findChild(self, parent, text, startIndex): + for i in range(self.childCount(parent)): + if self.childAt(parent, i).text(0) == text: + return i + return -1 + + def moveItemForward(self, parent, oldIndex, newIndex): + for int in range(oldIndex - newIndex): + self.deleteItem(parent, newIndex) + + +class VariantDelegate(QtWidgets.QItemDelegate): + def __init__(self, parent=None): + super(VariantDelegate, self).__init__(parent) + + self.boolExp = QtCore.QRegExp() + self.boolExp.setPattern('true|false') + self.boolExp.setCaseSensitivity(QtCore.Qt.CaseInsensitive) + + self.byteArrayExp = QtCore.QRegExp() + self.byteArrayExp.setPattern('[\\x00-\\xff]*') + + self.charExp = QtCore.QRegExp() + self.charExp.setPattern('.') + + self.colorExp = QtCore.QRegExp() + self.colorExp.setPattern('\\(([0-9]*),([0-9]*),([0-9]*),([0-9]*)\\)') + + self.doubleExp = QtCore.QRegExp() + self.doubleExp.setPattern('') + + self.pointExp = QtCore.QRegExp() + self.pointExp.setPattern('\\((-?[0-9]*),(-?[0-9]*)\\)') + + self.rectExp = QtCore.QRegExp() + self.rectExp.setPattern('\\((-?[0-9]*),(-?[0-9]*),(-?[0-9]*),(-?[0-9]*)\\)') + + self.signedIntegerExp = QtCore.QRegExp() + self.signedIntegerExp.setPattern('-?[0-9]*') + + self.sizeExp = QtCore.QRegExp(self.pointExp) + + self.unsignedIntegerExp = QtCore.QRegExp() + self.unsignedIntegerExp.setPattern('[0-9]*') + + self.dateExp = QtCore.QRegExp() + self.dateExp.setPattern('([0-9]{,4})-([0-9]{,2})-([0-9]{,2})') + + self.timeExp = QtCore.QRegExp() + self.timeExp.setPattern('([0-9]{,2}):([0-9]{,2}):([0-9]{,2})') + + self.dateTimeExp = QtCore.QRegExp() + self.dateTimeExp.setPattern(self.dateExp.pattern() + 'T' + self.timeExp.pattern()) + + def paint(self, painter, option, index): + if index.column() == 2: + value = index.model().data(index, QtCore.Qt.UserRole) + if not self.isSupportedType(value): + myOption = QtWidgets.QStyleOptionViewItem(option) + myOption.state &= ~QtWidgets.QStyle.State_Enabled + super(VariantDelegate, self).paint(painter, myOption, index) + return + + super(VariantDelegate, self).paint(painter, option, index) + + def createEditor(self, parent, option, index): + if index.column() != 2: + return None + + originalValue = index.model().data(index, QtCore.Qt.UserRole) + if not self.isSupportedType(originalValue): + return None + + lineEdit = QtWidgets.QLineEdit(parent) + lineEdit.setFrame(False) + + if isinstance(originalValue, bool): + regExp = self.boolExp + elif isinstance(originalValue, float): + regExp = self.doubleExp + elif isinstance(originalValue, int): + regExp = self.signedIntegerExp + elif isinstance(originalValue, QtCore.QByteArray): + regExp = self.byteArrayExp + elif isinstance(originalValue, QtGui.QColor): + regExp = self.colorExp + elif isinstance(originalValue, QtCore.QDate): + regExp = self.dateExp + elif isinstance(originalValue, QtCore.QDateTime): + regExp = self.dateTimeExp + elif isinstance(originalValue, QtCore.QTime): + regExp = self.timeExp + elif isinstance(originalValue, QtCore.QPoint): + regExp = self.pointExp + elif isinstance(originalValue, QtCore.QRect): + regExp = self.rectExp + elif isinstance(originalValue, QtCore.QSize): + regExp = self.sizeExp + else: + regExp = QtCore.QRegExp() + + if not regExp.isEmpty(): + validator = QtGui.QRegExpValidator(regExp, lineEdit) + lineEdit.setValidator(validator) + + return lineEdit + + def setEditorData(self, editor, index): + value = index.model().data(index, QtCore.Qt.UserRole) + if editor is not None: + editor.setText(self.displayText(value)) + + def setModelData(self, editor, model, index): + if not editor.isModified(): + return + + text = editor.text() + validator = editor.validator() + if validator is not None: + state, text, _ = validator.validate(text, 0) + if state != QtGui.QValidator.Acceptable: + return + + originalValue = index.model().data(index, QtCore.Qt.UserRole) + + if isinstance(originalValue, QtGui.QColor): + self.colorExp.exactMatch(text) + value = QtGui.QColor(min(int(self.colorExp.cap(1)), 255), + min(int(self.colorExp.cap(2)), 255), + min(int(self.colorExp.cap(3)), 255), + min(int(self.colorExp.cap(4)), 255)) + elif isinstance(originalValue, QtCore.QDate): + value = QtCore.QDate.fromString(text, QtCore.Qt.ISODate) + if not value.isValid(): + return + elif isinstance(originalValue, QtCore.QDateTime): + value = QtCore.QDateTime.fromString(text, QtCore.Qt.ISODate) + if not value.isValid(): + return + elif isinstance(originalValue, QtCore.QTime): + value = QtCore.QTime.fromString(text, QtCore.Qt.ISODate) + if not value.isValid(): + return + elif isinstance(originalValue, QtCore.QPoint): + self.pointExp.exactMatch(text) + value = QtCore.QPoint(int(self.pointExp.cap(1)), + int(self.pointExp.cap(2))) + elif isinstance(originalValue, QtCore.QRect): + self.rectExp.exactMatch(text) + value = QtCore.QRect(int(self.rectExp.cap(1)), + int(self.rectExp.cap(2)), + int(self.rectExp.cap(3)), + int(self.rectExp.cap(4))) + elif isinstance(originalValue, QtCore.QSize): + self.sizeExp.exactMatch(text) + value = QtCore.QSize(int(self.sizeExp.cap(1)), + int(self.sizeExp.cap(2))) + elif isinstance(originalValue, list): + value = text.split(',') + else: + value = type(originalValue)(text) + + model.setData(index, self.displayText(value), QtCore.Qt.DisplayRole) + model.setData(index, value, QtCore.Qt.UserRole) + + @staticmethod + def isSupportedType(value): + return isinstance(value, (bool, float, int, QtCore.QByteArray, + str, QtGui.QColor, QtCore.QDate, QtCore.QDateTime, + QtCore.QTime, QtCore.QPoint, QtCore.QRect, QtCore.QSize, + list)) + + @staticmethod + def displayText(value): + if isinstance(value, (bool, int, QtCore.QByteArray)): + return str(value) + if isinstance(value, str): + return value + elif isinstance(value, float): + return '%g' % value + elif isinstance(value, QtGui.QColor): + return '(%u,%u,%u,%u)' % (value.red(), value.green(), value.blue(), value.alpha()) + elif isinstance(value, (QtCore.QDate, QtCore.QDateTime, QtCore.QTime)): + return value.toString(QtCore.Qt.ISODate) + elif isinstance(value, QtCore.QPoint): + return '(%d,%d)' % (value.x(), value.y()) + elif isinstance(value, QtCore.QRect): + return '(%d,%d,%d,%d)' % (value.x(), value.y(), value.width(), value.height()) + elif isinstance(value, QtCore.QSize): + return '(%d,%d)' % (value.width(), value.height()) + elif isinstance(value, list): + return ','.join(value) + elif value is None: + return '' + + return '<%s>' % value + + +if __name__ == '__main__': + app = QtWidgets.QApplication(sys.argv) + mainWin = MainWindow() + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/datavisualization/bars3d.py b/examples/datavisualization/bars3d.py new file mode 100644 index 0000000..e2fa732 --- /dev/null +++ b/examples/datavisualization/bars3d.py @@ -0,0 +1,115 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 QtDataVisualization example""" + +import os +import sys +from PySide2.QtCore import QRect, QSize, QProcess, Qt +from PySide2.QtGui import QGuiApplication, QScreen, QWindow +from PySide2.QtWidgets import QApplication, QSizePolicy, QMainWindow, QWidget +from PySide2.QtDataVisualization import QtDataVisualization + +def dataToBarDataRow(data): + return list(QtDataVisualization.QBarDataItem(d) for d in data) + +def dataToBarDataArray(data): + return list(dataToBarDataRow(row) for row in data) + +class MainWindow(QMainWindow): + + def __init__(self): + super(MainWindow, self).__init__() + + self.setWindowTitle('Qt DataVisualization 3D Bars') + + self.bars = QtDataVisualization.Q3DBars() + + self.columnAxis = QtDataVisualization.QCategory3DAxis() + self.columnAxis.setTitle('Columns') + self.columnAxis.setTitleVisible(True) + self.columnAxis.setLabels(['Column1', 'Column2']) + self.columnAxis.setLabelAutoRotation(30) + + self.rowAxis = QtDataVisualization.QCategory3DAxis() + self.rowAxis.setTitle('Rows') + self.rowAxis.setTitleVisible(True) + self.rowAxis.setLabels(['Row1', 'Row2']) + self.rowAxis.setLabelAutoRotation(30) + + self.valueAxis = QtDataVisualization.QValue3DAxis() + self.valueAxis.setTitle('Values') + self.valueAxis.setTitleVisible(True) + self.valueAxis.setRange(0, 5) + + self.bars.setRowAxis(self.rowAxis) + self.bars.setColumnAxis(self.columnAxis) + self.bars.setValueAxis(self.valueAxis) + + self.series = QtDataVisualization.QBar3DSeries() + self.arrayData = [[1, 2], [3, 4]] + self.series.dataProxy().addRows(dataToBarDataArray(self.arrayData)) + + self.bars.setPrimarySeries(self.series) + + self.container = QWidget.createWindowContainer(self.bars) + + if not self.bars.hasContext(): + print("Couldn't initialize the OpenGL context.") + sys.exit(-1) + + camera = self.bars.scene().activeCamera() + camera.setYRotation(22.5) + + geometry = QGuiApplication.primaryScreen().geometry() + size = geometry.height() * 3 / 4 + self.container.setMinimumSize(size, size) + + self.container.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + self.container.setFocusPolicy(Qt.StrongFocus) + self.setCentralWidget(self.container) + +if __name__ == '__main__': + app = QApplication(sys.argv) + mainWin = MainWindow() + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/declarative/extending/chapter1-basics/app.qml b/examples/declarative/extending/chapter1-basics/app.qml new file mode 100644 index 0000000..190d024 --- /dev/null +++ b/examples/declarative/extending/chapter1-basics/app.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Charts 1.0 +import QtQuick 2.0 + +Item { + width: 300; height: 200 + + PieChart { + id: aPieChart + anchors.centerIn: parent + width: 100; height: 100 + name: "A simple pie chart" + color: "red" + } + + Text { + anchors { + bottom: parent.bottom; + horizontalCenter: parent.horizontalCenter; + bottomMargin: 20 + } + text: aPieChart.name + } +} +//![0] diff --git a/examples/declarative/extending/chapter1-basics/basics.py b/examples/declarative/extending/chapter1-basics/basics.py new file mode 100644 index 0000000..fa0f529 --- /dev/null +++ b/examples/declarative/extending/chapter1-basics/basics.py @@ -0,0 +1,100 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +"""PySide2 port of the qml/tutorials/extending-qml/chapter1-basics example from Qt v5.x""" + +import sys, os +sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'utils')) +from utils import text_type + +from PySide2.QtCore import Property, Signal, QUrl +from PySide2.QtGui import QGuiApplication, QPen, QPainter, QColor +from PySide2.QtQml import qmlRegisterType +from PySide2.QtQuick import QQuickPaintedItem, QQuickView + +class PieChart (QQuickPaintedItem): + def __init__(self, parent = None): + QQuickPaintedItem.__init__(self, parent) + self._name = u'' + + def paint(self, painter): + pen = QPen(self.color, 2) + painter.setPen(pen); + painter.setRenderHints(QPainter.Antialiasing, True); + painter.drawPie(self.boundingRect().adjusted(1,1,-1,-1), 90 * 16, 290 * 16); + + def getColor(self): + return self._color + + def setColor(self, value): + self._color = value + + def getName(self): + return self._name + + def setName(self, value): + self._name = value + + nameChanged = Signal() + + color = Property(QColor, getColor, setColor) + name = Property(text_type, getName, setName, notify=nameChanged) + +if __name__ == '__main__': + app = QGuiApplication(sys.argv) + + qmlRegisterType(PieChart, 'Charts', 1, 0, 'PieChart'); + + view = QQuickView() + view.setResizeMode(QQuickView.SizeRootObjectToView) + qmlFile = os.path.join(os.path.dirname(__file__), 'app.qml') + view.setSource(QUrl.fromLocalFile(os.path.abspath(qmlFile))) + if view.status() == QQuickView.Error: + sys.exit(-1) + view.show() + res = app.exec_() + # Deleting the view before it goes out of scope is required to make sure all child QML instances + # are destroyed in the correct order. + del view + sys.exit(res) diff --git a/examples/declarative/extending/chapter2-methods/app.qml b/examples/declarative/extending/chapter2-methods/app.qml new file mode 100644 index 0000000..3a44798 --- /dev/null +++ b/examples/declarative/extending/chapter2-methods/app.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Charts 1.0 +import QtQuick 2.0 + +Item { + width: 300; height: 200 + + PieChart { + id: aPieChart + anchors.centerIn: parent + width: 100; height: 100 + color: "red" + + onChartCleared: console.log("The chart has been cleared") + } + + MouseArea { + anchors.fill: parent + onClicked: aPieChart.clearChart() + } + + Text { + anchors { + bottom: parent.bottom; + horizontalCenter: parent.horizontalCenter; + bottomMargin: 20 + } + text: "Click anywhere to clear the chart" + } +} +//![0] diff --git a/examples/declarative/extending/chapter2-methods/methods.py b/examples/declarative/extending/chapter2-methods/methods.py new file mode 100644 index 0000000..538a923 --- /dev/null +++ b/examples/declarative/extending/chapter2-methods/methods.py @@ -0,0 +1,105 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +"""PySide2 port of the qml/tutorials/extending-qml/chapter2-methods example from Qt v5.x""" + +import sys, os +sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'utils')) +from utils import text_type + +from PySide2.QtCore import Property, Signal, Slot, QUrl, Qt +from PySide2.QtGui import QGuiApplication, QPen, QPainter, QColor +from PySide2.QtQml import qmlRegisterType +from PySide2.QtQuick import QQuickPaintedItem, QQuickView + +class PieChart (QQuickPaintedItem): + def __init__(self, parent = None): + QQuickPaintedItem.__init__(self, parent) + self._name = u'' + + def paint(self, painter): + pen = QPen(self.color, 2) + painter.setPen(pen); + painter.setRenderHints(QPainter.Antialiasing, True); + painter.drawPie(self.boundingRect().adjusted(1,1,-1,-1), 90 * 16, 290 * 16); + + def getColor(self): + return self._color + + def setColor(self, value): + self._color = value + + def getName(self): + return self._name + + def setName(self, value): + self._name = value + + color = Property(QColor, getColor, setColor) + name = Property(text_type, getName, setName) + chartCleared = Signal() + + @Slot() # This should be something like @Invokable + def clearChart(self): + self.setColor(Qt.transparent) + self.update() + self.chartCleared.emit() + +if __name__ == '__main__': + app = QGuiApplication(sys.argv) + + qmlRegisterType(PieChart, 'Charts', 1, 0, 'PieChart'); + + view = QQuickView() + view.setResizeMode(QQuickView.SizeRootObjectToView) + qmlFile = os.path.join(os.path.dirname(__file__), 'app.qml') + view.setSource(QUrl.fromLocalFile(os.path.abspath(qmlFile))) + if view.status() == QQuickView.Error: + sys.exit(-1) + view.show() + res = app.exec_() + # Deleting the view before it goes out of scope is required to make sure all child QML instances + # are destroyed in the correct order. + del view + sys.exit(res) diff --git a/examples/declarative/extending/chapter3-bindings/app.qml b/examples/declarative/extending/chapter3-bindings/app.qml new file mode 100644 index 0000000..277b897 --- /dev/null +++ b/examples/declarative/extending/chapter3-bindings/app.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Charts 1.0 +import QtQuick 2.0 + +Item { + width: 300; height: 200 + + Row { + anchors.centerIn: parent + spacing: 20 + + PieChart { + id: chartA + width: 100; height: 100 + color: "red" + } + + PieChart { + id: chartB + width: 100; height: 100 + color: chartA.color + } + } + + MouseArea { + anchors.fill: parent + onClicked: { chartA.color = "blue" } + } + + Text { + anchors { + bottom: parent.bottom; + horizontalCenter: parent.horizontalCenter; + bottomMargin: 20 + } + text: "Click anywhere to change the chart color" + } +} +//![0] diff --git a/examples/declarative/extending/chapter3-bindings/bindings.py b/examples/declarative/extending/chapter3-bindings/bindings.py new file mode 100644 index 0000000..52abf25 --- /dev/null +++ b/examples/declarative/extending/chapter3-bindings/bindings.py @@ -0,0 +1,110 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +"""PySide2 port of the qml/tutorials/extending-qml/chapter3-bindings example from Qt v5.x""" + +import sys, os +sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'utils')) +from utils import text_type + +from PySide2.QtCore import Property, Signal, Slot, QUrl, Qt +from PySide2.QtGui import QGuiApplication, QPen, QPainter, QColor +from PySide2.QtQml import qmlRegisterType +from PySide2.QtQuick import QQuickPaintedItem, QQuickView + +class PieChart (QQuickPaintedItem): + def __init__(self, parent = None): + QQuickPaintedItem.__init__(self, parent) + self._name = u'' + self._color = QColor() + + def paint(self, painter): + pen = QPen(self._color, 2) + painter.setPen(pen); + painter.setRenderHints(QPainter.Antialiasing, True); + painter.drawPie(self.boundingRect().adjusted(1,1,-1,-1), 90 * 16, 290 * 16); + + def getColor(self): + return self._color + + def setColor(self, value): + if value != self._color: + self._color = value + self.update() + self.colorChanged.emit() + + def getName(self): + return self._name + + def setName(self, value): + self._name = value + + colorChanged = Signal() + color = Property(QColor, getColor, setColor, notify=colorChanged) + name = Property(text_type, getName, setName) + chartCleared = Signal() + + @Slot() # This should be something like @Invokable + def clearChart(self): + self.setColor(Qt.transparent) + self.update() + self.chartCleared.emit() + +if __name__ == '__main__': + app = QGuiApplication(sys.argv) + + qmlRegisterType(PieChart, 'Charts', 1, 0, 'PieChart'); + + view = QQuickView() + view.setResizeMode(QQuickView.SizeRootObjectToView) + qmlFile = os.path.join(os.path.dirname(__file__), 'app.qml') + view.setSource(QUrl.fromLocalFile(os.path.abspath(qmlFile))) + if view.status() == QQuickView.Error: + sys.exit(-1) + view.show() + res = app.exec_() + # Deleting the view before it goes out of scope is required to make sure all child QML instances + # are destroyed in the correct order. + del view + sys.exit(res) diff --git a/examples/declarative/extending/chapter4-customPropertyTypes/app.qml b/examples/declarative/extending/chapter4-customPropertyTypes/app.qml new file mode 100644 index 0000000..29ad37d --- /dev/null +++ b/examples/declarative/extending/chapter4-customPropertyTypes/app.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Charts 1.0 +import QtQuick 2.0 + +Item { + width: 300; height: 200 + + PieChart { + id: chart + anchors.centerIn: parent + width: 100; height: 100 + + pieSlice: PieSlice { + anchors.fill: parent + color: "red" + } + } + + Component.onCompleted: console.log("The pie is colored " + chart.pieSlice.color) +} +//![0] diff --git a/examples/declarative/extending/chapter4-customPropertyTypes/customPropertyTypes.py b/examples/declarative/extending/chapter4-customPropertyTypes/customPropertyTypes.py new file mode 100644 index 0000000..9bd9f1e --- /dev/null +++ b/examples/declarative/extending/chapter4-customPropertyTypes/customPropertyTypes.py @@ -0,0 +1,116 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +"""PySide2 port of the qml/tutorials/extending-qml/chapter4-customPropertyTypes example from Qt v5.x""" + +import sys, os +sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'utils')) +from utils import text_type + +from PySide2.QtCore import Property, QUrl +from PySide2.QtGui import QGuiApplication, QPen, QPainter, QColor +from PySide2.QtQml import qmlRegisterType +from PySide2.QtQuick import QQuickPaintedItem, QQuickView, QQuickItem + +class PieSlice (QQuickPaintedItem): + + def __init__(self, parent = None): + QQuickPaintedItem.__init__(self, parent) + self._color = QColor() + + def getColor(self): + return self._color + + def setColor(self, value): + self._color = value + + color = Property(QColor, getColor, setColor) + + def paint(self, painter): + pen = QPen(self._color, 2) + painter.setPen(pen) + painter.setRenderHints(QPainter.Antialiasing, True) + painter.drawPie(self.boundingRect().adjusted(1,1,-1,-1), 90 * 16, 290 * 16) + +class PieChart (QQuickItem): + def __init__(self, parent = None): + QQuickItem.__init__(self, parent) + self._name = None + self._pieSlice = None + + def getName(self): + return self._name + + def setName(self, value): + self._name = value + + name = Property(text_type, getName, setName) + + def getPieSlice(self): + return self._pieSlice + + def setPieSlice(self, value): + self._pieSlice = value + self._pieSlice.setParentItem(self) + + pieSlice = Property(PieSlice, getPieSlice, setPieSlice) + +if __name__ == '__main__': + app = QGuiApplication(sys.argv) + + qmlRegisterType(PieChart, 'Charts', 1, 0, 'PieChart'); + qmlRegisterType(PieSlice, "Charts", 1, 0, "PieSlice"); + + view = QQuickView() + view.setResizeMode(QQuickView.SizeRootObjectToView) + qmlFile = os.path.join(os.path.dirname(__file__), 'app.qml') + view.setSource(QUrl.fromLocalFile(os.path.abspath(qmlFile))) + if view.status() == QQuickView.Error: + sys.exit(-1) + view.show() + res = app.exec_() + # Deleting the view before it goes out of scope is required to make sure all child QML instances + # are destroyed in the correct order. + del view + sys.exit(res) diff --git a/examples/declarative/extending/chapter5-listproperties/app.qml b/examples/declarative/extending/chapter5-listproperties/app.qml new file mode 100644 index 0000000..9ff6e3b --- /dev/null +++ b/examples/declarative/extending/chapter5-listproperties/app.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Charts 1.0 +import QtQuick 2.0 + +Item { + width: 300; height: 200 + + PieChart { + anchors.centerIn: parent + width: 100; height: 100 + + slices: [ + PieSlice { + anchors.fill: parent + color: "red" + fromAngle: 0; angleSpan: 110 + }, + PieSlice { + anchors.fill: parent + color: "black" + fromAngle: 110; angleSpan: 50 + }, + PieSlice { + anchors.fill: parent + color: "blue" + fromAngle: 160; angleSpan: 100 + } + ] + } +} +//![0] diff --git a/examples/declarative/extending/chapter5-listproperties/listproperties.py b/examples/declarative/extending/chapter5-listproperties/listproperties.py new file mode 100644 index 0000000..1aec727 --- /dev/null +++ b/examples/declarative/extending/chapter5-listproperties/listproperties.py @@ -0,0 +1,128 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +"""PySide2 port of the qml/tutorials/extending-qml/chapter5-listproperties example from Qt v5.x""" + +import sys, os +sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'utils')) +from utils import text_type + +from PySide2.QtCore import Property, QUrl +from PySide2.QtGui import QGuiApplication, QPen, QPainter, QColor +from PySide2.QtQml import qmlRegisterType, ListProperty +from PySide2.QtQuick import QQuickPaintedItem, QQuickView, QQuickItem + +class PieSlice (QQuickPaintedItem): + def __init__(self, parent = None): + QQuickPaintedItem.__init__(self, parent) + self._color = QColor() + self._fromAngle = 0 + self._angleSpan = 0 + + def getColor(self): + return self._color + + def setColor(self, value): + self._color = value + + def getFromAngle(self): + return self._angle + + def setFromAngle(self, value): + self._fromAngle = value + + def getAngleSpan(self): + return self._angleSpan + + def setAngleSpan(self, value): + self._angleSpan = value + + color = Property(QColor, getColor, setColor) + fromAngle = Property(int, getFromAngle, setFromAngle) + angleSpan = Property(int, getAngleSpan, setAngleSpan) + + def paint(self, painter): + pen = QPen(self._color, 2) + painter.setPen(pen) + painter.setRenderHints(QPainter.Antialiasing, True) + painter.drawPie(self.boundingRect().adjusted(1,1,-1,-1), self._fromAngle * 16, self._angleSpan * 16) + +class PieChart (QQuickItem): + def __init__(self, parent = None): + QQuickItem.__init__(self, parent) + self._name = u'' + self._slices = [] + + def getName(self): + return self._name + + def setName(self, value): + self._name = value + + name = Property(text_type, getName, setName) + + def appendSlice(self, _slice): + _slice.setParentItem(self) + self._slices.append(_slice) + + slices = ListProperty(PieSlice, appendSlice) + +if __name__ == '__main__': + app = QGuiApplication(sys.argv) + + qmlRegisterType(PieChart, 'Charts', 1, 0, 'PieChart') + qmlRegisterType(PieSlice, "Charts", 1, 0, "PieSlice") + + view = QQuickView() + view.setResizeMode(QQuickView.SizeRootObjectToView) + qmlFile = os.path.join(os.path.dirname(__file__), 'app.qml') + view.setSource(QUrl.fromLocalFile(os.path.abspath(qmlFile))) + if view.status() == QQuickView.Error: + sys.exit(-1) + view.show() + res = app.exec_() + # Deleting the view before it goes out of scope is required to make sure all child QML instances + # are destroyed in the correct order. + del view + sys.exit(res) diff --git a/examples/declarative/scrolling.py b/examples/declarative/scrolling.py new file mode 100755 index 0000000..3c46ec8 --- /dev/null +++ b/examples/declarative/scrolling.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import os +import sys +from PySide2.QtCore import QUrl +from PySide2.QtGui import QGuiApplication +import PySide2.QtQml +from PySide2.QtQuick import QQuickView + +# This example uses a QML file to show a scrolling list containing +# all the items listed in dataList. + +if __name__ == '__main__': + dataList = ["Item 1", "Item 2", "Item 3", "Item 4"] + + app = QGuiApplication(sys.argv) + view = QQuickView() + + ctxt = view.rootContext() + ctxt.setContextProperty("myModel", dataList) + + qmlFile = os.path.join(os.path.dirname(__file__), 'view.qml') + view.setSource(QUrl.fromLocalFile(os.path.abspath(qmlFile))) + if view.status() == QQuickView.Error: + sys.exit(-1) + view.show() + + app.exec_() + # Deleting the view before it goes out of scope is required to make sure all child QML instances + # are destroyed in the correct order. + del view diff --git a/examples/declarative/signals/pytoqml1/main.py b/examples/declarative/signals/pytoqml1/main.py new file mode 100644 index 0000000..f71969a --- /dev/null +++ b/examples/declarative/signals/pytoqml1/main.py @@ -0,0 +1,72 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import os +import sys +from PySide2.QtCore import QTimer, QUrl +from PySide2.QtGui import QGuiApplication +import PySide2.QtQml +from PySide2.QtQuick import QQuickView + +if __name__ == '__main__': + app = QGuiApplication(sys.argv) + + timer = QTimer() + timer.start(2000) + + view = QQuickView() + qmlFile = os.path.join(os.path.dirname(__file__), 'view.qml') + view.setSource(QUrl.fromLocalFile(os.path.abspath(qmlFile))) + if view.status() == QQuickView.Error: + sys.exit(-1) + root = view.rootObject() + + timer.timeout.connect(root.updateRotater) + + view.show() + res = app.exec_() + # Deleting the view before it goes out of scope is required to make sure all child QML instances + # are destroyed in the correct order. + del view + sys.exit(res) diff --git a/examples/declarative/signals/pytoqml1/view.qml b/examples/declarative/signals/pytoqml1/view.qml new file mode 100644 index 0000000..a35b486 --- /dev/null +++ b/examples/declarative/signals/pytoqml1/view.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + id: page + + function updateRotater() { + rotater.angle = rotater.angle + 45 + } + + width: 500; height: 200 + color: "lightgray" + + Rectangle { + id: rotater + property real angle : 0 + x: 240 + width: 100; height: 10 + color: "black" + y: 95 + + transform: Rotation { + origin.x: 10; origin.y: 5 + angle: rotater.angle + Behavior on angle { + SpringAnimation { + spring: 1.4 + damping: .05 + } + } + } + } + +} diff --git a/examples/declarative/signals/qmltopy1/main.py b/examples/declarative/signals/qmltopy1/main.py new file mode 100755 index 0000000..3d23a64 --- /dev/null +++ b/examples/declarative/signals/qmltopy1/main.py @@ -0,0 +1,89 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import os +import sys +from PySide2.QtCore import QObject, QUrl, Slot +from PySide2.QtGui import QGuiApplication +import PySide2.QtQml +from PySide2.QtQuick import QQuickView + +class Console(QObject): + """Output stuff on the console.""" + + @Slot(str) + @Slot('double') + def output(self, s): + print(s) + + @Slot(str) + def outputStr(self, s): + print(s) + + @Slot('double') + def outputFloat(self, x): + print(x) + + +if __name__ == '__main__': + app = QGuiApplication(sys.argv) + view = QQuickView() + + # Instantiate the Python object. + con = Console() + + # Expose the object to QML. + context = view.rootContext() + context.setContextProperty("con", con) + + qmlFile = os.path.join(os.path.dirname(__file__), 'view.qml') + view.setSource(QUrl.fromLocalFile(os.path.abspath(qmlFile))) + if view.status() == QQuickView.Error: + sys.exit(-1) + view.show() + res = app.exec_() + # Deleting the view before it goes out of scope is required to make sure all child QML instances + # are destroyed in the correct order. + del view + sys.exit(res) diff --git a/examples/declarative/signals/qmltopy1/view.qml b/examples/declarative/signals/qmltopy1/view.qml new file mode 100644 index 0000000..32a66ef --- /dev/null +++ b/examples/declarative/signals/qmltopy1/view.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +import QtQuick 2.0 + +Rectangle { + id: page + + width: 500; height: 200 + color: "lightgray" + + Text { + id: helloText + text: "Hello world!" + anchors.horizontalCenter: page.horizontalCenter + y: 30 + font.pointSize: 24; font.bold: true + } + + Rectangle { + id: button + width: 150; height: 40 + color: "darkgray" + anchors.horizontalCenter: page.horizontalCenter + y: 120 + MouseArea { + id: buttonMouseArea + objectName: "buttonMouseArea" + anchors.fill: parent + onClicked: { + // once the "con" context has been declared, + // slots can be called like functions + con.outputFloat(123) + con.outputStr("foobar") + con.output(helloText.x) + con.output(helloText.text) + } + } + Text { + id: buttonText + text: "Press me!" + anchors.horizontalCenter: button.horizontalCenter + anchors.verticalCenter: button.verticalCenter + font.pointSize: 16 + } + } +} diff --git a/examples/declarative/signals/qmltopy2/main.py b/examples/declarative/signals/qmltopy2/main.py new file mode 100755 index 0000000..0ce7933 --- /dev/null +++ b/examples/declarative/signals/qmltopy2/main.py @@ -0,0 +1,81 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import os +import sys +from PySide2.QtCore import QObject, QUrl, Slot +from PySide2.QtGui import QGuiApplication +import PySide2.QtQml +from PySide2.QtQuick import QQuickView + +class RotateValue(QObject): + def __init__(self): + super(RotateValue,self).__init__() + self.r = 0 + + # If a slot returns a value, the return value type must be explicitly + # defined in the decorator. + @Slot(result=int) + def val(self): + self.r = self.r + 10 + return self.r + +if __name__ == '__main__': + app = QGuiApplication(sys.argv) + view = QQuickView() + + rotatevalue = RotateValue() + context = view.rootContext() + context.setContextProperty("rotatevalue", rotatevalue) + + qmlFile = os.path.join(os.path.dirname(__file__), 'view.qml') + view.setSource(QUrl.fromLocalFile(os.path.abspath(qmlFile))) + if view.status() == QQuickView.Error: + sys.exit(-1) + view.show() + res = app.exec_() + # Deleting the view before it goes out of scope is required to make sure all child QML instances + # are destroyed in the correct order. + del view + sys.exit(res) diff --git a/examples/declarative/signals/qmltopy2/view.qml b/examples/declarative/signals/qmltopy2/view.qml new file mode 100644 index 0000000..6fe6087 --- /dev/null +++ b/examples/declarative/signals/qmltopy2/view.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + id: page + + width: 500; height: 200 + color: "lightgray" + + Text { + id: helloText + text: "Hello world!" + anchors.horizontalCenter: page.horizontalCenter + y: 30 + font.pointSize: 24; font.bold: true + } + + + Rectangle { + id: button + width: 150; height: 40 + color: "darkgray" + anchors.horizontalCenter: page.horizontalCenter + y: 120 + MouseArea { + id: buttonMouseArea + objectName: "buttonMouseArea" + anchors.fill: parent + onClicked: { + helloText.rotation = rotatevalue.val() + } + } + Text { + id: buttonText + text: "Press me!" + anchors.horizontalCenter: button.horizontalCenter + anchors.verticalCenter: button.verticalCenter + font.pointSize: 16 + } + } +} diff --git a/examples/declarative/signals/qmltopy3/main.py b/examples/declarative/signals/qmltopy3/main.py new file mode 100644 index 0000000..3c231c2 --- /dev/null +++ b/examples/declarative/signals/qmltopy3/main.py @@ -0,0 +1,72 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import os +import sys +from PySide2.QtCore import QObject, QUrl +from PySide2.QtGui import QGuiApplication +import PySide2.QtQml +from PySide2.QtQuick import QQuickView + +def sayThis(s): + print(s) + +if __name__ == '__main__': + app = QGuiApplication(sys.argv) + view = QQuickView() + qmlFile = os.path.join(os.path.dirname(__file__), 'view.qml') + view.setSource(QUrl.fromLocalFile(os.path.abspath(qmlFile))) + if view.status() == QQuickView.Error: + sys.exit(-1) + + root = view.rootObject() + root.textRotationChanged.connect(sayThis) + root.buttonClicked.connect(lambda: sayThis("clicked button (QML top-level signal)")) + + view.show() + res = app.exec_() + # Deleting the view before it goes out of scope is required to make sure all child QML instances + # are destroyed in the correct order. + del view + sys.exit(res) diff --git a/examples/declarative/signals/qmltopy3/view.qml b/examples/declarative/signals/qmltopy3/view.qml new file mode 100644 index 0000000..9657cd4 --- /dev/null +++ b/examples/declarative/signals/qmltopy3/view.qml @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + id: page + + signal buttonClicked + signal textRotationChanged(double rot) + + width: 500; height: 200 + color: "lightgray" + + Text { + id: helloText + text: "Hello world!" + y: 30 + x: page.width/2-width/2 + font.pointSize: 24; font.bold: true + onRotationChanged: textRotationChanged(rotation) + + states: State { + name: "down"; when: buttonMouseArea.pressed === true + PropertyChanges { + target: helloText; + rotation: 180; + y: 100; + } + } + + transitions: Transition { + from: ""; to: "down"; reversible: true + ParallelAnimation { + NumberAnimation { + properties: "y,rotation" + duration: 500 + easing.type: Easing.InOutQuad + } + } + } + } + + Rectangle { + id: button + width: 150; height: 40 + color: "darkgray" + anchors.horizontalCenter: page.horizontalCenter + y: 120 + MouseArea { + id: buttonMouseArea + objectName: "buttonMouseArea" + anchors.fill: parent + onClicked: { + buttonClicked() + } + } + Text { + id: buttonText + text: "Press me!" + anchors.horizontalCenter: button.horizontalCenter + anchors.verticalCenter: button.verticalCenter + font.pointSize: 16 + } + } +} diff --git a/examples/declarative/signals/qmltopy4/main.py b/examples/declarative/signals/qmltopy4/main.py new file mode 100644 index 0000000..0a54e6e --- /dev/null +++ b/examples/declarative/signals/qmltopy4/main.py @@ -0,0 +1,72 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import os +import sys +from PySide2.QtCore import QObject, QUrl +from PySide2.QtGui import QGuiApplication +import PySide2.QtQml +from PySide2.QtQuick import QQuickView + +def sayThis(s): + print(s) + +if __name__ == '__main__': + app = QGuiApplication(sys.argv) + view = QQuickView() + qmlFile = os.path.join(os.path.dirname(__file__), 'view.qml') + view.setSource(QUrl.fromLocalFile(os.path.abspath(qmlFile))) + if view.status() == QQuickView.Error: + sys.exit(-1) + + root = view.rootObject() + button = root.findChild(QObject, "buttonMouseArea") + button.clicked.connect(lambda: sayThis("clicked button (signal directly connected)")) + + view.show() + res = app.exec_() + # Deleting the view before it goes out of scope is required to make sure all child QML instances + # are destroyed in the correct order. + del view + sys.exit(res) diff --git a/examples/declarative/signals/qmltopy4/view.qml b/examples/declarative/signals/qmltopy4/view.qml new file mode 100644 index 0000000..0d1349f --- /dev/null +++ b/examples/declarative/signals/qmltopy4/view.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + id: page + + width: 500; height: 200 + color: "lightgray" + + Rectangle { + id: button + width: 150; height: 40 + color: "darkgray" + anchors.horizontalCenter: page.horizontalCenter + anchors.verticalCenter: page.verticalCenter + MouseArea { + id: buttonMouseArea + objectName: "buttonMouseArea" + anchors.fill: parent + } + Text { + id: buttonText + text: "Press me!" + anchors.horizontalCenter: button.horizontalCenter + anchors.verticalCenter: button.verticalCenter + font.pointSize: 16 + } + } +} diff --git a/examples/declarative/textproperties/main.py b/examples/declarative/textproperties/main.py new file mode 100644 index 0000000..8da443e --- /dev/null +++ b/examples/declarative/textproperties/main.py @@ -0,0 +1,112 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +from os.path import abspath, dirname, join + +from PySide2.QtCore import QObject, Slot +from PySide2.QtGui import QGuiApplication +from PySide2.QtQml import QQmlApplicationEngine + + +class Bridge(QObject): + + @Slot(str, result=str) + def getColor(self, s): + if s.lower() == "red": + return "#ef9a9a" + elif s.lower() == "green": + return "#a5d6a7" + elif s.lower() == "blue": + return "#90caf9" + else: + return "white" + + @Slot(float, result=int) + def getSize(self, s): + size = int(s * 34) + if size <= 0: + return 1 + else: + return size + + @Slot(str, result=bool) + def getItalic(self, s): + if s.lower() == "italic": + return True + else: + return False + + @Slot(str, result=bool) + def getBold(self, s): + if s.lower() == "bold": + return True + else: + return False + + @Slot(str, result=bool) + def getUnderline(self, s): + if s.lower() == "underline": + return True + else: + return False + + +if __name__ == '__main__': + sys.argv += ['--style', 'material'] + app = QGuiApplication(sys.argv) + engine = QQmlApplicationEngine() + + # Instance of the Python object + bridge = Bridge() + + # Expose the Python object to QML + context = engine.rootContext() + context.setContextProperty("con", bridge) + + # Get the path of the current directory, and then add the name + # of the QML file, to load it. + qmlFile = join(dirname(__file__), 'view.qml') + engine.load(abspath(qmlFile)) + + if not engine.rootObjects(): + sys.exit(-1) + + sys.exit(app.exec_()) diff --git a/examples/declarative/textproperties/view.qml b/examples/declarative/textproperties/view.qml new file mode 100644 index 0000000..98289a1 --- /dev/null +++ b/examples/declarative/textproperties/view.qml @@ -0,0 +1,191 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +import QtQuick 2.0 +import QtQuick.Layouts 1.11 +import QtQuick.Controls 2.1 +import QtQuick.Window 2.1 +import QtQuick.Controls.Material 2.1 + +ApplicationWindow { + id: page + width: 800 + height: 400 + visible: true + Material.theme: Material.Dark + Material.accent: Material.Red + + GridLayout { + id: grid + columns: 2 + rows: 3 + + ColumnLayout { + spacing: 2 + Layout.columnSpan: 1 + Layout.preferredWidth: 400 + + Text { + id: leftlabel + Layout.alignment: Qt.AlignHCenter + color: "white" + font.pointSize: 16 + text: "Qt for Python" + Layout.preferredHeight: 100 + Material.accent: Material.Green + } + + RadioButton { + id: italic + Layout.alignment: Qt.AlignLeft + text: "Italic" + onToggled: { + leftlabel.font.italic = con.getItalic(italic.text) + leftlabel.font.bold = con.getBold(italic.text) + leftlabel.font.underline = con.getUnderline(italic.text) + + } + } + RadioButton { + id: bold + Layout.alignment: Qt.AlignLeft + text: "Bold" + onToggled: { + leftlabel.font.italic = con.getItalic(bold.text) + leftlabel.font.bold = con.getBold(bold.text) + leftlabel.font.underline = con.getUnderline(bold.text) + } + } + RadioButton { + id: underline + Layout.alignment: Qt.AlignLeft + text: "Underline" + onToggled: { + leftlabel.font.italic = con.getItalic(underline.text) + leftlabel.font.bold = con.getBold(underline.text) + leftlabel.font.underline = con.getUnderline(underline.text) + } + } + RadioButton { + id: noneradio + Layout.alignment: Qt.AlignLeft + text: "None" + checked: true + onToggled: { + leftlabel.font.italic = con.getItalic(noneradio.text) + leftlabel.font.bold = con.getBold(noneradio.text) + leftlabel.font.underline = con.getUnderline(noneradio.text) + } + } + } + + ColumnLayout { + id: rightcolumn + spacing: 2 + Layout.columnSpan: 1 + Layout.preferredWidth: 400 + Layout.preferredHeight: 400 + Layout.fillWidth: true + + RowLayout { + Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter + + + Button { + id: red + text: "Red" + highlighted: true + Material.accent: Material.Red + onClicked: { + leftlabel.color = con.getColor(red.text) + } + } + Button { + id: green + text: "Green" + highlighted: true + Material.accent: Material.Green + onClicked: { + leftlabel.color = con.getColor(green.text) + } + } + Button { + id: blue + text: "Blue" + highlighted: true + Material.accent: Material.Blue + onClicked: { + leftlabel.color = con.getColor(blue.text) + } + } + Button { + id: nonebutton + text: "None" + highlighted: true + Material.accent: Material.BlueGrey + onClicked: { + leftlabel.color = con.getColor(nonebutton.text) + } + } + } + RowLayout { + Layout.fillWidth: true + Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter + Text { + id: rightlabel + color: "white" + Layout.alignment: Qt.AlignLeft + text: "Font size" + Material.accent: Material.White + } + Slider { + width: rightcolumn.width*0.6 + Layout.alignment: Qt.AlignRight + id: slider + value: 0.5 + onValueChanged: { + leftlabel.font.pointSize = con.getSize(value) + } + } + } + } + } +} diff --git a/examples/declarative/usingmodel.py b/examples/declarative/usingmodel.py new file mode 100644 index 0000000..4b43871 --- /dev/null +++ b/examples/declarative/usingmodel.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import os +import sys +import PySide2.QtQml +from PySide2.QtCore import QAbstractListModel, Qt, QUrl, QByteArray +from PySide2.QtGui import QGuiApplication +from PySide2.QtQuick import QQuickView + +class PersonModel (QAbstractListModel): + MyRole = Qt.UserRole + 1 + + def __init__(self, parent = None): + QAbstractListModel.__init__(self, parent) + self._data = [] + + def roleNames(self): + roles = { + PersonModel.MyRole : QByteArray(b'modelData'), + Qt.DisplayRole : QByteArray(b'display') + } + return roles + + def rowCount(self, index): + return len(self._data) + + def data(self, index, role): + d = self._data[index.row()] + + if role == Qt.DisplayRole: + return d['name'] + elif role == Qt.DecorationRole: + return Qt.black + elif role == PersonModel.MyRole: + return d['myrole'] + return None + + def populate(self): + self._data.append({'name':'Qt', 'myrole':'role1'}) + self._data.append({'name':'PySide', 'myrole':'role2'}) + +if __name__ == '__main__': + app = QGuiApplication(sys.argv) + view = QQuickView() + view.setResizeMode(QQuickView.SizeRootObjectToView) + + myModel = PersonModel() + myModel.populate() + + view.rootContext().setContextProperty("myModel", myModel) + qmlFile = os.path.join(os.path.dirname(__file__), 'view.qml') + view.setSource(QUrl.fromLocalFile(os.path.abspath(qmlFile))) + if view.status() == QQuickView.Error: + sys.exit(-1) + view.show() + + app.exec_() + # Deleting the view before it goes out of scope is required to make sure all child QML instances + # are destroyed in the correct order. + del view diff --git a/examples/declarative/view.qml b/examples/declarative/view.qml new file mode 100644 index 0000000..8eb4f7f --- /dev/null +++ b/examples/declarative/view.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +ListView { + width: 100 + height: 100 + anchors.fill: parent + model: myModel + delegate: Component { + Rectangle { + height: 25 + width: 100 + Text { + function displayText() { + var result = "" + if (typeof display !== "undefined") + result = display + ": " + result += modelData + return result + } + + text: displayText() + } + } + } +} diff --git a/examples/examples.pyqtc b/examples/examples.pyqtc new file mode 100644 index 0000000..eb0e359 --- /dev/null +++ b/examples/examples.pyqtc @@ -0,0 +1,103 @@ +charts/memoryusage.py +corelib/threads/mandelbrot.py +corelib/tools/codecs/codecs.py +corelib/tools/regexp.py +corelib/tools/settingseditor/settingseditor.py +declarative/extending/chapter1-basics/basics.py +declarative/extending/chapter2-methods/methods.py +declarative/extending/chapter3-bindings/bindings.py +declarative/extending/chapter4-customPropertyTypes/customPropertyTypes.py +declarative/extending/chapter5-listproperties/listproperties.py +declarative/scrolling.py +declarative/signals/pytoqml1/main.py +declarative/signals/qmltopy1/main.py +declarative/signals/qmltopy2/main.py +declarative/signals/qmltopy3/main.py +declarative/signals/qmltopy4/main.py +declarative/usingmodel.py +macextras/macpasteboardmime.py +multimedia/audiooutput.py +multimedia/camera.py +multimedia/player.py +network/blockingfortuneclient.py +network/fortuneclient.py +network/fortuneserver.py +network/threadedfortuneserver.py +opengl/2dpainting.py +opengl/grabber.py +opengl/hellogl.py +opengl/overpainting.py +opengl/samplebuffers.py +opengl/textures/textures.py +script/helloscript.py +texttospeech/texttospeech.py +tutorial/t1.py +tutorial/t10.py +tutorial/t11.py +tutorial/t12.py +tutorial/t13.py +tutorial/t14.py +tutorial/t2.py +tutorial/t3.py +tutorial/t4.py +tutorial/t5.py +tutorial/t6.py +tutorial/t7.py +tutorial/t8.py +tutorial/t9.py +webenginewidgets/simplebrowser.py +widgets/animation/animatedtiles/animatedtiles.py +widgets/animation/appchooser/appchooser.py +widgets/animation/easing/easing.py +widgets/animation/states/states.py +widgets/dialogs/classwizard/classwizard.py +widgets/dialogs/extension.py +widgets/dialogs/findfiles.py +widgets/dialogs/standarddialogs.py +widgets/dialogs/trivialwizard.py +widgets/draganddrop/draggabletext/draggabletext.py +widgets/effects/lighting.py +widgets/graphicsview/anchorlayout.py +widgets/graphicsview/collidingmice/collidingmice.py +widgets/graphicsview/diagramscene/diagramscene.py +widgets/graphicsview/dragdroprobot/dragdroprobot.py +widgets/graphicsview/elasticnodes.py +widgets/itemviews/addressbook/adddialogwidget.py +widgets/itemviews/addressbook/addressbook.py +widgets/itemviews/addressbook/addresswidget.py +widgets/itemviews/addressbook/newaddresstab.py +widgets/itemviews/addressbook/tablemodel.py +widgets/itemviews/basicsortfiltermodel.py +widgets/itemviews/fetchmore.py +widgets/itemviews/stardelegate/stardelegate.py +widgets/itemviews/stardelegate/stareditor.py +widgets/itemviews/stardelegate/starrating.py +widgets/layouts/basiclayouts.py +widgets/layouts/dynamiclayouts.py +widgets/layouts/flowlayout.py +widgets/mainwindows/application/application.py +widgets/mainwindows/dockwidgets/dockwidgets.py +widgets/mainwindows/mdi/mdi.py +widgets/painting/basicdrawing/basicdrawing.py +widgets/painting/concentriccircles.py +widgets/richtext/orderform.py +widgets/richtext/syntaxhighlighter.py +widgets/richtext/syntaxhighlighter/syntaxhighlighter.py +widgets/richtext/textobject/textobject.py +widgets/state-machine/eventtrans.py +widgets/state-machine/factstates.py +widgets/state-machine/pingpong.py +widgets/state-machine/rogue.py +widgets/state-machine/trafficlight.py +widgets/state-machine/twowaybutton.py +widgets/tutorials/addressbook/part1.py +widgets/tutorials/addressbook/part2.py +widgets/tutorials/addressbook/part3.py +widgets/tutorials/addressbook/part4.py +widgets/tutorials/addressbook/part5.py +widgets/tutorials/addressbook/part6.py +widgets/tutorials/addressbook/part7.py +widgets/widgets/hellogl_openglwidget_legacy.py +widgets/widgets/tetrix.py +xml/dombookmarks/dombookmarks.py +xmlpatterns/schema/schema.py diff --git a/examples/macextras/macpasteboardmime.py b/examples/macextras/macpasteboardmime.py new file mode 100755 index 0000000..2e0995a --- /dev/null +++ b/examples/macextras/macpasteboardmime.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +import sys +import math +from PySide2 import QtCore, QtGui, QtWidgets + +try: + from PySide2 import QtMacExtras +except ImportError: + app = QtWidgets.QApplication(sys.argv) + messageBox = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Critical, "QtMacExtras macpasteboardmime", + "This exampe only runs on macOS and QtMacExtras must be installed to run this example.", + QtWidgets.QMessageBox.Close) + messageBox.exec_() + sys.exit(1) + +class VCardMime(QtMacExtras.QMacPasteboardMime): + def __init__(self, t = QtMacExtras.QMacPasteboardMime.MIME_ALL): + super(VCardMime, self).__init__(t) + + def convertorName(self): + return "VCardMime" + + def canConvert(self, mime, flav): + if self.mimeFor(flav) == mime: + return True + else: + return False + + def mimeFor(self, flav): + if flav == "public.vcard": + return "application/x-mycompany-VCard" + else: + return "" + + def flavorFor(self, mime): + if mime == "application/x-mycompany-VCard": + return "public.vcard" + else: + return "" + + def convertToMime(self, mime, data, flav): + all = QtCore.QByteArray() + for i in data: + all += i + return all + + def convertFromMime(mime, data, flav): + # Todo: implement! + return [] + +class TestWidget(QtWidgets.QWidget): + def __init__(self, parent=None): + super(TestWidget, self).__init__(parent) + self.vcardMime = VCardMime() + self.setAcceptDrops(True) + + self.label1 = QtWidgets.QLabel() + self.label2 = QtWidgets.QLabel() + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(self.label1) + layout.addWidget(self.label2) + self.setLayout(layout) + + self.label1.setText("Please drag a \"VCard\" from Contacts application, normally a name in the list, and drop here.") + + def dragEnterEvent(self, e): + e.accept() + + def dropEvent(self, e): + e.accept() + self.contentsDropEvent(e) + + def contentsDropEvent(self, e): + if e.mimeData().hasFormat("application/x-mycompany-VCard"): + s = e.mimeData().data( "application/x-mycompany-VCard" ) + # s now contains text of vcard + self.label2.setText(str(s)) + e.acceptProposedAction() + +if __name__ == '__main__': + app = QtWidgets.QApplication(sys.argv) + QtMacExtras.qRegisterDraggedTypes(["public.vcard"]) + wid1 = TestWidget() + wid1.show() + sys.exit(app.exec_()) diff --git a/examples/multimedia/audiooutput.py b/examples/multimedia/audiooutput.py new file mode 100755 index 0000000..d8a3860 --- /dev/null +++ b/examples/multimedia/audiooutput.py @@ -0,0 +1,301 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the multimedia/audiooutput example from Qt v5.x, originating from PyQt""" + +from math import pi, sin +from struct import pack + +from PySide2.QtCore import QByteArray, QIODevice, Qt, QTimer, qWarning +from PySide2.QtMultimedia import (QAudio, QAudioDeviceInfo, QAudioFormat, + QAudioOutput) +from PySide2.QtWidgets import (QApplication, QComboBox, QHBoxLayout, QLabel, + QMainWindow, QPushButton, QSlider, QVBoxLayout, QWidget) + + +class Generator(QIODevice): + + def __init__(self, format, durationUs, sampleRate, parent): + super(Generator, self).__init__(parent) + + self.m_pos = 0 + self.m_buffer = QByteArray() + + self.generateData(format, durationUs, sampleRate) + + def start(self): + self.open(QIODevice.ReadOnly) + + def stop(self): + self.m_pos = 0 + self.close() + + def generateData(self, format, durationUs, sampleRate): + pack_format = '' + + if format.sampleSize() == 8: + if format.sampleType() == QAudioFormat.UnSignedInt: + scaler = lambda x: ((1.0 + x) / 2 * 255) + pack_format = 'B' + elif format.sampleType() == QAudioFormat.SignedInt: + scaler = lambda x: x * 127 + pack_format = 'b' + elif format.sampleSize() == 16: + if format.sampleType() == QAudioFormat.UnSignedInt: + scaler = lambda x: (1.0 + x) / 2 * 65535 + pack_format = 'H' + elif format.sampleType() == QAudioFormat.SignedInt: + scaler = lambda x: x * 32767 + pack_format = 'h' + + assert(pack_format != '') + + channelBytes = format.sampleSize() // 8 + sampleBytes = format.channelCount() * channelBytes + + length = (format.sampleRate() * format.channelCount() * (format.sampleSize() // 8)) * durationUs // 100000 + + self.m_buffer.clear() + sampleIndex = 0 + factor = 2 * pi * sampleRate / format.sampleRate() + + while length != 0: + x = sin((sampleIndex % format.sampleRate()) * factor) + packed = pack(pack_format, int(scaler(x))) + + for _ in range(format.channelCount()): + self.m_buffer.append(packed) + length -= channelBytes + + sampleIndex += 1 + + def readData(self, maxlen): + data = QByteArray() + total = 0 + + while maxlen > total: + chunk = min(self.m_buffer.size() - self.m_pos, maxlen - total) + data.append(self.m_buffer.mid(self.m_pos, chunk)) + self.m_pos = (self.m_pos + chunk) % self.m_buffer.size() + total += chunk + + return data.data() + + def writeData(self, data): + return 0 + + def bytesAvailable(self): + return self.m_buffer.size() + super(Generator, self).bytesAvailable() + + +class AudioTest(QMainWindow): + + PUSH_MODE_LABEL = "Enable push mode" + PULL_MODE_LABEL = "Enable pull mode" + SUSPEND_LABEL = "Suspend playback" + RESUME_LABEL = "Resume playback" + + DurationSeconds = 1 + ToneSampleRateHz = 600 + DataSampleRateHz = 44100 + + def __init__(self): + super(AudioTest, self).__init__() + + self.m_device = QAudioDeviceInfo.defaultOutputDevice() + self.m_output = None + + self.initializeWindow() + self.initializeAudio() + + def initializeWindow(self): + layout = QVBoxLayout() + + self.m_deviceBox = QComboBox() + self.m_deviceBox.activated[int].connect(self.deviceChanged) + for deviceInfo in QAudioDeviceInfo.availableDevices(QAudio.AudioOutput): + self.m_deviceBox.addItem(deviceInfo.deviceName(), deviceInfo) + + layout.addWidget(self.m_deviceBox) + + self.m_modeButton = QPushButton() + self.m_modeButton.clicked.connect(self.toggleMode) + self.m_modeButton.setText(self.PUSH_MODE_LABEL) + + layout.addWidget(self.m_modeButton) + + self.m_suspendResumeButton = QPushButton( + clicked=self.toggleSuspendResume) + self.m_suspendResumeButton.setText(self.SUSPEND_LABEL) + + layout.addWidget(self.m_suspendResumeButton) + + volumeBox = QHBoxLayout() + volumeLabel = QLabel("Volume:") + self.m_volumeSlider = QSlider(Qt.Horizontal, minimum=0, maximum=100, + singleStep=10) + self.m_volumeSlider.valueChanged.connect(self.volumeChanged) + + volumeBox.addWidget(volumeLabel) + volumeBox.addWidget(self.m_volumeSlider) + + layout.addLayout(volumeBox) + + window = QWidget() + window.setLayout(layout) + + self.setCentralWidget(window) + + def initializeAudio(self): + self.m_pullTimer = QTimer(self) + self.m_pullTimer.timeout.connect(self.pullTimerExpired) + self.m_pullMode = True + + self.m_format = QAudioFormat() + self.m_format.setSampleRate(self.DataSampleRateHz) + self.m_format.setChannelCount(1) + self.m_format.setSampleSize(16) + self.m_format.setCodec('audio/pcm') + self.m_format.setByteOrder(QAudioFormat.LittleEndian) + self.m_format.setSampleType(QAudioFormat.SignedInt) + + info = QAudioDeviceInfo(QAudioDeviceInfo.defaultOutputDevice()) + if not info.isFormatSupported(self.m_format): + qWarning("Default format not supported - trying to use nearest") + self.m_format = info.nearestFormat(self.m_format) + + self.m_generator = Generator(self.m_format, + self.DurationSeconds * 1000000, self.ToneSampleRateHz, self) + + self.createAudioOutput() + + def createAudioOutput(self): + self.m_audioOutput = QAudioOutput(self.m_device, self.m_format) + self.m_audioOutput.notify.connect(self.notified) + self.m_audioOutput.stateChanged.connect(self.handleStateChanged) + + self.m_generator.start() + self.m_audioOutput.start(self.m_generator) + self.m_volumeSlider.setValue(self.m_audioOutput.volume() * 100) + + def deviceChanged(self, index): + self.m_pullTimer.stop() + self.m_generator.stop() + self.m_audioOutput.stop() + self.m_device = self.m_deviceBox.itemData(index) + + self.createAudioOutput() + + def volumeChanged(self, value): + if self.m_audioOutput is not None: + self.m_audioOutput.setVolume(value / 100.0) + + def notified(self): + qWarning("bytesFree = %d, elapsedUSecs = %d, processedUSecs = %d" % ( + self.m_audioOutput.bytesFree(), + self.m_audioOutput.elapsedUSecs(), + self.m_audioOutput.processedUSecs())) + + def pullTimerExpired(self): + if self.m_audioOutput is not None and self.m_audioOutput.state() != QAudio.StoppedState: + chunks = self.m_audioOutput.bytesFree() // self.m_audioOutput.periodSize() + for _ in range(chunks): + data = self.m_generator.read(self.m_audioOutput.periodSize()) + if data is None or len(data) != self.m_audioOutput.periodSize(): + break + + self.m_output.write(data) + + def toggleMode(self): + self.m_pullTimer.stop() + self.m_audioOutput.stop() + + if self.m_pullMode: + self.m_modeButton.setText(self.PULL_MODE_LABEL) + self.m_output = self.m_audioOutput.start() + self.m_pullMode = False + self.m_pullTimer.start(20) + else: + self.m_modeButton.setText(self.PUSH_MODE_LABEL) + self.m_pullMode = True + self.m_audioOutput.start(self.m_generator) + + self.m_suspendResumeButton.setText(self.SUSPEND_LABEL) + + def toggleSuspendResume(self): + if self.m_audioOutput.state() == QAudio.SuspendedState: + qWarning("status: Suspended, resume()") + self.m_audioOutput.resume() + self.m_suspendResumeButton.setText(self.SUSPEND_LABEL) + elif self.m_audioOutput.state() == QAudio.ActiveState: + qWarning("status: Active, suspend()") + self.m_audioOutput.suspend() + self.m_suspendResumeButton.setText(self.RESUME_LABEL) + elif self.m_audioOutput.state() == QAudio.StoppedState: + qWarning("status: Stopped, resume()") + self.m_audioOutput.resume() + self.m_suspendResumeButton.setText(self.SUSPEND_LABEL) + elif self.m_audioOutput.state() == QAudio.IdleState: + qWarning("status: IdleState") + + stateMap = { + QAudio.ActiveState: "ActiveState", + QAudio.SuspendedState: "SuspendedState", + QAudio.StoppedState: "StoppedState", + QAudio.IdleState: "IdleState"} + + def handleStateChanged(self, state): + qWarning("state = " + self.stateMap.get(state, "Unknown")) + + +if __name__ == '__main__': + + import sys + + app = QApplication(sys.argv) + app.setApplicationName("Audio Output Test") + + audio = AudioTest() + audio.show() + + sys.exit(app.exec_()) diff --git a/examples/multimedia/camera.py b/examples/multimedia/camera.py new file mode 100644 index 0000000..f2469eb --- /dev/null +++ b/examples/multimedia/camera.py @@ -0,0 +1,170 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 Multimedia Camera Example""" + +import os, sys +from PySide2.QtCore import QDate, QDir, QStandardPaths, Qt, QUrl +from PySide2.QtGui import QClipboard, QGuiApplication, QDesktopServices, QIcon +from PySide2.QtGui import QImage, QPixmap +from PySide2.QtWidgets import (QAction, qApp, QApplication, QHBoxLayout, QLabel, + QMainWindow, QPushButton, QTabWidget, QToolBar, QVBoxLayout, QWidget) +from PySide2.QtMultimedia import QCamera, QCameraImageCapture, QCameraInfo +from PySide2.QtMultimediaWidgets import QCameraViewfinder + +class ImageView(QWidget): + def __init__(self, previewImage, fileName): + super(ImageView, self).__init__() + + self.fileName = fileName + + mainLayout = QVBoxLayout(self) + self.imageLabel = QLabel() + self.imageLabel.setPixmap(QPixmap.fromImage(previewImage)) + mainLayout.addWidget(self.imageLabel) + + topLayout = QHBoxLayout() + self.fileNameLabel = QLabel(QDir.toNativeSeparators(fileName)) + self.fileNameLabel.setTextInteractionFlags(Qt.TextBrowserInteraction) + + topLayout.addWidget(self.fileNameLabel) + topLayout.addStretch() + copyButton = QPushButton("Copy") + copyButton.setToolTip("Copy file name to clipboard") + topLayout.addWidget(copyButton) + copyButton.clicked.connect(self.copy) + launchButton = QPushButton("Launch") + launchButton.setToolTip("Launch image viewer") + topLayout.addWidget(launchButton) + launchButton.clicked.connect(self.launch) + mainLayout.addLayout(topLayout) + + def copy(self): + QGuiApplication.clipboard().setText(self.fileNameLabel.text()) + + def launch(self): + QDesktopServices.openUrl(QUrl.fromLocalFile(self.fileName)) + +class MainWindow(QMainWindow): + def __init__(self): + super(MainWindow, self).__init__() + + self.cameraInfo = QCameraInfo.defaultCamera() + self.camera = QCamera(self.cameraInfo) + self.camera.setCaptureMode(QCamera.CaptureStillImage) + self.imageCapture = QCameraImageCapture(self.camera) + self.imageCapture.imageCaptured.connect(self.imageCaptured) + self.imageCapture.imageSaved.connect(self.imageSaved) + self.currentPreview = QImage() + + toolBar = QToolBar() + self.addToolBar(toolBar) + + fileMenu = self.menuBar().addMenu("&File") + shutterIcon = QIcon(os.path.join(os.path.dirname(__file__), + "shutter.svg")) + self.takePictureAction = QAction(shutterIcon, "&Take Picture", self, + shortcut="Ctrl+T", + triggered=self.takePicture) + self.takePictureAction.setToolTip("Take Picture") + fileMenu.addAction(self.takePictureAction) + toolBar.addAction(self.takePictureAction) + + exitAction = QAction(QIcon.fromTheme("application-exit"), "E&xit", + self, shortcut="Ctrl+Q", triggered=self.close) + fileMenu.addAction(exitAction) + + aboutMenu = self.menuBar().addMenu("&About") + aboutQtAction = QAction("About &Qt", self, triggered=qApp.aboutQt) + aboutMenu.addAction(aboutQtAction) + + self.tabWidget = QTabWidget() + self.setCentralWidget(self.tabWidget) + + self.cameraViewfinder = QCameraViewfinder() + self.camera.setViewfinder(self.cameraViewfinder) + self.tabWidget.addTab(self.cameraViewfinder, "Viewfinder") + + if self.camera.status() != QCamera.UnavailableStatus: + name = self.cameraInfo.description() + self.setWindowTitle("PySide2 Camera Example (" + name + ")") + self.statusBar().showMessage("Starting: '" + name + "'", 5000) + self.camera.start() + else: + self.setWindowTitle("PySide2 Camera Example") + self.takePictureAction.setEnabled(False) + self.statusBar().showMessage("Camera unavailable", 5000) + + def nextImageFileName(self): + picturesLocation = QStandardPaths.writableLocation(QStandardPaths.PicturesLocation) + dateString = QDate.currentDate().toString("yyyyMMdd") + pattern = picturesLocation + "/pyside2_camera_" + dateString + "_{:03d}.jpg" + n = 1 + while True: + result = pattern.format(n) + if not os.path.exists(result): + return result + n = n + 1 + return None + + def takePicture(self): + self.currentPreview = QImage() + self.camera.searchAndLock() + self.imageCapture.capture(self.nextImageFileName()) + self.camera.unlock() + + def imageCaptured(self, id, previewImage): + self.currentPreview = previewImage + + def imageSaved(self, id, fileName): + index = self.tabWidget.count() + imageView = ImageView(self.currentPreview, fileName) + self.tabWidget.addTab(imageView, "Capture #{}".format(index)) + self.tabWidget.setCurrentIndex(index) + +if __name__ == '__main__': + app = QApplication(sys.argv) + mainWin = MainWindow() + availableGeometry = app.desktop().availableGeometry(mainWin) + mainWin.resize(availableGeometry.width() / 3, availableGeometry.height() / 2) + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/multimedia/player.py b/examples/multimedia/player.py new file mode 100644 index 0000000..3e7d9f2 --- /dev/null +++ b/examples/multimedia/player.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 Multimedia player example""" + +import sys +from PySide2.QtCore import SLOT, QStandardPaths, Qt +from PySide2.QtGui import QIcon, QKeySequence +from PySide2.QtWidgets import (QAction, qApp, QApplication, QDialog, QFileDialog, + QMainWindow, QMenu, QMenuBar, QSlider, QStyle, QToolBar) +from PySide2.QtMultimedia import QMediaPlayer, QMediaPlaylist +from PySide2.QtMultimediaWidgets import QVideoWidget + +class MainWindow(QMainWindow): + + def __init__(self): + super(MainWindow, self).__init__() + + self.playlist = QMediaPlaylist() + self.player = QMediaPlayer() + + toolBar = QToolBar() + self.addToolBar(toolBar) + + fileMenu = self.menuBar().addMenu("&File") + openAction = QAction(QIcon.fromTheme("document-open"), + "&Open...", self, shortcut=QKeySequence.Open, + triggered=self.open) + fileMenu.addAction(openAction) + exitAction = QAction(QIcon.fromTheme("application-exit"), "E&xit", + self, shortcut="Ctrl+Q", triggered=self.close) + fileMenu.addAction(exitAction) + + playMenu = self.menuBar().addMenu("&Play") + playIcon = self.style().standardIcon(QStyle.SP_MediaPlay) + self.playAction = toolBar.addAction(playIcon, "Play") + self.playAction.triggered.connect(self.player.play) + playMenu.addAction(self.playAction) + + previousIcon = self.style().standardIcon(QStyle.SP_MediaSkipBackward) + self.previousAction = toolBar.addAction(previousIcon, "Previous") + self.previousAction.triggered.connect(self.previousClicked) + playMenu.addAction(self.previousAction) + + pauseIcon = self.style().standardIcon(QStyle.SP_MediaPause) + self.pauseAction = toolBar.addAction(pauseIcon, "Pause") + self.pauseAction.triggered.connect(self.player.pause) + playMenu.addAction(self.pauseAction) + + nextIcon = self.style().standardIcon(QStyle.SP_MediaSkipForward) + self.nextAction = toolBar.addAction(nextIcon, "Next") + self.nextAction.triggered.connect(self.playlist.next) + playMenu.addAction(self.nextAction) + + stopIcon = self.style().standardIcon(QStyle.SP_MediaStop) + self.stopAction = toolBar.addAction(stopIcon, "Stop") + self.stopAction.triggered.connect(self.player.stop) + playMenu.addAction(self.stopAction) + + self.volumeSlider = QSlider() + self.volumeSlider.setOrientation(Qt.Horizontal) + self.volumeSlider.setMinimum(0) + self.volumeSlider.setMaximum(100) + self.volumeSlider.setFixedWidth(app.desktop().availableGeometry(self).width() / 10) + self.volumeSlider.setValue(self.player.volume()) + self.volumeSlider.setTickInterval(10) + self.volumeSlider.setTickPosition(QSlider.TicksBelow) + self.volumeSlider.setToolTip("Volume") + self.volumeSlider.valueChanged.connect(self.player.setVolume) + toolBar.addWidget(self.volumeSlider) + + aboutMenu = self.menuBar().addMenu("&About") + aboutQtAct = QAction("About &Qt", self, triggered=qApp.aboutQt) + aboutMenu.addAction(aboutQtAct) + + self.videoWidget = QVideoWidget() + self.setCentralWidget(self.videoWidget) + self.player.setPlaylist(self.playlist) + self.player.stateChanged.connect(self.updateButtons) + self.player.setVideoOutput(self.videoWidget) + + self.updateButtons(self.player.state()) + + def open(self): + fileDialog = QFileDialog(self) + supportedMimeTypes = QMediaPlayer.supportedMimeTypes() + if not supportedMimeTypes: + supportedMimeTypes.append("video/x-msvideo") # AVI + fileDialog.setMimeTypeFilters(supportedMimeTypes) + moviesLocation = QStandardPaths.writableLocation(QStandardPaths.MoviesLocation) + fileDialog.setDirectory(moviesLocation) + if fileDialog.exec_() == QDialog.Accepted: + self.playlist.addMedia(fileDialog.selectedUrls()[0]) + self.player.play() + + def previousClicked(self): + # Go to previous track if we are within the first 5 seconds of playback + # Otherwise, seek to the beginning. + if self.player.position() <= 5000: + self.playlist.previous() + else: + player.setPosition(0) + + def updateButtons(self, state): + mediaCount = self.playlist.mediaCount() + self.playAction.setEnabled(mediaCount > 0 + and state != QMediaPlayer.PlayingState) + self.pauseAction.setEnabled(state == QMediaPlayer.PlayingState) + self.stopAction.setEnabled(state != QMediaPlayer.StoppedState) + self.previousAction.setEnabled(self.player.position() > 0) + self.nextAction.setEnabled(mediaCount > 1) + +if __name__ == '__main__': + app = QApplication(sys.argv) + mainWin = MainWindow() + availableGeometry = app.desktop().availableGeometry(mainWin) + mainWin.resize(availableGeometry.width() / 3, availableGeometry.height() / 2) + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/multimedia/shutter.svg b/examples/multimedia/shutter.svg new file mode 100644 index 0000000..1849336 --- /dev/null +++ b/examples/multimedia/shutter.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/examples/network/blockingfortuneclient.py b/examples/network/blockingfortuneclient.py new file mode 100644 index 0000000..650bde9 --- /dev/null +++ b/examples/network/blockingfortuneclient.py @@ -0,0 +1,225 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the network/blockingfortunclient example from Qt v5.x, originating from PyQt""" + +from PySide2.QtCore import (Signal, QDataStream, QMutex, QMutexLocker, + QThread, QWaitCondition) +from PySide2.QtGui import QIntValidator +from PySide2.QtWidgets import (QApplication, QDialogButtonBox, QGridLayout, + QLabel, QLineEdit, QMessageBox, QPushButton, QWidget) +from PySide2.QtNetwork import (QAbstractSocket, QHostAddress, QNetworkInterface, + QTcpSocket) + + +class FortuneThread(QThread): + newFortune = Signal(str) + + error = Signal(int, str) + + def __init__(self, parent=None): + super(FortuneThread, self).__init__(parent) + + self.quit = False + self.hostName = '' + self.cond = QWaitCondition() + self.mutex = QMutex() + self.port = 0 + + def __del__(self): + self.mutex.lock() + self.quit = True + self.cond.wakeOne() + self.mutex.unlock() + self.wait() + + def requestNewFortune(self, hostname, port): + locker = QMutexLocker(self.mutex) + self.hostName = hostname + self.port = port + if not self.isRunning(): + self.start() + else: + self.cond.wakeOne() + + def run(self): + self.mutex.lock() + serverName = self.hostName + serverPort = self.port + self.mutex.unlock() + + while not self.quit: + Timeout = 5 * 1000 + + socket = QTcpSocket() + socket.connectToHost(serverName, serverPort) + + if not socket.waitForConnected(Timeout): + self.error.emit(socket.error(), socket.errorString()) + return + + while socket.bytesAvailable() < 2: + if not socket.waitForReadyRead(Timeout): + self.error.emit(socket.error(), socket.errorString()) + return + + instr = QDataStream(socket) + instr.setVersion(QDataStream.Qt_4_0) + blockSize = instr.readUInt16() + + while socket.bytesAvailable() < blockSize: + if not socket.waitForReadyRead(Timeout): + self.error.emit(socket.error(), socket.errorString()) + return + + self.mutex.lock() + fortune = instr.readQString() + self.newFortune.emit(fortune) + + self.cond.wait(self.mutex) + serverName = self.hostName + serverPort = self.port + self.mutex.unlock() + + +class BlockingClient(QWidget): + def __init__(self, parent=None): + super(BlockingClient, self).__init__(parent) + + self.thread = FortuneThread() + self.currentFortune = '' + + hostLabel = QLabel("&Server name:") + portLabel = QLabel("S&erver port:") + + for ipAddress in QNetworkInterface.allAddresses(): + if ipAddress != QHostAddress.LocalHost and ipAddress.toIPv4Address() != 0: + break + else: + ipAddress = QHostAddress(QHostAddress.LocalHost) + + ipAddress = ipAddress.toString() + + self.hostLineEdit = QLineEdit(ipAddress) + self.portLineEdit = QLineEdit() + self.portLineEdit.setValidator(QIntValidator(1, 65535, self)) + + hostLabel.setBuddy(self.hostLineEdit) + portLabel.setBuddy(self.portLineEdit) + + self.statusLabel = QLabel( + "This example requires that you run the Fortune Server example as well.") + self.statusLabel.setWordWrap(True) + + self.getFortuneButton = QPushButton("Get Fortune") + self.getFortuneButton.setDefault(True) + self.getFortuneButton.setEnabled(False) + + quitButton = QPushButton("Quit") + + buttonBox = QDialogButtonBox() + buttonBox.addButton(self.getFortuneButton, QDialogButtonBox.ActionRole) + buttonBox.addButton(quitButton, QDialogButtonBox.RejectRole) + + self.getFortuneButton.clicked.connect(self.requestNewFortune) + quitButton.clicked.connect(self.close) + self.hostLineEdit.textChanged.connect(self.enableGetFortuneButton) + self.portLineEdit.textChanged.connect(self.enableGetFortuneButton) + self.thread.newFortune.connect(self.showFortune) + self.thread.error.connect(self.displayError) + + mainLayout = QGridLayout() + mainLayout.addWidget(hostLabel, 0, 0) + mainLayout.addWidget(self.hostLineEdit, 0, 1) + mainLayout.addWidget(portLabel, 1, 0) + mainLayout.addWidget(self.portLineEdit, 1, 1) + mainLayout.addWidget(self.statusLabel, 2, 0, 1, 2) + mainLayout.addWidget(buttonBox, 3, 0, 1, 2) + self.setLayout(mainLayout) + + self.setWindowTitle("Blocking Fortune Client") + self.portLineEdit.setFocus() + + def requestNewFortune(self): + self.getFortuneButton.setEnabled(False) + self.thread.requestNewFortune(self.hostLineEdit.text(), + int(self.portLineEdit.text())) + + def showFortune(self, nextFortune): + if nextFortune == self.currentFortune: + self.requestNewFortune() + return + + self.currentFortune = nextFortune + self.statusLabel.setText(self.currentFortune) + self.getFortuneButton.setEnabled(True) + + def displayError(self, socketError, message): + if socketError == QAbstractSocket.HostNotFoundError: + QMessageBox.information(self, "Blocking Fortune Client", + "The host was not found. Please check the host and port " + "settings.") + elif socketError == QAbstractSocket.ConnectionRefusedError: + QMessageBox.information(self, "Blocking Fortune Client", + "The connection was refused by the peer. Make sure the " + "fortune server is running, and check that the host name " + "and port settings are correct.") + else: + QMessageBox.information(self, "Blocking Fortune Client", + "The following error occurred: %s." % message) + + self.getFortuneButton.setEnabled(True) + + def enableGetFortuneButton(self): + self.getFortuneButton.setEnabled(self.hostLineEdit.text() != '' and + self.portLineEdit.text() != '') + + +if __name__ == '__main__': + + import sys + + app = QApplication(sys.argv) + client = BlockingClient() + client.show() + sys.exit(app.exec_()) diff --git a/examples/network/fortuneclient.py b/examples/network/fortuneclient.py new file mode 100755 index 0000000..00ae0f7 --- /dev/null +++ b/examples/network/fortuneclient.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the network/fortuneclient example from Qt v5.x""" + +from PySide2 import QtCore, QtGui, QtWidgets, QtNetwork + + +class Client(QtWidgets.QDialog): + def __init__(self, parent=None): + super(Client, self).__init__(parent) + + self.blockSize = 0 + self.currentFortune = '' + + hostLabel = QtWidgets.QLabel("&Server name:") + portLabel = QtWidgets.QLabel("S&erver port:") + + self.hostLineEdit = QtWidgets.QLineEdit('Localhost') + self.portLineEdit = QtWidgets.QLineEdit() + self.portLineEdit.setValidator(QtGui.QIntValidator(1, 65535, self)) + + hostLabel.setBuddy(self.hostLineEdit) + portLabel.setBuddy(self.portLineEdit) + + self.statusLabel = QtWidgets.QLabel("This examples requires that you run " + "the Fortune Server example as well.") + + self.getFortuneButton = QtWidgets.QPushButton("Get Fortune") + self.getFortuneButton.setDefault(True) + self.getFortuneButton.setEnabled(False) + + quitButton = QtWidgets.QPushButton("Quit") + + buttonBox = QtWidgets.QDialogButtonBox() + buttonBox.addButton(self.getFortuneButton, + QtWidgets.QDialogButtonBox.ActionRole) + buttonBox.addButton(quitButton, QtWidgets.QDialogButtonBox.RejectRole) + + self.tcpSocket = QtNetwork.QTcpSocket(self) + + self.hostLineEdit.textChanged.connect(self.enableGetFortuneButton) + self.portLineEdit.textChanged.connect(self.enableGetFortuneButton) + self.getFortuneButton.clicked.connect(self.requestNewFortune) + quitButton.clicked.connect(self.close) + self.tcpSocket.readyRead.connect(self.readFortune) + self.tcpSocket.error.connect(self.displayError) + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(hostLabel, 0, 0) + mainLayout.addWidget(self.hostLineEdit, 0, 1) + mainLayout.addWidget(portLabel, 1, 0) + mainLayout.addWidget(self.portLineEdit, 1, 1) + mainLayout.addWidget(self.statusLabel, 2, 0, 1, 2) + mainLayout.addWidget(buttonBox, 3, 0, 1, 2) + self.setLayout(mainLayout) + + self.setWindowTitle("Fortune Client") + self.portLineEdit.setFocus() + + def requestNewFortune(self): + self.getFortuneButton.setEnabled(False) + self.blockSize = 0 + self.tcpSocket.abort() + self.tcpSocket.connectToHost(self.hostLineEdit.text(), + int(self.portLineEdit.text())) + + def readFortune(self): + instr = QtCore.QDataStream(self.tcpSocket) + instr.setVersion(QtCore.QDataStream.Qt_4_0) + + if self.blockSize == 0: + if self.tcpSocket.bytesAvailable() < 2: + return + + self.blockSize = instr.readUInt16() + + if self.tcpSocket.bytesAvailable() < self.blockSize: + return + + nextFortune = instr.readString() + + try: + # Python v3. + nextFortune = str(nextFortune, encoding='ascii') + except TypeError: + # Python v2. + pass + + if nextFortune == self.currentFortune: + QtCore.QTimer.singleShot(0, self.requestNewFortune) + return + + self.currentFortune = nextFortune + self.statusLabel.setText(self.currentFortune) + self.getFortuneButton.setEnabled(True) + + def displayError(self, socketError): + if socketError == QtNetwork.QAbstractSocket.RemoteHostClosedError: + pass + elif socketError == QtNetwork.QAbstractSocket.HostNotFoundError: + QtWidgets.QMessageBox.information(self, "Fortune Client", + "The host was not found. Please check the host name and " + "port settings.") + elif socketError == QtNetwork.QAbstractSocket.ConnectionRefusedError: + QtWidgets.QMessageBox.information(self, "Fortune Client", + "The connection was refused by the peer. Make sure the " + "fortune server is running, and check that the host name " + "and port settings are correct.") + else: + QtWidgets.QMessageBox.information(self, "Fortune Client", + "The following error occurred: %s." % self.tcpSocket.errorString()) + + self.getFortuneButton.setEnabled(True) + + def enableGetFortuneButton(self): + self.getFortuneButton.setEnabled(bool(self.hostLineEdit.text() and + self.portLineEdit.text())) + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + client = Client() + client.show() + sys.exit(client.exec_()) diff --git a/examples/network/fortuneserver.py b/examples/network/fortuneserver.py new file mode 100755 index 0000000..692c5bd --- /dev/null +++ b/examples/network/fortuneserver.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the network/fortuneserver example from Qt v5.x""" + +import random + +from PySide2 import QtCore, QtGui, QtWidgets, QtNetwork + + +class Server(QtWidgets.QDialog): + def __init__(self, parent=None): + super(Server, self).__init__(parent) + + statusLabel = QtWidgets.QLabel() + quitButton = QtWidgets.QPushButton("Quit") + quitButton.setAutoDefault(False) + + self.tcpServer = QtNetwork.QTcpServer(self) + if not self.tcpServer.listen(): + QtWidgets.QMessageBox.critical(self, "Fortune Server", + "Unable to start the server: %s." % self.tcpServer.errorString()) + self.close() + return + + statusLabel.setText("The server is running on port %d.\nRun the " + "Fortune Client example now." % self.tcpServer.serverPort()) + + self.fortunes = ( + "You've been leading a dog's life. Stay off the furniture.", + "You've got to think about tomorrow.", + "You will be surprised by a loud noise.", + "You will feel hungry again in another hour.", + "You might have mail.", + "You cannot kill time without injuring eternity.", + "Computers are not intelligent. They only think they are.") + + quitButton.clicked.connect(self.close) + self.tcpServer.newConnection.connect(self.sendFortune) + + buttonLayout = QtWidgets.QHBoxLayout() + buttonLayout.addStretch(1) + buttonLayout.addWidget(quitButton) + buttonLayout.addStretch(1) + + mainLayout = QtWidgets.QVBoxLayout() + mainLayout.addWidget(statusLabel) + mainLayout.addLayout(buttonLayout) + self.setLayout(mainLayout) + + self.setWindowTitle("Fortune Server") + + def sendFortune(self): + block = QtCore.QByteArray() + out = QtCore.QDataStream(block, QtCore.QIODevice.WriteOnly) + out.setVersion(QtCore.QDataStream.Qt_4_0) + out.writeUInt16(0) + fortune = self.fortunes[random.randint(0, len(self.fortunes) - 1)] + + out.writeString(fortune) + out.device().seek(0) + out.writeUInt16(block.size() - 2) + + clientConnection = self.tcpServer.nextPendingConnection() + clientConnection.disconnected.connect(clientConnection.deleteLater) + + clientConnection.write(block) + clientConnection.disconnectFromHost() + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + server = Server() + random.seed(None) + sys.exit(server.exec_()) diff --git a/examples/network/threadedfortuneserver.py b/examples/network/threadedfortuneserver.py new file mode 100755 index 0000000..63f0c55 --- /dev/null +++ b/examples/network/threadedfortuneserver.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the network/threadedfortuneserver example from Qt v5.x, originating from PyQt""" + +import random + +from PySide2.QtCore import (Signal, QByteArray, QDataStream, QIODevice, + QThread, Qt) +from PySide2.QtWidgets import (QApplication, QDialog, QHBoxLayout, QLabel, + QMessageBox, QPushButton, QVBoxLayout) +from PySide2.QtNetwork import (QHostAddress, QNetworkInterface, QTcpServer, + QTcpSocket) + + +class FortuneThread(QThread): + error = Signal(QTcpSocket.SocketError) + + def __init__(self, socketDescriptor, fortune, parent): + super(FortuneThread, self).__init__(parent) + + self.socketDescriptor = socketDescriptor + self.text = fortune + + def run(self): + tcpSocket = QTcpSocket() + if not tcpSocket.setSocketDescriptor(self.socketDescriptor): + self.error.emit(tcpSocket.error()) + return + + block = QByteArray() + outstr = QDataStream(block, QIODevice.WriteOnly) + outstr.setVersion(QDataStream.Qt_4_0) + outstr.writeUInt16(0) + outstr.writeQString(self.text) + outstr.device().seek(0) + outstr.writeUInt16(block.size() - 2) + + tcpSocket.write(block) + tcpSocket.disconnectFromHost() + tcpSocket.waitForDisconnected() + + +class FortuneServer(QTcpServer): + fortunes = ( + "You've been leading a dog's life. Stay off the furniture.", + "You've got to think about tomorrow.", + "You will be surprised by a loud noise.", + "You will feel hungry again in another hour.", + "You might have mail.", + "You cannot kill time without injuring eternity.", + "Computers are not intelligent. They only think they are.") + + def incomingConnection(self, socketDescriptor): + fortune = self.fortunes[random.randint(0, len(self.fortunes) - 1)] + + thread = FortuneThread(socketDescriptor, fortune, self) + thread.finished.connect(thread.deleteLater) + thread.start() + + +class Dialog(QDialog): + def __init__(self, parent=None): + super(Dialog, self).__init__(parent) + + self.server = FortuneServer() + + statusLabel = QLabel() + statusLabel.setTextInteractionFlags(Qt.TextBrowserInteraction) + statusLabel.setWordWrap(True) + quitButton = QPushButton("Quit") + quitButton.setAutoDefault(False) + + if not self.server.listen(): + QMessageBox.critical(self, "Threaded Fortune Server", + "Unable to start the server: %s." % self.server.errorString()) + self.close() + return + + for ipAddress in QNetworkInterface.allAddresses(): + if ipAddress != QHostAddress.LocalHost and ipAddress.toIPv4Address() != 0: + break + else: + ipAddress = QHostAddress(QHostAddress.LocalHost) + + ipAddress = ipAddress.toString() + + statusLabel.setText("The server is running on\n\nIP: %s\nport: %d\n\n" + "Run the Fortune Client example now." % (ipAddress, self.server.serverPort())) + + quitButton.clicked.connect(self.close) + + buttonLayout = QHBoxLayout() + buttonLayout.addStretch(1) + buttonLayout.addWidget(quitButton) + buttonLayout.addStretch(1) + + mainLayout = QVBoxLayout() + mainLayout.addWidget(statusLabel) + mainLayout.addLayout(buttonLayout) + self.setLayout(mainLayout) + + self.setWindowTitle("Threaded Fortune Server") + + +if __name__ == '__main__': + + import sys + + app = QApplication(sys.argv) + dialog = Dialog() + dialog.show() + sys.exit(dialog.exec_()) diff --git a/examples/opengl/2dpainting.py b/examples/opengl/2dpainting.py new file mode 100755 index 0000000..9965c02 --- /dev/null +++ b/examples/opengl/2dpainting.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +"""PySide2 port of the opengl/legacy/2dpainting example from Qt v5.x""" + +import sys +import math +from PySide2.QtCore import * +from PySide2.QtGui import * +from PySide2.QtWidgets import * +from PySide2.QtOpenGL import * + +try: + from OpenGL import GL +except ImportError: + app = QApplication(sys.argv) + messageBox = QMessageBox(QMessageBox.Critical, "OpenGL 2dpainting", + "PyOpenGL must be installed to run this example.", + QMessageBox.Close) + messageBox.setDetailedText("Run:\npip install PyOpenGL PyOpenGL_accelerate") + messageBox.exec_() + sys.exit(1) + + +class Helper: + def __init__(self): + gradient = QLinearGradient(QPointF(50, -20), QPointF(80, 20)) + gradient.setColorAt(0.0, Qt.white) + gradient.setColorAt(1.0, QColor(0xa6, 0xce, 0x39)) + + self.background = QBrush(QColor(64, 32, 64)) + self.circleBrush = QBrush(gradient) + self.circlePen = QPen(Qt.black) + self.circlePen.setWidth(1) + self.textPen = QPen(Qt.white) + self.textFont = QFont() + self.textFont.setPixelSize(50) + + def paint(self, painter, event, elapsed): + painter.fillRect(event.rect(), self.background) + painter.translate(100, 100) + + painter.save() + painter.setBrush(self.circleBrush) + painter.setPen(self.circlePen) + painter.rotate(elapsed * 0.030) + + r = elapsed/1000.0 + n = 30 + for i in range(n): + painter.rotate(30) + radius = 0 + 120.0*((i+r)/n) + circleRadius = 1 + ((i+r)/n)*20 + painter.drawEllipse(QRectF(radius, -circleRadius, + circleRadius*2, circleRadius*2)) + + painter.restore() + + painter.setPen(self.textPen) + painter.setFont(self.textFont) + painter.drawText(QRect(-50, -50, 100, 100), Qt.AlignCenter, "Qt") + + +class Widget(QWidget): + def __init__(self, helper, parent = None): + QWidget.__init__(self, parent) + + self.helper = helper + self.elapsed = 0 + self.setFixedSize(200, 200) + + def animate(self): + self.elapsed = (self.elapsed + self.sender().interval()) % 1000 + self.repaint() + + def paintEvent(self, event): + painter = QPainter() + painter.begin(self) + painter.setRenderHint(QPainter.Antialiasing) + self.helper.paint(painter, event, self.elapsed) + painter.end() + + +class GLWidget(QGLWidget): + def __init__(self, helper, parent = None): + QGLWidget.__init__(self, QGLFormat(QGL.SampleBuffers), parent) + + self.helper = helper + self.elapsed = 0 + self.setFixedSize(200, 200) + + def animate(self): + self.elapsed = (self.elapsed + self.sender().interval()) % 1000 + self.repaint() + + def paintEvent(self, event): + painter = QPainter() + painter.begin(self) + self.helper.paint(painter, event, self.elapsed) + painter.end() + + +class Window(QWidget): + def __init__(self, parent = None): + QWidget.__init__(self, parent) + + helper = Helper() + native = Widget(helper, self) + openGL = GLWidget(helper, self) + nativeLabel = QLabel(self.tr("Native")) + nativeLabel.setAlignment(Qt.AlignHCenter) + openGLLabel = QLabel(self.tr("OpenGL")) + openGLLabel.setAlignment(Qt.AlignHCenter) + + layout = QGridLayout() + layout.addWidget(native, 0, 0) + layout.addWidget(openGL, 0, 1) + layout.addWidget(nativeLabel, 1, 0) + layout.addWidget(openGLLabel, 1, 1) + self.setLayout(layout) + + timer = QTimer(self) + self.connect(timer, SIGNAL("timeout()"), native.animate) + self.connect(timer, SIGNAL("timeout()"), openGL.animate) + timer.start(50) + + self.setWindowTitle(self.tr("2D Painting on Native and OpenGL Widgets")) + + +if __name__ == '__main__': + app = QApplication(sys.argv) + window = Window() + window.show() + sys.exit(app.exec_()) diff --git a/examples/opengl/contextinfo.py b/examples/opengl/contextinfo.py new file mode 100644 index 0000000..9cd2296 --- /dev/null +++ b/examples/opengl/contextinfo.py @@ -0,0 +1,251 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the opengl/contextinfo example from Qt v5.x""" + +import numpy +import sys + +from PySide2.QtCore import QLibraryInfo, QSize, QTimer, Qt +from PySide2.QtGui import (QMatrix4x4, QOpenGLBuffer, QOpenGLContext, QOpenGLShader, + QOpenGLShaderProgram, QOpenGLVertexArrayObject, QSurfaceFormat, QWindow) +from PySide2.QtWidgets import (QApplication, QHBoxLayout, QMessageBox, QPlainTextEdit, + QWidget) +from PySide2.support import VoidPtr +try: + from OpenGL import GL +except ImportError: + app = QApplication(sys.argv) + messageBox = QMessageBox(QMessageBox.Critical, "ContextInfo", + "PyOpenGL must be installed to run this example.", + QMessageBox.Close) + messageBox.setDetailedText("Run:\npip install PyOpenGL PyOpenGL_accelerate") + messageBox.exec_() + sys.exit(1) + +vertexShaderSource110 = """ +#version 110 +attribute highp vec4 posAttr; +attribute lowp vec4 colAttr; +varying lowp vec4 col; +uniform highp mat4 matrix; +void main() { + col = colAttr; + gl_Position = matrix * posAttr; +} +""" + +fragmentShaderSource110 = """ +#version 110 +varying lowp vec4 col; +void main() { + gl_FragColor = col; +} +""" + +vertexShaderSource = """ +#version 150 +in vec4 posAttr; +in vec4 colAttr; +out vec4 col; +uniform mat4 matrix; +void main() { + col = colAttr; + gl_Position = matrix * posAttr; +} +""" + +fragmentShaderSource = """ +#version 150 +in vec4 col; +out vec4 fragColor; +void main() { + fragColor = col; +} +""" + +vertices = numpy.array([0, 0.707, -0.5, -0.5, 0.5, -0.5], dtype = numpy.float32) +colors = numpy.array([1, 0, 0, 0, 1, 0, 0, 0, 1], dtype = numpy.float32) + +class RenderWindow(QWindow): + def __init__(self, format): + super(RenderWindow, self).__init__() + self.setSurfaceType(QWindow.OpenGLSurface) + self.setFormat(format) + self.context = QOpenGLContext(self) + self.context.setFormat(self.requestedFormat()) + if not self.context.create(): + raise Exception("Unable to create GL context") + self.program = None + self.timer = None + self.angle = 0 + + def initGl(self): + self.program = QOpenGLShaderProgram(self) + self.vao = QOpenGLVertexArrayObject() + self.vbo = QOpenGLBuffer() + + format = self.context.format() + useNewStyleShader = format.profile() == QSurfaceFormat.CoreProfile + # Try to handle 3.0 & 3.1 that do not have the core/compatibility profile + # concept 3.2+ has. This may still fail since version 150 (3.2) is + # specified in the sources but it's worth a try. + if (format.renderableType() == QSurfaceFormat.OpenGL and format.majorVersion() == 3 + and format.minorVersion() <= 1): + useNewStyleShader = not format.testOption(QSurfaceFormat.DeprecatedFunctions) + + vertexShader = vertexShaderSource if useNewStyleShader else vertexShaderSource110 + fragmentShader = fragmentShaderSource if useNewStyleShader else fragmentShaderSource110 + if not self.program.addShaderFromSourceCode(QOpenGLShader.Vertex, vertexShader): + raise Exception("Vertex shader could not be added: {} ({})".format(self.program.log(), vertexShader)) + if not self.program.addShaderFromSourceCode(QOpenGLShader.Fragment, fragmentShader): + raise Exception("Fragment shader could not be added: {} ({})".format(self.program.log(), fragmentShader)) + if not self.program.link(): + raise Exception("Could not link shaders: {}".format(self.program.log())) + + self.posAttr = self.program.attributeLocation("posAttr") + self.colAttr = self.program.attributeLocation("colAttr") + self.matrixUniform = self.program.uniformLocation("matrix") + + self.vbo.create() + self.vbo.bind() + self.verticesData = vertices.tobytes() + self.colorsData = colors.tobytes() + verticesSize = 4 * vertices.size + colorsSize = 4 * colors.size + self.vbo.allocate(VoidPtr(self.verticesData), verticesSize + colorsSize) + self.vbo.write(verticesSize, VoidPtr(self.colorsData), colorsSize) + self.vbo.release() + + vaoBinder = QOpenGLVertexArrayObject.Binder(self.vao) + if self.vao.isCreated(): # have VAO support, use it + self.setupVertexAttribs() + + def setupVertexAttribs(self): + self.vbo.bind() + self.program.setAttributeBuffer(self.posAttr, GL.GL_FLOAT, 0, 2) + self.program.setAttributeBuffer(self.colAttr, GL.GL_FLOAT, 4 * vertices.size, 3) + self.program.enableAttributeArray(self.posAttr) + self.program.enableAttributeArray(self.colAttr) + self.vbo.release() + + def exposeEvent(self, event): + if self.isExposed(): + self.render() + if self.timer is None: + self.timer = QTimer(self) + self.timer.timeout.connect(self.slotTimer) + self.timer.start(10) + + def render(self): + if not self.context.makeCurrent(self): + raise Exception("makeCurrent() failed") + functions = self.context.functions() + if self.program is None: + functions.glEnable(GL.GL_DEPTH_TEST) + functions.glClearColor(0, 0, 0, 1) + self.initGl() + + functions.glViewport(0, 0, self.width(), self.height()) + functions.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT) + + self.program.bind() + matrix = QMatrix4x4() + matrix.perspective(60, 4 / 3, 0.1, 100) + matrix.translate(0, 0, -2) + matrix.rotate(self.angle, 0, 1, 0) + self.program.setUniformValue(self.matrixUniform, matrix) + + if self.vao.isCreated(): + self.vao.bind() + else: # no VAO support, set the vertex attribute arrays now + self.setupVertexAttribs() + + functions.glDrawArrays(GL.GL_TRIANGLES, 0, 3) + + self.vao.release() + self.program.release() + + # swapInterval is 1 by default which means that swapBuffers() will (hopefully) block + # and wait for vsync. + self.context.swapBuffers(self) + self.context.doneCurrent() + + def slotTimer(self): + self.render() + self.angle += 1 + + def glInfo(self): + if not self.context.makeCurrent(self): + raise Exception("makeCurrent() failed") + functions = self.context.functions() + text = "Vendor: {}\nRenderer: {}\nVersion: {}\nShading language: {}".format( + functions.glGetString(GL.GL_VENDOR), functions.glGetString(GL.GL_RENDERER), + functions.glGetString(GL.GL_VERSION), + functions.glGetString(GL.GL_SHADING_LANGUAGE_VERSION)) + self.context.doneCurrent() + return text + +class MainWindow(QWidget): + def __init__(self): + super(MainWindow, self).__init__() + hBoxLayout = QHBoxLayout(self) + self.plainTextEdit = QPlainTextEdit() + self.plainTextEdit.setMinimumWidth(400) + self.plainTextEdit.setReadOnly(True) + hBoxLayout.addWidget(self.plainTextEdit) + self.renderWindow = RenderWindow(QSurfaceFormat()) + container = QWidget.createWindowContainer(self.renderWindow) + container.setMinimumSize(QSize(400, 400)) + hBoxLayout.addWidget(container) + + def updateDescription(self): + text = "{}\n\nPython {}\n\n{}".format(QLibraryInfo.build(), sys.version, + self.renderWindow.glInfo()) + self.plainTextEdit.setPlainText(text) + +if __name__ == '__main__': + app = QApplication(sys.argv) + mainWindow = MainWindow() + mainWindow.show() + mainWindow.updateDescription() + sys.exit(app.exec_()) diff --git a/examples/opengl/grabber.py b/examples/opengl/grabber.py new file mode 100644 index 0000000..2c2836a --- /dev/null +++ b/examples/opengl/grabber.py @@ -0,0 +1,436 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +"""PySide2 port of the opengl/legacy/grabber example from Qt v5.x""" + +import sys +import math + +from PySide2 import QtCore, QtGui, QtWidgets, QtOpenGL + +try: + from OpenGL.GL import * +except ImportError: + app = QtWidgets.QApplication(sys.argv) + messageBox = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Critical, "OpenGL grabber", + "PyOpenGL must be installed to run this example.", + QtWidgets.QMessageBox.Close) + messageBox.setDetailedText("Run:\npip install PyOpenGL PyOpenGL_accelerate") + messageBox.exec_() + sys.exit(1) + + +class GLWidget(QtOpenGL.QGLWidget): + xRotationChanged = QtCore.Signal(int) + yRotationChanged = QtCore.Signal(int) + zRotationChanged = QtCore.Signal(int) + + def __init__(self, parent=None): + super(GLWidget, self).__init__(parent) + + self.gear1 = 0 + self.gear2 = 0 + self.gear3 = 0 + self.xRot = 0 + self.yRot = 0 + self.zRot = 0 + self.gear1Rot = 0 + + timer = QtCore.QTimer(self) + timer.timeout.connect(self.advanceGears) + timer.start(20) + + def freeResources(self): + self.makeCurrent() + glDeleteLists(self.gear1, 1) + glDeleteLists(self.gear2, 1) + glDeleteLists(self.gear3, 1) + + def setXRotation(self, angle): + self.normalizeAngle(angle) + + if angle != self.xRot: + self.xRot = angle + self.xRotationChanged.emit(angle) + self.updateGL() + + def setYRotation(self, angle): + self.normalizeAngle(angle) + + if angle != self.yRot: + self.yRot = angle + self.yRotationChanged.emit(angle) + self.updateGL() + + def setZRotation(self, angle): + self.normalizeAngle(angle) + + if angle != self.zRot: + self.zRot = angle + self.zRotationChanged.emit(angle) + self.updateGL() + + def initializeGL(self): + lightPos = (5.0, 5.0, 10.0, 1.0) + reflectance1 = (0.8, 0.1, 0.0, 1.0) + reflectance2 = (0.0, 0.8, 0.2, 1.0) + reflectance3 = (0.2, 0.2, 1.0, 1.0) + + glLightfv(GL_LIGHT0, GL_POSITION, lightPos) + glEnable(GL_LIGHTING) + glEnable(GL_LIGHT0) + glEnable(GL_DEPTH_TEST) + + self.gear1 = self.makeGear(reflectance1, 1.0, 4.0, 1.0, 0.7, 20) + self.gear2 = self.makeGear(reflectance2, 0.5, 2.0, 2.0, 0.7, 10) + self.gear3 = self.makeGear(reflectance3, 1.3, 2.0, 0.5, 0.7, 10) + + glEnable(GL_NORMALIZE) + glClearColor(0.0, 0.0, 0.0, 1.0) + + def paintGL(self): + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) + + glPushMatrix() + glRotated(self.xRot / 16.0, 1.0, 0.0, 0.0) + glRotated(self.yRot / 16.0, 0.0, 1.0, 0.0) + glRotated(self.zRot / 16.0, 0.0, 0.0, 1.0) + + self.drawGear(self.gear1, -3.0, -2.0, 0.0, self.gear1Rot / 16.0) + self.drawGear(self.gear2, +3.1, -2.0, 0.0, + -2.0 * (self.gear1Rot / 16.0) - 9.0) + + glRotated(+90.0, 1.0, 0.0, 0.0) + self.drawGear(self.gear3, -3.1, -1.8, -2.2, + +2.0 * (self.gear1Rot / 16.0) - 2.0) + + glPopMatrix() + + def resizeGL(self, width, height): + side = min(width, height) + if side < 0: + return + + glViewport(int((width - side) / 2), int((height - side) / 2), side, side) + + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + glFrustum(-1.0, +1.0, -1.0, 1.0, 5.0, 60.0) + glMatrixMode(GL_MODELVIEW) + glLoadIdentity() + glTranslated(0.0, 0.0, -40.0) + + def mousePressEvent(self, event): + self.lastPos = event.pos() + + def mouseMoveEvent(self, event): + dx = event.x() - self.lastPos.x() + dy = event.y() - self.lastPos.y() + + if event.buttons() & QtCore.Qt.LeftButton: + self.setXRotation(self.xRot + 8 * dy) + self.setYRotation(self.yRot + 8 * dx) + elif event.buttons() & QtCore.Qt.RightButton: + self.setXRotation(self.xRot + 8 * dy) + self.setZRotation(self.zRot + 8 * dx) + + self.lastPos = event.pos() + + def advanceGears(self): + self.gear1Rot += 2 * 16 + self.updateGL() + + def xRotation(self): + return self.xRot + + def yRotation(self): + return self.yRot + + def zRotation(self): + return self.zRot + + def makeGear(self, reflectance, innerRadius, outerRadius, thickness, toothSize, toothCount): + list = glGenLists(1) + glNewList(list, GL_COMPILE) + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, reflectance) + + r0 = innerRadius + r1 = outerRadius - toothSize / 2.0 + r2 = outerRadius + toothSize / 2.0 + delta = (2.0 * math.pi / toothCount) / 4.0 + z = thickness / 2.0 + + glShadeModel(GL_FLAT) + + for i in range(2): + if i == 0: + sign = +1.0 + else: + sign = -1.0 + + glNormal3d(0.0, 0.0, sign) + + glBegin(GL_QUAD_STRIP) + + for j in range(toothCount+1): + angle = 2.0 * math.pi * j / toothCount + glVertex3d(r0 * math.cos(angle), r0 * math.sin(angle), sign * z) + glVertex3d(r1 * math.cos(angle), r1 * math.sin(angle), sign * z) + glVertex3d(r0 * math.cos(angle), r0 * math.sin(angle), sign * z) + glVertex3d(r1 * math.cos(angle + 3 * delta), r1 * math.sin(angle + 3 * delta), sign * z) + + glEnd() + + glBegin(GL_QUADS) + + for j in range(toothCount): + angle = 2.0 * math.pi * j / toothCount + glVertex3d(r1 * math.cos(angle), r1 * math.sin(angle), sign * z) + glVertex3d(r2 * math.cos(angle + delta), r2 * math.sin(angle + delta), sign * z) + glVertex3d(r2 * math.cos(angle + 2 * delta), r2 * math.sin(angle + 2 * delta), sign * z) + glVertex3d(r1 * math.cos(angle + 3 * delta), r1 * math.sin(angle + 3 * delta), sign * z) + + glEnd() + + glBegin(GL_QUAD_STRIP) + + for i in range(toothCount): + for j in range(2): + angle = 2.0 * math.pi * (i + (j / 2.0)) / toothCount + s1 = r1 + s2 = r2 + + if j == 1: + s1, s2 = s2, s1 + + glNormal3d(math.cos(angle), math.sin(angle), 0.0) + glVertex3d(s1 * math.cos(angle), s1 * math.sin(angle), +z) + glVertex3d(s1 * math.cos(angle), s1 * math.sin(angle), -z) + + glNormal3d(s2 * math.sin(angle + delta) - s1 * math.sin(angle), s1 * math.cos(angle) - s2 * math.cos(angle + delta), 0.0) + glVertex3d(s2 * math.cos(angle + delta), s2 * math.sin(angle + delta), +z) + glVertex3d(s2 * math.cos(angle + delta), s2 * math.sin(angle + delta), -z) + + glVertex3d(r1, 0.0, +z) + glVertex3d(r1, 0.0, -z) + glEnd() + + glShadeModel(GL_SMOOTH) + + glBegin(GL_QUAD_STRIP) + + for i in range(toothCount+1): + angle = i * 2.0 * math.pi / toothCount + glNormal3d(-math.cos(angle), -math.sin(angle), 0.0) + glVertex3d(r0 * math.cos(angle), r0 * math.sin(angle), +z) + glVertex3d(r0 * math.cos(angle), r0 * math.sin(angle), -z) + + glEnd() + + glEndList() + + return list + + def drawGear(self, gear, dx, dy, dz, angle): + glPushMatrix() + glTranslated(dx, dy, dz) + glRotated(angle, 0.0, 0.0, 1.0) + glCallList(gear) + glPopMatrix() + + def normalizeAngle(self, angle): + while (angle < 0): + angle += 360 * 16 + + while (angle > 360 * 16): + angle -= 360 * 16 + + +class MainWindow(QtWidgets.QMainWindow): + def __init__(self): + super(MainWindow, self).__init__() + + centralWidget = QtWidgets.QWidget() + self.setCentralWidget(centralWidget) + + self.glWidget = GLWidget() + self.pixmapLabel = QtWidgets.QLabel() + + self.glWidgetArea = QtWidgets.QScrollArea() + self.glWidgetArea.setWidget(self.glWidget) + self.glWidgetArea.setWidgetResizable(True) + self.glWidgetArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.glWidgetArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.glWidgetArea.setSizePolicy(QtWidgets.QSizePolicy.Ignored, + QtWidgets.QSizePolicy.Ignored) + self.glWidgetArea.setMinimumSize(50, 50) + + self.pixmapLabelArea = QtWidgets.QScrollArea() + self.pixmapLabelArea.setWidget(self.pixmapLabel) + self.pixmapLabelArea.setSizePolicy(QtWidgets.QSizePolicy.Ignored, + QtWidgets.QSizePolicy.Ignored) + self.pixmapLabelArea.setMinimumSize(50, 50) + + xSlider = self.createSlider(self.glWidget.xRotationChanged, + self.glWidget.setXRotation) + ySlider = self.createSlider(self.glWidget.yRotationChanged, + self.glWidget.setYRotation) + zSlider = self.createSlider(self.glWidget.zRotationChanged, + self.glWidget.setZRotation) + + self.createActions() + self.createMenus() + + centralLayout = QtWidgets.QGridLayout() + centralLayout.addWidget(self.glWidgetArea, 0, 0) + centralLayout.addWidget(self.pixmapLabelArea, 0, 1) + centralLayout.addWidget(xSlider, 1, 0, 1, 2) + centralLayout.addWidget(ySlider, 2, 0, 1, 2) + centralLayout.addWidget(zSlider, 3, 0, 1, 2) + centralWidget.setLayout(centralLayout) + + xSlider.setValue(15 * 16) + ySlider.setValue(345 * 16) + zSlider.setValue(0 * 16) + + self.setWindowTitle("Grabber") + self.resize(400, 300) + + def renderIntoPixmap(self): + size = self.getSize() + + if size.isValid(): + pixmap = self.glWidget.renderPixmap(size.width(), size.height()) + self.setPixmap(pixmap) + + def grabFrameBuffer(self): + image = self.glWidget.grabFrameBuffer() + self.setPixmap(QtGui.QPixmap.fromImage(image)) + + def clearPixmap(self): + self.setPixmap(QtGui.QPixmap()) + + def about(self): + QtWidgets.QMessageBox.about(self, "About Grabber", + "The Grabber example demonstrates two approaches for " + "rendering OpenGL into a Qt pixmap.") + + def createActions(self): + self.renderIntoPixmapAct = QtWidgets.QAction("&Render into Pixmap...", + self, shortcut="Ctrl+R", triggered=self.renderIntoPixmap) + + self.grabFrameBufferAct = QtWidgets.QAction("&Grab Frame Buffer", self, + shortcut="Ctrl+G", triggered=self.grabFrameBuffer) + + self.clearPixmapAct = QtWidgets.QAction("&Clear Pixmap", self, + shortcut="Ctrl+L", triggered=self.clearPixmap) + + self.exitAct = QtWidgets.QAction("E&xit", self, shortcut="Ctrl+Q", + triggered=self.close) + + self.aboutAct = QtWidgets.QAction("&About", self, triggered=self.about) + + self.aboutQtAct = QtWidgets.QAction("About &Qt", self, + triggered=QtWidgets.qApp.aboutQt) + + def createMenus(self): + self.fileMenu = self.menuBar().addMenu("&File") + self.fileMenu.addAction(self.renderIntoPixmapAct) + self.fileMenu.addAction(self.grabFrameBufferAct) + self.fileMenu.addAction(self.clearPixmapAct) + self.fileMenu.addSeparator() + self.fileMenu.addAction(self.exitAct) + + self.helpMenu = self.menuBar().addMenu("&Help") + self.helpMenu.addAction(self.aboutAct) + self.helpMenu.addAction(self.aboutQtAct) + + def createSlider(self, changedSignal, setterSlot): + slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) + slider.setRange(0, 360 * 16) + slider.setSingleStep(16) + slider.setPageStep(15 * 16) + slider.setTickInterval(15 * 16) + slider.setTickPosition(QtWidgets.QSlider.TicksRight) + + slider.valueChanged.connect(setterSlot) + changedSignal.connect(slider.setValue) + + return slider + + def setPixmap(self, pixmap): + self.pixmapLabel.setPixmap(pixmap) + size = pixmap.size() + + if size - QtCore.QSize(1, 0) == self.pixmapLabelArea.maximumViewportSize(): + size -= QtCore.QSize(1, 0) + + self.pixmapLabel.resize(size) + + def getSize(self): + text, ok = QtWidgets.QInputDialog.getText(self, "Grabber", + "Enter pixmap size:", QtWidgets.QLineEdit.Normal, + "%d x %d" % (self.glWidget.width(), self.glWidget.height())) + + if not ok: + return QtCore.QSize() + + regExp = QtCore.QRegExp("([0-9]+) *x *([0-9]+)") + + if regExp.exactMatch(text): + width = int(regExp.cap(1)) + height = int(regExp.cap(2)) + if width > 0 and width < 2048 and height > 0 and height < 2048: + return QtCore.QSize(width, height) + + return self.glWidget.size() + + +if __name__ == '__main__': + + app = QtWidgets.QApplication(sys.argv) + mainWin = MainWindow() + mainWin.show() + res = app.exec_() + mainWin.glWidget.freeResources() + sys.exit(res) diff --git a/examples/opengl/hellogl.py b/examples/opengl/hellogl.py new file mode 100755 index 0000000..1f04573 --- /dev/null +++ b/examples/opengl/hellogl.py @@ -0,0 +1,288 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +"""PySide2 port of the opengl/legacy/hellogl example from Qt v5.x""" + +import sys +import math +from PySide2 import QtCore, QtGui, QtWidgets, QtOpenGL + +try: + from OpenGL import GL +except ImportError: + app = QtWidgets.QApplication(sys.argv) + messageBox = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Critical, "OpenGL hellogl", + "PyOpenGL must be installed to run this example.", + QtWidgets.QMessageBox.Close) + messageBox.setDetailedText("Run:\npip install PyOpenGL PyOpenGL_accelerate") + messageBox.exec_() + sys.exit(1) + + +class Window(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + self.glWidget = GLWidget() + + self.xSlider = self.createSlider(QtCore.SIGNAL("xRotationChanged(int)"), + self.glWidget.setXRotation) + self.ySlider = self.createSlider(QtCore.SIGNAL("yRotationChanged(int)"), + self.glWidget.setYRotation) + self.zSlider = self.createSlider(QtCore.SIGNAL("zRotationChanged(int)"), + self.glWidget.setZRotation) + + mainLayout = QtWidgets.QHBoxLayout() + mainLayout.addWidget(self.glWidget) + mainLayout.addWidget(self.xSlider) + mainLayout.addWidget(self.ySlider) + mainLayout.addWidget(self.zSlider) + self.setLayout(mainLayout) + + self.xSlider.setValue(170 * 16) + self.ySlider.setValue(160 * 16) + self.zSlider.setValue(90 * 16) + + self.setWindowTitle(self.tr("Hello GL")) + + def createSlider(self, changedSignal, setterSlot): + slider = QtWidgets.QSlider(QtCore.Qt.Vertical) + + slider.setRange(0, 360 * 16) + slider.setSingleStep(16) + slider.setPageStep(15 * 16) + slider.setTickInterval(15 * 16) + slider.setTickPosition(QtWidgets.QSlider.TicksRight) + + self.glWidget.connect(slider, QtCore.SIGNAL("valueChanged(int)"), setterSlot) + self.connect(self.glWidget, changedSignal, slider, QtCore.SLOT("setValue(int)")) + + return slider + + +class GLWidget(QtOpenGL.QGLWidget): + xRotationChanged = QtCore.Signal(int) + yRotationChanged = QtCore.Signal(int) + zRotationChanged = QtCore.Signal(int) + + def __init__(self, parent=None): + QtOpenGL.QGLWidget.__init__(self, parent) + + self.object = 0 + self.xRot = 0 + self.yRot = 0 + self.zRot = 0 + + self.lastPos = QtCore.QPoint() + + self.trolltechGreen = QtGui.QColor.fromCmykF(0.40, 0.0, 1.0, 0.0) + self.trolltechPurple = QtGui.QColor.fromCmykF(0.39, 0.39, 0.0, 0.0) + + def xRotation(self): + return self.xRot + + def yRotation(self): + return self.yRot + + def zRotation(self): + return self.zRot + + def minimumSizeHint(self): + return QtCore.QSize(50, 50) + + def sizeHint(self): + return QtCore.QSize(400, 400) + + def setXRotation(self, angle): + angle = self.normalizeAngle(angle) + if angle != self.xRot: + self.xRot = angle + self.emit(QtCore.SIGNAL("xRotationChanged(int)"), angle) + self.updateGL() + + def setYRotation(self, angle): + angle = self.normalizeAngle(angle) + if angle != self.yRot: + self.yRot = angle + self.emit(QtCore.SIGNAL("yRotationChanged(int)"), angle) + self.updateGL() + + def setZRotation(self, angle): + angle = self.normalizeAngle(angle) + if angle != self.zRot: + self.zRot = angle + self.emit(QtCore.SIGNAL("zRotationChanged(int)"), angle) + self.updateGL() + + def initializeGL(self): + self.qglClearColor(self.trolltechPurple.darker()) + self.object = self.makeObject() + GL.glShadeModel(GL.GL_FLAT) + GL.glEnable(GL.GL_DEPTH_TEST) + GL.glEnable(GL.GL_CULL_FACE) + + def paintGL(self): + GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT) + GL.glLoadIdentity() + GL.glTranslated(0.0, 0.0, -10.0) + GL.glRotated(self.xRot / 16.0, 1.0, 0.0, 0.0) + GL.glRotated(self.yRot / 16.0, 0.0, 1.0, 0.0) + GL.glRotated(self.zRot / 16.0, 0.0, 0.0, 1.0) + GL.glCallList(self.object) + + def resizeGL(self, width, height): + side = min(width, height) + GL.glViewport(int((width - side) / 2),int((height - side) / 2), side, side) + + GL.glMatrixMode(GL.GL_PROJECTION) + GL.glLoadIdentity() + GL.glOrtho(-0.5, +0.5, -0.5, +0.5, 4.0, 15.0) + GL.glMatrixMode(GL.GL_MODELVIEW) + + def mousePressEvent(self, event): + self.lastPos = QtCore.QPoint(event.pos()) + + def mouseMoveEvent(self, event): + dx = event.x() - self.lastPos.x() + dy = event.y() - self.lastPos.y() + + if event.buttons() & QtCore.Qt.LeftButton: + self.setXRotation(self.xRot + 8 * dy) + self.setYRotation(self.yRot + 8 * dx) + elif event.buttons() & QtCore.Qt.RightButton: + self.setXRotation(self.xRot + 8 * dy) + self.setZRotation(self.zRot + 8 * dx) + + self.lastPos = QtCore.QPoint(event.pos()) + + def makeObject(self): + genList = GL.glGenLists(1) + GL.glNewList(genList, GL.GL_COMPILE) + + GL.glBegin(GL.GL_QUADS) + + x1 = +0.06 + y1 = -0.14 + x2 = +0.14 + y2 = -0.06 + x3 = +0.08 + y3 = +0.00 + x4 = +0.30 + y4 = +0.22 + + self.quad(x1, y1, x2, y2, y2, x2, y1, x1) + self.quad(x3, y3, x4, y4, y4, x4, y3, x3) + + self.extrude(x1, y1, x2, y2) + self.extrude(x2, y2, y2, x2) + self.extrude(y2, x2, y1, x1) + self.extrude(y1, x1, x1, y1) + self.extrude(x3, y3, x4, y4) + self.extrude(x4, y4, y4, x4) + self.extrude(y4, x4, y3, x3) + + Pi = 3.14159265358979323846 + NumSectors = 200 + + for i in range(NumSectors): + angle1 = (i * 2 * Pi) / NumSectors + x5 = 0.30 * math.sin(angle1) + y5 = 0.30 * math.cos(angle1) + x6 = 0.20 * math.sin(angle1) + y6 = 0.20 * math.cos(angle1) + + angle2 = ((i + 1) * 2 * Pi) / NumSectors + x7 = 0.20 * math.sin(angle2) + y7 = 0.20 * math.cos(angle2) + x8 = 0.30 * math.sin(angle2) + y8 = 0.30 * math.cos(angle2) + + self.quad(x5, y5, x6, y6, x7, y7, x8, y8) + + self.extrude(x6, y6, x7, y7) + self.extrude(x8, y8, x5, y5) + + GL.glEnd() + GL.glEndList() + + return genList + + def quad(self, x1, y1, x2, y2, x3, y3, x4, y4): + self.qglColor(self.trolltechGreen) + + GL.glVertex3d(x1, y1, +0.05) + GL.glVertex3d(x2, y2, +0.05) + GL.glVertex3d(x3, y3, +0.05) + GL.glVertex3d(x4, y4, +0.05) + + GL.glVertex3d(x4, y4, -0.05) + GL.glVertex3d(x3, y3, -0.05) + GL.glVertex3d(x2, y2, -0.05) + GL.glVertex3d(x1, y1, -0.05) + + def extrude(self, x1, y1, x2, y2): + self.qglColor(self.trolltechGreen.darker(250 + int(100 * x1))) + + GL.glVertex3d(x1, y1, -0.05) + GL.glVertex3d(x2, y2, -0.05) + GL.glVertex3d(x2, y2, +0.05) + GL.glVertex3d(x1, y1, +0.05) + + def normalizeAngle(self, angle): + while angle < 0: + angle += 360 * 16 + while angle > 360 * 16: + angle -= 360 * 16 + return angle + + def freeResources(self): + self.makeCurrent() + GL.glDeleteLists(self.object, 1) + +if __name__ == '__main__': + app = QtWidgets.QApplication(sys.argv) + window = Window() + window.show() + res = app.exec_() + window.glWidget.freeResources() + sys.exit(res) diff --git a/examples/opengl/hellogl2.py b/examples/opengl/hellogl2.py new file mode 100755 index 0000000..e1af6f2 --- /dev/null +++ b/examples/opengl/hellogl2.py @@ -0,0 +1,473 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +"""PySide2 port of the opengl/hellogl2 example from Qt v5.x""" + +import sys +import math +import numpy +import ctypes +from PySide2.QtCore import QCoreApplication, Signal, SIGNAL, SLOT, Qt, QSize, QPoint +from PySide2.QtGui import (QVector3D, QOpenGLFunctions, QOpenGLVertexArrayObject, QOpenGLBuffer, + QOpenGLShaderProgram, QMatrix4x4, QOpenGLShader, QOpenGLContext, QSurfaceFormat) +from PySide2.QtWidgets import (QApplication, QWidget, QMessageBox, QHBoxLayout, QSlider, + QOpenGLWidget) +from PySide2.shiboken2 import VoidPtr + +try: + from OpenGL import GL +except ImportError: + app = QApplication(sys.argv) + messageBox = QMessageBox(QMessageBox.Critical, "OpenGL hellogl", + "PyOpenGL must be installed to run this example.", + QMessageBox.Close) + messageBox.setDetailedText("Run:\npip install PyOpenGL PyOpenGL_accelerate") + messageBox.exec_() + sys.exit(1) + + +class Window(QWidget): + def __init__(self, parent=None): + QWidget.__init__(self, parent) + + self.glWidget = GLWidget() + + self.xSlider = self.createSlider(SIGNAL("xRotationChanged(int)"), + self.glWidget.setXRotation) + self.ySlider = self.createSlider(SIGNAL("yRotationChanged(int)"), + self.glWidget.setYRotation) + self.zSlider = self.createSlider(SIGNAL("zRotationChanged(int)"), + self.glWidget.setZRotation) + + mainLayout = QHBoxLayout() + mainLayout.addWidget(self.glWidget) + mainLayout.addWidget(self.xSlider) + mainLayout.addWidget(self.ySlider) + mainLayout.addWidget(self.zSlider) + self.setLayout(mainLayout) + + self.xSlider.setValue(15 * 16) + self.ySlider.setValue(345 * 16) + self.zSlider.setValue(0 * 16) + + self.setWindowTitle(self.tr("Hello GL")) + + def createSlider(self, changedSignal, setterSlot): + slider = QSlider(Qt.Vertical) + + slider.setRange(0, 360 * 16) + slider.setSingleStep(16) + slider.setPageStep(15 * 16) + slider.setTickInterval(15 * 16) + slider.setTickPosition(QSlider.TicksRight) + + self.glWidget.connect(slider, SIGNAL("valueChanged(int)"), setterSlot) + self.connect(self.glWidget, changedSignal, slider, SLOT("setValue(int)")) + + return slider + + def keyPressEvent(self, event): + if event.key() == Qt.Key_Escape: + self.close() + else: + super(Window, self).keyPressEvent(event) + +class Logo(): + def __init__(self): + self.m_count = 0 + self.i = 0 + self.m_data = numpy.empty(2500 * 6, dtype = ctypes.c_float) + + x1 = +0.06 + y1 = -0.14 + x2 = +0.14 + y2 = -0.06 + x3 = +0.08 + y3 = +0.00 + x4 = +0.30 + y4 = +0.22 + + self.quad(x1, y1, x2, y2, y2, x2, y1, x1) + self.quad(x3, y3, x4, y4, y4, x4, y3, x3) + + self.extrude(x1, y1, x2, y2) + self.extrude(x2, y2, y2, x2) + self.extrude(y2, x2, y1, x1) + self.extrude(y1, x1, x1, y1) + self.extrude(x3, y3, x4, y4) + self.extrude(x4, y4, y4, x4) + self.extrude(y4, x4, y3, x3) + + Pi = 3.14159265358979323846 + NumSectors = 100 + + for i in range(NumSectors): + angle = (i * 2 * Pi) / NumSectors + x5 = 0.30 * math.sin(angle) + y5 = 0.30 * math.cos(angle) + x6 = 0.20 * math.sin(angle) + y6 = 0.20 * math.cos(angle) + + angle = ((i + 1) * 2 * Pi) / NumSectors + x7 = 0.20 * math.sin(angle) + y7 = 0.20 * math.cos(angle) + x8 = 0.30 * math.sin(angle) + y8 = 0.30 * math.cos(angle) + + self.quad(x5, y5, x6, y6, x7, y7, x8, y8) + + self.extrude(x6, y6, x7, y7) + self.extrude(x8, y8, x5, y5) + + def constData(self): + return self.m_data.tobytes() + + def count(self): + return self.m_count + + def vertexCount(self): + return self.m_count / 6 + + def quad(self, x1, y1, x2, y2, x3, y3, x4, y4): + n = QVector3D.normal(QVector3D(x4 - x1, y4 - y1, 0), QVector3D(x2 - x1, y2 - y1, 0)) + + self.add(QVector3D(x1, y1, -0.05), n) + self.add(QVector3D(x4, y4, -0.05), n) + self.add(QVector3D(x2, y2, -0.05), n) + + self.add(QVector3D(x3, y3, -0.05), n) + self.add(QVector3D(x2, y2, -0.05), n) + self.add(QVector3D(x4, y4, -0.05), n) + + n = QVector3D.normal(QVector3D(x1 - x4, y1 - y4, 0), QVector3D(x2 - x4, y2 - y4, 0)) + + self.add(QVector3D(x4, y4, 0.05), n) + self.add(QVector3D(x1, y1, 0.05), n) + self.add(QVector3D(x2, y2, 0.05), n) + + self.add(QVector3D(x2, y2, 0.05), n) + self.add(QVector3D(x3, y3, 0.05), n) + self.add(QVector3D(x4, y4, 0.05), n) + + def extrude(self, x1, y1, x2, y2): + n = QVector3D.normal(QVector3D(0, 0, -0.1), QVector3D(x2 - x1, y2 - y1, 0)) + + self.add(QVector3D(x1, y1, 0.05), n) + self.add(QVector3D(x1, y1, -0.05), n) + self.add(QVector3D(x2, y2, 0.05), n) + + self.add(QVector3D(x2, y2, -0.05), n) + self.add(QVector3D(x2, y2, 0.05), n) + self.add(QVector3D(x1, y1, -0.05), n) + + def add(self, v, n): + self.m_data[self.i] = v.x() + self.i += 1 + self.m_data[self.i] = v.y() + self.i += 1 + self.m_data[self.i] = v.z() + self.i += 1 + self.m_data[self.i] = n.x() + self.i += 1 + self.m_data[self.i] = n.y() + self.i += 1 + self.m_data[self.i] = n.z() + self.i += 1 + self.m_count += 6 + +class GLWidget(QOpenGLWidget, QOpenGLFunctions): + xRotationChanged = Signal(int) + yRotationChanged = Signal(int) + zRotationChanged = Signal(int) + + def __init__(self, parent=None): + QOpenGLWidget.__init__(self, parent) + QOpenGLFunctions.__init__(self) + + self.core = "--coreprofile" in QCoreApplication.arguments() + self.xRot = 0 + self.yRot = 0 + self.zRot = 0 + self.lastPos = 0 + self.logo = Logo() + self.vao = QOpenGLVertexArrayObject() + self.logoVbo = QOpenGLBuffer() + self.program = QOpenGLShaderProgram() + self.projMatrixLoc = 0 + self.mvMatrixLoc = 0 + self.normalMatrixLoc = 0 + self.lightPosLoc = 0 + self.proj = QMatrix4x4() + self.camera = QMatrix4x4() + self.world = QMatrix4x4() + self.transparent = "--transparent" in QCoreApplication.arguments() + if self.transparent: + fmt = self.format() + fmt.setAlphaBufferSize(8) + self.setFormat(fmt) + + def xRotation(self): + return self.xRot + + def yRotation(self): + return self.yRot + + def zRotation(self): + return self.zRot + + def minimumSizeHint(self): + return QSize(50, 50) + + def sizeHint(self): + return QSize(400, 400) + + def normalizeAngle(self, angle): + while angle < 0: + angle += 360 * 16 + while angle > 360 * 16: + angle -= 360 * 16 + return angle + + def setXRotation(self, angle): + angle = self.normalizeAngle(angle) + if angle != self.xRot: + self.xRot = angle + self.emit(SIGNAL("xRotationChanged(int)"), angle) + self.update() + + def setYRotation(self, angle): + angle = self.normalizeAngle(angle) + if angle != self.yRot: + self.yRot = angle + self.emit(SIGNAL("yRotationChanged(int)"), angle) + self.update() + + def setZRotation(self, angle): + angle = self.normalizeAngle(angle) + if angle != self.zRot: + self.zRot = angle + self.emit(SIGNAL("zRotationChanged(int)"), angle) + self.update() + + def cleanup(self): + self.makeCurrent() + self.logoVbo.destroy() + del self.program + self.program = None + self.doneCurrent() + + def vertexShaderSourceCore(self): + return """#version 150 + in vec4 vertex; + in vec3 normal; + out vec3 vert; + out vec3 vertNormal; + uniform mat4 projMatrix; + uniform mat4 mvMatrix; + uniform mat3 normalMatrix; + void main() { + vert = vertex.xyz; + vertNormal = normalMatrix * normal; + gl_Position = projMatrix * mvMatrix * vertex; + }""" + + def fragmentShaderSourceCore(self): + return """#version 150 + in highp vec3 vert; + in highp vec3 vertNormal; + out highp vec4 fragColor; + uniform highp vec3 lightPos; + void main() { + highp vec3 L = normalize(lightPos - vert); + highp float NL = max(dot(normalize(vertNormal), L), 0.0); + highp vec3 color = vec3(0.39, 1.0, 0.0); + highp vec3 col = clamp(color * 0.2 + color * 0.8 * NL, 0.0, 1.0); + fragColor = vec4(col, 1.0); + }""" + + + def vertexShaderSource(self): + return """attribute vec4 vertex; + attribute vec3 normal; + varying vec3 vert; + varying vec3 vertNormal; + uniform mat4 projMatrix; + uniform mat4 mvMatrix; + uniform mat3 normalMatrix; + void main() { + vert = vertex.xyz; + vertNormal = normalMatrix * normal; + gl_Position = projMatrix * mvMatrix * vertex; + }""" + + def fragmentShaderSource(self): + return """varying highp vec3 vert; + varying highp vec3 vertNormal; + uniform highp vec3 lightPos; + void main() { + highp vec3 L = normalize(lightPos - vert); + highp float NL = max(dot(normalize(vertNormal), L), 0.0); + highp vec3 color = vec3(0.39, 1.0, 0.0); + highp vec3 col = clamp(color * 0.2 + color * 0.8 * NL, 0.0, 1.0); + gl_FragColor = vec4(col, 1.0); + }""" + + def initializeGL(self): + self.context().aboutToBeDestroyed.connect(self.cleanup) + self.initializeOpenGLFunctions() + self.glClearColor(0, 0, 0, 1) + + self.program = QOpenGLShaderProgram() + + if self.core: + self.vertexShader = self.vertexShaderSourceCore() + self.fragmentShader = self.fragmentShaderSourceCore() + else: + self.vertexShader = self.vertexShaderSource() + self.fragmentShader = self.fragmentShaderSource() + + self.program.addShaderFromSourceCode(QOpenGLShader.Vertex, self.vertexShader) + self.program.addShaderFromSourceCode(QOpenGLShader.Fragment, self.fragmentShader) + self.program.bindAttributeLocation("vertex", 0) + self.program.bindAttributeLocation("normal", 1) + self.program.link() + + self.program.bind() + self.projMatrixLoc = self.program.uniformLocation("projMatrix") + self.mvMatrixLoc = self.program.uniformLocation("mvMatrix") + self.normalMatrixLoc = self.program.uniformLocation("normalMatrix") + self.lightPosLoc = self.program.uniformLocation("lightPos") + + self.vao.create() + vaoBinder = QOpenGLVertexArrayObject.Binder(self.vao) + + self.logoVbo.create() + self.logoVbo.bind() + float_size = ctypes.sizeof(ctypes.c_float) + self.logoVbo.allocate(self.logo.constData(), self.logo.count() * float_size) + + self.setupVertexAttribs() + + self.camera.setToIdentity() + self.camera.translate(0, 0, -1) + + self.program.setUniformValue(self.lightPosLoc, QVector3D(0, 0, 70)) + self.program.release() + vaoBinder = None + + def setupVertexAttribs(self): + self.logoVbo.bind() + f = QOpenGLContext.currentContext().functions() + f.glEnableVertexAttribArray(0) + f.glEnableVertexAttribArray(1) + float_size = ctypes.sizeof(ctypes.c_float) + + null = VoidPtr(0) + pointer = VoidPtr(3 * float_size) + f.glVertexAttribPointer(0, 3, int(GL.GL_FLOAT), int(GL.GL_FALSE), 6 * float_size, null) + f.glVertexAttribPointer(1, 3, int(GL.GL_FLOAT), int(GL.GL_FALSE), 6 * float_size, pointer) + self.logoVbo.release() + + def paintGL(self): + self.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT) + self.glEnable(GL.GL_DEPTH_TEST) + self.glEnable(GL.GL_CULL_FACE) + + self.world.setToIdentity() + self.world.rotate(180 - (self.xRot / 16), 1, 0, 0) + self.world.rotate(self.yRot / 16, 0, 1, 0) + self.world.rotate(self.zRot / 16, 0, 0, 1) + + vaoBinder = QOpenGLVertexArrayObject.Binder(self.vao) + self.program.bind() + self.program.setUniformValue(self.projMatrixLoc, self.proj) + self.program.setUniformValue(self.mvMatrixLoc, self.camera * self.world) + normalMatrix = self.world.normalMatrix() + self.program.setUniformValue(self.normalMatrixLoc, normalMatrix) + + self.glDrawArrays(GL.GL_TRIANGLES, 0, self.logo.vertexCount()) + self.program.release() + vaoBinder = None + + def resizeGL(self, width, height): + self.proj.setToIdentity() + self.proj.perspective(45, width / height, 0.01, 100) + + def mousePressEvent(self, event): + self.lastPos = QPoint(event.pos()) + + def mouseMoveEvent(self, event): + dx = event.x() - self.lastPos.x() + dy = event.y() - self.lastPos.y() + + if event.buttons() & Qt.LeftButton: + self.setXRotation(self.xRot + 8 * dy) + self.setYRotation(self.yRot + 8 * dx) + elif event.buttons() & Qt.RightButton: + self.setXRotation(self.xRot + 8 * dy) + self.setZRotation(self.zRot + 8 * dx) + + self.lastPos = QPoint(event.pos()) + +if __name__ == '__main__': + app = QApplication(sys.argv) + + fmt = QSurfaceFormat() + fmt.setDepthBufferSize(24) + if "--multisample" in QCoreApplication.arguments(): + fmt.setSamples(4) + if "--coreprofile" in QCoreApplication.arguments(): + fmt.setVersion(3, 2) + fmt.setProfile(QSurfaceFormat.CoreProfile) + QSurfaceFormat.setDefaultFormat(fmt) + + mainWindow = Window() + if "--transparent" in QCoreApplication.arguments(): + mainWindow.setAttribute(Qt.WA_TranslucentBackground) + mainWindow.setAttribute(Qt.WA_NoSystemBackground, False) + + mainWindow.resize(mainWindow.sizeHint()) + mainWindow.show() + + res = app.exec_() + sys.exit(res) diff --git a/examples/opengl/overpainting.py b/examples/opengl/overpainting.py new file mode 100755 index 0000000..0310913 --- /dev/null +++ b/examples/opengl/overpainting.py @@ -0,0 +1,386 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +"""PySide2 port of the opengl/legacy/overpainting example from Qt v5.x""" + +import sys +import math, random +from PySide2.QtCore import * +from PySide2.QtGui import * +from PySide2.QtWidgets import * +from PySide2.QtOpenGL import * + +try: + from OpenGL.GL import * +except ImportError: + app = QApplication(sys.argv) + messageBox = QMessageBox(QMessageBox.Critical, "OpenGL overpainting", + "PyOpenGL must be installed to run this example.", + QMessageBox.Close) + messageBox.setDetailedText("Run:\npip install PyOpenGL PyOpenGL_accelerate") + messageBox.exec_() + sys.exit(1) + + +class Bubble: + def __init__(self, position, radius, velocity): + self.position = position + self.vel = velocity + self.radius = radius + self.innerColor = self.randomColor() + self.outerColor = self.randomColor() + self.updateBrush() + + def updateBrush(self): + gradient = QRadialGradient(QPointF(self.radius, self.radius), self.radius, + QPointF(self.radius*0.5, self.radius*0.5)) + + gradient.setColorAt(0, QColor(255, 255, 255, 255)) + gradient.setColorAt(0.25, self.innerColor) + gradient.setColorAt(1, self.outerColor) + self.brush = QBrush(gradient) + + def drawBubble(self, painter): + painter.save() + painter.translate(self.position.x() - self.radius, + self.position.y() - self.radius) + painter.setBrush(self.brush) + painter.drawEllipse(0, 0, int(2*self.radius), int(2*self.radius)) + painter.restore() + + def randomColor(self): + red = random.randrange(205, 256) + green = random.randrange(205, 256) + blue = random.randrange(205, 256) + alpha = random.randrange(91, 192) + + return QColor(red, green, blue, alpha) + + def move(self, bbox): + self.position += self.vel + leftOverflow = self.position.x() - self.radius - bbox.left() + rightOverflow = self.position.x() + self.radius - bbox.right() + topOverflow = self.position.y() - self.radius - bbox.top() + bottomOverflow = self.position.y() + self.radius - bbox.bottom() + + if leftOverflow < 0.0: + self.position.setX(self.position.x() - 2 * leftOverflow) + self.vel.setX(-self.vel.x()) + elif rightOverflow > 0.0: + self.position.setX(self.position.x() - 2 * rightOverflow) + self.vel.setX(-self.vel.x()) + + if topOverflow < 0.0: + self.position.setY(self.position.y() - 2 * topOverflow) + self.vel.setY(-self.vel.y()) + elif bottomOverflow > 0.0: + self.position.setY(self.position.y() - 2 * bottomOverflow) + self.vel.setY(-self.vel.y()) + + def rect(self): + return QRectF(self.position.x() - self.radius, + self.position.y() - self.radius, + 2 * self.radius, 2 * self.radius) + + +class GLWidget(QGLWidget): + def __init__(self, parent = None): + QGLWidget.__init__(self, QGLFormat(QGL.SampleBuffers), parent) + + midnight = QTime(0, 0, 0) + random.seed(midnight.secsTo(QTime.currentTime())) + + self.object = 0 + self.xRot = 0 + self.yRot = 0 + self.zRot = 0 + self.image = QImage() + self.bubbles = [] + self.lastPos = QPoint() + + self.trolltechGreen = QColor.fromCmykF(0.40, 0.0, 1.0, 0.0) + self.trolltechPurple = QColor.fromCmykF(0.39, 0.39, 0.0, 0.0) + + self.animationTimer = QTimer() + self.animationTimer.setSingleShot(False) + self.connect(self.animationTimer, SIGNAL("timeout()"), self.animate) + self.animationTimer.start(25) + + self.setAttribute(Qt.WA_NoSystemBackground) + self.setMinimumSize(200, 200) + self.setWindowTitle(self.tr("Overpainting a Scene")) + + def freeResources(self): + self.makeCurrent() + glDeleteLists(self.object, 1) + + def setXRotation(self, angle): + angle = self.normalizeAngle(angle) + if angle != self.xRot: + self.xRot = angle + self.emit(SIGNAL("xRotationChanged(int)"), angle) + + def setYRotation(self, angle): + angle = self.normalizeAngle(angle) + if angle != self.yRot: + self.yRot = angle + self.emit(SIGNAL("yRotationChanged(int)"), angle) + + def setZRotation(self, angle): + angle = self.normalizeAngle(angle) + if angle != self.zRot: + self.zRot = angle + self.emit(SIGNAL("zRotationChanged(int)"), angle) + + def initializeGL(self): + self.object = self.makeObject() + + def mousePressEvent(self, event): + self.lastPos = QPoint(event.pos()) + + def mouseMoveEvent(self, event): + dx = event.x() - self.lastPos.x() + dy = event.y() - self.lastPos.y() + + if event.buttons() & Qt.LeftButton: + self.setXRotation(self.xRot + 8 * dy) + self.setYRotation(self.yRot + 8 * dx) + elif event.buttons() & Qt.RightButton: + self.setXRotation(self.xRot + 8 * dy) + self.setZRotation(self.zRot + 8 * dx) + + self.lastPos = QPoint(event.pos()) + + def paintEvent(self, event): + painter = QPainter() + painter.begin(self) + painter.setRenderHint(QPainter.Antialiasing) + + glPushAttrib(GL_ALL_ATTRIB_BITS) + glMatrixMode(GL_PROJECTION) + glPushMatrix() + glMatrixMode(GL_MODELVIEW) + glPushMatrix() + + self.qglClearColor(self.trolltechPurple.darker()) + glShadeModel(GL_SMOOTH) + glEnable(GL_DEPTH_TEST) + glEnable(GL_CULL_FACE) + glEnable(GL_LIGHTING) + glEnable(GL_LIGHT0) + lightPosition = ( 0.5, 5.0, 7.0, 1.0 ) + glLightfv(GL_LIGHT0, GL_POSITION, lightPosition) + + self.resizeGL(self.width(), self.height()) + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) + glLoadIdentity() + glTranslated(0.0, 0.0, -10.0) + glRotated(self.xRot / 16.0, 1.0, 0.0, 0.0) + glRotated(self.yRot / 16.0, 0.0, 1.0, 0.0) + glRotated(self.zRot / 16.0, 0.0, 0.0, 1.0) + glCallList(self.object) + + glPopAttrib() + glMatrixMode(GL_MODELVIEW) + glPopMatrix() + glMatrixMode(GL_PROJECTION) + glPopMatrix() + + glDisable(GL_CULL_FACE) ### not required if begin() also does it + + for bubble in self.bubbles: + if bubble.rect().intersects(QRectF(event.rect())): + bubble.drawBubble(painter) + + painter.drawImage((self.width() - self.image.width())/2, 0, self.image) + painter.end() + + def resizeGL(self, width, height): + side = min(width, height) + glViewport(int((width - side) / 2), int((height - side) / 2), side, side) + + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0) + glMatrixMode(GL_MODELVIEW) + + self.formatInstructions(width, height) + + def showEvent(self, event): + self.createBubbles(20 - len(self.bubbles)) + + def sizeHint(self): + return QSize(400, 400) + + def makeObject(self): + list = glGenLists(1) + glNewList(list, GL_COMPILE) + + glEnable(GL_NORMALIZE) + glBegin(GL_QUADS) + + logoDiffuseColor = (self.trolltechGreen.red()/255.0, + self.trolltechGreen.green()/255.0, + self.trolltechGreen.blue()/255.0, 1.0) + glMaterialfv(GL_FRONT, GL_DIFFUSE, logoDiffuseColor) + + x1 = +0.06 + y1 = -0.14 + x2 = +0.14 + y2 = -0.06 + x3 = +0.08 + y3 = +0.00 + x4 = +0.30 + y4 = +0.22 + + self.quad(x1, y1, x2, y2, y2, x2, y1, x1) + self.quad(x3, y3, x4, y4, y4, x4, y3, x3) + + self.extrude(x1, y1, x2, y2) + self.extrude(x2, y2, y2, x2) + self.extrude(y2, x2, y1, x1) + self.extrude(y1, x1, x1, y1) + self.extrude(x3, y3, x4, y4) + self.extrude(x4, y4, y4, x4) + self.extrude(y4, x4, y3, x3) + + NumSectors = 200 + + for i in range(NumSectors): + angle1 = (i * 2 * math.pi) / NumSectors + x5 = 0.30 * math.sin(angle1) + y5 = 0.30 * math.cos(angle1) + x6 = 0.20 * math.sin(angle1) + y6 = 0.20 * math.cos(angle1) + + angle2 = ((i + 1) * 2 * math.pi) / NumSectors + x7 = 0.20 * math.sin(angle2) + y7 = 0.20 * math.cos(angle2) + x8 = 0.30 * math.sin(angle2) + y8 = 0.30 * math.cos(angle2) + + self.quad(x5, y5, x6, y6, x7, y7, x8, y8) + + self.extrude(x6, y6, x7, y7) + self.extrude(x8, y8, x5, y5) + + glEnd() + + glEndList() + return list + + def quad(self, x1, y1, x2, y2, x3, y3, x4, y4): + glNormal3d(0.0, 0.0, -1.0) + glVertex3d(x1, y1, -0.05) + glVertex3d(x2, y2, -0.05) + glVertex3d(x3, y3, -0.05) + glVertex3d(x4, y4, -0.05) + + glNormal3d(0.0, 0.0, 1.0) + glVertex3d(x4, y4, +0.05) + glVertex3d(x3, y3, +0.05) + glVertex3d(x2, y2, +0.05) + glVertex3d(x1, y1, +0.05) + + def extrude(self, x1, y1, x2, y2): + self.qglColor(self.trolltechGreen.darker(250 + int(100 * x1))) + + glNormal3d((x1 + x2)/2.0, (y1 + y2)/2.0, 0.0) + glVertex3d(x1, y1, +0.05) + glVertex3d(x2, y2, +0.05) + glVertex3d(x2, y2, -0.05) + glVertex3d(x1, y1, -0.05) + + def normalizeAngle(self, angle): + while angle < 0: + angle += 360 * 16 + while angle > 360 * 16: + angle -= 360 * 16 + return angle + + def createBubbles(self, number): + for i in range(number): + position = QPointF(self.width()*(0.1 + 0.8*random.random()), + self.height()*(0.1 + 0.8*random.random())) + radius = min(self.width(), self.height())*(0.0125 + 0.0875*random.random()) + velocity = QPointF(self.width()*0.0125*(-0.5 + random.random()), + self.height()*0.0125*(-0.5 + random.random())) + + self.bubbles.append(Bubble(position, radius, velocity)) + + def animate(self): + for bubble in self.bubbles: + self.update(bubble.rect().toRect()) + bubble.move(self.rect()) + self.update(bubble.rect().toRect()) + + def formatInstructions(self, width, height): + text = self.tr("Click and drag with the left mouse button " + "to rotate the Qt logo.") + metrics = QFontMetrics(self.font()) + border = max(4, metrics.leading()) + + rect = metrics.boundingRect(0, 0, width - 2*border, int(height*0.125), + Qt.AlignCenter | Qt.TextWordWrap, text) + self.image = QImage(width, rect.height() + 2*border, + QImage.Format_ARGB32_Premultiplied) + self.image.fill(qRgba(0, 0, 0, 127)) + + painter = QPainter() + painter.begin(self.image) + painter.setRenderHint(QPainter.TextAntialiasing) + painter.setPen(Qt.white) + painter.drawText((width - rect.width())/2, border, + rect.width(), rect.height(), + Qt.AlignCenter | Qt.TextWordWrap, text) + painter.end() + + +if __name__ == '__main__': + app = QApplication(sys.argv) + window = GLWidget() + window.show() + res = app.exec_() + window.freeResources() + sys.exit(res) diff --git a/examples/opengl/samplebuffers.py b/examples/opengl/samplebuffers.py new file mode 100755 index 0000000..5e4c439 --- /dev/null +++ b/examples/opengl/samplebuffers.py @@ -0,0 +1,193 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +"""PySide2 port of the opengl/legacy/samplebuffers example from Qt v5.x""" + +import sys +import math +from PySide2 import QtCore, QtGui, QtWidgets, QtOpenGL + +try: + from OpenGL import GL +except ImportError: + app = QtWidgets.QApplication(sys.argv) + messageBox = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Critical, "OpenGL samplebuffers", + "PyOpenGL must be installed to run this example.", + QtWidgets.QMessageBox.Close) + messageBox.setDetailedText("Run:\npip install PyOpenGL PyOpenGL_accelerate") + messageBox.exec_() + sys.exit(1) + + +class GLWidget(QtOpenGL.QGLWidget): + GL_MULTISAMPLE = 0x809D + rot = 0.0 + + def __init__(self, parent=None): + QtOpenGL.QGLWidget.__init__(self, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers), parent) + + self.list_ = [] + + self.startTimer(40) + self.setWindowTitle(self.tr("Sample Buffers")) + + def initializeGL(self): + GL.glMatrixMode(GL.GL_PROJECTION) + GL.glLoadIdentity() + GL.glOrtho( -.5, .5, .5, -.5, -1000, 1000) + GL.glMatrixMode(GL.GL_MODELVIEW) + GL.glLoadIdentity() + GL.glClearColor(1.0, 1.0, 1.0, 1.0) + + self.makeObject() + + def resizeGL(self, w, h): + GL.glViewport(0, 0, w, h) + + def paintGL(self): + GL.glClear(GL.GL_COLOR_BUFFER_BIT) + + GL.glMatrixMode(GL.GL_MODELVIEW) + GL.glPushMatrix() + GL.glEnable(GLWidget.GL_MULTISAMPLE) + GL.glTranslatef( -0.25, -0.10, 0.0) + GL.glScalef(0.75, 1.15, 0.0) + GL.glRotatef(GLWidget.rot, 0.0, 0.0, 1.0) + GL.glCallList(self.list_) + GL.glPopMatrix() + + GL.glPushMatrix() + GL.glDisable(GLWidget.GL_MULTISAMPLE) + GL.glTranslatef(0.25, -0.10, 0.0) + GL.glScalef(0.75, 1.15, 0.0) + GL.glRotatef(GLWidget.rot, 0.0, 0.0, 1.0) + GL.glCallList(self.list_) + GL.glPopMatrix() + + GLWidget.rot += 0.2 + + self.qglColor(QtCore.Qt.black) + self.renderText(-0.35, 0.4, 0.0, "Multisampling enabled") + self.renderText(0.15, 0.4, 0.0, "Multisampling disabled") + + def timerEvent(self, event): + self.update() + + def makeObject(self): + trolltechGreen = QtGui.QColor.fromCmykF(0.40, 0.0, 1.0, 0.0) + Pi = 3.14159265358979323846 + NumSectors = 15 + x1 = +0.06 + y1 = -0.14 + x2 = +0.14 + y2 = -0.06 + x3 = +0.08 + y3 = +0.00 + x4 = +0.30 + y4 = +0.22 + + self.list_ = GL.glGenLists(1) + GL.glNewList(self.list_, GL.GL_COMPILE) + + for i in range(NumSectors): + angle1 = float((i * 2 * Pi) / NumSectors) + x5 = 0.30 * math.sin(angle1) + y5 = 0.30 * math.cos(angle1) + x6 = 0.20 * math.sin(angle1) + y6 = 0.20 * math.cos(angle1) + + angle2 = float(((i + 1) * 2 * Pi) / NumSectors) + x7 = 0.20 * math.sin(angle2) + y7 = 0.20 * math.cos(angle2) + x8 = 0.30 * math.sin(angle2) + y8 = 0.30 * math.cos(angle2) + + self.qglColor(trolltechGreen) + self.quad(GL.GL_QUADS, x5, y5, x6, y6, x7, y7, x8, y8) + self.qglColor(QtCore.Qt.black) + self.quad(GL.GL_LINE_LOOP, x5, y5, x6, y6, x7, y7, x8, y8) + + self.qglColor(trolltechGreen) + self.quad(GL.GL_QUADS, x1, y1, x2, y2, y2, x2, y1, x1) + self.quad(GL.GL_QUADS, x3, y3, x4, y4, y4, x4, y3, x3) + + self.qglColor(QtCore.Qt.black) + self.quad(GL.GL_LINE_LOOP, x1, y1, x2, y2, y2, x2, y1, x1) + self.quad(GL.GL_LINE_LOOP, x3, y3, x4, y4, y4, x4, y3, x3) + + GL.glEndList() + + def quad(self, primitive, x1, y1, x2, y2, x3, y3, x4, y4): + GL.glBegin(primitive) + + GL.glVertex2d(x1, y1) + GL.glVertex2d(x2, y2) + GL.glVertex2d(x3, y3) + GL.glVertex2d(x4, y4) + + GL.glEnd() + + def freeResources(self): + self.makeCurrent() + GL.glDeleteLists(self.list_, 1) + + +if __name__ == '__main__': + app = QtWidgets.QApplication(sys.argv) + + if not QtOpenGL.QGLFormat.hasOpenGL(): + QMessageBox.information(0, "OpenGL pbuffers", + "This system does not support OpenGL.", + QMessageBox.Ok) + sys.exit(1) + + f = QtOpenGL.QGLFormat.defaultFormat() + f.setSampleBuffers(True) + QtOpenGL.QGLFormat.setDefaultFormat(f) + + widget = GLWidget() + widget.resize(640, 480) + widget.show() + res = app.exec_() + widget.freeResources() + sys.exit(res) diff --git a/examples/opengl/textures/images/side1.png b/examples/opengl/textures/images/side1.png new file mode 100644 index 0000000000000000000000000000000000000000..68fd4336d407d8a3abaddeaa14a3925c918519dd GIT binary patch literal 1044 zcmc)IdrZbk>xq7)G zgjnH%&?tl`l2XW-PC`mujEICA!fhfxGZYYRP)vA0DZz$|Y`C%nuK0nJ;KDU7 z$aqjCfGQ!>5HU~}1NCC4Plo$MIw*-8Q00Ic!_#8WTm+32bW+gEz*qyudN2`6=vG3X z8u~OaMCiey2dfFJeK0~;;5#t_KmgbwFsmw^9MvUV5SvM&V6tw}rmRPZK07>gqbR5A zQ_tSa4xStCFLCqnqI?dgGVfv5KDT`qha>Gl=j%)E8B4htO<(d~)m#0wdz5eH=&q0Y zk$p(%_AH!u7AvhL?&svdKO5}u;LE+(vrm>KVw*DC5!jpTBxN;MHwV8!qgx+!sH$9K zf+z2K;&agvpQA}*74F#1sd;ZUAYr4efzsW6*uueg&zkkE98a+gT5ryj3C!_GFATL1w}J(-2s~dDNK^Dz8Ais z;Z)o;NngOXycIOx#q=-x>F4Cs(BYvlq zw>)k>uixo%M^J;t|1rPBm^(J{Z~u4UCgD3LaHKzPo|k$+(v|rdT|S6wlX1R3&(~8u z;NmyF+mDw_iK80Py~tm;nr68Q&zJ5|^%OItKT6XWSGjoD)M794&_%4F2aEcHMy+w>-1oL?$iGHgBvIM N;r#8P@=fB?zX5W6naThF literal 0 HcmV?d00001 diff --git a/examples/opengl/textures/images/side2.png b/examples/opengl/textures/images/side2.png new file mode 100644 index 0000000000000000000000000000000000000000..b12d30d497620e0fa8b3098ebeed08b8031a1c72 GIT binary patch literal 1768 zcmb8v`BT%^769=3O=1E>c3x#OW|W5rR8$ZmvP2VWf-DhPi_ow8G@~qNI}w~F@Rv^6=*PQ0)f=W5(9<=zl0|CA85~f?mc(T%)N8ZFXs{? z^suRky$Jxoluo0D0|4od5HLdPQ+iWOgg%upf+G$ABnKd{5dvEn6x$-jL<6o1!rf(1 zK|(6X20R+VV;D5XAdO6emQKV7T`M%S zE{p~b8}u*!^Kd3aRyUWrEXUv8{rl3zT|q->QAQ5n`L|07^%-~Ud$o9WBV(R0Jov1S zU3EDYrR01@$&DU!<2msj`^+Cj29Qi z0>A3j)Z4jUCKIydBAN6TBG@^Vv!%BWa;bA+Ak;%SBStWJEOuqnHc;UQqU?ci^QGi8AcXyjpPuC$FGtGvzMqMrX|)SZMPo^?%{xZ_X*jDS9rpkJfuVIX)In z*lI2rGiC<%M+cOS?y`#*fWAD(ATei}i#W#F1CTDSb}I3*VD>J!{v6W1x;R7$6cAPk zL^H;S-MTVzI_wSLf2EUlib86trpOKxM+np7x1J1iWm^wDhMxKLe3S*`+G1L2O_f@@ z`sJ)e{EoeuaBA?{q!)%*XR6$1-j?r~ObeL)4Xe3@dnEh6l%lpd{y&hHq7_9~8g~Pi zFHX#RG;q)fhZ{1q@FXb>&YIiOV-tl*0ZlK<7n|>)EYskWjQ)cBqZM4NX4$-*-^F5S zz9ib-X_0@=#|}$55%<|FDhg~V#jPh;--)+$6;1!Lh0>U7ECyl`D>(rz-hLvk4X~sdVf?jP@l$;>^l7ePNm$2CQmGY{r_16 zwZNmqq&5ZG`8)c_5>6m>eXANq4|pnU%2uqHEPaK93-HmWtTArn5^f>`i*puT>1c}v zA#h9x$1xVXeUOSLZe-s-Jd=VJ1|6;Oi-hruphgB-A|G#b#!JQtssSmGbeb9UM}g&X zR7Ii>ZDil6!W|ZLnD!zHB*J6ob6nueaK^|>uXbhmH+!vNbL0@Yy(gIX~@KYj4{8qBKk+7esHcf&W)VA9+t0-+b;ah(uI?bk$RfQS@~ecRaL7uy!nQzbtn9J znX1(p&PMYB4{77r6i{%*SLdXOi~X-^t|hGX&W9sb{PLr=8uK}wEa+e8ta#k9)~=?9 zE4#iL?;7bS(jsoJ7Qb73`gL>ZO=IQ2Iebu?>{(G|d(l&Y{fTv&Dd4X3{&;Mx$=#e- zZWp+=kK9xz3LMScdJ{Yk{{{)AJCLb2r)m~9;pE7hk%QTY*}aWCV!>>%EnK9UI*W;i zeHj+(S;MQ-fE6@(56{qE8wB;Wn)|3*)yaFwcijtWfgA3xxynm2l0hWkj%&=sHD=&k wGH|?v&wNh)?V-zbgEK!(>vfcXQeZ z0HW9;KpC%y{XBm^MSNj;`Z-4fh$;{usti$em_mjr^I-}Frchyu0Zdmggz3gGod(la z!Yl=Am_>(K_ArY9xe88@>jt@=kjsR{3VyKI9~QG=F$W41f}tP;3PPbE910Z4=c-0HRGqa-4$(8pG z^)?ypwk_-Wv%|I4VwIICqam3A2)`Lrg_8k7#*7%e6*2$4`af1)GG9GlPlmbt@WxDn z$(Tv5+2$rzjB^?uZE={PWf#&sk^=TrTVaFz%==#NJvSZP@rWQEnX@$cbxF&^%4$8V z*FP!)yGGBCByeYGLeWlbQ!Q_>T`%9hKVr)O6%=n#`I|p&)!ptIg6pGLCwmH|*g#h8S+e zDc@ddi`w-JRu-IBm!3Zo(?hgGBU`~If)0j!o7WcO2Oc+288QwIE@EUvdbkqA8U;;1 zwKXw!GC1Z0@=n_?S)pZsv@0j4PBzW05Fl<#kal6|?d}JhFJl?WV8D zr`3#cOFCJrdyj6Yd6qb7OI63-NaV-s_cI%j*c%|^=if)(tYcHv2;9L)hb>k_SvRPi zI{V4oEC1vL+PPoDzw{g(7CZI?MqJ)z|HXlSr-p#hR!pb`;=)7iXSGt)(6M@^_Zc-b z;&?XI^Ks~W#_}m<=#wwd=tUcuCb|RA-X$)6(PUO?q0rJ9dNt!A0P814^$ukn{FpQ zUz!X+*`EVuNkRgk&_|3c`?Wx3QTT~^XLEOtd#muU!4!4BDH~xvA_{Kn&&HjFM1RwY za*Ek`sidv zbV>VcjIU7rqden`B^st8?$>9O5u#IR=oD7m8nf3XZnHxX1z$WlK)kT&jbnZ8Rb3x~ zu;C1C)%N~AP#fbZ7OF%GUJJ~kghIFr|votJXb=rlIOMh7-S)?2tG8yX+ z^GU`A&F`A4iVD=jpB}sKC5o%9c)_3RLu!9~C^gUOk?M0ki9lKzT-W^fd=>B zmiXagr`cW&r`_lAj!J?S&y#e7SPgZTZnKdDtqXkmjBo<|aDY_C&sVl7qph((KYH*G z^#qE^m0#gM4yD|Em5rx3U`8V!rjs_A$mk(lQ2i?Y$Uxi3t5}SPL-6R>k5xnE=2PPG zz(N%|XqaH}|9Yg&Z}MCR*8Io}n!~ioUHf6;g0!_f!O{Xp1KOpbxA$ed;Z7dv*F^U) z@SI#}_EU>vwt3tA--;HK+SzG#=z(+5{k>5`Nm0%BSYPP0Uw}aX-uqtkt?lDAe~yxz zs~?Q_D&p9RE9(%@OT5_=O{@iXXt(n9@f>`J;96|Kxzc;1_%eCh3mLC&F{deH%GDQK z21BNWdCC4UBurKMY-gtbHAG4rm6)4I*nmSqYYu+AcItIk4S7)6$mdYRrEk_h4;>_8 ziVuaSx#bF0;X8dBvWMwUr!heu?2LYm%n!}X%% z4<$V>16SvI)?PGNx-oltrfqz0nd4T>HO+X>87)P7{_hwlh|v3|U`OYWyVm^fVDiwI Y&gWFukWRh775xr?yR)|we=R5BKW?))oB#j- literal 0 HcmV?d00001 diff --git a/examples/opengl/textures/images/side4.png b/examples/opengl/textures/images/side4.png new file mode 100644 index 0000000000000000000000000000000000000000..19829d2d6debc1ffac9c3780f43bf93ec06b5ae9 GIT binary patch literal 1342 zcma*nYfuwM902gWT#^froCpeso@rowK(tgWViXzZ& z6+iWa?~e}Qj-1%z%gISlfxcZ7Y4`QdFwSmY&4>v@Z5M&LS$xZQ4rEqn_+AH5&9Iic z4q`@y#?&T(oC=L?c7gCz&00JogMsTPhnj!*_kv3jC{K&6E+Q8s1+n7XBKK^Yl2r%xqNHuO=qiiPeT zca{XqDi5Bn4n7-X07c57LPd(qlxrDCmB9X?^OI$i_hKTsenA2#lBX+Z?&mT}Mv1?} z*;+U#s<$Z}pU^*YR*<}9QGOX|3b#h`pwFLqeE4^Jk*SABW z^S6O2A_kaW#E&)zb2XgD3)%+uCYeCoXz=y4RmFZ5*s^j8cxLOjo_fVq9@t zSKiJGPU8KmF|Js_D8DYJr4mlnT~m+#JUeVTDy4=kM_Q^gc$4!Nxmzq%S0iN!e$sWR<$uE*Xf4FrQWit+v7E*lJ zuu{8m>}wk7{>Fh&bOmLP;DzSo;ZSZ^-u_Ou z`~tCfo$%@$ZU?Q4nZuRS{C3)_s%@3(FaFERKb)m$iGTMHWsQtldY>p>lot~tu!x8 zx9aRfy+>A4zU-^5Zas`}gdOgjOguj(6(dV7E&h_>z7m>tb8swKv!BY3X|^UV51ZmU z*J5hY3saa$cY^+@O(yc=q1x2{Q?4U>^uYbH(s@caH&Wza)1OK@qb`^4FAl(e3Yed| LFy))Mmh!&<$8RVO literal 0 HcmV?d00001 diff --git a/examples/opengl/textures/images/side5.png b/examples/opengl/textures/images/side5.png new file mode 100644 index 0000000000000000000000000000000000000000..3843b1229db89f2e601512cd6022661fa9d4485f GIT binary patch literal 1959 zcmb8w`#Y3*9|!R7-HaJo#^jJ$Av(yZnuMg0TT-k;qb7$;i*iibu|?!`vsR+w$zg?E zhZP!fi10Xd7g3FBRu034d#%SY3^~k`d$OkgV6W@-z22W6zt`u7&-)hB@uZxLstf=? z&erDmX#k*&5dzYLjR-7vWo^VAraj9#3MJM`y;98)UE)9&YETD}F^ zYDt9HY* zAQ}G^tfI_nII`bXUf31NK2%QbJVNx!W%z_UIfuM=Z2VLaG|gowhi4vDk7;+JiOBCl zR_c6I8#@NBbjH|Hn2XQ43_6U5=nlN$BX?)Q$?FG1!vA;dKlvj9e#LxkDAWQd@)e|D z1Zy9LlSux%$vSA>NV?eAH4b77K$qyK`~Y;04r__+sj@=58-OCl?Z3Q8rAYC|$aJ5W zZwjHyI>>GdR71v-Cy#L{9Hu(v6oN2A5ZC2;V6tP;AsS&V-(qTq+bB^|%UZXh9qrCl zs>IIru@Th>C-GjUWek*ogXNoIblrrw{!#j~CGA9Tu3Ab!=KrjN^>~jNVuM8nue;>p zy>=(1gxLA*tq~P7A6M&w?iVkd?Kjd`UL+X#0k8cdPjuiS4K$q1a8}oJlE;>1u~H5A zI!Rb$26N5eVl%kH3@$K3PxV5MTtYgRz~T~mxCA3Ep_Z6$3YVC{m8Rf~I--b-g6wI~ zI1Lh}LGd&gVUepgoFxm&C>R@0Te&9N((*7ccUGV>L=Rd$@Yb<%8p&4^r;4{~AL(jb2MV6Dfog)%gmb3-+daqQw>%*U_`&t}) zS*HVn>mek6er=jwlTNj+^3G-pEJn^)uNZr1p>D;cK_A==hASx8E>m-c$2LTGd4b~t z-aS{0|26b1K<<58b6yb?`hQoBs`AFWe9b}DbK4qsIV43lgX2QLVw0>#pMd<=6K>TC zz?C5NyE_??D$A1TgFI0n;OPM)8an5t3}nfgItyFB;cLxkuj&K;{EV6hI3Q%ybS)Ov zmS*?2&i`4w?{2{%zuKiSas!n*>KM6@6L@vKuj68Kng%xiWpme?ilJ*$BU=p}ACOH` zZchF&`CY5s($6<74bZi)#G{WcKTa;OkSfnm#~xK1=Cwu#mQ?2dH~__kZxQcl{SXHj z^1^{~PPB3Gt}1WxERByt7c%x7i?SF@?-^jAFLiehuRtqUv+WcV>GLPXc-m^wZE{k1TkFiti%qoI>F^lA~`I= zcYO;d=BFq1=l1BsdbPiV(TSSVRip)QhyVPyO4J8jq8bs$7cx*KTN>I#*KWFAH)k~g zG?CSa!Ou}?v7w$W$XP=|?PwDFV%T3g-rD|2js4D6>wpgYEZCu)9AhD+$9sRC#eB{) zzxD3}6WBxm4Sw3zKjC<5uO|&Osp2zl{bYzD2uKN6AI)5imeOsFAj)EG(Z7YR#g{fP zz+~a6hX`nnZU~Q_IlA(WcSdtx^V1#LyF$H0i$C1BR>K>yP>FF?CSlzopJC?E7P-i1 z)YgH9B%UM9nIHfvcf!xIZ7{R+}s|m7HiA3O;!QJCk$7Vimaxdk&5f} zq_N;I3;l*g&HDeevQ!S!(O$;&ojUu>$svn$+9uzsoynG9)-}5+#Ab1N^_RiSfHAhd z!h6n1o)zrSZ^*5&QS&#}ZG|;LwTs`IaRy7n++cG%on-?h=Ti*Jo&4 z&1C$pmZjbQ;9&MtP1NI$1GNIiGqc7iqs?>0$$31PQ|aYt;-ZSAY(?d~V4ayA_X|q| z#uYmLb$QW)1wF|RUWe{?Q)`Ie@lE}XbcD3ku3kwU>z&Z((2r>W5cS`H0jue2(a6C= g$zMwbo|^H{jXs%s+d}=rMyUZ?Yscdi$2{Zy0sGB{O#lD@ literal 0 HcmV?d00001 diff --git a/examples/opengl/textures/images/side6.png b/examples/opengl/textures/images/side6.png new file mode 100644 index 0000000000000000000000000000000000000000..798a9bb667e6a33520a57c7af226e7572c2812c7 GIT binary patch literal 2446 zcmb8w`9IWa8wc?FJ2NsI$JT;WCdnZ=DU}fBXfRW=Vg|8iZg`==|-!_DPq)upNc zfS+kpiWdL~Rw96i$0C^LzA; zp$QwVWkU-L7jERjEnK*j3(1&#NXduPeCV1FJuoHEy9D}_K)({mz*ND*RghT)L#kjX zh7Tk7Foq9f`4GhjV6p(F3Lr}W*%%?r6hf{L<_TdwMhpwZutW@bVpxUggSCB--v=A| zpa3I*tr94dK#>HBF;dtqg?&=^QVJy)8GJ8;QW+eTK^X?Zukgp2g*`lb3HEoDQ0m@r zEUEvw&h5eW01zoO%5UB=17oj(eFvzEfQ0OYD0%aQ+qDjw(+mAd8H?|xG63y~LSZ#i zP(N0u5q>V)qCM|B?=;scdnQ}&CpGsaI1=~)J;HDV1Ts2^uuA2c0Qvtgz6B1srMPRn zdh+){F!`ZA_e;O$hIva)F@GaLU~p$$xIquaa`m5oX-K9j-QT`PD@t_&(bM$|OUHo? z?}WI9=r8Lp=QqXJ<$!m$I`n(FxlS7S(QCE)NBEsMnQdUTxW~D+2|e39>U*2|9GT-W znc=IqXGuo$R<%WKK5(zpYTuY!{a!`v@`9t{O3R>mpBrCqJEV^?m=uM)E9mst>*@{**7KkydO_(NPxpFGu9)p1H z_^6;a6TxRTTM;m*hHeOi4)|4Ipl~8Vp9OR?h7-Op2!ahx`(!!Uh=<`~)COyHEmILU zNJNh$5kfVb!J@QJ1`GnI20qv$M!EIj0SlZY1tJkF5Slh&pz@T69v-@~M!B)7SzE~$)uxh{@3o}wx! z;-H%{kQ2`jhFoI}DX+vyJtn>2|T+}Td;ZDWZ2 zvvAp@NnvldvsH`rwpYlsR8M!V_dpb{FL1gz~I z+^XPY?Hy4QGiK%1KoFWc>r3}M2IyUN1hoBv`DbBBkXq;iIA->E8W}fQFQVIkvam^s zUGVX1PimE9dzBx2pTEhvbm;6ooXF??%S!59Q>&q1RhdXWbetBgbZ3(iKj8WW6BUV| zccFw{Ywyt5WN>%KV6OYU+ZkLzLVVZ4eB&!K@O#VW&taX9Llu(+*TL1<{`9Qg+rxGz zl61_Gi?eoet%8;1Vf2N&%@Mx-cSCFcGh9io{zN2UORZ5uliq>#G2L1cbe&@Lqt-Q7 z1zDFt?4+M{Pp|FZhnr3j1j(AF&9;8=qFoE`Eyazt+vsqM|9RP|Dd22on-anW6(K0U zR_EKJI#D2zR6SQwb4=LsT`6`rHnXk5qgalFu8j_Do2zo+XvmSO!2$bkHFVbwx~{Dw zZnstVH1CE1m??=(91%@$>^|-Xhl`>HecWxIYoK~x3>U4Pcba38Hw#>j)?O8M`5cju zk}Vw$%qLB&@L+xmEkp$%&DG zpL`uqoh7J5>#wiv&B^iLC#-HX{ctdNL3Yb;&F^*v9sERGU!Rmzrf1&Sp=_(nP@<{W zUtV!~)^i(r@1>zdzWr!M3b2dHZ8#Kb_txfxl2o0XepUa(O=i6u|B?m?w^Vf~nRqx-UhHg; zrmy~b8z7$~@^6I}hT0hc0E7P_^>RMivx7iyf2k(F@SO8Ae<~=cu@=o7jeDk-F`<>L z1Wt8>;{Ky?r1t2Irb=8-tIi^3w7l68T< zrSI^4-sr{03?P_U_F{O-tRZtH37~J@JStMqhhF(5BA|9*?qP@cg6XIS0AWO$xiS>x z@>7pU2xzDihvl@d+ksLMAdp;{r0y+VCXCydhzD@cOtfo(SCK#Yj`ldV+Zh9QMcQZP zszpPu^a-3O0sxZxQ76mJ`x%e)RdX}83WuMRcC-ZwzIl#olGBp`5&fSr)}VnZKQ?&$fRR910 literal 0 HcmV?d00001 diff --git a/examples/opengl/textures/textures.py b/examples/opengl/textures/textures.py new file mode 100755 index 0000000..fecbdd0 --- /dev/null +++ b/examples/opengl/textures/textures.py @@ -0,0 +1,232 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +"""PySide2 port of the opengl/textures example from Qt v5.x""" + +import sys +from PySide2 import QtCore, QtGui, QtWidgets, QtOpenGL + +try: + from OpenGL.GL import * +except ImportError: + app = QtWidgets.QApplication(sys.argv) + messageBox = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Critical, "OpenGL textures", + "PyOpenGL must be installed to run this example.", + QtWidgets.QMessageBox.Close) + messageBox.setDetailedText("Run:\npip install PyOpenGL PyOpenGL_accelerate") + messageBox.exec_() + sys.exit(1) + +import textures_rc + + +class GLWidget(QtOpenGL.QGLWidget): + sharedObject = 0 + refCount = 0 + + coords = ( + ( ( +1, -1, -1 ), ( -1, -1, -1 ), ( -1, +1, -1 ), ( +1, +1, -1 ) ), + ( ( +1, +1, -1 ), ( -1, +1, -1 ), ( -1, +1, +1 ), ( +1, +1, +1 ) ), + ( ( +1, -1, +1 ), ( +1, -1, -1 ), ( +1, +1, -1 ), ( +1, +1, +1 ) ), + ( ( -1, -1, -1 ), ( -1, -1, +1 ), ( -1, +1, +1 ), ( -1, +1, -1 ) ), + ( ( +1, -1, +1 ), ( -1, -1, +1 ), ( -1, -1, -1 ), ( +1, -1, -1 ) ), + ( ( -1, -1, +1 ), ( +1, -1, +1 ), ( +1, +1, +1 ), ( -1, +1, +1 ) ) + ) + + clicked = QtCore.Signal() + + def __init__(self, parent, shareWidget): + QtOpenGL.QGLWidget.__init__(self, parent, shareWidget) + + self.clearColor = QtCore.Qt.black + self.xRot = 0 + self.yRot = 0 + self.zRot = 0 + self.clearColor = QtGui.QColor() + self.lastPos = QtCore.QPoint() + + def freeGLResources(self): + GLWidget.refCount -= 1 + if GLWidget.refCount == 0: + self.makeCurrent() + glDeleteLists(self.__class__.sharedObject, 1) + + def minimumSizeHint(self): + return QtCore.QSize(50, 50) + + def sizeHint(self): + return QtCore.QSize(200, 200) + + def rotateBy(self, xAngle, yAngle, zAngle): + self.xRot = (self.xRot + xAngle) % 5760 + self.yRot = (self.yRot + yAngle) % 5760 + self.zRot = (self.zRot + zAngle) % 5760 + self.updateGL() + + def setClearColor(self, color): + self.clearColor = color + self.updateGL() + + def initializeGL(self): + if not GLWidget.sharedObject: + self.textures = [] + for i in range(6): + self.textures.append(self.bindTexture(QtGui.QPixmap(":/images/side%d.png" % (i + 1)))) + GLWidget.sharedObject = self.makeObject() + GLWidget.refCount += 1 + + glEnable(GL_DEPTH_TEST) + glEnable(GL_CULL_FACE) + glEnable(GL_TEXTURE_2D) + + def paintGL(self): + self.qglClearColor(self.clearColor) + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) + glLoadIdentity() + glTranslated(0.0, 0.0, -10.0) + glRotated(self.xRot / 16.0, 1.0, 0.0, 0.0) + glRotated(self.yRot / 16.0, 0.0, 1.0, 0.0) + glRotated(self.zRot / 16.0, 0.0, 0.0, 1.0) + glCallList(GLWidget.sharedObject) + + def resizeGL(self, width, height): + side = min(width, height) + glViewport(int((width - side) / 2), int((height - side) / 2), side, side) + + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0) + glMatrixMode(GL_MODELVIEW) + + def mousePressEvent(self, event): + self.lastPos = QtCore.QPoint(event.pos()) + + def mouseMoveEvent(self, event): + dx = event.x() - self.lastPos.x() + dy = event.y() - self.lastPos.y() + + if event.buttons() & QtCore.Qt.LeftButton: + self.rotateBy(8 * dy, 8 * dx, 0) + elif event.buttons() & QtCore.Qt.RightButton: + self.rotateBy(8 * dy, 0, 8 * dx) + + self.lastPos = QtCore.QPoint(event.pos()) + + def mouseReleaseEvent(self, event): + self.clicked.emit() + + def makeObject(self): + dlist = glGenLists(1) + glNewList(dlist, GL_COMPILE) + + for i in range(6): + glBindTexture(GL_TEXTURE_2D, self.textures[i]) + + glBegin(GL_QUADS) + for j in range(4): + tx = {False: 0, True: 1}[j == 0 or j == 3] + ty = {False: 0, True: 1}[j == 0 or j == 1] + glTexCoord2d(tx, ty) + glVertex3d(0.2 * GLWidget.coords[i][j][0], + 0.2 * GLWidget.coords[i][j][1], + 0.2 * GLWidget.coords[i][j][2]) + + glEnd() + + glEndList() + return dlist + + +class Window(QtWidgets.QWidget): + NumRows = 2 + NumColumns = 3 + + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + mainLayout = QtWidgets.QGridLayout() + self.glWidgets = [] + + for i in range(Window.NumRows): + self.glWidgets.append([]) + for j in range(Window.NumColumns): + self.glWidgets[i].append(None) + + for i in range(Window.NumRows): + for j in range(Window.NumColumns): + clearColor = QtGui.QColor() + clearColor.setHsv(((i * Window.NumColumns) + j) * 255 + / (Window.NumRows * Window.NumColumns - 1), + 255, 63) + + self.glWidgets[i][j] = GLWidget(self, self.glWidgets[0][0]) + self.glWidgets[i][j].setClearColor(clearColor) + self.glWidgets[i][j].rotateBy(+42 * 16, +42 * 16, -21 * 16) + mainLayout.addWidget(self.glWidgets[i][j], i, j) + + self.glWidgets[i][j].clicked.connect(self.setCurrentGlWidget) + QtWidgets.qApp.lastWindowClosed.connect(self.glWidgets[i][j].freeGLResources) + + self.setLayout(mainLayout) + + self.currentGlWidget = self.glWidgets[0][0] + + timer = QtCore.QTimer(self) + timer.timeout.connect(self.rotateOneStep) + timer.start(20) + + self.setWindowTitle(self.tr("Textures")) + + def setCurrentGlWidget(self): + self.currentGlWidget = self.sender() + + def rotateOneStep(self): + if self.currentGlWidget: + self.currentGlWidget.rotateBy(+2 * 16, +2 * 16, -1 * 16) + + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + window = Window() + window.show() + sys.exit(app.exec_()) diff --git a/examples/opengl/textures/textures.qrc b/examples/opengl/textures/textures.qrc new file mode 100644 index 0000000..efa9e9c --- /dev/null +++ b/examples/opengl/textures/textures.qrc @@ -0,0 +1,10 @@ + + + images/side1.png + images/side2.png + images/side3.png + images/side4.png + images/side5.png + images/side6.png + + diff --git a/examples/opengl/textures/textures_rc.py b/examples/opengl/textures/textures_rc.py new file mode 100644 index 0000000..6b4aa03 --- /dev/null +++ b/examples/opengl/textures/textures_rc.py @@ -0,0 +1,797 @@ +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Wed Dec 28 19:57:29 2005 +# by: The Resource Compiler for PyQt (Qt v4.1.0) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x05\x3e\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x01\x00\x00\x00\x01\x00\x08\x03\x00\x00\x00\x6b\xac\x58\x54\ +\x00\x00\x00\xa5\x50\x4c\x54\x45\x00\x7c\xf8\x00\x80\xf8\x08\x80\ +\xf8\x08\x84\xf8\x10\x84\xf8\x10\x88\xf8\x18\x88\xf8\x18\x8c\xf8\ +\x20\x90\xf8\x28\x90\xf8\x28\x94\xf8\x30\x94\xf8\x30\x98\xf8\x38\ +\x98\xf8\x38\x9c\xf8\x40\x9c\xf8\x40\xa0\xf8\x48\xa4\xf8\x50\xa4\ +\xf8\x50\xa8\xf8\x58\xa8\xf8\x58\xac\xf8\x60\xb0\xf8\x68\xb0\xf8\ +\x68\xb4\xf8\x70\xb4\xf8\x70\xb8\xf8\x78\xbc\xf8\x80\xbc\xf8\x80\ +\xc0\xf8\x88\xc4\xf8\x90\xc4\xf8\x90\xc8\xf8\x98\xcc\xf8\xa0\xcc\ +\xf8\xa0\xd0\xf8\xa8\xd4\xf8\xb0\xd8\xf8\xb8\xd8\xf8\xb8\xdc\xf8\ +\xc0\xdc\xf8\xc0\xe0\xf8\xc8\xe0\xf8\xc8\xe4\xf8\xd0\xe4\xf8\xd0\ +\xe8\xf8\xd8\xe8\xf8\xd8\xec\xf8\xe0\xec\xf8\xe0\xf0\xf8\xe8\xf4\ +\xf8\xf0\xf4\xf8\xf0\xf8\xf8\xf8\xf8\xf8\xf8\xfc\xf8\xce\x99\xaa\ +\x77\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x00\x48\x00\x00\x00\ +\x48\x00\x46\xc9\x6b\x3e\x00\x00\x04\x3f\x49\x44\x41\x54\x78\xda\ +\xed\xdd\xe1\x76\xd2\x40\x10\x05\xe0\x0d\x34\x05\x91\x62\x28\x82\ +\x14\x24\x16\x53\xc4\x88\x18\x13\xd3\x79\xff\x47\xf3\x8f\x9e\xee\ +\x20\x25\x9b\x9e\xb6\xb6\x73\xef\x3e\x40\x0f\xfb\x41\x93\xbd\x33\ +\x13\x70\x02\xbe\x1c\x01\x08\x40\x00\x02\x10\x40\x1c\xe0\x22\x00\ +\x01\x08\xa0\x01\xa0\x2e\x7d\x04\x20\x00\x01\x08\x40\x00\x02\x10\ +\x80\x00\x04\x20\x00\x01\x08\x40\x00\x02\x10\x80\x00\x04\x20\x00\ +\x01\x08\x40\x00\x02\x10\x80\x00\x04\x20\x00\x01\x08\x40\x00\x02\ +\x10\xe0\x05\xac\x9f\xd9\x7c\x38\x02\x05\xa8\xf3\x74\xd2\x73\xce\ +\xb9\x1e\x20\x40\x91\xcd\x87\xd1\xdf\x21\x96\x2e\x16\x40\x9d\xa7\ +\x93\xf3\x63\x63\x3c\x08\x00\xea\x8d\x07\x03\xa8\xf3\xf4\x32\x3e\ +\x39\xc8\x65\x18\xa0\x3c\xfe\xc6\xc3\x00\x54\xbd\xa0\x51\x3e\xbb\ +\x00\x53\x87\x0d\x70\xe3\xb0\x01\xaa\x18\x1c\x60\xe2\xb0\x01\x32\ +\x87\x0d\x50\xc6\xe0\x00\x63\x87\x0d\x90\x39\x6c\x80\xf2\x0c\x1c\ +\x60\xec\xb0\x01\x32\x87\x0d\x10\x74\x07\xb0\x0c\x70\xe9\xb0\x01\ +\x32\x87\x0d\x50\xc5\xe0\x00\x7e\x06\x88\x00\x01\x54\x08\x5e\xe0\ +\x01\xa8\x2a\x50\xbf\xc6\x03\x98\xf9\x1b\xdc\x0a\x1c\xc0\xd6\xdf\ +\xdf\x4c\xe0\x00\xea\xbe\xb7\xbd\xb8\xc2\x03\xb8\xf2\xb7\x97\x09\ +\x1c\xc0\x37\xff\xb6\x97\x08\x1e\xc0\xc0\x3f\x02\x14\x78\x00\x2b\ +\x7f\x73\x4b\x81\x03\x28\x3a\xea\x08\x80\x07\x90\xf8\x7b\xdb\x08\ +\x1c\xc0\xda\xdf\xda\x58\xe0\x00\x54\x08\xec\x14\x78\x00\xaa\x13\ +\xba\x12\x38\x00\x75\x06\xfe\x73\x05\x44\x02\x50\x67\x60\xf7\x45\ +\xe0\x00\x96\xfe\xbe\x26\x02\x07\xf0\xc3\x3f\x03\x77\x4b\x3c\x00\ +\x75\x04\x48\x05\x0e\x40\xd5\x81\x07\x02\x07\xa0\xeb\xc0\x39\x1e\ +\xc0\xfc\xa0\x0c\x84\x06\xb0\x8b\x0e\xca\x40\x68\x00\x43\x7f\x4f\ +\x6b\x81\x03\x50\x21\x68\x28\x70\x00\xea\x0a\x18\xed\xf0\x00\x3e\ +\xf8\x3b\x9a\x0b\x1c\xc0\xa9\x2b\x20\x04\xc0\xf0\xb0\x10\x0e\x06\ +\xf0\xd9\xdf\xcf\x85\xc0\x01\xd4\xe7\xf7\x9e\x01\x31\x00\x54\xfb\ +\x3b\x11\x38\x80\x42\x0d\x40\xec\xf0\x00\xc6\xf7\x94\x41\x50\x00\ +\x36\xee\x9f\x56\x18\x16\xc0\x9b\xfb\x53\x20\x04\xc0\xb5\xbf\x97\ +\x4e\x09\x07\xa0\xcb\x20\x0b\x81\x03\x50\xb7\xc0\xb3\x0a\x0e\x40\ +\xdf\x02\x53\x81\x03\x50\xcf\x44\xf5\x6a\x38\x80\xdc\x9d\xa8\x03\ +\x21\x00\xa8\x14\xd8\x17\x38\x00\x3d\x11\x7e\x03\x07\x70\xdb\x3f\ +\x55\x08\x04\x00\xf8\xe4\xf4\x44\x2c\x1a\xc0\xaf\xb8\x29\x06\x1b\ +\x07\x50\xcd\xf0\xa3\x31\xd8\x36\x40\xd9\x69\x8c\xc1\xb6\x01\x66\ +\xcd\x31\xd8\x34\x80\x3e\x04\xcf\x04\x0e\xe0\x7d\x40\x0c\xb6\x0c\ +\xf0\xdd\x05\xc4\x60\xcb\x00\xe3\x90\x18\x6c\x18\x40\xa7\xa0\x54\ +\xe0\x00\x46\x41\x31\xd8\x2e\xc0\x36\x2c\x06\xdb\x05\x18\x85\xc5\ +\x60\xb3\x00\xdb\xc0\x18\x6c\x16\x60\x18\x18\x83\xad\x02\x6c\x42\ +\x63\xb0\x55\x80\x61\x68\x0c\x36\x0a\xb0\x09\x8e\xc1\x46\x01\x2e\ +\x82\x63\xb0\x4d\x00\x7d\x0b\xd8\xe3\x01\xbc\xf3\x5f\xfc\xa5\xc0\ +\x01\xe4\xad\xaf\x00\xc6\x00\x92\xb6\xb7\x00\x63\x00\x3b\xf5\xda\ +\xbf\xe2\x01\x4c\x5a\x1e\x02\xad\x01\xec\xa3\x76\x29\xc0\x1c\xc0\ +\xac\x5d\x0c\x34\x07\x50\xaa\x0f\xc0\x35\x1e\x80\x1a\x88\xe9\xd6\ +\x70\x00\x55\xb7\x45\x29\xd8\x22\xc0\x2a\xbc\x19\x64\x12\xe0\xf6\ +\xbc\x75\x0c\xb2\x05\xa0\x1e\x0b\x38\x36\x16\x6f\x1d\xc0\xff\x7e\ +\x1c\x37\x12\x38\x80\xb6\xa5\x50\x73\x00\xe3\x07\x1d\x82\xec\x00\ +\xec\xdb\x35\x43\xec\x01\xa8\x53\x70\x4f\xe0\x00\xf4\x21\x68\x8d\ +\x07\x90\x3e\xfc\x03\x60\x03\xa0\xe9\xb7\x62\x1e\x79\x15\x2f\x0d\ +\xe0\xe6\x79\xf7\x1f\xd2\x6f\x7a\x5e\x80\x04\x1c\x60\xef\xc0\x01\ +\xe6\xe0\x00\x75\x17\x1c\xe0\xda\x81\x03\x0c\xc0\x01\x72\x07\x0e\ +\x30\x05\x07\xa8\x22\x70\x80\xbd\x43\xff\x17\x40\xff\x04\xc8\x5b\ +\x5e\x04\xc1\x01\x52\x74\x80\x2d\x3a\x40\x89\x0e\x20\x31\x3a\x40\ +\x82\x0e\x70\x85\x0e\xf0\x08\xaf\xc4\xe0\xb3\xc3\x04\x20\x00\x01\ +\x08\x40\x00\x02\x10\x80\x00\x04\x20\x00\x01\x08\x40\x00\x02\x9c\ +\x58\x0d\xbf\x3b\x5c\x9b\x07\x68\x28\x29\x56\xe6\x01\x76\x4f\x3f\ +\x10\xf6\xb2\x01\x36\xa7\x01\x72\xf3\x00\x0d\x7d\x95\xcc\x3c\x40\ +\x43\x67\x6d\x69\x1e\xa0\x61\xc8\x34\xb1\x0e\xd0\x34\x5e\xd0\xb5\ +\x0e\xf0\xb1\xa9\x07\x90\x1b\x07\x68\x1c\xb3\x9e\xd9\x06\x58\x37\ +\x76\x81\xba\x95\x65\x80\x2a\x60\xce\x7e\x69\x19\x20\x64\xba\x24\ +\x2a\xec\x02\xac\x82\x5a\xa1\x83\xda\x2a\xc0\x22\xb0\x19\x9c\xd4\ +\x26\x01\xf6\xa3\xe0\x76\xf8\x60\x67\x0e\xa0\xde\x4c\xda\xcc\x17\ +\x46\xd3\xfc\x15\x03\xac\x96\x07\x6b\x31\xbd\x68\x3f\x5d\x19\x27\ +\xf3\xbb\xbf\x50\xbc\x2a\x80\x27\x18\x25\xdd\x12\x80\x00\x04\x20\ +\x00\x01\x08\x40\x00\x02\x18\x28\x8a\xfe\xaf\x45\x00\x02\x10\x80\ +\x00\x04\x20\x00\x01\x08\x40\x00\x02\x10\x80\x00\x04\x20\x00\x01\ +\x08\x40\x00\x02\x10\x80\x00\x04\x20\x00\x01\x08\x40\x00\x02\x10\ +\x80\x00\x04\x20\x00\x2a\x00\xda\x22\x00\x01\x08\x70\x07\x80\xbb\ +\x08\x40\x00\x02\x10\x00\x7a\xfd\x06\x0e\x4c\xb1\x67\x70\xf4\x76\ +\x0b\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x07\xa7\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x01\x00\x00\x00\x01\x00\x08\x03\x00\x00\x00\x6b\xac\x58\x54\ +\x00\x00\x00\x8d\x50\x4c\x54\x45\x78\xfc\x00\x80\xfc\x00\x80\xfc\ +\x08\x80\xfc\x10\x88\xfc\x10\x88\xfc\x18\x88\xfc\x20\x90\xfc\x20\ +\x90\xfc\x28\x90\xfc\x30\x98\xfc\x30\x98\xfc\x38\x98\xfc\x40\xa0\ +\xfc\x40\xa0\xfc\x48\xa0\xfc\x50\xa8\xfc\x50\xa8\xfc\x58\xa8\xfc\ +\x60\xb0\xfc\x60\xb0\xfc\x68\xb0\xfc\x70\xb8\xfc\x70\xb8\xfc\x78\ +\xc0\xfc\x80\xc0\xfc\x88\xc0\xfc\x90\xc8\xfc\x90\xc8\xfc\x98\xc8\ +\xfc\xa0\xd0\xfc\xa0\xd0\xfc\xa8\xd0\xfc\xb0\xd8\xfc\xb0\xd8\xfc\ +\xb8\xd8\xfc\xc0\xe0\xfc\xc0\xe0\xfc\xc8\xe0\xfc\xd0\xe8\xfc\xd0\ +\xe8\xfc\xd8\xe8\xfc\xe0\xf0\xfc\xe0\xf0\xfc\xe8\xf0\xfc\xf0\xf8\ +\xfc\xf0\xf8\xfc\xf8\xa0\x01\x02\x2a\x00\x00\x00\x09\x70\x48\x59\ +\x73\x00\x00\x00\x48\x00\x00\x00\x48\x00\x46\xc9\x6b\x3e\x00\x00\ +\x06\xc0\x49\x44\x41\x54\x78\xda\xed\xdd\xdb\x62\x9b\x38\x10\x06\ +\x60\x4b\x85\x42\x21\x66\xa1\x26\x1c\x8a\x03\x81\x9a\x40\x21\xf0\ +\xfe\x8f\xb7\x17\xbb\x6d\xe2\xc6\x18\x8c\xf5\x13\x81\x86\xcb\x36\ +\x17\xf8\x33\x16\xd2\x68\x66\xb4\xeb\x15\xbf\x76\x04\x40\x00\x04\ +\x40\x00\x04\xd0\xef\x14\xbc\x08\x80\x00\x08\xe0\x1c\x40\xa9\xa1\ +\x8f\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\ +\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\ +\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\ +\x80\x00\x08\xe0\xae\xab\x43\xde\x7c\xd7\x49\x0f\xf0\xcc\x76\x5c\ +\x37\xac\x07\xc7\x3b\x04\x61\x9c\x3c\x65\x79\x51\x56\x75\xd3\x4e\ +\xba\xf3\xae\x6d\xea\xaa\x3c\x15\x79\x96\x3e\x1d\x7f\xc4\x51\x18\ +\xf8\x07\xcf\x75\xf6\xb6\x65\x1a\xba\xc6\xd9\x6e\xc7\x7f\x49\x0e\ +\x50\xf2\xc1\xcc\x2c\xc6\x35\xdd\x30\x4d\xcb\xde\x3b\x8e\xeb\x79\ +\x07\xff\x31\xf8\xf0\xf9\xc6\x2f\x47\x72\x80\x00\x9d\xe0\x66\x48\ +\x0e\x10\xa1\x01\x7c\xc9\x01\x12\x34\x40\x26\x39\x40\x8a\x06\x68\ +\x25\x07\x28\xc0\x9f\xdf\x94\xfd\x35\x58\x82\x01\x3c\xd9\x01\x6a\ +\x30\xc0\x0f\xd9\x01\x5a\x30\x40\x21\xfd\x4c\x10\x0c\xf0\x4b\x7a\ +\x00\x0e\xfd\xfc\x4c\xfe\xc5\x90\x0e\x05\xd0\xe4\x07\x30\x65\x7f\ +\x0b\xa2\x01\x6c\x28\x80\x25\x3f\xc0\x1e\x0a\x60\xcb\x0f\xe0\xaa\ +\x0e\x70\x50\x1d\xe0\x51\x75\x80\x50\x75\x80\x58\xf5\xb7\x00\x36\ +\x22\xf2\x4d\x7e\x80\x54\xf5\x89\x50\x26\x79\x48\x14\x0e\x90\xab\ +\xbe\x16\xc0\xc6\xc4\x56\xb0\x1a\x04\xc7\xc4\xe4\xdf\x1a\x7b\x51\ +\xfd\x2d\x50\x41\x7f\x01\x95\xfc\x00\xf5\x87\xfd\xc0\xff\x36\x04\ +\xff\xec\x08\xfa\x41\x18\x46\x71\x9c\x1c\x8f\x69\x96\xe5\x45\x71\ +\x2a\xcb\xb2\x3c\xfd\x2c\xf2\x3c\xcb\xd2\xa7\x63\x92\xc4\x51\x14\ +\x86\x81\xef\x1f\xbe\x7b\xae\xeb\xec\xf7\xb6\x6d\x99\xa6\xf1\x55\ +\xd7\x34\x1e\xf5\xf2\x03\x34\x67\x00\x61\x2f\xdf\xb5\x28\x40\xa4\ +\x1e\xc0\x79\x5c\x3c\x56\x1d\x20\x51\x0f\xe0\xf5\x0c\xe0\xa8\x1e\ +\x40\x77\x06\xf0\xa4\x3a\x40\xaa\x3a\x40\xa6\x3a\x40\xae\x3a\x40\ +\xa1\x3a\xc0\x4f\xd5\x01\x4e\xaa\x03\x94\xaa\x03\x54\xaa\x03\xd4\ +\xaa\x03\x34\xaa\x03\xb4\x04\xa0\x38\x40\xa7\x3a\x40\xaf\x38\x00\ +\x53\x1d\x80\x13\x80\xe2\x00\x9a\xea\x00\xba\xea\x00\x86\xea\x00\ +\xa6\xea\x00\xdf\x54\x07\xb0\x54\x07\xb0\x55\x07\xd8\xab\x0e\xe0\ +\x5c\xfc\x93\xf6\x74\x0c\xbd\xbd\xa9\x6b\x9c\xed\xd8\x17\xdd\x30\ +\x6d\xf7\x31\xce\x4e\xaf\x1b\x04\x70\x3f\xfc\xf7\x4b\xe2\x1a\x83\ +\x39\x70\x6e\x94\x77\x5b\x06\xe8\x32\x4f\x1b\x4d\x82\x79\x88\x5f\ +\xd6\x0d\xf0\x3a\x50\xe6\xd8\x65\xee\xd4\x7a\x2a\x3d\xac\x57\x0c\ +\x70\x96\x1f\x70\xf8\xfd\xaf\xa7\xc3\x6d\xd5\x64\xf6\xb1\x5b\x2b\ +\x40\xf3\xb1\xd6\xbd\x4d\x66\x54\x52\x69\x71\xb7\x01\x80\xa0\xef\ +\xfb\xea\x30\xb3\x94\x10\x45\xb0\x64\x9a\x5c\xd8\x3f\xdf\x53\x45\ +\xf6\x35\x5f\x21\xc0\x59\xa6\xa8\x6d\xdc\x5b\x2c\xde\xae\x0e\xe0\ +\x24\x38\x3d\x3c\x5f\x1b\x80\xf0\x6c\xf1\x70\x65\x00\xcf\xc2\x13\ +\x84\x9d\x76\x55\x00\x80\x92\x19\xb3\x5d\x13\x00\xa2\x68\x4a\xac\ +\xc0\x1a\xcb\xe6\xcc\x66\x3d\x00\x98\xc2\x49\xb3\x5b\x0d\x80\x8f\ +\x29\x95\x70\x57\x03\xe0\x81\x8a\x45\xe2\xb5\x00\xa0\xca\xe7\x59\ +\xb1\x12\x00\x58\x03\x05\xa3\x5b\x07\x80\x05\xab\x98\x0a\xd6\x01\ +\x60\xc0\x00\xd8\xcb\x2a\x00\x34\x18\xc0\xee\x61\x15\x00\x0c\x07\ +\x20\x28\xf1\x16\x0b\xd0\x21\xeb\x26\xf7\x2b\x00\x68\xa0\x95\xb3\ +\xa5\xfc\x00\x03\x95\xb3\xcc\xf2\xa2\xb4\xa8\x9a\xd7\xbe\xef\xdb\ +\xa6\x2e\x8e\xa1\x37\x67\xb4\xf4\xe4\x07\xb8\x10\x10\xe2\x4e\x7c\ +\xf1\x9b\x6b\x73\xff\xd6\xc6\x63\xbc\x93\x1e\xe0\xef\xfe\x09\xcc\ +\xcd\xae\xdd\x74\xe9\xdf\x16\x32\x4e\xa5\x07\x38\x8f\x87\xe8\xd1\ +\xe8\x4a\xbe\x4b\xf4\x85\x87\x41\x2c\xc0\xfb\x78\x88\x3e\xad\x6c\ +\xb2\x8b\xa7\x3f\x05\xac\x95\x1d\xe0\xad\xb1\x32\x9f\xbe\x7e\x6b\ +\xa7\xaf\xa0\x72\xd9\x01\x82\x79\x11\xfd\x27\xbe\xdc\x82\x00\x3c\ +\x0f\xf0\xd9\xac\x70\x7e\x35\x71\x24\xb0\x64\x07\xe8\xfb\xca\x99\ +\x15\xc9\x6e\xa6\x2d\x23\x59\x27\x3d\x40\xdf\x9f\x66\x45\x6f\x3a\ +\x6b\xa1\xc9\x20\x1e\x60\xe6\xd5\x1a\xcb\xcc\x04\xa4\x05\xe8\xeb\ +\x29\x4b\xe9\x68\xc3\x00\x93\xfa\x90\x79\x5b\x06\x98\x12\x53\xb7\ +\x37\x0d\xd0\x8d\xbf\x0c\xcd\x4d\x03\x4c\xd8\x5a\x35\xb6\x0d\x30\ +\x1e\x54\xd6\x36\x0e\x30\x3a\x0e\xf2\x8d\x03\x8c\x86\xd5\xd9\xd6\ +\x01\x62\xd5\x9f\x80\xb1\xa8\xaa\xbe\x75\x80\xb1\xf6\xf4\xe6\xe6\ +\x01\x62\x95\x27\x42\x7d\x3f\xda\x94\xd4\xd9\x3c\xc0\xc8\x29\x25\ +\xde\xf6\x01\xf6\xe0\xbc\x49\xe9\x01\x7c\x65\xe3\x01\xff\x5f\xd7\ +\x33\x0d\xab\xed\x03\xe4\xe0\xd6\xd2\xd2\x03\x54\xd8\x69\x80\xfc\ +\x00\xbf\xc0\xfb\xc3\xd2\x03\x5c\x3d\xaf\x2d\x51\x00\xe0\x6a\x92\ +\x49\xad\x00\x40\x8f\x1d\x02\xd6\xfd\x04\x84\x2a\x00\x34\xe0\x3c\ +\x31\xe9\x01\x6a\x64\x40\x70\x0d\x00\x57\xea\xce\x7c\x99\x01\x2a\ +\x57\x50\x61\x4b\x8a\x9c\x07\xc3\x00\x5a\x9f\x89\x2a\x70\x8b\xd6\ +\x98\x28\x19\x7f\xd9\xed\x76\x5c\xcc\x23\x30\x7c\x5e\x5d\x26\x2b\ +\xc0\xb3\x21\x32\xa1\xdd\xc4\xc5\x43\x41\x00\x7f\xaa\x64\x98\x88\ +\xc6\x07\x1d\x03\x57\xcd\x88\x07\x78\x7b\x66\xff\x11\x70\x7f\x83\ +\xb5\xb7\x5a\x27\x2b\x40\x2a\xb4\x97\x78\x30\x04\x20\xea\xb0\x06\ +\xf1\x00\x8d\xd0\xc2\x9e\xaf\xc0\x65\x00\x6a\x10\x34\x04\xe6\xf1\ +\x95\xc0\x14\x49\x18\xc0\xbb\x30\x26\xbb\x77\xb6\xee\x43\xe7\x00\ +\x20\x80\xf7\x7b\xda\xfa\x7d\x93\x81\x76\x60\x57\x80\x55\x32\x03\ +\xb4\xe2\x8a\x5c\x63\x78\xe1\x28\x64\x26\x68\x8a\xba\xd7\x56\x43\ +\xff\x00\x30\x00\x67\x3f\x5c\x76\xc7\x70\x35\xf0\x0e\xd4\x64\x2f\ +\x9f\x3f\xef\x9b\xc1\x67\xff\x5e\x6b\x86\x5c\x04\x00\x01\xda\xf3\ +\x1b\xd7\xe7\x4e\x89\x2d\x60\x18\x00\xbb\x1a\xfc\xeb\xce\x67\x0a\ +\x04\xf8\x01\x00\x05\xf0\xf7\xad\xeb\x73\x7e\x05\x29\xbe\x7b\x04\ +\x0c\xe0\xc3\x7e\x9e\x76\xfb\x84\xa8\xb8\x3c\x00\xe8\xa2\x4f\xa9\ +\x80\x00\xbc\x7e\xb8\x79\x7e\xeb\x3e\xf6\xcf\xcb\x53\x20\x2e\xbc\ +\xbf\x22\x26\x24\x76\x61\xf8\xf2\x6f\x7a\x74\xb3\xcb\xdf\x3f\x17\ +\x7f\x56\x15\x06\xe0\xd2\xf8\x65\xde\x50\xdd\x11\x0d\x7c\x7e\xc0\ +\x49\x4d\x18\x80\x8b\x9b\xfa\x2c\x98\xf8\x10\x34\x03\xb9\x71\x1a\ +\xe2\xa0\x26\x50\x54\x78\x60\x04\x9b\x14\xc5\x18\xaa\x9c\xd4\x21\ +\xbd\x45\x41\xfb\x02\x43\x69\xde\x46\x32\xf6\x14\xa4\x43\xe9\xc1\ +\x06\xa6\xb7\x2a\x08\xe0\x71\x78\x3f\x2b\xb8\xf2\x20\xb7\x91\xbe\ +\x54\x17\x39\x30\xc0\xd5\x3c\x77\x23\x28\x2e\x3d\x07\x75\xf2\x30\ +\x18\x02\x66\xb0\x23\x8b\x41\x00\xed\x58\x9a\xbb\x75\x48\xf2\xea\ +\xf7\x97\xda\x96\x69\xe4\x5c\x2b\x12\xd3\x70\x47\x35\xa2\xf6\x06\ +\xa7\x75\x84\x60\x5c\xd3\xb5\xf1\x46\x2b\x36\xf0\x90\x32\x14\xc0\ +\x41\x5c\xab\x10\x0e\x3d\xb0\x1a\x05\x70\x14\xd7\x2c\x06\x7b\x48\ +\x1f\x6c\x7b\x5c\xd0\xc7\xd7\xd0\x67\x15\xc3\x12\x24\xb8\x88\x8f\ +\xcf\x7c\xf8\x01\x75\x30\x00\x01\x7d\xe4\xd8\xf7\x05\x8e\xa8\x84\ +\x01\xdc\xdf\x4c\xd3\x5d\xe4\x88\x52\x18\x40\x76\xe7\xb7\xef\xbd\ +\xf4\xfd\xaa\x01\xee\xea\xa2\x35\xa1\xe1\x8e\xf4\x00\x7d\x30\xb7\ +\x95\x1e\x73\x96\x3c\xa3\x1c\x98\x26\xd7\xa5\x33\x9a\xe9\xb3\x7d\ +\xb2\xec\xd9\xb4\xd8\x3c\xc1\x3a\xba\xe9\x34\x09\xee\xa6\x8b\x9f\ +\xcb\x0a\x4f\x94\xac\x93\xfd\xa4\xae\x8a\x9a\x13\x15\x9f\x71\x28\ +\xeb\x22\x99\xa2\xa7\xd8\x35\xae\x28\x68\xb6\x9f\x7e\xda\xa1\xd4\ +\x8b\xa5\xca\x76\x2f\x59\x1c\xb8\x7b\xcb\xd0\x38\x67\x3b\xc6\x75\ +\xc3\xb4\xf7\x6e\x90\xe4\xd5\xe7\x1e\xc6\x2b\x7f\xbd\x00\x01\x10\ +\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\ +\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\ +\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x40\x00\x54\xbb\ +\x08\x80\x00\x08\xe0\x0d\x40\xdd\x8b\x00\x08\x80\x00\x08\x40\xe9\ +\xeb\x5f\x29\x7e\x47\x9c\x8c\x3f\x1d\xdc\x00\x00\x00\x00\x49\x45\ +\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x09\x8e\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x01\x00\x00\x00\x01\x00\x08\x03\x00\x00\x00\x6b\xac\x58\x54\ +\x00\x00\x00\xf0\x50\x4c\x54\x45\xf8\x00\x78\xf8\x00\x80\xf8\x04\ +\x80\xf8\x08\x80\xf8\x0c\x80\xf8\x10\x80\xf8\x10\x88\xf8\x14\x88\ +\xf8\x18\x88\xf8\x1c\x88\xf8\x20\x88\xf8\x20\x90\xf8\x24\x90\xf8\ +\x28\x90\xf8\x2c\x90\xf8\x30\x90\xf8\x30\x98\xf8\x34\x98\xf8\x38\ +\x98\xf8\x3c\x98\xf8\x40\x98\xf8\x40\xa0\xf8\x44\xa0\xf8\x48\xa0\ +\xf8\x4c\xa0\xf8\x50\xa0\xf8\x50\xa8\xf8\x54\xa8\xf8\x58\xa8\xf8\ +\x5c\xa8\xf8\x60\xa8\xf8\x60\xb0\xf8\x64\xb0\xf8\x68\xb0\xf8\x6c\ +\xb0\xf8\x70\xb0\xf8\x70\xb8\xf8\x74\xb8\xf8\x78\xb8\xf8\x7c\xb8\ +\xf8\x80\xb8\xf8\x80\xc0\xf8\x84\xc0\xf8\x88\xc0\xf8\x8c\xc0\xf8\ +\x90\xc0\xf8\x90\xc8\xf8\x94\xc8\xf8\x98\xc8\xf8\x9c\xc8\xf8\xa0\ +\xc8\xf8\xa0\xd0\xf8\xa4\xd0\xf8\xa8\xd0\xf8\xac\xd0\xf8\xb0\xd0\ +\xf8\xb0\xd8\xf8\xb4\xd8\xf8\xb8\xd8\xf8\xbc\xd8\xf8\xc0\xd8\xf8\ +\xc0\xe0\xf8\xc4\xe0\xf8\xc8\xe0\xf8\xcc\xe0\xf8\xd0\xe0\xf8\xd0\ +\xe8\xf8\xd4\xe8\xf8\xd8\xe8\xf8\xdc\xe8\xf8\xe0\xe8\xf8\xe0\xf0\ +\xf8\xe4\xf0\xf8\xe8\xf0\xf8\xec\xf0\xf8\xf0\xf0\xf8\xf0\xf8\xf8\ +\xf4\xf8\xf8\xf8\xf8\xf8\xfc\xf8\xd6\xac\x3e\xe0\x00\x00\x00\x09\ +\x70\x48\x59\x73\x00\x00\x00\x48\x00\x00\x00\x48\x00\x46\xc9\x6b\ +\x3e\x00\x00\x08\x44\x49\x44\x41\x54\x78\xda\xed\xdd\x6b\x5b\xda\ +\x48\x14\x00\xe0\x40\x52\x01\x05\x54\xac\xc8\x4a\x11\x61\x2d\x56\ +\xa4\x5c\xaa\x60\x15\xb9\x88\x60\x00\x49\xce\xff\xff\x37\xfb\xa1\ +\xbb\xed\xb6\x0f\x73\x83\x99\x30\xc9\x9c\xf9\xac\x79\x98\x37\x99\ +\xfb\x99\x19\x0b\x0c\x4f\x16\x02\x20\x00\x02\x20\x00\x02\x80\x65\ +\x60\x42\x00\x04\x40\x80\xdf\x01\x8c\xaa\xfa\x10\x00\x01\x10\x00\ +\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\ +\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\ +\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x60\xf7\x69\xe5\ +\x4e\x86\x4f\x0f\xdd\xce\xa3\x61\x00\xf3\xe7\xbb\x9b\xf2\xd9\x51\ +\x32\xfe\x33\x96\xa7\xb8\x34\x04\xc0\x1f\xb7\x2f\x73\x1f\xd6\x44\ +\x33\x25\x9f\xa2\x0f\xe0\xf5\xaf\x4f\xe2\xe4\x80\xae\xaa\x17\x69\ +\x80\x79\xbb\x60\x33\x42\xda\x32\xe3\xc8\x02\xbc\x77\xf2\x31\x8e\ +\xa0\xbe\x78\x3d\x9a\x00\xe3\xb2\xcd\x1b\xd7\x98\x9b\x45\x0f\xa0\ +\x77\x2c\x12\xd9\xe9\xb8\xd1\x02\xf0\x3b\x69\xb1\xd0\xd6\x46\xb4\ +\xbe\x80\x7b\xc1\xec\x5b\xb5\x48\xd5\x01\xfd\xac\x68\x68\x73\x25\ +\x4a\x95\xe0\xec\x9c\x23\xc7\x76\x36\x5f\xba\xaa\x37\x5a\xed\x4e\ +\xbb\x59\xff\x7c\x1d\xa1\x66\xd0\xaf\x33\x6a\xfe\x58\xa6\xf4\xb5\ +\x3f\x8f\xec\x60\x68\x44\xff\xfa\xd3\x95\xde\x52\xfd\x8f\xd8\x1d\ +\x80\x5f\xa3\x75\x7b\xb2\x37\xaf\x11\x1f\x0e\x8f\x29\xaf\xdf\xa9\ +\xbc\x44\x7e\x3e\xa0\x41\x1e\xf0\xa4\xdb\x1e\x40\xc4\x01\x16\x67\ +\xc4\xec\x1f\xf5\x0c\x98\x11\x1a\x24\x49\xd9\x3f\xe8\x9a\x30\x25\ +\xd6\x22\x7d\xfe\x4e\xc3\x37\x60\x4e\xd0\xbb\x20\xbd\xfe\x73\x17\ +\x20\xfa\x00\xee\x11\x21\xfb\x7b\x5d\x00\x03\x00\x5e\x48\xc5\xff\ +\x74\x0e\x26\x00\xf4\x1d\x42\xfe\xaf\x01\x4c\x00\xb8\x27\x54\x7f\ +\x4e\x0f\x8c\x00\x68\x10\x5e\x7f\x72\x02\x46\x00\xd4\x49\x5d\xbf\ +\x19\x18\x01\x70\x4b\xc8\xff\xe1\x02\x8c\x00\x20\xe5\x3f\xb3\xd3\ +\xfc\x07\x07\x40\x2a\xff\xe9\x39\x18\x01\xf0\x8d\x90\xff\xc4\x0c\ +\x8c\x00\x78\x22\xb4\x7f\xf6\x08\x8c\x00\x78\x21\xf5\x7f\xba\x60\ +\x04\x80\x4b\xea\xff\x56\xc1\x08\x00\xef\x90\x90\xff\x63\xdf\x0c\ +\x80\x32\x69\xf8\x3f\x03\x23\x00\xda\xa4\xf1\x7f\x1b\x8c\x00\x18\ +\x93\xe6\x7f\xf2\x60\x04\xc0\x32\x45\x5a\xf0\x9a\x99\x01\x50\x22\ +\x15\x80\x3a\x18\x01\xf0\x9d\x94\xff\x7d\xdf\x08\x80\x65\x82\x04\ +\x70\x0f\x46\x00\x14\x89\xeb\x1f\x60\x04\x00\xb1\x00\x58\x0f\x46\ +\x00\x78\x07\xc4\xc5\x5f\x30\x02\xe0\x86\xf8\x01\x74\x8c\x00\x70\ +\x89\xf1\x1f\x09\xcf\x08\x80\x62\x30\x71\x5e\xda\x02\x8c\xc8\x11\ +\x10\x53\x23\x00\xc8\x31\x00\x39\x30\x01\x60\x48\xfe\x00\x9a\x46\ +\x00\xe4\xc9\x00\xae\x09\x00\x94\x0f\xe0\x18\x4c\x00\x28\x90\x01\ +\xae\x4d\x00\x98\x52\x82\x00\x07\x26\x00\x54\x29\x51\x80\xbe\x01\ +\x00\x2b\x87\x0c\x90\x07\x03\x00\x9a\x56\x48\xaa\x00\x55\x00\x19\ +\x0a\xc0\xa3\x01\x00\x63\x5a\x14\xf8\xc2\x00\x80\x2b\x4a\xfe\x93\ +\x10\x7d\x00\x3f\x69\x85\xa5\x0e\x54\x03\xf0\x44\x2b\x01\x57\x06\ +\x00\x94\x68\x00\x2d\x03\x00\xf6\x68\x00\xfd\xe8\x03\x0c\xa9\x5b\ +\x81\x28\x2b\x62\xb3\x6e\xbd\x7c\x9a\x4d\x3a\x76\xcc\x4e\xa4\x32\ +\x27\x17\xf5\xee\x24\x94\x00\x35\xea\x46\x30\x42\x47\xf8\xad\x75\ +\xbe\xee\xc3\x71\x0a\x8d\x71\xe8\x00\xa8\x9b\xc1\xd6\xb6\x82\xab\ +\x56\x8e\xb6\x7d\xac\xee\x86\x0a\xc0\xa5\x96\x80\x35\x93\x01\x6e\ +\xd5\x61\x6c\x9d\x8c\xe5\x07\x21\x02\xe8\x50\xf3\x52\xf8\xf3\xcf\ +\x17\xd5\x38\xcf\x86\xd9\xfc\x30\x34\x00\x65\x6a\x46\x2e\xff\xf8\ +\xeb\x96\x63\x71\xa6\xe2\x22\x24\x00\x69\x81\xad\xdf\x53\x91\x73\ +\x03\xf6\xee\x42\x01\xb0\x10\xd8\xfb\xdf\xb6\x2d\xa1\x74\xbe\x0a\ +\x01\x40\x8f\x9e\x87\xff\xad\x0a\x7a\x25\xe1\x5b\xc1\xb2\x6f\xfa\ +\x03\x5c\xd1\xb3\xf0\x6b\x6f\xc8\xfc\x68\x83\x7b\xd1\x12\x43\xed\ +\x01\x3e\xd2\x73\xf0\xf3\x28\xa4\xd7\xd4\x46\x37\xc3\x39\x43\xdd\ +\x01\xf6\xe8\x19\x18\xfd\xd7\x5f\x76\xac\xcd\x92\x33\xd6\x1b\x60\ +\xce\xf8\xfd\xff\xee\x8a\x7f\xb6\xad\x4d\xd3\xde\xab\xd6\x00\x4f\ +\x8c\x9f\xff\x63\x2c\xd4\xdf\x3c\xff\x96\x95\x59\xe9\x0c\xd0\x60\ +\xfc\xfa\x39\x00\xc0\x70\x9b\xfc\x5b\x56\x51\x67\x00\x56\xd3\xb6\ +\x04\x80\xc9\x87\x2d\xef\xc8\x6c\x6a\x0c\x70\xc2\xf8\xed\x2b\xca\ +\xf6\x01\xee\x24\x31\xcc\x56\x3a\x00\xab\x71\xf3\xe0\x3d\x6b\x6d\ +\x9d\xce\xb4\x05\xf0\x59\x07\xc2\xf9\xfe\xa9\x8c\x8b\x62\x7b\xba\ +\x02\xcc\x58\xbf\xdc\xaf\x48\xb9\x29\x37\xe5\x6b\x0a\xf0\xcc\xfa\ +\xe5\x6d\x49\x77\x05\xb7\x35\x05\xb8\x63\x9e\x87\x28\x09\xe0\xc0\ +\xd7\x13\xe0\x56\xb4\x3e\x3f\xbd\xbe\x1f\xb9\x4b\xdf\x9b\x4f\xba\ +\xb5\x93\x98\xc0\x7f\x7e\xd3\x13\xa0\x26\x92\xfb\xf8\xf9\xc3\xef\ +\xef\x71\xd1\xca\x70\xff\xf3\xa1\x9e\x00\x97\xfc\xd9\x8f\x95\xd7\ +\xb5\xe6\x3d\x6e\x82\x17\x2d\x01\x8a\xfc\x3d\xfa\x11\xa1\x21\xad\ +\x71\x56\x13\x55\x2d\x01\xb8\x1b\xf9\x22\x39\x5e\x7a\x98\xe0\x9b\ +\x1b\xf1\x75\x04\x38\xb4\x24\xbc\xbe\x19\x5f\x31\x78\xd4\x11\xe0\ +\x80\x2f\xff\x25\xc6\xc4\x2a\x97\xc0\x95\x8e\x00\x7c\xf3\x5c\x39\ +\xd6\xd7\x3b\xdf\xe7\xa9\x45\x74\x04\xe0\x2a\xbe\x36\x3b\x5c\x7e\ +\xcc\x53\x13\xba\x1a\x02\xec\xc9\x3a\x17\x98\xa7\xcb\xdc\xd1\x10\ +\xc0\x96\x36\x90\x29\x04\x73\xc0\xae\x6c\x80\xb8\xb4\x17\xf7\xc6\ +\xb6\xcc\x69\x08\x20\xb1\xfd\xae\xb3\x67\xc8\xc3\xf9\x05\x7c\xe6\ +\x7c\x94\xc7\xae\x50\xa7\xfa\x01\x70\x2c\x77\x70\xc7\xfd\xb0\x47\ +\x96\x0f\xfa\x01\xb0\xdf\xda\x3e\xf7\xb3\x56\x4c\xcd\x56\x18\x3b\ +\x42\x02\x55\x37\x73\xf6\xac\xa6\x1f\x00\xfb\xa8\x7c\x81\xe9\xcc\ +\xf1\x96\x3d\xea\x5d\x00\x64\xa5\x76\xdf\x58\x4f\x3b\xd5\x0f\x80\ +\x19\xf2\x22\x14\x2c\xfe\x45\xfd\x68\x40\x36\xc0\x47\x66\xb4\x97\ +\xc8\xd3\x58\x65\xe0\x20\x84\x33\x42\x15\x99\x75\x6a\x52\x3f\x80\ +\xaa\x8c\x81\xd0\xaf\xf4\x89\xfe\xb0\x0f\xfa\x01\x30\xfb\xaf\x62\ +\xe7\xc7\xb5\x18\xd3\xca\xfa\x01\x7c\x63\x01\x3c\x83\xc4\x4a\x20\ +\xa6\x1f\x00\x2b\x40\xc4\x12\x8b\x6f\xf1\xe9\x63\x0b\x5b\x3f\x80\ +\x17\x16\x80\xe0\x11\xa2\xf4\xc9\xc1\x84\x7e\x00\x0b\x16\x80\xe0\ +\xbd\x29\xe7\x61\x6b\x06\x99\xc3\x41\xc1\xe3\x53\x6a\x61\xeb\x08\ +\x31\xbb\x82\x82\xab\x19\x2d\xd1\xcd\x07\x3b\x07\x60\x05\x49\x09\ +\x3e\x8e\x1e\x79\xfc\x51\x43\x80\xba\xdc\x22\x30\xa0\x3e\xec\x93\ +\x86\x00\x3d\x76\x94\x98\x48\x9a\x86\x6d\x3e\x80\xf1\x8b\x85\xb7\ +\x4e\xcf\x55\xc7\xc9\x48\x07\x60\x74\x5d\x44\x57\x73\x96\x7c\xa1\ +\xe7\x1a\x01\xb0\x9a\x01\xc1\xad\x90\x1e\x47\xe0\xb1\x66\x00\x8c\ +\xf1\x60\x7f\x83\x1f\x48\x1c\x0a\xf8\x3a\x02\x74\x65\x8e\x06\xc1\ +\x57\xbd\x3c\x2c\x1f\xc0\x95\x3a\x93\xbd\xa2\x3d\xab\xac\x25\x00\ +\x63\x16\xa7\x26\xb1\x12\x6c\xeb\x09\xf0\x49\x66\xac\xff\x5c\x62\ +\x85\x1a\x14\x00\xbd\xfb\x2e\x78\x9c\xec\x44\xed\x6c\x80\x12\x80\ +\x99\xcc\x69\xbc\xbe\xda\x91\x80\x9a\xed\xf3\x19\x89\x33\x22\xb4\ +\x36\xe5\x56\x57\x00\xfa\x18\xfe\xbb\xd0\xb3\x9a\x6a\x17\xc7\x77\ +\x71\x84\x86\xd8\x49\x5a\x94\x6e\x95\x9c\xb3\x89\x55\x00\xd0\xd7\ +\xc8\xc5\x76\xbb\x28\x3f\x96\x50\x09\x00\xf5\x04\x01\xb1\xd3\xf4\ +\x28\xab\xcd\x63\x7d\x01\xe8\x73\xe3\x22\xa7\x61\xac\xc8\x3b\x08\ +\xd2\xa0\x2f\x00\xec\xcb\xaa\x04\x06\xca\xf7\x0e\xaa\x01\xb8\x91\ +\xd5\x15\x22\xef\x43\x75\x56\x3a\x03\xb8\x31\x49\x8b\x43\x05\xc5\ +\xbb\x05\x94\x1d\xa8\x78\x26\xa7\x0c\xf8\xb6\xda\x4e\x80\x3a\x80\ +\x9e\x9c\x38\xb1\x27\xf5\x5b\x47\x15\x01\xd0\xbb\xc3\xdc\x71\x52\ +\xc4\x1d\x48\xb1\x89\xee\x00\xf7\x32\x62\x7c\x3d\xe2\x3a\xdb\x05\ +\xe8\x0e\x40\x8f\x97\x1b\x6e\xa9\x68\xbb\xfa\x03\xdc\x49\xf8\x04\ +\xb2\x0a\x17\x44\x94\x03\xf8\xe9\xad\xa7\x46\x1f\x89\x1b\x0e\xde\ +\x43\x00\x40\x6f\x08\xb8\xb2\x70\xa4\x70\x3d\x24\x00\x00\xf8\x6b\ +\xcb\x20\xd7\x96\xea\x3e\x90\x6a\x00\xd7\xd9\xaa\x10\xb8\xa4\x83\ +\x46\xd2\x5e\x48\x00\xa8\xb3\x39\xcc\xfb\x66\x7d\xd2\x19\x93\xf1\ +\x11\x84\x05\x00\x72\xd4\x00\xa7\xd9\x66\x7d\x20\xc9\x77\x34\x29\ +\x05\x98\x51\x37\xd1\xa5\x68\xbd\xb9\xab\x00\x5a\x40\xf5\x00\xe4\ +\x86\xec\xc7\x88\x96\xb8\x50\x4a\x3e\x68\xa4\x08\xa1\x02\x60\x6c\ +\xfb\x89\xd5\xd6\x4f\x8f\xcd\x89\x87\x11\xe5\xbc\x90\x01\xb0\x76\ +\xbd\x64\xd7\x34\xe9\x7e\x93\xd8\x7c\x9c\x84\xe1\x44\xc9\x3f\x12\ +\x2b\x7e\x3e\xd7\xfb\xfd\xa5\xbe\x37\xc8\x8b\xab\x67\x0a\xee\x68\ +\x53\x0e\xe0\x33\x77\x10\x38\xa5\xce\xf8\x47\x51\x58\x0e\xbe\xe6\ +\x29\x11\x36\x45\x15\xb7\xb3\x28\x07\x00\xbf\xcc\xb3\x9f\xda\x49\ +\xa5\x93\x8c\x20\xd3\x8a\x92\xdb\x69\xd4\x03\x30\xa6\x48\x79\x93\ +\xad\xe8\x96\xd6\x20\x00\xa0\x6b\x6f\x9d\xff\xcc\x2b\x84\x18\x00\ +\x5e\x33\x5b\xe6\xbf\xac\xec\x8a\xca\x60\x00\xc0\xfb\x1c\xdb\xe6\ +\xf5\x2b\xbc\x94\x21\x20\x00\x80\xe1\xe1\xc6\xa5\xff\x56\xe5\xdd\ +\x5c\x81\x01\x00\xb4\x13\x9b\x64\x3f\x7e\xa1\xf6\x76\xc2\x00\x01\ +\x60\x75\x2b\x4c\x60\xff\xad\xfa\x72\xc6\x20\x01\x00\xbc\xb6\xd0\ +\x71\x9a\xc9\x2f\x4b\x80\x48\x01\x00\xc0\xe0\x92\xf3\x48\x59\xa7\ +\x1c\xc8\x7d\x34\x81\x03\x00\xf8\xdf\x2b\xcc\x53\x06\x52\xa5\x5e\ +\x40\xb7\x12\xee\x00\x00\x00\x60\xda\xb9\xcc\x12\x7a\xfd\xb1\xcc\ +\xe5\xdd\x1b\x04\x96\x76\x04\x00\x00\xe0\xbf\x76\x6f\xab\x85\x5c\ +\x26\xe9\xd8\xb1\x98\x93\x3c\xc8\xe6\xce\xaa\xcd\xc7\x69\xc0\xf7\ +\x51\xee\x10\x40\x8f\x84\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\ +\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\ +\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\ +\x00\x08\x60\x2a\x80\x69\x09\x01\x10\x00\x01\x7e\x01\x98\x9b\x10\ +\x00\x01\x10\x00\x01\x8c\x4e\xff\x00\xf3\x6b\xd4\xa5\x75\x51\x85\ +\x33\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x04\x14\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x01\x00\x00\x00\x01\x00\x08\x03\x00\x00\x00\x6b\xac\x58\x54\ +\x00\x00\x00\x9f\x50\x4c\x54\x45\xf8\x7c\x00\xf8\x80\x00\xf8\x80\ +\x08\xf8\x84\x08\xf8\x84\x10\xf8\x88\x10\xf8\x88\x18\xf8\x8c\x18\ +\xf8\x8c\x20\xf8\x90\x20\xf8\x94\x28\xf8\x94\x30\xf8\x98\x30\xf8\ +\x98\x38\xf8\x9c\x38\xf8\xa0\x40\xf8\xa4\x48\xf8\xa4\x50\xf8\xa8\ +\x50\xf8\xa8\x58\xf8\xac\x58\xf8\xb0\x60\xf8\xb0\x68\xf8\xb4\x68\ +\xf8\xb4\x70\xf8\xb8\x70\xf8\xb8\x78\xf8\xbc\x78\xf8\xc0\x80\xf8\ +\xc4\x88\xf8\xc8\x90\xf8\xc8\x98\xf8\xcc\x98\xf8\xd0\xa0\xf8\xd4\ +\xa8\xf8\xd4\xb0\xf8\xd8\xb0\xf8\xd8\xb8\xf8\xdc\xb8\xf8\xe0\xc0\ +\xf8\xe0\xc8\xf8\xe4\xc8\xf8\xe4\xd0\xf8\xe8\xd0\xf8\xec\xd8\xf8\ +\xec\xe0\xf8\xf0\xe0\xf8\xf0\xe8\xf8\xf4\xe8\xf8\xf4\xf0\xf8\xf8\ +\xf0\xf8\xf8\xf8\xf8\xfc\xf8\x35\x75\xa4\x70\x00\x00\x00\x09\x70\ +\x48\x59\x73\x00\x00\x00\x48\x00\x00\x00\x48\x00\x46\xc9\x6b\x3e\ +\x00\x00\x03\x1b\x49\x44\x41\x54\x78\xda\xed\xdd\x61\x73\xd2\x40\ +\x10\x80\xe1\x8b\x10\x23\x1a\x01\x23\x69\x6c\x0b\xb1\x80\x0d\x62\ +\x10\x62\xe8\xff\xff\x6d\xb6\xd5\xd1\x92\x12\x72\x29\x38\x72\xbb\ +\xef\x7e\xce\xb0\xec\x33\xc9\x5d\xb8\xd9\x1d\xcc\x9d\xf2\x30\x00\ +\x00\x00\x00\x00\x00\xdc\x19\x85\x01\x00\x00\x00\xec\x02\xa8\x5a\ +\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x80\xff\x18\x45\xae\x1a\x20\x1b\x79\ +\x91\x5e\x80\xf5\xb8\x77\xff\x35\xde\x68\x05\x98\x0d\xbd\xa7\xbd\ +\x3b\xca\x00\xf2\x4b\xbf\xd2\xbc\xa4\x09\xa0\x48\xc3\xe7\xdd\x5b\ +\x7a\x00\x6e\x23\x6f\x5f\xfb\x9a\x12\x80\xfc\x2a\xa8\xe9\xdf\xd3\ +\x00\x50\xb9\xf5\xb5\x01\xcc\xab\xb7\xbe\x2a\x80\xaf\x89\xdf\xd0\ +\xc2\x2a\x19\x60\xf5\xf8\xc2\xa3\x15\xa0\x48\xdf\x5b\x35\x31\xcb\ +\x04\x28\xa7\x43\xcf\xb2\x8b\x5b\x20\xc0\x76\x1e\x75\xec\xdb\xd8\ +\xc5\x01\x64\x71\xb7\x55\x1f\xbf\x2c\x80\xec\xc2\x6f\x3b\xc8\x20\ +\x08\x60\x91\xbc\x7e\xc1\x24\x87\x14\x80\xac\x65\xf5\xb2\x00\xb2\ +\xd8\x7f\xf1\x2c\x8f\xf3\x00\xe5\x6c\xd4\x3d\x66\x98\xc9\x6d\x80\ +\xcd\xcd\xf0\xd5\x91\xd3\x5c\x0e\x03\xe4\xe3\xbe\x77\xfc\x38\x9b\ +\xa3\x00\xe5\x97\x8b\xe0\x34\xf3\x7c\x2e\x02\x2c\x27\x03\xef\x64\ +\x03\x8d\xae\x01\xe4\x69\xe4\x9b\xd3\x84\x83\x00\xab\x0f\xa7\x2a\ +\xde\x51\x80\xcc\xae\x32\x2f\x4a\x02\x99\x00\x0b\x9b\xf2\x3b\x97\ +\xeb\xfb\xd3\x00\x5f\x24\xc0\xb2\xb9\x2a\x7f\x5c\x3c\x5e\x9a\x88\ +\x04\xf8\xde\x54\x53\x2f\x2d\x7f\x5f\x3a\x15\x09\x50\x1e\xae\xe8\ +\xdd\xb4\xd5\xcd\xe2\xe2\x36\x78\xe8\xc9\x1e\xdc\xee\x6c\x18\x32\ +\x01\xfa\xf5\x0b\xff\xb2\x72\x26\x2a\x13\x20\xae\x29\x3f\x5e\xb5\ +\x7c\x5a\x5c\x05\x48\x6b\xf7\xbd\xbd\xa9\xe5\x01\xec\x59\xda\x82\ +\xc9\x8f\xda\xd4\x02\x7f\x0b\x54\xcf\xbb\x7b\x37\xdb\x03\xa9\x05\ +\x02\x0c\x77\x4a\x08\x67\x87\x53\x0b\x04\xf8\xfc\x74\xdf\xcb\x9a\ +\x52\x0b\x04\x58\xff\x59\xf8\x47\xdf\x9a\x53\x4b\x3c\x0f\xf8\xf5\ +\x26\xd0\x49\x56\x36\xa9\x25\x02\x3c\x6c\x84\xfe\x75\x61\x97\x5a\ +\x22\x40\xe1\x05\x93\xd2\x36\xb5\xc8\x33\xc1\x45\x8b\xd4\x7a\xfb\ +\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x38\x5f\x80\xad\x76\x80\x4d\x33\x40\x21\x1a\xc0\ +\xe2\x7f\xda\x73\xd1\x00\x93\x66\x80\xa9\x68\x80\x7e\x33\x40\x2c\ +\x19\xc0\xe2\x09\x30\xfe\x56\x30\x40\x68\x01\x60\x52\xb9\x00\xb1\ +\x4d\xfd\xa6\xbb\x16\x0a\x50\x8e\x8c\x5d\xbc\xdd\x88\x04\x98\xf7\ +\x8c\x6d\x04\x99\x38\x80\xe5\xd8\xbe\xfc\x87\x18\xcc\x4a\x37\x01\ +\xae\x9f\xc7\x55\x12\x85\x1d\xd3\x3a\xbc\xf0\xe3\xa7\xea\x47\x4d\ +\xce\x1e\xa0\x34\xff\x34\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x87\x4f\x85\xcf\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x2b\x80\xb6\x00\ +\x00\x00\x00\xfe\x02\xe8\x0d\x00\x00\x00\x00\x00\xd5\xf1\x13\x3b\ +\x45\x7a\xc4\xe1\x22\xe3\x41\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ +\x42\x60\x82\ +\x00\x00\x06\xe8\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x01\x00\x00\x00\x01\x00\x08\x03\x00\x00\x00\x6b\xac\x58\x54\ +\x00\x00\x00\x8a\x50\x4c\x54\x45\x00\xfc\x78\x00\xfc\x80\x08\xfc\ +\x80\x10\xfc\x80\x10\xfc\x88\x18\xfc\x88\x20\xfc\x88\x20\xfc\x90\ +\x28\xfc\x90\x30\xfc\x90\x30\xfc\x98\x38\xfc\x98\x40\xfc\x98\x40\ +\xfc\xa0\x48\xfc\xa0\x50\xfc\xa0\x50\xfc\xa8\x58\xfc\xa8\x60\xfc\ +\xa8\x60\xfc\xb0\x68\xfc\xb0\x70\xfc\xb0\x70\xfc\xb8\x78\xfc\xb8\ +\x80\xfc\xb8\x80\xfc\xc0\x88\xfc\xc0\x90\xfc\xc0\x90\xfc\xc8\x98\ +\xfc\xc8\xa0\xfc\xd0\xa8\xfc\xd0\xb0\xfc\xd0\xb0\xfc\xd8\xb8\xfc\ +\xd8\xc0\xfc\xe0\xc8\xfc\xe0\xd0\xfc\xe0\xd0\xfc\xe8\xd8\xfc\xe8\ +\xe0\xfc\xe8\xe0\xfc\xf0\xe8\xfc\xf0\xf0\xfc\xf0\xf0\xfc\xf8\xf8\ +\xfc\xf8\x60\x3b\x5e\x10\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\ +\x00\x48\x00\x00\x00\x48\x00\x46\xc9\x6b\x3e\x00\x00\x06\x04\x49\ +\x44\x41\x54\x78\xda\xed\xdd\x61\x77\xa2\x38\x14\x06\x60\x42\x61\ +\x60\xa4\xba\xd0\x76\x74\x75\x51\x2a\x32\x50\x62\xf8\xff\x7f\x6f\ +\x3b\x9d\x3d\x67\xdb\x01\x14\x85\x24\x37\xe4\xcd\x77\xcf\xe9\x7d\ +\x2a\xe1\xe6\xe6\x26\x3a\x8d\xe5\xc3\x01\x00\x00\x00\x00\x00\x00\ +\x34\x8e\x85\x03\x00\x00\x00\xc0\x57\x00\xab\xa6\x3e\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x26\x1e\x55\x9e\xae\x93\x28\xf4\x5d\x97\x31\xd7\xf3\x83\x30\ +\x4a\xd6\x69\x56\x08\x1b\x00\xc4\x71\xf3\xe8\xf6\x75\x2c\x06\xf1\ +\xf6\xc8\xe7\x0c\x50\xed\x1e\xd9\xd5\xbe\xcd\x70\x9d\x8b\x59\x02\ +\xf0\x7f\x16\x43\x7b\x57\xd9\xea\x20\xe6\x06\x50\x24\xec\xa6\xfe\ +\x5d\x37\xc9\xe7\x04\x70\x8c\xee\xe8\x61\x0e\x52\x31\x13\x80\xe3\ +\xe2\xce\x36\x6e\x6f\xcb\x67\x00\x50\x44\x23\x3a\xd9\xdd\x9d\xe9\ +\x00\x75\x32\xb2\x99\x3f\x38\x1a\x0d\x90\xba\xe3\xcf\x33\x2c\x6b\ +\x63\x01\xca\xc5\x24\x27\x3a\x1e\x32\x43\x01\x36\x6c\xaa\x43\x2d\ +\x4f\xc2\x40\x80\x89\xfe\xfd\xff\xcd\x04\x95\x71\x00\x53\x3c\xfd\ +\x9f\xdf\x88\x85\x59\x00\x3c\x9e\xfa\x68\x97\x7b\x34\x0a\xe0\xdb\ +\xf4\x87\xdb\xd8\xc1\x20\x00\x2e\xe3\x78\x1f\xcb\xcd\x01\x28\xa4\ +\x1c\x70\x74\x4f\xc6\x00\x1c\xe5\x1c\xf1\xf4\x2a\x53\x00\x52\x49\ +\x87\x5c\xbf\x0b\x43\x00\x36\xb2\x8e\xf9\xbe\x18\x02\x90\xc8\x02\ +\x70\x32\x33\x00\x1e\xa5\x01\x78\xdc\x08\x80\x40\xde\x59\xf7\x17\ +\x23\x00\x98\x3c\x00\x56\x1a\x00\xc0\x1d\x89\x63\x69\x00\xc0\x80\ +\x3c\x88\xb9\x77\x7f\x4b\x0a\xfa\x00\x97\xf2\x20\x6f\xb5\xcd\x8a\ +\x8f\x99\x4c\xf0\x22\xdb\xae\xbc\x9b\x01\x12\xfa\x00\xbd\x79\xd0\ +\x62\xdb\x7e\x82\xcb\x4d\x78\xe3\x2c\xc0\xc9\x03\x74\xe7\x41\xee\ +\xba\x2f\x93\x3d\xc5\x37\x3d\x0f\x7f\x93\x07\xe8\xca\x83\xbc\xdd\ +\xa5\x34\xb6\x5c\xde\x52\x1e\x22\x0f\xd0\xde\x09\x60\x3f\xce\x57\ +\x3e\x93\xdd\x30\x19\x54\xd4\x01\x5a\x79\x50\x38\x60\xe6\xae\x87\ +\x7f\x09\x76\xd4\x01\xfe\x7c\xa2\xe3\x61\x8b\xb8\xe7\xa1\x00\x8f\ +\xc4\x01\xfe\xcc\x83\xd6\x43\x3f\xb8\x1e\xfa\x1e\x20\x0e\x50\xdc\ +\x19\xff\xf0\x55\xe4\x4f\xda\x00\xaf\x5f\xfe\xd8\xbf\xc6\x4d\x9f\ +\x9d\xe3\x40\x1b\xe0\x4b\x1e\xe4\xdf\x94\xb6\xd4\xc3\x76\x13\xd6\ +\xb4\x01\xbe\x3c\xca\xfb\xdb\x3e\x7b\x18\x04\xb0\xa2\x0d\xf0\xf9\ +\x49\xf6\xc7\xe7\x10\x5d\x29\x35\x6d\x80\x68\x4c\xfd\xe2\x34\x04\ +\x20\xa4\x0d\xf0\x39\x0f\xba\x7d\x33\x63\x48\x3e\xe4\xd3\x06\xf8\ +\x94\x07\xb1\xdb\xeb\xd8\x43\xf6\x14\x5c\xd2\x00\x7c\x64\xf9\xc6\ +\x57\x99\x09\xc9\x00\x28\x46\x66\xed\x2f\xa6\x7f\x03\x5e\x47\xa6\ +\x6c\xf9\x80\xe2\x38\x69\x80\x74\xec\x1f\xca\x14\x56\x04\x64\x00\ +\xac\xc7\x96\xef\xae\xa7\x02\x11\x69\x80\x64\x6c\xce\x7e\x7d\x51\ +\x98\x90\x06\xf8\xf4\x0f\xbc\xaf\xc3\x6f\x6f\xf8\x5a\x20\x18\x9b\ +\xb0\xe5\x86\xaf\x06\xd9\xd8\x7f\x54\xa9\x70\x6f\x44\x02\x00\x1f\ +\x93\x07\xff\x5e\x13\x9b\x5d\x11\x2a\xc6\xe4\xc1\x1f\x43\xa8\x7b\ +\x09\xc8\x00\xc8\xc6\x6f\x63\x5e\x03\xd8\x90\x06\x48\xc7\x57\xaf\ +\xaf\x01\x1c\x69\x03\x04\xee\xc8\xa9\xea\x7c\x6d\x25\x20\x48\x03\ +\x7c\x4c\x63\x3f\xf3\x43\xba\xbd\xfb\xd3\xca\x0a\x62\x44\x8f\xce\ +\x56\x57\x00\xf6\x73\x07\x38\x19\xbf\x3d\x3e\x72\x64\x97\x01\xe2\ +\x66\xee\x00\x3b\x65\xef\x00\xa2\x00\x2f\x8a\x0a\xa2\x64\x01\x2e\ +\xd7\x03\xb6\xf3\x07\xb8\xd8\x2a\xe1\xf2\xd9\x03\xd4\x33\xe8\x14\ +\x95\xf7\x12\x60\x6f\xf3\x07\xb8\x38\x07\x3e\x37\xf3\x07\xb8\x74\ +\xde\x90\x55\xf3\x07\xe0\x6c\x06\x07\x26\xc6\x8c\xbd\xba\x57\x00\ +\x4d\x80\x58\x4d\x7f\x1c\x59\x00\xe1\xaa\x68\x0b\x20\x0c\x70\xa9\ +\x47\xe6\x64\x03\xc0\x4a\x51\x9f\x3c\x55\x80\x0b\xef\x00\x9f\xdb\ +\x00\xb0\x55\xb4\x0c\x26\x0b\xd0\xdf\x1e\xf2\xd4\xd8\x00\xd0\xbf\ +\x0e\x08\xce\x56\x00\xf4\x96\x02\x98\x61\x37\x48\xdc\x39\x72\x85\ +\x29\x10\x49\x80\x48\xc5\x56\x00\x61\x80\xde\x7a\x78\x28\xec\x00\ +\xe8\xfb\x02\xb8\x55\x63\x05\x40\xdf\x2b\x80\x49\xbc\x4e\x8c\x14\ +\x40\xdf\x99\xf3\xb4\xb1\x03\x60\x27\xbd\x23\x8a\x36\x40\xdf\x61\ +\x91\xb8\xb1\x04\xa0\x67\x19\xb8\x14\x96\x00\xf4\xcc\x80\x0b\xc9\ +\xf7\x8a\x92\x01\xe0\xdd\xab\xa0\x50\xf6\xa5\xa2\x64\x00\x12\x3d\ +\xf1\x93\x01\xc8\x34\xc5\x4f\x05\xa0\xf6\x34\xc5\x4f\x05\xa0\xf3\ +\xde\xa1\x85\x8a\x7b\xd6\x69\x00\x74\xde\x38\x11\x9d\x1b\x5b\x00\ +\x72\xa6\xfe\xfd\x4f\x09\xa0\x73\x02\x58\x29\xba\x5e\x9e\x00\x80\ +\x58\x28\xcf\x7f\x69\x01\x24\x8a\xb6\x40\xa8\x02\xec\x54\x6c\x82\ +\x13\x06\xc8\x98\xe2\xf5\x2f\x31\x80\xc2\x95\x7a\x1a\x80\x3c\x40\ +\xe5\xc9\xee\x03\xa4\x0d\xc0\x03\xb5\xf5\x2f\x6a\x00\xe7\xf6\x0b\ +\x90\xed\x1b\x7b\x00\x44\xa4\xe8\xfa\x6c\xaa\x00\xed\x1a\x18\xcb\ +\x1a\x8b\x00\x62\x55\x17\xc8\x13\x05\xe8\x88\x3f\x6f\x2c\x02\x88\ +\x95\x5c\x9d\x4e\x17\x20\x56\xf6\x13\x12\x34\x01\xda\xf3\x9f\x57\ +\x36\xf6\x00\x88\xf6\x55\x41\x7e\xd5\xd8\x03\xd0\x11\x7f\xa0\x2b\ +\x7e\x1d\x00\xe7\x76\xfe\x13\xd6\x8d\x3d\x00\x7c\xa1\xa5\xfc\x4d\ +\x06\x80\x87\x7a\xca\xdf\x54\x00\xea\x76\xfc\x91\x68\xec\x01\xa8\ +\x03\x5d\xe5\x6f\x1a\x00\xd5\x37\x6d\xe5\x6f\x12\x00\x95\xaf\xaf\ +\xfc\x4d\x01\xa0\xf4\x35\x96\xbf\x09\x00\x14\x9e\xce\xf2\xb7\x7e\ +\x80\xe2\x41\x6b\xf9\x5b\x3b\xc0\xc9\xd5\x5b\xfe\xd6\x0d\x90\xbb\ +\xca\xfa\xbf\x49\x02\x1c\x5d\xdd\xe5\x6f\xbd\x00\xaf\x4c\x7b\xf9\ +\x5b\x2b\x40\x7b\xff\x4f\x7d\xf9\x5b\x27\xc0\x81\x11\x28\x7f\x6b\ +\x04\xd8\x33\x0a\xe5\x6f\x7d\x00\x29\x8d\xf2\xb7\x36\x80\x1d\x91\ +\xf2\xb7\x2e\x80\x2d\x95\xf2\xb7\x26\x80\x76\x03\xa0\x3f\x45\xf9\ +\x5b\x70\x43\x00\x7e\x8c\x3a\xfe\x24\xf8\x5b\x59\x9c\xf2\xec\xb0\ +\x4f\xb7\x9b\xf5\x4b\x12\xaf\x96\x51\x18\xf8\x0f\xec\xfe\xdb\x4a\ +\x15\x03\x74\x5d\x07\x53\xb7\xc3\xac\xab\xf7\x30\x5f\xdf\xc3\xdc\ +\xbd\x87\xf9\xfc\x2b\xcc\xef\x81\xef\xb9\x6a\xae\x93\x92\x09\xf0\ +\xd4\x79\x0b\x4a\xba\xdb\xbe\x87\x99\xbc\x87\xb9\xb8\x1a\x66\xff\ +\x48\x0d\x00\x90\xf7\xcb\xb3\x53\xde\xac\x2c\x0f\x20\x96\x19\x3f\ +\xfd\x39\x40\xac\xa4\xc6\x3f\xdd\x6d\x22\x92\x00\xc4\x52\x6e\xfc\ +\x4e\x49\x1b\x40\x44\x92\xe3\x9f\xee\x17\x07\xe5\xfc\xda\xdc\x42\ +\x76\xfc\x0e\xa7\x0c\xa0\x20\x7e\xe7\x4c\x18\x80\x87\xf2\xe3\x77\ +\x04\x5d\x80\x3a\x50\x10\xff\x74\xd9\xfa\xe4\x00\x6f\x4a\xe2\xa7\ +\x0b\x50\xf9\x8e\xd5\x00\xa5\xa2\xf8\xa9\x02\x94\x9e\x63\x35\x40\ +\xa1\x2c\x7e\xa2\x00\x2b\x07\x00\x00\x00\x00\x00\x00\xa0\x62\x08\ +\xdb\x01\x38\x00\x2c\x07\xa8\x6d\x07\xa8\x6c\x07\x28\x6c\x07\xa0\ +\x5e\x16\x37\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x2b\x80\ +\x6d\x03\x00\x00\x00\xc0\xff\x00\xf6\x0e\x00\x00\x00\x00\x00\xb0\ +\x7a\xfc\x0b\x43\xd4\xc6\xc6\x44\x07\xe4\xaa\x00\x00\x00\x00\x49\ +\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x09\x13\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x01\x00\x00\x00\x01\x00\x08\x03\x00\x00\x00\x6b\xac\x58\x54\ +\x00\x00\x00\xed\x50\x4c\x54\x45\x78\x00\xf8\x80\x00\xf8\x80\x04\ +\xf8\x80\x08\xf8\x80\x0c\xf8\x88\x10\xf8\x88\x14\xf8\x88\x18\xf8\ +\x88\x1c\xf8\x88\x20\xf8\x90\x20\xf8\x90\x24\xf8\x90\x28\xf8\x90\ +\x2c\xf8\x90\x30\xf8\x98\x30\xf8\x98\x34\xf8\x98\x38\xf8\x98\x3c\ +\xf8\x98\x40\xf8\xa0\x40\xf8\xa0\x44\xf8\xa0\x48\xf8\xa0\x4c\xf8\ +\xa0\x50\xf8\xa8\x50\xf8\xa8\x54\xf8\xa8\x58\xf8\xa8\x5c\xf8\xa8\ +\x60\xf8\xb0\x60\xf8\xb0\x64\xf8\xb0\x68\xf8\xb0\x6c\xf8\xb0\x70\ +\xf8\xb8\x70\xf8\xb8\x74\xf8\xb8\x78\xf8\xb8\x7c\xf8\xb8\x80\xf8\ +\xc0\x80\xf8\xc0\x84\xf8\xc0\x88\xf8\xc0\x8c\xf8\xc0\x90\xf8\xc8\ +\x90\xf8\xc8\x94\xf8\xc8\x98\xf8\xc8\x9c\xf8\xc8\xa0\xf8\xd0\xa0\ +\xf8\xd0\xa4\xf8\xd0\xa8\xf8\xd0\xac\xf8\xd0\xb0\xf8\xd8\xb0\xf8\ +\xd8\xb4\xf8\xd8\xb8\xf8\xd8\xbc\xf8\xd8\xc0\xf8\xe0\xc0\xf8\xe0\ +\xc4\xf8\xe0\xc8\xf8\xe0\xcc\xf8\xe0\xd0\xf8\xe8\xd0\xf8\xe8\xd4\ +\xf8\xe8\xd8\xf8\xe8\xdc\xf8\xe8\xe0\xf8\xf0\xe0\xf8\xf0\xe4\xf8\ +\xf0\xe8\xf8\xf0\xec\xf8\xf0\xf0\xf8\xf8\xf0\xf8\xf8\xf4\xf8\xf8\ +\xf8\xf8\xf8\xfc\xf8\x09\xd1\x39\xc7\x00\x00\x00\x09\x70\x48\x59\ +\x73\x00\x00\x00\x48\x00\x00\x00\x48\x00\x46\xc9\x6b\x3e\x00\x00\ +\x07\xcc\x49\x44\x41\x54\x78\xda\xed\xdd\x69\x43\xda\x4c\x10\x00\ +\xe0\x1c\x50\x90\xa3\x28\x2d\x52\x81\xaa\x78\x03\xe5\xa8\x82\x22\ +\x45\xa8\x81\x0a\x91\x64\xfe\xff\xcf\xe9\x87\xbe\xaf\x72\xe4\xce\ +\x26\x66\x36\xb3\xdf\x23\xd9\x47\xc8\x31\x3b\x33\x2b\x40\xcc\x87\ +\x40\x00\x04\x40\x00\x04\x40\x00\x20\xc4\x70\x10\x00\x01\x10\xc0\ +\x26\x40\xac\x2e\x7d\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\x40\ +\x00\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\x40\x00\ +\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\ +\x40\x00\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\x40\x00\xac\x87\ +\xae\x0c\x5a\x67\x95\x2f\xf9\x74\x52\x96\x04\x29\xf1\x29\x9d\x2d\ +\x56\xce\x5b\x7d\x45\x8f\x03\x80\xd2\x3d\xfe\x2c\x99\xa4\x2c\x4a\ +\x85\x5a\x67\xc6\x33\xc0\xea\xae\x96\xb2\x4d\xdc\x4c\x55\x6f\x5f\ +\xb9\x04\xd0\xee\x0e\x25\x87\xc9\xab\xd2\xb7\xbe\xc6\x1b\xc0\xe4\ +\x58\x76\x95\xc0\x9b\x38\x9f\x73\x04\xa0\xff\x2c\xb8\xcf\x61\x16\ +\x2b\x13\x4e\x00\x5e\x1b\x9f\x3c\xe6\x71\x57\xe7\x1c\x00\xa8\x57\ +\x09\xef\x99\xec\xd2\xf9\x0a\x39\xc0\xab\x9f\xe9\x0b\x82\x20\x64\ +\xc6\x98\x01\xb4\x56\xd2\x77\x39\x83\x78\xa6\xa1\x05\xb8\x4b\x33\ +\xa9\xe8\x38\x58\xe2\x04\x50\xf7\x59\xd5\xb4\xa4\x9f\x51\x02\x3c\ +\xb0\xab\xea\x91\xc7\x18\x01\xae\x18\xd6\x35\x25\x9e\x10\x02\x1c\ +\xb2\xac\xec\x4a\x4c\xf1\x01\x24\x59\x02\x08\xa9\x25\x36\x80\x39\ +\xe3\xea\xbe\xa2\x8e\x0c\xe0\x8e\x75\x7d\xe3\x05\x32\x80\x73\xd6\ +\x00\xe2\x04\x17\xc0\x01\xf3\x12\xd7\x7d\x54\x00\xba\xcc\x1c\x40\ +\xe8\x60\x02\xf8\x1d\x40\x95\x73\x4a\x47\x04\xd0\x0d\xa2\xce\xfb\ +\x16\x11\xc0\x49\x10\x00\x79\x44\x00\xf9\x40\x4a\xfd\x27\x68\x00\ +\x34\xd1\xf4\x6e\x96\xab\x5c\x77\x87\x4f\x53\x45\x99\x8e\x07\x9d\ +\xcb\xf2\x9e\x1b\x80\x4b\x34\x00\x63\x93\x17\xdb\xb3\xe1\x4e\x8c\ +\x6b\xd9\x3f\x71\x1c\x33\xcc\xa1\x01\x68\x19\x86\x79\x47\x66\xf7\ +\xcc\x61\xd9\xa1\xc0\x1c\x0b\x40\xd5\x20\xc4\x6b\xb9\xe8\xa5\x54\ +\x1c\x01\x0c\xb0\x00\x64\x76\xbe\xbc\xb6\x31\x8d\x51\xd6\x01\xc0\ +\x15\x12\x80\xe5\xf6\x89\x9f\x38\x88\x6c\xae\x6a\xf6\x00\x65\x24\ +\x00\xc3\xad\x5f\x7f\xcf\xd9\x61\x0d\x5b\x80\xcf\x48\x00\x6e\x36\ +\x97\x37\x86\x4e\x8f\x6b\xdb\x2e\x13\x20\x01\xd8\x08\x87\x89\xf7\ +\xce\x0f\xbc\xb0\x01\x48\x22\x01\xd8\xb8\xb1\xf7\xdc\x1c\xf9\xc5\ +\x26\x28\x80\x03\xe0\xcf\xc6\xf5\xcf\x5d\x24\xcd\x7a\x29\x4d\xc6\ +\x01\xd0\x5f\x7f\x81\xd1\xfc\x5c\x3e\x90\xfe\x04\xd6\x7e\xc9\xa2\ +\xdb\x78\xf6\xca\x32\x9a\x9c\xc6\x01\x50\xf4\x13\xca\xb4\x0c\x26\ +\x16\x71\x00\xbc\x87\xc3\x92\xee\xf3\x9d\x9e\x2d\x53\x26\x50\x00\ +\xac\x4d\xe1\x07\x8b\xc7\xe8\xb5\x71\x83\x02\xa0\xe7\x2f\x8a\x67\ +\x15\x4c\x1a\xa2\x00\x38\x7d\x3b\xdf\x06\xeb\x70\xe2\x12\x05\xc0\ +\x5b\x4a\x98\xac\x7a\x39\xfc\x97\xf9\xfc\x0b\x28\x02\x22\xda\x5b\ +\x3e\xe4\x77\x4f\xc7\xbf\x84\xf7\x36\x1c\x0c\xc0\xd3\xdb\xf9\x7a\ +\xcb\x6b\x50\xcd\x01\x7e\xa3\x00\x68\xfb\x7c\x75\xd3\x43\x5c\x1c\ +\x0b\x04\xa0\xea\x73\x3d\x57\x33\x05\xe8\xe1\x00\xc8\xfa\x8c\xe2\ +\x2f\x4d\x9f\x83\x91\x2c\x8d\xfd\xec\xfd\x1b\x3f\x3d\x1e\x3f\xe3\ +\x62\x71\x94\x5d\x3c\xed\x3d\xae\xaa\xc7\x04\xc0\x2c\x2e\xf6\x0b\ +\x62\x02\x70\x6c\x3c\xff\x13\x88\x0b\x80\xf1\xcb\x50\x4e\x8b\x0b\ +\x80\x71\x7a\x99\x1c\x4c\xba\x6c\x14\x01\x9a\x86\xc1\xd0\x07\x88\ +\x0d\x40\xce\x08\xe0\x07\xc4\x06\x60\x64\x34\xff\x06\xc4\x07\xa0\ +\x18\x42\x1c\x28\xca\x00\x06\x49\xf6\x62\x07\xe2\x03\xf0\xba\x5b\ +\x64\x22\x0f\x20\x46\x00\xbb\x2b\xe4\x7b\x53\x88\x11\xc0\x6e\x66\ +\x4d\x49\x85\x18\x01\x0c\xb6\x73\xcb\xa4\x56\xc0\x9f\x18\x2d\x80\ +\xbb\xed\xf9\xe7\x7e\x43\x9c\x00\x1a\x5b\xf3\x97\xae\x83\x6f\xa8\ +\x10\x21\x80\xe5\x76\xa6\x5c\x51\x09\xe1\x53\xa3\x03\xd0\xdb\x5a\ +\x14\x4e\xdf\x85\xf2\xb1\x51\x01\x18\x6c\xa5\x16\xcb\x57\xdc\x35\ +\x50\xb0\xfa\xf2\xb7\xb6\xde\x7f\xa4\xfa\x32\xac\xcf\xfe\x78\x00\ +\xa5\x55\x92\x76\x6a\xe6\x07\x53\x95\x53\x00\x75\xf9\xdf\x58\xcc\ +\x95\xa7\x41\xab\x5e\x34\xcd\x08\x4a\xee\xd7\x1a\xc3\x05\x6f\x00\ +\xaa\xe8\xb6\x6c\xba\xda\x7d\xe1\x09\x60\xe0\xa5\x48\xa2\xd0\x5c\ +\x70\x03\xe0\xb1\x8e\x46\xac\x3c\x71\x02\xb0\x27\x78\x1d\xa5\x09\ +\x0f\x00\x33\x3f\xe5\x42\xd5\x17\xfc\x00\x1d\x7f\x15\xf4\x3d\xf4\ +\x00\x65\xc1\xdf\x38\x5a\xe1\x06\xd0\x7d\x76\xd4\x11\x84\xac\x82\ +\x1a\x60\xec\xbf\x6e\x30\xf9\x84\x19\x80\x45\x53\x11\xf9\x11\x31\ +\x00\x93\xb6\x3a\xf2\x08\x2d\x80\xeb\xe7\x60\x93\x9b\x81\x82\x15\ +\xa0\xcf\xa8\x7e\x38\xa3\x22\x05\x60\x56\x4f\x5e\x46\x0a\x90\x66\ +\x05\x20\x74\x51\x02\xcc\x98\xcd\x5f\x48\x2c\x30\x02\x6c\xa7\x3e\ +\x89\x92\x77\x81\x1a\x46\x80\x7f\xa9\x4f\x99\xf2\x45\xe7\x61\x32\ +\x57\x35\x00\x00\x6d\x39\x1b\xf5\xae\xca\x29\xf7\x02\x53\x84\x00\ +\xfa\x65\xf1\xfa\xd1\xb8\x80\x66\x71\x5b\x71\xf9\x94\x5c\xe1\x2a\ +\x2a\x0c\x00\xa0\xdf\x1f\xba\x79\x4c\x10\xe7\xbc\x01\x00\xc0\xfc\ +\xd8\x05\xc1\x25\x87\x00\x00\xb3\x23\xe7\x2d\x85\xb8\x04\x00\x18\ +\x38\xee\x26\x32\xe6\x13\x00\x96\xa5\x70\x7b\xcb\x45\x2f\x49\x4a\ +\xaf\x3b\x03\xf8\xcc\x2b\x80\x49\xa6\xe8\xee\x50\xb9\x05\xb0\xa9\ +\x1f\xff\x7f\x8c\xf8\x05\x58\x2b\xbc\xb4\x18\x2d\x8e\x01\x74\x27\ +\xcd\x18\x4f\x39\x06\x80\x85\x83\x27\xe3\x12\xcf\x00\x4e\x96\x50\ +\xf2\x5c\x03\x38\x08\xa0\xa6\xf8\x06\x18\xd9\x47\x45\xf8\x06\xb0\ +\xff\x0a\x48\x9c\x03\xd8\xe6\x52\x88\x9c\x03\xe8\x76\xad\xc9\x93\ +\x9c\x03\xd8\x46\xd1\x33\xbc\x03\x3c\xda\xa5\x0e\xf1\x0e\xb0\xb2\ +\x89\x0f\x7d\xe5\x1d\xc0\xee\x3e\x70\xc4\x3d\x40\x3d\xc6\xef\x02\ +\x00\x60\xdb\x5c\xb1\xc3\x3d\xc0\xd0\x1a\xe0\x89\x7b\x00\xc5\xfa\ +\x39\x48\xe3\x1e\x60\x11\x46\x8f\xe9\x28\x03\xbc\x0a\x21\xb4\x95\ +\x8b\x32\x80\x6e\x09\xd0\xe6\x1f\x40\xb3\x04\x78\x89\x2c\x80\xfa\ +\xc0\xa8\xd6\x7d\x69\x35\x7f\x56\x3d\xa5\x18\x03\xa8\xf7\xe7\x05\ +\x91\x55\xd3\x3f\xcb\x9d\x9a\x1a\x51\x04\xb8\xcc\x8b\x2c\xff\x3d\ +\x13\x2b\x80\x59\x14\x01\xde\x5b\x1f\x30\x49\xe7\xec\x87\xb1\xd1\ +\x02\x53\x80\xb3\xb7\xf3\x3b\x60\x71\x6e\x8d\xe0\xef\x01\x8c\x01\ +\xd6\x76\x17\x63\xd1\xf3\xe5\xbb\x45\x34\x48\x8b\x24\x80\xc2\x36\ +\x68\x9f\x0d\xa3\xb1\x24\xdb\xbb\xc0\xda\xee\x5a\xfe\xb7\x44\xb2\ +\xb8\x0b\x4a\x51\xcd\x13\x5c\x5b\xd2\x4b\xfb\xfe\x92\x5a\x84\x85\ +\x19\x76\x15\x63\x0b\x70\xca\xf2\x5b\x6a\xbe\xdf\x86\x34\x8f\x2a\ +\xc0\x7a\x43\x60\xf9\x8f\xcf\x07\xe1\x44\x28\xad\x65\xd9\x02\x4c\ +\x18\xe6\x74\x9b\xff\x02\xd2\x5a\x64\x01\x36\xf7\xd7\xf2\xd7\x01\ +\xe1\x4b\x38\x5b\x0d\x31\x7e\x17\xd8\xb8\x73\x25\xfd\x34\x01\x98\ +\x06\x9c\x17\x10\x10\xc0\xe6\x6e\x51\x87\xc0\xea\x2f\xad\x2f\x0a\ +\xcf\xa2\x0c\x70\xbd\x79\xb2\x4d\xcf\x7f\xc8\xbc\xc2\xae\x0f\x51\ +\x06\xd8\xba\x72\x89\x9e\x33\xb9\x0a\xc1\xae\x06\x04\x06\x30\x63\ +\x54\xe1\x65\x9a\x2a\x58\xd0\xa2\x0d\xa0\x6f\x57\x81\xec\x79\x8a\ +\x5c\x4d\xcc\x8a\x49\x12\xac\x77\xdb\x63\x1e\x12\xdb\xd9\x68\x33\ +\xeb\xe1\xb1\x5d\x35\xdb\x63\x43\x62\xbd\xbf\x04\x7b\x80\xdd\x6d\ +\x06\xb3\xae\x9f\x08\x35\xb3\x2c\x41\x31\x80\xde\x4a\xac\x01\x0c\ +\x82\x18\x29\x97\xfd\x70\xf5\x72\x88\xad\xc5\x99\x03\x18\x3d\xc0\ +\x26\xee\xdd\xfc\x85\x55\x29\xe8\x38\x68\xa0\x00\xc6\xc5\x81\x75\ +\xe7\xd7\xee\xc5\x7e\xc0\x05\x02\x01\x03\x80\xf1\xf5\x3b\xeb\xb4\ +\x2f\xfa\xd0\xb4\x62\xa4\x09\x38\x00\xcc\xf6\x5b\xae\x3a\xb9\x16\ +\xae\xce\x4c\x43\x00\x41\xf5\x96\x63\x0e\x50\x35\x9d\x42\xdd\xf6\ +\x91\xe0\xd6\xb4\x82\x32\x31\x02\x2c\x00\x16\xb1\x6c\xa9\x6a\x95\ +\xd3\xa0\xf7\x72\xe6\x11\x80\x67\x40\x03\x60\x9d\xe0\x99\xbd\x31\ +\x79\x36\x9e\x5e\x58\xd4\xcf\x1e\x06\xd8\x5c\x8f\x39\x80\x6d\x8d\ +\x78\xe6\xe4\x76\xeb\x85\x76\xd1\xaf\x5b\xed\x38\x2c\xfd\x00\x40\ +\x04\x00\x4e\x6a\xc2\xe5\x42\xe5\xac\xd1\xe9\x76\xdb\x8d\xcb\xea\ +\x81\x4d\xa5\x60\x36\xd0\xbe\xca\x01\x00\xe4\x05\xa6\xe3\x78\x05\ +\xc8\x00\xaa\x2c\xa7\x9f\x1f\x03\x60\x03\x68\xb0\x9b\x7e\xa2\x8d\ +\xb1\xaf\xf0\x03\xb3\xf9\xd7\xc2\xe8\xac\xca\x1e\x60\xce\x68\xfa\ +\x47\x53\x00\x94\x00\xeb\x2b\xa4\x9e\x87\x58\x7d\x06\xc0\x0a\xe0\ +\xbf\x61\x96\x58\x9b\x01\xe0\x05\xf0\xdb\x2f\x29\xdb\x5c\x00\x60\ +\x06\x80\xc7\x6f\xde\x9b\x86\xc9\xdf\xc7\x10\xea\x08\x26\x51\x72\ +\x71\x93\xf3\x34\xfb\x72\x6f\x05\xc0\x03\x00\x00\x4c\x2f\x32\x2e\ +\x5b\xa4\xd5\x1f\x35\x08\x7f\x04\x99\x2a\xab\xb4\x4a\xce\xee\x08\ +\x62\xae\xd6\x56\xe0\x63\x46\xc0\xb9\xc2\xfa\xb4\x5d\xcd\x5b\x29\ +\xc8\xd9\x4a\x73\xb4\x82\x8f\x1b\xa1\x24\x4b\xcf\x87\xdd\xab\xe3\ +\xc3\x62\x3e\x9d\x4c\xc8\x92\x20\x25\x52\x99\xfc\xfe\xd7\xf2\x69\ +\xb3\x3f\x59\xc0\x47\x8f\x28\x67\x8b\x13\x00\x01\x10\x00\x01\x10\ +\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\ +\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\x10\x00\x01\ +\x10\x00\x01\x10\x00\x01\x10\x40\x80\x00\x71\x1b\x04\x40\x00\x04\ +\xf0\x0e\x10\xdf\x41\x00\x04\x40\x00\x04\x10\xeb\xf1\x17\xe9\x89\ +\x47\x68\xda\x1b\x7c\x00\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ +\x60\x82\ +" + +qt_resource_name = b"\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x09\ +\x0a\x87\xa4\xa7\ +\x00\x73\ +\x00\x69\x00\x64\x00\x65\x00\x34\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x0a\x88\xa4\xa7\ +\x00\x73\ +\x00\x69\x00\x64\x00\x65\x00\x35\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x0a\x89\xa4\xa7\ +\x00\x73\ +\x00\x69\x00\x64\x00\x65\x00\x36\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x0a\x84\xa4\xa7\ +\x00\x73\ +\x00\x69\x00\x64\x00\x65\x00\x31\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x0a\x85\xa4\xa7\ +\x00\x73\ +\x00\x69\x00\x64\x00\x65\x00\x32\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x0a\x86\xa4\xa7\ +\x00\x73\ +\x00\x69\x00\x64\x00\x65\x00\x33\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x02\ +\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x16\x7f\ +\x00\x00\x00\x72\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x97\ +\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x21\x83\ +\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x05\x42\ +\x00\x00\x00\x42\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xed\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/samplebinding/CMakeLists.txt b/examples/samplebinding/CMakeLists.txt new file mode 100644 index 0000000..03ab857 --- /dev/null +++ b/examples/samplebinding/CMakeLists.txt @@ -0,0 +1,233 @@ +cmake_minimum_required(VERSION 3.1) +cmake_policy(VERSION 3.1) + +# Enable policy to not use RPATH settings for install_name on macOS. +if(POLICY CMP0068) + cmake_policy(SET CMP0068 NEW) +endif() + +# Consider changing the project name to something relevant for you. +project(SampleBinding) + +# ================================ General configuration ====================================== + +# Set CPP standard to C++11 minimum. +set(CMAKE_CXX_STANDARD 11) + +# The sample library for which we will create bindings. You can change the name to something +# relevant for your project. +set(sample_library "libuniverse") + +# The name of the generated bindings module (as imported in Python). You can change the name +# to something relevant for your project. +set(bindings_library "Universe") + +# The header file with all the types and functions for which bindings will be generated. +# Usually it simply includes other headers of the library you are creating bindings for. +set(wrapped_header ${CMAKE_SOURCE_DIR}/bindings.h) + +# The typesystem xml file which defines the relationships between the C++ types / functions +# and the corresponding Python equivalents. +set(typesystem_file ${CMAKE_SOURCE_DIR}/bindings.xml) + +# Specify which C++ files will be generated by shiboken. This includes the module wrapper +# and a '.cpp' file per C++ type. These are needed for generating the module shared +# library. +set(generated_sources + ${CMAKE_CURRENT_BINARY_DIR}/${bindings_library}/universe_module_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${bindings_library}/icecream_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${bindings_library}/truck_wrapper.cpp) + + +# ================================== Shiboken detection ====================================== + + +# Macro to get various pyside / python include / link flags and paths. +# Uses the not entirely supported utils/pyside2_config.py file. +macro(pyside2_config option output_var) + if(${ARGC} GREATER 2) + set(is_list ${ARGV2}) + else() + set(is_list "") + endif() + + execute_process( + COMMAND python "${CMAKE_SOURCE_DIR}/../utils/pyside2_config.py" ${option} + OUTPUT_VARIABLE ${output_var} + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if ("${${output_var}}" STREQUAL "") + message(FATAL_ERROR "Error: Calling pyside2_config.py ${option} returned no output.") + endif() + if(is_list) + string (REPLACE " " ";" ${output_var} "${${output_var}}") + endif() +endmacro() + +# Query for the shiboken path, Python path, include paths and linker flags. +pyside2_config(--pyside2 pyside2_path) +pyside2_config(--python-include python_include_dir) +pyside2_config(--shiboken-include shiboken_include_dir 1) +pyside2_config(--shiboken-shared-libraries-cmake shiboken_shared_libraries 0) +pyside2_config(--python-link-cmake python_linking_data 0) + +set(shiboken_path "${pyside2_path}/shiboken2${CMAKE_EXECUTABLE_SUFFIX}") +if(NOT EXISTS ${shiboken_path}) + message(FATAL_ERROR "Shiboken executable not found at path: ${shiboken_path}") +endif() + + +# ==================================== RPATH configuration ==================================== + + +# ============================================================================================= +# !!! (The section below is deployment related, so in a real world application you will want to +# take care of this properly with some custom script or tool). +# ============================================================================================= +# Enable rpaths so that the built shared libraries find their dependencies. +set(CMAKE_SKIP_BUILD_RPATH FALSE) +set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) +set(CMAKE_INSTALL_RPATH ${pyside2_path} ${CMAKE_CURRENT_SOURCE_DIR}) +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +# ============================================================================================= +# !!! End of dubious section. +# ============================================================================================= + + +# =============================== CMake target - sample_library =============================== + + +# Define the sample shared library for which we will create bindings. +set(${sample_library}_sources icecream.cpp truck.cpp) +add_library(${sample_library} SHARED ${${sample_library}_sources}) +set_property(TARGET ${sample_library} PROPERTY PREFIX "") + +# Needed mostly on Windows to export symbols, and create a .lib file, otherwise the binding +# library can't link to the sample library. +target_compile_definitions(${sample_library} PRIVATE BINDINGS_BUILD) + + +# ====================== Shiboken target for generating binding C++ files ==================== + + +# Set up the options to pass to shiboken. +set(shiboken_options --generator-set=shiboken --enable-parent-ctor-heuristic + --enable-return-value-heuristic --use-isnull-as-nb_nonzero + --avoid-protected-hack + -I${CMAKE_SOURCE_DIR} + -T${CMAKE_SOURCE_DIR} + --output-directory=${CMAKE_CURRENT_BINARY_DIR} + ) + +set(generated_sources_dependencies ${wrapped_header} ${typesystem_file}) + +# Add custom target to run shiboken to generate the binding cpp files. +add_custom_command(OUTPUT ${generated_sources} + COMMAND ${shiboken_path} + ${shiboken_options} ${wrapped_header} ${typesystem_file} + DEPENDS ${generated_sources_dependencies} + IMPLICIT_DEPENDS CXX ${wrapped_header} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Running generator for ${typesystem_file}.") + + +# =============================== CMake target - bindings_library ============================= + + +# Set the cpp files which will be used for the bindings library. +set(${bindings_library}_sources ${generated_sources}) + +# Define and build the bindings library. +add_library(${bindings_library} MODULE ${${bindings_library}_sources}) + +# Apply relevant include and link flags. +target_include_directories(${bindings_library} PRIVATE ${python_include_dir}) +target_include_directories(${bindings_library} PRIVATE ${shiboken_include_dir}) +target_include_directories(${bindings_library} PRIVATE ${CMAKE_SOURCE_DIR}) + +target_link_libraries(${bindings_library} PRIVATE ${shiboken_shared_libraries}) +target_link_libraries(${bindings_library} PRIVATE ${sample_library}) + +# Adjust the name of generated module. +set_property(TARGET ${bindings_library} PROPERTY PREFIX "") +set_property(TARGET ${bindings_library} PROPERTY OUTPUT_NAME + "${bindings_library}${PYTHON_EXTENSION_SUFFIX}") +if(WIN32) + set_property(TARGET ${bindings_library} PROPERTY SUFFIX ".pyd") +endif() + +# Make sure the linker doesn't complain about not finding Python symbols on macOS. +if(APPLE) + set_target_properties(${bindings_library} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") +endif(APPLE) + +# Find and link to the python import library only on Windows. +# On Linux and macOS, the undefined symbols will get resolved by the dynamic linker +# (the symbols will be picked up in the Python executable). +if (WIN32) + list(GET python_linking_data 0 python_libdir) + list(GET python_linking_data 1 python_lib) + find_library(python_link_flags ${python_lib} PATHS ${python_libdir} HINTS ${python_libdir}) + target_link_libraries(${bindings_library} PRIVATE ${python_link_flags}) +endif() + + +# ================================= Dubious deployment section ================================ + + +if(WIN32) + # ========================================================================================= + # !!! (The section below is deployment related, so in a real world application you will + # want to take care of this properly (this is simply to eliminate errors that users usually + # encounter. + # ========================================================================================= + # Circumvent some "#pragma comment(lib)"s in "include/pyconfig.h" which might force to link + # against a wrong python shared library. + + set(python_versions_list 3 32 33 34 35 36 37 38) + set(python_additional_link_flags "") + foreach(ver ${python_versions_list}) + set(python_additional_link_flags + "${python_additional_link_flags} /NODEFAULTLIB:\"python${ver}_d.lib\"") + set(python_additional_link_flags + "${python_additional_link_flags} /NODEFAULTLIB:\"python${ver}.lib\"") + endforeach() + + set_target_properties(${bindings_library} + PROPERTIES LINK_FLAGS "${python_additional_link_flags}") + + # Add custom target to hard-link shiboken shared libraries into the build folder, so that + # the user doesn't have to set the PATH manually to point to the PySide2 package. + foreach(library_path ${shiboken_shared_libraries}) + string(REGEX REPLACE ".lib$" ".dll" library_path ${library_path}) + get_filename_component(base_name ${library_path} NAME) + file(TO_NATIVE_PATH ${library_path} source_path) + file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${base_name}" dest_path) + add_custom_command(OUTPUT "${base_name}" + COMMAND mklink /H "${dest_path}" "${source_path}" + DEPENDS ${library_path} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Creating hardlink to shiboken shared library ${base_name}") + + # Fake target that depends on the previous one, but has special ALL keyword, which means + # it will always be executed. + add_custom_target("fake_${base_name}" ALL DEPENDS ${base_name}) + endforeach() + # ========================================================================================= + # !!! End of dubious section. + # ========================================================================================= +endif() + +# ============================================================================================= +# !!! (The section below is deployment related, so in a real world application you will want to +# take care of this properly with some custom script or tool). +# ============================================================================================= +# Install the library and the bindings module into the source folder near the main.py file, so +# that the Python interpeter successfully imports the used module. +install(TARGETS ${bindings_library} ${sample_library} + LIBRARY DESTINATION ${CMAKE_CURRENT_SOURCE_DIR} + RUNTIME DESTINATION ${CMAKE_CURRENT_SOURCE_DIR} + ) +# ============================================================================================= +# !!! End of dubious section. +# ============================================================================================= diff --git a/examples/samplebinding/README.md b/examples/samplebinding/README.md new file mode 100644 index 0000000..85e96dd --- /dev/null +++ b/examples/samplebinding/README.md @@ -0,0 +1,223 @@ +# Sample bindings example + +This example showcases how to generate Python bindings for a +non-Qt C++ library. + +The example defines a CMake project that builds two libraries: +* `libuniverse` - a sample library with two C++ classes. +* `Universe` - the generated Python extension module that contains + bindings to the library above. + +The project file is structured in such a way that a user can copy-paste +in into their own project, and be able to build it with a minimal amount +of modifications. + +## Description + +The libuniverse library declares two classes: `Icecream` and `Truck`. + +`Icecream` objects have a flavor, and an accessor for returning the +flavor. + +`Truck` instances store a vector of `Icecream` objects, and have various +methods for adding new flavors, printing available flavors, delivering +icecream, etc. + +From a C++ perspective, `Icecream` instances are treated as +**object types** (pointer semantics) because the class declares virtual +methods. + +In contrast `Truck` does not define virtual methods and is treated as +a **value type** (copy semantics). + +Because `Truck` is a value type and it stores a vector of `Icecream` +pointers, the rule of three has to be taken into account (implement the +copy constructor, assignment operator, destructor). + +And due to `Icecream` objects being copyable, the type has to define an +implementation of the *clone()* method, to avoid type slicing issues. + +Both of these types and their methods will be exposed to Python by +generating CPython code. The code is generated by **shiboken** and +placed in separate ".cpp" files named after each C++ type. The code is +then compiled and linked into a shared library. The shared library is a +CPython extension module, which is loaded by the Python interpreter. + +Beacuse the C++ language has different semantics to Python, shiboken +needs help in figuring out how to generate the bindings code. This is +done by specifying a special XML file called a typesystem file. + +In the typesystem file you specify things like: + * which C++ primitive types should have bindings (int, bool, float) + * which C++ classes should have bindings (Icecream) and what kind of + semantics (value / object) + * Ownership rules (who deletes the C++ objects, C++ or Python) + * Code injection (for various special cases that shiboken doesn't know + about) + * Package name (name of package as imported from Python) + +In this example we declare `bool` and `std::string` as primitive types, +`Icecream` as an object type, `Truck` as a value type, +and the `clone()` and `addIcecreamFlavor(Icecream*)` need additional +info about who owns the parameter objects when passing them across +language boundaries (in this case C++ will delete the objects). + +After shiboken generates the C++ code and CMake makes an extension +module from the code, the types can be accessed in Python simply by +importing them using the original C++ names. + +``` +from Universe import Icecream, Truck +``` + +Constructing C++ wrapped objects is the same as in Python +``` +icecream = Icecream("vanilla") +truck = Truck() +``` + + +And actual C++ constructors are mapped to the Python `__init__` method. +``` +class VanillaChocolateIcecream(Icecream): + def __init__(self, flavor=""): + super(VanillaChocolateIcecream, self).__init__(flavor) +``` + + +C++ methods can be accessed as regular Python methods using the C++ +names +``` +truck.addIcecreamFlavor(icecream) +``` + + +Inheritance works as with regular Python classes, and virtual C++ +methods can be overridden simply by definining a method with the same +name as in the C++ class. +``` +class VanillaChocolateIcecream(Icecream): + # ... + def getFlavor(self): + return "vanilla sprinked with chocolate" + +``` + + +The `main.py` script demonstrates usages of these types. + +The CMake project file contains many comments explaining all the build +rules for those interested in the build process. + +## Building the project + +This example can only be built using **CMake**. +The following requirements need to be met: + +* A PySide2 package is installed into the current active Python + environment (system or virtualenv) +* A new enough version of CMake (**3.1+**). + +For Windows you will also need: +* a Visual Studio environment to be active in your terminal +* Correct visual studio architecture chosen (32 vs 64 bit) +* Make sure that your Python intepreter and bindings project build + configuration is the same (all Release, which is more likely, + or all Debug). + +The build uses the `pyside2_config.py` file to configure the project +using the current PySide2/Shiboken2 installation. + +### Using CMake + +You can build and run this example by executing the following commands +(slightly adapted to your file system layout) in a terminal: + +On macOS/Linux: +```bash +cd ~/pyside-setup/examples/samplebinding +mkdir build +cd build +cmake -H.. -B. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release +make +make install +python ../main.py +``` + +On Windows: +```bash +cd C:\pyside-setup\examples\samplebinding +mkdir build +cd build +cmake -H.. -B. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release +# or if you have jom available +# cmake -H.. -B. -G "NMake Makefiles JOM" -DCMAKE_BUILD_TYPE=Release +nmake # or jom +nmake install # or jom install +python ..\main.py +``` + +#### Windows troubleshooting + +It is possible that **CMake** can pick up the wrong compiler +for a different architecture, but it can be addressed explicitly +using the -G option: + +```bash +cmake -H.. -B. -G "Visual Studio 14 Win64" +``` + +If the `-G "Visual Studio 14 Win64"` option is used, a `sln` file +will be generated, and can be used with `MSBuild` +instead of `nmake/jom`. +The easiest way to both build and install in this case, is to use +the cmake executable: + +```bash +cmake --build . --target install --config Release +``` + +Note that using the "NMake Makefiles JOM" generator is preferred to +the MSBuild one, because the MSBuild one generates configs for both +Debug and Release, and this might lead to building errors if you +accidentally build the wrong config at least once. + +## Virtualenv Support + +If the python application is started from a terminal with an activated +python virtual environment, that environment's packages will be used for +the python module import process. +In this case, make sure that the bindings were built while the +`virtualenv` was active, so that the build system picks up the correct +python shared library and PySide2 / shiboken package. + +## Linux Shared Libraries Notes + +For this example's purpose, we link against the absolute path of the +dependent shared library `libshiboken` because the +installation of the library is done via a wheel, and there is +no clean solution to include symbolic links in a wheel package +(so that passing -lshiboken to the linker would work). + +## Windows Notes + +The build config of the bindings (Debug or Release) should match +the PySide2 build config, otherwise the application will not properly +work. + +In practice this means the only supported configurations are: + +1. release config build of the bindings + + PySide2 `setup.py` without `--debug` flag + `python.exe` for the + PySide2 build process + `python36.dll` for the linked in shared + library. +2. debug config build of the application + + PySide2 `setup.py` **with** `--debug` flag + `python_d.exe` for the + PySide2 build process + `python36_d.dll` for the linked in shared + library. + +This is necessary because all the shared libraries in question have to +link to the same C++ runtime library (`msvcrt.dll` or `msvcrtd.dll`). +To make the example as self-contained as possible, the shared libraries +in use (`pyside2.dll`, `shiboken2.dll`) are hard-linked into the build +folder of the application. diff --git a/examples/samplebinding/bindings.h b/examples/samplebinding/bindings.h new file mode 100644 index 0000000..ba42dc6 --- /dev/null +++ b/examples/samplebinding/bindings.h @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef BINDINGS_H +#define BINDINGS_H + +#include "icecream.h" +#include "truck.h" + +#endif // BINDINGS_H diff --git a/examples/samplebinding/bindings.xml b/examples/samplebinding/bindings.xml new file mode 100644 index 0000000..f082436 --- /dev/null +++ b/examples/samplebinding/bindings.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/samplebinding/icecream.cpp b/examples/samplebinding/icecream.cpp new file mode 100644 index 0000000..8d40302 --- /dev/null +++ b/examples/samplebinding/icecream.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "icecream.h" + +Icecream::Icecream(const std::string &flavor) : m_flavor(flavor) {} + +Icecream::~Icecream() {} + +const std::string Icecream::getFlavor() +{ + return m_flavor; +} + +Icecream *Icecream::clone() +{ + return new Icecream(*this); +} diff --git a/examples/samplebinding/icecream.h b/examples/samplebinding/icecream.h new file mode 100644 index 0000000..1997fdc --- /dev/null +++ b/examples/samplebinding/icecream.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ICECREAM_H +#define ICECREAM_H + +#include + +#include "macros.h" + +class BINDINGS_API Icecream +{ +public: + Icecream(const std::string &flavor); + virtual Icecream *clone(); + virtual ~Icecream(); + virtual const std::string getFlavor(); + +private: + std::string m_flavor; +}; + + +#endif // ICECREAM_H diff --git a/examples/samplebinding/macros.h b/examples/samplebinding/macros.h new file mode 100644 index 0000000..71b27c3 --- /dev/null +++ b/examples/samplebinding/macros.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MACROS_H +#define MACROS_H + +#if defined _WIN32 || defined __CYGWIN__ + // Export symbols when creating .dll and .lib, and import them when using .lib. + #if BINDINGS_BUILD + #define BINDINGS_API __declspec(dllexport) + #else + #define BINDINGS_API __declspec(dllimport) + #endif + // Disable warnings about exporting STL types being a bad idea. Don't use this in production + // code. + #pragma warning( disable : 4251 ) +#else + #define BINDINGS_API +#endif + +#endif // MACROS_H diff --git a/examples/samplebinding/main.py b/examples/samplebinding/main.py new file mode 100644 index 0000000..b9487f7 --- /dev/null +++ b/examples/samplebinding/main.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +from __future__ import print_function + +"""An example showcasing how to use bindings for a custom non-Qt C++ library""" + +from Universe import Icecream, Truck + +class VanillaChocolateIcecream(Icecream): + def __init__(self, flavor=""): + super(VanillaChocolateIcecream, self).__init__(flavor) + + def clone(self): + return VanillaChocolateIcecream(self.getFlavor()) + + def getFlavor(self): + return "vanilla sprinked with chocolate" + +class VanillaChocolateCherryIcecream(VanillaChocolateIcecream): + def __init__(self, flavor=""): + super(VanillaChocolateIcecream, self).__init__(flavor) + + def clone(self): + return VanillaChocolateCherryIcecream(self.getFlavor()) + + def getFlavor(self): + base_flavor = super(VanillaChocolateCherryIcecream, self).getFlavor() + return base_flavor + " and a cherry" + +if __name__ == '__main__': + leave_on_destruction = True + truck = Truck(leave_on_destruction) + + flavors = ["vanilla", "chocolate", "strawberry"] + for f in flavors: + icecream = Icecream(f) + truck.addIcecreamFlavor(icecream) + + truck.addIcecreamFlavor(VanillaChocolateIcecream()) + truck.addIcecreamFlavor(VanillaChocolateCherryIcecream()) + + truck.arrive() + truck.printAvailableFlavors() + result = truck.deliver() + + if result: + print("All the kids got some icecream!") + else: + print("Aww, someone didn't get the flavor they wanted...") + + if not result: + special_truck = Truck(truck) + del truck + + print("") + special_truck.setArrivalMessage("A new SPECIAL icecream truck has arrived!\n") + special_truck.arrive() + special_truck.addIcecreamFlavor(Icecream("SPECIAL *magical* icecream")) + special_truck.printAvailableFlavors() + special_truck.deliver() + print("Now everyone got the flavor they wanted!") + special_truck.leave() diff --git a/examples/samplebinding/truck.cpp b/examples/samplebinding/truck.cpp new file mode 100644 index 0000000..6e24bdc --- /dev/null +++ b/examples/samplebinding/truck.cpp @@ -0,0 +1,138 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include "truck.h" + +Truck::Truck(bool leaveOnDestruction) : m_leaveOnDestruction(leaveOnDestruction) {} + +Truck::Truck(const Truck &other) +{ + for (size_t i = 0; i < other.m_flavors.size(); ++i) { + addIcecreamFlavor(other.m_flavors[i]->clone()); + } +} + +Truck &Truck::operator=(const Truck &other) +{ + if (this != &other) { + clearFlavors(); + for (size_t i = 0; i < other.m_flavors.size(); ++i) { + addIcecreamFlavor(other.m_flavors[i]->clone()); + } + } + return *this; +} + +Truck::~Truck() +{ + if (m_leaveOnDestruction) + leave(); + clearFlavors(); +} + +void Truck::addIcecreamFlavor(Icecream *icecream) +{ + m_flavors.push_back(icecream); +} + +void Truck::printAvailableFlavors() const +{ + std::cout << "It sells the following flavors: \n"; + for (size_t i = 0; i < m_flavors.size(); ++ i) { + std::cout << " * " << m_flavors[i]->getFlavor() << '\n'; + } + std::cout << '\n'; +} + +void Truck::arrive() const +{ + std::cout << m_arrivalMessage; +} + +void Truck::leave() const +{ + std::cout << "The truck left the neighborhood.\n"; +} + +void Truck::setLeaveOnDestruction(bool value) +{ + m_leaveOnDestruction = value; +} + +void Truck::setArrivalMessage(const std::string &message) +{ + m_arrivalMessage = message; +} + +bool Truck::deliver() const +{ + std::random_device rd; + std::mt19937 mt(rd()); + std::uniform_int_distribution dist(1, 2); + + std::cout << "The truck started delivering icecream to all the kids in the neighborhood.\n"; + bool result = false; + + if (dist(mt) == 2) + result = true; + + return result; +} + +void Truck::clearFlavors() +{ + for (size_t i = 0; i < m_flavors.size(); ++i) { + delete m_flavors[i]; + } + m_flavors.clear(); +} diff --git a/examples/samplebinding/truck.h b/examples/samplebinding/truck.h new file mode 100644 index 0000000..02e304a --- /dev/null +++ b/examples/samplebinding/truck.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TRUCK_H +#define TRUCK_H + +#include + +#include "icecream.h" +#include "macros.h" + +class BINDINGS_API Truck { +public: + Truck(bool leaveOnDestruction = false); + Truck(const Truck &other); + Truck& operator=(const Truck &other); + ~Truck(); + + void addIcecreamFlavor(Icecream *icecream); + void printAvailableFlavors() const; + + bool deliver() const; + void arrive() const; + void leave() const; + + void setLeaveOnDestruction(bool value); + void setArrivalMessage(const std::string &message); + +private: + void clearFlavors(); + + bool m_leaveOnDestruction = false; + std::string m_arrivalMessage = "A new icecream truck has arrived!\n"; + std::vector m_flavors; +}; + +#endif // TRUCK_H diff --git a/examples/script/README.md b/examples/script/README.md new file mode 100644 index 0000000..6133f43 --- /dev/null +++ b/examples/script/README.md @@ -0,0 +1,9 @@ +# About QtScript + +The QtScript module is deprecated since Qt 5.5, +and hence is not being distributed through our wheels. + +However, it is possible to access the module +when using a local build of PySide2 which was built +against a Qt installation containing the Qt Script module +(ALL_OPTIONAL_MODULES in `sources/pyside2/CMakeLists.txt`). diff --git a/examples/script/helloscript.py b/examples/script/helloscript.py new file mode 100755 index 0000000..da4fa7d --- /dev/null +++ b/examples/script/helloscript.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the script/helloscript example from Qt v5.x""" + +import sys +from PySide2 import QtWidgets, QtScript + + +app = QtWidgets.QApplication(sys.argv) + +engine = QtScript.QScriptEngine() + +button = QtWidgets.QPushButton() +scriptButton = engine.newQObject(button) +engine.globalObject().setProperty("button", scriptButton) + +engine.evaluate("button.text = 'Hello World from PySide2!'") +engine.evaluate("button.styleSheet = 'font-style: italic'") +engine.evaluate("button.show()") + +sys.exit(app.exec_()) diff --git a/examples/scriptableapplication/CMakeLists.txt b/examples/scriptableapplication/CMakeLists.txt new file mode 100644 index 0000000..4119b67 --- /dev/null +++ b/examples/scriptableapplication/CMakeLists.txt @@ -0,0 +1,197 @@ +cmake_minimum_required(VERSION 3.1) +cmake_policy(VERSION 3.1) + +# Enable policy to run automoc on generated files. +if(POLICY CMP0071) + cmake_policy(SET CMP0071 NEW) +endif() + +project(scriptableapplication) + +# Set CPP standard to C++11 minimum. +set(CMAKE_CXX_STANDARD 11) + +# Find required Qt packages. +find_package(Qt5 5.9 REQUIRED COMPONENTS Core Gui Widgets) + +# Macro to get various pyside / python include / link flags. +macro(pyside2_config option output_var) + if(${ARGC} GREATER 2) + set(is_list ${ARGV2}) + else() + set(is_list "") + endif() + + execute_process( + COMMAND python "${CMAKE_SOURCE_DIR}/../utils/pyside2_config.py" ${option} + OUTPUT_VARIABLE ${output_var} + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if ("${${output_var}}" STREQUAL "") + message(FATAL_ERROR "Error: Calling pyside2_config.py ${option} returned no output.") + endif() + if(is_list) + string (REPLACE " " ";" ${output_var} "${${output_var}}") + endif() +endmacro() + +# Query for the PySide2 path, Python path, include paths and linker flags. +pyside2_config(--pyside2 PYSIDE2_PATH) +pyside2_config(--python-include PYTHON_INCLUDE_DIR) +pyside2_config(--pyside2-include PYSIDE2_INCLUDE_DIR 1) +pyside2_config(--pyside2-shared-libraries-cmake PYSIDE2_SHARED_LIBRARIES 0) +pyside2_config(--python-link-cmake PYTHON_LINKING_DATA 0) + +set(SHIBOKEN_PATH "${PYSIDE2_PATH}/shiboken2${CMAKE_EXECUTABLE_SUFFIX}") + +if(NOT EXISTS ${SHIBOKEN_PATH}) + message(FATAL_ERROR "Shiboken executable not found at path: ${SHIBOKEN_PATH}") +endif() + + +# Get all relevant Qt include dirs, to pass them on to shiboken. +get_property(QT_CORE_INCLUDE_DIRS TARGET Qt5::Core PROPERTY INTERFACE_INCLUDE_DIRECTORIES) +get_property(QT_GUI_INCLUDE_DIRS TARGET Qt5::Gui PROPERTY INTERFACE_INCLUDE_DIRECTORIES) +get_property(QT_WIDGETS_INCLUDE_DIRS TARGET Qt5::Widgets PROPERTY INTERFACE_INCLUDE_DIRECTORIES) +set(QT_INCLUDE_DIRS ${QT_CORE_INCLUDE_DIRS} ${QT_GUI_INCLUDE_DIRS} ${QT_WIDGETS_INCLUDE_DIRS}) +set(INCLUDES "") +foreach(INCLUDE_DIR ${QT_INCLUDE_DIRS}) + list(APPEND INCLUDES "-I${INCLUDE_DIR}") +endforeach() + +# On macOS, check if Qt is a framework build. This affects how include paths should be handled. +get_target_property(QtCore_is_framework Qt5::Core FRAMEWORK) +if (QtCore_is_framework) + get_target_property(qt_core_library_location Qt5::Core LOCATION) + get_filename_component(qt_core_library_location_dir "${qt_core_library_location}" DIRECTORY) + get_filename_component(lib_dir "${qt_core_library_location_dir}/../" ABSOLUTE) + list(APPEND INCLUDES "--framework-include-paths=${lib_dir}") +endif() + +# Set up the options to pass to shiboken. +set(WRAPPED_HEADER ${CMAKE_SOURCE_DIR}/wrappedclasses.h) +set(TYPESYSTEM_FILE ${CMAKE_SOURCE_DIR}/scriptableapplication.xml) + +set(SHIBOKEN_OPTIONS --generator-set=shiboken --enable-parent-ctor-heuristic + --enable-pyside-extensions --enable-return-value-heuristic --use-isnull-as-nb_nonzero + --avoid-protected-hack + ${INCLUDES} + -I${CMAKE_SOURCE_DIR} + -T${CMAKE_SOURCE_DIR} + -T${PYSIDE2_PATH}/typesystems + --output-directory=${CMAKE_CURRENT_BINARY_DIR} + ) + +# Specify which sources will be generated by shiboken, and their dependencies. +set(GENERATED_SOURCES + ${CMAKE_CURRENT_BINARY_DIR}/AppLib/applib_module_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/AppLib/mainwindow_wrapper.cpp) + +set(GENERATED_SOURCES_DEPENDENCIES + ${WRAPPED_HEADER} + ${TYPESYSTEM_FILE} + ) + +# Add custom target to run shiboken. +add_custom_command(OUTPUT ${GENERATED_SOURCES} + COMMAND ${SHIBOKEN_PATH} + ${SHIBOKEN_OPTIONS} ${WRAPPED_HEADER} ${TYPESYSTEM_FILE} + DEPENDS ${GENERATED_SOURCES_DEPENDENCIES} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Running generator for ${TYPESYSTEM_FILE}.") + +# Set the CPP files. +set(SOURCES + mainwindow.cpp + pythonutils.cpp + ${GENERATED_SOURCES} + ) + +# We need to include the headers for the module bindings that we use. +set(PYSIDE2_ADDITIONAL_INCLUDES "") +foreach(INCLUDE_DIR ${PYSIDE2_INCLUDE_DIR}) + list(APPEND PYSIDE2_ADDITIONAL_INCLUDES "${INCLUDE_DIR}/QtCore") + list(APPEND PYSIDE2_ADDITIONAL_INCLUDES "${INCLUDE_DIR}/QtGui") + list(APPEND PYSIDE2_ADDITIONAL_INCLUDES "${INCLUDE_DIR}/QtWidgets") +endforeach() + +# ============================================================================================= +# !!! (The section below is deployment related, so in a real world application you will want to +# take care of this properly with some custom script or tool). +# ============================================================================================= +# Enable rpaths so that the example can be executed from the build dir. +set(CMAKE_SKIP_BUILD_RPATH FALSE) +set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) +set(CMAKE_INSTALL_RPATH ${PYSIDE2_PATH}) +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +# ============================================================================================= +# !!! End of dubious section. +# ============================================================================================= + +# Declare executable so we can enable automoc. +add_executable(${PROJECT_NAME} main.cpp) + +# Enable automoc. +set_property(TARGET ${PROJECT_NAME} PROPERTY AUTOMOC 1) + +# Add the rest of the sources. +target_sources(${PROJECT_NAME} PUBLIC ${SOURCES}) + +# Apply relevant include and link flags. +target_include_directories(${PROJECT_NAME} PRIVATE ${PYTHON_INCLUDE_DIR}) +target_include_directories(${PROJECT_NAME} PRIVATE ${PYSIDE2_INCLUDE_DIR}) +target_include_directories(${PROJECT_NAME} PRIVATE ${PYSIDE2_ADDITIONAL_INCLUDES}) +target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}) + +target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets) +target_link_libraries(${PROJECT_NAME} PRIVATE ${PYSIDE2_SHARED_LIBRARIES}) + +# Find and link to the python library. +list(GET PYTHON_LINKING_DATA 0 PYTHON_LIBDIR) +list(GET PYTHON_LINKING_DATA 1 PYTHON_LIB) +find_library(PYTHON_LINK_FLAGS ${PYTHON_LIB} PATHS ${PYTHON_LIBDIR} HINTS ${PYTHON_LIBDIR}) +target_link_libraries(${PROJECT_NAME} PRIVATE ${PYTHON_LINK_FLAGS}) + +# Same as CONFIG += no_keywords to avoid syntax errors in object.h due to the usage of the word Slot +target_compile_definitions(${PROJECT_NAME} PRIVATE QT_NO_KEYWORDS) + +if(WIN32) + # ============================================================================================= + # !!! (The section below is deployment related, so in a real world application you will want to + # take care of this properly (this is simply to eliminate errors that users usually encounter. + # ============================================================================================= + # Circumvent some "#pragma comment(lib)"s in "include/pyconfig.h" which might force to link + # against a wrong python shared library. + + set(PYTHON_VERSIONS_LIST 3 32 33 34 35 36 37 38) + set(PYTHON_ADDITIONAL_LINK_FLAGS "") + foreach(VER ${PYTHON_VERSIONS_LIST}) + set(PYTHON_ADDITIONAL_LINK_FLAGS + "${PYTHON_ADDITIONAL_LINK_FLAGS} /NODEFAULTLIB:\"python${VER}_d.lib\"") + set(PYTHON_ADDITIONAL_LINK_FLAGS + "${PYTHON_ADDITIONAL_LINK_FLAGS} /NODEFAULTLIB:\"python${VER}.lib\"") + endforeach() + + set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "${PYTHON_ADDITIONAL_LINK_FLAGS}") + + # Add custom target to hard link PySide2 shared libraries (just like in qmake example), so you + # don't have to set PATH manually to point to the PySide2 package. + foreach(LIBRARY_PATH ${PYSIDE2_SHARED_LIBRARIES}) + string(REGEX REPLACE ".lib$" ".dll" LIBRARY_PATH ${LIBRARY_PATH}) + get_filename_component(BASE_NAME ${LIBRARY_PATH} NAME) + file(TO_NATIVE_PATH ${LIBRARY_PATH} SOURCE_PATH) + file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${BASE_NAME}" DEST_PATH) + add_custom_command(OUTPUT "${BASE_NAME}" + COMMAND mklink /H "${DEST_PATH}" "${SOURCE_PATH}" + DEPENDS ${LIBRARY_PATH} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Creating hardlink to PySide2 shared library ${BASE_NAME}") + + # Fake target that depends on the previous one, but has special ALL keyword, which means + # it will always be executed. + add_custom_target("fake_${BASE_NAME}" ALL DEPENDS ${BASE_NAME}) + endforeach() + # ============================================================================================= + # !!! End of dubious section. + # ============================================================================================= +endif() diff --git a/examples/scriptableapplication/README.md b/examples/scriptableapplication/README.md new file mode 100644 index 0000000..d359581 --- /dev/null +++ b/examples/scriptableapplication/README.md @@ -0,0 +1,170 @@ +# Scriptable Application + +This example demonstrates how to make a Qt C++ application scriptable. + +It has a class **MainWindow** (`mainwindow.{cpp,h}`) +that inherits from *QMainWindow*, for which bindings are generated +using Shiboken. + +The header `wrappedclasses.h` is passed to Shiboken which generates +class wrappers and headers in a sub directory called **AppLib/** +which are linked to the application. + +The files `pythonutils.{cpp,h}` contain some code which binds the +instance of **MainWindow** to a variable called **'mainWindow'** in +the global Python namespace (`__main___`). +It is then possible to run Python script snippets like: + +```python +mainWindow.testFunction1() +``` +which trigger the underlying C++ function. + +## Building the project + +This example can be built using *CMake* or *QMake*, +but there are common requirements that you need to take into +consideration: + +* Make sure that a --standalone PySide2 package (bundled with Qt libraries) + is installed into the current active Python environment + (system or virtualenv) +* qmake has to be in your PATH: + * so that CMake find_package(Qt5) works (used for include headers), + * used for building the application with qmake instead of CMake +* use the same Qt version for building the example application, as was used + for building PySide2, this is to ensure binary compatibility between the + newly generated bindings libraries, the PySide2 libraries and the + Qt libraries. + +For Windows you will also need: +* a Visual Studio environment to be active in your terminal +* Correct visual studio architecture chosen (32 vs 64 bit) +* Make sure that your Qt + Python + PySide2 package + app build configuration + is the same (all Release, which is more likely, or all Debug). +* Make sure that your Qt + Python + PySide2 package + app are built with the + same version of MSVC, to avoid mixing of C++ runtime libraries. + In principle this means that if you use the python.org provided Python + interpreters, you need to use MSVC2015 for Python 3 projects, and MSVC2008 + for Python 2 projects. Which also means that you can't use official Qt + packages, because none of the supported ones are built with MSVC2008. + +Both build options will use the `pyside2_config.py` file to configure the project +using the current PySide2/Shiboken2 installation (for qmake via pyside2.pri, +and for CMake via the project CMakeLists.txt). + + +### Using CMake + +To build this example with CMake you will need a recent version of CMake (3.1+). + +You can build this example by executing the following commands +(slightly adapted to your file system layout) in a terminal: + +On macOS/Linux: +```bash +cd ~/pyside-setup/examples/scriptableapplication +mkdir build +cd build +cmake -H.. -B. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release +make +./scriptableapplication +``` + +On Windows: +```bash +cd C:\pyside-setup\examples\scriptableapplication +mkdir build +cd build +cmake -H.. -B. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release +# or if you have jom available +# cmake -H.. -B. -G "NMake Makefiles JOM" -DCMAKE_BUILD_TYPE=Release +nmake # or jom +scriptableapplication.exe +``` + +### Using QMake + +The file `scriptableapplication.pro` is the project file associated +to the example when using qmake. + +You can build this example by executing: +```bash +mkdir build +cd build +qmake .. +make # or nmake / jom for Windows +``` + +#### Windows troubleshooting + +Using **qmake** should work out of the box, there was a known issue +with directories and white spaces that is solved by using the +"~1" character, so the path will change from: +c:\Program Files\Python34\libs +to +c:\Progra~1\Python34\libs +this will avoid the issues when the Makefiles are generated. + +It is possible when using **cmake** to pick up the wrong compiler +for a different architecture, but it can be addressed explicitly +using the -G option: + +```bash +cmake -H.. -B. -G "Visual Studio 14 Win64" -DCMAKE_BUILD_TYPE=Release +``` + +If the `-G "Visual Studio 14 Win64"` option is used, a `sln` file +will be generated, and can be used with `MSBuild` +instead of `nmake/jom`. + +```bash +MSBuild scriptableapplication.sln "/p:Configuration=Release" +``` + +Note that using the "NMake Makefiles JOM" generator is preferred to +the MSBuild one, because in the latter case the executable is placed +into a directory other than the one that contains the dependency +dlls (shiboken, pyside). This leads to execution problems if the +application is started within the Release subdirectory and not the +one containing the dependencies. + +## Virtualenv Support + +If the application is started from a terminal with an activated python +virtual environment, that environment's packages will be used for the +python module import process. +In this case, make sure that the application was built while the +`virtualenv` was active, so that the build system picks up the correct +python shared library and PySide2 package. + +## Linux Shared Libraries Notes + +For this example's purpose, we link against the absolute paths of the +shared libraries (`libshiboken` and `libpyside`) because the +installation of the modules is being done via wheels, and there is +no clean solution to include symbolic links in the package +(so that regular -lshiboken works). + +## Windows Notes + +The build config of the application (Debug or Release) should match +the PySide2 build config, otherwise the application will not properly +work. + +In practice this means the only supported configurations are: + +1. release config build of the application + + PySide2 `setup.py` without `--debug` flag + `python.exe` for the + PySide2 build process + `python36.dll` for the linked in shared + library + release build of Qt. +2. debug config build of the application + + PySide2 `setup.py` **with** `--debug` flag + `python_d.exe` for the + PySide2 build process + `python36_d.dll` for the linked in shared + library + debug build of Qt. + +This is necessary because all the shared libraries in question have to +link to the same C++ runtime library (`msvcrt.dll` or `msvcrtd.dll`). +To make the example as self-contained as possible, the shared libraries +in use (`pyside2.dll`, `shiboken2.dll`) are hard-linked into the build +folder of the application. diff --git a/examples/scriptableapplication/main.cpp b/examples/scriptableapplication/main.cpp new file mode 100644 index 0000000..d7cb4b6 --- /dev/null +++ b/examples/scriptableapplication/main.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "mainwindow.h" + +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow mainWindow; + const QRect availableGeometry = a.desktop()->availableGeometry(&mainWindow); + mainWindow.resize(availableGeometry.width() / 2, availableGeometry.height() / 2); + mainWindow.show(); + return a.exec(); +} diff --git a/examples/scriptableapplication/mainwindow.cpp b/examples/scriptableapplication/mainwindow.cpp new file mode 100644 index 0000000..92415a7 --- /dev/null +++ b/examples/scriptableapplication/mainwindow.cpp @@ -0,0 +1,141 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "mainwindow.h" +#include "pythonutils.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +static const char defaultScript[] = + "print(\"Hello, world\")\n" + "mainWindow.testFunction1()\n"; + +MainWindow::MainWindow() + : m_scriptEdit(new QPlainTextEdit(QLatin1String(defaultScript), this)) +{ + setWindowTitle(tr("Scriptable Application")); + + QMenu *fileMenu = menuBar()->addMenu(tr("&File")); + const QIcon runIcon = QIcon::fromTheme(QStringLiteral("system-run")); + QAction *runAction = fileMenu->addAction(runIcon, tr("&Run..."), this, &MainWindow::slotRunScript); + runAction->setShortcut(Qt::CTRL + Qt::Key_R); + QAction *diagnosticAction = fileMenu->addAction(tr("&Print Diagnostics"), this, &MainWindow::slotPrintDiagnostics); + diagnosticAction->setShortcut(Qt::CTRL + Qt::Key_D); + fileMenu->addAction(tr("&Invoke testFunction1()"), this, &MainWindow::testFunction1); + const QIcon quitIcon = QIcon::fromTheme(QStringLiteral("application-exit")); + QAction *quitAction = fileMenu->addAction(quitIcon, tr("&Quit"), qApp, &QCoreApplication::quit); + quitAction->setShortcut(Qt::CTRL + Qt::Key_Q); + + QMenu *editMenu = menuBar()->addMenu(tr("&Edit")); + const QIcon clearIcon = QIcon::fromTheme(QStringLiteral("edit-clear")); + QAction *clearAction = editMenu->addAction(clearIcon, tr("&Clear"), m_scriptEdit, &QPlainTextEdit::clear); + + QMenu *helpMenu = menuBar()->addMenu(tr("&Help")); + const QIcon aboutIcon = QIcon::fromTheme(QStringLiteral("help-about")); + QAction *aboutAction = helpMenu->addAction(aboutIcon, tr("&About Qt"), qApp, &QApplication::aboutQt); + + QToolBar *toolBar = new QToolBar; + addToolBar(toolBar); + toolBar->addAction(quitAction); + toolBar->addSeparator(); + toolBar->addAction(clearAction); + toolBar->addSeparator(); + toolBar->addAction(runAction); + toolBar->addSeparator(); + toolBar->addAction(aboutAction); + + m_scriptEdit->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); + setCentralWidget(m_scriptEdit); + + if (!PythonUtils::bindAppObject("__main__", "mainWindow", PythonUtils::MainWindowType, this)) + statusBar()->showMessage(tr("Error loading the application module")); +} + +void MainWindow::slotRunScript() +{ + const QStringList script = m_scriptEdit->toPlainText().trimmed().split(QLatin1Char('\n'), QString::SkipEmptyParts); + if (!script.isEmpty()) + runScript(script); +} + +void MainWindow::slotPrintDiagnostics() +{ + const QStringList script = QStringList() + << "import sys" << "print('Path=', sys.path)" << "print('Executable=', sys.executable)"; + runScript(script); +} + +void MainWindow::runScript(const QStringList &script) +{ + if (!::PythonUtils::runScript(script)) + statusBar()->showMessage(tr("Error running script")); +} + +void MainWindow::testFunction1() +{ + static int n = 1; + QString message; + QTextStream(&message) << __FUNCTION__ << " called #" << n++; + qDebug().noquote() << message; + statusBar()->showMessage(message); +} diff --git a/examples/scriptableapplication/mainwindow.h b/examples/scriptableapplication/mainwindow.h new file mode 100644 index 0000000..ce61383 --- /dev/null +++ b/examples/scriptableapplication/mainwindow.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +class QPlainTextEdit; + +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + MainWindow(); + + void testFunction1(); + +private Q_SLOTS: + void slotRunScript(); + void slotPrintDiagnostics(); + +private: + void runScript(const QStringList &); + + QPlainTextEdit *m_scriptEdit; +}; + +#endif // MAINWINDOW_H diff --git a/examples/scriptableapplication/pyside2.pri b/examples/scriptableapplication/pyside2.pri new file mode 100644 index 0000000..17be439 --- /dev/null +++ b/examples/scriptableapplication/pyside2.pri @@ -0,0 +1,30 @@ +PYSIDE_CONFIG = $$PWD/../utils/pyside2_config.py + +PYSIDE2 = $$system(python $$PYSIDE_CONFIG --pyside2) +isEmpty(PYSIDE2): error(Unable to locate the PySide2 package location) + +PYTHON_INCLUDE = $$system(python $$PYSIDE_CONFIG --python-include) +isEmpty(PYTHON_INCLUDE): error(Unable to locate the Python include headers directory) + +PYTHON_LFLAGS = $$system(python $$PYSIDE_CONFIG --python-link) +isEmpty(PYTHON_LFLAGS): error(Unable to locate the Python library for linking) + +PYSIDE2_INCLUDE = $$system(python $$PYSIDE_CONFIG --pyside2-include) +isEmpty(PYSIDE2_INCLUDE): error(Unable to locate the PySide2 include headers directory) + +PYSIDE2_LFLAGS = $$system(python $$PYSIDE_CONFIG --pyside2-link) +isEmpty(PYSIDE2_LFLAGS): error(Unable to locate the PySide2 libraries for linking) + +PYSIDE2_SHARED_LIBRARIES = $$system(python $$PYSIDE_CONFIG --pyside2-shared-libraries) +isEmpty(PYSIDE2_SHARED_LIBRARIES): error(Unable to locate the used PySide2 shared libraries) + +INCLUDEPATH += "$$PYTHON_INCLUDE" $$PYSIDE2_INCLUDE +LIBS += $$PYTHON_LFLAGS $$PYSIDE2_LFLAGS +!build_pass:message(INCLUDEPATH is $$INCLUDEPATH) +!build_pass:message(LIBS are $$LIBS) + +!build_pass:message(Using $$PYSIDE2) + +!win32 { + QMAKE_RPATHDIR += $$PYSIDE2 +} diff --git a/examples/scriptableapplication/pythonutils.cpp b/examples/scriptableapplication/pythonutils.cpp new file mode 100644 index 0000000..f546a5a --- /dev/null +++ b/examples/scriptableapplication/pythonutils.cpp @@ -0,0 +1,176 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "pythonutils.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +/* from AppLib bindings */ + +#if PY_MAJOR_VERSION >= 3 + extern "C" PyObject *PyInit_AppLib(); +#else + extern "C" void initAppLib(); +#endif + +// This variable stores all Python types exported by this module. +extern PyTypeObject **SbkAppLibTypes; + +// This variable stores all type converters exported by this module. +extern SbkConverter **SbkAppLibTypeConverters; + +namespace PythonUtils { + +static State state = PythonUninitialized; + +static void cleanup() +{ + if (state > PythonUninitialized) { + Py_Finalize(); + state = PythonUninitialized; + } +} + +State init() +{ + if (state > PythonUninitialized) + return state; + + // If there is an active python virtual environment, use that environment's packages location. + QByteArray virtualEnvPath = qgetenv("VIRTUAL_ENV"); + if (!virtualEnvPath.isEmpty()) + qputenv("PYTHONHOME", virtualEnvPath); + + Py_Initialize(); + qAddPostRoutine(cleanup); + state = PythonInitialized; +#if PY_MAJOR_VERSION >= 3 + const bool pythonInitialized = PyInit_AppLib() != nullptr; +#else + const bool pythonInitialized = true; + initAppLib(); +#endif + const bool pyErrorOccurred = PyErr_Occurred() != nullptr; + if (pythonInitialized && !pyErrorOccurred) { + state = AppModuleLoaded; + } else { + if (pyErrorOccurred) + PyErr_Print(); + qWarning("Failed to initialize the module."); + } + return state; +} + +bool bindAppObject(const QString &moduleName, const QString &name, + int index, QObject *o) +{ + if (init() != AppModuleLoaded) + return false; + PyTypeObject *typeObject = SbkAppLibTypes[index]; + + PyObject *po = Shiboken::Conversions::pointerToPython(reinterpret_cast(typeObject), o); + if (!po) { + qWarning() << __FUNCTION__ << "Failed to create wrapper for" << o; + return false; + } + Py_INCREF(po); + + PyObject *module = PyImport_AddModule(moduleName.toLocal8Bit().constData()); + if (!module) { + Py_DECREF(po); + if (PyErr_Occurred()) + PyErr_Print(); + qWarning() << __FUNCTION__ << "Failed to locate module" << moduleName; + return false; + } + + if (PyModule_AddObject(module, name.toLocal8Bit().constData(), po) < 0) { + if (PyErr_Occurred()) + PyErr_Print(); + qWarning() << __FUNCTION__ << "Failed add object" << name << "to" << moduleName; + return false; + } + + return true; +} + +bool runScript(const QStringList &script) +{ + if (init() == PythonUninitialized) + return false; + + // Concatenating all the lines + QString content; + QTextStream ss(&content); + for (const QString &line: script) + ss << line << "\n"; + + // Executing the whole script as one line + bool result = true; + const QByteArray line = content.toUtf8(); + if (PyRun_SimpleString(line.constData()) == -1) { + if (PyErr_Occurred()) + PyErr_Print(); + result = false; + } + + return result; +} + +} // namespace PythonUtils diff --git a/examples/scriptableapplication/pythonutils.h b/examples/scriptableapplication/pythonutils.h new file mode 100644 index 0000000..21aef19 --- /dev/null +++ b/examples/scriptableapplication/pythonutils.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYTHONUTILS_H +#define PYTHONUTILS_H + +class QObject; +class QString; +class QStringList; + +namespace PythonUtils { + +enum AppLibTypes +{ + MainWindowType = 0 // SBK_MAINWINDOW_IDX +}; + +enum State +{ + PythonUninitialized, + PythonInitialized, + AppModuleLoaded +}; + +State init(); + +bool bindAppObject(const QString &moduleName, const QString &name, + int index, QObject *o); + +bool runScript(const QStringList &script); + +} // namespace PythonUtils + +#endif // PYTHONUTILS_H diff --git a/examples/scriptableapplication/scriptableapplication.pro b/examples/scriptableapplication/scriptableapplication.pro new file mode 100644 index 0000000..8a09b0a --- /dev/null +++ b/examples/scriptableapplication/scriptableapplication.pro @@ -0,0 +1,85 @@ +TEMPLATE = app +CONFIG += no_keywords # avoid clash with slots in Python.h +CONFIG += console force_debug_info +QT += widgets + +include(pyside2.pri) + +WRAPPED_HEADER = wrappedclasses.h +WRAPPER_DIR = $$OUT_PWD/AppLib +TYPESYSTEM_FILE = scriptableapplication.xml + +QT_INCLUDEPATHS = -I"$$[QT_INSTALL_HEADERS]" -I"$$[QT_INSTALL_HEADERS]/QtCore" \ + -I"$$[QT_INSTALL_HEADERS]/QtGui" -I"$$[QT_INSTALL_HEADERS]/QtWidgets" + +# On macOS, check if Qt is a framework build. This affects how include paths should be handled. +qtConfig(framework): QT_INCLUDEPATHS += --framework-include-paths=$$[QT_INSTALL_LIBS] + +SHIBOKEN_OPTIONS = --generator-set=shiboken --enable-parent-ctor-heuristic \ + --enable-pyside-extensions --enable-return-value-heuristic --use-isnull-as-nb_nonzero \ + $$QT_INCLUDEPATHS -I$$PWD -T$$PWD -T$$PYSIDE2/typesystems --output-directory=$$OUT_PWD + +# MSVC does not honor #define protected public... +win32:SHIBOKEN_OPTIONS += --avoid-protected-hack + +# Prepare the shiboken tool +QT_TOOL.shiboken.binary = $$system_path($$PYSIDE2/shiboken2) +qtPrepareTool(SHIBOKEN, shiboken) + +# Shiboken run that adds the module wrapper to GENERATED_SOURCES +shiboken.output = $$WRAPPER_DIR/applib_module_wrapper.cpp +shiboken.commands = $$SHIBOKEN $$SHIBOKEN_OPTIONS $$PWD/wrappedclasses.h ${QMAKE_FILE_IN} +shiboken.input = TYPESYSTEM_FILE +shiboken.dependency_type = TYPE_C +shiboken.variable_out = GENERATED_SOURCES + +# A dummy command that pretends to produce the class wrappers from the headers +# depending on the module wrapper +WRAPPED_CLASSES = mainwindow.h +module_wrapper_dummy_command.output = $$WRAPPER_DIR/${QMAKE_FILE_BASE}_wrapper.cpp +module_wrapper_dummy_command.commands = echo ${QMAKE_FILE_IN} +module_wrapper_dummy_command.depends = $$WRAPPER_DIR/applib_module_wrapper.cpp +module_wrapper_dummy_command.input = WRAPPED_CLASSES +module_wrapper_dummy_command.dependency_type = TYPE_C +module_wrapper_dummy_command.variable_out = GENERATED_SOURCES + +# Get the path component to the active config build folder +defineReplace(getOutDir) { + out_dir = $$OUT_PWD + CONFIG(release, debug|release): out_dir = $$out_dir/release + else:out_dir = $$out_dir/debug + return($$out_dir) +} + +# Create hardlinks to the PySide2 shared libraries, so the example can be executed without manually +# setting the PATH. +win32 { + out_dir = $$getOutDir() + # no_link tell not to link to the output files, target_predeps forces the command to actually + # execute, explicit_dependencies is a magic value that tells qmake not to run the commands + # if the output files already exist. + hard_link_libraries.CONFIG = no_link target_predeps explicit_dependencies + hard_link_libraries.output = $$out_dir/${QMAKE_FILE_BASE}${QMAKE_FILE_EXT} + hard_link_libraries.commands = mklink /H $$shell_path($$out_dir/${QMAKE_FILE_BASE}${QMAKE_FILE_EXT}) $$shell_path(${QMAKE_FILE_IN}) + hard_link_libraries.input = PYSIDE2_SHARED_LIBRARIES +} + +QMAKE_EXTRA_COMPILERS += shiboken module_wrapper_dummy_command +win32:QMAKE_EXTRA_COMPILERS += hard_link_libraries + +INCLUDEPATH += $$WRAPPER_DIR + +for(i, PYSIDE2_INCLUDE) { + INCLUDEPATH += $$i/QtWidgets $$i/QtGui $$i/QtCore +} + +SOURCES += \ + main.cpp \ + mainwindow.cpp \ + pythonutils.cpp + +HEADERS += \ + mainwindow.h \ + pythonutils.h + +OTHER_FILES += $$TYPESYSTEM_FILE $$WRAPPED_HEADER pyside2_config.py README.md diff --git a/examples/scriptableapplication/scriptableapplication.xml b/examples/scriptableapplication/scriptableapplication.xml new file mode 100644 index 0000000..7ef2e9f --- /dev/null +++ b/examples/scriptableapplication/scriptableapplication.xml @@ -0,0 +1,56 @@ + + + + + + diff --git a/examples/scriptableapplication/wrappedclasses.h b/examples/scriptableapplication/wrappedclasses.h new file mode 100644 index 0000000..d766142 --- /dev/null +++ b/examples/scriptableapplication/wrappedclasses.h @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WRAPPEDCLASSES_H +#define WRAPPEDCLASSES_H + +#include + +#endif // WRAPPEDCLASSES_H diff --git a/examples/texttospeech/texttospeech.py b/examples/texttospeech/texttospeech.py new file mode 100644 index 0000000..11e5209 --- /dev/null +++ b/examples/texttospeech/texttospeech.py @@ -0,0 +1,108 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 QTextToSpeech example""" + +import sys +from PySide2.QtCore import Qt +from PySide2.QtWidgets import (qApp, QApplication, QComboBox, QFormLayout, + QHBoxLayout, QLineEdit, QMainWindow, QPushButton, QSlider, QWidget) + +from PySide2.QtTextToSpeech import QTextToSpeech, QVoice + +class MainWindow(QMainWindow): + def __init__(self): + super(MainWindow, self).__init__() + + centralWidget = QWidget() + self.setCentralWidget(centralWidget) + layout = QFormLayout(centralWidget) + + textLayout = QHBoxLayout() + self.text = QLineEdit('Hello, PySide2') + self.text.setClearButtonEnabled(True) + textLayout.addWidget(self.text) + self.sayButton = QPushButton('Say') + textLayout.addWidget(self.sayButton) + self.text.returnPressed.connect(self.sayButton.animateClick) + self.sayButton.clicked.connect(self.say) + layout.addRow('Text:', textLayout) + + self.voiceCombo = QComboBox() + layout.addRow('Voice:', self.voiceCombo) + + self.volumeSlider = QSlider(Qt.Horizontal) + self.volumeSlider.setMinimum(0) + self.volumeSlider.setMaximum(100) + self.volumeSlider.setValue(100) + layout.addRow('Volume:', self.volumeSlider) + + self.engine = None + engineNames = QTextToSpeech.availableEngines() + if len(engineNames) > 0: + engineName = engineNames[0] + self.engine = QTextToSpeech(engineName) + self.engine.stateChanged.connect(self.stateChanged) + self.setWindowTitle('QTextToSpeech Example ({})'.format(engineName)) + self.voices = [] + for voice in self.engine.availableVoices(): + self.voices.append(voice) + self.voiceCombo.addItem(voice.name()) + else: + self.setWindowTitle('QTextToSpeech Example (no engines available)') + self.sayButton.setEnabled(False) + + def say(self): + self.sayButton.setEnabled(False) + self.engine.setVoice(self.voices[self.voiceCombo.currentIndex()]) + self.engine.setVolume(float(self.volumeSlider.value()) / 100) + self.engine.say(self.text.text()) + + def stateChanged(self, state): + if (state == QTextToSpeech.State.Ready): + self.sayButton.setEnabled(True) + +if __name__ == '__main__': + app = QApplication(sys.argv) + mainWin = MainWindow() + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/tutorial/t1.py b/examples/tutorial/t1.py new file mode 100644 index 0000000..2e4d158 --- /dev/null +++ b/examples/tutorial/t1.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 1 + + +import sys +from PySide2 import QtWidgets + + +app = QtWidgets.QApplication(sys.argv) + +hello = QtWidgets.QPushButton("Hello world!") +hello.resize(100, 30) + +hello.show() + +sys.exit(app.exec_()) diff --git a/examples/tutorial/t10.py b/examples/tutorial/t10.py new file mode 100644 index 0000000..baf3884 --- /dev/null +++ b/examples/tutorial/t10.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 10 + + +import sys +from PySide2 import QtCore, QtGui, QtWidgets + + +class LCDRange(QtWidgets.QWidget): + valueChanged = QtCore.Signal(int) + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + lcd = QtWidgets.QLCDNumber(2) + self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) + self.slider.setRange(0, 99) + self.slider.setValue(0) + + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + lcd, QtCore.SLOT("display(int)")) + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + self, QtCore.SIGNAL("valueChanged(int)")) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(lcd) + layout.addWidget(self.slider) + self.setLayout(layout) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + @QtCore.Slot(int) + def setValue(self, value): + self.slider.setValue(value) + + def setRange(self, minValue, maxValue): + if minValue < 0 or maxValue > 99 or minValue > maxValue: + QtCore.qWarning("LCDRange::setRange(%d, %d)\n" + "\tRange must be 0..99\n" + "\tand minValue must not be greater than maxValue" % (minValue, maxValue)) + return + + self.slider.setRange(minValue, maxValue) + + +class CannonField(QtWidgets.QWidget): + angleChanged = QtCore.Signal(int) + forceChanged = QtCore.Signal(int) + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + self.currentAngle = 45 + self.currentForce = 0 + self.setPalette(QtGui.QPalette(QtGui.QColor(250, 250, 200))) + self.setAutoFillBackground(True) + + def angle(self): + return self.currentAngle + + @QtCore.Slot(int) + def setAngle(self, angle): + if angle < 5: + angle = 5 + if angle > 70: + angle = 70 + if self.currentAngle == angle: + return + self.currentAngle = angle + self.update() + self.emit(QtCore.SIGNAL("angleChanged(int)"), self.currentAngle) + + def force(self): + return self.currentForce + + @QtCore.Slot(int) + def setForce(self, force): + if force < 0: + force = 0 + if self.currentForce == force: + return + self.currentForce = force + self.emit(QtCore.SIGNAL("forceChanged(int)"), self.currentForce) + + def paintEvent(self, event): + painter = QtGui.QPainter(self) + + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.blue) + + painter.translate(0, self.height()) + painter.drawPie(QtCore.QRect(-35, -35, 70, 70), 0, 90 * 16) + painter.rotate(-self.currentAngle) + painter.drawRect(QtCore.QRect(33, -4, 15, 8)) + + def cannonRect(self): + result = QtCore.QRect(0, 0, 50, 50) + result.moveBottomLeft(self.rect().bottomLect()) + return result + + +class MyWidget(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + quit = QtWidgets.QPushButton("&Quit") + quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(quit, QtCore.SIGNAL("clicked()"), + QtWidgets.qApp, QtCore.SLOT("quit()")) + + angle = LCDRange() + angle.setRange(5, 70) + + force = LCDRange() + force.setRange(10, 50) + + cannonField = CannonField() + + self.connect(angle, QtCore.SIGNAL("valueChanged(int)"), + cannonField.setAngle) + self.connect(cannonField, QtCore.SIGNAL("angleChanged(int)"), + angle.setValue) + + self.connect(force, QtCore.SIGNAL("valueChanged(int)"), + cannonField.setForce) + self.connect(cannonField, QtCore.SIGNAL("forceChanged(int)"), + force.setValue) + + leftLayout = QtWidgets.QVBoxLayout() + leftLayout.addWidget(angle) + leftLayout.addWidget(force) + + gridLayout = QtWidgets.QGridLayout() + gridLayout.addWidget(quit, 0, 0) + gridLayout.addLayout(leftLayout, 1, 0) + gridLayout.addWidget(cannonField, 1, 1, 2, 1) + gridLayout.setColumnStretch(1, 10) + self.setLayout(gridLayout) + + angle.setValue(60) + force.setValue(25) + angle.setFocus() + + +app = QtWidgets.QApplication(sys.argv) +widget = MyWidget() +widget.setGeometry(100, 100, 500, 355) +widget.show() +sys.exit(app.exec_()) diff --git a/examples/tutorial/t11.py b/examples/tutorial/t11.py new file mode 100644 index 0000000..b028fc2 --- /dev/null +++ b/examples/tutorial/t11.py @@ -0,0 +1,264 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 11 + + +import sys +import math +from PySide2 import QtCore, QtGui, QtWidgets + + +class LCDRange(QtWidgets.QWidget): + valueChanged = QtCore.Signal(int) + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + lcd = QtWidgets.QLCDNumber(2) + self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) + self.slider.setRange(0, 99) + self.slider.setValue(0) + + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + lcd, QtCore.SLOT("display(int)")) + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + self, QtCore.SIGNAL("valueChanged(int)")) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(lcd) + layout.addWidget(self.slider) + self.setLayout(layout) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + @QtCore.Slot(int) + def setValue(self, value): + self.slider.setValue(value) + + def setRange(self, minValue, maxValue): + if minValue < 0 or maxValue > 99 or minValue > maxValue: + QtCore.qWarning("LCDRange::setRange(%d, %d)\n" + "\tRange must be 0..99\n" + "\tand minValue must not be greater than maxValue" % (minValue, maxValue)) + return + + self.slider.setRange(minValue, maxValue) + + +class CannonField(QtWidgets.QWidget): + angleChanged = QtCore.Signal(int) + forceChanged = QtCore.Signal(int) + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + self.currentAngle = 45 + self.currentForce = 0 + self.timerCount = 0 + self.autoShootTimer = QtCore.QTimer(self) + self.connect(self.autoShootTimer, QtCore.SIGNAL("timeout()"), + self.moveShot) + self.shootAngle = 0 + self.shootForce = 0 + self.setPalette(QtGui.QPalette(QtGui.QColor(250, 250, 200))) + self.setAutoFillBackground(True) + + def angle(self): + return self.currentAngle + + @QtCore.Slot(int) + def setAngle(self, angle): + if angle < 5: + angle = 5 + if angle > 70: + angle = 70 + if self.currentAngle == angle: + return + self.currentAngle = angle + self.update() + self.emit(QtCore.SIGNAL("angleChanged(int)"), self.currentAngle) + + def force(self): + return self.currentForce + + @QtCore.Slot(int) + def setForce(self, force): + if force < 0: + force = 0 + if self.currentForce == force: + return + self.currentForce = force + self.emit(QtCore.SIGNAL("forceChanged(int)"), self.currentForce) + + @QtCore.Slot() + def shoot(self): + if self.autoShootTimer.isActive(): + return + self.timerCount = 0 + self.shootAngle = self.currentAngle + self.shootForce = self.currentForce + self.autoShootTimer.start(5) + + @QtCore.Slot() + def moveShot(self): + region = QtGui.QRegion(self.shotRect()) + self.timerCount += 1 + + shotR = self.shotRect() + + if shotR.x() > self.width() or shotR.y() > self.height(): + self.autoShootTimer.stop() + else: + region = region.united(QtGui.QRegion(shotR)) + + self.update(region) + + def paintEvent(self, event): + painter = QtGui.QPainter(self) + + self.paintCannon(painter) + if self.autoShootTimer.isActive(): + self.paintShot(painter) + + def paintShot(self, painter): + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.black) + painter.drawRect(self.shotRect()) + + barrelRect = QtCore.QRect(33, -4, 15, 8) + + def paintCannon(self, painter): + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.blue) + + painter.save() + painter.translate(0, self.height()) + painter.drawPie(QtCore.QRect(-35, -35, 70, 70), 0, 90 * 16) + painter.rotate(-self.currentAngle) + painter.drawRect(CannonField.barrelRect) + painter.restore() + + def cannonRect(self): + result = QtCore.QRect(0, 0, 50, 50) + result.moveBottomLeft(self.rect().bottomLect()) + return result + + def shotRect(self): + gravity = 4.0 + + time = self.timerCount / 40.0 + velocity = self.shootForce + radians = self.shootAngle * 3.14159265 / 180 + + velx = velocity * math.cos(radians) + vely = velocity * math.sin(radians) + x0 = (CannonField.barrelRect.right() + 5) * math.cos(radians) + y0 = (CannonField.barrelRect.right() + 5) * math.sin(radians) + x = x0 + velx * time + y = y0 + vely * time - 0.5 * gravity * time * time + + result = QtCore.QRect(0, 0, 6, 6) + result.moveCenter(QtCore.QPoint(round(x), self.height() - 1 - round(y))) + return result + + +class MyWidget(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + quit = QtWidgets.QPushButton("&Quit") + quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(quit, QtCore.SIGNAL("clicked()"), + QtWidgets.qApp, QtCore.SLOT("quit()")) + + angle = LCDRange() + angle.setRange(5, 70) + + force = LCDRange() + force.setRange(10, 50) + + cannonField = CannonField() + + self.connect(angle, QtCore.SIGNAL("valueChanged(int)"), + cannonField.setAngle) + self.connect(cannonField, QtCore.SIGNAL("angleChanged(int)"), + angle.setValue) + + self.connect(force, QtCore.SIGNAL("valueChanged(int)"), + cannonField.setForce) + self.connect(cannonField, QtCore.SIGNAL("forceChanged(int)"), + force.setValue) + + shoot = QtWidgets.QPushButton("&Shoot") + shoot.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(shoot, QtCore.SIGNAL("clicked()"), cannonField.shoot) + + topLayout = QtWidgets.QHBoxLayout() + topLayout.addWidget(shoot) + topLayout.addStretch(1) + + leftLayout = QtWidgets.QVBoxLayout() + leftLayout.addWidget(angle) + leftLayout.addWidget(force) + + gridLayout = QtWidgets.QGridLayout() + gridLayout.addWidget(quit, 0, 0) + gridLayout.addLayout(topLayout, 0, 1) + gridLayout.addLayout(leftLayout, 1, 0) + gridLayout.addWidget(cannonField, 1, 1, 2, 1) + gridLayout.setColumnStretch(1, 10) + self.setLayout(gridLayout) + + angle.setValue(60) + force.setValue(25) + angle.setFocus() + + +app = QtWidgets.QApplication(sys.argv) +widget = MyWidget() +widget.setGeometry(100, 100, 500, 355) +widget.show() +sys.exit(app.exec_()) diff --git a/examples/tutorial/t12.py b/examples/tutorial/t12.py new file mode 100644 index 0000000..945edbd --- /dev/null +++ b/examples/tutorial/t12.py @@ -0,0 +1,313 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 12 + + +import sys +import math +import random +from PySide2 import QtCore, QtGui, QtWidgets + + +class LCDRange(QtWidgets.QWidget): + valueChanged = QtCore.Signal(int) + def __init__(self, text=None, parent=None): + if isinstance(text, QtWidgets.QWidget): + parent = text + text = None + + QtWidgets.QWidget.__init__(self, parent) + + self.init() + + if text: + self.setText(text) + + def init(self): + lcd = QtWidgets.QLCDNumber(2) + self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) + self.slider.setRange(0, 99) + self.slider.setValue(0) + self.label = QtWidgets.QLabel() + self.label.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop) + + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + lcd, QtCore.SLOT("display(int)")) + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + self, QtCore.SIGNAL("valueChanged(int)")) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(lcd) + layout.addWidget(self.slider) + layout.addWidget(self.label) + self.setLayout(layout) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + @QtCore.Slot(int) + def setValue(self, value): + self.slider.setValue(value) + + def text(self): + return self.label.text() + + def setRange(self, minValue, maxValue): + if minValue < 0 or maxValue > 99 or minValue > maxValue: + QtCore.qWarning("LCDRange::setRange(%d, %d)\n" + "\tRange must be 0..99\n" + "\tand minValue must not be greater than maxValue" % (minValue, maxValue)) + return + + self.slider.setRange(minValue, maxValue) + + def setText(self, text): + self.label.setText(text) + + +class CannonField(QtWidgets.QWidget): + angleChanged = QtCore.Signal(int) + forceChanged = QtCore.Signal(int) + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + self.currentAngle = 45 + self.currentForce = 0 + self.timerCount = 0 + self.autoShootTimer = QtCore.QTimer(self) + self.connect(self.autoShootTimer, QtCore.SIGNAL("timeout()"), + self.moveShot) + self.shootAngle = 0 + self.shootForce = 0 + self.target = QtCore.QPoint(0, 0) + self.setPalette(QtGui.QPalette(QtGui.QColor(250, 250, 200))) + self.setAutoFillBackground(True) + self.newTarget() + + def angle(self): + return self.currentAngle + + @QtCore.Slot(int) + def setAngle(self, angle): + if angle < 5: + angle = 5 + if angle > 70: + angle = 70 + if self.currentAngle == angle: + return + self.currentAngle = angle + self.update() + self.emit(QtCore.SIGNAL("angleChanged(int)"), self.currentAngle) + + def force(self): + return self.currentForce + + @QtCore.Slot(int) + def setForce(self, force): + if force < 0: + force = 0 + if self.currentForce == force: + return + self.currentForce = force + self.emit(QtCore.SIGNAL("forceChanged(int)"), self.currentForce) + + @QtCore.Slot() + def shoot(self): + if self.autoShootTimer.isActive(): + return + self.timerCount = 0 + self.shootAngle = self.currentAngle + self.shootForce = self.currentForce + self.autoShootTimer.start(5) + + firstTime = True + + def newTarget(self): + if CannonField.firstTime: + CannonField.firstTime = False + midnight = QtCore.QTime(0, 0, 0) + random.seed(midnight.secsTo(QtCore.QTime.currentTime())) + + self.target = QtCore.QPoint(200 + random.randint(0, 190 - 1), 10 + random.randint(0, 255 - 1)) + self.update() + + @QtCore.Slot() + def moveShot(self): + region = QtGui.QRegion(self.shotRect()) + self.timerCount += 1 + + shotR = self.shotRect() + + if shotR.intersects(self.targetRect()): + self.autoShootTimer.stop() + self.emit(QtCore.SIGNAL("hit()")) + elif shotR.x() > self.width() or shotR.y() > self.height(): + self.autoShootTimer.stop() + self.emit(QtCore.SIGNAL("missed()")) + else: + region = region.united(QtGui.QRegion(shotR)) + + self.update(region) + + def paintEvent(self, event): + painter = QtGui.QPainter(self) + + self.paintCannon(painter) + if self.autoShootTimer.isActive(): + self.paintShot(painter) + + self.paintTarget(painter) + + def paintShot(self, painter): + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.black) + painter.drawRect(self.shotRect()) + + def paintTarget(self, painter): + painter.setPen(QtCore.Qt.black) + painter.setBrush(QtCore.Qt.red) + painter.drawRect(self.targetRect()) + + barrelRect = QtCore.QRect(33, -4, 15, 8) + + def paintCannon(self, painter): + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.blue) + + painter.save() + painter.translate(0, self.height()) + painter.drawPie(QtCore.QRect(-35, -35, 70, 70), 0, 90 * 16) + painter.rotate(-self.currentAngle) + painter.drawRect(CannonField.barrelRect) + painter.restore() + + def cannonRect(self): + result = QtCore.QRect(0, 0, 50, 50) + result.moveBottomLeft(self.rect().bottomLect()) + return result + + def shotRect(self): + gravity = 4.0 + + time = self.timerCount / 40.0 + velocity = self.shootForce + radians = self.shootAngle * 3.14159265 / 180 + + velx = velocity * math.cos(radians) + vely = velocity * math.sin(radians) + x0 = (CannonField.barrelRect.right() + 5) * math.cos(radians) + y0 = (CannonField.barrelRect.right() + 5) * math.sin(radians) + x = x0 + velx * time + y = y0 + vely * time - 0.5 * gravity * time * time + + result = QtCore.QRect(0, 0, 6, 6) + result.moveCenter(QtCore.QPoint(round(x), self.height() - 1 - round(y))) + return result + + def targetRect(self): + result = QtCore.QRect(0, 0, 20, 10) + result.moveCenter(QtCore.QPoint(self.target.x(), self.height() - 1 - self.target.y())) + return result + + +class MyWidget(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + quit = QtWidgets.QPushButton("&Quit") + quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(quit, QtCore.SIGNAL("clicked()"), + QtWidgets.qApp, QtCore.SLOT("quit()")) + + angle = LCDRange("ANGLE") + angle.setRange(5, 70) + + force = LCDRange("FORCE") + force.setRange(10, 50) + + cannonField = CannonField() + + self.connect(angle, QtCore.SIGNAL("valueChanged(int)"), + cannonField.setAngle) + self.connect(cannonField, QtCore.SIGNAL("angleChanged(int)"), + angle.setValue) + + self.connect(force, QtCore.SIGNAL("valueChanged(int)"), + cannonField.setForce) + self.connect(cannonField, QtCore.SIGNAL("forceChanged(int)"), + force.setValue) + + shoot = QtWidgets.QPushButton("&Shoot") + shoot.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(shoot, QtCore.SIGNAL("clicked()"), cannonField.shoot) + + topLayout = QtWidgets.QHBoxLayout() + topLayout.addWidget(shoot) + topLayout.addStretch(1) + + leftLayout = QtWidgets.QVBoxLayout() + leftLayout.addWidget(angle) + leftLayout.addWidget(force) + + gridLayout = QtWidgets.QGridLayout() + gridLayout.addWidget(quit, 0, 0) + gridLayout.addLayout(topLayout, 0, 1) + gridLayout.addLayout(leftLayout, 1, 0) + gridLayout.addWidget(cannonField, 1, 1, 2, 1) + gridLayout.setColumnStretch(1, 10) + self.setLayout(gridLayout) + + angle.setValue(60) + force.setValue(25) + angle.setFocus() + + +app = QtWidgets.QApplication(sys.argv) +widget = MyWidget() +widget.setGeometry(100, 100, 500, 355) +widget.show() +sys.exit(app.exec_()) diff --git a/examples/tutorial/t13.py b/examples/tutorial/t13.py new file mode 100644 index 0000000..706b8a5 --- /dev/null +++ b/examples/tutorial/t13.py @@ -0,0 +1,396 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 13 + + +import sys +import math +import random +from PySide2 import QtCore, QtGui, QtWidgets + + +class LCDRange(QtWidgets.QWidget): + valueChanged = QtCore.Signal(int) + def __init__(self, text=None, parent=None): + if isinstance(text, QtWidgets.QWidget): + parent = text + text = None + + QtWidgets.QWidget.__init__(self, parent) + + self.init() + + if text: + self.setText(text) + + def init(self): + lcd = QtWidgets.QLCDNumber(2) + self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) + self.slider.setRange(0, 99) + self.slider.setValue(0) + self.label = QtWidgets.QLabel() + self.label.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop) + self.label.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + lcd, QtCore.SLOT("display(int)")) + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + self, QtCore.SIGNAL("valueChanged(int)")) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(lcd) + layout.addWidget(self.slider) + layout.addWidget(self.label) + self.setLayout(layout) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + @QtCore.Slot(int) + def setValue(self, value): + self.slider.setValue(value) + + def text(self): + return self.label.text() + + def setRange(self, minValue, maxValue): + if minValue < 0 or maxValue > 99 or minValue > maxValue: + QtCore.qWarning("LCDRange::setRange(%d, %d)\n" + "\tRange must be 0..99\n" + "\tand minValue must not be greater than maxValue" % (minValue, maxValue)) + return + + self.slider.setRange(minValue, maxValue) + + def setText(self, text): + self.label.setText(text) + + +class CannonField(QtWidgets.QWidget): + angleChanged = QtCore.Signal(int) + forceChanged = QtCore.Signal(int) + hit = QtCore.Signal() + missed = QtCore.Signal() + canShoot = QtCore.Signal(bool) + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + self.currentAngle = 45 + self.currentForce = 0 + self.timerCount = 0 + self.autoShootTimer = QtCore.QTimer(self) + self.connect(self.autoShootTimer, QtCore.SIGNAL("timeout()"), + self.moveShot) + self.shootAngle = 0 + self.shootForce = 0 + self.target = QtCore.QPoint(0, 0) + self.gameEnded = False + self.setPalette(QtGui.QPalette(QtGui.QColor(250, 250, 200))) + self.setAutoFillBackground(True) + self.newTarget() + + def angle(self): + return self.currentAngle + + @QtCore.Slot(int) + def setAngle(self, angle): + if angle < 5: + angle = 5 + if angle > 70: + angle = 70 + if self.currentAngle == angle: + return + self.currentAngle = angle + self.update() + self.emit(QtCore.SIGNAL("angleChanged(int)"), self.currentAngle) + + def force(self): + return self.currentForce + + @QtCore.Slot(int) + def setForce(self, force): + if force < 0: + force = 0 + if self.currentForce == force: + return + self.currentForce = force + self.emit(QtCore.SIGNAL("forceChanged(int)"), self.currentForce) + + @QtCore.Slot() + def shoot(self): + if self.isShooting(): + return + self.timerCount = 0 + self.shootAngle = self.currentAngle + self.shootForce = self.currentForce + self.autoShootTimer.start(5) + self.emit(QtCore.SIGNAL("canShoot(bool)"), False) + + firstTime = True + + def newTarget(self): + if CannonField.firstTime: + CannonField.firstTime = False + midnight = QtCore.QTime(0, 0, 0) + random.seed(midnight.secsTo(QtCore.QTime.currentTime())) + + self.target = QtCore.QPoint(200 + random.randint(0, 190 - 1), 10 + random.randint(0, 255 - 1)) + self.update() + + def setGameOver(self): + if self.gameEnded: + return + if self.isShooting(): + self.autoShootTimer.stop() + self.gameEnded = True + self.update() + + def restartGame(self): + if self.isShooting(): + self.autoShootTimer.stop() + self.gameEnded = False + self.update() + self.emit(QtCore.SIGNAL("canShoot(bool)"), True) + + @QtCore.Slot() + def moveShot(self): + region = QtGui.QRegion(self.shotRect()) + self.timerCount += 1 + + shotR = self.shotRect() + + if shotR.intersects(self.targetRect()): + self.autoShootTimer.stop() + self.emit(QtCore.SIGNAL("hit()")) + self.emit(QtCore.SIGNAL("canShoot(bool)"), True) + elif shotR.x() > self.width() or shotR.y() > self.height(): + self.autoShootTimer.stop() + self.emit(QtCore.SIGNAL("missed()")) + self.emit(QtCore.SIGNAL("canShoot(bool)"), True) + else: + region = region.united(QtGui.QRegion(shotR)) + + self.update(region) + + def paintEvent(self, event): + painter = QtGui.QPainter(self) + + if self.gameEnded: + painter.setPen(QtCore.Qt.black) + painter.setFont(QtGui.QFont("Courier", 48, QtGui.QFont.Bold)) + painter.drawText(self.rect(), QtCore.Qt.AlignCenter, "Game Over") + + self.paintCannon(painter) + if self.isShooting(): + self.paintShot(painter) + if not self.gameEnded: + self.paintTarget(painter) + + def paintShot(self, painter): + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.black) + painter.drawRect(self.shotRect()) + + def paintTarget(self, painter): + painter.setPen(QtCore.Qt.black) + painter.setBrush(QtCore.Qt.red) + painter.drawRect(self.targetRect()) + + barrelRect = QtCore.QRect(33, -4, 15, 8) + + def paintCannon(self, painter): + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.blue) + + painter.save() + painter.translate(0, self.height()) + painter.drawPie(QtCore.QRect(-35, -35, 70, 70), 0, 90 * 16) + painter.rotate(-self.currentAngle) + painter.drawRect(CannonField.barrelRect) + painter.restore() + + def cannonRect(self): + result = QtCore.QRect(0, 0, 50, 50) + result.moveBottomLeft(self.rect().bottomLect()) + return result + + def shotRect(self): + gravity = 4.0 + + time = self.timerCount / 40.0 + velocity = self.shootForce + radians = self.shootAngle * 3.14159265 / 180 + + velx = velocity * math.cos(radians) + vely = velocity * math.sin(radians) + x0 = (CannonField.barrelRect.right() + 5) * math.cos(radians) + y0 = (CannonField.barrelRect.right() + 5) * math.sin(radians) + x = x0 + velx * time + y = y0 + vely * time - 0.5 * gravity * time * time + + result = QtCore.QRect(0, 0, 6, 6) + result.moveCenter(QtCore.QPoint(round(x), self.height() - 1 - round(y))) + return result + + def targetRect(self): + result = QtCore.QRect(0, 0, 20, 10) + result.moveCenter(QtCore.QPoint(self.target.x(), self.height() - 1 - self.target.y())) + return result + + def gameOver(self): + return self.gameEnded + + def isShooting(self): + return self.autoShootTimer.isActive() + + +class GameBoard(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + quit = QtWidgets.QPushButton("&Quit") + quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(quit, QtCore.SIGNAL("clicked()"), + QtWidgets.qApp, QtCore.SLOT("quit()")) + + angle = LCDRange("ANGLE") + angle.setRange(5, 70) + + force = LCDRange("FORCE") + force.setRange(10, 50) + + self.cannonField = CannonField() + + self.connect(angle, QtCore.SIGNAL("valueChanged(int)"), + self.cannonField.setAngle) + self.connect(self.cannonField, QtCore.SIGNAL("angleChanged(int)"), + angle.setValue) + + self.connect(force, QtCore.SIGNAL("valueChanged(int)"), + self.cannonField.setForce) + self.connect(self.cannonField, QtCore.SIGNAL("forceChanged(int)"), + force.setValue) + + self.connect(self.cannonField, QtCore.SIGNAL("hit()"), self.hit) + self.connect(self.cannonField, QtCore.SIGNAL("missed()"), self.missed) + + shoot = QtWidgets.QPushButton("&Shoot") + shoot.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(shoot, QtCore.SIGNAL("clicked()"), self.fire) + self.connect(self.cannonField, QtCore.SIGNAL("canShoot(bool)"), + shoot, QtCore.SLOT("setEnabled(bool)")) + + restart = QtWidgets.QPushButton("&New Game") + restart.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(restart, QtCore.SIGNAL("clicked()"), self.newGame) + + self.hits = QtWidgets.QLCDNumber(2) + self.shotsLeft = QtWidgets.QLCDNumber(2) + hitsLabel = QtWidgets.QLabel("HITS") + shotsLeftLabel = QtWidgets.QLabel("SHOTS LEFT") + + topLayout = QtWidgets.QHBoxLayout() + topLayout.addWidget(shoot) + topLayout.addWidget(self.hits) + topLayout.addWidget(hitsLabel) + topLayout.addWidget(self.shotsLeft) + topLayout.addWidget(shotsLeftLabel) + topLayout.addStretch(1) + topLayout.addWidget(restart) + + leftLayout = QtWidgets.QVBoxLayout() + leftLayout.addWidget(angle) + leftLayout.addWidget(force) + + gridLayout = QtWidgets.QGridLayout() + gridLayout.addWidget(quit, 0, 0) + gridLayout.addLayout(topLayout, 0, 1) + gridLayout.addLayout(leftLayout, 1, 0) + gridLayout.addWidget(self.cannonField, 1, 1, 2, 1) + gridLayout.setColumnStretch(1, 10) + self.setLayout(gridLayout) + + angle.setValue(60) + force.setValue(25) + angle.setFocus() + + self.newGame() + + @QtCore.Slot() + def fire(self): + if self.cannonField.gameOver() or self.cannonField.isShooting(): + return + self.shotsLeft.display(self.shotsLeft.intValue() - 1) + self.cannonField.shoot() + + @QtCore.Slot() + def hit(self): + self.hits.display(self.hits.intValue() + 1) + if self.shotsLeft.intValue() == 0: + self.cannonField.setGameOver() + else: + self.cannonField.newTarget() + + @QtCore.Slot() + def missed(self): + if self.shotsLeft.intValue() == 0: + self.cannonField.setGameOver() + + @QtCore.Slot() + def newGame(self): + self.shotsLeft.display(15) + self.hits.display(0) + self.cannonField.restartGame() + self.cannonField.newTarget() + + +app = QtWidgets.QApplication(sys.argv) +board = GameBoard() +board.setGeometry(100, 100, 500, 355) +board.show() +sys.exit(app.exec_()) diff --git a/examples/tutorial/t14.py b/examples/tutorial/t14.py new file mode 100644 index 0000000..a7a4a05 --- /dev/null +++ b/examples/tutorial/t14.py @@ -0,0 +1,451 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 14 + + +import sys +import math +import random +from PySide2 import QtCore, QtGui, QtWidgets + + +class LCDRange(QtWidgets.QWidget): + valueChanged = QtCore.Signal(int) + def __init__(self, text=None, parent=None): + if isinstance(text, QtWidgets.QWidget): + parent = text + text = None + + QtWidgets.QWidget.__init__(self, parent) + + self.init() + + if text: + self.setText(text) + + def init(self): + lcd = QtWidgets.QLCDNumber(2) + self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) + self.slider.setRange(0, 99) + self.slider.setValue(0) + self.label = QtWidgets.QLabel() + self.label.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop) + self.label.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + lcd, QtCore.SLOT("display(int)")) + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + self, QtCore.SIGNAL("valueChanged(int)")) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(lcd) + layout.addWidget(self.slider) + layout.addWidget(self.label) + self.setLayout(layout) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + @QtCore.Slot(int) + def setValue(self, value): + self.slider.setValue(value) + + def text(self): + return self.label.text() + + def setRange(self, minValue, maxValue): + if minValue < 0 or maxValue > 99 or minValue > maxValue: + QtCore.qWarning("LCDRange::setRange(%d, %d)\n" + "\tRange must be 0..99\n" + "\tand minValue must not be greater than maxValue" % (minValue, maxValue)) + return + + self.slider.setRange(minValue, maxValue) + + def setText(self, text): + self.label.setText(text) + + +class CannonField(QtWidgets.QWidget): + angleChanged = QtCore.Signal(int) + forceChanged = QtCore.Signal(int) + hit = QtCore.Signal() + missed = QtCore.Signal() + canShoot = QtCore.Signal(bool) + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + self.currentAngle = 45 + self.currentForce = 0 + self.timerCount = 0 + self.autoShootTimer = QtCore.QTimer(self) + self.connect(self.autoShootTimer, QtCore.SIGNAL("timeout()"), + self.moveShot) + self.shootAngle = 0 + self.shootForce = 0 + self.target = QtCore.QPoint(0, 0) + self.gameEnded = False + self.barrelPressed = False + self.setPalette(QtGui.QPalette(QtGui.QColor(250, 250, 200))) + self.setAutoFillBackground(True) + self.newTarget() + + def angle(self): + return self.currentAngle + + @QtCore.Slot(int) + def setAngle(self, angle): + if angle < 5: + angle = 5 + if angle > 70: + angle = 70 + if self.currentAngle == angle: + return + self.currentAngle = angle + self.update() + self.emit(QtCore.SIGNAL("angleChanged(int)"), self.currentAngle) + + def force(self): + return self.currentForce + + @QtCore.Slot(int) + def setForce(self, force): + if force < 0: + force = 0 + if self.currentForce == force: + return + self.currentForce = force + self.emit(QtCore.SIGNAL("forceChanged(int)"), self.currentForce) + + @QtCore.Slot() + def shoot(self): + if self.isShooting(): + return + self.timerCount = 0 + self.shootAngle = self.currentAngle + self.shootForce = self.currentForce + self.autoShootTimer.start(5) + self.emit(QtCore.SIGNAL("canShoot(bool)"), False) + + firstTime = True + + def newTarget(self): + if CannonField.firstTime: + CannonField.firstTime = False + midnight = QtCore.QTime(0, 0, 0) + random.seed(midnight.secsTo(QtCore.QTime.currentTime())) + + self.target = QtCore.QPoint(200 + random.randint(0, 190 - 1), 10 + random.randint(0, 255 - 1)) + self.update() + + def setGameOver(self): + if self.gameEnded: + return + if self.isShooting(): + self.autoShootTimer.stop() + self.gameEnded = True + self.update() + + def restartGame(self): + if self.isShooting(): + self.autoShootTimer.stop() + self.gameEnded = False + self.update() + self.emit(QtCore.SIGNAL("canShoot(bool)"), True) + + @QtCore.Slot() + def moveShot(self): + region = QtGui.QRegion(self.shotRect()) + self.timerCount += 1 + + shotR = self.shotRect() + + if shotR.intersects(self.targetRect()): + self.autoShootTimer.stop() + self.emit(QtCore.SIGNAL("hit()")) + self.emit(QtCore.SIGNAL("canShoot(bool)"), True) + elif shotR.x() > self.width() or shotR.y() > self.height() or shotR.intersects(self.barrierRect()): + self.autoShootTimer.stop() + self.emit(QtCore.SIGNAL("missed()")) + self.emit(QtCore.SIGNAL("canShoot(bool)"), True) + else: + region = region.united(QtGui.QRegion(shotR)) + + self.update(region) + + def mousePressEvent(self, event): + if event.button() != QtCore.Qt.LeftButton: + return + if self.barrelHit(event.pos()): + self.barrelPressed = True + + def mouseMoveEvent(self, event): + if not self.barrelPressed: + return + pos = event.pos() + if pos.x() <= 0: + pos.setX(1) + if pos.y() >= self.height(): + pos.setY(self.height() - 1) + rad = math.atan((float(self.rect().bottom()) - pos.y()) / pos.x()) + self.setAngle(round(rad * 180 / 3.14159265)) + + def mouseReleaseEvent(self, event): + if event.button() == QtCore.Qt.LeftButton: + self.barrelPressed = False + + def paintEvent(self, event): + painter = QtGui.QPainter(self) + + if self.gameEnded: + painter.setPen(QtCore.Qt.black) + painter.setFont(QtGui.QFont("Courier", 48, QtGui.QFont.Bold)) + painter.drawText(self.rect(), QtCore.Qt.AlignCenter, "Game Over") + + self.paintCannon(painter) + self.paintBarrier(painter) + if self.isShooting(): + self.paintShot(painter) + if not self.gameEnded: + self.paintTarget(painter) + + def paintShot(self, painter): + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.black) + painter.drawRect(self.shotRect()) + + def paintTarget(self, painter): + painter.setPen(QtCore.Qt.black) + painter.setBrush(QtCore.Qt.red) + painter.drawRect(self.targetRect()) + + def paintBarrier(self, painter): + painter.setPen(QtCore.Qt.black) + painter.setBrush(QtCore.Qt.yellow) + painter.drawRect(self.barrierRect()) + + barrelRect = QtCore.QRect(33, -4, 15, 8) + + def paintCannon(self, painter): + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.blue) + + painter.save() + painter.translate(0, self.height()) + painter.drawPie(QtCore.QRect(-35, -35, 70, 70), 0, 90 * 16) + painter.rotate(-self.currentAngle) + painter.drawRect(CannonField.barrelRect) + painter.restore() + + def cannonRect(self): + result = QtCore.QRect(0, 0, 50, 50) + result.moveBottomLeft(self.rect().bottomLect()) + return result + + def shotRect(self): + gravity = 4.0 + + time = self.timerCount / 40.0 + velocity = self.shootForce + radians = self.shootAngle * 3.14159265 / 180 + + velx = velocity * math.cos(radians) + vely = velocity * math.sin(radians) + x0 = (CannonField.barrelRect.right() + 5) * math.cos(radians) + y0 = (CannonField.barrelRect.right() + 5) * math.sin(radians) + x = x0 + velx * time + y = y0 + vely * time - 0.5 * gravity * time * time + + result = QtCore.QRect(0, 0, 6, 6) + result.moveCenter(QtCore.QPoint(round(x), self.height() - 1 - round(y))) + return result + + def targetRect(self): + result = QtCore.QRect(0, 0, 20, 10) + result.moveCenter(QtCore.QPoint(self.target.x(), self.height() - 1 - self.target.y())) + return result + + def barrierRect(self): + return QtCore.QRect(145, self.height() - 100, 15, 99) + + def barrelHit(self, pos): + matrix = QtGui.QMatrix() + matrix.translate(0, self.height()) + matrix.rotate(-self.currentAngle) + matrix, invertible = matrix.inverted() + return self.barrelRect.contains(matrix.map(pos)) + + def gameOver(self): + return self.gameEnded + + def isShooting(self): + return self.autoShootTimer.isActive() + + def sizeHint(self): + return QtCore.QSize(400, 300) + + +class GameBoard(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + quit = QtWidgets.QPushButton("&Quit") + quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(quit, QtCore.SIGNAL("clicked()"), + QtWidgets.qApp, QtCore.SLOT("quit()")) + + angle = LCDRange("ANGLE") + angle.setRange(5, 70) + + force = LCDRange("FORCE") + force.setRange(10, 50) + + cannonBox = QtWidgets.QFrame() + cannonBox.setFrameStyle(QtWidgets.QFrame.WinPanel | QtWidgets.QFrame.Sunken) + + self.cannonField = CannonField() + + self.connect(angle, QtCore.SIGNAL("valueChanged(int)"), + self.cannonField.setAngle) + self.connect(self.cannonField, QtCore.SIGNAL("angleChanged(int)"), + angle.setValue) + + self.connect(force, QtCore.SIGNAL("valueChanged(int)"), + self.cannonField.setForce) + self.connect(self.cannonField, QtCore.SIGNAL("forceChanged(int)"), + force.setValue) + + self.connect(self.cannonField, QtCore.SIGNAL("hit()"), self.hit) + self.connect(self.cannonField, QtCore.SIGNAL("missed()"), self.missed) + + shoot = QtWidgets.QPushButton("&Shoot") + shoot.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(shoot, QtCore.SIGNAL("clicked()"), self.fire) + self.connect(self.cannonField, QtCore.SIGNAL("canShoot(bool)"), + shoot, QtCore.SLOT("setEnabled(bool)")) + + restart = QtWidgets.QPushButton("&New Game") + restart.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(restart, QtCore.SIGNAL("clicked()"), self.newGame) + + self.hits = QtWidgets.QLCDNumber(2) + self.shotsLeft = QtWidgets.QLCDNumber(2) + hitsLabel = QtWidgets.QLabel("HITS") + shotsLeftLabel = QtWidgets.QLabel("SHOTS LEFT") + + QtWidgets.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Enter), + self, self.fire) + QtWidgets.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Return), + self, self.fire) + QtWidgets.QShortcut(QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_Q), + self, QtCore.SLOT("close()")) + + topLayout = QtWidgets.QHBoxLayout() + topLayout.addWidget(shoot) + topLayout.addWidget(self.hits) + topLayout.addWidget(hitsLabel) + topLayout.addWidget(self.shotsLeft) + topLayout.addWidget(shotsLeftLabel) + topLayout.addStretch(1) + topLayout.addWidget(restart) + + leftLayout = QtWidgets.QVBoxLayout() + leftLayout.addWidget(angle) + leftLayout.addWidget(force) + + cannonLayout = QtWidgets.QVBoxLayout() + cannonLayout.addWidget(self.cannonField) + cannonBox.setLayout(cannonLayout) + + gridLayout = QtWidgets.QGridLayout() + gridLayout.addWidget(quit, 0, 0) + gridLayout.addLayout(topLayout, 0, 1) + gridLayout.addLayout(leftLayout, 1, 0) + gridLayout.addWidget(cannonBox, 1, 1, 2, 1) + gridLayout.setColumnStretch(1, 10) + self.setLayout(gridLayout) + + angle.setValue(60) + force.setValue(25) + angle.setFocus() + + self.newGame() + + @QtCore.Slot() + def fire(self): + if self.cannonField.gameOver() or self.cannonField.isShooting(): + return + self.shotsLeft.display(self.shotsLeft.intValue() - 1) + self.cannonField.shoot() + + @QtCore.Slot() + def hit(self): + self.hits.display(self.hits.intValue() + 1) + if self.shotsLeft.intValue() == 0: + self.cannonField.setGameOver() + else: + self.cannonField.newTarget() + + @QtCore.Slot() + def missed(self): + if self.shotsLeft.intValue() == 0: + self.cannonField.setGameOver() + + @QtCore.Slot() + def newGame(self): + self.shotsLeft.display(15) + self.hits.display(0) + self.cannonField.restartGame() + self.cannonField.newTarget() + + +app = QtWidgets.QApplication(sys.argv) +board = GameBoard() +board.setGeometry(100, 100, 500, 355) +board.show() +sys.exit(app.exec_()) diff --git a/examples/tutorial/t2.py b/examples/tutorial/t2.py new file mode 100644 index 0000000..992554d --- /dev/null +++ b/examples/tutorial/t2.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 2 + + +import sys +from PySide2 import QtCore, QtGui, QtWidgets + + +app = QtWidgets.QApplication(sys.argv) + +quit = QtWidgets.QPushButton("Quit") +quit.resize(75, 30) +quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + +QtCore.QObject.connect(quit, QtCore.SIGNAL("clicked()"), + app, QtCore.SLOT("quit()")) + +quit.show() +sys.exit(app.exec_()) diff --git a/examples/tutorial/t3.py b/examples/tutorial/t3.py new file mode 100644 index 0000000..be69b6a --- /dev/null +++ b/examples/tutorial/t3.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 3 + + +import sys +from PySide2 import QtCore, QtGui, QtWidgets + + +app = QtWidgets.QApplication(sys.argv) + +window = QtWidgets.QWidget() +window.resize(200, 120) + +quit = QtWidgets.QPushButton("Quit", window) +quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) +quit.setGeometry(10, 40, 180, 40) +QtCore.QObject.connect(quit, QtCore.SIGNAL("clicked()"), + app, QtCore.SLOT("quit()")) + +window.show() +sys.exit(app.exec_()) diff --git a/examples/tutorial/t4.py b/examples/tutorial/t4.py new file mode 100644 index 0000000..88f9244 --- /dev/null +++ b/examples/tutorial/t4.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 4 + + +import sys +from PySide2 import QtCore, QtGui, QtWidgets + + +class MyWidget(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + self.setFixedSize(200, 120) + + self.quit = QtWidgets.QPushButton("Quit", self) + self.quit.setGeometry(62, 40, 75, 30) + self.quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(self.quit, QtCore.SIGNAL("clicked()"), + QtWidgets.qApp, QtCore.SLOT("quit()")) + + +app = QtWidgets.QApplication(sys.argv) +widget = MyWidget() +widget.show() +sys.exit(app.exec_()) diff --git a/examples/tutorial/t5.py b/examples/tutorial/t5.py new file mode 100644 index 0000000..783fa73 --- /dev/null +++ b/examples/tutorial/t5.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 5 + + +import sys +from PySide2 import QtCore, QtGui, QtWidgets + + +class MyWidget(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + quit = QtWidgets.QPushButton("Quit") + quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + lcd = QtWidgets.QLCDNumber(2) + + slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) + slider.setRange(0, 99) + slider.setValue(0) + + self.connect(quit, QtCore.SIGNAL("clicked()"), + QtWidgets.qApp, QtCore.SLOT("quit()")) + self.connect(slider, QtCore.SIGNAL("valueChanged(int)"), + lcd, QtCore.SLOT("display(int)")) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(quit) + layout.addWidget(lcd) + layout.addWidget(slider) + self.setLayout(layout) + + +app = QtWidgets.QApplication(sys.argv) +widget = MyWidget() +widget.show() +sys.exit(app.exec_()) diff --git a/examples/tutorial/t6.py b/examples/tutorial/t6.py new file mode 100644 index 0000000..b6ef304 --- /dev/null +++ b/examples/tutorial/t6.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 6 + + +import sys +from PySide2 import QtCore, QtGui, QtWidgets + + +class LCDRange(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + lcd = QtWidgets.QLCDNumber(2) + slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) + slider.setRange(0, 99) + slider.setValue(0) + self.connect(slider, QtCore.SIGNAL("valueChanged(int)"), + lcd, QtCore.SLOT("display(int)")) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(lcd) + layout.addWidget(slider) + self.setLayout(layout) + + +class MyWidget(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + quit = QtWidgets.QPushButton("Quit") + quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + self.connect(quit, QtCore.SIGNAL("clicked()"), + QtWidgets.qApp, QtCore.SLOT("quit()")) + + grid = QtWidgets.QGridLayout() + layout = QtWidgets.QVBoxLayout() + layout.addWidget(quit) + layout.addLayout(grid) + self.setLayout(layout) + for row in range(3): + for column in range(3): + grid.addWidget(LCDRange(), row, column) + + + + +app = QtWidgets.QApplication(sys.argv) +widget = MyWidget() +widget.show() +sys.exit(app.exec_()) diff --git a/examples/tutorial/t7.py b/examples/tutorial/t7.py new file mode 100644 index 0000000..b82840c --- /dev/null +++ b/examples/tutorial/t7.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 7 + + +import sys +from PySide2 import QtCore, QtGui, QtWidgets + + +class LCDRange(QtWidgets.QWidget): + valueChanged = QtCore.Signal(int) + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + lcd = QtWidgets.QLCDNumber(2) + + self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) + self.slider.setRange(0, 99) + self.slider.setValue(0) + + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + lcd, QtCore.SLOT("display(int)")) + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + self, QtCore.SIGNAL("valueChanged(int)")) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(lcd) + layout.addWidget(self.slider) + self.setLayout(layout) + + def value(self): + return self.slider.value() + + @QtCore.Slot(int) + def setValue(self, value): + self.slider.setValue(value) + + +class MyWidget(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + quit = QtWidgets.QPushButton("Quit") + quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(quit, QtCore.SIGNAL("clicked()"), + QtWidgets.qApp, QtCore.SLOT("quit()")) + + grid = QtWidgets.QGridLayout() + previousRange = None + + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(quit) + layout.addLayout(grid) + self.setLayout(layout) + + for row in range(3): + for column in range(3): + lcdRange = LCDRange() + grid.addWidget(lcdRange, row, column) + + if previousRange: + self.connect(lcdRange, QtCore.SIGNAL("valueChanged(int)"), + previousRange.setValue) + + previousRange = lcdRange + + + +app = QtWidgets.QApplication(sys.argv) +widget = MyWidget() +widget.show() +sys.exit(app.exec_()) diff --git a/examples/tutorial/t8.py b/examples/tutorial/t8.py new file mode 100644 index 0000000..e203ed8 --- /dev/null +++ b/examples/tutorial/t8.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 8 + + +import sys +from PySide2 import QtCore, QtGui, QtWidgets + + +class LCDRange(QtWidgets.QWidget): + valueChanged = QtCore.Signal(int) + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + lcd = QtWidgets.QLCDNumber(2) + self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) + self.slider.setRange(0, 99) + self.slider.setValue(0) + + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + lcd, QtCore.SLOT("display(int)")) + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + self, QtCore.SIGNAL("valueChanged(int)")) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(lcd) + layout.addWidget(self.slider) + self.setLayout(layout) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + @QtCore.Slot(int) + def setValue(self, value): + self.slider.setValue(value) + + def setRange(self, minValue, maxValue): + if minValue < 0 or maxValue > 99 or minValue > maxValue: + QtCore.qWarning("LCDRange.setRange(%d, %d)\n" + "\tRange must be 0..99\n" + "\tand minValue must not be greater than maxValue" % (minValue, maxValue)) + return + + self.slider.setRange(minValue, maxValue) + + +class CannonField(QtWidgets.QWidget): + angleChanged = QtCore.Signal(int) + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + self.currentAngle = 45 + self.setPalette(QtGui.QPalette(QtGui.QColor(250, 250, 200))) + self.setAutoFillBackground(True) + + def angle(self): + return self.currentAngle + + @QtCore.Slot(int) + def setAngle(self, angle): + if angle < 5: + angle = 5 + if angle > 70: + angle = 70 + if self.currentAngle == angle: + return + self.currentAngle = angle + self.update() + self.emit(QtCore.SIGNAL("angleChanged(int)"), self.currentAngle) + + def paintEvent(self, event): + painter = QtGui.QPainter(self) + painter.drawText(200, 200, "Angle = %d" % self.currentAngle) + + +class MyWidget(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + quit = QtWidgets.QPushButton("Quit") + quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(quit, QtCore.SIGNAL("clicked()"), + QtWidgets.qApp, QtCore.SLOT("quit()")) + + angle = LCDRange() + angle.setRange(5, 70) + + cannonField = CannonField() + + self.connect(angle, QtCore.SIGNAL("valueChanged(int)"), + cannonField.setAngle) + self.connect(cannonField, QtCore.SIGNAL("angleChanged(int)"), + angle.setValue) + + gridLayout = QtWidgets.QGridLayout() + gridLayout.addWidget(quit, 0, 0) + gridLayout.addWidget(angle, 1, 0) + gridLayout.addWidget(cannonField, 1, 1, 2, 1) + gridLayout.setColumnStretch(1, 10) + self.setLayout(gridLayout) + + angle.setValue(60) + angle.setFocus() + + +app = QtWidgets.QApplication(sys.argv) +widget = MyWidget() +widget.setGeometry(100, 100, 500, 355) +widget.show() +sys.exit(app.exec_()) diff --git a/examples/tutorial/t9.py b/examples/tutorial/t9.py new file mode 100644 index 0000000..d464074 --- /dev/null +++ b/examples/tutorial/t9.py @@ -0,0 +1,160 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# PySide2 tutorial 9 + + +import sys +from PySide2 import QtCore, QtGui, QtWidgets + + +class LCDRange(QtWidgets.QWidget): + valueChanged = QtCore.Signal(int) + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + lcd = QtWidgets.QLCDNumber(2) + self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) + self.slider.setRange(0, 99) + self.slider.setValue(0) + + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + lcd, QtCore.SLOT("display(int)")) + self.connect(self.slider, QtCore.SIGNAL("valueChanged(int)"), + self, QtCore.SIGNAL("valueChanged(int)")) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(lcd) + layout.addWidget(self.slider) + self.setLayout(layout) + + self.setFocusProxy(self.slider) + + def value(self): + return self.slider.value() + + @QtCore.Slot(int) + def setValue(self, value): + self.slider.setValue(value) + + def setRange(self, minValue, maxValue): + if minValue < 0 or maxValue > 99 or minValue > maxValue: + QtCore.qWarning("LCDRange::setRange(%d, %d)\n" + "\tRange must be 0..99\n" + "\tand minValue must not be greater than maxValue" % (minValue, maxValue)) + return + + self.slider.setRange(minValue, maxValue) + + +class CannonField(QtWidgets.QWidget): + angleChanged = QtCore.Signal(int) + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + self.currentAngle = 45 + self.setPalette(QtGui.QPalette(QtGui.QColor(250, 250, 200))) + self.setAutoFillBackground(True) + + def angle(self): + return self.currentAngle + + @QtCore.Slot(int) + def setAngle(self, angle): + if angle < 5: + angle = 5 + if angle > 70: + angle = 70 + if self.currentAngle == angle: + return + self.currentAngle = angle + self.update() + self.emit(QtCore.SIGNAL("angleChanged(int)"), self.currentAngle) + + def paintEvent(self, event): + painter = QtGui.QPainter(self) + + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.blue) + + painter.translate(0, self.rect().height()) + painter.drawPie(QtCore.QRect(-35, -35, 70, 70), 0, 90 * 16) + painter.rotate(-self.currentAngle) + painter.drawRect(QtCore.QRect(33, -4, 15, 8)) + + +class MyWidget(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + quit = QtWidgets.QPushButton("Quit") + quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold)) + + self.connect(quit, QtCore.SIGNAL("clicked()"), + QtWidgets.qApp, QtCore.SLOT("quit()")) + + angle = LCDRange() + angle.setRange(5, 70) + + cannonField = CannonField() + + self.connect(angle, QtCore.SIGNAL("valueChanged(int)"), + cannonField.setAngle) + self.connect(cannonField, QtCore.SIGNAL("angleChanged(int)"), + angle.setValue) + + gridLayout = QtWidgets.QGridLayout() + gridLayout.addWidget(quit, 0, 0) + gridLayout.addWidget(angle, 1, 0) + gridLayout.addWidget(cannonField, 1, 1, 2, 1) + gridLayout.setColumnStretch(1, 10) + self.setLayout(gridLayout) + + angle.setValue(60) + angle.setFocus() + + +app = QtWidgets.QApplication(sys.argv) +widget = MyWidget() +widget.setGeometry(100, 100, 500, 355) +widget.show() +sys.exit(app.exec_()) diff --git a/examples/utils/pyside2_config.py b/examples/utils/pyside2_config.py new file mode 100644 index 0000000..298d40d --- /dev/null +++ b/examples/utils/pyside2_config.py @@ -0,0 +1,302 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +import os, glob, re, sys, imp +from distutils import sysconfig + +usage = """ +Utility to determine include/link options of PySide2 and Python for qmake + +Usage: pyside2_config.py [option] +Options: + --python-include Print Python include path + --python-link Print Python link flags + --pyside2 Print PySide2 location + --pyside2-include Print PySide2 include paths + --pyside2-link Print PySide2 link flags + --pyside2-shared-libraries Print paths of PySide2 shared libraries (.so's, .dylib's, .dll's) + -a Print all + --help/-h Print this help +""" + +def cleanPath(path): + return path if sys.platform != 'win32' else path.replace('\\', '/') + +def sharedLibrarySuffix(): + if sys.platform == 'win32': + return 'lib' + elif sys.platform == 'darwin': + return 'dylib' + # Linux + else: + return 'so.*' + +def sharedLibraryGlobPattern(): + glob = '*.' + sharedLibrarySuffix() + return glob if sys.platform == 'win32' else 'lib' + glob + +def filterPySide2SharedLibraries(list, only_shiboken=False): + def predicate(item): + basename = os.path.basename(item) + if 'shiboken' in basename or ('pyside2' in basename and not only_shiboken): + return True + return False + result = [item for item in list if predicate(item)] + return result + +# Return qmake link option for a library file name +def linkOption(lib): + # On Linux: + # Since we cannot include symlinks with wheel packages + # we are using an absolute path for the libpyside and libshiboken + # libraries when compiling the project + baseName = os.path.basename(lib) + link = ' -l' + if sys.platform in ['linux', 'linux2']: # Linux: 'libfoo.so' -> '/absolute/path/libfoo.so' + link = lib + elif sys.platform in ['darwin']: # Darwin: 'libfoo.so' -> '-lfoo' + link += os.path.splitext(baseName[3:])[0] + else: # Windows: 'libfoo.dll' -> 'libfoo.dll' + link += os.path.splitext(baseName)[0] + return link + +# Locate PySide2 via package path +def findPySide2(): + for p in sys.path: + if 'site-' in p: + pyside2 = os.path.join(p, 'PySide2') + if os.path.exists(pyside2): + return cleanPath(os.path.realpath(pyside2)) + return None + +# Return version as "3.5" +def pythonVersion(): + return str(sys.version_info[0]) + '.' + str(sys.version_info[1]) + +def pythonInclude(): + return sysconfig.get_python_inc() + +def pythonLinkQmake(): + flags = pythonLinkData() + if sys.platform == 'win32': + libdir = flags['libdir'] + # This will add the "~1" shortcut for directories that + # contain white spaces + # e.g.: "Program Files" to "Progra~1" + for d in libdir.split("\\"): + if " " in d: + libdir = libdir.replace(d, d.split(" ")[0][:-1]+"~1") + return '-L{} -l{}'.format(libdir, flags['lib']) + elif sys.platform == 'darwin': + return '-L{} -l{}'.format(flags['libdir'], flags['lib']) + + else: + # Linux and anything else + return '-L{} -l{}'.format(flags['libdir'], flags['lib']) + +def pythonLinkCmake(): + flags = pythonLinkData() + libdir = flags['libdir'] + lib = re.sub(r'.dll$', '.lib', flags['lib']) + return '{};{}'.format(libdir, lib) + +def pythonLinkData(): + # @TODO Fix to work with static builds of Python + libdir = sysconfig.get_config_var('LIBDIR') + if libdir is None: + libdir = os.path.abspath(os.path.join( + sysconfig.get_config_var('LIBDEST'), "..", "libs")) + version = pythonVersion() + version_no_dots = version.replace('.', '') + + flags = {} + flags['libdir'] = libdir + if sys.platform == 'win32': + suffix = '_d' if any([tup[0].endswith('_d.pyd') for tup in imp.get_suffixes()]) else '' + flags['lib'] = 'python{}{}'.format(version_no_dots, suffix) + + elif sys.platform == 'darwin': + flags['lib'] = 'python{}'.format(version) + + # Linux and anything else + else: + if sys.version_info[0] < 3: + suffix = '_d' if any([tup[0].endswith('_d.so') for tup in imp.get_suffixes()]) else '' + flags['lib'] = 'python{}{}'.format(version, suffix) + else: + flags['lib'] = 'python{}{}'.format(version, sys.abiflags) + + return flags + +def pyside2Include(only_shiboken=False): + pySide2 = findPySide2() + if pySide2 is None: + return None + + includes = "{0}/include/shiboken2".format(pySide2) + if not only_shiboken: + includes = includes + " {0}/include/PySide2".format(pySide2) + + return includes + +def pyside2Link(): + pySide2 = findPySide2() + if pySide2 is None: + return None + link = "-L{}".format(pySide2) + glob_result = glob.glob(os.path.join(pySide2, sharedLibraryGlobPattern())) + for lib in filterPySide2SharedLibraries(glob_result): + link += ' ' + link += linkOption(lib) + return link + +def pyside2SharedLibrariesData(only_shiboken=False): + pySide2 = findPySide2() + if pySide2 is None: + return None + + glob_result = glob.glob(os.path.join(pySide2, sharedLibraryGlobPattern())) + filtered_libs = filterPySide2SharedLibraries(glob_result, only_shiboken) + libs = [] + if sys.platform == 'win32': + for lib in filtered_libs: + libs.append(os.path.realpath(lib)) + else: + for lib in filtered_libs: + libs.append(lib) + return libs + +def pyside2SharedLibraries(): + libs = pyside2SharedLibrariesData() + if libs is None: + return None + + if sys.platform == 'win32': + if not libs: + return '' + dlls = '' + for lib in libs: + dll = os.path.splitext(lib)[0] + '.dll' + dlls += dll + ' ' + + return dlls + else: + libs_string = '' + for lib in libs: + libs_string += lib + ' ' + return libs_string + +def pyside2SharedLibrariesCmake(only_shiboken=False): + libs = pyside2SharedLibrariesData(only_shiboken) + result = ';'.join(libs) + return result + +option = sys.argv[1] if len(sys.argv) == 2 else '-a' +if option == '-h' or option == '--help': + print(usage) + sys.exit(0) + +generic_error = (' Did you forget to activate your virtualenv? Or perhaps' + ' you forgot to build / install PySide2 into your currently active Python' + ' environment?') +pyside2_error = 'Unable to locate PySide2.' + generic_error +pyside2_libs_error = 'Unable to locate the PySide2 shared libraries.' + generic_error +python_link_error = 'Unable to locate the Python library for linking.' + +if option == '--pyside2' or option == '-a': + pySide2 = findPySide2() + if pySide2 is None: + sys.exit(pyside2_error) + print(pySide2) + +if option == '--pyside2-link' or option == '-a': + l = pyside2Link() + if l is None: + sys.exit(pyside2_error) + + print(l) + +if option == '--shiboken-include' or option == '-a': + i = pyside2Include(only_shiboken=True) + if i is None: + sys.exit(pyside2_error) + print(i) + +if option == '--pyside2-include' or option == '-a': + i = pyside2Include() + if i is None: + sys.exit(pyside2_error) + print(i) + +if option == '--python-include' or option == '-a': + i = pythonInclude() + if i is None: + sys.exit('Unable to locate the Python include headers directory.') + print(i) + +if option == '--python-link' or option == '-a': + l = pythonLinkQmake() + if l is None: + sys.exit(python_link_error) + print(l) + +if option == '--python-link-cmake' or option == '-a': + l = pythonLinkCmake() + if l is None: + sys.exit(python_link_error) + print(l) + +if option == '--pyside2-shared-libraries' or option == '-a': + l = pyside2SharedLibraries() + if l is None: + sys.exit(pyside2_libs_error) + print(l) + +if option == '--pyside2-shared-libraries-cmake' or option == '-a': + l = pyside2SharedLibrariesCmake() + if l is None: + sys.exit(pyside2_libs_error) + print(l) + +if option == '--shiboken-shared-libraries-cmake' or option == '-a': + l = pyside2SharedLibrariesCmake(only_shiboken=True) + if l is None: + sys.exit(pyside2_libs_error) + print(l) diff --git a/examples/utils/utils.py b/examples/utils/utils.py new file mode 100644 index 0000000..522f535 --- /dev/null +++ b/examples/utils/utils.py @@ -0,0 +1,49 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +isPY3 = sys.version_info[0] == 3 + +if isPY3: + text_type = str +else: + text_type = unicode diff --git a/examples/webenginequick/browser.qml b/examples/webenginequick/browser.qml new file mode 100644 index 0000000..7814538 --- /dev/null +++ b/examples/webenginequick/browser.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt for Python examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Window 2.0 +import QtWebEngine 1.0 + +Window { + width: 1024 + height: 768 + visible: true + WebEngineView { + anchors.fill: parent + url: "https://www.qt.io" + } +} diff --git a/examples/webenginequick/quicknanobrowser.py b/examples/webenginequick/quicknanobrowser.py new file mode 100644 index 0000000..24e58ea --- /dev/null +++ b/examples/webenginequick/quicknanobrowser.py @@ -0,0 +1,59 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 WebEngine QtQuick 2 Example""" + +import os +from PySide2.QtCore import QUrl +from PySide2.QtQml import QQmlApplicationEngine +from PySide2.QtWidgets import QApplication +from PySide2.QtWebEngine import QtWebEngine + +def main(): + app = QApplication([]) + QtWebEngine.initialize() + engine = QQmlApplicationEngine() + qml_file_path = os.path.join(os.path.dirname(__file__), 'browser.qml') + qml_url = QUrl.fromLocalFile(os.path.abspath(qml_file_path)) + engine.load(qml_url) + app.exec_() + +if __name__ == '__main__': + main() diff --git a/examples/webenginewidgets/simplebrowser.py b/examples/webenginewidgets/simplebrowser.py new file mode 100644 index 0000000..c7f6766 --- /dev/null +++ b/examples/webenginewidgets/simplebrowser.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 WebEngineWidgets Example""" + +import sys +from PySide2.QtCore import QUrl +from PySide2.QtGui import QIcon +from PySide2.QtWidgets import (QApplication, QDesktopWidget, QLineEdit, + QMainWindow, QPushButton, QToolBar) +from PySide2.QtWebEngineWidgets import QWebEnginePage, QWebEngineView + +class MainWindow(QMainWindow): + + def __init__(self): + super(MainWindow, self).__init__() + + self.setWindowTitle('PySide2 WebEngineWidgets Example') + + self.toolBar = QToolBar() + self.addToolBar(self.toolBar) + self.backButton = QPushButton() + self.backButton.setIcon(QIcon(':/qt-project.org/styles/commonstyle/images/left-32.png')) + self.backButton.clicked.connect(self.back) + self.toolBar.addWidget(self.backButton) + self.forwardButton = QPushButton() + self.forwardButton.setIcon(QIcon(':/qt-project.org/styles/commonstyle/images/right-32.png')) + self.forwardButton.clicked.connect(self.forward) + self.toolBar.addWidget(self.forwardButton) + + self.addressLineEdit = QLineEdit() + self.addressLineEdit.returnPressed.connect(self.load) + self.toolBar.addWidget(self.addressLineEdit) + + self.webEngineView = QWebEngineView() + self.setCentralWidget(self.webEngineView) + initialUrl = 'http://qt.io' + self.addressLineEdit.setText(initialUrl) + self.webEngineView.load(QUrl(initialUrl)) + self.webEngineView.page().titleChanged.connect(self.setWindowTitle) + self.webEngineView.page().urlChanged.connect(self.urlChanged) + + def load(self): + url = QUrl.fromUserInput(self.addressLineEdit.text()) + if url.isValid(): + self.webEngineView.load(url) + + def back(self): + self.webEngineView.page().triggerAction(QWebEnginePage.Back) + + def forward(self): + self.webEngineView.page().triggerAction(QWebEnginePage.Forward) + + def urlChanged(self, url): + self.addressLineEdit.setText(url.toString()) + +if __name__ == '__main__': + app = QApplication(sys.argv) + mainWin = MainWindow() + availableGeometry = app.desktop().availableGeometry(mainWin) + mainWin.resize(availableGeometry.width() * 2 / 3, availableGeometry.height() * 2 / 3) + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/webenginewidgets/tabbedbrowser/bookmarkwidget.py b/examples/webenginewidgets/tabbedbrowser/bookmarkwidget.py new file mode 100644 index 0000000..6bd2b45 --- /dev/null +++ b/examples/webenginewidgets/tabbedbrowser/bookmarkwidget.py @@ -0,0 +1,268 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +import json, os, warnings + +from PySide2 import QtCore +from PySide2.QtCore import (QDir, QFileInfo, QModelIndex, QStandardPaths, Qt, + QUrl) +from PySide2.QtGui import QIcon, QPixmap, QStandardItem, QStandardItemModel +from PySide2.QtWidgets import (QAction, QDockWidget, QMenu, QMessageBox, + QToolBar, QTreeView, QWidget) + +_url_role = Qt.UserRole + 1 + +# Default bookmarks as an array of arrays which is the form +# used to read from/write to a .json bookmarks file +_default_bookmarks = [ + ['Tool Bar'], + ['http://qt.io', 'Qt', ':/qt-project.org/qmessagebox/images/qtlogo-64.png'], + ['https://download.qt.io/snapshots/ci/pyside/', 'Downloads'], + ['https://doc-snapshots.qt.io/qtforpython/', 'Documentation'], + ['https://bugreports.qt.io/projects/PYSIDE/', 'Bug Reports'], + ['https://www.python.org/', 'Python', None], + ['https://wiki.qt.io/PySide2', 'Qt for Python', None], + ['Other Bookmarks'] +] + +def _config_dir(): + return '{}/QtForPythonBrowser'.format( + QStandardPaths.writableLocation(QStandardPaths.ConfigLocation)) + +_bookmark_file = 'bookmarks.json' + +def _create_folder_item(title): + result = QStandardItem(title) + result.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) + return result + +def _create_item(url, title, icon): + result = QStandardItem(title) + result.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) + result.setData(url, _url_role) + if icon is not None: + result.setIcon(icon) + return result + +# Create the model from an array of arrays +def _create_model(parent, serialized_bookmarks): + result = QStandardItemModel(0, 1, parent) + last_folder_item = None + for entry in serialized_bookmarks: + if len(entry) == 1: + last_folder_item = _create_folder_item(entry[0]) + result.appendRow(last_folder_item) + else: + url = QUrl.fromUserInput(entry[0]) + title = entry[1] + icon = QIcon(entry[2]) if len(entry) > 2 and entry[2] else None + last_folder_item.appendRow(_create_item(url, title, icon)) + return result + +# Serialize model into an array of arrays, writing out the icons +# into .png files under directory in the process +def _serialize_model(model, directory): + result = [] + folder_count = model.rowCount() + for f in range(0, folder_count): + folder_item = model.item(f) + result.append([folder_item.text()]) + item_count = folder_item.rowCount() + for i in range(0, item_count): + item = folder_item.child(i) + entry = [item.data(_url_role).toString(), item.text()] + icon = item.icon() + if not icon.isNull(): + icon_sizes = icon.availableSizes() + largest_size = icon_sizes[len(icon_sizes) - 1] + icon_file_name = '{}/icon{:02}_{:02}_{}.png'.format(directory, + f, i, largest_size.width()) + icon.pixmap(largest_size).save(icon_file_name, 'PNG') + entry.append(icon_file_name) + result.append(entry) + return result + +# Bookmarks as a tree view to be used in a dock widget with +# functionality to persist and populate tool bars and menus. +class BookmarkWidget(QTreeView): + """Provides a tree view to manage the bookmarks.""" + + open_bookmark = QtCore.Signal(QUrl) + open_bookmark_in_new_tab = QtCore.Signal(QUrl) + changed = QtCore.Signal() + + def __init__(self): + super(BookmarkWidget, self).__init__() + self.setRootIsDecorated(False) + self.setUniformRowHeights(True) + self.setHeaderHidden(True) + self._model = _create_model(self, self._read_bookmarks()) + self.setModel(self._model) + self.expandAll() + self.activated.connect(self._activated) + self._model.rowsInserted.connect(self._changed) + self._model.rowsRemoved.connect(self._changed) + self._model.dataChanged.connect(self._changed) + self._modified = False + + def _changed(self): + self._modified = True + self.changed.emit() + + def _activated(self, index): + item = self._model.itemFromIndex(index) + self.open_bookmark.emit(item.data(_url_role)) + + def _action_activated(self, index): + action = self.sender() + self.open_bookmark.emit(action.data()) + + def _tool_bar_item(self): + return self._model.item(0, 0) + + def _other_item(self): + return self._model.item(1, 0) + + def add_bookmark(self, url, title, icon): + self._other_item().appendRow(_create_item(url, title, icon)) + + def add_tool_bar_bookmark(self, url, title, icon): + self._tool_bar_item().appendRow(_create_item(url, title, icon)) + + # Synchronize the bookmarks under parent_item to a target_object + # like QMenu/QToolBar, which has a list of actions. Update + # the existing actions, append new ones if needed or hide + # superfluous ones + def _populate_actions(self, parent_item, target_object, first_action): + existing_actions = target_object.actions() + existing_action_count = len(existing_actions) + a = first_action + row_count = parent_item.rowCount() + for r in range(0, row_count): + item = parent_item.child(r) + title = item.text() + icon = item.icon() + url = item.data(_url_role) + if a < existing_action_count: + action = existing_actions[a] + if (title != action.toolTip()): + action.setText(BookmarkWidget.short_title(title)) + action.setIcon(icon) + action.setToolTip(title) + action.setData(url) + action.setVisible(True) + else: + action = target_object.addAction(icon, BookmarkWidget.short_title(title)) + action.setToolTip(title) + action.setData(url) + action.triggered.connect(self._action_activated) + a = a + 1 + while a < existing_action_count: + existing_actions[a].setVisible(False) + a = a + 1 + + def populate_tool_bar(self, tool_bar): + self._populate_actions(self._tool_bar_item(), tool_bar, 0) + + def populate_other(self, menu, first_action): + self._populate_actions(self._other_item(), menu, first_action) + + def _current_item(self): + index = self.currentIndex() + if index.isValid(): + item = self._model.itemFromIndex(index) + if item.parent(): # exclude top level items + return item + return None + + def context_menu_event(self, event): + context_menu = QMenu() + open_in_new_tab_action = context_menu.addAction("Open in New Tab") + remove_action = context_menu.addAction("Remove...") + current_item = self._current_item() + open_in_new_tab_action.setEnabled(current_item is not None) + remove_action.setEnabled(current_item is not None) + chosen_action = context_menu.exec_(event.globalPos()) + if chosen_action == open_in_new_tab_action: + self.open_bookmarkInNewTab.emit(current_item.data(_url_role)) + elif chosen_action == remove_action: + self._remove_item(current_item) + + def _remove_item(self, item): + button = QMessageBox.question(self, "Remove", + "Would you like to remove \"{}\"?".format(item.text()), + QMessageBox.Yes | QMessageBox.No) + if button == QMessageBox.Yes: + item.parent().removeRow(item.row()) + + def write_bookmarks(self): + if not self._modified: + return + dir_path = _config_dir() + native_dir_path = QDir.toNativeSeparators(dir_path) + dir = QFileInfo(dir_path) + if not dir.isDir(): + print('Creating {}...'.format(native_dir_path)) + if not QDir(dir.absolutePath()).mkpath(dir.fileName()): + warnings.warn('Cannot create {}.'.format(native_dir_path), + RuntimeWarning) + return + serialized_model = _serialize_model(self._model, dir_path) + bookmark_file_name = os.path.join(native_dir_path, _bookmark_file) + print('Writing {}...'.format(bookmark_file_name)) + with open(bookmark_file_name, 'w') as bookmark_file: + json.dump(serialized_model, bookmark_file, indent = 4) + + def _read_bookmarks(self): + bookmark_file_name = os.path.join(QDir.toNativeSeparators(_config_dir()), + _bookmark_file) + if os.path.exists(bookmark_file_name): + print('Reading {}...'.format(bookmark_file_name)) + return json.load(open(bookmark_file_name)) + return _default_bookmarks + + # Return a short title for a bookmark action, + # "Qt | Cross Platform.." -> "Qt" + @staticmethod + def short_title(t): + i = t.find(' | ') + if i == -1: + i = t.find(' - ') + return t[0:i] if i != -1 else t diff --git a/examples/webenginewidgets/tabbedbrowser/browsertabwidget.py b/examples/webenginewidgets/tabbedbrowser/browsertabwidget.py new file mode 100644 index 0000000..d85b8ad --- /dev/null +++ b/examples/webenginewidgets/tabbedbrowser/browsertabwidget.py @@ -0,0 +1,221 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from functools import partial +import sys + +from bookmarkwidget import BookmarkWidget +from webengineview import WebEngineView +from PySide2 import QtCore +from PySide2.QtCore import QPoint, Qt, QUrl +from PySide2.QtWidgets import (QAction, QMenu, QTabBar, QTabWidget) +from PySide2.QtWebEngineWidgets import (QWebEngineDownloadItem, + QWebEnginePage, QWebEngineProfile) + +class BrowserTabWidget(QTabWidget): + """Enables having several tabs with QWebEngineView.""" + + url_changed = QtCore.Signal(QUrl) + enabled_changed = QtCore.Signal(QWebEnginePage.WebAction, bool) + download_requested = QtCore.Signal(QWebEngineDownloadItem) + + def __init__(self, window_factory_function): + super(BrowserTabWidget, self).__init__() + self.setTabsClosable(True) + self._window_factory_function = window_factory_function + self._webengineviews = [] + self.currentChanged.connect(self._current_changed) + self.tabCloseRequested.connect(self.handle_tab_close_request) + self._actions_enabled = {} + for web_action in WebEngineView.web_actions(): + self._actions_enabled[web_action] = False + + tab_bar = self.tabBar() + tab_bar.setSelectionBehaviorOnRemove(QTabBar.SelectPreviousTab) + tab_bar.setContextMenuPolicy(Qt.CustomContextMenu) + tab_bar.customContextMenuRequested.connect(self._handle_tab_context_menu) + + def add_browser_tab(self): + factory_func = partial(BrowserTabWidget.add_browser_tab, self) + web_engine_view = WebEngineView(factory_func, self._window_factory_function) + index = self.count() + self._webengineviews.append(web_engine_view) + title = 'Tab {}'.format(index + 1) + self.addTab(web_engine_view, title) + page = web_engine_view.page() + page.titleChanged.connect(self._title_changed) + page.iconChanged.connect(self._icon_changed) + page.profile().downloadRequested.connect(self._download_requested) + web_engine_view.urlChanged.connect(self._url_changed) + web_engine_view.enabled_changed.connect(self._enabled_changed) + self.setCurrentIndex(index) + return web_engine_view + + def load(self, url): + index = self.currentIndex() + if index >= 0 and url.isValid(): + self._webengineviews[index].setUrl(url) + + def find(self, needle, flags): + index = self.currentIndex() + if index >= 0: + self._webengineviews[index].page().findText(needle, flags) + + def url(self): + index = self.currentIndex() + return self._webengineviews[index].url() if index >= 0 else QUrl() + + def _url_changed(self, url): + index = self.currentIndex() + if index >= 0 and self._webengineviews[index] == self.sender(): + self.url_changed.emit(url) + + def _title_changed(self, title): + index = self._index_of_page(self.sender()) + if (index >= 0): + self.setTabText(index, BookmarkWidget.short_title(title)) + + def _icon_changed(self, icon): + index = self._index_of_page(self.sender()) + if (index >= 0): + self.setTabIcon(index, icon) + + def _enabled_changed(self, web_action, enabled): + index = self.currentIndex() + if index >= 0 and self._webengineviews[index] == self.sender(): + self._check_emit_enabled_changed(web_action, enabled) + + def _check_emit_enabled_changed(self, web_action, enabled): + if enabled != self._actions_enabled[web_action]: + self._actions_enabled[web_action] = enabled + self.enabled_changed.emit(web_action, enabled) + + def _current_changed(self, index): + self._update_actions(index) + self.url_changed.emit(self.url()) + + def _update_actions(self, index): + if index >= 0 and index < len(self._webengineviews): + view = self._webengineviews[index] + for web_action in WebEngineView.web_actions(): + enabled = view.is_web_action_enabled(web_action) + self._check_emit_enabled_changed(web_action, enabled) + + def back(self): + self._trigger_action(QWebEnginePage.Back) + + def forward(self): + self._trigger_action(QWebEnginePage.Forward) + + def reload(self): + self._trigger_action(QWebEnginePage.Reload) + + def undo(self): + self._trigger_action(QWebEnginePage.Undo) + + def redo(self): + self._trigger_action(QWebEnginePage.Redo) + + def cut(self): + self._trigger_action(QWebEnginePage.Cut) + + def copy(self): + self._trigger_action(QWebEnginePage.Copy) + + def paste(self): + self._trigger_action(QWebEnginePage.Paste) + + def select_all(self): + self._trigger_action(QWebEnginePage.SelectAll) + + def zoom_factor(self): + return self._webengineviews[0].zoomFactor() if self._webengineviews else 1.0 + + def set_zoom_factor(self, z): + for w in self._webengineviews: + w.setZoomFactor(z) + + def _handle_tab_context_menu(self, point): + index = self.tabBar().tabAt(point) + if index < 0: + return + tab_count = len(self._webengineviews) + context_menu = QMenu() + duplicate_tab_action = context_menu.addAction("Duplicate Tab") + close_other_tabs_action = context_menu.addAction("Close Other Tabs") + close_other_tabs_action.setEnabled(tab_count > 1) + close_tabs_to_the_right_action = context_menu.addAction("Close Tabs to the Right") + close_tabs_to_the_right_action.setEnabled(index < tab_count - 1) + close_tab_action = context_menu.addAction("&Close Tab") + chosen_action = context_menu.exec_(self.tabBar().mapToGlobal(point)) + if chosen_action == duplicate_tab_action: + current_url = self.url() + self.add_browser_tab().load(current_url) + elif chosen_action == close_other_tabs_action: + for t in range(tab_count - 1, -1, -1): + if t != index: + self.handle_tab_close_request(t) + elif chosen_action == close_tabs_to_the_right_action: + for t in range(tab_count - 1, index, -1): + self.handle_tab_close_request(t) + elif chosen_action == close_tab_action: + self.handle_tab_close_request(index) + + def handle_tab_close_request(self, index): + if (index >= 0 and self.count() > 1): + self._webengineviews.remove(self._webengineviews[index]) + self.removeTab(index) + + def close_current_tab(self): + self.handle_tab_close_request(self.currentIndex()) + + def _trigger_action(self, action): + index = self.currentIndex() + if index >= 0: + self._webengineviews[index].page().triggerAction(action) + + def _index_of_page(self, web_page): + for p in range(0, len(self._webengineviews)): + if (self._webengineviews[p].page() == web_page): + return p + return -1 + + def _download_requested(self, item): + self.downloadRequested.emit(item) diff --git a/examples/webenginewidgets/tabbedbrowser/downloadwidget.py b/examples/webenginewidgets/tabbedbrowser/downloadwidget.py new file mode 100644 index 0000000..437c534 --- /dev/null +++ b/examples/webenginewidgets/tabbedbrowser/downloadwidget.py @@ -0,0 +1,144 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +from PySide2 import QtCore +from PySide2.QtCore import QDir, QFileInfo, QStandardPaths, Qt, QUrl +from PySide2.QtGui import QDesktopServices +from PySide2.QtWidgets import (QAction, QLabel, QMenu, QProgressBar, + QStyleFactory, QWidget) +from PySide2.QtWebEngineWidgets import QWebEngineDownloadItem + +# A QProgressBar with context menu for displaying downloads in a QStatusBar. +class DownloadWidget(QProgressBar): + """Lets you track progress of a QWebEngineDownloadItem.""" + finished = QtCore.Signal() + remove_requested = QtCore.Signal() + + def __init__(self, download_item): + super(DownloadWidget, self).__init__() + self._download_item = download_item + download_item.finished.connect(self._finished) + download_item.downloadProgress.connect(self._download_progress) + download_item.stateChanged.connect(self._update_tool_tip()) + path = download_item.path() + self.setMaximumWidth(300) + # Shorten 'PySide2-5.11.0a1-5.11.0-cp36-cp36m-linux_x86_64.whl'... + description = QFileInfo(path).fileName() + description_length = len(description) + if description_length > 30: + description = '{}...{}'.format(description[0:10], description[description_length - 10:]) + self.setFormat('{} %p%'.format(description)) + self.setOrientation(Qt.Horizontal) + self.setMinimum(0) + self.setValue(0) + self.setMaximum(100) + self._update_tool_tip() + # Force progress bar text to be shown on macoS by using 'fusion' style + if sys.platform == 'darwin': + self.setStyle(QStyleFactory.create('fusion')) + + @staticmethod + def open_file(file): + QDesktopServices.openUrl(QUrl.fromLocalFile(file)) + + @staticmethod + def open_download_directory(): + path = QStandardPaths.writableLocation(QStandardPaths.DownloadLocation) + DownloadWidget.open_file(path) + + def state(self): + return self._download_item.state() + + def _update_tool_tip(self): + path = self._download_item.path() + tool_tip = "{}\n{}".format(self._download_item.url().toString(), + QDir.toNativeSeparators(path)) + total_bytes = self._download_item.total_bytes() + if total_bytes > 0: + tool_tip += "\n{}K".format(total_bytes / 1024) + state = self.state() + if state == QWebEngineDownloadItem.DownloadRequested: + tool_tip += "\n(requested)" + elif state == QWebEngineDownloadItem.DownloadInProgress: + tool_tip += "\n(downloading)" + elif state == QWebEngineDownloadItem.DownloadCompleted: + tool_tip += "\n(completed)" + elif state == QWebEngineDownloadItem.DownloadCancelled: + tool_tip += "\n(cancelled)" + else: + tool_tip += "\n(interrupted)" + self.setToolTip(tool_tip) + + def _download_progress(self, bytes_received, bytes_total): + self.setValue(int(100 * bytes_received / bytes_total)) + + def _finished(self): + self._update_tool_tip() + self.finished.emit() + + def _launch(self): + DownloadWidget.open_file(self._download_item.path()) + + def mouse_double_click_event(self, event): + if self.state() == QWebEngineDownloadItem.DownloadCompleted: + self._launch() + + def context_menu_event(self, event): + state = self.state() + context_menu = QMenu() + launch_action = context_menu.addAction("Launch") + launch_action.setEnabled(state == QWebEngineDownloadItem.DownloadCompleted) + show_in_folder_action = context_menu.addAction("Show in Folder") + show_in_folder_action.setEnabled(state == QWebEngineDownloadItem.DownloadCompleted) + cancel_action = context_menu.addAction("Cancel") + cancel_action.setEnabled(state == QWebEngineDownloadItem.DownloadInProgress) + remove_action = context_menu.addAction("Remove") + remove_action.setEnabled(state != QWebEngineDownloadItem.DownloadInProgress) + + chosen_action = context_menu.exec_(event.globalPos()) + if chosen_action == launch_action: + self._launch() + elif chosen_action == show_in_folder_action: + DownloadWidget.open_file(QFileInfo(self._download_item.path()).absolutePath()) + elif chosen_action == cancel_action: + self._download_item.cancel() + elif chosen_action == remove_action: + self.remove_requested.emit() diff --git a/examples/webenginewidgets/tabbedbrowser/findtoolbar.py b/examples/webenginewidgets/tabbedbrowser/findtoolbar.py new file mode 100644 index 0000000..68a1fd5 --- /dev/null +++ b/examples/webenginewidgets/tabbedbrowser/findtoolbar.py @@ -0,0 +1,98 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore +from PySide2.QtCore import Qt, QUrl +from PySide2.QtGui import QIcon, QKeySequence +from PySide2.QtWidgets import (QAction, QCheckBox, QDockWidget, QHBoxLayout, + QLabel, QLineEdit, QToolBar, QToolButton, QWidget) +from PySide2.QtWebEngineWidgets import QWebEnginePage + +# A Find tool bar (bottom area) +class FindToolBar(QToolBar): + + find = QtCore.Signal(str, QWebEnginePage.FindFlags) + + def __init__(self): + super(FindToolBar, self).__init__() + self._line_edit = QLineEdit() + self._line_edit.setClearButtonEnabled(True) + self._line_edit.setPlaceholderText("Find...") + self._line_edit.setMaximumWidth(300) + self._line_edit.returnPressed.connect(self._find_next) + self.addWidget(self._line_edit) + + self._previous_button = QToolButton() + self._previous_button.setIcon(QIcon(':/qt-project.org/styles/commonstyle/images/up-32.png')) + self._previous_button.clicked.connect(self._find_previous) + self.addWidget(self._previous_button) + + self._next_button = QToolButton() + self._next_button.setIcon(QIcon(':/qt-project.org/styles/commonstyle/images/down-32.png')) + self._next_button.clicked.connect(self._find_next) + self.addWidget(self._next_button) + + self._case_sensitive_checkbox = QCheckBox('Case Sensitive') + self.addWidget(self._case_sensitive_checkbox) + + self._hideButton = QToolButton() + self._hideButton.setShortcut(QKeySequence(Qt.Key_Escape)) + self._hideButton.setIcon(QIcon(':/qt-project.org/styles/macstyle/images/closedock-16.png')) + self._hideButton.clicked.connect(self.hide) + self.addWidget(self._hideButton) + + def focus_find(self): + self._line_edit.setFocus() + + def _emit_find(self, backward): + needle = self._line_edit.text().strip() + if needle: + flags = QWebEnginePage.FindFlags() + if self._case_sensitive_checkbox.isChecked(): + flags |= QWebEnginePage.FindCaseSensitively + if backward: + flags |= QWebEnginePage.FindBackward + self.find.emit(needle, flags) + + def _find_next(self): + self._emit_find(False) + + def _find_previous(self): + self._emit_find(True) diff --git a/examples/webenginewidgets/tabbedbrowser/main.py b/examples/webenginewidgets/tabbedbrowser/main.py new file mode 100644 index 0000000..9fe98da --- /dev/null +++ b/examples/webenginewidgets/tabbedbrowser/main.py @@ -0,0 +1,386 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 WebEngineWidgets Example""" + +import sys +from bookmarkwidget import BookmarkWidget +from browsertabwidget import BrowserTabWidget +from downloadwidget import DownloadWidget +from findtoolbar import FindToolBar +from webengineview import QWebEnginePage, WebEngineView +from PySide2 import QtCore +from PySide2.QtCore import Qt, QUrl +from PySide2.QtGui import QCloseEvent, QKeySequence, QIcon +from PySide2.QtWidgets import (qApp, QAction, QApplication, QDesktopWidget, + QDockWidget, QLabel, QLineEdit, QMainWindow, QMenu, QMenuBar, QPushButton, + QStatusBar, QToolBar) +from PySide2.QtWebEngineWidgets import (QWebEngineDownloadItem, QWebEnginePage, + QWebEngineView) + +main_windows = [] + +def create_main_window(): + """Creates a MainWindow using 75% of the available screen resolution.""" + main_win = MainWindow() + main_windows.append(main_win) + available_geometry = app.desktop().availableGeometry(main_win) + main_win.resize(available_geometry.width() * 2 / 3, available_geometry.height() * 2 / 3) + main_win.show() + return main_win + +def create_main_window_with_browser(): + """Creates a MainWindow with a BrowserTabWidget.""" + main_win = create_main_window() + return main_win.add_browser_tab() + +class MainWindow(QMainWindow): + """Provides the parent window that includes the BookmarkWidget, + BrowserTabWidget, and a DownloadWidget, to offer the complete + web browsing experience.""" + def __init__(self): + super(MainWindow, self).__init__() + + self.setWindowTitle('PySide2 tabbed browser Example') + + self._tab_widget = BrowserTabWidget(create_main_window_with_browser) + self._tab_widget.enabled_changed.connect(self._enabled_changed) + self._tab_widget.download_requested.connect(self._download_requested) + self.setCentralWidget(self._tab_widget) + self.connect(self._tab_widget, QtCore.SIGNAL("url_changed(QUrl)"), + self.url_changed) + + self._bookmark_dock = QDockWidget() + self._bookmark_dock.setWindowTitle('Bookmarks') + self._bookmark_widget = BookmarkWidget() + self._bookmark_widget.open_bookmark.connect(self.load_url) + self._bookmark_widget.open_bookmark_in_new_tab.connect(self.load_url_in_new_tab) + self._bookmark_dock.setWidget(self._bookmark_widget) + self.addDockWidget(Qt.LeftDockWidgetArea, self._bookmark_dock) + + self._find_tool_bar = None + + self._actions = {} + self._create_menu() + + self._tool_bar = QToolBar() + self.addToolBar(self._tool_bar) + for action in self._actions.values(): + if not action.icon().isNull(): + self._tool_bar.addAction(action) + + self._addres_line_edit = QLineEdit() + self._addres_line_edit.setClearButtonEnabled(True) + self._addres_line_edit.returnPressed.connect(self.load) + self._tool_bar.addWidget(self._addres_line_edit) + self._zoom_label = QLabel() + self.statusBar().addPermanentWidget(self._zoom_label) + self._update_zoom_label() + + self._bookmarksToolBar = QToolBar() + self.addToolBar(Qt.TopToolBarArea, self._bookmarksToolBar) + self.insertToolBarBreak(self._bookmarksToolBar) + self._bookmark_widget.changed.connect(self._update_bookmarks) + self._update_bookmarks() + + def _update_bookmarks(self): + self._bookmark_widget.populate_tool_bar(self._bookmarksToolBar) + self._bookmark_widget.populate_other(self._bookmark_menu, 3) + + def _create_menu(self): + file_menu = self.menuBar().addMenu("&File") + exit_action = QAction(QIcon.fromTheme("application-exit"), "E&xit", + self, shortcut = "Ctrl+Q", triggered=qApp.quit) + file_menu.addAction(exit_action) + + navigation_menu = self.menuBar().addMenu("&Navigation") + + style_icons = ':/qt-project.org/styles/commonstyle/images/' + back_action = QAction(QIcon.fromTheme("go-previous", + QIcon(style_icons + 'left-32.png')), + "Back", self, + shortcut = QKeySequence(QKeySequence.Back), + triggered = self._tab_widget.back) + self._actions[QWebEnginePage.Back] = back_action + back_action.setEnabled(False) + navigation_menu.addAction(back_action) + forward_action = QAction(QIcon.fromTheme("go-next", + QIcon(style_icons + 'right-32.png')), + "Forward", self, + shortcut = QKeySequence(QKeySequence.Forward), + triggered = self._tab_widget.forward) + forward_action.setEnabled(False) + self._actions[QWebEnginePage.Forward] = forward_action + + navigation_menu.addAction(forward_action) + reload_action = QAction(QIcon(style_icons + 'refresh-32.png'), + "Reload", self, + shortcut = QKeySequence(QKeySequence.Refresh), + triggered = self._tab_widget.reload) + self._actions[QWebEnginePage.Reload] = reload_action + reload_action.setEnabled(False) + navigation_menu.addAction(reload_action) + + navigation_menu.addSeparator() + + new_tab_action = QAction("New Tab", self, + shortcut = 'Ctrl+T', + triggered = self.add_browser_tab) + navigation_menu.addAction(new_tab_action) + + close_tab_action = QAction("Close Current Tab", self, + shortcut = "Ctrl+W", + triggered = self._close_current_tab) + navigation_menu.addAction(close_tab_action) + + edit_menu = self.menuBar().addMenu("&Edit") + + find_action = QAction("Find", self, + shortcut = QKeySequence(QKeySequence.Find), + triggered = self._show_find) + edit_menu.addAction(find_action) + + edit_menu.addSeparator() + undo_action = QAction("Undo", self, + shortcut = QKeySequence(QKeySequence.Undo), + triggered = self._tab_widget.undo) + self._actions[QWebEnginePage.Undo] = undo_action + undo_action.setEnabled(False) + edit_menu.addAction(undo_action) + + redo_action = QAction("Redo", self, + shortcut = QKeySequence(QKeySequence.Redo), + triggered = self._tab_widget.redo) + self._actions[QWebEnginePage.Redo] = redo_action + redo_action.setEnabled(False) + edit_menu.addAction(redo_action) + + edit_menu.addSeparator() + + cut_action = QAction("Cut", self, + shortcut = QKeySequence(QKeySequence.Cut), + triggered = self._tab_widget.cut) + self._actions[QWebEnginePage.Cut] = cut_action + cut_action.setEnabled(False) + edit_menu.addAction(cut_action) + + copy_action = QAction("Copy", self, + shortcut = QKeySequence(QKeySequence.Copy), + triggered = self._tab_widget.copy) + self._actions[QWebEnginePage.Copy] = copy_action + copy_action.setEnabled(False) + edit_menu.addAction(copy_action) + + paste_action = QAction("Paste", self, + shortcut = QKeySequence(QKeySequence.Paste), + triggered = self._tab_widget.paste) + self._actions[QWebEnginePage.Paste] = paste_action + paste_action.setEnabled(False) + edit_menu.addAction(paste_action) + + edit_menu.addSeparator() + + select_all_action = QAction("Select All", self, + shortcut = QKeySequence(QKeySequence.SelectAll), + triggered = self._tab_widget.select_all) + self._actions[QWebEnginePage.SelectAll] = select_all_action + select_all_action.setEnabled(False) + edit_menu.addAction(select_all_action) + + self._bookmark_menu = self.menuBar().addMenu("&Bookmarks") + add_bookmark_action = QAction("&Add Bookmark", self, + triggered = self._add_bookmark) + self._bookmark_menu.addAction(add_bookmark_action) + add_tool_bar_bookmark_action = QAction("&Add Bookmark to Tool Bar", self, + triggered = self._add_tool_bar_bookmark) + self._bookmark_menu.addAction(add_tool_bar_bookmark_action) + self._bookmark_menu.addSeparator() + + tools_menu = self.menuBar().addMenu("&Tools") + download_action = QAction("Open Downloads", self, + triggered = DownloadWidget.open_download_directory) + tools_menu.addAction(download_action) + + window_menu = self.menuBar().addMenu("&Window") + + window_menu.addAction(self._bookmark_dock.toggleViewAction()) + + window_menu.addSeparator() + + zoom_in_action = QAction(QIcon.fromTheme("zoom-in"), + "Zoom In", self, + shortcut = QKeySequence(QKeySequence.ZoomIn), + triggered = self._zoom_in) + window_menu.addAction(zoom_in_action) + zoom_out_action = QAction(QIcon.fromTheme("zoom-out"), + "Zoom Out", self, + shortcut = QKeySequence(QKeySequence.ZoomOut), + triggered = self._zoom_out) + window_menu.addAction(zoom_out_action) + + reset_zoom_action = QAction(QIcon.fromTheme("zoom-original"), + "Reset Zoom", self, + shortcut = "Ctrl+0", + triggered = self._reset_zoom) + window_menu.addAction(reset_zoom_action) + + about_menu = self.menuBar().addMenu("&About") + about_action = QAction("About Qt", self, + shortcut = QKeySequence(QKeySequence.HelpContents), + triggered=qApp.aboutQt) + about_menu.addAction(about_action) + + def add_browser_tab(self): + return self._tab_widget.add_browser_tab() + + def _close_current_tab(self): + if self._tab_widget.count() > 1: + self._tab_widget.close_current_tab() + else: + self.close() + + def close_event(self, event): + main_windows.remove(self) + event.accept() + + def load(self): + url_string = self._addres_line_edit.text().strip() + if url_string: + self.load_url_string(url_string) + + def load_url_string(self, url_s): + url = QUrl.fromUserInput(url_s) + if (url.isValid()): + self.load_url(url) + + def load_url(self, url): + self._tab_widget.load(url) + + def load_url_in_new_tab(self, url): + self.add_browser_tab().load(url) + + def url_changed(self, url): + self._addres_line_edit.setText(url.toString()) + + def _enabled_changed(self, web_action, enabled): + action = self._actions[web_action] + if action: + action.setEnabled(enabled) + + def _add_bookmark(self): + index = self._tab_widget.currentIndex() + if index >= 0: + url = self._tab_widget.url() + title = self._tab_widget.tabText(index) + icon = self._tab_widget.tabIcon(index) + self._bookmark_widget.add_bookmark(url, title, icon) + + def _add_tool_bar_bookmark(self): + index = self._tab_widget.currentIndex() + if index >= 0: + url = self._tab_widget.url() + title = self._tab_widget.tabText(index) + icon = self._tab_widget.tabIcon(index) + self._bookmark_widget.add_tool_bar_bookmark(url, title, icon) + + def _zoom_in(self): + new_zoom = self._tab_widget.zoom_factor() * 1.5 + if (new_zoom <= WebEngineView.maximum_zoom_factor()): + self._tab_widget.set_zoom_factor(new_zoom) + self._update_zoom_label() + + def _zoom_out(self): + new_zoom = self._tab_widget.zoom_factor() / 1.5 + if (new_zoom >= WebEngineView.minimum_zoom_factor()): + self._tab_widget.set_zoom_factor(new_zoom) + self._update_zoom_label() + + def _reset_zoom(self): + self._tab_widget.set_zoom_factor(1) + self._update_zoom_label() + + def _update_zoom_label(self): + percent = int(self._tab_widget.zoom_factor() * 100) + self._zoom_label.setText("{}%".format(percent)) + + def _download_requested(self, item): + # Remove old downloads before opening a new one + for old_download in self.statusBar().children(): + if type(old_download).__name__ == 'download_widget' and \ + old_download.state() != QWebEngineDownloadItem.DownloadInProgress: + self.statusBar().removeWidget(old_download) + del old_download + + item.accept() + download_widget = download_widget(item) + download_widget.removeRequested.connect(self._remove_download_requested, + Qt.QueuedConnection) + self.statusBar().addWidget(download_widget) + + def _remove_download_requested(self): + download_widget = self.sender() + self.statusBar().removeWidget(download_widget) + del download_widget + + def _show_find(self): + if self._find_tool_bar is None: + self._find_tool_bar = FindToolBar() + self._find_tool_bar.find.connect(self._tab_widget.find) + self.addToolBar(Qt.BottomToolBarArea, self._find_tool_bar) + else: + self._find_tool_bar.show() + self._find_tool_bar.focus_find() + + def write_bookmarks(self): + self._bookmark_widget.write_bookmarks() + +if __name__ == '__main__': + app = QApplication(sys.argv) + main_win = create_main_window() + initial_urls = sys.argv[1:] + if not initial_urls: + initial_urls.append('http://qt.io') + for url in initial_urls: + main_win.load_url_in_new_tab(QUrl.fromUserInput(url)) + exit_code = app.exec_() + main_win.write_bookmarks() + sys.exit(exit_code) diff --git a/examples/webenginewidgets/tabbedbrowser/tabbedbrowser.pyqtc b/examples/webenginewidgets/tabbedbrowser/tabbedbrowser.pyqtc new file mode 100644 index 0000000..1ad61c3 --- /dev/null +++ b/examples/webenginewidgets/tabbedbrowser/tabbedbrowser.pyqtc @@ -0,0 +1,6 @@ +main.py +bookmarkwidget.py +browsertabwidget.py +downloadwidget.py +findtoolbar.py +webengineview.py diff --git a/examples/webenginewidgets/tabbedbrowser/webengineview.py b/examples/webenginewidgets/tabbedbrowser/webengineview.py new file mode 100644 index 0000000..7b5775b --- /dev/null +++ b/examples/webenginewidgets/tabbedbrowser/webengineview.py @@ -0,0 +1,90 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +from PySide2.QtWebEngineWidgets import QWebEnginePage, QWebEngineView + +from PySide2 import QtCore + +_web_actions = [QWebEnginePage.Back, QWebEnginePage.Forward, + QWebEnginePage.Reload, + QWebEnginePage.Undo, QWebEnginePage.Redo, + QWebEnginePage.Cut, QWebEnginePage.Copy, + QWebEnginePage.Paste, QWebEnginePage.SelectAll] + +class WebEngineView(QWebEngineView): + + enabled_changed = QtCore.Signal(QWebEnginePage.WebAction, bool) + + @staticmethod + def web_actions(): + return _web_actions + + @staticmethod + def minimum_zoom_factor(): + return 0.25 + + @staticmethod + def maximum_zoom_factor(): + return 5 + + def __init__(self, tab_factory_func, window_factory_func): + super(WebEngineView, self).__init__() + self._tab_factory_func = tab_factory_func + self._window_factory_func = window_factory_func + page = self.page() + self._actions = {} + for web_action in WebEngineView.web_actions(): + action = page.action(web_action) + action.changed.connect(self._enabled_changed) + self._actions[action] = web_action + + def is_web_action_enabled(self, web_action): + return self.page().action(web_action).isEnabled() + + def create_window(self, window_type): + if window_type == QWebEnginePage.WebBrowserTab or window_type == QWebEnginePage.WebBrowserBackgroundTab: + return self._tab_factory_func() + return self._window_factory_func() + + def _enabled_changed(self): + action = self.sender() + web_action = self._actions[action] + self.enabled_changed.emit(web_action, action.isEnabled()) diff --git a/examples/widgets/animation/animatedtiles/animatedtiles.py b/examples/widgets/animation/animatedtiles/animatedtiles.py new file mode 100755 index 0000000..e390cfc --- /dev/null +++ b/examples/widgets/animation/animatedtiles/animatedtiles.py @@ -0,0 +1,260 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2010 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets + +import animatedtiles_rc + + +# Deriving from more than one wrapped class is not supported, so we use +# composition and delegate the property. +class Pixmap(QtCore.QObject): + def __init__(self, pix): + super(Pixmap, self).__init__() + + self.pixmap_item = QtWidgets.QGraphicsPixmapItem(pix) + self.pixmap_item.setCacheMode(QtWidgets.QGraphicsItem.DeviceCoordinateCache) + + def set_pos(self, pos): + self.pixmap_item.setPos(pos) + + def get_pos(self): + return self.pixmap_item.pos() + + pos = QtCore.Property(QtCore.QPointF, get_pos, set_pos) + + +class Button(QtWidgets.QGraphicsWidget): + pressed = QtCore.Signal() + + def __init__(self, pixmap, parent=None): + super(Button, self).__init__(parent) + + self._pix = pixmap + + self.setAcceptHoverEvents(True) + self.setCacheMode(QtWidgets.QGraphicsItem.DeviceCoordinateCache) + + def boundingRect(self): + return QtCore.QRectF(-65, -65, 130, 130) + + def shape(self): + path = QtGui.QPainterPath() + path.addEllipse(self.boundingRect()) + + return path + + def paint(self, painter, option, widget): + down = option.state & QtWidgets.QStyle.State_Sunken + r = self.boundingRect() + + grad = QtGui.QLinearGradient(r.topLeft(), r.bottomRight()) + if option.state & QtWidgets.QStyle.State_MouseOver: + color_0 = QtCore.Qt.white + else: + color_0 = QtCore.Qt.lightGray + + color_1 = QtCore.Qt.darkGray + + if down: + color_0, color_1 = color_1, color_0 + + grad.setColorAt(0, color_0) + grad.setColorAt(1, color_1) + + painter.setPen(QtCore.Qt.darkGray) + painter.setBrush(grad) + painter.drawEllipse(r) + + color_0 = QtCore.Qt.darkGray + color_1 = QtCore.Qt.lightGray + + if down: + color_0, color_1 = color_1, color_0 + + grad.setColorAt(0, color_0) + grad.setColorAt(1, color_1) + + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(grad) + + if down: + painter.translate(2, 2) + + painter.drawEllipse(r.adjusted(5, 5, -5, -5)) + painter.drawPixmap(-self._pix.width() / 2, -self._pix.height() / 2, + self._pix) + + def mousePressEvent(self, ev): + self.pressed.emit() + self.update() + + def mouseReleaseEvent(self, ev): + self.update() + + +class View(QtWidgets.QGraphicsView): + def resizeEvent(self, event): + super(View, self).resizeEvent(event) + self.fitInView(self.sceneRect(), QtCore.Qt.KeepAspectRatio) + + +if __name__ == '__main__': + + import sys + import math + + app = QtWidgets.QApplication(sys.argv) + + kineticPix = QtGui.QPixmap(':/images/kinetic.png') + bgPix = QtGui.QPixmap(':/images/Time-For-Lunch-2.jpg') + + scene = QtWidgets.QGraphicsScene(-350, -350, 700, 700) + + items = [] + for i in range(64): + item = Pixmap(kineticPix) + item.pixmap_item.setOffset(-kineticPix.width() / 2, + -kineticPix.height() / 2) + item.pixmap_item.setZValue(i) + items.append(item) + scene.addItem(item.pixmap_item) + + # Buttons. + buttonParent = QtWidgets.QGraphicsRectItem() + ellipseButton = Button(QtGui.QPixmap(':/images/ellipse.png'), buttonParent) + figure8Button = Button(QtGui.QPixmap(':/images/figure8.png'), buttonParent) + randomButton = Button(QtGui.QPixmap(':/images/random.png'), buttonParent) + tiledButton = Button(QtGui.QPixmap(':/images/tile.png'), buttonParent) + centeredButton = Button(QtGui.QPixmap(':/images/centered.png'), buttonParent) + + ellipseButton.setPos(-100, -100) + figure8Button.setPos(100, -100) + randomButton.setPos(0, 0) + tiledButton.setPos(-100, 100) + centeredButton.setPos(100, 100) + + scene.addItem(buttonParent) + buttonParent.setTransform(QtGui.QTransform().scale(0.75, 0.75)) + buttonParent.setPos(200, 200) + buttonParent.setZValue(65) + + # States. + rootState = QtCore.QState() + ellipseState = QtCore.QState(rootState) + figure8State = QtCore.QState(rootState) + randomState = QtCore.QState(rootState) + tiledState = QtCore.QState(rootState) + centeredState = QtCore.QState(rootState) + + # Values. + for i, item in enumerate(items): + # Ellipse. + ellipseState.assignProperty(item, 'pos', + QtCore.QPointF(math.cos((i / 63.0) * 6.28) * 250, + math.sin((i / 63.0) * 6.28) * 250)) + + # Figure 8. + figure8State.assignProperty(item, 'pos', + QtCore.QPointF(math.sin((i / 63.0) * 6.28) * 250, + math.sin(((i * 2)/63.0) * 6.28) * 250)) + + # Random. + randomState.assignProperty(item, 'pos', + QtCore.QPointF(-250 + QtCore.qrand() % 500, + -250 + QtCore.qrand() % 500)) + + # Tiled. + tiledState.assignProperty(item, 'pos', + QtCore.QPointF(((i % 8) - 4) * kineticPix.width() + kineticPix.width() / 2, + ((i // 8) - 4) * kineticPix.height() + kineticPix.height() / 2)) + + # Centered. + centeredState.assignProperty(item, 'pos', QtCore.QPointF()) + + # Ui. + view = View(scene) + view.setWindowTitle("Animated Tiles") + view.setViewportUpdateMode(QtWidgets.QGraphicsView.BoundingRectViewportUpdate) + view.setBackgroundBrush(QtGui.QBrush(bgPix)) + view.setCacheMode(QtWidgets.QGraphicsView.CacheBackground) + view.setRenderHints( + QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform) + view.show() + + states = QtCore.QStateMachine() + states.addState(rootState) + states.setInitialState(rootState) + rootState.setInitialState(centeredState) + + group = QtCore.QParallelAnimationGroup() + for i, item in enumerate(items): + anim = QtCore.QPropertyAnimation(item, b'pos') + anim.setDuration(750 + i * 25) + anim.setEasingCurve(QtCore.QEasingCurve.InOutBack) + group.addAnimation(anim) + + trans = rootState.addTransition(ellipseButton.pressed, ellipseState) + trans.addAnimation(group) + + trans = rootState.addTransition(figure8Button.pressed, figure8State) + trans.addAnimation(group) + + trans = rootState.addTransition(randomButton.pressed, randomState) + trans.addAnimation(group) + + trans = rootState.addTransition(tiledButton.pressed, tiledState) + trans.addAnimation(group) + + trans = rootState.addTransition(centeredButton.pressed, centeredState) + trans.addAnimation(group) + + timer = QtCore.QTimer() + timer.start(125) + timer.setSingleShot(True) + trans = rootState.addTransition(timer.timeout, ellipseState) + trans.addAnimation(group) + + states.start() + + sys.exit(app.exec_()) diff --git a/examples/widgets/animation/animatedtiles/animatedtiles.qrc b/examples/widgets/animation/animatedtiles/animatedtiles.qrc new file mode 100644 index 0000000..c43a979 --- /dev/null +++ b/examples/widgets/animation/animatedtiles/animatedtiles.qrc @@ -0,0 +1,11 @@ + + + images/Time-For-Lunch-2.jpg + images/centered.png + images/ellipse.png + images/figure8.png + images/kinetic.png + images/random.png + images/tile.png + + diff --git a/examples/widgets/animation/animatedtiles/animatedtiles_rc.py b/examples/widgets/animation/animatedtiles/animatedtiles_rc.py new file mode 100644 index 0000000..5615763 --- /dev/null +++ b/examples/widgets/animation/animatedtiles/animatedtiles_rc.py @@ -0,0 +1,6144 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Wed Sep 15 16:46:54 2010 +# by: The Resource Compiler for PySide (Qt v4.7.0) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x36\xe2\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x64\x00\x00\x00\x64\x08\x06\x00\x00\x00\x70\xe2\x95\x54\ +\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ +\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\ +\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0e\xc4\x00\x00\x0e\xc4\x01\ +\x95\x2b\x0e\x1b\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x03\ +\x0e\x1c\x24\x7c\x1a\xa6\xff\x00\x00\x20\x00\x49\x44\x41\x54\x78\ +\xda\xed\x9d\x77\x98\x9d\x65\x9d\xf7\x3f\xf7\x53\x4e\x9f\x99\x33\ +\x33\x99\x4c\x66\x12\x32\xa9\xa4\x03\x91\x90\x10\x6a\xe8\x48\xd9\ +\x05\xa5\x88\xc8\xba\xeb\xcb\xb2\xae\x04\x51\x57\x5f\x57\x5d\x5d\ +\x76\x5d\x45\x51\x56\x50\x71\x59\x75\xa5\x59\xc0\x12\x3a\x16\x88\ +\x94\x00\x09\x29\xa4\x4d\xea\xb4\x4c\xa6\xcf\x9c\x39\xbd\x3d\xf5\ +\x7e\xff\x38\xf3\x3c\x99\x41\x94\x34\x7d\xdf\xeb\xbd\xb8\xaf\x2b\ +\x57\x32\xc9\xc9\x79\xca\xf7\xfe\xb5\xef\xaf\xdc\xf0\xee\x7a\x77\ +\xbd\xbb\xde\x5d\xef\xae\x77\xd7\xbb\xeb\xdd\xf5\xee\x7a\x77\xfd\ +\x7f\xbf\xc4\xb1\xfc\xe7\xba\xba\xba\xab\x0c\xc3\x08\x4e\x99\x32\ +\xe5\x73\x2b\x57\xae\x3c\x51\x51\x14\xb6\x6d\xdb\x46\x6d\x6d\xed\ +\xa1\x0b\xb8\x02\x09\x20\xe4\x1f\x5c\x4d\x55\xd5\x94\xa2\x28\xf9\ +\x72\xb9\xac\xbf\xfa\xea\xab\xb3\xfe\x6f\xbf\x8c\xda\xda\xda\x9f\ +\x5d\x77\xdd\x75\x57\x97\xcb\x65\x17\x40\x41\xe0\x48\x89\xf8\x23\ +\x6f\xc9\x71\x1c\x02\x81\x00\xaf\xbf\xfe\xba\xb3\x60\xc1\x82\xc2\ +\xc0\xc0\x40\x6c\xcb\x96\x2d\xd3\x2d\xcb\x4a\x1e\xed\x3d\x68\xc7\ +\xf2\x00\x8b\x16\x2d\xfa\xe1\xcc\x99\x33\xeb\x37\x6f\xde\x4c\xa9\ +\x54\xc2\xb6\x6d\xea\xeb\xeb\x69\x68\x68\x40\x08\x41\xbf\x95\x62\ +\xda\x05\x45\xaa\xa2\x3a\x4e\x3a\x88\x93\xd1\x71\x73\x3a\x76\x4a\ +\x43\x16\x35\x80\xb0\x94\xf2\x0f\xbe\x77\xda\xb4\x69\xa2\xb7\xb7\ +\x57\xfe\x25\x40\xa8\xaa\xaa\xba\x60\xc5\x8a\x15\x6b\x74\x5d\x37\ +\x1d\xc7\xa9\xe9\xef\xed\xd3\x6d\x0b\x84\x22\x31\x30\x09\xc5\x04\ +\xb2\xa0\x4d\xd8\x4c\x42\x08\xf6\xee\xdd\xcb\xd2\xa5\x4b\xbd\x8d\ +\x85\xa6\x69\xb1\x58\x2c\x86\xeb\xba\xa7\x85\x42\xa1\x6c\x6d\x6d\ +\xed\xae\x81\x81\x81\xec\x9f\x1d\x90\x45\x8b\x16\xb1\x77\xef\xde\ +\x90\xe3\x38\x28\x8a\xe2\x94\x4a\x25\x5c\xd7\xc5\x34\x4d\x6c\xdb\ +\xc6\xb2\x2c\xca\xe5\x32\x42\x08\x8a\xdd\x09\xba\xba\xc3\x48\x69\ +\x22\x30\x91\xaa\x8b\x40\x80\xa8\x3c\xf0\x38\x19\x95\x67\x9c\x71\ +\x86\x04\xc8\x66\xb3\xb4\xb6\xb6\x8a\xbf\x94\x54\x94\xcb\xe5\xe6\ +\xc9\x93\x27\x57\x9b\xa6\x89\x82\xe0\x60\xb8\x87\x85\x17\x2a\xd8\ +\xc3\x41\xec\x44\x10\x67\x34\x88\x8c\x0a\xa4\xa9\x20\x2d\xa5\xf2\ +\xd2\x34\x0d\x55\x55\x31\x4d\x13\x45\x51\x70\x5d\x17\xc3\x30\x30\ +\x4d\x53\x5e\x75\xd5\x55\xbf\x11\x42\xf0\xda\x6b\xaf\x5d\x00\xfc\ +\xfe\xcf\x0e\x48\x47\x47\xc7\x9c\xd3\x4e\x3b\xad\xad\xb6\xb6\x96\ +\x42\xa1\x80\x69\x9a\x13\x00\xf1\x6e\x4e\x51\x14\xa6\x4c\x6d\x22\ +\x1c\x0e\xa3\x08\x41\xab\x71\x80\xe5\x1f\x82\x40\x40\xc1\x1e\xd5\ +\xb1\x7a\xa3\x98\x83\x01\x9c\xe1\x20\x42\xa9\x28\x05\x29\x25\xc1\ +\x60\xf0\x2f\xab\xb3\x85\xf0\x37\x92\x86\x8a\x3b\x3f\x43\x20\x5e\ +\x43\x20\x5e\x82\x13\x4b\x13\x3e\x3b\xf4\xe8\x24\xdc\xa2\x8a\xeb\ +\xba\x48\x29\x31\x0c\x03\x21\x04\x52\x4a\x2c\xcb\xc2\x75\x5d\x61\ +\x18\x06\x9a\xa6\x01\xb8\x7f\x11\x95\x55\x2e\x97\x1b\x1a\x1a\x1a\ +\x08\x85\x42\xe4\xf3\x79\x0c\xc3\xf0\x6f\xce\x71\x1c\x1c\xc7\xf1\ +\x6f\x34\x10\x08\x54\xc0\x11\x82\x5e\x7b\x84\xf3\x62\x4d\xb8\x46\ +\x90\x25\x4b\x4e\x61\xe7\xe4\x57\x89\x08\x89\xa2\xe8\xa4\x5f\xae\ +\xa2\xb0\x27\x8c\x94\x12\xd7\x75\xff\xec\x20\x44\xa3\xd1\xb3\xae\ +\xb9\xe6\x9a\x75\xa5\x52\xa9\xf2\x42\x5d\x29\x43\xf5\x42\xb8\x29\ +\x9d\x19\xbb\x4e\x61\x74\x97\xac\x48\xf0\x5b\xe4\xb4\x6d\xef\x2e\ +\x66\xcc\x98\xe1\x03\x32\x5e\x42\xca\xe5\xb2\xbf\x31\xa5\x94\x94\ +\xcb\xe5\x8f\x57\x55\x55\x5d\x57\x55\x55\xf5\x40\x7f\x7f\xff\xa6\ +\x3f\xab\x0d\xb1\x6d\x1b\xc3\x30\x7c\x69\xf0\x6e\xc4\x71\x1c\x7f\ +\xb7\x09\x21\x50\x55\x15\xcb\xb2\x90\xae\x4b\x7d\x3a\xc4\xc1\xa7\ +\x15\x4e\x08\x2e\x26\x57\x3f\x05\x3b\x31\x17\xac\x30\x49\x3a\x29\ +\x0c\x98\x38\x79\xc7\x07\xe4\xec\xb3\xcf\xfe\x1f\x29\x65\x20\x99\ +\x4c\x86\x7b\x7b\x7b\xff\x36\x9b\xcd\xe6\x8f\x27\x20\x52\xca\xb0\ +\xaa\xaa\x15\x89\x96\x92\x5d\x93\x77\x8a\xf3\xaf\xac\xc3\x95\x36\ +\x76\x56\x43\x64\xc3\xd8\x59\x0d\x27\xab\x51\xde\x1f\x41\x3a\xc2\ +\x97\xa6\x72\xb9\x8c\xa2\x54\x54\x97\x07\x88\x27\x21\x8e\xe3\x54\ +\x9e\x57\x4a\xb9\x6a\xd5\xaa\xab\x9b\x9b\x9b\x79\xf0\xc1\x07\xd7\ +\x03\x7f\x1e\x40\xa6\x4d\x9b\xb6\xb0\x54\x2a\xcd\xb7\x6d\x1b\x29\ +\x25\x8e\xe3\x4c\x50\x59\x8e\xe3\x00\xf8\x2a\x4b\xd3\x34\xff\x33\ +\x0b\x1b\x66\x13\x4d\x55\x91\x24\x41\x77\x7f\x37\xf1\xf7\x14\xd0\ +\xcc\x00\xd1\x44\x9c\x48\xbd\x86\xac\x11\x48\x43\x01\x57\x80\xe0\ +\x23\x00\xe1\x70\x98\xdd\xbb\x77\x7f\x14\x38\x26\x40\x9a\x9a\x9a\ +\x18\x18\x18\x18\x0f\x88\x34\x4d\x13\xd3\x34\x31\x5d\x9b\x58\xb5\ +\x0e\xb6\xc2\xf2\xc9\xef\xa7\xaa\x25\xc4\x4b\x9d\xbf\x62\xfa\xbc\ +\x26\x86\x8c\x2e\xf2\x1d\x2a\x4e\xa9\x02\x80\xf7\x9c\xe3\xed\x86\ +\xf7\x67\x4f\x32\xc6\xde\x87\xc8\x66\xb3\x44\xa3\x51\x14\x45\x91\ +\x7f\x36\x95\x55\x5b\x5b\xbb\x66\xd9\xb2\x65\xf3\xd2\xe9\xb4\x6f\ +\x2f\x1c\xa7\xb2\xb3\x3d\x2f\x2b\x18\x0c\x32\x66\xf0\x09\x06\x83\ +\xb8\xae\x8b\x65\x59\xbe\xb1\x57\x51\xd8\x17\xee\xe0\xc2\x05\xd5\ +\x40\xf1\x2d\x0a\x5d\x92\x5e\x57\x43\xb9\x2d\x02\x80\x65\x59\xc7\ +\x45\x22\x06\x06\x06\x68\x6a\x6a\x9a\x04\x2c\x01\x1c\xc3\x30\x4e\ +\x4e\x24\x12\x64\xb3\x59\x6c\x5c\xec\x11\x9b\x9d\xcf\x17\xb8\xf2\ +\x7d\xf3\x79\xfa\xd5\x35\xcc\x6b\xbe\x82\xf7\xd4\xaf\xe4\xbf\xb6\ +\x7f\x8a\x6c\x2a\x87\x2e\xc3\xbe\x9b\xeb\x01\x02\x50\x28\x14\x70\ +\x1c\x07\xd7\x75\x29\x95\x4a\x9e\xed\xc0\xf3\x1c\x3d\x4d\xf1\x67\ +\x03\x44\x4a\xa9\x14\x0a\x05\x1f\x08\xdb\xb6\xc9\xe5\x72\xd8\xb6\ +\x4d\x3e\x9f\xf7\x75\x6b\xa9\x54\x42\x51\x14\xc2\xe1\x30\xb6\x6d\ +\x63\xdb\xf6\xa1\x87\x91\x02\xc2\x15\xf1\xff\xc8\xc2\xbb\x91\x8a\ +\x4b\xda\xed\x64\xe3\xd6\x2e\x92\x55\xeb\x18\x1d\xfb\x9c\xb7\x23\ +\x8f\xd7\x2a\x95\x4a\x37\x9f\x7f\xfe\xf9\x77\xaa\xaa\x8a\x40\x90\ +\x30\x33\x4c\x3f\xbd\x1a\x77\x38\x8c\x33\xda\x82\x48\xc3\x8f\xbe\ +\xf3\x53\x14\x55\xf0\x1a\x5b\x78\x55\x6e\x26\xa0\xcd\x27\x9f\x6c\ +\x27\x1a\x55\x91\x52\x7a\xb6\xc1\x07\xa4\x58\x2c\xfa\xef\x22\x9b\ +\xcd\x12\x8b\xc5\x7c\x30\xc6\x49\x4b\x63\x2c\x16\x9b\x95\xcf\xe7\ +\x3b\xff\x1c\x80\xf8\x2f\xd8\xb2\x2c\x6c\xdb\xf6\x5f\x9e\xa6\x69\ +\x3e\x10\xaa\xaa\xfa\xde\x4b\xb1\x58\xf4\x8d\xbd\x27\x21\x58\x92\ +\xd1\x5e\x83\xa9\xef\x99\xcb\x75\x3f\x5a\xca\xcf\x3e\xb2\x81\xa6\ +\x93\xd2\xac\xed\xc9\xb2\x27\xfb\x2a\xf9\x9c\xe9\xab\x3e\xa0\xce\ +\xbb\xfe\xf4\xe9\xd3\x93\x07\x0f\x1e\x74\x8f\xd2\x6e\x44\xbd\x0d\ +\x53\x74\x4d\xb4\x73\xfa\xa9\x9d\x1f\xc1\x92\x83\x48\x1b\x44\x36\ +\x86\x9d\x51\x71\x52\x3a\xf9\x2d\xd5\xa0\x48\x1c\x69\xfb\xb6\xc2\ +\x93\x90\x54\x2a\x85\xaa\xaa\x38\x8e\xe3\xc5\x1f\x08\x21\xd0\x34\ +\x0d\x45\x51\xc8\xe5\x72\x04\x83\x41\x22\x91\x08\xa6\x69\xca\x93\ +\x4f\x3e\xf9\x9b\xaa\xaa\xde\xf1\xca\x2b\xaf\x54\xfd\x39\x00\x91\ +\x1e\x10\xde\x4e\x51\x14\x05\xdb\xb6\x99\x34\x69\x12\x37\xdd\x74\ +\x13\xdf\xf9\xce\x77\xa8\xad\xad\x65\xfa\xf4\xe9\x74\x75\x75\x91\ +\xcd\x66\x7d\x63\xed\x38\x0e\x96\x10\xa8\xdb\x5c\x8a\xf9\xa9\xdc\ +\xf4\xab\x0f\x50\x1b\x38\x95\x9b\xd6\xdd\x88\xae\xa9\xa8\x76\x08\ +\x4d\x6b\x24\x5e\xe3\xc7\x28\xf2\xca\x2b\xaf\xdc\xe7\xfd\xff\xf5\ +\xeb\xd7\xcf\x07\xf6\x1d\xad\x94\x78\x2a\xc4\x74\x4d\xe2\xe1\x00\ +\x85\x8c\xcb\x4d\x27\xdf\x81\xab\x16\x59\xb3\xf7\x5e\x26\x37\x34\ +\x32\x9c\xef\x65\xf4\xd5\x30\x4a\x40\x4e\x50\xc9\xde\x86\x54\x55\ +\xd5\x07\x24\x16\x8b\x21\x84\xf0\x37\xa1\xa2\x28\xfe\x35\x02\x81\ +\x00\x96\x65\x09\x21\x04\xe1\x70\xb8\x70\xb8\xf7\xa8\x1c\xce\x87\ +\xa6\x4c\x99\x32\x69\xca\x94\x29\x2f\xb9\xae\x3b\xcd\xb3\x05\xd9\ +\x6c\x25\x08\xbd\xea\xaa\xab\x68\x6c\x6c\xe4\x57\xbf\xfa\x15\xcd\ +\xcd\xcd\x00\xac\x5d\xbb\x96\xdb\x6f\xbf\x9d\x50\x28\x84\xa6\x69\ +\xbe\x71\x37\x0c\x83\x72\xa9\x84\xd0\x04\xa1\x58\x90\xda\xda\x5a\ +\xba\xd5\x21\x16\x7c\xbc\xcc\xac\x8f\x16\x69\xb9\x75\x94\xc9\xd7\ +\x24\x89\x9f\x6e\x10\x69\x16\x04\x83\x01\x11\x0c\x06\x09\x06\x83\ +\xd4\xd7\xd7\xe3\x38\xce\x31\xe9\x30\xc3\x30\xbc\x00\x0e\x45\x28\ +\x9c\x14\x7e\x3f\xa1\x6a\x9b\xe7\xdf\x78\x9d\x45\xda\xf5\xac\x3e\ +\xe3\x6e\x6a\x42\xf5\x94\xcb\xe5\xca\xbd\x96\xcb\x98\xa6\x49\x36\ +\x9b\xf5\x37\x56\x20\x10\xf0\xa5\xe1\xb2\xcb\x2e\x23\x12\x89\x50\ +\x5f\x5f\xcf\xdc\xb9\x73\x7d\x60\x34\x4d\xf3\xb5\x87\xe7\x7d\x1d\ +\x57\x40\x92\xc9\x64\xed\x05\x17\x5c\x70\x6e\x28\x14\x8a\x58\x96\ +\xe5\x5f\xb8\x5c\x2e\xf3\xe1\x0f\x7f\x18\xc3\x30\xb8\xff\xfe\xfb\ +\x59\xbe\x7c\xb9\xaf\x3b\xbd\x1b\x5f\xb0\x60\x01\xb7\xdd\x76\xdb\ +\x04\xe3\xee\xc5\x2d\xa6\x61\xe2\x04\x4c\x34\x4d\x25\x9b\x74\xb8\ +\x6a\xe1\xc7\xa8\x9b\x1a\x23\xb2\x38\x4b\xed\x15\xc3\xe8\x0b\x52\ +\x18\xa5\x31\x6f\xc8\x34\x8f\xd8\x40\x36\x34\x34\x5c\x1e\x8d\x46\ +\x6f\x8a\xc5\x62\x37\x4a\x29\x97\x0c\x0d\x0d\x31\x38\x38\x48\x62\ +\x68\x84\x81\x37\xb3\xf4\xed\x18\xe0\xb9\x35\x6b\xd9\xf1\xfa\x0e\ +\xf6\x6d\xda\xc3\xfd\x0f\x7c\x97\x9d\x2f\x76\x91\x2f\x64\x7d\xe0\ +\x3c\x0f\xca\xf3\xa2\xce\x3e\xfb\x6c\xaa\xab\xab\x91\x52\x92\x48\ +\x24\x7c\xa3\x9e\x48\x24\x18\x93\x06\x5f\x75\x65\xb3\x59\x5f\x5d\ +\x1f\x57\xa3\xee\xf9\xdf\xde\xc5\x15\x45\xe1\xfc\xf3\xcf\xa7\xb5\ +\xb5\x95\xc7\x1f\x7f\x9c\xba\xba\x3a\x9e\x7a\xea\x29\x9e\x79\xe6\ +\x19\x42\xa1\x10\x57\x5d\x75\x15\xa7\x9f\x7e\x3a\xa9\x54\x8a\xfb\ +\xef\xbf\x9f\xbe\xbe\x3e\x0c\xc3\x20\x99\x4c\xfa\xd1\xb8\x69\x9a\ +\x20\x41\x6a\x92\x72\xc9\xe1\xae\xf7\x3e\xc5\xa3\xad\xdf\xe0\xa6\ +\xf9\x5f\x65\xed\x8e\x17\x50\x1b\xfa\x78\xcd\xde\x56\xb1\x23\x4a\ +\x65\x67\x1e\xe9\x9a\x3c\x79\xf2\xb7\x97\x2d\x5b\x36\xcb\xb2\x2c\ +\x54\xa1\x50\xac\x4e\xcb\x58\xb5\x26\xdc\xac\x8e\x9d\xd4\xe9\xdb\ +\x36\x0c\x02\xea\xb5\x69\x8c\xa6\x73\x24\x64\x96\xa6\xc0\x0a\xf6\ +\x8f\xbe\x44\x53\xa0\xc9\x7f\x91\x9e\x4d\xb4\x2c\x8b\x48\x24\xe2\ +\x7b\x91\x1b\x37\x6e\x24\x16\x8b\x91\x48\x24\xa8\xae\xae\x46\x08\ +\xc1\xb4\x69\xd3\x18\x1e\x1e\x26\x9f\xcf\xfb\x31\xdb\x91\x48\xb6\ +\x72\xb8\x80\x78\x60\x14\x8b\x45\xa6\x4d\x9b\xc6\xbf\xfc\xcb\xbf\ +\xa0\x69\x1a\xcf\x3d\xf7\x1c\x7d\x7d\x7d\xc4\x62\x31\x82\xc1\xa0\ +\xef\xee\x6e\xdb\xb6\x0d\x4d\xd3\x26\xf8\xff\x9e\xcd\x39\x24\x21\ +\x95\x28\x3f\xa0\x46\x98\xd6\x38\x85\x84\xd8\x85\xb4\x42\x48\x09\ +\x8e\xb4\x70\x1d\x07\xc3\x34\x7c\xd1\xb7\xde\xe2\x07\x37\x35\x35\ +\xbd\xd3\x7d\x3b\xe5\x72\x99\x72\xb9\xcc\xee\x6c\x17\x91\x73\x07\ +\x45\xe8\xac\x7e\x42\x97\x75\x50\xf5\xe1\x7d\xd4\x7c\xf0\x00\xa1\ +\x73\xfb\x11\x33\x93\x95\xeb\x58\x26\x96\x7b\x28\x9e\xf0\x24\xbd\ +\xbe\xbe\x1e\x4d\xd3\xd0\x75\x9d\x97\x5e\x7a\xc9\xb7\x29\xba\xae\ +\xfb\x52\x14\x0e\x87\x31\x0c\xc3\x07\xcf\xb3\x35\x63\x80\x34\xad\ +\x5c\xb9\x52\xd6\xd7\xd7\xcf\x3f\x6e\x46\xdd\x8b\x3b\x4c\xd3\xa4\ +\x54\x2a\x31\x30\x30\x40\x24\x12\x61\x68\x68\x08\xc7\x71\xe8\xef\ +\xef\xf7\xe9\xe8\xd1\xd1\xd1\x0a\x97\x35\x65\x0a\x9f\xfd\xec\x67\ +\x71\x1c\x87\x60\x30\x88\xaa\x1e\x72\x1f\xbd\x77\xeb\xb4\x97\xd8\ +\xf0\xef\x2a\xa7\xfe\xdb\xa9\x00\x3c\xcf\x87\xde\xf6\xfa\xd9\x6c\ +\x96\xf9\xf3\xe7\x77\x79\xee\xf0\xd0\xd0\xd0\xbf\x0d\x0c\x0c\xdc\ +\xf1\x4e\x5e\xa1\x07\xa6\x29\x2d\x14\x14\xc8\x4c\xe6\x8e\xcb\xbf\ +\x47\x7b\x7a\x33\xdf\x7b\xf9\xdf\x58\xbc\x64\x0e\xdd\x75\x9d\x64\ +\x77\x69\xbe\x34\x18\x86\x41\x2a\x95\xf2\x8d\xf3\xf5\xd7\x5f\xcf\ +\x9a\x35\x6b\xc8\x64\x32\xd4\xd5\x55\x9c\xbe\xd1\xd1\x51\xff\x1a\ +\xf5\xf5\xf5\x98\xa6\x49\x38\x1c\x66\x68\x68\x08\x55\x55\x89\xc7\ +\xe3\xe8\xba\x4e\x2e\x97\x03\x60\xee\xdc\xb9\xec\xda\xb5\xcb\x39\ +\x2e\x80\x58\x96\x55\xf0\x5e\xa0\xa2\x28\x14\x8b\x45\x3e\xf3\x99\ +\xcf\x50\x5d\x5d\xed\xe7\x3e\xc6\x7b\x22\xde\x9f\x93\xc9\x24\x81\ +\x40\xc0\x07\xe4\x87\x3f\xfc\x21\x86\x61\xf0\xf1\x8f\x7f\xdc\xe7\ +\xbb\x54\x54\x96\x2c\x59\x52\x51\x89\xd2\x21\x39\xf7\x00\x73\x16\ +\x46\x70\x72\x2a\xd6\x70\x08\x7b\x28\x88\x35\x18\x44\x48\x05\xa1\ +\xbb\xfe\x35\x86\x86\x86\x0e\xdb\x90\xdb\x96\x8d\xab\x3a\x08\x45\ +\x70\xdd\x82\x4f\xb3\xbe\xf7\x49\x9c\x91\x69\x5c\x37\xf7\x4b\x9c\ +\x7f\xea\x99\xdc\xfe\xe8\xe5\xbe\x6b\xab\xaa\xaa\x1f\x03\x79\x6c\ +\xc3\x96\x2d\x5b\x2a\xe4\xe3\x98\x73\x32\x69\xd2\x24\xa4\x94\x08\ +\x21\x28\x95\x4a\xfe\xc6\x54\x55\x95\x50\x28\x44\xb1\x58\x24\x12\ +\x89\xf8\xa1\x80\x65\x59\xfe\xf7\x1f\x33\x20\xb5\xb5\xb5\xb7\x2c\ +\x5d\xba\xf4\x2e\x8f\x2e\x39\xe1\x84\x13\x48\xa5\x52\x04\x02\x01\ +\xd2\xe9\xb4\xaf\x82\xa4\x94\x28\x8a\xe2\xb3\x9f\xde\xee\x1a\xa3\ +\x16\x5c\x65\x2c\x9a\x9a\x36\x6d\x1a\x8e\xe3\x50\x28\x14\x10\x08\ +\x6c\x69\x51\x2c\x16\x29\x97\xcb\xf4\x59\x49\x5a\xa6\x3b\xc8\x48\ +\x89\xc6\x49\xd3\x49\x4d\xed\x43\x0a\x07\xd3\x35\x51\x4a\x61\x86\ +\x1e\x99\x5c\x49\x74\x1d\x01\x45\x62\x59\x16\xb6\x65\x21\x15\x89\ +\xa2\x09\x1a\xaa\x9b\x39\x58\xfa\x3d\xc9\x24\x64\xdd\x7e\xea\x4e\ +\x30\x08\x07\x23\x5e\xcc\x33\x41\xe5\x78\x2a\xb6\xa7\xa7\x87\x50\ +\x28\x84\xeb\xba\xac\x5e\xbd\x9a\xad\x5b\xb7\xd2\xd9\xd9\xe9\x7b\ +\x52\xaa\x5a\x61\x80\x6b\x6a\x6a\xc8\x66\xb3\xa8\xaa\x4a\x2c\x16\ +\xf3\xd5\x9e\x17\xbb\x1d\x8e\x53\xf2\x8e\x80\x98\xa6\x39\xb5\xa9\ +\xa9\xa9\xa6\xa7\xa7\x07\xd3\x34\xb9\xe7\x9e\x7b\xd8\xb3\x67\x0f\ +\x37\xde\x78\x23\x3f\xf8\xc1\x0f\x48\x24\x12\xd4\xd6\xd6\x12\x0c\ +\x06\x79\xe9\xa5\x97\x58\xb8\x70\x21\xbb\x76\xed\xa2\xa7\xa7\x87\ +\xb9\x73\xe7\xb2\x6d\xdb\x36\xf6\xef\xdf\x7f\xfb\x82\x05\x0b\xbe\ +\xf3\xec\xb3\xcf\x72\xd1\x45\x17\x51\x2e\x97\x7d\x95\x25\x74\xc5\ +\xf7\xbe\x5c\xc7\x45\x55\x04\xa1\xec\x7c\x3e\x71\xd1\x9d\x68\x32\ +\xca\x17\x9e\xf8\x08\x1f\x3e\xfb\x46\x7e\xb6\xfd\x6e\x2c\xcb\xac\ +\xe4\x52\xfe\xc8\x83\x0d\x0c\x0c\x30\x6b\xd6\xac\x3b\xa3\xd1\xe8\ +\x54\x00\xe9\xca\x29\xc9\xd1\x14\xd2\x75\x41\xb7\xe9\xfc\xa5\xc2\ +\x77\x5f\xf8\x16\x69\xf7\x20\x46\x36\x88\x4d\x89\xee\x75\x9d\x74\ +\x0d\xe6\x30\xcd\xb0\x0f\x48\x38\x1c\x66\xc6\x8c\x19\x0c\x0e\x0e\ +\x62\x9a\x66\xaa\x54\x2a\xf5\x38\x8e\xb3\x44\x51\x14\x71\xd7\x5d\ +\x77\x49\xd7\x75\x85\xb7\x01\x3d\x1b\x0b\xf8\x86\x1c\x20\x95\x4a\ +\x11\x8b\xc5\xfc\x4d\x7a\xb8\x34\x8a\x76\x38\x06\xdd\x34\x4d\x0a\ +\x85\x02\xaa\xaa\xf2\xa3\x1f\xfd\x88\x6f\x7f\xfb\xdb\xfc\xf4\xa7\ +\x3f\x65\xfd\xfa\xf5\xa8\xaa\x8a\xae\xeb\x68\x9a\x46\x2a\x95\x62\ +\xef\xde\xbd\xe4\xf3\x79\xca\xe5\x32\x89\x44\xc2\x53\x5f\x21\x55\ +\x55\xd9\xb0\x61\x03\xaf\xbf\xfe\xba\xef\xab\x8f\xbd\x34\xdf\xdf\ +\xb7\xb1\x71\x71\x59\xd6\x70\x19\x8f\x6c\xfb\x2a\xb3\xb4\xf3\xb9\ +\xf6\xa4\xd5\xb4\xd4\x4c\x41\xa0\x54\xd4\x9c\x22\xde\xc9\xb3\xfa\ +\xfb\xe9\xd3\xa7\xd7\x0b\x21\x28\x38\x65\x58\x38\x4c\x7d\x3c\x8c\ +\xd3\x1f\xc1\xea\x0b\x93\x19\x4d\x22\x88\x11\xaa\x98\x65\x8a\x43\ +\x92\x46\x71\x22\x1d\x66\x87\xcf\x38\x54\x57\x57\x13\x8f\xc7\x49\ +\xa5\x52\x98\xa6\xf9\xec\x9e\x3d\x7b\x6e\x8a\xc7\xe3\xd7\x5a\x96\ +\x35\xcb\xb2\xac\xaf\x5d\x70\xc1\x05\xac\x58\xb1\x82\x47\x1f\x7d\ +\xd4\xb7\xab\x5e\x10\xe9\x51\x4a\x8a\xa2\x30\x3c\x3c\x4c\x34\x1a\ +\x3d\x22\x5e\xeb\xb0\x00\xf1\xbe\xcc\x73\xf5\x4e\x3b\xed\x34\x5f\ +\x2d\x8d\xb7\x1f\x42\x08\x7a\x7b\x7b\xfd\x3f\x1f\x38\x70\xc0\xf3\ +\xbc\xd2\xfb\xf7\xef\xff\xab\xb1\xe8\x95\x50\x28\xf4\xf8\x89\x27\ +\x9e\xa8\x7e\xf1\x8b\x5f\xe4\x73\x9f\xfb\x1c\xa6\x69\x56\xf2\x29\ +\xaa\x8d\x10\x10\xd0\x22\x38\xae\x8d\x61\x9a\x64\x64\x8a\xae\x4c\ +\xe2\x10\x85\x21\xf0\x77\xe6\xdb\x2d\x8f\x85\x05\x78\x23\xbf\x9f\ +\xeb\x4f\xaf\xc1\xb2\x73\x94\x5a\x06\xa9\xd6\xc2\x08\x47\x45\x1a\ +\x2a\xc5\x3d\x51\xf2\xdb\x62\x20\x2a\x3b\x3d\x95\x4a\xf9\xd7\x28\ +\x95\x4a\xa4\x52\xa9\x09\xcf\x98\x4e\xa7\x7f\x01\x9c\xb8\x6a\xd5\ +\xaa\xaf\xdd\x79\xe7\x9d\xe8\xba\x8e\x61\x18\x74\x75\x75\xb1\x74\ +\xe9\x52\x7e\xf9\xcb\x5f\xf2\xbe\xf7\xbd\x8f\x2d\x5b\xb6\xb0\x67\ +\xcf\x1e\x2e\xbd\xf4\x52\x86\x86\x86\x58\xbb\x76\xad\xbf\xa9\x17\ +\x2c\x58\xf0\x66\x6b\x6b\xeb\xaa\x6c\x36\xbb\xe5\x98\x25\xc4\x33\ +\x70\x93\x27\x4f\x66\x68\x68\xc8\xb7\x15\xde\x4d\xbb\xae\xeb\xff\ +\xf2\x78\xac\xb1\x07\x7c\x42\xd7\xf5\xbd\xc3\xc3\xc3\xaf\x7a\xdf\ +\xd9\xd2\xd2\x22\x9f\x7b\xee\x39\x5e\x7c\xf1\x45\x96\x2f\x5f\xce\ +\x86\x0d\x1b\x2a\xbb\x2c\xe4\x32\xb4\xce\xe2\xf9\xf8\xd3\xc8\xc8\ +\x28\xfd\xca\x1b\x18\x56\x89\xaa\x1a\x9d\x83\x43\x06\x85\xa2\xed\ +\xdf\x53\x2c\x16\x3b\x77\xf1\xe2\xc5\x5f\x02\x84\x61\x18\x76\x5b\ +\x5b\xdb\x57\x3c\xbe\xc9\xf7\x8e\x85\x44\x22\x59\x20\xae\x67\xc5\ +\x7b\x4e\x21\x6d\xf6\xb3\x61\xdf\x6b\x64\x42\xfb\x29\x06\x6c\x2c\ +\xcb\x44\x22\xd1\x34\xcd\x27\x32\x5d\xd7\x95\xaa\xaa\x0a\xc7\x71\ +\x88\xc7\xe3\x24\x12\x89\xf1\xe8\x2b\x43\x43\x43\xec\xde\xbd\x9b\ +\xe6\xe6\x66\x3c\x97\x7a\xe3\xc6\x8d\x00\xbc\xf6\xda\x6b\x94\xcb\ +\x65\x74\x5d\xe7\xb5\xd7\x5e\xa3\xa1\xa1\xc1\xbf\x5f\xc3\x30\xa8\ +\xa9\xa9\x89\x59\x96\xa5\x1f\xab\x97\x25\x6d\xdb\x46\x55\x55\x1e\ +\x7e\xf8\x61\xa6\x4e\x9d\xca\x23\x8f\x3c\xc2\xce\x9d\x3b\x09\x85\ +\x42\x24\x93\x49\xa2\xd1\x28\x83\x83\x83\x04\x02\x01\x62\xb1\x18\ +\x23\x23\x23\x64\x32\x19\xd2\xe9\x34\x6d\x6d\x6d\x57\xbf\xdd\x2e\ +\x7e\xf6\xd9\x67\xa9\xad\xad\x25\x97\xcb\xf9\x34\x45\xa9\x54\xa4\ +\x2e\xb9\x08\x07\x0b\x91\xa9\xa1\xcf\x19\x22\x34\xbd\x8c\x99\x0d\ +\xd0\xc8\x3c\x26\xaf\xa8\xe4\xb5\xa5\x25\x40\x61\x95\x10\xac\x1a\ +\x8b\x69\x4a\x1e\x20\xe3\x25\x44\x00\x03\xfd\x79\xfe\xf3\x6f\x3e\ +\xce\xc7\x7f\x7d\x36\x5f\x3e\xe7\x69\x6a\xec\x79\xa8\x35\x29\xbe\ +\xb5\xe9\xab\x18\x86\x09\xa2\xc2\x59\x79\x2a\x54\xd3\x34\x31\x38\ +\x38\xd8\x39\x38\x38\xb8\x4d\x08\xe1\x06\x02\x81\xb5\x6f\xdd\xa0\ +\xab\x57\xaf\xc6\xb6\x6d\x42\xa1\xd0\x04\x35\x74\xf0\xe0\xc1\x09\ +\x3f\x1f\x38\x70\xc0\xb7\x21\x85\x42\xe1\x0f\x3e\x7f\x54\x80\x28\ +\x8a\x32\xc7\xb2\x2c\x54\x55\xa5\x54\x2a\x51\x2c\x16\x99\x3b\x77\ +\x2e\x6f\xbe\xf9\x26\x4b\x96\x2c\x61\x78\x78\x98\xda\xda\x5a\xb2\ +\xd9\x2c\xe5\x72\x99\x48\x24\xc2\x39\xe7\x9c\xc3\x33\xcf\x3c\xf3\ +\x47\x2f\xae\x69\x1a\x5f\xfa\xd2\x97\x7c\x43\xe8\xc5\x0b\x05\xa5\ +\x4c\xa9\x54\x42\xa4\x05\x42\x08\x76\xe8\xfb\x78\xef\x19\x35\xd8\ +\xd6\x78\xcf\x4a\xe2\x18\x0a\x99\x17\xea\x30\x87\x03\x80\xfc\x03\ +\xb0\x7d\x9a\x45\x07\xc7\x86\x80\xae\xa3\x29\x01\x10\x90\xc8\x0f\ +\xf2\x46\xff\x03\x48\x57\x8e\xa9\xc0\x8a\x94\x37\x34\x34\xf8\x36\ +\x40\x51\x94\x5f\x67\x32\x99\xd5\x6f\x17\x8e\x79\xae\xbc\xb7\xeb\ +\x0f\x33\xed\xed\x7f\xff\xb1\x02\x32\xbd\xb6\xb6\xf6\x46\xc3\x30\ +\xa4\xa6\x69\xe2\xee\xbb\xef\xa6\xb1\xb1\x91\xbd\x7b\xf7\xe2\xba\ +\x2e\x83\x83\x83\x18\x86\x41\x38\x1c\xa6\x50\x28\x20\xa5\x64\x74\ +\x74\x94\x5d\xbb\x76\xfd\x49\xee\xa9\x58\x2c\xe6\xa5\x94\xde\xb5\ +\x83\xe1\x70\x58\x77\x1c\x07\xdd\x52\x71\xdc\x43\x2a\x47\x09\x09\ +\x2c\xc7\x66\x45\xf4\x16\x16\xcf\x5c\xc0\x96\xe4\xe3\xe4\x92\x1a\ +\xbb\xdd\xe7\x70\xb4\x18\x96\x09\x12\x39\xc1\xa6\xb8\xae\x2b\x7d\ +\x03\x1a\x12\xc4\x27\x85\x28\x18\x65\x02\x21\x95\x9a\xaa\x5a\x4c\ +\xa5\x88\x16\xd2\x40\xa9\x00\x22\x91\xbe\xfa\x6d\x6e\x6e\x66\x68\ +\x68\x88\xb7\x2b\x4d\x02\x08\x04\x02\xed\x1d\x1d\x1d\x8d\xf3\xe7\ +\xcf\x1f\x9a\x32\x65\x0a\x37\xdc\x70\x03\x8f\x3d\xf6\x98\x6f\x7b\ +\xbc\x80\xd7\xdb\x60\x1e\xc3\xa1\xeb\xba\xcf\x8a\x1f\x2b\x20\x11\ +\x21\x04\xb9\x5c\x4e\xd4\xd7\xd7\x33\x3c\x3c\xcc\xe0\xc0\x10\x20\ +\x10\x02\x1f\xf1\x72\xb9\xec\x07\x54\xde\x36\x8e\xc5\x62\xa2\x54\ +\x2a\xbd\x6d\xf4\x2c\x84\xf0\x2b\xe9\x66\xce\x9c\xf9\xa0\xaa\xaa\ +\x1f\xbe\xfc\xf2\xcb\xfd\x00\xec\x90\x2b\x29\x49\x0d\x0a\xfe\xee\ +\xe6\x9b\xb9\xe9\x67\x4b\xf9\x97\xb3\x1f\xa3\x18\x2f\x30\xd3\x6c\ +\xe6\x27\xbf\x79\x02\xc3\x90\x9e\x0d\x08\x5d\x74\xd1\x45\x23\x80\ +\x14\x8e\xa8\xb3\x2c\x89\xa2\xc0\x22\x3b\xc2\xf0\xc3\x0a\xd7\x3f\ +\x74\x2d\x52\x09\x71\xfd\x7f\x5d\x83\x65\x5b\x04\xb5\x08\xdb\x5b\ +\x7b\xa9\x8a\xc4\x7d\x4a\xdd\x23\x3f\xff\x18\x18\xe3\xf2\x22\x32\ +\x16\x8b\xf1\xe2\x8b\x2f\xb2\x71\xe3\x46\x5a\x5a\x5a\xd8\xba\x75\ +\x2b\xe1\x70\x98\xf5\xeb\xd7\xfb\x36\x31\x12\x89\xd0\xd2\xd2\xc2\ +\xae\x5d\xbb\x18\x1d\x1d\xf5\x93\x74\xc7\xac\xb2\xa4\x94\xe8\xba\ +\xce\xbe\x7d\xfb\x90\xae\xa4\x66\xb1\x4e\x24\xac\x92\xeb\xb7\x29\ +\x0e\x39\x48\xf7\x6d\xd5\x9c\x28\x97\xcb\x9d\x8a\xa2\x7c\xf3\xed\ +\x9c\x84\xb7\xb0\x00\xfa\x07\x3e\xf0\x01\xe6\xcc\x99\xc3\x07\x3f\ +\xf8\x41\x6e\xbd\xf5\x56\x3f\xcf\x20\x10\x54\x05\xe3\xd8\xb2\x44\ +\xbc\xaa\x8a\xe6\xda\xa9\x3c\xbf\xe3\xd7\x3c\xd1\x77\x1f\xb6\xd5\ +\x88\x69\xb9\x50\xd9\xe1\xa2\xa6\xa6\x66\x92\x40\xd0\x35\x6d\x0f\ +\xa7\x5d\x14\xc6\x18\xac\xd4\x55\xd9\x83\x01\x9c\xac\x06\x96\x8e\ +\x5b\x52\x50\x75\x0d\x4d\x53\x29\xe5\x4d\x6c\x23\xe5\x25\xdd\x64\ +\x34\x1a\x15\x23\x23\x23\x84\x42\xa1\x77\xe4\xf8\x1c\xc7\xe1\x95\ +\x57\x5e\x21\x1e\x8f\xe3\xba\x2e\xfd\xfd\xfd\x7e\xa2\xca\x4b\xc8\ +\x79\xec\x6f\x5d\x5d\x1d\x03\x03\x03\x68\x9a\xe6\x05\x91\xb1\xe3\ +\x02\xc8\xec\xd9\xb3\x2b\x14\x40\xb2\x22\x9a\x51\x29\x89\xd4\xcb\ +\x09\xa5\x3b\x9e\x97\x35\xb6\xe3\x7a\x06\x06\x06\xfe\xeb\x70\xe9\ +\x8d\xb9\x73\xe7\xfa\x51\xed\x21\x75\x27\xb0\x5d\x13\x45\x68\x80\ +\xa0\x64\x15\xd1\x54\x8d\xa0\x16\xc5\x71\x5c\x4c\xd3\xf2\x83\x39\ +\xcb\xb2\x28\x38\x65\x6a\xa7\x29\x48\x5b\x25\x5a\x1f\x46\x99\x62\ +\x61\xcc\x4f\xf8\x9b\x60\xe0\xa1\x49\x48\x5b\xf1\x3d\x41\x8f\x5b\ +\x53\x55\x55\x74\x75\x75\x3d\xe0\xed\x11\x5d\xd7\x7f\xfd\xa7\xee\ +\xd7\x75\x5d\x3e\xf9\xc9\x4f\xfa\xdf\x33\x7e\xed\xdb\x77\x28\x7f\ +\xd6\xdf\xdf\xef\x7b\xa1\xf1\x78\x1c\xc7\x71\xa8\xaa\xaa\xfa\x72\ +\x3a\x9d\x7e\xe1\x98\x00\x59\xb1\x62\x05\x97\x5d\x76\x19\x67\x9f\ +\x7d\x36\xdf\xfb\xde\xf7\x68\x6d\x6d\xe5\xe4\x93\x4f\xe6\xf5\xd7\ +\x5f\x67\xee\xdc\xb9\x64\x32\x19\x5a\x5b\x5b\x09\x87\xc3\xcc\x9c\ +\x39\x93\x37\xde\x78\xe3\xb0\x29\xf2\x40\x20\xc0\x0b\x2f\xbc\xc0\ +\xde\xbd\x7b\xe9\xed\xed\xf5\x19\x54\x21\x04\x85\xd6\x1c\x43\x46\ +\x23\xff\xeb\xa5\x5b\x18\xcc\xea\x7c\xea\xb1\x4f\x60\x18\x36\x79\ +\x27\x8e\x5d\x14\x44\x22\x87\xa4\xae\xa2\x1e\x25\xca\xeb\x93\x39\ +\xf8\x86\xe0\xc1\x07\x7e\xc4\xfe\x9e\x2e\x7e\xbb\xf7\xa7\xfc\xed\ +\xaa\x8f\x72\xf7\xba\x5b\x31\x4d\x0b\x69\x1f\x02\x42\xd7\x75\x9f\ +\x4a\x1f\x19\x19\xf9\xc8\xe1\xde\x73\x3e\x9f\x27\x12\x89\x1c\x02\ +\xc3\x01\xcb\x74\xc7\xee\x05\x84\x2a\x50\xd4\x31\x6d\x30\xf6\x91\ +\xd1\xd1\x51\x5f\x3d\x1e\x8b\x84\xb8\xde\x2e\x88\xc7\xe3\x84\xc3\ +\x61\x9f\x74\x0b\x04\x02\x2c\x5d\xba\x94\xee\xee\x6e\xaa\xab\xab\ +\x7d\xa3\xa5\xeb\xfa\x3b\x5e\xf4\x2d\x2a\x2b\xa0\x28\x0a\x07\x0f\ +\x1e\xf4\x8a\x06\x64\xb9\x5c\x16\x00\xe5\x62\x91\x69\x2b\x66\x92\ +\xcb\xe5\x88\x69\x75\xa4\x67\x1c\xa0\x69\x46\x80\xaa\xb4\x8e\x93\ +\x1d\xfb\x95\xd6\x70\x73\x1a\x62\xec\x49\xc2\xe1\x30\xe9\x54\x9a\ +\xf5\x3d\xcf\xb2\xe9\xcd\x2e\x2e\x3e\xf9\x06\x1a\x63\xd3\x11\x28\ +\x95\x58\xc7\xaa\x48\xd4\xbc\x79\xf3\xfc\x6c\xe6\xe1\x12\x95\x00\ +\x35\x35\x35\x23\x1d\x1d\x1d\x4d\xa7\x9c\x72\xca\x40\x2a\x95\x42\ +\x48\x70\x67\x0b\x96\x5f\x59\x43\x7e\xc0\xa1\x38\x6c\x93\x1b\x70\ +\x28\x0e\xd9\x18\x19\x17\xcf\x24\x79\xef\xf0\x4f\xd9\xa8\x77\x04\ +\x24\x1a\x8d\x2e\x07\xd8\xb6\x6d\x1b\x89\x44\x82\xe1\xe1\x61\x8a\ +\xc5\x4a\xe9\xce\xee\xdd\xbb\xfd\xc0\xd0\x03\xcd\x75\x5d\x5e\x7e\ +\xf9\xe5\x23\x4a\x26\x25\x93\xc9\x2f\x0e\x0d\x0d\x7d\x77\xcc\x8d\ +\x9c\xbe\x60\xc1\x82\x87\x0f\x79\x23\x95\x0a\x96\x72\xb9\x4c\xca\ +\xcd\x31\x75\xae\x89\xa8\xb2\x69\x9c\xd6\x44\xd9\xcd\x51\x72\x12\ +\x28\x0a\xd8\x79\x95\xe1\x9f\x4e\xf6\x1f\x5c\x4a\x89\x57\xb2\x9e\ +\x29\x8d\x92\x35\x12\x08\x45\x4c\x00\x24\x93\xc9\x70\xf5\xd5\x57\ +\xf3\xf4\xd3\x4f\xfb\x31\xc8\xe1\xac\x4c\x26\x83\xae\xeb\x52\xd3\ +\x34\x9a\x9a\x9a\x2a\x36\xa2\x7f\x80\x8e\x07\x15\x2c\xc7\x45\x28\ +\x3a\xae\xab\xa2\x11\x40\x09\xbb\x7e\x4e\xc4\x53\xe5\xc7\x04\x88\ +\xae\xeb\x7f\xe3\x65\xf8\xfa\xfa\xfa\xfc\xa4\xcc\xf8\xdf\x8f\x75\ +\x15\x0a\x85\xbd\xc0\xde\xb1\x1f\xe7\x7b\x8c\x80\x10\x02\xa5\x50\ +\x79\x89\xa6\x61\x62\x2b\x0e\xaa\xaa\xd0\xa2\xae\xe2\xef\x56\xde\ +\x4a\x4d\xa0\x9e\x0f\x7c\xef\x7c\x6e\xbb\xea\x56\x7e\xb1\xfe\xfb\ +\x13\xe8\x73\xdb\xb1\x59\x30\xe9\x34\x92\x53\x54\x06\x72\xdd\x04\ +\xd5\xd3\x51\x50\x30\xcd\x32\xae\x55\x89\x83\x32\x99\x0c\x4f\x3f\ +\xfd\xb4\xef\x96\x1e\xe9\x52\x14\x85\x07\x1e\x78\x80\xe1\xe1\x61\ +\x84\x10\x3c\xfe\xf8\xe3\xc4\xe3\x71\x3a\x3b\x3b\x69\x6e\x6e\x66\ +\xcb\x96\x2d\xcc\x9a\x35\x0b\xc7\x71\xd8\xb7\x6f\x1f\xcd\xcd\xcd\ +\x74\x74\x74\x1c\x1b\x97\x25\xa5\x54\x63\xb1\x18\x7b\xf6\xec\x41\ +\x08\x41\xf4\x7c\x9d\x15\x17\xd5\x20\x01\x23\x27\x49\xee\x35\x18\ +\x6d\xb7\xc8\x74\x98\x98\x85\x43\xf9\x90\x9a\x9a\x9a\x11\xe0\x7d\ +\x47\x5b\xa6\xfa\xd3\x9f\xfe\x94\x42\xa1\xc0\xe7\x3f\xff\x79\xbf\ +\x30\xc1\x52\x4d\x84\x90\x9c\x3c\xe5\x6c\x7e\xd7\xfe\x00\xa9\xce\ +\x06\xae\x58\xf8\xb7\xcc\xa8\x59\x84\xed\x54\xaa\x60\x3c\x09\xe9\ +\xee\xee\xe6\x6b\xff\xfb\xbb\x95\xc4\x56\x29\xc5\xc6\x9f\xec\xe2\ +\xc0\x20\x64\x53\x79\x8f\x02\x92\x8a\xa2\x08\xaf\x8e\xea\x9d\x76\ +\xed\xdb\xd9\x55\x8f\x5d\x9e\x3f\x7f\x3e\x5d\x5d\x5d\x8c\x8c\x8c\ +\x78\xcf\xce\xc9\x27\x9f\xcc\xe6\xcd\x9b\x19\x19\x19\x61\xd1\xa2\ +\x45\xa4\x52\x29\x46\x47\x47\xd1\x34\xed\xd8\x24\xc4\x8b\xaa\x3d\ +\xef\xc9\xd9\xa9\xf1\x66\x47\x96\x7c\xbf\x83\x55\x94\x28\x9e\xf1\ +\x52\x55\x54\x55\xfa\xb9\x91\x40\x20\xe0\x0e\x0c\x0c\x1c\x55\xd3\ +\xca\xbc\x79\xf3\x68\x6e\x6e\x66\x74\x74\x94\xe6\xe6\xe6\x4a\x85\ +\xbd\x65\xe2\xe0\x00\x02\x4d\x09\x60\x4b\x0b\xdb\xb1\x18\x48\x0f\ +\xd3\x95\x0e\xa3\x09\xdd\x8f\x5f\x34\x4d\x03\xcd\xa1\xa4\xa6\x70\ +\xb2\x1a\x8a\xd4\xc9\xe6\xb2\xc4\xf4\x38\xb9\x5c\x07\x8a\xa2\xa0\ +\xeb\xba\x28\x14\x0a\x3b\x37\x6d\xda\xf4\x4f\x42\x08\x55\x51\x94\ +\x23\x2e\x91\x54\x55\x95\xaf\x7c\xe5\x2b\xcc\x9f\x3f\x9f\xcd\x9b\ +\x37\xa3\xeb\x3a\x1d\x1d\x1d\xb8\xae\xcb\xab\xaf\xbe\x8a\xa6\x69\ +\x24\x93\x49\xda\xdb\xdb\xc7\x9b\x00\xa4\x94\x35\xc7\x22\x21\x48\ +\x29\xf9\xd1\x8f\x7e\xc4\xac\x59\xb3\xb8\xf7\xde\x7b\x2b\x65\x93\ +\x73\x4a\x7e\x92\xaa\x58\x2c\x22\xa5\x64\xd2\xa4\x49\x74\x75\x75\ +\x91\xc9\x64\x8e\xb8\x3a\x64\x42\x85\x79\x5b\x1b\x2f\xbd\xf4\x12\ +\x2d\x2d\x2d\x1c\x38\x70\x80\x78\x3c\x5e\x49\xc3\x62\xa3\x6b\x21\ +\x52\xc6\x20\xd3\xa7\xcc\xa3\x7e\x5a\x1d\x9b\x7a\xba\xa9\x8d\x4c\ +\x1e\x8b\xba\x0f\xb9\xc0\x7a\x5c\x52\xf7\xfe\x01\x46\x9e\xae\xc3\ +\xe8\xad\xd0\x2b\x8e\xe3\xf8\xe5\x3b\x63\xbf\x27\x8b\xc5\xe2\xf3\ +\x47\x73\x8f\x63\x84\xab\xab\xeb\xba\xb2\x73\xe7\xce\x4a\x0b\x85\ +\x00\x55\x55\x90\x12\x62\x91\x18\x96\x6b\x55\x1c\x2c\x81\x1f\xab\ +\x8d\xd5\x78\x2d\x38\x26\x09\x99\x37\x6f\x1e\xb3\x67\xcf\xe6\x84\ +\x13\x4e\x60\xd9\xb2\x65\x6c\xdd\xba\x95\x65\xcb\x96\xf1\xe4\x93\ +\x4f\x72\xf1\xc5\x17\xb3\x7b\xf7\x6e\x36\x6c\xd8\xc0\x99\x67\x9e\ +\x49\x73\x73\x33\xcf\x3e\xfb\xec\x9f\xa4\xc7\xdf\x69\x45\x22\x11\ +\xbe\xf5\xad\x6f\x21\x84\x60\x68\x68\xa8\x52\x01\x68\x98\xd8\xaa\ +\xcb\x86\xff\x1e\x64\x93\xf9\x55\xe6\x35\x2e\xc1\x95\x2e\x3b\xfa\ +\x36\xd1\xfa\x68\x1b\x1d\x23\xbd\x14\x86\x0e\xbd\x2c\x4d\x53\x59\ +\xf7\xb5\x61\x8c\xd1\x51\x9c\x92\x64\xc6\x8c\x19\xe8\xba\xce\xd1\ +\xaa\xa8\xb7\xf1\x0c\x87\x76\xee\xdc\x79\xf1\xac\x59\xb3\x5e\x28\ +\x95\x4a\xb8\x2a\x4c\xbd\x21\xca\xc9\xcb\x63\xd8\x8e\x43\x53\x78\ +\x1e\xc3\x46\x3b\x8e\xe1\x72\xf0\xd5\x12\xfb\x9e\xc8\xa3\xa8\x15\ +\xa7\x27\xe2\xf9\xea\x47\x0b\x48\x67\x67\x27\xbf\xfc\xe5\x2f\x39\ +\xe5\x94\x53\x78\xe5\x95\x57\xc8\xe5\x72\xf4\xf4\xf4\x60\x18\x06\ +\x4f\x3e\xf9\xa4\x5f\x99\xf1\x9b\xdf\xfc\x86\x40\x20\xe0\xa7\x3e\ +\x8f\x72\x8d\x0e\x0d\x0d\x7d\x43\xd7\x75\x6b\xec\xc1\x3f\x98\x4a\ +\xa5\x66\xe4\xf3\x79\x2c\x53\x32\x2b\x3c\x83\x19\x33\xa6\x57\xa4\ +\x54\x1a\x2c\xbb\x7e\x16\x55\x91\x32\x0d\xc3\x27\x63\x0d\x06\x71\ +\x46\x2b\x69\x27\xa1\x48\x50\x24\x4c\x83\x5c\x2e\xc7\xc8\xc8\x08\ +\xd1\x68\x94\x78\x3c\xce\x69\xa7\x9d\xc6\xcb\x2f\xbf\x7c\x5c\x1c\ +\x12\x3f\xcd\x2b\xa1\xd4\x6a\xb3\x63\x7f\x8e\x7c\xaf\x83\x6d\x6c\ +\xc4\x2e\x4a\xec\x72\xa5\x3f\x51\x0f\x68\xbe\x23\x70\xac\xd4\x49\ +\x34\x1a\x8d\xf2\xf4\xd3\x4f\xf3\xc4\xe3\x4f\x1c\xf2\x46\x84\xc7\ +\x49\x29\x7e\x4f\x8b\x50\x2a\x89\xac\xea\xea\x6a\x69\xdb\xf6\xd1\ +\xea\xac\x91\xde\xde\xde\xff\xed\xfd\x50\x5f\x5f\xbf\x5c\x51\x94\ +\x19\xaa\xa2\x80\x03\xae\xe3\x92\xcf\xe7\x11\xc0\x66\xab\x8d\x4b\ +\x5a\xa2\xb8\x4a\x8e\xe0\xd4\x22\x8a\x2c\xa1\x6a\x0a\x76\x5a\xa7\ +\xbc\x2f\x46\x7e\x5b\xd4\x67\x01\xbc\xea\xc1\x7c\x3e\x5f\xc9\xe5\ +\x8b\xe3\xd3\x31\x67\x59\x16\xb7\xdc\x72\x0b\x00\x2f\xae\x7d\x11\ +\x51\x56\xd0\xb4\x02\x42\x17\x18\xba\x81\xac\x96\x7e\x6c\x94\x48\ +\x24\x0e\x2b\x6b\xa8\xbd\x83\x41\xaf\xf7\x92\xf9\xae\x0a\x93\xe6\ +\x05\xd0\x75\x81\xb4\x75\xe6\x4e\x5e\x48\x47\x6a\x07\x28\x50\x4e\ +\x39\xa4\xbb\x7c\x1d\x2e\x6c\xdb\xee\xe0\xf8\x2c\x25\x10\x08\x30\ +\x7d\xe1\xc2\x4a\x46\xcf\x1a\xa3\xd6\xbd\x88\x58\x11\xac\xac\xbe\ +\x85\xf7\x9d\x7e\x2d\x3b\x86\x5f\xe6\x85\x2d\x2f\xa1\x35\x0f\xd3\ +\xd6\x37\xe0\x13\x85\x5e\xc2\xca\x8b\x05\xd6\xaf\x5f\xef\xf1\x55\ +\xc7\xbc\xce\x3e\xfb\x6c\x2e\xb8\xe0\x02\xe6\xcc\x99\x43\xa1\x50\ +\xa0\xb7\xb7\x97\x8b\x2f\xbe\x98\xc7\x1f\x7f\x9c\xf3\xce\x3b\x8f\ +\x62\xb1\xc8\xab\xaf\xbe\xca\xfc\xf9\xf3\x89\xc5\x62\x3c\xf5\xd4\ +\x53\x7e\x09\xee\x51\x01\xa2\x28\x8a\xa8\xaf\xaf\xa7\x90\x2f\x60\ +\x45\x24\x4b\x3f\x52\x47\x75\x8d\x86\x74\x25\xc9\xb6\x7e\xea\xf6\ +\x55\x31\xbc\xdd\xc0\x1a\x75\x88\xc5\x82\xbe\x27\x31\x34\x34\xf4\ +\xe6\xf1\x78\x60\xd7\x75\xb9\xfd\xf6\xdb\xa9\xae\xae\xe6\x8a\x2b\ +\xae\xe0\xa2\x8b\x2e\xaa\xe4\x20\x24\x10\x82\x4c\xba\xc4\x65\x67\ +\x5c\xcf\x2d\xbf\x3c\x93\x9f\xff\xcd\x2e\x4e\x08\x2d\x25\xe1\xec\ +\x67\xf7\xfa\x3b\x30\x0c\xcd\x0f\x5a\xcb\xe5\x32\xd1\x68\x94\x60\ +\x30\x78\x58\xae\xe7\xe1\xae\x6d\xdb\xb6\x31\x75\xea\x54\x06\x06\ +\x06\x50\x55\x95\xda\xda\x5a\x76\xec\xd8\x81\x10\x82\x8e\x8e\x0e\ +\xbf\x16\x78\xe7\xce\x9d\xac\x5c\xb9\xf2\xd8\xe9\x77\x8f\x7b\x29\ +\x95\x4b\xe8\x8e\xce\x9b\x77\xa7\x91\x16\x58\xc5\x43\x39\x74\xa1\ +\x4c\xd4\x8d\x47\x42\x9b\x1c\xce\x32\x4d\x93\xfa\xfa\x7a\xbf\xe2\ +\xdc\xb2\xac\x4a\x27\x6f\x08\x0c\xc3\x25\x14\x0c\xe0\x52\xa9\x3f\ +\xeb\x1e\x3a\xc8\xc6\xfc\x63\x28\xa8\x13\x92\x47\x1e\xf7\xd4\xd6\ +\xd6\x36\xb7\x58\x2c\x8e\x00\xb2\xa1\xa1\xc1\x38\x1e\x36\xe4\xea\ +\xab\xaf\x46\xd3\xb4\x3f\x48\x56\xb5\xb7\xb7\xfb\xc4\xa2\x94\x92\ +\x5f\xfc\xe2\x17\x95\xf7\x75\xac\xf4\xfb\x25\x97\x5c\xc2\x87\x3e\ +\xf4\x21\x5c\xd7\xe5\xc9\x27\x9f\xa4\xab\xab\x8b\x68\x34\xca\xc1\ +\x83\x07\x89\xc5\x62\x54\x55\x55\x71\xe0\xc0\x01\x72\xb9\x1c\x8d\ +\x8d\x8d\xf4\xf4\xf4\x1c\xb7\x1d\x28\x84\xe0\x87\x3f\xfc\x21\xcb\ +\x96\x2d\xe3\x3f\xfe\xe3\x3f\x0e\x05\x7f\x08\xa4\x0b\xf1\x78\x88\ +\x64\x26\x4d\x4d\xa0\xbe\xe2\x56\x4a\x9b\x80\x88\x20\x5d\x89\x65\ +\xd9\x7e\xad\x98\x57\xd6\xa9\xeb\x7a\xce\x75\xdd\x0c\x70\x44\xfc\ +\xd5\x1f\x91\x5e\x73\x7c\xbe\xc7\x09\x40\x75\x5c\xc5\x71\x5d\x26\ +\x87\x67\x50\x72\xd3\x14\xac\x2c\x42\x48\x8c\xac\x8b\x5b\x92\x7e\ +\xf6\xf0\xa8\x01\x19\x6b\xc0\xa4\xb5\xb5\x95\x1b\x6e\xb8\x81\x6d\ +\xdb\xb6\x51\x2a\x95\xa8\xab\xab\x63\xd9\xb2\x65\x6c\xdc\xb8\x91\ +\x60\x30\x48\x38\x1c\x26\x93\xc9\x1c\xf7\xb6\x66\x29\xa5\x5b\x55\ +\x55\x25\x77\xec\xd8\x51\x29\x59\xf0\x4a\x50\x25\x48\x21\x89\x45\ +\xc2\x3c\xbe\xfb\x7e\xbe\x75\xe5\x6f\xf8\xcd\xfe\x87\x78\xa9\xe3\ +\x65\xce\x3a\xe9\x74\x5e\x73\x37\x62\x18\xa6\xcf\xe8\x7a\x54\x8c\ +\x6d\xdb\xb3\xea\xeb\xeb\x03\xa3\xa3\xa3\x3d\xc7\x7a\x6f\xb6\x6d\ +\xb7\x09\x21\x2a\xc5\x82\x08\x46\x96\x48\xfe\xee\xf6\x66\x24\x2e\ +\x51\x33\x42\x50\x0f\x72\x70\xb8\x80\x55\x90\xbc\x7e\x57\x0a\xe9\ +\x54\x34\xce\x31\xb9\xbd\x42\x08\xbe\xf9\xcd\x6f\x72\xfb\xed\xb7\ +\xf3\xc9\x4f\x7e\x92\xb6\xb6\x36\x5c\xd7\x9d\xd0\x5f\x38\xd6\x9f\ +\x8d\x94\x92\x9e\x9e\x9e\xe3\x0a\x48\x2a\x95\xba\xe8\xf9\xe7\x9f\ +\xa7\xa5\xa5\xa5\x7d\xce\x9c\x39\xb3\xb3\xd9\x6c\xa5\x6e\x58\x28\ +\x14\x6a\x24\x25\x33\xca\x7e\xf9\x1c\xdf\x79\x56\x67\xd5\xe9\xa7\ +\x90\x50\x76\xf0\xcc\xbe\x5d\x0c\xb5\xe5\x48\xa5\x2a\x01\x6b\x28\ +\x14\xa2\xa5\xa5\x85\x52\xa9\xc4\xb5\xd7\x5e\xfb\x7a\x5b\x5b\xdb\ +\x86\x75\xeb\xd6\xad\x3c\x1e\x0e\x87\xef\xfa\x0a\x85\xba\x83\x92\ +\x7d\x4f\x15\x18\xda\x6e\x90\xef\xdb\x38\x41\x35\xa9\x42\x03\x8d\ +\xb7\xcd\x9f\x1c\xb1\x0d\x89\xc7\xe3\xdc\x77\xdf\x7d\x7e\xc2\xc8\ +\x2b\x34\x00\xd0\x35\x1d\x5d\x3b\xe4\x0a\x7b\xe5\xa3\xfb\xf7\xef\ +\x9f\x71\x3c\xed\x88\x57\x2d\xef\xbd\x00\x81\x40\x35\x5c\xb4\x30\ +\xe4\x7b\xe1\xf5\xce\x9f\xf3\xe4\x4f\x7e\x4c\x79\x44\x62\x95\x5c\ +\xca\x69\xd7\x8f\x85\x54\x55\x25\x9d\x4e\x13\x0a\x85\x18\x19\x19\ +\x39\xa2\x5e\x8d\xc3\x21\x18\x2f\xbc\xf0\x42\x6e\xbc\xf1\x46\xbe\ +\xf5\xad\x6f\xa1\xf6\xa9\x10\xcc\xd1\x38\x1b\xbf\x7f\xbf\x5c\x2e\ +\x53\x55\x55\x45\x2a\x95\xc2\xeb\x8b\x3f\x6a\x40\x62\xb1\x98\xdc\ +\xb4\x69\x53\xa5\x92\x23\x06\x0b\xcf\x8f\xa1\x07\x04\x4a\xa9\x9e\ +\x0b\x16\x5f\xca\xef\x3a\x1f\x41\x0b\xa8\x8c\xee\x33\x19\xd8\x5c\ +\xf6\x12\x4e\x52\xd7\xf5\x29\xc7\x13\x10\xd7\x75\x1d\x2f\x69\xa5\ +\xaa\x2a\x8b\x17\x2f\xa6\xb3\xbd\x83\xd7\xfe\xa9\x5c\xd9\x1b\x0a\ +\xa0\x54\x28\x12\xe1\xba\x84\x42\xd2\xa7\x2a\xbc\x11\x18\x63\x3d\ +\x7f\xc7\xb5\x91\xb4\x58\x2c\xf2\xe9\x4f\x7f\x9a\x54\x2a\xc5\x27\ +\x3f\xf9\x49\x1e\x7a\xe8\x21\x4e\x5f\x79\x3a\xdd\xdd\xdd\xcc\x9b\ +\x37\x8f\xdf\xfe\xf6\xb7\xac\x5c\xb9\x12\x5d\xd7\xc9\x66\xb3\xec\ +\xd8\xb1\xc3\xaf\x9a\x3f\x2a\x40\x42\x63\x4f\x66\xdb\x36\xb2\xda\ +\x65\xc6\x39\x35\x68\x08\xac\xb2\xc1\xeb\x23\x3f\x43\xb5\xc3\x24\ +\x5a\x0d\x92\xfb\x2b\xc1\xcf\x98\xdb\x2b\x86\x87\x87\x8f\xc9\xaa\ +\xc7\xe3\xf1\x96\xb9\x73\xe7\x1e\x08\x04\x02\x15\x4f\x4f\x51\x71\ +\x84\x4d\xa9\x54\xe2\xdb\xdf\xfe\x36\x4d\x4d\x4d\x24\x12\x09\x7e\ +\xf7\xbb\xdf\xf9\x05\x04\x00\x23\x23\x23\x4c\x9d\x3a\x95\x64\x32\ +\xc9\xc8\xc8\x08\xaa\xaa\x92\x4c\x26\x09\x85\x42\x94\xcb\x65\x02\ +\x81\xc0\x71\x05\x24\x14\x0a\xb1\x63\xc7\x0e\x66\xcf\x9e\xcd\x0b\ +\x2f\xbc\xe0\xf7\xd0\x8c\x8e\x8e\xfa\x95\x90\x83\x83\x83\xc4\xe3\ +\x71\xbf\x78\xf0\x9d\x58\x8c\x77\xb4\x21\x9e\x1b\x5b\x9d\x83\x0d\ +\x77\x64\xdf\x32\xaa\xa8\xa2\x46\x82\x11\x7d\x82\x18\x1f\x87\x9d\ +\x17\x98\x3d\x7b\x36\xb6\x6d\xa3\x0a\x95\x56\x75\x3f\x67\xdd\x10\ +\x64\xfd\x7f\x38\xbe\x2b\x3c\x6f\xde\x3c\x1e\x7b\xec\x31\x9a\x9b\ +\x9b\xa9\xad\xad\x65\xde\xbc\x79\xdc\x73\xcf\x3d\x68\x9a\xc6\xc2\ +\x85\x0b\xd1\x75\x9d\x5f\xff\xfa\xd7\x7e\x56\xd0\xab\x5e\x3f\x9e\ +\x80\x84\xc3\x61\xbe\xfa\xd5\xaf\x4e\x50\x43\xad\xad\xad\x00\xec\ +\xdf\xbf\xdf\xa7\xe8\xc7\xab\xde\x63\x02\x44\x4a\xc9\x3f\xfe\xe3\ +\x3f\x32\x77\xee\x5c\x6a\x6b\x6b\x79\xe2\x89\x27\x38\x78\xf0\x20\ +\x9a\xa6\xf9\x85\xd4\x73\xe7\xce\xa5\xbd\xbd\x9d\x44\x22\x41\x73\ +\x73\x33\x07\x0e\x1c\x38\x2e\xee\xae\xd7\x68\xa3\x09\x95\x4c\x3c\ +\x03\x72\x32\x91\x48\x84\xaf\x7f\xfd\xeb\x9c\x7a\xea\xa9\x7e\xed\ +\x97\xc7\x24\xe8\xba\x4e\xb1\x58\x64\xd7\xae\x5d\x7e\x4f\xbc\xe7\ +\xf7\x8f\xa7\x2c\x8e\x17\x20\xf1\x78\xfc\x1b\x5e\x40\x08\x20\x15\ +\x89\xa6\x09\x5c\x17\xa2\xa1\x28\x05\x23\x57\x69\x10\x12\xe0\xda\ +\x87\x18\xdf\x77\xba\xbe\xf6\x4e\x5c\xcd\xfc\xf9\xf3\xc9\xe5\x72\ +\x5c\x7a\xe9\xa5\xfc\xfe\xf7\xbf\x67\xce\x9c\x39\xd4\xd7\xd7\x33\ +\x73\xe6\x4c\x1e\x7a\xe8\x21\x74\x5d\x67\xd2\xa4\x49\x78\xcd\xa0\ +\xc7\xc3\xcb\x1a\x3f\xa1\x47\x52\x29\x42\x28\x17\x25\xf9\xb4\x41\ +\x44\x53\x59\xbb\xb6\x52\xdd\xa9\xab\x41\x14\xad\x52\x23\xe6\x35\ +\x00\x79\x76\xc2\x8b\xc8\xbd\xde\x72\x2f\x4d\x6b\x59\xd6\xa4\x50\ +\x28\x74\x9d\x10\x22\x00\x88\xba\xba\xba\x57\xfb\xfa\xfa\xba\x8e\ +\xc2\xae\x4d\xaf\xaf\xaf\xaf\xd8\x04\x45\xa0\x9d\xaf\x73\xe9\xb5\ +\x93\x28\x96\x0d\x2e\x3b\xf1\x66\xb6\x8c\x3e\x45\x62\x28\x49\xae\ +\xdf\x61\xc3\x37\x93\x3e\xcb\x1c\x8d\x46\x87\x8f\x1a\x90\x60\x30\ +\xc8\xbd\xf7\xde\xcb\xe7\x3e\xf7\x39\x3e\xf6\xb1\x8f\xd1\xdf\xdf\ +\xef\x8b\xbd\x37\xdb\x24\x95\x4a\x61\x59\x16\xa5\x52\xc9\xcf\x85\ +\xc8\xb1\xc8\xf0\xad\x0d\x34\x47\x0a\x88\x61\x18\x38\x28\xa8\xaa\ +\x42\x6f\xa7\xc1\xdd\xf7\x7e\x95\x6f\x3c\xfb\x2f\x7c\xe1\xfc\x2f\ +\x13\x8f\xc4\xf9\x9f\xad\x5f\xa4\xfd\x37\x39\x8c\x11\xc5\xaf\xec\ +\x38\xe1\x84\x13\x68\x6c\x6c\x64\xfb\xf6\xed\xd4\x35\x55\x71\xc2\ +\xcc\x46\x96\x4f\x5a\x86\xea\xea\x15\x07\x40\x30\x47\x22\x1f\xf3\ +\xd2\xd0\x3f\xfc\xe1\x0f\xff\x06\xe8\x3a\x8a\x7b\x94\xe3\x55\xb4\ +\x18\x81\xe1\x5d\x65\x12\x7b\x2d\xbe\xfa\xdd\x7b\x49\xee\xb3\x70\ +\x4d\x89\xa2\x0b\x14\x4d\xf1\x35\x8e\x10\x42\x39\x26\x1b\x92\x48\ +\x24\xb8\xfd\xf6\xdb\x0f\xeb\x26\xbd\x1e\x43\x21\xc4\xa2\xa6\x43\ +\x9e\x9f\xf6\x00\x00\x16\x56\x49\x44\x41\x54\xa6\xa6\x53\x06\x06\ +\x06\xb6\x1d\x43\xe0\x55\x01\x5d\x2a\xa8\x42\x05\x14\x96\x2e\x3b\ +\x85\x86\xb6\x2a\x96\xaf\x38\x8d\x29\xb5\x4d\xac\x29\xa9\x54\x6d\ +\x8c\xa0\xe4\x85\xaf\xd3\x67\xcc\x98\xe1\x79\x88\x4c\x3a\xdd\xa5\ +\xf9\xec\x34\xd2\x4d\xe3\x00\xc6\x40\x00\xa3\x2d\x42\xb9\x33\x82\ +\x10\x15\xde\x4d\x55\xd5\xa3\x76\x40\x54\x55\x65\xe1\xc2\x85\x9c\ +\x74\xd2\x49\x6c\xd8\xb0\x81\x81\x35\x15\xa3\x1e\x70\x1c\x26\x37\ +\xba\x7e\xac\xe6\x6d\x62\x6f\xb0\xdb\x51\x03\x32\x3c\x3c\xdc\xe5\ +\xba\xee\x5c\xaf\x80\xa0\xe9\xac\x30\x91\x88\x82\xb4\x75\xde\x77\ +\xd2\x2d\x3c\xb3\xef\x87\xd8\x18\xd8\x86\xe4\xc0\xef\x8b\x7e\x0a\ +\xb5\xaa\xaa\x2a\x52\x2c\x16\xe3\x47\xf2\x70\x53\xa6\x4c\x79\x5f\ +\xb1\x58\xbc\x10\x70\xa5\x94\xf1\xce\xce\xce\x8a\xee\x97\x82\xb2\ +\x61\x32\xd0\x53\xe2\xab\x89\x6f\xb2\xa7\x6d\x98\x3b\xb6\xfd\x2b\ +\xb1\x50\x35\x1b\x0e\x1e\xc4\xee\x8b\xa2\x58\x41\x7f\x07\xb6\xb6\ +\xb6\xfa\x6d\x69\x81\x62\x33\x77\x5e\xf4\x23\x36\xf6\xfe\x96\x1f\ +\xbc\xf8\x9f\xcc\x9c\x51\xc7\x50\x39\x4f\x76\x77\xa5\xb6\x57\xd7\ +\xf5\x63\xa2\xe2\x83\xc1\x20\xdf\xfc\xe6\x37\x89\xc5\x62\x34\x35\ +\x35\xb1\x63\xc7\x0e\xce\x3d\xf7\x5c\xd6\xac\x59\xc3\xca\x95\x2b\ +\x69\x6b\x6b\x43\x08\xc1\xac\x59\xb3\xc8\x64\x32\xbc\xf2\xca\x2b\ +\xc7\xc6\xf6\x5a\x96\xd5\x16\x0c\x06\x2f\xf6\xf2\xd5\xd3\x2f\x09\ +\x13\x8f\x6b\xe4\xfa\x6d\x7e\x33\x70\x1f\xb6\x22\x28\x0c\x38\xa4\ +\xbb\x0f\x19\x4d\x5d\xd7\x7d\x37\xf4\x08\x49\xc4\x5b\xaf\xbb\xee\ +\xba\xf3\xa5\x94\xb8\x48\x32\x55\xa3\x34\x4d\x0f\xe0\x66\xbc\xfa\ +\x2b\x9d\x74\x22\xc7\xa9\x0d\xe7\x60\x16\x6d\x92\xc5\x24\xa7\x37\ +\x5d\xc9\xb3\x5b\x9f\x21\x18\x74\x7c\x09\x55\x14\x05\xe9\x4a\xa4\ +\x25\xb8\x76\xf9\x87\xf8\xef\x0d\xff\xca\xf2\xd8\x87\x58\xd9\x70\ +\x23\x2b\x17\x2c\xe0\x3b\xad\x5f\x99\xd0\xfb\x7e\xb4\x80\x48\x29\ +\x9d\xf1\x05\xe5\x9e\x93\xe3\xb9\xd9\x5e\xc7\x59\x77\x77\x37\x81\ +\x40\x80\xda\xda\x5a\x7f\x9c\xd3\xb1\x90\x8b\x0a\x40\x75\x75\x35\ +\xb6\x6d\xb3\xe3\x6b\x45\xac\x9c\x44\x68\x20\x14\x10\xaa\x57\x81\ +\xa1\xa2\x69\x87\x22\xe3\xa3\x1c\xab\xa4\x27\x93\x49\x5c\xd7\x25\ +\x63\x17\x99\x73\x45\x06\x5b\xad\xa8\x7d\x29\x6c\x74\x4d\x85\xa4\ +\x82\x71\x20\x4a\xfe\x8d\xb1\xe1\x30\x63\xde\xd4\xf8\x12\xa0\x48\ +\x38\x4c\x32\x98\xe3\xcc\x8f\x45\x38\xff\xfc\x0b\xf8\xd1\xce\xe7\ +\x18\x4a\x8d\xb0\xb7\x7f\x27\xc5\x9a\xed\xa8\x54\x6a\x6c\x85\x7a\ +\x74\xe3\x93\x00\x1a\x1b\x1b\x4f\x94\x52\xae\x08\x85\x42\x5c\x73\ +\xcd\x35\xc4\x62\x31\x7f\x13\x6e\xdd\xba\x15\x45\x51\xd8\xb3\x67\ +\x8f\x5f\xf4\x31\x30\x30\xe0\x17\x18\x1e\x2b\x20\x9c\x7c\xf2\xc9\ +\x7c\xe9\x4b\x5f\xc2\xb6\x6d\x1e\x7e\xf8\x61\x0e\x1c\x38\x30\x61\ +\x8e\x47\x3c\x1e\x67\x70\x70\xd0\x8f\x46\xbd\xc1\x34\x47\x9b\x81\ +\x73\x5d\x17\xcb\xb1\x51\x84\x42\xba\x27\xcc\x23\x7f\xff\x3b\xfa\ +\x0b\xfb\xb9\xe3\xb7\x7f\xc7\xec\xc6\x79\x74\x96\xdb\x30\xca\x21\ +\x14\xfd\xd0\x44\x37\xdf\xf5\xf4\x8a\xf6\x14\x85\x40\x40\xc7\xb2\ +\x0c\x34\x25\x88\xaa\x68\x04\xb4\x20\x21\xad\x42\x85\x1b\xa6\x81\ +\xa2\x8a\xa3\x9e\xc7\x55\x2a\x95\x5a\x9a\x9b\x9b\xc3\x85\x42\x81\ +\xaa\xaa\x2a\x9f\x32\x1a\xbf\xfe\x58\xb1\xa0\x17\x30\x1e\x35\x20\ +\x2b\x56\xac\x60\xf7\xee\xdd\xfc\xf5\x5f\xff\x35\x67\x9c\x71\x06\ +\x42\x08\x22\x91\x4a\x1b\xb1\x97\x0e\x2d\x16\x8b\x0c\x0f\x0f\xd3\ +\xdc\xdc\xcc\xe0\xe0\xa0\x6f\x97\x8f\xf4\x41\xbd\xb9\x8d\x16\x15\ +\x55\xb0\x7a\xd5\xbf\xf2\xf3\x3d\x5f\x27\x79\xa0\x9a\x05\xda\x55\ +\xdc\x72\xc6\xdf\xf3\x99\x9e\xf7\x57\x5c\x5c\xa7\xa2\x72\x82\xc1\ +\xa0\x3f\xdb\xd1\x75\x5d\x0c\xd3\xc4\x2a\x18\x64\xd7\x2c\xe6\x8b\ +\xbf\xfa\x22\x8e\xb4\xd9\xcb\xe3\x94\x0d\x8b\xcc\xcb\x02\xe4\x0c\ +\x66\xcf\x96\x20\x2a\xb9\x8a\xcb\x2f\xbf\xfc\x7f\x84\x10\xdf\x07\ +\xd8\xbc\x79\x73\xc7\xde\xbd\x7b\x97\x1c\xae\x27\x98\x4e\xa7\x2b\ +\x1d\xc4\x01\xb8\xe4\xdf\x1a\x50\x54\x01\xa8\x34\xd7\x9f\x40\x7f\ +\xea\x00\xa3\xfb\x4c\x0e\xbc\x58\x24\xd5\x5e\x91\xe0\xaa\xaa\x2a\ +\xf2\xf9\xfc\xfd\xc7\x14\x18\xfe\xfc\xe7\x3f\xe7\x03\x1f\xf8\x00\ +\x77\xdf\x7d\x37\xeb\xd7\xaf\xf7\xfd\xfd\x7c\x3e\xef\xd3\x25\xa9\ +\x54\x6a\x42\xaa\x54\x4a\x49\x63\x63\xe3\x97\x14\x45\xb9\xa5\xaf\ +\xaf\xef\xc0\x91\x4a\x88\x83\x83\x22\x55\xa6\xd4\x4d\x61\xff\x40\ +\x91\xa2\x05\x1d\xc3\xfb\x79\x72\xef\x7d\xd8\xb6\x85\x65\x55\x74\ +\xa9\x69\x9a\x04\x83\x41\x4e\x3d\xf5\x54\xf6\xee\xdd\x4b\x22\x91\ +\x20\x9d\x4e\x63\xba\x26\x56\xd9\xc6\x30\x2a\x53\x91\x76\xd7\x6e\ +\xe6\x9c\x6b\x63\x38\xb9\xca\x1c\x45\x37\x13\xc4\xc9\x6a\x38\x19\ +\x0d\x6b\x20\x18\x40\xfa\x33\x15\x83\x47\x60\x43\xd0\xf5\x4a\x3d\ +\x98\xee\x2a\x0c\x6c\x36\x29\x0e\x3b\x14\x86\x1c\x5e\x1d\x48\x50\ +\x4e\xb9\x95\xba\x35\x4d\xf8\xb5\x08\x63\x36\xcb\x3e\x26\x1b\xe2\ +\xba\x2e\x0f\x3c\xf0\xc0\xa1\x1b\xf1\x02\x4d\x01\x99\x74\x06\xcf\ +\xad\x16\xa2\xc2\xdb\x78\x63\xfd\xe6\xcc\x99\x73\x51\x26\x93\xa9\ +\x07\xfe\x28\x20\xf3\xe6\xcd\x7b\x8f\xae\xeb\x42\x51\x14\x67\x78\ +\x78\x38\x56\x2e\x55\x26\x7b\x5a\x8a\x4d\xbe\x3f\xc0\xae\x5d\xbb\ +\x48\xe4\x0a\xa4\x07\x6c\xb2\x89\x2c\xa3\x07\x8b\xe4\x07\x2d\x4c\ +\x4b\xa2\xc8\x0a\x80\x86\x61\xd0\xdc\xdc\xcc\x8e\x1d\x3b\x50\x94\ +\x4a\xeb\xb4\x23\x0f\x4d\x1e\x32\x5c\x8b\x70\x2d\x28\x8e\xc6\xb4\ +\xfa\x05\xc4\x67\x54\xb1\x73\x70\x03\x75\x91\xc9\x64\xe5\x10\x03\ +\x0f\x36\xe0\x14\x0e\xa9\xbc\x23\x49\x2f\x57\x55\x55\xb1\x7a\xf5\ +\x6a\xf6\xec\xd9\xc3\x81\x7d\x07\x08\x18\x65\x54\xc7\x21\x56\xef\ +\x62\xd7\xd8\xfe\x98\x0e\x2f\x6e\xf3\xbc\xbf\x63\x89\x43\xfe\xfb\ +\xe0\xc1\x83\x17\xdb\xb6\x3d\x53\x08\x41\x31\x26\x39\xf5\xf2\x6a\ +\xf4\x80\xa0\x30\x52\xc5\xfb\xcf\xb8\x9e\x67\xf6\xfd\x00\x4d\xd5\ +\x19\xda\x6e\x30\xb8\xb5\x84\x50\x84\x3f\xed\xe7\x1d\x1e\xb0\xe1\ +\xb4\xd3\x4e\xdb\xac\xaa\xaa\x10\x42\x20\x91\x50\x5b\x82\x6c\x10\ +\xe1\xa8\xb0\x11\x9e\xd8\xf8\xd4\x21\xde\x88\x1a\x76\x1c\x18\x64\ +\xf4\x60\x0c\x47\xe6\xb0\x4d\xe9\x1b\x73\xaf\x16\xcc\x9b\xec\xe6\ +\x9a\xae\xdf\x6a\x6d\x49\x07\x45\x55\xe8\xde\x6f\xf3\x95\x5b\xbf\ +\xc2\x0f\xd6\x7e\x97\x4b\x5a\x6e\xe1\x8a\x25\x1f\xe4\x53\xcf\x5f\ +\x80\x65\x5a\xd8\xa6\x73\x44\x80\x78\x69\xd9\x6f\x7f\xfb\xdb\x24\ +\x12\x09\x6e\xbe\xf9\x66\x9e\x7b\xee\x39\xbf\x72\xb1\xbd\xbd\x9d\ +\x65\xcb\x96\x11\x0e\x87\xd9\xb6\x6d\x1b\xdb\xb6\x6d\x63\xe9\xd2\ +\xa5\x6c\xd8\xb0\xe1\x1d\xbf\xfb\x4f\x02\x92\xcb\xe5\xb6\x36\x37\ +\x37\x0f\x1b\x86\x31\x53\x08\x81\xa1\x3b\xb4\x9c\x57\x8d\x9d\x92\ +\xa4\x3b\x0c\x1e\xfd\xed\x03\x14\x07\x04\x56\xd1\xa2\x9c\x92\x84\ +\xc2\x21\xdf\xf5\x7d\xa7\xf6\x30\x40\x2f\x97\xcb\xc2\xb6\x6d\x10\ +\xb0\x35\xb2\x8b\xf7\x9e\x5f\x87\x2b\x5d\x1c\xc3\x45\xb1\x83\x48\ +\x4b\xc1\xc9\xab\xe4\x5e\xab\xc1\x29\xaa\x3e\xb1\x98\x4c\x26\xfd\ +\xe0\xd1\xa3\x47\x5c\xd7\xa5\xb3\xb3\x53\xbe\xf1\xc6\x1b\xe2\xd1\ +\x47\x1f\x65\xdb\xb6\x6d\x15\xc7\x43\x3a\xa8\x9a\xc2\x09\xd5\x4b\ +\x38\x98\xdf\xcd\x48\xf9\x20\xff\xeb\xc4\xdb\x09\x6a\x21\x42\xa1\ +\x20\x96\x63\x63\x99\xbe\x1a\x7a\x47\x44\x6a\x6a\x6a\x3e\x71\xde\ +\x79\xe7\x7d\xa3\xb5\xb5\x95\x47\x1e\x79\x84\x2f\x7f\xf9\xcb\xf4\ +\xf5\xf5\xb1\x77\xef\x5e\x72\xb9\x9c\x4f\xd3\xac\x5d\xbb\x96\x99\ +\x33\x67\xd2\xd3\xd3\x83\xe3\x38\x8c\x8e\x8e\x1e\x9f\xc1\x01\x95\ +\x0d\x21\x38\xe9\xa4\x93\xe8\xee\xea\x66\xe3\xe7\xca\x48\x7b\xcc\ +\x21\x16\x1a\x08\x15\xe9\x38\x84\x42\xba\xff\x72\xbc\x12\xfc\x77\ +\xba\x01\xbf\x3c\x07\x49\xa0\xae\xd2\xd9\x74\xd6\xa4\x0f\xd3\x32\ +\xb9\x85\xa7\x3b\xbe\xc7\xcc\xaa\x53\xd8\x9a\xfa\x0d\xf6\xc6\x30\ +\xb6\x75\xa8\x8a\x64\x7c\x1b\x44\xa1\x50\xb8\x63\xff\xfe\xfd\xff\ +\x3e\x69\xd2\xa4\x81\x91\x91\x91\xc6\xb5\x6b\xd7\xb2\x68\xd1\x22\ +\x36\x6e\xdc\x58\xe9\xc8\x52\x5d\x92\xbf\x2f\xd3\x3b\x75\x90\x7b\ +\x36\x3f\x40\x32\x97\xe0\x0b\xbf\xfb\x12\xaa\xa2\xd2\x9d\x05\x2b\ +\x7f\x48\x32\x26\x4f\x9e\x7c\xc2\xb4\x69\xd3\x5e\x05\x54\xc7\x71\ +\xd8\xb9\x73\xe7\x75\xc9\x64\xb2\xe7\x2d\x6c\x44\xad\xa2\x28\x9a\ +\x94\x92\x4d\x9b\x36\x71\xd1\x45\x17\xf9\xe4\xe6\x5b\xd7\xfe\xfd\ +\xfb\x7d\x82\x73\xeb\xd6\xad\xc4\xe3\xf1\x63\x07\xc4\xb2\x2c\x6e\ +\xbd\xf5\x56\xce\x3b\xef\x3c\x0c\xc3\xe0\xb1\xc7\x1e\xf3\x07\x41\ +\x7a\x9e\xd6\x9c\x39\x73\xd8\xbb\x77\xaf\x4f\x0d\x0c\x0c\x0c\x78\ +\x37\xb9\x70\xda\xb4\x69\xc9\xde\xde\xde\xb7\xe3\x8a\x1c\x8f\xaf\ +\x92\x02\x14\x45\xd0\xbd\xcf\xe6\xdb\x7f\x75\x13\xff\xf0\xe3\x2b\ +\xf8\xe2\xc5\xdf\x27\x1e\x6e\x60\x74\x7b\x27\x83\xd6\x08\x86\xe1\ +\xf8\x80\x7b\xc4\xe1\xb8\x2a\x49\xa9\xaa\x2a\xb7\xde\x7a\x2b\x9f\ +\xff\xfc\xe7\xb9\xff\xfe\xfb\xfd\x09\x3c\xb6\x70\xd1\x8a\x1a\xb1\ +\x13\xaa\x28\x65\x2c\x0a\x96\x60\x64\xd9\x56\xe2\xb1\x10\x93\x46\ +\xc2\xd8\xf5\x41\xdc\xb2\x8a\x34\x14\xa4\xa9\x84\x91\xe2\x4c\x2f\ +\xf7\xfd\xe6\x9b\x6f\x86\xde\x4e\x5d\x8d\x4f\x5b\x2b\xaa\x4a\xb8\ +\x4a\x23\x10\x14\x87\x3a\xa6\x04\xd8\x25\x17\xbb\xa4\xf8\x36\x57\ +\x51\x14\x4a\xa5\x92\x65\x9a\x66\xe2\x98\x00\x71\x1c\x87\xd9\xb3\ +\x67\x93\x4c\x26\x39\xe5\x94\x53\x08\x85\x42\x9c\x72\xca\x29\x44\ +\xa3\x51\xa2\xd1\x28\x3f\xf9\xc9\x4f\xa8\xa9\xa9\xe1\xcc\x33\xcf\ +\x24\x9d\x4e\xb3\x6e\xdd\x3a\x02\x81\x00\xb6\x6d\xf3\x9e\xf7\xbc\ +\xe7\xe1\xf6\xf6\xf6\x1f\xf7\xf6\xf6\xde\x34\x46\x36\x36\x01\xab\ +\x01\xd3\x75\xdd\xea\xde\xde\xde\x4a\x01\x32\x60\x5a\x26\xf9\x6c\ +\x8c\x3b\xef\xfc\x1a\x3d\xed\x59\x1e\x1f\x7a\x86\x4c\x21\xc3\x2b\ +\x7d\x6f\x52\xe8\x0a\x13\xd3\x6b\x3d\xb6\x94\xaa\xaa\x2a\x72\xb9\ +\xdc\x84\xd1\x17\x42\x08\xda\xda\xda\xb8\xe9\xa6\x9b\xc8\xe5\x72\ +\x54\x55\x55\x55\x66\x09\x0b\x17\xdc\xb1\x39\xed\xc0\x90\x36\xc2\ +\xc2\x85\x01\x6c\xcb\x84\xa6\x89\x23\x93\xb2\x9b\xc7\x2a\x1e\x85\ +\xf4\x0b\x23\xfe\x18\xf1\xd9\xd0\xd0\x30\xd6\x82\x00\xb5\xe7\x04\ +\x59\x7c\x5a\x8c\xa1\xed\x65\x46\xf7\x59\x8c\xee\x36\x71\xed\xb7\ +\x75\x04\x0e\x0c\x0e\x0e\xde\x77\x4c\x80\x44\x22\x11\xee\xbc\xf3\ +\x4e\xce\x3c\xf3\x4c\xee\xb9\xe7\x1e\x8a\xc5\xe2\x84\xec\x97\x69\ +\x9a\xac\x5d\xbb\x16\xdb\xae\x64\xf4\x82\xc1\xa0\xff\xef\xde\xf0\ +\x2e\x6f\x8d\x8c\x8c\xac\xba\xf2\xca\x2b\x3f\xef\x51\xf4\x19\xb3\ +\x28\x6b\x67\x3b\x42\x26\xc3\xb8\xc9\x00\xd8\x92\x3d\x6f\x76\x32\ +\x59\x59\xc0\xa6\x8d\x95\xe9\xdc\xd3\xb4\xe5\x74\xba\x1d\x7e\x8e\ +\x3a\x12\x89\x10\x0c\x06\xfd\x91\x47\xe3\xa8\x97\x7b\x86\x87\x87\ +\xab\x84\x10\x6e\xb9\x5c\x5e\x2e\x84\xb8\xb8\x5c\x2e\xe3\x28\x2e\ +\xa1\x50\x78\xac\xe2\x51\x80\x2a\x31\x4d\x87\x0f\xcc\xbc\x93\xee\ +\xec\x2e\x4e\x9a\xb5\x98\xff\x7a\xee\x3e\xec\xba\x76\x1c\x27\x82\ +\x65\x5a\xa0\xc8\xb7\x8d\xe2\x03\x81\xc0\x6c\x29\x65\x9d\x37\x48\ +\x61\xd1\xa2\x45\x04\x02\x01\xfa\x5e\xeb\x65\xe7\xcb\x12\x49\x00\ +\x29\x75\x62\x91\x90\xaf\x52\xbd\x5f\x5e\x61\xc8\x31\xab\x2c\xdb\ +\xb6\x83\x8a\xa2\xf0\xda\x6b\xaf\x55\xf4\xa1\x64\xc2\x64\x05\x21\ +\xc0\xb6\x1c\x84\x52\x31\xe6\x5e\x2e\xa2\x50\x28\x4c\x18\x2c\xec\ +\x3d\x93\x33\x6e\x50\x72\x76\x61\xa7\x98\x79\x46\x14\xcb\x35\x71\ +\x1c\x17\x25\x17\xab\xc4\x07\xde\xec\xdc\x31\xf7\xd2\x9b\x17\x2c\ +\xa5\xf4\xe9\xfe\xfa\xfa\x7a\x12\x89\x43\xd2\x9f\x4c\x26\xbf\xe6\ +\x19\xfb\xc9\x93\x27\x7f\x4c\xd3\xb4\x8b\xa5\x94\x08\x1b\xb0\x5d\ +\xff\x50\x00\xcb\x34\x48\xec\x93\x54\x35\x57\xf3\xfc\x9b\x3f\xc6\ +\x3a\xf0\x31\x16\x28\x67\x12\x53\x56\xf0\x58\xef\x4f\xc9\x8d\x06\ +\x40\x48\x6f\xf0\xd8\x29\x81\x40\xa0\x5e\x55\x55\x51\x2a\x95\x76\ +\x5f\x72\xc9\x25\xed\x3d\x3d\x3d\x58\x96\x25\x6b\x6b\x6b\xc5\x3f\ +\xff\xf3\x3f\xb3\x78\xf1\x62\xee\xbd\xf7\x5e\xf6\xed\xdb\xc7\xe2\ +\xc5\x8b\x79\xf3\xcd\x37\x69\x69\x69\xa1\xbf\xbf\x9f\x74\x3a\xcd\ +\x94\x29\x53\x90\x52\xb2\x7d\xfb\x76\xd2\xe9\xf4\xb1\x03\x72\xe0\ +\xc0\x81\xbf\xcb\xe5\x72\x9b\xd4\x31\x7e\x22\x1f\x72\x39\xff\x96\ +\x3a\xca\x59\x07\xbb\x24\x29\xa5\x5c\xd2\x5d\x16\x99\x03\x36\xee\ +\x38\xa0\x26\x4d\x9a\xe4\xd1\x2b\x55\xb1\x58\x6c\x46\x3e\x9f\x3f\ +\x00\xb8\xe3\x77\x4a\x38\xa2\x61\x14\x25\x97\xcf\xfc\x27\x26\xd7\ +\xd5\xf2\xf3\x3d\xdf\x20\x56\xd7\x48\xa2\xf9\x00\xc9\xf5\x21\x5f\ +\xf7\x3a\x8e\x43\x3a\x9d\x46\x4a\x49\x38\x1c\xc6\xb2\x2c\x06\x06\ +\x06\xbc\x06\x98\xb7\xf3\x1c\x54\x4d\xd3\x58\xbd\x7a\x35\xf9\x7c\ +\x9e\x1f\xff\xf8\xc7\x7e\x02\xad\xae\x5c\x45\x68\xeb\x1c\xee\xda\ +\x7c\x17\xaa\x32\x87\xdf\x06\x9e\x20\xa4\xeb\x48\x43\x65\x8a\xb3\ +\x98\xa6\x13\xbd\x9d\x26\xb9\xfa\xea\xab\x7f\xee\x55\x8e\xac\x59\ +\xb3\x66\xaa\x57\x13\x6c\xdb\xb6\x37\x8f\xd7\x1f\x36\xe3\xba\x2e\ +\x93\x27\x4f\x66\xfa\xf4\xe9\x94\xcb\x65\x66\xcc\x98\xc1\xba\x75\ +\xeb\xfc\x64\xde\xce\x9d\x3b\x8f\x8f\x97\x65\x59\xd6\xd6\x40\x20\ +\x20\x3d\x35\x13\x01\x76\xfe\xc0\x7c\x4b\x6e\x5d\x27\xa4\xeb\xa0\ +\x1f\x8a\x62\x35\x4d\xc3\xb2\x2c\x1a\x1b\x1b\xff\x7a\xc9\x92\x25\ +\x97\xbd\xf8\xe2\x8b\x5f\xb5\x2c\xeb\xe4\xbe\xbe\xbe\x43\x63\x9d\ +\xde\x28\xa0\xb5\x57\xb3\xeb\xc4\x36\xbe\xb1\xf9\x19\x66\x4e\x99\ +\x89\x1e\x9f\x42\xdb\xe0\x4e\xf2\x43\xae\x5f\x1c\xf0\x16\xd1\x2f\ +\x77\x74\x74\x3c\x34\x96\xf1\x33\x34\x4d\x7b\xe5\xed\x72\x29\xef\ +\x7b\xdf\xfb\xa8\xaf\xaf\xe7\xb6\xdb\x6e\xe3\xd1\x47\x1f\xf5\x53\ +\xba\xae\x74\x29\x9b\x15\xb5\xbb\x21\xdd\xca\x7b\x6f\x0d\x4f\x18\ +\x33\x65\x0d\x07\x30\x7b\xc2\x98\x07\xc3\x38\x39\x8d\xf1\xb3\x54\ +\xbc\x2a\x7a\x2f\xc6\xb9\xed\xb6\xdb\x08\x06\x83\x94\x4a\x25\xa4\ +\x94\x7c\xff\xfb\xdf\x9f\xd0\x7f\x22\xa5\x64\xf7\xee\xdd\xb4\xb6\ +\xb6\x1e\x36\x89\x79\x58\xed\xa7\xae\xeb\xf2\xd1\x8f\x7e\x94\x73\ +\xce\x39\x87\x8e\x8e\x0e\x76\xee\xdc\x49\x67\x67\xa7\x3f\xdb\xc3\ +\x34\x4d\x4e\x3f\xfd\x74\xf6\xef\xdf\xcf\x9e\x3d\x7b\x98\x3d\x7b\ +\x36\x1d\x1d\x1d\x7e\x26\xb1\x5c\x2e\xeb\xe7\x9e\x7b\xee\xbf\x2a\ +\x42\x61\x58\x1b\x96\xd3\x4f\x12\xc2\x1c\x0c\x63\x0f\x07\x71\x53\ +\x3a\x3b\x36\xee\xa5\x45\x3d\x11\x67\xc4\xa5\x77\x78\x90\x26\x6d\ +\x29\xeb\x13\xaf\xfb\xbd\xe0\x5e\x71\xc0\x18\x91\x98\x4f\x24\x12\ +\x1f\xfd\x93\x0f\xa5\x69\xbc\xf2\xca\x2b\xac\x59\xb3\x86\x91\x91\ +\x11\x8a\xc5\xa2\x3f\x4f\xd7\x2b\x0b\x02\x28\x0a\x93\x68\x6d\x0c\ +\x92\xd3\xb8\xfd\x92\x2f\xf1\x8b\xd6\xff\x64\x24\x32\x82\x3d\x37\ +\x4b\x62\xb3\x45\xea\xe5\x2a\x54\xad\xd2\xb2\x7d\xd6\x59\x67\xad\ +\xf3\x00\x29\x95\x4a\x84\xc3\x95\xf3\x4e\x8a\xb9\x4a\x39\xa9\x50\ +\x15\x94\x3f\x5e\xd6\x2c\x01\x91\x4a\xa5\xa2\xc7\x05\x10\x29\x25\ +\xd7\x5c\x73\x0d\x5b\xb6\x6c\x61\xd5\xaa\x55\x24\x12\x09\x16\x2d\ +\x5a\xc4\xf6\xed\xdb\x69\x68\x68\xa0\xb3\xb3\x93\x9a\x9a\x1a\x16\ +\x2e\x5c\x48\x20\x10\xa0\xbd\xbd\xdd\x1f\x00\xe9\xbd\x80\xfe\xfe\ +\x7e\x1c\x29\xa9\xbe\x3e\x2f\xc2\x8b\x63\x84\x97\x66\x41\x91\x48\ +\x53\xc1\x4e\x6b\xb8\x59\x9d\xd4\xf3\xb5\x38\x96\x8b\xe6\x1e\xaa\ +\x2e\xf1\x06\xa7\xd5\xd5\xd5\x4d\x98\x35\xff\x4e\x91\x74\xb1\x58\ +\xe4\x9c\x73\xce\xf1\xc1\xf4\xf4\x77\x5d\x5d\x9d\xff\xbd\x4d\x3d\ +\x2a\x7b\xbf\x5c\x87\xed\x66\xf8\x9b\xff\xfc\x18\x02\x9d\x40\x40\ +\x45\x1a\x51\x14\x5d\x22\x74\x13\xd5\x55\xbc\xd1\xb8\xb3\x0c\xc3\ +\xc0\xb6\x6d\xaa\xab\xab\x2b\xc9\x27\x04\xb5\x4b\x82\xe8\x08\xf2\ +\x03\x0e\x46\xc6\x9d\x30\x9c\xc8\x93\x0a\x4d\xd3\x44\x36\x9b\x7d\ +\xc3\xb6\xed\xf7\x1e\x17\x40\x74\x5d\xe7\xfa\xeb\xaf\xe7\xae\xbb\ +\xee\xe2\xeb\x5f\xff\x3a\xdd\xdd\xdd\x13\x4e\xd2\x29\x16\x8b\x74\ +\x75\x75\x91\xcb\xe5\xfc\x29\x9d\xaa\xaa\x92\xcd\x66\xa9\xad\xad\ +\xc5\x75\x5d\x7f\xc8\xc0\xc0\x03\x36\x6f\x28\xde\xb0\x49\x65\x1c\ +\x65\x61\x52\xb4\xda\x68\x69\x69\x99\x90\xb7\xf7\x26\xea\x7c\xf4\ +\xa3\x1f\xe5\xfe\xfb\xef\x3f\xac\x32\x23\xc3\x30\x72\xb6\x6d\x77\ +\x7b\x75\x5d\x42\x88\xe9\xaa\xaa\x0a\x4f\xda\xfd\x89\xa8\x01\x8d\ +\x9a\x49\x31\x2c\xcb\x62\xb4\x6c\x53\x7d\xe9\x10\xb5\x93\x74\x64\ +\x49\xc3\x1c\x0a\x52\xec\x08\x40\x22\xea\x57\x4e\x7a\xf1\x47\x28\ +\x14\xe2\x13\x9f\xf8\x04\xc9\x64\x92\xed\xdb\xb7\x57\x1a\x95\x6a\ +\x2d\x64\xfc\x90\xf3\xe1\xfd\xee\x15\x5d\x94\x4a\xa5\x72\x22\x91\ +\x48\x1d\x17\x40\xbc\xb9\x8a\x5f\xf8\xc2\x17\xfe\xe8\x67\xf2\xf9\ +\xbc\x4f\xcd\x4b\x29\x19\x3b\xb1\xcc\x67\x81\x87\x86\x86\x2a\x85\ +\xda\x93\xe3\xa8\xaa\x4a\x5b\x5b\x9b\x3f\xcb\x77\xf1\xe2\xc5\x63\ +\xd4\x47\xd9\xcf\x71\xd8\xb6\xed\xe7\x0e\xaa\xaa\xaa\xfc\xf9\x86\ +\x87\x03\x48\x3a\x9d\x7e\x70\xd3\xa6\x4d\x0f\x7a\x3f\x4f\x9f\x3e\ +\xdd\x52\x55\x55\x3b\xf1\xc4\x13\xe9\xee\xee\xf6\x81\xf6\x5e\x98\ +\x61\x18\x24\x7b\x46\x68\x5e\x7f\x12\xd9\x52\x89\x75\xeb\xd6\xa1\ +\x69\x1a\xcb\x97\x2f\xa7\xa1\xa1\x81\x36\xa5\x7d\xc2\x09\x3a\x17\ +\x5e\x78\x21\x93\x27\x4f\xe6\x33\x9f\xf9\x0c\x8f\x3c\xf2\x08\x2f\ +\xbf\xfc\x32\x97\x5d\x76\x19\xbf\xff\xfd\xef\x99\x35\x6b\x16\xc3\ +\xc3\xc3\x6c\xd8\xb0\x81\x58\x2c\xc6\xa9\xa7\x9e\xca\x73\xcf\x3d\ +\x77\xd8\xa4\xe5\x61\x01\x92\x4a\xa5\xfe\x2a\x9b\xcd\x7e\xa3\xa6\ +\xa6\x66\x51\x3e\x9f\xf7\xcb\xfb\xc7\x1b\xaa\xb7\x1a\x2d\xaf\xc8\ +\xce\x03\xc5\xcb\x75\x54\x55\x55\x11\x08\x04\x68\x6a\x6a\x62\xe6\ +\xcc\x99\x0c\x0c\x0c\x4c\x38\xbf\x6a\xfc\x31\x42\xe3\x8b\x93\xbd\ +\xe1\x68\x47\x93\xfc\x92\x52\xb2\x6e\xdd\x3a\x86\x86\x86\x58\xbd\ +\x7a\xb5\x1f\x4b\x79\x52\xe8\x79\x4a\xb6\x6d\x93\x4e\xa7\x39\xeb\ +\xac\xb3\x88\xc5\x62\x24\x93\x49\x32\x99\xcc\xf8\x53\xd8\x30\x4d\ +\x93\xbd\x7b\xf7\x72\xdb\x6d\xb7\x31\x32\x32\xc2\x8e\x1d\x3b\x70\ +\x5d\x97\xed\xdb\xb7\xe3\xba\x2e\xfb\xf6\xed\xf3\x9f\xbd\x50\x28\ +\x30\x38\x38\x78\x44\x2c\xf2\x61\x01\x92\x4c\x26\x7f\x5d\x57\x57\ +\xf7\xcf\xcb\x97\x2f\x67\xf5\xea\xd5\x74\x77\x77\xb3\x79\xf3\x66\ +\xba\xba\xba\x08\x04\x02\x7e\xe2\x7e\xea\xd4\xa9\xf4\xf5\xf5\x91\ +\x4e\xa7\x99\x34\x69\x92\xcf\x7e\xfa\x25\x3d\xe3\x62\x10\xcb\xb2\ +\xc8\xe7\xf3\x3e\x4d\x3e\xfe\x40\xb1\xf1\xb3\x73\xc7\x5e\x5c\x6a\ +\x60\x60\xe0\xe1\xb1\xff\x37\x72\x34\x65\x45\x86\x61\xf8\x52\x9b\ +\xcd\x66\xfd\xef\x1f\x3f\x74\xdf\x53\x4b\xa6\x69\xfa\x07\xd5\x78\ +\xff\xe6\xfd\xbd\xe3\x38\x8c\x8c\x8c\xb0\x6a\xd5\x2a\x5f\x9d\x43\ +\xa5\x9b\xca\x1f\xeb\x31\x6e\x83\xbe\xf1\xc6\x1b\x47\xd4\x42\x77\ +\x24\xe7\x87\x88\x8f\x7f\xfc\xe3\x0c\x0e\x0e\x72\xed\xb5\xd7\x62\ +\xdb\x36\xb3\x67\xcf\xa6\xaf\xaf\x0f\xdb\xb6\xa9\xab\xab\x43\x88\ +\x4a\x32\xa6\xbd\xbd\x9d\x62\xb1\x48\x30\x18\xf4\x87\x24\x7b\xb6\ +\xc0\x03\xc4\x2f\xf3\x19\x03\x61\xbc\x24\xa9\xaa\x4a\x20\x10\xa0\ +\xa5\xa5\xc5\x9b\x3b\x35\xd2\xd9\xd9\xf9\x89\xf1\x31\xce\xf8\xa0\ +\xf0\x70\x54\xee\xc5\x17\x5f\xcc\x45\x17\x5d\xc4\xf0\xf0\xb0\xaf\ +\xb2\x42\xa1\x90\x9f\x8a\xf6\xd4\xd7\x78\x06\x60\xfc\xe1\x67\xde\ +\xdc\xc9\xb1\x0d\x3a\x81\x4c\x1c\x5f\x72\xfb\x76\xd7\x96\x52\x76\ +\x49\x29\xfb\x8e\x37\x20\x7c\xfa\xd3\x9f\xe6\xa1\x87\x1e\xe2\x67\ +\x3f\xfb\x19\x2f\xbe\xf8\xe2\x84\xf3\x38\x0c\xc3\x20\x1a\x8d\xfa\ +\x65\xf7\xde\x91\x0e\x9e\x6b\xec\xa9\xaf\xf1\xa7\xd5\x8c\x3f\xe9\ +\xcd\x7b\x21\xc5\x62\xd1\xaf\x32\x9c\x3a\x75\x2a\xe9\x74\xfa\x0f\ +\x28\x87\x23\x01\xc3\x53\x59\x4d\x4d\x4d\xec\xde\xbd\xdb\x57\xb7\ +\x9e\x5a\x1c\x7f\x14\x85\xf7\x67\x4f\x5a\xc7\xd7\x54\x99\xa6\x89\ +\xae\xeb\xdc\x71\xc7\x1d\x5c\x70\xc1\x05\xfc\xfb\xbf\xff\xbb\x97\ +\x5f\xf7\x59\x6b\x4f\xda\xab\xaa\xaa\xfc\x41\x3d\x52\x4a\x76\xed\ +\xda\x35\xeb\xb8\x4b\x88\xe7\x3e\x7e\xf0\x83\x1f\x9c\xd0\x53\x38\ +\xde\x76\x78\x93\x9d\x3d\xfd\x59\x55\x55\xe5\x9f\xc4\xe3\xed\x4a\ +\x8f\x23\xf2\xa4\xc5\xf3\x46\x3c\x8a\xc4\xa3\xab\xa5\x94\x13\x06\ +\x80\x1d\xcb\x4a\xa7\xd3\xb3\x36\x6f\xde\x8c\x65\x59\xf9\xe9\xd3\ +\xa7\x77\xac\x5a\xb5\xaa\xf6\x53\x9f\xfa\x14\x37\xdf\x7c\x33\xf9\ +\x7c\xde\xef\xb5\xf7\xdc\x5a\x6f\x1c\xdf\x78\x9a\x3f\x93\xc9\x30\ +\x7b\xf6\x6c\xce\x3d\xf7\x5c\xa2\xd1\x28\xe7\x9c\x73\x0e\x1b\x36\ +\x6c\xe0\x92\x4b\x2e\x61\xcd\x9a\x35\x5c\x79\xe5\x95\x3c\xf9\xe4\ +\x93\x2c\x5c\xb8\x90\xda\xda\x5a\x54\x55\xe5\xb9\xe7\x9e\x9b\x30\ +\xed\xfa\x78\x03\xf2\x8b\xee\xee\xee\xed\x8a\xa2\xac\x7e\xef\x7b\ +\xdf\x8b\xa2\x28\xb4\xb7\xb7\x63\x18\x86\x3f\xef\xdc\xd3\xb7\x35\ +\x35\x35\x38\x8e\xe3\x0f\x94\x14\x42\x90\x4a\xa5\xfc\x01\xf5\xe3\ +\x55\x96\x57\xd1\xe7\x7d\x6e\xac\x5a\x5d\x3a\x8e\x23\x6c\xdb\xa6\ +\xa6\xa6\x86\x4c\x26\xa3\x1e\x23\x20\x7e\x4e\xa3\x58\x2c\xba\x77\ +\xdd\x75\x17\xeb\xd7\xaf\xa7\xba\xba\x9a\x91\x91\x11\x7f\xf7\x8f\ +\xb7\x67\x1e\xd5\x32\x3e\xd1\x96\xcb\xe5\xd8\xbd\x7b\x37\x0d\x0d\ +\x0d\x78\xe7\xff\x7a\x6e\xef\xd6\xad\x5b\xb1\x6d\x9b\x9e\x9e\x1e\ +\x7f\x10\x8d\x37\x92\xe9\x88\xec\xdd\xe1\x7c\xc8\x3b\xab\x0f\xd0\ +\x96\x2c\x59\x62\x6d\xdd\xba\x95\x9d\x3b\x77\xd2\xd3\xd3\xc3\x96\ +\x2d\x5b\x58\xb1\x62\x05\x3f\xf8\xc1\x0f\xb8\xf0\xc2\x0b\xe9\xec\ +\xec\x24\x18\x0c\x32\x7f\xfe\x7c\x3a\x3b\x3b\x79\xf5\xd5\x57\xc9\ +\x66\xb3\x0c\x0f\x0f\x13\x8b\xc5\xfc\x72\x53\xef\x04\x01\x29\xa5\ +\xdf\x9f\x18\x8d\x46\xfd\x03\x51\x06\x07\x07\x13\xe5\x72\xf9\xe5\ +\x31\xbb\xb4\x67\x64\x64\xe4\x8b\x1c\x87\x75\xe2\x89\x27\x26\x6e\ +\xbc\xf1\xc6\xfa\x4b\x2f\xbd\x94\xcf\x7e\xf6\xb3\x0c\x0c\x0c\x50\ +\x2a\x95\xfc\x39\xed\x85\x42\x81\x29\x53\xa6\xf8\x07\x9c\x79\xe3\ +\x6f\x55\x55\x65\xe6\xcc\x99\x64\x32\x19\xff\xb4\x87\xb7\x73\x1e\ +\xde\x9a\xe6\xb5\x6d\x9b\x37\xdf\x7c\x53\x1c\x57\x09\x19\xa7\xc3\ +\x15\xcb\xb2\x78\xf8\xe1\x87\xb9\xec\xb2\xcb\x78\xf4\xd1\x47\x49\ +\x26\x93\xbc\xf0\xc2\x0b\x48\x29\x19\x1c\x1c\x64\xdf\xbe\x7d\x95\ +\xb3\xa5\xba\xbb\x27\x64\x10\xbd\xc1\x2f\xe9\x74\x9a\x60\x30\xe8\ +\x0f\x4f\x8e\x46\xa3\xbe\xd4\x18\x86\xc1\xec\xd9\xb3\xc9\x64\x32\ +\x28\x8a\xb2\x2b\x93\xc9\x5c\xc3\x71\x5e\xba\xae\xf3\xe4\x93\x4f\ +\xf2\xd4\x53\x4f\x91\xcf\xe7\x99\x3c\x79\x32\x9f\xfd\xec\x67\xf9\ +\xf4\xa7\x3f\xed\x0f\x4b\xf3\x46\x8d\xc7\xe3\x71\x9f\x36\xff\xfc\ +\xe7\x3f\xcf\x7d\xf7\xdd\xe7\x8f\x05\xf4\xc8\x4e\x4f\x9d\xd7\xd5\ +\xd5\x91\xcf\xe7\x49\xa5\x52\x34\x36\x36\x32\x3c\x3c\x8c\x65\x59\ +\x7d\x8a\xa2\xe4\xff\x2c\x2a\xcb\x5b\xa1\x50\x88\x7b\xee\xb9\x87\ +\xfb\xee\xbb\xcf\x8f\x13\x3c\x75\xd3\xdd\xdd\x8d\x10\xc2\x1f\x76\ +\xe6\xdd\x6c\x55\x55\x95\x4f\xc5\x7b\x27\x2d\x7b\xb6\xc6\x3b\xef\ +\xd0\x8b\x3f\xf6\xec\xd9\x73\x5c\xfb\x00\xdf\xba\x46\x47\x47\x5f\ +\x09\x87\xc3\xd5\x63\xf7\xb6\xf2\x1b\xdf\xf8\x46\xe4\xb5\xd7\x5e\ +\xf3\xef\xcd\xb3\x61\xe3\x8f\xde\x70\x5d\x97\x55\xab\x56\x31\x75\ +\xea\x54\x96\x2d\x5b\xc6\xd3\x4f\x3f\x4d\x75\x75\x35\x5b\xb6\x6c\ +\xa1\xb9\xb9\x99\xad\x5b\xb7\xb2\x72\xe5\x4a\x0a\x85\x02\xed\xed\ +\xed\x1c\x3c\x78\x90\x68\x34\x4a\x6f\x6f\xef\xe5\xdd\xdd\xdd\xdb\ +\x8f\xa4\x0b\xe0\x48\xad\xa5\x36\x73\xe6\xcc\x27\xa3\xd1\x68\x40\ +\xd7\xf5\x0b\x4f\x3c\xf1\x44\x42\xa1\x10\xaa\xaa\xb2\x6f\xdf\x3e\ +\xbf\x05\x39\x1c\x0e\xfb\xd3\x0d\x42\xa1\x90\x7f\x1c\x50\x26\x93\ +\x21\x97\xcb\x4d\xe0\xb9\x82\xc1\x20\x17\x5e\x78\x21\x2f\xbf\xfc\ +\x32\xde\xbc\x75\x21\x04\xed\xed\xed\xaf\x0f\x0c\x0c\x9c\x79\x3c\ +\xc1\x18\xb3\x47\xfe\xcf\x73\xe7\xce\xdd\x7b\xed\xb5\xd7\xce\xbb\ +\xf9\xe6\x9b\xb9\xfc\xf2\xcb\x59\xb6\x6c\x19\x2d\x2d\x2d\x3c\xf9\ +\xe4\x93\xbe\x6a\xfd\x87\x7f\xf8\x07\x1e\x79\xe4\x11\x0c\xc3\xe0\ +\x86\x1b\x6e\x60\xd3\xa6\x4d\x8c\x8e\x8e\xfa\xae\xb0\xd7\x93\xa2\ +\xeb\xba\x7f\x0c\x47\x30\x18\x44\xd7\x75\xba\xbb\xbb\x97\x1d\x3c\ +\x78\x70\xcb\x91\xdc\xe3\x91\xf6\x9f\xd9\x5d\x5d\x5d\x97\xb7\xb6\ +\xb6\x5e\x17\x0a\x85\x38\xf3\xcc\x33\xf9\xc2\x17\xbe\x40\x34\x1a\ +\xa5\xb9\xb9\x99\xa9\x53\xa7\x52\x55\x55\xc5\x8c\x19\x33\xa8\xa9\ +\xa9\xa1\xae\xae\x8e\x48\x24\x82\xeb\xba\x7e\xa0\xb5\x72\xe5\x4a\ +\x02\x81\x00\x0d\x0d\x0d\xc4\xe3\x71\x82\xc1\x20\xd1\x68\x94\xb1\ +\x81\xcd\x6f\x6e\xdf\xbe\xfd\x9f\xb6\x6f\xdf\xfe\x19\xe0\x2b\xc7\ +\x5b\x3a\xc6\x83\x31\x26\xa1\xca\x0b\x2f\xbc\xc0\x25\x97\x5c\x82\ +\x10\x82\x7b\xee\xb9\xc7\x3f\x9f\x70\xc3\x86\x0d\x18\x86\xc1\x15\ +\x57\x5c\x41\x22\x91\x40\xd7\x75\x7e\xf9\xcb\x5f\xd2\xdd\xdd\x4d\ +\xa1\x50\xa0\x58\x2c\x4e\x38\x39\xc7\x73\xed\x43\xa1\x90\xf4\xcb\ +\x91\x5c\xf7\x88\xdd\xc3\xa3\x3a\x2d\x5a\xd3\xb4\x80\x10\x82\x07\ +\x1f\x7c\x90\x87\x1e\x7a\xe8\x0f\xfe\xfd\xe0\xc1\x83\x7f\xd4\x39\ +\x78\xab\x1b\xeb\x38\x0e\xbf\xfd\xed\x6f\xbd\x49\x6f\xbb\x72\xb9\ +\xdc\x7f\x02\xef\x58\xb6\x7f\x3c\x56\x36\x9b\x95\x9e\x8a\x12\x42\ +\xf0\xfc\xf3\xcf\x73\xfa\xe9\xa7\xb3\x63\xc7\x0e\x36\x6c\xd8\x40\ +\x7d\x7d\x3d\x0f\x3e\xf8\x20\x0f\x3e\xf8\x20\x77\xdf\x7d\xb7\xef\ +\xba\x7b\x41\xaf\x77\xc2\x90\x97\xbe\x1e\x53\x6f\xa2\xad\xad\xed\ +\x5c\xc7\x71\xf6\xd4\xd5\xd5\x25\x8e\xf4\x9e\x8e\xca\xc1\x0f\x85\ +\x42\xb1\xba\xba\xba\xcf\x85\x42\x21\x17\xb8\x2a\x1c\x0e\x2f\x3e\ +\x1c\xbd\xef\x4d\x7a\xf0\xa6\x3c\x7b\x99\x36\xcf\xdf\x4f\xa7\xd3\ +\x6b\x7a\x7a\x7a\xde\xcf\x5f\x7e\x45\x16\x2f\x5e\x5c\xf0\xfa\x45\ +\x74\x5d\x67\xe9\xd2\xa5\xec\xdb\xb7\xcf\x77\xc9\x0f\xc7\x7d\xf5\ +\xf8\xb1\xed\xdb\xb7\xcf\x2d\x14\x0a\xed\x47\x73\x23\xc7\x3c\x38\ +\xaa\xb9\xb9\xf9\xe7\x4d\x4d\x4d\xd7\x1e\xce\x5c\x73\x0f\x14\x8f\ +\xce\xae\xa9\xa9\xa1\x50\x28\x14\x5b\x5b\x5b\xa3\xe3\xbe\x8f\xfe\ +\xfe\xfe\xbf\x34\x20\xc1\x96\x96\x96\x6d\xf1\x78\x5c\xe4\xf3\xf9\ +\x48\x63\x63\xe3\x09\x52\x4a\x0a\x85\xc2\x61\x8f\x90\x2d\x14\x0a\ +\x98\xa6\x79\x9f\xeb\xba\x56\xb9\x5c\xfe\x8f\xa1\xa1\xa1\xd1\xff\ +\x2b\x80\x00\x81\xb1\xef\x09\x86\x42\xa1\xa5\x87\x1b\xd7\x78\x51\ +\x7b\x38\x1c\x4e\x64\x32\x99\x5d\xfc\x3f\xb2\x82\xc1\x60\x6d\x38\ +\x1c\xfe\x47\xd7\x75\x9d\x23\x60\x08\x64\x20\x10\x48\x9e\x7c\xf2\ +\xc9\xff\xf3\xc2\x0b\x2f\x48\xde\x5d\xef\xae\x77\xd7\xbb\xeb\xdd\ +\xf5\xee\x7a\x77\xbd\xbb\xde\x5d\xff\x8f\xad\xff\x03\x21\xf6\x70\ +\xa0\xc1\x03\x97\x85\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\ +\x82\ +\x00\x00\x7e\xd7\ +\xff\ +\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x00\x00\x01\x00\ +\x01\x00\x00\xff\xdb\x00\x43\x00\x04\x02\x03\x03\x03\x02\x04\x03\ +\x03\x03\x04\x04\x04\x04\x05\x09\x06\x05\x05\x05\x05\x0b\x08\x08\ +\x06\x09\x0d\x0b\x0d\x0d\x0d\x0b\x0c\x0c\x0e\x10\x14\x11\x0e\x0f\ +\x13\x0f\x0c\x0c\x12\x18\x12\x13\x15\x16\x17\x17\x17\x0e\x11\x19\ +\x1b\x19\x16\x1a\x14\x16\x17\x16\xff\xdb\x00\x43\x01\x04\x04\x04\ +\x05\x05\x05\x0a\x06\x06\x0a\x16\x0f\x0c\x0f\x16\x16\x16\x16\x16\ +\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\ +\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\ +\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\xff\xfe\x00\ +\x10\x54\x69\x6d\x65\x20\x66\x6f\x72\x20\x4c\x75\x6e\x63\x68\xff\ +\xc0\x00\x11\x08\x02\x00\x02\x00\x03\x01\x22\x00\x02\x11\x01\x03\ +\x11\x01\xff\xc4\x00\x1b\x00\x00\x02\x03\x01\x01\x01\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x02\x03\x01\x04\x05\x00\x06\x08\xff\ +\xc4\x00\x44\x10\x00\x02\x01\x02\x04\x04\x04\x03\x07\x02\x04\x05\ +\x04\x01\x05\x01\x01\x02\x03\x00\x11\x04\x12\x21\x31\x05\x41\x51\ +\x61\x13\x22\x32\x71\x42\x81\x91\x14\x23\x52\xa1\xb1\xc1\xd1\x62\ +\xe1\x06\x33\x72\xf0\x24\x43\x82\x92\xf1\x15\x53\x73\xa2\x25\x34\ +\x35\x54\x63\x93\xa3\xff\xc4\x00\x19\x01\x01\x01\x01\x01\x01\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x03\x04\x05\ +\xff\xc4\x00\x21\x11\x01\x01\x01\x00\x03\x01\x01\x01\x00\x03\x01\ +\x01\x00\x00\x00\x00\x00\x01\x11\x02\x21\x31\x41\x12\x51\x22\x32\ +\x61\x71\x42\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\x11\x00\x3f\ +\x00\xfa\x73\xfc\x3c\xe0\xa6\x23\x07\x32\x67\x92\x16\xcc\xb9\xc5\ +\xcd\xbf\x5a\xb1\x32\xca\xaa\x5e\x17\xce\xa0\x7a\x1f\x5b\x0e\xd5\ +\x9f\x23\xb2\xc9\xf6\x98\x6e\x1c\xa8\x0c\x47\x50\x74\x3f\x3a\xbd\ +\x82\xc5\x26\x29\x43\x0b\x09\x47\xa9\x3a\xfb\x57\xca\x97\xe3\xd5\ +\x7f\xae\x86\x48\xa6\x8b\x35\x95\x18\x1b\x10\x4f\xe9\x44\x6e\x0d\ +\x8d\xfe\xa6\xaa\x4e\xf2\x61\x84\xb0\xe5\xf2\x48\x6e\x1a\x9b\x83\ +\x90\xcb\x85\xbb\x6a\x50\xe5\xbf\x5a\x74\x58\x6f\x97\xa0\xa9\x0a\ +\x0d\xb5\x00\x93\x61\xae\xe6\x80\x9a\xe6\xf3\x44\xc8\x5b\x2d\xfd\ +\x27\xa1\xa8\x0d\x49\xd8\xb1\xa6\x21\x1c\xd4\x30\x3b\x83\xad\xe9\ +\x7e\x73\x1a\x99\x4a\x99\x2d\xe6\x20\xef\xd0\xd0\x7d\xe6\x6b\xf4\ +\xfa\x54\x8d\xc3\x48\x22\x95\xf0\xb9\xf2\xe5\x6f\x21\xd8\x51\xba\ +\x46\xc7\xcf\x18\xbe\xf7\x53\x63\x59\xf8\xec\xdf\x6b\x7c\xdb\x93\ +\x7a\xbb\x87\xb8\xc2\x47\x98\xdc\x90\x48\x3d\xa9\x94\x9f\x11\x44\ +\x16\x8d\x42\xdf\x73\xcc\xfc\xe8\x89\x04\x52\x41\xa9\x56\x07\x4b\ +\xfb\x53\xa0\xdc\xce\x08\x2a\xda\x8a\xcb\xe2\x03\xc3\xc7\x4a\x8a\ +\x6c\x03\x6d\xbd\x68\xc6\x0b\x38\x51\xcc\xda\xb2\xb8\x8c\x82\x4c\ +\x7c\xae\xb7\xb1\x6e\x74\x72\xf0\xc0\xec\x6f\x7b\x93\xce\x8b\x0d\ +\x27\x85\x88\x49\x00\x00\xab\x5e\xf6\xab\x58\x3c\x22\x18\x95\xe6\ +\x04\x97\xf4\xa8\x36\xb0\xea\x6a\x31\x78\x03\x94\xbe\x1d\xf3\x00\ +\x2e\x55\xb7\x1f\xcd\x67\x29\xd6\x93\x32\xba\x87\x8d\xae\x8d\xa8\ +\xa5\x3b\x00\x7a\x9e\x95\x9d\xc3\x71\xde\x00\xf0\xa6\x1f\x76\x5a\ +\xc4\x73\x53\xd6\xb4\xbd\x3a\x83\x70\xda\x86\x1c\xeb\x72\xeb\x38\ +\x15\xb0\xf4\xef\x52\xa1\x6c\x43\x2a\xb0\x3b\xdc\x57\x7c\xbe\x94\ +\x24\xf7\x1f\x5a\x90\xd4\x42\xa3\xcb\x12\x0f\x6b\xff\x00\x35\x24\ +\xa9\x50\xa0\x00\x06\xc0\x0d\xa9\x57\x27\x9d\xba\x69\x44\xa4\xfc\ +\xc5\x5a\x85\x1a\x90\xf7\x36\xb5\x54\xe3\x99\x1b\x18\x3c\x48\xd1\ +\xfe\xed\x75\x61\xda\xae\x29\xaa\x1c\x70\xff\x00\xc6\x8f\xfe\x35\ +\xfd\x2a\xe5\xe1\x9e\xab\xc6\x17\x35\x91\x42\x03\xba\x8d\x98\x7e\ +\xc6\xb5\x78\xba\x80\xd1\x95\xd8\x2e\x5b\xf5\xaa\xbc\x12\x11\x28\ +\x92\x47\x51\xa7\x95\x75\xd2\xe6\xac\xe3\xbe\xf3\x02\x8e\x3e\x12\ +\x2e\x2f\xce\xd6\xfd\xa8\x93\xa5\x7d\x54\xb8\x03\x7a\xec\xca\x7e\ +\x21\x4b\xf8\x87\x6a\x25\xbd\x0b\x13\xb9\x04\xec\x3b\x6e\x6b\x9a\ +\x8a\xd4\x2c\x39\xd4\x80\x47\x31\xbd\x06\x30\xe6\xc0\xca\xed\x9b\ +\x3a\x5b\xce\xbb\x81\xad\xff\x00\x6a\x61\xa8\x55\x0c\x59\x1a\xd9\ +\x64\x52\xa6\xf5\x12\x7f\xc3\xae\x35\x8d\xe4\x42\xc6\x45\x60\xca\ +\x2d\x98\x58\xef\xde\xb4\x25\x5b\x12\x1b\x4d\x6d\x58\x5c\x2d\x12\ +\x3e\x26\x60\x9d\x6d\x73\x6c\xc7\x4d\x79\x56\xfc\x8b\x93\x10\x63\ +\x72\x58\x91\x74\x66\xdc\xf6\xa3\x87\x70\x5f\x55\x9f\x43\x61\xa9\ +\xed\x43\x6b\x6f\xb9\xab\x24\x03\x4b\x75\xa5\x69\x40\x51\x90\x0a\ +\x65\x62\x74\x37\x52\x37\x53\xd4\x57\x05\xae\x22\xf5\x2d\x49\xb6\ +\xed\x6b\x7e\x35\x1f\xa8\xe5\x43\xe2\xc4\x08\x50\xfe\x23\x1d\x95\ +\x2b\x85\xd4\xdc\x13\x7a\x25\x20\x12\x42\x28\x62\x2c\x58\x0d\x6a\ +\x43\x65\x2f\x13\xa8\x8a\x40\x59\x2d\xc8\xfe\x95\x9a\x3c\xad\x60\ +\xac\xec\x3e\x1c\xa4\x0f\x99\x35\x78\x12\x0d\xc6\xe2\xaa\x71\x04\ +\x64\x93\x30\x27\xc3\x7d\x46\xba\x03\x45\x51\xc1\xb7\xbb\x06\x62\ +\x2c\x48\x16\x00\x74\x02\xac\xf0\xd9\x15\x49\x85\x8e\x8e\x7c\xbd\ +\x8d\x67\x83\x46\xad\x6a\x25\x6a\xc6\xb9\x1a\xd7\x0b\x83\x71\xca\ +\xab\xe1\xb1\x4b\x22\x65\x93\xd6\x07\xab\xf1\x7f\x7a\x31\x20\x2c\ +\x43\xe9\x6d\x81\xad\xeb\x18\xa1\xc7\x11\x17\x1c\x4c\x7a\x19\x14\ +\x35\xba\x13\x56\x38\x2c\xb7\x8d\xb0\xa7\x65\x05\x90\xfe\xb4\x9e\ +\x3f\x28\x6c\x4c\x68\x2d\x71\x18\xd7\x99\xbd\x17\x04\x04\x45\x34\ +\xa7\x73\x65\x1d\x7a\xd6\x3f\xfa\x6b\xe2\xe3\x9a\x84\x01\x89\x42\ +\x4d\x9f\x43\x42\x58\x5e\xd7\xd7\xa5\x09\x6e\x95\xa6\x41\x26\x26\ +\x31\x03\x86\x3f\x7c\x01\x51\xa6\xe7\xad\x23\x86\xe1\x8c\x83\xc6\ +\x95\x88\x04\xd8\x2d\xae\x5a\x83\x8a\xa9\x13\x78\xc0\x8b\x4a\x6f\ +\x6e\x95\x67\x0f\x2f\x8d\x1a\xac\x4a\xd0\xaa\x8b\x33\xff\x00\x15\ +\x9f\x6f\x6d\x7c\x5c\x67\x55\xd6\x42\x16\xda\x05\x1a\x9f\xa5\x04\ +\x99\xe7\x50\xa6\xf1\x45\xbe\xbb\xb5\x02\x14\x8c\x5a\x21\x6e\xad\ +\xf1\x1f\x9d\x71\x90\x03\xa9\x37\xf6\xad\xeb\x23\x48\x9a\x31\xf7\ +\x13\x1e\xeb\x20\xd0\xd1\x78\xae\x83\xfe\x22\x2c\xa3\xf1\xa6\xd4\ +\xb5\x95\x76\xd4\x7b\x8a\x62\xb8\xea\xba\xf2\x3c\xea\x46\x73\xd0\ +\xdc\x1d\x88\xe7\x52\x80\xad\xd0\x00\x5c\x1b\x12\x76\x5f\x7f\xe2\ +\x94\x09\x51\x68\xe6\x55\x5e\x4b\x6b\x95\xf6\x34\x48\x6c\x81\x40\ +\xb2\x8b\x9b\x53\xa8\xdb\xc9\xcb\x10\x49\xfc\x2c\xa3\x2d\x03\x62\ +\x10\x3e\x49\x94\xc4\xdd\xb5\x53\x42\x5a\xba\x40\x25\x89\xa3\x6d\ +\xac\x48\x3d\x2d\x56\xa3\x1a\x45\x44\x32\x31\xba\x81\x7d\x39\xd5\ +\x19\xe6\x97\x13\x32\x85\x51\xd1\x54\x1d\xaa\xd4\x66\xd8\x78\xd4\ +\x8f\xf9\x60\x10\x45\x70\xc8\xa6\xe9\x1a\x21\x3a\x5c\x51\x50\x62\ +\xc3\x28\x60\x1d\xf3\xb3\x68\x75\xda\xf5\x54\x48\xfe\x3e\x43\x2b\ +\x65\x24\xa9\x3f\x95\x5d\x8c\xfd\xea\xfb\x8a\xcc\x9c\xda\x57\xff\ +\x00\x51\xa2\xd3\x1d\xc3\x6d\xf6\x93\x98\x5c\x05\x3a\x75\xa5\x63\ +\x70\x46\x3b\xe2\x30\xac\x4a\x83\x7c\xbc\xd6\xbb\x86\xb9\x18\xc5\ +\x5f\xc4\x32\x9f\xa5\x5e\x85\xf2\xbd\xef\xd4\x1a\xcc\xee\x35\x55\ +\xa1\xe2\x90\xa2\x78\x38\xe9\x14\xc8\x79\xef\xcb\xe2\xa7\x60\xd3\ +\x26\x0e\xf9\x95\x83\xbd\xee\xa7\x41\x61\xfd\xeb\x17\xfc\x49\xc3\ +\x8c\x0e\x31\x50\xa9\x31\xc9\x7c\xd6\x37\xb1\xae\xe0\xd8\x99\xe1\ +\xe1\xb6\x8a\x42\xa1\x24\xb6\x52\x34\x37\xd7\x5a\xcc\xe5\x65\xca\ +\xb3\xae\x9b\x6e\xf6\xd1\x6c\x68\x4e\x6b\xf9\xaf\x7a\xa0\x9c\x4b\ +\x12\x18\x1f\x0e\x0f\xfb\x05\x13\x71\x4c\x4b\x10\x7c\x38\x7f\xec\ +\x15\xaf\xd4\x18\xd3\x43\x70\x0f\x5a\x2b\x58\xd5\x7c\x06\x26\x3c\ +\x62\x15\x0b\xe1\xc8\x2e\x72\x03\x70\x45\x34\xe7\xb5\x81\xd2\xb4\ +\x30\x73\x42\x93\x15\x2e\x4a\x95\xd2\xe0\x6e\x28\xa2\x8d\xa2\x4c\ +\xb1\x48\x1d\x7f\x03\x8b\x7d\x0d\x04\x57\x53\xae\xa0\xfe\x54\x38\ +\xfc\x60\xc3\x1f\x0e\x34\x57\x92\xda\x96\xd4\x2f\x6a\x91\xe4\x82\ +\xac\x40\x2a\x40\xf3\x29\xdc\x7f\x6a\x35\x46\x71\x70\x85\x87\x61\ +\x58\xd2\x71\x0c\x49\x95\x9f\xc4\xc8\xea\x97\x19\x74\x02\xda\xdb\ +\xfd\xf5\xa3\xc5\x62\x67\x32\x12\xd3\x39\xb0\x07\xd5\xf3\xab\xf5\ +\x17\xe6\xb4\x71\xb8\x85\xc1\xc4\x4b\x79\xe4\x20\x80\xb7\xf4\xf2\ +\xd6\xb2\xf8\x72\x3e\x27\x14\x91\x90\x3c\xcd\xa9\xb5\x01\xbb\xef\ +\x7d\x79\x5f\x53\x5a\x9c\x1f\x0c\x70\xf0\x99\x9a\xf9\xdc\x59\x54\ +\xe9\x61\xd6\x8f\xf6\xa7\xc8\xb6\xe5\x73\x1c\xa2\xc3\x61\xed\x50\ +\x09\x0d\x70\x6c\x6a\x06\xdb\x1f\xa5\x4d\xbb\x37\xd2\xb6\xca\x8f\ +\x19\xc3\x02\x46\x2a\x35\x16\xd9\xc0\x1e\x93\xd6\x83\x84\xe3\x15\ +\x41\x86\x66\x61\x1b\x7a\x58\x8d\x14\xd6\x88\x3b\x82\x0d\x98\x59\ +\xae\x39\x56\x46\x3b\x0c\xd8\x69\xb2\xda\xe8\x7d\x27\xa8\xac\xde\ +\xae\xc6\xa7\x7d\x35\x9d\x48\xb0\xb8\x20\xf3\x06\xe0\x8a\xeb\x5a\ +\xb1\xf0\x38\xa9\xb0\xc0\x04\x71\x6e\x68\xfb\x1a\xbb\x17\x16\xc3\ +\xb8\x1e\x2c\x45\x49\x3a\xe5\x3b\x55\x39\x41\x8b\x55\x23\x71\xdb\ +\x5f\xf7\xfe\xf9\x50\xc5\x2e\x1e\x60\x0c\x53\x29\xec\x74\x34\x44\ +\x32\xee\x08\x27\x5a\xd0\x48\x36\xac\xfe\x38\x6f\x8d\x5f\xfe\x35\ +\xfd\x2a\xfa\x02\xcc\x00\xdc\x9a\xcd\xe2\xb2\x2c\xb8\xd3\x93\x50\ +\xa0\x28\x3d\x6d\x47\x2f\x0c\xf5\x7f\x84\xa8\x5e\x1c\x08\xbd\xdd\ +\xc9\x3f\x2f\xfc\xd3\xb1\x0b\x9e\x1c\x42\x87\xf4\xb6\x6b\x5b\x9f\ +\x4a\x5f\x0e\x42\x9c\x3e\x3c\xc4\xf9\xae\xc0\x76\xd3\xf8\xa6\xb2\ +\x33\x33\x34\x4c\x15\xdd\x6c\x41\xd8\xd6\xa7\x81\x9a\xa0\x58\x7b\ +\x5e\x8d\x45\x71\x8d\x94\x90\x45\x99\x7c\xae\xbc\xd4\xd4\x81\x58\ +\x29\x14\x2d\x72\x3c\xba\x5f\x99\xa2\x61\xa8\x53\xcf\x5a\x83\x50\ +\x2d\x87\xbf\xd6\x81\xb5\xdf\x5e\xc6\x98\xfb\xd4\x11\x65\x66\xcb\ +\x98\xa8\xbe\x51\xce\xa3\x15\x78\xa6\x1c\xe2\x62\x13\x46\x01\x96\ +\x31\x66\x00\xea\xc3\x91\xab\x03\x12\x24\x68\x0b\xb1\x19\x72\x80\ +\xe0\xe9\xca\xd7\xe9\xd2\x83\x0d\x24\xf2\x44\x25\xcf\x0c\x77\x24\ +\x0f\xbb\xd6\xba\x7c\x1e\x21\xf0\x4c\xf0\xe4\x66\x6b\xa9\xfa\xdf\ +\x4a\x3f\xec\x2d\x19\x90\xac\x84\x11\x6e\x63\xda\x82\xb3\xb8\x57\ +\x11\x95\x30\x82\x2c\x4a\x67\x11\xbe\x43\x7d\xc0\xde\xb4\xe3\xc9\ +\x2c\x62\x48\x5b\x3a\x1f\x91\x1e\xf4\xcb\xbe\x0b\x30\x04\x0a\x16\ +\x02\xd4\xc6\x68\xc7\xc4\x5b\xba\xad\xc7\xd6\xa0\xa8\xb0\x20\x82\ +\x0e\xc7\xad\x40\xa2\x05\x08\xb5\x31\x96\x84\x8b\x54\x90\x68\x5d\ +\x16\x58\x8c\x6c\x6d\xcc\x1e\x95\xcd\xa6\xa6\x87\x29\x27\x36\xa0\ +\xde\xf5\x15\x29\x50\xc7\x21\x46\xdd\x4d\xa8\x41\xe9\x57\xb1\x11\ +\x89\xd4\x5c\x59\xc6\xc7\xaf\x6a\xa2\xc0\xab\x15\x61\x62\x37\xac\ +\x59\x8d\x4a\x90\x4d\x3e\x2c\x49\xf4\xcb\xa8\xda\xe3\x71\x55\x6f\ +\x5d\x7a\x34\xa7\x8f\xc8\x3e\xd0\xb6\xd4\x78\x6a\x01\x1b\x5e\xd5\ +\x73\x87\x00\x38\x54\x40\xf3\x66\xfd\xab\x33\x8a\xbb\xae\x1e\x2c\ +\x4a\x00\x42\xf9\x25\x16\xf5\x74\xbd\x68\xf0\xf9\x23\x6e\x15\x1f\ +\x86\x49\x0a\xc7\x97\x5a\x65\xff\x00\x2a\x3e\x1a\xd6\xe5\xa1\xa8\ +\x0e\x08\x25\xae\x00\xde\x96\xcf\x6e\xbf\x4a\x28\x88\xf2\x86\x1a\ +\xb4\x83\xf2\xb9\xfd\x85\x68\x25\xd5\x64\x70\xf3\x29\x27\xe1\x4b\ +\xe8\xa3\xa5\x10\x60\x14\x28\x00\x01\xb0\x14\xbb\xeb\x5d\x7a\xba\ +\x43\x2c\x6d\xa5\x72\x30\xca\x29\x6c\x6d\xef\xca\xb8\x69\xa5\x5a\ +\x8e\x06\x89\x5a\x92\x0d\x12\xb5\x29\x65\x5a\x8c\x30\x35\x5d\x4d\ +\x12\x35\x4c\x9f\x5c\x40\x24\xa6\xe0\x7a\xf5\xff\x00\xeb\xfc\xd0\ +\x17\x2a\x42\x8b\x67\x6f\x48\x3c\xbb\xd4\x82\x15\x02\x8f\x48\xff\ +\x00\x77\xa9\x08\x9b\x9b\xd4\x11\xde\x84\x3d\xf6\xd6\xa0\xbd\xb7\ +\x23\xeb\x52\x31\x48\x5b\xb1\x36\x0a\x09\x27\xa5\x63\x3b\x8b\xeb\ +\x7b\x9e\xd5\x7f\x1d\x2e\x5c\x26\x50\x48\x69\x3f\x21\x59\x6e\xc1\ +\x98\xef\xd0\x56\x79\x56\xb8\xc1\xe0\x64\xf0\xf1\x68\xcc\x35\x0c\ +\x34\xeb\x5a\x39\x7c\xe5\x17\x5d\x6d\x59\x4e\x03\x32\xdb\x42\x35\ +\xbd\x6a\xc2\x56\x58\xf3\xa9\xf5\x8b\x36\xba\x8e\xbf\x90\xfc\xea\ +\xe2\x68\x64\x4f\x1a\x42\xc5\xc0\x86\xd9\x00\x23\xd6\x3a\x8a\xa7\ +\x2f\x0c\xf0\x30\xe5\x70\x65\xa5\x42\xd9\x9a\xfe\xa1\xa7\x4a\xba\ +\xc7\x31\xe9\xd2\xdc\xaa\x23\x2c\xb2\x7a\x8f\x63\x4d\x92\x86\x3b\ +\xa3\xa7\xad\x19\x7d\xc5\xa8\x49\xb0\xbd\x6f\x78\xae\x48\x56\x39\ +\xb9\xf9\x85\xff\x00\x5a\x5c\x98\x4c\x14\xda\x98\x8c\x6d\xf8\x90\ +\xfe\x76\xac\xfe\x3f\x87\x59\x38\x49\x64\xc3\xe2\x04\xcb\xb8\x37\ +\xb5\x6c\x61\xf1\x98\x4c\x42\x66\x0f\xe0\xb7\x30\xfb\x7c\x8d\x52\ +\x9f\x86\x4c\x83\x3c\x4c\x26\x5e\x76\xdc\x7c\xaa\xab\x2b\x29\x21\ +\x94\xa9\xee\x2d\x54\xde\x2b\x25\x6c\x4b\x8c\x82\x05\xbc\x72\x2c\ +\xb2\x7c\x39\x76\x15\x9a\x03\x4b\x29\x21\x49\x66\xd7\x4d\xeb\xb0\ +\x78\x69\xb1\x0f\x68\xd0\x91\xcc\xf2\x15\xb1\x82\x85\x30\x89\x64\ +\x21\xa4\x3e\xa7\xfe\x29\x9b\xc8\x75\x08\x83\x85\x46\xb1\xb0\x9d\ +\xdb\x33\xa9\xba\x0f\xad\x89\xf9\x55\xb6\x83\x0c\x14\x2f\xd9\xe3\ +\x6f\x28\xd5\xb5\x3b\x51\x2f\x99\x48\xe6\xde\x50\x7d\xcd\xbf\x9a\ +\x97\x20\xb9\x23\x6a\xdc\x92\x33\xb4\x2a\xb0\x2b\x02\x30\xd1\x29\ +\x1b\x10\x2f\x4d\xb9\x66\x24\x9b\x93\x4b\x8f\xcc\xc4\x8e\x5b\x53\ +\x29\x89\x1a\xe5\xa9\xb1\xae\x16\xe6\x6b\x98\xd9\x49\xed\xa5\x29\ +\xd6\xa8\x3a\xae\x56\x50\xc3\x7b\x11\x7a\x9b\x2d\xb6\xbf\x73\x5c\ +\xbb\x91\xc8\x54\x83\x68\xb6\xf0\x22\x3f\xf4\xd4\x18\xb0\xcc\x7c\ +\xf8\x48\x4f\xfd\x34\xc0\xb6\xa8\x22\xf5\x62\x55\x93\x87\xe1\x1e\ +\x5f\xba\xcd\x13\x5b\xad\xc7\xf6\xa0\x64\xe2\x38\x4d\x98\xbc\x63\ +\x6f\x89\x4d\x5a\x37\x0d\x99\x45\x3a\x37\x36\x0c\xa4\x8b\xd1\x91\ +\x6b\x2a\x4c\x76\x25\x90\xa5\xd5\x2f\xbe\x55\xb1\xaa\xca\x09\x6b\ +\x0d\x49\x35\xb9\x2c\x30\x4b\xfe\x64\x22\xfd\x57\x43\x41\x87\xc2\ +\x61\xe1\x93\xc4\x5c\xce\xc3\x60\xc0\x58\x51\xf9\xa7\x4e\x2a\x11\ +\x55\x00\xb0\x55\x02\xdd\x2b\x80\xa9\x00\x93\x73\xb9\xa3\x51\x6a\ +\xd8\x0c\xd8\x78\xe7\x00\xb1\x2b\x22\x8b\x07\x53\x62\x7b\x1a\xa2\ +\xd1\x49\x1b\xb2\x4c\xcc\x59\x45\xc3\x6d\x98\x75\xf7\xad\x20\x34\ +\xa9\x75\x57\xc8\x19\x43\x00\xd6\xb1\xe8\x7f\xf1\x55\xe3\xa2\x56\ +\x4b\x58\x68\x05\xaa\x37\x15\xa3\x26\x16\x17\x37\x19\x93\xdb\x51\ +\x48\x93\x04\xc3\xd0\xe8\x7d\xf4\xb5\x66\xf1\xa7\x54\x9c\x54\x29\ +\x20\xdc\x55\x87\xc2\xce\x2f\x78\xc9\x03\x98\xda\x97\xe1\x3d\xfd\ +\x24\x77\x22\xb3\x94\xe9\x4e\xa1\x73\x46\xa2\xc0\x79\xd7\x4e\x47\ +\x7f\xce\xad\xe0\x98\xae\x0d\x2c\x6d\xe6\x6f\xda\xab\x61\xe1\x97\ +\x13\x8a\x92\x65\x5b\x46\xab\x91\x6f\xa0\x35\x71\x63\x11\xc2\xb1\ +\x83\x7b\x5e\xe7\xbd\x31\x52\x78\x86\x14\x62\x90\x98\xc0\x59\x46\ +\xb6\x03\x47\xfe\xf5\x9d\x83\x90\xc3\x8b\x11\x9f\xf2\xd4\x5e\x71\ +\xd7\xb5\x6c\x00\xf9\x08\x8d\x82\xbf\x22\x6b\x27\x1b\x1f\x87\x2b\ +\x8c\x99\x4b\xbe\x63\xf4\x1f\xbd\xe8\xe5\xfd\x53\xf8\xd7\x39\xd5\ +\x82\xa3\x10\xb6\xf2\xdb\x41\x6a\x5a\x15\x71\x29\x4b\x65\x12\x79\ +\x6c\x3a\xd2\x70\x38\x94\x7c\x11\x85\x9b\x2c\x80\x64\x43\xd6\xfc\ +\xbf\x5a\xbb\xe1\xd9\x02\x46\xb9\x94\x6d\x93\x51\x7a\xd4\xec\x2a\ +\xc8\x72\xe9\x6b\x93\xb5\x09\x4e\xac\x6a\xc1\x85\xef\x72\x8d\x7e\ +\xca\x68\x1d\x0a\x9b\x10\x47\xb8\xa3\x11\x05\x05\xef\xb9\xee\x76\ +\xa8\x2b\x4d\x22\x81\x8e\xb4\x22\x8a\xd2\xe7\x84\x4c\x08\x26\xce\ +\x3d\x2d\xd7\xb5\x3c\xda\xd7\xa0\x61\xa5\xf9\xd4\x65\x66\x3a\xb2\ +\x39\x56\xb8\x23\x7b\xd0\x93\x57\x38\xa2\x66\x8c\x4c\x37\x1e\x56\ +\xfd\xaa\x8b\x1b\x0a\xe7\x7a\x6e\x09\x54\x4b\x14\xb0\x1d\x9d\x0f\ +\xc8\x8d\x69\x5f\xe1\x59\xbe\xe9\xa1\x61\xe5\x67\xca\x3b\x5c\x51\ +\xc6\xc1\x23\x9a\x46\xf4\xa4\x64\x9e\xf5\x47\x81\xb6\x48\xd5\x94\ +\xf9\xbc\x71\x6a\xcf\x96\x26\xe3\x1b\x1a\x82\xcc\x27\xc3\x00\x37\ +\x72\x68\xa6\x53\xe3\xb2\x81\xf1\x1a\x01\x63\x2f\x8a\x0f\x96\x21\ +\x95\x3b\x9e\x66\xba\x32\x33\xbf\x5a\x82\x75\xb0\xff\x00\xc5\x0d\ +\xeb\x97\x46\x6d\x77\xa9\x27\xda\xbb\x9d\x75\x70\xde\xa4\x2a\x90\ +\x6a\x39\x54\xd3\x10\xd0\xd3\x03\x64\x42\xf6\xb9\x1a\x28\xea\x4e\ +\xd4\x90\x69\x80\xda\x4d\xae\x22\xd0\x77\x63\xfc\x0a\x52\x63\xfb\ +\xbb\x82\x09\x63\xbb\x6e\x4d\x48\x24\xea\x7e\x40\xd0\x83\x7a\x9a\ +\x90\x89\x07\x71\x52\x2c\x06\x77\xb2\xa8\xde\x84\x15\x55\x2e\xe6\ +\xca\x39\xd5\x3c\x5e\x20\xcc\xd6\x02\xc8\x36\x14\x5b\x83\x03\x89\ +\x93\xc6\x94\xb9\x03\xa0\x1d\x05\x21\x92\xcd\x75\x36\xa3\x35\x04\ +\x8a\xc3\x65\x5f\xcc\xb5\x67\x0d\x2b\xc3\x2c\x65\x6d\xac\x4e\x4d\ +\xc6\xf5\x5d\x56\xee\x14\x6a\x49\xb7\xbd\x4c\x72\x07\xc4\x62\x82\ +\x6a\x11\x15\x45\xba\x03\x44\xa9\x7e\x3c\x5c\x0f\xeb\x56\x43\xdb\ +\x51\x4f\x50\x1c\x5e\x36\x57\x1d\x8d\x64\x0a\x62\x31\x06\xe0\xdb\ +\xda\xb5\x39\x0c\x69\x6c\xda\xe9\x71\x61\x44\x06\x97\xa4\x61\xf1\ +\x80\x8c\xb3\xeb\xfd\x7c\xfe\x75\x64\xa8\xdc\x5a\xc4\x68\x46\x97\ +\xad\xb3\x5c\xb7\x07\x43\x63\x4d\x12\x39\xd4\xe5\x3d\xca\x82\x69\ +\x2c\x72\xdb\x98\xa9\x57\x61\xa9\x1e\x53\x50\xc3\x73\xb1\x16\x26\ +\xc3\xa0\x16\x15\x22\x81\x5b\x37\xa4\x7c\xcd\x18\xbf\x36\x3f\x41\ +\x4a\x74\x8f\x92\x48\x17\xf1\x3d\xea\x09\x62\xd6\x1a\x8e\x75\x2c\ +\xa0\xcb\x19\x37\x25\x41\x35\x23\x7a\x90\xb3\x05\xd0\x2d\x16\xb7\ +\xd5\x8f\xca\x84\x6d\x5c\x09\x02\xd7\x07\xde\x94\xe2\xa4\x9b\x96\ +\xa8\x28\xdb\x02\x2a\x6f\xad\x10\xd4\x8d\x0d\xc9\xe9\x52\x72\xa8\ +\x55\xb5\x16\x8a\x73\x3b\x2a\x29\x1b\xb1\xb5\x04\xf8\xa8\x20\x66\ +\x4d\x65\x91\x77\x51\xa0\x53\xd0\x9f\xda\xb3\xb1\x12\xc9\x34\x85\ +\xdd\xd2\xe7\x90\x52\x40\xf9\xdc\x55\x6e\x26\xce\x42\x40\x2b\x66\ +\x07\x62\xa6\xf4\x8c\x77\x88\x90\x06\x8c\xb2\xea\x73\x5a\x83\x84\ +\x43\x7c\x33\xb3\xb4\x85\x58\xf9\x47\xa7\xf4\xa7\xcb\x87\x71\x1b\ +\x08\xe5\xf2\x91\xaa\xb6\xa4\x53\xec\x4a\x8b\x8e\x21\x72\xcb\x15\ +\xcd\xbd\x6b\xa7\xe5\x56\x70\xe7\x34\x21\x85\xf2\x9d\x45\x72\x44\ +\x90\xc2\x2d\xe6\x2c\x75\xa6\x40\xb9\x70\xca\xa3\x93\x35\xbd\xaf\ +\x54\xd4\xe1\x44\x05\xeb\x82\xd1\x28\x26\xf6\xd0\x6d\x7a\xd2\x48\ +\x5b\x0b\xd4\x8e\xc0\x9e\xfb\x57\x05\x51\xc8\x5f\xa9\xd4\xd4\xee\ +\x69\x65\xda\xfe\x1f\xfe\xd5\xd7\xfb\xc4\x5d\x8e\x62\x6c\x7b\x0f\ +\xef\x47\x6b\x0d\x28\x5e\xe6\x64\x51\xba\xdc\xb5\xb9\x02\x2a\x48\ +\xa8\x22\x8f\x27\xf5\x1f\xca\xa0\xa1\xe4\x7e\xa2\xa4\x00\x0d\xe9\ +\x38\xec\x49\x45\x31\x2b\x12\xe7\x43\xae\xd5\x65\x6e\x1b\x6d\x7d\ +\xeb\x39\x22\x95\x66\x0e\xf0\x3b\x00\x6e\x47\x5a\xcd\xff\x00\x86\ +\x1f\x02\xb2\xe1\x54\x35\xee\x4d\xcd\xeb\x88\xa3\x12\xac\xad\x65\ +\xb8\x6e\x61\x86\xd5\x05\x3a\xde\xa2\x56\xec\x40\xb0\xb6\xe6\x93\ +\x89\xc2\xfd\xa4\x12\x08\xf1\x53\x4d\x46\x8e\x3a\x1a\xb4\x16\xc2\ +\xc0\x0a\x12\x32\xb6\x61\x7d\x4e\xb4\x62\x62\x48\x0a\xb5\x8d\xee\ +\xa7\x40\x16\xc0\x1b\x5a\xfd\x4d\x44\x5e\x3d\xad\x11\x7d\x39\x29\ +\x35\xbe\x58\x93\x72\x17\xe6\xa2\xa4\x3b\x0f\x4d\x97\xb8\x00\x7e\ +\x95\x9f\xc1\xd6\x03\x3c\xe0\x0c\xcf\x28\xbf\x22\x48\xa6\x61\xf1\ +\xf3\xc5\xe5\x73\xe2\x25\xad\x95\x8d\x6b\xc8\x24\x2d\x7b\x86\x1d\ +\x1e\xc6\xdf\x5a\xcc\xe2\xf0\x2a\x05\x96\x34\x20\x31\xb3\x0e\x86\ +\xb3\x65\x9d\xc3\x2e\xae\x12\xaf\x1a\xc8\x9e\x97\x17\x1d\xbb\x50\ +\x30\xa4\xf0\x96\x27\x0d\x24\x7f\x81\x81\x1e\xd4\xf7\x36\x17\xa7\ +\xde\xd9\xa4\xbe\x8e\xbf\x33\x42\xe6\xf4\xc6\x16\xd4\xee\x69\x46\ +\xa3\x09\xc7\xe9\x82\x3d\xd8\x56\x73\x5c\xe8\x35\x26\xae\x71\x77\ +\xb1\x48\x47\xc2\x2e\xde\xe6\xa9\x62\xa7\x4c\x14\x1e\x2b\x1b\xca\ +\xeb\xf7\x4b\x6d\xbb\xd7\x3e\x57\xb6\xa2\xaf\x1d\x9b\xc2\x85\x70\ +\x68\xd7\x6b\xde\x50\x0e\xe7\x90\xa3\xc3\x44\x62\x96\x08\x94\x5d\ +\xa3\x21\x9d\xbb\x92\x0d\x67\x60\x95\xe7\xc6\x78\xb2\x02\xe1\x4e\ +\x76\xef\x5b\x5c\x31\x95\xf1\xf9\xdf\x51\x18\x2d\x6f\xc4\xfc\xcf\ +\xcb\x6a\xe7\x3b\xba\x6a\xd3\xc8\x71\x39\xb2\x02\x88\xc6\xee\xe7\ +\x7f\x61\x52\xcc\x2c\x15\x45\x94\x0b\x01\xd2\x82\xe5\x9c\xb9\xe7\ +\xb5\x41\x35\xd7\x46\x08\xb5\x85\xcd\x70\x3a\x77\x26\x80\xea\x40\ +\x3c\xb5\x35\x20\xd5\xab\x0c\x06\xa6\xf4\xbb\xd4\x83\x56\xac\x30\ +\x1a\x9b\xd0\x03\x5c\xc7\xc8\x6d\x48\x36\x36\xf3\x02\x3e\xa6\xa3\ +\x0e\x4f\x84\x62\x63\x77\x8d\x89\x3a\xef\x7e\x74\x31\x9c\xc4\x5b\ +\x9d\x4a\x10\x59\xa6\xe6\xf6\x0b\xfe\x91\xce\xa4\x60\x34\x59\x95\ +\x10\xbc\x86\xca\x3f\x3a\x05\xb6\xb7\x36\x00\x5c\x9e\x95\x4b\x19\ +\x3f\x8b\x2d\x97\xd0\xbe\x9a\x6d\xc4\x3c\x4e\x21\xa6\x6e\x8a\x36\ +\x14\xb0\x69\x63\x7a\x9a\xe7\xad\x0c\xb5\x01\x3a\xd4\x1a\x83\xb6\ +\xd5\x27\x2b\x59\xb4\xb8\x3c\xaf\x4c\xb2\x87\x18\x85\x40\xa7\x30\ +\x59\x00\xf8\x81\xa1\xf0\xbc\xb6\xbe\xbd\x68\xd5\x5d\xa0\x75\x00\ +\x06\xb8\x61\x7e\x76\x35\x62\x73\xa6\x59\x19\x46\xb6\x24\x5e\xba\ +\xf6\xda\xb9\x87\x89\x69\xd5\x8f\x9c\x93\xa8\xdb\xb5\x72\x86\xce\ +\x41\xb1\xef\x6a\x52\x41\xab\x7c\x3e\x7c\xad\xe1\x39\xf2\x36\xdd\ +\x8d\x55\xd3\x99\x14\x2e\x5c\x37\x31\xd2\xad\xc5\x5b\x0e\x32\xdc\ +\x30\xfa\xd1\x0b\x5a\xd5\x53\x09\x29\x9a\x1b\x31\xf3\xa0\xb6\xa7\ +\x71\x56\x86\x80\x03\x5d\x18\xb0\x43\xb5\x4d\xc2\xa9\x63\xb2\x8b\ +\xd4\x0a\x56\x39\x98\x61\xec\xa2\xe1\x8f\x98\xda\xa0\x6c\x0d\x9e\ +\x1f\x14\xee\xe4\xdf\xb5\xb6\x14\x42\xa8\xe1\xa7\x96\x2f\x2a\xea\ +\xa7\xe1\x3b\x56\x83\x03\x60\x76\xd3\x50\x29\x9d\x9a\xe0\x6a\x75\ +\xa0\x37\xb5\xaf\xad\x12\x85\x03\xaf\xb9\xa4\x08\x0b\xd3\x10\x12\ +\xac\x01\xb3\x5b\xca\x6f\xce\x81\x4f\x73\x44\x46\x9b\x9f\xad\x31\ +\x31\xf1\x0a\xd0\x49\xe1\xce\xad\xab\x12\xb2\x01\xa1\xbe\xb6\x3d\ +\x0d\x5d\xc0\x60\x1d\x8a\xc9\x88\x5c\x89\xbd\xb9\xb5\x5c\x8f\xcc\ +\xb9\x5c\x93\xd6\xfa\xdb\xda\x8a\x16\x24\x34\x6e\xc1\x9a\x33\x6b\ +\xf5\x1c\xa8\x9c\x61\xd1\x46\xd7\x94\x20\x00\x28\x16\x00\x72\xa7\ +\x0d\x28\x10\x5b\x5b\x6b\x46\x2b\x71\x9a\x15\x48\xd5\x8b\x91\x60\ +\x35\x3d\xab\x91\x6d\x1a\x8b\x58\xda\xf6\xe9\x7d\x69\x8c\xb7\x0a\ +\xa7\x62\x75\xee\x00\xbf\xeb\x6a\xe6\x1a\x9d\x75\xa4\x16\xe3\xc8\ +\x7a\xda\xa4\x0b\x00\x3a\x57\x38\xf2\xdb\xae\x82\x8c\x81\x7a\x92\ +\x02\xde\x88\x0b\x54\xd7\x54\x9c\xc4\x2a\x96\x3b\x28\xb9\xa8\x41\ +\x65\xd7\xd4\x75\x63\xd4\xd4\x4d\xfe\x4b\xdc\x5c\x65\x35\x26\xe0\ +\xdb\xa6\xf5\x24\xd4\x13\x6a\x16\xbd\xea\x00\x26\xa4\xe3\xbd\x71\ +\x2d\xc8\xfe\x75\x39\x4d\x2e\x50\xd2\x44\x52\x3b\x00\x77\x73\xb7\ +\xb0\xeb\x52\x55\xe2\x52\xa3\x32\x84\x37\x65\xdd\x87\xe9\x44\x98\ +\xd4\xca\x03\xa3\x16\xe7\x6e\x74\xa9\x30\x53\x2f\xa4\x07\x03\xf0\ +\xd4\x70\xf4\x07\x17\xe6\xf8\x41\x36\x35\xcf\x6e\x95\xb5\x67\x71\ +\x75\x80\x01\xcb\x3b\xd8\x9a\x0c\xe9\x98\xa4\x9f\x76\xdf\x85\xb9\ +\xd3\x8e\xa6\xe6\xb9\x80\x6b\x66\x45\x6b\x6d\x71\xb5\x69\x00\x45\ +\xa6\x9f\x91\xa9\x29\x6e\x67\xf2\xa9\x78\xe3\x65\x39\xa3\x5d\xb7\ +\x02\xc4\x50\xc4\xd9\xe0\x46\xce\x3d\x3e\x6b\x9a\x52\x0a\xeb\xea\ +\x34\xb9\x21\x57\x86\x44\x37\x62\xca\x48\xbf\x5a\x6a\xb2\x35\xc2\ +\x48\xac\x57\x70\x2a\x50\x0c\xe3\xbe\x94\x16\x3f\x0a\x39\x71\x4c\ +\xa6\xde\x64\x23\x5e\xb5\x66\xe0\xc9\xa6\xc2\xa8\xc8\x4c\x38\x9b\ +\x8b\x82\x8f\x71\x7a\xbe\xb9\x58\x67\x8c\xdd\x48\xbd\xeb\x9c\x34\ +\x12\x52\x98\x84\x46\x91\xfd\x2b\xaf\xbf\x6a\x73\x8b\xd6\x6f\x13\ +\x9c\x3b\x78\x69\xe8\x53\xf5\xef\x45\xb9\x14\x21\x4f\x8d\x8c\xcc\ +\xfa\xdc\x96\x3e\xc3\x5a\xc1\xe2\x18\x89\x31\x78\xb2\xe7\x5b\x9b\ +\x28\xe8\x39\x0a\xdb\xc3\xb0\x13\x1c\xc6\xc0\xa9\x1f\x95\x52\x8b\ +\x87\x4d\x83\x66\xc4\x4c\x97\x0a\x6d\x19\xe4\x4f\x5a\xe3\xca\x5b\ +\x1b\x82\xc2\xa1\xc3\x44\xaa\x06\xb1\x83\x24\x96\xeb\xc8\x55\xbe\ +\x10\xa0\x49\x3e\x97\x29\x18\x5b\xdf\xbe\xbf\x9d\x54\x04\x29\x8a\ +\x36\xf5\x4a\x73\xb0\xe7\x94\x6d\xf9\xd5\xae\x18\x24\x2d\x3a\x44\ +\xe3\xc4\xca\x0b\xb7\x25\x37\xda\x9e\x3e\xaa\xb2\xc0\x8f\x50\x23\ +\xde\x84\xef\x40\x1a\x68\x0d\xb1\x0d\x9e\x36\x3a\x38\xd6\xd4\x63\ +\x23\x1f\x2c\xa8\x49\xd8\x66\xad\x00\x8b\x8b\xe9\x7b\x9a\x91\xf4\ +\xa2\x64\x65\x17\x2a\x6d\xd6\xa3\x42\x2a\x28\x6b\x01\x52\xa7\xad\ +\x44\xa6\x28\x55\x5a\x5c\xde\x6d\x94\x6f\x45\x04\xb1\xcf\x71\x1e\ +\x60\x47\x23\xce\xa0\x91\x6e\xf5\xc4\x12\x35\x36\xed\x53\xb5\x48\ +\xda\xb4\x10\x54\x88\x88\x5d\x59\xfc\x8b\xee\x69\xae\x6e\xe6\xdb\ +\x00\x05\x40\x03\xc6\x4e\xaa\x85\x80\xbf\x3b\xef\x43\x23\xac\x51\ +\xf8\x8d\xaf\x41\xd6\xa4\x5f\x10\x97\x22\x78\x2a\x75\x6d\x5b\xf8\ +\xaa\x60\x9a\xe7\x66\x77\x2e\xc6\xe4\x9b\x93\x52\x39\x56\x6b\x43\ +\x02\xa7\x95\x08\x3a\x51\x0d\xeb\x29\x04\x50\xb0\x60\xd7\xb5\xc0\ +\xa6\xd8\x74\xa8\x75\xb8\x22\xfb\xd3\x88\xef\x05\xf9\x21\x3d\xc6\ +\xb5\x24\xac\x0c\x1a\x56\xb3\x0f\x4a\x0d\xc9\xac\xd7\x5c\x4c\x1e\ +\x4b\x48\x8c\xdb\x00\x77\xab\x98\x18\x4e\x1d\x3c\x59\x35\x95\x87\ +\x97\x36\xa5\x7b\xd3\x2a\x31\x87\x84\x8b\x13\x0b\x11\x76\x3e\xe7\ +\x95\x72\x6a\x5a\xdf\x2a\xeb\xf5\xe7\xbd\x4d\xea\x4e\x51\x94\x00\ +\x45\x8f\x5e\xb5\x22\xba\xbb\x2e\x9b\x9f\xad\x21\x31\xb9\x49\x43\ +\x8d\xc7\x3a\xd2\x84\x89\x22\xce\x9a\x8b\xed\xcc\x56\x51\x36\x36\ +\x3a\x53\x20\x91\xd1\xcb\x46\xc4\x5a\x99\x55\x8d\x4b\x54\xa1\x00\ +\x12\xc7\xcb\x6b\x9b\xf3\x15\x49\x71\x92\x81\x62\x15\xbd\xc5\x41\ +\xc4\xcb\x23\x58\x90\x01\xd0\xe5\x00\x56\xb5\x9c\x58\xc2\x61\x85\ +\xbc\x56\x0d\x72\x6e\xa8\x3e\x1e\x97\xa7\x15\xb1\x25\x9e\xc7\x9d\ +\xda\xb3\x56\x79\x64\x46\x57\x91\x89\x89\xb2\x93\xd7\xa5\x40\xd7\ +\x5b\xd1\x2c\x58\xd4\x02\xfa\x06\x53\xff\x00\x50\xae\x60\x41\xda\ +\xb3\x05\x36\x09\xe4\x8d\xb4\x37\x1f\x84\xed\x4f\xe9\x62\xfa\xd3\ +\x06\xd4\xb8\xd8\x3a\x07\x5d\x9b\xf2\xa6\x2e\xd5\xa0\x20\x01\xde\ +\xa0\x69\xc4\xd4\x2e\xc6\x31\x71\xf2\xa2\x5d\xaa\x20\xb1\xe2\x33\ +\x5f\x70\x2c\xbe\xd5\xa4\xb1\xa0\x52\x49\xb0\x1b\x93\x47\x1d\x9a\ +\xc5\x48\x61\xd4\x1a\x4e\x25\x4b\x61\xca\xdf\x42\xcb\x7f\xad\x48\ +\xc3\xc6\x8f\x65\x2c\x17\x9a\xdf\x46\xa5\x91\xe6\x2e\xf7\x43\xa6\ +\xc0\xf6\xbe\xff\x00\xef\xb5\x1e\x45\xb6\xda\xf5\xe7\x5d\x1f\xa6\ +\xf6\xde\x8a\x94\x05\x8d\x43\x66\xd4\x9e\xf4\x43\x7a\x16\x34\x4a\ +\x74\xd6\xa4\x9a\xea\xeb\x8a\x1c\xc2\x94\xe9\x54\xb2\x15\x07\x5e\ +\x55\xc0\xb1\x17\x68\xf5\xff\x00\x58\xa1\x2c\x7a\xd4\x66\xd6\x84\ +\x98\x9d\x1e\xfb\x02\x0e\xa0\x9d\xa8\xb3\x0b\x79\x6c\xdd\xf6\x1f\ +\x5f\xe2\x80\xb2\x8f\x31\x03\xdf\x2d\xeb\xb3\x12\x6e\xdf\x2e\xd5\ +\x21\x9b\x11\xad\xdf\xb5\xac\xbf\xef\xde\xf4\x2e\xe6\xfe\x60\x2d\ +\xd6\xf5\xd7\xbd\x0b\x79\xc6\x50\x7d\xcf\x4a\x92\x6f\xad\x03\xa8\ +\xfb\x44\x72\x58\x5c\xdd\x4f\x7d\x28\xc0\x00\x58\x72\xa8\x27\xfe\ +\x2a\x34\xe8\xa4\x9a\xaa\x75\xaa\x40\xa3\xcb\x50\xc2\xc6\xa4\x5c\ +\xc8\xcd\x19\x55\x60\xb9\xb4\x24\xf4\xa4\xc7\x87\x85\x37\x5c\xe7\ +\xab\x6d\x56\x0d\x09\xd2\x8b\x09\x5e\x16\x49\x43\xc4\xaa\x0d\xac\ +\xcb\x7b\x5c\x51\x33\x0c\xc0\x15\x74\x27\x6b\xda\xc7\xe6\x2a\x49\ +\xa8\x60\x0a\x95\x61\x70\x68\x2a\x7c\x4f\x04\x66\x63\x34\x63\xcd\ +\x6f\x32\xdb\x53\x59\x2a\xf3\xe1\xa5\x25\x4b\x46\xdb\x11\xd2\xb7\ +\x46\x60\xc6\x27\x60\x40\x17\x43\x6d\xfb\x52\x78\x94\x69\x36\x19\ +\xdd\x96\xef\x18\xba\xd8\x7a\x8f\x4a\xc7\x2e\x3b\xdc\x32\xa8\xcb\ +\x8e\x57\x87\xc1\xb8\x49\xd8\x02\x75\xdc\x7f\x35\x9d\x38\x2a\x6c\ +\x45\x88\xe5\x59\xf8\xa9\x1d\xe5\x69\x09\xb3\x5f\x97\x2a\xbd\x04\ +\x87\x11\x82\x59\x08\xf3\x29\xc8\xdd\xfa\x57\x1f\xd7\xe9\xbc\xc1\ +\x61\x20\x32\xbd\xce\x8a\x37\x35\x7c\xb9\x06\xc0\x0c\xbb\x65\x23\ +\x4a\xe5\x8c\x43\x08\x8c\x6f\xbb\x77\x34\x27\x7a\xde\x63\x2c\xdf\ +\xf1\x07\x0e\xcf\x3a\xe2\xa2\x94\x45\x1e\x50\xa7\xa8\xf6\xa6\x70\ +\x22\x82\x39\xa1\x8c\x10\xa1\x6f\x73\xbb\x1b\xef\x57\x27\x8f\xc6\ +\xc2\xcb\x0d\xae\x4a\xdd\x7d\xc5\x65\xf0\x79\x44\x38\xd0\x1b\x69\ +\x01\x43\xaf\x5a\xc5\x92\x72\xd3\xf1\xa2\x48\xca\x54\x8b\xa9\xd0\ +\x8a\x50\x83\x0a\x3f\xe4\x9f\xfb\xcd\x36\x45\x2a\xc5\x48\xb5\x42\ +\x0b\xb0\x1d\x6b\x55\x17\x88\xfb\x98\x0c\xb0\xb3\x26\x52\x01\x52\ +\xd7\x06\x81\x31\x98\x72\x2e\xca\xea\x7a\x0d\x41\xa1\xc5\xbb\xcf\ +\x29\xc3\xc2\x9a\x29\xd7\xa9\x34\x71\x61\x22\x44\xfb\xe0\x5d\x8f\ +\x20\x6c\x05\x1d\xef\x49\x59\xd9\xf1\x78\xbf\x28\xb6\x6d\x85\xf6\ +\x14\xd9\x60\x6c\x32\x89\x92\x4b\xd8\xd8\xe9\x6a\x60\xc3\x45\x71\ +\xe1\x33\xc6\xc0\xe8\x77\xae\xc7\x44\xde\x5f\x1b\x13\x7e\x8b\x60\ +\x09\xa3\x3e\xa3\xa1\x94\x4d\x00\x93\x2e\x53\x7b\x1a\x9b\xda\xa8\ +\xe0\x38\xa6\x0f\x33\x61\x56\x17\x36\x37\x52\xc6\xc4\x9a\x62\xf1\ +\x34\xcc\x73\x61\x11\x11\x7d\x44\xb1\xbd\x33\x94\xfe\xac\x5a\x9a\ +\xcb\x87\x33\x92\x57\xc2\x20\x83\xfb\x55\x4c\x64\xad\x24\xd7\x61\ +\x6b\x01\xa7\x4a\xa9\x8d\xe3\x4d\x89\x4f\x0f\x09\x04\x6a\x11\xae\ +\xaa\xe7\xd5\xdf\x5e\x74\x2f\xc5\x1d\x90\xc9\x16\x1a\x1c\xc3\xd6\ +\x18\x6a\xa7\xb8\xac\xde\x70\xc9\x56\x2a\x41\xe5\x49\xc0\x71\x11\ +\x89\xc4\x24\x32\xe1\xa3\x05\xcd\x8b\x2e\x96\xf9\x53\xf2\x9f\x10\ +\xa2\x82\x4d\xed\xa5\x32\xcb\xe2\x12\xd1\xa8\xa7\xc1\x83\x00\x03\ +\x33\x5b\xfa\x56\xad\x45\x1e\x1d\x76\x88\x1f\xf5\x1b\xd3\x38\x8d\ +\x51\x14\x68\x8c\xc2\xe0\x6d\xb9\xab\x86\x08\x1e\xf6\x4c\xa6\xc4\ +\xe8\x74\xdb\xa5\x67\x62\xa2\xc5\x62\x2f\xe1\x36\x74\x1b\x22\xe9\ +\x6f\x95\x36\x62\xd5\xec\x3c\xb1\x4a\xf3\x0c\xa1\x4b\x1b\xc7\xdb\ +\xda\xa8\xc6\xcd\x98\xa9\xdc\x1a\xb3\xe2\x69\x1e\x1c\xc5\x95\xa2\ +\x6d\x5c\x0e\x55\x5d\x47\x9d\x18\x1b\xe6\x4b\x93\xd6\x8a\xa0\xc5\ +\x10\xa8\x5a\x9a\x88\xb4\xb5\xed\x52\x37\xb6\x95\x0a\x68\x59\x19\ +\xd8\xb0\xd8\x9d\x29\x64\x65\x14\x9b\x9b\xd7\x01\xc8\x0a\x88\x83\ +\xa9\xf3\x03\x6f\xd2\x8c\x6a\x34\x37\xa5\x04\xae\xc3\xa9\xa2\x16\ +\x45\xcf\x6d\x07\xa4\x75\x3d\x05\x43\x0b\x2e\x7b\x85\x09\xa9\x27\ +\xa5\x70\x60\xe0\x4a\xc4\xa9\x22\xc8\xbf\x84\x75\xf7\x35\x27\x22\ +\xf8\x51\xe5\x24\x66\x26\xec\x7b\xd7\x66\x3c\x87\xd6\xac\x43\x84\ +\x77\x50\xc6\xc8\xa7\x9b\x6e\x69\xc9\x84\x81\x46\xa5\x98\xfd\x29\ +\xca\xb5\x48\x13\xf8\x4f\xca\xb9\x58\xb3\x10\x45\xb4\xab\xb2\x61\ +\x52\xc4\xc6\xc4\x11\xc8\xd5\x2d\x4c\x9a\x82\x32\xe8\x6f\x56\x25\ +\xae\x1f\x29\x56\x31\x9d\x9b\x6f\x7a\xbd\x01\xba\xeb\x58\xf9\xd8\ +\x3f\x90\x6c\x77\xad\xa5\xb1\x01\x80\xd0\x80\x45\xab\x5c\x45\x31\ +\x05\xcd\xaa\xb9\x97\x2e\x3d\xa6\xb1\x2b\x9a\xd7\xb7\x2a\xb5\x0f\ +\xa8\x77\xa1\x89\x8a\xc0\x97\x50\x57\x28\xfe\xf5\xb0\x31\x22\x3b\ +\xaa\x23\x06\xbf\x98\xf6\x03\x5f\xd6\x8c\x6b\xf3\xaa\x39\xbe\xcf\ +\x8b\xce\x05\xc1\x1b\x7b\xd5\xd6\x60\xa0\x1e\xa0\x10\x29\x94\x25\ +\x5a\xea\x3d\xa8\xae\x6d\xbd\x2d\x76\xb7\x4d\x28\x81\xa4\x26\x88\ +\x11\x6a\x1b\xd0\x96\xb5\x48\x4c\x45\x09\x34\x2c\xff\x00\x2a\x0c\ +\xe3\x6b\x8f\xad\x1a\x70\xcb\xf7\xae\x2c\x05\x29\x9a\xc3\x5a\x12\ +\xe4\xec\x3e\xb4\x69\xc1\xca\xcd\x75\x03\xad\xea\x73\x6b\x4b\x5d\ +\xfa\x93\xce\x88\x54\x86\x4f\x97\xb5\xf5\x34\xd4\x17\x00\x2e\xdc\ +\xad\x42\x8a\x58\x58\x0b\xde\x80\x2c\xda\xc5\x19\xd7\x62\xdf\x86\ +\x90\x99\xa7\x0a\x08\x89\x73\x11\xbb\x72\x14\x58\x24\x60\x8d\x2c\ +\x9e\xb9\x3f\x4a\x88\xb0\x8c\x8b\xe6\x90\x38\xbd\xec\x05\x81\xf7\ +\xa6\xc6\x7c\xbb\x9b\x8a\x64\xbb\xda\x15\x03\xef\xbe\xd4\x67\x6a\ +\x5c\x84\x09\x3c\xc7\x4b\x5c\x55\x40\x49\xb8\xb8\x04\xd0\x33\x5d\ +\x8a\xda\xdf\x3a\xe9\x65\xb9\xb2\x7d\x6b\x88\x0a\x2c\x3e\x66\x83\ +\x11\x41\x23\x85\x5b\xd4\xbb\x59\x49\xe9\x55\xee\xce\xf7\x35\x9b\ +\x49\x81\x6e\xa4\x1d\x58\x8b\xdf\xa1\xaa\x78\xec\x40\x66\x40\x9b\ +\x2f\xab\xdf\x9d\x5b\x53\xf7\x83\xde\xb2\xb1\x0d\x7c\x64\xeb\x71\ +\x96\xf9\x94\x74\xbe\xf5\x9e\x57\xa3\x18\xdc\x6a\x1f\x07\x18\xf6\ +\x5b\x23\x1b\xaf\x71\x45\xfe\x1c\x90\x0e\x21\xe1\xc8\x7e\xed\x81\ +\x2c\x3a\x5b\x9d\x5e\xc5\xc2\xb8\xb8\x7c\x22\x40\x75\xf4\x13\xfa\ +\x56\x56\x0d\x5a\x0e\x20\x61\x95\x4a\xb3\x02\xba\xf2\xbd\x70\xb3\ +\x39\x6b\x7f\x1e\x8a\x60\x44\x87\x36\xf4\xa3\xbd\x55\xc1\xe3\x8a\ +\x0f\x03\x11\x72\xb7\xd1\x8e\xeb\x57\x19\x48\x20\x8d\x41\xd8\x8e\ +\x75\xd3\x75\x90\x83\x95\x83\x0e\x55\x9d\xc5\xb0\x6c\x92\x36\x22\ +\x11\x78\x98\xdf\x4f\x84\xd6\x8b\x29\x1a\x10\x45\x72\x12\xbb\x73\ +\xde\xfc\xe8\xb3\x54\xac\xfc\x16\x39\x72\x88\xb1\x37\x2a\x36\x7e\ +\x62\xad\x23\xc0\xd6\x29\x89\x8c\xdf\x5d\x4d\x88\xa8\xc4\x61\x30\ +\xb3\xfa\x94\xc4\xdd\x50\x68\x7e\x55\x56\x4e\x16\x6f\xf7\x58\x88\ +\xdb\xb3\x79\x68\xff\x00\x28\x57\xd7\xcc\x09\x59\xa2\xb7\x36\x0c\ +\x29\x12\x62\xb0\x48\x4e\x69\xcb\x11\xc9\x53\x7f\x9d\x51\x7e\x1d\ +\x8b\x52\x09\x8b\x32\xdf\x52\xa6\xf5\x57\x1c\x78\x96\x1f\x10\x50\ +\x61\x7e\xef\xe1\x1e\x1d\xc5\xa8\xbc\xac\xf8\xa4\x5d\xc4\x71\x57\ +\x23\x26\x1a\x31\x10\x23\x56\xdd\xbe\xb5\x51\xdd\x84\xb9\x14\xe7\ +\xc4\xb0\xcc\x4b\x1d\x10\x75\x34\x98\xb1\x2c\x49\x69\xf0\x91\x8c\ +\xbb\xe5\x26\xff\x00\x41\x54\x31\x3c\x59\xa2\xe2\x06\x58\xf0\xec\ +\x88\xde\xa2\x41\x0c\x47\x6e\x95\xca\xf2\xfb\x6b\x58\xb1\x89\xc2\ +\xa6\x1d\xd5\xdf\x10\xac\xc4\xde\xda\xaf\xf2\x68\x31\xf8\xb9\x31\ +\x01\x54\xbe\x60\xa3\x5b\x0b\x02\x7a\xda\x93\x2a\xf8\x89\xe3\xc4\ +\xe6\x44\x6d\xcf\x31\xef\x4a\xbd\x62\xdf\xe1\xc1\x03\x56\xa3\x2e\ +\x71\x38\x42\xba\xc9\x21\x2a\x6d\xbb\x27\x7a\xa8\x0d\x6d\xff\x00\ +\x87\x11\x15\xd3\x13\x3a\x80\x21\xd1\x6f\xbe\xa6\xf4\xf1\x9b\x55\ +\xab\x5c\x23\x87\x36\x1f\x33\x31\xb4\x8c\x37\xe4\x83\xf9\xad\x18\ +\x55\x21\x5c\xb1\xdf\xbb\x1d\xcd\x40\x91\x65\x17\x8e\x55\x23\xa5\ +\xec\x6a\x76\xd2\xbd\x32\x49\xe3\x14\x60\xd1\x03\x4b\x06\x8d\x01\ +\x63\x60\x09\x34\x83\x22\x60\x1a\xe7\x60\x09\x3e\xd5\xd8\x13\x93\ +\x04\xad\xac\x62\xec\xcd\xd6\xdc\xa9\x32\x9c\xc5\x70\xe8\x41\x67\ +\x20\xc9\x6d\x40\x14\xeb\xac\x85\x93\x65\x71\x94\x76\x1c\xa9\x4a\ +\x98\xb9\xd2\x46\x00\x2a\xbe\x5d\xd9\x86\xff\x00\x2a\x59\x66\x73\ +\x76\x37\xa5\xa0\x14\xc1\x58\x68\x42\xa4\x50\xd7\x7c\x27\xda\xa4\ +\x33\xf8\x79\x9e\x42\x8f\x9d\x00\xd0\xd8\x68\x28\x97\x6a\x60\xa2\ +\xe7\x50\x45\xcf\x7a\xea\x95\x3e\x60\x06\xa7\x90\x1b\xd2\x02\xaa\ +\xb2\xe2\x0c\x24\xb3\xac\x76\x39\x07\xc4\xd5\xa1\x87\xc3\xa4\x07\ +\xc5\x94\x03\x21\xe5\xc9\x6a\xbc\x90\x7d\x90\x7d\xa8\x00\x25\x63\ +\x62\x06\xb9\x68\xf0\xb3\x4f\x89\x3e\x75\x40\xa3\x98\x16\xb5\x33\ +\xaa\xaa\xcb\x48\xa4\xdc\xb1\xd7\x99\x15\xc4\x81\xb9\x1f\x5a\x51\ +\x56\x67\x0a\x4d\xc0\xfc\xaa\x7c\x21\x9a\xf7\xb0\xe9\x4b\x26\xd5\ +\x7c\x72\x82\x4c\x80\x00\x6d\xaf\x7a\x70\x04\x68\x18\xfc\xea\x55\ +\x41\x3e\x7d\x6f\xa1\x1d\xaa\x4c\xf1\x7a\xd2\xe1\x6d\x9b\x0c\xc2\ +\xf7\x28\x74\xf6\xac\xe9\x30\xec\x98\x96\x41\x7c\xbc\xb5\xb5\xe9\ +\xd8\x1c\xd0\xe2\x75\x07\x2b\x0b\x1a\xb8\xf5\x5a\xad\x50\xc5\x41\ +\x3d\x05\xc5\x14\x63\x2d\xd0\xdb\xf1\x0f\xdc\x7d\x7f\x5a\x50\x0f\ +\x7c\xad\x6b\x5f\x53\x45\x24\x81\x02\x3b\x1b\x0c\xc5\x49\xec\x45\ +\x74\x64\xae\x27\x1d\xd2\x36\x52\x6f\xaa\xfc\xea\xc3\x00\xa7\x28\ +\xdc\x00\x09\xf9\x50\x0c\xb3\x48\x1a\xf7\x8e\x3d\x8f\x26\x34\x4e\ +\x75\x26\xa4\x90\x6d\x5c\x1a\x80\x1a\xea\x92\x58\x96\xbd\xc9\x02\ +\xfb\x50\xb5\xed\xeb\x6f\xad\x40\x3e\x51\xdc\x57\x1a\x90\x6c\x4f\ +\xa8\xde\xd5\x24\x0e\x82\xba\xf5\x0c\x68\x48\x20\x03\xa5\x75\xea\ +\x2a\x54\x5c\xda\x84\x25\x37\x15\x18\xcc\x4a\xe1\x80\x45\x01\xe5\ +\x22\xf6\x3b\x20\xea\x6b\x95\xd4\x11\x93\xef\x09\x3c\x81\xb0\xf9\ +\xd6\x5c\xce\xcf\x33\xb3\x1b\xb3\x31\x2c\x7a\x9a\xad\xc8\xa2\xcb\ +\x62\xf1\x32\x8b\x3e\x25\xb2\xfe\x18\xd7\x2d\xe8\xb0\xb8\x89\x62\ +\x23\xc3\x62\x00\x37\xb7\x5a\xab\x1d\x59\xc1\x46\x65\x9d\x63\x51\ +\xab\x1b\x51\xde\x9a\xdd\x27\xee\xc3\x81\xba\x83\x6a\x15\x4d\x2f\ +\x7d\x4e\xa6\x9c\x40\xd8\x6c\x05\x85\x01\x16\x3a\x6d\xd2\xbb\xb0\ +\x5b\xf9\x54\x9b\x6c\x2f\x4b\x68\xc1\xf5\x6a\x7a\xd3\x24\x04\xe8\ +\x4e\x9d\x05\x41\xd3\x5a\x2a\x21\xa2\x50\x41\x51\xa8\xeb\x40\xf9\ +\xb7\x16\x14\xe6\xa5\x3d\x66\x98\x53\x82\x7d\x76\xf6\x14\x04\xd3\ +\x1c\xd2\x98\xd6\x69\x46\x62\x1a\xfd\x2b\x37\x8a\x2f\x83\x2f\x8e\ +\x6f\xb8\x52\x79\x32\x9a\xd0\xaa\xdc\x4d\x5a\x54\x11\x78\x25\xd2\ +\xd7\x24\x75\xac\x5f\x0c\x50\x93\x46\x20\x6d\x43\x3c\x29\x8c\x8c\ +\x24\xa1\x83\x29\xf2\xc8\xa3\x51\xef\x44\xe2\x64\x16\x43\x13\x90\ +\x2c\x33\x8b\x11\x55\x27\x4e\x22\xe4\xdc\x48\x47\xf4\x9f\xe2\xb9\ +\xd6\x88\xc4\x1c\x46\x1d\x8a\xe2\x62\xf1\x50\x68\x24\x1b\xfd\x69\ +\xf8\x3e\x27\x04\x70\x18\xb3\xba\x03\xb1\x61\x7c\xbf\x3a\x94\xc1\ +\xe2\xda\x2f\xbe\x25\x54\xf2\x60\x49\x34\xb1\xc3\xb0\xef\x7f\x0a\ +\x44\x27\x98\x91\x8a\x5b\xf5\xac\xf7\x3c\x3d\x35\xb0\xc6\x29\x30\ +\xaa\xd1\xe2\x52\x4b\x5e\xe6\xfa\xd7\x1c\x9c\xe4\x4f\xfb\xab\xcf\ +\x62\x70\xf8\x9c\x0c\x99\xd6\xe8\x2f\xa3\x2b\xdc\x1f\xca\x8a\x3e\ +\x2d\x36\xd8\x80\xb3\x2f\x32\x56\xcd\xf5\xa7\xf7\x3e\x8c\x6e\xbf\ +\x87\x6b\xf8\xd1\xe9\xfd\x54\x99\x24\x85\x75\x69\x47\xfd\x3a\xd5\ +\x28\x24\xc3\x62\x85\xb0\xf2\x15\x7b\x5f\xc3\x7d\x3f\x3a\x19\x94\ +\xa9\xb3\x0b\x11\x4d\xe5\xd2\xc5\xa6\xc5\xc2\x86\xe8\xae\xc7\xbe\ +\x82\x82\x6e\x21\x24\xa9\xe1\x95\xca\x84\x58\x8c\xc4\xfe\xb5\x50\ +\xd4\x56\x3f\x54\x86\x4c\x34\xa4\xfd\xd6\x3a\xea\x0e\xce\x4a\xda\ +\x97\x34\x18\xd4\x5c\xca\xe9\x32\x0d\xf6\x20\x8e\xf7\xa7\x57\x2b\ +\x14\x60\x54\xd8\xd1\x90\xeb\x35\x22\x84\xc8\x64\xc3\x01\x0c\x84\ +\x1c\xd1\x1f\x44\x9e\xdd\x0d\x56\xc4\xc7\x97\x12\x63\x41\xec\x08\ +\xd6\xb6\x71\x18\x13\x8b\x9d\x1a\x01\x95\x9f\x57\xe8\x2b\x51\x70\ +\xf8\x68\xe1\x10\x01\xaa\x8b\x09\x40\xd5\x4d\x13\x86\xad\x79\xdc\ +\x26\x0f\xc3\x0b\x2e\x24\x58\x9d\x55\x39\x9f\x7a\xbe\xb3\xc4\x8c\ +\xa9\x3b\x64\x59\xd0\x59\xc0\xd8\x82\x77\xfa\xd0\x63\xf0\xd2\xe1\ +\xe6\xb4\x87\x30\x6d\x43\xfe\x2a\x56\x2b\x0e\xf8\x98\x62\x58\x99\ +\x3c\x80\xdf\x33\x58\xd1\xe7\x8b\xd6\xa6\x0b\x08\xe6\x70\xe5\xbc\ +\x8b\x66\x0c\xba\xde\xae\x66\x0f\x3b\x2a\x87\x76\xbf\x9b\x28\x00\ +\x2f\xcc\xd6\x3f\x0a\x3c\x4f\x02\xa5\x22\x78\x24\x43\xbc\x65\xef\ +\x7f\x6a\xd6\xc0\xbc\x72\x42\x23\xb1\x8a\x76\xf3\x34\x64\xdf\xf3\ +\xae\xbc\x2f\x4c\xd3\x4a\x91\x6b\x42\xef\xfe\x97\x1a\x7b\xd4\xa3\ +\x5e\xe2\x42\x07\xff\x00\xd6\x87\x4f\x99\xe7\x42\x47\x6a\x95\x51\ +\x7b\x90\x0d\x6c\x08\xb1\x0b\x95\x55\x54\x74\x51\x52\x80\x93\x43\ +\x94\x11\x6d\x7e\xb4\x8c\x6b\x65\xfb\x95\x63\x7f\x8f\xf8\xab\x71\ +\x2b\x83\xde\xd4\xc0\x53\x28\x2d\x2a\x29\x23\x66\x3a\xd2\x63\x8c\ +\xbf\x94\x31\xa6\xaa\xa0\x3e\x33\x59\xf4\x01\x01\x1c\x86\x99\xab\ +\x11\xa3\x4a\x84\x17\x91\x85\xb9\x65\x20\x93\xec\x2b\xac\x4a\x12\ +\x30\xb3\xda\xdb\xdc\x54\x09\x5b\x93\x28\xee\x00\x15\xd7\xb9\xb9\ +\x37\xfc\xe9\x06\xd9\xef\xe5\x85\x35\xe4\xf2\x58\xd4\x48\xd9\x06\ +\x66\xc3\x4e\x07\x5b\x83\x40\xb7\xb0\x06\xa5\x4b\x03\x71\x71\x4a\ +\xc0\x7d\xa8\xb7\x97\x0d\x03\xbb\x75\x61\x7a\xbf\xc3\x9a\x35\x16\ +\x95\x44\x53\x30\xbd\x8e\xdf\xf9\xa8\xe1\xea\xce\xc5\xdf\xd2\xbc\ +\x86\x97\x35\x66\x78\xa3\x9c\x5a\x54\xb9\xea\x34\x35\xa9\x2f\xa2\ +\xd0\xca\xab\x88\x21\x33\x5e\x34\xd5\xcf\xe2\x3d\x05\x1a\xe8\x32\ +\x8d\x14\x6c\x06\xc2\xb8\x21\x48\xc2\x20\xb2\x8d\xaf\x5d\x66\x3a\ +\x11\x61\xce\x96\x51\x1f\xa3\xe7\x44\x05\x48\x15\xd6\xa9\x38\x54\ +\xaa\xdc\xf4\x00\x5c\x9e\x82\x88\x21\x22\xf6\xd3\xa9\xaa\xdc\x47\ +\x12\x91\x44\x61\x8d\x83\x3b\x8b\x31\x07\xd2\x29\xea\x7a\x99\x7f\ +\xe2\x39\xde\x5c\x44\x6f\x1b\x11\x1b\x0c\xaa\x3a\x5a\x91\xc3\xb1\ +\x72\xe1\xa5\xf5\x96\x46\xf5\x03\xaf\x3a\x2c\x59\xcf\x85\x0d\x63\ +\xf7\x6c\x0f\xd7\x4a\xaa\xbe\xab\x74\xae\x36\xf7\xad\xe3\xd9\x42\ +\xe2\x58\x04\x8b\xb7\xed\xca\xa2\x64\x12\xc2\x63\x26\xda\x82\x0d\ +\x66\x7f\x87\xb1\x36\xc2\x80\x7f\xe5\xb1\x56\x17\xe4\x79\xd6\xa9\ +\xec\x6e\x0e\xc6\xbd\x12\xec\x61\x2b\x65\x01\x57\x45\x5d\xab\x98\ +\xde\xa2\xba\x94\xea\xe1\xb8\xae\xae\xa9\x05\x3d\x03\xda\xa1\x88\ +\x02\xa2\x43\x96\xe7\x91\xde\x96\x5c\x6f\x63\x6e\xb4\x6a\x13\x35\ +\xea\x2f\x43\x7b\xed\xad\x70\xa1\x08\x7f\x73\x40\x5c\xca\xb9\x22\ +\x46\x2a\x4d\x99\xf9\x5a\x8b\x42\xac\xa4\x8f\x30\x22\x81\xa6\x8e\ +\x1c\x22\xc8\xdb\x81\x60\xbd\xea\x49\xc7\x62\x57\x0d\x0e\x55\x3e\ +\x72\x2c\x8b\xd0\x75\xac\xe4\x6b\xeb\x49\x9e\x57\x9a\x63\x23\x9b\ +\x93\x4d\x48\xe4\x45\x0c\xc8\xc0\x75\x22\xb1\xfa\xda\xd6\x61\xa9\ +\xbd\x6e\x70\x7c\x3f\x81\x17\x88\xe3\xef\x1f\x6e\xc2\xb0\xe1\xb6\ +\x71\x7d\xaf\xad\x7a\x53\xea\x1d\x2c\x2d\xf4\xae\x9c\x27\x6c\xf2\ +\x30\x1d\x2a\x0d\x4a\x54\x91\x5d\x59\x29\xc5\x03\xfa\x69\xac\x29\ +\x6c\x39\x51\x51\x47\x7a\x5c\x83\xa9\x03\xdc\x8a\x29\xdf\xc2\x89\ +\xa4\x3c\xb6\xf7\xac\xa4\xbc\xd8\x91\x9c\x17\xcc\x75\xb5\x63\x95\ +\x31\x79\xd7\x4b\xdd\x6d\xfe\xa1\x49\x25\x4e\xc7\x37\xfa\x05\xff\ +\x00\x3d\xa8\xca\x46\x86\xe9\x1a\x2d\xb9\xda\x85\x89\x3b\x92\x68\ +\x20\x21\xef\xea\x11\x8e\xde\x66\xfe\x28\x48\xb1\x37\x79\x1b\xdc\ +\x81\xfb\x51\x31\xa0\x63\x59\xa8\xb3\x06\x1b\x35\xfc\x22\x4f\x3b\ +\xb5\x42\xbc\x71\xe9\x1a\xe4\xf6\x1a\xd4\xb1\xa0\x26\x82\x23\x3b\ +\x6f\xe2\x3d\xfd\xcd\x04\x92\x17\x5b\x00\xbe\xf9\x05\x4e\x9d\x3f\ +\x2a\x06\x00\xf2\xb7\xb5\x45\xca\xea\x17\x21\x8a\x36\x5e\x61\x96\ +\xa9\x71\x0c\x0c\x0e\x9e\x26\x1f\x07\x11\xfc\x48\x14\xdc\x77\xab\ +\x7a\xdb\xad\x40\x24\x1b\x8b\x82\x3a\x51\x64\xa9\x84\xcb\x00\x24\ +\x1c\x32\x0e\xb6\xb8\x22\xb4\x70\x03\x0f\x89\x83\x2b\x02\x64\x5d\ +\x02\x97\xd6\xdf\x4a\xb3\x89\x86\x1c\x40\x1e\x34\x76\x61\xf1\x2d\ +\x81\xaa\x72\xf0\xdb\x31\x31\x62\x00\x3c\x83\x0b\x7e\x75\xcf\xf3\ +\x65\x6b\x61\xcd\x86\xc3\x29\xb3\x40\xe0\x8e\xae\x69\x58\x98\x70\ +\x91\x2e\x62\x18\x5f\x61\x7b\xd4\x88\xf8\xbc\x63\x2c\x72\x19\x07\ +\xf4\xb0\x6b\x50\xcb\x3e\x35\x7c\x98\x8c\x1e\x7d\x39\x2d\xbf\x4a\ +\x7a\xfe\x01\x61\xa3\xc2\x4b\x19\x61\x1b\x12\xbb\xdd\xad\x4e\x8d\ +\x63\x12\x00\xb0\xc6\xba\xda\xe0\x6b\x55\x63\xe2\x10\x44\x32\x36\ +\x19\x96\xfe\xa0\x0d\xa8\xcf\x11\xc1\x5e\xf9\x27\xfa\x8a\xb6\x21\ +\xc4\xa0\x33\xce\x45\x99\xd8\x81\xfd\x20\x69\x52\x8a\xcc\xc0\x0d\ +\x49\xa0\x18\xec\x26\x63\xe4\x93\x2b\xea\xb7\x61\x6c\xdd\x3b\x5e\ +\xaa\x62\xf8\x94\x85\x5a\x28\xa2\x10\x83\xa1\xeb\x46\xc8\x85\xc6\ +\xa6\x8d\x82\x40\x87\x31\x8c\x9c\xcd\xcb\xda\xa9\x28\xa1\x07\x5a\ +\x35\x3a\x57\x3d\xde\xda\xc4\x93\x6a\xe4\x62\xae\x19\x4d\x88\xd8\ +\xd7\x1a\x8e\x75\x44\xdd\xc3\x4d\xf6\x9c\x1a\x4c\x4f\x9c\x79\x5f\ +\xdf\xad\x1a\x9a\xce\xe0\xb8\x85\x8e\x46\x86\x56\xb4\x72\x0d\xfa\ +\x1e\x46\xb4\x8a\x95\x6b\x1a\xed\xc6\xec\x66\xa5\x9f\xc3\x85\xe5\ +\xe6\xa3\x4f\x7a\xce\x04\x93\x73\xa9\x35\x77\x19\xff\x00\xed\xf2\ +\x7f\xa9\x6b\x3f\x52\xb6\x1b\xde\xae\x4a\x2c\x46\xaa\x50\xeb\x9a\ +\x31\xff\x00\xfd\x0f\xf1\xfa\xd1\x31\x2c\xd7\x63\x44\xe1\xcb\xf9\ +\xc5\x8f\x4b\x5a\xd5\x39\x68\x41\x17\xe5\xa5\x4d\x8f\x3b\x9a\x20\ +\xbd\x68\x82\xd3\x8b\x42\xa2\x8a\xd4\x40\x57\x01\x48\x5e\xc1\xae\ +\x5c\x2a\xdb\xe2\x24\xd3\x00\x3a\xd8\x6b\x6d\x2f\xd6\x87\x00\x73\ +\x61\xb2\xde\xe5\x0e\xdd\xa8\xe5\x0c\x19\x55\x05\xdc\xec\xbf\xb9\ +\xad\xb2\xab\x84\x5c\x44\xa5\x9b\xc6\x65\x50\x75\x37\xe7\x56\x82\ +\xb8\xf8\x8c\xab\xce\xfa\x30\xfe\x68\xa0\x87\xc2\x84\x25\xee\x49\ +\xbb\x7b\xd1\xaa\xda\x99\x10\x14\x06\x17\x53\x7b\x6e\x2d\x62\x3d\ +\xe8\x71\x32\xc7\x86\x8c\x33\x82\xcc\xde\x95\x15\x60\xda\xe1\xc8\ +\xdb\x46\x3d\x8f\xf0\x6a\x97\x1e\x53\x68\x4d\xb4\x00\x8f\xce\xab\ +\xd4\x4a\x38\xbc\x44\xb3\xb9\x2c\x48\x5e\x4a\x36\x15\x56\x6b\x86\ +\x03\x91\xa6\xb6\xf4\x32\x8c\xc9\xa6\xe0\xd7\x2b\xdb\x63\x2b\x9a\ +\x39\x13\x7c\xc8\x6c\x2b\x32\x31\x6a\xd6\xc3\xa4\x84\x24\x99\x18\ +\xaf\x33\x6a\xcd\x99\x32\x4c\xeb\xd1\x88\xac\xf2\x89\x77\x80\x37\ +\xdf\xc9\x17\xfe\xe2\x7e\x63\x51\x5b\x38\x2c\x46\x82\x29\x2d\x6f\ +\x84\xf4\xaf\x3d\xc3\xa4\xf0\xb1\xd1\x49\x6d\x98\x56\xcc\xca\x15\ +\xca\x8e\x46\xba\x70\xbd\x0a\xd2\x20\x8f\xe6\xa2\xb3\xe2\x9a\x58\ +\xfd\x0e\x40\xe9\x4e\x18\xd9\x00\xf3\x22\x37\xca\xd5\xd3\xf5\x19\ +\xc5\xaa\x83\xb5\x57\x18\xdd\x75\x85\x7e\x44\xd7\x1c\x62\x69\xf7\ +\x47\xbf\x9a\xad\x8b\x0c\x7d\xe8\x0d\x29\xf1\x84\xe8\xb0\xaf\xd4\ +\x9a\x53\xe3\xa4\x07\x41\x18\xed\x96\x8d\x87\x0f\xc8\x3b\xfd\x6a\ +\x42\xad\xf6\xaa\x9f\x6c\x97\xf1\xaf\xd0\x51\x2e\x32\x41\xba\xa3\ +\x0f\x6a\x36\x2c\x5b\x05\x63\x46\x91\xb4\x54\x17\xf7\xac\x8c\x4c\ +\xad\x2c\xcd\x2d\xaf\x7d\xd0\x73\x1d\xbb\xd6\x9a\x62\x20\x91\x1a\ +\x39\x03\x28\x75\xb1\xe9\x59\x93\xc4\x62\x90\xad\xee\xa7\xd2\x7a\ +\xd6\x79\x18\xb1\xc2\x70\xcb\x2c\xa6\x56\xf3\x46\x9a\xfb\x9e\x95\ +\xab\x9f\x30\x2a\xe0\x32\x9f\x84\xed\x59\x3c\x3b\x10\xd0\xc8\xc0\ +\x65\xcb\x26\xe0\xec\x4f\x7a\xd5\x4b\x32\x07\x5f\x49\xfc\x8f\x4a\ +\xd7\x0f\x05\x51\xc7\x41\xe0\x4a\x0a\xff\x00\x96\xfa\xaf\x6e\xd5\ +\xb1\x80\x98\x4f\x83\x47\xbe\xaa\x32\xb5\x52\xc7\x28\x6c\x03\xdf\ +\xe1\x21\x85\x07\xf8\x7e\x52\x27\x78\x4e\xce\xb7\x1e\xe2\xb5\x3a\ +\xa2\xf8\xd8\x8d\xb5\xb1\xa6\x83\xa5\x57\x06\xfa\xd3\x11\xb4\xae\ +\xac\x8d\xe9\x2f\xbd\x30\x9b\xd0\xb6\xba\x54\x95\xf1\x68\x1e\x02\ +\xa4\x68\x59\x7f\x5a\x51\x45\x40\x42\x22\xa8\xec\x2a\xcc\x80\x98\ +\xd8\x0d\xed\x71\xdf\x9d\x2d\xc0\x3a\x8d\x8e\xa2\xb1\x61\x55\x90\ +\x69\x6a\x5b\x69\x56\x1d\x75\xa4\xc8\xa4\x56\x69\x25\xa8\x1f\x4a\ +\x61\x14\xb7\x15\x84\x5b\x9d\x68\x68\xce\xf5\x0c\x2a\x32\x80\xef\ +\x43\xa5\xe8\x88\xd2\x84\xd4\x50\x68\x6b\x89\xa8\xbd\x1a\x93\x42\ +\xdb\x57\x72\xa8\x6b\x05\x2c\xcc\xaa\xa3\x99\x34\x20\x10\x2f\xb5\ +\x48\x69\x14\x59\x64\x70\x3b\x35\x46\x68\x7f\xf7\xd0\x7b\xd1\x32\ +\x90\x3b\x75\x07\x4a\x93\xbc\x57\x1b\x90\x7d\xd4\x1f\xda\x93\x24\ +\x78\x69\x2e\x24\xc3\x47\xee\x83\x29\xa3\x61\xce\x85\xa8\xa6\x14\ +\xd8\x4c\x13\x23\x28\x59\x10\x1d\xfc\xc1\x81\xf9\x50\xae\x0b\x09\ +\x75\x52\xf2\xca\x3e\x1c\xda\x11\xfd\x34\xeb\x50\xca\xa4\x02\x14\ +\x7d\xe3\x8f\x20\xef\xd6\xb3\x90\x99\x19\x48\x85\xa1\x85\x23\xe5\ +\xe9\xb9\xa3\xce\x24\x19\x65\x8e\x37\x1d\x0a\x8f\xda\x97\x23\x03\ +\x26\xfa\xf3\xf7\xa9\x43\xad\x86\xf5\xa0\xa7\xc5\x70\x89\x08\x59\ +\xa1\x2d\xe1\xb9\x37\x07\xe1\x3d\x2a\x90\xad\x4e\x35\x2a\xc7\x85\ +\x18\x60\xc0\xbb\x36\x67\x03\x90\xe5\x59\x43\x38\x37\xbe\x9d\xab\ +\x9f\x39\x34\xc3\x2d\xa5\x5a\xc3\x71\x0c\x4c\x4a\x13\x30\x74\x02\ +\xc1\x5c\x5c\x0a\xa6\xcc\x2e\x32\xde\xe3\xad\x19\x3a\x5f\x29\x17\ +\xa2\x74\xbd\x6b\xc5\x8a\x87\x17\x87\x92\x30\x9e\x1c\x85\x7d\x37\ +\xd0\xfb\x55\x58\xe3\x66\x6c\x80\x6b\xfa\x52\x38\x79\x61\x89\x89\ +\x81\xd4\xb8\xd6\xb5\xf1\x50\x09\x99\xd6\x18\xec\xaa\x7c\xe8\x3e\ +\x3d\x34\x1e\xdd\xab\xa4\xff\x00\x28\x3c\x5e\x6c\xad\xe4\x91\x03\ +\x0e\xa7\x7a\x54\xd8\x20\x7c\xd0\xb5\xff\x00\xa4\xef\x56\x05\x88\ +\x2d\x96\xc6\xe4\x10\x77\x16\xa9\xb7\x3d\x2f\x5d\x71\x86\x6b\x23\ +\x23\x65\x60\x41\x1b\x83\x51\x6a\xd2\x9d\x12\x58\xfc\xe8\x73\x5b\ +\x46\xb6\xd5\x9f\x30\x68\xc9\x52\x3c\xc3\x4b\x56\x6c\x6a\x22\xa4\ +\x0a\x08\xcb\xde\xe7\x5f\x7a\x60\x64\x04\x29\x0e\xcc\x75\x08\xa3\ +\x5a\x91\x98\x67\x68\x98\x32\x9b\x66\x60\xbf\xef\xe5\x5a\x3e\x81\ +\x68\xc5\xc1\xd7\x37\x36\xee\x6b\x32\xc7\x38\x67\x00\x65\xf4\x20\ +\x37\xd7\xa9\xab\x58\x09\xf4\xf0\xa4\x3a\x7c\x24\xf2\xad\x71\xa2\ +\xac\x80\x48\xe9\x5d\x62\x07\x5a\x3b\x5b\x43\x5d\x5b\x08\x16\x23\ +\x5d\x54\x8b\x1a\x46\x22\x29\xe6\x84\xc2\x02\xb8\x02\xea\xd7\xb1\ +\x27\xa5\x3f\x28\xde\xd5\x0c\x0a\xea\x9a\x1d\xed\x45\x4c\x09\x4b\ +\x47\x7f\xf8\x69\x49\x1c\x88\xfe\x2b\x94\x87\x85\x64\x00\x8b\xe8\ +\x47\x42\x2b\x5f\x88\x61\x9a\x71\xe2\xc1\xfe\x67\xc4\x2f\xbf\x71\ +\x54\x57\x0f\x2b\x4c\x10\xc6\x47\x8b\xdb\x98\xfe\x47\xe9\x5c\xef\ +\x1c\xad\x4a\xd2\xc2\x1f\x0f\x86\x21\x51\xb4\x45\x88\xeb\xad\x60\ +\x71\xa8\xc0\xc5\x78\xaa\x34\x70\x09\xf7\xb5\x7a\x0c\x53\x2a\xe0\ +\xce\x5d\xb2\x84\x51\x59\xfc\x6b\x0c\x17\xc2\x4b\x82\x64\x8c\xe5\ +\x27\xad\xf4\xfe\x29\xe7\x36\x08\xc4\xad\xd5\x7f\x17\x0f\x14\xa3\ +\xe2\x40\x0f\xb8\xac\x47\x5f\x2e\x70\x08\x04\x90\x41\xf8\x4f\x31\ +\x5a\x7c\x20\x93\xc3\x98\x1f\x86\x4d\x3e\x95\x8e\x3e\xe3\x55\x61\ +\x45\xc8\x02\xa4\xa9\xcb\x7d\x0d\xba\x1b\xd0\x48\xc5\x30\xee\xe3\ +\x70\x2c\x3e\x75\x21\x12\x28\xe3\x91\x17\xd3\x6c\xdf\xd4\x0d\x6c\ +\x3a\xb9\xb4\x15\x2c\x32\xb1\x1d\x2a\x18\x12\x45\xad\x61\xca\xf5\ +\x00\x15\x36\xd7\x5a\x19\x0a\xc7\x11\x76\x07\x28\x36\xd0\x53\x09\ +\x6c\xd9\x42\xeb\xef\x43\x32\x13\x86\x93\x31\xbf\x97\x6b\x54\x41\ +\x19\x49\x14\xb4\x6c\x0d\xb7\x16\xd4\x57\x65\xe9\x4a\xc1\xe1\xa4\ +\xc8\x25\x49\x42\x13\xe9\x16\xde\xac\x44\xfe\x20\x60\xcb\x96\x44\ +\xf5\x2f\xef\x44\xff\x00\xa8\x20\x75\x15\x24\x02\x2c\x45\xc5\x16\ +\x95\x1f\x5a\x51\x7f\x67\x66\x04\xa0\xcc\x2d\xa8\x1b\xd1\xe0\xb1\ +\x72\xe1\x9f\x2c\x77\x65\xb8\xcf\x13\x7c\x5e\xdd\x0d\x1c\x32\x34\ +\x52\x07\x4d\xc5\x5c\x9e\x1c\x3e\x2e\x21\x29\x05\x5b\x9b\x2f\x2f\ +\x7a\xa4\xfe\x2d\x51\xe2\x1c\x60\x3e\x58\x63\x8c\x04\x27\xef\x05\ +\x8d\xea\xd7\x03\x8f\x36\x29\x67\x43\x78\xd0\x5e\xff\x00\xb5\x4a\ +\x70\x9c\x37\xda\x04\xcd\x3b\x16\x03\x5f\x2e\xe7\xad\x5c\x8a\x35\ +\x89\x6d\x0e\x97\xd4\x92\x3d\x5e\xe2\xb5\x25\xdd\xa2\xe7\xc5\x85\ +\x24\x53\x01\xb8\xa4\x23\x66\x21\x6d\x95\xed\xe9\xeb\xdc\x75\xa3\ +\x0d\x63\xa9\xb5\x74\x60\xca\xeb\xd7\x02\x0d\x56\x9b\x14\xd1\x4a\ +\xc8\xf1\x03\x6d\x88\x3b\xd5\x6e\x25\x9b\xeb\x42\xe2\xde\x65\x17\ +\xe6\x54\x73\xf6\xef\x41\x87\xc4\x47\x30\xb0\xf2\xb7\xe1\x3c\xe8\ +\xf3\x6b\x56\xea\x29\x80\x6f\x4d\xc8\x3b\x11\x48\x11\xda\xf9\x97\ +\xe7\x56\x25\xba\x13\x2c\x6a\x48\xf8\xd0\x7e\xa2\xa1\xca\x90\x19\ +\x48\x65\x3b\x11\xce\x8b\x0c\x54\x91\x2d\xb5\x2d\x94\xf2\xb5\x5a\ +\x75\x06\x94\xc9\x58\xb0\xab\x32\x91\xc8\x7c\x8d\x03\xe6\x03\xd2\ +\x6a\xc3\x2d\xa8\x6d\x59\x4a\xb9\x81\xed\x42\xe5\x6d\xbd\x14\xb1\ +\x95\x6b\x5b\x4a\xe0\x05\xb6\x15\x34\x43\xb0\x1d\x6a\x01\xb8\xb8\ +\xd0\x51\xca\x97\x3a\x69\x4b\x54\x65\x3b\xdc\x56\x6a\x49\x02\xdb\ +\x5f\xde\x86\x50\x81\xa2\x76\x00\x05\x72\x09\xe9\x71\x44\x76\xae\ +\xd0\x82\xad\xaa\xb0\xb1\x15\x20\xc8\x5b\x35\x9c\x66\x1c\xc1\xd6\ +\x80\x8f\x08\xf8\x90\x6a\xa7\xd7\x1f\xf1\x44\x97\xcf\xe0\xbe\xac\ +\xa2\xea\xdf\x8c\x54\xae\x8c\x0e\x97\x15\x17\x2b\x24\xa9\x9e\x32\ +\x48\xe6\x08\xda\x84\xad\x74\x51\x04\xc4\x4d\x97\x45\x75\x0c\xa0\ +\x1e\xf5\x24\x74\x63\x42\x27\x15\x2b\x40\xea\x88\x80\x16\xb7\x9d\ +\x85\xc5\x31\x62\x60\xe5\x54\x34\x92\x36\xef\xcc\xfb\x76\xa9\x0c\ +\x1a\x3c\xb2\x00\x50\xee\x0d\x54\xe3\x12\xcd\x87\x85\x30\xb8\x7c\ +\x59\x8d\x59\x73\x12\x45\xcd\x8d\x17\xae\xd2\xd4\x91\x88\x96\xf3\ +\xba\xc6\xbd\xcd\xef\x55\x66\xe2\x49\x1d\xd7\x0a\xa4\x9b\x7a\xdf\ +\x97\xb5\x50\x88\xb1\xf2\xac\xcc\xe3\xf0\xcc\x74\x6f\x63\xca\xad\ +\xe1\x38\x78\x95\x81\x93\x34\x00\x9d\x15\xac\x4b\x7b\x56\x76\xdf\ +\x0a\xb2\xe6\x91\xaf\x62\xce\x4e\xbc\xcd\x5e\xc3\x70\xc9\x99\x33\ +\x4a\xcb\x08\x23\x4c\xda\x93\xf2\xab\xf8\x68\xe2\xc3\x8c\x98\x68\ +\x80\x6e\x6e\xda\xb7\xf6\xae\x79\x61\x56\x39\xe5\x24\x8d\xca\xae\ +\x6b\x7c\xe9\x9c\x27\xd1\xaa\x91\xf0\x60\xe4\x01\x8c\x4b\x9d\x00\ +\xc8\x75\xaa\x33\x06\x8e\x46\x8d\xac\x72\x92\x2f\xd6\xb7\xf0\xcd\ +\x1e\x51\x88\x0d\x78\xd2\xec\x49\x16\xda\xb1\x1c\x78\xd2\xb1\x03\ +\xd6\xd7\x03\xde\x9e\x5c\x64\xf1\x4a\x77\x02\x84\xcb\x8d\x0c\x7d\ +\x11\xf9\x9e\xb7\x20\x8c\x04\x90\xa9\xd5\xa4\xd7\xb5\xa9\x38\x5c\ +\x32\xe1\x30\x8b\x11\xf5\xb6\xb2\x69\xf9\x55\xc4\x06\xf9\x94\x8b\ +\x91\x62\x1b\x66\xe9\xec\x6b\x7c\x78\xe4\xc6\x6d\x42\x92\x54\x16\ +\x3e\x66\x25\x9b\xb5\xff\x00\xd8\xa9\x06\x93\x01\xcf\x96\x55\x1e\ +\x52\xa3\xf4\xb5\x36\xb4\x04\x0d\x74\xa8\x26\x8f\x21\xb6\x61\xe9\ +\x6e\x86\x86\xf5\x20\xd2\x99\xec\x0a\xb1\x07\x71\x52\x4f\xfc\x4b\ +\x8d\x8f\x82\xb6\xfa\xd5\xae\x20\x83\xc3\x38\x83\xb2\x0f\x38\xeb\ +\x58\xf1\x4e\xff\x00\x6b\x38\x86\x42\x55\xae\x0e\x9a\x5a\xb1\x7a\ +\x6a\x2e\x8a\x35\xa1\x4c\xae\x99\xa3\x60\xcb\xfa\x51\x8e\x94\xa6\ +\x86\x0a\x6f\x16\x3c\xac\x46\x75\x1a\x77\x14\xda\xce\x81\xcc\x72\ +\x87\x07\x63\x5a\x4c\x3c\xda\x6c\x75\x15\xb9\x59\xa9\xa8\x22\xa4\ +\x6d\x5c\x69\x45\x95\x2a\x6e\xbf\x4f\xe2\xa6\xe5\xd3\x29\x73\x66\ +\xd8\xf4\x3d\x68\x88\xa0\x65\x20\xdd\x34\x3d\x3a\xd4\x95\xe3\x49\ +\x65\xc4\x2a\x4a\xbe\x55\x62\x49\xb6\xfa\xd4\x7f\x88\xd4\xb6\x06\ +\x39\x47\xc2\xf6\x3d\xaa\xcc\x57\x08\x01\xb8\xae\xc6\x28\x7c\x04\ +\x88\xcb\x71\xa1\xac\xe7\x49\x82\xf8\x49\x64\x8f\xed\x09\x18\x39\ +\xc7\xde\xa0\xdd\xba\x30\xef\x56\xb0\x91\x78\x18\x35\x8c\x9b\xb3\ +\x9c\xe7\xf6\xa6\x66\x21\x81\x5d\x2d\xa5\xab\xac\x02\x15\x1b\x29\ +\xba\xff\x00\xa4\xff\x00\xb3\x58\x93\x1a\xd7\x05\x0e\x8c\x8c\x6c\ +\x18\x5a\xfd\x2a\xa3\x62\x4c\x70\x18\x0a\xdc\xdb\x2a\x91\xef\x56\ +\x74\xcc\x09\xda\xd5\x2e\xb0\xbc\xaa\xcd\x18\x62\x39\xd5\x40\x97\ +\x3b\x46\xac\xc1\x41\x65\x04\xde\xa0\x82\x39\xaf\xbd\xa8\x9d\xff\ +\x00\x2e\x54\x05\xa9\x4e\x1a\x0b\x0b\xf7\x35\x28\x03\x5d\x18\x68\ +\xc2\xc6\x82\xfa\xd7\x4a\xe6\x38\x19\xc6\xe3\x41\xda\xf5\x27\x46\ +\x2d\x87\x41\xcc\x5c\x7e\x74\x13\xab\xf8\xab\x88\x8c\xdd\x90\x79\ +\xd7\xa8\xa6\x40\x19\xf0\xf1\x04\x17\x25\x2d\xa7\x5a\xb5\x86\xc2\ +\x28\x23\xc6\x24\x96\xd3\x28\x36\xb5\xea\xcd\x4a\x6e\x41\x01\x94\ +\xdd\x58\x5c\x50\xd5\xfc\x3a\xe1\x9e\x20\x82\x38\x83\x47\x71\x66\ +\x3c\xaf\x4a\xc4\xc3\x87\x22\xf0\xc8\xa5\xbf\x00\xd6\x9c\x5a\xab\ +\x4d\xc3\xca\x62\x7b\xee\xa7\x42\x3a\xd2\xb5\x04\x82\x2c\x6a\x77\ +\x34\x16\x9c\x46\xf1\xa9\x06\xe0\xec\x68\xef\x54\xb8\x7b\xb3\x46\ +\x50\x1f\x49\x24\x03\xd2\xad\x8a\xdc\xac\x98\x32\xba\xe5\x71\x71\ +\xf9\x8e\xe2\x97\x2c\xb2\xc5\x20\x49\xc9\x92\x36\xd5\x5f\x98\xf7\ +\xa2\x5a\x62\x3e\x53\x72\x74\x3a\x1a\x50\xa3\x7f\x28\x2b\xe6\x1e\ +\xf5\xd8\x88\xd7\x11\x1f\xf5\x0d\x8f\xec\x6a\xbe\x2c\xf8\x0c\xb3\ +\xc4\x72\x82\x6c\x40\xf4\x9a\x6e\x16\x5f\x19\x4b\x65\xca\xcb\xbd\ +\xb9\x8a\xb7\xe5\x0a\x48\xae\xd2\x05\x4f\x55\xf4\xab\xe2\x56\x5b\ +\x2e\x23\xca\xc7\x66\xf8\x5b\xe7\xd6\x95\x2c\x46\x2c\x40\xc4\x47\ +\x72\xb7\xf3\x2d\xef\x6a\x6b\x32\x11\x63\x62\x0e\xd7\xe7\x54\x98\ +\x85\x72\x06\x61\xb7\x51\x49\x90\xe4\x6c\xcb\xa2\xc8\x6c\x47\x2c\ +\xdd\x6a\x56\x24\x56\xcc\x85\x93\xfd\x26\xd4\xbc\x44\x02\x4d\x4c\ +\xd2\x5f\x95\xf5\x15\x5d\x43\x06\xf4\x2f\x42\x09\x03\x5f\x50\x16\ +\x36\xd9\xbb\xd4\x92\x0a\xdf\xad\x04\x04\xde\x81\x85\x11\xde\x85\ +\xa8\x41\x61\xa5\x25\xc6\xb4\xe6\x34\xa6\x35\x94\x4c\x82\x96\x69\ +\xce\x39\x52\xd8\x6b\x53\x40\x61\x42\x45\x19\xa1\xac\xa2\xe7\x42\ +\xf1\x66\x53\x69\x22\xd5\x4f\xed\x52\xb9\x65\x8d\x65\x5d\x2f\xbd\ +\xb9\x1a\x35\xd1\xae\x39\x52\x9e\x19\x52\x63\x26\x1e\x40\x81\x86\ +\xa0\x9d\x8d\x45\xd3\x12\x98\xac\x39\x20\x9c\xca\x41\x15\xd7\x63\ +\x7b\x0f\x9d\x32\x30\x14\x16\xbe\x79\x1b\xd4\xe7\xf4\x1d\xa8\x58\ +\x00\x2e\x36\xe9\x42\x2c\x29\x1b\xd5\x4f\xf1\x08\x6f\x16\x27\x03\ +\xca\x63\x02\xfe\xd5\x7c\xed\x4a\xe2\x31\x78\xbc\x3d\xf6\xcd\x17\ +\x98\x1e\xdc\xe8\xb3\xa5\xac\xfe\x0b\x1a\xcb\x8e\x51\x20\xb8\x00\ +\x9b\x56\xb3\xbf\x8a\x32\xc9\xe9\xf8\x6d\xf0\xfb\x56\x67\x04\x36\ +\xc7\x82\x7f\x09\xfd\x2a\xfa\x99\x5d\xc8\x81\x63\xc8\x86\xc5\x9f\ +\x99\xa3\x87\x8a\x8d\x56\x76\x19\x67\x99\x5a\x3f\xe9\xf5\x37\x63\ +\x4d\x57\xd3\x2e\x55\xc9\xf8\x6d\xa5\x0a\xa9\x63\x94\x80\xaf\xbe\ +\x50\x6e\x1b\xb8\x35\xda\x83\x62\x2d\x5b\x05\x71\x29\x46\x1f\x02\ +\xd8\x54\x56\x19\x9a\xe0\xf2\x2a\x75\xa5\xff\x00\x87\xe2\x0d\x88\ +\x69\x98\x5d\x62\x17\x00\xf3\x3c\xa9\x9c\x63\xcc\x72\x58\xe9\x11\ +\x00\xf2\xba\x9f\xe2\x8f\x81\x9f\xff\x00\x1d\x25\xbf\xf7\x47\xe9\ +\x47\xff\x00\x47\xe2\xf0\x39\xef\x7e\x74\xd8\x90\x0f\x88\xe9\xa9\ +\xa4\x47\x47\x88\x7c\x98\x29\x9b\x63\x96\xc0\xf7\x35\xb6\x04\xa5\ +\x40\x01\x54\x01\xca\xc2\x8a\x92\x9a\x0f\x2e\x9d\xb9\x1a\x60\x61\ +\x60\x7a\xd4\x85\x7a\x91\x40\x0d\xe8\x85\x49\xd3\x58\xe0\xe6\x56\ +\x1a\x3a\x65\xff\x00\x7f\x4a\xa2\x80\xc5\x12\x46\x0e\xca\x2f\xde\ +\xae\x62\xce\x5c\x04\xff\x00\x89\x92\xca\x3b\xd5\x18\x24\x12\xc4\ +\xac\xcc\xaa\xca\x2c\xe0\x9b\x5a\xab\xe9\x89\xca\xab\x8b\x81\x96\ +\xca\x5e\xf9\x80\xd8\xd3\x4e\xf4\x99\xd1\xe6\x64\x31\xb0\x44\x4d\ +\x9c\xf3\xee\x05\x1f\x88\x43\x85\x94\x7a\x8d\x84\x8b\xb1\xf7\xa2\ +\x13\x2b\x4f\x0c\xd9\xb0\xc8\xda\x6d\x63\x59\x7b\x1b\x1d\xc5\x5f\ +\xe1\xcc\x0e\x19\x97\x9a\x9b\xd6\xb8\xfa\x29\xe4\xd7\x03\x51\x5d\ +\x5b\x02\xae\x35\xc2\xba\xa4\x1a\x92\x33\x44\xeb\xd5\x48\xa9\x22\ +\xba\x2f\x58\x1d\x74\xa9\x32\x69\x8b\xa8\xf7\x4d\xbd\x8f\xf7\xa8\ +\x98\x65\x91\x97\xa1\x22\xa0\xb8\x46\x88\x9d\x03\x12\xa7\xe7\x5c\ +\xcb\x98\xe9\x60\x37\xae\xf4\x8b\x57\x35\xd5\x85\xc5\xb7\xa1\x26\ +\xf5\x24\x31\xae\xd0\x2b\x33\x1b\x2a\x8b\x9a\x93\x50\x50\x3c\x61\ +\x0e\xcc\xd7\x3e\xc0\x5f\xf8\xa8\x82\x19\xe1\x95\xb2\xa1\x60\x79\ +\x06\xe7\x57\x70\xf8\x4c\xe8\x7c\x6d\x10\xfc\x36\xd4\xd0\x43\x85\ +\x18\x84\x0e\x55\x54\x21\xf2\x5b\x4f\x95\x5b\xc3\xc8\xef\x9d\x25\ +\x5b\x3c\x7c\xfa\x8a\x64\xfe\x8b\x5d\x0c\x71\x61\x80\x48\x97\x2c\ +\x6f\xb1\x26\xe5\x5b\xdf\xbd\x17\xa5\xae\x46\xa0\xd4\x92\x2c\x41\ +\x17\x07\x71\xd6\xa2\xc4\x28\x55\x90\x10\x3f\x1a\xdf\x4e\x97\xde\ +\xb6\x19\xb8\xf8\x72\x62\x2c\xb7\x21\xc5\xc5\x0e\x59\xb0\xd2\xab\ +\xb2\x15\x23\x51\x71\x57\xd2\x39\x3c\x7f\x1a\x56\x4b\x80\x42\x2a\ +\xeb\x6a\x31\x7b\x65\x36\x20\xee\x0e\xd5\x9c\x3a\xcb\xc5\xe2\x13\ +\xc4\x0e\xf1\x39\x32\x0b\xf9\x0d\xea\x22\x78\xe5\x04\xc6\x4e\x61\ +\xba\xb0\xd4\x53\xf8\xb8\x5c\x2c\xb0\xcf\x1a\xdd\x42\x90\xca\x0e\ +\xab\x7a\xcd\x77\x93\x11\x8e\x0f\x87\x52\xad\x6e\x7f\xa9\xac\x5b\ +\x94\xc5\xfc\x1b\x14\xc4\xa9\x02\xe0\x9b\x69\x57\xa3\xf1\x33\x9b\ +\xdc\x0e\xf5\x47\x0e\x59\x5d\x5a\x50\x8d\x62\x09\x68\xf9\x7c\xab\ +\x51\xc7\x98\x90\x41\x5b\xe8\x45\x6f\x88\xa1\x19\xba\x8f\xa5\x12\ +\xb6\xe0\x8a\x8a\xe5\xf5\x8f\x7a\xd0\x06\x28\x2c\xa5\x70\xcb\xa1\ +\xbd\xd8\x81\xb5\x33\x0f\x14\x31\xae\x58\xc3\x2b\x1d\xc9\x35\x53\ +\x0d\x37\x87\x8d\x71\x29\x23\x35\xc1\x35\x70\xd8\xe8\x75\xf6\x34\ +\x4f\xea\x10\x72\x0d\x8e\xff\x00\xad\x0e\x89\xa0\x07\xc3\xfa\xe4\ +\xfe\xd4\x19\x6e\xc7\x33\x1d\x0e\x95\x20\x10\x74\x66\xa5\x08\xf9\ +\x40\x20\xdd\x08\xd0\x8d\xa8\x58\xd0\xc8\x59\x15\x98\x05\x2a\x7d\ +\x63\xf7\x15\xce\x6c\x05\x8d\xc1\xd8\xf5\xa9\x21\xbd\x54\x27\x7f\ +\x7a\xe6\x3a\x7b\xd0\xb1\x36\xd3\x71\x59\x4e\x34\x2d\x44\x35\x17\ +\x1b\x50\xbd\x15\x16\xc7\x7a\x07\xda\x88\xef\x40\xf4\x20\x9a\x17\ +\xa2\xa1\x6a\x9a\x03\x0a\x13\x47\x42\x45\x15\x06\xd5\xc4\x03\xa5\ +\x49\xd0\x57\x0c\xdd\x85\x08\x20\x11\xa0\xd4\x54\x10\x49\xd6\xd6\ +\xa9\x62\x46\xeb\xf4\xa3\x58\x99\x97\x35\xac\xb6\xf5\x1d\x05\x48\ +\xa5\x60\xd5\x18\x86\x58\xb0\x92\xbb\x91\xe6\x52\xaa\x0f\x33\x4a\ +\xc4\x62\x20\xc3\x7c\x42\x57\xe4\x14\xe9\xf5\xaa\x38\xa9\xe7\xc5\ +\x38\x0e\x6f\xaf\x95\x40\xd2\xb3\x79\x61\xc1\xf0\x78\xd9\xf1\x7a\ +\x72\x46\xb9\xe9\xa5\x68\xc2\x99\x21\x64\xb5\x8a\xc9\xaf\x7b\xed\ +\x43\x81\x80\xe1\x70\xc5\x5a\xde\x24\x9e\xa1\xd0\x53\x88\x62\x33\ +\xa2\xe6\x60\x2c\xcb\xf8\x87\xf2\x29\xe3\x32\x2b\x43\xe5\x65\xc8\ +\xe2\xeb\x7f\x98\xf6\xa9\x80\x3b\x19\x22\x63\x9a\x48\x9a\xda\x6e\ +\x45\x28\xca\x89\xe6\x6c\xe0\x77\x4b\x52\x10\xc9\x89\xc7\xb1\x52\ +\x63\xce\x6e\x48\x3b\x0a\xb5\x62\xdf\x12\x2a\x20\x45\x76\xca\xea\ +\x49\x23\xaa\xda\xc6\xff\x00\x2d\x7e\x55\x5f\x81\x4e\x23\x99\xb0\ +\xf2\x1b\x24\x9a\x7b\x1e\x55\x6e\x18\xa0\x89\x83\x14\xce\x79\xb3\ +\x9d\x4d\x63\x71\xbc\x46\x27\x09\xc5\xa5\x82\x19\x59\x62\x43\x74\ +\x17\xe5\xca\x8e\x5d\x76\xa7\xf1\xbc\x64\xcb\x70\x07\x9a\xfc\xc6\ +\xd4\x67\x58\xd5\x5c\x96\x56\x7b\x9b\x74\x03\x5f\xda\xab\xae\x35\ +\x25\x8e\x27\x92\x36\x66\x96\x30\xc0\x82\x2f\xd3\x5f\xa5\x58\x52\ +\xe0\x16\x75\xc8\x58\x65\x55\xe6\xa3\xbd\x74\x96\x56\x52\xba\x0a\ +\xeb\xdb\x6d\xb9\x8a\x59\x6b\x30\x1c\x88\xa9\x27\x43\x52\xc3\x97\ +\xda\x8a\xe1\x53\x33\x9b\x2f\x7a\xab\x2c\xa2\x30\x19\xda\xec\x46\ +\x8b\xfc\xd5\x77\x9a\x49\x48\x32\x1d\x46\x80\x0d\x80\xa3\x62\xc3\ +\xa6\x99\xa5\x92\xe3\x45\x1b\x0e\x94\x24\x86\x3e\x75\x56\x3d\xc5\ +\x2c\x1a\x2b\xd1\xa4\x45\xae\x75\xa0\xc6\x10\x30\x4f\x7e\xa2\xde\ +\xf4\x57\x19\x80\xe6\x6a\x9f\x13\xc4\x23\x48\xb0\xa9\x39\x57\x9f\ +\x22\x6a\xb7\xa5\x17\x60\x72\xf8\x68\xdd\x8d\xc9\x1a\x9a\xbb\xc2\ +\x5b\xef\x99\x09\xf5\x2e\xdd\x4d\x64\xf0\xb7\xf2\x3c\x6c\x74\x1a\ +\x8b\x9a\xb9\x0c\x85\x5c\x3a\x5e\xe3\x9e\xd5\xae\x35\x56\xbe\xbc\ +\xaa\x6c\x29\x65\x54\xd9\x94\xe8\xc2\xe0\xde\x89\x43\x03\x7c\xd5\ +\xd1\x91\x8a\x9a\x81\xa8\xb8\xa9\xa9\x22\xbb\xbd\x71\xae\xa9\x28\ +\xf1\x24\xcb\x89\x2d\xc9\xf5\x15\x5d\xd1\x64\x88\xc6\xe6\xc0\xea\ +\x0f\x43\x5a\x18\xf4\xcf\x86\xcc\x37\x8f\x5f\x95\x67\xd6\x39\x4e\ +\xcc\x20\x26\x36\x26\xf2\xdd\xd5\x76\xd6\xe0\xd3\xc3\x23\xb9\x0a\ +\x0a\xb8\xdd\x1b\x7a\xe3\xa8\xf9\xd0\x63\x43\x18\x44\xab\xeb\x8d\ +\xb7\xea\x2b\x3e\x11\xda\xf4\xd8\x21\x69\x65\x65\x03\x45\xb2\xdf\ +\xa7\x33\xfb\x7d\x2a\x93\x62\xe7\xd1\x44\x4a\x19\xb4\x0d\x6a\xd9\ +\xe1\xd1\x78\x58\x04\x51\xab\x90\x4b\x9d\xf5\xa7\x8f\x74\x51\x80\ +\xaa\xa1\x14\x59\x57\x6a\xed\x06\x20\x72\x2f\x1f\xd6\xc6\xa4\x82\ +\x37\x04\x50\x49\xa6\x2b\x0c\x7b\x91\x5d\x00\x8e\xd4\x35\x26\xd6\ +\x24\x9b\x00\x2e\x4f\x4a\xa3\x89\xe2\x45\x5e\xd0\x22\x65\x1f\x13\ +\x0b\x93\x45\xb2\x25\xda\xe1\xa9\xb5\x56\xe1\xf8\xdf\xb4\x4a\x21\ +\x95\x50\x33\x7a\x59\x45\xb5\xe9\x6a\xb2\x18\x28\x2e\x4d\x82\x82\ +\x6f\x54\xb2\xa5\x0e\x34\x7c\x44\x9d\x41\x16\x4b\x58\xf5\x02\x93\ +\x1c\x6b\x04\x62\x34\xdc\x80\x59\xb9\x9a\x94\x39\x99\xcb\x5a\xc5\ +\x49\x6b\xed\x40\xaf\xe2\x43\x1c\x82\xc7\x32\xeb\x6e\xda\x56\x3e\ +\xeb\x46\x43\xa4\xab\xee\x2b\x46\x42\xb0\xe2\x80\xd5\x63\x92\xe0\ +\xf4\x06\xa8\x60\x54\x3e\x32\x35\x61\x70\x5a\xaf\xe2\x54\xc9\x87\ +\x71\xf1\x0f\x30\xd2\xb5\x3c\x14\x6c\x08\x36\x3c\xab\x85\xb5\x63\ +\xb2\x8b\x9a\xa7\x1e\x2e\x61\x95\x06\x56\x3b\x00\x56\xe6\x9b\x8a\ +\x13\xb4\x2a\xc5\x95\x90\x1b\xba\xa0\xb5\xbd\xe9\xd0\x08\xf0\xc6\ +\x60\x66\x95\xca\x97\x24\x81\x6a\xb6\x00\x3e\x5b\x82\xca\x35\xbe\ +\xf5\xce\x41\x20\x8f\x49\x1e\x5f\x6a\x16\x8d\x1e\x65\x94\xb3\x06\ +\x51\x6f\x2f\x3a\xb1\x05\x1a\xc4\x8b\x12\x29\x9b\xeb\x41\x89\xb7\ +\xa8\x69\x73\xad\x44\x4c\x72\xdb\x29\x20\x73\x15\x21\x5e\xc6\x84\ +\x00\xb9\xd1\x76\x04\x38\x16\xd8\x1a\x92\x45\xed\x7d\x68\x26\x57\ +\x62\xad\x1b\x5a\x44\xd0\x03\xb3\x0e\x95\x54\x82\x68\x49\xa5\x7d\ +\xad\x09\x2a\xf0\xb0\x6b\xec\xa6\x8f\xc4\x87\xf1\x38\xee\xc8\x40\ +\x15\x9d\x43\x24\x8b\xb5\xc1\x52\x06\x9d\x08\xff\x00\xcd\x09\x52\ +\x76\xd6\x85\xf1\x18\x74\xff\x00\x98\x58\x8e\x40\x68\x7e\x75\x4a\ +\x58\xf1\x0e\xc6\x61\xa6\x6d\x40\x07\x51\x55\xa7\x16\xa4\xb2\x30\ +\x56\x04\xb3\x6c\xa3\x7a\x16\x23\x36\x42\xa5\x09\xf4\xdc\xdc\x37\ +\xce\xab\x0c\x54\x58\x58\x8e\x70\x5e\x56\xe5\x7f\xd6\xb9\x38\x84\ +\x33\x44\xe9\x24\x45\x34\x26\xe0\xdc\x0a\xce\xac\x3c\x8b\x1b\x1a\ +\x83\x41\x0c\xa1\x80\x49\x18\x6b\xe8\x93\x93\x0a\x36\x04\x0b\xee\ +\x3b\x6b\x49\x06\x80\x16\x3b\x28\xb9\xaa\xd8\x7c\x53\xc9\x89\xc9\ +\x27\xa1\xcd\x80\xfc\x35\x65\xf2\xb4\x4e\xa4\xd8\x32\x91\x7e\x95\ +\x99\x2e\x1e\x78\x4e\x7f\x84\x1f\x50\x3a\x56\x79\x69\x8d\x09\x06\ +\x51\xdc\x1a\xe1\x72\x2e\x45\xa9\x31\xe3\x22\x68\xc3\x4a\xcd\x9c\ +\x0b\x1b\x0d\xe9\xb0\x49\x2c\xaa\x1d\x63\x8e\x38\xfa\xb6\xa5\xa9\ +\xd0\x0c\x7c\xc7\x0d\x84\x56\x50\x0b\xbb\x58\x5f\x5b\x0a\xc9\x96\ +\x59\x24\xbe\x77\x2d\x7d\xee\x6b\x5b\x89\x2b\xbe\x04\x93\x87\x8d\ +\xb2\x38\xb5\xa4\xeb\xde\xb2\x64\x31\x89\x04\x72\x2b\x42\xcd\xe9\ +\xb9\xba\x9f\x9d\x73\xe7\xe9\x85\xac\x2d\x2c\x81\x62\x42\x49\xe5\ +\x5b\x38\x2c\x32\x61\x63\x1b\x3c\xbc\xd8\x8d\xbd\xa9\x7c\x16\x33\ +\x16\x1e\x49\x34\xcc\x5b\x28\xed\x4f\x7b\x8d\x47\x3a\x78\xcc\xed\ +\x54\x9d\xf5\x3a\x9a\x9f\x6a\xe5\x51\x6d\x45\xfb\xd7\x59\xbb\x56\ +\xc0\x96\x47\x3e\x5d\x5a\xdc\x9b\x51\x55\xe7\x88\x41\x8f\x8d\x97\ +\x28\x0f\x6b\xad\xce\x9d\x45\x3e\x30\x55\xee\x0d\xef\xbf\xf3\x54\ +\x4a\x48\xb8\xc0\xa4\x33\x30\x6d\xba\xd1\x4c\x5f\x58\x4a\xcd\x96\ +\xf7\x0a\x4d\xcf\x40\x2b\x17\x8d\x83\x8f\xe3\xea\xb1\x82\x04\x81\ +\x7e\x55\xa3\xc5\x78\xb6\x0e\x0c\xf0\xa5\xe4\x91\xbf\xcc\x03\x61\ +\xda\xaa\xe1\x63\x68\x10\xe2\x26\x00\x62\x27\xd4\x0b\xea\x8a\x6b\ +\x3c\xb2\xf4\xa2\xfe\x04\xab\x63\xce\x50\x32\xa4\x64\x2e\x9d\x06\ +\xf5\x64\x58\xef\x54\x78\x41\xff\x00\x89\x6f\xfe\x36\xfd\x2a\xe0\ +\x35\xae\x3e\x0a\x00\x33\x35\xce\xc3\x6e\xf4\x5e\x55\x46\x76\x1e\ +\x55\x17\xb7\x53\x45\x90\xa9\x0a\x75\x3f\xad\x56\xe2\x32\x02\xc2\ +\x25\x20\x85\xde\xdc\xcd\x37\xa4\x44\xae\xd2\x39\x66\x37\x26\xb8\ +\x54\x0a\x90\x2b\x0d\x0d\x4d\xa9\x80\xd2\x41\xb5\x4e\x6a\x74\x60\ +\xb1\x12\x98\x85\x94\x5d\xdc\x59\x47\xef\x54\x1b\x09\x89\x92\x75\ +\x41\x13\x0d\x37\x23\x41\x57\xdc\xf9\xe6\x6b\xf9\xae\x32\xf5\x0b\ +\x6d\x28\x92\x46\x0b\x94\xb1\xef\xad\x16\x6a\xd0\x88\xca\x20\x45\ +\x4d\xb7\x6e\xb4\xf0\x75\xa0\x0d\x44\x0d\x6e\x05\xac\x1e\x27\xc3\ +\x19\x1c\x5d\x39\x5b\x71\x5a\x09\x62\xb9\x94\xdd\x7a\xd6\x3a\xd3\ +\x60\x95\xe2\x37\x46\x23\xb5\x6a\x51\x8d\x45\xd3\xdb\xf4\xa2\x1b\ +\x8a\x46\x1f\x15\x1c\x9a\x3f\x91\xbf\x23\x4e\x22\xde\xd5\xb8\x04\ +\x45\xe8\x48\xa2\x5d\xaa\x6d\x7a\x40\x2d\x7d\x0e\xaa\x74\x22\xb3\ +\x71\x31\x18\xa5\x2b\xcb\x91\xeb\x5a\x85\x74\xa0\x91\x12\x44\xcb\ +\x20\xb8\xe5\xd4\x56\x6c\xd3\x2b\x2f\x99\xed\x52\x85\xaf\x65\xd4\ +\x9a\xb8\xd8\x38\x80\xb8\x77\xbd\xf4\xd2\x9d\x1c\x51\x45\xe8\x5d\ +\x7f\x11\xde\x8f\xcd\x3a\xa7\x88\x85\xd2\x14\x91\xf5\x60\x79\xfc\ +\x34\xcc\x2c\x4e\x22\x25\xdd\x95\x5b\x65\x06\xd7\xa7\xcc\x03\x64\ +\x8d\xbe\x23\x98\x8e\xc2\x86\x47\x24\xf7\xab\x02\x02\x5b\x44\x96\ +\x45\xf9\xde\x97\x1c\x32\x7d\xa5\x64\x92\x5c\xc1\x75\xbf\x3a\x2c\ +\xda\x5c\x9a\x25\x34\xa2\xf8\xab\x95\xc0\x1b\x7f\xcc\x6b\x56\x39\ +\x17\xda\xb6\xb1\xe9\xe2\xe0\x1d\x46\xe9\xe7\x15\x8c\x6b\x1c\xfd\ +\x31\x38\x42\xcb\x8a\x8d\x94\x90\x43\x8d\x6b\x6b\x88\x9c\xb0\xcd\ +\x61\xb9\xcb\xf9\xd6\x18\x62\x08\x23\x71\x5b\x78\xe1\x9f\x08\xc4\ +\x10\x6e\xaa\xd7\xbe\xfa\x6b\xf9\xd5\xc7\xca\xaf\xac\xb2\x85\xe0\ +\x96\x30\x45\xd9\x0d\xbf\x5f\xda\x87\x0e\x99\x70\x71\x03\xcc\x16\ +\x16\xe8\x69\xd1\x30\x52\x58\xe8\xa1\x4d\xc9\xe5\xa5\x09\x37\xca\ +\xb6\xb1\x08\x05\xbe\x55\x13\x78\x71\xb6\x36\x22\xd6\xdf\x7a\xd2\ +\xbe\x53\x73\xcb\x7a\xc9\x43\x96\x45\x27\x91\xb9\xad\x49\x08\x63\ +\x9b\x93\x6b\x5a\xe2\x2a\xa3\xdb\x0d\x8f\x59\x00\x39\x0b\x66\x1e\ +\xd5\x61\xb1\x10\xa4\x6c\x43\x86\x26\xf6\x51\xce\xf4\x18\xb4\xcd\ +\x11\x1b\x91\xaa\xf5\x15\x45\x2d\x9d\x73\x6d\x7e\x74\x78\x9a\x58\ +\x5c\xdf\x64\x8f\x36\xfa\xdb\xda\x8a\xe6\xf6\x16\xbf\x7e\x54\x33\ +\x92\x24\xb2\xb5\x94\xed\xd8\x57\x0b\x28\xb0\xf9\xd6\x82\x58\x66\ +\xf5\x12\x7d\xb4\xa9\x16\x0b\x61\x43\x9a\xa4\x1b\xd4\x9c\xe7\x63\ +\xd0\xd0\xb0\x37\xbd\x49\x60\x7c\xa3\x73\xa5\x11\xb0\x1a\x9b\x7b\ +\xd4\x80\x59\xaf\x7d\x01\xeb\x6d\x7e\xb5\x05\xd8\x0f\x33\x5c\x73\ +\x07\x51\x52\x59\x3a\x8e\xe7\x61\x49\x9f\x11\x85\x45\x39\xde\x4d\ +\xb4\xfb\xb2\x2f\xf3\xa1\x2a\x71\x18\xd5\x66\x53\x10\xb8\x93\x60\ +\x39\x1a\x64\xb8\x94\x8a\x20\xcb\xe6\x90\x2d\x89\xbf\x95\x2c\x39\ +\x9a\xab\x89\xc6\x99\x2f\x1a\xa6\x44\xe5\x66\xd4\xfc\xeb\x37\x1d\ +\x02\x2a\xc7\xe1\x33\x2a\xc8\xd6\x2a\x5a\xff\x00\x3a\xe7\x79\x67\ +\x8d\x48\x63\xa9\x99\xcb\xa4\x89\x2b\x1d\xf2\x9b\xd0\xba\xb4\x78\ +\x69\x8b\xa9\x19\x93\x28\xb8\xb5\xc9\xa3\xc9\x0c\x0f\x91\x20\x43\ +\x94\xd8\xb1\xbd\xcd\x41\x2a\xba\xac\x44\x13\xb1\x72\x5b\xe9\x7a\ +\xcb\x48\xe1\xe2\x4c\x3c\x19\x27\x70\x50\x9b\x15\xdc\xa5\xf6\x35\ +\x77\xc3\xc4\x61\xe3\xf1\x95\xac\x2f\x6b\x75\xaa\x31\x0f\x10\xbc\ +\x6d\x7f\x3a\x9b\x9b\xfc\xe9\xff\x00\xe1\xe9\xc6\x30\x0c\x3c\xcd\ +\xe6\x88\x5d\x6e\x7d\x42\xa9\xfc\x15\x78\xd9\x91\x58\x8b\x07\x50\ +\x48\xe9\x42\x9e\x47\x22\xe3\x5e\xb4\xd9\x83\x03\x66\x16\x3d\x29\ +\x6c\x9d\xf5\xae\x81\x5e\x7c\x28\x7c\x75\x94\x05\x52\xa1\x9b\xb5\ +\x58\x36\xb0\x55\x16\x55\x16\x15\x28\xa0\x48\x0d\xcd\xda\x36\xbf\ +\xc8\x8b\x7e\xf5\xce\xcb\x04\x46\x69\x6c\x00\xf4\x83\xf1\x1a\x27\ +\x49\x5b\x8c\xb8\x8f\x06\x20\xbf\x9a\x43\x98\x8e\xd5\x9b\x2c\x26\ +\x60\x98\x7b\xfa\x48\x77\x62\x3d\x3d\x05\x14\xaf\x26\x27\x11\x99\ +\xdb\xcc\xc6\xde\xd5\xab\x81\x81\x53\x0e\x31\x0e\xbe\x77\x76\x65\ +\x53\xf9\x13\xf2\xae\x7f\xed\x4f\x82\x0a\x23\x88\x26\x97\x3e\x66\ +\xb5\x75\xaf\x44\x41\x2d\x73\xa9\x34\x4a\x2d\xef\x5d\x70\x01\x12\ +\xc6\xf7\xd3\xa5\x11\x14\x56\xae\xa9\x04\x21\x24\x00\x09\x27\xa5\ +\x54\xe3\x73\x5b\x0c\xeb\x86\x65\x33\xc6\x9f\x78\xc3\x9a\xf4\x1e\ +\xd5\x67\x1f\x2b\x41\x81\x2c\x9a\x34\x8d\x92\xfd\x05\xab\x37\x05\ +\x1f\x8d\x21\x42\x33\x07\xd1\x87\x51\xbf\xec\x07\xce\xb3\xca\xfc\ +\x30\x8f\xf0\xde\x03\xc5\xc5\x7d\xa7\x14\xb6\x46\x6f\x28\x27\x57\ +\x35\xb4\xf1\x45\x33\xf9\xb0\xeb\x72\x7e\x0d\x0d\x09\xc2\xb7\x88\ +\xae\x31\x08\x85\x3d\x2a\xaa\x6c\xbd\xab\xa6\x4c\x63\xbe\x51\x2a\ +\x88\xce\xec\xa2\xc2\x8e\x33\xf3\x33\x15\xba\xad\x12\x18\xf8\xa0\ +\x8e\x27\x06\xcf\x60\x6a\xe3\x6a\xc7\x2e\xd7\xd2\x97\x1e\x12\x34\ +\x90\x3c\x53\xb2\xba\x9b\xdd\xd7\x4f\xca\x98\xd2\xb4\x6c\x7c\x40\ +\x8e\x83\x76\x45\xca\x57\xe5\x4c\xe8\x16\x71\x1e\x1e\x0d\x2d\x6f\ +\x13\x2d\x87\x61\xfc\xd5\x46\x94\xa6\x2e\x38\x40\x41\x9c\x02\xcc\ +\xc2\xfb\xd5\x63\xc4\x30\xb8\x62\x13\x19\x88\x46\x3b\xd9\x63\x24\ +\x8d\x7a\xd0\xe3\xf1\xb8\x39\x22\x47\x11\x4a\x1d\x96\xe1\xae\x34\ +\x1c\x85\x66\xf2\xff\x00\xad\x62\xfc\x8c\x06\x29\x60\x70\x2e\xe2\ +\xea\x42\x80\x54\xf7\xa0\xbd\x67\xe0\xb1\xf8\x48\xdb\x34\x89\x2b\ +\x39\xd0\x35\xc6\x95\x64\x62\xb8\x7b\x35\x97\x18\xc2\xfb\x66\x8c\ +\x80\x3d\xcd\x13\x94\xa8\xeb\xd7\x5e\x83\x36\x1f\xff\x00\xe7\x61\ +\xbf\xef\xfe\xd4\x48\x82\x40\x7c\x19\xe2\x97\x5d\x91\xbf\x9a\x50\ +\xc3\x31\x65\xcb\x6c\xc0\x11\xae\xcc\x3a\x54\xab\x44\xf6\x2b\x2a\ +\xad\xfe\x16\xdc\x52\xb5\x56\x01\xb4\x20\xd3\x16\x57\x1a\x83\xaf\ +\x5b\x6b\xf5\xa8\x05\xf1\x29\x19\xb2\xc3\x23\x0e\x6c\x45\x85\x58\ +\x56\x0c\xa1\xd0\x92\xad\xb1\xa5\x09\x5f\xf1\x93\xf3\xa9\x8e\xc0\ +\xdd\x0e\x42\x4e\xb6\xd5\x4f\xb8\xa6\x2a\x78\x34\x6a\x69\x2a\x7c\ +\xd9\x48\xca\xc7\x61\x7b\x86\xf6\x34\x52\xc8\x21\x8f\x3c\x8a\xc7\ +\x5b\x58\x69\x5a\xd0\x70\x37\xab\x38\x4c\x51\x8c\x64\x71\x99\x7d\ +\xf5\x15\x4e\x09\x23\x99\x43\x44\xc2\xfc\xd5\x8e\xa2\x9b\x91\xaf\ +\xcb\x5e\x57\xa6\x54\xd4\x56\x05\x43\xa1\xba\x9a\x35\x70\x45\x67\ +\x60\x24\x29\x88\x08\x76\x6d\x08\xab\xbb\x1b\x8a\xdc\xac\xd8\x63\ +\x1d\x28\x76\xa8\x56\xbd\x71\x34\xa0\xb9\x6c\xe0\x1f\x4d\xea\x24\ +\x9a\x14\x62\xae\xe7\x30\xdc\x01\x45\x7b\x29\xbf\x4a\xce\xc2\xc6\ +\x65\x66\x67\xf3\x2a\xeb\x6e\x67\xde\x8b\x52\xea\x31\x75\x32\x95\ +\xb1\x7b\x65\xec\x05\x2d\x8d\xc9\x00\xd4\xa1\x24\x90\x4f\xf6\xa0\ +\xcc\x10\x1b\xee\x0d\x15\x25\x88\x28\x00\x3b\xd1\x03\xad\x21\x49\ +\xce\x0f\x7a\x60\x27\xa5\x11\x2c\x42\xc2\xfa\xec\x74\x3e\xc6\xb1\ +\x31\x89\xe1\x62\x5e\x3f\xc2\x48\xad\x68\xc9\x3e\xe4\xda\xb2\xf8\ +\xc3\x2b\x71\x19\x8a\x9b\x8c\xd4\x72\xf0\xf1\xf5\x5e\xf5\x73\x07\ +\xc4\x0c\x71\x78\x32\xa0\x74\xd8\x1e\x6a\x2a\x8d\xcd\x1e\x1f\x0f\ +\x34\xe6\xd1\xa5\xc7\x53\xb0\xac\x4b\x67\x8d\x55\x9c\xd0\xb3\x08\ +\xcb\xe4\xcb\x62\xca\xfa\x66\x27\x61\x7e\x95\x0e\xcc\x65\x21\xd4\ +\x8b\xeb\x73\xce\x87\x89\x70\xb7\x91\x51\xc4\xd1\x99\x32\x65\x65\ +\x23\x47\xb6\xc2\xfc\xa9\x38\x61\xc4\x70\xa9\x67\xc2\x46\xd1\x74\ +\x12\xde\xfe\xd7\xa7\x6e\xf6\x16\x01\xab\xfc\x3e\x6c\xf1\xf8\x2d\ +\x6b\xaf\xa3\xbf\x6a\xce\x8f\x11\x85\x90\xd9\xcb\xe1\xdf\xa3\xa9\ +\xb5\x19\x93\x0c\x84\x13\x8c\x86\xfc\x80\x7b\x7e\xb6\xad\x4a\x9a\ +\xc0\xd8\x82\x37\x06\x96\xf8\x6c\x33\x36\x6c\xac\xb7\x37\x21\x4e\ +\x87\xf8\xa4\x47\xc4\xb0\xf2\x58\x11\x63\xd4\x87\xf3\x7b\x1b\x5a\ +\x8f\xed\x98\x5b\x5e\xed\xed\x63\x7f\xa5\xab\x5b\x19\xca\x73\xaa\ +\x93\xd3\x4b\x6f\x51\xcb\xb8\xa5\x2e\x26\x16\xbd\x96\x40\x06\xec\ +\x08\x36\xa1\x97\x13\x02\x59\xbc\x4c\xf7\xdc\x2e\xf5\x6c\x47\x0a\ +\x25\x22\x90\xb3\xc6\xe2\xe8\x49\x1c\xef\xb8\xa3\x92\x68\x61\x8b\ +\xc4\x95\xec\x0e\xca\x06\xa6\xad\x46\xb1\x5f\x9f\x6a\x8b\x80\x6f\ +\xcf\xa9\xac\xe9\xb8\xab\xe6\xfb\x98\xa3\x55\xfe\xa1\x72\x6b\x93\ +\x8a\x3d\x8f\x89\x04\x6f\xd2\xde\x5f\xd2\x8f\xd4\x39\x57\xa5\x62\ +\xaf\x98\x12\x3b\x8a\x57\x15\x7f\x17\x86\xc8\x49\xb9\x0e\xb9\x6f\ +\xb8\xaa\xe7\x89\x86\x5b\x7d\x95\x07\xfd\x66\x93\x8a\x9e\x4c\x51\ +\x16\x50\xaa\xa3\xd2\x0e\x9e\xf4\x5e\x53\xe2\x92\xaa\x85\x2c\x40\ +\x1b\xdc\x55\x9c\x16\x08\xe2\xe4\x13\xb0\x0b\x1c\x77\x11\xe6\x1a\ +\x7b\xf7\xa8\xc2\x44\xcf\x32\xf8\x56\x77\xbe\x83\x5b\x03\xdc\xed\ +\x5a\xcf\x00\x8e\x34\x89\x1a\xe2\x35\x03\xdc\xf3\x35\x9e\x3c\x74\ +\xda\x4a\x43\x87\x87\x58\xe2\x52\xc3\xe3\x71\x72\x6b\x9a\x42\x56\ +\xed\x1a\xb2\x5b\x62\xa2\x89\xa3\x76\xdc\xfd\x68\x5a\x0d\x34\x6a\ +\xdb\x2c\xfc\x7e\x13\xec\xee\x31\x10\x8c\xd1\x13\xa8\xfc\x3d\xab\ +\x23\xec\xf3\x41\xc4\x55\xa1\x52\x54\xb5\xd5\x80\xe5\x5e\x9d\x15\ +\xd4\xda\xde\x52\x3c\xc1\xb6\x34\xac\x46\x02\x27\xb9\x86\x66\x86\ +\xff\x00\x0e\xb9\x6b\x1c\xb8\x6f\x8d\x4e\x4c\xd6\xc6\xe2\x61\x93\ +\x2a\x38\x65\x04\x80\x18\x66\x00\x51\xe2\x78\xba\x43\x87\x0e\xf8\ +\x54\x66\x7f\x48\x0c\x45\xfb\xd5\x96\xe1\x98\x60\xb6\x33\x4a\x48\ +\xd6\xe1\x45\xa9\x27\x85\xc5\x36\x30\x93\x3a\xe5\x85\x00\x0a\xea\ +\x4d\x8f\x5f\xad\x59\xc9\x6c\x26\x2e\x29\x24\x90\x1c\x40\x82\x38\ +\xcb\x9c\xaa\x2e\x58\x58\x55\x77\x79\x31\x58\x90\x65\x62\xd9\x88\ +\xf9\x55\xfc\x47\x0f\xf0\xd0\x49\xf6\x88\x88\x26\xcd\xf7\x66\xdd\ +\xb4\xe4\x7b\xd4\xe0\x61\xc8\x59\xe0\x88\xc8\xdc\x98\x0d\x17\xeb\ +\x46\x5f\x29\xd8\x8c\x06\x10\x78\x4c\xf2\xbe\x53\xb0\x55\xf8\x3f\ +\xbd\x59\xb0\x0a\x15\x6f\x65\x16\xd6\x8e\x08\x7c\x28\x8a\x12\x0b\ +\x33\x5d\x88\xda\x88\xad\x6a\x4c\x66\xd2\x80\xa9\x02\x8e\xd5\xda\ +\x52\xb4\x36\xee\x2a\x00\xd6\x8c\x81\x5c\x05\x43\x55\xb8\xc2\x16\ +\xe1\xaa\x40\xf4\x49\x73\xf3\x15\x4b\x84\x3a\xc7\x8c\x57\x7f\x40\ +\x23\x31\xb6\xdc\xbf\x5b\x56\x9c\xf2\xc5\x10\x31\x3a\x97\x2e\x2c\ +\xca\x0e\xd5\x56\x6e\x1b\x30\xb1\x8c\x2b\x20\x20\xf8\x69\xea\x3d\ +\x2f\x59\xb3\xbd\x6a\x78\xb5\x20\x21\xf2\x8d\xaf\xa3\x6e\x0f\xb5\ +\x09\x17\xde\xe6\xb3\x44\xb8\xcc\x2c\x8c\x4a\xba\xdc\xea\xac\x34\ +\x26\xad\xc5\xc4\x70\xf2\x1f\xbd\x8d\xa3\x3d\x57\x51\xf4\xa6\x72\ +\x8b\x0e\x39\x86\xda\xfb\xf2\xae\xd3\x0f\x19\x92\x43\x61\x63\xbf\ +\xc5\xda\xa7\xc6\xc3\x88\x5a\x54\xc4\x26\xd6\x01\xae\x0d\xea\xa6\ +\x27\xec\xeb\x08\x92\x4c\x6a\x34\xcc\x2e\x11\x8f\x3a\xad\x4a\x32\ +\xf0\xfc\x1c\xb3\x45\x23\x46\xf2\x85\x16\x32\x33\xd8\xad\xba\x8e\ +\x74\xc9\xdb\x0e\xcf\x98\x60\xa0\x37\x3a\x0c\xa6\xf6\xfa\xd0\x1b\ +\xf2\xb1\xf9\xd0\xb6\xe7\xb5\x85\x73\x68\x77\xc3\x5b\x5c\x0e\x1c\ +\x7f\xd1\xfd\xe9\x72\x61\xb8\x74\xb7\xfb\xb7\x89\x89\xff\x00\x96\ +\xd7\xfc\x8d\x75\x45\x81\x7c\xdd\x3f\x3a\x2e\x22\xcf\x0b\x81\x89\ +\x30\xe3\x2d\xa6\x8b\x22\x9b\xfd\x76\xaa\x78\xac\x3e\x27\x07\x20\ +\x12\x29\x53\xf0\xb0\x3a\x1f\x63\x5a\x20\xda\x98\xcb\xf6\x9c\x1c\ +\xb8\x63\xa9\xca\x5a\x3d\x79\x8f\xf7\xf9\x51\x78\x4f\x8b\x41\xc3\ +\x71\x5f\x6b\xc3\xb4\x52\xff\x00\x9b\x1a\xdd\x5b\x9b\x0a\x76\x6a\ +\xc4\xc1\x4e\x70\xf8\x94\x94\x7c\x27\x5e\xe2\xb7\x4a\xab\xc2\xb3\ +\xc5\xac\x6d\xff\x00\xd7\xb1\xab\x8d\xd8\xab\x81\xa3\x53\x4b\x5d\ +\xef\x44\x34\xad\xa3\x95\xc6\x5c\xac\x2e\x0e\xe2\x95\x89\x86\x49\ +\x2d\xe1\xc8\xce\xa3\xe1\x66\xd4\x7b\x57\x5e\xa4\x1e\x86\xa1\x83\ +\xc1\x26\x1e\x4c\x3e\x52\x80\xc8\xbe\xa1\xb3\x54\x4f\x86\x60\x33\ +\xc2\xec\xd6\xd4\x83\xb8\xa2\x46\x25\xc3\x05\xbb\x01\x60\x46\xf5\ +\x6f\x0b\x0b\xe6\x0f\x25\xd4\x74\xe7\x5a\x93\x55\xe8\x1c\x17\x14\ +\xf9\xb3\x4f\xe6\x45\xd0\x13\xb8\xad\x65\x65\x65\xcc\xac\x18\x1e\ +\x62\xb3\xe7\x84\x36\x28\x22\x79\x55\x85\xfb\x0a\x38\xe2\x9e\x07\ +\xcd\x13\x09\x07\x30\x39\xfc\xab\x7c\x76\x33\x57\x74\xb5\x0b\xca\ +\xaa\xf9\x0c\x8b\x7e\xe3\x6a\x1c\xd7\x50\xc0\x11\x7e\x47\x71\x5d\ +\x98\x2c\xb7\x36\x02\x40\x06\x63\xc8\x8e\x47\xde\xb5\xa0\xac\x76\ +\x20\x78\x5e\x1a\x4a\xad\x9b\x72\xbc\xa9\x1e\x22\xc4\xaa\x60\x91\ +\xb3\x11\x67\xb8\xa9\xe2\x51\xa2\x15\x65\x00\x16\xbd\xc7\x2a\x3e\ +\x1c\x88\x22\xf1\x48\x05\xb3\x5b\x5e\x55\x9f\xa5\x6a\x26\x49\x23\ +\x0f\x1f\x31\xa8\xe9\x49\x9d\x6f\xa8\x1a\x93\x46\xde\x6f\x32\xd9\ +\x5c\x6c\x6d\x6f\x91\xed\x49\xc6\x49\x29\x4f\x0d\x21\x65\x6f\x88\ +\x8d\x40\x1d\xa9\xa1\x31\x80\x07\x23\x7a\x23\xf9\xf2\xa4\xe1\x6f\ +\xe0\xa5\x81\xf2\x5c\x1f\xf7\xf3\xa6\xa1\x0c\xc4\xd1\x10\xd0\x88\ +\xa3\x69\x0e\xbe\x1a\x96\xac\x29\x1b\x33\x96\x3b\x93\x7a\xd6\xe2\ +\x72\x78\x7c\x39\xb6\xbc\x87\x27\xef\x55\xf8\x54\x28\xb0\xfd\xa1\ +\xd4\x16\x63\x65\xbf\x2a\xcf\x2e\xee\x35\x3a\x80\xc1\x60\x4c\x8a\ +\x24\x95\xb2\x2d\xf4\x5b\x6a\x6b\x44\x65\x54\x08\x8b\x95\x06\xc2\ +\x96\xce\x49\xb9\x35\x19\xe9\x9d\x0b\x74\xc0\xd6\xda\xdf\x31\x43\ +\x2a\x89\x2e\xca\xc5\x24\xfc\x43\x9f\xbd\x0e\x6d\x2a\x03\x54\x15\ +\xe7\x52\x3c\x93\x46\x3b\x15\x39\x4f\xc8\x8a\x57\x85\x87\xfc\x33\ +\x7f\xfe\xe6\xae\xbb\x23\xa6\x57\x19\x87\x6e\x55\x56\x48\x98\x5c\ +\xa0\x2c\x3f\x31\x45\x87\x49\x38\x6c\x16\x6c\xc2\x19\x2f\xd7\xc5\ +\x34\x66\x34\x90\x91\xe2\xba\x5f\x6b\xd8\x8f\x9d\xa8\x0b\xdb\x90\ +\x34\x25\xbb\x0a\x3a\x21\x6f\xb4\x61\x58\x30\x24\x03\xb1\x1b\x1a\ +\xbb\x82\xe2\x10\xc8\xbe\x1c\xa1\x22\x70\x3d\x45\x46\x53\x55\xc4\ +\xc4\xc7\xe1\xbd\x99\x3a\x1a\x19\x70\x0e\xcb\x9f\x0f\xf7\x8b\xd3\ +\x9d\x53\x67\x87\xff\x00\x56\xf1\x73\xc1\x14\x82\x68\xd9\x64\xcc\ +\x9a\xaa\x6c\x75\xb5\x67\xcf\x3b\xca\xe5\xdc\xdd\x8d\x48\x56\x55\ +\x55\x70\x54\x32\xb2\x6a\x39\xdc\x11\xfb\xd5\x76\x24\x12\x0e\x96\ +\xa3\x95\xaa\x41\x86\xa2\x07\xa5\x29\x4e\xb4\x6b\x59\x26\x03\xf9\ +\xd5\x84\x8c\xbc\x82\x30\xb9\xb2\x90\x15\x6d\xa3\x36\xe4\x9e\xb6\ +\xa4\x44\x06\x60\x5b\xd2\x35\x3e\xd5\xab\xc2\xa3\x29\x84\x18\x89\ +\x57\xef\x24\x62\xc9\x71\xa8\x07\x9d\x6f\x8c\xd1\x6a\xd4\x00\xe1\ +\xe1\x11\x83\xe6\xb7\x9c\x8e\xbd\x2a\x43\x03\x4b\x1b\xd1\xa0\xd6\ +\xba\x30\xe2\x0f\x4a\x13\xa1\xa6\x69\x7d\xea\x1b\x28\xd4\x91\xf2\ +\xab\x11\x7a\x54\x15\xa6\x05\x0c\x2e\x2a\x4a\x91\x52\x21\x85\x01\ +\x8b\xef\x3c\x48\xd8\x23\x9f\x50\x23\x46\xab\x05\x6f\x49\xc5\x32\ +\xc7\x26\x42\xe7\x35\xb5\x55\x17\xb7\xbd\x18\x8a\x92\x39\xe5\x53\ +\x13\xa2\xc4\x81\x86\x63\x9a\xf9\xbd\xa9\xb9\x54\x28\x44\x16\x45\ +\xd8\x52\x92\x78\x90\xf9\xd2\x40\x4f\x33\x4d\x61\xa5\xc1\xb8\x3b\ +\x1e\xb4\x17\x1b\x0a\x12\xdd\xab\xac\xc4\x5e\x84\x9a\x82\x49\xa8\ +\x2d\x42\x4d\xe8\x6a\x38\x3c\xc2\x97\x8d\x96\x48\xa0\x46\x89\xca\ +\xdd\x88\x36\xe7\x53\x7a\x5e\x30\xd8\x43\x21\x52\xd1\xa1\x39\x87\ +\x7a\xaf\x8b\x15\x15\x99\x66\x56\x7b\x8d\x41\xd6\xb4\xa7\xbe\x72\ +\x79\x31\xf2\x9e\xb7\xaa\x78\x89\x5b\x1b\x32\xaa\x29\x55\x1f\x11\ +\xd6\xde\xf4\x79\x9f\x0a\xaa\x4b\x09\x62\x2d\xb1\x16\x3b\x72\xac\ +\xc3\x56\x04\x8f\xcd\xb3\x0e\x8c\x2e\x3f\x3a\x07\xc3\x61\x5d\x73\ +\x49\x87\x54\x1b\xdd\x5b\x2d\xff\x00\x9a\x4b\xe3\xa2\x0b\xf7\x71\ +\x31\x6f\xeb\x3a\x55\x69\x25\x92\x46\x0e\xe4\x34\x92\x1b\x46\xa7\ +\x6f\x7b\x74\xa6\xf2\x8b\x1d\x88\x8b\x0d\xe2\x59\x1e\x45\x54\x37\ +\x16\x50\x48\xbe\xd7\xd7\x7a\xab\x26\x0b\x07\x23\x97\x79\xb1\x04\ +\x9f\xe9\x5a\x6c\xac\x01\xc8\xa6\xea\x0e\xe7\xe2\x3c\xc9\xa5\xb3\ +\xa8\x6c\xa4\xd8\xfe\x95\xce\xb4\xe8\xf0\xef\x31\xb4\x71\x13\xa6\ +\xe2\x82\x58\x65\xc3\xf9\x64\x52\xa4\xeb\xad\x6b\xb8\x1a\xa2\x59\ +\x63\x4f\xa0\xee\x6b\x3f\x1f\x30\x96\x50\x17\xd0\x82\xcb\x7f\xd6\ +\xab\xc7\x04\xaa\xeb\x7d\xcd\x72\xe9\xa7\x4d\xaa\x6b\xbb\xf4\xa0\ +\xba\x9d\x82\x36\xc5\xa0\x3b\x31\xca\x7e\x7a\x7e\xf4\xa0\x2f\xd7\ +\xe9\x44\xa2\xcd\x71\x7d\x3a\x5b\xf9\xa6\x26\x3e\x21\x04\x78\x99\ +\x10\x03\x65\x72\x07\xb5\x3b\x05\x8a\x9f\x0a\xf7\x8a\x4c\xb9\xbe\ +\x13\xb1\xad\x2c\x46\x1f\x0b\x8b\x9c\xcd\x2f\x8b\x1b\x9f\x51\x40\ +\x0e\x63\xd7\x5a\x98\xb0\xbc\x3e\x16\x0c\xb0\x34\xac\x07\xaa\x56\ +\xd3\xe9\x58\x9c\x6c\xa7\x4a\x8b\x8b\x21\xb0\x9b\x08\x84\xfc\x45\ +\x09\x1f\x96\xd4\xf4\xc6\xf0\xf7\x5b\xf8\xb2\xc6\x7a\x32\x66\xfd\ +\x2a\x5a\x3c\x24\x82\xcf\x83\x8c\x5c\xef\x1d\xd4\xd4\x45\xc1\xe0\ +\xc4\x4b\x9b\x0f\x23\x28\x06\xe5\x1f\x6f\x60\x6b\x73\xf4\x0f\x89\ +\x23\x98\x06\x86\x65\x65\x3d\x74\x35\x6d\x30\xf8\x44\x8d\x5e\x59\ +\x90\xdf\xab\x7f\x15\x9b\x8b\x86\x68\x9f\x2c\x91\x14\x03\x61\x6d\ +\x00\xa4\xd3\xb9\xf0\x36\x86\x33\x05\x18\xca\xb3\x10\x07\x25\x8f\ +\x7f\x9d\x70\xc7\xe0\xd5\x0c\x85\xa4\xb2\xf3\x22\xb2\xe0\xc3\x4b\ +\x2a\x66\x58\xe4\x61\x7b\x79\x56\xac\x37\x09\x92\x58\x8c\x52\xc8\ +\x89\x73\x71\xe6\xd4\x7b\x8a\xd6\xf2\xf9\x06\x45\xa8\x31\xf0\x29\ +\x2d\x20\x92\xf2\x0b\xdf\xa0\xa7\x47\x8f\xc0\xb7\xfc\xe6\x07\xba\ +\x55\x01\xc3\x8c\x91\xae\x7c\x42\x29\x5f\x21\xb0\x3a\xda\xa3\xff\ +\x00\x4d\x60\x72\xa6\x22\x33\x61\xbe\xa2\xf5\x4b\xc9\x64\x6c\xa1\ +\x59\x17\x34\x52\x2c\x83\xaa\x9b\xd7\x5f\x75\x22\xe0\xee\x0d\x62\ +\x9c\x16\x36\x23\x9e\x3f\x31\xe6\x63\x6b\xfd\x69\x90\xf1\x4c\x44\ +\x44\x47\x89\x84\x32\xed\x98\x8b\x1f\xad\x3f\xaf\xe8\xc6\x89\x86\ +\x03\xae\x43\xa7\xf5\x69\x53\x9e\x35\x5c\xaa\x00\x1d\xa9\x11\x62\ +\xb0\xf8\x96\xc8\xb2\x80\xc0\x5e\xcd\xa7\xe7\x4f\x58\xd9\x45\xd5\ +\x2e\x3a\x8d\x69\x9f\xf1\x09\x1e\xe3\x45\x35\x21\x9f\x36\x6b\xdb\ +\xe7\x4b\xcf\x6a\x8c\xf7\xab\x40\xda\x45\x8a\x47\x32\x12\x16\x42\ +\x18\x10\x36\x36\xb5\xa8\x23\x99\x1a\x7b\x05\x74\xcd\xe9\xcd\xb3\ +\x51\x26\x76\xf4\x82\x7e\x57\xa5\x62\xe4\x48\x94\xb4\xee\x3b\x28\ +\x3a\xdf\x95\x45\x5f\xfc\x44\xf7\x58\xa0\xda\xc3\x31\xf7\x34\xdc\ +\x3c\x80\x60\x60\x04\x58\xe4\xe5\xef\x59\x53\x62\xa6\x93\x16\x44\ +\x90\xab\x48\x41\x2a\xf9\xb4\xb7\x5a\xd2\x0d\x96\x18\x45\xf3\x11\ +\x18\xcd\xde\xb3\x2e\xdb\x4e\x74\x66\x75\xfc\x55\x19\xd6\xfa\x30\ +\xa5\xdd\x4d\xed\x6a\x02\x7c\xd6\x14\xea\x58\xcd\x6a\xe7\x63\x94\ +\xd8\xda\x96\x49\xa8\x6b\xe5\x34\xa3\x81\xb0\x16\xe9\x50\x5c\x82\ +\x08\xde\x96\xad\x71\x53\x98\xdc\x5e\xa4\x99\x60\x8e\x7f\x31\x39\ +\x1f\xa8\xd8\xfb\xd5\x3c\x42\x3c\x4d\x66\x5f\xa5\x5d\x06\xa5\xb2\ +\xb2\xe5\x71\x99\x7a\x1a\x2c\xd4\xce\x07\x9d\x33\x0f\x88\x78\x5a\ +\xe8\x74\xe6\x0e\xd5\x38\xac\x2b\x20\x2f\x11\x2c\xbc\xc7\x31\x55\ +\x43\x9b\xd8\xd6\x3c\x6b\xd6\xbc\x58\xb5\x99\x4d\x88\x70\x47\x99\ +\x1b\x5f\xa5\xe8\x13\x3d\xf2\xc3\xe1\x15\xfe\xa1\x62\x2b\x2d\x49\ +\x49\x33\xa1\xb1\x15\x7b\x01\x8a\x59\x49\x0e\x32\xbf\x23\xc8\xd6\ +\xa5\xd6\x71\x63\xec\xf1\x6a\x71\x11\xa3\x06\x3a\xc8\xba\x65\xfe\ +\x28\x26\xe1\x8b\x7b\xc3\x25\xbf\xa5\xbf\x9a\xb1\x11\x21\xec\x47\ +\xb8\xeb\x54\x9a\x79\x17\x34\x71\xb9\xc8\x09\xb7\xb5\x37\x14\xd0\ +\x47\x10\x17\x59\x2c\x56\xfa\x80\x77\xfe\xd5\xae\x1b\x3c\x51\xb5\ +\xad\x74\x1a\x74\xac\x85\x37\xad\x4c\x3b\xe7\xc2\xc6\xcb\xf0\x8c\ +\xa6\x9e\x22\x9a\xa3\x5a\x25\xb9\x24\x03\x60\x37\x22\x97\x7b\x0a\ +\x6c\x43\x2a\x81\x5a\x80\x59\x53\xf0\x0a\x90\x00\xf4\x80\x3d\xab\ +\xaa\x6c\x6b\x49\x04\x03\xb8\x07\xdc\x54\x65\x53\xf0\x8f\xa5\x15\ +\xab\x97\x46\x07\xa1\xa9\x05\x97\xc3\x06\x46\x19\x02\x8b\xde\xd6\ +\xaa\xd8\x51\x6c\x32\xb1\xb8\x67\x62\x49\xe6\x69\x8b\x08\xf1\xe5\ +\xf1\x49\x65\x46\xd0\x13\xa5\x11\x60\xcc\x06\x5b\x0e\x5c\xa8\x40\ +\x7c\xb2\x0c\xb2\x8c\xc2\xd6\xb9\x1a\x8a\xa4\x9e\x3c\x38\xaf\xb3\ +\x29\x04\x16\xb0\xb8\xd3\xde\xae\xb5\x81\xb7\x3e\x82\xab\xe3\xd5\ +\xef\x0c\xab\xa1\x0d\x97\xde\xb3\x4c\x1b\x95\x0f\xa6\x5d\x09\x2b\ +\x7e\x54\x82\xc4\x9b\x20\xbd\xb7\x35\x62\x45\x01\x99\x40\xd2\xfb\ +\x52\x9b\xca\xa4\xa8\x1a\x50\x00\x7a\x8a\x8a\x30\xa0\x0d\x2e\x7b\ +\xd0\xb0\x00\x5c\x9d\x2a\x3a\x12\x2b\x90\x90\x74\xf9\xd4\xfb\x6b\ +\x50\xdb\x5b\xad\x45\x25\xcb\x02\xa2\xd6\xe7\x61\x6b\xd0\xe2\x23\ +\x59\xa1\x11\xb3\xe5\xb3\x5c\x1b\x5e\xa4\xda\xdd\x85\x42\x92\x58\ +\x00\x37\xa9\x13\x26\x0b\x0e\xb1\xb4\x9e\x24\x96\x51\xcc\x00\x0d\ +\x50\x9c\x5b\x13\xf6\x8f\x13\x33\x0f\x4d\x86\x8b\xf5\xab\x5c\x52\ +\x6c\xcf\xe0\xaf\xa5\x37\x23\x99\xaa\x65\xac\x6b\x9d\xcd\xe8\xc0\ +\xe7\x62\x7d\x63\xfe\x91\x40\xcc\x11\xb4\xdc\x8d\x6f\x44\xc0\x36\ +\xbb\x1e\x44\x0a\xe8\xa1\x69\xb1\x48\xa4\x8b\x31\x02\xb3\x49\xf3\ +\x4f\x3c\xa9\x95\xa4\x25\x7f\x08\xa4\x53\x0d\x71\x53\xae\x97\xf9\ +\xd3\xa8\xba\x90\x28\x97\x53\x63\xa1\xa2\x0a\x4e\x9c\xea\x40\xb5\ +\x10\x5a\x24\x0d\x94\x92\x01\xb1\xd4\x73\xa3\xca\x4a\x82\x96\xf9\ +\xd4\x8b\x17\xa9\xa6\x15\xe9\x50\x16\xac\x41\x15\xa9\x87\x4f\x0b\ +\x0e\xa9\xf1\x37\x99\xbf\x6a\xa5\x84\x88\x49\x89\x44\xd8\x13\xad\ +\x68\xb0\xbb\x93\xca\xf5\xbe\x30\x5a\xe5\x77\xcb\x96\xf7\x1d\x0e\ +\xa3\xf3\xa8\x6c\x84\xdd\xa1\x88\x91\xcc\xad\x48\xf6\xae\x22\xf5\ +\xa6\x50\x5d\xed\x60\xc4\x0e\x83\x4a\x53\x13\x7a\x32\x2d\x42\xd5\ +\x17\x06\x3e\x21\x1f\x0c\x9a\x8e\xcd\xd2\x96\x58\xe7\x35\x33\x06\ +\x31\xa2\x25\xb3\x3c\x82\xd7\xed\xad\x74\xa6\xf2\x16\x1d\x68\x42\ +\x0c\x46\xa0\xda\x8f\xc5\x63\xeb\xb3\x8f\xea\x17\xa4\x13\x5d\x9a\ +\xad\x4e\x97\x0b\x81\x94\xdc\xc1\x90\xf5\x8c\xd8\x0f\x95\x25\x70\ +\x53\xc4\x6f\x85\xc7\x01\x6d\x81\x25\x69\xad\x73\xb3\x11\x50\xb9\ +\xc1\xd4\x82\x28\xe9\x25\x5f\x8c\xaf\x34\x9b\xd8\x83\x4b\x9b\x1b\ +\xc4\xd1\xb2\xb4\x45\x4f\x68\xe9\xd7\xa2\x59\x64\x51\x65\x91\x80\ +\xe8\x1a\xac\xff\x00\xa9\x49\xa6\xe2\x73\xe8\x7c\x73\x7d\xbc\xa4\ +\x52\x8e\x0f\x1c\xce\x41\x85\xef\xcc\x9a\xd1\x92\x57\x6f\x29\x76\ +\x6f\x73\xb5\x43\x3d\x97\x56\x36\x14\x7e\x67\xf4\xea\xb4\x78\x27\ +\x45\x47\x9d\xd0\x04\x24\x35\xbc\xc7\x29\xdf\x6d\xaa\xd6\x21\x46\ +\x7f\x2e\xd6\xf2\xf7\x1c\xa9\x62\x51\x7d\x14\x91\xb1\xa8\x88\xe4\ +\x2f\x16\x62\x46\x50\xe9\x7e\x5d\x45\x33\x27\x81\x39\x0d\xaf\x7b\ +\x1a\x94\x52\x0d\xc9\xbd\x0e\x6a\x82\xd7\x39\x41\xf7\xa9\x19\x7a\ +\xeb\xd2\x55\x9b\x35\x81\xd0\x75\xa3\x2c\xdf\x87\xe9\x56\xac\x1d\ +\xec\x6f\xf5\xae\xbf\x2a\x58\x25\xb4\x0b\xda\x89\x4a\x33\x65\x59\ +\x55\x98\x7c\x20\xeb\x56\xa1\x23\xdc\x5e\xf4\x79\xcd\x27\x55\x3b\ +\x7b\x8a\x95\x6b\x8a\x75\x1a\x1a\xc6\xe3\x43\x49\xc5\x61\xd2\x62\ +\x5d\x3c\xaf\xd3\x91\xa2\x26\xc2\xf5\x19\x88\x3b\x1a\x92\x83\x02\ +\xad\x94\x82\x08\xe4\x6b\x81\xf3\x5c\x68\x6a\xf4\xea\xb3\x80\x18\ +\x59\x86\xcd\x54\xa5\x56\x8e\x42\xae\xba\x8e\x87\x7a\xc5\x8d\x2e\ +\xe0\xb1\x6c\x06\x49\x2e\xc3\x61\xd4\x55\xdc\x19\x5f\xb1\x21\x4c\ +\xac\xba\x86\xd3\x9f\x7a\xc5\x8c\xd9\x89\xd7\x5a\xb9\x86\x9d\xe3\ +\x7c\xc8\xd6\x63\xa1\xbe\xa1\xbb\x1f\xe6\x99\xc8\x58\xb9\x2e\x16\ +\x27\x6c\xc8\xde\x19\x3c\xad\x71\x52\x15\xf0\x6a\x64\x57\x12\x27\ +\xc4\xb6\xb5\x0f\xdb\x20\x24\x28\x56\x59\x0f\xfc\xb6\x3f\xa1\xe7\ +\x51\x36\x22\x16\x56\x5b\x3d\xd9\x6d\x62\x2b\x5d\x33\xda\xe4\x6c\ +\xae\xe0\xc7\x72\xac\x34\xa7\xa5\xf9\x8d\x6a\xa6\x15\x55\xb0\x28\ +\x14\x58\xe5\x20\x1e\x60\xd3\xb8\x79\x90\xc0\xa5\xe5\x62\x0e\xc0\ +\x80\x6b\x70\x2c\x2d\x10\x17\xa8\x19\xbf\x1c\x7f\xf6\x1f\xe6\x8c\ +\x1b\x0f\x30\x00\x7e\x25\x3a\x7c\xfa\x56\x83\x80\xa9\x2b\x70\x45\ +\x15\xba\xd4\xd8\xf4\xad\x05\x59\x62\x65\xfb\xc3\x72\xa0\x59\xc0\ +\xdc\x8e\xbf\x2b\xd7\x10\xac\xb7\x52\x19\x7a\x8a\xb5\x1f\xac\x03\ +\xb5\xf5\xaa\x78\x38\xb2\x89\x7f\xd6\x40\x17\xe5\x7a\xcd\x87\x5c\ +\x14\x0d\x86\xf4\xa6\x2a\xd8\xd0\x83\xfe\x52\x93\xf3\xab\x25\x7b\ +\x81\xef\xa5\x56\x96\x48\x53\x1b\xe2\x86\x04\x37\x95\xc8\x1a\x5c\ +\xf3\xa2\x94\x30\xa0\x2b\x4d\x0f\x13\x1b\x2b\x8b\xf4\x3a\x57\x3a\ +\xdb\x71\x59\xc4\x41\x45\x1b\x28\xa0\x74\x0c\x2d\x76\xfd\x69\xe4\ +\x50\xb2\xd0\x88\xc8\x14\x69\x70\x6a\x08\xf3\x5c\x9b\xd3\x1a\x81\ +\xad\x7a\x8c\x09\x1a\x5a\x82\x67\xf0\x30\xed\x27\xc4\x7c\xab\x4d\ +\x51\x73\x6f\xf6\x2a\x87\x11\x97\xc5\x94\x85\xf4\x26\x8b\x47\x2b\ +\x90\xab\x7b\xd0\x91\xda\x8a\xa2\xb9\x34\x1b\x0a\xe4\xcc\xac\x18\ +\x1b\x11\xb1\xa2\xa9\xb5\x3a\x9c\x6c\x05\xe8\xe3\xb3\x0f\x28\x27\ +\xf2\xa2\xcb\xe5\x3a\x5f\x4d\xa9\x9c\x3a\x13\x23\x14\xb5\x94\x6a\ +\x5b\xa5\x32\x22\x63\xc2\xcf\x34\xb9\x51\x33\x13\xae\x9c\xaa\xf4\ +\x3c\x3f\x28\x02\x59\x46\x9b\xe5\xd6\xaf\x22\x24\x71\x84\x41\x61\ +\x6d\x7a\x9a\x12\x40\xd8\x5e\xb7\x38\xc6\x6f\x25\x77\xc0\x46\xc2\ +\xf1\xcc\xca\xc3\xf1\x0d\xea\xab\xc0\xd0\x93\x1b\xea\x6f\xca\xb5\ +\x14\xad\xaf\x7b\x54\xcb\x08\x9e\x1c\xbf\x16\xe8\x6d\xf9\x55\xf9\ +\x83\x59\x16\xed\x5d\x96\xfc\xa9\xe5\x2c\x6c\x46\xb5\x19\x68\xc6\ +\xb4\x7c\x2d\x7f\xe2\x4e\x9f\x01\xab\x65\x6d\xca\xf5\x5f\x87\x69\ +\x8a\x02\xde\xa0\x54\x55\xb3\xbd\x33\xc6\x69\x2c\x2b\x81\xeb\x4d\ +\x65\xa5\x95\xa4\x3a\xc2\xc4\xda\xf9\x45\xec\x39\xd5\x27\xc6\x81\ +\x70\x60\x1f\xf7\x1a\xba\x2e\x0d\xc6\xf5\x9d\xc5\x54\x2e\x36\x50\ +\x05\x80\x34\x72\xdc\x6a\x1b\x0b\xb6\x21\x84\xec\x02\xa4\x67\xc8\ +\xa3\x99\xa9\x3b\xd4\xe1\xd1\x93\x09\x1a\xb0\x00\xea\x48\xf7\xa1\ +\x7c\xdc\x80\xab\xe2\x76\xde\xd5\x07\xf2\xa1\x0c\xe4\x1b\x28\xa0\ +\x05\x96\xf9\x86\x9d\xb9\x50\x70\xc9\x1e\x28\x80\x32\xbe\x5b\xec\ +\x00\xb9\x35\x1e\x2c\x44\x5f\x39\x5e\xee\x84\x0a\x5c\xca\xb3\x2a\ +\x82\xc1\x59\x4d\xd5\x88\xa9\x94\xcf\x24\x45\x24\x68\x54\x11\xa9\ +\x04\xb7\xe5\x46\xa3\x58\xd8\x03\x7b\x83\xb1\x1b\x1a\x8b\xd2\x60\ +\x41\x0a\x14\x59\x1d\xef\xca\xd6\x14\x46\xe0\xea\x08\xab\x56\x25\ +\x9b\x29\xb8\x3b\xef\x52\x1e\xe3\x51\x4a\x66\xf3\x0b\xf2\xa6\x01\ +\xa6\x62\x42\x8e\xa4\xd8\x55\xa9\x0c\xf4\xac\x54\xe6\x17\x8d\x86\ +\xae\x01\x05\x4e\xd9\x7b\xd1\xea\x5f\x42\x51\x7f\x15\xac\xcd\xed\ +\xd0\x54\xfd\xd2\x5e\xd1\xae\xbb\xe6\xd4\x9a\x12\x19\xae\x15\x97\ +\x40\xe2\xe0\x57\x2f\x99\xb5\xa8\x6d\x40\xb0\xb2\x8d\x00\x14\x4a\ +\x54\x0d\xef\x51\x12\xd9\x5b\x53\xbd\x49\x7f\xc3\xad\x05\xb3\x0b\ +\x93\xf2\xa8\xd5\x45\xd7\x7e\x94\x83\x12\xeb\x20\x20\xea\x75\xa0\ +\x91\x62\x86\xee\xca\x0c\x4e\x75\x36\xb9\x53\x5c\xa4\xde\xe7\x7f\ +\xd2\x88\xe5\x74\x68\xdf\xd2\xfb\xf6\xa9\x07\x0d\x3f\x8d\x19\xd4\ +\xe7\x8c\x6a\x4f\xc4\x3a\xd1\x0b\xdf\xcb\x54\x07\x8b\x83\xc4\x66\ +\x2b\xdb\x5d\x88\xa6\xcf\x8d\x56\x8b\x2c\x28\xca\xcd\x6b\x92\x76\ +\xf6\xac\xfe\xbf\xa9\x6a\xe6\xfa\xd1\x66\x14\xac\x3c\xab\x88\x4e\ +\x62\x45\x1e\x60\x79\xf7\xa2\xb9\xad\x6a\x15\xea\x64\x55\x95\x32\ +\x3f\xc8\xf4\xa0\xa9\x53\x6a\xb5\x62\xa4\x8a\xd1\x49\x95\xfe\x47\ +\xad\x10\x6b\x55\xa9\x51\x66\x4c\x87\xd4\x3d\x26\xa8\x6a\xa4\x83\ +\xc8\xd8\xd1\x61\x58\xba\xc9\x1e\x47\x06\xdc\x88\xdc\x51\x0f\x17\ +\x25\x83\x24\xd6\xda\xfa\x30\xaa\xea\xda\xd3\x15\xaa\xd4\xb1\x0f\ +\x15\x38\x7b\xc6\x20\x36\x3b\x86\x3b\x1a\xd2\xe1\xb8\xc8\x64\xc1\ +\xc6\x58\x14\xb1\x23\xa8\x15\x98\x72\x3d\xbc\x6f\x0c\xdc\x69\x9b\ +\x7f\x95\x16\x09\x44\x73\x4d\x02\x9b\xa6\x50\xc0\x74\x35\xa9\x6e\ +\xb3\x63\xd0\xae\xa9\x98\x10\xc0\xf3\x14\x71\x9a\xc7\xc2\xce\xf0\ +\xb5\xc3\x58\x74\x3b\x1a\xd3\xc2\xcc\x93\x26\x75\x20\x11\xea\x17\ +\xda\xba\xca\xcd\x8b\x08\x0a\xd8\x25\xad\xf8\x4f\x2f\x63\xca\x8d\ +\x5d\x49\xb1\xf2\xb0\xf8\x5b\x4a\x5a\x3a\xdf\x9f\xbd\x14\xae\xa6\ +\xca\x40\x61\xdf\x5a\xdb\x26\x01\x67\x06\xd6\xd6\x90\xb1\xa1\x8d\ +\x6c\x0e\xbd\x34\xbe\xb4\xc3\x1a\x15\x39\x4b\x2d\xc7\x23\xa7\xd2\ +\x82\x72\x21\xc3\x31\x5d\x32\x2d\x85\x49\x9d\x8e\x25\xa5\x31\x86\ +\xba\x2f\xe6\x6a\x9e\xd2\x18\xed\xe5\x7f\x2d\xaa\xc3\x1b\x9d\x69\ +\x2f\xa1\xcd\xcc\x57\x1a\xdc\x00\x6c\xf1\xab\x5f\x5b\x59\xbd\xc6\ +\x94\xc8\x71\x0f\x19\xb1\xf3\x2f\x43\x4b\x72\xa1\x09\x1b\x2b\xb5\ +\xfe\x7a\x8f\xd6\x95\x09\x25\x0d\xce\xc6\x8d\x2d\x28\xa4\x49\x41\ +\xc8\x6c\x7f\x09\xa2\x61\xae\xa2\xb3\x01\x21\xb4\x36\xa7\x47\x8a\ +\x99\x16\xd7\x0c\x3f\xa8\x5e\x9d\x18\xb0\xe3\x5a\x0c\xa5\x8e\x9f\ +\xf8\xa5\x49\x8e\xd3\xfc\x95\xbf\xb9\xaa\xd3\xe2\x65\x94\x59\x98\ +\x01\xd1\x45\x85\x1b\x14\x94\xcc\x74\xea\x23\xf0\xa2\x37\x27\xd4\ +\xc3\xf4\xaa\x4f\xb5\x1d\xa8\x5c\x69\x58\xb7\x5b\x2a\xa6\x8b\x2d\ +\x48\x5a\xce\x20\x5b\x5a\x9a\x92\x2a\x42\xd3\x89\x66\x38\xc9\x60\ +\x06\xf5\xaa\xb0\xac\x71\x08\x80\xbd\xbd\x47\xa9\xa4\xf0\xa8\xaf\ +\x39\x73\xff\x00\x2c\x5e\xae\x85\xae\xdc\x63\x16\x91\x94\x07\x00\ +\xb5\xc5\xa9\x80\x0e\xab\xf5\x14\x52\x45\x98\xdc\x1b\x1a\x01\x11\ +\xce\x14\xd3\x80\x56\x1b\x58\x37\x60\x2a\x51\x32\xa8\x1f\xbd\x31\ +\x50\x01\x60\x2a\x72\xd3\x89\x47\x89\xc3\xaf\x8e\xa3\xd5\xea\xec\ +\x6a\x99\x15\xb5\x94\x10\x55\x85\xd5\x85\x8d\x66\xe2\xe1\x68\x64\ +\xca\x57\x36\x6f\x4d\xb9\x8a\x2c\x31\x5d\x09\x57\x0c\xa7\x50\x6e\ +\x2b\x47\x47\x41\x22\xec\xc2\xfe\xd5\x9e\x79\xf9\x0e\x9f\x95\x5a\ +\xe1\xf2\x00\x3c\x26\x3e\x56\xd5\x49\x3b\x1a\x22\xa6\x91\x6a\x12\ +\x2f\x4e\x28\x79\xd0\x32\xda\xac\x05\x65\x25\xac\x06\xa6\xab\x49\ +\x0f\x8b\x8b\x92\x72\x2f\x18\x6b\x8b\xfc\x56\xab\x8c\x0e\x5d\x3d\ +\x4f\x75\x5d\x3e\xa7\xe5\x42\xea\x2d\x94\x68\xa0\x58\x0e\xd4\x58\ +\x62\xbc\x9a\xb1\x26\x94\xe2\xd4\xf9\x01\x51\xa8\xbd\xb9\x8e\x74\ +\xa3\xe6\xd2\xd6\xa8\x93\x6d\x49\xa1\x61\x4d\x22\xd4\x2c\x2b\x28\ +\x86\x16\x3d\x8d\x0d\xc5\xed\x4e\x65\x14\x21\x2d\xb5\x18\x74\x9c\ +\x54\xb2\x46\xd1\xaa\x3f\x86\x8e\x35\x7b\x52\xb1\x38\x86\x81\xc0\ +\x8f\x11\xe3\xa1\x1a\x83\xad\x5a\x9a\x21\x2c\x26\x36\x6c\xba\xdc\ +\x35\xb6\xa4\xe0\xe0\xf0\x26\x3e\x2d\xb3\x7c\x04\xec\x68\xba\x81\ +\x0c\x92\xcd\xac\x78\x5b\x13\xbb\x35\xec\x29\xc4\xfd\xe7\xa8\xb1\ +\x03\x56\xfe\x3a\x53\x24\x67\x6d\x19\x8f\xb7\x2a\x5a\x7a\x6d\x51\ +\x71\x37\x37\x22\xf5\xc2\xd6\xb5\x87\xd2\xa6\xd5\xd5\x27\x0e\xd4\ +\x5a\xda\x86\xe0\x1d\x6a\x0b\x12\x6c\x34\xa9\x08\xd4\x57\x1a\xea\ +\x93\xaa\x49\xbd\x09\x35\x17\xbd\x48\x77\x05\x72\xba\x86\x5e\x86\ +\x96\x23\x8e\x07\xfb\x44\x6a\x4a\x8f\x52\x9d\x6c\x3a\x8a\x20\x6a\ +\x64\x91\x61\x81\xa4\x61\x7c\xc3\x28\x5e\xb5\x22\x31\xb3\xc4\x65\ +\x8a\x48\xdb\x33\x29\xf3\x10\x2d\xa5\x5a\x70\x58\xe7\x40\x4a\xb6\ +\xa0\x8a\xcf\xc1\xe1\x9e\x6f\x31\x39\x50\x6e\xc6\x9f\x8a\x85\x70\ +\xf0\xe7\x8e\x69\x03\x5f\x40\x4d\xaf\x44\xb7\xd4\xb1\x66\x02\xe5\ +\x48\x1d\x6d\x51\x71\x55\x70\x12\x62\x1f\x14\xa3\x3b\x30\x3e\xab\ +\x9b\x8b\x55\xa2\x2e\xf6\x51\x7d\x74\xa6\x76\x84\xa7\xa1\xaa\xdc\ +\x4b\x49\xd5\xbf\x12\xeb\x56\x42\x30\x17\x20\x7d\x6a\xb7\x12\x20\ +\xca\x88\x06\xa8\xba\x9a\xaf\x80\x9a\x34\x3a\x50\x81\x73\x47\x10\ +\xf3\x00\x39\x6a\x68\x22\x96\x3f\x16\x48\x16\xf6\x24\x35\x58\xc0\ +\x42\x60\x8d\xf3\x90\x5d\x8d\xbe\x54\x97\x76\x8e\x48\x1d\x23\x2e\ +\xc0\x36\x80\x55\x9c\x39\x12\x47\x9d\x41\x52\x0d\x99\x4e\xe2\x99\ +\xe8\xa6\xaf\xad\x47\x7a\xbb\xc3\x74\xc5\xa8\x03\x46\xd0\xd5\x35\ +\xbe\x60\x40\x27\xda\xb4\xb8\x7c\x3e\x18\xf1\x18\xf9\x88\xb2\x8e\ +\x95\xd7\x8f\xac\xd5\xc8\xb6\xa3\x74\x04\x5c\x0d\x4d\x25\xa4\xf0\ +\xec\xc7\x61\xbd\x14\x18\x98\xa4\x75\x4d\x54\x93\xa5\xf9\xd7\x4d\ +\x9e\x32\x72\x5c\x79\x4f\x2a\xaf\xc5\x0d\xa1\x09\xf8\x8d\xea\xd1\ +\x03\x37\x7a\xa3\xc5\x9b\xef\x55\x7a\x2d\x5c\xba\x8a\x28\xb5\x2d\ +\xbb\xd1\xb9\x16\xde\x96\xfb\x57\x26\xa1\x13\xa3\x11\x9e\x3d\x5c\ +\x0d\x54\xec\xc2\xa3\x0f\x66\x80\xb0\x04\x10\xd6\x65\xe8\x68\xce\ +\xfa\x53\x06\x1a\x56\x1f\x68\x44\xd6\xde\x60\x74\x12\x0f\xe6\x8c\ +\x24\xf3\xa8\x6a\xb0\x70\x93\x11\x99\x56\xe0\xea\x35\xd6\x97\x26\ +\x1e\x70\x0f\xdd\x9d\x2a\xca\x95\x9c\xd0\xd3\x1a\x19\x83\x10\x62\ +\x6d\x3b\x50\x15\x60\x2e\x54\x81\xd4\x8a\xc3\x48\xae\x22\xbb\xf2\ +\xfd\x68\x80\xf7\xff\x00\xb8\xd4\x83\x96\xb8\x8a\x62\x8f\xea\x3f\ +\x3d\x6b\xb2\x83\xb9\x3f\x2d\x29\xc1\xa5\x65\xa9\x00\x02\x37\xb9\ +\xda\x9b\x91\x4f\x23\xef\x7a\xe8\xe3\xc8\x73\x6e\x3f\x4a\xb1\x6b\ +\x63\x86\xa6\x5c\x1e\x6b\x83\x98\xe8\x47\x41\x56\x00\xa4\x70\xf5\ +\xb6\x15\x5a\x32\x10\x96\x3e\x5f\x84\xf6\x23\xf7\xa7\x86\x05\x73\ +\x00\x45\x8d\x88\x3b\xa9\xe8\x6b\xb4\xf1\x87\x5a\xba\x50\x91\x47\ +\xe2\xc8\xe1\x00\xd0\x5f\xe2\xed\x51\x34\xb1\xe1\xe2\xf1\x24\xd4\ +\x9f\x4a\xf5\xac\xdc\x64\xef\x89\x6c\xd2\x01\x61\xb2\xf2\x15\x5b\ +\x89\x6e\x4e\x25\x1a\xbd\xa2\x83\x30\x1c\xdc\xd0\x2f\x13\x7c\xb6\ +\x78\x51\xbb\x8d\x3f\x4a\xa4\xaa\xc4\x90\x01\x6b\x7d\x68\x95\x24\ +\xbf\xf9\x6f\x6e\xb9\x4d\xab\x3f\xaa\x72\x34\x62\xc6\xe1\xa4\xd1\ +\xb3\x44\x7b\xea\x28\xe4\x48\xf1\x29\x95\x24\x46\xc9\xb1\x53\xad\ +\xfa\x56\x77\x81\x27\xfe\xd3\xff\x00\xda\x68\x4c\x52\x03\x70\x8e\ +\x08\xe6\x06\xd4\xea\xc3\x9a\x09\x6e\x54\xc6\xe6\xda\x6d\x40\x90\ +\xc8\xad\x90\x8c\xa4\x6d\x98\x81\x7f\xad\x54\xc6\x89\xe4\x52\x22\ +\x95\xc4\x8a\x2f\xe5\x3e\xa1\xfc\xd6\x6e\x20\x4a\x04\x71\xbb\x33\ +\x3c\xc6\xc0\x9b\x9b\x0b\xf2\xae\x77\x96\x7c\x32\x3d\x5c\x0e\x1d\ +\x0f\x88\xea\x19\x46\xa7\x91\xae\x70\x48\x3e\x12\x67\x3b\x66\x3a\ +\x28\xaf\x3d\x04\x86\x2c\x6c\x62\x2b\x00\xac\x00\x36\xf5\x0b\xd7\ +\xa2\xf1\xd6\x59\x99\x0e\x8e\x09\x00\x72\x35\xd3\x8f\x2d\x16\x61\ +\x79\x4a\x82\x5d\x83\x3b\x68\x48\xd8\x0e\x82\x81\x85\x39\xc6\x96\ +\xa4\xc8\x72\xa7\x7d\x85\x54\x16\xe5\x7a\x8a\x43\xaa\xf8\x83\x21\ +\xf7\xa7\x20\x19\x4d\xc8\xd7\xf2\xa1\xb0\x58\xaf\xd7\x7a\xc9\x85\ +\x3a\xeb\x4b\x6b\x03\x6e\x74\xf6\x04\x8e\x42\x96\xc8\x09\xd6\xf7\ +\xeb\x51\x28\x8a\x82\xb4\xc6\xd3\x7f\xad\x0d\x18\x80\x45\x04\xca\ +\x0e\x16\x55\x22\xf6\x52\x47\xbd\x3a\xb9\x00\x2c\x57\xf1\x02\x28\ +\xc4\x54\xc3\xcc\x17\x9d\x85\xf5\xed\x50\x16\x89\x98\x30\x43\x6b\ +\x12\xa2\xff\x00\x4a\x86\x20\x0b\x93\x41\x09\x1a\xd0\x9b\x57\x3c\ +\x82\xfb\x50\x9b\x9d\x49\xb7\x61\x41\x71\x55\xbd\xcd\x4a\x82\x4d\ +\x95\x6f\xec\x2a\x15\x03\x30\x5e\xa6\xab\x4f\x88\x91\xa4\xf0\x60\ +\x2c\x17\x6d\x0e\xad\x45\xb8\x96\xe4\xc9\x18\xbc\xb2\x2a\x76\xbd\ +\xcf\xd2\x85\xed\x94\x32\xe6\x21\x86\x84\xad\xa8\x70\xf0\x24\x3e\ +\x67\x01\xe5\x3b\xdf\x50\xb4\x6e\x4b\x35\xc9\xb9\xa5\x16\x73\x54\ +\x44\x18\x9b\x93\xa5\x18\x17\xf6\xfd\x68\xd5\x49\x36\x03\xd8\x54\ +\x83\x6a\xaf\xc5\x3f\xcd\x45\xbe\xcb\xb7\x4a\xba\x88\xc4\x7d\xd2\ +\xab\x9e\x6c\x7d\x2b\xfc\xd4\xa4\x10\xc6\xe5\xdb\xef\x64\x3b\xb3\ +\x6d\xf2\x15\x66\x8d\x66\xc3\x2e\x22\x24\xb4\x6c\xca\xb4\xdc\x3e\ +\x1e\x4c\x43\x78\xb3\x31\xc9\xd4\x9d\x4f\xb5\x68\x34\x84\xef\x6f\ +\x6b\x50\xc8\xdb\x17\xb9\xcd\xa2\xa8\xe7\xfc\x55\xf9\x5a\x04\x50\ +\x13\x24\x4a\x11\x79\xff\x00\x73\x48\x9a\x62\x5b\xc1\xc3\x0b\xb1\ +\xd0\xb7\xf1\x56\x99\x54\xaf\xde\x6a\xa3\x52\xa3\x44\x1e\xfd\x69\ +\x18\x63\x0c\x0c\xee\x54\xdd\xbd\x23\x98\x14\xd4\xe8\x50\x61\x22\ +\x2e\xde\x67\x6f\xd7\xa5\x55\xb3\xbc\x85\xc9\xb9\x63\x73\x7a\x6c\ +\xce\xf3\x49\x99\xb4\x1c\x80\xe5\x5c\xab\x61\xa5\x66\x90\xaa\x91\ +\xfd\xaa\xce\x0f\x0c\xd2\xb5\x94\x58\x0d\xcf\x21\x4c\xc1\x60\xda\ +\x4f\x3c\x9e\x54\xeb\xd6\xb4\x11\x00\x50\xaa\x2c\xa3\xf3\xad\x4e\ +\x3f\x68\xb5\x38\x60\x21\x5c\xb1\x0b\x77\xb6\xa6\x8c\x24\x47\x16\ +\x19\xa3\x5c\xd2\x21\xbf\x42\x46\xd5\x2a\xb6\xda\x83\x17\x13\xb2\ +\x2c\x88\x7d\x1c\xbf\x7a\xe8\xc1\xe9\x1a\x81\x65\x40\xbe\xc2\x99\ +\x15\x93\x36\x76\xb0\x1a\xde\x86\x09\x63\x68\x95\xd9\xc6\x6b\x6a\ +\xa3\x7b\xfb\x54\x82\x64\x90\x31\x1a\x8f\x48\xe4\xbf\xde\xb4\x83\ +\x8b\x49\x5c\x09\x32\xd9\x57\x40\xbc\xc7\xbd\x06\x10\x67\xc4\x22\ +\xf5\x61\x57\xa3\xf2\x8b\x6f\x4b\x8a\x20\x98\xd2\xc0\x79\x42\xe6\ +\x1d\xb9\x55\x78\xf6\x34\xf6\xca\x75\xb7\x3a\xa1\xc5\x54\x78\xe0\ +\xda\xfe\x51\xbe\xb5\x74\x1a\xa5\xc5\x35\xc4\xfb\x28\xa7\x97\x8a\ +\x2a\xb1\xd2\x90\x49\x00\x8e\x86\xd4\xd9\x0d\x28\x9b\xfc\xcd\xeb\ +\x9b\x50\xec\x04\x41\x98\xc8\xc2\xea\xbb\x0e\xa6\x9f\x8a\x62\x30\ +\xce\xc4\xea\xde\x51\x53\x87\x19\x30\x88\x3a\xdd\xab\xa4\xb1\x78\ +\x94\x81\x60\x0b\xeb\xcc\xed\x5a\xf8\x91\x7c\xa0\x06\x16\xd0\x7e\ +\x94\x12\x1e\x94\x52\x90\xd7\xcc\x6f\x7a\x51\x1d\xcd\x14\x27\x33\ +\x6c\x09\xd3\xbd\x48\x91\x8e\xfb\x0e\x47\x5a\x0b\x80\x2c\x2b\x94\ +\x92\x6c\x01\x26\x84\xe9\x62\x86\x4f\x52\x05\x27\xe2\x5a\xa7\x3c\ +\x4d\x0b\xe5\x61\x70\x76\x23\x63\x57\xb4\x0c\x14\xba\x06\x3b\x02\ +\xd4\x18\xb0\x87\x0c\x44\x92\x22\x95\xd5\x75\xbf\xe9\x45\x86\x29\ +\x0b\x72\xa2\x50\x49\xb0\xd4\xd0\x23\xc1\xcf\x13\x17\xd4\xd0\x89\ +\x96\x69\xd3\x0f\x09\x21\x5c\xf9\xda\xda\x9f\xed\x46\x93\x90\xa6\ +\x6c\xab\x9a\x46\x1f\x0a\x0b\xfe\x74\xc1\x95\x45\xe4\x8a\x48\x87\ +\xe2\x6b\x11\xf9\x54\x02\x02\xe5\x40\x15\x7a\x0a\x34\x62\xbb\x73\ +\xe5\x4c\x4b\xdc\x39\xc3\x61\x32\xf3\x46\xbe\xfb\xde\x8f\x15\x30\ +\x86\x45\x7b\x5c\xb2\x80\x41\x36\x04\xea\x45\xfe\x42\xa8\x60\x24\ +\x11\x62\xb3\x92\x6c\xe3\x2b\x0e\xd4\x7f\xe2\x58\x25\x93\x04\x92\ +\x46\x0b\x04\x7f\x35\xba\x01\x5a\xdf\xf1\x1f\x49\x96\x79\xb1\x38\ +\x96\x58\xbc\xf2\xf3\x6b\xf9\x53\xda\xb4\x21\xc1\xb4\x08\x1b\x13\ +\x31\x9d\x86\xad\x1d\xb6\xf9\xd5\x5f\xf0\x8a\x34\x65\xf3\xad\x89\ +\xbb\x2d\xc6\xfa\x6f\x5a\xc4\x02\xc1\xb9\x8e\x74\xf1\x9b\x35\x5b\ +\xf0\x11\x95\xb2\xac\x2a\xa8\x1b\x50\x40\xb1\xa6\x80\xe1\x6e\x25\ +\x72\x07\x22\x69\x2a\x8f\x1b\x05\x6d\x81\x25\x1f\x71\x6e\x86\x9d\ +\x1b\x07\x25\x43\xad\xf9\x81\xbd\x6e\x32\x3f\x12\x66\x5f\x29\x20\ +\x1e\xad\x43\x92\x5b\x1b\xc8\x75\xdc\x5e\xf7\xa6\x0a\x25\x50\x6b\ +\x58\x08\x58\x54\x91\xe2\x47\x1b\x01\xa8\xf2\xdb\xf4\xac\x2f\xf1\ +\x06\x0d\x61\xe2\x8f\x2c\x60\xe5\xf0\x96\xc3\x90\x26\xbd\x13\x34\ +\x48\x49\x79\x05\x97\x53\x6d\x4d\xab\x23\x12\xed\x89\x9d\x8b\xaf\ +\xf9\xc7\xd3\xd0\x72\x15\xcf\x9c\x99\x8d\x4b\xdb\x1f\x83\x61\xdc\ +\xce\x64\x91\x09\x8e\x3d\x4d\xfa\xf2\x15\xa4\xcd\x9c\x97\xd8\xdf\ +\x5a\xb4\xf8\x6f\xb1\xc6\xb0\x0b\xdb\x72\x7a\x9a\x44\x82\xcf\xee\ +\x2b\x19\x9d\x1d\xd1\xc1\x8a\x01\x42\x4d\xa8\x1b\x30\xde\x9a\xea\ +\x08\xb8\xb3\x29\xd8\xf2\xaa\x4e\x35\xae\x8e\x57\x88\xdd\x0f\xb8\ +\x3b\x1a\x75\x62\xd3\x28\xbd\xec\x3e\x94\x0f\x72\xc0\x5b\x63\x72\ +\x68\xe3\x92\x39\x63\x2c\xba\x11\xea\x1d\x2a\x06\xe4\xf5\xab\x01\ +\x4c\x2c\x68\x1c\x53\xa4\xda\x96\xda\x8a\x11\x46\x94\xc2\xcc\x7a\ +\x1a\x75\x2e\x41\x53\x41\xa8\xcd\x91\x1d\xf9\xaa\x93\x5d\x6e\xe6\ +\xa0\xd8\x5c\x1d\x98\x10\x6b\x28\xb4\x92\x03\x02\x31\x99\x14\x05\ +\x02\xd7\xd4\x50\xab\xc3\x2d\xc4\x66\x59\x0f\x50\x9a\x55\x7f\xb1\ +\x44\x8f\x98\xb9\x71\xf8\x6d\x6a\x79\x26\xc0\x1d\x00\xd9\x46\xc2\ +\xb3\xb7\xe9\x10\x8a\xdf\x04\x97\xf6\x5f\xe6\xa3\x28\xd6\xe0\xff\ +\x00\xd4\xc0\x7e\x97\xa1\x35\x16\xbd\x25\x33\x06\x28\x56\x29\x23\ +\x42\x45\x8d\x81\xfd\x6a\xae\x12\x29\x60\xc7\x20\x65\x07\x36\xc4\ +\x1d\x3d\xea\xd2\xad\xcd\x80\xd4\xd1\xaf\x99\x83\x28\xb8\x00\xaa\ +\x77\xea\x68\xcd\xed\x00\xee\x40\xae\xb6\x94\x41\x2c\x2e\xcc\xa0\ +\x75\x2c\x29\x89\x16\x72\x08\x05\x97\xae\x81\x4f\xcc\xef\x56\x22\ +\xe3\x17\x51\xa5\x31\x14\x0d\x6c\x3e\x62\xa3\x10\x71\x10\xa0\x65\ +\x48\x72\xed\xa1\xcd\x4c\xb1\x08\xb9\xc8\x2f\x6f\x35\x86\xd5\xa0\ +\xe6\x62\xdb\x9d\xb6\xed\x42\x75\xa2\xae\xb7\x5d\x6a\x01\x02\xf4\ +\x6b\x14\x9f\x6b\xf1\x33\x47\x95\x54\xaa\x0d\xcd\xbe\x55\x20\x00\ +\xa5\x98\x85\x51\xb9\x35\x5f\x11\x89\xcd\x74\x8b\xca\x9c\xcf\x33\ +\x55\xc8\x85\x8a\x91\x41\xca\xa7\x3b\x0e\xde\x51\xfe\xfe\x7e\xf5\ +\x57\x29\x26\xe7\x73\x46\x05\xa9\x98\x78\x9e\x56\xb2\x0d\x39\x9e\ +\x95\x9f\x5a\xf0\xb4\x42\x4e\x55\x04\x93\x57\xf0\xb8\x05\x5b\x34\ +\xda\xb7\xe0\x1f\xbd\x3b\x0f\x1c\x70\x0b\x26\xad\xcd\xbf\x8a\x66\ +\x6a\xdc\x98\xcd\xa9\xb5\xed\xca\xdc\x85\x12\x8a\x1b\x82\x2c\x6a\ +\x56\xca\xb6\x17\xa5\x91\x8b\x5e\xd7\xa6\xa1\x51\xcc\x77\xaa\xac\ +\x75\x00\x6e\x68\xe3\x00\x6e\x6f\x5a\x95\x1b\x68\xd4\xe5\x8d\x40\ +\xbe\xe7\xad\x14\x5e\x49\x6d\x7b\xe9\x42\xac\x2d\x63\x4c\x52\x00\ +\xd3\x4a\x50\xc3\x50\xcb\x23\x27\xde\x04\xcc\xa1\x6c\xc0\x1d\x46\ +\xb5\x05\xa8\x59\xc8\x46\x23\x73\xe5\x1e\xe7\x4a\x75\x1d\x04\xa9\ +\x2a\x07\x50\x40\x26\xda\xd6\x7e\x2e\x5f\x12\x77\x6e\xa6\xac\x4a\ +\xe2\x0c\x29\x50\x76\x19\x57\xbf\x7a\xce\x26\xe3\x53\xf2\xac\xf2\ +\xaa\x44\x3b\x5f\x40\x68\x4b\x54\x33\x5a\x82\x23\x9e\x74\x51\xcd\ +\x85\x63\x5a\x6a\x31\xb2\xaa\xdf\x40\xa0\x7e\x54\x8c\x63\x95\x30\ +\xba\x9d\x43\xe5\xa2\x99\xc6\x63\x6d\xaf\x49\x91\x81\x40\xcc\x2e\ +\x23\x70\xde\xc3\x9d\x36\x88\x37\x6f\x39\xe9\x7a\x16\x7a\x17\xbe\ +\x72\x07\xd6\x96\x59\x7f\x18\x62\x3e\x14\x37\x35\x23\x01\x19\x4b\ +\x31\xca\xa3\x73\x55\x71\x18\xdb\xdd\x61\x05\x57\xaf\x33\x4d\x6f\ +\x31\x0d\x20\x04\x8d\x97\x92\xff\x00\x26\x97\x26\x1e\x29\x1f\x35\ +\xca\x75\x00\x69\x59\xbb\xf0\xac\x41\x1c\x22\x04\x26\x35\x72\xeb\ +\x98\x96\xde\x8e\x3c\x3e\x1a\xe7\xc8\xc2\xea\x6f\xe6\xed\x42\x18\ +\x58\x28\x16\x0a\x2c\x28\xe2\xdc\xff\x00\xa4\xfe\x95\xa4\xcc\x8b\ +\x0f\x85\x51\xe8\x67\xff\x00\x51\xb5\xa9\xb0\xc5\x04\x73\x2c\xb1\ +\x87\x05\x76\x17\xb8\xa0\x5a\x25\x22\xf5\x89\x84\xe5\x34\x57\xa5\ +\xa9\xa2\x06\xb5\x00\x85\x68\x60\x1d\x71\x18\x76\xc3\x48\x75\xb7\ +\x94\xed\x59\xe0\x12\x36\x34\x50\xb3\x23\x86\x06\xc4\x1a\xd4\xaa\ +\x8e\x09\x64\xc3\x63\x41\x63\x66\x43\x95\x81\x35\xab\x81\x99\xb1\ +\x31\x34\x99\x57\x2d\x81\x16\xf8\x4f\x30\x7d\xa9\x18\xec\x32\x63\ +\xb0\xeb\x22\x0b\x4b\x6b\x82\x39\xf5\x15\x9d\x85\x69\x30\xf2\x96\ +\x89\xca\xb6\xc7\xca\x35\xf7\xeb\x4e\xde\x35\x9f\x5b\xea\x48\xd8\ +\x91\xed\x51\x1a\x83\x8b\x92\x4f\xc2\x32\xfb\x9b\x6a\x6a\x84\x3c\ +\x4e\x41\x61\x2a\x44\xfa\xea\x40\x20\xd5\xdc\x06\x25\x31\x39\xc0\ +\x39\x5f\x31\x60\x87\x72\x39\xfb\xd6\xe5\x94\x61\xf4\x9c\x74\xb2\ +\x20\x54\x5f\x2a\xb6\xed\xd7\xb5\x3a\xab\xf1\x17\x55\x54\x56\xb1\ +\x0a\x0b\x9d\x7f\x2a\x6f\x82\x3b\x8a\x4c\x90\x61\x7c\x08\xf7\x90\ +\x0b\x91\xd2\x93\xc2\x21\xb1\xfb\x4b\xec\xa7\xc8\x2d\xb9\xeb\x54\ +\x73\x34\x85\x09\xdd\xc5\xfe\x64\xff\x00\x7a\xda\x08\x22\x81\x63\ +\x03\xd1\x61\xf3\xac\xce\xee\x9f\x11\x32\x78\xb1\x95\x36\xd7\x6b\ +\xf2\x35\x97\x2a\x14\x25\x4f\xa8\x1d\x6b\x58\x9a\xa3\xc5\x96\xcc\ +\xae\x3e\x21\xad\x5c\xe7\xd5\x14\x5f\x6a\x51\xfd\xe9\x8f\x4b\xae\ +\x6d\x40\xe1\xdc\xa6\x2d\x6e\x6f\xae\xa3\xad\x5f\x7d\x18\xdb\xad\ +\x67\x46\xb9\xa5\x04\xef\x9a\xb4\x64\xd6\x43\xef\x54\xf1\x52\xdf\ +\x51\x4b\x90\xe9\x6a\x63\x02\x74\x1a\xd2\x64\x68\xc1\xb7\x88\x3e\ +\x40\x90\x3e\x75\x00\xd0\xbe\xd4\x4b\x94\x93\x96\x45\x6b\x6e\x06\ +\xe2\x84\x82\xc4\xdb\xff\x00\x15\x34\x59\xde\x85\xaa\x25\x95\x82\ +\xe6\x8a\x02\xe8\x37\x73\xcf\xda\xa6\xe1\x91\x5c\x02\x03\x0b\xd8\ +\xd6\x51\x4e\x35\xa8\x6a\x63\x2d\xec\x6f\x50\x10\x66\x1c\xfa\xd1\ +\x87\x40\x14\x9a\x2c\xb6\xa6\x65\xa9\xcb\x56\x2d\x28\x28\x2a\xca\ +\x4b\x2e\x61\x6b\x8d\xc5\x14\x71\xc6\xb1\xf8\x65\xe5\x75\xe8\x4e\ +\x5b\x7d\x29\x81\x68\x82\xd3\x80\x0a\xa9\x18\xb4\x51\x2a\x9e\x46\ +\xd7\x35\x2c\x5e\xd7\x73\x6e\x57\x34\xc8\x94\x5c\xb1\x04\xf6\x1c\ +\xea\x70\xe2\x62\xec\xf3\x46\xca\x76\x4f\x29\x21\x7e\x94\xe2\x05\ +\xac\xc1\x9d\x48\xb7\xa1\x5b\xf5\x3f\xc5\x47\x3a\x6b\x5b\x35\x83\ +\x02\x77\xb6\xb4\x06\x94\x1d\x7a\x57\x3b\xc7\x12\xe7\x96\xe3\xf0\ +\x8e\xb5\x2e\xc9\x14\x5e\x23\xeb\xf8\x47\x53\x54\x26\x91\xe5\x90\ +\xbb\x1b\x9f\xd2\xb3\x6e\x24\xe2\x71\x0d\x33\x6f\xec\xa3\x61\x4b\ +\x42\xc3\x73\xf2\xa8\xb6\xba\x1a\x76\x16\x23\x2b\x1b\x90\xaa\x37\ +\x35\x8e\xeb\x46\xe1\x30\xe6\x5f\x3b\x9c\xa8\x39\xf5\xf6\xab\xc0\ +\x85\x5c\x88\x32\xa8\xe5\x4a\x04\x9b\x6b\x60\x05\x80\xa2\x26\xba\ +\x48\xc8\xf3\x1a\xec\xc6\x97\x9a\xba\xe6\x95\x86\x86\xa9\xce\x00\ +\xb9\x34\x9c\xe3\xdf\xb0\xa8\x05\xcb\x5e\xd6\xa8\x62\xc4\x6d\xb9\ +\xe6\x69\x81\xc5\x56\xbd\x10\x6e\xf5\x2c\x59\x06\x8c\x3d\x56\x57\ +\xa6\x23\x16\x36\x02\xe6\x9d\x06\xe6\xbd\x0e\x22\x41\x14\x51\xb9\ +\x22\xe6\x41\x61\x7d\x4d\x26\x6c\x54\x10\x86\xbb\x66\x2b\xea\xb6\ +\xcb\x54\xa7\x9d\xe7\x91\x66\x94\xda\xc2\xf1\xa7\xe1\xee\x7b\xd1\ +\x79\x19\x0e\xc5\x4e\xd3\x49\xad\x85\xb4\x03\xa0\xa4\xbb\xd2\xf3\ +\x80\x34\x34\xb7\x92\xb3\x79\x35\x83\x76\xbd\x1e\x00\xdf\x12\x0f\ +\xe1\x05\xaa\xa3\xc9\xad\x85\xc9\xab\x1c\x3a\xe2\x39\x1e\xfb\xd9\ +\x45\x12\xf6\xbe\x2d\x96\xd2\xe7\x41\xd4\xd0\x19\x54\x5e\xec\x08\ +\x22\xc6\xd4\xb6\x60\x35\xa0\x2d\x7d\x6b\x5a\x12\x4b\x15\xca\x5d\ +\xdd\x47\x27\x3a\x7f\x7a\x92\xee\x45\x89\xb0\xe8\x28\x0b\x50\x93\ +\x59\xd3\x86\x73\x05\x4d\xa8\x81\x6b\x5e\xff\x00\x51\x48\xbb\x5c\ +\x5b\xe7\x46\x49\x23\x4f\x9d\x5a\xb0\xe5\x62\x45\xf2\xe9\x4f\x84\ +\xf9\x88\xec\x7f\x4a\xac\x5c\x11\xe5\x3b\xd3\x62\x62\xa6\xd6\xb9\ +\xca\x7f\x4a\xd4\xa1\x48\x1a\x90\x75\xa5\x67\xca\x2e\x41\x3e\xd4\ +\x68\xc1\xb5\x17\xac\x34\x7c\x66\x8c\x52\xe3\xa6\x2d\x69\x94\x8b\ +\x74\xbf\x7a\x24\x37\x72\x37\xb5\x56\x92\x6b\x68\x01\x04\xef\x7a\ +\x98\x4b\x13\xa5\xea\xd3\x8d\x9e\x17\x29\xb1\x88\x9e\xeb\xef\x43\ +\xc4\x70\x8c\xef\xe3\xc0\xb7\xbf\xad\x40\xd8\xf5\xaa\x51\x4b\x6b\ +\x16\x24\x30\x3d\x2b\x57\x0f\x88\x59\x62\xf1\x43\x00\xc3\xd4\x01\ +\xfc\xeb\xa4\xb2\xcc\x65\x93\xa8\x36\x3a\x1a\x38\x5d\xd2\x55\x78\ +\xdb\x2b\xae\xa1\xbb\xd6\xb4\xc9\x16\x25\x2d\x2a\xef\xa8\x60\x2c\ +\x45\x65\xe3\x30\xef\x87\x97\x2b\x6a\x0e\xaa\xc3\x63\x45\x98\xa5\ +\x6c\xc5\x8c\x8a\x58\x83\x94\x71\x26\xcc\x80\x73\xa8\xc4\x44\xad\ +\x85\x99\xe6\x5b\xb9\x5c\xc7\x5d\xba\x0a\xcb\xe1\xb8\xaf\xb3\x4c\ +\x49\x17\x56\x16\x60\x37\xab\xd8\xbc\x76\x1d\xb0\xae\x91\xbb\x33\ +\x38\xb5\x8a\xda\xd5\xb9\xcb\x67\x63\x19\xc8\xe4\x48\xad\xa6\x84\ +\x56\xec\xad\xf7\x82\xfc\xc6\x6a\xc0\x17\x2c\x15\x45\xc9\xda\xb7\ +\x4a\x02\x40\x3a\x9c\xa2\xe4\xfb\x51\xc1\x72\x43\x30\x2e\x14\x1d\ +\x46\xa6\xaa\xf1\x66\x45\x85\x03\xba\xa9\xb9\xde\x89\x8b\x16\x26\ +\x2b\xaa\xde\xc2\x43\xcf\xda\xa3\x1e\x8a\x30\xcc\xc8\x35\x0d\xb9\ +\xd4\x9b\xf5\xa6\xdd\x81\x9d\x2d\x94\xf9\x9d\x47\x4d\x6e\x4f\xb5\ +\x2d\x8a\x9f\x2a\x2c\x8c\xd6\xbf\xa6\xc0\x7c\xcd\x1e\x6c\xb7\x2a\ +\x02\xf5\xb0\xb5\x2d\xdd\x8a\x9b\xb1\xd7\xbd\x73\x6c\x58\x50\xfe\ +\x38\x26\x38\xd9\x13\x52\x15\xae\x6a\xdb\x32\x9b\x95\x0e\xc7\xba\ +\xe5\xfc\xcd\x27\x00\xb6\x89\x9f\xf1\x1b\x0f\x95\x35\xc3\x91\xa2\ +\xb1\xaa\x0a\x53\x9b\xe8\xd6\x61\xf8\x7e\x1f\xef\x40\xee\xd6\xd1\ +\x88\xf6\xa9\x9d\xa2\x89\x6f\x34\xca\xbd\x86\xa6\x93\x16\x27\x0b\ +\x34\xa2\x24\x66\x0c\x76\x2c\x34\x35\x6a\x82\x36\x76\xb9\x16\x61\ +\xb3\x8d\xc5\x57\xc4\x3c\xc9\x2a\xa6\x22\x4b\xc4\xc7\x52\x39\x8a\ +\xb6\x14\xe6\x20\xe9\x61\xaf\x6a\xad\x28\x49\xe5\x12\xbd\xcc\x6b\ +\xa4\x6b\xf8\xbb\xd1\x48\x89\x12\x21\x0b\x70\x84\x58\xb5\xad\xa7\ +\x45\x1f\xbd\x73\x9b\x9b\xec\x06\xc3\xa0\xae\x66\xb9\xeb\xd0\x74\ +\xae\xb5\xf7\xa9\x04\x02\x7b\x0a\x35\x4b\x6c\x2a\x54\x51\x9d\x2a\ +\xc4\x10\x95\xd9\x45\x10\xa9\x03\xa5\x28\x39\x6a\x72\xf7\xa3\x60\ +\x91\xae\x69\xa4\x58\xc7\x7d\xea\xac\xfc\x4a\x24\x16\x82\x3c\xc7\ +\xf1\x3e\xdf\x4a\x91\xc1\x09\x16\x5b\x9e\x82\xa5\xad\x10\x1e\x34\ +\x89\x1f\x42\xc6\xb3\xe5\xe2\x38\xa7\x5b\x66\x54\xff\x00\x42\xda\ +\xa8\xcd\x21\x24\xdc\x96\x27\x72\x6b\x17\x9c\x87\x1b\x6f\x8a\xc2\ +\xb9\x03\xc6\x67\x2a\xe2\xc7\x2e\xda\xf2\xa2\x4c\x92\xdd\xa2\x91\ +\x58\x73\xed\x59\x31\x00\x11\x46\x9f\x11\x07\xbd\x80\x1f\xa9\xaa\ +\xd2\xe3\x0e\x1a\x4c\x98\x7f\x33\x83\xe6\x6f\xda\x8f\xde\x7a\xb1\ +\xa3\x8f\x90\x4b\x3f\x94\xdd\x54\x58\x55\x72\x47\x33\xf2\x14\x42\ +\x48\xf1\x10\x09\xe1\x16\xbe\x8e\xbf\x84\xd0\x5f\xf2\xa3\xd2\xe2\ +\xdd\xad\xf3\xad\x28\x50\x47\x02\x27\xc5\x6b\x9a\xcf\xc3\x29\x93\ +\x10\x8b\xd5\xab\x49\xc8\x2e\x48\xeb\x5a\xe3\xd0\xa8\x2e\x41\xf4\ +\xde\x84\xca\x2f\xb5\xaa\x76\xa5\x4c\x09\x7e\x80\xd3\xa0\xdc\xeb\ +\xd6\xa6\xf7\xdf\xe9\x48\x45\xb3\x5c\x9d\xa8\xcb\x81\xdc\xf4\x15\ +\x6a\x30\x9e\xa6\xbb\x38\xef\xf4\xa5\xa9\x20\x6b\xa9\xa3\x8c\x33\ +\x9b\x28\xf7\xed\x4e\xa1\x06\x1d\x0f\xd2\x89\x6e\x4e\x83\xf3\xa5\ +\x3c\xd8\x74\x62\xa2\x68\xe4\x90\x7c\x0a\x6a\x9e\x23\x19\x2b\xdd\ +\x41\xc8\xbf\x84\x51\xfa\x4b\xf2\xcc\x90\xfa\x9d\x58\xfe\x10\x75\ +\xaa\xf3\xe3\x65\x71\x95\x3e\xed\x7a\x2f\xf3\x54\x73\x1a\x90\xd5\ +\x9b\x6d\x38\xb0\x35\x55\x46\x17\x04\x97\x3d\xc0\xe5\xf5\x35\xd9\ +\xd9\x98\x93\x49\x6c\x42\xa6\x3c\xc5\x21\xb2\xb2\x00\x1a\xf7\xb5\ +\x1b\x5c\x3e\x5d\x49\xed\xce\x8d\x29\x73\x40\x4f\x7a\x62\xe1\xe7\ +\x71\x70\x84\x03\xcd\xb4\x14\x47\x0a\x8b\xeb\x72\xe4\xf2\x5d\x05\ +\x59\x52\xbc\x28\xd3\x4a\x72\xe8\x0f\x33\xc8\x55\xdb\x85\x40\x89\ +\xb2\x8a\x92\x48\x50\xa0\x05\x1d\x05\x2c\x9a\x7c\x0e\x26\xb8\x9a\ +\x12\x7b\x9f\x6a\x16\x63\x7d\xf4\xa8\xa5\x9a\xa0\x35\x05\x48\x1a\ +\xd1\xa8\xc5\xa6\x21\x03\x52\x69\x4b\xbd\x1a\xd2\x8c\x50\x73\x66\ +\x5b\x0e\x97\xa6\x40\xcc\x24\xcc\xc2\x96\xa7\x4a\x34\xad\x46\x55\ +\x71\xe8\xd0\xb9\x16\xf2\xb6\xc7\xb5\x0e\x18\x31\xd4\x5b\x5d\x35\ +\xad\x06\x41\x34\x46\x33\xbd\xbc\xa6\xa8\x94\x78\xd8\xad\xac\x6f\ +\xb1\xe5\x45\x98\x62\x52\x56\x0d\x6b\x0d\xfa\x53\x73\xbd\xaf\x6b\ +\x52\x61\x42\xad\x99\x88\xf6\xa3\xbd\xee\x3a\xd1\x0a\x74\x61\x63\ +\xa8\xa7\x42\x86\xde\x45\x36\xa5\xa2\xd8\xd8\x00\x5b\x73\x7d\x97\ +\xdf\xf8\xa2\x96\x35\x93\x43\x34\x99\xb9\x36\xc0\x7c\xa9\x82\x9a\ +\x8a\x19\x8e\x6d\x02\xe9\x4e\x85\xbc\x39\x03\x28\xb6\xba\xf7\xa4\ +\xa3\x1b\x28\x60\x3c\x45\x16\x65\xfc\x43\xa8\xa2\x57\xcc\x6c\x10\ +\x83\xdf\x95\x6a\x06\xb6\x1d\x95\x96\xe8\x6e\xbb\xdb\x9a\xf6\xa6\ +\x90\xb2\x46\x63\x91\x43\x29\xfa\x8f\x6a\xcf\xe1\xb2\x78\x73\x65\ +\x63\xe5\x7d\x0d\x68\x01\x63\xde\xba\xca\xcd\x66\x63\x30\x92\x40\ +\xd9\x87\x99\x0e\xcc\x29\x1a\x1d\x6f\xad\x6e\x03\xa5\xb7\x07\x71\ +\xd6\x90\xd8\x3c\x2b\xbe\x6c\xac\xa4\xf2\x07\x4a\x2f\x1f\xe2\x95\ +\x5b\x83\x42\x5a\x63\x3b\xdc\xaa\x0d\x3b\x9a\xd1\x94\x93\x0c\x86\ +\xe7\xd2\x4d\x72\x85\x54\x08\x83\x2a\x8d\x85\x73\x6b\x1b\x8e\xaa\ +\x7f\x4a\xd4\x99\x06\xf6\x06\x8f\x2b\x80\x1a\xea\xb4\x38\xd7\x8a\ +\x3c\x3b\xac\xa7\x56\x5b\x85\x1b\xd3\x66\x91\x62\x8d\xa6\x6d\x94\ +\x5c\x77\x35\x8a\x5a\x4c\x46\x2f\x31\xbb\x16\x3a\xfb\x51\xca\xe2\ +\x9d\xa9\xcd\xc4\xe3\x5d\x23\xc3\x82\x35\x3e\x76\xaa\xf2\x71\x59\ +\xb4\xcb\x14\x40\xff\x00\xa6\xf5\x64\xe0\x30\xe9\x33\x09\x5d\x9c\ +\x8b\xf9\x46\x80\x51\xa2\x41\x1b\x7d\xd4\x08\xa7\xa9\x17\x35\xc3\ +\x39\x37\xd1\x7f\x6d\xc5\xa4\x68\x04\xa5\x5b\x28\x2d\x6e\xa6\x91\ +\x36\x27\x11\x26\x8f\x33\x90\x4d\xce\xb5\xbc\xd6\x51\x91\x51\x00\ +\xb0\xd3\x28\xa4\xcb\x0e\x1d\xc1\xcd\x87\x8c\x9e\xa0\x58\xd6\xaf\ +\x1b\xfd\x5a\xf3\x6e\xec\x58\xe9\xa9\xe7\x51\x77\x8c\x82\xa7\x5b\ +\xd6\xe8\xc3\xe1\x51\x48\x18\x54\xee\x49\xbd\x56\xc5\x70\xe8\xe5\ +\xf3\xe1\xce\x56\xff\x00\xdb\x3c\xfd\xab\x17\x85\x3a\x9c\x3e\x39\ +\x71\x11\xa4\x78\x80\x10\x1d\x59\xaf\xea\x02\xdb\xfd\x45\x58\x90\ +\x66\x5b\xa1\x42\x08\xf2\xd9\x86\xd5\x91\x30\x29\x9e\x33\xff\x00\ +\x2d\x55\x2d\xdc\x9b\x9a\x47\x85\x26\x5c\xd9\x18\x0e\xb6\xab\xf5\ +\x62\xc6\xc1\x78\x21\x07\xc6\x9d\x10\xf4\x1a\x9a\x4b\xf1\x28\x14\ +\xda\x28\x19\xf5\xdd\xcd\xbf\x4a\xcc\xb5\x12\xa8\xe9\x47\xee\xfc\ +\x58\xd2\x4e\x27\x11\xd2\x4c\x3e\x5e\x99\x5b\xf9\xa7\xae\x23\x06\ +\xc3\x37\xda\x32\xf6\x23\x5a\xce\x87\x05\x3c\xab\x9a\x38\x0b\x03\ +\xce\xd4\xd4\xe1\x78\x92\xd6\x78\x84\x63\xab\x5a\xb5\x2f\x25\xd2\ +\xeb\x63\x30\x6a\x09\x12\xbb\x9e\x81\x6d\xf9\xd2\xbe\xdd\x88\x98\ +\xe4\xc2\x41\x97\x4d\xed\x73\xf5\xae\xc2\xf0\xec\x34\x63\x34\x8e\ +\xd2\x37\x41\xa2\x8a\xb6\x32\x85\xca\x8a\x15\x7a\x0a\xd7\x63\xa5\ +\x13\x82\x9a\x43\x9f\x11\x38\x56\x3b\x86\xb9\x34\x63\x87\x41\x94\ +\x03\x33\x5c\x6e\x72\xe8\x7d\xaa\xdd\x8d\x71\x01\x57\x33\xb0\x51\ +\xd4\xd5\x91\x6a\xaf\xfe\x99\x87\x2c\x2d\x3c\x84\x7e\x1c\xbb\xfd\ +\x28\xfc\x3e\x1d\x85\xda\x10\xcd\xd0\x9c\xc7\xfb\x52\xf1\x58\x92\ +\xde\x58\xae\xab\xd7\x99\xaa\xc0\x58\x97\x63\xa2\xea\x4d\x66\xd9\ +\x3c\x38\x6c\xd3\x34\xae\x5b\x2e\x51\x1a\x8b\x5b\x99\x27\xfb\x52\ +\x25\xc3\xe1\xf1\x6b\x91\xd3\x24\x9f\x0b\x8d\x01\xf7\x15\xcc\xc5\ +\x57\x33\x7a\xa4\x39\x98\x74\x1c\x85\x75\xae\x34\xac\xd2\xcd\xc1\ +\xcb\x27\x0f\xc7\x94\x9c\x30\x53\xa3\xaf\x51\x5a\x33\x20\x52\x0a\ +\x9c\xca\xc2\xe0\xf5\x15\x5f\x8f\xa6\x7c\x3c\x13\x5b\xcd\xaa\x13\ +\x6d\xfa\x55\x8e\x03\x1c\xb3\xe1\x4c\x33\x02\xa1\x35\x46\x6d\xed\ +\xcc\x51\x3d\xc5\xff\x00\x4e\xe1\x91\xfd\xe9\x97\x92\x0f\xce\xad\ +\x11\x52\x02\xaa\x04\x41\x65\x1f\x9d\x41\xda\xba\x66\x46\x50\x45\ +\x0b\x0b\xd4\x9a\x83\x52\x09\x5d\x2c\x49\xb5\x47\x6d\xbe\x54\x44\ +\x8a\x8b\x83\x52\x71\xd0\x0d\x0b\x13\xb2\x8e\x75\x57\x17\x8d\x77\ +\x06\x3d\x90\x1f\x42\xe8\x3e\x7a\xdc\xd3\xf1\x44\xae\x14\xb8\x36\ +\x28\x41\x07\x6f\x7a\xcc\x7b\xe6\x37\xde\xf5\x9e\x57\x0c\x11\x48\ +\xe5\xb6\x48\xd2\x39\x14\xdd\x4a\x8b\x03\xd8\xd3\x24\x1e\x21\x32\ +\x2a\x90\x6f\xe7\x5e\x6a\x69\x17\x14\x78\x9c\x40\xc3\xe1\x52\x6b\ +\xa8\x99\x89\x11\xb1\x1b\x0e\xf5\x82\x91\x7b\x5e\xc6\xdd\x6a\xcc\ +\x18\x57\x70\x19\xce\x45\x3c\xce\xe6\xa8\x60\x31\xbc\x52\x66\x76\ +\x9b\x13\x85\xc8\x8b\xba\x1e\x7c\xaf\x57\xb0\xdc\x4e\x53\x88\x48\ +\x31\x30\xc4\xcb\x26\x89\x2a\x8b\x0b\xf7\xa7\x8d\x95\x76\xb4\x70\ +\xf8\x36\xb6\x78\x33\x30\x16\xce\xc6\xe7\xe9\x4c\x8d\xb2\x05\x88\ +\x15\x03\x64\x60\xb6\xbf\x63\xde\x80\x99\xd4\x5a\x48\x23\x24\x6e\ +\x11\xac\xdf\x4a\x15\x9b\x0f\x22\xb2\x34\x99\x3a\xac\x9a\x11\x5d\ +\x3a\x64\xc6\x24\x9d\x77\xef\x40\xc6\xe7\xd8\xeb\x4a\x93\x17\x1a\ +\x49\x91\x88\x91\x46\xce\xa7\x5f\x9d\x13\x9d\x99\x4e\x65\x61\x71\ +\xde\x8d\x38\x96\x6a\x02\xd5\x04\xdf\x9d\xbb\x50\xb9\xb7\x3b\x50\ +\x5c\xcd\x50\x6a\x2e\x2f\xa0\xbf\xb5\x46\x60\x76\xbe\xb4\x24\xeb\ +\x7a\x82\x58\x5b\x4b\x51\xc8\x22\x8d\x7e\xf1\x82\x9e\x97\xb9\xa8\ +\xc3\x78\x53\x12\x15\xce\x6e\x4a\x74\xbd\x48\x71\x5b\x2e\x9b\xf3\ +\xa3\x03\x5a\x0f\x0b\x5d\xed\xef\x46\xa2\xca\x05\xef\x4a\x1a\xd3\ +\x12\x82\x31\x4c\x02\xd5\xa8\xc8\xd2\x98\xf1\xac\xcb\x95\xf4\x3c\ +\x9b\xa5\x29\x69\xe9\xbd\x69\x33\xe6\x8d\xe2\x72\x8e\x35\x1f\x9d\ +\x08\xad\x39\x23\x59\x93\x23\xef\xf0\xb7\x4a\xce\x91\x19\x24\x28\ +\xc0\x82\x0d\x62\xcc\x32\xe9\xae\xb9\x4f\x87\xbd\x8e\xa4\x9d\xcf\ +\x33\x5c\x05\x1c\xdf\xe7\x37\xb9\xb5\x0d\xe9\x02\x53\x70\x15\xaf\ +\x61\xb7\x51\xdc\x53\x16\xec\x72\x9f\x58\x17\xb0\xd9\x87\x51\xfc\ +\x52\x81\xa9\x92\xed\x87\x70\x2f\x75\x19\x92\xdb\x83\x4c\x47\x29\ +\x37\x16\xde\xb5\x0c\xf1\x05\x52\xee\x01\x20\x68\x35\xaf\x3f\x06\ +\x2b\x17\x31\x11\xa1\x05\x8f\xc5\x6d\x7e\xb5\xbd\x87\x89\x61\x85\ +\x50\x85\x66\xb0\xcc\x6d\x7a\xd7\x1b\xa2\x9a\x45\x8e\x86\xa4\x5c\ +\xd2\xd4\xaa\x7d\xd9\xd1\x6f\xe4\x27\x6f\x6a\x60\x16\xde\xb6\x04\ +\x2a\x31\x04\x58\x44\x0d\x8b\xee\x7a\x0a\x0c\x54\xf1\xe1\x94\x67\ +\xbb\x3b\x0b\xac\x60\x6a\x47\x5e\xd5\x9d\x36\x26\x69\x59\x89\x01\ +\x2e\x2c\x15\x4d\xc9\xf7\xaa\xf2\x90\x48\x77\x10\x99\xb1\x58\x85\ +\x82\x1b\x95\x1a\x0e\xe6\x9b\x0c\x71\xe1\x90\xc6\x08\xb9\x1e\x66\ +\xeb\x4b\xc1\xc0\x62\x87\x3b\x2b\x09\x1f\x6e\xc2\x98\xca\xbb\x9d\ +\x7d\xe8\xff\x00\xa5\x4b\x8a\x80\x31\x02\x40\x2c\x24\x17\xf9\xf3\ +\xaa\x97\xd6\xb4\x31\xe9\x9f\x0d\xa0\xd6\x33\x7f\x95\x67\x1d\xeb\ +\x1c\xbd\x31\xa6\x5b\x32\x2b\x8f\x89\x45\x2c\x92\xca\x6d\xa5\xff\ +\x00\x3a\x5e\x0d\xf3\x41\x97\x9a\x7e\x94\x43\xa0\x36\xa8\x16\x49\ +\x36\xb8\xd3\xad\x14\x7a\x4a\xa7\xa1\xa2\x2b\xe4\xca\x35\xcd\xce\ +\xb8\x47\x76\x00\x54\x75\x8f\xc4\x6e\xb8\xa6\x70\x80\x17\x21\x9b\ +\xb9\x06\xa8\xe2\x23\x9d\x65\xf1\xf0\xec\xc7\x5b\x94\xbd\xed\xf2\ +\xad\x4e\x2d\x22\xc9\x8a\x7c\xa3\xc9\x1a\xe4\xbd\xb7\x6e\x75\x44\ +\xe6\x04\x10\x6c\x6f\xbd\x72\xe5\x3b\x6e\x22\x71\x63\x72\x02\x92\ +\xb7\x20\x72\x34\xce\x16\x10\xe3\x61\x32\x80\xc9\x9b\x51\x4b\x75\ +\xcf\xb9\xf9\xd0\x46\x5a\x39\x01\x53\xa8\x34\x79\x53\xd1\x4a\x49\ +\x94\x8e\x9a\x1d\x2d\x51\x63\x41\x81\xc4\x2e\x2e\x30\x09\x02\x65\ +\x1a\x8b\x7a\xbb\xd3\xc2\x9b\x5f\x61\xde\xbb\x30\x55\xad\xca\x89\ +\x41\x27\x4a\x87\x96\x04\xde\x4c\xc7\xa2\x8b\xd5\x79\xb1\x2e\xc3\ +\x2c\x63\x20\xeb\xce\x8d\x5d\xac\xcb\x24\x71\x03\x9d\x81\x6f\xc2\ +\x37\xaa\x38\xdc\x43\x34\x2d\x29\x4c\xd9\x48\x01\x6f\xa0\x14\x36\ +\x24\xde\x89\x55\x4a\x95\x7f\x4b\x0b\x1a\x2d\xb4\xe4\x84\x47\x39\ +\x91\x6e\x30\x8f\x6e\x45\x4d\xe9\x18\x99\x64\x98\x18\xa3\x85\x94\ +\x73\x16\xb9\xad\x08\xd4\xa4\x69\x11\x36\x2a\x2c\xa4\x1d\x1b\xfb\ +\xd4\xb1\x6b\xdc\x92\x1b\x6b\xf3\xac\xe6\xc3\xaa\xb6\x26\x24\x2e\ +\x2c\xc5\x7c\xc2\xd5\xd1\xa3\x19\x02\xa0\x27\x31\xb5\xa9\xae\x09\ +\x37\x26\x9f\x80\x0a\xaa\x64\xb7\x9a\xf6\x14\xc8\x8a\xe2\x31\x24\ +\x18\x35\xcd\xe6\x7f\x13\x4b\x8d\x2f\x6a\xa9\x81\x91\xd7\x88\x46\ +\xd9\x89\x25\xad\xa9\xab\xdc\x6e\xc7\x07\x10\x36\xf5\x1a\xad\xc1\ +\xe2\x0f\x8a\xf1\x18\x79\x62\x19\xbe\x7c\xa8\xbf\xec\xa7\x8b\xd2\ +\x8c\xb2\x30\x1b\x03\x42\x68\x98\xdd\x89\x3c\xe8\x6b\xa0\x41\xa1\ +\x22\x8c\xd4\x11\x59\x40\xcb\xda\xba\xdd\xa8\xab\x8e\xd5\x24\x04\ +\x8e\x55\xf0\xa4\x24\x03\xcc\x72\xd2\xb3\x71\x11\x15\x95\xa3\x60\ +\x04\xa9\xb8\xe4\xc3\xa8\xad\x2a\xab\xc4\xcf\xdf\xea\xc4\x1d\x19\ +\x1b\xa7\x6f\x6a\xcf\x29\xd1\x8c\xf2\x29\x7c\x62\x31\x2f\x08\x12\ +\x58\xe6\x81\xec\x35\xe4\x6a\xd4\xaa\xa4\x16\x5d\x34\xb9\x43\xb8\ +\xfe\x47\x71\x4a\xc5\xdb\xff\x00\x47\xc4\xdc\x1b\x1c\xb6\xb8\xef\ +\x5c\xec\xe8\xb3\xb8\x3b\x5e\x39\xe3\xfe\x90\xdf\x4a\xb2\x8c\xa5\ +\x32\x48\x09\x5b\xdc\x58\xd8\x83\xd4\x56\x7e\x12\x53\x06\x21\x64\ +\x1b\x0d\xfb\x8a\xd0\x9d\x02\xbf\x94\xf9\x48\xba\x9e\xd5\x89\x7a\ +\x6a\xb4\xe3\xc7\x4c\x70\xba\xb2\xbb\x47\x6b\x31\x1e\xa5\xeb\xd8\ +\xd5\x59\x1c\xc9\x31\x77\xe6\x6e\x6d\x4e\xe0\x20\x3a\x4e\x8e\x33\ +\x28\x50\x6d\x56\xc4\x38\x61\xa8\x83\x5e\xec\x48\xae\xb3\x6c\xd6\ +\x4a\x9a\x2c\x33\xe1\xcb\x40\x09\x60\x34\x02\xe4\xfc\xc5\x27\x0d\ +\x8a\x68\x87\x87\x22\x66\x5e\x9b\x11\x57\x73\x90\x00\x5f\x28\x1b\ +\x05\xd0\x0a\x09\x95\x66\x89\xfc\x45\x04\xaa\x92\x18\x0d\x69\xb3\ +\xf8\x80\xb8\x8c\x33\x9d\x59\x90\xf5\x23\xf8\xae\x02\x37\x92\xd1\ +\xb7\x88\x6d\x7d\x36\x1e\xe4\xd5\x48\xb0\xd3\x49\x1e\x74\x8c\x95\ +\xeb\x57\x30\x51\x34\x38\x76\x0e\xb6\x77\x23\x9e\xb6\xa2\x5b\x7d\ +\x54\x72\x00\xab\x72\x83\x2f\x36\x46\xbd\xbd\xc5\xab\x92\x10\x40\ +\x28\x33\x03\xb1\x06\xf7\xa3\x8c\x95\x37\x06\xb9\xa2\x85\xbe\x12\ +\x87\xf1\x21\xb5\x6f\x02\xb6\x32\x0f\x1b\x1a\xa9\x18\xf3\x10\x33\ +\xdb\x61\x56\x06\x1a\x0b\x04\x55\x0a\x57\xd3\x27\x3b\xd3\x22\x48\ +\xe2\x8f\x24\x40\xd8\xfa\x98\xee\xd4\x56\xaa\x45\xa8\x61\x71\x98\ +\x80\x1a\xf9\x5c\x03\xb1\xa5\xa6\x6c\xf6\xb0\xbf\x7a\xb1\xb8\xcc\ +\x6e\x54\x8b\x35\xb5\xb5\xb6\x3f\x4b\x83\x5c\x22\xb9\x00\x26\x6b\ +\xec\x46\xb7\xfa\x53\x80\x2a\xa7\xf1\x0f\xa5\x15\xb5\xb5\x19\x8e\ +\x45\x5b\xb2\xb0\x1f\xd4\xbf\xbd\x42\x03\x7b\x90\x05\xb6\xad\x27\ +\x20\xa6\xa0\xa8\x51\x46\x2a\x16\x8d\x57\x4a\x4f\x10\x8e\xea\xb3\ +\x00\x09\x0a\x46\xbc\xcf\x2f\xd6\x9e\x9b\x0a\xec\x55\x86\x02\x52\ +\x76\x16\xf9\x6b\x50\x8c\xcc\x44\x8d\x98\xe4\x5b\xd8\x74\xd8\x54\ +\x07\xba\x86\x1c\xe8\x1c\xb2\x5c\xdb\x51\xb8\x35\x03\x45\x03\xe7\ +\x58\xd6\xf0\xd5\x6a\x34\x62\x0d\xc1\xd6\x90\x0d\x1a\xb6\xb5\x6a\ +\xc5\xcc\x10\xf1\x27\x55\xb0\x00\x9b\xb5\x85\x69\x06\xb9\xbd\x53\ +\xc0\xc7\xe1\x45\x99\xbd\x6e\x3e\x82\xac\x29\xae\x93\xa8\xcd\x3d\ +\x4e\x96\x3a\x83\xc8\xd2\xf1\x52\xb6\x16\x0c\xf1\xc8\x00\x26\xca\ +\xac\x2f\x63\x52\xa6\xa9\xf1\x32\xd3\x71\x05\x81\x6e\x42\xd9\x40\ +\xef\xce\xb5\x6f\x41\xd8\x3c\x3c\x98\x96\x32\x3b\xb6\x52\x7c\xce\ +\xdb\xb1\xab\xf0\xc7\x0c\x2b\x68\xd0\x7f\xa8\xee\x6b\x88\x54\x02\ +\x34\x16\x55\xd0\x5a\xa2\xe6\xa9\x31\x22\x46\xcb\xa1\xbd\xb9\x1a\ +\x02\x74\xa9\x90\xe9\x40\x08\xd8\xde\xfb\x55\x52\x01\xf3\x6a\x2e\ +\x0e\xe2\xb3\x71\x91\x18\xa6\x2a\x76\xdc\x1e\xa2\xb4\x89\xd7\x63\ +\x49\xc5\xc4\x26\x87\x2f\xc6\xba\xaf\x7e\xd5\x9b\x34\xc6\x7c\x32\ +\x98\xa5\x0e\x35\x1b\x11\xd6\xae\xdd\x4a\x86\x53\x75\x3b\x56\x71\ +\xd0\xdb\xa5\x1e\x12\x73\x11\xca\xd7\x28\x77\x1d\x2b\x12\x9b\x17\ +\xc6\xa2\xa5\xe5\xf0\x20\x79\x88\xcd\x94\x69\xf3\xa1\x5b\x10\x1d\ +\x4d\xd4\xd2\xe7\x99\xfc\x76\xc2\xb2\xab\x2b\xec\x6d\xaf\x6a\xd0\ +\x8c\xb9\x41\x22\xda\x79\x18\x83\xae\xf7\xd4\x1f\xce\x94\xa3\x3b\ +\x65\x22\xc0\x9d\x7b\x55\x8c\x4c\x18\x88\x03\x09\xf5\x77\x6c\xd7\ +\x1b\x6d\xa5\x20\xdc\x6a\x2d\x5c\xab\x6d\x75\xe1\xd8\x45\xb4\x6d\ +\x03\x35\xc7\xac\x36\xf5\x9d\xc5\xf0\x70\xe0\x98\x66\x72\x43\x6a\ +\xa2\xda\xfc\xe8\xb0\xf8\x9c\x42\x59\x44\xec\x14\x6b\x60\x6b\x37\ +\x13\x3c\xb3\xc9\x9a\x59\x19\xcd\xf9\xd3\xcb\x94\xcf\x04\x94\xc8\ +\x31\xd2\xc2\xe1\xa1\x0a\xb6\xfe\x9b\x9a\xd4\x79\x8e\x22\x24\x9e\ +\xe4\x86\x1a\x8b\xec\x79\xd6\x22\x29\x76\x0a\xa2\xe4\xec\x05\x6d\ +\x61\x22\x68\x70\x29\x13\xfa\xae\x49\x1d\x2f\xca\x8e\x16\xd3\x62\ +\x10\x86\x17\x15\x36\x14\x4a\x8a\xa6\xe0\x57\x11\x5b\x64\x26\xf5\ +\xd5\x35\xd6\xa9\x39\x4e\x99\x48\x0c\xa7\x91\x1b\xd1\x7c\x36\xb9\ +\x60\x36\x3f\x10\xf7\xeb\xef\x43\x6a\xed\x8d\x48\x2e\xba\x66\x04\ +\x10\x76\x20\xdc\x1a\xb1\x82\x17\xc3\x9e\xaa\xd4\xab\x82\x6e\x49\ +\x04\xee\x47\x3f\x71\xb1\xa6\xe0\x0d\xa7\x31\xb6\x50\x59\x74\xe8\ +\xdd\xc5\x53\xd5\x7c\x27\x8e\x1f\xf8\x58\x56\xda\x96\x26\xbb\x85\ +\x47\x93\x04\xd2\x5f\x59\x1a\xdf\x4a\x57\x18\x94\x4d\x89\x58\xa3\ +\x20\xaa\x0b\x0f\x7a\xbc\x23\xf0\xa1\x48\x41\x07\x22\xd8\xfb\xd5\ +\x3f\xdb\x57\xc2\xce\xf5\x07\x6a\x93\x73\x7d\x28\x4e\xf4\xd4\xeb\ +\x9a\xed\xeb\xaa\x39\x50\x9c\x4d\x09\x35\x26\x84\xd4\x90\x5b\xa5\ +\x56\xe2\xba\xf8\x6d\xd5\x48\xab\x06\x91\xc5\x01\xf0\x22\x16\x3a\ +\xdc\xd6\x6f\x85\x55\x1b\x41\x1b\x6c\x0d\xc1\xe6\x3b\x8a\x2c\x52\ +\x99\x70\x18\x88\x55\x7e\xf1\x6d\x70\x36\x24\x6b\xa7\xb8\xa4\xb0\ +\x24\xe5\xda\xd4\xd4\x6b\x62\x1a\x3b\xe5\x91\x95\x5d\x0f\xca\xd6\ +\xac\x42\xc0\x65\x60\xcd\x71\x6d\x76\x3b\xd6\x86\x05\xbc\x5c\x0d\ +\x89\xf3\x42\x6d\xff\x00\x49\xab\xf3\x47\x06\x20\x9f\xb4\xc1\x67\ +\xe6\xe9\xa1\xfa\x50\x61\xb8\x77\x85\x24\x86\x09\x44\xa8\xe8\x46\ +\x5d\x9a\xfc\xb4\xac\xce\x16\x53\xa7\x70\x01\xac\xe7\x96\x4f\xde\ +\xae\x1d\xa9\x5c\x26\x16\x8b\x0b\x23\x3a\x95\x32\x10\xa0\x11\x6d\ +\xa9\xc4\x76\xae\xb3\xc0\x00\x09\x36\x02\xf4\x38\xb7\x10\xe1\xdf\ +\x31\xb3\xb8\xb0\x1c\xed\x5d\x88\x38\x87\xc5\x88\x22\x93\x22\xb2\ +\x06\xf6\x16\xa1\x9f\x06\x83\x0e\xef\x79\x0b\x28\xbe\x76\xd8\xf6\ +\xab\xff\x00\x01\x18\x2c\x48\x48\xc4\x72\x29\x28\x35\x04\x6e\x2a\ +\xca\xcb\x86\x94\x12\x98\x80\x00\x3f\x10\xb5\xeb\x39\x04\x92\x9f\ +\x06\x25\x2c\x58\xed\x6a\xb6\x9c\x39\x96\xe0\xcc\x99\xbf\x09\x16\ +\xfc\xeb\x32\xdc\x2b\x48\x84\x0c\xc0\x82\xa7\x40\x41\xbd\xe8\xd4\ +\x69\x4b\xc2\x44\xd0\x21\x8d\xca\x92\xc7\x37\x94\xdf\x91\xa6\xd6\ +\xe0\xa9\x14\x4c\x52\x38\xcc\xb2\xb6\x54\x1c\xed\x72\x7d\xaa\x10\ +\x28\x53\x24\x87\x2a\x2f\xa8\xfe\xd5\x99\x8b\x9e\x4c\x5e\x23\x41\ +\xa0\x36\x45\x1c\x85\x56\xe0\x5b\x6e\x26\x43\xe5\xc2\xc0\x2f\xc9\ +\x9b\xcc\x4f\xca\x8a\x57\xc7\xaa\x91\x24\xb9\x21\x91\x6f\x90\xb8\ +\x56\x53\xda\x9f\x84\xc3\x47\x83\x50\x02\x86\x9b\x76\x72\x3d\x3d\ +\x85\x76\x35\x4c\xd8\x62\xbe\xa6\x53\x98\x5c\xdf\xde\x9c\xb9\xda\ +\x26\x0c\x37\x14\x8c\xf8\x89\x88\x1a\x8f\x4f\x8b\x76\xb7\xb5\x1a\ +\x63\xe6\x89\xc4\x78\xc8\x73\x10\x6c\x58\xe8\xc3\xf9\xa6\xc3\x89\ +\x56\x44\x56\x8e\x42\xcb\x60\xc5\x75\xfc\xaa\xc3\x2c\x73\xc6\x52\ +\x4b\x4a\x9f\x46\x5a\x64\xfe\x55\xbf\xd4\xc2\x63\x9d\x73\x41\x20\ +\x71\xd0\xe8\x47\xca\xa4\x82\xa6\xc4\x5b\xde\xa9\x62\x78\x6c\x89\ +\xf7\x98\x66\x2e\xa0\x7b\x30\xae\x83\x88\x4b\x1d\x93\x10\x9e\x22\ +\x8e\xba\x30\xf9\xd5\xbf\xd1\x9f\xc5\xe5\x26\x97\xc4\xcf\xfc\x1a\ +\xc2\x0f\x9a\x76\x20\xff\x00\xa7\x99\xa6\x46\xd1\xcd\x1e\x78\x5b\ +\x30\x03\x51\xcd\x6a\xb7\x13\x90\x7d\xa5\x23\x3b\x04\x28\x18\xf2\ +\x6b\xde\xd4\xdf\x14\xf5\x51\x81\x92\x14\x63\x60\x59\x75\xb7\x22\ +\x34\xa5\xc4\xc4\xa5\xb2\x93\x97\x4d\x28\xf1\x09\x96\x49\x63\x24\ +\x8b\x36\x70\x0e\xe0\x1f\xef\x53\x83\x86\x59\x17\xd2\x04\x77\xf5\ +\x1a\xe7\xf5\xa4\x00\x4f\x23\xfa\xd5\xdc\x16\x16\xd6\x92\x51\x71\ +\xb8\x5e\xbe\xf4\xdc\x2c\x70\x44\x40\x52\xa2\x53\x7b\x16\x3a\xff\ +\x00\x6a\x64\x88\x54\x16\x98\x65\x03\x76\x23\x5a\xdc\xe2\x2d\x33\ +\x52\x46\xd7\x3b\x0a\xec\xc0\x10\x0d\x66\xcf\x36\x69\xfc\x41\x7c\ +\xab\x6c\xa7\xb7\x7a\xd1\x23\xc4\x54\x90\x69\x9d\x73\x53\x28\xc3\ +\x90\xf4\x35\x4e\x56\xf0\xf8\xe1\x3c\x84\xb5\x66\x25\xd4\x29\x27\ +\x53\xb5\x66\x62\x8e\x6e\x2e\xcd\x60\x4f\x8a\x36\xe7\xad\x36\xf4\ +\xa3\x66\x4d\x24\x60\x39\x1a\x8b\xe9\x43\x35\x8c\xcf\xa0\xdc\xf2\ +\xa8\x0c\x47\x7f\x9d\x6b\x42\x0b\x5c\x91\x44\xbc\xe8\x52\xc4\x74\ +\x23\xad\x70\x37\xed\x6d\xe8\x48\x7e\x7d\x28\x2f\xa5\xea\x64\x36\ +\x5d\x4d\x46\xf4\x54\xa9\xc4\x60\xce\xa6\x64\x1a\x8f\x58\x1f\xad\ +\x51\xb0\xad\x70\x1b\x3d\xd4\x12\x7b\x55\x7c\x56\x0f\x31\xbc\x6b\ +\x91\xb9\xa9\xe7\xed\x59\xb3\xeb\x52\xaa\x61\xe5\x78\x49\xca\x6e\ +\x0e\xe0\xec\x6a\xdc\x13\x47\x26\x24\x16\x21\x18\xc7\xe5\xbe\xdb\ +\xf5\xaa\x45\x48\x36\x3b\xd4\xb0\x6f\x23\x80\x4e\x4b\x86\x03\x7b\ +\x1a\x25\xa6\xb4\x58\x39\x1e\x19\x4c\xea\x77\x04\x5c\x52\xfe\xc3\ +\x85\x63\x7f\xb2\xb0\x3c\xf2\x35\x87\xd2\xa8\xea\x23\x0f\x1c\xbe\ +\x5e\xa0\xfe\xa2\xa0\x4f\x23\xe8\x5d\xaf\xef\x57\xea\x7d\x18\x6e\ +\x22\x0c\x34\x2e\x55\x73\x3d\xc5\x8f\x9b\x6a\x54\x71\xe1\xd1\xc1\ +\x8f\x0a\xa0\xff\x00\x56\xb5\xc0\x51\xa8\xd2\x82\x2c\xc4\x9d\x95\ +\x40\xfc\x20\x54\x85\x5b\xfa\x45\x08\xa9\xbd\x20\x56\xf7\xfa\xd4\ +\x1f\x7a\x8b\xd7\x6a\x6a\x4e\x3b\xee\x3e\x95\xd6\x3d\x45\x4d\xab\ +\xaa\x48\x1b\xdb\x63\x5c\x74\xa9\xde\xba\xc7\xb1\xa9\x20\x94\x48\ +\x8c\xb2\xb6\x54\x1c\xfa\xd5\x29\xf8\x89\x91\xbc\x28\x07\x86\x3e\ +\x16\x27\x5b\xf7\xae\xe3\xce\xde\x2c\x71\x0d\x15\x50\x1b\x77\x34\ +\xee\x19\x86\x8e\x2c\x32\xe2\x24\x50\x59\x86\x60\x4f\xc0\xbd\x7d\ +\xeb\x3b\x6d\xc8\x73\xad\x3b\x04\xb0\x9c\x42\xe2\x66\x5f\x0f\x38\ +\xcc\xaa\xdb\x5e\xad\xcb\x7c\xc6\xfb\xd2\xf0\x91\xc6\xf0\x09\x64\ +\x19\x9f\x31\x39\x49\xd1\x6f\xa8\xa6\x4a\xda\x92\x6b\x70\x7d\x2f\ +\xe1\x14\x24\x54\xee\x2f\xb0\xae\x53\x7d\x41\x20\x76\xa5\x04\x8e\ +\xd4\x07\xc4\xbe\xc2\xdd\xa8\xc9\x39\xf2\xef\x50\xc6\xc4\x0e\xb4\ +\x20\x9a\x13\x46\x68\x1b\x40\x4f\x4a\x10\x4e\xa6\xf5\x53\x8a\x13\ +\x26\x24\x22\x7c\x20\x00\x07\x33\x57\xa1\x1e\x23\x6a\x3c\xab\xa9\ +\x17\xde\xa8\x46\xc1\xb1\x99\xdb\x7b\x97\xfa\x6b\x59\xe4\xd4\x2a\ +\x00\x7c\x67\x48\x99\x57\xc2\xb6\x79\x48\xbe\xbd\x05\x0e\x23\x06\ +\x26\x97\xc4\x8f\x16\xc5\xfa\xca\x2c\x4f\xcc\x69\x4f\x2b\xe1\x40\ +\xa9\x6b\x34\x87\xc4\x93\xdc\xf2\xa8\x55\xbe\xf5\x9c\xeb\xb4\x98\ +\xe3\x9f\xc1\x3f\x68\x42\x19\x3d\x2e\x35\x0c\x2a\xc7\x0b\x4f\xf3\ +\x24\x3f\x08\xb0\x3d\xea\xae\xe0\xe5\x1b\x75\x35\xa3\xc3\x93\xfe\ +\x04\x58\x80\x59\x89\x60\xcc\x05\xad\xa5\x6a\x0a\x8c\x6e\x21\x20\ +\x11\x19\x95\x9f\xc4\x04\xe6\xcd\xa8\xd6\xd4\x50\xaa\x4e\xb9\xb0\ +\xce\x24\xed\xb3\x0f\x95\x27\x8b\x64\x64\x80\x85\x0f\x95\x4f\x99\ +\x9b\x2a\x03\x7f\xce\xa9\x78\xe1\x08\xfb\xc7\x62\x0e\x9e\x19\xc8\ +\xa3\xdb\xad\x57\x96\x5e\xd6\x74\x6f\x13\x90\x8c\x68\x31\xbd\x8a\ +\x28\x17\x1d\x45\x36\x18\x04\x98\x70\xf8\x89\x24\xcd\x26\xa3\x5d\ +\x87\xb5\x57\x82\x07\xc6\x67\x95\x0a\xa9\x07\xcc\x09\xb7\xce\xb4\ +\x25\x3e\x7d\x35\xb0\x00\x77\xa2\x77\xda\x56\xc0\xe1\xcc\x12\x34\ +\x99\xd7\x2e\x56\x02\xc7\x52\x4d\x34\x0f\x95\x48\x50\xa2\xc3\xf3\ +\xa1\x93\x53\x6e\x94\xe6\x21\x8b\x16\xd3\x97\x3a\x62\x85\x08\x5e\ +\x46\xca\x8b\xbb\x54\x44\xaa\x22\xcf\x21\xca\x8a\x35\x35\x43\x15\ +\x34\xb8\xe9\x84\x50\xa1\xc8\x0d\x95\x47\xea\x69\xb7\x10\x71\xd8\ +\x97\xc5\x4a\x23\x8d\x48\x8c\x1b\x22\x0e\x7d\xeb\x43\x87\xe1\x57\ +\x06\xa1\x9e\xc6\x73\xff\x00\xd3\xfb\xd1\x61\x30\xf1\xe0\xd0\x65\ +\x0a\xf3\x73\x7f\xc3\xd8\x53\x54\x5c\xdc\xd3\x38\xfd\xa3\x5c\x54\ +\xb0\xef\xde\xa7\x0c\x72\xb9\x16\xbe\x61\x6a\x34\x5a\x60\x5c\xdf\ +\xcd\x68\x6b\xa2\x51\x1d\xfc\x24\x09\x7d\xed\xbd\x0e\x25\x0a\xa3\ +\x4e\xac\x55\x97\x9f\x5e\xd4\xe8\xc1\x2a\x6f\xb8\x36\x35\x18\x98\ +\xcc\xb6\x86\xf6\x55\x37\x76\xfd\xaa\xc4\x4e\x0f\x16\x24\x60\xae\ +\xb6\x63\xa0\x75\xda\x9b\x8a\x82\x2c\x52\xda\x51\x67\xd6\xce\x34\ +\xd7\xbd\x28\x60\xa3\x59\x96\x45\x9a\xca\x1a\xe4\x15\xd4\xd5\x96\ +\x39\x98\x9b\x6e\x6f\x54\xdc\xed\x7f\xe3\x28\x24\xfc\x36\x76\x95\ +\x80\x20\x21\x3d\x43\x0a\x87\x03\x11\x11\x64\x24\xa4\xea\x4a\xf6\ +\x3d\x3d\xeb\x47\x89\x46\xb3\x70\xf3\x03\xb1\x1e\x23\x59\x48\xe5\ +\xfd\xab\x0b\x86\xca\xd8\x4c\x63\x61\xa5\xd1\x59\xac\x6f\xf0\x91\ +\xb1\xac\x5e\xae\x19\xda\xc7\x09\x55\x9e\x73\x1c\xce\x49\x78\xd4\ +\xa9\x36\xb1\xb0\x1e\x5b\xf5\xb8\x3f\xec\x56\x8a\x07\x13\x08\x94\ +\x05\x7c\xb7\xb7\xe0\x15\x93\x82\x85\x5e\x18\x62\x11\x96\x77\xb3\ +\x02\xbb\x8d\x6b\x68\x44\x90\xca\xcc\xac\x59\x88\xb1\xd0\x00\x4f\ +\x33\x4f\x1f\x15\x23\x11\x83\x52\xb7\x80\x5c\x8d\xc1\x1a\x9e\xe2\ +\xaa\x9f\x14\xb0\x46\x2e\xdc\xac\x4e\xbf\x4a\xd1\x04\x8a\x89\x50\ +\x4c\xca\xf9\x8a\x48\x9b\x35\xaf\x7a\x6c\x12\xa9\x34\x6d\x1d\xbc\ +\x45\x2b\x7f\xc5\xa5\x68\x70\xe9\x56\x4c\x3a\x44\x74\x74\x04\x2d\ +\xf9\x8a\x5e\x26\x19\xe6\x20\x2f\x85\x65\xd7\x43\x6b\x9e\xba\xd2\ +\xf0\x0a\xc9\x8f\x8d\x58\x10\x43\x73\xa6\x75\x53\x46\x1f\xf3\x54\ +\x9d\x81\xbf\xd2\xb1\x61\x19\xf1\xe0\xa9\xd1\xa5\xba\xdf\x90\xbd\ +\x6c\xc2\x7e\xf5\x7d\xed\x58\xa2\xe9\x8e\x00\x5b\xcb\x26\x97\x36\ +\xb6\xb5\x72\xf8\xa3\x66\x7d\x66\x6f\xf5\x1a\x85\x15\x33\x5f\xc5\ +\x7d\x47\xa8\xf2\xef\x43\xaf\x61\xf9\xd6\x80\xd4\x29\x2c\x58\x79\ +\x46\xa7\xe4\x2b\x29\xb8\x96\x20\x4c\xe2\x30\x42\x83\xa0\xab\x9c\ +\x4d\xcc\x7c\x38\xda\xf7\x76\x00\xd6\x41\x3a\xdf\xeb\x58\xe5\x73\ +\xc6\xa4\x5f\x87\x88\x2c\x8d\x7c\x4c\x36\xe4\x0a\xff\x00\x15\x2f\ +\xc4\xa0\x53\x95\x61\x76\x3f\xd4\x6c\x2b\x38\x11\xf8\x87\xd6\xb8\ +\xe6\x3b\x58\x0e\x57\xa3\xf5\x4e\x43\xf1\x38\xcc\x44\xd7\x19\xb2\ +\x2f\x45\xd2\x82\x1c\x6e\x2a\x11\x65\x94\x95\xfc\x2d\xa8\xa0\xe5\ +\xb8\xbf\xb5\x5f\xc0\xe1\xa2\x38\x41\x23\xc6\x24\x67\x26\xdd\xa8\ +\x9b\x6a\xb9\x0b\x18\xcc\x36\x20\x85\x99\x7c\x37\xfc\x43\x6a\x39\ +\x30\x6e\x14\x34\x6c\x24\x07\xf0\x9d\x68\xce\x03\x0d\x20\xb9\x56\ +\x8c\xff\x00\x4e\xb4\xb5\xc0\xe2\xf0\xe7\x3e\x12\x51\x27\x60\x6c\ +\x7e\x9c\xeb\x5d\xfd\x1d\x2b\x4f\x01\x2d\x9d\x33\x2c\xab\xea\x1b\ +\x67\x14\xa5\x4c\xc7\x32\x03\x6b\xfd\x3d\xea\xf2\xe3\xca\x9c\x98\ +\xbc\x31\xb8\x3b\x81\x63\x53\x2b\x60\xe6\x91\x1e\x19\x32\x3b\x1c\ +\xad\x71\x6c\xda\x6d\x46\x45\xb5\x5d\x52\xdc\xc9\xf7\x34\x40\x5a\ +\x9c\xf8\x59\x46\xa9\x67\x07\x9a\x9a\x53\xab\x21\xb3\x29\x1e\xf5\ +\x62\x45\x75\x45\xeb\xaa\x4e\x22\xe6\xa4\x57\x0a\x9a\x92\x40\xae\ +\xae\xae\xa5\x3a\xdd\xab\xad\xad\x4d\x75\xaa\xc4\xa7\xc7\x63\xce\ +\xb1\x4e\xa2\xc4\xae\x46\x37\xe6\x36\xd3\xfd\xef\x4d\xc1\xb1\x97\ +\x0e\x80\x90\x52\x15\xd1\x6d\xcc\x31\x02\xff\x00\x91\xa7\x49\x1f\ +\x8f\x87\x93\x0f\xcd\x85\xd7\xdc\x55\x6e\x1e\xcc\x85\xe0\x73\x6c\ +\xe8\x96\x1c\xb3\x6a\x7e\x5a\x00\x2b\x39\xda\xf8\xbd\xc3\xc9\x2b\ +\x2a\x12\x2f\xa3\x0b\xf3\xa2\x90\x5c\x58\xfe\x54\x8e\x1c\xc0\x63\ +\x2c\x7e\x20\x54\x55\x87\xb1\xad\x4f\x05\xf5\x5d\x94\x96\xcb\x5c\ +\x17\x21\x1a\xe8\x69\x84\x73\x1b\xfe\xb5\x04\xa8\x4c\xee\xe1\x54\ +\x73\x35\x12\xda\xec\xd7\x5e\x5b\x9a\x9c\xba\xdc\xb5\xcd\x4c\x6f\ +\x0c\xa4\x84\x97\x6e\x45\x6d\x45\x94\x13\x65\x74\x24\x6e\x2f\x6f\ +\xd6\xa4\x59\x15\xd9\x46\x52\x58\x85\x51\xb9\x3b\x53\x0c\x4d\xb8\ +\x1a\x75\xbe\x9f\x5a\x8b\x2b\x1b\xe8\xc2\x2d\x06\xb7\x05\x8d\x58\ +\x95\xe4\x56\x4c\x24\x8c\x8c\xb6\x60\x00\x21\xc0\x1a\xf3\xfc\xaa\ +\x9c\x30\x9c\x99\x94\x11\x9b\x43\x2b\x68\x00\xe7\x6e\xb5\x7f\x1f\ +\xe4\x81\x5d\x15\x43\x33\x58\xf9\x46\xba\x55\x2b\x97\x62\x59\x8b\ +\x1e\x75\x8e\x53\xb3\x13\x29\x0f\x29\x61\xb6\xc2\x84\x81\x6d\x6a\ +\x76\xae\x35\x92\x18\x90\x34\x81\x54\x1b\x13\xa8\xbe\xf4\xec\x04\ +\x0a\xd2\x33\x38\xba\xc5\xa1\x1d\x5b\xff\x00\x34\xdc\x36\x1c\xa6\ +\x11\xe7\x26\xcd\x94\x95\x16\xe5\x56\x32\x2c\x68\xb1\xa0\xd2\xc0\ +\x93\xd4\x91\x5b\x9c\x46\x93\xc4\xd0\xe2\x38\x79\x03\x78\x9b\x30\ +\x00\x72\xac\x60\x3a\x0a\xf4\x11\xb1\x57\xb8\x17\xb6\xe3\xf6\x35\ +\x9b\xc5\xb0\x9e\x0c\xbe\x2a\x29\x31\xbe\xa0\x9e\x47\xa5\x1c\xf8\ +\xfd\x52\x87\x82\x39\x18\xf5\x8c\x1b\x2c\xbe\x53\xde\xae\x85\x02\ +\x52\x3a\x0e\x75\x9b\xc3\xe3\x69\x31\xf1\x22\x9b\x12\xe3\x5a\xd8\ +\x97\x2b\x48\xc5\x45\x81\x26\xd5\x70\x9d\x2a\x55\xaa\x5a\x35\xf0\ +\xcc\x8d\xe5\x55\xdc\xd1\x48\xd1\x41\x18\x92\x72\x40\x3e\x95\x1b\ +\xb5\x51\x69\x26\xe2\x38\x85\x88\x2d\x90\x1d\x15\x74\x0a\x29\xb4\ +\x47\x4c\xd3\xf1\x0c\x42\xc3\x12\x15\x8c\x6c\x39\x7b\x9a\xd0\x82\ +\x38\xf0\xb0\xf8\x50\x9d\x4f\xad\xc6\xed\xfd\xaa\x62\x54\x81\x0c\ +\x30\x8b\x20\xe7\xcd\xbb\x9a\x9b\x53\x26\x76\x82\x06\xb4\xd8\xd7\ +\x95\x42\x8b\x53\x10\x56\x85\x12\x8d\x6d\x4c\x41\x50\x83\x4a\x35\ +\x14\xc0\x9b\x84\x90\x30\x17\xd2\xe4\x75\xa3\x28\x42\x05\x3a\x93\ +\xe6\x63\xd4\x9d\x6b\x94\x03\xa3\x6c\x41\x14\x69\x73\x18\xcf\xeb\ +\x5f\x2b\x58\x74\xd8\xfd\x2b\x51\x14\x56\xc0\x9b\x6c\x2a\x02\xe5\ +\x50\x29\xd7\x5b\xdb\xf2\xb5\x00\x07\x2e\xa3\x51\x46\x25\x3e\x28\ +\x40\x78\xd3\xa2\xdc\xfc\xeb\x23\x8f\xc7\x71\x16\x25\x45\x8b\x79\ +\x58\xf7\x15\xaf\xc5\x74\xc4\x8f\xf4\x0f\xd2\xb3\xb8\xbe\x5f\xfd\ +\x28\xe6\xdf\xc4\x19\x3d\xf9\xfe\x55\xcf\x9c\xf5\xae\x2d\x3c\x1c\ +\x0b\x86\xc3\xa1\x0b\x69\x1d\x05\xcf\xe1\x16\xda\xb8\xdc\x9a\x7e\ +\x28\x7d\xe6\x51\xb0\x00\x7d\x00\x14\x83\xa5\x69\x97\x0a\x25\x34\ +\x35\x2b\x52\x18\xda\x89\x81\x91\x40\x06\xce\xba\xa3\x5f\x63\x42\ +\xb4\x40\xeb\x4c\x43\x0d\x9d\x44\x83\x42\x77\xec\x79\xd6\x6f\x1b\ +\x8d\x93\x18\x66\x1b\x4b\xe6\x06\xb4\x09\xca\xcc\xe1\x4b\x2b\x6a\ +\xe0\x6e\x0f\x5a\x99\x16\x39\x22\xc9\x20\x12\x46\x76\x20\xed\xed\ +\x55\x9b\x0c\xea\xab\x61\xb1\xf0\xc8\x80\x62\x2e\x8e\x05\xb3\x01\ +\x7b\xd3\xda\x6c\x28\x5c\xc7\x13\x19\x03\xa6\xff\x00\x4a\xac\xfc\ +\x32\x26\x6b\xc7\x88\xca\x3a\x32\x9b\xfe\x54\xa9\xb8\x64\xf1\xdc\ +\x96\x8f\x2f\x22\x5a\xd7\xa3\x79\x45\xd0\x78\xa6\x29\x67\xcb\x1c\ +\x57\xc8\x97\xd4\xf3\xaa\x95\x63\xec\x73\x88\x4c\x9e\x04\xae\xa3\ +\xf0\x2e\x9f\x5a\x42\x14\x75\x25\x43\x02\xbe\xa5\x61\xa8\xac\x5d\ +\xfa\xd4\xc7\x0b\xd7\x58\xd4\x8a\x90\x3c\xb7\xa0\x86\xc6\xb5\x78\ +\x6d\x9f\x87\x2d\xbe\x06\x20\xfc\xeb\x2f\xe5\x57\xf8\x1c\x83\xc4\ +\x78\x0f\xfc\xc0\x32\xfb\xd6\xb8\xfa\x2f\x8b\x56\xae\xb5\x19\x17\ +\x14\x24\x6b\x5d\x18\x43\xda\x45\xc9\x2a\x89\x01\xd2\xcc\x2f\x55\ +\x8e\x0b\x0e\xf2\xfd\xde\x68\xc2\x12\x49\xbd\xc5\xc8\xb5\xaa\xd1\ +\x16\x89\x8e\x6c\xbb\x00\x7d\xcd\xaa\x5d\x42\x9c\x8a\x3c\xab\xa0\ +\xa3\x16\xb3\x1f\x0b\x8b\xc1\xfd\xec\x12\xe6\x41\xbd\x8e\xde\xe2\ +\xad\x60\x31\x23\x15\xf7\x4e\xa0\x48\x06\x9a\x68\xd5\x65\x09\x56\ +\xb8\xff\x00\xcd\x51\xe2\x78\x51\x1f\xfc\x4c\x07\x28\xbf\x99\x7f\ +\x09\xa3\x33\xc3\xba\xb0\xf8\x58\xe4\xbe\x51\xe1\xb7\x3e\x9f\xda\ +\xa9\xcc\x8b\x13\x65\x92\x44\x53\xca\xe7\x7a\xb5\x83\x91\xf1\x8e\ +\xc9\x2c\x8c\x72\x0c\xc5\x41\xb6\x70\x76\x3f\xcf\xb5\x49\xc2\xc6\ +\xd8\x93\x11\x04\xc2\x10\x31\x07\x52\x2f\xd2\xac\xdf\x12\x93\x29\ +\x53\x63\xf9\x57\x0a\xb1\x8d\x84\xc5\x2f\x55\x61\xe5\xb7\x4a\x4f\ +\xb5\x18\x5c\x05\x75\xaa\x46\x82\xa0\x1b\xd2\x93\x50\x6a\x6b\x8e\ +\xa2\xa4\x10\x4a\xb0\x61\xb8\x3a\x55\x3e\x34\x1a\x2c\x44\x8e\x9e\ +\x51\x94\x49\x19\x07\xa6\x9f\xb8\xab\x6d\x53\x2c\x51\x62\x03\x44\ +\xe3\xcc\x51\x42\xb5\xbd\x37\xfe\xe0\x56\x6c\xde\x90\x38\x64\x8b\ +\x89\x9a\x29\xd2\xd9\x81\xb4\x8a\x39\x1e\xb5\x64\xd7\x9e\xc1\xb4\ +\xf8\x4e\x26\xa2\x13\x66\x12\x65\x3a\xdb\x4a\xf4\x12\x32\xb4\xbe\ +\x22\xb7\x92\x41\x99\x7d\xaa\xe1\x76\x1a\x9b\xd2\x38\x92\x5f\x07\ +\x98\x35\xad\x25\xed\xd7\x4a\x2b\xf9\xf3\x0d\x40\xa6\xe4\xf1\x3c\ +\x10\xc3\xca\x25\x24\xdc\x5e\xfa\x53\xe8\x27\x0c\x7c\x18\x11\x14\ +\x10\xc4\x5d\x88\xef\x4c\x2c\x58\x11\x20\x0e\x3f\xa8\x5e\x80\x7f\ +\x9b\xf3\xe7\x4c\x37\xbd\x51\x06\xd1\x65\xcb\xe0\x47\x6e\x9a\xff\ +\x00\x35\x20\x8b\x05\x00\x28\x1b\x28\xda\xa6\xc6\xa4\x0b\xd2\x89\ +\xe2\x5a\x60\xd0\x85\xbd\xa4\x3f\xa5\x66\xc6\x72\xb5\xcf\x3d\xeb\ +\x57\x1e\x3f\xe1\x93\xff\x00\x90\xfe\x95\x9c\xa8\x19\xcf\x6a\xc7\ +\x2f\x4c\x41\xd7\x50\x34\xef\x45\x86\x88\xcb\x88\x58\xee\x06\x63\ +\xc8\x5e\x8a\xd5\x6b\x85\xc6\x73\x3b\x80\x6e\x05\x87\xce\x89\x36\ +\x9a\x9e\x20\xfe\x1e\x1f\x22\x9d\x24\xd0\x0b\x6b\x94\x54\x60\x09\ +\x93\x0c\x55\x8d\xcc\x67\x4b\xf4\xa8\xe2\x65\x4f\x86\x80\xdd\x94\ +\x1b\xd8\xde\xd5\x30\xc5\x2e\x12\xd2\xba\x82\x8e\x2c\x40\x35\xaf\ +\xac\xfc\x37\x2d\x2f\x89\x18\xd3\x07\xe0\xc8\xda\xca\xea\x6d\xd0\ +\x75\xab\x12\xbc\x50\xe1\x8e\x20\xd9\xd7\xe1\x1d\x4d\x63\x62\xa5\ +\x79\xe6\x32\x48\x75\x3f\x95\x36\xa8\x4c\x38\xf9\x30\x9c\x5c\x09\ +\x11\x04\x71\xb7\xa4\x0d\xbb\xd6\x8c\xdc\x45\x50\x0c\xb8\x54\x37\ +\x17\x0d\x98\x91\xee\x2b\x33\x8a\xa7\x89\x83\x49\x88\xbb\x23\x65\ +\x27\xb7\x2a\x77\x0e\xe1\xdc\x56\xc1\x51\x13\xc3\xb5\xfe\xf0\xf9\ +\x47\xf7\xae\x72\xf2\x97\x23\x5d\x02\x77\x9b\x15\x88\xcc\xe7\x33\ +\xb6\x80\x01\xfa\x56\xbe\x12\x0f\xb2\x61\x7c\x2f\xf9\x8f\xac\x9d\ +\xbb\x51\xe0\xe0\x4c\x39\x20\x46\x04\xfb\xdc\xdf\x6f\xe9\xa2\xb5\ +\xeb\x7c\x78\xe7\x75\x9b\x41\x6b\x58\xd1\x01\x53\x96\xed\x6f\x99\ +\xa3\x55\xad\x0d\x42\xad\x35\x56\xb9\x16\x98\x05\x41\xca\x28\xd4\ +\x6b\x50\xbb\xda\x88\x9b\x68\xba\xb7\xb6\xd5\xa4\x24\x5a\x6a\x8f\ +\x30\xe8\xfe\x53\xd8\x8d\x8f\xed\x49\x89\xb3\x1f\x31\xdb\x96\xd4\ +\xd8\x8f\xde\x2a\x83\xe5\xcc\x48\xee\x40\xdb\xf3\xad\x44\xe3\x7b\ +\x6e\x68\x5a\x9a\x46\x9a\xd0\x30\xa9\x33\x78\xb7\xff\x00\xaa\x1f\ +\xe8\x5f\xd2\xb2\xb8\xf3\x11\x85\x82\x3b\x68\xc4\xb9\xf7\xda\xb6\ +\x78\xba\x7d\xea\x3d\xfd\x4b\xfa\x69\x59\x3c\x69\x03\x3e\x0d\x0e\ +\xcd\x70\x7f\xee\xae\x5c\xe7\x55\xae\x2d\xc9\xbc\xc1\x5f\x6c\xea\ +\x1b\xda\x90\xc0\xde\x8b\x87\x16\x9f\x85\xc0\x43\x67\x65\x05\x0d\ +\xbb\x7f\xe6\x89\x81\x07\x51\xaf\xb5\x6a\xff\x00\x59\x2c\x2f\x5a\ +\x21\x5d\x51\x7e\xd4\x21\x0f\x7a\x9a\x10\x6a\x41\x35\x21\x02\x41\ +\x04\x6e\x29\x44\x4d\x16\x2b\x2c\x00\x15\x94\x66\x00\x8b\x81\x4c\ +\x15\x32\x5c\x46\xd2\xa5\xc3\xc6\xbe\xe0\x8e\x96\xa5\x03\x10\xf8\ +\xc8\xe2\x2d\x9a\x35\x00\xea\x63\xb5\x1e\x19\x32\xc2\xae\x7c\xce\ +\xe2\xe4\xb6\xb6\xaa\x32\x4b\x88\x9d\x6e\x73\xba\x83\xf0\x8d\x05\ +\x5d\x49\x84\xa1\x72\x02\x0a\xd8\x15\x3b\xe9\x54\xa4\xd0\xd2\x66\ +\xcd\x98\xdf\xad\xea\xbc\xb0\x26\x23\x89\x4a\x19\x72\xda\xf7\x75\ +\x1a\xfc\xea\xc6\x66\x12\x00\xaa\x73\x7c\x2b\xd7\xdf\xb5\x74\x71\ +\xac\x20\x85\x39\x8b\x1f\x33\x1e\x67\xb7\x6a\x7d\x0c\x9c\x66\x19\ +\xf0\xf2\xe5\x3a\xa9\xd5\x58\x6c\x69\x56\x35\xbb\x3c\x5e\x3e\x19\ +\xa2\xe7\xba\x7b\xd6\x31\x5b\x12\x08\x37\x15\x8e\x5c\x71\xa9\x41\ +\x6d\x2d\x56\x38\x40\xff\x00\xf2\x50\xff\x00\xaa\x92\x6c\x37\x20\ +\x7b\xd5\x8e\x12\x3f\xfc\x8c\x27\xfa\xaa\x9e\xa6\x89\x02\xda\x52\ +\xcd\x31\x98\x6c\x01\x27\xda\x81\xae\x01\xd0\x56\xd9\x71\x00\xca\ +\xa9\x73\x64\x5f\x10\x81\xcc\xec\x2a\x05\xed\x6d\xed\xce\xa1\x81\ +\x2a\xac\x1a\xef\x6b\x65\x3b\x30\xe9\xd8\xd3\x22\x0a\x45\x95\x80\ +\x23\x70\xda\x11\x52\x0d\x8d\x12\x73\xd0\x32\x9d\x18\x72\x34\xc5\ +\x8c\xf2\x19\xbd\x8d\xe9\x25\x6c\xe5\x46\x52\x06\xec\x4e\x9e\xda\ +\x6e\x6a\x4c\xfe\x2a\x92\x60\x18\x62\xa0\x3e\x54\x6b\x2e\xbb\x83\ +\xc8\xfc\xe9\xdc\x1b\x1d\x1e\x36\x49\x73\x30\x49\x99\x75\x52\x74\ +\x36\x3c\x8d\x59\x9a\x05\xc4\xc2\xd8\x76\x94\x80\xe2\xd6\x0a\x00\ +\xbf\x5a\xf3\x85\x25\xc0\x63\xd9\x1d\x7c\xcb\x70\xc3\x91\x15\x8b\ +\x6f\x1b\xbf\x0c\xed\xe9\xa7\x89\x9e\x06\x46\x1c\xae\xa6\xb3\x2d\ +\x47\x82\xc5\xbc\x79\x64\x8d\xd8\xc4\xc7\x55\x34\xdc\x5a\x05\x9c\ +\xd8\x68\xda\x8a\xd6\xea\x22\xc6\xbb\x2d\x34\x2d\x71\x5a\x16\xaa\ +\xe3\xe6\x92\x08\xd0\x44\x72\x97\xb9\x27\xb7\x4a\x94\xc5\x61\xde\ +\x30\xce\xf9\x5a\xde\x60\x16\xfa\xd3\xa7\x8e\x39\x23\xfb\xc4\x24\ +\xa0\xd0\x83\x6a\x4b\xe0\x62\x71\xe4\x63\x1b\x7f\x56\xa2\x8e\xf7\ +\xa3\xd3\x96\x48\x24\x6c\xb1\xcb\x73\xfd\x42\xd4\x4a\xd9\xe5\x31\ +\x23\x03\x95\x2c\x4f\x72\x74\xb5\x56\x7e\x1f\x38\x04\xfd\xd3\x76\ +\x56\xd7\xe9\x4e\xc0\x14\x83\x06\xce\x48\x56\x8e\xec\xc0\xef\xdb\ +\x4a\x3b\xde\xd3\x3b\x10\x56\x4f\xf1\x31\xc8\x43\x5e\x4f\xae\x95\ +\xb2\x61\x11\xc3\x1c\x6d\xea\x44\x00\xf6\x35\x99\xfe\x1e\x84\xcb\ +\xc6\x17\x12\xea\x08\x4d\x4d\xf9\x9a\xd6\x93\x31\xb9\x2a\x6e\x68\ +\xe1\xe6\xaa\x51\xb2\xad\x42\xc8\x4a\x94\x07\x29\x24\x10\x7a\x11\ +\xb5\x11\x40\x39\x6b\xd6\x81\xd4\x12\x2c\x35\xad\x23\x34\x20\x48\ +\xab\x6c\xdb\x8e\x87\x98\xa1\x66\xb1\xb5\xa8\x92\xd7\x24\x79\x49\ +\xdf\x4b\x86\xf7\x1f\xb8\xa9\xb5\xcd\xad\x66\x1a\xe5\xbe\xfd\xc7\ +\x5a\x52\x28\xd4\x50\xae\xf4\x6b\x50\xa0\xc7\x2e\x6c\x18\x23\xe1\ +\x7d\x7e\x75\x9c\x10\x2e\xa0\xed\xbd\x69\xe2\x41\x6c\x1c\x80\x6e\ +\x2c\x4f\xb5\x51\x50\x2d\x59\xbe\x99\x42\x12\xe6\xdb\x73\x27\xa5\ +\x5c\xc0\x25\xf0\xcc\xc4\xb2\x29\x60\x02\x8d\x0b\x0b\x1d\x4f\x4a\ +\x42\x80\x14\x2b\x5a\xce\x72\xfc\x86\xa7\xf2\x1f\x9d\x5c\xc0\xdd\ +\xa0\x91\x8e\xe6\x4b\xfe\x55\x48\xa8\xac\xa5\x72\x18\xd3\x2f\xe1\ +\xcb\x50\xd8\x44\x98\x04\xf1\x64\x50\x3d\x2a\x75\x02\x99\x61\x4c\ +\x87\xd6\x47\x55\x20\x7d\x0d\x69\x96\x0e\x35\xc3\x48\x51\x49\xca\ +\xa4\xdb\xa0\x1b\x0f\xd2\xff\x00\x3a\xb1\xc3\xb8\x78\x78\x84\xd8\ +\x82\xc1\x0f\xa5\x46\xed\x54\x9c\x10\xc5\x48\xd4\x1b\x1a\xdf\x6d\ +\x42\x64\xb6\x4c\x82\xc4\x7b\x56\x38\xf7\x75\xaa\x52\x41\x86\x8d\ +\x72\x24\x00\x5c\xdf\x31\x39\x88\x34\xb4\x79\x12\x5f\xb3\xce\xd7\ +\x0d\xe8\x6e\x5f\xf8\xa7\xb0\x23\x98\x3f\x95\x2d\xf2\x99\x21\x72\ +\x40\xc9\x25\x89\x27\x60\x7f\xbd\x6c\x39\x94\x98\xd8\x0d\x59\x7c\ +\xcb\xae\xc4\x57\x40\xc9\x32\xe7\x42\x01\xf8\x94\x9d\xa8\xe2\x17\ +\x97\x2f\x33\x70\x79\xf6\xac\xf8\x96\x21\x23\xac\x8c\xde\x51\xe5\ +\xcb\x45\xaa\x34\x02\x1b\x92\x74\x27\xb7\x2a\x25\x5b\x54\x61\x03\ +\x8c\x22\x67\x37\x27\x51\x7e\x42\x9a\x10\x9f\xee\x6d\x5a\xc0\x85\ +\x14\x5c\xab\x88\x23\x71\xa7\x23\xd6\xa4\x52\x9c\xbe\xaa\x38\xf4\ +\x5b\x03\xcc\xdf\xeb\x41\x6d\x6b\xae\x43\x79\x4d\x89\x3a\x8a\x90\ +\xa6\xb6\x9d\x4d\x1c\x79\x64\x87\x2b\x72\xe6\x39\x1e\xb5\x20\x8e\ +\x82\xb8\x1c\xa4\xe5\x1a\x1d\xc5\x69\x25\x24\x61\x27\x85\x3d\xae\ +\x7d\x2f\xc9\xa8\xd9\x4d\xed\x6f\x95\x2d\x99\x5d\x32\xb4\x64\xaf\ +\x7d\xc5\x04\x73\x98\xdf\xc2\x98\x92\xa7\xd0\xc7\x97\x6a\x90\x78\ +\x9a\x5f\x0c\xad\x6f\x4b\x6b\x58\xfc\x60\x5b\x09\x0c\xd9\x6f\xe1\ +\x4b\xa9\xe8\x37\xfd\x6b\x73\x1a\xc8\x20\x78\xdd\xd4\x31\x17\x00\ +\x9e\x95\x95\x8c\x48\xdf\x01\x34\x66\x45\x37\x00\x8b\x1e\x63\x6f\ +\xd6\xb1\xce\x18\xff\xd9\ +\x00\x00\x2a\x0f\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x64\x00\x00\x00\x64\x08\x06\x00\x00\x00\x70\xe2\x95\x54\ +\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ +\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\ +\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0e\xc4\x00\x00\x0e\xc4\x01\ +\x95\x2b\x0e\x1b\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x03\ +\x0e\x1c\x2b\xec\xa5\xbb\x6e\x00\x00\x20\x00\x49\x44\x41\x54\x78\ +\xda\xed\x9d\x79\x94\x5d\x55\x9d\xef\x3f\xfb\x0c\x77\xae\x39\x35\ +\xa5\x06\x2a\x21\x21\x09\x14\x15\x84\x88\xd1\x00\x09\x08\xad\x08\ +\x1d\x5b\xec\x36\x60\x0b\x48\xd3\xf0\x1c\x68\xc4\xf5\xda\xd5\x4f\ +\x78\x48\x83\xda\x93\xad\x48\xab\x4b\xb4\x15\x51\x40\x9f\xd8\x34\ +\xad\x08\xd8\x0e\xc8\x20\x24\x81\x8c\x18\x92\x9a\x92\xaa\x54\xaa\ +\xea\xd6\x70\xab\xea\xce\xc3\x99\xf6\xfb\xe3\xd6\x3e\xb9\xc9\x13\ +\x03\x61\xce\xcb\x5e\x2b\x8b\x5b\xdc\xe1\x9c\xbb\xbf\xfb\x37\x7d\ +\x7f\xc3\x85\xe3\xeb\xf8\x3a\xbe\x8e\xaf\xe3\xeb\xf8\x3a\xbe\x8e\ +\xaf\xe3\xeb\xf8\x3a\xe6\x97\x78\x33\xdd\x4c\x75\x75\x75\x57\x26\ +\x93\x31\xa5\x94\x5e\x5d\x5d\xdd\xfb\xd6\xac\x59\xf3\x39\xd3\x34\ +\x5d\xd7\x75\xe5\xfe\xfd\xfb\x5b\x56\xac\x58\x81\xe7\x79\x24\x93\ +\x49\x5a\x5b\x5b\x29\x95\x4a\x68\x9a\xc6\xae\x5d\xbb\xb0\x6d\xbb\ +\xfc\x85\x84\x40\xd3\xb4\x83\x5f\x50\x08\x0b\x70\xd5\x63\xc3\x30\ +\xfa\x00\x0d\x20\x1e\x8f\x7f\x30\x1e\x8f\x8f\xa8\xd7\xb6\xb6\xb6\ +\x12\x8f\xc7\xdf\xd0\x3d\x30\xde\xc8\x8b\xb7\xb5\xb5\x2d\x9d\x9b\ +\x9b\x7b\xa7\x94\xd2\x03\x58\xbe\x7c\xf9\xb7\xdb\xdb\xdb\xc3\x52\ +\x4a\x86\xf6\x0d\x11\x0c\x06\xa5\xa6\x69\xc2\x95\x2e\x86\x61\xe0\ +\x38\x0e\x48\xc9\x44\x3e\x41\x87\xd1\x41\x26\x93\x01\x5d\x90\x76\ +\xf2\x9c\xbd\xea\x9d\x00\x4c\x27\xa6\xd1\x84\x86\xae\xeb\x00\xe8\ +\xba\x1e\x90\x12\x44\xf9\xe8\x85\x81\x33\xd5\xf5\x1b\x1b\x1b\x77\ +\xae\x5c\xb9\xd2\x11\x42\xb0\x67\xcf\x1e\x86\x87\x87\x1b\xdf\xe8\ +\x43\xf9\xba\x03\x52\x55\x55\x65\x66\x32\x19\x1d\x60\x76\x76\xf6\ +\xba\x8f\x7e\xf4\xa3\xd7\xab\xe7\xfa\xfb\xfb\xcb\x27\x5c\x08\xf2\ +\x94\xb0\x4a\x96\x10\x9a\x20\xe7\x14\xf0\x3c\x0f\xcb\xb2\xc0\x83\ +\x9c\x5b\xc4\xb2\x2c\x2c\xcb\xc2\xd6\x5d\x1c\xd7\x26\x9d\x4e\x03\ +\x70\x60\x7a\x9c\xd3\x4e\xea\xa6\x58\x2a\xa1\xeb\x3a\x3b\x76\x3f\ +\x4f\x55\x93\xc0\x9b\x0b\x21\x84\x00\x49\xf9\x9f\x00\x04\xb5\xea\ +\xda\xd1\x68\x94\xee\xee\xee\x3e\x40\xb8\xae\x6b\xee\xd9\xb3\x67\ +\xd1\xff\x17\x80\xb4\xb5\xb5\x3d\xb8\x78\xf1\xe2\x8b\xa4\x94\xf4\ +\xf7\xf7\x33\x33\x33\x53\x3e\xf9\x40\xc9\x2e\x6f\xb2\x00\x8a\x9e\ +\x85\xed\xd8\x08\x21\x70\x1c\x07\x29\x25\x96\x65\x21\x3d\x89\x94\ +\x1e\xb6\x6d\x63\x59\x16\x8e\x21\x91\xe0\x7f\x86\xf4\x3c\x6c\xdb\ +\xc1\xb6\x6d\xa4\xe7\x11\xa9\x8a\xb2\xb8\x61\x31\x62\x81\x20\x91\ +\x99\xc3\x3a\x69\x94\x05\x75\x61\x9c\xb1\x28\xf6\x58\x08\xe1\xea\ +\x95\x8a\xfb\x24\x29\x25\x52\x4a\x92\xc9\xe4\xba\x0a\xb5\x3e\x1a\ +\x8f\xc7\x07\x8e\x19\x40\x1a\x1b\x1b\x3f\x58\x28\x14\x22\x80\x15\ +\x0c\x06\x97\xc7\x62\x31\xa4\x94\x98\x01\xd3\xdf\x58\x00\xc7\x73\ +\x28\x95\x4a\xfe\xc6\x5a\x96\x55\x06\x42\x5a\x78\x9e\x57\x7e\xce\ +\x03\x29\x25\xa5\x52\xa9\x0c\x88\xe7\x95\x01\x2c\x16\x01\x70\x1d\ +\xd7\xff\x4c\x57\xd3\x91\xea\x7d\x40\x7f\x6f\x1f\xe7\x37\x9e\x47\ +\x6e\x34\x87\x29\xa0\x14\x4d\xb3\xa0\x43\xc3\x89\x87\x90\x39\x13\ +\x74\x09\x9a\x44\x68\xc8\xb3\xce\x3a\xeb\xb7\x00\xa6\x69\xf2\xe8\ +\xa3\x8f\xde\x09\x7c\xfc\x98\x01\x64\xc1\x82\x05\xf7\xbf\xed\x6d\ +\x6f\xd3\x34\x4d\x63\xef\xde\xbd\x94\x4a\xa5\xf2\xa6\xba\x36\xb6\ +\x65\x57\x80\x50\xde\x68\x81\x40\x4a\xcf\x07\xca\x96\xb6\x2f\x21\ +\x78\x12\xcf\x93\x07\x37\x7d\xfe\x44\xab\xd7\xba\x5e\x59\x7a\x4a\ +\xa5\x12\xba\xa6\xfb\xcf\x09\x21\x90\x9e\x87\x87\x87\x2b\x5d\x12\ +\xb3\x33\x88\x25\x33\xa4\xa4\x09\x0b\x25\xd2\x16\x38\xc9\x00\x6e\ +\xca\xc0\x4b\x1b\xa2\x6c\xd5\xc0\x30\x0c\xea\xea\xea\x4e\x6f\x6b\ +\x6b\xbb\x45\x08\xc1\xec\xec\xec\xf3\x63\x63\x63\x0f\xbe\xe5\x00\ +\xe9\xe8\xe8\x38\xa3\xa6\xa6\x86\x52\xa9\x84\xe7\x79\x5e\xa1\x50\ +\xd0\x74\x5d\xc7\x75\xdd\x83\x00\x48\x0f\xcb\xb6\x7c\x0f\x49\xd9\ +\x09\x21\x04\x9e\x47\x59\xed\x48\x89\x8d\x8d\x37\xbf\xd1\xd2\xf5\ +\x90\x42\xfa\x9b\xee\x49\x81\x40\x1c\x04\xc4\x3d\x28\x21\xba\xa6\ +\xf9\xd2\x24\x84\xf0\xc1\xb1\x6d\x9b\x03\xc3\x23\x9c\xbb\xe8\x5c\ +\x64\x52\xe2\x49\x49\x36\x92\xa2\x61\xa9\x8e\x37\x17\x42\xda\x02\ +\x69\x69\x48\xab\xec\xad\x75\x76\x76\x9e\x09\x9c\x69\x18\x06\x3b\ +\x76\xec\xb8\xa7\x12\x90\x57\xdb\x33\x7b\xad\x00\x09\x34\x37\x37\ +\x6f\xe9\xe9\xe9\xc1\x71\x1c\x36\x6f\xde\x8c\x6d\xdb\xb8\xae\x7b\ +\x50\xf5\xcc\x03\x60\x5b\x07\x55\x96\xe7\x79\x58\xae\x5b\x36\xbe\ +\xa0\xc0\xc4\x16\x0e\x42\x42\x3a\x9d\x2e\x4b\x51\xb0\x44\xb1\x58\ +\x24\x9f\xcf\x23\x1d\x81\x44\x56\x7c\xc6\x41\x40\x34\xa1\xe1\x79\ +\x15\x12\x32\x0f\x88\xfa\xdc\x54\x2a\x85\xe7\x79\x4c\xa7\x66\xd1\ +\x16\x4d\x32\x33\x72\x58\x14\x60\x78\xd8\x89\x00\xd6\x81\x30\x42\ +\x2b\xbb\xd4\xb3\xb3\xb3\x2b\x5b\x5b\x5b\x6f\x06\x74\xe0\xe1\x78\ +\x3c\xfe\xdc\x9b\x56\x42\xda\xda\xda\x9a\xc7\xc6\xc6\x6a\x80\xa0\ +\xfa\xc2\xae\xeb\xfa\x1b\xa1\x69\x1a\xae\xeb\xfa\x9b\x27\x3d\x89\ +\xed\x1c\x04\xc4\xc5\x23\x9b\xca\xa0\x09\x0d\xdb\xb3\xc8\xd8\x19\ +\x1c\xc7\xc1\xd1\x3d\x62\x66\xc4\x57\x59\x8e\x61\x93\xcd\x66\xc9\ +\xe5\x72\x48\x47\xe0\x78\x2e\x73\x73\x73\x00\xe4\xbd\x22\xb6\x6d\ +\x51\x28\x14\xd0\x84\x40\x9a\x07\xc1\x92\xe0\x7b\x67\xbe\xd7\x06\ +\xe4\xe6\xd2\x2c\x6b\x3c\xcd\xb7\xe1\xe3\xc1\x71\x16\xad\x08\xe2\ +\x4c\x86\x71\x73\x41\x64\xa7\x31\x6f\x5b\x24\x8b\x16\x2d\xea\x01\ +\x7a\x34\x4d\x63\xfb\xf6\xed\x89\x37\x35\x20\x85\x42\xe1\x9e\x4b\ +\x2f\xbd\xf4\x82\x5c\x2e\xc7\xe8\xe8\x28\xb6\x6d\xfb\x1e\x92\x0a\ +\xe2\x2a\x37\xc2\x93\x92\x5c\x2e\x47\x2e\x97\x2b\x8b\x55\x38\xe8\ +\x9f\x66\x57\x73\x31\x4c\x1d\xcf\xf3\x30\xe4\xc1\x80\xaf\x50\x2a\ +\x10\x4c\x6b\x18\x55\xe5\x5b\x17\x36\xe8\x9e\x40\x33\xca\xea\x45\ +\x77\x05\x99\x4c\x96\x74\x3a\x8d\x40\x10\xaa\x8f\x50\xb4\x8b\xf3\ +\x12\xe2\xf9\xce\x80\xef\xb5\xc9\xb2\xfa\x2b\x96\xca\xaf\xd9\x9f\ +\x9d\xa2\xed\xe2\x14\xd4\x07\x30\x3a\x25\x86\x06\x5e\x51\xc3\x4d\ +\x1a\x38\x33\x01\x32\xcf\x55\x81\x26\xd1\x34\x8d\x7c\x3e\x1f\x01\ +\x6a\xe7\xf7\x31\xf1\xa6\x03\xc4\xf3\x3c\x2d\x18\x0c\x52\x28\x14\ +\x7c\xd5\xe4\x38\xce\x61\xb6\xc1\xa3\x50\x28\xcc\x3f\x76\xfd\x13\ +\x0b\x10\x8c\x84\xd0\xe6\xf5\x7e\x20\xaf\x21\xea\x34\xce\x3d\xf7\ +\x5c\x66\x67\x67\xe9\xeb\xeb\xe3\x82\x0b\x2e\xe0\xf2\xcb\x2f\xe7\ +\xce\x3b\xef\x64\x70\x70\x90\xcb\x2f\xbf\x9c\x58\x2c\xc6\x9d\x77\ +\xde\x89\xa6\x69\x74\x76\x76\x72\xe0\xc0\x01\x74\x43\xc7\x30\x0c\ +\x04\xe0\x14\x6c\x72\xb9\x4c\x59\x3a\x1d\xd7\x57\x91\xea\x9e\x3c\ +\xcf\xf3\xed\x13\x80\x91\xb4\xf1\x1e\x5d\x44\x42\x96\x25\xca\xd3\ +\x9d\xb2\x2d\xb2\x34\x04\x02\xdd\xf4\x7c\x37\xb9\xa7\xa7\xe7\x9f\ +\x4f\x3d\xf5\xd4\x7f\x2e\x95\x4a\xfc\xea\x57\xbf\x12\x6f\x0a\x40\ +\x9a\x9b\x9b\x9b\x84\x10\x0f\x01\x05\xcb\xb2\x7a\xd4\x06\x2b\xa9\ +\xa8\x54\x59\x2a\xa6\xc8\x66\xb3\x68\x9a\x86\x65\x59\x18\xba\x81\ +\x61\x94\x6f\x43\x93\x82\xf7\xbc\xe7\x3d\xdc\x74\xd3\x4d\x5c\x7b\ +\xed\xb5\x9c\x7b\xee\xb9\xbc\xfd\xed\x6f\xa7\xbb\xbb\x9b\x75\xeb\ +\xd6\x71\xcb\x2d\xb7\xf0\xfc\xf3\xcf\x73\xe5\x95\x57\xf2\x9d\xef\ +\x7c\x87\x77\xbc\xe3\x1d\x5c\x70\xc1\x05\xdc\x7f\xff\xfd\xdc\x78\ +\xe3\x8d\x74\x76\x76\xf2\xcc\x33\xcf\x70\xcf\x3d\xf7\x50\x53\x53\ +\x43\x34\x1a\x65\x7a\x7a\x1a\xd7\x30\xd0\x34\x0d\xcd\x12\x64\xb2\ +\x19\xb2\xd9\xac\xaf\x3a\x3d\xcf\xf3\x1f\x3b\x8e\x43\x38\x12\x26\ +\x18\x31\xd1\x34\x8d\x67\x8b\x7b\x78\xef\x35\x31\x04\xe5\x80\xd2\ +\x4a\x98\x38\x13\x61\xac\x91\x10\xee\x6c\x60\xde\x31\x91\x04\x83\ +\xc1\x37\x8f\xca\x9a\x9c\x9c\x5c\xf4\xfe\xf7\xbf\xff\xcc\x58\x2c\ +\xc6\xe6\xcd\x9b\x29\x16\x8b\xb2\x54\x2a\x09\x05\x82\xeb\xba\x38\ +\x8e\xc3\xdc\xdc\x1c\x42\x08\x74\x7d\xfe\xf4\x0a\x81\xe6\x69\x48\ +\x24\x77\xdd\x75\x17\x89\x44\x82\x5b\x6f\xbd\x95\xab\xae\xba\x8a\ +\xbe\xbe\x3e\xce\x39\xe7\x1c\x76\xec\xd8\xc1\x65\x97\x5d\x86\xe7\ +\x95\x7d\xd0\x6f\x7d\xeb\x5b\xdc\x70\xc3\x0d\x7c\xe1\x0b\x5f\x20\ +\x91\x48\xd0\xd3\xd3\x43\xb1\x58\x64\x66\x66\x86\x93\x4f\x3e\x99\ +\xde\xde\x5e\x3a\x3b\x3b\x59\xbc\x78\x31\x9f\xfa\xd4\xa7\x58\xb5\ +\x6a\x15\x67\x9f\x7d\x36\xae\xeb\xf2\x9e\xf7\xbc\x87\x87\x1e\x7a\ +\x88\x52\xa9\x74\xd0\x59\x38\xcc\xd1\x70\xe7\x1d\x0a\xdb\xb6\x49\ +\x26\x93\x94\x92\x73\xec\xb8\x37\x87\xe7\x49\x14\xfd\x22\xca\x11\ +\x3e\xd6\x8c\x81\x35\x11\xf0\xf9\xb3\xea\xea\xea\xaf\x4b\x29\x09\ +\x87\xc3\xcf\x4d\x4d\x4d\x7d\xff\x75\x05\xa4\xb9\xb9\x99\xc9\xc9\ +\x49\xf5\x67\xde\xb6\xed\xca\x53\x27\xd4\xc9\x53\x5f\x58\x79\x50\ +\x0a\x90\xaa\xaa\x2a\x2e\xbd\xf4\x52\x7e\xfc\xe3\x1f\xf3\xde\xf7\ +\xbe\x17\x21\x04\x17\x5d\x74\x11\xdf\xf8\xc6\x37\x78\xf0\xc1\x07\ +\xf9\xc8\x47\x3e\xc2\xf6\xed\xdb\xe9\xef\xef\xe7\xea\xab\xaf\xa6\ +\x58\x2c\xa2\x69\x1a\x0f\x3e\xf8\x20\x3f\xfc\xe1\x0f\xf1\x3c\x8f\ +\x45\x8b\x16\x71\xf1\xc5\x17\x63\x9a\xe5\xd3\x7c\xc5\x15\x57\x70\ +\xd9\x65\x97\xf1\xe8\xa3\x8f\xb2\x60\xc1\x02\xaa\xaa\xaa\x08\x85\ +\x42\xe4\x72\x39\xee\xbd\xf7\x5e\x22\x91\x08\x23\x23\x23\xec\xdf\ +\xbf\xdf\x77\xa7\x93\xc9\x24\x8e\xe3\xf8\xae\xb2\xeb\xba\x68\x9a\ +\x46\xa9\x54\xe2\xc0\x81\x03\xac\x3f\xff\xa2\x32\x18\x48\xa6\xf4\ +\x04\x9d\x2b\x4c\xbc\x94\x89\x9b\x31\xf1\xaa\x4d\x64\x87\x86\xd0\ +\x24\x18\x52\x22\xf9\xa4\x61\x18\x6c\xdd\xba\xf5\x47\xaf\x3b\x20\ +\x93\x93\x93\x34\x36\x36\xfe\xd5\x89\x27\x9e\xf8\xdd\x7c\x3e\x8f\ +\xeb\xba\x12\x10\x95\x7e\x7e\xa5\x97\x25\x84\x40\x08\x81\xb2\x2f\ +\xb7\xdf\x7e\x3b\xd9\x6c\x96\xb5\x6b\xd7\xf2\xf4\xd3\x4f\xb3\x7e\ +\xfd\x7a\xf6\xec\xd9\x83\xe3\x38\x3c\xf6\xd8\x63\x3c\xfa\xe8\xa3\ +\xe4\xf3\x79\x5a\x5a\x5a\xfc\xd3\x5c\x28\x14\x58\xb0\x60\x01\xa1\ +\x50\x88\x42\xa1\x40\x2a\x95\x22\x1a\x8d\xfa\x6a\x23\x10\x08\xf0\ +\xc0\x03\x0f\x30\x37\x37\x47\xa9\x54\x92\x37\xdd\x74\x93\x08\x04\ +\x02\x65\x6f\x4b\xd3\x48\xa5\x52\xe8\xba\xce\xc2\x85\x0b\xf9\xb7\ +\x7f\xfb\x37\x3e\xf3\x99\xcf\x90\x4c\x26\xfd\xf7\x2b\x69\x0e\x04\ +\x02\xbe\xb4\xcc\xcc\xce\x20\xa5\x24\xe7\x96\x08\x5f\x18\x47\x76\ +\x04\xd1\x84\x86\xa6\x79\x48\xcd\xc3\xc9\xe8\xd8\xe3\x21\x52\xbf\ +\xae\x13\xe8\x12\xc3\x30\x90\x52\xda\xaf\x24\x46\x39\x6a\x95\x65\ +\x59\x56\x57\x5b\x5b\x1b\x73\x73\x73\xd8\xb6\x2d\x94\xf1\x56\x31\ +\x80\x94\xd2\x3f\x7d\xae\xeb\x72\xdd\x75\xd7\x71\xf5\xd5\x57\xb3\ +\x61\xc3\x06\x76\xed\xda\xc5\xfa\xf5\xeb\x79\xf2\xc9\x27\x71\x1c\ +\x87\xeb\xaf\x2f\xf3\x8b\x13\x13\x13\x48\x29\xfd\x6b\xec\xdb\xb7\ +\xef\x90\x6b\x1e\x38\x70\x40\x6d\xa0\xed\x38\xce\x01\x29\x25\xba\ +\xae\x5b\xf9\x7c\xfe\xf2\xb1\xb1\xb1\x29\x80\x40\x20\x70\x49\x73\ +\x73\xf3\xed\xb9\x5c\x8e\x42\xa1\x40\x2c\x16\xe3\xda\x6b\xaf\xa5\ +\xa3\xa3\x83\x6d\xdb\xb6\xf1\xdd\xef\x7e\x97\x91\x91\x11\x9a\x9a\ +\x9a\x7c\x42\xd2\x71\x1c\x92\xc9\x24\xae\xeb\xd2\xd0\xd0\x70\x30\ +\x20\x9d\x97\xfc\xfd\x07\x46\x30\xa7\x1c\x06\x83\xd0\x12\x5c\x4a\ +\x20\x28\x38\x90\x1e\x44\x22\x11\x1e\x94\xe2\x63\x88\x79\xc6\x3f\ +\x9f\xcf\xff\x49\x73\x73\xf3\x63\x9a\xa6\x69\xf1\x78\x7c\xdd\xeb\ +\x66\x43\xa4\x94\x56\xa9\x54\xc2\xb6\x6d\x3f\xbe\x80\x72\xf0\x96\ +\x4e\xa7\x31\x4d\x13\x21\x04\xa5\x52\x89\x70\x38\xcc\xdf\xfe\xed\ +\xdf\xf2\xf4\xd3\x4f\xd3\xdc\xdc\xcc\x8f\x7e\xf4\x23\x1e\x7f\xfc\ +\x71\x06\x07\x07\x0f\x01\x20\x12\x89\xfc\xe1\xa4\x8d\x10\x58\x96\ +\xb5\x4f\xd3\xb4\x21\x40\x3a\x8e\xb3\x2b\x1e\x8f\x7f\xfa\x0f\xbd\ +\x36\x12\x89\x7c\x7b\xeb\xd6\xad\xff\x09\x48\xdb\xb6\xb3\x8b\x17\ +\x2f\x1e\x6d\x68\x68\x88\x28\x09\xb9\xef\xbe\xfb\xe4\x97\xbe\xf4\ +\x25\xf1\xbd\xef\x7d\x8f\x0f\x7c\xe0\x03\x7c\xe8\x43\x1f\xe2\xf3\ +\x9f\xff\x3c\xdb\xb7\x6f\xf7\x3d\xae\x4a\xa7\x24\x91\x48\x70\xf6\ +\x9a\xb3\x70\x1c\x07\x81\x60\xd4\x1c\xe3\x84\xf3\xa0\x6d\x7a\x39\ +\x4e\x22\x84\x1d\x0f\x21\x5b\xe6\xe3\x14\x43\x02\xb4\x18\x86\xd1\ +\xb2\x71\xe3\xc6\xa3\x8a\xe0\x5f\x36\x20\x75\x75\x75\xd7\xae\x59\ +\xb3\xe6\x1f\x07\x07\x07\x43\x8e\x53\x66\x55\x75\x5d\x3f\x24\xde\ +\xb0\x2c\x8b\x40\x20\xc0\x0d\x37\xdc\xc0\x8a\x15\x2b\xb8\xe6\x9a\ +\x6b\xb8\xfe\xfa\xeb\xb9\xf0\xc2\x0b\x19\x1e\x1e\x66\x3e\x39\x44\ +\x2c\x16\x3b\x12\xe8\x2e\x20\x85\x10\x64\x32\x99\x6f\xc4\xe3\xf1\ +\xaf\x1c\xe9\xfe\xd2\xe9\x74\x1e\xf0\x93\x4e\xa3\xa3\xa3\xeb\x47\ +\x46\x46\xcc\x79\xe9\xf9\xc7\xf1\xf1\xf1\xd3\x2e\xb8\xe0\x02\x12\ +\x89\x04\xb7\xdd\x76\x1b\x13\x13\x13\x2c\x5e\xbc\x98\xe7\x9f\x7f\ +\x9e\x7c\x3e\x8f\x6d\xdb\x14\x0a\x05\xd4\x77\x73\x5d\x97\x42\xa1\ +\x50\xfe\x4e\xc2\xa0\xd0\x33\x81\xb6\xa0\x16\xad\x36\x47\xf4\x14\ +\x0d\xa9\x49\xa4\x0d\x4e\x32\xc0\xec\xcf\xeb\xf1\x8a\x9a\x52\x5d\ +\x1c\x8d\xea\x32\x8e\x42\x55\xb5\x2d\x5c\xb8\xb0\x7e\x6c\x6c\xcc\ +\xb7\x17\x95\x34\x87\x4a\x0c\x01\xac\x5f\xbf\x9e\xbe\xbe\x3e\x4c\ +\xd3\x64\xf3\xe6\xcd\x3c\xf5\xd4\x53\x04\x83\x41\x82\xc1\xa0\x4f\ +\x8f\x1c\x8e\x81\xb2\x45\x55\x55\x55\x6c\xd9\xb2\xa5\x3d\x99\x4c\ +\x4e\xbc\x12\x9d\x9c\xc9\x64\x7e\xa3\x1e\x87\xc3\xe1\x4b\x0e\x1c\ +\x38\x60\x00\x9e\xeb\xba\x27\xde\x70\xc3\x0d\xd1\xaf\x7c\xe5\x2b\ +\xf4\xf6\xf6\xd2\xd1\xd1\xc1\x9d\x77\xde\xc9\xfa\xf5\xeb\x29\x14\ +\x0a\xbe\x5d\x71\x1c\x07\xc7\x71\x98\x9d\x9d\xc5\x2e\x59\x94\x4a\ +\x3a\x2f\xf4\xe7\x79\xfb\xc2\x0b\x89\x85\xa3\x3c\xbe\xef\x3f\x08\ +\xe9\xd5\xd8\x64\xc9\x1f\xb0\x91\x0e\x68\x9a\x86\x69\x9a\xf4\xf4\ +\xf4\xdc\x9d\x4c\x26\x37\x8d\x8c\x8c\xdc\xf9\x9a\x49\x88\x52\x43\ +\x95\xbe\xbb\xd2\xc1\xb6\x6d\xb3\x70\xe1\x42\xee\xb9\xe7\x1e\x3e\ +\xfc\xe1\x0f\xf3\xaf\xff\xfa\xaf\xfc\xdd\xdf\xfd\x1d\xc1\x60\xb0\ +\xcc\x3b\xcd\x4b\x90\xe7\x79\xa8\xbc\x83\x52\x13\xf3\xf6\x40\xa4\ +\x52\xa9\x87\x80\x84\xae\xeb\xe9\x70\x38\x6c\x2b\xc3\xab\xa4\xea\ +\x95\xac\x44\x22\x71\x6d\x22\x51\x0e\xa8\xeb\xeb\xeb\x9f\x8c\xc5\ +\x62\x67\xdf\x7c\xf3\xcd\x8c\x8f\x8f\x73\xfb\xed\xb7\xb3\x73\xe7\ +\x4e\x02\x81\x80\x4f\x5c\x56\x7e\xbf\xe9\xe9\x69\xba\xbb\xbb\xcb\ +\x81\xab\x2b\x79\x7c\xfc\x71\xba\xcf\x09\xd2\xae\xb5\xe2\x4e\x84\ +\xf0\x52\x0b\xa1\xed\x10\x72\x15\x5d\xd7\xaf\xec\xef\xef\xd7\x5f\ +\x2b\x40\x42\xef\x7b\xdf\xfb\xf6\x1e\x38\x70\xa0\x5a\x89\xb2\xa2\ +\x46\x94\xeb\x29\xa5\xe4\xd3\x9f\xfe\x34\x4f\x3d\xf5\x14\xf3\x5c\ +\x0f\x1f\xfc\xe0\x07\xa9\xa9\xa9\x79\x49\x17\x30\x4d\x93\x2d\x5b\ +\xb6\x7c\x3e\x93\xc9\xbc\xaa\xfc\xd0\x8b\x48\xfa\x8d\x03\x03\x03\ +\xf5\x9a\xa6\x59\x52\xca\xff\xf5\x4f\xff\xf4\x4f\x6b\x6f\xba\xe9\ +\x26\x2c\xcb\x62\xdd\xba\x75\xec\xdb\xb7\x8f\xb1\xb1\x31\x5f\x8d\ +\x39\x8e\xe3\xb3\xc6\x39\xaf\x44\xdb\x7b\x4a\x84\xdb\xa1\xd0\x3c\ +\x8b\x01\x04\xb5\x08\x6e\x09\x28\x98\x4c\xfd\xa4\x11\x61\x78\x18\ +\x86\xe1\xc7\x50\xaf\x05\x20\xf5\xd5\xd5\xd5\x0b\x75\x5d\xf7\x25\ +\xa4\x50\x28\x50\x2c\x16\x09\x04\x02\x84\xc3\x61\x34\x4d\xe3\x27\ +\x3f\xf9\x09\x57\x5c\x71\x05\xb5\xb5\xb5\x14\x8b\x45\xdf\x5b\x39\ +\x5c\x1a\xd4\xdf\xba\xae\x93\x4e\xa7\x77\x1a\x86\xf1\xb8\xeb\xba\ +\x4e\x24\x12\x89\x67\x32\x99\xd7\x14\x0c\x4d\xd3\xc8\x66\xb3\xbf\ +\xcb\x66\xb3\xea\x34\x5f\x61\x18\x06\xb7\xdc\x72\x0b\x86\x61\xc8\ +\xbb\xee\xba\x4b\xac\x5e\xbd\xda\x7f\xbd\x72\xe3\x95\x26\xc8\x14\ +\x73\x44\xb6\xe7\x98\xfa\x7d\x9a\xcb\xcf\xf8\x5b\x5c\xbd\xc0\x43\ +\xbd\xdf\xa6\x29\xdc\xc5\x44\x66\x88\xb9\xb1\x22\xc2\x28\x5f\x67\ +\x66\x66\x66\x51\x34\x1a\xfd\xcb\x5c\x2e\x77\xdf\xab\x02\x48\x85\ +\xde\x76\x95\xaf\xae\x44\xd9\xb2\x2c\xf2\xf9\x3c\xed\xed\xed\x3c\ +\xf4\xd0\x43\xbc\xff\xfd\xef\x67\xdf\xbe\x7d\x5c\x77\xdd\x75\x04\ +\x02\x01\x34\x4d\xfb\x43\x55\x20\x87\x7c\x7e\x38\x1c\x26\x1e\x8f\ +\x3f\x35\x33\x33\x73\xc3\xeb\x95\x46\x3e\xfc\xd4\xa6\xd3\xe9\xcd\ +\x3b\x76\xec\x08\x7a\x9e\xa7\xb7\xb4\xb4\xbc\xff\xe9\xa7\x9f\x46\ +\xd7\x75\x84\x10\x84\xc3\xe1\x43\x54\x97\x69\x9a\x9c\x7d\xda\x1a\ +\xa4\x07\xae\x74\xd9\xd6\xbb\x11\xd3\xd0\x59\xea\x9c\x83\x3b\x23\ +\x58\x6a\x2f\x86\xd5\xaa\x9e\x47\x02\xac\x29\x14\x0a\x6b\xee\xbe\ +\xfb\xee\x57\x07\x90\x78\x3c\x4e\x6b\x6b\xeb\x59\xb6\x6d\x7f\x40\ +\xc5\x15\x2a\x12\x37\x8c\x32\x0f\x55\x53\x53\xc3\xe6\xcd\x9b\x31\ +\x4d\x93\x9d\x3b\x77\x1e\x02\xc0\x4b\x4a\x9e\x04\x02\x6f\x68\x39\ +\x52\x2a\x95\xba\x03\xb8\x03\x08\x2c\x5e\xbc\xb8\xf4\x37\x7f\xf3\ +\x37\x4c\x4e\x4e\xb2\x61\xc3\x06\xba\xba\xba\xf8\xee\x77\xbf\x4b\ +\xb1\x58\x2c\xb3\xc2\xc5\x22\xf1\x78\x1c\x21\x04\x1b\x53\xbd\xfc\ +\xd9\xa7\xab\xf1\x5c\xf0\x7c\xb0\xc1\x1a\x0b\x52\xe8\x8d\x61\x8d\ +\x05\x01\xf9\x62\x0e\xcc\xd1\xab\xac\x50\x28\xf4\xd7\x67\x9e\x79\ +\xe6\x95\x96\x65\x49\xd7\x75\x85\xba\x39\xcf\xf3\x38\xef\xbc\xf3\ +\xd8\xbd\x7b\x37\xdf\xf8\xc6\x37\xe8\xea\xea\xf2\x6d\x8b\x0a\xb8\ +\x0c\xc3\xf0\xa3\x60\x29\xcb\xd1\xac\xa2\x42\xb6\x6d\xdb\x16\x01\ +\x0a\xbc\x79\x96\x4c\x24\x12\x39\xd3\x34\xa5\x6d\xdb\xe1\x0d\x1b\ +\x36\xe8\x3f\xf8\xc1\x0f\x7c\x49\xaf\xe4\xe6\x00\x2c\xcd\x25\x54\ +\x25\x88\x26\x4f\xe7\x86\x0b\x3f\xcb\x23\x83\xdf\x61\x60\x6c\x90\ +\xd2\xa9\x93\x4c\xe4\x0b\xe4\x86\x34\x10\xf2\x65\x1d\xd0\x97\x04\ +\x5d\x57\x57\xd7\x7d\x2b\x56\xac\xf8\xb0\x6d\xdb\xec\xdf\xbf\x9f\ +\x68\x34\x4a\x3c\x1e\xe7\x93\x9f\xfc\x24\x1d\x1d\x1d\xfc\xcb\xbf\ +\xfc\x0b\xe1\x70\xd8\x57\x49\xca\xc0\x7b\x9e\x57\x66\x59\xe7\xf3\ +\x20\x95\x2e\x71\x3e\x9f\x67\xef\xde\xbd\xe1\x7c\x3e\x5f\xe4\x4d\ +\xb8\xea\xea\xea\x1e\x3b\xe5\x94\x53\xce\x5d\xbe\x7c\x39\x5b\xb7\ +\x6e\x65\x7a\x7a\x9a\xd6\xd6\x56\xa4\x94\x64\x32\x19\x16\x2d\x5a\ +\x84\x8e\x86\x53\x82\xa2\x57\xc4\xa5\x84\x69\x47\xd0\x8d\x79\x35\ +\x6d\x82\x30\xfc\x78\x4a\x9a\xa6\x29\xb6\x6f\xdf\xbe\x7a\x6c\x6c\ +\x6c\xf3\x2b\xb5\x21\x31\xcf\xf3\xaa\xd4\xe9\x70\x5d\xd7\x67\x6b\ +\xe3\xf1\x38\xe7\x9c\x73\x0e\x37\xdd\x74\x13\xdb\xb6\x6d\x23\x97\ +\xcb\x31\x37\x37\x47\x2a\x95\x22\x10\x08\xd0\xda\xda\xca\xd8\xd8\ +\x18\x63\x63\x63\xac\x58\xb1\x82\x6d\xdb\xb6\x51\x2c\x16\x7f\x35\ +\x3e\x3e\x7e\x6b\x2c\x16\x4b\xd7\xd7\xd7\x97\xf2\xf9\xfc\x9b\x11\ +\x0f\x84\x10\x01\xdb\xb6\x79\xe2\x89\x27\xe8\xee\xee\x96\x97\x5c\ +\x72\x89\xb8\xeb\xae\xbb\xa8\xad\xad\xc5\xf3\x3c\x9f\x47\x1b\xd5\ +\x67\x68\xff\x8b\x59\x16\x34\x06\x70\xf2\x56\x39\xcb\x38\x15\xc2\ +\x9a\x08\x22\x0b\x3a\x5e\x5e\x07\x10\xd1\x68\x14\xc3\x30\x9c\x57\ +\xac\xb2\xea\xeb\xeb\x6f\x6f\x6c\x6c\xfc\x53\xe5\xea\x2a\x40\xba\ +\xba\xba\x78\xf6\xd9\x67\xd9\xb4\x69\xd3\x8b\xbe\x77\x74\x74\xd4\ +\x97\x9a\xde\xde\x5e\x62\xb1\x18\x81\x40\x60\x72\xff\xfe\xfd\x4f\ +\xcf\xcd\xcd\xf9\x69\xd7\x37\xe3\x72\x1c\xe7\xf3\x03\x03\x03\xcd\ +\xb6\x6d\xaf\x59\xb3\x66\xcd\xb5\x43\x43\x43\x18\x86\x71\x48\x7e\ +\x07\x20\x65\xe5\x38\xb3\x39\x4a\x21\x2f\x79\xd7\x09\xef\xa3\xaf\ +\x6a\x33\xe9\x8e\x19\x40\x50\x18\x36\x99\xf9\x45\x0d\xe8\x65\xf2\ +\xf3\x55\xb1\x21\xae\xeb\x46\x94\xfb\xaa\x0a\x0b\xde\xfd\xee\x77\ +\x33\x3a\x3a\xca\x63\x8f\x3d\x46\x38\x1c\xf6\xcb\x3c\x15\xbd\xae\ +\x0c\x7e\x85\x6b\x5b\x2e\x09\x75\x5d\xd2\xe9\x74\x94\x37\xf9\xaa\ +\xae\xae\x26\x9d\x4e\xff\xf7\x3c\x37\xe6\x0e\x0d\x0d\x5d\x9b\x4c\ +\x26\x51\x55\x33\x9e\xe7\xd1\xdf\xdf\x4f\x55\x55\x15\x86\x67\xb3\ +\xed\x6b\x36\x94\xa2\xcc\xd5\xed\x44\x0a\x93\x78\xca\x21\x60\xea\ +\x14\x0b\x19\x9c\x54\x39\x3d\x3d\x35\x35\x45\x2c\x16\xfb\x61\x53\ +\x53\xd3\x0d\x53\x53\x53\x8f\x1e\x35\x20\x52\x4a\x57\x49\x86\xb2\ +\x07\x13\x13\x13\xdc\x78\xe3\x8d\x7c\xf5\xab\x5f\xe5\xf6\xdb\x6f\ +\x67\x78\x78\x98\x93\x4f\x3e\x99\x99\x99\x19\xe2\xf1\x38\x35\x35\ +\x35\x3c\xff\xfc\xf3\x68\x9a\xc6\x49\x27\x9d\xc4\x96\x2d\x5b\xc4\ +\xe8\xe8\xe8\x13\xd3\xd3\xd3\xeb\x00\x16\x2e\x5c\xc8\xf8\xf8\xf8\ +\x9b\x16\x10\xc5\x02\xcf\x4b\xb7\xa9\xb2\x9c\xab\x56\xad\x92\xa3\ +\xa3\xa3\x22\x99\x4c\xd2\xd0\xd0\xc0\xc9\x27\x9f\x5c\x26\x23\x3d\ +\x1b\x4e\x9a\xa1\xa6\xae\x80\x97\x0e\x50\x93\x5a\x84\x97\x36\x71\ +\x53\x06\xb4\x80\xd0\xa5\x22\x3e\x4f\xba\xf7\xde\x7b\x1b\x8e\x5a\ +\x42\x9a\x9a\x9a\x16\xbb\xae\xfb\x6e\xe5\x39\x05\x02\x01\x02\x81\ +\x00\x43\x43\x43\x6c\xd8\xb0\xc1\xf7\x9a\x00\x7e\xff\xfb\xdf\xfb\ +\x39\xf3\xca\x78\x63\xd3\xa6\x4d\x84\x42\x21\xff\x75\xc0\x9b\x1a\ +\x8c\x3f\x10\x44\x3e\xba\x65\xcb\x96\xb5\x81\x40\xe0\xea\xf3\xce\ +\x3b\xef\x8a\x1f\xfc\xe0\x07\x7e\x6a\x21\x93\xc9\x20\x3d\x8f\x31\ +\x99\xe0\x8c\xb7\x39\xd8\x8e\x4b\x55\xa8\x86\x82\x9b\x41\xe8\xe5\ +\x82\xbe\xfc\xae\x18\xe9\x67\x6a\x40\x1c\x74\x72\xfe\xe8\xf5\x8e\ +\x40\xcc\xad\x89\x44\x22\x0b\x5d\xd7\x25\x99\x4c\x22\xa5\xe4\xfa\ +\xeb\xaf\xa7\x58\x2c\x12\x0e\x87\x89\x44\x22\x3e\x48\xa1\x50\x88\ +\x60\x30\x48\x38\x1c\x26\x1c\x0e\x13\x0a\x85\x08\x85\x42\xc4\x62\ +\xb1\x43\xbc\xab\xb7\xda\xca\x64\x32\x93\xa5\x52\xe9\x49\x4d\xd3\ +\x46\xbe\xf5\xad\x6f\x1d\x22\x3d\x7e\x32\x4e\xba\x80\xc6\x62\x79\ +\x11\x9f\x59\x7d\x37\x7f\x7f\xee\x8f\x18\xde\xe3\xd2\x11\x5b\x8e\ +\x08\x96\x6b\xcf\x14\x7b\x7c\xa4\x98\xe4\x8f\x3e\x1b\x0e\x87\xaf\ +\x5c\xb2\x64\xc9\xdd\x00\xc9\x64\x92\xa6\xa6\x26\x7e\xf2\x93\x9f\ +\x30\x3d\x3d\xcd\x43\x0f\x3d\xc4\xfe\xfd\xfb\x59\xb7\x6e\x1d\x8f\ +\x3c\xf2\x08\x2b\x57\xae\x24\x91\x48\x30\x38\x38\x48\x4f\x4f\x0f\ +\x8d\x8d\x8d\xfc\xf0\x87\x3f\xa4\x58\x2c\xce\xbc\xf0\xc2\x0b\x8d\ +\xcd\xcd\xcd\x81\xc9\xc9\xc9\xd2\x5b\x15\x98\x9a\x9a\x9a\x2f\xac\ +\x5e\xbd\xfa\xa6\xd1\xd1\x51\x92\xc9\x24\xa1\x50\x88\xd3\x4f\x3f\ +\x9d\x40\x20\x80\x04\x02\x86\x86\x74\x02\x38\x5e\x09\xc3\x30\x71\ +\xa4\x8d\xa6\x97\x6b\xcf\x64\x05\x31\x30\x3c\x3c\x1c\x7f\xfa\xe9\ +\xa7\x17\x1e\x95\xca\xd2\x34\x2d\xac\x54\x90\xae\xeb\x84\x42\x21\ +\x3e\xf9\xc9\x4f\xd2\xd9\xd9\xc9\x0b\x2f\xbc\x80\x94\x92\xde\xde\ +\x5e\x74\x5d\xf7\xf3\x1c\x00\x8f\x3c\xf2\x08\xae\xeb\xaa\x82\x06\ +\x09\xc8\xb7\x32\x18\xf3\x74\xcb\xcf\x9e\x79\xe6\x99\xfd\x0b\x17\ +\x2e\xbc\xbd\xbd\xbd\x3d\x3a\x3a\x3a\xea\xf3\x79\x1e\x1e\xdb\xeb\ +\xfb\x38\xeb\x2f\x22\x18\x19\x13\x37\x6d\xa0\xa7\x82\xb8\x29\x03\ +\x37\x6d\x60\x8d\x85\x10\x02\xc5\x68\x9b\x47\x6d\x43\x42\xa1\xd0\ +\xa7\x65\xd9\xaa\x8b\x25\x4b\x96\xe0\x38\x0e\xf9\x7c\x9e\x3d\x7b\ +\xf6\xf8\xd1\xab\xe2\x7c\x82\xc1\xa0\x9f\x94\x51\x65\x9b\x80\x4c\ +\xa5\x52\x36\xc7\xc0\xca\x64\x32\xcf\x02\xcf\x1a\x86\xf1\x8f\x23\ +\x23\x23\x51\x4d\xd3\x0e\x26\xe5\xa4\x43\xfd\x42\x03\xe1\xea\x2c\ +\x6a\x3c\x85\x9a\x45\x55\xbc\x30\xb5\x89\x58\xa0\x96\xbc\x3e\xc5\ +\xc8\x57\x5b\x11\x5a\x99\x50\x55\x99\xd5\xa3\x02\x44\x4a\x29\xa4\ +\x94\xa2\x54\x2a\xf1\x89\x4f\x7c\x02\xc3\x30\xb8\xe8\xa2\x8b\xf8\ +\xf2\x97\xbf\x8c\x69\x9a\x18\x86\x41\x2a\x95\x62\x64\x64\x84\xee\ +\xee\x6e\x86\x87\x87\x49\xa7\xd3\xf4\xf7\xf7\x93\xcd\x66\xc9\x64\ +\x32\x7f\x33\x30\x30\xf0\x0d\x8e\xa1\xa5\x3c\x4d\x28\xe7\xf8\xa5\ +\x94\xb8\x48\x3c\xf2\x3c\xbb\xab\xc8\xa2\x77\x76\xf1\xf0\xf3\x4f\ +\x10\xab\x8f\x12\x88\x2e\x66\xd7\xcc\x5e\x52\xa3\x36\x9a\x56\x3e\ +\xa4\x85\x42\xa1\xee\xa8\x6d\x48\x7d\x7d\x7d\x7f\x53\x53\xd3\x52\ +\xd7\x75\xa9\xab\xab\xe3\x8a\x2b\xae\xa0\xb7\xb7\xd7\x2f\x36\xf0\ +\xdb\x0a\x4a\x25\x42\xa1\x10\xa5\x52\x89\x6c\x36\x4b\x34\x1a\x25\ +\x95\x4a\x91\xcd\x66\xaf\x3b\xd6\x00\x69\x69\x69\xf9\x8c\x10\xe2\ +\xb3\x42\x88\xba\x95\x2b\x57\xfa\xb9\x9e\xa2\x67\x11\x3a\x39\x85\ +\xe1\x18\x78\xd3\x11\x9c\xc9\x30\x68\x1e\x42\x13\x2a\xd7\x8e\x94\ +\x92\xe9\xe9\x69\x1e\x7b\xec\x31\x71\xb4\x71\x88\x50\x74\xb5\xae\ +\xeb\xdc\x75\xd7\x5d\x87\x24\xa3\x2a\xdd\x5b\x15\xb9\x9a\xa6\x89\ +\x6d\xdb\x32\x16\x8b\x89\x74\x3a\xad\x1f\x4b\x60\x54\x57\x57\x33\ +\x31\x31\xf1\xa5\xd6\xd6\xd6\x6b\x81\x3a\xcf\xf3\xca\x44\xa9\xd0\ +\x78\xac\xb8\x9d\xbf\x5c\xd5\x84\x23\x6d\x2c\xb7\x44\xcc\x08\xe3\ +\x66\x74\xbc\x54\x90\xdc\xce\x18\x56\x3c\xf0\x07\xa9\xff\x97\xe5\ +\xf6\x02\xa6\x6d\xdb\x5c\x70\xc1\x05\x34\x36\x36\x72\xf5\xd5\x57\ +\xd3\xd4\xd4\x84\x69\x9a\x2c\x5e\xbc\x98\x8e\x8e\x0e\x4c\xd3\xa4\ +\xb1\xb1\x91\x64\x32\x49\x2e\x97\x43\xd7\x75\xe2\xf1\xb8\xd8\xbd\ +\x7b\xf7\x2f\x32\x99\xcc\x2f\x8f\x25\x40\x94\xcb\x2b\xe6\x4f\xa1\ +\x4a\x45\x58\x96\x85\xd0\xca\xe5\xa6\xef\x8c\xfd\x35\x5f\x5c\xf7\ +\x30\xcb\x6a\xcf\x64\x79\xc3\xd9\x44\x3b\x25\xc4\x4a\x07\x1b\x8c\ +\x5e\x89\x0d\x01\xc4\x7c\x76\x8d\x7b\xef\xbd\x97\xa1\xa1\x21\xf6\ +\xec\xd9\x83\x69\x9a\xd4\xd7\xd7\x93\xcd\x66\xd1\x75\x9d\xce\xce\ +\x4e\x6a\x6b\x6b\xd9\xbb\x77\x2f\x3d\x3d\x3d\x64\x32\x19\x0a\x85\ +\xc2\xe6\x78\x3c\xde\xcb\x31\xb8\x1c\xc7\x91\x7e\x57\x30\xa0\x21\ +\xd0\x43\x82\x7d\x7b\x93\xfc\xcb\xff\xb8\x9c\xeb\x1e\x7c\x37\x77\ +\x5f\xb6\x99\xc9\xb9\x69\x9e\x4b\xfc\x17\xdf\xfb\xd5\xbd\x58\x96\ +\xe6\x07\x94\xaf\x88\xcb\xd2\x34\x8d\x81\x81\x01\x2e\xba\xe8\x22\ +\x0a\x85\x82\xaf\x0b\x2b\xcb\x5c\xfa\xfa\xfa\xfc\xc7\x4f\x3f\xfd\ +\xf4\x21\x51\xf9\xb1\xb8\x66\x66\x66\xde\xd5\xd2\xd2\x32\xa5\x78\ +\x2d\x81\x40\x84\x05\x85\x9c\x47\x38\x74\xd0\xab\x75\x5c\x87\xc7\ +\x87\xfe\x03\xcf\x95\xbe\xbd\x7d\xa5\x12\x42\x20\x10\xa0\xbe\xbe\ +\x9e\x40\x20\xa0\xaa\x14\x09\x06\x83\x64\x32\x19\x6a\x6a\x6a\xfc\ +\xbc\xba\xca\xa9\x67\x32\x19\x2c\xcb\xb2\x81\xb1\x63\x15\x10\xd7\ +\x75\xb3\xf3\x92\x52\xa6\x43\x28\xe7\x80\x62\x31\x13\xdb\x02\xd7\ +\x9b\xef\x08\xc6\xc5\xf5\x1c\x3c\xd7\xc5\xb2\xbc\x57\x0e\x88\xe7\ +\x79\xac\x5b\xb7\x8e\x2b\xaf\xbc\x92\x33\xce\x38\x83\x87\x1f\x7e\ +\x98\xdf\xfd\xee\x77\xe4\xf3\x79\x26\x26\x26\x38\xe3\x8c\x33\x98\ +\x9c\x9c\xa4\xaf\xaf\x0f\xcf\xf3\x68\x6c\x6c\xe4\x85\x17\x5e\xc0\ +\xf3\xbc\x7d\xf1\x78\xfc\xdf\xdf\x0c\x93\x11\x5e\xab\x35\xcf\x64\ +\x4b\xcb\xb2\x84\x40\x20\x34\x9d\xa5\xcb\xea\x79\x64\xeb\xcf\xf9\ +\xcc\x39\xdf\xe2\xbf\xf6\x7c\x13\x27\x17\xe6\xbc\xc5\x1b\xe8\x75\ +\xbe\x43\xa9\xe4\x1c\xa2\x55\x8e\x5a\x42\x36\x6e\xdc\xc8\xf4\xf4\ +\x34\x35\x35\x35\x0c\x0c\x0c\xf8\x28\x4b\x29\xf9\xe9\x4f\x7f\xea\ +\x57\x92\x78\x9e\xc7\xd4\xd4\x94\x2a\xae\x16\xc0\x31\x0b\x06\x60\ +\x15\x0a\x85\xd9\x42\xa1\x50\x9f\x4c\x26\xd1\x84\x46\xbe\xd9\xa3\ +\x68\x55\xf1\x1f\x43\x7f\xcf\x27\x63\xdf\xe3\x40\xae\x9f\xe7\x27\ +\x7e\x87\x11\xd0\x98\x19\x4b\x31\x37\x57\xae\x43\x50\x99\xd5\xa3\ +\x06\xc4\x30\x0c\x46\x47\x47\x19\x1e\x1e\x46\xd7\x75\xdf\xe5\xd5\ +\x34\xcd\xff\x5b\x45\xed\x2a\x0f\x32\x39\x39\xd9\xd2\xda\xda\xfa\ +\xbe\x78\x3c\xfe\xc8\xb1\xaa\xb5\x84\x10\x96\x4a\x57\xab\x86\x1e\ +\x23\x28\xa8\x22\xc2\x1d\x8f\x5d\x4b\xb2\xcf\x63\x66\x6f\x81\x52\ +\xd2\x23\x37\xe9\x22\x34\xe1\xef\xd3\x51\x03\x12\x8d\x46\xf9\xc8\ +\x47\x3e\x42\x7f\x7f\x3f\x17\x5f\x7c\x31\x4f\x3c\xf1\x04\x43\x43\ +\x43\xd4\xd5\xd5\xe1\x38\x8e\xef\x06\x8e\x8c\x8c\x90\x4c\x26\x69\ +\x69\x69\x61\x72\x72\x92\x5c\x2e\x57\x4d\xb9\x18\xe6\x98\x03\xa4\ +\xa5\xa5\x45\x55\xe9\x4b\x75\x08\x6b\x6b\x6b\x31\x87\x8b\x3c\x71\ +\x63\x9a\x42\xc2\x2d\x77\xec\x6a\x20\xf4\xb2\x0f\x66\x98\xf8\x07\ +\xf6\x48\xf4\xfb\x1f\x05\x24\x12\x89\x30\x35\x35\xc5\xa7\x3e\xf5\ +\x29\xa4\x94\x6c\xdc\xb8\x91\xba\xba\x3a\x6a\x6b\x6b\x71\x5d\x97\ +\xd1\xd1\x51\xba\xba\xba\xfc\xc6\x97\xb6\xb6\x36\x72\xb9\x9c\x02\ +\xca\x3b\x16\x45\x63\x62\x62\x82\xf6\xf6\xf6\xef\x06\x02\x81\x46\ +\xd7\x75\xb9\xe3\x8e\x3b\x58\xb7\x6e\x1d\x5f\xfb\xda\xd7\x38\x70\ +\xe0\x00\x9e\xe7\x91\xc9\x64\x30\x0c\x83\xd9\xd9\x59\xaa\xab\xab\ +\x09\x85\x42\x0c\x0f\x0f\x53\x28\x14\x38\x52\x0d\xc1\x91\xd8\x5e\ +\x7e\xf1\x8b\x5f\xf0\xf3\x9f\xff\xfc\x45\x5f\x53\x69\x27\x76\xed\ +\xda\x45\x24\x12\x79\x49\xc6\xeb\xad\xbc\x02\x81\xc0\xda\x55\xab\ +\x56\x19\xbf\xff\xfd\xef\x59\xb1\x62\x05\x7d\x7d\x7d\xac\x5d\xbb\ +\x96\xef\x7f\xff\xfb\xf4\xf4\xf4\x30\x36\x36\x46\x57\x57\x17\x8f\ +\x3c\xf2\x08\xd5\xd5\xd5\xb4\xb7\xb7\x73\xda\x69\xa7\x71\xdf\x7d\ +\xf7\x1d\x31\x37\xf4\x47\x15\x5a\x6b\x6b\xeb\x70\x55\x55\xd5\x09\ +\x95\x84\x5a\xa9\x54\x22\x12\x89\xf8\x95\x25\x91\x48\x84\x5c\x2e\ +\x87\xe7\x79\xd4\xd5\xd5\xf9\xd2\xd2\xde\xde\x6e\xcf\xcd\xcd\xdd\ +\xb3\x67\xcf\x9e\xab\x8f\x35\x40\x16\x2d\x5a\x34\x78\xea\xa9\xa7\ +\x9e\x38\x31\x31\xc1\x92\x25\x4b\x58\xb3\x66\x0d\xbf\xfc\xe5\x2f\ +\x29\x95\x4a\x04\x02\x01\xb2\xd9\x2c\xe1\x70\x98\x74\x3a\xed\xef\ +\x9b\xe7\x79\xe4\x72\x39\x5c\xd7\x65\xe7\xce\x9d\x47\xc7\x65\x45\ +\xa3\x51\xeb\x9b\xdf\xfc\x26\xa9\x54\x8a\x0f\x7c\xe0\x03\xdc\x7f\ +\xff\xfd\xf4\xf6\xf6\xd2\xd0\xd0\x40\x55\x55\x15\xcf\x3d\xf7\x1c\ +\x55\x55\x55\xf4\xf5\xf5\x31\x31\x31\x41\x57\x57\x17\x23\x23\x23\ +\x0c\x0f\x0f\xe3\x38\x8e\x29\x84\x30\x8f\x41\x30\xfe\x2a\x10\x08\ +\xd4\xcd\xcc\xcc\x20\x84\x60\x68\xdf\x10\x03\x03\x83\x18\xc6\xa1\ +\x27\xdf\x1f\x86\x33\x1f\x77\x08\x21\x08\x85\x42\xfe\xff\x3f\x2a\ +\x40\x74\x5d\xe7\x73\x9f\xfb\x1c\x5f\xfc\xe2\x17\xb9\xf5\xd6\x5b\ +\xd9\xb1\x63\x87\x5f\x75\x91\xcf\xe7\xd1\x75\xdd\xaf\x46\x71\x1c\ +\x87\xe1\xe1\x61\x3f\x8a\x9f\x77\x8d\xbd\x79\x49\x3b\x66\x5c\xe0\ +\xb6\xb6\xb6\x7f\x5c\xba\x74\x69\x3d\xc0\x8e\x5d\xcf\xe3\x35\xa5\ +\x89\x04\x4c\x64\x26\x80\xb4\x34\x3c\x4b\x43\xda\x1a\x42\x48\x5f\ +\xff\x48\x29\xc9\xe7\xf3\x94\x4a\x25\x7f\x48\xc2\x2b\x8a\xd4\x6f\ +\xbe\xf9\xe6\x17\xe3\x74\x7c\x5b\xa3\x7a\xb5\x43\xa1\x90\x7f\x32\ +\x34\x4d\xbb\x72\xe9\xd2\xa5\x17\x0d\x0c\x0c\x34\x1e\x2b\x12\x62\ +\x59\x96\xae\x5a\xbc\xc7\xab\xf3\xfc\xf9\x27\x1a\x70\x0f\xa3\xa7\ +\x3c\x07\xb2\x5b\xaa\xc9\xef\x89\xa2\x6a\x7b\x67\x67\x67\xc9\x66\ +\xb3\x94\x4a\xa5\xc4\x51\xb3\xbd\x63\x63\x63\xf7\x37\x35\x35\x71\ +\xe9\xa5\x97\x72\xd3\x4d\x37\x71\xd6\x59\x67\xd1\xda\xda\x8a\x2a\ +\xd5\x3f\xef\xbc\xf3\x68\x6f\x6f\x07\xca\xad\xd2\x4b\x96\x2c\x61\ +\x72\x72\xd2\x77\x8b\xab\xab\xab\xe9\xe8\xe8\x38\x56\x24\x23\x02\ +\x2c\xcc\xe7\xf3\x7a\x32\x99\x2c\x37\x28\x15\x2c\x32\x13\x25\xc4\ +\xd0\x32\x3e\xdc\xf6\x45\x4e\x64\x0d\xda\x44\x3b\x6e\xca\x24\x53\ +\x4a\x91\x9c\x2b\x33\xe0\xaa\xb7\xe4\xa5\xd4\xf8\xfe\x51\x09\xb1\ +\x6d\xbb\xdf\xb2\x2c\xd6\xae\x5d\xcb\xb2\x65\xcb\x18\x1f\x1f\xa7\ +\x54\x2a\x31\x37\x37\x47\x73\x73\x33\xe9\x74\x9a\xda\xda\x5a\x52\ +\xa9\x14\x93\x93\x93\x54\x57\x57\xa3\xeb\x3a\xaa\x87\xc4\xb6\x6d\ +\x4c\xd3\x94\x15\x4e\xc2\x5b\x56\x75\xe5\xf3\xf9\x8f\xfd\xe9\x9f\ +\xfe\xe9\x97\x4d\xd3\x04\x29\xc9\xd8\x45\xde\xbd\x68\x39\xa9\x9f\ +\x19\xcc\x15\x53\xfc\xc3\xc3\x5f\xc6\xd0\x0d\x34\x43\x20\x58\x80\ +\xae\xc1\x82\x46\x9d\xa1\xa1\x21\x1a\x1b\x1b\x29\x16\x8b\x04\x83\ +\x41\xe9\x79\x5e\xf8\x15\xd1\xef\x63\x63\x63\x6c\xd8\xb0\x01\xc3\ +\x30\xfc\xfc\xb9\x5a\x83\x83\x83\xbe\xc1\x02\x78\xee\xb9\xe7\x30\ +\x4d\x93\x4a\xe2\xcd\x75\xdd\xaa\x95\x2b\x57\xde\x35\x35\x35\x35\ +\x18\x8f\xc7\xff\xe1\xad\x2a\x21\x9e\xe7\xd5\x29\x16\xbb\x20\x6d\ +\xec\x35\x23\x2c\xe8\x89\xe1\xe2\x22\x6d\x70\x27\xa2\x58\x93\x01\ +\x9c\xc9\x20\x56\xdc\xf0\xab\xde\x55\x43\x6c\x2a\x95\xa2\xb9\xb9\ +\x59\x14\x8b\xc5\xab\xda\xda\xda\x18\x1b\x1b\x7b\xf9\x2a\x4b\xd3\ +\x34\x4f\xa9\x9e\x48\x24\x42\x30\x18\xf4\xeb\xb0\x54\xd7\xd4\xe1\ +\x35\x58\x6a\x7a\x82\x6a\x03\x03\x42\x3d\x3d\x3d\x57\x01\x7f\x72\ +\x0c\xd8\x8f\x72\xff\xa1\x65\x51\x57\x13\xa2\x54\x70\x38\x77\xc1\ +\x5f\xf3\xde\x25\x57\x10\x68\xb5\xa8\x7f\x9b\x43\xd5\x79\x09\x4a\ +\x79\xfb\xe0\x4c\xc8\xf9\x7a\x2c\x55\xa0\x2e\x84\x08\xbe\x18\x18\ +\x47\x94\x90\xaa\xaa\xaa\x7b\xc7\xc6\xc6\xd6\x7f\xf6\xb3\x9f\xfd\ +\xf3\x9a\x9a\x1a\x2e\xbd\xf4\x52\x6e\xbb\xed\x36\x92\xc9\x24\x2b\ +\x57\xae\xc4\xf3\x3c\x7e\xf9\xcb\x5f\xb2\x72\xe5\x4a\x76\xec\xd8\ +\x01\x40\x30\x18\xa4\x58\x2c\x92\xcd\x66\xfd\xc1\x01\xf3\xae\x9e\ +\xfb\x56\x54\x5d\xa1\x50\xe8\x2f\xd6\xaf\x5f\x7f\xff\x7c\x25\x8d\ +\x74\x5d\x29\xc2\x55\x3a\xde\x2f\x1a\xc8\x08\xc9\x03\xda\x6f\x40\ +\x80\xa6\x75\xfa\xef\xa9\xae\xd7\xd8\xbc\x79\x33\xcb\x96\x2d\xf3\ +\x5b\xe1\x94\x2a\x3f\x52\xd0\xfc\x47\x01\x99\x9a\x9a\x92\x8b\x16\ +\x2d\xb2\x1e\x78\xe0\x01\x3e\xfe\xf1\x8f\x73\xf3\xcd\x37\xd3\xd7\ +\xd7\x87\xa6\x69\xc4\xe3\x71\x3f\x25\xb9\x65\xcb\x16\x0a\x85\x02\ +\xc9\x64\x92\xe6\xe6\x66\x9f\x7c\x54\xee\xaf\x6d\xdb\x84\xc3\xe1\ +\x33\x2e\xbc\xf0\xc2\x67\x06\x06\x06\xfe\x7b\x70\x70\xf0\xd6\xb7\ +\x90\xaa\x0a\x29\x9b\x68\x08\x5d\x0c\x9d\xb0\x8b\x77\x9c\x5f\x85\ +\xeb\xb9\xd8\x29\x0d\xd2\x11\xdc\xb4\x81\x9b\x34\x29\x0e\x86\x91\ +\xae\x00\xb7\xac\xde\x2b\xa7\xd7\x05\x02\x01\x12\x89\xc4\xf3\x86\ +\x61\xec\x7b\x45\x6e\xaf\x94\x52\x73\x5d\x97\x2f\x7d\xe9\x4b\x7e\ +\xbd\x95\xf2\x16\xa4\x3c\xb4\x5d\x4b\xd3\x34\xa6\xa7\xa7\x7d\xf1\ +\x54\xdd\x46\xf3\x11\x6c\x4d\x7d\x7d\xfd\x3b\x6b\x6b\x6b\xf7\xbe\ +\x45\x48\xc4\xda\xfa\xfa\xfa\x25\x89\x44\x62\xd1\x7c\xd2\x0d\x5d\ +\x6a\xe8\x96\x20\x35\x24\xa9\xd3\x4e\xa4\xb5\xae\x9a\x01\x6f\x3b\ +\xa2\x4a\x43\x54\x0b\x72\x2f\x54\xe3\x15\x35\x7f\x22\xc5\xc1\xd9\ +\x92\x52\xb5\x32\x7c\x73\x6a\x6a\xea\x99\x57\x04\xc8\xec\xec\xec\ +\x57\xb3\xd9\x6c\xe7\x35\xd7\x5c\xf3\xae\x42\xa1\xc0\xbb\xde\xf5\ +\x2e\x1e\x78\xe0\x01\x3c\xcf\x63\xc1\x82\x05\x8c\x8f\x8f\x13\x0e\ +\x87\x89\xc5\x62\x3c\xf3\xcc\x33\xb4\xb7\xb7\xd3\xd2\xd2\x42\xb1\ +\x58\xf4\x49\xb6\xca\x51\x15\x2f\xb7\x4d\xf8\x8d\x5a\xc5\x62\xf1\ +\xe3\xa7\x9f\x7e\xfa\x3f\x28\x43\x5e\x92\x16\xc1\x06\x87\xa6\xd9\ +\xb7\x23\x9e\x13\xe4\x80\x1c\x0e\x01\x4e\xf5\xdf\xd3\xde\x64\xb0\ +\x7b\xf7\x6e\xbf\x15\x43\x55\xe2\xa8\x34\x05\xe5\x39\x8d\x47\xaf\ +\xb2\x0c\xc3\x20\x9d\x4e\x6f\x5e\xb8\x70\xe1\xd0\xbe\x7d\xfb\xde\ +\xf5\xef\xff\xfe\xef\xf4\xf7\xf7\xb3\x74\xe9\x52\x0c\xc3\xf0\xdb\ +\xa3\x0d\xc3\x20\x1a\x8d\x72\xca\x29\xa7\x30\x37\x37\x47\x43\x43\ +\xc3\x21\x05\x65\xaa\x49\x74\x9e\x07\xfb\xe0\x25\x97\x5c\x72\xfe\ +\xcc\xcc\x8c\xd8\xbe\x7d\x7b\x77\x3a\x9d\x4e\xbc\x59\x40\xa8\xb4\ +\x6d\x9e\xe7\x99\xf9\x7c\x1e\x21\x04\x79\xb7\x04\xe7\x1e\x60\xf1\ +\xb2\x30\xd2\x03\x69\xcf\x47\xe4\x96\x86\x3d\x6d\x92\x7a\xbc\x0e\ +\x29\x5c\xbf\xa1\x47\x1d\xc0\x64\x32\x49\x30\x18\x44\xd3\x34\x19\ +\x08\x04\x84\x65\x59\xe6\x2b\x02\xa4\x22\x12\x17\x7d\x7d\x7d\xac\ +\x5b\xb7\xce\x37\x50\x87\x97\x8d\x2a\xf5\x25\x84\xe0\xd7\xbf\xfe\ +\xf5\xc1\x21\x65\x9a\x46\xb1\x58\xf4\x01\x11\x42\x84\x0d\xc3\x08\ +\xd7\xd6\xd6\x62\x59\xd6\x9b\x8a\x16\x8e\xc7\xe3\x9c\x72\xca\x29\ +\xff\xa7\xb9\xb9\xb9\xb3\x54\x2a\x75\x64\xd2\x69\xf0\x34\x1c\xcf\ +\xc3\x78\xb2\x96\xa1\xcd\x82\xf9\x56\xe7\x0a\x5e\xd6\x25\x3b\x33\ +\x4d\x75\x4d\x95\xdf\x61\xe6\xcf\x1b\xb6\x6d\x42\xa1\x10\xba\xae\ +\x8b\x4d\x9b\x36\x9d\x58\x5f\x5f\x3f\xf1\x8a\x00\x51\xab\x54\x2a\ +\x4d\x99\xa6\x39\xaa\xeb\x7a\x7b\x53\x53\x13\x86\x61\xf8\xdc\x8c\ +\x9a\x5f\x15\x0a\x85\x7c\x23\xaf\x8a\xe9\xd4\x00\x80\xd9\xd9\x59\ +\x7f\xca\x8e\x9a\xdb\xeb\x38\x0e\x5d\x5d\x5d\xd7\x04\x02\x81\xec\ +\xc4\xc4\xc4\xf3\x53\x53\x53\x4f\xbe\xd1\x52\x31\xef\x59\x5e\xb0\ +\x60\xc1\x82\x7a\x80\x84\x9d\xa6\x7a\xcd\x2c\xf5\xd5\x21\x9c\xc9\ +\x30\xce\x64\x08\x59\xd2\xf1\x4a\xe5\xb9\xbe\x78\xe5\xc3\x18\x6d\ +\x29\x77\x07\x54\x4e\x5d\x55\xd9\x53\x55\x74\x2e\xa5\xdc\x37\x33\ +\x33\x73\xc4\xfb\x79\x49\x95\x85\xf9\x7c\xfe\xbf\xc7\xc7\xc7\x7f\ +\xdc\xd4\xd4\xf4\x3f\xef\xbe\xfb\x6e\x56\xad\x5a\xe5\xab\xa3\x0f\ +\x7d\xe8\x43\x4c\x4e\x4e\xb2\x7c\xf9\x72\xba\xba\xba\x98\x99\x99\ +\x61\xed\xda\xb5\xac\x5e\xbd\xda\x1f\x4a\xa6\x5a\xdb\x22\x91\x88\ +\x3f\x24\xcc\xf3\x3c\x5a\x5b\x5b\xcf\xef\xea\xea\x7a\xdf\xee\xdd\ +\xbb\xf3\xc5\x62\xf1\x0d\xc9\x2e\x66\xb3\x59\x5a\x5b\x5b\x3b\xab\ +\xaa\xaa\xde\x56\x5d\x5d\xdd\x68\x9a\xe6\x47\xa5\x94\xc1\x42\xa1\ +\xc0\xae\xe4\x10\x4b\x4f\x35\x28\x16\x2c\x1c\x23\x87\x57\x9b\xc2\ +\x6b\x48\x22\x9b\x67\x29\x58\x79\x72\xe3\xf8\x55\xed\x2a\x05\x91\ +\x4e\xa7\x7d\xb2\x55\x0d\xda\x89\xc5\x62\x0c\x0f\x0f\xbf\x24\xcf\ +\xf2\x65\x15\x50\x85\x42\x21\xae\xbd\xf6\x5a\x6a\x6a\x6a\x18\x1f\ +\x1f\x47\x4a\xc9\xee\xdd\xbb\xf1\x3c\x8f\x7d\xfb\xf6\xf9\x0d\x29\ +\x3f\xfd\xe9\x4f\x7d\x35\xa6\x69\x9a\x6f\x6f\x94\x28\x2b\x5e\xa7\ +\x62\x60\x66\x8d\xa6\x69\x4b\x01\xb1\x70\xe1\xc2\xf8\xe8\xe8\x68\ +\xe6\xf5\x04\x25\x14\x0a\xdd\xb2\x6a\xd5\xaa\xbf\x2a\x47\xca\x1a\ +\x33\xcc\xb1\xa0\x5d\x67\xdd\x64\x0f\xf6\x6f\xcc\x72\x4b\x9a\x06\ +\x68\x07\x35\x6c\x58\xc0\xc4\xec\x10\x4d\x4d\x4d\xfe\x58\xc0\xca\ +\x31\xb8\xaa\xa0\x21\x9f\xcf\x3f\x3e\x3d\x3d\x7d\xdb\x4b\xbd\x97\ +\x97\x05\x88\xda\xd4\x44\x22\x21\x3d\xcf\x13\xf3\x5c\x15\xba\xae\ +\x53\x2c\x16\x0f\xe9\x51\x57\x34\x8b\x4a\x68\x25\x93\x49\x66\x66\ +\x66\xa8\xa9\xa9\xc1\xb2\x2c\x4c\xd3\x54\x80\xc8\xce\xce\xce\x8f\ +\x2c\x59\xb2\xe4\x23\xba\xae\xf3\xab\x5f\xfd\xea\x2a\xe0\xee\xd7\ +\x41\x55\xb5\xa5\xd3\xe9\xf3\x3c\xcf\x2b\xe5\x72\xb9\xe5\xaa\x63\ +\x38\x65\xe7\x09\xaf\x4c\xa1\x05\x83\xd0\x25\x91\x96\xc0\x4d\x99\ +\x38\x49\x03\x37\x69\x10\xf6\x6a\xa9\xae\xa9\x46\x7a\xd2\xb7\x8b\ +\xba\xae\xfb\x83\xdc\x94\x33\x54\x31\x28\xe1\xc0\xe8\xe8\xe8\x6f\ +\x5f\x0b\x40\xe2\x5b\xb7\x6e\x0d\x06\x83\xc1\x5b\x3e\xf1\x89\x4f\ +\xdc\x78\xf6\xd9\x67\x73\xfe\xf9\xe7\xf3\xed\x6f\x7f\x9b\xed\xbb\ +\x25\x5f\xa5\x00\x00\x09\x83\x49\x44\x41\x54\xdb\xb7\xf3\x8e\x77\ +\xbc\x83\x74\x3a\xcd\xe0\xe0\x20\x35\x35\x35\x3e\xaf\xb5\x7a\xf5\ +\x6a\x9e\x7b\xee\x39\x1f\xac\xc3\x67\xf8\x5a\x96\x25\x94\x73\x30\ +\xdf\x22\xd7\xd1\xdd\xdd\x7d\x86\x94\x92\x99\x99\x99\x3d\x13\x13\ +\x13\xaf\x49\x23\x7b\xa1\x50\xf8\xcb\xcb\x2e\xbb\xec\x9f\x55\xbb\ +\x72\x51\x2b\x12\xad\x13\x60\xe9\x78\x25\x0d\x99\x2e\xdb\x88\xb2\ +\x62\x97\xc8\x06\x30\x9a\x0d\xb6\xef\xd8\x46\xc8\x3a\x98\x62\x50\ +\x87\x2b\x99\x4c\x22\x84\xf0\x0f\x9c\x65\x59\x04\x83\x41\x6c\xdb\ +\x7e\x59\x73\x46\x5e\x0e\x20\x92\xf2\xcf\x4d\x38\xdb\xb7\x6f\x47\ +\x4a\xc9\x8f\x7f\xfc\x63\xa6\xa7\xa7\xf1\x3c\x8f\x07\x1e\x78\xc0\ +\x4f\x5e\x55\x8e\xca\xdb\xb4\x69\x93\x5f\xfe\xa2\x4e\x4e\xa1\x50\ +\x38\xc4\x45\xac\x9c\xd5\x78\xea\xa9\xa7\xde\xd6\xd1\xd1\x71\x5b\ +\x24\x12\xe1\xe1\x87\x1f\x5e\x05\x6c\x7d\x15\xa5\xe2\x03\xc0\x69\ +\xe5\xbd\x74\xdf\xbd\x73\xe7\xce\xf2\xc8\x0c\xcf\x41\x9c\x90\xa6\ +\xa6\x74\xa8\x57\x6a\x27\x75\xec\xf1\x20\x26\x21\x9a\x9b\x9b\x39\ +\xfc\xc7\x04\x0e\x3f\x5c\xca\x33\x8d\xc5\x62\x64\xb3\x59\x06\x07\ +\x07\xfb\x75\x5d\x1f\x78\xad\x00\xf1\x1d\x81\x50\x28\xc4\xb6\x6d\ +\xdb\xfc\x69\xa4\xaa\x5d\x41\x75\x54\x55\x26\xf2\x95\x64\xa8\xea\ +\x8b\x5c\x2e\x47\xb1\x58\xf4\xd9\xe3\x4a\xcf\x4b\x4d\x11\x4d\xa7\ +\xd3\x78\x9e\x47\x47\x47\xc7\x7f\x9e\x74\xd2\x49\x45\xd7\x75\xf5\ +\xde\xde\xde\x3b\xe2\xf1\xf8\xd7\x5e\xce\x8d\x1e\x36\xce\x96\x6c\ +\x36\x7b\xcd\x65\x97\x5d\x76\x61\x36\x9b\x45\x08\x41\xa2\x76\x5c\ +\x76\x2e\x33\x85\x15\x0f\xe3\xcc\x04\x91\x19\xd3\xf7\x68\xa5\xe7\ +\x21\x35\x49\x78\x69\x98\x8d\x9b\x36\x52\x5b\x5b\xeb\x03\x52\x39\ +\xe4\x53\x4d\xe9\x56\x71\x57\x30\x78\x70\x5c\xfa\xf4\xf4\xf4\xb2\ +\x97\xcb\xdd\xbd\x6c\x40\x74\x5d\xbf\xfb\xc9\x27\x9f\x7c\x4a\xd7\ +\xf5\x2b\x2f\xba\xe8\xa2\xcb\xd6\xae\x5d\x4b\x5b\x5b\x1b\x9b\x36\ +\x6d\x22\x9d\x4e\x93\x4c\x26\x99\x9b\x9b\x43\xd7\x75\x4e\x38\xe1\ +\x04\x86\x87\x87\x99\x98\x98\xe0\xf4\xd3\x4f\xe7\x85\x17\x5e\x38\ +\x04\x34\xdb\xb6\xfd\x21\x36\xa5\x52\x89\x60\x30\xe8\x7f\x61\xdb\ +\xb6\xa9\xab\xab\xeb\x54\x3f\xfe\xb2\x6b\xd7\xae\x75\xe1\x70\x78\ +\x06\xd0\x82\xc1\x60\x21\x99\x4c\x3e\x70\xa4\x7b\x9d\x9c\x9c\xe4\ +\xe4\x93\x4f\x7e\x7c\xd1\xa2\x45\x6b\x95\x5d\xdb\x37\xb6\x57\x06\ +\x82\x9a\x90\x05\x03\x7d\x26\x22\x0e\xf4\x83\xd0\x6c\x84\x66\xe3\ +\x7a\xae\x1f\x3f\x00\xd4\xd4\xd4\xa0\xe9\x07\x8b\x3b\x2a\x01\x51\ +\x01\xaf\x2a\x5c\x38\xf1\xc4\x13\x89\xc7\xe3\x94\x4a\x25\xaa\xaa\ +\xaa\x0e\x99\x52\xf1\x72\x88\xd4\x97\x0d\xc8\xdc\xdc\xdc\x20\x30\ +\x58\x53\x53\x73\xd6\xce\x9d\x3b\x59\xbe\x7c\x39\x03\x03\x03\xfe\ +\x54\x4f\x25\xca\xae\xeb\x32\x36\x36\xe6\x73\x5d\x3b\x76\xec\xf0\ +\xdb\xe0\x54\x10\x39\x37\x37\xc7\xe1\xe3\x65\x2b\xb8\x2f\x7f\x13\ +\x00\xd9\xdd\xdd\x7d\xc9\x8a\x15\x2b\x2e\x01\xd8\xbf\x7f\x7f\x7e\ +\x74\x74\xb4\x65\x5e\x45\xe8\x53\x53\x53\x4f\xba\xae\x1b\x9f\xe7\ +\x8d\x16\xb5\xb5\xb5\x6d\xac\x2c\xd9\xac\xdc\x10\xe9\x49\xa1\xa4\ +\x40\x49\x29\xc0\xf4\xf4\x34\x3d\x3d\x3d\x7e\x2c\x31\x3b\x3b\x5b\ +\xe6\xaf\xe6\x27\x53\x54\x8e\x16\x51\x80\x54\xd2\x22\x4b\x96\x2c\ +\x61\x7a\x7a\x9a\x52\xa9\x34\x37\x35\x35\x35\x52\x2c\x16\x9d\xa3\ +\x51\xab\xaf\xa8\x6f\xa0\xad\xad\x8d\x8d\x1b\x37\x02\xfc\xc1\x59\ +\x1e\x55\x55\x55\x87\xe7\x57\x08\x85\x42\xb8\xae\xcb\xd4\xd4\x94\ +\x1f\xd9\x2b\x5d\xac\x86\x84\x29\x09\x51\x7f\x03\x22\x97\xcb\x31\ +\x31\x31\xa1\xf4\x74\x64\xc5\x8a\x15\x5f\x57\xc4\xdd\xd6\xad\x5b\ +\xa9\xae\xae\xf6\x83\xd0\xe9\xe9\xe9\x3f\x58\xb2\xe9\x38\x0e\x17\ +\x5e\x78\xa1\xef\x11\x8d\x8f\x8f\xd3\xd8\xd8\xe8\xdf\xbf\x72\x5d\ +\x95\x3a\x52\x3f\xb1\xa1\xa6\xe2\x29\x57\x5d\x55\x8e\xa8\x61\x97\ +\xba\xae\x33\x32\x32\xa2\x00\x7a\x78\xf7\xee\xdd\x97\x1f\xed\x9e\ +\x1e\x35\x20\x9e\xe7\x7d\xed\xd9\x67\x9f\xfd\xb1\x65\x59\x2b\x7b\ +\x7a\x7a\xee\xbd\xf5\xd6\x5b\x69\x6b\x6b\xe3\x67\x3f\xfb\x19\x3b\ +\x76\xec\x40\x08\x41\x36\x9b\x65\xd9\xb2\x65\xf4\xf6\xf6\xfa\xcd\ +\x3d\x8d\x8d\x8d\xec\xdb\xb7\xcf\xd7\xbb\x8a\xda\x3e\x3c\xd2\x55\ +\x29\x60\xe5\x4e\xab\x0d\x52\x41\xa6\xda\x14\x29\x25\xad\xad\xad\ +\xb4\xb5\xb5\x21\x84\x60\x72\x72\x92\xd6\xd6\x56\x3f\x0e\xd8\xbb\ +\x77\xaf\x9f\xd7\xdf\xb5\x6b\x97\xcf\xbf\xa9\x93\x7f\xb8\x81\x56\ +\xb4\x90\xf2\x9e\x0e\xf7\x0c\xd5\xf5\x01\x9f\x48\x1d\x1c\x1c\x64\ +\x6e\x6e\x8e\xaa\xaa\x2a\x2a\x87\x76\xbe\xae\x80\x64\x32\x99\x29\ +\x60\x4a\xd7\xf5\x2a\x4d\xd3\xf8\xdc\xe7\x3e\x47\x43\x43\x03\x89\ +\x44\xc2\xff\x52\x52\x4a\x26\x26\x26\x0e\xa1\xeb\x15\x58\xb1\x58\ +\x8c\xee\xee\x6e\xe2\xf1\xb8\xaf\x12\x2a\x87\x6b\xaa\x7f\x4a\x8a\ +\x94\xe1\xaf\xcc\xb1\x54\x66\xf2\x14\x11\xa8\x0c\xad\x72\x34\x14\ +\xeb\xac\xdc\x54\xc5\x38\x2b\xf0\xd5\xe7\xa8\x83\xa0\x3c\xc2\xca\ +\xc2\x84\xf9\xa1\x39\xfe\xf7\x50\x0e\xcc\xb2\x65\xcb\xe8\xeb\xeb\ +\xc3\x30\x0c\xe2\xf1\xf8\x1d\x42\x08\xaf\x50\x28\x3c\xf3\x86\x00\ +\x52\xa1\x86\x9c\x52\xa9\x54\x0c\x87\xc3\xc5\x64\x32\x19\x8d\x46\ +\xa3\x66\x30\x18\x44\xd7\x75\x7f\x34\xac\x3a\x65\xca\xb0\xaa\x4d\ +\x53\xd5\x8f\x2a\x9a\xd7\x75\xdd\x4f\xff\x56\x66\xd6\x54\x4f\xb8\ +\x92\x10\x21\x84\x2f\x21\x95\x3a\x5e\x01\xa7\x1c\x05\xe5\xc1\xa9\ +\x4d\x57\xaa\x47\x01\xa2\xc6\xc1\x56\x3e\xa7\x0e\x40\x25\x20\x95\ +\x3f\xb7\x51\x55\x55\xe5\x17\x5c\xff\xf6\xb7\xbf\x25\x12\x89\x10\ +\x89\x44\xd8\xb7\x6f\x9f\x3f\x33\xb2\xa9\xa9\x89\xa9\xa9\xa9\x37\ +\x06\x10\xdb\xb6\x9f\xdb\xbe\x7d\x7b\x18\xa0\xbe\xbe\xfe\x37\xdd\ +\xdd\xdd\xe7\x7d\xec\x63\x1f\xe3\xc9\x27\x9f\x64\x60\x60\xc0\x4f\ +\x61\x2a\x43\xaf\x36\x44\xd7\x75\xb2\xd9\xac\xcf\xf7\xd4\xd4\xd4\ +\xf8\x06\x5f\xc5\x33\x2a\xda\xad\x54\x1b\x2a\xd9\xa3\x00\x3b\x7c\ +\xde\x7c\xa5\x24\x05\x02\x01\x7f\x63\xd5\xa6\x2b\xe6\xf9\x70\x8f\ +\x49\x5d\x4f\x79\x81\x4a\x22\x54\x1b\x9f\xca\x8b\x74\x76\x76\xb2\ +\x7c\xf9\x72\x1e\x7b\xec\x31\x3c\xcf\xa3\xa5\xa5\xe5\xff\xe9\x1b\ +\x3c\x5a\x30\x5e\x15\x40\x0e\xcb\x2e\x8a\xba\xba\x3a\xbe\xfe\xf5\ +\xaf\x2b\xf1\x9e\xaf\xda\x2f\x9f\x3a\xd3\x34\xfd\xaa\x14\xb5\x02\ +\x81\x00\x96\x65\x11\x8d\x46\xfd\xd3\xaf\x3c\x17\x55\x90\x66\xcc\ +\xff\x20\x8b\xda\x74\xb5\xb9\xea\xfd\x95\x9b\x5e\x19\x6c\x2a\x37\ +\xfa\x70\x3b\xa1\x24\x44\x49\x9d\x7a\x4e\xc5\x27\x6a\xf3\x95\x9d\ +\x33\x0c\x83\x70\x38\x8c\xe3\x38\xc4\xe3\x71\x9f\x3c\xcc\x66\xb3\ +\x0f\x0d\x0c\x0c\xfc\x4f\xf3\xf0\x2f\xf5\x46\xaa\xac\xc3\xd4\xd7\ +\x1d\xbf\xf9\xcd\x6f\x1e\x14\x42\xc8\x40\x20\xf0\xc5\xf6\xf6\xf6\ +\xea\x8b\x2f\xbe\x98\x1d\x3b\x76\xf8\x11\xbd\x3a\x89\xea\x34\x3a\ +\x8e\x43\x6d\x6d\xad\x5f\xf7\x1a\x0a\x85\x58\xba\x74\x29\xd3\xd3\ +\xd3\x87\x8c\x99\x2d\x16\x8b\xbe\xc4\xd4\xd6\xd6\x1e\x12\x78\x56\ +\x06\x6b\x95\x12\x52\x59\xf5\xa1\x40\x54\xaf\x53\x00\xab\xc1\x6b\ +\xa6\x69\xfa\x41\x9e\x72\xcf\x55\xb0\x17\x0e\x87\x59\xbd\x7a\x35\ +\xdb\xb6\x6d\xf3\x55\x5b\x5d\x5d\x1d\x85\x42\x21\x93\xcb\xe5\x5e\ +\xd5\x5f\x00\x7d\x55\x01\x99\x99\x99\xf9\x69\x45\x94\xfc\xbf\x63\ +\xb1\x58\xf5\x43\x0f\x3d\xe4\x7b\x2b\x95\xbf\xb0\x73\x98\xc7\x46\ +\x2a\x95\xa2\xaa\xaa\x8a\x33\xcf\x3c\x93\xfd\xfb\xf7\xfb\x9b\x52\ +\x39\xa5\x4e\x01\xe2\xba\x2e\xa9\x54\x0a\x28\xf7\xb0\x28\x6f\x4c\ +\x6d\xb4\x02\xa4\x72\x22\xb5\x02\x24\x9b\xcd\x1e\x32\x1d\x55\x1d\ +\x8c\xea\xea\xea\x43\xae\x57\x5d\x5d\x4d\x43\x43\x03\x73\x73\x73\ +\xa4\xd3\x69\xa2\xd1\x28\xae\xeb\x92\xcb\xe5\x0e\xec\xdd\xbb\xf7\ +\x59\x21\x84\x0c\x06\x83\xbf\x79\xb5\x39\xb6\xd7\xac\x7f\xd9\x75\ +\xdd\xe1\xfe\xfe\xfe\x1c\xe0\x09\x21\x4e\xd0\x75\xdd\xac\xae\xae\ +\xf6\x0d\x7d\xc5\x80\x9a\x43\x0c\x78\x22\x91\xa0\xbe\xbe\x1e\xdb\ +\xb6\x89\xc5\x62\x2c\x5d\xba\x94\xdd\xbb\x77\xfb\xaa\x43\xa9\x1b\ +\x15\x67\x08\x21\xfc\x71\xe0\x6a\x38\x65\x65\x85\x79\x3e\x9f\xf7\ +\xd5\x92\x4a\x03\x54\xb2\xd1\x4a\xdb\x68\x9a\x46\x4d\x4d\x8d\xff\ +\x39\xea\xf5\x81\x40\x00\xd7\x75\x79\xea\xa9\xa7\x30\x0c\x83\x50\ +\x28\xf4\x44\x2a\x95\xba\xfc\xb5\xda\xb7\xd7\x0c\x90\x44\x22\xe1\ +\xcf\xea\xee\xec\xec\x1c\xe8\xec\xec\x5c\xf2\x12\xed\x90\x4f\x3f\ +\x78\x9e\xc7\xc2\x85\x0b\x19\x1c\x1c\x24\x12\x89\xf8\x53\xa6\xfd\ +\xde\xbe\x0a\x1a\x46\xd9\x1d\x65\xaf\x14\x58\x87\x4f\xd6\x56\x91\ +\xb9\xa6\x69\xbe\x87\xa7\x24\xa8\xb3\xb3\x13\xc3\x30\x18\x1c\x1c\ +\xf4\x27\x1f\xcd\x57\xce\xa4\x67\x67\x67\x9f\x13\x42\x78\x96\x65\ +\x6d\x7e\x2d\xd3\x02\xaf\x4b\x87\x7f\x2e\x97\xfb\xfe\xf8\xf8\xf8\ +\x02\xca\x6d\x6e\xef\x0b\x87\xc3\xcb\x8e\xd4\xaf\x3d\x33\x33\x43\ +\x20\x10\xe0\x99\x67\x9e\xf1\x37\xf0\xec\xb3\xcf\x66\xe3\xc6\x8d\ +\x68\x9a\xe6\xf7\xa8\x24\x12\x09\xbf\x92\x52\xd9\x0a\xd3\x34\x0f\ +\x99\xbc\x1d\x0c\x06\x7d\x4f\xaf\xb5\xb5\x95\xd9\xd9\xd9\x72\xea\ +\x35\x1a\x65\xe9\xd2\xa5\x0c\x0f\x0f\x93\xcb\xe5\xd0\x34\x4d\xfd\ +\x57\x0a\x21\x84\xe3\x38\xaa\x23\x6c\xdf\xd0\xd0\xd0\xf9\x2f\x96\ +\xf6\x7d\x4b\x01\x32\x3f\x90\xfe\x0b\x2a\x9f\x7c\xc2\x09\x27\xb4\ +\x2e\x58\xb0\x60\x59\x45\xe4\x2b\xc5\x1f\xe0\x39\x2a\xd5\x98\x8a\ +\x69\x2a\xf3\xf8\xd1\x68\xd4\x1f\x31\x58\x5f\x5f\xcf\xf2\xe5\xcb\ +\xd9\xb3\x67\x0f\x75\x75\x75\xe4\x72\x39\x82\xc1\x20\xb9\x5c\x8e\ +\x13\x4f\x3c\x11\x21\x04\xa9\x54\x8a\x44\x22\x41\x47\x47\x07\xef\ +\x7c\xe7\x3b\xf9\xf5\xaf\x7f\x4d\xa1\x50\xa0\xa1\xa1\x81\xde\xde\ +\x5e\x34\x4d\x63\xff\xfe\xfd\x4a\x8d\x89\xc1\xc1\xc1\x6f\x39\x8e\ +\xb3\x0f\x70\x23\x91\xc8\xc0\xe1\xc5\x10\xaf\xd5\x7a\xdd\x67\xae\ +\x6b\x9a\xb6\x40\xd3\xb4\xc8\xfc\xe3\x0f\x76\x77\x77\x7f\xe5\x48\ +\xf3\x3f\x94\x3e\x57\x76\x27\x10\x08\xf8\x86\xd9\xb2\xca\x3f\xb3\ +\x7a\xd5\x55\x57\x71\xdf\x7d\xf7\x11\x0e\x87\xa9\xad\xad\x65\x7a\ +\x7a\xda\x9f\x3e\xb1\x61\xc3\x06\x7e\xfe\xf3\x9f\x33\x37\x37\x47\ +\x57\x57\x17\xdd\xdd\xdd\x3c\xfe\xf8\xe3\xaa\x3a\xdf\x57\x6d\xea\ +\xf7\x15\x5d\xd7\x25\x93\xc9\x9c\x1b\x8f\xc7\x1f\x7f\xbd\xf7\xe7\ +\x0d\x1d\x82\x1f\x0e\x87\x4f\x6b\x6c\x6c\xbc\x4c\xd7\x75\x07\x20\ +\x1a\x8d\x7e\x2a\x18\x0c\x1e\x71\xae\xaf\x9a\x60\xa7\xd4\xd3\xd8\ +\xd8\x18\xd5\xd5\xd5\x38\x8e\xe3\xe7\x24\x14\xf1\x37\x31\x31\x41\ +\x5d\x5d\x9d\x3f\x73\x38\x16\x8b\xf9\x81\x61\xa1\x50\xf0\x6d\xca\ +\xfc\xe8\xf3\x43\x66\xd1\xbf\x11\xe3\x6c\xdf\xd0\x29\x31\x85\x42\ +\x61\xc7\xc8\xc8\xc8\x8e\x0a\xdd\xec\x45\xa3\xd1\x2a\x29\xa5\xb4\ +\x6d\xbb\xcb\x30\x8c\x3f\x3b\x52\xa3\xbd\xb2\x05\xca\x63\x2a\x16\ +\x8b\x7e\x90\xa9\x62\x09\xf5\x6b\x9c\xd9\x6c\x16\xcf\xf3\x76\x4b\ +\x29\x75\xd7\x75\xdd\x64\x32\xf9\xf7\xe3\xe3\xe3\x3f\x79\xb1\xcf\ +\x7e\x23\xc6\xd9\xbe\xa1\x12\x72\x24\xed\x06\xf8\x9c\x7e\x2c\x16\ +\xbb\x5a\xd3\xb4\xd8\x8b\x81\xa2\x96\x69\x9a\x3e\x95\x21\x84\x28\ +\x00\x7b\x8b\xc5\x62\x56\x4a\x29\x63\xb1\x58\x66\x76\x76\x76\xfb\ +\x61\x69\xdd\x63\x79\x04\xc8\xf1\x75\x7c\x1d\x5f\xc7\xd7\xf1\x75\ +\x7c\x1d\x5f\xc7\xd7\xf1\x05\xc0\xff\x05\xf4\xe6\xb0\x9e\xc6\x6e\ +\xd0\xb8\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x3a\x79\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x64\x00\x00\x00\x64\x08\x06\x00\x00\x00\x70\xe2\x95\x54\ +\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ +\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\ +\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0e\xc4\x00\x00\x0e\xc4\x01\ +\x95\x2b\x0e\x1b\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x03\ +\x0e\x1c\x1e\xba\x16\x7f\x4d\x00\x00\x20\x00\x49\x44\x41\x54\x78\ +\xda\xed\xbd\x79\x9c\x5c\x55\x99\xff\xff\x3e\x77\xa9\x5b\xd5\xd5\ +\xdd\xd5\xdd\xe9\x2d\x49\x77\xd2\x21\x1b\x09\x59\x00\x59\x02\x81\ +\x08\x88\x40\x40\x10\x46\x5c\x66\x1c\xc1\x19\x01\xf9\x02\x83\xdf\ +\x41\xe7\x0b\xe3\x38\x83\xc8\x57\x04\x74\x5c\x58\x64\x40\x51\x91\ +\x4d\x04\xd9\x05\x21\x04\x08\x09\xd9\x43\x3a\x0b\x4d\xd6\x4e\xa7\ +\xf7\xa5\xba\xf6\xed\xae\xe7\xf7\xc7\xed\xba\x49\x00\x35\x60\xc0\ +\xef\xcc\x8f\xf3\x7a\xd5\xab\xb7\xea\x53\xf7\x9e\xe7\x9c\x67\xf9\ +\x3c\x9f\xe7\xb9\xf0\xd1\xf8\x68\x7c\x34\x3e\x1a\x1f\x8d\x8f\xc6\ +\x47\xe3\xa3\xf1\xd1\xf8\x68\xfc\x8f\x1f\xe2\x7f\xf2\xcd\x9d\x74\ +\xd2\x49\x3b\xa7\x4c\x99\x32\x51\x4a\x89\x00\xa4\xad\x20\x25\xa0\ +\x48\x50\x24\x42\xbc\x73\x05\x4a\xa5\x52\x78\xc9\x92\x25\x5f\x4c\ +\xa7\xd3\x0f\xff\x35\xae\x59\xfb\x20\x26\xad\xaf\xaf\x5f\x94\xcf\ +\xe7\x27\x1d\xf4\xae\x10\x02\xcf\xf3\xa8\xa9\xa9\x79\x6e\x70\x70\ +\x30\x71\xa8\xae\x43\x55\xd5\xea\x42\xa1\x10\x01\xd8\x63\x0f\x32\ +\xf3\x73\x05\x2a\xa3\x3a\x4e\x4a\xc3\x4b\x87\xf0\x72\xfe\xf7\x6e\ +\x4a\xc3\x4d\x86\x00\xf0\x3c\x0f\x29\xa5\xf6\xd7\xda\x44\x1f\xc8\ +\x07\xd7\xd5\xd5\xdd\xf5\xd9\xcf\x7e\x76\x36\x80\x27\x3d\xdc\x0a\ +\x8b\xb0\xa1\x20\xad\xb1\x97\xad\x80\x1c\xdb\x9d\x63\x3b\xd4\x30\ +\x0c\x1e\x7f\xfc\xf1\x63\x81\x43\x26\x10\x29\xa5\xb4\x2c\x0b\x01\ +\x8c\xb8\x29\x3e\x16\xa9\x24\x24\xab\x38\xf6\x88\x05\x6c\x1f\x5d\ +\x4f\x22\x93\xa4\xae\x2a\x42\x6e\xd8\x66\xf8\x77\x75\x07\x6c\x90\ +\xff\x51\x02\xb1\x6d\xdb\x18\x1a\x1a\x02\x60\x67\xbe\x9f\x85\x57\ +\x81\xed\xed\xbf\x50\x60\x0f\x86\x28\xee\x8c\x62\xee\x8e\x80\x90\ +\x54\x55\x55\x81\x2f\xa6\x43\x36\x5c\xd7\xc5\xb2\x2c\x90\x20\x74\ +\xf0\x84\xc3\x45\x33\xbe\xcf\x73\x3d\xb7\x71\xeb\x99\xbf\xe7\x47\ +\x4f\xfe\x90\x89\xad\x1e\x4b\x06\x9e\xf1\xdf\x37\x26\x8c\xbf\xa6\ +\x40\x94\x0f\x68\x5e\xcf\x34\x4d\x4c\xd3\xc4\x76\x5d\x74\x5d\x21\ +\x37\x50\xc5\xb7\x3f\xfe\x5b\xce\x9e\x71\x31\x8a\x13\x61\xdc\xe4\ +\x0a\x42\x93\xf3\x98\x25\x0b\xcb\xb2\x30\x4d\xf3\xa0\x17\xa2\xa5\ +\xa5\xe5\xe0\x2e\xc2\xf3\xa4\x65\x59\xd8\xb6\x8d\x87\x24\x95\x31\ +\x39\xfa\xf0\x23\xe9\x48\xaf\x40\x11\x0a\x9f\x38\xfa\x93\x54\x55\ +\xc5\x50\x42\x12\xc7\x71\x30\x4d\x13\xc7\x71\xfe\xaa\x76\x4f\x7b\ +\x1f\xea\xe8\xc2\x63\x8e\x39\xe6\x5f\x1c\xc7\xf1\x24\x12\x55\xaa\ +\xb8\xb6\xf4\x45\xab\x48\x34\x5d\x75\x3b\x3b\x3b\x5b\x4d\xd3\xf4\ +\x77\xa9\xe7\x62\x96\x14\xfe\xed\xcc\x3b\xf8\xe9\xfa\x6b\x38\xab\ +\xf9\x1b\x4c\x51\xe2\x9c\x34\xeb\x28\xee\xde\x7e\xab\x2f\x08\x55\ +\x12\x0a\x85\x90\xf2\xe0\x0e\x48\x6f\x6f\x2f\x6d\x6d\x6d\xab\x1a\ +\x1b\x1b\x29\x1b\x6c\x3c\x05\x89\x24\x95\x4e\xd6\x4d\x39\x6c\xca\ +\x0c\x45\x51\x40\x08\xa4\x2b\x11\x86\xcb\xdc\xfc\x14\x72\xbf\x84\ +\xd3\x7e\xf6\x71\x2a\x42\xd3\x39\xf9\x8e\x93\xd1\x55\x0d\x81\x46\ +\x28\x54\xc3\xce\x9d\x5b\x68\x6d\x6d\x45\x4a\x89\xeb\xba\x53\x43\ +\xa1\xd0\x82\xf7\xb2\x2e\x15\x15\x15\x54\x57\x57\xaf\xe9\xee\xee\ +\x96\x1f\xaa\x40\x2c\xcb\x9a\x7b\xd8\x61\x87\x1d\x97\x48\xf8\xaa\ +\xbe\xaf\xae\x8b\xd9\x0b\x75\xac\x81\x08\xce\x48\x18\x91\x8b\xd0\ +\xdd\xa3\x62\xdb\xb6\xbf\x4b\x85\x87\x6b\x4b\x66\xb5\xcd\x40\xd9\ +\x03\x45\x3b\x4b\xb6\x98\xe3\xa5\xdd\x0f\xe0\x79\xbe\x4a\x11\xaa\ +\x0c\xde\x7f\x90\x23\x5c\x5f\x5f\xbf\x60\xda\xb4\x69\x78\x9e\x47\ +\x51\x9a\x68\x87\xa7\xa8\x0c\x87\xe8\x5c\xe1\x31\xae\xba\x1e\xcb\ +\x32\xd1\x84\xca\xf6\xf1\x5b\x39\xe1\xec\x4a\x5c\xd7\xc3\x1e\xd1\ +\x71\x07\xa3\x58\xc3\x50\x93\x19\x87\x9d\x52\x28\x16\x4a\xa8\xaa\ +\x40\xd3\x34\x72\xb9\x1c\xae\xeb\xca\x93\x4e\x3a\xe9\xfa\xda\xda\ +\xda\xeb\x01\x1c\xe9\xa2\x57\x79\xe0\x28\x60\x8f\xd9\xbf\xc0\xf6\ +\xc9\x40\xcd\xed\xde\xbd\x9b\xb5\x6b\xd7\x46\x80\xd2\x87\x6e\x43\ +\x4a\xa5\x12\xa6\x69\x92\x73\x4b\x44\x8e\x2d\xa2\x56\x2b\x44\xaa\ +\x73\x30\x33\x87\x66\x08\xc4\x5a\x27\xd0\xc9\x9e\xe6\xa1\xaa\x2a\ +\xa9\x5c\x1a\x45\x51\x51\x15\x1d\xdb\x33\xa9\xd2\x2b\xf1\x24\x58\ +\xa6\x89\xd0\x08\xde\x7f\xb0\x8e\x99\xe7\x79\x94\x4a\x25\xf0\x24\ +\x9d\x7a\x37\x0b\x8f\xd6\x81\x22\x46\x3c\x83\xbd\xc7\xc2\xb2\x2d\ +\x3c\x54\x8c\x98\xc4\x35\x05\xf5\xea\x6c\x1a\x67\xd6\xd0\x51\xb3\ +\x8a\x8a\xd9\x2a\x20\xd8\xf4\x23\x9b\xa9\x2d\x87\x53\x55\x55\x45\ +\x6b\x6b\x2b\x00\x83\x83\x83\xa2\xac\x42\x55\x14\x76\x36\x6e\x63\ +\xc1\xd9\x51\xbc\x31\x1b\xe8\x59\x02\x7b\xd0\xc0\xea\x89\x60\x76\ +\x85\xc1\xf5\xb5\xbe\xae\xeb\x78\x9e\xf7\xe1\xdb\x10\x21\x04\x96\ +\xe5\xeb\x7d\xc7\x71\x50\x55\x05\x37\x5d\xcf\x4d\xa7\x3f\xc3\x95\ +\x47\xfd\x17\x7a\xb1\x85\xd6\xd8\xd4\xe0\x3d\x9e\xe7\x11\x8d\x86\ +\xb8\xe5\xf1\xef\xf2\x37\xd3\xaf\x61\x7c\x53\x2d\x49\xaf\x93\x73\ +\x66\x5c\x82\x22\xf7\xcd\xf5\x1e\x4f\x08\x52\xca\x31\xdb\x63\x21\ +\x3d\xdf\x65\x3b\xa7\xf5\x1b\x2c\x9e\xf6\x0f\x98\xb6\x3f\xa7\x65\ +\x9a\xa8\xaa\x82\x9a\x6f\xe2\xfa\xb3\xfe\x0b\x37\x3e\x81\x93\x9b\ +\xbe\xcc\x37\x4f\x7a\x88\x90\x6a\x50\x32\x4b\x64\x32\x19\x86\x86\ +\x86\x18\x1a\x1a\x62\x53\xec\x75\xe4\xc2\x1d\x38\xa6\x87\x69\x9a\ +\x58\xa6\x85\xa2\x4b\x1c\xc7\x65\x6e\xf4\x5c\xbe\x76\xe2\x8f\x89\ +\x44\x42\xd4\xb4\x54\x52\x7d\x52\x12\xcf\xf0\x37\x66\xf9\x3e\xff\ +\x6a\x46\xbd\xbc\x83\x2c\xcb\x42\x08\x98\xa0\x1e\xc5\x8a\x9e\x27\ +\xf9\xed\xf2\xdf\xf0\xa5\x23\xbf\x89\xeb\x3a\xa4\xd3\x69\x52\xa9\ +\x14\xf9\x42\x1e\xc7\xb3\x49\xd6\x2e\x63\xeb\xee\xdd\xf4\xe4\x36\ +\x43\x6d\x3f\x3f\x5a\x7b\x39\xe9\x64\x8e\x54\x3a\x4d\x3a\x9d\x26\ +\x93\xc9\x20\x84\xf8\xb3\xc7\x64\xfc\xf8\xf1\x41\xbc\xe0\x0b\xd2\ +\x02\x21\xd1\xc3\x1a\x9f\x9c\x73\x3e\xab\x07\x9f\x41\x7a\xbe\x0a\ +\xb4\x6c\x1b\x3d\xac\x23\xac\x18\xbd\xc5\x1d\xb4\xf7\xaf\xe0\xb0\ +\xfa\x79\x34\xd5\x34\xa1\x0a\x1d\xd7\x75\x71\x1c\x27\xd8\x14\x91\ +\x2a\x81\xaa\x8a\xe0\xf7\xb6\x6d\x23\x74\x41\x85\xde\xc0\x95\x9f\ +\xf8\x26\x3f\x7c\xf6\x07\x5c\x7a\xec\xad\x5c\xb3\xe8\x1e\xda\x1a\ +\x67\xe0\xb8\x0e\x8e\xe3\xbf\x3c\xcf\x43\x51\x94\x0f\xdf\xa8\x97\ +\x4f\x88\x6d\xdb\x38\xd8\x08\xa1\x10\xd6\x23\xb8\x9e\x8d\x2b\x5d\ +\x92\xc5\x61\x14\x45\x0b\xbc\x15\xd7\x71\x91\x8a\x87\x6b\x49\x9e\ +\xeb\xba\x85\xd2\x56\x97\xe2\x80\x20\xdf\xa5\x31\xb4\xb1\x88\x11\ +\xd1\x41\x82\x65\xda\x54\x46\xab\x6e\x9e\x3b\x67\xee\xe8\x1f\xc3\ +\x0f\x52\xa9\xd4\xeb\x3d\x3d\x3d\x77\x97\x05\x32\x38\x38\xe8\x7b\ +\x66\xa3\x2e\xab\x6f\xca\x70\xfe\x0f\xcf\x63\x30\x91\x43\x9a\x05\ +\x24\x1e\x02\x81\x7c\xda\x65\xad\xda\xc1\xe5\x8f\x5c\xc3\x68\x36\ +\xc1\xe5\x77\x5f\xc1\x9a\x37\x5e\xc3\x74\x8b\xbe\x5d\xd9\xef\x64\ +\x6a\x86\xc2\xf6\x9f\xbb\x54\xc7\x72\x60\xfa\x66\x42\x5f\x51\xc5\ +\xea\x57\x93\xcc\xbd\x76\x1e\xd5\x91\x18\x5f\xfa\xd1\x57\x71\xa5\ +\x8b\xa1\x46\xd0\x23\x1a\x42\xf8\x1b\x54\x55\xd5\x43\xe2\x2e\x6b\ +\xef\xf7\x84\x58\x96\x85\x2d\x1c\x34\x45\x63\x30\xbf\x97\x33\x62\ +\x0b\xe8\x89\x99\x24\x0a\x7e\xfc\xa1\x69\xfe\xd4\x75\x05\x95\xa5\ +\xd7\x8d\x62\x67\x64\x10\x04\xda\xb6\xcd\xa2\x45\x8b\x68\x98\x6d\ +\xa2\x0a\x85\x4e\x6d\x2f\x47\x2c\xd2\xb1\xfb\x2a\xce\xb6\x07\x22\ +\xc8\x74\xe8\x5d\x41\x9d\x2d\x5b\xb6\x00\xdc\x5d\x56\x59\x93\x27\ +\x4f\x26\x12\x89\x20\x84\xa0\xcf\x19\xa1\xee\xfc\x21\x26\xca\x2a\ +\x9c\xfe\x0a\xac\xde\x0a\xdc\x78\x08\xe4\xbe\x89\x6a\xaa\xc6\xb1\ +\x77\xef\x5e\x22\x54\x51\x1b\x6e\xc4\x73\x07\x71\x1c\x27\xf0\xee\ +\xd4\x9c\x47\x7d\x63\x3d\xe3\xea\xc6\xa1\x28\x0a\x3b\x0b\xfd\xcc\ +\xfc\x5c\x91\x58\x4c\xc7\x4d\xc7\xb0\x7a\x23\x38\x83\x35\x58\xfd\ +\x61\x14\x45\x04\xaa\x13\xa0\xbb\xbb\xfb\xaf\x2b\x90\x52\xa9\x84\ +\xad\x49\xa4\x0c\x63\xd7\x6c\x27\x31\xec\x70\xd2\xc7\x8e\xe4\x57\ +\x9b\x6e\xa0\x2f\xd9\xc7\x59\x67\x9d\xc5\xa5\x97\x5e\xca\xf2\xe5\ +\xcb\x69\x6f\x6f\x67\x68\x68\x08\xd7\x75\x71\x5d\x97\x81\x81\x01\ +\xca\x71\x4a\xca\x29\x10\x3d\x39\x4b\xa8\x39\x8a\xd7\x90\x44\x3b\ +\x4a\x10\x12\x15\x38\x25\x0f\x55\x68\x0c\x3d\xd0\xe8\x63\x4f\xfb\ +\xdd\x7c\xf9\xfb\x72\xec\xa0\x08\x85\x2d\xd6\x1e\xe6\xd5\x36\x53\ +\xb2\x0a\xd4\xcc\x0b\x51\x98\xdd\x0b\x48\x84\x13\x22\xbd\xaa\x9a\ +\xe2\x8e\x30\x00\x21\x11\xe6\xba\x57\xcf\x23\x5b\xca\x60\xd9\x56\ +\xa0\x72\x00\x2a\x84\x82\x3b\x36\xa7\x10\x82\xbe\xd2\x28\x27\x37\ +\xd6\x51\x2c\xba\x1c\x39\xe3\x38\xb6\xd6\xac\x40\xce\x75\x11\xa8\ +\xe4\x36\x45\xc9\xac\xa9\x02\x21\x51\x14\x05\xcf\xf3\x3e\x78\x81\ +\x8c\x1f\x3f\x9e\x81\x81\x81\x03\x8d\x8e\xa2\x38\xc9\x64\x92\x54\ +\x2a\x85\xad\x79\x94\xac\x18\x8e\x90\xdc\xf5\xc6\xd7\xf9\xc6\x19\ +\x37\x23\xc3\x26\x96\x5b\xe0\xfa\xeb\xaf\x67\xd9\xb2\x65\x7c\xfe\ +\xf3\x9f\x47\xd7\x75\x22\x91\x08\x3b\x76\xec\xa0\xb2\xb2\x92\xf6\ +\xf6\x76\x5f\xa0\xb6\x8d\xed\xda\x18\x9a\x4a\x6a\x48\xe5\x07\x17\ +\x3e\xcd\x60\x7a\x80\xfb\x36\x5d\xcf\xe2\x79\x7f\xc3\xf3\x5d\xf7\ +\x8e\xb9\xc5\xbc\x43\x20\x65\xe1\x5a\x96\x85\x22\x04\x8a\xa2\x60\ +\xd9\x36\x5f\x3d\xfc\x67\x64\x44\x17\x9a\xe1\x91\x1c\x75\x58\x91\ +\xf8\x39\x49\x7c\x7b\x20\xa5\xc4\x93\x1e\xdd\xdb\x06\x48\xec\xb4\ +\xc9\xc6\x4b\x38\xd5\xfb\x3c\xc2\xa8\x50\x02\x35\x26\x84\x00\x01\ +\x25\xd3\xe4\x82\xe6\xef\x31\xaa\xb7\x73\xcd\x82\x7b\x78\x65\xf3\ +\xcb\x64\x22\x1d\xb4\xb3\x0b\xdb\xb6\x90\x48\x34\x4d\xc3\xb6\x6d\ +\x54\x55\x7d\xcf\xce\xc9\x7b\x12\xc8\xc0\xc0\x00\x6d\x6d\x6d\xff\ +\xbb\xba\xba\xfa\x68\x3f\x00\x13\x8c\x26\x46\xe7\xab\xaa\x8a\xa2\ +\x28\xe8\x52\xc1\xc9\x48\x72\x03\x2e\x76\x9f\xe0\xeb\xff\xf2\xcf\ +\xa4\x77\x49\x4a\xa3\x82\xaf\x7c\xe5\x2b\x7c\xfb\xdb\xdf\xe6\x57\ +\xbf\xfa\x15\xdb\xb7\x6f\x47\x4a\x49\x22\x91\x20\x16\x8b\xd1\xd9\ +\xd9\x49\x7d\x7d\xbd\x1f\x19\x4b\x1b\x01\x1c\x1e\x5e\xcc\x9a\xc1\ +\xa7\xd9\xd3\x35\xca\x39\xe3\xff\x0f\x0b\x0f\x3b\x96\x35\x43\xcf\ +\xb2\xd3\x2c\xbd\xab\x40\xca\x27\xc4\x71\x1c\x14\x04\x4a\xa5\xa0\ +\x73\x67\x96\x23\xcf\x9b\xcd\x65\xbf\xbd\x9c\xfb\xfe\x76\x1d\xc3\ +\x75\x23\x78\x03\x23\x3c\xe4\xfc\x0e\xd3\x1c\xfb\x7f\xcd\x63\xe5\ +\x77\x53\xa8\xba\x40\x11\x0a\xc5\x62\x91\x62\xb1\x08\x40\x95\x1b\ +\xc2\x75\x55\xff\xd4\x29\x0a\x42\x48\x46\x86\x4a\x9c\xfd\xe9\x4f\ +\x72\xe5\xd3\x37\x70\xe6\xd4\x8b\x99\xde\x30\x8f\x94\x6e\xb0\xc1\ +\xdd\x8e\x69\xfa\x0e\x85\x94\xfe\xeb\x43\x31\xea\xe3\xc6\x8d\xfb\ +\xc2\xb4\x69\xd3\x8e\x07\x70\xa5\xc7\xfa\x3d\x6f\xa0\x0a\x95\x89\ +\x13\x27\x62\xdb\x36\xe9\x67\x2d\x52\xd2\x43\x4a\x81\x94\x61\x34\ +\x40\xd3\x2d\xfa\xfa\xfa\xb8\xf4\xd2\x4b\xdf\x75\xce\x5c\x2e\x47\ +\x2c\x16\xf3\x5d\x67\xe1\x20\x84\x42\xa5\x51\x83\xe5\x16\x71\x3d\ +\x97\xba\x86\x10\x5d\xa9\xad\x64\xac\x04\x96\xa5\xa1\x68\xe2\x1d\ +\x02\x51\x14\x25\x38\x25\x02\x81\xa2\xa8\xb8\x2e\x68\xaa\x8a\x10\ +\xfe\xc2\x38\x8e\xc3\xea\x9e\xdf\xe3\xb9\x2e\x96\xe5\x05\xae\xf2\ +\x9c\xf9\xb3\xe9\xe8\xe8\x20\x16\x8b\x05\xaa\x13\xc0\xf1\x94\x7d\ +\xa7\x4e\x51\xc0\xd8\x87\x7e\x0a\x45\x41\x08\x41\xb6\x94\x65\xc3\ +\xc8\x92\x60\x2e\xc4\xbe\xe0\xf0\x60\x91\x86\xbf\x48\x20\x9e\xe7\ +\x09\xd3\x34\x91\x52\xf2\x96\xd9\x4b\xed\x14\x97\xe3\x9a\x8e\xe7\ +\x9c\x73\xce\xe6\xe4\x93\x4f\xe6\xa7\x3f\xfd\x29\x5b\xb7\x6e\x65\ +\xfe\xfc\xf9\xac\x5c\xb9\x92\x99\x33\x67\xb2\x66\xcd\x1a\xe2\xf1\ +\x38\xe1\x70\x98\x7c\x3e\x1f\xec\x9c\x8c\x52\x62\xfc\x1c\x85\xfa\ +\xc4\x54\x8a\xd9\x9c\xef\x18\x28\x0e\x8a\xa2\x32\x9c\xeb\x61\x7e\ +\x74\x2e\x03\xc2\x64\xb4\xd0\xcf\x84\xc8\x44\x84\x14\x58\xa6\x85\ +\x70\xdf\x79\x42\xf6\x07\x0f\x05\x02\x01\x34\x35\x45\xc8\x65\x1c\ +\xa4\xeb\xab\x26\x17\x9b\xb0\x52\x85\xeb\x66\x30\x4d\xb7\x0c\x8b\ +\x80\x84\x49\x93\x26\xa1\x69\x1a\xae\xeb\x06\xf3\x2a\x1b\x24\x39\ +\x27\x03\x58\xbe\xca\x0a\x43\x7d\x7d\x84\xcd\x3b\x77\x20\x2d\x1d\ +\x45\x51\x48\x17\xe3\x1c\x56\x7d\x34\x3b\xdc\x17\xb0\x2c\x5f\x65\ +\x95\x6d\xc7\x87\x22\x10\x29\xe5\x3e\xfd\xeb\xf9\xae\xa4\x10\x82\ +\x9a\x9a\x1a\x22\x91\x48\xe0\x7f\x87\x42\x21\x8e\x3a\xea\x28\xf6\ +\xee\xdd\xcb\xd1\x47\x1f\xcd\xba\x75\xeb\x30\x0c\x83\x9a\x9a\x1a\ +\xd2\xe9\x34\x42\x08\x52\x86\xc7\xb4\x4f\x45\x08\xaf\x9e\xc6\x96\ +\xd5\xeb\x7c\xf0\x51\xf7\x50\x44\x98\x41\x63\x39\x13\xf5\x8b\x68\ +\x9a\x3f\x9d\x7b\xd6\xff\x1b\xe7\x86\xfe\x91\xaa\x70\x2d\x25\xab\ +\x0f\xe5\x5d\x04\x22\x84\x1f\x2f\x94\x4a\x25\x94\x31\x2c\x63\xc2\ +\xc4\x6a\x7e\xf2\xca\xb7\xb8\xeb\xc2\x65\xdc\xf4\xda\xc5\x48\x33\ +\x42\x63\x4d\x33\xb6\xd3\x45\xa9\x64\xf9\xaa\xc5\x15\x8c\x3f\x5d\ +\x62\x0e\x55\xe1\x66\x75\x9c\xa4\x06\xb6\x82\x50\xfd\x13\x35\xe2\ +\x24\x82\x13\xe2\x54\xba\x54\x55\x86\xb9\x73\xdd\xff\xe6\xa7\x9f\ +\x5b\xca\x7f\x6d\xb8\x86\x1d\x99\x0e\x5a\xf4\x56\x6c\xd7\x22\x9f\ +\x2f\x80\xf0\x05\xa2\x28\xca\x87\x76\x42\x28\x9f\x10\x4f\x78\x28\ +\x42\xa1\xbd\xbd\x9d\xd1\xd1\x38\xc3\xc3\xc3\x14\x0a\x05\x00\x3a\ +\x3a\x3a\x02\x5d\xea\xba\x6e\xb0\x6b\x4a\xa5\x12\x86\x61\xf8\x49\ +\x28\xdd\xa3\xc2\x30\xd8\x34\xf4\x3a\x89\x44\x8e\x62\xb1\x88\x19\ +\x92\x14\xad\x18\x46\x34\xc2\xb5\xbf\xbb\x98\xbb\xbf\xf2\x5b\x32\ +\xde\x20\x8f\x75\xfc\x88\x52\xca\x63\x74\x64\x14\xcd\x50\xca\x6a\ +\xca\xdb\x5f\x20\xc5\x62\x91\x54\x2a\x85\x40\x50\x30\x25\x25\xcb\ +\xa4\xcb\x7b\x85\x5f\x2f\xbf\x87\x86\xda\x09\xac\x8b\x2f\xc5\x4b\ +\x08\xba\x37\x26\xc9\xa7\x7d\xf7\x56\xc3\xa0\x75\x41\x05\xfd\xf1\ +\xbd\xfe\x42\x86\x24\x89\x57\x63\x14\x3b\xa2\x41\x90\x58\x2c\x16\ +\xfd\xf9\xab\x3c\x2c\xd7\x82\xaa\x38\x5f\xfb\xed\xe7\x39\x72\xc6\ +\x0c\x52\xb9\x61\x92\xf1\x38\x3b\x96\x24\xc9\xe7\xfd\x39\x85\x10\ +\x18\x86\xf1\xe1\xa0\xbd\xe5\x88\x18\x40\xea\x12\x90\xd4\x8f\x1b\ +\x47\x3c\x1e\x47\x51\x14\x2a\x2b\x2b\xff\x64\x10\xd9\xdf\xdf\x4f\ +\x32\x99\x44\x51\x14\x72\xc2\xa1\x64\x57\x10\xad\xcf\x93\x56\x55\ +\x54\x55\x45\x43\x82\x10\x08\x45\x50\x69\x48\x2e\xfa\xe6\xa7\x19\ +\xed\xb0\x49\xed\x2e\x20\x14\x81\x51\xa1\x07\xf3\x19\x86\x71\xf1\ +\x84\x09\x13\xf6\xf4\xf7\xf7\xdf\x2a\x84\x40\x1d\x9b\x43\x11\x0a\ +\x46\xc1\x45\xba\x92\x64\x07\x3c\xbc\xfd\x1e\x86\x37\x5b\x98\x69\ +\x17\x31\x16\x2f\x68\x9a\xe6\x67\x03\x3d\x97\xd3\x26\xfc\x23\x62\ +\xa2\x43\x7a\x58\xf0\x4a\xf2\x36\x46\x6c\x5f\xf5\xb9\xae\x8b\xa2\ +\x28\x68\x9a\x86\xa2\x28\x44\xd3\x2e\xe9\x5e\x87\xfe\x0d\x26\x89\ +\x1d\x9b\x78\x7e\xef\xfa\xfd\x5c\x5b\x81\xae\xeb\x48\x29\x83\xa0\ +\xf0\x50\x9c\x10\xf5\xcf\xbd\xa1\xa1\xa1\xe1\x52\x55\x55\x27\xba\ +\xae\x4b\x56\xb5\x98\xff\xe9\x28\x67\x1c\xfd\x0f\x94\x66\x6c\xe2\ +\xb2\xcf\x5c\x87\xd1\xa2\x30\xfe\x38\x41\x32\xba\x87\xee\x35\x19\ +\xf2\x85\x3c\x85\x42\x81\x81\x81\x01\x2b\x9b\xcd\x5a\xb6\x6d\xab\ +\x8e\xe3\x08\x29\x25\xc5\x88\xc7\xec\x8f\x57\x92\xed\xb5\x29\xec\ +\xd1\x88\x44\x22\x18\x42\xa3\xd8\x01\x5d\x2f\x9a\x0c\xac\xb4\xc9\ +\x74\x4a\x9c\xac\x8f\xbe\xaa\xaa\x5a\x4e\xc5\x22\x84\x60\xe2\xc4\ +\x89\x24\x12\x89\x64\x38\x1c\x56\x33\x99\xcc\xce\x58\x2c\x76\x7c\ +\xb1\x58\x54\x9a\x9b\x9b\x09\x25\x25\x7b\x5f\xb2\x19\xdd\xec\x52\ +\xe8\x07\x5c\x05\x4d\x53\xc7\xbc\x25\x7f\x3e\x21\x04\x9a\x30\xc8\ +\x1f\xdd\xce\xff\x3a\xf6\x7b\x44\x8d\x2a\x06\x0a\xbb\xd9\xbd\xb9\ +\x97\x5c\x9f\x87\xe3\x38\x14\x0a\x05\xc6\x8f\x1f\xcf\x55\x57\x5d\ +\x45\xba\x6f\x84\xe4\x46\x0d\x67\x28\x44\xc8\xad\x20\x52\x11\xa1\ +\xa2\xa2\x02\x45\x51\x08\x87\xc3\x01\xa0\x68\x18\x06\xf1\x78\xfc\ +\x51\x55\x55\x1f\x2b\x14\x0a\xde\x07\x2e\x10\x60\xa2\xe7\x79\xe4\ +\x0d\x87\x39\xa7\x56\x93\x74\x07\xb9\xee\x9c\x3b\x18\x12\x6f\xb1\ +\x31\xf5\x02\x0b\xe7\x9c\xca\x9e\xc4\x56\x06\xd6\xfa\xd8\x96\xa2\ +\x28\x4c\x9f\x32\x53\x9d\x75\xf8\x6c\x3d\x91\x4a\x88\x52\xa9\x44\ +\xa9\x54\xa2\xca\x32\xc8\x74\xb9\xf4\xaf\xcb\x33\x67\xd6\x3c\x6e\ +\xbd\xf5\x56\xae\xb8\xe2\x0a\xf6\xee\xe9\x26\x16\x8b\xb1\x60\xc1\ +\xf1\x84\x42\x21\xe6\xcc\x99\xc3\xcc\x99\x33\x31\x4d\x93\x29\x53\ +\xa6\x30\x69\xd2\x24\xe2\xf1\x38\x91\x48\x84\xda\x58\xdd\x2c\x4f\ +\xba\x17\xcc\x99\x33\x67\x61\x32\x99\x54\xee\xbe\xfb\x6e\x2e\xbf\ +\xfc\x72\x6a\x6a\x6b\xd1\x43\x3a\xf3\xe6\xcf\xa3\xb2\xaa\x92\xb9\ +\x73\xe7\x00\x30\x6f\xde\x3c\xa6\x4d\x9b\x86\x94\x92\x48\x24\x42\ +\x3e\x5b\x64\xea\xe2\x6a\xce\x9e\x71\x31\xd9\x42\x8e\xe7\x3a\xef\ +\x22\xb1\xdd\x09\x04\x52\x2c\x16\x79\xf9\xe5\x97\x91\x52\x72\xd2\ +\xc9\x27\x91\x2f\xe4\x99\x35\x7b\x16\x55\x55\x55\xcc\x9b\x37\x0f\ +\x80\x73\xce\x39\x87\xe9\xd3\xa7\x07\x73\x16\x8b\x45\xb6\x6d\xdb\ +\x36\xe7\x2f\x15\xc6\x41\x81\x8b\x8e\xe3\x30\x3a\x3a\xca\xe8\xe8\ +\x28\xe9\x4c\x86\xa2\x55\xa4\x10\xd9\xc5\xf7\x9f\xfa\x2e\x9a\xae\ +\x90\x55\xba\x79\xea\xad\xbb\xe9\xeb\x48\x92\x4c\x26\x48\x24\x12\ +\xa4\x53\x19\xd4\xd3\x76\x23\x3e\xbe\x1d\x19\x29\x71\xc2\x09\x27\ +\xb0\x7e\xfd\x7a\x3e\x76\xcc\xd1\xc4\xec\xf1\x54\x68\xd5\x4c\x99\ +\x32\x85\x64\x32\x49\x73\x73\x33\xe3\xc7\x8f\xa7\xb6\xb6\x96\xa9\ +\x53\xa7\x32\x7d\xfa\x74\x14\x45\x61\xf2\xe4\xc9\x68\x9a\x46\x38\ +\x1c\xa6\xb1\xb1\x31\xd8\x8d\xea\xcc\x38\x42\x11\x54\x54\x54\xe0\ +\x79\x1e\x8d\x8d\x8d\xc4\xe3\x71\x26\x4d\x9a\x84\xeb\xba\x4c\x98\ +\x30\x81\x86\x86\x06\x66\xce\x9c\x19\xc0\x34\x75\x75\x75\x9c\x7e\ +\xfa\xe9\x14\x0a\x05\x54\x45\xa1\x52\xaf\xc5\x76\x4d\x2c\xcf\xa4\ +\xda\x68\x08\xbc\xb5\xb2\xda\xea\xea\xea\xc2\x75\x5d\x86\x87\x87\ +\xf1\x3c\x8f\xda\xda\x5a\xf2\xf9\x3c\x9a\xa6\x91\x4c\x26\xe9\xeb\ +\xeb\xc3\x71\x1c\x9a\x9b\x9b\x29\x95\x4a\xc1\x49\xfe\x50\x68\x40\ +\x33\x67\xce\x5c\x63\x9a\xe6\x71\x8a\xa2\x90\xaa\x74\xf8\xd4\x37\ +\x1b\x31\x0c\x41\x6a\xb7\xc3\xf0\x16\x93\xf8\x5b\x16\xf9\x61\xf7\ +\x00\x6c\x47\x55\x35\xce\xb9\xe2\x54\xf4\x79\x7b\x78\xf1\x3b\x7b\ +\xf8\xc9\x0d\x3f\x23\x9d\x4e\x73\xef\xbd\xf7\x52\x53\x53\x43\x67\ +\x67\x27\xae\xeb\x72\xec\xb1\xc7\x92\x4c\x26\xe9\xef\xef\x0f\x9c\ +\x01\xcf\xf3\xde\xf1\x2a\xbb\xa6\x95\x95\x95\x0c\x65\x7a\x50\x4c\ +\x83\x19\x33\x66\x32\x3c\x3c\x4c\x65\x65\x25\x0b\x16\x2c\x60\xcd\ +\x9a\x35\x7f\xf6\xff\x1d\xc7\x21\x97\xcb\xb1\x6b\xd7\x2e\xae\x7f\ +\xf9\x73\x14\xf3\x50\x5d\xa3\xb1\xf2\x81\xdd\x0c\xac\xdd\x67\x43\ +\xde\x4b\x5e\xbd\x7c\x4a\x56\xad\x5a\x25\x3e\x14\xa3\x5e\x1e\xcd\ +\xcd\xcd\x18\x89\x24\x1b\x6f\x2e\xe2\x94\xe4\x18\x6b\x44\x22\xd1\ +\x30\x0c\x35\xb8\x38\xcf\xf3\x50\x04\x7c\xe6\xd8\xbf\x27\xde\xb4\ +\x89\x57\x42\x77\xf2\xfd\xef\x7f\x9f\x6f\x7e\xf3\x9b\x64\x32\x19\ +\x22\x91\x08\xb6\x6d\x53\x55\x55\x45\x7b\x7b\xbb\x7f\xf3\x08\x3c\ +\x57\xe2\x49\x17\x21\x14\xdf\xb0\x2a\x1a\x9e\x94\x28\x42\x09\x22\ +\x75\xcb\xb2\x68\xaa\x6e\x65\x64\x64\xc4\x8f\x01\xa4\xc4\xb1\x1d\ +\x96\xbd\xf2\x1a\xae\x74\xd0\x14\x1d\x4f\xfa\x71\x8d\x82\x8a\x16\ +\xd2\x82\x6d\x27\x3c\x81\xeb\x4a\x9c\xa2\xc7\xcf\x97\xdf\x49\x63\ +\xb4\x85\xcd\x85\xe5\x14\x6d\x95\x3d\x6f\xc4\x29\x26\xfd\x20\x33\ +\x1c\x36\xd0\x09\x53\x74\xf2\x44\x42\x11\x2c\xdb\xf6\x6d\x11\x3a\ +\x8a\x2e\x0f\xd8\xc2\x41\x7c\x95\xc9\x7c\x78\x39\x75\xdb\xb6\xb9\ +\xfa\xea\xab\x59\xb4\x68\x11\x8e\xe3\xf0\xe8\xa3\x8f\x92\xc9\x64\ +\x82\xa0\xaf\x50\x28\x30\x7d\xfa\x74\xde\x7c\xf3\x4d\x12\x89\x04\ +\xf5\xf5\xf5\x6c\xdd\xba\x15\x4d\xd5\x58\xd3\xf3\x1c\x21\xcd\x20\ +\x97\xcb\xf1\xf5\xaf\x7f\x9d\x42\xa1\x40\x4d\x4d\x0d\xd1\x68\x94\ +\xad\x5b\xb7\xd2\xd8\xd8\xe8\xab\x0b\xc5\x65\xce\xe7\x22\x1c\x3b\ +\xee\x42\xcc\x70\x1f\xa9\xbe\x30\xeb\x7b\x5e\xe5\xf4\x63\x4e\x66\ +\xdd\x8e\x57\xd9\xf3\x8c\x83\xa2\x41\x43\x43\x03\xc5\x62\x31\xf0\ +\xfc\x5c\xc7\xa1\xdb\xeb\x67\xde\x19\x95\x5c\x71\xc2\xcd\xfc\x62\ +\xe3\xb7\x38\xa5\xf1\x32\x56\xed\x7a\x95\x7c\xc5\x36\xb6\x3c\x90\ +\x21\x9f\x2d\x20\x10\xe4\xc6\x79\x2c\x38\x3b\x86\x18\xf6\x78\xfc\ +\xf9\x9f\x92\xee\x76\x31\x47\x20\xdb\xe7\x60\xe7\xf7\x79\x4a\x9e\ +\xa5\x70\xfa\x1d\x2d\xfc\xe8\xec\xdf\xf3\x99\xff\xfc\x24\xff\xf2\ +\xe9\x7f\x47\x91\x21\x36\x24\x7f\xc7\x0b\xff\xf5\x06\xa5\x3e\x3d\ +\x10\xca\x4b\x2f\xbd\xd4\x0c\x0c\x1f\x4a\xb6\xcc\x41\xb9\xbd\x93\ +\x27\x4f\xa6\x58\x2c\x32\x73\xe6\x4c\x14\x45\x61\xda\xb4\x69\x54\ +\x56\x56\x52\x55\x55\xc5\x53\x4f\x3d\x15\x18\xe2\x4c\x26\xc3\xc6\ +\x8d\x1b\x09\x85\x42\x08\x04\xba\x88\x50\x74\xf2\xec\xdd\x35\xe2\ +\xbb\x91\xd1\x68\x80\x13\x95\xed\x83\x6d\xdb\x48\xcd\x63\xe2\x91\ +\xd5\xbc\x35\xf8\x2a\x3f\xb8\xe0\x01\x4c\x25\xc5\x7f\x3c\xbb\x86\ +\xc5\x27\x9f\x4d\x9f\xda\x4e\xef\xf3\x69\xd4\x90\x4f\xa6\x2b\xc3\ +\xe5\x96\x65\x11\x0e\x47\x30\xea\x1c\x5a\xe6\xd7\x70\xc6\x19\x67\ +\xb0\x54\xf9\x21\xc7\xb7\x9e\xc8\x50\xa4\x8b\xe1\xe8\x5e\xba\xaa\ +\x3c\x0c\x3d\x4c\x43\x43\x03\xc3\x83\x43\x74\x3d\x06\x42\x11\xc4\ +\x55\x90\x63\xe6\x53\x78\x1a\x46\x58\x04\x2a\x53\x95\x1a\x8a\x5d\ +\x85\xc4\x25\x4b\x2f\x4d\x35\xcd\x3c\xbf\xfa\x55\x76\x2a\x1b\xf1\ +\xc6\xd4\x1e\xc2\xf7\xfc\xaa\xaa\xaa\xc8\x66\xb3\x87\x94\xba\xf4\ +\x67\x05\x12\x89\x44\xb8\xe9\xa6\x9b\x38\xf7\xdc\x73\xf9\xde\xf7\ +\xbe\x47\xa9\x54\x0a\x74\x72\x59\x3f\xf7\xf6\xf6\x1e\x60\x03\x14\ +\xa1\xb0\xec\xad\xa5\xcc\x3d\xfe\x44\xd6\xb6\x75\xe3\x0c\x86\x89\ +\x46\xa3\xa4\xd3\xe9\x03\xd2\xb5\x89\x44\xc2\x0f\xc6\x42\x12\xcb\ +\x0d\x53\xd1\x58\xe2\x7b\x7f\xb8\x86\x1b\x3f\xf3\x13\x8c\x4a\x87\ +\x5f\x6e\xfc\x0f\xe2\x03\x26\xa9\x74\x12\x45\x13\xd8\xb6\x1d\xc4\ +\x13\x65\xbe\x95\x94\xe0\x78\x26\xb9\x62\x0e\x2b\x6b\xa0\x1a\x16\ +\xaa\xaa\x53\x1f\x6a\xa3\x64\x6e\xe0\xb6\x1f\xdf\x41\x7d\x7d\x3d\ +\xab\x56\xad\x62\xe3\xc6\x8d\x84\xc3\x61\x7a\x7a\x7a\x68\x6c\x6c\ +\xa4\xab\xab\x8b\xd9\xb3\x67\x63\x59\x16\x1b\x36\x6c\xa0\xa2\xa2\ +\x82\xbe\xae\x01\x14\x0d\x54\x55\xc7\x71\x05\xae\x74\x89\xe8\x61\ +\xa4\xe7\xe1\xd8\x0e\xa6\xe5\x93\x1b\xca\xc1\xee\x87\x4e\x03\x72\ +\x5d\x57\xaf\xac\xac\x64\xe9\xd2\xa5\xc1\x05\x94\x8d\x5e\x39\x30\ +\x13\x12\xf6\x4f\x29\x3b\xb6\xc7\xda\xc4\x23\x74\xf7\x45\x48\x0d\ +\x65\x49\xa7\x0b\x54\x55\x55\x51\x57\x57\x17\x08\xa4\x1c\x50\x79\ +\x9e\x87\x82\x44\x0b\x0b\x8a\x09\x97\xc1\x9d\x5b\x39\xeb\xcb\x27\ +\x91\xeb\xf5\xb0\xf3\x12\x2b\xe3\xa2\x85\xf6\xc5\x23\xe5\xcd\x50\ +\x2a\x95\x90\x9e\xc4\x71\x3c\x22\x51\x95\x6b\x9f\xfd\x2c\x37\x9e\ +\xf9\x30\xbf\xd8\x72\x1d\x83\xfa\x4e\x1a\xf4\x06\xa4\x84\x71\xe3\ +\xc6\x91\xcd\x66\x69\x6d\x6d\x65\xdd\xba\x75\xcc\x9f\x3f\x1f\xcf\ +\xf3\x98\x3d\x7b\x36\x43\x43\x43\xe4\xf3\x79\xda\xda\xda\x98\x35\ +\x6b\x16\x0f\x3c\xf0\x00\x42\x51\x70\x34\x3f\xfa\xff\xdb\xa3\xff\ +\x89\xbc\xec\x47\xa2\x72\xc6\x94\x7f\x60\xab\x73\x27\xd6\x98\x40\ +\x0e\x55\x86\xf0\x3d\x7b\x59\x55\x55\x55\x0b\x3c\xcf\xab\x79\x9b\ +\x67\x51\xdb\xda\xda\xfa\x50\x2e\x97\x43\x48\x70\xa7\x08\x8e\x3b\ +\xb7\x9a\xfc\x90\x4b\x7e\xd8\xa5\x30\xe4\x11\xa9\xd2\x29\xa5\x3d\ +\x92\xbb\x6c\x3c\xe9\x32\x79\xf2\x64\x74\x5d\x27\x97\xcb\x61\xdb\ +\x36\xc3\xc3\xc3\x84\x42\x21\xe6\xcd\x9b\x47\x5f\x6f\x1f\x96\x6d\ +\xe3\x99\x72\x8c\x08\xed\x3b\x0c\xae\xeb\x1e\xa0\x3a\xa3\xd1\x28\ +\xa5\x52\x89\x7c\x3e\xef\x5f\xbc\x04\x73\x9a\xe0\x6f\xbe\xd1\x84\ +\xeb\x42\x4b\xf8\x28\xc6\x37\xd7\xb2\x7a\xd7\x4b\xe4\xfa\x5d\xba\ +\x1e\x0c\xd1\x32\xb1\x95\x63\x8f\x3d\x96\x17\x5e\x78\x21\x88\xa6\ +\x2d\xcb\xc2\x30\x7c\xdb\x56\xce\x65\xf8\xfc\x00\x81\x5d\xf0\x38\ +\xed\xce\x4a\xf2\x43\x06\x3f\xff\xfc\x52\x6e\x5a\xf1\x65\xba\xd2\ +\x6f\x22\xf1\xd8\xfc\xd3\x12\xc9\x4e\x07\x90\xd4\xd6\xd6\xb2\x73\ +\xe7\xce\xe6\x64\x32\x39\xf4\xa1\x0a\xe4\xdd\x86\xae\xeb\x4d\xf3\ +\xe7\xcf\x1f\x4c\xa5\x52\xd4\xd4\xd4\x90\xcb\x66\x71\x2c\x3f\x5f\ +\x82\x02\x8a\xcf\xb2\x39\x00\xdb\x6a\x69\x69\x61\x60\x60\x00\xcf\ +\xf3\x13\x40\xa6\x69\x72\xdf\x7d\xf7\xd1\xd2\xd2\x82\xa2\x28\x3c\ +\xf9\xe4\x93\xec\xde\xbd\x1b\xd7\x75\x03\x6f\x6c\xc2\x84\x09\x74\ +\x76\x76\x92\x4c\x26\xd1\x34\x8d\x74\x3a\x4d\x22\x91\xc0\x34\xcd\ +\x40\x75\x79\x8d\x82\x93\xff\xb1\x96\xf8\x0e\x9b\x54\xa7\xcd\xe8\ +\x36\x0b\x33\xe5\xa1\x68\x82\xc6\xf1\xf5\x41\x2a\xf9\xcf\x79\xaf\ +\xe5\xb5\xc8\xa5\x0a\x1c\xf5\x8d\x10\x4e\x49\x52\xa1\xd6\xa1\xaa\ +\x1e\x59\x33\x49\xba\xc7\x61\xfb\x13\x39\x3c\xc7\x37\x19\xd5\xd5\ +\xd5\xe4\xf3\xf9\x33\xc3\xe1\xf0\x68\x2a\x95\x32\x7b\x7a\x7a\xb6\ +\xfe\x55\xb9\xbd\x42\x08\x1e\x7d\xf4\x51\xa4\x94\xac\x5c\xb9\x92\ +\xdd\xbb\x77\xd3\xdb\xdb\xeb\x67\x01\xc7\x5e\xaa\xaa\x62\x18\x06\ +\x9d\x9d\x9d\x44\x22\x11\x74\x5d\x3f\x80\xa1\x31\x7d\xfa\x74\x5e\ +\x7f\xfd\x75\x3e\xfb\xd9\xcf\xd2\xda\xda\x4a\x24\x12\xa1\xbf\xbf\ +\x9f\x19\x33\x66\xd0\xde\xde\x8e\x61\x18\x34\x34\x34\x90\xcd\x66\ +\x49\xa5\x52\xe8\xba\xee\xa3\xbb\x8a\x82\x61\x18\x7c\xf1\x8b\x5f\ +\xe4\xe5\x97\x5f\xa6\xe7\xa1\xb1\x39\x5d\x97\x71\x31\x0f\xb7\xd2\ +\xb7\x65\xfb\x7b\x64\xb1\x58\x8c\xed\xdb\xb7\x9f\x52\x2a\x95\xf6\ +\xbc\xed\x56\x8e\x3e\xfc\xf0\xc3\x9f\xc8\xe5\x72\x14\x0a\x05\x16\ +\x2d\x5a\x84\xb2\xbc\x92\x10\x50\xf0\x6c\xb4\x3a\x0b\x2d\x35\x91\ +\x06\x04\x0d\x27\xbe\x63\x19\x5e\x50\x55\x95\x8e\x8e\x8e\x1d\x3d\ +\x3d\x3d\x33\xff\x6a\x27\x44\xd3\xb4\xa6\xa3\x8f\x3e\x7a\xf0\x96\ +\x5b\x6e\xa1\xa9\xa9\x09\xc3\x30\xb8\xe1\x86\x1b\x68\x68\x68\x40\ +\x55\x55\x16\x2c\x58\xc0\x5d\x77\xdd\x45\x55\x55\x15\x4d\x4d\x4d\ +\x84\xc3\x61\x5e\x78\xe1\x85\x20\xc3\xd7\xd0\xd0\xc0\xde\xbd\x7b\ +\x99\x3e\x7d\x3a\x47\x1e\x79\x24\x83\x83\x83\x24\x93\xc9\x20\xe1\ +\x34\x56\x12\x80\xae\xeb\x14\x8b\x45\x1c\xc7\x21\x12\x89\x04\x64\ +\x02\x45\x51\x78\xf3\xcd\x37\xd9\xbc\x79\x33\x00\x1b\x36\x6c\x40\ +\xd3\x34\x56\xae\x5c\xc9\xe4\xc9\x93\xc9\x66\xb3\x4c\x99\x32\x85\ +\x62\xb1\xc8\xfa\xf5\xeb\x91\x52\x32\x34\x34\xc4\x5b\x6f\xbd\x35\ +\x7d\x74\x74\x74\x57\xf9\x3e\x1a\x1b\x1b\xaf\x2d\x14\x0a\xc7\xd4\ +\xd6\xd6\x5e\x58\xbe\xf6\x6c\x36\x1b\x44\xde\x83\xc5\x61\x2a\x23\ +\x3e\xac\x2e\xed\x31\xe6\xbe\x23\x98\x34\x69\x12\x55\xd5\x55\x3e\ +\x89\x5b\x08\x1c\xc7\xb1\x84\x10\x5d\x63\xea\x5c\xdb\xb4\x69\xd3\ +\x7d\xf1\x78\xfc\x3b\x1f\xea\x09\x51\x14\x85\x47\x1f\x7d\x94\xe3\ +\x8f\x3f\x9e\x67\x9f\x7d\x96\x5c\x2e\x17\xa8\x93\xce\xce\xce\x20\ +\x67\x1e\x8f\xc7\xf1\x3c\x8f\x48\x24\x42\x26\x93\xe1\x86\x1b\x6e\ +\x60\xca\x94\x29\x5c\x7c\xf1\xc5\x98\xa6\xc9\xca\x95\x2b\x03\x1b\ +\x51\x86\x47\xca\xc6\xb2\x9c\xdb\xd6\x75\x1d\xdb\xb6\x09\x87\xc3\ +\x41\x00\xba\x71\xe3\x46\x9a\x9a\x9a\xd8\xb1\x63\x07\xa3\xa3\xa3\ +\x81\x0b\x5d\x59\x59\xc9\xc6\x8d\x1b\x19\x1a\x1a\xa2\xa1\xa1\x01\ +\x5d\xd7\xe9\xed\xed\x45\x55\x55\xa4\x94\xe2\x6d\xc1\xee\x25\x0b\ +\x17\x2e\x9c\x66\xdb\xb6\x44\x22\x8a\xd5\x69\xaa\x62\x1a\x5e\x2a\ +\x84\x9b\xd6\x11\x52\x01\x05\x84\x90\x01\xc8\x64\x95\x2c\x7a\xd8\ +\x4c\xf3\x94\x5a\xdc\x8c\x8e\x9b\xd2\xf0\xb2\x5a\x48\x68\xcc\x00\ +\x08\x87\xc3\x6c\xd8\xb0\xa1\xf1\xc3\x88\xd4\xeb\x92\xc9\xa4\x3e\ +\x56\x5c\xd3\xe0\xba\x2e\x6b\xd6\xac\x61\xf5\xea\xd5\xef\xf0\x36\ +\xca\xbc\xdf\xb2\x6a\xdb\x3f\xc5\x59\x55\x55\x45\xa9\x54\xe2\x17\ +\xbf\xf8\x05\xf7\xde\x7b\x2f\xb6\x6d\x53\x53\x53\x43\x63\x63\x23\ +\x2f\xbc\xf0\x02\xad\xad\xad\xe4\xf3\x79\xb2\xd9\x2c\x9e\xe7\x91\ +\x4e\xa7\xc9\x66\xb3\xc4\x62\x31\x52\xc9\x14\x55\x95\xd5\x14\x4b\ +\x05\x2e\xbb\xec\x32\x62\xb1\x98\x8f\x4f\x8d\xed\x68\x21\x04\x6f\ +\xbd\xf5\x56\x90\xde\xdd\x1f\xde\x18\x37\x6e\xdc\xbb\xb2\xe3\x13\ +\x89\x04\xb6\x6d\x8b\xbd\xf6\x10\xb3\x3f\x69\x22\xa3\x0a\x1e\x0e\ +\xaa\xa6\xe0\xa5\x74\xac\x01\x03\xbb\x2f\x4c\xa9\xd3\x3f\xa1\xd2\ +\x85\xda\x79\x61\xea\x16\x94\x28\xba\x71\x14\x05\x9c\x9c\xca\xf0\ +\x43\x8d\xef\xb8\xe7\x0f\x54\x20\x8a\xa2\xac\xb9\xf0\xc2\x0b\xa7\ +\xbd\x17\xca\x64\x28\x14\xe2\xc5\x17\x5f\x7c\xc2\x34\xcd\x27\x01\ +\xea\xeb\xeb\x6f\xbd\xe9\xa6\x9b\x9a\xce\x3a\xeb\x2c\x56\xad\x5a\ +\x15\xa8\xa7\x72\x1c\xa3\x28\x0a\xbd\xbd\xbd\x07\xe0\x50\xd1\x68\ +\x94\xfa\xfa\x7a\xc6\x35\xd7\xc3\xbc\x21\xaa\x23\x21\x5e\xb9\x6d\ +\x37\xb1\x58\x2c\x60\x9d\x1f\xcc\xd8\x3f\x95\xfc\x76\x3a\xaa\x6d\ +\xdb\x58\xd2\x46\x41\x41\xcf\x4d\xe4\xe6\xf3\xee\xe1\x85\xdd\xbf\ +\xe6\xf9\xd1\xc7\x99\x3c\xbf\x9e\xbe\xd8\x20\xd9\xed\x5a\x70\x6a\ +\x3f\x31\xe1\x5c\xae\x38\xf5\x6a\xbe\xf0\xd3\xd3\xf8\xa7\xf3\xaf\ +\xe4\xd1\x55\xf7\x04\x39\xa3\xbf\x94\xe8\x70\xd0\x02\xf1\x3c\xaf\ +\xaa\x4c\xb1\x1c\x75\x33\x4c\xbc\x20\x4d\xa4\x42\x01\x4b\xc1\xb3\ +\x15\xdc\x94\x86\x35\x60\xe0\x0c\x19\xb8\x19\x1d\x21\xfc\xaa\xa8\ +\x50\x28\xd4\x3e\x30\x30\xf0\xeb\x31\x28\xff\x3f\xea\xeb\xeb\x1b\ +\x57\xae\x5c\x29\xf6\x8f\x63\x74\x5d\xff\x93\xe0\x5d\x3e\x97\x67\ +\x43\x7e\x07\x67\xcc\xaa\x40\xd5\x2d\x16\xde\x58\x81\xa6\x14\xd0\ +\x55\x1d\xd7\x96\x38\x71\x83\xd4\xd2\xda\xe0\x7f\x5e\x7b\xed\xb5\ +\xaf\xe6\xf3\xf9\x47\xde\xb6\xa1\xdc\xa6\xa6\xa6\xfc\xdb\xe7\x37\ +\x4d\x13\xc7\x76\xf0\x54\x3f\x99\xf5\x99\xe9\xd7\xf0\x5f\xab\xff\ +\x9d\x2f\xcc\xfa\x57\x66\x2d\xfc\x04\x7a\xb4\xc4\xcd\xbb\xaf\xde\ +\x47\x06\xf7\x04\xaf\x74\x3f\x88\xf6\x6c\x8c\x4f\xcd\xfe\x32\x6d\ +\xb1\x23\x70\x5c\xc7\x27\x7e\x8f\x09\xe4\x43\x39\x21\x65\x70\xcf\ +\xb1\x1d\xb2\x4a\x9e\xca\x6a\x41\x36\x67\x72\xce\x11\x7f\xcf\xa8\ +\xd9\xcd\x9b\x43\xab\xa9\x9a\xe6\x51\x18\xcd\x30\xf4\x70\x3d\x42\ +\x0b\x6a\x3e\x82\xab\x8b\xc7\xe3\x09\xdb\xb6\xa7\x9a\xa6\x19\x40\ +\x31\xe5\x2c\x5b\x52\x49\xd1\x38\x51\xc7\x4d\xeb\x78\x59\x1d\x69\ +\xa9\x64\x0b\x29\x8c\xb0\xc1\xb8\xba\x71\x40\x06\x45\x15\xcc\x33\ +\xbe\xc0\xe2\xc5\x67\x63\x91\xe3\x7b\x4f\xfd\x3b\xf3\x67\x4f\x66\ +\xab\xb3\x35\x98\x67\x2c\xbf\x5d\xf4\x3c\x2f\xbd\xff\xb5\x47\xa3\ +\xd1\xfa\xbe\xbe\xbe\xf0\xdb\x84\xa1\x96\xe3\x22\xcb\x30\x29\xa6\ +\x15\xbc\x82\x4a\xef\xd0\x1e\x36\x29\x5b\x78\xab\xe7\x4d\x1a\x0e\ +\xcf\xa1\x29\xa1\x80\x99\xa2\xa0\xa2\x22\x71\x5c\x9b\x81\xd4\x30\ +\x7b\x52\x11\x34\xa1\x07\xe8\x43\x39\x9e\xf9\xf0\x04\xe2\x38\x78\ +\xba\x8b\x50\x14\x3e\x5e\x7f\x19\xcd\xb1\x3a\x1a\x12\x47\xb1\x6e\ +\x68\x3b\x9f\x3d\xf9\x42\x1e\x1f\xf4\xc9\x6d\x8a\xa4\x1c\x91\xef\ +\x8f\xf5\x64\xc3\xe1\x30\xae\xeb\xa2\x69\x1a\x13\x27\x4e\xc4\x75\ +\x5d\xd2\x4e\x81\x59\x17\xb9\x18\x61\x05\x17\x1b\xa1\x38\x78\x79\ +\x85\xed\x77\xd7\x60\x88\x0a\x3f\x4a\xf0\x20\x95\x2a\x72\xfe\xf1\ +\x17\x71\xdb\xda\xcb\xf8\xfc\xf4\xff\xe0\xdf\x17\xdf\x81\xad\x8f\ +\xd2\xbe\xf5\xaa\x60\xc1\xfe\x48\x04\xad\xb4\xb4\xb4\x8c\x94\x13\ +\x55\x00\x9e\xea\xa2\x69\x2a\x9e\x29\x10\x52\xd0\x20\x1a\xc8\x3d\ +\x06\x37\x7b\xd7\xa3\x2b\x06\x3f\xf5\x6e\x43\x41\xc5\x99\xbb\x9b\ +\x49\xb3\x9a\xf6\x95\xbc\xa1\xd0\x1a\x69\xe5\xb0\xe6\xc3\x58\xdf\ +\xbb\x97\x1a\xa3\x11\x89\xc4\xb2\xec\x03\x28\xb4\x1f\x8a\x40\xca\ +\xc7\xdb\x15\x0e\x0a\x61\x16\xcd\x5d\xc4\xca\xa1\x87\x19\xe9\xaa\ +\xc0\x70\xea\xb1\xbd\x12\x48\xe1\x03\x88\x1e\xe5\x9c\xf3\xa9\xe3\ +\xc7\x8f\x1f\x1c\x18\x18\xb8\xa7\x7c\xc1\xe5\x8b\x2e\xd3\xf8\x6d\ +\xd7\x26\xa4\x6b\x24\x06\x5d\x7e\x70\xc1\xe3\x74\x66\xd6\xf1\xe0\ +\xc6\xff\x44\x7a\xc2\x27\x19\x48\xc0\x00\xab\x24\x89\x46\x2a\xf0\ +\x84\x43\xb6\x90\x67\xdd\xce\x0d\x54\xb4\xf4\xa3\x29\xa1\x7d\x05\ +\x42\xef\x4e\xe9\x34\x2a\x2a\x2a\x88\x44\x22\x48\xcf\xa3\x47\x0e\ +\x33\xff\x22\x6b\x1f\xe1\x6e\x34\x84\x33\x10\xa1\xd4\x6d\x10\x4e\ +\x54\x8f\x91\x8a\xc2\x84\x8d\x30\xf3\xa7\x9f\xc4\x26\xf7\x09\x2c\ +\x6b\xdf\xbe\x3a\xa5\xed\x52\x26\x4f\x8f\xf0\xfc\xf0\x2a\x56\x74\ +\xd9\x50\xe6\x68\x8d\xdd\xdf\x5f\x72\x42\x0e\xda\x02\x95\x0d\xa0\ +\x65\x59\x78\xae\x07\x63\xa5\xcc\x08\x51\xa6\x92\x51\x72\x72\x63\ +\xef\x33\x83\x72\x85\xc3\x0f\x3f\xfc\x14\xc3\x30\xbe\x5a\x9e\x23\ +\x16\x8b\x71\xd7\x5d\x77\x31\x7e\xfc\xf8\x7d\x75\x26\xb6\x83\x10\ +\x82\xaf\x1c\xf3\x6d\xd6\x0c\x3d\xce\xce\x6d\x19\x66\xa9\x9f\xa5\ +\xd2\xa8\x0e\xe6\x41\x42\xac\xc6\x60\x24\x35\x4a\xb5\x5e\xcf\xf8\ +\xba\x46\x5c\xcf\xc6\x76\x6c\x84\x54\x02\xc2\xdb\x1f\xa3\x72\x4a\ +\x29\xc7\x6a\x3e\x6c\xf2\x22\x0f\x12\x0a\x29\x95\x0b\x66\xff\x2f\ +\xaa\x9b\x43\x18\xb3\xd3\x8c\x3b\x37\x4e\x78\x7e\x22\x98\xcb\x71\ +\x5c\x96\x74\xdd\x87\x63\x7b\x24\x93\x49\x92\xc9\x24\xa5\x82\xc9\ +\xa3\x9b\xee\xc2\x94\x39\x42\x95\x92\xce\xe2\x5a\x86\x77\xe7\x82\ +\xbf\x8f\x51\x9e\x9c\x0f\xd5\x86\xb8\xae\x8b\x82\xc2\x8b\xed\x7f\ +\xe0\xe4\x8f\x9d\x4c\x4a\xea\xbc\xd6\xf5\x34\x47\x36\x7e\x8d\x97\ +\xc5\x73\x58\x56\x1e\x45\xfa\xe8\xec\x98\x57\xe6\x95\x77\xef\x75\ +\xd7\x5d\x47\x3c\x1e\xa7\xa5\xa5\x85\x42\xa1\xe0\x9f\x10\x61\xa3\ +\x48\x95\xc3\x9a\xa6\xf2\xda\xe0\x4a\x46\x0b\x25\x76\x0d\x75\x20\ +\xf0\x17\x5a\x20\x90\x48\x2a\x2b\x22\x3c\xb2\xe5\x87\x7c\x79\xc1\ +\x77\xe8\xcc\xad\xe6\xcd\xfc\xf3\x9c\x11\x39\x1b\x5b\xee\x63\x1f\ +\xfe\x31\xb7\xb3\x1c\xb1\x4b\x57\xe2\x85\x7c\xa4\xe0\xc6\x33\x1f\ +\xe6\xa9\xad\x3f\xe7\xba\x85\x0f\xb0\x64\xe3\x12\xcc\xea\x9d\x2c\ +\x59\xff\x2a\xa6\xe9\x73\x03\x8c\x90\x4d\xff\x6a\x8b\x3d\x23\xa9\ +\xa0\x20\xc7\x71\x6d\x92\x9b\x2c\x6e\xf8\xfa\xad\x28\xd2\x20\xdf\ +\xef\x61\xe7\x75\x26\x8e\xaf\x06\x21\x51\x35\x85\x9a\x9a\x9a\xcf\ +\xcf\x9d\x3b\xf7\xf8\xfd\x3f\x7f\x70\x70\x90\xee\xee\xee\x8f\xe7\ +\x72\x39\xeb\x90\x09\xa4\x50\x28\xe0\xd8\x36\x66\xc4\xc3\xc3\x65\ +\xb3\xf5\x30\x87\xf5\x4d\xa5\xae\x51\xa1\x6d\x96\xca\x7f\xae\xba\ +\x04\xcb\x09\x91\xcb\xe5\x51\x74\x7f\x61\xca\xc1\x5c\xd9\x03\x59\ +\xb9\x72\x25\x9f\xf9\xcc\x67\x02\x40\xcf\xf3\x3c\x6c\xc5\x46\x28\ +\x1a\x99\x62\x86\x90\x6a\xa0\x8b\x10\x96\x6b\xe2\x38\x36\xa3\xa3\ +\xa3\x28\x42\x21\x5b\xe5\x51\xb4\x2a\xe8\x0e\xbd\xc6\x0f\x9e\x4b\ +\xf1\xa5\x4f\x7e\x11\x33\xd2\xc3\xb3\xdb\x7f\xce\x68\x57\x91\x64\ +\x32\x1b\xb8\xc1\xef\xe6\x7a\x06\xfc\x32\x57\x42\x54\x22\xa4\x42\ +\x4d\x64\x1c\x9b\xe3\xaf\x70\xf2\xf0\x67\xf0\x2c\x15\xd7\x75\x70\ +\x5d\x89\x65\xfa\xc5\x21\x86\x61\x90\xee\x74\x31\x0c\x0d\x4d\xf3\ +\xe7\xb4\x1d\x9b\xa6\xca\x49\x18\xd2\x40\x00\xb9\x89\x83\xcc\x3a\ +\xcb\x81\x4c\x08\x37\x6e\xe0\x0c\x87\x91\xb6\xd2\x2c\x4d\xa5\x59\ +\xda\x3e\x81\xaf\x4c\xea\xeb\xe8\xe8\x50\x0e\xe9\x09\xc9\xe7\xf3\ +\x7e\x4e\xa0\x42\x62\xbb\x16\x9a\xaa\xf2\x78\xe7\x77\x39\xa2\x74\ +\x0c\x96\x6d\x61\xa5\x15\xb6\xfd\x3e\x49\xc9\xb6\x10\xce\x81\xf6\ +\xa2\x3c\x96\x2f\x5f\xce\xf3\xcf\x3f\xcf\xe0\xe0\x20\x2d\x2d\x2d\ +\x7e\xb5\x92\xea\xa7\x6e\xef\x5b\x76\x0f\xff\x72\xc1\xb5\x94\x1a\ +\x3c\x56\xfc\xee\x51\x2c\x3b\x12\xf0\xae\x34\xd7\x57\x8b\x9e\x25\ +\xe8\x1b\x6e\xe7\x9a\x7f\x5d\xcb\xe8\x36\x93\xc2\xa0\x8b\x50\xc5\ +\x01\x94\xa1\x77\xe3\x47\x05\x5c\x5c\x4f\xe2\x49\x89\x50\xfc\x53\ +\xa7\x08\x05\x55\x55\x49\x66\x53\xa4\x43\x5d\xe0\x81\x65\xdb\x41\ +\x21\x4e\x4b\x4b\x0b\xd1\x68\xb4\x5c\x10\x4a\x32\x99\x0c\xd4\xa2\ +\x8a\x42\x69\x72\x82\xc8\xb8\x4a\x64\x5d\x11\xda\x8a\x07\x7c\xe6\ +\xf0\xef\xc6\xe1\xa6\xb5\x80\xf6\x7a\xc8\x55\x56\x99\x0b\x1b\xc9\ +\x29\xec\x7e\x31\x4f\x6a\xb7\x83\x99\xf6\x58\x55\x58\x82\x5b\x02\ +\xd7\x94\x08\x55\xa0\x69\xfb\x16\x67\xff\x82\x18\xa0\xd0\xd3\xd3\ +\x93\x97\x52\x4a\xdb\xb6\x23\xe9\x74\x5a\xb5\x6d\xdb\x4f\x50\x39\ +\x06\xb2\xae\x9d\x47\x56\x3e\xc4\xe7\x4f\xfe\x3c\x8d\x93\xa0\xc7\ +\x49\xe1\x38\x0e\x93\x26\x4d\xc2\x48\x24\x58\x7b\x63\x1e\xb7\x34\ +\x06\xce\x0a\x90\x68\x84\xc2\xfb\xf2\xf9\x7f\x8a\x81\x5e\x16\x88\ +\x74\x25\xd2\xf3\x91\xe9\x54\x21\xce\xec\xda\x53\x98\x32\x71\x02\ +\x2f\xae\xf7\x38\xbe\xf9\x53\xbc\xe1\xfe\x38\x30\xe0\xe1\x70\x98\ +\x68\x45\x94\xa6\xba\x09\x34\xd6\x4a\xde\xdc\xbe\x85\xb6\xb6\xb6\ +\x7d\xf9\x1c\x1f\x57\xc1\x73\x42\x7c\xef\x93\x4f\xf2\xd2\x96\x17\ +\x70\xaa\xf7\x92\xd8\x1b\x61\x93\xfd\x80\x5f\x16\x67\x79\x41\xeb\ +\x90\x83\x21\xd3\xbd\x27\x81\xb4\xb5\xb5\x71\xe1\x85\x17\xb2\x7e\ +\xfd\x7a\x06\x7a\x06\xf1\xac\x0c\x6e\xc8\x41\xea\x12\x2b\x62\x05\ +\x09\x27\xcf\xf3\xc8\xe5\x72\xc1\xcf\x80\x33\x06\xa9\x9c\x5b\x86\ +\x55\x62\xb1\xd8\x8b\xae\xeb\x7e\xd2\xcf\x3a\x7a\x28\x86\xbf\x6b\ +\xdb\x47\x7e\x47\xc7\xfd\xaf\x30\xd8\x53\xc0\x2a\x48\xee\xbc\xf3\ +\x4e\x26\x4f\x9e\xcc\xf0\xf0\x30\x4b\x96\x2c\xc1\x34\x4d\x5c\xd7\ +\xa5\x50\x28\x90\xc9\x64\x98\x30\x61\x02\x7b\xf6\xec\x61\x64\x64\ +\x84\xe6\xe6\x66\xba\xbb\xbb\xff\x68\x2a\x3a\x9f\xcf\x23\x5d\x0f\ +\xcb\xf6\x09\x15\xdf\x7d\xf5\x62\xae\x3f\xf5\x11\x1e\xda\x74\x0b\ +\x3b\xb4\x65\xf4\x77\x56\xe2\xd8\x2e\xb9\x5c\xa1\x9c\x66\xa0\xc7\ +\x1b\xa1\xf9\xb2\x51\x22\xba\x8e\xbc\x67\x14\xe1\x34\x04\x20\xa8\ +\x8a\x82\x22\x04\x21\x6b\x1c\xb1\x68\x8c\x1f\xbd\x74\x1d\xf7\x5e\ +\xfc\x07\xea\x4f\xaa\x23\xd7\xbe\x85\x1e\x6b\x17\x96\xa9\x7c\x70\ +\x02\xf9\xf5\xaf\x7f\xcd\xab\xaf\xbe\xca\x2d\xb7\xdc\xc2\xb2\x65\ +\xcb\xd8\xb8\x71\x23\x42\x08\xba\xbb\xbb\x99\x34\x69\x12\x93\x27\ +\x4f\x66\xf5\xea\xd5\x74\x74\x74\x70\xec\xb1\xc7\xb2\x71\xe3\x46\ +\x8a\xc5\x22\xaa\xaa\x2e\x38\xf1\xc4\x13\x65\x40\x92\xf6\x3c\x34\ +\x5d\x05\x47\x48\x84\xdf\x94\xa7\xfd\x5b\x1e\x12\x50\x14\x1d\xa1\ +\xda\xa8\x7a\x2d\x8e\x19\x0f\xa2\xf8\xa9\x53\xa7\xf2\xc8\x23\x5f\ +\x1c\x22\x28\x00\x00\x19\xed\x49\x44\x41\x54\x8f\x50\x57\x57\x47\ +\x73\x73\x33\x8d\x8d\x8d\xdc\x7f\xff\xfd\x14\x0a\x05\xc2\xe1\x30\ +\xb1\x58\xac\x5c\x38\x8a\xe7\x79\x6d\xb5\xb5\xb5\x1f\xdb\x8f\xa8\ +\x11\x76\x5d\x37\xb0\x21\xb6\x09\x8e\xb4\x51\x2b\x6d\x7e\xb0\xfa\ +\x2b\xb4\xd5\xcc\xa0\x94\xb6\xc9\x0f\x27\xe8\x7c\x2d\x45\xb1\xe8\ +\xab\x97\x48\x38\x8c\x5d\x6d\x51\x53\x15\xc6\xce\x87\x69\xac\x99\ +\x88\x3d\x60\xe3\x49\x1f\x8d\x76\xa5\x40\x11\x02\xe9\x29\x38\x9e\ +\x0d\x02\x14\xdd\x65\xf7\xc0\x2e\xba\xd3\xdb\x70\x6c\xb0\x6d\x11\ +\x6c\x88\x72\xa5\xd5\x21\x13\xc8\x13\x4f\x3c\xc1\x69\xa7\x9d\xc6\ +\x9e\x3d\x7b\x18\x1a\x1a\xc2\xb6\x7d\xa3\xab\x69\x1a\x5b\xb7\x6e\ +\xc5\xb2\x2c\x92\xc9\x64\x40\xb0\x03\x02\xe2\xf2\xc4\x89\x13\x7d\ +\x6f\xa3\x94\xa2\x6e\xf1\x30\x13\x26\x86\x71\xb2\xaa\xb0\xfb\x22\ +\x38\x03\x61\xac\xbe\x08\x65\x07\xba\xcc\xc1\x2a\x6c\xc9\x73\xe3\ +\x8d\x37\x72\xc6\x19\x67\xf0\xfa\xeb\xaf\xe3\x79\x1e\xbb\x76\xed\ +\xc2\xb6\x6d\x74\x5d\x67\xc2\x84\x09\x14\x0a\x05\x74\x5d\x0f\xc0\ +\xc3\xe6\xe6\x66\x66\xce\x9c\xf9\x1d\xe0\x3b\xfb\x93\xfd\xb6\x6c\ +\xd9\x82\xa6\x69\x48\x45\xa2\xc7\x61\xef\xcb\x45\x46\xb6\x9a\xa4\ +\xba\x46\x11\x6c\x3b\x20\x23\x51\xb6\x7b\xaa\xea\x17\x75\x96\x8a\ +\x2e\xb7\x9c\xf9\x3b\xfe\xfe\xa9\xf3\x28\x39\x2e\x12\x9f\x6c\x21\ +\x3c\x40\x0a\xf4\x88\x43\x48\x35\x68\x8c\x4e\x22\x59\x1c\x42\x11\ +\x51\xf0\x14\x6c\xc7\x0a\xd4\x5f\x99\x94\x7d\x48\x6d\xc8\x3d\xf7\ +\xdc\xc3\x43\x0f\x3d\x44\x2e\x97\x7b\x87\x7e\x06\xd8\xb9\x73\x67\ +\xf0\xbb\x35\x6b\xd6\x50\x5d\x5d\x1d\xfc\xbd\x8c\xf5\x8c\x94\x52\ +\x1c\x39\xa5\x82\x62\xc9\x66\xf6\xe4\xe3\xd8\x53\xb3\x09\x67\x76\ +\x16\xcf\x93\x98\x7b\x2a\x18\x7d\x31\x86\x50\x65\x90\xcc\x8a\x46\ +\xa3\x41\x3e\x5f\x08\xe1\x97\xd2\xd9\x36\x93\x27\x4f\xc6\xb6\x6d\ +\x14\x04\x3b\xd4\x3d\x1c\x73\xa1\x86\x90\x0a\xd2\x12\x78\x25\x15\ +\x27\x1e\xc2\xea\x37\x70\x86\x0d\x9c\xb1\xce\x37\xc7\x1c\x73\x0c\ +\x97\x5e\x7a\x29\xf7\xfd\xea\x3e\xe4\x28\x48\x75\x90\xba\x29\x5e\ +\x60\x13\x4c\xd3\x24\x1a\x8d\x32\x86\x00\xa3\x69\x2a\x02\xbf\xe6\ +\xb1\xae\xaa\x96\x82\x95\xc3\x71\xfc\x66\x39\xa5\x52\x09\x45\x0a\ +\x42\x02\x6c\x2d\xc1\x8f\xff\xf0\x7f\xf9\xe5\xa5\x4f\x70\xd3\xeb\ +\x17\x61\x78\x31\xaa\x23\x31\x4c\xb3\x97\x52\xc9\x0b\xec\xe9\xc1\ +\x00\x8f\xef\x05\x5c\xdc\x65\x9a\xa6\x61\x59\x56\xcd\x3e\x86\xe2\ +\x81\x30\xc5\xdb\x4b\xce\xb2\xd9\xec\x01\xb9\x0d\xff\xf7\x1e\x9e\ +\x27\x39\x2e\x74\x39\x2d\x0d\x1a\x67\x4c\xba\x84\x5f\xbc\xfe\x9f\ +\xcc\x98\xda\xcc\xaa\x3d\xab\xb0\x2d\x1b\xa1\xf9\x35\x29\x75\x8d\ +\x31\x42\x5e\xa5\xaf\xd3\x14\x49\xae\x90\x65\xfc\xf8\xf1\x44\xa3\ +\x51\xb2\xd9\x6c\xd0\x6d\x21\x57\x59\x40\xd3\xab\x89\x29\x93\x58\ +\x38\xf7\x14\x5e\xda\xfd\x30\xce\x38\x17\x31\x2f\x41\xfc\xd5\x28\ +\xf9\x2d\x7e\xb1\xcd\x1d\x77\xdc\xc1\x8a\x15\x2b\xf8\xc1\x7f\xfe\ +\x80\x5f\xfd\xea\x57\xcc\x91\x47\xd0\xdd\xdd\xcd\xac\x59\xb3\x78\ +\xe1\x85\x17\x98\x34\x69\x12\x96\x65\xa1\x69\x1a\xa1\x50\x88\x54\ +\x32\x35\x56\x6b\x28\xf6\xab\x49\x71\xb0\x6c\xcb\x2f\x83\x70\xa1\ +\xb2\x14\xc2\xf6\x74\x3a\xcc\x27\x59\xdd\x73\x18\x55\x15\x55\x0c\ +\xe6\x77\x93\x1f\x74\x89\xf7\x25\xb1\x0b\xfb\x52\xbe\x07\x43\x39\ +\x3d\x68\x81\x8c\x8c\x8c\x9c\x54\x2c\x16\x7f\x72\xce\x39\xe7\x5c\ +\x7d\xdb\x6d\xb7\x91\xcd\x66\x79\xf8\xe1\x87\xd9\xb5\x6b\x17\x8a\ +\xa2\x90\x4c\x26\x89\x44\x22\x28\x8a\xc2\xe8\xe8\x68\x90\xf5\x4b\ +\xa5\x52\x94\x4a\xa5\x00\x5a\x70\xa5\x47\xa9\xe8\x71\xf1\x79\x7f\ +\xcf\x4d\x2b\xfe\x1e\xad\x66\x02\x53\xab\x8e\x61\x76\x43\x2b\x2b\ +\xe5\x2a\x4c\xcb\x44\xb8\x3e\x30\xd9\x74\x41\x96\xaa\x89\x05\xec\ +\x11\x03\x77\x30\x02\x1d\x02\x67\xd8\x0b\xa8\x48\xb6\x6d\xe3\x4a\ +\xdf\x08\x49\x04\xdf\x3c\xe5\x5e\x7e\xf4\xf2\xbf\xf2\xef\x67\x3c\ +\xc4\xea\x8d\x6f\xb2\xc9\xf9\x35\x43\x76\x1f\xb6\xed\x2f\xe6\xd3\ +\x4f\x3f\xcd\x82\x05\x0b\x68\x6f\x6f\x67\xe7\xce\x9d\xc1\x02\x25\ +\x12\x09\x4a\xa5\x12\x89\x44\x22\x48\x3b\x17\x0a\x05\xca\x0d\x6c\ +\x5c\x69\x32\x9a\x1e\xa5\xda\xa8\x23\xed\x24\x02\xc6\x0d\x02\x94\ +\xbc\xa0\x30\xe2\x91\x1b\x76\xb9\xf5\xd9\x1b\x49\xec\x70\x49\x75\ +\x3a\x20\xfd\xba\xf7\xb2\x0c\x0e\xb6\xa0\xe7\x3d\xa9\x2c\x21\x84\ +\xbe\x70\xe1\x42\xd6\xad\x5b\xc7\x39\xe7\x9c\xc3\xe1\x87\x1f\x4e\ +\x3e\x9f\xc7\xf3\x3c\x5a\x5b\x5b\x29\x14\x0a\x98\xa6\x49\x3a\x9d\ +\x26\x1e\x8f\x53\x5b\x5b\x1b\x64\x01\x83\x1a\x13\xc5\x1b\xd3\xd3\ +\xba\x8f\xcc\x0a\x85\xa1\xec\x00\xb9\xde\x4d\xfe\xfb\x4c\x2b\x38\ +\x21\xb8\x82\x29\x91\xe3\x08\x1d\xee\xb2\xab\x61\x33\x66\x2c\xcf\ +\xf0\x23\x3a\x20\x83\x40\x4f\x91\x3e\x15\x35\x1d\xf7\x88\x86\x2b\ +\x58\xd6\xf9\x04\xd7\x6a\x37\xd3\x50\x57\x83\xd5\x6f\xe1\x38\x2e\ +\xa6\xe9\x43\x33\x77\xde\x79\x27\x77\xdc\x71\xc7\x1f\xbd\xbf\xd1\ +\xd1\xd1\x03\x7e\x8e\x55\x8f\xe5\x5c\xa2\x3a\xff\xe7\xf7\x9f\xa5\ +\x36\x34\x89\xed\xc5\x5e\xa2\xd1\x28\x86\x61\xd0\xd4\xd4\x44\x6a\ +\x73\x8a\x2d\x9b\xdd\x31\xb7\xdb\xef\x68\x54\x15\xf3\x0e\xa0\xd6\ +\x96\x0b\x98\x0e\xb9\x40\xa4\x94\xfc\xf6\xb7\xbf\xa5\x9c\x60\xea\ +\xe8\xe8\x08\x20\x8b\xb2\x8d\x10\x42\x50\x28\x14\x70\x5d\x37\x10\ +\x56\x59\x3f\x03\xb8\x61\x8f\x48\x58\xe7\xe5\x0d\xcb\x09\x51\x4d\ +\x6d\xb4\x9e\x81\x4c\x17\x67\x55\x7f\x9c\xad\x72\x07\xa6\x55\x42\ +\xf1\x7c\x20\xb3\x3a\x7d\x2c\xe7\x1f\xfd\x45\x5e\x5a\xbd\x8e\x71\ +\xd2\xe3\xf4\xd9\xa7\xf0\x7d\xeb\x76\xc2\xaa\xb1\x8f\x94\x37\x56\ +\x61\xa8\x28\x82\x03\x6d\xa6\xc0\xf6\x8a\x63\x27\xc9\x25\x95\x4a\ +\xf9\xe9\x80\xb1\x60\x50\x4a\xe9\x7f\xaf\xf9\x7c\xa2\xb0\x16\xa5\ +\x60\x67\x51\x84\x8a\x6b\xfa\x0b\x97\x4e\xa5\x70\x5a\x1c\x4c\xa7\ +\x84\x16\xf5\xd8\x38\xb4\x02\xd7\x11\x34\x36\x36\x72\xf7\xdd\x77\ +\xe3\x79\x1e\xab\x57\xaf\x66\xd5\xaa\x55\xb4\xb6\xb6\xb2\x66\xcd\ +\x1a\x8e\x3c\xf2\x48\x36\x6d\xf2\x37\x57\x5d\x5d\x1d\xf9\x7c\x9e\ +\xde\xde\xde\x83\xe6\xff\xbe\x57\xac\x58\xd5\x34\x8d\x67\x9e\x79\ +\x46\x0a\x21\x84\x22\x94\x80\x3d\xe8\x4a\x9f\xaf\xa4\x29\x21\x3f\ +\x3f\xae\x86\x70\x1c\x87\x8a\x8a\x0a\xa4\x94\x41\xe9\xb1\xa5\xd8\ +\x68\xba\xe0\xc1\xed\xff\xce\x2d\x67\x3f\xce\xda\xe1\x27\x08\x35\ +\xf7\xd3\x93\xdf\x82\xed\x59\x14\xf2\x05\x14\xdd\x8f\x01\x8e\x9b\ +\xbe\x80\xee\xd4\x76\xde\xec\x5f\xc7\xc2\x19\xa7\x11\x56\x8c\xb1\ +\xb2\x33\x11\xb4\xf8\x50\xa4\x40\x22\xa8\xad\x0f\x91\xce\x67\x38\ +\xf7\x88\x7f\x20\x51\x1c\x20\x97\x2b\x31\xb5\xf6\x28\xda\x9d\x3f\ +\xe0\xba\xd2\xf7\xf2\x5c\x41\xa9\x26\xc1\xb4\xd8\x5c\x4a\xa5\x12\ +\x03\x6e\x8a\x19\x5f\x34\x99\x56\xb1\x90\x8b\xcf\xf8\x12\x35\x6a\ +\x2b\x37\x3d\x7e\x0d\xcf\x5e\xbf\x0e\x0f\x5f\xe0\x91\xa2\xce\xc0\ +\x1b\x26\x99\x5e\x87\xd4\x9e\x02\xba\x5a\x5d\xce\xed\x30\x77\xee\ +\x5c\xaa\xaa\xaa\xc8\xe5\x72\x74\x74\x74\xa0\xeb\x3a\xb1\x58\x0c\ +\x29\x25\xc9\x64\x12\xd3\x34\x69\x6b\x6b\x63\xdb\xb6\x6d\x1f\x8c\ +\xca\x52\x14\xe5\xd1\x37\xde\x78\x63\xda\xac\x59\xb3\x4e\x2b\x14\ +\x0a\x58\xd2\x45\x9f\x9e\xa7\xae\xaa\x96\xb3\xe7\x7e\x8e\x92\x69\ +\xb1\x74\xfb\x13\x9c\x39\xfb\x1c\x96\xee\xfe\x2d\xe9\xf5\x61\x0a\ +\x85\x02\x42\x88\x60\x87\xe4\x85\x87\xed\x5a\x84\xaa\x3c\xfe\xed\ +\xf7\x17\xb1\x78\xfe\xd9\x64\xf3\x29\xd6\xc7\x57\xb2\xf3\xe5\x2c\ +\xd9\x82\x19\xec\xf4\x92\x69\xe2\x58\x2a\xae\xe3\x91\x2b\xa5\xf0\ +\x1c\x1f\xcd\x95\x78\x68\x9a\xe6\xcf\x2d\xfd\xb8\x06\xe1\x71\xcd\ +\xd3\xe7\xf3\xc3\xf3\x9e\xe2\xc6\xd7\x2f\x24\x53\x8a\xa3\xe9\x1a\ +\x56\xc9\x22\x97\xdb\x97\x2b\x99\x14\x9d\x46\x3e\x9f\xf7\x53\xb7\ +\xd8\xd8\xa6\xcb\xac\xc6\x45\x3c\xd9\xfe\x33\x0e\x53\x3f\xc1\x31\ +\x0d\x8b\x79\x46\xae\xa6\xbe\xa1\x9e\xe3\x8f\x3f\x9e\xad\x5b\xb6\ +\x12\xff\x83\x83\xe5\x98\xb8\x99\x0c\xd1\x6a\x9d\x64\x32\xc9\xd7\ +\xbe\xf6\x35\x5a\x5b\x5b\xe9\xec\xec\xdc\x57\x2e\x27\x25\x3b\x76\ +\xec\x08\x16\x3f\x95\x4a\x05\x2c\x99\x3f\x06\xe9\xfc\x45\x02\xc9\ +\x64\x32\x2f\x55\x55\x55\x9d\xdc\xda\xda\x7a\x5a\x32\x99\xa4\x88\ +\x45\xf5\xc9\x3a\xc7\x34\x9e\xc9\xdc\x63\x9a\x59\xb7\xb1\x93\xef\ +\x7f\xe6\x6e\x8e\x9b\x79\x0c\x43\xcf\x2c\x63\x47\x4f\x08\xe1\xaa\ +\xa4\x52\xa9\xc0\x80\x46\x4a\x2e\xd9\x21\x87\xc1\x8d\x16\xa3\xdb\ +\xf6\xb0\xfa\x96\xbb\x83\x5e\x55\x4d\xa2\x99\xa6\xb9\xfb\x3e\xef\ +\xf7\x0f\x3f\x05\x63\xcd\x5a\xfb\x78\x09\x80\x09\x13\xc7\x53\x2c\ +\x16\xc9\x66\xb3\xe4\xf3\x79\x84\x14\x38\xa6\xf0\x85\x5c\x6d\x71\ +\xe3\x6b\x7f\x47\x24\x5c\x41\x41\xd5\x48\x76\xda\x74\xae\x4c\x21\ +\x9d\x80\xe0\xc7\xb8\xea\x71\xf4\xf7\xf7\xfb\xec\x79\xd5\x19\xab\ +\xf8\xf2\xf1\x32\xd7\xf3\x48\x17\x13\xa8\xaa\xc6\xaa\x55\xab\x78\ +\xf1\xc5\x17\xf9\xd2\x97\xbe\xc4\xb2\x65\xcb\xa8\xa8\xa8\xe0\xfe\ +\xfb\xef\xa7\xad\xad\x8d\xae\xae\xae\xc0\x3d\xae\xa9\xa9\x39\xa8\ +\xb5\x8b\xc7\xe3\x1f\x0c\x0d\x48\x55\xd5\x69\xe5\xf6\x4c\xb6\xf0\ +\x6f\xa8\x52\x8f\x61\xba\x45\x4c\xa7\xc4\x50\xa6\x97\xbe\x6c\x2c\ +\x80\xeb\x71\xf6\xf9\xde\xd7\x5e\x7b\x2d\x4b\x96\x2c\xa1\xe7\xbe\ +\x04\xae\x6b\x13\x05\xf4\x4a\x2b\x28\x1c\xdd\x59\xe8\xe7\x88\xcf\ +\x38\x54\x84\x35\xa4\xa9\x62\x27\x74\xdc\x11\x03\xab\x3f\x8c\x97\ +\xd5\x10\x9a\x0c\x82\xc6\x6c\x36\xeb\xef\x4c\xd7\x23\xdc\x2d\xd8\ +\xf6\xbb\x1c\xe9\xbd\x0e\x4e\x21\x81\x5d\x90\x38\x45\x89\x94\xa0\ +\xa8\x6a\x50\xb8\x67\x84\x22\x6c\xea\x5a\x45\xb5\x6c\xf6\xf3\x1d\ +\x86\x87\xae\x18\xec\x18\xdd\xc8\xf1\x47\x9f\xc0\x78\xed\x70\x36\ +\xed\x5e\x13\x70\xbd\xda\xda\xda\xe8\xee\xee\xf6\x05\x3f\x86\xd8\ +\x0e\x0c\x0c\x70\xc3\x0d\x37\x30\x3a\x3a\xca\x93\x4f\x3e\x19\x54\ +\x28\xe7\x72\xb9\xe0\x24\x94\x49\xe5\xb5\xb5\xb5\xe5\x62\xa4\xd1\ +\xe1\xe1\xe1\x85\x8d\x8d\x8d\x66\x6f\x6f\xef\xa1\x15\x88\x94\xf2\ +\xb0\x80\x9d\xa8\xb8\xa8\x42\x63\xb4\x38\x40\x53\x74\x2e\x35\x15\ +\x69\xb2\x56\x1a\x5d\x0d\xa3\xa0\x60\x5b\x26\xd2\x11\x38\x8e\xc3\ +\x33\xcf\x3c\xc3\xe8\xe8\x28\x27\x9f\x7c\x32\xbf\xff\xfd\xef\x03\ +\x2c\x6a\xd9\xb2\x65\x81\xc1\xef\x2d\xc5\x59\x34\x7e\x1c\x85\xac\ +\xc7\x71\xd3\x3f\xce\xa6\xc1\x65\x38\x33\x72\x54\xa9\x92\xec\xe6\ +\x0a\x32\xaf\x57\xfb\x86\x58\xf1\x8b\x7a\x16\x2f\x5e\xcc\xec\xd9\ +\xb3\x79\x69\xc9\x4b\x78\x19\x09\x8c\x42\x05\x58\x9a\x85\x88\xf9\ +\x0b\xa8\xeb\x3a\x99\x4c\x06\xc7\x71\xd0\x74\x85\x64\xb7\x83\x5e\ +\x5f\xf4\x93\x55\x38\x78\x9e\xc1\x40\xe8\x55\xc2\xc5\xd3\xc9\xd7\ +\xf6\xb0\xdb\x7a\x19\x5d\x35\xb8\xe8\xa2\x8b\x98\x3d\x7b\x76\xd0\ +\xe5\xc7\xf3\x3c\x86\x86\x86\x98\x3a\x75\x2a\xdf\xf8\xc6\x37\x10\ +\x42\x10\x0a\x85\xde\x35\x07\x53\x2e\x32\xcd\x64\x32\xd4\xd4\xd4\ +\x50\x28\x14\x9c\xd1\xd1\xd1\xed\x1f\x14\x51\x4e\x09\x1a\x98\xa9\ +\x7e\x6e\xb5\x50\xb9\x8d\xb6\xca\xeb\x38\x62\xf1\x09\x5c\xf3\xe4\ +\x05\xb4\x4d\x6c\x06\x01\x96\x65\xe2\x8d\x61\x39\x6f\xbe\xf9\x26\ +\x8d\x8d\x8d\x64\x32\x99\x72\xd3\x64\x86\x87\x87\x0f\xf0\xc0\x84\ +\x10\x94\x6c\x93\x0b\x5a\x6e\x65\xc4\xdb\xc0\x3f\x2f\xb8\x9b\x97\ +\xda\x97\x90\x8e\x6c\xa5\xdd\xde\x15\xf4\x16\x29\x0b\xe4\xf2\xcb\ +\x2f\x27\x97\xcb\x71\xda\x69\xa7\x71\xfb\xed\xb7\x73\xc2\x89\x0b\ +\xe8\xee\xee\xe6\xc8\x23\x8f\xe4\xd1\x47\x1f\x65\xf2\xe4\xc9\x7e\ +\x7b\xc1\x54\x8a\x54\x2a\xc5\xe0\xe0\x20\x95\x95\x51\x32\x99\x0c\ +\xa6\x69\x52\xf0\xfc\x32\x08\x4f\x95\xfc\xf4\x8d\x7f\xe2\xaa\x53\ +\xbf\x8d\xed\x94\x30\x4d\x18\xd7\x54\x4b\x5f\x5f\x5f\xa0\x6a\x35\ +\x4d\xc3\x30\x0c\x7a\x7a\x7a\x10\x9a\x40\xd5\xfc\x66\x01\x39\x33\ +\x43\xa5\x51\xed\x57\x69\x45\x4d\xec\x3c\x63\x88\xf4\x81\xbd\xc5\ +\x3e\x30\xe6\xa2\x10\x82\x44\x22\xe1\xe7\x05\x34\x49\xc9\x8a\x61\ +\xab\x70\xe5\x6f\xcf\xe6\xd1\xaf\x6c\x44\x8b\x58\xdc\xb7\xe9\xdb\ +\x78\x2e\xc4\x87\x92\x41\x50\x74\xeb\xad\xb7\xbe\x23\xdf\xbd\x3f\ +\x1b\xdd\x87\x46\x60\x78\xa0\xc4\xd9\xe7\x9e\xc6\x95\xcf\x5c\xcf\ +\xe2\x19\x17\x33\xa9\x76\x06\x03\xa4\x91\xde\xce\xa0\xb7\x48\xb9\ +\x8e\xbc\xbb\xbb\x9b\x13\x4f\x3c\x91\xdf\xfc\xe6\x37\x01\x15\xb5\ +\xdc\x4c\x40\x4a\x19\xb4\xf7\xd0\x75\xdd\x8f\xac\xc7\x3e\xaf\x6c\ +\x84\x2b\x8a\x1e\xa5\xb8\x47\xcf\xae\x12\xf1\xad\x16\xff\xf0\xdd\ +\xaf\xfb\xf9\x7b\x05\x46\x46\x46\x0e\x70\xf7\xcb\xc5\xa4\x0a\x82\ +\xf8\x94\x0c\xc7\x9e\x59\xc5\xaf\xfe\x76\x25\x67\xde\x39\x85\x67\ +\xae\x58\xc1\xe6\xce\x0e\x9e\xea\xbd\x91\xad\x8f\x8f\x32\xba\xc9\ +\x37\xde\x86\x61\xb0\x7d\xfb\x76\x1a\x1b\x1b\x3f\x38\x81\x94\x17\ +\x58\x51\x14\x34\x4f\xa2\xea\x02\xd7\xf1\x60\x54\x72\xca\xa5\x87\ +\x93\xeb\xf2\xb0\xf2\x12\x33\xe3\x05\x1c\xa5\x62\xb1\x28\xcb\xb5\ +\xea\x6f\x17\xae\x10\x62\xdf\x0e\x32\x7c\x17\x7a\xff\xbf\xdb\x8e\ +\xcd\xae\xec\xc6\x31\xd6\xbc\x15\xb0\x91\x15\x45\xe1\x5b\xdf\xfa\ +\x16\xd1\x68\x34\x20\xc1\x95\xe7\xdf\xbc\x79\x73\x80\x18\xec\xff\ +\x99\xe5\xfa\x12\xc3\x30\xb8\xfa\xea\xab\x59\xbe\x7c\x39\x83\x2f\ +\x0e\xe2\x7a\x1e\x21\xc7\xa6\xa9\x51\xee\x6b\xed\x37\xa6\xa6\xca\ +\xbd\x7c\xcb\xc1\xad\x22\x05\x52\x08\x6a\xea\x74\xe2\x99\x11\xae\ +\x38\xe9\x46\xfa\xb3\xbb\x18\x49\xa4\x38\x7e\xe2\xd9\xbc\x61\xff\ +\x9c\x32\x85\xab\x6c\x53\xde\x0b\xe9\xe1\x7d\x09\x44\x08\xc1\xb4\ +\x69\xd3\x48\xa5\x52\x0c\xdc\x6b\xd2\x63\x9a\x08\x45\xe2\xe7\x6d\ +\xfd\xc0\x24\xa4\x4a\xa4\x22\xcb\xa4\x69\x31\x30\x30\xb0\x6c\x64\ +\x64\xe4\x94\xb7\xcf\x35\x67\xce\x9c\xb8\x69\x9a\xe3\x84\x10\x60\ +\x40\x4d\x4d\x98\x3d\x7d\x7d\x78\x8e\x82\xa6\xe8\x64\xcd\x24\x4d\ +\x91\x36\x76\xba\x71\x4c\xd3\x0e\xba\xef\xd8\xb6\x4d\x34\x1a\x0d\ +\xd2\xb6\xfb\x7b\x72\x65\xb8\xfb\x80\x93\xe8\x82\x65\xfa\xc4\xed\ +\xab\xae\xba\x0a\x21\x04\x0f\x3e\xf8\x20\xdf\xfe\xf6\xb7\xe9\xea\ +\xea\x62\xe6\xcc\x99\x8c\x8c\x8c\x60\xdb\x36\x4d\x4d\x4d\xbc\xf2\ +\xca\x2b\x84\x42\x21\xc6\x8f\x1f\xcf\xba\x75\xeb\xb0\x6d\xdb\xc7\ +\xe6\x3c\xb0\x2c\x70\xa5\xcd\xb5\x2f\x9e\xc7\xff\x3d\xf5\x29\xee\ +\xdd\xfc\xcf\xf4\xa4\xde\x42\x4b\xa8\x94\x0a\x26\x99\x8c\x79\xc0\ +\x26\x78\x2f\x6c\xc6\xf7\x63\xd4\x39\xf2\xc8\x23\xb9\xec\xb2\xcb\ +\x38\xe2\x88\x23\xb8\xf9\xe6\x9b\xe9\xec\xec\xa4\xa6\xa6\x86\x91\ +\x91\x11\x74\xdd\x6f\x2e\x39\x38\x38\x88\xae\xeb\x68\x9a\xc6\xe0\ +\xe0\x20\xe9\x74\xda\xfb\x63\x89\xa3\x52\xa9\xe4\xef\xc8\x2a\xc9\ +\xb8\x71\x95\xfc\x68\xd9\xbf\x70\xd7\xdf\x2d\xe3\x97\x6f\x5c\xcf\ +\x9b\xa9\x2d\x1c\x31\x69\x0e\xae\x37\xc6\x0e\x1c\xb3\x21\x53\xa7\ +\x4e\x0b\xe2\x15\x55\x55\x59\xb1\x62\x05\xcd\xcd\xcd\xef\xea\xeb\ +\xab\x21\x08\xcd\x4d\xd2\xb7\xb2\x48\x21\xe9\xb0\x6b\xd7\x2e\xae\ +\xbc\xf2\x4a\xf6\xee\xdd\x4b\xb1\x58\xa4\xb1\xb1\x91\xca\xca\x4a\ +\x74\x5d\x67\xd9\xb2\x65\xd4\xd5\xd5\xd1\xda\xda\x4a\x4f\x4f\x4f\ +\x50\x4e\x5d\x2c\x16\x83\xb8\xc7\x49\x0b\x92\xfd\x7e\x31\xe9\xbf\ +\x3e\x79\x3e\x15\x46\x98\x6c\xce\x25\xdd\x63\xd2\xb9\x22\x8b\xaa\ +\xa8\x07\x6c\x9a\xb1\xcd\x11\x06\x98\x34\x69\x92\xdd\xdd\xdd\xed\ +\x1e\xb2\x72\x84\xda\xda\xda\x35\x4d\x4d\x4d\xc7\x1d\x2c\xa7\xb6\ +\x3c\x5c\xd7\xa5\xbf\xbf\x7f\xc6\xc8\xc8\xc8\xce\xfd\x7f\x3f\x7d\ +\xfa\xf4\x78\xa9\x54\x1a\xa7\x28\x0a\xc3\x13\x5c\xfe\xf1\x5b\x13\ +\xb1\x2c\x97\x9a\xc2\xb1\x1c\x35\x67\x0a\x4b\x77\xff\x06\x4d\xd3\ +\x58\xf5\x83\x04\xa9\x2e\x5f\x17\x54\x56\x54\xb1\xe8\x96\x2a\x86\ +\xee\x6f\x44\x3a\xbe\x5a\x58\xbb\x76\x2d\xd1\x68\x94\x70\x38\x1c\ +\x30\xef\xcb\x69\x5d\xc7\xb5\x31\xa2\x21\xdc\x92\x0c\x9a\x0b\xec\ +\xcf\x52\xf9\x53\x19\xd2\xe6\xe6\xe6\xfd\xaa\x7a\x64\x90\xb3\xf9\ +\x63\x9b\xb5\xa7\xa7\x87\x6d\xdb\xb6\x21\x84\xa0\xb2\xb2\x32\x28\ +\x8e\x2d\x6f\xbe\xb5\x6b\xd7\x7e\x29\x99\x4c\x3e\x70\x48\x4f\x88\ +\x61\x18\xcc\x98\x31\x03\x80\x7e\x33\xc1\xe4\xb3\xf3\x44\xc2\x1a\ +\xc2\x34\xb0\x87\x42\x38\xc3\x61\x9c\xe1\x03\x1b\x59\x46\x22\x11\ +\xee\xbd\xf7\xde\xf4\xbb\x4d\x59\x26\x97\x85\x73\x50\xca\x78\x0c\ +\x6d\xb1\xe8\xd8\xf3\x0a\xcf\xdf\xb9\x04\xcf\x14\xd8\x79\x0f\xd7\ +\xf4\x8d\xf1\xbe\xbc\xb9\xc0\x76\x1c\xa4\xed\xeb\xfa\x39\x73\xe6\ +\xd0\xda\xda\x4a\x2c\x16\x63\xdb\xb6\x6d\x8c\x8e\x8e\xd2\xd4\xd4\ +\xc4\xd0\xd0\x10\xfd\xfd\xfd\x78\xa6\xaf\xba\x4c\xd3\x0c\xe8\x47\ +\x0a\x02\xc7\x94\xd8\xb2\x84\x42\x08\xcb\x2d\xa1\xab\x1a\x48\x05\ +\x4d\xd5\x28\x95\x8a\x0c\x0d\x0d\x21\x10\xac\x2c\x6d\xe5\x9c\xcb\ +\x62\x28\x52\xe0\x9a\x80\xa5\xfb\xd7\x36\x60\x50\xda\x5d\x81\x97\ +\xf5\xaf\xad\x50\x28\x50\x5b\x5b\x1b\x54\x1b\x47\x8c\x8a\x20\xce\ +\x8a\x46\xa3\x7f\xd6\xe3\x7a\x5f\x02\x29\xe7\xb4\x15\x04\xa3\x5a\ +\x9c\xf9\x2d\x61\x32\xd9\x34\xed\x77\x58\x4c\xac\x99\x82\xeb\x65\ +\x11\x8a\xc0\x72\x1d\x74\x5d\x20\x4d\x0d\x44\x82\xb3\xce\x5c\x3c\ +\x54\xb6\x01\x65\xa3\xd7\xd5\xd5\x45\x28\x14\xe2\xf4\xd3\x4f\x67\ +\xfd\xda\x75\xb4\xdf\xec\x20\x85\x0e\x42\x47\x93\x6e\xd9\xd1\xc6\ +\x88\x2a\x81\x8b\x5c\x66\xa2\x58\xa6\xef\x56\xab\xaa\xca\xc0\xc0\ +\x00\xae\xeb\x52\x59\x59\x49\x26\x93\x09\x58\x1e\x8e\xe3\x10\x0e\ +\x87\x39\xef\xbc\xf3\x48\xa7\xd3\x2c\x5f\xbe\x3c\xc8\x08\x0e\x47\ +\x8b\x9c\x7e\x55\x15\xc7\x1a\x57\xd1\x30\xc5\x64\x51\xeb\x17\xb8\ +\x7f\xc5\x4f\xf9\xf8\x91\x0b\xb9\xf3\xb9\x6f\xd3\xff\x98\x87\xa5\ +\xfa\x0d\xd2\x0a\x58\x18\xba\x42\x23\x47\x72\xfa\x51\xe7\xf0\xe4\ +\xb6\xbb\x50\x9d\x4a\x72\x2d\xbd\x8c\xe4\x25\xa5\xd1\x48\xe0\x31\ +\x1e\x73\xcc\x31\x6c\xdf\xbe\x9d\x7c\xa6\x80\x31\x37\x49\x69\x57\ +\x04\xa1\xec\xf3\x0e\x0f\xa9\x40\xaa\xab\xab\x03\x86\xa0\x82\x00\ +\x4d\x62\x3b\x2e\x7f\x33\xf1\x26\x12\x8d\x77\x05\xbb\x20\xe5\x66\ +\x19\x77\x41\x9c\x71\x0d\x3a\x4e\x1e\xec\xa1\x0a\xdc\x11\x03\x7b\ +\xd0\x40\x16\x55\xdc\xbc\x8a\xa6\x69\x94\x4a\x25\x7e\xf3\x9b\xdf\ +\x00\x70\xc6\x19\x67\xb0\x7c\xf9\x72\x1c\xc7\x21\x1e\x8f\x53\x53\ +\x53\x43\x4f\x4f\x0f\x8b\x16\x2d\x62\x64\x64\x84\x35\x6b\xd6\x10\ +\x8d\x46\xd9\xbb\xa7\x1b\x81\xc0\xb2\x6c\x3c\x9b\x20\x3a\x0e\x87\ +\xc3\xa4\x52\xa9\xe0\x5a\xfb\xfa\xfa\x08\x87\xc3\x58\x96\x45\x22\ +\x91\x60\xca\x94\x29\x81\x6b\x2c\x84\xc0\x0d\xbb\xa8\x8a\xc6\x26\ +\xef\x7e\x2e\x09\xdd\xce\x53\xbb\x7f\xc4\x4e\x6f\x29\x3b\xdf\x78\ +\x0e\x4f\x2a\x7e\x1a\xda\x94\x7e\x4f\x47\x43\x30\x38\x94\xe3\x3b\ +\x17\xdc\xca\xff\x7e\xf6\x0c\xee\xfe\xfc\x12\xf6\xf4\xf7\xf0\x74\ +\xef\xad\x0c\xda\x5d\x81\x0a\xf4\x3c\x8f\x78\x3c\x3e\x86\xe1\x29\ +\x78\x8e\x87\x6b\x9a\x08\x95\x03\x02\xc9\xbf\x98\x4a\x1a\x90\x64\ +\x0d\x23\xd8\x09\x25\xd3\xf4\xdb\x7c\xdb\x06\xe7\x9d\xb8\x98\xbc\ +\x99\x09\xe8\xa1\x23\x4e\x9a\x8a\x50\x08\x33\xab\xb0\x70\xca\xf9\ +\xd4\x4e\xd1\x88\x1e\x95\xa1\xf6\xec\x11\x2a\x4f\x89\x07\xdd\xb1\ +\xcb\x5e\xd0\xc8\xc8\x08\xe1\x70\x18\x45\x51\x98\x33\x67\x0e\x86\ +\x61\x30\x69\xd2\x24\x6c\xdb\x0e\x3a\x44\x9c\x78\xe2\x89\xa4\xd3\ +\xe9\x31\x57\x52\x39\xa0\x4d\xb9\xeb\xba\x41\xcb\xf0\x72\xb3\x9c\ +\x78\x3c\x1e\xd4\x3d\x76\x74\x74\xf0\xec\xb3\xcf\xa2\xaa\x6a\xd0\ +\x81\xa2\x50\x2c\x62\x3b\x16\x28\x36\x77\xb4\x5f\xc6\x70\xb6\x0f\ +\x89\x24\x3f\xe2\xb2\xfe\xde\x38\xae\xb7\xaf\xeb\xb5\xa2\x28\x8c\ +\x0c\x98\xc4\x6a\x42\x28\xaa\x4b\x44\xaf\xa4\xa6\xb2\x86\x78\xae\ +\x2f\x48\x96\x95\x89\x7f\x5d\x5d\x5d\x7e\x73\x4e\x55\x41\xba\xde\ +\x01\x34\xd7\x3f\xe7\x02\xbf\x2f\xb7\xb7\xac\x3a\x04\x7e\xa0\x55\ +\xf6\x2a\xf6\xb5\xff\xb6\x71\x15\x17\x45\x15\x7c\x7a\xd2\x37\xc9\ +\xc8\x5d\x5c\xbf\xe8\x31\x1e\x5d\xfd\x20\xcd\x93\x74\x9e\x58\x71\ +\x5f\x70\x93\xd1\x68\x94\x2b\xaf\xbc\x92\xc9\x93\x27\xd3\xdf\xdf\ +\x8f\xeb\xba\x2c\x5d\xba\x14\xcf\xf3\x68\x6f\x6f\xc7\x71\x9c\x40\ +\x1d\x95\x03\xcb\x90\x66\x04\xf1\x8b\x6b\xf9\x49\xa0\x50\x28\x44\ +\x5d\x5d\x1d\x42\x08\x6a\x6b\x6b\xdf\x76\xc1\x63\x24\x03\x45\x04\ +\xa5\xd0\x9e\xe7\x51\x9d\x51\xe9\x5a\x52\x20\xd7\xed\x62\x65\x3d\ +\xd6\x14\x56\xe2\x14\xc1\xb3\x25\x8a\x2a\x70\x0d\x77\x5f\x5b\x43\ +\x14\x74\x5d\xc1\x19\xe3\x35\x83\xff\xf4\x20\x04\xb8\xae\x87\x69\ +\xfa\xfc\x33\xd7\x71\xa8\x6d\xae\x27\x99\x8f\x13\x8a\x99\x84\x2a\ +\x55\xd2\xb6\xdf\x37\xf2\x60\x4a\x15\xde\x57\xa4\x5e\x5e\x78\x81\ +\xdf\x30\xc0\xf1\x6c\x4a\xa6\x89\xa6\xe8\xfb\x0a\x60\x0c\x0f\x4f\ +\x0a\x5a\xab\x67\xf0\x9b\x3d\xbf\xa0\x2d\x74\x22\xf5\x91\x16\x0c\ +\x25\x83\xf4\x08\x04\x52\x2a\x95\x64\x28\x14\x12\x9d\x9d\x9d\xfb\ +\x47\xef\x52\x08\x21\x5c\xd7\x45\xda\x60\x7b\xde\x98\x43\xa8\x82\ +\x02\x96\x63\x63\x3a\x92\xd1\x91\x04\x72\x8c\x65\x5f\xce\x4c\xe6\ +\xf3\xf9\x75\x1d\x1d\x1d\x0f\xd6\xd7\xd7\xff\x58\xd3\x34\xbf\x0f\ +\x7c\x9d\xc7\xe1\x0b\x2b\xc0\xae\xa2\x32\x57\x45\x75\x75\x35\x97\ +\x5c\x72\x09\xcb\x97\x2f\x67\x78\x70\x18\xc5\xc9\xe1\x86\x5c\x3c\ +\xcd\xc3\x8d\xba\x01\xe4\x51\xde\x78\xca\x58\x43\x9c\xa9\xd3\x6b\ +\xd8\xd1\xb5\x97\xd3\x0f\xfb\x3b\xde\x1c\x5e\x4d\x32\x51\x64\x76\ +\xc3\x09\xbc\xe5\xfc\x01\xcb\xf2\xb3\x86\x85\x7c\x81\x07\x7f\xf9\ +\x30\x3f\x79\xea\xfb\xfc\xcd\x27\x4e\xe5\x67\x8f\xfd\xc4\xcf\x82\ +\xaa\x7c\x30\x27\x44\x4a\xa9\x4a\x29\x65\xa9\x54\x12\x02\x81\xe7\ +\xb9\x54\x44\x15\xfe\xf9\xe1\x8b\x91\x9e\xc0\xb6\x7d\x42\xb6\xa7\ +\xb9\x08\x11\x02\x24\xaa\xe2\x1b\xb3\x91\x54\x9c\x5c\x65\x7f\xa0\ +\x6e\x00\x1a\x1b\x1b\xc5\x1b\x6f\xbc\xf1\x95\x62\xb1\xf8\x10\xe0\ +\x45\xa3\xd1\xeb\xa7\x4d\x9b\xf6\xcd\x64\x32\x89\xa3\x48\xa6\x7f\ +\xa5\x92\xd6\x96\x30\x76\x41\x62\x17\x3d\x52\x9d\x36\x99\x6e\x87\ +\x25\xff\x6c\x07\x5e\xfb\xd8\xb3\xa6\x44\x2c\x16\x43\xd3\xb4\x5d\ +\xf9\x7c\xfe\xce\x96\x96\x96\x1f\x97\x79\x58\x6e\xb5\xa0\xed\xd4\ +\x28\x5a\x58\xf2\xd2\xfa\x7e\x7e\xf6\xfd\x5f\xb1\x77\xef\x5e\x6e\ +\xbf\xfd\x76\x6e\xb8\xe1\x06\x74\x5d\xa7\xbe\xbe\x9e\x62\xb1\xc8\ +\xee\xdd\xbb\x59\xb4\x68\x11\xeb\xd6\xad\x63\xfd\xfa\xf5\xe4\x72\ +\x39\xc4\x98\x47\xa7\xeb\x2a\xdf\x79\xf5\x0b\xdc\x7e\xc1\x0b\x7c\ +\x7f\xcd\x97\xc8\x5a\x09\x14\x5d\x90\xcf\x9a\x64\xb3\x3e\xea\xeb\ +\x58\x2e\x23\x72\x33\x4e\xdd\x56\x96\xed\x4e\x21\x5d\x49\xb1\x54\ +\x44\x28\x3e\x13\xf2\x90\x0b\x64\xd7\xae\x5d\x9f\x6a\x69\x69\x19\ +\x48\xa7\xd3\x7e\x13\xfd\x71\x02\xd3\x89\xe2\xd5\xee\x61\xb4\x90\ +\x25\x22\x6b\x7c\x81\x44\x20\xa4\x84\xe8\x4a\x77\x30\xbf\xfe\x34\ +\x8e\x9e\x3e\x8f\xd7\x77\xbc\xc2\x11\xb1\xa3\x59\xea\x3d\x8f\x65\ +\x39\x41\x8e\x22\x12\x89\xd8\xc5\x62\xb1\x34\xf6\xb3\x13\x0e\x87\ +\x31\x0c\x03\x03\xe8\xff\x95\x43\xbf\x92\x7b\x17\x5a\xab\xbe\x3f\ +\xc5\x55\x64\xb3\xd9\x6d\xbb\x76\xed\xba\x41\xd7\xf5\x37\x01\xb5\ +\x4c\x44\x90\x42\xe2\xb9\x3e\x27\xca\x35\x21\x6a\x84\x79\xfa\xe9\ +\xa7\xb9\xf6\xda\x6b\x79\xe9\xa5\x97\x28\x95\x4a\x44\xa3\x51\xfa\ +\xfb\xfb\x89\xc5\x62\x0c\x0f\x0f\xd3\xd9\xd9\x49\x38\xec\x27\xd7\ +\x4a\xa5\x12\x8a\x50\xb0\x5d\x0f\xc7\xb3\xa9\xab\x37\xb8\xfe\xb5\ +\x4f\xfb\xea\xaf\x4f\x32\xb4\xb9\xc8\x9e\x65\x79\x14\x6d\x8c\x9d\ +\xe8\x29\x24\xf2\x43\xa0\xba\x0c\x15\xf6\xb2\x77\x6d\x9a\x5c\xae\ +\x04\x82\x43\xef\x65\x8d\x31\xef\x06\x03\xd6\x05\x10\xb2\xa0\x98\ +\xf6\x18\x79\xd3\xc4\xca\x7b\xb8\x5e\x0e\xc7\x71\x28\x19\x2e\xb6\ +\x5b\xc1\x92\xa1\x9f\x70\x4e\xe3\xb7\x78\x78\xeb\x2d\xec\x16\x2f\ +\x92\xd8\xbe\x02\x4f\xba\x64\xb3\xd9\x20\x3e\x79\x3b\x95\xa8\xad\ +\xad\x8d\x1b\x6f\xbc\x91\x89\x13\x27\xf2\xcb\x5f\xfe\x92\xae\xae\ +\x2e\xc6\x8f\x1f\xcf\xb6\x6d\xdb\xa8\xaf\xf7\xbb\x33\x74\x75\x75\ +\x61\x18\x06\x91\x48\x84\xae\xae\x2e\x84\x10\x83\x89\x44\xe2\x37\ +\xe5\xb0\xa7\x5c\x60\x34\x61\xc2\x04\xd2\xc3\x69\x5e\xbf\x3e\xe7\ +\xc7\x22\x8a\xca\xcb\x2f\xbf\xcc\x86\x0d\x1b\x82\x16\x1d\xe5\xe8\ +\xbe\xfc\xb5\x9c\xb3\x28\x63\x76\xae\xeb\x52\xdb\xa9\xb1\xe6\xc7\ +\x29\xac\x8c\x87\x53\x92\x38\x79\x89\xf4\x7c\xb7\xa8\xdc\x8b\x45\ +\x51\x14\x8c\x90\xc1\x75\x5f\xf8\x21\x6e\xc1\x8f\x9f\x24\xa0\xee\ +\xc7\x75\x3e\xa4\xd0\xc9\xfe\xf8\x90\xae\xeb\x2c\x5e\xbc\x98\x75\ +\x6b\xd6\xb1\xe9\x66\x0b\x94\x10\x6e\xd1\xc4\x74\x0b\x38\xb6\x43\ +\xa9\x52\xe2\x48\x0b\x43\x53\x79\x76\xe8\x26\x4e\x98\x72\x1a\xf9\ +\x64\x89\x91\xb7\x7a\xd9\xf3\x72\x81\x62\xf1\xdd\x9f\x8a\xe6\xba\ +\x2e\x33\x66\xcc\x20\x1e\x8f\xf3\xc9\x4f\x7e\x92\x19\x33\x66\x90\ +\x4a\xa5\x38\xee\xb8\xe3\x68\x6b\x6b\xa3\xbf\xbf\x9f\x50\x28\x14\ +\xa4\x46\xcb\x4d\x64\xde\x8e\x3a\x94\x69\x3f\xe5\xf4\xf1\xaa\x55\ +\xab\x48\xa5\x52\xbc\xfa\xea\xab\x18\x86\x41\xb1\x58\x0c\xc0\xbf\ +\x72\x92\x69\x2c\x6e\x19\x50\x14\xa5\xcc\x48\x98\xfe\xb9\xcf\x7d\ +\x4e\x39\xf5\xd4\x53\x79\xf8\xe1\x87\xc9\x66\xb3\xe4\xd4\x5c\x60\ +\x43\xcb\x0d\x30\x5d\xd7\x27\x51\x94\x89\xe5\xd5\x4a\x03\x4e\xd8\ +\xc1\x52\x2c\x22\x91\x08\x85\x42\x21\xe8\x6c\x71\x48\xb9\xbd\xfb\ +\x0b\x66\xcd\x9a\x35\x6c\xd8\xb0\x81\x4f\x7d\xea\x53\x6c\xde\xbc\ +\x99\x81\x81\x01\x96\x2e\x5d\x4a\x3e\x9f\xc7\x75\x5c\xa2\x49\x85\ +\xa1\x0d\x16\x85\x3e\x87\xe4\xce\x04\xcf\x75\xdf\x87\xa2\x0b\x14\ +\x15\x14\x6d\x7f\xba\xa6\xfa\x0e\x44\x76\xd5\xaa\x55\x2c\x58\xb0\ +\x80\xdb\x6e\xbb\x8d\xa5\x4b\x97\x22\xa5\xe4\x91\x47\x1e\x21\x9f\ +\xcf\x13\x0e\x87\x83\xee\x0e\xa5\x52\x89\xe5\xcb\x97\xbf\x2b\xd5\ +\xbf\x0c\xb5\x4b\x29\x39\xec\xb0\xc3\x58\xb2\x64\x09\xba\xae\x73\ +\xe2\x89\x27\xb2\x70\xe1\x42\xee\xbd\xf7\x5e\x2a\x2b\x2b\xa9\xaf\ +\xaf\x27\x9f\xcf\xb3\x67\x8f\xdf\x71\x63\xeb\xd6\xad\x57\x27\x12\ +\x89\xc7\x00\x66\xcc\x98\x51\xb8\xe4\x92\x4b\x22\xa3\xa3\xa3\x5c\ +\x7e\xf9\xe5\xdc\x7b\xef\xbd\x9c\x7f\xfe\xf9\xb4\xb7\xb7\x33\x67\ +\xce\x1c\x9e\x7b\xee\x39\x66\xce\x9c\x49\x43\x43\x03\xc9\x64\x92\ +\x55\xab\x56\xd1\xdb\xdb\x1b\xb8\xe7\x1f\xfb\xd8\xc7\x58\xbb\x76\ +\x2d\xbb\x77\xef\xe6\xb0\xc3\x0e\x63\xd7\xae\x5d\x1f\x8c\x40\xca\ +\x5e\x48\x2e\x97\xa3\xa1\xa1\x01\x21\x04\xb3\x66\xcd\xe2\xd5\x57\ +\x5f\xa5\xb1\xb1\x91\xeb\xaf\xbf\x9e\x07\x1f\x7c\x90\xc4\x8e\x04\ +\x8a\x69\x12\x8e\x39\x34\xce\xf6\x4b\xaa\xcb\xcc\xf1\x72\xd3\xe2\ +\x77\xab\x1d\x0f\x87\xc3\xdc\x7c\xf3\xcd\xef\xfa\xd9\x65\x1a\x6b\ +\xb9\x9b\x36\x10\x60\x45\x6f\xbf\xc6\x2b\xae\xb8\x82\x33\xcf\x3c\ +\x93\xe5\xcb\x97\x07\xde\x61\xb9\xe1\x81\x94\x92\xd1\xd1\x51\xf6\ +\xec\xd9\x13\x08\x74\x6c\x9e\xa0\xc2\xa8\xb2\xb2\x52\xbc\xfe\xfa\ +\xeb\x9c\x7b\xee\xb9\xdc\x70\xc3\x0d\x58\x96\xc5\xe6\xcd\x9b\xe9\ +\xea\xea\xa2\xae\xae\x8e\x5c\x2e\xc7\xde\xbd\x7b\xe9\xec\xec\xc4\ +\xb2\x2c\x0a\x85\x02\x52\x4a\x8e\x38\xe2\x08\x1e\x7b\xec\x31\x74\ +\x5d\x27\x1a\x8d\x52\x51\x51\x41\x22\x91\x38\x28\xd4\xf7\x7d\x55\ +\x27\xb6\xb5\xb5\xc9\xa6\xa6\x26\x26\x4f\x9e\xcc\xc0\xc0\x40\xe0\ +\x31\xc5\xe3\x71\x1e\x7c\xf0\x41\xde\x78\xe3\x0d\xbe\xfa\xd5\xaf\ +\x72\xfb\xed\xb7\x33\x38\x38\x48\x24\x12\xa1\xbe\xbe\x9e\x95\x2b\ +\x57\xd2\xdc\xdc\xcc\xae\x5d\xbb\x18\x1d\x1d\xa5\xae\xae\x8e\x81\ +\x81\x01\x76\xef\xde\x7d\x51\x22\x91\xb8\x7f\x6c\x51\x66\x56\x55\ +\x55\xcd\x14\x42\xbc\x97\x4e\x6d\x9e\xeb\xba\x5d\x83\x83\x83\x6f\ +\x96\x6d\xc8\xe1\x87\x1f\x5e\x68\x6e\x6e\x3e\xa0\xcb\xf6\x1f\x2b\ +\x77\xdb\x5f\x0d\x6f\xd8\xb0\xe1\xcb\xc9\x64\xf2\x3e\x80\x13\x4e\ +\x38\xa1\x58\x28\x14\xc2\x65\x0c\x6d\x7f\xd2\xf4\xfe\x5f\xdf\x4e\ +\xa5\x0d\x85\x42\x41\xcc\x54\xee\xef\x55\x6e\x3a\xbd\x65\xcb\x96\ +\x2f\x25\x12\x89\x07\x0e\xb9\xca\xca\x64\x32\x74\x74\x74\x04\x79\ +\xeb\x32\xd7\xf7\xe9\xa7\x9f\xe6\xea\xab\xaf\xe6\xb5\xd7\x5e\x63\ +\xc7\x8e\x1d\x81\x5d\x28\x43\x0a\xa1\x50\x28\xc8\xe2\xbd\xdb\x43\ +\x1c\xb3\xd9\xec\xf6\x6c\x36\xbb\xfd\xfd\x5c\x57\x7d\x7d\x7d\x99\ +\xdd\x61\x0e\x0d\x0d\x2d\xee\xe9\xe9\x79\xaf\x53\xd8\x35\x35\x35\ +\x9b\xcb\x0c\xfe\xe1\xe1\xe1\xe7\xa3\xd1\xa8\x5a\x2c\x16\x8f\x55\ +\x14\x65\x3c\x80\xab\x42\xdd\x14\x8d\xe1\xad\x05\xa4\x2b\x29\xd9\ +\x25\xc2\x5a\x05\x20\xc7\xf0\xbb\x12\x4d\x4d\x4d\x07\x08\x6f\xff\ +\xb6\xeb\x42\x08\xfd\x90\x9f\x90\xfa\xfa\xfa\xdd\xab\x56\xad\x3a\ +\xac\xbd\xbd\x9d\xa3\x8f\x3e\x9a\x27\x9f\x7c\xb2\x8c\xe6\x06\x39\ +\xec\x70\x38\xfc\x0e\xaf\xe2\xdd\x76\xaa\x61\x18\x6c\xdb\xb6\x2d\ +\x38\x21\xff\x2f\x8e\xf1\xe3\xc7\x3f\x1a\x0a\x85\x2e\x04\xc8\x55\ +\x78\x9c\xf1\xcd\x46\x22\x06\xe4\x87\xab\xf8\xfa\x79\xff\xc6\xed\ +\x2b\xaf\x81\x92\xce\xc0\x86\x22\x6f\x3d\x96\xf5\x1f\xb0\xe9\x37\ +\x46\x7b\xa8\xbf\xbf\xff\x8b\xfb\xa9\xc1\xd2\x21\xf5\xb2\xf6\xc3\ +\xb3\xe4\x4d\x37\xdd\xc4\x2d\xb7\xdc\xc2\x4b\x2f\xbd\x44\x6f\x6f\ +\xaf\xff\x28\x87\x74\x1a\x5d\xd7\x83\x27\xcd\x1c\x4c\x72\x3f\x9b\ +\xcd\xfe\xc9\xd6\x1a\xff\x8f\x0c\x25\x70\xf3\x6d\x81\xe7\x49\x4a\ +\x49\x41\x72\x47\x9c\xcb\xbe\x7c\x15\x99\x2e\x2b\xd8\xdb\x46\x24\ +\x14\xe4\xed\x85\x28\x3f\x68\xe3\xe0\x1f\x36\xf9\xbe\x73\xea\xed\ +\xed\xed\x2c\x5e\xbc\x38\x68\x3e\x2c\xa5\xa4\xba\xba\xfa\x8f\x16\ +\x5c\xc6\x62\x31\x76\xee\xdc\x79\x6c\x7f\x7f\xff\x7a\xfe\x9b\x8e\ +\x53\x4e\x39\x85\xae\xae\x2e\xf6\xdc\x99\xc3\x73\x25\x52\x1a\x08\ +\xa9\x53\x5d\x1d\xf1\x0b\x78\xc6\x6c\x46\x39\x3c\xb0\x6d\xfb\x3d\ +\xb7\xbc\x7e\x5f\x02\x31\x4d\xf3\x65\xd7\x75\xb7\x95\xbd\x93\x83\ +\xe9\x10\x94\x4a\xa5\x6c\xcf\xf3\x46\xff\x3b\x0a\x42\x4a\x69\x5e\ +\x72\xc9\x25\x9c\x72\xca\x29\xb4\xb4\xb4\x70\xc7\x1d\x77\x90\x4a\ +\xa5\x68\x68\x68\xa0\xb7\xb7\x97\x9a\x9a\x1a\xda\xda\xda\x58\xb1\ +\x62\x45\x90\xa2\xd8\xb0\x61\x03\xb6\x6d\xaf\xfb\xc0\x05\x52\x5d\ +\x5d\xcd\xf0\xf0\xf0\x65\xc3\xc3\xc3\xfc\xff\x68\xc8\x32\x0e\x15\ +\x0e\xfb\x7d\x80\xcb\x7d\xbd\xa6\x4c\x99\xc2\xe6\xcd\x9b\x99\x30\ +\x61\x02\x53\xa7\x4e\xa5\xa7\xa7\x87\xee\xee\xee\x32\xb9\xc1\xfe\ +\xc0\x05\x72\x28\xdb\x6a\xff\x77\x19\x9a\xa6\x71\xff\xfd\xf7\xf3\ +\xc2\x0b\x2f\x90\xcd\x66\x83\xb8\xa5\x1c\x78\x4a\x29\xe9\xee\xee\ +\x0e\xbe\xf7\x3c\xef\x7d\x37\xe8\xd7\xf8\x68\xfc\xd9\xe1\x38\x4e\ +\xc8\x30\x0c\xd2\xe9\xf4\x01\x1e\xe2\x9f\x8a\x69\xc6\x82\xe7\xf7\ +\xec\xad\x88\x8f\x96\xfb\xcf\x8f\x48\x24\xd2\x54\x2a\x95\xaa\xde\ +\xe3\xba\xba\x75\x75\x75\x83\xa3\xa3\xa3\x85\x8f\x56\xf0\xa3\xf1\ +\xd1\xf8\x68\x7c\x34\x3e\x1a\x1f\x8d\x8f\xc6\x47\xe3\xa3\xf1\xd1\ +\x38\x60\xfc\x7f\xa7\x8c\x4b\xc9\xd0\xc3\x6c\x1c\x00\x00\x00\x00\ +\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x03\x7c\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x64\x00\x00\x00\x64\x08\x06\x00\x00\x00\x70\xe2\x95\x54\ +\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ +\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\ +\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0e\xc4\x00\x00\x0e\xc4\x01\ +\x95\x2b\x0e\x1b\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x03\ +\x0e\x1c\x0e\xa7\xa1\x6f\x29\x00\x00\x02\xfc\x49\x44\x41\x54\x78\ +\xda\xed\xd6\xbf\x6f\x1c\x45\x18\xc6\xf1\xef\xcc\xed\xda\xb1\x0f\ +\x9b\x93\x85\x90\x2d\xb0\x38\x12\x09\x77\x6e\xac\x14\x6e\x10\xe0\ +\x8b\x90\x4b\x37\x14\xc8\x7f\x03\xfc\x01\x54\x27\x51\x42\x81\x28\ +\xdd\xd0\x90\x36\x6d\x30\x8e\x70\x2a\x44\x44\x94\x20\x17\xc8\x0e\ +\x06\x64\x90\xec\xe4\x02\xde\xf3\xde\x9e\xf7\xd7\xec\x50\x1c\x39\ +\x89\x32\x52\xae\x58\xf1\x7c\xa4\xed\x76\xa4\x9d\x7d\xe7\x79\xdf\ +\x01\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\ +\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\ +\x11\x79\x31\x4c\x9d\x3e\x76\x71\x71\xf1\x13\x63\x4c\xf8\x9c\xcb\ +\xa6\x80\xcf\x4e\x4f\x4f\xff\x56\x41\x5e\xb0\xf5\xf5\x75\xdf\x6e\ +\xb7\xf1\xde\x53\x51\x51\xbe\xf9\x94\x97\xae\x4c\x53\x3e\x99\xc6\ +\x9d\xcd\x8c\x5e\xb2\x60\xac\x1f\xef\x2c\x8e\x63\xf6\xf6\xf6\x56\ +\xb2\x2c\x3b\xaa\xc3\x1e\x83\xba\x45\x3a\x4d\x53\x0c\x70\x3f\xff\ +\x85\xce\xf5\x19\x1a\xe1\x05\x99\xbb\xa4\x19\x5e\x81\x24\xa0\x3c\ +\x9f\x22\xfb\x75\x86\xe1\xe1\x2c\x00\x65\x59\x62\x8c\xf1\x75\xd9\ +\x9f\xad\x53\x31\xaa\xaa\x22\xcf\x73\xf2\xbc\xc0\x53\x61\x8d\xe1\ +\xaa\x79\x9f\xcf\x3b\x77\x78\xe7\xf5\x0f\x98\xe7\x1a\x8b\x57\x5b\ +\xd8\x57\x32\x8a\xa2\xa0\x28\x0a\x9c\x73\xb5\x3a\x70\xb5\x4a\x88\ +\x73\x8e\x3c\xcf\xc1\x8f\x26\xc3\x60\x90\xf2\xe1\x7b\x1f\xf3\xd1\ +\xad\x1b\x7c\xbd\xfd\x90\x77\x5f\x3b\xe3\x24\x7d\xc0\x17\xf7\x3f\ +\x25\xcf\x73\xbc\xf7\xcf\x12\xa2\x82\x4c\x82\xf7\x9e\x2c\xcb\x30\ +\x18\x98\x82\xe1\xc0\x31\xd7\x6c\x92\x57\x29\x00\x87\x7f\x1e\xf2\ +\x63\x72\x0b\xe3\x2d\x59\x96\x8d\x53\xa5\x82\x4c\xb8\x65\x19\x00\ +\x0f\x73\xf3\x53\x0c\x86\x43\xa6\x1b\xa3\x79\x51\xe1\x29\x5d\x81\ +\xf7\x8c\x92\xf4\xec\xe6\x52\xa3\x82\xd8\x3a\x26\x24\xcb\x72\x2a\ +\x3c\x2f\xcf\x37\xb9\xfd\xf3\x4d\xba\x37\x6e\xf2\xe0\xf4\x2e\xf7\ +\xfe\xf8\x96\xb7\xdf\xd8\xa2\x28\xf3\x7f\xdf\xcb\xd4\xb2\x26\xa9\ +\x28\x0a\xe2\x38\xc6\x1a\x4b\x32\x57\x71\x99\x35\xf9\xc1\x7d\x45\ +\x75\x6f\x8e\x57\xaf\x65\x1c\x97\xdf\xf0\xfb\x4f\x7b\x44\x8f\x13\ +\xce\xcf\x13\xbc\xf7\xcc\xce\xce\x62\xad\x55\x41\x26\x16\x69\x6b\ +\x31\x18\x4c\x05\x8d\x69\x43\xc3\x86\x7c\xf7\xdb\x97\x5c\xdc\x31\ +\x3c\x79\x94\x90\xfe\xe5\x48\x1e\x3b\x8c\x31\xb5\x4a\x46\x6d\x0b\ +\xe2\x9c\x63\x61\x61\x81\xf0\x6c\xc8\xf7\xdd\x0b\x2e\x9f\x56\x18\ +\x03\xc6\x8e\x1e\x6f\x0c\x41\x10\x8c\x67\x4e\x9d\xd2\x51\xcb\x5b\ +\x56\xb7\xdb\x65\x63\x63\x83\xfd\xfd\x7d\x0e\x0e\x0e\xe8\xf5\x7a\ +\x94\x65\x49\x55\x55\x44\x51\x44\xab\xd5\x22\x49\x12\x7a\xbd\x1e\ +\x8d\x46\x83\x7e\xbf\x8f\xf7\xbe\x3e\x1d\xa0\x6e\x33\xa4\xdd\x6e\ +\x73\x72\x72\xc2\xe6\xe6\x26\x51\x14\xb1\xb4\xb4\xc4\xda\xda\x1a\ +\xdb\xdb\xdb\x78\xef\x69\xb5\x5a\xac\xac\xac\xd0\xe9\x74\x28\xcb\ +\x92\x30\x0c\x6b\x95\x90\x5a\x35\xd9\xd5\xd5\x55\xbf\xbc\xbc\xcc\ +\xd6\xd6\x16\xbb\xbb\xbb\xa3\x01\x6f\xed\xf8\xc7\x47\x51\x44\x18\ +\x86\x78\xef\x49\xd3\x14\xe7\x1c\xce\x39\x8e\x8e\x8e\xde\x1a\x0c\ +\x06\x8f\xd4\xb2\x26\xa0\xdf\xef\xb3\xb3\xb3\x33\x9e\x13\xff\x39\ +\x5d\xc6\x50\x14\xc5\x68\x63\x41\x40\x10\x04\x14\x45\xa1\x6b\xef\ +\xa4\x1c\x1f\x1f\x3f\x04\xca\xe7\x59\x13\x86\xe1\x4c\xb3\xd9\x4c\ +\xe3\x38\x46\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ +\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ +\x44\x44\x44\xfe\x4f\xfe\x01\xd1\xc0\x51\x25\xbd\x25\x7f\x60\x00\ +\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x3f\xd1\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x50\x00\x00\x00\x50\x08\x06\x00\x00\x00\x8e\x11\xf2\xad\ +\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ +\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\ +\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0e\xc4\x00\x00\x0e\xc4\x01\ +\x95\x2b\x0e\x1b\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x03\ +\x0e\x36\x08\x21\xa9\x06\x34\x00\x00\x20\x00\x49\x44\x41\x54\x78\ +\xda\x9c\xbc\x69\x98\x24\x57\x79\xe7\xfb\x3b\xb1\xe6\x9e\x59\x99\ +\x59\x5b\xd7\xd2\x55\x5d\xbd\xaa\x17\x49\x2d\xb5\xf6\xd6\x0e\x12\ +\x12\x18\x8c\x6d\x60\x7c\x19\x6c\x23\x1b\xcc\xb0\x08\xcf\x18\xdb\ +\x63\x3f\x9e\xe5\xde\x67\xbc\x8c\xf1\x78\x7b\xbc\x8c\x3d\x36\xc6\ +\xf6\x18\x06\x63\x1b\x0c\xd8\x80\x05\x5a\x11\x12\xdd\x48\xa8\x5b\ +\xea\x7d\x51\x55\xd7\xbe\xe4\x16\xfb\x7a\xee\x87\xac\xcc\xae\x06\ +\xc6\x73\x9f\x9b\x1f\xba\xb3\x9e\x38\x71\xe2\x8d\x13\x27\x22\xce\ +\xef\xfd\xff\xdf\x14\xef\x7a\xd7\xbb\xa4\xe3\x38\xd4\x6a\x35\x5e\ +\x7f\xfd\x75\x7c\xdf\x67\x61\x61\xc1\xfa\xe8\x47\x3f\x5a\x2c\x97\ +\xcb\x84\x61\xc8\x8b\x2f\xbe\x88\xaa\xaa\x84\x61\x48\x18\x86\x74\ +\x3a\x1d\xd6\xd7\xd7\xa9\xd5\x6a\x9c\x39\x73\x66\x75\x68\x68\xa8\ +\xf8\xfe\xf7\xbf\x3f\x5b\xab\xd5\xf8\xf4\xa7\x3f\xcd\xf0\xf0\x30\ +\x17\x2f\x5e\x64\x68\x68\x88\xf9\xf9\x79\x4c\xd3\xc4\x34\x4d\x4e\ +\x9e\x3c\x19\x25\x49\x12\xfc\xe2\x2f\xfe\x62\x61\x78\x78\x98\x67\ +\x9e\x79\x06\xc7\x71\xb8\x72\xe5\x0a\x83\x83\x83\x34\x1a\x0d\x86\ +\x87\x87\xd9\xd8\xd8\x60\x6e\x6e\x0e\xdb\xb6\x3b\xb7\xdf\x7e\xbb\ +\x78\xc3\x1b\xde\x50\xac\xd7\xeb\x3c\xf3\xcc\x33\xac\xac\xac\x90\ +\xa6\x29\x8e\xe3\x50\x2a\x95\xb8\x7c\xf9\x32\x51\x14\xe1\xba\x2e\ +\xf3\xf3\xf3\xb3\xef\x79\xcf\x7b\xb6\x3f\xf0\xc0\x03\x7c\xe9\x4b\ +\x5f\xe2\xca\x95\x2b\x14\x0a\x05\x82\x20\x20\x8a\x22\x66\x67\x67\ +\xa9\x56\xab\x34\x9b\x4d\x2e\x5d\xba\x74\xee\xae\xbb\xee\xda\xf9\ +\xb3\x3f\xfb\xb3\xca\x73\xcf\x3d\xc7\x4b\x2f\xbd\xc4\xf4\xf4\x34\ +\x97\x2f\x5f\x46\xd3\x34\x6c\xdb\x66\x72\x72\x92\x73\xe7\xce\xb1\ +\xb8\xb8\xb8\xb4\xb2\xb2\xb2\xfc\xeb\xbf\xfe\xeb\x37\x66\xb3\x59\ +\x4e\x9c\x38\xc1\xfa\xfa\x3a\xb6\x6d\xa3\x0c\x0d\x0d\x91\xcb\xe5\ +\x10\x42\x30\x39\x39\x89\xa6\x69\x08\x21\xc8\xe7\xf3\xfc\xc8\x8f\ +\xfc\x08\x83\x83\x83\x54\xab\x55\xa6\xa6\xa6\xd8\xb1\x63\x07\xc5\ +\x62\x91\x52\xa9\x84\xae\xeb\x8c\x8d\x8d\x01\x10\x86\x21\x0f\x3c\ +\xf0\x00\xd7\x5f\x7f\x3d\xa6\x69\x32\x35\x35\xc5\xe0\xe0\x20\xdb\ +\xb7\x6f\xa7\x5e\xaf\x63\x9a\x26\xfb\xf7\xef\x47\x08\x81\xef\xfb\ +\xec\xdf\xbf\xbf\xbf\x6d\x6c\x6c\x8c\x52\xa9\xc4\xbe\x7d\xfb\xc8\ +\xe7\xf3\x14\x0a\x05\x76\xee\xdc\x49\xa1\x50\x40\x55\x55\x56\x57\ +\x57\xb9\xfd\xf6\xdb\x29\x95\x4a\xa4\x69\x4a\x26\x93\xa1\x54\x2a\ +\x11\x04\x01\xba\xae\x23\x84\xa0\x5e\xaf\xa3\x69\x1a\x52\x4a\xf6\ +\xee\xdd\xcb\x7d\xf7\xdd\x47\xb1\x58\x64\x70\x70\x90\xe9\xe9\x69\ +\x06\x06\x06\x98\x9c\x9c\xc4\x30\x0c\x86\x87\x87\xc9\xe5\x72\x00\ +\x68\x9a\xc6\xbe\x7d\xfb\x30\x0c\x83\x5c\x2e\xd7\xdf\x5e\x28\x14\ +\x30\x0c\x83\x28\x8a\x28\x16\x8b\xa8\xaa\x8a\x10\x82\xc1\xc1\x41\ +\x6e\xbe\xf9\x66\xc6\xc6\xc6\xd8\xbb\x77\x6f\x77\xdc\x0e\x1f\x3e\ +\x2c\x01\xa4\x94\xfd\x00\x3b\x9d\x8e\x95\xcf\xe7\x8b\x99\x4c\x06\ +\xd7\x75\x11\x42\x20\xa5\xa4\xf7\x91\x52\x22\x84\x40\x08\x41\xa7\ +\xd3\x59\x1d\x1c\x1c\x2c\xa6\x69\x9a\x05\x88\xa2\xa8\xbf\x3d\x4d\ +\xd3\xfe\xbe\x52\x4a\xe2\x38\x8e\xa2\x28\x0a\xf2\xf9\x7c\xa1\x58\ +\x2c\x62\xdb\xf6\xf7\xf4\xbb\xf5\x7f\x4d\xd3\x3a\xed\x76\x5b\x94\ +\x4a\xa5\x62\x92\x24\x28\x8a\x72\xcd\xf1\xb7\xf6\x5f\xad\x56\x79\ +\xed\xb5\xd7\x66\xaf\xbb\xee\xba\xed\x8e\xe3\x90\xa6\x69\xff\x9c\ +\x7a\x6d\x7a\xfb\xe8\xba\xce\xec\xec\xec\xb9\x3d\x7b\xf6\xec\x6c\ +\xb7\xdb\x8a\xa6\x69\xd7\x1c\x77\xeb\x47\x4a\x89\xa2\x28\x4b\x6b\ +\x6b\x6b\xcb\x43\x43\x43\x37\x9a\xa6\x89\xef\xfb\x08\x21\xba\x31\ +\xa6\x89\x6c\x08\x01\x08\x50\x14\x05\xcf\xf3\x52\xcb\xb2\x2e\x67\ +\xb3\x59\xdd\xb6\x6d\x04\x82\x34\x95\x80\x40\x08\x09\x9b\x6d\x7b\ +\x07\x8b\xe3\x78\xa5\xd3\xe9\xec\xd1\x34\xad\x24\x10\x9b\x07\xdd\ +\xfc\x47\x00\x9b\xfb\x6c\x1e\x30\xf4\x3c\x6f\x31\x93\xc9\x28\xed\ +\x76\x1b\x05\xe5\xfb\xf6\xdd\x0b\xae\xd3\xe9\x34\x92\x24\xd1\xd3\ +\x34\x2d\x0a\x04\x71\x9c\x76\x8f\x20\x05\x42\xa4\xdd\x38\xe8\xc6\ +\xb1\xbe\xbe\x1e\x03\x8d\x76\xbb\x5d\x4d\xd3\x34\x12\x88\xee\x96\ +\x14\xa4\x90\x88\xcd\xb6\x42\x08\x92\x24\x51\x84\x10\xad\x8d\x8d\ +\x8d\xbf\x35\x0c\xc3\x90\x69\x4a\x9a\x00\xdd\x50\xba\x31\x28\xb2\ +\x7b\x0a\x42\x08\xd7\x75\x97\xc2\x30\x2c\x48\x29\x35\xcf\x75\x13\ +\xa4\x42\x2a\x53\x40\xa0\xed\xb9\x7b\xb4\x9a\xac\x99\xc8\x50\x41\ +\x28\x82\x28\x8a\x08\xc3\x30\xbb\x6d\xdb\xb6\x7c\x1c\xc7\xc4\x15\ +\x87\xc2\x64\x44\xe2\x81\x6c\xe6\x88\x1b\x3a\x32\x50\x51\x0c\x89\ +\xa2\x28\x44\x51\xb4\x32\x33\x33\x53\x52\x55\x35\x1b\x11\x11\x4f\ +\x34\xa9\xd6\x35\x22\x4f\x22\x5a\x05\xa2\x0d\x1d\x02\x15\xa1\x82\ +\xeb\xba\xe1\xdc\xdc\x5c\x6e\x64\x64\xa4\xa4\x28\x0a\x6b\xe6\x3a\ +\x3b\xae\xd3\x08\xda\x02\xd9\xca\x10\x37\x0d\x64\xa0\xa0\x18\xdd\ +\x19\xdb\x6a\xb5\xbc\x34\x4d\xe3\xed\xdb\xb7\x17\x9d\xc8\xa3\x7c\ +\xd8\x41\x20\x49\x5c\x05\xda\x39\xa2\x75\x1d\x22\x05\x54\x89\xa1\ +\x1b\xac\xac\xac\xfc\xf3\xae\x5d\xbb\x8a\x32\x96\xac\x15\x97\x99\ +\xdc\xab\x13\x78\x09\x58\x19\xd2\xa6\x49\xdc\xd2\x11\x0a\x18\x86\ +\x4e\xa7\xd3\xb9\x65\x64\x64\xe4\xfa\x8c\x99\x31\x37\x42\x8b\xa1\ +\xeb\x43\x14\x14\xe2\xa6\x4e\xda\xcc\x90\xb6\x55\x84\x01\x42\x01\ +\xcb\xb2\x08\x82\xe0\x89\xd1\xd1\xd1\x83\x41\x18\x11\x8d\xb6\xa9\ +\x8d\x2a\x44\x36\x68\xf9\xbb\x56\x21\x51\x69\x7f\xad\x4a\xb8\x6a\ +\x20\x14\xd0\x34\x2d\xcd\x66\xb3\xd8\x9e\x8b\x32\x1d\x92\xbf\xa9\ +\xc3\x9e\xea\x11\x4e\x2f\x1e\xc3\x4c\xf3\xd0\xc9\xd1\xfc\xe7\x01\ +\x54\x55\x45\xd3\x34\xd1\xbb\x75\x6d\xcd\xc1\xd8\xb5\xc1\xd4\xae\ +\x03\x8c\x57\xb7\xf3\xe4\xe9\xcf\x53\xd2\xca\xd8\x4f\xd7\x09\x16\ +\x75\xa2\x28\x12\x9a\xa6\x29\xa6\x69\x22\x84\xc0\x38\xe0\x33\x70\ +\xab\xc6\xb6\xdc\x1e\x2e\x2f\x9f\x45\xa4\x90\xce\xd6\xb0\x5e\xce\ +\x23\x63\xc8\xe5\x72\x51\xa7\xd3\x11\x69\x9c\xb2\x21\x5b\x6c\x3b\ +\xec\x30\x6a\xec\x43\xd3\x53\xe6\xd6\x2e\x10\x77\x34\xdc\x63\x55\ +\xfc\x05\x0d\xd3\x30\x91\x52\x66\xd2\x34\x45\x06\x12\x6b\xef\x2a\ +\xc5\x43\x75\x0e\x97\x8f\x70\x6e\xfd\x18\xad\xe6\x32\xb9\x76\x85\ +\xc6\xd7\x4a\x28\x8a\xe8\x3d\xe7\x43\x53\xd5\xcd\x97\xc3\x59\x0e\ +\xdf\x5f\x24\x8d\x15\x0a\x6a\x9e\xc5\x8d\xd7\xc9\xca\x2a\xd6\xf3\ +\x65\xc2\x15\x83\x5c\x2e\x01\x28\x9b\xa6\x49\x33\x08\x98\xba\x1b\ +\xcc\x41\x9b\x1d\x85\x9b\x50\x7e\x74\xdf\xaf\x70\xc3\x8e\x3b\x89\ +\x65\x80\xe7\xf9\x04\x41\x80\x94\x12\xdf\xf7\xf1\x83\x80\x50\xba\ +\xdc\x51\xf9\x71\xee\xdb\xfe\x4e\x7e\xe5\xc1\x2f\x71\xf3\xe4\x0f\ +\x50\x1b\xeb\x3e\xc4\x83\x20\x20\x49\x12\xc2\x30\xc4\xf7\x7d\xa2\ +\x24\xa4\xb1\x16\xf2\x8e\xeb\xfe\x1d\x39\x6f\x86\xf7\xdf\xfc\x9b\ +\xbc\xe7\x9e\x9f\x21\x90\x6e\xbf\x7d\x9a\xa6\x5b\xf6\x8d\x79\x74\ +\xfb\x87\xd9\xad\x3f\xcc\x8f\xdd\xf2\x4b\xdc\xbf\xe3\x31\x44\xd1\ +\x27\x08\x7c\x7c\xdf\x27\x8e\x63\xa2\x38\xc2\x73\x5d\xa2\x24\x66\ +\xbc\xb0\x9b\xa3\xa3\xef\xe4\x07\xa7\x7e\x81\x01\xef\x76\xee\xbf\ +\xe1\xcd\xb8\x49\x1b\xdf\xf3\x89\xa2\x08\x00\x3f\xf0\x71\x5d\x17\ +\x5d\xd3\x98\xd2\x6f\xe7\x81\xf1\x9f\xe0\x86\xf2\xdb\xf9\xaf\x6f\ +\xf9\x12\xb2\xe0\xe1\xfb\x3e\x9e\xeb\x91\xa6\x69\x37\x6e\x2f\x20\ +\x11\x09\xae\x1b\xf0\xa1\x83\x7f\xc2\x1b\x76\xbd\x9b\x8f\xde\xfe\ +\xe7\x4c\x4c\x8f\x12\xe2\xe1\x7b\x3e\x61\x18\xf6\xc7\x24\x08\x03\ +\xa4\xf0\xb9\x5d\x7b\x9c\x5b\x27\xde\x80\xa2\xc4\x3a\x6e\xe0\x10\ +\x04\x11\xbe\xe7\xf5\x1b\x7b\x9e\xd7\x7d\xfd\x27\x01\xfb\x87\x6e\ +\xe3\xb3\xaf\xfd\x2e\xf3\x4b\xeb\x1c\x1c\xb9\x15\x05\xa5\x3b\xc0\ +\xbe\x4f\x92\x24\x44\x51\x84\xe7\x79\x84\x41\xc8\x80\x3e\xc1\xb2\ +\x35\xcb\x8b\xb3\x4f\x70\xc7\xf4\x43\x78\x91\x43\x14\x84\xfd\xfe\ +\x92\x24\xe9\xef\x6b\xaa\x79\x06\x72\x75\x9e\x5f\xfa\x1b\x6e\xa8\ +\xbf\x81\x5a\x6e\x84\x92\x5e\xc7\xf3\xaf\x0e\x60\x12\x27\x78\xbe\ +\x4f\x1c\x45\xe4\xf4\x02\x4a\xc6\xe5\x5b\xe7\xbe\x85\x48\x55\x6c\ +\xbf\x49\x1c\x26\x78\x7e\x77\x60\x00\x02\x3f\xc0\x75\x3d\x34\x55\ +\xc5\x69\x09\xbe\x7e\xfe\xf3\x28\x71\x9e\x6a\xa5\x40\x92\x24\x78\ +\x9e\x87\xe7\x79\xf4\xee\x1a\xcf\x73\x51\x15\xc1\xc5\xb3\x16\x03\ +\x43\x2a\x1b\xce\x32\xd7\x4f\xde\x4c\x35\x33\x46\x10\x76\xe3\x88\ +\xa2\xa8\x7b\xe1\x37\xbf\xb7\x3a\x1e\x3f\xf5\xc8\x63\xfc\xd3\xf9\ +\x4f\xa0\x24\x32\x25\xa3\x94\x88\xe2\x88\x20\x08\xfa\x03\xd8\x9b\ +\x25\x0a\x2a\x7e\xe2\x50\xcf\x8e\x33\x50\xa8\x32\xb7\x3e\x8b\x84\ +\xef\x19\xc0\x30\x0c\x89\x93\x18\x3f\xb1\x19\x2c\x6c\x43\x13\x59\ +\x5a\xde\x1a\x59\x2d\x47\x14\xc7\x84\x61\x78\x35\x90\x20\xc0\xf7\ +\x7d\x24\x29\x0a\x1a\x9e\x03\xa9\xea\xd1\x72\xdb\xac\xdb\x2b\x84\ +\x9b\xdb\x93\x24\x21\x8e\xe3\xcd\x81\x4f\x49\x64\x42\x1a\x19\xcc\ +\x8c\xee\xa2\xe3\xd8\x94\x33\x43\x84\x71\xd0\x8f\x15\x20\x08\x43\ +\x7c\xdf\x43\x51\x14\xf2\x45\x9d\xbd\x43\x37\x62\xf9\x4d\x32\x4a\ +\x09\x4d\x18\xdd\xb6\x61\xf7\x2e\x8b\xa2\x08\xcf\xf7\x91\x52\x50\ +\x19\x30\x49\x02\x1d\x29\x05\x48\x85\x86\xbb\x4c\x12\xa7\xfd\x01\ +\x94\x52\xe2\xf9\x3e\x61\x14\x62\xe8\x1a\x73\xcb\xcb\x18\x4a\x16\ +\xed\x58\xfb\xd3\x78\x4a\x03\xdf\xf3\xb0\xec\x88\x6c\x9a\x41\x4a\ +\x89\xe3\x38\xf8\x71\x44\x11\x83\x2f\xbf\xfe\x47\xbc\xf7\xd0\xaf\ +\x72\xb2\xf3\x0f\x5c\x72\x4f\x10\x8b\x00\xc7\x71\x50\x55\xb5\x3f\ +\x78\xae\xeb\x92\x1a\x30\x52\x57\xf8\xc6\x99\xe7\xf8\xf9\x47\xff\ +\x1f\x7e\xeb\x9b\x1f\x64\x7c\x74\x9c\x34\x49\x71\x9c\xcd\x19\xb5\ +\x39\x0b\xa4\x94\x0c\x68\x82\xa7\x2e\xfd\x1d\x3f\xff\xc6\xdf\xe4\ +\x53\xaf\xfd\x1a\x96\xef\x50\xca\x54\x70\xdd\x79\xe2\x40\x62\x18\ +\x06\x61\x18\x62\x5b\x16\xbe\x1e\xb3\x64\x5f\x62\x89\x45\xf6\x6f\ +\xaf\x21\x07\x2f\x70\xa9\xd1\x5d\x20\x5b\x96\x8f\x61\xea\x00\xb8\ +\x8e\x83\xdb\x71\xd1\x52\x9d\xa5\xe8\x3b\xdc\x9b\x7d\x2b\x51\x71\ +\x8e\x8f\x3f\xfd\x41\x14\x15\x6c\xdb\x46\xd3\xf4\xab\x93\xc4\xf1\ +\x89\xf2\x31\xdb\xb7\x0f\xf2\xd4\xa9\xaf\x32\xb3\x7d\x86\xdf\x7b\ +\xf1\x71\x32\x46\x86\x30\x0e\xb0\xed\x18\xdd\xd4\x48\xd3\x14\x77\ +\x73\x4c\xca\xf9\x22\xbf\xf5\xcc\xe3\x7c\xec\xc1\x3f\x40\x5b\x5c\ +\x9b\xa5\xd1\x59\x63\xf9\x6c\x9b\xc8\x4d\x91\xa4\xa4\x69\x4a\xab\ +\xd5\x22\x48\x22\x8a\x41\x1e\x57\x5b\xe4\xf7\xbe\xf5\x38\x8f\x5e\ +\xff\xc3\x9c\x5d\x3d\xc6\xea\x0b\x92\x76\xdb\x46\x51\x14\xd2\x34\ +\xc5\xb6\x6d\xda\xed\x36\x52\x15\x08\xa5\xc2\xf3\x8d\x4f\x30\x3e\ +\x37\xca\x6a\x67\x8e\xc5\xd5\x39\x16\xce\x34\xf1\xda\x49\x7f\x0d\ +\x16\x86\x21\x69\x9a\x52\x48\xf2\xcc\x06\xdf\xe2\xd9\x85\xcf\x62\ +\xf9\x4d\x4e\x2f\xbc\xc2\xec\x31\x9f\x8d\x15\x07\x04\x94\x4a\xa5\ +\x2e\xf9\x44\x29\x41\x26\x25\x51\x4a\x3c\xb3\xfa\x57\xb4\xd3\xa3\ +\xf8\x9e\xc5\x4b\x17\x4f\xb0\x72\xda\xc1\x77\x62\x32\x59\x13\xe8\ +\x0e\x90\x6d\xd9\x14\x92\x02\x8e\x58\xe5\x8b\xb3\xbf\x8d\x65\x59\ +\x2c\xaf\x2d\xb0\xf2\x4a\x40\xbb\x61\x61\x64\xb5\xfe\x24\xb1\x1a\ +\x6d\x9c\xa2\x24\x91\x15\xbe\xd5\xfc\x14\xcb\xfe\x8d\x5c\x6e\xbd\ +\x8c\xe3\xb8\x5c\xfa\x66\x03\x99\xa6\xe4\x92\x1c\x69\x9a\xd2\x68\ +\x34\xe9\xc8\x84\x30\x32\x71\x33\x97\xf9\x95\xaf\x7c\x04\x31\x3d\ +\xb1\x53\x0a\x04\x66\x5e\x23\x8c\x42\xb2\xd9\x2c\x51\x14\x59\x69\ +\x9a\x16\x6b\xd5\x3a\x72\xac\x43\x69\x58\x67\xe5\x3b\x1e\xeb\x17\ +\x5d\x4c\xc3\x44\xa8\xa0\x1a\xdd\x37\x59\x10\x04\xab\x03\x03\x03\ +\x45\x45\x51\xb2\x52\x4f\x29\xdd\x2c\x89\x97\x52\x16\x5e\xe9\x80\ +\xa7\x21\x14\x81\x6a\x76\xd7\x60\x69\x9a\x46\x42\x88\xc0\x30\x8c\ +\x42\xa5\x52\x41\xee\xb1\x28\x19\x3a\x57\x8e\x5b\x38\x4b\x09\x9a\ +\xa6\x81\x2a\x51\x75\x41\x92\x24\x14\x0a\x85\x4e\xb3\xd9\x14\x3b\ +\x67\x76\x16\x1b\x9d\x06\xa3\x37\x1b\xcc\xbf\x68\x63\x37\x42\x34\ +\x45\x43\x92\xa2\x67\x54\xe2\x24\xa6\x52\xa9\x30\x3b\x3b\xfb\xec\ +\xce\x9d\x3b\x8f\x2a\xa8\x24\x43\x16\x6a\x2a\x58\x7e\xd5\x21\x8d\ +\x25\xaa\xa2\x22\x34\x50\xba\x6b\x66\xc2\x30\xa4\x5c\x2e\x5b\x02\ +\x51\x6c\xe2\x73\xe3\x5b\x0a\x2c\x1c\x77\x59\x3f\xe7\x21\x43\x15\ +\x64\x8a\x96\xed\x4e\x10\xc3\x30\xe8\x74\x3a\xc7\xf2\xf9\xfc\x11\ +\x33\x5b\x64\xfb\x23\x12\x67\x21\x61\xfd\x9c\x8f\x76\xc7\xdd\xb7\ +\xd2\x6c\x36\x19\x1d\x1d\xe5\xc2\x85\x0b\x78\x9e\xc7\xca\xca\x0a\ +\x3f\xf6\x63\x3f\xc6\xbe\x7d\x7b\x99\xbb\x3c\xcf\xcb\x2f\xbf\x42\ +\x7d\xbb\x24\x9d\xec\xbe\x00\x3c\xcf\xa3\xd1\x68\x50\x2c\x16\xb9\ +\x74\xe9\x12\x9a\xa6\xf1\xd3\x3f\xfd\xd3\x0c\x54\x06\xf8\xab\x4f\ +\xfe\x35\x95\x6a\x85\xf2\x9e\x25\x6a\xb5\x1a\x0b\x0b\x0b\x18\x86\ +\x81\xa2\x28\x5c\xb8\x70\x81\x30\x0c\xf9\xc0\x07\x3e\xc0\xc1\x83\ +\x07\xf9\xe4\x9f\xfe\x05\xaa\xd4\x30\x46\x97\x19\xbc\xbe\xce\xc6\ +\xc6\x06\x03\x03\x03\x34\x9b\x4d\x16\x16\x16\x08\x82\x80\x3b\xef\ +\xbc\x93\xc7\x1e\x7b\x8c\x30\x0c\x79\xe6\xc9\xe7\x18\xbd\x71\x19\ +\x55\x53\xe9\x74\x3a\x14\x0a\x05\x16\x16\x16\x70\x5d\x97\x24\x49\ +\x50\x55\x95\x87\x1e\x7a\x88\xb7\xbf\xfd\xed\x7c\xe1\x73\x5f\xe4\ +\x95\x13\x27\x98\xbe\x53\x23\x9f\xcf\xb3\xb0\xb0\x80\xe3\x38\x64\ +\xb3\x59\x9a\xcd\x26\xcb\xcb\xcb\x54\xab\x55\x3e\xf2\xf8\x47\xb8\ +\x7c\xf1\x12\xcf\x3e\xf5\x4d\xf6\x0c\x64\xd9\x7d\x5b\xca\xfa\xc6\ +\x3a\x85\x42\x01\x21\x04\x4b\x4b\x4b\x58\x96\x45\x92\x24\x7c\xe0\ +\x03\x1f\x60\x6a\x6a\x3b\x4f\x7f\xed\x1b\x34\xd3\x06\x83\x13\x2e\ +\xda\xe0\xe0\x20\x8e\xe3\x60\x18\x06\x53\x53\x53\x9c\x3b\x77\x8e\ +\x24\x49\x98\x99\x99\xe1\xe8\xd1\xbb\x39\x55\x3b\xc5\x5a\x63\x95\ +\xc1\xc1\x41\x14\x45\xe1\x95\x57\x5e\x61\x74\x74\x14\x80\xe1\xe1\ +\x61\x2e\x5d\xba\x44\x9a\xa6\xdc\x76\xdb\x6d\x64\xb3\x59\xbe\xfc\ +\x95\x2f\x73\xfd\xf5\xd7\x73\xe6\x4c\x16\xc3\x30\xfa\x57\xfb\xc0\ +\x81\x03\x5c\xbc\x78\x11\x80\xc3\x87\x0f\x33\x3e\x3e\xce\x2d\x77\ +\x1c\x61\x65\x65\x05\x2f\xb2\xd9\xb1\x63\x07\x69\x9a\x32\x34\x34\ +\xc4\xae\x5d\xbb\xf8\xca\x57\xbe\xd2\x9b\x25\x94\x4a\x25\x86\x86\ +\x86\x78\xf5\xd5\x57\x11\x9a\x24\x9f\xcf\x73\xfc\xf8\x71\xc6\xc6\ +\xc6\x68\x36\x9b\xe4\xf3\x79\xd6\xd6\xd6\x10\x42\x50\x2a\x95\xd8\ +\xbd\x7b\x37\x03\xf5\x0a\x95\x6a\x89\x72\xb9\x8c\x94\x92\x5a\xad\ +\x86\x65\x59\x0c\x0d\x0d\x11\x04\x01\x42\x08\x0a\x85\x02\x37\x5c\ +\x7f\x03\x19\x33\xc3\x99\xb3\x67\xd9\xbb\x77\x2f\x6b\x6b\x6b\x20\ +\xa0\x50\x28\x30\x3a\x3a\x4a\x36\x9b\xe5\xe4\xc9\x93\x00\xdc\x71\ +\xc7\x1d\x94\x4a\x25\x3a\x1d\x0b\xcf\xf3\x38\x79\xf2\x24\xe2\xc6\ +\x1b\x6f\xec\x03\x60\x8f\x85\xdb\xed\xb6\x55\x2a\x95\x8a\x41\x10\ +\xf4\xf9\xf3\xfb\x7d\x14\x45\xa1\xd3\xe9\xac\x0e\x0d\x0d\x15\x1d\ +\xc7\xc9\xf6\x10\xec\x7f\xf7\x89\xe3\x38\x0a\xc3\x30\xc8\xe7\xf3\ +\x85\xef\xc7\x9d\xdf\xcd\xda\x8a\xa2\x74\x3a\x9d\x8e\x28\x95\x4a\ +\xc5\xff\x53\xfb\x72\xb9\xcc\xa9\x53\xa7\x9e\xdd\xb9\x73\xe7\x51\ +\xcf\xf3\xf8\xdf\xc5\x22\xa5\x44\xd3\x34\x36\x36\x36\x18\x1c\x1c\ +\xb4\x82\x20\x28\xfe\x4b\x71\xf7\x62\x59\x5b\x5b\x3b\x36\x34\x34\ +\x74\xa4\xc7\xd6\xbd\x8f\xb6\x35\xae\x4d\x16\xc6\xb2\xac\x20\x9f\ +\xcf\x67\x15\x45\x91\x48\x90\x89\xd8\xc2\xb4\x9b\x8d\x05\xa4\x69\ +\x2a\xe2\x38\x8e\x3b\x9d\x0e\x3d\x20\x47\x0a\x64\x17\x53\x41\x91\ +\xfd\xb6\x9b\xc1\x48\xdf\xf7\xe3\x4c\x26\x13\x2b\x8a\x22\x85\x14\ +\x5d\x06\x15\x12\x94\xcd\x66\x5b\x58\xd8\xb2\x2c\xdf\xf7\xfd\x0d\ +\x21\x44\x19\x90\x24\xa2\xcb\xd9\xca\xb5\xb1\x48\x29\x85\xe7\x79\ +\x91\x94\x72\x61\x63\x63\x63\x5d\x4a\x19\x90\x8a\x2e\x27\xa7\x02\ +\x94\x2e\x0b\x6f\xc6\x21\x36\x9f\xdd\x0d\xcb\xb2\xb6\x9b\xa6\x19\ +\x0b\x90\x69\xb2\xd9\xd9\x26\x37\xb3\x25\x96\x20\x08\x94\x24\xe9\ +\x36\x50\xc4\x26\xbf\xcb\xcd\x64\xc2\xf8\xae\x21\xa4\xa7\x76\x0f\ +\xd4\x1d\x14\x96\x96\x96\x2e\xed\xd8\xb1\xe3\x80\xe7\x7a\x69\x98\ +\x73\xc9\xef\x08\x10\xae\x46\xd2\x36\x49\x2d\x1d\x19\x75\x77\x56\ +\x55\x55\x00\x72\x78\x78\x58\x64\x32\x19\x02\x11\xc2\x74\x8b\x52\ +\x41\x25\xee\xe8\xd0\xce\x90\x5a\x1a\x32\x51\x40\x82\xe7\x79\x72\ +\x71\x71\x31\x1a\x1b\x1b\x0b\x14\x45\x91\x8d\xcc\x06\x63\xbb\x35\ +\xa2\xa6\x86\x6c\x9b\x24\x8e\x0a\x49\xff\xea\x8a\x76\xbb\x1d\x04\ +\x41\x30\x36\x39\x31\x59\xf2\x93\x10\x75\x47\x9b\xac\xae\x93\x34\ +\x0d\x12\x4b\x47\x06\xdd\x7e\x01\x4c\xd3\xe4\xc9\x27\x9f\xbc\x70\ +\xe8\xd0\xa1\xba\x8c\x25\xab\xb9\x65\xb6\x1f\xd0\x08\xda\x20\xdb\ +\x19\x92\x8e\x01\xbe\x8a\x4c\xc1\x30\x0c\x8e\x1f\x3f\xbe\x6d\x62\ +\x62\x62\xde\x34\x4c\xa5\x15\xda\x72\xe0\x90\x8f\x96\xea\xc4\x0d\ +\x9d\xb4\xd3\x65\xf2\x6e\x92\x03\x61\x59\x56\x9c\x24\xc9\xc4\xf4\ +\xf4\x34\x96\xef\x93\xd9\x63\x51\xa8\x28\x04\x9d\x14\xad\xfe\x03\ +\x1b\xe8\x8a\x49\xf3\xc9\x2e\xf7\x19\x86\x40\x55\xd5\x01\xd3\x34\ +\x73\x9e\xe7\xa3\x6e\xf7\xa9\xdc\xee\xa0\x87\x45\xc2\x78\x0d\x25\ +\x36\x90\x81\x46\xe3\x8b\xdd\x1c\xdc\xe6\x2d\xae\x26\x49\x82\x9d\ +\xb1\x19\xbc\xbe\xc3\xee\xf1\xfd\x90\xa6\xcc\xad\x5c\x44\x55\x54\ +\x3a\xcf\xd4\x09\x17\x75\xd2\x34\x55\x54\x55\xcd\x69\x9a\x96\x17\ +\x42\xc0\x1e\x8b\x81\xdb\x35\x72\x69\x9d\x56\x7b\x1d\x21\x15\xc2\ +\x73\x15\xac\x13\x39\x84\x90\x68\x9a\x96\x7a\x9e\x07\x52\xb2\x21\ +\x5b\xec\xbf\xdf\x46\x4b\x32\x04\x6e\x03\x3d\xcd\x10\xb9\x02\xfb\ +\x78\x99\x60\x51\x47\xc9\x2a\x48\x29\x37\x1f\xba\xe0\xee\x5d\xa7\ +\x74\xc3\x00\x55\x75\x8a\x75\x6b\x0e\xcb\xb2\xd1\x3a\x55\x1a\x4f\ +\x14\xe9\xa5\xc6\x0c\xc3\xa8\xe8\xaa\x9e\xbf\x98\xac\xf2\xe6\xbb\ +\x73\x44\x81\x4f\x96\x12\x1d\x7b\x03\x43\xe4\xe8\x7c\xa3\x4c\xb8\ +\x6c\xf4\x72\x8d\x91\x4c\x25\x56\xea\x30\x7a\x38\xc0\x53\xda\xbc\ +\x71\xe7\x0f\xa2\x3c\xba\xfb\x71\x8a\xd5\x22\xb1\xec\xf2\xec\x26\ +\x0b\x4b\xdf\xf7\xf1\x7c\x9f\x54\x84\x4c\x72\x37\x1f\xbc\xf3\xbf\ +\xf2\xaf\xaf\xfb\x0d\xf6\x0c\x1d\x65\x78\xdb\x60\x9f\x26\x92\x24\ +\x91\xbd\x4c\x75\x9c\x46\x24\xcd\x0a\xf7\x8e\xbf\x93\x43\x85\xb7\ +\x72\xcf\xf6\x77\xf3\xa6\x5b\xde\x41\x78\x2d\x0b\xcb\xde\x71\xe2\ +\x34\xe1\xd1\xed\x1f\x61\x52\x79\x80\x07\x0f\xbc\x8b\xa3\x33\xef\ +\xc2\x11\x1b\x5b\x29\x47\xc6\x71\x8c\xe7\xfa\x84\x49\xc8\x48\x76\ +\x9a\x47\x26\x3e\xca\xcf\xdd\xfd\x49\xbc\x66\x9d\x1d\xd3\x53\x84\ +\xd2\xed\xf3\x6a\x8f\x85\x3d\xcf\xc5\x30\x54\xa6\xd5\xbb\x78\xcb\ +\xd4\xe3\x1c\xaa\xbc\x95\x5f\x79\xcb\xdf\x93\xe6\xec\xcd\x55\x84\ +\x8f\x94\x92\x30\x0c\xa5\xef\x7a\x44\x32\xc2\x73\x23\x3e\x7c\xfd\ +\x27\xb8\x7f\xf7\xbb\xf8\xd0\x1d\x7f\x48\x65\x34\x47\x24\x83\x3e\ +\x67\x4b\x29\xf1\x3d\x8f\x38\x89\x68\x76\x5a\xfc\xee\x43\x4f\xb3\ +\xb4\xbe\x86\x32\x5e\xd8\xc3\xc1\x91\x3b\x37\x07\xa4\xcb\xc2\x42\ +\x08\x3c\xcf\xc3\x0f\x7c\xc2\x38\xe0\xba\xa1\x5b\x79\x7e\xe1\xef\ +\x79\xe1\xe4\x09\x6e\x9f\x7a\x08\x4d\xd1\xfb\x4c\x99\x24\x09\x41\ +\x10\x74\x59\x38\x0a\x19\x2b\xee\x66\xb1\x73\x91\xf3\x6b\x27\xb9\ +\x6d\xfa\x01\x92\x34\x21\x0e\x63\x7c\xbf\x7b\x92\x5b\xdb\x67\xd4\ +\x3c\x95\xcc\x20\xaf\x7b\x2f\xb0\xbf\x7c\x3f\x3b\x87\x0e\x50\xd2\ +\xeb\xf8\xbe\x8b\xe7\x79\xc4\x71\x4c\x1c\xc7\xf8\x7e\xf7\x7b\x29\ +\x53\x21\x57\x4c\x78\xf6\xc4\xf3\x1c\x1c\xbd\x83\xdd\xb5\x9b\x70\ +\x03\xe7\x7b\x59\xd8\xf3\x51\x55\x15\xa7\x2d\x78\x71\xee\x9f\xc9\ +\x8a\x2a\x43\x03\x43\xa4\x49\x17\x41\x03\xdf\xef\x27\x13\x3c\xcf\ +\x43\x51\x15\x2e\x9f\xb3\x18\x1a\xc9\xe2\x47\x2e\x37\x4c\xdc\xc2\ +\x64\xe9\x3a\xfc\xb0\x1b\x47\x0f\x41\x3d\xdf\x27\x0a\x23\x34\x99\ +\x61\xb8\x3a\xc4\x46\x7a\x06\xcd\x09\x6c\xce\xae\xbc\x4a\x14\xc5\ +\xf8\x5e\xda\x7d\xa0\x43\x77\xc6\xf8\x01\x86\x14\xb8\xa1\xc5\x60\ +\x69\x02\x59\xc8\xf3\xfa\xfa\xb9\xfe\x76\x55\x55\xfb\x2c\x1c\xc7\ +\x31\x69\x92\xd2\xf4\xd7\x18\x2d\x3f\x4c\x73\x3d\x65\xc5\x9d\xc5\ +\x54\xb3\x44\x51\x44\x10\x24\x7d\x02\xe9\x65\x74\x75\x52\x14\x45\ +\xc1\x77\x25\x46\xce\x67\xfe\xd2\x02\x1b\xf6\x0a\x81\x6f\xf6\x5f\ +\x3c\x71\x1c\x77\x93\x09\x5a\xd2\x7d\x46\x27\x0a\x23\x03\x23\xbc\ +\x7c\xf9\x18\xb2\xa2\x40\xd2\x1d\xb4\x1e\xc3\x87\x61\x48\xe0\xfb\ +\x18\x42\xa5\x50\x30\x98\xa9\xed\xe7\xcc\xc2\x59\x4c\x91\x45\x11\ +\x4a\x3f\x23\xd4\xeb\x3b\xf6\x23\xc8\x40\xa9\x62\x92\x84\xda\x66\ +\xf6\x1a\x96\x3a\x97\x49\xe2\x6e\x06\x46\x8a\xb4\x8f\x7e\xb1\x1a\ +\x23\x45\x42\xe0\xc7\x04\xae\x8e\xf2\xcd\xf5\xbf\xc2\xc8\x4a\x82\ +\xd0\xef\xb2\xde\xe6\x95\xec\xcd\x30\x91\x6a\x1c\x6f\xfc\x2d\x39\ +\x6f\x86\xfc\xf8\x3a\x67\xed\x67\x71\x93\x36\x8e\xe3\xe0\x38\x4e\ +\xf7\x04\x3d\x0f\xdb\xb6\x09\xfc\x90\x38\xbf\xc8\x2b\xe7\xcf\xf0\ +\xc0\xf5\xf7\xf1\x77\x67\x7e\x9b\xb3\xad\x6f\x11\xc6\x21\x96\x65\ +\xe1\x38\x4e\x3f\x1b\xe3\xba\x2e\x8a\x96\xf0\xb5\x8b\x9f\xe1\x67\ +\xee\xff\x35\x3e\xf3\xea\x6f\x73\x39\x78\x8e\xac\x56\xc0\x71\x5d\ +\x1c\xc7\xe9\x5f\x18\xcf\x75\x09\xc3\x88\x65\xfb\x75\xd6\x5b\x2d\ +\x28\xb4\x48\xab\xb3\x04\x69\x17\xee\x1d\xc7\xe9\x67\x58\x1c\xc7\ +\xc1\xea\x58\x24\x69\xca\x7c\xf4\x6d\x34\x91\xc1\xcf\x5d\xe4\x77\ +\xbe\xf9\x33\xa8\x9a\x8a\x65\x59\x58\x1d\xab\x3f\xd8\xae\xe3\x12\ +\xc7\x29\x53\x53\x15\xbe\xfc\xca\xe7\x19\x2a\x8d\xf0\x3b\x2f\xfe\ +\x9b\xae\x26\x12\xfb\x38\x8e\xd3\xcf\x22\x59\x9d\x0e\xae\xeb\x91\ +\xcf\x65\xf9\xb5\xa7\xdf\xcf\x2f\xdd\xf3\xe7\x68\xae\xb2\xce\xdc\ +\x85\x39\x96\xce\xb5\x08\xac\x84\x84\x04\x80\x66\xb3\x49\xab\xd3\ +\x21\xef\xe6\x09\x55\x95\xbf\xbb\xfc\x6b\xbc\xe5\xf0\x3b\x99\xbb\ +\xf8\x1a\x6b\x2f\x49\xda\xed\x4e\x7f\x8d\xd8\x9b\x85\x94\x14\x14\ +\xd5\xe0\x78\xe7\x53\xd4\xd7\x14\xda\xd1\x32\xf3\x5f\xd9\x60\xfe\ +\x44\x9b\xc8\x4e\xbf\x2f\x0b\x2f\xf8\xdf\xe1\xb9\xa5\xff\x45\xa0\ +\xd9\x5c\x7a\xfd\x3c\x57\x4e\x3b\xb4\x9a\x1e\x42\xe9\xb2\xb0\xef\ +\xfb\xc4\x41\x44\xa0\x4b\xfc\x34\xc7\xb3\x4b\x7f\xcd\xbd\x7b\x7e\ +\x00\x99\x6b\xf1\x9d\x6f\xaf\xb0\x7c\xce\xc2\xe9\x44\xe8\x66\x77\ +\xf6\xd8\xb6\x8d\xdd\xb1\xc9\xa5\x05\x7c\x75\x9d\x63\xf6\x5f\xd3\ +\xf1\x2c\x5e\xfe\xce\x2c\xcb\xaf\x04\x74\x5a\x0e\xba\xa9\xf6\x19\ +\xde\x6a\xb6\xb1\x4b\x92\x58\x96\xf9\x8e\xfd\xf7\x74\x16\x6f\x60\ +\xae\xf3\x2a\xeb\xb3\x0e\x97\xbf\xd5\x20\x89\x52\xb2\xd9\x2c\x69\ +\x9a\xd2\xb1\x2c\xbc\x44\x92\x92\x65\x39\x7e\x95\x3f\x7c\xf9\xe7\ +\x10\xe3\x43\x53\x52\x48\x05\xbd\xd0\x5d\xf7\xe4\xf3\x79\xd6\xd7\ +\xd7\xcf\x55\xab\xd5\xdd\xaa\xa2\x62\x4e\x47\xd4\x76\x1a\x6c\x9c\ +\x0e\x58\x3e\xe5\x90\x76\x34\xf4\x9c\x82\x96\xed\xb2\x70\x1c\xc7\ +\xb6\xaa\xaa\x66\x2e\x97\xd3\x63\x23\x62\xec\x1e\x83\x60\x21\x61\ +\xe9\x94\x83\x73\x05\xb4\x8c\x40\xcf\x8a\x3e\x0b\x2b\x8a\x12\xa8\ +\xaa\x5a\xc8\xe5\x72\x18\x87\x22\x6a\x15\x9d\xc5\x93\x0e\x1b\xa7\ +\x62\x44\x22\xd0\x73\x02\x61\x80\x4c\x25\x85\x42\xa1\xb3\xb1\xb1\ +\x21\x86\x86\x86\x8a\x9d\xd8\xe6\xd0\x0f\x17\x59\x3b\x15\xb2\x7c\ +\xd2\xc6\x5f\x56\x50\x0c\x30\xf2\x5d\x7d\xa2\x5a\xad\x32\x3b\x3b\ +\xfb\xec\x8e\x1d\x3b\x8e\x8a\x54\x90\x4e\x38\xe4\x32\x1a\x8b\x2f\ +\x3b\x78\xeb\x09\xba\xa9\xa2\x1a\x20\xb4\xee\xda\x2e\x0c\x43\x4a\ +\xa5\x92\x15\x87\x71\xb1\x63\x46\xdc\xfc\xd6\x22\xab\xaf\xf9\xac\ +\x9e\xf6\xf0\x57\xba\xed\x8c\x42\x97\x85\x4d\xd3\xc4\x75\xdd\xf5\ +\x7c\x3e\x5f\xcf\x97\x8b\x54\x0e\x44\x74\xe6\x23\x5a\x97\x43\xb4\ +\x3b\xee\xbd\x05\xc7\x71\xa8\x56\xab\x5c\xb9\x72\xa5\xa7\x0b\xf3\ +\xe0\x83\x0f\x72\xf0\xe0\x41\x3a\x2d\x8b\x63\xdf\x3a\xce\xd8\x48\ +\x96\xf1\x4c\x83\x62\xa9\xc0\xd2\xe2\x12\xcd\x66\xb3\xa7\x0b\x33\ +\x3d\x3d\xcd\x23\x8f\x3c\xc2\xf0\xd0\x30\xff\xf3\x2f\x3f\xc5\xde\ +\xc9\x09\x4a\x13\x0b\x8c\xde\x3a\xca\xca\xca\x0a\x61\x18\x92\xcb\ +\xe5\x38\x79\xf2\x24\x69\x9a\xf2\xde\xf7\xbe\x97\x83\x07\x0f\xf2\ +\x99\x4f\xfd\x0d\x19\x37\x8b\x9a\x9b\xe7\xae\x1f\x9e\xdc\xd4\x90\ +\x0d\x54\x55\xe3\xdc\xb9\x73\x84\x61\xc8\xe1\xc3\x87\x79\xdb\xdb\ +\xde\x46\x12\x27\x9c\x78\xf9\x55\x0a\x6a\x8b\x6d\xfb\x7d\xb4\x1b\ +\xbb\x69\xfc\xd7\x5f\x7f\x1d\x45\x51\x70\x5d\x17\x55\x55\x79\xe3\ +\x1b\xdf\xc8\xdb\x7f\xa8\xcb\xc2\xaf\x9e\x7c\x95\xd1\x1b\x54\x86\ +\x86\x07\x39\x77\xf6\x1c\xae\xeb\x92\xcb\xe5\x68\xb5\x5a\x7d\x16\ +\xfe\xc9\x9f\xfc\x49\x56\x96\x57\x78\xfa\xc9\xe7\xd8\x3b\x58\x65\ +\xfb\xf5\x1e\xcd\x56\x83\x72\xb9\x8c\xa0\xcb\xc2\x8d\x46\x03\x21\ +\x04\x1f\xff\xf8\xc7\x11\x42\xf0\xd4\xd7\x9e\x21\x2d\x27\x5c\xc8\ +\x9c\x47\x1b\x1b\x1b\xe3\xd2\xa5\x4b\x14\x8b\x45\xb6\x6d\xdb\xc6\ +\xe5\xcb\x97\x49\x92\x84\x3d\x7b\xf6\xf0\xf6\xb7\xbf\x9d\xb9\xb9\ +\x39\x56\xd7\x57\xa8\x54\x2a\xb8\xae\xcb\xf2\xf2\x32\x03\x03\x03\ +\x58\x96\x45\xa5\x52\xe9\xeb\xab\xef\x78\xc7\x3b\x50\x14\x85\x63\ +\xc7\x8f\x31\x3d\x3d\x4d\xa1\x9c\x47\xd7\x75\xb2\xd9\x2c\xcb\xcb\ +\xcb\xec\xd9\xb3\x87\xd7\x5e\x7b\x8d\x28\x8a\xb8\xe7\x9e\x7b\xb8\ +\xe9\xa6\x9b\x38\x7f\xfe\x3c\xcd\x66\x13\xcb\x6d\x33\x39\x39\xd9\ +\xcf\x5a\x6f\xdf\xbe\xbd\xcf\xcd\xdb\xb7\x6f\xef\xeb\xbc\xae\xe7\ +\xb2\xb6\xb6\x46\xa5\x52\xe1\xc5\x17\x5f\x64\x68\x70\x88\x6a\xb5\ +\xda\x17\xfc\x01\x6a\xb5\x1a\x07\xf6\x1f\xe0\xf9\x6f\x3c\x4f\xb9\ +\x5a\xa2\x58\x2c\x02\x30\x30\x30\x80\xeb\xba\x94\xcb\x65\x7a\xa8\ +\x57\x2e\x97\x79\xd3\x9b\xde\xc4\xf1\xe3\xc7\x39\x7b\xee\x2c\x3b\ +\x77\xee\xc4\x75\x5d\x2e\x5c\xb8\x40\x3e\x9f\xa7\x56\xab\x21\x84\ +\xa0\xd5\x6a\x91\xa6\x29\x53\x53\x53\x84\x61\xc8\xd0\x68\x1d\x29\ +\x25\x8b\x4b\x0b\x88\x1b\x6e\xb8\xe1\x1a\x16\xce\x66\xb3\xcc\xce\ +\xce\x9e\x9b\x9e\x9e\xde\xdd\x4b\x7c\xaa\xaa\xfa\x3d\x9a\x6d\x0f\ +\xb7\x3c\xcf\xb3\x33\x99\x8c\xa9\xaa\xaa\xbe\xb5\xcd\xa6\x7c\xd8\ +\x6f\x9b\x24\x09\x52\xca\x28\x8a\xa2\x40\x55\xd5\x42\x3e\x9f\x27\ +\x8e\xe3\x7e\x3f\xbd\x37\x63\xef\x99\xaa\x28\x0a\xba\xae\x77\x1a\ +\x8d\x86\xa8\xd5\x6a\x45\xdf\xf7\xd1\x75\xbd\xdf\x56\x51\x14\xe2\ +\x38\x46\x51\x14\x92\x24\xa1\x56\xab\x71\xea\xd4\xa9\x67\xa7\xa6\ +\xa6\x8e\xb6\xdb\x6d\xb2\xd9\xec\x35\xcc\xba\xf5\xbb\x61\x18\xac\ +\xae\xae\x52\xaf\xd7\xad\x30\x0c\x8b\x3d\x51\xbe\xa7\x25\xf7\x74\ +\xe4\x5e\x4c\x9b\xcc\xbf\x5e\x2c\x16\xeb\x61\x18\x62\x18\x46\x5f\ +\x17\xd7\x0a\x85\x62\x2a\xb6\xf0\x6a\x18\x86\x8a\x10\x42\xc9\xe5\ +\x72\x64\x32\x19\xc4\x26\xdb\xf6\xf4\xd2\x4d\x61\xb6\x1f\x94\xeb\ +\xba\x81\xa6\x69\x6a\x26\x93\x51\x85\x10\x90\x6e\x8a\xf0\xdf\xc5\ +\xcd\x9b\x4b\x9f\x68\x7d\x7d\xdd\xaf\xd7\xeb\x79\x21\x84\xcc\x9a\ +\x59\xd2\x64\x53\x0f\xde\xc2\xc2\xbd\xcf\xfa\xfa\x7a\x92\xcd\x66\ +\xf5\x4c\x26\x93\x66\x32\x99\x2e\x93\xb3\x45\x3f\xde\xd2\x7e\x73\ +\xad\x16\x46\x51\x44\xbe\x90\x4f\x45\xda\xe3\x6c\xfa\x4b\xb3\x5e\ +\x2c\x9b\x59\x74\x99\x24\x49\x52\x2c\x16\xbb\x2a\xf6\xbf\xd0\xb7\ +\x65\x59\x22\x08\x02\xaf\x54\x2a\xc5\xa6\x69\x4a\x52\x90\x49\x57\ +\x6f\xd6\x46\x76\x97\x93\xc4\xd2\x20\xee\xbf\x14\x12\xdb\xb6\x6b\ +\x13\x13\x13\x84\x51\x44\x52\xf4\xc8\x8d\xc4\xa4\xbe\x02\xbe\x4e\ +\xea\xa8\xa4\xae\xda\xbf\xa2\xb6\x6d\xaf\xd7\xeb\xf5\x9a\x69\x9a\ +\x5a\x24\x62\xc4\xa8\x4d\x2e\xab\x75\xb5\x5b\xd7\x20\xb1\x55\x44\ +\xd2\x1d\x1d\xcf\xf3\x9c\x20\x08\xd6\xea\xf5\xfa\x80\xaa\xaa\x69\ +\x3b\xd3\x64\x68\x52\x25\x76\x14\xf0\x74\x12\x57\x45\xfa\x2a\x3d\ +\x81\x3e\x0c\xc3\x28\x9b\xcd\x16\x6b\xb5\x5a\xe2\xa4\x1e\xa5\x5d\ +\x01\x24\x0a\xa9\xab\x76\xdb\xdb\x2a\x24\x0a\x20\x31\x4d\x53\x5c\ +\xba\x74\x29\x3e\x78\xf0\x20\x69\x94\x26\x8d\xfc\x2a\xdb\x76\x69\ +\x84\x36\xe0\x99\xa4\xae\x42\xea\xe8\xc8\x50\x60\x9a\x26\xed\x76\ +\x3b\x19\x1e\x1e\x8e\x73\x99\x6c\xd2\x0c\x6d\x59\xdb\x17\x23\xd2\ +\x6e\xdf\xd2\xd3\x49\x6d\x15\x19\x2b\x28\xaa\xc0\x30\x0c\xc5\xf7\ +\x7d\x67\xef\x9e\xbd\x81\x1f\x86\xa9\x1c\xb6\x29\xd6\x15\x12\x4f\ +\xa2\x95\x1e\x5c\xd5\x55\x55\xa5\xf1\x85\x1a\xb1\xd5\x65\x5b\x21\ +\x84\x6e\xdb\x36\x96\xef\x92\x8c\xad\x91\xd9\x1f\xb1\x2d\x3f\xcd\ +\x4a\xeb\x75\x34\xa9\x90\xba\x3a\x8d\x2f\xd6\x7a\x6f\xb3\x2c\x90\ +\x49\xd3\x54\xef\x18\x16\x43\x47\x9a\x8c\x56\x07\x51\x11\x34\x3a\ +\xcb\xe8\x19\x95\x8d\x2f\xd6\x88\x9b\x1a\x49\x92\x64\x85\x10\x85\ +\x34\x4d\x55\x40\xf5\x77\xac\x53\xbe\x25\x4b\x4d\x1f\x67\xa9\x79\ +\x05\x45\xa8\x78\xa7\x0b\xd8\xaf\x14\x00\x89\xae\xeb\x39\x40\x13\ +\x09\x2c\x69\xeb\x6c\xbf\x4b\x62\xa4\x25\x64\x9a\x10\x04\x6d\xd2\ +\x40\xa1\xf3\x62\x89\x60\xde\x40\xcd\xa9\x24\x49\x92\xf3\x3c\x8f\ +\xd4\x4d\xf5\xd5\xa9\x39\xa6\x0f\x0e\x30\xae\x4d\xb3\x62\xcd\x11\ +\x79\x29\x71\x5b\x63\xe3\xcb\x15\xc2\x30\x42\x08\xa1\xab\xaa\x1a\ +\x93\xa2\x9d\xf2\x17\x78\xeb\xd1\x3c\x22\x36\x30\x44\x86\xb6\xbd\ +\x8e\xae\x99\xb4\x9e\x2a\x13\x2e\x19\xbd\x5b\xba\x1e\x45\x51\x7e\ +\xd5\xea\x30\xfd\x88\x8d\x5a\xf6\x98\x2a\xed\x46\x79\x64\xe7\xe3\ +\x0c\x54\x86\x08\x93\xb0\xbf\xa2\x07\x64\x10\x04\x84\x41\x48\xac\ +\xfa\xdc\x5e\x7b\x37\x77\x6f\x7f\x27\xff\xe9\x0d\x7f\xcb\x74\xe5\ +\x36\x06\xea\xa5\xfe\x83\xbb\xc7\x94\x41\x10\x10\xcb\x90\xd6\x1a\ +\xbc\xeb\xe0\xcf\xf3\xd0\xc4\xe3\x1c\x9a\x38\xca\xdd\x07\x1f\xc6\ +\x0f\x9d\x5e\x7b\xd9\xd3\x91\xc3\x30\x24\x8c\x23\xde\x3c\xf3\x41\ +\x86\xd2\xdb\x79\xd3\x0d\xef\xe2\xc8\xe8\x0f\xe1\xd2\xc2\xdf\x8c\ +\xa3\xc7\xc2\xbe\x1f\x90\xc8\x88\x89\x81\xdd\xfc\xc8\xde\x7f\xcf\ +\xbf\x3b\xfa\xdf\x59\x9e\xd7\xd9\x31\x39\x43\x94\xfa\x04\xfe\x55\ +\x55\xae\xcb\xc2\x1e\xba\xa1\x32\x63\x1c\xe5\x8d\x13\xff\x86\xbd\ +\x85\x87\xf8\xc5\x37\x7e\x92\xd8\xb0\xfb\x9a\xf3\xa6\x2a\x27\x7d\ +\xcf\x27\x25\xc6\x0f\x42\xde\x77\xf0\x0f\xb9\x77\xe7\x3b\xf9\xe0\ +\xad\x7f\x40\xa9\x96\x23\x96\x5d\x1a\xbb\xaa\x26\xfa\x04\x51\x48\ +\xa2\x7a\xdc\x5b\xfa\x59\xf6\x0e\xde\x8a\xb2\x7f\xe4\x30\x23\x95\ +\xb1\x2e\x1d\x78\x2e\xfe\x26\x27\xf6\xde\x88\x71\x1c\xb0\xb7\x7e\ +\x84\xaf\x5c\xfc\x73\x2e\x5f\x59\xe4\xd0\xb6\xdb\x50\x64\x77\xd9\ +\xd0\xe3\xd5\x3e\x0b\x87\x21\xbb\xaa\x37\x71\x7e\xfd\x15\x8e\xcd\ +\x3d\xc9\x1b\xa6\xff\x35\xba\x92\x21\x0c\xbb\xf6\xb3\x5e\xdf\x3d\ +\x12\xc9\xe9\x45\x8a\x66\x95\x0b\xce\xb3\x5c\x57\xb8\x9f\xd1\xca\ +\x24\x06\x19\x3c\xcf\xed\xaa\x7c\x69\xda\xd7\x6e\xd3\x24\x25\xa3\ +\x64\x49\xf4\x16\x4f\x7c\xfb\x49\x0e\x8d\xdc\x41\x2d\xb3\x0d\x3f\ +\xf0\xfa\x71\xf7\x58\xd8\x73\x5d\x34\x55\xc5\x6a\xc2\x4b\x8b\x4f\ +\x52\x54\x87\x19\xa9\x0e\x41\x2a\xf0\x3d\x1f\xdf\xef\x0a\xeb\x41\ +\x18\xe0\x79\x2e\x42\x11\x5c\x3c\x63\x31\x34\x6a\xe0\x86\x1d\x0e\ +\x8e\xdf\x44\xc5\x1c\xee\x8a\xf4\x5b\x58\xd8\x75\x5d\xc2\x30\xa0\ +\xdd\xf6\xf8\xf1\x87\xde\xcd\x4b\xcb\x5f\x41\xf1\x43\x1f\x3f\xec\ +\x66\x1c\xc2\x4d\x1f\xdd\x56\x5d\x18\x54\xfc\xd8\x61\xa8\x30\xc1\ +\x40\x7e\x80\xa6\xdd\x04\xa1\x74\x99\x73\x13\x71\xba\xac\x1b\x90\ +\xc6\x29\x4e\xd8\x61\x20\x37\x48\xd1\xac\xd2\x8e\x56\x51\x95\xab\ +\xbe\xc2\x28\x8a\xfa\xc9\x84\xee\xec\x4d\x11\x08\x94\x24\x4b\xa2\ +\xdb\xb8\x5e\x80\x17\xba\x84\xc1\xb5\x7d\xf7\x66\x8c\x50\x54\x34\ +\x91\x65\x64\x60\x94\x75\x6b\x0d\x2f\xb2\x49\xe2\x84\x30\xb8\xba\ +\x8c\x09\xc2\x00\xcf\xf7\x51\x84\x4a\xbe\xa0\x33\x53\x3f\x84\x15\ +\x36\x50\x31\x00\x05\x7f\x73\x06\x02\x44\x61\x57\x17\x46\x42\xa9\ +\x6c\x92\x04\x1a\x9a\xa2\x23\x53\x08\x22\x97\x24\x4e\xfa\x62\x7a\ +\x6f\x4c\xa2\x28\xc2\xd4\x35\xae\x2c\x2f\x51\xcc\x54\xd1\x3e\x77\ +\xf1\xe3\x78\xda\x3a\x41\xe0\xe3\xba\x29\x19\x99\x5e\x75\x26\xc4\ +\x11\x65\x25\xcb\x17\x2e\xff\x2e\x3f\x7d\xf8\xe3\x3c\xb9\xf8\xdf\ +\x99\xeb\x9c\xc7\x4f\xec\x2e\xcb\x6e\x2e\x21\x7a\x59\x16\x19\x43\ +\x98\x9f\xc3\xee\x24\x1c\xd9\x73\x23\x7f\x73\xea\xb7\xa8\x0c\x16\ +\x88\xa2\x18\xd7\x0d\x89\xe3\xb8\x6f\x91\x00\xc8\x18\x0a\x4f\x5c\ +\xf8\x5f\x7c\xe4\xde\xff\xc2\x5f\x9c\xfa\x45\xe2\x58\xa2\xa2\xe1\ +\xba\x5d\x59\x53\xd7\xf5\x6e\xf0\x91\x24\x4d\x25\x0b\xed\x0b\x2c\ +\x8a\x55\x4a\x25\x03\x6d\x78\x8e\x85\xb6\x4e\x1c\x77\x6d\x19\x99\ +\x9c\xd9\x8d\xdb\xf5\x70\x2d\x17\x43\x6a\x5c\x09\x5f\x62\xc6\xbb\ +\x81\x96\xf6\x1a\xbf\xf9\x8d\x0f\xa0\xeb\x1a\xb6\xd3\x46\x57\xf5\ +\xbe\xb0\x1e\xba\x01\x69\x51\x32\x35\x35\xc0\x57\x4f\x7e\x81\x99\ +\xc9\x51\x7e\xfd\xf9\x1f\x27\x10\x36\x51\x1c\xe1\xba\x11\xaa\xae\ +\x5c\xbd\x2b\xe3\x88\x72\xa1\xcc\xef\x7c\xf3\x71\x3e\x72\xf4\xd7\ +\xd1\x6c\x7d\x99\xf5\xc5\x16\x2b\xaf\x37\x89\x83\x94\x5c\xd4\xd5\ +\x40\x9b\xcd\x26\x7e\x12\x91\x77\x73\x84\xea\x3a\x7f\xf0\xed\x8f\ +\x72\xc3\xcc\x8d\xb4\x5a\x57\x38\xff\x4f\x01\xad\x96\xdb\xd7\x85\ +\xdb\xed\x36\x71\x1c\x43\x4e\x20\x45\x95\xcf\x5f\xfe\x6f\x3c\x9c\ +\xf9\x57\x34\xd3\x79\x16\x8f\xe9\xac\xce\x36\x89\x9c\xee\xba\x4a\ +\xd3\xb4\xbe\xff\x26\x17\xe5\x58\x8e\x5e\xe5\xef\xce\xfe\x0e\x8e\ +\x6c\xd2\xf6\x9a\x2c\x5d\xb4\x68\x6e\x61\x61\xcf\xf3\x48\xfc\x98\ +\x70\x50\xe0\xcb\x0c\x5f\x5f\xf8\x53\x0e\x6b\x47\x49\x0b\x1d\xe6\ +\x2f\x84\x2c\x9c\x6e\xe1\xb5\x63\x34\xa3\xbb\x32\xb0\x2c\xab\xcb\ +\xc2\x71\x81\x40\x59\xe3\x45\xfb\x2f\x48\x8c\x80\x85\x53\xeb\xbc\ +\xfe\xb4\x4b\xa7\xe9\x7e\x17\x0b\x77\xe8\x14\x52\x62\x4a\x1c\x6b\ +\x7e\x86\xf9\x78\x27\x4d\xed\x32\xeb\x97\x5c\x2e\x7c\xa3\x2b\x30\ +\x65\x32\x19\x92\x24\x61\x63\xa3\x41\x47\x26\x04\xa1\x8e\xa5\xbc\ +\xce\xc7\x9f\xfe\x08\x62\xfb\xc4\xb4\x4c\x3c\xc8\x54\xba\x9d\xe6\ +\x72\x39\xa2\x28\xb2\xa4\x94\x45\xdd\x30\x30\x27\x13\x8a\x83\x2a\ +\xf6\x52\x44\x63\xd6\x23\x6a\xa8\x68\x86\x82\x9a\xe9\x2f\x90\xe7\ +\x34\x4d\x1b\x30\x4d\xb3\x18\xeb\x11\x43\x87\x0d\xe2\x46\xc2\xc6\ +\x15\x07\x7f\x59\x25\xf1\x25\x66\x59\x25\x4d\x13\x00\x0b\x68\x1a\ +\x86\x31\xa9\x69\x1a\xe6\x9e\x84\x72\x51\xa7\x31\xe7\x61\xcf\x27\ +\xf8\x1b\xa0\xe7\x15\x14\xbd\x6b\x6f\x2b\x16\x8b\x96\xe7\x79\xc5\ +\x8c\x61\xe2\x19\x01\x33\x77\xe6\x68\xcf\x85\x34\xe7\x5d\xfc\x55\ +\x95\xd8\x97\x64\x4a\x57\x59\x78\x6e\x6e\xee\xd9\x89\x89\x89\xa3\ +\x49\x94\xa2\x8c\x85\xe4\x73\x2a\x8d\xd7\x03\xac\x85\x10\x81\x8a\ +\x66\x8a\x4d\x5b\x9e\x4a\x10\x04\x94\xcb\x65\x2b\x0a\xc2\xa2\x65\ +\xc4\xec\xbf\xa7\x40\x73\x36\xc0\x5a\x0a\x70\x16\x24\x69\x04\x66\ +\x45\x21\x4d\xba\xba\xb0\xe7\x79\xeb\x86\x61\xd4\x51\x75\x26\xef\ +\xd6\x88\xec\x14\x77\x2d\x46\x3b\x72\xcb\x4d\x34\x5b\x4d\x0a\x85\ +\x02\xed\x76\x9b\x20\x08\x58\x58\x58\xe0\xb1\xc7\x1e\x23\x9f\xcf\ +\x93\x84\x29\x2f\xbd\xfc\x32\x5a\x4d\xc5\xcd\x39\x28\xaa\x82\xe3\ +\x38\xac\xae\xae\x52\xad\x56\x39\x7b\xf6\x2c\x33\x33\x33\xdc\x7f\ +\xff\xfd\x0c\x0f\x0d\xf3\xe9\xff\xf9\x19\x76\x4d\x4d\xb0\xe0\x2e\ +\xb0\xed\xe0\x28\x1b\x8d\x0d\x6c\xdb\xa6\x52\xa9\xf0\xca\x2b\xaf\ +\x20\xa5\xe4\x7d\xef\x7b\x1f\xf5\x7a\x9d\x27\xbe\xf2\x35\x74\x0c\ +\x32\xc6\x22\xe3\xf7\x8c\xb1\xba\xb6\x82\xd1\xb5\xa9\xf5\xfd\xda\ +\x77\xde\x79\x27\x37\x1e\x3e\x8c\xa1\xe9\x7c\xfb\x5b\x2f\x33\x5c\ +\x0a\x68\x8f\xb7\xd1\xa6\x55\xaa\xd5\x2a\x67\xce\x9c\x21\x93\xc9\ +\x6c\x5a\x36\x34\xee\xbb\xef\x3e\x1e\x7d\xf3\xa3\xbc\xf0\x8d\x17\ +\x79\xe9\xa5\x97\x98\xda\x97\xa1\x7c\x7b\x89\xd9\xd9\x59\x2c\xcb\ +\xa2\x5c\x2e\xb3\xbe\xbe\xce\xd2\xd2\x12\xd5\x6a\x95\x77\xbf\xfb\ +\xdd\x34\x36\x36\x78\xe6\xa9\xe7\xd9\x57\x1f\xc0\xcf\x7a\x34\x06\ +\x1a\x0c\x0e\x0e\x12\x86\x21\x2b\x2b\x2b\xb4\xdb\x6d\x3c\xcf\xe3\ +\xc3\x1f\xfe\x30\x99\x4c\x86\x57\x5f\x39\x4d\x4b\x69\xe2\x97\x3d\ +\xb4\xa9\xe9\x29\xdc\x53\x2e\x9a\xa6\x31\x33\x33\xc3\x99\x33\x67\ +\x48\xd3\x94\x5d\xbb\x76\xf1\xc8\x23\x8f\xf0\xe2\x8b\x2f\xb2\xde\ +\x5c\xa3\x56\xab\x21\xa5\xe4\xfc\xf9\xf3\xd4\xeb\x75\x3c\xcf\x63\ +\x60\x60\xa0\x6f\x9b\x7d\xec\xb1\xc7\xf0\x7d\x9f\x13\x27\x4f\x30\ +\x33\x33\x43\xa1\x94\xa7\x5c\x2e\x53\x1f\xac\x73\xfa\xf4\x69\x6e\ +\xba\xe9\x26\x4e\x9c\x38\x41\x10\x04\xdc\x7f\xff\xfd\x4c\x4d\x4d\ +\xd1\x6e\xb7\xd9\xd8\xd8\xc0\x0b\x1d\xf6\xee\xdb\x0b\x02\x5c\xd7\ +\x65\xf7\xee\xdd\xcc\xcf\xcf\x03\xb0\x6d\xdb\x36\xde\xf9\x8e\x77\ +\xe0\x79\x1e\x17\x2e\x5e\x40\xd7\xab\xec\x1f\xb8\x8e\x6f\x7f\xfb\ +\xdb\xd4\x6a\x35\xea\xf5\x3a\xba\xae\xf7\xb3\xe3\xbb\x77\xef\xe6\ +\xbe\x7b\xef\xe3\xe4\x89\x93\xd4\x06\xab\x98\xa6\x49\xb9\x5c\xa6\ +\xd5\x6a\xf5\x2f\xa4\x65\x59\x00\x94\xcb\x65\xde\xf6\xb6\xb7\xf1\ +\xc2\x0b\x2f\x70\xfe\xc2\x05\xf6\xee\xdd\x8b\x65\x59\x5c\xbc\x78\ +\x91\x81\x81\x01\x4a\xa5\x12\xa6\x69\xf2\xda\x6b\xaf\x21\xa5\xe4\ +\xc8\x91\x23\x4c\x4c\x4c\xf4\x66\x24\xaf\xbd\xf6\x5a\xd7\x23\xdd\ +\x63\xbf\x28\x8a\xc8\x66\xb3\x58\x96\x65\x65\x32\x99\xe2\xb6\x6d\ +\xdb\x58\x5a\x5a\x42\xd3\xb4\x1e\xcb\xf6\x59\xb4\xb7\x8f\xeb\xba\ +\x73\xd9\x6c\x76\x60\x64\x64\xa4\xd8\x4b\x3e\xf6\xb6\xa7\x69\xda\ +\xff\xbe\xe9\xdf\xb3\xc2\x30\x6c\xe6\xf3\xf9\xc9\xf1\xf1\x71\x16\ +\x17\x17\x7b\x0b\xf7\xee\x33\x74\x93\xa3\x7b\x8c\xab\x69\x9a\xe5\ +\xba\x6e\x71\x66\x66\xa6\xef\x70\x48\xd3\xb4\xcf\xca\x3d\x96\x4e\ +\x92\x84\x6a\xb5\xda\x67\xe1\x9e\x51\x60\x2b\xe3\xf7\x72\x97\xbd\ +\x9c\x64\xa3\xd1\x60\x68\x68\xc8\xca\xe5\x72\xc5\xad\x2b\x84\xad\ +\xb1\xf7\x58\x5e\x51\x14\xda\xed\xf6\x7a\xb5\x5a\xad\xd7\x6a\x35\ +\x9a\xcd\x66\x9f\x99\xb5\x6c\x26\x1b\xf4\x98\x6f\xf3\xf9\x27\x6d\ +\xdb\x6e\xd4\xeb\x75\xa3\xd1\x68\x90\xcd\xe6\x20\x05\x5d\xdd\xc2\ +\xc1\x5b\x18\xdd\xb6\x6d\x3f\x93\xc9\x48\xc7\x71\x10\x42\x90\x35\ +\x73\x7d\xdf\x72\x9f\x27\xaf\xb2\xb0\xf0\x3c\x8f\x4c\x26\x13\xae\ +\xaf\xaf\xcb\x6c\x26\x4b\x9a\x82\x40\xa2\x6b\xc6\x35\xcc\x2a\x13\ +\x6a\x82\x26\x00\x00\x1f\x45\x49\x44\x41\x54\x84\x60\x75\x75\xd5\ +\xca\xe5\x72\x99\x76\xbb\xad\x17\x8b\xc5\x2e\x93\x7f\x9f\x7e\x7b\ +\x03\x93\xa6\x69\x1b\xe8\x14\x8b\xc5\x10\x49\xbf\xfd\x77\xf3\xb0\ +\xaa\xaa\x04\x41\x10\x85\x61\xa8\xab\xaa\x6a\x02\x52\x53\x74\x34\ +\x45\xbf\xf6\x1c\x05\x08\x04\xb6\x6d\x8b\x24\x49\x56\x72\xb9\x5c\ +\xd9\xb6\xed\xd4\xd0\xcd\xbe\x9c\xaa\x8d\xec\x2d\x99\xf1\x86\x81\ +\x48\x05\xa8\x5d\x9d\xe0\xf2\xe5\xcb\xcd\xb1\xb1\xb1\xed\x9e\xe7\ +\x93\x16\x3d\xb2\x63\x11\x69\x92\x82\xab\x93\xb4\x32\x24\x2d\xad\ +\xef\x91\x76\x1c\xa7\x30\x31\x31\xa1\xaa\xaa\x4a\xac\x24\x24\xdb\ +\xda\x94\xcb\x2a\x49\x24\x51\x82\x0c\x51\x43\x43\x3a\x3a\x02\x81\ +\xe3\x38\xba\xe7\x79\xa5\x7a\xbd\x6e\xa8\xaa\x4a\x33\xdb\x60\x62\ +\x87\x4e\xe4\x27\xc8\x4e\x96\xa4\xad\x21\x5d\xb5\x9f\xf4\x74\x5d\ +\x37\xc9\x64\x32\xf6\xf6\xc9\xc9\x01\x37\x0e\xc8\xef\x75\x50\x84\ +\x20\x75\x55\xd2\x8e\x49\xd2\xd4\x21\xa5\xeb\x91\x36\x0c\xce\x9c\ +\x39\xa3\x4f\x4c\x4c\x94\x64\x22\x69\xe6\x36\x18\x99\xd6\x88\xfc\ +\x14\x6c\x93\xa4\xad\x93\x74\xba\x71\x1b\x86\xce\xca\xca\x0a\x43\ +\x43\x43\xcd\x5c\x36\x67\xac\x07\x1d\x86\x0f\x74\x0d\xec\xa9\xab\ +\x20\x2d\x93\x68\xa3\x1b\xb3\xa2\x77\x97\x53\xed\x76\x7b\x6e\x68\ +\x70\x70\xbf\x17\x46\x88\x6d\x36\xc5\xaa\x42\x1c\x26\x68\xe5\x37\ +\xae\xa2\x48\x9d\xd6\xd7\xab\x44\x2b\x46\xaf\xf6\x22\xaf\x69\x1a\ +\x71\x9a\x20\x47\x6d\xb4\xc3\x2d\xf6\xd5\x6e\x66\xc5\xbe\x8c\xed\ +\x36\x50\xbc\x0c\x8d\x2f\x0c\xf6\xec\x17\x5a\x1c\xc7\x4a\x18\x86\ +\x58\x9a\x83\xb9\x63\x89\xfd\x3b\x0f\x32\x59\x9d\xe6\xe9\x73\xff\ +\x40\x25\x57\x63\xfd\xab\x39\x82\x05\x13\xd7\x75\x15\x45\x51\xb4\ +\xde\xed\x14\xef\x6c\x52\xbc\x39\xc3\x74\xe9\x00\xe7\x57\x4e\x92\ +\xa6\x92\xe8\x74\x15\xfb\x44\xbe\x97\x20\x50\xa3\x28\xd2\x7d\x37\ +\x60\x21\x5d\xe1\xe0\x4d\x0e\x25\x31\x8c\x24\xc0\xf6\x56\x89\x2c\ +\x81\x73\xac\x4a\xb0\xa0\xf7\x6e\xd1\x9c\xaa\xa9\xc8\x50\x62\x4f\ +\xad\x31\x70\x7b\x99\xaa\x36\xc1\xba\x33\x8f\x65\x3b\x18\xd6\x00\ +\x8d\x7f\x2e\x03\xa2\x97\x2e\xd3\x55\x29\x38\x1f\x2e\xb2\xff\x68\ +\x19\x2d\xc9\x92\x33\xb2\xcc\x6f\xbc\x4e\x45\x14\xe8\x3c\x3b\x40\ +\xb8\x64\xf4\xd2\x68\x75\x10\xb4\x02\x8f\x1d\xb7\xfa\x50\x6c\x73\ +\xd3\xf0\x3d\x28\x6f\xde\xf1\xb3\x8c\x0c\x4e\x11\xa7\x61\xdf\x23\ +\x0d\x48\xdf\xf7\xf1\x3d\x9f\x98\x80\x5d\xc6\x03\xfc\xab\x1b\x3e\ +\xc6\x8f\x5d\xf7\x9b\x5c\x3f\xf8\x28\xa3\x63\xa3\x7d\xed\x36\xde\ +\x74\x9f\x06\x41\x40\x9c\x44\xac\xaf\x06\xfc\xe8\xc1\x9f\x43\xb6\ +\x07\xf9\xa9\x23\xbf\xce\x0f\x1d\x79\x1f\x41\xe2\x5f\xe3\x50\xf5\ +\x3c\xaf\xef\xfc\x7c\xf3\xcc\x87\xd8\xa1\x3f\xc8\xdd\x3b\x7f\x90\ +\x37\xed\xfc\x20\xa1\x66\xe3\x79\x57\xfb\xee\x89\x56\x51\x1a\x31\ +\x9c\x9f\xe2\xa1\x89\x0f\xf1\x73\x77\xfd\x19\xf6\xd2\x20\x37\xee\ +\xb9\x95\x20\xb5\xaf\xd5\x85\xfd\x00\xd7\x75\xd1\x74\xc1\x8e\xdc\ +\xed\x7c\xf8\xc8\x1f\x70\xa0\xfa\x46\x7e\xe9\xbe\x4f\x11\x67\xba\ +\x6d\xb7\x78\xa4\xa5\xeb\x7a\x24\xa4\x78\x81\xcf\xfb\x0e\xfc\x01\ +\xf7\xed\xf8\x51\x7e\xe6\x96\x4f\x32\x36\xbe\x8d\x30\xbd\xd6\x23\ +\xed\xf9\x1e\x7e\x10\x10\x0b\x97\xbb\x73\x1f\xe3\xc0\xf0\x9d\x28\ +\x35\x73\x9c\xa1\xfc\x58\x9f\x67\x7b\xce\xa5\xfe\x49\xc6\x01\xd7\ +\x0d\x1f\xe1\x89\x4b\x7f\xc1\x97\x5f\x78\x8a\xbd\x43\x37\xf4\x6c\ +\x1a\xfd\x37\x5f\xdf\x23\x1d\xfa\xd4\x8c\x49\xe6\xdb\x17\x78\x75\ +\xe5\x05\x6e\x99\x78\x00\x3f\xb6\xfb\xfa\xeb\x56\x8f\xb4\xe7\x79\ +\x64\xf5\x22\xe5\x4c\x95\x67\x16\x3e\xcd\x91\x91\x47\x29\x64\x4a\ +\x68\xa9\x89\xe7\x79\xb8\xae\xbb\xc5\xc7\xec\x11\x47\x11\xe5\xec\ +\x00\x4a\xa1\xcd\x17\x5f\xfc\x12\x3b\x6b\x07\x29\x68\x15\xfc\x20\ +\xc0\xf3\xbd\xab\x16\x5f\xdf\xbf\xea\x91\x6e\xe8\x7c\xe6\xe5\x3f\ +\x24\x9f\x8e\x33\x33\x3e\x09\xa9\x8a\xe7\x5f\xf5\x48\x77\xe3\xea\ +\x7a\xa4\x2f\x9c\xb6\xa8\x0d\x2b\xac\x3b\x8b\xec\x9f\x38\x44\x4e\ +\x2d\x6f\xb2\xb2\x77\xcd\x85\x8f\xc2\x90\x76\xdb\xe3\xa7\x1e\xfd\ +\x71\xbe\x7a\xe9\x93\x28\x61\x1c\x63\x79\x9d\x4d\x16\xbe\xea\x76\ +\xef\x79\x89\x91\x02\x27\xb4\x19\x2e\x6c\x67\xa8\x32\x44\xcb\x6d\ +\xf5\xf5\xd5\xad\xbc\x1a\x86\x21\x71\x94\x12\xa4\x0e\xb5\xdc\x08\ +\x05\x7d\x80\x8e\xdf\x24\x6f\x94\xfb\x09\x87\x9e\x1a\xd7\x9b\xb1\ +\xa9\x4c\x10\x28\x68\x69\x9e\x58\xb3\xf0\xbc\x08\x3f\xf2\x09\x43\ +\xbf\xdf\x77\x92\x24\x04\xa1\x4f\x12\xa7\xa4\x52\x22\x63\x9d\xb1\ +\xda\x04\xab\xad\x35\xc2\x34\xd8\xe4\xd5\x2d\x1e\xe9\x4d\x83\x80\ +\xa2\xa8\x64\xb3\x1a\xe3\xe5\x19\x2c\xbf\x89\x21\xf2\x48\xb9\xe9\ +\xcf\x0e\xba\x49\x8d\x5e\xa6\x47\x4a\x28\x57\x4c\xe2\x40\x43\x57\ +\x0c\x04\x0a\x61\xe2\x13\x47\xc9\x35\x1e\xe9\x1e\x17\x1b\xba\xc6\ +\xdc\xd2\x12\x45\xa3\x8a\x72\xac\xf9\x69\x7c\xd1\xda\xf4\x39\x7b\ +\xdf\x57\x17\xfe\xc6\xca\xa7\xd9\x6e\xdc\xce\xf8\x4e\x85\x13\xcd\ +\x7f\xc2\x89\xdb\xb8\x6e\x37\x63\xd2\xbb\x85\x5d\xd7\x25\x08\x43\ +\x0a\xb5\x90\x97\x5f\xff\x36\x8f\x3f\xfc\x4b\x7c\xfc\xf9\xf7\xf1\ +\xed\xc5\x27\x49\x93\xf4\x9a\x6c\x4c\xaf\x6f\xd5\x48\xf9\xfa\x85\ +\xcf\xf2\xf8\xbd\xbf\xc2\xe7\x4e\xfd\x01\x67\xec\xaf\xa1\xa2\xe2\ +\xba\xd7\xce\x6e\xd7\xf5\x88\xe2\x88\x25\xeb\x12\xed\x8e\x4d\x6d\ +\xd8\x40\xd6\x2f\xb2\x61\xaf\x10\x27\xdd\x4c\x4f\x3f\x9d\xe5\xfb\ +\xb8\x8e\x8b\x94\xd0\xe0\x2c\x7b\x86\x6e\xc0\xcb\x5f\xe4\x77\x9e\ +\xf9\x18\xba\xa6\x5f\x33\xbb\xbb\x71\x3b\x24\x49\xca\xd4\xd4\x00\ +\x4f\x9d\xfe\x67\xc6\x6b\x93\xfc\xc6\x73\xef\x07\x91\xf4\xfb\xee\ +\x5d\x78\xd7\xeb\xde\xc2\x95\x7c\x99\xdf\x78\xe6\x83\x7c\xf0\xa6\ +\xdf\x41\x6b\x27\x8b\xb4\xa3\x15\x96\xce\x35\xf0\x3b\x29\x71\x9a\ +\x47\x08\x41\xb3\xd9\xa4\xdd\xb1\x28\xb8\x39\x84\xa9\xf2\x47\x2f\ +\x3f\xce\x1b\xf6\xfe\x10\xab\xf1\x79\xd6\xbf\xd3\xe5\xdf\x5e\x32\ +\xc1\xb6\x6d\x5a\xad\x56\x37\x87\x2f\x2a\x3c\xbb\xf6\x67\xa8\xaf\ +\x25\xb4\xc3\x65\x5a\x97\x57\x59\x38\xd3\xc0\x6f\xa7\xdf\xc3\xc2\ +\xf9\x28\xc7\x42\xf8\x32\x9f\x3f\xf3\x87\x58\x41\x93\x96\x7f\x9e\ +\xd5\x79\x9b\x56\xd3\x05\x21\xb7\xe8\xc2\x31\x81\x96\x12\x93\xe7\ +\x2b\xaf\xff\x0f\xee\xd1\xde\x02\x19\x87\xb3\xf3\x27\x58\x39\xdb\ +\xd5\x85\x35\x43\x05\xa0\xdd\x6e\x63\x37\x6d\x32\x51\x81\x66\xf2\ +\x3a\x5f\xb8\xf4\xbb\xb8\x71\x93\x8b\xce\x4b\x6c\x2c\xf8\x6c\x2c\ +\x37\x31\xf2\x5d\x0d\xc4\xb6\x6d\xac\x46\x07\xbb\xd8\xd5\x85\x9f\ +\x5f\xfb\x4b\x2e\xd9\x7b\x58\x8b\xcf\x11\x58\x3e\xe7\x9f\x5e\x43\ +\xd1\xe9\xeb\xc2\xcd\x66\x93\x4e\x9a\x10\x44\x06\xe6\xc0\x02\xbf\ +\xfc\xa5\x9f\x40\xec\xd8\xb9\x43\xc6\xb6\xc4\x2c\x68\x24\x69\x42\ +\x2e\x97\x63\x7d\x7d\xfd\xdc\xe0\xe0\xe0\x6e\x5d\xd3\xd1\xb6\x85\ +\xe4\xea\x82\x8d\xb3\x3e\x76\x23\x40\x7a\x3a\xc8\xae\xde\xbb\x99\ +\x91\x5e\xad\x54\x2a\x45\x20\x8b\x2e\xc9\x5f\x97\x12\x2d\xa7\xb4\ +\x96\x1c\x12\x57\x23\xf1\x40\xcf\x0a\x52\x99\xf6\x3d\xd2\xa6\x69\ +\x16\x72\xb9\x1c\xca\x8c\x4f\x5e\x55\x59\x39\xef\x10\x75\x20\xf1\ +\xe8\x56\x11\xe9\xdd\x75\x5d\x3e\x9f\x5f\x6c\xb5\x5a\xa5\x91\xe1\ +\x91\x82\x15\x5a\xcc\x3c\x98\x63\xf9\x84\x47\x6b\xc9\x45\x09\x0c\ +\x02\x27\xc1\xc8\x77\x39\xfb\x1a\x16\x0e\x12\xf4\xbd\x31\x85\xac\ +\xca\xca\x69\x9b\xd0\x92\xa4\x9e\x82\x4c\x41\xcb\x82\xd8\x4c\xc7\ +\x55\x2a\x15\x4b\xa6\xb2\xd8\xc1\x67\xef\xbd\x79\x56\x4e\xba\xd8\ +\xab\x21\xa9\xaf\x10\x3a\x29\x66\x49\x25\x89\x93\x9e\xe9\xf4\x58\ +\x3e\x9f\x3f\x62\x98\x59\xc6\xee\x56\xb0\x97\x23\xda\x73\x21\xda\ +\xa1\x03\x87\x7a\x86\x6e\xe6\xe6\xe6\x48\xd3\x94\x85\x85\x05\x1e\ +\x7e\xf8\x61\x0e\x1c\x38\x40\x6b\xa3\xcd\x73\xcf\x7e\x83\xc9\x5d\ +\x19\x36\x1a\x1b\x14\x8b\x05\x36\x36\x36\x68\x34\x1a\x54\xab\x55\ +\xce\x9d\x3b\x87\xa6\x69\xbc\xef\x7d\xef\xa3\x90\x2f\xf0\x99\x4f\ +\x7d\x96\xda\xb6\x2a\x57\xd2\x39\x86\x86\x87\x58\x5a\x5a\xc2\x34\ +\xbb\x0e\xfa\x8b\x17\x2f\x12\x86\x21\x8f\x3f\xfe\x38\xf5\x7a\x9d\ +\x2f\x7e\xfe\x1f\xbb\x25\x57\x43\xcb\x8c\x1c\x1a\x61\x75\x75\x95\ +\x6c\x2e\xdb\xd7\xa6\x3d\xcf\xe3\xd6\x5b\x6f\xe5\x91\x47\x1e\xc1\ +\xd0\x0d\x9e\x7d\xea\x79\x0a\x03\x0d\xe2\x52\x44\x14\xc7\x0c\x0e\ +\xd6\xb9\x70\xe1\x02\xaa\xaa\x76\x4d\x42\x8a\xc2\xbd\xf7\xde\xcb\ +\xfd\xf7\xdf\xcf\xd3\x5f\x7f\x86\xd3\xa7\xce\x50\x9b\xd4\x31\x32\ +\x26\xcd\x46\x03\xdb\xb5\xc9\x66\xb2\x74\x3a\x1d\x56\x56\x56\xa8\ +\xd5\x6a\xbc\xef\xfd\xef\x63\x7e\x6e\x9e\xe7\x9e\x7a\x9e\xeb\x46\ +\xf3\x44\x83\x01\x8d\x66\x93\x5a\xad\x4a\x14\x45\x2c\x2f\x2f\xf7\ +\x2d\x29\x1f\xfa\xd0\x87\xa8\xd7\x6b\x7c\xeb\xf9\x97\x58\xd5\x57\ +\x88\xb6\x07\x68\x3b\x76\xec\xe8\x83\x75\xa1\x50\xe0\xf4\xe9\xd3\ +\x24\x49\xc2\xde\xbd\x7b\xb9\xfb\xee\xbb\x09\x82\x80\x95\xf5\x65\ +\x06\x07\x07\xd9\xd8\xd8\xe8\xdf\xba\x96\x65\x5d\xe3\xa9\x7e\xe0\ +\x81\x07\x50\x55\x95\xaf\x3f\xf5\x75\x6e\xbb\xf5\x36\xf4\xe3\x1a\ +\xa3\xa3\xa3\xfd\x5b\xf6\xe6\x9b\x6f\xe6\xd2\xa5\x4b\x24\x49\xc2\ +\xad\xb7\xde\x4a\xa1\xd0\xbd\x10\xcb\xcb\xcb\xf8\x91\xcb\xee\x3d\ +\xbb\x31\x33\x26\x8e\xe3\x70\xd3\x4d\x37\xf1\xb9\xcf\x7d\x0e\xdf\ +\xf7\xd9\xb1\x63\x07\x87\x0e\x1d\x62\xdf\xbe\x7d\xb4\xda\x2d\xd6\ +\xd7\xd7\x29\x16\x8b\x3c\xf7\xdc\x73\x8c\x8d\x8d\xd1\xe9\x74\xd0\ +\x75\x9d\x2b\x57\xae\xa0\x28\x0a\xd3\xd3\xd3\x3c\xfa\xe8\xa3\x34\ +\x9b\x4d\x6c\xcf\xa2\x56\xab\x01\xb0\x52\xc8\x73\xee\xdc\x39\x66\ +\x66\x66\xb8\x70\xe1\x02\xab\xab\xab\x14\x0a\x05\xee\xb8\xfd\x0e\ +\x4e\x16\x4e\x72\xf6\xfc\x59\x0e\x1d\x3c\xc4\xfa\xfa\x3a\x97\x2e\ +\x5d\xa2\x5e\xaf\x53\xad\x56\xb9\x78\xf1\x22\x27\x4e\x9c\x00\xd8\ +\x52\xb7\xdc\x4d\xae\xbe\xf4\xd2\x4b\x57\x3d\xd2\x3d\x1d\xb4\xa7\ +\x0b\xcf\xcc\xcc\xec\xce\xe7\xf3\x7d\xee\xdb\xaa\xdb\x6e\xf5\x09\ +\x5b\x96\xb5\x3a\x38\x38\x58\xcc\x64\x32\xd9\x5e\x8e\x6d\x6b\x6d\ +\xee\xd6\xbe\x93\x24\x89\xc2\x30\x0c\xaa\xd5\x6a\xa1\x52\xa9\xf4\ +\x8d\xe1\x5b\x75\xe1\xad\x35\xbe\x42\x88\xc5\x4e\xa7\x53\xda\xb5\ +\x6b\x57\xa1\xd5\x6a\x5d\xc3\xcb\x5b\x75\xe7\x34\x4d\x19\x18\x18\ +\xe0\xd4\xa9\x53\xcf\x1e\x38\x70\xe0\xa8\xa2\x28\xdd\x67\xf2\x16\ +\x9f\xf3\x56\x8e\xd7\x34\x8d\x66\xb3\xc9\xd0\xd0\x90\x95\xc9\x64\ +\x8a\xbd\xaa\xa8\xad\xbc\xdf\xd3\xa7\x7b\xe8\xb7\xb6\xb6\x76\x6c\ +\x64\x64\xe4\x48\xb9\x5c\xee\xd6\xc4\xf4\x6a\x9a\xd3\x44\x6e\x28\ +\xaa\x10\x42\x88\x1e\x23\xca\x34\x4d\xd7\x3d\xcf\x2b\xb6\xdb\xed\ +\x54\x11\x8a\x90\xa9\xb8\xea\x1d\xde\xc2\x9f\x42\x08\x91\x24\xc9\ +\x7c\xa7\xd3\xa9\xd8\xb6\x9d\xef\x5a\x8c\x95\x6e\x9d\xad\x72\x0d\ +\x33\xf7\x4e\xc4\x0f\xc3\xd0\x75\x5d\xb7\xe6\x38\x8e\x54\x85\x4a\ +\x9a\xf2\x7d\xfb\xde\xac\x17\x5e\x54\x14\x45\xac\xac\xac\x44\x02\ +\x21\xb7\xb2\xad\x10\xb2\x3f\xf8\xaa\xaa\x62\xdb\xb6\x04\x56\x1a\ +\x8d\xc6\x46\x92\x24\xc1\xbf\xd4\xf7\xe6\x52\xca\x71\x1c\x27\xef\ +\xfb\x7e\xac\x20\x64\x2a\xaf\xd6\x0b\xf7\xda\xab\xaa\x0a\x20\xa2\ +\x28\x0a\xe3\x38\x76\xd3\x34\x6d\x6f\x6c\x6c\x24\x48\x01\x12\x54\ +\x4d\xd5\xb4\xf1\xbd\x83\xb5\xa4\xa9\x23\xd4\x6e\x6d\x6c\x77\x6d\ +\xe4\x8f\x0e\x0e\x0e\xc6\x49\x9c\x10\x16\x1d\x72\xdb\x03\x68\x65\ +\x48\xd6\x4d\x92\x8e\xd6\x7d\xd9\x1a\x12\x40\x49\x92\xc4\xa9\xd5\ +\x6a\x59\x4d\xd3\x32\x31\x09\xd1\x78\x83\x81\x5c\x96\x68\xcd\x20\ +\xd9\x30\x91\x91\x82\x62\x76\x5d\xe7\x41\x10\xb8\xc0\xda\xe0\xe0\ +\xe0\x80\xa2\x28\xe9\xba\xba\xce\xe4\x75\x2a\xc9\x86\x49\xbc\x62\ +\x92\x3a\x3a\x42\x93\x08\xad\x3b\x63\x72\xb9\xdc\x36\x45\x51\x46\ +\x2b\x95\x0a\x7e\x1c\x92\xb9\xae\x83\xa1\x2a\xc4\x2d\x83\xb4\xd1\ +\xe5\x5b\xa1\x4b\x50\x24\xba\xd6\xbd\x8d\x47\x46\x46\x22\x99\xa4\ +\xc9\x9a\xb2\xc1\xf6\xeb\x15\xc2\x55\x83\x68\xd5\x44\xda\x3a\x42\ +\x91\x08\xbd\xeb\xd2\x6f\x34\x1a\xb9\xc9\xc9\xc9\x11\x24\xca\x62\ +\xd0\x60\xea\x66\x20\x12\x24\x4d\x9d\xa4\x91\x21\xb1\x34\x54\x53\ +\x22\x14\x41\xb3\xd9\x5c\x0f\xc3\x70\xdf\xb6\x6d\xdb\xca\x8e\xef\ +\x63\xee\xb4\xc9\x55\x14\xc2\x0e\x68\xf5\xb7\xae\xa3\xa5\x19\xda\ +\x4f\x55\x89\xd6\x34\x0c\xc3\x40\xd7\xf5\xc1\x72\xb9\x5c\xb0\x3d\ +\x0f\x65\x8f\xc5\xe8\x6d\x11\x78\x0a\x9e\xdf\x22\x27\xca\xa4\x6d\ +\x93\xd6\x53\x15\x14\x45\xa1\xd1\x68\xa4\x85\x42\xa1\xaa\xeb\x7a\ +\xbe\x6d\xb4\xd9\x76\x9f\x4a\x21\x17\x90\x84\x1e\x7a\x9c\x27\x49\ +\x13\x9c\xa7\x46\x88\x3b\x0a\xaa\xaa\x56\x2d\xcb\x2a\x17\x8b\xc5\ +\x31\x21\x04\xde\x75\xab\x8c\xde\x2e\x49\x5d\x41\xea\xc7\xc8\x58\ +\x12\x9f\xaf\xe1\x9c\xc9\xf4\x3c\x37\x51\x18\x86\x64\x74\x93\x0d\ +\xdd\x62\xc7\x83\x21\x39\x59\xc5\xf7\x3d\x48\x23\xbc\x86\xc4\x7f\ +\xa9\x8a\xbf\xa4\x53\x2c\x16\x10\x42\x8c\x54\x06\x2a\x23\xd2\x95\ +\x34\xf7\x2e\xb2\xed\xee\x0c\x8d\x8d\x0d\x0a\x4a\x85\xc0\x0b\xd1\ +\xdb\x55\x5a\xdf\x28\x62\x9a\x26\x9a\xa6\x91\xcb\xe5\xc2\xc8\x8f\ +\x0c\xbb\x6a\x33\x7e\x6f\x91\xd8\x57\x29\x68\x05\xe6\xd6\x2e\x52\ +\x52\x86\xd8\xf8\xc7\x32\x32\x50\x31\x0c\x43\x13\x42\xa4\xa6\x61\ +\xd0\x4c\x5c\x26\xef\x04\x4f\x5f\xe3\xd6\xd1\x7b\x51\xde\xb6\xeb\ +\xe7\x19\x1f\x9b\x21\xc6\xc7\xf7\xaf\xf5\x31\x7b\x81\x47\xa4\x78\ +\xec\xd2\xdf\xc4\x2f\x3c\xf0\xa7\xfc\xc2\x83\x9f\x60\x62\xf0\x20\ +\xe5\x09\xf3\xbb\x3d\xd2\xa9\xef\xfb\x04\x49\x40\xa7\x19\xf1\xe1\ +\x5b\x7f\x9f\x8f\xde\xf1\xa7\x4c\x8c\xec\xe6\xae\x5b\xee\xc1\x4b\ +\xec\x1e\xb9\xa4\x49\x92\x5c\xf5\x48\x13\x71\xef\xc8\x7b\x79\xd7\ +\xae\x5f\xe5\xd6\xbd\xf7\x73\x64\xe6\x51\x3c\x63\x03\xdf\x0b\x7a\ +\x04\x20\xbb\xb5\xc8\x01\x51\x12\x32\x94\x99\xe6\xd1\xc9\x9f\xe1\ +\xe7\x8f\xfe\x05\x71\x73\x82\x9b\xf6\x1f\xc1\xc7\xea\x7b\xbb\xbb\ +\x0c\xdf\x95\x35\xd5\x0c\x4c\x67\x6e\xe7\x4f\xde\xf6\x1d\xae\x1b\ +\x3d\xca\x8f\xdf\xf9\x9f\x89\x2b\xad\x2e\x0b\x7b\x5e\xbf\x6a\xd4\ +\xf3\x7d\x34\x1d\xe6\xe7\x3a\xfc\xf2\x5d\x9f\x61\x6f\xf5\x28\xff\ +\xe5\x4d\x9f\x23\x3b\x92\x12\xc4\xdd\xed\x71\x1c\xcb\xae\x47\xda\ +\x27\x4c\x43\x3a\x5e\x87\x5f\xb8\xf1\xb3\x8c\x99\x07\x51\x46\xf2\ +\xd3\x4c\x0d\xec\x25\x08\xc2\x6b\x0a\xae\xbb\x2c\x1c\x10\xc6\x3e\ +\x77\x6c\x7f\x94\xdf\x7f\xe1\x63\x84\x56\x86\x1f\xb9\xe1\x03\x64\ +\xd4\x5c\x9f\x95\x7b\x32\xa5\xbf\x59\x0a\x3a\x5d\xb8\x99\x53\x6b\ +\xcf\xf3\xe5\x93\x7f\xc3\x3b\xf7\xfe\x7b\x26\x2a\x7b\x88\xa3\xb8\ +\xcf\xc2\x3d\x5d\xd8\xf3\x3c\x4c\x25\xc7\xc4\xc0\x0e\x3e\x77\xfe\ +\xb7\xb9\xa1\xf8\x83\x3c\xb0\xf7\xad\x0c\x66\x27\x71\xbd\xab\x9a\ +\x73\x4f\x17\x8e\xa3\x84\x72\x76\x00\x91\xed\xf0\xc4\x4b\x4f\xb0\ +\xb3\x76\x3d\xa3\x85\x1d\x78\x81\xb7\xd5\x1c\x4f\xe0\xfb\x38\xae\ +\x87\xae\x29\x04\xad\x3c\x9f\x3c\xf6\x1b\x4c\x9a\x47\x78\xf0\xba\ +\xb7\x60\xaa\x79\x5c\xdf\xc5\x73\xb7\xb2\xb0\x07\x48\xf2\xe1\x14\ +\xeb\xe9\x19\x2a\xf9\x12\xdb\x4a\x3b\xa8\x67\xc7\xf1\x7d\xaf\x8f\ +\x6f\x5b\x3d\xd2\x44\x1a\x37\xee\x3e\xc4\xf3\xeb\x9f\x42\x73\x7c\ +\x97\xb9\xe6\x25\xa2\x28\x26\xf0\x23\x24\x7a\x5f\x7a\x0c\xc3\x80\ +\x2c\x0a\x71\x12\x52\xd0\x2b\xe8\x8a\xc9\x8b\x17\xbf\x42\x9c\x76\ +\x1d\xfd\x5b\x65\x4d\x80\x24\x9f\x10\x24\x1e\x05\xa3\x8c\x2a\x3a\ +\x38\x2c\xd3\x70\x97\xf1\x7d\x97\xc0\xd7\xae\xa9\x17\x06\x30\x00\ +\x55\xa8\x04\x5e\x42\x75\x50\xe5\xc5\xb3\xc7\x98\x6b\x9c\x25\x08\ +\xba\xd6\x0e\x4d\xd3\x7a\xcf\x64\x12\x23\x46\x00\x32\x51\xa8\x97\ +\x07\x79\xe9\xf2\x4b\xc4\x25\x1f\x91\x76\x8b\xbf\x33\x81\xb9\xe9\ +\x4c\x08\x08\xbc\x00\x43\x68\x98\x19\x9d\x4a\x66\x88\xe5\xf6\x3c\ +\x31\x1e\x4e\x60\x11\xf8\x06\x32\x95\x57\xb5\x6f\xdf\x47\x20\xf0\ +\xd2\x0e\x25\x7d\x90\x86\xf3\x3c\x0a\x0a\xeb\xce\x12\x51\x18\x11\ +\xf9\xd1\x35\x72\x6c\xac\xc5\xa4\xa4\x90\x82\x63\xa5\x28\xc7\x5b\ +\x9f\xc5\xc8\x48\x82\xc0\xc3\x71\x9d\xfe\xf4\xee\x95\xfc\x6b\x22\ +\xcb\x57\x5f\xff\x33\xde\x73\xf0\x3f\x73\xca\xfd\x12\x1b\xf1\xe5\ +\x9e\x51\xa8\xcf\xab\xbd\x92\xff\x24\x4a\xe9\x68\x17\xc8\xc8\x41\ +\xee\x3b\x78\x2f\x9f\x3f\xfb\x47\xf8\xa9\x4d\x12\x5f\x4d\x61\x6d\ +\x2d\xb8\x16\x5a\xc2\x8b\x73\x4f\xf0\x33\xf7\xfe\x06\x7f\x7f\xfa\ +\xf7\xb1\xb8\x42\x35\x3b\x8a\xe7\x5d\x75\xc7\xf7\x06\x30\x8a\x62\ +\x96\xad\x39\x9c\x4e\xc2\xe8\xb6\x02\x71\x61\x96\x91\xe2\x76\xbc\ +\xa0\x3b\xa3\xae\x26\x13\x7c\x7c\xcf\x45\x22\xb0\xb5\xcb\x1c\x1e\ +\x3f\x4a\x47\x3f\xc3\x17\x4f\xfe\x15\x05\xb3\xd8\xcd\xc6\xb8\x5e\ +\x7f\x40\xba\x3e\xef\x94\xfa\x64\xc4\x4b\xe7\x5e\x65\xa2\x3e\xce\ +\x9f\xbc\xfc\x0b\x54\x8b\x75\xdc\xc0\xc1\xb6\x9d\xbe\xee\xed\x38\ +\x0e\x81\xef\x53\x2a\x64\xf9\xbf\xff\xf1\x23\xfc\xe6\xa3\x5f\x44\ +\x6b\xf9\x8b\x2c\x2e\xcd\xb2\x7c\xb1\x8d\xdf\x8e\x89\x93\x3c\x52\ +\x4a\x36\x36\x36\xf0\xe3\x88\x82\x97\xa7\xa5\x9e\xe3\xb7\x9f\xfc\ +\x25\x7e\xe2\xc1\xc7\xf8\xc7\x8b\xff\x83\xd6\x49\x95\x66\xb3\xeb\ +\x91\x96\x52\x5e\xf5\x48\x67\x04\x46\xb6\xc6\xef\x3e\xf7\x6f\xf9\ +\xa3\x1f\xfd\x27\xce\x36\xbe\xc9\x95\xd5\xf3\xac\xce\x37\xf0\x5b\ +\x57\x3d\xd2\x3d\xa7\x41\x2e\xc9\x73\xb2\xf5\x55\x0e\x78\xb7\xe1\ +\x26\x1d\xce\x2e\x7d\x89\xb9\x4b\x0e\x8d\x75\x17\xa1\x42\xa5\x52\ +\xe9\x9e\x60\x10\x13\x69\xe0\xc9\x0c\x4f\xcc\x7d\x92\xf7\x8c\x7c\ +\x0c\x51\x6a\xf0\xf5\x57\xbe\x48\x63\xde\xa1\xd5\x0c\x51\xf5\x6e\ +\x92\xb6\xd9\x68\x62\xaf\xdb\xe8\x51\x91\xa5\xe0\x14\xc7\xd6\xfe\ +\x81\x62\x31\xcb\x17\xce\xfc\x31\x8d\xc5\x90\x8d\x95\x26\x7a\xa6\ +\x2b\xe1\x5a\x96\x45\xb3\xd9\xea\x96\xe5\xaa\x79\x9e\x5c\xfe\x63\ +\x26\x9d\x43\x9c\x59\xf9\x06\x7e\x27\x61\xe1\xd5\x26\x7a\x01\x4c\ +\xb3\xab\x0b\x37\x9b\x4d\xfc\xbc\x24\x4e\x4d\x16\xd2\x17\xf8\xcd\ +\xaf\xfd\x1c\x62\xfb\xd8\x0e\x29\x10\xa8\x99\xae\x3f\xae\x57\x2f\ +\x1c\x45\x51\x31\x9b\xcd\x91\xbf\x21\x66\x6c\x6f\x8e\xd5\x93\x1e\ +\x57\x5e\xea\x80\x65\xa2\xe8\xa0\x9a\xe2\x1a\x5d\x58\xd7\xf5\x62\ +\x92\x8f\xd8\xfd\xf6\x02\xe1\x7c\xca\xe5\xe3\x1b\xf8\xb3\x5d\x9d\ +\x43\xcb\xf4\xcb\xc8\x2c\x45\x51\x9a\x52\xca\xc9\x7c\x3e\x4f\xfe\ +\x68\xca\xd8\x68\x86\xd9\xe3\x6d\xd6\xbf\x93\x90\x86\x02\xd5\x00\ +\x45\xeb\x2e\xc2\x2b\x95\x4a\xd8\x6e\xb7\x8d\x5c\x36\x87\xad\xb8\ +\xdc\xf5\xc1\x1a\x2b\x27\x7c\x66\x8f\xb5\x09\xe6\x75\x10\x29\x5a\ +\x46\x45\x72\x55\x17\x1e\x1d\x1d\x3d\xea\x5b\x01\x95\x37\x2a\x4c\ +\x4e\xe5\x98\x7d\xb1\xcd\xda\x89\x08\xe9\x75\x7f\x7a\x45\x35\xe9\ +\xeb\xc2\xb5\x5a\x2d\x94\x89\x34\xa2\x91\x88\xe9\x1b\x33\x2c\x1e\ +\x77\x68\x5e\x0c\x20\x56\x91\x48\xb4\xac\x20\x4d\x52\x74\x5d\x6f\ +\x7a\x9e\x27\x33\x99\x4c\x35\x57\x2e\xb0\xed\x5e\x89\x75\x25\x66\ +\xe3\x9c\x8f\x76\xe4\xf6\xc3\x58\x56\x17\x79\x66\x67\x67\x09\xc3\ +\x6e\xd9\xc0\x5b\xde\xf2\x16\x76\xed\xda\xc5\xc2\xdc\x22\xa7\xbf\ +\x79\x96\xba\x22\x29\xed\xf4\x51\x54\xa5\x5f\x2f\x5c\x28\x14\xb8\ +\x72\xe5\x0a\xd5\x6a\x95\x77\xbc\xe3\x1d\x68\xaa\xc6\xe7\xff\xf6\ +\x8b\x54\x6b\x03\x4c\xe4\x1b\x54\x8f\x0e\xd0\x6e\xb7\x09\xc3\x10\ +\xd3\x34\xb9\x70\xe1\x02\x71\x1c\xf3\xde\xf7\xbe\x97\x1d\x3b\x76\ +\xf0\x0f\x7f\xf7\x05\x94\x15\x8d\xaa\xbd\xce\xce\xdb\x06\x68\xb5\ +\x5b\x18\x86\x41\x92\x24\x2c\x2e\x2e\x22\xa5\x64\xdf\xbe\x7d\x3c\ +\xf2\xe8\x23\xf8\xae\xcf\x77\x9e\x7a\x95\x9c\xd5\x66\xa6\xea\xa3\ +\x8f\x6a\x64\xb3\x59\x16\x16\x16\xfa\xd4\x20\x84\xe0\x8e\x3b\xee\ +\xe0\xce\xbb\xee\xe4\xb9\xa7\xbe\xc1\xe5\xaf\xce\x52\xd7\x87\x99\ +\xbc\x21\x4b\xb3\xd5\xec\xfe\xd0\x85\x69\x62\x59\x16\x2b\x2b\x2b\ +\x8c\x8d\x8d\xf1\xe1\x0f\x7f\x98\xe7\x9e\x7e\x8e\x57\x4f\x9e\xe2\ +\xfa\xf1\x32\xd6\x40\x87\x30\x0a\x49\xe2\x84\x62\xb1\xc8\xfc\xfc\ +\x3c\xcd\x66\x13\x80\xff\xf8\x1f\xff\x23\x00\x2f\x3c\x77\x0c\x37\ +\x63\xb3\x3c\xb2\x8c\xb6\x6d\xdb\x36\x66\x67\x67\x19\x18\xe8\xfe\ +\x0e\xcc\x85\x0b\x17\x08\x82\x80\xfb\xee\xbb\x8f\xc3\x87\x0f\x33\ +\x3b\x3b\x4b\x2c\x23\x86\x86\x86\x30\x4d\x93\x6f\x7e\xf3\x9b\x8c\ +\x8e\x8e\x62\x9a\x66\xdf\x12\x3b\x3e\x3e\xce\x43\x0f\x3d\xc4\xd0\ +\xd0\x10\x17\x2f\x5d\xec\x0e\xfc\x66\x32\x60\x6c\x6c\x8c\xa5\xa5\ +\x25\x46\x46\x46\xb8\x7c\xf9\x32\x00\x0f\x3f\xfc\x30\x7b\xf6\xec\ +\xa1\xd3\xe9\xb0\xb6\xb6\xc6\xb9\x73\xb0\x6f\xdf\x3e\x2e\x5f\xbe\ +\x8c\xef\xfb\x8c\x8f\x8f\xb3\xb2\xb2\x42\x1c\xc7\xdc\x7c\xf3\xcd\ +\xdc\x79\xc7\x9d\xec\xdc\xb9\x93\xbf\xfc\xcb\xbf\x64\x7e\x61\x9e\ +\xd1\x91\x51\x9e\x78\xe2\x09\xea\xf5\x3a\x00\x6b\x6b\x6b\x44\x51\ +\x84\xa6\x69\x1c\x3c\x78\x90\x77\xff\x5f\xef\xc6\x34\x4c\x9e\x78\ +\xe2\x09\x86\x86\x86\x48\x92\x84\xf9\xf9\x79\xae\x5c\xb9\x42\x4f\ +\xaa\xed\xb1\xf0\x2d\xb7\xdc\xc2\xdc\xdc\x1c\x4b\xab\x4b\xdc\x78\ +\xe3\x8d\xbc\xf2\xca\x2b\x54\x2a\x15\xce\x9c\x39\xc3\xc1\x83\x07\ +\xc9\x64\x32\x1c\x3f\x7e\x9c\x34\x4d\x79\xf8\xe1\x87\xb9\x70\xf1\ +\x42\x3f\xb9\xf0\xfc\xf3\xcf\x7f\xff\x7a\xe1\x4e\xa7\x63\xe5\x72\ +\xb9\x62\xad\x56\xa3\xdd\x6e\xf7\xb7\xf5\x98\x72\xab\x17\xda\xb6\ +\xed\xb9\x7c\x3e\x3f\x50\xad\x56\x8b\x5b\xcd\xde\x5b\xf9\xb9\xf7\ +\x3d\x8e\x63\x2b\x0c\xc3\x66\xb1\x58\x9c\x1c\x18\x18\xa0\xd3\xe9\ +\x5c\xc3\xab\x3d\x1d\xb9\xf7\xb7\x61\x18\xa1\xe3\x38\xc6\xf0\xf0\ +\x30\xb6\x6d\x7f\x8f\x77\x79\xeb\xef\x63\x55\x2a\x15\x4e\x9f\x3e\ +\xfd\xec\xee\xdd\xbb\x8f\x6e\xb1\xfc\x5e\xb3\x4f\xef\x7f\x4d\xd3\ +\x58\x5b\x5b\x63\x7c\x7c\x3c\xb4\x6d\xdb\xf8\x97\x6a\xa2\x37\xcf\ +\xb7\x69\x59\x96\x2c\x97\xcb\xd5\xef\xde\xae\xa5\x49\x1a\x6d\xf5\ +\x31\x3b\x8e\x83\x65\x59\x5e\xb5\x5a\xcd\xb4\x5a\xdd\xf4\xbd\x4c\ +\x05\x8a\x10\x08\xe5\x7b\x78\x55\x58\x96\x95\x68\x9a\xd6\xcd\x5e\ +\x23\xd0\x84\xde\xd5\x85\x95\xab\x35\x19\x5b\xfc\xd7\xd2\x75\xdd\ +\x50\xd7\x75\x1c\xc7\x41\x57\xf5\x6b\xea\x85\x15\x5d\x5c\xd3\x7f\ +\xa7\xd3\x91\x8a\xa2\x44\xbe\xef\x6b\x9a\xa6\x09\x12\x81\x14\xa0\ +\x6a\x12\x45\xb9\xb6\xed\x26\xf8\xcb\x24\x49\x64\x9a\xa6\xb1\x82\ +\xd2\x35\x5e\x23\x51\x94\x3e\xd7\xf6\xab\x0a\xe2\x38\x4e\x2c\xcb\ +\x4a\x55\x55\x15\x02\xf8\x17\xea\x85\xc5\xe6\x7a\x37\xca\x66\xb3\ +\x71\x9a\xa6\x52\xc8\xcd\xba\x65\x40\xdb\x36\x39\x12\xc8\x48\xd9\ +\x2c\x90\xee\x16\x2f\xaf\xae\xae\x5e\xaa\xd7\xeb\x07\x7d\xcf\x97\ +\xa1\xd1\xd5\x85\x71\x4d\xd2\x4e\xb7\x46\x57\x46\x0a\x42\x93\xbd\ +\x3c\x9c\x51\x2a\x95\xf4\x4c\x26\x43\x44\x44\x3a\xde\xa6\x98\x35\ +\x48\x5a\xbd\xba\xdb\xab\x81\x87\x61\x18\xb8\xae\xbb\x5a\x2c\x16\ +\x67\x74\x5d\x17\x2d\xb5\xc5\xf0\x1e\x48\x6d\x8d\xb4\x65\x22\x1d\ +\x6d\xd3\x48\xde\xbf\xfa\x9e\xeb\xb9\xb2\x5a\xad\x0e\x04\x49\x88\ +\xb2\xa3\x4d\x4e\x33\x88\x5b\x3a\x69\x5b\x47\x46\x6a\xf7\xc7\xc5\ +\x90\x64\x32\x19\x2e\x5e\xbc\x58\x19\x1e\x1e\x0e\x7c\xd7\x8f\xdb\ +\x99\x16\x23\x13\x2a\xe1\x86\x41\x6a\x6b\xdd\x1a\xe7\x44\x20\x54\ +\xd0\x75\x5d\x18\x86\xe1\x8f\x8c\x8c\x04\x19\x33\x53\xfe\x3f\xd4\ +\x0b\x63\xdb\xb6\x7e\xe5\xca\x95\xb5\x72\xb9\x5c\x0c\xe3\x38\x0d\ +\xca\x16\x95\xba\x4a\xda\xd1\xd1\x46\x7e\xa4\x55\xd0\x35\x9d\xe6\ +\x53\x15\xa2\x55\x1d\x45\x15\x08\x21\x6a\xa5\x52\x29\x9f\x4a\x50\ +\x76\x39\x8c\xde\x11\x11\x05\x2e\x22\xd2\xd0\x45\x86\x34\x50\x68\ +\xfe\x63\x1d\x55\x55\xd1\x75\x5d\x98\xa6\xa9\xea\xba\x8e\x63\xb8\ +\x0c\xde\xe5\x53\x2f\x6a\x10\x87\x84\x9e\x0b\xba\xa4\xfd\xe5\x21\ +\xe2\x96\x8a\x94\x52\x68\x9a\xa6\x1b\x86\x21\x34\x4d\xc3\x1d\xeb\ +\x30\x7c\xbf\x46\x51\x8e\xb2\xda\x58\x41\x93\x1a\xf1\x42\x91\xce\ +\xf1\x02\x32\x06\xd3\x34\xd5\x3e\x0b\xab\x1d\xf6\xbf\x29\x42\x4b\ +\x54\x7c\xc7\xc1\x24\x47\xe4\x82\x75\xac\x44\xb0\x68\xf4\x7e\x03\ +\xb1\x52\x2e\x97\x33\x41\x94\x90\xb9\xc5\x65\xdb\x21\x13\xab\x6d\ +\x91\xa1\x40\x10\x06\xe8\x4e\x99\xc6\xd7\xcb\x98\x86\x81\xa6\x69\ +\x79\xd3\x34\xed\xff\x2f\xf5\xc2\xaa\xaa\xa2\xaa\x6a\xb5\x90\xcf\ +\xe7\x96\xfd\x16\x13\x6f\x94\x14\x06\x7d\x22\xcf\x47\xb9\x63\xea\ +\x1d\x88\x3c\xc4\xd2\xff\x2e\xa6\xec\xfe\x9d\xaa\x01\x35\x79\x80\ +\xff\xf0\xe0\xa7\x78\xef\x91\x5f\xa5\x56\xdc\x41\x7d\xdb\xc0\x35\ +\x35\xbd\x7d\x94\x4b\x03\xec\x35\x9d\x77\x1f\xfa\x65\xde\xbc\xe3\ +\x63\x1c\x9c\xb8\x87\x7b\x6e\x78\x23\x5e\xe4\x5c\xf3\xdb\x59\xbd\ +\xe3\xf8\x49\xc0\x7d\x23\x3f\xc1\xb0\x72\x23\x8f\xdd\xf1\x1f\xb8\ +\x65\xf2\xed\x78\x7a\xa3\xef\x22\x4d\x92\x44\x76\x51\x31\x24\x4c\ +\x23\x6a\xe6\x36\x1e\x19\xfb\xb7\xfc\xa7\x87\x3f\xcd\xeb\xf3\x1e\ +\xa3\xe3\xc3\xc4\xe2\xaa\x8f\x59\x76\xa7\x2c\x9e\xe7\x63\xe4\x04\ +\xdb\x94\xdb\xf9\xbd\x1f\x7c\x9a\x4a\x66\x86\x5f\x7e\xdb\x1f\xe3\ +\x65\x1a\x04\x9b\x75\xd0\xff\x7f\xea\x85\x3d\xcf\x27\x88\x02\x94\ +\x4c\xc0\xee\xf4\x9d\xfc\xe8\x4d\x3f\x87\x72\x78\xf8\x41\xee\x99\ +\xf9\x81\x4d\x16\xbe\x56\x17\xf6\x3c\x9f\x28\x0a\x38\x3c\x7a\x3f\ +\xff\xfc\xfa\x27\x78\xe1\xe5\xd3\xbc\xfd\xc0\xfb\x31\x14\xb3\x4f\ +\x22\x3d\x55\xae\x27\xff\x4d\x57\x0e\x71\xb9\xf9\x1a\x27\x16\xbe\ +\xc9\x43\x33\xef\xa1\x9c\x19\x24\xde\xd4\x76\xb7\x92\x88\xe7\x79\ +\xa8\xe8\xd4\xf3\x63\xf8\xb9\x8b\xec\x1f\xb8\x97\x89\xca\x2e\x86\ +\x72\x93\xf8\x5b\xfa\xee\x09\xeb\x71\x14\x51\xcb\x0f\x93\xad\x44\ +\x7c\xe5\x85\xaf\xf3\x96\x7d\x3f\xc1\x8d\xa3\xf7\x62\x7b\x9d\xfe\ +\xc5\x04\xfa\xb5\xc3\x42\x40\x31\xdd\xce\x27\x9e\xff\x6f\xfc\xbf\ +\x6d\x9c\x6b\x8c\x5c\x65\x01\x86\x9f\x73\xbe\x73\xce\x5c\x76\xe7\ +\xbe\xd3\xdd\x2e\xdd\xb2\xbd\xb0\xad\x6d\xb7\x58\x4b\xa9\x6c\xb1\ +\x36\xa4\x0d\x26\x1a\x8c\x25\x26\x18\x2d\x58\x8c\x3f\x08\x5a\x34\ +\x81\x5f\x68\x22\x09\xff\x88\x09\x09\x4a\x82\x09\x68\x34\x40\x0c\ +\x8a\x60\x0c\x72\x91\x16\x50\xda\x02\x52\x2b\x4b\xaf\x3b\xed\x76\ +\x2f\xdd\xeb\xcc\xec\xcc\xec\xcc\xb9\x5f\xfc\x71\x66\x4e\x97\xe2\ +\xef\x99\x39\xf9\xe6\x3b\x97\xef\xbc\xdf\xfb\xbc\xef\x57\x6e\xf8\ +\x36\x6b\x33\x43\xc4\xe5\x64\x5b\x67\xeb\x11\x4c\x65\x9a\x06\xe2\ +\x73\x79\xe1\x5d\xdc\x98\xde\x82\x69\x1b\xd7\x3a\xbc\xda\x8d\x4b\ +\x8e\xe3\xb0\x54\xd3\x79\xf8\xe0\x23\xbc\x56\xfa\x0d\x4a\xb5\x59\ +\xe1\xa3\xb9\x77\x71\x1d\x17\xcb\x0c\x08\xb8\x96\x8d\xb5\x6d\x0b\ +\x15\x70\x7c\x9b\x94\x56\xc0\x50\x54\xce\xcc\xfd\x1b\x9f\xd0\xdb\ +\x15\x42\x44\x20\xb8\xe3\x38\x78\xdd\x5e\xc8\x48\x27\x7a\x58\x10\ +\x26\x35\xf7\x2a\xb6\xdf\x6e\x81\xb3\x44\x98\x29\x6e\x4f\x60\xf8\ +\x50\x0f\xda\x09\x4b\x07\x4f\x36\xa9\x2c\x2f\x32\x5b\x9f\xc4\xb2\ +\x63\xf8\x76\x54\xf0\x88\x69\x99\x78\x8a\x87\x24\xc9\x48\xbe\x20\ +\x9f\xca\xf3\xf6\xe8\x1b\x94\x63\x2d\x64\x5f\x44\x57\x77\xb8\x99\ +\x60\x61\x5b\x16\x42\x56\xf0\x71\xe9\xe9\xea\x65\xb1\x35\x83\xe5\ +\xe9\x18\x4e\x0b\xdb\x4e\x46\xab\xb1\xe3\x38\x04\xb6\x07\x71\x48\ +\x74\xa9\x04\x6e\x48\xb9\x4a\xc8\x8c\xd7\x3e\x05\x2f\x9c\x07\x1f\ +\xaf\x3d\x27\x26\x8e\xec\xa0\x08\xc1\x52\xbd\x81\x2a\x62\xc8\xa7\ +\xea\x2f\x93\xee\x4e\x61\xbb\x76\x44\xda\xaf\x34\xa8\x45\xa0\x72\ +\x72\xfe\xcf\x6c\x49\x1d\xa0\x6f\x83\xcb\x44\xeb\x54\x38\x98\xff\ +\x93\x58\x77\x2c\x17\x23\x3e\xc1\xd2\x92\xc9\xce\xa1\x61\x5e\x39\ +\xff\x2b\x26\x97\xcf\xe2\xd8\x4e\x94\xe9\x5d\x49\xe9\xab\x9a\xe0\ +\xed\xcb\x2f\x72\xf8\x4b\x8f\xf1\xfb\xd1\xc7\xb8\x6c\x1e\x27\x9d\ +\xc8\xa3\x5f\x97\x17\x36\x8d\x70\xd7\x67\x6e\xf9\x0a\xf5\x86\x45\ +\xae\x28\x90\xf2\x33\xa8\x52\x02\xdb\xb5\x3e\x33\x6e\xd3\x34\x30\ +\x6d\x0b\x09\x41\x5d\xb9\xc8\x70\xff\x97\x99\xf2\x4e\xf0\xd7\x33\ +\xcf\xd1\xa5\x75\x87\xe3\xd6\x8d\x08\xb9\x33\x4c\x13\xcf\x87\x8d\ +\x1b\xf3\xbc\x7f\xee\x7d\xfa\xb2\xfd\x3c\xfd\xe1\x23\x64\xe2\x85\ +\x68\x4e\xae\x91\x09\x61\x8b\x5c\x21\x93\xe1\x89\xa3\x3f\xe5\x81\ +\x9d\xbf\x44\x69\x2a\xd3\xcc\x2e\x4d\x33\x5b\xaa\xa0\xd7\x3c\xba\ +\xdd\xd0\x17\x2e\x97\xcb\xd4\x1b\xcb\xc4\x9b\x49\x6c\x15\x9e\x3a\ +\xf1\x30\xf7\xec\xb9\x8f\xe9\xb9\xd3\x2c\x9d\x81\x6a\xb5\x1e\x69\ +\xe1\xce\x15\x48\x52\x42\xa8\x05\xfe\x78\xe6\x09\x7e\xb1\xfe\x19\ +\x66\xec\xb3\xcc\x8d\x66\x29\x5f\xad\x61\xd5\xfd\xce\xbb\x5d\x84\ +\x56\x74\xdb\x31\xaa\xfe\x25\x5e\x3d\xfb\x0c\x6e\xa2\xce\xe5\x85\ +\xb3\x94\x3e\x30\xa8\xce\x1b\x91\x2f\x6c\x18\x06\x8e\xe9\x60\xc9\ +\x3e\x86\x1f\xe3\xd8\xe4\x1f\xd8\xbf\xf9\x6e\xc8\x54\x38\x37\x39\ +\xcf\xfc\xe5\x3a\x8d\x25\x07\x49\x84\xef\x6c\xe5\x72\x99\x4a\xbd\ +\x41\xbf\x9d\x63\xd2\xf8\x98\x77\x27\xff\x44\x90\x68\xf2\xaf\x99\ +\x97\x59\x98\x32\x29\xcf\xd7\x50\xe3\x4a\xa4\x85\x97\xab\x0d\x1a\ +\x09\x1f\x2f\x48\xf1\xce\xdc\x73\x6c\xf5\xf7\x30\xee\x7c\x40\x63\ +\xd1\xe0\xca\xa9\x32\x8e\xee\x13\x4f\x84\x5a\xb8\x5c\x2e\x63\x24\ +\x7c\x4c\x5b\x50\xe9\x1e\xe5\xb9\xe3\x4f\xa2\x3c\xff\xc3\xd3\x98\ +\x8b\x10\xcb\x48\xa8\xaa\x12\x35\xd6\xca\xb2\x4c\x4c\xd3\x70\x17\ +\x02\xe6\xff\xe3\xd1\x98\x9a\xe3\xc7\x4f\x3d\x8a\x3e\xae\x41\x10\ +\x10\x4b\x2b\x91\xb1\xd3\x6e\xc0\xc0\xb7\x7c\x96\xce\xb9\xc8\xad\ +\x6e\xee\x7b\xe9\xfb\xe8\x25\x0d\xb3\x5e\x26\x91\x15\x88\x70\x75\ +\x8f\x8e\x9d\xcf\xe7\xb1\x67\x5b\x4c\xbd\x1d\xf0\xe1\xe8\x9b\x2c\ +\x8e\xda\xf8\x96\x84\x92\x04\x2d\xa6\x46\x50\x64\x10\x04\x68\x09\ +\x0d\xcf\xb0\x99\x3f\xed\xb2\x3c\x3b\xc3\xb1\x5f\x3f\x8e\x7e\x59\ +\xc5\x5c\x72\x89\x67\x15\x14\x45\x44\x81\x48\xa1\x28\xc4\x64\x15\ +\x7d\xdc\xa7\x5a\x87\x17\x2f\xbe\xc4\xd2\x79\x9f\xc6\x15\x1f\x2d\ +\x29\xa3\x25\xd5\xa8\xd2\x59\x08\x81\x1a\x53\xe9\xd6\x7d\x16\x47\ +\x1d\x96\xe7\x17\x39\x7e\xee\x05\x96\xce\x05\xb8\x7a\x40\x3c\x2b\ +\x50\x54\x39\x82\x33\x25\x49\x22\x21\x69\xd4\x2e\xb8\x34\x15\x9f\ +\xb3\x93\xef\xa0\x6c\xda\xb0\x05\xe9\x26\xd0\xd4\x30\xc1\xe8\xfb\ +\x3e\x33\x33\x33\xec\xd9\xb3\x87\x81\x81\x01\x2c\xdd\xe6\xf4\x07\ +\x9f\xb0\x2a\x19\x43\x4a\x2c\x52\xdc\xd7\xc3\xfc\xc2\x3c\x8d\x7a\ +\x83\x42\xa1\xc0\xd8\xd8\x18\xbd\xbd\xbd\xec\xdb\xb7\x8f\x54\x77\ +\x8a\xbf\xff\xed\x0d\x7a\xfb\x7a\x59\xe5\xcc\xd3\xbb\x7b\x15\xf5\ +\x46\x8d\x56\x4b\x27\x9d\x4e\x73\xe1\xc2\x05\x0c\xc3\xe0\xfe\xfb\ +\xef\x67\xe7\xce\x9d\xbc\xf5\xfa\x3f\xb0\xaa\x36\x92\x32\xc3\xb6\ +\x03\x39\x9a\xcd\x26\xb9\x5c\x8e\x5a\xad\xc6\xf4\xf4\x34\xad\x56\ +\x8b\xe1\xe1\x61\x46\x46\x46\x88\x69\x31\x3e\x39\xf5\x29\x9e\xd1\ +\xe2\x06\xa9\x45\x6c\xab\x46\x26\x97\xe1\x52\xe9\x12\xf1\x78\x3c\ +\x4c\x27\xa9\x2a\x23\x23\x23\xdc\x7c\xf3\xcd\x9c\xf8\xe7\x49\x16\ +\x2f\x56\x28\x6a\x82\xbe\x41\x19\x77\xad\x43\xb5\x52\xed\x10\xb8\ +\x51\x6c\xf6\xd0\xa1\x43\x2c\x55\xaa\x7c\x7c\xec\x34\x99\x54\x8a\ +\x78\xcc\x24\x7f\xd3\x32\xb9\x7c\x0e\xcb\xb2\xa8\x54\x2a\xb4\x5a\ +\x2d\x74\x5d\xe7\xc8\x43\x47\x68\x35\x9b\x8c\x97\x26\x59\xaa\xd5\ +\xc8\x3a\x16\xca\xf0\xf0\x36\xce\x9f\x3f\xcf\xe0\xe0\x20\xa9\x54\ +\x2a\x12\xfc\x7b\xf7\xee\xe5\xf6\xdb\x6f\x0f\x21\x1f\x7e\x47\x2e\ +\x97\xc3\xb6\xed\x08\xcb\xb5\x4c\x8b\x62\xb1\xc8\xd8\xd8\x18\xf9\ +\x7c\x9e\x43\x87\x0e\x91\xcf\xe7\xb9\x3a\x73\x95\xa1\xa1\x21\x26\ +\x26\x26\xe8\xd4\x28\x5f\xb9\x72\x85\xad\x5b\xb7\x52\x2a\x95\x30\ +\x4d\x93\x3b\xee\xb8\x83\x4d\x9b\x36\x31\x31\x31\x11\x2e\x00\x9e\ +\xc1\xf6\xed\xdb\x39\x7d\xfa\x34\xe9\x74\x9a\xfe\xfe\x7e\xe6\xe6\ +\xe6\x00\xd8\xb1\x63\x07\x07\x0f\x1e\x64\xfd\xfa\xf5\x3c\xfb\xec\ +\xb3\x2c\x2c\x2c\x50\x28\x14\x38\x79\xf2\x24\x7d\xbd\x7d\xed\xc6\ +\xca\x90\xd1\x51\x14\x85\x91\x91\x11\xee\xbd\xf7\x5e\x1c\xc7\xa1\ +\x54\x2a\x31\x34\x34\xc4\xa5\x4b\x97\xc8\x66\xb3\x1c\x3d\x7a\x94\ +\xb5\x6b\xd7\x32\x35\x35\x45\xb9\x5c\x26\x97\xcb\x71\xf8\xf0\x61\ +\x46\x47\x47\x29\x57\x2b\x6c\xde\xbc\x19\x5d\xd7\xb9\x70\xe1\x02\ +\x99\x4c\x86\x62\xb1\x48\xa9\x54\x8a\x7c\xe1\x23\x47\x8e\x70\xee\ +\xdc\x39\xc6\xc7\xc7\x99\x9d\x9d\x0d\x19\xe9\x5d\xbb\x76\x05\x1d\ +\x9d\xe8\x38\x0e\xc9\x64\x92\xc9\xc9\xc9\x8b\x6b\xd6\xac\x19\xda\ +\xbc\x79\x33\x63\x63\x63\xd1\xce\xf3\xf5\xdd\xcc\xed\xf8\x53\x53\ +\xd3\xb4\xd8\xd6\xad\x5b\xd5\x6a\xb5\xca\xf2\xf2\x72\xa4\x55\x3b\ +\x5e\x6b\x27\x62\x2f\x49\x52\xd9\x75\xdd\x71\x60\x57\x36\x9b\x8d\ +\x68\x82\x95\xbb\x29\x2b\xfd\x67\x55\x55\x1b\xb3\xb3\xb3\xd2\xfe\ +\xfd\xfb\x53\x63\x63\x63\x91\x36\xed\x3c\x36\x3a\x15\x2d\xae\xeb\ +\x76\x18\xe9\x89\x91\x91\x91\x1b\x6d\xdb\x8e\xbc\xdb\xce\x6e\xf2\ +\xca\xa6\x8e\x95\xbe\x70\x87\xed\x5e\xb9\x58\xac\x1c\xbb\xef\xfb\ +\x08\x21\xa8\xd7\xeb\xe5\x62\xb1\xd8\x33\x38\x38\xc8\xe4\xe4\x64\ +\x74\x4b\x2b\xa9\xee\x74\xa4\x29\xa5\x76\x96\xd6\x75\x5d\xaf\xbd\ +\xbf\x46\x32\xd1\x15\x62\xb4\xda\xf5\x5c\x72\x88\xf8\x5a\x96\xe5\ +\xa6\x52\x29\x75\x76\x76\x16\x59\x96\xdb\x8c\xf4\xf5\x1c\x73\xd0\ +\x99\x44\x79\x66\x66\x46\x5a\xbd\x7a\xb5\x27\x84\x90\x62\x5a\xec\ +\xb3\x59\x64\xae\x79\xbd\xed\x1a\xe4\xa0\x58\x2c\x2a\x53\x53\x53\ +\x24\x12\x09\x3a\x5a\x58\x6a\x7f\xb7\xab\xab\x3b\xfa\x4d\xfb\x8f\ +\x9a\xba\xae\x63\x3b\x36\x71\x2d\x8e\xef\x43\x5c\xfb\xfc\xf1\x85\ +\x10\x94\xcb\x65\x84\x10\x52\xbd\x5e\x47\x42\x42\x15\x31\x34\x25\ +\xb6\x82\x91\x96\x22\x4d\xdc\x68\x34\xf0\x7d\xbf\x99\x4e\xa7\x7b\ +\x16\x16\x16\xe8\x4a\x74\x11\xf8\x61\x7d\x96\x92\x1b\x8c\x47\x5a\ +\xb1\x73\x36\x65\x59\x76\xf3\xf9\x3c\x86\x6e\xe0\x74\x99\x24\xfb\ +\xed\xb0\x94\xd0\x10\xf8\xba\x1a\xe6\x85\xdb\x98\x6c\xa5\x52\x69\ +\x15\x0a\x05\x55\x08\x11\xf3\xf0\xf0\x56\x2d\xd3\x9d\x52\x42\xd6\ +\xb8\x93\xe9\x75\xe5\x4e\x0d\x7c\x22\x16\x8b\xe5\x93\xc9\xa4\xa3\ +\x28\x8a\x68\xca\x4d\x72\x03\x12\xbe\x29\x11\xb4\x54\x7c\x5d\x21\ +\xb0\xe4\xd0\xeb\x0d\xaf\x02\x21\x84\x48\xe6\x72\x39\x5a\xbe\x41\ +\x7a\xa3\x05\xae\x4c\xa0\x2b\x04\xa6\xd2\xee\xda\x92\x91\xa4\x10\ +\x6b\x53\x14\x65\xb2\xa7\xa7\x67\x93\xa9\x9b\xd4\xe2\x55\xfa\x06\ +\x05\x4e\xb3\x9d\x73\xd6\xc3\x9c\x73\x27\xb1\x2e\xcb\x32\x7d\x7d\ +\x7d\x6a\xe0\x07\x94\x9d\x3a\x7d\x5b\x20\xb0\x24\x7c\x43\x21\x30\ +\x04\x7e\x33\xe4\xaf\x65\x21\x77\x56\xf7\x4b\x99\x4c\x66\xd0\xb2\ +\x1d\xfc\x55\x4d\x52\x05\x19\x57\x07\x25\x7b\xa0\x8c\x2c\x04\x4b\ +\x6f\x65\x71\xe6\xb5\x4e\x0b\x5b\x5c\x08\x81\xe3\x7b\xf8\xfd\xcb\ +\x24\x77\xb7\xe8\x4d\x0c\xd0\x34\xeb\x21\x74\x69\x2b\x54\x5e\x29\ +\x46\x77\x9a\xa2\x28\xb2\xe7\x79\xe8\xaa\x41\x6c\x7b\x95\xe2\x9a\ +\x1c\x29\x35\xcb\x4c\x75\x8a\x58\x5c\xa5\x7e\x2c\x8f\x3d\x13\xc3\ +\xf7\x7d\x59\x51\x94\x64\x2c\x16\xd3\x14\x45\x91\xe7\x56\x4f\xb3\ +\xe5\x4e\x8d\x44\x50\x60\xa9\x59\x41\xc8\x02\x77\xaa\x9b\xe5\x8f\ +\x52\xf8\x6e\xd8\x20\x62\x59\x16\xb2\x2f\x05\x73\x4a\x45\x1a\xdc\ +\x1b\x10\x0f\xb2\x58\x76\x0b\xd7\xb1\x09\x0c\x95\xfa\xf1\x0c\xce\ +\xa2\x8a\xa6\x69\x04\x41\x10\x97\x65\x19\xd9\x95\x59\x5e\xb7\xc0\ +\xe6\x3d\x69\x12\x41\x9e\xa6\x5e\xc3\xb6\x1d\x68\x24\xa9\xbe\x99\ +\x5d\x59\xaf\x27\x39\xb6\xc3\x7c\x72\x91\xe1\xbd\x49\x02\x2b\x8e\ +\x2a\x4b\x34\x5a\x15\x54\x45\x63\xf1\x95\x3c\xbe\x11\xed\xe4\xa4\ +\x09\xa0\x6a\xe8\xac\xbb\x4d\x47\xc9\x18\x0c\xa4\x86\x90\x0f\xac\ +\x7b\x80\x64\x57\xbb\x3b\xcb\xba\x96\x17\x0e\x2b\x92\x2c\x3c\xd9\ +\x66\x7d\xec\xab\x7c\x6f\xc7\xa3\x7c\xe7\x0b\x8f\xb3\x2e\xb3\x3b\ +\x2a\x31\xec\xd8\x9a\x51\xfe\xd7\x73\x58\xa8\x34\xf8\xd1\xee\x27\ +\x19\xce\xde\xc5\x37\xb7\x3f\xc0\xb7\x6e\xfd\x01\xa6\xdb\x5a\x49\ +\xa8\x06\x1d\x59\x67\x05\x06\xbb\x7a\xef\x66\x77\xf1\xbb\xdc\xb3\ +\xfb\x41\xbe\xb8\xea\x1b\xe8\xa2\x82\x71\xad\x47\xba\x93\x17\x96\ +\xbc\xc0\x61\x6d\x6e\x13\x5f\x1f\x7c\x88\x9f\xdf\xf9\x5b\x32\xe6\ +\x6d\xac\xea\xed\xc1\xf6\xcc\x28\x45\x19\xf5\x5f\x1b\x26\x8a\x26\ +\xb1\x31\xb9\x87\x07\x6f\x79\x9a\xa1\xfc\x5e\x7e\xb2\xf7\x19\x6c\ +\x6d\xf9\x33\x34\x6b\xc7\x73\x96\x55\xb8\x32\x51\xe3\xd1\x7d\xcf\ +\xb3\x21\xbb\x9b\x9f\xed\x7f\x01\x27\xd9\x88\x3e\xbf\x96\xd6\x6c\ +\xe7\x85\x65\x83\x7d\xa9\x76\x5e\x78\x4d\x6a\x13\xeb\x0b\xdb\xb0\ +\xed\x50\x79\x74\xb4\x70\x28\xf8\x4d\x5c\xd7\x64\x53\xe1\x16\x8e\ +\xcf\xfc\x85\xf7\x4e\x7d\xc4\xce\x35\xfb\xc2\x64\xf9\x0a\x6d\x1b\ +\x69\x61\xdb\x22\x2b\x06\x98\xaa\x95\x38\x71\xf9\x75\xbe\x36\x74\ +\x08\x81\xc0\x75\xbd\x48\x67\x77\x1a\x83\x0c\xc3\x20\x70\x15\x06\ +\x73\x37\x71\xd6\x7c\x95\x1d\xf9\xbb\xd8\x58\xdc\x46\x5f\xd7\x7a\ +\xcc\xeb\x7c\x61\xd3\x34\xc2\xbc\xb0\x92\xa4\xea\x4c\xf3\xdf\xd2\ +\x28\xb7\xae\xdb\x4b\x3e\xbe\x1a\xd3\x32\xae\x53\x22\xa1\xe7\xac\ +\x08\x41\x73\x49\xf0\xda\xd9\xe7\x59\xad\x6d\x63\xfb\xda\xed\x68\ +\x52\x22\xd4\xca\xc6\x0a\x4d\x6e\x1a\x04\x81\x47\xd6\xdb\x40\xd5\ +\x2b\xd1\x97\xed\xa7\xb7\x7b\x80\xde\xe4\x40\x14\xde\xee\x48\x50\ +\xbd\xcd\x48\x37\xda\x79\xe1\x33\x95\xf7\xf8\x1f\xcb\xb6\x8e\xf6\ +\x8f\xf1\xef\x16\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\ +\x00\x00\x1a\x78\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x64\x00\x00\x00\x69\x08\x06\x00\x00\x00\xcc\x7c\x86\x8a\ +\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ +\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\ +\x00\x00\x09\x70\x48\x59\x73\x00\x00\x88\x26\x00\x00\x88\x26\x01\ +\xac\x91\x9d\x06\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x03\ +\x0e\x04\x3a\x04\x0e\x03\xc5\x00\x00\x19\xf8\x49\x44\x41\x54\x78\ +\xda\xed\x9d\x7b\x74\x54\xf5\xbd\xe8\x3f\xbf\xbd\x67\xcf\x64\x92\ +\x0c\x79\x12\xc2\x23\x01\x4a\x28\x8f\x4a\x90\xa2\x16\x6b\xc3\xa9\ +\xa0\x02\xf5\xd4\x2e\xbd\xda\x2e\x5b\xee\xa5\x85\x7a\xb4\x75\xf5\ +\xae\x16\xef\x83\xf6\xf6\x9c\x73\x5b\xd0\x7a\x7b\xaf\x4b\xaf\xbd\ +\xb4\x97\xd5\x7a\x3d\x2a\xb7\xd6\x1e\x3d\xe7\xd4\x5a\xa1\x2a\x78\ +\x05\x0f\x4a\x00\x51\x08\xa4\x09\xaf\xc8\x23\x04\xf2\x9a\x24\x33\ +\x99\xcc\xec\xc7\xef\xfe\x31\xcc\x66\x1e\x7b\x87\x09\x4c\x12\x70\ +\xe5\x3b\x6b\xaf\x64\xf6\xfe\xfd\x7e\xfb\xf7\xfb\xbe\xbf\xdf\xdf\ +\x63\x04\x40\x65\x65\x65\x9d\x10\x62\x07\x63\x30\xea\xa0\x00\xaa\ +\x65\x59\xda\x18\x2a\xae\x0e\xf0\x00\x85\xa6\x69\x16\xaa\xaa\x0a\ +\x80\x94\x12\xcb\xb2\xc6\x30\x33\x42\x20\x84\x40\x51\x94\x14\x82\ +\x94\x1b\x86\x51\xe6\xf5\x7a\x01\xc8\xcf\xcf\x67\xe5\xca\x95\x63\ +\x98\x1a\x21\xd8\xbf\x7f\x3f\x7b\xf7\xee\x4d\x21\xc8\x44\xc3\x30\ +\x2a\xd3\x0b\x9a\xa6\x89\xae\xeb\x63\x18\x1b\x46\xc9\xf0\xf9\x7c\ +\x08\x21\x32\x54\xd6\xf8\x0b\x97\x0d\x52\x4a\xfa\xfb\xfb\x69\x6b\ +\x6b\x1b\xc3\xdc\x30\x41\x5e\x5e\x1e\x53\xa6\x4c\x41\x4a\x99\x41\ +\x90\x80\x65\x59\x81\xf4\x0a\xc3\x65\x4b\x84\x10\x28\x28\x08\x40\ +\x20\x88\x19\x26\x31\xcb\x40\xf5\x9b\xf1\x3b\x31\x0f\xaa\xa5\x82\ +\x00\xa1\x48\x10\x20\x91\x9f\x38\x82\xa4\x13\x22\x99\x20\x5e\x21\ +\x84\xe6\x54\x30\x5d\x9c\x72\x01\x41\xa3\x8f\x93\xfa\x39\xba\x8d\ +\x10\x03\x32\xc6\x67\x6e\xc8\x67\x76\x6d\x01\x49\x76\x8d\xfe\x1e\ +\x89\x6c\xcf\x27\x76\xce\x87\xd5\xee\xc7\x33\x90\x17\x27\x90\xdd\ +\xb1\x4f\x36\x41\x14\xcb\xb2\xd4\x64\x22\x58\x96\x95\x53\x09\x11\ +\x40\x8f\x19\xa6\x61\xe0\x04\x1d\x66\x0f\x42\x2a\x4c\x9d\x9e\xc7\ +\x8a\xa5\x65\xe4\xe5\x29\x98\x26\x48\x09\xe2\x82\x34\x14\x94\x0a\ +\x28\xeb\x47\xcc\x09\x83\x02\xb1\x01\x89\xec\xd3\x30\x7a\x35\x64\ +\x9f\x86\x19\xf2\x60\x85\x34\xac\xb0\x07\x2b\xa4\xa2\xe8\x9a\x2d\ +\x4d\xf1\x4b\x5e\x13\x04\x49\xe0\x39\x9d\x20\xc2\x49\x12\xdc\x28\ +\x78\x39\x10\xb2\x22\xfc\x6b\x7f\x03\x52\x4a\x54\xa9\x52\x31\xc9\ +\xcb\x17\xbf\x54\x8a\xb4\xc0\x30\x24\x42\x08\x12\x5d\x10\x71\x1d\ +\x05\x52\x20\x11\x60\x48\x34\x55\x81\x62\x13\x6f\xb1\x09\x0c\x10\ +\xef\xda\x85\x72\xc0\x40\x48\x62\x9c\xcf\xc3\x68\xf7\xa1\xb7\xf9\ +\xf0\x84\xf3\x6d\x4e\x10\x57\xa9\x44\x0d\x26\x21\xae\x94\xcb\x85\ +\x84\x18\xd2\x64\x57\xff\xa1\x0b\x12\x20\xf0\xe5\x09\x6e\xbb\xab\ +\x0c\x69\x65\xa9\x16\xed\xe7\xc2\xf1\x96\x04\xfc\x45\x02\x8a\x07\ +\x10\xb3\x07\x40\x01\x3d\x66\x61\xf6\x7a\xb0\x7a\xbd\x18\xbd\x2a\ +\xb2\xcf\x8b\x19\x56\x91\x21\x0f\x46\x48\x41\x89\x7a\x11\x42\xc6\ +\xc3\xe2\x51\x92\xa8\xc1\x24\xc4\xb5\x42\x2e\xa4\xe4\xa4\x7e\x0e\ +\x43\x9a\x28\x17\xb0\x58\x33\xb7\x00\x45\x11\xc8\x1c\x31\xae\xdd\ +\x86\x14\x48\x13\xa4\x09\x1e\xa1\xe0\x29\x92\x50\x14\xbd\x30\x96\ +\xfe\x14\x89\xd2\xa3\x92\x81\x36\x0d\xeb\x9c\x9f\x48\x9b\x07\x4f\ +\x77\xbe\xad\xee\x46\x4a\xa2\xb2\x96\x90\x64\x62\xe4\x82\x20\xed\ +\x46\x4f\x8a\x14\x54\x4e\xf6\x0e\xab\x5d\x16\x4e\xff\x25\x4b\x94\ +\x94\x78\xfd\x02\xef\x0c\x1d\x51\xa3\x53\xa2\x48\x4c\xab\x83\x58\ +\x8f\x02\x3d\x5e\x62\x3d\x2a\xf4\x7a\x31\xc2\x0a\x84\x35\x62\x21\ +\x81\x12\xd1\x10\x6a\x6e\x25\xc9\x0d\xbf\xc3\x4e\x90\x90\x8c\xa4\ +\x7c\x2f\x2c\x52\x47\x3d\x20\x03\xc0\x8a\x4b\xa9\x34\x40\x11\x0a\ +\x79\x85\x12\x0a\x63\xe4\x4d\x06\x49\x04\x64\xc2\x96\x81\x65\x40\ +\xd7\x9f\x4b\x90\x5d\x79\x39\x27\x48\x56\x2a\x2b\x97\x04\x31\x30\ +\xe3\x86\xfa\x02\xf8\x7c\xa3\x4b\x10\x57\x02\xa5\xcb\x56\xc2\x63\ +\x93\xa0\xfa\x40\xd1\xc0\x90\x72\xe4\x09\x92\x4b\xef\x8a\xf8\x78\ +\x6c\xfb\x01\xa0\x88\x6b\x2c\x8c\x10\x49\x03\x19\x01\x18\x54\x42\ +\xc6\xb2\xbe\xc3\x97\xb9\x18\x92\x0d\xc9\xb5\xa4\x64\xb6\x25\x87\ +\x50\xf7\x82\x5a\x11\xf1\x7a\x71\xc4\x48\x5b\xdd\x08\x2e\xc6\x30\ +\xc3\x4a\x90\x1c\x8b\xc8\x90\xbc\xac\x04\x27\xe4\x82\x23\x84\x88\ +\x1b\xcd\x54\x50\xb2\xaa\xab\xa8\xd0\xd5\xae\x73\xea\x64\x1f\x35\ +\x15\x73\xb8\x61\xc6\x4d\x54\x96\x4e\x60\x7a\xe5\xa7\x50\x15\xe8\ +\xec\x6f\xe3\x64\xf0\x2f\xb4\x85\x3e\xe6\x78\x77\x03\x8a\x50\x1d\ +\xde\x95\x33\x0c\xe6\x5c\x42\x86\x1c\x87\x0c\xb7\x63\x7a\x29\xc9\ +\x78\xfb\x4f\xdd\xf4\xb4\xc3\xab\x3f\xfb\xbf\xcc\x9f\x3e\x1f\x8f\ +\xea\x71\xec\xa7\x29\x0d\xce\xf4\x1e\xe5\xd7\x7b\xff\x96\xf3\xa1\ +\x93\xa8\x8a\x73\xb9\x44\x46\xc0\x92\x56\x5c\xf2\x10\x59\xe7\xeb\ +\xe4\x30\xa8\x40\x27\x3c\x2b\xd9\x78\x01\x57\x72\x5d\x0e\xc4\x06\ +\x2c\x5e\x7d\xb1\x0d\x2d\x56\xc6\x47\xcf\xec\x60\x61\xcd\x42\x54\ +\x45\x75\xf5\x92\x3c\x8a\xc6\xd4\xe2\x39\x6c\xb8\xed\x65\x6e\xfd\ +\xd4\x7d\x18\x96\xee\x58\x2e\xd4\x6b\xb0\xed\x4f\xed\x4c\xb6\xea\ +\xb8\xbf\x76\x2d\x4b\x3e\xf5\x55\xe6\x8c\xff\x5c\xd6\x0c\x92\x2b\ +\x9c\x0c\x86\x97\x61\x77\x7b\x11\x82\xf4\x66\x06\x6b\xd7\xb2\xe0\ +\xf5\x7f\xec\x24\xe0\x2f\xe5\xfd\x5f\xbe\x89\xdf\xeb\xcf\x2a\xc5\ +\x92\x90\x80\xfb\x6b\xff\x23\xc5\x79\x15\xfc\x63\xc3\xff\xc4\xab\ +\xfa\xec\xe7\xaa\x47\xd0\x72\x64\x80\xe6\xc3\x3d\xdc\xff\xf7\x7f\ +\x43\xcd\xc4\x99\x00\xb4\x74\x1f\xe6\xf0\xf9\xf7\xb3\xa0\x88\x95\ +\x53\xad\xe1\xa4\xae\x06\x55\x59\xb9\xf3\xf3\xe3\xae\x6e\x32\xa7\ +\x2a\x8a\x3b\x72\x0f\x7f\xd0\x47\xa4\xdf\xe4\xe7\x0f\x3e\x62\x13\ +\x23\x1d\xa2\x46\x84\xf7\xff\xb2\x1b\x4d\xf8\xb9\x61\xd6\x02\xbc\ +\x1e\x6f\x0a\x61\x56\x7c\x7a\x15\x4d\x1d\x7b\x69\xee\xfc\xe0\x22\ +\x41\x54\xc1\xc9\x63\x03\x54\x56\x94\x50\x33\x71\xa6\x4d\x40\x04\ +\x29\x73\xda\x57\xaa\x6a\x73\xee\xf6\xe6\x42\xe5\x5c\xb6\x1f\x23\ +\x05\x87\x3f\x0c\x51\x5e\x12\xe0\xdf\xde\x76\xbf\x63\xa9\x73\xa1\ +\x53\xfc\xb7\x9d\xab\xe9\xe9\x0b\xb3\xf5\xe5\x4e\xaa\x27\x54\xf1\ +\xde\x2f\xde\xca\x08\xf4\xfe\xcd\x67\xfe\x3d\x8f\xbd\xb3\xca\xfe\ +\x1e\x09\x5b\xf4\xf5\x98\xdc\x3c\x6f\x61\x76\x49\xcd\x61\xca\xed\ +\x5d\x4a\x0b\x29\x83\x89\x93\x65\x59\x57\x7c\x25\x5c\xc6\xc4\x27\ +\xfd\x7b\xe2\xa3\xa8\x82\x86\x7d\x7d\x74\xf7\x84\xf9\xdf\x8f\x3c\ +\xe1\x6a\x04\x5f\xf8\xf0\x51\x22\x46\x98\xbc\x7c\xc1\xed\x77\x97\ +\x70\xf0\x48\x13\x77\xfe\xf8\xde\x0c\x04\x57\x15\xcd\xa4\xa6\x74\ +\x3e\xa6\x65\x20\x91\x74\x77\xe8\x48\x24\xd7\xd7\x5c\xe7\xe8\xd2\ +\x5e\xf2\x93\x23\x7c\x24\x2e\x37\x2f\x4b\x71\x32\x7e\xb9\xe4\x06\ +\x91\xf6\x71\xba\x27\x10\x28\x42\xa1\xf9\x60\x3f\x15\xe5\x45\x2c\ +\xb9\x7e\x89\xa3\x51\xee\x8e\x9c\xa3\xb1\xbd\x1e\x81\x40\x5a\x50\ +\x50\xa8\x32\x73\xf6\x38\xde\xfb\x70\x3f\xef\x37\xd6\x67\xd4\x59\ +\xb3\xf0\xa7\x58\xc4\xd0\x54\x85\x73\x6d\x61\xf4\x98\xc1\xbc\x4f\ +\xcd\xc9\x70\x9f\x84\x14\x5c\xea\x93\x6b\x37\x2b\xeb\xc0\x30\xd9\ +\x1d\xcb\xdd\x8c\xa1\xc8\x20\x51\x3a\x74\xb4\xc5\xd0\x63\xb0\xe2\ +\xe6\xbf\x72\x8d\x25\xde\x39\xf1\x4f\xa8\xc2\x13\xaf\x7f\xa1\x89\ +\x09\x93\x7d\x9c\x3c\x16\xe5\x9d\x8f\xfe\x95\x45\x73\x6e\x4a\x19\ +\x47\xb1\x7f\x3c\x4d\x3b\x4b\x68\x3a\x76\x8a\xed\xbf\x78\x99\xfe\ +\xaf\xc7\x98\x33\x25\x95\x20\x01\x5f\x09\x9f\xab\x5a\xce\x80\x11\ +\x41\x37\x23\xb4\x87\x5b\xe9\xe8\x3f\xe3\x28\x45\xb9\x8e\x43\x46\ +\xc7\xcb\xca\x12\xba\xda\x75\x84\x80\x05\x33\xe7\xb9\x96\x69\xee\ +\xfc\x00\x55\xa4\xba\xbf\x25\x65\xf1\xe5\x00\x07\x8e\x35\x38\x26\ +\x0d\xe7\x55\xcd\xa7\xe1\x2f\x1f\x33\xa9\x64\x32\x25\x53\xca\x33\ +\xda\x2c\xcb\x9f\xc8\xaa\x05\x7f\x1b\x4f\xec\x4a\x8b\xff\x77\xe2\ +\x65\x5e\x39\xf4\xf4\xd5\x65\x43\x86\x23\x0f\x94\xfa\x72\x99\x71\ +\x85\x7a\x4d\xa4\x94\x54\x55\x4c\x74\x6d\xe7\x74\x4f\x33\x42\x28\ +\x29\xf5\x0a\x02\x2a\x52\x4a\xce\x76\xb6\x3b\xd6\x99\x3b\xf5\x33\ +\x59\x05\x76\x82\x78\x46\x41\x49\x6b\xff\xe2\x75\x15\x24\x17\x73\ +\xc1\x11\x8a\x48\x55\x51\xc2\xc5\x7d\x0c\xf7\x59\x08\x21\xa8\x99\ +\x3c\xd3\xb5\x2d\xc3\x32\x33\x8c\xb7\x3f\x5f\x41\x08\x41\x6b\xc7\ +\x19\xc7\x3a\xd3\x26\x4d\xc6\x32\xa1\xc0\xe7\x4f\x89\x57\x06\x57\ +\xaf\xc2\xd9\xf0\xcb\x51\x9a\xa0\x4a\xcf\x69\x5d\x79\x2c\x22\x2e\ +\xe9\xd3\x87\x43\x71\x64\x57\x96\x95\x39\x47\xef\x66\xd4\x11\x91\ +\xaa\x27\x9e\xfe\x08\x47\x23\xce\x12\x32\xb3\x9a\xaf\xfd\x4d\x25\ +\x13\xef\x9b\x45\x59\x51\x11\x47\xfe\xe1\x50\xaa\x1b\xdd\x77\x8a\ +\x7f\x3e\xf8\x0c\x9a\xe2\xa3\xc0\x57\x48\x47\xf4\x63\x67\x82\x58\ +\x57\x81\x0d\x19\x49\xd0\x63\xf1\xc1\x96\x14\x16\x3b\x3f\x37\x07\ +\x5c\x93\x4c\x9a\x4f\x10\x89\x39\x3f\x2f\xce\x1b\x8f\xc7\xa3\x90\ +\xe7\xc9\xc7\x32\x32\x35\x74\xc4\xe8\xe3\x40\xc7\x9b\xa9\x32\xe2\ +\xb4\x0a\x67\xd8\xd5\xf8\x20\x5e\x56\x6e\xd7\x65\x65\x17\x80\x99\ +\x46\xbc\x63\xf9\xde\x80\xab\x84\xb8\x81\xd7\xab\x10\xee\x77\x5e\ +\x87\xec\x55\xf3\x2e\xa6\x0c\x84\x73\xf7\x44\x36\x19\xe2\xd1\xcc\ +\xf6\x26\x62\x91\x5c\xac\x5c\x8c\xe3\x41\xa4\x7d\x77\x20\x88\x39\ +\x78\xf4\xac\x9b\x51\x57\xd2\xfa\x7c\x0a\xba\x61\x3a\x3e\xd3\x54\ +\xef\xc5\xf5\x73\x0e\xed\x0b\x57\xab\x96\x8d\xea\xcd\xb5\x2a\x1f\ +\x64\x3e\x64\xa4\x67\x0c\x0d\x43\x0e\x3a\xdf\x1e\x1b\x54\x65\x29\ +\x18\xba\x85\x69\x99\x19\x59\x61\x4d\xf1\x5d\x94\x84\x2b\xc8\x47\ +\xe5\x1a\x1f\xc9\x11\xfb\x88\x67\x7b\xb3\x51\xc0\x8a\x10\xf6\x4c\ +\xe0\x50\xb8\x53\x42\xea\xaa\xc7\x61\xe2\xea\x38\x3e\x86\x3f\x52\ +\x57\x46\x42\x34\xb3\x01\x55\x15\xe8\x86\x3b\x07\xda\xb6\xc0\x81\ +\xde\x7a\xcc\x42\x55\xe3\x3b\x91\xd2\x07\x69\x5a\xc6\x05\x0c\x08\ +\x57\x09\x1b\x2d\xc8\x5a\x65\xb9\xcd\x66\x5d\x49\x2e\x2b\xcd\x8a\ +\x3a\xbb\xaf\x03\xee\x8c\xa0\xa9\x3e\xc7\x7a\x08\x81\x11\x13\x68\ +\x9a\xc7\x71\x90\xba\x15\x03\x71\x31\x8b\xe6\x4a\xd5\x51\xca\xf6\ +\x66\x6d\x43\x92\xb3\xb5\x23\x25\x21\x08\x88\x9a\x11\x7c\x6a\xe6\ +\x3c\x88\x6d\x0b\x5c\x5c\x66\xaf\xe6\x71\x71\x06\x62\xb9\x41\x20\ +\x16\xb9\x44\x47\xd6\xd9\xde\x5c\x4a\x87\x9b\x4d\x72\x4a\x6f\xfb\ +\xfc\x71\x75\x73\xae\xfb\xbc\x8b\xca\xf2\x39\xd6\x13\x02\x62\x31\ +\x49\x9e\xe6\x75\xce\x00\xc4\x82\x17\xd3\xfe\xd2\x0d\xd9\x97\xfe\ +\x0c\x47\xb6\x77\x48\x81\x61\xee\x88\x92\x39\x43\xa8\x38\x98\xae\ +\xfc\x02\x15\x45\x51\xe8\xea\x09\x52\x5d\x3e\xd5\x51\x65\x09\xe9\ +\x10\xb4\x49\xe2\xa9\x91\x7c\x67\x1b\xd3\x1b\xed\x8e\xef\xd8\x12\ +\x02\xb7\x89\x41\x25\x8b\x94\x9e\xcc\xf1\x14\xee\x90\x92\x8b\x39\ +\x9d\x0f\x11\xd9\x39\x0c\xfe\xfc\xb8\xbb\xda\xda\xd9\x36\x88\x1d\ +\xf1\x66\x1a\x6d\x23\xfe\x8e\xc2\xbc\x80\x0b\x41\x3a\x93\xe2\x53\ +\x71\x45\x4a\x2b\xd7\x30\x6a\xb9\xac\x6c\xa0\x70\x5c\x9c\x20\xc7\ +\x5b\x5b\x5c\xcb\x54\x17\xcf\xe2\x48\xc7\x47\x29\x29\xf8\x70\x28\ +\x1e\x10\x56\x8f\x9f\xe2\x58\xa7\x2d\xd4\x92\x23\xe4\x31\xba\xb9\ +\x2c\xb7\x55\x11\x97\x3d\x9a\x34\x9d\x9d\x0e\x25\xe5\x1a\x48\xc9\ +\xfe\xa3\x07\x5c\x9b\x99\x51\x32\x9f\xa6\xf6\x0f\x52\x54\x4c\x7f\ +\xc8\x02\x29\x19\x5f\x52\xea\x58\xe7\x6c\xdf\x09\xdb\x06\x38\x8e\ +\x27\xcb\x4d\xa5\x72\x98\x56\x9d\x64\x6d\xd4\x73\x16\x8b\x08\x01\ +\x8a\x62\x5f\x82\xf8\x2e\xdc\xf4\x4f\x69\xb9\x06\x8a\xc2\xa1\x13\ +\xcd\xae\x1c\xf4\xb9\xaa\xe5\x58\xd2\x4c\xa9\x17\xec\x34\x40\x51\ +\x58\x38\x6b\x81\xe3\x38\x4e\x06\x9b\xe2\x04\x54\x04\xc2\x61\xb5\ +\x8b\xa6\xe6\xa1\xc8\xe4\x16\x9d\xfb\x37\x12\x69\x93\x41\x6d\x48\ +\x32\x05\x47\x62\xa1\x9c\xd7\x27\x98\x32\xcd\xc7\xc1\xa3\xcd\x1c\ +\x3d\xdb\x9c\xd1\x61\x29\x25\x13\x0a\xab\xa9\x2c\x9c\x9a\x82\xf0\ +\xf3\xad\x31\x2c\xcb\xa2\xae\xf6\x73\x19\x03\x6e\x09\x1e\xe6\x7c\ +\xe8\x54\xdc\xad\x56\x04\xb1\x68\x66\x02\x72\x42\x41\x15\xba\x15\ +\x45\x37\x74\x4e\x9f\xee\xa3\x37\xe8\x9c\x13\x93\x96\xcc\xe9\x42\ +\xb9\xac\x25\xc4\x2d\x1e\xb9\xa2\x55\x27\xe9\x04\x72\x98\x90\x33\ +\x0d\x58\xb0\x28\x80\x47\xd5\xf8\xbb\xff\xf3\xb8\x2b\x47\xdd\x32\ +\xf5\x2e\x4c\xcb\x44\x51\x05\xbd\x41\x83\xa3\xcd\xbd\x2c\xbd\x71\ +\x11\xb5\xd3\x6b\x33\xea\xbc\xd6\xf8\x1b\x3c\x8a\x06\x12\xbc\x3e\ +\x85\x48\x34\x13\xd9\xaa\xe2\xe1\x3f\xd7\x3d\xcb\xd4\xe8\xdd\xac\ +\xb9\xfe\x67\xac\xff\xeb\x67\x1d\xfb\x37\x1c\xab\x4e\xb2\xb6\x21\ +\x09\x24\xe6\x26\xdb\xeb\xb0\x3a\x5d\x38\xc7\x02\xf9\x85\x2a\x53\ +\xa7\x17\xb0\x6d\xdf\x7b\x1c\x6d\x3d\x4a\xcd\xa4\x9a\x8c\x72\x77\ +\xd4\xac\xa4\xab\xff\x2c\xbf\xdd\xf9\x02\x3b\xdf\xe8\xe3\xcb\x75\ +\xb7\xf3\xcc\x7f\xf8\x5f\x19\xe5\x4e\x74\x1f\xa2\xa9\x73\x9f\xbd\ +\xce\xb7\xb8\xd4\x43\x4f\xb7\x41\xd3\xe9\x26\x66\x4d\x99\x95\x32\ +\xce\x69\xa5\xb3\x59\xf7\xb5\xd9\x00\x9c\xea\x69\x1a\x24\xa0\x1f\ +\xfe\x94\x92\x32\x98\x77\x95\x2b\x09\x89\x13\x45\x5c\xdc\x56\xe0\ +\x70\xd9\x8b\x12\x6e\x28\x04\x09\x3f\xfb\xed\x53\xae\xb6\xe4\xfe\ +\xf9\xff\x89\x8d\x5f\x7b\x9d\xc3\xcf\xed\x64\xf3\x0f\x7f\x8d\x4f\ +\xf3\x65\x38\x0c\x6f\x1c\x7d\x21\xe5\x7d\x53\x6b\xf2\x40\xc2\x3f\ +\xed\x7c\x6d\x50\x5b\x29\x50\x1c\xfb\x97\x58\x75\x32\xe2\xeb\xb2\ +\x46\xc3\xe5\x4d\x86\xf2\x4a\x8d\x1b\x6e\x19\xc7\x2b\xdb\xff\xcc\ +\xaf\xfe\xb4\x29\x13\x61\x17\xbe\x57\x8f\xaf\x62\x52\x49\x55\xc6\ +\x80\x04\x82\x57\x0e\xfd\x82\x03\x6d\xef\xa6\xdc\x9f\x54\xed\xe3\ +\xc6\xc5\xe3\x78\xea\xa5\x67\xf8\xf5\x96\xe7\x1c\x6d\xd4\xbb\x2d\ +\x7f\xe0\xf9\x0f\x1f\xcd\xc6\x51\xcc\x99\xdb\x9b\x55\xfa\x3d\x97\ +\xfb\x43\x86\xec\x0e\x9a\x92\x9a\xb9\x7e\x06\x06\x8a\xf9\x2f\x9b\ +\xfe\x3b\x05\xbe\x00\xff\xee\xb6\xfb\x5d\x83\xba\x64\xc4\x1a\x96\ +\xce\x96\xe6\x7f\x60\xdb\xf1\xdf\xc5\x6d\x47\xca\x98\x24\x33\x66\ +\xfb\x99\x3e\xd3\xcf\x96\x8f\x7f\xc1\x9f\x36\x6e\xe4\xf3\x73\x6f\ +\xa4\xbc\xa8\x9c\x96\xee\xc3\x9c\xed\x6b\xc1\xa3\x78\xf0\x28\x5e\ +\x67\xd5\x34\x4c\x33\x86\x23\x1e\x87\x88\xcb\xb0\x39\x52\xc2\xdc\ +\xeb\xf3\x99\x5c\xed\xe3\xd1\x17\x1f\xe7\xb7\x6f\xfc\x0b\xcf\xae\ +\x7b\x8a\x89\xa5\x93\x5c\xeb\xed\x6f\x7d\x9b\xd7\x9b\x9f\xe5\x6c\ +\xa8\x25\x83\x18\xc9\xed\x0a\x05\xa6\x54\x15\x02\x92\x93\xe1\x83\ +\x9c\x0c\x4b\x04\xf1\x39\xf7\xc1\x6c\x84\x35\x42\xab\x4e\x94\x6c\ +\xf3\x2d\x23\xb9\x3f\x24\x81\xc0\xe2\x32\x0f\x7f\xfd\xb5\x32\x2a\ +\xae\x3b\xc3\xc2\x87\x3f\xcf\xb2\x75\x77\xd3\xda\x75\xd6\xb1\xfc\ +\xef\x0e\x3e\xc1\xb9\xf0\xc9\x21\xec\xa0\x12\x17\xd6\x61\xa9\x17\ +\xed\xdb\x10\x82\xdb\x2b\xc5\x99\x5b\xc4\x7e\xc9\x19\x43\xd3\x34\ +\x87\x1c\xfe\xa7\xa4\xbf\x0d\x23\x65\xbf\xbd\x69\x19\x08\x4b\xb8\ +\xe7\x8b\x64\x6a\xe6\xc8\x30\xa1\xb0\x04\x66\xce\x2e\x66\xf7\x9e\ +\x8f\x78\x63\xef\x36\xbe\x79\x47\xe6\x89\x77\x9f\xa9\x58\xc4\xfb\ +\xa7\x5e\xbf\x44\xe6\x49\x66\x9d\xaa\x92\x69\x37\x23\xfd\x11\xfa\ +\xfb\x8d\xdc\x79\x53\x8a\x92\xbd\xca\xb2\x2c\x0b\x5d\xd7\x09\x87\ +\xc3\x57\x2c\xa6\x51\xdd\x40\x58\xa9\xf3\x13\xf2\x32\xdc\xc7\x92\ +\xf1\x60\x18\x06\xef\x35\xec\xe5\x9b\x77\xac\x8c\xa7\xde\x93\x14\ +\xe2\x8a\x4f\x7f\x93\xe6\x8e\x0f\xe8\x8b\x06\x31\xa4\x8e\x31\xc8\ +\x2a\x95\x6c\x74\x6b\xfa\x84\x56\xb4\xdf\xc0\x30\x72\x47\x10\xc3\ +\x30\x18\x18\x18\xc8\x38\xb5\xcf\x51\xbe\x63\xb1\x18\xb1\x58\x2c\ +\x67\x36\x24\xd9\xed\x4d\xec\xeb\x1b\xea\x35\xb1\xca\x87\xd7\xab\ +\xf0\xcf\x17\xdc\xd6\x74\x8e\x1e\x5f\x30\x85\xbf\xbb\xf5\xb7\xfc\ +\xd7\x25\xbf\xe3\xce\x4f\xaf\xc6\xb0\x62\x43\x7b\x47\xc6\x2a\x7d\ +\x71\x31\x1e\x53\xa0\xaf\x2d\x77\xc4\x18\x72\x1c\x62\x9a\x66\x4e\ +\xf7\x87\xe4\x2a\x3f\x79\xcb\xed\xc5\xb4\x77\xf5\xf1\xf7\x2f\x6c\ +\x70\xd4\xf9\x5e\x4f\x1e\x25\xf9\x15\x14\xfa\x8a\x73\xb6\x8d\x59\ +\x51\x05\x67\x0f\x45\x31\x42\x66\x4e\xe3\x10\xb7\x88\x5d\x19\x2e\ +\x63\x6e\x1b\xaf\x1c\x05\xb7\x96\x25\x99\x54\xed\xa3\xf6\xb3\x25\ +\xfc\x8f\xcd\x9b\x78\x6b\xff\xf6\xac\xed\xd8\x15\x31\x82\x80\xc3\ +\x2f\xf6\xa2\x78\x73\x8b\x97\xcb\xf2\xb2\xae\x26\x48\x48\xc4\xe7\ +\x97\x14\x31\x77\x41\x80\x6f\x3c\xb6\x9a\x97\x77\xbd\x44\x7b\xef\ +\x79\x42\x03\xbd\xe8\x66\x94\xa8\x11\x21\xa2\x87\xe9\x8f\xf5\x72\ +\xa5\x9c\x90\x60\xa6\x13\x6f\xf7\x13\x0b\x9a\x23\x36\x4e\x8f\x7b\ +\xfe\x49\xe4\x26\x77\x93\x63\x0e\xb6\x2c\x58\x78\x4b\x80\x79\x0b\ +\x0b\xf8\x7d\xf3\x63\xfc\xf9\xf4\x46\x4a\x03\x25\xf8\x7d\x7e\x4c\ +\xcb\x24\x66\x46\x08\xc7\x7a\xd1\x14\xef\x15\xbd\x47\xf3\x2b\x9c\ +\xd8\xd5\xcf\x91\x7f\x09\x0d\x4b\x0e\xcb\x0d\xbf\x1e\xae\x41\x90\ +\x16\x68\x5e\x85\x12\x6f\x1e\x10\x25\x18\x6b\x23\x18\xbb\xcc\x44\ +\xe0\x85\x55\x49\x52\x82\x11\x95\x98\x31\x0b\x23\x22\x39\xb6\xbd\ +\x9f\x33\x3b\x22\xa8\x9a\x18\x56\x89\x77\x3a\xb7\x77\x78\x25\xe4\ +\x6a\x52\x7b\x0a\x08\x35\x6e\xa8\x0d\x43\xd2\x73\x46\xa7\xb7\xc5\ +\xa0\xe7\xb4\x4e\xff\x19\x13\xbd\x5f\xa2\xf7\x5b\xc4\xfa\x2c\xa4\ +\x89\x4d\x8c\xe1\xc2\x43\x62\x0d\xf5\x35\x2f\x21\xd9\xc6\x13\x66\ +\x4c\xda\x57\x34\x64\x11\x3c\x65\xd0\x73\x4c\xa7\xfb\x63\x9d\xc8\ +\x19\x23\xce\x74\x4a\x9c\x50\xe9\xd6\x54\x0c\xb3\x75\x1d\x35\x09\ +\x91\x62\xf8\xce\x98\xb4\x39\x5e\x11\x98\x52\xd2\x7b\xd6\xa0\xaf\ +\xc5\xa0\xe7\x8c\x41\xf8\xb4\x41\x2c\x2c\x31\xc2\x16\xb1\x7e\x89\ +\x19\x89\xaf\xe1\x4a\xa8\x28\x4f\xde\xe8\xfb\x33\x59\xdb\x90\x5c\ +\x8a\x68\x7e\x97\x42\xa4\xd8\xe2\xb2\xd7\x9e\x27\x73\xbc\x2e\xb1\ +\x62\x12\x53\x97\xc4\xfa\x25\xc1\xd3\x3a\xbd\xc7\x0c\xba\x3e\xd6\ +\xe9\x3f\x69\xc6\xc3\x39\x9b\xe3\x45\x4a\xf4\xa8\x5c\x65\xba\xc0\ +\x8d\xe9\x3d\x43\xa5\xe0\x50\x61\xdc\x79\x15\x8f\x2e\xe8\xad\x30\ +\x11\x52\x64\xc5\xf1\x42\x11\x48\x24\xbd\xe7\x4d\x42\x1f\x27\x38\ +\xde\x24\xd6\x67\xd9\x1c\x6f\xf4\x4b\x7b\xa9\x95\x10\xe0\xf1\x89\ +\x1c\xe4\x9a\x47\x1f\x5c\x93\x8b\xb9\x5b\x75\x02\x05\xdd\xf1\xb3\ +\xdc\x43\x65\x16\xc9\x7b\x2a\x2d\x23\xae\xdf\x2d\x5d\xa2\x0f\x48\ +\x7a\x5a\x8d\x38\xc7\x9f\xd4\x09\xb7\x98\x60\xe2\xaa\xe3\x15\x95\ +\x6b\x1e\xb2\x5e\x28\xe7\x66\x70\xae\x84\x28\x85\xdd\x2a\xaa\x2e\ +\x68\xff\x4b\x8c\x70\x9b\x49\xf8\x94\x49\xb4\xcf\x42\x0f\x49\xf4\ +\xb0\x85\x1e\x96\x71\x5b\xa3\xc4\x39\x5e\xf5\x88\x4f\xa2\xcb\x91\ +\xa1\xb2\xb2\xf6\xb2\x72\xed\xea\x49\x01\xfe\x90\xca\xa1\x5f\x87\ +\x3e\xb1\x1c\x9f\x0b\xc3\x3e\xb2\x71\x88\x00\x45\x13\x8c\x81\x7b\ +\xa4\xae\x8c\xa1\xe6\x1a\x30\xea\x39\xb7\x21\x63\x70\x65\x6e\xaf\ +\xc8\x72\x8b\x17\x80\xaa\xaa\x68\x9a\x86\x65\x59\xf6\x74\x6f\x2e\ +\x37\x5a\x5e\x6d\x5e\x50\x2e\xeb\x0d\x29\xb9\xe8\xa6\xe3\x2c\xcb\ +\x62\x60\x60\x80\x3b\xef\xbc\x93\x3b\xef\xbc\x93\xf1\xe3\xc7\x13\ +\x08\x04\x88\xc5\x62\x04\x83\x41\x76\xef\xde\xcd\xee\xdd\xbb\xd1\ +\x34\x2d\xc5\x8b\x70\xfa\x9b\xed\xb3\xa1\x96\x4b\xf4\x33\x19\x41\ +\x6e\xe5\xae\xf4\x5d\x4e\x7f\x13\x53\xe0\xb1\x58\xcc\x95\x39\xdd\ +\xee\x7b\xb2\x49\x78\x25\xc3\x67\x3f\xfb\x59\x7e\xf9\xcb\x5f\x52\ +\x96\x76\x26\x49\x22\x76\xb9\xf5\xd6\x5b\xe9\xed\xed\xe5\xe9\xa7\ +\x9f\xe6\xe8\xd1\xa3\x19\x03\x4f\xb4\x9d\x3e\x5b\x96\x3e\xd8\xc1\ +\xbe\x67\x5b\x6e\xb0\xff\xdd\xbe\x5b\x96\x95\x72\x88\xdb\x60\xfd\ +\x75\xeb\x97\xc7\xe3\xc1\xeb\xf5\xe2\xf7\xfb\xe9\xef\xef\xb7\x67\ +\x60\xb3\x91\x24\xe5\x52\xfa\x2d\x71\x19\x86\xc1\x8f\x7e\xf4\x23\ +\x5e\x7a\xe9\x25\x9b\x18\xe9\xcb\x45\x13\x10\x08\x04\x58\xb7\x6e\ +\x1d\x5f\xff\xfa\xd7\x5d\x17\x06\xe4\xe7\xe7\x53\x57\x57\x47\xe2\ +\x07\x2d\xaf\xc6\x20\x2d\x5d\x33\xdc\x7a\xeb\xad\x8c\x1f\x3f\x3e\ +\x2b\x35\x24\xa5\x44\x51\x14\x0a\x0a\x0a\xc8\xcb\xcb\x73\x9d\xcb\ +\x1f\xb2\x97\x95\xa8\xf4\xfd\xef\x7f\x9f\x55\xab\x56\xd9\x1d\xaf\ +\xaf\xaf\x67\xf5\xea\xd5\x6c\xdd\xba\xd5\x2e\x6b\x18\x06\x3f\xff\ +\xf9\xcf\x59\xb3\x66\x0d\x07\x0e\x1c\xe0\x8e\x3b\xee\xe0\x9e\x7b\ +\xee\x71\x1c\xec\x8a\x15\x2b\xf8\xce\x77\xbe\xc3\x4d\x37\xdd\x34\ +\xea\x84\x50\x14\x85\x69\xd3\xa6\x0d\x5a\x6e\xee\xdc\xb9\x6c\xd8\ +\xb0\x81\x87\x1e\x7a\x68\xc8\xf6\xc1\xe7\xf3\xe1\xf3\xf9\x2e\xcf\ +\xcb\xba\x78\x02\xb4\xb0\x7f\x20\x6c\xce\x9c\x39\x7c\xef\x7b\xdf\ +\x4b\x79\xd1\xb9\x73\xe7\xf0\xf9\x7c\x4c\x99\x32\xc5\xae\xf7\xf4\ +\xd3\x4f\xd3\xd8\xd8\xc8\xda\xb5\x6b\x99\x37\x2f\x7e\x32\xdc\x3d\ +\xf7\xdc\xc3\xfe\xfd\xfb\x69\x69\x69\x49\xe9\xe4\xce\x9d\x3b\x89\ +\x46\xa3\x1c\x3c\x78\x70\x54\x09\x12\x8d\x46\x79\xe8\xa1\x87\xb8\ +\xf9\xe6\x9b\x79\xe0\x81\x07\x5c\xcb\x1d\x3f\x7e\x9c\x27\x9f\x7c\ +\x92\x03\x07\x0e\x5c\x56\xe0\xe7\xf3\xf9\x30\x0c\xc3\x79\x01\xfa\ +\x50\x24\xc4\x30\x0c\x36\x6d\xda\x94\x71\xff\xdc\xb9\x73\x48\x29\ +\xa9\xac\xac\x44\x4a\xc9\x0b\x2f\xbc\x40\x53\x53\x13\xab\x57\xaf\ +\x66\xde\xbc\x79\x29\x52\xb1\x76\xed\xda\x94\x05\x77\x7e\xbf\x9f\ +\x50\x28\xc4\x5b\x6f\xbd\x45\x38\x1c\x76\x7c\xaf\xa6\x69\x68\x9a\ +\x86\x94\x92\xbc\xbc\x3c\x02\x81\x00\xf9\xf9\xf9\x59\x9e\xb1\x1b\ +\x7f\x47\x20\x10\xa0\xa0\xa0\xc0\x9d\x1b\x3d\x1e\xaa\xab\xab\x59\ +\xb9\x72\x25\xcd\xcd\xcd\xe4\xe7\xe7\xe3\xf7\x67\xee\x91\xf7\xf9\ +\x7c\x78\xbd\x5e\xb6\x6c\xd9\xc2\xf1\xe3\xc7\x07\x95\x36\x55\x55\ +\x29\x2c\x2c\x64\xdc\xb8\x71\x14\x16\x16\xda\x2a\x59\x08\xe1\xd8\ +\x76\x56\x46\x3d\xf9\x5a\xb4\x68\x11\x13\x26\x4c\xc8\x48\x38\xb6\ +\xb5\xb5\x21\x84\xa0\xa2\xa2\x82\x17\x5f\x7c\x91\x37\xdf\x7c\x93\ +\x07\x1e\x78\x80\xba\xba\xba\x0c\x5d\x5a\x52\x52\xc2\xdc\xb9\x73\ +\x69\x6e\x6e\xa6\xa4\xa4\x84\xa7\x9e\x7a\xca\x26\xc4\xb7\xbf\xfd\ +\x6d\x47\x3b\x72\xef\xbd\xf7\xe2\xf1\x78\xe8\xea\xea\xe2\xab\x5f\ +\xfd\x2a\x7e\xbf\x9f\x48\x24\xc2\x9b\x6f\xbe\xc9\xb3\xcf\x3e\x3b\ +\x28\x92\x1f\x7e\xf8\x61\x6e\xb9\xe5\x16\x2c\xcb\xc2\xe3\xf1\xb0\ +\x67\xcf\x1e\x1e\x7d\x34\x75\x55\x7b\x2c\x16\xe3\xc1\x07\x1f\xe4\ +\xde\x7b\xef\xb5\x55\xe8\xb2\x65\xcb\xa8\xaf\xaf\xe7\x87\x3f\xfc\ +\xa1\x5d\x2e\x12\x89\xb0\x71\xe3\x46\x6a\x6a\x6a\x88\x46\xa3\xfc\ +\xf8\xc7\x3f\x66\xff\xfe\xfd\x19\xef\xd5\x75\x9d\xeb\xae\xbb\x8e\ +\x47\x1e\x79\x84\xda\xda\x5a\x2c\xcb\x42\x55\x55\x36\x6c\xd8\xc0\ +\x1f\xff\xf8\x47\x9b\x58\xaa\xaa\xda\x8e\xc3\x65\x49\x48\x42\xc7\ +\x27\x57\x94\x52\xd2\xda\xda\x4a\x75\x75\x35\x3b\x76\xec\x60\xfb\ +\xf6\xed\xdc\x77\xdf\x7d\x2c\x5e\xbc\x38\x73\x7b\xc0\x85\x7a\xb3\ +\x67\xc7\x37\xc4\x74\x77\x77\xb3\x6a\xd5\x2a\xf2\xf3\xf3\xe9\xec\ +\xec\x74\xfd\xbd\xdd\xea\xea\x6a\x96\x2c\x59\xc2\xf2\xe5\xcb\x79\ +\xf0\xc1\x07\x59\xbe\x7c\x39\x67\xce\x9c\xe1\xae\xbb\xee\xc2\xe3\ +\xf1\xb8\x7a\x2d\x6b\xd7\xae\xe5\xb6\xdb\x6e\x63\xe3\xc6\x8d\x7c\ +\xe5\x2b\x5f\x61\xf3\xe6\xcd\xd4\xd5\xd5\xb1\x64\x49\xea\xd1\xb3\ +\x5e\xaf\x97\x4d\x9b\x36\xb1\x79\xf3\x66\x00\xd6\xad\x5b\xc7\xd2\ +\xa5\x4b\x59\xb7\x6e\x5d\x86\xa4\x3d\xfc\xf0\xc3\xd4\xd7\xd7\x53\ +\x5c\x5c\xcc\xd9\xb3\xce\x6b\x8b\x67\xcf\x9e\xcd\xf3\xcf\x3f\x4f\ +\x51\x51\x11\x2b\x56\xac\xa0\xb6\xb6\x96\x65\xcb\x96\xd9\x2a\x2e\ +\x81\x87\x4b\x39\x31\x97\xf4\xb2\x26\x4c\x98\x90\xf1\x3c\x18\x0c\ +\xd2\xd7\xd7\xc7\xc0\xc0\x00\x9b\x37\x6f\x66\xd9\xb2\x65\xdc\x75\ +\xd7\x5d\x83\xfa\xd7\x25\x25\x25\x36\xd2\x4a\x4b\x4b\x51\x55\x95\ +\x8f\x3e\xfa\xc8\xb5\x83\x93\x26\x4d\xa2\xa0\xa0\x80\xf5\xeb\xd7\ +\x13\x0e\x87\xf1\x7a\xbd\xec\xde\xbd\x1b\x80\xb2\xb2\xb2\x0c\x82\ +\x18\x86\xc1\x82\x05\x0b\x58\xbc\x78\x31\x7f\xf8\xc3\x1f\xd8\xb2\ +\x65\x0b\x3e\x9f\xcf\x56\x31\x45\x45\x45\x8e\x04\xac\xae\xae\x06\ +\xe0\xe4\xc9\x93\x83\xaa\xa2\xa9\x53\xa7\x62\x9a\xa6\x63\x39\x29\ +\x25\x3f\xf8\xc1\x0f\x6c\xf5\xdc\xd9\xd9\x49\x61\x61\x21\x5d\x5d\ +\x5d\x9c\x38\x71\x22\x15\xe1\x8a\x32\x74\x2f\x2b\xb9\xe0\xb8\x71\ +\xe3\x32\x9e\x1f\x3a\x74\x28\xbe\xd1\xb2\xae\x8e\x68\x34\x3a\xe8\ +\x82\xec\x04\x24\x74\xb9\x69\x9a\xd4\xd6\xc6\xf7\x03\x1e\x3c\x78\ +\x30\x83\x20\x09\x44\x4f\x9c\x38\x91\x96\x96\x16\x4e\x9c\x38\x61\ +\x3b\x17\x55\x55\x55\x00\xb4\xb7\xb7\x67\x1e\x32\xa3\xeb\xb6\xe3\ +\xf1\xcc\x33\xcf\x50\x58\x58\x48\x5e\x5e\x1e\xb7\xdf\x7e\x3b\x96\ +\x65\xd1\xd8\xd8\xe8\x38\xce\xaa\xaa\x2a\x2c\xcb\xe2\xd4\xa9\x53\ +\x83\x06\x71\xd3\xa6\x4d\xe3\xd0\xa1\x43\x19\x63\x95\x52\x52\x54\ +\x54\xc4\x8d\x37\xde\xc8\x87\x1f\x7e\x48\x73\x73\xb3\x6d\xe7\x14\ +\x45\xc9\xb0\x79\xc9\xef\xb8\xac\x19\xc3\x60\x30\x98\x71\xbf\xb1\ +\xb1\x11\x55\x55\x59\xba\x74\x29\x07\x0e\x1c\x60\xdb\xb6\x6d\x2c\ +\x5d\xba\x94\xf2\xf2\x72\xd7\xb6\x42\xa1\x90\x4d\x90\x84\x07\x96\ +\xdc\xf9\x74\x6e\x04\xd8\xb1\x63\x07\x9a\xa6\xd9\xf5\xae\xbf\xfe\ +\x7a\x82\xc1\x60\x4a\xf0\x96\x80\xc9\x93\x27\x53\x51\x51\x41\x24\ +\x12\xe1\x27\x3f\xf9\x09\x81\x40\x80\xea\xea\x6a\xda\xda\xda\xd8\ +\xb0\x61\x03\x0d\x0d\x0d\x78\x3c\x9e\x8c\xd8\x62\xfa\xf4\xe9\x34\ +\x36\x36\xa2\xeb\xba\xfd\xae\xf4\x32\x09\x29\xaa\xaf\xaf\xcf\x60\ +\x20\xc3\x30\x58\xbe\x7c\x39\x00\x2f\xbd\xf4\x12\x89\xdf\xa5\x1f\ +\x4c\xda\x06\x4b\x2d\x79\x2e\x15\x24\x39\xe9\xcc\xc3\x87\x0f\x53\ +\x59\x59\x89\xaa\xaa\x2c\x5e\xbc\x98\xe6\xe6\x66\xde\x7e\xfb\x6d\ +\xee\xbb\xef\x3e\xd7\x17\x76\x74\x74\xd8\x03\xbc\xee\xba\xeb\xe8\ +\xea\xea\xc2\x34\xcd\x0c\xc4\x26\x10\x0f\xa4\xa8\xb4\xd2\xd2\x52\ +\xc6\x8d\x1b\x47\x43\x43\x83\x63\x36\x21\xc1\x0c\x67\xce\x9c\x61\ +\xd7\xae\x5d\x74\x74\x74\xd0\xd0\xd0\x40\x30\x18\xc4\xe3\xf1\x64\ +\x10\x43\x4a\xc9\xc4\x89\xf1\x33\x82\xf7\xec\xd9\x93\xf1\x3c\xb9\ +\x3f\x8b\x16\x2d\x02\x60\xf7\xee\xdd\x19\x04\x31\x4d\x93\x19\x33\ +\x66\x00\x70\xe2\xc4\x89\x4b\x7a\x81\xc9\x7b\x1b\x2f\x2b\x52\xaf\ +\xaf\xaf\x4f\x69\x28\x12\x89\x10\x0e\x87\xed\xc1\xdc\x74\xd3\x4d\ +\x04\x02\x01\xde\x79\xe7\x1d\x0c\xc3\x70\xdc\xbb\x97\x20\x62\x42\ +\xff\xe7\xe7\xe7\xd3\xda\xda\xea\x8a\x80\xf9\xf3\xe7\x03\xa4\xa8\ +\x91\xc9\x93\x27\xdb\x08\x1f\x6c\xa0\x47\x8e\x1c\xe1\xb5\xd7\x5e\ +\xe3\xbd\xf7\xde\x23\x1c\x0e\x3b\x72\x7d\xfa\x7b\xf6\xec\xd9\xe3\ +\x6a\xcb\x0c\xc3\xb0\x1d\x9b\xa6\xa6\xa6\x8c\x72\x42\x08\xa2\xd1\ +\xa8\xad\x36\x5d\x4f\xbe\x4b\x4b\xcd\xb8\xd9\x5b\xe5\x52\xe9\xf7\ +\x7d\xfb\xf6\x71\xe4\xc8\x11\xfb\x5e\xc2\xdd\x4d\x36\xf6\xab\x56\ +\xad\x22\x18\x0c\xf2\xfb\xdf\xff\xde\xb1\xad\xd3\xa7\x4f\xd3\xd4\ +\xd4\x64\x1b\x6b\x37\xc9\x4b\xc0\x9c\x39\x73\x6c\x82\x25\xde\x9b\ +\x08\x40\xdd\x08\x72\xfe\xfc\x79\x5b\x05\x79\xbd\x5e\x54\x35\x7e\ +\xba\x50\x79\x79\x39\x85\x85\x85\x99\x87\xd6\x98\x26\x73\xe7\xce\ +\x4d\x41\xb4\xdb\x8f\x34\x2f\x58\xb0\x80\xd6\xd6\x56\xc7\xd5\xfc\ +\xaa\xaa\xda\xc1\xed\x97\xbe\xf4\x25\x3b\x6f\xa5\x69\x1a\xaa\xaa\ +\xa6\x48\x44\xe2\xd9\x60\x46\xfd\x92\x33\x86\x7e\xbf\x9f\xef\x7e\ +\xf7\xbb\x6c\xdd\xba\x15\x55\x55\x39\x75\xea\x14\x91\x48\x84\x8a\ +\x8a\x0a\xbb\xc3\xb5\xb5\xb5\x4c\x9f\x3e\x9d\xad\x5b\xb7\xb2\x64\ +\xc9\x12\x2a\x2b\x2b\x53\x74\xf0\x13\x4f\x3c\x61\xeb\xd6\x04\x62\ +\xdd\x08\x32\x69\xd2\x24\x54\x55\xa5\xad\x2d\xf5\x54\xa0\x84\x41\ +\x77\x23\x48\x7b\x7b\x3b\xcf\x3d\xf7\x1c\xdf\xfa\xd6\xb7\x78\xfc\ +\xf1\xc7\x39\x73\xe6\x0c\xe5\xe5\xe5\xcc\x9e\x3d\x9b\x35\x6b\xd6\ +\x64\x72\xa2\xa2\xd8\x1e\xd8\x4f\x7f\xfa\x53\x0c\xc3\xe0\xf5\xd7\ +\x5f\x67\xe7\xce\x9d\x29\xea\x6b\xca\x94\x29\xf8\x7c\x3e\x4e\x9f\ +\x3e\xed\x1a\xf7\xbc\xf1\xc6\x1b\x7c\xe3\x1b\xdf\x60\xcd\x9a\x35\ +\xcc\x98\x31\x83\x48\x24\xc2\xc2\x85\x0b\x59\xbf\x7e\x3d\xbb\x76\ +\xed\xb2\xdd\x74\x5d\xd7\x6d\x95\xe6\x46\x10\x15\xb8\x41\xd3\xb4\ +\xea\xbc\xbc\xbc\xda\x44\x47\xa7\x4d\x9b\xc6\xc0\xc0\x00\x3d\x3d\ +\xf1\xdf\xb1\x0d\x87\xc3\x74\x76\x76\x52\x57\x57\x47\x69\x69\x29\ +\x5f\xf8\xc2\x17\x98\x35\x6b\x96\x9d\x62\x07\x58\xb8\x70\x21\x75\ +\x75\x75\x04\x02\x01\x3b\x6f\x23\xa5\xe4\xf9\xe7\x9f\xa7\xb1\xb1\ +\xd1\x2e\x57\x54\x54\x44\x5f\x5f\x1f\xf5\xf5\xf5\xf4\xf6\xf6\x66\ +\x74\x28\x10\x08\x20\xa5\xa4\xbe\xbe\x3e\x05\xf9\xa5\xa5\xa5\x74\ +\x74\x74\xf0\xee\xbb\xef\xda\x2a\x22\x9d\x53\x0f\x1d\x3a\xc4\xbe\ +\x7d\xfb\x28\x2b\x2b\x23\x10\x08\xd0\xd0\xd0\xc0\x63\x8f\x3d\x46\ +\x5f\x5f\x5f\x66\x00\xa6\x28\x34\x36\x36\xd2\xd7\xd7\x47\x55\x55\ +\x15\x67\xcf\x9e\x65\xfb\xf6\xed\x0c\x0c\x0c\xa4\x94\x4d\xb8\xcb\ +\x3b\x76\xec\xa0\xa5\xa5\xc5\xd5\xf9\x79\xe5\x95\x57\x08\x87\xc3\ +\x4c\x98\x30\x81\x68\x34\xca\xaf\x7e\xf5\x2b\xf6\xee\xdd\x6b\x4b\ +\x89\xae\xeb\x29\x52\xaa\x69\x1a\xa5\xa5\xa5\x04\x83\x41\xba\xbb\ +\xbb\x2f\xb6\x05\x3c\xe8\xf7\xfb\xbf\x50\x5c\x5c\xbc\x32\x41\xf1\ +\x2f\x7e\xf1\x8b\x04\x83\xc1\x14\x9f\xdb\x30\x0c\xee\xbe\xfb\x6e\ +\xd6\xaf\x5f\x9f\x75\xd2\xee\x37\xbf\xf9\x0d\x3b\x76\xec\xb0\x3b\ +\x25\xa5\xc4\x30\x0c\x4c\xd3\x4c\x51\x11\xc9\x69\x6c\xd3\x34\x6d\ +\x4e\x4a\xae\xa7\xeb\xba\x1d\x79\x3b\xa5\xc7\x93\xf7\x44\x26\x72\ +\x46\x42\x08\x9b\xdb\xdd\xd2\xed\xb1\x58\xcc\xb6\x7d\x89\x54\x4d\ +\x72\xfb\x96\x65\x11\x8b\xc5\x52\xfa\xe3\x96\x7e\x8f\xc5\x62\x29\ +\xef\x4d\xd8\x1b\x5d\xd7\x6d\x07\x26\x39\xdb\x5d\x53\x53\xc3\xf1\ +\xe3\xc7\x53\xd2\x31\x9e\x6c\x53\xd2\x1e\x8f\x87\x57\x5f\x7d\x95\ +\xfa\xfa\x7a\x36\x6e\xdc\xc8\xf4\xe9\xd3\x1d\x0d\xa1\x65\x59\xb4\ +\xb6\xb6\xf2\xe4\x93\x4f\xd2\xd9\xd9\x99\x51\x26\x91\x3e\x70\xdd\ +\xb0\xa2\x28\x78\xbd\x99\x07\x95\xa5\x23\xd6\x35\xd2\x4d\xaa\x9f\ +\xcd\xc9\x78\x9a\xa6\xa5\x44\xfe\x4e\x99\x06\x9f\xcf\x97\xd5\xae\ +\xe2\x64\x97\x37\x79\xa2\x6a\x28\x27\xf4\x0d\x69\xc6\x50\x08\xc1\ +\xd9\xb3\x67\xf9\xf2\x97\xbf\x4c\x6d\x6d\x2d\xb5\xb5\xb5\x4c\x9a\ +\x34\x89\x8a\x8a\x0a\x42\xa1\x10\xed\xed\xed\x1c\x3b\x76\x8c\x63\ +\xc7\x8e\x39\xba\x99\x83\xcd\xd4\x39\xfd\xbd\xd4\x0c\xa3\x5b\xbb\ +\x43\xbd\x7f\xb9\xe5\x2e\x35\xbb\xe8\x34\x57\x74\xd9\x04\x71\x6b\ +\x28\xc1\xe1\xcd\xcd\xcd\xb6\xe7\x94\xf3\x33\xb6\x3e\x01\x0b\x18\ +\x2e\x85\x8f\x21\x4d\xe1\x66\xbb\x2e\x6b\x8c\x00\x57\x4e\xb8\x21\ +\x67\x7b\xc7\x60\x78\xa5\x68\xc8\x71\xc8\x18\x8c\x2c\x51\xc6\x24\ +\x64\x4c\x42\xc6\x60\x4c\x42\xae\x21\x4f\xcc\x55\x42\xc6\x8d\x1b\ +\xc7\xac\x59\xb3\xc6\x30\x37\x4c\x90\x98\x39\x74\x54\x59\xe9\x01\ +\x8f\x53\xae\x68\x0c\x72\x0b\x96\x65\x11\x8d\x46\x33\x16\x12\x7a\ +\x00\x4b\x88\x8b\xfb\x64\x0d\xc3\x60\xdb\xb6\x6d\x63\x18\x1b\xa5\ +\x58\xc4\x03\xe8\x40\x2c\x5d\x9c\xc6\x60\x94\x54\x19\x10\x16\x42\ +\x0c\x8c\x79\x54\xa3\x0f\x52\xc6\x77\x16\x2f\x05\x26\x6a\x9a\x56\ +\x21\xa5\xf4\x70\x2d\xee\x25\xbe\x76\xc0\x14\x42\xc4\x80\x5e\x45\ +\x51\x3a\x54\x55\x3d\xa7\x69\x5a\x50\xd3\xb4\x88\xc7\xe3\x31\x00\ +\xf9\xff\x01\xfa\x90\x4b\xa0\xc0\x4f\x7e\x35\x00\x00\x00\x00\x49\ +\x45\x4e\x44\xae\x42\x60\x82\ +" + +qt_resource_name = b"\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x0b\ +\x08\x52\xaa\xc7\ +\x00\x66\ +\x00\x69\x00\x67\x00\x75\x00\x72\x00\x65\x00\x38\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x14\ +\x00\x22\x00\x47\ +\x00\x54\ +\x00\x69\x00\x6d\x00\x65\x00\x2d\x00\x46\x00\x6f\x00\x72\x00\x2d\x00\x4c\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x2d\x00\x32\x00\x2e\ +\x00\x6a\x00\x70\x00\x67\ +\x00\x0b\ +\x07\x50\x31\x47\ +\x00\x65\ +\x00\x6c\x00\x6c\x00\x69\x00\x70\x00\x73\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0a\ +\x0b\x53\x47\xc7\ +\x00\x72\ +\x00\x61\x00\x6e\x00\x64\x00\x6f\x00\x6d\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0c\ +\x05\x8f\xe2\xc7\ +\x00\x63\ +\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x00\x28\x58\x27\ +\x00\x74\ +\x00\x69\x00\x6c\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0b\ +\x0a\x12\x5e\xc7\ +\x00\x6b\ +\x00\x69\x00\x6e\x00\x65\x00\x74\x00\x69\x00\x63\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x02\ +\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x36\xe6\ +\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x01\x1d\xd1\ +\x00\x00\x00\x92\x00\x00\x00\x00\x00\x01\x00\x01\x1a\x51\ +\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x01\x00\x00\xb5\xc1\ +\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x01\x00\x01\x5d\xa6\ +\x00\x00\x00\x78\x00\x00\x00\x00\x00\x01\x00\x00\xdf\xd4\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/animation/animatedtiles/images/Time-For-Lunch-2.jpg b/examples/widgets/animation/animatedtiles/images/Time-For-Lunch-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c57a555490fc98478ffabac51a9a5d9df7635829 GIT binary patch literal 32471 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 literal 0 HcmV?d00001 diff --git a/examples/widgets/animation/animatedtiles/images/centered.png b/examples/widgets/animation/animatedtiles/images/centered.png new file mode 100644 index 0000000000000000000000000000000000000000..e416156a0ed1e6931f2b1f1a55cca015def7057f GIT binary patch literal 892 zcmeAS@N?(olHy`uVBq!ia0vp^DIm1LhE&{o zdu@NdjH|@4kMGaCy|s~l_T<(Hx*IHnILq_ah~x=8=$_zhE^?xt`43}=dZ1II#@!1O z%yJF-3bb5YrYMM?;A2af@a75Az0ddNeZT%DK*qAuC}>^8$C@Q?%a+WoeO`H=QIG(r zH1wHkS5{c~Q8?M>$DGs48qWLq`~MGfjN9<_Yw7*G?H}(22L|r@Ic54fpJ2P0$L5~x ziQAO0M*h7{U-Gwa-@-QOSg$%P*SyQs$~Ty&!2W;hxv!E^4_RmKULqOSsItIjzS8f~ zwucXO7*ZpXdOnukoWC~MaMdcM^TnU`90*SAeYmP}{(0;2isxVXXFQkc4v)SOZq&7C zfd{mOSFyYg~YWdF>*Gkvy{X3yN-ukgh?E&%c_NwQL_k2Gu zw5Z9a>H9pL(*_bVnjRi7yq+^DT$7=_UhY$J5%*)=$Z5U7OPhRlq)IaI7k>`sX>(pC zy|^;)p=NC3_nt{#-aHFh+;qcAP33fvmW}>-^PPV``|dK&`}E+8-uHh$rft7}W0A(^ z`unG^Y*JgP!S%@En3T6sc;QUbp9gDQOY{4}*Qd%%zyIO4f3-`$@VWECd%mAJcP?pd zsH2)#X11Y(4{L9x^WnCd@3*JN+%dGNoHF6xQx7@o9>c9(Zn@l#<|HR3Hh#!C@%=8h z-uy5L=3{+w`8b^H95KY@84QJKE4-UtEQxShK9NXx~#scab1}Geu<2{ygkdQ=aIr~4}CV@^m%OI g=0X7c^Z&pVAf#pboFyt=akR{0Lqn(^8f$< literal 0 HcmV?d00001 diff --git a/examples/widgets/animation/animatedtiles/images/ellipse.png b/examples/widgets/animation/animatedtiles/images/ellipse.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3ba881c5bed13a1f509518f2a6759a7fad6951 GIT binary patch literal 10767 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 KM;W4M^ZtKZa6j1q literal 0 HcmV?d00001 diff --git a/examples/widgets/animation/animatedtiles/images/figure8.png b/examples/widgets/animation/animatedtiles/images/figure8.png new file mode 100644 index 0000000000000000000000000000000000000000..6b058041c4bbbc48754c9bc4bb82f93cac4ce7ca GIT binary patch literal 14050 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 a`Tqg>kV~MzPkuE30000-qlv@1E0{=FH5CnOoQO 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 literal 0 HcmV?d00001 diff --git a/examples/widgets/animation/animatedtiles/images/tile.png b/examples/widgets/animation/animatedtiles/images/tile.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f39d8d409c0033bd50b6471138af3c0f1f7c89 GIT binary patch literal 16337 zcmWlg1ymbb6h&!~;suJk1gE&WySr1|p}0dSR@|X@ad-FPRtS)y!JXpn@aM0r5Sf+C z%p>#ezUQ15sj4i4hD?YI0|SF5Co8EAJgWYGM??Vr#$jGo0}t=q)MdnBYNm(}ffop7 z3Nn%~Z~xzZb(bas?;w4Z)pLV^K_C48{w|dfod|gIgS(uP)Q2TlSafbgigE-_7#MOG zIY}{1@8#?++n*pEpZzC+`n_De3_XK|SuLaP3Ou>b&A0RDSXlTmj$ix<9H@x?)FFcL zq2?mFyKB~6F&Ex`T`@x3!?*Yd=0vEA-{AEzu~ucv4E_bEX)W~Z;6C}DMpXT&K^S(+ z%OdM&%;k02iv2`OId%5(wvK(~yU}uGX9n4o(SB+;rV80fT^WU)khYBWJ z<{2n2kEzPis0)mmeBMo*Kv9z(OMmEZu|G*PQ7rCejd2 z2dI^+Ym(dkRDD}pTT??r!}C$^>k*Gtqn>g$Z{Oo1e~V)wDjHhi#4d(7D<5BEi7g_< z=>FC7X#6uGaNwGiS|ueVi}mIohRhPx%R_69Vq#<8VT4nB6g-DnFbNVWv1RAt8rs+( zhqgMG8rPa<(mdUr$sh)wJsq$2_VzkDIK-%z5B3B+0bdFnyyxkPT)wKPmX@}TPW#I( zls;9y$X1>vIbV|j6YgC{4OQqbm1w(AOGlQ|50Eh}n>A@jnzF&#GWj4p}}H@d7M3gdfUpO{n6gVpfx@M5Qzv)2kb znK0A4qLddHftc@v}r;Xm;-NRcl#O9IhFxlUfR-kMZv`AAojpNhm8G(>-$wEHz>R%MK;iqUWpGftHMdoSgHKvjigI3TOzkIi;0XMu3QRfx3sX>d5pm8*ZkvZrZ3;EpplbOxJ96x4&d-xpjf=U_ z>?BFOurf>NOKd4afAel|e61XASs`U+$&)Hdn3}IMo}w}z-E~zfg<#rdH&7Tj2pqH8 z9ZNto_U4%}yf|0PwVvV8Agqb%R7ovV z_9ZmtCesJ>(AP~su{g+fxkIrFW8)0-SC;)az@_nyE~`Y21Mz1E(I2ralCUh*K=<|9 zuLE%ck(S@~AK=8krC_b!U4(p7?O0KJa5;s(DhKZNvAA6Ad{iYm5*`d8Czr$OXC1r? zC;%1J<6g!cy^`=bhu^I~XLar8=20X#^#){?7~IDCxIaZKRg3(IU%gaV>D^|NoS{YZ z_g|-tGcVxncQYygS#{NA6&9ZDd?*bJes|`1+PgW~CP%b>6iehGc3b$-BV*w}m$&OJ&jvE^}MA;(0jAv(_w3F;^E?9Pf`d)-%5jK|vA^b4op$hCxbq6Bv6%WD$o@XWr#2f@`N*W{7NsjN3x z-zhZ7c;u=U{Rq26a1?2%AYZ>|LL-**8ZdSt>}*z$ifuFxtdV`vsM8AK7cJsGSbXCY2V@F(W9 zV0$rzLn72=Iv$4{QNn*+LJj*;DyLh5$Lv9gT^>mZf3?N*jybvj5e!U{ssyZZ?@8$4 zWy8Wd6|qWR-leE-JqVj(n;j6kO-$g+Q**RSf1e>h}{$wzMU-n&R*hOqR$ z%5>dL*Sa=beKd4c!H9+#aZ%N37V)k*N+M)c*SR0g*uQ^}c_Rxv$|AGychBaObIG10 zXy!vHN

xUdsGJBJwu8zN1n5LYQ`@I8FhqTec#4J+k*14AA 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

$X42+zdA=Ial;=4HI+cL1w?xFy?oa28Z) z*Dugzde6$r`t7JAWx~?8Oout$2a>fmc(Fag=Xc5^;B`9aVZ?0MCMuj)s$EGD`fJWE zu>`nAHGmPFwjrUXj#fbVLFCl7Nr*dT)%a&>DmN=PcWqU{zoOz%DAVy{t01_MBO|7~ zqN1mHvc!MUISYiOK28@^0F-BO;XK;7?Ld)k9`mz|3OeMD8ZW}w@Ul5Osr9=VkM4DC zHS8^3pleD3n{oUZlN8hALs~bg{WGnUz=Hx~x zk+s=Cw`yEzHOZa?6{+QIhew4*W2P)U_Y9DnIumXu!)@<$tEC<#;`>@nhM^K$dG!Q2 z9p`yz&-CQMS@P3fY%FMt{ijc#Le(VIuSa7Ci+bMoDE})fs#)$WXmJD%;3m^HQy*kD zSf<2W>CtSkKwhsUIZHwUzRD&?od0+8_^qPCRsdpQqfYIKeeRB>BlXB26fBH7K$kU% zYu~KDRYY2B^bUkvUg-&iGJufD*_1R4JKX7oz0b*QQ)ptJ8K9oFq1+o8MK$984n|eK zWYU~?3J{Qz#<^uU%%VE#LGh?&oz`a|a*j9zjC2)%urPENV11U`9ZVKpPTWF2kAtOB zkVICIZJ4=eGPFy0Z|12^of8@bgp3uP`%QEll+{lz52hlvk z$CZ%DjM4s}hRMl4aX^p?Z2OT#D3@drh7rc8q$PUeRi)8Gt)N6^UG4)fRpwoavRI1^ z6IpY_C;ADA$@a*hSHY}^+9DGJ&T&>W|H>@#%bMt9IY=()N-+Mf(#>2sU&%*w)*7Wo zvq?-JdKUxp?FpQIR&m7q$_m2df}Be{@1q$(N^Vxk@RshlnvAAghEL1{-3A?`Qfh&7 z|5#ss#OmMvWH^!bvDn{6)eJ{WuInxMV1WS_DkfX?xMJ+bjqtDd zHKcPSMGOODB4M7e>u3XfH9fdZoXI=B`hjftV~(-k5+ree6%<3YCU_+lJ`44Mpq*`v z9(>%K?O%^69O>^NOBnqT8NB*Dx)ucP6?k0N%UxJvE0Kf2uMF1i^3%9mZgLbQsyW&}Ywx){T`5ZU?} z@{t(+h7YqirlFuY8>ihyI0<^(y5tb?Y1B2)@OT*Yv;JDWy}yW9n^c%E5xbBe6FIgb z?pGpP)i%P{d|osyW9<_S{8q9Gm+zk8_Q|EAiYQ^2UU|`!oJV%1YBo+=Ew!?zpDyZg zEcEnP2@`046bhhi#^3NdLi?Hn?yO=|H8~S4Exx39*rTyD$ZdtPwspiH^}~Sg)I#NZ zesO4sgyL|kvcbRyxgorlG}XbA7B6>5f+NfEiB0saD7pTfa&6qtupeLBVE+k)FoF zjnjD|NQoNd1cfO|OP(6m(K{}zMVZ*kksu>`DHeM3^)sG?ogtEm*>GoY+AU%4L+r<2 zM}#d9X`P#%I?|4JwrYSq^IJzHFgRmOE%4=mj244ijd-&Iv!ceZn{oSxYyO`z|0@?^ z*XxBDhk%TmAza2Fe;msl2OBgDwD# zHMa|~gfh8QD%j-JSup!ShZEw18-G|e#T}V_+93~V>UpEV+trOT-aVUoMUQisz0G7Y zYO--MH3eVEKL7lxx-o%jVsfv6ZZ9K;LbAsa%9QQ2*=){P*vVeUR5{V_5-h5>E%n4A z8}ltp4g0#-H_S8kdf7rogfKhYF;QNLj#u| zSKKu%C5{N{CnmhOTs>< z5)rFXBmNPlLzUvWXUa8^vBHyO{cpmhUsonIlCK{B1=6O;QzaJ+tPZ`kHYfxwI3evHKQ%{0O>3-IQX4>F;Y*9h@wx!f|`K{-0y|JIwVejf;?Bc=&7Z1-5Q$qV;C3+84&{JJUE~FE%!#@0)YS_ys zx4zB#)eCl9nUhv|8O;tfMAtu^uO4U}p-#X!16paq44>@2)4;%xN&TM%2>s&WF$e57 z!?Uv*FM5bMIVdmC4>q~PmgoRGdI&?V_r>d~uA%}?3?t06tg^!Hy}E`wr&RAPF+3t% zi(@oMPTRHJaH-|w@APC(c17&*=ZuT+U|IMwqnwS)-HFNi`udaH{bXFB26If?r0L)ZbU9^$K@Oz$9aT+2f}j6=@HTJ9zE81lw^Lb#JO}iP zS%mTq?Wl5EQ8k58bKbSP5zm+f`|a)6*gGEd(K8R#P;w8g**Lk`zZAtsiQK4D*?fg6 zii#-~l(u`^_!;v*p0OR0i>i~|J6wpur+}6Q@O~!^xvi@{kc5A9M>{UBB>$XjQ%KZU z;FYd%;_2sP^Yv>lp7ak#?x6~CVj7!Wo|*#LocV=HNk-|~TgqBnLYGW(8ONr9&$n|< zRzp28C)}!CsIe@lx5s$;#3S`5nAEu@#PR$kr`hBY%$rS8X zC13aJ&S@sQqI^`scEQjHdVTB(0CC4sMWhAv))^i^dpKWz163bt*JK480J_`}xgi z81}i6NO(Bj=q}4pUuvuFRSKM{-hBBQGUK?yu3&*b@5+deu^r;*xfglyS)TltY6FWkId2ySP|c~09? z$(w8E!d_q&JZ9Yc;#N-l??=hL{(6)SJnT`ywC-?h^)4zt@&y%n2ZNu`pWoe`+^Yrd zrKzxU_r$Vx&r_W|kOpF4prm)Yk!}Az&!OXT%g%q+&9nBKDt?t4ez$-|wi&4q)R%7J z9R*lw*A9d)JSOW@B#(b%r{`IC4i&sYNXALwmxp2>e-bywn=toQy)bUN_g+Z6%j z#c^;5Bb7((o7~8HZU6HvV##hPLu0HGh(6Bal~n%h+|b}P85ZB4;0fI>C4F(}@jXnY zGbJ|n$x*`X`R94&6Pfs)wuyk*!McoHa>DWEX0E!6Fr30A1*-_Xc?A(Z;9J}}$T{T+ zDI%9}A*;Sz5rfXgHdnXtybDp}5=o+W-75(Mm#>0VTBJ^Co>RXJS6R)~&$+lW_nGui zDdby0nMEVv_AUWaZzRQ~Z2KV?y+bb6xI{*tPDgP|R6++84%u|;lgt6OZ|9XPD6fHKGJ^b3(ew z8+W|Ovx5Kg!`;Qn5UpJDb*6)2t@E7h!($lu^1i#be_#3Ko%L~Te!*79!j#j(4PdWQ zA7P!uDLF2R&a*U_)?(1EDyoR&>^`-{MW;+}F!_Z${hlz{@ydO`?f%$_#7sSqb^itAi}-X&88 zQLJ&PXtkcMjW4wPQierjis<$gqw>OMz8A8)Zp_}-;;3J(%@e`GAlP|pT~69w?>PE@1b>=8 zgv!{DNg<)Wr|lc{;(H>*MaR1CW(%ttAGgh#PAba%t|&I~eNk~livdTWq+zko`mEbW zTe)MglA^p8gP-0?jyf_q_wZU*I8Vgvr{3_Xc3nEvvKz&6K5T?lozwZz^1(*H^Y|ddBVTpn`Vaz=>tE~kYkxZJMEd?M^~Mt6!v}zW4%R!; zERD9y12=*{0FGp>$c=|n=MDGuHeq35;fulTUY7G7pm6~ou5MkE&!6tb0FfocfD5!M-_@y)x}C1@Sy@@N0RvK5SqXTgr)@9j%DBp|x6gX$B!YuL zY%QJHsKB^ZqguP&`+|~IIU8nCy>&&YrssNAK}Tp-h@`0$1^nmF@znlRz$vr>>U4u- zkk-u4%d7jxf_=$2&e7iSbiOAU6xq*;S}|vruU>u~yJ_IDSUMGLf z&S+r5zyoLv2=MVY{+4TiNqN6+loimeT3_PkU1`THaK>6Sj!jP|q>focbyt*CcdbK8 z{SI1NT09+q=#gx@;pzO~wOuAe(uuADL;MFR)i|fpf)JRo1$v^18I@4p_K#$(KTjMn z5j5ss3MpS~$vM-HNp;Gpc17d3Qy%;{FzsQ~y2l%*877~38Su1Lg=egZEd?Z>B;QlC zHdJFYh}>6Hm_b|Mv=FYUfezmMbfe$$=Q#Hm@gy z)6v<%0VMklOH*mC>7qNNxu~4#ual#Lm*Y-6Iy(BWTs8(Si7OP=#!_}(DJgC~V2Kb* zR4!={2tw*9LD<=lX1qg!4byBU$(L9Y6Th2z8tsc=wEYIm<&AFzbcY=sQ#&3EW8rdL zW=Z_~;>n2B0_LvmE8J3Q(u}Fdfy7DeH6i&7gP%j1W_Ato6;weT^WCvB($bU}MPr!_ zeYZzA{aPV5bCS#a;)#geN3+hHgzaNvW0;_Ev*|DYtjMuIN;yS|6!n~%8kE?;d}{b{ z;OjcT#^Z5k=BG_#TG;*QHaD#`g~bHRDq4~AoTvk$3pafL9o7kbw2U7*aK!XR&RwUZ z9WQcBp4Y$u?BE%jB0wLnIP&drY+CZnlc&H-2qpE+rj`4YT`K)U0J)+<`||_?K&5OH zaBCiwF>B0nMq>X)Ms>0BYB#gTt_6A2@WUY!um>W(`QDbA#kmbXEqs&0H^w;UkGHEhP5+`>1N8?dD?KlFR6Bl*p zZQy|rn7VrS;{6CayDA&1#3%8h64Pl#Lz*)<6_f4x89%kPmZNk-OR(Host* zBJbnb^+6WF^U~-3ki0Ku=j6LcSDiw$29eG12< z?L~4)hBvaGT+T-Qd=_dl^v!*V&1>p2{_cs%Y)Bud;SaQbQy(9>4yO7s*)7jN)h9YxnmmfRkizpa1#N zD9_aShVE@wDUV7Z32Sim#D#dGMrN5-QG(w%!lVr#z>E)S(w7iLv}0<-etYDaP9|cE zVPP+app^BXP4iIgaI*GISc|`gd8vNv#l3pS{6=jV8us9;-Q=JFfxA~f8V0`~g>B$| zA*01BK}G73!Qbe@Uazg~`S&4$b$8XMRiTcyWcHuAVT7C+C9-Ds_#XLWN-@ z-odSN#3~z4yfqOu^l;UJd4jh@ikULr=N+wIDtrvrhum5l>ORO`ZekxD5->bqLFEO? ztVb>aYU7;^gk~iPc}|4~ua5G>-Tc$r_oxf#XwIoXz9zn?1K*gCU9i-r84seyqVamg zvpq>(3@nwtf$}gwr0|6?4E(%Ikgw?%0qMUNYRd5tSYfov;EcsRRCk9OM}FF8QzLfF zqbost!4_Cl(lG35W$7P$4lfl3smT&OqkB1m+Yc2H5xZa{YV=EFOB_E~uXO3QZ*KAEKFsm$Yu+<;;8x$r{Ydm%$h=&tRpU`&n!53gtTmi;%kY`-o%2H>*$eFych6Yr+*Q>S z&$+?>WusJ#dCaZhMho4$b(4l(AT11}#4GacrB!T4mmF@~!0Cm`uA#vfJ9 z?)*llN7j5Te-2gc#wn>~$;PY}dZ3nAyn#J3{~Bz@Hi0+w%oaP85SvQlTf(@hpC;9~ z^e=6 zjdCO=t|vyBq|`Fi$H)AIRbFkz7j43qwjJktlM}+<&%sC?G50g3$}c*##u{=*RJX0% z^bs=B`dh^}Bkg%$(CbS}xoY8&l8^}fGkBNE!=R|V`!k?^ayb(5&?CrKiVL8_X8q48 zk(>pIKMsjFm`J^Bj8Vz86J?vK$d%OHjhuaRX*n_!xpV-b$vD!3+G-n!VeQ-w=xXEn z0O@t40jH(k25XnNo+ryg{VSBEy*_Cjl=LUpYMR9+EQWO0|0n1F7mB*JNo*>H_up=# zHSJ*)cZf9O(WjkSkp?gzoc{xp3-Q(eh9HT6=lRE=JNOiw*oy9{DJX(XvjKiMkTzpt zW~MB*01!m*@__2T2JDsVo0>gmRr0Se-VTU00pY91zvQ7CaRR3sQ=O+f?WH|^yR}p5 z3lSMz6bg-V$FI|2wq|;`fGP!G%f;r$pr8A>fpI!2xm%AH?DL`#tjK_xY*s(|{QSQ& z_wDVT?2QVBMbHbC$GlOnAqFT-+`!oq;2*rA{|Q6E1Cn3>aK-;0ni3FDV4?y%SyrWF z=fJD1n7BBzOsjP)0U%5z@lj}SdKv?d#poFQ*^2!O5TY+Grk0kL{(o@*%tw)DRv=Ig z1exkuT87)*>YUewnN50P&Yoi8;~N_q#EC~%{I4cgd`5DPSK5<%pC@`P0!?#g64i3O zw~zqI3I>Qz0m;`ATVg@)1g|%fvtdrf|2F{#BbyWoENG}PY!_FlIH^DX+`7`gvO=s- zsj%X`9ouy|&Zx+GKZr#FvpJP~?l&Xazg~!ow4Xm;frH+BH!h6XWCmf*cwSR0@%_ z-?f_J=Wp{40}Cu#9E0M$e2&h{0kT)l6Mi{9UG0o_s(&_aR5=4e___uL=KlVIO^(p} zbh`o`aI39e8nB9E?rg25SdP%~hD{(Y#8S_=S%0!gfAzXs5k3k7ao5jVOE)dmCUbt$ zm})w7Z7wXel8eCLd12OLRdvCGctlL+#{ORzj*%fGs1%YIRUp}OW}jJtgcXea%MMGb zz2$`FegY(Cky%pzeU{6ZN-afr;kFWai&vRxLS9P?=lwn2zp$Y_U!HNRMwiSI_0h== zOHn8{AJ(Ys5>vt{E=z4qjd8`o(T4zVdj8B@n2XY^a;vnCG_rVdw_vs!L+Z66jfA8m z|60jUE?NEV4rpa?geg8C0_Zd0TDu$JeQq8)CzW-KZL*{!afHaO^*-hvwKwQjqr=Jl zXed-t=J;X2Z)+eUZFe^^lmPgj%*I{1fX#>QzYq`2z@_@cuo*69XTM6gFG;QmkR^Wj zW_(Nx907;MtH@szb7)K8?s#f5Kuf6GylCUNsU7mmGc(eGMOxEbIeQv71zIFhIEWN> z#p?8V@~WPEF>9EZ@XVC6(^BD_sy46YBwAWC9!5V)%Kvr5nYW>??P{>tVMK)HqI49! z>{4u{MWv|QWR?(xQ*bH`kQ}l4_e!h9H7o<&Ea8QC;?%`^b_56~;7L`I-1gFoD`@(U z^nqk{zI#+j*4bPK!q%%Zr*nv(>gtQO1;k#O^UTw z!~&qdxwyImQWRj1xpKV79xd0pw#|vN+amm&ys3 z3g*!v^9uTkygfhCdT;JRx?X-iv0*o=Pzq_)(7q|@pu4m`5YpoIj7e~ukwauF3ZXkEcjSF4$@lACs#k{ddD^uhIfU`eF<3%=~g* zhu|KY2gF6$R;Orl-<+R&9kcCY3@zV<=ehN`O&NOb_dr&eR~x$PsvTQ(70Mmzxr@+f z2xF*e@IULuh#=~72AkMWBE9`ULX!WEWWyQ`6|pTXw%HK{=c|8KiuP|+&8a^xM0wLt z9C1nVwryVTRpU`vT3=lZ8m>ErmUXA#M#-P_PAXsSRX;8xDSS}jE@xt4H^>`oFu(WI zJpW;v;T;tL8k6lI&l|tGJs?Uk|7>9*spHj_@x{~tS6uttEXv~5zJWKWmvRWZpnz-X%h<)na!3<`jrTm?wd^-o60ve=6hqLNe6E&DyJM8$sJZ^ zZk$Z8xZW$oUp&o>v^kK{0!v~{(($-szb;riJs{tNOV!XNTym7DzlSypb2vdbSshW3 z#EjZUzrLksTq>V0aDZouJtDT}V-edq6hDC@Vu`N0f=&Y-8(suoHmNMO!fcdl5|K=! z4Jnd0BMU`#gL8T%Z5becn3XsTDt;{pcC1e0F{e-bC7Kw_l5@bx<-cIPJ8q9ZY=ozAdztDq3e|RpvQ@lN8w)+5Iu%Uq zhBc-LvzAQ}C9*i+Bg7qk850gC+g{uuTkL&s8r9_G;R8SK^2bttkPAI?0Gt8&Zn54R z^V$2KUbJtL2{xCt8R>dI+3CRxs@w8KVd<4<}(}P#cs)wYz?b|8^f^P$mpV1f-vSk%mT=U}%ii(i0c<=Y#wr753ZjY!4 zMG4mcCcgq>Vm-v^_wQE!w5j&dYNu1b!>0pkv_@l^M4TUAJ>uhX!29*q28!Jz=bHyv zOmWNiX`xAQpG%}wfdqjK5*oNJL*%4EP+*|mL?kXyZ^+O!(i-SEC4*)2=>{!u0#-`( zBk)*y24{WphH=O~(-%_DmCfoQ1`}!=&IjPikfiP7@dcj3r%l1P`HBiMs%r9m=b)CO zq_F+V+{THM*O+|v%VD_={*Y$+FKgeylQ7`&{T~?uY$c}Ez3UHobqoX&@=WS03j@#n zg0a3K;`zT97xBBhyN{u*@tR&yy>BOIzE8e-yMG{^emFPMvDyl>Im&LE{qU#*8?R4i z*85XAT{n*+brsx6>;o;Zd_exZ-7rqSdKk#!0(BgShyzIS!(WbNe-XlifRV~r1euB}a=5RZmFTtc$;qQOU znV}iw{Rb2TVQ=>b^0Pops!9K|yV3rrgp3VWR!lmLUd7xfKkoSXIrmha2pCARmuoU$ zJ^S6A?%qP3KT?nd$}p!7w45MLG%H2}GzOgKgMY3>1bQNPzn$MLH9wz%hKAcS&|4k~HxUYcZH9Rtsk&}Z) za0vLC@FY10yy#;VNr3thZ9iW{u-xUt0mQ#&rmk*Q|D4=wXh514=c^6o?3%|fFI|hY z1dQ!z%~<5rmpoQozUXjg#oByN?WAXXvDVTeYHVzreSLY-06w3{eIm%skMp_a$P@oC zGBGic$PpUX1)Xxb950DW?fDvUV%)AufpY9XFonN|43_z?5goVVfuWJ|7T3IRZsPq({*->LI!0qxm?o7h)>G>iI z129fQG1R+_WyHmC*f^HPI|%o}pg$do)opQ*;k6Jkug=f4KSOfV#pm0S4?T93(flcK zqj!_XiVEqXY{r#bVX=DXF`G2~jVS7NrjO8S-&2Ij0?`5e9x>lS_!`AujBq8hr^`u+ zMHu!P*p>~YrPj&iS%0^*9ueS`8*|*|2eRF0>zOCm0|El*Ma;cC|KbF zId*C-DZI4r6fzX8rW;6}wUpH133NVC`~8Yxf>Us|blGcGMlmo%4Bqy;f0+PzwH_#; zPIDenxZ5&n8q-UAWdZ?)eV>C0F$cfYtxRHit_ektC|$$iK&E)1PXl)WdTJ>aOt=sr zp}()K(zvS}E2;XWTu*HDy;nunZoK-v(;_+0$~3URyU9xtt`K2-Y|!;YS*S-sO?|vT zohks9rveUZx+TF!+~EV0}YTiI0gky zeH=|G^NUo$9?X-SBBWn-2UVR)GGq9tMd1k_tNgxM=yVE9bfn>-GbS+!E?ET}SNc1T z6#DO@#5XcG3NWx8FJ`K}F1YEIao*3I(h^Lq4e_*!{BCu6c~=6}mn%ac(X)m}==43a z^1A3;X?zmvY5PZXQ1IQQTBaizFRkmhsiV^;6EgoFdFu}b?0b$?|4#aD|IkSh+?Wv2 zMA6i>@zbY|t91ihnO`XSt#Ht(<> zW*HJt?rH3;WcTR^1zLBa>f_$@mF`~2aKS=j6E_b09CoK1FgV5a)Nk>C>_}v53Z-O3 z_*s$4>+;~y!|je3{M(~j*4m3O1a*M?D-MDikITG&D#=6VqV9^c$%5~nBY#r}XMa~+ zQqe!ftMysB)*7gSa1SAby+(sFf4>S*%uVimd1+s-+R^-J`NT$@^6&UCvXT=aT(HbM zRCJDUCjF$e)$iNdjwtrpsjO=Eq%6;}&n8Fe-96bvOWbYz#ThQJ-X2CyN?Ec-{LAt+e? zgcu{~XQeN*LWrys7-LQZA}#&k-+%L!SN@9nXumKEc<)PJN>n{B>qs|i_(7Hghy(-z zK~|E;QXoT8QjEz!;GSTDDT#-0O&Es=0us@<*^9bRG-{qJ?lo}YIK!}j4!T(kN zp-}XCD8pf-orrWaR_|J=GzE=1T$#<ad+;kD4j@kTO1q=i+fvYh88mY?i!2ff5@wQc$ggYw(@axnZ!FA$jRkMvSq;1yn2<$GRd#j$b?V=*P{UB`CaL{k@f}m9j<^L zD%#5{?AHYhATd|3ub)Y!sD>YPs#UUvM<`(F$KrUR{p%7iEE|h-NVpC(2+b`lC~`Km z=`1e7wBzcYq|pDh0Nte}2yTf4Tp?I0G)=xUJ_M>K+rl@z=$_PZr9~J3{GTQGoeEp3s7XaEUV~~gg;i-NszywmRR7D0kj!WlkpCQ)= zaT(^@l}x~gmFNH{Jda1AnODlK0Wl&iBZ4|hL;{GeiNX2a_bKqX_teMH(1aM!sIM)gHGuPJWcY{DH_|gi_J77rOCMt2tsotRY3Nr#SMV&p2>8M zRo_iMA_j>68)6x;%i{6fe@FCcKQ17vLEySVpbOHqTAfOW?)J!t(qi@4QHq-4)KL{i z|;(&tFehJ@HRHf?5aph_r?lQWuOc6`E_Z0Ihw% ztqQRe)&d?)@7+z+g?Sb5e9@5!w6>$MN>L?LgCpmhv*IS{L%;LeGW{d|PO-~BGle*Y;lZJR4cZ7I$7S421Y)$i-TGa}g+Z}MWdy?b$U1G(3Nj)WxdHkM@3?~|F1w8EiOJ=~iI(00>CziNC2onaQGM?$ z(d`P+IYHQqCXscfxxXI^2mm)91oKS+;37}OGiNvxa9(fMs9ub=20Wj@bKK6q=_X|b z(esg(8^=!&xAc?}k``cZ(g3?n8M{vhbx73@s9dQ;_ah>zB`0m}5nw+44EnBFB&D9UDx>^fBTL6FKtV?3EBMo|I z948-uKQD+=VP$D4tOZdi=KlIo;lL7Na5XYl;kCw_y9)hY+mwzweHjndVKA0yBGkly{wb@bY=UP*^8{|M3Z&tb(L zFFt}{=(7QH4KC1@37i^AVqR>$RwEmS6-E-!WINHEAKtrwFp3G0=F(iL9oBVG&f97 zQ4RY7E0O5-QTF}jG4<$$7piy>kU?{gK1|&9+;$tAcNioA*+liwL9&oq=O6hN9eCtX zdj8x0NUz*e-Qf`)J*H=h4yUendjbHlMFr_A+@9lGm{I z4GipFs|Cnq3kZTGp|-`S1$LZIb!>+0bh=IRf}w+#WpR+i^S+up^4|NDd+s@!xZ(;* zY~9vw&OrUW_lR2&*5E;4FnB5^Q}o(@K0~ule2?NdUD|xjHR{>1&F8A6HG-gxyoTr? zuaO|y-;WD;fKv{FygnG&Ffoo)I8Sl-q0ar>%Vh*Kw0Sc*i2By~=hN^dk#ca%!rrVss6Ya!)=%XzW62&N2-ZK-0VTs9q4YL3Wc@bFnZJ zoSh4_)&g1p%c+pJ#dC9HkB;(zr!I9PV38y6|1ku$i!ZsDb_$oWFFZ^6n}455uN|O? z%P*(Yj-9P;00A5eQz0UG=U;wKA3R8^H8oy)=|z=DX1?$Tj|7}~TeCQB)zOP9vo3(?_&wlgk#O=dhy@y;k6rfL1y^{pl z@lSq|s--e{u1i&<-Scj_g%%!rm=3=F#xj|Mg$n)b>W@?DzORxzevGE}@24%(ljPrX zH@*3_uaj?@dhu;Raa|&@Z>@hClg%x0)dk{GrfXPK1`BlxODYw5B4{fE$B_Q2N8eZ0 zfYyE{fcCRze?-$rkDSW(-E|ke`HgRogiCoKA}_j#u6*br+I!=Tlsj;MhEd^(C%;E8 zKJgT}cC4+uJy`eX$YYPw$hRIQTL_f`7vo82+Ukl6dTfW8;GY56O90))5Nd(65NXZ? zljom@T40G{NKbXd1l<~qI!#{lTQvXr>r}+PVW_zmkf9J%uD|f1uaODumY;owCX;c> z-gE=~&y!D4?x6?h#2@`3Ww3RQWzyuAEA;l6S<1%;$Y=5qAuR-zCFXFylPIv_99fpi z1Z%c{rU1AWnB;Bou3bB6{`g6XgP_3PfZGrXluKZ)>A?)eA)t>x_yE29mAgr{9+Sg$ z=5M{3j=?n=R!kA_4MX*(_`a1O$`?rj++-pZEq(=p)Ps2EoQ1Q2W*`(2Z7mkyR$FR; zVURq6s63usPxS6PVV-^aO*-}2>*x?n-!m=pEsKO5Z#yvb&>x8n5ZTdY2rV495?h5N ztxl9%PfGytEuR`0Nq@gkDE111Q7sS^LyI~Sa4Ia%hpEu;!i~zjkev+?h3HIDALbHb0$jSJ!^FVeK4|I3piX06pLhY zea@+nx*Hg_eq{A=w+1`sy4|3+*7bbXwH=RhAbb(%;Q}4!0*gVA(*meeYhfx}w~kD` zw_l;j&g<2L&}rhG&-ZYHXs)*#AP%qqjI~&R0K5~Z1<;3^7t{iE)cS6zL>6y~T(_HW zFRdHKDuU_OcsKF>gCZheTOjNqfXEF_<6y*>(vL}Lb1kqQ8=eNc0k*4RVWGG7nQ;GZ z5RH4eL67G_T$RKtP2zv%WiN?V~m&29TbAfz5OoiAN7*g`0))ol$xMw!#T@Xxe?rADpoOKWc z+!6$!iy@~_pn9dk7NEb>I}mn_HR;~jpf~YuVd|`fjhuoHIKD5)H0SsUZW67h0CX)- zXsrb*RjNA_++_Mf?@nFRB=2~k3+7*e5JTIwdjDKYM>ZOj*XFk09Jbu?`SP) zb7Tz)5fWpq37JYsE0Zy7q}2gzi8JHl=J52CnaO5tGStSx=H*(JMR7$AB;#>4jwiT} zhoobew`2UAdIkbv0jOuvsWk0BcT(xCXDPhWt`J$E0umJzLm8C{ckIBn__zwEi?v$l zXLvTStU$zKLM9SY4h%?{&LCKh$;5_p%+&ZsW8LJWJvcgMK~*L%&NP%mlF5q(Odgvi z8Gt5?dm(ASV&ERG8R}ULedLFEepiD9q~<1)nHX;O+77Rt3i*#DNg*<>5>x*#m=vCVt4&3uLWetTcdGvK1L~`S=^uF%Edli&x;anfwkk4Cpy^ z_{oAd0DPBY5%>HIlMIE}{9QD@*4ZrF#n$U?%#^7$oCtMif*OjU5hlu4&RGQkT`gh55UCYX$l;uxb37in3%c#JJT5o`klqQ{zqdOi_ag(j>u-I}^t zFg(}x4Zf}yi)G6bnKf*Oqgp^)K&5#uupR;BI4v_mu!@t{V&`lXfDWAYB_^F>PeE03y1*`*TRhL-V2!K!3~GacfdQ546U{i(*&3x{!#Q$z#PxjHhXq8b5C&gmmZ>I+AXxP{}#{qpJ4(pgwA{9@5I8jVEU_fxiM#_^4~3Xq0T z3rwTr8VUtq38I`s(RJwQ)3Z;$ozEZZR{%N_H0r)z@}!Jwa@vGj%~eAaU8xmjXPq3# zEgd`NEFL}TS7&E=m$^(XAwbJTU` zFkfd^W$4TW)PMp|4Cnh7fD6=dKzeL^adAfy00niC?;bh7f*3%1V=*B3AMJd=bPJd_RX0d>%W|G85_`$M9PawD)=(J*%t0 z9s*dk7I1*ldyU3Ro0pdMzVzUOi-~&GJT;%M;eb?voNYE5$ry@X{uXa!fI9zKtuAGu z=KD((XsqaY3yU~rKZ(uNg6ozvp+1N)1R&1_-1`2%&O!hth32>sQrdp=j2fnmgmVi`}Gv-lVt}j2`4D8h5wV$o4A$Ed(1~8W;tJffyjp yMq6vt7=19rK6n8b=qx7QgrRGMUoK+(xBmsl{pZ^wT@yF}0000`GXcf{Mdh$XkB(U=UB$mQJDxrZ~@^C5~{#u zKZNXoU~Ym7kX#Ug1Ka@D(gM0NE(~o*=xRu4N=WG05LeSARD4Ki*^n@W5(rIy44L0M z0mK8IKgap^zli2V%p?S^1132`1u_wU#DJR2L(f2H8Srd^kOEhd;HFTr4_rtDQxi_m z!F4Ss6hPMv10)JTjS8-Z2t&f4HV2giGocI#ZiE1YIvz*z|4x9XF7Cvcw=9LQ$a5nH z$GIrhr{|%V;$-bU(}Vz5Go+(J$bxeY18#5<)=)Az0SyvT&%^<`Cd?mhfINwyCum?! zkQ@XL0X)QHnAq8IDZ1Ik5S0<&g=Q zfgB(T$=HNSl5rlF3MF1foI>$z^7ceA-7K%xBg3-KEkL2$6?j3h*mWKk50%11S;oWS zgG4@z0^=Hl#k_I?KorgBHi6?!h()d!k}Vt`8*q?!n4v?U(gFxUFpfQ=7lumtB*>33 zDaK2XCljUzOq{n03E(7KzSNap1C;-)LJy1e1F2DzG()$ES2zSL7zGbko=lNzD5xgI zMU5RUPaeoGli?Jg5@paqwh%=!Hf*A~eh`>-4sM+jVE0X$5X;ZJGYJAVL?r}3$wW1| z5U_}`V!!j@1O$E#ej`T?Q*SYHA8vSv8SU?l}8 zAKOkLoMZ|;!X|DDWLV%poXBU0yj0|UwR9D5pwcVBf;hKelN0~j3oK&7;pR43g5x-T zh{z8EvNcp#;3#MII>7dV3a$4bQQ46VCB{Uwg~&f^KIggle|sV z+42(1tRz_Jb$}zg7a9YCEqSzGm>1ySYrsgSGaMKJHhHtP$(u8O)N=bW0>BFZ=x*ZN{IT!GdSe+CWnhGR)?3ouOlALf5c9LcjAeGwz@~Q0GodRe6otVvT)dx#lVvLfpniqzIe>r{l^y?rrBkXP^lycQCQb)@`bBD zQ;2~zB*Yy+Y7h=bOto_B~pBME{Cuzw(7Z4Wliid#h z?vt832((`Xob^+najEm=W_&BK{&GNz+2cJ8q}@--*L-HTHj0D>o5Z0iBY<-ySkgT8 zz~cLWwkz^pkk|((M}Slhu>Dpzto>S`;k3_C`%A*H5)`6h0&oigP+~xM7cjC7NDfZ& zEex3ZU7+zyAUkM3c>hy$&pQ)_QRgZ59cLmeam<{=1uB;V?D{{x7uawc0Nn}+>jkOf zN?^vt&ZXJH9}(f-0+CMpL3iH;T)5R9*Ggd%Yy*=0&e&%*3S+$lfX}uk_~3mvE!^_< zPo>gTfWTGfk{EFUCk(uzxZr}^Q23#(C7USE1(TQFl1MS}|JM&Hy?-%Sd z=76_1_pW|x!@ggT2&`xhDBSaNE|A7Lfe&xA`YfxS542t9jN|@a!eP^|E zY60ovByI~JK7$7&GZ{mH`_9+j?7HSq|JXyt-v$YR7T}B@0~b9{?Ft|`GfzG}fSm26 zny`M1TeQ zwaa(+6p_{KN13>?ik5FIojMilQgd8UOZ8n_gPFbm?o)yuA6L5C41R$k~_t z!zxD-teFi|wZLKS8sOyb0o%WC_l<4eW~5nl^3PdsS66>oZyPgMWME=c73R6iwq427Zun&i{62cmKIB zy|L|a$_K+Z{G=^_mMOCNaS9xk8Gyrl&CZ8bhu|=8OId>D$vb18gJEi&_pRDg?E)sb zT8BrXY-~KasJCxuku1x%sjAB7%$ak0P5@okSvs2yfNaN(9fJ!NEcm-MZ|{7%Wm@fX zC!H`;4syfV!RZImM}a^y9F{x`=K@@Y!(6q_HNTO9!{jO)m$AwFMzTJ)|kM z91zDLf|=k(s_^XYsn`;p22IxxkB>t{-^1l|4a`~O!-=!n;H_<@Jbgi5`<3?$0}u~C z{4gV1EJQAAUrl(!b?%jFtopAF30DQ%Y70bvQ zJS4#D0CJ_u)!0}gWfiU8&@~RAhL9#`1Tnk6|8Vq#rt61}jI3Gl^dJuZ`zYx>cAEWz+#AY%T9V zjnBZ;Y7KLnGFUbvg(-d=rVS_D*l@5KFLh19$Ac2W;V>fOWG-NAMG(n}I~T4t8OC^ttyA*UmoFH}IEFyveZtr1Ld-bW6%$uAr}~#^tV_f`O=n zfiaF~JdIQ;gG4fofHa7cT6J8zRKmO&KwGnf_SPVpzw{y`Gf}!o^PM+?nVTlM0w_r^ zHHD|v>$vehQWzQGg~^@)t8WY7yeqy1;c0?M4ny1b5|Bv}VHpg_k>}Qyl8|Vo0QSl& zuiOv_1ZGF0(N!Q`#R`gx5F|7Zyo6+P5Q+2Wfi(nC`!1kO$Rs> zje`lUCmR+oe7dJjC-Pf9`sgFiz`($%0D6n<2k3-2LA6Av9Zn+fdKaQ6H6wi9tjL}3 z_BFHK-rk$dSR!wAnl=RB+k`d(yl%O7*@-pxwqN<^bv093+EgVir85b)rlws=aulQey_sR~0 zKkslD`o}#H$%wxy^LPXSx6C|DfN=pu6=L5o)T0SDdMN7N_~D@6HS5Ht)l|`%_wL<$ zH-KLq>yD7HykOjF8wm{p2pkEIhXJgRW%-|cKHv6KDz(t#^}gJ3`ql5xKIQDM2`&Z< zLsR0BaQEIF8+UK~&6A_5n)X3geTESX2;EyHxK>4>6J$cKmzmz+mW=5 zcbd!XHM8yeUAyWqltY&qPx>24DM?q8GG%XBqn2k=?lCRx z860B^-ObA$-P!dzB!&k&red1_9cqxcOzFg>-aahYTTiYZn|0x`S2%_aH{RGi$(DwI1=E-ioWtNkH|R*^hME!Ew(Y2fw|ec~y`RkM?CjhQ z;7o%4j{w#!21|{DMPrbA6YMOy^Le-1-R$*xRce{b<#LmO$Qto@e7~Y7YXSUP2+>_Y zyqpJ=2nmf4At;0zx_&(^Prq~M z&>{b(O`FE)+Ft?4651wwr#8V0lZ4%bPC|;1u_i??N4j(f9RGbXA>i?NzD*vmoWfw` zsi&U0o|2=RT$53PEgs self.orig.size().width(): + self.p = self.orig.scaled(rect.size().toSize()) + else: + self.p = QtGui.QPixmap(self.orig) + + +def createStates(objects, selectedRect, parent): + for obj in objects: + state = QtCore.QState(parent) + state.assignProperty(obj, 'geometry', selectedRect) + parent.addTransition(obj.clicked, state) + + +def createAnimations(objects, machine): + for obj in objects: + animation = QtCore.QPropertyAnimation(obj, b'geometry', obj) + machine.addDefaultAnimation(animation) + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + + p1 = Pixmap(QtGui.QPixmap(':/digikam.png')) + p2 = Pixmap(QtGui.QPixmap(':/akregator.png')) + p3 = Pixmap(QtGui.QPixmap(':/accessories-dictionary.png')) + p4 = Pixmap(QtGui.QPixmap(':/k3b.png')) + + p1.setGeometry(QtCore.QRectF(0.0, 0.0, 64.0, 64.0)) + p2.setGeometry(QtCore.QRectF(236.0, 0.0, 64.0, 64.0)) + p3.setGeometry(QtCore.QRectF(236.0, 236.0, 64.0, 64.0)) + p4.setGeometry(QtCore.QRectF(0.0, 236.0, 64.0, 64.0)) + + scene = QtWidgets.QGraphicsScene(0, 0, 300, 300) + scene.setBackgroundBrush(QtCore.Qt.white) + scene.addItem(p1) + scene.addItem(p2) + scene.addItem(p3) + scene.addItem(p4) + + window = QtWidgets.QGraphicsView(scene) + window.setFrameStyle(0) + window.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) + window.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + window.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + machine = QtCore.QStateMachine() + machine.setGlobalRestorePolicy(QtCore.QStateMachine.RestoreProperties) + + group = QtCore.QState(machine) + selectedRect = QtCore.QRect(86, 86, 128, 128) + + idleState = QtCore.QState(group) + group.setInitialState(idleState) + + objects = [p1, p2, p3, p4] + createStates(objects, selectedRect, group) + createAnimations(objects, machine) + + machine.setInitialState(group) + machine.start() + + window.resize(300, 300) + window.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/animation/appchooser/appchooser.qrc b/examples/widgets/animation/appchooser/appchooser.qrc new file mode 100644 index 0000000..28a3e1c --- /dev/null +++ b/examples/widgets/animation/appchooser/appchooser.qrc @@ -0,0 +1,8 @@ + + + accessories-dictionary.png + akregator.png + digikam.png + k3b.png + + diff --git a/examples/widgets/animation/appchooser/appchooser_rc.py b/examples/widgets/animation/appchooser/appchooser_rc.py new file mode 100644 index 0000000..c8fa08a --- /dev/null +++ b/examples/widgets/animation/appchooser/appchooser_rc.py @@ -0,0 +1,1464 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: to lokakuuta 14 15:41:37 2010 +# by: The Resource Compiler for PySide (Qt v4.7.0) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x0d\x06\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\ +\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x06\xec\x00\x00\x06\xec\ +\x01\x1e\x75\x38\x35\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\ +\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x0c\x83\x49\x44\ +\x41\x54\x78\xda\xed\x9b\x5b\x68\x55\xd9\x19\xc7\xd7\x49\x4e\xa2\ +\x26\x26\x1a\xe3\x35\x31\x5e\xc6\x54\xad\x97\x4a\x95\x29\x38\x14\ +\xc4\x22\xb6\xcc\x73\x9f\x2a\xf4\x61\x5e\x7c\x10\xc4\xc2\x0c\x08\ +\x7d\x28\xf8\x54\x4a\x1f\x15\xa4\x4f\xf6\x51\x0a\x52\x90\x4e\x07\ +\x41\x94\xfa\xe0\xfd\xd6\xaa\x03\x5e\xc6\xfb\x35\x51\x63\x2e\x46\ +\xcd\xc5\x7e\xbf\x0d\xbf\x61\xcf\x31\x92\x8c\x1c\x83\xc1\x2c\x58\ +\xec\xbd\xd7\x59\x7b\xad\xef\xfb\x7f\xf7\xb5\x93\xc2\xeb\xd7\xaf\ +\xd3\xc7\xdc\x2a\xa2\x8f\x03\x30\x0e\xc0\x38\x00\xe3\x00\x8c\x03\ +\x30\x0e\xc0\x47\xda\x8a\x1f\x1a\x41\xc7\x8e\x1d\xdb\x53\x5d\x5d\ +\xfd\xb3\x69\xd3\xa6\x7d\xe1\x98\xad\xad\xad\xed\x8f\x95\x95\x95\ +\xf3\x57\xaf\x5e\xfd\x8b\x72\xed\xf7\x41\x24\x42\xdb\xb6\x6d\x5b\ +\x50\x2c\x16\xff\x10\xb7\x9f\xcd\x9e\x3d\xbb\x65\xf2\xe4\xc9\x93\ +\x18\x87\x36\xaf\xb6\x81\x81\x81\xc1\x4b\x97\x2e\xdd\x1a\x1c\x1c\ +\xbc\xd4\xd1\xd1\xf1\xb7\xbd\x7b\xf7\x1e\x1a\xd3\x00\x6c\xd9\xb2\ +\xe5\xb3\xfa\xfa\xfa\xc3\x21\xf5\xaa\x21\x09\x2c\x14\xd2\xdb\xc6\ +\x03\x84\x74\xfd\xfa\xf5\x43\x15\x15\x15\xbf\xd9\xb3\x67\xcf\xab\ +\xb1\x64\x02\x32\xff\xcb\x9a\x9a\x9a\x43\x21\x84\xe2\xcb\x97\x2f\ +\x87\x63\x78\xc8\xb1\x96\x96\x96\xf5\xd7\xae\x5d\xfb\x26\x1e\x7f\ +\x35\x96\x9c\xa0\x0c\xfc\xb3\xbf\xbf\x3f\x13\x42\x00\x91\xaa\xaa\ +\xaa\x52\x98\x02\x3d\xbb\xb7\x3b\x6e\x9f\x38\x71\x62\xc6\x3c\xa0\ +\xd1\x9b\x9a\x9a\xd6\x6f\xd8\xb0\x61\xdd\x98\xd2\x80\xcd\x9b\x37\ +\xff\x39\x98\x69\xec\xeb\xeb\x4b\xcf\x9e\x3d\x4b\x0f\x1e\x3c\x40\ +\xa5\x47\x0a\x5c\x0a\x27\x99\x1a\x1b\x1b\x93\xad\xae\xae\xee\xaf\ +\x71\xf9\x74\xac\x00\x00\xb3\x5f\x04\xf3\x48\x10\xef\x9e\x16\x2d\ +\x5a\x94\xc2\xf9\xa5\xe7\xcf\x9f\x23\x65\xe7\xa4\xce\xce\xce\xd4\ +\xd0\xd0\x90\x31\xfc\xf4\xe9\xd3\x34\x69\xd2\xa4\x74\xfa\xf4\xe9\ +\xf4\xe4\xc9\x93\x44\x0b\xff\x91\x68\x53\xa6\x4c\xf9\xf9\xc6\x8d\ +\x1b\x8b\x07\x0e\x1c\xe8\xff\xe0\x01\xd8\xb4\x69\x53\x75\xb4\xe9\ +\x71\x0b\xc3\x78\xf6\xb4\x6a\xd5\xaa\x34\x61\xc2\x84\x74\xe3\xc6\ +\x8d\x34\x6b\xd6\xac\x74\xea\xd4\xa9\xd4\xda\xda\x9a\xe6\xcf\x9f\ +\x8f\x9d\xc3\x60\xba\x7a\xf5\x6a\x5a\xb8\x70\x61\x3a\x7b\xf6\x6c\ +\xf6\x4e\x77\x77\xb7\xe6\x00\x68\x95\x2f\x5e\xbc\xd8\x14\x4b\xfe\ +\xfd\x83\x88\x02\xdb\xb7\x6f\x6f\x7c\xf4\xe8\xd1\xba\x20\xbc\x3f\ +\x88\x9d\x17\xd2\x5b\x31\x73\xe6\xcc\xdf\xde\xb9\x73\xa7\x2b\x88\ +\x9e\x1c\x63\xd3\x83\xe0\x84\x16\x00\x42\xc4\xf7\x77\xd1\xa2\x4c\ +\x33\x02\xcc\x0c\x84\x5b\xb7\x6e\xed\x0b\x8d\xd9\x4f\x38\x8d\x7e\ +\x34\xd6\xfc\xf7\x89\x13\x27\x1e\xbc\x17\x00\x7e\x1d\x6d\xc5\x8a\ +\x15\x95\xc1\x54\x6d\x30\xd3\x7a\xe6\xcc\x99\xdf\xaf\x59\xb3\xa6\ +\x39\x18\x7d\x10\xd2\x68\xba\x70\xe1\x42\xed\xb2\x65\xcb\xd2\xdd\ +\xbb\x77\xd3\xd4\xa9\x53\x53\x57\x57\x57\x7a\xfc\xf8\x71\x46\x6c\ +\x84\xad\xc4\xbe\xd8\x3e\x12\x0c\xa0\x90\xa8\x9e\x7e\xc4\x0d\x4d\ +\x61\x1d\x1c\x28\x66\xc3\xfd\xe5\xcb\x97\xf1\x07\x98\x13\xfb\xbc\ +\x0e\xad\xba\x1c\x4e\xf4\x1f\x3d\x3d\x3d\xff\xda\xbf\x7f\xff\x89\ +\x98\x33\x38\x62\x00\x76\xec\xd8\xb1\xf4\xe6\xcd\x9b\x5f\xc5\x6d\ +\xcb\xe2\xc5\x8b\x6f\xd6\xd6\xd6\xd6\x04\xa1\x8b\x7a\x7b\x7b\x5b\ +\xcf\x9f\x3f\xdf\xc8\x26\xa8\x24\x92\x84\x51\x18\xc0\x63\xf3\x8c\ +\x6d\xbf\x7a\xf5\xca\xae\x27\x77\x69\xa4\xce\x38\x44\xd2\x99\xcf\ +\x18\x4c\x0c\x1b\x0e\x01\x2d\x68\x51\x0b\x78\x3f\x63\xd8\xe7\x90\ +\x7a\x8a\xe8\x82\xf9\x00\x3e\x7e\x22\xdb\x3b\xe8\xee\x6c\x6f\x6f\ +\xff\x26\xf6\xfd\x32\xe6\xdc\x1e\x12\x80\xdd\xbb\x77\xa3\x8b\xbf\ +\x7b\xf8\xf0\xe1\x5f\x8e\x1f\x3f\x3e\x3b\xd4\x88\x97\x0d\x37\x10\ +\x08\xe1\x79\x06\x91\x1e\x1b\xdb\xdf\x78\x46\x42\x74\x1b\x6b\xe0\ +\xd0\x64\x9e\x3d\x60\x8c\x7b\xae\xf9\x6e\xf3\x3d\xaf\xac\xeb\x95\ +\x0e\x00\x79\xe7\x19\x1a\x09\x08\x00\xc5\xfa\x38\x4f\xfc\x48\xe6\ +\x67\x42\x1b\xae\x1f\x3d\x7a\xf4\x93\x37\x00\xd8\xb5\x6b\x57\x4d\ +\xd8\xd0\xd7\xa1\xaa\xeb\x62\x92\x4c\xb2\x10\x1d\xc6\xd8\x14\xbb\ +\x85\x38\x09\x18\x16\x00\x36\x86\x39\x1b\xce\x0b\x2d\x81\x30\xc6\ +\xed\x23\x01\x80\x2e\x93\x79\x10\x58\xcb\x88\xe0\xef\x87\x0f\x1f\ +\x66\x1f\x98\x56\x08\xdc\xd3\xfb\xc3\x24\xeb\x6f\xdf\xbe\xdd\x5b\ +\xf4\x85\x9d\x3b\x77\xb6\x44\x38\xfa\x36\x54\xb9\x96\xd0\x93\x27\ +\x02\x64\x91\x18\xe3\x61\xf3\x69\xee\xdc\xb9\x29\x5e\x06\x08\x36\ +\x96\x30\x89\xcb\xe6\x00\x60\xe4\xea\x3f\x20\xd6\xe6\xfa\x00\x25\ +\x08\x6a\x80\xfb\x39\xce\x9a\x39\x40\x87\xd4\x00\x3b\xcc\xf1\x1e\ +\xfe\x06\x8d\x20\x7a\x60\x56\x08\x12\x20\x42\xab\x11\x24\xeb\x17\ +\xc3\x17\xfd\x09\x5f\x9d\x01\xb0\x6f\xdf\xbe\xc6\x90\xca\xb5\x28\ +\x32\xaa\x64\x3a\xcf\x3c\x49\xca\xca\x95\x2b\x13\xed\xc8\x91\x23\ +\x20\x9d\x81\x10\x7e\x00\xe9\xe6\x01\xc8\x88\x8e\x82\x86\x8d\x01\ +\x8d\x35\xb2\x4d\x6d\x6a\x14\x8d\xb9\x30\xc7\x1e\xd3\xa7\x4f\xc7\ +\x79\xf1\x9b\x1a\x02\xe1\x43\x81\x24\x20\xa5\x20\xc8\x38\xe0\x2b\ +\x79\xd6\xc0\x0c\xe8\xd6\x0f\xfc\x86\xe3\xfd\x2a\x9e\xf7\x64\x00\ +\xdc\xbb\x77\xef\x3f\x11\x77\xab\x54\x53\x99\xd7\xfe\xc9\xb8\x02\ +\x31\x9c\x48\x46\xa4\xf3\x24\x16\xfb\x82\x10\xcd\x23\x22\x00\x8c\ +\xf2\x2c\x00\xae\x9b\xad\x41\x13\x00\x12\x20\xd6\x46\xa3\xc8\x01\ +\xf2\x4e\x50\xa6\x35\x3d\x9b\x29\x71\xe9\x6f\xac\x8d\x83\xc4\xe1\ +\x42\x07\xeb\xd2\xb6\x6e\xdd\x9a\xdd\x9f\x3b\x77\x0e\x67\x4d\xa4\ +\x40\x0b\x2b\x02\x88\x4f\x8b\x21\xfd\xda\x50\x8d\x9f\xe6\xbd\xac\ +\xc4\xa9\x8a\x84\x29\x50\x43\xa2\x80\x81\x84\x4f\x9e\x3c\xc9\x34\ +\xc6\xd9\x54\x00\x40\x18\x86\x95\x8e\x25\xec\x0f\x34\x80\x36\x6f\ +\xde\x3c\x9c\x2a\x5a\x04\x31\xec\x07\xb8\x86\x34\x9e\x5d\x03\x1a\ +\x74\xb6\xec\x87\x76\x71\xcd\xfb\x09\xe6\xb0\xaf\xeb\x93\x1f\x08\ +\x36\x91\x20\xfb\x7d\xce\x9c\x39\x19\x38\x57\xae\x5c\x31\x5a\x4d\ +\x2b\xc6\x4b\xad\x11\x8f\x0b\xbc\xa8\x63\x73\x41\x91\x9e\x31\x63\ +\x46\xb6\xb0\xa9\xea\xc1\x83\x07\x9d\x87\x8a\xb1\xd1\x1b\x6a\xc9\ +\x06\xda\xbf\x44\x0a\xc4\xf2\xe5\xcb\x49\x65\x31\x27\x18\x05\x54\ +\xcc\x0a\xa2\x19\xd7\x9e\x95\x24\xb4\x20\x41\x34\x0d\x3a\x98\x03\ +\xb3\xa8\x3c\x57\x23\x13\x82\x50\x20\x8c\xab\x45\xf8\x37\xae\xbc\ +\x57\xea\x5c\x0b\xc5\xd8\xa0\x10\x8d\x7c\x9b\x8d\xf3\x5e\x7f\x48\ +\xc6\x68\x10\xc6\x6f\x3c\x03\x00\x0b\x43\x30\x44\xd2\x35\x0d\x43\ +\x9f\xef\x31\x8e\x2f\x21\xa5\x25\x09\x82\x69\xf6\x05\x60\xd6\x40\ +\xc3\xb8\xc2\xb4\x0e\xcf\x7d\xd5\x4a\xf6\x31\x17\xc0\xff\xb0\x26\ +\x6b\x01\x12\x7b\xd2\xa0\x01\x3e\xbc\xd7\x17\xd9\xf3\x0d\x0d\xe0\ +\x65\x88\xd0\x86\xe9\x82\x90\x0f\x7f\x02\x61\x1e\xfe\x86\x5d\x6a\ +\x7f\x02\xa0\x59\xd8\xc8\xed\x2f\x5e\xbc\x08\x68\x48\x1d\x89\x03\ +\x00\x3e\x08\x69\xb2\x2f\x84\xeb\x00\xe9\x32\x8b\xf4\x55\x5b\xe6\ +\x40\x07\x6b\xe0\xf0\x58\x83\x88\xc3\x3c\x0b\x26\x53\xeb\x61\x53\ +\xec\xa2\x2a\xf4\xae\x4d\x2f\x9d\x6b\x10\x85\xa4\x4a\xd3\x56\x9c\ +\x1c\x0c\x10\x26\x91\x0c\x73\xd0\x06\x00\x83\x01\x1c\x14\x6b\xe1\ +\xb1\xd1\x1e\xf3\x07\x01\x61\x5d\x68\x45\x73\xb8\x47\x0b\x99\x03\ +\xe3\x80\x00\xf3\xbc\x8b\x43\x25\x04\x1a\xc5\xb8\xda\x87\x01\xa0\ +\x4c\x0d\xc2\x60\xc0\x06\x51\x48\x18\x55\x85\x50\x7d\x47\x14\x46\ +\x5c\x61\x1c\x8d\xc1\x31\xf2\x1e\x0c\xb3\x06\x0c\x41\x1b\x0c\xd2\ +\x01\x4d\xed\x83\x31\xd6\xa5\x94\xc6\x79\x5a\x1a\xb3\x47\x36\x7e\ +\xff\xfe\x7d\x9c\xec\xb0\xf5\x05\x3e\x20\x95\xbb\x69\x32\x46\x15\ +\x98\x8a\x63\x2b\x33\x31\x4d\x0b\x46\xa8\xe0\x32\x82\x97\x2c\x59\ +\x42\xb1\xc4\x19\x5f\x69\x46\x88\xb4\x61\x1e\xa6\x59\x03\x86\x01\ +\x8e\xe8\x01\xd3\x5c\x71\xd0\xac\xc9\x95\x75\x19\xc3\x54\x4c\xb3\ +\x05\xe2\xfd\x6b\x80\x9b\xda\xb0\x47\xc2\x28\x04\x40\xac\x21\x92\ +\x2b\xb6\x8f\x39\x00\x00\xe6\x01\xe1\xe6\x0d\xe6\x21\x26\x2f\xfa\ +\x03\x7d\x92\x76\x0e\x38\x80\x82\xc6\xa8\x25\x8c\x13\xfa\x58\x1f\ +\xad\x1a\xd6\x07\x94\xb3\x11\x26\x21\x02\x50\xb5\x41\xd4\xbf\x94\ +\x79\x54\x17\x82\x91\x26\x7e\x40\x4d\xe4\x1d\x23\x8a\x79\x88\xe9\ +\x30\x73\x60\xd4\xb9\xcc\x43\x5b\xe4\x81\x39\x00\x05\x20\x79\xc7\ +\x6d\x1b\x15\x0d\x30\x03\x63\x63\x25\x44\x83\x59\x01\x80\x09\xa4\ +\x4d\xb9\x8a\xad\x32\x66\x4a\x8c\x64\x35\x15\xcf\x0e\x64\xce\x08\ +\x01\xc8\x98\x0b\x8e\xd5\x04\x88\xf7\xd4\x06\x43\x26\x9a\x85\x1f\ +\x61\x9d\xd1\xd2\x00\xe3\x36\x1d\x86\x70\x4a\x84\xaf\x7c\xa6\x08\ +\xf1\x84\x5d\x3d\x39\x0c\xe8\xd4\xb0\x61\xa3\x00\xa0\x31\x6e\x78\ +\x86\x79\xde\xb1\xe0\xa1\x13\x05\x04\x3e\x9f\x00\xc1\xb4\x7b\x51\ +\x67\x70\xff\x56\x27\x58\x56\x0d\x90\x51\x9a\xea\x8e\x9a\xe7\x55\ +\xd2\x3a\x9d\x28\xc0\xb8\x67\x06\x8c\x31\x17\xa6\xb8\x1a\xfb\xcd\ +\xf4\x90\x3c\xcf\xfa\x05\x8b\x1f\x9a\xd9\xa2\x69\x35\x60\xd0\x0c\ +\x9b\x68\x1c\xfb\x8e\xaa\x06\x68\xab\x4a\xd1\x31\x98\x70\x1e\xfb\ +\x43\x38\x04\xeb\xe1\x71\x60\xf3\x66\x2c\x49\x4d\xd3\x3e\x49\x03\ +\x13\x42\xdd\xbb\x6f\xa3\x29\x30\x6c\x8d\x60\xde\x6f\xea\xab\x84\ +\x87\xca\x1e\xc9\x31\x00\xd5\x7c\xe2\xfd\xfa\x80\x3c\x21\x82\x9b\ +\xaf\xda\x54\x55\x88\xb7\xb4\x05\x00\x41\x50\x0b\xe6\xcf\x5c\x9a\ +\xfa\x6b\x1f\xa7\xe6\xa6\x96\x54\xdd\x96\x85\x4c\xed\x1d\x46\x74\ +\xb6\xac\xc7\x3b\xae\x6f\x04\x92\x27\xfd\x0a\xa6\x88\x29\x00\x40\ +\x59\x35\x60\xd8\x23\x2b\x01\xb0\xa9\x01\xee\x2b\xd1\x8c\xe5\x35\ +\xa1\x50\xf7\x32\x2d\x58\xb4\x34\x15\xeb\xfa\x52\xb1\xba\x39\x75\ +\x90\x2a\xc7\x3b\x66\x99\x9e\x31\xa2\x19\xac\xaf\x29\x5b\xd0\xe5\ +\xa3\x10\xe1\xd0\xcc\xb3\xb4\x55\x94\xd3\x07\xc8\xa8\x04\x20\x95\ +\x52\x60\xf2\x67\x0e\xf9\x7b\x9f\x3d\x23\x7c\xde\xdf\x1e\xcc\x3e\ +\x4a\xb5\x55\xf5\xa9\x3e\xca\xd8\x89\x75\x93\x53\xfd\xec\xc8\x19\ +\x1a\xa6\x38\xcf\xf7\x5c\xc3\xee\xfe\x76\x35\x0d\xb0\xde\x04\xa0\ +\xdc\x3e\x20\x4f\x40\xbe\xa2\xf3\xde\x4c\xd0\xef\x7f\x30\xeb\x5c\ +\xfb\xf7\x31\xbf\xa7\x37\x75\x84\xea\x77\xb5\xb7\xa5\xee\xb6\xf6\ +\xd4\x1b\x6a\x3c\x21\xbe\x9c\x0f\xe6\x34\x8c\xf5\x2c\x99\x05\x54\ +\xe9\x6b\x86\x66\x93\xac\x5b\xda\x8a\x12\x53\x6e\x00\x8c\xdd\x3a\ +\x2d\x9a\xa1\xd1\x33\x02\x55\x9f\x79\x3a\x35\xed\x1b\x6f\x5e\xc5\ +\x07\x8f\xfa\xba\xd4\xf7\xbc\x27\x3d\x8d\x32\xb9\xb3\xa7\x3b\xf5\ +\x15\x99\xfb\x7d\xc5\x0a\x00\xbc\x83\xa7\x57\xd2\xa5\x25\x38\x7b\ +\x50\x83\x70\x1d\x1d\x00\x24\x40\x00\x2c\xb9\x75\x4a\x82\xc2\xbd\ +\x85\x92\xcc\x6b\xe3\xcc\xc9\xca\xe3\xca\x42\x7a\x45\x32\x55\x5d\ +\x91\xba\xba\x3b\x23\xb7\x4e\xa9\xab\xb3\xcb\x13\x6b\x22\x06\x60\ +\x19\xf7\x65\xdc\xc6\x98\xc5\xd2\x90\xad\xa8\x57\x2e\x57\xf3\x24\ +\x57\x42\xcc\xe3\x21\x42\x7f\x03\xb1\x66\x7e\x48\x0e\xdb\xa4\x9b\ +\xfe\xe6\x6d\x96\x10\x56\x37\xb3\x21\x4d\xa8\x9c\x98\xba\x7a\xbb\ +\xd2\xa3\x2b\x0f\x01\x0c\x2d\x61\x4d\xee\xcd\x1a\x3d\x87\x54\xab\ +\xbc\x1f\xdd\x54\x18\x06\xf2\x84\xc0\x84\xa0\xd0\x4c\x7a\x90\x9a\ +\x80\x51\x10\x91\x12\x23\xfd\x7c\xf1\x83\x60\x3c\x95\xce\x67\x82\ +\xda\x33\x8c\x73\x82\xb4\x60\xc1\x02\xcf\x27\x05\xd8\xc4\x89\x44\ +\x69\x74\x8b\x21\x9d\x9a\xcd\xb3\x3a\x80\x80\x60\x6d\x14\xd5\x67\ +\x0c\x66\x01\x8a\xda\x3d\x3e\x5b\x65\xc0\x18\xeb\xad\x05\xb4\x65\ +\x41\xf0\x9c\x32\x3e\xdb\x71\x40\x2b\xd0\xcc\xc9\x3b\x42\xb5\x84\ +\x3d\x47\x4f\x03\x4c\x47\x05\x82\x67\x08\xf1\x68\x8b\x31\x99\xf6\ +\xd0\xd3\x12\x1a\x10\x50\x79\x6b\x04\xab\x41\xdf\xf1\xec\x12\x9a\ +\xa9\x20\x39\x12\xf3\x5c\xd0\x33\x4a\x80\xf5\xd3\x1d\xe6\x05\xf3\ +\xa3\x75\x20\x62\xfd\xaf\xf3\xd3\x0c\x60\xca\x6a\x4d\x02\x21\x1a\ +\x40\xf2\x1f\x47\x19\x83\x21\x8b\x17\xa4\xed\x3c\xc3\x27\x5f\x77\ +\x00\x94\x4a\x12\x06\xd9\x03\xe6\x35\x09\xfd\x0f\x42\xe0\x58\x8c\ +\xdf\x46\xd7\x07\x58\xcf\xeb\x84\x54\x77\x2b\x40\x98\x32\x13\xb4\ +\x74\x36\x1c\xf2\x9b\x45\x8b\x15\x9d\x1f\x52\x61\x44\x8f\x1e\x5f\ +\xaa\xd1\x0e\x4f\x95\x00\x8f\xf7\x33\xa0\x3c\x29\x6a\x6e\x6e\x36\ +\xed\x1d\x55\x1f\x20\xc3\x1e\x45\xeb\x18\x01\x85\x7c\xdc\x83\x4e\ +\xf3\x7a\x01\x31\xf4\xe1\x20\x61\x54\xd3\x00\x00\xde\xa1\xf6\x67\ +\x1d\xd7\xd4\x21\x5a\x4c\xb1\x27\x63\x74\xd6\xc0\xf9\x01\xfa\x88\ +\x00\xe0\x0b\x71\xb9\x01\xc0\xa1\x69\xbf\x66\x6c\x48\x0b\xf5\xd5\ +\x57\xc0\xb8\xde\xde\x52\xd7\x44\x4a\xa6\x4a\x73\x0b\x55\xde\x22\ +\x27\x9f\x0c\x79\x62\x84\xf4\x31\xbb\x11\x29\x6c\x31\x50\xae\x61\ +\xd1\x72\x54\x7f\x36\x88\xb3\x04\x2e\x05\x06\x10\x20\x54\xe7\x05\ +\x13\xac\x81\xdd\x23\x71\xa5\x6a\x6d\x60\x46\x49\xb7\xb6\x27\xf9\ +\xf1\x54\x29\xff\x75\x8a\x77\xf9\xd6\xc0\xbc\xb5\x6b\xd7\x72\xec\ +\xa6\x06\xe9\x24\xf9\x2e\x21\xdd\x00\xde\x87\x06\x34\xf0\xf0\x0e\ +\xcd\x8c\xee\x6d\x5a\x80\x2d\x2a\x39\xbb\xc7\xde\x10\xe7\x87\x0d\ +\x08\xf1\x4b\x8e\xa7\xba\x1e\x8c\x70\xc6\x0f\x53\x00\xc5\xf1\x39\ +\x6b\xc8\x98\xef\x20\x6d\x00\x63\x3d\x2b\x4e\x2a\x40\xd6\xf6\x3d\ +\x40\xf5\xbc\x01\xba\xa0\x01\x20\x6f\x15\xf9\xdb\x5b\xff\x14\xed\ +\xc7\xb6\x7c\xf5\xa5\xbd\xea\xfd\xd9\xc0\xdf\x4a\x9b\x4e\x12\x8f\ +\x0e\x51\x48\x15\xa2\xf3\x69\x33\x34\xd1\x79\x9f\x64\xc7\x46\xe6\ +\x67\x68\x33\x29\xe2\x7d\x4b\x5d\x01\xf8\xee\xbb\xef\x86\x22\x59\ +\x00\xd1\xd0\xb3\x11\x49\xfe\x5b\x8c\x81\x9b\x64\x5a\x6c\xca\x22\ +\xf9\xd8\x9b\xaf\xeb\xed\x2c\x6e\x4d\x0f\x61\x7e\xa8\x90\x28\x8f\ +\xb8\xec\x6e\xea\xb5\xa4\x79\x86\xef\x91\xd8\x70\x69\xb9\x66\x82\ +\xcf\xf0\x0b\xb6\xe7\x83\x23\x31\x57\xfd\xc7\x85\xf8\xfb\x86\x2f\ +\x63\xa8\xad\x18\x52\xea\x08\x6f\x79\x28\x08\x5f\xef\x5f\x58\x04\ +\x83\x32\xe2\x55\xe2\x65\x12\x2f\x3f\x10\x44\x7c\x1b\x8f\xcf\xf2\ +\x69\xae\xcd\xf8\x3e\x82\x26\x38\x95\x01\xe8\xd4\x58\x63\x7a\xd0\ +\x50\x13\x9d\xbf\x57\x80\x3e\xf6\x1b\x88\xf1\xbe\xb8\xbc\x88\xa9\ +\x8f\xc3\x41\x3e\x09\xa0\x7e\x6c\x02\x83\xd0\x3a\xc2\x9c\x2e\x45\ +\x38\xfe\x3a\xd6\xbb\xc0\x29\x7e\x21\xfe\xf6\x7e\x52\x2c\xbc\x3a\ +\x54\xf6\xf3\x40\x77\x59\xfc\xf0\x13\xfe\xcc\x8d\xf9\x79\xc9\x4b\ +\x67\x34\xa0\xbe\x1d\xb6\x74\x24\x88\xf8\x5f\xbc\xdb\x99\xde\x4f\ +\x73\xc3\x42\xb4\xd7\x65\xc8\x4f\x90\x0e\xb4\x12\x1b\xef\x45\x7f\ +\x12\x7f\x71\xfa\x3a\x0b\x81\xf1\xf7\x7d\xd3\x02\xed\x96\x60\x66\ +\x6e\x3c\x83\x7e\x7d\x00\x41\xfd\xca\xef\x48\xb2\x10\x9d\x7b\xfa\ +\x60\xdc\xb3\x50\x7b\xcc\xb9\x16\xd7\xa7\x69\x6c\x34\x40\xec\x23\ +\x68\x04\xe3\x7d\x0e\x9a\x03\x00\x42\x15\x99\x6c\xf4\x9a\xe8\x18\ +\xa2\xfa\xeb\xb5\x40\x67\x21\x54\x07\x7f\x44\x07\xc5\x34\x86\xdb\ +\xf8\xbf\xce\xa6\x34\xfe\x5f\x63\xe3\x00\x8c\x03\xf0\x11\xb7\xff\ +\x03\x7f\x19\x0a\xe4\xd7\x62\x63\xda\x00\x00\x00\x00\x49\x45\x4e\ +\x44\xae\x42\x60\x82\ +\x00\x00\x15\x14\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\ +\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x06\xec\x00\x00\x06\xec\ +\x01\x1e\x75\x38\x35\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\ +\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x14\x91\x49\x44\ +\x41\x54\x78\xda\xe5\x5b\x79\x8c\x64\xc5\x7d\xfe\xbd\xa3\x8f\xe9\ +\xee\x39\x76\xa6\x97\xdd\xb9\x96\x3d\x66\x61\xef\x05\x61\x6c\xae\ +\xa0\x38\xb6\x20\x4e\x2c\x22\x27\x32\x09\x92\x0f\x14\x20\xc6\x81\ +\x18\x84\x92\x08\x59\x8a\x30\x7f\x18\x04\x09\xe0\xf8\x08\x47\x24\ +\xa2\x24\x76\x14\x9b\x80\xf3\x4f\x0e\x27\x86\x80\xc3\x61\x60\x31\ +\xe6\xb0\x21\xbb\xec\xb2\xf7\xce\xf4\x4c\xcf\xf4\xdd\xfd\xae\xaa\ +\x7c\xbf\x7a\x5d\xf3\xfa\x98\x49\xef\xb4\x90\x65\x29\x65\x7d\x54\ +\xbd\x7a\x47\xd7\xf7\xbb\xab\x66\x6d\x48\x29\xe9\xff\x73\xb3\xe9\ +\x97\xb8\xbd\x74\xed\xb5\x03\x9e\xeb\x66\x09\xf0\x84\x18\x23\xe9\ +\x67\xa5\x2f\xb3\x42\x88\xac\x14\x18\x63\x4e\x04\x22\x2d\xfd\xe0\ +\xdf\x7f\xf3\x95\x57\xfe\x8a\xfa\x68\xbf\x30\x0b\x78\xef\x4b\x5f\ +\x4a\x54\x3d\x2f\xeb\x48\x37\x6b\xf8\x41\x96\x04\x88\x04\x04\x02\ +\x41\x56\x92\xc8\x52\x20\x43\x52\x52\x8c\xc9\x40\xe0\x9e\x60\x82\ +\x29\x89\x87\x70\x4d\x18\x87\x08\x02\x12\xd1\xb8\xd9\x8b\xc6\x46\ +\x21\x86\x2e\x3a\x70\xc0\xfb\x85\x58\xc0\xcf\xef\xbe\x3b\x6e\xd5\ +\x6a\x59\xd7\xf3\xc6\x4c\xc3\xc8\x0a\x62\x12\x06\x2f\x18\x3d\x8d\ +\x19\x22\xc8\x0a\x49\x59\x92\x4c\x42\x86\x7d\x20\xd3\x20\x47\x06\ +\x6e\xa0\x03\xd0\xf3\x80\x00\x26\x21\x19\x12\x64\x00\xdc\x23\xd9\ +\x84\x7a\xae\x1d\xb4\x0c\xd2\x73\xc9\x63\x52\xee\xbc\x88\xe8\xcd\ +\x0f\x44\x00\xef\xdc\x79\xe7\xed\xe5\xb8\xbd\x29\x79\xe2\xe4\x88\ +\xb1\x6e\x24\x26\x0d\xca\x1a\x64\x8c\x11\x48\x12\x49\x80\x06\x7d\ +\xe2\x26\xa1\x38\xee\x42\x32\x7a\x61\x22\xec\x43\xed\xf0\x98\xfb\ +\xe6\x75\x04\xb9\x32\xa4\x86\x88\xde\xd7\x08\xaf\x43\x88\xf6\xdf\ +\x34\xa4\x7f\x01\x7d\x10\x02\x78\xec\xc2\x0b\xbf\x72\xc5\x95\x97\ +\xdf\xe5\x98\x43\x94\x1a\x18\xa0\x40\x88\x90\xaa\xc1\xff\x55\xff\ +\xa1\x50\xf4\x7a\x28\xc3\x61\xa4\x9d\x88\x74\x34\x56\xef\x5a\xa9\ +\x34\x05\x8d\x3a\x5c\x99\xcd\xda\x65\x33\x50\x30\x63\x36\xe6\x1b\ +\xe1\xb5\xd0\xc4\xf1\x46\x32\x41\xa4\x85\x55\xa9\xb4\x0b\xa3\xc3\ +\x2a\x84\x30\x2e\x30\x0c\xe3\xef\x25\x5a\x5f\x02\x30\xd0\xee\x98\ +\x9e\x4e\xce\x0c\x0f\xdf\x5e\x2f\x95\xa9\x54\x2c\x53\x76\x7c\x9c\ +\xfc\x72\x89\xc8\x34\x69\xb5\x66\x26\x12\x24\xea\xf5\x48\x10\xe1\ +\xe2\x99\x8c\xd6\x54\x48\xcc\x60\x01\x0c\xa0\xc7\x3b\x98\x0b\x6a\ +\xfc\xb2\xa5\xe6\xfc\x5a\x83\xac\xc1\x21\xf4\x35\xb2\x86\x06\xc9\ +\xcd\xcd\x13\xa5\x53\xca\xf7\x85\x03\xc1\x60\x5e\x13\xee\xd6\xbe\ +\xb6\x00\xb1\xbf\xa9\xa1\xb5\x0b\x80\xc9\xf3\x72\x3c\xa2\x6d\x41\ +\x10\x0c\xd7\xf0\x83\x85\xa5\x22\xc5\x76\xee\xa4\x5a\x6e\x8e\xcc\ +\x64\x52\x4b\x49\x6b\x5d\x75\xf1\x6c\x96\xbc\x42\x81\x12\x1b\x36\ +\x52\x50\xad\x84\x6b\xf1\x3d\x32\x62\x31\xe2\x4f\x06\x9e\x47\xd6\ +\x40\x4a\x09\xa8\x31\x3f\xaf\x34\xeb\xd7\x41\x36\x99\xc4\x3b\x1b\ +\xc8\xc9\xe5\x48\xb2\x65\xc0\xd2\xbc\x7a\x95\xc8\x32\xc9\xaf\xd6\ +\xc8\x84\x50\x02\xd7\xa3\x00\xe4\xf9\x5d\xe9\xba\x91\xf6\x05\xf7\ +\x1d\xae\x80\x1e\x2a\xda\xcb\x2b\xec\xd7\x05\x0c\x20\x31\x57\xaf\ +\xaf\x9f\x49\xa5\xa8\x86\x1f\x75\xaa\x55\xb2\x86\x47\x28\x60\xe9\ +\xc7\xe2\x78\xa2\xfd\xeb\x12\x30\x2c\x1b\x8b\x74\x48\xb8\x0e\x34\ +\x08\xcd\x2d\x2c\x28\x72\x36\xb4\xe9\x2c\x2e\xc2\xb4\xe3\xea\x9e\ +\xa4\xd0\xff\xb5\x00\xdd\xa5\x25\x08\x6e\x89\x04\x5c\x21\x58\x2a\ +\x34\x4d\xbe\x33\x3e\x04\xaa\x27\xdb\xc2\x37\xbc\xe8\x9e\xd4\x71\ +\xa5\x45\x18\x00\xfe\xb3\xfe\x9b\xdb\xb7\x8f\x43\xf0\xa7\xd6\xe2\ +\x06\x76\x53\xfb\x16\x90\x2e\x04\xc1\x04\x07\xb0\x06\xfc\x31\x33\ +\x98\x21\x7b\xdd\x08\x49\x98\xa7\x1c\x0c\x34\xe9\xb6\xe6\x2c\xcc\ +\x2b\xc2\x0d\x68\xd2\x4a\x24\x95\x86\xdc\x52\x99\x4d\x5b\x49\xab\ +\x7e\xfa\x54\x4b\x1c\x90\x54\x3b\x71\x42\xbb\x84\x26\xda\x41\x5e\ +\x32\xda\xef\x35\x7c\xfd\x8d\x2e\x17\x00\xda\x2c\x63\x90\x88\x03\ +\xe1\xa9\x7e\x2c\xc0\x04\x52\xae\x54\x45\x06\x39\x8e\x4b\xe7\x6c\ +\x9f\x21\xd7\x07\x71\x19\xe6\xdb\x95\x4c\xc0\x87\x95\xe8\x00\x28\ +\x3c\x8f\x47\xa1\x99\x57\xca\xad\x01\x31\x22\x2d\x23\x82\x3a\x4b\ +\x44\x02\x88\xae\x89\xc1\xf9\xde\xf7\x29\xf0\xb9\xf7\xd4\xd8\xc7\ +\x98\x94\xba\x2c\x32\x01\xb8\x5a\x28\x6c\xdc\x93\x58\x0b\xc8\xec\ +\xc3\xdd\x7f\xe9\x57\x00\x31\x43\xca\x14\x2f\xd2\x81\xcf\x4d\xcf\ +\x6c\xa3\xea\x7c\x8e\xcc\x78\x3c\x5c\x54\x77\xd3\xe4\xa3\x6c\xa0\ +\x53\x22\xe9\x34\x18\x09\x81\x05\x20\x02\xc1\x71\x21\x04\x2f\x1a\ +\x40\xaf\x82\xac\x61\x59\x80\x0d\x60\x8c\xdf\x34\x6c\x9b\x6c\xcc\ +\xc7\x00\xa4\x60\xf0\xe4\x9e\xf8\x79\x95\x31\x82\x3a\xe0\x38\xe1\ +\x98\xdd\x8c\xb3\x89\x94\xfb\x74\x20\xec\x27\x0d\x9a\xf0\xd1\x18\ +\x2f\xd6\xf3\x7c\x15\x7c\x2a\xe5\x1a\x0d\x20\x1a\x3b\xda\x02\xba\ +\x9a\x04\x09\x90\x0a\x3c\x28\xc1\x67\x2b\x08\xb5\x16\x04\x4c\x46\ +\x91\xb0\x00\xee\xc9\x8e\x21\x63\x58\xb8\xb6\xe0\xd6\x36\x00\xc2\ +\x26\x60\x19\xca\xc7\x03\xfc\x9e\xd0\x84\x18\xd0\xa8\xaf\x2d\xa4\ +\x37\x94\x0b\x58\x3a\x10\xf6\x15\x04\x81\x79\xdf\x2f\xa2\x57\x64\ +\x3c\x04\xb1\x52\xb5\x4e\x83\x08\x84\x8d\xc5\x3c\xd5\x0a\x45\x12\ +\x2c\xa5\x78\x8c\x4d\x4f\x59\x86\x65\xa1\xcf\xc4\xc8\x42\xb0\x8b\ +\xc7\x98\x5c\x1c\x81\x2f\xd4\xa2\x6c\x92\x11\x8a\x90\x43\x3e\x7a\ +\x59\x87\x90\x9a\xe6\xee\xb7\xb9\x40\x38\xa6\x68\xdc\x01\xd9\x1b\ +\x52\x32\x89\xed\x9f\xdb\xb0\x21\x89\xb0\x56\x93\x68\x6b\x2e\x84\ +\xde\xaf\xd7\x17\xf1\x96\xd2\x60\xad\x5c\xa6\x42\x2e\x4f\xe7\x5e\ +\x3c\x4d\xf2\xd4\x29\x1a\xdb\xb5\x8b\xcd\x34\x24\xa5\xc9\xb9\x0e\ +\x08\x42\x73\x24\x55\x40\xf6\xa8\xc5\x0d\x80\xee\x9e\xc9\x74\x8e\ +\x55\xdf\x4d\x3e\x22\x06\x88\xff\x1b\x62\x19\xb1\xcb\xe2\xf1\xdd\ +\x7f\x47\xf4\x6a\x3f\x2e\x20\xab\x41\xe0\xba\x42\xa0\x0b\xd2\xb5\ +\x5a\x9d\x4a\x88\xee\xf6\xc8\x88\xd2\x62\xf5\xd8\x51\x8a\x9a\xe2\ +\xd4\x51\x15\x46\xe4\x69\x45\x41\x88\x96\xba\xbe\x83\xb0\x5c\x51\ +\x00\x6d\xe4\x68\x19\xb2\x1b\x32\x42\xd2\x90\xfb\xa9\x0f\x01\x48\ +\x40\x00\x7e\x2d\x08\x0a\x83\x42\xa4\x51\x0b\xf0\x02\xb8\x16\x50\ +\x5a\x36\x06\x92\xd4\x91\x06\xda\x3b\x29\xb5\x30\x34\xe9\xae\x80\ +\xa8\x02\x2c\x4a\xda\x0a\xfc\x7b\xdd\xd8\xd8\xea\xfb\x85\x8e\x31\ +\x45\xa6\xde\x91\x39\xba\x61\x0a\xc4\x81\x35\x34\xb3\x85\x8d\x0f\ +\x78\x2c\x00\x5d\x0b\xf0\x22\x25\x07\x31\x21\x9b\x5b\xd2\x20\x44\ +\xc0\x10\xcb\x73\x22\xda\x96\x02\x3c\x0e\xaf\x45\x73\x4e\x00\x7c\ +\x5d\x02\xf9\xe9\xcf\x5f\x4f\x57\x3d\xf1\x4f\x3d\x82\x5a\x07\xf9\ +\x88\xb4\x86\x16\x52\x17\x8c\x30\x15\x9a\x6b\xb2\x00\xad\x7d\xc0\ +\xad\x0a\xb1\x14\xd6\x02\x1e\x4d\xef\xdd\x4d\xd5\x85\x79\x15\xf0\ +\x7c\xd1\x91\x09\xb4\xb6\xa3\xb1\x4a\x51\x25\x54\x83\x23\xe7\x9c\ +\xb3\xe2\x26\xe9\x43\xbf\xf3\xdb\x34\x75\xc3\x0d\x61\x4e\xe7\x32\ +\xd9\x30\x75\x31\x13\x91\x6d\x89\x0d\xb4\x7a\xb1\xc4\x58\xd9\x02\ +\xa4\x54\x99\xa0\x1f\x0b\xf0\x00\xa7\xe4\xfb\x0b\x4a\x00\xae\x4b\ +\xe3\x5b\x36\x43\x00\x79\xb2\x32\x19\x12\x5a\xbb\x80\x50\x50\x1a\ +\x6e\x5a\x44\xd8\xdb\xdb\x66\xe8\x23\x7f\xf9\x75\xf2\x38\x40\x0a\ +\xfd\x7c\x84\xc3\xdf\xfd\x2e\xcd\x7e\xff\x29\x32\x6d\x9b\x2b\x47\ +\x6d\x29\xcd\xf7\x57\x44\x37\xf9\xd5\xef\xeb\xc0\x34\x7a\xcf\xc6\ +\x8d\x53\x06\xda\x59\x09\x40\xa2\xb5\xb8\x80\x5b\xf4\xfd\xbc\x4e\ +\x85\x41\xb1\x48\x65\x04\xc2\xf8\xc8\x3a\x6d\xd2\x0a\x32\x22\x17\ +\xb9\x01\xfa\x0b\xef\xb8\x83\x26\x2e\xbb\x8c\xec\x89\xc9\xe5\xc5\ +\x89\x96\xde\x01\xe9\xd2\x1b\x3f\x25\x6e\x89\xb1\x51\x7d\xef\x2c\ +\xd1\xed\x0a\xd1\x39\x41\xd8\x8b\x26\x91\x75\xa6\xb9\xbf\x1f\x0b\ +\x08\x00\x37\x1f\x04\xf3\x4d\x01\xe0\x22\x4f\xc5\x33\x67\x38\x13\ +\x70\x5e\x6f\xd7\xa8\x5e\x8c\xb6\x06\x3c\x9f\xc0\x73\xdc\xce\xbf\ +\xe9\x26\x65\x05\xd1\xf3\x91\x96\x1b\xc7\x4f\x10\xb7\xf4\x94\x12\ +\x92\x16\x60\x6f\xd2\x00\xbb\x4d\x19\xbb\x4f\x07\x75\x48\xd5\x0f\ +\xa8\x5c\xa9\x44\xf7\x23\x22\xaa\x24\xee\x27\x0b\x28\x01\x9c\x74\ +\xdd\x39\x2d\x80\x4a\xa5\x4a\x65\x6c\x63\xed\x4b\x2f\x21\x62\x01\ +\x74\x58\x95\x6c\x19\xc7\xb0\x71\x5a\x78\xe6\x69\x4a\xc2\x5d\x26\ +\x7f\xfd\x13\xf4\xf3\x8d\xe3\x24\x72\xf8\x54\x47\x3d\x50\x9f\x3b\ +\x43\xdc\x52\x9b\x36\x93\xfc\xef\xe7\x95\xf6\x3c\xc7\x51\xd6\x60\ +\x59\x5c\x8c\x1a\x51\x0c\x68\xf1\x7f\xc7\xb2\x69\xc7\xcd\x37\xd3\ +\xf8\xee\xdd\x94\x9a\x9c\xa0\x81\x2d\x5b\xa8\x84\xcd\xd5\x0f\xaf\ +\xba\x5a\x0b\x40\x5b\x00\x7f\xe3\xac\x4b\x62\xb3\x23\x0d\x7a\x67\ +\x1c\x27\x1f\x80\x3f\x2f\x88\x53\x61\x65\x69\x29\xac\x05\x5c\x57\ +\xbb\xc0\x8a\xae\x30\xb8\x65\x2b\x15\x5f\x7f\x8d\xe6\xfe\xfa\x51\ +\xe2\xb6\xeb\xd6\x5b\x61\x05\x4e\x97\x1b\x94\x17\xf2\xaa\x64\x4e\ +\xcf\xcc\x50\x15\x5b\xe1\x7a\x22\x41\x9b\x10\x18\x67\xf0\xfc\xd8\ +\x27\x7e\x83\x8a\xd5\x2a\x07\xd3\xb6\xb8\x20\xd6\x8d\xd2\xd5\x88\ +\x1f\x23\xcf\xfd\x90\xde\xfd\xcc\x75\xf4\xda\xaf\x5e\x49\x87\x2e\ +\xff\x08\xd1\xf3\xcf\x61\xc5\x1e\x2f\x3e\x82\x61\xe8\xb3\x01\x73\ +\x0d\x2e\xd0\x96\x09\x9c\x1a\x4a\x62\x5e\x6c\xbd\x56\x23\x1b\x87\ +\x15\x46\x12\xd0\x64\x3b\xd1\x9c\x1f\xde\xbb\x8f\x6a\xef\x1d\xa6\ +\x93\x67\xe6\x68\xe1\x3f\x7e\x40\x93\x57\x5e\x49\xf1\xe9\xe9\x76\ +\x17\x00\x1c\x69\x50\xf9\xf0\x61\x9a\xfa\xd8\xc7\xe8\x92\xfb\xef\ +\xa7\x5f\xf9\xbd\x6b\x69\x6b\xad\x44\x5b\xb7\x6f\xa3\x2b\xee\xbd\ +\x97\x7e\xf7\xc0\x6b\x14\xdb\xb6\x4d\x93\x57\xc2\xf8\xe8\xe3\x8f\ +\x53\xe1\x1f\xbe\x4d\x07\x7e\xf2\x16\xe5\x92\x69\xca\x25\x52\xf4\ +\xe6\xdc\x22\x3d\xff\xe5\x3f\xa3\xa0\x9d\xbc\xb6\x80\x99\xcf\x8c\ +\x8e\xa6\x0c\xb4\xb5\x08\x40\x67\x02\xb7\x2e\x44\x41\xb0\xbf\xc2\ +\x34\x37\x4c\x4f\x51\x0d\xfb\x02\x2b\x91\xe8\xf6\x51\xf6\xfd\xe6\ +\x31\xf5\xe8\x85\x17\xaa\x78\x11\x90\x41\x73\x8f\x3e\x4c\xdc\xf6\ +\xdc\x76\x1b\x9b\x77\x18\x24\x01\xd9\x44\xf5\xd0\x41\xb2\x90\x5a\ +\xe7\x1f\xf9\x16\x1d\x78\xe4\x51\x7a\xfe\xdb\xff\x48\xaf\xdc\x74\ +\x23\x9d\xbe\xe5\x0b\x14\x1f\x1a\xa2\xab\xbf\xf3\x1d\x92\xc3\xc3\ +\xea\xd9\x91\x7d\xfb\x68\xdd\x79\xe7\xd1\xd1\xe7\x7e\x44\x42\xca\ +\x36\x9f\xaf\x5a\xf6\x32\x79\x11\x92\xd7\xb0\xf6\x0d\x0c\xec\x5e\ +\xab\x05\xc8\x65\x0b\x08\x82\x25\xa1\xb6\xc5\xa8\x05\x76\x9c\x4f\ +\x75\x6c\x86\xec\x74\xba\x4d\xf3\x82\xa1\x83\x97\x65\x71\x90\xc4\ +\xf3\xbe\x9a\x3b\xf2\xde\xfb\x94\x7b\xee\x39\x9a\xb8\xe2\x0a\x4a\ +\x6c\xdd\xd6\x6e\xce\x40\xfd\xbd\xf7\x88\x5b\x11\xd6\xe0\x41\x60\ +\x30\x78\x2a\x26\x53\xf4\xda\x7f\x3e\x43\xb3\x4f\x7c\x8f\xe2\x38\ +\x5d\xda\x7c\xcd\x35\xea\xd9\xb1\xcd\xe7\xaa\xa5\x35\x82\xa0\x8d\ +\xbc\x86\xe8\x20\xaf\x91\x20\xda\xdf\x8f\x0b\x78\x80\x53\x0e\x82\ +\xbc\x3e\x18\xd9\x30\x31\x8e\x54\x38\x4f\x71\xf8\xa1\xce\xfd\xdc\ +\xcb\x65\x04\x34\xb4\x79\x33\x39\x88\xfa\xd6\xf9\xe7\xd3\xf0\x47\ +\x7f\x8d\x36\x7f\xf1\x8b\x94\xda\xba\x95\xb8\xed\xbd\xfd\x76\x58\ +\x41\xa3\xcd\x0d\xea\xcd\x7d\x45\x72\x6a\xaa\xad\x62\x74\x0d\x93\ +\x72\x4f\x3e\x41\x68\xec\x42\x6a\xce\x32\x0d\x15\x40\xd3\xbb\xf7\ +\xa8\x5e\x10\xb5\x41\x76\x93\x57\x73\xb1\x30\x13\x9c\x9d\x0b\xb4\ +\xd6\x02\x5a\x00\xcb\xa9\x90\xb7\xc5\x73\x73\x64\x8f\x8e\xf2\x81\ +\xa7\x2e\x75\x23\x60\x91\x23\xf0\xff\x31\x04\xb5\x8b\x2f\xb9\x98\ +\x76\x0a\x97\xb2\x2f\x3c\x4b\xf9\x9b\x7f\x9f\x4a\xaf\x1d\xa0\x89\ +\xcb\x2f\xa7\xd4\x8e\x9d\xad\x6e\x00\x01\x1c\x0b\x53\x21\x22\x79\ +\xe7\x5f\x7e\x4e\x1f\x3c\x48\xaa\x35\x35\x5e\x7b\xe9\x45\x95\x48\ +\x66\xbe\xf0\x07\xe4\x0a\xd1\x45\x94\xd7\x68\x66\x32\x5d\x71\x80\ +\x4c\x53\x95\xc4\xfd\xb8\x80\xbb\x84\x5a\xa0\x55\x00\x95\x85\x05\ +\x95\x09\x60\xe3\x6a\xb1\x11\x42\x52\x59\x14\x3f\x07\xaf\xff\x2c\ +\xfd\xf8\xe1\x47\xe8\x85\x1f\x3c\x4d\xaf\xbc\xf5\x0e\xfd\xf4\x64\ +\x8e\x4e\xdf\x77\x2f\x71\xdb\x87\x02\x89\x33\x82\x7e\xaf\x78\xf2\ +\x64\x28\x80\x6d\x33\x1d\x55\x20\x22\xc8\xba\x31\xe2\xe6\xe7\xe6\ +\xd4\xdc\xc9\xa3\x27\xa8\xf8\xc2\xf3\xb4\xfe\x82\x0b\xe8\xa2\xfb\ +\xef\x23\xc7\xe0\xc0\xef\xa9\x2d\x7b\x1d\x19\x63\xe6\xfa\xeb\xe9\ +\xdc\x5d\x3b\xda\xc8\x03\x4c\x6c\x37\x77\x06\xda\x5a\x04\x10\x00\ +\xde\xac\xeb\xe6\x42\x25\x04\x61\x2d\x80\x54\x68\x8d\x0c\xf3\x2f\ +\x33\xe1\x08\xbc\x78\x32\x68\x74\xcf\x1e\x3a\x8e\xe8\xef\xe1\x73\ +\xa2\xa5\x34\x3e\xfc\xd6\xdb\x54\x7c\xf5\x15\x1a\xbf\xf4\x52\x1a\ +\xdc\xb7\x77\xb9\xe0\xa9\x14\x4a\xe4\xe0\x9b\x53\x57\x5d\x15\x1e\ +\x8c\xa8\x6f\x85\xef\xc5\xd9\xd2\x30\x97\xff\xdb\xbf\x51\xbd\x87\ +\xf5\x1f\xbe\xe5\x66\x72\x20\xb4\xed\x9f\xfe\x34\x7d\xea\xc7\x2f\ +\xd1\x87\x1e\xf8\x73\xda\xf5\xa7\x7f\x42\xd7\x3c\xfb\x5f\x34\x99\ +\x1d\xa1\xf7\x5f\x7e\xb5\xcb\x15\x70\x3d\x72\xe7\xfa\xf5\x9b\xd6\ +\x6a\x01\x02\xf0\x8e\x3b\xce\xac\x3e\x18\xe1\x5a\xa0\xc6\x47\xe4\ +\x99\x41\xf6\x95\x76\x0b\x10\xf0\xff\x6d\x5b\xa9\x7c\xe8\x10\x79\ +\xbe\xaf\x49\x2c\x9b\xb5\x83\xcf\xcf\x7e\xf3\xeb\xc4\xed\xc3\x5f\ +\xbd\x87\x5c\x37\x14\xa0\x4f\x52\xbd\x93\x04\xd9\xf1\x4f\x7e\x92\ +\xaa\xa5\x32\x79\xae\x4b\x55\xa4\xdd\xf3\x6e\xb9\x85\x16\x1e\x7b\ +\x98\x0e\xbe\xfe\xc6\x32\x99\x83\x85\x0a\xfd\xec\xea\x8f\x53\xe9\ +\xbe\xaf\x92\x3c\x7e\x8c\xa6\xf6\xef\xa7\x2d\xd3\x93\xe4\xdf\x73\ +\x37\xbd\xf9\xb5\xaf\x93\x6f\x9a\x7a\xf1\x6d\x41\x71\x5d\x22\xb1\ +\x6f\xad\x7f\x1a\x93\xcd\x2d\x71\xd5\x05\xe2\x52\xa6\x6b\x58\x54\ +\x06\x0b\x75\x0a\x4b\x2a\x15\x7a\x22\x68\x2b\x03\xc7\x90\xfe\xaa\ +\x47\xdf\x57\xd6\x80\xd6\x7e\x26\x80\xf6\xb3\x67\x7f\x44\xd3\x48\ +\x8f\x9c\xca\xf6\xdd\x75\x17\xbd\xf9\x8d\x6f\x90\x84\x4b\x79\x20\ +\x22\x2f\xba\x88\xae\x7c\xe8\x21\xda\x7b\xe3\x8d\x94\x3b\x70\x80\ +\x86\x51\xe1\x89\x27\xbf\x47\x2f\x3e\xf1\x14\xb9\x76\xac\xad\xbc\ +\x3d\x58\xf7\xe8\xc8\x63\x8f\xd3\xc8\xb7\x1e\x26\x5b\x08\x95\x02\ +\x17\xe3\x49\x68\xda\xea\x8a\x0b\x7a\x6c\x87\x99\xe0\x9f\x01\xd9\ +\x4b\x00\xdd\xc5\x10\x6a\x81\xb4\x10\x69\xce\x04\x93\xe7\x9f\x87\ +\x5a\x60\x89\x62\x48\x4f\x75\xc4\x04\xdd\x1a\x8d\x3a\x4d\x5e\xf3\ +\x5b\x34\xff\xfa\xeb\x54\xc4\xbe\x61\xa8\xb9\x17\x90\xa1\x10\x54\ +\xae\xbf\xf0\xa1\xaf\x91\x09\xed\x96\x9f\x7d\x86\x26\x93\x71\xca\ +\xde\x74\x03\xfd\xcf\x93\x4f\x51\xee\xa1\x07\xe8\xc4\x1f\xfd\x21\ +\x65\xb0\x75\x8e\x65\xd2\xe4\x97\x2b\xf4\xf6\x99\x59\xca\xc7\x07\ +\xc8\x67\xf2\x11\x21\x2d\x04\x95\x25\xe6\x70\xbf\x93\x28\xb0\xe2\ +\x1c\x59\x96\xca\x04\x6b\xb6\x80\xa6\x00\xb8\x16\x98\xe4\x6d\xf1\ +\xae\x5d\x3b\x69\xfe\xf8\x49\x8a\x83\xa0\xc0\xde\x80\xdb\x10\x0a\ +\x94\x4b\x60\xae\xe9\xc1\x0c\xc5\x21\xa0\x8f\x3f\xf8\x00\xbd\xfc\ +\x95\xbb\x49\xb6\x1e\x93\xc3\x75\xe6\x6f\xbd\x99\x8e\xc1\x35\x1a\ +\x56\x4c\x11\xf0\x0d\x43\xf5\xa7\xf8\xbe\x95\x20\xca\x17\x49\x02\ +\xdc\x64\x22\x15\x2d\x7e\x05\x82\xd4\x83\x78\xe7\x9c\x85\xb3\x81\ +\x66\x20\x14\x12\x6d\x2d\x16\xe0\x56\x5b\x6a\x81\x61\x90\x3c\x82\ +\xa8\x3c\x9e\x5d\x4f\xf4\xee\x3b\x61\x9e\x7d\xfb\x4d\x3a\xf5\xd9\ +\xeb\xe8\x10\x4c\xdf\x33\x2d\xf2\x2d\x8b\x84\x1d\x6f\x3b\x30\xf4\ +\xd0\x1f\x89\x0d\x10\xd9\xd1\x66\x08\x2d\x1c\xb7\x12\x5b\x85\x24\ +\xad\x4e\x94\x5b\x4f\x4b\x00\xf1\x2d\x9f\x1a\x19\x49\x7f\xbf\x50\ +\x28\xf6\x0a\x82\x51\x2d\x10\x15\x43\x8b\x3a\x13\x70\x2a\x2c\xcf\ +\x87\xa9\xd0\xf0\xc2\x8d\xca\xbc\xe3\xd1\xfb\x20\x37\x8b\x0a\x2e\ +\x1f\x4b\x50\xd1\xb4\x5b\xff\xd5\x46\x74\x4c\xa6\x7b\x29\xdb\x76\ +\x6c\xa2\x63\x8c\x45\x33\x74\x00\xeb\x0e\x6a\x8c\xee\x0a\xb0\xbd\ +\x28\xd2\xcf\x46\x73\x26\x4a\xe2\x3d\x6b\x75\x01\x7d\x30\xb2\x5c\ +\x0b\x38\x5c\x0b\x14\x8b\x64\x73\x7d\xce\xa9\x90\xba\x1b\x18\xb6\ +\x7e\x64\xf5\x71\xb7\x06\x3b\xe7\xba\xdd\xa0\xb7\xd6\xf5\x7c\xd7\ +\xb5\x1d\x8f\x73\x20\x7c\x11\xe8\xe1\x02\x1d\xe7\x02\x8b\x41\x90\ +\xd3\x02\xa8\x54\x6b\x61\x2a\x5c\xb7\x8e\x4c\xbd\xb7\x5f\xa1\xc9\ +\xce\xeb\xd5\x84\xd0\x69\xe2\x9d\xcf\xf7\x70\x83\x68\xae\xb7\x1b\ +\x20\x0e\xb0\x00\x8c\xb5\x58\x80\x00\xbc\x13\xa8\x05\xd0\x87\x9b\ +\x17\xd4\x02\x75\xd4\xfa\x6e\xa9\x44\x16\x6f\x8a\x5c\xb7\x9b\x70\ +\x2f\xad\x1b\xc6\x2a\x82\xe9\xd6\x78\x37\xf1\xfe\x83\x22\x22\x60\ +\x5b\x20\xec\x21\x80\xc8\x0d\x4e\xe3\x60\xc4\x97\xd2\x8f\x49\x69\ +\x73\x2d\xb0\x1e\x1b\x9e\x06\xbb\x01\xb6\xab\x62\x61\xa1\xb7\xf6\ +\x99\x70\xff\x6e\x10\x8d\x7b\xb9\x41\x8f\xe7\x41\x5c\x95\xc4\x3d\ +\x83\xe0\x4a\xbb\x42\x6c\x41\x8b\x3a\x13\x6c\xda\x79\x3e\x55\x51\ +\xbe\x26\xb2\x59\x0e\x34\x5d\x90\x8c\xd6\x6b\xa2\x5e\x41\x6f\xd5\ +\xe0\x26\xa3\xfb\xd1\x35\xa3\xc7\x0e\xb0\x2b\x28\xe2\x1a\x02\x18\ +\xbc\x6d\x62\x62\xf3\x1a\x04\x10\x05\xc2\xba\x10\x8b\xfa\x88\xfc\ +\x5c\xe4\xfa\x2a\x34\x9f\x58\xbf\x5e\x9f\xf9\x77\x47\xeb\xce\xb9\ +\x55\x48\xa9\x7e\x35\x01\x75\x13\x8f\xc6\x2d\xef\x8a\x1e\x31\x80\ +\x5a\x2c\x70\xd0\xb6\xf7\xaf\x49\x00\xda\x02\x50\x0b\x2c\xc1\x6d\ +\x54\x0d\x9f\x42\x55\x57\x99\x9f\x57\x81\x90\x84\x68\x27\xbd\x1a\ +\x71\x4d\xb8\x9d\xd4\x4a\x7d\xf4\xdc\x5a\xac\x81\xe7\x7a\x90\xe7\ +\x16\x37\x0c\x15\x08\x7b\x06\x41\x89\xc6\xc1\x42\x97\xc3\x95\xd6\ +\x73\x81\x7c\x3e\x4c\x85\xd8\x17\x18\x52\xf2\xa2\xd6\x16\x08\xf5\ +\xb8\x67\x36\xe8\x5d\x10\x51\x0f\xad\x77\x36\xcc\xee\x69\x2a\x5b\ +\x9c\x75\x10\x04\xdc\x12\x04\xa0\x8b\x21\xa7\x50\xa0\x7a\xa5\xc2\ +\x16\xa0\xbf\xd4\x3b\x10\x76\x8d\x35\xe9\xde\xd9\xa0\x37\xf1\x6e\ +\x61\xea\xac\x85\x8d\x9c\x82\x0f\x38\xbe\x2f\xc8\x34\xe7\xf8\x09\ +\x6e\x12\xad\xa7\x00\x74\x2d\x50\x68\xad\x05\x2a\x55\xaa\x3b\x0e\ +\x79\xd5\xaa\x3a\x29\x16\x98\xa3\x5e\xda\xd7\x56\xd2\xcb\x12\x7a\ +\xa4\x41\x5d\x56\x2b\x62\xf8\x5d\x0f\xbd\x27\x84\xf4\xd9\x5a\x13\ +\x89\xc0\x1a\x48\x0a\x3b\x95\x96\xf6\xf0\x90\x4c\x8e\x8e\xd1\xe0\ +\xe4\x84\x1c\x9d\xde\x44\x53\xbb\x76\xc8\xbf\xb8\xf3\xcb\xd7\xfd\ +\xdb\xbb\xef\xbe\xdc\xb3\x0e\x58\xf1\x60\xc4\xf3\xe6\x5a\x6b\x01\ +\xe5\x17\x70\x83\x18\x52\xa1\x5c\x5a\xea\x26\xdd\x87\x1b\xb8\x4d\ +\x8d\x79\x00\xf7\x0e\x88\x41\x63\x81\x88\xc7\x03\x23\x91\x10\x46\ +\x26\xc3\xff\x78\x52\x9d\x1d\x0c\x8c\x8f\xcb\xd1\xc9\x49\x63\x64\ +\x7a\xda\x1e\x99\x18\xb7\x6d\x3b\x66\x99\xf8\x9f\x6d\xd9\x14\x8b\ +\xc5\xc8\xb6\x2d\xf4\x71\xe2\xeb\x64\x32\x49\x43\x58\xe7\x79\x93\ +\x93\x15\x08\xa0\xce\x9c\x7a\xd4\x01\xdd\x81\xf0\x78\xa3\x31\x2b\ +\xf0\x8e\xfe\x23\xc9\xe4\xf6\x19\x6a\xa0\x18\x4a\x8e\x8d\x91\x80\ +\x00\x56\x7b\x11\xef\x68\x2d\x69\x73\x64\x0d\x0a\x11\x12\x63\xad\ +\x09\x99\x4a\x49\x2b\x93\x31\x6c\xa4\xd5\x01\x6c\x89\x33\xe3\xe3\ +\xe6\xf0\xf4\x94\x99\xc9\x66\x6d\x32\xd4\xc6\xc2\xe6\xe5\x5a\x96\ +\x45\x71\x45\x0e\x24\xe3\x71\x35\x8e\x27\xb8\x8f\x87\xa4\x63\x98\ +\xb7\x63\xfc\x9c\x7a\x06\x02\x61\x01\xa8\x67\xd2\xa9\x34\xed\x3f\ +\x77\x52\xe9\xad\x67\x29\xbc\xd2\xae\x10\x59\xa0\x02\x12\x15\x14\ +\x43\x19\x95\x0a\x77\xec\xc0\xb6\xf8\xb8\x0a\xa7\x8b\xb5\x5a\xe8\ +\x67\x78\x36\xb0\xac\x40\xc4\x62\x42\x26\x12\x52\x0e\x0c\x48\x99\ +\xce\x20\x58\x8e\xc9\xc4\x86\x73\xcc\xd4\xf8\x46\x63\xdd\xe4\xa4\ +\x3d\x38\x3a\x66\x41\x55\x26\x2f\xce\x34\x94\x43\x92\xc9\x8b\x06\ +\x4c\x1e\x9b\x26\x19\x80\x26\x8c\x7b\x21\x69\xc0\x62\xe0\x1e\xae\ +\x19\xea\x59\x0d\x7d\xe4\x87\x79\x7e\x57\x83\x05\xa4\xe6\x26\x92\ +\x99\x18\x6e\xf7\xda\x0e\xaf\x9e\x0a\xf9\x8f\x24\x49\x21\x32\xae\ +\xe3\xd1\xb6\xa9\x29\xf9\xea\xf1\x13\x1e\xcd\xcc\x48\xfb\xe2\x0f\ +\x1b\xa3\x9b\x36\xd9\x03\x83\x83\x26\x7e\xc8\xd4\x0b\x64\xad\x60\ +\xac\x34\x80\x59\xb2\x15\x19\x73\xf9\xf8\x1b\xd4\x31\x0e\x78\xcc\ +\x8b\x57\xe0\xb5\x99\xfc\x0e\x34\x0c\xe8\x39\x75\xf8\xc9\x82\x37\ +\x00\x7c\x97\x63\x11\xf7\xfc\x0c\x93\x0c\x85\xd8\xfc\x5d\x34\xbe\ +\xd6\xd9\x2c\xdc\xc5\xd6\xeb\x6e\xcc\x94\xa9\x35\x9c\x08\x75\x67\ +\x82\x1a\x8a\xa1\x11\x29\xa7\x38\xf2\x9f\x29\x14\xbc\x89\xcf\x7d\ +\x1e\xe7\x22\x23\x94\x49\xa7\x40\x32\xc1\x0b\x51\x84\x41\x45\xbd\ +\x26\x98\x8c\x8e\xe2\x18\xa3\x0f\x17\x69\x59\xbc\x78\x8c\x2d\x40\ +\x11\x6c\x03\x04\xa2\xc7\x9a\x84\x7a\x3e\x11\x5a\x85\x26\xac\x35\ +\xdd\x9a\xba\x59\x30\x3c\xd7\xf6\x0d\xbe\xae\x17\x8b\x65\xcb\x13\ +\x99\x35\x6c\x87\xa3\x5a\x40\x5b\x40\xa5\x79\x2e\xb0\x1e\x01\xe5\ +\xe4\x9e\x7d\xd6\xa6\xe9\x69\xca\x8e\x8d\x92\xdd\xd4\x34\xb1\x16\ +\x0c\x93\x3b\x6d\xaa\x9a\x44\x44\x8e\x11\x04\xbc\xd0\x30\xa5\x3a\ +\x2e\x6b\x57\x2f\x58\x43\x9b\x34\xa3\x6d\x8e\xdf\xd1\x42\x40\x6b\ +\x8e\xb5\x40\x57\x2e\xf3\xf9\xdb\x8d\x7c\xbe\x4a\xc2\x4f\xb3\x71\ +\xf4\x6b\x01\x2c\x00\xb5\xf3\x09\x3c\x4f\x66\xa6\xa7\x51\x06\x8c\ +\xd0\xf0\xf0\x30\xff\x78\xf3\xbb\xa1\xf6\x74\xbd\x00\x62\x7a\xcc\ +\xe0\x7b\x0a\xda\x2c\xd1\xba\xc9\x47\xd0\x1a\xe6\xbe\x6d\x0c\xa2\ +\xda\x0a\xf8\xdd\xd0\xc4\x9b\xbb\x52\xad\x71\xfd\x8c\x16\x4a\xe5\ +\xf4\xa9\x1a\x1e\x4c\xaf\xc1\x02\xba\x53\x61\xc9\xf7\x95\x00\x6a\ +\xae\x1b\x0c\x25\x93\x76\x22\x9e\x20\x5d\x1b\x60\x31\x6d\x64\xb5\ +\x00\x22\xd2\x91\x70\xb4\x56\x5b\x7d\x94\x7b\x4d\x46\x2f\x5e\x9b\ +\xb4\xe3\x38\xfa\x0f\x20\xda\xf4\xbb\x02\x1d\xe6\x75\x1c\x50\xdf\ +\xd1\xef\xeb\x00\xb9\xf8\xea\x2b\x0d\xc3\xf3\xfa\xb6\x00\xd1\xfc\ +\x17\x23\x73\xfc\xb6\x67\xdb\x42\xfd\xa8\x69\x68\xcd\x6a\xad\x69\ +\x82\xda\x2c\x79\xac\x89\x30\xb4\x50\x34\xda\xde\xd1\x66\xaf\xef\ +\xe9\x6b\xf4\xfa\x5b\x3c\xcf\xdf\x60\x8d\xab\xf9\x0c\x6a\x83\x81\ +\x81\x01\x95\xeb\x13\xcd\x38\xd4\xd9\x1a\xa5\x62\xc3\x39\x72\x78\ +\xc4\xf5\x7c\xd9\x87\x05\x44\xa9\x10\x07\x23\x67\x78\x11\x3e\x56\ +\x8d\x42\x43\x93\xd3\xd2\xd7\x5a\xd4\xda\xd7\x64\x3b\x03\x9b\x16\ +\x4e\x9b\x26\x75\xd3\x04\xb5\xf6\xf4\xb3\x3a\x23\x74\xb6\x72\x3e\ +\xef\xce\xbe\xf3\x4e\x3d\x7f\xf4\xa8\x53\x3a\x79\xc2\xaf\x9e\x99\ +\x95\x41\xa1\x60\x58\x8d\xba\x3d\x20\x45\x7c\xc8\x8e\xa5\x32\xa9\ +\x64\x32\x96\x88\x0f\xbf\x9e\x5b\xfc\xd7\x3e\xb2\x40\x94\x0a\x4f\ +\x39\xce\x82\x90\x92\x3d\x3b\xd0\x8b\x6e\xd5\xa8\x16\x82\xd6\x1a\ +\x34\xd2\xb5\x68\x5c\x6b\xb4\xa5\xaf\xd6\xc6\xef\x71\x2b\xe6\x72\ +\xce\xe9\x23\x47\xea\x0b\x47\x8e\xb8\x85\xe3\xc7\xfd\xf2\xe9\xd3\ +\xd2\x59\x58\x30\xfc\x62\xd1\x36\x1a\x8d\x44\xdc\xf7\x53\xb6\x69\ +\xc6\xf1\x8d\xb8\x0a\x90\x86\x51\x0b\x4c\xa3\xe4\x1a\x0a\x05\x60\ +\x09\xa2\x9c\x43\xd1\x75\xe8\xe9\xd3\xb3\x4f\xbe\x9d\xcf\x1f\xeb\ +\x57\x00\x3a\x13\x34\xea\xbe\x5f\xf2\xa4\x8c\x6b\x72\xda\x84\x5b\ +\xcd\x55\x43\x13\x5d\xa9\x15\x66\x67\x9d\x1c\xc8\x2d\x1d\x3b\xe6\ +\x2c\x1e\x3d\xea\x57\x67\x67\x79\x97\xb9\x4c\x2e\x21\x44\xca\x84\ +\x2c\x08\xc0\xef\x35\x1c\x29\x4b\x7c\x28\x83\x5a\xa4\x58\xc7\xd6\ +\x9c\xff\x0d\x63\x59\x88\x7c\x01\x9b\xb4\x3c\x14\x73\xd4\x75\xe7\ +\x30\x5f\x67\x57\x65\xe8\xcc\x05\xd4\x80\x02\x50\x0c\xe7\xfb\x17\ +\x80\x0b\xd4\x71\x40\x7a\x6c\x7c\x71\x71\x47\x12\x02\xb0\x59\x83\ +\xb6\xdd\x45\x12\xe4\x1a\xb9\x43\x87\xea\x79\x90\xc3\x5f\x7f\x83\ +\x0a\x6b\x0e\xe4\x44\xa9\x14\x53\x9a\x13\x22\xcd\xe4\x02\x64\xd9\ +\x86\x10\x7e\x43\xca\x4a\x93\x9c\x22\x56\xf1\xfd\x7c\x11\xc4\x16\ +\x7c\x3f\x87\x12\x7c\x1e\x3b\xd1\x32\x13\xea\x20\xc7\xf0\x5b\x10\ +\xb4\xf7\x7a\x1c\x3d\xab\xab\xc0\x1e\x02\x58\xb5\x16\x70\x80\xd2\ +\x7b\x8d\xc6\x4b\x9b\x97\x96\xf6\xbe\xf4\xe0\x83\x8b\x89\x7a\xd5\ +\x3c\x35\x9f\xaf\xe1\x80\x54\x82\x9c\x6d\x36\x1a\xc9\x18\x8a\x5f\ +\xfe\x16\x6f\x64\x80\x3a\xff\x59\xad\x2e\x65\xa1\xe6\xfb\x4b\x15\ +\x68\xac\xe8\x79\x0b\x8b\x38\x66\x3f\x89\xcd\xd5\x82\xeb\x96\x34\ +\xa1\x3e\x88\x31\x04\x20\xcf\x06\xdc\xfa\xfe\xbf\xce\x42\x00\x26\ +\x85\xe6\xb8\x11\x52\xda\x7e\xf3\xe4\xe4\x1f\x6f\x4c\x26\x77\xa7\ +\xd2\x29\xff\x8d\xb9\xdc\x4f\xaa\xa8\x0f\x4a\x40\x1e\xc4\x70\x80\ +\x9a\x3b\xe3\xba\x8b\xdd\xa4\x80\xde\xa4\xb8\x17\x8c\x1e\xe4\x28\ +\x1a\x77\xb7\xd5\xc8\xf6\x2b\x00\x2d\x04\x1b\x5d\x1a\x18\x05\x86\ +\x81\x18\x20\xce\x46\x5b\x6b\xd4\x18\x7d\x30\xc4\x3e\x78\x01\x18\ +\xe8\x2c\x26\xde\x84\xa1\x6b\x84\x5f\x2e\x62\xfd\xb7\xff\x05\xc7\ +\xfd\xe7\xdb\x23\x5d\x13\x38\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ +\x42\x60\x82\ +\x00\x00\x20\x1c\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\ +\x1b\xaf\x01\x5e\x1a\x91\x1c\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd7\x08\x12\x14\x39\x28\x29\x91\x7c\x0e\x00\x00\x1f\xa9\x49\x44\ +\x41\x54\x78\xda\xe5\x9b\x09\xb0\x5c\x57\x99\xdf\xff\xb7\xf7\xbd\ +\x5f\xbf\xfd\xe9\xe9\x3d\x49\xd6\x2e\xd9\xda\x2c\x79\xc1\x78\xc0\ +\x76\x42\x81\xc1\x03\x64\x0c\x13\x1c\x42\x65\x02\x4e\xb1\x84\x78\ +\x5c\xc5\x14\x55\x49\x2a\x54\x48\x05\x2a\x03\xc3\x14\x03\x55\x33\ +\x13\x43\x2a\xae\x21\x9e\x01\x26\x05\x43\x80\xd8\xb2\x0d\x78\xc3\ +\x96\x25\x6b\xb1\xf5\xb4\x3d\x6b\x7d\xd2\xdb\xb7\xde\xb7\xdb\xb7\ +\xf3\x3b\xa7\xbb\x35\x12\x1a\x0a\x18\xb0\x81\x4a\xcb\x9f\xcf\xed\ +\xbb\x9c\x77\xbe\xed\xff\x2d\xf7\xb4\xfe\x7f\xff\x38\xaf\xe7\xdf\ +\x59\xb3\x66\x8d\xaf\xab\xab\xcb\xd7\xdb\xdb\x6b\x29\x91\x48\x38\ +\xd5\x6a\x55\xb9\x5c\xce\x5b\x58\x58\xf0\x96\x97\x97\xbd\x0b\x17\ +\x2e\x78\xd9\x6c\xb6\x29\x09\xfa\x2d\x16\x40\x24\x12\xf1\x6d\xdd\ +\xba\x35\xb0\x7b\xf7\xee\xf8\xdd\x77\xdf\xbd\xb5\xaf\xaf\x6f\x67\ +\x34\x1a\x5d\xcf\xf9\x75\x7e\xbf\xbf\xd7\x71\x9c\x04\x14\x6f\xf2\ +\x69\x34\x1a\x05\x43\x08\x63\xa6\x5c\x2e\x9f\x2a\x16\x8b\xe3\xd3\ +\xd3\xd3\xfb\xbf\xfd\xed\x6f\x9f\x3c\x70\xe0\x40\x0d\xa1\x34\x8c\ +\x40\x7e\x1b\x04\xe0\x6c\xda\xb4\x29\x74\xef\xbd\xf7\xf6\xbe\xf5\ +\xad\x6f\xbd\x07\x2d\xbf\x3d\x16\x8b\xdd\x1c\x0e\x87\xfb\x60\x5a\ +\xf0\x2a\xd7\x75\x2d\xc1\xb0\x3c\xcf\xb3\x0f\xf9\x7c\x3e\x4b\xc1\ +\x60\x50\xdc\x67\xcf\x57\x2a\x15\x15\x0a\x85\x49\xac\xe1\xd9\xa9\ +\xa9\xa9\x6f\x3d\xca\xe7\x5b\xdf\xfa\x56\xde\x58\xca\xaf\x52\x18\ +\xce\xaf\x4a\xdb\xd7\x5f\x7f\x7d\xf4\x13\x9f\xf8\xc4\xae\x6d\xdb\ +\xb6\x7d\x34\x9d\x4e\xdf\x0d\xd3\x29\xc3\x08\x1a\x15\x1a\x55\xa9\ +\x54\x52\x15\xa6\x6a\xb5\x9a\xdc\x7a\xbd\x25\x00\x08\xa1\x40\xad\ +\x95\xc0\xbc\x15\x42\x38\x1a\x55\x2a\x95\xb2\x14\xe5\xb8\xce\xfd\ +\x8b\x8b\x8b\xf3\x33\x33\x33\xff\x7b\x6c\x6c\xec\xcf\x3e\xf7\xb9\ +\xcf\x8d\x4f\x4e\x4e\xba\x46\x10\xbf\x6e\x01\x38\x1b\x37\x6e\x8c\ +\x7e\xfa\xd3\x9f\xbe\x79\xc7\x8e\x1d\x7f\x94\xc9\x64\xde\xe2\xe7\ +\x03\xd3\xc6\xaf\x55\x2c\x14\x54\xe1\xd8\x50\x15\x2a\x23\x04\xc8\ +\x0a\xa2\x8e\x20\x1a\x58\x82\xe1\xde\xe7\x38\xf2\x07\x02\x0a\x05\ +\x43\x0a\x86\x42\x0a\x84\x43\xf2\x9b\x63\xc6\x68\x3c\xae\x9e\xbe\ +\x3e\xf5\x41\x21\xae\x2d\x2d\x2d\xd5\x2f\x5d\xba\xf4\xcd\x23\x47\ +\x8e\x7c\x96\xbf\x7b\x22\x9f\xcf\xbb\xbf\x16\x01\xa0\x9d\xe0\x87\ +\x3f\xfc\xe1\x91\xf7\xbf\xff\xfd\xff\x7e\x68\x68\xe8\x03\x98\x70\ +\x10\x4d\x5b\xc6\x4b\x30\x6e\x28\xbb\xbc\xac\x85\xb9\x79\xcd\xce\ +\xcd\x6a\x6e\x76\x56\x4b\x8b\x4b\xca\xe6\xb2\xd6\x1a\x3a\x02\xf0\ +\x49\x0a\xfa\xfc\x8a\x84\x82\x4a\x18\xcd\x27\x12\xea\x4a\xa7\xd5\ +\x95\xe9\x56\x2a\xd3\xa5\x68\x2a\xad\x50\x22\xae\x70\x2c\xa6\x6e\ +\x84\x30\xbc\x72\xa5\x62\x1c\xcf\xce\xce\x96\xcf\x9c\x39\xf3\xc5\ +\x6f\x7c\xe3\x1b\x9f\xfb\xfa\xd7\xbf\xbe\x2c\xc9\x7b\xbd\x04\xe0\ +\x8c\x8e\x8e\xc6\xbe\xf4\xa5\x2f\xbd\x63\xcf\x9e\x3d\x7f\x8a\x89\ +\x0e\x5d\xd6\x78\x3e\xaf\x1c\x4c\x4f\x4f\x4d\xe9\xfc\xb9\xf3\x3a\ +\x73\xf6\x8c\x26\x26\x26\x34\x03\xf3\xf8\x72\x87\x71\x6b\xfa\xc2\ +\x3d\x1c\xa3\x7d\x49\x01\xc7\xa7\x00\x18\x10\x0a\xf8\x15\x45\xcb\ +\x89\x48\x54\x19\xcc\xbf\xaf\xa7\x5b\x83\x83\x83\xea\x5f\xb1\x42\ +\xe9\x81\x01\x45\x33\x19\x85\xcd\x79\xce\xad\x5a\xb5\x4a\xc2\x72\ +\xce\x9d\x3b\xf7\xea\xc1\x83\x07\xff\xf5\x27\x3f\xf9\xc9\xe7\x5d\ +\x3e\xaf\xb5\x00\x7c\xb7\xdc\x72\x4b\xf7\x97\xbf\xfc\xe5\xff\x40\ +\x48\xfb\xb7\x66\xed\x98\xa0\x0a\x50\x76\x71\x51\x13\x17\x2e\xe8\ +\xc4\xf1\x13\x1a\x3b\x7e\x4c\x68\xc7\x32\x5e\x2e\x96\xd4\xdb\xdb\ +\xa3\x95\x2b\x86\xd5\xc7\xd8\xdd\xd5\xa5\x58\x24\xa2\x30\xbe\xde\ +\x6c\x78\x06\x0f\xb8\xa7\xa0\x02\x02\x5c\x5a\x58\xd0\xfc\xf4\x0c\ +\x34\x8d\x60\x9a\x8a\xe0\x06\x29\x5c\xa0\xbf\xa7\x47\x2b\x56\x0e\ +\x6b\xc5\xea\xd5\xca\x8c\x8c\x2a\xda\xdb\xab\x38\xc2\x19\xe5\x7b\ +\x5f\x7f\xbf\xc0\x86\x2a\xd8\xf0\x1f\x1f\x7c\xf0\xc1\x2f\xe3\x22\ +\x95\xd7\x4a\x00\xfe\xb7\xbf\xfd\xed\x2b\x3e\xff\xf9\xcf\xff\x05\ +\x5a\xb9\x1b\x60\xb2\x8c\xe7\xd0\xec\xe4\xc5\x8b\x3a\xfa\xca\x2b\ +\x3a\xf0\xd2\x4b\x3a\x7e\xf2\xa4\x66\xa6\xa6\xf1\xd9\x5e\x6d\xdb\ +\xba\x55\x9b\x37\x6d\x52\x22\x1c\x91\xaf\xe9\xc9\xef\xb5\xc8\x31\ +\x04\xf3\x62\x84\xac\x45\x34\x0c\x71\xec\x72\x5f\xb5\x5a\xb3\x73\ +\x9e\x3e\x76\x4c\x0b\x08\xd1\x80\x63\x12\xb3\xef\x87\xf1\x95\x30\ +\xbd\x62\xfd\x7a\xa5\x56\x8d\x2a\xc2\xf7\x01\x5c\x62\xf5\x75\xd7\ +\x59\xa0\x45\x08\x5f\xf9\xd4\xa7\x3e\xf5\xe0\xc9\x93\x27\x8b\x3f\ +\x2f\x40\xfa\x7f\x5e\xe6\x3f\xf0\x81\x0f\xac\xf9\xcc\x67\x3e\xf3\ +\x48\x7f\x7f\xff\x9d\x26\x44\xe5\xdb\x1a\x3b\x31\x36\xa6\x1f\xfe\ +\xf0\x87\x7a\xe2\x07\x3f\xd0\xcb\x2f\xbf\xac\x01\x16\xf5\xce\x77\ +\xdc\xa3\xbb\x6e\xbf\x5d\xd7\xa1\xf5\x0c\xbe\x9d\xc4\x54\xd3\x6a\ +\x51\xaa\x43\x9c\x4b\x4a\x4a\x74\x88\x73\x71\xc6\x18\x6e\x11\xe7\ +\x5a\x6f\x32\xa5\x75\x1b\xd6\x69\x04\x06\x6b\x08\xb9\xb0\xb0\xa8\ +\x12\x02\x2f\xf2\x37\x6b\x4b\x4b\xf2\x55\xaa\x0a\x20\x98\x4a\xdd\ +\x55\xae\x84\x95\x81\x0f\x03\x03\x03\xbb\x6e\xb8\xe1\x86\xad\x58\ +\xc4\x63\xe7\xcf\x9f\xaf\xfe\xaa\x04\xe0\xbf\xf3\xce\x3b\x57\x7e\ +\xf6\xb3\x9f\xfd\x5f\xc4\xf5\x5b\x0d\x8a\x1b\xb3\x9f\xc3\x4c\x5f\ +\xda\x7f\x40\x8f\x3d\xbe\x57\xcf\x3e\xfb\xac\x5c\x7c\xfb\xbd\xbf\ +\xf7\x7b\xba\xe3\x8d\x6f\xd4\x20\xc0\x95\xc2\xa7\xd3\x4e\x87\xe9\ +\x0e\xb3\x0e\x0c\xc2\xa4\xa4\xa8\x31\xf1\x26\x24\x99\x11\xe2\x9c\ +\x19\xa1\x98\xbd\xc6\x79\xac\x22\x01\x26\x5c\xb7\x6e\xbd\xba\x01\ +\xc4\xfc\xf4\x94\xaa\x68\xba\x9c\xcb\xab\xba\xbc\x24\x87\xb5\x84\ +\x88\x1e\x0d\x9f\xa3\x3c\xc7\x19\x5c\x05\x21\x6c\x02\xa3\x36\xee\ +\xdb\xb7\xef\xbb\xe0\x52\xfd\x97\x15\x80\x8f\x30\xd7\xff\xd0\x43\ +\x0f\x7d\x85\x89\xef\x00\xc4\xac\xd9\x4f\x5d\xba\xa4\xe7\x9f\x7f\ +\x5e\xff\xf7\xb1\x47\x75\xe8\xe0\x41\xed\xda\xb1\x43\xff\xfc\xde\ +\x7b\xb5\xb2\xa7\x57\xe9\x0e\xe3\x57\x68\x38\x0a\x85\x61\x0c\xaf\ +\x57\x00\xc6\x02\x8c\xfe\xa6\x20\x46\xaf\x75\xec\x33\xc7\xf6\xba\ +\x21\x29\xc8\x18\x16\xe4\xf1\x9c\x5b\x07\x3b\x12\x1a\xc1\x22\xaa\ +\x33\x73\xaa\xb1\x86\x5a\x89\xd0\x4a\x44\xb1\x42\xf0\x33\x23\x96\ +\x96\x03\x8c\xbb\x00\x4a\x42\xe6\x26\xb2\xd0\x81\xef\x7f\xff\xfb\ +\x8f\xe3\x5a\xee\x3f\x56\x00\x0e\x79\x7b\xea\xe1\x87\x1f\xfe\xcf\ +\x6b\xd7\xae\xbd\x8f\x58\x6e\x32\x33\x4d\xc3\xfc\x8f\x9f\x7b\x4e\ +\x8f\xed\xdd\xab\xb3\xa7\x4f\xeb\xdd\xef\x7c\xa7\x6e\xdb\xbd\x47\ +\x5d\x80\x5a\x86\x85\x74\x18\x8f\x59\xa6\x61\xb6\xcd\xa4\x45\x7c\ +\x33\x1a\xbf\x6f\x42\x1c\x37\x6d\x24\x68\x8d\x6a\x9f\x77\xec\xbd\ +\x8c\x1d\xe1\x58\x30\x6c\x32\x59\xdd\x5a\xcf\xf0\x9a\x0d\x6a\x10\ +\x4e\xdd\x42\x8e\x30\x5a\x53\x3d\x57\x40\x08\x65\x2c\x21\x88\xa4\ +\x23\x2a\xd6\x6a\xd6\x1d\x58\xfb\x2e\x92\xb3\x65\x84\xb0\x5f\xcc\ +\xfe\x0b\x0b\x80\xb8\x1e\xf9\xc2\x17\xbe\x70\xef\x6d\xb7\xdd\xf6\ +\x5f\x00\x3c\x1f\xcc\x5b\xb3\x7f\xe1\xf9\x17\xb4\xf7\xf1\xc7\x75\ +\x11\xc4\xbf\xef\xf7\x7f\x5f\x1b\x09\x47\x5d\xf8\x62\x06\xcd\xe3\ +\xd7\x76\x91\x21\x18\x68\x69\xb5\xcd\x58\x9b\xa9\xa6\x65\x9a\xb1\ +\x7d\xac\xf6\xb1\xda\xc7\xba\xea\xd8\x8e\xac\xc3\x53\x20\x0d\x40\ +\x3a\x9e\x42\x45\xc9\x29\xd7\x35\xb4\xf6\x3a\x35\x96\xc1\x02\x37\ +\x27\xa7\xee\x22\x84\xa2\xfc\x60\x42\x08\xb0\x6d\x1a\x21\x10\x0d\ +\x07\x08\x95\xe4\x0b\xbf\x43\x8e\xf2\x14\x2e\x3a\x21\x66\xfc\x45\ +\x04\xe0\xa7\x80\xd9\xf4\x91\x8f\x7c\xe4\xaf\x40\xe0\xa4\xc9\xe8\ +\x96\x09\x73\x07\x0f\x1c\x40\xf3\x8f\xeb\x3c\x21\xce\x30\xbf\x66\ +\x60\x00\xcd\xfb\xd4\xed\xf7\x29\xe9\x39\xd6\x7f\x03\x2d\x2d\x42\ +\xad\x58\xaf\x0e\xa3\x57\x33\x79\x95\x15\xa8\x6d\x05\x96\x38\xee\ +\x8c\x1c\x28\x18\xa7\x2e\xe8\x8a\x28\x56\x73\xe5\xe5\x4c\xf4\x80\ +\x88\x40\xfd\x6b\x56\x03\x86\x17\xb9\xa7\x2a\xaf\x84\x80\x8a\x65\ +\xf9\x39\x1f\x8a\xc7\xd4\x20\xcc\xba\x92\x86\x56\xac\x08\x90\xa7\ +\xdc\x76\xe2\xc4\x89\x47\x00\xc6\xf2\xcf\x2d\x00\x24\xd7\xf5\xc5\ +\x2f\x7e\xf1\xb3\x84\xbb\x5b\x08\x2f\x36\xc1\x39\x41\x48\x7a\xfc\ +\x89\x27\x34\x06\xd2\xbf\xfb\x77\xef\xd1\xda\xa1\x15\xea\x86\xf9\ +\x54\x44\xea\x92\x8f\xe4\x25\x2e\x11\xbe\x3a\xcc\x59\x26\x1a\x10\ +\x82\x40\xcb\x57\x6a\xfe\xaa\x31\x68\xb4\xe6\xba\xc4\xf7\x11\xad\ +\xba\x79\x8f\xfa\xd6\xae\x55\x1f\xbe\xde\x47\xa8\xeb\xdf\xb8\x56\ +\xf1\x35\xbd\x0a\xf7\xf4\x6b\xd5\x75\x5b\xd4\xbf\xe1\x06\x0d\x6e\ +\xde\xac\x9e\xd1\x51\x2d\x9c\x1a\x57\xdf\x48\x9f\x16\x16\x27\x14\ +\xab\x53\x64\x95\x5d\x35\x89\x4e\x01\x39\x0a\xa6\x92\xaa\x01\x9e\ +\x41\x04\xd1\xc3\x07\x2b\xf0\xbe\xf7\xbd\xef\x3d\x2d\xa9\x71\x8d\ +\xa5\xeb\xda\x4f\xf0\x81\x07\x1e\x78\x13\x7e\xff\x1e\xc2\x9d\xcd\ +\xe3\xa7\x88\xc9\xa0\xaa\x8e\x1e\x79\x59\xb7\xec\xd9\xad\x75\xc3\ +\xc3\x4a\x4b\x84\x38\xc1\x78\x40\x41\x98\x1b\x20\x16\xa7\x07\xfb\ +\x5b\x0c\x37\x5a\xc4\xf1\x15\x82\xb8\x96\x12\x84\xcc\x55\x37\xed\ +\x91\x83\xfb\xa8\x69\xdc\xe4\xea\xcc\xc4\xf1\xd7\x55\x27\x19\x8a\ +\x45\xc3\xdc\x1f\x30\x67\x3a\xff\xc9\x2b\x57\x14\x4b\x74\x6b\x64\ +\xeb\xf5\x44\x08\xbf\xe2\xc2\x32\x4c\x74\xc0\x3a\x6b\x27\x4e\xca\ +\x9b\x5f\xd0\x0c\x19\x29\x25\xb7\xe0\xe5\x81\x0f\x7e\xf0\x83\x9b\ +\xcd\x04\x3f\x4b\x00\x0e\xda\xcf\x50\xca\xfe\x21\x26\x18\xb0\xf1\ +\x9e\xd4\x76\xec\xe8\x98\x8e\x1c\x3a\xa4\x34\xfe\x75\xeb\xce\x5d\ +\x4a\x35\x05\xd8\x11\xaf\xc3\x3e\x28\x24\xc7\x6d\x58\x06\x52\x83\ +\x43\x56\x83\xfc\x55\xc3\x34\x74\x25\xf3\x8d\xd6\xb1\x71\x11\x09\ +\x0d\xaf\xd3\x10\x89\x12\xcc\x9b\x73\x96\x3c\xa8\xf3\x8c\xb8\xbf\ +\xd1\x2c\x2b\x90\xea\x95\xcf\x0a\x51\x10\xff\xb3\xd7\x20\xc6\xfa\ +\x72\x4e\xab\x6f\xbc\x49\xc9\xe1\x5e\x25\x03\xb8\x20\xcf\x08\x57\ +\x75\x4f\x9f\x55\x1d\x41\xd4\xb3\x39\xcd\xce\xcc\xa8\xbb\xbb\x3b\ +\x7a\xeb\xad\xb7\xfe\x91\xa4\xf0\xcf\x12\x40\xe0\x43\x1f\xfa\xd0\ +\x1b\x30\x99\xdb\x0d\xf3\xb5\x72\x19\xb0\x9b\xd0\x91\xc3\x87\x34\ +\x4b\x4e\xff\x4f\xde\x7c\x87\x92\x86\x51\x28\x0e\x85\x78\x9a\xe5\ +\x4b\x56\xe3\xae\x65\x32\x92\x4c\x6a\x68\xcb\x66\x05\x11\x56\xc7\ +\x0a\x3a\xcc\x73\xc0\xf9\x80\x86\x77\x6e\x53\x7a\x68\xa8\xe3\x16\ +\x1d\x21\x5d\x1e\xbd\xf6\x33\x35\xaf\xa6\x68\xba\x5b\xf8\xc8\x35\ +\x56\x64\x05\x56\xab\x2a\x46\x6a\xdd\x7b\xfd\x76\xd2\xeb\x16\x77\ +\x81\x5a\x5d\x4d\xc0\xba\x81\x00\x3c\xb2\xc8\x02\x0a\x34\x25\xf8\ +\xca\x95\x2b\xdf\x73\xdf\x7d\xf7\x6d\x90\xe4\xfc\x54\x01\x50\x8b\ +\x27\xdf\xf6\xb6\xb7\xdd\x4f\x1d\xef\x33\x0f\xe5\xc9\xc0\xc6\x4f\ +\x9e\xd0\x19\xd2\xdb\x35\xc3\x2b\xb5\xb2\x3b\xa3\x64\x87\x79\x16\ +\xe4\x73\x01\xa6\x96\x6a\x34\x73\xfc\x24\x7e\x58\xb1\x4c\x53\xda\ +\xe2\xab\xa4\xc0\x7d\xbd\x57\xb9\x43\x72\x20\xad\xe4\x86\x21\x85\ +\x13\x21\xfb\xbd\x01\x68\x4d\x1d\x79\x45\x2e\xc2\xbe\xc6\x6d\x9a\ +\x8c\x12\xf7\xa6\x25\xe6\x6b\xaa\x7e\xf9\x9a\xd7\x06\x53\x5f\x90\ +\x68\x43\xe1\xd4\xbd\x79\xbb\xc2\x71\x8a\x29\x2c\x2f\x64\xc2\x2d\ +\xb9\x81\x26\xa7\xe4\x52\x8c\x09\x25\x2e\x92\x3d\xd2\xa3\x08\xdd\ +\x7e\xfb\xed\x1f\x35\x6c\xfe\x14\x01\xd8\xa4\x67\xd5\xf0\xf0\xf0\ +\x9b\x6d\xd3\x02\x9a\x45\x92\xe3\xc7\x8f\x2b\x37\x33\xab\x3d\xdb\ +\xb7\x2b\xe1\xb5\x98\x0f\x7b\x6d\x34\xae\xd4\x44\x1b\x0b\x33\x6e\ +\xa8\x92\x5d\xd6\xa5\x23\x47\x54\x5e\x5a\x6a\x23\xbb\xd4\x43\xde\ +\xde\x0b\x36\x38\x8e\x0f\xd7\x58\xad\xae\xf5\x83\x72\x9d\x96\x36\ +\x2b\xa4\xd2\xe7\x5f\x78\x41\x59\xf2\x8a\x2b\x35\xeb\x59\x17\x60\ +\x6c\x0b\xc3\x4f\x7c\x0f\xf6\xad\x92\x17\xc8\x09\x6e\x38\x57\x63\ +\xee\x9a\x82\x31\x4f\x91\x95\x09\xa5\x46\x37\x2a\x3e\x30\xc2\xf7\ +\xa0\x65\xc6\x2f\x59\xc5\x80\x8e\x6a\x5e\xbc\x64\xb1\xa0\x8a\x40\ +\x5c\xce\x01\xea\xef\x06\x13\xd3\x3f\x4d\x00\xa1\xfb\xef\xbf\xff\ +\x1e\xc2\x5e\xcc\xdc\x5c\x06\xfd\x2f\x9e\x3b\xa7\x4b\x50\x17\x68\ +\xba\xb2\xaf\xcf\x32\x1f\x31\xc9\x89\xf5\x41\x34\x58\xc2\x02\xaa\ +\x2c\xca\x6f\x17\x6b\x35\x39\x05\x5e\x2c\x9d\xbf\x60\x90\xdd\x32\ +\x11\x27\x3d\x1d\xdd\xbd\x4b\xc9\x15\x5d\x2a\xe3\xef\x31\xc2\xd4\ +\xf2\xc4\xa4\x2e\xec\xdb\xaf\x6a\xbe\xd0\x36\xfd\x46\x27\x62\x40\ +\xae\x25\xbe\x5b\x6c\xa9\x15\x73\xea\x1e\xdd\x2c\x67\x78\xbd\x6a\ +\xf1\xaa\xea\xe1\x05\x79\xf1\xac\xba\x6e\x5a\xa3\xfe\x37\xbf\x13\ +\xdc\x59\x05\x58\xc2\x38\x40\xe9\x48\x90\xcd\x2a\xad\xe6\x1d\x98\ +\xaf\x9d\x3f\x2f\x1f\xf3\x93\xbe\x1b\x2b\xe8\xff\xd8\xc7\x3e\xf6\ +\x96\x2b\xf9\x0e\x74\x0e\x4c\xbc\x5f\xb7\x6e\xdd\x3f\xb5\xfd\x3a\ +\xc8\x80\xdf\xc4\xd9\x73\xca\xcf\xcd\x69\x23\x05\x89\x61\x3e\x6a\ +\xd2\x52\x99\x2c\xcd\x11\xff\xc1\xb0\xf1\x39\x4f\x35\xbf\x83\x96\ +\x1b\x62\xdd\x36\x7e\x2f\xf2\x5c\x79\x69\x59\x7d\xeb\xd6\xca\x47\ +\x8d\x2f\x01\x58\x2a\x29\xda\xb7\x5a\x0b\x2f\x3d\xa5\xec\x89\x39\ +\xee\xbd\x3a\x3a\x74\xa2\x87\xeb\x95\xe4\x73\x4c\x1e\x11\x56\x80\ +\x46\x49\x61\xfa\xac\x62\x3d\x03\xea\xb9\xee\x06\x35\x86\xd7\xa9\ +\x5e\x29\xda\x7b\xd3\x3c\xeb\x0f\x84\x54\x2f\xcd\x6b\xf9\xcc\x01\ +\xf9\x38\xbe\xaa\xbc\x75\x11\x22\x19\x63\x63\x72\x52\x3e\x5c\xb3\ +\x1a\x29\x8b\x2e\xb4\x46\x46\x46\xee\x91\xf4\xb7\x50\xf5\x4a\x01\ +\xf8\xe8\xeb\xf5\x51\xec\x6c\x43\x00\xb6\x46\x5f\x9a\x9f\xd7\x0c\ +\xc0\xe7\x15\x8a\x1a\x1d\x18\x84\x79\x4f\xe0\x7d\x0b\xf4\xd4\x12\ +\x00\xa7\x14\x2a\x4b\x95\x4c\x42\x3d\x23\x61\x92\x91\x90\xb8\x6c\ +\x85\x20\xa8\x00\x08\x25\xfa\xfb\x59\x5c\x55\x0d\xe2\x7d\x94\x92\ +\x36\x68\xd2\x65\xaa\x44\x0b\x1d\xed\x4c\x11\x8b\x69\x9b\xbd\xcb\ +\xbc\xf4\x06\xca\x05\x25\x82\x43\x6a\x54\x29\x74\x66\x2f\xa8\xd0\ +\x33\xc8\x3c\x2b\x69\x93\x05\x99\x2b\x6d\x05\x40\x6f\x0d\x21\x56\ +\x55\xbc\xf4\x8c\xca\xf3\x17\x98\x2c\x70\x75\xaa\x67\xc0\xb5\x84\ +\x30\x97\xb3\xaa\xd3\x91\x0a\x66\xba\x2c\x18\x92\x22\xdf\x2a\x29\ +\x7e\x8d\x00\xde\xf7\xbe\xf7\xed\xa4\xe7\x96\x32\x75\x7e\x1d\xbf\ +\x5e\x64\xf1\xb9\xf9\x39\x85\x78\xa8\x2f\x95\xb4\xa6\x1f\xb8\x42\ +\xfb\x12\xa3\x44\x4e\x8e\x65\xf4\xd3\xcc\x1c\x1a\x54\xaa\xe6\x80\ +\xcc\x2d\x21\x48\x56\x10\x2d\xcd\x3a\x15\x85\x32\xd7\x59\xbb\x4b\ +\x76\xf7\x90\xae\x26\x61\xfc\xef\x05\xb5\x6c\x05\xd0\x10\x12\xc0\ +\xd7\xc1\x1f\xa7\x2e\xa9\xc6\x5c\x01\x42\x20\x45\xce\xd8\x8f\xd1\ +\xf4\x0d\x4a\xaf\x24\xc4\xca\x69\x27\x57\x2e\x65\xf2\x69\x15\x27\ +\x9e\x43\x18\x01\x6b\x8d\x57\x49\x80\x63\x38\x96\x43\x16\x5b\xa3\ +\x3f\x11\xdb\xb8\xd1\xe2\x55\x32\x99\x1c\x7d\xef\x7b\xdf\xbb\x96\ +\x56\xda\x92\xb9\xab\xe3\x0b\xc1\xcd\x9b\x37\xef\x68\x58\xe0\xf1\ +\x6c\x03\x73\x79\x76\x4e\x55\xe2\x68\x8c\xef\x69\x90\x36\xc8\x1f\ +\xf5\x75\x90\xda\x35\xe4\x5a\x72\x2b\x1c\x67\xb3\x30\x38\x48\xd2\ +\xe2\x5a\xc1\xe2\xfb\x68\xc7\xf8\xb1\xa1\xba\xdc\x26\x85\x4c\x77\ +\x9f\xd5\x78\xc7\xd4\xbd\xcb\x73\xb9\x1d\x74\x87\x60\x3c\x88\x30\ +\x09\x7d\xcc\x63\xae\x63\x05\x7e\xf9\xf2\x21\x95\x4f\x1d\xd0\xc2\ +\xab\x87\x39\xc7\xf9\xa6\xc1\x9e\x25\x15\xce\x3f\xa6\xc2\x1c\xbd\ +\x01\x04\x5f\xcf\x5f\x5b\xf9\xda\x39\xc1\x19\x17\x6b\x0e\x4a\x82\ +\x3f\xdb\x7e\xa7\x48\xba\xd1\x28\xfd\x4a\x0b\x08\x63\x1a\xd7\x99\ +\xf0\x02\x59\xd4\x2c\x90\x50\x08\x41\x24\xda\xa5\x6c\x80\xf3\x72\ +\x98\x54\x90\x73\xd9\xd3\x6c\xde\xdf\x58\x32\xa5\xe9\x9c\xa2\x83\ +\x6b\x94\x3d\xf4\x8c\x2a\x97\x6a\x1d\x3c\xb0\xc5\x4c\x78\x75\x4c\ +\x99\x70\x54\x24\x16\x5a\x9a\x9c\xe0\xba\x07\xe3\xcd\xcb\xe9\xb0\ +\x5b\xad\xd1\xe8\x98\x57\xe0\x62\x45\xd1\xeb\xd7\x60\xe6\x61\x2d\ +\x1e\x3b\xa2\xca\x82\x1f\x86\x5b\xf7\xf8\xfc\x35\x85\xce\x9d\x56\ +\xa3\x56\x51\xd7\xaa\xf5\x98\xfe\xb3\xaa\xcc\x8f\xa9\xb4\x80\x5b\ +\x16\xa5\x7a\xe1\xda\xfe\x07\xcc\xd8\xf4\x98\x57\x4e\x56\x79\x00\ +\x9d\x3d\x0d\x18\xae\x6f\x0b\xa0\x61\x05\x40\xba\x18\xe5\xe4\x68\ +\x5b\x00\x36\x01\x2a\xe7\x73\xf2\xd7\xea\xb6\x3b\x13\x70\xeb\x98\ +\x62\xf8\x1f\x2c\xa8\x3c\xa8\x56\xc0\xdf\x27\x4e\xab\x67\xe3\x0e\ +\xe5\x87\x46\xc9\xc2\x9e\x57\x79\xc1\x33\x8b\x87\x19\x68\x68\xc0\ +\x40\x33\xa1\x2a\x8e\x35\xc0\x2c\x9d\xe2\x46\xa5\x53\x00\x59\x37\ +\xc1\xda\x96\x54\xca\xe4\x94\x19\xb8\x9d\x67\x69\xa2\x5e\xbc\xa0\ +\xfc\xc5\xc6\x55\x40\x19\x8c\x73\x5f\xed\xbb\xf2\x6e\xbd\x59\x95\ +\xc9\xa7\x54\x5e\xac\xa9\x59\x8c\xaa\x3c\x57\x27\xa7\xa8\xf2\xb7\ +\xac\x17\x5d\xbd\x4c\x5c\x5a\x46\x08\xf4\x26\xa9\x8c\xac\x52\x00\ +\xc3\x75\x6d\xe5\xd7\x6d\x82\xcd\xc9\x08\xfe\xdf\xdd\xa9\xc4\xea\ +\xa0\xa6\xcb\x03\x41\xd3\x91\x09\x88\x73\x39\x72\x11\x34\x68\x7c\ +\xfc\x27\xd2\x69\x66\xc4\x4c\x9b\xf4\xec\x12\xe4\xe7\x45\x0d\x6c\ +\xd8\xae\xd2\xf8\x51\x98\x58\xb4\x02\x18\xde\xb3\x4b\x4e\xb7\x2b\ +\x07\x21\x86\x58\x40\x64\xc5\x88\x4a\xaf\xce\x6a\x74\xcf\x1b\x25\ +\xaf\x85\x01\x67\x9e\x79\x56\x7e\xea\xfd\x08\x7d\xbe\xee\x61\x22\ +\x45\x31\xcf\xf5\x9b\x55\xdf\x1c\x63\x0e\x33\x7f\x15\x4d\x2f\x68\ +\xe1\xf4\xb8\x8a\x67\xa6\x34\xe1\xfe\x9d\x32\x83\x39\x84\x44\xb4\ +\x28\x86\x55\x99\xcb\x2b\x10\xa9\xcb\x09\xb3\xf6\x25\x3f\x56\x72\ +\x79\x6d\xd6\x0d\x7d\x75\x97\x90\x5d\xc4\x00\xfa\xad\x1b\xc0\x6b\ +\x7f\xc7\xfa\x2f\x63\x00\xbe\x11\x45\x00\xd6\x02\xdc\x3a\x92\x05\ +\x40\xa8\xeb\x61\xcc\x91\x8b\xf9\x05\x42\x36\x5e\x5f\x4d\xae\x6b\ +\x47\xaf\x8e\x58\x08\x87\x15\x6a\xf4\x10\x5a\x0e\x0f\x0e\x81\xd8\ +\xd6\xcf\x6d\xb8\x13\x0c\xd4\x8b\x59\xeb\x42\x19\xac\x24\x3c\x14\ +\x15\x27\x3b\x58\x80\xe6\x5c\xc5\x46\x42\xea\xd9\x76\x8b\xfc\xa1\ +\x20\xf3\x56\xed\x73\x16\x6b\xcc\x75\x4c\x37\xde\xdf\xa7\x91\x9b\ +\x6e\x26\x5b\xcd\xc0\x64\x5e\xf9\x19\xae\xe5\xfd\x58\x4e\x90\x28\ +\xb0\x48\x32\x86\x9b\x76\xb9\x8a\x64\x58\xcb\x95\x3a\x6a\x97\xe6\ +\x5e\x0d\x1e\x02\x81\x4e\xc8\x8f\x9b\xe1\x2a\x01\x70\x32\x72\xb9\ +\x16\x77\x5b\x80\x17\x96\x14\x89\xf9\x31\xdd\x28\x8b\xd4\x15\x49\ +\xcb\xb5\x82\xf0\x4c\x49\x5a\x5a\xb6\xb1\x21\xdc\x3d\x80\x46\xdb\ +\x80\xe7\x1a\xe1\x34\x31\xfb\x49\xc1\x15\x89\xcb\x0a\x65\x76\xdd\ +\x22\x5f\x2c\xcb\x12\x4a\x24\x31\x45\x25\x56\x39\xca\xec\xbe\x55\ +\x99\xd5\x6b\xdb\x00\x57\x62\xc1\xb8\xa3\x4d\xa6\xda\x64\xc1\xd2\ +\x53\xff\xa6\x75\xd6\x2a\x4a\x53\x92\x9b\x8d\x20\xd8\xba\xaa\x26\ +\xde\x57\x1d\x18\xa4\x14\xee\x62\xed\xc1\xab\x2c\x14\x62\xe4\x79\ +\x9a\xa8\x1d\x01\xc4\x7e\x12\x04\x1d\x4c\xc3\xf1\x0c\x83\xf6\x4a\ +\xd3\x5e\x08\x3a\x52\x18\xb2\xe8\x0f\x98\xd9\x30\xe5\x75\x26\xbe\ +\x3a\xe6\x34\xeb\x46\xca\x06\xa1\xeb\x36\x7d\xc5\x96\xda\xd6\x01\ +\x92\x97\x7d\xf2\xa6\xcf\xab\xb1\x9a\x50\x18\x0a\xab\xff\x86\xdd\ +\xca\x12\x59\x34\x77\xc6\x3c\x49\x65\x78\x17\xf8\xb1\x0d\x2d\x8a\ +\x79\xd0\x7e\x39\xaf\x06\x02\x38\xfd\xa3\xa7\x2c\xd3\xe1\x78\x5c\ +\x83\x37\x5c\x8f\x55\x31\xab\x93\xc5\x22\x82\x6a\xe4\x04\x78\x86\ +\x55\x26\x5a\x79\xf8\x39\x38\x06\xcc\x98\x05\x7b\xf8\x7a\x93\xe7\ +\x9d\x2b\x85\x60\xad\x08\x2b\xef\x84\xe7\x4e\xd2\xd8\x11\x00\x42\ +\xe7\xc3\x85\x76\x3b\xcc\x4f\xa3\x11\x62\x45\x7e\x18\xf0\xe1\x54\ +\x75\xb7\x80\xb6\x42\x52\xbd\x3d\xe7\x55\x42\x68\xb6\x42\x98\x5a\ +\x3e\xe7\x96\x0b\xb8\x90\x09\x93\x56\x8b\x00\x1e\x52\x07\x89\x0b\ +\x53\x17\x94\x1a\x59\x85\x80\x7c\xea\xdd\xb8\x55\x8d\x35\x68\x5c\ +\x20\xbc\x31\x7b\xeb\xaf\x35\x35\x8c\xf6\x4b\x05\xc6\x20\xb1\xbf\ +\x64\x05\x50\xcb\x17\x48\x84\x7a\x94\x59\x13\xa3\x29\x7b\x09\x2c\ +\xc1\xdd\x96\x22\xcc\x5b\x47\x00\xb3\xed\x90\x07\xb9\x0e\x2e\xd4\ +\xb4\x02\xa8\xe6\x6c\xc8\xb2\x82\x11\x14\x08\x87\x6d\xe9\xcd\x77\ +\x53\x17\x94\x0c\xcf\x57\xba\x80\x0b\xff\x95\x8e\x00\x02\xc1\x80\ +\xc2\xc1\x90\x15\x40\xb3\xcc\x12\x17\xa7\xd4\xe0\x38\x94\x34\x3c\ +\xa3\xd5\x2b\xfc\x1f\xe2\x24\xa3\x9f\x3e\x7d\x2c\x69\x05\x51\x5b\ +\x9c\x36\xa6\xd9\xbe\xee\xb6\xcc\xb9\xe8\xd3\xd2\xf1\x83\x68\xc6\ +\x30\x55\x13\x92\xc4\x4d\x70\x2f\x88\x63\x90\xd8\x16\x39\x30\x4b\ +\x31\x55\x2a\xa3\xd5\xcb\xee\x86\xe6\xfd\xa4\xc3\x21\x55\xaa\x13\ +\xe4\x13\x45\x04\xd0\x24\x22\x04\x40\xff\x29\xee\xab\xb5\x75\xd0\ +\xae\x03\x1c\xc1\x2c\x7e\xcf\xd8\xd6\x26\x6b\xf3\x29\x9c\x4c\x5e\ +\x16\x00\xd6\x5e\x96\xe4\x5d\x69\x01\x55\x8a\x85\x2c\x17\xe4\xf0\ +\x2f\x88\xb4\xa2\xd4\xf3\x05\x53\x86\x56\x1c\x55\x2f\x4d\x2a\x0a\ +\x6a\xbb\x4b\x53\x0a\xa7\x43\xaa\x2e\xb9\x1d\xe5\x63\x15\x14\x48\ +\x5d\x52\x33\x19\x55\xbc\xb7\x4f\x75\xb4\x5f\x9e\xba\x88\x00\x0c\ +\x00\x36\x21\xd7\x2c\x02\x01\x38\x2a\x2d\x9e\x52\x61\xc3\x46\xac\ +\x60\xd4\x6a\x85\xa7\xda\xeb\x68\xf9\x37\x44\xec\x9f\x46\x0e\x4d\ +\x0b\x82\xa3\xb7\xdc\x6c\x05\x10\x8c\xfa\x15\x88\xcf\xca\xf5\x16\ +\x50\x42\x59\x71\x94\x51\x9e\xe1\x38\x32\xaf\x6a\x10\x86\xea\x6a\ +\x15\x44\x30\x6e\x4a\x82\x9a\x8d\x6d\x86\xe0\x06\x1e\x3c\x53\x84\ +\x51\x94\x75\xde\x99\xa1\xec\x79\x06\xb7\x63\x01\x4d\x88\x28\xb3\ +\x30\xe9\xb5\x93\x9d\x40\x84\xbc\x9d\xc2\x21\x84\x69\xca\x63\xc2\ +\x19\xfa\x82\x17\x4f\x29\xb3\x69\xbb\xe2\x1b\x57\x28\x71\x5d\x58\ +\xb1\x15\x94\xc6\x2b\xa5\xd4\xfa\xa8\xd2\x3b\x37\x72\x6d\x27\x9a\ +\x0a\xa8\x34\x37\xad\xda\xec\x02\xe6\xd9\xd2\x1e\x02\x80\x18\xb1\ +\x82\xf2\xa5\xa2\x96\x8e\x1e\xe0\xb8\x24\x54\x67\x1b\x9a\x6a\x6b\ +\xbe\x69\xc8\xa5\x09\x33\x8f\xb5\x95\x1c\x2e\x5b\xf4\xc7\xa4\x03\ +\x54\x7a\xa4\xb3\xd5\x29\x3a\x3f\xe4\x23\x7c\x0f\xc5\x68\x84\xa4\ +\x27\x94\x1c\xad\xaa\x6b\x6d\x43\xd1\x6e\x62\xfb\x30\x58\x91\xa0\ +\x44\x4e\x19\x16\x3a\xd6\x60\x5c\x22\x24\x7f\x3c\x81\xe2\xd2\xea\ +\x58\x38\xca\x3e\xcb\xe0\x5e\x69\x01\x15\x5e\x37\x5f\x68\xa7\x8a\ +\x56\x00\x71\x3a\x2d\x61\x80\xca\x71\x72\xaa\x2e\x37\x95\x3b\xfa\ +\x8a\x86\x6e\xbc\x59\xdd\xeb\x37\xca\xb9\x7e\x37\xfe\x99\x67\x81\ +\xb8\x45\x22\x69\xcd\x2b\xc4\xbd\x1e\x0c\x94\x2e\x9e\xc5\x05\x4c\ +\x62\xd2\xb0\x21\xc8\x46\x08\x00\x94\x0f\x7e\x4b\x59\xfa\xea\xb8\ +\x4a\x37\x6c\x53\x6a\x68\x58\xb0\x29\x62\x94\x05\x4e\xdb\xe2\x22\ +\x6f\xaf\x13\x4a\xdd\x52\xc8\x0a\x8e\x05\x83\x17\x75\xc6\x59\xc5\ +\x7a\xa9\x27\xd2\x31\xd6\xd3\x24\xaf\x99\x50\x62\x10\x54\xc7\xdf\ +\xb3\xb1\xba\x92\x83\x8e\x55\x54\xac\xdf\xa3\x36\xc1\xcc\xc9\xf0\ +\xf9\x87\xc9\x1b\xcb\x89\xcb\x47\x63\xc6\x6f\x92\x20\xe6\xe7\x63\ +\x36\x5b\x9c\x66\x68\x5c\x89\x01\xb5\x31\x3e\x6e\xfb\x8f\xfa\x90\ +\x5a\x82\xfa\x3f\xc2\xc3\x4c\x62\x4d\xac\x7c\x3e\xaf\xe9\xe7\x7f\ +\x04\x43\x25\xf9\x9d\x0a\x85\xc9\x08\x4c\x0c\x21\x71\xee\x71\x6c\ +\x1e\x4f\x3c\x9e\x21\xef\x9e\xc5\x8f\x6d\x28\x6d\xbd\xf4\xb4\x16\ +\x00\xd5\x4d\xdd\x40\x9a\x3d\x57\x50\x69\xf2\x02\xf7\x57\xed\x33\ +\x1e\xd4\x74\x49\x9d\x99\xb7\x78\xe1\x04\xe8\x5e\x36\xf7\xd9\x6e\ +\xd1\xf9\x67\x9f\xd3\xf4\xb1\x1f\xab\xb4\x7c\x46\xd1\x01\x3f\x16\ +\x66\xc2\xd5\x8c\x22\xe9\xb8\x42\xa9\xa8\x62\x03\x41\xf5\x6d\x75\ +\xd4\xb3\xc9\x53\xcf\x96\x06\x02\x90\x4d\xd6\x1c\xd7\x47\x04\xf3\ +\xb5\x36\x5c\xa0\x9c\x38\x1d\x67\xe1\x0a\x9d\x4c\xf7\xa5\x97\x5e\ +\x3a\x72\x0d\x08\x3e\xf9\xe4\x93\x87\x79\x97\x56\x32\x37\x38\x94\ +\x9d\x71\x04\x10\xc5\x0a\x8c\x09\x35\x25\xea\x7b\x29\x77\xf8\xa8\ +\xe6\xc7\x0e\x61\xde\x79\x62\xef\x84\x8d\xd9\x96\xbc\x9a\x05\xb7\ +\xfc\xe9\x63\xc4\xe6\x26\xd7\x3d\xcb\x7c\xc7\x05\x3a\x84\x50\xb8\ +\x86\x20\xb0\x1e\x98\xb7\x66\xcf\x09\xc2\x24\xf5\xc1\xf4\x5e\xcd\ +\xef\x7f\xc2\x6a\xd0\xab\x59\x90\x45\x08\x15\x18\x68\xd0\xf1\x09\ +\x71\xef\x12\xe7\x2f\xe2\xe7\x30\x97\x48\x51\x7c\xf5\x70\x2d\x4e\ +\xe1\x14\xa2\x90\xf1\x81\xfc\xed\x30\x58\x43\xf7\x35\xbf\x22\x4e\ +\x00\x1c\x8b\xc9\x0b\x85\x08\xbb\xf4\x12\x4c\x94\x81\x30\xff\x69\ +\xb6\x1b\x9d\xfc\x49\x10\xf4\xf8\x5c\x64\x33\xc3\xab\xd4\x04\xdb\ +\x48\x15\x49\x66\x32\x4a\x50\xe2\xe6\xe9\xa8\xd8\x5c\xda\xe5\xe1\ +\x0b\x35\xcd\x3d\xff\x14\xdd\x9d\x21\xc5\xfa\xfa\x55\x5d\x30\x66\ +\x69\xea\xfd\x10\xe0\x35\xa7\x3a\x55\x57\x2d\x17\x31\xcc\xb6\xa3\ +\x83\xc9\x0f\x60\x1e\x57\x41\x8a\x9c\x73\xad\xc9\xe3\x9b\x30\x58\ +\x80\xa1\x79\x79\x95\x33\xb8\xd8\x51\xac\x62\x99\xe2\x86\x34\x35\ +\xe0\xb4\xdc\x47\x02\xe9\x23\x58\x98\x41\xf5\x79\x70\x61\x49\xa1\ +\xae\x1e\x1a\x17\x71\x14\x94\xa0\x59\x02\x40\xc3\xa4\x70\x51\xb1\ +\x36\x61\x31\x6e\x1d\xed\x57\xc0\x8c\x0a\xd1\x05\x73\xf1\x27\x53\ +\xaa\x74\xa5\x71\xdb\xf5\xca\xb6\x37\x66\xcd\xcf\xcf\x1f\x94\x94\ +\xfd\xc9\x96\x58\x13\x9a\xc7\x0b\x9e\x05\x21\xad\x99\xf8\x31\x9d\ +\xf4\x9a\x35\x0a\xa6\x52\xed\xa6\xa4\xd0\x9c\xa3\xfc\x49\x1a\x25\ +\xfb\x9e\x46\x71\x86\x81\x32\x42\xb8\x00\xd3\x33\xaa\x2d\x2f\x81\ +\x65\xa1\xab\xc2\x97\x07\xb5\xcd\x1f\x42\xe3\x6a\xa0\x41\x97\x89\ +\x2e\xaa\x3a\xbf\x17\xac\xd8\x8b\xc6\x8f\x32\x4f\x56\x45\x84\x0b\ +\xd6\xd8\x8c\xce\x41\x60\xe4\x06\x3c\x5f\x67\xfe\xf3\xcc\x3b\x4b\ +\x68\x0e\xc2\x78\x44\x0e\xc2\xf6\x05\xad\x10\xf0\xeb\x2e\xe6\x8b\ +\xf3\xbd\xdd\xaa\xc9\xe1\xf7\x65\x42\x78\x1d\xed\x93\x70\x05\x33\ +\x19\xa5\xae\xdf\x2a\x5f\x3c\x66\x9b\x21\xa6\xd7\xc1\xde\x81\xc7\ +\x84\x4a\xff\xa1\x9e\x60\xe9\x3b\xdf\xf9\xce\xf7\x30\x91\xaa\xc1\ +\x02\x87\x50\x18\xe7\x0d\x4c\x64\x90\xb4\x36\x16\xb5\x21\x05\xb9\ +\x80\xf2\xd2\xf2\xe1\x63\x5a\x3a\x31\x66\x72\x76\xa8\x26\x37\x3f\ +\xa7\xe5\xb1\x7d\x2a\x4d\x2f\xb0\xc0\xa0\x01\x1c\x8b\x1d\x3c\x70\ +\xd9\xfc\x1b\x90\xcf\xef\xa2\x4d\x63\xf6\x27\x08\xaf\x17\x44\xc5\ +\xc5\xb1\xc9\x14\x49\x6d\x67\xc8\xeb\x0b\x71\xc1\x91\x15\x58\x85\ +\x0c\xaf\x1b\x8c\x49\xf6\x0d\x12\x96\xbb\x15\x80\xe9\x96\x19\xc9\ +\xb6\xcd\x85\xf6\x1d\x5f\x08\x0e\x18\x9b\x30\x8e\xe9\x8b\x42\xc8\ +\x57\xc0\xfc\x3d\x08\xe4\x5f\x0e\xfa\xb4\xfa\xce\x3b\x55\x67\x1d\ +\xed\x0d\x1d\xcb\xff\xf3\xab\x5f\x7d\x54\x92\x7b\x4d\x4f\x50\x2c\ +\x85\xed\x25\x63\x48\xe8\x50\x3c\x1e\xbf\x85\x92\x51\x41\xd0\x33\ +\x45\x27\x25\x4b\x77\x55\x24\x27\xcc\x62\x2b\xad\xdc\xb9\x3a\xfe\ +\xba\x4f\x09\x5c\x21\x94\x4e\x09\x75\x63\xa2\x05\x15\xcf\x03\x82\ +\xe5\x59\xe5\xa7\xd1\x98\x79\x3e\x81\x76\x22\x61\xae\xdb\x82\x04\ +\x90\x42\x33\x69\xa8\x2f\x20\xc0\xc5\x76\x8b\xb9\x04\xb3\x2e\x89\ +\x48\x85\x50\x9b\x27\xf5\xbe\x84\x15\xd4\x5a\xcf\xf8\x4d\x76\x88\ +\x40\x8a\x97\x6b\x14\xdc\xa3\x6c\xdd\x11\x0d\xb5\xdc\xac\x0e\x55\ +\xb8\x37\x8f\xd5\x2c\x04\x14\xc8\x13\x26\x11\x8c\x47\xdc\x0f\x6c\ +\xda\xa0\x24\x2f\x6f\xe7\x0a\x79\xdb\x0d\x62\xd3\xc4\xe3\xf9\x62\ +\x71\xca\x4a\xf2\x5a\x01\xd8\x93\xb3\x7b\xf7\xee\x7d\x84\xf6\xb8\ +\xd9\xdc\xe8\x04\x89\x02\x49\x04\x50\xe4\xbd\xa0\x72\x79\x28\x67\ +\xb5\x5a\x2b\x38\xca\x9d\x9e\xd7\x12\xe7\xfb\xf7\xec\x84\x11\x59\ +\x8d\x37\x1d\x17\x01\xd5\x29\x54\xa6\x68\x5e\x56\x6c\x1c\x0f\x63\ +\xce\x84\x22\x50\x1b\xad\x24\x73\x8a\x0f\x61\x5d\x32\x61\xcf\xb1\ +\x59\x9c\xc7\xc2\xb2\x2f\x5f\xd2\xfc\xcb\x0d\x30\xc6\xa7\x64\x66\ +\xb0\x53\x9e\xd8\x66\x4b\xad\x14\xc6\x5d\x7c\x8a\x90\x03\x78\x80\ +\x26\x21\x02\xa1\x76\xf3\xf7\x10\x08\x2e\xa8\xb2\xd1\x08\xb8\x32\ +\x8b\xf6\x97\x30\xff\x32\x18\x80\xdb\x9e\x25\xc3\xdc\xf0\xcf\xde\ +\xad\xba\xcf\xe9\xec\x55\x74\xbf\xff\xdd\xef\x7e\x05\x26\x4b\xe2\ +\x73\x8d\x00\x3a\x49\xd2\xfe\xfd\xfb\x1f\xc7\x0a\x5e\xd9\xbe\x7d\ +\xfb\x36\xfa\x67\x0a\x00\x84\x5d\xbb\x76\x69\x79\x0e\xf3\x86\xa9\ +\x26\xa4\x86\x30\x59\x72\x83\x53\xa7\xd4\xbd\x69\x2d\x0c\x46\xf0\ +\xd7\x12\x3d\xfe\x57\xb4\x34\x0e\x63\x2d\x03\xb3\xa6\x7f\xfe\x99\ +\xe7\x8c\x55\xab\x7b\xa3\xc7\xcb\x4d\x97\x4c\x2e\x88\xb5\xa0\x79\ +\x00\x8b\x66\x08\x02\x80\xc9\x2c\xe9\x33\x9a\xf3\xc8\x00\x27\x5e\ +\xdc\x7f\xe5\x0e\x26\xee\x97\x46\x76\x01\x8e\xfd\x54\x99\x7d\x30\ +\x69\xe6\x75\x0a\x08\x1d\xa0\x2d\x92\x3c\x65\x6b\xf2\x2f\x32\xd7\ +\x14\x82\xce\x05\x01\xbf\xa8\xf2\x7d\xdd\x8a\xdc\xb2\x5b\x29\xc0\ +\x6f\x1e\xed\x9b\x8d\x1d\x67\x4e\x9f\x7e\xe2\x99\xa7\x9e\x3a\x20\ +\x56\xff\x53\xdf\x0e\x77\xb2\x42\x5e\x8b\xf9\xb6\x6c\xd9\xf2\x16\ +\x3a\xc5\x8e\x49\x8a\x82\x50\x9d\xee\x6a\x93\x56\xb7\x8c\x00\x6c\ +\xda\xea\x90\xa2\xd6\xd0\x68\x17\x3e\x38\x21\x77\xf9\x15\xb0\xa0\ +\x2c\x8c\x11\x80\x74\xac\x69\x63\xe1\x24\x55\x52\x7a\xb5\xa7\xde\ +\x55\xae\x7a\x77\x05\x40\x72\x98\x08\xf9\xb0\x0e\x23\x00\x21\x08\ +\xfc\xff\xac\xa7\xec\xb4\x0f\x30\x75\xae\x69\x3a\xe1\x5d\x60\x90\ +\xa3\x44\xcc\x53\xa8\xa7\xfd\x72\xd4\xb6\xa1\x58\xc3\x32\xda\x9f\ +\x02\x57\x26\xb9\xe7\x22\x20\x59\x00\x24\xfb\x07\x75\xaa\x2f\xa5\ +\x1d\x0f\xfe\xa1\x6a\x91\x90\x49\x7a\x44\x92\x57\xfb\xc6\x23\x8f\ +\x3c\x38\x7e\xf6\xec\x31\x33\xe5\xcf\x7a\x3d\xee\xb2\x0d\x75\x86\ +\x77\x69\xdb\xd9\x6a\xb2\x26\x12\x8d\xb2\x80\x98\xc2\x50\x69\x6e\ +\x16\x90\xa1\x2f\x8f\xd9\xa2\x3d\x00\xad\x81\xc4\x27\x15\x0c\x9d\ +\xc5\xa5\x2b\x80\x95\x09\x18\xd4\x06\xa4\xa6\x80\x34\xcd\x89\xa6\ +\xba\x60\xbe\x67\x65\x83\x66\x87\x0f\x40\x0d\x60\xbe\x41\x9b\x5b\ +\xd8\xac\xa6\x2d\x80\xfa\x82\x47\xb2\xe3\x53\x69\xde\x0a\xa5\xa3\ +\xfd\x4e\x25\x6b\x29\xc1\x5c\xb1\x3e\xb5\xdc\xad\xc1\x89\x3c\x37\ +\xce\x50\xfa\xe2\xd1\xc1\x69\x7c\x3f\x6b\x36\x47\xf4\xea\x04\x09\ +\xd2\xba\x7f\xf7\x51\x45\x79\xf9\xba\x48\x64\x9a\x9b\x9b\x63\x2f\ +\xd3\xfe\xaf\xfd\xcd\xc3\x0f\x3f\x64\xf2\xb9\x9f\x77\x83\x44\x89\ +\x0d\x88\xb3\xec\xb8\x7a\x07\x1b\x0c\xc2\x30\x6f\x22\x01\x42\x88\ +\xab\x44\xf9\xe9\x00\x88\x04\x5d\x5b\x76\xc6\xd3\x15\x16\xd6\x80\ +\x29\x07\x40\x74\x38\x86\xf1\x98\xc7\xf9\xa6\x52\x7d\x9e\xd2\xc3\ +\x4d\xa5\xb7\xf8\x31\x5f\x7c\x33\x12\x82\xa2\x58\x40\xbc\x85\xe0\ +\x4d\x59\x60\x13\x0c\xb9\xcb\x9e\x0a\x0b\x3e\xac\x47\xd7\x7e\x9a\ +\xcc\xdb\x83\x10\x98\xd3\x66\x83\x26\xdd\x5d\xa0\xc4\x9d\x26\xde\ +\xcf\x60\x55\xb9\x30\x80\x99\xd1\x59\xf2\xfd\xf0\xbb\xde\xae\x91\ +\xb7\xbd\x55\xd9\x72\xc9\x68\xde\x00\xdf\xe4\x9f\xfd\xf1\x1f\x7f\ +\x14\x0c\xb8\xe4\x32\xd3\xcf\x2b\x80\x06\x7e\x33\x07\x72\x3a\xec\ +\xc8\xbc\xdd\xb8\x42\x10\x21\x18\x30\x0b\x43\x65\xfa\x73\xbe\x4a\ +\x99\xa2\xa4\xa6\x44\x0f\x9d\xa3\x5e\x13\x8d\xa0\xa0\x6c\x46\x16\ +\xee\xf6\x51\x2c\xf9\x14\x1d\xf6\xa3\x75\x3f\x11\xc1\x68\x3e\x0c\ +\xf3\x09\xf0\x20\x45\x0c\xa7\x34\x05\xc5\x65\x30\xc0\xad\xdb\xf6\ +\x99\x93\x6d\x08\x78\xa4\xd1\x69\x31\xe4\xca\x8f\x2d\x61\xa3\xcc\ +\x99\x49\xca\xbe\x2d\xf2\x2d\xa2\xf1\x59\xfc\x7d\x0e\xca\x86\xb9\ +\x9e\xd6\x85\x44\x46\xb9\x9b\x76\x6b\xcb\x07\xff\x40\x45\x22\xce\ +\x2c\x9a\x27\xb3\x73\xbf\xfd\xcd\xbf\x7d\x60\xec\xd0\xa1\xa7\x8b\ +\x92\xfb\x8b\x6e\x92\x32\xfb\xf4\xcf\xd0\x2e\x5f\xcb\x0b\xc5\x8d\ +\xc6\x15\x82\x26\xb4\x25\x13\xb6\xf8\xa9\xd0\xc5\x4d\xc6\x4b\x8a\ +\x67\xaa\x14\x44\x4d\x2b\x00\x27\xe0\x20\x04\x53\x81\xf9\x18\x61\ +\x3a\x1c\xe0\xd8\x6a\x1d\x4a\xf2\x3d\x0d\xf3\x90\x2f\x81\x2a\x5a\ +\x4d\x10\xe2\x9a\xb5\x82\x00\x56\x13\x2c\x21\x04\x62\x77\x35\x27\ +\xce\x31\x9f\x98\xcb\x41\xd3\xe0\x45\x17\x00\x98\x89\xa0\xf1\x3a\ +\xf9\xfd\x42\x58\x21\x28\x98\x37\xf9\x46\x5a\xe7\x48\x17\x67\xe8\ +\x18\xed\x78\xe0\xe3\xaa\x04\xfc\x2d\xe6\xd9\xd4\xf1\xdc\xd3\xcf\ +\xfc\xf9\xb7\xbe\xf6\x57\x7f\xce\x74\xc5\x7f\xcc\x2e\xb1\x26\x54\ +\x38\x76\xec\xd8\x89\x15\x2b\x56\xec\x21\x22\x0c\x21\x04\x6b\x05\ +\x81\x54\xca\x36\x29\x6b\xe5\x9c\x52\xdd\xe6\x5d\x5e\xcd\x34\x25\ +\x21\x41\x7e\xcc\xd1\x6f\xb2\x33\x98\x07\x94\xc2\x31\x4c\x3e\xc1\ +\xf7\x14\xe7\x93\x5c\x8f\x73\x53\xa8\x95\x83\xd9\x1e\xa3\x6b\xdd\ +\xc9\x71\xc0\x93\x18\x7e\x5e\x47\x10\x29\x1f\x58\x40\x37\x0a\x0a\ +\xd3\x0c\x49\x67\x82\x1a\xec\x0e\x28\x19\x20\x45\x07\xe8\x42\xf8\ +\x7b\xa0\x4c\xc7\x38\xd8\xa3\x13\xfe\x08\x9a\xbf\x49\x3b\x3e\xfe\ +\x31\x55\x10\xfa\x0c\xcc\xa3\x38\xb3\x9f\xe9\xd1\xbf\xfc\x93\x2f\ +\x7c\xb2\x5b\x9a\x5b\xfe\x25\xf6\x09\x7a\x68\x69\xe1\xf8\xf1\xe3\ +\x63\xbc\x36\xbf\x0d\x3c\xe8\x09\x1b\x50\x8c\xc7\xa1\x24\x05\xd3\ +\xb0\xf2\x4b\xa0\x30\xd5\xa1\xdf\xd6\xf6\x08\x41\x62\x0c\x30\xfa\ +\xa1\x90\x80\x3e\x04\x84\x20\xcc\xc8\x79\x35\xfc\x26\x77\x87\xcc\ +\x66\xa7\x06\x63\x83\xb1\x2e\x51\x00\xc1\x36\xd6\xe4\x28\xe9\x49\ +\x5d\x34\x63\xbb\x32\x01\xf5\x76\xc3\x3c\x05\x4f\x97\x2f\xac\x70\ +\x93\x88\x54\x04\x43\xdc\x84\xaa\x80\xcd\x8b\x3c\x1f\x7d\xd7\xbb\ +\xb4\xf9\x5f\xfd\x4b\x15\xb1\x94\xe9\x99\x19\xcb\xfc\xcb\x87\x0f\ +\xbf\xf0\x97\x9f\xff\xc2\xbf\x49\x36\xea\x13\xe7\xe0\xe1\x97\xdd\ +\x29\x4a\x16\xeb\xce\x8c\x8f\x8f\x1f\x23\x2a\x98\x04\xa9\x27\x1c\ +\x89\xd8\x4c\xaf\x19\x89\x53\xa7\xaf\x22\xcb\x4a\xab\x9c\xaf\x90\ +\x81\xd5\x2d\x53\x0c\xb6\x2a\x73\xaa\x50\x05\x43\x2e\x0b\xe0\x84\ +\xd9\xa2\x2b\x15\xb0\x96\x62\x95\xe3\x0a\x54\x6b\x51\xc1\x05\xd8\ +\x1a\x8c\xb8\x50\x09\xcc\x00\xe9\xa2\x50\x02\x9c\x48\xf9\xe8\x4d\ +\x40\xa1\x26\xd6\x57\x8f\x23\xdb\x8c\x26\x7c\x51\x1d\x66\x0d\x9b\ +\x1f\x7c\x50\x43\x77\xdd\xa1\x2c\x51\x69\x6a\x7a\xda\x00\x1e\xbb\ +\x59\x0e\xbf\xf8\xb5\xbf\xf8\xef\xf7\x47\xf2\xd9\xf1\xb3\xac\xfd\ +\x57\xb9\x59\x3a\x82\x05\xdc\xc4\xcf\x61\xfe\x94\x24\x69\x17\xdb\ +\x68\x44\xe5\x68\x37\x48\x85\xca\x00\x62\x7e\x5e\xc5\xf1\x17\x15\ +\x29\x8f\x29\x1d\x98\x57\xa8\x51\x6d\xed\x0a\x35\x8d\x55\xfe\xf9\ +\x9a\x10\xff\x1c\x4b\x9d\xfd\x4e\xed\x37\xc4\xed\x1e\x23\x9e\xd4\ +\x29\x67\xa1\x20\xc2\x0c\xa2\x6d\x46\x2f\x2c\x4c\x4e\x34\xc1\x34\ +\x56\xa6\x17\x71\xd7\x5d\xda\xf8\x9e\x7b\xd5\xc0\x12\x17\xb3\xcb\ +\x76\x57\x3a\x95\xac\x8e\x1c\x3c\xf4\xf8\x5f\x3f\xf4\x95\x8f\x77\ +\x57\x4a\xa7\x8f\x4b\xee\x6b\xb1\x5d\x3e\x44\xc7\x68\x2b\x7b\x08\ +\x3f\xc5\x6f\x05\x7e\x97\x5c\xc1\x61\x03\x92\x22\x21\x80\x09\x33\ +\x8e\x19\x7f\xa6\xa7\x57\x3e\x7d\x08\x3f\x3d\xa5\x1e\x65\x11\x48\ +\x49\x81\x6a\xc3\xee\x23\xf0\xd7\x01\x4b\x5b\x11\x43\xcd\x76\xba\ +\x6b\x81\xc3\x69\x63\x82\x9f\xf3\x86\x60\xda\xe4\xfa\x68\xde\xa3\ +\x08\xba\x58\x71\x75\xae\xe1\xd1\x97\xdc\xa3\x4d\xec\x47\x0e\xb2\ +\x1b\x2d\x47\x42\xb6\x40\x92\xc3\xfe\x3f\xa3\xf9\xc6\x81\x7d\xfb\ +\xfe\xc7\xf7\xfe\xfa\x6f\xfe\xeb\x48\xd3\xbb\x78\x04\x91\xbe\x96\ +\x3f\x98\x08\x40\xc3\x3b\x77\xee\xfc\x83\x37\xbd\xe9\x4d\x0f\x12\ +\x26\x53\xec\x20\x17\x20\xa9\xb0\xc9\xfd\x59\x68\xdc\x41\x61\xc5\ +\x9c\x0a\xaf\x9e\x94\x26\xc7\x15\x9a\xbf\xa4\x1e\x9a\x1b\x09\xf2\ +\xf6\x40\x89\xd4\xb5\x4a\xee\x6e\x84\xc0\x3f\xf1\x8c\x7c\x50\x20\ +\x88\x79\x87\x60\x38\xa2\x1a\xe3\x54\xa9\xaa\x59\xee\xa9\x62\x69\ +\x03\x6f\x78\x83\x46\xd8\x7d\xee\x74\xa5\xf1\xa0\xaa\x96\xb2\x59\ +\x9b\xe1\x4d\x63\xf6\x67\xcf\x9c\x99\x7b\xe6\xc9\x1f\xfc\xa7\xa3\ +\xcf\x3d\xff\xcd\x95\xd4\x73\x07\x25\xef\xf5\xf8\xc9\x8c\x03\xa5\ +\xf9\xdc\x7a\xc7\x1d\x77\x7c\x82\xd7\xcd\x6f\xc6\x25\x7c\x84\x4b\ +\xc5\x63\x31\xbb\x83\x3b\x2c\x29\xee\x0f\x28\xe6\x43\xb3\xe4\xe3\ +\x45\x4c\xb4\x3a\x35\xa9\xe6\xec\x8c\x7c\x30\xa0\x82\x79\x77\x50\ +\xb7\x55\x5e\xc3\x54\x85\xe1\x88\x5c\x00\xd6\x4b\x53\xe3\x0f\xf4\ +\xab\x7f\xcb\x56\xf5\x6e\xdd\x22\x1f\x6e\x46\xd9\xa0\x3c\x6e\x96\ +\xe3\x99\x2c\xcf\xd2\xd4\x10\xd9\xaa\xcb\xa6\xcd\xbf\xfb\xc1\xf7\ +\x1f\xfd\x6f\xde\xe2\xe2\xd1\xf5\xf2\x2a\x3f\x92\x9a\xaf\xf7\x8f\ +\xa6\x82\xd0\x8a\x0d\x1b\x36\xdc\x73\xe3\x8d\x37\xde\xbf\x7e\xfd\ +\xfa\x1b\x00\x4a\xb3\xc9\xda\x6e\x47\x09\xe3\x1a\x21\x63\x15\x50\ +\x14\x0d\x47\x8c\x60\x10\x4a\xc0\x74\x6b\x3b\x11\x83\x63\x87\xeb\ +\xe2\x9a\x82\x41\x46\xbf\x5c\x47\xb6\x86\x2f\x03\x6e\x14\x26\x2a\ +\x96\x4a\xc8\xab\xd0\xc9\xeb\xbd\xd3\xe3\xe3\x2f\x1c\xdc\xf7\xe2\ +\x97\xce\x1d\x1d\x7b\x22\xd3\x6c\x2c\x8d\x4b\x8d\x5f\xe7\xcf\xe6\ +\x1c\x28\x02\x0d\xaf\x5b\xbb\xf6\x2d\x3b\x76\xee\xfc\x17\xb8\xc5\ +\x6e\x04\x11\xc2\x42\xac\x20\x00\x4f\x11\x3d\x14\x0c\xc0\x3c\xcc\ +\xf2\xfb\x20\x2c\x3f\x00\x01\x78\x68\x9f\xff\xd9\xa4\xa8\xe1\x79\ +\x96\xea\x00\x62\x0d\xe6\xcb\x30\x6f\x18\xe7\x17\xa5\x26\xa7\x2f\ +\x4f\x9c\x3f\xff\xdc\xe1\xfd\x07\xbe\x7a\xe1\xd4\xf8\xd3\x51\xcf\ +\x9d\x0f\x49\xb5\x73\xbf\x41\x3f\x9c\x74\xa0\x30\xec\xf4\x26\x62\ +\xb1\x2d\xdb\x77\xee\x7c\xc7\xc8\xe8\xe8\xef\x80\x0f\x1b\x32\xec\ +\xd4\x64\x07\xea\xdf\x0b\x02\x4d\x07\x10\x46\xe7\x5d\x9d\xda\xbb\ +\x37\x08\xb7\xb6\x75\x45\x35\x6a\x4b\xd8\xa5\xc5\xc5\xc2\xfc\xdc\ +\xdc\x31\x36\x6b\x3e\x79\xe4\xc5\x17\xff\x4f\xad\x54\x79\x35\xe8\ +\xd5\x97\x03\xa6\x60\x93\x9a\xbf\xa9\x3f\x9d\x75\xd4\x2a\x0d\xa2\ +\xb0\xd7\x8d\x81\x0f\xaf\xdd\xb0\xfe\xc6\x15\xc3\xc3\xd7\x03\x94\ +\xab\x12\xc9\xd4\xca\x70\x24\x9c\xa6\xf1\x8a\x57\x04\xc3\xdc\x6c\ +\x18\xaf\xd0\xb2\x2a\xc1\xfc\x32\x6d\xab\x0b\xec\x4e\x3f\x37\x39\ +\x31\x71\xf8\xec\xa9\xf1\x83\x5c\x9f\xa6\xfa\xcb\x8a\x3e\xd1\xb2\ +\xe4\xfd\x36\xfe\x78\x9a\xba\x0f\xb7\x97\xc8\xf2\x15\x91\x15\x8c\ +\xc3\xe8\x84\x9a\x9c\xc7\xfc\x3d\x47\xb8\x3d\x90\xc8\xf5\x32\x9b\ +\x54\xcb\xa0\x80\xcd\x08\x0c\xd7\xaf\xf5\x8f\xa8\x9d\xdf\xb0\x5f\ +\xad\x37\xf5\x3a\x7f\xfe\x1f\x5f\xbc\xdd\xe6\x1a\x53\x0c\xc2\x00\ +\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x13\x09\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\ +\x1b\xaf\x01\x5e\x1a\x91\x1c\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd7\x09\x17\x17\x15\x19\x49\x86\x70\x41\x00\x00\x12\x96\x49\x44\ +\x41\x54\x78\xda\xed\x5b\x09\x74\x5c\xd5\x79\xfe\xee\x7b\xb3\x6b\ +\xb4\x5a\xb2\x25\xd9\x96\x64\x63\x6c\x83\x31\x36\xb6\x81\x00\xe1\ +\xb0\x34\x14\xc2\xda\x94\x86\x04\xd2\x90\x42\x72\x20\x5d\x20\x14\ +\x68\x08\x4b\x48\x09\x87\xda\xad\x73\x52\x52\x02\x24\xad\x7b\x20\ +\xe4\xb0\x95\xcd\x40\xb0\x1b\x56\x2f\x80\xb1\x2d\xdb\xd8\xb2\x6c\ +\x6c\xd9\xb2\x2c\xc9\x1a\x4b\x1a\x69\xf6\xe5\x6d\xf7\xf6\x7f\x33\ +\xef\xf0\xf4\x3a\x9a\x19\x1b\x26\x3d\xc9\x69\x7e\x9d\x4f\xf7\xbd\ +\xfb\xee\x9b\x79\xdf\x77\xff\xe5\xbe\x2b\x1b\x7f\xb4\x3f\xda\xff\ +\x6f\x63\x38\x0e\x1b\xbb\x05\x75\x52\xed\xf4\x8b\x5d\x33\x97\x5c\ +\x06\xb7\xef\x3c\xa1\xa4\x3c\xd0\xb3\xc3\x42\xcd\x0c\x71\x35\x15\ +\x12\x4a\x22\xc4\x53\xe3\x21\x91\x8d\x85\x84\xc0\x10\x80\x10\xe1\ +\xe8\xd4\x9f\x43\xf9\x83\x16\x40\xfc\xd8\x7f\x95\x68\x5d\x76\x37\ +\xe7\x58\xc6\xd3\x51\x99\x08\x42\x70\x01\xe1\x0e\x12\xaa\xc0\x65\ +\x3f\x84\xec\x81\x60\x6e\x82\x0b\x90\x5c\x10\x82\x03\xdc\x00\xd7\ +\xd2\x02\xba\x32\x2e\x0c\x6d\x48\xe8\x6a\x48\x68\x4a\x48\xe8\xd9\ +\x10\x57\xd3\x24\x54\x7c\x48\x68\xd9\x90\x30\x85\x12\x08\x4d\x7f\ +\x0c\x99\xdf\x3b\x01\xc4\x03\x9e\x3f\xc7\xf9\xf7\xbf\x88\xe6\x45\ +\xcc\x24\x04\xae\x03\x26\x39\x43\x05\x32\x11\x80\xc4\x80\x9a\xcc\ +\x43\xcf\x40\x68\x19\xf0\x6c\x82\x90\x02\x57\x92\xe0\xa6\x50\xb2\ +\x0f\x5c\x48\x04\x53\x13\x4e\xd0\xc1\x75\x2d\x27\x14\x40\xd7\x0d\ +\x03\x24\x0a\x41\x8d\x0a\xae\x87\x08\x43\xc2\xa0\x36\x07\x95\x04\ +\x33\xa1\x0c\x09\x6e\x84\x00\x84\x3a\x1e\x47\xf2\xff\x4e\x80\xa7\ +\x2e\xee\xc4\x99\xb7\x2c\x85\xb0\xc8\x73\x23\x07\xc7\xb9\x28\xd6\ +\xa7\xe7\xa1\x98\xe2\x64\xed\x3e\xd3\x84\x00\x57\x33\xa4\xa3\x42\ +\xc8\x82\x73\x0e\x03\x6e\x70\x12\xd6\x50\x32\x39\x01\x0d\x12\x52\ +\xcf\xc4\x01\xba\x26\xcc\x1f\x6e\x80\x3c\x89\xa0\x27\x68\x60\x4e\ +\x90\x1c\x04\x0f\x01\x3c\xc4\x64\x98\xd8\xd9\x71\x29\xba\xd9\xc5\ +\x10\x95\x11\xe0\x85\x6b\x53\x58\x78\x6d\x20\x3f\xf3\x46\x09\x01\ +\x9c\x62\x38\xc6\x8b\xdc\x35\x1b\xa2\xc8\x58\xf2\x1e\x40\x00\x14\ +\x4e\x90\xdc\x80\xcb\x47\xf0\xe7\x3c\x46\xd7\x75\x18\x9a\x96\xf3\ +\x20\x9d\x33\x12\x27\x09\x3d\x35\x06\x75\xa4\x07\x7a\xa2\x0f\xae\ +\x00\x03\xf3\xe4\x6f\x37\x14\xf1\x3a\x35\xdf\xe8\x58\x81\x04\xca\ +\x98\x0b\x65\x8d\xb9\x72\x0f\x97\x8b\x69\x82\x63\xc6\xb9\x89\x82\ +\x63\xc7\x78\x61\x58\x2d\xb7\xfa\x8b\x8c\x35\x21\xc9\xf9\x3e\xcd\ +\xf4\x96\xd4\xa7\xe2\x48\x34\xc6\x63\x0b\x95\x0f\x3f\xd9\x0b\xd4\ +\xd7\x00\xb3\x2e\x85\xde\x34\x97\x9c\xec\x03\xe8\x43\xab\xc1\xb3\ +\x06\xd4\x38\xae\xc8\x8c\x88\x55\xa2\x1b\x5f\x63\x0b\x50\xd2\x24\ +\x94\x35\x0e\x88\x89\x04\x78\x01\x81\xa2\xd7\x45\x31\x91\x8a\x7c\ +\xd6\xb1\x7e\xb6\x69\x5a\x1a\x48\x1c\x01\x0e\xbf\x0f\xd7\xbe\x35\ +\xa8\x5a\xba\x02\x9e\xe9\xcb\x00\x96\x1f\x0a\xce\xbe\xda\xf3\x38\ +\x4e\x00\x3e\xaf\x00\x42\x4c\x70\xdd\x22\x33\x69\x79\x44\xd9\x87\ +\xe7\xe5\xbd\x80\x50\xfe\xb3\xed\x6b\x79\x11\x0e\xbc\x09\xac\xbd\ +\x13\x7a\x66\x16\x52\x43\x02\xe9\x61\x01\x35\x29\x98\xa1\x62\x49\ +\x25\x04\x28\x7c\x38\xce\x8b\xcc\x6c\x31\x61\x8e\x91\x38\x2f\x15\ +\x5a\x93\x08\x13\x27\xf2\xe9\x31\xe4\xec\x93\xd5\x30\x12\x5e\xa4\ +\x8f\x9a\xe4\xf3\xb7\x42\xc0\x5f\x81\x1c\x20\x0a\xc9\xd8\x84\x4a\ +\x92\x71\x1e\x97\x0a\x25\x5e\x46\x9c\x42\xf1\x6c\xf2\xf6\x44\x31\ +\xdd\x2c\xaf\xd6\x23\xc3\xb2\xcf\x2d\x40\xa1\xdb\x15\x78\x41\xb1\ +\xd8\x75\x1e\x17\x0f\x95\xc2\x44\x59\xc6\xc3\xe2\x83\x44\x3e\x8c\ +\x02\xe3\x1a\x84\xc5\xbc\x72\x02\x40\x14\xcd\xe8\x36\x81\xe3\x4d\ +\x88\x45\xae\x17\x92\x2d\x1c\x1f\x1b\x70\x90\x77\x98\xa1\x43\xa0\ +\xd2\x02\x08\x41\x30\x8e\x3d\xa3\x17\x86\x4a\xf9\x24\xc8\x8f\x31\ +\x29\xc6\x4b\x90\x27\x13\xa6\x07\x4c\x9c\xb7\x0a\x09\xe0\x24\x5b\ +\xbe\xd4\x95\x5f\x03\x94\xff\xac\x42\x0f\x8b\xf5\x03\xa9\x51\x94\ +\x34\x43\xb7\x89\x57\x38\x04\x2c\x18\x05\x0f\x57\x9e\x4c\x91\x6b\ +\x28\xa8\x26\xc5\x45\x8d\x1d\x2e\x4f\x1e\xc8\x2f\x93\xe1\x14\xa0\ +\x12\x65\xd0\x41\xb6\x10\x45\x32\x36\x6c\xa2\xb9\x7e\x10\x98\x75\ +\x0e\x6e\x9d\x13\x60\xf7\x4d\x9a\x10\xcb\xcf\xbc\x33\x09\x02\x36\ +\x44\x25\x04\x40\xc9\x44\x35\xb9\x10\xb0\x88\xb1\x63\x24\x6e\xc2\ +\x3e\xb6\xbf\x27\x6a\xce\xfc\x08\x8e\xd5\x04\xd7\x2d\xe2\x16\x2a\ +\xe4\x01\x65\x56\x7a\x0e\x22\xc5\x88\x95\x12\xc3\xea\x73\x0a\x87\ +\x58\x5f\x01\xf9\xb2\x66\x38\xca\x60\x25\x05\x28\x1f\xdb\x4e\x21\ +\x9c\x64\x0a\x3d\xc2\x26\x6e\x0b\x64\x58\xe0\x40\x9c\xc8\x67\x88\ +\xbc\x54\xe4\x7d\xb5\x74\x15\x70\xa0\xd2\x2b\xc1\x82\x38\xb7\x60\ +\x93\x13\xff\xdb\x0b\x2c\x62\xc2\xe1\xe6\x36\x59\x82\xe3\x38\x7e\ +\x88\xc8\x0f\x03\xb2\x35\x54\x58\xe0\x28\x67\xf6\x3a\xc0\xf6\x82\ +\x0a\xaf\x04\x3d\x55\x40\xfd\x09\xf9\xa7\xd1\xd3\x40\x26\x0c\x24\ +\x8f\x02\x5a\xd2\x99\xe8\xec\x58\x2e\x14\x88\x39\x12\xa3\x53\xa8\ +\x78\x6f\x9e\xbc\x64\x3d\x3d\xb3\x45\xb0\xfd\xba\x74\x15\xb0\xcb\ +\x60\xe5\xd6\x01\xb6\x08\xfe\x29\xc0\xdc\x4b\xe1\x34\x91\x17\x61\ +\x6c\x2f\x10\xfa\x28\xe7\xbe\x85\xee\x4f\x10\x13\xfa\x84\xc3\xe5\ +\xf3\x6d\xe2\x90\x93\xbc\x4d\xd6\xd9\xf2\x12\xcc\xac\x24\x58\xe9\ +\x75\x80\x23\xbb\x17\x1a\x03\x82\x2d\x79\xb4\x5f\x98\x17\xe0\xe0\ +\x6b\xc0\x48\xa7\x33\x1c\x18\x01\x36\x79\xb3\xb5\xc9\x9b\x33\x7f\ +\xd4\x72\xfb\x32\x02\xc0\x1e\x53\x72\x1d\x20\x08\x15\x4d\x82\xb0\ +\x50\xce\x6a\x3a\x80\xd3\x6e\x05\xce\xb8\x17\xa8\x9e\x3e\x21\xce\ +\xed\x7c\x60\x9f\x5b\xe4\xb3\x16\x79\x09\xd4\x5a\x90\xca\x80\xa1\ +\xf8\xcb\x90\xa8\x64\x15\xc0\x24\x19\xdf\x50\xca\xaf\x32\xea\xe7\ +\x01\xe7\x2c\x07\x3a\x2e\x73\x84\x84\x0d\x93\xfc\x41\x22\x1f\xb2\ +\x49\x95\x03\x2b\x2d\x82\x30\xf4\xca\x57\x01\x22\x6a\x27\xaa\x48\ +\x0f\xb0\xee\x6e\x40\xe8\xf9\x73\x6f\x35\x10\x6c\x26\xb2\x27\x02\ +\xd3\x96\xd1\x79\x7d\xc1\x76\x22\x4e\xba\x01\xa8\x9b\x03\xec\x5c\ +\x09\x18\x9a\x95\x00\x09\x89\x03\x80\x62\x91\x17\x93\x00\x8e\x44\ +\x68\x1b\xb7\xa7\xad\x20\x1c\xb8\xe6\x8c\x16\x51\xe9\x32\x88\x89\ +\xe5\x4f\x07\xb2\x61\xc2\x30\x30\xba\x1d\xe8\x79\x16\x68\x5c\x04\ +\xcc\xfe\x33\xa0\xba\x1d\x0e\x6b\x39\x17\xf0\x90\x58\x9d\x14\x16\ +\x9a\x0a\x24\x7b\xec\x99\x17\x25\x92\x9c\x70\x10\x76\x92\x66\x13\ +\x20\x9c\x1e\x90\xfb\x55\xb1\x10\x60\x02\xce\x9a\x3f\x59\x19\xb3\ +\xb6\xba\x47\xb6\x00\x9b\x7f\x00\x7c\xb2\x8a\xba\xb2\x70\xd8\x94\ +\xc5\xc0\x92\xfb\x81\x74\x9f\x49\xbe\x78\xcc\xdb\xfd\xc7\x17\x1a\ +\xa6\xd9\x65\x90\x50\xa9\x24\x08\x51\x58\xd7\x6d\xf2\x85\xab\x3e\ +\x53\x88\x81\x35\x24\xc4\x1d\x40\x6a\x10\x0e\x6b\x3a\x13\x38\xf5\ +\xfb\x05\x64\xcb\x82\x4d\x1a\xff\xce\x7e\xf6\x3b\x5d\x09\x5a\x04\ +\xfd\x8d\x40\xfb\x05\x80\xbb\x2a\x17\x6f\x48\x0f\x01\xf1\x83\xc0\ +\x78\x17\x60\xa8\x13\x44\xa0\x36\x75\x18\xd8\x4a\x22\x2c\x79\x10\ +\xa8\x99\x8b\x4f\x6d\xfe\xdf\x00\xa3\x1f\x00\x87\x9e\x01\x50\x26\ +\xfe\x51\xc2\xf5\x25\x47\x9e\xc8\x83\xeb\xf6\xed\xa2\x32\xeb\x00\ +\xe7\xcc\xfb\xea\x80\xd6\xb3\x60\xdb\x52\x02\xf2\x2b\xc1\xa1\x77\ +\x80\xbe\xd5\x74\x1c\xb1\x17\x3b\x5a\x14\xd8\x7e\x17\x89\xf0\xcf\ +\x4e\x11\xce\x7c\x04\x18\x79\xd7\xac\xfd\xc5\xe3\x9f\x17\xf5\x4f\ +\x27\x69\xc9\x3e\x17\x10\x16\xf1\x8a\x87\x80\xed\xee\x93\x9a\x3b\ +\x08\xb4\x5f\x05\x9c\xf5\x53\xa0\x71\xa9\xf3\xe5\x66\x7c\x2b\xb0\ +\xfe\x72\x40\x8b\xd9\xe3\x3d\x0d\xa4\xdd\x4f\xca\xd7\x7c\x66\xb7\ +\x36\x8a\x84\x06\x9b\xc4\xa1\x2a\x23\x80\x73\x25\x58\xd2\x3c\xf5\ +\xc0\xe2\xfb\x80\xb6\x2b\xf2\x5e\x90\xd8\x07\x28\x47\x80\x54\x0f\ +\xb0\xfd\x56\x38\xac\xfd\x5a\xa0\xe1\xb4\xcf\x50\xfb\x4b\xc2\xb1\ +\x12\x14\xa2\x62\x02\x70\x0b\x02\x50\x62\x40\x78\x17\x30\xb2\x0d\ +\x48\x0e\x4e\xf2\x2d\x0c\x98\xfb\x5d\xa0\xf1\x4c\x20\x3b\x68\x3f\ +\x78\xff\x53\x74\xcf\x3b\x13\x86\x51\xe7\x29\xf7\x1d\x67\x22\x2c\ +\x71\xcc\x9c\xc4\x05\x2a\x97\x03\xec\xfa\x3f\xbe\x17\xd8\x70\x1b\ +\x00\xdd\x0a\x09\xeb\x05\xa9\xe3\x4a\x60\xc6\xc5\xce\xa5\xd9\xc2\ +\x1f\x11\xe1\xdf\x02\x91\x4e\xfb\x41\x77\xdf\x05\x5c\xb8\xd5\x1e\ +\xd7\x4a\x61\x13\x6c\x03\x92\xfd\xce\xd8\x67\x36\x0a\x63\xbd\x04\ +\x80\xcf\xb6\x27\xf8\xe0\x7d\x37\x2d\xdc\xf2\xf6\x4f\xa5\xd2\x55\ +\x80\xc0\x55\xe7\x92\x18\x84\x4c\x08\xd8\xfb\x18\xb0\xfd\x87\x80\ +\x91\x99\xf0\xc9\x6e\xe0\x0b\xbf\x06\x5c\x2e\x7b\x16\xe3\xdb\x80\ +\xd1\x89\x5e\x20\x03\xed\xdf\x2c\x3b\xf3\x4e\x14\xef\x17\xec\x33\ +\xe6\x80\xb7\x37\xf7\xae\x7e\x6b\xc3\xbe\x5f\x90\x08\xac\x68\x0e\ +\x28\xdc\xf3\x73\x2e\x90\xc6\x3a\x81\x0f\x6f\xb4\xfa\x2c\xab\x9e\ +\x0f\xb4\x5d\xe7\x8c\xe3\xfe\x5f\xc2\x61\xd3\xaf\x2e\x41\xba\x4c\ +\xdc\xa3\xe0\xdc\x0e\x83\xe3\xc9\x01\xe3\x8a\x9e\xed\xdc\x35\x38\ +\x7f\xc7\xee\xc1\x7f\x25\x11\x4a\x6f\x89\x81\x3b\x84\xb0\x77\x6f\ +\xf7\x00\x87\x9f\x03\xf6\xac\x84\xc3\xe6\xdd\xe5\x24\x37\xba\x06\ +\x30\xd2\xf6\xf5\xda\xc5\x80\x7f\x6a\x01\xe9\xe3\x24\x6e\x0b\x20\ +\x3e\x83\x07\x24\x33\x19\x43\x81\xfb\xce\xd7\xdf\xec\xba\xe6\x50\ +\xff\xd8\x43\xc5\xdf\x06\x09\x81\x16\xe0\x8c\x1f\x03\x17\x3d\x4f\ +\xed\x0a\x20\x38\x33\x4f\x3e\x3d\x80\x9c\xed\xa5\x9a\xaf\xc5\x27\ +\x78\xc1\xc9\x40\xcd\x7c\x9b\x94\x20\xf2\xd1\x0f\x9d\x49\x73\xca\ +\xd9\x85\xa4\x51\x36\xde\x0b\xc9\x33\x27\x71\x21\xb9\xe5\x63\x12\ +\x20\x95\xc9\x1a\x29\xdd\xc8\x8e\x45\x92\xb7\x3c\xbb\x7a\xeb\x3d\ +\x6b\x5f\x78\xf0\x9e\xc2\x3f\x8d\xf1\x7c\xe6\x5e\x72\x27\x50\x6f\ +\x12\x72\x01\x75\xd4\x9e\xbe\xc2\x76\x7b\x86\xfc\xe2\xe7\xc8\xab\ +\x70\xd8\xd4\x8b\x9d\x33\x1b\xdb\x0c\x87\xd5\x2e\x3a\x0e\xa2\x65\ +\x44\x80\x05\xfa\xb5\xcb\x77\xfa\x2f\x96\x3f\x70\xeb\xeb\x8f\x3d\ +\xfc\xc3\xef\xfc\xec\x27\xf7\x4e\x2f\x5a\x05\x32\x8a\xa2\x27\xd2\ +\x19\xff\xf6\x4d\x9b\x5e\x5a\xba\x74\xe9\x6b\xcf\xbc\xbc\xf9\xa1\ +\x0f\xff\x7b\xe5\xc8\xd9\x97\xfc\xc3\x2a\x47\x12\xac\x99\x0d\x54\ +\xb5\xc0\x61\xee\x1a\xe0\xe4\xef\x01\xdb\xbf\x6f\xf7\x8d\x6e\x00\ +\x3a\xbe\x39\xc1\x0b\x4e\x71\xba\x77\x66\x1f\x1c\x56\x75\xc2\xf1\ +\x91\x47\x89\xbe\x09\x25\x70\xe3\xa6\x2e\xcf\x86\xa1\xfd\x97\x37\ +\xd4\xd7\x5e\x3e\x73\x66\x8b\xf8\xea\xd5\x57\xec\x9a\x36\x6d\xda\ +\x7b\x55\x55\x35\xeb\x33\x59\xf5\x83\x7f\x7b\xe4\xe7\xa3\x39\x01\ +\x14\x4d\xe3\x14\x06\x7e\x90\x71\xce\xff\x76\x67\x77\xff\xb9\x2f\ +\xbd\xb1\xed\x71\xca\x07\xc3\x38\xfc\xa4\x2d\x80\x96\x29\xb2\xf9\ +\x71\x0a\x1c\x96\x19\x80\xc3\x7c\xcd\xce\x87\x56\x87\xe0\x30\x6f\ +\x4b\x59\x82\xe5\xc9\x3b\x63\x9f\x83\x61\x6a\x9d\xf7\xad\xda\x54\ +\xed\x02\x26\xb9\x5a\x87\x47\xa2\x6c\x6c\x3c\xb9\xa8\xb7\x6f\x68\ +\x91\x2c\xcb\xb7\xa9\xaa\xca\xe7\xcc\x99\x73\x7b\x4e\x00\x5d\xd7\ +\x59\x3a\x9b\x0d\x80\x6c\xc7\x8e\x1d\x83\x0b\x16\x2c\xf8\xbb\x35\ +\x6f\xef\x7c\xba\x65\x5a\xed\x73\x27\x9d\x30\x53\x0e\x72\xc3\xda\ +\xc1\xe9\x07\xd2\x47\x81\x40\x33\x1c\x96\x3c\x0c\xe7\x02\x5c\x86\ +\xc3\x5c\xb5\xce\x35\xbf\x91\x82\xc3\xe4\x2a\x1c\x97\xb1\xc9\xfb\ +\x46\xb2\x3e\xbc\x1f\xa9\xc3\xc1\x4c\x2d\x0e\x67\x6b\x30\x1e\x4b\ +\x5f\xa4\xeb\x49\xc4\x62\x31\x28\xe4\xe5\x84\x7d\xc4\xb5\x95\x73\ +\x5e\x6f\xf9\xe2\x2c\xf3\x17\xb8\x10\x8c\xf2\x40\x10\x96\x75\x77\ +\x77\x3f\x63\x18\xc6\xd3\xff\xf9\xf4\xba\xc0\x6b\x91\xb9\x72\x5a\ +\x78\x00\x6e\xfd\xe3\xc8\xf5\xb7\xe5\x57\x83\xb0\x2c\x3b\x0a\xec\ +\x7c\xc8\x49\xb0\xaa\x03\x0e\xd3\xe3\x70\xee\xef\x7b\x50\x60\xf6\ +\xfd\xc7\x65\xe3\x59\x37\x7e\xb5\xb7\x19\xd7\xbf\xbd\x00\xcb\xfb\ +\xcf\xc5\x7b\xb1\x99\xd8\xdc\xaf\xe0\xc0\xde\x2e\xd4\x25\xba\x51\ +\xa7\xf4\x3f\x5a\x53\x53\x73\xe1\xca\x95\x2b\x67\x90\x00\x4b\x67\ +\xcf\x9e\xdd\x23\x49\x12\xac\x6f\x7a\xcb\x05\xb2\x80\xcf\xd3\x94\ +\x55\x95\x46\x4c\x30\x12\xe0\x26\x55\x35\x4e\x5e\xfe\xd8\xda\xd3\ +\x3c\xb7\x5c\x86\xcb\x9b\xfa\xe0\x33\x5f\x7b\x93\x7d\x24\xf5\x26\ +\x60\xee\xd7\xf3\x1a\xf6\x3c\x01\xa8\x24\x82\x3c\xe1\xe1\x5b\x2e\ +\x83\xc3\x52\xbd\x36\x79\x46\x90\xeb\xe1\x30\x6d\x1c\x10\xc7\x21\ +\x82\x99\xe0\x46\xaa\xf0\xec\xee\xa9\xd8\x12\x9e\x06\x4d\xd7\x10\ +\x8f\x8f\x43\x44\xdf\xc3\xe5\x73\x0d\xcc\x59\xe4\xc3\x89\xb3\xda\ +\xe0\xad\x6d\xa6\x3c\x7d\x41\x5f\xfb\x95\xf7\x0c\x03\x10\x0f\x3f\ +\xfc\x30\x23\x5b\x2c\x44\x2e\x6b\x5f\x4d\x78\xc3\x75\xcf\xdf\x5f\ +\x83\xc7\xd6\xee\x6c\x4a\xa6\xd5\x16\xcb\x2d\x38\x01\x07\x0f\x1e\ +\x4c\xb7\xb5\xb5\x7d\x25\x1a\x49\x6c\x5d\xf1\xcb\xdf\x36\xc9\x37\ +\x7e\x11\x97\x64\x87\xe0\x96\x00\x16\xeb\x07\xdb\xfe\x2f\x80\x79\ +\x2c\xe3\xd3\xed\x6c\xc6\xac\x87\xdf\xf9\x03\xe0\xc0\xa3\x66\xc9\ +\xcc\x23\xfc\x2e\xc0\x27\xb8\xaf\x6f\x0e\x1c\xa6\x5a\x02\x38\x45\ +\x98\xb4\x6f\xf3\x60\x10\xab\xb6\x35\x63\xd3\x61\x2f\xa2\xd1\x08\ +\x62\x91\x8f\xf1\xa5\x39\x0a\x7e\x74\x9e\x84\xf3\x17\xce\x04\xab\ +\x9b\x87\x3d\x83\x40\x64\xe8\x10\xa2\x07\x3b\x11\xee\xdd\x79\xf0\ +\x9d\x70\xf3\x01\x00\x7c\xc5\x8a\x15\xcb\xc8\x1b\x3c\x24\xc0\xeb\ +\x00\x72\xa5\xca\xd5\xd8\x58\x23\x65\x15\xad\xdf\xd0\x35\x0e\xa0\ +\x86\x90\x26\x68\x04\x31\xbb\xbf\xff\x70\xf4\x84\xa6\xeb\x87\x8e\ +\x8c\xac\x59\xf1\xe4\x26\x96\xb9\xfa\x6a\x9c\x6f\xbc\x08\x8f\xac\ +\x41\x96\xcd\x4a\x48\xa0\x56\xa6\x96\x59\xe7\x8c\x13\xc2\x5d\x60\ +\x11\x82\x9c\xaf\x9c\x29\x5d\xc6\xa1\xb1\x00\x8e\xc4\x3c\x18\x8a\ +\x7a\x10\x7a\xf5\xbf\x10\xd3\xd7\x21\xcd\xa6\x23\x65\xd4\x01\x24\ +\x6c\x2d\xef\x40\x8d\xcf\xc0\xd4\x6a\x0d\x73\x9b\x32\x58\x36\x23\ +\x85\x29\x7e\x1d\xa6\x0d\x27\xdc\xd8\x70\xb0\x1a\x2f\x75\x4d\xc1\ +\xc7\x83\x12\xc2\xe1\x30\x22\xe3\xe3\xf8\x8b\xa5\xc0\x03\x37\x07\ +\x70\xe2\xbc\x2f\xe4\x12\xb1\x88\x1d\x81\x31\xb4\x1d\x91\x7d\x31\ +\xa4\x14\x91\x4f\x37\x6e\xb7\x35\x45\x60\x2d\x2d\x2d\x17\x9b\xf9\ +\x80\xec\x79\x58\xe6\xba\xfd\xde\x55\x1c\x5e\xff\x12\xa8\x59\x93\ +\xfc\x14\x42\x15\x21\x46\xc8\x10\xf8\x99\xd3\x47\xd7\x6d\x3c\x5c\ +\xf7\x60\x6f\xdf\x91\xfb\x1f\x7e\x49\x42\xf4\x4f\xaf\xc2\x32\x75\ +\x35\x3c\x2e\x1d\x2e\x57\x9e\xbc\xcb\x12\x81\x13\xdb\x50\xda\x8b\ +\xc1\xb8\x17\xfd\x51\x1f\x8e\x24\x83\xd8\x3f\xec\x42\x6f\x48\x43\ +\x3a\x93\x45\x36\x9b\x85\xaa\x66\x20\x44\x1a\x3e\x5f\x06\x81\xc0\ +\x28\x82\xf2\x18\x3c\x48\x23\x6f\x12\x09\xe4\x42\x46\xf7\xc0\xef\ +\xaf\xc7\xec\x66\x2f\x3d\x5a\x35\x14\xe1\x43\x86\xee\x1f\x0a\x8d\ +\x20\x3c\x36\x86\xa0\x17\x78\xed\x8e\x7a\x5c\xf2\x27\xe7\x03\xb5\ +\x27\x43\x28\x29\x18\x07\xd7\xe6\x04\x10\x06\xc0\x49\x79\xc1\x04\ +\x84\xe0\x74\xec\xca\x15\x5f\xf3\xbb\xeb\xeb\xeb\xaf\xef\xeb\xeb\ +\xcb\x80\x6e\x77\xbe\x0d\x2a\xf4\xe9\x00\xb7\x50\x47\xf0\x13\xa2\ +\x9b\x81\x44\xbb\x0e\x76\x61\x7b\xf4\xb9\xf7\x0e\xd7\xce\x3e\xd4\ +\x37\xf0\x97\x4f\xbc\xc9\xb0\xff\xa4\xf3\x35\x79\x74\x4b\xca\x60\ +\xae\xa0\xaf\xaa\xc6\xe5\xae\x9e\x82\x81\xa8\x84\x81\x31\x8e\x68\ +\x3c\x8d\x54\x2a\x83\x44\x32\x8d\x80\x34\x88\x93\x5a\x75\x5c\xbb\ +\x54\xc2\xbc\x19\x40\x5b\xb3\x84\xf6\xd6\x20\x9a\xbf\xf4\x22\x24\ +\x33\x51\xba\x48\xf3\x9d\x37\x83\x99\x9b\x26\xba\x02\x28\x49\x30\ +\x35\x85\xa7\xd6\xeb\xb8\xf1\x3f\x52\x18\x19\xe1\x85\xc9\x9e\x01\ +\xab\x6f\x0b\xe0\xbc\x2b\xbe\x05\xe1\x69\x82\x48\x0e\x43\xdb\xf7\ +\x12\x90\x49\x12\x61\x19\x0c\xc8\x91\xe7\xd6\x96\x92\x90\x68\xa6\ +\x00\xf6\xca\x2b\xaf\xdc\x10\x08\x04\x66\x47\xa3\xd1\x55\x20\x5e\ +\xc5\x0a\x8a\x8b\x10\x24\x34\x10\xbc\x84\x64\x73\x10\x89\xf3\xe7\ +\x81\x35\x04\x51\xfb\x9b\xfd\x0d\x77\x29\xdc\xfd\xdd\xd6\xd6\x56\ +\xf4\xf7\xf7\xa1\x2a\xe0\x05\x37\x34\x84\x86\x23\x30\x0c\x8e\x69\ +\xb5\x14\x87\xf3\x25\x9c\x3b\x8f\xe1\x82\xa5\x4d\x68\x9f\x3d\x8b\ +\x2a\x5c\x13\x98\xbf\x01\xcc\x5b\x0b\xe6\x0e\x82\x41\x03\xb8\x92\ +\x03\x33\xb2\x10\x6a\x14\x2c\x3d\x08\xa4\x87\x73\xdb\xec\x4c\xcb\ +\xe2\xd0\x51\x81\xb3\x97\xd7\x62\x24\x1c\x01\x59\x6e\xc6\x3b\x1a\ +\x25\xec\x09\x01\xa7\xb5\x09\x7c\xf0\xb3\x0b\x20\xd1\xeb\x37\x4f\ +\x47\xa0\xed\x79\x06\x22\x9b\xb4\x37\xaa\x75\x81\x4d\x07\x38\x14\ +\x8d\x83\x09\xae\x27\x1b\x16\x2f\x7c\xba\xa7\x4e\x27\xf2\x5b\x3e\ +\xfa\xe8\x23\xcf\xc0\xc0\xc0\xa9\x00\x7a\x8b\xed\x07\xe8\x84\x38\ +\x41\xb5\x44\xa8\x1d\x4e\x22\xf0\x7a\x17\xa2\x27\x35\x23\x7c\xde\ +\xac\xc8\x9d\xef\xf6\x35\xb3\xde\xde\xde\x9b\xcd\x58\x22\x6f\xb4\ +\x66\x85\xe1\x9c\x39\xae\xc8\xbd\x5f\x9f\xe5\x9f\xb5\xe8\x42\x6f\ +\xb0\x75\x21\x73\xfb\x82\x48\x0b\x05\xc4\x90\xa0\x10\x31\x82\xaa\ +\xd0\x61\x14\x3c\xd9\x9f\xdb\x2c\x91\x94\x10\x24\x3d\x01\x99\x09\ +\xc8\x42\x40\x12\x66\xcb\xd0\x3d\x5c\x0d\x0e\x39\x37\xdb\x37\x9e\ +\x03\x7c\xeb\x6c\x50\x68\x00\x7f\xfd\x42\x2d\x66\x34\x24\x10\x97\ +\xdb\xe0\x4a\x2b\x48\xed\x5a\x0d\x91\xce\xd0\x7d\x66\xfc\x09\x08\ +\x9d\x23\x95\x11\x54\x1a\x01\xb3\x27\x65\xf8\x1e\x79\x64\x7d\xba\ +\xba\x75\x7a\xfd\xbf\xf7\xf4\xf4\xd4\x11\xf9\x1b\x4c\xf2\xe5\x36\ +\x44\xb8\x15\xff\x23\x04\x45\x00\x8d\x29\x15\x53\x3b\xfb\x11\xdb\ +\xd6\x2f\xc6\x5b\x1b\x95\xef\x69\x9a\x36\x04\xe0\xdb\x84\x36\x02\ +\xbc\x6e\xb9\x77\xd9\x89\x35\xf7\xb6\x5f\xf9\xe8\x75\x35\x53\x5a\ +\xda\x54\x25\x2d\xa5\x33\x09\xb7\xa6\xa6\x5d\x4a\x72\x14\xa3\xfd\ +\xbd\x99\x70\xff\xc7\x6e\x23\xbe\xbf\x5a\x36\xe2\xbe\x80\x57\x54\ +\x79\x3d\xc2\x13\xf0\x08\x29\xe0\x61\xb9\xca\xe2\x22\xb8\x19\xc0\ +\x0d\xe0\xdd\x81\x39\x48\x24\xba\x30\xb3\x1e\x5b\x82\x6e\xec\x79\ +\x6d\x07\x6a\x3d\x2e\x51\x27\x04\x3f\xef\x70\x18\xfa\xc7\x3d\x11\ +\xc9\x88\xbf\x2a\xf3\x78\x04\x01\xb7\xcc\x3c\x4c\x80\x71\x01\x45\ +\x15\x62\xdf\x30\xd4\xa3\x09\x36\x7a\x28\xea\xde\xf8\xe1\xa0\xdf\ +\x35\xeb\xc4\xa6\xd5\x54\xd1\x9a\xf7\xee\xdd\x7b\x37\x80\x5f\x1d\ +\xeb\x8e\x90\xb0\xbc\x60\xdc\x6a\x1b\x09\x0d\x02\x08\x1c\x09\x8f\ +\x87\x01\xac\x90\x65\xf9\x9f\x7c\x3e\xdf\xf6\x54\x2a\xb5\xd0\xe3\ +\xf5\xbe\xdc\x71\xfa\xd5\xef\xcf\x3e\xe5\xec\xaf\x09\x2e\x06\x0c\ +\x43\x53\xe2\x91\x70\xf7\xde\x1d\x1b\x77\x6f\xfc\xcd\x93\xa3\xaa\ +\x9a\xf6\x41\x57\x7d\x86\x11\x0c\x08\xdd\x5b\x25\xb8\x56\x45\xa1\ +\x13\x64\x42\xaf\x97\x99\xde\xe0\x96\x8c\xda\x6a\x9f\x41\x2d\x0f\ +\xc6\xa4\x99\xf3\x3b\xfb\xa4\x2a\x55\x51\xe2\x0b\xe6\xe0\x0e\x83\ +\x23\xab\xab\xf0\x65\x54\xe1\xf3\xbb\xb8\xa7\xfb\x88\xb1\x64\xcd\ +\x3b\x9d\xcf\xca\x2e\xd6\x00\x78\x83\x0c\xc2\xc7\x60\xb8\x05\x87\ +\x94\x48\xc3\x08\xa7\xb8\x72\x24\x2a\xbc\x9a\x67\xda\x17\x3b\xe6\ +\xcc\x98\xd1\xd5\xd5\x95\x08\x85\x42\xf7\x00\x78\xf4\xb3\x6c\x89\ +\x19\x84\x84\x25\xc2\x14\x0b\x33\x08\x11\xc3\x30\xc6\x1a\x1a\x1a\ +\xb6\x64\x32\x99\x85\xfe\x40\x70\xd7\x57\x6e\xbc\x77\x9a\xcb\xed\ +\x35\xb3\xed\xfb\x5d\xbb\xf7\xbc\xb1\xa3\x73\x6b\x94\x43\x97\x1a\ +\x4f\xfa\x32\xe3\x5c\x65\xa4\x89\xc4\xf5\x2c\x33\xd4\xb4\xa4\x2b\ +\x29\x49\x57\x93\x32\x65\x6f\x59\xa3\x96\x67\x53\xee\x31\x2d\xed\ +\x19\x1c\x63\x0b\xdd\xcd\xcb\x1e\xdd\xd9\xf5\x3a\x24\x86\x07\x3b\ +\xa6\x62\x9b\x00\x1d\x6a\x90\xb8\x4c\xe9\xc4\xa5\xde\x3e\x2c\xd8\ +\x5b\x4f\xae\x1f\x9b\x75\xe1\xb2\x59\xcf\xb7\x34\xf8\xd3\xe3\xb1\ +\xd4\xb4\xd1\x68\xfa\x84\x70\x4c\x9f\x6f\x48\xfe\x99\x9e\x40\x5d\ +\xa3\xab\xc6\x1f\x8c\x86\xc3\xea\xce\xee\xf7\x5e\xd6\x75\x7d\x39\ +\x80\x5d\x04\xed\xf3\xfc\xaf\x31\x66\x89\x55\x4b\x98\x6a\x95\xca\ +\x24\xd5\xd5\x9b\xa8\x26\xdf\xd6\xdc\xdc\xfc\x0d\x7a\x87\x50\xd2\ +\xe9\x74\xe2\x8d\x37\xde\xd8\x3d\xc9\x96\x86\x80\x05\xd3\x98\x10\ +\x9c\xc3\xe0\x42\x37\xe8\x48\xe5\x86\x9a\x11\xdb\xb6\xed\xa8\x86\ +\xb7\x7a\xed\xde\xbd\x9f\xcc\xeb\xec\xec\xdc\x0e\xe0\x4c\x82\xfe\ +\x8f\x00\xd6\x2d\x06\x4b\x8d\x83\x45\x63\x90\x7b\x13\xec\x2c\xba\ +\xf3\x79\xb7\xdb\xdd\xec\xf5\x7a\x55\x6a\x99\xcb\xe5\x72\x93\x81\ +\xc8\x1a\xf1\x78\x7c\xbf\xa2\x28\x6b\x01\xfc\x5a\x08\xd1\x5d\x40\ +\xbc\x9c\x07\x94\x08\x09\x8d\x10\x21\x28\x84\x26\xc2\x14\x55\x55\ +\xe3\xe6\xba\x9a\xda\xa6\x97\xc9\xc8\x2b\x38\x00\x97\x53\x00\xe7\ +\x9f\x3d\x18\x63\x1c\x8c\x41\xa2\x1f\x78\xdc\x02\xf0\xf1\x77\x37\ +\x7c\xd4\xee\xf7\x57\x3d\x91\x88\xc6\xe6\x6d\xdb\xb6\x6d\x14\xc0\ +\x35\xd6\x78\x99\x04\x90\xf0\x31\x64\xab\x2a\xd5\xe4\x77\x54\x70\ +\x0b\xe5\xa1\xb3\x08\xb5\xd6\x73\x85\x09\xfb\x09\xa6\x70\x7d\xd6\ +\x62\x4e\x54\x66\x57\xb8\x30\x24\x92\xd6\x97\x66\x69\xc6\x37\x92\ +\x00\x4a\x22\x91\x38\xe3\xc0\x81\x03\xaf\x51\x79\xe4\x74\x2e\x13\ +\x49\x13\x92\x55\x21\x72\xe4\xf3\x13\x2f\x0c\xab\x95\x48\x2c\xb1\ +\x6e\xdd\xba\x36\xba\x7e\x3d\x2d\x4f\xbf\x73\xe8\xd0\x21\xff\xa6\ +\x4d\x9b\xc6\xe9\xda\x5f\x01\xc8\x12\xda\x26\x7c\xa7\x36\xc1\x0b\ +\x93\x84\xdd\x84\x4e\x42\x8a\x90\xb1\x26\x45\x2f\x47\xba\x74\x08\ +\x1c\xff\x7d\x32\x21\xe0\xf1\x78\xbe\x4d\x1e\xb0\x9c\xc2\x60\xe5\ +\xa9\xa7\x9e\xba\x9e\x92\xa3\x9b\x5c\x93\x51\x82\xe4\xe4\x9a\x3a\ +\x09\xa2\x72\xce\x0d\x1a\x23\x28\x5f\xc8\xe3\xe3\xe3\x33\xfc\x7e\ +\xff\x29\x34\xe6\x22\x6a\x97\x51\x82\x62\x94\xa1\x0d\xea\xff\x10\ +\xc0\x2a\xc2\x51\x8b\x50\xc2\x2a\xc9\xb1\x1c\x51\x27\x41\x6e\x41\ +\xe0\x73\x1a\xab\xc0\xfd\x26\xae\x63\x8c\x3d\x4c\xa4\x6a\xab\xaa\ +\xaa\x86\x89\x58\x8a\xda\x0c\x09\x20\x3c\x79\xf3\xd1\xf5\x06\x42\ +\x8d\x39\xfb\xe4\x39\x88\x44\x22\xc6\xd0\xd0\x50\x2f\x79\xc2\x06\ +\x6b\x69\x3a\x60\x11\x4d\x12\xd2\x96\x08\x9a\x4d\xf6\x77\x63\x0c\ +\x95\xb3\x2a\xc2\x97\x09\xa7\x13\xda\x2c\xc2\x75\x04\x37\xe7\x5c\ +\xb2\x5e\x41\x23\x84\x83\x84\x6e\xc2\xfb\x84\x7e\x6b\xa6\x8d\x72\ +\x7f\xd6\xfb\x03\x10\xa0\xf0\xf3\x1c\xff\x0a\xc0\xf9\x17\x56\x81\ +\xdf\x13\xfb\x1f\x84\xaf\xe2\x02\x22\xe6\xe9\x93\x00\x00\x00\x00\ +\x49\x45\x4e\x44\xae\x42\x60\x82\ +" + +qt_resource_name = b"\ +\x00\x0b\ +\x01\xad\xab\x47\ +\x00\x64\ +\x00\x69\x00\x67\x00\x69\x00\x6b\x00\x61\x00\x6d\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x1a\ +\x08\xdd\xe1\xa7\ +\x00\x61\ +\x00\x63\x00\x63\x00\x65\x00\x73\x00\x73\x00\x6f\x00\x72\x00\x69\x00\x65\x00\x73\x00\x2d\x00\x64\x00\x69\x00\x63\x00\x74\x00\x69\ +\x00\x6f\x00\x6e\x00\x61\x00\x72\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x07\ +\x0e\x95\x57\x87\ +\x00\x6b\ +\x00\x33\x00\x62\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0d\ +\x0b\x34\x2d\xe7\ +\x00\x61\ +\x00\x6b\x00\x72\x00\x65\x00\x67\x00\x61\x00\x74\x00\x6f\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x0a\ +\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x42\x42\ +\x00\x00\x00\x56\x00\x00\x00\x00\x00\x01\x00\x00\x22\x22\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/animation/appchooser/digikam.png b/examples/widgets/animation/appchooser/digikam.png new file mode 100644 index 0000000000000000000000000000000000000000..9de9fb2f8034a9bae6f4c40ab2d1f713fcfaa08b GIT binary patch literal 3334 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 1.0: + easedProgress -= 1.0 + elif easedProgress < 0: + easedProgress += 1.0 + + pt = self.m_path.pointAtPercent(easedProgress) + self.updateCurrentValue(pt) + self.valueChanged.emit(pt) + else: + super(Animation, self).updateCurrentTime(currentTime) + +# PySide2 doesn't support deriving from more than one wrapped class so we use +# composition and delegate the property. +class Pixmap(QtCore.QObject): + def __init__(self, pix): + super(Pixmap, self).__init__() + + self.pixmap_item = QtWidgets.QGraphicsPixmapItem(pix) + self.pixmap_item.setCacheMode(QtWidgets.QGraphicsItem.DeviceCoordinateCache) + + def set_pos(self, pos): + self.pixmap_item.setPos(pos) + + def get_pos(self): + return self.pixmap_item.pos() + + pos = QtCore.Property(QtCore.QPointF, get_pos, set_pos) + + +class Window(QtWidgets.QWidget): + def __init__(self, parent=None): + super(Window, self).__init__(parent) + + self.m_iconSize = QtCore.QSize(64, 64) + self.m_scene = QtWidgets.QGraphicsScene() + + m_ui = Ui_Form() + m_ui.setupUi(self) + m_ui.easingCurvePicker.setIconSize(self.m_iconSize) + m_ui.easingCurvePicker.setMinimumHeight(self.m_iconSize.height() + 50) + m_ui.buttonGroup.setId(m_ui.lineRadio, 0) + m_ui.buttonGroup.setId(m_ui.circleRadio, 1) + + dummy = QtCore.QEasingCurve() + m_ui.periodSpinBox.setValue(dummy.period()) + m_ui.amplitudeSpinBox.setValue(dummy.amplitude()) + m_ui.overshootSpinBox.setValue(dummy.overshoot()) + + m_ui.easingCurvePicker.currentRowChanged.connect(self.curveChanged) + m_ui.buttonGroup.buttonClicked[int].connect(self.pathChanged) + m_ui.periodSpinBox.valueChanged.connect(self.periodChanged) + m_ui.amplitudeSpinBox.valueChanged.connect(self.amplitudeChanged) + m_ui.overshootSpinBox.valueChanged.connect(self.overshootChanged) + + self.m_ui = m_ui + self.createCurveIcons() + + pix = QtGui.QPixmap(':/images/qt-logo.png') + self.m_item = Pixmap(pix) + self.m_scene.addItem(self.m_item.pixmap_item) + self.m_ui.graphicsView.setScene(self.m_scene) + + self.m_anim = Animation(self.m_item, b'pos') + self.m_anim.setEasingCurve(QtCore.QEasingCurve.OutBounce) + self.m_ui.easingCurvePicker.setCurrentRow(int(QtCore.QEasingCurve.OutBounce)) + + self.startAnimation() + + def createCurveIcons(self): + pix = QtGui.QPixmap(self.m_iconSize) + painter = QtGui.QPainter() + + gradient = QtGui.QLinearGradient(0, 0, 0, self.m_iconSize.height()) + gradient.setColorAt(0.0, QtGui.QColor(240, 240, 240)) + gradient.setColorAt(1.0, QtGui.QColor(224, 224, 224)) + + brush = QtGui.QBrush(gradient) + + # The original C++ code uses undocumented calls to get the names of the + # different curve types. We do the Python equivalant (but without + # cheating) + curve_types = [(n, c) for n, c in QtCore.QEasingCurve.__dict__.items() + if isinstance(c, QtCore.QEasingCurve.Type) \ + and c != QtCore.QEasingCurve.Custom \ + and c != QtCore.QEasingCurve.NCurveTypes \ + and c != QtCore.QEasingCurve.TCBSpline] + curve_types.sort(key=lambda ct: ct[1]) + + painter.begin(pix) + + for curve_name, curve_type in curve_types: + painter.fillRect(QtCore.QRect(QtCore.QPoint(0, 0), self.m_iconSize), brush) + curve = QtCore.QEasingCurve(curve_type) + + painter.setPen(QtGui.QColor(0, 0, 255, 64)) + xAxis = self.m_iconSize.height() / 1.5 + yAxis = self.m_iconSize.width() / 3.0 + painter.drawLine(0, xAxis, self.m_iconSize.width(), xAxis) + painter.drawLine(yAxis, 0, yAxis, self.m_iconSize.height()) + + curveScale = self.m_iconSize.height() / 2.0 + + painter.setPen(QtCore.Qt.NoPen) + + # Start point. + painter.setBrush(QtCore.Qt.red) + start = QtCore.QPoint(yAxis, + xAxis - curveScale * curve.valueForProgress(0)) + painter.drawRect(start.x() - 1, start.y() - 1, 3, 3) + + # End point. + painter.setBrush(QtCore.Qt.blue) + end = QtCore.QPoint(yAxis + curveScale, + xAxis - curveScale * curve.valueForProgress(1)) + painter.drawRect(end.x() - 1, end.y() - 1, 3, 3) + + curvePath = QtGui.QPainterPath() + curvePath.moveTo(QtCore.QPointF(start)) + t = 0.0 + while t <= 1.0: + to = QtCore.QPointF(yAxis + curveScale * t, + xAxis - curveScale * curve.valueForProgress(t)) + curvePath.lineTo(to) + t += 1.0 / curveScale + + painter.setRenderHint(QtGui.QPainter.Antialiasing, True) + painter.strokePath(curvePath, QtGui.QColor(32, 32, 32)) + painter.setRenderHint(QtGui.QPainter.Antialiasing, False) + + item = QtWidgets.QListWidgetItem() + item.setIcon(QtGui.QIcon(pix)) + item.setText(curve_name) + self.m_ui.easingCurvePicker.addItem(item) + + painter.end() + + def startAnimation(self): + self.m_anim.setStartValue(QtCore.QPointF(0, 0)) + self.m_anim.setEndValue(QtCore.QPointF(100, 100)) + self.m_anim.setDuration(2000) + self.m_anim.setLoopCount(-1) + self.m_anim.start() + + def curveChanged(self, row): + curveType = QtCore.QEasingCurve.Type(row) + self.m_anim.setEasingCurve(curveType) + self.m_anim.setCurrentTime(0) + + isElastic = (curveType >= QtCore.QEasingCurve.InElastic + and curveType <= QtCore.QEasingCurve.OutInElastic) + isBounce = (curveType >= QtCore.QEasingCurve.InBounce + and curveType <= QtCore.QEasingCurve.OutInBounce) + + self.m_ui.periodSpinBox.setEnabled(isElastic) + self.m_ui.amplitudeSpinBox.setEnabled(isElastic or isBounce) + self.m_ui.overshootSpinBox.setEnabled(curveType >= QtCore.QEasingCurve.InBack + and curveType <= QtCore.QEasingCurve.OutInBack) + + def pathChanged(self, index): + self.m_anim.setPathType(index) + + def periodChanged(self, value): + curve = self.m_anim.easingCurve() + curve.setPeriod(value) + self.m_anim.setEasingCurve(curve) + + def amplitudeChanged(self, value): + curve = self.m_anim.easingCurve() + curve.setAmplitude(value) + self.m_anim.setEasingCurve(curve) + + def overshootChanged(self, value): + curve = self.m_anim.easingCurve() + curve.setOvershoot(value) + self.m_anim.setEasingCurve(curve) + + +if __name__ == '__main__': + + import sys + app = QtWidgets.QApplication(sys.argv) + w = Window() + w.resize(600, 600) + w.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/animation/easing/easing.qrc b/examples/widgets/animation/easing/easing.qrc new file mode 100644 index 0000000..7e112d3 --- /dev/null +++ b/examples/widgets/animation/easing/easing.qrc @@ -0,0 +1,5 @@ + + + images/qt-logo.png + + \ No newline at end of file diff --git a/examples/widgets/animation/easing/easing_rc.py b/examples/widgets/animation/easing/easing_rc.py new file mode 100644 index 0000000..7ed4e6d --- /dev/null +++ b/examples/widgets/animation/easing/easing_rc.py @@ -0,0 +1,403 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: ?? ????. 4 11:48:38 2011 +# by: The Resource Compiler for PySide (Qt v4.7.0) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x14\x1d\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x2e\x00\x00\x00\x37\x08\x06\x00\x00\x00\x73\x60\x78\x64\ +\x00\x00\x13\xe4\x49\x44\x41\x54\x78\x9c\x62\xfc\xff\xff\x3f\xc3\ +\xdf\x7f\x7f\x99\x99\x99\x98\xff\x3e\x78\xf1\x58\x66\xe9\x9e\x55\ +\x09\x87\x2f\x9e\xb6\x79\xf7\xe9\xad\x98\xa4\xf2\x3f\x7e\x51\xb9\ +\xbf\xfc\xcc\x1c\x3f\xf8\xfe\xfd\xff\xc7\xca\xc5\xc6\xf7\x46\x9c\ +\x5b\xf6\x96\x24\xaf\xd2\x35\x29\x3e\xa5\xcb\xd2\xbc\x4a\xd7\xc4\ +\x78\x64\xef\x08\x70\x8a\x3e\x63\x63\x66\xff\xc5\x80\x05\xfc\x67\ +\xf8\xcf\xf4\xef\xff\x3f\x26\x06\x86\xff\x0c\x8c\x0c\x8c\xff\x19\ +\x19\x18\xff\x33\x30\x42\x69\x0a\x00\x00\x00\x00\xff\xff\x62\xfc\ +\xfb\xf7\x2f\x33\x13\x13\xd3\xdf\x59\x9b\x17\xa6\x54\xcf\x6d\xed\ +\x7d\xf3\xe6\x0d\x1f\x17\x2f\xdb\x7f\x7b\x2f\x61\x46\x59\x45\x4e\ +\x06\x86\x7f\x8c\x0c\x0c\xff\x99\x18\x18\x18\x18\x18\xfe\xfd\xff\ +\xc7\xf0\xe7\xdf\x6f\x86\x7f\xff\xff\x30\x30\x30\x30\x32\xb0\x30\ +\xb1\x32\x70\xb2\xf0\x7c\xe3\x63\x17\x7a\x26\xcc\x25\x75\x5f\x9c\ +\x47\xee\xa6\x04\x8f\xc2\x75\x09\x5e\x85\x9b\xa2\x5c\x52\xf7\x05\ +\x38\xc5\x9e\xb1\xb3\x70\xfc\xc0\x6e\xf5\x7f\xc6\x7f\xff\xff\x31\ +\xc3\x39\x24\x7a\x08\x00\x00\x00\xff\xff\x62\xfc\xff\xff\x3f\xc3\ +\xa4\xb5\xb3\x73\xf2\xbb\xf3\x26\x73\xf2\x09\xff\x63\x67\x63\xfb\ +\xef\x1e\x2c\xc4\x20\x21\xc3\xc6\xf8\xed\xeb\x3f\x46\x46\x88\x39\ +\x8c\x70\x0b\x18\x99\xfe\x33\x32\x30\xfc\x67\x60\x60\x60\xf8\xff\ +\xff\x3f\xd3\xbf\xff\x7f\x19\xff\xfc\xff\x03\xf1\xd0\xbf\x3f\x0c\ +\xff\x19\xfe\x33\xb0\x30\xb2\x32\xb0\xb3\x70\xff\xe5\x67\x17\x7e\ +\x21\xcc\x25\x79\x5f\x8c\x47\xee\xa6\x14\xaf\xe2\x75\x09\x1e\x85\ +\xeb\xa2\x3c\x32\x77\x85\x39\x25\x9e\x70\xb0\x72\x7d\xc5\xe7\xa1\ +\xff\x70\x4b\x19\xff\x31\x62\xf1\x10\x00\x00\x00\xff\xff\x6c\x92\ +\xbd\x0a\xc2\x30\x14\x46\xbf\x2f\x16\x7f\xd2\x06\x21\x83\xc6\x41\ +\xc5\x5d\x70\xec\xa8\xbb\xcf\xe2\x6b\xba\x76\x70\x28\xa8\x83\xe0\ +\xd6\xb1\x88\x20\x24\xf7\x3a\x88\x5b\x5e\xe0\x1c\x0e\x1c\x36\xb7\ +\xcb\x76\x7f\x3a\x9e\x85\xea\xe2\x87\xb2\xab\x4b\x53\x1f\xa6\x78\ +\xbf\x04\x66\x90\x03\x67\x4c\xa0\xfe\x0a\xa9\xc4\x7f\x8f\x64\xa2\ +\x44\x24\x89\x48\x1a\xa1\x2a\x30\x2c\x30\x2e\xac\xb8\x91\xef\xfc\ +\x24\x3c\x66\xe5\xf2\xba\x70\x9b\x36\x54\xeb\x76\x5e\xad\xee\xde\ +\x86\xa7\x1d\xba\x9e\x79\x0f\x45\xc5\x28\x94\x04\xf0\x05\x00\x00\ +\xff\xff\x62\x99\xbc\x76\x56\xee\xa7\xef\x5f\x79\xf9\xb9\xf9\xfe\ +\x32\xb2\xff\x65\x56\xd6\xe4\x62\xf8\xfd\xeb\x3f\x03\x23\x13\x51\ +\x8e\x66\x60\x60\x60\x60\xfc\xcf\xf0\x9f\xf1\xff\x7f\xf4\x18\x66\ +\xfc\xcf\xca\xc4\xf6\x9f\x8d\x99\x1d\xc9\x43\x0c\x8c\xff\xfe\xff\ +\x65\xfe\xf8\xe3\xb5\xc4\xbb\xef\xcf\x24\x6e\xbc\x39\x65\x01\xf1\ +\x10\x33\x03\x3b\x33\xe7\x7f\x1e\x36\xc1\xb7\x82\x9c\xe2\x0f\xc5\ +\x79\x64\x6f\x8b\xf3\x28\x5c\x97\xe4\x55\xb8\x2e\xce\x23\x77\x5b\ +\x98\x4b\xe2\x11\x0f\x9b\xc0\x3b\x26\x46\xa6\xbf\x30\xd3\x01\x00\ +\x00\x00\xff\xff\x62\x54\x89\x34\xbe\xfb\xf4\xed\x0b\x25\x86\xff\ +\xcc\xff\x85\x44\x58\x18\xbd\xc3\x45\x88\x76\x31\xb9\x00\x9a\x9e\ +\xff\x31\xa2\x79\xe8\xef\x7f\x48\x0c\xfd\xf9\xf7\x9b\xe1\xff\xff\ +\x7f\x0c\x8c\x8c\xcc\x0c\x6c\xcc\x1c\x0c\x3c\xac\xfc\x1f\x04\x39\ +\xc5\x1e\x89\x72\xcb\xde\x91\xe0\x51\xb8\x26\xc9\xab\x70\x03\x00\ +\x00\x00\xff\xff\xbc\xd1\xb1\x0d\x80\x30\x10\x03\x40\x3b\x05\x54\ +\x54\xb4\x91\x32\x0e\xa2\x65\xff\x45\xc8\xff\xdb\x54\x94\xb4\x8c\ +\x70\x3a\x6e\xe7\xb8\x01\x2f\x73\x1a\x7d\xac\x38\xae\x1d\x11\x06\ +\x3f\xbe\x7e\x00\x99\xa0\x5e\x90\xad\x56\x4e\x96\x02\xa9\x84\x5c\ +\x20\x1b\x1e\x00\x00\x00\xff\xff\xb4\x92\x21\x12\x00\x20\x0c\xc3\ +\xda\x5b\x81\xff\x7f\x98\xa0\x26\x70\x18\x2a\x73\x11\x11\x0d\x30\ +\xdd\xd6\xfb\x3d\xbe\x0c\x61\x81\x91\xae\x92\x72\xa8\x0c\x96\xbc\ +\x9b\x1d\x00\x00\x00\xff\xff\x94\x94\xb1\x0d\x00\x20\x0c\xc3\xdc\ +\x96\xff\x4f\x76\x19\xd8\x10\x42\x70\x40\x6c\x79\xc9\xd8\x96\x7f\ +\x22\x21\x33\xa8\x2a\x6c\xd1\x05\xc8\x08\xd6\x27\x34\xb6\x57\xc6\ +\x93\xe7\x10\x34\x01\x00\x00\xff\xff\x8c\x91\xc1\x0a\x80\x20\x10\ +\x05\x67\xdd\x35\xa5\xfe\xff\x3b\x83\x28\x41\xad\xad\x4b\x67\xeb\ +\xdd\x67\x18\x78\x36\x02\x46\xc1\x6a\x42\x9e\x8d\xbd\x1c\xac\x5b\ +\x21\x6a\x24\x4d\x09\x01\xaa\x37\x4e\xef\x68\x30\xb2\x2d\x04\x51\ +\xfc\xbe\x3e\xac\xef\xed\x3f\xf7\x00\x00\x00\xff\xff\x22\xd9\xe1\ +\xff\xff\x31\x30\x70\x70\x32\x33\x7c\xfb\xfa\x87\xe1\xf4\xc9\xc7\ +\x0c\x52\x5c\xea\x0c\x5e\x26\x3e\x0c\xc6\xaa\x86\x0c\xa2\x02\x22\ +\x0c\x8c\x8c\x0c\x0c\x5f\x7e\x7d\x60\x78\xf6\xe9\x1e\xc3\xb5\xd7\ +\x27\x19\xae\xbe\x3a\xc1\xf0\xf5\xf7\x27\x06\x6e\x56\x3e\x9c\x8e\ +\x67\x64\x64\x60\x80\x95\x4a\x4c\x8c\x4c\x0c\xff\xff\xff\x67\xf8\ +\x4f\xc0\x13\x00\x00\x00\x00\xff\xff\x22\xc9\xe1\xff\xff\x43\x1c\ +\x7d\xe7\xc6\x17\x86\xa3\xfb\xde\x32\x54\x84\x54\x30\x14\x85\x67\ +\x30\xb0\xb3\xb3\x32\xfc\x87\x54\xe9\x70\xb5\x5a\x62\x16\x0c\xae\ +\x2a\xd1\x0c\xcf\x3f\x3f\x60\x58\x73\x75\x22\xc3\xe9\x27\x3b\x19\ +\xb8\xd8\xf8\x18\x30\x8b\x4d\x06\x86\x5f\x3f\xff\x31\xb0\xb0\xb0\ +\x30\x30\x32\xfd\x65\xf8\xf6\xfb\x0b\x03\x0b\x13\x0b\x03\x2b\x13\ +\x3b\x5e\xc7\x03\x00\x00\x00\xff\xff\x22\x3a\x3b\xfe\xff\xc7\xc0\ +\xc0\xce\xc1\xc4\x70\xe3\xf2\x57\x86\x9d\x6b\x5f\x30\xcc\x2e\x9c\ +\xce\x50\x19\x97\xcb\xc0\xc2\xca\xc4\xf0\xf7\xdf\x5f\x86\xff\xff\ +\xff\xc1\x2b\x9b\x3f\x7f\x7f\x33\xfc\xfe\x03\x29\xd2\x24\x79\xe5\ +\x19\x72\x2d\xfa\x19\x42\x74\xf2\x19\xbe\xfd\xfa\xcc\xc0\x04\x2d\ +\x01\xfe\xff\x67\x60\x60\x65\x63\x64\x78\xf5\xec\x0f\xc3\x92\x59\ +\x0f\x18\x3c\xc4\x4b\x18\xba\xbc\x36\x32\xd4\xd8\x2f\x66\x30\x94\ +\x74\x64\xf8\xf1\xe7\x1b\x5c\x2d\x36\x00\x00\x00\x00\xff\xff\x8c\ +\xd4\x21\x0e\xc2\x40\x10\x40\xd1\x3f\x33\xbb\x75\x0d\x06\x01\x0e\ +\x53\x82\x44\x35\x58\x24\xa6\x12\x8d\x20\xe1\x04\x78\x6e\xc4\x01\ +\xb8\x0c\x69\x10\x08\x0c\x49\x31\x5d\xb6\x83\x42\x92\x70\x82\xff\ +\xd4\xff\x0b\xfe\x8d\x3c\xee\x99\xcb\xf9\xca\x69\x7f\x64\xbb\x6e\ +\xe8\x53\x42\x45\x31\x35\x44\x14\xd3\x80\x49\x20\x58\xa4\x08\x05\ +\x0e\x0c\xee\x64\xcf\x34\x8b\x03\x9b\xf9\x8e\xae\x7f\xa2\x62\xb8\ +\x3b\xaa\xc2\xad\x7d\x11\xbd\xa4\xae\x56\x8c\xe2\x94\x6a\xbc\x64\ +\x52\xce\x78\x0f\x09\xf8\xfd\xe4\x0f\x00\x00\x00\xff\xff\x22\x3a\ +\xc4\x19\x19\x99\x18\x0e\xee\x7e\xce\xa0\xa9\xac\xcb\x50\x16\x95\ +\xcb\xc0\xc0\xc0\xc0\xc0\xca\xc2\xc2\xc0\xc8\xc8\xc8\xf0\xff\x3f\ +\x24\x99\xdc\x78\x7b\x92\xa1\x66\x43\x3a\x83\x4f\x65\x04\xc3\xda\ +\x43\x5b\xa0\x21\xc6\x08\x0f\xb9\x10\xed\x3c\x06\x45\x41\x6d\x86\ +\x9f\x7f\xbe\x31\x30\x33\x31\x33\xfc\xff\xc7\xc8\xf0\xf4\xf1\x17\ +\x06\x6d\x25\x55\x06\x19\x51\x69\xa8\x63\x19\x18\xfe\x13\x51\x12\ +\x01\x00\x00\x00\xff\xff\x84\xd4\x2b\x0e\xc2\x40\x14\x46\xe1\xf3\ +\xdf\xa6\x4c\x05\xeb\x40\xa0\x50\x2c\x02\x0d\x49\x75\x05\x0e\xc9\ +\x1e\x58\x09\x8a\x2d\x90\x60\x70\x24\x78\x12\x14\x62\x12\x02\x02\ +\x0c\x8f\xb6\x77\xb0\x18\xc2\x0e\x8e\xf8\x72\xfe\x86\xa7\x04\x9d\ +\x20\xe2\xe9\x4d\x3c\xde\x99\x4d\x2a\x42\x5e\xd0\xb4\x0d\x92\xf0\ +\xe4\x48\xe2\x70\xdd\xb3\xd8\x4c\x89\xb6\xe5\xd6\xdd\x31\x9e\x97\ +\x2c\xd7\x2b\x4c\xc2\xdd\xf1\xd4\x92\x67\x81\x51\xaf\xa2\xf6\x1a\ +\x99\x78\x3d\xc4\xe5\xfc\x64\xd8\x1f\x00\x7c\xed\x34\xc3\x64\x98\ +\x0c\xfd\xe0\xf2\x01\x00\x00\xff\xff\x22\x1c\xe2\xff\x21\x65\xf5\ +\x8d\x2b\x1f\x19\x04\x84\xc4\x19\xfc\xad\x3d\x19\x18\x18\x18\x18\ +\x98\xa1\x2d\x30\x58\x64\x6e\xbe\x31\x8b\xe1\xdf\xff\xbf\x0c\xec\ +\x0c\x02\x0c\xa6\xe6\x92\x0c\x72\x9a\x22\x0c\x55\x33\xda\x18\xbe\ +\xff\x82\x84\x2e\x23\xb4\x08\x36\x94\x74\x60\x90\xe1\x57\x66\x60\ +\x62\xfd\xc5\xf0\xf2\xc5\x67\x86\xdf\x2f\xdf\x33\x58\xe9\x98\x20\ +\x2c\x63\x60\x60\xf8\xf5\xf7\x3b\xc3\xd7\xdf\x9f\x18\xbe\xff\xf9\ +\xca\xf0\xeb\x2f\xf6\x56\x31\x00\x00\x00\xff\xff\x22\xe8\x70\x26\ +\x66\x06\x86\x9f\xdf\x19\x18\xee\xdf\xfb\xc8\x60\xa9\x63\xc4\x20\ +\x25\x2c\x09\x0f\xe5\xff\x0c\xff\x19\x18\x19\x99\x18\x3e\xfc\x78\ +\xcd\xf0\xe0\xfd\x55\x06\x0e\x16\x2e\x86\x3f\xff\x7e\x33\xfc\xfe\ +\xf3\x87\x41\x53\x47\x90\xe1\xe1\xe3\xfb\x0c\x07\x2e\x1c\x85\x84\ +\xe6\xff\x7f\x0c\x7f\xff\xfd\x65\x60\x67\xe1\x64\xe0\xfd\x64\xc4\ +\xb0\x62\xfe\x43\x86\x64\xd3\x46\x86\xcd\x33\x76\x30\xb8\x98\x38\ +\x40\x03\x03\x52\xc8\x29\x08\x6a\x33\x98\xc9\xb8\x33\x68\x88\x98\ +\x30\x48\xf2\x28\x60\x75\x17\x00\x00\x00\xff\xff\xc2\x5b\x1c\xfe\ +\xff\xcf\xc0\xc0\xc2\xc2\xc8\xf0\xfe\xdd\x5f\x86\xef\xef\x7f\x30\ +\x58\xe9\x9a\x42\x1c\xf1\xef\x1f\x03\x13\x33\xa4\xbc\x65\x64\x64\ +\x64\x78\xf9\xe5\x21\xc3\x97\x5f\x1f\x19\xd8\x59\xb8\x20\xc9\xe2\ +\xef\x7f\x06\x61\x31\x36\x06\x06\xe6\x7f\x0c\xa7\xae\x9d\x63\xf0\ +\x34\x73\x85\xe7\x03\x06\x06\x06\x06\x4d\x51\x33\x86\x77\x8f\xfa\ +\x19\x54\xc5\xb4\x19\x34\xe5\xd5\x18\xfe\xfe\xfb\x0b\x75\x38\x24\ +\x16\x2d\x65\xbd\x19\x2c\x64\x3c\x19\x18\x19\x99\x18\x9e\x7f\xbe\ +\xcf\xd0\xb0\x2f\x02\xc3\x6d\x00\x00\x00\x00\xff\xff\xc2\x1f\xe2\ +\xff\x19\x18\x98\x98\x19\x19\xde\xbf\xfd\xcd\xc0\xf0\x8f\x99\x41\ +\x5f\x45\x8b\x81\x81\x81\x81\x81\x11\xde\x02\x83\x44\xed\x9b\x6f\ +\xcf\x19\xfe\xfc\xfb\xcd\xc0\xc8\xc0\xc8\xc0\xc8\x08\x49\xab\x9c\ +\xdc\x4c\x0c\xcc\x5c\x2c\x0c\x37\x1f\xdf\x83\xeb\x61\x64\x82\xe8\ +\xd3\x53\xd1\x64\xe0\xe2\xe3\x67\xf8\xf3\xf7\x0f\x6e\x8b\x09\x54\ +\x40\x00\x00\x00\x00\xff\xff\x22\x98\x54\x18\x19\x19\x18\x3e\xbc\ +\xff\xc5\xc0\xc4\xce\xc9\xa0\x20\x21\x07\x11\x83\x86\x1c\xcc\xe8\ +\x4f\x3f\xde\x42\x9a\xa1\x50\xfe\xbf\x7f\x0c\x0c\xac\xac\x0c\x0c\ +\xdc\xdc\xac\x0c\xcf\xdf\xbc\x84\x58\xc4\xc8\x04\xd7\x27\x25\x2c\ +\xc1\xa0\xa9\x26\xc5\x70\xf1\xfe\x25\x86\xa7\xaf\x9f\xc3\x43\x1a\ +\x06\xfe\xfc\xfd\xcb\xf0\xfb\xcf\x3f\x14\xbb\xd0\x01\x00\x00\x00\ +\xff\xff\x22\x5c\x73\xfe\x67\x60\xf8\xfc\xe9\x37\x03\x2f\x17\x37\ +\x83\x28\xbf\x30\xd4\x33\xd0\x4e\x15\x54\xc9\xb7\xdf\x9f\x51\x3c\ +\xc2\xc0\x00\xc9\x1b\x1c\x1c\x2c\x0c\xef\x3f\x7f\x82\xeb\xf9\x0f\ +\x0d\x49\x4e\x76\x4e\x86\x88\x28\x2d\x86\xd4\xce\x64\x06\x13\x69\ +\x17\x86\xc3\x53\x37\x32\xfc\xff\xff\x9f\xe1\x1f\xc3\x3f\x06\x66\ +\x46\x66\x86\xed\x37\x17\x32\xec\xba\xbd\x82\x41\x84\x5b\x92\x01\ +\xa9\xef\x80\x02\x00\x00\x00\x00\xff\xff\x7c\x95\x4d\x0a\x80\x20\ +\x18\x44\x9f\xf9\x43\x88\x50\xf7\xbf\x5b\x27\x88\x36\x2d\x34\x31\ +\xfd\x5a\xb8\x11\x8a\xf6\x03\xf3\x86\x19\x98\x7f\x70\xd5\x77\x9e\ +\x62\x21\xf8\x85\xe0\xc3\xa7\x2c\xdf\x91\xf1\x2c\x44\x7a\x53\xce\ +\x69\xe2\x95\x28\xb5\x60\xb5\x05\x81\x86\x30\x29\x85\xb7\x2b\xd6\ +\x18\x8c\x1e\x11\x7a\xf4\xd4\x4e\xf6\xbc\x91\xe4\xa0\xb6\x8a\xd3\ +\xf3\xcb\xf3\x01\x00\x00\xff\xff\x84\x97\xc1\x0a\x80\x30\x0c\x43\ +\x5f\xb7\xae\x9b\xc5\xff\xff\x57\xad\x16\x0f\x9e\x64\x03\xef\x21\ +\x79\x10\x08\xe4\x7f\xc7\x81\x88\x64\xb3\x41\x57\x5b\x6a\x22\x63\ +\x3a\x1e\x22\xa0\x5a\x38\xe2\xe4\xba\x63\x82\xf3\xb6\x93\x99\x7c\ +\x7b\x7a\x4d\x8a\x54\x9a\x0c\xac\x3a\x5d\x7d\x99\xf9\x00\x00\x00\ +\xff\xff\x22\xaa\x1c\xff\xfb\xf7\x3f\x03\x0b\x33\x33\x03\x13\x13\ +\x13\xb2\xf9\x70\x00\x69\xf5\xa1\xbb\x1c\x92\xb1\xff\xfe\xfb\x0b\ +\x75\x20\x2a\x60\x65\x62\x83\x26\x1d\x6c\x69\x18\xd2\x3a\xfc\xff\ +\xff\x1f\xce\x5a\x14\x00\x00\x00\xff\xff\x22\xb2\xad\x02\x29\xf6\ +\x18\x71\xf6\xe7\xb0\x97\x00\x8c\x50\x29\x6c\xb2\x4c\x8c\xc4\x0d\ +\x21\xe0\x02\x00\x00\x00\x00\xff\xff\x22\xca\xe1\x4c\x4c\x8c\x0c\ +\x7f\xff\xfd\x63\xf8\x87\xa5\x49\xca\xc0\xc0\x80\xbd\x5a\x86\x3a\ +\x98\x91\x11\x7b\xb9\x40\x69\xcf\x08\x00\x00\x00\xff\xff\x22\xaa\ +\x38\x64\x61\x85\xa4\xd5\xdf\x7f\x7e\xc3\x1d\x85\x0c\x58\x18\x59\ +\xb1\xb6\x9d\xff\xfd\xfd\xcf\xc0\xcc\xc4\xc4\xc0\x84\x65\x80\xe6\ +\xf7\xbf\x9f\xd0\xa2\x8e\xbc\x91\x38\x00\x00\x00\x00\xff\xff\x22\ +\x1c\xe2\x8c\x0c\x0c\xec\xec\x2c\x0c\xdf\x7e\x7c\x67\xf8\xf1\x0b\ +\x7b\xbb\x81\x95\x99\x1d\xc3\xfe\xff\x0c\x0c\x0c\x7f\xfe\xfe\x63\ +\x60\x65\x65\x65\x60\x61\x46\x76\x38\x24\xfc\x7f\xfc\xf9\x06\x2d\ +\x22\xc9\x03\x00\x00\x00\x00\xff\xff\x22\x58\x73\x32\x32\x32\x30\ +\x70\x73\x43\xfa\x96\x1f\xbf\x7e\x82\x0a\xff\x87\x3b\x8e\x81\x81\ +\x81\x81\x93\x95\x9b\x01\x32\xa8\x89\x70\xda\xff\x7f\x0c\x0c\xbf\ +\x7f\xfd\x65\xe0\x64\xe7\x80\x14\x85\x50\x09\x58\x3e\xf9\xfa\xeb\ +\x23\x24\x89\x91\xe9\x72\x00\x00\x00\x00\xff\xff\x22\x2a\x8d\xf3\ +\xf2\xb1\x32\x7c\xff\xf1\x8d\xe1\xe5\xfb\xd7\x10\x07\xff\x47\x38\ +\x90\x81\x81\x81\x81\x87\x4d\x80\x81\x81\x01\x29\xf4\x18\x21\x0e\ +\xff\xf9\xf3\x2f\x03\x1f\x17\x2f\x44\x0e\xaa\x89\x91\x81\x91\xe1\ +\xcf\xbf\xdf\x0c\x9f\x7e\xbe\x63\x60\x66\x64\x21\xd8\xb7\xc4\x05\ +\x00\x00\x00\x00\xff\xff\xc2\xef\x70\xa8\x03\xf8\x05\xd9\x18\x18\ +\xfe\xfc\x64\xb8\xf7\xec\x21\xd4\xe1\xa8\x96\x09\x70\x88\xa2\x74\ +\xb3\x18\x19\x19\x18\xfe\xfc\x81\x54\x5c\x62\x82\x42\x0c\x0c\x0c\ +\x90\x9e\x10\xcc\x8d\x9f\x7e\xbe\x83\x38\x9c\x89\x85\x81\xdc\x20\ +\x07\x00\x00\x00\xff\xff\x22\x18\xe2\x7f\xff\xfd\x67\xe0\x17\x64\ +\x61\x60\x60\x61\x60\xb8\x78\xe7\x2a\x9a\xbf\x20\x61\x2e\xc2\x25\ +\xc5\xc0\xc6\xc2\x09\x29\x29\xa0\xed\xf7\x9f\x3f\xfe\x33\xfc\xfc\ +\xf6\x87\x41\x5e\x42\x06\xee\x59\x58\xe8\xbe\xfc\xf2\x88\xe1\xeb\ +\xaf\x8f\x0c\xcc\x8c\xcc\x64\xa7\x71\x00\x00\x00\x00\xff\xff\xc2\ +\xeb\x70\x46\x46\x06\x86\xbf\x7f\xfe\x33\xf0\xf0\x31\x31\xf0\x0a\ +\x73\x32\x9c\xbc\x7a\x8e\x81\x81\x81\x81\x81\x19\x5e\x11\x41\x1c\ +\x2e\xca\x2d\xc3\x20\xc0\x2e\xc2\xf0\x17\xda\x4f\x64\x62\x66\x60\ +\xf8\xfc\xe1\x0f\x03\xc3\xaf\xff\x0c\xba\xca\x9a\x50\xd3\x10\x2d\ +\xbe\x7b\xef\x2e\x33\xfc\xfe\xfb\x0b\x9a\xc6\x91\x9d\x8e\x48\x4e\ +\x4c\x8c\x4c\x0c\xac\x2c\x2c\x0c\xcc\xcc\xd8\xcb\x7b\x00\x00\x00\ +\x00\xff\xff\x22\x5c\xe5\xff\x63\x60\x60\x65\x67\x60\x50\x50\xe2\ +\x67\x38\x7b\xe3\x32\xc3\xa3\x57\x8f\xa1\x5d\x36\x48\xfb\xfa\xdf\ +\xff\x7f\x0c\x9c\xac\x3c\x0c\x4a\x42\x3a\x0c\xbf\xfe\xfd\x64\x60\ +\x64\x60\x62\x60\x62\x62\x64\x78\xfa\xe8\x3b\x03\x2b\x27\x2f\x83\ +\x8d\xae\x05\xc4\x22\xa4\x6e\xd8\xb5\x57\x27\x18\x58\xa0\xc9\x04\ +\xa5\x3c\x87\xfa\x81\x87\x4d\x90\xe1\xeb\xef\x8f\x0c\x2f\xdf\xbd\ +\x61\x78\xf7\xf1\x23\xd6\x16\x22\x00\x00\x00\xff\xff\x22\xaa\x38\ +\xfc\xf7\xf7\x3f\x83\x9a\x06\x2f\xc3\xe7\x8f\x6f\x18\x36\x1f\xdb\ +\xc9\xc0\xc0\xc0\x80\x51\x8d\xdb\x2b\x86\x30\xfc\xfb\xfb\x97\x81\ +\x99\xed\x1f\xc3\xcf\x6f\x4c\x0c\xa7\x8e\x3e\x60\x08\x75\xf2\x66\ +\x50\x93\x51\x61\xf8\xf7\xef\x1f\x03\x23\x23\x24\x24\x9f\x7c\xba\ +\xc3\x70\xfb\xed\x45\x06\x0e\x56\x2e\x06\x56\x36\x26\x86\xcf\xdf\ +\xbe\x30\x30\x30\x40\x6a\x66\x58\x6d\x6a\x25\xef\xc5\x60\x2d\x92\ +\xc0\xa0\xfc\x27\x80\x21\x55\x77\x02\x83\x28\x8f\x34\x24\x86\x90\ +\x3c\x00\x00\x00\x00\xff\xff\x22\xaa\x02\xfa\xfd\xeb\x3f\x83\x84\ +\x0c\x1b\x83\x84\x12\x1f\xc3\xf4\xf5\x8b\x18\x7e\xfd\xf9\xc5\xc0\ +\xc2\xcc\xcc\xf0\x9f\xe1\x3f\x7c\xe4\x49\x5b\xcc\x82\x21\x4c\x2f\ +\x9f\xe1\xd3\xa7\xef\x0c\x5b\xd6\x3d\x64\xb0\xd5\x73\x61\x98\x98\ +\xd7\x0a\x35\x83\x91\xe1\x1f\x03\xc4\xa3\xfb\xef\xad\x62\xf8\xfa\ +\xeb\x13\x03\x0b\x0b\x33\x83\x98\x18\x27\xc3\xc3\x17\x4f\x19\x9e\ +\xbf\x7b\x01\x0d\x70\x48\x90\xf3\xb2\x09\x33\x14\xb9\xb6\x30\xb4\ +\x25\xb4\x31\x38\xe9\x3a\x33\xc0\x87\xe7\x90\x9a\x1c\x00\x00\x00\ +\x00\xff\xff\x22\xae\xad\xc2\xc0\xc0\xf0\x9f\xf1\x1f\x83\xad\x93\ +\x04\xc3\xd5\x5b\x17\x19\xa6\xac\x9b\xcd\xc0\xc0\xc0\xc0\xf0\xfb\ +\xcf\x1f\xb8\xc3\xfe\xff\xff\xcf\xe0\xa7\x91\xc1\x50\x67\xb7\x86\ +\x61\x4d\xf9\x46\x86\xbd\x13\xd7\x30\x88\xf0\x8b\x40\xc6\x56\x18\ +\xfe\x32\x30\x33\xb2\x30\xdc\x7b\x77\x99\xe1\xd0\x83\xf5\x0c\xdc\ +\x6c\x7c\x0c\xbf\x7e\xfd\x66\x50\xd7\xe1\x67\xf8\xf8\xf1\x15\xc3\ +\xca\x3d\x9b\x20\xf6\xfc\x83\xe5\x03\xb4\x21\x38\x2c\x39\x18\x00\ +\x00\x00\xff\xff\x22\x6a\x08\x8e\x91\x91\x81\xe1\xf7\xcf\xff\x0c\ +\x12\x32\x2c\x0c\xd6\xee\x32\x0c\x95\x53\xdb\x18\x4c\x35\x8d\x18\ +\x6c\x75\x2d\x19\x7e\xff\xf9\xcd\xc0\xc4\xc4\xc4\xc0\xcc\xc4\xc4\ +\xf0\xff\xff\x3f\x06\x55\x29\x55\x06\x55\x29\x48\x29\x02\x49\xbf\ +\xff\x19\x98\x19\x59\x18\x3e\xfd\x7c\xc7\x30\xe7\x6c\x2d\xc3\xdf\ +\x7f\xbf\x19\xd8\x59\x38\x19\x7e\xff\xfe\xc7\x20\x24\xc6\xcc\xe0\ +\x1a\x28\xcb\xd0\xb1\xaa\x9b\x41\x5c\x58\x94\x21\xc4\xde\x9f\x81\ +\x99\x81\x91\xe1\xff\xff\x7f\x0c\x9f\x7f\x7d\x60\x78\xf8\xe1\x3a\ +\xc3\xa9\x27\x3b\x19\xde\x7c\x7b\xc6\xc0\xca\xcc\x86\xd2\x52\x04\ +\x00\x00\x00\xff\xff\x62\xe4\xf1\x90\xfb\xcf\xc8\xc8\xc0\xf0\xeb\ +\xe7\x7f\x06\x59\x45\x76\x06\xb7\x40\xdc\x03\xfb\xff\xff\x33\x30\ +\x70\x70\x30\x33\x9c\x3a\xf2\x96\xe1\xe6\xf9\xbf\x0c\x4b\x6b\x66\ +\x33\x78\x59\x3a\x42\xca\x75\x68\x1a\xfe\xf7\xff\x1f\xc3\xff\xff\ +\x90\x92\x07\x36\x9e\xf8\xe4\xe3\x6d\x86\xe9\xa7\xca\x18\x9e\x7e\ +\xba\xcb\xc0\xc9\xca\x03\x1f\xfc\xfc\xff\x9f\x81\x81\x9d\x9d\x89\ +\xe1\xcb\x97\x5f\x0c\x2f\x5f\x7e\x65\x50\x93\x51\x66\x10\x17\x12\ +\x63\xf8\xf1\xe7\x1b\xc3\xfb\xef\x2f\x19\x3e\xfe\x78\x03\xcf\xfc\ +\xe8\x19\x14\x00\x00\x00\xff\xff\x22\xc9\xe1\x30\xcb\x38\x39\x59\ +\x18\x1e\xde\xff\xcc\x70\xf1\xf4\x47\x06\x6f\xfd\x50\x86\x64\xcf\ +\x78\x06\x1d\x25\x4d\x06\x56\x68\x6f\x06\xe6\xe0\x6f\xbf\x3f\x33\ +\xac\xbd\x3a\x99\xe1\xf0\x83\x0d\x0c\x7f\xfe\xfd\x82\x8c\x02\xa0\ +\x8d\xd8\xc2\x86\xac\x59\x58\x98\x18\x7e\xfc\xfa\xc1\xf0\xfb\xcf\ +\x1f\xc8\x8c\x03\x13\x2b\xb4\xe4\x61\xc4\x3a\xca\x0b\x00\x00\x00\ +\xff\xff\x22\x79\x0e\x82\x91\x91\x81\xe1\xfb\xb7\x3f\x0c\x32\x72\ +\xdc\x0c\x7e\xe1\xd2\x0c\x77\x19\x37\x31\x18\x25\x58\x31\xb4\x2e\ +\xee\x63\x60\x60\x60\x60\xf8\xfb\x17\x61\xc9\x9f\x7f\xbf\x18\x0e\ +\xde\x5f\xcb\xc0\xc0\xc0\xc0\xc0\xc5\xca\x8b\xd5\x01\x8c\x4c\x90\ +\x51\x81\x9f\x3f\xff\x32\x30\x33\xb0\x31\x70\xb0\x72\x33\xb0\xb3\ +\x70\x32\x30\x33\x42\x27\x0b\xb0\x0f\x4d\xff\x07\x00\x00\x00\xff\ +\xff\x22\x6b\xf2\x84\x91\x89\x81\xe1\xd7\xaf\x7f\x0c\x3f\xbe\xfd\ +\x65\x50\x53\x15\x67\x10\x94\xe0\x65\xd8\x7a\x6c\x0f\x03\x03\x03\ +\x03\x03\x13\x33\x33\x3c\xc9\xf0\xb1\x0b\x33\xb8\xa9\xc6\x30\x7c\ +\xf8\xf1\x8a\xe1\xe3\xcf\xb7\xd0\x34\x8f\x3d\x2a\x19\x19\x19\x50\ +\x7a\x3d\x78\xdb\x30\xff\x19\xfe\x00\x00\x00\x00\xff\xff\x22\x6b\ +\x46\x02\x6e\xd1\x3f\x06\x86\xff\x8c\x7f\x18\xd4\x35\x04\x19\xce\ +\x1c\xbd\xca\x70\xe9\xde\x15\x06\x3d\x25\x1d\xc8\x80\x11\xb4\x76\ +\x0d\xd4\xca\x66\x90\xe1\x53\x65\x78\xf1\xe9\x11\xc3\xb1\x27\x9b\ +\x19\x3e\xfc\x78\x85\xb3\xfd\x4e\x84\xad\xff\xff\xfd\xff\xc3\xc8\ +\xcf\x2e\xfa\x0c\x00\x00\x00\xff\xff\xa2\x6c\xba\x8a\x91\x81\xe1\ +\xf7\xef\xff\x0c\xea\xba\xbc\x0c\x7f\xfe\x7f\x63\x98\xb1\x71\x21\ +\x03\x03\x03\x03\xc3\x9f\xbf\x7f\xe0\x0d\x31\x16\x46\x56\x06\x2b\ +\x39\x1f\x86\x20\x9d\x2c\x06\x5e\x36\x01\x86\xbf\xff\xfe\x30\xe0\ +\xcc\x40\x04\x00\x13\x23\xe3\xbf\xdf\x7f\x7f\x32\xa8\x0a\x1b\xed\ +\x07\x00\x00\x00\xff\xff\xa2\xc8\xe1\x8c\x8c\x0c\x0c\x7f\x7f\xff\ +\x67\xe0\x15\x60\x64\x70\x74\x97\x65\x98\xb9\x76\x31\xc3\xf6\x13\ +\x7b\x19\xd8\x58\xd9\xe0\x0e\xff\xcf\xf0\x9f\x88\xf9\x1f\xa2\xc0\ +\xff\xff\x0c\xff\x99\x98\x99\xd8\x7e\x3b\x28\x06\xcf\x02\x00\x00\ +\x00\xff\xff\xa2\x78\x82\x90\x91\x89\x81\xe1\xe7\x8f\x7f\x0c\xda\ +\x86\x3c\x0c\xf6\x3e\xc2\x0c\x69\x93\x32\x19\x66\x6c\x9a\xcf\xf0\ +\xe1\xf3\x67\x86\xff\xff\x11\x6d\x94\x6f\xbf\x3f\x33\xfc\xf9\xff\ +\x1b\xe7\xc8\x14\x0e\xd3\xff\x33\x32\x32\xfd\x63\x62\x64\xfe\xc3\ +\xc2\xc4\xfa\xfb\xfd\xf7\x57\x8c\x0e\x0a\xa1\x53\xd4\x45\x8d\x8e\ +\x03\x00\x00\x00\xff\xff\x22\xb9\x38\xc4\x05\x60\x65\xfc\xb7\xef\ +\xbf\x19\x9e\x3c\xfd\xc0\x20\x29\x20\xc5\xa0\x28\x29\xc7\xc0\xce\ +\xc6\xce\xf0\xfd\xf7\x67\x86\x8f\x3f\xde\x41\x47\xbc\x30\xd3\x36\ +\x64\x62\x16\xba\x82\x02\xba\xd8\xe0\x3f\xc3\x3f\xe6\x7f\xff\x20\ +\x0b\x1c\xfe\xfe\xfb\xfd\xef\xf7\xdf\x5f\x4c\xb6\xf2\x41\x2b\x52\ +\x4d\x5b\x62\x58\x98\x58\xfe\x02\x00\x00\x00\xff\xff\x22\x3b\x73\ +\x62\x58\xce\xc8\xc0\xf0\xe3\xfb\x5f\x06\x16\x66\x66\x06\x35\x15\ +\x31\x86\x5f\xbf\xbf\x31\xdc\xff\x78\x09\x3e\xb5\x0d\x9d\x66\xf9\ +\x0f\x59\x09\xc1\x04\x6f\xe3\xfe\x67\xf8\xc7\xfc\xf7\xdf\x5f\xc6\ +\xbf\xff\x7e\x33\xfe\xfd\xf7\x87\xe1\xef\xbf\xbf\x0c\x8c\x0c\x90\ +\x7e\x2c\x17\x2b\xdf\x17\x71\x4e\xb1\xc7\xa2\x5c\x32\xb7\xcd\x64\ +\xdc\x97\x9a\xcb\x7a\xac\x82\x0c\xb4\xff\x67\x04\x00\x00\x00\xff\ +\xff\x62\x81\xac\x7a\xf8\x4f\x95\x09\x70\x48\xf3\xfa\x3f\xc3\xcf\ +\x1f\x7f\xfe\x33\x32\xb2\xfc\xe7\x64\x65\x83\x2f\xd7\xf8\xf7\xff\ +\x2f\xf3\xdf\x7f\x7f\x18\x7f\xff\xfb\xcd\xf8\xe7\xdf\x1f\x86\x7f\ +\xff\x20\x6b\x5e\xd8\x20\x0e\xfc\x2a\xc0\x21\xff\x58\x94\x5b\xe6\ +\xb6\x24\xaf\xc2\x75\x49\x5e\xc5\xab\x92\xbc\x0a\x37\x45\xb8\xa4\ +\x1e\xf0\x71\x08\xbd\x66\x62\x64\xfe\xc7\xc0\xc0\xc0\xf0\xff\xff\ +\x3f\x26\x06\x68\xac\x00\x00\x00\x00\xff\xff\x62\xf9\xf3\xe7\x0f\ +\x03\x1b\x1b\xdb\x3f\x06\x86\xdf\x4c\x24\x25\x3f\x88\x53\xff\x33\ +\x32\x32\xa0\x85\xe0\x7f\xe6\x7f\xff\xff\x30\xfe\xfe\xfb\x8b\xf1\ +\xef\x9f\xdf\xf0\x10\x64\x61\x66\x67\xe0\x66\xe5\xfb\x2a\xc6\x21\ +\xff\x58\x94\x5b\xfa\x0e\xc4\x81\x4a\x57\x25\x78\x14\x6e\x8a\x72\ +\x4b\xdd\x47\x76\x20\x3a\x80\x2c\xc8\xf9\xcf\xc0\xc4\xc8\x0c\xcf\ +\xe5\x00\x00\x00\x00\xff\xff\x62\x11\x13\x10\x7e\xf2\xf4\xed\x73\ +\x59\x76\x66\xee\xbf\xff\xff\x33\x30\x63\x77\x3c\xe3\x7f\xa4\xc5\ +\x2e\x28\x69\x10\x11\x82\x10\x33\x59\x61\x0e\xe4\x16\x7d\x22\xca\ +\x2d\x73\x5b\x82\x57\xe1\xba\x14\xaf\xe2\x35\x09\x1e\x85\x9b\x22\ +\xdc\xd2\xf7\xf9\x39\x84\x5e\xe1\x72\xe0\xff\xff\xff\x98\xff\xc3\ +\x63\x1f\xba\x18\x81\x91\xf1\x3f\x13\x96\x21\x5b\x00\x00\x00\x00\ +\xff\xff\x62\xd9\xd3\xbf\xc1\x2e\xa4\x2e\x6e\xd3\xc5\x2b\x97\x74\ +\x59\x98\xa5\xfe\x42\x06\x53\x99\xfe\x33\x31\x22\x56\x01\xfd\xfd\ +\xff\x87\xf1\xcf\x5f\xc8\x0a\x86\xbf\xff\xa1\x21\xc8\xc4\xce\xc0\ +\xcd\xc6\xf7\x5d\x94\x43\x0e\x12\x82\x3c\x8a\xd7\x24\x79\x15\xaf\ +\x49\xf0\xca\xdf\x10\xe5\x96\xb9\xcf\xcf\x2e\xf4\x8a\x89\x09\xb7\ +\x03\xff\x41\x17\xcc\x40\x03\x05\xb2\x04\x84\x91\xe9\x2f\xb1\x91\ +\x0e\x00\x00\x00\xff\xff\x62\xfc\xff\xff\x3f\xc3\xeb\x8f\x6f\x84\ +\xbd\x4a\xa2\x37\x3f\xfe\x76\xd9\x32\x38\x46\xee\xdf\xd7\x6f\xdf\ +\x99\xfe\x33\x40\x06\x32\x59\x99\xd8\x18\xb8\x58\x79\x3f\x09\x70\ +\x88\x3d\x11\xe1\x96\xbe\x23\xc1\xa3\x70\x43\x92\x57\xe1\x9a\x38\ +\x8f\xfc\x4d\x51\x6e\xa9\x07\xfc\xec\xc2\x78\x1d\x88\x2d\x04\x89\ +\x74\x1b\x5e\x00\x00\x00\x00\xff\xff\x62\xfc\xf3\xf7\x0f\x33\x33\ +\x13\xf3\xdf\x57\xef\xde\xf3\x66\xcf\x4e\xde\x2e\xa1\xfd\x56\x4f\ +\x96\x4f\xfd\xac\x04\xaf\xc2\x75\x69\x3e\x95\x4b\x52\xbc\x8a\xd7\ +\xc4\xb8\x65\xef\x08\x70\x8a\xbe\x64\x66\x62\xc6\xde\xe2\xf9\xff\ +\x8f\xf9\x1f\xc3\x3f\x68\xc3\x96\x11\x69\xa9\x13\xd9\x9d\x78\x82\ +\x00\x00\x00\x00\xff\xff\x03\x00\x3c\x1e\x17\xa6\x18\xe4\xa8\x9e\ +\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +" + +qt_resource_name = b"\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x0b\ +\x05\x52\xbf\x27\ +\x00\x71\ +\x00\x74\x00\x2d\x00\x6c\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ +\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/animation/easing/form.ui b/examples/widgets/animation/easing/form.ui new file mode 100644 index 0000000..61a7921 --- /dev/null +++ b/examples/widgets/animation/easing/form.ui @@ -0,0 +1,205 @@ + + + Form + + + + 0 + 0 + 545 + 471 + + + + Easing curves + + + + + + + 0 + 0 + + + + + 16777215 + 120 + + + + Qt::ScrollBarAlwaysOff + + + QListView::Static + + + false + + + QListView::IconMode + + + false + + + + + + + + + Path type + + + + + + Line + + + true + + + buttonGroup + + + + + + + Circle + + + buttonGroup + + + + + + + + + + + 0 + 0 + + + + Properties + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + Period + + + + + + + false + + + -1.000000000000000 + + + 0.100000000000000 + + + -1.000000000000000 + + + + + + + Amplitude + + + + + + + false + + + -1.000000000000000 + + + 0.100000000000000 + + + -1.000000000000000 + + + + + + + Overshoot + + + + + + + false + + + -1.000000000000000 + + + 0.100000000000000 + + + -1.000000000000000 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + 0 + 0 + + + + + + + + + + + + false + + + + diff --git a/examples/widgets/animation/easing/images/qt-logo.png b/examples/widgets/animation/easing/images/qt-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..14ddf2a0289e64c686b34712b8754bc4baac2726 GIT binary patch literal 5149 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 literal 0 HcmV?d00001 diff --git a/examples/widgets/animation/easing/ui_form.py b/examples/widgets/animation/easing/ui_form.py new file mode 100644 index 0000000..4ecf485 --- /dev/null +++ b/examples/widgets/animation/easing/ui_form.py @@ -0,0 +1,115 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'form.ui' +# +# Created: Wed Feb 16 22:14:47 2011 +# by: pyside-uic 0.2.6 running on PySide 1.0.0~beta5 +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore, QtGui, QtWidgets + +class Ui_Form(object): + def setupUi(self, Form): + Form.setObjectName("Form") + Form.resize(545, 471) + self.gridLayout = QtWidgets.QGridLayout(Form) + self.gridLayout.setObjectName("gridLayout") + self.easingCurvePicker = QtWidgets.QListWidget(Form) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.easingCurvePicker.sizePolicy().hasHeightForWidth()) + self.easingCurvePicker.setSizePolicy(sizePolicy) + self.easingCurvePicker.setMaximumSize(QtCore.QSize(16777215, 120)) + self.easingCurvePicker.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.easingCurvePicker.setMovement(QtWidgets.QListView.Static) + self.easingCurvePicker.setProperty("isWrapping", False) + self.easingCurvePicker.setViewMode(QtWidgets.QListView.IconMode) + self.easingCurvePicker.setSelectionRectVisible(False) + self.easingCurvePicker.setObjectName("easingCurvePicker") + self.gridLayout.addWidget(self.easingCurvePicker, 0, 0, 1, 2) + self.verticalLayout = QtWidgets.QVBoxLayout() + self.verticalLayout.setObjectName("verticalLayout") + self.groupBox_2 = QtWidgets.QGroupBox(Form) + self.groupBox_2.setObjectName("groupBox_2") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_2) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.lineRadio = QtWidgets.QRadioButton(self.groupBox_2) + self.lineRadio.setChecked(True) + self.lineRadio.setObjectName("lineRadio") + self.buttonGroup = QtWidgets.QButtonGroup(Form) + self.buttonGroup.setObjectName("buttonGroup") + self.buttonGroup.addButton(self.lineRadio) + self.verticalLayout_2.addWidget(self.lineRadio) + self.circleRadio = QtWidgets.QRadioButton(self.groupBox_2) + self.circleRadio.setObjectName("circleRadio") + self.buttonGroup.addButton(self.circleRadio) + self.verticalLayout_2.addWidget(self.circleRadio) + self.verticalLayout.addWidget(self.groupBox_2) + self.groupBox = QtWidgets.QGroupBox(Form) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) + self.groupBox.setSizePolicy(sizePolicy) + self.groupBox.setObjectName("groupBox") + self.formLayout = QtWidgets.QFormLayout(self.groupBox) + self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) + self.formLayout.setObjectName("formLayout") + self.label = QtWidgets.QLabel(self.groupBox) + self.label.setObjectName("label") + self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label) + self.periodSpinBox = QtWidgets.QDoubleSpinBox(self.groupBox) + self.periodSpinBox.setEnabled(False) + self.periodSpinBox.setMinimum(-1.0) + self.periodSpinBox.setSingleStep(0.1) + self.periodSpinBox.setProperty("value", -1.0) + self.periodSpinBox.setObjectName("periodSpinBox") + self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.periodSpinBox) + self.label_2 = QtWidgets.QLabel(self.groupBox) + self.label_2.setObjectName("label_2") + self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2) + self.amplitudeSpinBox = QtWidgets.QDoubleSpinBox(self.groupBox) + self.amplitudeSpinBox.setEnabled(False) + self.amplitudeSpinBox.setMinimum(-1.0) + self.amplitudeSpinBox.setSingleStep(0.1) + self.amplitudeSpinBox.setProperty("value", -1.0) + self.amplitudeSpinBox.setObjectName("amplitudeSpinBox") + self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.amplitudeSpinBox) + self.label_3 = QtWidgets.QLabel(self.groupBox) + self.label_3.setObjectName("label_3") + self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_3) + self.overshootSpinBox = QtWidgets.QDoubleSpinBox(self.groupBox) + self.overshootSpinBox.setEnabled(False) + self.overshootSpinBox.setMinimum(-1.0) + self.overshootSpinBox.setSingleStep(0.1) + self.overshootSpinBox.setProperty("value", -1.0) + self.overshootSpinBox.setObjectName("overshootSpinBox") + self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.overshootSpinBox) + self.verticalLayout.addWidget(self.groupBox) + spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout.addItem(spacerItem) + self.gridLayout.addLayout(self.verticalLayout, 1, 0, 1, 1) + self.graphicsView = QtWidgets.QGraphicsView(Form) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.graphicsView.sizePolicy().hasHeightForWidth()) + self.graphicsView.setSizePolicy(sizePolicy) + self.graphicsView.setObjectName("graphicsView") + self.gridLayout.addWidget(self.graphicsView, 1, 1, 1, 1) + + self.retranslateUi(Form) + QtCore.QMetaObject.connectSlotsByName(Form) + + def retranslateUi(self, Form): + Form.setWindowTitle(QtWidgets.QApplication.translate("Form", "Easing curves", None)) + self.groupBox_2.setTitle(QtWidgets.QApplication.translate("Form", "Path type", None)) + self.lineRadio.setText(QtWidgets.QApplication.translate("Form", "Line", None)) + self.circleRadio.setText(QtWidgets.QApplication.translate("Form", "Circle", None)) + self.groupBox.setTitle(QtWidgets.QApplication.translate("Form", "Properties", None)) + self.label.setText(QtWidgets.QApplication.translate("Form", "Period", None)) + self.label_2.setText(QtWidgets.QApplication.translate("Form", "Amplitude", None)) + self.label_3.setText(QtWidgets.QApplication.translate("Form", "Overshoot", None)) + diff --git a/examples/widgets/animation/states/states.py b/examples/widgets/animation/states/states.py new file mode 100755 index 0000000..6cf1597 --- /dev/null +++ b/examples/widgets/animation/states/states.py @@ -0,0 +1,265 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2010 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets + +import states_rc + + +class Pixmap(QtWidgets.QGraphicsObject): + def __init__(self, pix): + super(Pixmap, self).__init__() + + self.p = QtGui.QPixmap(pix) + + def paint(self, painter, option, widget): + painter.drawPixmap(QtCore.QPointF(), self.p) + + def boundingRect(self): + return QtCore.QRectF(QtCore.QPointF(0, 0), QtCore.QSizeF(self.p.size())) + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + + # Text edit and button. + edit = QtWidgets.QTextEdit() + edit.setText("asdf lkjha yuoiqwe asd iuaysd u iasyd uiy " + "asdf lkjha yuoiqwe asd iuaysd u iasyd uiy " + "asdf lkjha yuoiqwe asd iuaysd u iasyd uiy " + "asdf lkjha yuoiqwe asd iuaysd u iasyd uiy!") + + button = QtWidgets.QPushButton() + buttonProxy = QtWidgets.QGraphicsProxyWidget() + buttonProxy.setWidget(button) + editProxy = QtWidgets.QGraphicsProxyWidget() + editProxy.setWidget(edit) + + box = QtWidgets.QGroupBox() + box.setFlat(True) + box.setTitle("Options") + + layout2 = QtWidgets.QVBoxLayout() + box.setLayout(layout2) + layout2.addWidget(QtWidgets.QRadioButton("Herring")) + layout2.addWidget(QtWidgets.QRadioButton("Blue Parrot")) + layout2.addWidget(QtWidgets.QRadioButton("Petunias")) + layout2.addStretch() + + boxProxy = QtWidgets.QGraphicsProxyWidget() + boxProxy.setWidget(box) + + # Parent widget. + widget = QtWidgets.QGraphicsWidget() + layout = QtWidgets.QGraphicsLinearLayout(QtCore.Qt.Vertical, widget) + layout.addItem(editProxy) + layout.addItem(buttonProxy) + widget.setLayout(layout) + + p1 = Pixmap(QtGui.QPixmap(':/digikam.png')) + p2 = Pixmap(QtGui.QPixmap(':/akregator.png')) + p3 = Pixmap(QtGui.QPixmap(':/accessories-dictionary.png')) + p4 = Pixmap(QtGui.QPixmap(':/k3b.png')) + p5 = Pixmap(QtGui.QPixmap(':/help-browser.png')) + p6 = Pixmap(QtGui.QPixmap(':/kchart.png')) + + scene = QtWidgets.QGraphicsScene(0, 0, 400, 300) + scene.setBackgroundBrush(scene.palette().window()) + scene.addItem(widget) + scene.addItem(boxProxy) + scene.addItem(p1) + scene.addItem(p2) + scene.addItem(p3) + scene.addItem(p4) + scene.addItem(p5) + scene.addItem(p6) + + machine = QtCore.QStateMachine() + state1 = QtCore.QState(machine) + state2 = QtCore.QState(machine) + state3 = QtCore.QState(machine) + machine.setInitialState(state1) + + # State 1. + state1.assignProperty(button, 'text', "Switch to state 2") + state1.assignProperty(widget, 'geometry', QtCore.QRectF(0, 0, 400, 150)) + state1.assignProperty(box, 'geometry', QtCore.QRect(-200, 150, 200, 150)) + state1.assignProperty(p1, 'pos', QtCore.QPointF(68, 185)) + state1.assignProperty(p2, 'pos', QtCore.QPointF(168, 185)) + state1.assignProperty(p3, 'pos', QtCore.QPointF(268, 185)) + state1.assignProperty(p4, 'pos', QtCore.QPointF(68 - 150, 48 - 150)) + state1.assignProperty(p5, 'pos', QtCore.QPointF(168, 48 - 150)) + state1.assignProperty(p6, 'pos', QtCore.QPointF(268 + 150, 48 - 150)) + state1.assignProperty(p1, 'rotation', 0.0) + state1.assignProperty(p2, 'rotation', 0.0) + state1.assignProperty(p3, 'rotation', 0.0) + state1.assignProperty(p4, 'rotation', -270.0) + state1.assignProperty(p5, 'rotation', -90.0) + state1.assignProperty(p6, 'rotation', 270.0) + state1.assignProperty(boxProxy, 'opacity', 0.0) + state1.assignProperty(p1, 'opacity', 1.0) + state1.assignProperty(p2, 'opacity', 1.0) + state1.assignProperty(p3, 'opacity', 1.0) + state1.assignProperty(p4, 'opacity', 0.0) + state1.assignProperty(p5, 'opacity', 0.0) + state1.assignProperty(p6, 'opacity', 0.0) + + # State 2. + state2.assignProperty(button, 'text', "Switch to state 3") + state2.assignProperty(widget, 'geometry', QtCore.QRectF(200, 150, 200, 150)) + state2.assignProperty(box, 'geometry', QtCore.QRect(9, 150, 190, 150)) + state2.assignProperty(p1, 'pos', QtCore.QPointF(68 - 150, 185 + 150)) + state2.assignProperty(p2, 'pos', QtCore.QPointF(168, 185 + 150)) + state2.assignProperty(p3, 'pos', QtCore.QPointF(268 + 150, 185 + 150)) + state2.assignProperty(p4, 'pos', QtCore.QPointF(64, 48)) + state2.assignProperty(p5, 'pos', QtCore.QPointF(168, 48)) + state2.assignProperty(p6, 'pos', QtCore.QPointF(268, 48)) + state2.assignProperty(p1, 'rotation', -270.0) + state2.assignProperty(p2, 'rotation', 90.0) + state2.assignProperty(p3, 'rotation', 270.0) + state2.assignProperty(p4, 'rotation', 0.0) + state2.assignProperty(p5, 'rotation', 0.0) + state2.assignProperty(p6, 'rotation', 0.0) + state2.assignProperty(boxProxy, 'opacity', 1.0) + state2.assignProperty(p1, 'opacity', 0.0) + state2.assignProperty(p2, 'opacity', 0.0) + state2.assignProperty(p3, 'opacity', 0.0) + state2.assignProperty(p4, 'opacity', 1.0) + state2.assignProperty(p5, 'opacity', 1.0) + state2.assignProperty(p6, 'opacity', 1.0) + + # State 3. + state3.assignProperty(button, 'text', "Switch to state 1") + state3.assignProperty(p1, 'pos', QtCore.QPointF(0, 5)) + state3.assignProperty(p2, 'pos', QtCore.QPointF(0, 5 + 64 + 5)) + state3.assignProperty(p3, 'pos', QtCore.QPointF(5, 5 + (64 + 5) + 64)) + state3.assignProperty(p4, 'pos', QtCore.QPointF(5 + 64 + 5, 5)) + state3.assignProperty(p5, 'pos', QtCore.QPointF(5 + 64 + 5, 5 + 64 + 5)) + state3.assignProperty(p6, 'pos', QtCore.QPointF(5 + 64 + 5, 5 + (64 + 5) + 64)) + state3.assignProperty(widget, 'geometry', QtCore.QRectF(138, 5, 400 - 138, 200)) + state3.assignProperty(box, 'geometry', QtCore.QRect(5, 205, 400, 90)) + state3.assignProperty(p1, 'opacity', 1.0) + state3.assignProperty(p2, 'opacity', 1.0) + state3.assignProperty(p3, 'opacity', 1.0) + state3.assignProperty(p4, 'opacity', 1.0) + state3.assignProperty(p5, 'opacity', 1.0) + state3.assignProperty(p6, 'opacity', 1.0) + + t1 = state1.addTransition(button.clicked, state2) + animation1SubGroup = QtCore.QSequentialAnimationGroup() + animation1SubGroup.addPause(250) + animation1SubGroup.addAnimation(QtCore.QPropertyAnimation(box, b'geometry', state1)) + t1.addAnimation(animation1SubGroup) + t1.addAnimation(QtCore.QPropertyAnimation(widget, b'geometry', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p1, b'pos', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p2, b'pos', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p3, b'pos', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p4, b'pos', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p5, b'pos', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p6, b'pos', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p1, b'rotation', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p2, b'rotation', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p3, b'rotation', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p4, b'rotation', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p5, b'rotation', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p6, b'rotation', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p1, b'opacity', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p2, b'opacity', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p3, b'opacity', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p4, b'opacity', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p5, b'opacity', state1)) + t1.addAnimation(QtCore.QPropertyAnimation(p6, b'opacity', state1)) + + t2 = state2.addTransition(button.clicked, state3) + t2.addAnimation(QtCore.QPropertyAnimation(box, b'geometry', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(widget, b'geometry', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p1, b'pos', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p2, b'pos', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p3, b'pos', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p4, b'pos', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p5, b'pos', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p6, b'pos', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p1, b'rotation', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p2, b'rotation', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p3, b'rotation', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p4, b'rotation', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p5, b'rotation', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p6, b'rotation', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p1, b'opacity', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p2, b'opacity', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p3, b'opacity', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p4, b'opacity', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p5, b'opacity', state2)) + t2.addAnimation(QtCore.QPropertyAnimation(p6, b'opacity', state2)) + + t3 = state3.addTransition(button.clicked, state1) + t3.addAnimation(QtCore.QPropertyAnimation(box, b'geometry', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(widget, b'geometry', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p1, b'pos', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p2, b'pos', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p3, b'pos', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p4, b'pos', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p5, b'pos', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p6, b'pos', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p1, b'rotation', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p2, b'rotation', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p3, b'rotation', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p4, b'rotation', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p5, b'rotation', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p6, b'rotation', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p1, b'opacity', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p2, b'opacity', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p3, b'opacity', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p4, b'opacity', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p5, b'opacity', state3)) + t3.addAnimation(QtCore.QPropertyAnimation(p6, b'opacity', state3)) + + machine.start() + + view = QtWidgets.QGraphicsView(scene) + view.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/animation/states/states_rc.py b/examples/widgets/animation/states/states_rc.py new file mode 100644 index 0000000..fe8a05c --- /dev/null +++ b/examples/widgets/animation/states/states_rc.py @@ -0,0 +1,2221 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: to lokakuuta 14 16:08:44 2010 +# by: The Resource Compiler for PySide (Qt v4.7.0) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x1b\x48\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\ +\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x06\xec\x00\x00\x06\xec\ +\x01\x1e\x75\x38\x35\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\ +\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x1a\xc5\x49\x44\ +\x41\x54\x78\xda\xcd\x7b\x0b\x5c\xcf\xf7\xf7\xbf\xf9\xee\xc6\x30\ +\x14\xdb\xd7\xfd\x32\x66\xc6\x66\xc3\xd8\xec\x8a\x51\x51\x2a\x42\ +\xae\xb9\x35\x84\xb9\x33\x86\xe6\xba\x94\x6b\xc9\xa5\x74\x2f\x11\ +\xa9\x24\x95\x8a\xe4\xbe\xdc\x72\x0b\x45\x49\x4a\x4a\xf7\xcb\xa7\ +\xcb\xe7\xf9\x3f\xcf\xd7\x47\xf3\xdd\x77\xdf\xff\x77\xfb\x7d\xc7\ +\xf0\x78\x9c\xf5\xde\xfb\xf3\x7e\x9d\xf3\x3c\xe7\x75\x5e\xe7\xf5\ +\x7a\x9f\x73\xde\x35\x00\xfc\x65\x5a\xbf\x7e\xbd\xbe\x87\x87\xc7\ +\x48\x77\x77\x77\xcb\xad\x5b\xb7\xb6\x5f\xb0\x60\x41\xcd\xff\xf6\ +\xfc\xa6\x4d\x9b\x6a\xb9\x07\x44\xce\xf1\x39\x7a\xcf\xca\x3b\x26\ +\x65\xa2\x47\x40\xf8\x4f\x32\x76\xd2\xce\x9d\x3b\xad\x5c\x5c\x5c\ +\xc6\x0a\x4d\x12\x9a\xbc\x63\xc7\x0e\x5e\x8f\x70\x75\x75\xed\x2d\ +\xfc\x9b\x71\xec\xd3\xa6\xbf\x34\x38\x28\x28\xa8\xf6\xee\xdd\xbb\ +\x8f\x87\x87\x87\x17\x47\x47\x47\xe3\xe8\xd1\xa3\x90\xbf\x15\xb1\ +\xb1\xb1\x5a\xf9\x2d\xf3\xc0\x81\x03\x39\x01\x01\x01\x09\xfb\xf7\ +\xef\x4f\x15\xba\x11\x12\x12\xf2\xe0\xd0\xa1\x43\x05\x31\x31\x31\ +\xda\x5b\xc9\x77\x50\x5c\x56\xa9\xe8\xc6\xad\x64\xc8\x18\x35\xf6\ +\xd4\xa9\x53\x88\x88\x88\x28\x38\x71\xe2\x04\xc2\xc2\xc2\x1e\xc9\ +\xb3\xfc\x5b\x10\x19\x19\x09\xa1\x22\xe1\x1b\xb7\x61\xc3\x86\x56\ +\x2f\x84\x01\xbc\xbd\xbd\x03\x05\x60\x85\x28\x19\x2b\x33\x64\x2d\ +\xb3\x38\xd5\xc7\xc7\x67\x9d\xbf\xbf\x7f\xe0\xae\x5d\xbb\xa2\x45\ +\xe1\xdb\x02\xf8\x4a\x58\x70\x60\x8e\xb7\xdd\x92\x87\x7b\xf7\x05\ +\x95\xee\xda\x1d\x58\xe6\xe2\xb9\xb7\x6c\xf9\xd6\xb0\xf2\xb9\xce\ +\xa7\x2a\xe7\x6f\x3b\x53\xb9\xd6\x3d\xae\x6c\x93\x67\x4c\xe1\x36\ +\x8f\x43\x99\xde\x1e\x81\x57\xc3\x67\x98\xaf\xda\xe3\xb0\x6c\xa2\ +\xf0\x1c\xec\xe7\xe7\x37\x55\xe4\xcc\x17\x9e\xbb\xf6\xed\xdb\x77\ +\x4e\x8c\x53\x29\xc6\xaa\x14\x6f\x19\xf2\x5c\x0d\x20\xb3\x50\xff\ +\xd8\xb1\x63\x5a\x01\x75\xea\x3f\xfd\x7e\xd2\xb0\x51\x97\x63\x03\ +\x1a\x6e\x3a\x32\x50\x2f\x39\x66\x60\x43\xed\xd1\xc1\x4d\x71\x39\ +\x25\x1f\x57\xd3\x0a\x90\x78\xaf\x08\xc9\x19\x45\xb8\x9d\x49\xd2\ +\x5d\x27\x09\xdd\xb8\x57\x88\xab\x77\x0b\x70\x6d\x58\x6b\x24\x98\ +\xbc\xa5\xfd\xc5\x50\xff\x97\xf3\x06\x7a\x0b\xe3\xfb\xe9\x75\xa8\ +\xe6\x2b\x4b\xac\x63\x70\x70\x70\x8a\x78\x5d\xce\x73\x35\x00\xd7\ +\xac\xb8\x6c\x95\xa7\xa7\xa7\x55\xf5\xbd\xab\xfd\xeb\x35\x8c\x37\ +\xd2\x5f\x15\x6f\xa0\x77\xfb\xe2\x80\x46\xb8\x36\xb8\x09\x6e\x8d\ +\x68\x89\x3b\x56\xef\x20\xcd\xe6\x43\x64\xe7\x97\x21\xb7\x50\x83\ +\xfc\xe2\x72\x14\x94\xe8\xa8\xb0\xa4\x82\x7f\xd5\xbd\xdc\x22\x0d\ +\x72\x0a\x34\xb8\x3f\xf3\x63\xa4\x59\x77\xe0\x38\x8e\x57\x7c\xce\ +\x0d\x68\x7c\x9b\xbc\x29\x43\x8c\x1e\x15\x17\x17\xa7\x7d\xae\x06\ +\x10\x97\xdc\x2d\x6b\x1c\x02\xa6\xd9\x49\x8b\x66\xb5\xe2\x0d\xf4\ +\x17\x9d\x33\xd0\x2f\xb8\x6c\xfa\x36\x6e\x5a\xb6\x40\xca\xf8\x76\ +\xb8\x3f\xf5\x7d\x3c\x9c\xd5\x05\x39\x0b\x7b\x20\x6f\x65\x5f\x54\ +\x54\x56\xa1\xb2\x4a\x8b\x2a\x92\x56\x0b\xad\x22\x5e\xab\x7b\xfc\ +\x4d\x3d\x93\xb7\xd6\x08\xb9\xb6\x5f\x72\x1c\xc7\x93\x0f\xf9\x29\ +\xbe\x97\x4c\xdf\x2e\x88\x99\x63\x71\xed\x60\x70\x60\xf1\x73\x35\ +\x80\xaf\xaf\xef\x51\x59\x9f\xda\x0b\x03\xdf\x9a\x28\xca\x3f\xa0\ +\xe2\xb7\x46\xb6\xc2\xdd\x49\xef\xe2\xc1\xf7\x1f\x20\xe7\x07\x51\ +\x7a\x45\x6f\x14\x38\x0c\x40\xd1\x96\x21\x28\x71\xb3\x42\x59\x05\ +\x50\xa2\x01\x8a\x84\x0a\xcb\x74\x54\x50\xaa\xfb\x5b\x24\x54\x2c\ +\xf7\x4b\xcb\x85\x7c\xbf\x43\x89\xcb\x48\x8e\xe3\x78\xf2\x21\x3f\ +\xf2\x25\x7f\x25\xe7\xfc\xf0\x76\xda\xf3\x06\x0d\x27\xec\xb1\xa8\ +\xf1\x8f\xe7\x62\x00\xb7\x2d\x9b\x6e\x6e\x75\x72\xc2\xa5\x81\x8d\ +\x38\x33\x0a\x58\xd6\xcc\x0f\xf1\x68\xc9\xe7\xc8\xb7\x33\x50\xe0\ +\x4b\xdd\xc7\x42\xe3\x3f\x19\x15\x41\xb3\x50\x19\xb9\x04\x0f\x0b\ +\x81\x07\x05\x40\x46\x3e\x70\x3f\x0f\x48\x57\xa4\xbb\xce\x10\xca\ +\x94\xfb\x59\xf2\x4c\xd5\xd1\x15\xa8\x0a\xff\x81\xe3\x38\x9e\x7c\ +\xc8\x8f\x7c\xc9\x9f\x72\x28\x8f\x72\xb9\x34\xae\x9c\x37\xaa\xdf\ +\xf2\x6f\x35\xc0\x39\xc3\x06\x9f\x3b\xaf\x58\xa4\xdd\xb0\x7e\x3d\ +\x6e\x5b\xb5\x45\xe6\xf4\xce\x78\xb4\xf8\x53\x9d\xe2\xce\x43\x51\ +\xe6\x33\x11\x15\xfb\x67\xa2\x2a\x62\x11\x10\xb3\x0c\x88\x5e\x02\ +\xed\xe1\x1f\x71\xfb\x21\x90\x94\x05\xdc\x7c\x00\xdc\xc8\x04\x12\ +\x9f\x90\xba\x77\x4b\x7e\x4b\x96\x67\xb4\x11\x0b\x80\xc8\x85\x1c\ +\xc7\xf1\xe4\x43\x7e\xe4\x4b\xfe\x94\x43\x79\x94\xab\xe4\x27\x98\ +\x35\xcd\x25\xa6\xbf\xc5\x00\xbf\x18\xea\x4d\x3c\x6f\xa8\x5f\xe1\ +\xb2\x6a\x11\xdc\x76\x6c\x45\xf6\xdc\x8f\x65\x7d\xf7\x41\x91\xd3\ +\x60\x94\x79\x4f\x50\xb3\xa6\x7d\xac\x34\x22\x45\x91\xb0\x19\x40\ +\xd0\x04\x68\x03\x46\xe0\xd2\x3d\xe0\xc2\x5d\xe0\x5c\x2a\x10\x9f\ +\x02\xfc\xf2\x84\xd4\xbd\xf3\xf2\xdb\xc5\x34\x40\xeb\x63\x02\xec\ +\xb6\xe0\x38\x8e\x27\x1f\xf2\x23\x5f\xf2\xa7\x1c\xca\xa3\x5c\xca\ +\x57\x01\x33\x71\x58\xf3\x0a\x62\x7b\x66\x06\x90\x47\x5f\x3a\x6b\ +\xa0\xb7\xe9\x82\x91\xbe\x8a\xcc\xbe\x9b\xed\x10\x12\x1c\xa4\xd6\ +\x68\x89\xeb\x28\x94\xef\x9d\xc6\x59\xd6\x29\x1e\x31\x0f\x08\xf9\ +\x4e\xa7\x84\xdb\xd7\xc0\xe6\x0e\xa8\x5a\xd3\x08\xc7\x93\x80\x63\ +\x37\x81\xa3\x37\x80\x23\x42\x31\x89\x5a\x44\x5f\xd7\xf2\x5a\x51\ +\xac\xfc\x76\xfc\x16\x50\xb1\xec\x75\x60\x65\x5d\x8e\xe3\x78\xf2\ +\x21\x3f\xf2\xad\xf6\x26\xca\xa3\x5c\x25\x3f\x67\x51\x4f\xa4\x4f\ +\xe9\xa8\x70\x9d\x35\x6c\xb4\x89\x58\x9f\xba\x01\x4e\x19\x34\xb6\ +\xbb\x38\x40\x1f\x49\x12\x80\x32\xa6\x75\x82\xff\x16\x3b\xec\xf7\ +\xf7\x56\xb3\x51\x19\x3a\x57\xb4\x59\xaa\x73\xdb\x03\x53\x00\xff\ +\xc1\xc0\xb6\xee\xc0\x9a\x86\xa8\x5a\x5c\x03\x9a\x85\x35\x51\xb4\ +\xe0\x0d\x04\x9e\x2b\x83\xff\x99\x12\x78\x9f\x28\x82\x47\x5c\x21\ +\xdc\x8e\x15\x28\x72\x97\x6b\x2f\xb9\xe7\x77\xaa\x18\x7b\xe3\x4b\ +\x51\x30\xaf\x0e\x4a\xe6\xfe\x83\xe3\x38\x9e\x7c\xc8\x8f\x7c\xc9\ +\x9f\x72\x28\x8f\x72\x95\xfc\xc2\x4d\xa6\x78\xb4\xf4\x0b\xe2\x52\ +\xf8\x4e\x19\x35\xb6\x7b\xaa\x06\x38\x6d\xa8\x37\xe2\x82\xa1\x1e\ +\x99\x73\xdd\xa9\x2d\x2a\xd8\xcf\x1d\xe1\x07\xf6\x73\x7d\xea\x66\ +\x3d\x7c\x36\xb0\x77\x24\xe0\xda\x0b\x58\x5d\x1f\x95\x8b\x5e\x42\ +\xe9\xfc\x9a\x28\x9c\xf5\x32\xb2\x6c\xea\xe0\xe6\xc4\x36\xd8\x28\ +\x67\x97\xb5\xa1\x59\x58\x15\xf4\x00\x3f\x05\x66\xc0\x76\x5f\x06\ +\x96\xed\xbd\xaf\xae\x57\x06\x65\xe2\xe7\x90\x2c\xac\x0f\xcb\x46\ +\xe2\x84\x36\xc8\x9c\x5c\x17\x79\x33\x5e\xe1\x78\xf2\x21\x3f\xf2\ +\x25\x7f\xca\xa1\x3c\xca\x55\xf2\x35\xbb\xbe\xe3\x92\x20\x2e\xe2\ +\x53\x38\x89\xf9\xa9\x18\xe0\xac\x91\x7e\xb7\x73\x06\x7a\xe5\x37\ +\x2d\x5b\xd2\xc2\x14\xa2\x22\x72\x58\xa0\x3f\x0e\xf8\xb9\x00\x51\ +\xe2\xf6\xa1\x36\x80\x9f\x09\xb0\xa1\x2d\xaa\x7e\xac\x81\xb2\xc7\ +\x8a\xdf\x9b\x5c\x1f\x97\xc6\xb6\xc1\xa9\x51\x9d\x71\x7a\x54\x27\ +\xcc\xf1\xbe\x8b\x99\x3b\x2e\x6b\xa7\xd9\x47\x95\x58\x2d\xd9\xf5\ +\xd0\x74\x86\xd3\x6d\xb3\xe9\x4e\xb7\xc7\x2d\xf1\xcb\xb6\xb1\x8f\ +\x2c\x9d\xb1\x2d\x41\x3b\xd3\x33\x85\xcf\xaa\x31\x17\xc7\xb4\x45\ +\xea\xc4\x06\xc8\x9d\xf6\x2a\xf9\x91\x2f\xf9\x53\x0e\xe5\x51\xae\ +\x92\xaf\x8d\x5a\x02\xcd\xee\x29\xc4\x45\x7c\x0a\xe7\x75\xcb\x96\ +\xe5\xc4\xfe\x97\x0c\x10\xdf\x5f\xff\x9f\x67\x0c\xf4\xb3\x13\x87\ +\x36\xe3\x1a\x53\x5b\x50\x91\xa3\x39\x72\xbd\xac\x71\x3c\x2e\x0e\ +\xe1\x5e\x1b\x80\x10\x6b\xc0\xa3\xaf\x9a\x9d\xf2\x1f\x5e\x42\xf1\ +\x9c\x7f\x20\x6b\x6a\x6d\x9c\x1d\xd5\x16\xc7\x2c\x3b\x2a\x8a\x1b\ +\xde\xae\xd2\x75\x60\xbb\xb4\x6f\xbe\xec\x73\xe0\xe3\x8f\x3f\x76\ +\x16\x5a\x2f\xb4\xea\xa3\x8f\x3e\x5a\x4a\xe2\x35\xef\xf1\xb7\xde\ +\x5f\xf5\x3e\xb0\xd5\xa8\x5d\xca\x91\xa1\xed\x2b\xaa\xc7\x9f\x19\ +\xf9\x0e\xd2\x27\xd5\x41\xde\xf4\x57\xc8\x9f\x72\x28\x8f\x72\x75\ +\xf2\x0f\x2f\x62\x80\xa4\x11\x88\x8f\x38\x15\xde\x04\x8b\xe6\xd9\ +\xd4\xe1\x7f\x36\xc0\xf1\xfe\x8d\x4e\x5f\x31\xfb\x27\xf7\x5c\x75\ +\x10\x29\xdc\x38\x08\x65\x7e\xd6\x38\xed\xb7\x06\x91\x11\x11\xb8\ +\xea\xbb\x10\xd8\xf9\x25\x60\xfb\x0a\x34\x0b\x64\xd6\x67\xbe\x8c\ +\xd4\x49\xf5\x70\x74\xf8\x3b\x88\x1e\xd6\x0e\xe1\x43\xda\x94\x2c\ +\xeb\xd3\x2e\xbe\x6b\xd7\xae\x1b\x44\xb9\x39\xa2\xec\x10\xb9\xfe\ +\xec\x43\xdd\xbf\x76\x5d\xba\x74\x69\x4a\xe2\x35\x6f\xf0\x37\x3e\ +\xc3\x67\x39\x66\xda\x57\x1d\x8f\x1f\x1c\xdc\xa6\x98\xbc\xc8\x33\ +\x79\x5c\x7d\xe4\x4c\x7d\x8d\x72\x28\x8f\x72\x75\xf2\x83\x27\x01\ +\x51\x8b\xe9\x09\xc4\x47\x9c\xc4\xab\x70\x9f\x19\xd4\xe4\xf4\xff\ +\x64\x80\xb8\x7e\xfa\xc6\x8c\xf8\xc9\x63\xda\x20\x7b\xce\x47\xc8\ +\x5f\x6b\x88\x52\xcf\x71\x28\x0d\x5b\x8c\xa8\x88\x30\x84\xca\x12\ +\xd0\xee\xfc\x1a\x58\x56\x53\xb9\x66\xfe\xf7\xaf\xe0\xfa\xb8\x06\ +\x38\x64\xd1\x06\x91\x16\xad\xb4\x73\xbe\x69\x7f\x56\x94\x58\x2b\ +\x0a\x0e\xa7\x72\xa2\x94\xbe\xd0\x2b\x7f\xe4\x92\x7c\x86\xcf\x72\ +\x0c\xc7\x92\x87\xcd\x97\x1d\x4e\x46\x0c\x69\x5d\x45\xde\x97\x47\ +\xeb\xe1\xe1\xe4\xd7\x28\x8f\x72\x29\x9f\x3b\x05\x3d\x81\x31\x81\ +\x07\x28\xe2\x24\x5e\xe2\x56\xf8\xe3\x0c\xdf\x36\xfe\xbf\x19\xc0\ +\xb6\x46\xcd\xe3\xfd\x1b\xa7\xca\xde\xaa\x5b\xf7\xcb\xbf\x91\xa3\ +\xe9\x08\x54\x84\xcc\x46\xd4\x3e\x0f\x99\xfd\x70\x9c\x71\x9e\x0c\ +\x2c\x7f\xfd\x57\xe5\xcf\x8f\xd6\x47\xc8\xe0\x96\x08\x1d\xdc\x5c\ +\x63\xdc\xb3\x93\xb7\xcc\xe4\x58\x51\xa4\xb3\xd0\xeb\xff\xeb\x29\ +\x8d\x63\xc9\x83\xbc\x8c\x3e\xe9\xec\x15\x6a\xde\xa2\x92\x32\xce\ +\x8e\x68\x84\xac\xef\x5e\xaf\x36\x82\xc2\x01\xaf\xfe\xc0\xc1\x69\ +\x34\x02\x71\x12\x2f\x71\x2b\xfc\xf1\x43\x5a\xa6\x52\xa7\x3f\x6d\ +\x80\x98\x7e\x8d\xa7\x26\x18\x37\xe6\x0b\x08\x5f\x48\x64\x9b\x31\ +\x83\x66\x8f\x0d\x0e\x07\xec\x54\x89\x8b\x88\x1d\xb6\xa8\x5c\xdd\ +\x48\xb9\x61\x81\x80\xb8\x39\xae\x2e\xf6\x99\x35\x83\xe7\xc0\x66\ +\x0f\xbb\x75\xe9\xb2\x46\x66\xee\x2b\x01\x5e\xf7\x69\x25\x2d\xc8\ +\x8b\x3c\x47\x0f\x1b\x7a\x29\xd0\xbc\xb5\x96\xb2\xae\x8e\xac\x47\ +\x23\x50\xbe\xc2\x81\x9f\x1b\x01\x7e\xa6\x40\xf8\x1c\x9e\x1e\x89\ +\x97\xb8\x89\x5f\xe9\x71\xd4\xe8\xed\xa9\x7f\xca\x00\x47\xbe\x6e\ +\xf5\xfa\x29\x83\x46\x8f\x6e\x0c\x6f\x81\xcc\x19\x9d\x91\xbf\xe6\ +\x5b\x14\x7a\x4c\x40\xa0\xef\x4e\x04\xf8\xfb\x21\xcc\xdd\x1e\x9a\ +\xf5\x1d\x50\x21\x81\x88\x91\x39\x53\x40\xec\x37\x6b\x2c\xca\x37\ +\x79\x24\x20\x17\xca\x6c\x75\x11\xc0\x2f\x3f\xed\xd4\x15\x79\x3a\ +\x38\x38\xc4\x2e\x5e\xf4\x03\x7c\x07\x34\xc9\x0f\x34\x7d\x0b\xa9\ +\x63\x6b\x73\x39\x10\x87\xc2\x03\xc7\x8e\x40\xe0\x18\x06\x45\xd9\ +\x1e\x65\x29\x78\x8c\x25\x7e\xa5\xc7\xc5\xa1\xad\x1e\x51\xb7\x3f\ +\x34\xc0\xa1\x7e\x8d\xe7\x5d\xaa\x9e\x7d\x9e\xb0\x9c\xc7\x62\xfb\ +\xe6\x75\x70\x74\x74\xc4\x41\xd7\x35\x28\x75\xee\x05\xed\x92\x1a\ +\x28\x96\x83\x4a\xce\xd4\x57\x11\x65\xd1\x00\xfe\x26\x8d\xca\x7b\ +\x7c\xd4\xd9\x56\x40\xbe\x23\xa4\x4e\x61\xcf\x82\x24\xf7\xb0\x55\ +\xa8\xf8\xf3\x5e\x9f\xae\xf3\x1c\xf0\x56\x59\x84\x59\x43\xa4\x8f\ +\xaf\x45\x1c\xc4\x43\x5c\x8c\x07\x8f\x97\xc2\x52\x94\x07\xce\xe0\ +\xf9\x80\x7a\x28\x7d\x82\xe6\x8e\x4a\x92\xd7\xf8\x63\x92\xad\xf2\ +\x93\x3c\x66\xad\xff\x68\x80\xf0\x7e\x6f\x5d\xe1\xb6\xc7\xb5\x93\ +\xb0\x61\x12\x7c\xbc\xbd\xb0\x6d\xeb\x56\x1c\xdb\x3e\x4f\x82\x8b\ +\x29\xb0\xf6\x6d\xba\x9c\x3a\xa4\x5c\x1e\xf3\x06\xbc\x06\xd6\xd7\ +\x8e\xe8\xf5\x9e\x97\x04\xab\xce\xcf\x52\x79\x92\xa4\xc8\x4c\x0e\ +\x1e\x3c\x88\xd5\xab\x57\x7b\x9a\xf4\xe8\xec\xea\x31\xa0\x81\xf6\ +\xdc\xb0\x7a\xc8\x9c\xf4\x3a\xf1\x10\x97\xc2\x87\x3d\xc3\xd5\x69\ +\xb1\x2a\x72\xb1\xf2\x82\xbc\xd5\x7d\x95\x3e\x31\xe3\x3f\x45\x68\ +\x68\x68\x16\x73\x96\x7b\xf7\xee\x8d\xfa\x9d\x01\x0e\x7e\xd1\xf4\ +\xcd\x78\x43\xbd\x4a\x46\xce\xa8\x8d\x0b\x21\x09\x4c\x04\xf8\xb8\ +\x23\xd1\x7b\x36\x2a\x82\xac\xb9\xe5\xa8\x83\x48\xd1\xec\x97\x95\ +\xeb\x05\x0e\xaa\x8b\xc5\xbd\x9b\x9f\x13\xe5\x3f\x17\xe5\xd5\x7b\ +\xf9\x33\xa6\x9a\x32\x7b\xd9\x92\x84\x29\x96\xe5\x70\x7b\x89\xf1\ +\x47\x8f\x02\x8c\xeb\x21\x4d\xb7\x14\x88\x8b\xf8\x88\x53\xe7\x05\ +\x31\xe2\x05\x01\xd3\xd4\x51\x39\x7b\x7e\x37\xdc\x1c\xdd\xa6\x92\ +\x3a\x06\x06\x06\x9e\x92\x94\x5a\xe9\xef\x0c\x10\xf0\x6d\x13\x9b\ +\x4b\x66\x4d\x64\x9d\x3b\x21\x3a\xe2\x10\x22\xf6\xf9\x22\xdb\x7b\ +\x12\xb4\x3c\x7b\xef\x1b\x05\x38\x34\xa7\x95\xd5\x81\x24\x6d\x5c\ +\x6d\xb8\x18\xd4\xad\x10\xc5\xc7\x09\x29\x77\xfa\x3b\x48\x92\xae\ +\xef\x4b\x32\xe6\xba\x64\xa3\x35\x4b\x96\x2c\xd1\x6c\x37\x68\x80\ +\x5b\x96\x75\x90\x31\xa1\x16\x71\x11\x1f\x71\x12\xaf\x3a\x1b\x54\ +\x1e\x9c\xaf\xdb\x11\x96\x7d\xa9\xde\x1a\x83\x8c\x9a\xd9\xc8\x32\ +\xd8\xca\xac\xb3\xa4\xdb\xbb\xfc\x86\x79\x88\x49\xfb\xb3\xa1\x5e\ +\xdb\x21\xc9\x4e\x1c\xdd\xb9\x1a\xf9\x2e\xc3\xb8\x96\x74\x91\xd5\ +\xdb\x88\x6b\x4c\x9d\xc4\xb2\xa7\xbc\x86\x93\x43\x6b\xe1\xe7\xde\ +\x8d\xae\x75\xeb\xd6\xad\x2d\xc7\x3e\x0f\xea\xd5\xab\x57\xbb\xc5\ +\x5f\xbe\x7d\xf1\xe8\xa0\x37\xe8\x05\xc4\x45\x7c\xc4\x49\xbc\xd5\ +\x3b\x82\xca\x23\xe4\xff\xdc\x5f\xbd\x27\x44\x9a\xb6\x3a\x21\xf9\ +\xcc\x91\x92\x6a\xcf\x17\x03\x8c\x79\x92\xe1\x59\x35\xad\x76\xb0\ +\xe7\x0e\x6d\xe4\xa1\x30\x9c\x58\x37\x1d\x79\xeb\x0c\x51\xbe\x47\ +\x05\x13\xdd\x1b\xd8\xd6\xae\x8c\xb4\xdc\x76\xd4\x9a\xf3\x1f\xf0\ +\x5a\x95\x51\x8f\xce\x56\xd5\x87\x9b\xe7\x41\x94\xfd\x59\xf7\x0f\ +\x47\xee\xfc\xb6\xb6\xe6\xce\xc8\x3a\xc4\x45\x7c\xc4\x49\xbc\xc4\ +\x4d\xfc\x5c\x06\x3c\x1d\xaa\x83\xd1\x95\x91\x6d\x4a\xdd\x5d\xb6\ +\x7e\x45\x0f\x90\x98\x62\xfb\x2b\x33\x2f\x57\x97\x98\xa8\xc8\x70\ +\xc4\xba\xac\x46\xde\x8e\xc9\x28\xde\x6f\x8b\xb2\x38\x67\x94\x9c\ +\x71\x43\xe1\x61\xb9\xe7\x31\x14\xe9\xf6\x5f\xe1\xfa\xb2\xaf\x70\ +\x66\xf6\xd7\xd8\x34\xa0\x69\x56\xf7\xee\xdd\x55\x81\xe2\x79\x12\ +\x31\xd8\xf5\x6b\x9e\x71\x64\x72\x6f\x9c\x9f\xf7\x0d\x92\xe4\xf0\ +\x93\xb5\xfe\x1b\x14\x78\x0e\x45\x71\xd4\x6a\x68\xce\xba\xa1\xfc\ +\xb8\x33\x4a\x83\x6c\x91\xbb\x7d\x0a\xee\xac\x18\x0e\xd7\x85\x53\ +\x4c\x59\x74\x91\x7a\xc3\x7a\xdd\xec\xbb\xb9\x19\xf1\x80\x13\x7e\ +\x38\x86\xe9\x69\x66\x68\x99\xa4\x64\xee\x8e\xa9\x2a\x66\x6b\x54\ +\x12\xc3\x57\xde\xd7\xd7\x84\x3c\xc0\xd4\x9d\xb7\x31\x7a\xd4\x8c\ +\x48\x99\x81\x3a\xcf\xdb\x00\xc4\x30\x76\xd8\xd4\x18\x2b\xe7\x5b\ +\x58\x12\x70\x1f\x2e\x47\xf3\x11\x71\xa5\x12\x67\xee\x00\xd7\xee\ +\x03\x69\x8f\x80\xdc\x12\x40\x92\xcd\x28\xd5\x54\x22\x3d\xa7\x04\ +\x01\x1b\xec\x1c\x58\x71\x92\x78\xe2\xa1\x98\x48\x76\x37\xea\xe0\ +\xc1\xd0\x8a\xc4\x94\x2c\x14\x95\x56\x00\xd0\x65\x6b\xd3\x73\x81\ +\xc4\x0c\x95\xb2\x62\xe6\x86\xc9\x0b\xf5\x0e\x3f\x7e\xdb\x2d\xf4\ +\x1a\x64\x33\x53\x84\x73\xfc\x73\x25\x62\xf8\xca\xc4\x7a\xee\xf0\ +\x4d\x89\x98\xef\x97\x86\x2d\x87\x73\x71\xe0\x62\x39\x4e\x26\x03\ +\x97\xd3\x81\x94\x1c\x20\xa7\x08\x28\xaf\x04\x34\x15\x55\xc8\xca\ +\x2b\xc3\x01\x27\x87\x7d\xb2\xc3\x15\x8a\xde\xbe\x8a\xc9\xe1\xc3\ +\x87\x35\x41\x7b\xf6\x14\xdf\xcb\x2e\x41\x89\x58\x49\x1c\x00\x79\ +\x25\xb4\x9e\xce\x8a\x67\x6e\x03\xe1\x62\xd5\x1d\x47\xf2\xb0\x78\ +\x77\x3a\x46\x3b\x5e\xc7\x07\x9f\x7e\xdb\x89\x63\x5f\x04\x22\x96\ +\xc1\x0e\x09\x98\xe5\x95\x8a\x0d\x87\xb2\x99\x79\x62\xfa\x8d\x39\ +\x48\x26\x62\x25\x1b\x4d\xe5\x69\x84\x2a\x55\x9c\x89\x74\x75\x3a\ +\x23\x75\x46\xad\x18\x60\x6f\x0d\x9f\x98\x3b\xd3\xf2\x0a\x4b\xb5\ +\x73\x37\x86\x97\xdd\xcf\x29\x45\xa9\x98\x8a\xee\x92\x5b\x0c\xa4\ +\xe6\x00\x57\xd2\x81\x53\x62\x80\xd0\x4b\xe5\x70\x8e\xca\xc5\x82\ +\x5d\x69\x18\x63\x77\x5c\x23\x96\x7f\xfb\x45\x31\x00\xb1\x8c\x5e\ +\x1e\x5d\x35\xdd\xfd\x0e\xec\x43\x1f\x62\xcf\xd9\x52\xc4\xdd\x62\ +\x82\x55\x97\x65\xce\x2a\x50\xf5\x06\x16\x5d\x54\xe5\xc9\x6b\xef\ +\xb1\xbc\xf4\x07\xb9\xd8\x15\x1c\x73\xb2\x86\x94\xa8\x67\xb2\x42\ +\x3b\x7f\x63\x74\x69\xe6\xa3\x52\xba\x89\x3c\x08\x3c\x2a\xa6\xfb\ +\x28\x37\x52\xee\x14\x22\x6e\xe5\x18\xf9\x08\xf3\x7c\xef\x62\xc4\ +\xb2\x90\x1c\x11\xaa\xf7\x02\x19\x40\x6f\xd2\x42\xdf\x32\x1b\xb7\ +\x3b\xb0\x3b\x90\x85\x5d\xa7\x4b\x98\x7c\x65\x06\x5a\xa5\xe1\x1f\ +\xfc\x8b\x01\x1e\x15\x6a\xe0\x19\x1c\xaf\xa1\x21\xfc\x0e\xc4\x9d\ +\xf8\xd5\x00\x0b\x36\x46\x56\x3d\x31\x00\xd7\xcd\x6f\x0d\x10\x7c\ +\x41\xa3\x0c\x30\xd7\xe7\x2e\x46\xae\x88\xc8\x17\xa1\xf5\x5e\x20\ +\x03\xd4\xb3\x5a\x1c\x58\xce\xe0\xcc\xbc\x22\x0d\x10\xfb\x6f\x06\ +\x28\xf9\x57\x03\x04\x9d\x2d\xa7\x01\x7c\x82\x8f\x45\xd1\x00\xb5\ +\xf7\x05\x06\x6e\x3e\xb8\xd3\x55\xfb\x67\x3d\xc0\xd2\xfe\x5c\xa5\ +\x08\x7d\xe3\x05\x32\xc0\x1b\x83\x57\x9e\xd6\xd2\x00\x7f\xc6\x03\ +\xc2\xbd\xdd\xb3\x25\x06\x94\x78\x78\xf9\xac\xa9\x7e\xcb\x0a\x0e\ +\x72\x74\xa8\x62\x0c\x28\xfb\x4f\x31\x20\xf9\x49\x0c\x60\xa4\x65\ +\xc4\xfd\x6c\xac\x7d\xdb\x17\xc5\x00\x5d\x87\xd9\xb7\x35\xb1\xbb\ +\x8c\xea\x18\xb0\xfb\x4c\xc9\x7f\x8d\x01\x41\xae\x5b\x1e\xf0\x20\ +\xb4\x7d\xfb\xf6\x41\x8a\x81\xbc\x5c\xdc\xf5\x72\x58\x55\xf6\xef\ +\xbb\xc0\xdd\x7f\xd9\x05\x0e\x5d\xae\xc4\xf6\x98\x3c\x2c\x92\x5d\ +\x60\x94\xd3\x0d\x18\x4e\x71\x35\x7f\x51\x0c\x60\x69\xf5\xd3\x78\ +\xf3\x75\x57\x7f\xdd\x05\xf6\xc5\xff\x7e\x17\x28\x7b\xb2\x0b\x48\ +\x3d\xc3\xaf\x58\x5e\x88\xd2\xbd\xbc\xbc\x6a\xd5\x90\x7e\x9e\x97\ +\xa5\xcc\xad\xd9\xbc\x62\xd9\x9d\x3b\xf1\xa7\x91\x97\x78\x1e\x95\ +\xf7\xae\xa1\xf0\x5e\x12\x1e\xa6\xa5\x21\x25\x39\x15\x57\x2f\xdf\ +\xc0\xd9\xb8\x93\x08\x0a\x3a\x82\xad\x6e\x87\xb0\xd4\x3e\x10\x8b\ +\x26\x4c\x77\x79\x51\x0c\xf0\xc3\x28\x6b\x9f\x39\x2b\xf6\x62\xdd\ +\x96\x50\xec\xf2\x8f\x46\x6c\xd4\x09\x24\x9c\x3e\x8d\xa4\xc4\x1b\ +\xc8\x48\x4d\x45\x7e\x46\x1a\x34\x99\x49\x28\x4d\xbd\x82\xb8\xb0\ +\x03\x38\x79\xf2\x24\x0f\x41\xfe\x1c\xcb\x46\x87\xc9\x62\x8d\xaa\ +\x79\x53\xac\x9d\x98\x34\x48\x9d\xd8\x5e\xa5\x95\x8b\x77\x58\xa2\ +\x32\x6c\x01\xb3\x2b\x7c\xbf\x56\x69\xe8\xd2\x79\xba\x24\xc8\x3d\ +\xab\xda\x38\x66\xaa\x77\xfd\x45\x31\x40\x48\xbf\xb7\xcf\xde\x1c\ +\x5a\x8f\xb8\x88\x8f\x38\x89\x97\xb8\x89\x5f\xe9\x51\xec\x32\x42\ +\x8e\xf9\xab\x10\x19\x7e\x08\xfe\xde\xee\xf7\xc5\xfd\xd5\x3b\x0c\ +\x5f\x2f\x83\xa5\xc7\x47\x6b\x6e\x6e\xde\xf3\xaa\x55\x7b\x0d\xbb\ +\x32\x72\x16\x7e\xc2\xfc\x3a\x2b\xb2\x4c\x32\xb2\x48\xc9\x3a\x1d\ +\x4b\x55\x4c\x3c\xa8\x57\xcf\x24\xcb\xba\x38\x6d\xd4\xa0\xc3\xf3\ +\x56\x3e\xb6\x6f\xa3\xd6\x17\x07\xd5\xaf\x4c\x16\x3c\xc4\x45\x7c\ +\xc4\x49\xbc\xc4\x4d\xfc\xc9\xbb\x97\x22\x6c\xaf\x0f\x22\xc2\x0e\ +\x62\x97\xb3\x03\x46\x0d\x1e\xd4\xa3\x7a\x3c\x1b\x9d\xa2\xe4\x44\ +\x74\x5f\x22\x69\xe3\xfd\xa6\xed\x92\xef\x8c\x6b\xc7\xfa\x3b\x8b\ +\x8e\xac\xcd\xf3\x75\x92\x15\x5a\x95\x64\xa8\x94\x3a\x1d\xf3\x6f\ +\x4c\x46\xa6\x8e\x7e\x03\xa7\x4c\xf5\xdc\x9f\xaf\x01\x58\xbb\xd0\ +\x0f\x4a\x1c\xfc\x26\xf1\x10\x17\xf1\x11\xa7\xe0\x95\x17\xb7\xc0\ +\x95\x88\x3c\xb0\x17\xf2\x96\x87\xb0\x03\xc1\xf0\x5f\x38\x92\x29\ +\xfb\x02\xea\x5a\x3d\x9e\x3b\x40\x9c\x2c\x81\x12\xb9\xf9\x9a\xf5\ +\x67\xef\x39\xdf\x95\x25\xc0\x96\x14\x96\x9e\x99\x4e\x62\x5a\x89\ +\xe5\x69\x55\x98\x5c\x51\x5b\xb9\xd7\x23\x9b\x57\x91\x2e\x09\x91\ +\x6b\x43\xeb\x95\xc6\x1b\x37\xa9\xfd\x77\x29\x2b\xff\x5e\x92\xbe\ +\xc1\x0f\x25\x78\xb5\xe0\xff\x5f\xea\xaf\xff\xf1\x65\x93\x06\xda\ +\xa4\x61\x75\x15\x9e\x1c\x9b\xd7\x70\x6d\x79\x0f\x84\xb9\xd8\x22\ +\x60\xb7\x1f\x82\x83\xf6\x23\x78\xff\x5e\x04\xad\x9b\x8f\x13\x53\ +\x3f\x46\xca\xe4\x0e\xf0\x30\xef\x14\x46\x5d\xab\x79\xf2\x4d\x70\ +\x8f\x78\x40\xc6\xf1\xe3\xc7\x5f\x92\xe4\x86\xe1\x0d\xab\x76\x15\ +\xa9\x13\xda\xa9\x06\x84\x22\x67\x0b\x54\x04\xeb\x8a\x90\x08\x9e\ +\x08\x6c\xf9\xe0\xd7\x9c\xc0\x03\xeb\xd7\x91\x32\x4a\x79\x81\xff\ +\xb3\x56\x7c\xcb\x96\x2d\x75\xa4\x2d\x2e\x4a\xfe\x56\xd8\xd9\xd9\ +\x55\x3a\x3b\x3b\x63\xdb\xb6\x6d\x05\x5e\x2e\xdb\x2a\xfc\xd6\x2f\ +\x87\x9f\x93\x1d\x5c\x36\xdb\xc3\xc1\xde\x1e\xab\x56\xad\xc2\x36\ +\xe7\x2d\xd8\xe5\xe6\x8c\x18\xa7\xd9\x48\x5a\x67\x82\x07\xf6\x46\ +\x4a\x9f\xdb\x93\x3b\x56\x0e\xfa\xbc\xeb\x6f\x76\x2f\x06\xc1\xb5\ +\x92\x1f\x63\x7a\xe8\x13\xf9\xd7\x3c\xdc\xac\xcd\xfd\x54\x09\x86\ +\x6c\x4e\xe2\x32\x60\xa9\x89\xcb\x40\x65\x57\x7c\x06\xb0\x12\x23\ +\xa5\xeb\x27\x5e\x90\x3c\xbc\x2e\x2e\x19\x37\x18\xfd\xac\x94\xb7\ +\xb5\xb5\x7d\x55\x26\x29\x63\xe5\xca\x95\x55\xa2\xf4\x5d\x31\xc4\ +\x0e\xc1\xec\xef\xeb\xb2\xf5\x56\x80\xb7\x07\xf6\x78\xbb\x21\x28\ +\x70\x2f\x02\x77\x79\x22\x54\x82\xdc\x29\x87\x21\xc8\xd8\xd4\x1b\ +\x79\x5e\xa3\x50\x16\x3a\x97\xf8\xa9\x87\x5a\xd6\x97\xc7\x77\x28\ +\xa4\x8e\xff\x6e\x80\xfe\x92\x23\xcb\x67\x76\x44\x5c\xa3\xf6\xf4\ +\x2f\x3a\x78\xdf\xb5\x7e\x17\xf7\xbe\x7b\x8f\x95\x56\xdd\x6e\x10\ +\x3a\xef\x49\x30\x74\xea\x84\x0a\x29\x55\x17\xce\x64\x2c\x78\x0d\ +\x77\x25\x33\x9c\x68\x51\xaf\xec\xaa\x71\xc3\xf7\x9f\x85\x01\x44\ +\x61\xb7\x35\x6b\xd6\x60\x9b\xfc\xab\xbe\x77\xc1\xa8\x51\x97\x0b\ +\xc6\xfa\xf9\x49\x96\xf5\x91\x36\xbe\x9e\x2a\xbf\xe7\xcf\xa9\x85\ +\xb2\x45\xaf\x40\xeb\xd8\xa9\x3a\xf8\x11\x37\xf1\x53\x0f\xa9\x54\ +\xbf\x07\xf7\x41\x1d\x63\xa8\xe3\xef\xea\x02\x92\x1d\xd1\xc8\x4e\ +\x70\x9d\xef\xd6\xb2\x0c\x4c\x8e\x0d\x69\x9d\x9f\x32\xa1\xbd\x4a\ +\x21\x15\xac\x1b\xc8\xfa\xbb\xce\x0b\x22\xe6\xb2\xfa\xc2\x2d\x86\ +\x25\x29\x46\x5c\x95\x86\x4a\x95\xa5\x90\x60\x5e\xff\x2e\x7b\xf8\ +\x9e\x81\xfb\x67\x6d\xde\xbc\x39\x8b\xd7\xa4\x8b\x06\x0d\x3e\xbf\ +\x38\xb0\x41\xd1\x8d\x21\xf5\x28\xb7\x3a\x25\x4e\x3c\xc4\x45\x7c\ +\xc4\x49\xbc\xc4\xad\xf0\x3f\x90\xd9\xbf\x31\xfe\xdd\xf2\x1e\x5d\ +\xbb\x0e\xa2\x8e\xbf\x33\x80\xa4\x9a\x4f\x48\x96\xf5\x21\x83\xcb\ +\x07\x1f\x7c\xd0\xc4\xb2\x67\x47\x4f\x9e\x09\x68\x35\xe5\x05\xdb\ +\x87\xb3\xde\xa6\xf3\x82\xd0\xa9\xdc\x11\x98\x78\xac\x5e\x0a\xdc\ +\x7e\x24\x1e\xd4\xc1\xd5\xc1\x6f\xde\xbf\x62\xac\xd7\xfd\x69\xae\ +\x7d\x49\x7f\x43\x02\xdf\x21\x35\xf3\x06\x8d\x8c\x2e\x0d\x68\x50\ +\x46\xe5\x29\x8f\x72\x29\x9f\x38\x88\x87\xb8\x88\xaf\xba\x3e\x48\ +\xdc\xb9\xcb\xbe\x50\x55\xe2\x9f\x0d\xde\x0f\xa7\x6e\xff\x2e\xa3\ +\x3a\x25\xd6\x9b\xcd\xc8\x7b\xf6\xec\x09\x14\x0b\xd5\x94\xc2\xac\ +\x41\xa8\x49\xeb\x07\x29\xe3\x24\x16\xcc\xee\xc2\x4a\x2b\x5b\x51\ +\x74\x3d\x40\x87\x7f\x00\xf6\x5b\x31\x20\xca\x76\xc3\x7e\x00\xdd\ +\xe1\xe8\xfe\x63\x23\x24\x0e\x79\xb3\xe2\xa2\x71\xfd\xe9\x4f\xc3\ +\x00\x12\x97\x7a\x4a\xd0\xab\x90\xae\xf1\x95\xf1\x86\xfa\x23\x13\ +\x06\x36\xac\xa8\x56\x9e\xf2\x28\x97\xf2\x89\x83\x78\x88\x8b\xf8\ +\x88\x93\x78\x89\x9b\x05\x91\x4b\xa3\xdb\x95\x50\x27\xea\xf6\xff\ +\x2d\x8d\xc9\x12\x48\x0a\xdc\x1f\x98\x25\xef\x05\xcd\xf9\x7e\xdd\ +\xbf\x5b\xe7\xf5\x49\x63\xda\x68\xb9\x14\x18\x41\x0b\x37\xab\x02\ +\xe9\xe3\xa5\x30\x4f\x77\xca\xda\xd4\x9e\xf1\x80\x05\x09\x9d\x27\ +\x4c\xac\xa5\xf6\xe3\x5b\x72\x2a\x4b\x18\xd4\x30\xf0\x82\x41\xfd\ +\x56\x7f\xb1\x19\x7b\xdc\xc6\x8d\x1b\xe1\x3a\x69\x40\xe6\x35\xd3\ +\xfa\x5a\xf2\x25\x7f\xca\xa1\x3c\xca\xa5\x7c\xe2\x20\x1e\xe2\xaa\ +\x2e\x8c\x12\xef\xc3\xf9\xdd\x71\x67\xdc\x3b\x98\xdb\xe7\x7d\x1f\ +\xea\xf4\x5f\x8b\xa3\x4e\x4e\x4e\x9f\x47\x47\x47\xb1\xf9\xf9\x32\ +\xd7\x89\x14\x3a\xbf\xd8\xd6\xbf\x6d\xe2\xed\xb1\x6d\x75\x01\x71\ +\xf9\xd7\x74\x29\x9e\x0e\x59\x71\x61\x8f\x8e\xee\x6c\xb0\xbe\x15\ +\x41\x70\x26\xd8\xca\xc2\x35\xa9\x72\xf4\xb7\x2d\xe9\x0d\xf5\xb4\ +\x97\x4c\xea\x87\x5f\x34\x6a\x30\xb0\xba\x3c\xfd\x67\x89\x81\x2e\ +\x78\xc1\xd8\xd8\xf5\xeb\x1c\xb0\x63\xec\x17\xe4\x47\xbe\xe4\x4f\ +\x39\x94\x47\xb9\x94\x4f\x1c\xc4\x43\x5c\xc4\xa7\x70\xe6\x48\xd3\ +\xd4\x1d\xe9\x21\x8c\xb6\x78\x27\x8b\xba\x50\xa7\x3f\xac\x0e\x4b\ +\x0c\x08\x0e\x0a\xda\x5f\xec\xe1\xe1\xbe\x49\x06\xbc\x29\x25\xaf\ +\x59\x87\x8c\x5b\xe5\xb0\x54\x96\x61\xd3\x49\x55\x5a\x4b\x76\x8e\ +\x46\xe5\x81\x39\x40\xf4\x13\x23\x70\x06\x78\xfa\xe2\x5a\xcc\x97\ +\x80\xc4\x32\xd5\xfd\xf1\xca\x1b\xd4\x36\x49\xb7\xbd\x68\xaa\x77\ +\x6f\x9c\x8d\xe3\x69\x93\x29\x9e\xab\xdf\x9f\x73\xb2\xff\xfb\xb3\ +\x4e\xbe\xd3\xd5\x3a\xfe\x15\x12\xaf\x79\xcf\x78\xb2\xf7\xaa\x31\ +\x93\x1d\x4f\xc7\x9b\xe8\x27\xc9\x8c\x23\x76\xb6\x21\xa4\x2b\x1d\ +\xde\x13\xbf\x24\x3f\xf2\x25\x7f\xca\xa1\x3c\xca\xad\x56\x9e\x78\ +\x88\x4b\xe1\xcb\x5b\xd5\x17\x3c\xd1\x5e\x1c\xf9\x4e\xe9\x67\xdd\ +\xbb\xce\xa5\x2e\x7f\xaa\x41\x82\x27\x2d\xf1\x80\x34\x59\x0a\x5a\ +\x59\x7f\xbe\xb2\x23\xbc\xdb\xb3\xdb\xc7\x6b\xe2\x87\xb4\x28\x4b\ +\x1e\xd5\x1a\x59\xb3\x3e\xe4\xba\x62\xeb\x2a\x5b\xd4\x9e\x54\x8d\ +\x02\x2c\x01\xe7\x2e\x0c\x44\x2c\x4d\xf1\x38\xca\x59\xe2\xd1\x94\ +\xc0\xd5\x56\x79\x4b\x3a\x3b\xcc\x1c\xae\x62\xc0\x9a\x04\x7c\xbb\ +\xe2\x22\xbe\xf9\xe9\x02\xbe\x5e\x76\x4e\x4b\xe2\x75\x5f\xb9\x67\ +\xb8\x3a\x01\x83\xd6\x5e\x41\xa2\xa5\x3e\x58\xe8\x38\xb5\xa0\x2f\ +\xd6\xda\xd9\x21\x60\x5a\xdf\xea\x46\x29\xf2\xa7\x1c\xca\xa3\x5c\ +\xca\x27\x0e\xe2\x21\x2e\xc1\x67\x80\x94\x89\xed\x70\x63\x64\xeb\ +\x2a\x93\x4f\xbb\x6c\x94\x72\x7d\xbb\xff\x53\x8b\x8c\xbc\x25\xd5\ +\x96\x60\x78\xd3\xd3\xcb\xa3\xd2\xd1\x69\x73\xf9\xac\xd9\xb3\xce\ +\x9b\x7d\xd3\xeb\xd0\xb5\x61\x2d\xaa\xd8\xa4\xfc\x60\xa6\x1c\x90\ +\xec\x8d\x28\x8c\x91\xf6\x71\x7f\xe0\x7c\x20\x68\x3c\xe0\xde\x9b\ +\x8d\x0a\x0c\x4a\x72\x64\x7e\x62\x08\xce\x5c\xfa\x77\x6f\xe2\x7b\ +\xcf\x14\x4c\x71\xbd\x8d\x09\xdb\x92\xc0\x3c\xfe\x98\x2d\x37\x15\ +\x8d\x75\xbe\xa9\x52\xed\xdf\xb9\x24\xab\xa4\x46\xda\xc4\xfa\xca\ +\xd5\x2f\x2d\xfa\x0c\x3f\xfd\xf4\x13\x42\xe6\x1b\x49\xf9\xbb\x26\ +\xf9\x92\x3f\xe5\x50\x1e\xe5\x52\x3e\x71\xe8\x94\xff\xd9\x00\xa9\ +\x12\xb3\x6e\x8d\x68\x85\xe9\x5f\x75\xdc\x2f\x51\xbf\xdb\x1f\x55\ +\xac\xff\x5b\x29\x7a\xba\xaf\xaf\x4f\xe6\x5a\x7b\xbb\x8a\x61\x96\ +\x43\x31\x63\xd0\xd7\x9a\xeb\xc3\x5a\xe0\x86\x34\x28\xa7\x73\x39\ +\xd8\x19\xb0\x53\x53\xd6\xdc\xf7\x0c\x3c\x2c\x44\xb2\x22\xcb\xae\ +\x4e\x36\x35\xb2\xd3\x93\xbd\x7d\xdc\x9f\x75\xf1\x61\x76\x1d\xac\ +\x0b\xcb\x56\x85\x95\xe5\x81\x99\x58\x2a\x45\x8c\x1f\xf7\xa4\x93\ +\x58\xd0\x60\xbd\x81\xfd\x83\x2a\xa3\x93\xf3\x7d\x5d\x5d\xe7\xc9\ +\xb2\x2e\x90\x5d\x00\x11\xcb\xcc\x50\xb9\xbc\x2e\xf9\x92\x3f\xe5\ +\x50\x1e\xe5\x52\xbe\xc2\x91\xb3\xbc\x37\x92\x46\xb7\x11\x7c\x2d\ +\x61\xff\x6d\xfb\xb3\xb2\xee\xfb\xfe\x99\xb2\xdd\x9f\x39\x89\xbd\ +\x2b\x5e\xb1\xcb\xfa\x3b\xeb\xdc\xe9\x66\xdf\x6a\x13\x2c\x5a\x80\ +\xfd\x03\xb4\x74\xee\xaa\x3e\x28\xde\x3a\x8c\xed\x69\xaa\x23\x03\ +\xd1\xca\x1b\x74\x0d\x4b\xbb\xcc\x80\x1d\x3d\x58\xaf\xd7\x2d\x8d\ +\x1f\x6b\x21\xe0\x97\x52\x56\x97\x54\x97\xe8\xce\xd8\x02\x56\x71\ +\x14\xb9\xc6\xaa\x6e\x51\x76\x90\xaa\x74\x56\xe9\x0f\xb5\xd5\x3b\ +\xc7\xfd\x55\xed\xe1\xe4\xb8\x19\x51\x6b\xad\x50\xe5\x33\x88\x7c\ +\xc9\x9f\x72\x28\x8f\x72\x95\xfc\x07\x0b\x7b\xe2\xc6\xf0\xe6\xb8\ +\x3e\xac\xb9\x76\x69\x9f\x77\x4f\x8a\xdb\x0f\xe5\x89\xef\xa9\xb6\ +\xca\x0a\xc3\xfa\xfd\xfa\xf5\x9b\x3e\x6c\x40\xff\x6b\x27\xa5\x4f\ +\xe7\xba\x45\x53\x24\x8d\x6a\x85\xec\xc5\x9f\xa9\xfa\x7b\xa9\x87\ +\x15\x23\xf0\x93\x46\x69\x6e\x49\x3c\x94\x70\x9d\x7a\x19\xa0\x6a\ +\x47\x2f\xe6\xe9\x98\xad\x55\x7d\xc1\x51\xd7\xaa\x10\x79\x55\x47\ +\x87\xe5\x9a\x7d\xc3\x2c\xbf\x31\x99\x59\xb5\xe9\x5d\x35\xdb\x59\ +\x9e\x23\x20\x81\x19\x47\x9c\xe7\xa0\xfc\xc0\xf7\xd5\x0d\xd3\x94\ +\xa3\xe4\x15\x6c\x30\xc1\x5d\x9b\xce\x10\x2c\xec\x09\xac\x18\xdd\ +\xab\x23\xcf\x31\xc3\x88\xf5\x99\x74\x8b\xb3\x0e\x27\x3b\x43\xbf\ +\xee\x5d\x3f\xda\x14\x32\xa0\x45\x36\x3f\x65\xb9\x2e\x94\x32\x5e\ +\xce\x0a\x2b\x7a\x57\xb7\xca\xab\x37\x48\x2d\xbd\x41\x88\x19\x19\ +\x06\x2a\xed\xc1\xef\x55\x92\xf2\x7c\xaa\xae\xd4\x76\xf6\xce\x6f\ +\xa9\xba\x63\x9c\x99\x5c\x6d\xb0\xb5\x32\xde\xa3\xd0\x1f\xb1\xdb\ +\xdf\x0f\xb1\x6e\x4b\xa0\x91\x3a\x3f\xf9\x92\x7f\xd1\x16\x0b\x64\ +\xcc\xe9\x0e\x76\xb1\x11\xc3\x49\xb3\x16\xc5\xbd\x3f\xf9\xd0\x99\ +\xd8\x88\xf1\x99\xb6\xcb\x8b\x80\x57\xc5\xc5\x7a\x08\xd9\x3a\x7c\ +\xdd\xfa\xea\x25\xf3\xa6\x55\x6c\xa6\xbc\x2a\x40\x52\xad\x3b\xca\ +\x56\xd9\x5f\x19\xa2\xd4\x6b\x3c\xca\xf7\x4d\xd7\xa5\xd5\x8e\xd8\ +\x42\x7b\x64\x39\x92\xb3\x80\x5b\xd5\xdf\x0a\x64\x00\xd7\x9f\x50\ +\xf5\x37\x03\x4c\x63\xcb\x2c\xff\xa4\x82\x5b\x4e\xc4\x6a\x7e\x32\ +\x87\x38\x37\x5b\x14\xee\x1c\xa5\xf8\x66\xfe\xf0\x19\x12\xa5\x81\ +\x8b\x32\xaf\x98\x37\xd1\xfa\x18\xb6\x4e\xed\x2a\x58\x88\x89\xd8\ +\xfe\x96\x0f\x26\x78\xa4\x94\x08\xfb\x9e\x58\x7c\x5a\xcf\xae\x5d\ +\xdc\xbd\xfb\xb7\xbc\x77\xd9\xf4\x9f\xda\xcb\x83\xde\xc2\x55\x01\ +\x76\x5b\x3c\x22\x73\xc1\xa7\xe2\xa2\xa6\xec\xce\x50\xc7\xd2\xb2\ +\x7d\x33\x91\xf5\xaf\x5f\x8b\xe4\x02\xf7\x14\xc9\x35\x29\x8f\xbf\ +\xe9\x72\xf8\xe5\x21\xf3\xd4\x69\x2e\xcd\x73\x26\x22\x24\x89\x79\ +\x62\xe3\x34\xa4\x4d\xff\x40\x29\x4e\x19\x97\xa5\x43\x2c\x74\x60\ +\x8b\xec\xfe\x9f\x7c\xe8\x4b\x0c\xc4\x42\x4c\x7f\xeb\x27\x33\x8f\ +\x4f\x8b\x8d\xc4\xf2\x7d\xe4\xbc\xb0\xa0\x4f\xf7\xce\xbb\x43\x0c\ +\x9b\x65\x13\x60\x82\x49\x63\x92\x02\x7a\x4b\x1a\x9e\xd3\x67\x77\ +\x43\xae\xbd\xb1\xca\xcd\x17\x69\x9e\x7c\x2b\x94\xaf\x88\xd7\x8a\ +\x54\x49\xbe\x44\x23\xd7\x8e\x16\x78\xb0\xe4\x4b\x1c\x5f\x31\x01\ +\x52\xb8\x45\xec\xf7\xfd\x65\xb6\x75\x7c\x8f\x18\x37\x2d\x1c\xde\ +\xf3\xfd\x60\xca\xa4\x6c\x62\x20\x96\xe7\xf0\xe1\xe4\x6f\xbc\xa1\ +\xa9\xcc\xc4\x40\x01\x63\x3b\xb0\x7b\xa7\x60\x97\xbe\xad\xd3\x4e\ +\x98\xb6\xc0\x25\x93\xb7\xf8\x4d\x91\xa2\x04\xf3\x66\x2c\x4c\xfc\ +\xe6\x8b\xb1\xea\x7f\xbc\x26\x55\x7f\x39\xc6\x67\x39\xe6\xe0\xe6\ +\x95\x60\xd3\xc6\x59\x8b\x96\x9a\x3d\x86\x2d\xee\x8f\xfc\xb4\x63\ +\x38\x65\x50\x16\x65\x52\xf6\x5f\xc5\xff\x54\x1b\x19\x85\x5a\x0b\ +\x99\x09\xc0\xd9\xd2\xbf\xe3\x3a\xc2\xc2\x3c\xcf\x71\xf0\xa7\x88\ +\x36\x6e\x59\x79\xde\xac\x79\x55\x4e\x6e\x11\xf2\x8a\x1e\x7f\x2f\ +\x58\x5a\x81\xa2\x27\xc4\xef\x07\x75\xdf\x0e\x16\x94\xe1\x82\x79\ +\xf3\xaa\x83\xd6\xdf\x6a\xa2\xa2\x0e\xc3\xd3\xdd\x2d\x4f\x66\xda\ +\x81\x3c\xc9\x9b\x32\x28\xeb\xf9\x7e\x3a\xfb\xc7\x86\xd0\x97\x99\ +\xfa\x40\x8c\x60\x6e\x6d\x6d\x7d\x6e\xd2\xa4\x49\x45\x42\x55\x43\ +\x87\x0e\xcd\x1e\x6d\x39\x3c\x75\xe9\xc4\x11\x29\x9b\x57\xda\xe7\ +\x3a\xba\x86\x6a\x1c\xdd\xc2\x35\x5b\xd6\x6f\xcb\xb5\x9b\x63\x73\ +\x73\xde\x8c\x69\xf1\xf3\xe6\xcf\x3f\x2f\x87\xb0\x6c\xf9\x3a\xb4\ +\x54\x52\x75\x9a\x3e\x7d\xfa\x0c\x27\x2f\xf2\x7c\x16\x1d\xa8\xcf\ +\xba\x68\x59\x53\xa8\x81\x8d\x8d\x8d\xa9\xb4\xb4\x1d\x95\x63\x6d\ +\x16\x5f\x6e\x98\xb8\x0c\x8b\x88\x42\xae\x78\x03\x29\xf1\x66\x32\ +\x1b\x18\x8b\x1f\x7f\x30\x5d\x2a\x5f\x85\x56\x49\x9a\x2e\x41\x0c\ +\xd6\x82\x3c\x9e\x25\x46\xfe\xe7\x6f\xa5\xe5\xcb\x97\xff\x53\xd2\ +\x7b\xc3\xb6\x7b\x07\xad\xde\xb1\xe7\x88\xf7\xce\x7d\xb1\xfe\x2e\ +\xbe\xc1\xeb\xe5\xde\x2c\x49\x7c\x4c\xe2\xa7\xf2\xac\xd9\xfd\x5d\ +\x78\xfe\x1f\x54\xc7\x67\x32\x0b\x29\x7c\xe5\x00\x00\x00\x00\x49\ +\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x13\x17\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\ +\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x06\xec\x00\x00\x06\xec\ +\x01\x1e\x75\x38\x35\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\ +\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x12\x94\x49\x44\ +\x41\x54\x78\xda\xed\x9b\x09\x90\x5c\x47\x79\xc7\xff\xdd\xef\x9a\ +\x73\x67\xf6\xd2\xae\x56\xbb\xba\xbd\xb2\x84\x0e\x0b\x1b\x51\xb2\ +\x1d\x0a\x6c\x8e\x40\x9c\x40\x48\x0a\xca\x54\x80\x70\xe4\xa8\x8a\ +\x53\x60\x08\x15\x8a\x22\x45\x48\x02\x14\x47\x01\x45\x05\x63\x28\ +\x53\xa9\xd8\xd8\xb1\x62\x82\x6d\x8e\x02\x0c\x54\x30\x92\x15\x09\ +\xc9\x96\xac\xd3\xd2\xae\x76\x25\x4b\x7b\x68\xaf\x99\xdd\xd9\x9d\ +\x79\xf3\x8e\xee\x7c\xaf\x5f\xc7\x33\x7b\x69\x25\xb0\x1c\x57\xa1\ +\x4f\xfa\xeb\xeb\xd7\x3b\xf5\x66\x7e\xff\xef\xeb\x7e\x6f\x34\xb3\ +\x4c\x4a\x89\xdf\xe5\xe0\xa4\x6b\x06\x5c\x33\xe0\x9a\x01\xd7\x0c\ +\xb8\x66\xc0\x35\x03\x5e\xfa\x60\x51\xe0\xff\x39\xae\xca\x7d\x00\ +\xbb\xee\x73\xad\x46\xd2\x79\x95\x44\x78\x13\x24\xef\x92\x12\x79\ +\xce\xd1\x68\x9a\x46\x63\xd2\x36\x9a\x52\x09\x33\xcf\x18\xcf\x80\ +\x49\x37\x0c\x51\x0c\x05\x0a\xbe\x2f\x0a\x55\x5f\x4c\x54\xaa\xfe\ +\xf8\xb6\x75\xa9\x83\x87\x1f\xff\xab\x7b\xf1\x12\x84\xf9\xdb\x97\ +\x11\x0c\xaf\xf8\xda\x2d\x8d\x59\xeb\x35\x89\x84\xb5\xa3\x54\x0e\ +\xb6\xb7\x2c\x6f\x59\x99\x72\x2c\xa4\x93\x26\x32\x29\x0b\xd9\xb4\ +\x85\x5c\xc6\x42\xc2\x31\x60\x5b\x06\x4c\x83\xc3\x88\xc4\x59\x86\ +\x31\x64\x00\x74\x0a\x01\xb8\x5e\x88\x3d\x87\xc6\x83\xa1\xbe\x5f\ +\x5a\x00\x5e\xde\x06\xb0\x1b\xee\x5d\xd1\xdd\x95\xff\x9b\xed\xef\ +\xb0\xdf\xdd\x37\x90\xeb\x5c\xd7\xd5\x00\xce\x01\xc7\xe6\x24\x03\ +\x09\x3b\x86\xa5\x63\x3d\xa6\xf9\x48\xb6\xa9\xc6\x96\xc9\x94\x11\ +\x8c\x01\xa1\x00\xaa\x04\xbf\xef\xe8\x04\x5a\xf3\xe1\x91\xde\xfd\ +\x67\x72\xa0\x78\xd9\x19\xc0\x5e\xf7\x4b\x33\x17\x0e\xbf\x6d\xd3\ +\x9a\xdc\x5d\xc9\x64\xc3\xad\x4d\x8d\x0d\x46\xa1\x54\xc5\xaa\x8e\ +\x26\x30\x82\xb1\x6d\x05\x1c\x03\x92\x6c\xc7\xd0\x63\x03\x96\x1d\ +\xcf\x99\x26\x87\x11\xc9\x60\xaa\x7d\x04\x24\x02\x21\x31\xed\x4a\ +\x4c\x56\x8c\xca\xc9\xbd\x8f\x77\x02\x38\xff\xb2\x33\xc0\xda\xf9\ +\xdd\xd7\x6e\x5f\x9b\xbf\x2f\x9f\x6d\x5f\x37\x34\x56\x41\x7b\x6b\ +\x0e\xe3\xd3\x8c\x40\x12\x90\xdc\x80\x50\x30\x1c\x81\x34\xc0\x25\ +\x03\x17\x1c\x2c\xe0\x90\xe0\x08\x49\xbe\x60\x70\x7d\xc0\xe0\x91\ +\x24\xb1\x4b\x48\x09\x25\x3f\x94\x38\xda\x57\x46\x02\x13\xc7\x67\ +\x4a\x85\x9b\x40\xf1\xb2\x31\x80\xdd\xf2\xe8\xb2\x5c\x22\xf9\xd5\ +\x1b\x36\xb4\xdd\x79\x71\xc2\xc5\xc8\xa4\x4f\x00\x16\x38\x67\x08\ +\x25\x00\x82\x05\xc1\x8a\x00\x04\xca\xe0\x4b\x0e\x2f\x8c\x2a\xcd\ +\x60\xfa\x24\x83\xc5\xd0\x06\xc0\x19\x03\xe7\x50\xf0\x00\x53\xf0\ +\x42\x4a\x94\x5d\x81\x54\x32\x39\xf5\xd4\x4f\x1f\xee\x06\x38\xc0\ +\xf8\xcb\xc3\x00\x76\xf3\xcf\xb7\xb4\xe6\x1a\x7f\xd1\x90\xb6\x5a\ +\xcf\x0c\xfa\x04\x61\x13\x0c\x83\x90\x04\x24\x19\x01\xc5\xe3\x80\ +\x80\x0d\xca\xbe\xe0\xe0\x3e\x08\x32\x12\x81\x2b\x78\x46\xc0\x0c\ +\x94\x94\x50\x77\xe5\x13\x92\x91\x00\xd7\xe3\xc8\x89\x9e\xd3\x9e\ +\x57\xbd\x09\x64\x2e\x98\x81\x28\x3e\x73\xf3\xcd\x2b\x66\x86\x87\ +\x1f\x19\xef\xef\x3f\x2c\x81\x43\x9c\x64\x03\x47\xbf\x26\x65\xf5\ +\x6a\x1b\x40\xf0\xbb\x77\x80\x27\x7e\x5c\xaa\xf2\xa6\x42\x59\x2a\ +\x78\x53\x30\xbd\x7b\x03\x66\x54\x51\xc9\x09\x54\x57\x56\x12\xa8\ +\x40\x04\x4b\x42\x2c\x30\x5d\xcc\xd8\x84\xfa\x90\x32\x9e\xf7\x42\ +\x89\xed\xeb\xec\xb1\x1f\xdd\xbf\x6b\x73\x0d\x9e\x44\x91\xe4\xfc\ +\xb3\x76\x5b\xdb\xce\xd6\x15\x2b\x76\x7a\xd3\xd3\x70\x4b\x25\xb8\ +\x53\x53\xc1\x47\xd3\xe9\x43\x7e\xb9\xfc\x98\x00\x1e\xff\x57\x29\ +\x8f\xbf\xe8\xf7\x01\xec\xf7\x7e\xdd\x0d\x66\x1c\x04\x43\xb6\x6e\ +\x76\x56\xd6\x70\xaa\xc2\xbc\x2e\x73\x65\x80\x56\xfc\x40\x95\x05\ +\xe2\x6a\x0b\x11\x29\x5a\x3e\x92\xb2\x44\xf7\x0a\x0b\xd6\xe4\xbe\ +\x83\x87\xf7\x7e\xef\x26\x05\xcf\x38\x28\x3f\xfe\x8d\x2d\x85\x4f\ +\xd2\x39\x0e\xe5\x57\xad\x32\x79\xf4\xd8\x30\x44\xe8\x79\x4a\x81\ +\xeb\x62\x66\x6c\x0c\xa5\xc1\xc1\x28\x9f\x71\xa7\xa7\xff\x0b\xc0\ +\x3d\x5f\x92\xf2\xdc\x8b\x63\xc0\xeb\x8e\xff\x84\xd2\x9b\x66\x41\ +\xb3\x7a\x23\x2e\x31\x66\x97\xff\x73\xc7\x62\xf8\xe3\x9d\x7c\xf0\ +\xe1\x7b\x3e\xd2\x4e\xe0\xfc\x05\x03\x38\x7f\xfc\xdf\xb6\x15\x13\ +\xcb\xb7\x6d\x7b\x53\xaa\xa5\x05\x22\x82\xae\x54\x40\x55\x87\x4f\ +\x39\xa0\xac\x8f\x95\xca\x64\xc6\xe4\xb9\x73\x81\x5b\x2c\x3e\xc4\ +\x84\xf8\xfc\xa7\xa4\x3c\xf1\x1b\x2f\x01\x76\x5b\xff\x1f\xc1\x48\ +\x12\xfc\xd5\x8f\x1d\x1b\x4c\x3c\xf3\x3f\x3f\xba\x08\x6e\x76\x28\ +\x78\x70\x44\x79\x67\x93\x68\xc9\xe7\x72\x37\x37\xe4\xf3\x90\x42\ +\xc0\x64\xd1\xd2\x33\x60\x58\x16\xcc\xa8\x13\x48\xc1\xff\x49\x08\ +\x38\x4d\x4d\x68\x48\x26\x4d\x32\xe0\x3d\x33\x83\x83\xef\xfe\x22\ +\x63\x0f\x13\xd8\x5d\x77\x4b\x39\x71\xe5\xef\x05\x0c\xf1\xa7\x58\ +\x34\xd8\x8b\xa6\xe6\x2c\xc7\xca\xe6\xa0\xff\xf4\xb3\x4f\x6e\x07\ +\xb3\x00\x66\x02\xdc\x52\x7a\xdf\x3a\xb9\xb9\xa1\xa9\x89\x85\x13\ +\x13\xf0\x49\xa2\x50\x00\x68\xfd\x73\xaa\xb6\xe9\xba\x30\x7d\x1f\ +\x16\xc1\xdb\x11\xbc\x94\x48\x02\x48\x32\x86\x6c\x22\x81\xd6\xe5\ +\xcb\xd9\xb2\xf6\xf6\x3b\x93\x86\x71\xf4\x9b\x8c\xbd\xe1\xca\x37\ +\x41\xc9\x6e\x04\xd8\x6f\x7c\x5f\x7c\x39\x61\x19\xc0\x6b\xb6\x5a\ +\x78\xf2\x89\x07\xcb\x0a\xba\xb6\xf6\xf1\x86\x65\x21\xd6\x58\x7e\ +\xce\xa0\x16\x97\xd1\x9a\x8f\xaa\x0f\xa8\x4e\x00\x41\xb3\x20\x00\ +\x27\x03\x98\xe7\x29\xf1\x6a\x15\x06\x1d\x0b\x9a\xd7\xdd\x01\xdb\ +\xb6\x91\x68\x6c\xec\x08\x8a\xc5\x9f\xde\xcf\xd8\xa7\xde\x23\xe5\ +\x3f\x5f\xbe\x01\x8c\xad\xfc\x4d\x0d\x58\x1a\x9c\x61\xeb\x5a\x13\ +\x5b\x56\xb3\x99\x91\xe1\xa1\xc3\x17\xce\x9e\xb8\x45\x19\xa0\x5b\ +\x9f\x73\x13\x7f\x7d\xbd\x07\xa3\x58\x06\xfc\xf8\x7a\x2a\xb4\xa9\ +\x4c\xc6\x3b\x28\xd3\x26\x48\x12\x27\x03\x84\xef\xc7\x46\x91\x11\ +\x26\x29\xa4\xb1\x3a\x8e\x1e\x63\x59\x8c\x8c\xf9\xa7\xef\x31\x56\ +\x7a\xbb\x94\x5f\xbd\x3c\x03\x44\x70\x0e\xdc\x7e\x05\x5e\xc4\xb0\ +\x4d\x46\xd0\x1c\x5b\xd7\x18\xd3\xbd\xfd\x43\xa7\x1f\x7c\xf8\x99\ +\x0d\x5d\xcb\xcc\x3c\xd8\xec\xea\xbf\x77\x8d\x40\xdb\xf8\x05\x84\ +\x53\x53\xe0\xa6\xa9\x3a\x4a\x72\x0e\xae\xaf\x9b\x4a\x64\x80\xd4\ +\x42\x5c\x79\x95\x8d\xc8\x0c\xea\x1a\x83\x96\x89\x88\x96\x09\x1d\ +\x2b\xc3\xa0\xe2\xcb\x4f\x30\x36\xf4\x46\x29\x77\x2d\x6d\x40\x50\ +\x2c\xc1\x5e\xb6\x64\x7b\x2f\x1d\x8c\xc0\x11\x41\x63\xcb\x2a\x3e\ +\xdd\x7b\x6e\xe8\xf4\x77\x76\x1d\xda\xe0\x07\xc1\x2b\x09\x96\xc0\ +\x1c\xa9\xaa\xaf\xe1\x13\x06\xc7\x07\xbb\x09\xec\xbf\xcf\xa8\x0d\ +\x8f\x93\xf4\x6d\x23\x0c\xe8\xd0\x5d\x00\x82\xa6\x2a\x2b\x50\x10\ +\xb0\xa4\xca\xf3\x48\x35\xe0\xb9\x99\x31\x32\xe1\xc7\x8c\x3d\xf6\ +\x66\x29\xab\x97\x36\xa0\x74\xba\x19\x2d\xed\x1e\x00\x1b\x60\x57\ +\x04\xac\x93\x06\xe7\xd8\xb2\x92\x4f\xf7\xf4\x0f\x9f\x7e\xe0\x3f\ +\x0f\x5d\x1f\x04\x82\xc0\x39\xc0\x13\x0a\x3a\x84\x49\x39\x92\xa1\ +\xf4\xf1\x2d\x0c\x89\xa7\x7e\x0e\xb7\xb7\x17\x1a\x5c\xc9\x27\x31\ +\xe8\x3d\x40\x8b\x49\xa9\xe6\x8c\x39\x5b\x33\xe6\x1f\xd7\xe7\x8e\ +\x0c\xf0\x01\x00\xf7\x2c\xb1\x04\xaa\xd7\xc1\x1b\xdd\x03\xa7\xfd\ +\xd6\xcb\x02\x06\x66\x5d\xd7\xb7\xae\x66\xd8\xbc\x8a\x97\x7a\xce\ +\x0e\xf5\x3c\xf0\xc8\xb3\x1a\xdc\xc0\xac\xcd\x0e\x1c\x42\x9a\x1c\ +\x7a\xae\x25\x61\xe0\x5d\x6b\x25\xa6\x1f\x3d\x86\x14\x50\xdf\xba\ +\x98\x21\x25\xe7\xc1\xe8\xbc\x18\xf0\xe2\xa6\xdc\xb9\xb4\x01\xdc\ +\x01\x26\x8f\xec\x40\xeb\xb2\x13\xe0\xe6\xa6\xc5\x80\xe7\x83\x43\ +\x81\x9f\xee\x1b\xea\x7d\xe0\x91\xe3\x04\x1e\x12\xb8\xa9\xab\xa9\ +\x85\xda\x58\xc8\xd0\x89\x0d\xb0\xf0\xc5\x9d\x16\xda\xb6\xad\x41\ +\xc3\xfb\xdf\x8f\xd2\xc3\x0f\x43\x96\xcb\x2f\x00\x0c\x91\x12\xaa\ +\xda\x2f\x4a\xb4\x2e\xbd\x07\x18\x0e\x10\xc2\xc6\xe8\x2f\x96\x37\ +\xaf\x7d\xe3\xb1\xf1\x19\x73\xf3\xa2\xe0\x36\x03\xbd\x6e\x6c\xea\ +\x44\xe9\x54\xdf\x85\xfe\x07\x1e\x39\xd5\x1d\x04\x72\xbb\xaa\xb4\ +\x41\x70\x52\x90\x02\x40\x90\x64\x08\x1a\xe8\xb9\x10\xfe\xd4\x64\ +\x13\xfd\xa3\x9e\x6f\xef\xd3\xfd\xe8\x5a\xd5\x80\x1d\x7f\x70\x07\ +\x52\x3b\x77\x62\xea\xbe\xfb\x50\xdd\xbf\x1f\x13\x00\xce\x92\x9e\ +\x27\xa5\x49\x59\x52\x86\x94\xd7\x62\xb8\xb2\x28\x02\x4d\x4b\xde\ +\x0a\xb3\x57\xff\x40\x22\xac\x02\xc2\x85\x69\x04\x6e\xd0\x78\xfb\ +\xb3\xe9\x74\xea\xd5\x33\x6e\x7d\xc5\x63\xf0\x8d\x2b\xc2\xe9\x53\ +\xbd\xe7\xcf\x1f\x38\x7c\x66\x5d\x18\x4a\x1b\xc2\x05\x44\x05\x08\ +\x23\xcd\x90\xaa\x75\x9b\x27\xd3\xe3\x58\x2d\xe9\x69\x77\xec\xe2\ +\x40\x22\x32\xeb\x6d\x23\xbf\x42\x8b\x37\x81\xfc\x96\x1b\x70\xc7\ +\xbb\xfe\x04\x37\x6d\x5e\x0b\xef\xa9\xa7\xf0\xab\x6f\x7e\x13\x63\ +\x85\xc2\x82\x3d\x68\xe9\x72\xb6\x20\xa6\xe2\x58\x3a\xf6\x00\x07\ +\xfe\x4c\xca\x1d\x97\x36\x60\xe7\x13\x52\x1b\xa0\x55\x95\xd7\x6f\ +\xe8\xde\x5f\x4d\xbe\x62\xcd\xc5\x49\xde\x76\x03\x81\x5f\x4f\xe0\ +\x27\x4e\xf6\x0f\x1d\x38\xd2\xbf\x3a\xac\x4e\x5a\x08\x26\xe3\xc7\ +\x4a\xe8\x16\x67\x7a\x5c\x03\x9e\x3b\xd7\xe8\x14\xbd\xc2\xf8\x45\ +\x3b\x32\xe0\x9d\xc3\x3f\xc7\xb2\xea\x18\x04\x24\x42\x00\xcb\xb6\ +\x6e\x9c\x7c\xd3\x7b\xdf\x69\x74\xac\xec\xcc\x9c\xfe\xd6\xb7\x30\ +\xf8\xb3\x9f\x5d\x72\x21\x9a\xa4\x0e\x52\x27\xc9\xc6\xe2\xf1\x61\ +\xe0\x17\x8f\x4a\xf9\xfa\x4b\x1b\x70\xcb\x93\x92\xa0\x81\x50\xc1\ +\x93\x5c\x35\xb6\x2d\x39\xfd\xd6\xdf\xbf\x75\x60\xa4\x50\xb6\xf6\ +\x1c\xe8\x59\x19\x56\xa7\x4c\x04\xa5\x79\xd5\xd5\x9a\x33\x37\xdf\ +\x8c\x9c\x39\xea\x4f\x16\xc7\x2d\xc0\xc4\xbb\x07\x7f\x88\x76\x77\ +\x34\x32\x80\x04\x84\x94\x07\x10\xa0\x65\xf3\x86\xe0\xad\xef\x7d\ +\x17\xeb\x12\x81\xf1\xdc\x57\xbe\x82\xca\xf0\xf0\xa2\x46\x30\xad\ +\x36\xd2\x4a\x52\x02\xb3\x63\x0c\x28\xbe\x03\x48\xf6\x48\x99\x58\ +\x7a\x13\xd4\xd7\x5c\x3d\x50\xf2\xfc\x6a\x66\x7a\xf8\x40\xe7\xa9\ +\x3e\x99\x0e\x2b\x25\xfd\xae\x2d\x15\x83\x31\x00\xb2\x76\xe9\x8a\ +\x83\x2f\x0c\xaf\x0d\x90\xbc\x04\xf0\x34\xc9\x80\x03\x13\x49\x30\ +\x08\x25\xa0\x80\x10\x06\x8d\x27\x8e\x9d\x36\xbf\xfd\xb1\x7f\x44\ +\xdb\x96\xeb\xc3\xb7\xfc\xed\x87\xd0\xd9\x73\x8a\x0f\x3e\xf6\x18\ +\xf3\x8a\xc5\x05\x4d\xd0\xa0\x28\x90\x56\xeb\xae\xd0\x11\x7c\x16\ +\xd6\xd3\x19\x88\xdb\x97\xde\x04\x79\xa2\x0e\x5c\x67\xe1\x83\xaa\ +\x4d\x29\x6d\x05\x22\x0d\x98\x99\x39\x40\x57\x38\x86\x80\x80\x0d\ +\x98\x91\x81\x26\x1c\x52\x02\x5c\xc1\x07\x91\xd9\x90\xda\x10\x28\ +\x15\x8e\x3e\x67\x7c\xe7\xe8\x67\xb1\x6c\xcb\xc6\xf0\xcd\x1f\xff\ +\x04\xd6\x8f\x8f\xf2\x81\x5d\xbb\x58\xe5\xf9\xe7\xb1\x58\x5c\x20\ +\x4d\x93\xd6\x91\xee\x45\x62\x5f\x05\xec\xf6\x2c\x02\xa8\x58\xba\ +\x03\x64\x9d\x77\x53\xf1\x86\xc6\xcd\xa8\x2e\x3c\x60\x29\xc0\x08\ +\xe7\x54\x96\xcf\x69\x77\x3e\x07\x5c\x46\x7f\xe3\xac\x25\x85\x23\ +\xe3\x67\x8f\x0d\x48\x6a\x03\x26\x10\xc0\xa2\xb1\xa1\x97\x83\x54\ +\x99\x45\x59\x19\xf1\xe0\xc7\xff\x05\xad\x5b\x37\x85\x7f\xf8\xd1\ +\x8f\x61\xbd\x5f\x35\x86\x1e\x7a\x08\x93\xcf\x3c\xb3\xe0\x5d\x4a\ +\x25\x99\xc4\xe7\x2b\x62\xcc\x83\x7d\x6b\x16\x21\x04\x0c\x30\x0a\ +\x49\x71\xe9\xcb\x20\xa4\x92\x82\x07\xa3\xb9\x14\x25\x03\x92\xd9\ +\x2c\x40\x64\x80\xa8\x01\xab\xcc\x6b\x63\x15\x6c\x76\x07\x49\x12\ +\xc3\xac\x39\x21\x38\x60\x64\xd5\x79\x2d\xdb\x81\xe3\x5b\xf0\x45\ +\x08\x57\x32\x24\x04\x87\x50\xc8\x40\xa8\xb3\xa8\xcb\x53\x47\x4e\ +\x1a\xf7\x7f\xe8\x93\x68\xdd\xb6\x29\xbc\xe3\x2f\x3e\x88\xed\x77\ +\x67\x8d\xe1\x07\x1f\xc4\x38\x6d\x96\x32\x0c\xc1\x1d\x07\xc3\x9e\ +\x1f\xec\x66\x59\x0f\xa8\xb6\x78\x90\x48\x13\x7c\x58\x63\xf6\x17\ +\x34\x80\xcc\x31\x70\xfb\x19\x7d\x2f\x50\x06\x98\x45\xe3\x34\x65\ +\x53\x49\x70\x2e\x95\x01\x26\x16\x00\x17\x80\x9c\x05\x59\x4b\xac\ +\x56\x79\xc6\x38\x72\x59\x07\xd9\x95\x67\xf9\xf9\x0d\x5f\x07\xeb\ +\xdf\x86\x7c\x49\x56\x93\x70\x9c\x29\xcf\x85\x15\x98\x30\x24\xc1\ +\x4a\x42\x15\x0a\x5a\x65\x01\xd2\x1c\x23\x4a\xcf\x9e\x34\x1e\xbc\ +\xeb\x13\x68\xde\xba\x51\xdc\x71\xd7\x07\xe4\x8d\x77\xdf\x6d\x0c\ +\xef\xda\x85\x27\x4f\xf5\x54\x2f\x1c\xeb\xb7\x5a\xdc\x20\x55\x81\ +\xa1\x1e\x1d\x92\x32\xe0\xa0\x48\x13\xe7\xa4\xee\x02\x98\x35\x78\ +\x45\x91\x56\x40\x32\x88\x97\x82\x29\x55\xeb\x23\x24\x89\xa8\x03\ +\x04\x42\x9e\xa5\xf9\xd9\xa0\xb5\x2a\x2f\x54\xf9\x48\xea\xfc\xc8\ +\x65\x6c\x34\xae\x1d\x01\x5f\xbf\x07\xd5\x65\x07\x4d\x24\x0e\x81\ +\x75\x1f\xc2\x0f\x6e\x58\x66\xbd\x7e\x4f\x13\xf2\xbb\x4d\x64\xc6\ +\x5d\x50\xf1\x20\x94\x01\x80\x50\x26\x48\x1a\xeb\x63\xc8\x59\x86\ +\x48\x52\xe9\xc8\x29\xfe\xd0\x5f\x7e\x0c\x4d\x64\x84\x63\x04\x41\ +\x43\x71\xc6\x69\x4a\x25\x51\x81\x1b\xbf\x06\xcf\xc7\x34\x24\x9c\ +\xb8\x0d\x9b\xf5\x1d\xb6\x3f\xcb\x00\x3d\xce\x93\x74\xdb\xdb\xba\ +\xf2\x5a\x64\x82\x60\x2e\x42\xe9\x00\x5c\x43\x83\xcd\x06\x55\xa1\ +\x8d\x90\x52\x57\x1c\x04\x6e\x21\xb7\x7a\x08\x7c\xdd\x41\x84\xd9\ +\x01\x54\x05\xe0\xf9\x02\xb0\xa0\xe4\xa6\x05\xdf\x73\x7b\x09\x89\ +\x9d\x1c\x1b\xf7\x25\xb0\x72\x77\x0a\x95\x02\x19\x11\x90\x11\x61\ +\x0c\x2c\xd5\xb2\xd1\x63\x49\x63\x59\x1b\xab\x63\x30\x4c\x93\x11\ +\x99\xee\xe5\x3c\x99\xb4\x11\xb7\x89\x54\x99\x51\x96\x41\x6c\x9e\ +\xbe\x77\x1a\x5e\xcc\x80\x56\x30\x56\x9b\x36\x74\x07\x08\x65\x82\ +\x5a\x8f\x82\xd9\xb3\x61\xa3\x21\xc7\xbc\xca\x33\x03\x68\x48\xdb\ +\xc8\xad\x3a\x0f\xb6\x66\x5f\x0c\x1e\x02\x41\x55\xc2\x0f\x24\x08\ +\x0d\x70\x30\x2b\xdc\x94\xc0\xa1\xdb\xca\x38\x41\x46\x6c\xde\x97\ +\xc4\xaa\xbd\x69\xb8\x13\x51\x47\xf8\x11\xac\x86\x86\xee\x0e\x0d\ +\xae\x40\xc5\x0b\x86\x24\x6c\x0b\x29\xc7\x89\xc1\x69\x0e\x42\xab\ +\x2c\xe1\x89\x10\x14\x0d\x24\x63\xa1\x3d\xc0\x8a\x3b\x80\xe9\xc2\ +\xc6\x15\x56\x24\x3c\xa1\xc6\x7e\xe0\xaa\xe3\xf9\xff\x3f\x20\xeb\ +\x8a\xcf\x90\x4d\x73\x34\x74\x9d\x05\x5b\xbd\x17\x41\x7a\x00\x41\ +\x08\xf8\x33\x92\x32\xc1\x87\x42\x19\x20\x24\x4d\x5a\x50\x26\x94\ +\x11\x20\x2b\x6c\xf2\x3b\x3e\x67\xd5\x16\x78\xfa\x35\x33\x38\xf6\ +\x2a\x8e\x2d\x4f\xa7\xb1\x66\x6f\x12\xd5\x42\x15\xbe\x1f\x10\xeb\ +\xec\xea\x0b\x95\xd5\xf2\x50\xc7\x8e\x63\x43\x75\x80\x36\xa0\x5e\ +\x46\xd9\x13\x90\xea\x59\xf9\x3c\x03\xf4\x24\x91\x4a\x2c\x6c\x82\ +\x03\x2f\xe4\x34\x5e\xf8\x1e\x4c\x81\x67\x4c\x64\x57\xf4\x01\x5d\ +\x7b\x10\xa4\x06\xe2\x4a\x97\x22\x68\x0d\x1f\xc4\x2f\x16\x20\xd9\ +\x5e\x44\x0e\x91\x92\xe8\x61\x45\x8c\x99\x2e\x3a\xbd\x0c\x72\x01\ +\x19\xa1\xcf\x5b\x35\x05\x0e\xee\x28\xe1\xe8\x36\x86\xad\x87\x33\ +\x58\xbf\x3f\x09\xaf\x58\x55\x7b\x84\xea\x88\x08\x1a\x22\x36\x41\ +\x2b\x99\xa0\x0e\x48\x38\x60\x02\x1a\x5c\x73\x48\x60\x4a\x88\x49\ +\x54\x10\x00\x10\x8b\x5d\x06\x05\xaa\x43\x13\x70\x3a\x9a\x74\x95\ +\x67\x99\xe0\x4b\x4b\x8d\xeb\x42\x81\x67\x52\x26\x32\x1d\x04\xde\ +\xb1\x07\x5e\x62\x20\x86\x9d\x22\x68\x55\x6d\x20\x14\x42\x9f\x27\ +\x04\x8c\x0a\xd0\x78\x02\xc8\x9f\x04\x26\x24\xe0\xc6\x97\xba\x71\ +\x54\x50\x60\x2e\x1a\x99\x85\xce\x4a\x0a\x39\xdf\xaa\x75\x04\xe9\ +\xc0\xa6\x2a\x8e\xac\x63\xb8\xe1\x78\x16\xdd\x87\x93\x74\xfe\x80\ +\x0a\x22\x5e\xe8\x08\xa8\xac\x0d\x48\x39\x0a\xbc\x26\xa9\x0c\xa9\ +\x7a\xee\x79\x00\x25\x52\x30\xcf\x00\x3d\x39\x8d\x99\x33\xe7\x90\ +\x58\xd1\x04\x39\x77\x43\x03\xc1\xf0\x1a\x38\xe7\x0a\x3c\xdd\x76\ +\x06\xb2\x8d\xc0\x9d\x0b\xb5\x8a\x07\x71\xd5\x75\x5f\xc6\x86\x1b\ +\x33\x31\x74\xc3\x73\x00\xf7\x01\x3f\x2a\x09\x00\x7d\x53\x29\x01\ +\x6d\x84\x87\x82\xe5\xa3\x51\x18\xe8\x9a\xb6\x91\xf3\x0c\x70\x05\ +\xc1\xe0\x01\xd8\xbf\xb6\x8c\xc3\x5d\x1c\xdb\x4f\xe5\xb0\xf1\x64\ +\x06\x7e\x19\xf0\x24\xf4\x72\x10\x64\x80\x8d\x54\x52\x1b\x80\xb8\ +\xf5\xa1\x3b\x61\x64\x26\x3c\x00\x60\x6c\xc1\xfb\x00\x3d\x39\x81\ +\xe9\x13\xc7\xd0\xfc\xda\xed\xca\xb2\x59\x26\x00\x55\x5f\x2a\xf0\ +\x74\x92\x5c\x5e\xd6\x0b\xd9\xb2\x1b\xae\x15\x55\x5c\xe8\x8a\x4b\ +\x84\x24\x40\xc1\x6b\xf0\x32\x41\x9f\x20\x9d\xaa\x81\x57\x01\x4c\ +\x92\x5c\x52\x1f\xa9\x61\x21\x23\x02\x14\xd2\x01\x1a\x39\x47\xd7\ +\x24\x43\xde\xd5\x9f\x3d\x02\xb1\x11\x5d\x33\x38\xdc\x4e\x46\xf4\ +\xe5\xb0\xb9\xa7\x11\xbe\xb4\xc9\x08\x03\xb6\x41\x45\x89\x0c\x00\ +\xf4\x12\x60\x0a\x7e\xc8\x75\xcf\xee\x2a\x5e\xfc\x0f\xc5\x08\x04\ +\x8b\x19\x30\x8a\xb3\xf7\x7d\x1f\xed\x6f\x7f\x0b\x9c\xf6\xe6\xb9\ +\x26\xf8\x21\x60\x27\x27\xd1\x7c\xdd\x5e\x54\x93\xbd\x98\xae\x96\ +\x51\x75\x43\x9a\xd7\x55\x96\x75\xe0\x5c\x83\x67\x4e\xd7\xc0\x3d\ +\xdd\x80\x2e\x6a\x11\xea\x9a\x14\xb4\x09\xa9\x7a\x23\x80\x71\x43\ +\xa0\x90\x07\xf2\x15\xa0\xb3\x08\xe4\x5c\xc4\x4b\x43\x02\x15\x84\ +\xd8\xb7\x6a\x1c\xcf\xad\xa8\xe0\xc6\x63\xcd\x58\x35\xd9\x04\xce\ +\x39\x12\x8e\xa5\x0c\xe0\x92\x04\x46\x45\x11\xde\x03\xc3\xe7\xbf\ +\xa0\xed\x2e\x2d\x78\x2b\x4c\x73\x82\x31\x36\x05\x6f\xf4\x38\x9e\ +\xfb\xe4\xd7\xb1\xf5\x1b\x9f\x00\xb3\xcc\x7a\x13\xbc\x40\xca\xc0\ +\x18\xc2\xc5\xf1\x43\x70\x8c\x75\xc8\xa7\xb2\x90\xf6\x08\xa6\xc3\ +\x22\x66\xfc\x69\x04\xc2\x8f\x5b\x3d\x43\xe0\xa9\x08\x3c\x88\xfb\ +\xd3\xd7\xef\x4c\x3c\x2c\x1e\x81\x5e\xec\x05\x6d\x42\x72\xb6\x11\ +\x13\x06\x50\x6c\x02\x72\x15\xa0\xab\xc4\xd1\x11\x64\xd0\xe1\xe5\ +\x90\x1c\x91\xe8\x2d\x8d\xe2\x38\x2b\x61\x83\xdd\x06\xcb\x30\x24\ +\xe7\x2c\xba\x12\x28\xf8\x6a\x10\x7a\x0f\x0d\x9c\xfb\xf2\xa1\xc9\ +\xc2\x2f\x01\x5c\x24\xf9\x97\x7a\x33\xe4\x91\x86\x30\xf2\xd3\x9f\ +\xe0\xfc\xbf\xaf\xc7\xca\x0f\xde\x09\x70\xa6\x4d\x88\x37\x34\x3a\ +\x0c\xbd\x00\x2e\x3f\x85\x49\x5f\x22\x65\xb5\xa0\xd1\x5e\x87\xd5\ +\x0d\x5c\xb6\xb5\xf7\x4a\x2f\x39\xc8\x47\x2b\xc0\x68\xb9\x11\xe5\ +\xe8\x83\xcb\xc9\x32\x84\x27\xb0\x60\x30\x2c\x18\x7a\x89\x28\x13\ +\xac\xa4\x85\xb4\x93\x46\x73\xb2\x19\x4d\xc9\x26\x91\x43\xc3\x70\ +\xa5\x38\x53\x1e\xee\xbb\xd0\x74\xfe\xe2\x40\x53\xa6\x12\xef\xf0\ +\xcd\x3c\x03\x87\x2a\x6f\x70\x0e\x93\x71\x44\x31\x63\xb0\xd2\xa7\ +\x9f\x3e\xf4\xf9\x1f\x9f\x3b\xf7\x43\xfd\x06\xb1\x22\x29\x16\x35\ +\x40\x77\x41\x09\x40\x0f\x4e\x7d\xfa\x1e\x54\x47\xa6\xb1\xfe\x23\ +\x7f\x0e\xe6\xd8\x60\x80\x1f\xea\xfb\x5a\x11\xaa\x04\x29\x50\xc6\ +\x19\x94\x13\xdf\xc7\x40\xa2\x97\x25\x7c\x03\xd7\xd9\xd7\x8d\x6c\ +\xcc\x6d\xc4\x6d\xcd\xb7\xa5\xda\xd3\xed\x4e\x73\x43\xb3\x59\x0d\ +\xaa\xcc\x0d\x5c\x94\xbd\x32\x66\xaa\x33\x98\xaa\x4e\xa1\xe4\x96\ +\x30\xe5\x4e\x51\xc5\x2c\x64\x9d\x2c\x92\x56\x12\x29\x3b\x85\x84\ +\x95\x80\x63\x3a\xb0\x0d\x5b\x8a\x40\x84\xe3\xa5\x71\x6f\xa4\x32\ +\x52\xee\x2f\xf5\xbb\x3d\x17\x7a\x1a\xc7\xa6\xc6\x3a\xe0\x23\xde\ +\x0f\xf2\x40\x83\xcd\xd0\x56\x62\x90\xe0\x48\x70\x1b\xb6\x61\x84\ +\x64\x82\x75\xf8\xe2\xe8\x91\x7f\xd8\xbd\xf7\x2b\x07\x86\x47\xf7\ +\x01\x18\x24\xcd\x48\x8a\xcb\xfb\x78\x9c\x31\x8b\x52\x8e\xb4\x16\ +\xad\xaf\x7f\x23\x36\x7d\xee\xc3\xb0\xdb\x9a\x4d\x7f\xc8\x0d\x32\ +\xa5\x04\xb2\xf7\x03\x56\x19\xc8\x1c\x03\xb2\xbd\x34\x0e\x48\xba\ +\xa2\x7e\x9d\xb5\x24\x27\xe1\xa0\x23\xd1\x21\x3a\x8d\x4e\xd1\x68\ +\x37\xca\x8c\x9d\x61\x79\x3b\x2f\x73\x66\x8e\x35\xd8\x0d\x08\xc2\ +\x00\xc5\x4a\x11\x85\x4a\x41\x96\xaa\x25\x4c\xba\x93\x6c\xa8\x32\ +\xc4\x2e\x94\x2f\x18\x85\x72\x21\x3e\x5f\xa0\xd7\x01\xaf\x7b\x0e\ +\x2d\x16\x90\x3c\xa0\x79\xc2\x7a\xf6\x73\xe5\x1b\x8d\xce\xce\x16\ +\xf3\x91\xbe\xfe\xef\x7e\xfb\x59\xf5\x11\x7f\xbf\x5e\x54\xd5\xa8\ +\xb8\x57\xf0\x45\x49\xfd\xce\x90\xf0\x48\xed\x30\xb2\x1b\x71\xfd\ +\xa7\xde\x87\xa6\x5b\x77\x22\x3b\x98\x42\xfb\xdf\xa7\x90\xee\x07\ +\x6c\x05\x1e\x87\xd0\xd9\xaa\xc1\xc3\xaa\xcb\x86\xce\x24\x15\x41\ +\x9d\x7c\x0d\xe8\x2f\x31\xa7\x8d\x50\x21\x6b\x3f\xd3\x7b\xcc\xa3\ +\x78\x02\x9f\x41\x1c\x45\xd2\xb8\x7e\xd3\x13\x48\x8a\x2b\xfe\x8a\ +\x8c\x94\x32\x54\x9b\x22\x50\x45\x58\x2a\xe0\xf8\xdf\xf5\x23\x7f\ +\xd3\x2a\xac\x3f\xde\x8d\x55\x95\x2f\x80\xe9\x17\x13\x90\x58\x1d\ +\x28\x27\x19\x5a\x7c\x4e\xd6\x52\x21\xb5\x84\x9e\x93\x3a\xcf\x9b\ +\xd3\xc7\x5c\x4b\xd4\x81\xd7\x63\x71\x35\x7b\xaa\xee\x55\x85\xaa\ +\xea\xbf\xcd\x97\xa4\xf4\x09\x2a\x64\x84\x47\x79\x0a\xc5\x83\xcf\ +\xa3\x01\x36\x84\xde\xa8\x78\x0d\x5a\x4b\x03\xcf\x85\x5e\xc2\x00\ +\x39\xe7\xb8\x06\x3d\x5f\x4c\xe7\xfa\x02\x08\x25\x5b\x43\x57\x5e\ +\xdc\x2f\x4b\xeb\x6e\xd0\x27\x2e\xe1\x24\x7e\x8d\x7e\x7c\x0d\x33\ +\x18\x9c\x0b\xba\xc4\xf1\xa2\xaa\x19\x37\xcf\xcc\xa5\x4d\x90\x70\ +\x31\x41\xcd\xff\x3c\xee\x8d\x66\xa2\xb8\x6a\x5f\x96\xa6\x73\x73\ +\xfd\x21\x4d\x3b\x69\x0d\xb6\xe0\x76\x6c\xc2\x5b\xd0\x89\x6e\x24\ +\x60\xc3\x9a\xb7\xf6\x6b\x32\x17\xd8\x03\xfc\xd9\x59\x8f\x97\x3e\ +\xf6\x20\x09\x7a\x04\x17\xb0\x1b\xc7\xf1\x18\x5c\x9c\xd0\x97\xb9\ +\x22\xf1\xf8\x57\xcb\x80\x7a\x13\x1c\x6d\x44\x63\xbc\x49\x62\x39\ +\xb6\xe1\x55\x58\x87\x57\x62\x05\x36\xd0\x51\x3b\x1c\x18\x57\x6c\ +\x80\x7f\x89\xb9\x22\x8a\x84\xdc\x87\x21\x1c\xc1\x69\xec\x47\x01\ +\x7d\xfa\xc6\x66\xb4\x76\x7f\xa9\x37\xbc\xab\x66\xc0\x7c\x23\x4c\ +\x6d\x46\x52\xdf\xd1\xe7\x95\x29\x49\xb4\xa0\x9b\xec\xe8\xc4\x1a\ +\xb2\xa2\x03\xcd\x68\x27\x35\x23\x8d\x04\x92\xb0\x55\xaf\x18\xda\ +\x16\x17\x02\x15\xf8\x2f\xa8\x0c\x0f\x93\xf4\xa7\x40\xb8\x13\x18\ +\x24\xbc\x73\x78\x9e\x60\xc7\x30\x00\xa0\xa0\x55\x24\x95\xf5\x4e\ +\xe4\x91\x84\x06\x7f\xe9\x7f\x5f\x40\xaf\xb9\x48\x46\x9d\x21\x36\ +\x29\x51\xbb\xa9\x55\x39\x51\xd7\x0b\x86\x16\xab\xdb\xfa\x82\x5a\ +\x56\x60\x95\x08\x52\xe7\x19\x0d\x4a\xd2\xbd\xb1\x14\xf4\xd5\x37\ +\x60\x69\x43\x16\xd9\xce\x50\xcb\xda\x80\x38\x44\x2d\xab\xb9\x50\ +\x8f\x43\x2d\xb9\x10\xf0\xcb\xc9\x80\xa5\x8d\xb9\xcc\x50\xa0\x2f\ +\x51\x5c\xfb\xd5\x59\xe0\xda\x6f\x8d\x5d\x33\xe0\x9a\x01\xbf\xc3\ +\xf1\xbf\x9d\xd2\xae\xe2\x5a\xef\x69\x4e\x00\x00\x00\x00\x49\x45\ +\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x0d\x06\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\ +\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x06\xec\x00\x00\x06\xec\ +\x01\x1e\x75\x38\x35\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\ +\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x0c\x83\x49\x44\ +\x41\x54\x78\xda\xed\x9b\x5b\x68\x55\xd9\x19\xc7\xd7\x49\x4e\xa2\ +\x26\x26\x1a\xe3\x35\x31\x5e\xc6\x54\xad\x97\x4a\x95\x29\x38\x14\ +\xc4\x22\xb6\xcc\x73\x9f\x2a\xf4\x61\x5e\x7c\x10\xc4\xc2\x0c\x08\ +\x7d\x28\xf8\x54\x4a\x1f\x15\xa4\x4f\xf6\x51\x0a\x52\x90\x4e\x07\ +\x41\x94\xfa\xe0\xfd\xd6\xaa\x03\x5e\xc6\xfb\x35\x51\x63\x2e\x46\ +\xcd\xc5\x7e\xbf\x0d\xbf\x61\xcf\x31\x92\x8c\x1c\x83\xc1\x2c\x58\ +\xec\xbd\xd7\x59\x7b\xad\xef\xfb\x7f\xf7\xb5\x93\xc2\xeb\xd7\xaf\ +\xd3\xc7\xdc\x2a\xa2\x8f\x03\x30\x0e\xc0\x38\x00\xe3\x00\x8c\x03\ +\x30\x0e\xc0\x47\xda\x8a\x1f\x1a\x41\xc7\x8e\x1d\xdb\x53\x5d\x5d\ +\xfd\xb3\x69\xd3\xa6\x7d\xe1\x98\xad\xad\xad\xed\x8f\x95\x95\x95\ +\xf3\x57\xaf\x5e\xfd\x8b\x72\xed\xf7\x41\x24\x42\xdb\xb6\x6d\x5b\ +\x50\x2c\x16\xff\x10\xb7\x9f\xcd\x9e\x3d\xbb\x65\xf2\xe4\xc9\x93\ +\x18\x87\x36\xaf\xb6\x81\x81\x81\xc1\x4b\x97\x2e\xdd\x1a\x1c\x1c\ +\xbc\xd4\xd1\xd1\xf1\xb7\xbd\x7b\xf7\x1e\x1a\xd3\x00\x6c\xd9\xb2\ +\xe5\xb3\xfa\xfa\xfa\xc3\x21\xf5\xaa\x21\x09\x2c\x14\xd2\xdb\xc6\ +\x03\x84\x74\xfd\xfa\xf5\x43\x15\x15\x15\xbf\xd9\xb3\x67\xcf\xab\ +\xb1\x64\x02\x32\xff\xcb\x9a\x9a\x9a\x43\x21\x84\xe2\xcb\x97\x2f\ +\x87\x63\x78\xc8\xb1\x96\x96\x96\xf5\xd7\xae\x5d\xfb\x26\x1e\x7f\ +\x35\x96\x9c\xa0\x0c\xfc\xb3\xbf\xbf\x3f\x13\x42\x00\x91\xaa\xaa\ +\xaa\x52\x98\x02\x3d\xbb\xb7\x3b\x6e\x9f\x38\x71\x62\xc6\x3c\xa0\ +\xd1\x9b\x9a\x9a\xd6\x6f\xd8\xb0\x61\xdd\x98\xd2\x80\xcd\x9b\x37\ +\xff\x39\x98\x69\xec\xeb\xeb\x4b\xcf\x9e\x3d\x4b\x0f\x1e\x3c\x40\ +\xa5\x47\x0a\x5c\x0a\x27\x99\x1a\x1b\x1b\x93\xad\xae\xae\xee\xaf\ +\x71\xf9\x74\xac\x00\x00\xb3\x5f\x04\xf3\x48\x10\xef\x9e\x16\x2d\ +\x5a\x94\xc2\xf9\xa5\xe7\xcf\x9f\x23\x65\xe7\xa4\xce\xce\xce\xd4\ +\xd0\xd0\x90\x31\xfc\xf4\xe9\xd3\x34\x69\xd2\xa4\x74\xfa\xf4\xe9\ +\xf4\xe4\xc9\x93\x44\x0b\xff\x91\x68\x53\xa6\x4c\xf9\xf9\xc6\x8d\ +\x1b\x8b\x07\x0e\x1c\xe8\xff\xe0\x01\xd8\xb4\x69\x53\x75\xb4\xe9\ +\x71\x0b\xc3\x78\xf6\xb4\x6a\xd5\xaa\x34\x61\xc2\x84\x74\xe3\xc6\ +\x8d\x34\x6b\xd6\xac\x74\xea\xd4\xa9\xd4\xda\xda\x9a\xe6\xcf\x9f\ +\x8f\x9d\xc3\x60\xba\x7a\xf5\x6a\x5a\xb8\x70\x61\x3a\x7b\xf6\x6c\ +\xf6\x4e\x77\x77\xb7\xe6\x00\x68\x95\x2f\x5e\xbc\xd8\x14\x4b\xfe\ +\xfd\x83\x88\x02\xdb\xb7\x6f\x6f\x7c\xf4\xe8\xd1\xba\x20\xbc\x3f\ +\x88\x9d\x17\xd2\x5b\x31\x73\xe6\xcc\xdf\xde\xb9\x73\xa7\x2b\x88\ +\x9e\x1c\x63\xd3\x83\xe0\x84\x16\x00\x42\xc4\xf7\x77\xd1\xa2\x4c\ +\x33\x02\xcc\x0c\x84\x5b\xb7\x6e\xed\x0b\x8d\xd9\x4f\x38\x8d\x7e\ +\x34\xd6\xfc\xf7\x89\x13\x27\x1e\xbc\x17\x00\x7e\x1d\x6d\xc5\x8a\ +\x15\x95\xc1\x54\x6d\x30\xd3\x7a\xe6\xcc\x99\xdf\xaf\x59\xb3\xa6\ +\x39\x18\x7d\x10\xd2\x68\xba\x70\xe1\x42\xed\xb2\x65\xcb\xd2\xdd\ +\xbb\x77\xd3\xd4\xa9\x53\x53\x57\x57\x57\x7a\xfc\xf8\x71\x46\x6c\ +\x84\xad\xc4\xbe\xd8\x3e\x12\x0c\xa0\x90\xa8\x9e\x7e\xc4\x0d\x4d\ +\x61\x1d\x1c\x28\x66\xc3\xfd\xe5\xcb\x97\xf1\x07\x98\x13\xfb\xbc\ +\x0e\xad\xba\x1c\x4e\xf4\x1f\x3d\x3d\x3d\xff\xda\xbf\x7f\xff\x89\ +\x98\x33\x38\x62\x00\x76\xec\xd8\xb1\xf4\xe6\xcd\x9b\x5f\xc5\x6d\ +\xcb\xe2\xc5\x8b\x6f\xd6\xd6\xd6\xd6\x04\xa1\x8b\x7a\x7b\x7b\x5b\ +\xcf\x9f\x3f\xdf\xc8\x26\xa8\x24\x92\x84\x51\x18\xc0\x63\xf3\x8c\ +\x6d\xbf\x7a\xf5\xca\xae\x27\x77\x69\xa4\xce\x38\x44\xd2\x99\xcf\ +\x18\x4c\x0c\x1b\x0e\x01\x2d\x68\x51\x0b\x78\x3f\x63\xd8\xe7\x90\ +\x7a\x8a\xe8\x82\xf9\x00\x3e\x7e\x22\xdb\x3b\xe8\xee\x6c\x6f\x6f\ +\xff\x26\xf6\xfd\x32\xe6\xdc\x1e\x12\x80\xdd\xbb\x77\xa3\x8b\xbf\ +\x7b\xf8\xf0\xe1\x5f\x8e\x1f\x3f\x3e\x3b\xd4\x88\x97\x0d\x37\x10\ +\x08\xe1\x79\x06\x91\x1e\x1b\xdb\xdf\x78\x46\x42\x74\x1b\x6b\xe0\ +\xd0\x64\x9e\x3d\x60\x8c\x7b\xae\xf9\x6e\xf3\x3d\xaf\xac\xeb\x95\ +\x0e\x00\x79\xe7\x19\x1a\x09\x08\x00\xc5\xfa\x38\x4f\xfc\x48\xe6\ +\x67\x42\x1b\xae\x1f\x3d\x7a\xf4\x93\x37\x00\xd8\xb5\x6b\x57\x4d\ +\xd8\xd0\xd7\xa1\xaa\xeb\x62\x92\x4c\xb2\x10\x1d\xc6\xd8\x14\xbb\ +\x85\x38\x09\x18\x16\x00\x36\x86\x39\x1b\xce\x0b\x2d\x81\x30\xc6\ +\xed\x23\x01\x80\x2e\x93\x79\x10\x58\xcb\x88\xe0\xef\x87\x0f\x1f\ +\x66\x1f\x98\x56\x08\xdc\xd3\xfb\xc3\x24\xeb\x6f\xdf\xbe\xdd\x5b\ +\xf4\x85\x9d\x3b\x77\xb6\x44\x38\xfa\x36\x54\xb9\x96\xd0\x93\x27\ +\x02\x64\x91\x18\xe3\x61\xf3\x69\xee\xdc\xb9\x29\x5e\x06\x08\x36\ +\x96\x30\x89\xcb\xe6\x00\x60\xe4\xea\x3f\x20\xd6\xe6\xfa\x00\x25\ +\x08\x6a\x80\xfb\x39\xce\x9a\x39\x40\x87\xd4\x00\x3b\xcc\xf1\x1e\ +\xfe\x06\x8d\x20\x7a\x60\x56\x08\x12\x20\x42\xab\x11\x24\xeb\x17\ +\xc3\x17\xfd\x09\x5f\x9d\x01\xb0\x6f\xdf\xbe\xc6\x90\xca\xb5\x28\ +\x32\xaa\x64\x3a\xcf\x3c\x49\xca\xca\x95\x2b\x13\xed\xc8\x91\x23\ +\x20\x9d\x81\x10\x7e\x00\xe9\xe6\x01\xc8\x88\x8e\x82\x86\x8d\x01\ +\x8d\x35\xb2\x4d\x6d\x6a\x14\x8d\xb9\x30\xc7\x1e\xd3\xa7\x4f\xc7\ +\x79\xf1\x9b\x1a\x02\xe1\x43\x81\x24\x20\xa5\x20\xc8\x38\xe0\x2b\ +\x79\xd6\xc0\x0c\xe8\xd6\x0f\xfc\x86\xe3\xfd\x2a\x9e\xf7\x64\x00\ +\xdc\xbb\x77\xef\x3f\x11\x77\xab\x54\x53\x99\xd7\xfe\xc9\xb8\x02\ +\x31\x9c\x48\x46\xa4\xf3\x24\x16\xfb\x82\x10\xcd\x23\x22\x00\x8c\ +\xf2\x2c\x00\xae\x9b\xad\x41\x13\x00\x12\x20\xd6\x46\xa3\xc8\x01\ +\xf2\x4e\x50\xa6\x35\x3d\x9b\x29\x71\xe9\x6f\xac\x8d\x83\xc4\xe1\ +\x42\x07\xeb\xd2\xb6\x6e\xdd\x9a\xdd\x9f\x3b\x77\x0e\x67\x4d\xa4\ +\x40\x0b\x2b\x02\x88\x4f\x8b\x21\xfd\xda\x50\x8d\x9f\xe6\xbd\xac\ +\xc4\xa9\x8a\x84\x29\x50\x43\xa2\x80\x81\x84\x4f\x9e\x3c\xc9\x34\ +\xc6\xd9\x54\x00\x40\x18\x86\x95\x8e\x25\xec\x0f\x34\x80\x36\x6f\ +\xde\x3c\x9c\x2a\x5a\x04\x31\xec\x07\xb8\x86\x34\x9e\x5d\x03\x1a\ +\x74\xb6\xec\x87\x76\x71\xcd\xfb\x09\xe6\xb0\xaf\xeb\x93\x1f\x08\ +\x36\x91\x20\xfb\x7d\xce\x9c\x39\x19\x38\x57\xae\x5c\x31\x5a\x4d\ +\x2b\xc6\x4b\xad\x11\x8f\x0b\xbc\xa8\x63\x73\x41\x91\x9e\x31\x63\ +\x46\xb6\xb0\xa9\xea\xc1\x83\x07\x9d\x87\x8a\xb1\xd1\x1b\x6a\xc9\ +\x06\xda\xbf\x44\x0a\xc4\xf2\xe5\xcb\x49\x65\x31\x27\x18\x05\x54\ +\xcc\x0a\xa2\x19\xd7\x9e\x95\x24\xb4\x20\x41\x34\x0d\x3a\x98\x03\ +\xb3\xa8\x3c\x57\x23\x13\x82\x50\x20\x8c\xab\x45\xf8\x37\xae\xbc\ +\x57\xea\x5c\x0b\xc5\xd8\xa0\x10\x8d\x7c\x9b\x8d\xf3\x5e\x7f\x48\ +\xc6\x68\x10\xc6\x6f\x3c\x03\x00\x0b\x43\x30\x44\xd2\x35\x0d\x43\ +\x9f\xef\x31\x8e\x2f\x21\xa5\x25\x09\x82\x69\xf6\x05\x60\xd6\x40\ +\xc3\xb8\xc2\xb4\x0e\xcf\x7d\xd5\x4a\xf6\x31\x17\xc0\xff\xb0\x26\ +\x6b\x01\x12\x7b\xd2\xa0\x01\x3e\xbc\xd7\x17\xd9\xf3\x0d\x0d\xe0\ +\x65\x88\xd0\x86\xe9\x82\x90\x0f\x7f\x02\x61\x1e\xfe\x86\x5d\x6a\ +\x7f\x02\xa0\x59\xd8\xc8\xed\x2f\x5e\xbc\x08\x68\x48\x1d\x89\x03\ +\x00\x3e\x08\x69\xb2\x2f\x84\xeb\x00\xe9\x32\x8b\xf4\x55\x5b\xe6\ +\x40\x07\x6b\xe0\xf0\x58\x83\x88\xc3\x3c\x0b\x26\x53\xeb\x61\x53\ +\xec\xa2\x2a\xf4\xae\x4d\x2f\x9d\x6b\x10\x85\xa4\x4a\xd3\x56\x9c\ +\x1c\x0c\x10\x26\x91\x0c\x73\xd0\x06\x00\x83\x01\x1c\x14\x6b\xe1\ +\xb1\xd1\x1e\xf3\x07\x01\x61\x5d\x68\x45\x73\xb8\x47\x0b\x99\x03\ +\xe3\x80\x00\xf3\xbc\x8b\x43\x25\x04\x1a\xc5\xb8\xda\x87\x01\xa0\ +\x4c\x0d\xc2\x60\xc0\x06\x51\x48\x18\x55\x85\x50\x7d\x47\x14\x46\ +\x5c\x61\x1c\x8d\xc1\x31\xf2\x1e\x0c\xb3\x06\x0c\x41\x1b\x0c\xd2\ +\x01\x4d\xed\x83\x31\xd6\xa5\x94\xc6\x79\x5a\x1a\xb3\x47\x36\x7e\ +\xff\xfe\x7d\x9c\xec\xb0\xf5\x05\x3e\x20\x95\xbb\x69\x32\x46\x15\ +\x98\x8a\x63\x2b\x33\x31\x4d\x0b\x46\xa8\xe0\x32\x82\x97\x2c\x59\ +\x42\xb1\xc4\x19\x5f\x69\x46\x88\xb4\x61\x1e\xa6\x59\x03\x86\x01\ +\x8e\xe8\x01\xd3\x5c\x71\xd0\xac\xc9\x95\x75\x19\xc3\x54\x4c\xb3\ +\x05\xe2\xfd\x6b\x80\x9b\xda\xb0\x47\xc2\x28\x04\x40\xac\x21\x92\ +\x2b\xb6\x8f\x39\x00\x00\xe6\x01\xe1\xe6\x0d\xe6\x21\x26\x2f\xfa\ +\x03\x7d\x92\x76\x0e\x38\x80\x82\xc6\xa8\x25\x8c\x13\xfa\x58\x1f\ +\xad\x1a\xd6\x07\x94\xb3\x11\x26\x21\x02\x50\xb5\x41\xd4\xbf\x94\ +\x79\x54\x17\x82\x91\x26\x7e\x40\x4d\xe4\x1d\x23\x8a\x79\x88\xe9\ +\x30\x73\x60\xd4\xb9\xcc\x43\x5b\xe4\x81\x39\x00\x05\x20\x79\xc7\ +\x6d\x1b\x15\x0d\x30\x03\x63\x63\x25\x44\x83\x59\x01\x80\x09\xa4\ +\x4d\xb9\x8a\xad\x32\x66\x4a\x8c\x64\x35\x15\xcf\x0e\x64\xce\x08\ +\x01\xc8\x98\x0b\x8e\xd5\x04\x88\xf7\xd4\x06\x43\x26\x9a\x85\x1f\ +\x61\x9d\xd1\xd2\x00\xe3\x36\x1d\x86\x70\x4a\x84\xaf\x7c\xa6\x08\ +\xf1\x84\x5d\x3d\x39\x0c\xe8\xd4\xb0\x61\xa3\x00\xa0\x31\x6e\x78\ +\x86\x79\xde\xb1\xe0\xa1\x13\x05\x04\x3e\x9f\x00\xc1\xb4\x7b\x51\ +\x67\x70\xff\x56\x27\x58\x56\x0d\x90\x51\x9a\xea\x8e\x9a\xe7\x55\ +\xd2\x3a\x9d\x28\xc0\xb8\x67\x06\x8c\x31\x17\xa6\xb8\x1a\xfb\xcd\ +\xf4\x90\x3c\xcf\xfa\x05\x8b\x1f\x9a\xd9\xa2\x69\x35\x60\xd0\x0c\ +\x9b\x68\x1c\xfb\x8e\xaa\x06\x68\xab\x4a\xd1\x31\x98\x70\x1e\xfb\ +\x43\x38\x04\xeb\xe1\x71\x60\xf3\x66\x2c\x49\x4d\xd3\x3e\x49\x03\ +\x13\x42\xdd\xbb\x6f\xa3\x29\x30\x6c\x8d\x60\xde\x6f\xea\xab\x84\ +\x87\xca\x1e\xc9\x31\x00\xd5\x7c\xe2\xfd\xfa\x80\x3c\x21\x82\x9b\ +\xaf\xda\x54\x55\x88\xb7\xb4\x05\x00\x41\x50\x0b\xe6\xcf\x5c\x9a\ +\xfa\x6b\x1f\xa7\xe6\xa6\x96\x54\xdd\x96\x85\x4c\xed\x1d\x46\x74\ +\xb6\xac\xc7\x3b\xae\x6f\x04\x92\x27\xfd\x0a\xa6\x88\x29\x00\x40\ +\x59\x35\x60\xd8\x23\x2b\x01\xb0\xa9\x01\xee\x2b\xd1\x8c\xe5\x35\ +\xa1\x50\xf7\x32\x2d\x58\xb4\x34\x15\xeb\xfa\x52\xb1\xba\x39\x75\ +\x90\x2a\xc7\x3b\x66\x99\x9e\x31\xa2\x19\xac\xaf\x29\x5b\xd0\xe5\ +\xa3\x10\xe1\xd0\xcc\xb3\xb4\x55\x94\xd3\x07\xc8\xa8\x04\x20\x95\ +\x52\x60\xf2\x67\x0e\xf9\x7b\x9f\x3d\x23\x7c\xde\xdf\x1e\xcc\x3e\ +\x4a\xb5\x55\xf5\xa9\x3e\xca\xd8\x89\x75\x93\x53\xfd\xec\xc8\x19\ +\x1a\xa6\x38\xcf\xf7\x5c\xc3\xee\xfe\x76\x35\x0d\xb0\xde\x04\xa0\ +\xdc\x3e\x20\x4f\x40\xbe\xa2\xf3\xde\x4c\xd0\xef\x7f\x30\xeb\x5c\ +\xfb\xf7\x31\xbf\xa7\x37\x75\x84\xea\x77\xb5\xb7\xa5\xee\xb6\xf6\ +\xd4\x1b\x6a\x3c\x21\xbe\x9c\x0f\xe6\x34\x8c\xf5\x2c\x99\x05\x54\ +\xe9\x6b\x86\x66\x93\xac\x5b\xda\x8a\x12\x53\x6e\x00\x8c\xdd\x3a\ +\x2d\x9a\xa1\xd1\x33\x02\x55\x9f\x79\x3a\x35\xed\x1b\x6f\x5e\xc5\ +\x07\x8f\xfa\xba\xd4\xf7\xbc\x27\x3d\x8d\x32\xb9\xb3\xa7\x3b\xf5\ +\x15\x99\xfb\x7d\xc5\x0a\x00\xbc\x83\xa7\x57\xd2\xa5\x25\x38\x7b\ +\x50\x83\x70\x1d\x1d\x00\x24\x40\x00\x2c\xb9\x75\x4a\x82\xc2\xbd\ +\x85\x92\xcc\x6b\xe3\xcc\xc9\xca\xe3\xca\x42\x7a\x45\x32\x55\x5d\ +\x91\xba\xba\x3b\x23\xb7\x4e\xa9\xab\xb3\xcb\x13\x6b\x22\x06\x60\ +\x19\xf7\x65\xdc\xc6\x98\xc5\xd2\x90\xad\xa8\x57\x2e\x57\xf3\x24\ +\x57\x42\xcc\xe3\x21\x42\x7f\x03\xb1\x66\x7e\x48\x0e\xdb\xa4\x9b\ +\xfe\xe6\x6d\x96\x10\x56\x37\xb3\x21\x4d\xa8\x9c\x98\xba\x7a\xbb\ +\xd2\xa3\x2b\x0f\x01\x0c\x2d\x61\x4d\xee\xcd\x1a\x3d\x87\x54\xab\ +\xbc\x1f\xdd\x54\x18\x06\xf2\x84\xc0\x84\xa0\xd0\x4c\x7a\x90\x9a\ +\x80\x51\x10\x91\x12\x23\xfd\x7c\xf1\x83\x60\x3c\x95\xce\x67\x82\ +\xda\x33\x8c\x73\x82\xb4\x60\xc1\x02\xcf\x27\x05\xd8\xc4\x89\x44\ +\x69\x74\x8b\x21\x9d\x9a\xcd\xb3\x3a\x80\x80\x60\x6d\x14\xd5\x67\ +\x0c\x66\x01\x8a\xda\x3d\x3e\x5b\x65\xc0\x18\xeb\xad\x05\xb4\x65\ +\x41\xf0\x9c\x32\x3e\xdb\x71\x40\x2b\xd0\xcc\xc9\x3b\x42\xb5\x84\ +\x3d\x47\x4f\x03\x4c\x47\x05\x82\x67\x08\xf1\x68\x8b\x31\x99\xf6\ +\xd0\xd3\x12\x1a\x10\x50\x79\x6b\x04\xab\x41\xdf\xf1\xec\x12\x9a\ +\xa9\x20\x39\x12\xf3\x5c\xd0\x33\x4a\x80\xf5\xd3\x1d\xe6\x05\xf3\ +\xa3\x75\x20\x62\xfd\xaf\xf3\xd3\x0c\x60\xca\x6a\x4d\x02\x21\x1a\ +\x40\xf2\x1f\x47\x19\x83\x21\x8b\x17\xa4\xed\x3c\xc3\x27\x5f\x77\ +\x00\x94\x4a\x12\x06\xd9\x03\xe6\x35\x09\xfd\x0f\x42\xe0\x58\x8c\ +\xdf\x46\xd7\x07\x58\xcf\xeb\x84\x54\x77\x2b\x40\x98\x32\x13\xb4\ +\x74\x36\x1c\xf2\x9b\x45\x8b\x15\x9d\x1f\x52\x61\x44\x8f\x1e\x5f\ +\xaa\xd1\x0e\x4f\x95\x00\x8f\xf7\x33\xa0\x3c\x29\x6a\x6e\x6e\x36\ +\xed\x1d\x55\x1f\x20\xc3\x1e\x45\xeb\x18\x01\x85\x7c\xdc\x83\x4e\ +\xf3\x7a\x01\x31\xf4\xe1\x20\x61\x54\xd3\x00\x00\xde\xa1\xf6\x67\ +\x1d\xd7\xd4\x21\x5a\x4c\xb1\x27\x63\x74\xd6\xc0\xf9\x01\xfa\x88\ +\x00\xe0\x0b\x71\xb9\x01\xc0\xa1\x69\xbf\x66\x6c\x48\x0b\xf5\xd5\ +\x57\xc0\xb8\xde\xde\x52\xd7\x44\x4a\xa6\x4a\x73\x0b\x55\xde\x22\ +\x27\x9f\x0c\x79\x62\x84\xf4\x31\xbb\x11\x29\x6c\x31\x50\xae\x61\ +\xd1\x72\x54\x7f\x36\x88\xb3\x04\x2e\x05\x06\x10\x20\x54\xe7\x05\ +\x13\xac\x81\xdd\x23\x71\xa5\x6a\x6d\x60\x46\x49\xb7\xb6\x27\xf9\ +\xf1\x54\x29\xff\x75\x8a\x77\xf9\xd6\xc0\xbc\xb5\x6b\xd7\x72\xec\ +\xa6\x06\xe9\x24\xf9\x2e\x21\xdd\x00\xde\x87\x06\x34\xf0\xf0\x0e\ +\xcd\x8c\xee\x6d\x5a\x80\x2d\x2a\x39\xbb\xc7\xde\x10\xe7\x87\x0d\ +\x08\xf1\x4b\x8e\xa7\xba\x1e\x8c\x70\xc6\x0f\x53\x00\xc5\xf1\x39\ +\x6b\xc8\x98\xef\x20\x6d\x00\x63\x3d\x2b\x4e\x2a\x40\xd6\xf6\x3d\ +\x40\xf5\xbc\x01\xba\xa0\x01\x20\x6f\x15\xf9\xdb\x5b\xff\x14\xed\ +\xc7\xb6\x7c\xf5\xa5\xbd\xea\xfd\xd9\xc0\xdf\x4a\x9b\x4e\x12\x8f\ +\x0e\x51\x48\x15\xa2\xf3\x69\x33\x34\xd1\x79\x9f\x64\xc7\x46\xe6\ +\x67\x68\x33\x29\xe2\x7d\x4b\x5d\x01\xf8\xee\xbb\xef\x86\x22\x59\ +\x00\xd1\xd0\xb3\x11\x49\xfe\x5b\x8c\x81\x9b\x64\x5a\x6c\xca\x22\ +\xf9\xd8\x9b\xaf\xeb\xed\x2c\x6e\x4d\x0f\x61\x7e\xa8\x90\x28\x8f\ +\xb8\xec\x6e\xea\xb5\xa4\x79\x86\xef\x91\xd8\x70\x69\xb9\x66\x82\ +\xcf\xf0\x0b\xb6\xe7\x83\x23\x31\x57\xfd\xc7\x85\xf8\xfb\x86\x2f\ +\x63\xa8\xad\x18\x52\xea\x08\x6f\x79\x28\x08\x5f\xef\x5f\x58\x04\ +\x83\x32\xe2\x55\xe2\x65\x12\x2f\x3f\x10\x44\x7c\x1b\x8f\xcf\xf2\ +\x69\xae\xcd\xf8\x3e\x82\x26\x38\x95\x01\xe8\xd4\x58\x63\x7a\xd0\ +\x50\x13\x9d\xbf\x57\x80\x3e\xf6\x1b\x88\xf1\xbe\xb8\xbc\x88\xa9\ +\x8f\xc3\x41\x3e\x09\xa0\x7e\x6c\x02\x83\xd0\x3a\xc2\x9c\x2e\x45\ +\x38\xfe\x3a\xd6\xbb\xc0\x29\x7e\x21\xfe\xf6\x7e\x52\x2c\xbc\x3a\ +\x54\xf6\xf3\x40\x77\x59\xfc\xf0\x13\xfe\xcc\x8d\xf9\x79\xc9\x4b\ +\x67\x34\xa0\xbe\x1d\xb6\x74\x24\x88\xf8\x5f\xbc\xdb\x99\xde\x4f\ +\x73\xc3\x42\xb4\xd7\x65\xc8\x4f\x90\x0e\xb4\x12\x1b\xef\x45\x7f\ +\x12\x7f\x71\xfa\x3a\x0b\x81\xf1\xf7\x7d\xd3\x02\xed\x96\x60\x66\ +\x6e\x3c\x83\x7e\x7d\x00\x41\xfd\xca\xef\x48\xb2\x10\x9d\x7b\xfa\ +\x60\xdc\xb3\x50\x7b\xcc\xb9\x16\xd7\xa7\x69\x6c\x34\x40\xec\x23\ +\x68\x04\xe3\x7d\x0e\x9a\x03\x00\x42\x15\x99\x6c\xf4\x9a\xe8\x18\ +\xa2\xfa\xeb\xb5\x40\x67\x21\x54\x07\x7f\x44\x07\xc5\x34\x86\xdb\ +\xf8\xbf\xce\xa6\x34\xfe\x5f\x63\xe3\x00\x8c\x03\xf0\x11\xb7\xff\ +\x03\x7f\x19\x0a\xe4\xd7\x62\x63\xda\x00\x00\x00\x00\x49\x45\x4e\ +\x44\xae\x42\x60\x82\ +\x00\x00\x15\x14\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\ +\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x06\xec\x00\x00\x06\xec\ +\x01\x1e\x75\x38\x35\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\ +\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x14\x91\x49\x44\ +\x41\x54\x78\xda\xe5\x5b\x79\x8c\x64\xc5\x7d\xfe\xbd\xa3\x8f\xe9\ +\xee\x39\x76\xa6\x97\xdd\xb9\x96\x3d\x66\x61\xef\x05\x61\x6c\xae\ +\xa0\x38\xb6\x20\x4e\x2c\x22\x27\x32\x09\x92\x0f\x14\x20\xc6\x81\ +\x18\x84\x92\x08\x59\x8a\x30\x7f\x18\x04\x09\xe0\xf8\x08\x47\x24\ +\xa2\x24\x76\x14\x9b\x80\xf3\x4f\x0e\x27\x86\x80\xc3\x61\x60\x31\ +\xe6\xb0\x21\xbb\xec\xb2\xf7\xce\xf4\x4c\xcf\xf4\xdd\xfd\xae\xaa\ +\x7c\xbf\x7a\x5d\xf3\xfa\x98\x49\xef\xb4\x90\x65\x29\x65\x7d\x54\ +\xbd\x7a\x47\xd7\xf7\xbb\xab\x66\x6d\x48\x29\xe9\xff\x73\xb3\xe9\ +\x97\xb8\xbd\x74\xed\xb5\x03\x9e\xeb\x66\x09\xf0\x84\x18\x23\xe9\ +\x67\xa5\x2f\xb3\x42\x88\xac\x14\x18\x63\x4e\x04\x22\x2d\xfd\xe0\ +\xdf\x7f\xf3\x95\x57\xfe\x8a\xfa\x68\xbf\x30\x0b\x78\xef\x4b\x5f\ +\x4a\x54\x3d\x2f\xeb\x48\x37\x6b\xf8\x41\x96\x04\x88\x04\x04\x02\ +\x41\x56\x92\xc8\x52\x20\x43\x52\x52\x8c\xc9\x40\xe0\x9e\x60\x82\ +\x29\x89\x87\x70\x4d\x18\x87\x08\x02\x12\xd1\xb8\xd9\x8b\xc6\x46\ +\x21\x86\x2e\x3a\x70\xc0\xfb\x85\x58\xc0\xcf\xef\xbe\x3b\x6e\xd5\ +\x6a\x59\xd7\xf3\xc6\x4c\xc3\xc8\x0a\x62\x12\x06\x2f\x18\x3d\x8d\ +\x19\x22\xc8\x0a\x49\x59\x92\x4c\x42\x86\x7d\x20\xd3\x20\x47\x06\ +\x6e\xa0\x03\xd0\xf3\x80\x00\x26\x21\x19\x12\x64\x00\xdc\x23\xd9\ +\x84\x7a\xae\x1d\xb4\x0c\xd2\x73\xc9\x63\x52\xee\xbc\x88\xe8\xcd\ +\x0f\x44\x00\xef\xdc\x79\xe7\xed\xe5\xb8\xbd\x29\x79\xe2\xe4\x88\ +\xb1\x6e\x24\x26\x0d\xca\x1a\x64\x8c\x11\x48\x12\x49\x80\x06\x7d\ +\xe2\x26\xa1\x38\xee\x42\x32\x7a\x61\x22\xec\x43\xed\xf0\x98\xfb\ +\xe6\x75\x04\xb9\x32\xa4\x86\x88\xde\xd7\x08\xaf\x43\x88\xf6\xdf\ +\x34\xa4\x7f\x01\x7d\x10\x02\x78\xec\xc2\x0b\xbf\x72\xc5\x95\x97\ +\xdf\xe5\x98\x43\x94\x1a\x18\xa0\x40\x88\x90\xaa\xc1\xff\x55\xff\ +\xa1\x50\xf4\x7a\x28\xc3\x61\xa4\x9d\x88\x74\x34\x56\xef\x5a\xa9\ +\x34\x05\x8d\x3a\x5c\x99\xcd\xda\x65\x33\x50\x30\x63\x36\xe6\x1b\ +\xe1\xb5\xd0\xc4\xf1\x46\x32\x41\xa4\x85\x55\xa9\xb4\x0b\xa3\xc3\ +\x2a\x84\x30\x2e\x30\x0c\xe3\xef\x25\x5a\x5f\x02\x30\xd0\xee\x98\ +\x9e\x4e\xce\x0c\x0f\xdf\x5e\x2f\x95\xa9\x54\x2c\x53\x76\x7c\x9c\ +\xfc\x72\x89\xc8\x34\x69\xb5\x66\x26\x12\x24\xea\xf5\x48\x10\xe1\ +\xe2\x99\x8c\xd6\x54\x48\xcc\x60\x01\x0c\xa0\xc7\x3b\x98\x0b\x6a\ +\xfc\xb2\xa5\xe6\xfc\x5a\x83\xac\xc1\x21\xf4\x35\xb2\x86\x06\xc9\ +\xcd\xcd\x13\xa5\x53\xca\xf7\x85\x03\xc1\x60\x5e\x13\xee\xd6\xbe\ +\xb6\x00\xb1\xbf\xa9\xa1\xb5\x0b\x80\xc9\xf3\x72\x3c\xa2\x6d\x41\ +\x10\x0c\xd7\xf0\x83\x85\xa5\x22\xc5\x76\xee\xa4\x5a\x6e\x8e\xcc\ +\x64\x52\x4b\x49\x6b\x5d\x75\xf1\x6c\x96\xbc\x42\x81\x12\x1b\x36\ +\x52\x50\xad\x84\x6b\xf1\x3d\x32\x62\x31\xe2\x4f\x06\x9e\x47\xd6\ +\x40\x4a\x09\xa8\x31\x3f\xaf\x34\xeb\xd7\x41\x36\x99\xc4\x3b\x1b\ +\xc8\xc9\xe5\x48\xb2\x65\xc0\xd2\xbc\x7a\x95\xc8\x32\xc9\xaf\xd6\ +\xc8\x84\x50\x02\xd7\xa3\x00\xe4\xf9\x5d\xe9\xba\x91\xf6\x05\xf7\ +\x1d\xae\x80\x1e\x2a\xda\xcb\x2b\xec\xd7\x05\x0c\x20\x31\x57\xaf\ +\xaf\x9f\x49\xa5\xa8\x86\x1f\x75\xaa\x55\xb2\x86\x47\x28\x60\xe9\ +\xc7\xe2\x78\xa2\xfd\xeb\x12\x30\x2c\x1b\x8b\x74\x48\xb8\x0e\x34\ +\x08\xcd\x2d\x2c\x28\x72\x36\xb4\xe9\x2c\x2e\xc2\xb4\xe3\xea\x9e\ +\xa4\xd0\xff\xb5\x00\xdd\xa5\x25\x08\x6e\x89\x04\x5c\x21\x58\x2a\ +\x34\x4d\xbe\x33\x3e\x04\xaa\x27\xdb\xc2\x37\xbc\xe8\x9e\xd4\x71\ +\xa5\x45\x18\x00\xfe\xb3\xfe\x9b\xdb\xb7\x8f\x43\xf0\xa7\xd6\xe2\ +\x06\x76\x53\xfb\x16\x90\x2e\x04\xc1\x04\x07\xb0\x06\xfc\x31\x33\ +\x98\x21\x7b\xdd\x08\x49\x98\xa7\x1c\x0c\x34\xe9\xb6\xe6\x2c\xcc\ +\x2b\xc2\x0d\x68\xd2\x4a\x24\x95\x86\xdc\x52\x99\x4d\x5b\x49\xab\ +\x7e\xfa\x54\x4b\x1c\x90\x54\x3b\x71\x42\xbb\x84\x26\xda\x41\x5e\ +\x32\xda\xef\x35\x7c\xfd\x8d\x2e\x17\x00\xda\x2c\x63\x90\x88\x03\ +\xe1\xa9\x7e\x2c\xc0\x04\x52\xae\x54\x45\x06\x39\x8e\x4b\xe7\x6c\ +\x9f\x21\xd7\x07\x71\x19\xe6\xdb\x95\x4c\xc0\x87\x95\xe8\x00\x28\ +\x3c\x8f\x47\xa1\x99\x57\xca\xad\x01\x31\x22\x2d\x23\x82\x3a\x4b\ +\x44\x02\x88\xae\x89\xc1\xf9\xde\xf7\x29\xf0\xb9\xf7\xd4\xd8\xc7\ +\x98\x94\xba\x2c\x32\x01\xb8\x5a\x28\x6c\xdc\x93\x58\x0b\xc8\xec\ +\xc3\xdd\x7f\xe9\x57\x00\x31\x43\xca\x14\x2f\xd2\x81\xcf\x4d\xcf\ +\x6c\xa3\xea\x7c\x8e\xcc\x78\x3c\x5c\x54\x77\xd3\xe4\xa3\x6c\xa0\ +\x53\x22\xe9\x34\x18\x09\x81\x05\x20\x02\xc1\x71\x21\x04\x2f\x1a\ +\x40\xaf\x82\xac\x61\x59\x80\x0d\x60\x8c\xdf\x34\x6c\x9b\x6c\xcc\ +\xc7\x00\xa4\x60\xf0\xe4\x9e\xf8\x79\x95\x31\x82\x3a\xe0\x38\xe1\ +\x98\xdd\x8c\xb3\x89\x94\xfb\x74\x20\xec\x27\x0d\x9a\xf0\xd1\x18\ +\x2f\xd6\xf3\x7c\x15\x7c\x2a\xe5\x1a\x0d\x20\x1a\x3b\xda\x02\xba\ +\x9a\x04\x09\x90\x0a\x3c\x28\xc1\x67\x2b\x08\xb5\x16\x04\x4c\x46\ +\x91\xb0\x00\xee\xc9\x8e\x21\x63\x58\xb8\xb6\xe0\xd6\x36\x00\xc2\ +\x26\x60\x19\xca\xc7\x03\xfc\x9e\xd0\x84\x18\xd0\xa8\xaf\x2d\xa4\ +\x37\x94\x0b\x58\x3a\x10\xf6\x15\x04\x81\x79\xdf\x2f\xa2\x57\x64\ +\x3c\x04\xb1\x52\xb5\x4e\x83\x08\x84\x8d\xc5\x3c\xd5\x0a\x45\x12\ +\x2c\xa5\x78\x8c\x4d\x4f\x59\x86\x65\xa1\xcf\xc4\xc8\x42\xb0\x8b\ +\xc7\x98\x5c\x1c\x81\x2f\xd4\xa2\x6c\x92\x11\x8a\x90\x43\x3e\x7a\ +\x59\x87\x90\x9a\xe6\xee\xb7\xb9\x40\x38\xa6\x68\xdc\x01\xd9\x1b\ +\x52\x32\x89\xed\x9f\xdb\xb0\x21\x89\xb0\x56\x93\x68\x6b\x2e\x84\ +\xde\xaf\xd7\x17\xf1\x96\xd2\x60\xad\x5c\xa6\x42\x2e\x4f\xe7\x5e\ +\x3c\x4d\xf2\xd4\x29\x1a\xdb\xb5\x8b\xcd\x34\x24\xa5\xc9\xb9\x0e\ +\x08\x42\x73\x24\x55\x40\xf6\xa8\xc5\x0d\x80\xee\x9e\xc9\x74\x8e\ +\x55\xdf\x4d\x3e\x22\x06\x88\xff\x1b\x62\x19\xb1\xcb\xe2\xf1\xdd\ +\x7f\x47\xf4\x6a\x3f\x2e\x20\xab\x41\xe0\xba\x42\xa0\x0b\xd2\xb5\ +\x5a\x9d\x4a\x88\xee\xf6\xc8\x88\xd2\x62\xf5\xd8\x51\x8a\x9a\xe2\ +\xd4\x51\x15\x46\xe4\x69\x45\x41\x88\x96\xba\xbe\x83\xb0\x5c\x51\ +\x00\x6d\xe4\x68\x19\xb2\x1b\x32\x42\xd2\x90\xfb\xa9\x0f\x01\x48\ +\x40\x00\x7e\x2d\x08\x0a\x83\x42\xa4\x51\x0b\xf0\x02\xb8\x16\x50\ +\x5a\x36\x06\x92\xd4\x91\x06\xda\x3b\x29\xb5\x30\x34\xe9\xae\x80\ +\xa8\x02\x2c\x4a\xda\x0a\xfc\x7b\xdd\xd8\xd8\xea\xfb\x85\x8e\x31\ +\x45\xa6\xde\x91\x39\xba\x61\x0a\xc4\x81\x35\x34\xb3\x85\x8d\x0f\ +\x78\x2c\x00\x5d\x0b\xf0\x22\x25\x07\x31\x21\x9b\x5b\xd2\x20\x44\ +\xc0\x10\xcb\x73\x22\xda\x96\x02\x3c\x0e\xaf\x45\x73\x4e\x00\x7c\ +\x5d\x02\xf9\xe9\xcf\x5f\x4f\x57\x3d\xf1\x4f\x3d\x82\x5a\x07\xf9\ +\x88\xb4\x86\x16\x52\x17\x8c\x30\x15\x9a\x6b\xb2\x00\xad\x7d\xc0\ +\xad\x0a\xb1\x14\xd6\x02\x1e\x4d\xef\xdd\x4d\xd5\x85\x79\x15\xf0\ +\x7c\xd1\x91\x09\xb4\xb6\xa3\xb1\x4a\x51\x25\x54\x83\x23\xe7\x9c\ +\xb3\xe2\x26\xe9\x43\xbf\xf3\xdb\x34\x75\xc3\x0d\x61\x4e\xe7\x32\ +\xd9\x30\x75\x31\x13\x91\x6d\x89\x0d\xb4\x7a\xb1\xc4\x58\xd9\x02\ +\xa4\x54\x99\xa0\x1f\x0b\xf0\x00\xa7\xe4\xfb\x0b\x4a\x00\xae\x4b\ +\xe3\x5b\x36\x43\x00\x79\xb2\x32\x19\x12\x5a\xbb\x80\x50\x50\x1a\ +\x6e\x5a\x44\xd8\xdb\xdb\x66\xe8\x23\x7f\xf9\x75\xf2\x38\x40\x0a\ +\xfd\x7c\x84\xc3\xdf\xfd\x2e\xcd\x7e\xff\x29\x32\x6d\x9b\x2b\x47\ +\x6d\x29\xcd\xf7\x57\x44\x37\xf9\xd5\xef\xeb\xc0\x34\x7a\xcf\xc6\ +\x8d\x53\x06\xda\x59\x09\x40\xa2\xb5\xb8\x80\x5b\xf4\xfd\xbc\x4e\ +\x85\x41\xb1\x48\x65\x04\xc2\xf8\xc8\x3a\x6d\xd2\x0a\x32\x22\x17\ +\xb9\x01\xfa\x0b\xef\xb8\x83\x26\x2e\xbb\x8c\xec\x89\xc9\xe5\xc5\ +\x89\x96\xde\x01\xe9\xd2\x1b\x3f\x25\x6e\x89\xb1\x51\x7d\xef\x2c\ +\xd1\xed\x0a\xd1\x39\x41\xd8\x8b\x26\x91\x75\xa6\xb9\xbf\x1f\x0b\ +\x08\x00\x37\x1f\x04\xf3\x4d\x01\xe0\x22\x4f\xc5\x33\x67\x38\x13\ +\x70\x5e\x6f\xd7\xa8\x5e\x8c\xb6\x06\x3c\x9f\xc0\x73\xdc\xce\xbf\ +\xe9\x26\x65\x05\xd1\xf3\x91\x96\x1b\xc7\x4f\x10\xb7\xf4\x94\x12\ +\x92\x16\x60\x6f\xd2\x00\xbb\x4d\x19\xbb\x4f\x07\x75\x48\xd5\x0f\ +\xa8\x5c\xa9\x44\xf7\x23\x22\xaa\x24\xee\x27\x0b\x28\x01\x9c\x74\ +\xdd\x39\x2d\x80\x4a\xa5\x4a\x65\x6c\x63\xed\x4b\x2f\x21\x62\x01\ +\x74\x58\x95\x6c\x19\xc7\xb0\x71\x5a\x78\xe6\x69\x4a\xc2\x5d\x26\ +\x7f\xfd\x13\xf4\xf3\x8d\xe3\x24\x72\xf8\x54\x47\x3d\x50\x9f\x3b\ +\x43\xdc\x52\x9b\x36\x93\xfc\xef\xe7\x95\xf6\x3c\xc7\x51\xd6\x60\ +\x59\x5c\x8c\x1a\x51\x0c\x68\xf1\x7f\xc7\xb2\x69\xc7\xcd\x37\xd3\ +\xf8\xee\xdd\x94\x9a\x9c\xa0\x81\x2d\x5b\xa8\x84\xcd\xd5\x0f\xaf\ +\xba\x5a\x0b\x40\x5b\x00\x7f\xe3\xac\x4b\x62\xb3\x23\x0d\x7a\x67\ +\x1c\x27\x1f\x80\x3f\x2f\x88\x53\x61\x65\x69\x29\xac\x05\x5c\x57\ +\xbb\xc0\x8a\xae\x30\xb8\x65\x2b\x15\x5f\x7f\x8d\xe6\xfe\xfa\x51\ +\xe2\xb6\xeb\xd6\x5b\x61\x05\x4e\x97\x1b\x94\x17\xf2\xaa\x64\x4e\ +\xcf\xcc\x50\x15\x5b\xe1\x7a\x22\x41\x9b\x10\x18\x67\xf0\xfc\xd8\ +\x27\x7e\x83\x8a\xd5\x2a\x07\xd3\xb6\xb8\x20\xd6\x8d\xd2\xd5\x88\ +\x1f\x23\xcf\xfd\x90\xde\xfd\xcc\x75\xf4\xda\xaf\x5e\x49\x87\x2e\ +\xff\x08\xd1\xf3\xcf\x61\xc5\x1e\x2f\x3e\x82\x61\xe8\xb3\x01\x73\ +\x0d\x2e\xd0\x96\x09\x9c\x1a\x4a\x62\x5e\x6c\xbd\x56\x23\x1b\x87\ +\x15\x46\x12\xd0\x64\x3b\xd1\x9c\x1f\xde\xbb\x8f\x6a\xef\x1d\xa6\ +\x93\x67\xe6\x68\xe1\x3f\x7e\x40\x93\x57\x5e\x49\xf1\xe9\xe9\x76\ +\x17\x00\x1c\x69\x50\xf9\xf0\x61\x9a\xfa\xd8\xc7\xe8\x92\xfb\xef\ +\xa7\x5f\xf9\xbd\x6b\x69\x6b\xad\x44\x5b\xb7\x6f\xa3\x2b\xee\xbd\ +\x97\x7e\xf7\xc0\x6b\x14\xdb\xb6\x4d\x93\x57\xc2\xf8\xe8\xe3\x8f\ +\x53\xe1\x1f\xbe\x4d\x07\x7e\xf2\x16\xe5\x92\x69\xca\x25\x52\xf4\ +\xe6\xdc\x22\x3d\xff\xe5\x3f\xa3\xa0\x9d\xbc\xb6\x80\x99\xcf\x8c\ +\x8e\xa6\x0c\xb4\xb5\x08\x40\x67\x02\xb7\x2e\x44\x41\xb0\xbf\xc2\ +\x34\x37\x4c\x4f\x51\x0d\xfb\x02\x2b\x91\xe8\xf6\x51\xf6\xfd\xe6\ +\x31\xf5\xe8\x85\x17\xaa\x78\x11\x90\x41\x73\x8f\x3e\x4c\xdc\xf6\ +\xdc\x76\x1b\x9b\x77\x18\x24\x01\xd9\x44\xf5\xd0\x41\xb2\x90\x5a\ +\xe7\x1f\xf9\x16\x1d\x78\xe4\x51\x7a\xfe\xdb\xff\x48\xaf\xdc\x74\ +\x23\x9d\xbe\xe5\x0b\x14\x1f\x1a\xa2\xab\xbf\xf3\x1d\x92\xc3\xc3\ +\xea\xd9\x91\x7d\xfb\x68\xdd\x79\xe7\xd1\xd1\xe7\x7e\x44\x42\xca\ +\x36\x9f\xaf\x5a\xf6\x32\x79\x11\x92\xd7\xb0\xf6\x0d\x0c\xec\x5e\ +\xab\x05\xc8\x65\x0b\x08\x82\x25\xa1\xb6\xc5\xa8\x05\x76\x9c\x4f\ +\x75\x6c\x86\xec\x74\xba\x4d\xf3\x82\xa1\x83\x97\x65\x71\x90\xc4\ +\xf3\xbe\x9a\x3b\xf2\xde\xfb\x94\x7b\xee\x39\x9a\xb8\xe2\x0a\x4a\ +\x6c\xdd\xd6\x6e\xce\x40\xfd\xbd\xf7\x88\x5b\x11\xd6\xe0\x41\x60\ +\x30\x78\x2a\x26\x53\xf4\xda\x7f\x3e\x43\xb3\x4f\x7c\x8f\xe2\x38\ +\x5d\xda\x7c\xcd\x35\xea\xd9\xb1\xcd\xe7\xaa\xa5\x35\x82\xa0\x8d\ +\xbc\x86\xe8\x20\xaf\x91\x20\xda\xdf\x8f\x0b\x78\x80\x53\x0e\x82\ +\xbc\x3e\x18\xd9\x30\x31\x8e\x54\x38\x4f\x71\xf8\xa1\xce\xfd\xdc\ +\xcb\x65\x04\x34\xb4\x79\x33\x39\x88\xfa\xd6\xf9\xe7\xd3\xf0\x47\ +\x7f\x8d\x36\x7f\xf1\x8b\x94\xda\xba\x95\xb8\xed\xbd\xfd\x76\x58\ +\x41\xa3\xcd\x0d\xea\xcd\x7d\x45\x72\x6a\xaa\xad\x62\x74\x0d\x93\ +\x72\x4f\x3e\x41\x68\xec\x42\x6a\xce\x32\x0d\x15\x40\xd3\xbb\xf7\ +\xa8\x5e\x10\xb5\x41\x76\x93\x57\x73\xb1\x30\x13\x9c\x9d\x0b\xb4\ +\xd6\x02\x5a\x00\xcb\xa9\x90\xb7\xc5\x73\x73\x64\x8f\x8e\xf2\x81\ +\xa7\x2e\x75\x23\x60\x91\x23\xf0\xff\x31\x04\xb5\x8b\x2f\xb9\x98\ +\x76\x0a\x97\xb2\x2f\x3c\x4b\xf9\x9b\x7f\x9f\x4a\xaf\x1d\xa0\x89\ +\xcb\x2f\xa7\xd4\x8e\x9d\xad\x6e\x00\x01\x1c\x0b\x53\x21\x22\x79\ +\xe7\x5f\x7e\x4e\x1f\x3c\x48\xaa\x35\x35\x5e\x7b\xe9\x45\x95\x48\ +\x66\xbe\xf0\x07\xe4\x0a\xd1\x45\x94\xd7\x68\x66\x32\x5d\x71\x80\ +\x4c\x53\x95\xc4\xfd\xb8\x80\xbb\x84\x5a\xa0\x55\x00\x95\x85\x05\ +\x95\x09\x60\xe3\x6a\xb1\x11\x42\x52\x59\x14\x3f\x07\xaf\xff\x2c\ +\xfd\xf8\xe1\x47\xe8\x85\x1f\x3c\x4d\xaf\xbc\xf5\x0e\xfd\xf4\x64\ +\x8e\x4e\xdf\x77\x2f\x71\xdb\x87\x02\x89\x33\x82\x7e\xaf\x78\xf2\ +\x64\x28\x80\x6d\x33\x1d\x55\x20\x22\xc8\xba\x31\xe2\xe6\xe7\xe6\ +\xd4\xdc\xc9\xa3\x27\xa8\xf8\xc2\xf3\xb4\xfe\x82\x0b\xe8\xa2\xfb\ +\xef\x23\xc7\xe0\xc0\xef\xa9\x2d\x7b\x1d\x19\x63\xe6\xfa\xeb\xe9\ +\xdc\x5d\x3b\xda\xc8\x03\x4c\x6c\x37\x77\x06\xda\x5a\x04\x10\x00\ +\xde\xac\xeb\xe6\x42\x25\x04\x61\x2d\x80\x54\x68\x8d\x0c\xf3\x2f\ +\x33\xe1\x08\xbc\x78\x32\x68\x74\xcf\x1e\x3a\x8e\xe8\xef\xe1\x73\ +\xa2\xa5\x34\x3e\xfc\xd6\xdb\x54\x7c\xf5\x15\x1a\xbf\xf4\x52\x1a\ +\xdc\xb7\x77\xb9\xe0\xa9\x14\x4a\xe4\xe0\x9b\x53\x57\x5d\x15\x1e\ +\x8c\xa8\x6f\x85\xef\xc5\xd9\xd2\x30\x97\xff\xdb\xbf\x51\xbd\x87\ +\xf5\x1f\xbe\xe5\x66\x72\x20\xb4\xed\x9f\xfe\x34\x7d\xea\xc7\x2f\ +\xd1\x87\x1e\xf8\x73\xda\xf5\xa7\x7f\x42\xd7\x3c\xfb\x5f\x34\x99\ +\x1d\xa1\xf7\x5f\x7e\xb5\xcb\x15\x70\x3d\x72\xe7\xfa\xf5\x9b\xd6\ +\x6a\x01\x02\xf0\x8e\x3b\xce\xac\x3e\x18\xe1\x5a\xa0\xc6\x47\xe4\ +\x99\x41\xf6\x95\x76\x0b\x10\xf0\xff\x6d\x5b\xa9\x7c\xe8\x10\x79\ +\xbe\xaf\x49\x2c\x9b\xb5\x83\xcf\xcf\x7e\xf3\xeb\xc4\xed\xc3\x5f\ +\xbd\x87\x5c\x37\x14\xa0\x4f\x52\xbd\x93\x04\xd9\xf1\x4f\x7e\x92\ +\xaa\xa5\x32\x79\xae\x4b\x55\xa4\xdd\xf3\x6e\xb9\x85\x16\x1e\x7b\ +\x98\x0e\xbe\xfe\xc6\x32\x99\x83\x85\x0a\xfd\xec\xea\x8f\x53\xe9\ +\xbe\xaf\x92\x3c\x7e\x8c\xa6\xf6\xef\xa7\x2d\xd3\x93\xe4\xdf\x73\ +\x37\xbd\xf9\xb5\xaf\x93\x6f\x9a\x7a\xf1\x6d\x41\x71\x5d\x22\xb1\ +\x6f\xad\x7f\x1a\x93\xcd\x2d\x71\xd5\x05\xe2\x52\xa6\x6b\x58\x54\ +\x06\x0b\x75\x0a\x4b\x2a\x15\x7a\x22\x68\x2b\x03\xc7\x90\xfe\xaa\ +\x47\xdf\x57\xd6\x80\xd6\x7e\x26\x80\xf6\xb3\x67\x7f\x44\xd3\x48\ +\x8f\x9c\xca\xf6\xdd\x75\x17\xbd\xf9\x8d\x6f\x90\x84\x4b\x79\x20\ +\x22\x2f\xba\x88\xae\x7c\xe8\x21\xda\x7b\xe3\x8d\x94\x3b\x70\x80\ +\x86\x51\xe1\x89\x27\xbf\x47\x2f\x3e\xf1\x14\xb9\x76\xac\xad\xbc\ +\x3d\x58\xf7\xe8\xc8\x63\x8f\xd3\xc8\xb7\x1e\x26\x5b\x08\x95\x02\ +\x17\xe3\x49\x68\xda\xea\x8a\x0b\x7a\x6c\x87\x99\xe0\x9f\x01\xd9\ +\x4b\x00\xdd\xc5\x10\x6a\x81\xb4\x10\x69\xce\x04\x93\xe7\x9f\x87\ +\x5a\x60\x89\x62\x48\x4f\x75\xc4\x04\xdd\x1a\x8d\x3a\x4d\x5e\xf3\ +\x5b\x34\xff\xfa\xeb\x54\xc4\xbe\x61\xa8\xb9\x17\x90\xa1\x10\x54\ +\xae\xbf\xf0\xa1\xaf\x91\x09\xed\x96\x9f\x7d\x86\x26\x93\x71\xca\ +\xde\x74\x03\xfd\xcf\x93\x4f\x51\xee\xa1\x07\xe8\xc4\x1f\xfd\x21\ +\x65\xb0\x75\x8e\x65\xd2\xe4\x97\x2b\xf4\xf6\x99\x59\xca\xc7\x07\ +\xc8\x67\xf2\x11\x21\x2d\x04\x95\x25\xe6\x70\xbf\x93\x28\xb0\xe2\ +\x1c\x59\x96\xca\x04\x6b\xb6\x80\xa6\x00\xb8\x16\x98\xe4\x6d\xf1\ +\xae\x5d\x3b\x69\xfe\xf8\x49\x8a\x83\xa0\xc0\xde\x80\xdb\x10\x0a\ +\x94\x4b\x60\xae\xe9\xc1\x0c\xc5\x21\xa0\x8f\x3f\xf8\x00\xbd\xfc\ +\x95\xbb\x49\xb6\x1e\x93\xc3\x75\xe6\x6f\xbd\x99\x8e\xc1\x35\x1a\ +\x56\x4c\x11\xf0\x0d\x43\xf5\xa7\xf8\xbe\x95\x20\xca\x17\x49\x02\ +\xdc\x64\x22\x15\x2d\x7e\x05\x82\xd4\x83\x78\xe7\x9c\x85\xb3\x81\ +\x66\x20\x14\x12\x6d\x2d\x16\xe0\x56\x5b\x6a\x81\x61\x90\x3c\x82\ +\xa8\x3c\x9e\x5d\x4f\xf4\xee\x3b\x61\x9e\x7d\xfb\x4d\x3a\xf5\xd9\ +\xeb\xe8\x10\x4c\xdf\x33\x2d\xf2\x2d\x8b\x84\x1d\x6f\x3b\x30\xf4\ +\xd0\x1f\x89\x0d\x10\xd9\xd1\x66\x08\x2d\x1c\xb7\x12\x5b\x85\x24\ +\xad\x4e\x94\x5b\x4f\x4b\x00\xf1\x2d\x9f\x1a\x19\x49\x7f\xbf\x50\ +\x28\xf6\x0a\x82\x51\x2d\x10\x15\x43\x8b\x3a\x13\x70\x2a\x2c\xcf\ +\x87\xa9\xd0\xf0\xc2\x8d\xca\xbc\xe3\xd1\xfb\x20\x37\x8b\x0a\x2e\ +\x1f\x4b\x50\xd1\xb4\x5b\xff\xd5\x46\x74\x4c\xa6\x7b\x29\xdb\x76\ +\x6c\xa2\x63\x8c\x45\x33\x74\x00\xeb\x0e\x6a\x8c\xee\x0a\xb0\xbd\ +\x28\xd2\xcf\x46\x73\x26\x4a\xe2\x3d\x6b\x75\x01\x7d\x30\xb2\x5c\ +\x0b\x38\x5c\x0b\x14\x8b\x64\x73\x7d\xce\xa9\x90\xba\x1b\x18\xb6\ +\x7e\x64\xf5\x71\xb7\x06\x3b\xe7\xba\xdd\xa0\xb7\xd6\xf5\x7c\xd7\ +\xb5\x1d\x8f\x73\x20\x7c\x11\xe8\xe1\x02\x1d\xe7\x02\x8b\x41\x90\ +\xd3\x02\xa8\x54\x6b\x61\x2a\x5c\xb7\x8e\x4c\xbd\xb7\x5f\xa1\xc9\ +\xce\xeb\xd5\x84\xd0\x69\xe2\x9d\xcf\xf7\x70\x83\x68\xae\xb7\x1b\ +\x20\x0e\xb0\x00\x8c\xb5\x58\x80\x00\xbc\x13\xa8\x05\xd0\x87\x9b\ +\x17\xd4\x02\x75\xd4\xfa\x6e\xa9\x44\x16\x6f\x8a\x5c\xb7\x9b\x70\ +\x2f\xad\x1b\xc6\x2a\x82\xe9\xd6\x78\x37\xf1\xfe\x83\x22\x22\x60\ +\x5b\x20\xec\x21\x80\xc8\x0d\x4e\xe3\x60\xc4\x97\xd2\x8f\x49\x69\ +\x73\x2d\xb0\x1e\x1b\x9e\x06\xbb\x01\xb6\xab\x62\x61\xa1\xb7\xf6\ +\x99\x70\xff\x6e\x10\x8d\x7b\xb9\x41\x8f\xe7\x41\x5c\x95\xc4\x3d\ +\x83\xe0\x4a\xbb\x42\x6c\x41\x8b\x3a\x13\x6c\xda\x79\x3e\x55\x51\ +\xbe\x26\xb2\x59\x0e\x34\x5d\x90\x8c\xd6\x6b\xa2\x5e\x41\x6f\xd5\ +\xe0\x26\xa3\xfb\xd1\x35\xa3\xc7\x0e\xb0\x2b\x28\xe2\x1a\x02\x18\ +\xbc\x6d\x62\x62\xf3\x1a\x04\x10\x05\xc2\xba\x10\x8b\xfa\x88\xfc\ +\x5c\xe4\xfa\x2a\x34\x9f\x58\xbf\x5e\x9f\xf9\x77\x47\xeb\xce\xb9\ +\x55\x48\xa9\x7e\x35\x01\x75\x13\x8f\xc6\x2d\xef\x8a\x1e\x31\x80\ +\x5a\x2c\x70\xd0\xb6\xf7\xaf\x49\x00\xda\x02\x50\x0b\x2c\xc1\x6d\ +\x54\x0d\x9f\x42\x55\x57\x99\x9f\x57\x81\x90\x84\x68\x27\xbd\x1a\ +\x71\x4d\xb8\x9d\xd4\x4a\x7d\xf4\xdc\x5a\xac\x81\xe7\x7a\x90\xe7\ +\x16\x37\x0c\x15\x08\x7b\x06\x41\x89\xc6\xc1\x42\x97\xc3\x95\xd6\ +\x73\x81\x7c\x3e\x4c\x85\xd8\x17\x18\x52\xf2\xa2\xd6\x16\x08\xf5\ +\xb8\x67\x36\xe8\x5d\x10\x51\x0f\xad\x77\x36\xcc\xee\x69\x2a\x5b\ +\x9c\x75\x10\x04\xdc\x12\x04\xa0\x8b\x21\xa7\x50\xa0\x7a\xa5\xc2\ +\x16\xa0\xbf\xd4\x3b\x10\x76\x8d\x35\xe9\xde\xd9\xa0\x37\xf1\x6e\ +\x61\xea\xac\x85\x8d\x9c\x82\x0f\x38\xbe\x2f\xc8\x34\xe7\xf8\x09\ +\x6e\x12\xad\xa7\x00\x74\x2d\x50\x68\xad\x05\x2a\x55\xaa\x3b\x0e\ +\x79\xd5\xaa\x3a\x29\x16\x98\xa3\x5e\xda\xd7\x56\xd2\xcb\x12\x7a\ +\xa4\x41\x5d\x56\x2b\x62\xf8\x5d\x0f\xbd\x27\x84\xf4\xd9\x5a\x13\ +\x89\xc0\x1a\x48\x0a\x3b\x95\x96\xf6\xf0\x90\x4c\x8e\x8e\xd1\xe0\ +\xe4\x84\x1c\x9d\xde\x44\x53\xbb\x76\xc8\xbf\xb8\xf3\xcb\xd7\xfd\ +\xdb\xbb\xef\xbe\xdc\xb3\x0e\x58\xf1\x60\xc4\xf3\xe6\x5a\x6b\x01\ +\xe5\x17\x70\x83\x18\x52\xa1\x5c\x5a\xea\x26\xdd\x87\x1b\xb8\x4d\ +\x8d\x79\x00\xf7\x0e\x88\x41\x63\x81\x88\xc7\x03\x23\x91\x10\x46\ +\x26\xc3\xff\x78\x52\x9d\x1d\x0c\x8c\x8f\xcb\xd1\xc9\x49\x63\x64\ +\x7a\xda\x1e\x99\x18\xb7\x6d\x3b\x66\x99\xf8\x9f\x6d\xd9\x14\x8b\ +\xc5\xc8\xb6\x2d\xf4\x71\xe2\xeb\x64\x32\x49\x43\x58\xe7\x79\x93\ +\x93\x15\x08\xa0\xce\x9c\x7a\xd4\x01\xdd\x81\xf0\x78\xa3\x31\x2b\ +\xf0\x8e\xfe\x23\xc9\xe4\xf6\x19\x6a\xa0\x18\x4a\x8e\x8d\x91\x80\ +\x00\x56\x7b\x11\xef\x68\x2d\x69\x73\x64\x0d\x0a\x11\x12\x63\xad\ +\x09\x99\x4a\x49\x2b\x93\x31\x6c\xa4\xd5\x01\x6c\x89\x33\xe3\xe3\ +\xe6\xf0\xf4\x94\x99\xc9\x66\x6d\x32\xd4\xc6\xc2\xe6\xe5\x5a\x96\ +\x45\x71\x45\x0e\x24\xe3\x71\x35\x8e\x27\xb8\x8f\x87\xa4\x63\x98\ +\xb7\x63\xfc\x9c\x7a\x06\x02\x61\x01\xa8\x67\xd2\xa9\x34\xed\x3f\ +\x77\x52\xe9\xad\x67\x29\xbc\xd2\xae\x10\x59\xa0\x02\x12\x15\x14\ +\x43\x19\x95\x0a\x77\xec\xc0\xb6\xf8\xb8\x0a\xa7\x8b\xb5\x5a\xe8\ +\x67\x78\x36\xb0\xac\x40\xc4\x62\x42\x26\x12\x52\x0e\x0c\x48\x99\ +\xce\x20\x58\x8e\xc9\xc4\x86\x73\xcc\xd4\xf8\x46\x63\xdd\xe4\xa4\ +\x3d\x38\x3a\x66\x41\x55\x26\x2f\xce\x34\x94\x43\x92\xc9\x8b\x06\ +\x4c\x1e\x9b\x26\x19\x80\x26\x8c\x7b\x21\x69\xc0\x62\xe0\x1e\xae\ +\x19\xea\x59\x0d\x7d\xe4\x87\x79\x7e\x57\x83\x05\xa4\xe6\x26\x92\ +\x99\x18\x6e\xf7\xda\x0e\xaf\x9e\x0a\xf9\x8f\x24\x49\x21\x32\xae\ +\xe3\xd1\xb6\xa9\x29\xf9\xea\xf1\x13\x1e\xcd\xcc\x48\xfb\xe2\x0f\ +\x1b\xa3\x9b\x36\xd9\x03\x83\x83\x26\x7e\xc8\xd4\x0b\x64\xad\x60\ +\xac\x34\x80\x59\xb2\x15\x19\x73\xf9\xf8\x1b\xd4\x31\x0e\x78\xcc\ +\x8b\x57\xe0\xb5\x99\xfc\x0e\x34\x0c\xe8\x39\x75\xf8\xc9\x82\x37\ +\x00\x7c\x97\x63\x11\xf7\xfc\x0c\x93\x0c\x85\xd8\xfc\x5d\x34\xbe\ +\xd6\xd9\x2c\xdc\xc5\xd6\xeb\x6e\xcc\x94\xa9\x35\x9c\x08\x75\x67\ +\x82\x1a\x8a\xa1\x11\x29\xa7\x38\xf2\x9f\x29\x14\xbc\x89\xcf\x7d\ +\x1e\xe7\x22\x23\x94\x49\xa7\x40\x32\xc1\x0b\x51\x84\x41\x45\xbd\ +\x26\x98\x8c\x8e\xe2\x18\xa3\x0f\x17\x69\x59\xbc\x78\x8c\x2d\x40\ +\x11\x6c\x03\x04\xa2\xc7\x9a\x84\x7a\x3e\x11\x5a\x85\x26\xac\x35\ +\xdd\x9a\xba\x59\x30\x3c\xd7\xf6\x0d\xbe\xae\x17\x8b\x65\xcb\x13\ +\x99\x35\x6c\x87\xa3\x5a\x40\x5b\x40\xa5\x79\x2e\xb0\x1e\x01\xe5\ +\xe4\x9e\x7d\xd6\xa6\xe9\x69\xca\x8e\x8d\x92\xdd\xd4\x34\xb1\x16\ +\x0c\x93\x3b\x6d\xaa\x9a\x44\x44\x8e\x11\x04\xbc\xd0\x30\xa5\x3a\ +\x2e\x6b\x57\x2f\x58\x43\x9b\x34\xa3\x6d\x8e\xdf\xd1\x42\x40\x6b\ +\x8e\xb5\x40\x57\x2e\xf3\xf9\xdb\x8d\x7c\xbe\x4a\xc2\x4f\xb3\x71\ +\xf4\x6b\x01\x2c\x00\xb5\xf3\x09\x3c\x4f\x66\xa6\xa7\x51\x06\x8c\ +\xd0\xf0\xf0\x30\xff\x78\xf3\xbb\xa1\xf6\x74\xbd\x00\x62\x7a\xcc\ +\xe0\x7b\x0a\xda\x2c\xd1\xba\xc9\x47\xd0\x1a\xe6\xbe\x6d\x0c\xa2\ +\xda\x0a\xf8\xdd\xd0\xc4\x9b\xbb\x52\xad\x71\xfd\x8c\x16\x4a\xe5\ +\xf4\xa9\x1a\x1e\x4c\xaf\xc1\x02\xba\x53\x61\xc9\xf7\x95\x00\x6a\ +\xae\x1b\x0c\x25\x93\x76\x22\x9e\x20\x5d\x1b\x60\x31\x6d\x64\xb5\ +\x00\x22\xd2\x91\x70\xb4\x56\x5b\x7d\x94\x7b\x4d\x46\x2f\x5e\x9b\ +\xb4\xe3\x38\xfa\x0f\x20\xda\xf4\xbb\x02\x1d\xe6\x75\x1c\x50\xdf\ +\xd1\xef\xeb\x00\xb9\xf8\xea\x2b\x0d\xc3\xf3\xfa\xb6\x00\xd1\xfc\ +\x17\x23\x73\xfc\xb6\x67\xdb\x42\xfd\xa8\x69\x68\xcd\x6a\xad\x69\ +\x82\xda\x2c\x79\xac\x89\x30\xb4\x50\x34\xda\xde\xd1\x66\xaf\xef\ +\xe9\x6b\xf4\xfa\x5b\x3c\xcf\xdf\x60\x8d\xab\xf9\x0c\x6a\x83\x81\ +\x81\x01\x95\xeb\x13\xcd\x38\xd4\xd9\x1a\xa5\x62\xc3\x39\x72\x78\ +\xc4\xf5\x7c\xd9\x87\x05\x44\xa9\x10\x07\x23\x67\x78\x11\x3e\x56\ +\x8d\x42\x43\x93\xd3\xd2\xd7\x5a\xd4\xda\xd7\x64\x3b\x03\x9b\x16\ +\x4e\x9b\x26\x75\xd3\x04\xb5\xf6\xf4\xb3\x3a\x23\x74\xb6\x72\x3e\ +\xef\xce\xbe\xf3\x4e\x3d\x7f\xf4\xa8\x53\x3a\x79\xc2\xaf\x9e\x99\ +\x95\x41\xa1\x60\x58\x8d\xba\x3d\x20\x45\x7c\xc8\x8e\xa5\x32\xa9\ +\x64\x32\x96\x88\x0f\xbf\x9e\x5b\xfc\xd7\x3e\xb2\x40\x94\x0a\x4f\ +\x39\xce\x82\x90\x92\x3d\x3b\xd0\x8b\x6e\xd5\xa8\x16\x82\xd6\x1a\ +\x34\xd2\xb5\x68\x5c\x6b\xb4\xa5\xaf\xd6\xc6\xef\x71\x2b\xe6\x72\ +\xce\xe9\x23\x47\xea\x0b\x47\x8e\xb8\x85\xe3\xc7\xfd\xf2\xe9\xd3\ +\xd2\x59\x58\x30\xfc\x62\xd1\x36\x1a\x8d\x44\xdc\xf7\x53\xb6\x69\ +\xc6\xf1\x8d\xb8\x0a\x90\x86\x51\x0b\x4c\xa3\xe4\x1a\x0a\x05\x60\ +\x09\xa2\x9c\x43\xd1\x75\xe8\xe9\xd3\xb3\x4f\xbe\x9d\xcf\x1f\xeb\ +\x57\x00\x3a\x13\x34\xea\xbe\x5f\xf2\xa4\x8c\x6b\x72\xda\x84\x5b\ +\xcd\x55\x43\x13\x5d\xa9\x15\x66\x67\x9d\x1c\xc8\x2d\x1d\x3b\xe6\ +\x2c\x1e\x3d\xea\x57\x67\x67\x79\x97\xb9\x4c\x2e\x21\x44\xca\x84\ +\x2c\x08\xc0\xef\x35\x1c\x29\x4b\x7c\x28\x83\x5a\xa4\x58\xc7\xd6\ +\x9c\xff\x0d\x63\x59\x88\x7c\x01\x9b\xb4\x3c\x14\x73\xd4\x75\xe7\ +\x30\x5f\x67\x57\x65\xe8\xcc\x05\xd4\x80\x02\x50\x0c\xe7\xfb\x17\ +\x80\x0b\xd4\x71\x40\x7a\x6c\x7c\x71\x71\x47\x12\x02\xb0\x59\x83\ +\xb6\xdd\x45\x12\xe4\x1a\xb9\x43\x87\xea\x79\x90\xc3\x5f\x7f\x83\ +\x0a\x6b\x0e\xe4\x44\xa9\x14\x53\x9a\x13\x22\xcd\xe4\x02\x64\xd9\ +\x86\x10\x7e\x43\xca\x4a\x93\x9c\x22\x56\xf1\xfd\x7c\x11\xc4\x16\ +\x7c\x3f\x87\x12\x7c\x1e\x3b\xd1\x32\x13\xea\x20\xc7\xf0\x5b\x10\ +\xb4\xf7\x7a\x1c\x3d\xab\xab\xc0\x1e\x02\x58\xb5\x16\x70\x80\xd2\ +\x7b\x8d\xc6\x4b\x9b\x97\x96\xf6\xbe\xf4\xe0\x83\x8b\x89\x7a\xd5\ +\x3c\x35\x9f\xaf\xe1\x80\x54\x82\x9c\x6d\x36\x1a\xc9\x18\x8a\x5f\ +\xfe\x16\x6f\x64\x80\x3a\xff\x59\xad\x2e\x65\xa1\xe6\xfb\x4b\x15\ +\x68\xac\xe8\x79\x0b\x8b\x38\x66\x3f\x89\xcd\xd5\x82\xeb\x96\x34\ +\xa1\x3e\x88\x31\x04\x20\xcf\x06\xdc\xfa\xfe\xbf\xce\x42\x00\x26\ +\x85\xe6\xb8\x11\x52\xda\x7e\xf3\xe4\xe4\x1f\x6f\x4c\x26\x77\xa7\ +\xd2\x29\xff\x8d\xb9\xdc\x4f\xaa\xa8\x0f\x4a\x40\x1e\xc4\x70\x80\ +\x9a\x3b\xe3\xba\x8b\xdd\xa4\x80\xde\xa4\xb8\x17\x8c\x1e\xe4\x28\ +\x1a\x77\xb7\xd5\xc8\xf6\x2b\x00\x2d\x04\x1b\x5d\x1a\x18\x05\x86\ +\x81\x18\x20\xce\x46\x5b\x6b\xd4\x18\x7d\x30\xc4\x3e\x78\x01\x18\ +\xe8\x2c\x26\xde\x84\xa1\x6b\x84\x5f\x2e\x62\xfd\xb7\xff\x05\xc7\ +\xfd\xe7\xdb\x23\x5d\x13\x38\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ +\x42\x60\x82\ +\x00\x00\x20\x1c\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\ +\x1b\xaf\x01\x5e\x1a\x91\x1c\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd7\x08\x12\x14\x39\x28\x29\x91\x7c\x0e\x00\x00\x1f\xa9\x49\x44\ +\x41\x54\x78\xda\xe5\x9b\x09\xb0\x5c\x57\x99\xdf\xff\xb7\xf7\xbd\ +\x5f\xbf\xfd\xe9\xe9\x3d\x49\xd6\x2e\xd9\xda\x2c\x79\xc1\x78\xc0\ +\x76\x42\x81\xc1\x03\x64\x0c\x13\x1c\x42\x65\x02\x4e\xb1\x84\x78\ +\x5c\xc5\x14\x55\x49\x2a\x54\x48\x05\x2a\x03\xc3\x14\x03\x55\x33\ +\x13\x43\x2a\xae\x21\x9e\x01\x26\x05\x43\x80\xd8\xb2\x0d\x78\xc3\ +\x96\x25\x6b\xb1\xf5\xb4\x3d\x6b\x7d\xd2\xdb\xb7\xde\xb7\xdb\xb7\ +\xf3\x3b\xa7\xbb\x35\x12\x1a\x0a\x18\xb0\x81\x4a\xcb\x9f\xcf\xed\ +\xbb\x9c\x77\xbe\xed\xff\x2d\xf7\xb4\xfe\x7f\xff\x38\xaf\xe7\xdf\ +\x59\xb3\x66\x8d\xaf\xab\xab\xcb\xd7\xdb\xdb\x6b\x29\x91\x48\x38\ +\xd5\x6a\x55\xb9\x5c\xce\x5b\x58\x58\xf0\x96\x97\x97\xbd\x0b\x17\ +\x2e\x78\xd9\x6c\xb6\x29\x09\xfa\x2d\x16\x40\x24\x12\xf1\x6d\xdd\ +\xba\x35\xb0\x7b\xf7\xee\xf8\xdd\x77\xdf\xbd\xb5\xaf\xaf\x6f\x67\ +\x34\x1a\x5d\xcf\xf9\x75\x7e\xbf\xbf\xd7\x71\x9c\x04\x14\x6f\xf2\ +\x69\x34\x1a\x05\x43\x08\x63\xa6\x5c\x2e\x9f\x2a\x16\x8b\xe3\xd3\ +\xd3\xd3\xfb\xbf\xfd\xed\x6f\x9f\x3c\x70\xe0\x40\x0d\xa1\x34\x8c\ +\x40\x7e\x1b\x04\xe0\x6c\xda\xb4\x29\x74\xef\xbd\xf7\xf6\xbe\xf5\ +\xad\x6f\xbd\x07\x2d\xbf\x3d\x16\x8b\xdd\x1c\x0e\x87\xfb\x60\x5a\ +\xf0\x2a\xd7\x75\x2d\xc1\xb0\x3c\xcf\xb3\x0f\xf9\x7c\x3e\x4b\xc1\ +\x60\x50\xdc\x67\xcf\x57\x2a\x15\x15\x0a\x85\x49\xac\xe1\xd9\xa9\ +\xa9\xa9\x6f\x3d\xca\xe7\x5b\xdf\xfa\x56\xde\x58\xca\xaf\x52\x18\ +\xce\xaf\x4a\xdb\xd7\x5f\x7f\x7d\xf4\x13\x9f\xf8\xc4\xae\x6d\xdb\ +\xb6\x7d\x34\x9d\x4e\xdf\x0d\xd3\x29\xc3\x08\x1a\x15\x1a\x55\xa9\ +\x54\x52\x15\xa6\x6a\xb5\x9a\xdc\x7a\xbd\x25\x00\x08\xa1\x40\xad\ +\x95\xc0\xbc\x15\x42\x38\x1a\x55\x2a\x95\xb2\x14\xe5\xb8\xce\xfd\ +\x8b\x8b\x8b\xf3\x33\x33\x33\xff\x7b\x6c\x6c\xec\xcf\x3e\xf7\xb9\ +\xcf\x8d\x4f\x4e\x4e\xba\x46\x10\xbf\x6e\x01\x38\x1b\x37\x6e\x8c\ +\x7e\xfa\xd3\x9f\xbe\x79\xc7\x8e\x1d\x7f\x94\xc9\x64\xde\xe2\xe7\ +\x03\xd3\xc6\xaf\x55\x2c\x14\x54\xe1\xd8\x50\x15\x2a\x23\x04\xc8\ +\x0a\xa2\x8e\x20\x1a\x58\x82\xe1\xde\xe7\x38\xf2\x07\x02\x0a\x05\ +\x43\x0a\x86\x42\x0a\x84\x43\xf2\x9b\x63\xc6\x68\x3c\xae\x9e\xbe\ +\x3e\xf5\x41\x21\xae\x2d\x2d\x2d\xd5\x2f\x5d\xba\xf4\xcd\x23\x47\ +\x8e\x7c\x96\xbf\x7b\x22\x9f\xcf\xbb\xbf\x16\x01\xa0\x9d\xe0\x87\ +\x3f\xfc\xe1\x91\xf7\xbf\xff\xfd\xff\x7e\x68\x68\xe8\x03\x98\x70\ +\x10\x4d\x5b\xc6\x4b\x30\x6e\x28\xbb\xbc\xac\x85\xb9\x79\xcd\xce\ +\xcd\x6a\x6e\x76\x56\x4b\x8b\x4b\xca\xe6\xb2\xd6\x1a\x3a\x02\xf0\ +\x49\x0a\xfa\xfc\x8a\x84\x82\x4a\x18\xcd\x27\x12\xea\x4a\xa7\xd5\ +\x95\xe9\x56\x2a\xd3\xa5\x68\x2a\xad\x50\x22\xae\x70\x2c\xa6\x6e\ +\x84\x30\xbc\x72\xa5\x62\x1c\xcf\xce\xce\x96\xcf\x9c\x39\xf3\xc5\ +\x6f\x7c\xe3\x1b\x9f\xfb\xfa\xd7\xbf\xbe\x2c\xc9\x7b\xbd\x04\xe0\ +\x8c\x8e\x8e\xc6\xbe\xf4\xa5\x2f\xbd\x63\xcf\x9e\x3d\x7f\x8a\x89\ +\x0e\x5d\xd6\x78\x3e\xaf\x1c\x4c\x4f\x4f\x4d\xe9\xfc\xb9\xf3\x3a\ +\x73\xf6\x8c\x26\x26\x26\x34\x03\xf3\xf8\x72\x87\x71\x6b\xfa\xc2\ +\x3d\x1c\xa3\x7d\x49\x01\xc7\xa7\x00\x18\x10\x0a\xf8\x15\x45\xcb\ +\x89\x48\x54\x19\xcc\xbf\xaf\xa7\x5b\x83\x83\x83\xea\x5f\xb1\x42\ +\xe9\x81\x01\x45\x33\x19\x85\xcd\x79\xce\xad\x5a\xb5\x4a\xc2\x72\ +\xce\x9d\x3b\xf7\xea\xc1\x83\x07\xff\xf5\x27\x3f\xf9\xc9\xe7\x5d\ +\x3e\xaf\xb5\x00\x7c\xb7\xdc\x72\x4b\xf7\x97\xbf\xfc\xe5\xff\x40\ +\x48\xfb\xb7\x66\xed\x98\xa0\x0a\x50\x76\x71\x51\x13\x17\x2e\xe8\ +\xc4\xf1\x13\x1a\x3b\x7e\x4c\x68\xc7\x32\x5e\x2e\x96\xd4\xdb\xdb\ +\xa3\x95\x2b\x86\xd5\xc7\xd8\xdd\xd5\xa5\x58\x24\xa2\x30\xbe\xde\ +\x6c\x78\x06\x0f\xb8\xa7\xa0\x02\x02\x5c\x5a\x58\xd0\xfc\xf4\x0c\ +\x34\x8d\x60\x9a\x8a\xe0\x06\x29\x5c\xa0\xbf\xa7\x47\x2b\x56\x0e\ +\x6b\xc5\xea\xd5\xca\x8c\x8c\x2a\xda\xdb\xab\x38\xc2\x19\xe5\x7b\ +\x5f\x7f\xbf\xc0\x86\x2a\xd8\xf0\x1f\x1f\x7c\xf0\xc1\x2f\xe3\x22\ +\x95\xd7\x4a\x00\xfe\xb7\xbf\xfd\xed\x2b\x3e\xff\xf9\xcf\xff\x05\ +\x5a\xb9\x1b\x60\xb2\x8c\xe7\xd0\xec\xe4\xc5\x8b\x3a\xfa\xca\x2b\ +\x3a\xf0\xd2\x4b\x3a\x7e\xf2\xa4\x66\xa6\xa6\xf1\xd9\x5e\x6d\xdb\ +\xba\x55\x9b\x37\x6d\x52\x22\x1c\x91\xaf\xe9\xc9\xef\xb5\xc8\x31\ +\x04\xf3\x62\x84\xac\x45\x34\x0c\x71\xec\x72\x5f\xb5\x5a\xb3\x73\ +\x9e\x3e\x76\x4c\x0b\x08\xd1\x80\x63\x12\xb3\xef\x87\xf1\x95\x30\ +\xbd\x62\xfd\x7a\xa5\x56\x8d\x2a\xc2\xf7\x01\x5c\x62\xf5\x75\xd7\ +\x59\xa0\x45\x08\x5f\xf9\xd4\xa7\x3e\xf5\xe0\xc9\x93\x27\x8b\x3f\ +\x2f\x40\xfa\x7f\x5e\xe6\x3f\xf0\x81\x0f\xac\xf9\xcc\x67\x3e\xf3\ +\x48\x7f\x7f\xff\x9d\x26\x44\xe5\xdb\x1a\x3b\x31\x36\xa6\x1f\xfe\ +\xf0\x87\x7a\xe2\x07\x3f\xd0\xcb\x2f\xbf\xac\x01\x16\xf5\xce\x77\ +\xdc\xa3\xbb\x6e\xbf\x5d\xd7\xa1\xf5\x0c\xbe\x9d\xc4\x54\xd3\x6a\ +\x51\xaa\x43\x9c\x4b\x4a\x4a\x74\x88\x73\x71\xc6\x18\x6e\x11\xe7\ +\x5a\x6f\x32\xa5\x75\x1b\xd6\x69\x04\x06\x6b\x08\xb9\xb0\xb0\xa8\ +\x12\x02\x2f\xf2\x37\x6b\x4b\x4b\xf2\x55\xaa\x0a\x20\x98\x4a\xdd\ +\x55\xae\x84\x95\x81\x0f\x03\x03\x03\xbb\x6e\xb8\xe1\x86\xad\x58\ +\xc4\x63\xe7\xcf\x9f\xaf\xfe\xaa\x04\xe0\xbf\xf3\xce\x3b\x57\x7e\ +\xf6\xb3\x9f\xfd\x5f\xc4\xf5\x5b\x0d\x8a\x1b\xb3\x9f\xc3\x4c\x5f\ +\xda\x7f\x40\x8f\x3d\xbe\x57\xcf\x3e\xfb\xac\x5c\x7c\xfb\xbd\xbf\ +\xf7\x7b\xba\xe3\x8d\x6f\xd4\x20\xc0\x95\xc2\xa7\xd3\x4e\x87\xe9\ +\x0e\xb3\x0e\x0c\xc2\xa4\xa4\xa8\x31\xf1\x26\x24\x99\x11\xe2\x9c\ +\x19\xa1\x98\xbd\xc6\x79\xac\x22\x01\x26\x5c\xb7\x6e\xbd\xba\x01\ +\xc4\xfc\xf4\x94\xaa\x68\xba\x9c\xcb\xab\xba\xbc\x24\x87\xb5\x84\ +\x88\x1e\x0d\x9f\xa3\x3c\xc7\x19\x5c\x05\x21\x6c\x02\xa3\x36\xee\ +\xdb\xb7\xef\xbb\xe0\x52\xfd\x97\x15\x80\x8f\x30\xd7\xff\xd0\x43\ +\x0f\x7d\x85\x89\xef\x00\xc4\xac\xd9\x4f\x5d\xba\xa4\xe7\x9f\x7f\ +\x5e\xff\xf7\xb1\x47\x75\xe8\xe0\x41\xed\xda\xb1\x43\xff\xfc\xde\ +\x7b\xb5\xb2\xa7\x57\xe9\x0e\xe3\x57\x68\x38\x0a\x85\x61\x0c\xaf\ +\x57\x00\xc6\x02\x8c\xfe\xa6\x20\x46\xaf\x75\xec\x33\xc7\xf6\xba\ +\x21\x29\xc8\x18\x16\xe4\xf1\x9c\x5b\x07\x3b\x12\x1a\xc1\x22\xaa\ +\x33\x73\xaa\xb1\x86\x5a\x89\xd0\x4a\x44\xb1\x42\xf0\x33\x23\x96\ +\x96\x03\x8c\xbb\x00\x4a\x42\xe6\x26\xb2\xd0\x81\xef\x7f\xff\xfb\ +\x8f\xe3\x5a\xee\x3f\x56\x00\x0e\x79\x7b\xea\xe1\x87\x1f\xfe\xcf\ +\x6b\xd7\xae\xbd\x8f\x58\x6e\x32\x33\x4d\xc3\xfc\x8f\x9f\x7b\x4e\ +\x8f\xed\xdd\xab\xb3\xa7\x4f\xeb\xdd\xef\x7c\xa7\x6e\xdb\xbd\x47\ +\x5d\x80\x5a\x86\x85\x74\x18\x8f\x59\xa6\x61\xb6\xcd\xa4\x45\x7c\ +\x33\x1a\xbf\x6f\x42\x1c\x37\x6d\x24\x68\x8d\x6a\x9f\x77\xec\xbd\ +\x8c\x1d\xe1\x58\x30\x6c\x32\x59\xdd\x5a\xcf\xf0\x9a\x0d\x6a\x10\ +\x4e\xdd\x42\x8e\x30\x5a\x53\x3d\x57\x40\x08\x65\x2c\x21\x88\xa4\ +\x23\x2a\xd6\x6a\xd6\x1d\x58\xfb\x2e\x92\xb3\x65\x84\xb0\x5f\xcc\ +\xfe\x0b\x0b\x80\xb8\x1e\xf9\xc2\x17\xbe\x70\xef\x6d\xb7\xdd\xf6\ +\x5f\x00\x3c\x1f\xcc\x5b\xb3\x7f\xe1\xf9\x17\xb4\xf7\xf1\xc7\x75\ +\x11\xc4\xbf\xef\xf7\x7f\x5f\x1b\x09\x47\x5d\xf8\x62\x06\xcd\xe3\ +\xd7\x76\x91\x21\x18\x68\x69\xb5\xcd\x58\x9b\xa9\xa6\x65\x9a\xb1\ +\x7d\xac\xf6\xb1\xda\xc7\xba\xea\xd8\x8e\xac\xc3\x53\x20\x0d\x40\ +\x3a\x9e\x42\x45\xc9\x29\xd7\x35\xb4\xf6\x3a\x35\x96\xc1\x02\x37\ +\x27\xa7\xee\x22\x84\xa2\xfc\x60\x42\x08\xb0\x6d\x1a\x21\x10\x0d\ +\x07\x08\x95\xe4\x0b\xbf\x43\x8e\xf2\x14\x2e\x3a\x21\x66\xfc\x45\ +\x04\xe0\xa7\x80\xd9\xf4\x91\x8f\x7c\xe4\xaf\x40\xe0\xa4\xc9\xe8\ +\x96\x09\x73\x07\x0f\x1c\x40\xf3\x8f\xeb\x3c\x21\xce\x30\xbf\x66\ +\x60\x00\xcd\xfb\xd4\xed\xf7\x29\xe9\x39\xd6\x7f\x03\x2d\x2d\x42\ +\xad\x58\xaf\x0e\xa3\x57\x33\x79\x95\x15\xa8\x6d\x05\x96\x38\xee\ +\x8c\x1c\x28\x18\xa7\x2e\xe8\x8a\x28\x56\x73\xe5\xe5\x4c\xf4\x80\ +\x88\x40\xfd\x6b\x56\x03\x86\x17\xb9\xa7\x2a\xaf\x84\x80\x8a\x65\ +\xf9\x39\x1f\x8a\xc7\xd4\x20\xcc\xba\x92\x86\x56\xac\x08\x90\xa7\ +\xdc\x76\xe2\xc4\x89\x47\x00\xc6\xf2\xcf\x2d\x00\x24\xd7\xf5\xc5\ +\x2f\x7e\xf1\xb3\x84\xbb\x5b\x08\x2f\x36\xc1\x39\x41\x48\x7a\xfc\ +\x89\x27\x34\x06\xd2\xbf\xfb\x77\xef\xd1\xda\xa1\x15\xea\x86\xf9\ +\x54\x44\xea\x92\x8f\xe4\x25\x2e\x11\xbe\x3a\xcc\x59\x26\x1a\x10\ +\x82\x40\xcb\x57\x6a\xfe\xaa\x31\x68\xb4\xe6\xba\xc4\xf7\x11\xad\ +\xba\x79\x8f\xfa\xd6\xae\x55\x1f\xbe\xde\x47\xa8\xeb\xdf\xb8\x56\ +\xf1\x35\xbd\x0a\xf7\xf4\x6b\xd5\x75\x5b\xd4\xbf\xe1\x06\x0d\x6e\ +\xde\xac\x9e\xd1\x51\x2d\x9c\x1a\x57\xdf\x48\x9f\x16\x16\x27\x14\ +\xab\x53\x64\x95\x5d\x35\x89\x4e\x01\x39\x0a\xa6\x92\xaa\x01\x9e\ +\x41\x04\xd1\xc3\x07\x2b\xf0\xbe\xf7\xbd\xef\x3d\x2d\xa9\x71\x8d\ +\xa5\xeb\xda\x4f\xf0\x81\x07\x1e\x78\x13\x7e\xff\x1e\xc2\x9d\xcd\ +\xe3\xa7\x88\xc9\xa0\xaa\x8e\x1e\x79\x59\xb7\xec\xd9\xad\x75\xc3\ +\xc3\x4a\x4b\x84\x38\xc1\x78\x40\x41\x98\x1b\x20\x16\xa7\x07\xfb\ +\x5b\x0c\x37\x5a\xc4\xf1\x15\x82\xb8\x96\x12\x84\xcc\x55\x37\xed\ +\x91\x83\xfb\xa8\x69\xdc\xe4\xea\xcc\xc4\xf1\xd7\x55\x27\x19\x8a\ +\x45\xc3\xdc\x1f\x30\x67\x3a\xff\xc9\x2b\x57\x14\x4b\x74\x6b\x64\ +\xeb\xf5\x44\x08\xbf\xe2\xc2\x32\x4c\x74\xc0\x3a\x6b\x27\x4e\xca\ +\x9b\x5f\xd0\x0c\x19\x29\x25\xb7\xe0\xe5\x81\x0f\x7e\xf0\x83\x9b\ +\xcd\x04\x3f\x4b\x00\x0e\xda\xcf\x50\xca\xfe\x21\x26\x18\xb0\xf1\ +\x9e\xd4\x76\xec\xe8\x98\x8e\x1c\x3a\xa4\x34\xfe\x75\xeb\xce\x5d\ +\x4a\x35\x05\xd8\x11\xaf\xc3\x3e\x28\x24\xc7\x6d\x58\x06\x52\x83\ +\x43\x56\x83\xfc\x55\xc3\x34\x74\x25\xf3\x8d\xd6\xb1\x71\x11\x09\ +\x0d\xaf\xd3\x10\x89\x12\xcc\x9b\x73\x96\x3c\xa8\xf3\x8c\xb8\xbf\ +\xd1\x2c\x2b\x90\xea\x95\xcf\x0a\x51\x10\xff\xb3\xd7\x20\xc6\xfa\ +\x72\x4e\xab\x6f\xbc\x49\xc9\xe1\x5e\x25\x03\xb8\x20\xcf\x08\x57\ +\x75\x4f\x9f\x55\x1d\x41\xd4\xb3\x39\xcd\xce\xcc\xa8\xbb\xbb\x3b\ +\x7a\xeb\xad\xb7\xfe\x91\xa4\xf0\xcf\x12\x40\xe0\x43\x1f\xfa\xd0\ +\x1b\x30\x99\xdb\x0d\xf3\xb5\x72\x19\xb0\x9b\xd0\x91\xc3\x87\x34\ +\x4b\x4e\xff\x4f\xde\x7c\x87\x92\x86\x51\x28\x0e\x85\x78\x9a\xe5\ +\x4b\x56\xe3\xae\x65\x32\x92\x4c\x6a\x68\xcb\x66\x05\x11\x56\xc7\ +\x0a\x3a\xcc\x73\xc0\xf9\x80\x86\x77\x6e\x53\x7a\x68\xa8\xe3\x16\ +\x1d\x21\x5d\x1e\xbd\xf6\x33\x35\xaf\xa6\x68\xba\x5b\xf8\xc8\x35\ +\x56\x64\x05\x56\xab\x2a\x46\x6a\xdd\x7b\xfd\x76\xd2\xeb\x16\x77\ +\x81\x5a\x5d\x4d\xc0\xba\x81\x00\x3c\xb2\xc8\x02\x0a\x34\x25\xf8\ +\xca\x95\x2b\xdf\x73\xdf\x7d\xf7\x6d\x90\xe4\xfc\x54\x01\x50\x8b\ +\x27\xdf\xf6\xb6\xb7\xdd\x4f\x1d\xef\x33\x0f\xe5\xc9\xc0\xc6\x4f\ +\x9e\xd0\x19\xd2\xdb\x35\xc3\x2b\xb5\xb2\x3b\xa3\x64\x87\x79\x16\ +\xe4\x73\x01\xa6\x96\x6a\x34\x73\xfc\x24\x7e\x58\xb1\x4c\x53\xda\ +\xe2\xab\xa4\xc0\x7d\xbd\x57\xb9\x43\x72\x20\xad\xe4\x86\x21\x85\ +\x13\x21\xfb\xbd\x01\x68\x4d\x1d\x79\x45\x2e\xc2\xbe\xc6\x6d\x9a\ +\x8c\x12\xf7\xa6\x25\xe6\x6b\xaa\x7e\xf9\x9a\xd7\x06\x53\x5f\x90\ +\x68\x43\xe1\xd4\xbd\x79\xbb\xc2\x71\x8a\x29\x2c\x2f\x64\xc2\x2d\ +\xb9\x81\x26\xa7\xe4\x52\x8c\x09\x25\x2e\x92\x3d\xd2\xa3\x08\xdd\ +\x7e\xfb\xed\x1f\x35\x6c\xfe\x14\x01\xd8\xa4\x67\xd5\xf0\xf0\xf0\ +\x9b\x6d\xd3\x02\x9a\x45\x92\xe3\xc7\x8f\x2b\x37\x33\xab\x3d\xdb\ +\xb7\x2b\xe1\xb5\x98\x0f\x7b\x6d\x34\xae\xd4\x44\x1b\x0b\x33\x6e\ +\xa8\x92\x5d\xd6\xa5\x23\x47\x54\x5e\x5a\x6a\x23\xbb\xd4\x43\xde\ +\xde\x0b\x36\x38\x8e\x0f\xd7\x58\xad\xae\xf5\x83\x72\x9d\x96\x36\ +\x2b\xa4\xd2\xe7\x5f\x78\x41\x59\xf2\x8a\x2b\x35\xeb\x59\x17\x60\ +\x6c\x0b\xc3\x4f\x7c\x0f\xf6\xad\x92\x17\xc8\x09\x6e\x38\x57\x63\ +\xee\x9a\x82\x31\x4f\x91\x95\x09\xa5\x46\x37\x2a\x3e\x30\xc2\xf7\ +\xa0\x65\xc6\x2f\x59\xc5\x80\x8e\x6a\x5e\xbc\x64\xb1\xa0\x8a\x40\ +\x5c\xce\x01\xea\xef\x06\x13\xd3\x3f\x4d\x00\xa1\xfb\xef\xbf\xff\ +\x1e\xc2\x5e\xcc\xdc\x5c\x06\xfd\x2f\x9e\x3b\xa7\x4b\x50\x17\x68\ +\xba\xb2\xaf\xcf\x32\x1f\x31\xc9\x89\xf5\x41\x34\x58\xc2\x02\xaa\ +\x2c\xca\x6f\x17\x6b\x35\x39\x05\x5e\x2c\x9d\xbf\x60\x90\xdd\x32\ +\x11\x27\x3d\x1d\xdd\xbd\x4b\xc9\x15\x5d\x2a\xe3\xef\x31\xc2\xd4\ +\xf2\xc4\xa4\x2e\xec\xdb\xaf\x6a\xbe\xd0\x36\xfd\x46\x27\x62\x40\ +\xae\x25\xbe\x5b\x6c\xa9\x15\x73\xea\x1e\xdd\x2c\x67\x78\xbd\x6a\ +\xf1\xaa\xea\xe1\x05\x79\xf1\xac\xba\x6e\x5a\xa3\xfe\x37\xbf\x13\ +\xdc\x59\x05\x58\xc2\x38\x40\xe9\x48\x90\xcd\x2a\xad\xe6\x1d\x98\ +\xaf\x9d\x3f\x2f\x1f\xf3\x93\xbe\x1b\x2b\xe8\xff\xd8\xc7\x3e\xf6\ +\x96\x2b\xf9\x0e\x74\x0e\x4c\xbc\x5f\xb7\x6e\xdd\x3f\xb5\xfd\x3a\ +\xc8\x80\xdf\xc4\xd9\x73\xca\xcf\xcd\x69\x23\x05\x89\x61\x3e\x6a\ +\xd2\x52\x99\x2c\xcd\x11\xff\xc1\xb0\xf1\x39\x4f\x35\xbf\x83\x96\ +\x1b\x62\xdd\x36\x7e\x2f\xf2\x5c\x79\x69\x59\x7d\xeb\xd6\xca\x47\ +\x8d\x2f\x01\x58\x2a\x29\xda\xb7\x5a\x0b\x2f\x3d\xa5\xec\x89\x39\ +\xee\xbd\x3a\x3a\x74\xa2\x87\xeb\x95\xe4\x73\x4c\x1e\x11\x56\x80\ +\x46\x49\x61\xfa\xac\x62\x3d\x03\xea\xb9\xee\x06\x35\x86\xd7\xa9\ +\x5e\x29\xda\x7b\xd3\x3c\xeb\x0f\x84\x54\x2f\xcd\x6b\xf9\xcc\x01\ +\xf9\x38\xbe\xaa\xbc\x75\x11\x22\x19\x63\x63\x72\x52\x3e\x5c\xb3\ +\x1a\x29\x8b\x2e\xb4\x46\x46\x46\xee\x91\xf4\xb7\x50\xf5\x4a\x01\ +\xf8\xe8\xeb\xf5\x51\xec\x6c\x43\x00\xb6\x46\x5f\x9a\x9f\xd7\x0c\ +\xc0\xe7\x15\x8a\x1a\x1d\x18\x84\x79\x4f\xe0\x7d\x0b\xf4\xd4\x12\ +\x00\xa7\x14\x2a\x4b\x95\x4c\x42\x3d\x23\x61\x92\x91\x90\xb8\x6c\ +\x85\x20\xa8\x00\x08\x25\xfa\xfb\x59\x5c\x55\x0d\xe2\x7d\x94\x92\ +\x36\x68\xd2\x65\xaa\x44\x0b\x1d\xed\x4c\x11\x8b\x69\x9b\xbd\xcb\ +\xbc\xf4\x06\xca\x05\x25\x82\x43\x6a\x54\x29\x74\x66\x2f\xa8\xd0\ +\x33\xc8\x3c\x2b\x69\x93\x05\x99\x2b\x6d\x05\x40\x6f\x0d\x21\x56\ +\x55\xbc\xf4\x8c\xca\xf3\x17\x98\x2c\x70\x75\xaa\x67\xc0\xb5\x84\ +\x30\x97\xb3\xaa\xd3\x91\x0a\x66\xba\x2c\x18\x92\x22\xdf\x2a\x29\ +\x7e\x8d\x00\xde\xf7\xbe\xf7\xed\xa4\xe7\x96\x32\x75\x7e\x1d\xbf\ +\x5e\x64\xf1\xb9\xf9\x39\x85\x78\xa8\x2f\x95\xb4\xa6\x1f\xb8\x42\ +\xfb\x12\xa3\x44\x4e\x8e\x65\xf4\xd3\xcc\x1c\x1a\x54\xaa\xe6\x80\ +\xcc\x2d\x21\x48\x56\x10\x2d\xcd\x3a\x15\x85\x32\xd7\x59\xbb\x4b\ +\x76\xf7\x90\xae\x26\x61\xfc\xef\x05\xb5\x6c\x05\xd0\x10\x12\xc0\ +\xd7\xc1\x1f\xa7\x2e\xa9\xc6\x5c\x01\x42\x20\x45\xce\xd8\x8f\xd1\ +\xf4\x0d\x4a\xaf\x24\xc4\xca\x69\x27\x57\x2e\x65\xf2\x69\x15\x27\ +\x9e\x43\x18\x01\x6b\x8d\x57\x49\x80\x63\x38\x96\x43\x16\x5b\xa3\ +\x3f\x11\xdb\xb8\xd1\xe2\x55\x32\x99\x1c\x7d\xef\x7b\xdf\xbb\x96\ +\x56\xda\x92\xb9\xab\xe3\x0b\xc1\xcd\x9b\x37\xef\x68\x58\xe0\xf1\ +\x6c\x03\x73\x79\x76\x4e\x55\xe2\x68\x8c\xef\x69\x90\x36\xc8\x1f\ +\xf5\x75\x90\xda\x35\xe4\x5a\x72\x2b\x1c\x67\xb3\x30\x38\x48\xd2\ +\xe2\x5a\xc1\xe2\xfb\x68\xc7\xf8\xb1\xa1\xba\xdc\x26\x85\x4c\x77\ +\x9f\xd5\x78\xc7\xd4\xbd\xcb\x73\xb9\x1d\x74\x87\x60\x3c\x88\x30\ +\x09\x7d\xcc\x63\xae\x63\x05\x7e\xf9\xf2\x21\x95\x4f\x1d\xd0\xc2\ +\xab\x87\x39\xc7\xf9\xa6\xc1\x9e\x25\x15\xce\x3f\xa6\xc2\x1c\xbd\ +\x01\x04\x5f\xcf\x5f\x5b\xf9\xda\x39\xc1\x19\x17\x6b\x0e\x4a\x82\ +\x3f\xdb\x7e\xa7\x48\xba\xd1\x28\xfd\x4a\x0b\x08\x63\x1a\xd7\x99\ +\xf0\x02\x59\xd4\x2c\x90\x50\x08\x41\x24\xda\xa5\x6c\x80\xf3\x72\ +\x98\x54\x90\x73\xd9\xd3\x6c\xde\xdf\x58\x32\xa5\xe9\x9c\xa2\x83\ +\x6b\x94\x3d\xf4\x8c\x2a\x97\x6a\x1d\x3c\xb0\xc5\x4c\x78\x75\x4c\ +\x99\x70\x54\x24\x16\x5a\x9a\x9c\xe0\xba\x07\xe3\xcd\xcb\xe9\xb0\ +\x5b\xad\xd1\xe8\x98\x57\xe0\x62\x45\xd1\xeb\xd7\x60\xe6\x61\x2d\ +\x1e\x3b\xa2\xca\x82\x1f\x86\x5b\xf7\xf8\xfc\x35\x85\xce\x9d\x56\ +\xa3\x56\x51\xd7\xaa\xf5\x98\xfe\xb3\xaa\xcc\x8f\xa9\xb4\x80\x5b\ +\x16\xa5\x7a\xe1\xda\xfe\x07\xcc\xd8\xf4\x98\x57\x4e\x56\x79\x00\ +\x9d\x3d\x0d\x18\xae\x6f\x0b\xa0\x61\x05\x40\xba\x18\xe5\xe4\x68\ +\x5b\x00\x36\x01\x2a\xe7\x73\xf2\xd7\xea\xb6\x3b\x13\x70\xeb\x98\ +\x62\xf8\x1f\x2c\xa8\x3c\xa8\x56\xc0\xdf\x27\x4e\xab\x67\xe3\x0e\ +\xe5\x87\x46\xc9\xc2\x9e\x57\x79\xc1\x33\x8b\x87\x19\x68\x68\xc0\ +\x40\x33\xa1\x2a\x8e\x35\xc0\x2c\x9d\xe2\x46\xa5\x53\x00\x59\x37\ +\xc1\xda\x96\x54\xca\xe4\x94\x19\xb8\x9d\x67\x69\xa2\x5e\xbc\xa0\ +\xfc\xc5\xc6\x55\x40\x19\x8c\x73\x5f\xed\xbb\xf2\x6e\xbd\x59\x95\ +\xc9\xa7\x54\x5e\xac\xa9\x59\x8c\xaa\x3c\x57\x27\xa7\xa8\xf2\xb7\ +\xac\x17\x5d\xbd\x4c\x5c\x5a\x46\x08\xf4\x26\xa9\x8c\xac\x52\x00\ +\xc3\x75\x6d\xe5\xd7\x6d\x82\xcd\xc9\x08\xfe\xdf\xdd\xa9\xc4\xea\ +\xa0\xa6\xcb\x03\x41\xd3\x91\x09\x88\x73\x39\x72\x11\x34\x68\x7c\ +\xfc\x27\xd2\x69\x66\xc4\x4c\x9b\xf4\xec\x12\xe4\xe7\x45\x0d\x6c\ +\xd8\xae\xd2\xf8\x51\x98\x58\xb4\x02\x18\xde\xb3\x4b\x4e\xb7\x2b\ +\x07\x21\x86\x58\x40\x64\xc5\x88\x4a\xaf\xce\x6a\x74\xcf\x1b\x25\ +\xaf\x85\x01\x67\x9e\x79\x56\x7e\xea\xfd\x08\x7d\xbe\xee\x61\x22\ +\x45\x31\xcf\xf5\x9b\x55\xdf\x1c\x63\x0e\x33\x7f\x15\x4d\x2f\x68\ +\xe1\xf4\xb8\x8a\x67\xa6\x34\xe1\xfe\x9d\x32\x83\x39\x84\x44\xb4\ +\x28\x86\x55\x99\xcb\x2b\x10\xa9\xcb\x09\xb3\xf6\x25\x3f\x56\x72\ +\x79\x6d\xd6\x0d\x7d\x75\x97\x90\x5d\xc4\x00\xfa\xad\x1b\xc0\x6b\ +\x7f\xc7\xfa\x2f\x63\x00\xbe\x11\x45\x00\xd6\x02\xdc\x3a\x92\x05\ +\x40\xa8\xeb\x61\xcc\x91\x8b\xf9\x05\x42\x36\x5e\x5f\x4d\xae\x6b\ +\x47\xaf\x8e\x58\x08\x87\x15\x6a\xf4\x10\x5a\x0e\x0f\x0e\x81\xd8\ +\xd6\xcf\x6d\xb8\x13\x0c\xd4\x8b\x59\xeb\x42\x19\xac\x24\x3c\x14\ +\x15\x27\x3b\x58\x80\xe6\x5c\xc5\x46\x42\xea\xd9\x76\x8b\xfc\xa1\ +\x20\xf3\x56\xed\x73\x16\x6b\xcc\x75\x4c\x37\xde\xdf\xa7\x91\x9b\ +\x6e\x26\x5b\xcd\xc0\x64\x5e\xf9\x19\xae\xe5\xfd\x58\x4e\x90\x28\ +\xb0\x48\x32\x86\x9b\x76\xb9\x8a\x64\x58\xcb\x95\x3a\x6a\x97\xe6\ +\x5e\x0d\x1e\x02\x81\x4e\xc8\x8f\x9b\xe1\x2a\x01\x70\x32\x72\xb9\ +\x16\x77\x5b\x80\x17\x96\x14\x89\xf9\x31\xdd\x28\x8b\xd4\x15\x49\ +\xcb\xb5\x82\xf0\x4c\x49\x5a\x5a\xb6\xb1\x21\xdc\x3d\x80\x46\xdb\ +\x80\xe7\x1a\xe1\x34\x31\xfb\x49\xc1\x15\x89\xcb\x0a\x65\x76\xdd\ +\x22\x5f\x2c\xcb\x12\x4a\x24\x31\x45\x25\x56\x39\xca\xec\xbe\x55\ +\x99\xd5\x6b\xdb\x00\x57\x62\xc1\xb8\xa3\x4d\xa6\xda\x64\xc1\xd2\ +\x53\xff\xa6\x75\xd6\x2a\x4a\x53\x92\x9b\x8d\x20\xd8\xba\xaa\x26\ +\xde\x57\x1d\x18\xa4\x14\xee\x62\xed\xc1\xab\x2c\x14\x62\xe4\x79\ +\x9a\xa8\x1d\x01\xc4\x7e\x12\x04\x1d\x4c\xc3\xf1\x0c\x83\xf6\x4a\ +\xd3\x5e\x08\x3a\x52\x18\xb2\xe8\x0f\x98\xd9\x30\xe5\x75\x26\xbe\ +\x3a\xe6\x34\xeb\x46\xca\x06\xa1\xeb\x36\x7d\xc5\x96\xda\xd6\x01\ +\x92\x97\x7d\xf2\xa6\xcf\xab\xb1\x9a\x50\x18\x0a\xab\xff\x86\xdd\ +\xca\x12\x59\x34\x77\xc6\x3c\x49\x65\x78\x17\xf8\xb1\x0d\x2d\x8a\ +\x79\xd0\x7e\x39\xaf\x06\x02\x38\xfd\xa3\xa7\x2c\xd3\xe1\x78\x5c\ +\x83\x37\x5c\x8f\x55\x31\xab\x93\xc5\x22\x82\x6a\xe4\x04\x78\x86\ +\x55\x26\x5a\x79\xf8\x39\x38\x06\xcc\x98\x05\x7b\xf8\x7a\x93\xe7\ +\x9d\x2b\x85\x60\xad\x08\x2b\xef\x84\xe7\x4e\xd2\xd8\x11\x00\x42\ +\xe7\xc3\x85\x76\x3b\xcc\x4f\xa3\x11\x62\x45\x7e\x18\xf0\xe1\x54\ +\x75\xb7\x80\xb6\x42\x52\xbd\x3d\xe7\x55\x42\x68\xb6\x42\x98\x5a\ +\x3e\xe7\x96\x0b\xb8\x90\x09\x93\x56\x8b\x00\x1e\x52\x07\x89\x0b\ +\x53\x17\x94\x1a\x59\x85\x80\x7c\xea\xdd\xb8\x55\x8d\x35\x68\x5c\ +\x20\xbc\x31\x7b\xeb\xaf\x35\x35\x8c\xf6\x4b\x05\xc6\x20\xb1\xbf\ +\x64\x05\x50\xcb\x17\x48\x84\x7a\x94\x59\x13\xa3\x29\x7b\x09\x2c\ +\xc1\xdd\x96\x22\xcc\x5b\x47\x00\xb3\xed\x90\x07\xb9\x0e\x2e\xd4\ +\xb4\x02\xa8\xe6\x6c\xc8\xb2\x82\x11\x14\x08\x87\x6d\xe9\xcd\x77\ +\x53\x17\x94\x0c\xcf\x57\xba\x80\x0b\xff\x95\x8e\x00\x02\xc1\x80\ +\xc2\xc1\x90\x15\x40\xb3\xcc\x12\x17\xa7\xd4\xe0\x38\x94\x34\x3c\ +\xa3\xd5\x2b\xfc\x1f\xe2\x24\xa3\x9f\x3e\x7d\x2c\x69\x05\x51\x5b\ +\x9c\x36\xa6\xd9\xbe\xee\xb6\xcc\xb9\xe8\xd3\xd2\xf1\x83\x68\xc6\ +\x30\x55\x13\x92\xc4\x4d\x70\x2f\x88\x63\x90\xd8\x16\x39\x30\x4b\ +\x31\x55\x2a\xa3\xd5\xcb\xee\x86\xe6\xfd\xa4\xc3\x21\x55\xaa\x13\ +\xe4\x13\x45\x04\xd0\x24\x22\x04\x40\xff\x29\xee\xab\xb5\x75\xd0\ +\xae\x03\x1c\xc1\x2c\x7e\xcf\xd8\xd6\x26\x6b\xf3\x29\x9c\x4c\x5e\ +\x16\x00\xd6\x5e\x96\xe4\x5d\x69\x01\x55\x8a\x85\x2c\x17\xe4\xf0\ +\x2f\x88\xb4\xa2\xd4\xf3\x05\x53\x86\x56\x1c\x55\x2f\x4d\x2a\x0a\ +\x6a\xbb\x4b\x53\x0a\xa7\x43\xaa\x2e\xb9\x1d\xe5\x63\x15\x14\x48\ +\x5d\x52\x33\x19\x55\xbc\xb7\x4f\x75\xb4\x5f\x9e\xba\x88\x00\x0c\ +\x00\x36\x21\xd7\x2c\x02\x01\x38\x2a\x2d\x9e\x52\x61\xc3\x46\xac\ +\x60\xd4\x6a\x85\xa7\xda\xeb\x68\xf9\x37\x44\xec\x9f\x46\x0e\x4d\ +\x0b\x82\xa3\xb7\xdc\x6c\x05\x10\x8c\xfa\x15\x88\xcf\xca\xf5\x16\ +\x50\x42\x59\x71\x94\x51\x9e\xe1\x38\x32\xaf\x6a\x10\x86\xea\x6a\ +\x15\x44\x30\x6e\x4a\x82\x9a\x8d\x6d\x86\xe0\x06\x1e\x3c\x53\x84\ +\x51\x94\x75\xde\x99\xa1\xec\x79\x06\xb7\x63\x01\x4d\x88\x28\xb3\ +\x30\xe9\xb5\x93\x9d\x40\x84\xbc\x9d\xc2\x21\x84\x69\xca\x63\xc2\ +\x19\xfa\x82\x17\x4f\x29\xb3\x69\xbb\xe2\x1b\x57\x28\x71\x5d\x58\ +\xb1\x15\x94\xc6\x2b\xa5\xd4\xfa\xa8\xd2\x3b\x37\x72\x6d\x27\x9a\ +\x0a\xa8\x34\x37\xad\xda\xec\x02\xe6\xd9\xd2\x1e\x02\x80\x18\xb1\ +\x82\xf2\xa5\xa2\x96\x8e\x1e\xe0\xb8\x24\x54\x67\x1b\x9a\x6a\x6b\ +\xbe\x69\xc8\xa5\x09\x33\x8f\xb5\x95\x1c\x2e\x5b\xf4\xc7\xa4\x03\ +\x54\x7a\xa4\xb3\xd5\x29\x3a\x3f\xe4\x23\x7c\x0f\xc5\x68\x84\xa4\ +\x27\x94\x1c\xad\xaa\x6b\x6d\x43\xd1\x6e\x62\xfb\x30\x58\x91\xa0\ +\x44\x4e\x19\x16\x3a\xd6\x60\x5c\x22\x24\x7f\x3c\x81\xe2\xd2\xea\ +\x58\x38\xca\x3e\xcb\xe0\x5e\x69\x01\x15\x5e\x37\x5f\x68\xa7\x8a\ +\x56\x00\x71\x3a\x2d\x61\x80\xca\x71\x72\xaa\x2e\x37\x95\x3b\xfa\ +\x8a\x86\x6e\xbc\x59\xdd\xeb\x37\xca\xb9\x7e\x37\xfe\x99\x67\x81\ +\xb8\x45\x22\x69\xcd\x2b\xc4\xbd\x1e\x0c\x94\x2e\x9e\xc5\x05\x4c\ +\x62\xd2\xb0\x21\xc8\x46\x08\x00\x94\x0f\x7e\x4b\x59\xfa\xea\xb8\ +\x4a\x37\x6c\x53\x6a\x68\x58\xb0\x29\x62\x94\x05\x4e\xdb\xe2\x22\ +\x6f\xaf\x13\x4a\xdd\x52\xc8\x0a\x8e\x05\x83\x17\x75\xc6\x59\xc5\ +\x7a\xa9\x27\xd2\x31\xd6\xd3\x24\xaf\x99\x50\x62\x10\x54\xc7\xdf\ +\xb3\xb1\xba\x92\x83\x8e\x55\x54\xac\xdf\xa3\x36\xc1\xcc\xc9\xf0\ +\xf9\x87\xc9\x1b\xcb\x89\xcb\x47\x63\xc6\x6f\x92\x20\xe6\xe7\x63\ +\x36\x5b\x9c\x66\x68\x5c\x89\x01\xb5\x31\x3e\x6e\xfb\x8f\xfa\x90\ +\x5a\x82\xfa\x3f\xc2\xc3\x4c\x62\x4d\xac\x7c\x3e\xaf\xe9\xe7\x7f\ +\x04\x43\x25\xf9\x9d\x0a\x85\xc9\x08\x4c\x0c\x21\x71\xee\x71\x6c\ +\x1e\x4f\x3c\x9e\x21\xef\x9e\xc5\x8f\x6d\x28\x6d\xbd\xf4\xb4\x16\ +\x00\xd5\x4d\xdd\x40\x9a\x3d\x57\x50\x69\xf2\x02\xf7\x57\xed\x33\ +\x1e\xd4\x74\x49\x9d\x99\xb7\x78\xe1\x04\xe8\x5e\x36\xf7\xd9\x6e\ +\xd1\xf9\x67\x9f\xd3\xf4\xb1\x1f\xab\xb4\x7c\x46\xd1\x01\x3f\x16\ +\x66\xc2\xd5\x8c\x22\xe9\xb8\x42\xa9\xa8\x62\x03\x41\xf5\x6d\x75\ +\xd4\xb3\xc9\x53\xcf\x96\x06\x02\x90\x4d\xd6\x1c\xd7\x47\x04\xf3\ +\xb5\x36\x5c\xa0\x9c\x38\x1d\x67\xe1\x0a\x9d\x4c\xf7\xa5\x97\x5e\ +\x3a\x72\x0d\x08\x3e\xf9\xe4\x93\x87\x79\x97\x56\x32\x37\x38\x94\ +\x9d\x71\x04\x10\xc5\x0a\x8c\x09\x35\x25\xea\x7b\x29\x77\xf8\xa8\ +\xe6\xc7\x0e\x61\xde\x79\x62\xef\x84\x8d\xd9\x96\xbc\x9a\x05\xb7\ +\xfc\xe9\x63\xc4\xe6\x26\xd7\x3d\xcb\x7c\xc7\x05\x3a\x84\x50\xb8\ +\x86\x20\xb0\x1e\x98\xb7\x66\xcf\x09\xc2\x24\xf5\xc1\xf4\x5e\xcd\ +\xef\x7f\xc2\x6a\xd0\xab\x59\x90\x45\x08\x15\x18\x68\xd0\xf1\x09\ +\x71\xef\x12\xe7\x2f\xe2\xe7\x30\x97\x48\x51\x7c\xf5\x70\x2d\x4e\ +\xe1\x14\xa2\x90\xf1\x81\xfc\xed\x30\x58\x43\xf7\x35\xbf\x22\x4e\ +\x00\x1c\x8b\xc9\x0b\x85\x08\xbb\xf4\x12\x4c\x94\x81\x30\xff\x69\ +\xb6\x1b\x9d\xfc\x49\x10\xf4\xf8\x5c\x64\x33\xc3\xab\xd4\x04\xdb\ +\x48\x15\x49\x66\x32\x4a\x50\xe2\xe6\xe9\xa8\xd8\x5c\xda\xe5\xe1\ +\x0b\x35\xcd\x3d\xff\x14\xdd\x9d\x21\xc5\xfa\xfa\x55\x5d\x30\x66\ +\x69\xea\xfd\x10\xe0\x35\xa7\x3a\x55\x57\x2d\x17\x31\xcc\xb6\xa3\ +\x83\xc9\x0f\x60\x1e\x57\x41\x8a\x9c\x73\xad\xc9\xe3\x9b\x30\x58\ +\x80\xa1\x79\x79\x95\x33\xb8\xd8\x51\xac\x62\x99\xe2\x86\x34\x35\ +\xe0\xb4\xdc\x47\x02\xe9\x23\x58\x98\x41\xf5\x79\x70\x61\x49\xa1\ +\xae\x1e\x1a\x17\x71\x14\x94\xa0\x59\x02\x40\xc3\xa4\x70\x51\xb1\ +\x36\x61\x31\x6e\x1d\xed\x57\xc0\x8c\x0a\xd1\x05\x73\xf1\x27\x53\ +\xaa\x74\xa5\x71\xdb\xf5\xca\xb6\x37\x66\xcd\xcf\xcf\x1f\x94\x94\ +\xfd\xc9\x96\x58\x13\x9a\xc7\x0b\x9e\x05\x21\xad\x99\xf8\x31\x9d\ +\xf4\x9a\x35\x0a\xa6\x52\xed\xa6\xa4\xd0\x9c\xa3\xfc\x49\x1a\x25\ +\xfb\x9e\x46\x71\x86\x81\x32\x42\xb8\x00\xd3\x33\xaa\x2d\x2f\x81\ +\x65\xa1\xab\xc2\x97\x07\xb5\xcd\x1f\x42\xe3\x6a\xa0\x41\x97\x89\ +\x2e\xaa\x3a\xbf\x17\xac\xd8\x8b\xc6\x8f\x32\x4f\x56\x45\x84\x0b\ +\xd6\xd8\x8c\xce\x41\x60\xe4\x06\x3c\x5f\x67\xfe\xf3\xcc\x3b\x4b\ +\x68\x0e\xc2\x78\x44\x0e\xc2\xf6\x05\xad\x10\xf0\xeb\x2e\xe6\x8b\ +\xf3\xbd\xdd\xaa\xc9\xe1\xf7\x65\x42\x78\x1d\xed\x93\x70\x05\x33\ +\x19\xa5\xae\xdf\x2a\x5f\x3c\x66\x9b\x21\xa6\xd7\xc1\xde\x81\xc7\ +\x84\x4a\xff\xa1\x9e\x60\xe9\x3b\xdf\xf9\xce\xf7\x30\x91\xaa\xc1\ +\x02\x87\x50\x18\xe7\x0d\x4c\x64\x90\xb4\x36\x16\xb5\x21\x05\xb9\ +\x80\xf2\xd2\xf2\xe1\x63\x5a\x3a\x31\x66\x72\x76\xa8\x26\x37\x3f\ +\xa7\xe5\xb1\x7d\x2a\x4d\x2f\xb0\xc0\xa0\x01\x1c\x8b\x1d\x3c\x70\ +\xd9\xfc\x1b\x90\xcf\xef\xa2\x4d\x63\xf6\x27\x08\xaf\x17\x44\xc5\ +\xc5\xb1\xc9\x14\x49\x6d\x67\xc8\xeb\x0b\x71\xc1\x91\x15\x58\x85\ +\x0c\xaf\x1b\x8c\x49\xf6\x0d\x12\x96\xbb\x15\x80\xe9\x96\x19\xc9\ +\xb6\xcd\x85\xf6\x1d\x5f\x08\x0e\x18\x9b\x30\x8e\xe9\x8b\x42\xc8\ +\x57\xc0\xfc\x3d\x08\xe4\x5f\x0e\xfa\xb4\xfa\xce\x3b\x55\x67\x1d\ +\xed\x0d\x1d\xcb\xff\xf3\xab\x5f\x7d\x54\x92\x7b\x4d\x4f\x50\x2c\ +\x85\xed\x25\x63\x48\xe8\x50\x3c\x1e\xbf\x85\x92\x51\x41\xd0\x33\ +\x45\x27\x25\x4b\x77\x55\x24\x27\xcc\x62\x2b\xad\xdc\xb9\x3a\xfe\ +\xba\x4f\x09\x5c\x21\x94\x4e\x09\x75\x63\xa2\x05\x15\xcf\x03\x82\ +\xe5\x59\xe5\xa7\xd1\x98\x79\x3e\x81\x76\x22\x61\xae\xdb\x82\x04\ +\x90\x42\x33\x69\xa8\x2f\x20\xc0\xc5\x76\x8b\xb9\x04\xb3\x2e\x89\ +\x48\x85\x50\x9b\x27\xf5\xbe\x84\x15\xd4\x5a\xcf\xf8\x4d\x76\x88\ +\x40\x8a\x97\x6b\x14\xdc\xa3\x6c\xdd\x11\x0d\xb5\xdc\xac\x0e\x55\ +\xb8\x37\x8f\xd5\x2c\x04\x14\xc8\x13\x26\x11\x8c\x47\xdc\x0f\x6c\ +\xda\xa0\x24\x2f\x6f\xe7\x0a\x79\xdb\x0d\x62\xd3\xc4\xe3\xf9\x62\ +\x71\xca\x4a\xf2\x5a\x01\xd8\x93\xb3\x7b\xf7\xee\x7d\x84\xf6\xb8\ +\xd9\xdc\xe8\x04\x89\x02\x49\x04\x50\xe4\xbd\xa0\x72\x79\x28\x67\ +\xb5\x5a\x2b\x38\xca\x9d\x9e\xd7\x12\xe7\xfb\xf7\xec\x84\x11\x59\ +\x8d\x37\x1d\x17\x01\xd5\x29\x54\xa6\x68\x5e\x56\x6c\x1c\x0f\x63\ +\xce\x84\x22\x50\x1b\xad\x24\x73\x8a\x0f\x61\x5d\x32\x61\xcf\xb1\ +\x59\x9c\xc7\xc2\xb2\x2f\x5f\xd2\xfc\xcb\x0d\x30\xc6\xa7\x64\x66\ +\xb0\x53\x9e\xd8\x66\x4b\xad\x14\xc6\x5d\x7c\x8a\x90\x03\x78\x80\ +\x26\x21\x02\xa1\x76\xf3\xf7\x10\x08\x2e\xa8\xb2\xd1\x08\xb8\x32\ +\x8b\xf6\x97\x30\xff\x32\x18\x80\xdb\x9e\x25\xc3\xdc\xf0\xcf\xde\ +\xad\xba\xcf\xe9\xec\x55\x74\xbf\xff\xdd\xef\x7e\x05\x26\x4b\xe2\ +\x73\x8d\x00\x3a\x49\xd2\xfe\xfd\xfb\x1f\xc7\x0a\x5e\xd9\xbe\x7d\ +\xfb\x36\xfa\x67\x0a\x00\x84\x5d\xbb\x76\x69\x79\x0e\xf3\x86\xa9\ +\x26\xa4\x86\x30\x59\x72\x83\x53\xa7\xd4\xbd\x69\x2d\x0c\x46\xf0\ +\xd7\x12\x3d\xfe\x57\xb4\x34\x0e\x63\x2d\x03\xb3\xa6\x7f\xfe\x99\ +\xe7\x8c\x55\xab\x7b\xa3\xc7\xcb\x4d\x97\x4c\x2e\x88\xb5\xa0\x79\ +\x00\x8b\x66\x08\x02\x80\xc9\x2c\xe9\x33\x9a\xf3\xc8\x00\x27\x5e\ +\xdc\x7f\xe5\x0e\x26\xee\x97\x46\x76\x01\x8e\xfd\x54\x99\x7d\x30\ +\x69\xe6\x75\x0a\x08\x1d\xa0\x2d\x92\x3c\x65\x6b\xf2\x2f\x32\xd7\ +\x14\x82\xce\x05\x01\xbf\xa8\xf2\x7d\xdd\x8a\xdc\xb2\x5b\x29\xc0\ +\x6f\x1e\xed\x9b\x8d\x1d\x67\x4e\x9f\x7e\xe2\x99\xa7\x9e\x3a\x20\ +\x56\xff\x53\xdf\x0e\x77\xb2\x42\x5e\x8b\xf9\xb6\x6c\xd9\xf2\x16\ +\x3a\xc5\x8e\x49\x8a\x82\x50\x9d\xee\x6a\x93\x56\xb7\x8c\x00\x6c\ +\xda\xea\x90\xa2\xd6\xd0\x68\x17\x3e\x38\x21\x77\xf9\x15\xb0\xa0\ +\x2c\x8c\x11\x80\x74\xac\x69\x63\xe1\x24\x55\x52\x7a\xb5\xa7\xde\ +\x55\xae\x7a\x77\x05\x40\x72\x98\x08\xf9\xb0\x0e\x23\x00\x21\x08\ +\xfc\xff\xac\xa7\xec\xb4\x0f\x30\x75\xae\x69\x3a\xe1\x5d\x60\x90\ +\xa3\x44\xcc\x53\xa8\xa7\xfd\x72\xd4\xb6\xa1\x58\xc3\x32\xda\x9f\ +\x02\x57\x26\xb9\xe7\x22\x20\x59\x00\x24\xfb\x07\x75\xaa\x2f\xa5\ +\x1d\x0f\xfe\xa1\x6a\x91\x90\x49\x7a\x44\x92\x57\xfb\xc6\x23\x8f\ +\x3c\x38\x7e\xf6\xec\x31\x33\xe5\xcf\x7a\x3d\xee\xb2\x0d\x75\x86\ +\x77\x69\xdb\xd9\x6a\xb2\x26\x12\x8d\xb2\x80\x98\xc2\x50\x69\x6e\ +\x16\x90\xa1\x2f\x8f\xd9\xa2\x3d\x00\xad\x81\xc4\x27\x15\x0c\x9d\ +\xc5\xa5\x2b\x80\x95\x09\x18\xd4\x06\xa4\xa6\x80\x34\xcd\x89\xa6\ +\xba\x60\xbe\x67\x65\x83\x66\x87\x0f\x40\x0d\x60\xbe\x41\x9b\x5b\ +\xd8\xac\xa6\x2d\x80\xfa\x82\x47\xb2\xe3\x53\x69\xde\x0a\xa5\xa3\ +\xfd\x4e\x25\x6b\x29\xc1\x5c\xb1\x3e\xb5\xdc\xad\xc1\x89\x3c\x37\ +\xce\x50\xfa\xe2\xd1\xc1\x69\x7c\x3f\x6b\x36\x47\xf4\xea\x04\x09\ +\xd2\xba\x7f\xf7\x51\x45\x79\xf9\xba\x48\x64\x9a\x9b\x9b\x63\x2f\ +\xd3\xfe\xaf\xfd\xcd\xc3\x0f\x3f\x64\xf2\xb9\x9f\x77\x83\x44\x89\ +\x0d\x88\xb3\xec\xb8\x7a\x07\x1b\x0c\xc2\x30\x6f\x22\x01\x42\x88\ +\xab\x44\xf9\xe9\x00\x88\x04\x5d\x5b\x76\xc6\xd3\x15\x16\xd6\x80\ +\x29\x07\x40\x74\x38\x86\xf1\x98\xc7\xf9\xa6\x52\x7d\x9e\xd2\xc3\ +\x4d\xa5\xb7\xf8\x31\x5f\x7c\x33\x12\x82\xa2\x58\x40\xbc\x85\xe0\ +\x4d\x59\x60\x13\x0c\xb9\xcb\x9e\x0a\x0b\x3e\xac\x47\xd7\x7e\x9a\ +\xcc\xdb\x83\x10\x98\xd3\x66\x83\x26\xdd\x5d\xa0\xc4\x9d\x26\xde\ +\xcf\x60\x55\xb9\x30\x80\x99\xd1\x59\xf2\xfd\xf0\xbb\xde\xae\x91\ +\xb7\xbd\x55\xd9\x72\xc9\x68\xde\x00\xdf\xe4\x9f\xfd\xf1\x1f\x7f\ +\x14\x0c\xb8\xe4\x32\xd3\xcf\x2b\x80\x06\x7e\x33\x07\x72\x3a\xec\ +\xc8\xbc\xdd\xb8\x42\x10\x21\x18\x30\x0b\x43\x65\xfa\x73\xbe\x4a\ +\x99\xa2\xa4\xa6\x44\x0f\x9d\xa3\x5e\x13\x8d\xa0\xa0\x6c\x46\x16\ +\xee\xf6\x51\x2c\xf9\x14\x1d\xf6\xa3\x75\x3f\x11\xc1\x68\x3e\x0c\ +\xf3\x09\xf0\x20\x45\x0c\xa7\x34\x05\xc5\x65\x30\xc0\xad\xdb\xf6\ +\x99\x93\x6d\x08\x78\xa4\xd1\x69\x31\xe4\xca\x8f\x2d\x61\xa3\xcc\ +\x99\x49\xca\xbe\x2d\xf2\x2d\xa2\xf1\x59\xfc\x7d\x0e\xca\x86\xb9\ +\x9e\xd6\x85\x44\x46\xb9\x9b\x76\x6b\xcb\x07\xff\x40\x45\x22\xce\ +\x2c\x9a\x27\xb3\x73\xbf\xfd\xcd\xbf\x7d\x60\xec\xd0\xa1\xa7\x8b\ +\x92\xfb\x8b\x6e\x92\x32\xfb\xf4\xcf\xd0\x2e\x5f\xcb\x0b\xc5\x8d\ +\xc6\x15\x82\x26\xb4\x25\x13\xb6\xf8\xa9\xd0\xc5\x4d\xc6\x4b\x8a\ +\x67\xaa\x14\x44\x4d\x2b\x00\x27\xe0\x20\x04\x53\x81\xf9\x18\x61\ +\x3a\x1c\xe0\xd8\x6a\x1d\x4a\xf2\x3d\x0d\xf3\x90\x2f\x81\x2a\x5a\ +\x4d\x10\xe2\x9a\xb5\x82\x00\x56\x13\x2c\x21\x04\x62\x77\x35\x27\ +\xce\x31\x9f\x98\xcb\x41\xd3\xe0\x45\x17\x00\x98\x89\xa0\xf1\x3a\ +\xf9\xfd\x42\x58\x21\x28\x98\x37\xf9\x46\x5a\xe7\x48\x17\x67\xe8\ +\x18\xed\x78\xe0\xe3\xaa\x04\xfc\x2d\xe6\xd9\xd4\xf1\xdc\xd3\xcf\ +\xfc\xf9\xb7\xbe\xf6\x57\x7f\xce\x74\xc5\x7f\xcc\x2e\xb1\x26\x54\ +\x38\x76\xec\xd8\x89\x15\x2b\x56\xec\x21\x22\x0c\x21\x04\x6b\x05\ +\x81\x54\xca\x36\x29\x6b\xe5\x9c\x52\xdd\xe6\x5d\x5e\xcd\x34\x25\ +\x21\x41\x7e\xcc\xd1\x6f\xb2\x33\x98\x07\x94\xc2\x31\x4c\x3e\xc1\ +\xf7\x14\xe7\x93\x5c\x8f\x73\x53\xa8\x95\x83\xd9\x1e\xa3\x6b\xdd\ +\xc9\x71\xc0\x93\x18\x7e\x5e\x47\x10\x29\x1f\x58\x40\x37\x0a\x0a\ +\xd3\x0c\x49\x67\x82\x1a\xec\x0e\x28\x19\x20\x45\x07\xe8\x42\xf8\ +\x7b\xa0\x4c\xc7\x38\xd8\xa3\x13\xfe\x08\x9a\xbf\x49\x3b\x3e\xfe\ +\x31\x55\x10\xfa\x0c\xcc\xa3\x38\xb3\x9f\xe9\xd1\xbf\xfc\x93\x2f\ +\x7c\xb2\x5b\x9a\x5b\xfe\x25\xf6\x09\x7a\x68\x69\xe1\xf8\xf1\xe3\ +\x63\xbc\x36\xbf\x0d\x3c\xe8\x09\x1b\x50\x8c\xc7\xa1\x24\x05\xd3\ +\xb0\xf2\x4b\xa0\x30\xd5\xa1\xdf\xd6\xf6\x08\x41\x62\x0c\x30\xfa\ +\xa1\x90\x80\x3e\x04\x84\x20\xcc\xc8\x79\x35\xfc\x26\x77\x87\xcc\ +\x66\xa7\x06\x63\x83\xb1\x2e\x51\x00\xc1\x36\xd6\xe4\x28\xe9\x49\ +\x5d\x34\x63\xbb\x32\x01\xf5\x76\xc3\x3c\x05\x4f\x97\x2f\xac\x70\ +\x93\x88\x54\x04\x43\xdc\x84\xaa\x80\xcd\x8b\x3c\x1f\x7d\xd7\xbb\ +\xb4\xf9\x5f\xfd\x4b\x15\xb1\x94\xe9\x99\x19\xcb\xfc\xcb\x87\x0f\ +\xbf\xf0\x97\x9f\xff\xc2\xbf\x49\x36\xea\x13\xe7\xe0\xe1\x97\xdd\ +\x29\x4a\x16\xeb\xce\x8c\x8f\x8f\x1f\x23\x2a\x98\x04\xa9\x27\x1c\ +\x89\xd8\x4c\xaf\x19\x89\x53\xa7\xaf\x22\xcb\x4a\xab\x9c\xaf\x90\ +\x81\xd5\x2d\x53\x0c\xb6\x2a\x73\xaa\x50\x05\x43\x2e\x0b\xe0\x84\ +\xd9\xa2\x2b\x15\xb0\x96\x62\x95\xe3\x0a\x54\x6b\x51\xc1\x05\xd8\ +\x1a\x8c\xb8\x50\x09\xcc\x00\xe9\xa2\x50\x02\x9c\x48\xf9\xe8\x4d\ +\x40\xa1\x26\xd6\x57\x8f\x23\xdb\x8c\x26\x7c\x51\x1d\x66\x0d\x9b\ +\x1f\x7c\x50\x43\x77\xdd\xa1\x2c\x51\x69\x6a\x7a\xda\x00\x1e\xbb\ +\x59\x0e\xbf\xf8\xb5\xbf\xf8\xef\xf7\x47\xf2\xd9\xf1\xb3\xac\xfd\ +\x57\xb9\x59\x3a\x82\x05\xdc\xc4\xcf\x61\xfe\x94\x24\x69\x17\xdb\ +\x68\x44\xe5\x68\x37\x48\x85\xca\x00\x62\x7e\x5e\xc5\xf1\x17\x15\ +\x29\x8f\x29\x1d\x98\x57\xa8\x51\x6d\xed\x0a\x35\x8d\x55\xfe\xf9\ +\x9a\x10\xff\x1c\x4b\x9d\xfd\x4e\xed\x37\xc4\xed\x1e\x23\x9e\xd4\ +\x29\x67\xa1\x20\xc2\x0c\xa2\x6d\x46\x2f\x2c\x4c\x4e\x34\xc1\x34\ +\x56\xa6\x17\x71\xd7\x5d\xda\xf8\x9e\x7b\xd5\xc0\x12\x17\xb3\xcb\ +\x76\x57\x3a\x95\xac\x8e\x1c\x3c\xf4\xf8\x5f\x3f\xf4\x95\x8f\x77\ +\x57\x4a\xa7\x8f\x4b\xee\x6b\xb1\x5d\x3e\x44\xc7\x68\x2b\x7b\x08\ +\x3f\xc5\x6f\x05\x7e\x97\x5c\xc1\x61\x03\x92\x22\x21\x80\x09\x33\ +\x8e\x19\x7f\xa6\xa7\x57\x3e\x7d\x08\x3f\x3d\xa5\x1e\x65\x11\x48\ +\x49\x81\x6a\xc3\xee\x23\xf0\xd7\x01\x4b\x5b\x11\x43\xcd\x76\xba\ +\x6b\x81\xc3\x69\x63\x82\x9f\xf3\x86\x60\xda\xe4\xfa\x68\xde\xa3\ +\x08\xba\x58\x71\x75\xae\xe1\xd1\x97\xdc\xa3\x4d\xec\x47\x0e\xb2\ +\x1b\x2d\x47\x42\xb6\x40\x92\xc3\xfe\x3f\xa3\xf9\xc6\x81\x7d\xfb\ +\xfe\xc7\xf7\xfe\xfa\x6f\xfe\xeb\x48\xd3\xbb\x78\x04\x91\xbe\x96\ +\x3f\x98\x08\x40\xc3\x3b\x77\xee\xfc\x83\x37\xbd\xe9\x4d\x0f\x12\ +\x26\x53\xec\x20\x17\x20\xa9\xb0\xc9\xfd\x59\x68\xdc\x41\x61\xc5\ +\x9c\x0a\xaf\x9e\x94\x26\xc7\x15\x9a\xbf\xa4\x1e\x9a\x1b\x09\xf2\ +\xf6\x40\x89\xd4\xb5\x4a\xee\x6e\x84\xc0\x3f\xf1\x8c\x7c\x50\x20\ +\x88\x79\x87\x60\x38\xa2\x1a\xe3\x54\xa9\xaa\x59\xee\xa9\x62\x69\ +\x03\x6f\x78\x83\x46\xd8\x7d\xee\x74\xa5\xf1\xa0\xaa\x96\xb2\x59\ +\x9b\xe1\x4d\x63\xf6\x67\xcf\x9c\x99\x7b\xe6\xc9\x1f\xfc\xa7\xa3\ +\xcf\x3d\xff\xcd\x95\xd4\x73\x07\x25\xef\xf5\xf8\xc9\x8c\x03\xa5\ +\xf9\xdc\x7a\xc7\x1d\x77\x7c\x82\xd7\xcd\x6f\xc6\x25\x7c\x84\x4b\ +\xc5\x63\x31\xbb\x83\x3b\x2c\x29\xee\x0f\x28\xe6\x43\xb3\xe4\xe3\ +\x45\x4c\xb4\x3a\x35\xa9\xe6\xec\x8c\x7c\x30\xa0\x82\x79\x77\x50\ +\xb7\x55\x5e\xc3\x54\x85\xe1\x88\x5c\x00\xd6\x4b\x53\xe3\x0f\xf4\ +\xab\x7f\xcb\x56\xf5\x6e\xdd\x22\x1f\x6e\x46\xd9\xa0\x3c\x6e\x96\ +\xe3\x99\x2c\xcf\xd2\xd4\x10\xd9\xaa\xcb\xa6\xcd\xbf\xfb\xc1\xf7\ +\x1f\xfd\x6f\xde\xe2\xe2\xd1\xf5\xf2\x2a\x3f\x92\x9a\xaf\xf7\x8f\ +\xa6\x82\xd0\x8a\x0d\x1b\x36\xdc\x73\xe3\x8d\x37\xde\xbf\x7e\xfd\ +\xfa\x1b\x00\x4a\xb3\xc9\xda\x6e\x47\x09\xe3\x1a\x21\x63\x15\x50\ +\x14\x0d\x47\x8c\x60\x10\x4a\xc0\x74\x6b\x3b\x11\x83\x63\x87\xeb\ +\xe2\x9a\x82\x41\x46\xbf\x5c\x47\xb6\x86\x2f\x03\x6e\x14\x26\x2a\ +\x96\x4a\xc8\xab\xd0\xc9\xeb\xbd\xd3\xe3\xe3\x2f\x1c\xdc\xf7\xe2\ +\x97\xce\x1d\x1d\x7b\x22\xd3\x6c\x2c\x8d\x4b\x8d\x5f\xe7\xcf\xe6\ +\x1c\x28\x02\x0d\xaf\x5b\xbb\xf6\x2d\x3b\x76\xee\xfc\x17\xb8\xc5\ +\x6e\x04\x11\xc2\x42\xac\x20\x00\x4f\x11\x3d\x14\x0c\xc0\x3c\xcc\ +\xf2\xfb\x20\x2c\x3f\x00\x01\x78\x68\x9f\xff\xd9\xa4\xa8\xe1\x79\ +\x96\xea\x00\x62\x0d\xe6\xcb\x30\x6f\x18\xe7\x17\xa5\x26\xa7\x2f\ +\x4f\x9c\x3f\xff\xdc\xe1\xfd\x07\xbe\x7a\xe1\xd4\xf8\xd3\x51\xcf\ +\x9d\x0f\x49\xb5\x73\xbf\x41\x3f\x9c\x74\xa0\x30\xec\xf4\x26\x62\ +\xb1\x2d\xdb\x77\xee\x7c\xc7\xc8\xe8\xe8\xef\x80\x0f\x1b\x32\xec\ +\xd4\x64\x07\xea\xdf\x0b\x02\x4d\x07\x10\x46\xe7\x5d\x9d\xda\xbb\ +\x37\x08\xb7\xb6\x75\x45\x35\x6a\x4b\xd8\xa5\xc5\xc5\xc2\xfc\xdc\ +\xdc\x31\x36\x6b\x3e\x79\xe4\xc5\x17\xff\x4f\xad\x54\x79\x35\xe8\ +\xd5\x97\x03\xa6\x60\x93\x9a\xbf\xa9\x3f\x9d\x75\xd4\x2a\x0d\xa2\ +\xb0\xd7\x8d\x81\x0f\xaf\xdd\xb0\xfe\xc6\x15\xc3\xc3\xd7\x03\x94\ +\xab\x12\xc9\xd4\xca\x70\x24\x9c\xa6\xf1\x8a\x57\x04\xc3\xdc\x6c\ +\x18\xaf\xd0\xb2\x2a\xc1\xfc\x32\x6d\xab\x0b\xec\x4e\x3f\x37\x39\ +\x31\x71\xf8\xec\xa9\xf1\x83\x5c\x9f\xa6\xfa\xcb\x8a\x3e\xd1\xb2\ +\xe4\xfd\x36\xfe\x78\x9a\xba\x0f\xb7\x97\xc8\xf2\x15\x91\x15\x8c\ +\xc3\xe8\x84\x9a\x9c\xc7\xfc\x3d\x47\xb8\x3d\x90\xc8\xf5\x32\x9b\ +\x54\xcb\xa0\x80\xcd\x08\x0c\xd7\xaf\xf5\x8f\xa8\x9d\xdf\xb0\x5f\ +\xad\x37\xf5\x3a\x7f\xfe\x1f\x5f\xbc\xdd\xe6\x1a\x53\x0c\xc2\x00\ +\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x13\x09\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\ +\x1b\xaf\x01\x5e\x1a\x91\x1c\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd7\x09\x17\x17\x15\x19\x49\x86\x70\x41\x00\x00\x12\x96\x49\x44\ +\x41\x54\x78\xda\xed\x5b\x09\x74\x5c\xd5\x79\xfe\xee\x7b\xb3\x6b\ +\xb4\x5a\xb2\x25\xd9\x96\x64\x63\x6c\x83\x31\x36\xb6\x81\x00\xe1\ +\xb0\x34\x14\xc2\xda\x94\x86\x04\xd2\x90\x42\x72\x20\x5d\x20\x14\ +\x68\x08\x4b\x48\x09\x87\xda\xad\x73\x52\x52\x02\x24\xad\x7b\x20\ +\xe4\xb0\x95\xcd\x40\xb0\x1b\x56\x2f\x80\xb1\x2d\xdb\xd8\xb2\x6c\ +\x6c\xd9\xb2\x2c\xc9\x1a\x4b\x1a\x69\xf6\xe5\x6d\xf7\xf6\x7f\x33\ +\xef\xf0\xf4\x3a\x9a\x19\x1b\x26\x3d\xc9\x69\x7e\x9d\x4f\xf7\xbd\ +\xfb\xee\x9b\x79\xdf\x77\xff\xe5\xbe\x2b\x1b\x7f\xb4\x3f\xda\xff\ +\x6f\x63\x38\x0e\x1b\xbb\x05\x75\x52\xed\xf4\x8b\x5d\x33\x97\x5c\ +\x06\xb7\xef\x3c\xa1\xa4\x3c\xd0\xb3\xc3\x42\xcd\x0c\x71\x35\x15\ +\x12\x4a\x22\xc4\x53\xe3\x21\x91\x8d\x85\x84\xc0\x10\x80\x10\xe1\ +\xe8\xd4\x9f\x43\xf9\x83\x16\x40\xfc\xd8\x7f\x95\x68\x5d\x76\x37\ +\xe7\x58\xc6\xd3\x51\x99\x08\x42\x70\x01\xe1\x0e\x12\xaa\xc0\x65\ +\x3f\x84\xec\x81\x60\x6e\x82\x0b\x90\x5c\x10\x82\x03\xdc\x00\xd7\ +\xd2\x02\xba\x32\x2e\x0c\x6d\x48\xe8\x6a\x48\x68\x4a\x48\xe8\xd9\ +\x10\x57\xd3\x24\x54\x7c\x48\x68\xd9\x90\x30\x85\x12\x08\x4d\x7f\ +\x0c\x99\xdf\x3b\x01\xc4\x03\x9e\x3f\xc7\xf9\xf7\xbf\x88\xe6\x45\ +\xcc\x24\x04\xae\x03\x26\x39\x43\x05\x32\x11\x80\xc4\x80\x9a\xcc\ +\x43\xcf\x40\x68\x19\xf0\x6c\x82\x90\x02\x57\x92\xe0\xa6\x50\xb2\ +\x0f\x5c\x48\x04\x53\x13\x4e\xd0\xc1\x75\x2d\x27\x14\x40\xd7\x0d\ +\x03\x24\x0a\x41\x8d\x0a\xae\x87\x08\x43\xc2\xa0\x36\x07\x95\x04\ +\x33\xa1\x0c\x09\x6e\x84\x00\x84\x3a\x1e\x47\xf2\xff\x4e\x80\xa7\ +\x2e\xee\xc4\x99\xb7\x2c\x85\xb0\xc8\x73\x23\x07\xc7\xb9\x28\xd6\ +\xa7\xe7\xa1\x98\xe2\x64\xed\x3e\xd3\x84\x00\x57\x33\xa4\xa3\x42\ +\xc8\x82\x73\x0e\x03\x6e\x70\x12\xd6\x50\x32\x39\x01\x0d\x12\x52\ +\xcf\xc4\x01\xba\x26\xcc\x1f\x6e\x80\x3c\x89\xa0\x27\x68\x60\x4e\ +\x90\x1c\x04\x0f\x01\x3c\xc4\x64\x98\xd8\xd9\x71\x29\xba\xd9\xc5\ +\x10\x95\x11\xe0\x85\x6b\x53\x58\x78\x6d\x20\x3f\xf3\x46\x09\x01\ +\x9c\x62\x38\xc6\x8b\xdc\x35\x1b\xa2\xc8\x58\xf2\x1e\x40\x00\x14\ +\x4e\x90\xdc\x80\xcb\x47\xf0\xe7\x3c\x46\xd7\x75\x18\x9a\x96\xf3\ +\x20\x9d\x33\x12\x27\x09\x3d\x35\x06\x75\xa4\x07\x7a\xa2\x0f\xae\ +\x00\x03\xf3\xe4\x6f\x37\x14\xf1\x3a\x35\xdf\xe8\x58\x81\x04\xca\ +\x98\x0b\x65\x8d\xb9\x72\x0f\x97\x8b\x69\x82\x63\xc6\xb9\x89\x82\ +\x63\xc7\x78\x61\x58\x2d\xb7\xfa\x8b\x8c\x35\x21\xc9\xf9\x3e\xcd\ +\xf4\x96\xd4\xa7\xe2\x48\x34\xc6\x63\x0b\x95\x0f\x3f\xd9\x0b\xd4\ +\xd7\x00\xb3\x2e\x85\xde\x34\x97\x9c\xec\x03\xe8\x43\xab\xc1\xb3\ +\x06\xd4\x38\xae\xc8\x8c\x88\x55\xa2\x1b\x5f\x63\x0b\x50\xd2\x24\ +\x94\x35\x0e\x88\x89\x04\x78\x01\x81\xa2\xd7\x45\x31\x91\x8a\x7c\ +\xd6\xb1\x7e\xb6\x69\x5a\x1a\x48\x1c\x01\x0e\xbf\x0f\xd7\xbe\x35\ +\xa8\x5a\xba\x02\x9e\xe9\xcb\x00\x96\x1f\x0a\xce\xbe\xda\xf3\x38\ +\x4e\x00\x3e\xaf\x00\x42\x4c\x70\xdd\x22\x33\x69\x79\x44\xd9\x87\ +\xe7\xe5\xbd\x80\x50\xfe\xb3\xed\x6b\x79\x11\x0e\xbc\x09\xac\xbd\ +\x13\x7a\x66\x16\x52\x43\x02\xe9\x61\x01\x35\x29\x98\xa1\x62\x49\ +\x25\x04\x28\x7c\x38\xce\x8b\xcc\x6c\x31\x61\x8e\x91\x38\x2f\x15\ +\x5a\x93\x08\x13\x27\xf2\xe9\x31\xe4\xec\x93\xd5\x30\x12\x5e\xa4\ +\x8f\x9a\xe4\xf3\xb7\x42\xc0\x5f\x81\x1c\x20\x0a\xc9\xd8\x84\x4a\ +\x92\x71\x1e\x97\x0a\x25\x5e\x46\x9c\x42\xf1\x6c\xf2\xf6\x44\x31\ +\xdd\x2c\xaf\xd6\x23\xc3\xb2\xcf\x2d\x40\xa1\xdb\x15\x78\x41\xb1\ +\xd8\x75\x1e\x17\x0f\x95\xc2\x44\x59\xc6\xc3\xe2\x83\x44\x3e\x8c\ +\x02\xe3\x1a\x84\xc5\xbc\x72\x02\x40\x14\xcd\xe8\x36\x81\xe3\x4d\ +\x88\x45\xae\x17\x92\x2d\x1c\x1f\x1b\x70\x90\x77\x98\xa1\x43\xa0\ +\xd2\x02\x08\x41\x30\x8e\x3d\xa3\x17\x86\x4a\xf9\x24\xc8\x8f\x31\ +\x29\xc6\x4b\x90\x27\x13\xa6\x07\x4c\x9c\xb7\x0a\x09\xe0\x24\x5b\ +\xbe\xd4\x95\x5f\x03\x94\xff\xac\x42\x0f\x8b\xf5\x03\xa9\x51\x94\ +\x34\x43\xb7\x89\x57\x38\x04\x2c\x18\x05\x0f\x57\x9e\x4c\x91\x6b\ +\x28\xa8\x26\xc5\x45\x8d\x1d\x2e\x4f\x1e\xc8\x2f\x93\xe1\x14\xa0\ +\x12\x65\xd0\x41\xb6\x10\x45\x32\x36\x6c\xa2\xb9\x7e\x10\x98\x75\ +\x0e\x6e\x9d\x13\x60\xf7\x4d\x9a\x10\xcb\xcf\xbc\x33\x09\x02\x36\ +\x44\x25\x04\x40\xc9\x44\x35\xb9\x10\xb0\x88\xb1\x63\x24\x6e\xc2\ +\x3e\xb6\xbf\x27\x6a\xce\xfc\x08\x8e\xd5\x04\xd7\x2d\xe2\x16\x2a\ +\xe4\x01\x65\x56\x7a\x0e\x22\xc5\x88\x95\x12\xc3\xea\x73\x0a\x87\ +\x58\x5f\x01\xf9\xb2\x66\x38\xca\x60\x25\x05\x28\x1f\xdb\x4e\x21\ +\x9c\x64\x0a\x3d\xc2\x26\x6e\x0b\x64\x58\xe0\x40\x9c\xc8\x67\x88\ +\xbc\x54\xe4\x7d\xb5\x74\x15\x70\xa0\xd2\x2b\xc1\x82\x38\xb7\x60\ +\x93\x13\xff\xdb\x0b\x2c\x62\xc2\xe1\xe6\x36\x59\x82\xe3\x38\x7e\ +\x88\xc8\x0f\x03\xb2\x35\x54\x58\xe0\x28\x67\xf6\x3a\xc0\xf6\x82\ +\x0a\xaf\x04\x3d\x55\x40\xfd\x09\xf9\xa7\xd1\xd3\x40\x26\x0c\x24\ +\x8f\x02\x5a\xd2\x99\xe8\xec\x58\x2e\x14\x88\x39\x12\xa3\x53\xa8\ +\x78\x6f\x9e\xbc\x64\x3d\x3d\xb3\x45\xb0\xfd\xba\x74\x15\xb0\xcb\ +\x60\xe5\xd6\x01\xb6\x08\xfe\x29\xc0\xdc\x4b\xe1\x34\x91\x17\x61\ +\x6c\x2f\x10\xfa\x28\xe7\xbe\x85\xee\x4f\x10\x13\xfa\x84\xc3\xe5\ +\xf3\x6d\xe2\x90\x93\xbc\x4d\xd6\xd9\xf2\x12\xcc\xac\x24\x58\xe9\ +\x75\x80\x23\xbb\x17\x1a\x03\x82\x2d\x79\xb4\x5f\x98\x17\xe0\xe0\ +\x6b\xc0\x48\xa7\x33\x1c\x18\x01\x36\x79\xb3\xb5\xc9\x9b\x33\x7f\ +\xd4\x72\xfb\x32\x02\xc0\x1e\x53\x72\x1d\x20\x08\x15\x4d\x82\xb0\ +\x50\xce\x6a\x3a\x80\xd3\x6e\x05\xce\xb8\x17\xa8\x9e\x3e\x21\xce\ +\xed\x7c\x60\x9f\x5b\xe4\xb3\x16\x79\x09\xd4\x5a\x90\xca\x80\xa1\ +\xf8\xcb\x90\xa8\x64\x15\xc0\x24\x19\xdf\x50\xca\xaf\x32\xea\xe7\ +\x01\xe7\x2c\x07\x3a\x2e\x73\x84\x84\x0d\x93\xfc\x41\x22\x1f\xb2\ +\x49\x95\x03\x2b\x2d\x82\x30\xf4\xca\x57\x01\x22\x6a\x27\xaa\x48\ +\x0f\xb0\xee\x6e\x40\xe8\xf9\x73\x6f\x35\x10\x6c\x26\xb2\x27\x02\ +\xd3\x96\xd1\x79\x7d\xc1\x76\x22\x4e\xba\x01\xa8\x9b\x03\xec\x5c\ +\x09\x18\x9a\x95\x00\x09\x89\x03\x80\x62\x91\x17\x93\x00\x8e\x44\ +\x68\x1b\xb7\xa7\xad\x20\x1c\xb8\xe6\x8c\x16\x51\xe9\x32\x88\x89\ +\xe5\x4f\x07\xb2\x61\xc2\x30\x30\xba\x1d\xe8\x79\x16\x68\x5c\x04\ +\xcc\xfe\x33\xa0\xba\x1d\x0e\x6b\x39\x17\xf0\x90\x58\x9d\x14\x16\ +\x9a\x0a\x24\x7b\xec\x99\x17\x25\x92\x9c\x70\x10\x76\x92\x66\x13\ +\x20\x9c\x1e\x90\xfb\x55\xb1\x10\x60\x02\xce\x9a\x3f\x59\x19\xb3\ +\xb6\xba\x47\xb6\x00\x9b\x7f\x00\x7c\xb2\x8a\xba\xb2\x70\xd8\x94\ +\xc5\xc0\x92\xfb\x81\x74\x9f\x49\xbe\x78\xcc\xdb\xfd\xc7\x17\x1a\ +\xa6\xd9\x65\x90\x50\xa9\x24\x08\x51\x58\xd7\x6d\xf2\x85\xab\x3e\ +\x53\x88\x81\x35\x24\xc4\x1d\x40\x6a\x10\x0e\x6b\x3a\x13\x38\xf5\ +\xfb\x05\x64\xcb\x82\x4d\x1a\xff\xce\x7e\xf6\x3b\x5d\x09\x5a\x04\ +\xfd\x8d\x40\xfb\x05\x80\xbb\x2a\x17\x6f\x48\x0f\x01\xf1\x83\xc0\ +\x78\x17\x60\xa8\x13\x44\xa0\x36\x75\x18\xd8\x4a\x22\x2c\x79\x10\ +\xa8\x99\x8b\x4f\x6d\xfe\xdf\x00\xa3\x1f\x00\x87\x9e\x01\x50\x26\ +\xfe\x51\xc2\xf5\x25\x47\x9e\xc8\x83\xeb\xf6\xed\xa2\x32\xeb\x00\ +\xe7\xcc\xfb\xea\x80\xd6\xb3\x60\xdb\x52\x02\xf2\x2b\xc1\xa1\x77\ +\x80\xbe\xd5\x74\x1c\xb1\x17\x3b\x5a\x14\xd8\x7e\x17\x89\xf0\xcf\ +\x4e\x11\xce\x7c\x04\x18\x79\xd7\xac\xfd\xc5\xe3\x9f\x17\xf5\x4f\ +\x27\x69\xc9\x3e\x17\x10\x16\xf1\x8a\x87\x80\xed\xee\x93\x9a\x3b\ +\x08\xb4\x5f\x05\x9c\xf5\x53\xa0\x71\xa9\xf3\xe5\x66\x7c\x2b\xb0\ +\xfe\x72\x40\x8b\xd9\xe3\x3d\x0d\xa4\xdd\x4f\xca\xd7\x7c\x66\xb7\ +\x36\x8a\x84\x06\x9b\xc4\xa1\x2a\x23\x80\x73\x25\x58\xd2\x3c\xf5\ +\xc0\xe2\xfb\x80\xb6\x2b\xf2\x5e\x90\xd8\x07\x28\x47\x80\x54\x0f\ +\xb0\xfd\x56\x38\xac\xfd\x5a\xa0\xe1\xb4\xcf\x50\xfb\x4b\xc2\xb1\ +\x12\x14\xa2\x62\x02\x70\x0b\x02\x50\x62\x40\x78\x17\x30\xb2\x0d\ +\x48\x0e\x4e\xf2\x2d\x0c\x98\xfb\x5d\xa0\xf1\x4c\x20\x3b\x68\x3f\ +\x78\xff\x53\x74\xcf\x3b\x13\x86\x51\xe7\x29\xf7\x1d\x67\x22\x2c\ +\x71\xcc\x9c\xc4\x05\x2a\x97\x03\xec\xfa\x3f\xbe\x17\xd8\x70\x1b\ +\x00\xdd\x0a\x09\xeb\x05\xa9\xe3\x4a\x60\xc6\xc5\xce\xa5\xd9\xc2\ +\x1f\x11\xe1\xdf\x02\x91\x4e\xfb\x41\x77\xdf\x05\x5c\xb8\xd5\x1e\ +\xd7\x4a\x61\x13\x6c\x03\x92\xfd\xce\xd8\x67\x36\x0a\x63\xbd\x04\ +\x80\xcf\xb6\x27\xf8\xe0\x7d\x37\x2d\xdc\xf2\xf6\x4f\xa5\xd2\x55\ +\x80\xc0\x55\xe7\x92\x18\x84\x4c\x08\xd8\xfb\x18\xb0\xfd\x87\x80\ +\x91\x99\xf0\xc9\x6e\xe0\x0b\xbf\x06\x5c\x2e\x7b\x16\xe3\xdb\x80\ +\xd1\x89\x5e\x20\x03\xed\xdf\x2c\x3b\xf3\x4e\x14\xef\x17\xec\x33\ +\xe6\x80\xb7\x37\xf7\xae\x7e\x6b\xc3\xbe\x5f\x90\x08\xac\x68\x0e\ +\x28\xdc\xf3\x73\x2e\x90\xc6\x3a\x81\x0f\x6f\xb4\xfa\x2c\xab\x9e\ +\x0f\xb4\x5d\xe7\x8c\xe3\xfe\x5f\xc2\x61\xd3\xaf\x2e\x41\xba\x4c\ +\xdc\xa3\xe0\xdc\x0e\x83\xe3\xc9\x01\xe3\x8a\x9e\xed\xdc\x35\x38\ +\x7f\xc7\xee\xc1\x7f\x25\x11\x4a\x6f\x89\x81\x3b\x84\xb0\x77\x6f\ +\xf7\x00\x87\x9f\x03\xf6\xac\x84\xc3\xe6\xdd\xe5\x24\x37\xba\x06\ +\x30\xd2\xf6\xf5\xda\xc5\x80\x7f\x6a\x01\xe9\xe3\x24\x6e\x0b\x20\ +\x3e\x83\x07\x24\x33\x19\x43\x81\xfb\xce\xd7\xdf\xec\xba\xe6\x50\ +\xff\xd8\x43\xc5\xdf\x06\x09\x81\x16\xe0\x8c\x1f\x03\x17\x3d\x4f\ +\xed\x0a\x20\x38\x33\x4f\x3e\x3d\x80\x9c\xed\xa5\x9a\xaf\xc5\x27\ +\x78\xc1\xc9\x40\xcd\x7c\x9b\x94\x20\xf2\xd1\x0f\x9d\x49\x73\xca\ +\xd9\x85\xa4\x51\x36\xde\x0b\xc9\x33\x27\x71\x21\xb9\xe5\x63\x12\ +\x20\x95\xc9\x1a\x29\xdd\xc8\x8e\x45\x92\xb7\x3c\xbb\x7a\xeb\x3d\ +\x6b\x5f\x78\xf0\x9e\xc2\x3f\x8d\xf1\x7c\xe6\x5e\x72\x27\x50\x6f\ +\x12\x72\x01\x75\xd4\x9e\xbe\xc2\x76\x7b\x86\xfc\xe2\xe7\xc8\xab\ +\x70\xd8\xd4\x8b\x9d\x33\x1b\xdb\x0c\x87\xd5\x2e\x3a\x0e\xa2\x65\ +\x44\x80\x05\xfa\xb5\xcb\x77\xfa\x2f\x96\x3f\x70\xeb\xeb\x8f\x3d\ +\xfc\xc3\xef\xfc\xec\x27\xf7\x4e\x2f\x5a\x05\x32\x8a\xa2\x27\xd2\ +\x19\xff\xf6\x4d\x9b\x5e\x5a\xba\x74\xe9\x6b\xcf\xbc\xbc\xf9\xa1\ +\x0f\xff\x7b\xe5\xc8\xd9\x97\xfc\xc3\x2a\x47\x12\xac\x99\x0d\x54\ +\xb5\xc0\x61\xee\x1a\xe0\xe4\xef\x01\xdb\xbf\x6f\xf7\x8d\x6e\x00\ +\x3a\xbe\x39\xc1\x0b\x4e\x71\xba\x77\x66\x1f\x1c\x56\x75\xc2\xf1\ +\x91\x47\x89\xbe\x09\x25\x70\xe3\xa6\x2e\xcf\x86\xa1\xfd\x97\x37\ +\xd4\xd7\x5e\x3e\x73\x66\x8b\xf8\xea\xd5\x57\xec\x9a\x36\x6d\xda\ +\x7b\x55\x55\x35\xeb\x33\x59\xf5\x83\x7f\x7b\xe4\xe7\xa3\x39\x01\ +\x14\x4d\xe3\x14\x06\x7e\x90\x71\xce\xff\x76\x67\x77\xff\xb9\x2f\ +\xbd\xb1\xed\x71\xca\x07\xc3\x38\xfc\xa4\x2d\x80\x96\x29\xb2\xf9\ +\x71\x0a\x1c\x96\x19\x80\xc3\x7c\xcd\xce\x87\x56\x87\xe0\x30\x6f\ +\x4b\x59\x82\xe5\xc9\x3b\x63\x9f\x83\x61\x6a\x9d\xf7\xad\xda\x54\ +\xed\x02\x26\xb9\x5a\x87\x47\xa2\x6c\x6c\x3c\xb9\xa8\xb7\x6f\x68\ +\x91\x2c\xcb\xb7\xa9\xaa\xca\xe7\xcc\x99\x73\x7b\x4e\x00\x5d\xd7\ +\x59\x3a\x9b\x0d\x80\x6c\xc7\x8e\x1d\x83\x0b\x16\x2c\xf8\xbb\x35\ +\x6f\xef\x7c\xba\x65\x5a\xed\x73\x27\x9d\x30\x53\x0e\x72\xc3\xda\ +\xc1\xe9\x07\xd2\x47\x81\x40\x33\x1c\x96\x3c\x0c\xe7\x02\x5c\x86\ +\xc3\x5c\xb5\xce\x35\xbf\x91\x82\xc3\xe4\x2a\x1c\x97\xb1\xc9\xfb\ +\x46\xb2\x3e\xbc\x1f\xa9\xc3\xc1\x4c\x2d\x0e\x67\x6b\x30\x1e\x4b\ +\x5f\xa4\xeb\x49\xc4\x62\x31\x28\xe4\xe5\x84\x7d\xc4\xb5\x95\x73\ +\x5e\x6f\xf9\xe2\x2c\xf3\x17\xb8\x10\x8c\xf2\x40\x10\x96\x75\x77\ +\x77\x3f\x63\x18\xc6\xd3\xff\xf9\xf4\xba\xc0\x6b\x91\xb9\x72\x5a\ +\x78\x00\x6e\xfd\xe3\xc8\xf5\xb7\xe5\x57\x83\xb0\x2c\x3b\x0a\xec\ +\x7c\xc8\x49\xb0\xaa\x03\x0e\xd3\xe3\x70\xee\xef\x7b\x50\x60\xf6\ +\xfd\xc7\x65\xe3\x59\x37\x7e\xb5\xb7\x19\xd7\xbf\xbd\x00\xcb\xfb\ +\xcf\xc5\x7b\xb1\x99\xd8\xdc\xaf\xe0\xc0\xde\x2e\xd4\x25\xba\x51\ +\xa7\xf4\x3f\x5a\x53\x53\x73\xe1\xca\x95\x2b\x67\x90\x00\x4b\x67\ +\xcf\x9e\xdd\x23\x49\x12\xac\x6f\x7a\xcb\x05\xb2\x80\xcf\xd3\x94\ +\x55\x95\x46\x4c\x30\x12\xe0\x26\x55\x35\x4e\x5e\xfe\xd8\xda\xd3\ +\x3c\xb7\x5c\x86\xcb\x9b\xfa\xe0\x33\x5f\x7b\x93\x7d\x24\xf5\x26\ +\x60\xee\xd7\xf3\x1a\xf6\x3c\x01\xa8\x24\x82\x3c\xe1\xe1\x5b\x2e\ +\x83\xc3\x52\xbd\x36\x79\x46\x90\xeb\xe1\x30\x6d\x1c\x10\xc7\x21\ +\x82\x99\xe0\x46\xaa\xf0\xec\xee\xa9\xd8\x12\x9e\x06\x4d\xd7\x10\ +\x8f\x8f\x43\x44\xdf\xc3\xe5\x73\x0d\xcc\x59\xe4\xc3\x89\xb3\xda\ +\xe0\xad\x6d\xa6\x3c\x7d\x41\x5f\xfb\x95\xf7\x0c\x03\x10\x0f\x3f\ +\xfc\x30\x23\x5b\x2c\x44\x2e\x6b\x5f\x4d\x78\xc3\x75\xcf\xdf\x5f\ +\x83\xc7\xd6\xee\x6c\x4a\xa6\xd5\x16\xcb\x2d\x38\x01\x07\x0f\x1e\ +\x4c\xb7\xb5\xb5\x7d\x25\x1a\x49\x6c\x5d\xf1\xcb\xdf\x36\xc9\x37\ +\x7e\x11\x97\x64\x87\xe0\x96\x00\x16\xeb\x07\xdb\xfe\x2f\x80\x79\ +\x2c\xe3\xd3\xed\x6c\xc6\xac\x87\xdf\xf9\x03\xe0\xc0\xa3\x66\xc9\ +\xcc\x23\xfc\x2e\xc0\x27\xb8\xaf\x6f\x0e\x1c\xa6\x5a\x02\x38\x45\ +\x98\xb4\x6f\xf3\x60\x10\xab\xb6\x35\x63\xd3\x61\x2f\xa2\xd1\x08\ +\x62\x91\x8f\xf1\xa5\x39\x0a\x7e\x74\x9e\x84\xf3\x17\xce\x04\xab\ +\x9b\x87\x3d\x83\x40\x64\xe8\x10\xa2\x07\x3b\x11\xee\xdd\x79\xf0\ +\x9d\x70\xf3\x01\x00\x7c\xc5\x8a\x15\xcb\xc8\x1b\x3c\x24\xc0\xeb\ +\x00\x72\xa5\xca\xd5\xd8\x58\x23\x65\x15\xad\xdf\xd0\x35\x0e\xa0\ +\x86\x90\x26\x68\x04\x31\xbb\xbf\xff\x70\xf4\x84\xa6\xeb\x87\x8e\ +\x8c\xac\x59\xf1\xe4\x26\x96\xb9\xfa\x6a\x9c\x6f\xbc\x08\x8f\xac\ +\x41\x96\xcd\x4a\x48\xa0\x56\xa6\x96\x59\xe7\x8c\x13\xc2\x5d\x60\ +\x11\x82\x9c\xaf\x9c\x29\x5d\xc6\xa1\xb1\x00\x8e\xc4\x3c\x18\x8a\ +\x7a\x10\x7a\xf5\xbf\x10\xd3\xd7\x21\xcd\xa6\x23\x65\xd4\x01\x24\ +\x6c\x2d\xef\x40\x8d\xcf\xc0\xd4\x6a\x0d\x73\x9b\x32\x58\x36\x23\ +\x85\x29\x7e\x1d\xa6\x0d\x27\xdc\xd8\x70\xb0\x1a\x2f\x75\x4d\xc1\ +\xc7\x83\x12\xc2\xe1\x30\x22\xe3\xe3\xf8\x8b\xa5\xc0\x03\x37\x07\ +\x70\xe2\xbc\x2f\xe4\x12\xb1\x88\x1d\x81\x31\xb4\x1d\x91\x7d\x31\ +\xa4\x14\x91\x4f\x37\x6e\xb7\x35\x45\x60\x2d\x2d\x2d\x17\x9b\xf9\ +\x80\xec\x79\x58\xe6\xba\xfd\xde\x55\x1c\x5e\xff\x12\xa8\x59\x93\ +\xfc\x14\x42\x15\x21\x46\xc8\x10\xf8\x99\xd3\x47\xd7\x6d\x3c\x5c\ +\xf7\x60\x6f\xdf\x91\xfb\x1f\x7e\x49\x42\xf4\x4f\xaf\xc2\x32\x75\ +\x35\x3c\x2e\x1d\x2e\x57\x9e\xbc\xcb\x12\x81\x13\xdb\x50\xda\x8b\ +\xc1\xb8\x17\xfd\x51\x1f\x8e\x24\x83\xd8\x3f\xec\x42\x6f\x48\x43\ +\x3a\x93\x45\x36\x9b\x85\xaa\x66\x20\x44\x1a\x3e\x5f\x06\x81\xc0\ +\x28\x82\xf2\x18\x3c\x48\x23\x6f\x12\x09\xe4\x42\x46\xf7\xc0\xef\ +\xaf\xc7\xec\x66\x2f\x3d\x5a\x35\x14\xe1\x43\x86\xee\x1f\x0a\x8d\ +\x20\x3c\x36\x86\xa0\x17\x78\xed\x8e\x7a\x5c\xf2\x27\xe7\x03\xb5\ +\x27\x43\x28\x29\x18\x07\xd7\xe6\x04\x10\x06\xc0\x49\x79\xc1\x04\ +\x84\xe0\x74\xec\xca\x15\x5f\xf3\xbb\xeb\xeb\xeb\xaf\xef\xeb\xeb\ +\xcb\x80\x6e\x77\xbe\x0d\x2a\xf4\xe9\x00\xb7\x50\x47\xf0\x13\xa2\ +\x9b\x81\x44\xbb\x0e\x76\x61\x7b\xf4\xb9\xf7\x0e\xd7\xce\x3e\xd4\ +\x37\xf0\x97\x4f\xbc\xc9\xb0\xff\xa4\xf3\x35\x79\x74\x4b\xca\x60\ +\xae\xa0\xaf\xaa\xc6\xe5\xae\x9e\x82\x81\xa8\x84\x81\x31\x8e\x68\ +\x3c\x8d\x54\x2a\x83\x44\x32\x8d\x80\x34\x88\x93\x5a\x75\x5c\xbb\ +\x54\xc2\xbc\x19\x40\x5b\xb3\x84\xf6\xd6\x20\x9a\xbf\xf4\x22\x24\ +\x33\x51\xba\x48\xf3\x9d\x37\x83\x99\x9b\x26\xba\x02\x28\x49\x30\ +\x35\x85\xa7\xd6\xeb\xb8\xf1\x3f\x52\x18\x19\xe1\x85\xc9\x9e\x01\ +\xab\x6f\x0b\xe0\xbc\x2b\xbe\x05\xe1\x69\x82\x48\x0e\x43\xdb\xf7\ +\x12\x90\x49\x12\x61\x19\x0c\xc8\x91\xe7\xd6\x96\x92\x90\x68\xa6\ +\x00\xf6\xca\x2b\xaf\xdc\x10\x08\x04\x66\x47\xa3\xd1\x55\x20\x5e\ +\xc5\x0a\x8a\x8b\x10\x24\x34\x10\xbc\x84\x64\x73\x10\x89\xf3\xe7\ +\x81\x35\x04\x51\xfb\x9b\xfd\x0d\x77\x29\xdc\xfd\xdd\xd6\xd6\x56\ +\xf4\xf7\xf7\xa1\x2a\xe0\x05\x37\x34\x84\x86\x23\x30\x0c\x8e\x69\ +\xb5\x14\x87\xf3\x25\x9c\x3b\x8f\xe1\x82\xa5\x4d\x68\x9f\x3d\x8b\ +\x2a\x5c\x13\x98\xbf\x01\xcc\x5b\x0b\xe6\x0e\x82\x41\x03\xb8\x92\ +\x03\x33\xb2\x10\x6a\x14\x2c\x3d\x08\xa4\x87\x73\xdb\xec\x4c\xcb\ +\xe2\xd0\x51\x81\xb3\x97\xd7\x62\x24\x1c\x01\x59\x6e\xc6\x3b\x1a\ +\x25\xec\x09\x01\xa7\xb5\x09\x7c\xf0\xb3\x0b\x20\xd1\xeb\x37\x4f\ +\x47\xa0\xed\x79\x06\x22\x9b\xb4\x37\xaa\x75\x81\x4d\x07\x38\x14\ +\x8d\x83\x09\xae\x27\x1b\x16\x2f\x7c\xba\xa7\x4e\x27\xf2\x5b\x3e\ +\xfa\xe8\x23\xcf\xc0\xc0\xc0\xa9\x00\x7a\x8b\xed\x07\xe8\x84\x38\ +\x41\xb5\x44\xa8\x1d\x4e\x22\xf0\x7a\x17\xa2\x27\x35\x23\x7c\xde\ +\xac\xc8\x9d\xef\xf6\x35\xb3\xde\xde\xde\x9b\xcd\x58\x22\x6f\xb4\ +\x66\x85\xe1\x9c\x39\xae\xc8\xbd\x5f\x9f\xe5\x9f\xb5\xe8\x42\x6f\ +\xb0\x75\x21\x73\xfb\x82\x48\x0b\x05\xc4\x90\xa0\x10\x31\x82\xaa\ +\xd0\x61\x14\x3c\xd9\x9f\xdb\x2c\x91\x94\x10\x24\x3d\x01\x99\x09\ +\xc8\x42\x40\x12\x66\xcb\xd0\x3d\x5c\x0d\x0e\x39\x37\xdb\x37\x9e\ +\x03\x7c\xeb\x6c\x50\x68\x00\x7f\xfd\x42\x2d\x66\x34\x24\x10\x97\ +\xdb\xe0\x4a\x2b\x48\xed\x5a\x0d\x91\xce\xd0\x7d\x66\xfc\x09\x08\ +\x9d\x23\x95\x11\x54\x1a\x01\xb3\x27\x65\xf8\x1e\x79\x64\x7d\xba\ +\xba\x75\x7a\xfd\xbf\xf7\xf4\xf4\xd4\x11\xf9\x1b\x4c\xf2\xe5\x36\ +\x44\xb8\x15\xff\x23\x04\x45\x00\x8d\x29\x15\x53\x3b\xfb\x11\xdb\ +\xd6\x2f\xc6\x5b\x1b\x95\xef\x69\x9a\x36\x04\xe0\xdb\x84\x36\x02\ +\xbc\x6e\xb9\x77\xd9\x89\x35\xf7\xb6\x5f\xf9\xe8\x75\x35\x53\x5a\ +\xda\x54\x25\x2d\xa5\x33\x09\xb7\xa6\xa6\x5d\x4a\x72\x14\xa3\xfd\ +\xbd\x99\x70\xff\xc7\x6e\x23\xbe\xbf\x5a\x36\xe2\xbe\x80\x57\x54\ +\x79\x3d\xc2\x13\xf0\x08\x29\xe0\x61\xb9\xca\xe2\x22\xb8\x19\xc0\ +\x0d\xe0\xdd\x81\x39\x48\x24\xba\x30\xb3\x1e\x5b\x82\x6e\xec\x79\ +\x6d\x07\x6a\x3d\x2e\x51\x27\x04\x3f\xef\x70\x18\xfa\xc7\x3d\x11\ +\xc9\x88\xbf\x2a\xf3\x78\x04\x01\xb7\xcc\x3c\x4c\x80\x71\x01\x45\ +\x15\x62\xdf\x30\xd4\xa3\x09\x36\x7a\x28\xea\xde\xf8\xe1\xa0\xdf\ +\x35\xeb\xc4\xa6\xd5\x54\xd1\x9a\xf7\xee\xdd\x7b\x37\x80\x5f\x1d\ +\xeb\x8e\x90\xb0\xbc\x60\xdc\x6a\x1b\x09\x0d\x02\x08\x1c\x09\x8f\ +\x87\x01\xac\x90\x65\xf9\x9f\x7c\x3e\xdf\xf6\x54\x2a\xb5\xd0\xe3\ +\xf5\xbe\xdc\x71\xfa\xd5\xef\xcf\x3e\xe5\xec\xaf\x09\x2e\x06\x0c\ +\x43\x53\xe2\x91\x70\xf7\xde\x1d\x1b\x77\x6f\xfc\xcd\x93\xa3\xaa\ +\x9a\xf6\x41\x57\x7d\x86\x11\x0c\x08\xdd\x5b\x25\xb8\x56\x45\xa1\ +\x13\x64\x42\xaf\x97\x99\xde\xe0\x96\x8c\xda\x6a\x9f\x41\x2d\x0f\ +\xc6\xa4\x99\xf3\x3b\xfb\xa4\x2a\x55\x51\xe2\x0b\xe6\xe0\x0e\x83\ +\x23\xab\xab\xf0\x65\x54\xe1\xf3\xbb\xb8\xa7\xfb\x88\xb1\x64\xcd\ +\x3b\x9d\xcf\xca\x2e\xd6\x00\x78\x83\x0c\xc2\xc7\x60\xb8\x05\x87\ +\x94\x48\xc3\x08\xa7\xb8\x72\x24\x2a\xbc\x9a\x67\xda\x17\x3b\xe6\ +\xcc\x98\xd1\xd5\xd5\x95\x08\x85\x42\xf7\x00\x78\xf4\xb3\x6c\x89\ +\x19\x84\x84\x25\xc2\x14\x0b\x33\x08\x11\xc3\x30\xc6\x1a\x1a\x1a\ +\xb6\x64\x32\x99\x85\xfe\x40\x70\xd7\x57\x6e\xbc\x77\x9a\xcb\xed\ +\x35\xb3\xed\xfb\x5d\xbb\xf7\xbc\xb1\xa3\x73\x6b\x94\x43\x97\x1a\ +\x4f\xfa\x32\xe3\x5c\x65\xa4\x89\xc4\xf5\x2c\x33\xd4\xb4\xa4\x2b\ +\x29\x49\x57\x93\x32\x65\x6f\x59\xa3\x96\x67\x53\xee\x31\x2d\xed\ +\x19\x1c\x63\x0b\xdd\xcd\xcb\x1e\xdd\xd9\xf5\x3a\x24\x86\x07\x3b\ +\xa6\x62\x9b\x00\x1d\x6a\x90\xb8\x4c\xe9\xc4\xa5\xde\x3e\x2c\xd8\ +\x5b\x4f\xae\x1f\x9b\x75\xe1\xb2\x59\xcf\xb7\x34\xf8\xd3\xe3\xb1\ +\xd4\xb4\xd1\x68\xfa\x84\x70\x4c\x9f\x6f\x48\xfe\x99\x9e\x40\x5d\ +\xa3\xab\xc6\x1f\x8c\x86\xc3\xea\xce\xee\xf7\x5e\xd6\x75\x7d\x39\ +\x80\x5d\x04\xed\xf3\xfc\xaf\x31\x66\x89\x55\x4b\x98\x6a\x95\xca\ +\x24\xd5\xd5\x9b\xa8\x26\xdf\xd6\xdc\xdc\xfc\x0d\x7a\x87\x50\xd2\ +\xe9\x74\xe2\x8d\x37\xde\xd8\x3d\xc9\x96\x86\x80\x05\xd3\x98\x10\ +\x9c\xc3\xe0\x42\x37\xe8\x48\xe5\x86\x9a\x11\xdb\xb6\xed\xa8\x86\ +\xb7\x7a\xed\xde\xbd\x9f\xcc\xeb\xec\xec\xdc\x0e\xe0\x4c\x82\xfe\ +\x8f\x00\xd6\x2d\x06\x4b\x8d\x83\x45\x63\x90\x7b\x13\xec\x2c\xba\ +\xf3\x79\xb7\xdb\xdd\xec\xf5\x7a\x55\x6a\x99\xcb\xe5\x72\x93\x81\ +\xc8\x1a\xf1\x78\x7c\xbf\xa2\x28\x6b\x01\xfc\x5a\x08\xd1\x5d\x40\ +\xbc\x9c\x07\x94\x08\x09\x8d\x10\x21\x28\x84\x26\xc2\x14\x55\x55\ +\xe3\xe6\xba\x9a\xda\xa6\x97\xc9\xc8\x2b\x38\x00\x97\x53\x00\xe7\ +\x9f\x3d\x18\x63\x1c\x8c\x41\xa2\x1f\x78\xdc\x02\xf0\xf1\x77\x37\ +\x7c\xd4\xee\xf7\x57\x3d\x91\x88\xc6\xe6\x6d\xdb\xb6\x6d\x14\xc0\ +\x35\xd6\x78\x99\x04\x90\xf0\x31\x64\xab\x2a\xd5\xe4\x77\x54\x70\ +\x0b\xe5\xa1\xb3\x08\xb5\xd6\x73\x85\x09\xfb\x09\xa6\x70\x7d\xd6\ +\x62\x4e\x54\x66\x57\xb8\x30\x24\x92\xd6\x97\x66\x69\xc6\x37\x92\ +\x00\x4a\x22\x91\x38\xe3\xc0\x81\x03\xaf\x51\x79\xe4\x74\x2e\x13\ +\x49\x13\x92\x55\x21\x72\xe4\xf3\x13\x2f\x0c\xab\x95\x48\x2c\xb1\ +\x6e\xdd\xba\x36\xba\x7e\x3d\x2d\x4f\xbf\x73\xe8\xd0\x21\xff\xa6\ +\x4d\x9b\xc6\xe9\xda\x5f\x01\xc8\x12\xda\x26\x7c\xa7\x36\xc1\x0b\ +\x93\x84\xdd\x84\x4e\x42\x8a\x90\xb1\x26\x45\x2f\x47\xba\x74\x08\ +\x1c\xff\x7d\x32\x21\xe0\xf1\x78\xbe\x4d\x1e\xb0\x9c\xc2\x60\xe5\ +\xa9\xa7\x9e\xba\x9e\x92\xa3\x9b\x5c\x93\x51\x82\xe4\xe4\x9a\x3a\ +\x09\xa2\x72\xce\x0d\x1a\x23\x28\x5f\xc8\xe3\xe3\xe3\x33\xfc\x7e\ +\xff\x29\x34\xe6\x22\x6a\x97\x51\x82\x62\x94\xa1\x0d\xea\xff\x10\ +\xc0\x2a\xc2\x51\x8b\x50\xc2\x2a\xc9\xb1\x1c\x51\x27\x41\x6e\x41\ +\xe0\x73\x1a\xab\xc0\xfd\x26\xae\x63\x8c\x3d\x4c\xa4\x6a\xab\xaa\ +\xaa\x86\x89\x58\x8a\xda\x0c\x09\x20\x3c\x79\xf3\xd1\xf5\x06\x42\ +\x8d\x39\xfb\xe4\x39\x88\x44\x22\xc6\xd0\xd0\x50\x2f\x79\xc2\x06\ +\x6b\x69\x3a\x60\x11\x4d\x12\xd2\x96\x08\x9a\x4d\xf6\x77\x63\x0c\ +\x95\xb3\x2a\xc2\x97\x09\xa7\x13\xda\x2c\xc2\x75\x04\x37\xe7\x5c\ +\xb2\x5e\x41\x23\x84\x83\x84\x6e\xc2\xfb\x84\x7e\x6b\xa6\x8d\x72\ +\x7f\xd6\xfb\x03\x10\xa0\xf0\xf3\x1c\xff\x0a\xc0\xf9\x17\x56\x81\ +\xdf\x13\xfb\x1f\x84\xaf\xe2\x02\x22\xe6\xe9\x93\x00\x00\x00\x00\ +\x49\x45\x4e\x44\xae\x42\x60\x82\ +" + +qt_resource_name = b"\ +\x00\x10\ +\x0f\xad\xca\x47\ +\x00\x68\ +\x00\x65\x00\x6c\x00\x70\x00\x2d\x00\x62\x00\x72\x00\x6f\x00\x77\x00\x73\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0a\ +\x08\x99\x64\x87\ +\x00\x6b\ +\x00\x63\x00\x68\x00\x61\x00\x72\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0b\ +\x01\xad\xab\x47\ +\x00\x64\ +\x00\x69\x00\x67\x00\x69\x00\x6b\x00\x61\x00\x6d\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x1a\ +\x08\xdd\xe1\xa7\ +\x00\x61\ +\x00\x63\x00\x63\x00\x65\x00\x73\x00\x73\x00\x6f\x00\x72\x00\x69\x00\x65\x00\x73\x00\x2d\x00\x64\x00\x69\x00\x63\x00\x74\x00\x69\ +\x00\x6f\x00\x6e\x00\x61\x00\x72\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x07\ +\x0e\x95\x57\x87\ +\x00\x6b\ +\x00\x33\x00\x62\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0d\ +\x0b\x34\x2d\xe7\ +\x00\x61\ +\x00\x6b\x00\x72\x00\x65\x00\x67\x00\x61\x00\x74\x00\x6f\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x01\ +\x00\x00\x00\x40\x00\x00\x00\x00\x00\x01\x00\x00\x2e\x67\ +\x00\x00\x00\x26\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x4c\ +\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x3b\x71\ +\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x70\xa9\ +\x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x50\x89\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/dialogs/classwizard/classwizard.py b/examples/widgets/dialogs/classwizard/classwizard.py new file mode 100755 index 0000000..c85ea5b --- /dev/null +++ b/examples/widgets/dialogs/classwizard/classwizard.py @@ -0,0 +1,404 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets + +import classwizard_rc + + +class ClassWizard(QtWidgets.QWizard): + def __init__(self, parent=None): + super(ClassWizard, self).__init__(parent) + + self.addPage(IntroPage()) + self.addPage(ClassInfoPage()) + self.addPage(CodeStylePage()) + self.addPage(OutputFilesPage()) + self.addPage(ConclusionPage()) + + self.setPixmap(QtWidgets.QWizard.BannerPixmap, + QtGui.QPixmap(':/images/banner.png')) + self.setPixmap(QtWidgets.QWizard.BackgroundPixmap, + QtGui.QPixmap(':/images/background.png')) + + self.setWindowTitle("Class Wizard") + + def accept(self): + className = self.field('className') + baseClass = self.field('baseClass') + macroName = self.field('macroName') + baseInclude = self.field('baseInclude') + + outputDir = self.field('outputDir') + header = self.field('header') + implementation = self.field('implementation') + + block = '' + + if self.field('comment'): + block += '/*\n' + block += ' ' + header + '\n' + block += '*/\n' + block += '\n' + + if self.field('protect'): + block += '#ifndef ' + macroName + '\n' + block += '#define ' + macroName + '\n' + block += '\n' + + if self.field('includeBase'): + block += '#include ' + baseInclude + '\n' + block += '\n' + + block += 'class ' + className + if baseClass: + block += ' : public ' + baseClass + + block += '\n' + block += '{\n' + + if self.field('qobjectMacro'): + block += ' Q_OBJECT\n' + block += '\n' + + block += 'public:\n' + + if self.field('qobjectCtor'): + block += ' ' + className + '(QObject *parent = 0);\n' + elif self.field('qwidgetCtor'): + block += ' ' + className + '(QWidget *parent = 0);\n' + elif self.field('defaultCtor'): + block += ' ' + className + '();\n' + + if self.field('copyCtor'): + block += ' ' + className + '(const ' + className + ' &other);\n' + block += '\n' + block += ' ' + className + ' &operator=' + '(const ' + className + ' &other);\n' + + block += '};\n' + + if self.field('protect'): + block += '\n' + block += '#endif\n' + + headerFile = QtCore.QFile(outputDir + '/' + header) + + if not headerFile.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text): + QtWidgets.QMessageBox.warning(None, "Class Wizard", + "Cannot write file %s:\n%s" % (headerFile.fileName(), headerFile.errorString())) + return + + headerFile.write(str(block)) + + block = '' + + if self.field('comment'): + block += '/*\n' + block += ' ' + implementation + '\n' + block += '*/\n' + block += '\n' + + block += '#include "' + header + '"\n' + block += '\n' + + if self.field('qobjectCtor'): + block += className + '::' + className + '(QObject *parent)\n' + block += ' : ' + baseClass + '(parent)\n' + block += '{\n' + block += '}\n' + elif self.field('qwidgetCtor'): + block += className + '::' + className + '(QWidget *parent)\n' + block += ' : ' + baseClass + '(parent)\n' + block += '{\n' + block += '}\n' + elif self.field('defaultCtor'): + block += className + '::' + className + '()\n' + block += '{\n' + block += ' // missing code\n' + block += '}\n' + + if self.field('copyCtor'): + block += '\n' + block += className + '::' + className + '(const ' + className + ' &other)\n' + block += '{\n' + block += ' *this = other;\n' + block += '}\n' + block += '\n' + block += className + ' &' + className + '::operator=(const ' + className + ' &other)\n' + block += '{\n' + + if baseClass: + block += ' ' + baseClass + '::operator=(other);\n' + + block += ' // missing code\n' + block += ' return *this;\n' + block += '}\n' + + implementationFile = QtCore.QFile(outputDir + '/' + implementation) + + if not implementationFile.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text): + QtWidgets.QMessageBox.warning(None, "Class Wizard", + "Cannot write file %s:\n%s" % (implementationFile.fileName(), implementationFile.errorString())) + return + + implementationFile.write(str(block)) + + super(ClassWizard, self).accept() + + +class IntroPage(QtWidgets.QWizardPage): + def __init__(self, parent=None): + super(IntroPage, self).__init__(parent) + + self.setTitle("Introduction") + self.setPixmap(QtWidgets.QWizard.WatermarkPixmap, + QtGui.QPixmap(':/images/watermark1.png')) + + label = QtWidgets.QLabel("This wizard will generate a skeleton C++ class " + "definition, including a few functions. You simply need to " + "specify the class name and set a few options to produce a " + "header file and an implementation file for your new C++ " + "class.") + label.setWordWrap(True) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(label) + self.setLayout(layout) + + +class ClassInfoPage(QtWidgets.QWizardPage): + def __init__(self, parent=None): + super(ClassInfoPage, self).__init__(parent) + + self.setTitle("Class Information") + self.setSubTitle("Specify basic information about the class for " + "which you want to generate skeleton source code files.") + self.setPixmap(QtWidgets.QWizard.LogoPixmap, + QtGui.QPixmap(':/images/logo1.png')) + + classNameLabel = QtWidgets.QLabel("&Class name:") + classNameLineEdit = QtWidgets.QLineEdit() + classNameLabel.setBuddy(classNameLineEdit) + + baseClassLabel = QtWidgets.QLabel("B&ase class:") + baseClassLineEdit = QtWidgets.QLineEdit() + baseClassLabel.setBuddy(baseClassLineEdit) + + qobjectMacroCheckBox = QtWidgets.QCheckBox("Generate Q_OBJECT ¯o") + + groupBox = QtWidgets.QGroupBox("C&onstructor") + + qobjectCtorRadioButton = QtWidgets.QRadioButton("&QObject-style constructor") + qwidgetCtorRadioButton = QtWidgets.QRadioButton("Q&Widget-style constructor") + defaultCtorRadioButton = QtWidgets.QRadioButton("&Default constructor") + copyCtorCheckBox = QtWidgets.QCheckBox("&Generate copy constructor and operator=") + + defaultCtorRadioButton.setChecked(True) + + defaultCtorRadioButton.toggled.connect(copyCtorCheckBox.setEnabled) + + self.registerField('className*', classNameLineEdit) + self.registerField('baseClass', baseClassLineEdit) + self.registerField('qobjectMacro', qobjectMacroCheckBox) + self.registerField('qobjectCtor', qobjectCtorRadioButton) + self.registerField('qwidgetCtor', qwidgetCtorRadioButton) + self.registerField('defaultCtor', defaultCtorRadioButton) + self.registerField('copyCtor', copyCtorCheckBox) + + groupBoxLayout = QtWidgets.QVBoxLayout() + groupBoxLayout.addWidget(qobjectCtorRadioButton) + groupBoxLayout.addWidget(qwidgetCtorRadioButton) + groupBoxLayout.addWidget(defaultCtorRadioButton) + groupBoxLayout.addWidget(copyCtorCheckBox) + groupBox.setLayout(groupBoxLayout) + + layout = QtWidgets.QGridLayout() + layout.addWidget(classNameLabel, 0, 0) + layout.addWidget(classNameLineEdit, 0, 1) + layout.addWidget(baseClassLabel, 1, 0) + layout.addWidget(baseClassLineEdit, 1, 1) + layout.addWidget(qobjectMacroCheckBox, 2, 0, 1, 2) + layout.addWidget(groupBox, 3, 0, 1, 2) + self.setLayout(layout) + + +class CodeStylePage(QtWidgets.QWizardPage): + def __init__(self, parent=None): + super(CodeStylePage, self).__init__(parent) + + self.setTitle("Code Style Options") + self.setSubTitle("Choose the formatting of the generated code.") + self.setPixmap(QtWidgets.QWizard.LogoPixmap, + QtGui.QPixmap(':/images/logo2.png')) + + commentCheckBox = QtWidgets.QCheckBox("&Start generated files with a " + "comment") + commentCheckBox.setChecked(True) + + protectCheckBox = QtWidgets.QCheckBox("&Protect header file against " + "multiple inclusions") + protectCheckBox.setChecked(True) + + macroNameLabel = QtWidgets.QLabel("&Macro name:") + self.macroNameLineEdit = QtWidgets.QLineEdit() + macroNameLabel.setBuddy(self.macroNameLineEdit) + + self.includeBaseCheckBox = QtWidgets.QCheckBox("&Include base class " + "definition") + self.baseIncludeLabel = QtWidgets.QLabel("Base class include:") + self.baseIncludeLineEdit = QtWidgets.QLineEdit() + self.baseIncludeLabel.setBuddy(self.baseIncludeLineEdit) + + protectCheckBox.toggled.connect(macroNameLabel.setEnabled) + protectCheckBox.toggled.connect(self.macroNameLineEdit.setEnabled) + self.includeBaseCheckBox.toggled.connect(self.baseIncludeLabel.setEnabled) + self.includeBaseCheckBox.toggled.connect(self.baseIncludeLineEdit.setEnabled) + + self.registerField('comment', commentCheckBox) + self.registerField('protect', protectCheckBox) + self.registerField('macroName', self.macroNameLineEdit) + self.registerField('includeBase', self.includeBaseCheckBox) + self.registerField('baseInclude', self.baseIncludeLineEdit) + + layout = QtWidgets.QGridLayout() + layout.setColumnMinimumWidth(0, 20) + layout.addWidget(commentCheckBox, 0, 0, 1, 3) + layout.addWidget(protectCheckBox, 1, 0, 1, 3) + layout.addWidget(macroNameLabel, 2, 1) + layout.addWidget(self.macroNameLineEdit, 2, 2) + layout.addWidget(self.includeBaseCheckBox, 3, 0, 1, 3) + layout.addWidget(self.baseIncludeLabel, 4, 1) + layout.addWidget(self.baseIncludeLineEdit, 4, 2) + self.setLayout(layout) + + def initializePage(self): + className = self.field('className') + self.macroNameLineEdit.setText(className.upper() + "_H") + + baseClass = self.field('baseClass') + is_baseClass = bool(baseClass) + + self.includeBaseCheckBox.setChecked(is_baseClass) + self.includeBaseCheckBox.setEnabled(is_baseClass) + self.baseIncludeLabel.setEnabled(is_baseClass) + self.baseIncludeLineEdit.setEnabled(is_baseClass) + + if not is_baseClass: + self.baseIncludeLineEdit.clear() + elif QtCore.QRegExp('Q[A-Z].*').exactMatch(baseClass): + self.baseIncludeLineEdit.setText('<' + baseClass + '>') + else: + self.baseIncludeLineEdit.setText('"' + baseClass.lower() + '.h"') + + +class OutputFilesPage(QtWidgets.QWizardPage): + def __init__(self, parent=None): + super(OutputFilesPage, self).__init__(parent) + + self.setTitle("Output Files") + self.setSubTitle("Specify where you want the wizard to put the " + "generated skeleton code.") + self.setPixmap(QtWidgets.QWizard.LogoPixmap, + QtGui.QPixmap(':/images/logo3.png')) + + outputDirLabel = QtWidgets.QLabel("&Output directory:") + self.outputDirLineEdit = QtWidgets.QLineEdit() + outputDirLabel.setBuddy(self.outputDirLineEdit) + + headerLabel = QtWidgets.QLabel("&Header file name:") + self.headerLineEdit = QtWidgets.QLineEdit() + headerLabel.setBuddy(self.headerLineEdit) + + implementationLabel = QtWidgets.QLabel("&Implementation file name:") + self.implementationLineEdit = QtWidgets.QLineEdit() + implementationLabel.setBuddy(self.implementationLineEdit) + + self.registerField('outputDir*', self.outputDirLineEdit) + self.registerField('header*', self.headerLineEdit) + self.registerField('implementation*', self.implementationLineEdit) + + layout = QtWidgets.QGridLayout() + layout.addWidget(outputDirLabel, 0, 0) + layout.addWidget(self.outputDirLineEdit, 0, 1) + layout.addWidget(headerLabel, 1, 0) + layout.addWidget(self.headerLineEdit, 1, 1) + layout.addWidget(implementationLabel, 2, 0) + layout.addWidget(self.implementationLineEdit, 2, 1) + self.setLayout(layout) + + def initializePage(self): + className = self.field('className') + self.headerLineEdit.setText(className.lower() + '.h') + self.implementationLineEdit.setText(className.lower() + '.cpp') + self.outputDirLineEdit.setText(QtCore.QDir.toNativeSeparators(QtCore.QDir.tempPath())) + + +class ConclusionPage(QtWidgets.QWizardPage): + def __init__(self, parent=None): + super(ConclusionPage, self).__init__(parent) + + self.setTitle("Conclusion") + self.setPixmap(QtWidgets.QWizard.WatermarkPixmap, + QtGui.QPixmap(':/images/watermark2.png')) + + self.label = QtWidgets.QLabel() + self.label.setWordWrap(True) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(self.label) + self.setLayout(layout) + + def initializePage(self): + finishText = self.wizard().buttonText(QtWidgets.QWizard.FinishButton) + finishText.replace('&', '') + self.label.setText("Click %s to generate the class skeleton." % finishText) + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + wizard = ClassWizard() + wizard.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/dialogs/classwizard/classwizard.qrc b/examples/widgets/dialogs/classwizard/classwizard.qrc new file mode 100644 index 0000000..41a5ddc --- /dev/null +++ b/examples/widgets/dialogs/classwizard/classwizard.qrc @@ -0,0 +1,11 @@ + + + images/background.png + images/banner.png + images/logo1.png + images/logo2.png + images/logo3.png + images/watermark1.png + images/watermark2.png + + diff --git a/examples/widgets/dialogs/classwizard/classwizard_rc.py b/examples/widgets/dialogs/classwizard/classwizard_rc.py new file mode 100644 index 0000000..c7b8a5a --- /dev/null +++ b/examples/widgets/dialogs/classwizard/classwizard_rc.py @@ -0,0 +1,3928 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Fri Jul 30 17:18:57 2010 +# by: The Resource Compiler for PySide (Qt v4.6.2) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x06\x53\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x03\x00\x00\x00\x9d\xb7\x81\xec\ +\x00\x00\x02\xeb\x50\x4c\x54\x45\x00\x00\x00\xff\x00\x00\xff\xff\ +\xff\xff\xff\xff\xbf\x00\x00\xff\xff\xff\x99\x00\x00\xff\xff\xff\ +\x9f\x00\x00\xaa\x00\x00\xb2\x00\x00\xff\xff\xff\xb9\x00\x00\xff\ +\xff\xff\xaa\x00\x00\xff\xff\xff\xb0\x00\x00\xb6\x12\x12\xff\xff\ +\xff\xaa\x00\x00\xae\x00\x00\xff\xff\xff\xff\xff\xff\xaa\x00\x00\ +\xff\xff\xff\xad\x00\x00\xb3\x00\x00\xff\xff\xff\xad\x00\x00\xff\ +\xff\xff\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\ +\xff\xac\x00\x00\xb0\x00\x00\xc4\x47\x47\xff\xff\xff\xff\xff\xff\ +\xad\x00\x00\xaf\x00\x00\xb1\x00\x00\xff\xff\xff\xff\xff\xff\xae\ +\x00\x00\xff\xff\xff\xae\x00\x00\xff\xff\xff\xae\x00\x00\xf2\xd5\ +\xd5\xff\xff\xff\xff\xff\xff\xbf\x38\x38\xad\x00\x00\xff\xff\xff\ +\xff\xff\xff\xff\xff\xff\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xaf\ +\x00\x00\xb0\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xae\x00\ +\x00\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\ +\xae\x00\x00\xaf\x00\x00\xff\xff\xff\xae\x00\x00\xd1\x70\x70\xae\ +\x00\x00\xae\x02\x02\xaf\x00\x00\xff\xff\xff\xb0\x00\x00\xff\xff\ +\xff\xda\x8c\x8c\xae\x00\x00\xff\xff\xff\xaf\x00\x00\xff\xff\xff\ +\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xae\x00\x00\xff\ +\xff\xff\xd3\x75\x75\xaf\x00\x00\xc9\x51\x51\xae\x00\x00\xf4\xdc\ +\xdc\xff\xff\xff\xaf\x00\x00\xae\x00\x00\xff\xff\xff\xae\x00\x00\ +\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe6\xb2\xb2\xff\ +\xff\xff\xae\x00\x00\xff\xff\xff\xaf\x00\x00\xaf\x00\x00\xae\x00\ +\x00\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x71\x71\ +\xaf\x00\x00\xff\xff\xff\xba\x27\x27\xae\x00\x00\xaf\x00\x00\xfa\ +\xf4\xf4\xd9\x87\x87\xff\xff\xff\xff\xff\xff\xba\x24\x24\xff\xff\ +\xff\xb8\x1f\x1f\xff\xff\xff\xf3\xd9\xd9\xff\xff\xff\xb7\x1a\x1a\ +\xae\x00\x00\xae\x00\x00\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xae\ +\x00\x00\xaf\x00\x00\xcc\x5c\x5c\xff\xff\xff\xb7\x1b\x1b\xb2\x0a\ +\x0a\xaf\x03\x03\xae\x00\x00\xff\xff\xff\xff\xff\xff\xaf\x02\x02\ +\xff\xff\xff\xb0\x02\x02\xff\xff\xff\xff\xff\xff\xcd\x63\x63\xaf\ +\x00\x00\xaf\x01\x01\xff\xff\xff\xaf\x00\x00\xb1\x08\x08\xae\x00\ +\x00\xff\xff\xff\xd1\x6d\x6d\xaf\x00\x00\xb4\x10\x10\xe6\xae\xae\ +\xae\x00\x00\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xea\xbd\xbd\xfb\ +\xf4\xf4\xae\x00\x00\xaf\x00\x00\xba\x22\x22\xeb\xc1\xc1\xff\xff\ +\xff\xcb\x5a\x5a\xda\x8b\x8b\xff\xff\xff\xaf\x00\x00\xff\xff\xff\ +\xba\x22\x22\xaf\x01\x01\xbf\x32\x32\xc6\x48\x48\xe8\xb7\xb7\xf8\ +\xea\xea\xfa\xf0\xf0\xfb\xf2\xf2\xff\xfe\xfe\xb0\x02\x02\xc7\x4c\ +\x4c\xb7\x1a\x1a\xb0\x04\x04\xbb\x26\x26\xbb\x27\x27\xb1\x05\x05\ +\xbf\x33\x33\xc0\x35\x35\xc2\x3b\x3b\xc2\x3e\x3e\xc4\x44\x44\xb1\ +\x06\x06\xb7\x19\x19\xc8\x4f\x4f\xc9\x52\x52\xca\x57\x57\xcb\x58\ +\x58\xcb\x59\x59\xcd\x61\x61\xce\x62\x62\xcf\x66\x66\xd0\x6a\x6a\ +\xd3\x74\x74\xd4\x75\x75\xd6\x7b\x7b\xd7\x7e\x7e\xd7\x81\x81\xdc\ +\x8f\x8f\xe1\x9e\x9e\xe1\x9f\x9f\xe2\xa2\xa2\xe4\xaa\xaa\xe5\xab\ +\xab\xe6\xb0\xb0\xe7\xb1\xb1\xe7\xb4\xb4\xb2\x09\x09\xeb\xbe\xbe\ +\xec\xc4\xc4\xf0\xd0\xd0\xf2\xd4\xd4\xf2\xd5\xd5\xf4\xdb\xdb\xf5\ +\xde\xde\xf5\xe0\xe0\xf7\xe4\xe4\xb2\x0b\x0b\xf9\xec\xec\xb3\x0e\ +\x0e\xb6\x15\x15\xfc\xf7\xf7\xfe\xfb\xfb\xfe\xfc\xfc\xb6\x16\x16\ +\xb6\x17\x17\xdc\x97\x3c\x09\x00\x00\x00\xb6\x74\x52\x4e\x53\x00\ +\x01\x01\x03\x04\x04\x05\x08\x08\x09\x0a\x0a\x0b\x0b\x0c\x0d\x0d\ +\x0e\x0f\x0f\x13\x13\x14\x15\x15\x16\x1b\x1b\x1c\x1c\x1d\x1e\x1f\ +\x21\x24\x25\x27\x27\x2a\x2b\x2c\x2d\x2e\x2f\x32\x36\x36\x39\x3b\ +\x3c\x3d\x40\x41\x44\x45\x48\x4b\x4c\x4d\x4e\x4f\x50\x54\x54\x55\ +\x5a\x5c\x5d\x5d\x60\x61\x63\x65\x67\x67\x68\x6b\x6c\x6c\x6d\x70\ +\x71\x73\x78\x7c\x7e\x80\x81\x83\x84\x8a\x8b\x8c\x8c\x8d\x91\x93\ +\x95\x95\x95\x96\x98\x99\x9c\x9d\x9e\xa4\xa6\xa7\xa7\xa8\xa8\xa9\ +\xaa\xac\xad\xad\xb0\xb3\xb3\xb4\xb7\xbb\xbc\xbd\xbd\xc0\xc1\xc4\ +\xc6\xca\xcb\xcc\xcd\xcd\xd0\xd2\xd4\xd7\xd8\xd9\xdb\xdc\xdc\xdd\ +\xde\xe0\xe1\xe4\xe5\xe6\xe7\xe8\xe9\xe9\xea\xef\xf0\xf0\xf1\xf3\ +\xf3\xf5\xf6\xf6\xf7\xf7\xf7\xf8\xfa\xfa\xfb\xfb\xfb\xfb\xfc\xfc\ +\xfd\xfd\xfe\xfe\xfe\xa0\xb1\xff\x8a\x00\x00\x02\x61\x49\x44\x41\ +\x54\x78\x5e\xdd\xd7\x55\x70\x13\x51\x14\xc7\xe1\xd3\x52\x28\xda\ +\x42\xf1\xe2\x5e\xdc\x5b\x28\x10\xdc\xdd\xdd\xdd\x0a\x45\x8a\xb4\ +\xb8\x7b\x70\x29\x5e\x24\x50\xa0\xe8\xd9\xa4\x2a\xb8\xbb\xbb\xbb\ +\xeb\x23\x93\x3d\x77\xee\xcb\xe6\x66\x98\x93\x17\xa6\xbf\xd7\xff\ +\xe6\x9b\x7d\xc8\x9c\x99\x85\x14\x52\xfa\x52\x39\x5d\xfa\xf9\x80\ +\x28\xc4\x95\x41\x26\x36\x30\x10\xa9\x19\xd9\x78\x80\xc7\x4e\x14\ +\xed\xaa\xca\x02\x72\xa3\xec\x60\x25\x96\xb0\x1e\x65\x1b\x33\x70\ +\x80\xfa\x36\x09\xd8\x46\x00\xa7\x5e\x17\xbe\xa0\xe8\x68\x19\x96\ +\x50\x7d\xca\xee\x68\x02\xae\xb6\x03\x5e\x9e\x7d\x08\xb0\x8e\x02\ +\x66\x45\x09\x38\x61\xe6\x02\x79\x05\x10\xf9\x3f\x03\x6e\x2e\x01\ +\x25\x47\x2f\x39\xb0\x2a\x34\x90\x0d\x34\x8f\xa2\x7d\x32\x13\xf0\ +\xb3\xa0\x68\x2a\x0f\xe8\x84\x22\xbc\x5c\x97\x05\x8c\x95\x80\x75\ +\x3c\x0b\xe8\x2d\x81\x73\x66\x16\x60\x92\xc0\xdd\xe9\x0a\xc0\xd7\ +\x29\xe0\x36\x0b\x29\x6b\x7c\x37\x05\x90\x8e\x80\xa4\xfd\x8e\xe7\ +\x2c\xcb\x2e\xda\xe7\x2b\x1f\xcd\x3e\xa0\x68\x33\x09\x87\x14\x37\ +\xc9\xbb\xdf\xbe\x47\xb1\x9f\xb4\x71\x85\x40\xd5\x42\x02\x62\x5a\ +\xa8\xfe\xb1\x39\x2a\x37\x0a\x28\x08\xea\xc2\x50\xb4\xa2\x95\x17\ +\x70\xaa\x85\xb2\x6d\xc5\x58\xc2\x3c\x94\xed\xc8\xc7\x01\xca\xa2\ +\x2c\xb9\x27\x07\xe8\x81\xb2\x9b\x21\x0c\xc0\x6f\x8f\x04\x6c\xaf\ +\x87\x30\x80\x60\x14\xe1\x9f\x27\xc7\xaa\x30\x80\xf9\x04\x1c\xbf\ +\xf7\x2e\x71\x5d\x03\x60\xb4\x89\x80\x17\xab\xbb\x96\x70\x07\x46\ +\x59\x91\x8a\xab\xe1\xe2\x55\xd6\x72\x39\x9c\xfd\xbb\x88\x9a\x32\ +\x8f\x6a\x28\x8a\x26\x34\x63\x01\x5e\x16\xa4\x4e\xfd\x6c\xcc\x02\ +\x02\x51\xf4\x74\x51\x6a\x16\xd0\x17\xa9\xe8\xc4\x3a\xc0\x02\x96\ +\x22\x15\x3b\xd7\x9d\x05\x14\x41\xea\xbc\x16\x00\x2c\xa0\x35\x52\ +\x6f\xa6\x01\x0f\x98\x48\x63\xb2\x56\x81\x07\xa4\xdd\x4e\x17\xfb\ +\x6d\x08\xf0\x00\x7f\xda\xae\x1f\x2e\x0d\xea\xca\x13\xf0\x2a\x52\ +\x79\x6a\x4e\x7f\x18\x0e\x4e\xea\x40\xc0\xd9\x08\x30\xb6\x40\x9f\ +\x6e\xed\x2d\xac\x04\x7c\xeb\x05\x6f\x25\xe0\xf6\x4c\xe3\x9a\x9f\ +\xde\xed\xf3\x20\x50\x94\x39\x08\x65\x8f\xfb\x1b\xf7\x26\xfa\x72\ +\x27\x22\x8f\x0a\x18\x8c\xb2\xef\x71\x0d\x8d\xfb\x18\xfb\xf2\xed\ +\x6b\x77\x50\x94\xc6\x82\xb2\x67\xe1\xc6\x73\xe0\xa1\xdf\xaa\x07\ +\x5b\xb2\xff\xc3\xf7\xc2\x35\xad\xb6\x71\xaf\xa8\xbf\x5a\x42\x47\ +\x50\xb6\x16\x45\x37\x12\x46\x82\xb1\xb6\xf6\xe9\x61\xb8\xb7\x1a\ +\x30\x25\xe9\xc0\xef\xe7\xda\x50\x47\x4f\xb5\x44\xc4\x93\x3f\xda\ +\x80\x93\xda\x1f\x39\x13\x73\xff\x65\xfc\x86\x9a\x0e\xd7\x8c\xcb\ +\xf1\xd2\xfb\xc5\x9e\xe0\xac\x72\xc3\x66\x4f\xea\x5c\xcd\x47\xb1\ +\x66\x9a\xf3\x6b\x4d\x71\x70\xa9\x02\xa9\x20\x25\xf7\x17\x09\xba\ +\x39\x39\xea\xb1\x61\x75\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ +\x60\x82\ +\x00\x00\x06\x53\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x03\x00\x00\x00\x9d\xb7\x81\xec\ +\x00\x00\x02\xeb\x50\x4c\x54\x45\x00\x00\x00\xff\x00\x00\xff\xff\ +\xff\xff\xff\xff\xbf\x00\x00\xff\xff\xff\xcc\x00\x00\xff\xff\xff\ +\xdf\x00\x00\xe2\x00\x00\xe5\x00\x00\xff\xff\xff\xe7\x00\x00\xff\ +\xff\xff\xd4\x00\x00\xff\xff\xff\xd7\x00\x00\xda\x12\x12\xff\xff\ +\xff\xdd\x00\x00\xe4\x00\x00\xff\xff\xff\xff\xff\xff\xda\x00\x00\ +\xff\xff\xff\xdc\x00\x00\xe2\x00\x00\xff\xff\xff\xda\x00\x00\xff\ +\xff\xff\xdb\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\ +\xff\xdc\x00\x00\xde\x00\x00\xe4\x47\x47\xff\xff\xff\xff\xff\xff\ +\xdc\x00\x00\xdd\x00\x00\xdd\x00\x00\xff\xff\xff\xff\xff\xff\xdd\ +\x00\x00\xff\xff\xff\xdf\x00\x00\xff\xff\xff\xdd\x00\x00\xfa\xd5\ +\xd5\xff\xff\xff\xff\xff\xff\xe4\x38\x38\xdd\x00\x00\xff\xff\xff\ +\xff\xff\xff\xff\xff\xff\xdd\x00\x00\xff\xff\xff\xff\xff\xff\xdf\ +\x00\x00\xdd\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xdd\x00\ +\x00\xde\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\ +\xde\x00\x00\xde\x00\x00\xff\xff\xff\xdf\x00\x00\xeb\x70\x70\xdd\ +\x00\x00\xe0\x02\x02\xde\x00\x00\xff\xff\xff\xdf\x00\x00\xff\xff\ +\xff\xf0\x8c\x8c\xde\x00\x00\xff\xff\xff\xdf\x00\x00\xff\xff\xff\ +\xdf\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xde\x00\x00\xff\ +\xff\xff\xec\x75\x75\xdf\x00\x00\xe8\x51\x51\xde\x00\x00\xf9\xdc\ +\xdc\xff\xff\xff\xde\x00\x00\xdf\x00\x00\xff\xff\xff\xde\x00\x00\ +\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf5\xb2\xb2\xff\ +\xff\xff\xdf\x00\x00\xff\xff\xff\xdf\x00\x00\xdf\x00\x00\xde\x00\ +\x00\xde\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xed\x71\x71\ +\xde\x00\x00\xff\xff\xff\xe3\x27\x27\xde\x00\x00\xde\x00\x00\xfd\ +\xf4\xf4\xf0\x87\x87\xff\xff\xff\xff\xff\xff\xe3\x24\x24\xff\xff\ +\xff\xe3\x1f\x1f\xff\xff\xff\xfa\xd9\xd9\xff\xff\xff\xe2\x1a\x1a\ +\xdf\x00\x00\xde\x00\x00\xde\x00\x00\xff\xff\xff\xff\xff\xff\xdf\ +\x00\x00\xde\x00\x00\xea\x5c\x5c\xff\xff\xff\xe2\x1b\x1b\xe0\x0a\ +\x0a\xdf\x03\x03\xde\x00\x00\xff\xff\xff\xff\xff\xff\xde\x02\x02\ +\xff\xff\xff\xdf\x02\x02\xff\xff\xff\xff\xff\xff\xeb\x63\x63\xdf\ +\x00\x00\xdf\x01\x01\xff\xff\xff\xdf\x00\x00\xe0\x08\x08\xde\x00\ +\x00\xff\xff\xff\xec\x6d\x6d\xde\x00\x00\xe1\x10\x10\xf4\xae\xae\ +\xdf\x00\x00\xdf\x00\x00\xff\xff\xff\xff\xff\xff\xf6\xbd\xbd\xfd\ +\xf4\xf4\xdf\x00\x00\xde\x00\x00\xe3\x22\x22\xf6\xc1\xc1\xff\xff\ +\xff\xe9\x5a\x5a\xf0\x8b\x8b\xff\xff\xff\xdf\x00\x00\xff\xff\xff\ +\xe3\x22\x22\xdf\x01\x01\xe5\x32\x32\xe8\x48\x48\xf6\xb7\xb7\xfc\ +\xea\xea\xfd\xf0\xf0\xfd\xf2\xf2\xff\xfe\xfe\xdf\x02\x02\xe9\x4c\ +\x4c\xe2\x1a\x1a\xe0\x04\x04\xe4\x26\x26\xe4\x27\x27\xe0\x05\x05\ +\xe5\x33\x33\xe6\x35\x35\xe6\x3b\x3b\xe7\x3e\x3e\xe8\x44\x44\xe0\ +\x06\x06\xe2\x19\x19\xe9\x4f\x4f\xe9\x52\x52\xea\x57\x57\xea\x58\ +\x58\xea\x59\x59\xeb\x61\x61\xeb\x62\x62\xec\x66\x66\xec\x6a\x6a\ +\xee\x74\x74\xee\x75\x75\xee\x7b\x7b\xef\x7e\x7e\xef\x81\x81\xf1\ +\x8f\x8f\xf3\x9e\x9e\xf3\x9f\x9f\xf3\xa2\xa2\xf4\xaa\xaa\xf4\xab\ +\xab\xf5\xb0\xb0\xf5\xb1\xb1\xf6\xb4\xb4\xe0\x09\x09\xf7\xbe\xbe\ +\xf8\xc4\xc4\xf9\xd0\xd0\xfa\xd4\xd4\xfa\xd5\xd5\xfa\xdb\xdb\xfb\ +\xde\xde\xfb\xe0\xe0\xfc\xe4\xe4\xe0\x0b\x0b\xfd\xec\xec\xe1\x0e\ +\x0e\xe2\x15\x15\xfe\xf7\xf7\xfe\xfb\xfb\xff\xfc\xfc\xe2\x16\x16\ +\xe2\x17\x17\x66\xee\x72\x60\x00\x00\x00\xb6\x74\x52\x4e\x53\x00\ +\x01\x01\x03\x04\x04\x05\x08\x08\x09\x0a\x0a\x0b\x0b\x0c\x0d\x0d\ +\x0e\x0f\x0f\x13\x13\x14\x15\x15\x16\x1b\x1b\x1c\x1c\x1d\x1e\x1f\ +\x21\x24\x25\x27\x27\x2a\x2b\x2c\x2d\x2e\x2f\x32\x36\x36\x39\x3b\ +\x3c\x3d\x40\x41\x44\x45\x48\x4b\x4c\x4d\x4e\x4f\x50\x54\x54\x55\ +\x5a\x5c\x5d\x5d\x60\x61\x63\x65\x67\x67\x68\x6b\x6c\x6c\x6d\x70\ +\x71\x73\x78\x7c\x7e\x80\x81\x83\x84\x8a\x8b\x8c\x8c\x8d\x91\x93\ +\x95\x95\x95\x96\x98\x99\x9c\x9d\x9e\xa4\xa6\xa7\xa7\xa8\xa8\xa9\ +\xaa\xac\xad\xad\xb0\xb3\xb3\xb4\xb7\xbb\xbc\xbd\xbd\xc0\xc1\xc4\ +\xc6\xca\xcb\xcc\xcd\xcd\xd0\xd2\xd4\xd7\xd8\xd9\xdb\xdc\xdc\xdd\ +\xde\xe0\xe1\xe4\xe5\xe6\xe7\xe8\xe9\xe9\xea\xef\xf0\xf0\xf1\xf3\ +\xf3\xf5\xf6\xf6\xf7\xf7\xf7\xf8\xfa\xfa\xfb\xfb\xfb\xfb\xfc\xfc\ +\xfd\xfd\xfe\xfe\xfe\xa0\xb1\xff\x8a\x00\x00\x02\x61\x49\x44\x41\ +\x54\x78\x5e\xdd\xd7\x55\x70\x13\x51\x14\xc7\xe1\xd3\x52\x28\xda\ +\x42\xf1\xe2\x5e\xdc\x5b\x28\x10\xdc\xdd\xdd\xdd\x0a\x45\x8a\xb4\ +\xb8\x7b\x70\x29\x5e\x24\x50\xa0\xe8\xd9\xa4\x2a\xb8\xbb\xbb\xbb\ +\xeb\x23\x93\x3d\x77\xee\xcb\xe6\x66\x98\x93\x17\xa6\xbf\xd7\xff\ +\xe6\x9b\x7d\xc8\x9c\x99\x85\x14\x52\xfa\x52\x39\x5d\xfa\xf9\x80\ +\x28\xc4\x95\x41\x26\x36\x30\x10\xa9\x19\xd9\x78\x80\xc7\x4e\x14\ +\xed\xaa\xca\x02\x72\xa3\xec\x60\x25\x96\xb0\x1e\x65\x1b\x33\x70\ +\x80\xfa\x36\x09\xd8\x46\x00\xa7\x5e\x17\xbe\xa0\xe8\x68\x19\x96\ +\x50\x7d\xca\xee\x68\x02\xae\xb6\x03\x5e\x9e\x7d\x08\xb0\x8e\x02\ +\x66\x45\x09\x38\x61\xe6\x02\x79\x05\x10\xf9\x3f\x03\x6e\x2e\x01\ +\x25\x47\x2f\x39\xb0\x2a\x34\x90\x0d\x34\x8f\xa2\x7d\x32\x13\xf0\ +\xb3\xa0\x68\x2a\x0f\xe8\x84\x22\xbc\x5c\x97\x05\x8c\x95\x80\x75\ +\x3c\x0b\xe8\x2d\x81\x73\x66\x16\x60\x92\xc0\xdd\xe9\x0a\xc0\xd7\ +\x29\xe0\x36\x0b\x29\x6b\x7c\x37\x05\x90\x8e\x80\xa4\xfd\x8e\xe7\ +\x2c\xcb\x2e\xda\xe7\x2b\x1f\xcd\x3e\xa0\x68\x33\x09\x87\x14\x37\ +\xc9\xbb\xdf\xbe\x47\xb1\x9f\xb4\x71\x85\x40\xd5\x42\x02\x62\x5a\ +\xa8\xfe\xb1\x39\x2a\x37\x0a\x28\x08\xea\xc2\x50\xb4\xa2\x95\x17\ +\x70\xaa\x85\xb2\x6d\xc5\x58\xc2\x3c\x94\xed\xc8\xc7\x01\xca\xa2\ +\x2c\xb9\x27\x07\xe8\x81\xb2\x9b\x21\x0c\xc0\x6f\x8f\x04\x6c\xaf\ +\x87\x30\x80\x60\x14\xe1\x9f\x27\xc7\xaa\x30\x80\xf9\x04\x1c\xbf\ +\xf7\x2e\x71\x5d\x03\x60\xb4\x89\x80\x17\xab\xbb\x96\x70\x07\x46\ +\x59\x91\x8a\xab\xe1\xe2\x55\xd6\x72\x39\x9c\xfd\xbb\x88\x9a\x32\ +\x8f\x6a\x28\x8a\x26\x34\x63\x01\x5e\x16\xa4\x4e\xfd\x6c\xcc\x02\ +\x02\x51\xf4\x74\x51\x6a\x16\xd0\x17\xa9\xe8\xc4\x3a\xc0\x02\x96\ +\x22\x15\x3b\xd7\x9d\x05\x14\x41\xea\xbc\x16\x00\x2c\xa0\x35\x52\ +\x6f\xa6\x01\x0f\x98\x48\x63\xb2\x56\x81\x07\xa4\xdd\x4e\x17\xfb\ +\x6d\x08\xf0\x00\x7f\xda\xae\x1f\x2e\x0d\xea\xca\x13\xf0\x2a\x52\ +\x79\x6a\x4e\x7f\x18\x0e\x4e\xea\x40\xc0\xd9\x08\x30\xb6\x40\x9f\ +\x6e\xed\x2d\xac\x04\x7c\xeb\x05\x6f\x25\xe0\xf6\x4c\xe3\x9a\x9f\ +\xde\xed\xf3\x20\x50\x94\x39\x08\x65\x8f\xfb\x1b\xf7\x26\xfa\x72\ +\x27\x22\x8f\x0a\x18\x8c\xb2\xef\x71\x0d\x8d\xfb\x18\xfb\xf2\xed\ +\x6b\x77\x50\x94\xc6\x82\xb2\x67\xe1\xc6\x73\xe0\xa1\xdf\xaa\x07\ +\x5b\xb2\xff\xc3\xf7\xc2\x35\xad\xb6\x71\xaf\xa8\xbf\x5a\x42\x47\ +\x50\xb6\x16\x45\x37\x12\x46\x82\xb1\xb6\xf6\xe9\x61\xb8\xb7\x1a\ +\x30\x25\xe9\xc0\xef\xe7\xda\x50\x47\x4f\xb5\x44\xc4\x93\x3f\xda\ +\x80\x93\xda\x1f\x39\x13\x73\xff\x65\xfc\x86\x9a\x0e\xd7\x8c\xcb\ +\xf1\xd2\xfb\xc5\x9e\xe0\xac\x72\xc3\x66\x4f\xea\x5c\xcd\x47\xb1\ +\x66\x9a\xf3\x6b\x4d\x71\x70\xa9\x02\xa9\x20\x25\xf7\x17\x09\xba\ +\x39\x39\xea\xb1\x61\x75\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ +\x60\x82\ +\x00\x00\x3a\x40\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\xa8\x00\x00\x01\x77\x08\x03\x00\x00\x00\x06\x8a\xf0\xc8\ +\x00\x00\x02\xd9\x50\x4c\x54\x45\xad\xac\xff\xc4\x90\xc4\xe2\x5a\ +\x63\xe6\xc1\xd5\xe9\x9c\xa7\xb8\xb6\xfe\xc8\xc6\xfe\xcb\xcb\xfe\ +\xbb\xbb\xff\xc0\xbe\xfe\xc3\xc3\xfe\xd2\xd2\xff\xd8\xd7\xff\xdc\ +\xdb\xfe\xb3\xb3\xfe\xe2\xe2\xfe\xb0\xae\xfe\xd0\xce\xfe\xeb\xeb\ +\xfe\xf3\xf3\xfe\xfc\xfb\xfe\xdd\x06\x08\xda\x22\x2c\xdc\x0d\x12\ +\xb7\x8f\xd1\xe0\xde\xfe\xea\x5a\x5a\xdd\x09\x0b\xdd\x19\x1e\xfc\ +\xec\xec\xde\x00\x00\xf0\xef\xfd\xe1\x13\x13\xbf\xa1\xde\xbb\xb2\ +\xf4\xe3\x23\x23\xe5\x32\x32\xe6\x3a\x3a\xe6\x41\x42\xcc\xc3\xf4\ +\xe9\x53\x53\xdc\x14\x1a\xbd\x81\xbb\xec\x6c\x6c\xed\x72\x72\xee\ +\x7b\x7b\xf2\x9b\x9b\xf2\xa2\xa2\xd2\x81\xa2\xf4\xac\xac\xf6\xb9\ +\xb9\xfa\xdb\xdb\xfa\xf5\xfa\xfb\xe2\xe2\xdd\x10\x15\xbd\xab\xeb\ +\xfd\xf2\xf3\xe4\x2c\x2c\xeb\x63\x63\xf0\x8b\x8b\xf5\xcd\xd1\xd6\ +\x2b\x3c\xd8\x2d\x3b\xd8\x46\x58\xca\x56\x7b\xd9\x25\x31\xd9\x34\ +\x43\xd9\x42\x52\xd9\x6d\x83\xda\x1b\x25\xca\x75\x9e\xda\x31\x3d\ +\xda\x52\x64\xdb\x1a\x22\xdb\x85\x9d\xb2\xa9\xf5\xdc\xd3\xf5\xcc\ +\x69\x8d\xcc\x84\xad\xcc\x8b\xb4\xbb\xa3\xe3\xcd\x4a\x69\xdd\x50\ +\x5e\xb7\xb0\xf7\xdf\x30\x37\xcd\x5a\x7b\xcd\xa1\xcd\xe2\x1a\x1a\ +\xce\x71\x94\xce\xc0\xef\xe4\xaa\xbd\xcf\x39\x54\xcf\x40\x5b\xcf\ +\xba\xe7\xd0\x5f\x7e\xe8\x45\x45\xe8\x4c\x4c\xd0\xad\xd8\xe9\x6f\ +\x74\xbe\x8a\xc3\xd1\x56\x71\xea\xe6\xfb\xd2\x7a\x9a\xc4\xab\xe3\ +\xd2\x89\xab\xec\x76\x78\xd2\xcb\xf7\xc5\x83\xb4\xee\x8f\x91\xef\ +\x81\x81\xf0\x84\x84\xf8\xcb\xcb\xd3\x44\x5c\xf1\x93\x93\xd3\x53\ +\x6d\xd4\x35\x49\xd4\x4b\x62\xd4\x69\x84\xf4\xe2\xe9\xf5\xb3\xb3\ +\xe0\x0b\x0b\xd4\xc2\xeb\xf6\xd8\xdc\xf7\xc3\xc3\xd5\x62\x7b\xf9\ +\xd4\xd4\xc8\xbd\xf3\xd5\xa5\xc8\xd6\x27\x37\xbe\x9a\xd5\xd7\x49\ +\x5d\xd4\x5a\x73\xca\x86\xb2\xcb\x74\x9b\xf8\xc5\xc5\xd6\x39\x4c\ +\xce\x80\xa6\xcb\x61\x85\xcd\x9a\xc4\xdf\xa8\xc0\xd3\x9a\xbe\xcb\ +\x7a\xa2\xe4\x79\x84\xd4\x4e\x67\xd5\x40\x54\xe6\x73\x7c\xc4\xba\ +\xf4\xe6\xc6\xda\xe7\x6a\x70\xe7\xb8\xc9\xc5\x66\x92\xe8\x5e\x60\ +\xe8\x84\x8c\xc5\x73\xa1\xcd\x92\xbb\xb6\x9b\xe0\xcd\xb0\xde\xeb\ +\xad\xb7\xeb\xe2\xf4\xc5\x8a\xbb\xd7\xb5\xd8\xcd\xac\xda\xc5\xa0\ +\xd5\xed\xa3\xaa\xcd\xba\xea\xce\x55\x76\xc6\x5c\x86\xc8\x92\xc1\ +\xd9\x59\x6d\xf0\xac\xb1\xc8\xb3\xe8\xd9\x87\xa1\xf1\x9e\xa1\xc0\ +\xb6\xf4\xb9\x87\xc6\xf2\xbf\xc5\xda\x29\x35\xc2\x9b\xd3\xca\x5c\ +\x81\xf4\xe9\xf1\xd0\x6d\x8d\xdb\x4b\x5a\xd0\xa6\xd0\xca\x64\x8c\ +\xdc\x3a\x46\xc2\xa2\xda\xde\x98\xaf\xd1\x8d\xb1\xd1\xc5\xf1\xb9\ +\xa6\xe9\xd2\xbb\xe5\xd2\x9d\xc2\xcc\xa5\xd2\xde\xb1\xcc\xd3\x74\ +\x92\xe1\x3c\x42\xe3\x48\x4e\xcb\x9d\xcb\xe4\x64\x6d\xe2\x4e\x56\ +\xc4\x7b\xac\xcb\xb2\xe2\xd4\x31\x44\xbf\x94\xce\xbc\x9c\xdb\xca\ +\xa8\xd8\xd5\x93\xb4\xcd\x45\x63\xc5\x6c\x98\xb9\x8e\xce\xd0\x6f\ +\x90\xc4\x7f\xb0\xda\x3d\x4c\xb7\xab\xf2\xda\x73\x89\xf4\xc6\xcb\ +\xca\x6c\x93\xd8\x78\x92\xd4\x70\x8d\xc3\xb2\xec\xec\x92\x97\xec\ +\xd3\xe3\xf6\xde\xe3\xc5\x88\xba\xd1\x86\xa9\xe1\x82\x92\xf8\xd3\ +\xd5\xe1\x9b\xaf\xe1\x9c\xb0\xd3\x2e\x42\xd0\xaa\xd3\xdb\x93\xac\ +\xdb\xc7\xe9\xe2\xdb\xf7\xc7\x79\xa7\xdb\x61\x74\xe1\xbd\xd5\xd1\ +\x46\x61\xe4\x54\x5a\xc9\x7e\xa9\xd2\x3a\x52\xe8\xcf\xe2\xc2\x95\ +\xcc\xbd\x3d\xa6\xd0\x00\x00\x37\x22\x49\x44\x41\x54\x78\x5e\x94\ +\x5d\xe3\xa3\x6d\xbb\xae\x5f\x5f\x06\xa7\xb5\x8c\x6d\xdb\x38\xb6\ +\x6d\xdb\xb6\x8d\x4b\xdb\xb6\x6d\x1b\xcf\xb6\xed\xf7\x17\xbc\x36\ +\x0d\x9a\xb6\xf3\xec\xfb\x32\x30\xc7\x39\x9f\x7e\x3b\x6a\x92\xa6\ +\x59\x13\x8d\x46\xb3\x21\xd4\x33\x4f\x51\x98\xc7\x5e\xe6\x06\xc2\ +\x9f\x1c\x1e\xf3\xae\xeb\xc2\x5c\xf6\xd7\x7e\xd5\x79\x5e\x0b\x55\ +\x95\x79\x95\xf6\x2a\xcd\xaf\xa2\xb6\xbd\xe1\x81\xbb\xdd\xc6\x17\ +\xd1\x04\xde\xe6\x32\xb7\x7d\x14\x35\x9a\x4d\x0b\xb5\xc9\x48\x0d\ +\x4c\xc1\x09\x1f\x44\xb9\x45\x57\xd4\x16\x2a\x80\x74\x6f\x86\x59\ +\xd9\x57\x89\x77\x09\x28\xe1\x3b\xa0\xb6\x80\x84\x87\xde\x02\xb6\ +\x6b\x91\x9a\x4b\x93\x05\x69\x51\x36\x89\xa3\x8c\x14\xa0\xf6\x0a\ +\x26\x00\x68\x2e\x8b\x37\x37\x2f\xe0\x26\x22\x65\xac\x15\x20\x23\ +\xa4\xfc\x12\x94\x02\x55\xa1\x14\xa8\x70\x75\x3d\x84\xd3\xee\x87\ +\x50\x32\x4e\x07\xd5\x62\xec\x99\x87\x05\x2f\x84\x38\x9d\x0a\xe4\ +\x9a\xa1\x55\x55\x02\x5f\xe1\x42\xcc\x4c\x22\x7a\x7a\x29\x98\x5d\ +\x80\x08\xfc\xc4\x6f\xf3\xd5\xf5\x44\x6f\x2f\x0f\x29\x0a\xbc\x41\ +\x52\xef\x11\x53\x73\x50\x51\x44\x59\xd7\x80\x95\x18\x5a\xe5\x16\ +\x68\xe5\xae\x4a\x31\x34\xa2\x76\x3b\x33\x44\xf2\xcf\x80\xab\x88\ +\xb4\x0b\x00\x01\x62\x2c\xfa\xd0\x9a\x0a\x78\x03\x4a\x78\x31\x59\ +\x84\xcc\x49\x03\xba\xce\x45\x4b\xf3\xaa\x26\x9c\xc0\x55\xd4\x4e\ +\xf3\x25\x5c\xcd\x32\x10\x37\x7c\x65\x1e\x3f\xb3\x0c\x65\x0e\x60\ +\x01\x24\x50\x37\x30\x26\x43\xc8\x50\x11\x7e\xd1\x13\xa3\x6f\x30\ +\x47\xf9\x05\x1c\x35\x6f\xa0\x9c\xde\x15\xca\xbf\x34\x1c\xa5\x4b\ +\x11\x8b\x3d\x03\x8c\x09\x1d\xed\x76\x01\x30\x1a\x13\x21\x26\x1d\ +\x4d\xb9\x27\x23\x6f\xf8\x70\xc2\x17\x9e\x8a\x73\xaa\xdd\x6f\x0e\ +\x97\x11\x3d\x19\x93\x98\x3d\x72\x52\xc3\xcd\x58\x53\xdb\xb1\x92\ +\x12\x47\xe1\x01\x07\xd5\x15\x83\x6a\x92\xe4\x9b\xca\x3d\x59\x96\ +\xba\x47\x48\xbc\x28\xfe\xb2\xdc\xf3\xdc\x09\x1d\x59\x4a\x30\xe1\ +\xb7\xaa\xc4\x90\x18\xa1\xe1\x2a\x50\x3b\xd3\x48\xbb\xe4\x9d\x62\ +\x1d\x05\x27\xca\x68\xc5\xe8\x41\x3f\x01\xab\x46\x8a\x9c\x25\xbe\ +\x16\x06\x65\x85\x1c\x05\xfd\xb4\xf0\x1c\xd8\x5a\x98\x29\x18\xf9\ +\xdb\x82\x6c\xdb\x9b\xd9\xda\x15\xd3\x07\x90\xf4\x9a\x4e\x19\x53\ +\x4f\x7c\xbd\x05\x0b\x62\x17\x1d\x65\x63\xd2\xc2\xd7\xeb\x52\x69\ +\x11\x03\x4c\xb8\x2b\x73\x31\x3a\x7e\x80\xa3\x68\xfd\x9a\xa5\xa2\ +\x9f\x11\x47\x09\x6a\xec\x49\xc1\x90\x64\x01\x45\xf7\xe4\x50\xb2\ +\xe8\x11\x68\x2e\xa2\x07\x69\x03\xcc\x94\x8a\xb2\x5b\x02\x9e\x66\ +\x4a\x43\xb5\x2d\x85\x40\xc5\xdd\xdb\x0b\x17\xa4\x1e\x72\xd4\x17\ +\x7d\x8d\x70\x59\xec\xc0\x50\x54\xd3\xca\x88\x9f\x78\xa9\x04\xcf\ +\xfe\x29\x63\x96\x66\x4c\x6d\x65\xf9\x5d\xb8\x49\x41\xbb\x91\x1f\ +\x25\xac\x42\x80\x17\x48\x61\xcd\x79\xbd\x17\x99\xc3\x0f\x9a\x53\ +\x55\x3b\xab\x27\xb0\xf0\x1d\x53\x1b\x31\x02\x47\x05\x25\x3a\x7c\ +\x44\x1a\xc5\x25\xca\x92\x88\xa1\x12\x96\x68\xca\x91\x9f\xf6\x8d\ +\xbe\x34\x17\xc1\xa3\xf4\x79\x0d\x0d\x9c\x13\xf9\xd0\x8c\x89\x25\ +\x2f\xb6\x84\x3a\xda\x0e\x84\x3f\x8d\xc6\xa4\xa3\x12\x40\x09\x70\ +\xc9\xea\x1b\x8e\x9b\x68\xf4\xa2\xa6\x20\x75\x74\xf6\x39\x30\x14\ +\xf8\xa9\x38\xaa\xbc\x53\x66\x6e\x7b\x39\xfd\x7c\xfb\x51\x67\x31\ +\x47\xc5\x3d\xbd\x94\x31\x01\x89\x9e\x5a\xa2\x30\x4f\xcc\x3e\x87\ +\xa7\x66\xd1\x13\x54\xa2\xca\x3e\x3e\x59\x8c\x62\xf2\x80\x90\x19\ +\xba\xe2\x97\x4f\x2f\xff\xbd\xc5\xc5\x1f\x35\x30\xdc\x63\x96\x2a\ +\x66\xe2\xcf\x34\xeb\xa8\x8a\x9f\x7a\x40\x18\xe6\x11\x4c\xc4\xea\ +\x0b\x1f\x03\x67\x85\x15\x97\x7c\x21\x34\x26\xc2\xea\xd8\x79\xeb\ +\x65\x7b\x46\x8b\x8e\x0e\x2b\xfd\x10\x0f\x71\xb2\x23\x8d\xe3\x51\ +\xa1\x1e\x42\xb5\x30\x5d\xb4\xe7\xa1\xe4\x98\x94\x3c\xbe\xc0\x44\ +\xef\x54\x05\x30\x2b\x01\x59\x66\xee\x3e\x7f\xfd\xa2\xd0\xcd\x4d\ +\xe0\xa7\x04\x25\x14\xe2\x27\xdc\x53\xe0\xf2\x99\xa3\x8c\x50\xa0\ +\xe2\x2d\x4b\x28\xad\xf6\xc4\x50\x67\xfb\x08\x12\xde\x9a\xb2\x72\ +\xf9\x53\x8b\x3e\xad\x19\xa8\xa8\x59\x8c\x3e\x62\x29\x58\x12\x43\ +\xed\x21\x4f\x0b\x5c\xf3\x7b\x70\x19\xac\x80\x10\x43\xd1\x42\x2c\ +\x49\x67\x23\xd6\x97\x32\x47\x61\x51\x52\x3a\x6a\x9f\xa7\xa7\x14\ +\xce\xd1\xfe\x61\x2a\xc2\x4f\xaf\xf5\x9a\xa1\x05\xf2\x14\xf5\x13\ +\x6d\x89\x29\x47\x5b\xa2\x74\x84\xd9\x59\x29\xc9\x2b\x8e\x3e\x7d\ +\x96\x48\xff\x70\x87\x6f\x76\xcb\x8e\xc3\xb6\x1e\x30\x5f\x57\x19\ +\xa0\x19\x61\x9c\x50\x09\x1e\x39\x7c\xb4\xa7\x26\xc5\xf7\x82\x15\ +\x90\xe2\x12\x8a\x30\x45\x49\xc5\xe6\x49\xf2\xb5\xc7\x4f\x73\xb9\ +\x20\x9f\xc3\xa6\xaa\x7c\xfb\xe2\xe8\x1b\x35\x1a\xfd\xcf\x00\xe6\ +\xe6\x85\x41\xab\x32\xea\x7a\xe6\x9a\x4d\xc3\x3e\x02\x25\xb0\x88\ +\x36\x4e\xef\xd8\xe6\x65\x0d\x35\x18\x1d\x47\x25\x28\x01\x80\x51\ +\xb2\x0c\xaf\x5c\x59\x3d\x46\xf8\x10\x3b\xdf\xf8\xa5\xbb\x3e\x37\ +\x35\x7f\xf4\xd4\x68\xb4\xaa\x8f\x2c\x3d\xdf\x02\xdd\x3c\x6c\x64\ +\x48\x8d\x06\xc1\x9c\xc0\x47\x74\x34\xe0\xaa\x4b\x96\x15\xd4\x1e\ +\x7b\xfc\x84\x31\xb9\x24\xc4\x3c\xe8\x9e\x04\xa5\x76\x4c\xe5\x19\ +\x2f\x82\x0b\x72\x7e\xe8\x85\xdc\x39\xa7\x0f\x5b\xa0\xab\xff\xee\ +\xd6\xe7\xbf\x7a\xd4\xd9\x97\xbd\x78\xef\xd9\x5f\xfd\x76\xdb\x13\ +\xbd\xb9\xd3\xf1\x68\xda\xe1\xcb\x32\x8a\x3c\xed\x31\x37\x73\x90\ +\xbc\x35\xaa\x1c\xd7\x26\xed\xa0\x6a\x5a\xa0\xaa\x4f\xbf\xa8\x8c\ +\xe6\x8e\x19\xc7\xd1\x3f\x5e\x0c\x68\xee\xb8\x73\x55\x56\xdf\xd6\ +\xf1\x68\x9b\x34\x94\x96\xd0\xa6\x06\x0a\x2f\x61\xaa\xcf\x51\x5c\ +\xe1\x41\x07\x48\x49\x73\xc9\xec\xd0\x9a\x96\x9f\x0c\x30\x98\xa5\ +\x9b\xfa\xce\xea\x57\xec\x09\x91\x8e\x56\xe7\xed\x8c\xc5\xae\x63\ +\xbc\x50\x47\xa3\x15\x14\x74\x14\x73\x7a\x6d\x4e\x94\xdb\x81\xc3\ +\x87\x5b\x17\x4b\x48\xf8\x47\x3b\x89\xaf\x9c\xdd\xbc\xf9\x2a\xeb\ +\xdf\x37\xf6\xd1\xea\x6f\x9d\x5b\x0c\x69\x7b\xed\xfb\xa6\xb1\xf1\ +\x28\x46\x24\x02\x14\xdd\x53\xc0\xce\xf7\x3f\x7f\xd7\x15\x3d\xa8\ +\x92\x60\x18\x9a\xe7\x90\xd9\x6b\xb9\x13\xce\x8b\x00\xe7\xba\x1d\ +\xc3\x7e\xb3\x91\x3f\xbc\x7a\xf1\xaa\x7d\x04\xb4\xbc\xf1\xa4\xfd\ +\x96\xc7\x7b\x56\xae\x5a\xb3\x6e\x16\x9c\xea\x85\x7d\x01\xda\x65\ +\x55\x65\xd2\x05\x08\xe5\x9b\xd8\xea\x71\x05\x7d\xff\xb6\x23\xd7\ +\x1b\x0e\xad\x1a\x48\xa5\x04\x90\xe6\x58\xd5\xb9\xe0\xb9\x8b\x9e\ +\xbd\xe8\x97\x4f\x38\x8e\xe6\x16\xed\x89\x16\xc0\xed\xc3\x99\x1c\ +\xfc\x53\x79\x4b\xbf\xe3\xd6\x79\x78\x17\xa7\xfd\xcf\x17\x07\xfd\ +\x4e\x67\xa6\xd9\x7c\x78\xde\x0a\x7f\x58\x8b\x86\x8a\x82\xb6\xbb\ +\xda\xa0\x08\x24\xfe\xaa\x95\x09\x60\x6d\x9b\x74\xba\x34\x9a\x5b\ +\x28\x0a\xd4\x50\x20\xe7\x98\x7e\x7c\x0f\xaa\xdd\xdc\x29\xe8\x42\ +\x0d\x81\x5b\xdf\xda\x5a\x71\xe3\xe7\x3f\x7a\xeb\x09\xa7\x3f\xff\ +\xde\xe5\xfe\xe2\xe4\xd1\xb7\x2d\x4b\x97\x01\x50\xb5\x2c\x49\x68\ +\x72\x48\xf7\xc4\x1c\xfd\x26\x29\xfd\x68\xf4\xee\x16\x31\x94\xa8\ +\x3e\xc3\x5b\xb9\x47\xb3\x05\x09\xff\x5e\x31\xa3\x91\xfd\x19\x9d\ +\x73\x23\x85\x79\x4f\x1f\x7e\xcc\x72\x0a\x9b\xff\xf5\x78\xcb\x82\ +\x2b\x87\xa5\x30\x94\x0b\x3a\x49\xd1\x7b\x2e\x1f\x82\x7b\x0a\x4a\ +\xec\xf3\xa7\x82\x64\x63\x3f\xcf\x61\xbd\x27\x98\xef\x38\x5a\x9b\ +\xc5\x8e\x1c\x79\x7a\x46\x64\x31\x73\xff\x04\x1c\x05\x1e\x5e\x78\ +\xca\x59\x59\x76\xee\xaf\x8e\x5a\xef\x24\xb1\x73\xe0\x67\x77\x6c\ +\x47\x71\x98\x17\x97\x9e\x70\x09\x05\xac\x17\x5b\x30\x93\x6f\xdd\ +\xbf\xe8\x94\x54\x60\xe6\xf5\x0d\x23\xc6\xb1\x6c\x19\x78\xf2\x3e\ +\xad\xf6\x27\x46\x48\x2f\x7c\x0f\xf0\x74\xb9\xc3\x3d\x3f\xc5\xce\ +\xeb\xe0\xb0\x6a\x67\x5e\x72\xa7\xd7\xcf\xb6\x02\xca\x72\x77\x84\ +\x25\x1d\x27\xfc\xde\xe5\x7f\xbf\x63\xf7\xb0\xff\x1a\x0b\x64\xa1\ +\x47\x09\x09\xa8\xe8\xe1\x0e\xc2\xfe\x3f\x5f\x18\xf4\xaf\xff\xa9\ +\xfd\x7c\x3c\xc7\x20\xbf\x3c\x4e\xfe\x11\x0f\x39\x8f\xb4\xb9\x61\ +\x65\xff\x07\x81\x17\x9d\xda\x3e\x6c\x20\x4c\x0e\xf0\x83\xca\xb3\ +\x88\x1e\xee\x66\xe0\x49\x29\xb9\xeb\x39\x47\xfa\x0a\x8b\xe3\xc1\ +\x16\xc0\x24\xba\xc2\x0a\x6e\xf6\x85\x61\xbf\x61\x60\x7f\xc0\x02\ +\xd8\xd2\xaa\x2a\x84\x9a\xbf\xf1\x83\x5b\xb6\xef\xb8\xf3\x91\x07\ +\x06\xfd\xf7\xfc\x0d\xb0\x7b\x50\x5a\x3a\x59\xe1\xbc\x6a\xf7\x00\ +\xfc\x3d\x33\xb4\x8b\x0b\x52\x4c\x41\xfd\xa1\xa0\xb5\xbe\xd0\x25\ +\xb2\xb5\x73\xb0\xbe\x00\x37\xc9\xe6\xeb\xc7\x7e\x7a\x70\x61\xd0\ +\xc9\xf3\x1b\xcf\x3c\xfd\xb5\x20\xec\xd9\x7e\x55\x8a\xd7\xaf\xf2\ +\xda\x65\x4d\x7b\x17\x21\xa0\x83\xea\xc3\xf9\x02\x73\xf2\xb6\x07\ +\x06\xad\xb2\x2d\x40\x4d\x0e\xda\x25\x63\x4a\xc5\xa3\x51\x94\x07\ +\x69\x88\xc3\xca\x75\xdc\x63\xac\x90\x07\x06\xa5\x8f\xb5\xd1\x32\ +\xcc\x3c\xf3\x17\xcc\xa1\xf9\x21\x55\xa0\xce\x3a\xff\xd5\x1c\x91\ +\x7e\x1d\x6c\xee\xc0\x10\xbc\xd3\x59\x7b\x16\xe7\x6f\x3b\xb8\x79\ +\xd3\x6d\x3b\x76\xef\xea\x14\x92\x31\x8b\x41\x71\xf0\xf4\x92\x0e\ +\xbf\xc0\xb5\x1e\x55\x14\xa2\x67\xb8\xef\xb7\x40\xf6\xf5\x1c\x44\ +\x11\xff\x13\x5f\x52\xb2\xdc\x59\xd4\x50\x26\xfb\x80\xf1\xe4\xd7\ +\x3c\x01\x01\xe9\xad\xc7\x38\xe3\xde\xdd\xcf\xc0\x91\xee\xbd\x64\ +\x61\x00\xf1\x17\x96\x71\xb9\x92\xdb\x05\xd9\x8b\x7e\xa6\x45\xaf\ +\xa2\x12\x4c\xeb\x54\x75\xf4\xbb\xa8\xa4\xc0\x4f\x96\xfe\xf7\x0c\ +\x20\x9f\xee\x6e\xb9\xfa\xe8\x09\xa0\x81\x27\xde\xf3\xba\xa7\x70\ +\x39\x18\xdd\x36\xcc\x33\x8b\x14\x88\xb7\x46\xb2\x92\x2d\x5e\x72\ +\x3b\x4a\xee\xe2\x4a\x89\x4e\x46\x5c\x1e\xfa\x9b\xbf\xff\xac\x4e\ +\xee\x46\xa4\xa4\x9e\x96\x5e\x30\x85\x99\xcf\xec\xe6\xad\x77\x5e\ +\x08\x4a\xea\x2a\x7a\x2f\x63\xe8\x8c\xb3\x99\x61\xed\x81\xb1\x96\ +\xc8\x51\x4f\x49\x55\xe0\x6c\x50\x2b\xa0\xd1\x96\xd8\xc5\x4f\x5e\ +\xf0\xbe\x8b\x0d\xae\xed\x06\x36\xc2\x64\x25\x05\x98\x44\x6b\x27\ +\xc1\xfd\x6c\xde\x3d\xec\xb4\x1a\xc5\x5d\xe6\x7b\xfd\xd0\x19\xd2\ +\x72\x8d\x73\xe5\x9d\xc3\x1e\xae\x4c\xee\x41\x69\x03\x5f\xe1\x9b\ +\xcd\x9e\xd7\x25\xf3\xf9\x52\x79\xfd\x2d\x9f\x3c\xc6\x09\x0b\x60\ +\xf5\x84\xa3\xa0\xa4\xa3\x85\xc2\x07\x7a\xba\x05\xb1\xea\x91\x61\ +\xc3\xe6\x4a\x4f\x80\x2e\x1e\x7c\xec\xba\xbd\x46\xf6\xd5\xbc\x44\ +\xa3\xa3\x75\x0f\xee\xea\xe7\x94\xdd\x59\xc2\xdd\x06\x45\xac\xa5\ +\x13\xe4\x48\x85\xb4\xe8\x9b\x86\x97\x0f\x1f\xb7\x5e\x99\x46\x83\ +\xac\x5e\x3c\x29\x21\xad\xcd\x6d\x19\x3a\xbf\x7b\x60\xff\xa3\xfa\ +\x8d\x49\xc0\x65\xa3\xac\xd3\x0c\x57\x4f\x37\xe6\x73\xd5\xea\xfd\ +\xfb\xd7\xdd\xbc\x75\x61\x57\xab\xa6\xea\x13\x70\x95\x44\x0f\x37\ +\x9b\x12\xe0\xa4\x5d\x11\x7a\xd2\x79\x7d\xf3\x55\x41\x54\xbb\x75\ +\xc6\x4f\x95\xd1\x93\x8a\x7b\xba\xd1\x65\x6a\x36\x7a\xae\xce\x9c\ +\x12\x7d\x7c\xb4\x61\x84\x7f\xc3\xcd\x3b\x87\xcd\x56\xa7\xd3\xea\ +\xe5\x54\x25\x13\xc1\x13\x47\xc1\x94\x32\xcd\x52\x85\x34\xad\xa3\ +\x88\x53\xe8\xc0\x12\x30\x94\x3d\x29\x2c\xf7\x39\xd3\xbb\x20\x3a\ +\xbe\xbe\xce\xdf\x70\x03\xb0\x13\x69\xfd\x42\xcb\xba\xcf\xbc\x97\ +\x73\x2d\x4f\x28\xcb\xd8\xf0\x41\x3f\xe1\x42\x94\x8c\xd3\x7c\xcb\ +\x5a\x1f\xeb\xe8\x93\x0e\xe7\xfc\xcd\x5b\x1f\x7d\x61\xeb\x95\x50\ +\x6f\x19\xfa\x1c\x7d\x0c\x94\xb4\x27\x46\xff\x06\xa7\xc9\x5f\x3b\ +\x62\xca\x33\xef\xf5\x9b\x76\x0e\x73\x48\x9b\x21\xab\x57\x48\x7d\ +\xbb\xa7\x4d\xc6\x4c\x6b\x28\xd7\x47\xa3\xb5\x9e\xdd\x68\x6f\x19\ +\x18\xd0\xd6\xe1\xd2\x4c\xd3\xb8\xa8\x2f\x1b\x54\xab\x86\x45\x41\ +\xf5\xdc\x1c\x95\xb4\xe9\xb1\xf4\x3e\x6d\xda\x5b\xd6\xaf\xbb\xfb\ +\x71\x93\x7d\xd4\x5c\xc6\xab\xec\x55\x97\x42\x82\x54\xf6\x98\x32\ +\x65\x4e\x2c\xfa\x90\x38\x65\xfa\x4d\xf0\x23\x0b\x03\xfb\x5d\x18\ +\xa4\xe7\x2d\xee\x79\x74\x48\x69\x93\x5e\xee\x89\x7e\xbe\x07\x02\ +\x6a\xc7\xca\x8d\xfb\x96\x8a\x7e\xab\xa8\xad\xcd\xfb\x65\x9d\x40\ +\xf2\x58\xc6\xe7\xed\x30\xb5\x19\x2a\xdb\x37\xdd\x08\x28\xc7\xf7\ +\x47\x1a\x18\x53\x3b\x87\x16\x26\xac\x4e\xb7\xbc\xef\x81\x5d\xba\ +\x82\xef\x94\x34\x5f\xfe\xb2\x67\x26\xe7\x4f\x82\xbd\xd0\x4f\xfc\ +\x68\xd1\xe1\x5c\xb6\xf1\xb0\x61\xab\x76\x05\x9d\xaa\x74\xaf\x52\ +\xa0\x0a\x33\x19\x26\x60\xa3\x5f\x5e\x95\xba\xe8\xf0\xbb\x00\x18\ +\x49\xd7\xf0\xbf\x35\x67\x38\x33\x3b\xb4\x3a\x80\x64\x3f\xd4\xde\ +\x32\x28\xe9\xec\xbc\x83\x76\x5b\x03\xd6\xa6\x27\xdf\xb6\x6e\xcd\ +\x4f\xae\xf9\xf8\xae\xa5\x26\x55\xca\x4a\xfb\x01\x18\xe9\xf2\x4c\ +\x8a\xb7\x41\x4b\xf7\xab\xc5\x2e\x85\xbc\x74\x21\x17\x6e\x58\xcb\ +\x77\x0c\xdc\xe6\x32\x52\x61\x6f\x66\xe9\xbb\x9e\x65\x75\x04\x1d\ +\x40\x67\x5a\xb4\x3a\xcd\x46\x4f\x2a\x7a\x75\x49\xc2\x47\xb6\x2a\ +\x8b\xf7\x77\x42\x33\x78\x48\xee\xba\x09\x42\xa0\xea\x42\x2e\xaa\ +\xe8\x9d\x1d\x17\x3f\x29\xa4\x00\xf2\x86\x67\xe6\x75\x66\xb1\xb3\ +\x9f\xe3\x6e\x98\x6a\xd6\xb0\x46\x54\x0b\x4a\x8d\xb4\x24\xa0\x60\ +\xf3\x8c\x30\xf3\xc2\x51\x00\xa9\xb2\xa6\x30\xc2\x7f\x12\x38\xda\ +\x81\x22\x3e\xd1\xe5\x27\x3d\xf6\x70\xcf\xc2\xfc\xda\x48\xa1\x9c\ +\x9f\xdd\x3a\xec\xf7\x20\xb1\xcf\x0b\x5d\x23\xb3\xbf\x65\x45\x84\ +\x20\x2b\x56\x52\x14\xbd\x28\x40\x68\xf4\xdd\x20\x6b\x12\xa3\xa2\ +\xc2\xd3\x77\x60\xa5\xee\xcb\xb6\x48\xaf\xb8\xda\x18\xf5\x89\x1d\ +\xe3\xf0\xef\x1b\xc9\xc2\x3d\x3f\xbb\x65\xe7\xb0\x3f\xd3\xe0\x30\ +\x9f\x8b\x4f\xf6\x26\xa0\x22\x77\x36\x25\x78\x89\x31\xc1\x0d\xec\ +\xf4\x63\x12\xe5\x9d\xda\x69\xf7\x64\x45\xbb\x72\x09\x34\xd4\x81\ +\xbd\x7a\xbd\xc5\xb6\xaf\x59\x14\xaf\x23\x79\x9f\x83\x20\x11\x25\ +\x3c\xb5\x47\x95\x88\xbe\x64\xb0\x0a\x2a\xb9\x27\xe1\xa8\xc7\x54\ +\xde\xb9\x83\x8f\x71\x65\xc7\x3f\x84\x32\x4c\x0b\xf9\x59\x7c\xf7\ +\xcb\x73\xb0\x00\x0c\x0d\xd0\xcb\x8d\x7e\x1e\xff\xd6\x2d\x3b\x07\ +\x4b\x9d\x06\x78\x51\x42\x4a\xdc\x14\xaa\x70\xd7\x8e\xc0\xaa\x45\ +\x94\x8c\x09\xe0\x91\xd5\xc7\x1b\xf6\x91\x86\x4e\x73\x84\x0f\xfe\ +\xe9\x21\x28\x5b\x7c\xff\x5b\xbd\xc6\x77\x5e\x75\x1c\x26\x18\x0f\ +\xbd\x30\xb4\xe6\xf4\xa1\x37\x9a\x64\xb2\xd3\xc0\xfd\x86\x00\xa9\ +\x7b\x4a\x2c\xe7\x61\x77\x0e\xa4\x75\xf0\x28\x0d\x45\x33\x02\xb8\ +\x98\x85\xa4\x71\xb6\x13\x56\x8f\x57\xe3\x31\x0a\x2a\x24\x36\x19\ +\x6d\x1d\x36\xf5\x5e\x83\x20\x05\x53\x8a\x38\x5a\xd6\xdc\xf8\xc0\ +\x18\x2b\x96\x3c\x00\x25\xd9\x3b\x8e\x66\x71\x3c\xaa\xeb\x8e\xba\ +\xb1\x00\x5e\xe7\x2c\x06\xb4\xe6\xf1\x61\x8b\x20\x4a\xcd\x59\xb1\ +\xd4\xdb\x65\xc2\xce\x07\x44\x0b\x38\xb5\xc3\xa7\x95\x49\xb4\xd3\ +\x92\x4a\xeb\x39\xc2\x8f\x3b\x75\xfc\x12\xd9\xc7\x14\xcc\xd5\xdb\ +\x4d\x69\x41\x73\x53\x65\x4c\x96\x22\x7e\x52\x37\x51\x4d\x1a\x0a\ +\x38\xc5\x96\xd0\xdf\x67\xa2\xa6\xf1\x16\x23\x2f\x4e\xe3\x77\xee\ +\x3e\xb9\x9f\x50\xae\x3a\x68\xec\xbb\x09\x05\xbd\x90\xa7\x92\xd7\ +\xe3\x25\x30\x81\x2a\xe4\x28\x1b\x53\x15\x59\x53\x96\xd1\x2a\x0f\ +\xfc\x65\xd1\x23\xdc\xe4\x6e\x83\xce\x41\x9b\x6f\xbe\x7b\xe3\xc6\ +\x4d\x07\x77\x98\x6a\x52\x93\x3a\xca\x98\x04\xa4\x92\xbd\x90\x34\ +\xbe\x40\xed\x21\x82\x09\x37\xb0\x51\xae\x52\x5b\x93\x94\x74\x92\ +\xc6\xa4\xa8\x35\x33\x03\xc8\x99\x9b\x0d\xda\x68\xd2\xb2\x67\x94\ +\x9a\x70\xbb\xbe\x2a\x45\x49\x85\x9f\x2c\x7b\xbd\xcc\x97\x58\x78\ +\xf2\x9a\x4a\xe2\x1a\x7e\x5c\x29\x91\xa0\x44\xc2\x3c\xa1\x9a\x2f\ +\x59\x3d\x0b\xf6\xf7\x68\x4d\xd2\x9d\x17\xb6\x40\xf0\x4b\xc1\x14\ +\xa2\x08\x3f\x1d\x8f\x2a\xac\x02\x53\x6f\x84\xe6\x82\x8f\x36\xeb\ +\xe1\xd2\xed\x8e\x28\x7a\xba\x3c\xca\xbc\x9e\xa2\x44\xbf\x23\x32\ +\x51\xfd\xb4\x3d\xff\x04\x38\x83\x5d\x50\x07\x53\xda\x47\xf5\x36\ +\x38\x35\x42\x8c\x93\x7a\x55\xd9\x07\x41\xd6\x9a\xa1\xa0\xa4\x6d\ +\xe6\x68\x92\xc4\x87\xc6\x05\x88\x40\x4b\x7b\x08\xb7\x30\x17\x48\ +\x5f\x70\x52\xd7\x28\x77\x96\x08\xe2\xaa\x62\xab\xb7\xdf\x2c\x76\ +\xc2\x9c\xb1\x7b\x2a\x69\xed\x04\xbc\x21\x53\xc7\xaf\x4c\x7a\x9f\ +\x09\x75\x94\xf7\xc2\x74\x3b\x11\xf4\x8f\x32\x3e\xe5\x9e\x2a\xb8\ +\x4a\x04\x6a\x11\xea\x4e\xd7\x36\xbe\xb3\x52\xf0\x65\x8a\x93\xa2\ +\xa4\x09\x6a\x46\x9b\xa1\xb2\x7b\x47\x85\x47\xd1\x51\x7b\xe7\xac\ +\xa9\x45\x91\x0a\x49\x80\x91\xc0\x61\x0f\x25\x1b\x7b\x09\xcc\xa4\ +\x4e\x52\x88\x4c\x05\x2a\x5f\xd1\xe6\xcd\x34\xea\xa8\xaa\x3a\x02\ +\x35\x02\x25\xad\xf1\x45\x1c\xe5\x1e\xe7\x42\x47\xf8\xd2\x39\x9c\ +\x68\xca\x04\x80\xe0\x4e\xa9\x40\x96\xb0\x79\xb5\x2d\x12\x17\x72\ +\xd1\x75\xba\x08\x9f\x37\x1b\xe2\x1e\xe7\x3a\xd6\xce\xdc\x13\x3d\ +\xf7\x91\x51\x6c\x02\x97\x47\x80\xd2\x01\x0e\x31\xa2\xf0\x59\x49\ +\x35\xe9\x8d\x06\x78\x73\xda\xa4\x76\x6c\x69\x1b\x5c\x50\xc2\x43\ +\x70\x75\x76\xc7\x62\xaf\x6b\x95\x2f\x65\x28\xf1\x64\xa3\xeb\x04\ +\xde\x02\x52\x73\x54\x59\x53\x51\x30\x4f\x0d\x46\xf3\x08\x4b\x45\ +\x51\x2d\x4c\x81\xaa\x71\x02\x36\x88\x4c\x04\x64\x9d\x6a\x77\x2c\ +\xd3\x2e\x5f\xdc\x28\xfc\x26\x5a\xde\x84\x40\xea\xc8\x4f\x6c\xd4\ +\x02\xdd\x74\x0f\x5e\x8e\xab\xa0\xa3\xd1\xb9\x06\x30\xfd\x9a\x20\ +\x46\x59\x28\x94\xc4\xa9\x92\x57\x0a\x3b\x25\x9d\x4f\xd5\x75\x02\ +\x5b\xe2\xe6\x51\x92\x7d\x44\x0c\xb2\xce\xfd\x0e\x88\x92\x8c\xc9\ +\x57\x51\x78\x2b\xb3\x07\x4b\x02\x37\x1a\xf7\x63\x33\x64\x42\x19\ +\xaf\xf5\xc0\x55\x61\xa7\x18\xbc\x94\x1f\x74\xf7\xa0\xbc\x74\x34\ +\x4a\x1c\xc5\x64\x04\x81\xc6\x8b\xbd\x4a\xef\xe2\x45\x29\xf6\xa4\ +\xa1\xe8\x0b\x7c\xa0\x4e\x86\x15\x7c\xc1\x49\xbf\x04\x98\x48\x15\ +\x20\xd8\x39\x55\xe2\xee\x85\x50\x37\xd5\xaa\xc4\xd2\x57\xeb\x53\ +\x2a\x5d\x16\x12\x93\x4a\x72\xd4\xf7\xa7\xfc\xa1\xa1\x02\x91\x6e\ +\xd6\x31\x4a\xf9\x48\x49\x1d\x10\xa6\x33\x7b\xcc\xed\xd8\xdd\x5b\ +\x88\xa8\xa5\x88\x56\x88\xd7\x7a\xf7\x26\xb2\xa0\xd1\xe8\x49\xde\ +\x74\x0a\x03\x38\x2b\xe8\x32\x4f\xec\xca\x37\x95\x7e\xd7\x53\x8a\ +\xa1\xd3\xe1\x7e\x3d\x8b\x1f\x2e\xe0\xac\x8e\x45\xc1\x99\xe2\x8a\ +\x24\xf6\xa4\xe2\x12\xdf\x8c\xea\xb4\xe0\xe1\x8a\xce\x08\x09\x50\ +\xe4\x67\xc8\x51\x45\xc4\x50\xca\x97\x84\x72\x56\x50\x8a\xf3\xc2\ +\xe4\x8e\xac\x5e\xae\x04\x58\xc1\xe9\x70\xeb\xc5\x9e\x1d\xe9\xa1\ +\xdb\xdb\x85\x9f\xda\x96\x30\x22\x09\xda\xdb\x45\x07\x38\xb8\xa7\ +\x57\x2a\xc2\xcf\xda\x5e\xe8\x9c\x0e\x45\xe9\x15\x10\xad\xf4\x68\ +\xea\xa8\x9e\x80\x13\xff\x87\xa1\x86\x1f\x8f\xb2\x97\xd2\xba\x5a\ +\xe2\x8b\x78\x89\x77\x50\x1a\x0f\xdc\x53\x49\x76\x1f\x83\x8d\x9a\ +\xb1\x05\xa7\xb8\x27\x87\x91\x20\x36\x24\x70\x16\xa4\xc2\xd2\x42\ +\xbb\x52\x11\x3d\xac\x4e\xc2\x4c\xbd\x84\xea\xf5\x53\x3c\x7d\xd2\ +\x95\x4e\x8b\xe8\x63\x3d\xa5\x48\x4f\xf5\x8e\x4a\x2c\x2a\x50\x35\ +\x4e\x0f\x69\x85\xa2\xaf\xb5\x72\xf2\xaf\xc2\x7b\xc8\x46\x9d\xc8\ +\x94\x50\xd6\xcc\x51\x9f\x1c\x52\x12\x7b\x1a\x66\x70\x48\xa8\x4a\ +\xe4\xa0\x9e\xe0\x43\xb9\x13\x4f\x63\xa8\x0d\xed\x48\x7b\x08\x17\ +\xfd\xa8\x40\xad\xa3\x65\x94\x6f\x8d\x95\x71\x92\x13\xad\x62\xaf\ +\x9f\x54\x4e\xd5\x8e\x1b\x53\xea\xf8\x45\x41\xbe\x54\x13\xb5\x65\ +\x32\x52\xfa\x12\x9c\x64\x4d\x5e\x72\x57\x7b\x6b\x91\x58\x13\xfb\ +\xfc\x90\xa5\x11\xa5\x39\xea\x4c\x5e\x4e\x0b\xe1\xe5\x91\xc4\xa3\ +\x31\x2f\x45\xf4\x08\x14\x9e\xf8\x80\x98\x68\x67\xe2\x00\xeb\x38\ +\x0a\x63\x51\xdf\xe3\x17\x72\xde\x92\x97\x4e\xfc\xc0\x28\x2f\xc2\ +\x2b\xa2\x27\xf1\x87\x82\x47\x2f\x9a\xce\xed\xd3\x52\x9f\xe6\x54\ +\x44\xa3\x05\x98\x12\x98\x68\xaa\x95\xf0\xe3\x45\x49\x5e\x88\xb6\ +\xf2\xc5\xdf\x26\xac\xc4\x4e\x7e\x4f\xa4\x81\x8e\x5f\x99\xe4\xec\ +\x4d\x4f\x67\xf5\x12\x34\x49\x5e\x2f\x4b\x68\xec\x45\xeb\x14\x4b\ +\xdb\x1c\xe5\x27\xad\xe9\x10\x1c\x85\x5b\x05\x25\xe8\x9f\xe0\x1d\ +\x87\xa3\x79\x8d\xa0\x31\x38\xd1\x3a\xca\x58\x2b\x78\x02\x94\x0e\ +\x9f\xb2\x7d\x71\xf8\x87\xe4\x68\x4c\x64\x4c\x31\x47\xc9\x90\x88\ +\xa7\xf0\x0e\xd9\x2a\xc2\xaf\xf4\x5a\x2f\x2a\x10\x1b\x53\xda\xec\ +\xd3\x6b\x3d\xf3\x13\xcc\x1e\xef\x98\x28\xa9\x8b\x32\xd1\xb2\x14\ +\xa6\xf2\x86\x7d\x1c\xe6\x89\xe0\x15\xcc\xd8\xe8\xd3\x7e\x54\x83\ +\x25\xa4\xee\x75\x8b\x57\xcc\x8b\x30\xea\x42\x49\x29\x77\x2a\x1a\ +\x95\xf3\xf5\x78\x4b\xdc\xcc\xfe\x3e\xbd\x17\x1a\x55\x72\xf5\x15\ +\x14\xc6\x59\x3f\x51\x0d\x04\xaf\x6c\x83\xfb\x71\x53\x25\x58\x35\ +\x57\x05\xa6\x66\xea\xf8\xf3\x4c\xc2\x4e\xc1\x2a\x20\x75\xc6\x9c\ +\xf3\x52\x9f\x0a\x4a\x2a\x08\x98\x08\x27\x20\x56\x06\xc5\x62\xd7\ +\x09\x09\x92\x62\x29\xfc\x26\x0f\xb5\x08\x44\x85\x14\x50\x22\xd4\ +\x5c\x4a\x7a\x3e\xcc\x20\xbb\x2b\xc9\xa2\x38\xb9\xab\x12\xf1\xbd\ +\xc0\xa4\x97\xf2\xa5\x63\x8b\x64\x4c\x92\x2b\x93\xcb\x27\xe1\xcb\ +\x81\x2b\xf0\x50\xb9\x64\xf6\x01\xd1\x22\x4f\x1f\x1a\x24\x3f\x2a\ +\x74\x8e\x65\x1f\xbb\x54\xda\xb8\xd3\x3a\xca\x87\x03\xd1\x90\x98\ +\x10\x1f\x97\x1e\x85\xa7\x60\x48\xc2\xd1\x32\x26\x02\xa8\xa3\x91\ +\x38\x6a\x86\x57\xca\xea\x79\x09\x2d\x84\xab\x3d\x8c\x48\xb4\x31\ +\x49\x2e\x4f\xfe\x29\xd4\x51\x0c\x9f\x88\xa7\xc2\xe0\x76\x60\x4c\ +\xa1\x6f\x4a\x6f\x8a\xa4\x83\x12\x01\x8b\x28\x1d\x43\xb7\xcd\x9f\ +\x7c\x52\xa3\xc8\xd5\x09\x31\x92\x3a\x7c\x85\x35\xe7\xf4\x29\x5b\ +\x11\x39\x6b\xa8\xe4\xcc\x41\x40\x0a\x37\xe7\x23\xd3\x52\x1f\x4d\ +\xa4\xcb\x54\x24\x5b\xfb\x39\xbb\xcb\xfc\xc1\x46\x78\xda\xb2\xe0\ +\x1d\xf0\x42\x2f\xa1\xbc\xc5\xcc\xbb\xa0\x55\x00\x58\x6c\x3e\xb4\ +\x7a\x25\xf9\x76\xcc\xd1\xc8\x9c\x0a\x00\x0a\xce\xe9\x58\xb7\x1d\ +\xde\xc7\x42\x2e\x9f\xb9\x23\xb4\xbe\x1b\x2d\xf9\x06\xab\xc7\xae\ +\x0d\x0f\x29\xaf\xf3\x82\x36\xb2\xfa\x34\xce\x69\x0e\x4a\x84\x7a\ +\x00\x16\x39\xfa\x8f\x8b\x96\xce\xdb\xdd\xc7\x14\x14\x80\xfa\xbb\ +\x22\x4c\xc2\x4e\xb1\xf6\x38\x28\x01\xa0\x5e\x8c\x1f\xc5\x79\x41\ +\xcf\x78\x3b\x88\xf0\xe3\x68\x14\x9b\x89\xfe\xcd\xf2\x73\xd3\xbe\ +\xa5\x1e\xc0\x44\xd1\x73\x6a\x1f\xc3\xac\x18\x2c\xbc\x75\x3b\x11\ +\x82\x44\x94\xfc\xa1\x84\x3f\xd6\x3f\x05\x82\xc7\x62\x0e\x6f\x86\ +\x9d\x64\xb7\xc4\x77\x75\xa4\x88\x5f\xa3\x49\xd5\x29\x37\x2a\xce\ +\x5e\xf8\x2a\x6c\x55\xc6\xa4\xf3\xfa\xd8\x96\x22\x8e\xb6\x7c\x96\ +\x16\x08\x56\x36\x6d\x6d\xaf\xc1\xca\x81\x3e\xba\x0c\x9a\x29\x0b\ +\x53\xa1\x22\x7c\x78\xe8\x5b\x3a\xf3\x62\xeb\x97\xd0\x24\x61\x4e\ +\xf0\x95\xce\xeb\xb5\xe8\x01\x64\xcf\xfa\x26\xab\xa2\xbb\x1b\xfe\ +\x12\xea\xa5\x4d\xc0\xda\x20\x17\xf1\xfd\x3d\x4a\x1f\x49\xe2\xa6\ +\xf1\x79\x3d\x8b\x5f\x9d\x0c\xe4\x63\x42\x1a\x26\x00\xc5\x54\xe4\ +\x6a\x77\x84\x4a\xf6\xeb\x83\xe8\x9e\xa9\x0c\xda\x89\xf0\x57\x82\ +\x12\xc1\xaa\x33\x91\xb4\x86\x26\x2a\xce\xad\x56\xe0\x9e\xf4\x78\ +\xa2\x29\xdb\x42\xdc\x47\x98\xf0\xca\xe1\x85\x2a\x9a\xee\x29\xa0\ +\x10\x5f\x93\xb6\x79\xb8\xd3\x05\x9d\xf4\xbc\xa7\x98\xa4\x36\xda\ +\x70\x5d\x64\x2b\x87\x80\x53\xf5\xe8\x58\xae\x26\x49\x71\xb3\x4e\ +\x54\xc5\x03\x96\x96\x41\x22\xe2\x7e\xc2\x28\x8f\x3a\x20\xe2\x7c\ +\x99\xe0\xfe\x40\x94\x14\x91\x3a\x2a\x38\xcd\x47\xc8\xa5\x2e\x92\ +\x0a\x51\x41\x5f\x62\x92\x30\x38\x89\x1d\xbe\x72\xa3\xe9\x02\x44\ +\x11\x8c\xd0\x02\x8f\xbf\xb5\xa3\xfa\x9e\xdc\xb9\xab\x74\xe5\x01\ +\xb0\x62\x47\xd9\xd8\x15\x1f\x39\xaa\x1c\x14\xd9\x3c\xde\xb1\x1f\ +\xb5\x2a\x1a\xa4\x4b\xea\x94\xed\x1e\xe8\x6a\x2d\x42\x96\xd2\x18\ +\x00\x41\x5b\xaa\x28\x9f\xca\x0f\xda\x94\x10\xa0\xd8\x51\xa9\x94\ +\x54\xb0\xb6\x63\x8e\x2a\xa3\xd7\x11\x3e\x7c\xd8\xa0\x64\xdd\x40\ +\xb8\x89\x48\xbd\xa9\x54\x85\x40\xad\xb0\x43\x4b\xf2\x26\x79\xda\ +\x71\x8c\x5f\xa6\xa3\x3c\x0d\x76\x5a\x38\x9a\x36\x26\xc7\xd0\x27\ +\xad\xd9\xcf\x0e\x91\x9f\x62\x4e\x32\xb5\x40\x2f\xa1\x25\x3c\x20\ +\x74\x6e\x70\x1f\x9f\x30\x87\x86\xaf\x58\x1a\x59\x7d\x0b\x1f\x01\ +\x2a\x11\xa9\xeb\x2c\xdc\x3e\x28\xc4\x37\x01\xa1\x8e\x86\x8a\x5a\ +\x09\x44\x29\x3a\x56\xc9\x6c\xb9\x8c\x4d\x49\xe7\xa1\x01\xd6\xd4\ +\xd6\xb2\xa8\xe8\xd3\x23\x00\x3a\x7b\x3d\x00\x65\x6e\xe2\x71\x60\ +\xf2\xfa\x9a\xd2\x85\x27\x5f\xee\x29\x98\xb2\xce\x27\x19\x3a\x0d\ +\x79\x7d\x94\x87\x16\x04\xf7\x95\x73\x38\xa5\xc3\xf3\x4f\xcc\xd4\ +\x90\x9d\x62\xe8\xfc\x23\xad\x3a\xa4\x9b\x48\x64\x46\xd1\x72\xcf\ +\x2c\x8d\x37\xc4\x62\x12\xb0\xc5\x7f\x3b\xa0\x53\xfb\xd8\x94\x04\ +\x64\x2e\xf3\xd3\xf4\xa6\xad\x18\x7b\xcc\xd4\xb6\x96\x7c\x7a\x70\ +\x5e\xbc\x86\x2a\x87\xdf\x2c\x18\xa2\x38\xd2\xf7\x7d\xfc\x00\x9e\ +\x11\x21\x6b\x42\xf1\x53\xef\xa8\x22\xe9\xc3\xaf\xb5\x0f\xad\x54\ +\xaa\x9c\x2c\x3e\x01\x32\x42\xaa\xc5\xae\xf3\x7a\xfe\x2d\xd4\x5e\ +\x68\xef\x5b\x6e\xb9\xa7\x45\x94\xdc\x13\x3c\x2a\x19\xad\xd0\x9a\ +\x58\xe2\x22\xf6\xa4\x67\x2a\x23\x77\x8f\x97\xc3\x9b\x6e\x7e\x11\ +\x90\x8c\x92\xfb\x74\x8e\xc5\xe5\x3e\xea\x75\x35\x97\xe6\x25\xde\ +\xe2\xf1\xe3\x3a\x2e\x82\x64\xc4\x21\xe9\x13\x18\xf1\xf8\x8f\x74\ +\x79\xd4\x71\x15\x97\x7b\x03\x30\x6e\xc5\xd6\x06\x25\x39\x88\x54\ +\x20\xd3\x2e\x54\xf3\x53\x48\x2d\x4a\x11\x47\x23\x88\x64\x4c\xae\ +\xf2\xf4\x15\x77\xac\x8d\x26\xaa\x68\xac\x51\x44\xaa\xf6\xc3\xd2\ +\x2d\x5a\x0a\xb3\x80\x65\xa1\x27\x9a\x72\xa7\x13\x7e\xb4\x47\x65\ +\x1d\xae\x8f\xed\x41\x25\x05\xe2\x11\x10\x45\xbc\x11\x5e\x55\x15\ +\x3e\xd8\x5f\x10\x28\x28\x1f\x18\x80\x83\x57\xf8\x28\x76\xa6\xe3\ +\x51\x89\xf0\x9b\xd2\x98\xc9\xfb\x4c\xe6\x17\x93\x51\x50\xd2\x5d\ +\x34\x77\xd4\xfe\x00\xce\x31\xed\xed\x95\x01\x08\x0f\xad\xf5\x95\ +\x9a\xa0\x25\x7e\x89\xe6\xe6\x69\x76\x2a\x3d\x55\xee\x89\x2d\xde\ +\x81\xf4\x5a\x35\x80\x50\x49\x47\x3b\x1b\x7e\x83\x1e\x1b\x3b\x43\ +\x2d\xcb\xa8\x15\x1f\xde\x75\xb8\x0f\xae\x7c\x69\x16\x6a\x28\xbd\ +\xe2\xf9\xa3\xa1\x31\xe9\xe0\x09\xa4\xff\x3d\x38\xae\xf8\xca\xf7\ +\x17\x82\x93\x43\x66\x04\x5b\xe9\x6c\x44\x69\xa9\x6a\x2a\xd1\x79\ +\x53\x74\x8e\x55\xc7\xa3\x71\xff\x68\x6a\x9f\xc9\xde\x68\x4e\x38\ +\xeb\x61\xcf\x77\x84\x9d\xbc\xd5\x14\xee\x34\x45\xbb\x4c\x71\xda\ +\x34\x2e\xca\x53\x21\x1e\x7e\xa4\xfd\x68\x41\x0c\x15\xb8\x60\x4f\ +\x37\x2d\xe2\x01\xc0\x0e\x67\x20\xb2\xdb\x90\x27\x12\xbc\xd8\x8f\ +\xb2\xa5\x8b\x92\x86\x6b\xfd\x84\x02\x2b\xa4\x37\x1b\xd2\xdb\xf6\ +\x54\x1a\x7f\xcc\x01\xbd\x79\x00\xc2\x0f\xba\xf3\x94\x6e\x0a\x5b\ +\x4b\xd2\xd4\x80\xb0\x37\x8f\x8e\xb3\xfd\xba\xf1\x68\x33\xa1\xa0\ +\xe2\xa2\x78\x36\x11\x9c\x79\x58\xbd\xbb\x0f\x56\x0f\x28\x99\x99\ +\x9a\xa5\xf1\x26\xa3\x40\x95\xea\x43\x86\xef\x2c\x53\xec\x1c\x1b\ +\x8f\x4e\xf3\x86\x98\xc0\x0c\x92\x3b\x6e\x7b\xfb\xe7\x3f\x3a\x6c\ +\xd0\x07\x86\xb2\xf8\x35\x4c\x01\x18\xe6\xca\x71\xa9\x24\xcd\x50\ +\xd9\x0f\x39\xd4\x74\x22\x81\x9b\xde\x66\xa2\xf2\x78\x54\x23\x8b\ +\xcd\x69\xfc\x1c\x67\xf7\xc2\xf3\xcb\x31\x8d\x8f\x47\xd5\x06\x0e\ +\x71\xd2\x37\xfc\x9e\x6e\x7b\xd2\x00\x8b\x78\xdb\x96\x64\xae\x0d\ +\x4a\x62\x66\x39\xff\x1f\x99\xbd\xea\x78\x8c\xfb\x47\x63\xe2\x31\ +\x4a\x8a\xa7\xb2\x73\x27\x3b\x63\x22\x7e\x4e\xe5\x25\x8e\x4a\xda\ +\xbd\x70\x54\x77\x3b\xea\xca\x78\xba\x2d\x53\x8f\x4c\xf4\xb6\x6b\ +\xb1\x7d\x98\xa8\x06\x7c\xaa\x0f\x1f\x5f\x7a\xe8\x34\xa2\xc4\x77\ +\xe5\xc5\xf6\x19\x3c\x08\x94\x6d\x49\x80\x8e\x8f\x47\xc3\xce\xe1\ +\x82\x9b\x72\xa9\x4b\x4b\xb1\x35\x57\xeb\x52\x11\x04\x25\x78\xe4\ +\x8a\xa2\xbd\xa8\x40\x8a\x53\x20\xc0\x41\x65\xee\x56\x91\xf3\xf8\ +\x99\xe8\x41\xed\xa9\x90\x5e\x22\xb7\xd5\xe4\x71\xb4\x96\xd8\xa9\ +\x66\x73\xf2\x4f\x32\x96\x12\x92\xaa\xc1\xe8\x55\x32\x0b\x35\x10\ +\x11\xa7\x0f\xd5\x73\x4b\xc4\xd3\xe9\x74\x3c\x5a\xa8\xa1\x3f\x21\ +\xd5\x61\x54\x02\x4f\x72\x7a\x7b\xca\x43\xb5\xd9\xe4\x65\xaa\xeb\ +\x98\xcc\x3e\xb5\x0d\x8e\x97\x82\x2a\x91\xb3\x3e\xc9\x86\x56\x2f\ +\x77\x6a\xf9\x14\xb4\x31\xb5\x79\xe6\x30\xcd\xf2\x55\xe7\xd6\xbb\ +\x80\xb2\x0b\x34\xbe\xe5\x2d\x91\xdb\xab\x09\xa4\xb9\xbf\x73\x07\ +\x4f\xc8\xd4\x60\x82\xb3\x70\x36\x6c\xd2\xe2\x59\xbe\xf6\x46\x94\ +\x48\x30\xa1\xc4\xe0\x0c\xe3\xbc\xa6\xee\xd2\x61\xff\xc9\x20\x1b\ +\x7a\x84\x37\x0a\x9f\x26\x64\x27\x59\xea\xa0\x92\x8e\x2a\xc1\x67\ +\x3c\x55\x03\x60\x66\xda\x41\x75\xbd\xb1\x2f\xe9\x95\xa9\x99\x5e\ +\x9b\x74\x57\x01\x59\xbd\x3f\x70\x5a\x3c\x54\xdc\x49\x88\x20\xa3\ +\x71\x15\xe9\x69\xbe\xfe\x18\xe7\xe9\xb7\x5c\x1a\xe5\x23\xa0\x9e\ +\xda\xe8\x0b\xde\xaf\x8f\x67\x63\x87\x4b\x68\x28\x77\x40\xc9\x9e\ +\xb4\xc6\x4b\x9d\xad\x4f\xe3\xec\x32\xd2\x53\x2f\x9d\x32\x15\xaf\ +\xcf\xd6\xe9\x31\x4a\xf1\xca\x14\x2e\x4a\x78\xfb\xfb\xf5\x48\x85\ +\x7f\x5e\xa0\x44\x9f\x1f\x13\xc3\x25\x8c\xf0\xf6\x8d\x09\x8f\x04\ +\x9f\x3c\x32\x40\xef\x68\x06\x76\x9f\xd8\xb7\xf3\xc7\x7a\x2a\xe1\ +\x13\x52\x9c\x91\x8b\xac\x8d\xd2\x7a\xf9\xd2\x31\x09\x8f\xc5\x2e\ +\x15\x47\x23\xe1\xff\x16\x9c\xf6\xee\x27\xe2\xd1\x68\xb3\x01\xd7\ +\x7a\x8a\x48\x7b\x08\x53\x82\x27\xae\xe4\x45\x2e\x2a\xda\xaf\xaf\ +\x3d\x98\x99\xaf\xa5\x6d\xb8\x4a\xb1\x24\x1a\xf9\xb2\xc1\xc6\xe8\ +\xe7\x0d\xdb\xc9\x41\x00\x7a\x9c\x2f\x13\x32\x94\x81\xaa\x6d\xf0\ +\x9c\x57\x50\xbd\x15\x26\x47\x82\x6b\x3e\x65\xcd\xc1\x93\xa7\x9f\ +\x40\xb2\x2e\xd1\x14\xef\xee\x3b\x8f\xde\xb8\x7d\x61\xd0\x31\x9f\ +\xf1\x68\x05\x0d\x93\x36\x6d\x81\x95\x7a\x40\x32\x2f\x4c\xbc\x82\ +\x0a\x54\x9d\x92\x00\xbe\xb0\x40\xc6\x0e\x0a\xe8\xd4\x6b\x8f\xba\ +\x36\x8c\xf2\x00\x6b\x33\xcf\x92\x87\xac\x35\x52\x2a\x3c\xf4\x0a\ +\x16\xbb\x6e\x27\x92\x43\x18\xda\x37\x55\x5e\xfe\x41\x0e\x2a\xdc\ +\x0c\x65\xa0\xe7\x6e\x38\xff\x1f\x4c\x95\xf8\x27\x33\x08\x52\xd6\ +\xa6\x36\x7b\x7b\x5d\x71\xd6\xee\x9e\x66\x3b\xf2\xf4\x0f\xe5\xee\ +\xd1\x96\x08\xac\xee\x22\xd3\xbd\x1a\x08\x52\x9f\xbc\x62\xfd\xdc\ +\x70\xef\x68\x84\xc3\xaf\x3c\xab\x77\x77\xd7\xca\x7c\xc3\x17\x0e\ +\x3f\xbb\x54\xa2\x6f\x69\x63\x2a\x88\xa1\x05\x5e\xc2\xd2\x9c\xa7\ +\xf9\xca\x39\x31\x40\x1c\x9e\x67\x2a\x69\xe6\x4f\x5c\x25\x41\xa8\ +\xbf\x2d\x33\x11\x16\xca\x8c\x5b\x20\x1c\x37\x4f\xdd\x70\xd4\xe1\ +\x23\xa8\x74\x0a\x43\xdf\xc9\x8d\x05\xe1\xf0\x34\x22\x6d\x4a\x20\ +\x79\x75\x78\x59\x53\x45\x27\x42\x69\x8a\x7b\x5c\xcb\x03\xab\xbf\ +\x6b\x91\xe9\xc1\x86\x96\x7d\xf7\x0b\x3c\xc4\xeb\x2f\xcb\xb8\x23\ +\x57\x5b\x93\x93\xbc\xb0\x15\x89\x4c\x09\xde\x14\x94\x84\x58\x01\ +\xe8\xb8\x92\x0e\x99\xfd\x5f\xb9\xe9\xb8\x73\xe6\xbd\xb1\xe3\xa3\ +\xec\x76\x7f\xe6\x0d\xf0\xea\x75\xe3\xf1\xc8\x2a\x6e\x26\x05\x05\ +\xa4\xb1\xe8\x45\xe6\x45\x98\x89\x94\xfa\xc8\x00\x2c\xa5\x02\x52\ +\xbc\xe8\xad\xaf\xb9\x7d\xc7\xbe\xc1\xb1\xa0\xa4\x8a\xa3\x13\xa2\ +\x15\x8b\x07\x3a\x8c\x72\x7c\x0d\x3f\x15\x96\x00\x50\xbc\xf3\xc4\ +\xe1\x30\xe9\x7b\xc3\x29\x25\xf0\x1b\x85\x24\xf0\x54\x45\x9e\x65\ +\x5f\x85\x11\x9c\xda\x9a\x4e\xb5\x03\x18\x57\x6f\x5e\x6d\xde\x93\ +\xa2\xa4\xf1\x78\xe4\xa2\x60\xa4\x78\x2b\xd1\x4b\x75\xbc\x8e\x04\ +\x0f\xf8\xc0\xa2\x90\xca\x4f\x6f\xd8\x80\x7d\x3a\x82\xd3\xde\x14\ +\xe6\xfd\x0e\x28\x69\xcf\x83\xd9\x35\x48\x2f\x38\xec\x8b\x4b\xad\ +\x8b\xac\x6e\xec\xce\x14\x47\xd3\xe5\xfb\x18\x66\xa1\x36\x9a\xd8\ +\x9e\x94\x83\x2a\x2b\xda\xbc\xa9\x36\x5c\x61\x6c\x17\x66\x77\x57\ +\x3a\xb5\x93\xa5\xfe\x5c\x54\xd2\x4c\x8d\xff\x98\xb0\xdf\xd3\xa0\ +\xa4\x85\xe2\xa8\x30\x34\x4c\x47\x10\x2a\xa3\xcd\x55\x63\x41\x2e\ +\x1c\xd5\x33\x92\x2d\x3d\x7d\xb4\x9d\x01\x36\x1a\xed\xab\x83\x61\ +\x15\x7e\x40\x92\xdd\x0b\x33\xb9\xa2\xf1\x69\x5d\x43\x53\xa1\x92\ +\x6a\x8c\x85\xdc\x32\x85\xb2\xe7\xf3\x53\x80\x06\xc9\x32\x1f\x60\ +\x05\xa4\x97\xd1\xd8\xdc\x86\x8f\x13\x63\x27\x46\xfa\x72\xa7\xa4\ +\x99\x72\xf8\xf0\x74\x2f\x85\x3e\x26\xd5\x01\x91\x4c\x46\xa8\xee\ +\xa8\x55\x14\x58\x2a\x3a\x0a\x48\x99\x9b\x70\x13\x47\xef\xc3\xa9\ +\xc3\xaf\xef\x28\x97\x1f\xcc\x47\xbe\x16\xb6\xae\xc9\x93\xca\xe4\ +\x17\x03\xf4\x2d\xb0\x67\x94\x29\x8e\xa6\xcb\x64\xc4\x50\xae\x3c\ +\x22\x52\xad\xa3\xb9\xea\xc4\x16\x43\x5a\x31\xb9\x38\x37\x85\x03\ +\x67\x2b\x07\x72\xc5\x0a\x67\x4c\xa8\xa4\x10\x37\x5b\x25\xbd\x66\ +\x46\x80\xf2\x90\x37\x51\x52\xed\xf0\x95\x6a\x8a\xd5\xa7\xdc\x13\ +\xf0\x94\x74\x14\xb5\x34\x97\xe3\x96\x78\x55\x2b\x4e\x5b\x7a\x3d\ +\xcc\x8b\xca\x0d\xc8\xff\xfd\x8f\xc9\xf5\x46\x63\x8f\x3d\x61\x45\ +\x99\x50\xd2\x25\xc8\x44\xbb\x5d\x1e\x50\x04\x61\x49\xa8\xa4\x02\ +\x53\x6b\x6a\xaa\x46\xa6\x9a\x1f\x64\x6b\xb9\xd0\xe7\xd6\x79\x44\ +\xee\x7b\x47\x4e\x49\xff\x6b\x52\x26\x10\xff\x89\x75\xfd\x02\xf5\ +\xe5\x6e\xb9\x67\x86\xe2\x3d\x61\x80\x1a\x25\x1d\x4d\x0e\x26\x3e\ +\xf3\x91\x7b\xa7\xe6\x8e\x59\x11\x0e\x4a\x05\x78\x52\x7b\x12\xc1\ +\x4b\x4f\x09\x22\xd5\x7d\x3a\xc2\x51\x91\x7e\xbd\x02\x66\xab\x76\ +\x2c\x18\xa1\xd7\x03\x50\x42\x7a\xed\xc8\x2a\x69\x4f\x1b\x93\xd1\ +\x53\x52\xd2\x2b\xb1\x5f\x60\x73\x09\x1c\xc5\x08\x8a\x48\x4a\x0f\ +\x52\xc5\x07\x62\xb8\x1c\x3c\xeb\xe2\x78\xc5\xa3\x3f\x2a\x1e\x39\ +\xbe\xfa\x4d\xc1\x6c\xd7\x73\x6a\x51\x51\xe7\x49\x37\x75\xb4\xcb\ +\x87\x22\xc9\x67\x20\x73\x92\xa1\xdc\x13\x89\xde\x51\xd6\x51\xc5\ +\x52\xd5\x54\x02\x6e\x1e\xf5\x54\xac\x1e\xed\x9e\x07\x7d\xc9\x28\ +\xe4\xb9\x75\x77\x6c\xd9\x7a\x60\x19\xb8\x82\x4f\xe5\xa5\xa4\x76\ +\xbf\x90\xe5\xbe\x4b\x50\x27\xa6\x3f\x62\x62\x6a\x9f\x56\x3e\x72\ +\xbd\xf3\xa3\x71\x43\x11\x7c\x44\x89\x08\x4d\x2a\x81\x07\xf3\x10\ +\x86\xfa\x06\x74\xf8\x7b\x9f\xbb\xee\x3a\x54\x52\xc2\x69\x86\xd3\ +\xb6\x8a\xba\x5c\x7b\x0e\xc4\xca\x7d\x96\xbc\x53\x52\x59\xee\x41\ +\x41\x7f\xf5\x94\x96\xc1\xaa\x8d\x97\x2c\xb5\xda\x10\x38\xc7\x5d\ +\x84\xe1\xc0\x69\xed\x9f\xc0\xd7\x03\xd2\xa8\x55\x63\xc3\x87\x8f\ +\x36\x4c\x9b\xdb\x55\xc3\x5a\x8f\x63\xec\xb6\x0c\xd1\xed\x67\xf7\ +\xc1\xea\x9e\xa3\xe8\x4b\xf2\xa4\x3d\xe4\x27\x5c\x24\x73\xc8\x45\ +\x6d\x9a\xd7\xa2\xbe\xa7\xa6\x67\x4f\x85\x84\x4f\xa4\xa3\x31\x4f\ +\x81\xab\x2a\xb3\x43\xb8\x9f\x7e\x0a\xa1\xdd\xd9\x03\x96\x1e\x01\ +\x38\x37\x01\x4e\x58\x99\xf6\x5a\x91\xae\xe9\x78\x39\x3d\x2e\xf7\ +\xdd\x0d\x2f\xbf\xec\xd2\x0d\xb0\x80\x9e\x4d\x9c\xdc\xf4\xa0\x9d\ +\xbb\x4d\x8b\xd3\x98\x52\x1e\xfd\xc6\x1c\x35\xa0\x98\xa3\x05\x49\ +\xbe\xda\xb0\xd7\x02\x7d\xd9\x08\x81\x1e\x9c\xa9\x4a\x56\xd2\xdd\ +\x1d\x09\x9f\xee\xb1\x9d\x34\x43\x1e\x96\xda\xce\xac\x92\x4e\xbe\ +\xed\x70\xd0\xc9\xa9\x7f\xb7\x48\x4f\x9d\x34\xea\xb1\xd1\x80\x6c\ +\x15\xed\x78\x1b\x3c\x79\x6c\x3d\x5d\x2a\xf1\x7b\xb4\x40\xfa\xcf\ +\x5d\x67\x1c\xe5\x29\x4d\x03\xf4\xcc\x45\x04\x7a\x55\x1f\xac\xe9\ +\x1d\xc0\x99\x61\x21\x61\xde\xe9\xa0\x93\x35\xb3\xb4\xab\x8c\x7b\ +\x4b\xb3\x6b\x91\x5e\xdc\xef\xb7\x7a\x89\xd2\xb8\x40\x8c\x5a\xde\ +\x14\x54\x04\xa9\xdb\x35\xaa\x57\x2f\x03\x68\xeb\xfa\xd6\xe4\xef\ +\xdf\x73\xe1\x95\xab\xad\x63\x77\x4a\x0a\x9e\x74\xf5\x50\x46\xa7\ +\xb9\xb4\x6e\xa1\xe7\x18\x6a\x22\x41\x65\xdd\x73\x0b\x2d\xa9\x97\ +\xa4\x67\x8d\xfb\x0e\x5f\xd6\x26\x65\xf5\xb9\x1e\x46\xc7\xc6\x84\ +\x3c\x5c\x36\x04\xff\x54\xf4\x3b\xdf\x70\x4a\x0a\xd5\x87\xc3\x61\ +\x98\x61\x25\x63\x3d\x2d\x03\x47\xc3\xc2\xc0\x5c\x7e\xf6\xdc\x68\ +\xa4\xac\xfb\x8e\x85\x41\x09\x6e\x34\x1e\x57\x91\x5e\x42\x8b\x02\ +\x1f\xed\x47\xa5\xed\xe9\xe7\xaf\x38\x73\xdb\x45\xaf\x00\x98\xf9\ +\x5a\xe2\xc9\xe3\x05\x3a\xd2\x3f\x1b\x81\x92\x8a\x27\xbd\x33\x2f\ +\x89\x56\xcc\xc1\xc0\x79\x23\x7a\xf0\xa0\x40\x68\x38\xfb\x96\x5a\ +\x39\xcd\x75\x4d\x8e\xff\x48\xf7\xe3\x8a\xdd\x93\xec\x73\xb4\xf9\ +\xb5\xdf\x3c\x06\x87\x7b\x9e\x64\xb0\x1a\x03\x32\xdc\x74\xf3\xd0\ +\x6b\x4c\x96\x26\x9d\x92\x96\xe4\x49\xd7\x75\x38\x6c\x86\x3c\xf9\ +\xe3\x4b\xb6\x36\xbe\x9e\xfe\xfa\x84\x05\x39\x98\x29\x64\x84\xbb\ +\x54\xf0\xd3\xed\x44\x5a\xf4\x28\xf8\x86\x4a\x43\x0d\xc1\x04\x6c\ +\xa4\xd1\x6b\xac\xfc\xd7\xfe\xc5\x60\x25\x28\x29\x46\x4f\xb5\xb5\ +\xec\xb9\x61\xc5\x4a\xba\xb8\xa9\xc6\x40\xef\xb5\x4e\x49\x1a\xd6\ +\x83\xbe\xdd\x26\x00\xe7\x5d\x43\x20\x61\xec\xa8\xe0\xec\xf2\x1f\ +\xb7\x4c\x9f\xb9\x13\x1b\x22\x1d\x15\xb9\x7f\xe8\xa6\x7b\x26\xbf\ +\x72\xf5\x7a\xc4\x88\x19\xed\xda\x3a\x37\xe0\x5e\x8b\x4a\xea\x22\ +\xd2\x33\x58\x49\x61\xb9\x37\xb4\xe6\xaf\xf7\x96\x2b\x3e\x7f\xbe\ +\x9b\xf7\x7c\xc7\xd0\x85\x7a\x1b\x3e\xf8\xd9\x7d\xfd\x4e\x51\xea\ +\x02\xa9\xcb\x9c\x20\x30\xd5\x50\xc5\x94\xb4\xf8\x03\x1d\xbd\xfc\ +\xfe\x49\x8b\x6e\x13\x95\x31\xf6\x20\xd2\xd9\x86\xed\xd6\xd8\x26\ +\x4a\x6a\xa0\xee\x05\x25\x6d\x55\x86\x78\xb9\x1f\xb1\x79\x6f\x1c\ +\xb6\x32\x47\x86\xc9\xfe\xc0\xcc\x2e\x2a\xa8\xa3\x64\x07\x44\x9c\ +\xd4\x73\x44\x8a\xb4\x76\xd2\x0f\x11\x6e\x7f\x7c\xd7\xe0\x3d\x6f\ +\xfe\x21\x00\x78\xc4\xfa\xfc\x4f\x24\x95\xd4\x50\xf9\xdc\x62\x40\ +\x07\x86\x33\x3c\xbb\x9f\x07\x93\x65\xac\x9e\xbc\x17\x9a\xee\x24\ +\x6b\x0a\x4e\x65\xf9\x05\xe9\xe8\x05\x9e\x23\xb9\x7d\xd8\x6f\xe5\ +\x96\x8e\x03\xe1\xcf\x58\xa4\xc7\x83\x92\x82\xd9\xe7\x55\x39\x09\ +\x9e\xd4\xc0\xfc\xfc\x5d\x23\x0d\x73\xfe\x8e\x61\x87\x0b\xb8\xe1\ +\x0c\x6f\x44\x8b\x08\xe3\xde\xbc\x56\x28\x76\xb9\x00\xa8\xbd\xd6\ +\x1e\xcd\x38\xef\x1e\xce\xe4\x48\x5f\x83\x2a\x81\x05\x4a\x4a\x5a\ +\xd9\xeb\x0a\x60\xf5\xe6\x1b\xbe\x4e\x7f\x8d\xe9\xa1\xd5\x38\x7f\ +\xd3\xce\x00\xa6\x94\xa9\x1c\x37\xd6\xd3\x5e\xdd\x78\x78\x7f\x58\ +\x19\x2f\xf4\x81\x01\xa2\xcb\xcf\x79\xd3\xed\xae\xa0\x39\xec\xc8\ +\x5f\x42\x70\x07\x49\x8c\x96\xbe\xda\x7e\x1d\xd6\x03\x9c\x1f\x25\ +\x2e\x5e\xf8\x7d\xd4\xcf\x87\xf6\x9d\xf6\xee\xdb\xb6\x3f\xfa\xc0\ +\xb0\x53\x64\x44\x96\x95\xc0\x50\x01\x0a\x0f\x25\x24\xd1\x96\x18\ +\x80\x6c\xc5\x7e\x34\xca\x45\x9a\x2d\xd0\xd3\x4f\x0d\x65\x00\xe9\ +\x13\xa0\x09\x7d\x52\xd2\x75\x1d\xbb\x6f\x73\xc2\xbc\x94\xe3\xce\ +\x81\xa2\xdd\xcd\x3b\x76\x15\x65\x96\xd7\x54\xd0\x29\x4b\xa7\xa3\ +\x6a\xfa\x2c\xf1\x14\x29\xde\x06\x4f\x77\x91\xe1\x1c\x15\x9d\x86\ +\x3e\x03\x15\x85\x7e\xce\x54\x43\x50\xdc\xb7\xb2\x7f\x1d\x20\xbd\ +\xe9\x8c\xfb\x09\x26\x74\xc9\xfd\xcb\x0f\xb6\xec\x30\x2e\xa8\x51\ +\xa3\xbf\xf7\x4a\x25\x24\xf5\x0c\x7f\xd9\x93\x22\x4b\x63\x1d\x6d\ +\x79\xc9\xb2\xb6\xfc\x30\x28\x39\x05\x80\x76\xa4\x25\xf7\x9b\xa0\ +\xb3\x00\xf4\xc7\x2a\x73\xb8\xdb\xc2\xbc\xca\x0c\x7f\xaf\xf2\x3c\ +\x18\x94\x4a\x24\x47\x5a\x44\x4d\x27\x88\xa5\x13\x29\xf7\xa4\xfb\ +\x89\xc6\xc7\xa3\x66\xaa\x3c\xb8\xc1\x19\x89\x9e\x8e\x00\x63\xea\ +\xd4\x96\x5e\x14\x9c\x53\x8f\x3f\x70\xc4\x66\x53\xfe\x9c\xd1\x6d\ +\x99\x99\x7f\xc9\x9f\xeb\x10\x1d\x45\xac\x70\x75\x0f\x1d\x94\x14\ +\x2a\xb1\x57\x7f\x7c\xd7\x8a\x75\xee\x11\x2e\x3c\x1e\x69\x51\xfd\ +\xe7\xae\x9e\x6b\x7d\xf9\x18\xc5\x42\xf3\x3b\x86\x79\xdd\x6c\x24\ +\x6b\xe3\xd1\x9f\xb0\x2f\xc7\xcd\x1f\x4d\x6f\xdf\x8c\x3d\xb6\xae\ +\x07\xe2\x43\xc6\xb3\xfe\x92\x1c\xe8\x1d\x27\x02\xac\xcf\x0e\x6a\ +\xa4\x9b\xd6\x3c\x64\xb2\xa5\x55\x5b\x87\x4b\x05\xef\x87\x6b\xd2\ +\xa7\x42\x01\x62\x6a\xfe\x68\xfa\xfc\x4d\x4b\xa7\x76\x02\x50\x7e\ +\x18\x28\xfe\xfd\x95\x1f\x3e\xb6\xed\x4b\xcf\xe2\x52\x35\x3b\x68\ +\xd5\x4c\xa7\x99\xb9\xd4\x4b\x9d\xc2\x95\xf1\xd3\x27\xac\x43\x46\ +\x66\x63\x1b\xb4\xa2\xf6\xf6\x06\x99\x53\x2c\xff\x70\xd2\xd7\xbb\ +\x9c\x31\x8f\xfc\x05\xb1\x13\x96\x9c\x2b\xda\x08\xaf\xea\x74\xa3\ +\xab\xcf\xd9\x2c\x3a\x6f\xc9\x57\xba\xa7\x24\x92\x7c\xd8\x54\xd2\ +\x80\x18\xef\x78\xc4\x27\x01\x46\x27\x2a\x3d\x01\x58\xfa\xab\xe0\ +\xf6\x43\x13\xfa\xcf\x2c\x71\xe4\xee\x50\xf3\x47\xc5\x3d\x05\x79\ +\x48\xbc\x65\x0f\x4a\x4a\x0c\x1d\xcd\x1e\x66\x56\x29\xcd\x4e\xc0\ +\x2a\xfa\x69\x91\x0a\xd4\x4c\xba\xdb\xb3\x8c\x60\xfe\x3f\xe6\x8f\ +\xaa\xb2\x93\x7f\xb1\x2f\x65\xa0\xa0\xa4\x77\xbe\x7b\xe3\xca\x95\ +\xab\xd7\xdd\xbe\x30\x9c\xe1\x3a\xa9\xae\x39\x3b\x91\xcb\xb0\x71\ +\xbd\x85\x63\xc1\xa2\x7b\x4a\xd9\xfc\xb8\x5e\x7c\xa9\x3e\x68\x0d\ +\x45\xa4\x7a\x32\x36\x28\xe9\xdd\x9d\xbc\xd1\xe9\x77\x66\x1a\xc1\ +\xbc\xe9\x2a\x9a\x3e\x6b\x6f\xe9\x7d\x51\x23\xbc\xc5\xee\x7f\xfd\ +\xf9\xa3\x96\x5a\x0a\xa5\x62\xa9\x20\xad\x9d\x27\x9d\xf5\x17\x51\ +\x9f\x2a\x2c\xe5\x12\xc9\x66\x7d\xdc\x44\x8a\x5c\xcd\x12\x83\xa9\ +\xa4\x2d\x33\x0c\xf3\x30\x72\x4e\xfb\x51\x45\xf5\x33\x26\xd1\xd9\ +\x33\x2c\xb8\xfe\x10\x9e\xaf\xaf\x62\xa4\x95\xc6\xa8\x8e\x08\x65\ +\x89\x39\x35\xda\xdd\xeb\x29\x6f\xcd\xf4\x36\x53\x02\xe9\x36\x6b\ +\x49\x7f\xdb\x90\xbc\x3e\x3c\x80\x81\x30\x65\x76\x7b\xd2\xec\x05\ +\x6a\x3c\x22\x55\x4b\x3e\xfe\x2b\x18\x61\xb1\x24\x6d\xfa\xcb\x2d\ +\xd0\x2d\x1d\x84\xa9\xaa\xce\xfc\x87\x25\x34\x4b\x45\xf2\xd8\x3a\ +\xe8\x9d\x63\x55\xf3\x9e\xb4\xed\x87\xb2\x8f\x39\x4a\xf8\xd8\x8e\ +\xf4\xd4\xe1\x79\xc8\x39\x5e\xf5\xbb\x57\xdc\x94\xe7\xaa\x3c\xca\ +\xc2\xb7\x54\x0b\x57\xd3\xc7\x57\xe5\xe0\x95\x66\x29\x5f\xe3\xfd\ +\x68\x32\x67\x6a\x44\x4a\x6a\x3d\xe9\x9c\xcd\x28\x47\x97\x80\xe4\ +\x73\x0f\x24\xf2\x95\x51\x8a\xc7\x97\x4d\x26\xb6\x7a\xff\xef\xdf\ +\xc4\xcd\x8e\x81\x3d\xa5\x47\x2b\x44\x03\x7f\x04\xec\x13\xdb\x64\ +\x6d\x9a\xed\xa7\x8e\x33\x45\x62\xd7\x27\x9a\x32\xf6\xa5\x6c\x4e\ +\x91\xdd\x8f\x9f\xed\xa8\xa2\xd1\xa8\xdd\x51\xb0\xd6\xf5\xd4\x68\ +\xe4\x25\x79\xa9\x33\x77\x25\xfe\x45\x21\x0d\x56\x4f\xf3\xf5\x54\ +\x34\xd3\xf3\x47\xf5\x21\x0c\x7d\x9e\x29\xb2\x25\xbd\xdd\xa0\x6a\ +\x64\xcf\x73\x40\x32\x5a\xb3\x7d\x38\x43\x38\x8b\xc4\x80\xbf\x0a\ +\xa7\xb8\x07\x6d\x99\xed\xd0\x47\xbd\xe4\xfc\xd1\x43\x8e\xfa\x4a\ +\xeb\x67\x6e\xb2\xfb\xd1\x08\xaa\x5a\x3b\x16\x06\xd7\xf7\xf2\xe8\ +\x28\x9b\x34\x3a\xa2\x6e\x02\x47\x43\x12\xa4\x40\xbf\xee\xfc\x51\ +\xd8\x64\x8a\xfb\xf0\xc9\x43\x31\x4b\x73\x7b\xdd\x74\xe4\xba\x4d\ +\x26\xc7\xe8\xcb\xdf\xe7\xfa\xbf\xca\xce\xdd\x55\xb2\xac\x0a\xe3\ +\xbe\xea\x3c\x76\x75\xdd\xe6\xf6\xbd\xed\x5c\x54\x1a\xbb\x07\xc4\ +\x99\x40\xc5\x69\x1d\x75\x50\x26\x52\x04\x15\x44\xc4\x89\xd4\x44\ +\x06\xf1\x89\x18\x34\x46\x62\x20\x9a\x75\x64\x24\x18\x0a\xc2\x80\ +\x99\x68\x26\x9a\x75\xa0\xe1\x04\x82\x30\xa1\x88\x7f\x83\x5d\xfb\ +\x7c\xac\xc7\xf9\xed\x25\xed\xa9\x5b\x75\x1a\x3a\x59\xac\xbd\xd7\ +\xf3\xf1\xad\x1d\x95\x4d\x2e\xc9\x22\x8b\x4f\x78\x5c\x49\xba\x8f\ +\xe1\x14\xd0\x44\xc4\x71\x1e\x3e\x81\x9f\xb9\xbe\x7c\xfb\xf6\x69\ +\x8e\x86\x49\x1c\x05\xd4\x57\x6b\x40\xf8\x8b\xb8\x79\xd6\xd7\x5e\ +\xe1\x8f\x12\xd7\xf3\xc4\x4e\x57\xf1\x34\x8d\x8a\x5c\x76\x32\xe3\ +\xec\x32\x14\xbe\xce\x9d\xc3\xc0\x6b\xda\x73\xa7\x63\x97\x4a\x3d\ +\xd4\xf8\xa3\x41\x92\x14\x85\x96\x58\x15\x11\xc8\x79\x12\xa5\xf6\ +\xc0\x84\xae\x69\xb0\x65\x3c\x77\x65\xc8\xd8\x52\x4e\x87\x1a\x7f\ +\x94\xe1\xb2\x17\xc2\xe7\x84\x38\x3d\xc7\x51\x11\x14\x6e\x6d\x2e\ +\x94\xa0\xae\xa2\xd6\x31\x8a\x08\xf3\xa6\x04\x44\xe6\x28\xf1\x47\ +\x99\x80\xe0\x70\xbd\xde\xa9\xba\x9c\x79\xca\x93\x77\x28\xaa\xd5\ +\x26\x99\x9c\xaf\x87\x10\xdf\x05\xc7\xb9\xc6\x1f\xa5\xc2\x67\xb0\ +\x5c\xef\xaf\xcf\x1b\x65\x06\xb3\x96\x11\x15\xbd\x98\x61\xe5\x90\ +\x35\x81\x08\x6b\xac\xf1\x5b\xc8\x3e\x68\x4d\x30\x8f\xdd\x4b\x62\ +\x9d\xa5\x9c\xb1\x6e\x24\xd7\xa7\x6b\x9d\x58\xce\xd9\x82\xd2\x74\ +\xf4\x27\x78\x79\xb5\xd2\x4f\x8b\x4d\xdd\x32\x71\x0e\x43\x7c\x64\ +\xb4\x9c\x31\x6a\xe8\x91\xf2\x91\xd4\xe3\xe4\xfb\xc7\x19\x6a\x39\ +\x1d\xce\x82\xbb\xad\x17\x75\x59\x45\x61\x38\xf0\xe0\x98\x9e\x8a\ +\x98\x0f\x0b\x86\x6f\x6a\x8e\xa2\xbb\x5d\x74\xc6\xfc\xc3\x65\x98\ +\x17\x30\x96\x5a\x5b\x09\x9a\x86\x45\xa5\xc8\xb4\x11\x31\x0c\xde\ +\x01\x2c\xb5\x26\x54\x1c\xf5\xb3\x9f\x93\xd6\x8f\xdd\xc3\xa2\x71\ +\xce\x87\xcf\xc7\x85\x29\xba\x79\xa2\x6e\x87\x88\xff\xff\x40\xcf\ +\x92\xa1\xe2\xa4\x84\xdf\x1f\x0d\x87\x61\x2d\x57\xf2\x47\xf2\x1e\ +\x04\x22\xba\x66\xf0\xf6\x24\x4d\x84\xa3\xa2\x7a\x82\x0d\x15\x47\ +\x01\x43\x39\xe7\xe5\x5c\x40\xff\xc8\x92\x8f\x87\xe0\xed\xba\xa1\ +\xcf\x06\x8f\x9c\xb0\x67\x85\x8f\xdb\x7f\x37\x32\x8f\x49\x8f\x8a\ +\xd2\x61\xf7\xb0\xa2\x65\xc1\x64\x6e\xdc\xc5\xa0\x25\x70\x9c\x31\ +\x72\x37\x1e\x65\x2b\xa6\x18\x6d\x67\x07\xcd\xa7\x1f\xfd\xdc\xa6\ +\x1d\x9d\x4d\x74\xae\x46\x22\x60\xde\x00\x00\x11\x79\x9a\xe3\x25\ +\xc6\x4c\xbe\xb8\x3e\x36\x3a\x52\x8d\xba\x7e\x1a\xe2\xe6\xad\xd6\ +\x4a\x76\x7e\x75\xa9\x82\xa9\x27\x50\xaa\xfe\x65\x14\x8e\x13\x7a\ +\x58\x0d\x6e\x01\x93\xc8\x34\xa1\xcf\x4d\x84\x36\xc5\xa8\xe6\x27\ +\x39\x50\xfd\xe3\x6e\x73\x95\x7f\xc8\x60\xa9\xcc\x93\x10\x42\x8b\ +\xeb\x3a\x66\xbd\x33\xa4\xab\x34\xa8\x9b\xd0\xd6\x49\xdd\xab\x51\ +\x3f\xf6\xed\xcf\xfb\xf1\x2f\x28\x4b\x05\x84\x92\x18\x5b\x2d\x36\ +\xa5\xcc\xd3\x84\x6a\xe6\xae\xa3\xbe\xcc\xb6\x87\x11\xf9\xbc\x04\ +\xa2\x04\x66\x8a\x8f\xf1\x93\x9e\x67\xc3\xcd\xbb\x94\x5d\x2a\x3a\ +\x33\x9b\x06\x04\x03\x30\x15\x12\x7a\xf2\x44\x8d\x9b\x75\x26\x9f\ +\x20\x4a\x3a\xf6\xf8\x43\xf5\x94\x9e\x64\xe5\x2f\xf3\x26\x84\xd6\ +\x8f\x5f\x93\x77\xda\x1c\x19\xb2\xa3\x4d\xa7\xcf\x11\x46\xfd\x45\ +\x86\x22\x0a\xd5\x37\x07\x77\x37\xd5\xba\x0e\x89\x7c\x9c\xb9\xd3\ +\xa3\x9b\xa9\x37\x2d\x67\x5b\x0c\xe5\x2d\xce\x2f\xc3\xd4\x8b\xbc\ +\x3a\x0a\x2d\xb6\x04\xa7\x15\x3d\x9e\x2f\x41\x17\xbe\xff\x13\x5b\ +\xf9\x88\x53\x03\x99\xcf\xbe\xa8\x43\x7d\x29\x4f\x92\x57\x49\x21\ +\x41\x3a\x2a\xdd\x04\x33\x8f\x4d\x77\x2d\xaf\x91\x9a\x87\x70\x3a\ +\x74\x9b\xf5\x74\xd2\xdc\x85\x1e\xca\xd2\x60\xbc\xbe\xc4\xc3\xd7\ +\x0c\xa3\x87\xcc\xde\xdf\x1e\x81\xd1\x47\xbc\x74\x81\x0a\x35\x11\ +\xf0\xb5\x5e\x7f\x12\x24\xca\x5e\xe5\xf4\x4d\xa8\x35\xc5\x99\x50\ +\xfd\xf8\x48\x8b\x1a\xc7\xa7\x9c\x76\xf2\x08\x14\x04\x26\xb6\xba\ +\xc5\x87\xb1\x47\x8c\x47\x3c\x7c\xd9\x79\xf3\x9d\x30\x28\x64\x18\ +\xde\x6d\xca\x30\x25\x04\x01\x91\x83\xbf\xae\x69\x2c\xd8\xee\x69\ +\xa2\x92\x63\xeb\x35\x1e\xfe\x25\x86\xc1\xa5\xa5\xb2\xa1\x6f\x3e\ +\x1c\x98\x57\x73\x65\xf4\x7e\x63\xa8\x11\x49\xc7\x99\x00\x10\x22\ +\x35\xe9\xd3\x9b\x72\xe3\x95\xd0\x15\x2e\x15\x33\x61\x67\x64\xb3\ +\xa5\x67\x50\xf8\x21\x06\xa5\x97\x87\x64\x9e\xf4\x14\x00\x55\xe0\ +\x3a\x0d\xf1\xf0\xf3\x9c\x10\xb6\x09\xb5\x16\x6f\x69\x23\xfa\xb0\ +\x52\xf8\x1a\xbc\xc2\x93\x72\xf8\x2c\x89\xd9\x35\xa5\x65\x2a\xba\ +\x08\xb9\x55\x64\xd2\x37\x0a\x52\xf6\x48\x17\xc7\x7b\x5a\x85\xf7\ +\x04\xe3\x74\x91\x6d\x3e\xcf\x7e\x68\x3f\x6f\xd0\x9b\x67\x5a\x14\ +\xa5\xbb\x84\xa1\x34\x4d\xb8\xa3\xf9\xf8\x97\x0a\xef\x49\xb2\x24\ +\x62\xc7\xb5\xd0\xb1\x1e\x55\x1a\x17\x35\x11\x6f\xd5\x70\x1a\x13\ +\xdc\x7c\x9b\xc1\xd1\x12\xef\x49\xc4\x65\x04\x2d\xc2\x94\xf8\x1f\ +\x8d\x28\xb3\x8e\x8c\xeb\xb1\x46\xcc\x91\x32\xe7\x12\xda\xd1\x7f\ +\x28\xf7\xb1\x7a\xc7\xbc\x38\xd5\x68\x8d\x58\x20\x62\x71\xf0\x36\ +\x0c\x2c\xf4\x97\xf0\xb8\xac\x1b\xb5\xdc\x7b\xc3\x12\x23\x61\xfb\ +\x81\x3f\x59\xe0\xe1\xcf\x73\x59\xb2\x8d\x14\x37\x61\x2c\x60\x5b\ +\xa8\xb3\xb4\xae\x83\xba\x81\x22\x92\x8e\xe7\x9d\x89\x91\x4b\x76\ +\xe6\x0b\x90\x59\x6a\x7c\xa5\xef\xec\xed\x0f\x32\xfb\x9c\xaf\xf7\ +\x2a\x23\x59\xea\x5a\x34\x52\x59\x03\x53\x01\x26\x37\x90\x9a\xa4\ +\x9e\xab\x25\x44\x62\xfc\x5b\x4d\x96\x52\xd3\x93\x47\xcc\x3c\x78\ +\x46\x4d\x37\xaa\x2e\xb3\x6a\x0b\xa1\x37\xb1\x57\x5a\xa7\xd1\x36\ +\x89\xa3\x7e\xfa\xc0\x20\x4c\x29\x47\x64\x47\x51\x0e\xaf\xd1\x89\ +\xdc\x75\x66\x70\x27\x69\x0f\x80\x3f\x9d\xa3\x96\x21\x5d\x7c\x5e\ +\x3d\x2e\x3b\x5b\x17\xc0\xcc\x77\x22\x89\x36\x8e\x06\x2d\x10\x5a\ +\x44\x23\xde\x5b\xc0\xfd\x4c\x21\x56\x86\xb5\x77\xa1\xe7\xe8\x3a\ +\x8a\xb6\x94\x28\x7d\xa8\x9e\x4e\xf5\x72\x89\xac\x9f\xb8\x39\x50\ +\x93\x81\x53\x26\x72\x75\x8b\xd4\xe2\x9c\xfd\x21\xa5\x74\x10\x2b\ +\x9b\x2c\x11\x28\x15\xdb\x2d\x3d\x58\x22\x7e\x96\xee\x67\xb4\xa2\ +\x63\xd8\xbc\x18\x82\x72\x43\xb0\x2b\x7c\xe3\x25\x3d\x52\x7b\x71\ +\x7f\x3d\x05\x49\x92\x14\x48\xc5\x5a\x53\x28\x7c\xc4\x4c\x5c\xcf\ +\x74\x10\x53\x9d\x54\xaa\x52\x5a\x7b\x9a\x50\xc2\xbc\x65\xae\x36\ +\xf7\x9e\x68\xea\x33\x82\x52\x86\xd2\x71\xb4\x4c\x2e\xe4\x83\x83\ +\x3f\xdc\x82\x91\xf1\xf0\x75\xea\x65\xf3\x4b\xd3\x07\x4b\x9a\xe8\ +\x94\x64\x2b\xba\xa6\xdc\x83\x9b\xf9\x25\xd2\x19\x22\x65\x7a\x7b\ +\x63\x6c\xe4\x44\x21\xed\x68\xab\xf1\xf0\x93\xc6\x27\x04\x44\x94\ +\x79\x56\xc3\x76\x8d\xae\xc0\xcd\x3b\xf1\xd4\x1d\x22\x37\x05\x76\ +\x93\x4e\xde\x62\xa7\xd1\x52\x3e\xa7\xaf\x9b\x2a\x7a\xf7\x7e\xec\ +\x20\x57\x7a\xb4\xde\x7d\xc3\xdc\xd3\xd1\xd4\x28\x21\x6a\x6a\x2c\ +\x9d\x33\x71\xb1\x72\x4b\xae\x8a\xa1\xd8\x64\xfd\x36\xe7\xa8\x7d\ +\x50\xb4\x45\x24\x62\xd2\x0f\x8e\xb6\x04\xef\x98\x1b\x9f\x44\x9f\ +\x23\xd2\x29\xf5\xc8\x45\x9c\xe2\x2a\xf3\x8d\x75\x83\x16\x92\xa3\ +\x49\xec\x47\xf9\xf1\xe0\x2e\x03\x13\x5d\x12\xbf\xae\x4b\x81\x91\ +\xea\xae\x5e\x11\x35\x45\x97\x84\x96\xc9\x1c\xd2\xa8\xe8\xf3\x1d\ +\xa5\x8a\x02\x7a\xfb\xe2\xc4\xea\xdb\x92\xad\xbf\xb0\x9a\x48\xb1\ +\xd5\x96\x7b\x4d\x89\x87\x4f\xc1\xf7\xdc\x63\x34\xf2\xa2\x52\x31\ +\x13\x8f\x5d\x2f\xe6\xf3\x12\xb5\xb1\xe7\x2d\xb5\x3d\x39\x95\xe3\ +\x94\x0e\xd4\x68\x60\xed\x11\x71\x3d\xe0\xfd\x26\x64\x20\xf4\xb2\ +\x95\x91\x74\x49\xa3\xa5\x5f\x90\xc5\xa7\xe8\x1b\x1e\x3e\xc5\x09\ +\xc2\xa4\xaf\x3b\x25\x4a\x91\x45\xa7\xc4\x39\xba\x3a\x86\x33\x61\ +\xbc\xb1\xcd\x1a\x71\x3d\xa4\x89\x24\x46\x90\x5c\xa2\xa5\xb6\x94\ +\xd2\x11\x91\xd0\xa5\xbe\x71\x9d\x5b\x9a\x9c\xa3\x34\xf3\xbc\x9f\ +\x84\x4c\x4c\xdd\xe3\xfa\xc6\x48\x44\x1b\xac\x0d\xdd\x4f\x25\x26\ +\x63\xa8\x5b\x4f\x47\xcd\x23\x7c\x7b\x56\x4d\x14\xa8\xa4\x50\xfd\ +\x61\x75\x99\x78\xf8\xd5\x96\xe0\xfe\x07\x27\x2f\x06\x77\x63\x2b\ +\x9a\x6a\x22\x5c\x69\x6b\xf2\x34\xdc\xb6\x0e\xb7\x84\xce\x3d\x43\ +\x12\xd9\xa5\x28\xf7\xdc\x67\xdc\x82\x28\x65\xfd\xc4\xd0\x2e\x6d\ +\xb8\xd4\x2f\x12\x10\x84\xc2\x07\xa5\xb2\xed\x0d\xbb\xac\x27\xb2\ +\x74\xd1\x6f\x10\x7a\x56\x6d\x4d\xe9\xb3\x7c\x03\x13\x5a\xf9\xa3\ +\xfa\x83\x59\x72\x34\xba\x9c\x18\xf7\x44\x6e\x0c\xf1\xea\x26\xc2\ +\x48\x2d\xb6\x09\xf5\x2f\x9e\x21\xfa\x68\x59\x5f\x6e\xc1\x32\x59\ +\x85\xd1\xde\x2b\x6a\xa1\x0d\x2b\x1b\xcc\x86\x9a\x19\x85\x7a\x02\ +\x33\xb9\x8b\x11\x6d\xae\x26\xf5\x99\xad\xcd\x5c\xbe\x69\xce\x9d\ +\x0f\xab\x1d\xfc\x28\x35\x0e\xd3\x44\xe3\xa9\x37\xf3\x79\x1c\xbb\ +\x4a\x10\xa4\xf4\x9e\x24\x4c\xc6\x49\x6a\x51\xe3\x69\x94\xaa\x8b\ +\x24\x52\xce\x55\xda\xa6\x02\xce\xf7\x08\x5c\x4f\x80\xd4\xd0\x1f\ +\x4d\xe4\xce\x11\xf6\xa5\x39\x81\x65\xbd\x56\xa2\x24\xc6\xc2\xcb\ +\x63\xf6\x49\x7a\x14\x93\xcb\xc1\xc9\x23\x47\x13\x9d\x1e\x2d\x4f\ +\x86\xa7\xb2\xae\xa6\xfa\x09\xdd\x0e\x41\x42\x74\x07\x7e\x16\x99\ +\x12\x20\x92\x51\x9e\x1c\x1f\x95\x81\xbd\xfa\x5e\x1c\x83\x90\x86\ +\xc9\x55\x54\x08\x9a\x19\x37\x81\xd2\x4a\x3d\x1d\x4b\x7f\xd4\x02\ +\x66\x38\x4f\xab\xfe\x42\xe7\x4b\x63\xc5\x16\x23\x18\x00\x6f\xf7\ +\x10\x94\x47\x7f\x2b\x49\x92\x91\x6a\x32\x6f\x21\x48\xf4\x9e\xf4\ +\x71\xc8\x1f\xc7\xf6\x34\xc1\x87\x36\xc5\x8a\x9e\x65\xc8\x4c\xe6\ +\x9e\xf2\x25\x35\x32\x4b\x7f\xd4\x93\x0f\x8c\xee\x44\x69\xd8\x61\ +\x0e\x43\x8f\xbd\xf0\x7a\x11\x18\x9d\x52\x3f\x3a\xfb\xca\x1f\xd5\ +\x91\xfb\x6f\x7a\x24\x48\x1e\x8c\x30\xa6\x4f\xf5\xda\x05\xf9\x66\ +\xb0\x12\xe5\x9b\xa1\x22\x75\x60\x15\xab\xdd\xe8\xdf\xc4\xa1\x74\ +\x86\x46\xef\x7e\xcd\xc2\x94\xd4\x3d\x15\x3e\xb1\xe6\x2f\x2a\xa7\ +\x64\x06\xde\x53\x1a\x66\x9b\xe2\xc2\xc8\xe4\x3b\x2f\x46\xa9\x40\ +\x1d\x45\xab\x9f\x3f\x23\xbc\xe0\xe6\x61\xe7\x36\x1e\x6c\x35\xd5\ +\x17\xc5\x9b\x48\x2c\xfd\x51\xdf\x6b\xea\x61\x93\xaa\x77\x2b\x89\ +\xcc\xb7\x94\x69\x47\x90\x4a\x30\x5f\x17\x27\x16\x6e\x25\xf4\x42\ +\x4f\xcb\x3a\x74\xb6\xd5\x5c\xd9\x36\xb5\xe2\x92\xa6\x2c\x3e\x59\ +\x5a\xb4\x13\x55\x0b\xf9\x98\xc9\x75\xc9\x97\xec\x4f\x33\x90\xe6\ +\xf3\x76\x89\x62\x8a\x11\xd9\xbc\x68\xe9\xf5\x2e\x3d\x7c\x96\x99\ +\xce\x5f\x3a\xf7\x41\x98\xd8\xeb\x28\x41\xd2\x0b\x2b\x1b\xf4\x66\ +\xad\xc1\x45\x49\xe7\x4e\x0f\xbf\x1a\x63\xac\x23\x11\x3f\xfa\xcd\ +\xe7\x33\x5e\xea\x92\x6e\xe5\xfa\x35\x44\xcb\x2c\x85\x22\x2f\x5e\ +\x57\x1a\x7c\x6c\x9d\xe5\x50\x3a\x7a\x4e\x9e\xd7\xee\x82\xd0\x7b\ +\x76\x4c\xf5\x06\x81\x4d\xaf\x68\x22\x14\x3f\x99\x1c\x4f\xa5\x86\ +\xba\x68\x9b\x75\xbd\xe7\xf3\x79\xf4\x22\xb9\x70\x48\x3d\xe1\xbc\ +\x9e\xbf\xc5\x66\xae\xc3\x41\x54\x82\xa9\xa5\x30\x9d\xb0\xd3\xd6\ +\x19\x0a\x15\x15\xf1\xf0\x27\x75\xea\xa4\x4c\x49\x8e\x41\x1b\x05\ +\xa9\x0f\x33\xd9\x34\x38\x69\xd4\x67\x34\x78\x05\xb1\x17\x43\xe3\ +\xb1\x1f\xa3\x51\x8a\x51\xe8\x20\x08\x8d\x6d\x2f\x8d\x93\x0d\xa2\ +\xf6\x4c\x2c\x2d\xbd\xf2\xf8\x6c\xd0\xaa\x27\x6d\xed\x86\x0e\x02\ +\xe6\x14\x87\x92\xcc\x58\xc4\xb1\x1e\x67\x9b\x0c\x73\xd9\xdf\xc6\ +\x31\xe0\xdf\xfb\x30\x9b\xd7\xc3\x6e\x1c\x14\x9d\xbe\x68\x65\x9b\ +\xb0\x5a\xc0\x49\x15\x71\xbe\x77\x7b\xcd\x2b\x8f\xf2\xf0\x4d\x3f\ +\xfd\x83\x28\x65\x0e\xaa\xb0\x4c\xd8\xd5\x21\x99\x02\x3b\xfd\x2d\ +\x8b\x0f\x79\xf2\x15\xeb\xab\x46\x2e\xe9\xe3\x4b\x8a\x80\x01\xe1\ +\xe3\xab\x85\x9b\x77\x0b\xf5\x7a\x54\xc4\x9c\xd6\xa0\xa4\x72\xfb\ +\x70\x6c\x75\xd3\xec\x32\x5c\x3d\xcd\xb1\x99\x65\x2a\x7a\x09\x19\ +\x38\x11\x52\x83\x1d\x4f\xd4\xf7\xda\x86\xc0\x1c\xbe\xf5\xe6\x89\ +\xab\x1a\x6a\xa1\x40\xe9\xb3\x1b\x07\x4f\x43\xeb\x4c\x8d\x9b\x38\ +\x89\x40\xd1\xaa\x1f\xe6\x49\x3c\x18\x41\x12\xd7\x24\x49\x13\xc1\ +\x99\x42\xed\xe4\xca\x90\x2a\xf5\xd2\x6d\x36\x63\x9f\xea\x7a\x3d\ +\x7b\x5f\x5a\x0c\xed\xf4\xda\x69\x52\x41\x40\xf4\x4f\xc6\x1a\x8f\ +\x75\x50\x09\x16\x32\x64\x91\x4e\x17\x7d\xa6\xf2\xf6\xd9\xa7\xf4\ +\xf8\xb9\x5b\xd1\x36\x64\xc9\xd4\xee\xa6\x1d\xac\xc2\xc5\xe7\xb9\ +\xdb\x86\x43\x56\x6d\x77\x6d\xce\x8c\x42\x8b\xd1\xe5\x0c\xfb\x63\ +\x42\x64\xed\x99\xad\x71\x93\x94\xfa\x07\xd3\xd9\xb3\xda\x20\xcd\ +\xb4\x8c\x43\xbb\xa2\xdb\xf1\x04\x41\xaa\xc6\x05\x4c\xf6\x7d\x28\ +\x10\x60\x00\x5e\x14\x03\x99\xd6\xf9\x10\x91\x2a\xb8\xdf\x70\x98\ +\x20\xad\xca\x4c\xac\x89\xb5\x9c\x20\x55\x97\x3b\xd5\x93\xad\xeb\ +\x00\x44\x0d\x3c\x67\xf8\x4e\xc1\x84\xb2\x55\xa3\xc6\x4e\x63\x3f\ +\x11\xb7\x48\xcd\xbb\x59\xf0\x08\x02\x20\x40\x15\x0c\x07\x1a\x6f\ +\x19\x34\xf1\xe1\x28\x1b\xf3\xa3\x76\x4f\xb3\x7a\x82\xd4\xcf\xc9\ +\x2a\x25\x52\xa5\x45\x25\x46\xae\xeb\xdd\x92\xee\xc5\x89\x4f\x9d\ +\xc3\xc7\x0d\x8d\xa4\xb2\x37\x8f\x26\xb4\x3f\xdb\x2b\xf2\x53\x13\ +\xd6\x46\x24\xe0\xfd\x4a\x9e\xf2\xe8\x47\xc0\x89\xb9\x83\x30\xf5\ +\x0e\xa7\x47\x11\xa8\xb1\xd4\x00\x6a\x56\x27\xd5\xc0\x69\x96\x0b\ +\xec\x0b\x85\x13\x5a\xdb\xfa\x5c\x0a\x8d\xfe\xfd\xd1\xbb\x5c\x27\ +\xf3\x47\x0d\xbc\x3f\x77\xbc\xad\xc6\xd3\x65\xd1\xaf\x6f\x42\xe8\ +\x72\xa4\x3d\xb1\x0b\x36\x2f\xd7\xc7\x2f\x37\x8f\x0f\xc1\x3f\x7c\ +\xf2\xca\x8e\x1e\xae\x93\x64\x5e\xd0\x44\x4e\xa5\x33\xd4\x4c\xa8\ +\xbc\xfc\xe4\x93\xa2\x7f\xb4\xb8\xa3\x73\xc2\xf8\x42\x72\xdc\xe6\ +\x42\xd3\xa9\xcf\xee\x8b\x3a\xa9\x01\x4c\x67\x7f\x4b\xc3\x28\x23\ +\x9e\xaa\x12\x7a\x83\xf2\x0d\xba\x74\x8a\x42\x93\xb2\x8f\xec\xd4\ +\xf9\xca\x8f\x1e\x3f\x7e\xed\xe5\xc5\xe4\x9e\xc0\x79\x0a\x96\x0c\ +\x2b\x13\xe9\xd1\x82\xa3\xa2\xf1\x64\x14\x02\x45\x89\x88\x3a\xa2\ +\x90\x64\xb6\x07\x1d\x48\xf5\xd1\x9f\x24\xf9\x62\xab\x29\xd1\xdf\ +\xfc\xed\x87\x2f\xba\x72\x02\x53\x73\xb5\x9e\x43\xd6\x05\x4a\x09\ +\x98\x69\xce\xa8\xc5\xf5\x70\xf5\x5e\x14\xe0\xca\xbb\x9a\xa1\xbe\ +\xf8\xe1\x3f\xf8\xf1\xd3\xff\x7d\xf4\x6f\x07\xad\x40\xc6\xb9\x9e\ +\x5f\x16\xaa\x06\xac\x28\x3c\x27\x27\x36\x2e\x0a\x86\xa1\xff\x9d\ +\x10\x47\x9f\xff\x96\xd8\x19\x19\xfa\x5a\xc7\x8c\xf9\xe4\x6d\xf9\ +\xf5\x00\x2d\x28\xc6\x05\x6e\x52\xe5\xee\x84\x0e\xfc\xed\x27\x68\ +\x52\x21\xb7\xeb\x82\x86\x40\x24\x12\xfb\xdb\x77\xfc\xe5\xf9\x8e\ +\xe8\x79\x5c\x44\xa9\xcb\xfd\x57\x3b\xa1\xef\xbf\x5a\xcd\x75\x46\ +\x02\xdf\xff\x51\x78\xf8\x3c\x7a\x9c\xbc\x0f\xb3\xa5\xde\x3c\x5f\ +\xd7\xd1\xbf\xeb\x74\xfc\xc2\x73\x1d\xbb\x28\xa0\x92\xe9\x79\x72\ +\xc6\xb7\x79\x8a\x09\xd8\xb6\x0d\xac\x66\xf1\x79\x49\x41\x27\x51\ +\x35\xd8\x89\x8f\xd5\x5c\x76\x49\x5b\x7e\x0c\x90\xec\x8c\x53\xfa\ +\xbe\x2b\xc5\x4c\x6b\x90\xa5\x37\xef\xde\x7b\xf4\xdd\x87\xb7\xb5\ +\x4b\x8c\x7e\x5e\x8c\x9a\xa0\x9f\xf6\x64\x9a\xa4\x0f\xbc\x92\xb6\ +\x6f\xc8\xf5\x70\x39\x56\x70\x3a\xba\xde\x4f\xe6\x81\x0d\x7d\xfd\ +\x9d\x1f\xbb\xba\xdc\x36\xb0\xe6\x98\x9e\x25\xc6\x91\x7a\x2a\xba\ +\x35\x8c\xe4\xfe\xab\x73\x9f\x82\x9b\x87\xbd\x37\x42\xcf\xba\xdf\ +\x11\xe3\x4f\xe2\x68\x76\xf2\x0e\x86\x3d\x5a\x0e\x36\x80\x4e\xe4\ +\xf0\x2f\x6d\xa7\xed\xf9\xa5\xb1\xab\xfd\x74\xfd\x3c\xc7\xe9\x1b\ +\x75\x13\x19\xa9\x1b\x94\xca\xe7\xcf\xb8\xa4\x77\x88\x9b\x27\x90\ +\x54\x3d\x02\x9e\xad\xf3\xa3\x8c\x99\x9c\x58\x11\xa9\x55\x77\x9a\ +\x0d\x3c\xb2\x73\x78\x9a\x94\xca\xcb\x11\x93\xf2\xb9\x67\x2c\xf9\ +\x17\xae\xbb\xce\xdf\x91\xd9\xa9\x14\xa9\x22\x16\x4c\x35\x05\x55\ +\x97\xc1\x6d\x7f\xbd\x45\x4e\xd8\x10\xac\xbf\xa6\x2b\xd0\x59\xeb\ +\xc4\xca\x73\xfa\xec\x59\x0d\xbd\x35\xeb\xe0\xa3\xbd\x17\xa9\x4e\ +\x27\x2b\xb6\x64\x29\xfd\x51\x51\x3a\x1b\xb1\x45\xb8\xec\xdb\x57\ +\x9d\xa3\x71\xc0\xbe\x43\x40\x7e\xfb\x24\x9d\x5f\x70\x54\x6b\x82\ +\x29\xf3\xec\xcb\x24\x62\x81\x4f\x36\x14\xb9\x71\xff\xb3\x70\x39\ +\x5d\x52\xb9\xcd\xbf\xef\x26\xe8\xf1\x2f\x37\x56\xda\x82\x01\xad\ +\x67\x7a\x72\xff\xfc\xda\xc8\x04\x8e\x52\xe9\x3d\x23\x7d\x5f\x86\ +\xcb\x2d\x2a\x7b\xe7\xaa\xb3\xd4\xe5\xfe\x4d\x21\xc1\xfd\x63\x52\ +\x30\x62\xa4\x3e\xf9\xd5\xe3\xe7\xee\xfd\xf9\xf2\xec\x40\x77\x3a\ +\xd9\xe5\x5a\x4e\x36\x88\xa5\xd5\x76\x26\x90\x1a\x15\x29\x82\x26\ +\xa9\xfc\x37\x3e\xb7\x39\x27\x9f\xba\xb3\x4b\x92\x3c\xe9\xf0\xc9\ +\xd7\x67\x42\x75\xfa\x50\xf9\x7e\xf0\xd9\xe5\xbb\x55\x8e\x30\xa2\ +\x5d\x83\x86\x69\x6a\x50\x4e\xdb\x35\x7d\xf0\x68\xc3\xf0\xbe\x8a\ +\x8e\xde\xd9\xcf\xeb\xbb\x3c\xae\x57\x41\xcf\x16\xf9\xd1\xa1\x71\ +\x62\xc7\x5b\x6e\x2c\x61\x58\x1f\xb2\xb9\x54\x4e\xda\x6d\x78\xff\ +\x6c\xd6\x3f\xfe\xd1\xeb\x5b\xb9\x72\xd7\x57\x06\xde\xfd\xfe\x55\ +\xc0\xc3\x87\x19\xad\xb2\x4f\xb0\x4a\x44\x6e\xcf\xb4\xb6\xd0\x9f\ +\x83\x2b\xaa\xa4\x78\xeb\xdb\x10\xde\xba\x9a\xbb\xca\x0f\xd2\xf4\ +\x9d\x8e\x5d\x7b\x5b\x10\xde\x05\x9a\x4a\x91\x1f\x25\x84\x56\x74\ +\xf6\x98\xc3\x4d\x3b\xf6\x5d\xea\x57\x31\x75\x3b\xfe\xb7\x77\x42\ +\x8f\x4e\xa6\x48\xfd\x57\x87\xf4\x3f\x9e\x69\xce\x33\x62\x7a\xa1\ +\x0e\x5a\x83\x50\xce\x9e\x2c\x2b\x0a\x62\x7e\xf4\x91\xa5\x0e\x01\ +\x71\xbe\x96\xaf\x6f\xe6\x5e\xc6\xde\x95\xfd\xd9\x14\xfc\xf5\xba\ +\x53\x67\xe1\x1d\x2a\x23\xbe\xc6\x1c\x60\x15\xd1\xdc\xcf\x97\x12\ +\x25\xe4\x1d\xf3\x2a\x63\x53\xa2\x7e\xf4\x61\x8d\xd4\x06\xa6\x2b\ +\xf8\x34\x27\xf5\xef\xe7\x45\xc5\x57\xb6\xbf\xbe\x68\x28\xe1\x15\ +\xe5\x1d\xe5\x16\x0c\xc2\xd4\xe4\xfd\xf5\xce\x50\x1d\x7d\x5b\xe5\ +\x93\x7e\xed\x5a\x25\x46\x0f\x95\xcf\x8b\xc1\x7e\x7e\x5b\x10\xa4\ +\x16\x86\x64\xe7\xbe\x94\xfa\xec\x95\xd8\xfe\x7a\xd1\x28\x6a\xeb\ +\xfd\xf5\x59\xdb\x0b\x4f\xa7\x9b\xfb\x7b\x2f\x4d\x39\x41\xda\xf7\ +\x59\xde\xbd\x3e\x3a\xa8\x0a\xfd\xe6\x90\x1f\xad\x11\x5d\xad\xb4\ +\xb8\xed\xb5\x65\x21\xbc\xa5\x38\x94\xfd\x59\x0e\x3a\xfc\x47\xbf\ +\xa4\xcb\xea\x0a\xff\xe9\xde\x89\x0f\x5c\xb7\x8d\xcc\x03\xda\x32\ +\x55\xb1\xf7\x4b\x4a\x24\x42\x7f\x72\x60\x8f\x26\x42\xee\xaf\x0f\ +\xcd\xd8\x01\xa1\x46\x97\x74\xd9\x59\xd0\x57\xcf\xdb\x3e\xcc\x27\ +\x59\x08\xa8\x52\xcf\xdf\x88\x4a\x0c\x0d\x14\x30\x4a\xd8\x5f\x4f\ +\xb8\xc4\xad\xd9\xf5\x67\x7d\x33\xe9\xbe\x17\xff\xd5\x4d\x8b\xca\ +\x85\xaa\x0a\x38\x2c\x2f\x4b\x98\x88\xf4\x95\xb1\xde\x9c\xa5\xd8\ +\x5f\x9f\xf7\x19\x7b\x6b\x73\xfb\x62\xdf\xd4\xb3\xbb\xa4\xcb\xfd\ +\x9f\xbe\x72\x3d\x8b\xc8\x43\x17\x7d\xd8\xa4\x7a\xe6\x0e\xf1\x92\ +\x1f\x3d\x19\x8a\xfd\xf5\xc0\xa0\x54\x26\xf7\xcb\x7d\x63\xd4\x24\ +\x2c\x25\x4f\xe3\x9e\x8e\x9b\x3f\xea\xd0\xd8\x34\xa0\xb5\x7a\xc2\ +\x25\x1d\x2e\x62\x8c\x66\x74\x32\xf3\x34\x65\x85\xbf\xa1\x67\xbd\ +\xdc\xf7\xb1\x7d\xe3\x13\x93\xc8\x0c\xb3\x96\xf2\x9b\xe5\x90\x70\ +\xc2\x1e\x57\xd4\x38\x0a\xa0\x0a\x27\x96\x52\x2f\x65\xaf\x37\xe2\ +\x7a\x81\x7d\xb5\x17\xde\xbb\x39\x4f\xec\x26\x32\xf7\x7e\x39\x14\ +\x08\x10\xfe\xad\x27\x1b\xc8\x54\x91\xea\xd9\x66\xdb\x5f\xcf\xb8\ +\xde\x37\xc5\x3e\xe8\xa0\xbf\x1f\x7c\x78\xb2\x46\x52\x2f\x37\x78\ +\x1c\xd2\xcf\x7e\x21\xe0\x74\x51\xaf\xd7\x4a\x99\xb2\x5e\xaf\xdf\ +\x96\xf2\xa3\x64\xa8\x88\xdc\x08\x5d\x9e\xee\xdd\xbd\xfb\x9e\x87\ +\x77\xf6\x33\x2d\x87\x0b\x0b\x99\x95\x2e\xa1\x83\x57\x21\xa8\xd1\ +\xbb\x77\x79\x2a\xbb\xde\x9a\x2d\x8d\xcc\xf4\x1a\xee\xc7\x1b\x1f\ +\x79\xe5\xa5\xab\x93\xcd\xb0\xe6\xda\x9d\x09\x13\x8c\x68\xbc\xa8\ +\xe0\x28\x53\x25\xe8\x7d\x81\x9f\x97\x5b\xf3\xe6\xec\x3a\x6f\x95\ +\xdb\x69\xb6\x3e\x67\x3e\x5a\x7b\x84\xe6\xf6\xac\xed\x19\xd7\x57\ +\x68\x4f\xe8\x78\xd3\xd1\x63\x44\x2c\x59\xfb\xb8\xc0\x5a\xe5\x70\ +\xcc\x09\x6d\x17\x94\xaa\x09\xa1\x1d\xd4\x13\xbd\xd1\xf3\x0b\xf5\ +\xfa\xc9\xea\xf5\xc3\xb8\x49\x97\x74\xe9\x6f\x2b\x80\x4b\x91\xaa\ +\x06\x2a\x3b\xdf\xdf\x1e\xdc\xb1\x7f\x94\x8d\xae\x27\x48\x3c\x56\ +\xdf\x8c\xb3\xf8\x7a\xed\xa2\x7a\x81\x50\x12\xa4\xc4\x9b\xb1\xad\ +\x51\x0b\xde\x3d\xfa\x47\x11\xd7\xbb\x22\xd5\x9b\x30\x10\xaa\xd1\ +\xbb\xcc\x03\xaf\x42\xca\x29\xf6\x93\x8d\xc8\x5c\xa4\x97\x3a\x8f\ +\x2b\xe4\x61\xde\x51\x1f\x0a\x4d\x34\x8a\xaf\x7c\x9a\xb3\x73\x10\ +\xd3\x37\x6c\xd8\xef\xa6\x3f\xe3\x64\x02\x94\x0a\x53\x8c\xbb\x7a\ +\xfd\x8d\x7a\xf3\x28\x4e\xf2\x45\x3a\xd1\x28\x34\x58\x06\xdf\xc4\ +\x29\x7b\xf8\x19\xef\x29\xc6\x4c\x89\x60\xb4\xe1\x47\xc7\x84\x92\ +\xcf\x04\xae\x11\xeb\x1b\x04\x81\x9b\x67\x4e\x49\xd1\x3f\x2a\x86\ +\xb6\x90\x20\x65\x87\xd6\x52\xb0\x74\x1c\x86\x9e\x50\xbd\x71\x45\ +\x0f\xa7\xc4\x4d\xe9\xe4\x0e\x7e\x1e\x10\xd2\x4b\xd8\xfd\xfd\xe3\ +\x34\x9a\x30\xd9\xe1\x8f\xd3\x8e\xa0\x53\x1c\x2d\xea\xf5\x43\xa7\ +\x44\x31\x9d\xcf\xd7\x4f\xec\x1f\x8d\xa8\x64\xae\x47\xe3\x40\x4b\ +\x48\x8b\x2f\x35\x92\xf3\x2e\x5c\x3e\x0d\xc1\x89\x52\xc0\x4c\x4c\ +\x32\xd9\x4e\xf0\xb4\x13\x9a\x67\xc4\x78\xf4\xe5\x8c\x98\x0e\xbe\ +\x1c\xc1\x18\x91\x59\x78\xa4\x56\x06\xf7\xfd\xf5\x6c\xcc\x14\xa9\ +\x00\x9c\xde\xcd\x88\x1d\x46\xb4\xa6\x81\xa6\x1a\x5a\xc1\x13\x79\ +\x9c\x67\x9a\xbc\x56\x1b\x00\xc9\x26\x00\x2b\x44\xa9\x4f\x11\x93\ +\x84\x88\x50\xa9\xc4\x72\x05\x3f\xb1\xc4\x3c\xdf\xd4\xc2\x2e\xb9\ +\x63\x92\x39\x2a\xe2\xd4\x51\x26\xb6\x8a\xd6\x74\x45\x87\x20\x84\ +\x2e\xf8\xcf\x84\xa5\x43\xa4\x27\x24\x20\x4c\x8a\xe6\x56\xf7\x8f\ +\xb6\x15\xe3\x02\xd4\xa2\xba\xa8\x98\x62\x24\x4f\x7d\xb1\x29\x45\ +\x89\x71\x7d\x8b\x80\x9e\x04\xcd\x0b\xe0\xf2\xba\x02\x9c\x0a\x15\ +\x1e\xba\x1c\xe7\x71\x11\x3c\x4e\x5f\x71\x55\x6c\x76\x44\xeb\xdd\ +\x22\x2d\xc3\x29\x0d\x31\x33\xc3\xdc\x95\xaa\x77\xf4\x47\x47\x46\ +\xd4\xef\x67\x51\xb9\xf3\xb3\xa7\x61\xd2\x27\xb1\xd5\xef\xa8\x53\ +\xba\xa4\xaf\x9c\x27\xb1\x14\xfe\x68\x36\x9f\x85\x22\x65\x92\x0c\ +\x91\x08\x2c\x53\xc2\xcd\xf3\x3b\x9a\x06\x6d\xd9\x3f\xba\xec\xfb\ +\xb1\x13\x0a\xa1\x42\x26\xf8\xa3\xe5\xaa\x58\x1a\x26\x23\x15\xfe\ +\x68\x86\x4e\x6b\x2d\x61\x2b\x2c\xa1\x7f\xd4\xf9\xe9\x98\x64\x19\ +\xfe\x45\x49\x12\xfa\xa3\x59\x3b\x5d\x40\x3d\x39\xb1\x28\x8b\x50\ +\x43\x21\x57\x82\xfe\x51\x71\xd6\xb9\x19\x7d\xbc\x94\x1f\x5d\xea\ +\xfe\xd1\x0b\xa8\xa7\x2a\xa8\xd7\xf1\xc7\x00\x14\xf5\x30\x59\xfb\ +\x0c\xfe\xe1\xa3\xe0\xfa\xb8\xd8\x67\x8c\x37\x50\xc9\xfc\x28\xd1\ +\x32\x59\xc0\x01\x3f\x89\xea\x49\x50\x32\xfd\x09\x3a\x8d\x8f\x1b\ +\x27\xce\xdc\xb9\x09\xc5\xe3\xf3\xab\x1c\x06\x67\x18\xea\xb8\x79\ +\xfa\x62\x67\xc3\x1a\x9e\x86\x56\xb2\x43\x46\x4a\xa5\x9f\x57\x3f\ +\x5e\x6a\xe0\xba\x0e\x76\x67\x05\xdc\x3c\x22\x78\x63\x81\x5c\x08\ +\x41\x45\xa5\xda\x34\xf4\x41\xc8\x4c\x05\x5a\x17\x6d\xe9\x98\x88\ +\x64\x8e\xb2\xc9\xbf\x07\x47\x8d\x54\x6a\xa7\xc3\x12\xd6\x70\x16\ +\x3e\x7e\xf1\x70\xa3\x2d\x87\x03\x79\x47\xcd\x86\x4e\xe1\x9b\x39\ +\xba\xed\x0c\x15\x4b\x39\xd6\x50\x68\x7b\xf0\x14\x63\x42\x99\x4e\ +\x68\x7c\xb1\x52\x62\xef\x74\x22\x8b\xbb\x8a\x52\x55\x6e\x30\xdd\ +\xb0\x1b\x0c\x1d\xfa\xce\xd5\xd1\x0f\x4c\x93\x28\x06\xad\x31\x49\ +\x36\x8f\x51\x9c\x5d\x94\x56\xd8\x50\x15\x16\xb1\xa3\xc7\x98\x09\ +\x93\xf4\xac\xc0\xfd\x3c\x7d\x29\x51\x8e\x83\x77\x2a\x9d\xa3\xb6\ +\xf4\x88\xa0\x1a\xfe\xa1\xbe\x2f\x39\xfa\x5f\xc1\x2a\xd8\xa0\xc5\ +\x51\x93\x08\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x38\xb4\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\xa8\x00\x00\x01\x77\x08\x03\x00\x00\x00\x06\x8a\xf0\xc8\ +\x00\x00\x02\xc1\x50\x4c\x54\x45\x7f\x00\x00\xa3\x6d\x93\xa4\x75\ +\xa1\xae\x96\xd0\xbb\xb2\xec\xcb\x9d\xa4\xd7\xcd\xed\xbb\xbb\xfe\ +\xcb\xcb\xfe\xd0\xce\xfe\xd2\xd2\xff\xc8\xc6\xfe\xc3\xc3\xfe\xdc\ +\xdb\xfe\xc0\xbe\xfe\xb8\xb6\xfe\xd8\xd7\xff\xb3\xb3\xfe\xe2\xe2\ +\xfe\xeb\xeb\xfe\xf3\xf3\xfe\xfc\xfb\xfe\xb0\xae\xfe\xf0\xef\xfd\ +\xad\x80\xa3\xf9\xf7\xfb\xaa\x9b\xe0\xad\xac\xfe\xa4\x62\x7b\xbc\ +\x7b\x7b\xbd\xb9\xf5\xbf\x80\x80\x91\x31\x3d\xa7\x50\x50\xa9\x53\ +\x53\xca\xc4\xf2\x95\x2c\x2c\x96\x40\x53\xcc\x9b\x9b\xcf\xcb\xf7\ +\xae\xa6\xf1\x9c\x53\x6d\xdc\xb9\xb9\xe0\xdf\xff\x9c\x5a\x7b\xb5\ +\xb0\xf4\xee\xe0\xe1\xb7\x70\x70\x9e\x41\x42\xf5\xec\xec\xbb\x83\ +\x8f\x8f\x20\x21\xbe\xb1\xe4\xd5\xac\xac\xce\xa0\xa1\xbe\xa8\xd3\ +\xb2\x6c\x72\xd7\xb0\xb0\xdd\xc2\xc8\xed\xe3\xeb\xa9\x76\x99\x8b\ +\x22\x2c\xb6\xa9\xe4\x9d\x6a\x98\x89\x13\x14\xb9\x73\x73\xb9\x76\ +\x78\xb9\x9f\xcc\x9f\x68\x90\xa3\x81\xbb\xbc\xa2\xcb\xbc\xaa\xdb\ +\x9c\x3a\x3a\xa6\x71\x94\xc1\xbb\xf3\xa6\x88\xc2\xc4\x91\x98\xc5\ +\xba\xea\xc6\xba\xe5\xc6\xc0\xf4\x95\x4a\x69\xa8\x85\xb9\x96\x30\ +\x31\xcb\xaa\xbd\xb5\x6c\x6c\xaa\x84\xb3\xcd\xa3\xaa\xb5\xa0\xd5\ +\x8b\x1a\x1b\xd0\xa2\xa2\xac\x5a\x5b\xd1\xac\xb5\xac\x5e\x62\xac\ +\x84\xad\xad\x64\x6d\x97\x56\x7d\x98\x33\x33\xb6\x99\xc4\xdf\xdb\ +\xf7\x99\x46\x59\x9a\x3d\x44\xe4\xcd\xd1\xe6\xd0\xd2\xe8\xe6\xfb\ +\xea\xd7\xd8\xaf\x60\x60\xec\xda\xdb\xb3\x92\xbb\xaf\x8a\xb5\x9b\ +\x4a\x5c\xf1\xe3\xe3\xf3\xed\xf3\xb1\x63\x63\xb1\xa3\xe2\xf7\xf0\ +\xf0\xf8\xf3\xf3\x8c\x26\x32\xb3\x89\xab\xba\xaf\xe8\x8d\x2c\x3b\ +\xb6\x84\x9a\xac\x8a\xbb\xba\xb4\xf4\x89\x1a\x22\xa1\x50\x5c\xcb\ +\xc1\xec\xd9\xb3\xb3\x85\x10\x13\x95\x43\x5c\xc1\x83\x83\xa3\x54\ +\x61\xc2\xb4\xe2\xb0\x9e\xdb\x99\x43\x52\xb1\x86\xa9\xc7\xa8\xc0\ +\xb1\x8b\xb3\xa3\x87\xc6\xb2\x9c\xd3\xa5\x4c\x4c\xa5\x68\x84\xb4\ +\x73\x7c\xb4\xa1\xdb\xb4\xae\xf3\x9a\x4c\x62\x94\x45\x62\xa6\x8e\ +\xce\xd5\xb8\xc5\xd6\xc1\xd5\xb6\x78\x83\xa6\x8f\xd1\xd8\xd3\xf5\ +\xb6\x90\xb2\x9b\x57\x78\xd9\xc6\xda\xa7\x60\x70\xa7\x90\xd1\x9b\ +\x64\x91\xdd\xcf\xe2\x8d\x30\x44\x8e\x38\x52\xe1\xc4\xc4\xb9\x8b\ +\xa3\xe4\xcb\xcb\xa9\x8b\xc3\x8b\x27\x39\xe6\xe1\xf4\x9d\x60\x85\ +\x90\x2e\x3b\xea\xe4\xf2\xbb\x9a\xbe\x90\x35\x49\x9f\x45\x4d\x96\ +\x49\x64\xa1\x44\x44\xad\x90\xc7\xa1\x4d\x56\xae\x72\x86\x92\x34\ +\x43\xa3\x6a\x8d\x91\x2c\x34\xc0\x86\x8a\x83\x0a\x0b\x9f\x52\x66\ +\xbc\x93\xac\xc4\x8b\x8b\xc3\x9c\xb0\x89\x16\x1a\xcf\xc2\xe5\xe9\ +\xd4\xd4\xb1\xa6\xe9\xb5\xab\xeb\xc9\x94\x94\xa1\x6e\x98\xae\x99\ +\xd4\x9e\x58\x73\xd5\xbc\xcc\xbf\xa1\xc3\xae\xa9\xf5\x9b\x55\x73\ +\xaf\x78\x92\xc1\xab\xd4\xc1\xb7\xec\x87\x19\x23\xb6\x9b\xcb\xa4\ +\x72\x9d\xaa\x6c\x83\xb7\x7b\x87\xaa\x72\x8d\xc4\xa9\xc9\x92\x3d\ +\x53\xaa\x98\xdc\xb1\x92\xc1\xc7\x91\x92\xa4\x7a\xab\xba\x95\xb5\ +\xe8\xda\xe3\xba\x9c\xc3\xca\xb1\xcc\xba\xab\xe2\x94\x3b\x4c\x9a\ +\x5c\x82\xae\x95\xcd\x95\x39\x46\xa2\x59\x6d\xcf\xbb\xd7\xb4\x85\ +\xa1\x9d\x63\x8c\xbc\xa5\xd1\x99\x4f\x6d\xa6\x78\xa3\x91\x24\x24\ +\x9f\x6f\xa1\x86\x14\x1a\x8e\x29\x35\x0d\x87\x2a\x70\x00\x00\x35\ +\xae\x49\x44\x41\x54\x78\x5e\x84\x5d\x53\xb7\x2c\xcd\xb2\xed\xb7\ +\x72\xb5\x17\xb6\x6d\x1b\x1f\x6d\xdb\xb6\x8d\x63\xdb\xb6\x6d\xeb\ +\xda\xb6\x6d\xfd\x8a\x9b\x19\xe8\x59\x51\x51\x3d\x4e\x76\x65\x56\ +\xed\x97\x3d\xe6\x08\x67\x44\x64\xae\x5e\x9e\x0f\x72\x8c\x2c\x4f\ +\xc3\x1a\x66\x1a\x7f\xfc\xe8\x28\x75\x2d\x69\xca\xab\x2c\x4a\x19\ +\x75\x9c\x35\x3d\x65\x12\x9e\x32\xb1\xa3\x1f\x9e\xb8\x0c\x87\xf2\ +\xc4\xa5\x1f\x7e\x3a\x56\xc6\x67\x65\x7c\xe2\x57\x5c\x57\xf2\x58\ +\x11\x66\x2f\x1f\x0c\xf2\x01\xd0\x66\x39\x43\x15\xb0\xad\x51\xd2\ +\x14\xa8\x61\xa5\x59\x16\x0a\x97\x41\xd6\x34\x02\xb2\x32\xfe\x04\ +\x70\xcd\x50\xfb\x01\x5d\x12\x27\x23\x0d\x33\xe0\xec\xf7\x81\x34\ +\x0c\x8b\x52\xb1\xf6\x22\xc8\x30\x05\x69\x46\x33\x8d\x38\xe9\xc9\ +\x2c\x45\x89\x8c\xf4\x13\x7a\x82\xa2\xb5\x3c\x34\x93\x00\x34\xac\ +\x34\x4a\x4b\xd6\x00\x92\xa0\x0a\x41\xe9\xb1\x34\x25\xa2\x3a\xac\ +\x3d\xa0\x04\x3d\x99\x98\x59\x78\xe2\xa2\x58\x2d\x60\xb0\xde\x30\ +\x9f\xa9\x19\x49\x9b\xcc\xa8\x39\xa3\x28\x91\x53\x99\x1e\x66\xe0\ +\x3b\x51\xb3\xcf\x28\x01\x95\xb8\x6f\x70\x46\xd6\xc7\x5f\x03\x69\ +\x84\x45\x88\x09\x2d\x81\xcd\x0d\x44\x85\x09\x82\x02\x28\x43\x8d\ +\x13\x1c\xa7\x85\xc9\x29\xbc\x0f\x0c\x27\xa2\x32\x5a\x82\x89\x21\ +\x10\x15\x25\x28\xda\xa5\x4d\x59\x26\x8a\x94\x1b\x42\x42\x99\xf8\ +\xc5\x98\x0b\x03\x53\xa5\x94\xe8\x19\x95\x0a\x5c\xe7\x49\x48\x03\ +\x38\x61\xbf\xd1\x25\xd6\x23\x20\x35\x14\x8d\x9c\x07\xd4\x8c\x39\ +\x4f\x22\xaa\x04\x4d\x31\x3c\x69\x0b\xa1\x6b\x0d\xc5\xa7\x51\x92\ +\x74\xd6\x80\x09\x6d\x1a\x8a\x9c\x86\xc1\x7a\xaf\xac\x5f\xa9\x6f\ +\x91\x55\xa8\x12\xc9\xa8\xa2\x04\xeb\x55\x4a\x9d\xe6\xab\x61\x4a\ +\xe5\x4d\xb3\x28\x9a\xe6\x09\x14\x55\xa4\xa5\xa5\x68\x44\x09\xf3\ +\x04\x5d\x02\x58\x50\x73\x08\xa4\xbd\x81\x72\x7e\x00\xd6\x8b\x0d\ +\x0d\xdf\x2c\x02\x96\xff\x05\x01\x55\xde\x2b\xd0\x24\x4e\x5a\x09\ +\x24\xc1\x34\x4a\xcf\x04\x15\x19\x4d\x48\x8d\xc4\x88\xb6\xb8\xcf\ +\x60\xa1\xf6\x50\x26\x36\xa5\xe0\x7c\x2a\x4f\x06\xbe\x03\x27\xa3\ +\xb4\x56\x14\x43\x84\x94\x91\xd2\x1b\x28\x85\xa2\x42\xcc\x7e\x18\ +\xc0\x6a\xa1\x0e\x41\xce\x79\xca\xd4\x74\x49\xf2\x4a\xed\x00\xdb\ +\xf9\xdb\x23\x65\xb5\x67\xe3\x54\x1b\xa2\xf6\x1b\xbc\x6f\xe0\xa4\ +\x09\x0b\x4a\x53\xe1\x82\xf5\xa4\x49\x46\x99\x94\xa8\xaa\xf5\x59\ +\x1b\x26\xa0\x1a\x82\x12\x32\x75\xa2\x35\x19\xfd\xba\x05\x53\x3c\ +\x13\x53\x94\xb0\x0e\x3d\x4d\xa1\xf3\xde\x8e\x02\x66\x26\x1e\x29\ +\x63\x55\x92\x91\x33\xd7\xc1\x76\x5e\x5a\x86\x34\x01\x41\xc5\x33\ +\xb1\x0c\x60\xb0\x79\x02\x39\x69\xf6\x0d\xd3\xe1\x42\xe9\x31\x2e\ +\x54\xb1\x66\xca\xfd\x68\x48\x19\x25\x78\xef\x6d\x13\x7f\x59\xa8\ +\x49\xc9\x5a\x6f\xe1\xc1\xdc\xb3\x0b\x25\xa0\x82\xd5\x8e\xee\x98\ +\x84\x29\xda\x22\xa9\x38\xfa\x8c\x45\x35\xf3\x40\x4b\xc3\x7a\xb8\ +\x50\x98\x7d\x55\x26\xa2\x71\x0b\xab\x78\x51\xa5\x28\x3f\x0d\xae\ +\xcb\x2b\x4c\xef\xeb\x19\x69\x98\x50\x7b\xfc\x2c\x44\x88\xa8\x13\ +\x52\xe5\xbe\xb8\x4f\x60\x74\xae\x29\xda\x7b\xa6\xe7\xff\xec\x7a\ +\x92\x11\x12\x56\x8b\x72\xd8\x2d\xa3\x83\xa6\x94\x66\x71\xcc\xf4\ +\x29\x53\x65\x2a\xc2\x13\x66\x6a\xd4\x3d\x2d\x8c\x2a\x89\x01\x85\ +\x32\x19\x17\x4a\x3f\x26\xe8\xee\x8f\xff\xda\x93\xe7\xf6\x7a\xdf\ +\xce\x2d\xf3\x05\x2a\xd8\x0f\xd6\x2b\xe3\xc1\xfb\x8c\x46\xca\x30\ +\xdb\xa3\x80\x6f\x22\xb0\x88\x47\x31\x94\xaa\x50\x7b\x8b\xb5\xbc\ +\xf8\xcf\x7a\x3a\xee\x4d\x34\xd4\x53\x8b\x84\xe8\xd9\xc6\xa3\x4c\ +\x4d\x80\xcd\x04\x6a\x9e\x6a\x00\x9d\xcd\x40\x16\xec\x95\x6c\x08\ +\x65\x21\x26\x09\xcf\x40\x49\x82\x89\xc8\x49\xd6\x61\x79\x7a\xaf\ +\x31\xce\xaa\x08\xa6\xa3\x28\x2d\x9e\xf5\xc6\xdd\xf3\x68\x00\x4c\ +\xc1\x7b\xb0\x9e\x41\x42\x99\x12\x4c\x62\x3f\x13\xb4\x76\xf4\xfc\ +\xa5\x9e\x19\xfb\x26\x00\x8a\x40\x94\x40\x3a\x17\x2a\x24\x85\x88\ +\x0a\x5d\x49\x40\xad\xbd\x2f\x14\x29\x82\x92\x96\x2e\xa9\xb0\x12\ +\xcb\x09\xa9\x25\xe9\xbb\x7a\x76\x5c\x35\x31\xa4\xd4\x37\x7d\xb6\ +\x28\xda\x26\x28\x64\x34\xe2\xcc\x32\x13\x8f\x14\xd8\x2f\x15\x85\ +\x0b\x9d\x19\xa4\x2e\x24\xa5\x71\x7d\xfd\x93\xa0\xaa\xe0\xbb\xe5\ +\xe6\x1d\xf7\x5d\xf7\x44\xf8\x58\x3f\x85\x0f\x05\x48\xeb\xee\xd5\ +\xe0\x0f\x80\x15\x5a\xaf\x76\x14\x34\x05\xeb\xc3\xa0\x57\x41\x70\ +\x0d\xd8\x5a\x41\xd2\x9b\xc3\xd2\x2b\x7b\xbd\xbf\x2e\x25\x1e\xbd\ +\x95\x60\xae\xdd\x3f\x19\xd4\xc1\xa6\x3e\xbc\xef\xac\xe5\x91\x41\ +\x09\x62\x1a\x4f\x0f\xd6\x03\x65\x84\x19\x27\xe1\x44\xdc\x5c\x28\ +\x52\x0e\xf4\x09\xab\xc0\x2c\x14\x25\xbb\x25\x25\x69\x52\x9f\x76\ +\xce\xab\xbf\xd0\x5b\x47\x0c\x1e\x0b\xf7\x77\x11\xce\x49\x4e\x66\ +\x34\xcc\x3c\x1f\x26\x80\x09\xa2\x7a\xcd\x37\x14\x65\xc6\xe7\x02\ +\x94\x21\xd2\x9a\x41\x44\x05\xa8\x62\x65\xa0\x30\x4b\x60\xfe\xad\ +\xff\xd0\xc3\xf8\x5c\xc9\x40\x6f\x27\x05\x7a\xd3\x95\x4b\x9f\xb8\ +\xfd\x8a\xf7\x6c\xde\x7e\xfb\x39\xef\x4a\xa0\x4b\x82\x71\x6e\x50\ +\x62\xed\xa8\x1a\xd2\x48\x4d\x11\xd3\xa6\x26\x15\xc2\x7a\x46\xe9\ +\xa3\x3c\x41\x5a\xef\x8e\x30\x31\x0e\x8c\x12\x1a\x6a\x9a\x30\xbe\ +\xb3\xdb\xda\x26\x15\x00\xa0\x5d\xa1\x14\xb5\x66\x54\x79\x4f\x2e\ +\x29\x07\x39\x0b\x36\xa3\x08\xf2\x18\xa7\xb5\xa1\xb2\xd4\xf5\xf5\ +\xbf\x6f\xe1\xec\x1d\x4b\x80\xdf\x73\xe3\x82\xd4\x9b\x51\x81\x68\ +\xa3\x27\x63\x47\x33\x86\x29\xac\x6f\x3a\xd0\xac\xc8\xd8\x87\x96\ +\x4d\x67\x5f\x20\x26\x49\xb0\xd4\xc9\x33\x0c\x62\xd3\x4d\x67\x1d\ +\x78\x22\x7e\x5c\xb3\x38\x64\xde\xdf\xea\x91\x5e\x57\x8b\xda\x43\ +\xe3\xbb\xf7\xf5\xb4\x17\xb1\x04\x4d\x89\xf5\x6a\xf4\xe3\x72\xfe\ +\xd2\xdd\xab\xc2\x1b\x91\xbd\x4d\x40\x14\x8a\x96\x35\xea\x14\x42\ +\xb0\x61\xc7\xf2\xa8\xaa\xd2\x57\xdc\xd3\x5b\xff\xd4\x38\x91\xb1\ +\xfb\x63\x9b\x18\xdf\xd7\xbf\xb9\x61\x03\x7d\xdc\x30\x36\xd4\xd4\ +\xe7\xe7\xed\xeb\xc3\x24\x9a\x6a\xd8\x1c\xbe\x5e\xb7\x74\x37\xdb\ +\x66\x44\x51\xd8\x91\x14\x69\x7d\xf6\xad\x17\x7e\xe4\x94\x3b\xd7\ +\xd4\x1a\x3a\x27\xf5\x77\x49\xb9\xa7\xa3\xa2\xa4\x2c\xce\xd6\xf1\ +\x28\x41\xa6\x24\xad\x3e\xf9\x95\xf1\x78\x3c\x1a\xe5\x83\x94\x90\ +\x4e\x4b\xe8\x3c\x76\x4c\x6e\x5f\xaf\x30\xa1\xf7\x6a\x47\x19\xea\ +\xd2\xf3\xca\xa3\xc7\x4d\x9a\x4c\x74\xea\xfa\x5f\x57\x16\xbe\x20\ +\x24\x0d\x14\x25\x9b\x74\x63\xf5\xd2\x69\x6f\xfd\xd6\x23\x4b\xa7\ +\x2f\x5d\x79\x1a\x12\x4e\xc3\xb4\x0e\xb2\xca\x23\xd9\x1d\x71\x9e\ +\x41\x40\x87\x76\xdf\xe4\x2c\xa9\x33\x4f\x44\x4f\x44\x4f\xf9\x87\ +\x21\x4c\x37\x0f\x40\x4e\x11\xd5\xbf\x68\x0a\xdb\x6b\x67\xfc\xff\ +\x54\x5b\x0e\x7f\x14\xa0\xf2\x78\x7d\xef\xd3\x4f\x6a\x7c\x7f\x2e\ +\xbb\xfb\x69\xdd\x54\x79\x65\x3c\x4d\xc5\x29\xac\x77\x9e\x49\x47\ +\x10\xcf\x03\x00\x72\xe6\x98\x14\xbf\x90\xa1\x30\x31\x76\xa4\xbc\ +\xaf\xeb\x52\x99\x1f\xb3\xbb\xff\xe5\xf0\x79\xf0\xc7\xbb\x93\x7a\ +\xf7\x8a\x25\x21\xc0\x9e\x45\xb7\xb1\x77\x76\x74\x5b\x60\xbd\x17\ +\x51\x1e\x9a\xcd\x23\x08\xc7\xee\x09\xcb\x1d\x13\x42\xa9\x50\xb3\ +\x17\x01\xe3\x8c\x33\xc8\xd2\xdc\xaf\x26\xff\x79\x8f\xf4\x8b\xa4\ +\xf6\x2b\x9c\xd2\xff\xa5\x72\x7e\x61\xb8\x10\x96\xe6\x86\x19\x03\ +\x5b\x11\xe5\xbb\xb8\x51\x80\xcd\x2e\xfa\xe9\x8e\x3d\x93\x31\x11\ +\xf6\xa9\x8c\x02\x13\x1d\x82\x60\xd3\x96\xfd\xcb\xe3\xfb\xbf\x1d\ +\x3f\x1f\x48\xc5\xe0\x27\x7f\x04\x24\x3f\xfc\x21\xbd\x5e\x93\x26\ +\x09\x51\xd4\x8e\xe3\xd3\x1c\x04\x5d\x58\x20\x80\x08\xf3\x9c\xd6\ +\x0f\x8c\x6f\x02\xce\x2c\x95\x38\xff\x4e\xfa\x4f\x2b\xa1\x28\xbd\ +\xca\x55\x11\xc0\x4d\x27\xa6\xf7\xe7\x45\x50\xaa\x08\x60\x4b\x55\ +\x27\xb2\xbf\x2b\xdf\x7f\xdd\x96\xe3\x3b\xee\x7b\xe8\xe4\x64\x72\ +\xff\x0b\x1c\x79\xd2\xe6\xce\xc2\x7c\xdb\x63\xcb\x85\x31\xf7\x0b\ +\x8c\xb3\x53\xeb\x01\x94\x68\x09\xa0\xc4\x7a\xc6\x99\x6e\x64\x21\ +\x0d\x08\x31\xca\xa5\xd7\x1e\xd8\xbf\x1c\xc0\xff\xfd\x23\xdf\xdb\ +\xbe\x8e\x50\x8f\x69\xb7\x9c\xd4\x75\x9c\x65\x51\x72\x94\xff\x1c\ +\x61\x9a\x92\x6f\xfa\x55\xa0\x3c\xf5\x07\x27\x17\x2b\xda\x88\xd0\ +\xf4\x32\x0a\xac\xc6\x85\x7a\x5d\xca\x1a\xa9\xf1\xcd\x64\x49\x49\ +\x87\x18\x65\x78\xd2\xbc\xaa\x8a\xf2\x11\xb2\x9a\x6c\xbb\xa7\xb4\ +\x07\x09\xcb\x69\xbb\x96\x02\x44\x42\x9c\xbc\xf3\xfb\x11\xd6\x13\ +\x93\x80\x93\x2c\xd2\xa6\x03\x07\x5e\x73\xe6\x25\x41\xa0\x46\xa9\ +\xc9\x94\x04\xf9\x5c\x30\x7b\x65\x1f\x3d\x59\x75\x02\xca\x38\x65\ +\xbc\x9d\x84\x34\x67\x7d\x8f\x93\x23\xe7\x4b\x2f\x7c\x99\xa2\x54\ +\x21\xad\xa3\xaf\xff\xdf\x5e\xef\x1d\x97\x53\x78\x7f\xed\xd7\x44\ +\xb9\xc7\xa2\xf7\x47\xf7\x4f\xa2\x65\x2b\xc8\xaa\x82\xe7\xf2\x32\ +\x32\xea\x5d\x28\xd0\x32\xeb\x81\x95\x06\x84\x14\x14\x25\x5b\x7a\ +\xa8\x87\x21\x42\x4a\x16\xea\xbf\x08\xdb\xba\xed\x9b\x9f\x7f\x95\ +\x10\xfb\xb3\xd3\x82\x92\x64\x7d\xb5\xfc\x92\xc7\x6f\xa6\xc6\x23\ +\x45\x11\x3e\x03\xaf\xa7\x28\x74\x3f\x7b\x78\xf3\xc7\x08\xa9\xb2\ +\x7e\xab\x58\x52\x72\xf1\x45\x41\xef\xf2\x39\x8d\x80\x6e\x5a\x7d\ +\xe3\x89\x97\x91\x90\xf2\x56\xd9\x19\xd2\x5f\x59\x1e\x04\x94\x0c\ +\x95\x3c\x53\xb3\xd4\x34\x33\x4f\xe1\x51\x19\x0d\xb3\x9d\xcd\x73\ +\xe5\x86\x8d\xe7\x9d\xf7\xba\x57\xc4\xb0\x26\xe0\x45\xb2\xec\xbb\ +\x6c\x49\x69\x6f\xaf\x14\x65\x10\x6b\xf7\x4c\x47\x55\x9e\xde\x4d\ +\x42\xca\x99\xfc\xb7\x5a\x98\xff\x7d\xef\x34\xd7\xb4\x23\xe3\xec\ +\x2b\x49\x59\x95\x84\xf5\x90\x51\x10\x14\xac\xb7\x35\xa6\x67\x37\ +\x63\x87\xb8\x98\x21\xf7\x94\xad\x22\x77\x9f\xb1\xf3\xe4\x5d\x1e\ +\xf9\x96\x3b\x1e\x9a\x0e\xca\x30\x2e\xfa\x1a\x51\x6e\xd5\x47\x4e\ +\x8b\x44\x6d\x4a\xee\xfa\xe3\xcb\xe3\x72\x96\x72\x8e\xf5\x05\x7a\ +\x09\xce\x26\x45\x45\x46\x5d\x8a\x0c\xac\x17\xac\xaf\xf8\x8e\x21\ +\xc4\x9e\x1c\x42\x5a\x9c\xc7\x42\xca\x51\x49\xa0\xa8\x10\xf4\x86\ +\x93\x8b\xe4\xe2\xcf\x3f\x75\xb6\x03\xfe\x50\x40\xfa\xbd\x68\x90\ +\x2e\xd8\xb4\x69\xfd\x59\x47\xf6\x4f\xab\x82\x04\x13\x65\xc6\x21\ +\x51\x94\xa0\xda\x4d\xa8\xca\xa8\x53\x7b\xeb\x42\x7f\xb3\x67\xc7\ +\x8d\xa3\x14\xe1\x5e\xc9\x91\x3a\xe1\x64\xad\x27\x4d\x5a\x3d\xa5\ +\x48\xea\x91\x1e\xc6\x89\x3c\x88\xe9\xd2\xea\x87\xa6\x55\x35\x0a\ +\x32\x51\x24\x32\xa0\x45\xfa\x21\x39\x7c\x50\x54\xed\xfd\x42\x7b\ +\x27\xba\x4d\x5c\x28\xf1\x5f\x70\x62\x3c\xb8\xd8\xc8\x3d\x64\x9b\ +\x23\x9f\xd9\xb2\x84\xa1\xaa\xb4\x61\x5c\x96\x6b\x4e\x79\xa6\x87\ +\x71\xc6\xe3\x15\x29\x54\x5a\xa0\x20\x46\x04\xc5\x40\x85\x11\x30\ +\x69\x51\x5f\xbf\xd0\x99\x71\x96\x71\x54\xd3\x41\x47\x3e\xf3\x99\ +\xeb\xde\x46\x5e\x6f\x39\xcd\x80\x94\x85\x94\x08\x4a\x23\x5d\xc3\ +\xae\x7e\x73\x70\x4a\x18\x3f\xdb\xfb\xd0\xb4\xd0\xf2\x8d\x24\xa0\ +\x0c\x46\xc9\x3b\x6a\x51\xcc\x72\xde\xc8\xa8\x37\xf8\x71\xe6\xd9\ +\x41\x8a\x30\x6e\x9e\x2e\x8e\x06\x79\xba\xf5\xdb\x91\x7e\x53\x78\ +\xa6\x22\x3b\x9b\x22\xb9\x8a\x71\x92\x8b\x8a\xd0\x31\x36\x1d\xe9\ +\xdd\x74\xc9\x03\xd3\x71\x55\xa2\x20\x46\xe4\xac\x81\x92\x9f\x28\ +\xa3\x02\x32\x7c\x01\x26\x3d\x5d\xbb\xa6\x6d\xdb\xb6\x21\x01\xf1\ +\x55\x52\xe1\xa7\xa6\x03\xb1\xf5\xc1\xef\x7d\x6e\xda\xd8\xd3\x73\ +\xc0\xb7\x3a\x5a\x52\x0d\xf5\x8c\xb9\xdf\xfb\xf4\xb8\x18\x57\x99\ +\xd6\x42\xc9\xe1\xd7\x60\x3d\x8a\x0d\xc0\x0b\x7d\xc2\xb0\xe9\x07\ +\x0c\xe4\xf0\xef\x26\x3d\x9f\xcc\x7c\xd3\xd6\x8f\x7e\x65\xc2\x45\ +\x11\x45\xfa\xcf\x51\x1a\xc6\x61\x9f\xf7\xe8\xa9\xbd\x55\x59\xdc\ +\xd4\x1d\x7a\xb9\xc2\x3c\x16\x54\xc7\x54\xee\x08\x64\x0d\xd6\x0b\ +\x56\xd5\x76\x7d\x68\xf2\x40\x1c\xca\xd3\x85\x79\x62\x99\x28\x77\ +\xb5\x3c\x68\x79\xd0\xb0\x08\x54\xe1\xf4\x6d\x9a\x52\xc8\x29\x30\ +\x39\xef\xc0\x86\x6f\xde\xf2\x8e\xe3\x8f\x2f\x0e\x0a\x94\xc1\x6b\ +\xa1\xa8\xe2\x04\x49\xd5\x81\x0a\x3a\x55\xa7\xbe\xef\x2b\xb0\x96\ +\x14\x75\xa6\x01\xa9\xfc\x2b\x27\xad\x40\x4f\x02\xfd\xad\x11\xe7\ +\xf9\xbb\x4c\x06\x76\x12\x60\xd2\x36\xbf\x1a\x55\x83\x54\x6b\xa1\ +\xa6\x66\x9f\xc8\xaf\x49\x51\x29\xd9\xa3\xca\x0c\xc6\x23\xa5\x03\ +\xb4\x7e\xbb\x4c\x40\xef\x1b\xe5\xb9\x21\x69\xf8\x2c\x22\x41\x0f\ +\xf1\x8e\x19\xe3\x86\x07\x26\x05\x67\x1f\x52\x64\x73\xa4\x76\x23\ +\x93\xb3\xa3\x80\xc9\x5e\x9e\x50\x8a\x32\xc1\x92\xa2\xd0\xe4\xd8\ +\x8e\x4c\x09\x47\xce\x6f\x22\x9d\x1e\x35\x70\xe6\xf9\x65\xdb\x57\ +\x5d\x1a\x53\x24\x87\xd8\xad\x62\xdc\x74\xe3\xf2\x24\x2f\x09\xa9\ +\x1d\x35\xff\x98\xeb\xed\xec\x38\x94\x29\x60\x66\x4b\x0a\xbd\xb7\ +\xbc\xf7\xfa\x34\xcb\xe1\xff\x02\x09\xde\x38\xe2\x53\xf9\xbc\x2c\ +\xe6\x33\x76\x86\xcf\xed\x4d\x90\xb7\x6c\x79\x68\x3a\x1e\x65\x9c\ +\x22\x61\xa4\x29\x83\x44\xfb\x03\x98\x0f\xc5\x27\x4d\x52\xd6\x53\ +\xf4\x34\xa7\x0e\xae\x30\x69\xfa\x12\xe3\x20\x82\x38\xb8\xd8\x60\ +\x3c\x1b\x9f\xa7\xf3\x22\xfb\xd1\x8c\x92\x01\xe4\x64\x94\xab\x25\ +\x2d\xc9\xe5\x5b\x7a\x32\x41\xc5\xe2\x03\x25\xa9\x11\x94\xa9\xaf\ +\xda\x9e\x98\x7a\x58\x78\x80\xd5\x87\x79\x5c\x07\x7f\x81\xd3\x83\ +\xba\x19\xf9\x5b\x46\xb7\x69\x9a\xa7\xe9\x65\x31\x16\x3a\x76\xe4\ +\x6f\x26\x8b\xa3\x9c\x73\x10\x0a\xd3\xd7\xc0\x13\xc9\x3a\x93\x75\ +\x72\xc6\x89\x78\xcf\x5c\x77\xca\x24\x30\xc5\x46\x79\x3b\xaa\xa1\ +\xe8\x46\xde\x16\xfe\xdd\xd6\x2c\xbb\xec\xab\x6f\x3f\x28\x5b\xdd\ +\x13\xd3\x28\x04\x97\x7e\xf4\xe4\x64\x1c\x41\xc6\x78\x19\x4e\x94\ +\xb8\x6f\x68\x8a\x7c\xb3\x58\x28\x57\x66\x12\x3b\xaf\x20\x55\x99\ +\x7c\x7e\xb4\xbb\x41\x2b\x8e\x55\xaa\xd0\xcd\xf8\x69\x9a\x77\x55\ +\x45\xc0\x7b\xc9\x94\xa2\xc6\x44\x5f\xa4\x48\x4a\xd1\x12\x7e\x09\ +\x7e\x34\x82\x12\x21\xb0\xb5\x50\x48\x29\x70\xc2\x33\xd1\xb3\x55\ +\xdc\x0c\xc6\xbe\xe0\x6e\x2c\x4a\x49\x8f\x96\x02\x92\x16\x85\xa9\ +\x6f\x26\x67\x84\x0c\x9c\x02\x55\xab\xcb\xfa\xb3\xd4\x04\x5c\x6b\ +\xf2\x7d\xf9\xe6\x63\x36\x15\x7c\x78\x3a\x96\xbd\xbd\x1d\xa5\x08\ +\xa9\xc1\x89\xa2\x98\x56\x97\x5b\xb5\x70\x54\x42\x15\x25\x87\x51\ +\xc6\x8c\x1a\x11\x05\x50\x57\x15\xf9\xec\x55\x8a\xf2\x8e\x9f\xec\ +\x99\x8e\x07\x06\x64\x64\x32\xd9\x77\x12\x55\x61\xbe\x11\x50\xc6\ +\x19\x16\xfd\x91\xe6\x0b\xeb\x51\x06\x67\x9a\xd2\xe2\xcd\x13\x83\ +\xec\xd4\x7a\xd3\x57\xf0\x1b\x97\x5c\x73\xcd\xde\x9f\xec\x08\xd9\ +\xa4\x4a\x7d\x7d\x06\xa4\xba\x0a\x4a\xb1\xa3\xbe\x6e\xc7\xe0\x4a\ +\x9a\x2d\xbd\x47\x13\x21\x33\xde\x34\x11\x82\xac\x1d\x76\x14\xf9\ +\x51\x0e\x9c\x06\xd5\xce\xaa\x6a\xc6\x24\x88\xa0\xd0\xeb\x48\x20\ +\x1d\x45\x59\x99\x6a\x53\x10\xb7\x6d\x1a\xca\x7a\x6f\x9e\xe0\x98\ +\x1c\xdb\x91\x1f\x35\x05\x46\x7a\x78\x47\x6f\x4a\x62\xbe\x89\x2c\ +\x4c\x6f\xee\x23\x3d\xc1\x77\x5a\x7c\xdc\xcc\x93\x17\x87\x13\x24\ +\x9d\x93\x76\x74\x39\xe7\x0c\x45\x5b\xa8\x91\xab\xd7\x03\xac\x36\ +\xe3\x99\x1f\xc0\x02\x2d\x07\x25\x02\xd2\x82\x85\x1d\x85\xf2\xaf\ +\xe0\x7a\xbd\x2b\x34\x69\x2a\x8f\xcb\x37\x60\x3c\x06\x68\x4a\xb0\ +\x0d\xf3\x99\xf7\xec\x41\xc1\x7a\xd8\x27\x8d\x9e\x34\xd4\x03\x4e\ +\xdb\xab\xd1\x59\x15\x19\x18\x9c\x0c\x35\x7c\x13\x46\xcf\xf8\x30\ +\xc1\xfb\xc6\xa8\xf5\x45\xe1\xc8\x1c\xd6\xf7\x35\x7a\x02\x40\xe3\ +\x40\x81\xd3\x67\x9c\x6d\x0d\x5c\xa1\x6a\x37\xae\xd7\x79\x74\xe5\ +\xa6\x62\x49\xd1\xec\xc6\x32\x2a\x54\x05\x41\x4b\xeb\x42\x79\x12\ +\x71\x15\x30\x94\xde\xb5\x11\x8a\x32\x71\x44\x02\xb4\xb3\xf2\xa2\ +\xd6\xec\xad\x29\xd5\x89\x56\x22\x29\xdc\x83\xaa\xc9\xcc\xd9\x83\ +\xa8\x44\xc5\x30\x89\xfd\x8a\x14\x86\xc9\x08\xa9\x4e\x57\x5d\x36\ +\x20\x69\x65\xd6\x13\x50\xb5\xa4\xa0\x66\x9c\x8e\xf5\xd0\xfa\xe8\ +\xf0\xd1\x44\xe8\x34\x09\xec\xc7\x9e\x29\x31\x30\x31\x7d\x02\xc2\ +\xb2\x5f\x0b\x62\xda\xe7\xec\x6d\x13\xd4\xdf\x1b\xa8\x08\x13\x7d\ +\x4f\x3c\x1d\xd4\xe1\xec\x65\x38\x6f\x18\xef\xf2\xa3\xcc\x78\xf8\ +\xa6\x94\x58\xaf\xed\x59\xb0\x50\xa8\x85\x81\xa2\xbc\x00\x28\xfc\ +\x7c\x6d\x8c\x93\xb3\xf8\x0a\x31\xf1\x3a\xef\xeb\xf5\x68\x79\x33\ +\xea\xc4\x2f\x6d\xcc\x14\x94\x76\x28\x5c\x87\xb5\xe6\x45\x03\x13\ +\x4f\xcd\x3e\xda\x1d\x81\xd2\x6f\x44\xf4\xab\xb3\xd8\xe0\x1b\xde\ +\xe2\xc8\x2d\x4e\x70\x5d\x80\x5a\x9c\xe8\x29\x89\x8f\xa5\xe7\xb0\ +\x0f\xd6\x4b\x82\x84\x16\x97\x86\x50\x80\x06\x2b\x32\xce\x68\x22\ +\x94\x27\x95\xaa\xad\x89\x4a\x4a\x7e\x19\xd6\x17\x66\xbb\x2c\xbd\ +\x4f\x08\x49\xbc\x17\xa5\x1f\x7d\x1a\xeb\x84\xbe\x17\xb7\xaf\x67\ +\xcf\xe4\xdb\xdb\x09\x67\x06\x19\x05\x2d\xad\xa4\x3a\xbe\x87\x07\ +\xca\x94\x04\xe4\x5d\xee\x93\x1f\x24\xc5\x13\x63\xee\x8d\x15\xb5\ +\xad\x1a\xae\xdb\x91\xbb\xc5\x33\x18\x7c\xab\xf7\x82\x4f\xdf\xfc\ +\x82\xd6\xab\x79\xf2\x32\x0a\xb4\xba\x57\xa6\x6f\x2f\xa8\x70\xf9\ +\x36\x1e\xb5\x03\xfd\xcd\x99\x97\x51\x90\x35\x55\x74\xa9\xd1\xa3\ +\x1a\xa6\x49\x56\x6b\x99\xb0\x9f\x77\x18\xfd\xbe\xde\xfb\xfa\x2e\ +\xb4\x71\x69\xf9\x50\xeb\xe8\x49\x54\x5d\x96\xc4\x91\xd4\xb5\x0e\ +\xc3\x86\xd2\x62\x15\xc9\x1f\x6c\x98\xaf\x4c\xaa\xf8\xa0\xa8\x0b\ +\x4a\x8a\xb8\xfa\x6e\x4c\x75\xa1\x82\x12\x40\xed\x90\xe8\x09\x35\ +\x26\x40\xed\x6e\x78\x5b\xd1\xdd\x3f\x4a\x20\x55\xf3\xa1\xf5\x08\ +\x4c\x0a\xae\xde\xd0\xce\xd9\x84\xf8\x89\xb2\x1e\xb3\x9d\x77\x62\ +\x96\x73\x61\x84\xd4\x3e\x71\xbe\xc9\x24\x9b\x87\x36\x35\xee\xb8\ +\xce\xab\xb7\xf6\x08\x99\x71\x5a\x20\xc5\xae\x5e\x95\x49\xe3\x51\ +\xc8\xa9\xed\xc3\xc7\x61\x26\x43\x4d\x79\xe4\xe5\x73\x4f\xf2\x44\ +\x68\x99\x60\xcd\x54\xa7\x28\x84\x76\x68\x5b\x6d\xce\x18\x6a\x43\ +\x6b\x5a\x15\x6c\x9c\x84\x11\x38\x01\xd6\x0c\xa3\x46\x78\x7b\x8a\ +\xa6\xba\x46\xe9\x54\x19\x05\x54\xf6\x45\xea\x3b\xfd\x56\x84\x57\ +\x06\x5b\xf3\x0b\xc3\x22\xf5\x81\x33\x76\xa1\xde\xdb\xfb\xde\x3c\ +\x36\x4c\xcd\x63\x6c\x99\xe1\x3a\x3e\xbd\xa7\x07\x4a\xa4\x49\x8c\ +\x98\x82\x9a\x32\x05\x2d\x6c\x3e\x0c\x3e\x2d\x7e\x5f\xef\x3c\x13\ +\xc3\xf5\x5b\x50\x21\xa8\x85\xe9\x73\x3a\x25\xa4\xd3\xf8\x7b\x17\ +\xe5\x81\xb0\x4e\xef\xbd\x79\x32\x7d\x4f\x30\xa2\x19\x93\x15\xbc\ +\x77\xa7\x9a\x64\x5a\xf9\x04\xf3\x91\xd7\x61\x90\x16\x2e\x60\x26\ +\xde\x27\xe9\xea\xca\x37\xc6\x8e\x52\xef\xa0\xc0\xc5\xe0\x04\x59\ +\x31\xe3\xba\x4c\x4b\x57\x44\xf7\x6e\x6f\x87\xed\x08\x40\x5a\xdb\ +\x04\xc5\x9f\xd7\x01\xe1\x07\xe1\xe4\x98\xc4\xb0\xbf\x40\xa0\xd7\ +\x86\x09\xe1\xa4\xc5\x9f\x6d\xe8\xc3\xd3\xeb\x6a\xa0\x76\x07\x25\ +\xa0\x68\x65\xa5\x54\x39\x8f\xc0\x99\x61\x02\x69\x89\xc0\xd9\x31\ +\x5e\xd9\x5e\x93\x7d\x42\x58\x0a\xa2\xca\xe2\x72\x25\x40\xab\x7c\ +\x6f\x6b\x7d\x6b\x08\x4a\x9c\xc0\x70\x91\x93\x22\x2d\x60\x9c\x7c\ +\xea\xb1\x4c\x40\x52\x83\x12\x91\x13\x62\xd1\x44\x20\xfa\x5a\x18\ +\xa0\xba\xb6\x4c\x06\xca\x10\xad\x6f\x2a\x79\x16\x66\x17\x2a\xae\ +\x09\x3e\x54\xa5\x14\xd9\x92\x76\x80\x07\x39\xb5\x81\xb3\x8f\x97\ +\x3b\x3d\x13\xcc\x3d\xbf\x52\xdd\x88\xba\x5c\x49\x81\x93\x0d\xc6\ +\xd5\x1b\x51\x85\x57\x72\x4a\x4f\xe0\xd0\xa7\xd1\xd2\xa6\xb9\x40\ +\x2b\xbb\x5b\x96\xed\x27\x0c\x7e\x6e\xad\x28\x07\x25\x90\x53\xd4\ +\x99\x12\x5e\x98\xe3\x3c\xbb\xe3\xe6\x59\xc1\xa1\xa5\xf8\x5e\x34\ +\x7d\x7e\x94\x16\x2f\xa7\x80\x69\xad\xe8\xbc\x13\x2d\x00\x8b\x30\ +\xaf\x34\xd1\x93\x2a\x13\x60\x7a\x5d\x72\xe2\x49\xb3\x57\x0d\x2c\ +\xcc\x54\x81\x32\x3d\x69\x31\x32\x8a\x04\xa9\x1b\x7c\x88\x8d\xb0\ +\x39\x9c\xf0\xf3\xb6\x58\xef\x8f\xaf\xce\x73\xa1\x79\x05\x21\x85\ +\xb7\x87\xbd\xf7\x81\x33\xa6\x09\x9f\x6a\x9a\x20\xab\x97\x53\x8d\ +\xef\xb1\x5b\x02\x5d\x11\xe1\xe1\xa0\xb5\x09\x9c\x09\xa7\x0f\x47\ +\x89\x90\x58\xad\x29\xb5\xb9\xd1\xd4\xee\x43\x15\x62\x39\x67\x63\ +\x87\xd0\x49\x00\xfb\x5a\x83\x37\x53\x28\xda\x02\xa7\xe1\x7f\x66\ +\x37\xa2\x88\x43\xc3\x37\x12\x79\xc0\x89\x5d\xa8\xb8\x7a\x53\x6c\ +\xe8\x13\xf3\x01\x18\x3a\x6f\x63\x92\xee\x3e\xfc\xca\xf0\x3d\x15\ +\x8c\x10\x53\x9f\x23\x73\x1b\x7b\x79\xd5\xb0\xf8\x9a\xd2\x49\xb0\ +\xf6\x85\xf9\xb6\x5e\x6f\x30\x9a\xca\x9d\xa7\xa8\x69\x76\x84\x2a\ +\xe9\x23\x0b\x52\xb9\xcd\x9f\x19\x30\xa0\x51\xa9\xcc\xe6\x1e\x15\ +\x31\x5f\xaf\x4f\x3a\x14\xaa\x33\xf7\x34\xb0\x28\xf1\x9b\x01\x06\ +\x54\xd5\xfc\x19\x4a\x9f\x7e\x12\x5f\xef\x6c\xa8\x60\xb5\xf5\x7a\ +\x07\x53\xa0\x82\x9c\xd0\x7a\x2b\xa2\x78\x29\x35\x37\x86\xfa\xf8\ +\xaa\x5c\x83\x7b\x73\x30\xd4\x2a\xbd\xf8\x78\xe3\x9c\x4a\x13\x3b\ +\x71\xab\x86\xad\xd7\xeb\xb2\xd2\xe2\x0c\x6f\x77\xd2\x16\xa3\x83\ +\xf7\xe9\xc6\x2f\xd3\xc1\x13\xb0\x9f\x51\xf2\x2c\xe0\x99\x8c\x88\ +\xaa\x69\xd2\xa9\x58\x35\xed\x88\x82\x18\xc2\x67\xa8\x92\x77\xf9\ +\x62\x9e\x2a\x30\x1f\x8c\x17\xb4\x5b\x37\x73\x39\x7c\xdc\x14\x52\ +\x41\x29\xd3\x46\xa4\xc6\x3d\x41\xe5\xe7\xd5\xeb\xbd\xd6\xbb\x1a\ +\x23\x7c\x3d\xf4\x09\x04\x55\xaa\x1e\xe5\x12\xee\x63\xa3\x66\x36\ +\x0f\xfe\x93\x26\x06\xec\xa8\x2c\xf4\xc0\xd8\xbb\x7a\xbd\x7e\x43\ +\x8f\x90\x18\xf7\xad\xc3\xde\x85\xc2\xd1\xaf\xa2\x8e\xe1\xe5\x09\ +\xf6\xa2\x4e\x4a\x4d\x1c\x0a\x3b\x2a\x4f\x93\xf5\x7d\x5f\xaf\xc7\ +\x00\x54\xb0\xde\x36\x68\xf9\x34\x09\x9c\x68\x1a\x3b\x4b\xae\x5a\ +\x1e\x29\x4c\x94\xeb\x95\xb0\x96\x9a\xb0\xa3\x8a\xd6\x0c\x5f\xaf\ +\x87\x4a\x81\xef\xfa\xb6\x5a\x2f\x45\x11\xbb\x15\x81\xce\xc7\x5e\ +\x83\x83\x13\x77\x63\x41\x51\xc0\xe2\x5b\xb4\x33\x3b\xaa\x7a\x54\ +\xfa\xf3\xf5\x88\x9f\x00\xd2\x15\x1a\x7c\xd1\xd6\x88\xa7\x2e\x02\ +\x75\x2b\xf5\xee\x3c\x96\x2b\x44\x28\x94\x4d\x8f\x5a\x01\x80\x6c\ +\xaa\x36\x01\x6b\xbb\x5e\xef\x93\x8e\x0c\xd5\xda\x52\x5f\x15\x01\ +\xeb\x19\xe9\xef\x92\x71\xaa\x2c\xeb\x51\x5f\x2e\x9c\x8c\xf2\x5b\ +\x9f\xba\xfb\x7c\x3d\xcc\x93\x13\x52\xa0\xf5\x9e\xc9\xe0\x6c\x7b\ +\x7a\x3a\x3d\x31\x46\xf3\x8b\xb4\x8e\x42\x46\x7d\xcc\xac\x3f\x7d\ +\xe9\x30\x81\xb3\xa2\xf5\x5e\x49\x81\x9a\xcc\x38\xf6\x4c\x6d\xa4\ +\x02\x35\x7f\x77\x6c\xa3\x9f\x36\x1b\x75\x78\xf8\x44\x1e\x10\x9b\ +\x94\x8e\x2b\x36\xb5\xc2\xe6\xc4\xd9\xd0\xee\x4e\x32\x5b\xb2\x85\ +\x69\xd2\x68\xf4\x14\x11\x52\x82\x08\x9c\x85\xfa\x28\x0b\x18\xa7\ +\xab\xe3\x8b\xbf\x91\x26\xd1\x0f\xd4\xeb\x15\xa7\x05\xeb\xec\xa8\ +\xdf\x33\xf9\xf8\xf9\x28\x9f\xf3\x4b\xcd\x29\x56\xdf\x9e\x93\xb2\ +\xb3\x47\x4b\x11\x74\xde\xd7\x43\x50\xaf\x57\xbd\x07\xeb\xe7\x1f\ +\xb7\xf4\xca\x84\x6b\x3f\xf2\xad\x69\x46\x5d\xad\xe3\x8c\x71\x42\ +\x4c\x39\x90\x2a\x3a\x7a\x9e\x12\x6c\x46\x6b\x7f\xf3\x0b\xaa\xe0\ +\x1a\x45\x81\x98\x4d\x29\xed\xcc\x38\x2b\xf3\x53\x03\x97\x99\x9f\ +\xfd\x5f\x6c\xb6\x9f\x10\xc2\xd4\xb0\x5e\xea\xf5\x5e\x52\xa5\xa3\ +\x40\x45\xc0\x2a\xfe\x90\xa6\xb6\x64\x3a\xd6\x03\x9f\x0f\x4a\x8c\ +\xb1\x87\x19\x15\xda\xd2\xc9\x8b\x07\xa7\x50\xa5\xd4\x68\xbd\xf3\ +\xf5\x4c\x4a\x7e\x9b\xce\x76\xc8\x69\xbf\xa1\xee\x5c\x1d\x01\x4a\ +\xb4\x3c\x7a\x3b\xea\x92\xe3\x30\xa3\xf9\xe5\x7c\x26\xf2\xf0\x22\ +\x36\x76\x50\xa6\x00\x95\x24\xc0\xb4\x91\x41\x04\x5c\x46\x47\xcd\ +\x28\x32\xb9\x3e\x6a\x06\xeb\x8d\x07\xa5\xed\x32\x50\xfa\xfb\x89\ +\x8e\xca\x59\x0c\x75\xf6\x50\x78\x28\x7b\x6a\x23\x67\x95\x50\x18\ +\x51\xb7\xb7\x77\xbe\xde\x27\x72\x7d\xff\x68\xd5\xd0\xfa\xd4\x15\ +\x1c\xbe\xaa\x3d\xe2\x83\x34\x85\xc6\x23\x5f\x42\x20\x4d\xe0\x0c\ +\x88\xde\xdd\x0f\x55\x93\x6c\xae\x84\x96\x95\x4e\x4c\xb1\x20\x1e\ +\xad\x2c\xeb\x61\x47\x53\x39\xcf\xff\xaa\x09\xb4\xbe\x48\x29\x7a\ +\x72\x22\x0a\xad\x47\xd5\x0e\x2e\x14\x04\x35\xe6\xb3\xef\xe2\x7b\ +\x20\xf5\xc5\x06\xe7\x42\x53\x28\xd3\x2f\xdc\xbc\x97\x0e\x32\x0d\ +\x44\xeb\xc9\x34\xa5\x85\xb4\x91\x5a\xde\x9b\xbd\x28\x40\x22\x24\ +\x21\xa4\x90\x50\xef\xeb\x51\x17\x69\x83\x85\x8c\x0e\x5c\x86\x8c\ +\x66\x96\x6d\x14\x77\xcf\x8c\xe7\x08\xaf\x19\xe5\xa5\xa6\xb1\x00\ +\xed\x83\xbc\xd2\x34\x46\x94\xe5\x13\xf5\x7a\x97\x26\x01\x46\x13\ +\x38\x07\xde\xd3\xec\xa8\x2e\x0b\xde\x37\x50\x53\x36\xeb\x92\x20\ +\x55\x8d\xc2\x40\xec\x6c\xfc\xbc\xa3\x28\x2a\x4c\x88\xa0\xbd\x42\ +\x79\xc5\xef\x59\x80\x88\x98\x91\xc7\xcb\xfe\x84\x8f\xb5\x89\xd6\ +\x4b\x69\x59\xf5\x08\x68\x6b\xa3\x51\xdd\xf7\x3d\x59\x5f\x6a\x82\ +\x7b\x73\x08\x83\x5e\x6e\x73\xd7\x41\x53\x64\xf3\x32\x71\xf7\x47\ +\xaa\x54\x98\xcf\xda\xd4\x11\xdc\xd7\xa8\x81\x32\x4c\x9f\xcb\xe3\ +\x60\xc4\x86\x79\xbe\x6c\xdb\x7d\x65\xa2\x2b\x88\x65\xd4\xa7\xa1\ +\x89\xfc\x0c\x31\x29\xc1\x94\x5a\x53\xe7\x26\x34\x61\x8a\x92\xeb\ +\x94\xc9\x87\x06\x90\x17\x23\xa0\x8a\x54\x13\x26\x18\xf3\x4f\x8b\ +\xf4\xda\x7d\x64\xa9\x1c\x0a\xd6\xd6\xac\x38\x1f\x8d\x31\x29\x1b\ +\x28\x34\xe7\xf1\xbb\xb0\x4a\xaf\x31\x09\xa7\x74\xf4\xe4\x8d\xbd\ +\x4c\x09\x38\x09\xa9\x93\x4e\xab\x4f\xbe\xba\xec\xbb\x4a\x22\x55\ +\x09\xea\x29\x10\x52\x51\x77\x5a\x0d\x45\x7d\x17\x21\x2f\x35\x3d\ +\x2e\xca\xc7\xdd\x9e\x3f\x37\x1e\x85\x1d\x95\x27\x45\x2d\x14\x11\ +\x3e\x01\x25\x21\x5d\xff\xa6\x43\x24\x9e\xa6\x74\x8b\x74\x6e\x22\ +\x13\x45\x31\xbf\xc1\x23\x6c\x66\x25\xc6\x03\xa1\x8b\x47\x3d\x45\ +\xad\x12\xc1\x96\x32\x52\x3d\x4d\xf9\x21\xa9\xdc\x35\xda\x88\x5c\ +\xed\xce\x10\x14\x22\x6a\xb7\x4c\x48\x96\x00\x28\xaf\x2e\x1e\x45\ +\x83\x56\x77\x87\x0e\x4f\x69\x7e\x79\xa3\x00\xbd\x6d\x14\x94\xc9\ +\xd2\xb3\x9c\x53\xb0\xef\xa2\x28\x94\xca\x44\x24\xa6\x82\x03\x7c\ +\x00\x69\x1b\xb4\xa0\xf6\x30\xf6\xaa\x51\x7a\xb0\x72\xf5\x04\xc5\ +\x30\x6f\x9e\x92\x04\x38\xf9\xa3\x2d\xa1\x0c\x0a\xde\xc9\x27\xf0\ +\x5d\x3c\x3a\xaf\x5e\xcf\x4c\xf7\x1d\x10\xff\x16\xcf\x3c\xec\xdb\ +\x33\x2e\xb4\xd8\x10\xde\x04\xd5\x53\x15\x22\x0a\x9d\xf7\xea\xa4\ +\x67\xeb\xbd\x71\xf2\xf1\x28\x6e\xd0\xf2\xd9\xbc\xf8\x12\xdd\x17\ +\xb0\xff\x7a\xe2\xbe\xc9\x38\x2b\x1a\x09\x7c\xa3\x4c\x2d\x5d\x42\ +\xfc\xe4\xa2\x7c\x98\xa7\x2e\xcd\xf7\xf1\x28\x28\xda\x1d\x39\xbb\ +\xb6\x27\x71\xf5\xf3\x65\x14\x05\x46\x5d\x69\x76\x75\x11\xce\x2d\ +\x88\xcd\x8f\x47\x73\x9b\x24\x4b\x79\xb5\x5a\x8f\x41\x04\x85\x81\ +\xf2\xaa\x64\x3c\x3d\x6f\xef\xc0\xfd\x21\xd2\x63\x50\x7b\x9f\x27\ +\xf1\xe4\x5c\x21\x11\xbe\xdf\xd0\xe3\x2e\x1d\x53\x06\x67\x8a\xa2\ +\x5e\xef\x7b\x89\xd0\x55\x22\x37\x0e\x03\x25\x16\x93\xc9\xe3\xcf\ +\x9f\x1f\x8f\x56\xad\xb3\x22\xec\xde\x19\xaf\xf8\xfa\xcc\x92\x14\ +\x62\x5a\xd2\x3f\xac\xaf\xa7\xc9\x42\x0a\x82\xf2\x00\xcb\x91\x23\ +\xa3\xb0\xcf\x5f\xf7\xe4\xc2\x51\xc9\x94\x54\xd6\x3c\x19\xbe\x9b\ +\x7e\x5c\x8a\xf2\x05\xa9\xab\x82\xab\x07\xc5\xa1\x16\x1c\x08\xae\ +\x51\xaf\xf7\xbe\xde\xb0\x7f\x7e\x3c\xea\x7b\x4a\xe0\xef\x6d\x0b\ +\x21\x6a\xf5\xb6\x5e\x6f\xbb\x20\xa0\x4e\xa5\x3f\x66\xad\x12\x0a\ +\xe6\xfb\x02\x23\xae\x4b\xf5\x09\x08\xb7\xfd\x24\xe9\x0c\xd3\x75\ +\xe2\xf3\x52\xb8\xbe\x3c\xc8\xa7\x46\x4f\xa2\xf5\xf3\xce\xd7\x1b\ +\x5f\xef\xfb\xf0\x01\xd2\x1a\x7c\x0c\xa8\xbc\x70\xbf\x68\x5f\x97\ +\x09\x19\xa5\xd5\x94\xc1\x21\x9d\xb8\xdf\xd1\x07\x4e\xfa\x78\xee\ +\x83\xf7\x18\xae\xc7\x19\x03\x38\xa1\xf5\x2c\x9f\xa6\x5e\x5f\xf2\ +\xe2\x8f\x36\x98\x0c\xa9\x73\xf5\x4a\xd5\x46\x82\x5c\x41\x02\x63\ +\x2b\x93\xcb\x05\xb1\xbc\x4d\x50\x6c\xee\xe4\x4a\x9d\x22\x33\xf7\ +\x7a\x02\x61\xd1\x2a\xd7\x1b\x6f\xef\x60\x12\xb3\x91\x23\x0d\x08\ +\x69\xb1\x66\xc9\xd7\x99\x7c\x75\x19\x9a\xc4\x0b\x43\xe4\x29\x8f\ +\xb2\x5e\x2a\x77\xae\x57\xc3\xd5\xeb\x25\xd2\xc3\xd0\x3e\x6c\x36\ +\x4e\xf1\xed\x38\xff\xc1\xd3\xaf\xb0\x06\x0a\xf5\x7a\x0c\x25\x24\ +\x7d\xc4\x2f\x08\x29\x8b\xa8\xd6\x99\x8c\xd6\xab\x12\xb9\x7a\x7d\ +\xc0\x6d\xf8\x8e\x32\xb8\x37\x50\x42\xce\x4f\xd3\x65\x27\x65\xd7\ +\x35\xf3\xe1\xb1\x15\xb1\x2c\x6b\xb5\x12\x21\x8d\xab\x75\x26\x5f\ +\x0f\xa3\xc5\xd5\xeb\xad\x74\x9a\xd4\x38\x28\xab\xb4\xa4\x37\x5d\ +\xb7\xf8\x83\xdc\xd0\xd4\xd6\xeb\x81\x15\xdd\x59\x7a\x9c\xa9\xc8\ +\x54\xe9\x71\x62\xc4\xf6\x95\xf0\x9d\x54\x73\xeb\xf5\xc0\x8b\xd4\ +\xb8\xc2\xb4\x29\xb2\x2b\x22\xd0\x6f\xde\xa5\xfa\xb4\xc2\x9b\x27\ +\x98\x52\x65\x3d\x88\x9a\x05\x94\x71\xe2\x46\xf4\xce\xb6\xcc\xba\ +\x95\x22\x87\x84\x22\x26\x51\x8a\x12\x68\x6f\xf0\xf9\x3a\xbd\x0b\ +\xc6\x1d\xbe\xde\x3a\x26\x46\x8a\x03\x8c\xe4\xef\x35\x35\xae\x51\ +\xb3\xf6\xe1\x03\x66\x82\xb7\xf8\xfb\xda\x79\x26\x01\xaa\x77\xcc\ +\xf3\xe3\x62\xbd\x15\xbd\x63\xc7\xf7\x8f\xef\x72\x7d\x4f\x83\xf9\ +\xfd\x8e\xb8\x7e\x14\xca\xc4\x24\x45\x1f\xbe\xad\x82\xf2\xca\xb9\ +\x71\xa7\xef\xa8\x86\x09\xd2\x8b\x77\x7d\xbe\x79\x2d\xba\xd6\xc1\ +\x93\x2a\xed\xab\x31\x85\xd6\x0f\x9a\xea\x94\x32\x31\xf5\x95\xb5\ +\xc2\xe6\xd4\xee\x42\x11\x94\x80\x9a\x6a\x4b\x6b\xb9\xac\x02\x37\ +\x95\x08\xb3\x59\x3e\x77\x07\x90\xf1\x62\xc5\x63\xa3\xbe\x6f\xc3\ +\x1f\x76\x27\x20\xaa\xbc\xeb\x70\x83\xdc\x9a\x07\x92\x82\xa2\x08\ +\x9e\x3b\x2b\x22\x04\x51\x6f\xd6\xf0\x09\x88\x7e\x5c\xae\xdd\xac\ +\xa7\xce\xc7\x96\xf1\xba\x0d\xb9\xf8\xf6\xe7\xaf\x48\x6c\x4f\x89\ +\x17\xd0\x94\x4f\x04\xd3\x84\x3a\xb1\x8c\x0a\xc0\x02\x6a\xef\xa0\ +\xea\x20\x88\xae\xbf\x9d\xd8\xdf\xb8\x3c\x6f\xbf\x9e\x1a\x00\x21\ +\x2f\x3e\x87\x2f\xb8\x1b\x1b\x17\x8a\x2c\x2e\x86\x22\x05\x48\x90\ +\x54\x6e\x56\x80\xde\xe3\xa0\x90\x9e\x69\x00\xd2\x12\xc4\x44\x16\ +\x3f\x08\xe5\xab\x01\xf4\x78\xde\xb7\x61\xf3\x3f\xf6\x74\x3c\x96\ +\xb4\x33\x25\x95\xcb\x37\x66\x34\x5a\x91\x73\x01\x8a\x3a\x98\x6a\ +\xec\x81\x12\xc2\x59\x8b\x95\x47\x7f\xc1\xc5\x04\xe4\x9e\x1e\x09\ +\xa9\xb9\x76\x78\xe5\xb9\x20\xf6\x75\xb9\xeb\x1a\x77\x22\xca\x12\ +\x8a\xab\xb1\x0b\x5a\x94\xa2\xa6\x0f\xdf\x79\x7b\x60\x25\x6d\x52\ +\xa8\xa0\x68\x18\xd7\x7e\xe0\xc0\x8e\xa7\x27\x94\xca\x5e\x34\xac\ +\x5f\xb9\x04\xa0\x0f\x8e\xda\x14\x35\x26\x1f\xe7\x99\xb0\x1b\xa1\ +\xa0\xb4\x68\xe6\xc6\xad\x80\xa6\xba\xa9\xaf\xe5\xd6\x61\x04\xce\ +\xfe\xa2\x92\x3e\x3d\xf1\x26\xc2\x2f\xd1\xed\x86\x14\x97\x20\x70\ +\x5e\x17\xad\xfd\xea\x0b\x28\xd3\x89\xeb\x47\xdd\xbe\x1e\x09\x1d\ +\xc6\xcc\x8c\x27\xa7\x94\x15\x85\x6d\x1b\x86\x73\xc2\x10\xb8\x12\ +\x94\xbc\xf8\x22\x45\x7a\x48\x8e\x0a\x4e\x89\xee\xde\x4b\x42\x9a\ +\x5a\x9d\xff\xad\xb3\xef\x7d\x7c\xb1\xba\x90\x85\x74\x61\x06\x15\ +\xcd\x2f\x66\xe0\xcc\x65\x26\x38\xc5\x7f\x4a\x49\xa4\x2c\x70\xaa\ +\x0d\x5c\x97\x6c\x33\x53\xf4\x9d\xab\x82\x9d\xfc\xfe\xd8\x18\xfd\ +\xbe\x50\x54\x0d\x3e\xdd\xbc\x35\x6a\x02\xd5\xe7\xe3\x54\x7d\x4f\ +\xe7\xc9\xa8\xed\x7e\xd0\x02\x8e\x70\x3e\x43\xdc\x2c\xb5\x26\x37\ +\x12\x5e\x03\xce\xeb\xf5\x02\x60\x44\xf9\x52\x65\x8a\x00\x13\xf1\ +\xa0\xeb\x70\xd1\x3c\x33\x1e\xc9\x51\x08\xa9\x95\x51\x8b\x35\x55\ +\x17\x0a\x19\x15\xa5\xb7\x94\x94\xd4\x38\x30\xd6\xba\x0d\x79\x54\ +\x80\xbe\x2f\x67\x98\x8a\x93\x40\x92\x52\x45\xdf\xf9\xef\x6a\x49\ +\xa1\xf9\xfc\x5b\x58\x78\x4f\x00\xfa\xcc\xd4\x50\xd4\x85\xf8\x80\ +\x2b\xa9\xf1\x82\x63\x67\x68\x3f\xf6\xf5\xce\xda\xcb\x66\xf9\x1b\ +\x02\x74\xf5\x68\x16\x94\xf4\x31\xd5\xdb\x7f\x1c\x42\x6a\xfb\x9b\ +\x17\x16\x4e\x87\x25\xc5\x76\x79\x00\x90\xe8\x28\x41\x12\x42\x29\ +\x4a\x53\x8c\x13\x81\xe5\x37\x46\x8d\x2a\xe3\x4b\x5f\x96\xeb\x63\ +\x26\x33\x65\x7a\x89\xb0\x69\x88\x47\xbc\x37\x42\xaa\x50\x99\xa2\ +\x1f\x84\x90\xce\xef\x29\x81\x94\x42\xeb\xd5\x90\xc6\x51\x32\xe0\ +\x8e\xa3\x6c\x38\x24\xb2\xa6\x1a\x7f\x80\xac\x4f\x14\xd2\x7f\xfa\ +\xc6\x33\x3f\x0b\xdf\x6f\x58\xda\xdd\xd7\xab\x20\x58\x9b\x3e\x45\ +\xb7\x1b\x5a\x65\x62\x8a\x92\x90\x3e\x31\x32\x5b\x91\xaa\x6a\xb3\ +\xdd\x1c\x6a\xa1\xa7\x60\x88\x92\x79\x40\x25\xd4\xed\x96\x25\x1e\ +\x89\x9f\x74\x7d\xf2\x8e\x2c\xf9\xab\xc6\x85\x8a\xbf\xa3\xd1\x28\ +\x9f\x0c\xfc\x12\x0b\xa9\x6f\xd6\x58\x58\xf9\x69\xb6\xa4\x6f\xf9\ +\x44\x88\x5f\x36\x0f\x29\x70\xf6\xaa\x84\xba\xc8\xcc\x3e\x21\x3d\ +\x6a\x4e\x89\xb5\x46\xd3\xd5\x27\x7d\xaa\xf4\xef\xb4\xf7\x15\x1e\ +\x13\xef\xc4\x3d\xd9\x6c\x49\x33\x90\x13\x8d\xae\x24\xa4\x5f\x57\ +\x51\xaf\x11\xe1\x9b\xae\x71\x34\x37\x67\x7a\xc5\xbc\xf0\x9e\x21\ +\x16\x90\x4d\xc0\xd5\xea\x72\xad\x5e\x34\x32\xf6\x82\x63\x3d\x3b\ +\x5e\x5e\x0a\x49\xfb\x43\x15\xd2\x9d\x4d\xe9\x8c\x6c\x0f\x60\xdf\ +\x12\x76\x4e\x18\xd7\x8c\x7b\xa8\x82\x3b\x6b\x2f\x66\x94\x70\x66\ +\xda\xa3\xa3\x77\xe9\xe8\xde\xbe\x9d\xd2\x61\xaf\xc4\x40\x77\x01\ +\xde\x86\xb5\x5b\x0e\xdf\x76\x06\x7d\x1e\x29\x84\xf5\x11\xf0\xa7\ +\xc8\x92\xc2\xd9\xd3\xa5\xae\x1f\xfc\x52\xeb\xb2\xf2\x53\xf7\x8c\ +\x18\xa8\xab\x34\xb5\x94\x09\x96\x09\x59\x3c\x6c\xf2\x8c\xbd\xaf\ +\xd3\xf2\xca\x55\xbb\x98\xa4\x9f\x57\x98\xab\x1f\x5b\xae\xb2\x32\ +\xe1\xab\xaf\x36\x8d\x59\xfb\x89\xaa\x46\x48\xf9\x3a\xdf\x3f\xff\ +\x82\x45\x79\xd5\x35\x57\x4f\x46\xc3\xee\x7a\x3d\xc3\x74\xa9\xf1\ +\xc2\x16\x43\x8d\xd6\x27\xfc\xf9\x4e\xbe\x75\x7e\x42\x57\xd1\xad\ +\x11\x9c\x47\xa6\x03\xb1\xa4\xef\xa6\xfb\x0e\x23\x49\xc5\x94\xbe\ +\x28\x96\x14\xe5\x9b\x68\xea\x01\x72\xef\xcd\xfb\x17\x2b\x57\xaf\ +\x77\xd6\xd4\x50\x94\x7d\xbd\x3f\x2d\x80\x91\x28\xb2\xde\xe7\x52\ +\x0a\x48\x99\x83\x67\x4e\x73\xf6\xf3\x72\x01\xfe\xbe\x51\x40\x28\ +\x82\xba\x40\x0a\xb6\x33\xec\xf3\x6e\xff\xc6\xe6\x73\x57\x46\x8a\ +\x5e\x31\x03\x79\x78\xff\x64\x67\x3a\xa4\x5b\x3d\xb5\x5e\x3f\x98\ +\xd3\x98\xe9\x8b\x0d\xa0\x66\x13\xf0\x9a\x47\x9e\x8b\xaf\xa5\xc6\ +\x5f\xbd\x08\x40\x45\x48\xf7\xdc\x8f\xb0\xe4\x3f\x63\x27\xcd\x34\ +\xc1\x1f\xe6\x22\x2b\x74\x40\x64\xf2\xfd\x91\xa2\xdb\x9e\x21\x4a\ +\x3e\x35\xe1\xbd\xe8\xfc\xde\xbc\x14\x40\xfd\x5e\x44\x3b\xc9\x70\ +\xc1\x5f\x51\x5e\xfb\xdb\xc1\x50\xbe\x90\x07\xa0\x2f\x2a\xd0\xf5\ +\x13\xa2\x28\xfd\xfb\x8e\x69\x8a\xd8\xe9\x1c\x8a\x54\x88\xf7\x71\ +\x0e\x87\x46\xb9\xb7\xe4\x24\x01\x1b\xc7\xe3\x9d\x01\xa4\xbf\x93\ +\x0c\x01\x54\x96\x81\xf9\x0c\xd5\x6e\xec\x0b\x45\x89\x1b\xfe\x96\ +\x5e\xc5\xd0\xc6\x01\x68\x11\x0a\xe6\x37\xed\x23\x21\xe5\xdd\x1d\ +\x79\xd1\x29\xc2\x3c\xde\xd6\x3d\x95\xf6\x69\xbc\x77\x57\x4b\xbb\ +\x4f\x56\x6c\x43\x17\x16\x16\x3a\xb6\xcb\xce\x3a\x29\x35\xe9\x87\ +\xe4\x78\x21\x50\x2d\xd2\x8b\xf4\x0a\xdf\x65\x2e\xe0\x8f\x47\x3f\ +\xa5\x7b\x37\x33\x4a\x91\xac\xa3\xbe\x99\x1a\xcd\x2f\x44\xc0\x49\ +\x04\xfa\x4b\x86\x96\x91\xf2\x6b\x9f\x9e\x24\xac\xf9\x61\xf8\x23\ +\xc1\xb8\xa0\x86\x67\x6a\xf4\xa9\xb5\x05\x65\x98\x87\xce\x7b\xf8\ +\x8d\x17\xde\x59\x16\xf1\x57\x28\x35\x7e\x31\xe3\x10\x8f\x75\x7d\ +\x4b\x55\xce\x84\xf4\x5e\xec\x98\x77\x13\xf1\x97\x4b\x71\xf3\x00\ +\x79\xe6\x2b\xa3\x4c\xaa\xd1\x0f\xc3\xa5\xc6\x5d\x1f\xbe\xad\x2e\ +\x2b\xef\x81\x76\xeb\x23\xeb\xe4\x7e\xe1\xed\x11\x6b\x7a\x6b\xa0\ +\x26\xdd\x7a\xfe\x45\x89\x4a\x6a\x2a\x98\x8f\xeb\x44\x2d\xe9\x86\ +\x91\x6e\x98\x78\x9f\x7c\x7c\x1c\x4d\x93\x01\x39\x1e\x15\x62\xf4\ +\xc9\x37\x85\xa5\x41\xcd\x6d\xb8\x55\xc3\x67\xf0\x81\x35\xb3\x3a\ +\x7f\xb4\x79\x39\xf7\x1f\x93\x00\x7c\x72\x72\x30\xc2\x59\xd4\x90\ +\x74\xbb\x58\x52\x15\xd2\xde\xde\x52\x02\x3d\xe6\xf6\xf2\x20\x9a\ +\xfb\x25\x92\xdf\xb3\x5e\xf9\xf4\xe2\x28\x4d\x9a\x95\xf0\x05\xa2\ +\x28\x80\x76\xfe\xa5\x16\x45\x87\x56\x57\x18\xa8\x43\xcf\x6e\x3f\ +\xf5\xe8\xf9\x56\xae\x6e\xe1\x0d\xc9\x76\x12\xd2\x22\x29\xf1\x37\ +\x30\xee\x4d\x69\xaf\x2c\x77\x2f\x3e\xbb\x3b\x79\xe9\xf5\xbb\x58\ +\xed\x0e\x4c\x6b\x32\xa1\xef\xbd\xee\x7d\x8f\x8f\x03\xc8\x7e\x03\ +\x25\xc2\x3c\x73\x3b\x72\xcb\x3c\xf9\xed\x08\x28\x7a\xe9\x39\x07\ +\x89\x36\x7a\x43\xa5\xbe\x1f\xcc\x23\xd2\x25\xd6\x1f\xa9\x37\xec\ +\x66\x4b\x1a\x63\xbd\xf2\x0f\x7b\xed\xb1\x77\x5a\x69\xd7\x63\x42\ +\xfe\xa9\xe3\x7c\x58\x97\xd6\x9b\xba\x9d\x6f\x77\xe3\x94\x5e\xba\ +\xf1\xd4\x1e\xc6\xc1\xb5\x0f\x4c\x26\x5f\xbc\x7a\x1f\x01\x78\x20\ +\x02\x7d\x8e\xf5\x47\xa3\x92\x18\x7f\xbe\x6d\x91\x0c\xd4\xb5\xee\ +\x5a\xf0\xe9\x4e\x89\xf4\x13\x7f\x09\x25\x8e\xb4\xb8\x23\x03\xdd\ +\x27\x1b\x04\x24\x3c\xd3\xd1\x1e\xc6\xda\xe9\x62\x45\x96\xff\x3b\ +\x14\x84\x57\x51\xf7\x4f\xe5\x4b\xfb\x19\x29\x01\xed\x2d\x07\x98\ +\x6f\x45\x92\x49\x18\xb1\x76\x3a\x22\x9c\x0c\x4f\x36\x79\x18\x9d\ +\x17\x7d\x6d\x73\x49\x32\x75\xa0\xfa\x03\xd2\xcb\xaf\x82\xf7\x98\ +\x56\x85\x8c\xcd\xe4\x20\x23\x49\x29\xd8\x98\xca\x95\x44\xec\x38\ +\xd7\x2e\x5d\x5f\x2b\xbe\x7b\x64\x03\x75\xe3\xf2\x38\x27\x98\x26\ +\x87\xcf\x13\x52\x1a\x9e\x28\xa2\xc0\x89\x5a\xa8\x27\xaa\xd8\x7b\ +\x68\xd2\x6b\xf7\xae\xed\xb1\x9f\xa9\x52\x35\xf7\x67\x53\xff\x73\ +\xa5\x42\x7a\x2f\x97\x1c\xbe\x35\x13\x91\xf7\xeb\xd7\xf4\xae\xab\ +\x0f\x1c\x3e\xb1\x67\x3a\x2a\x24\x05\x81\x3f\x19\x4b\x20\x5d\xd9\ +\x76\x41\x4a\x62\xe6\x08\x46\x3b\xc2\x47\xb1\xde\xdc\x04\x50\x55\ +\x2f\xe3\x90\x2d\x55\xaf\x54\x5c\x44\x94\x1b\x15\x22\xa4\x1b\x76\ +\x96\x65\x91\x2c\x35\xd2\x71\x8f\x12\x1d\x57\xef\x58\x4e\x93\xb2\ +\xa8\x93\xa1\xfa\x27\xa1\x28\x85\x7a\x40\xea\xae\xcb\xc4\x30\x32\ +\xea\xcf\xdf\xcc\xcc\xd3\x56\x7a\x13\x7f\x77\x8c\xe0\x41\x4b\x02\ +\x1a\xed\x67\x41\xc2\xb8\xfe\xd9\x6b\x4f\xf9\xfd\x1e\xc6\x43\x77\ +\x2d\x6d\xd9\xf1\xd4\xe2\x28\xab\x4d\x52\x87\x86\xb4\xe9\xe8\x03\ +\x90\xdd\x2d\x5a\xdb\xa8\x55\xa3\xb3\xd4\x94\x3a\x83\xbf\xc4\x40\ +\xc9\x8f\x12\x45\xdf\x4c\x7f\xa5\x61\x1c\x85\xf4\x0f\x7a\x4d\xb3\ +\xb0\x85\x60\x7f\x66\x39\x5d\x13\x34\xad\x91\xcb\xa3\x85\x07\x71\ +\xde\xd7\x96\x2d\x3e\x6b\x47\xfd\x31\x5b\x98\x28\x13\x3e\x1d\x22\ +\x2d\x07\x45\x0b\xf2\xa5\x8f\x8d\xc8\xe6\x93\x62\xa9\xdb\x3f\xb9\ +\x2e\xb0\x7b\x71\x27\xe7\x1c\xeb\xda\x24\xf3\x84\xaa\x8d\x7b\x7f\ +\xfa\x8e\xf3\xb0\x4d\xa0\x68\x17\xe7\x81\xd3\x8c\x92\xd3\x5e\x7a\ +\xdf\x74\x4a\x0e\xf1\xe5\x93\xbc\x8c\xe3\xf2\x7f\x11\x94\x74\x8d\ +\x7e\x52\xe5\xd2\x9d\x87\xb6\xb7\xa1\xb9\xd1\x95\x81\x26\x5d\x7f\ +\x6b\x1d\x34\xf5\xf5\x7a\x4f\x54\xa8\x15\x00\xf3\x7e\xe8\x4f\xf9\ +\x4f\x06\xde\xc9\x34\x3c\x31\x2e\x65\x7c\x98\x3c\xc0\x1d\x87\x27\ +\x93\x4c\xfe\x2c\xbc\x1f\x80\xe9\xee\x7d\x41\x46\xcf\x1d\x0c\x5d\ +\xe1\x32\xce\x2e\x22\xb1\x64\x7d\x56\xac\xe2\xae\xa5\x03\xba\x13\ +\x7e\x62\x5c\x61\xcf\x34\xf8\xe8\xc9\xc5\xc9\x28\xd3\xb4\xb8\x69\ +\x72\x16\xe6\xa3\x67\x1c\x50\x9d\xc1\x9f\xd3\x91\x5b\xe5\x08\x9e\ +\x53\xdb\xad\x61\x39\x4f\x42\x6a\xc7\x6d\x93\x11\xce\xac\x9b\x14\ +\xbe\xf0\x5d\xd8\x0e\xa8\xee\x26\xc2\xc4\xdd\xe0\x0d\xdf\xe4\xef\ +\xd2\xf1\xe6\x1e\x09\x5d\xa8\x7d\xde\xc6\x79\xcd\x74\x94\xba\x0c\ +\x44\x78\x11\x50\x73\xe5\x30\x14\x5f\xcf\x31\xa1\x29\xd7\x88\xa8\ +\xa7\x27\xfa\x47\x6d\xbd\x5e\xa7\xd7\xa5\x34\xdf\x6e\xe3\x8b\xfb\ +\xa6\x23\x86\x98\xa2\xff\x41\x29\xaa\xcd\x44\xad\x1a\x93\xb0\x1e\ +\xa7\x83\x1c\xeb\x65\xb5\x48\xfd\x91\x60\xa7\x44\x26\x72\xe6\x48\ +\xf3\xe6\x63\xbd\x7b\xee\xd9\xb0\x76\xff\x72\x55\x94\x85\xbb\xe1\ +\x8d\x50\xb2\x8c\x72\xe9\xd6\xda\x51\xd3\x44\x98\x00\xad\x3f\x19\ +\x4a\x0b\x4e\x36\x18\x6a\xba\x14\x04\x04\x15\x96\xf4\x92\x51\x3a\ +\xa0\x3f\xfc\x47\x76\xdf\xe4\xc8\x78\x36\x65\xb4\xf6\x77\x95\xa0\ +\xe3\x4d\x86\x7e\x18\x62\xfa\xb3\x22\xf0\xf4\x96\xf7\xc0\x88\x51\ +\x90\x4b\x1f\x93\x15\xc5\x5d\xe3\xb6\xb6\xac\x09\x52\x1c\xb8\x83\ +\x6f\xb2\x76\x34\xce\x3e\x50\x6a\xe2\x11\x54\xb5\x8d\xae\x1d\xda\ +\x94\x42\x4c\x2d\xda\x22\x5a\xd2\x1b\x26\x05\x0d\x45\x9a\x5a\xa8\ +\x8d\x12\x63\x69\x19\x4f\xab\xc2\x44\xe8\x64\xd8\xef\x49\xe9\x6f\ +\x22\xb4\xe7\x2c\x9d\x6b\x2a\xe3\xf2\x30\x05\xf5\xb9\xa0\x2c\xdd\ +\x1d\xde\x5c\xb8\x53\xb0\xd0\x7a\x7b\x86\x51\x2d\x3d\x90\x7a\x17\ +\xea\xa2\x27\xd0\xd3\xc7\x4f\x5e\x48\x7f\x8f\x42\xe7\x91\xa6\x21\ +\xd0\x58\x80\xa1\x76\x54\x7e\xfe\xcc\x1d\x9a\x72\xfd\x31\x46\x14\ +\x70\xa0\x4f\x5e\xeb\x53\x2c\xc2\x7e\x7f\x41\x0d\x0b\xe9\x9d\xa7\ +\xac\x7a\xb3\xb0\x9e\x50\xda\xcb\x89\x94\xf5\x65\xe7\xa1\x16\x6d\ +\x7e\xe9\xf2\xf5\xf0\x9d\x9e\xa2\xb6\x71\x58\x57\xa5\xa3\xbc\xd1\ +\xab\x83\x24\xf2\xd5\x8c\xd4\x8f\x5a\x86\xf3\xf7\x4d\x3b\xda\x77\ +\x67\x6f\x0c\x5e\x50\xd3\xdc\xde\xee\xf2\xcd\xfc\xe9\x39\x8f\xbc\ +\x62\xdc\xcb\x05\xa0\x4e\xed\x13\x75\xa2\xa0\x64\xd7\x4d\x84\x08\ +\x43\xbd\x25\x75\xd7\xd1\xa1\x23\x97\xa7\x33\xfa\xce\xd9\xaf\x31\ +\x29\xc2\x49\x4b\xeb\x13\xd0\x33\xac\xe8\x1d\xef\xf0\xa0\xb2\xb2\ +\x75\x82\x2a\xf9\x4b\x5f\x86\xad\x30\xaf\x72\x59\x5c\xd5\x7c\x93\ +\x78\x6a\xd0\x73\xdf\xe1\xe5\x9d\x0c\xd4\xf6\xe8\xf8\x6b\x52\x95\ +\xfd\x43\x7b\xe4\x92\x1e\x47\x51\x1f\x35\xc3\xd7\x57\x4e\xe5\x9b\ +\x09\x08\xf3\xb7\xac\xff\x83\x30\x52\xc2\x28\x44\x73\x5e\x46\x71\ +\x54\xdd\x5d\x4a\xe5\x6e\xee\xa7\xe1\x5d\xa8\xe2\xf4\xd7\x7a\xce\ +\x2f\x35\xd8\x9b\x67\x29\xd3\xfc\xec\x1b\xd6\x9f\xb5\x63\x79\x3a\ +\x1e\xa4\xb3\x44\xee\xff\x37\x76\x36\xad\xb6\x1d\x45\x18\xbe\xd1\ +\xab\x6b\x7f\xac\xbd\xd6\x59\xd7\xbb\xb9\xde\x13\x50\x07\x5e\x41\ +\x49\x40\x74\x20\x38\x88\xa0\x01\x11\x27\x89\xa0\x44\xf1\x6b\x92\ +\x20\x19\x29\x82\x1f\x71\x60\x06\x8e\x1c\x38\xf0\x27\x38\x53\x34\ +\x19\x38\x0a\xfe\x80\x8c\xfc\x05\x01\x41\x32\x50\xfc\x15\xe6\x74\ +\xd7\x5e\x4f\x57\xbf\x55\x6b\xdf\x3e\x7b\x9f\x73\x86\x45\x77\x57\ +\x75\x7d\xbd\x6f\x09\xa4\x6d\x70\x16\xa0\x13\xd4\x31\x16\xe8\x2d\ +\x85\x1e\x59\x89\x00\x20\xd0\x42\x9f\x14\xdd\xb0\x4a\xfb\xe0\x41\ +\x15\x92\xd9\x12\x09\x59\x85\x4e\x17\x98\x61\x2c\xe0\xf4\xe5\xe4\ +\x5b\x1b\xda\x4d\xb2\xa6\xbd\xdd\x67\x73\x6c\x47\x91\x92\x9d\xad\ +\x2b\x18\x81\x51\x8f\x5c\xb0\xcb\xa3\x5d\x51\x2b\xd5\x83\x15\xd1\ +\x14\x99\x42\xee\x34\x91\xab\x45\x5b\x28\xfe\xa0\xa1\x3b\xb2\x2a\ +\x99\x8e\x48\x6b\xa2\x29\xf5\x2c\xc4\x3f\xf6\x90\xf6\x72\x2a\x55\ +\x85\xe2\xeb\x63\x92\x1a\x65\xc9\xed\x73\xf8\x5e\xcc\x2a\x9a\x9a\ +\xa6\x5e\xe3\x57\x4c\xd3\x2c\x2a\x05\xda\x4e\xba\x1d\xb9\xa3\x44\ +\xf5\x48\xca\x00\xb9\x75\xba\x21\x62\x0a\x17\x04\xf6\x89\x7b\xca\ +\x66\xfa\x99\x0d\x4c\x42\xe8\xb7\x14\x6e\x0d\x01\xb0\xb2\x9c\xa0\ +\xc2\x96\x39\x56\x08\x86\x69\x92\x37\xa3\x0e\x59\x5f\x3e\x8a\x5b\ +\x07\xd1\x14\xb2\xfe\x84\x2c\x00\x66\x47\xb1\x4f\xf2\xd6\x77\xef\ +\x27\x0d\xe3\x91\x3e\x79\x81\xb9\xa1\x4a\xe6\x4c\x02\x42\x19\x13\ +\xf9\x46\xdc\x8e\x8a\x05\x0f\xcd\x13\x72\x72\xf8\xc4\x76\x81\xcd\ +\x47\xab\xc8\x3c\x39\xfe\xee\x61\x96\xfc\x83\x28\xbc\x8c\x3d\x92\ +\xc2\x88\xea\x13\xd2\x16\x7d\x2f\xa2\x0a\xda\xb2\x01\x09\xc6\x7e\ +\x09\x18\x21\x21\x20\x05\xd5\xa0\x3b\x0a\x5b\x41\xaf\x4d\x7d\x8e\ +\xcc\xda\x85\xa1\x23\xcb\xfc\x3c\x30\x77\xfc\x76\xfe\x68\xc3\x94\ +\x99\xf2\x8f\xaa\xd6\x73\x49\xdd\x35\x45\x5c\xb7\x56\x49\x19\x24\ +\xd5\x8e\xe6\x02\xc2\xca\x93\xaf\x0e\x29\x89\x07\xf5\xf3\xb2\x85\ +\xa0\x27\x54\x1e\x07\x5f\xa9\x9c\x4d\x99\xd8\xd1\x9e\x97\x8a\xa3\ +\x57\x62\x2a\xc0\xe0\x8c\x39\x74\xea\xbe\x49\x94\xaa\x3e\x89\xaf\ +\x84\xea\xcc\x86\x0a\x1c\x30\x5d\x2a\x92\x0e\x1e\x67\x8b\x21\x95\ +\x67\x29\x99\x81\x91\x6f\xe9\x75\x7c\xfd\x8e\xc9\x0d\x32\x4f\x06\ +\xe4\xb2\xea\xfc\x80\xb8\x42\x8c\xcd\x3e\x22\xaa\x52\x92\x09\x3e\ +\x2c\xc7\xd7\x17\x61\x2f\x9b\x79\x10\xde\x61\xb0\xa1\x29\xdf\x93\ +\xba\xa4\x4b\x8b\x15\x22\x60\x42\x4a\xa1\x44\xbf\x8e\xaf\xb7\xec\ +\xbd\x94\x6c\xab\x94\x34\xe4\x06\x31\x13\xa0\xf0\xee\x8a\x22\x2f\ +\x96\x34\xe1\x1f\xe5\xae\x2e\x80\xac\x43\x7c\x3d\x68\x4b\xc9\xe9\ +\x15\x4d\x32\xc3\x1f\x3c\xf5\xe0\xea\x95\xe8\xcb\x65\x9c\xc5\x3a\ +\x21\x2a\x1f\xcc\x53\x8c\xaf\x27\x00\x65\x4b\x57\x64\x35\x58\x11\ +\xe9\x1b\x1f\x1a\xc5\x4f\xa3\x91\x35\x5c\xe2\x9b\xf2\x8f\x7a\xc6\ +\x02\xc4\x54\x30\x63\x67\x9f\x7a\xac\xc8\x18\xa2\x97\xb1\xa3\x91\ +\x2a\xa1\x48\xa2\xf7\x19\xff\x68\x82\xaf\xa7\x81\x30\xec\x80\x30\ +\x5d\x32\xc8\xe5\x31\x47\xad\x23\x35\x0b\x6d\xf2\xa0\x70\x30\x22\ +\xc2\x3f\xba\x85\xaf\xe7\x97\xb3\xa3\x7e\xbe\x80\xe8\x12\xd8\x45\ +\xec\xa8\xc8\x88\x7d\x8a\x9d\x3c\x9f\xd8\xe9\x76\x74\x0b\x5f\x2f\ +\x6c\xd3\x15\xc6\xc6\xfd\x54\x6d\x52\x43\xaa\x53\xa4\x70\xf2\x52\ +\xfe\x51\xdd\xd1\xd8\x3c\x91\x76\x3a\xe8\x6b\x0f\x7f\xbf\x5a\x27\ +\xaf\xee\xd0\xbf\x2c\x28\x3f\x31\xd3\x36\xff\xa8\x32\x68\xdd\x64\ +\xf8\x7a\x35\x4d\x3c\x4f\x0e\xd9\xa0\x7b\x89\xa1\x52\xbd\x07\x13\ +\x1e\xf3\x8f\x2e\x82\x0b\xbd\x8e\xaf\xc7\x6b\xc6\x79\xe2\x5d\xb2\ +\xdf\xba\xb3\x3c\xf6\xa2\xf7\x68\x51\xca\x3f\x9a\x95\x18\x73\x7c\ +\x3d\xaf\x13\xac\xc3\x20\xc1\x81\x30\xf6\xd6\x89\x0f\x82\x32\x1a\ +\x3a\xcf\x95\x64\xfc\xa3\xd7\xf1\xf5\x09\xdb\xb8\x32\x16\x0c\x6e\ +\x47\x11\xd2\xbf\x4d\x20\x6d\x49\x43\x39\x19\x73\xfe\xd1\xd3\x35\ +\x7c\x3d\x0b\x0a\xd2\x11\x0f\x4a\xd5\x1d\xa5\x4f\xea\xb6\xc4\xf6\ +\x3a\xf4\x48\x11\xcc\x78\xf8\x57\xf0\xf5\xe5\x83\xb0\x63\xcb\x3a\ +\xdc\xc9\x29\xa1\x88\xb8\x79\x38\x79\xc2\x46\x17\x33\x3e\x51\x5d\ +\x3e\x65\xf8\xfa\xb0\xcf\xf5\x68\xc2\xa2\x4c\x89\x26\x11\xd6\xcb\ +\x02\x5f\x1f\xb3\x62\x13\xdb\x6b\xda\x31\xc7\xd7\x6b\x52\x07\x5a\ +\x85\xf5\x2b\x03\x8d\x45\xe7\xf5\x61\x6a\xe4\x65\x09\x6d\x3f\x8b\ +\x44\x6e\x88\xaf\x07\x6e\x8b\x88\xf6\x3f\x6c\x99\x6e\x61\x41\x75\ +\xe4\x15\x0a\xa5\x15\x7b\xf6\x14\x9a\x79\xc9\x3d\x6d\xe1\xeb\x19\ +\x84\x50\x17\x47\x0f\x5b\x26\x79\x71\x0d\xf0\x9a\x25\x49\x12\xf4\ +\x09\x31\x91\xb6\x1d\xc2\xb9\x8d\xaf\x4f\xde\xfa\x31\x65\x28\xaa\ +\x82\x21\x6a\x08\x05\xef\x08\x9f\x9e\x8e\x7f\xf4\xf6\x2a\xbe\x3e\ +\x19\x10\x0d\xe7\xb4\x2e\x94\x49\x3d\x7c\x1d\xc1\xfb\x94\xfc\xa3\ +\xd7\xf1\xf5\x88\x39\xd6\x0f\x14\xc9\x86\x1b\x91\xe5\x67\x72\x65\ +\x44\xbe\x5a\x6f\x50\xfe\x51\x84\x4e\xf1\xf5\x07\x18\xb4\x5c\x80\ +\x67\xd2\x9a\x88\xfe\x71\xa2\x1a\xe2\x42\xd1\x60\x63\x79\x9b\xae\ +\xf1\x8f\xe6\x50\x36\x2a\xe0\x46\xa8\x81\xa4\xe8\xfe\x51\xe8\x0a\ +\xe4\x7d\x92\xf8\x0e\x63\xef\x72\xce\xd7\xf8\x47\x29\x31\x26\xf8\ +\x7a\x26\x33\xf9\xa8\xde\xe6\xdc\x31\x4d\x4a\xa7\xd7\x63\xa2\xc2\ +\xe5\xa7\xb4\xd8\x7f\x39\xff\x28\xc1\x1d\x06\x9f\x00\x84\x1d\x45\ +\xd4\x51\x20\xeb\x5e\x48\xd8\x1c\xc5\x8b\x72\x42\xfa\x51\xd6\x29\ +\xff\x68\xee\xe6\xb1\xe0\x24\xdb\xa3\xf5\x58\x53\x62\x26\x2d\x85\ +\xea\x70\xcb\x51\xc3\x7a\xe4\xcc\x38\x72\x23\xfe\xd1\x80\x00\xa2\ +\xda\x51\xdb\x53\x84\x84\x7b\xd2\xb8\x4a\xdc\x08\x56\x2d\x88\xe6\ +\x47\x8f\x42\xd9\x52\xbe\xa7\x04\x82\x71\xea\xb6\x73\xbf\x87\xfb\ +\xe3\xd0\xe7\x75\x72\x98\x50\xfd\x10\x86\x28\x53\x89\x67\xcf\x0a\ +\x1f\xfb\x96\x48\x69\x03\x5f\x7f\x01\xd8\x83\x13\x41\xcc\xe6\xd8\ +\xa3\x34\xd9\x80\xb4\x81\x09\xf5\xe2\xf2\x1b\x09\x95\x7f\x54\xf1\ +\xf5\x6a\xf2\xed\xe8\xfb\xb3\xf7\x13\x9a\xb4\x70\x47\x58\x2f\xe6\ +\xc9\xf4\x28\xa8\xdf\x0c\x79\x63\x26\x51\xa8\x89\x99\xe2\xeb\xf7\ +\xba\x9d\x8c\xba\xd3\x01\xd1\xae\x6c\x0b\xc0\x1a\x74\x3d\xd1\x9d\ +\xbb\x00\xd2\x49\x18\xbc\x4c\x37\x31\xbe\x1e\xa7\x44\xf6\x15\x6a\ +\x4f\x65\x2b\xc0\x77\xa2\x3d\xcb\x67\x9c\x39\xf8\x84\xe1\x2d\xb9\ +\xa3\xf8\x79\x62\xf3\xd9\x52\x3f\x6e\x3b\x87\xaf\x32\x7e\x53\xed\ +\xe8\xdc\xcc\x10\xa3\x6b\x3c\x0d\x45\x58\x4f\x8d\xaf\x97\xe7\xc9\ +\xc4\xcc\x20\xc1\xe5\xeb\x58\xbe\x26\x47\xde\xbf\xb8\xae\x71\xcd\ +\x38\x73\xec\xdb\x06\x1f\x2c\xf8\x7a\xf2\x92\x25\x73\x23\x8d\x8f\ +\x9d\xa4\x45\x46\xb6\xd2\x75\xb6\xb7\xf9\xfb\xb9\x4f\x3c\xf1\x41\ +\x9f\x32\xa7\x64\xa7\xf8\xfa\x4e\x9b\x50\xa6\xf0\x8a\x32\xb1\x85\ +\xc1\x7c\xed\x1d\x75\x53\x06\xe2\x61\x2d\xf6\xc1\xc7\x07\x78\x25\ +\x9e\x53\xd4\xf3\xc4\x8e\x3a\xe6\xbc\x60\x98\xb1\x9a\x51\x74\xa9\ +\x2e\x2c\x68\xc7\x44\x48\x10\x9a\xb0\xb7\xe7\xf8\x7a\x74\x1e\xfb\ +\x24\x05\x1c\xa4\x15\xdf\xc4\x98\x08\x69\x7c\x72\xbc\xd8\x02\x12\ +\x42\xca\x65\x91\x28\xf4\x14\x46\x76\x72\xf4\x08\x8b\x98\xa2\xf6\ +\xd8\x51\x98\x54\x58\x45\xe3\x7d\x0e\x7f\x50\xea\x51\xfb\x2f\xc3\ +\x8a\xb0\xc0\xd7\xfb\x58\x04\xd3\xc4\x0f\x02\x73\xf8\x75\x2b\xe1\ +\x79\x34\xbd\x72\x7c\x15\x4e\x46\x79\x45\xa9\x31\x0b\x83\xd6\x4d\ +\x8c\xaf\xc7\x3a\x89\xa7\xc7\xd1\x87\x73\xee\xca\x9a\x64\x06\x06\ +\x7e\xbe\xcc\xb5\x55\xe0\x55\x0e\xb7\x44\xa3\x28\xd6\xb3\xad\x44\ +\x76\xeb\x8f\xef\x19\x77\xf3\x99\xb8\xa0\xee\x09\x75\x1e\xbe\xef\ +\x73\x25\x99\x9b\xf3\xe1\x67\xf8\xfa\x68\x2b\x19\x1a\x29\xec\xed\ +\x2d\x6f\x9e\xce\x35\x75\x43\x0e\xab\xcc\x01\xf1\x6c\x92\xc3\xdf\ +\xc6\xd7\x7b\x07\x1f\x0b\xda\x19\x27\x64\x85\x37\xcf\xcf\x3c\xe3\ +\xf0\xcd\x69\xae\x60\x3b\xa5\xc3\xc7\xde\xb3\x36\xf0\xf5\xf6\xe5\ +\xec\xdd\x4a\x95\x1e\x65\x12\x97\x64\xb6\xdf\x0b\x3f\xb3\x28\x93\ +\x7d\xc8\xe2\x67\x7c\xf8\x8a\xaf\x57\x7f\x74\x64\x5f\x51\xfb\x89\ +\x69\xeb\x8d\x5f\xca\x20\x0c\x2e\x29\xf1\xb2\x9a\x27\x0d\x42\xf3\ +\xf9\xf5\xdb\xf8\xfa\x91\xbe\xa7\xc2\x8f\xab\xed\xa3\x13\x75\x11\ +\xb6\xd5\x5d\x52\x57\xb3\x4b\x4e\x5e\xfa\xc9\x6e\x25\xae\x8f\xf1\ +\xf5\xda\xaa\x01\xf1\x6c\x3c\x4d\x4a\x03\x26\x3d\x7a\x64\xf5\xa2\ +\x6e\xd7\xeb\x73\x7c\xfd\x6e\x0f\xe7\x2c\xe3\x8c\xd5\xc9\x23\xa5\ +\xe3\xcc\x92\x6f\xc8\xf5\x6c\xf8\x45\x9f\xd4\x8a\xea\x24\x46\x9d\ +\x5f\xaf\xf8\xfa\xbd\xb8\x7a\x8e\xca\x55\x75\xaa\x6a\x7d\x5f\x11\ +\x25\xe9\xe8\x5e\x7b\xc5\x06\x02\x0a\x8e\x76\x34\xc7\xd7\xab\x4b\ +\x42\x68\x6f\xdf\xee\x65\xba\x44\x23\x38\xa6\xed\xc2\x1f\x9d\x3b\ +\x7f\x34\x8f\xf0\xd4\xc3\x57\x34\x1b\x62\x6e\x9b\x27\xb8\xf3\xcc\ +\x86\xc2\xe3\xac\x61\x72\x5c\xbc\x21\x45\x66\x9f\xed\x7a\x7d\xab\ +\xf5\x7e\x36\x38\xde\x28\x5e\xbe\x8c\x5d\x9e\x68\xce\xe2\x09\x95\ +\x45\x70\xa7\x0b\x9f\x64\xd9\xe4\xc3\x6f\xb5\x5e\x0d\xa9\x7b\xeb\ +\x35\xe5\x8c\x87\x3f\xb4\xc9\x52\x15\x90\x70\x19\x4b\x9a\xcc\x6c\ +\xb8\xed\xf8\xf0\xc3\x51\x08\xbb\x36\x91\x7b\x84\x7e\x74\x54\xb5\ +\x67\x49\x26\x4f\x94\xc9\x61\xee\x74\x54\x8b\x1e\x3c\x5a\x1f\xe3\ +\xeb\xe3\x72\x28\x6f\x93\x32\x68\x91\xbc\x67\x2f\x35\x3b\x4e\xbc\ +\xa4\x45\x26\x01\x38\x08\x1f\x7e\x8c\xaf\x4f\x1a\x5f\x98\x79\x84\ +\xdf\x5c\xfd\xbc\x2a\xe2\xe4\xa0\x96\x62\x48\x17\x18\x0b\x36\x07\ +\x1a\x2b\x1f\x7e\x8e\xaf\x97\xc4\x73\x11\x96\x9f\x78\xfe\x49\x55\ +\xfc\xde\x3a\xe1\x2d\xd3\xde\x8e\xf2\x83\x6a\xc8\xb5\x9e\xe5\xf1\ +\xf5\x28\x13\x05\x3b\x52\x10\xb5\x20\x26\x64\xe3\xf8\xf8\x2e\xad\ +\xb7\xac\x6f\x3d\xde\x53\x94\x79\x92\xfd\xbc\xd5\x7a\xbd\xe2\xeb\ +\xf5\x8e\xc2\x3a\x1d\x28\xfe\xd4\x06\xcc\x7a\x47\x81\x34\x30\x2a\ +\x18\x95\xf7\x61\x68\x7f\xf8\xd4\xeb\x63\x7c\x7d\x18\x2a\x37\xb9\ +\xa7\xa3\x97\x72\x98\xf0\x46\xd0\xa6\xa8\xce\x98\x03\x58\xb3\x29\ +\xc1\xdb\xf8\x7a\x5b\xea\x3d\x51\x60\x74\xc3\xb9\xa4\x75\x78\x0c\ +\xcc\x13\x08\x56\x9f\x7c\x22\x89\x2f\x4a\x2f\xf5\x7a\xe2\xfa\x48\ +\xce\xa6\xa5\x24\x9e\x69\x3b\x55\x8d\xaf\x5a\xb4\x62\x43\xe9\x28\ +\xd1\x66\xc7\x00\xd3\x12\xbd\xa2\x32\xbf\x5e\xeb\xf5\x87\x5e\x4a\ +\xbe\x91\xb0\x36\xf8\xaa\xe2\x81\xa7\xbc\x2d\xd3\xa1\x2e\x63\xd8\ +\x7a\x3e\xbf\x9e\xb0\x8e\xc8\x49\x56\x3f\x6c\x9d\x3a\x38\x4f\x28\ +\xda\xef\x82\x11\x92\xb8\x33\x9d\x25\x12\x87\x6a\x6d\x39\x9f\x5f\ +\xcf\xe9\x87\x99\x32\x24\x0d\x0a\x77\xae\xed\x69\xf2\x31\xe8\x52\ +\x23\x27\xd0\xe0\x9a\xd0\x63\x3f\x7d\x5b\x89\xcc\xaf\x37\x01\xa3\ +\x1d\x1d\x11\xf0\x78\x64\x47\xb5\x7f\x94\x87\x14\x8b\x8f\xb0\xbe\ +\x55\x43\x79\x1d\xa9\x8c\x64\x7c\xf8\xfa\xd8\xdb\x57\x63\xbc\xe3\ +\x31\xf6\x48\x10\x51\x03\x3b\x90\x57\x46\xfc\x81\x83\x2f\xea\xf4\ +\xb4\xf5\x7a\x8f\x61\xf5\x7b\x6a\xed\x3a\x91\x8c\x48\x6a\x2f\xbe\ +\x3f\x7a\x86\xb2\xb1\xa7\xf3\x90\x95\xc1\x89\x9c\xf2\x7a\xbd\x05\ +\x77\xa2\xf3\x48\x7b\xf4\xbd\x3a\x5a\x67\xb2\x2b\xca\xd1\x0b\x58\ +\x04\x84\xd8\x80\x94\x00\x58\xd1\x27\x66\x83\x07\xd3\x25\x08\x98\ +\xa5\x99\xc8\x3e\xcc\xb9\x0b\xdb\xc9\xc6\x15\x66\x2d\x34\xf3\x94\ +\xc3\xb2\xc7\xe9\xea\xd1\x6b\x4d\x4c\x22\x50\x7f\x09\xdc\x63\x0f\ +\xe6\xc6\x8e\xbd\xc8\xaa\x3b\xca\xe3\x04\x7e\x99\x52\x18\xe9\x87\ +\x64\xd8\x19\xf5\x7a\xbc\x3c\x1a\xc7\x15\xdb\x20\x73\xee\x48\x90\ +\x18\x24\xbc\x27\xab\x30\xd3\x04\x9d\x4a\x6c\x45\xf1\xa1\x94\xfe\ +\x43\xd1\xb6\x80\x58\x3d\x4e\x88\xa4\x53\x3e\x97\xed\x52\x0b\x99\ +\x78\x9a\xc0\x58\xf7\x75\x50\x11\x96\x3b\x2a\xe5\x1b\x89\x97\x70\ +\x4b\xe4\xec\xed\x57\x6b\x45\x11\xd5\xde\xf9\x89\x70\x69\x05\x85\ +\x03\x0e\x64\x8e\xd0\x1c\xbe\xf5\x18\x7c\x85\xad\x37\x7b\x8a\xd2\ +\x67\x75\x26\x9d\x1b\xa8\x6f\x3d\xe6\x74\xc2\x3e\x61\x46\xcb\xd7\ +\xfc\x66\x9d\x72\xc7\x9e\xea\xfc\x7a\xa4\x24\x58\x0a\x10\x77\xa3\ +\x26\x75\x1a\xcc\xdd\xc0\xae\xe2\xe8\x4d\xbd\x94\x33\xe9\x31\x9d\ +\x6c\xa9\xe0\x0b\xc1\xd7\xfb\x85\xb9\x2f\x29\x09\xd6\x88\x32\xa5\ +\x13\xee\x7c\xbc\x3c\xf1\x42\x31\xdb\x32\xe6\x80\x78\x36\x68\x2a\ +\xda\xe2\xc3\x17\x0a\x4a\xcd\xe1\x73\xf4\xbd\x8f\x37\xc1\x3a\x8c\ +\xb1\x0f\xa1\x6c\xb6\xb9\x71\x04\xba\x28\xbe\x3e\x8c\xeb\x31\xf7\ +\x87\xd0\x71\x8e\xb5\x7e\x6a\xae\xa8\x09\x8a\x3a\xa1\xf5\xeb\x0f\ +\x88\x60\xcd\x8d\xcb\x12\x12\x4a\x21\xa7\x41\xf3\x47\x37\x05\x41\ +\x94\xde\xc4\x2c\xa2\x32\x5c\xa2\x88\xea\x41\x77\xe4\x47\xa3\x6d\ +\x15\x35\xca\xd1\x37\x88\x9b\x5d\x00\x24\xf5\xe5\xfa\xfa\xb1\x93\ +\x9f\x2c\x1c\xd1\xa2\xed\x42\xe1\x4e\xd3\xa3\x32\xe0\x32\xe7\xc8\ +\x45\xf1\x99\xcb\x26\xba\xe4\x8d\x53\x2b\x2e\xbb\x39\x51\xb0\x35\ +\x39\xa9\xd7\x03\xb2\x57\x65\x52\x31\xf1\x9e\xc2\xa2\x18\xcb\x67\ +\x1d\xe3\x7a\x3d\x83\x10\x6c\x43\xcd\x71\x9e\x92\x27\x94\x08\x54\ +\x23\x26\x56\xc6\x87\x6f\x1f\xea\xa1\x7e\x80\x1c\xb2\x2a\xe1\xb4\ +\xb2\xa9\x90\x7c\x42\xe5\xbd\x53\xa2\x4b\x04\x25\x53\xa2\xe6\x89\ +\x8a\x6d\x14\x8c\x60\xf1\x11\x16\x40\xc3\x1b\x9f\x7d\xf2\xe4\x1b\ +\xf7\xab\x9c\xb0\x68\x45\x3d\x3a\x14\xc5\x00\x5e\xc5\x37\x14\xc0\ +\xc0\xa9\x8f\x42\x9c\xa8\x72\xfe\x48\x28\xe3\xce\xee\xdf\x2b\xeb\ +\x2f\xc5\x1d\x2d\x1f\x77\xf4\xdf\x7c\xe9\xcd\x97\x8b\x26\xcd\x92\ +\x1c\x97\xa8\xbe\xc3\xd7\x4b\x36\x0f\x71\x23\x98\x90\x3f\xf8\xde\ +\xd5\x1b\xc6\xdf\xdf\xab\xeb\x23\xa3\x79\x79\x45\x54\x9b\x81\xf1\ +\x7c\x61\x04\xfc\x77\xa1\x4d\x4c\x30\xd6\xd8\xd2\x7e\xc5\x7c\xf8\ +\x76\xe4\xf6\x4d\xeb\xf5\x9a\xd1\xfb\xc5\x85\xdd\xf1\x51\x51\x25\ +\xbf\xa3\xcf\x54\x92\xe1\x93\xd9\x4e\x53\xa8\x6e\x57\xd3\x82\xd8\ +\x21\x63\x9c\x0e\x71\x2d\xbe\x5e\xbf\x8a\xca\x25\xfd\xda\xf7\xdf\ +\xfa\x74\x1d\xb0\x33\xc8\xcc\xab\x1f\xdd\x33\x66\xf7\x36\x66\x1a\ +\xe2\xa2\xed\x76\x92\x4c\x93\x0f\xb6\x0e\x54\xee\xc8\x38\x33\x3c\ +\xd0\xf9\xf8\x87\x8f\xc2\xe3\x6c\x9a\x64\x9d\x2f\xff\xaa\xdc\x85\ +\x67\xd7\xfb\xa0\x6f\x68\x24\xe8\xf5\xf9\xf5\xfa\xdc\xfb\x1c\x3e\ +\x27\x8f\xc1\xff\xdb\x85\x6c\x7c\xe8\x02\xbc\x8f\x17\x52\xa3\x42\ +\x3f\x5d\x58\x32\x87\x5e\x46\x9f\x2b\x61\x5d\x9f\x5f\xdf\xc7\xf5\ +\x5a\x10\x43\x4c\x6b\x29\x18\x2b\xa7\xeb\xeb\xc7\xa2\x4b\xbe\x57\ +\xe3\xfe\x97\xff\xfc\x70\x37\xd3\x03\xa1\xfe\x7d\x9e\x1f\xdd\x9e\ +\x5f\xaf\x3a\x2f\xf5\x7a\xdd\x51\x23\x4b\x9e\x6c\x4f\x7b\xa3\x3f\ +\xcf\x02\x69\xd1\x0c\xc4\xd6\x5b\x0f\x6c\xfd\xee\xcb\x6c\x4b\x87\ +\x67\xb2\x23\x67\x28\xe3\xc8\xc6\xae\xa8\xb0\xdf\x14\x82\xad\x22\ +\xa4\xd8\xd2\xc5\x66\x49\x2d\xf6\x9a\x46\x31\x13\x9f\x56\x50\x6a\ +\x8c\xfb\xf2\x29\x7f\xee\xe4\xdd\xfb\x3e\x32\xa4\xb5\xe4\xbd\x10\ +\xaa\xac\xec\x1f\x77\x97\xf4\x1f\xe7\x6e\x86\x18\x84\x44\x8c\xeb\ +\xd0\xb6\x12\xe2\x7a\x96\x8b\x42\x29\x31\xc2\x46\x46\x0d\x5c\x3b\ +\x08\x99\x6e\xa9\x47\x3f\x7d\xa8\xb0\xeb\xed\x64\xac\x29\x72\x56\ +\x92\x5c\x62\x11\xc5\xdf\x5c\x2d\xda\xf2\x34\x61\xa3\x92\x44\x2e\ +\x1b\xcb\x2a\xde\xd3\x7b\x65\x44\xcb\xa9\xa4\xca\xb1\xa4\xf3\xfa\ +\xb7\xca\xc9\x0c\xce\x84\xa4\x46\x47\x21\xa8\x61\x0a\xbb\x9e\xf4\ +\xfd\x64\x1d\x1b\x96\xb7\x69\xfa\x5f\x99\x62\xf1\xe4\x7d\x0b\x46\ +\xea\x5a\x2c\x14\x99\x7e\xf7\xb3\x32\x5c\xc2\xec\x3d\x3b\x4a\xa0\ +\x1c\x2b\x13\x5b\xea\x61\x8c\xcc\x42\xd0\xc8\x3e\xec\x72\xc6\xd1\ +\x7b\xc6\x5e\xd2\x3f\xed\x70\x9d\xcb\x9a\x3f\xfc\xe2\x07\xd4\xba\ +\x5f\xda\x17\x3a\x4a\xf6\xd3\x61\xc3\x42\x60\x0b\x50\xb6\xc8\xe0\ +\x87\x78\x26\xd7\x5d\xd2\x63\x58\x87\xea\x36\x7f\xe2\x53\xc6\xa0\ +\xfb\xa8\x33\xa4\x7f\xac\xcc\xfd\xfb\x9a\xc5\xcd\xd1\x0d\x51\x89\ +\x31\xe9\x71\xb6\xed\x54\x3c\x13\x47\xaf\x1c\x10\x83\x45\x77\xd3\ +\x1b\x95\xa3\xff\xbb\x8f\x07\x3f\x16\xbe\xcc\xef\xf8\xeb\x79\xb4\ +\x4b\xea\x5d\x12\x0f\x63\xd3\x3b\x1a\x61\xeb\x09\xeb\x38\x7a\x69\ +\xd4\x22\x72\x12\x24\xdb\x1f\x0a\xa7\xfc\xe7\xce\x37\x93\x77\xf2\ +\x5f\x2e\x9c\xfe\x0f\xe7\xcb\xd2\x70\x24\x62\x2c\x40\xeb\x91\x54\ +\x19\x5d\xb3\x0e\x7c\x5c\x3d\xdf\x4e\x50\xc2\xd1\xc2\x51\xfb\xda\ +\xc3\x5d\x51\x25\xdc\x92\xca\xe3\xff\xea\x83\x8b\x90\x72\x49\x1b\ +\xca\x44\x0d\x45\x58\x32\x9a\x49\x6b\xa1\xf4\xe1\xfb\x6c\x33\xe2\ +\x16\x8b\xf4\x76\x11\xf4\xd0\x45\xa1\x73\x75\x03\xce\x87\x99\x2d\ +\x1d\xb6\xc8\x5f\x34\xb8\xf3\x3b\x6a\xd4\x2f\x1c\xbd\x80\xaf\x8e\ +\x61\x9f\xc6\xb0\xde\xd3\xf7\xea\x73\x6f\x2e\x3e\xeb\xbf\x77\x63\ +\x75\xcf\xf6\x34\x95\x2f\x42\x3a\x9c\x48\x8c\xb9\xe3\xe8\xf7\x9e\ +\x9d\xe8\x70\x79\x9a\xc8\x8b\x96\xdf\x9a\x71\x46\xd4\x3a\x81\xb1\ +\x3e\xf7\xc0\x05\xa6\x9a\xd0\xf9\x4a\x19\xa5\xd0\xdc\xd0\x39\x76\ +\x4b\x78\x9b\xf0\x9e\xa2\x54\x89\xdb\x4e\x09\xf0\xa9\xd7\xdb\xff\ +\xca\xe8\x3b\xbd\x79\xa7\x4c\x67\xfc\x51\x63\x78\x7b\xf1\x8e\x9d\ +\xbc\xb9\xa2\xb3\xc4\x4b\xe8\x7c\x5e\x62\x84\x9e\xc8\x54\x89\x1e\ +\x67\x28\x4a\xbc\xc6\x7b\xa7\x84\x01\x72\xd3\x3f\xab\x4f\xda\xb7\ +\x3d\xbd\x6f\xf3\x4f\xea\xc1\x9b\xa0\x2c\x5f\x6d\xd0\xe0\x4e\x5a\ +\x5f\xaa\xab\x27\x58\x70\x8c\xfe\x51\xf3\xa3\x53\x5b\x69\x9a\xbe\ +\x5e\x2f\x69\x75\x9d\x79\xeb\x9f\xfb\x80\x10\xf4\x3c\xb6\x47\xef\ +\x02\x3b\xef\xe0\xe7\x5d\x3a\x18\x27\x25\xa6\x52\x4c\x53\x92\xc7\ +\xb5\xee\x2c\x0b\x9c\x3a\x3a\xd7\xe7\xb8\xa2\x28\x53\x67\x4a\x13\ +\x56\x8d\x38\xe1\x0c\xa8\x6d\x6f\xb2\x82\x07\xf6\x20\xeb\x84\xf0\ +\xa9\xf8\xa4\xff\x39\xfb\xdc\x78\x09\x44\x5f\x7b\xb0\x8e\xe1\x64\ +\x43\x11\x31\x88\x45\x6e\x5d\x63\x01\x62\x62\x49\xc3\x77\xc9\x1e\ +\x23\xcb\xe1\x53\x5f\x1e\xec\xf0\xad\x24\xfa\xf7\x62\x31\x77\x1d\ +\x79\xda\xed\x2f\xdf\x39\xef\x6d\x0c\x27\x73\x25\x70\xee\xed\x77\ +\xc6\x3f\x9a\x00\xaf\x76\xa0\x6d\x25\xe5\xcc\x7e\x76\x8f\x93\xd9\ +\xa7\xe1\xa5\x8b\xa0\x1d\x64\xe0\x74\x53\xe0\x42\xb6\xe2\x17\x94\ +\xd3\xef\x94\x09\xf1\x72\x7c\x3d\xe6\x9e\xc9\x81\x81\xcd\xb7\xce\ +\xac\x17\x8a\x4f\xf2\xd6\xe3\x63\xc7\xe7\x59\x65\x34\xad\xc7\x3c\ +\x21\x63\x18\x2c\xd3\x44\x88\xa8\xbc\x4c\xda\xe3\x3c\x12\xd7\xdb\ +\xa0\x7d\xaf\x49\x40\xee\xc6\x7b\xd5\x79\x7a\xe8\x4f\x9e\xd9\xbb\ +\x68\x7d\xca\xe6\xab\x5d\xe3\x91\x12\x01\x10\x91\xfb\x59\xe4\xc5\ +\xbf\xeb\x14\xca\x10\x0d\x95\xe9\xf9\xf1\x09\x31\xdd\x00\x14\xc6\ +\xad\x0b\x9e\x09\xac\x88\x94\x6f\x42\x1c\x23\x95\x5b\xcd\xe4\xea\ +\x9c\x3b\x22\x26\xb3\xa6\xef\xde\xc9\xf9\xf3\x8f\xb5\xa0\x01\x3b\ +\xfa\x22\xe7\xe2\xcd\x53\xd8\x98\x29\xa3\x10\x0e\x5d\x78\x47\x8f\ +\x8e\x43\x83\x8f\x1a\x8b\x50\x11\xdd\xad\x95\x06\xab\x2e\x3f\xff\ +\xab\x77\x5e\x7f\x74\x1a\x46\x6f\x9c\x96\x15\x7a\x65\x82\x72\xf2\ +\x2e\x54\x0e\xe3\x7a\x38\x28\x95\x08\xc0\x36\xd3\x07\x23\x00\xd9\ +\x34\x52\xa6\xdd\x71\xa8\x26\x8b\xe5\xc0\x0d\xee\x8e\xca\x0a\xac\ +\x93\xd9\x51\x4c\x29\x09\x7c\x84\xed\x72\xf7\xc0\x59\xec\x8f\x0a\ +\x0a\xee\x86\x2d\xf5\x09\x1d\xf6\x94\x30\x54\x77\xd5\x1b\x7c\x1d\ +\x17\x4a\x0c\x9a\x06\x22\xf6\xc3\x3b\xca\xd1\x2b\x6e\x7d\x6c\xd1\ +\x22\xeb\x2d\x5d\xea\xd9\x3b\xfa\x51\xa9\xd6\x2f\xb1\x79\x02\x76\ +\xb7\x07\x0d\x8e\xa4\x0e\xd3\x40\xcb\x9b\x13\x75\x6a\xfa\x74\x82\ +\x2b\xca\x80\x1e\x3d\xfa\x67\xb5\x01\x66\x1b\x69\x6b\xf0\x7a\x53\ +\x27\x0f\x5f\x1d\x31\x53\x31\x26\x18\xb6\xa7\xa0\x7b\x14\xad\x2f\ +\x3b\x5a\xbe\xea\x38\xa3\xf2\x89\x53\xa2\xe9\x92\xbd\x3c\xa1\xf8\ +\xf9\x75\x73\xa5\x68\x3b\xd5\x73\xa6\x20\xde\xc2\xae\x30\xf9\xb6\ +\xa7\xbc\xf5\xe2\x36\x2b\xab\x06\xe3\x8c\x7d\x58\x6f\x1a\x9f\xb4\ +\xbe\xf8\x3d\xa5\x1d\x9b\x36\x2d\xf4\x49\x86\x98\xdb\x9e\xb2\xa5\ +\x51\x7e\x54\xe3\xfa\x28\xf5\x44\x35\x4c\xc0\xb6\x88\xaa\x0c\x5a\ +\x0e\x22\x16\x15\xeb\xd9\xd0\xbc\x5e\xaf\x95\x70\x85\xad\x63\x48\ +\x3d\xf0\xea\xa0\x05\x46\xc5\x5b\x4e\xbc\xa0\x40\x9a\x5a\x7a\xaa\ +\x75\x34\xd7\x56\xbd\x9e\x4e\xa2\x25\x05\x0c\x28\x24\x58\x8b\x37\ +\x98\x52\x9c\xbc\x76\x01\xbd\x91\x46\x42\xd4\x09\x7c\xbd\x6c\x6b\ +\x95\x8f\x0b\xa0\x43\x7a\x34\x4b\xe2\xc9\x15\x50\x78\xb5\x4f\x8d\ +\xe5\x74\xdd\x79\x32\x46\x0a\xdf\x69\xc8\xea\xf5\x4b\x52\x0e\xb5\ +\xb7\x3e\xc5\xd7\xb3\xa9\x31\xbe\x5e\x82\x26\x85\x8a\xe0\x93\x98\ +\xa8\x36\x4d\x26\x64\x55\x91\x2c\x2e\x3b\xaa\x16\x9f\x17\x4a\x63\ +\x7a\xad\xd7\xab\xac\xd0\xd5\xe8\x53\x6f\xea\x04\x2e\x54\x18\x4a\ +\x36\xfd\xd1\x7c\x7e\xbd\xc2\x57\x3b\x88\x75\x44\xf9\xd3\x1e\xbc\ +\x1c\x3e\xa8\x9b\xd9\x89\xa9\x59\x67\xbd\xa3\x58\x28\xc5\xd7\x2b\ +\xa3\x4a\x06\xbb\x63\x2b\x51\x25\x7e\xd1\xaa\xe1\xe1\xd5\x82\x67\ +\xca\xb0\x22\x87\x78\x11\xd9\x13\x2f\x6b\x2b\xb6\x89\xaa\x2d\xce\ +\xd0\x3d\x89\x29\x75\x97\x33\xc6\x33\x51\x63\xee\xb2\x79\x27\x73\ +\xa0\x76\xd1\xfc\x7a\xd4\x9e\x0d\x15\x30\xb8\x13\x11\x28\x5b\xf0\ +\x32\x0d\x34\x8d\x67\xe6\x9e\xb7\x7e\xdb\x29\x21\x49\x4a\x17\x61\ +\x5a\xaf\xf7\x0b\x29\x95\xe7\x4b\x47\xca\x00\x69\xda\x86\x0c\x10\ +\x2e\xc7\x53\xd9\x0e\x1a\x86\x6a\xbd\x5e\x7a\xdb\x31\x50\xad\x94\ +\xd0\xcc\xb7\xf7\x33\xae\xd7\x9b\x90\x5a\x15\xf1\xf5\x5a\xc1\x33\ +\xe9\x56\x86\x50\x5b\xb8\x1f\xc8\x93\xcb\x0d\xcd\x40\x18\xca\xec\ +\xa9\x99\x12\x13\xf3\xe6\x3a\xbe\x9e\xce\x66\x14\x5f\x2d\x69\xf6\ +\x7e\xfa\x36\x7c\xeb\xc3\x8f\xf0\x4c\xf4\x40\x2c\x92\xcd\x53\xcc\ +\x3a\xa0\x16\x89\x42\x15\xcd\xc2\xff\x7a\xf4\x55\x6e\x7c\xbc\x22\ +\x9d\xd6\xeb\xf3\xfc\xa8\x92\x50\x9e\xbc\xac\xf6\x89\xbc\x12\x57\ +\xaf\xd7\x57\x69\x90\x93\x77\x03\x26\x1c\x07\x61\xf9\x72\xec\x69\ +\x10\x2a\x13\xaf\xd0\x22\xf1\x9e\xd0\x26\x93\x50\x8f\x7f\x32\x0f\ +\xdf\x3e\xf6\x57\xa7\x9d\x65\xe4\xed\xa8\x52\xde\x9b\x97\x95\x18\ +\x0f\x57\xfa\xdd\xd4\x1f\x65\x4f\xd9\x4e\x3f\x52\xc6\xab\x92\xd0\ +\x7f\xc4\xad\x64\x6e\xb0\x29\x87\xce\x0c\x94\x80\x24\x17\xcb\xe4\ +\xed\x13\xb8\x50\x3b\xf7\xf6\xfc\x17\x99\x71\x88\x1d\x8d\xb8\x15\ +\xb2\xc6\x02\xe5\x7f\x00\xc6\xe8\x29\x48\xf1\x9e\x42\x5a\x8d\x96\ +\xcf\x95\x3d\x45\x58\x48\xd1\x7b\x3b\x0a\x54\x40\x6f\x28\x64\xbe\ +\x1c\xb9\xbc\x4e\x38\x25\xa3\x00\xc4\xec\x2f\x42\x76\xfe\xd3\x06\ +\x27\x3a\x24\x94\xc2\x9d\x16\xad\x7e\x9c\x31\x22\xea\xd1\x63\xee\ +\x13\xb2\x2f\xc7\x8d\x8c\x4e\xc5\xbc\xe8\xc3\x2c\x08\xb1\xed\x59\ +\x8c\x88\xa9\x96\x74\xe7\x61\x42\xa0\x18\xd9\x4a\x99\xc0\xaa\x3c\ +\xe3\xa3\x03\x5b\x7a\x9e\x12\x62\x11\xec\x53\x38\xa9\xe5\xff\x47\ +\x8a\xa8\x96\xa8\x5a\x04\xd8\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ +\x42\x60\x82\ +\x00\x00\x0f\x6b\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x01\xf4\x00\x00\x00\x4b\x08\x03\x00\x00\x00\xb1\xe3\x85\xac\ +\x00\x00\x00\x42\x50\x4c\x54\x45\xd5\xd5\xff\xf6\xf7\xff\xda\xdb\ +\xff\xef\xef\xff\xdf\xe0\xff\xe7\xe7\xff\xea\xea\xff\xea\xeb\xff\ +\xeb\xeb\xff\xdf\xdf\xff\xf7\xf7\xff\xfa\xfb\xff\xf3\xf3\xff\xd7\ +\xd7\xff\xff\xff\xff\xe6\xe7\xff\xdb\xdb\xff\xe3\xe3\xff\xd5\xd6\ +\xff\xf2\xf3\xff\xee\xef\xff\xe5\xe6\xff\x96\xf6\xba\x85\x00\x00\ +\x0e\xe4\x49\x44\x41\x54\x78\x5e\xed\x5d\xd9\x92\x24\x37\x08\x1c\ +\xa4\x3a\x8f\xbe\x66\x76\xff\xff\x57\x0d\x24\x14\x52\xd7\x4e\xd8\ +\x0f\x23\x47\x6c\x84\x52\x05\xd5\xf6\x9b\x9d\x83\x0e\x20\x55\x1f\ +\xf7\x1f\x45\xc7\x7e\xdf\x77\x76\xf7\xed\x4e\xf7\x6d\xdf\xb7\x3b\ +\x0f\xc1\x2e\x8e\xb6\x63\x3b\x88\x87\x81\x32\x2d\x94\xf9\xf9\xca\ +\x05\x96\x3c\x2f\x6a\xcb\x3c\x09\x1e\xd3\x43\x9e\x71\x1c\x1f\x8c\ +\xd7\xe3\x35\xb2\x29\x56\x19\x70\xc3\xb0\x0e\x6c\x6b\x5a\x13\x3f\ +\xcf\xe7\x73\x65\x4b\x29\x3d\xd3\x2d\xdd\x6e\x1f\xec\x3f\x3e\xf0\ +\x30\x7e\x94\x80\x8e\x1d\x9e\x84\xf5\x8d\xf9\xdf\x95\x6d\xf1\x02\ +\x12\x53\xde\xc1\xbc\x72\x9e\x29\x33\xc0\xfb\xaf\x99\xc9\x16\xd6\ +\xf3\x22\x98\x95\x72\xc6\xfc\x98\x9d\xf4\x51\x59\x07\xed\x41\xbd\ +\x93\x9e\xd6\xf5\x29\x8e\xc9\x06\xe9\x37\x19\xcf\xf4\x71\xbb\x81\ +\xf0\x06\xa4\xf7\x30\x87\x17\xe3\x58\xdf\xc5\xf1\x6b\x33\x10\xf3\ +\x6d\xd1\x2e\xc8\x94\xd9\xd3\x42\xcb\x97\xc5\xfa\xfc\x4b\x1c\xa2\ +\xfc\x8f\x91\xfe\x1a\x65\x54\x94\xaf\xaf\xd7\x60\xd1\x9e\x56\x01\ +\x07\x79\x5a\x11\xe9\x37\xe6\x3b\xdd\xf0\xdc\x3e\x38\xda\xd9\xb5\ +\x21\xbd\xc7\xfa\x2e\x41\x2e\xb1\xce\xcf\xae\xe3\xee\x91\x7e\x90\ +\x71\x4e\x94\x65\x1c\x59\xc3\x3d\x30\xcf\x12\xe7\x32\x9c\xf4\x49\ +\x49\x9f\x10\xe9\xc6\xbb\xd1\xbe\xca\x33\x30\xe9\x80\x44\x7a\x7a\ +\x1a\xe1\x6e\xe9\x79\xbb\xd9\x14\xaf\x9c\x37\x20\xbd\x83\x84\x6d\ +\x21\x9f\xd8\x8c\xf3\x3d\xd6\x74\xe7\x1c\x91\x9e\x17\x3a\x98\xf8\ +\xaf\xe0\x9c\x1f\xb0\xee\xd3\x3b\xc6\xc8\xcc\x0b\xe9\x55\xa4\xaf\ +\x6c\x03\x48\x1f\xd8\x56\x5d\xd3\x95\x78\x7e\x40\xba\x32\xfe\x94\ +\x18\x67\x28\xeb\xb7\x9f\x26\xbd\x63\x87\xdb\x09\x3b\x38\x59\xd5\ +\x85\x79\x00\x6b\x3a\x06\xf6\x71\x6c\xf9\xf0\x35\x3d\x38\x9f\x75\ +\x76\x8f\x48\x9f\x46\x79\xc6\xc7\x0b\xac\x57\x91\xce\x9c\x8b\x07\ +\xf1\xe0\x5c\xe7\x77\x4c\xef\x29\xdd\x94\xf7\x60\x9d\x9f\x1f\x26\ +\xa0\x53\xbe\xcb\x20\x9d\xde\x39\xde\x69\x33\xec\x14\x6b\x7a\xec\ +\xde\x25\xda\x63\x4d\x37\xcc\xc5\xee\x1d\xd0\xa9\x5d\x4d\xf6\x71\ +\x3a\x04\x60\xdd\xa6\xf7\x97\xd0\xad\x90\x30\x07\x12\x66\x77\x9b\ +\xdf\x99\xef\x26\x6b\x7a\xe7\x1c\x26\x5e\x28\x67\xf3\x75\xdd\xd7\ +\x74\x1e\x94\x6d\x8e\x97\x20\xc7\x16\x1e\x98\x84\x70\x7e\x62\xf7\ +\xce\x78\xf0\x33\x8a\x8d\x16\xe9\xfc\xc4\xee\x5d\x23\x7d\x78\xad\ +\x80\xed\xde\x13\x3b\x90\xce\xb4\x4b\x98\xa7\x9b\x20\xf9\x9a\x3e\ +\x01\xf3\xbc\x00\x59\xc7\x9c\x27\xfb\xb5\xe4\x1a\xf8\x67\x6c\x41\ +\xf8\xb1\x5d\xe8\xc2\xe3\x50\x6c\x78\x9d\xab\x57\x3e\xb6\x12\x98\ +\xf3\xf8\xa1\x8d\xa3\x00\xef\x4d\xd7\x40\x71\x9b\x9c\x71\xe5\x8d\ +\xb5\xb1\x0d\x3a\x0a\xd2\x03\x33\x3f\xe0\x5c\x80\x3f\x82\x80\x10\ +\x2c\x3e\xfb\x5f\x2a\xce\x1e\x01\x61\x1b\x9e\x0e\xda\xc1\xfe\x76\ +\xc1\x5d\x6c\x07\xe5\x4c\x36\x69\x3a\x83\xdf\x08\x16\x62\x93\x7f\ +\xe3\x53\x66\x03\x74\xd2\xa7\xe0\x3b\xcb\x5b\xa9\xce\xf3\xac\xaf\ +\x12\x87\xbd\x41\xb8\xc4\x37\x58\x3f\x00\xda\xd8\xf0\xd6\x41\x1b\ +\x50\x6c\x65\xee\xf8\x67\xb8\xfb\x1d\x26\xf1\x4d\xf8\x4d\x4e\xb9\ +\x1f\x79\xf1\x6a\x86\x4e\xfa\x24\x9c\xcf\x59\xdf\xba\xb6\x30\xa6\ +\xe0\x5d\x7e\x21\x75\x28\xac\xf3\x0f\x7e\x1f\xfa\xeb\x08\xe4\x63\ +\xf3\x41\xf8\x4d\x94\x83\x74\x65\x9b\x30\x9b\x6b\xc4\x13\x29\xf5\ +\x32\x24\xb4\xf5\x07\xf1\x60\xd7\x82\xec\x8e\x9f\xdd\xc8\x75\xec\ +\x18\xd8\x98\x60\xc7\xe2\x3b\xb9\xcc\xbf\x62\xa7\xa3\x20\x2c\x95\ +\xb4\x2c\x6c\x88\x2f\xc6\x82\xcd\xdc\x54\xec\xde\x1f\x23\x36\x72\ +\x91\x9b\x79\xd8\xde\x5d\x73\xef\x76\x46\x5f\x93\x3d\x29\x79\xee\ +\xfd\xa6\xc7\xb6\x27\xdb\xc7\xf3\x23\x35\x4d\xc3\x76\xea\xc9\x6c\ +\x43\x36\x2e\x56\x38\x9c\xd3\xe9\xf0\xdd\x3b\x61\x8f\x54\x16\x5b\ +\x2c\x33\x63\xa4\x33\xcf\xec\x41\x7a\x9c\xd3\x1d\xab\xda\xc0\x76\ +\xee\xde\x93\xba\x74\xe6\xde\x8d\x79\x1c\xd9\x5a\x64\xe4\x3a\x34\ +\x2d\x63\xb9\x77\xec\x4f\xad\xe6\x42\x1b\xc3\xcf\xe9\x9e\x7b\x17\ +\x4f\x4c\xbd\x63\x0e\xe2\x05\x73\x04\xfa\x58\xe5\xde\x03\x5e\x65\ +\x53\x73\xe2\x53\xe4\xde\xc5\xf0\x30\x9a\xe4\xde\x3b\x88\x0d\xe7\ +\x0e\x75\x98\xd9\xeb\x73\x7a\x99\x7b\xb7\xf3\x4f\xce\x14\xbc\x6b\ +\x8d\x6d\x2e\x48\x7f\x48\x72\xa6\xce\xbd\x3f\xca\x44\x2c\x58\x2f\ +\xcf\xe9\x4c\x38\x22\x5d\x89\xe7\xa3\x3a\xd0\x22\xf7\xde\xb1\xbb\ +\x27\xf1\x1b\xdb\xbf\xd4\xd3\x17\x1e\x5f\x19\x83\xf1\xeb\x2d\x0f\ +\x3b\xcf\x73\x44\xfa\x03\x69\x58\xb1\xd7\xeb\xf7\x6f\x4b\xcc\xac\ +\x2f\xa7\x7c\x18\x12\xc2\xbc\x5a\xd3\x51\x5d\xfd\x3c\x59\x6f\x44\ +\x7a\xe7\x5d\x52\x4c\x36\xb3\xff\x5b\x3d\x9d\x07\x18\x07\x9c\x73\ +\xcd\x92\xd5\xd3\xfb\x14\x4d\x14\xec\x02\xeb\x8a\x42\x1b\xa3\x5c\ +\xd3\xad\xca\xa6\xc9\x38\x75\x40\x9b\x8d\x5c\xcf\xbd\x47\x94\x5b\ +\xce\x69\xfb\xae\x9e\x4e\x19\xb9\x77\xe1\xbc\xce\xbd\x83\xf7\xa8\ +\xa7\x8f\xbe\x7b\x37\xc6\x7f\x47\xc5\x45\x06\xca\xaa\x8a\x54\xaf\ +\xe9\xfc\x28\xe3\x9f\xc5\xfc\xfe\xd9\x8a\xf4\x1e\xea\xc8\xbd\x7f\ +\x5f\x4f\x07\xef\xc8\x7a\x44\xac\x4b\x80\x2b\xe3\x58\xd4\x27\xc7\ +\xe8\x4d\x14\x0f\xc5\xef\x32\xd4\x6d\x78\x3d\x3d\xbd\xd2\x1a\xeb\ +\xb9\x45\xfa\x1a\xab\x7a\x13\xd2\x3b\xe9\xc4\xb6\xe9\x60\xae\x7d\ +\x8e\xa7\xa2\x9e\x4e\x45\x0e\xb3\x9e\xdd\x79\x78\x2d\xfd\x0c\xf4\ +\xc7\x3c\x71\xa4\xb3\xe9\xb2\xce\x28\xf8\x1e\x94\xef\x24\xbe\xae\ +\xa7\x6b\x7b\x1c\xea\xe9\x4a\xbb\xae\xe7\x0d\xce\xe9\x1d\xbb\x97\ +\xd9\xb0\x77\xd7\xf4\x32\x69\xfe\x71\x83\xed\x79\x23\xcd\xcd\x90\ +\x4c\xed\xb4\xa0\x8f\xc2\x76\x72\x53\x16\x4c\x1a\xe9\xec\x8d\x74\ +\x9f\xe0\x1f\x4a\x3a\x12\x33\x30\xc1\x60\x47\x36\x85\xae\xea\x5e\ +\x4f\x47\x59\x35\x25\xdf\xc9\xa5\x14\xc9\x99\x09\x98\x97\x05\xa9\ +\xd8\x09\x96\xc5\x66\xf5\xfc\x3b\xe7\xd3\xc8\x72\xb2\x07\xbf\x49\ +\x72\x49\x3a\x55\xa9\x3f\xc4\x67\x36\xf6\xba\x72\x65\x92\x42\x4b\ +\xde\xd9\x9d\x6f\x2a\x4c\xba\xc8\xf8\xd9\x50\x6c\x81\x69\x2d\xda\ +\xff\xc7\x01\xf4\x5f\x4b\x2e\x7d\x92\xf9\x6f\x08\xd2\x03\x59\x4d\ +\x93\x04\xd1\xb7\x55\x62\xa1\x6c\x75\x60\xab\xb5\xc9\x0b\x20\x31\ +\xf5\x36\x93\xc1\xd3\xa5\xbe\xe6\x53\x1f\xce\x34\x9e\xb7\x44\xc7\ +\xc9\xc9\x3f\x42\xa7\x31\x7a\xc1\xe5\x5c\x4f\x72\x59\x4f\xbf\x02\ +\x89\x05\x78\x79\x88\xad\x00\xc8\xb6\x2a\x9b\xfe\x0c\xc6\x81\xa8\ +\xb6\x59\x9b\x01\xc8\x16\x92\xc1\xba\x2d\x90\x0d\x2b\xeb\x9d\x74\ +\xd0\x3e\x63\x76\xcf\x66\x5e\x63\x8b\x19\x7e\xc1\xbc\x8e\x5f\xf2\ +\xdb\x6a\x6c\x19\xb3\x3c\x3b\xab\xad\x09\xeb\xa8\xb1\xed\x79\xdb\ +\x48\x3c\x83\x48\x1c\xaa\x6c\x62\xcc\xb5\xfe\xc2\xec\xce\xcf\x2e\ +\x6f\x79\x29\xf9\xf4\x57\x31\xde\xab\x6c\xbd\xfb\x1d\x7f\xcd\xf6\ +\x37\xee\xbb\x9a\x83\x34\x12\x32\x91\xac\x89\x1a\x25\xb4\x2c\xe7\ +\x3e\x6e\x16\x6f\x3b\x39\x17\x3b\xa8\x63\x58\x72\x46\x53\xb0\xfc\ +\x00\xb1\x75\x4f\x2b\x80\x8c\x1c\x12\xb1\xc8\xbd\x27\x6d\x8c\xc4\ +\xd6\x1d\xfe\xa7\x09\xe8\xe7\x35\x14\x5d\x4c\xd1\x84\x07\x59\xb9\ +\xb2\xe2\xa2\xf8\xbe\xef\x7d\x5e\xea\x1e\x39\x7e\x81\x74\x10\x2e\ +\xa3\xca\xbd\xaf\xea\xa2\xd8\xa2\xa7\xf4\x90\x35\x99\xb4\x29\xb5\ +\xca\xbd\x77\xf8\x1e\x14\xbb\xd2\x6d\x8f\xce\xc8\xa8\xa7\x1b\xbe\ +\xeb\x7b\xaf\xb5\x6c\x28\xaf\x22\xc8\xd5\xd5\x0a\x17\x88\x5b\xd8\ +\xa2\x9e\x1e\x5a\x36\x61\x3f\xa1\xbe\x26\x68\x58\x65\xeb\x7d\xef\ +\x42\x3c\x1e\x64\xe3\x2e\x7d\xef\x60\xfe\xda\xf7\xbe\xe4\xfc\xa7\ +\x6e\xd8\xc7\xe4\x2d\xd0\x4c\xf7\x58\x74\xc3\xae\xa7\x94\x6d\xb8\ +\xd4\xd3\x43\xdd\xf2\x2c\xfb\xde\x3f\x7f\x9a\xf4\x9e\x9c\x71\x1d\ +\x9b\x98\x32\x4e\x45\x3d\x9d\xa2\x9e\x0e\xfc\xb1\xef\xdd\xa2\xbc\ +\x10\x30\x22\x23\xe7\xd9\x19\x70\xee\xb8\x94\xd3\x8b\x1e\xe8\xf4\ +\x34\x2d\x5b\xd9\xf7\xde\x86\xf4\x1e\xea\x5a\x65\xd3\x73\xc9\xf7\ +\xf5\x74\xf0\x1e\x7d\xef\x45\xe7\xf1\x82\x11\x79\x58\x61\x1c\x91\ +\xfe\xe2\x17\x5b\x10\x0e\xc7\xf6\x4d\x3d\xfd\xc6\x3f\xa2\x87\xa2\ +\x59\xa4\x77\xd2\x23\xd7\xe4\xeb\xb9\x81\xe8\x40\xfe\xdd\x38\xcf\ +\x59\x1d\x31\xc3\x91\x7b\x77\xc1\x43\x31\xbd\x83\x74\x8b\x74\x4d\ +\xc5\x7e\xaf\x4f\x4f\xb5\x3e\x1d\xcd\x52\x1f\x09\xe2\xf4\x56\x6b\ +\x7a\x5f\xd1\x49\x4d\x13\xcc\xf7\x4d\x5d\x28\x18\x7d\x3d\x07\xe7\ +\xe2\xa1\x23\x10\x03\x42\x9d\x5e\xd6\xd3\x99\x79\x44\x7a\x74\xce\ +\x5c\xf5\xe9\x6b\x7a\xaf\xa7\x0b\x70\x60\x0b\xce\x9b\x91\xde\xbb\ +\x67\x78\xa0\x96\xee\x1d\xfe\x78\xd9\xba\xee\x9b\x77\x21\x9b\x34\ +\xb3\xe9\x98\x8b\x1e\xb9\xd9\x54\xab\xde\x23\x87\xc3\xfa\x6b\xbc\ +\xe8\xd3\x11\xed\x86\xd7\x59\x4f\xf7\x9e\x48\xb8\x36\xfa\xf4\x0e\ +\x57\x66\x10\x8a\x07\xbb\x86\x7a\x71\x4e\xcf\x16\xe5\xfa\xc6\x31\ +\x5d\x94\x03\xba\x94\x13\xb4\x6c\xfa\x7b\x42\x39\x7d\x3a\x31\x5a\ +\xe3\xcc\xf8\xba\x34\xc3\x96\x7c\x87\x6a\x15\xe2\x45\xc6\x13\xe9\ +\x19\x7d\x3c\x37\x53\x15\x5c\x26\xcb\xbd\x87\x96\x6d\xae\x94\x0e\ +\x53\xf6\x2e\xbe\x85\x2c\x0b\x4b\x8b\xe9\x1b\xe4\x8d\x5f\x50\x36\ +\x65\x36\x7d\x18\x59\x3d\x40\xa1\x70\x21\x8a\x53\xec\xee\x55\x36\ +\x79\x21\x4c\x5c\xec\xb0\xc3\xfd\x18\x3a\x2e\xa4\x33\x72\xa1\x65\ +\x9b\xc5\x09\xf9\x05\x0e\xa9\xc0\xa1\xd6\x42\x78\x65\xdf\x8c\xea\ +\x1b\x75\x35\x2b\xb8\xf0\x6f\x4f\x43\xd6\x40\x51\x8d\x1d\x66\x41\ +\x71\x62\xca\x2f\x89\xc3\xef\xff\x05\xbd\xca\x16\x5a\x36\xb6\x77\ +\x7c\xd9\xfa\x43\x47\xc6\xc8\x11\xdf\xa8\xa3\x97\x2a\x46\xd4\xd0\ +\x0f\x04\x75\x09\x21\xd9\xb5\x6c\xc4\x86\xcb\x59\xc4\xe0\x37\x17\ +\x2f\xb6\x97\x36\x75\xd2\x01\x68\xd9\x30\xec\x55\x01\x5a\x36\x0c\ +\x53\x2a\x1f\x00\x65\xe5\x9b\x0e\x44\x78\xde\xf3\x81\xdc\xa3\x91\ +\x4e\xae\xf3\x61\xb8\x96\x4d\x6c\x27\xaf\xa7\x8b\xe9\x10\x6c\x6c\ +\x7f\x89\x6e\xb5\x57\xd9\xfa\xfe\x9d\xde\x7b\xe4\xbc\x6d\x08\x19\ +\xb9\x4c\xe7\x39\x3d\x17\x19\xb9\x5f\x93\x9f\xd3\x97\x8b\xc2\xc5\ +\x1b\xe4\x90\x7a\x67\xe7\xb0\xbc\x3b\xbf\x79\x58\xdf\xbb\x6f\xe6\ +\x90\x8e\x93\xf4\xbb\x0b\x9b\xc4\x5a\x90\xde\x13\x72\xea\xd0\x08\ +\x76\x07\xeb\x40\xd9\xf3\x5e\x9f\xd3\x81\x5f\x9e\x7b\xcf\xf5\xe5\ +\x81\xd1\xf7\x7e\xd9\xbd\x0f\xc3\x4b\x86\xe6\xe2\xe2\x1e\x39\x88\ +\x5b\x40\xba\xeb\x5b\x8c\xf5\x56\xa4\xf7\xbe\x77\xbb\x5d\x6a\xdb\ +\x91\x9c\x8b\xdc\xbb\xf1\xfe\x76\x4e\xbf\xf4\xbd\xcf\xcb\x9c\x6b\ +\x59\x93\x0b\x18\x85\x77\xa8\x56\x1d\xab\x8f\xb8\x73\x86\xf3\x71\ +\x48\xc3\x2a\x6e\xb8\x68\xa8\x75\x95\xad\xe7\xde\x37\x3f\xa7\xa3\ +\xfb\xd9\x73\xef\xbe\xc3\x29\xce\xe9\x39\x38\x8f\xbe\x77\xf6\x0a\ +\x50\xce\x66\x7d\xef\x3c\xca\xc2\xea\xea\xc9\x77\xc7\x79\x8f\x5c\ +\x3a\xef\x9c\xb9\xdd\xd8\xb7\xd3\xb2\x75\xec\x30\x72\x95\x0b\x69\ +\x8c\x57\x0a\x97\x4a\xcf\x26\x5b\x62\xfa\x53\xdf\xfb\x8c\x84\x5c\ +\x5c\x34\xe4\x55\x36\x49\xc1\x56\xb4\xf3\x03\x7d\x3a\xac\xae\xa7\ +\x43\xbc\x28\x9c\xab\x42\x5d\xa2\xbd\xcb\x9a\x9a\xb0\x8e\x7b\x53\ +\x38\xca\xd9\x61\x4d\xc7\xa8\x14\x2e\x5e\x56\xfd\x22\xeb\x7a\x0f\ +\xe6\x17\x10\xef\xa4\x3f\x66\xb6\xa8\xb2\x5d\x72\xef\x43\xe8\xd3\ +\x87\xa1\xca\xbd\x3b\xe9\x89\x4d\xa8\x17\xba\x3f\x1b\x92\xde\xa7\ +\x77\x35\xe5\x1a\x3e\x04\x8c\x88\x72\x31\x88\x17\x2b\xc6\xab\xdd\ +\xbb\x47\x7a\x90\x2e\x0e\x1b\x39\x36\x60\x88\x82\xfa\x90\xde\xeb\ +\xe9\xb0\xe4\x8a\xd5\x67\x2b\x01\x63\xa7\x9c\xe4\xb5\xfb\x9a\x8e\ +\x19\x1e\xe6\x33\x3b\x19\xe7\xf4\xc5\x00\xe7\x62\xe0\x3c\xd6\xf4\ +\xe9\x84\x57\xd9\x94\x70\x71\x8e\xe1\x1b\x7d\xba\x13\x0e\xf9\x22\ +\xc7\xfb\x53\x58\x6f\xd4\x18\xd9\x49\x47\x05\xc1\xef\x7b\x67\xaa\ +\xb5\xcd\xfb\x04\xf2\x56\x27\x4c\x41\xe0\x88\xce\x99\x7a\x23\xe7\ +\xdd\xb0\xa5\xa4\xc9\xf5\xe9\x75\xeb\x4c\x4a\xa5\x3e\xfd\x5d\xa9\ +\xdc\x6a\x23\xd7\xa7\xf6\xb8\xef\x9d\x4c\xcb\xb6\x6d\xea\xf7\x7c\ +\x88\xa1\x0f\x9a\xb4\xf9\x99\xc4\x84\x68\x8d\xf4\x49\x09\x57\x35\ +\xdb\x3c\x95\xc9\x19\x36\x24\x67\xae\x0a\x75\xe1\x3d\x79\x0f\x74\ +\xac\xe9\x02\xbb\x94\x80\x17\x73\xa3\xdd\x0a\xea\x55\x1a\x56\x9c\ +\x6b\x1e\x50\xe1\x43\x65\xad\xf4\x4b\x16\x67\x35\x36\xbb\x4b\x8e\ +\x32\x65\x54\xd9\x16\x68\xd8\x8e\x83\xd8\x23\xf7\xb4\x6f\x6c\xc8\ +\xc2\x8b\xdd\xed\xbf\xff\xd4\xb2\x6d\xa4\xe9\x2b\xcf\xbb\xb3\xdb\ +\xed\xb4\xcb\x1e\xef\x86\xe8\xb9\xf7\xa9\xa8\xb9\x54\xb9\xf7\x39\ +\x97\x20\x1e\xd9\x55\x4d\xae\xb1\xa6\x23\x40\xa1\x64\xb3\x93\x29\ +\xbd\x5f\x22\xe8\x1a\x36\x7e\xe3\x89\x2a\x1b\x3f\x74\x76\xa0\xec\ +\x1e\x42\x2d\xd0\x4b\xab\xc0\x1c\x7c\x9b\x3c\x3e\xc3\x3b\x48\x2d\ +\xda\xf4\x85\x74\x33\x52\x03\xe2\xc6\x48\x63\x7d\xab\x81\x3c\x15\ +\xf8\xd6\x41\xe2\x2c\xd6\xd1\x4b\x4a\xec\x83\xfb\x06\xe8\xa4\x23\ +\xd6\x31\xc3\xcf\xa8\xb3\x99\xca\x46\xcd\xfd\x22\xb6\xe0\xd7\x71\ +\x2c\xaa\x62\x5b\xec\xc6\x48\xb1\x83\xb2\xdf\x03\x4c\x6a\x1b\xd4\ +\x6c\x0a\xbc\xa1\x63\x93\x37\x33\x0e\x2d\x5b\xa8\x95\x77\x36\xd0\ +\x2e\xa0\xbf\x81\xed\x5e\x65\xeb\xd8\x31\xb0\x7b\x67\xc3\x2e\x86\ +\x47\xde\x37\xca\x3b\x99\x92\x0d\x5a\x36\xb1\x42\xcb\x06\x5b\xf2\ +\x6c\x11\x08\x20\x25\xf7\x50\x03\x5e\x27\x92\x9f\xd8\x8a\xdc\x3b\ +\x76\xef\xb0\xdb\x99\x7d\x6f\xaa\x70\xe9\xa4\x17\x97\x0d\x6d\xdb\ +\x7b\x95\x6d\x0b\xad\x03\xf2\xee\x97\xbe\xf7\x45\x5d\x34\x46\x8a\ +\xb1\x03\xe9\x2f\x3c\xd7\x7a\x8b\x21\xc9\x03\x97\xe2\xc8\x26\x8f\ +\xa2\xe9\x8d\x91\xbd\xef\x1d\x37\x99\xdb\x5e\xf5\x92\x7b\x37\x44\ +\xff\x51\xd5\xf7\x7e\xd5\xb2\x8d\xd6\x19\xf9\x3a\x2f\x0f\x54\x0c\ +\xe6\xd0\x04\xeb\x61\x5e\xdd\x2e\x65\xca\x55\xb4\x45\xb6\x8e\xf4\ +\xde\xf7\xce\x5c\xbb\x6d\x97\xdc\x3b\xa2\x5d\xb7\x45\xc2\xf9\xa5\ +\xef\x3d\xbf\xab\x56\x47\x41\x7c\x96\x8d\x3d\x08\x1f\xca\x48\x8f\ +\x7a\x3a\x90\x54\xe2\x82\xc1\x87\xf5\x76\xc9\x99\x9e\x9c\x11\xd0\ +\xee\x79\x58\xda\xdf\x72\xef\x31\xbf\x53\x16\xa3\x6a\x7e\x9f\xdf\ +\xb5\x6c\xe3\x24\x0e\x78\x08\xe3\x9a\x88\xf5\x50\xff\x8d\x46\x0a\ +\xe3\x7d\x88\x7a\x3a\x48\x7f\x5a\xd3\xcc\x67\xfa\x4c\x6d\xd7\xf4\ +\xfe\xe5\x1e\xbb\x47\xae\x54\xb7\xa8\x95\x51\x4e\xc6\x37\x46\x5e\ +\xa8\xe0\xfc\xa2\x65\x1b\x2d\xd2\x79\x44\xa0\x87\x98\x0d\x64\xa7\ +\x61\x88\x7a\xba\x91\x8e\xa2\x2a\x87\xfc\xfa\xe9\x71\xde\x88\xf4\ +\xbe\x77\x8f\xc6\xee\xcd\x39\xb7\x48\x0f\xce\x11\xe9\xc6\x79\x66\ +\xbb\xce\xef\xbe\xa6\x8f\xe7\x8d\x91\xf2\x44\xa0\x5f\xd4\x0e\xd7\ +\x7a\x3a\xae\x92\xfb\xe4\x50\x17\xdf\x3e\xd2\x7b\x79\x15\x92\x65\ +\x0c\xdf\xbd\x57\x5a\xb6\x7c\x78\xb4\x57\xf7\xbd\x97\xdf\x65\x63\ +\xaa\xc5\xf3\x1b\xbb\xf7\xd0\xa7\x03\xab\x8d\xaa\xca\x66\x4d\x72\ +\xc8\xbe\x4b\xa4\x33\xeb\xb7\xf4\xd9\x32\xd2\xfb\x7d\xef\xe8\x93\ +\xb3\x1b\xd3\xaa\xdd\x3b\x86\x21\xfb\x70\xcc\xd5\x77\xd9\xae\xf7\ +\xbd\xbf\x34\xd2\xe5\x16\xe8\xd7\xb5\x9e\x9e\xd6\xe1\xaa\x4f\xc7\ +\x4e\x8e\x29\x57\x7c\xf2\xf8\x79\xd2\xfb\x17\x1d\x00\x66\x1b\xba\ +\x0d\x21\x9e\xde\x3b\x62\x61\xc0\xe5\xbe\xf7\xea\x26\x0a\xc1\x58\ +\xde\xf7\x3e\x62\xfb\x0e\x0c\x55\x3d\x3d\xbe\xaa\x0c\xc2\x15\xd0\ +\xa7\xcb\xec\x0e\xd6\x2f\x5a\xb6\xf2\xbb\x6c\xfa\xf6\x17\x0f\x87\ +\x7f\x82\x42\xdf\x4b\x3e\xb5\x6c\x8e\x0d\x2f\xa2\xd0\xb2\x1d\x3c\ +\x02\xa5\xce\x01\xfa\x3e\xfc\xf0\x0a\x1b\xf2\xb0\x3c\x14\xbb\x3d\ +\xcd\xd0\x0b\x2e\xf5\x77\xd9\xa0\x8e\xbf\x02\xb5\x37\x5c\x14\xe9\ +\x5a\xb6\x12\xae\xba\x87\x96\x8d\x30\xaf\x01\xd1\x2f\x86\x14\x65\ +\x7c\x97\xed\x4e\x20\x5f\xa3\x03\x34\x6f\xff\x57\xee\xbd\xcb\x9a\ +\x2e\x5a\xb6\x77\xde\x43\xcb\x46\xf2\xdb\xdb\xf6\x05\x54\x7d\x97\ +\x0d\x5a\xb6\xe3\xd4\xb2\xed\x88\x71\xc0\xd6\xba\x1d\x65\xd5\xb8\ +\x31\x92\x47\x68\xd9\x4c\xb9\xda\x94\xf9\x4e\xfa\x5c\x7d\x97\x8d\ +\x6d\x62\xe7\xd5\x36\xab\xad\x55\x5a\xb6\xc5\xbf\xba\x69\xdc\xe7\ +\xf8\x2e\x1b\xb4\x6c\x5b\x68\xd9\x72\x11\xed\xe4\xbf\xfc\xbb\x6c\ +\x88\x70\x92\xf8\x0f\x9a\xb7\xbf\x25\xd2\x7b\x95\xad\x0b\xd9\xd8\ +\x61\xde\x52\x49\x5b\x2c\x6f\x94\x91\x7b\x8f\xef\xb2\xe9\x7d\xef\ +\x84\x62\x75\x68\xd9\xe2\xbb\x6c\x51\x71\x81\x96\x0d\x1f\x77\xb8\ +\x1e\xd9\xce\xf6\x67\x6c\xe4\xd2\x93\x3d\xa4\x0e\xa8\xb4\x7d\x40\ +\xdd\xf4\xd1\x44\xd6\xd4\xb1\x63\x47\xaa\xe9\x19\x14\x5c\xc2\x68\ +\xb7\x9d\x3b\x1d\xe5\x37\x5c\x16\xca\xec\x4b\x2d\x9b\x7f\x97\x2d\ +\xee\x0e\xf4\x4f\x74\x79\xcd\xa5\xbe\x7e\xc4\x53\xb0\xce\x79\x9c\ +\xd3\x71\xdd\xfb\x07\x3f\xad\xab\x6c\x9d\x78\xcf\xbd\x13\xfb\x6f\ +\x73\xef\x38\x05\xb9\xd2\x41\x49\xff\xd3\x77\xd9\x46\x65\x1d\x55\ +\x36\x8b\xf4\xf1\x22\x6b\x7a\xc5\x05\xff\xea\x93\x67\xe4\x20\x58\ +\x85\x6b\x15\xe9\x3d\xf5\x1e\x7d\xef\xdb\xbf\xe6\xde\xe3\x6b\x4d\ +\x6a\x90\x34\xa9\x03\xe9\xd5\x97\x1d\xe2\x9c\x7e\xf9\x5a\x13\x5b\ +\x80\x59\x8f\x2a\x5b\xd9\x03\xfd\xf1\x4c\xcd\x32\x72\x5d\xcb\x26\ +\x5e\x0b\x6c\xca\x39\xbe\x24\x1d\xb9\xf7\xc8\xc9\xa1\xb4\x5a\xde\ +\x0d\x3b\x63\x78\xeb\xfb\xc9\x39\x3b\xdc\x22\x67\xa3\x84\x7e\xc6\ +\xe3\x25\x6e\x4d\x6a\x18\xa8\xac\x6a\xc9\xa5\x90\xa7\x37\x8b\xf4\ +\x1e\xed\x68\xf0\xd4\x04\x84\x67\xa2\xea\xdc\xfb\x21\x86\xd4\x3b\ +\x3f\x8c\x9a\xf7\xc5\x3f\xd1\x65\x60\xc2\xdd\x5c\xe5\x02\xac\x1e\ +\xe9\xf8\x16\x9f\x73\xfe\x4c\xd6\x31\x25\x79\x77\x95\xb7\xa4\x96\ +\xaa\xd5\x4e\xb8\x18\x34\x2e\xec\x91\x79\x02\xeb\x00\x73\x4d\xca\ +\xb8\x07\xfb\x42\x84\x63\xb1\x60\xae\xd7\xf4\xd0\xb2\xd9\xb7\xd9\ +\x4c\xbe\xe8\xac\xaf\x70\x2e\x70\x19\x10\xe9\x4f\x1e\xab\x92\xee\ +\x84\xd7\xdd\x52\xff\x00\x0e\x5e\x0c\x4e\xab\x94\x1d\x32\x00\x00\ +\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x58\x32\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\xdc\x00\x00\x01\x7c\x08\x06\x00\x00\x00\xa4\x31\xd5\xdb\ +\x00\x00\x57\xf9\x49\x44\x41\x54\x78\x5e\xec\xdd\xc1\x4b\x55\x69\ +\x18\xc7\xf1\xdf\xb9\xd7\xeb\x95\x0b\x95\x61\x10\x3a\xad\x24\x50\ +\x50\x08\x12\x0a\x71\x56\x21\x83\x25\x48\x10\x11\x2d\x6c\x51\x11\ +\x42\x81\x04\xdd\x6a\x46\xbc\xaf\x60\x50\xa3\xb6\x28\x89\x20\x72\ +\x71\x21\x5c\xb4\x90\xac\x08\x93\x36\xcd\xb4\x72\x06\x23\x62\x86\ +\x1a\x37\x52\xdc\xc8\x82\xb1\xc2\x6c\x91\xf2\xf4\x6c\x82\x10\xbc\ +\x48\x59\x69\x7e\x3f\xf0\xe5\xf9\x0b\x7e\xbc\x8b\xb3\x38\xfa\x11\ +\x00\x00\x00\x00\x00\x00\x00\x00\x82\xf4\x8b\xb7\x43\x79\x00\x31\ +\x7d\x11\x9c\x94\xd6\x06\xa9\x5f\xd2\xed\xa8\xa0\xa0\x45\x5f\x0f\ +\x18\x1c\xaf\x5a\x52\x7a\x68\xd2\x9e\x9f\xb6\x6e\x1d\x4a\x4f\x4c\ +\x3c\x30\xb3\x94\xe6\x01\x14\xe8\x73\x30\xb4\x94\x49\xbf\x4b\x3a\ +\x1c\x4f\x24\x26\xea\xbb\xbb\xfb\x6a\x5b\x5b\x9f\x4a\xba\xeb\xbd\ +\xd3\xa2\x01\x18\xdb\x16\xef\x91\x67\xbd\x15\x15\x7f\x4c\x8e\x8f\ +\x9f\x36\xb3\xc3\x5e\x99\x16\x07\x80\x43\x52\x22\x48\x1d\x19\xe9\ +\x7d\x47\x2c\x36\x39\x7c\xfc\x78\xd6\xcc\x82\xb7\xdd\x2b\xf8\x64\ +\x90\x45\xde\x21\xaf\x72\xb7\x14\xf7\x3b\xe4\x1d\xd3\xc2\x00\x08\ +\x52\xa5\x37\xe2\x59\x4f\x69\xe9\xdf\xb9\xd1\xd1\xb3\x66\x76\xd4\ +\x2b\xd7\x1c\xbf\x4a\xeb\x83\x34\x15\xa2\xe8\x49\x46\xea\x0c\x92\ +\xf5\xd5\xd5\x75\x69\x41\x00\xc6\x76\xd0\x9b\xf6\x01\x4d\x0f\x34\ +\x37\x5f\x9d\x9d\x9d\xed\x30\xb3\x5d\x5e\x91\xe6\x71\xa7\xad\xad\ +\xcb\x5f\xc1\x99\x20\x59\x67\x32\xf9\xf6\xbf\x5b\xb7\xba\x42\x08\ +\x31\xe5\x07\xc0\x87\x76\xfd\x4c\x49\xc9\xfd\xb1\xe1\xe1\x73\x66\ +\x76\xc2\xab\x56\x1e\xed\x52\xcd\xa9\x54\xea\x5e\x90\x6c\x4e\x37\ +\x95\x1f\x00\x33\xab\xf1\x82\xd7\xec\xad\x56\x7e\xca\x48\x17\x7d\ +\xa4\x53\x17\xaa\xaa\xfe\x0a\x92\x5d\xae\xad\xbd\xdf\xdf\xd4\x74\ +\x63\x60\xdf\xbe\x1e\x33\x4b\x28\x2f\xf0\x59\x00\x8f\xbd\x97\x51\ +\x14\x3d\xd1\x02\x1c\x18\x19\xe9\x2e\xdb\xb4\xe9\xc5\x9b\x5c\x2e\ +\x71\xbe\xbc\xbc\x26\x59\x5c\xfc\x7a\xef\xe0\xe0\xa0\xa4\x42\x6f\ +\x95\xf7\xbf\x56\x2c\x44\x5a\x54\x30\xb3\xa4\xa4\x6a\x6f\x2c\x5b\ +\x5f\x9f\xdd\xd8\xd0\x90\xfb\x39\x9d\x3e\xa2\xaf\x0e\x60\x7c\xdb\ +\xbc\x16\x7d\x13\x00\x83\x8b\xb4\x52\x01\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\ +\x47\x1f\x80\x8c\xd4\x16\xa4\x57\x7e\xc3\xca\x18\x1e\x62\xfa\x6e\ +\xb0\x7a\xc3\x86\x7f\x24\xad\x89\x45\x51\x26\x23\xdd\x0b\x52\x8b\ +\x96\x13\x30\xb8\x20\x15\xfe\x26\x95\x6a\x19\x98\x7a\xfe\xfc\x48\ +\x2c\x1e\x9f\x29\xdd\xbc\xf9\xdf\xd4\xba\x75\x25\x51\x14\xf5\x06\ +\x69\x67\xbb\x54\xb7\x5b\x8a\x6b\x29\x02\x32\x52\x3a\x48\x5d\x92\ +\x22\xbf\x97\xbc\x67\x5a\xe2\x82\xd4\xe4\xd9\x95\xc6\xc6\x3f\xcd\ +\x2c\x5c\xdb\xbf\x7f\x28\x48\xf6\xb1\x8c\x94\xd5\x52\x04\x7c\x68\ +\xef\x2a\xa0\xaa\xca\xda\xf6\xbe\xa2\x82\xd9\x1d\x60\x8c\x9d\x63\ +\x8d\xdd\xdd\x39\xea\x98\x63\xd7\xd8\x8d\x88\x08\x16\x12\x62\x61\ +\xa0\x98\x01\x82\x8d\x05\x82\x01\x8a\x8a\x58\x58\x18\x08\x62\x22\ +\x29\x20\xa1\xf2\x3f\xef\x5d\xfb\xac\x75\xbf\xfb\xe3\xcc\xe0\x10\ +\xd7\x99\xf7\x59\xeb\x59\x87\xb3\xcf\x61\x3e\xef\xb7\x79\xef\xde\ +\xfb\x8d\xe7\x5d\x96\x23\xc7\x7a\xf9\x47\x7a\x08\xd7\xaf\x1b\x6b\ +\xd5\xa2\x3f\xe2\xc2\x3a\x6a\x68\x79\xc1\xc9\x60\xa0\x79\xae\x5c\ +\x51\xd1\xaf\x5e\x99\x7b\x5b\x5a\x56\x82\x81\x85\xad\x2e\x5a\xf4\ +\xbd\xfb\x82\x05\x07\xb6\x36\x6e\xec\x4b\x46\xb7\x2c\x67\xce\xea\ +\x42\xd7\xc0\x60\xc4\x85\x85\x35\xb4\x2e\x53\xe6\x95\xb2\x3a\xec\ +\xeb\xd1\xc3\x7b\x47\xdb\xb6\xdd\x74\xd4\xe0\x9a\xc0\xb8\xbe\x90\ +\x41\xed\xea\xd0\xc1\x17\xab\x5b\x07\xdc\xdb\xd2\xfd\x15\x5b\xdb\ +\x3d\xb8\x1f\xb3\xae\x6a\xd5\xeb\xa6\x2a\xd5\xd7\xd7\xfe\xfe\xad\ +\x31\x5e\x07\xdc\x6d\x22\x44\x4f\xc1\x60\xe8\xc0\x8a\xf1\x13\x56\ +\x87\x5b\xd2\xd8\xb4\xf9\x93\xd0\x41\x5c\xb5\xb5\x5d\x67\x55\xaa\ +\xd4\x9b\x35\xa5\x4a\x85\x5a\x97\x2d\x5b\x1b\x06\x95\xb4\xbe\x7a\ +\xf5\x07\x30\xb6\x29\x66\xfa\xfa\x6d\xc9\xf8\xb6\xb7\x68\xe1\x8f\ +\xfb\xe6\x78\xd6\x50\x63\x9b\x69\x2f\xb2\x12\x0c\x76\x9a\x7c\x11\ +\x22\x57\x76\x7d\xfd\x6c\x3f\x75\xe9\xe2\x9a\xa7\x58\xb1\xb0\x7c\ +\xa5\x4b\xbf\x1d\xe4\xea\xba\xb9\xd7\xf6\xed\x9b\xe6\x44\x44\xe4\ +\x12\x3a\x88\x26\x33\x66\x6c\x9d\xf1\xf2\xa5\xed\x8c\xe7\xcf\x1d\ +\x12\xa2\xa3\xcd\x31\x94\x23\x6f\xc9\x92\x71\x31\x61\x61\xee\x5f\ +\x13\x13\xad\xb3\xe5\xc8\xf1\xa9\xfb\xa6\x4d\x1e\x18\x7f\x96\xb7\ +\x44\x89\x10\x01\xe4\x29\x5e\x3c\xac\xec\x2f\xbf\xe4\x81\x11\xaa\ +\xe7\x2c\xcb\x9c\x2a\x0c\x06\x56\x82\xd9\xe0\xc2\x0d\x35\x6a\xf8\ +\xaf\xc8\x9f\x3f\x1a\xf7\x5d\xc0\xbe\x60\xa5\xbf\x58\x1d\xab\x61\ +\xd5\x70\xc4\xb5\x49\x16\xfc\x9b\x73\x81\xb5\x2e\x59\x59\x55\xd9\ +\xd3\xa5\x8b\xb7\xf3\xc0\x81\x47\xb0\x82\x8d\xa3\x95\xcc\x75\xe8\ +\x50\x77\x3c\xeb\x25\x57\xf0\xf2\x34\x76\x68\xd0\xa0\xf3\x18\x5b\ +\x02\x16\xc1\xbd\x33\x9d\xf9\xc0\x49\x59\x11\xbf\x63\xb0\xc1\x15\ +\x02\x73\x7a\x2c\x5c\x38\xe0\xc6\x96\x2d\x8e\xb8\x2f\x2b\xfe\x1c\ +\xe4\xcd\x9c\x06\xc6\xe3\xac\x14\xbb\xbd\x79\xf3\x5f\xb3\xf0\xdf\ +\x5e\x18\x1c\x06\x1a\xc3\x89\xe2\x44\xc6\x65\x5f\xaf\xde\x5d\xdc\ +\xe7\x95\x06\x57\x8b\xc6\x5c\x7e\xfb\xed\x30\xc6\x72\x90\x81\xad\ +\x2c\x58\x70\xab\xc6\x36\x73\x8a\xc8\x22\x30\xd8\xf0\xf2\xc9\x3f\ +\xde\xc2\x7f\xb2\xaa\x95\xc5\xca\xe0\x8e\x6b\xca\xca\xc2\x85\x03\ +\x9e\x5f\xb8\x60\x8b\xf7\x47\xea\xc0\x2a\x9d\x13\xac\xe3\xbf\x7d\ +\xfb\xf6\x9b\xdb\xb6\x59\xe2\x3e\xbb\x00\x4c\x84\x68\x4a\x86\x75\ +\x74\xec\xd8\x3d\x8b\x85\xa8\x0d\x03\xf3\xa1\x7b\x72\x12\x9d\x9a\ +\x31\xe3\xd8\xfd\x23\x47\x86\xcb\xcf\xe3\x02\x56\x14\x3a\x04\x06\ +\xc7\xeb\x86\x82\x91\xe4\xa4\xd8\xdf\xb3\xe7\x91\xe4\xc4\x44\x33\ +\x18\xdb\x6f\x60\x5e\x1d\x59\xa9\xf5\xc0\xa6\xe0\x10\x30\x87\x34\ +\xb8\x8e\x64\x60\x70\xb0\x3c\xc1\x35\x69\xa9\x4a\x15\x77\xb0\x5f\ +\x3f\xe7\xe4\x4f\x9f\xe8\xdf\x3e\x09\xec\x62\xae\xaf\xef\x2b\x57\ +\xbb\x8f\xb8\x56\x11\x59\x09\x06\x63\x81\x10\x45\x60\x68\xea\xed\ +\x9a\x45\xee\xdc\xcf\x03\x9c\x9c\x36\xc2\xc8\x16\x81\x0d\x85\x8e\ +\x61\xa1\x10\xc5\xb0\x92\x55\xd7\x58\x91\x27\x2a\xdb\xc7\x35\x25\ +\x4b\xde\x7c\xe1\xed\x4d\x2b\xf2\x02\xb0\x11\xa8\x12\x80\xb9\x81\ +\xc1\xdb\x55\x85\x0b\x47\x38\x0d\x18\x70\xea\xd1\x99\x33\xd5\x44\ +\x16\x82\xc1\x61\x83\x2e\x30\x36\x8a\xd1\x7d\xdd\xf6\xcb\x2f\x67\ +\xe2\xc2\xc3\x2d\x28\xd6\xa5\xc3\x81\x71\x17\xf0\x33\xb8\x19\xdc\ +\x44\x31\x3b\x9c\xed\x62\xdd\xe7\xcf\x77\xa5\x8c\x14\x70\x10\x98\ +\x4f\xe3\xfd\x1a\x60\x0a\x1c\x2f\x57\x2e\x2d\x5f\xbe\x6d\x65\xa1\ +\x42\x37\xe4\xd6\xd3\x09\xf4\xa1\x2d\xe9\xb7\x52\xe0\x44\x7a\x81\ +\xc1\x98\x0d\x4f\x3a\xfd\xc1\x82\x5f\x91\x89\xf2\xe6\xea\xda\xb5\ +\xdb\x60\x64\x26\x60\x2b\x50\x67\xc3\x21\x5e\xa6\xa6\xf5\x90\x29\ +\xe3\xaf\xac\x6a\xcb\xf3\xe6\x7d\xf3\xe1\xf1\xe3\xd5\x30\xb2\x59\ +\x60\xf5\x54\xb6\xc9\xb3\xe9\xbd\x0d\xd5\xab\x3f\x96\x86\x9a\xb2\ +\xb2\x48\x91\x29\xab\x8a\x16\x35\xa1\x71\x32\xd8\xd4\x82\xe6\x78\ +\xe6\x09\xee\x98\x2f\x44\x01\xc1\x60\xfc\xd3\x6d\x19\xa5\x4e\x81\ +\x29\xc8\xda\xb8\x1c\xf9\xe2\xc5\x4a\x0a\x2a\x83\xa5\x7f\x10\xc7\ +\xcf\x78\xf2\xb6\x5a\x95\x2e\xfd\x86\x56\x66\x04\xca\xa7\x61\xcc\ +\x40\xa4\x02\x78\x59\x3d\x14\xe3\x34\xcb\x91\x23\x96\xae\xa7\xa7\ +\x4f\xdf\x82\xb4\xb0\x17\xb8\x4f\xda\xdd\xa9\xd3\xe5\x8b\x16\x16\ +\xbd\x35\xd2\xca\x72\x92\x91\x2d\xd3\xd7\xf7\xc1\xf6\x3a\xc8\x71\ +\xe4\x48\x03\xf1\x0f\xc1\xe0\x6d\xa4\xc1\x8a\x02\x05\xce\x21\x4c\ +\xb0\x53\x6e\xc3\xba\x82\xd9\x7f\x20\x6f\xab\x0a\xac\x9f\x94\x90\ +\x30\xef\x99\xa7\xe7\x3a\x72\xa4\x7c\xeb\x73\xc2\xe0\x12\xd4\xe9\ +\x6c\xdd\xbb\x7b\xef\xea\xd4\x49\xed\x3c\xc1\x99\x2e\x0a\xce\x95\ +\xc4\x2b\x36\x36\x8e\xf2\xbc\xd7\x5f\xbe\x7f\x17\x2b\x5e\x10\x38\ +\x30\x39\x39\xb9\xdf\xdb\x80\x80\x35\xf4\xbf\x23\x18\x8c\x74\x58\ +\x29\x86\x83\x33\xc1\x8a\x3f\xf0\x67\x30\x00\x5b\xff\xd9\xca\xec\ +\xbe\x70\xe1\xcc\xf3\x26\x26\x87\xf0\xce\x62\x38\x55\xae\x92\xc1\ +\x2d\xcd\x96\xed\xf3\xc5\xe5\xcb\x77\x63\x6c\x9a\xe6\x79\xcf\xa1\ +\x79\xf3\xd1\x58\xd5\xc2\xe9\x1d\x18\xea\x41\x3c\x6b\x9c\x5e\xdb\ +\x6b\x06\x1b\x9c\xfe\x7f\xe4\x73\xd6\x04\x27\x82\x86\x70\xae\xdc\ +\x81\xb1\x7d\xf1\x5a\xba\xd4\x09\xf7\x33\xc0\x02\x5a\xef\x56\x76\ +\x19\x32\xe4\x2c\x19\x9c\x53\xff\xfe\xb6\x72\x9b\xfa\x3d\x60\x30\ +\x18\x2f\x7d\x7d\xdb\xf9\x6d\xdd\xba\x43\x3a\x58\x0a\xa5\xb2\x05\ +\x2d\x89\x95\x2d\xc6\xa6\x5c\xb9\xd0\xcf\x49\x49\x73\x28\xd8\x2e\ +\xfe\x11\x18\x0c\x4e\x71\xeb\x07\x16\x55\x9c\x47\x32\x0b\x65\x32\ +\x98\x1d\x3f\x6f\xc7\xf5\xeb\xad\x9d\x3b\x1d\xf0\x4e\x3d\xf1\x37\ +\x20\x43\x0c\xa7\xf1\x7b\x7f\x51\xee\xc4\x60\xb0\xf3\xa8\x20\xb2\ +\x50\x02\x64\x78\xe0\x21\xf8\x65\x73\x83\x06\xb7\x60\x6c\xe3\x40\ +\x95\xd6\xbb\x55\x64\x22\xf7\x75\x32\x30\x70\xa0\x34\xb8\xea\x66\ +\x7a\x7a\xef\xe4\x7f\x63\x9c\xf8\x36\x18\x0c\x46\x62\x6c\xec\xe8\ +\xe3\xe3\xc7\xbb\x21\x4c\xf0\x91\x8c\x06\x75\x77\x4f\x8e\x4f\x9e\ +\xdc\x42\xbb\x6a\x02\x8c\x90\x31\xcb\x30\x7a\x4f\x72\x86\xa9\x91\ +\x91\x01\xb2\x58\x3e\x58\xe4\xc9\x13\xfb\xca\xdf\xbf\xb7\x60\x30\ +\x18\x7f\x59\x06\xd4\x2d\xfc\xe9\xd3\x15\xbb\xda\xb7\xbf\x46\x4e\ +\x95\x25\xb0\x43\x13\x21\x7a\x6b\x18\xdc\x51\x8c\x27\x5c\x34\x37\ +\xdf\x47\x61\x94\x88\x67\xcf\x56\x91\x61\xca\xca\xf4\x93\x60\xca\ +\xa9\x69\xd3\x8e\xe1\x59\x27\xf1\xb7\xc0\x60\xb0\xe1\x15\x07\x87\ +\x3f\x3e\x71\x62\x23\xca\x7f\x6e\xed\xed\xd9\x73\x94\x90\x40\xcc\ +\xee\x93\xad\x91\x51\x88\xf4\x6c\x56\x03\xeb\x86\x3d\x7e\x3c\x1e\ +\x21\x04\x75\x20\x7d\x4d\x89\x12\x2f\xe1\x64\x99\x9b\x76\xcf\x2f\ +\x83\xc1\x86\x57\x15\xfc\x03\x9c\x24\x24\xb0\xdd\x8c\xa2\xac\x96\ +\x57\x01\x01\x86\x1a\xef\x65\xc7\xf9\x2f\x8e\xb6\x99\xe4\xf9\xfc\ +\xfe\x00\x39\x83\xc1\x46\x97\x4d\x33\xf3\xc6\xbe\x6e\xdd\x63\xb4\ +\x92\xc1\xc0\x76\x2d\x10\xa2\x90\x2c\xd0\x9d\x45\x63\x70\xb2\x04\ +\xe0\xdd\x09\xa0\x8a\xb6\xa1\xe4\xf5\x04\xef\xe0\x99\x03\x1c\x2a\ +\x55\x45\xda\xc0\x60\x30\x9e\x79\x78\xb4\x44\xce\xe9\x33\x0d\x67\ +\xc9\x07\xba\xc2\x3b\x99\x18\x72\xf5\x2a\x05\xc8\x8d\x70\x3f\x55\ +\x66\xb1\xc4\x99\x65\xcf\x1e\xa9\xfe\x59\xa5\x7a\x89\x6b\x5a\xf3\ +\x53\x19\x0c\x5e\xf1\x12\x3f\x7d\x1a\xeb\x63\x6d\xbd\x77\x4f\xd7\ +\xae\xc7\x51\xa1\x40\x86\x94\x02\x7d\xcc\x3b\x78\x36\x80\x92\x9d\ +\x71\x9f\x00\x6f\xe5\x0b\xd4\xe3\xad\xc5\x98\xe9\xdd\x7d\xfb\xb6\ +\xc2\xf0\x92\x60\x80\x81\xb2\x0a\xbd\xb1\xf8\xdb\x60\x30\xd8\xe8\ +\xb2\x83\xed\xc0\xb1\xa8\xab\xdb\x4b\x62\x4c\x6a\x51\xdd\x7a\xf5\ +\x5a\x2b\x2a\xd1\xa4\x0e\x2d\xab\xd1\xcb\x83\xf5\xf7\x76\xeb\xe6\ +\xa5\xa1\xad\x92\x2c\x6b\xef\xd2\x08\x06\x83\x8d\xaf\xe4\xc7\x77\ +\xef\xcc\x7c\xd7\xad\xdb\x99\x98\x98\x58\x1f\x06\xd5\x01\x4c\x39\ +\xd0\xa7\xcf\x49\xa1\x01\x24\x4b\xef\x95\x82\xb6\xd7\x8e\x8c\x1a\ +\x75\xf2\xd9\x85\x0b\x8d\xc4\x77\x81\xc1\x60\xa3\x2b\x00\xf6\x04\ +\x7f\xfa\x43\x08\x7d\xac\x78\x51\x38\xd3\xd1\x2a\xd6\x9f\x72\x32\ +\xc1\xc1\x38\xc3\x45\xd3\x78\xec\xfb\xf7\x54\x02\x35\xea\x7d\x60\ +\x20\xad\x86\xe3\xb1\xda\x1d\xc1\xf5\x28\xae\x53\x70\xcd\x2f\xd2\ +\x06\x06\x83\x81\xf3\xdd\x52\x25\x2e\xa7\x49\x0f\x63\x63\x17\x18\ +\x5b\x9b\xf1\x42\xe4\xa0\x94\x30\xe9\x58\x89\x05\xe3\xe5\x3b\x81\ +\x7f\xd3\x9b\xc9\xca\xcb\x0c\x06\xad\x6e\xa4\x1c\x56\x6f\xe4\xc8\ +\x6d\x93\xee\xdc\xb1\xe9\x64\x65\xb5\xab\x6c\x93\x26\x9e\x02\x28\ +\x58\xbe\x7c\x48\x1b\x33\xb3\x2b\x64\x8f\x25\x85\xf8\x4d\x25\x44\ +\x17\xbd\x9c\x39\x13\xbb\xad\x5f\xef\x32\x3f\x3c\xdc\xba\xd9\xec\ +\xd9\x47\x55\xd9\xb2\x55\xcc\xa1\xa7\x77\x38\x35\xa5\x68\xf2\x70\ +\x82\x79\x05\x83\xc1\x50\x8c\x42\x8c\x90\x4e\x91\x9b\xeb\x6b\xd6\ +\x1c\x1c\xe0\xec\x3c\xca\xba\x5c\xb9\x07\xd4\x6c\xe4\x9e\xb3\xf3\ +\x16\x52\x8f\x96\xef\xed\xc5\x16\xf3\x8b\x65\xc9\x92\xef\xe8\xd9\ +\xaa\x22\x45\x0e\x23\xab\x65\xb0\xcb\xd0\xa1\xe7\xe8\xf7\x2d\x8b\ +\x15\xeb\x22\x24\x34\x2a\x19\xde\x81\xd6\x72\x88\xc1\x60\xf8\xf9\ +\xf9\xe5\x80\xcc\xfa\x61\x24\x35\xc7\x29\xdb\x48\x18\x54\xfc\x99\ +\x59\xb3\xa8\xca\x7c\xb4\x90\x80\x5a\xd8\x0e\x7a\x16\xe4\xe5\xb5\ +\x16\xc9\xd2\xc7\xf0\x7e\x34\xe9\x64\xae\x2a\x54\xe8\x3c\x8d\xef\ +\xef\xd3\x67\xb9\x14\x3d\x1a\x88\x7b\x5f\xf0\x14\x8d\x5f\x58\xb6\ +\x0c\x17\x4d\x30\x18\xec\x40\xe9\x0c\xe5\xb0\x55\xc7\xc6\x8c\x39\ +\xe9\xd8\xba\xb5\xdb\x03\x57\x57\x8a\xc5\xcd\x01\x4b\x08\x89\xfd\ +\x7d\xfb\xf6\xa2\x95\x0d\x4e\x94\x47\x4f\xcf\x9d\x1b\x42\xc9\xd2\ +\x3b\x5a\xb5\xba\x80\x31\xb5\x92\x18\x56\xc6\x59\x02\x30\x33\x30\ +\x68\xa9\x04\xce\x51\x81\x10\xf3\xe8\xf8\xf1\x25\xe2\xff\x83\xc1\ +\xe0\x50\x01\x38\x00\x9c\x0d\x8e\x00\xf3\x69\x3d\xcf\xed\x3a\x6c\ +\x98\x1b\x19\x1d\x18\xb1\x3c\x7f\xfe\x9d\x3e\x56\x56\x66\x8f\xdd\ +\xdc\x36\x62\x75\xbb\x84\xe7\x7d\xe4\x7b\xf9\xd7\x56\xaa\xf4\x9c\ +\x3c\x9e\xa4\xbd\x82\x77\x93\x60\x7c\x56\x73\x85\xc8\x27\xd2\x04\ +\x06\x83\x8d\xb2\xd1\x75\x7b\xfb\x9d\xd0\xc8\xbc\x2d\x0d\x29\x05\ +\x2b\x9e\xa7\x4c\x96\xfe\x49\x9e\xf5\x06\xd0\x38\xe4\xda\x2f\x04\ +\x9e\x39\xb3\x61\x5d\x95\x2a\x8f\xe4\x19\xd1\x5d\xa4\x19\x0c\x06\ +\x1b\x5d\x6d\x70\xf6\x87\x27\x4f\x56\xe3\x2c\x77\xf4\xd4\x1f\x7f\ +\x2c\xc3\x7d\x2e\x45\xd6\x8f\x64\xfa\x48\x39\x8c\x02\xeb\x18\xff\ +\x19\x9c\x0a\x91\xde\xdd\x57\xd7\xad\x5b\xf1\x5f\x28\xff\x51\x89\ +\x74\x06\x83\x21\xa5\xf7\x2a\x82\x75\xc0\x62\xe0\x41\x15\x82\xe4\ +\x14\x2c\xc7\xfd\x81\xa6\x33\x67\x1e\xeb\x6c\x63\x63\x87\x31\x2f\ +\xf9\xee\x2f\xe0\x4f\xa0\x2b\xc6\xe2\xc5\x3f\x07\x83\xc1\x90\x1e\ +\xca\x14\xc7\x36\x6d\x2e\x07\x04\x04\x64\xa4\x62\x18\x83\xc1\x08\ +\x0c\x0c\xd4\x27\x99\x07\x19\x5e\x78\x01\x03\x5c\x8f\x6b\x8f\xef\ +\x6d\x9f\xbc\x58\x88\x9f\xf1\xfb\xfd\xbe\xb1\x53\x63\x30\x18\x90\ +\x58\xef\x7a\x62\xf2\xe4\x93\x56\xa5\x4a\xdd\x57\x9a\x8f\x98\x08\ +\xd1\xf6\x3b\x83\xf2\xbb\xa5\xf1\x7a\x53\x20\x5d\xa4\x0a\x06\x83\ +\xcf\x78\x1d\xc1\x45\xd4\x15\x28\xf8\xca\x15\x2b\xdc\xb7\x11\xdf\ +\x81\xb3\xf3\xe7\xb7\xa3\xec\x16\xd4\xe9\x05\x7e\x08\x0c\xfc\x93\ +\x24\x69\x06\x83\x8d\x2e\x87\x14\x2c\xea\x00\x96\x15\xdf\x81\xa5\ +\x7a\x7a\xfb\xd4\xc2\xb6\xbb\x76\x39\x90\xf0\x91\x48\x3b\x18\x0c\ +\x06\x55\x8f\x93\x4a\xb4\xb1\x10\xe5\xfe\xe4\x9d\x26\xe0\xd7\x0d\ +\x35\x6a\x3c\x7c\x70\xe4\x88\x89\xf3\xc0\x81\x7a\xe2\xbb\xc0\x60\ +\xb0\xc1\xed\x04\x53\xcc\x72\xe6\xdc\x2e\x52\x87\x0a\x06\xa9\x76\ +\xbe\x28\xc4\x7d\x30\xae\x15\xb9\x3c\x47\xfd\x7f\x8e\xa0\x6e\x9c\ +\xad\xc4\xdf\x00\x83\xd1\xc1\xca\x6a\x7d\xd5\x3e\x7d\x2e\x0f\x3d\ +\x75\x2a\xe4\x1b\x06\x39\x5c\x85\x55\xd0\xb0\x55\x2b\xff\xee\x1b\ +\x37\x3a\xa0\x74\x68\x97\x5e\x8e\x1c\xc5\x54\x7a\x7a\x67\xfe\xf3\ +\x29\x62\xb2\xea\x37\x65\x75\xb1\x62\x4b\x71\xcd\x6f\x2c\x44\x25\ +\xc1\x60\xfc\x75\x5f\xbc\x31\xe0\x20\xcd\x71\x2a\x72\x85\xb1\x15\ +\xa7\x9e\xed\x10\x3a\xfa\x10\xfb\xe1\x03\x55\x9a\x0f\x04\xfb\x61\ +\x4b\xa9\x2e\x03\xb2\x2a\x57\xae\xe3\x7f\x75\x5b\x50\x1f\xac\x02\ +\xc6\xa2\x36\x2a\x34\x36\x2c\x6c\x1e\x8c\xcf\x0b\xf7\x97\xc4\xf7\ +\x81\xc1\x81\x73\xd2\xcf\x4c\x02\x53\x3c\x97\x2c\x71\xa6\x7e\xed\ +\x42\x02\xe9\x62\x97\x28\x21\xfa\xe5\x8d\x1b\x03\xfe\x73\x5b\x4a\ +\x18\x15\xb9\x79\x6f\x82\x77\x85\x4a\x65\x80\x65\xdf\x6d\x7f\x8f\ +\x1e\xe5\x54\x18\xaf\xde\xb7\x6f\xc4\xf7\xf4\x25\x63\x30\x0c\x9b\ +\x35\xdb\xae\x9f\x3f\x7f\x98\x00\x9e\x9e\x39\x63\x84\xcb\x15\x50\ +\x98\x08\xd1\x3d\x39\x3e\xbe\x65\xa5\x4e\x9d\xae\x97\x6d\xd8\x30\ +\x42\xfc\x17\x61\x5b\xb1\xe2\x75\xe5\x40\x6b\xf7\xd3\x4f\x77\xb0\ +\xba\x7d\x42\xb0\xf3\x39\xfa\x56\x1b\xcb\xd2\x8e\xb4\x82\xc1\x5b\ +\xcd\xd2\x09\xb1\xb1\x8b\xa8\x1b\xd0\xb9\xb9\x73\xad\x97\xe5\xcb\ +\x57\x15\xab\xde\x1a\xf0\x31\xfa\x9a\x47\x47\x86\x84\x58\xe0\x9d\ +\xc2\xff\xa5\x6d\x64\x5e\x18\x96\x19\x29\x3b\x21\x46\x92\x00\xbd\ +\xfa\xd7\xdb\x5b\xb4\xb8\xa9\x18\xde\x8e\xd6\xad\xfd\x92\x92\x92\ +\xfe\x89\x94\x1a\x83\x8d\x2e\x37\xd8\x03\x9c\xba\xb2\x48\x11\x92\ +\x5e\x4f\x56\x4b\xb2\xd7\xaf\x7f\x1f\x59\x2c\x9d\xff\x6b\xe7\xb6\ +\xf2\xa8\x83\x8a\x52\x0c\xec\xfa\xc6\x8d\x3b\x0f\xf6\xed\x7b\x82\ +\xee\x91\x0d\x10\x41\x7b\x6c\xe8\xd7\x57\x10\x40\x2a\xcd\x00\x2f\ +\xa6\x55\xbd\x97\xc1\x7d\xdc\xef\xbb\xb8\x6c\xb4\xab\x54\x29\x08\ +\x2b\xdc\x27\xc7\x6e\xdd\x4a\x8a\xff\x1a\x76\x77\xea\x74\x52\x31\ +\x38\x74\x65\x89\xc3\x35\xc1\xb6\x7c\xf9\x67\x5f\x92\x93\x97\x46\ +\x04\x05\xad\xc2\x92\xdf\x44\xbb\x3c\x88\xb4\x0c\x29\x45\x67\x79\ +\xbe\x7c\xcb\x44\xda\xc0\x60\xa3\xab\x02\x4e\x8f\x0b\x0b\xb3\xc0\ +\xf5\x67\xf1\x5f\x02\xb5\xa7\xc5\x0a\x97\x60\x63\x64\xf4\xf2\xda\ +\x86\x0d\xbb\xc8\x88\xd4\x8a\x4d\xc5\x8b\xbf\x7b\x78\xe4\x48\x67\ +\x18\x5b\x03\xb0\x80\x3c\xe8\xb6\xc4\xaa\x16\x86\xe7\x4b\xae\x6e\ +\xdb\x56\x02\xda\x16\xeb\xe3\xc3\xc3\xe7\xcb\xae\x2e\x69\x05\x83\ +\x65\xda\xeb\x81\xb9\xff\x6b\x6e\x5b\x1f\xea\xa4\xf9\xf4\xec\xd9\ +\xf5\x10\x9b\xd9\xa7\x6e\x08\xd1\xa4\xc9\x9d\x75\x95\x2b\x07\xee\ +\xeb\xd1\xa3\x9a\xb6\x4c\x1a\xb6\x99\xb7\x95\x52\x8d\xc3\xa3\x46\ +\x0d\x24\x83\x14\x7f\x0f\x0c\x06\x03\xc1\xc8\x63\xe7\xe6\xcd\x73\ +\xf1\xdf\xb1\x63\x11\xb5\xb5\xc5\x56\xf2\xf1\xe7\xcf\x9f\x17\xc1\ +\x90\x16\xa7\xd6\xae\x36\x29\x2e\x6e\x0a\x49\x65\x2f\xd3\xd7\x8f\ +\xbd\xb0\x6a\x55\x75\x91\x66\x30\x18\x5c\x76\x31\x17\x86\x67\x4b\ +\xba\x84\xb2\xb5\x51\x6d\x30\x0f\xa8\x12\x5a\x80\x03\xe5\x0f\x5a\ +\xe1\xc8\xcd\x8b\xe7\x5d\xff\x4a\x01\xf8\xff\xab\xf4\x32\x18\xbc\ +\x97\xce\xfb\xf0\xe8\xd1\xd2\xef\x1f\x3e\x5c\x8d\xfb\xc1\x5a\xde\ +\xc8\x6e\x14\x37\x59\x20\x44\x11\xfc\x5c\x18\xfc\xb0\xba\x48\x91\ +\xd7\x49\xf1\xf1\x0b\x14\xa1\x19\xad\xf7\xf3\xcb\x74\x9e\x3a\xb2\ +\xeb\x66\x12\x78\x05\x1c\x25\xfe\x07\x0c\x06\x1b\x5e\x4b\x50\x5f\ +\xeb\x8c\x37\x57\x66\x76\x87\xe3\x7a\x01\x4c\x81\x5a\xd3\x6e\xbc\ +\x97\x5a\x38\x40\x85\xe7\xa1\x14\xd4\xc4\xf5\x2d\xc4\x43\x43\xe0\ +\x01\x75\x86\x78\x68\xb0\x3c\xf7\xed\x07\xff\x24\x53\x86\xc1\x60\ +\x43\x2c\x4f\xde\x4b\xe8\xcc\xbf\x92\x61\x83\xc4\x8b\x2b\x56\xac\ +\xc3\x78\xaa\x86\xb3\xa3\x4d\x9b\xe9\x66\x39\x72\xc4\xd3\xbb\x36\ +\xe5\xca\x85\xa2\xee\xc9\x22\x3e\x22\xc2\x74\x67\xbb\x76\xd7\x69\ +\xcb\xba\xaa\x54\x29\x43\xf1\xa7\x60\x30\xd8\xe8\x1a\x20\xbd\x6b\ +\xc1\x89\x89\x13\x4f\x5a\xe4\xca\x15\xa7\xac\x56\xa9\x09\xc9\x5c\ +\x30\x33\xeb\x4a\xc1\x72\x0a\x9a\x23\x73\x85\xf4\x2f\x92\x70\xee\ +\xb3\xfa\x9c\x98\x38\x98\xe2\x7a\x30\xd4\xa6\xe2\x2f\xc1\x60\xb0\ +\xd1\xe5\x02\xbb\x86\x3f\x7f\xbe\x62\x77\xc7\x8e\x57\xd0\xf0\xe1\ +\xbe\x5d\xe3\xc6\xf9\x53\xcd\x0e\x87\x36\x7d\xe0\xa9\x53\x1b\x9e\ +\x79\x7a\xae\x83\xa2\xef\x7d\x6c\x2d\xa3\x97\xe7\xc9\x53\x82\x94\ +\x7c\xd3\x96\x93\xc9\x60\xb0\xe1\x15\x03\x87\x81\xa6\x60\x03\x19\ +\x10\xa7\xfc\xb8\x91\xb8\x76\xa6\xd5\x6f\x67\x87\x0e\x57\xe4\x3b\ +\x95\xc0\xc9\xc9\x9f\x3e\x99\x29\x67\x3e\x3c\xef\x03\xfe\x1d\x01\ +\x1a\x06\x83\x1b\x32\x42\x65\x37\x0c\xdc\x8b\x9b\xcd\xa0\xbf\xcc\ +\xf5\x1a\x05\xee\x04\x4f\xa2\xb9\x5f\x6c\xcf\xad\x5b\x2f\x60\xf8\ +\x2c\xde\x7b\x46\xef\x65\x37\x30\x70\xc2\xf5\x1e\x0c\x2d\x27\xae\ +\x6b\x41\x4f\xfc\x3c\x55\xde\xa7\x05\x0c\x06\xe3\x43\x50\x50\x93\ +\xc3\x23\x46\x9c\x93\xce\x92\xaf\x6b\x2b\x54\xf0\x4a\x4d\x4c\x86\ +\x3c\x94\xd8\x8a\x3e\x91\x2d\x6e\x93\x70\xfd\x4c\x5b\xd0\xb4\xc7\ +\xea\x18\x0c\x96\x4f\xeb\xf9\x36\x20\xc0\x92\x4a\x7b\xd4\xed\x8f\ +\x84\x88\xa1\x3c\x4d\xad\xf3\xdd\x18\x59\x96\x11\xe0\x36\x65\x8a\ +\xd3\xc6\xda\xb5\xcf\x90\x81\xc2\xf8\xce\xa7\x3d\x5c\xc0\x60\xb0\ +\xe1\x95\x02\x7f\xbf\x7f\xe8\xd0\xe6\x5d\x1d\x3a\x78\xfa\xda\xdb\ +\xd7\xd5\x88\xcf\xe5\x07\xdf\xae\x28\x50\x20\xec\x53\x74\x34\x9d\ +\xe9\xc6\x83\x13\xa1\x59\x7f\x83\x8c\x10\xc1\xf4\xef\x6c\xe2\xce\ +\x60\xb0\xe1\xd5\x02\xa7\x83\xad\xe4\xca\xe6\x46\x01\x71\x30\xe5\ +\x82\x85\xc5\x41\x8c\xb7\x10\x12\xd8\x62\x5e\xa7\xd8\xde\x9b\x7b\ +\xf7\xda\xfe\x45\xdd\x5e\x3d\xea\x2d\xbd\x48\x88\x32\x42\x57\xc1\ +\x60\xc8\x7c\xc6\x1a\x22\x0b\xb1\xa6\x74\xe9\xb9\x54\x4d\x4e\x06\ +\x77\x74\xf4\x68\x27\x18\x9c\x9e\x92\x36\x46\x63\x7b\xbb\x76\xf5\ +\x21\x23\x94\x63\xa5\x61\x58\xcb\x65\x56\xca\x0a\x6c\x4b\x2b\x2b\ +\x5d\x5c\x40\x2a\x1d\x8a\xa5\x32\x21\xa1\x8b\x60\xb0\x97\xb2\xb0\ +\x10\x8e\x29\xea\x9c\x46\x91\x65\x75\x47\x73\x5e\xbd\x3a\x33\xc6\ +\xc7\x67\xa3\x61\x8b\x16\xfe\x30\xac\xc0\x79\x2a\x55\x6e\xea\xaa\ +\x89\x47\x36\xf0\x60\xc6\x74\xdf\xb2\xc5\x0b\x3f\x07\x60\xac\x46\ +\x8a\x10\xf7\x55\x42\x2c\xc2\xfd\x10\x70\x21\x3e\x2c\x95\x03\x35\ +\x6e\x6b\x6a\x7a\x59\x3f\x6f\xde\x78\xfd\x7c\xf9\x12\xc7\xfb\xfb\ +\xc7\x08\x5d\x05\x83\x7b\x7b\x6d\x69\xd0\xe0\x32\xa4\x13\x1a\xe1\ +\x67\x5f\xb0\x4a\x16\x6d\x33\x0d\xe5\xb9\x6d\x36\x32\x51\xfa\x2a\ +\x15\xe6\x07\xfa\xf6\xbd\x28\xcb\x80\x94\xda\xbc\x78\x94\x0b\x1d\ +\xa4\x4a\xf3\x1b\x9b\x37\x3b\xa2\x8a\x21\x0a\x63\x1f\xa4\xb2\xaf\ +\x22\xb5\xd6\x5a\xe8\x10\x18\x6c\x68\xd6\x30\xac\x33\xb8\x86\x41\ +\xfb\xef\x03\x94\x91\x56\x20\xd3\x83\xee\xbf\xec\xef\xdb\xb7\xbb\ +\x0e\x24\x49\xab\xdc\xa6\x4e\x3d\x80\x7f\xd3\x47\xa8\x82\xbd\xc4\ +\xbd\xfe\x42\x21\x4a\x90\xc7\x72\x4b\xc3\x86\x77\x65\x13\xf8\x5f\ +\xc0\x8e\x77\xf6\xec\xb1\x92\x5e\xcf\x14\x92\x7d\x40\xad\xde\x4c\ +\x9d\xaa\x30\x67\x30\xe0\x09\x9c\x43\xee\x76\x30\x05\x8d\x13\x02\ +\x77\xb6\x6f\x6f\x4f\x3f\x23\x73\xdf\x9b\x14\x6f\x75\xc4\xb1\xd2\ +\x02\x3d\xa3\x97\x45\xbf\x7a\x45\xfd\xa4\xa9\xf4\xa7\x28\x98\xb2\ +\xad\x69\xd3\xdb\xb8\x2f\x28\x24\x7c\xd7\xad\xab\x40\xe3\x64\x74\ +\x10\x9f\xd9\x8c\x67\x35\x85\x2e\x80\xc1\xa0\x73\x1a\x0e\x3f\xa5\ +\x1c\x9a\x37\x27\x83\x4b\x59\x59\xa8\x50\xa4\x86\x38\x50\x2c\xfe\ +\xb8\x49\xb4\xa5\xa4\x0e\x79\x33\x0b\x83\x4d\xe4\x8a\xa5\x5a\x53\ +\xb2\xe4\x53\xf9\x45\xf1\xab\xc6\x67\x9a\x01\xa6\x6c\x6f\xd5\xea\ +\x26\xde\x1b\x25\x75\x58\x6a\x62\xcc\x02\x2b\xb6\x2d\x38\x08\xcf\ +\x0d\x44\x16\x80\xc1\x06\xe7\x4c\xe2\xad\xb8\x46\x61\x95\x7b\xf7\ +\xf1\xcd\x9b\xe5\x36\x86\x86\xa1\x8a\xd1\xad\xab\x56\xcd\x45\xe8\ +\x30\x7c\xac\xac\xa6\xe0\xcc\x16\x43\x46\x07\x43\x7a\x09\xde\x94\ +\x5f\x16\xf1\xef\x1f\x3c\xa0\xe2\xd8\x92\x18\x9b\xa0\xac\xde\xca\ +\x15\x63\xcf\x32\xdd\x13\xcb\x60\xb8\x8e\x1c\xd9\x84\xfe\x38\xc9\ +\xb8\x20\x5f\x17\x63\x57\xa5\xca\x49\xb5\xdb\xbd\x7b\x77\x9f\x33\ +\x33\x67\x1e\x45\x5d\xdb\xec\xbf\x30\xd8\x8a\xf3\x85\x28\x90\x85\ +\x2b\x5e\xfe\xd7\x37\x6f\x2e\x77\x1d\x36\xec\x2c\x54\xc4\x7c\x10\ +\x4a\x20\xe3\x4b\x39\xd8\xbf\xff\x05\xca\x64\x21\x0d\x4d\xf0\x33\ +\x6d\x2f\x4f\x4e\x9e\x7c\x0c\x46\x68\x89\xeb\x09\xbc\x97\x04\xc7\ +\xca\xbb\x4c\x4d\x11\x63\x30\xb0\x25\x9b\x48\x06\xb6\xa9\x4e\x9d\ +\x87\xca\x76\x92\x64\xef\x20\x77\xb7\x01\xab\x43\x6f\x70\x24\xa8\ +\x47\xb1\x39\x8a\x65\x81\x6d\x35\xb7\x63\x58\x29\xa2\xc1\x77\xe0\ +\xb8\x2c\xde\x66\x0e\x07\x17\x1e\xe8\xd3\xe7\x22\x0c\xe9\x0b\x09\ +\x86\xba\x0e\x1d\x5a\x56\x26\x3c\xa7\x90\xb3\x85\x3e\x17\x9c\x28\ +\x87\x5f\xf8\xf8\x0c\xf7\x58\xb4\xc8\x49\x76\xfb\x99\xfb\x27\xab\ +\x7f\xc1\x74\x4b\x1f\x63\x30\x28\x03\x03\x86\x12\xb9\xb2\x60\xc1\ +\xd7\x10\xd8\x5c\xb6\xae\x4a\x95\x40\xfa\x63\xa5\x2c\x0e\xc8\x97\ +\x7b\x0b\x09\x18\x59\x7b\x25\xeb\x43\x32\x82\xce\x41\x02\x70\x68\ +\xd6\x6c\x25\x8d\x61\x3b\x7a\x5c\x07\xce\x77\x2a\xb0\xe9\xe3\x13\ +\x27\x36\xc2\xa3\xe9\x14\xf7\xe1\x43\x19\xd4\xd5\xa9\xbf\x50\x2e\ +\x2c\x5b\x76\xf0\xf0\xf0\xe1\x27\x11\x5e\xf8\x48\x9f\xd9\xba\x6c\ +\x59\x7b\x1a\xdf\xd2\xa8\xd1\x71\xa1\x01\xd2\x61\xa1\xab\xdc\x86\ +\xc6\x4a\x99\x88\xc3\xe9\xb1\xfd\x64\x70\x28\x60\x12\x0c\x2c\xf1\ +\xf6\xde\xbd\xdb\x76\xb5\x6f\xbf\x86\x0c\xc7\x69\xe0\x40\x2f\x6a\ +\x82\x1e\xfb\xee\xdd\x42\xea\xdf\x85\x31\x43\x90\xe2\x5a\x9f\xa0\ +\x39\x79\x6c\x4f\x97\x2e\x9e\x48\xad\x0a\xc5\x6a\x91\x48\x86\x88\ +\x6a\x6e\x7f\x64\xfc\x27\x85\x5e\xbb\x66\x83\xf7\x8b\x0a\x1d\x80\ +\xec\x29\x3d\x16\xac\xb4\xa9\x61\xc3\xaa\x30\xba\x24\x54\x93\x07\ +\x3f\x3e\x7d\x7a\x14\x9d\xeb\xb6\x36\x6e\xec\x4d\xdb\x4c\xa9\x24\ +\xe6\xa4\xb1\xa2\xb5\x93\x67\x3c\x7a\x9e\x02\xa3\x3c\x8f\x90\x83\ +\x1b\xc5\xf9\xf0\x79\xe3\x30\x36\x58\x7c\x2f\x18\x8c\xdb\xbb\x77\ +\xe7\x09\xf6\xf1\xb1\x8c\x78\xf1\x62\x1a\x65\xea\x63\x7b\x15\x82\ +\xae\x25\x26\x32\xaf\xb1\x29\x48\x5d\x4d\x17\x92\x21\x5e\xb1\xb5\ +\xdd\x83\xfb\xb9\xe0\x64\x64\xf8\xaf\x86\xd1\x45\xe0\x5c\x94\xa4\ +\x36\xd2\x01\x03\xbc\x30\xde\x5f\xe8\x28\x60\x54\xce\x6a\x75\x68\ +\x95\xea\x3d\x7a\xd8\xad\x0d\x70\x71\x59\xf0\xc0\xd5\xd5\x7e\x43\ +\xcd\x9a\x8f\xde\x3d\x78\xb0\x50\xc3\xe0\x72\xa2\xda\xfc\x8c\xb2\ +\x92\xe3\xcb\xc5\x3b\xfa\xf5\xeb\x99\x24\x78\x8b\xad\xf7\x6b\xec\ +\x04\xce\x08\x06\xe3\x1f\x6e\xc1\x5a\x45\x44\x44\x14\x40\xf0\xd8\ +\x3e\xe4\xea\x55\x5b\xad\x9e\x00\x02\x5b\xb0\xcd\x64\x54\x21\x57\ +\xae\xcc\x53\xa4\x0e\x70\x35\xd8\xd7\xb3\xe7\x49\x1a\x87\x87\x30\ +\x22\xf6\xfd\x7b\x53\x8c\x15\xd0\xe1\xcf\x59\xf3\xea\xda\xb5\xbb\ +\xe1\x7d\x55\x87\x10\x88\x70\x10\x5d\x87\x6c\xdf\x2c\x0a\x94\x0b\ +\x0d\xec\xea\xd8\x71\x3f\x19\x1b\x04\x90\xde\x4b\xc3\x0b\x45\xf9\ +\xd0\xb0\xcf\x49\x49\x33\x65\xc5\x7a\xba\x39\x59\x18\x2c\xee\x3a\ +\x50\x5b\xc8\x15\x4e\x86\x25\xd2\xa9\xb2\x5f\x73\x1c\x4e\x88\xa3\ +\x34\x7e\xde\xd8\xf8\x10\x7e\xa7\x8d\xd2\xc6\x4a\xc6\xbb\x0c\x75\ +\xd1\xe8\xc0\x05\x2f\x2e\x5d\x5a\x0b\xc7\xca\x99\xcd\x3f\xff\x7c\ +\x28\x32\x28\xa8\xa0\xa6\xc4\x9f\x4c\x82\xfe\x88\xad\xe4\x8b\x2f\ +\x5f\xbe\x2c\xf5\x5a\xba\xd4\x09\x8a\xd1\x61\x30\xce\xa3\x52\x9f\ +\xa5\x0a\xa8\x27\x32\x0a\x0c\xc6\xbd\x03\x07\xca\x91\x9a\x96\x8c\ +\x73\xed\x01\x49\x45\x79\x37\x98\x82\x66\x8c\xc1\x48\x9b\xa2\x55\ +\x82\x44\x5c\xe7\x81\x51\x1a\xb1\x2e\x5f\x13\x21\x1a\xe8\x60\xd1\ +\x6b\x6d\xa9\x9d\x62\x0c\x56\x95\x95\x11\x0b\x64\x29\xcf\x2e\xfa\ +\x9c\x74\xa6\xc5\xb3\xfa\x60\x4b\xac\x82\xc6\x58\xdd\x4c\x32\x6d\ +\x65\x63\x30\x5e\xf9\xf9\x4d\xb7\xaf\x5b\xf7\x01\x9c\x0f\xb1\x64\ +\x50\x4a\xda\xd4\x3d\x67\xe7\x2d\x74\xde\xc3\xfd\x68\x1a\x43\x0e\ +\xe6\x4b\xac\x1e\x87\xe0\x94\xb8\x88\x77\x3f\xe2\x1d\x8a\xef\xb5\ +\xd0\xd1\x15\x3d\x9b\xc6\xaa\x16\x89\xeb\x67\x99\x97\x79\x8b\x1c\ +\x2e\x1a\xef\xe5\x03\xab\x89\xcc\x02\x83\x41\xe7\x33\x70\x02\x69\ +\x44\x92\x7b\x9d\x8c\x8b\x74\x24\xb1\x9d\xb4\x95\x5b\x31\x7f\x1a\ +\x83\x91\x25\xef\xeb\xde\xdd\x1d\x8e\x86\xd9\x10\x73\xb5\x27\x3d\ +\x4a\xc4\xc3\xee\x09\x1d\xc7\x93\x73\xe7\x66\xdb\xd7\xab\x77\x97\ +\x3e\x03\xc5\xef\xac\xcb\x95\x5b\x4a\xd2\xeb\x22\x0b\xc1\x60\xa3\ +\xd3\x03\x0d\xc1\xa6\xd7\x37\x6d\xda\x8c\xb3\x5d\xb0\x43\x8b\x16\ +\x2b\x05\x80\xac\x8d\x08\x4a\x07\x43\xd8\xe0\x12\x85\x0b\xc8\xd1\ +\x00\x6f\xdf\x34\xc4\xb8\xfc\xc8\x10\x4f\x4e\x9a\x54\xe8\x1b\x61\ +\x89\xa1\xa0\x2b\x38\xdd\x58\x88\x0a\x59\xf8\xd9\x4a\x82\x13\x6e\ +\x6c\xd9\xe2\x88\x4a\x84\x57\x32\xf5\xcb\xeb\x3b\x53\xe5\x4a\x4b\ +\xd9\xf6\xb5\x60\x41\xf1\x4f\xc1\x60\xc8\xf3\xcd\x1c\x70\x81\x00\ +\x2c\x4b\x94\xb8\x8d\x56\x54\x09\xf7\x0f\x1f\x9e\x1b\x74\xf1\xa2\ +\x1d\x02\xe8\xfe\x72\xdb\x99\x40\x4a\xca\x2f\x7d\x7d\x9b\x68\xf6\ +\x1d\x00\xed\xf0\x7c\x83\xcc\x79\x0c\x92\xe7\xc3\x38\x70\x4c\x16\ +\x7b\x6c\xeb\x43\x2d\x7a\x1e\xa5\xb4\x1d\xe8\xd7\x6f\x07\xee\xf5\ +\xbf\x27\x19\x1c\xab\x7f\xb4\xdc\x7a\xa7\x5f\x1e\x2a\x83\xfb\x2e\ +\x2b\xa1\x80\xb3\xf3\xe6\x4d\x40\x70\xf8\x33\xb6\x99\xe1\x28\x5c\ +\x9d\x1a\x17\x11\xf1\x07\x4a\x64\x76\x22\x55\xec\xe5\xc6\x5a\xb5\ +\x1e\x6b\x86\x1a\xd0\x2b\x40\x1d\x60\x97\xfd\xc0\x43\x48\xf0\x95\ +\x32\x43\xd6\x94\x28\xf1\x4a\x8e\xb7\xd2\x81\xcf\xd5\x49\xd6\xd7\ +\x95\xf8\x0e\x83\x1b\xa0\x7c\xbe\xad\x8d\x1a\x5d\x26\x47\x8d\x48\ +\x67\x30\xd8\xf8\xf2\xa1\x3a\x7c\x1b\x9c\x26\x31\x4a\xea\x17\xb6\ +\x9c\x2e\x38\x1b\x59\xbe\xbd\x7b\x77\x0d\x29\x73\x69\xbc\x5b\x4f\ +\xb3\x1a\x61\x99\x81\xc1\x53\xa7\xfe\xfd\xc7\xc5\x86\x85\xcd\x25\ +\x37\x7c\xd0\x85\x0b\x6d\x7f\xe0\xca\x0b\x03\xac\xd2\x41\x74\xbe\ +\x95\x95\xe9\x94\x40\xad\x52\xf2\x32\x97\xe0\x92\x5e\x5b\x67\x06\ +\x1b\x5d\xe5\x84\x98\x18\xe3\x0b\xe6\xe6\x07\xd0\x7a\xd8\x8f\xce\ +\x72\xc8\xcc\x58\xac\xdd\x88\x43\xca\x96\xa7\xc0\xb9\xe2\x7d\x62\ +\xf2\xe4\x93\xd8\x8a\xaa\x4b\x6b\x90\xc9\xd1\x4a\x26\x4b\x37\x14\ +\x1a\x30\x11\xa2\x2b\x55\x24\xfc\x20\xa9\x72\xc6\x64\x68\x48\x93\ +\xbb\x46\x57\xb4\x57\x3e\x22\x8d\xad\x15\xf8\x42\x9e\x0d\x3f\x81\ +\x83\x04\x83\x91\x2e\x59\xfb\x72\x3b\x96\xf8\xf1\xe3\x32\x5c\xa7\ +\x08\x80\x3c\x7e\x24\x87\x20\x63\x5e\x4f\xe1\xbd\x8c\x44\x61\xab\ +\x39\x9e\xf7\x08\x7f\xfa\x74\xc5\xb9\xf9\xf3\x0f\x45\x05\x07\x37\ +\x48\x65\xc5\xc8\x4b\xc9\xc3\x60\x1c\xf5\x0a\xd7\xf5\x44\x70\x19\ +\x34\x0f\xf2\x34\x31\xd9\x41\xc6\xe5\xf6\xc7\x1f\x8e\xb8\x5a\x80\ +\x9f\x35\xb6\xd1\xef\xb0\xcd\x36\xc7\xfd\x1c\x70\x98\x5a\xf5\x9d\ +\xc1\xf8\xa7\x31\x2e\xd9\xf5\xc6\x48\x1a\xce\x66\xf9\xcd\x7e\x9e\ +\x56\x80\xb3\x73\xe6\x1c\xc1\xb3\xf6\xf2\xdd\xa2\xe0\xaf\x60\x3d\ +\x0d\x43\x1b\x8d\x77\x7f\xc7\x35\x9b\xcb\xb0\x61\x53\x91\xab\x79\ +\x8a\x12\x91\x85\x8e\x42\x26\x3d\x1f\x24\xfd\x97\xbb\x07\x0e\x6c\ +\x45\x1c\xd2\x54\x86\x18\xa2\xa5\x91\x3d\xc1\xd9\x35\x11\x69\x70\ +\x1f\xa3\x43\x43\x57\xc4\x7e\xf8\xb0\x04\x0e\xa5\x00\xb9\xe2\x5d\ +\x4c\x57\x75\x34\x06\x63\x7f\xaf\x5e\x3f\xe3\x9b\xff\x81\x52\x6b\ +\x77\x7a\xfa\xf4\x03\x81\x81\x81\xdf\xf4\x00\xe2\x9d\xb3\x72\xfb\ +\x75\xf3\xe8\xef\xbf\xff\x2e\x93\xa6\x4b\x0a\x1d\x84\xb1\x10\x46\ +\x52\xfb\x32\xc5\xb6\x42\x85\xe7\xc8\xbc\x19\x6b\x9a\x2d\xdb\x22\ +\x25\x39\x00\x09\xd0\x67\x50\x97\xe7\x4e\xf7\xe4\xfd\xc4\xe7\xe8\ +\x0c\xe6\x83\xca\xf4\x5e\x59\x91\xe0\xef\xd8\xad\x9b\xfa\xb3\xc9\ +\xde\x79\xff\x1c\x0c\x0e\x9c\xe3\x0f\x71\x9a\x97\x99\x99\x13\x55\ +\x19\x48\x63\xba\xaa\x34\xef\xd0\x06\x64\x1e\xda\xec\xee\xdc\xf9\ +\x2a\xbd\x87\xd2\x9f\xd3\xba\xae\xb8\x75\x72\xea\xd4\x15\x38\xaf\ +\x86\x93\x01\xc1\xdb\x6a\x8d\x1a\xc1\xaa\x0e\x4d\x9b\xde\xba\x6e\ +\x6f\xbf\xf3\xed\xbd\x7b\x2b\x11\x1a\x89\xc5\x19\x35\x04\x29\x62\ +\x73\x94\x50\x83\x55\x99\x32\xd3\xe9\x7d\x5a\x11\xe9\x9c\x8b\x9f\ +\x3b\x81\x51\xe0\x22\xda\x7a\x8b\xf4\x00\x83\xfb\x81\xa3\x95\xb0\ +\x89\xcb\x90\x21\x1e\x88\xbf\xc5\xac\x2e\x51\x62\xd0\x37\xde\xcd\ +\x69\x5d\xa6\x8c\x1f\xc5\xf0\x9e\xb9\xbb\xdb\xe2\xbe\xa0\x8e\x7f\ +\xb6\xba\xf4\xb9\x50\x06\xe4\x86\xaa\x84\xc9\xb8\xcf\x85\x78\xe4\ +\x02\xa4\xc4\x2d\x5c\x91\x2f\xdf\x3e\x72\x0a\xf9\x3b\x3a\x6e\xc7\ +\xf8\xcf\x42\x02\xdb\xcb\x7e\x64\x70\x90\x7b\x30\xa5\xf3\x2d\x56\ +\xc9\x6d\x74\x2f\x57\x76\x57\x91\x5e\x60\x70\x08\x01\xec\x4b\xd9\ +\xf8\xb8\x8e\xd4\x38\x07\xd5\x07\x0d\x14\x39\x73\xa5\x1e\x0d\xef\ +\x0c\x49\xe5\xcc\x94\x53\x47\x3f\x57\x1f\x70\x84\xfc\x0c\x0f\xc8\ +\x89\x02\x7e\x41\x6c\xf2\xb6\x14\xb4\x55\x69\x7c\x86\x66\xea\xf3\ +\x5d\xd1\xa2\x8f\x70\x8d\x57\xb6\xa4\x47\xc7\x8e\x3d\x7d\x7a\xe6\ +\x4c\x1b\xac\x8a\x4e\x18\x3b\x07\xd6\x11\xe9\x04\x06\x77\xcd\x29\ +\x22\xcf\x41\x95\x14\x25\x2d\xa9\xfc\xfc\x88\x1c\x0e\x10\xa3\xb5\ +\x50\xde\x51\x40\xed\xac\xe4\x1f\xf2\x65\xbc\xa7\xb3\x49\xc5\x27\ +\xa6\x4c\xe9\x8b\x34\xb1\xe7\x64\x48\xc8\xbc\x79\x06\x63\x2b\xa7\ +\xe5\x68\x69\x42\xcf\x64\x48\xe4\xaa\xdf\xd6\xad\x9b\x64\xbd\xdd\ +\x14\x22\x62\x9a\xe7\xe8\xb9\xec\x87\xb7\x5c\xa4\x27\x18\x0c\xe8\ +\x8d\xac\x32\xcf\x95\x2b\x42\xd9\x56\x39\x0f\x1a\xe4\x49\x21\x86\ +\xd4\x1a\x34\x22\x76\xf7\x9a\xde\x81\xe7\xef\x24\xae\x5b\xc1\x66\ +\x3a\xb8\xe2\x95\xc6\x99\x6d\xb6\xc7\xc2\x85\x2e\xa7\x67\xcc\xd8\ +\x47\xdb\x64\x0a\x8f\x28\x31\x45\x18\x11\x49\x37\x24\xdf\xda\xb5\ +\xcb\x41\x1a\xda\x68\xb0\xb2\x12\x40\x47\x22\x78\x94\x65\xc9\x92\ +\xef\x50\xa5\x71\x0f\xe7\x5e\x3f\x8d\x26\x2b\xe9\x72\x9e\x65\xf0\ +\x8a\xd7\x10\xce\x12\xb3\xfd\xbd\x7b\x53\x69\x4f\x32\x79\x33\x61\ +\x50\x5b\xb4\x65\xec\x70\x3f\x58\x51\xe1\x5a\x53\xaa\xd4\x13\x2a\ +\x01\x92\xba\x9a\xed\x74\xd0\xe8\x72\x82\xed\xc0\x3f\xc0\x22\x24\ +\x27\x0f\x26\x83\xc7\xe4\x96\xd9\x47\x6e\x35\x8d\xb4\x3e\xe3\x28\ +\x7a\xee\x36\x6d\xda\x71\x38\x9b\x66\xa3\x37\x9e\x39\x85\x59\xf0\ +\x7b\xb7\x68\xab\x0a\x76\x11\xe9\x00\x06\x1b\x5d\x41\xf0\xd7\x17\ +\xde\xde\x6b\xe9\x9b\x5d\x86\x11\x96\x6b\x26\x06\xc3\xb8\x82\x2d\ +\xf2\xe4\x89\x80\xe4\xf9\x72\x5a\x19\x42\xaf\x5f\xb7\x81\x87\x30\ +\x12\x46\xfa\x46\xe8\x38\x8e\x8d\x19\xf3\xd3\xfa\x6a\xd5\xfc\x94\ +\x55\xdc\xf9\xd7\x5f\x3d\xde\x3c\x7d\x5a\x3c\x95\x8c\x95\x1b\xa4\ +\x15\xfa\xe1\xc9\x13\x63\x7c\xfe\x3d\xf8\x6c\x41\x26\x42\xfc\xb2\ +\xa9\x6e\xdd\x29\x18\x8f\x91\xdb\xef\x2d\x22\x9d\xc0\x60\xc3\x2b\ +\x0f\x4e\x24\xa1\x1f\xe8\xa5\x50\x31\x28\x89\x19\xcd\x07\xf7\x91\ +\x11\xba\x2f\x58\xe0\x8a\xe7\xdd\xc1\x22\x60\x05\x78\x34\x5f\x50\ +\xed\x5d\x74\x74\x74\x11\x1d\xff\x5c\xb9\xc0\x71\x14\x2e\xc0\xea\ +\xfc\x56\x1a\xde\x32\xa1\x01\x32\x2c\x1a\xa7\xb0\x02\x44\x9d\x14\ +\xe3\xa4\xea\xfa\x09\xc8\x57\x6d\x4d\x2b\x3b\x09\xf6\x42\xc6\x7d\ +\x33\x25\x18\xe0\x59\xe1\xf4\x12\xb3\x65\xb0\xc0\x51\x03\x19\xa3\ +\x32\xc0\xd6\xf1\x85\x2c\xe7\x49\x40\x42\xb4\x89\x92\x85\x8f\xb1\ +\x36\x34\xbe\xab\x53\x27\x5f\x8c\xd5\xd4\x4c\xb5\x82\x83\xa5\x36\ +\x9e\xe5\xd7\xc1\xcf\xd5\x10\x65\x40\xf3\xcf\x9b\x98\x1c\x7a\x74\ +\xfc\xf8\x58\xad\xed\xe4\x6e\xe5\x73\x92\x87\x13\x61\x85\x70\xba\ +\x0f\x38\x74\xc8\x04\xd7\x4b\x38\xf7\x25\xdd\x3b\x78\x90\x2a\xed\ +\x17\x82\x25\x31\x16\xa8\x08\xf1\xa6\x9b\x68\x2d\x83\xf1\xfa\xf6\ +\xed\x11\x14\x0c\xa7\x32\xa0\xed\xcd\x9b\x2f\x55\x32\x33\x60\x50\ +\xb7\xa9\xe9\x08\xb4\x34\x57\x91\x6b\x7e\x81\x10\x85\xb0\x12\x9e\ +\xd0\xe8\x21\x10\x87\xab\x83\xae\xad\x02\xa4\x7c\x26\xb3\x4e\xfa\ +\x0a\x09\xca\x17\x85\xd1\x24\x28\x15\xf5\x70\xb8\xec\xb5\xfb\xe9\ +\xa7\x67\x54\x85\x6e\x5f\xbf\xbe\x2b\x8d\x1f\x1b\x37\xee\x38\xad\ +\x92\x4a\x32\x00\x2a\x2d\x86\xad\x2c\x50\xe0\xb5\x5c\x09\xfd\xd3\ +\xb3\xd3\x2b\x83\x65\x1e\x86\x42\xbe\x61\x05\xae\x23\x61\x48\xb3\ +\xc1\x68\xd9\x92\xf8\x34\x6d\x31\xe5\xf9\xc7\x8b\xc6\x50\x02\xe4\ +\x8b\x1c\x4c\x67\x6c\xc5\xee\xc8\x34\x2b\x7f\x5d\xcf\xe0\x80\xc1\ +\x8c\x00\x53\xcc\xf5\xf5\x3f\xd1\xb6\x93\x1c\x26\xa4\x23\x43\x4a\ +\xd8\x14\x3e\x40\xd2\x33\x75\x03\x9a\xaf\x99\x08\x40\x5b\xea\x67\ +\x9e\x9e\x6b\x94\x7e\x78\x44\xda\x7a\xcf\x16\x22\x8f\x48\x07\x30\ +\xd8\xf0\x2a\x81\x46\x96\x65\xca\xd4\x41\xb6\x86\xba\xae\x6e\x77\ +\xc7\x8e\x54\xe8\x99\x5b\x4a\xf4\xa5\x10\x21\xf8\x1a\xee\xbe\x70\ +\xa1\x3d\xc6\x17\x28\xb9\x8c\x88\x6d\xcd\xd5\xf5\x6c\x9c\x8b\xcb\ +\x97\xef\x78\x78\xf4\x28\xc5\xe4\xa6\x20\xdf\xb2\xa1\x62\x44\x28\ +\xe6\x7d\x47\x89\xcf\x18\xaf\x2a\xb4\x00\xa3\x3c\x44\x5e\x5d\xd2\ +\xde\xdc\xd1\xb2\xe5\x0d\x32\x52\x8b\x02\x05\xea\x89\x74\x04\x83\ +\x0d\x2f\x2f\xea\xef\xe6\x9d\x98\x38\xf1\xa4\xaf\x9d\x1d\x95\x02\ +\xa9\xc8\x5d\x2e\xdd\xed\x57\xd6\x56\xa8\xf0\x48\x7a\x39\xdd\x2f\ +\x5a\x58\x8c\xa2\x2d\x9a\x4d\xf9\xf2\x57\x7e\x00\xdd\x98\xa6\x52\ +\xc6\x2f\x17\x0c\xed\x37\x29\xce\x94\x44\xa2\x4c\xa9\xc5\x25\x69\ +\x0b\x49\xab\x1f\x19\x9a\xdc\x6a\x8e\x4a\x4e\x4c\x34\xc3\xb5\x8b\ +\x4c\x19\x3b\x44\xff\x9d\xf4\x28\x03\x62\xb0\xd1\xe5\x01\x7b\x82\ +\x63\xc0\xec\x94\xb9\x4f\xcd\x48\x50\x00\x7b\x3f\xe1\xe3\xc7\x99\ +\x30\xb4\xfd\xf0\xea\xbd\xa6\xd8\x17\x9d\xfd\x36\xd7\xaf\x7f\x8f\ +\x3c\x7b\x3f\x50\x05\x79\x71\x24\x42\xfb\x9e\x9a\x31\xe3\x98\x0c\ +\x8c\x67\xd3\x4e\x02\xa0\x8a\x0a\xc4\x2b\xe3\x94\x5e\x78\x02\x90\ +\xa5\x51\xf9\xe8\xf7\xf1\xb9\xdf\xc8\x55\xd2\x1b\x6c\x28\xd2\x13\ +\x0c\xc6\x8e\xd6\xad\x3d\x94\x95\xed\xfc\xe2\xc5\xa3\x29\xa9\x18\ +\xf1\xae\x53\x08\xa2\x7f\x22\xaf\x20\x6d\x3d\x7f\x30\xa5\xb4\x51\ +\xb2\x3c\x29\xbf\x46\x0e\xe6\x00\x5a\xb1\x70\x1d\x0b\xa6\x1c\x19\ +\x35\xea\x2c\x7d\xf1\xa4\x62\xb0\xe5\xb1\xb2\x27\xae\x2e\x52\xe4\ +\x03\xae\x9f\xc8\xeb\x09\x62\x38\x9d\xc0\x60\x24\xc5\xc5\xfd\xb2\ +\xbf\x4f\x1f\x92\xeb\x53\xd7\xa8\x61\x65\xbb\x8f\xb3\x90\x23\x32\ +\xf7\xad\x92\x3e\x7d\xfa\x23\x8d\x2b\x4c\x13\x92\xf0\xcb\x6a\x67\ +\x0b\xad\x56\x1a\x41\x71\x27\x8d\x15\xeb\x2d\x82\xfe\x6f\x49\xda\ +\x82\x56\xfb\x54\x02\xe8\xea\xb3\x1d\x6d\x47\xf1\xf9\xad\x6d\x8d\ +\x8c\x14\x99\x87\x99\x22\x1d\xc1\xe0\xf8\x5d\xf7\x37\x77\xee\x58\ +\x51\x3f\x38\xfc\x41\x3e\x87\xd1\xc5\x1e\x19\x37\xae\x59\x5a\x15\ +\x94\x61\x70\xeb\xa4\xd7\xef\x09\xae\x65\x85\x0e\xe0\x5d\x40\x40\ +\x3d\xac\xd8\xe7\x69\xc5\x22\xe3\x59\x5f\xb5\xea\xd3\x07\x87\x0f\ +\xf7\x48\xe5\x6c\xd7\x9a\x9e\x3b\xb6\x6e\x7d\x5d\x36\xd5\x2c\x47\ +\x0d\x59\x90\xa5\x13\x8b\x5c\xd4\x0f\xe9\x1e\xb3\x63\xb0\xa8\x11\ +\x38\x08\x5c\x2c\xf5\x55\xd2\x1c\x9f\x82\xa7\xf3\xa0\xe2\x25\xdc\ +\xdf\xbf\x7f\x43\x1d\xca\xcf\xec\x47\x2b\x16\xa4\x1c\xee\x4a\x4d\ +\xcf\x68\xe5\x7c\xa6\xc4\x27\x31\x76\x0b\xc5\xbb\xb1\xef\x1f\x3e\ +\x5c\xad\xc8\xfd\xe1\xaa\x8f\x33\xe1\x65\x32\xc4\x8b\x56\x56\xe5\ +\x04\x83\x91\x41\xe9\x54\x75\xc0\x7c\x22\x0d\x40\x88\xe1\x67\x45\ +\x3a\x81\x88\x9e\x78\xbd\x84\x04\x62\x0b\x14\x60\x2f\x92\xc5\x86\ +\x57\x0e\x1c\x77\x6b\xe7\x4e\x07\xc8\xb4\xdf\x70\x1e\x38\xb0\x8b\ +\x52\x2b\x08\x8e\xd7\x88\x4f\xf6\x10\x1a\xc0\x0a\x77\x9d\x3c\xb6\ +\x58\x29\x5b\x68\xac\xe4\x75\xc0\xb1\xd4\xf5\x35\x2b\x56\x72\x06\ +\x43\xa5\x4e\xa3\xd2\xd3\x4b\x40\xeb\xe5\x37\xd4\xe1\x95\xdc\xf5\ +\x1a\x75\x6c\x4f\x65\x2b\xe2\xb1\x3a\xb0\xe2\xd5\x03\x67\x82\x43\ +\x28\xd8\x2d\x6b\x05\x93\xd5\x67\xbb\xd8\xd8\x45\xd2\x49\xa4\x18\ +\x56\x49\x6c\xaf\xe3\xa8\x31\x0b\xc6\x1b\x4b\x1d\x4d\x27\x25\x2b\ +\x47\xa3\xfe\x6e\x3d\xeb\xab\x30\x32\xd3\x1d\xff\xab\xd2\xd9\xd5\ +\xa6\x5c\xb9\x17\xa4\xc3\x12\x1b\x19\x59\x0f\x63\x4b\x28\xc4\xa0\ +\xac\x7a\x72\x05\x2c\xad\x0b\xe2\xae\xb2\x6f\x9d\x6a\x7d\x8d\x1a\ +\x9b\x28\xdf\x12\xfc\xb2\xb6\x52\x25\x8a\xc1\x15\x97\x45\xbe\x15\ +\x60\x48\xf7\x29\x23\xc5\x7f\xfb\xf6\xed\xb1\xb1\xb1\x94\x87\xe9\ +\x02\xa6\x20\x91\xfa\x36\x72\x3a\xd7\x93\xbe\x0a\xad\x96\x8a\x4c\ +\x3b\x15\x03\x8b\x0c\x06\x83\x8d\x2d\x37\xf8\x02\xf1\xbb\x70\xea\ +\xec\x6a\x9e\x3b\x77\x28\xf5\xc7\x43\x96\x8a\x9f\x14\x35\x8a\xa5\ +\x2b\x4a\x65\x1e\x52\x73\x47\xbb\x4a\x95\x1c\xa4\x01\x1e\x05\x4b\ +\xeb\x80\xe1\xb5\xa2\xfe\x0e\xf4\xef\x93\x86\x93\x40\x82\x4d\x60\ +\x38\xdd\xbb\x0e\x1b\x46\x92\x83\x63\x95\x2f\x95\x6d\x4d\x9b\x5e\ +\x91\x81\xf2\x81\x60\x5b\x70\x02\x54\xd6\x2e\x2b\x5f\x28\x14\x3c\ +\x17\x19\x04\x06\x1b\xdb\x32\xac\x02\x6f\x34\x3b\xbb\x92\xe2\x96\ +\xb2\x9a\x41\x51\xf9\x2c\x0c\x4c\x2d\x65\x4e\xc6\x86\xe7\x5d\x1f\ +\x9f\x3d\x5b\x8f\x56\x0d\x99\x11\xb2\x55\x47\xce\xad\x15\xc1\x49\ +\x74\xbe\x43\xbf\xbb\xab\xe8\xe2\xfa\x00\x32\x0e\x3e\x3e\xd6\xd6\ +\x3b\x65\x95\x41\x71\x0a\x2b\xa0\xa4\x29\x3a\x2e\x2c\x8c\x8c\xad\ +\x81\xd0\xc0\xd9\xb9\x73\x27\x4b\x63\xa4\xdc\xcd\x46\xf8\x79\x15\ +\x8c\x6f\x65\xba\x56\x5e\x30\x18\xab\x8b\x17\xef\x85\x00\xb9\x3a\ +\x21\x1a\x5b\x2b\x7f\xe7\xc9\x93\xf3\xae\x2e\x5a\xf4\x1e\x09\xb8\ +\x5e\xb5\xb3\xdb\x75\xd1\xdc\x7c\x1f\x3d\x43\x7f\xf3\x4b\xe4\x01\ +\x55\xf2\x1f\x91\xcd\x1f\x83\xc2\xd2\xa7\x90\x54\x98\x86\x7b\x15\ +\x75\x08\x52\x84\x6c\xb3\x58\x8c\xb7\xa1\xd4\x48\x31\x95\x9c\x04\ +\x1a\x51\xe5\x04\xf8\x15\xf1\xc9\x6b\xb8\x6f\x23\xab\x2e\x7a\x51\ +\xa5\x85\x52\xb5\x80\x8a\x0c\xef\x88\xe7\xcf\x57\x92\x54\x04\xbe\ +\x48\x76\xcb\xd5\xf2\x2d\x38\x3a\x5d\x3e\x17\x83\x41\xee\xf3\xb0\ +\xc0\xc0\xe5\x08\x94\xfb\x22\x24\xf0\x1c\xa5\x31\xc5\x92\x93\x93\ +\x7b\x51\x85\x42\x5c\x64\xe4\x0c\xac\x6c\x41\x1a\x32\xed\x85\x84\ +\x04\x0a\x42\x83\x71\x5e\x7a\x41\x2b\x05\x79\x09\x11\x6c\x56\xb6\ +\x73\xbe\x60\x71\x1d\x91\xa0\xcf\xaf\xd1\x58\xc4\x80\x56\x65\xfb\ +\x9f\x7f\x0e\x20\x2f\x2e\x25\x7d\xcb\x2c\x94\x30\x3c\x9b\x48\x06\ +\x28\xd3\xe5\x3a\xcb\xec\x1d\x2b\x32\x38\xc4\xef\x94\xd5\xfe\x86\ +\x89\x10\xcd\x45\x3a\x80\xc1\x46\x57\x0c\x1c\x2e\x57\x84\x26\x58\ +\xdd\x5a\xe2\xfc\x16\x08\x27\x84\xab\xb6\x4c\xbb\x02\xa4\x4e\xdd\ +\xa6\xea\x04\xd4\xa5\xcd\xc5\x3b\x21\x60\xca\x8a\x02\x05\xa2\xf0\ +\xbb\xef\x56\x97\x2c\x49\x92\x7f\x8b\xa5\xe8\xad\xce\x00\x2b\xf2\ +\x45\x69\x3c\xa6\x02\x70\x5f\xb4\x68\x35\x79\x36\x15\x83\x52\x56\ +\x3b\xba\x92\x21\xe2\x33\xbe\x87\xe6\xcc\xf2\xc3\x23\x46\x9c\xc3\ +\x39\x36\x5e\xae\x78\xfb\xd3\xeb\x73\x31\xd8\xf0\x4a\x83\xd9\x48\ +\xc2\x0f\xf5\x69\xc1\x64\x44\x38\xcf\x25\xbd\xbc\x7e\x9d\x82\xe8\ +\x39\x85\x06\x2c\x8b\x17\x3f\xaf\xd1\x7e\xeb\x39\x2a\x18\xf6\x24\ +\xc6\xc5\xd1\x7b\xa6\x10\x02\x32\x53\x0a\x61\x41\x13\x5d\x51\xdd\ +\xba\x7b\xf0\x60\x1f\x48\x38\x84\x49\x03\xdb\x75\x70\xc0\x80\x09\ +\xa8\xb2\x50\x1b\x21\x2a\x2d\x6e\xec\xed\xd6\x4d\xe9\x0b\xb1\x96\ +\xc6\xce\xcc\x9a\x75\x14\xfa\x31\xbd\xae\xae\x5f\x3f\x1d\x15\xf7\ +\x96\x78\x27\x88\xc6\x97\x66\xcf\x3e\x5f\x30\x18\xe9\x79\x16\x8a\ +\x8f\x8c\x9c\x87\x34\xb1\x73\x70\x3e\x44\x1d\x1e\x39\x72\xa2\x90\ +\x50\x56\x00\x6a\xb9\x8c\x7a\xb5\x48\x24\x4b\xef\xa5\x3e\xe8\x32\ +\x2e\xd6\x04\x2c\x05\xbd\x95\x81\x64\x70\x08\x38\x2b\xbd\xf3\x26\ +\xea\x4a\xed\x5d\xe4\x8b\x17\x73\x51\x41\x11\xa0\x19\x87\x93\x1a\ +\x9a\xa6\x60\x2b\xd2\x00\xc5\x58\x92\x74\x08\x25\x52\x58\x01\xbc\ +\x15\xe4\xe5\x55\x9e\x1c\x2e\xb4\xaa\x53\xf3\x4d\xbc\xab\x68\xce\ +\x0c\x4a\x97\x32\x20\x06\xd7\xde\x81\xbd\xc0\x25\xe0\x10\xd9\x46\ +\xeb\xac\x5c\xb1\x36\x83\x29\x54\xfc\x29\xe5\xf0\xea\x83\x7a\x1a\ +\x09\xc4\xa7\xc9\xab\x89\xf2\x19\x4b\x92\x3b\x8f\xfb\xf0\x81\x24\ +\xce\xab\xd1\xaa\x82\x6b\x7d\x1d\x28\x6f\x1a\xf5\xcc\xc3\x63\x1d\ +\x2a\x0e\x4e\x6f\x6f\xd1\xc2\xeb\xb1\x9b\xdb\x46\xa4\xc2\xd5\xa1\ +\x95\x98\xfe\xed\x38\x8f\x26\x53\xa3\x4c\x88\xda\xbe\x24\xc3\x83\ +\xcc\x85\xc7\x33\x3f\xbf\x02\xb8\x3f\x49\x5e\x50\xfc\x7e\x73\x8c\ +\x57\xc1\xbb\x89\xd2\x68\x2f\xa5\xd7\xe7\x62\xb0\xe1\x15\x07\xf3\ +\x51\xf5\x00\x9c\x27\x17\x95\x55\x01\xab\x58\x08\xe4\x10\xa6\xa4\ +\x52\xaf\x46\x5a\x92\x5f\xb6\x36\x69\x72\x27\xf2\xe5\xcb\xfe\x38\ +\x37\x39\xa1\xf1\x07\x69\x4e\x36\x83\x63\x25\x8e\x9e\x49\x21\xdb\ +\xdc\x59\xec\xcd\xac\x0d\x8e\x00\x67\x81\xc3\x61\x30\x7b\x49\x98\ +\x48\x6d\x60\x9d\x3a\x5d\xc1\xd8\x38\x68\xaa\xdc\xa0\x15\x5e\x3a\ +\x8c\x0a\xca\x2f\xa0\x89\x20\x79\x38\x4f\x92\x61\xd2\xbb\x94\x9d\ +\x23\xb3\x55\xb6\xa5\x5b\x0c\x8f\xc1\x80\xf7\xb2\x3f\xc5\xea\xa0\ +\xaa\x15\x49\x46\x07\x4f\xe5\x65\x52\x56\xd6\x2a\x8f\xb1\xa6\x67\ +\x97\x57\xae\xdc\x8f\x70\xc3\x75\xa9\xad\xf2\xc1\xcb\xcb\x2b\x3b\ +\xa4\xfe\x9c\xe4\x7d\x92\x59\xce\x9c\x7d\x85\x0e\x01\xd9\x2a\xbd\ +\xb0\x65\x54\x9f\xef\xd0\x3a\x3a\xd8\xa1\x55\xab\xb6\x57\xd6\xad\ +\x6b\x4c\x1a\xa0\x41\x97\x2f\xf7\x25\xcf\xab\xac\xd5\xcb\x81\x03\ +\x5c\x01\x5a\xdd\x70\xe6\xa3\x50\xc9\x6c\xca\xce\xd1\x48\x13\x8b\ +\x02\xe7\xa4\x57\x2f\x08\x06\x77\x03\x6a\x43\xd9\x28\x48\x1c\xf6\ +\x44\xce\xa5\x1f\xae\x05\x34\x33\x56\xb0\x8a\x45\x22\x46\x17\x8f\ +\x95\xe1\x2d\xad\x66\xb2\x9c\x26\xd0\xdb\xd2\xb2\x1e\x56\x82\xb7\ +\x64\xac\x48\x8a\x5e\x43\xd9\xff\x26\x42\x34\x92\x0d\x2b\x7b\xe8\ +\xc0\x67\x2b\x83\xcf\xb5\x84\x8c\x87\xce\x6e\xb4\x62\xe1\x4b\xc1\ +\xf1\xe1\xf1\xe3\xbf\xe1\x33\xdd\xa3\x15\x4d\x68\x00\xa9\x62\xd3\ +\x92\xe2\xe3\x4d\x4f\x4e\x9f\x5e\x1d\xde\x5c\xea\x02\xfb\x0a\xbd\ +\x12\x76\xc0\x99\xf4\x4a\x1a\xde\x3a\x91\x1e\x60\x30\x64\x7c\x6b\ +\x00\x68\xaa\xd9\x9f\x5c\xa9\xc6\x96\x0e\x87\x4f\x54\x9b\x47\xf7\ +\x94\x36\x05\xaf\x27\x15\xc8\x26\xcb\x33\xd0\xaf\x60\x71\xd2\xd0\ +\xc4\x7b\x8a\xd7\xf0\x2c\xae\x35\x74\x40\x25\xad\x7f\xe8\xb5\x6b\ +\x36\x70\xac\xdc\x26\xc7\x8a\x92\x47\xea\x3a\x62\xc4\x4e\x5a\xdd\ +\xb4\x4a\xa1\x6a\x49\x39\x42\xa5\x35\x57\x1f\x74\x03\x7a\x4a\x7a\ +\x2c\x81\x67\xce\xcc\x90\xe7\xda\xf4\x03\x83\x65\xfc\xb4\xb6\x93\ +\xb7\xa4\x77\x32\xf6\xee\xfe\xfd\x5b\xdc\xa6\x4c\xd9\x43\xf7\x48\ +\xb1\x7a\x2d\x73\x1a\xdd\xe4\x19\x28\xbb\x92\x7c\x1c\x15\x12\xb2\ +\x64\x43\x8d\x1a\x8f\xa5\xa1\x26\xc1\xf0\xec\x68\xcb\x96\xc5\x86\ +\x67\x08\x8e\xa7\x84\x67\xcb\x12\x25\x42\xd0\x70\xf2\x25\x44\x6c\ +\xe7\x69\x87\x46\xb0\x42\x37\xd0\x68\xcd\x35\x0e\x8e\xa2\xf6\x64\ +\x9c\x07\xfb\xf5\xbb\x80\xfb\x0c\x4d\x82\x66\x30\x54\x9b\xea\xd5\ +\x5b\x84\xf3\x4f\x08\x5c\xe8\x76\xf4\x07\x8b\xad\xa5\xbd\xb2\xe2\ +\xc1\x79\x72\x07\x4e\x96\x85\xda\xad\xb8\x7c\xb7\x6e\x2d\x8b\xb3\ +\x53\x38\x55\x27\x6c\xa8\x59\xf3\xbe\x92\x14\xad\x23\x55\xf4\x3f\ +\x23\x75\x6d\x2e\x55\xd2\x93\x27\x56\xa3\x9b\x4f\x79\x29\x45\x7f\ +\x99\x1c\x26\x74\xce\xa3\x5a\x3d\x8c\xe7\x47\xee\xe9\xb1\xf8\xa8\ +\x28\x53\x5a\x2d\xff\x8b\x89\xb9\xad\x44\xa6\x81\x21\xc3\x03\x8b\ +\x65\xd6\x4a\x4e\xc5\x69\x42\xc6\x14\x11\x14\xb4\x4a\x91\x65\xd7\ +\x5a\x15\xcd\xe9\x1d\x6a\xcd\x8c\xe7\xf3\x6e\x6c\xde\xec\x18\xe0\ +\xec\x4c\xa1\x88\x1c\x18\x37\xcc\xea\x74\x2a\xaa\x18\x07\x9b\x69\ +\xa4\x88\x6d\x92\x2b\xb1\x1b\x7d\x36\x3a\xcb\xd2\x36\x54\xe3\xfd\ +\x51\x60\x13\xf1\x5f\x04\x26\x3c\x48\x5d\x0f\x25\xc4\x2c\x91\x99\ +\xe0\x6e\x40\x7a\x52\xae\x41\x1d\x8f\x93\x7d\x01\xba\xa5\xa6\xb0\ +\x45\x6d\xb7\x90\xc1\xf1\x04\xcf\xa7\x4b\x29\x85\xc6\xb2\x6c\x86\ +\xaa\xb8\x15\xb9\x87\xc3\x60\x45\xa1\x03\x38\xfa\xfb\xef\x35\x90\ +\x6f\x7a\x5b\x59\xb9\x91\xf6\xe5\x16\x19\x14\x44\xaa\xd0\x0c\x2a\ +\x2d\x41\xae\x9f\x72\x3e\x98\x27\x32\x1b\x6c\x7c\xad\x43\xae\x5e\ +\xb5\x95\x62\xad\x7a\xd2\xc8\xf2\xa6\xa6\xb0\x85\xe7\xd5\x85\x16\ +\xd6\x55\xab\xb6\x40\xd9\x92\xca\x7e\x78\x4b\xc1\x6c\x3a\x10\x38\ +\x9f\x78\xc5\xd6\x76\x0f\x3c\x92\xef\xff\xe9\xdf\x16\xad\xe2\xa4\ +\x92\xf6\xaf\xe8\x06\x44\x5b\x14\xc8\xa9\x2d\x41\x90\xf6\x15\xf6\ +\xda\xf1\x9c\x82\x93\x25\x01\xe6\xc6\x60\x41\x69\x6c\x0d\x29\x7e\ +\x05\xba\x82\x23\xc9\x90\x90\x95\x7f\x4d\xe9\x7b\xae\x40\x31\x4c\ +\xc4\xeb\x5e\xa3\x10\x36\x9c\x56\x48\x5a\x05\xa5\xe1\x1d\xd0\x91\ +\xcf\xf5\x0b\xc9\x39\x50\x5c\xf2\x99\xbb\xfb\xd0\x7f\x60\x70\x13\ +\xa5\xd1\xbe\x06\x7b\x89\x1f\x1d\x81\x81\x81\xfa\xc8\x62\x7f\x09\ +\x46\xc5\xc7\xc7\x1b\x8a\x2c\x03\x83\x82\xc1\xeb\xab\x57\x77\x85\ +\x21\x7d\x96\xc2\xb5\x5f\x42\x7c\x7c\x6c\xa4\xc2\x96\xf6\xbb\x2b\ +\xc0\x14\x28\x49\x1f\xa0\x98\x5d\x42\x74\xf4\x4c\x1b\x23\xa3\x97\ +\x34\x66\xa6\xaf\xdf\x56\x47\x56\xf0\xdc\x60\x57\xb0\x9b\xf8\x4e\ +\xe0\xef\x72\x86\x6c\xd5\x15\x87\x52\x20\xf2\xf2\x66\x47\xb8\xa4\ +\xaa\xf8\x51\x81\xe5\x7a\xb8\x74\x49\xbb\x6b\x1e\xda\xe5\x81\xbc\ +\x3d\x29\x55\x89\x4c\x03\x83\x62\x55\x08\x26\x6f\x5a\x5b\xb1\xa2\ +\x7a\xc5\x82\x27\x33\x1c\xf3\xd0\x5b\xcb\xd8\x2a\xd2\x16\x12\x95\ +\xe6\x81\x78\x7f\x1a\xa8\x47\x84\x33\x65\xb6\xf4\x78\xee\x11\x3a\ +\x86\x34\x0b\xe7\x6a\x97\x01\xa1\xbb\xed\xa7\xc8\x48\xb3\x55\x45\ +\x8b\x5a\xca\x3a\x3d\x0a\xa9\x94\x14\x3f\x12\x60\x4c\x75\x31\x71\ +\xaf\x90\xf5\xf0\x9e\xe4\xbf\xa9\x3f\x99\x54\xa7\x5a\xa7\x04\x34\ +\x25\x1f\x64\xaa\xe1\xb1\xd1\x55\x43\x88\x60\xfa\x05\x0b\x8b\x83\ +\xa8\x47\x7b\x07\xe7\xd6\x63\x2d\xcf\xa5\x7a\x15\x24\xc3\xd4\x14\ +\xb2\x45\xc8\xe1\x17\xf5\x36\xb4\x55\x2b\x2f\xa1\x85\x99\x42\xe4\ +\xca\x2a\xd5\x2d\x5a\x95\x40\x6f\x70\x56\x5a\x52\xba\x94\x32\xa0\ +\x73\x73\xe7\x1e\xa6\x7a\x43\xf0\xe7\x33\xc6\xc6\xe5\x10\x4e\xf9\ +\x28\x53\xe0\xae\xfc\x68\x5b\x98\x14\x8d\x0f\xd4\x42\x4e\xa6\x09\ +\x8d\x61\xa2\x9f\x21\x13\xe2\xb0\x43\xf3\xe6\x3e\xd4\x43\x1a\x13\ +\x1c\x83\x67\x43\xa8\x3c\x43\xfb\x2c\x41\xab\x24\xf7\x1e\xcb\x90\ +\x1e\x02\x2d\x60\x78\x8b\xa0\x31\xb2\x8c\xb6\x95\x58\xe9\x3a\x53\ +\x81\x27\x98\xe2\xd8\xb6\xad\x2f\xc6\x46\x08\x40\x3b\x93\xc5\xd3\ +\xc4\x64\xb7\xbc\x2f\x0c\x5a\x91\x4c\x9e\x3c\xdf\xbd\x04\xcd\xb3\ +\x22\x8f\x31\x3c\x28\xa8\x29\xbc\x97\x54\x25\xee\x87\xcf\xd1\x5d\ +\xfc\x05\x94\x32\x20\x29\xd2\x94\x80\x1a\x3b\x63\xdc\x1b\x98\xe7\ +\xc9\x33\x84\xc6\xd0\x5e\xf9\x26\x52\xc5\xac\x7e\xa4\xbe\x10\x02\ +\xe9\x39\x3e\x54\x56\x0f\x35\x27\x12\x86\xc9\x2e\xcb\x2f\xc2\x20\ +\x91\x16\x14\x17\x1e\x6e\x21\xf5\x2e\x66\x51\x79\x06\x2a\x95\x95\ +\xda\x2d\x17\xad\x49\xee\xa3\x31\x99\x43\xd9\xf1\x92\xfe\x3d\x04\ +\xc0\x06\x60\x0e\x72\xa4\x28\xf9\x97\x48\x0c\xbe\xfc\xe4\xcc\x99\ +\x72\x1a\xbb\x95\xaa\x78\x16\x8c\x79\x8a\x46\x3d\xda\x54\x12\xa6\ +\xc5\xbd\x5a\xde\x0e\x5b\x32\x7f\xa8\x2b\xbb\xc2\x6b\xf8\x50\xae\ +\x0c\x1e\x52\xfc\x47\x95\xc9\xe5\x4c\x7d\x82\x2e\x5d\x9a\x8c\x6a\ +\xf9\x03\x32\x4e\x57\xed\x4f\x16\x83\x33\x38\xc3\x52\xc7\x57\x17\ +\x38\xf5\x94\xfe\x07\xcf\xc0\x97\xa4\x9e\x86\x2f\x21\xaa\x31\x1c\ +\x0c\xe6\xfa\x91\x26\x73\x04\x6d\x4b\xa0\xb8\x3b\x9f\x0c\x8e\x26\ +\x49\xc9\xed\x93\xf2\x68\x2a\xf9\x5e\xc9\x2d\x8d\x1a\xf9\xd1\xb3\ +\xcb\x96\x96\xf6\x14\x03\xd2\xf4\x48\xa1\xc8\x72\xa7\xa2\x6d\x41\ +\xfa\xf5\x22\xc3\xc0\x52\x0f\xa4\x13\x89\x06\x1c\x21\x72\xc5\x0a\ +\xc6\x75\x31\xae\x33\xc1\x70\x72\xb2\x5c\xb1\xb1\xd9\x23\x7b\xa0\ +\xef\x00\xbf\xee\xeb\xd1\xc3\x53\x4a\xde\xcd\x02\x17\xa1\xda\xfc\ +\x38\x6d\x47\x65\xdb\x65\xcb\xac\x48\x82\x06\x47\x5d\x30\x33\x9b\ +\x86\xa4\xe6\xcb\x30\x20\x5b\x18\x53\x41\x8d\xed\xf2\x7c\xdc\x87\ +\x6a\x94\x01\x8d\xa7\xae\xaf\xe7\xe6\xcd\x3b\xac\xfc\x8d\x91\x11\ +\x62\xbc\xcd\x8f\x3a\x89\xb5\xc1\x4e\xb2\x6e\x4b\x85\xf3\xdc\x6b\ +\x7c\x03\xc5\x52\x1e\x9c\xd0\x00\x56\xc1\xf9\x94\x29\x4e\xab\x9e\ +\xd0\xc2\x55\x5b\xdb\x7e\x08\x2b\x7c\xc6\x61\xfd\x09\x19\xaa\xc8\ +\x48\xb0\xd1\xd5\xc4\x36\x73\x16\x4a\x79\x5c\xa1\x1e\xa6\xfe\xe6\ +\x97\x5e\xbc\x77\x1e\xc6\xc6\x4e\xe4\x44\xb1\xaa\x50\xa1\x8a\xcc\ +\x61\xa4\x9d\x8b\x31\xf8\xb3\xfc\xdd\x1c\x60\x2b\x6c\xed\x9e\xcb\ +\x2c\x10\x0b\x5c\x0d\xc0\x1e\x54\x46\x94\xd9\x7f\x77\x30\xa4\x89\ +\x3b\xdb\xb7\x5f\x4c\x7d\xc8\xc1\xb1\x52\x9a\xa2\x03\x0c\x4b\x1d\ +\xbf\x43\x0e\x69\x60\x4c\x4c\x4c\x31\x0a\xf2\xdf\x77\x71\x19\x84\ +\xb3\x6c\x22\xa5\xc6\xd1\xe7\x97\x89\xd2\x3f\x3e\x4e\x4e\x99\xb2\ +\x8c\x14\x7a\xe9\xcc\x86\x89\x18\x06\xe6\x54\xfa\x46\x83\x26\x60\ +\xf9\x54\x3c\x9d\xc7\x68\xf9\x0f\x3c\x75\x6a\x03\x9e\x57\x11\x19\ +\x0a\x86\x34\x9c\xb6\xe0\x22\xca\xcb\x24\x91\x57\xd9\x9c\x64\x36\ +\x48\x4d\xf8\xd5\x01\x71\x19\x30\x57\x14\xa0\x55\x42\x02\xca\xd1\ +\x9e\xf4\xc7\x0c\xc3\x9d\x61\x9a\x2d\xdb\x60\x69\xb4\x8f\xc0\x6e\ +\x59\xf1\x39\xa2\x42\x43\xa7\x38\xb4\x6c\x39\x4a\x59\xc5\x63\xde\ +\xbe\x35\x3d\xd8\xbf\xff\x85\x8d\xb5\x6b\xdf\x80\xb7\xd6\x90\x02\ +\xe7\xa0\x0b\x1d\x7f\x64\x56\x4e\xed\x7f\xd5\xb6\xe5\xa6\x83\x83\ +\x03\x56\xba\x48\x45\x77\x50\xf9\x06\xd2\xce\x06\x27\x28\x2d\x7d\ +\x77\x76\xe8\x40\xcb\xff\x30\x91\x99\x60\xc3\x33\x90\x3a\x93\xed\ +\xe5\x35\x87\x00\xb0\xdb\x50\x17\xb9\x7e\x78\xfa\xf4\x77\xb9\x4d\ +\x5b\x2f\xdb\x6b\xf5\x11\x40\x62\x6c\x6c\x5d\x59\x3a\x54\xd3\xd9\ +\xd9\x59\x0f\x19\xff\xea\x2d\x9c\xe4\x29\x3a\x0f\x66\x45\xd9\x0f\ +\x98\x5f\x23\xfd\x6d\x20\x68\x0a\x79\xc2\x89\x8a\xbe\x0a\xe2\x8c\ +\xc1\x18\x1b\xfd\x6f\x9c\xc8\xaa\x28\xb7\x58\xe8\x63\x65\xb5\x67\ +\x43\xf5\xea\x57\xb0\xcc\x5f\x74\x1e\x34\x68\xd4\x37\xdc\xbd\x01\ +\xd8\x02\xc4\x84\x3f\x7f\xbe\x82\x8c\x55\x64\x39\x18\x76\x95\x2b\ +\x8f\x97\x32\x0f\x27\x70\xcd\x86\x3e\xe6\xbd\x51\x6f\xa7\x7c\x81\ +\x7a\xac\xab\x55\xab\x1a\xcd\xb1\x9c\xc3\x0e\x34\xee\xd0\xb4\xe9\ +\x2d\x68\x93\x78\x63\x77\x93\x2c\xb5\x48\x6c\xc0\x82\x3a\xa0\x1b\ +\xa3\x77\xdd\xde\x7e\x1b\x1c\x79\xea\x12\xa6\x7d\xdd\xbb\x77\xfe\ +\xd7\xd6\x72\x81\xed\x64\xd2\xac\x29\x38\x41\xb6\x3d\x9a\xa6\x44\ +\xfa\x31\x31\x7f\xd0\x64\x9d\x98\x3c\xf9\x24\x9e\x77\xd1\x32\xc6\ +\x2a\xe0\x92\xcc\x6f\xe1\xc4\x88\x8c\x8c\x2c\x48\x32\x08\xd2\xc0\ +\x36\x5f\xb6\xb1\xa9\x89\x04\x62\x73\x94\xf9\xc4\xc9\xe2\xd7\x3d\ +\x02\x90\x5e\xe9\x7b\x38\xff\xc5\x7e\x78\xfc\x78\x15\x39\xd1\x48\ +\x3c\x08\x67\xf1\x07\xca\xee\x86\x6a\xef\x74\xc1\xcf\x80\x32\xa0\ +\x79\x4f\xcf\x9e\x5d\x4f\x0e\xa1\xff\x4c\x21\x25\x09\x7c\x52\x4c\ +\x47\x29\x84\x04\xc3\x2d\x8b\x15\x7b\x85\xd5\x90\xbc\x9c\x06\x5a\ +\x06\x37\x5a\x7a\xd2\xc2\x33\xbf\x84\x84\xf1\xfe\xf1\xe3\x21\x90\ +\x66\x7f\x20\xe7\x20\x19\x46\x76\x47\x29\x97\x91\x4e\x07\x32\xb6\ +\x29\x32\x9b\x25\x7e\x57\xa7\x4e\x5b\x70\x7f\xcb\x75\xe8\xd0\xbe\ +\x57\xac\xad\xd7\xd2\x38\x7a\x10\x90\xb7\xba\xb4\x94\x3d\x6f\xa6\ +\x03\x65\x40\xad\xc1\x32\xe2\xbf\x84\x80\x43\x87\xe6\xc3\x1b\xa9\ +\x8e\xe7\x10\x31\x51\xbe\x71\x51\x51\x8d\x05\xa0\xa5\x69\x51\x0c\ +\xe7\xc0\x68\x78\x3c\xa3\x1e\xba\xb9\xd5\x56\x14\xab\x44\xa6\x81\ +\x9b\x4e\xc2\xb0\x46\x52\xb6\x0a\xbc\x92\x01\x58\xc5\xde\xa3\xee\ +\x4e\xe9\xfd\x5d\x4f\x06\xc5\x3f\x20\xc1\xe1\x3d\x2a\xce\xdf\x2a\ +\xf3\x79\xb0\x6f\xdf\xc1\x70\xa4\x2c\xc1\xbc\x45\x43\xc6\x6f\x35\ +\xe9\x68\x6a\x24\x10\x3b\x83\xe5\x45\xa6\x82\x27\xb2\x2c\x38\x05\ +\x5d\x57\xf6\x6a\xa8\xf4\xde\xd2\x3e\x68\x63\xcc\x98\x9e\x9d\x9d\ +\x3d\x9b\x64\xc0\x3b\xe0\x7e\x88\x9c\xb4\xe3\x78\xb7\xb2\xc8\x2c\ +\x70\x35\x42\x2b\x70\x2e\x68\xfa\xe5\xcb\x97\xa5\xd8\x96\x75\xa5\ +\x6d\x26\xe6\xe3\x08\xcd\x07\xc5\xed\x5e\x5c\xbc\x68\x2d\x9b\x95\ +\x04\x50\x43\x92\xa0\x6b\xd7\x4a\x42\x10\x96\x9a\x76\xf4\x54\xf2\ +\x19\x29\x06\x46\x71\x3e\xca\xe1\x04\xcd\x33\x3f\xb3\x88\x27\xb2\ +\x09\xbe\x2d\x17\x51\x0b\x5b\xea\x8f\x86\x6f\xca\x45\x42\x82\xb4\ +\x07\x69\xeb\x09\xd5\xaa\x60\xec\xbd\xe7\x90\x77\x13\x8d\xdc\x0d\ +\x10\xff\xb9\x2e\xcf\x10\x0e\x22\xb3\xc1\x6a\x62\x65\xc0\x1a\x88\ +\xdd\x55\x86\xe1\xa8\xbf\x28\x29\xde\xfa\xdc\xd3\x73\xc9\x95\x6d\ +\xdb\x0a\xc3\x69\xe2\x25\xd5\xc2\xca\x83\x2a\x59\x36\x94\x43\xa9\ +\x38\xa7\xfa\xb6\x87\x47\x8f\x6e\xc2\x4a\x99\x40\xf7\x32\x38\x3d\ +\x8c\x33\x8b\x32\xbf\xfc\xa2\x07\x32\x19\x96\xe2\x3a\x4d\xe3\xfc\ +\x36\x0d\x4c\xf1\x5e\xb3\x66\x1f\x6d\x5f\xe4\x58\x36\xa4\x18\x3d\ +\x83\xb7\xec\xd3\xeb\xdb\xb7\x4d\xc9\x08\xff\xa2\x97\xf6\x90\x8c\ +\x29\xa6\x64\xbc\xb9\x7b\x77\xbe\x63\x9b\x36\x37\x68\xc5\x02\xa9\ +\x70\x75\x59\x64\x70\xf0\x28\x64\xb1\x8c\xa7\x46\x8d\x9a\x3d\xbd\ +\x57\x16\x2d\xda\x0a\x95\x24\x27\x68\x57\xb3\xbb\x63\xc7\x69\x4a\ +\xe3\x49\x1c\x17\x94\xdd\xcd\xd5\xac\x11\x77\x65\xf5\xe1\x72\x42\ +\x02\x67\x80\x59\x34\x19\x68\x60\xb1\x03\xe3\x2a\x4d\x27\xca\x91\ +\x91\x23\xcf\xd2\x56\x45\x29\xbf\xc0\xd8\x54\x70\x19\xd8\x47\xc9\ +\x76\xc0\x24\x2a\xe2\x3a\x7e\x19\xd2\x41\x94\xe7\xab\x28\x38\x92\ +\x02\xe3\x24\x5b\xa7\x91\x0b\x7b\x93\x44\x68\x0f\xfe\xfa\x6b\x7d\ +\x2d\x6f\xf5\xbc\x97\xfe\xfe\x95\xa9\x8f\x39\x56\xc5\x48\x74\xcc\ +\x59\x16\xec\xe3\xb3\x9a\x12\x24\x50\x00\xfb\xf4\x43\x60\x60\x56\ +\x36\x65\x64\xb8\x9b\x9a\x1a\x62\x3b\xf9\x9a\xb2\x4f\xe8\xcc\x26\ +\x35\x37\xa2\xa8\xd4\x44\x1e\xda\xf3\x48\x09\x35\x75\x6c\x48\x21\ +\x4d\x38\xe5\x73\x7a\x59\x58\x34\x91\x93\x19\x14\x7c\xf7\x6e\x21\ +\x91\x51\x60\xc3\xab\x0e\x4e\xa7\x3e\x01\x50\x89\x0e\x53\x92\xa2\ +\xbf\xa1\xaf\xb2\x40\xb3\x35\x17\xce\x74\x3b\x71\xaf\xee\x0d\x2e\ +\x53\xc7\x18\x59\x29\xa1\x16\x7a\xe3\xc6\xac\x1d\x2d\x5b\xde\x80\ +\xd1\xdc\xa6\x4e\x32\x34\x59\xc8\xf5\x73\x21\x85\x27\xe9\x66\x7e\ +\x01\xa3\x8a\x87\x36\xa3\xd3\x8d\x2d\x5b\x1c\x0f\xfd\xf6\x9b\x3b\ +\xa5\xee\x60\x8c\xae\xbb\xe9\x7d\x1a\x97\xad\x6f\x33\x16\x7c\xbe\ +\x6b\x19\xfb\xe1\xc3\x12\xea\xf3\x16\xfd\xf2\xa5\x39\xee\x0b\x0b\ +\x0d\xe0\x70\x4e\x9e\xca\x18\x9c\xc9\x5f\x50\x22\x31\x1d\x07\x70\ +\x96\x73\x46\x89\x90\x3a\xb9\x18\xd4\x91\x73\x1c\x9f\xef\xc6\x91\ +\x67\x0c\x1d\x58\x6e\xd2\xb7\x21\xca\x81\xae\xcb\x46\x0f\x2d\xc0\ +\x14\xa7\x81\x03\xbd\x70\x3f\x07\xec\x0c\x0e\x73\x19\x3a\xf4\x1c\ +\x8d\x4b\x8f\xd9\x5d\x0a\xb6\x67\xea\x64\x72\x19\x50\x5f\xb0\x83\ +\x5c\xd1\x0a\x82\x1e\xd8\x75\x2c\xc4\x75\x2f\xf8\xf5\xf6\xee\xdd\ +\xdb\xf0\xbc\xae\x7c\xbf\x21\xb8\x04\xe4\xe6\x8b\x3a\x98\xb1\xd2\ +\x9a\xce\x0b\x61\x0f\x1f\xce\x25\x83\x53\xd2\x89\x8e\x8d\x1b\x47\ +\x85\xaf\x79\x85\xc4\x89\x29\x53\x46\x4a\x2f\x66\x12\xb4\x3c\x48\ +\xcd\xca\x48\x64\x09\x18\x54\x21\x8e\x80\xf8\x55\x65\xbb\x0f\x39\ +\x07\xea\x11\x37\x56\x33\xf1\x58\x87\x8d\x8d\xb7\x98\x60\x5d\xb0\ +\x23\xa8\xa2\x06\xed\xd8\x92\x24\x52\x03\x3f\x63\x21\x8c\x34\x62\ +\x77\xa6\x34\xb9\x07\xfa\xf6\xbd\x28\xa5\xb0\x95\xec\x96\x31\xe0\ +\xb8\xcc\xd5\x5e\x64\x60\xfb\x38\x98\xd4\x00\xa8\xa8\x55\x1d\x46\ +\xc8\x9b\xf7\xdc\x3f\xf1\x1c\xd3\xf9\x3c\x8b\xba\xbd\x32\xe0\x6a\ +\xde\xaf\x3e\xb3\xa9\x54\xe1\x94\xa1\xae\x28\xf5\xe2\xf0\x1e\x05\ +\xc1\x18\x2a\x98\xa4\x2d\xcd\x0c\xa5\xcc\x5e\xf2\xab\x6c\x5a\x68\ +\x20\x32\x0b\x5c\x06\xd4\x1e\x5e\x49\xb3\x03\x7d\xfa\x5c\xb4\x2a\ +\x5b\xf6\xea\x29\x3b\x3b\x7d\xf1\x1d\x20\x43\x05\xdf\x4b\xe1\xe1\ +\x4e\x22\xd3\xc1\x93\x59\x83\xb2\x1c\xec\xeb\xd6\xf5\x43\x6c\xee\ +\xa5\x52\x82\xe1\x3e\x7f\xbe\x2b\xd5\x48\x51\xfe\x25\x8d\x91\x5e\ +\xa6\xc7\xe2\xc5\xfb\x29\xf0\x8a\x73\xdd\x2d\x29\x1f\xe7\x2a\x32\ +\x1b\xac\x16\xfd\x2b\x68\xfa\x4f\x6a\xd1\x10\x52\xb8\xab\x7c\x71\ +\x66\x76\xed\x1d\xc0\x90\xdb\xcc\x79\xe4\x58\x51\x34\x15\x91\xe5\ +\xfe\x44\xea\xe6\xaf\x93\x06\xf7\x19\x5b\x9a\x08\x97\xdf\x7e\x5b\ +\x85\xac\x95\xc9\x70\xc0\xf8\xd3\x7b\xd8\x8e\x36\x14\x99\x0e\x6e\ +\xc3\x25\xbe\x13\xca\xb9\x7d\x5b\xd3\xa6\xb7\x4f\x4c\x98\x70\xfc\ +\xc1\xb1\x63\x1d\x65\x8b\xe6\x35\x99\x5f\x91\xc0\x13\x59\x04\x15\ +\xcb\xc3\xd0\x7a\xf7\x04\x5a\x19\x39\x91\xdb\x19\x07\xf6\xed\x64\ +\x70\x7e\x0e\x0e\x3b\xd6\x56\xaa\xa4\x68\xd5\x7b\x6f\x6b\xd6\x4c\ +\x1d\x32\x80\x4c\xbb\x89\xc8\x74\x30\x4c\x84\xe8\x89\x79\xf8\x2d\ +\x2d\x29\x5d\x4a\xdd\xa4\x46\x19\xd0\xb0\x4f\x1f\x3f\xb6\x35\xcf\ +\x95\xeb\x8c\xa2\xaa\x9c\x35\xe2\xae\x5c\xbd\xdc\x05\x9c\x07\x96\ +\xda\xda\xa8\xd1\x1f\x32\x8d\xe8\x34\x56\xb6\x29\xd8\x52\xee\x46\ +\x3a\x51\x08\x8d\x11\xcf\x9b\x98\x58\x88\x4c\x07\x83\xb2\x83\x90\ +\xc0\x40\x3d\xc8\x2f\x50\x87\xd6\xbf\x69\x70\x53\xe5\xae\x24\xee\ +\x40\xbf\x7e\xb6\x8a\xe3\x05\x9d\x5f\xcf\xd2\x2e\x06\xbb\x9a\x87\ +\x07\x7a\xf7\x6e\x29\xb2\x0e\x8c\xa8\xa8\xa8\x42\x1b\x6b\xd5\x7a\ +\xac\xc8\xba\x39\xf5\xef\x3f\x07\x2d\x6f\x17\xa3\x3b\xcb\x71\x2a\ +\x27\x81\x4c\xc0\x08\x91\x55\xe0\x2f\xc6\xa1\x7e\xdb\xb7\x4f\x41\ +\xf8\x86\xb6\x84\x8e\x14\x18\xff\x13\x63\x2b\x4c\x35\x91\x90\x2c\ +\x0f\x43\xb7\xa0\x70\x9a\x4f\x29\xdf\x37\x1e\xd7\x2f\xf8\x62\xbd\ +\x2b\xcf\x86\xfd\x44\xd6\x82\x91\x10\x17\xd7\x17\x92\x7d\x97\xa0\ +\xd6\x14\x27\x9d\x25\x61\x50\x15\xde\x01\x77\x35\x4d\x50\x23\x91\ +\x95\x60\xc3\xab\x02\x8e\x77\x19\x32\x64\x2e\xe6\xe5\x26\xc9\xdb\ +\x69\xca\x99\x53\x5e\x2c\xc6\x4c\x35\xcb\x80\x3e\x45\x47\x9b\x41\ +\x5c\xf8\x1c\xaa\x4b\xe2\x69\x4c\xa3\x59\xe3\x4f\xa0\x8e\x84\x0b\ +\x38\xed\xa8\x0f\x89\xd2\x42\x4d\xd8\x09\x89\xb6\xfe\xd6\x86\x86\ +\x3b\x31\x56\x42\x67\x64\xd2\x58\x1d\xba\xe9\xa7\xa8\xa8\xc9\x28\ +\x4a\x5e\x4d\xb9\xb0\x8a\x50\x11\xae\x45\xb1\x33\x51\xcb\xdd\x41\ +\xb8\xf5\x63\xd8\xe3\xc7\x73\x65\xef\xf3\x5e\x6e\x53\xa7\x1e\xd7\ +\x6a\xd6\xa8\x63\xe0\x89\x2d\x0d\x76\x55\x0a\x29\x53\xe9\x26\xc3\ +\xc8\xfa\x9e\x70\x3d\xb1\x5a\x4d\xc6\x39\x9b\x9a\x6c\x34\x11\x40\ +\x88\xaf\xef\x14\x4a\xeb\xa3\x78\xab\x5d\x95\x2a\x56\x18\xcf\x0f\ +\x16\xc6\xca\x16\x4a\xaa\x70\xc8\xdf\x34\x95\x9e\x4f\x5d\x05\x17\ +\xbe\xea\xf4\x04\xf1\xfc\x94\x02\x47\x82\xcd\x15\xef\x33\xf8\xfb\ +\x2b\x3f\x3f\x6b\x1c\x03\x46\x63\x05\x7c\x08\xaa\x8f\x07\xd4\x37\ +\x0e\xcf\xfe\x6d\x2a\xdd\x0c\x92\x02\xa0\x8c\x15\x4c\xf4\xef\xb8\ +\xf6\x21\x29\x76\xea\x1a\x84\x31\x43\x4a\x35\xe2\x8a\xe5\x8c\x91\ +\xb7\xd3\x4e\x72\x00\x6b\x22\x94\x33\x1a\xdb\x4b\x75\x19\x10\x14\ +\x00\x2e\xfd\x4b\xcf\x6d\x0c\xc4\x7f\xb6\xd2\x24\x7f\x83\xb1\x94\ +\xaf\x29\x32\x03\x6c\x88\x95\x69\x1b\x49\x8e\x93\xd3\x33\x66\x58\ +\xfd\x4b\x2b\x41\x18\xd8\xd2\x74\xa2\x0e\xaf\xd4\x01\x08\x7d\x10\ +\xec\xd1\x48\x62\x13\x0e\xee\x5b\x0e\x0d\x1e\xbc\x0d\x9a\x2c\x56\ +\x51\xc1\xc1\x15\x05\x20\xeb\xf4\xea\x53\x70\x17\x46\x58\x49\x64\ +\x08\x38\x5b\x05\xec\x07\xce\x00\x73\x89\xff\x10\x54\xff\xa5\xb3\ +\xdf\x85\xa5\x4b\x6d\x60\x68\xd3\x2b\x74\xe8\xb0\x7f\xa4\xbb\xbb\ +\x0b\x86\xf5\xc1\x9c\x60\x76\xd0\x7b\x89\x4a\x55\x06\xd1\x58\x3b\ +\xdc\x6b\xe6\x0a\x5e\x04\x07\x98\x09\xf1\x41\xa4\x0d\x0c\x06\xeb\ +\xae\x20\x2d\xcc\xdf\x4c\x4f\x2f\x51\x5b\x1f\x13\x2b\x5a\x53\x92\ +\x7f\x23\x49\x88\x3d\x5d\xba\xb8\x5c\x5a\xb1\xc2\x01\x9a\xf6\xe7\ +\x65\xec\xef\xde\x77\x74\x0e\x65\x30\x18\xc1\x97\x2f\xf7\xa4\x6d\ +\x25\xb2\xd6\xbd\x35\x57\x78\x18\xdb\x63\x64\x4d\xc4\x40\xc3\x9e\ +\x62\x7c\xf3\x65\x66\xfc\xa8\x6d\x4d\x9a\xa8\x73\x38\x91\x21\xf1\ +\x9b\x48\x3b\x18\x0c\x0e\x2b\xa0\xfc\x47\xad\x08\x86\x92\xa0\x2e\ +\xb2\xc0\xb5\x92\x54\x18\x3b\x49\x52\x70\x9a\x7a\x1e\xc1\xbe\xbe\ +\xbd\x65\x9f\x32\x17\x8d\x96\xbe\x07\xd3\x70\xbe\x63\x30\x38\x88\ +\xee\x6d\x65\xb5\xfb\xdd\xc3\x87\x9d\xa5\x11\x8d\x07\x53\x1e\x1c\ +\x3e\xbc\x46\xbb\x3f\x02\xda\xf4\xe6\xa3\x67\xdb\x5b\xb6\xf4\x16\ +\x00\xb6\x97\x76\x74\x0f\x26\x80\x4b\xff\x5e\xf5\x33\x83\xc1\x46\ +\xd7\x04\x6c\x2c\x00\x53\x3d\xbd\x6e\x64\x44\xf0\x5a\x9a\xa4\x92\ +\x78\x3b\x40\x4a\xc3\x39\x09\x00\xdb\x51\x1f\xe4\x01\x26\xa1\x1d\ +\xd4\x63\x64\x4b\xc4\xa4\xb1\x33\x10\x83\xc1\xf0\xda\xb0\x21\x2f\ +\x95\x8d\x58\xe4\xc9\xf3\x8a\x82\xe4\x5a\x05\x93\x11\xa8\xd9\x8a\ +\x89\x0c\x09\x99\x8d\xfb\x6a\xe0\x57\x2a\x80\x85\xb1\x2e\x46\x22\ +\xae\x39\xae\xa4\xad\x69\x8d\xf1\x2b\x7f\xd1\x5d\x86\xc1\x60\x90\ +\xf7\x91\x3c\x94\xd0\xdb\x57\xf7\xbc\x86\x07\xf3\x2a\x0c\x88\x8c\ +\x6b\x9d\x6c\xf1\x14\x45\x7a\xfa\xd4\xc0\x9d\xc6\xc0\x94\x7b\x07\ +\x0e\x6c\x46\x1b\xdc\x89\x10\xd4\xb9\x67\x63\x68\xd8\x6e\x55\xb1\ +\x62\x23\xb1\xda\xc5\x4a\xbd\x95\x6d\xbc\xcd\x64\x30\xbe\x5d\xab\ +\xb5\x0a\x4c\x21\x42\x33\xf3\xbe\x75\xd9\xb2\xf7\xd5\xdd\x3f\x55\ +\xaa\xd7\x48\xb6\x75\x97\x3d\xb2\xc7\x20\xab\xbd\x30\xc6\x62\xd0\ +\x1b\x3b\x74\x4f\xb7\x6e\x07\x15\xfd\x15\x6c\x31\xed\xa2\xde\xbd\ +\xab\xb4\xae\x4a\x95\x67\x10\xb0\xfd\x8c\x3a\x3d\x6f\x34\x2c\x49\ +\x4d\x64\x87\xc1\x60\x6c\xaa\x5d\xbb\xc1\xa6\x3a\x75\x7c\x50\x6f\ +\x47\x46\xf6\x15\x86\xe5\x0e\xc5\xb0\xe5\xa4\xb1\x22\xab\x12\x46\ +\x82\xfa\x30\xc2\x49\x52\x51\x2c\x86\xae\x48\x15\xfb\x48\x57\x8f\ +\x45\x8b\xf6\xe1\x99\x19\x8d\x1d\x19\x35\xea\xac\xfc\x9d\x3a\x1a\ +\x06\xdd\x49\x3a\x57\x72\x0b\x35\x18\x0c\x16\xa9\xfd\x23\x3a\x34\ +\x74\xc5\x8e\xd6\xad\xaf\xc8\xda\xad\x9b\x90\xf4\x3e\x74\xc9\xce\ +\x4e\xe9\x57\xae\xa2\xb6\xbc\x1a\x8a\xd0\x97\xa9\x09\x25\xdd\x43\ +\xea\x6f\x37\x55\x2d\x43\x2a\xe0\x36\xb2\xe1\x17\x6a\x77\xe7\x54\ +\x8a\x2f\x4d\x84\xe8\x2b\x14\x30\x18\x82\x0d\xcf\x90\x44\x4f\x49\ +\x5b\x1f\x5d\x42\x9f\x41\xc0\xe8\xce\xd6\xc6\x8d\xcb\xca\x55\xaa\ +\x89\x62\x6c\xa4\xcd\x48\xd5\xe6\x38\xf3\xdd\xa5\x56\x4f\x58\xe9\ +\xa8\xc3\xeb\x5b\xd9\xbc\xb0\xa6\x7c\x7f\x18\x0c\xcd\x1d\x46\xf6\ +\x4b\xd8\xa3\x47\xd5\x3c\x16\x2e\x74\x49\x5d\x3e\x80\xc1\x60\xc3\ +\x6b\x0f\x9a\x4a\x2a\xb5\x5a\xaa\xe3\x13\x26\x6c\x72\x9b\x36\xed\ +\x38\xc6\x8c\xa1\x2e\x56\x13\xe7\xb5\x58\xe9\x64\x49\xbe\x77\xf0\ +\xe0\x16\x8c\x77\xd5\xa8\x4c\xe8\x85\xe7\x71\x74\xce\x33\xcb\x99\ +\x73\xdf\x9b\x7b\xf7\x06\xe1\x79\x75\x91\x3a\x18\x0c\xae\xe5\x02\ +\x0d\xc1\x6c\x1a\x63\x6d\xc0\xd9\xa0\x11\x0c\xa9\x86\xb2\xe2\x1d\ +\x9f\x38\xd1\x0d\x63\xe3\x40\x3d\xcd\xde\x6b\x81\x6e\x6e\xeb\xe8\ +\x4c\x88\xed\xe9\x73\x2f\x53\xd3\xb4\xaa\x44\x33\x18\x0c\x8d\xc6\ +\x92\x45\x71\x66\xbb\xba\xa5\x41\x83\x7b\x32\xef\xb2\xa0\xd0\x02\ +\x72\x2f\xb7\x93\x41\x5e\x5d\xbb\x76\x37\x9e\xd7\x17\xff\x08\x0c\ +\x06\x1b\xdf\x88\x2f\xc9\xc9\xe4\xc9\xac\x2a\xab\x0d\xfa\x82\x5d\ +\x05\x20\x57\xc0\xa4\x0d\x35\x6b\xde\xc7\xf3\xc9\xe0\x5f\xc6\xe5\ +\xa4\x63\x86\x3a\x07\xd5\x12\xa9\x82\xc1\xe0\x6e\x40\x86\x1a\xee\ +\x7f\x5f\x30\x45\x36\x25\xb9\x88\x33\x5c\xf2\x33\x4f\xcf\x75\x78\ +\xa7\x52\x2a\xb1\xbf\xfa\xe0\x62\xbc\x67\xbc\x58\x88\x9a\x8a\x0c\ +\x04\xee\xc3\x30\xfe\x19\x5c\x25\xfe\x1c\x0c\x06\x57\x94\x23\x20\ +\xee\x4d\x86\x46\x86\x67\x55\xa6\x4c\xe8\xfb\xfb\xf7\x47\x0b\x2d\ +\xc0\xa8\x96\x2b\x41\x73\x85\x18\x5b\x28\x80\x9d\xed\xda\xed\xa6\ +\x7b\x78\x47\xd7\xfe\xf5\xaa\xc8\x60\xb0\x4c\xdc\x10\x5a\xd5\x14\ +\xb5\x68\x18\x5f\x38\xae\x03\xb4\x9b\x59\xa0\x05\xf3\xb3\x5b\x8e\ +\x8e\xdb\x2e\xae\x58\x71\x00\x5a\x8e\x0f\x65\x4a\xd8\x74\xbc\x1f\ +\x81\x70\x43\x58\x42\x6c\xec\x22\xea\x1e\x2b\xfe\x12\x0c\x06\x1b\ +\x5e\x25\x90\xfa\x20\xec\x81\x61\xbd\x46\x42\xf4\x25\x0d\x83\xdb\ +\x01\xa6\x84\x5e\xbb\x66\x43\x67\x40\xb0\xd7\xc7\xb7\x6f\x67\x60\ +\x35\x7c\x4d\xe3\x44\x9f\x35\x6b\xf6\x62\xbc\x89\x48\x13\x18\x0c\ +\xd6\xce\xfc\x05\x0d\x48\x16\x24\x27\x26\x92\x63\xa5\xa8\x00\x10\ +\x4c\x3f\x44\xab\x59\x78\x50\xd0\x10\xc5\xe3\x89\xab\xde\x96\x86\ +\x0d\x3d\xc9\xd8\xd6\x57\xaf\xfe\x08\xf7\x53\xbf\x6f\x3b\xc9\x60\ +\xb0\xe1\xe5\x06\xab\x83\x2a\x99\xb7\xa9\xce\xb9\x5c\x53\xaa\xd4\ +\x69\x45\xde\x81\xfa\xa2\x21\x8f\xf3\x3e\x25\x3e\x3f\x75\x77\x5f\ +\x4f\x32\x72\xb2\xb5\xd3\x60\x70\x19\x38\x99\xda\x33\x8b\xb4\x81\ +\xc1\x60\xbc\xf4\xf5\x2d\x8b\xb6\x4c\xc1\x72\xfb\x18\x80\x73\xdb\ +\x3e\xf0\x19\xdd\x43\xb8\xe8\x0a\x8c\xed\x37\x12\xa6\xc5\xd8\x0d\ +\x2d\xa7\xca\x3b\x5c\xcb\x8b\xb4\x81\xc1\x60\xc4\x47\x44\x8c\x40\ +\xb7\x19\x0f\x24\x47\xdf\xa1\x8a\x71\x32\x28\x14\xb8\xc6\x22\x17\ +\x73\x39\xc9\x82\xe3\x7e\x2b\x8d\x6d\xfb\xe5\x97\x0b\x0f\x8f\x1f\ +\xdf\x44\x72\xe0\x48\x15\x8b\xc7\xbb\x8f\x30\xbe\xc4\x58\x08\x23\ +\xf1\xef\x03\x83\xb6\x35\x22\xa3\xc0\x4d\xea\xfb\x83\x26\xb7\xf7\ +\xee\xdd\x06\x63\x52\x97\x05\x1d\xe8\xdb\xd7\x8a\xb6\x92\x48\x88\ +\x8e\x46\x4d\x5e\x30\x3d\x07\x7b\x80\x7d\xdc\x17\x2c\xd8\xa7\xb1\ +\xe2\xc5\x9b\x08\xf1\x2f\xeb\x36\xc3\xc6\x96\x8d\xb6\x3a\xa0\x17\ +\x69\xf0\x8b\x8c\x02\x1b\x9e\xd1\x6b\x7f\xff\x55\xbb\x3b\x77\xbe\ +\x7a\x76\xde\xbc\x31\x54\x29\x4e\x15\x08\x1b\xeb\xd4\x21\xe7\x49\ +\x35\x21\xb1\xbb\x63\xc7\x81\x64\x6c\xf0\x78\xc6\x22\xa5\xec\x3e\ +\xb4\x35\x67\x8a\x7f\x17\x18\xf0\xa8\xf9\x4b\x11\xd4\x67\x22\x23\ +\xc1\x86\x57\x06\x1c\x4d\x14\x80\x65\x89\x12\xf7\xc9\xe8\x56\x97\ +\x28\xd1\x43\xee\x34\x72\x2a\xe1\x04\xa5\x5a\x01\x9c\x2b\x33\x53\ +\x86\x60\x7c\x22\x56\xbc\xe6\x3f\xb6\x8a\x36\xaf\x70\x0d\xa9\xa8\ +\x92\x26\x19\x9a\x1d\xc1\xd2\xad\x9d\x09\x60\x78\x2d\x5d\x3a\x09\ +\xe1\x83\x78\x18\x1d\x65\xac\x3c\x00\x03\xc1\x14\xab\x52\xa5\x5e\ +\x25\x25\x24\xcc\xa3\x00\x3b\x1c\x2f\xad\x30\xf6\x41\xcb\xb1\x72\ +\xcb\x58\x88\x0a\x42\xa7\xc1\x48\x2d\xde\xa3\x4a\x11\xc2\x4e\x4f\ +\x4f\x2f\x49\x00\x06\x85\x0a\xc5\xd3\x7b\xd2\x10\xf3\x92\x42\x95\ +\x4c\xd2\xcd\x00\xf0\xb9\xb9\x8d\xa9\xe9\xde\x41\x47\x8f\xda\x57\ +\xe9\xd9\xd3\x3b\x4f\xc9\x92\x31\x2a\x95\xca\x48\x00\x6d\xcc\xcc\ +\xce\xe6\xd0\xd7\xf7\x98\xa6\x52\x7d\x8e\x7a\xf1\xc2\x05\x43\x45\ +\x2a\x75\xea\xe4\xd1\x77\xef\x5e\x87\xea\xfd\xfa\x9d\xcf\x96\x2d\ +\x5b\xed\x1c\x2a\x15\x55\xac\xff\x48\xbd\xf3\xd8\xe0\x30\x61\x43\ +\x54\x42\x34\xab\xd4\xa5\x8b\x9f\x00\x72\x15\x2a\x14\x8b\x4b\x1c\ +\x8c\xac\x11\xae\xfe\x78\x36\x0b\xbf\x44\x09\xba\x76\x22\x3d\xc1\ +\xc6\x46\xbb\x88\xb7\x58\xd9\xf6\x04\xec\xdb\xe7\x32\xe4\xd8\xb1\ +\x03\xed\x96\x2d\xbb\x8f\xb1\xec\xa5\x20\x6e\xd4\x60\xdc\xb8\x6b\ +\x78\x7e\xab\xb0\x10\xed\x71\x2d\x96\x2d\x7b\xf6\xcf\x41\x9e\x9e\ +\xad\x6f\xac\x5f\x9f\xa7\x8b\x9d\x9d\x73\x2b\x63\x63\x57\xac\x7e\ +\x25\xf1\x05\x39\x27\x95\xfc\xcd\xb9\x98\xd7\xa3\x42\xb7\xc0\x90\ +\xe7\x82\x97\x10\xca\x09\x7b\x74\xec\x98\x5a\x61\x78\x7f\xef\xde\ +\x94\xf9\x6e\x4c\xe5\x26\x74\x4f\xb4\x2c\x5e\xfc\xdd\xb6\xa6\x4d\ +\x1d\xd2\xb7\xb7\x17\x3b\xaa\xd6\x56\xa8\xe0\x68\x8a\x15\x8c\xe4\ +\xf9\x70\x7f\x1b\xd7\xc4\x95\x05\x0a\xbc\x96\x4d\xe7\x8d\xe4\x7b\ +\x7d\xc0\x94\xe3\xe3\xc7\xbb\x41\x57\xe5\x3c\x0c\x34\x91\xe6\x0c\ +\xd9\x2a\x0b\xe9\xec\x87\xdc\xcc\xcb\x02\xa0\x78\x1e\x85\x11\x4c\ +\x84\xe8\x4d\xff\x9d\x35\x25\x4a\x5c\xd1\xa1\xe6\x87\x0c\xda\x26\ +\x62\x82\x36\x83\x29\x9e\xa6\xa6\xce\xe7\xe6\xce\x9d\x28\xd5\xa9\ +\x12\xe8\xba\xb2\x60\xc1\x27\x2b\xf2\xe5\x8b\x86\x4e\x63\x52\x88\ +\x8f\x8f\x2d\x26\x6f\x09\x58\x50\xa4\x27\xd8\x81\xd2\xf1\xb1\x9b\ +\xdb\x46\xc4\xe0\xae\x43\x7e\x2f\x18\x72\x7b\x1e\xd1\xaf\x5f\xaf\ +\xd0\xd4\x43\x59\x24\x44\x29\x52\x18\xc3\x97\x5e\x10\x2a\x14\xc6\ +\x05\x79\x79\xd9\x41\xa2\xef\x16\xcd\x91\x0c\xa0\x7b\x0b\x00\xde\ +\xe5\xca\x30\xb4\x8f\xca\xb8\xbf\xa3\xe3\x76\xcc\x57\x59\xa1\x13\ +\x60\xa8\x30\x29\x6f\xa5\xeb\x39\x06\xcd\x09\xe7\x43\x89\xb8\xaf\ +\x9c\xac\xaf\xdb\x5b\xb5\x3a\x8f\x58\x90\x2b\xdd\x23\x5e\x74\x31\ +\x3e\x3c\x7c\x08\x26\x9d\xca\x4c\xa6\xa6\x7b\xbc\x8e\x8d\xae\x0a\ +\x38\x05\x34\x95\xec\xa4\x9d\x5b\xe9\xf2\xdb\x6f\xea\x9c\x4c\xac\ +\x86\xcf\x37\x54\xaf\xbe\x38\xec\xe1\xc3\xb9\x57\xed\xec\x76\xad\ +\x2e\x5e\xfc\xcd\x7d\x17\x97\x8d\x8a\xdc\xc3\xf1\x71\xe3\xf6\xd0\ +\x9c\xc9\xc6\x25\x1f\x75\x68\xbe\x18\xd7\xb7\x6c\x19\x8e\xc9\x53\ +\x97\x95\x60\x1b\xe3\x8d\xab\x01\x34\x1a\xdd\xbc\xd7\xac\xd9\xf7\ +\x29\x32\xd2\x0c\x9e\xb3\xd7\x50\xa7\x8a\x80\x66\xa3\xd9\xd3\xb3\ +\x67\x8b\x63\xb2\x43\xa4\x77\xec\x66\x86\x1c\xd4\xd9\xf0\x8a\x81\ +\x45\xbe\xf1\xac\x86\xe7\x92\x25\xce\xe8\xe8\x1a\xa6\x34\x16\x81\ +\x00\xed\xb9\x98\xb7\x6f\x17\x53\x89\x90\x00\xc6\x0b\x91\x03\xbb\ +\x91\x40\xcc\x59\xec\x45\x0b\x8b\x03\x96\xc5\x8a\xbd\x92\xef\xfa\ +\x49\x39\xf7\x2c\x06\x4f\x70\x49\x70\xea\xb5\xf5\xeb\x77\xa1\x47\ +\x9a\x39\xee\xf5\x1f\x9d\x3c\x39\xc6\x6f\xdb\x36\xeb\x35\xa5\x4b\ +\xaf\xa6\xc9\xa2\x55\x0e\xe3\x6d\x05\x00\x37\xf5\xfd\x65\xfa\xfa\ +\x09\x08\x1b\xdc\x71\x1d\x3a\xb4\x94\xf8\x06\x32\xac\x91\x21\xcf\ +\x57\x03\xc8\xf5\x99\xf8\x6f\xdf\xbe\x7d\x4b\xa3\x46\x97\xa0\xa1\ +\xe2\x7b\x76\xf6\xec\x0a\x8a\x91\x52\x7d\x1d\xcd\xd9\xc9\xa9\x53\ +\x4f\x60\x6c\x24\x42\x0a\x0b\xa8\x1d\x17\xce\x78\xde\xa7\x16\x2e\ +\x2c\xa6\x79\x76\xcc\xda\x86\x24\x5c\x56\xd2\x04\x1c\x0a\xe6\xc6\ +\x64\xec\x97\x5b\x92\x24\xd4\x6c\x05\x61\x82\x49\xb5\x2a\x87\x00\ +\xb0\xda\x3d\x40\x3e\xe0\x1b\xb9\xed\x69\x29\x83\xb0\x6f\x71\x25\ +\xe3\xcc\x2b\x27\xd3\x8a\x0e\xf4\xe0\xd0\x0c\x0b\xcc\x72\xaf\xec\ +\x16\xe0\x64\x39\x0f\xcd\x95\xd5\x8d\xe4\x1a\x68\x55\x83\xa1\x91\ +\xc8\x91\x01\x98\x0b\xec\x0a\x9a\x80\x0d\x35\x0c\x6e\x34\x18\xa5\ +\x03\x39\x9a\x8c\xeb\x0e\x0e\xb5\x1c\x9a\x37\xf7\x25\xef\x17\xa5\ +\x15\x85\xdc\xb8\xd1\x58\x48\x20\xe1\x36\x18\x0d\x2d\x5e\xc8\x82\ +\x4b\x95\x99\x81\x41\x6b\x0d\xe9\x80\x33\x02\xc0\xef\xac\xa4\x7b\ +\x49\xcf\x0c\x95\xfb\x66\xe3\x2b\xa8\xe9\x58\x51\x7a\x25\x24\x25\ +\x25\x35\x14\x1a\xd0\xee\x7f\x07\xc7\x4c\x31\x1c\x17\xa2\x70\x66\ +\xf7\xd2\x8d\x2f\x45\xae\xe7\x1a\xf9\xc0\xd5\xd5\x1e\x5d\x43\x5d\ +\xe9\x5c\xa1\x21\x76\x1a\x06\x55\xaa\xc0\x9b\xfb\xf7\x97\xc6\xe4\ +\x5a\x90\xeb\x99\xbc\x67\xe4\x54\xf1\x32\x33\xb3\xc2\xbb\x39\x21\ +\x82\x1a\x80\x95\x30\xce\x79\xf0\x60\x0f\x6c\x41\xef\xec\xef\xd9\ +\xb3\xc4\x1f\x42\xe8\x67\xf8\x16\x86\xa1\x82\x2e\xca\x39\x32\x3a\ +\x9c\xb5\xcf\x90\x1a\xd8\xb7\x6a\xea\x28\xb4\x83\x94\x31\xb5\xa4\ +\xdf\xd2\x1c\x39\xc6\x08\x9d\x00\x1b\x5e\x0d\x70\x0c\x68\x24\x24\ +\xa0\x38\x1c\x47\xf1\x38\xc4\xe8\x82\x68\xb2\x90\x03\x78\x1d\xe1\ +\x02\x6b\xbc\xb3\x80\xde\xb5\x32\x34\x6c\x4f\xe3\xfb\xba\x77\xf7\ +\x26\xaf\xdb\x87\x27\x4f\x56\xe3\xda\x14\x63\xce\x60\x0c\xb8\x80\ +\x8c\x4f\x64\x08\x18\xc9\xc9\xc9\x6d\xf6\xf7\xea\x75\x09\xde\x64\ +\x25\x34\x40\xba\x29\x26\xdf\x98\xdf\xb2\x68\xa9\x1c\x08\x27\x0b\ +\xcd\x4b\x69\xa1\x13\xe0\xb0\x41\x0d\x8d\x7d\x7f\x41\x2a\x29\xa1\ +\x89\xc4\x24\x45\x9c\x99\x39\x73\xb7\x3c\x43\xfc\x0a\xe6\x93\xef\ +\xec\xa7\x77\x9e\x7b\x7a\xda\x60\x35\xdc\x80\x9f\xe3\x61\x9c\xe3\ +\x0e\xf4\xee\xdd\x72\x75\x91\x22\x4a\x11\xe6\x5d\x30\xe3\x54\x89\ +\x79\x87\xd2\x2d\x31\x2e\x6e\x19\x39\xc2\x0e\xf6\xeb\x77\xf8\xea\ +\xba\x75\xc3\x34\xe6\xb0\x22\x58\x0d\x2c\x4b\x55\xe7\x28\x15\x1a\ +\x43\x3b\x14\x6c\x2d\x4f\x8b\xac\x05\x43\x3a\x44\x52\x70\x3d\x0d\ +\x8e\xc3\xcf\xaf\xc1\xaf\x0e\x4d\x9b\xde\x92\x2b\xd7\x2c\xb0\x9a\ +\xc6\x64\x96\xa4\x2d\x26\xce\x07\x41\xb6\x15\x2a\x5c\x55\xce\x71\ +\x76\x95\x2a\xd9\xfb\x6c\xd8\x60\x04\x71\x9d\x77\x38\x03\xc6\x63\ +\xf5\x3b\xf8\xcc\xcf\xaf\x80\x90\xc8\x98\x33\x04\xf7\x33\x07\xdb\ +\x81\x13\xc1\x81\x32\xc9\xa1\x39\xcd\x87\x16\x29\xae\xf7\x55\xaa\ +\x8d\x0d\x11\x59\x07\x86\x69\x8d\x1a\x39\x77\xb4\x6c\x79\x42\xd1\ +\x5c\x24\x27\xca\x85\x65\xcb\x76\xca\x6c\x93\xee\xa0\xbe\x96\x81\ +\x9a\xc8\xd5\x4f\xfd\x3e\xa4\xdf\x42\xe9\x7a\xd1\xdc\x7c\x17\x9e\ +\x39\xd1\xe4\x52\x7c\x0f\xbf\x37\x4f\xcb\x50\xc7\x82\x9e\x8b\x85\ +\xc8\xe0\xc6\x17\x9c\x46\x06\x89\xbe\x39\x88\xe5\xad\x3f\x39\x69\ +\xd2\x96\x83\x03\x06\xec\x74\x6c\xd7\x6e\xbf\x63\x9b\x36\xe7\x90\ +\xe4\x70\x13\xce\xb0\x23\x59\x1c\x20\x67\x50\x95\xb2\x5a\x73\xb1\ +\x66\xcd\x87\x64\x3c\x10\x3d\x3d\xa5\x28\x0f\x6b\x42\x56\x2d\xbf\ +\x52\x0c\xf3\xd8\xd8\xb1\xce\x10\x38\xf5\xa5\x7b\xf4\x5f\x3b\x29\ +\xd3\x8f\x3c\xf1\xbb\xd3\x41\x03\xf9\x3b\xca\xd5\x8a\x7e\xc7\xd6\ +\xc8\xa8\x8d\xc8\x50\x30\x64\xf8\xa7\x0f\x38\x04\xfc\x1d\x9c\x04\ +\xce\x04\x17\x82\xc6\xba\x53\x92\xc5\x9a\x8b\x93\xa9\x3d\x53\xec\ +\xfb\xf7\xa3\xbf\xf1\xed\x59\x8f\x12\x6a\x29\xe7\x92\x32\x1c\xa8\ +\xd9\x05\xf2\x02\xef\xd2\x76\x85\x56\x48\xeb\x32\x65\x1e\x27\xc5\ +\xc7\xd3\xca\x58\x5a\xae\x86\x0b\x29\x0e\x04\xce\x89\x78\xf6\xac\ +\xce\x0b\x6f\x6f\x52\x1d\x1e\x26\xb2\x1a\x1c\x8f\xd5\xa1\x15\x8e\ +\x27\xa3\x11\xd8\x4c\x7c\x03\x4f\xce\x9c\x31\xbe\xbb\x6f\xdf\x56\ +\xfa\xc6\x0c\xbe\x79\xb3\x34\x8c\x2d\x41\x8a\xe5\xc4\xbc\xf2\xf7\ +\xb7\xa6\xdf\x17\x12\x6b\xab\x55\xab\x85\x33\xdd\x53\x7a\x0e\x06\ +\xde\x39\x78\xb0\x95\x34\xc6\xbf\x09\x06\x83\x8d\xb2\x82\xf4\x58\ +\xe6\xc7\x79\xec\x67\x19\x0f\xfa\x0a\x2f\x19\x79\x33\x07\x68\xf7\ +\x62\x0b\x3c\x73\x66\x05\x6d\x25\xad\x0d\x0d\x03\xbe\x77\x2b\xc3\ +\x60\x30\x64\x2e\xe5\xa1\xc1\x83\x77\x51\x2b\x5f\xa9\x2a\x9c\x53\ +\x68\x01\x5b\xcd\xa3\xe0\x97\xc7\x27\x4e\x6c\x94\xed\x9f\xfe\x01\ +\x18\x0c\x5e\xf1\x3a\xc8\x80\x78\x09\x79\x6e\x33\xc7\xaa\xb7\x02\ +\xcc\x6f\x22\x84\x3a\x40\x4e\x8e\x15\x3c\x1f\xfe\x77\xa5\x08\xc0\ +\xcd\xf8\xef\x4c\x4a\x25\x39\x9a\xc1\x60\x68\x86\x0e\xe0\x50\xd9\ +\x21\xe3\x7a\x6f\x70\x7d\x8e\xc0\xf8\x47\xc4\xf3\xa8\x29\x7d\x71\ +\x2d\xc3\x32\xc0\x3b\x53\xc0\xd3\x44\xdc\x4f\x04\x73\xab\x4b\x4f\ +\xf4\xf4\xae\xc9\x73\xdf\x71\xf1\xa7\x60\x30\xd8\xf8\x9a\x5e\x5e\ +\xb5\x6a\x3f\xaa\xc8\xdf\xc9\xf6\x4d\x11\xe7\x4d\x4c\xe6\x68\x6f\ +\x45\x61\x64\x27\x64\x20\x36\x5e\x43\x9d\xea\x18\x3d\xdb\xda\xa4\ +\x89\x2b\xdd\xa3\xe4\xc4\xfa\xaf\x5b\x3b\x31\x18\xdc\x3d\xb4\x69\ +\x42\x4c\x8c\xf1\x91\x91\x23\xcf\x52\x5d\x9d\x34\x28\x4b\xed\xec\ +\x16\x68\x75\x5c\x8b\x0b\x0b\xb3\xa0\x8c\x16\x14\xc4\x7a\xca\xf8\ +\xde\x21\x5c\x13\xd6\x56\xaa\xf4\x9c\xe2\x79\x7f\xdf\x85\xcd\x60\ +\x70\x13\xc3\x5e\x6f\x03\x02\x2c\xb7\xb7\x6c\x79\x1d\xc5\x91\x4e\ +\x1a\x8d\xeb\x77\x83\x29\xaf\x6e\xde\xb4\x92\xa9\x49\x75\xc1\x9e\ +\xf6\xf5\xea\x3d\x50\x82\xea\x0f\x8e\x1c\xb1\xc7\x58\x1a\xb3\x52\ +\x18\x0c\x36\xbc\x52\x32\xdb\x61\x89\xe2\x58\x81\x7c\x00\xe9\xe9\ +\x7f\xbd\x77\xe0\xc0\x70\xa1\x01\x48\x7d\x9f\x22\x83\x43\x1a\xd2\ +\x0d\x2a\x1d\x12\xdf\x0d\x06\x83\x0d\x2f\xaf\x90\x40\x6e\xdf\x28\ +\x32\x2c\xd4\xd3\x05\x2a\xb5\x5c\xb8\xaf\x83\x2e\x32\xa1\x28\x98\ +\xfc\xf4\xfe\xe1\xc3\xd5\x64\x9c\xc6\x42\x94\xc3\xf8\x3a\xd0\x13\ +\xdb\xd0\x03\xb8\xb6\x13\x69\x07\x83\xc1\xf2\x01\x7b\xbb\x75\xbb\ +\xac\x64\xb2\x83\x21\x60\x3c\xdd\x1f\x1d\x3d\xfa\x34\x9e\xf7\xc0\ +\x7d\x45\xd9\x3b\x2d\x05\x5e\x4b\xa5\xee\x2b\x09\xec\x24\x74\x12\ +\x0c\x56\x5e\xd6\x51\x40\xe2\x3b\x66\xa8\x9b\xdb\x92\x9e\x5b\xb7\ +\x3a\x56\xe9\xd1\xe3\x54\x9e\x62\xc5\xa2\x30\x9c\x2b\x07\xca\x7a\ +\x3a\x58\x5a\xfa\xe0\x67\x4f\xd0\x06\xef\x15\x68\x3a\x6b\x96\xcb\ +\x92\xcf\x9f\xad\x26\xde\xba\x65\x9d\xa7\x78\xf1\x28\x55\xb6\x6c\ +\x2e\x30\xc4\xb3\xe0\x40\x91\x26\x30\x18\xbc\xd2\x35\x04\xc7\x3c\ +\x39\x7b\xd6\x16\x89\xcf\xea\x2a\x04\xb4\xee\x75\x90\xad\x9d\x12\ +\x6d\x8c\x8c\x82\xf1\x7c\x8e\x74\xaa\xd4\xf7\xdd\xb0\x61\x95\x56\ +\x9d\xd7\x12\x91\x66\x30\x18\x6c\x78\xd9\xd1\xa4\x7e\x3a\x55\x20\ +\x04\x5d\xbe\x3c\x5a\x00\x38\xcf\xc5\xa3\x93\x4c\x48\x5c\x5c\x5c\ +\x59\x21\x61\x53\xb1\x62\x77\x32\x34\x28\x56\xbd\x77\x19\x3a\xf4\ +\x9c\x97\xa9\xe9\x54\xf1\x7d\x60\x30\x38\x5b\x05\x6c\x0f\x76\x15\ +\xc0\xba\xaa\x55\x3d\xa4\xaa\xb0\x05\xae\x45\x41\x43\xd0\x9b\xc6\ +\xae\xd8\xd8\xec\x91\x55\xce\x24\x1d\xd0\x00\xcb\xdc\x7a\x29\xfb\ +\xb7\x00\x4c\xab\xe4\x37\x83\xc1\x78\x78\xe4\x48\x67\x65\x9b\x49\ +\x54\x7a\xda\x41\x4d\xec\x91\x94\x0b\xcf\x86\xb1\xe1\x8a\x7c\x1f\ +\xe9\xaa\xc8\xf7\x3e\x9a\x08\xd1\x53\x30\x18\xec\x34\xf9\xdb\x32\ +\x01\xb5\x2e\x6d\xdc\xe8\x3b\xfe\xe6\x4d\xcb\xce\x36\x36\x7b\x2b\ +\x77\xef\xee\xaa\x87\xa2\x57\x95\x9e\xde\x97\xae\x76\x76\xe7\xf0\ +\xca\xd9\x05\x2a\x55\x3e\x5c\xb7\x82\xaa\x6a\x90\xef\x5b\x1c\x1f\ +\xbf\xa6\xdb\x86\x0d\xbb\xf5\xf3\xe6\xfd\xa2\xa7\x52\x1d\x86\xf1\ +\xfd\x24\xb4\x40\x79\x9a\xb2\x75\x14\x83\xc1\x90\xc6\x56\x18\xfc\ +\x4c\xaa\xce\x88\xd3\x8d\x7e\x7b\xf7\x6e\x5f\xe7\x5f\x7f\x55\xab\ +\x44\xef\xed\xda\xd5\x87\x64\x03\x34\x5b\x3b\x41\x06\x3c\x9c\xae\ +\xe8\xfe\x73\x03\x67\xc0\xb1\x0f\x0e\x1f\x5e\x43\xf7\xd0\xe3\x77\ +\x4c\xc5\x90\x77\x82\x81\x1a\x43\x0c\x06\xe3\xe8\xef\xbf\x1b\xc3\ +\x80\xde\x6b\xc4\xe9\x52\xec\x2a\x57\xbe\x81\x66\x23\xcb\x14\x7d\ +\x7d\x13\x21\x3a\x2a\x71\xbb\xcb\x96\x96\x7b\xf1\x7e\x28\x19\xea\ +\xf2\x3c\x79\x76\x21\x21\xfa\x33\x52\xc9\xfc\xa5\x91\x95\x06\x3d\ +\x40\x4b\x30\x05\xe9\x63\xe7\x29\x0e\x28\x14\x30\x18\x82\x1d\x28\ +\xb5\xe2\x23\x22\x4c\x4e\xcf\x9c\x79\x04\x92\xde\x17\x5c\x87\x0d\ +\xdb\xf3\xe5\xcb\x97\xa5\x18\x6f\xa1\xb1\x5a\xe5\x46\x45\x42\x24\ +\x32\x53\x62\xdc\xa6\x4f\x1f\x97\x10\x1b\xbb\xe8\xf0\xf0\xe1\x27\ +\x51\x1e\xa4\x0e\x92\x1f\x1a\x34\x88\x0c\x4b\x8f\x94\xa0\xcd\x72\ +\xe4\x78\x40\x63\x44\xa8\x59\x39\x69\x95\x0a\x31\x18\x0c\x12\x9d\ +\x05\x7b\x80\xf3\xc1\xb9\x60\x0d\xa1\x05\xc8\xc1\x2d\xa7\x54\x30\ +\x29\x6c\xe4\x74\x6a\xda\x34\xd3\x37\x77\xee\xac\x41\x2e\xe6\xf5\ +\x60\x6f\xef\x55\x4a\x2f\x35\x84\x10\x76\xc9\x52\xa0\xcf\x52\xa5\ +\xf8\x10\xae\xe5\x45\xda\xc0\x60\x70\x1b\xae\xa7\x1e\x1e\xd6\xe8\ +\x2a\x7a\x93\xe2\x76\x64\x54\xb8\xbe\x7e\x79\xed\xda\x34\x92\x89\ +\x13\x00\x29\x0f\xc3\x83\xf9\x1e\x8a\xd0\xef\x61\x8c\x56\x8e\xad\ +\x5b\x5f\xa7\x6a\x04\x18\x5d\x24\xde\xff\x8e\x95\x8e\xc1\xe0\xde\ +\x77\x53\x70\xbe\x5b\x8e\x56\xca\x87\x1c\xdb\xb6\x3d\x14\x70\xfc\ +\xb8\x21\xc6\x72\x28\x7a\x98\x60\x8a\xcf\x9a\x35\x7b\x31\xd6\x05\ +\x1c\x49\xa5\x3f\x38\x27\xba\x84\x87\x86\x96\x13\xdf\x05\x06\x83\ +\x0d\xaf\x1c\xd8\x5d\x4a\xb3\xd7\x55\xce\x79\x60\x3c\x64\xd9\x03\ +\xa5\xc8\x51\x36\xf9\x6e\x75\x70\x02\x58\x4d\xa4\x0f\x18\x0c\xc6\ +\x5c\x21\xf2\x61\x3b\xf9\x19\x9d\x5c\x5f\x3e\x38\x7e\xbc\xbe\xc8\ +\x58\x30\x18\x8c\x13\x93\x26\x6d\x20\x99\x3e\x18\x1e\x85\x19\x1c\ +\xc0\x3e\x19\xd4\xb7\x9c\xc1\x99\x26\x8c\x1e\x9b\x36\x6d\x6c\xbf\ +\x72\xe5\xfe\xc2\x15\x2b\xbe\x43\xb9\x0f\x55\x98\x1f\x01\x57\x88\ +\x8c\x03\x83\xc1\x71\x3d\x70\x41\x74\x68\xe8\x8a\x9b\xdb\xb7\x6f\ +\x8b\xfd\xf0\x21\xdd\xbb\x81\x32\x18\x2a\x50\x82\x21\x63\x72\xe5\ +\xc1\x2a\x60\x14\x56\xbb\xab\xe2\xc7\x00\x83\xc1\x3d\xd8\x32\xe1\ +\x0b\x8d\xc1\x60\x50\x20\x1d\x41\xf3\x27\x30\x3a\x3f\x30\x23\x45\ +\x6a\x19\x0c\x06\x79\x38\x91\x46\xf6\x1a\xfc\xb4\xad\x49\x93\x9f\ +\x44\xc6\x82\xc1\x60\xbc\xbd\x7f\x7f\xe2\x2b\x3f\x3f\x92\x61\x6f\ +\x2b\x24\x18\x8c\x0c\x92\x08\x67\x94\xa8\x51\xc3\x19\x97\xfa\xe0\ +\x75\x91\xfe\x60\x30\x18\x24\x54\x0b\xda\x64\x42\xc2\x33\x83\x03\ +\xdf\x8c\x14\x21\x16\xe2\x32\x53\x2f\x07\x54\x1a\x32\x16\x0c\x06\ +\xc3\x7d\xc1\x82\xa6\xa8\x44\xb8\x06\x09\x87\x8c\xd6\xc2\x64\xf0\ +\x19\x8e\xd1\x61\xe5\xca\x7b\xb8\xec\x01\xa3\xc5\x0f\x01\x06\x83\ +\xcf\x81\x27\xb1\x3c\x5e\xc4\xb5\xa1\xf8\xd7\x81\x41\xba\x8d\x13\ +\x48\x1a\x4e\xe8\x04\x18\x79\x4b\x96\xf4\x55\x09\xd1\x4a\xa8\x54\ +\x9e\xd4\x09\xc8\x58\x08\x23\xf1\xef\x01\x43\x0a\xa3\x3e\xc4\xb5\ +\x8b\xc8\x72\x30\xd0\xff\x6e\x23\xcd\x89\xa6\xb8\x2d\xb8\xef\x5f\ +\x92\xb1\xc2\x38\x39\x75\xea\x09\x48\x85\x47\xcb\x09\x3e\xb9\x58\ +\x88\xca\x22\x4b\xc0\xa0\x5e\x77\x30\xae\x38\x8b\x5c\xb9\x3e\x9e\ +\x9d\x3d\xfb\x08\xfa\x22\x38\x6c\xaa\x53\xe7\xa6\x54\x8d\x3e\x29\ +\xfe\x15\xe0\x0c\xf9\x4e\x90\x17\x78\x0e\x61\x9d\xcf\x10\xce\x49\ +\xc6\x84\x93\xf1\x15\x9d\x29\x44\x2e\x91\xa9\x60\xc8\xde\x07\x4a\ +\xff\xbb\xd9\x60\x8f\xcf\x9f\x3f\x4f\x75\x68\xda\xf4\x16\x8d\x9b\ +\xe5\xca\xd5\x48\xfc\xf0\xe0\x49\xee\x07\xa6\xec\xeb\xd1\xc3\xfb\ +\xa9\xbb\xfb\xfa\xd3\x33\x66\x1c\x40\xbb\xdf\x3d\xd4\xe8\x10\x1c\ +\x37\x50\x08\x3d\x91\xe1\x60\x98\x08\xd1\x5c\x11\xb4\x75\x1e\x38\ +\xf0\x38\x35\x2e\x11\x12\x07\xfa\xf5\xb3\xa5\xf1\x3d\x5d\xba\x18\ +\xcb\x39\xdb\x8a\xb9\xb1\xc3\xb5\xb0\xf8\xe1\xc0\x06\xf7\xdc\x3c\ +\x57\xae\xa8\xe8\x97\x2f\xcd\xa9\xbf\x1a\xf8\xfb\xc9\xc9\x93\x47\ +\x91\xce\x87\xdc\x66\xfa\x83\xad\x44\x46\x82\xe7\x80\x9c\x57\x37\ +\x20\x46\x1b\xbf\xb1\x56\xad\x47\xe8\xe6\x9a\x8c\xb1\x6e\x78\xa4\ +\xc2\xd5\x00\x73\x71\x90\xe6\xe2\xfa\xe6\xcd\x73\x05\xb0\x4c\x5f\ +\x7f\xaf\x9c\x9b\x47\x3f\x60\x09\x10\x3b\x4d\xce\xcc\x9a\x75\x14\ +\x86\xd6\x41\x48\x58\x95\x2b\x37\x8b\xc6\x37\xd6\xac\xf9\x18\x7f\ +\x04\xb1\x52\x18\xd5\x29\x7d\x3d\x66\x0c\xf2\x0e\xc3\xd0\xc6\x80\ +\x0b\x69\x1e\x0e\x8f\x18\x71\x2e\xe6\xed\x5b\x63\x9b\x72\xe5\x42\ +\xa5\x41\xbd\xc7\xb3\x60\xd9\x11\x88\x54\xc5\xfa\x0b\x00\x5b\xcc\ +\x4d\x34\x76\x64\xd4\xa8\xfd\x18\xa3\x36\x5d\x4d\xc0\x36\x42\x03\ +\xd2\x58\xe7\x80\x1d\x84\xce\x80\x91\x2d\x5f\xe9\xd2\x21\x1d\x56\ +\xad\xf2\xc6\xcd\x65\xa5\x96\x2b\xe6\xe5\xcb\xf9\x06\x05\x0b\x86\ +\xfd\xee\xe3\xb3\x7f\xd2\xdd\xbb\x1b\x0d\x5b\xb6\xf4\xcb\xa6\x52\ +\x0d\x40\x94\xfc\xe1\x12\x7a\x25\x5d\xc0\x28\x25\x84\x91\x4a\x88\ +\x8d\xe0\x0a\xbd\x9c\x39\x13\xda\x9a\x9b\x5f\xc9\x57\xa2\xc4\xfa\ +\x81\xce\xce\x96\x95\x3a\x75\xf2\xd1\xcf\x9f\x3f\x29\x67\xee\xdc\ +\x02\x3f\x9f\x1f\xe9\xe9\x79\x48\x08\x11\xb0\x50\x88\x12\x21\x57\ +\xaf\x0e\x45\xf8\xe0\x4d\xf7\xcd\x9b\xef\x60\x2c\x36\x45\x08\x73\ +\x5c\xbd\x60\x5c\x47\xc9\xf1\x22\x57\x4d\x3a\x83\x4f\x03\xdd\x31\ +\x67\xdb\x84\x6e\x80\xf1\xcc\xd3\x73\x1d\x56\xb7\x7a\x42\x02\x93\ +\x63\x4d\xab\x1b\xf4\xfa\xef\x5f\x5d\xb7\x6e\x10\xd4\x88\xd7\xe3\ +\xf9\x28\xe7\x41\x83\x3c\x69\x1c\x0d\x30\xec\x44\xba\x81\xe1\xb7\ +\x65\xcb\x12\x5b\x23\xa3\x17\xb4\x62\xc1\x3b\x19\x02\x83\x2a\x86\ +\xf9\xc8\x05\xfe\x0e\x9a\x4a\x2e\x06\x5b\x49\x43\x5a\x07\xa6\xdc\ +\xd8\xbc\xd9\x11\x63\x0d\x04\xf0\xe8\xf8\xf1\x16\xe8\x22\x14\x47\ +\xca\xd2\x1b\xaa\x57\x37\x12\x12\x3b\xdb\xb7\xdf\x2d\x3b\x0a\xd9\ +\xe2\xdd\x9c\x42\x27\xc0\x5e\xca\x61\xa0\x4a\x00\x08\x09\x54\x85\ +\xc1\x25\x22\x4c\xf0\x49\x23\x06\x94\x88\x43\x7c\x01\xe8\xf3\x07\ +\xae\x2a\x5c\x38\x82\x1a\x68\xe0\xfd\x3c\x22\xbd\xc0\x5e\xe2\x4a\ +\xf0\x44\xce\xf2\x30\x36\x76\xd9\x58\xbb\xf6\x15\xf7\xf9\xf3\x0d\ +\x35\x9e\x15\x96\xe2\xb5\xb9\x85\x04\xce\x73\xaf\xd1\x66\xeb\x35\ +\xc6\x26\x2a\xf3\x86\x79\x19\x43\xf3\xe5\x32\x64\x88\x07\xc6\xba\ +\x09\x80\x0c\x17\xef\x46\x59\x95\x2e\xfd\x26\x29\x21\x61\x9e\x74\ +\xc2\xe8\x02\xb8\x8d\x2f\x75\x8f\xa1\xc0\x37\x78\x92\x9c\x25\x8f\ +\xdd\xdc\x36\x3a\x0d\x18\xe0\x45\x93\xb8\xbb\x4b\x97\x4b\xa4\x52\ +\xec\x3c\x64\xc8\xef\xcf\x3c\x3c\x68\x35\x6c\x29\xb7\x2c\x9d\x64\ +\xc3\x0b\x6f\xd0\x01\x6c\x21\xbe\x17\x3c\x07\x39\xc0\x36\xa0\x31\ +\xd8\x4c\xfc\x09\x56\xe4\xcf\xff\x80\x9a\x93\xb8\x0e\x1d\xda\x57\ +\xce\x43\x5e\x30\x14\xe3\x61\xf2\xcb\x30\x9f\x1c\xdf\x0c\xa6\xec\ +\xea\xd4\xc9\xd7\x75\xc4\x88\x09\x3a\xe4\x6d\x66\xc0\x70\x4c\x94\ +\xcc\x86\xad\x8d\x1a\xdd\xc6\xa4\x8d\xd8\xdf\xab\xd7\x62\x7c\x3b\ +\xbe\x96\xde\xcb\xc2\x60\x79\x70\x20\xa8\xa7\x6c\x6b\x10\xb7\xfb\ +\x88\x6d\x50\x20\x8c\x34\x49\xae\x86\xe3\xc4\x77\x83\xf1\x77\xb6\ +\x7d\x37\xec\xed\x47\x58\xe4\xc9\x13\x2b\xe7\xeb\x29\x98\x00\xa6\ +\x78\x99\x99\x39\xd1\x97\xa1\xdc\xa9\xd4\xc5\x98\xe2\x65\x56\x18\ +\x08\xd6\x11\x59\x0f\xc6\x23\x2f\xaf\xa2\x07\xfb\xf5\x3b\x8b\xe6\ +\xf3\x89\xe4\x91\x5c\x9e\x37\xef\xfe\x7d\xdd\xbb\x57\xc4\x04\x2e\ +\xf1\xdd\xb0\x61\x34\x0c\xe9\x77\x0d\xaf\xe6\x78\x30\x65\x75\xd1\ +\xa2\xcf\x43\xaf\x5f\xb7\xa1\x33\xc6\x87\x27\x4f\x56\xaf\xad\x58\ +\x31\x48\x6e\x43\xf7\x60\xc2\x6b\x8a\x8c\x02\x1b\x65\xa1\xe7\x5e\ +\x5e\xcb\xb1\x03\x39\x8b\x34\xb0\x53\x34\x17\x38\xbf\xc5\x24\x44\ +\x47\x53\xbf\x84\xec\xf2\x1c\xee\x45\xf3\xb8\xab\x43\x07\x5f\x74\ +\x7c\xdd\x7f\xa0\x4f\x9f\xf3\x50\x96\x4e\xa6\x2f\x48\x8c\x97\x14\ +\x12\x5a\x73\xba\x28\x13\x93\x1d\x58\x8f\x11\xec\x4d\x1a\x1c\xb4\ +\xc2\xc9\x30\x40\xb4\xb5\xa1\xe1\x4a\x5c\xef\xd3\xb9\x41\x00\x34\ +\x21\x78\x16\x81\x16\xbe\x21\x71\xe1\xe1\x16\xf8\x9d\x41\x60\x19\ +\xb0\x72\x54\x68\xe8\x94\x65\x39\x73\x26\xaa\x5b\xfb\x16\x2c\x68\ +\x2c\x80\x3f\x84\xc8\x98\x73\x03\xcf\x57\x71\x70\x54\xa8\x9f\x9f\ +\xe9\x96\x86\x0d\x6f\x43\xac\x28\xe9\xd8\xf8\xf1\x03\x31\x37\xcd\ +\x30\x5f\x43\x69\x0e\xec\xeb\xd6\x7d\x80\x77\x4c\xe4\xae\x64\x1c\ +\xfa\xe2\x1d\xa1\x71\xcb\x62\xc5\xd6\x0a\x2d\xc0\x10\xb7\xcb\x55\ +\xf0\x05\x7e\x7f\x90\xc8\x34\xf0\x44\x96\x05\xc7\xdd\xda\xb5\xcb\ +\x01\xdb\xc9\x60\x65\x3b\x02\xed\xfd\x13\x18\xaf\x88\xfb\x3e\xb2\ +\x43\xa8\x33\xc5\xed\xb4\xb7\x43\x58\x19\x3f\x2c\xcf\x97\x2f\x26\ +\xfa\xd5\xab\xe9\x78\x2f\xa7\x4c\x8a\xde\x40\x67\x44\x91\x11\xe0\ +\xf9\x52\x81\xa3\x3e\x45\x46\x9a\x63\x25\x9b\xaa\xb9\x85\xdc\xdd\ +\xb9\xf3\x55\x3c\x33\x12\x12\x8f\x4f\x9e\xfc\x45\xc6\xf3\xae\x0a\ +\x2d\x24\x25\x25\x35\x42\x67\xd8\x73\xf4\x1c\x0e\xb3\x0b\x22\xd3\ +\xc1\x93\x58\x17\x9e\xb3\x39\x94\x40\x8b\x6d\x4b\x20\xbc\x5c\xf3\ +\x31\x66\x80\x09\x99\x01\xa6\x3c\x39\x7b\x76\x29\xbd\x27\xb4\x80\ +\x6a\xe7\xb5\x64\xac\x78\xd6\x4e\x06\x5d\x95\x8c\xf7\x70\x5c\xa7\ +\x82\x19\x53\xf0\xca\xf3\x55\x03\x2c\x74\x64\xf4\xe8\x0d\xd8\x5e\ +\x46\x91\x97\x19\xd9\x43\xf1\xe4\x75\xd6\x48\x1d\xeb\x49\x73\x81\ +\xad\xa8\x67\x2a\x73\x9e\x0d\xe7\x75\x6f\x6a\x68\x02\xc3\xdc\x80\ +\xfb\x12\x22\xf3\xc1\x07\x78\xb0\xbd\x8c\x01\x35\x14\x00\xb6\x23\ +\x03\x69\xd2\xb6\x35\x6b\xb6\xfd\x1b\xbf\xd3\x08\x1c\xbf\xfe\xe7\ +\x9f\x4b\xd3\x96\x14\xee\xeb\x90\x6b\xeb\xd7\xef\x82\xdb\xfa\x8d\ +\x34\xbe\x00\x6a\x74\x2f\x32\x0a\x3c\x67\x4d\x3f\xbe\x79\xb3\x8c\ +\x72\x62\x61\x78\xb1\x30\xa0\x77\x32\x21\x7a\x03\x98\x84\x94\xb0\ +\xd8\x60\x1f\x9f\xd5\x64\x60\x42\x03\x34\x27\x6a\x8f\x66\xfb\xf6\ +\xb4\x2a\x0e\x17\x59\x0a\x9e\xc4\x82\xca\x6a\xb6\x65\xfc\xf8\x1c\ +\x96\x25\x4b\xbe\x93\x49\xb6\x23\xc4\x37\xb0\x48\x88\x32\x70\x5d\ +\x87\xde\x73\x76\xde\x92\x9c\x9c\xdc\xcf\xba\x5c\xb9\x60\x72\xc8\ +\x60\xc2\x63\xe4\x8a\x77\x0c\xd7\x0c\x12\x48\x65\xa7\x0a\x58\xf7\ +\xd6\xce\x9d\x76\xab\x8b\x15\x7b\xad\xec\x32\xb0\xd5\x0f\x92\xbb\ +\x8f\x3e\x5a\x0e\x93\xec\x98\x8f\x7b\x58\x15\x3f\x86\x3f\x7d\xba\ +\x02\xcf\x8b\xfd\xa9\x7c\x7b\xe6\x82\xe1\xe7\xe0\x30\x77\x65\xc1\ +\x82\x91\x14\x06\xc0\x04\x5c\x00\x17\xc8\xec\x14\x03\xad\x89\x9f\ +\x00\x8e\xc5\x36\x65\xb8\x12\x94\x8d\x08\x0a\x5a\x45\x8d\x0f\xe9\ +\x1e\x71\xa3\xa1\x22\xa3\xc1\x6d\x96\x17\x04\x5d\xbc\x68\xf7\xe2\ +\xd2\xa5\xb5\x5f\xbe\x7c\x59\x2a\x83\xe5\x06\x5a\x21\xa1\x29\x34\ +\x1f\xc7\x27\x4e\x74\xc3\xb3\xae\xe2\x4f\x20\xe7\xfa\x84\xb1\x10\ +\x15\x44\xe6\x81\xdd\xd2\xef\xee\xdd\x5b\xea\xd8\xa6\xcd\x0d\x64\ +\xb5\xab\x33\x52\x68\xeb\x82\x42\xc9\x5a\x5a\xef\x15\xc1\x19\xb0\ +\xb8\x66\x50\xd6\xd3\xc4\xa4\x39\x3c\x6a\x89\x08\x21\xbc\xc0\x19\ +\x31\xe3\x63\x76\x3c\x57\xb9\xc1\xc6\x60\x3b\xb0\x36\x98\x8d\x1c\ +\x5f\xb2\x82\xfc\x27\xb0\x30\xf8\x61\x55\xd1\xa2\xaf\x92\xe2\xe3\ +\x17\x50\x4a\x99\xd0\x86\xac\x58\x90\xde\x4c\x47\x30\x79\x6d\x85\ +\x0a\x99\x1c\xcf\xe3\x89\x2c\x00\x8e\xf9\x14\x1d\x6d\x1e\xe2\xe3\ +\x63\x4b\x57\x3a\xef\xa5\xb2\x05\xb1\x00\x53\x2e\x2c\x5b\x76\x90\ +\x82\xb2\xb8\x9f\x48\xf1\xa0\x07\xae\xae\xf6\xb8\xcf\x82\x58\x1d\ +\x83\x76\x1c\xb2\xf4\x2a\x01\x86\xa7\xae\x26\xa7\x73\x36\x9d\xbf\ +\xbf\x91\x14\x61\x2d\xab\x16\x26\xc5\x45\x45\x35\x7a\xe1\xed\xbd\ +\x16\xef\xf6\x13\x59\x06\x6e\x52\xdf\x0c\xfc\x05\x34\xd0\x38\x80\ +\x0f\x03\x2b\x62\x92\x3e\xe1\xdb\xf0\x09\x9e\x4d\x07\xb3\x43\x32\ +\xa0\x20\xbc\x60\x34\x61\xbf\x8b\x2c\x03\x6f\x35\x03\x4f\x9d\xda\ +\x60\x57\xb9\xf2\x63\x32\x36\xaa\xbd\x43\x0c\x6f\x37\xe6\x26\x55\ +\x0f\x32\xe2\x79\xcd\xb1\x43\x09\x91\x67\xc1\xdb\xaf\x6e\xdf\x6e\ +\x41\x25\x41\x42\x67\xc0\x69\x62\x07\xe4\xe4\xc4\x62\xfb\xf1\xe5\ +\xe1\xd1\xa3\x9b\x30\x41\xd5\x85\x84\xdc\xde\x14\x14\x59\x09\x36\ +\xba\xca\xe0\x1f\x97\x57\xad\xda\x8f\x6a\x90\x0f\xd2\x91\x75\x59\ +\x5b\xa8\x48\x49\xa0\x86\x03\x46\x9d\xca\xb7\xae\x4a\x15\x1f\x1d\ +\x9b\x3b\x46\x64\x68\x68\x3d\x2a\xa4\xa4\xea\x65\xf2\x66\x52\xa0\ +\x75\xae\x10\xf9\x84\x2e\x82\xb3\x8b\x9a\x25\xc4\xc4\x18\x1f\x19\ +\x39\xf2\x2c\x4a\x84\x6e\xb8\x0e\x1b\x96\x5a\x4f\x04\x15\xb6\xa1\ +\x97\xe9\xec\x1d\x7a\xed\x1a\xa5\xf2\x19\x0a\x9d\x03\x67\xbe\xf7\ +\x7c\x7b\xf7\xae\xe5\xf6\x16\x2d\x6e\xd2\x2a\x87\x04\xe7\x81\x42\ +\x57\xc1\xf3\x95\x07\xec\x05\x2e\x01\x1b\xcb\x5d\xca\x7a\xd0\x44\ +\xa6\xf2\xfd\x2a\x03\xe6\x5e\xb2\xe2\x5c\x47\xc1\x13\x59\x0a\xfc\ +\x3d\x32\x24\x64\x25\xae\x3a\x6e\x70\x0c\xa5\xac\x87\x80\xd5\xec\ +\x18\x19\x99\x94\x77\x08\x5d\x9e\x27\x4f\x78\xec\xfb\xf7\xa6\xe4\ +\x2c\x4b\xc5\x31\x56\x16\xef\xcd\x05\xcd\xa8\x64\x2b\xeb\xcb\x80\ +\x78\x22\xab\x83\x65\xc5\x8f\x04\x9e\xb3\xf6\xe7\x8d\x8d\x0f\xa1\ +\x0c\x48\x7d\xbe\x43\xc6\xd0\x5b\xaf\xa5\x4b\xc7\xa5\xa2\x34\xd6\ +\x9f\x0a\x94\xb5\x84\x6b\x6f\xca\x8a\x84\x34\x80\xc1\xe0\xf3\x5d\ +\x6b\x5a\xd5\x9c\x06\x0e\xf4\xc2\x79\x3c\x49\x26\x3a\x2c\xd0\x58\ +\xd9\xca\x83\xf1\x78\x16\x85\xc4\xe9\xdd\x14\x5a\x80\x32\xc0\x79\ +\x0a\x39\xe0\x18\x11\x84\xf7\x4d\xd3\xde\x27\x8f\xc1\xe0\x78\x6b\ +\x7f\x72\x96\x6c\x6d\xdc\xf8\x26\x92\x1b\x36\x0b\x09\x25\x39\x5d\ +\xa6\x8b\x4d\x05\xbb\x80\x23\x2e\x98\x99\x1d\xa0\x71\xa2\x4d\xa5\ +\x4a\xf5\x45\x9a\xc1\x60\xb0\xe1\x19\x82\xe3\x41\x13\x30\xbf\x00\ +\x10\xbf\x5b\x4a\x46\x85\x62\xd8\xb9\x9a\x7a\x29\xde\xd6\xd6\x6d\ +\x69\xdc\xbe\x5e\x3d\xaa\xc7\xeb\x2e\xbe\x1b\x0c\x06\x97\x01\xe5\ +\x15\x12\x0e\xcd\x9a\x91\x61\x7d\xc5\x39\xef\x89\xe6\x99\x8d\x9c\ +\x26\x07\xfb\xf7\xdf\x4d\x2a\x00\x24\xcb\x21\xd2\x07\x0c\x06\x97\ +\x6f\x41\x1e\xdf\x4b\x36\x1a\xa1\x4a\x71\x52\x0e\xcb\x3b\x5b\x08\ +\x0a\x33\x74\x02\xd3\xb9\x1b\x13\x83\xc1\x46\xd7\xdc\xd3\xd4\xd4\ +\x79\x65\xa1\x42\xef\x34\xbc\x94\x89\x24\x56\x2b\x32\x04\x0c\x06\ +\x1b\x5d\x23\x54\x7e\x98\xdc\xde\xbb\x77\xdb\xce\x76\xed\x4e\x9c\ +\x9a\x3e\x7d\xf5\xa7\xa8\xa8\x8a\xdf\x21\xb9\x9f\x1b\x1c\x0d\x5a\ +\xc0\x68\x67\xe3\x5a\x51\xfc\x0b\xa1\x12\xff\x10\x0c\x86\x3c\xdb\ +\xd5\x06\xeb\x80\x5f\xc1\xf3\x2a\x95\xea\x79\x1a\x3a\x07\x75\x56\ +\x09\xb1\x03\x2c\xad\x31\xfc\x25\x45\x88\x71\xcb\x84\x70\x14\xe9\ +\x06\x06\x83\x9b\xc9\xd4\xc3\x8a\xf6\x11\xb1\xbb\xc4\x13\x13\x27\ +\x1e\xa4\xcc\x24\x2a\xdf\x42\x91\xf3\x07\xa9\x2c\xd0\x4c\xfc\x6b\ +\x90\xc5\x25\xf3\x0c\x06\x56\x31\x13\x3d\x3d\x3d\xd1\x6b\xc7\x8e\ +\xbd\x3d\xec\xed\xfd\x0a\x96\x2b\x77\xaa\x7a\xbf\x7e\x7b\xda\x9a\ +\x99\xed\x15\x2a\x95\xc8\x5d\xb4\xa8\x89\x90\xf8\x67\x69\x63\x0c\ +\x06\xaf\x6e\xd9\x51\x89\x10\x4d\x82\xb5\xd8\x96\x4e\x02\x0b\x6a\ +\x2a\x06\xd8\x18\x19\x05\x5b\x96\x28\x11\x8a\x71\x15\xe9\x65\x82\ +\x91\xf8\x9d\xc5\xdf\x21\x58\xcb\x60\x30\x16\x0b\xf1\x33\x79\x36\ +\xd1\x00\xf4\xb8\x12\xe3\xd3\x04\x74\x4e\x9f\x93\xdc\xbe\xba\x07\ +\x9e\x9e\x5e\x37\x7a\x57\xf2\x79\x1a\x45\xa8\x18\x0c\x06\x29\x73\ +\x43\xad\x3b\x6e\x63\x9d\x3a\x57\x53\x71\xa4\xa8\x85\x6b\xd1\xe3\ +\xe2\x12\x55\x9e\x40\xf5\x6d\x0b\xdd\xbb\xfc\xf6\x9b\x07\x8c\x30\ +\xd0\xa1\x65\x4b\x6a\xdf\xa5\x5a\x44\x6d\xf6\xfe\x1e\x18\x0c\x06\ +\x8c\xed\x92\x5c\xb5\x7a\x69\x18\x5b\x77\xd2\x35\x25\x59\x45\x28\ +\x8e\x59\xed\xee\xdb\xb7\x38\x82\xeb\xb1\xb6\x15\x2a\xbc\xa0\x4a\ +\x75\xc8\xf9\x59\xe0\xfa\x2b\xde\x99\x09\x7e\x01\xb7\x50\x7b\x2e\ +\x91\x3a\x18\x0c\x06\x29\x81\x81\x63\xa1\x97\x72\x53\x76\x62\x4a\ +\xc4\xf5\x0c\x8c\xc7\x1d\xd7\xcf\xa8\xc9\x8b\x86\xb7\x92\xe4\x39\ +\xfa\x61\xec\x0f\x7a\x87\x7a\xe8\xd9\xff\xfc\xf3\x3c\x3c\x4f\x40\ +\x2e\xe7\xa6\x3d\x9d\x3b\x97\xb2\xab\x54\xc9\x4f\x51\xf7\x96\x4a\ +\xd3\x0c\x06\x23\x95\x2d\x63\x6f\xe5\x4c\x66\x5b\xb1\x62\x30\xba\ +\x37\x79\xa0\x23\xd3\xb5\xe5\xf9\xf3\x5f\xd9\xdd\xa9\xd3\x4e\xd2\ +\xd2\x24\x5d\xd3\xa0\xa0\x20\x03\xea\x51\x01\x25\xe9\x8f\x7b\xba\ +\x76\x3d\x43\xa1\x02\xd9\xbd\xc9\xef\xd5\xab\x57\xb9\xd1\x91\xd7\ +\x0f\xab\xdf\x57\x04\xdd\x3d\xce\x2f\x5b\x56\x97\x85\x6b\xb5\xc1\ +\x60\x48\x17\x3f\x74\x4a\xb7\x6e\xaa\x5b\xf7\x21\x3c\x95\x9f\xb1\ +\xd2\xbd\x7d\x72\xfa\xb4\xad\x6c\xb1\x3c\x17\xec\x23\xfb\x59\x74\ +\x00\x53\xa8\x43\x10\x5d\x91\x46\xf6\x42\x9e\xed\x2e\xa3\x30\x76\ +\xb1\xfa\xe7\x3e\x7d\xbc\x64\x33\xcb\x56\x1a\xc6\x56\x87\x0c\x95\ +\x82\xea\xb8\x65\x30\x18\x54\xe4\x0a\xce\x7a\x70\xe4\x88\x3d\x35\ +\x21\xa1\xfe\x07\xe8\x53\xfe\x02\xdb\xc5\xf6\x1a\x2a\x70\x47\x94\ +\x95\x10\x35\x79\xde\x67\xe7\xcc\x51\xdf\x63\x3b\x79\x99\xde\xb7\ +\x29\x57\xee\x21\x9a\xcd\x98\x90\xfc\x9f\xd2\x52\x4d\xfe\xde\x50\ +\x18\xf2\x27\xcb\xe2\xc5\x8d\x05\xc0\x60\x30\x64\xe7\x1e\xb0\xda\ +\x33\x77\xf7\x55\x68\x02\xea\x61\xf7\xd3\x4f\x67\x4e\xcf\x99\xd3\ +\x41\x39\xe7\xc1\x68\xde\x6a\x88\x18\x2d\xc1\xf6\x73\x9f\xd4\xd3\ +\xa4\x5e\x15\x11\x10\xab\x5a\x83\xf1\x06\xf2\xfd\x0e\x52\xe0\x76\ +\xe3\x91\x09\x13\xca\xbf\xba\x71\x63\x4d\x42\x6c\xec\x7c\xd9\xa8\ +\x92\xc1\x60\x68\x06\xba\xc1\x71\xa0\x09\xd8\x5b\x48\xbc\xb9\x7b\ +\x77\xa0\x8f\xb5\xf5\x5e\xb9\x65\xac\x0a\x49\x87\xab\xd2\xc9\xf2\ +\xe5\xba\xbd\xfd\x4e\x4d\x15\x68\x8c\xe7\x47\x13\x51\xc5\xeb\x19\ +\xb1\xb3\x63\xc7\xbe\x7f\xa1\xf0\xcd\x60\xb0\x9e\x4a\x2a\x86\x38\ +\x00\x2c\x47\x4e\x10\xac\x78\xf1\x64\x50\x87\x06\x0d\x3a\x8f\xb1\ +\x29\xda\x7d\xd1\xd1\x9c\x92\x3c\x9f\x51\xd8\xa2\x46\x3f\x74\x73\ +\xab\x2d\xbe\x1f\x0c\x06\xe3\xf8\xf8\xf1\x0b\xd0\xf8\xf3\xc6\xe7\ +\xa4\x24\xe3\xd4\x5a\x6b\x99\x66\xcb\x36\x8f\x0c\xf2\xcc\xac\x59\ +\x47\x65\x97\x5e\x9d\xc2\x0f\xb5\xb7\x65\x30\x7a\x6e\xd9\xe2\x86\ +\x4b\x0a\x78\x06\x25\x40\x61\x94\x63\xa9\x12\xa2\x2b\xee\x97\x26\ +\x61\x81\x4b\xf9\xfa\xd5\x38\x1f\x1a\x81\x76\x58\xb5\xca\x1b\x63\ +\x97\xfe\x66\x4c\x70\x16\x2e\xc5\xc1\x15\x66\x42\xc4\x68\x3c\x62\ +\x30\x18\x9a\xa2\x45\xd8\x62\x8e\xa3\x40\x39\x18\x0f\xe3\xbb\x85\ +\xeb\x57\xf4\x42\x20\x25\xb1\x7a\xda\xb5\x9f\x32\xf6\x77\x14\xef\ +\x9d\xc7\x75\x89\xa2\xc5\x02\xcf\xe8\x7a\x79\xee\x0b\x01\x0d\xc4\ +\x37\xc1\x60\xb0\xf1\x95\xa5\xb0\x02\xd2\xbe\x9e\x92\xd1\x50\xa7\ +\xdd\x93\x93\x26\x6d\x37\x35\x35\xcd\xa6\xd5\x64\xc6\x44\x3a\x5b\ +\x3e\x49\x8d\xcd\x14\x30\x10\x2c\x8a\x98\xde\x4c\xba\xdf\xd1\xaa\ +\x95\xfb\x5f\xf7\x37\x67\x30\xd8\xe8\xaa\x81\xd3\xbd\xcc\xcc\x9c\ +\x56\x15\x2a\x14\x41\xc6\x23\x57\xb1\x9c\x02\xa0\x8e\xad\xb4\xf2\ +\xa1\xd4\xe7\xc9\x2b\x3f\x3f\xeb\x8f\xef\xde\x2d\xa7\x9e\x85\x14\ +\x70\xc7\xea\x76\x1d\xef\x3e\x31\xcf\x95\x2b\x06\xc5\xaf\x16\xe4\ +\xa4\x11\x7f\x09\x06\x83\x8d\x2e\x3b\xd8\x92\x3a\xed\x3a\x0f\x1e\ +\xec\x81\xd6\xd6\xbe\xe8\x0a\x54\x50\x9e\xd1\x26\x83\x29\x90\x6b\ +\x77\xa2\x3e\x17\x60\x0d\xb0\xed\xe1\xe1\xc3\x4f\xd3\x38\xd1\x6d\ +\xda\x34\x2a\x11\xea\x24\xd2\x06\x06\x83\x9b\x92\x80\x7d\x41\x53\ +\xb0\xbe\x00\xb0\xcd\x1c\x2b\xeb\xee\xb6\x08\x0d\x6c\xfd\xe5\x97\ +\xc5\x34\x4e\x35\x77\xc8\x56\x99\x27\xcf\x86\xff\x04\x0c\x06\x77\ +\x03\x5a\x5b\xa3\x86\x21\x9d\xed\xc0\x8f\x8b\x85\xa8\x2b\x00\x2a\ +\xe7\xc1\x56\xf2\x22\x19\x9c\xdf\xd6\xad\x3b\xc8\x38\xa9\x8f\x21\ +\xee\x17\x81\xe7\xf0\xcc\x0d\xd7\x51\x22\xed\x60\x30\x18\x88\xcb\ +\xed\x44\x02\x74\xb2\x3c\xdf\x85\x11\xe9\xe7\xcd\xf5\xeb\x07\xc0\ +\xd8\x26\xac\x29\x51\x22\x0f\xee\x7d\x69\x0c\x67\xbb\x58\x0d\x9d\ +\x4d\x63\x16\x11\x4a\x23\x18\x8c\xce\xd6\xd6\x2b\x87\x9c\x38\x61\ +\x5f\x67\xd8\xb0\x93\x45\x2a\x55\x7a\xa4\x12\xa2\x88\x00\x5a\x19\ +\x1b\x5f\x26\x7b\x84\x23\x65\x2a\xae\xbf\x54\xea\xd4\xe9\xc2\xc2\ +\x8f\x1f\x6d\x66\x85\x86\xae\x2c\xdd\xa0\x41\x00\xde\x33\x87\xe1\ +\x79\x52\x0f\x3c\xe9\x84\xf9\x9b\x60\x30\x78\x9b\x59\x01\x1c\x1e\ +\x15\x1a\xba\x84\x9a\x8d\xa8\xcf\x6f\x65\xcb\xde\x16\x00\xc2\x05\ +\x17\xb1\xb2\x7d\xc1\x59\x8e\x3a\xc1\x36\x03\xeb\x44\x04\x07\x8f\ +\xa0\xad\xa8\xc6\x6a\x77\x5a\x7c\x17\x18\x0c\x36\xbe\x01\xfe\xdb\ +\xb7\x6f\xbf\x7b\xe0\x80\x39\x39\x4b\x90\x7f\xe9\x8d\xea\x83\x84\ +\x97\xbe\xbe\xed\x84\xc4\x86\xd6\xad\xf3\x52\x38\x81\x6a\xf1\x8e\ +\x8d\x1d\x7b\xea\xf8\x84\x09\xeb\x28\x77\x93\x53\xbb\xd2\x0e\x06\ +\xc3\xf5\xe7\xd1\xa3\x5f\xe0\x5a\x09\x14\xc5\x6a\xd5\xf2\x0a\xbd\ +\x72\xa5\xf9\xde\x2e\x5d\x16\x1a\x23\x2e\x07\xc3\x88\x0c\xbb\x78\ +\x71\x1d\x1e\xa9\xaa\xf6\xee\x7d\xa5\xd7\xb6\x6d\x6e\x74\x04\x3b\ +\xf4\xeb\xaf\x3f\x51\xad\x1d\xc6\x0d\xc1\xb7\x5f\x85\xd8\x6b\x21\ +\xc4\x1d\xf1\xf7\xc1\x60\x30\x5e\x05\x04\x18\xa2\xc0\xf5\x8e\x86\ +\x14\xdf\x67\xba\x42\xaa\x2f\x22\x2e\x2c\x6c\x29\x35\xa7\x24\x59\ +\x3f\x12\x37\x92\x1d\x83\xe2\xe5\x36\xf3\x4b\xda\x1c\x2b\x0c\x06\ +\x0b\x1a\x19\x92\xdc\x5e\x72\x72\x72\x3f\x7f\x47\xc7\xed\x90\xe2\ +\x73\x5e\x9e\x2f\xdf\x2b\x45\xb8\x08\xc6\xd6\x46\x00\xb2\x7f\x79\ +\xca\x86\x1a\x35\x1e\xc5\x85\x87\x5b\x3c\x3c\x7e\x7c\x93\xad\x91\ +\xd1\x0b\x69\xa0\x83\xbf\xf1\xdf\x2e\xfd\xbf\x5e\x4a\x06\x83\x71\ +\x32\x07\xb6\x91\x16\xfa\xfa\xb5\x72\x15\x2c\x78\xb4\x58\x8d\x1a\ +\x4f\xbe\x24\x24\x14\x2d\x58\xbe\x7c\x48\x1b\x33\xb3\x2b\x78\xee\ +\x43\x2d\xb8\x54\x42\xd4\x37\x28\x54\x28\xea\xc3\xa3\x47\x95\xad\ +\x4b\x97\x1e\x71\x6f\xcf\x9e\xa0\xd1\xde\xde\xb6\x39\xf3\xe6\x8d\ +\xd5\xcf\x9f\x7f\x89\xd0\x02\x06\x26\xa4\x08\x11\xa4\x61\x74\x0c\ +\x06\xc3\x6d\xfa\xf4\x3e\x56\x65\xca\x3c\xd3\xd8\x4e\x7e\x5d\x91\ +\x2f\xdf\x53\xa9\x1c\x56\x4b\x00\xd4\x68\x52\xc6\xed\xee\xd1\xca\ +\x66\x5d\xb6\x6c\x80\x8c\xd9\x79\x40\xd8\xe8\x0d\xb6\x9e\x31\x78\ +\x97\xf4\x54\x54\x18\x3f\x08\x5a\x91\x34\x3b\x9e\x3d\x8f\x7e\xff\ +\xbe\xb2\x00\x00\x06\x83\x41\x02\x44\xe8\x71\x37\xcb\x7b\xcd\x9a\ +\x7d\xdb\x9a\x34\xb9\x88\x02\xd7\xc3\xb4\x65\xc4\xf8\x60\xa1\x01\ +\xd2\xc0\xa4\xd0\xc1\x96\x06\x0d\xa8\xf8\x75\x1a\x12\xa0\xf7\xa3\ +\xe5\xf2\x1b\xb9\xcd\x0c\xc4\x98\x91\x00\xcc\x0d\x0c\x8e\x29\xc6\ +\xbb\xb7\x6b\x57\x9f\xc4\xd8\xd8\xfa\xe2\x7f\xc0\x60\xb0\xd1\xe5\ +\x90\x2a\x62\x33\xc0\x85\x60\x1b\x50\x25\x34\x70\xd7\xc9\xe9\xd7\ +\xd5\xc5\x8a\x85\xd1\x0a\x08\xa7\x89\x07\x8c\xc9\x22\x2c\x30\xd0\ +\xdc\x75\xe8\x50\x77\xef\xd5\xab\xf7\x29\xca\x61\x97\x2d\x2d\x27\ +\xd0\x3b\xa8\x44\xf8\x2c\x0d\xef\xba\x89\x10\x4d\x45\xda\xc0\x60\ +\x70\x5f\xf3\xf0\xe7\xcf\xe7\xef\xed\xde\xdd\xc7\x5c\x5f\x3f\x5c\ +\x7a\x2b\x63\xd1\x76\x79\x11\xe9\xab\xc8\xd7\x54\x18\xbb\x40\xb1\ +\xbb\xa7\xee\xee\xeb\x51\x91\x70\x0e\xc2\x47\xf1\xb2\x06\xaf\x9d\ +\x48\x13\x18\x0c\x36\xba\x3c\xe0\xb0\xe4\x4f\x9f\xcc\xae\xd8\xda\ +\xee\x71\x6c\xd3\xc6\xed\xa2\xb9\x79\x2b\x32\x46\xa9\x28\xdd\x9f\ +\x0c\xf1\x40\xdf\xbe\x17\x30\x36\x04\xec\x0d\x29\x3f\x4b\xd7\xe1\ +\xc3\x4f\x3d\x3e\x71\xa2\xa5\x4a\x7c\x0f\x18\x0c\x36\xbc\xc2\xb8\ +\xd4\x05\x6b\x83\x4f\xa0\xaf\x72\x5a\x7a\x26\xaf\xe6\x30\x30\xa8\ +\x31\x23\x38\x78\x6d\xde\xe2\xc5\x6d\x31\x1e\x45\xdd\x7f\xf0\xa8\ +\x23\x18\x2c\xd2\x0f\x0c\x06\x03\x0e\x93\xfb\xcb\xf3\xe4\xf9\x78\ +\x6d\xfd\xfa\x91\x19\x5c\x2d\xc0\x60\x30\xda\x98\x9a\x5a\x93\x9a\ +\xf4\xe9\x69\xd3\x36\x99\x0a\x71\x18\x1c\x85\xa0\x7a\x99\x0c\x30\ +\x38\x06\x83\xd1\x62\xc1\x82\xe3\x7d\xf7\xec\xd9\x5c\xaa\x7e\xfd\ +\x47\x2a\x3d\x3d\xd2\xc5\x74\x44\x50\xfd\x84\xc8\x18\x30\x18\x0c\ +\x52\xfe\x02\x67\x24\xc6\xc5\x2d\x23\xc9\xbe\xb0\xc7\x8f\xe7\x2a\ +\x15\xe8\x19\xe7\x34\x61\x30\xd8\xf0\x4a\xe3\x52\x4d\xda\x99\x0f\ +\x1c\x28\x09\xe2\x5f\x09\x06\x83\xc1\x60\x30\xfe\x0f\x1d\x9b\x1f\ +\x99\x66\xa1\x3a\xad\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\ +\x82\ +\x00\x00\x06\x53\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x03\x00\x00\x00\x9d\xb7\x81\xec\ +\x00\x00\x02\xeb\x50\x4c\x54\x45\x00\x00\x00\x00\x00\x00\xff\xff\ +\xff\xff\xff\xff\x7f\x00\x00\xff\xff\xff\x66\x00\x00\xff\xff\xff\ +\x7f\x00\x00\x71\x00\x00\x7f\x00\x00\xff\xff\xff\x73\x00\x00\xff\ +\xff\xff\x7f\x00\x00\xff\xff\xff\x75\x00\x00\x7f\x12\x12\xff\xff\ +\xff\x77\x00\x00\x78\x00\x00\xff\xff\xff\xff\xff\xff\x79\x00\x00\ +\xff\xff\xff\x7f\x00\x00\x7a\x00\x00\xff\xff\xff\x7f\x00\x00\xff\ +\xff\xff\x7b\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\ +\xff\x7c\x00\x00\x7c\x00\x00\xa3\x47\x47\xff\xff\xff\xff\xff\xff\ +\x7f\x00\x00\x7c\x00\x00\x7f\x00\x00\xff\xff\xff\xff\xff\xff\x7f\ +\x00\x00\xff\xff\xff\x7d\x00\x00\xff\xff\xff\x7f\x00\x00\xea\xd5\ +\xd5\xff\xff\xff\xff\xff\xff\x99\x38\x38\x7d\x00\x00\xff\xff\xff\ +\xff\xff\xff\xff\xff\xff\x7d\x00\x00\xff\xff\xff\xff\xff\xff\x7f\ +\x00\x00\x7f\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\ +\x00\x7e\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\ +\x7e\x00\x00\x7e\x00\x00\xff\xff\xff\x7f\x00\x00\xb7\x70\x70\x7f\ +\x00\x00\x7f\x02\x02\x7e\x00\x00\xff\xff\xff\x7e\x00\x00\xff\xff\ +\xff\xc5\x8c\x8c\x7f\x00\x00\xff\xff\xff\x7f\x00\x00\xff\xff\xff\ +\x7e\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\xff\ +\xff\xff\xba\x75\x75\x7e\x00\x00\xa8\x51\x51\x7e\x00\x00\xed\xdc\ +\xdc\xff\xff\xff\x7f\x00\x00\x7f\x00\x00\xff\xff\xff\x7f\x00\x00\ +\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd8\xb2\xb2\xff\ +\xff\xff\x7f\x00\x00\xff\xff\xff\x7e\x00\x00\x7f\x00\x00\x7f\x00\ +\x00\x7e\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb7\x71\x71\ +\x7f\x00\x00\xff\xff\xff\x93\x27\x27\x7f\x00\x00\x7e\x00\x00\xf9\ +\xf4\xf4\xc3\x87\x87\xff\xff\xff\xff\xff\xff\x91\x24\x24\xff\xff\ +\xff\x8f\x1f\x1f\xff\xff\xff\xec\xd9\xd9\xff\xff\xff\x8c\x1a\x1a\ +\x7f\x00\x00\x7f\x00\x00\x7e\x00\x00\xff\xff\xff\xff\xff\xff\x7e\ +\x00\x00\x7f\x00\x00\xad\x5c\x5c\xff\xff\xff\x8d\x1b\x1b\x84\x0a\ +\x0a\x81\x03\x03\x7f\x00\x00\xff\xff\xff\xff\xff\xff\x80\x02\x02\ +\xff\xff\xff\x80\x02\x02\xff\xff\xff\xff\xff\xff\xb1\x63\x63\x7f\ +\x00\x00\x7f\x01\x01\xff\xff\xff\x7e\x00\x00\x83\x08\x08\x7e\x00\ +\x00\xff\xff\xff\xb6\x6d\x6d\x7e\x00\x00\x87\x10\x10\xd6\xae\xae\ +\x7f\x00\x00\x7f\x00\x00\xff\xff\xff\xff\xff\xff\xde\xbd\xbd\xf9\ +\xf4\xf4\x7e\x00\x00\x7f\x00\x00\x90\x22\x22\xdf\xc1\xc1\xff\xff\ +\xff\xac\x5a\x5a\xc4\x8b\x8b\xff\xff\xff\x7f\x00\x00\xff\xff\xff\ +\x90\x22\x22\x80\x01\x01\x98\x32\x32\xa3\x48\x48\xdb\xb7\xb7\xf4\ +\xea\xea\xf7\xf0\xf0\xf8\xf2\xf2\xfe\xfe\xfe\x80\x02\x02\xa5\x4c\ +\x4c\x8c\x1a\x1a\x81\x04\x04\x92\x26\x26\x93\x27\x27\x82\x05\x05\ +\x99\x33\x33\x9a\x35\x35\x9d\x3b\x3b\x9e\x3e\x3e\xa1\x44\x44\x82\ +\x06\x06\x8c\x19\x19\xa7\x4f\x4f\xa8\x52\x52\xab\x57\x57\xab\x58\ +\x58\xac\x59\x59\xb0\x61\x61\xb0\x62\x62\xb2\x66\x66\xb4\x6a\x6a\ +\xb9\x74\x74\xba\x75\x75\xbd\x7b\x7b\xbe\x7e\x7e\xc0\x81\x81\xc7\ +\x8f\x8f\xce\x9e\x9e\xcf\x9f\x9f\xd0\xa2\xa2\xd4\xaa\xaa\xd5\xab\ +\xab\xd7\xb0\xb0\xd8\xb1\xb1\xd9\xb4\xb4\x84\x09\x09\xde\xbe\xbe\ +\xe1\xc4\xc4\xe7\xd0\xd0\xe9\xd4\xd4\xea\xd5\xd5\xed\xdb\xdb\xee\ +\xde\xde\xef\xe0\xe0\xf1\xe4\xe4\x85\x0b\x0b\xf5\xec\xec\x86\x0e\ +\x0e\x8a\x15\x15\xfb\xf7\xf7\xfd\xfb\xfb\xfd\xfc\xfc\x8a\x16\x16\ +\x8b\x17\x17\xd2\x67\xa5\xb8\x00\x00\x00\xb6\x74\x52\x4e\x53\x00\ +\x01\x01\x03\x04\x04\x05\x08\x08\x09\x0a\x0a\x0b\x0b\x0c\x0d\x0d\ +\x0e\x0f\x0f\x13\x13\x14\x15\x15\x16\x1b\x1b\x1c\x1c\x1d\x1e\x1f\ +\x21\x24\x25\x27\x27\x2a\x2b\x2c\x2d\x2e\x2f\x32\x36\x36\x39\x3b\ +\x3c\x3d\x40\x41\x44\x45\x48\x4b\x4c\x4d\x4e\x4f\x50\x54\x54\x55\ +\x5a\x5c\x5d\x5d\x60\x61\x63\x65\x67\x67\x68\x6b\x6c\x6c\x6d\x70\ +\x71\x73\x78\x7c\x7e\x80\x81\x83\x84\x8a\x8b\x8c\x8c\x8d\x91\x93\ +\x95\x95\x95\x96\x98\x99\x9c\x9d\x9e\xa4\xa6\xa7\xa7\xa8\xa8\xa9\ +\xaa\xac\xad\xad\xb0\xb3\xb3\xb4\xb7\xbb\xbc\xbd\xbd\xc0\xc1\xc4\ +\xc6\xca\xcb\xcc\xcd\xcd\xd0\xd2\xd4\xd7\xd8\xd9\xdb\xdc\xdc\xdd\ +\xde\xe0\xe1\xe4\xe5\xe6\xe7\xe8\xe9\xe9\xea\xef\xf0\xf0\xf1\xf3\ +\xf3\xf5\xf6\xf6\xf7\xf7\xf7\xf8\xfa\xfa\xfb\xfb\xfb\xfb\xfc\xfc\ +\xfd\xfd\xfe\xfe\xfe\xa0\xb1\xff\x8a\x00\x00\x02\x61\x49\x44\x41\ +\x54\x78\x5e\xdd\xd7\x55\x70\x13\x51\x14\xc7\xe1\xd3\x52\x28\xda\ +\x42\xf1\xe2\x5e\xdc\x5b\x28\x10\xdc\xdd\xdd\xdd\x0a\x45\x8a\xb4\ +\xb8\x7b\x70\x29\x5e\x24\x50\xa0\xe8\xd9\xa4\x2a\xb8\xbb\xbb\xbb\ +\xeb\x23\x93\x3d\x77\xee\xcb\xe6\x66\x98\x93\x17\xa6\xbf\xd7\xff\ +\xe6\x9b\x7d\xc8\x9c\x99\x85\x14\x52\xfa\x52\x39\x5d\xfa\xf9\x80\ +\x28\xc4\x95\x41\x26\x36\x30\x10\xa9\x19\xd9\x78\x80\xc7\x4e\x14\ +\xed\xaa\xca\x02\x72\xa3\xec\x60\x25\x96\xb0\x1e\x65\x1b\x33\x70\ +\x80\xfa\x36\x09\xd8\x46\x00\xa7\x5e\x17\xbe\xa0\xe8\x68\x19\x96\ +\x50\x7d\xca\xee\x68\x02\xae\xb6\x03\x5e\x9e\x7d\x08\xb0\x8e\x02\ +\x66\x45\x09\x38\x61\xe6\x02\x79\x05\x10\xf9\x3f\x03\x6e\x2e\x01\ +\x25\x47\x2f\x39\xb0\x2a\x34\x90\x0d\x34\x8f\xa2\x7d\x32\x13\xf0\ +\xb3\xa0\x68\x2a\x0f\xe8\x84\x22\xbc\x5c\x97\x05\x8c\x95\x80\x75\ +\x3c\x0b\xe8\x2d\x81\x73\x66\x16\x60\x92\xc0\xdd\xe9\x0a\xc0\xd7\ +\x29\xe0\x36\x0b\x29\x6b\x7c\x37\x05\x90\x8e\x80\xa4\xfd\x8e\xe7\ +\x2c\xcb\x2e\xda\xe7\x2b\x1f\xcd\x3e\xa0\x68\x33\x09\x87\x14\x37\ +\xc9\xbb\xdf\xbe\x47\xb1\x9f\xb4\x71\x85\x40\xd5\x42\x02\x62\x5a\ +\xa8\xfe\xb1\x39\x2a\x37\x0a\x28\x08\xea\xc2\x50\xb4\xa2\x95\x17\ +\x70\xaa\x85\xb2\x6d\xc5\x58\xc2\x3c\x94\xed\xc8\xc7\x01\xca\xa2\ +\x2c\xb9\x27\x07\xe8\x81\xb2\x9b\x21\x0c\xc0\x6f\x8f\x04\x6c\xaf\ +\x87\x30\x80\x60\x14\xe1\x9f\x27\xc7\xaa\x30\x80\xf9\x04\x1c\xbf\ +\xf7\x2e\x71\x5d\x03\x60\xb4\x89\x80\x17\xab\xbb\x96\x70\x07\x46\ +\x59\x91\x8a\xab\xe1\xe2\x55\xd6\x72\x39\x9c\xfd\xbb\x88\x9a\x32\ +\x8f\x6a\x28\x8a\x26\x34\x63\x01\x5e\x16\xa4\x4e\xfd\x6c\xcc\x02\ +\x02\x51\xf4\x74\x51\x6a\x16\xd0\x17\xa9\xe8\xc4\x3a\xc0\x02\x96\ +\x22\x15\x3b\xd7\x9d\x05\x14\x41\xea\xbc\x16\x00\x2c\xa0\x35\x52\ +\x6f\xa6\x01\x0f\x98\x48\x63\xb2\x56\x81\x07\xa4\xdd\x4e\x17\xfb\ +\x6d\x08\xf0\x00\x7f\xda\xae\x1f\x2e\x0d\xea\xca\x13\xf0\x2a\x52\ +\x79\x6a\x4e\x7f\x18\x0e\x4e\xea\x40\xc0\xd9\x08\x30\xb6\x40\x9f\ +\x6e\xed\x2d\xac\x04\x7c\xeb\x05\x6f\x25\xe0\xf6\x4c\xe3\x9a\x9f\ +\xde\xed\xf3\x20\x50\x94\x39\x08\x65\x8f\xfb\x1b\xf7\x26\xfa\x72\ +\x27\x22\x8f\x0a\x18\x8c\xb2\xef\x71\x0d\x8d\xfb\x18\xfb\xf2\xed\ +\x6b\x77\x50\x94\xc6\x82\xb2\x67\xe1\xc6\x73\xe0\xa1\xdf\xaa\x07\ +\x5b\xb2\xff\xc3\xf7\xc2\x35\xad\xb6\x71\xaf\xa8\xbf\x5a\x42\x47\ +\x50\xb6\x16\x45\x37\x12\x46\x82\xb1\xb6\xf6\xe9\x61\xb8\xb7\x1a\ +\x30\x25\xe9\xc0\xef\xe7\xda\x50\x47\x4f\xb5\x44\xc4\x93\x3f\xda\ +\x80\x93\xda\x1f\x39\x13\x73\xff\x65\xfc\x86\x9a\x0e\xd7\x8c\xcb\ +\xf1\xd2\xfb\xc5\x9e\xe0\xac\x72\xc3\x66\x4f\xea\x5c\xcd\x47\xb1\ +\x66\x9a\xf3\x6b\x4d\x71\x70\xa9\x02\xa9\x20\x25\xf7\x17\x09\xba\ +\x39\x39\xea\xb1\x61\x75\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ +\x60\x82\ +" + +qt_resource_name = b"\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x09\ +\x0e\x25\xb1\xe7\ +\x00\x6c\ +\x00\x6f\x00\x67\x00\x6f\x00\x32\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x0e\x26\xb1\xe7\ +\x00\x6c\ +\x00\x6f\x00\x67\x00\x6f\x00\x33\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0e\ +\x09\xbc\x6f\x27\ +\x00\x77\ +\x00\x61\x00\x74\x00\x65\x00\x72\x00\x6d\x00\x61\x00\x72\x00\x6b\x00\x32\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0e\ +\x09\xbd\x6f\x27\ +\x00\x77\ +\x00\x61\x00\x74\x00\x65\x00\x72\x00\x6d\x00\x61\x00\x72\x00\x6b\x00\x31\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0a\ +\x04\xc8\x47\xe7\ +\x00\x62\ +\x00\x61\x00\x6e\x00\x6e\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0e\ +\x07\x04\x9f\x87\ +\x00\x62\ +\x00\x61\x00\x63\x00\x6b\x00\x67\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x0e\x24\xb1\xe7\ +\x00\x6c\ +\x00\x6f\x00\x67\x00\x6f\x00\x31\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x02\ +\x00\x00\x00\x86\x00\x00\x00\x00\x00\x01\x00\x00\x7f\xaa\ +\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x19\ +\x00\x00\x00\x42\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xae\ +\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x46\xf2\ +\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x01\x00\x00\xe7\x4f\ +\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x06\x57\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/dialogs/classwizard/images/background.png b/examples/widgets/dialogs/classwizard/images/background.png new file mode 100644 index 0000000000000000000000000000000000000000..44c7badb8568ff756804d2a5a651f8fff9961a1f GIT binary patch literal 22578 zcmaHyQ*-YDiQ$_1Ox=CoUEie__z)M0qKhX2mV&bwy*{Pq4OdqDW>UZe7*rv z(6YfBy4h-5I!i`QHpSqtqEuBy_=5CPn;b|bi-E~xr-msW2($4+y0ZqLTF^`zPUifR z+^{jO5+RX$qR|=dn^_0}kNWy>P~Bg<_}hECAdF5~J)2)5*9R}izd9oucwaHWr~Th2 z=svPV!V7}U4>K!i5w6T+_M$X5SIPt(kEljp-P?LL=TEZ(vAl|+AZtU?AtctZ3u|MN zT#o`jkqRaCX-CJ~4+Dcg^6h6`bNP^XYdBZ&R$bWG{)#cNf4Cd^jMH)810>WbWQp-l z{A3up`F!6!7srEIHW;2Q;-ogoYn)rKo&@%Z=l((Z#bAY_-kIG<37#YVO{w%4g8Z!Z&_=QKorn9A~G@lS~T1QE?NrbY7+X zYg883uTTTGy!;a>!Kk{bYin!X)f}+ZO~Ro-%W|y;5!;ojh9xuuMTCcc!o1daGLUJ= z{Ik2WlUmR4-TP{LJGW5WG5M)Sn^96|OLzHH(A8Z?0KS|^U* zR|sHaqdMgOTlxR*@mYp6AZi|`Q0G_QC?1K~t3$1KUx+_tRk)NI^|uXV^~jX3tgU3& zpVY}e@YB3M-(?v|{?Ki7zHH66yHTlOJ;2#mb!fI2MA*_nv8(gT8YNKlq;^{A?*`59 zuOtr+icByXuJ!oS%0AXbB`v7K_*!4l=a!GIK6d8^tq=pEvdyD6Huz4{%$Js>IL)%2Xi$tYaAxm^Piv1^!doFHE+1iZ)fzjcE^cboKAyqD-7V* z*JeMk4c3HONgJwvESwe7FDxy6epay=!>`*@NUDGU$Gs6ZU$sLGW|tdZ5~sxso0^QQ zw94l*xr*e2^;4M)2;q_&yS*RaS)1v;zrNa!JU6#k@5H_xdM>J(XWFpTe?f82@WrIi zargVM6LCA)%_z~WtMx5X=po)eZEst8yvRJ1l-&QqA4bjb-7fp)w&)`2Xo~nte!&D= z(l^JEgr97trk5sPzg9II4BwQ!6)Tb8`KPoC_tR}|TD*BdBP8x&oT zJnnX^>LGYWrE`7D>25updxvKLg#+s1$bRXS)5GjBuLWU4xp*@g@@@~NFvYa8Fnkj2 zPh`Oj?p0!Sba~yGG+b{P;}O9T^o8$A4qBSjY#OZ}CBx}N4jTS?yI>u3jti_})OD&D z`ZpLl$D|by`6P4NOP~F-n-!WN;}e^j)5h^Ox)lw!P(#Z!#fcQ+rU_So|<>LuVmD@%x3#TMb9? z`~8v}cx#RTV`9Cshu-3C4AxN2)))(bQ>`F~%ce{o+oRS*iF(3(~-vJ5XOp3~_}I>&+}P7ufx$jr(eG2^%KIL2bN`?rsYcCn~0 z@F(syM=SoiB%46ih1tf@lt)n%mJ>#r%H9V70Evi2hndNw+ukxyoM(S=4)H#Z>7+${ zThcoal!mIp{{adzi4VU$JY8*C16WW47*wtL$c>AOAL8itYASz>-5vVf?cD4wu-5AV z9yFUr8cw=U7b-+jLNe;>W#j28B5=6!ezGsm2OWAIB3`DkNJ4@D?{oI}MaqG6!>g@C zFS`TsNc6xWe~h6i&)a7GWaf_$?e8$7C8pz|g;1V)LRfp8WAWcos!K{#wt^aKaa&bZ zH_GM?B5`oKxMoM46XKcXmYzV5{KG%@Wub4-LEH9)pa>|~Npi(n4Trw=pcQ{I#|os% zKS^<{SLr23{LY2GXD)xYzs#T5ZFKltozBZ$2!hg?ktUP-8MwJ)ZabGuy8Uq(j4^mw z`S{wl)&c^!?t8xBMY-zIg#bA~5hB-CtPlqORz}aeop#3WsHsD*C(U@ZsuMs=6Db#W z0|#Rs=5`r}UQ>BqcQd*Re@}?-=u?+vgFV zIC`Piw)bRr{v^Z zXqTBkG4W88f1bhPXl2Q;BU`ek5sNquJ)Bi#3lLu`3*GRLNuZS6`1q?`_5*6~O3CU~ zp)5SN$)7DHTC5 zyJNMbM_M_Vs#fAFxwkFex>^*CAt%q4jA>Gs)s%L;>FDTvB4D)4W-ew&kLISO7f`!{ z4Ie5Z{L}2)sK3L-#fnQ(oap#vVpY6a*u9-L^jV0|FF_J=7&kIMrSLB-I~M7g?o%v4 zP>2rpJ9HK$W$i{(er1XdBxDG|mF3V2OH6b6{>%F(1RoG2ovOrfH`wj4VcwVk>UC$r z$d6;3&XzKFs)yO$K+KJ3&f9;0x!O*LCZgApTI~g}=6HEFN=}||pjwTk% zAR+tb9|*?-+*3u@S?Y_v|>%cO!0@>hWCR$ z1N}@P8dJs081UiA{p_$PuPTAj_G%UZ4j5gtKjd*W?z>dAmY$ZTOA5CDsmM27G9{M> zNvUv^9MrrN6Gh;5yAq5X-R}_y0u(SnJi_?DN+9@EdaCix&CoCYab^dBc>AR0JkQ^r zG@-ao{QzWDA$xVJ#GnV-Y7M6emRUGBVBp<`Iu&z?9J;wVE}lW=jre|U66=X>IPBhm zK%oCz=E&$63S5;#A(6J@{;+-G<$B$Tg=JHPT_SZ36s>NzuPh-)1A|2@Rq(SCl_YLg z7T?#7Dw8XA5yAELmGc!Dt(AJM@w^fbUalhRTc;o|SRhC>N<1n~IX?5uc9Do^`&@9e z-LMUQ-flmq;SNVVHs$JK0Ou~!awOsEc%_^|3hi5kW$oB>-qGUh`Nm z`s!-VstrqsAk4?)8Y|jFw;2Uji52f$^aSOgR%>W5itl8(y=e_vM<-%n0#X4X`~zGd z@{>`OlVnt;vI)gUW(D+{+5^~{67aMK^`KZeSgp%oCe;El?v9^tsCNGWLEEa3ybxKa zF%Wk)LQ@y~c4>t8#CUar{-4>x+S=b^H`ck$+&X?A`R)6>ENPeDX9?yMb_IDP0(`Yy zf`@5lVZgV&e#Xt`Eqi*nlL?g$mLaD^G38S(=K*e-cYl=yCWo)V)F_!gb{~Jns1P3o zj?l>7=`oZ>MSG9Y<9?phpRv!6S!yxX;#HO}3hE5+AAS~6{N{$vQkB7t3GF|%a921W zdC?PnkXx_WwitHMJ{IH9M_@6B70H>Mxp^oX%gZIpwn{F;;O>A3JP;H|GKw|CZO;r3 z17lHWh6e;8prFjtq{HJIdqP4R#@fbS+5hR(4f}KR_R(FZVa|#dr+ejXcDtXbT_nGu zlM$PSF!Lw?yzMBu@zx+SDnx<|;Q0vqm*S_;l_=1*XMA)ve` zQrdu5fH@S4@f0Ejdn>TW+xu<)Z*zw`U)*)PtNyTB|zXbuD0ge9f zTM+hRMi+9U-zS9QGYr<6uGM1rcS*>@pX+L!Y8*o}py};x^?65UR)5N4=~ic^@N>eE zQIZN=$lOdi*|y0he$qP!*I}3BTww6OV!Z7@Yh|FryqPMLF+s0UgyBVmGRzeNt zbJKHjGun|vO(8#}_CE!J0$paO6rnT(QyG62|GE%|Ix$P7C4W7LCWQWUF_6c@Zu4>s z@(7l<46xj?_m3qx(8R0RY;o*=x~DQ{Makq^tNtV6p9YbW!)N|`3|kev!a{t)-Ihhl z+107`%dFz>xTXemyKV=fwoh{^9<}X$;)Dtr;}7mf>y2ELMFaBqV%> zClP>e5YIAnR(riHW`ePbwnF_tYuCYRs4uN5vX2@YfKH?vNyT_@kIvcO6Wq2PKsM+_$ z$|NB%RT>7i>Tkl9WQSl_BMP0Al~=d#m?U_|E~tP~jzvap=zXxdF@b6-89+(}m|NW6 zu7;p?42R7}C=EpR_;~KiTHzT$*9Hh4H}{w0gd8bUJFIC#t>T>R_4OT%RWsYb0xeh1 z0^9!CIv9|i7QWn{uRLI6u9P?+%oL7fyCpNgU!KhrWHc)hG^e*Dt4H@0NTX5$vHa0d z;GjXn=0}GUE;n0s=9o=Q1KPJYM^k@rL2)=Gi`Cq8%nnF$mMn8iv0b%4wA|vqv*H=L zv*CtVDYXBtZ&I^oMKArL9{_!TuD>%p5qV_vPag95U&TE;UT5m$+x79x>=mi7Ve}hF ze{goyZen|Tby=uBVlbQ|przGzIKg>w6CmuV2@czIU?^RN8umyeogxjo|#1hAJdD*0_Dc2iXbEP!XmO&{qiOCDCIzYioROf=QDVk+-~TAL-XC~$ic zs;Y^7-=wn=ClhLH88olul@vn+la?cd1ojw!|rW=P&@laA!&R)35dK2V*<}YG@ zhvf+>Ro!ji>7`(9b6ZBt4X!p##RdL-o-7eE{IADJhVt+6Kb}4`BIfseU0qvR2%9>9 z->RlnB|Fz}<;*@A1b)ra^9M#@fbOsCb|=CASb!=4R_%`-N<;o+JqQXO5Q}QT__Azf zT(Z2G>GQPuDYaoNbjs8v8^$iK0|E^D4iZox*A=^-v}r0S!+E&gThriWTH=gkD85qrCWPKwtin*(0=-Wlgq~qIV<#qcvyaYHtCJ=cs#F5FrLCn@Dr`tRLm}C zwPM{y%#yftXN8Ua3gyx4=%^y{&1EYS%h9dBZWcO@8uj}cFH$!ZgH{=k#deMhr_`H-RBpOI%*LS@nwfYJrcfnu0zhy_in~><(x%Bi zPd5{p2izecc@Z;J71|S0$E?1UmBriRI1>FRl0Ie}ZE5AQ^M_S2DaLsj!M&+8;x_mtTaDXehl+oIG59@NoT`+B2FoW^u5|1OZ z2Ql|Kqh`M^hCJDx0^f4aKiE+Va#W>j4to|A7$x_pqwb}QrNcQklhlH<7}3X~IM z#E^D0Vts9D!IHR!U}4-W+EA0{XOt)1#$h@4xAZrf3V)ER0;xGGEi`nX5Ps5wzV>AAD-HMGf)lK# z9SQvTg|Z%1W<~?|>+9&Negu)cU2ce<;$>sC1Q%Pmck*z`+_z^D~ z686Kv-{PGn*tp|6@F^0BIN+R42&b~K%(SnZwVhHk5ne>t&l@ZI>_10HX-%<=^02Tj zzbVm5&^rgJKrl8ANI39v?X}0st?SEz7q!;mafJAIQy1lVV@6|@PX2JSPCga#UamrQ`l)x_ zyRh&}Vj?4UQ^>PcwQt)wfAu}8K4EWcK;ZS^ES=Ibvg*n99A**$ZjaOfq%S2Yi6wfy zEWCfJWl)s^0cB7-VWCN`Q$4Oxh~~t#ywq?cM-UpyO7ZyNqY;HYy)&hE2bTXGJAPWB z7-3ErMxl0Fj7UkysOP84KSl5fVd6Fw`jDkwrfb2%l*4ksyPZ!DkMWXU)nFJ~IfQDq ztlq?hNI9&4^VjC`Gsdry=-EN}!44F+nd4qq7G@)T&790O)-?aQ*wP_&biF_A6krkG!|T#E-9UI7Y~L4&#*itP55=B&mq zFG?*n22YS#=yevV@~iVgR!2;(n|&YF1QKY63Y8?G+exiq9wNKM5m!yqGuT3zgXK8k zXIAN{UXeu11Xl;p72)GhK(QkZCny`q1fT4vNLR|b?8amRHh%(OJk{0N<_2+0$O?u_ z6OE93f8Qk{@lc}6(f75b3XfD_=z*)sv19}J*)s}cux6WsMg`Xx8Kwe?xu?Zk{1GW=~?IF#kDVR+zTb)sE^l45y!{wOoGXqq^Objc*zm|@}Y+YpQysWaoxMbgoGaW z#>|ix&~SICB zw=z^Z7n@E4l?DRS^gxhC$>+z=KuGWe6_4+9FtWY>_9!xR<*b-%cXIMcl4zCsEqm&A zg0X=WSPvciPQ%+nK0Jh<_Fj&ibRHhpt=tHc7)>eZZQJ$xPn#@9lq=ZAjm*eXEAU_u zuwv#jXi>hCl{pVuSj#4MNb5A}2vbB?VLyxKpo#dT-7GDbF{1?1m)>0fN6M zL&?mIRd%|fBuy*$a-I;L+@)h-NiI@bZh|g+MD@m^MzN z1ricE{lA`TVbF>o+IEc;b=)}N%>8SOMfNiP1*+S6c)#952L=Xi-9zkVH#on!-5p=` z{9{fmRzM>DU56p9{>DDgEFOF`+=*|S!L&v}#Rq{nZKaxer2Mr1(SLM|atIu~H`a^a zzFMxzd~F!n^!i7Hf|j+1{xc&rJ^iZ|zN~qBIp@_hoCV41`Q`cxeOKu0pSkwxRyXI< zd2HUAkVHt(+K*@gP&t}X=4QKtW6#}1mk$FbLHGbZ7Yv=5OOh&3E1iAr#7`gdBrEcd zK%m+-#j1DYJp}MAupqfMd@PQfB&=tkl3C4cnrCyu#;7=obl^Ittz&JsJ2%F^x&6LP z6>dMI{P#%fRIukhRAE1pVLZ#0urtz&0Kdb~^OQK$+So4(r#K(hqB|z-5qnn_9e160 zV}KI^LDi)th5ee!Qirm3?l7@_k4yn`ccNFyDaHwBmcDKz~jaoLo zA>U8$jArsTLt6|BY4A{vqbu2`k{QHTwE55p_T|V!<_S0{+@CTw1COpKs|`Tk`CE6B2h;7F zhyDgLmspK2%dA--#nQ4#;bF@0P;RX@jfoMgTG!Tp5tX6vO#07aQ7!t3eq<~XP0euP zoMU+%v4k=CrQxH?N5e*i-HXFi)u7Sx+(|@NZAV|DeEusvWI}t!h3oXObI?VvNG}B? z4LUV&Xg_5|#(^ukQFxEm`;yy!^(SxU_X3_AzF@s;pBC#1BzMdc2=JRJcD;nVxoLZn zX%vE)VoMFz*BZohyB{8~|KhBVFJ5EP5*W(*Mfz3xm^UUG|8DN}$HIG(*80nmiO{B? zpT1ynR5D>9_Uq2bS99M_p=UcWYVr5_GKUR1yx91)D<+EUUO*oMx-w-R>2Z-N8*MoL z1pHGxW;=`ScEr&JhynoX$!Vf`VdU!Sib?#>u&wte7IW|EyEefldmbb^BSA?mlw>y6 zUg7C0;;@dr5`zHZqxhg72NmA7-p>7(2Fu!BHE8?-_TI&tV8$akQSrv`gy7gZZqDus z4H}cEg?YuMAYc)9&cPCBY5~Ji^lmCMjmX>e{aLr_V&CDwB_Z^yX|Pi}I47^wH*M8g3uU$co3OsP9&l({3ap4j3q2O%i#u{QIn1!YH(_mlVh9o%TsdI zdkTjlRu&!%UFZX)Q!Gd4#hOFfs~x~9PxCn4K>of6gZ!D`vfC+7Xb_jSEh@}@V&TCq zD{?IL%G2|nc3{7lY^y%cOp^A{PbPc{uZF%6qCim6*l2cheWv~Zm0dj&3idSI6$XgP z!g6|bn4QLZQ&^KtoD5YqY{a~Ap|hx6dM)eCx51*X8gT4JFEIP8ljU0;!*2FUi;w zDy~TF<@o8QZEIL-me7uN_AAOD*fybt~gwU^ZB1SGI!sj|=^t&lEt39Zzr>SOE--oXLGkk_<#tVM9DF+5V>U&g36V5c2 zN=+?0VjJSVu|HKM2>ZQ$i)K*#ns7b#!wR`dn?UR*O*HlyQ_!cQ+-i{an8x<+3bEQU7;W1~ zR8**P`N(E~Vo%Sc>2wZ06#Yr|z-}ocN1)lk&xm`0Q3h2nuIOu|;XL{YNrQQ9DJCz1 zA>)JAEYY8!lDphps`afNe+lBzsdE_yoI;{Yd8H}q1K;9)8a8+2fsVTWT#l;YkDc;Z zjvY(({zz@@18}(&JJEFO^`$@+4coDj;tveV@$C8yV}^_cU`ZGV(Lp2fusu?SA8y=o zBH^u#RA)elSqf8m#31NJ^2io!)}=GBuH1L)t($+~V$gPmlPFRyn4MD)Jv-o;-$`D7 zAaJu&v1Hh-R4Wunw2ZW)0VTV*(+s39wbyCR-&O|kSX|d z5IU=1WuGJdS24S?07fymg?(QL@%7Nn6=?f&E4`gz8LN8gwhE>^JJD}d!1QwOC`Ze7ZDUrvib&k6V2Cz;asmSe|D%z_yJ|2j zCqZmAZfaO_n_2fI6_W73Q`m>px+RUDAO-%NEs4`i3-Q5rLs0*1*Pt8Kk~c5QmYfAc zpmqTBjD0g=+v@nOg4tWGC|JEIAOhto>}X0SK@+B1)_rW@mWh|&NEjC=c6nFZ+k1eJ z^hQB>O;p4-kdT<@qZTY~Xt9q{X(vX&ei8f|21y+F)7V>#0oDr<(@wkDr5o^*I6il( zW=6L^K-==|k3Sk23p1797-JHvAXxL#&K>ZNof9*#^Y&jQEqsQAV@yc#2Y{q?P>7gy zepBmi=m3AtlT!MdO(Q(xz1jDVA zjbJg9lS!jBmlroSP+eP~J%N0eqdW9){PsVqsgIA_xZ3k=?#zX4`C1;hBKsHp!3Ja@ z$vZ{W)%hzs=$J1UjxiEfq-N&V86Q2~Bjw=0j88EJ6uSnJsn}N|wT*V4YXGS%?{7Ki zH8-c;0L0RIRYG!lCWrHjMWqwux|G4m@eDVtSGKO|Y7-G+?57k@ny|st?^D7itavA0 zI1#Z?S)rVDE>6Od#3X#q`Ejb+5I@?Yyqjdfh^a{Un4NhMh7qpp`?!+*q!0r_@DjdOSO%$B7IhASjP>d(|o5pxIP7X6Cn1Nj8uf*;wvNw#J*hzQchOPln2@R5z{&n zJdF356Vsz9J37w%J*&%HlP>(bke8hHdBGb?tx=#Dw%SeE2OJL`;t=V9Y88<)R(=2F z5~Ty`2%oiPDOx%*`;RZ)sXahs(cmU)L00G@>|+!cs@F*CCzv#I+c?wQ9*lkR^6=%| zz}qNu1I?*oa^%R@*7eROD#7^1DzML#)kiK()*g_}ZvOb?S2~tGWe^ zjWGxmerE0aCFo6N`30jvuF!YYT5A5en&#(U&eN)B)>*8wRV2t2OJ#YYnyRQ=7z>0p zgw)?~IxJ8fu^XM7k^LG8byTRsf&k|M{X=4fR+i{da~L%p zU@KWel$p&X?CvS4DE~1g-ZVUgdPC~^;@+EnFHf+^A5Q{cweYotur6QuV^}trf)=Wx znJM#>#0^_RgFQ?=#xY$3_&Gb>?-Q|f%~;LlDoR!5f81ot?Nqr=Jrt23bINbludKh( zD4+L3j!(RZONZ1I+FRb6G052!_Y*_wbQbMP2o~ATMWl<&@yns#f0? z2d2md4PGr8yHdTo?gXr=Z(8>v-`wn(wPq7(vwgVqs!6%EwzS>0?iv5dWBnI=XYP+dRkHK3B{O zBf{euKXs)q$AizbDGakuV5lSX9uF@d2Llr=)9>Sv5k-*yo7R<9N# zj!pD~Y%eOVm9lS%1Kq$(l_<~!57yg-l(%BHh4ulY@}PNN->$gg9K8+n+TtG%aPYAt z%coK3nZ&C9I18uIuoK$(R!LMFHzk`@dCv~t78lnBA1wsqEP@|9(UpYJU!DpeJAMq_ zKb`}N?&yLESN~47aH@6-6CP`h;Uo>PhRc}5;vTUdS8uX{5~&~$2LWO>cBpi}VB3Sf zjl{(z`zxLJREx4H_MaISU~p$?%j&}x?GR7LPdy-y@TnT!rgywe`vaW57R_|S`Gk`a zgC*$eu$e!i^uW*%VFV*IFbH&3q2m!u?w9hn$wb`O*RJqy%3}vZFBYvFX>OX4xa++l z;kSZR&hN!FTiP<(*XsbC+RSI=?JMUHy9Mk}b+X&r?=r20<5{1f?>+IV_v+Jufl&LpYI- zexyR?bzGDT%Qk39Me2|83n7&yVTpVJD7vxztciQL&e`uN6G_)B(Jz7Fq$0H_->I9? zk_ZF5!XifkOJ#iEj~30Dri#3=Df{NJ>ZOKva38oEwHR3Pg44zKN9h-s^piy$owW7U z+mqOHU0jYxioGSSk2nSg4=|KpXf?L0->nVOu%glD#g&T@qfPVwkbm8+mAE?;o|ho_ zN(8i$C>4}=V-%~Pd?Fc(BY|Q9ct+;3)kifa>z?py1k$AKE;m=P3`!%23M3B9^;@)b zvY_b4E9MApb-_$DP{gtc(w5S7rfO1MhEB~Gy~8H4lhMs41rP|BuM?&njd1)PoHl-; zRv)PRRoIOIb;2jCsg2G>^Ce`2d5q;RSv(FFE{OyA1M_z^FF5+-Q=t_D~-j}Q^SIvtUH!aMLWP5IS-yi}o*j?m|F=8MaqV|$#N++%Od$1OU3#_%6DEbY9 z>eMsxp-~iwdnC|o0E&u=Y)H3T9zXGaH`q}W4bB{;hR=!!D=VkhM`3xNjE98d!5wP8 zN&~3@FPehcL)I_of^I*cb96BAkwQ4Lnzt!N$0*}R{z+i9?Of zGZ9;z>Jvy*T%v`l^;?#H5I|5)SG0eu{C{D~I_T%i!PYpS?y zzdT>>J=&BESk`PGFh$Mm?2PpIHRo1V^w9DDoib(Z)A6H!ms&wjGx_#mPiBqe^*21C z8)-KRgh%+{m^EBZ+oF4HZrNld@o=hBJ8t4i!f8Fvv)%={4AuV|j2nZZv@H1W+>;q% zQ`ymJoF+nq54+SHOMC;pD=V}r2qx;X`p`HpryEb0tP?%WJrWt4WbJx`_;U#hJT^9e z5fXWweku0b=L%Sf{Q8d9IlF4e-{Q6Rk@calUIZ^>(Os7$QGU-@*=Cw5+;D2_<>p7(rscKnoG zex<#4ZdAn^;+bx|eK(HTNrIyg+LNXe8m);bLx=0i5}dvZj$NgERjm6#ru4?E7{P*wqY zocPv&I_N!mC7RLr_-|9Q+ER2qy~~eHEQ$IhG%VPPo2V`Bx^>EJj8Zy36szSWoO8@}c+?E!tnHdCT0xuc$ zD#zp0Ts--u^O7X1ce03FZg#TdO1uXy-g>&6@rn3YzE2M1@oIp+3N+;sVMx_*G>wG( zp1hiR(FQKuNmqfNHJ7N&8bf$`ba^=5dxMq4Oa_|)GhjH&&Z#&2;6ffubMpNcWI;qI zcfnjVlK~O>$77~I(Ip_Ny5q!;AhpVo1IM@97XNLh@5|{O&c|&L-z73K>b8?|&M02i zh>0o%8!^07ii>o39Df_$e7pc~huIeL(ZK34X>_JutdcH2{e_Gva z#w4;SI_V@8P-8YcCYn$txW+5EKb%fOTAt0T-wiRD1nic=&Wvr420CJUk1UI$s{^G-f=^jp zEuA4{k3QzqZl+sSzm(=zLx{!%TdTTZitxaCU|g@L&@hW?=wgqJlg2?c<)vuPujYt7 z*ld%jS!TG7j8J&*CkMKEw5Zb3QgLv)-@9_So$ujF1fIzew?JU*Cp}G|VlP6x);7yv z-mkS56|v`#=HD?`c>lhdGbnP!$1$QywB$NvsL*ZkkSwu0n{_cvg?vaZ2E}9GF5xEl zrRFYT(PUGZs$y?KdT=SJev3~Azb;TQ9{B7Q%!dcmBWpIJ=^Dn2gNj^Z0m4!;nPP^| zMCA&*Hi`v$dn&mxzma(_O3}k-#g!<#=BLqY`Dw8gC~W_5|%PfAKlM`-1ZmD*|} zR57ci>NwQKHpE&V%$N6uTr98dj2$#eNS1yqmYQ#eGoiX`A<=1^Q1=bL<~Rw}=_?KL zWoFoMVv2^;6J!JRVt|Uu}B0qFJ)yfxxP}(4MM( zv5QN`6K~DjLaAT0FUQRH&hq=K9{I1Wh~v zId!KDZxT>Qy4iTu;`@;gO zHG}4R9Ej#rcUN@k0EK_X4; z@w~Z(LVsZ$2L=#yy;@7ok{k^VW8Xyt?d!uPVwSE%grgv)N5B2p)}apwu49&_sOGCK ztg?x|Vep?Z0>{1Lp5g_Qrq^_yIz!;^=uyI=Y_sidu%x_S=XJse}c z&C1+**+Hw$>|5RHfP7c7edmM)YqwEF6OtmiILBSL+e-b@!iI=e`I2n2TdGj~5LrbR z>!8^*p@6GOivv9N2euvCMgC@2MI$)eVTDoq5yda$$jK8*=&T??iB5HXb0bZQwQ)rQ2WBaar71pPL5 z{SNLAk0Z?p7Ny_E3|OpqL8w!4k}7frq(7YC!qMzzYr&Fl&%WET#3?>36G zRdi2E`_2qjI%|u4{qayHh@~GDmJ4JS1aX*M<&1;_K!845^bC3WCjIiguhe$VncNq= zgHd_R+Fy^FbWbegx;?J9aiTmHN)?ZTkAAvNa*U;egGWA3a64XZ@%(rw)dx_hAUgtc z``(pYOq8;a`d#8byfdigd!j-Uo3?=t4rj-TVHYPZEE;o-<=|Npl<2_(sh{6F+Ka@1 zKI~WZxzkY2EG>y*#zr0PJUL6a{}8|_z^yQrk&*q8O8N@a*B~QUGM(N+R4&`ip}Uc7 zlfi>R^ALXcg)e16Ah5F#LU8GC!Yaj0)fUEKc*~(O<>pzUPG8sax^32J1uaUy|?u zt^!D(-cmN%W(X#lHd32`uleM$cfwS{B5ocgD(uenO>+PzeBSg`j>txEtiJR9fhn?C z5#;=a7vQoce2u>$(Rz#&b-@D`v&*PVC8Gj{WB>bMzl>y*XbV0%rOZ}d#7}lwtkyva zTo=BPpuJxV(e`f#smSQDq+62C+p^e^LmjcK-Tk@<-)^p;fz4bL1-(kAZ$Rpnr^^jE zbM;hM;^VcYh~@;@uo!72V^$$}p8&sgT*l>+y4`_Hgd3JK?!Lj4=w|+0T$}62C@8|5 z8C(B zbKZ*L8+e=ojz|eBz%u;H)5x)QD(#HKC8sm}4os0gWEKO5MhL){Lc8-&q&b4S#tF5o zG=UmFgBUbhm5m7SWHRDM+yQ#x5nEOYLO_GCD%6XNsi-K&3m^oDSgKeb#m4HK$G}k) z@e+_M(`JD@=3iwM6&5)NxL~A#IiFdKy9DuM#n}mn>$bM&vXf0Qnb=jGla)CEm5~HC z`s7hr2>bEz$;0WTCosqJi}Aks3o9W-?{>OB<8fsidiwF2J(a>_a6v?mtyTF?w(D+r zo7Gf8Q=GG6z9{k!gflihR-^(^R3&EhrzbaZk0fHdJB1KvP`V?mMR(;9=6vmleSf(Q z`XYs?Bew3mh|FOgu-oJfglQJ{2|H;J@UzU==%5=RIVpU zFebQ5Qu>$8MI~=IlXn=3vPx|h1a{AJii;S3|5 zOw^8ux~hdV%Ym~u|GDP<+tm`kSn!;ENM>qGYNqEU^e83i)baXKjWOu424TItR>bnJ za30F$< zS1}vEPx#@cMn|mo-Td5poX#2A6{g!^~LhMbLa1QDx`}}*$y`z zDwFYWkV0~LpqMS{NdN~_?^R`?kK7bW^4s@4hSC#VHE$|PDk?54g6T_t_#s6$BHVnZ z?@zPQEK=1+1TWxpA&HTM(TQOmxjO-zR(Wsc+f(Y`zJAKXgknuenafKgbHm$z9AsS|2kl9`17+LU5U|%H80uAznf=%An?OHL^Xg_~3db+&u zeoCpVbUv3BL5X*y!^Ere5|11o?^OWTdcdDO)2uzT`^ybyw|EM9%tIsAJ)=~v$DmH{w7vpsmB2hAS@p2w$Z0^)|#IAESQ z;MW4bf&$q`^7tk~apY@!MHJR0r1#AggCX-0!B$J|Hl5-)SRQvx%F z7gRok3%A5iyunlzH-~R#U)>kIheu^hbtot&GI)4<5I0L2F1(vB?4U}7&t^6S2n~1c zYPaOj1GXfN;`W`sPS$?YBOO|I8>srx<=Y9WXrBveF;ZY!?M)T54ax4c|8iNX6& z2r?ZS%w)LdW91~W zqoX=833WXIQS3q+Xq4@eF8+K%;(^Ee_=f{L5xpEZhRR!@ z#vLhs^NT9SU<;Cd{$CAe*%j6Mw&9_M8oGv-6ozm>x>JyrZiYs>Q>0621f&}gq!gqi zhLVu(?(UEh_&uBdTF(cVH+#*#_kEq$c^p0^SRF$*Cn`!T!kI{fT_pah#vH?jzl&>N ze8-JK_eB|dpc_{gZ-=N>$AsLXI=V-Nvijv^RlmoI+y8)xn@m&FdV9(8zLowfRiYhL zm2Ep0d2_4hR?h@XWpnnS;tTV|F&s-po85QSMxs2>Me(|~GAglWPa%+|Ne&;I^3fr= zotN=P0DQ@hB`59nAGld&FeU-U>&xtQzo34%GuE1=ttX=q(&8Y;1kAP z?Yvx<{PndLGWY85zPLu{K0!Q9?QeamADU2zz%NbS1@oA7{g8K{y}h7TpVbc60u;r- zJjO6ts&PCRE%6E-80g(pCrUZ5u<>$EPGG?5jT@`OxOofMKHpzHu60dWW%tT_>bemb zC0Q6nYy3&_7GTHDQ36`LTE1C*4`V=xEz#48-|^*McLd7MiE?3>DwiB{U>`Dj5<_%N zr{74ei`tZBEhOg}HHhf$jcsV>TJ#jcvpFya{6+K)?^bQqN5Lm#b|MaGgUKU#m8{Fn z);V8%&)9T+I&#Cif2>L+vBIIh#`)2IiwOrzlgEtg!_e!Fy%H;Ph@E0%L(ksDdzMdL zFV&c*>gLQ4KhZdjzH?*6??rT;p_{ac8G?jHdWuq16pf9I4H(R|YAt+t`Pg(@eSknI zJN@gP_E{hT4$PsB1m0vF&E-1c#pN{^Rr1oZqglOGv$KauI>XGgqoBb>fA)V3AeD+u z!7!xn6MSTy^;+A1URw1q=@afqWbN9Acl3MZeb*A1SYuiMb;x(Sz>8AP?X1G0n?E%ZU`;6PdqWAp>Ho;01&6Y7uyeoUo>eW z&mNfTr2I0!dyxXLUav0nUZs3EdLr(9z_qj4j#-dSh1|)}{8W?`8lRDr(_rEQc!ES^-5lbnODnVu~eNtosha^_o=u4hOQVtnVyO-8ls%=DSya)(^tw; zuFOFAZ7L2A6hfSX5fFTVY(n4_VDurmzG%bQ9XCDg=lLdp?$S4D?(M$_mlGYO7yRLb z-u;^SBbp^QgjHKlNUtk()fYOt>0OwA%DT6ec4OOnzoU7+cz zE|C;^-W(nknMSgL0lXL0G_xj3KW21>{SabSb7&=fZv<|gyUDbN}3J{%E^XoWCm+2U6z28W4rs-V<#C$n`{$- z&S!cQz35o9Fr=HftF))x?uV>}2A7WyrwmIiA-qtSMks@&`xX+0Ak}TDSpN+QLyFJx zuHnWZ5gN~Er7xbtMI_-&^7a5D>L--+>Wb>VuJUzCo?LGzFw(RJ1+4=~PqMiS2QxGl zl8j~hsq9S`W%}K!SJEQ@bu(+@&RfZJz6?WKi6vzqU+2|&fvHW!OAY~d1tLRB%j6ot z*io_5omQum@nhy&0|AYPC`CO4C;;CX^1N2ew7b6GW+p_sIgUh;N^KV%>ZhD`se?VH zRHmIfiQV_Vu?IyKr%0l^{$rmzeDptOrlFY9My|#av*g-NAz`n5Y{dwLL2QX8{pbNk z<&Jz)A9$6}N8=`m+#KXJk3- za@RYAreONB-Op_<}bg8f*M%jNoxoIt28F6^P&?v72@Y6BF4P?`=jIx$c>=ku;t!|~l?sjHut+OvsVF7u# zC2p_Z0qh_~jfz=Nb#|75Bm$dIRP}#NoycivMg3F`!H>Oy)8B5PLFl!b&?)vnaT~}v ze%EMkFz#DA`~;{Q_x6#IWtRJvOo?>s?;nUcqG;`&J6w>_A5}hYtI4tlXpw-4YKMRf z+PMBsFm3p7a1xi<-Z%rTZsmFJkabBK$M)9XEf@ng^5J;nN6`3E3pE~)Mh%u~;z@nF zUnBNsG3j7q2~Sdrj$6ffBD&`@v&{PS3cK$@hKJKqMZC_(fM?2Xd%TD$nMc33=ckB8 zRHG41%%E3|FMqSDdOehNg5VU8$MP_4MHnmepE2sGiiD}7E%DecggXbH{h9Ef)ot*X zK~1q#t)RZVJ25k9a3-9Lp4qr%+mQ|vdrN}{Ka^_@S!=K!BsO9yqNuY#ic+G6!6I+_ zFdp$UmAJu1uVoD}OBZK<%@JARp`QZ$HTf^qd*3(P8*u}~6-epf{$&4*S9dhF z$flD`hpWn`Kal`QvD8}}H@i|XWARS3Ep2(Q6XECjtn7=U17X9zXeW(lv3#$qA~(8y z!p?kt1_~Y?DLnZbICc)$KZ8nrGctt7(hC;9PWF6Wx7LMXO%oXq^fJAuE(D4*q93;} zVm6bEa|KTxf$gVWH#+wj@D=5Q?D^nTZ~MZny~YYhWP###!OPyKTY7b+K98ca>@}j( z;RBFLSQqS=nhw^Y34i3P(c+^JYVTo|Q_yM;KRl;7mcMAMki|6fe76*ouby|Ik)~Gq zLNPX-l-SUtnT;fcRzHF0P?d_NuCpI5RaalIreu6F(IgGxWAG&pA#Y=FTU#T)$&p4- z*0^ii?S8Tr_FyeH`bW-b#~Cac-uKx9ZA8z_Rl6)NZx4uoTx7qo?akhtq45X~!Odjf z;sd*qz+fMh%_=LJyLH+Ew?T`ZX&kN&!iGVeQ;hdPiG6&ha%mX9mw>uF%0fTFS`_u@ zfdpC|{ZHb%Y}w16qq+uJeM(8rk@Od=cT*L6zAwJ0d{~yUl}jR8z10jUl8}FuX~~jR z-W0L8)O4XE_L7)5K|S|gzW1UEhwEwNlChojxTL}Vf%~+)(Wl7$A^b_|qm%NpU&a?a zHo@2#D5bzX#+$wMd0nvmPQBGP-)S|lNowr1tMQjmO0Cm@3mr60Ppivayjjy%N$Hex zvS*uK(~7hQuRTI4%WPpDxp+HXF7|e)U5mm0h#4=Cn7%cwu_*kcpr1@=Z^wV~JN$g0 zZlA!SX@A_wQ=Uj8Jw8ZuIG8yJUAT+mYXjMPzTm|XvsIM@F5a>37UsUS@O&R$27k2A z;h$<|5%hUeRtOn1zUTG{Hvg{bVE7aUIJw=S1NJ|y?{8?*Sd`mRUjJn37OVjPRacX! zWe@M=+Q-z-kK?bsVF&g8XhD#br`b18jljfmQl+y~_Cn`$U5ABrgM_GR4>Vk!Y`S z1{$iA$mnUaL|<9i*@?r7i}$V1Z8Y<}st9kxxkG<^%w*~AhSF0CpK~gOJ2&D}rx~iF zll?46-#euBKcXr*r^LxYvu(S67jRv*bw$qQJPwOO-w6ST=8II!Lkw;d>OqqM|53Tp z^9LB(w(0kEV+ACM0nWWRFS8X(m58$|q~u#v@YErcGUJmEmPzh&^(V(k=_aRg505VS z$q>d+nH9&uV6ZP^MVNI@0($O`tDU$wf&z$QV4H03s8Mx^^6!#DzUe%iPxavrE(0IJ z`GS$F7bXsdQ`unr%T7PB*Q_F(qxy3LVQ0SN5#4)Bq=vz~9ey~%t5BlwYt@P6=LyJF zUxy&~G)Je!8`flM0bFbrVUyC2su(T7Ox&L{X!G3)RZEoq$^)}v%^GFshBOJh9Yok} zr1UDnVzw#MpM80H+Uf0Lo2hvD?*r~OY6v(TWs8g$e<(A_Jg`UjBxXA!E}Iqe-}QHgzwj<7-n4# zUi2qF2$S~v&x^|~J`2O%M{3!b5`lk##o~t*hNe7f8a%@eJKGJzH}|*&#QzaOBE=S_ zzz4x*$O~BNz8{qcrk5^uEgEMf&pnHLwA)~~E9oBKi^=Mr?D}v;RNK-`Lh_uh_zyE| zMJDM2^DF15%DqEk56cCh2jd|T7Z)FM_#NLWet7hNlg8mw?%)1CU_LYBhzyq6XHr)d zlXzqM))E4)cAk3^L#P^BKbxk8ifa!8&q66NjMCVMKDd$XS%)Uw`35c`1u+&6v5lrh@)@=YCZ3Wq=%n-9xrg)Y&peL{H1DxGch9Y-62R zCs*pP6Yf&W{Z$rbEPS-UTG@W3#8A%Z>X8okMeI?salQXrsFBY&KZ}7pTfD*1@j`=8 z=s_(I;QY#0^6I-aSiR#|&cJ?;(x4H*{j|0LvxkIO7Nomtd0QxT|AoZ;D+p zki02;XMRZFALYM0_uu`6n3%d0_fDyJj%fP#3hjRNH`i%O6A&;{Dwn0pmWqv0tp&VU z&@Z29qJHc4!fXyOT&azZGn-80=RZT+e}lrZmk`kGEiPMtI@j8NGF741G?p|&P_d$i zz9c^U!bmqg!l53CP^6IbRBCW8H@apJOUb;SKO)}8l z>}IJ7Y=Pd*l_dkg3b+~RmXAGar1;dN$xo>NYuaS}4d-=K#d!buR&(ovnktzc(7z>l z({n&s`@`~gTTsF25TYhm2^J{?;#5#0{N{URr4a?j6G^CLpAQ@x%T5-{dox@3O48G# zf~$=ln00S%&TvO>E_!#0nKvd49WrbN1ri|Vf4&(gSf`ujbQ07zSi}9D=hh>YaeTon zQs$p5zY-U69H+CIhbZ6PO$pIcg?Q`N4^UgCKia6cl5_VU$!ui0?ZhnL(9A;lS&R50 zDPbtVMoYwj-lfblmRkS$`aIq%AJUVY-(E3=J*XqQ{(i@}D0tn1z~OL~T2g~L-juJAM2sX}#|@Ff2{}J}URG&d87oiyXLc+4Ic257`&Aeee0_M!k14AO+A4@Xz9L|UmXXQ%=~n6_Cy!GJgAm@Q%T#4hiov5m~~+2raikxBH*SN=+MHB zzwwczE4Ixt*h@|4D>xqam5)*s>4sffD;l9leYd>4zerPvU0*ATrV*X4b zzq_kl*C zpN_$?bAD2@yLdlyd3@6^wY8y=ScXY_qPgM;@BeH24g!J0q*3K|-2?{%hB5;eGWnXK zQD?g9th;XzfYqU+codli#w)w=q9V?}F4{V$ZW@Age@+7Z!GpxJ_qH@R=;d|K&fcvD z0rr)#twfl`%Z>;HwFV2H>rDUN%v8^Zh%p?jFEN<0{fwOO(ZwevC2+W2vk#c3b8$T% z6)lsy;lw*>2EIxE%aP13PIpFjPL7tBejA%f8vAotj(PhL?N#*6XhU11YFoY>A0NC) za>egdIQtH+&UxBN3p9(Z)&SbaKUK5y$8L@jy+?&jejL27zOpUlLC&OB+9==x=!bah zlFBo{TP7~yR#>9+4hV|`eswlZVmO4U=U2NM`mo002t}0{{R3vEzlT0000&P)t-s)z$y@ z_y5}4|L^br-{Ak}=l|;J|LW`i>+ApD-~adb|N8s?^Yj1L*Z=?j|K{ia+uQ%+uwqrYphk-IJl==C}1(rN7YRfzc z9@9gfaU36v*W)#^DOMS9!>|r)Yg!XO&*yVxODR3mE!}P(>_0y6Fn*MPjvbza^^N)8 zm2L3?5>wv6ymFo?Gr;?=naLK`^CFm)a>o3ao%B&z2kk+mVI z=~bk!Yy(Ii*j8QBm3V$Yx-$Nh7-uN!x1T1xV~5)bJ2+X@g?RvLItKP}Z29mtJvg6r zc8^G(MtR1^3#?a>&YX(}@!(wNcTDdo-IVuWou3~jpi{ofAf4Vh-f1)J6l;3y-X+>& zO*hQN?j6vnT}}3JIs{bke8bJIhaP;6!H_-DBL9VYQj_)Si^A9?X=hEDnj>my^FjDcl!J6-n=qSe#1kp?G9yKBQ;IKcIwG& zLpCl}IGoez@ZCFMk5m?0EHh)IGtcZndYsc8tJ=VJ?%tESbmrcTc^uhVWaK(DEn~TN z>`$%cLL0-+>7IKRPfWdI4&nuK1o~Lz-UD7`Q*+`|bFq-7vJBSVE4t1E>>vMXU zd$;pX&J?_BjcqPSe@Jqs&b>d%L@Zb@&*@A!B3+5+qdL$c_ujF)C-EEGztqzg9$y)Q z@#`%QJI`}O`U7cLvDfSOZ%fRqFQ;mhGLK~x8)2+&;$vAaDn~hx0y+@Q=&T0Fuo=zFLcj3Iwy@U6tr;omS zH^zTQ#YG0ns)|&v>HH|;pT+$C*^2ZY>d3u+Urz_`$a+MqOMolmSkx!S=uH$4#qToI zZFoIBz0w-%xkdUKt9ldCJL$x>>0qvXj;ErYPDKv0p51wPE&UAi$2@VQv+1(VDEJgh_muICNT=^eY5*|2xl^fGDwaf9u7BhAf_OzpIwkHU6xQx;4b>FkYk zpWq)#IubK5!C*%=g|6yePe)lbCEv-V6v>$hn3n~q*a?=!X7&6#=hMh?vIoCOa!EQ> zsXxSLHuk!5Ws*Wm-r1dRDonb__}NfwfoUz;|HlFJUrR21lKF24(gRsdlLXPXRbruR zbzrNt$qOJc^){2i)1|)VQy(Li3NChh^+v~wkn(c z490<|wpp72$QF{px-F0mE9;$f&^}{!&t_g@iy3~wypCV;+iGkXvphSitqJR>vF&-= zNIZi`9I9+$%(ec)?9R_FZ+R*C^j9(7t8Bgd9e>UCH}1QdgESH{k*tXtCA2K(K5iCo zJ2@9SsAE`iMpLl-0I_vXD}am~60yj=CvA+x)*b$*3FzlF6kSZwga=uK-|MfpicqqsqOn>Y~`9r}U6DnY1aj%Ds2^9u&LMZI8~#sHYpg>wB-YY$&fH$ko*f z7l>QfqMjaFHeo-Zz9wi`W$S(KLOdR1<1T&gVE)?ozU2I;ZrI1?zoiGiyr9oG%Z`% z_uhu|9_m_U({su9^>pwaeeXr*@q!U~SYaHI{^A!~5Dv%oO+Ed_Kca`CS)_N;BiH2X zxq;|F{@pmwSsgLMk$ZQ+LovOBbc=LN#eT0(PqjWB%~Br;;`CN)dSB5=O%u%bO9RPDn``M z4+M1yA=$NT#D>dR#NamxlHFdJr^0dUz4BHmy5#18|09BXXmiI zJHL5Y-@9+-kdBk|y9=AdT9Dooa_Z0sb_eS~+4EkX(}7=}d(ZXdfzkJV*}V_LONQp+ z;vPAOTR^(&Ta5Kqr1!peyIpGAk(`U%yYc>ZPQUcM&&!-^S(6JGg?Fe{9jlMHbB6PA zNW&^_xM-+#m96LAH$SJN``L5vzQZZb={Y!$zIXNtP|jw3?>x%F>gvgN$9a!jI`5ph z-PpI&vUTh*a+M2dj8_VmO3x-+V)|3x`;3HKTr}iWHc7!&wDSXfI;^gzL%b-Qt3q9( zy~~=Ku#S6EILg^!O~7JL!o{s293F z89FLA)n_XKW2c4aC=lyGs5;TwIr6At+z$NN)QZ`2ssNk;|2?|Wyewaxnk z@>VBILEwnanR+AV-LR#k$@S@V>r6_eKK)&(+-f7&r}nt-olMKNZR+=Yh@lUfwE3CD zglLWQNeNdq+dP%Y88#$mt_pSGJ$Vmwtmy)~lzOBQD} zHoHrXGG$cR7HHUxgV-bYv~O(4!i(MQzyH*-ZKUZd&%3kR?X=4t?}q5P_o=A4RJr## zmmnV5RZXt3rXxV1WV4egyqw&2%sEUIE#?8Zp3 zgRaeCqUnv1z3&}2ncH6Vl6yBq|54TVe$}##)*1OaFAr1<=FkM| zVP4%XWy)2wMYfLg-uKR2yKR@;JEC2;MZ)=|?>)b(R!2d6mW@3KAIeCNdODC);)214 z^>)dbo}3ZT?s-_+-*WFUzf%^YYJQ*JwQS=g4tNOTnuzsK|BXfp<9&#FI!J$7)68f3 zOl{Zn{^cIKN3K-2sFhJp#y3V@sNnpfWg9Khc|@RxmBf0xyUy>vrjO^1k@7^KU(^oQdOEI>`{Ym;-#*fNc@>gn4Bx$1 zTDE+6v{(1Nm)~V$s>SmgyZ6wi1FMay%4SV+$i7RYGwZkX*)r1meedX#vm4W@-8+UM z`*6(FciFD@y}vZl^8zj=uu6H(V6yTDB6dx`&pHFs}j8FNPFle3$J` zAYY>cG;jY`?!C*JE?TyC-b2eq^4r_?1yp^P4O+J2)Uxe}alqEP9c9(HF_K4U*-W|G zl=)8jTz!{~ZDQxuHmj{wTDHZ%x@p|!_%0i?Y+GpAauMz1zx=ywh;Wkl51O~XCDMD9 ztqa-MVct?nTP$ysk$aEtvgv*Agkp7Q+2XrwQE`Em4Ig*79@)xza&N|I>HbMr9pUHjDJ}B5QiZ1^?=kXXGGQg=-b*J@p=a z@7urT-s5XcYLGOk1L@V59papR`C1cOfLV_!TiFBs@l4G!a$UIld$vx%bG) zp|o1w4Lf6a>-)($JKQ2?qlA9O<0WoQY8a@jYRRRLr#FlA9_?uG)C7cQqUzlHA%@gD zKa869#Xr$yV8Y#8G&3(bN)=$F(r9-mA9mps?|=o7&I>Ik$D2^0CP>sxCi?} zgk!N_uGjR?ve~!UOup!>uW&AK84&4D9;=e>gxB3t{{RkN3{I<*9Wnp_002ovPDHLk FV1kZVGdKVM literal 0 HcmV?d00001 diff --git a/examples/widgets/dialogs/classwizard/images/logo1.png b/examples/widgets/dialogs/classwizard/images/logo1.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b594aafcd6f944f6d950aeaab01017ddaef68a GIT binary patch literal 1619 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 literal 0 HcmV?d00001 diff --git a/examples/widgets/dialogs/classwizard/images/logo3.png b/examples/widgets/dialogs/classwizard/images/logo3.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd3ea23589d5cd1e36995fb7930fbb65537e2c9 GIT binary patch literal 1619 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

~pmFwck7jhkKr6uo?q0+;sEMYfP3VosyR1 zN!N8aY=%7f<4d+SzMlU2gatX6DP)AZRPfX7L|XJH_=ZYD4Z#F#q|s}v{MY`)U?nIi zMo+c1?73mZO1ikI#z612PDvWpgTCD+0OwspAYtsN;Oz1rw@jb86B{BO6}f-trh6v8 za`k$|h#BqLIyc~6i%RMu(lb~|VYxT7=CAjbD?Wd|oA-Rj(1m&%KKR*v{Z3Kp0;$WK zATZTX#gw%810B8m{z;2&6O}RcAkx`}?bg^PN@}3)1to1&hIqLjv3YMCwlYVC$^O91 zE-I*_WCui?)N@3Nw06=D5pI8c*Wf*G{viN(#QOYCB$d=q`P^ba2Zl2|yPpS>WvrgO z7n<%QYYI+f`333d1)d|heb{g1mW~7A&se0#gOY;T=T$igp47nn{9PjrbN-HDhYPsj z3~xk>2;<(oRw#D40I0pz9?dxK9?s-QUxO-v1xiX<+3N~m_2wJCPJfN*q18Bl)6M{< zl&Ksy*3(|yczAzU887sK0iw&#dDHE#pgHWwUqWyPNsN}h+I}6@1DqcvE?)S3)X#_Z zo%ZhAwmYPj`{w92K30J_8kne$G@wP~5k&e;pvb z>5TgcCUnXD%MZ5fFfOQ3qrdk`B_#C>f7z2FOJf~vdC9W2{4gjv1%P&>CHI@4vjFtR zDs#Bo!o121f3Na97?esRM_NQpCy1pJDfguNiN?pHW~w~6!5N93jsRoo)RtZpoKufK zaKvU){+!WmnVEmdpX(4EMXYdj4;_>gDzR68eAkL~?h!6L9%)hi=dPY>efb#0Li0O@ zdEIOzYva+MurJ5WA5CxHj6Jrl2jWA=$&I#^PaTrhq8}3O8D50^wi;b$T?p1yI0(l=c+u)!naflSJTH=<=~ZODPQCL zXfkJNL`rHs>730dN0)%)a}Ol)l~IbvmrW+NdjId=#LbR@J*7u0L<4^W>=WB$ZJO<; zjx$AK*C(1X_N8o2k=>7 zo++{=z1^T{WY2RzGFr2JI72v##DKpFr?>}gneEU=z2yASLyr1N>t}AV`_TxhT00g7 z*Z1=1D4R4oqHY35LlUGwzwZ1|*kp?P@X13lOLKeObmY2CCdcT@-{<@pO-&Yi=+YuahT<@>X z8)XKwmJt=bm|^9RHGv3gtnpjOK4?uakKIdRou!1R}a-@b)B4grlN*f(;c%0Yf?G9i2^du0|qY z-T(j*d79%T#!SArJ~ld1jkpEt=Go-6DsGHE%N!_baKlbg<`|&R*O9h0I7+Wni zrOeZWYUZw^zRb3V5&66Xq6B7&kMWb9XT#0AlwB%1Gn)nk127d5dh$e#n{_6iAWAy+ z_(S!So@C`O^CpDWk6)8_+8i0OqfMvJ5k~z*h9U~pHwSk&)w&Lee4M${qnoKWEoWN{ zol5+urA<@8OcHN}}w z{rE_W8po%ccJc@m1SYn+#fPy+j7L0t*?IGwFeqdg-fhY-B?JMHgTJn6EZFX8qLO3l zH6H#YhQXz!vY~H29GF*gW%Pbys1ZrWnE((XHR;ova^scI6)qJsVP|BsrDst1AqJ(F zhh(1g6aZD=It}sg^PCX23AGk)X(RfuQurFY!jp3NEQ#4QrDZC*2)R{c(l-iH_DC1U zds>C}1mkp(Z9dO_Xg_bzn`c@SrMrZoG)=gp`S_O#?@6*GV#l@6u^v?#7c~)Y)o>aU z+`3@r4Q z@VKlSwcLBd5+h;zfj?Q`;m>nfvW*lsVJu)d z?ClRS`<$=$DkE9yS~OBw15*JeH;|g7o~tE9V*Fc8mQvG`N6b8UMol-WF0*P2p*OKt zTBp%AiKBk{z#vR1M`TA)4zJOP+;wJfCut9WKb@nNAzgf4JuW+27r@MSB8fJR1}zX; zL?hl?!2L`iR))2Aq37s2inf#}eW;#J^>T@Qqrrd*@`6bdB zB4v7eV{GI^A?;|Z@$i$zCj>;4c~--Ajjq7WJMq*VA~ywglTO}Zr_oYAr>~nTdiQ?p zAXj>{-hIQ|)6vu@A!=$YoilNaJc9HAR<%mdPB_sOa+@rHTT2`{Kmv z+mfxnu$oA*)s}lriHA?Y_uOMN@}g2P6OUal=JOJ@vF9zdJvo)*ln&HrVC@lcJ>dN& zWFYjim63EwqorSv#i!^S9zMkh!lbV|B}$P+r^GqBI)*c0ys^z1aXqAoBu0>2qNTQ! z(h-r+rM_{UTbi7sH1oWlgiK7`sIP-A^SZW2jqCN6jOAdsa;psH9N+VRe~! z_|=x+{s$*726tmCnrb3kX>0N{+_nz4gw8!f64|9F_uOaPf+%JE#LzBnxYREa5QM@9 zrLye}yR0X&bkT1RdRA>s>9c$T6I%JB`h!_=G`gG^_e5?C@#-eRNG-Mr^)H?w`e<2S zZox8Hh0)$CYM~7)8_b598HIWRGr5ZqZLTKunXS!SzG=>#533#gC^Zh#MB}M9^LZS* zN)V*uYOMlb?W;jo){zB(VW5pID7yxhg5R^xMD@l@(YBFyjNc5icamXLX_B6qVHpPmb zWynnCp7JF%GE0BdlMjsUL}}Pz4nvQ<@Olv#ol-wK`^q2Hk^66YBuE~NFs4uS+6DP$ zuoC5)p(1r)6|3Fo-^8JGhDPsx&BBz_JrzE&<}WIzWCq?-8fKf~!pP)1FGi_A9Yw33 zKO?;0=3(bH9&9z$7sZ=MEd5d6YwBT>s&^}i%(s+jN03S|Ul%79ZYA_WPs=)Vw$)tO zHnrlCrYt^LTC@{Y3;CGIb;+0PPcx9_^LB}1iV@koXzBGXJ$#m#&R;tBL73RZD9bjzJp*sSh*RG&pJ0XEb;Pu@^(*u^*#Ric#nw2#swojgt+c_Dn1-z4G{M z(5feG?S>8l<`jpL%vi*+9%q{jbJ^d+|Id(A74 z^6*VR{eviF4yv$B*wrDK0z3UJiw}A773-@;F6rY-ihu#(@r+E&9RwfDtZYSI1y5V9Z%Hv+J?X!zV+sbs~T#dK!5MTga6a$&o`4EvRxZiM?Ag#(wtckUpAXS$;)swC3 z07MNuXZTLRgtAqm#!h2D5w}RqyIJrE0w6#Y3!&mc2Bc)n#>#feXy!^aJcq_Q`UCbU1>EAmql)ZLer_w?u$C90ZeCqOT#E5 zo~jahgYpf!bc#ZgvXAW4`O1$TKYs1y#pIsAc?y;cD--F_f}^7GWE28LiHJI)kYu(8 z9Z2=jpCtKWt0~dn{OyM?x^e#szLt8T%Mp|Exo0f- z7p}X`-;vp=6saN>Of>~nm%(j+y+uyg5UjtZE6`c%#L9E}>{$)HHS6G`y%(uYCo8sO zDg9AVIvcS?xa`|kouhHUzC%EM`y`!Ta8zr8Df8^hBw~S2HWayW|Fdv8T~fKtzwajK z@h>-4+JXVCXL@q~{MyI_j#BA8BYj_n%PlH<=c=>R<^D|}!Tn=WFk+-W`PJj+?)~}l z>_B%q+2vYJHi)Iwb|#P-6)A!ysr)xSw>c-Dy0c4?Jn8Vs*Jna?`cV0P@Y&_NRgN&C zU4w>cYEVwwHGS}C!|=X}j^5eN>$^OzS3%Df`O%?qV#ixJN8}bS21-v{tXei+oC-qI;aZ$=8zw)5nZjcxb3xNA-ttH zl>J!_I{Zh!q|53G|LNX|4_vp6%mdmoRk8O=N+d#ma$t`pLhi2*&Da5An~L)lG}ag{lfTEH6u#i1d}Q-khb_ zU!V6Gduwz1V&BxWyQItgpT2TEi^xM4eb}UW<___aA3Yh0{q?}0R3`V!ePh%lEG19l zo{pP8>d@FUptX9!B^@qejAnE)^E73JzoBQn-1o74;}es}46~NedTuh&YMvR<#>mhz)ysEFJMU7qgUz5AYrclI+ahYJgtl`f%!S0Sj; zyLWjiyWW~Djm-2K?#CM+dF7?6lg+T^+MNj#jA*>5;3!ii=zW2oms|7Z>^g6i+iA8w zXFghcgy#0F?HSisXiw;P)6ru@ELr=wz*^;S%n5B5l&T4#9n=%O(en%S`pN3`!?;P8 zbm?y^fJ>381}Zz>-yYntf0T``CrCV2-;A^PdhMcmflv~p#GA3LQ48KZ`bQDhyCT(_ zFc7NIyUYWxLdq%jla0t+q?bC6E97C`Q6CCTG>Wf$nzM5d(>H9`@1{TFWCD~5Q;fTM z{f&C_C{FT4I?*UJSO(w3DSP-C?l*}tn`cf*(LXANwvZrY zht^WCbR34BP`zEsT69uU$?*!}(EG@3Bk;g8dfpi>+z>h(jXL@}Mu*H7#p zji_Xv=f?V#CY`OjF=9-9KjfoS$L#Y2KW8- zY|Ip?0G!^rh%p!TEP=}oM)Q6RvQ4xCIBl$sZSA;gose7#Bv2cvBW&z)WR;g zW0E;4;?z+lwu;ttMTa1SF8I%cr9-4ABp^(R=2rKQwiV+7)S|kmm|`SPeX%J;iE(|4 zfSv@+3*hp)0-OpJ9=aUoaS=RDUvX7zc0}vlA}zxy4KXvr+?A?#^hZZV)bD3ex%0E9 zVbUkD)$gcNx}>k1C$SX%Xf~gPB4v^ckq9hP!p-wLng(szKf3Juu@efRLMHg5<*Ha3 zCL6m00{zXX=`lDGpT|hlKu_%jBLm^j!{!ww(xfy-DlpkH{ z{?QAlrz)t|@y7rZ^)Olc4F2Jx;QF}OXN)&c$^0nMGFiX@KZ)u|P%`}qI*pGTC(hit z3B}{{s~iSr80xrr`eJ9p8lHw$vO`8nrJq+nUTWaF4t8e++&m(9V}V={XBgsQI3OmDxIUY^oXDu{-M4vIr?A0D%haKQIiM&0000" \ + "

Click a button to close the message box. Pressing the Esc " \ + "button will activate the detected escape button (if any).

" + + def __init__(self, parent=None): + super(Dialog, self).__init__(parent) + + self.openFilesPath = '' + + self.errorMessageDialog = QtWidgets.QErrorMessage(self) + + frameStyle = QtWidgets.QFrame.Sunken | QtWidgets.QFrame.Panel + + self.integerLabel = QtWidgets.QLabel() + self.integerLabel.setFrameStyle(frameStyle) + self.integerButton = QtWidgets.QPushButton("QInputDialog.get&Integer()") + + self.doubleLabel = QtWidgets.QLabel() + self.doubleLabel.setFrameStyle(frameStyle) + self.doubleButton = QtWidgets.QPushButton("QInputDialog.get&Double()") + + self.itemLabel = QtWidgets.QLabel() + self.itemLabel.setFrameStyle(frameStyle) + self.itemButton = QtWidgets.QPushButton("QInputDialog.getIte&m()") + + self.textLabel = QtWidgets.QLabel() + self.textLabel.setFrameStyle(frameStyle) + self.textButton = QtWidgets.QPushButton("QInputDialog.get&Text()") + + self.colorLabel = QtWidgets.QLabel() + self.colorLabel.setFrameStyle(frameStyle) + self.colorButton = QtWidgets.QPushButton("QColorDialog.get&Color()") + + self.fontLabel = QtWidgets.QLabel() + self.fontLabel.setFrameStyle(frameStyle) + self.fontButton = QtWidgets.QPushButton("QFontDialog.get&Font()") + + self.directoryLabel = QtWidgets.QLabel() + self.directoryLabel.setFrameStyle(frameStyle) + self.directoryButton = QtWidgets.QPushButton("QFileDialog.getE&xistingDirectory()") + + self.openFileNameLabel = QtWidgets.QLabel() + self.openFileNameLabel.setFrameStyle(frameStyle) + self.openFileNameButton = QtWidgets.QPushButton("QFileDialog.get&OpenFileName()") + + self.openFileNamesLabel = QtWidgets.QLabel() + self.openFileNamesLabel.setFrameStyle(frameStyle) + self.openFileNamesButton = QtWidgets.QPushButton("QFileDialog.&getOpenFileNames()") + + self.saveFileNameLabel = QtWidgets.QLabel() + self.saveFileNameLabel.setFrameStyle(frameStyle) + self.saveFileNameButton = QtWidgets.QPushButton("QFileDialog.get&SaveFileName()") + + self.criticalLabel = QtWidgets.QLabel() + self.criticalLabel.setFrameStyle(frameStyle) + self.criticalButton = QtWidgets.QPushButton("QMessageBox.critica&l()") + + self.informationLabel = QtWidgets.QLabel() + self.informationLabel.setFrameStyle(frameStyle) + self.informationButton = QtWidgets.QPushButton("QMessageBox.i&nformation()") + + self.questionLabel = QtWidgets.QLabel() + self.questionLabel.setFrameStyle(frameStyle) + self.questionButton = QtWidgets.QPushButton("QMessageBox.&question()") + + self.warningLabel = QtWidgets.QLabel() + self.warningLabel.setFrameStyle(frameStyle) + self.warningButton = QtWidgets.QPushButton("QMessageBox.&warning()") + + self.errorLabel = QtWidgets.QLabel() + self.errorLabel.setFrameStyle(frameStyle) + self.errorButton = QtWidgets.QPushButton("QErrorMessage.show&M&essage()") + + self.integerButton.clicked.connect(self.setInteger) + self.doubleButton.clicked.connect(self.setDouble) + self.itemButton.clicked.connect(self.setItem) + self.textButton.clicked.connect(self.setText) + self.colorButton.clicked.connect(self.setColor) + self.fontButton.clicked.connect(self.setFont) + self.directoryButton.clicked.connect(self.setExistingDirectory) + self.openFileNameButton.clicked.connect(self.setOpenFileName) + self.openFileNamesButton.clicked.connect(self.setOpenFileNames) + self.saveFileNameButton.clicked.connect(self.setSaveFileName) + self.criticalButton.clicked.connect(self.criticalMessage) + self.informationButton.clicked.connect(self.informationMessage) + self.questionButton.clicked.connect(self.questionMessage) + self.warningButton.clicked.connect(self.warningMessage) + self.errorButton.clicked.connect(self.errorMessage) + + self.native = QtWidgets.QCheckBox() + self.native.setText("Use native file dialog.") + self.native.setChecked(True) + if sys.platform not in ("win32", "darwin"): + self.native.hide() + + layout = QtWidgets.QGridLayout() + layout.setColumnStretch(1, 1) + layout.setColumnMinimumWidth(1, 250) + layout.addWidget(self.integerButton, 0, 0) + layout.addWidget(self.integerLabel, 0, 1) + layout.addWidget(self.doubleButton, 1, 0) + layout.addWidget(self.doubleLabel, 1, 1) + layout.addWidget(self.itemButton, 2, 0) + layout.addWidget(self.itemLabel, 2, 1) + layout.addWidget(self.textButton, 3, 0) + layout.addWidget(self.textLabel, 3, 1) + layout.addWidget(self.colorButton, 4, 0) + layout.addWidget(self.colorLabel, 4, 1) + layout.addWidget(self.fontButton, 5, 0) + layout.addWidget(self.fontLabel, 5, 1) + layout.addWidget(self.directoryButton, 6, 0) + layout.addWidget(self.directoryLabel, 6, 1) + layout.addWidget(self.openFileNameButton, 7, 0) + layout.addWidget(self.openFileNameLabel, 7, 1) + layout.addWidget(self.openFileNamesButton, 8, 0) + layout.addWidget(self.openFileNamesLabel, 8, 1) + layout.addWidget(self.saveFileNameButton, 9, 0) + layout.addWidget(self.saveFileNameLabel, 9, 1) + layout.addWidget(self.criticalButton, 10, 0) + layout.addWidget(self.criticalLabel, 10, 1) + layout.addWidget(self.informationButton, 11, 0) + layout.addWidget(self.informationLabel, 11, 1) + layout.addWidget(self.questionButton, 12, 0) + layout.addWidget(self.questionLabel, 12, 1) + layout.addWidget(self.warningButton, 13, 0) + layout.addWidget(self.warningLabel, 13, 1) + layout.addWidget(self.errorButton, 14, 0) + layout.addWidget(self.errorLabel, 14, 1) + layout.addWidget(self.native, 15, 0) + self.setLayout(layout) + + self.setWindowTitle("Standard Dialogs") + + def setInteger(self): + i, ok = QtWidgets.QInputDialog.getInt(self, + "QInputDialog.getInteger()", "Percentage:", 25, 0, 100, 1) + if ok: + self.integerLabel.setText("%d%%" % i) + + def setDouble(self): + d, ok = QtWidgets.QInputDialog.getDouble(self, "QInputDialog.getDouble()", + "Amount:", 37.56, -10000, 10000, 2) + if ok: + self.doubleLabel.setText("$%g" % d) + + def setItem(self): + items = ("Spring", "Summer", "Fall", "Winter") + + item, ok = QtWidgets.QInputDialog.getItem(self, "QInputDialog.getItem()", + "Season:", items, 0, False) + if ok and item: + self.itemLabel.setText(item) + + def setText(self): + text, ok = QtWidgets.QInputDialog.getText(self, "QInputDialog.getText()", + "User name:", QtWidgets.QLineEdit.Normal, + QtCore.QDir.home().dirName()) + if ok and text != '': + self.textLabel.setText(text) + + def setColor(self): + color = QtWidgets.QColorDialog.getColor(QtCore.Qt.green, self) + if color.isValid(): + self.colorLabel.setText(color.name()) + self.colorLabel.setPalette(QtGui.QPalette(color)) + self.colorLabel.setAutoFillBackground(True) + + def setFont(self): + font, ok = QtWidgets.QFontDialog.getFont(QtGui.QFont(self.fontLabel.text()), self) + if ok: + self.fontLabel.setText(font.key()) + self.fontLabel.setFont(font) + + def setExistingDirectory(self): + options = QtWidgets.QFileDialog.DontResolveSymlinks | QtWidgets.QFileDialog.ShowDirsOnly + directory = QtWidgets.QFileDialog.getExistingDirectory(self, + "QFileDialog.getExistingDirectory()", + self.directoryLabel.text(), options) + if directory: + self.directoryLabel.setText(directory) + + def setOpenFileName(self): + options = QtWidgets.QFileDialog.Options() + if not self.native.isChecked(): + options |= QtWidgets.QFileDialog.DontUseNativeDialog + fileName, filtr = QtWidgets.QFileDialog.getOpenFileName(self, + "QFileDialog.getOpenFileName()", + self.openFileNameLabel.text(), + "All Files (*);;Text Files (*.txt)", "", options) + if fileName: + self.openFileNameLabel.setText(fileName) + + def setOpenFileNames(self): + options = QtWidgets.QFileDialog.Options() + if not self.native.isChecked(): + options |= QtWidgets.QFileDialog.DontUseNativeDialog + files, filtr = QtWidgets.QFileDialog.getOpenFileNames(self, + "QFileDialog.getOpenFileNames()", self.openFilesPath, + "All Files (*);;Text Files (*.txt)", "", options) + if files: + self.openFilesPath = files[0] + self.openFileNamesLabel.setText("[%s]" % ', '.join(files)) + + def setSaveFileName(self): + options = QtWidgets.QFileDialog.Options() + if not self.native.isChecked(): + options |= QtWidgets.QFileDialog.DontUseNativeDialog + fileName, filtr = QtWidgets.QFileDialog.getSaveFileName(self, + "QFileDialog.getSaveFileName()", + self.saveFileNameLabel.text(), + "All Files (*);;Text Files (*.txt)", "", options) + if fileName: + self.saveFileNameLabel.setText(fileName) + + def criticalMessage(self): + reply = QtWidgets.QMessageBox.critical(self, "QMessageBox.critical()", + Dialog.MESSAGE, + QtWidgets.QMessageBox.Abort | QtWidgets.QMessageBox.Retry | QtWidgets.QMessageBox.Ignore) + if reply == QtWidgets.QMessageBox.Abort: + self.criticalLabel.setText("Abort") + elif reply == QtWidgets.QMessageBox.Retry: + self.criticalLabel.setText("Retry") + else: + self.criticalLabel.setText("Ignore") + + def informationMessage(self): + reply = QtWidgets.QMessageBox.information(self, + "QMessageBox.information()", Dialog.MESSAGE) + if reply == QtWidgets.QMessageBox.Ok: + self.informationLabel.setText("OK") + else: + self.informationLabel.setText("Escape") + + def questionMessage(self): + reply = QtWidgets.QMessageBox.question(self, "QMessageBox.question()", + Dialog.MESSAGE, + QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No | QtWidgets.QMessageBox.Cancel) + if reply == QtWidgets.QMessageBox.Yes: + self.questionLabel.setText("Yes") + elif reply == QtWidgets.QMessageBox.No: + self.questionLabel.setText("No") + else: + self.questionLabel.setText("Cancel") + + def warningMessage(self): + msgBox = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Warning, + "QMessageBox.warning()", Dialog.MESSAGE, + QtWidgets.QMessageBox.NoButton, self) + msgBox.addButton("Save &Again", QtWidgets.QMessageBox.AcceptRole) + msgBox.addButton("&Continue", QtWidgets.QMessageBox.RejectRole) + if msgBox.exec_() == QtWidgets.QMessageBox.AcceptRole: + self.warningLabel.setText("Save Again") + else: + self.warningLabel.setText("Continue") + + def errorMessage(self): + self.errorMessageDialog.showMessage("This dialog shows and remembers " + "error messages. If the checkbox is checked (as it is by " + "default), the shown message will be shown again, but if the " + "user unchecks the box the message will not appear again if " + "QErrorMessage.showMessage() is called with the same message.") + self.errorLabel.setText("If the box is unchecked, the message won't " + "appear again.") + + +if __name__ == '__main__': + app = QtWidgets.QApplication(sys.argv) + dialog = Dialog() + sys.exit(dialog.exec_()) diff --git a/examples/widgets/dialogs/trivialwizard.py b/examples/widgets/dialogs/trivialwizard.py new file mode 100755 index 0000000..0cfe3ad --- /dev/null +++ b/examples/widgets/dialogs/trivialwizard.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/dialogs/trivialwizard example from Qt v5.x""" + +from PySide2 import QtWidgets + + +def createIntroPage(): + page = QtWidgets.QWizardPage() + page.setTitle("Introduction") + + label = QtWidgets.QLabel("This wizard will help you register your copy of " + "Super Product Two.") + label.setWordWrap(True) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(label) + page.setLayout(layout) + + return page + + +def createRegistrationPage(): + page = QtWidgets.QWizardPage() + page.setTitle("Registration") + page.setSubTitle("Please fill both fields.") + + nameLabel = QtWidgets.QLabel("Name:") + nameLineEdit = QtWidgets.QLineEdit() + + emailLabel = QtWidgets.QLabel("Email address:") + emailLineEdit = QtWidgets.QLineEdit() + + layout = QtWidgets.QGridLayout() + layout.addWidget(nameLabel, 0, 0) + layout.addWidget(nameLineEdit, 0, 1) + layout.addWidget(emailLabel, 1, 0) + layout.addWidget(emailLineEdit, 1, 1) + page.setLayout(layout) + + return page + + +def createConclusionPage(): + page = QtWidgets.QWizardPage() + page.setTitle("Conclusion") + + label = QtWidgets.QLabel("You are now successfully registered. Have a nice day!") + label.setWordWrap(True) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(label) + page.setLayout(layout) + + return page + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + + wizard = QtWidgets.QWizard() + wizard.addPage(createIntroPage()) + wizard.addPage(createRegistrationPage()) + wizard.addPage(createConclusionPage()) + + wizard.setWindowTitle("Trivial Wizard") + wizard.show() + + sys.exit(wizard.exec_()) diff --git a/examples/widgets/draganddrop/draggabletext/draggabletext.py b/examples/widgets/draganddrop/draggabletext/draggabletext.py new file mode 100755 index 0000000..d2bcdf5 --- /dev/null +++ b/examples/widgets/draganddrop/draggabletext/draggabletext.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/draganddrop/draggabletext example from Qt v5.x, originating from PyQt""" + +from PySide2.QtCore import QFile, QIODevice, QMimeData, QPoint, Qt, QTextStream +from PySide2.QtGui import QDrag, QPalette, QPixmap +from PySide2.QtWidgets import QApplication, QFrame, QLabel, QWidget + +import draggabletext_rc + + +class DragLabel(QLabel): + def __init__(self, text, parent): + super(DragLabel, self).__init__(text, parent) + + self.setAutoFillBackground(True) + self.setFrameShape(QFrame.Panel) + self.setFrameShadow(QFrame.Raised) + + def mousePressEvent(self, event): + hotSpot = event.pos() + + mimeData = QMimeData() + mimeData.setText(self.text()) + mimeData.setData('application/x-hotspot', + b'%d %d' % (hotSpot.x(), hotSpot.y())) + + pixmap = QPixmap(self.size()) + self.render(pixmap) + + drag = QDrag(self) + drag.setMimeData(mimeData) + drag.setPixmap(pixmap) + drag.setHotSpot(hotSpot) + + dropAction = drag.exec_(Qt.CopyAction | Qt.MoveAction, Qt.CopyAction) + + if dropAction == Qt.MoveAction: + self.close() + self.update() + + +class DragWidget(QWidget): + def __init__(self, parent=None): + super(DragWidget, self).__init__(parent) + + dictionaryFile = QFile(':/dictionary/words.txt') + dictionaryFile.open(QIODevice.ReadOnly) + + x = 5 + y = 5 + + for word in QTextStream(dictionaryFile).readAll().split(): + wordLabel = DragLabel(word, self) + wordLabel.move(x, y) + wordLabel.show() + x += wordLabel.width() + 2 + if x >= 195: + x = 5 + y += wordLabel.height() + 2 + + newPalette = self.palette() + newPalette.setColor(QPalette.Window, Qt.white) + self.setPalette(newPalette) + + self.setAcceptDrops(True) + self.setMinimumSize(400, max(200, y)) + self.setWindowTitle("Draggable Text") + + def dragEnterEvent(self, event): + if event.mimeData().hasText(): + if event.source() in self.children(): + event.setDropAction(Qt.MoveAction) + event.accept() + else: + event.acceptProposedAction() + else: + event.ignore() + + def dropEvent(self, event): + if event.mimeData().hasText(): + mime = event.mimeData() + pieces = mime.text().split() + position = event.pos() + hotSpot = QPoint() + + hotSpotPos = mime.data('application/x-hotspot').split(' ') + if len(hotSpotPos) == 2: + hotSpot.setX(hotSpotPos[0].toInt()[0]) + hotSpot.setY(hotSpotPos[1].toInt()[0]) + + for piece in pieces: + newLabel = DragLabel(piece, self) + newLabel.move(position - hotSpot) + newLabel.show() + + position += QPoint(newLabel.width(), 0) + + if event.source() in self.children(): + event.setDropAction(Qt.MoveAction) + event.accept() + else: + event.acceptProposedAction() + else: + event.ignore() + + +if __name__ == '__main__': + + import sys + + app = QApplication(sys.argv) + window = DragWidget() + window.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/draganddrop/draggabletext/draggabletext.qrc b/examples/widgets/draganddrop/draggabletext/draggabletext.qrc new file mode 100644 index 0000000..b72217d --- /dev/null +++ b/examples/widgets/draganddrop/draggabletext/draggabletext.qrc @@ -0,0 +1,5 @@ + + + words.txt + + diff --git a/examples/widgets/draganddrop/draggabletext/draggabletext_rc.py b/examples/widgets/draganddrop/draggabletext/draggabletext_rc.py new file mode 100644 index 0000000..0f0cd97 --- /dev/null +++ b/examples/widgets/draganddrop/draggabletext/draggabletext_rc.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Fri Jul 30 17:41:35 2010 +# by: The Resource Compiler for PySide (Qt v4.6.2) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x00\xf7\ +\x51\ +\x74\x0a\x51\x75\x61\x72\x74\x65\x72\x6c\x79\x0a\x69\x73\x0a\x61\ +\x0a\x70\x61\x70\x65\x72\x0a\x62\x61\x73\x65\x64\x0a\x6e\x65\x77\ +\x73\x6c\x65\x74\x74\x65\x72\x0a\x65\x78\x63\x6c\x75\x73\x69\x76\ +\x65\x6c\x79\x0a\x61\x76\x61\x69\x6c\x61\x62\x6c\x65\x0a\x74\x6f\ +\x0a\x51\x74\x0a\x63\x75\x73\x74\x6f\x6d\x65\x72\x73\x0a\x45\x76\ +\x65\x72\x79\x0a\x71\x75\x61\x72\x74\x65\x72\x0a\x77\x65\x0a\x6d\ +\x61\x69\x6c\x0a\x6f\x75\x74\x0a\x61\x6e\x0a\x69\x73\x73\x75\x65\ +\x0a\x74\x68\x61\x74\x0a\x77\x65\x0a\x68\x6f\x70\x65\x0a\x77\x69\ +\x6c\x6c\x0a\x62\x72\x69\x6e\x67\x0a\x61\x64\x64\x65\x64\x0a\x69\ +\x6e\x73\x69\x67\x68\x74\x0a\x61\x6e\x64\x0a\x70\x6c\x65\x61\x73\ +\x75\x72\x65\x0a\x74\x6f\x0a\x79\x6f\x75\x72\x0a\x51\x74\x0a\x70\ +\x72\x6f\x67\x72\x61\x6d\x6d\x69\x6e\x67\x0a\x77\x69\x74\x68\x0a\ +\x68\x69\x67\x68\x0a\x71\x75\x61\x6c\x69\x74\x79\x0a\x74\x65\x63\ +\x68\x6e\x69\x63\x61\x6c\x0a\x61\x72\x74\x69\x63\x6c\x65\x73\x0a\ +\x77\x72\x69\x74\x74\x65\x6e\x0a\x62\x79\x0a\x51\x74\x0a\x65\x78\ +\x70\x65\x72\x74\x73\x0a\ +" + +qt_resource_name = b"\ +\x00\x0a\ +\x0b\x0b\x17\xd9\ +\x00\x64\ +\x00\x69\x00\x63\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x61\x00\x72\x00\x79\ +\x00\x09\ +\x08\xb6\xa7\x34\ +\x00\x77\ +\x00\x6f\x00\x72\x00\x64\x00\x73\x00\x2e\x00\x74\x00\x78\x00\x74\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ +\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/draganddrop/draggabletext/words.txt b/examples/widgets/draganddrop/draggabletext/words.txt new file mode 100644 index 0000000..19b8b03 --- /dev/null +++ b/examples/widgets/draganddrop/draggabletext/words.txt @@ -0,0 +1,41 @@ +Qt +Quarterly +is +a +paper +based +newsletter +exclusively +available +to +Qt +customers +Every +quarter +we +mail +out +an +issue +that +we +hope +will +bring +added +insight +and +pleasure +to +your +Qt +programming +with +high +quality +technical +articles +written +by +Qt +experts diff --git a/examples/widgets/effects/lighting.py b/examples/widgets/effects/lighting.py new file mode 100755 index 0000000..265071f --- /dev/null +++ b/examples/widgets/effects/lighting.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +import math + +from PySide2 import QtCore, QtGui, QtWidgets + + +class Lighting(QtWidgets.QGraphicsView): + def __init__(self, parent=None): + super(Lighting, self).__init__(parent) + + self.angle = 0.0 + self.m_scene = QtWidgets.QGraphicsScene() + self.m_lightSource = None + self.m_items = [] + + self.setScene(self.m_scene) + + self.setupScene() + + timer = QtCore.QTimer(self) + timer.timeout.connect(self.animate) + timer.setInterval(30) + timer.start() + + self.setRenderHint(QtGui.QPainter.Antialiasing) + self.setFrameStyle(QtWidgets.QFrame.NoFrame) + + def setupScene(self): + self.m_scene.setSceneRect(-300, -200, 600, 460) + + linearGrad = QtGui.QLinearGradient(QtCore.QPointF(-100, -100), + QtCore.QPointF(100, 100)) + linearGrad.setColorAt(0, QtGui.QColor(255, 255, 255)) + linearGrad.setColorAt(1, QtGui.QColor(192, 192, 255)) + self.setBackgroundBrush(linearGrad) + + radialGrad = QtGui.QRadialGradient(30, 30, 30) + radialGrad.setColorAt(0, QtCore.Qt.yellow) + radialGrad.setColorAt(0.2, QtCore.Qt.yellow) + radialGrad.setColorAt(1, QtCore.Qt.transparent) + + pixmap = QtGui.QPixmap(60, 60) + pixmap.fill(QtCore.Qt.transparent) + + painter = QtGui.QPainter(pixmap) + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(radialGrad) + painter.drawEllipse(0, 0, 60, 60) + painter.end() + + self.m_lightSource = self.m_scene.addPixmap(pixmap) + self.m_lightSource.setZValue(2) + + for i in range(-2, 3): + for j in range(-2, 3): + if (i + j) & 1: + item = QtWidgets.QGraphicsEllipseItem(0, 0, 50, 50) + else: + item = QtWidgets.QGraphicsRectItem(0, 0, 50, 50) + + item.setPen(QtGui.QPen(QtCore.Qt.black, 1)) + item.setBrush(QtGui.QBrush(QtCore.Qt.white)) + + effect = QtWidgets.QGraphicsDropShadowEffect(self) + effect.setBlurRadius(8) + item.setGraphicsEffect(effect) + item.setZValue(1) + item.setPos(i * 80, j * 80) + self.m_scene.addItem(item) + self.m_items.append(item) + + def animate(self): + self.angle += (math.pi / 30) + xs = 200 * math.sin(self.angle) - 40 + 25 + ys = 200 * math.cos(self.angle) - 40 + 25 + self.m_lightSource.setPos(xs, ys) + + for item in self.m_items: + effect = item.graphicsEffect() + + delta = QtCore.QPointF(item.x() - xs, item.y() - ys) + effect.setOffset(QtCore.QPointF(delta.toPoint() / 30)) + + dd = math.hypot(delta.x(), delta.y()) + color = effect.color() + color.setAlphaF(max(0.4, min(1 - dd / 200.0, 0.7))) + effect.setColor(color) + + self.m_scene.update() + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + + lighting = Lighting() + lighting.setWindowTitle("Lighting and Shadows") + lighting.resize(640, 480) + lighting.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/graphicsview/anchorlayout.py b/examples/widgets/graphicsview/anchorlayout.py new file mode 100755 index 0000000..02ac11f --- /dev/null +++ b/examples/widgets/graphicsview/anchorlayout.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets + + +def createItem(minimum, preferred, maximum, name): + w = QtWidgets.QGraphicsProxyWidget() + + w.setWidget(QtWidgets.QPushButton(name)) + w.setMinimumSize(minimum) + w.setPreferredSize(preferred) + w.setMaximumSize(maximum) + w.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + + return w + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + + scene = QtWidgets.QGraphicsScene() + scene.setSceneRect(0, 0, 800, 480) + + minSize = QtCore.QSizeF(30, 100) + prefSize = QtCore.QSizeF(210, 100) + maxSize = QtCore.QSizeF(300, 100) + + a = createItem(minSize, prefSize, maxSize, "A") + b = createItem(minSize, prefSize, maxSize, "B") + c = createItem(minSize, prefSize, maxSize, "C") + d = createItem(minSize, prefSize, maxSize, "D") + e = createItem(minSize, prefSize, maxSize, "E") + f = createItem(QtCore.QSizeF(30, 50), QtCore.QSizeF(150, 50), maxSize, "F") + g = createItem(QtCore.QSizeF(30, 50), QtCore.QSizeF(30, 100), maxSize, "G") + + l = QtWidgets.QGraphicsAnchorLayout() + l.setSpacing(0) + + w = QtWidgets.QGraphicsWidget(None, QtCore.Qt.Window) + w.setPos(20, 20) + w.setLayout(l) + + # Vertical. + l.addAnchor(a, QtCore.Qt.AnchorTop, l, QtCore.Qt.AnchorTop) + l.addAnchor(b, QtCore.Qt.AnchorTop, l, QtCore.Qt.AnchorTop) + + l.addAnchor(c, QtCore.Qt.AnchorTop, a, QtCore.Qt.AnchorBottom) + l.addAnchor(c, QtCore.Qt.AnchorTop, b, QtCore.Qt.AnchorBottom) + l.addAnchor(c, QtCore.Qt.AnchorBottom, d, QtCore.Qt.AnchorTop) + l.addAnchor(c, QtCore.Qt.AnchorBottom, e, QtCore.Qt.AnchorTop) + + l.addAnchor(d, QtCore.Qt.AnchorBottom, l, QtCore.Qt.AnchorBottom) + l.addAnchor(e, QtCore.Qt.AnchorBottom, l, QtCore.Qt.AnchorBottom) + + l.addAnchor(c, QtCore.Qt.AnchorTop, f, QtCore.Qt.AnchorTop) + l.addAnchor(c, QtCore.Qt.AnchorVerticalCenter, f, QtCore.Qt.AnchorBottom) + l.addAnchor(f, QtCore.Qt.AnchorBottom, g, QtCore.Qt.AnchorTop) + l.addAnchor(c, QtCore.Qt.AnchorBottom, g, QtCore.Qt.AnchorBottom) + + # Horizontal. + l.addAnchor(l, QtCore.Qt.AnchorLeft, a, QtCore.Qt.AnchorLeft) + l.addAnchor(l, QtCore.Qt.AnchorLeft, d, QtCore.Qt.AnchorLeft) + l.addAnchor(a, QtCore.Qt.AnchorRight, b, QtCore.Qt.AnchorLeft) + + l.addAnchor(a, QtCore.Qt.AnchorRight, c, QtCore.Qt.AnchorLeft) + l.addAnchor(c, QtCore.Qt.AnchorRight, e, QtCore.Qt.AnchorLeft) + + l.addAnchor(b, QtCore.Qt.AnchorRight, l, QtCore.Qt.AnchorRight) + l.addAnchor(e, QtCore.Qt.AnchorRight, l, QtCore.Qt.AnchorRight) + l.addAnchor(d, QtCore.Qt.AnchorRight, e, QtCore.Qt.AnchorLeft) + + l.addAnchor(l, QtCore.Qt.AnchorLeft, f, QtCore.Qt.AnchorLeft) + l.addAnchor(l, QtCore.Qt.AnchorLeft, g, QtCore.Qt.AnchorLeft) + l.addAnchor(f, QtCore.Qt.AnchorRight, g, QtCore.Qt.AnchorRight) + + scene.addItem(w) + scene.setBackgroundBrush(QtCore.Qt.darkGreen) + + view = QtWidgets.QGraphicsView(scene) + view.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/graphicsview/collidingmice/collidingmice.py b/examples/widgets/graphicsview/collidingmice/collidingmice.py new file mode 100644 index 0000000..8bff64b --- /dev/null +++ b/examples/widgets/graphicsview/collidingmice/collidingmice.py @@ -0,0 +1,217 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +import math + +from PySide2 import QtCore, QtGui, QtWidgets + +import mice_rc + + +class Mouse(QtWidgets.QGraphicsItem): + Pi = math.pi + TwoPi = 2.0 * Pi + + # Create the bounding rectangle once. + adjust = 0.5 + BoundingRect = QtCore.QRectF(-20 - adjust, -22 - adjust, 40 + adjust, + 83 + adjust) + + def __init__(self): + super(Mouse, self).__init__() + + self.angle = 0.0 + self.speed = 0.0 + self.mouseEyeDirection = 0.0 + self.color = QtGui.QColor(QtCore.qrand() % 256, QtCore.qrand() % 256, + QtCore.qrand() % 256) + + self.setTransform(QtGui.QTransform().rotate(QtCore.qrand() % (360 * 16))) + + # In the C++ version of this example, this class is also derived from + # QObject in order to receive timer events. PySide2 does not support + # deriving from more than one wrapped class so we just create an + # explicit timer instead. + self.timer = QtCore.QTimer() + self.timer.timeout.connect(self.timerEvent) + self.timer.start(1000 / 33) + + @staticmethod + def normalizeAngle(angle): + while angle < 0: + angle += Mouse.TwoPi + while angle > Mouse.TwoPi: + angle -= Mouse.TwoPi + return angle + + def boundingRect(self): + return Mouse.BoundingRect + + def shape(self): + path = QtGui.QPainterPath() + path.addRect(-10, -20, 20, 40) + return path + + def paint(self, painter, option, widget): + # Body. + painter.setBrush(self.color) + painter.drawEllipse(-10, -20, 20, 40) + + # Eyes. + painter.setBrush(QtCore.Qt.white) + painter.drawEllipse(-10, -17, 8, 8) + painter.drawEllipse(2, -17, 8, 8) + + # Nose. + painter.setBrush(QtCore.Qt.black) + painter.drawEllipse(QtCore.QRectF(-2, -22, 4, 4)) + + # Pupils. + painter.drawEllipse(QtCore.QRectF(-8.0 + self.mouseEyeDirection, -17, 4, 4)) + painter.drawEllipse(QtCore.QRectF(4.0 + self.mouseEyeDirection, -17, 4, 4)) + + # Ears. + if self.scene().collidingItems(self): + painter.setBrush(QtCore.Qt.red) + else: + painter.setBrush(QtCore.Qt.darkYellow) + + painter.drawEllipse(-17, -12, 16, 16) + painter.drawEllipse(1, -12, 16, 16) + + # Tail. + path = QtGui.QPainterPath(QtCore.QPointF(0, 20)) + path.cubicTo(-5, 22, -5, 22, 0, 25) + path.cubicTo(5, 27, 5, 32, 0, 30) + path.cubicTo(-5, 32, -5, 42, 0, 35) + painter.setBrush(QtCore.Qt.NoBrush) + painter.drawPath(path) + + def timerEvent(self): + # Don't move too far away. + lineToCenter = QtCore.QLineF(QtCore.QPointF(0, 0), self.mapFromScene(0, 0)) + if lineToCenter.length() > 150: + angleToCenter = math.acos(lineToCenter.dx() / lineToCenter.length()) + if lineToCenter.dy() < 0: + angleToCenter = Mouse.TwoPi - angleToCenter + angleToCenter = Mouse.normalizeAngle((Mouse.Pi - angleToCenter) + Mouse.Pi / 2) + + if angleToCenter < Mouse.Pi and angleToCenter > Mouse.Pi / 4: + # Rotate left. + self.angle += [-0.25, 0.25][self.angle < -Mouse.Pi / 2] + elif angleToCenter >= Mouse.Pi and angleToCenter < (Mouse.Pi + Mouse.Pi / 2 + Mouse.Pi / 4): + # Rotate right. + self.angle += [-0.25, 0.25][self.angle < Mouse.Pi / 2] + elif math.sin(self.angle) < 0: + self.angle += 0.25 + elif math.sin(self.angle) > 0: + self.angle -= 0.25 + + # Try not to crash with any other mice. + dangerMice = self.scene().items(QtGui.QPolygonF([self.mapToScene(0, 0), + self.mapToScene(-30, -50), + self.mapToScene(30, -50)])) + + for item in dangerMice: + if item is self: + continue + + lineToMouse = QtCore.QLineF(QtCore.QPointF(0, 0), self.mapFromItem(item, 0, 0)) + angleToMouse = math.acos(lineToMouse.dx() / lineToMouse.length()) + if lineToMouse.dy() < 0: + angleToMouse = Mouse.TwoPi - angleToMouse + angleToMouse = Mouse.normalizeAngle((Mouse.Pi - angleToMouse) + Mouse.Pi / 2) + + if angleToMouse >= 0 and angleToMouse < Mouse.Pi / 2: + # Rotate right. + self.angle += 0.5 + elif angleToMouse <= Mouse.TwoPi and angleToMouse > (Mouse.TwoPi - Mouse.Pi / 2): + # Rotate left. + self.angle -= 0.5 + + # Add some random movement. + if len(dangerMice) > 1 and (QtCore.qrand() % 10) == 0: + if QtCore.qrand() % 1: + self.angle += (QtCore.qrand() % 100) / 500.0 + else: + self.angle -= (QtCore.qrand() % 100) / 500.0 + + self.speed += (-50 + QtCore.qrand() % 100) / 100.0 + + dx = math.sin(self.angle) * 10 + self.mouseEyeDirection = [dx / 5, 0.0][QtCore.qAbs(dx / 5) < 1] + + self.setTransform(QtGui.QTransform().rotate(dx)) + self.setPos(self.mapToParent(0, -(3 + math.sin(self.speed) * 3))) + + +if __name__ == '__main__': + + import sys + + MouseCount = 7 + + app = QtWidgets.QApplication(sys.argv) + QtCore.qsrand(QtCore.QTime(0,0,0).secsTo(QtCore.QTime.currentTime())) + + scene = QtWidgets.QGraphicsScene() + scene.setSceneRect(-300, -300, 600, 600) + scene.setItemIndexMethod(QtWidgets.QGraphicsScene.NoIndex) + + for i in range(MouseCount): + mouse = Mouse() + mouse.setPos(math.sin((i * 6.28) / MouseCount) * 200, + math.cos((i * 6.28) / MouseCount) * 200) + scene.addItem(mouse) + + view = QtWidgets.QGraphicsView(scene) + view.setRenderHint(QtGui.QPainter.Antialiasing) + view.setBackgroundBrush(QtGui.QBrush(QtGui.QPixmap(':/images/cheese.jpg'))) + view.setCacheMode(QtWidgets.QGraphicsView.CacheBackground) + view.setViewportUpdateMode(QtWidgets.QGraphicsView.BoundingRectViewportUpdate) + view.setDragMode(QtWidgets.QGraphicsView.ScrollHandDrag) + view.setWindowTitle("Colliding Mice") + view.resize(400, 300) + view.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/graphicsview/collidingmice/mice_rc.py b/examples/widgets/graphicsview/collidingmice/mice_rc.py new file mode 100644 index 0000000..e9042a0 --- /dev/null +++ b/examples/widgets/graphicsview/collidingmice/mice_rc.py @@ -0,0 +1,271 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Fri Jul 30 17:52:15 2010 +# by: The Resource Compiler for PySide (Qt v4.6.2) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x0b\xd5\ +\xff\ +\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x02\x01\x00\x48\x00\ +\x48\x00\x00\xff\xee\x00\x0e\x41\x64\x6f\x62\x65\x00\x64\x40\x00\ +\x00\x00\x01\xff\xdb\x00\x84\x00\x02\x02\x02\x02\x02\x02\x02\x02\ +\x02\x02\x03\x02\x02\x02\x03\x04\x03\x02\x02\x03\x04\x05\x04\x04\ +\x04\x04\x04\x05\x06\x05\x05\x05\x05\x05\x05\x06\x06\x07\x07\x08\ +\x07\x07\x06\x09\x09\x0a\x0a\x09\x09\x0c\x0c\x0c\x0c\x0c\x0c\x0c\ +\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x01\x03\x03\x03\x05\x04\x05\x09\ +\x06\x06\x09\x0d\x0a\x09\x0a\x0d\x0f\x0e\x0e\x0e\x0e\x0f\x0f\x0c\ +\x0c\x0c\x0c\x0c\x0f\x0f\x0c\x0c\x0c\x0c\x0c\x0c\x0f\x0c\x0c\x0c\ +\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\ +\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\xff\xc0\x00\x11\x08\x00\x5e\ +\x00\x5e\x03\x01\x11\x00\x02\x11\x01\x03\x11\x01\xff\xdd\x00\x04\ +\x00\x0c\xff\xc4\x01\xa2\x00\x00\x00\x07\x01\x01\x01\x01\x01\x00\ +\x00\x00\x00\x00\x00\x00\x00\x04\x05\x03\x02\x06\x01\x00\x07\x08\ +\x09\x0a\x0b\x01\x00\x02\x02\x03\x01\x01\x01\x01\x01\x00\x00\x00\ +\x00\x00\x00\x00\x01\x00\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\ +\x10\x00\x02\x01\x03\x03\x02\x04\x02\x06\x07\x03\x04\x02\x06\x02\ +\x73\x01\x02\x03\x11\x04\x00\x05\x21\x12\x31\x41\x51\x06\x13\x61\ +\x22\x71\x81\x14\x32\x91\xa1\x07\x15\xb1\x42\x23\xc1\x52\xd1\xe1\ +\x33\x16\x62\xf0\x24\x72\x82\xf1\x25\x43\x34\x53\x92\xa2\xb2\x63\ +\x73\xc2\x35\x44\x27\x93\xa3\xb3\x36\x17\x54\x64\x74\xc3\xd2\xe2\ +\x08\x26\x83\x09\x0a\x18\x19\x84\x94\x45\x46\xa4\xb4\x56\xd3\x55\ +\x28\x1a\xf2\xe3\xf3\xc4\xd4\xe4\xf4\x65\x75\x85\x95\xa5\xb5\xc5\ +\xd5\xe5\xf5\x66\x76\x86\x96\xa6\xb6\xc6\xd6\xe6\xf6\x37\x47\x57\ +\x67\x77\x87\x97\xa7\xb7\xc7\xd7\xe7\xf7\x38\x48\x58\x68\x78\x88\ +\x98\xa8\xb8\xc8\xd8\xe8\xf8\x29\x39\x49\x59\x69\x79\x89\x99\xa9\ +\xb9\xc9\xd9\xe9\xf9\x2a\x3a\x4a\x5a\x6a\x7a\x8a\x9a\xaa\xba\xca\ +\xda\xea\xfa\x11\x00\x02\x02\x01\x02\x03\x05\x05\x04\x05\x06\x04\ +\x08\x03\x03\x6d\x01\x00\x02\x11\x03\x04\x21\x12\x31\x41\x05\x51\ +\x13\x61\x22\x06\x71\x81\x91\x32\xa1\xb1\xf0\x14\xc1\xd1\xe1\x23\ +\x42\x15\x52\x62\x72\xf1\x33\x24\x34\x43\x82\x16\x92\x53\x25\xa2\ +\x63\xb2\xc2\x07\x73\xd2\x35\xe2\x44\x83\x17\x54\x93\x08\x09\x0a\ +\x18\x19\x26\x36\x45\x1a\x27\x64\x74\x55\x37\xf2\xa3\xb3\xc3\x28\ +\x29\xd3\xe3\xf3\x84\x94\xa4\xb4\xc4\xd4\xe4\xf4\x65\x75\x85\x95\ +\xa5\xb5\xc5\xd5\xe5\xf5\x46\x56\x66\x76\x86\x96\xa6\xb6\xc6\xd6\ +\xe6\xf6\x47\x57\x67\x77\x87\x97\xa7\xb7\xc7\xd7\xe7\xf7\x38\x48\ +\x58\x68\x78\x88\x98\xa8\xb8\xc8\xd8\xe8\xf8\x39\x49\x59\x69\x79\ +\x89\x99\xa9\xb9\xc9\xd9\xe9\xf9\x2a\x3a\x4a\x5a\x6a\x7a\x8a\x9a\ +\xaa\xba\xca\xda\xea\xfa\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\ +\x11\x00\x3f\x00\xfb\x41\xd3\x6f\xa2\x87\xc7\x3c\x37\x89\xe9\xd4\ +\xe9\xe2\x6b\x90\x29\x6e\xa3\x72\x4d\x0d\x0f\x8f\xf0\xc8\x82\xa5\ +\xb2\x41\x5a\x86\xfa\x46\xf9\x22\x37\x50\xa6\x63\xe5\xe2\x76\xf9\ +\x60\xe4\x95\xc1\x48\xd8\x74\x3d\x46\x0b\x56\xa4\x9a\x18\x14\x31\ +\x60\xa4\xec\x6b\xe3\x92\x1b\xa0\xac\x49\x92\x51\x1b\x02\xad\xc8\ +\x91\xb7\xea\xc2\x84\x34\xaf\xc5\x8e\xfb\x77\xc9\x81\x6c\x49\x62\ +\x3a\xaf\x9e\x3c\xbf\xa3\xcc\x6d\xee\xef\x2b\x38\x34\x68\x61\x1e\ +\xa3\x03\xfe\x55\x36\x1f\x7e\x3c\x51\x09\x11\x94\x91\xfa\x47\x9a\ +\xb4\x9d\x6e\xa9\x61\x75\xce\x50\x2a\x60\x70\x51\xe9\xec\x0f\x5f\ +\xa3\x11\x38\xc8\xd2\x0c\x65\x16\x48\x25\x3c\x5b\x7f\x0c\x4c\x37\ +\x5e\x2d\x9f\xff\xd0\xfb\x3a\xfb\x0a\xee\x4d\x6b\x4c\xf0\xb0\x1e\ +\xa1\x6f\x2d\xfa\x6e\x71\x21\x34\xb8\x11\x5e\x9b\xe4\x50\xd3\x53\ +\xa7\x8e\xe7\x25\x6a\xda\xd0\xee\x48\x03\xc7\x04\x95\x4e\x59\x12\ +\x15\x2e\xce\x02\x81\x52\x7e\x59\x00\x2d\x2f\x9c\xbf\x36\xbc\xc7\ +\xa8\x98\xa5\x5d\x1f\xce\x9a\x7e\x8f\x67\x14\x6c\xb7\x36\xf1\xd5\ +\xef\x5d\xc8\x20\x08\xe8\x0f\x1a\xd7\xae\xc4\x65\xb8\xf2\x00\x6a\ +\x89\xfb\x99\xc6\x16\x37\x67\x9f\x93\xcf\xa8\xdc\xf9\x2a\xda\xe2\ +\xfe\x49\xa6\x9d\xee\x65\x58\xee\x2e\x09\x77\x68\xd4\x2d\x0d\x4e\ +\xf5\xa9\x3d\x72\x73\x02\xb8\xbb\xda\xe5\xb4\xa9\x96\xf9\xa2\x6b\ +\x8b\x2d\x12\xfa\xea\xdc\x11\x3d\x38\x44\x47\x50\x5b\x6a\xfd\x19\ +\x5c\xe5\x51\xd9\x61\x1e\x29\x51\x7c\xdf\x17\x97\xda\xf2\x43\x35\ +\xc2\x16\x66\x35\x24\xd4\xd0\x93\x95\x44\x97\x22\x42\x99\x5e\x9b\ +\xa3\x5c\xe9\x77\x56\xd7\x56\xfc\x97\x83\x06\x53\x4e\x84\x65\x73\ +\xca\x8e\x0b\x7b\xbf\xac\x46\x9e\x2f\x3d\x3d\xcc\x3e\xa7\xa7\xef\ +\x4e\x9f\x7e\x65\xf8\x9e\x9e\x2f\x27\x13\x87\x7a\x7f\xff\xd1\xfb\ +\x3f\x4a\xed\xd4\xf6\xcf\x0b\xa7\xa8\x51\x79\x15\x3f\xd6\x3d\xb0\ +\x88\x71\x2d\xd2\x81\x9a\x84\x16\x6a\x7b\x64\xbc\x26\x06\x61\xc6\ +\x70\x4a\x91\x4a\x74\x22\x98\xf8\x74\x8e\x30\x55\xd4\x87\x07\x6e\ +\xdb\x8c\x8f\x0b\x3b\x40\xde\xda\x0b\x88\x9a\x16\x62\x12\x4a\x83\ +\xc4\xd1\xa8\x7c\x0e\xf9\x20\x05\xee\xac\x15\xbf\x2b\x7c\xb5\x3d\ +\xe0\xbb\x9e\x59\x1b\xe2\xe4\xc8\x62\x42\xff\x00\x21\x25\x4f\xdf\ +\xc7\x2c\x88\xc5\xd6\xfd\xcc\xbc\x49\x8e\x54\xf4\x6b\x2b\x5b\x2d\ +\x3a\xd6\x1b\x2b\x0b\x65\xb6\xb4\x80\x11\x1c\x29\xfe\x51\xab\x13\ +\xee\x4e\xe7\x21\x96\x7c\x67\x95\x00\xc0\x0e\xa7\x9a\xdd\x4e\xca\ +\x3d\x4e\xc2\xe6\xcd\xb6\x12\x80\x50\x9e\xcc\x37\x15\xca\xc4\x44\ +\xbd\x27\xab\x21\x23\x13\x61\x85\x69\xbe\x5c\x92\xdd\xbd\x3b\x8b\ +\x76\x4a\x1d\xd5\xc6\xff\x00\xdb\x98\xd9\x23\x2c\x47\x84\xb9\x3c\ +\x42\x7b\xb2\xdf\xd0\x29\x38\x58\x91\x15\x55\x57\x76\x3f\x65\x47\ +\x72\x4f\xb6\x47\x06\x9a\x59\x32\xd0\x3b\x75\x3d\xc1\xae\x79\xc4\ +\x42\x61\xe9\xdb\x95\x16\xf4\xff\x00\x47\x54\xf4\xf9\x53\xf6\x69\ +\xc7\x95\x3f\x1c\xd8\xdc\x38\xab\xf8\x7f\x43\x8b\x52\xab\xea\xff\ +\x00\xff\xd2\xfb\x3e\x0f\x2d\x80\xa9\xcf\x0a\xb7\xa8\x4a\x2f\xe7\ +\x8e\xda\x39\xee\x66\x71\x1c\x50\x21\x79\x1c\xf4\x01\x45\x49\x39\ +\x7c\x48\x02\xcb\x59\xb2\x68\x3e\x52\xf3\x27\xe6\x7f\x9a\xf5\x4b\ +\xe9\x62\xd0\x49\xd3\x6c\x51\x88\x8d\xd2\x9e\xab\x81\xdd\x9c\x83\ +\xd7\xc0\x65\x3e\x29\x9f\x5a\x72\x23\x86\x31\xe7\xba\x71\xe5\x5f\ +\x3e\x79\xa2\xd6\xee\x08\xf5\x8b\x87\xbe\xb5\x94\x81\x22\x4c\x01\ +\x60\x0f\x52\xac\x05\x76\xf7\xc8\x1c\x86\x06\xed\x12\xc4\x25\xc8\ +\x53\xe9\x9b\x49\x96\x45\x8a\x68\xdb\x9c\x52\x85\x64\x61\xd0\xa9\ +\x1b\x66\x41\x20\x8b\x0e\x3c\x6c\x1a\x4c\x4d\x08\x3b\x74\x39\x53\ +\x6a\xd0\xb4\xad\x0d\x3d\xb0\x5a\xb7\xb8\x20\x56\x83\x1b\x55\xe2\ +\x4e\x3d\x45\x6a\x30\x91\x6a\xa1\x15\xed\xd4\x44\x8a\x2c\xb1\x8f\ +\xb0\x8e\xa1\xa9\xf2\xae\xf9\x31\x9a\x63\x6d\x8f\xbc\x02\xd6\x60\ +\x3d\xcb\xa4\xbc\xbc\xb9\xf8\x5d\xb8\x45\xfc\x8a\x02\x83\xf3\x00\ +\x63\x3c\xb2\x90\xa3\xb0\xee\x00\x01\xf6\x2c\x71\x81\xc9\xc6\x36\ +\xe2\x14\x1d\x89\xf8\xbe\xef\xeb\x95\x58\x6c\xa7\xff\xd3\xfb\x3c\ +\xa4\x0e\x9b\x30\xf0\xcf\x07\xb7\xa9\x48\xfc\xc9\x66\xf7\xbe\x5f\ +\xd6\xe0\x88\x16\x96\x58\x1b\x8a\x8e\xa4\x0a\x13\xf8\x64\xc8\x33\ +\x89\x01\x61\xb4\xc1\x2f\x9e\x34\x6f\x29\x2b\x86\x01\x0a\x90\x76\ +\x04\x6f\x53\x98\xd0\x90\xe4\x79\xb9\x99\x3c\x99\xef\xf8\x20\x08\ +\x22\x67\x00\x48\xa7\x96\xc3\x31\x67\x9a\xe7\xc3\xd1\x63\x10\x05\ +\xbd\x3f\x46\xb2\x7b\x4d\x26\xc6\x19\x3e\xd8\x5a\xa8\x3d\x81\x35\ +\x19\xb5\x84\x0c\x31\x80\x7b\x9d\x7c\x88\x33\x34\x9b\x00\x6a\x7a\ +\xef\x4e\x4d\xef\xed\x90\x3c\x99\x86\xb8\x35\x09\x00\x91\x5a\x57\ +\xb7\xcb\x10\x0f\x35\xb5\x8c\xac\x0d\x6b\x81\x2d\xa9\xad\x01\xf0\ +\x39\x24\x2e\xe3\x4e\x84\x0f\x0e\xf8\x15\x7d\x48\x1e\x07\x25\x41\ +\x5d\xc8\xd4\xf8\xf8\xd7\x23\x4a\xff\x00\xff\xd4\xfb\x43\xc9\x29\ +\xd8\x1c\xf0\x7a\x7a\x85\x1e\x7f\x1f\x7a\x74\x20\xf4\xc9\xc4\xf0\ +\x9b\x1c\xd4\x8b\x4b\xad\xb4\x7d\x14\x4e\xed\x0c\xbf\x55\x94\xb1\ +\x66\x8e\x5a\x94\xff\x00\x60\xc0\x7e\x07\x27\x9b\x06\x3c\xfb\xc6\ +\x5c\x27\xb8\xdd\x7c\x08\xfd\x2b\x1c\xd2\x86\xc4\x5a\x7f\x27\xe8\ +\xab\x60\xbe\xa4\xab\x78\xca\x28\x21\x8c\x1a\x13\xdb\x93\x35\x36\ +\xc4\x69\xf1\x42\x62\x52\x90\xc9\x5d\x22\x0e\xfe\xf2\x40\x6a\xf1\ +\x72\x4f\x90\xaf\x34\x2a\xb3\xdc\xb9\x9d\xf8\xaa\xb1\x3c\x40\xd8\ +\x7c\x80\xf0\x18\x72\xe4\x96\x42\x65\x2e\x65\x94\x00\x88\xa0\xaa\ +\x40\x3f\x3e\x94\xca\x3a\x33\x73\x31\x20\x06\xdc\x2e\xca\xb5\xfd\ +\x58\x6c\xf5\x45\x21\xdc\x6f\xb0\x26\xa7\x14\xac\x0a\x7a\xd7\xe5\ +\x8a\x55\x14\x13\xd0\xf6\xeb\x8d\xa1\x7d\x09\x34\x1d\xf0\xda\xb8\ +\xc4\x79\xaa\x72\x52\x4f\x5d\xf6\x1f\x4f\x4c\x3c\x3b\xd5\xa3\x89\ +\xff\xd5\xfb\x38\xc0\xd6\xa3\xae\x78\x5d\xbd\x42\x93\x47\x5e\x84\ +\xd7\xb9\xc4\x2a\x80\xb7\x5d\xd9\xb6\x35\xdb\xc4\xe2\x00\x28\x56\ +\x48\xa0\x5f\x89\xba\xf8\x9d\xf2\x44\x1e\x8c\x78\x82\x36\xaa\x63\ +\xa2\x80\x05\x36\x23\x23\xcd\x92\x9f\xa8\x54\x7c\x40\x9d\xfa\xe2\ +\x60\x96\xea\x5c\xf1\x14\x1f\x3d\xce\x42\x92\xba\xaa\x2a\xa4\xd7\ +\xdf\x0f\x0a\x16\x54\x03\x4a\x54\x7b\x63\x4a\xbb\x9d\x77\x51\xb7\ +\x6c\x95\x2a\xe0\x6b\xfe\x4b\x78\x64\x24\x15\xdb\xd4\x6f\xf4\x60\ +\x57\xff\xd6\xfb\x3d\x51\xd7\x7f\x96\x78\x53\xd4\x2f\x24\x71\x24\ +\x6c\x69\xd3\x01\xd9\x52\x8d\x6e\x4b\x8b\x7d\x1b\x51\xbb\xb3\xa1\ +\xba\x86\x12\x6d\xc1\x1b\x06\x62\x00\x34\xf6\xad\x72\x32\x91\x11\ +\x24\x26\x31\x12\x90\x05\xe2\xba\x66\x87\xe6\x68\xee\x06\xaa\x35\ +\x3b\xc9\xae\x39\x09\x24\x32\x48\xc5\x18\x1e\xa2\x84\xd2\x9e\xd8\ +\x80\x40\x07\xab\x74\xa2\x39\x3d\xe2\xd4\xb9\x86\x27\x91\x78\x34\ +\x88\xae\xc9\xe0\x58\x54\x8c\xc8\xc9\xb5\x17\x16\x2a\xc6\x87\xae\ +\xf4\x34\xca\xec\xb3\x52\x63\xc7\x7a\x6e\x7b\xe2\x16\xd4\x4c\xbd\ +\x87\x5c\xb0\x06\x04\xb4\x26\x00\xd0\xb6\xfe\x03\x1e\x04\x71\xaf\ +\xf5\x96\x94\xaf\xd1\x80\xc1\x22\x6a\xab\x29\x24\x50\x8e\xbb\xe4\ +\x08\xa6\x56\xa6\x25\x23\x9a\x92\x79\x12\x29\x91\xa5\x7f\xff\xd7\ +\xfb\x3b\xd0\x50\x1a\x0f\xc7\x3c\x2a\xde\xa1\x50\x50\xfb\xf5\xc4\ +\xab\xa4\x55\x28\x41\x5e\x4a\xc0\x86\x53\xd0\x82\x28\x41\xc6\x04\ +\x83\x61\x05\x0f\x6e\xf6\xd1\x47\xe9\xc3\x61\x46\xaf\xd9\x67\xe4\ +\x83\xe8\xa5\x4f\xdf\x99\x7e\x2e\x21\xbf\x0e\xfe\xfd\xbf\x1f\x16\ +\x24\x4c\xf5\x54\x53\x23\x33\x99\x00\x24\xb6\xd4\x1e\xd9\x8b\x93\ +\x27\x19\xbe\xac\x80\xa6\x85\x6a\x46\xd5\x34\x60\xbd\xc7\xcf\x01\ +\xe4\x94\x35\xc1\x22\x83\xb9\xe9\x92\xc7\xbb\x19\x30\x2f\x38\xf9\ +\xc2\xc7\xca\x76\x42\x7b\xa0\xd3\x5c\x4b\x51\x6d\x6a\x86\x8d\x21\ +\x1d\x6a\x7f\x65\x45\x7a\xe5\xb2\x98\x80\xf3\x63\x08\x19\x97\xcf\ +\xf2\xfe\x73\xf9\xa6\xe6\xea\x96\x91\x43\x6b\x6b\x5f\x86\x31\x0f\ +\x30\x07\xbb\x31\xa9\xca\x8c\xe6\x7a\xb7\x8c\x31\x0f\x52\xf2\x6f\ +\xe6\x3c\xfa\xc4\xf1\x58\xea\xf0\xa4\x72\xcc\x42\xc5\x73\x10\x2a\ +\x39\x1e\x81\x94\x93\x4a\xf8\x8c\x11\xcc\x41\xa9\x35\xcf\x10\xab\ +\x0f\x64\x8d\x8a\xb0\x27\xa5\x77\x19\x74\xe3\xb3\x54\x64\x8d\xf4\ +\x96\xb5\xed\x4e\x99\x8e\xdc\xff\x00\xff\xd0\xfb\x34\xca\xdb\x1e\ +\xfd\xc6\x78\x43\xd4\xb6\x8c\x41\x5a\x91\xd6\xa7\x24\x82\xa8\x4f\ +\x26\x00\x12\x40\xaf\xb0\xdb\x02\xaf\xf8\x54\x6f\x40\x72\x2a\xb4\ +\x02\xcd\x55\x0d\x41\xd4\xf8\x7b\xe2\x02\x57\x15\xa7\x41\xd7\xae\ +\x1e\x88\x43\xbc\x6d\x2b\x2d\x0d\x46\xe3\x6c\xb3\x19\x63\x37\xcb\ +\xbf\x99\xb6\x37\x3a\x8f\x9a\x65\x88\x82\xd6\xd6\xa1\x62\x44\xeb\ +\x40\x00\x3f\x89\x39\x8b\x92\x77\x37\x37\x0c\x00\xc6\x12\x4b\x1f\ +\x2c\x8a\x46\x1a\x1d\x9b\x75\xf0\xcb\x2c\xc4\x30\x20\x5b\x21\x87\ +\xcb\x32\x59\xdc\x45\x3c\x51\xb2\x0d\x89\xa7\x6a\x66\x2c\xf3\x71\ +\x36\x08\x3e\x85\xd2\x7d\x5b\x8d\x2e\xd2\x69\x7f\xbd\x31\x81\x21\ +\xf1\x23\xbe\x6c\x71\x4a\xf1\x82\x5d\x7c\xc5\x4a\x93\x7e\x27\xd3\ +\xfa\x32\xbe\xad\x8f\xff\xd1\xfb\x39\x2d\x06\xfc\x4e\x78\x43\xd4\ +\x30\x2f\x32\x6b\x5e\x65\xb0\xd4\xf4\xfb\x2d\x0b\x46\x8b\x51\x8a\ +\x78\xda\x7b\xb9\xa6\x76\x50\x15\x5b\x8f\x08\xf8\xfe\xd6\xd5\xa9\ +\xf6\xc6\x79\x04\x06\xec\xa3\x8c\xcb\xab\x3f\xb5\x76\x78\x91\x9d\ +\x0a\x3d\x01\x74\x3d\x41\x22\xb4\x3e\xe3\x24\x46\xec\x02\xb9\x41\ +\xb9\x1d\x70\x14\xb6\xa0\x70\x55\x0c\x76\xdf\x7f\xd7\x86\x90\xef\ +\x87\xa7\x8f\x51\x80\xec\x97\x72\xe2\x00\x34\xc3\x19\x20\x87\x99\ +\x79\xc3\xcb\x6b\x75\xa8\x26\xab\x14\x6c\xde\xb5\x04\xe5\x77\x2a\ +\xe0\x01\x53\xec\x72\x59\xf4\xfc\x51\xe3\x8f\xc7\xcb\xf6\x16\xec\ +\x19\xab\xd2\x51\x5a\x46\x86\x84\xa7\xab\x0e\xe2\x82\x94\xa8\xda\ +\x9e\x1f\x2c\xc0\xe3\x32\x3c\x37\xbb\x71\xa1\xbb\x27\x6d\x01\xae\ +\x5c\x45\x14\x7c\x98\xec\x06\xd4\x1f\x4f\x86\x43\x49\xa3\x9e\x4c\ +\xfc\x11\xde\xcf\xf6\xb0\xc9\xa9\x88\x8d\x94\xcf\xd2\x8a\x08\xe2\ +\xb4\x82\x8f\x1d\xba\x88\xc3\xff\x00\x37\x11\xc4\x9f\xa6\x99\xb8\ +\xcd\xc1\x13\xc3\x0e\x43\x6f\x96\xdf\x6f\x37\x06\x16\x77\x3d\x55\ +\x39\x1a\xd3\x8f\x4d\xa9\x98\xf6\xdd\x4f\xff\xd2\xfb\x3c\x69\xc8\ +\xf5\x23\xbe\x78\x4e\xcf\x50\xd0\xe4\x5c\x7a\x5e\xa2\xb5\x0e\xc9\ +\xe1\xf4\x54\xe4\xa3\x7d\x11\x2a\xea\xbd\x00\xe3\x50\x41\xf6\xc8\ +\xa5\x78\xe7\xe1\x51\xf4\x62\x50\xb8\xd6\x83\xae\x05\x51\x25\xb9\ +\x8a\x83\xf3\xed\x85\x2b\x8f\x2a\x0c\x21\x0e\x53\x74\x18\x9b\x55\ +\xe4\xc3\xed\x03\x4e\x05\x7b\xf2\xe5\xb5\x3e\x79\x93\xa7\x39\x2f\ +\xd1\xf1\xee\xf8\xf4\x61\x3e\x1a\xdd\x5e\xda\xea\xdc\x90\x65\xd3\ +\x14\x4c\x2b\xc8\x24\xd4\x42\x7c\x77\xe4\x47\xdf\x95\x9c\xda\x7e\ +\x2b\x9e\x3b\x3b\xdd\x48\x81\xfa\x7e\xc2\x89\x47\x2d\x7d\x5b\x7b\ +\x95\x27\x9f\x50\x96\x29\xbe\xa9\x64\x96\xd6\xe1\x7f\x7d\xe9\xba\ +\xbb\xf1\xef\x53\xca\xb4\xf1\xa0\xc9\xe3\x99\x9c\x25\xe1\x44\x46\ +\x35\xbd\x6f\x2a\xeb\x77\xbf\xbe\x80\x0d\x62\x20\x11\xc4\x49\x3e\ +\x69\x64\x03\xe2\x1c\x8f\xc5\xe1\x94\x1a\xa7\x21\x19\xf0\xd4\x65\ +\x69\x7f\xff\xd9\ +" + +qt_resource_name = b"\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x0a\ +\x0c\x9d\x6c\x07\ +\x00\x63\ +\x00\x68\x00\x65\x00\x65\x00\x73\x00\x65\x00\x2e\x00\x6a\x00\x70\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ +\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/graphicsview/diagramscene/diagramscene.py b/examples/widgets/graphicsview/diagramscene/diagramscene.py new file mode 100755 index 0000000..cd5891e --- /dev/null +++ b/examples/widgets/graphicsview/diagramscene/diagramscene.py @@ -0,0 +1,825 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +import math + +from PySide2 import QtCore, QtGui, QtWidgets + +import diagramscene_rc + + +class Arrow(QtWidgets.QGraphicsLineItem): + def __init__(self, startItem, endItem, parent=None, scene=None): + super(Arrow, self).__init__(parent, scene) + + self.arrowHead = QtGui.QPolygonF() + + self.myStartItem = startItem + self.myEndItem = endItem + self.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable, True) + self.myColor = QtCore.Qt.black + self.setPen(QtGui.QPen(self.myColor, 2, QtCore.Qt.SolidLine, + QtCore.Qt.RoundCap, QtCore.Qt.RoundJoin)) + + def setColor(self, color): + self.myColor = color + + def startItem(self): + return self.myStartItem + + def endItem(self): + return self.myEndItem + + def boundingRect(self): + extra = (self.pen().width() + 20) / 2.0 + p1 = self.line().p1() + p2 = self.line().p2() + return QtCore.QRectF(p1, QtCore.QSizeF(p2.x() - p1.x(), p2.y() - p1.y())).normalized().adjusted(-extra, -extra, extra, extra) + + def shape(self): + path = super(Arrow, self).shape() + path.addPolygon(self.arrowHead) + return path + + def updatePosition(self): + line = QtCore.QLineF(self.mapFromItem(self.myStartItem, 0, 0), self.mapFromItem(self.myEndItem, 0, 0)) + self.setLine(line) + + def paint(self, painter, option, widget=None): + if (self.myStartItem.collidesWithItem(self.myEndItem)): + return + + myStartItem = self.myStartItem + myEndItem = self.myEndItem + myColor = self.myColor + myPen = self.pen() + myPen.setColor(self.myColor) + arrowSize = 20.0 + painter.setPen(myPen) + painter.setBrush(self.myColor) + + centerLine = QtCore.QLineF(myStartItem.pos(), myEndItem.pos()) + endPolygon = myEndItem.polygon() + p1 = endPolygon.at(0) + myEndItem.pos() + + intersectPoint = QtCore.QPointF() + for i in endPolygon: + p2 = i + myEndItem.pos() + polyLine = QtCore.QLineF(p1, p2) + intersectType, intersectPoint = polyLine.intersect(centerLine) + if intersectType == QtCore.QLineF.BoundedIntersection: + break + p1 = p2 + + self.setLine(QtCore.QLineF(intersectPoint, myStartItem.pos())) + line = self.line() + + angle = math.acos(line.dx() / line.length()) + if line.dy() >= 0: + angle = (math.pi * 2.0) - angle + + arrowP1 = line.p1() + QtCore.QPointF(math.sin(angle + math.pi / 3.0) * arrowSize, + math.cos(angle + math.pi / 3) * arrowSize) + arrowP2 = line.p1() + QtCore.QPointF(math.sin(angle + math.pi - math.pi / 3.0) * arrowSize, + math.cos(angle + math.pi - math.pi / 3.0) * arrowSize) + + self.arrowHead.clear() + for point in [line.p1(), arrowP1, arrowP2]: + self.arrowHead.append(point) + + painter.drawLine(line) + painter.drawPolygon(self.arrowHead) + if self.isSelected(): + painter.setPen(QtGui.QPen(myColor, 1, QtCore.Qt.DashLine)) + myLine = QtCore.QLineF(line) + myLine.translate(0, 4.0) + painter.drawLine(myLine) + myLine.translate(0,-8.0) + painter.drawLine(myLine) + + +class DiagramTextItem(QtWidgets.QGraphicsTextItem): + lostFocus = QtCore.Signal(QtWidgets.QGraphicsTextItem) + + selectedChange = QtCore.Signal(QtWidgets.QGraphicsItem) + + def __init__(self, parent=None, scene=None): + super(DiagramTextItem, self).__init__(parent, scene) + + self.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable) + self.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable) + + def itemChange(self, change, value): + if change == QtWidgets.QGraphicsItem.ItemSelectedChange: + self.selectedChange.emit(self) + return value + + def focusOutEvent(self, event): + self.setTextInteractionFlags(QtCore.Qt.NoTextInteraction) + self.lostFocus.emit(self) + super(DiagramTextItem, self).focusOutEvent(event) + + def mouseDoubleClickEvent(self, event): + if self.textInteractionFlags() == QtCore.Qt.NoTextInteraction: + self.setTextInteractionFlags(QtCore.Qt.TextEditorInteraction) + super(DiagramTextItem, self).mouseDoubleClickEvent(event) + + +class DiagramItem(QtWidgets.QGraphicsPolygonItem): + Step, Conditional, StartEnd, Io = range(4) + + def __init__(self, diagramType, contextMenu, parent=None, scene=None): + super(DiagramItem, self).__init__(parent, scene) + + self.arrows = [] + + self.diagramType = diagramType + self.myContextMenu = contextMenu + + path = QtGui.QPainterPath() + if self.diagramType == self.StartEnd: + path.moveTo(200, 50) + path.arcTo(150, 0, 50, 50, 0, 90) + path.arcTo(50, 0, 50, 50, 90, 90) + path.arcTo(50, 50, 50, 50, 180, 90) + path.arcTo(150, 50, 50, 50, 270, 90) + path.lineTo(200, 25) + self.myPolygon = path.toFillPolygon() + elif self.diagramType == self.Conditional: + self.myPolygon = QtGui.QPolygonF([ + QtCore.QPointF(-100, 0), QtCore.QPointF(0, 100), + QtCore.QPointF(100, 0), QtCore.QPointF(0, -100), + QtCore.QPointF(-100, 0)]) + elif self.diagramType == self.Step: + self.myPolygon = QtGui.QPolygonF([ + QtCore.QPointF(-100, -100), QtCore.QPointF(100, -100), + QtCore.QPointF(100, 100), QtCore.QPointF(-100, 100), + QtCore.QPointF(-100, -100)]) + else: + self.myPolygon = QtGui.QPolygonF([ + QtCore.QPointF(-120, -80), QtCore.QPointF(-70, 80), + QtCore.QPointF(120, 80), QtCore.QPointF(70, -80), + QtCore.QPointF(-120, -80)]) + + self.setPolygon(self.myPolygon) + self.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable, True) + self.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable, True) + + def removeArrow(self, arrow): + try: + self.arrows.remove(arrow) + except ValueError: + pass + + def removeArrows(self): + for arrow in self.arrows[:]: + arrow.startItem().removeArrow(arrow) + arrow.endItem().removeArrow(arrow) + self.scene().removeItem(arrow) + + def addArrow(self, arrow): + self.arrows.append(arrow) + + def image(self): + pixmap = QtGui.QPixmap(250, 250) + pixmap.fill(QtCore.Qt.transparent) + painter = QtGui.QPainter(pixmap) + painter.setPen(QtGui.QPen(QtCore.Qt.black, 8)) + painter.translate(125, 125) + painter.drawPolyline(self.myPolygon) + return pixmap + + def contextMenuEvent(self, event): + self.scene().clearSelection() + self.setSelected(True) + self.myContextMenu.exec_(event.screenPos()) + + def itemChange(self, change, value): + if change == QtWidgets.QGraphicsItem.ItemPositionChange: + for arrow in self.arrows: + arrow.updatePosition() + + return value + + +class DiagramScene(QtWidgets.QGraphicsScene): + InsertItem, InsertLine, InsertText, MoveItem = range(4) + + itemInserted = QtCore.Signal(DiagramItem) + + textInserted = QtCore.Signal(QtWidgets.QGraphicsTextItem) + + itemSelected = QtCore.Signal(QtWidgets.QGraphicsItem) + + def __init__(self, itemMenu, parent=None): + super(DiagramScene, self).__init__(parent) + + self.myItemMenu = itemMenu + self.myMode = self.MoveItem + self.myItemType = DiagramItem.Step + self.line = None + self.textItem = None + self.myItemColor = QtCore.Qt.white + self.myTextColor = QtCore.Qt.black + self.myLineColor = QtCore.Qt.black + self.myFont = QtGui.QFont() + + def setLineColor(self, color): + self.myLineColor = color + if self.isItemChange(Arrow): + item = self.selectedItems()[0] + item.setColor(self.myLineColor) + self.update() + + def setTextColor(self, color): + self.myTextColor = color + if self.isItemChange(DiagramTextItem): + item = self.selectedItems()[0] + item.setDefaultTextColor(self.myTextColor) + + def setItemColor(self, color): + self.myItemColor = color + if self.isItemChange(DiagramItem): + item = self.selectedItems()[0] + item.setBrush(self.myItemColor) + + def setFont(self, font): + self.myFont = font + if self.isItemChange(DiagramTextItem): + item = self.selectedItems()[0] + item.setFont(self.myFont) + + def setMode(self, mode): + self.myMode = mode + + def setItemType(self, type): + self.myItemType = type + + def editorLostFocus(self, item): + cursor = item.textCursor() + cursor.clearSelection() + item.setTextCursor(cursor) + + if not item.toPlainText(): + self.removeItem(item) + item.deleteLater() + + def mousePressEvent(self, mouseEvent): + if (mouseEvent.button() != QtCore.Qt.LeftButton): + return + + if self.myMode == self.InsertItem: + item = DiagramItem(self.myItemType, self.myItemMenu) + item.setBrush(self.myItemColor) + self.addItem(item) + item.setPos(mouseEvent.scenePos()) + self.itemInserted.emit(item) + elif self.myMode == self.InsertLine: + self.line = QtWidgets.QGraphicsLineItem(QtCore.QLineF(mouseEvent.scenePos(), + mouseEvent.scenePos())) + self.line.setPen(QtGui.QPen(self.myLineColor, 2)) + self.addItem(self.line) + elif self.myMode == self.InsertText: + textItem = DiagramTextItem() + textItem.setFont(self.myFont) + textItem.setTextInteractionFlags(QtCore.Qt.TextEditorInteraction) + textItem.setZValue(1000.0) + textItem.lostFocus.connect(self.editorLostFocus) + textItem.selectedChange.connect(self.itemSelected) + self.addItem(textItem) + textItem.setDefaultTextColor(self.myTextColor) + textItem.setPos(mouseEvent.scenePos()) + self.textInserted.emit(textItem) + + super(DiagramScene, self).mousePressEvent(mouseEvent) + + def mouseMoveEvent(self, mouseEvent): + if self.myMode == self.InsertLine and self.line: + newLine = QtCore.QLineF(self.line.line().p1(), mouseEvent.scenePos()) + self.line.setLine(newLine) + elif self.myMode == self.MoveItem: + super(DiagramScene, self).mouseMoveEvent(mouseEvent) + + def mouseReleaseEvent(self, mouseEvent): + if self.line and self.myMode == self.InsertLine: + startItems = self.items(self.line.line().p1()) + if len(startItems) and startItems[0] == self.line: + startItems.pop(0) + endItems = self.items(self.line.line().p2()) + if len(endItems) and endItems[0] == self.line: + endItems.pop(0) + + self.removeItem(self.line) + self.line = None + + if len(startItems) and len(endItems) and \ + isinstance(startItems[0], DiagramItem) and \ + isinstance(endItems[0], DiagramItem) and \ + startItems[0] != endItems[0]: + startItem = startItems[0] + endItem = endItems[0] + arrow = Arrow(startItem, endItem) + arrow.setColor(self.myLineColor) + startItem.addArrow(arrow) + endItem.addArrow(arrow) + arrow.setZValue(-1000.0) + self.addItem(arrow) + arrow.updatePosition() + + self.line = None + super(DiagramScene, self).mouseReleaseEvent(mouseEvent) + + def isItemChange(self, type): + for item in self.selectedItems(): + if isinstance(item, type): + return True + return False + + +class MainWindow(QtWidgets.QMainWindow): + InsertTextButton = 10 + + def __init__(self): + super(MainWindow, self).__init__() + + self.createActions() + self.createMenus() + self.createToolBox() + + self.scene = DiagramScene(self.itemMenu) + self.scene.setSceneRect(QtCore.QRectF(0, 0, 5000, 5000)) + self.scene.itemInserted.connect(self.itemInserted) + self.scene.textInserted.connect(self.textInserted) + self.scene.itemSelected.connect(self.itemSelected) + + self.createToolbars() + + layout = QtWidgets.QHBoxLayout() + layout.addWidget(self.toolBox) + self.view = QtWidgets.QGraphicsView(self.scene) + layout.addWidget(self.view) + + self.widget = QtWidgets.QWidget() + self.widget.setLayout(layout) + + self.setCentralWidget(self.widget) + self.setWindowTitle("Diagramscene") + + def backgroundButtonGroupClicked(self, button): + buttons = self.backgroundButtonGroup.buttons() + for myButton in buttons: + if myButton != button: + button.setChecked(False) + + text = button.text() + if text == "Blue Grid": + self.scene.setBackgroundBrush(QtGui.QBrush(QtGui.QPixmap(':/images/background1.png'))) + elif text == "White Grid": + self.scene.setBackgroundBrush(QtGui.QBrush(QtGui.QPixmap(':/images/background2.png'))) + elif text == "Gray Grid": + self.scene.setBackgroundBrush(QtGui.QBrush(QtGui.QPixmap(':/images/background3.png'))) + else: + self.scene.setBackgroundBrush(QtGui.QBrush(QtGui.QPixmap(':/images/background4.png'))) + + self.scene.update() + self.view.update() + + def buttonGroupClicked(self, id): + buttons = self.buttonGroup.buttons() + for button in buttons: + if self.buttonGroup.button(id) != button: + button.setChecked(False) + + if id == self.InsertTextButton: + self.scene.setMode(DiagramScene.InsertText) + else: + self.scene.setItemType(id) + self.scene.setMode(DiagramScene.InsertItem) + + def deleteItem(self): + for item in self.scene.selectedItems(): + if isinstance(item, DiagramItem): + item.removeArrows() + self.scene.removeItem(item) + + def pointerGroupClicked(self, i): + self.scene.setMode(self.pointerTypeGroup.checkedId()) + + def bringToFront(self): + if not self.scene.selectedItems(): + return + + selectedItem = self.scene.selectedItems()[0] + overlapItems = selectedItem.collidingItems() + + zValue = 0 + for item in overlapItems: + if (item.zValue() >= zValue and isinstance(item, DiagramItem)): + zValue = item.zValue() + 0.1 + selectedItem.setZValue(zValue) + + def sendToBack(self): + if not self.scene.selectedItems(): + return + + selectedItem = self.scene.selectedItems()[0] + overlapItems = selectedItem.collidingItems() + + zValue = 0 + for item in overlapItems: + if (item.zValue() <= zValue and isinstance(item, DiagramItem)): + zValue = item.zValue() - 0.1 + selectedItem.setZValue(zValue) + + def itemInserted(self, item): + self.pointerTypeGroup.button(DiagramScene.MoveItem).setChecked(True) + self.scene.setMode(self.pointerTypeGroup.checkedId()) + self.buttonGroup.button(item.diagramType).setChecked(False) + + def textInserted(self, item): + self.buttonGroup.button(self.InsertTextButton).setChecked(False) + self.scene.setMode(self.pointerTypeGroup.checkedId()) + + def currentFontChanged(self, font): + self.handleFontChange() + + def fontSizeChanged(self, font): + self.handleFontChange() + + def sceneScaleChanged(self, scale): + newScale = int(scale[:-1]) / 100.0 + oldMatrix = self.view.matrix() + self.view.resetMatrix() + self.view.translate(oldMatrix.dx(), oldMatrix.dy()) + self.view.scale(newScale, newScale) + + def textColorChanged(self): + self.textAction = self.sender() + self.fontColorToolButton.setIcon(self.createColorToolButtonIcon( + ':/images/textpointer.png', + QtGui.QColor(self.textAction.data()))) + self.textButtonTriggered() + + def itemColorChanged(self): + self.fillAction = self.sender() + self.fillColorToolButton.setIcon(self.createColorToolButtonIcon( + ':/images/floodfill.png', + QtGui.QColor(self.fillAction.data()))) + self.fillButtonTriggered() + + def lineColorChanged(self): + self.lineAction = self.sender() + self.lineColorToolButton.setIcon(self.createColorToolButtonIcon( + ':/images/linecolor.png', + QtGui.QColor(self.lineAction.data()))) + self.lineButtonTriggered() + + def textButtonTriggered(self): + self.scene.setTextColor(QtGui.QColor(self.textAction.data())) + + def fillButtonTriggered(self): + self.scene.setItemColor(QtGui.QColor(self.fillAction.data())) + + def lineButtonTriggered(self): + self.scene.setLineColor(QtGui.QColor(self.lineAction.data())) + + def handleFontChange(self): + font = self.fontCombo.currentFont() + font.setPointSize(int(self.fontSizeCombo.currentText())) + if self.boldAction.isChecked(): + font.setWeight(QtGui.QFont.Bold) + else: + font.setWeight(QtGui.QFont.Normal) + font.setItalic(self.italicAction.isChecked()) + font.setUnderline(self.underlineAction.isChecked()) + + self.scene.setFont(font) + + def itemSelected(self, item): + font = item.font() + color = item.defaultTextColor() + self.fontCombo.setCurrentFont(font) + self.fontSizeCombo.setEditText(str(font.pointSize())) + self.boldAction.setChecked(font.weight() == QtGui.QFont.Bold) + self.italicAction.setChecked(font.italic()) + self.underlineAction.setChecked(font.underline()) + + def about(self): + QtWidgets.QMessageBox.about(self, "About Diagram Scene", + "The Diagram Scene example shows use of the graphics framework.") + + def createToolBox(self): + self.buttonGroup = QtWidgets.QButtonGroup() + self.buttonGroup.setExclusive(False) + self.buttonGroup.buttonClicked[int].connect(self.buttonGroupClicked) + + layout = QtWidgets.QGridLayout() + layout.addWidget(self.createCellWidget("Conditional", DiagramItem.Conditional), + 0, 0) + layout.addWidget(self.createCellWidget("Process", DiagramItem.Step), 0, + 1) + layout.addWidget(self.createCellWidget("Input/Output", DiagramItem.Io), + 1, 0) + + textButton = QtWidgets.QToolButton() + textButton.setCheckable(True) + self.buttonGroup.addButton(textButton, self.InsertTextButton) + textButton.setIcon(QtGui.QIcon(QtGui.QPixmap(':/images/textpointer.png') + .scaled(30, 30))) + textButton.setIconSize(QtCore.QSize(50, 50)) + + textLayout = QtWidgets.QGridLayout() + textLayout.addWidget(textButton, 0, 0, QtCore.Qt.AlignHCenter) + textLayout.addWidget(QtWidgets.QLabel("Text"), 1, 0, + QtCore.Qt.AlignCenter) + textWidget = QtWidgets.QWidget() + textWidget.setLayout(textLayout) + layout.addWidget(textWidget, 1, 1) + + layout.setRowStretch(3, 10) + layout.setColumnStretch(2, 10) + + itemWidget = QtWidgets.QWidget() + itemWidget.setLayout(layout) + + self.backgroundButtonGroup = QtWidgets.QButtonGroup() + self.backgroundButtonGroup.buttonClicked.connect(self.backgroundButtonGroupClicked) + + backgroundLayout = QtWidgets.QGridLayout() + backgroundLayout.addWidget(self.createBackgroundCellWidget("Blue Grid", + ':/images/background1.png'), 0, 0) + backgroundLayout.addWidget(self.createBackgroundCellWidget("White Grid", + ':/images/background2.png'), 0, 1) + backgroundLayout.addWidget(self.createBackgroundCellWidget("Gray Grid", + ':/images/background3.png'), 1, 0) + backgroundLayout.addWidget(self.createBackgroundCellWidget("No Grid", + ':/images/background4.png'), 1, 1) + + backgroundLayout.setRowStretch(2, 10) + backgroundLayout.setColumnStretch(2, 10) + + backgroundWidget = QtWidgets.QWidget() + backgroundWidget.setLayout(backgroundLayout) + + self.toolBox = QtWidgets.QToolBox() + self.toolBox.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Ignored)) + self.toolBox.setMinimumWidth(itemWidget.sizeHint().width()) + self.toolBox.addItem(itemWidget, "Basic Flowchart Shapes") + self.toolBox.addItem(backgroundWidget, "Backgrounds") + + def createActions(self): + self.toFrontAction = QtWidgets.QAction( + QtGui.QIcon(':/images/bringtofront.png'), "Bring to &Front", + self, shortcut="Ctrl+F", statusTip="Bring item to front", + triggered=self.bringToFront) + + self.sendBackAction = QtWidgets.QAction( + QtGui.QIcon(':/images/sendtoback.png'), "Send to &Back", self, + shortcut="Ctrl+B", statusTip="Send item to back", + triggered=self.sendToBack) + + self.deleteAction = QtWidgets.QAction(QtGui.QIcon(':/images/delete.png'), + "&Delete", self, shortcut="Delete", + statusTip="Delete item from diagram", + triggered=self.deleteItem) + + self.exitAction = QtWidgets.QAction("E&xit", self, shortcut="Ctrl+X", + statusTip="Quit Scenediagram example", triggered=self.close) + + self.boldAction = QtWidgets.QAction(QtGui.QIcon(':/images/bold.png'), + "Bold", self, checkable=True, shortcut="Ctrl+B", + triggered=self.handleFontChange) + + self.italicAction = QtWidgets.QAction(QtGui.QIcon(':/images/italic.png'), + "Italic", self, checkable=True, shortcut="Ctrl+I", + triggered=self.handleFontChange) + + self.underlineAction = QtWidgets.QAction( + QtGui.QIcon(':/images/underline.png'), "Underline", self, + checkable=True, shortcut="Ctrl+U", + triggered=self.handleFontChange) + + self.aboutAction = QtWidgets.QAction("A&bout", self, shortcut="Ctrl+B", + triggered=self.about) + + def createMenus(self): + self.fileMenu = self.menuBar().addMenu("&File") + self.fileMenu.addAction(self.exitAction) + + self.itemMenu = self.menuBar().addMenu("&Item") + self.itemMenu.addAction(self.deleteAction) + self.itemMenu.addSeparator() + self.itemMenu.addAction(self.toFrontAction) + self.itemMenu.addAction(self.sendBackAction) + + self.aboutMenu = self.menuBar().addMenu("&Help") + self.aboutMenu.addAction(self.aboutAction) + + def createToolbars(self): + self.editToolBar = self.addToolBar("Edit") + self.editToolBar.addAction(self.deleteAction) + self.editToolBar.addAction(self.toFrontAction) + self.editToolBar.addAction(self.sendBackAction) + + self.fontCombo = QtWidgets.QFontComboBox() + self.fontCombo.currentFontChanged.connect(self.currentFontChanged) + + self.fontSizeCombo = QtWidgets.QComboBox() + self.fontSizeCombo.setEditable(True) + for i in range(8, 30, 2): + self.fontSizeCombo.addItem(str(i)) + validator = QtGui.QIntValidator(2, 64, self) + self.fontSizeCombo.setValidator(validator) + self.fontSizeCombo.currentIndexChanged.connect(self.fontSizeChanged) + + self.fontColorToolButton = QtWidgets.QToolButton() + self.fontColorToolButton.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup) + self.fontColorToolButton.setMenu( + self.createColorMenu(self.textColorChanged, QtCore.Qt.black)) + self.textAction = self.fontColorToolButton.menu().defaultAction() + self.fontColorToolButton.setIcon( + self.createColorToolButtonIcon(':/images/textpointer.png', + QtCore.Qt.black)) + self.fontColorToolButton.setAutoFillBackground(True) + self.fontColorToolButton.clicked.connect(self.textButtonTriggered) + + self.fillColorToolButton = QtWidgets.QToolButton() + self.fillColorToolButton.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup) + self.fillColorToolButton.setMenu( + self.createColorMenu(self.itemColorChanged, QtCore.Qt.white)) + self.fillAction = self.fillColorToolButton.menu().defaultAction() + self.fillColorToolButton.setIcon( + self.createColorToolButtonIcon(':/images/floodfill.png', + QtCore.Qt.white)) + self.fillColorToolButton.clicked.connect(self.fillButtonTriggered) + + self.lineColorToolButton = QtWidgets.QToolButton() + self.lineColorToolButton.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup) + self.lineColorToolButton.setMenu( + self.createColorMenu(self.lineColorChanged, QtCore.Qt.black)) + self.lineAction = self.lineColorToolButton.menu().defaultAction() + self.lineColorToolButton.setIcon( + self.createColorToolButtonIcon(':/images/linecolor.png', + QtCore.Qt.black)) + self.lineColorToolButton.clicked.connect(self.lineButtonTriggered) + + self.textToolBar = self.addToolBar("Font") + self.textToolBar.addWidget(self.fontCombo) + self.textToolBar.addWidget(self.fontSizeCombo) + self.textToolBar.addAction(self.boldAction) + self.textToolBar.addAction(self.italicAction) + self.textToolBar.addAction(self.underlineAction) + + self.colorToolBar = self.addToolBar("Color") + self.colorToolBar.addWidget(self.fontColorToolButton) + self.colorToolBar.addWidget(self.fillColorToolButton) + self.colorToolBar.addWidget(self.lineColorToolButton) + + pointerButton = QtWidgets.QToolButton() + pointerButton.setCheckable(True) + pointerButton.setChecked(True) + pointerButton.setIcon(QtGui.QIcon(':/images/pointer.png')) + linePointerButton = QtWidgets.QToolButton() + linePointerButton.setCheckable(True) + linePointerButton.setIcon(QtGui.QIcon(':/images/linepointer.png')) + + self.pointerTypeGroup = QtWidgets.QButtonGroup() + self.pointerTypeGroup.addButton(pointerButton, DiagramScene.MoveItem) + self.pointerTypeGroup.addButton(linePointerButton, + DiagramScene.InsertLine) + self.pointerTypeGroup.buttonClicked[int].connect(self.pointerGroupClicked) + + self.sceneScaleCombo = QtWidgets.QComboBox() + self.sceneScaleCombo.addItems(["50%", "75%", "100%", "125%", "150%"]) + self.sceneScaleCombo.setCurrentIndex(2) + self.sceneScaleCombo.currentIndexChanged[str].connect(self.sceneScaleChanged) + + self.pointerToolbar = self.addToolBar("Pointer type") + self.pointerToolbar.addWidget(pointerButton) + self.pointerToolbar.addWidget(linePointerButton) + self.pointerToolbar.addWidget(self.sceneScaleCombo) + + def createBackgroundCellWidget(self, text, image): + button = QtWidgets.QToolButton() + button.setText(text) + button.setIcon(QtGui.QIcon(image)) + button.setIconSize(QtCore.QSize(50, 50)) + button.setCheckable(True) + self.backgroundButtonGroup.addButton(button) + + layout = QtWidgets.QGridLayout() + layout.addWidget(button, 0, 0, QtCore.Qt.AlignHCenter) + layout.addWidget(QtWidgets.QLabel(text), 1, 0, QtCore.Qt.AlignCenter) + + widget = QtWidgets.QWidget() + widget.setLayout(layout) + + return widget + + def createCellWidget(self, text, diagramType): + item = DiagramItem(diagramType, self.itemMenu) + icon = QtGui.QIcon(item.image()) + + button = QtWidgets.QToolButton() + button.setIcon(icon) + button.setIconSize(QtCore.QSize(50, 50)) + button.setCheckable(True) + self.buttonGroup.addButton(button, diagramType) + + layout = QtWidgets.QGridLayout() + layout.addWidget(button, 0, 0, QtCore.Qt.AlignHCenter) + layout.addWidget(QtWidgets.QLabel(text), 1, 0, QtCore.Qt.AlignCenter) + + widget = QtWidgets.QWidget() + widget.setLayout(layout) + + return widget + + def createColorMenu(self, slot, defaultColor): + colors = [QtCore.Qt.black, QtCore.Qt.white, QtCore.Qt.red, QtCore.Qt.blue, QtCore.Qt.yellow] + names = ["black", "white", "red", "blue", "yellow"] + + colorMenu = QtWidgets.QMenu(self) + for color, name in zip(colors, names): + action = QtWidgets.QAction(self.createColorIcon(color), name, self, + triggered=slot) + action.setData(QtGui.QColor(color)) + colorMenu.addAction(action) + if color == defaultColor: + colorMenu.setDefaultAction(action) + return colorMenu + + def createColorToolButtonIcon(self, imageFile, color): + pixmap = QtGui.QPixmap(50, 80) + pixmap.fill(QtCore.Qt.transparent) + painter = QtGui.QPainter(pixmap) + image = QtGui.QPixmap(imageFile) + target = QtCore.QRect(0, 0, 50, 60) + source = QtCore.QRect(0, 0, 42, 42) + painter.fillRect(QtCore.QRect(0, 60, 50, 80), color) + painter.drawPixmap(target, image, source) + painter.end() + + return QtGui.QIcon(pixmap) + + def createColorIcon(self, color): + pixmap = QtGui.QPixmap(20, 20) + painter = QtGui.QPainter(pixmap) + painter.setPen(QtCore.Qt.NoPen) + painter.fillRect(QtCore.QRect(0, 0, 20, 20), color) + painter.end() + + return QtGui.QIcon(pixmap) + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + + mainWindow = MainWindow() + mainWindow.setGeometry(100, 100, 800, 500) + mainWindow.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/graphicsview/diagramscene/diagramscene.qrc b/examples/widgets/graphicsview/diagramscene/diagramscene.qrc new file mode 100644 index 0000000..c4d845e --- /dev/null +++ b/examples/widgets/graphicsview/diagramscene/diagramscene.qrc @@ -0,0 +1,19 @@ + + + images/pointer.png + images/linepointer.png + images/textpointer.png + images/bold.png + images/italic.png + images/underline.png + images/floodfill.png + images/bringtofront.png + images/delete.png + images/sendtoback.png + images/linecolor.png + images/background1.png + images/background2.png + images/background3.png + images/background4.png + + diff --git a/examples/widgets/graphicsview/diagramscene/diagramscene_rc.py b/examples/widgets/graphicsview/diagramscene/diagramscene_rc.py new file mode 100644 index 0000000..d32b488 --- /dev/null +++ b/examples/widgets/graphicsview/diagramscene/diagramscene_rc.py @@ -0,0 +1,445 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Fri Jul 30 17:58:19 2010 +# by: The Resource Compiler for PySide (Qt v4.6.2) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x01\x12\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x0b\x00\x00\x00\x0d\x08\x06\x00\x00\x00\x7f\xf5\x94\x3b\ +\x00\x00\x00\xd9\x49\x44\x41\x54\x28\x53\x7d\x90\x31\x0e\x45\x40\ +\x10\x86\x47\x24\x24\x1a\x0d\x0d\xd1\x22\x51\x70\x80\x6d\x5c\x40\ +\xe7\x3c\x0e\x21\x0a\x47\x71\x19\xb5\x4e\xa9\xc1\x78\x33\xb2\x8b\ +\xf7\xec\xdb\xe4\xcb\x66\x76\xfe\xf9\x67\x76\xc0\x30\x0c\x04\x80\ +\x07\xf4\x66\x59\x16\x26\x49\x82\x9f\x03\xc4\xbe\xef\x94\x3b\x05\ +\x69\x9a\x32\x24\x08\xc3\xf0\x51\x58\xd7\x35\x17\x01\x05\x04\x55\ +\xde\x5d\xe8\x76\x1c\x87\x73\xb6\x6d\xe3\xc3\x59\x0a\xef\x44\x51\ +\xc4\xe2\x20\x08\xf4\xce\xeb\xba\x62\xdb\xb6\x6a\x94\xbe\xef\x4f\ +\xb1\x7c\x28\x8a\x82\xc9\xf3\x1c\x7d\xdf\x67\x03\x21\x04\x0e\xc3\ +\xa0\x4c\x40\xb7\x0d\xd3\x34\x59\xdc\x75\xdd\x25\xfe\x9e\x79\xdb\ +\x36\x9c\xa6\x89\x63\xd9\x21\x8e\x63\x1c\xc7\x11\xd5\xcc\x6f\x1f\ +\x24\x64\xbe\xaa\xaa\xff\xdb\x58\x96\x45\x8d\x46\x5d\x5e\xb7\x41\ +\xcc\xf3\x8c\x4d\xd3\xa0\xcc\x67\x59\x76\x39\x7b\x9e\xa7\x70\x5d\ +\xf7\xe7\xd3\xda\x6d\x48\xa8\xa8\x2c\x4b\xd5\xf1\x00\xd0\xc0\x13\ +\xc8\x06\xaf\x16\x28\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\ +\x82\ +\x00\x00\x00\xf7\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x0b\x00\x00\x00\x0c\x08\x06\x00\x00\x00\xb4\xa9\x47\x9e\ +\x00\x00\x00\xbe\x49\x44\x41\x54\x28\x53\x85\x91\x31\x0e\x40\x40\ +\x10\x45\x57\x4d\x24\x4a\x37\xa1\xa4\x91\x38\x85\x5e\x74\xaa\x3d\ +\x8a\x4e\x54\x7b\x80\xad\x75\x6e\xa0\xd1\x6c\xe7\x12\xc4\x97\x19\ +\xb1\x21\x59\x51\xfc\x62\xfe\xbc\xfc\x99\xcc\x08\x00\x82\x74\x1c\ +\x07\xa6\x69\x82\x10\xc2\x29\xcf\xf3\x2e\xf0\xd6\x38\x8e\xa8\xaa\ +\x8a\x55\x14\x05\x03\x49\x92\x58\xef\x05\x3f\xd5\x75\x1d\xc3\x5a\ +\x6b\xd0\x54\xf2\x9c\x20\x35\xeb\xba\x66\x78\x5d\x57\xdc\xfe\x67\ +\x72\x9a\xa6\x88\xe3\x18\x4f\xcf\x09\x6e\xdb\x06\xdf\xf7\x51\x96\ +\xa5\x5d\xc1\x09\x53\x73\x9e\x67\x5e\x41\x4a\xf9\x9f\x3c\x0c\x03\ +\xc3\x4a\xa9\xff\xe4\xb6\x6d\x19\x5e\x96\xe5\x3f\x39\xcf\x73\x84\ +\x61\x88\x7d\xdf\xdf\xc9\x54\x18\x63\xec\xe1\x49\x41\x10\x20\x8a\ +\x22\x5b\x37\x4d\x03\x9b\xdc\xf7\xfd\xf5\xce\x8f\x57\x67\x59\xc6\ +\x13\x4e\xfa\x57\x56\x58\xe8\x40\xda\xc6\x00\x00\x00\x00\x49\x45\ +\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x00\x72\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x7f\x00\x00\x00\x7f\x01\x03\x00\x00\x00\xfc\x73\x8f\x50\ +\x00\x00\x00\x06\x50\x4c\x54\x45\xff\xff\xff\x00\x00\x00\x55\xc2\ +\xd3\x7e\x00\x00\x00\x27\x49\x44\x41\x54\x48\xc7\x63\x60\x80\x82\ +\x06\x06\x34\x30\x2a\x30\x2a\x30\x2a\x30\x2a\x80\x2a\xf0\x1f\x15\ +\xfc\x1b\x0d\xa0\x51\x81\x51\x81\x51\x01\x22\x05\x00\xd5\x3b\x4e\ +\xf0\x73\xe3\x6f\xe9\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\ +\x82\ +\x00\x00\x01\x25\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\xda\x49\x44\x41\x54\x48\xc7\xed\x94\x41\x0e\ +\x82\x30\x10\x45\x1f\x46\x38\x83\x77\xf0\xfe\x87\xf0\x1a\x5e\x40\ +\xb1\xa5\x74\xa6\x1a\x5c\xb4\x04\x8c\xa2\x11\xca\xc2\xc4\x49\xd8\ +\xd0\xe4\xe5\xf5\xf7\x67\x8a\xb2\x2c\x3b\x16\x4c\x08\xa1\x78\xf5\ +\x7f\x0b\xa0\xaa\xb3\xa0\x55\x55\x4d\x9e\x6d\x58\x69\xfe\xe0\x1f\ +\x06\x6f\x33\x30\xba\x55\xc0\xdd\xed\x0a\x37\x0f\xa1\x05\x75\x20\ +\x96\x62\xb7\xcf\x60\x1c\x5c\x82\x36\xa0\x16\xc4\x66\x8a\x42\xed\ +\x00\xf5\x16\xe4\x92\x09\x2c\x97\x68\x29\x26\x7e\x9a\xcb\xd8\xd7\ +\xe0\xcd\x08\xdc\x64\x02\xbb\xf3\x60\xaa\x39\xc1\xed\x39\x41\xfb\ +\xac\xcd\x00\x7e\xb7\xfe\x3e\x67\x5c\xc7\x8c\x43\x93\xe2\x48\x19\ +\x4f\x2d\xea\x57\x95\xed\x8e\x87\x21\x4b\x49\x96\xbe\x8e\xa6\x92\ +\x1a\x31\xeb\xf1\xfc\x29\x56\xaa\xef\x6b\xb0\x20\xc9\x54\x47\x0f\ +\xf8\x35\xb8\x4d\xd7\x56\x03\xe2\x20\x98\xc7\xaa\xf5\xb7\x98\x05\ +\xd6\xde\xd4\x3e\xf7\x57\x1a\xb8\x3a\x00\x8a\xa5\xcb\x66\x6a\xee\ +\x91\x61\xa9\x66\xc0\x0f\xb5\x5d\x00\x00\x00\x00\x49\x45\x4e\x44\ +\xae\x42\x60\x82\ +\x00\x00\x00\x74\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x7f\x00\x00\x00\x7f\x01\x03\x00\x00\x00\xfc\x73\x8f\x50\ +\x00\x00\x00\x06\x50\x4c\x54\x45\xc0\xc0\xc0\xff\xff\xff\x2b\x69\ +\x87\xb4\x00\x00\x00\x29\x49\x44\x41\x54\x48\x4b\x63\xf8\x0f\x05\ +\x0d\x0c\x50\x30\x2a\x30\x2a\x30\x2a\x30\x2a\x40\xa4\x00\x0c\xd8\ +\x43\xc4\xff\x8d\x0a\x8c\x0a\x8c\x0a\x8c\x0a\x60\x17\x00\x00\x3f\ +\x78\xe4\xb7\xe3\x90\x30\x5f\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ +\x42\x60\x82\ +\x00\x00\x00\xfa\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x0b\x00\x00\x00\x0c\x08\x06\x00\x00\x00\xb4\xa9\x47\x9e\ +\x00\x00\x00\xc1\x49\x44\x41\x54\x28\x53\xcd\x90\x31\x0a\x84\x30\ +\x10\x45\xc7\xce\x56\xb0\xd3\x46\x10\x6f\x60\xe5\x01\xbc\x42\x40\ +\x0b\x9b\x74\x22\x11\xbc\x94\x9d\x27\xd2\x03\x78\x03\x03\x19\xf7\ +\x0f\xb8\xd9\x2c\x6c\xbf\x81\x4f\x66\xde\xfc\x7c\xc8\x50\x1c\xc7\ +\x4c\x44\xa2\x28\x8a\x38\xcf\x73\x7e\x1d\xc2\xfd\xc9\xd3\x34\x65\ +\xd2\x5a\x73\x51\x14\x02\x86\x61\xe0\x79\x9e\xc5\x8c\x1b\x3d\x38\ +\xe6\xe3\x38\x32\x61\xa0\x94\x12\x88\xfa\x5b\xe0\x98\x3b\xe7\x42\ +\x33\xc0\x2f\x33\xea\x7f\x4a\xee\xba\x4e\xcc\xd7\x75\x05\x0f\xd0\ +\x83\xf7\x7d\xef\x93\xb1\x26\xc0\x7d\xdf\x03\xf3\x71\x1c\xc2\x97\ +\x65\xf1\xc9\xeb\xba\x0a\x9c\xa6\x29\x30\x3f\x21\xdb\xb6\xf9\x64\ +\xa8\xae\x6b\x19\x94\x65\xc9\x6d\xdb\x72\x55\x55\xd2\x37\x4d\xc3\ +\xd6\x5a\x9f\xfc\xc8\x18\xc3\x59\x96\x89\x29\x49\x12\xc6\x5f\xce\ +\xf3\x7c\x6f\xe9\x06\x33\x20\x38\xcd\x08\x1e\x78\x76\x00\x00\x00\ +\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x00\x60\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x7f\x00\x00\x00\x7f\x01\x03\x00\x00\x00\xfc\x73\x8f\x50\ +\x00\x00\x00\x03\x50\x4c\x54\x45\xff\xff\xff\xa7\xc4\x1b\xc8\x00\ +\x00\x00\x18\x49\x44\x41\x54\x78\x5e\xed\xc0\x31\x01\x00\x00\x00\ +\xc2\x20\xfb\xa7\x36\xc5\x3e\x58\x0b\x00\xe0\x08\x6f\x00\x01\x01\ +\x3e\xc3\x31\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x00\x8d\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x1b\x00\x00\x00\x1b\x01\x03\x00\x00\x00\xb7\x1a\x66\x16\ +\x00\x00\x00\x06\x50\x4c\x54\x45\xff\xff\xff\x00\x00\x00\x55\xc2\ +\xd3\x7e\x00\x00\x00\x01\x74\x52\x4e\x53\x00\x40\xe6\xd8\x66\x00\ +\x00\x00\x35\x49\x44\x41\x54\x08\x99\x63\x60\xc0\x02\xd8\x1b\x80\ +\x04\xff\x01\x4c\x82\xfd\x01\x48\xba\x00\x44\x58\x80\x08\x19\x10\ +\xc1\x07\xd6\x02\x22\x98\x41\xfa\x18\x41\x0a\x19\xc0\x0a\xeb\x40\ +\x84\x3d\x16\x42\x0e\xdd\x46\x00\xb5\x00\x09\x40\xa3\x31\xbf\x5e\ +\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x03\x3f\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x02\xd1\x49\x44\x41\x54\x38\xcb\x7d\ +\x95\x4b\x68\x53\x41\x14\x86\x93\xe6\xd1\x08\x49\x28\x04\x5b\x17\ +\x05\x35\xee\x5a\xbb\x50\xb2\xb1\xda\x85\x8f\x5d\xb5\xbe\x16\x76\ +\x29\x2d\x42\x49\x57\xed\xce\x8d\x0a\xa2\xe0\xba\xab\x14\x84\x8a\ +\x2b\x51\x44\x45\x17\x0a\x8a\x55\xf1\x01\x1a\xb0\x56\x23\xad\xa2\ +\xc5\xb6\x92\x6a\x95\xbe\x34\xcd\xc3\xe3\x7f\x6e\xce\x64\xe6\x4e\ +\xd2\x16\x3e\xe6\xde\xce\x3f\x7f\x66\xce\x63\xae\x87\x88\x3c\x26\ +\xf8\xf3\x01\x7e\xa8\x07\x01\x50\x67\x6b\x0c\x6d\x9d\xa1\x0d\xf2\ +\xda\xca\x9c\x21\xf2\x8a\x11\x51\x7f\x7f\x5e\x16\x6c\x04\x61\xe0\ +\xaf\x61\xea\x77\xb4\x03\x03\x4a\xdb\x08\x22\xe2\xe1\x35\x85\x8e\ +\xe9\xbf\xa1\x21\x2a\x75\x77\x53\xa1\x2c\x66\x36\x83\x28\xcf\x57\ +\x69\x53\x29\x2a\xf5\xf4\x50\x29\x18\x54\xda\x38\x68\x70\xe6\xcd\ +\xe3\x97\x60\x5a\xec\xed\xa5\x42\x4b\x0b\xe5\xf0\xfe\x5d\x9b\x6f\ +\x55\xe6\xca\xb4\x34\x3c\x4c\xc5\x64\x92\x0a\x6d\x6d\xb4\x8c\xf7\ +\x71\xad\x8d\x3b\x5a\x31\xa6\xd5\x64\x32\xbf\x8a\x9d\xe6\x5a\x5b\ +\xe9\x2f\xde\xff\x80\x05\x30\xed\x5e\x10\xe3\xe7\x02\x4c\xa1\xaf\ +\x68\x27\xc1\x65\x70\xd6\xe3\x29\x8a\xb6\x49\x19\x87\xf8\x1f\x4b\ +\x60\x51\x46\xc5\x2f\xb7\x39\xe5\x61\x9a\x83\xe9\x0a\x4c\x97\xc4\ +\x74\x04\x1c\xd7\x9a\x76\xd0\xac\x8c\x83\x12\x7c\xfa\x0c\xe6\xc4\ +\xf0\xb7\x8c\xcc\x62\x22\x41\x2b\x83\x83\xb4\xdc\xd7\x47\x0b\x30\ +\xe5\xb9\x8c\xec\xf4\x98\x36\xed\x02\x3b\x1c\x2f\x23\xc6\x61\x49\ +\x14\x7d\x04\x33\x20\x2b\x3f\xc2\xfc\x88\xc5\x68\x1e\xf1\xfc\x19\ +\x8f\x3b\xef\xef\x40\x0a\x1c\xd1\xa6\xd8\xb4\x67\x97\x78\x84\xed\ +\xf2\x89\x4a\xa2\x1c\x73\x0e\xc1\x6c\x0d\xde\x8b\xe9\x61\xb7\x69\ +\xbb\x91\x64\xbf\x5d\x9b\x01\x99\xe0\x44\xd1\x0c\x8e\xff\x0d\x3b\ +\x9d\xc2\xb3\xc9\x4b\x70\x41\x9b\x9e\x00\x1d\x95\x6a\x90\xb2\xac\ +\xd5\x4d\x01\x95\xfd\x2c\x62\xfa\x15\xc7\xff\x84\x67\x13\x0e\xc3\ +\x4d\x6d\xdc\x09\xb6\xcb\x9a\x40\x55\xe7\xd9\xc5\x3f\x8f\xec\x4f\ +\x23\x51\x13\x88\x69\x46\x12\xa5\xf8\x00\xd2\xe0\x89\x36\x5f\xdf\ +\x58\x99\xce\xc1\x74\x0a\x25\x95\x41\xf6\xc7\xc4\xe0\x01\x78\x05\ +\xde\x82\x31\x19\xdf\x80\x51\xbb\x31\xec\x50\xa8\xde\xcf\xc2\xf4\ +\x0b\x4c\xc7\x61\xca\xbb\xba\x0f\x2e\x81\xd3\xe0\x2a\x78\x2e\x86\ +\x69\x19\xf9\xc7\x1e\x55\x77\xa8\xdf\xd5\xd2\xb3\xe8\xfd\x49\x98\ +\xa6\x61\xca\x09\xba\x0b\xce\x83\x03\x46\x83\xdc\x03\xcf\xc0\x0b\ +\x49\x22\x8f\x8f\xc1\x35\xf7\xdd\x12\xae\xb4\xf4\x04\x6e\xa9\x0c\ +\x2e\x94\xd7\x48\x16\x2f\xbc\x0d\xce\x81\xfd\xee\xec\x77\x2a\x73\ +\x36\x7b\x2a\x3f\x72\x4b\x36\x90\xd4\x2d\xdd\xe8\x6a\xe9\xd1\x50\ +\x88\x1e\x62\xbc\x0e\xce\x80\x7d\xee\x3a\xed\x90\x24\x31\x74\x47\ +\xc2\x74\x03\x5c\x04\x87\xb4\x76\xb7\xdd\xd2\x4d\x3c\x71\x45\xe2\ +\xb9\xb7\xba\xf8\xd5\x25\x14\x53\x75\x3e\x52\xbe\x78\xe8\xa0\xd6\ +\x1e\x05\x09\xf3\x12\xf2\x49\xd0\xb7\xb1\xe0\xa4\x3e\x52\x97\xb4\ +\xa9\x7d\x6d\x56\x3a\xf4\x94\xd6\xb2\xe9\x1e\xf1\x88\xda\xa5\xd6\ +\xa0\xcc\xe5\x48\x3b\xc1\x96\x35\x2e\xfa\xa8\xcc\x29\x6d\x42\xd6\ +\xea\x8b\xde\xfa\x34\xf1\x82\x4d\x4e\x9c\xca\xe1\x89\xac\xf3\x69\ +\x8a\x88\xa6\x59\xd6\xa8\x53\x79\x6b\x75\x9e\x4f\x3e\x8e\x1b\xec\ +\x0f\xe4\x1a\xda\xa0\x68\xeb\x4d\xed\x7f\x3d\xa9\x97\x96\x02\xf1\ +\x2b\x1c\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x00\x91\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x2a\x00\x00\x00\x2b\x01\x03\x00\x00\x00\x34\x51\x88\xbd\ +\x00\x00\x00\x06\x50\x4c\x54\x45\xff\xff\xff\x00\x00\x00\x55\xc2\ +\xd3\x7e\x00\x00\x00\x01\x74\x52\x4e\x53\x00\x40\xe6\xd8\x66\x00\ +\x00\x00\x39\x49\x44\x41\x54\x18\x57\x63\x60\xc0\x05\x14\x20\x54\ +\x01\x84\xfa\x01\x26\x19\xff\x80\x29\x66\x08\x8f\xfd\x03\x98\xe2\ +\x7f\x00\xa6\xe4\x0f\x80\x29\xfb\x06\x30\x55\x0f\xd1\xf6\x6f\x50\ +\x6b\xe3\x87\x68\x63\x83\x50\x2c\x0c\x84\x00\x00\x91\xca\x1c\x09\ +\xf6\x23\x2a\xfe\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\ +\x00\x00\x00\x70\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x7f\x00\x00\x00\x7f\x01\x03\x00\x00\x00\xfc\x73\x8f\x50\ +\x00\x00\x00\x06\x50\x4c\x54\x45\x00\xff\xff\xff\xff\xff\xb1\xb8\ +\x5e\xa0\x00\x00\x00\x25\x49\x44\x41\x54\x78\x5e\xed\xcc\x21\x12\ +\x00\x00\x04\x00\x41\xff\x7f\x34\x82\x11\x64\x75\x2f\x6e\xb8\xd8\ +\x6a\xca\x0b\x00\x00\xf0\x9d\x01\x00\x40\x03\x94\x98\xeb\xc0\x19\ +\x38\xa1\x84\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x00\xad\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x0f\x00\x00\x00\x18\x02\x03\x00\x00\x00\x58\x6b\x4f\xfa\ +\x00\x00\x00\x09\x50\x4c\x54\x45\xff\xff\xff\xff\xff\xff\x00\x00\ +\x00\x8e\xf4\xc3\xec\x00\x00\x00\x01\x74\x52\x4e\x53\x00\x40\xe6\ +\xd8\x66\x00\x00\x00\x52\x49\x44\x41\x54\x08\x1d\x05\xc1\xb1\x0d\ +\xc2\x30\x14\x05\xc0\x8b\x04\x1b\xd0\x3c\x4f\xe3\x8a\x9a\xe6\x47\ +\x72\x1f\x17\x61\x1a\x57\x9e\x80\x41\xb9\xf3\x82\x40\xeb\xc8\x42\ +\x2e\x64\x20\x67\x27\xb5\x48\x5d\xa4\x06\xa9\xb3\x4b\xd5\x92\xfa\ +\xfe\x64\xcc\x8f\xdc\x17\xd9\x83\xf6\x1e\xe4\xd8\xdd\xe3\xd8\x1d\ +\x73\x61\x2e\xb4\x8e\x27\xf0\x07\xd5\x18\x11\x1b\xed\x4d\x23\xf4\ +\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x02\xf1\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x2a\x00\x00\x00\x2c\x08\x03\x00\x00\x00\x24\x44\xda\x74\ +\x00\x00\x01\x32\x50\x4c\x54\x45\xff\xff\xff\xfe\xfe\xfe\x01\x01\ +\x01\xbe\xbe\xbe\xfd\xfd\xfd\x00\x00\x00\x64\x64\x64\xd2\xd2\xd2\ +\x7c\x7c\x7c\xfb\xfb\xfb\xe7\xe7\xe7\x84\x84\x84\xd7\xd7\xd7\xe0\ +\xe0\xe0\xe1\xe1\xe1\x0c\x0c\x0c\x28\x28\x28\xf5\xf5\xf5\xb3\xb3\ +\xb3\x02\x02\x02\x95\x95\x95\x2e\x2e\x2e\x11\x11\x11\x6b\x6b\x6b\ +\x03\x03\x03\x72\x72\x72\x49\x49\x49\xfc\xfc\xfc\x13\x13\x13\x04\ +\x04\x04\x9f\x9f\x9f\xc4\xc4\xc4\xa9\xa9\xa9\x05\x05\x05\x57\x57\ +\x57\x17\x17\x17\xf6\xf6\xf6\x16\x16\x16\xa6\xa6\xa6\xa0\xa0\xa0\ +\x60\x60\x60\x24\x24\x24\x3e\x3e\x3e\x23\x23\x23\xb7\xb7\xb7\x4d\ +\x4d\x4d\xf8\xf8\xf8\xc0\xc0\xc0\x30\x30\x30\x09\x09\x09\xec\xec\ +\xec\x20\x20\x20\x8a\x8a\x8a\xda\xda\xda\xf1\xf1\xf1\x0d\x0d\x0d\ +\x99\x99\x99\x19\x19\x19\xf9\xf9\xf9\xcd\xcd\xcd\xf4\xf4\xf4\x39\ +\x39\x39\x2d\x2d\x2d\x3b\x3b\x3b\x12\x12\x12\x43\x43\x43\xc2\xc2\ +\xc2\xa4\xa4\xa4\xdc\xdc\xdc\x55\x55\x55\x68\x68\x68\x5a\x5a\x5a\ +\x50\x50\x50\xf0\xf0\xf0\x06\x06\x06\x1f\x1f\x1f\x74\x74\x74\xb1\ +\xb1\xb1\x5d\x5d\x5d\x21\x21\x21\x36\x36\x36\x08\x08\x08\xea\xea\ +\xea\xdb\xdb\xdb\x81\x81\x81\x9c\x9c\x9c\x8b\x8b\x8b\x75\x75\x75\ +\xf2\xf2\xf2\x25\x25\x25\xce\xce\xce\x48\x48\x48\x63\x63\x63\xba\ +\xba\xba\x53\x53\x53\x38\x38\x38\xf7\xf7\xf7\xe4\xe4\xe4\xa2\xa2\ +\xa2\x4a\x4a\x4a\xf3\xf3\xf3\x5f\x5f\x5f\xf1\x69\x00\xec\x00\x00\ +\x00\x01\x74\x52\x4e\x53\x00\x40\xe6\xd8\x66\x00\x00\x01\x6d\x49\ +\x44\x41\x54\x78\x5e\xd5\x92\xc5\x76\xc3\x30\x10\x45\x3d\x92\x1d\ +\x66\xe6\x94\x99\x99\x99\x99\x99\xe1\xff\x7f\xa1\x9e\x89\x93\x53\ +\xa9\xb2\x4e\x76\x6d\xdf\xf2\xea\xfa\xbd\x59\xd8\xf8\x2b\xf1\x30\ +\xeb\x5b\x58\xcc\x04\x37\x13\x3c\x96\x10\xc6\xb5\xad\x42\xda\x9a\ +\x6f\x6d\x0d\x40\xb3\xad\x2c\xe8\xda\x1a\xe2\xb5\xf4\xd4\xdd\x71\ +\xbf\xa1\x0d\x14\x7b\x1b\xed\x09\xd0\xbb\x03\x0d\x93\x0d\xea\x4d\ +\xd8\x41\x2b\x33\x82\x6e\x2e\xac\x35\xc3\x39\xbb\x95\xe5\xbb\xa9\ +\xdb\xa7\xbd\xc0\x47\xce\x64\x47\x27\x7e\x31\x3b\xa7\x71\x87\xda\ +\xd1\x2c\x00\xf8\xe8\xda\x16\xcd\x7e\x17\x19\x09\xc3\x88\x94\xd1\ +\x5d\xd5\xb4\xf6\xe1\x6e\xbf\xdf\x36\x36\xe9\x92\x90\xab\xeb\xa5\ +\xf7\x09\xdb\x84\x61\xea\xcf\xbb\xee\x67\xd1\x1c\x1d\x43\x60\xa6\ +\xd1\x5d\x89\xbb\x98\x53\xd3\xb8\xef\xa9\x81\x19\x5a\xa8\x80\xda\ +\x4d\xd1\xeb\x3c\xbd\xc2\x42\x06\xbf\x5b\x54\x9b\xe6\x12\x9a\xcb\ +\x4e\x0f\x1c\xd0\xb5\x77\xca\xfd\x35\x7a\x5b\xaf\x83\x8d\x24\xba\ +\x5b\xca\x0b\xb6\x71\x5f\x0a\x8b\xee\x2a\xdc\xc0\x9e\xa5\x08\x4b\ +\x29\xf6\x83\x96\x32\x69\xf3\x87\xe9\xdf\x67\x6a\xb7\x0a\xb2\x7b\ +\xe8\x62\xb2\x23\xd9\x84\x02\xf2\x63\x2e\xe4\x04\xd9\xe9\x99\x64\ +\x9e\x53\xc3\x85\x48\x2f\x69\xe9\x0a\x44\x7a\x6d\x53\x96\x8c\x08\ +\x14\x6e\xa2\x48\x6f\x8b\x02\x8d\x97\xb0\xf5\x1e\xa4\xad\x07\xda\ +\x7a\x14\x58\x45\xfd\xd7\x57\xe9\x82\x27\xa1\xe1\x19\x97\x4a\x2f\ +\x72\xab\x19\x43\x5e\x7e\xad\x73\xce\xf9\x1b\x7d\xfd\xce\x31\x1f\ +\xe0\x60\xcc\x27\xad\x65\x6d\x4c\xcc\x12\xc2\xbc\x4e\x23\x13\x39\ +\x41\x89\x79\xc1\x50\x35\xfc\x7e\xeb\xff\xca\x17\x55\x71\x20\xbb\ +\xd7\xbb\x2e\xca\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\ +\x00\x00\x01\x1a\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x2a\x00\x00\x00\x2b\x02\x03\x00\x00\x00\x73\xf1\xf2\x6d\ +\x00\x00\x00\x0c\x50\x4c\x54\x45\xff\xff\xff\x80\x80\x80\x00\x00\ +\x00\xff\xff\xff\x45\x4a\x4b\x38\x00\x00\x00\x01\x74\x52\x4e\x53\ +\x00\x40\xe6\xd8\x66\x00\x00\x00\xbc\x49\x44\x41\x54\x78\x5e\x4d\ +\xcb\xbd\x89\x04\x31\x0c\x86\x61\xa1\xd0\x55\x38\x1c\xdc\x8f\x26\ +\xd8\x12\xa6\x0a\xb3\xe1\xe6\x4e\x2e\x32\x07\x02\xdb\x07\x5b\xc0\ +\x96\xb4\x55\x9c\x47\x3f\x33\x56\xf4\x21\xde\x07\x42\xcd\xe0\x17\ +\x46\xbd\xf6\xb6\xec\x1a\xef\xa6\x41\x02\x34\xb2\x41\x80\x60\x24\ +\xcf\x9d\x9a\xee\x38\x8b\x7e\x78\x83\x4f\x7e\x64\xb3\x30\x68\x57\ +\x10\x32\x74\x22\x05\x98\x91\x89\x0c\xe4\x50\x88\x0c\xd4\x44\xe4\ +\x20\xce\xdc\xc1\x98\x89\x83\x33\x71\x20\x89\x02\xe4\x9d\x1d\x60\ +\xa1\x2e\x40\xff\xe9\x02\xfd\xf1\x2a\x0e\xd2\xfe\x7b\x81\x50\xda\ +\x02\x8e\xef\x02\x3e\x0b\x78\xb3\x6c\x01\x7f\x5d\x1a\x03\x66\x1d\ +\x34\x00\x03\x42\x15\xb0\xe4\x0a\x24\x37\x50\x24\x57\xc0\x92\x2b\ +\xe8\x92\x1b\x90\xdc\x80\xe4\x0a\x24\x37\xf0\x73\x6f\x1c\x70\x5f\ +\x5b\x76\x3c\xc7\x3f\xd6\x51\x68\x20\x52\x85\xdb\x5f\x00\x00\x00\ +\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x01\x3e\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\xf3\x49\x44\x41\x54\x38\xcb\xed\x94\x41\x6e\ +\x83\x30\x10\x45\x9f\x25\xe0\x0c\xbd\x43\x2f\xd0\x13\xe5\xfa\x55\ +\x62\x9b\xd8\x33\x01\x77\x81\x0d\x24\x85\xaa\x31\xca\xaa\x1d\x89\ +\x8d\x0d\x4f\xef\x7b\x06\x37\x6d\xdb\x26\x0e\x94\xaa\x9a\xad\xf5\ +\x06\x40\x44\xaa\xa0\x5d\xd7\xed\xee\x35\xbc\xa8\xfe\xc1\x7f\x01\ +\x6c\x8c\xd9\xdb\x4a\x87\x8d\x53\xda\x60\x8c\x03\x0c\x01\xf4\x0a\ +\xd2\x43\x74\x98\xb7\xf7\x83\x47\x31\x2a\x68\x81\x7a\x10\x07\xd1\ +\x1d\x3c\xe3\x41\x26\xa0\xf6\x0b\x34\x38\x88\x97\x4a\x70\x1a\x61\ +\x88\x4b\x74\xf5\x93\x65\xb4\xd3\x23\x35\xc6\x69\x80\x5b\x00\x29\ +\xd1\x3d\xa8\x83\x60\x57\x60\x5f\x01\x96\x1c\x7d\xb6\x7c\x30\x95\ +\x6a\x70\xfe\x70\x06\xba\x15\xd4\xe5\x14\x76\x01\xff\x74\xfd\xdd\ +\x55\xb8\xe4\xce\xdb\x05\x5c\x26\x41\xfd\xb2\x06\x34\x7b\x17\xf5\ +\xe6\x8f\x10\xce\xdf\xa1\xc5\x34\xe6\x89\xa8\x6a\x5e\xf8\x9c\x46\ +\x6a\xb6\x74\x10\xb3\xa9\xac\x1a\xf8\x34\xf8\x7a\xce\xa6\x16\x62\ +\x0f\x6a\xef\x1b\x58\x52\x54\x81\xa5\x98\x6e\x4c\x45\xf4\x70\xeb\ +\x9f\x07\x9b\x8f\xd3\xaf\xdf\xfd\x02\xd6\xbd\xde\xdf\x70\xdb\x04\ +\x83\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +" + +qt_resource_name = b"\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x08\ +\x06\x27\x5a\x67\ +\x00\x62\ +\x00\x6f\x00\x6c\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0a\ +\x02\xfc\x42\x47\ +\x00\x69\ +\x00\x74\x00\x61\x00\x6c\x00\x69\x00\x63\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0f\ +\x00\x49\xdb\xa7\ +\x00\x62\ +\x00\x61\x00\x63\x00\x6b\x00\x67\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x32\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x10\ +\x0f\x9b\x88\x67\ +\x00\x62\ +\x00\x72\x00\x69\x00\x6e\x00\x67\x00\x74\x00\x6f\x00\x66\x00\x72\x00\x6f\x00\x6e\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0f\ +\x00\x4a\xdb\xa7\ +\x00\x62\ +\x00\x61\x00\x63\x00\x6b\x00\x67\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x33\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0d\ +\x08\xd5\xc4\xe7\ +\x00\x75\ +\x00\x6e\x00\x64\x00\x65\x00\x72\x00\x6c\x00\x69\x00\x6e\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0f\ +\x00\x4b\xdb\xa7\ +\x00\x62\ +\x00\x61\x00\x63\x00\x6b\x00\x67\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x34\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0f\ +\x03\x4a\x23\xe7\ +\x00\x6c\ +\x00\x69\x00\x6e\x00\x65\x00\x70\x00\x6f\x00\x69\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0a\ +\x0c\xad\x0f\x07\ +\x00\x64\ +\x00\x65\x00\x6c\x00\x65\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0d\ +\x05\x6c\x22\xc7\ +\x00\x6c\ +\x00\x69\x00\x6e\x00\x65\x00\x63\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0f\ +\x00\x50\xdb\xa7\ +\x00\x62\ +\x00\x61\x00\x63\x00\x6b\x00\x67\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x31\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0b\ +\x0a\x2b\x97\xe7\ +\x00\x70\ +\x00\x6f\x00\x69\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0f\ +\x05\xaa\x0c\xc7\ +\x00\x74\ +\x00\x65\x00\x78\x00\x74\x00\x70\x00\x6f\x00\x69\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0d\ +\x06\x43\xe3\x67\ +\x00\x66\ +\x00\x6c\x00\x6f\x00\x6f\x00\x64\x00\x66\x00\x69\x00\x6c\x00\x6c\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0e\ +\x0f\x0d\x22\x27\ +\x00\x73\ +\x00\x65\x00\x6e\x00\x64\x00\x74\x00\x6f\x00\x62\x00\x61\x00\x63\x00\x6b\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x0f\x00\x00\x00\x02\ +\x00\x00\x00\x42\x00\x00\x00\x00\x00\x01\x00\x00\x02\x11\ +\x00\x00\x00\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x03\xb0\ +\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x05\x26\ +\x00\x00\x01\x52\x00\x00\x00\x00\x00\x01\x00\x00\x09\xf3\ +\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x01\x16\ +\x00\x00\x00\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x05\x8a\ +\x00\x00\x01\x32\x00\x00\x00\x00\x00\x01\x00\x00\x09\x5e\ +\x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x00\x0b\x18\ +\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x0d\ +\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x04\x28\ +\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x67\ +\x00\x00\x01\x18\x00\x00\x00\x00\x00\x01\x00\x00\x06\x1b\ +\x00\x00\x01\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x2b\ +\x00\x00\x00\x66\x00\x00\x00\x00\x00\x01\x00\x00\x02\x87\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/graphicsview/diagramscene/images/background1.png b/examples/widgets/graphicsview/diagramscene/images/background1.png new file mode 100644 index 0000000000000000000000000000000000000000..0f93c6bf420da2d6488601c5fa165c57206b322d GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^^&rg13?%;)_Xhwewg8_HSBC!}uyIG+0-%Vhr;B4q zMcmsnib4zwEDVnS>rI*jQ%d#ocHGE1#m&I*VJ;(s1M`#_uMbFCENlU4VDNPHb6Mw< G&;$V2W+Jly literal 0 HcmV?d00001 diff --git a/examples/widgets/graphicsview/diagramscene/images/background2.png b/examples/widgets/graphicsview/diagramscene/images/background2.png new file mode 100644 index 0000000000000000000000000000000000000000..1e293db67a5dfedacaee2b7448148dcf6bc53b92 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^^&rg13?%;)_Xhwewg8_H*Z=?j1DTL*{Qv)7JF|TYP(;(y z#WBRgJNXAcD=$xgfffWhEMefe;e6zOFINv3CWtdI*jGH+{&<2xJWvyZr>mdKI;Vst E0PAKUcK`qY literal 0 HcmV?d00001 diff --git a/examples/widgets/graphicsview/diagramscene/images/background4.png b/examples/widgets/graphicsview/diagramscene/images/background4.png new file mode 100644 index 0000000000000000000000000000000000000000..9c1f3bfd77764732b9a0138ffbd134e696e9c6d1 GIT binary patch literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^^&rg13?%;)_Xhwe<^Z1%*Z=?jFFzuE0?3u{ba4!+ qhYP)(Fbo8M z2lQrH7A8r8p993c@02?QX__)52*dDESl2Zd0R;qA-d*T+9EWqZZR5jP3hzWw#Nr?b z^v>(LV%xTAl)mpzv3w|sg30q7ecxvTAp{P?piDrw4bwDP+;!b0{+@Z;Hk_u3W7#2& zV;sj3)y!`nBxJs-s{h+qmPL(5U0%0A%=3&*)1b^}S#~*lo~LkK_vh2vZAhr7EKAk# Y0MNh_$Of+#C;$Ke07*qoM6N<$f{V6t!Tdm4?Fu&!p#^mymSVTh zU>sb6HlP;7W{N`X0QDB+k_jxAXelOsn#*51@U_g5OYIsl5L%VuiskzuK3zz?-u00000NkvXXu0mjfg_VD% literal 0 HcmV?d00001 diff --git a/examples/widgets/graphicsview/diagramscene/images/delete.png b/examples/widgets/graphicsview/diagramscene/images/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..df2a147d246ef62d628d73db36b0b24af98a2ab9 GIT binary patch literal 831 zcmV-F1Hk-=P)R5;6h zl}l(-K@^6Q=FtdACA#^NDs^{Lp)6)L zgDB5eX;UdG_4H6F7*yIgXmIAu0!5NyOCtSU7G=!;6%|3j{gliox-!pOK?G(o&X({YLK$5)lC7F{VZbo703UCXA=&? zO>Nu>w#%A8Rp;5oKacEBBT*BGX+{#I_yE%2i8f!~SeeejbP6SvLH5VQ-~o6A-hwe1 z-+)oOG3-#N-p|7H3rxph%DcJ`E`ihFDtIo2X&L#)9#wa!-__Ey=>18UreVqnx(m*O z14e_~1JA$~|`2HhU^Ra!WRl)GgiU zYU$BXh#q3R4$gpm?mF#|Br$YH!gK>%1c$VCx82fBJaI+hxwpFb)g=^Dbv{zQc<7+k z9t8>W67osVx3S=)K2n#oseNr$I`ov*vgsc2h}xyrpv>h+JHeJUF8ZjWkj` zH1UE>PMpf&iLCQ!iioCJ)~Hi?YjvJaK8_pg59Au!plIt&?SDO~mzDzYD;xj-002ov JPDHLkV1h`%ho%4k literal 0 HcmV?d00001 diff --git a/examples/widgets/graphicsview/diagramscene/images/floodfill.png b/examples/widgets/graphicsview/diagramscene/images/floodfill.png new file mode 100644 index 0000000000000000000000000000000000000000..54c0dae237849b1ac4c8f74edd2a9f868df636e0 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^T0pGL#0(^hKYq#uQak}ZA+G=b|8Hn$0P=tgS1)f1 zAd9gi$S;_|;n|HeAZL%Ki(^PdobTzqoh*htZHWsngj&el=~ufUw2W)>!)JbaM(j+t z*`p6k+Y&m*-QGCti{d?Yr?U^l-S&Rl_D1UcGDjwpO^yu-D(C0UdS}sHSJCWWm$KO) zBV53!M2U6A#7>?k0UbP7T%IVLyK`_xXR~pkLMPLcxv~ih^&I}cWcvG2i|^9E>c)Uu zOnvW}?6@m7=P=gCN-?L&nlLasiEenprD7hS5`JKk_KQi<6YeyC_#cY%WeVb>%WRI@ YUkl7o2x`3@5A+9vr>mdKI;Vst01-}XF8}}l literal 0 HcmV?d00001 diff --git a/examples/widgets/graphicsview/diagramscene/images/italic.png b/examples/widgets/graphicsview/diagramscene/images/italic.png new file mode 100644 index 0000000000000000000000000000000000000000..9a438b57ad4369dfd110d2f2bdc126890e1aec8e GIT binary patch literal 247 zcmV(sy*Prg8NDWuEbzopr0L)V>;{X5v literal 0 HcmV?d00001 diff --git a/examples/widgets/graphicsview/diagramscene/images/linepointer.png b/examples/widgets/graphicsview/diagramscene/images/linepointer.png new file mode 100644 index 0000000000000000000000000000000000000000..66933d43b30e4352c763cadb4f0ca3bd80325037 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&p3?#QprHKJ4wg8_H*Z=?j1DTH@0 zC%qJfboH$su}j!iZuY)9>DRxMGyQkOZ#I9EdvfFM;~TQYiF#Z5)IYFal@OGE>#O_) PXgY(ZtDnm{r-UW|*?2%h literal 0 HcmV?d00001 diff --git a/examples/widgets/graphicsview/diagramscene/images/sendtoback.png b/examples/widgets/graphicsview/diagramscene/images/sendtoback.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa3b0a24382610f1dc25d6708a02a90e3d6c340 GIT binary patch literal 318 zcmV-E0m1%>P)1A0e687B!#Lm%BmfS zjSWxldj>ac+a?Z_s+z6!20%orpk3GP?lruq{=t6%Y>e64N{5Y8+F*&ZZV(4{GllSW;AhrI>C^Mf7m%p9hk07*qoM6N<$f)Wjg@&Et; literal 0 HcmV?d00001 diff --git a/examples/widgets/graphicsview/diagramscene/images/textpointer.png b/examples/widgets/graphicsview/diagramscene/images/textpointer.png new file mode 100644 index 0000000000000000000000000000000000000000..b25832cada22845efb19650500edf1ceb522a8b4 GIT binary patch literal 753 zcmVE}0|Ntca&k#YN&Ni$6B82z1O%U-pTxw(si~<21qD}ER~Hu- z_V)G`78a(arl6ppU|?V*BqTmQJ|iO|x3{-VO-=at_`txxFfcF)2?^}%>>wZ@ii(Qb z+S>8)@eK_PnVFdx85#Nc`OVGE^z`&OIXNvYEjv3q5)u+aLqo#C!lb06+}zw%RaIzc zXj)oYP*70t@bCr(1|J_EbaZsFv9VoUT_GVMHa0d02ng!x>f77ffq{XXoSch`i*swgN1UC~rmJr6ZtwP$GZ*2`gv#l)X+8W}u^wiyPzo88jdmHTu(7OW- zlMU)k*g-2Zf^IIXHN!c(mF2ss+o!$2N6utNCw?(Ir*Vhc(JTP?=-L*|eis=D!-$m8 zUDdSq;cma*Ha6*!kgMyZ_X*pCVd~Gj?q|^)9YbKI(OrqVm{ZfZ@2PHF{gGgN-D*TgnTzabF6H?ke2Co}~y&DfWYwGHLUN z>ECB+w+ga*=wh-X*@Ob}V=m+b+3A^No>RkxNH1yW3PgHsQ;K9ZRdFD@*Sjvt00000NkvXXu0mjfuiIx( literal 0 HcmV?d00001 diff --git a/examples/widgets/graphicsview/diagramscene/images/underline.png b/examples/widgets/graphicsview/diagramscene/images/underline.png new file mode 100644 index 0000000000000000000000000000000000000000..9b8209f5252f74c3af386430d17b60f7eeda7ce3 GIT binary patch literal 250 zcmVVHb^x=zg3bp;R5gZF*!ld&eiecuD~aU8;zW%0@Dx(b}8DKI}F+qU^+sIF@nlx4|n z+j3P^(l<@R)>@zZ$QZ*}mWe4z62@Q7^L%gV1~VWy%?KWNb^rhX07*qoM6N<$f?^zL A8~^|S literal 0 HcmV?d00001 diff --git a/examples/widgets/graphicsview/dragdroprobot/dragdroprobot.py b/examples/widgets/graphicsview/dragdroprobot/dragdroprobot.py new file mode 100644 index 0000000..b2f0a7c --- /dev/null +++ b/examples/widgets/graphicsview/dragdroprobot/dragdroprobot.py @@ -0,0 +1,287 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets + +import dragdroprobot_rc + + +class ColorItem(QtWidgets.QGraphicsItem): + n = 0 + + def __init__(self): + super(ColorItem, self).__init__() + + self.color = QtGui.QColor(QtCore.qrand() % 256, QtCore.qrand() % 256, + QtCore.qrand() % 256) + + self.setToolTip( + "QColor(%d, %d, %d)\nClick and drag this color onto the robot!" % + (self.color.red(), self.color.green(), self.color.blue()) + ) + self.setCursor(QtCore.Qt.OpenHandCursor) + + def boundingRect(self): + return QtCore.QRectF(-15.5, -15.5, 34, 34) + + def paint(self, painter, option, widget): + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.darkGray) + painter.drawEllipse(-12, -12, 30, 30) + painter.setPen(QtGui.QPen(QtCore.Qt.black, 1)) + painter.setBrush(QtGui.QBrush(self.color)) + painter.drawEllipse(-15, -15, 30, 30) + + def mousePressEvent(self, event): + if event.button() != QtCore.Qt.LeftButton: + event.ignore() + return + + self.setCursor(QtCore.Qt.ClosedHandCursor) + + def mouseMoveEvent(self, event): + if QtCore.QLineF(QtCore.QPointF(event.screenPos()), QtCore.QPointF(event.buttonDownScreenPos(QtCore.Qt.LeftButton))).length() < QtWidgets.QApplication.startDragDistance(): + return + + drag = QtGui.QDrag(event.widget()) + mime = QtCore.QMimeData() + drag.setMimeData(mime) + + ColorItem.n += 1 + if ColorItem.n > 2 and QtCore.qrand() % 3 == 0: + image = QtGui.QImage(':/images/head.png') + mime.setImageData(image) + drag.setPixmap(QtGui.QPixmap.fromImage(image).scaled(30,40)) + drag.setHotSpot(QtCore.QPoint(15, 30)) + else: + mime.setColorData(self.color) + mime.setText("#%02x%02x%02x" % (self.color.red(), self.color.green(), self.color.blue())) + + pixmap = QtGui.QPixmap(34, 34) + pixmap.fill(QtCore.Qt.white) + + painter = QtGui.QPainter(pixmap) + painter.translate(15, 15) + painter.setRenderHint(QtGui.QPainter.Antialiasing) + self.paint(painter, None, None) + painter.end() + + pixmap.setMask(pixmap.createHeuristicMask()) + + drag.setPixmap(pixmap) + drag.setHotSpot(QtCore.QPoint(15, 20)) + + drag.exec_() + self.setCursor(QtCore.Qt.OpenHandCursor) + + def mouseReleaseEvent(self, event): + self.setCursor(QtCore.Qt.OpenHandCursor) + + +class RobotPart(QtWidgets.QGraphicsItem): + def __init__(self, parent=None): + super(RobotPart, self).__init__(parent) + + self.color = QtGui.QColor(QtCore.Qt.lightGray) + self.pixmap = None + self.dragOver = False + + self.setAcceptDrops(True) + + def dragEnterEvent(self, event): + if event.mimeData().hasColor() or \ + (isinstance(self, RobotHead) and event.mimeData().hasImage()): + event.setAccepted(True) + self.dragOver = True + self.update() + else: + event.setAccepted(False) + + def dragLeaveEvent(self, event): + self.dragOver = False + self.update() + + def dropEvent(self, event): + self.dragOver = False + if event.mimeData().hasColor(): + self.color = QtGui.QColor(event.mimeData().colorData()) + elif event.mimeData().hasImage(): + self.pixmap = QtGui.QPixmap(event.mimeData().imageData()) + + self.update() + + +class RobotHead(RobotPart): + def boundingRect(self): + return QtCore.QRectF(-15, -50, 30, 50) + + def paint(self, painter, option, widget=None): + if not self.pixmap: + painter.setBrush(self.dragOver and self.color.lighter(130) + or self.color) + painter.drawRoundedRect(-10, -30, 20, 30, 25, 25, + QtCore.Qt.RelativeSize) + painter.setBrush(QtCore.Qt.white) + painter.drawEllipse(-7, -3 - 20, 7, 7) + painter.drawEllipse(0, -3 - 20, 7, 7) + painter.setBrush(QtCore.Qt.black) + painter.drawEllipse(-5, -1 - 20, 2, 2) + painter.drawEllipse(2, -1 - 20, 2, 2) + painter.setPen(QtGui.QPen(QtCore.Qt.black, 2)) + painter.setBrush(QtCore.Qt.NoBrush) + painter.drawArc(-6, -2 - 20, 12, 15, 190 * 16, 160 * 16) + else: + painter.scale(.2272, .2824) + painter.drawPixmap(QtCore.QPointF(-15*4.4, -50*3.54), self.pixmap) + + +class RobotTorso(RobotPart): + def boundingRect(self): + return QtCore.QRectF(-30, -20, 60, 60) + + def paint(self, painter, option, widget=None): + painter.setBrush(self.dragOver and self.color.lighter(130) + or self.color) + painter.drawRoundedRect(-20, -20, 40, 60, 25, 25, + QtCore.Qt.RelativeSize) + painter.drawEllipse(-25, -20, 20, 20) + painter.drawEllipse(5, -20, 20, 20) + painter.drawEllipse(-20, 22, 20, 20) + painter.drawEllipse(0, 22, 20, 20) + + +class RobotLimb(RobotPart): + def boundingRect(self): + return QtCore.QRectF(-5, -5, 40, 10) + + def paint(self, painter, option, widget=None): + painter.setBrush(self.dragOver and self.color.lighter(130) or self.color) + painter.drawRoundedRect(self.boundingRect(), 50, 50, + QtCore.Qt.RelativeSize) + painter.drawEllipse(-5, -5, 10, 10) + + +class Robot(RobotPart): + def __init__(self): + super(Robot, self).__init__() + + self.torsoItem = RobotTorso(self) + self.headItem = RobotHead(self.torsoItem) + self.upperLeftArmItem = RobotLimb(self.torsoItem) + self.lowerLeftArmItem = RobotLimb(self.upperLeftArmItem) + self.upperRightArmItem = RobotLimb(self.torsoItem) + self.lowerRightArmItem = RobotLimb(self.upperRightArmItem) + self.upperRightLegItem = RobotLimb(self.torsoItem) + self.lowerRightLegItem = RobotLimb(self.upperRightLegItem) + self.upperLeftLegItem = RobotLimb(self.torsoItem) + self.lowerLeftLegItem = RobotLimb(self.upperLeftLegItem) + + self.timeline = QtCore.QTimeLine() + settings = [ + # item position rotation at + # x y time 0 / 1 + ( self.headItem, 0, -18, 20, -20 ), + ( self.upperLeftArmItem, -15, -10, 190, 180 ), + ( self.lowerLeftArmItem, 30, 0, 50, 10 ), + ( self.upperRightArmItem, 15, -10, 300, 310 ), + ( self.lowerRightArmItem, 30, 0, 0, -70 ), + ( self.upperRightLegItem, 10, 32, 40, 120 ), + ( self.lowerRightLegItem, 30, 0, 10, 50 ), + ( self.upperLeftLegItem, -10, 32, 150, 80 ), + ( self.lowerLeftLegItem, 30, 0, 70, 10 ), + ( self.torsoItem, 0, 0, 5, -20 ) + ] + self.animations = [] + for item, pos_x, pos_y, rotation1, rotation2 in settings: + item.setPos(pos_x,pos_y) + animation = QtWidgets.QGraphicsItemAnimation() + animation.setItem(item) + animation.setTimeLine(self.timeline) + animation.setRotationAt(0, rotation1) + animation.setRotationAt(1, rotation2) + self.animations.append(animation) + self.animations[0].setScaleAt(1, 1.1, 1.1) + + self.timeline.setUpdateInterval(1000 / 25) + self.timeline.setCurveShape(QtCore.QTimeLine.SineCurve) + self.timeline.setLoopCount(0) + self.timeline.setDuration(2000) + self.timeline.start() + + def boundingRect(self): + return QtCore.QRectF() + + def paint(self, painter, option, widget=None): + pass + + +if __name__== '__main__': + + import sys + import math + + app = QtWidgets.QApplication(sys.argv) + + QtCore.qsrand(QtCore.QTime(0, 0, 0).secsTo(QtCore.QTime.currentTime())) + + scene = QtWidgets.QGraphicsScene(-200, -200, 400, 400) + + for i in range(10): + item = ColorItem() + angle = i*6.28 / 10.0 + item.setPos(math.sin(angle)*150, math.cos(angle)*150) + scene.addItem(item) + + robot = Robot() + robot.setTransform(QtGui.QTransform().scale(1.2, 1.2)) + robot.setPos(0, -20) + scene.addItem(robot) + + view = QtWidgets.QGraphicsView(scene) + view.setRenderHint(QtGui.QPainter.Antialiasing) + view.setViewportUpdateMode(QtWidgets.QGraphicsView.BoundingRectViewportUpdate) + view.setBackgroundBrush(QtGui.QColor(230, 200, 167)) + view.setWindowTitle("Drag and Drop Robot") + view.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/graphicsview/dragdroprobot/dragdroprobot.qrc b/examples/widgets/graphicsview/dragdroprobot/dragdroprobot.qrc new file mode 100644 index 0000000..b0969d2 --- /dev/null +++ b/examples/widgets/graphicsview/dragdroprobot/dragdroprobot.qrc @@ -0,0 +1,5 @@ + + + images/head.png + + diff --git a/examples/widgets/graphicsview/dragdroprobot/dragdroprobot_rc.py b/examples/widgets/graphicsview/dragdroprobot/dragdroprobot_rc.py new file mode 100644 index 0000000..67cd6b2 --- /dev/null +++ b/examples/widgets/graphicsview/dragdroprobot/dragdroprobot_rc.py @@ -0,0 +1,1017 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Fri Jul 30 18:00:51 2010 +# by: The Resource Compiler for PySide (Qt v4.6.2) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x3a\x7c\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x84\x00\x00\x00\xb1\x08\x04\x00\x00\x00\xaf\xfa\xdd\x32\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd6\x03\ +\x10\x0a\x31\x18\xc7\xac\x62\xef\x00\x00\x00\x1d\x74\x45\x58\x74\ +\x43\x6f\x6d\x6d\x65\x6e\x74\x00\x43\x72\x65\x61\x74\x65\x64\x20\ +\x77\x69\x74\x68\x20\x54\x68\x65\x20\x47\x49\x4d\x50\xef\x64\x25\ +\x6e\x00\x00\x00\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\ +\x00\x39\xe4\x49\x44\x41\x54\x78\xda\xd5\xbd\xd9\xb2\x5d\xc7\xb5\ +\x9e\xf9\x65\xe6\x6c\x57\xbb\xf7\x06\x36\x00\xf6\x24\xa8\xc6\x75\ +\x8e\x1d\x61\x59\xf2\x45\xd5\x45\x5d\x54\xd1\xe1\x8b\xba\x26\x1f\ +\x81\x7a\x04\xea\x11\xc8\x47\x10\x1f\x41\x7a\x04\x31\xea\xae\xae\ +\x7c\x8e\xe3\xd4\x29\x47\x58\x16\x4d\x1c\x51\x02\x89\x6e\x77\xab\ +\x9d\x7d\xa6\x2f\x72\xcc\x5c\x73\x2d\x6c\x10\x0d\x49\x85\x0b\x0c\ +\x92\x00\x76\xb7\xd6\x98\x99\xa3\xf9\xc7\x3f\xfe\xa1\x56\xfc\xb8\ +\xbf\xdc\xe0\xf7\x2a\xfc\x9d\x02\x2c\x4a\x7e\x3f\xfc\x53\x4b\x07\ +\xc4\x18\x2a\xda\x8f\xdb\xdf\x72\x19\xfd\x26\xfe\x3c\x46\x63\x9f\ +\xf1\x13\x2c\xa0\xe4\xbb\x70\xcd\x4f\x7b\xb1\x5f\xea\x6f\x67\x08\ +\xb5\xf7\x37\x8a\x0e\x85\x1a\x18\xa2\xa2\xfd\xb4\xf9\xa4\x43\x61\ +\x30\xbf\x57\xf7\x16\x9f\x14\x40\x4e\x0c\x8c\x3e\x9b\xfc\xa6\xa1\ +\xc3\xde\x8d\xee\xc5\x68\xc0\xe1\x00\x15\xbe\x9b\xda\x33\xf9\xff\ +\xd4\x86\xf0\x2f\xdb\xc9\x5b\x77\x68\x1c\x96\x4e\x8c\xd2\x7c\x7a\ +\xf1\x49\x41\x4d\xca\x98\x88\x92\x35\x5b\x1c\x09\x19\x0a\x4b\x42\ +\x4e\x8d\x05\x52\x26\xe4\x2a\x12\xf3\x29\xf9\x09\xea\xe0\x27\xbd\ +\xbc\x21\x22\xfe\x66\xbf\xfa\x0b\x01\x1a\xb0\x68\x3a\xca\x8f\xb7\ +\xbf\xad\xb1\x54\x94\x6c\x51\xa4\x28\x1a\x36\x5c\xb2\x24\x26\xa7\ +\xe2\x8a\x0a\x03\xb4\x14\x68\x62\x72\xe6\x1c\xbb\x39\xb9\xca\xe4\ +\xad\x2a\x39\x1d\xdf\xef\xd7\xdf\xd0\x10\x6a\x70\x84\x2d\x0d\xd5\ +\xdd\xf2\xab\x4b\x2e\xa8\xe8\x68\xd8\x72\xcc\x31\x73\x1c\x0b\xce\ +\xd8\x62\xd1\x94\x14\x3c\x62\x43\x06\x14\x18\x12\x32\xb6\x6c\x29\ +\xe9\x98\x3b\xad\x22\x8c\x7c\xd7\xff\x5f\x19\xa2\x3f\x17\x16\x47\ +\xc3\xd6\x2d\x58\x73\xc6\x25\x30\x22\x22\x26\x05\x0a\x0a\x9e\x70\ +\x41\x45\xc4\x15\x0d\x25\x05\x1d\x25\x06\x47\x8c\xc2\x51\x51\x51\ +\x53\xb1\xe0\xc4\xa5\x8c\x2f\x47\x27\x11\xfa\xda\xab\xc1\xff\xac\ +\x3e\xc2\x7b\x85\x9a\x0e\x28\xdd\x8a\xfb\x6c\x38\xa3\x60\xc2\x29\ +\x33\x34\x11\x5b\x56\xac\x28\xa9\x29\x69\x38\x63\x83\xe1\x98\x31\ +\x2d\x96\x0c\x87\x01\x6a\x1a\x14\x19\x29\x77\x98\x73\xca\x09\xe3\ +\xf7\xd3\x7b\xe6\x7b\x3b\xcb\xe8\xd5\xdf\x9c\x7a\xea\x8d\xf6\xb7\ +\xbf\x43\xc9\x53\xe2\xc0\x55\xb6\x34\x1f\x17\xbf\xdd\xb2\xa1\xe4\ +\x3e\x1d\x96\x11\x63\x12\x34\x86\x2b\x36\x5c\xb1\x66\xcb\x96\x25\ +\x25\x57\x4c\x99\xd3\xf0\x98\x16\x4d\x4c\xd3\xc7\x16\x22\x66\x4c\ +\x80\x05\x6b\xd6\xcc\xbf\x9a\x31\x57\x99\x44\x21\xff\x1a\xa0\xc5\ +\x1c\x38\xd3\x1f\xe1\x44\xb8\x67\x58\xdc\x49\x36\xe0\x7f\xf5\x41\ +\x4e\x0d\x4e\x44\xcd\x85\x5b\x52\x72\xce\x43\x2e\xb0\x8c\xb8\xc1\ +\x18\x47\x83\x43\xb3\xe1\x82\x15\x1b\x4a\xb6\x54\x28\x12\x62\x34\ +\x1d\x2d\x00\xe7\x00\xc4\xa4\xa4\xc4\x18\x6e\x62\xd1\x44\x64\x9c\ +\xf0\x26\xb7\x78\x53\xc5\x98\xf0\xca\xdc\xde\xef\x86\xa1\x5b\xfd\ +\x18\x3e\x62\xdf\x24\x3e\x18\x6a\x1c\x0d\xb5\xb3\xe8\xcb\xf4\xa4\ +\xf7\xed\x0d\x06\x47\xf5\xe9\x39\xe7\x94\x3c\xe0\x4b\x22\x72\xc6\ +\x28\xd6\x2c\x68\x48\x49\xb9\xe2\x21\x17\x94\x34\x58\x2c\x73\x3a\ +\x3a\xac\x18\xb8\xa3\xa6\x45\xa1\x18\x13\x63\xd9\xb2\x92\x8f\x6b\ +\xe6\x9c\xf1\x0e\xb8\x19\xe3\x5f\xeb\xcf\x15\x86\x18\xb5\xf7\x50\ +\x86\x67\xf7\x7a\x63\x7c\xcf\x13\x31\xbc\x97\xed\x20\x2e\x94\x77\ +\xb7\x5f\xad\x51\xc4\x8c\x2f\x27\x27\x11\x8e\x0e\x43\xc9\x63\xf7\ +\x35\x8f\xd9\xf0\x98\x87\x24\xdc\xe6\x84\x96\x4b\x1a\x26\xcc\xf8\ +\x86\x25\x17\xac\xb0\x44\x24\xc4\xa4\x28\x8c\x98\x01\xa0\xa2\xa2\ +\x21\x66\x4c\x4c\x4b\xcd\x82\x88\x84\x08\x48\xb9\xcd\x1d\xde\xe1\ +\x84\x13\x72\x12\x72\x95\x60\xb0\x72\x55\x86\x79\x86\x1b\xc4\xaf\ +\x1f\x25\x6a\xa8\x70\x19\x2c\x0e\x4d\x7a\x4f\xab\x09\x6b\x77\xc1\ +\xf9\xf1\xc8\x1d\x33\x55\x31\x9b\x0f\x1e\xfd\xe1\x6b\xce\xb9\xe2\ +\x9c\x0d\x13\x40\xb1\xe0\x31\x35\xc7\x38\x9e\xf0\xdf\x68\xb1\x40\ +\x42\x8c\x4f\xa9\x33\x72\xa0\xa2\x41\x11\x61\x69\xa9\xd9\xb0\xc1\ +\x88\x07\xf2\x97\xa7\xa5\xe6\x9c\x86\x29\x2d\x1d\xc7\x1c\x01\x8e\ +\x6e\xcf\x87\xb9\xe7\x86\xd8\xe8\x87\x88\x07\x4a\x6e\xaf\xa5\xb8\ +\xbb\xf8\xaa\xc6\xa0\x68\xb9\xf1\x59\xc5\x9a\x05\x09\x25\x85\xcb\ +\x78\xcc\x3d\xee\xd3\xb2\xe1\x09\x96\x39\x8e\x2b\xb6\x6c\x99\x10\ +\x71\xce\x5f\x29\x31\x24\x68\x1c\x25\x0b\x5a\x26\x8c\xa8\xb1\x6c\ +\x28\x81\x08\x47\x4d\x45\x41\x87\x26\x23\x46\xd1\xe1\x48\x71\x40\ +\x89\xe1\x4b\x26\x9c\xf2\x3a\x11\x63\x0c\x4a\x2e\xd5\xbe\xb3\xfe\ +\x51\x9c\xa5\x93\x3c\xb1\x2f\x86\x62\x2a\xce\xdd\x37\xac\x70\x54\ +\x2c\xb9\x43\xc1\x8a\x12\x48\x48\x31\xac\x79\xc2\x0a\x45\xc1\x05\ +\x35\x39\x19\x1d\x90\x12\x51\x70\xc9\x92\x11\x96\x96\x8a\x92\x9a\ +\x0e\xcb\x1c\x83\xa6\xa5\xa4\x06\x14\x29\x96\x8e\x0e\x87\x26\xc2\ +\xe0\x80\x84\x8c\x94\x88\x8c\x9c\x2d\x19\x47\xbc\xc5\xff\xc2\x4f\ +\x39\x51\xd1\xc0\x47\xb8\xa7\x6a\x11\xf5\x43\x9e\x08\x9f\xda\xb6\ +\x74\x1f\xb7\x9f\xda\x63\xc7\x44\x55\xff\xe0\x1d\x5d\xc7\x15\xdf\ +\x72\xc1\x96\x05\x2b\x6a\x14\x31\x31\x13\x1c\xd0\x51\x61\xa9\xd8\ +\x70\x8c\xe2\x84\x23\x9e\xf0\x67\x6a\x8e\x68\xd8\xb2\x64\x43\x43\ +\x4c\xce\x88\x86\x8a\x8e\x16\x8b\x95\x24\xcc\x07\x68\x03\x34\x54\ +\xf2\xd2\x63\x3a\x1c\x2d\x25\x13\xa0\xe4\x9c\xc7\xdc\x20\xfd\x87\ +\xd1\xaf\x8c\x44\x2c\xf7\x7d\xf3\x88\xa7\x13\x94\x0e\x27\x5f\xe0\ +\xd0\x40\x4d\x71\xd1\x1c\xb7\x94\x94\x74\x94\x6e\xc9\x23\x1e\x71\ +\xc6\x86\x0a\xcb\x29\x96\x92\x92\x05\x1b\x6a\x1c\x37\x98\x32\xa1\ +\x65\xc9\x96\x88\x11\x0d\xff\x9a\x9c\xff\x8f\x7f\x21\x62\x42\xc9\ +\x5f\x68\xa8\x51\x64\x8c\xa4\xe6\xac\x68\x68\x48\xc8\xb0\x54\x74\ +\xe4\x44\x38\x22\x32\xa0\x64\x89\xc2\xe2\xe8\x98\x30\x22\x61\x4c\ +\x44\x46\xc4\x92\xc7\x8c\x7e\x19\xdd\xcd\xef\xa9\x67\x84\x4a\xf5\ +\xaa\x3e\x42\x85\xcc\xc0\xed\xfd\x4d\x7b\x77\x73\x5c\x52\xb3\x61\ +\x41\xc1\x92\x4b\x1e\xb3\xa2\x15\xff\xfc\x98\x96\x82\x35\x05\x9a\ +\x31\x63\x46\x68\x36\xac\x59\xd1\x31\x22\xe5\x94\x6f\x59\x72\x81\ +\xa6\x66\x49\x41\x81\xc3\x61\x29\xe9\xa8\x49\xd8\x62\xe9\xd0\x18\ +\x71\x93\x71\x40\x2c\x2a\x14\x8e\x1b\xf2\xd1\x0c\x43\x4b\x87\x22\ +\x27\x27\x21\xf1\xce\xf4\x9e\x1b\xbc\x61\xf5\x7d\x4e\x84\xba\xa6\ +\x7a\x54\xc1\x03\xb7\x54\x77\x2f\xbf\x7a\xcc\x9a\x8a\x2b\xce\x58\ +\xe0\xb8\x62\x41\x4b\x8c\xa2\xa4\xa0\xc0\xd2\xd0\x00\x29\x33\x66\ +\x2c\xe9\xc4\x03\x24\xa4\xe4\x38\xfe\xca\x63\x14\x8a\x15\x6b\xc9\ +\x0b\x15\x96\x9a\x96\x96\x94\x0c\x7c\x00\x26\xa1\x40\x01\x11\x29\ +\xd0\x62\xe9\xb0\x92\xbe\xa5\x80\xc6\xd2\xb1\x65\x2a\xaf\x3b\x25\ +\xa5\x71\x77\x54\x44\xf4\xc2\xb9\x65\xf4\x32\x2e\x52\x85\xff\xd6\ +\xac\xdd\x43\x2e\x39\x67\x4b\xc1\x25\x67\x6c\x18\x51\xca\x5d\xae\ +\x59\xb1\x21\x45\x33\x22\x21\x26\x42\xb1\x61\x25\x3f\xd0\x47\xff\ +\x8e\x6f\x59\xd2\xe1\x28\x59\xe2\xc8\x05\xab\xf0\x7e\x40\x03\x39\ +\xa0\x88\xc8\x18\x91\x92\xb0\xc0\x90\x12\x53\xb1\xa1\xc5\x52\xd3\ +\xa1\x70\x24\xc4\x40\x4b\xcd\x16\x45\xc1\x15\x57\x5c\x72\x83\xad\ +\x9b\x32\x23\x57\x26\xa4\xdd\xdf\xdb\x10\xee\xe0\x4f\x1d\x4b\xf7\ +\x90\xaf\xd8\x52\x52\xb3\xe6\x92\x15\x0d\x1b\x6a\x1a\x1a\xc9\x03\ +\x0d\xa7\x28\x62\x46\xc4\x94\x5c\xb0\x22\xc6\x04\xef\x5d\xd3\xb0\ +\x25\x66\xcc\x86\x46\x70\x06\x45\x43\x85\x21\x26\xc6\xa0\x59\x89\ +\xd9\xb7\x8c\x88\xe9\xe8\xd8\xd2\x90\xd1\x52\xe1\xe4\xcd\xbb\x41\ +\x4d\x33\x25\x92\xef\xdc\xd0\x70\xc9\x82\x37\x78\x8f\xd3\xdf\xe5\ +\x1f\x99\x6b\x11\xac\x97\x34\x84\x1b\xfc\xd7\x07\xca\x8e\xb5\x7b\ +\xc8\x7d\x2e\xe4\x47\xae\x59\x51\x60\xb9\xa0\x91\x80\x38\x62\x44\ +\xca\x2d\x2a\x1a\xf1\xf0\x15\x25\x11\x84\x97\xad\x31\x01\x6c\xcb\ +\xc8\x50\x38\x52\xa0\xc3\x11\xcb\x19\x8a\x50\x72\x99\x5a\xc9\x1a\ +\x7c\x44\x89\x80\x8c\x29\x5b\x79\x28\x2d\x56\xaa\x92\xfe\x12\x58\ +\x36\xb4\x8c\x69\x31\xc4\x1f\x45\xa8\x83\x2a\xe8\x15\x0c\xe1\x06\ +\xa6\xd0\x92\x39\x6c\x2e\x1e\xf1\x0d\x17\x74\x14\x6c\x28\xd9\xb0\ +\xa1\xa0\xa5\xc4\x61\x18\x71\xcc\x9c\x1c\x43\x22\x61\xb2\xa4\xa6\ +\x25\xa1\x23\x26\x23\x0e\x60\x9d\xa6\xc0\x91\x60\x80\x8e\x4e\xae\ +\x81\xcf\x12\x22\x34\xb7\x48\x81\x15\x2b\x5a\x34\x8a\x86\x9a\x82\ +\x98\x04\x85\xa6\xa6\xa1\x93\xbc\xc2\x31\x26\x61\x2b\x3e\x25\xc3\ +\x51\xb2\xe5\x26\xed\xc0\xaf\x7d\xef\xf0\xe9\xc2\xbf\x4a\xfe\x5f\ +\x1c\x9f\x71\x41\x85\xa5\xe0\x52\x60\x12\xff\xec\x0d\x23\x6e\x71\ +\x9b\x9c\x92\x15\x1d\x0d\x2d\x25\x6b\x1a\x22\x52\x14\x63\x4e\x48\ +\xa8\x59\x53\xd2\x62\x68\x80\x8c\x9a\x12\xc5\x98\x92\x98\x44\x0a\ +\x37\x30\x6c\x49\x18\x01\x8e\x06\x85\xa1\xc6\x60\x88\x89\xe8\xa8\ +\x58\x33\xa1\xa1\xa2\x65\x43\x47\x4d\x4a\x07\x82\x58\x75\x34\x54\ +\x7c\x49\xc4\x29\x53\xa7\xd5\xee\xb4\xbc\x72\xd4\xd8\x41\xe5\xfe\ +\xd0\x6d\xef\x5e\x7e\xf5\x84\x82\x48\xea\x8a\x8a\x85\xd4\x80\x2d\ +\x0d\xb7\x78\x93\x63\x34\x4b\xce\x58\x70\x8b\x86\x92\x12\xc8\x99\ +\x30\x66\xc6\x88\x31\xb0\x41\x13\xd3\xb1\x06\x1a\x1a\x34\x39\xe0\ +\x88\x50\x18\x22\xa9\x5e\x5b\x14\x5b\x4a\x5a\x2a\x2a\x09\xdd\xb7\ +\xd8\xe0\xc8\x58\xb1\x25\x65\x83\x96\x1c\x53\x71\xc5\x86\x39\x9a\ +\x44\xa2\x86\x22\x42\x73\xc1\x3d\x32\x22\x37\x57\xec\x5d\x8d\xeb\ +\x60\x84\xe8\xc5\xa2\x85\x37\x48\xc3\xfa\xab\x73\x9e\x70\xc9\x9a\ +\x86\x42\x52\xe1\x1a\x87\x21\xe7\x16\xb7\xb8\x85\x62\x2d\x29\x8e\ +\xcf\x04\x63\x62\xc6\x9c\x70\xc4\x29\x19\x09\x0d\x4b\xb4\x9c\x06\ +\x0d\x54\x38\x49\xd5\x54\x00\x63\x41\xa1\x71\x28\x32\x34\x19\x05\ +\x15\x2d\x73\x22\x0c\x15\x11\x31\x31\xd0\x61\xe9\x68\xd1\x82\x50\ +\x74\x38\x6a\x89\x38\xb1\xc0\xbd\x4b\x2e\x39\x11\x2c\xfc\x7b\x45\ +\x0d\x35\xb8\x1a\x96\xea\xd3\x35\x2b\x96\x5c\xb1\xa6\xa1\xa3\x0e\ +\xb9\x7f\x4a\xc2\x0d\xa6\xf2\x2c\xbd\x63\xad\x25\xce\x27\xdc\xe0\ +\x35\x8e\x99\x13\x11\x51\x4b\x47\xa3\x22\x95\x3a\xa3\xa3\xa5\x93\ +\xd4\xbb\xa3\x13\x5c\xa3\xa3\x20\x65\xca\x98\x94\x44\x12\xa6\x8c\ +\x84\x05\x8e\x91\x9c\x4f\x25\x91\x43\x91\x32\x66\x85\xa5\xa5\xc0\ +\xd2\x92\x12\x49\x0d\x73\xc6\x9c\xd4\x45\x2a\xf9\xbe\x51\x43\x0d\ +\xf0\x06\xdf\x7e\x89\x80\x92\x92\x88\x9a\x1a\x48\xc9\xc8\x89\x49\ +\xa9\xa9\xe4\x2b\x36\x5c\x91\x63\x48\x49\x98\x72\x93\x1b\x1c\x61\ +\x30\x18\x14\x53\x20\xa3\x61\x43\x4a\x4c\x41\x45\x43\x4d\x87\x91\ +\x53\xd6\xd2\x61\xb1\x68\x1a\x5a\xa9\x42\x33\x14\x1b\x34\x19\x15\ +\x0d\x19\x8e\x82\x58\xaa\xd5\x92\x4e\xea\x93\x86\x5a\x6a\x9d\x96\ +\x18\x83\xe3\x82\x87\x8c\x48\x88\xdc\x4c\x99\x57\x2f\xba\xdc\x41\ +\x87\xaa\xa1\xa4\x09\x5d\x84\x86\x82\x0a\x18\x33\x25\xc2\x31\x01\ +\x1a\x36\x54\x94\x6c\xa8\xc9\x49\x98\x73\xc4\x11\x27\x1c\x33\xa6\ +\x22\x12\x18\x25\xa7\xa6\xe3\x31\x63\x72\xc1\x28\x15\x35\x11\x25\ +\x6d\xf8\xfe\x8a\x31\x8a\x08\x47\x85\x0d\x7e\x43\x03\x1d\x86\x54\ +\x4a\x39\x0f\xf0\x57\xb4\x94\x8c\x70\xe1\xba\xb4\x18\x36\x54\x28\ +\x72\x52\x62\x52\xa2\xdf\x4d\x3f\x7a\xc5\x5a\xc3\xed\xfd\xde\xd1\ +\x7c\xbc\xe6\x9c\x4b\x96\x14\xb4\x68\x29\xa5\x52\x26\x4c\x71\xd2\ +\x7e\x71\x6c\x79\x4c\x4d\xca\x11\x13\x66\xdc\xe1\x94\x19\x53\x46\ +\x24\x18\x01\x54\x1c\x09\xad\x3c\xf1\x92\x15\x0b\x96\xac\xa9\x28\ +\x71\x74\x40\x14\x20\x3a\x1f\x23\x1c\x25\x96\x96\x88\x0d\x31\x8e\ +\x92\x08\x43\x22\xd7\x28\x17\x8f\xe3\x42\x81\xee\x30\x68\xe9\xa3\ +\xb5\x6c\xb8\x60\xc4\x09\xb3\x0f\x27\xdf\x99\x68\x47\xcf\xf3\x0f\ +\x48\x29\x64\x59\xfc\xf6\x8c\x33\x96\x14\x6c\xd8\xd2\x51\x63\x18\ +\x33\x66\xce\x98\x06\xcb\x43\x60\xcb\x25\x15\x19\x47\x4c\x38\xe5\ +\x88\x9b\x1c\xf9\xa3\x89\x26\x0b\xd8\x76\x2c\x00\x7d\x47\x4b\xc1\ +\x8a\x25\x6b\x1a\xbe\xa5\xa5\xa1\xa6\xa6\xa0\xa0\xa2\x42\x49\x38\ +\xf4\x10\x6d\xcb\x8a\x12\xcd\x86\x98\x29\x09\x0d\x2d\x5b\x52\x0c\ +\xbe\x01\xe8\xaf\xad\xc1\x4a\x44\xf3\x0e\x73\xcb\x25\x19\x0b\x4e\ +\xbf\x8f\xb3\xec\x9b\x69\xde\x79\x5d\x72\xc9\x06\x2b\xdf\xbe\x22\ +\x25\x21\x66\xca\x84\x14\x03\xfc\x99\x0d\x6b\x34\xa7\xbc\xc1\x14\ +\xcb\xeb\x62\xa4\x48\x7a\xdc\xb9\x54\x11\x4a\x92\x70\x1f\x8d\x26\ +\x4c\x98\x0b\x1c\xe7\x6b\xcb\x82\x2b\x2e\xd9\xd2\xa0\x31\x74\x58\ +\x0c\x13\x46\x5c\xd0\xd1\xa1\xa9\x70\x38\x12\x14\x5b\x6a\x3a\x12\ +\xc0\xa0\xb1\x68\x29\xbf\xac\xb8\x50\x5f\x9a\xd5\x18\x2e\x58\x7f\ +\xbf\xa8\xe1\xb0\x18\x0c\x57\xee\x1b\x16\x58\x12\xd6\x3c\xe2\x9c\ +\x0a\x85\x62\xc6\x31\x29\x1b\x1e\x70\xce\x9a\x4b\x20\xe1\x98\xdb\ +\xdc\xe6\x98\x84\x23\x66\xcc\x88\x68\xb1\x44\xc4\x12\xe3\xfb\x80\ +\xec\xdf\xa2\xc2\x90\x4b\x1a\x95\x53\x51\xd0\x60\xa9\x29\x28\xb9\ +\x92\xe4\xbc\x93\x40\x1b\xf1\x3a\x35\x25\x9a\x92\x4b\x72\x14\x11\ +\x31\x06\x43\x42\x84\x61\x2d\x10\x4e\x43\x23\xc5\x79\x42\x47\x4d\ +\x4e\xc9\x7d\x72\x5e\x77\x73\xa5\xf6\x4a\xc7\x97\x0a\x9f\x1a\x47\ +\xc5\x15\x0f\xd8\xd2\x50\xb2\xe6\x9c\x2b\x22\x66\xdc\xa6\xe4\x5b\ +\x2a\x4a\x2a\x4a\x1a\x0c\x09\x13\x6e\x72\x9b\x53\x8e\x48\xc9\x48\ +\x42\xd3\x57\x4b\x5e\xe0\x06\x08\xb2\x1e\x70\x1a\x14\x9a\x13\x6a\ +\x2a\x81\x5a\x4a\xc1\xac\x4a\x0a\x4a\x5a\x3a\x1c\x09\x5b\xb6\x24\ +\x18\x22\x20\x26\x11\x88\xd6\x10\x91\x62\xa4\x5b\xde\x49\x6e\xea\ +\x41\xc4\x1e\xff\x7e\x42\xca\x3b\x70\x31\x3b\x51\x07\xdd\x96\x17\ +\x30\x84\x95\x63\xdc\xb2\x76\x4f\xf8\x36\x40\x64\x35\x96\x9c\x9b\ +\x64\xac\xb9\x60\x25\x57\x48\x91\x33\xe5\x36\x6f\xf2\x1a\x37\x98\ +\x08\x9a\xe0\x3f\xa2\x31\x21\x37\xdd\xfd\xab\xa5\x14\x52\x68\x2c\ +\x0e\x45\x44\x22\x65\x5d\x43\xc3\x11\x96\x9a\x2d\x5b\xd6\x14\x12\ +\xa8\x63\x0a\x22\x12\x3a\x14\xa9\x64\x31\x8a\x58\x8a\xfb\xde\x9b\ +\xb5\x74\xb4\x6c\x71\x74\x8c\x04\x1b\x1d\x71\xc1\xcd\xe3\xe9\x33\ +\x0b\xf2\xe7\xe6\x11\x96\xfa\xe3\xad\x60\xc7\x0d\x5b\x5a\x12\x66\ +\x4c\xc9\xb9\x60\x8b\x66\x24\x21\xad\x25\xe7\x26\x6f\x73\x87\x63\ +\xc6\xe4\x24\xb4\x62\x79\x1f\x2d\x76\x67\x4c\x1d\x9c\xb8\xde\x60\ +\xde\xe7\xf7\x6d\x01\x45\x8e\xa3\x63\xcc\x96\x94\x35\x55\xc0\x20\ +\x0c\xb1\x74\x40\x8d\x54\x25\xbe\xfb\x11\x0b\x6e\xdd\x52\xd1\xd2\ +\x52\x48\xd7\x5d\x33\xe6\x84\xdb\x9c\x32\xfe\xcc\xbc\x8a\x8f\xd0\ +\xf2\x8d\xca\xdf\x96\xc0\x84\x35\x57\x2c\x68\x18\xe1\xd0\x2c\x79\ +\x82\x22\x11\x1f\x60\x88\x78\x9b\x9b\xbc\xce\x31\xa9\x27\x7e\xd0\ +\x02\x9a\x98\x48\x5e\xa8\x0a\xff\xf4\x26\xde\xb1\x5d\xf4\xa0\xa8\ +\x73\x52\x76\x39\x34\x5a\xcc\x18\x53\xb1\xa4\x91\xaa\x24\x93\x0b\ +\xa9\x89\x04\xcc\xdd\x99\xcf\x49\xf5\xd1\xe7\x14\x8a\x35\x09\x27\ +\xfc\x8c\x37\x3f\x9b\xfe\x86\xd0\xf6\x79\x69\x67\xd9\x7d\x5c\x52\ +\x48\x82\xe2\xf1\x80\x11\x0d\x1b\x56\x82\x30\x54\x94\x68\x66\xcc\ +\xb8\xcb\x8c\x39\x39\x0a\x47\x4d\x23\x2f\x49\x63\xa4\x80\xd7\x03\ +\x3c\xa2\x0f\xcb\xc3\xee\x53\xff\x46\xfa\x7c\xa0\x09\x9e\x45\x11\ +\xd3\x08\x16\xb5\xa1\x95\xcc\x76\x41\x24\xa7\xa1\x4f\xcd\x3b\x81\ +\xed\x1a\x71\xf2\x2d\x8d\x3c\x14\x4d\x46\xf2\x1b\x7f\x5e\xa2\x6b\ +\x4d\xf1\x7c\x60\xe6\x6e\xc3\x92\x73\x16\x9c\xe3\x18\x31\xc2\x52\ +\x52\xb0\x05\x6a\x2a\x4a\x2c\xc7\xbc\xc9\xdb\xbc\x49\x42\x86\x91\ +\x00\xe6\xdf\x9a\xde\x33\x02\x03\x5a\x87\x3b\x00\x82\xa1\x93\x0b\ +\xd4\x17\x5d\xf1\x80\x1e\xa4\xa5\xab\x31\x62\x49\x23\x78\x83\x0e\ +\xde\xa5\x95\xb3\xd3\x49\x20\x75\x18\x2c\x8e\x8a\x12\xe5\x5b\x8d\ +\x3c\xe0\x3d\x77\xa4\xcc\x20\x6e\xbd\x64\xd4\x50\xf7\x5a\x7c\x46\ +\x79\xce\x94\x39\x39\x2b\x36\xac\xa9\x49\xa8\xa9\x68\xc8\xb9\xc5\ +\x4f\x79\x8f\x4c\xb2\x84\xfe\xc6\xab\x70\x7b\xad\xfc\xee\x90\x50\ +\xb6\x9f\xf2\xba\x80\x2d\x1a\x79\xb2\xfd\xdf\xfa\x0e\xc5\x48\xfa\ +\x5d\x05\x56\x80\x7c\x8f\x4f\x35\xf2\x3d\xbc\xe1\x7c\x46\xd1\x5f\ +\x4e\x7f\xb1\x1a\x1e\x73\x8f\xbf\x23\xff\x78\xfc\xf9\xb3\xe0\xdc\ +\xef\xe8\x74\xf9\x4f\xae\xb9\xef\xfe\x89\x2f\x29\x78\xc4\x09\xc7\ +\x38\xce\x78\xc2\x96\x8e\x52\x90\xe5\xd7\xf9\x37\xbc\xcf\x8c\x34\ +\xf8\x00\x7f\xe8\xe3\x90\xf3\x31\xb8\x14\x4a\x7c\x82\x12\x1c\xba\ +\x6f\xdf\x80\x19\x38\xe8\xbe\xf0\xea\x42\x42\x67\xa5\xe4\x2f\xd8\ +\x4a\xc5\xb3\x11\xc4\xbb\xa1\xa4\x12\xa6\x95\x93\xf0\xdb\x08\x7e\ +\xf5\x10\xcb\xeb\xb4\x74\xbc\xcb\x7f\xe4\xdf\x73\xaa\x90\xcc\xf3\ +\x25\x33\xcb\x21\x60\xab\x68\x58\xd3\xb2\xa5\x45\x61\x98\x60\x88\ +\x19\xf3\x0e\x77\x98\x92\x0d\x0e\x72\x4f\xd8\xd0\x72\xf3\x19\xb8\ +\xc9\xde\x0c\x43\x0e\xc3\x21\x1d\x6c\x98\x5f\xf4\x57\xcc\xca\x53\ +\xb7\x58\x69\x09\xfb\xfb\x5e\x0b\x24\xac\xa9\x71\x12\xf2\x7d\x2d\ +\xe2\x48\x29\x39\xa7\x24\xa6\xe5\x09\xf7\xf8\x19\x37\x9f\x09\xef\ +\xbf\x40\x5f\xa3\x7f\xca\x31\x1d\x5b\x5a\x29\x71\x3d\xe9\x6f\x3c\ +\x88\x14\x51\x78\x3b\x7a\xf0\x76\x77\x7d\x72\x73\x60\x90\x3e\x70\ +\xda\x70\x86\x76\x89\x8e\x0a\x6f\x5d\x85\x33\xe4\xb3\x0e\x8d\x26\ +\x16\x28\xbf\xa3\x21\x11\x40\xb7\xe6\x52\x7e\x72\x84\x21\x07\x1a\ +\x8e\x58\x71\x25\xc8\x47\xc5\x57\x9c\xf1\x36\xf1\xab\x60\x96\x7d\ +\xc1\x93\x90\x48\x09\xdd\x81\xa0\xce\x8a\x15\x09\x23\x4e\x38\x22\ +\x0d\xb4\x8c\x9d\x29\xf4\x81\xd5\xd5\x9e\x11\xd8\x0b\x79\x56\x6e\ +\xf5\xfe\x67\x0f\x19\x37\x7d\x62\xe6\x82\x89\x7d\x4f\x34\xa2\x95\ +\xd8\x14\xb1\x91\xd8\xa1\x89\x84\x56\x60\x98\x30\xc1\x62\xc9\x18\ +\xd1\xd2\xd2\x3d\xf3\x0d\x47\xcf\x6f\xe9\x18\x61\x2c\xf4\x81\xac\ +\x27\xf5\xf9\xca\xe2\x88\x31\x69\xe8\x88\x0e\x9f\xe9\xae\x05\xa0\ +\x0f\x28\x86\x87\x94\x82\x3e\x03\x75\x83\x7c\x43\x4b\xb7\xb5\xaf\ +\x78\x6c\xc8\x3c\x34\x31\x56\x12\xa8\xfe\xc4\x59\x20\x97\xae\x4a\ +\x6f\xaa\x9c\x8e\x11\xb7\x39\x63\xc1\x8c\x9b\x1c\x93\x85\xcb\xf3\ +\x74\xdc\x78\x01\x84\x4a\xcb\x97\x76\x18\x22\xb1\xbf\xff\x41\x19\ +\x53\xa6\xa4\x20\x8c\xb7\xdd\xdb\xfa\x6e\x66\xb4\x1b\x98\xf9\x59\ +\x6d\x5a\xff\xfc\x87\x0c\x6c\x2d\xdc\x19\x9f\xb2\xfb\x9a\xb6\xbf\ +\x62\x16\x18\xd3\x50\xd2\x06\xbf\x34\xa7\x64\x4e\x4a\xc9\x19\x96\ +\x39\x6f\x09\x41\xf1\x15\xf1\x08\x27\x00\x47\x2d\x66\xf0\x07\xd9\ +\x60\x88\xc8\x98\x30\x22\x96\x00\xe9\x5f\xaa\x93\xec\x61\x68\x8e\ +\xa1\x83\xd4\x07\x3c\x26\x35\x68\x2e\xab\x3d\x6a\x8f\x0b\x27\x03\ +\x81\x8f\x11\xc2\xb2\x22\x96\xb3\xd1\xc9\x75\x00\x25\x3c\xba\x3a\ +\x5c\xcc\x88\x88\x39\x9a\x05\x4f\xe8\x24\x2b\x1e\x46\xaf\x97\x8e\ +\x1a\xde\x0c\x95\xf8\x09\x27\x04\x1f\x43\x4c\xce\x84\x09\x29\x4e\ +\x3a\x57\xfd\x5b\xe8\xa9\x3d\x7a\x60\x06\x2d\x4f\x4f\xed\x71\x59\ +\xf4\xe0\x59\x5f\x47\xe5\xd8\x77\xad\x8e\x88\x2e\x54\x16\x7d\x55\ +\xdb\x9f\x94\x4a\xc0\x98\xfe\xf0\x37\x28\x46\xe4\xdc\xe2\x8c\x15\ +\x2d\xe7\x14\xc1\xb0\xaf\xe4\x23\x34\x09\x39\x39\x8d\x54\x0d\x11\ +\x9a\x84\x98\x9c\x37\xb8\x81\xc1\x92\xa2\xa9\x49\x06\x1d\xf3\x9d\ +\xb3\x53\x21\x54\xea\x01\xbd\x60\xc7\x6b\xda\xfd\x33\xf4\x26\xfe\ +\xab\x5a\xc9\x23\x08\xd9\x86\x96\xef\xea\xe1\xb9\xfe\x6d\x45\x02\ +\xdf\x44\x74\x81\x7a\xe6\xb0\x82\x6c\xbe\x86\xe2\x1e\x8f\x51\x94\ +\xb4\x1f\xa4\x5f\x74\xa1\x5c\x7b\xc9\xbe\x86\xa5\x11\x04\x29\x66\ +\x84\xa2\xc5\x11\x11\x0b\xd0\x1e\x85\xb2\xc8\x3d\x15\x1f\x86\x66\ +\xe1\xa9\xa2\xeb\xba\x4b\xe0\xf6\x3a\x6c\x87\x83\x0d\x6e\xef\xcf\ +\x26\x50\x09\xd8\xfb\x73\xef\x33\x1a\x34\x2d\x63\x32\x2c\x05\x8a\ +\x98\x96\xf6\x0f\x4e\xbd\xa2\xb3\x74\x58\x6a\x6a\x4a\x22\xc6\xe4\ +\xd2\x7f\x82\x88\x91\x74\xad\xd5\x20\xee\xef\x07\x3f\x75\x60\x98\ +\x7d\x33\xec\xa2\x8b\xba\xa6\x02\x3d\x74\xb1\xea\x20\xf5\xea\x83\ +\x28\x21\xec\x1a\xb9\xba\x5d\x30\x65\x4d\x2b\x4c\xef\x4a\x1a\xcc\ +\x0d\x36\x44\x38\xf5\x72\x3e\xc2\x09\x40\x6e\x31\x64\x4c\xb0\x94\ +\xf2\xe3\x23\x71\x8e\x96\x76\x2f\xe2\xab\x80\x4c\xee\x67\x92\x4f\ +\x67\x11\xbb\xe6\xf2\xf0\x49\x0e\xa3\xca\xae\xed\xf8\x34\xb3\xd3\ +\x60\x31\x82\x59\x7b\xaa\xa1\x23\x11\x9e\x96\xa6\x23\x92\x14\xdc\ +\xa2\x89\x89\x49\x25\x0e\xbd\x32\x3f\xa2\x47\x8f\x8e\x38\x66\x46\ +\xcb\x46\xf2\xb7\x68\x8f\x71\xab\x0f\x12\xec\xc3\x74\xfa\xe9\xf4\ +\xf9\xba\xc2\x4b\x85\xb9\x9c\xde\x99\x76\xe1\x9a\xa8\x6b\xd2\x70\ +\x27\xa0\xad\xa1\x45\x13\x85\x41\x98\x36\x60\xd9\x3d\x2e\x12\xc9\ +\xe9\xed\xd3\x3e\xfd\xf2\x86\xf0\x00\x6b\x47\x4e\x82\xa1\xa2\x96\ +\xaa\x2e\x92\x26\xec\x0e\xdb\x3c\xac\x13\xfa\x68\xc1\x41\x03\xf6\ +\xba\x68\xee\x0e\x48\xc2\x87\x79\x86\x1a\x64\xaf\x87\x59\x8e\x7f\ +\x1d\xad\x64\x98\x0c\x2e\x97\x12\xd2\x4a\xcc\x88\x9a\x86\xfa\x99\ +\xd4\xd3\x17\x32\x44\xcc\x18\x43\x1c\x30\x4b\x27\x00\xaa\x0b\xd4\ +\x73\x06\xfc\xaa\xdd\x91\x1f\xba\x4a\x37\xf8\xa8\x3b\xe0\x46\xbb\ +\xa7\x38\x9b\xbb\xb3\xa1\xf6\xd0\xad\x5d\x72\xd5\x0d\x4c\x61\x88\ +\x24\xae\xf4\xf1\xc0\x05\x3c\x14\x39\x11\x39\x25\x1b\xd6\x34\xa4\ +\xd7\x9a\x42\xbf\x88\x21\x22\x12\x72\xb2\x10\xa5\x3d\x0f\xd2\x06\ +\xb0\xcd\xc9\x8b\x50\x7b\x6f\xfa\xb0\xbe\xd8\xb5\x93\xdd\x35\xc3\ +\x47\x6e\x10\xf8\x5e\x84\xda\xa6\x0e\x9c\xa8\x1e\x94\x7b\xc3\xbc\ +\xc5\xd2\xd1\x08\xbe\xbd\x66\x43\xf3\x01\x2f\x8b\x50\x59\xf9\x66\ +\x11\x63\x26\x6c\x89\x85\x1a\x94\x61\xc8\xc9\xc9\x48\x42\xc6\xa7\ +\xc2\xad\x1b\xbe\xf1\xc3\xcc\x80\x01\x5b\x46\xc9\xed\x77\x52\x4e\ +\x69\x6a\x31\x96\x1e\x9c\x10\x04\x01\xdf\x75\x43\xfa\xf6\x90\x95\ +\x9c\xa1\xa5\x95\xd7\x35\x24\xb0\x3b\x69\x34\x3b\xc9\x83\x23\x62\ +\xe6\x38\xd6\x54\x7f\x98\xa8\x57\xa2\x17\x7a\x32\x4e\x42\x41\x23\ +\x00\x98\x96\xbe\xb6\x13\x94\x48\xbd\xf0\xac\x8c\x3b\xf0\x08\x2e\ +\x14\x52\xee\x9a\xab\x72\xf8\xa7\x1e\xac\x77\x21\xc7\xf0\x81\xbd\ +\x0e\xfd\x8b\xdd\xd5\xda\x65\x90\x56\x00\x1e\x2b\xae\xb3\x09\x90\ +\xe0\x4b\x1a\x42\x13\x5f\x66\xc7\x09\x4a\x9c\xa4\x15\x42\xb1\x11\ +\x0c\xc9\xed\x11\x3b\xae\x4b\x8f\x87\x6f\x69\x3f\x3f\x19\x5e\x14\ +\xb7\x67\x9e\x43\x43\x38\x71\x96\x36\x54\x16\x86\x8e\x8e\x5a\x5a\ +\xd1\x5a\x20\xba\x9d\xd7\x70\x72\xea\x5a\xaa\x60\x8a\x56\x98\x57\ +\xd7\x3d\x3a\xfd\xdd\x4f\xd0\x01\xd1\x47\x89\xdc\xb5\x96\x46\x0a\ +\x2e\x35\x78\x36\xfb\x07\xdf\x1d\x20\x52\xd7\x99\xc1\xed\x99\xc0\ +\x0e\x00\x3b\x2b\x7f\xe3\xa4\x1e\xd9\x37\x95\x0b\xe0\x1d\x82\x88\ +\x3a\x5a\x5a\xc1\x26\x5c\x38\x2b\x2a\xb4\x8f\x9d\x34\x96\x5b\xb9\ +\x4c\xdd\x33\xc9\xa7\x2f\xc0\x8f\xd0\x5f\x68\x2c\x15\x48\xac\xde\ +\xa5\x39\x1c\x60\x58\xea\xa9\x13\xa5\x9e\x82\x67\x0e\xcd\xe2\x0e\ +\x80\xfd\xe1\xef\xd5\x33\xda\x42\x04\x3a\xba\x11\x6c\x42\x07\xcf\ +\x42\xc0\xcc\x3b\xb4\xf4\x48\x9c\x34\xa1\xf4\x5e\xd7\xed\x15\x08\ +\xa7\x96\x86\x92\x48\xea\xff\x58\x52\x29\xbd\x97\x33\xee\xa7\xad\ +\xea\x19\x66\xd8\x9f\xad\xea\x61\x3a\x75\x70\x1d\xd8\xab\x36\x86\ +\x95\xcb\xae\x9d\xe3\x24\x9b\xcc\xa5\xdf\x89\x10\x0d\xf5\xe0\xea\ +\xf5\xb5\xb3\x91\xb7\xaf\xbf\x83\x97\xfd\x42\xe0\x6d\x27\xd8\x4f\ +\x0b\xc2\x80\x8f\x9e\x42\x1d\x9e\x9e\xa1\x52\xd7\xfc\x59\xed\xa5\ +\xd6\x7d\x6c\xb2\x52\x4a\xbb\x41\x0e\xa1\xf6\xfa\x60\x9e\xff\xa0\ +\x03\x7c\x67\xe5\x6d\xfb\x8e\x67\x89\xa5\x19\x44\xb0\x5d\x33\xc0\ +\x8a\x89\x7a\x44\xbd\x27\x25\xbd\xa2\x21\x7a\x27\xd5\x84\xe7\x12\ +\x89\x85\xf5\x53\x9e\xe0\xe9\xa2\x8a\xa7\x4e\x89\xdb\xcb\x00\x86\ +\x39\x81\xdb\x23\xa8\xec\x17\x6d\x36\x54\xa8\x7d\x8f\xb3\xef\x7c\ +\x6a\x2c\xed\x00\x96\x55\x03\xe7\xb7\xc3\x50\x23\x39\x1f\xf6\x65\ +\x33\x4b\x1b\x92\x14\x4b\xc3\x48\x6a\xce\x58\x7c\x71\x2c\x63\x47\ +\x5d\xc8\x37\xfc\x8b\xea\x68\x65\xd6\x8a\x81\x2f\x51\x32\xdf\xed\ +\xf9\x8f\x56\x2e\x96\x0d\x1f\x69\xa8\xa9\x42\xfe\x21\x4e\x5a\x7a\ +\x97\x4a\xee\x7f\x47\x23\x90\xa0\x05\x19\x93\xf6\xf0\x40\x42\x4b\ +\x23\x8e\x3c\x06\x69\x15\x23\x7c\x3d\x23\x8c\xfe\x29\x2d\x15\x6b\ +\x21\xa8\xbc\x34\x9c\xef\xe8\xee\xfa\x16\x4a\x27\x2d\x5d\x3d\x80\ +\xdc\x87\x35\x6a\x86\x13\x9a\xb8\x91\x82\x57\x87\xca\xd0\xec\xc1\ +\x76\xfe\x2c\xb5\xa1\xe5\xdb\x33\x6a\x86\x10\xcd\x2e\x67\xd0\xf2\ +\xff\x48\x60\x39\x23\x28\x59\x29\x83\xb6\xbe\xac\x8a\x83\x63\x74\ +\x12\x23\x08\xdf\xad\x67\x62\x9b\x80\xbf\xaa\x97\xcd\x23\x1c\x96\ +\xf6\x77\x95\xb4\xe1\x3d\x21\xa3\x0b\x17\x64\x97\x52\xfb\xe3\xd6\ +\xca\x33\x89\xe8\x84\x14\xe0\x06\x35\x43\x2c\x2f\xc7\x0e\xfc\x87\ +\x09\xc7\x37\x92\xd6\x9d\x0d\x9f\x5f\x87\xf8\xa1\xa4\x73\xa6\x06\ +\x6e\xd6\x9b\x3c\x09\x0d\x67\x2d\x6f\xbd\x1b\xc4\x1d\x1b\xfc\x89\ +\x11\xfc\x3a\x7a\xf5\x32\xdc\xe1\x7e\xe9\x6f\x67\x4a\x4c\x24\xbd\ +\x81\xec\xe0\x9b\x3a\x2c\x6b\x10\xdf\xd1\x48\x73\x58\x87\x52\x59\ +\x63\x48\x50\xd2\x1a\xea\xf1\x84\xde\x23\x34\x92\x58\x77\x83\x48\ +\xaf\x42\xbe\xb8\xff\x7b\x27\xcc\x28\x2d\x20\x0c\xf4\x3a\x24\x5a\ +\x4a\x70\x27\xa7\xb5\x16\x23\x28\x31\x42\x43\x3e\x98\xfe\x7b\x89\ +\xab\xe1\x06\x18\x63\xc2\x58\x80\x8d\x8a\x56\xa6\xfb\x4d\xf8\x11\ +\x4a\xe0\x90\x84\x14\x2d\x94\x41\x3f\xd4\xac\x85\x11\x97\x91\x50\ +\x91\x30\x62\x2c\x06\x88\x04\x69\xd6\x74\x94\x01\x05\xb7\x83\xe8\ +\x61\x07\xa9\xb4\x15\xb2\x80\x91\xb3\x86\xd0\xd4\x7d\xc7\x2b\x0e\ +\x4d\x67\xa4\x27\xee\x06\x73\x3e\x04\x94\xdb\x8f\x3e\xb8\x97\x47\ +\xa8\x76\x9f\x94\xc9\x45\xf0\xe0\x57\x4a\x4e\x26\x13\x17\x36\x70\ +\xe2\x33\xe1\xc1\x9e\xf1\x90\x2b\xc1\xb1\x7a\xb7\x97\x92\xf2\x90\ +\x11\x73\x66\x44\x92\xa6\xcf\x88\x99\x32\x16\x27\xaa\x07\x59\x9f\ +\xdb\x8b\x19\xfb\x25\x7b\x2b\x97\xae\x93\x39\xd0\x46\x1e\x94\xa1\ +\x0c\xaf\xb7\xa3\x91\xec\x62\xe7\xaa\x7d\xf8\x4d\xbe\x0f\x42\x85\ +\xf4\x35\x5b\x71\x5d\x09\x53\xa6\x8c\x30\x02\xec\x23\x2e\x71\x8d\ +\xa3\xe4\x82\x6f\x79\x42\x25\x2d\x7c\x3f\x01\xe8\x69\x5e\x6b\x12\ +\xc6\x8c\x85\xd5\x92\x73\x87\x9c\xdb\xdc\xc4\x50\xa1\x19\xc9\x74\ +\xe7\x21\xb6\xb9\x03\x64\x94\x70\x7d\x15\x9a\xad\x0c\xcb\xf8\x41\ +\x05\x3f\xf5\xd3\x08\xc8\xbf\x33\x87\x0d\xd7\xc4\xb3\x26\x22\x61\ +\x7c\x5e\x97\xa9\x3e\xc7\x59\x0e\x59\x6f\x9d\x1c\xe6\x8c\x31\xb9\ +\xb8\x2e\x1b\xfa\x97\x8a\x7b\x14\x5c\xf0\x80\x73\x6a\x91\xc5\xf0\ +\xdc\x99\xad\x30\xac\x33\x1a\x61\x36\x39\x12\xc6\x28\x46\xe2\xea\ +\xae\xe8\x98\x30\x93\x2e\x6b\x2a\xa0\xb0\x1d\xe4\x95\x08\x3b\x6e\ +\x29\xfd\x95\x25\x0f\x78\x80\xc2\xb2\x65\x0b\x8c\x19\x71\x84\x21\ +\x13\x98\x06\x14\xd5\x20\x87\xf0\x45\x5a\x14\x62\xde\x77\x46\x0d\ +\x7b\x00\x91\x3a\xc9\xd9\x7b\xbe\x41\x24\x93\x38\x53\x32\x0c\x11\ +\x0d\x2d\x39\x9a\x9a\x98\x96\x3f\x73\x9f\x0b\x2e\xa8\x88\x39\xe6\ +\x84\x09\xb0\xa5\xa1\xe1\xb1\xd0\x4a\x52\x20\x65\x4a\xc1\x9a\x88\ +\x91\x50\xda\xad\x28\x44\x4c\x79\x44\xc6\x9c\x13\xe1\xca\x38\x1c\ +\x35\x29\x46\x98\x96\x25\x9a\x15\x8f\x59\x12\x63\x38\xe3\x01\x8f\ +\x68\x65\x84\xa5\x22\x61\xca\x9c\x88\x29\xb7\x38\x0a\x19\x8a\x1b\ +\xcc\x00\x2b\xa6\xd4\x24\xcc\x07\x19\xed\x33\x0c\xa1\x0f\xda\x7d\ +\x5a\x32\xb1\x86\x3a\x38\x9d\x28\x24\x52\x9e\x23\xe1\x7f\xe0\x92\ +\x4b\x1e\x00\x09\x33\x12\x4e\xb8\xc9\x94\x94\x8a\x9a\x2d\x0d\x6f\ +\xf0\x33\x1e\xf2\x84\x2b\x2c\x8a\x8c\x09\x29\x96\x25\xaf\xb1\xe2\ +\x42\x32\xbe\x9a\x05\x05\x73\x8c\x74\xaf\xad\xa4\xf0\xc3\xb3\xb9\ +\xe2\x8c\x6f\xb9\x40\xa1\x59\x71\x8e\x9f\x2a\xae\xa8\x28\xd8\xb0\ +\x62\x49\xc4\x98\x25\x13\x52\x72\xc6\x02\xf4\x37\x32\xc6\xc0\xc1\ +\x95\x78\xc1\xab\xe1\x64\x30\xa1\x67\x4f\x1b\x0c\x85\x70\x99\x12\ +\xe9\x80\x1a\x8c\xf4\x1b\xcf\xf9\x92\x0b\x12\x22\x6e\x72\x83\x5b\ +\xcc\x89\xe8\x18\x13\x51\x53\x11\xa1\x79\xc4\x3d\xbe\xe2\x9c\x73\ +\x96\xdc\xe0\x98\x88\x96\x35\x25\x31\x25\x11\x25\x15\x0d\x6b\x32\ +\x89\x23\x3b\x6a\x88\x0d\xdd\xae\x96\x15\x57\x3c\xe1\x02\x45\xc4\ +\x96\x0d\x2d\x75\x68\x36\x55\x54\x6c\x88\x18\xb3\x25\x23\x63\xc2\ +\x94\x19\x63\x22\x0a\xac\xc8\xf4\xc8\x49\xbf\xd4\xcf\x33\x84\x3d\ +\xf8\xb0\xc5\x12\xe3\x58\xf3\x2d\x8f\x50\x4c\x25\x06\x18\xa9\x3f\ +\x95\xcc\xdf\x44\xac\x79\x02\x8c\x18\x73\xc2\x9c\x29\x09\x2d\x2d\ +\x39\x19\x33\xe9\x2c\xdc\x62\xc4\x31\x0f\xf9\x9a\x2b\x20\x66\x44\ +\xc7\xa5\x38\xcf\x86\x0e\x4b\x4c\x4a\x4e\x8e\xc1\x49\xc1\xdc\xe7\ +\x14\x25\x86\x8e\x82\x0b\xae\x28\xe8\x30\xc2\x74\xd8\xd2\xe2\x48\ +\x98\x30\x62\x43\xc9\x45\x80\xf2\x4b\x0a\x56\xb4\x18\x26\x44\x74\ +\x32\xf3\x23\xc8\xea\xbd\x57\xe0\x59\x6a\x14\x9b\x0f\xbe\xe4\x3f\ +\xb3\x21\xe5\xef\x24\x19\x76\x18\x91\x3c\xb1\x42\x51\xb7\x8c\x19\ +\xf1\x2e\x53\xc6\x92\x3c\xf9\x63\xbd\x95\xb4\x67\x4b\xcb\x94\xb7\ +\xb9\xc3\xbb\x3c\xa1\x20\x26\xc7\x90\x01\x19\x29\x29\x96\x12\xc8\ +\x18\x13\x61\x69\x42\xea\x6d\x05\x95\x74\xb4\x6c\x79\xc0\x05\x25\ +\x0e\x47\xc5\x8a\xb5\x38\xc3\x58\x94\x03\x1c\x09\x0d\x05\x2d\x39\ +\x29\x85\x24\xe4\xa7\x81\x75\xe9\x06\x88\x85\xbb\x06\x3d\x89\x9e\ +\xcd\x60\xf0\xb5\x44\xf9\x87\x07\x14\xcc\x98\x85\x32\xa6\xc7\x05\ +\x3c\x63\xc5\x51\x11\xf1\x3a\x13\x6e\x93\xd1\xab\x02\x69\x34\xf7\ +\xb9\xc2\x72\x44\xca\x9a\x95\xc0\xea\x0d\x15\x6b\x62\xa6\xdc\xe6\ +\x0e\x17\x6c\x51\x8c\x99\xb0\xa1\x20\x66\x44\x1a\xaa\x12\x8f\x2d\ +\x69\x29\xb5\x6a\xd6\xac\xd8\x50\xe1\xe8\xd8\xca\xb8\x8b\x21\xc2\ +\x90\x91\x32\x25\xc6\xb1\x60\x23\x53\x1f\x09\x96\x15\x1a\xc3\x0d\ +\xc6\xa4\xc4\xe4\x92\x6a\xeb\x2f\x9e\xdb\xd7\x50\x21\x43\xf7\xe5\ +\x4e\x84\x23\xa6\xa1\x66\xc4\x2d\x92\x41\x72\xbc\xcb\xe2\x13\x5a\ +\x0a\x62\x6e\x93\x4a\x89\x5b\x62\xa9\x58\x71\xc1\x5f\x31\x32\x85\ +\xb3\x61\xc1\x1a\x45\xc9\x96\x0d\x2b\x14\x5b\x1c\xb7\xc8\x88\x48\ +\x49\xe8\x18\x91\x90\x92\x90\x49\xc7\xbd\x11\xd1\x04\x23\x18\x75\ +\xc1\x82\x9a\x92\x42\xc2\xa8\x93\x6e\x9b\xcf\x6f\x53\x52\xa6\xcc\ +\xb9\xe0\x4a\x26\x02\x7d\xa2\x7f\x85\x61\x4a\x42\x4a\xc6\x44\x46\ +\x2c\xcd\x6f\x9e\xcb\x8f\xd8\x4d\x66\x74\x1f\xb7\x9f\xba\x63\xd0\ +\xff\xc8\xaf\x2a\xd6\x94\x5c\xb0\xe1\x17\xd2\x6d\x54\x82\x05\x68\ +\x2c\x29\x50\xc9\xd8\x51\x19\x22\xff\x86\xff\xce\x1f\x89\xf9\x19\ +\xef\xa0\xd9\x92\x32\xa2\x65\xc4\x4a\x38\xb4\x4f\x58\xf1\x80\xbf\ +\xe7\x94\x3b\x24\xac\x29\xd1\x4c\xa5\x70\xf2\x67\xae\xa1\x16\x16\ +\x54\x4b\x4d\xc4\x86\x25\x35\x5b\x36\x38\x69\xef\x25\xe4\xa4\x18\ +\x1c\x89\xd4\x3d\xaf\x71\xc2\x4a\xc6\x6a\x1a\xa0\xa5\x44\x73\x2a\ +\x7a\x88\x86\x38\xd0\x0a\xae\xcd\x9a\x56\x7b\xb5\x45\xc7\xe6\x77\ +\x97\x1f\x16\x64\x22\x7b\x51\xb1\xe4\x9c\x87\x3c\xe6\x8a\x88\x92\ +\x94\xb7\x79\x87\x09\x1d\x25\xb7\x68\x29\x28\x24\xc5\xee\x98\x70\ +\xc5\x25\x15\x2b\x96\x18\x66\xac\x79\x8c\xa5\xe0\x3e\x1d\x13\x2a\ +\x0c\x39\x9a\x86\x94\x9c\x2d\x4f\x58\xf3\x3a\x7f\xcf\xfb\x4c\xa8\ +\x29\x69\x49\x31\xcc\x49\xa8\xe8\x50\xd4\x74\x94\x94\xf2\xaa\x56\ +\xac\xf9\x0b\x97\xac\x64\x22\x50\x93\x70\x2c\x95\x8b\x67\xea\x67\ +\x52\x5e\x95\xac\x59\xb0\x16\xbd\x02\xc3\x1b\xfc\x8c\xb7\xb9\xcd\ +\x9c\x12\xcb\x7b\xfc\x44\xe6\xfd\xbe\xf3\x44\x28\x1c\xd5\x87\x97\ +\xac\x99\x93\x48\x17\x23\x62\x4a\x43\xc1\x96\x0c\x87\x0a\x48\x76\ +\xce\x7f\xe6\x92\x9c\xbb\xcc\x58\x70\x4e\x4b\xce\x96\x9a\x8a\x25\ +\x0b\x52\x12\x0a\x19\x59\x79\x8d\x11\x8a\x07\x94\x6c\x04\x72\xdb\ +\xa2\x39\x22\xa6\xe2\x4f\x6c\x79\x9b\x39\xd0\x31\x95\x21\xc7\xad\ +\xa8\x0c\x2c\x29\x59\xd3\x01\x15\x57\x2c\xd8\x50\x50\x86\xa6\x70\ +\xcb\x8a\x2d\x17\xa1\x24\x1c\x31\xc1\x90\x30\xe7\x06\x57\x3c\x94\ +\xc1\x5c\x9f\xd9\x5a\x22\x22\xe2\x50\xca\x3f\x07\xc5\xf6\xb7\x7e\ +\xcb\x05\x5b\x92\xe0\x05\x22\x26\x58\x19\x23\x32\xe4\x8c\x88\x25\ +\x65\xfd\x67\xbe\xe6\x94\xd7\x98\x73\x9f\x7f\xa2\xa6\x21\x16\x81\ +\x9c\x9a\x04\x23\x91\x7b\xca\x84\x88\x88\x1c\xcb\x25\x5b\x5a\xb6\ +\x14\x4c\x78\x8d\x9c\x4b\x1e\xb3\xc5\xf2\x1e\x39\xd0\x4a\x92\xa6\ +\x45\x84\xab\x95\x72\xbe\x65\xc3\x39\x0b\x39\xf4\x2e\x10\x83\x5a\ +\x09\xe4\x86\x96\x8d\x50\xd6\xa7\xdc\x60\xc6\x84\x63\x0c\x4a\x26\ +\x00\x17\x94\x81\xec\x94\xbe\x48\xd1\xe5\xa4\x6e\xeb\x24\xdb\x6b\ +\xc4\x21\x41\x82\xa1\x65\x45\xce\x31\xb7\x39\x92\x2a\xf4\x26\x17\ +\xc4\xb4\xac\x78\xc8\xd7\x14\x3c\x61\xc6\xeb\xbc\xce\x58\x34\x29\ +\x6f\xb0\x66\x45\xc3\x25\x17\x1c\xf1\x2e\x2b\x62\x26\x52\x29\x1a\ +\x0a\x72\x3a\x2c\x05\xff\x42\xcd\x6b\x8c\xf8\x0b\x8a\x53\x6e\x31\ +\xc7\xb2\xe0\xb1\x0c\xb7\x16\x5c\x72\xc1\x25\x1b\x56\x22\xed\xd2\ +\x77\x59\x2a\xb4\x88\xed\x28\x5a\x6a\x2e\x88\xb8\x62\xc1\x8c\x0c\ +\x45\xc6\x0d\x2a\x0c\x5b\x0a\xb6\x01\x40\x4c\x06\x03\x34\xcf\x34\ +\x84\x01\xba\x8f\x3b\x62\x52\x41\x7e\x12\xf9\xb0\x2f\x85\x16\x4c\ +\x99\x32\x23\x13\x85\xb0\x7f\xc7\x6d\x3a\x22\x0a\x72\x6e\xb3\x66\ +\x49\xc6\x88\x31\x13\x5a\x36\xac\xf9\x13\x6b\x9e\x70\x49\x89\x25\ +\x61\x44\xce\x88\x23\xe6\x8c\x48\x29\x58\x90\x30\xc7\xf0\x17\xfe\ +\xc4\xd7\xbc\xc3\x1b\x7c\x8b\xe1\x27\x44\xdc\xc2\x72\xc1\x1f\x69\ +\x80\x9a\x4b\x1e\x73\x49\x85\x65\x45\x3c\x28\xc8\x3a\x2a\x1c\x15\ +\x35\x63\x46\xc4\xc4\x62\xe0\x92\x52\x38\x5e\x13\x20\xa7\x13\xd6\ +\xb7\xa2\x93\xb9\xb2\xe7\x1a\x42\x61\xe9\x3e\xb6\xc4\x21\x0f\xeb\ +\xe1\x8e\x94\x31\x13\x2a\x72\x32\x01\x4f\x62\x52\x32\x46\x6c\xa9\ +\x69\xb8\x43\xc6\x8a\x88\x09\xc7\xe4\xd4\x5c\x70\xc6\x9a\x25\x37\ +\xb8\x62\xcb\x98\x77\xd8\x70\x9f\x0d\x11\x67\x4c\x38\xe5\x94\x9c\ +\x88\x96\x11\x29\x96\x35\x97\x54\x9c\xf3\x57\x14\x0f\xd8\xf0\x73\ +\x12\xfe\x85\x7b\x3c\x14\x91\xcf\x15\x8d\x88\xae\x25\x8c\x49\x50\ +\x74\xd4\xd4\xa4\x44\xe4\x4c\xc8\x50\x54\xd4\x42\x5d\x69\xa4\x4b\ +\x1b\x09\xf0\x3b\x22\x97\xaa\xb9\x44\x13\xfd\x5e\x89\x54\x97\x7d\ +\x76\x42\xe5\x70\xd8\x5f\x76\xa2\xfb\x93\xc9\x13\x81\x9c\x88\x88\ +\x4e\x9e\x87\xcf\xcf\x0c\x29\x1b\x72\x34\x1b\x19\x7c\x4e\xb9\xc9\ +\x94\x89\xa4\x3b\x05\x35\x53\x6e\xb0\x22\x67\xc6\x98\x25\x25\x77\ +\xa8\xe4\xc7\x97\x68\x52\x5a\x5a\x22\x6e\x93\xb0\x61\xc3\x7d\x2c\ +\x8a\x96\x8a\x02\xc3\x88\x13\xd6\xac\x58\x70\xc5\x56\x72\xd9\x58\ +\x0e\xb7\x17\xee\xeb\x64\xc2\x37\x25\xa2\x1d\x00\xc6\x95\x8c\xee\ +\x5b\x16\x18\x32\xc6\x4c\xa4\xf3\xd1\xa1\x89\x3e\x7a\x01\x67\xd9\ +\xc9\x29\x50\xc2\x7f\xa8\x68\xa9\x65\xc2\xb2\x11\x18\x3c\x21\x96\ +\x9a\x73\x87\x09\x77\x34\x94\xa1\xfd\xae\x88\xe4\x49\xdf\x20\xe2\ +\x82\x19\x35\xff\x85\xc7\xd4\x9c\x02\xc7\xfc\x1d\x47\x9c\xb3\x20\ +\x66\x8e\x25\xe3\xe7\x4c\x58\xf2\x9f\x38\xe7\xe7\x18\xee\xf2\x6f\ +\x79\x8b\x31\x6f\x70\xc2\x4f\xb8\xc7\xff\xcb\x15\xad\x74\x30\x62\ +\x20\x23\x66\xc4\x94\x09\x09\xf7\x25\xcd\x8a\x98\x73\x83\x19\x1b\ +\x0a\x89\x32\x9e\x1f\x5c\x8a\x50\x57\x4a\x4b\x21\x28\xbc\x79\x91\ +\x4e\x57\x24\xa1\x31\x93\x52\x65\x1c\xb4\x80\x7a\x1a\x48\x1c\xf0\ +\x49\x3f\x22\xe0\x85\x51\x5a\xf9\xd1\x33\xe1\x6c\x6f\xf1\x3a\x43\ +\xc7\xb4\x9c\xf2\x0d\x97\x4c\x99\xb3\xe5\x26\x11\xb7\x79\x9b\x29\ +\x29\x17\x38\x32\x1a\x3a\x8e\x78\x8f\x35\xff\x89\x07\xfc\x8c\x11\ +\xb7\xb9\xcb\x9b\x58\x52\xa6\x5c\x32\xe2\x4b\x62\x4e\x59\xb2\x41\ +\xf3\x96\x0c\xdb\x26\x94\x7c\xcb\x13\x96\x24\xc2\xf6\xcb\xc8\x99\ +\x32\xc2\x89\x4e\xae\x57\x4f\xb6\x02\x17\x68\x26\xe4\xc0\x4a\x1e\ +\x9a\x0b\x3d\x97\x67\x76\xc3\x55\x38\x82\xbd\x6c\xa2\x15\x3a\x96\ +\xd7\x14\x8d\xa5\x35\x67\x03\xbd\xc3\x08\x09\x23\x26\xe5\x88\x63\ +\xe6\x4c\x98\x32\x27\xa5\x63\x8d\xe1\x36\x6f\x71\x4c\x42\xc6\x31\ +\x25\x31\x6f\xf0\x3e\xaf\x73\x44\x8a\x61\xc4\x5b\x18\x6a\x4e\x19\ +\xd3\x31\x67\x45\xc4\x11\x59\x98\xdd\x54\xe4\xcc\x19\x49\x4f\x2d\ +\x62\x84\x62\xcb\x05\x17\x6c\xb0\x32\x79\x3a\x95\x57\x51\xb3\xa0\ +\xa2\xa1\x0a\x59\xe5\x5a\x06\x16\x3c\xbc\x57\xb2\xe6\xbf\x73\x49\ +\xf7\xa9\x83\x01\x0d\xe5\x19\xd5\xa7\xc7\x12\xdb\xc0\xb7\x4e\xc8\ +\xa4\xe4\xed\x30\x64\x8c\x64\xb6\xd2\x05\xaa\x71\xff\xdf\x11\xad\ +\x8c\xcb\xfb\x03\xb8\xa6\x22\x65\xc4\x9c\x39\xef\xb1\x02\x34\x5b\ +\x8e\x78\x8f\x9c\x0a\xc5\x11\x29\xf0\x3a\x57\x34\xcc\x59\xa0\x78\ +\x0b\xc3\x4d\x5e\x93\xe2\xc8\x8a\xa0\xeb\x11\x89\x88\xbc\x65\xa4\ +\x94\xd4\x64\x1c\x73\xcc\x39\x05\x47\xcc\xb9\xa4\x12\x44\x2b\x21\ +\xa6\xa3\x10\x0d\x23\x4d\x21\xe7\xe1\x8a\x11\x11\x73\x52\x2c\x0d\ +\xab\x4f\x2e\x3e\xd9\x72\xc4\x0d\x15\x7f\x97\x8f\xb0\xe8\x7f\x4c\ +\x7f\x69\x24\xe0\x78\xe0\x7d\x2b\x3e\xba\x63\xca\x28\x08\x66\xea\ +\x40\xf3\xf1\x0d\x39\x3f\xc2\x3e\x46\x93\xca\x41\x2b\xb8\x8d\x22\ +\xe1\x06\xef\xb1\x66\x45\x29\x99\xdd\x92\x15\x25\x23\x8e\x29\x25\ +\xc9\x69\x68\x38\x26\x67\xc2\xcf\x79\x8d\x34\x50\xd5\x62\x66\xdc\ +\x26\xa7\xa6\x25\x62\x4a\xcd\x9a\x96\x1b\xfc\x3d\x6f\xf0\x47\x2e\ +\x69\x58\xb1\xc5\x91\x92\x61\x98\x73\x83\x35\x4f\xd8\x02\x33\x14\ +\x1d\x25\x8e\x9a\x25\x86\x8a\x8a\x29\x1b\x2e\x79\xc4\x13\x9e\xf0\ +\x36\xa9\x3b\x51\xee\xd9\xe1\x53\x13\xff\x2a\x76\x36\xa4\xd1\xbe\ +\xd5\x87\x94\x2d\x99\x88\x27\x32\x50\xb4\x55\x01\xaa\xc9\x59\x09\ +\x0c\x97\xd1\xe1\x18\x91\x0a\xc2\xe5\xb9\xbb\x8d\xa8\x3a\x24\x52\ +\x53\xae\x98\xb1\x60\xcc\x11\x4f\x28\xf9\x09\x0b\x7e\xca\xfb\x4c\ +\x84\x13\xe9\x95\x28\x46\xbc\xcb\x1b\x3c\xa0\x22\x25\x13\x24\xc4\ +\xa0\x30\x9c\xf0\x36\x5f\xb2\x02\x66\x9c\x10\xe3\xc8\xb8\x49\x4a\ +\x25\x91\xc9\x49\x3b\xd0\x33\x3b\x1e\xb0\x25\xa6\xe2\x18\x45\xc1\ +\x8a\x95\x0c\x70\x3e\x13\xb3\xec\x59\x28\x5e\x83\x70\x4d\xc5\x16\ +\xcb\x14\x2d\xe5\xae\x09\x83\x08\x43\x42\xb0\x95\xce\xe3\x29\x8e\ +\x25\x23\xd2\xa0\x60\x3b\x22\xc7\xb0\xa6\x26\x65\x42\x4d\x41\x1b\ +\x84\x7c\x6b\xa0\xe0\x98\x39\x67\x74\xbc\xcf\x92\x9f\x33\x17\x08\ +\x30\xc2\x91\x70\x8e\x66\xc6\x5b\xfc\x15\x87\xa2\x91\xeb\xa4\xf8\ +\x9a\x86\x23\x7e\x41\xce\x7d\xb9\xb4\x8e\x29\x27\xc4\x8c\xb8\x45\ +\x4a\x11\xf8\x94\x29\x13\x72\x6a\x12\x46\xc4\x14\x6c\xf8\x26\xf4\ +\x46\xdd\x77\x23\x54\x3e\xcd\xf6\xdd\x44\x0f\x7f\xa4\x4c\x44\x04\ +\xab\x0b\xf4\x9e\xbe\x17\xa9\x03\x2f\xd7\x90\xf0\x0b\xfe\xcc\x9a\ +\x96\xa9\xa0\xdd\x0d\x19\x19\x8e\x9c\x44\x78\xd3\x1b\xd6\xb4\x58\ +\x81\xe4\x96\x24\x4c\x50\x54\x18\x8e\x38\xe1\x88\x48\x5c\x71\x4d\ +\x49\x4d\x4c\x49\xc3\x88\xdb\x68\x0a\x0a\xa9\x14\x12\x4a\x56\xdc\ +\xe0\x94\x8c\x8c\x19\x6b\x16\x64\xbc\xcd\x11\x8d\x38\xdb\x25\x57\ +\x62\x4e\xcd\x88\x63\x62\x26\xdc\xe6\x04\xc5\x96\x25\x35\xb3\xbd\ +\xf9\xe1\x6b\x13\xaa\x2e\x70\x27\x55\xa0\x67\x29\x99\x90\xea\x02\ +\x53\xc9\x86\xa4\x6a\x9f\x5a\xfa\x53\x56\x2c\x69\xc3\x90\xe3\x09\ +\x9a\x96\x8e\x94\x88\x8a\x25\x05\x8e\x94\x51\x38\xb8\xdf\xf2\x06\ +\x89\x74\x28\x15\x37\xe4\xda\xf9\xe2\x6b\xc3\x86\x63\x1e\x53\x01\ +\x73\x62\x96\x3c\xa1\x40\x91\x4a\x16\x61\x59\xd1\x30\xe3\x16\x15\ +\x5f\x93\x71\x47\x94\xf0\x0c\x39\x25\x8a\x44\x86\x2f\x2d\x8a\x84\ +\x39\x6f\xf3\x36\x31\x5f\x72\x0e\xcc\x99\x5f\x33\xe2\xb6\x67\x88\ +\x9e\x5d\x5b\xcb\xb7\x84\x96\x84\x1c\x45\x2d\x9d\x22\x85\x15\xe2\ +\xd0\x8e\xb2\xd3\xf7\x13\x97\xbc\x4b\xc2\x9f\xb8\xcf\xbb\x9c\xd2\ +\xb0\x24\x92\xf9\xbb\x2d\x2d\x1a\xc7\x98\x4c\x5a\x3a\x1d\x5b\x5e\ +\x47\x53\x92\x31\x63\xcc\x48\x8c\xa7\x02\xfb\x21\x91\x56\x8e\x62\ +\x42\x22\xd5\xa6\xa3\x65\x4d\x42\x46\x4c\x8d\x16\xbd\x02\x47\xc5\ +\x23\x22\x2e\xa4\x8d\xec\xd5\x6e\xc0\x31\x21\x27\x23\xa7\xe2\x09\ +\x27\xe4\xc4\xdc\x62\x8b\x61\xc6\xe4\xfd\xf6\xc0\x18\x7b\x3e\xa2\ +\x07\xcf\xbd\x3f\x68\xc8\x38\x22\x13\xe1\x94\x72\x8f\x4b\x7b\x5d\ +\x3f\xb9\xc6\x31\xe3\x5d\xce\x78\xc4\x82\x11\x33\xc1\x0a\x12\x69\ +\xca\x7b\xca\xea\x15\x17\x94\x20\xc2\x4c\x23\x46\xa2\x2d\x60\xf6\ +\xc0\x80\xbe\xfb\x19\x8b\x5a\x89\x21\x63\x83\x96\x74\xde\x1b\xad\ +\x24\x21\xe7\x84\x82\x96\x9a\xf5\x80\x9e\x10\x4b\x7e\x33\x16\x35\ +\xe5\x98\x11\x63\xc1\xb1\xbc\x19\xf5\x3d\xf3\xdd\x3e\xa2\xfb\x78\ +\x37\xa8\xd4\x0a\xfa\x90\xd2\xd2\xb0\x0d\x33\x76\xea\x19\xed\xc1\ +\x84\x9a\x09\x33\xe6\xdc\x63\x89\xe3\x98\x8a\x86\x42\xe6\xc5\x6b\ +\x0c\x2d\x05\x8f\x39\x47\x73\xc4\x4c\x84\x37\x46\x64\x72\xa6\xa2\ +\x01\x39\xd4\xc9\x30\xdd\x88\x31\x31\x05\x86\x54\x84\x3f\x9d\xa0\ +\x14\xbd\x20\x64\xca\x84\x92\x15\xad\xe4\xb8\xad\xcc\x25\x1a\x66\ +\x8c\x30\x68\x12\x22\xc6\x8c\x04\x97\xcf\x18\x93\x5d\xc3\x93\x38\ +\x48\xa8\xb8\xa7\x05\x91\x8c\x49\x18\xcb\x19\xe8\x84\x98\xe3\x06\ +\xbd\xa2\xa7\xf9\xd4\x09\x35\x96\x8c\x5b\xb4\x3c\xa6\xe3\x01\x05\ +\x5b\xea\x30\xc8\xf0\xae\x08\x7e\x46\xcc\xb8\xc5\x4c\x44\x5b\x7b\ +\xd1\x3e\x27\x1d\x8d\x5e\x86\x4f\x49\xcd\x33\x16\x71\x8d\x98\x89\ +\x08\x80\x55\x6c\x88\x25\xd3\x6c\xa5\xfb\x92\x32\x62\x2d\xf5\x8f\ +\xef\xa0\xc6\x72\x31\xf5\x80\xbf\xef\x55\x32\x27\x64\xd7\x50\x0c\ +\xa3\xfd\xb9\x0c\xf3\x45\x8c\x96\x14\x66\x42\x8e\x15\x03\xf4\x73\ +\xbe\xee\xda\x86\x99\x12\x6c\x19\x81\xe1\x66\xa2\x42\xd9\x49\xfe\ +\xd0\x33\xa7\x7c\xf9\x1e\x31\x61\x12\xc6\x1c\x74\x98\xf3\xeb\x82\ +\x46\x59\xaf\x03\xe1\x03\xe0\x98\x05\xe0\xb8\xc5\x5a\x4e\x85\x57\ +\xa4\xf2\x3d\x95\x26\x44\xbb\x4a\x46\x5f\x53\x72\x52\x22\x36\x22\ +\xd8\xd5\x33\x7b\xfc\xe4\x57\xca\x8c\xe4\x79\x4d\x60\x87\x22\xba\ +\x4c\x8e\xb5\xa8\xce\x26\x82\x29\x7b\xee\xd4\x6e\xc0\x4c\x3d\x35\ +\xee\xea\xbb\xcf\x39\xb0\xa5\x24\xe2\x88\x19\x5b\x22\x22\x21\x26\ +\xf6\x7d\x68\x07\xa4\x22\xb5\x91\x1c\x4c\x89\x6e\xe5\x27\xec\x8f\ +\xa5\x8c\x39\x92\x7e\x45\x42\x22\x6d\xc0\x9a\x0d\xb1\x34\x00\x6c\ +\x60\x61\xdd\x1e\xcc\x18\x3a\x2c\x39\x63\x51\xca\xb4\xf2\xf3\x2d\ +\x8e\x11\x13\x92\xff\xc0\x77\xe5\x11\x86\x9a\xee\xae\xfe\x22\xfd\ +\x70\x24\xc2\xbb\x2e\x8c\x86\x20\x8a\x61\xc3\x59\xbb\xc3\x19\xd1\ +\x58\xe4\xf2\xb4\xcc\x56\xa5\x72\xdf\x77\xf4\xe0\x58\x14\x0a\x3d\ +\xcf\x2d\x3a\x18\x67\xd9\x5d\x89\x3e\x73\xf5\xc5\xde\x09\x4b\x96\ +\x14\x22\xeb\x92\xd1\xb2\x65\x8b\x23\x97\x11\x25\x83\x62\x22\x3d\ +\xf9\x4a\x48\xea\x8e\x96\x5b\x4c\x85\xea\xd4\x49\x61\x8e\x60\x2d\ +\xc9\x35\x4d\x9e\x83\x06\x4f\xf3\x0f\x5e\x74\xbb\x91\x79\x28\x82\ +\x97\x28\x06\xa3\xc9\xd7\x83\x1b\x49\xd0\xb6\xd7\x34\x34\xd2\x47\ +\xf0\xd5\x6c\x2b\x45\x54\x24\xe9\x3a\x61\xb0\xda\x49\x2f\xc5\x86\ +\xb1\x84\xa1\xac\x82\x23\x66\xcc\x8c\x0c\x43\x8d\x62\xcc\x5c\x62\ +\x58\xcd\xa5\x0c\xec\xa7\x4c\x98\xa0\xd9\x08\xa1\x54\x49\xdd\x39\ +\x65\x22\x17\x89\x81\xb4\x57\x32\x88\x50\xcf\xbc\x1a\x11\xe6\xf3\ +\xe5\x27\x96\x09\x19\x1b\x3a\x1e\x10\x71\x2c\x7a\xb3\x06\x45\x8d\ +\x22\x0d\x2c\x7d\x0e\x26\x6c\x6a\x8c\xa0\xc4\x7d\x08\x4e\x43\x48\ +\xd3\xe4\xe2\x15\x62\x59\x13\xa1\xa4\xcd\xdb\x89\x6f\xb0\xc2\xaa\ +\x26\xf8\x8d\x9e\x91\x9f\x30\xe7\x98\x05\x2b\xd1\xc7\x9e\x71\x07\ +\x4b\xc9\x23\x1e\xf3\x95\x6c\xdb\x38\x66\xc4\x39\x15\x0d\x11\x27\ +\xbc\xc9\x1b\xcc\x59\x90\xb3\xa0\x90\x86\x94\xe7\x5c\x6c\x51\x8c\ +\xdf\x37\xd7\x08\x30\x1d\x14\x5d\xfa\x73\xfd\x89\x95\x09\x4f\x0f\ +\xb8\xd5\x1c\xcb\x88\xa0\x67\x2c\xf9\xb7\x13\x5d\xe3\x2c\x4d\xf0\ +\x33\xbd\x12\x90\x66\x28\x0d\xea\xbb\x1c\x1a\x25\xc0\x48\x2b\x14\ +\x94\x4e\xbe\x4a\x0f\x58\xff\x4a\x1a\x37\x7e\x9e\x74\xcc\x8c\x63\ +\xd1\xcb\x36\x54\xc4\x64\xcc\xb8\xc1\x86\x25\x2b\x2a\x1c\x6b\x36\ +\xe4\x8c\xc8\x99\x71\xc4\x18\xc5\x86\x0a\x44\x92\xa7\x57\xd8\xed\ +\x06\x93\x1d\xea\xbb\xae\x86\xc2\xdc\x8b\x64\x58\x29\xa1\x10\xd7\ +\x67\x84\x2d\x77\xc6\x88\xa9\xbc\xdc\x4e\xc6\x8f\x87\x54\x63\x13\ +\x46\x9a\x4c\x18\x91\x76\xe1\xb0\x9b\xa0\x13\xd5\xb3\x21\x1b\x5a\ +\x1a\x5a\xf9\x0a\x13\x92\xfa\x66\x6f\x14\xbe\x23\x22\x61\xcc\x94\ +\x0b\xd6\x54\x28\x32\x1a\x72\x66\xcc\x83\xc2\x88\x57\x63\xd6\xe4\ +\xcc\x99\x93\x63\x59\x53\xa2\xa8\xe4\xf5\x67\xd2\xb2\x6e\x7c\xc2\ +\x78\x97\x7b\xcf\xa5\x05\x44\xa4\xbf\xe7\x43\x43\xf4\x99\xfe\x7c\ +\xf6\x95\x27\x0b\x2a\xb9\xe7\x0b\xe9\x5d\x49\xa0\x7d\x26\xe7\x4a\ +\x07\xa5\x97\xdd\xfc\x84\x11\x5a\x49\x2b\xd5\x8a\x17\xdc\x23\x8c\ +\x37\xf7\x1c\x5d\x2b\x24\x34\x2b\xd4\xe1\x9d\x86\x44\x44\xca\x15\ +\x5b\x22\xc6\x92\x34\x79\x31\xe1\x23\x5a\x69\x19\x6e\x03\xe5\xd0\ +\x3b\x4d\x2f\x3a\xef\x0d\x14\x0b\xaa\x62\x51\xa8\x7b\xd7\xcd\x19\ +\x46\xfb\xdc\x6b\x43\xfa\x11\xbf\x73\x77\xd5\x3d\x7d\x6f\xfa\xeb\ +\x29\xa3\xdf\xae\x24\x11\xf1\x14\xcf\x5e\x52\xd5\x8b\x9b\xb0\x97\ +\x6c\xbb\x40\xcf\xd1\x81\x1d\xb9\x53\x18\xf1\x2c\x89\x3a\xa0\x05\ +\x9d\x68\x8c\x45\x81\x6a\xee\x67\xc6\x62\xd9\xd5\x55\xc2\x80\x6f\ +\xd9\x9f\xa8\x5a\x34\x95\xbd\x66\x9d\x92\x04\xca\xb3\xab\x67\x41\ +\x18\xb4\x15\xd2\x50\x1d\x66\xba\xb4\x28\x6d\x6a\x12\xf4\x3d\x9e\ +\x3f\xaf\xa1\x88\xb0\x1f\xb5\x9f\xda\x0f\x40\x7d\x11\xdf\xe3\x1e\ +\x7f\xf0\x92\xae\x3a\x30\x18\x5d\x80\x73\x87\x53\xdf\xc3\x49\x60\ +\x42\x5b\xc5\x89\x1c\x46\x07\xf2\x06\x1a\xc9\x1d\x2d\x91\xac\x84\ +\xb0\x81\x50\xda\xd1\x89\x7a\x89\x8f\x53\x43\x53\x46\x02\xc1\x95\ +\x2c\x31\x24\x24\x24\xb4\x32\xf9\xab\xf1\xa3\x56\x08\x9e\xe2\xc7\ +\x96\x7c\xa9\x88\xc4\xbe\x2d\x0b\x59\x48\x60\x9e\xef\x23\xc2\x44\ +\xe6\x5d\xfb\x81\xfd\x80\xe3\xee\xf7\xed\x87\xfe\x09\x1a\x26\xd4\ +\x02\x89\xc6\x52\x0d\x46\x83\x45\x74\x6a\x8f\x89\xbf\x3f\xc7\xdd\ +\xcf\xe2\x39\x19\x80\xe9\xf5\x08\xc7\x42\xf4\xe8\xbf\xce\x8b\xf8\ +\xb8\x30\xe7\xdd\x08\x36\xe6\x6b\x8b\x02\xcb\x98\x8a\x35\xe7\xc0\ +\x24\x08\x41\xea\x30\xaa\xf0\x68\x30\xaf\xe1\x85\x40\x5b\x09\xdd\ +\x1d\x1d\x1b\x96\x34\x02\x15\xf1\x3c\xa2\x48\x98\xa2\xba\xeb\x8e\ +\xa1\xc1\x7e\xd8\x4a\xd9\x1d\x33\xa3\x94\x9e\xe7\x88\x4c\x78\xb2\ +\x6e\xf0\x66\x87\x03\x6b\x3a\x70\xe2\x94\x98\xa1\x92\xc3\x6e\xe5\ +\xd8\x26\xc4\x92\x6e\xa9\x10\x33\x96\x40\x22\xac\x59\x1b\xe4\xc8\ +\x5b\x2a\xb6\x2c\xb8\x92\x55\x34\x4b\xb6\xa4\x34\x83\x8c\xd4\x8a\ +\xf6\xd8\x46\x7c\x91\xbf\x46\x48\x03\x49\x89\x8c\x9f\x37\x65\x1c\ +\x14\xd5\x9f\x43\x14\x11\x48\xff\x57\xcd\x3f\xd8\x5f\xee\x18\xab\ +\x1d\x39\x6f\x50\x49\xc9\xac\x68\x45\x7a\x47\x0d\x38\xfc\x4a\x6e\ +\xb3\x15\x38\xc4\x4a\x6b\xad\x13\x55\xca\xde\x39\xf6\xfa\x75\x11\ +\x0d\x95\xe8\x9e\xf6\x18\x44\x43\x21\xaa\xd9\x7e\xed\x80\x1f\x48\ +\x58\xf2\x0d\xf7\x39\xa7\x25\x13\x7e\xe6\x8a\x33\x26\x28\x34\xb9\ +\xcc\xff\xa8\x30\xc6\xe0\x49\xa8\xad\x40\x3c\x15\x19\x19\x23\x60\ +\x43\x8d\xe5\x16\xf3\x30\xde\xaf\xbe\xdb\x47\xf8\xab\xe1\x7e\xd9\ +\x4a\x3e\x80\x48\x78\xb6\x6c\x64\x6c\xc5\x1d\x0c\xb2\x33\x18\x79\ +\xb4\x61\xc8\x44\x85\x3c\xd4\x49\xba\xdc\x05\xef\x1f\xe1\x68\x18\ +\x03\x9a\x8a\x0d\x57\x94\x28\x51\xaf\x8d\x84\x9e\xa6\x65\x98\xf1\ +\x09\xdf\xf2\x80\x2b\x11\x1a\xf6\xb3\xc8\x25\x0b\x9e\x30\x96\x82\ +\xae\x7f\x43\x47\x41\xa7\xdb\x0a\xa3\xc7\xbb\xe5\x94\x18\x47\x41\ +\x47\x16\x3c\xc4\x73\xc2\xe7\x21\xf3\xb6\xa7\x9c\x1b\x52\x26\x81\ +\xff\x78\x38\xdb\x4d\x50\x88\xda\x5d\x2f\x7f\x5b\x1b\xc1\xb1\x7b\ +\xce\xb4\xe7\x44\xe6\x44\xa2\xa1\xde\x51\x70\xc6\x9f\xf8\x8a\x2b\ +\x3a\xc6\xdc\xe1\xe7\xbc\xcb\x11\x48\x73\xb9\xe6\x82\xfb\x7c\xcd\ +\x19\x05\x8e\x5a\xd6\x0b\x40\xcd\x8a\x0b\x4e\xc9\x28\x84\x18\x6b\ +\x80\x29\x95\x44\x8d\x5a\x94\x66\x3c\xf9\xcd\xf7\xef\x37\x28\x8e\ +\x39\x21\xf9\xb5\xbe\x76\x68\x37\xba\x4e\x65\xc8\xdc\x33\xbf\x77\ +\x1f\x76\x61\x8e\xd6\xff\x6d\xb2\x47\xf8\xe6\xa9\x89\xbd\xc3\xa1\ +\xd5\xdd\x3c\xa7\x0f\x7a\x06\x4d\x2a\x50\xae\xc6\x70\xc1\x86\x47\ +\x7c\xc9\x7f\xe5\x3e\x25\x86\x9c\x85\x3c\xf3\x84\x42\xf4\xf0\xae\ +\x38\xe3\x9c\xc7\x54\x68\x0c\x95\x68\xe9\xf7\x8b\xaa\x52\x72\xf9\ +\x0a\x17\x76\x7a\xb5\xb2\x58\x62\x37\xa5\x9e\xc8\xfe\xd0\x13\xee\ +\x70\x93\xe4\x73\xf5\x22\x3e\xa2\x97\xe0\x52\x1f\x45\x94\xce\x4f\ +\xe0\xd9\xa0\xda\xb1\x1b\x23\xd8\x65\x96\xfd\x84\x94\x1a\x4c\xe6\ +\xb8\x60\x2c\x4d\xcd\x56\x18\x2b\x7e\xcf\x8a\xef\x9f\x26\xb2\x27\ +\xa3\x64\x03\xdc\x60\xce\x29\xb7\x69\x50\x9c\xd1\x92\x63\xa9\x78\ +\xc2\x9a\x0b\x1e\xf1\x0d\xe7\x34\x02\xbc\x19\xaa\x90\x94\x17\x94\ +\xb2\xf7\xb1\xd7\x0f\x68\x04\xd9\xf4\xf9\x45\x25\x72\x1a\x19\x0d\ +\x6b\x11\x17\x9c\xff\x63\x34\x08\xf5\xcf\x21\x9c\x2a\xf1\xbc\xf5\ +\x9e\x3e\x90\x12\x4e\x15\x07\x33\xbf\x3b\x51\x83\xee\x80\xd3\xdf\ +\x0a\x93\xa1\xa0\x09\x7a\x03\x59\x88\x12\x31\xc7\x54\xe4\x8c\xb8\ +\xc9\x88\x9f\xf0\x1e\x37\x59\x73\xc5\x96\x8a\x73\x2e\x58\x52\x72\ +\xc1\x19\xe7\x5c\xb0\xc5\x49\x85\x63\xa5\x83\xb5\x2b\xed\x3b\xc9\ +\x44\x7d\x70\xee\x42\xb2\x6f\x28\x04\xe3\x8c\x58\x71\x85\xc2\x30\ +\x25\xff\x95\x7a\xbe\x8f\x18\x1e\x19\x8d\x23\x7e\x1f\xcc\xa7\xd1\ +\x87\x4e\x9e\x66\x21\x23\xe6\xfb\xcf\x7d\x98\x57\xee\x8f\x44\xd7\ +\xa2\xad\xee\x88\x85\x61\xbb\x43\xaa\x3b\x51\x9a\xbc\xc1\x5d\x6e\ +\x91\x70\x9b\x29\x1d\x63\x46\x94\x3c\xe6\x09\xf7\x39\xa3\x63\x21\ +\x53\x19\xfd\xd5\xf3\x1d\x38\x15\x0a\xbf\x48\xc2\x25\xe2\x8e\xdb\ +\xb0\xd9\xa1\x6f\xe1\x68\x32\x0c\xe7\x2c\xb8\x49\x17\x84\xdb\x5e\ +\x68\x12\x78\x07\xc6\x8d\xee\x81\xfb\x68\x37\x4f\x7b\xee\xf4\xc0\ +\x63\xa8\xa7\x74\x40\xf4\x40\x92\x51\x05\xde\x84\x57\x17\xed\x71\ +\xea\x5e\xbb\xba\x11\xec\xeb\x16\xa7\x82\x55\xc4\x94\x02\xd3\x97\ +\x2c\xd9\x50\x73\x45\x41\x4b\x02\x68\x09\xd8\x3d\xb5\xd9\x08\xd6\ +\x19\x49\xab\xc6\x84\xb8\xe4\x27\xc5\x6b\x01\xf0\x7a\x95\xcb\x2d\ +\x85\xcc\x31\xf7\xa3\x57\x2f\x30\xe5\x77\xa8\x24\x67\x42\x9d\x91\ +\x0d\x86\x81\x5c\xc0\x13\x76\x9a\x0e\x76\x4f\xa8\xc0\xdf\x61\x4f\ +\x46\xcd\x48\xc3\xbc\x56\x9f\x6f\x78\x86\x85\x4f\x81\x0d\x95\x28\ +\xa6\x3a\x14\x37\x78\x0f\xc3\x05\x67\x5c\xb1\x09\x13\x7a\xa9\x4c\ +\x89\xf8\x81\x83\x29\x73\x4e\xc9\x85\x9a\xd6\x05\xf9\xd7\xbe\xd2\ +\xb0\xe2\x33\xee\x70\x0b\x47\xc2\x31\x11\xb1\x68\xa9\xbf\xf4\xb8\ +\xe3\xd3\x9f\xda\xf7\xbe\xdc\x30\x0b\x3d\xc8\x2c\xfb\xa3\xd9\x0a\ +\x8c\x13\x49\xd3\x68\x28\xed\xe8\x02\x03\xa6\xc7\x3d\xbd\xea\x99\ +\x0f\xb3\x8e\x19\x77\x79\x9d\x87\x3c\xe1\x4c\x96\x18\x5a\x52\x69\ +\xf8\x65\x18\x8c\x48\x8f\x0f\x05\x7f\x7a\xd1\xdf\xdd\x03\xf1\xe0\ +\xaf\x91\x4e\x6c\x7c\xc0\x27\xfd\x1e\xdb\x1d\xa3\xcf\xcc\x27\x26\ +\x4c\x59\xed\x9c\xe5\xae\x05\xd8\x0a\x94\xda\x4a\x17\x3d\x91\x9e\ +\x05\xb2\x10\x44\x0d\xc6\x67\x9d\xb8\xbe\x4e\x68\x00\x5a\x06\x9d\ +\x2a\x3a\x09\x8b\x63\x72\x0c\x57\x42\x15\xf5\x13\x40\x91\x78\x9b\ +\x89\x70\x67\xfa\xae\x6c\x27\x86\x70\x83\xa1\xe7\x52\xe4\x60\xda\ +\xd0\xb1\xbf\x5e\xef\xe8\x85\x35\x66\x82\x21\x7e\x13\x07\x85\x80\ +\xa1\xf4\x81\x3b\x80\xd8\x90\x26\x8c\xa7\x96\x8c\x06\x94\x3e\xf5\ +\x94\x3c\x06\x82\x45\x44\xa2\x67\xd4\xc8\x35\xd4\x22\x38\x3e\x63\ +\xce\x09\x37\x39\xe5\x26\x13\xc6\xe4\x64\x4c\x98\x33\x11\x9a\x92\ +\x09\xc5\x5d\x27\x8f\xa0\x96\x1e\x8c\x15\x10\x27\x91\x93\x68\x18\ +\x87\xa7\xee\x5e\x55\x36\xa1\xff\x54\x3d\x50\x12\x1a\x6e\x72\x77\ +\xe1\x87\xb9\x90\xdc\x18\x59\x33\xa6\x02\x53\x21\x0a\x43\xd4\xfb\ +\x4a\x97\x66\x2f\x18\x6b\xa9\x63\xc0\x31\xe6\x88\x48\x5a\x8e\xc8\ +\x38\x63\x24\x30\xbe\xde\xd3\xa2\xe8\xa4\xf4\xaa\x43\x64\xd3\xe4\ +\x42\x3c\xdc\xd0\x30\x62\xc4\x0d\xd2\x57\x5b\x2b\x71\xdd\x20\xcb\ +\x7e\xa6\xd0\x5f\x92\x9d\xca\x6d\x24\x82\x15\xb1\xec\xe4\x24\xcc\ +\x77\x47\x03\x21\x60\xbb\xa7\xfd\xd1\xbf\x0d\x23\xfa\x40\x7e\x39\ +\x88\xa6\x63\xc4\x14\x45\x46\x4d\x4d\x23\xac\x59\x27\x88\x85\x6f\ +\x08\x74\x81\x9a\xe0\x44\x14\xb8\x0d\x4d\x81\x29\xb9\xa0\x99\x30\ +\x61\xce\x4d\x72\xf5\xb4\xb0\xe8\x2b\x18\x62\xe7\x20\xf7\xc7\xdd\ +\xbb\x10\x3c\x75\x18\x77\x4b\x24\xde\x74\x03\x01\xb7\x7d\xf5\x11\ +\x17\xe6\xc2\x6d\x48\xc8\x9c\x80\x80\x1e\x5f\xc8\x84\x3c\xaa\x44\ +\x2f\x24\x16\x77\xba\xbb\x7e\x86\x58\xa2\x9a\x6f\x42\xd7\x41\xea\ +\xd3\x60\x18\x73\xc4\x4d\xa6\x1c\x51\x72\xca\x5b\x1c\x7d\x96\x0e\ +\x84\x04\xbf\x87\x21\x86\xa5\xba\xda\x83\x60\x5c\x58\xf4\xd1\x1f\ +\xd8\x48\xc6\x94\x7b\xc1\x0b\x1f\x24\xd5\x40\x37\x1b\xf9\x8c\x6e\ +\x87\xa0\x13\x89\xb4\x93\x47\x13\x46\x74\x6c\x05\x65\xaa\xd1\xb4\ +\xc4\x32\x4a\xd5\x85\xc4\xdf\x8a\x80\x4a\x3f\xa2\xdf\xef\x84\xf3\ +\x25\xfa\x4d\xde\xe1\x16\x96\x8a\x31\xc7\x2a\x0e\xe9\xf8\x0b\x64\ +\x96\xcf\x1a\x6a\xf2\x07\x3a\xfe\x75\xfe\xdb\x22\x80\x74\x51\x20\ +\xa8\xea\xb0\x2f\xdc\x05\x1d\x01\x27\x00\xbe\x97\x5f\xcd\x98\x0a\ +\x27\xcb\xfb\xfd\x5e\xc3\xde\x85\x69\xf0\xfe\x6a\x39\x99\x1b\x76\ +\xa4\x68\xc6\x20\x33\x21\x91\xf0\x40\x7d\xd3\xbf\xa2\x91\x45\xb9\ +\x09\x39\x09\x1d\x6b\x5a\xc0\xb2\xc5\x12\x93\x11\x91\xf0\x06\x6f\ +\x70\xac\xfc\xf6\x8e\x68\x00\x24\x7e\xcf\x3c\x42\x0d\x26\xb5\xaf\ +\xb3\x6c\xbf\x35\xc1\xc8\x3d\x2d\x04\x58\x3b\xa7\xe5\x98\x5b\xbc\ +\x87\x96\xbb\xbf\x11\x02\x61\xaf\x5c\xdb\x8a\x30\x67\x22\xfb\xfe\ +\x90\x49\x11\x4b\x1e\x26\xcf\x7b\x95\x90\x48\x7e\x8a\xa3\x0e\x72\ +\xaf\x7d\x5b\xa0\x0d\x2c\x5d\xdf\x02\x98\x91\xff\x5e\xef\xa9\x52\ +\xf1\x43\x38\x4b\x50\x5f\xec\xeb\x56\x5e\x6f\x88\x48\x3a\x57\x5a\ +\x66\x6f\x1e\xb2\xe6\x8c\x2b\xf1\xf7\x4a\xf6\x7b\x59\x69\xe4\x1a\ +\xe9\x74\xed\x94\xd5\x77\x5d\x57\x2b\x10\x4f\x8a\x93\x8d\x5e\x26\ +\x5c\x37\x4b\x5f\x1b\xb7\x52\x67\xb4\x61\xa7\x93\x43\x93\x71\xc4\ +\x31\xe3\x8f\x7e\x04\x43\x28\xf4\x3d\xf3\x9c\x45\xa2\x4a\xb8\x2a\ +\x48\xdf\x7b\xc6\x5b\xa4\x5c\x61\x18\xf1\x40\x38\x39\x8d\xec\xca\ +\xc8\x85\xc1\xd0\xff\xf3\x48\x3c\x8b\x97\x43\xd1\x83\x0e\x18\xd2\ +\x18\xb4\x01\x6f\x70\xd2\xf2\x27\xcc\xfb\x76\x01\x97\xea\xe1\xdf\ +\x09\x23\xcc\xde\x58\xf4\x0f\x77\x22\x06\x82\xac\xd7\x69\xd2\x0c\ +\x83\xa8\x87\xcc\x22\x4e\xb9\x29\x0c\x89\x73\x96\x5c\xb0\xa0\x94\ +\xe6\xe1\x2a\xe4\x1c\x29\x63\x32\x8e\xe5\xc0\x37\xb2\xea\xd2\x48\ +\xb5\xb9\x73\xc0\xbe\x15\xe0\x67\xfd\x52\xe9\x5e\x79\x3d\x19\x8f\ +\x52\x38\xd1\x92\xf0\xad\xc2\x11\xd1\x3f\xb2\xb7\xe7\xe5\x87\x3b\ +\x11\x7b\x55\xe7\x75\x31\xa5\x1b\x70\x1e\x32\x01\xe8\x73\xc9\x1e\ +\xe7\x2c\x98\xb0\xa4\x11\xcd\x38\x4d\x4b\x21\xa0\xaa\x41\xf1\x84\ +\x86\x2d\x05\x55\x90\xd9\xeb\x35\x65\xfc\x36\xcf\x58\x82\x63\xc9\ +\x56\x10\x87\x3e\x29\x8b\x06\x5d\x15\x2d\xc5\xf7\x84\x09\xe6\xf3\ +\x97\x49\x17\x5f\xea\x97\x1e\x5c\x0d\x77\x4d\xb6\x6e\x07\x93\xa3\ +\x51\xd8\xd7\xeb\x4f\x4a\xca\x9c\x98\x93\xa0\x2f\xe8\x04\xaf\x58\ +\xb3\xa1\x92\x45\xca\x95\xc0\x70\xbd\x3e\x6d\x8f\x3e\x18\xf9\x0a\ +\x23\x73\xe0\x89\xb4\xf4\xac\xd4\x2f\x91\x34\x95\x7b\xc3\x4c\x38\ +\x61\x8e\xf9\x7c\xa8\xb8\xfc\x03\x5f\x8d\x67\x7f\x43\x13\x42\xa1\ +\x8f\xf3\x3e\x90\x25\x12\x49\x12\x19\x5f\x50\xb2\x6f\xcf\x6b\x90\ +\xcc\x89\xb1\x94\xb2\x35\x67\xc5\x13\xce\x59\x4a\x53\xf7\xb1\x30\ +\x61\x2a\x69\x0c\xf7\xd4\xa3\x96\x9a\x0c\xcb\x8d\x80\x4f\xf8\x39\ +\xaf\x42\xb2\x4d\x88\xc8\x85\x4a\x76\x9d\x3e\xd6\x2b\x19\x62\x5f\ +\x6f\x50\x13\xbf\xaf\xbf\x52\xe1\x12\xa8\x00\xc6\xd8\x20\x7c\xb1\ +\x13\x66\xb2\x82\x2a\xf5\xbb\x9d\x3a\xd9\x84\xd0\x85\x5c\xb4\xa2\ +\x22\x65\xcc\x94\x11\x35\x5b\x40\x73\x2a\xcb\x2f\x4b\x16\x58\x96\ +\x9c\xb3\x92\x45\xec\x17\x54\x92\x2b\x28\x26\x68\x96\x1c\x91\xcb\ +\x38\x53\xc7\x5a\xf2\x0c\xef\x80\x73\x8e\x38\x51\x6a\xa0\xa5\xf5\ +\x3c\x53\xbc\xec\x89\xb8\xa7\x0e\x74\x08\x19\xd0\x8b\x86\x32\xf3\ +\xee\x29\x2d\xec\x9e\xd2\x97\x88\xa7\x6f\x43\xc9\xec\xe9\x87\x69\ +\xd0\x27\xf2\xe8\x56\x2e\xa3\xd2\x39\x6b\x19\x6c\xac\x64\x80\x1e\ +\xe6\xdc\xe4\x26\x73\x26\x41\xb0\xa7\xa3\xc0\x11\x93\x10\x93\x89\ +\x84\xcb\xcb\xfc\x7a\xe9\x84\x4a\xb1\x2f\xc1\xb9\x23\x79\x74\x1c\ +\x4a\xb9\xee\x84\xbb\x86\x22\x7e\x7d\x6f\xc4\x48\xe4\x6f\x02\xb1\ +\x70\x47\x34\xd5\x24\xcc\x85\x99\x63\x85\xc1\x35\x92\xe9\x6e\xdf\ +\x80\xbc\xc9\x09\x53\xb2\xf0\xf1\x46\xae\x62\x4c\xc2\x84\x23\x66\ +\x5c\xaf\x9b\xf8\x03\x3b\xcb\x43\x45\x73\xb5\x57\x14\xbb\x3d\x49\ +\xd7\xfe\x65\x74\x01\xc8\xeb\xcd\xe7\xa4\x17\x6a\x24\x39\x66\x6f\ +\xd1\x80\xa5\xa1\xa0\x94\x6d\xf4\x8d\x94\x52\x7e\xbb\x68\x3f\x36\ +\x19\x63\x45\xde\xad\x91\xcf\xf0\xdb\x7a\xe6\x4c\x7e\x7f\xbd\xb8\ +\xe4\x0f\x74\x35\x74\x20\xef\xf1\x14\xc8\x62\x0f\x8c\x74\x08\xe1\ +\xd8\xd0\x1b\x47\x66\x00\xca\x20\x9f\xa4\x82\x08\xdf\x4e\x61\x7d\ +\x4d\xcd\x9a\x2b\x2e\xb9\x92\x1d\x7f\x8e\x88\x94\x9c\x99\x9c\x85\ +\x2e\x68\x14\xee\x24\x1c\xfd\x10\xf7\x84\xe4\x23\xf5\x52\x97\xe3\ +\x25\x37\xc9\xeb\xb0\x16\xd9\xee\xe9\x58\x76\x07\x9b\xb9\xd5\x1e\ +\x1f\x13\xc9\x2f\x08\xe2\xbe\x16\x4d\x49\x4d\x23\x0b\x70\x7d\x7f\ +\xa2\x15\x2e\x8c\x47\xba\xcf\x28\x44\x66\x61\x43\x8b\x0e\x9c\xaa\ +\x8c\x09\x39\x26\x6c\x5d\x42\xa4\x15\x94\x50\x47\xe6\x9c\x32\xdd\ +\x23\x2f\xfe\x28\x86\xd0\xbf\xd7\x1f\x22\x44\x0c\x33\x40\xb0\x15\ +\x87\xe2\xe0\xd7\xa9\x99\x76\x03\x85\xbb\x3e\x45\x2e\x64\x02\xdc\ +\x6b\x0f\xd8\xb0\xdc\x72\x23\x27\xa6\x14\xbe\x5e\x2a\x53\x66\x5e\ +\x0c\xcc\x57\x28\x06\x47\xc5\x96\x2d\x85\xd0\x0a\x27\xdc\xe6\x0e\ +\x93\x5f\xeb\x17\x48\xab\x5f\xd9\x10\xa0\xd0\x5f\xe8\x0f\x87\x6d\ +\x5f\x06\x70\x8d\x0a\xb3\x3d\x6e\x0f\x28\x75\x83\xc9\x52\x17\xe6\ +\x7e\xa6\x34\xa2\x49\x50\xe1\x68\x58\xb1\x62\x49\x2d\x0c\xbc\x5a\ +\xd2\x6d\x2b\x4a\x32\x31\x23\x19\x75\x8e\x24\xaa\x20\x1f\xf3\xaa\ +\x43\x05\x23\xc0\x30\xe6\x98\x39\xe9\xe7\x6a\x0f\x48\x7c\x81\x6b\ +\xbf\x7a\x29\x58\xc6\x52\xb1\x72\x57\x2c\x44\xb9\x23\x0a\x44\x9c\ +\x7e\x21\x95\x19\x64\x8d\x2a\x38\x57\x7f\xf8\xfb\x55\xb8\x8d\x6c\ +\x7d\xee\x64\xf2\xb7\xa4\xa4\x65\xcd\x8a\x73\x16\xa2\x5a\xec\x44\ +\xe6\xb9\xef\xc7\xfb\xb9\xb1\xa9\xc8\x05\x26\x61\xbd\x89\x1f\x72\ +\x29\x69\x48\x89\x38\xe2\x5f\xf1\x0b\xde\x7d\x7f\x74\xef\x45\xa3\ +\xc5\x2b\x46\x0d\x70\x77\x7b\xe7\xd8\x4a\x71\xa5\x06\xad\x20\x78\ +\x7a\x99\x04\xa1\x26\x1c\xee\x4f\x71\x54\x72\xae\x22\x69\xff\xb4\ +\x34\x8c\xa4\x87\xea\xcb\x29\x42\x87\xd3\xc9\x28\xa6\x9f\x32\xac\ +\xe9\x68\xc8\x24\x1d\x2f\x45\xba\x2f\x41\x91\x73\xcc\x8c\xe4\xde\ +\xcb\x5d\x8b\x57\x32\xc4\xae\xd6\xac\x65\x3d\x91\x1e\x90\xc9\x7a\ +\xfd\x07\x0d\x07\x7b\xba\x86\x86\xf0\x90\x59\x23\xe6\x74\x03\xfc\ +\x33\x91\x53\xd6\x0d\xb8\x15\x9d\x2c\x2e\x48\x05\xa1\xb4\xd2\x0f\ +\x89\x84\x13\xb3\x11\x36\x44\x42\xe4\x37\x94\xff\x3a\x7e\x85\xf7\ +\xf3\xca\x86\x20\x4c\xd8\xc5\xc2\xab\x69\x05\x4c\xd1\xb2\x1f\x67\ +\xa8\x83\xbc\xaf\xda\xe0\xeb\xc5\x7e\x59\x54\x2b\x79\x45\x24\x9a\ +\xc6\x99\xd0\x8a\x7a\x30\xcf\x67\x13\x0d\x0c\xba\xf3\x0a\x84\x5c\ +\x5c\xc9\xd0\x82\x01\x26\xbc\xc6\x2d\xf2\xcf\x79\xe6\xce\x84\x1f\ +\xd0\x10\xea\x9e\x0a\x63\x91\x76\x80\x51\xf6\xfb\x90\x5c\x80\xd2\ +\xf6\x2b\x54\xb5\x57\x07\x6a\x60\x36\x68\xc9\xb4\x74\xc4\x8c\x85\ +\xde\x6a\x64\x67\x43\xbf\x97\x2f\x61\x44\x2b\xe3\x6b\x3b\x31\xd8\ +\x2a\x84\xc8\x9e\xf1\x7f\x83\x37\x99\x7f\xa6\x9f\x41\x88\xfd\x41\ +\xa3\x06\x83\x89\x70\x5f\x21\xf4\xe9\xb2\x47\x9a\xfb\xb3\x61\x07\ +\x7b\x9a\x14\xfb\x8b\xca\x5c\x28\xd9\xd5\x8e\xdb\x49\x47\x1a\xea\ +\x52\x9f\x38\xf5\xcc\xcb\x3a\x40\x32\x3d\x89\xb8\x27\x26\x39\xd9\ +\xe9\xe7\xab\xdb\x9c\x3b\xdc\x22\xfd\x8d\xbb\x46\xda\xf7\x07\x3f\ +\x11\x2a\xd8\x3f\x96\xa1\x14\xff\xc4\xa2\x41\xa6\x61\xd9\x57\x42\ +\x1c\x6e\xe3\x73\x83\x31\x07\xcb\x50\xf8\x4b\x09\xf3\xba\x11\xfe\ +\x6d\x2c\x86\x68\xc2\xf9\x4a\x43\xfb\xc6\x89\x43\xed\x04\xe2\x51\ +\x44\x64\x9c\x48\x22\x45\xd8\x32\xfa\xe3\x5e\x8d\xa0\x62\x6c\xc4\ +\x59\x35\x32\x5e\x9c\x0d\xea\x8f\xe1\xda\x4a\xbd\xa7\x8d\xbb\xe3\ +\xe0\x45\xec\xd6\xa1\x29\x81\xd9\x6c\x60\x60\xf7\x2a\xc9\xdd\x01\ +\x19\xd9\xc9\x89\xb2\x62\x8e\x5a\x96\x1a\xa6\xcc\x99\x91\xa8\x97\ +\x6c\xe8\xbe\x6a\xad\xb1\x93\xe8\x8f\x49\xc8\x44\x12\x29\x62\x4a\ +\x4e\x21\xf9\x5e\x3f\x3c\xdd\x2b\x9f\xfa\x5e\x44\x24\x29\xd8\xae\ +\x8b\xd1\x27\x65\x56\xc0\x7c\x27\xe4\x0f\x47\x25\xd8\x63\xaf\x74\ +\xec\xf9\xd4\x1b\x09\xd8\x08\xb8\x57\x07\x66\xb7\x23\xe1\x94\x9f\ +\xf2\x9a\x0c\x4d\x1f\x2e\xb0\x50\x3f\x5e\xd4\xe8\x67\x32\x62\xd2\ +\x40\x2f\xad\x45\x97\xb8\x17\xed\x4b\x84\xd5\xdf\x4b\xf1\x9a\x70\ +\x36\x5c\xd0\xad\x66\xb0\x43\x41\x05\xb2\xea\x90\x4c\x62\x65\xdd\ +\x4d\x33\x18\x73\x69\x82\x78\x5b\x3f\xf4\x38\x62\xc2\x9c\xec\x33\ +\x33\xd8\xdc\xe3\x7e\xec\xf0\xd9\x17\xd8\x31\x31\x19\x99\x34\xde\ +\x4a\x2a\x12\x29\x85\xfd\xbf\xb9\x64\x85\x3b\x3e\x6e\xb4\xb7\x9a\ +\x46\x0f\x4c\xd1\x5f\xa9\x36\x0c\xad\x74\xe2\x10\x2b\xa9\x37\x1a\ +\x69\x05\xb7\xf2\x7f\x23\x54\xf9\x88\x88\x11\x47\x9c\x70\x4c\xfa\ +\x9b\x67\x13\x41\x7e\x50\x43\xb8\x3d\xb4\xb8\x4f\x75\x3b\x4a\x79\ +\x79\x6d\xd0\xd4\x37\x18\xe9\x3c\x45\xc1\x11\x12\x98\xb8\xec\x65\ +\x99\x0c\x16\x5b\xba\x60\xba\x56\xce\x85\x4f\xbf\xbd\x5a\xaa\x5f\ +\xde\x5e\x51\x88\x57\xe9\x48\xd0\xa4\x4c\x38\xe6\x58\xe8\xe6\x1d\ +\xea\x15\x62\xc6\x2b\x5e\x8d\x7e\x05\xa5\x97\xfd\x6e\x45\x0e\xd6\ +\xc9\xf4\xb6\x93\x37\xee\xe9\x22\x91\xb0\x2a\xa3\xbd\x36\xdd\x4e\ +\x65\x12\x38\x58\x80\xb8\xbb\x3a\x48\x17\xa3\xa3\xa1\x60\x45\x25\ +\x6c\xfd\x62\xb0\x7f\xc9\x2b\x0b\x4d\x99\x92\xfc\x7e\xc7\xa0\x74\ +\x2f\x1d\x37\x5e\xbe\xd6\x08\x75\xa6\x91\xdd\xbb\xde\x3f\xf4\xe6\ +\xe9\x04\x52\x6f\x05\x27\xf0\x53\xe6\xbe\xa9\xdb\x53\xce\xa2\xd0\ +\xb5\xb4\x92\xa1\xee\x66\x7f\x9c\x9c\xae\xdd\x32\xe4\x35\x50\xb1\ +\x65\x2d\x27\xa2\x5f\x26\x60\x24\x6c\x66\xa2\x7f\x13\x7f\xa4\x0e\ +\x62\xd4\xdf\x20\xc5\xd6\xc1\x59\x76\x32\x4a\xd0\x0a\x66\x69\x25\ +\x9d\xd2\xa1\xfe\xf0\x49\x50\x26\xdb\x12\x9c\xb4\x89\x23\x52\xa9\ +\x33\x1a\x59\x73\xde\x27\x69\x8d\x24\xd4\x05\xb0\x61\xcd\x1a\x4d\ +\xc9\x5a\x88\x20\x3b\x69\x60\x25\x52\xc4\xa9\x68\x6d\x9a\x01\x26\ +\x62\xff\x76\x45\x57\xbf\x33\xcd\x88\x92\x59\x1c\x9a\x3b\x9d\xd4\ +\x10\x56\x00\xfc\x3e\xf1\x49\x05\xa1\x56\x02\xed\x2b\x61\x34\x34\ +\x72\xe3\x9d\x74\x2a\x6b\xd9\x93\x50\x00\xa5\xb0\xf2\x3d\xac\x57\ +\x0b\x60\xe7\x45\x47\x8d\xf8\xa2\xa7\x89\xf2\xee\x60\x01\xef\x0f\ +\x60\x88\xa1\x7b\xdc\x29\x9b\xfa\x43\x5c\xa2\x65\x69\xba\x95\xb2\ +\xa7\xa6\x46\xcb\x0c\x76\x23\x8a\xb7\x1e\x48\xa9\x65\x54\x35\x15\ +\x78\x35\x21\x61\x11\xbe\xd6\xca\x89\x68\xd1\x82\x48\x79\xde\xe4\ +\x15\x4b\x6a\x99\xfc\xed\xb3\x58\x9f\x95\xf4\xdb\x04\x73\x51\xcc\ +\xcd\xb8\x2d\x43\x94\x4a\x68\xa6\xee\x87\x86\xea\x54\xc0\x79\xf4\ +\x60\x25\x25\x03\x8e\xad\x21\x16\xf5\x28\x1d\x6a\x91\x2e\x50\x47\ +\x54\x98\xea\xf3\x12\x49\x7d\x83\xb6\x1f\x3b\xb0\x92\x84\x69\x59\ +\x6b\x6d\x25\x44\x76\xa2\x6b\xeb\x85\x9e\x0b\x3a\xe9\x86\xd9\x30\ +\x2e\xe1\x2f\x52\x27\x2e\x3b\xe6\xfb\xfd\x8a\x9e\xe7\x16\x9f\x3e\ +\x21\x84\xbd\x6b\x3d\x01\x3c\x95\x26\x8d\x77\x8d\xad\x88\x26\xfa\ +\x99\x2c\x8f\x47\x55\x61\x74\xc0\x61\x44\xbf\xce\x0f\x92\x20\x6a\ +\x44\x91\x9c\x26\xa4\xcd\xd7\x70\xc9\x8a\x95\xcc\x73\x55\x58\xaa\ +\x81\xe9\xbd\x77\xf0\x17\xc9\xf3\x71\xd3\xff\xf0\xa3\x19\xe2\x90\ +\x8c\x2c\x9c\xa8\x4f\x7b\x9c\x40\xef\x7d\x9e\x16\xf9\x95\xbe\x2a\ +\x30\x52\x23\x74\x41\x72\x7e\x2b\x25\x92\xe7\x4d\x8c\x38\x0a\xfb\ +\xc2\xbd\x21\x12\xa0\xa4\x61\xc5\x15\x2b\x6a\x61\xdd\xd6\x92\x52\ +\x39\x69\xfb\x1b\x51\x2b\x8d\xa5\x57\x52\x13\x7b\x1d\x8a\x2f\x7e\ +\x34\x43\xec\x17\xdf\x04\xd2\x46\xdf\xb9\xe8\x8f\xb5\x92\xcc\x31\ +\x91\x50\xd8\x4f\x73\x69\x31\xc2\x8e\x51\xe9\x27\x34\x3a\xb6\x6c\ +\x89\x29\x88\x45\x6a\xd3\x57\x25\x33\x5a\xb6\x2c\xb9\x64\xc1\x46\ +\xb6\xce\x56\x92\xa5\xd8\xa0\x33\x61\x84\x4b\x67\xa4\x6d\x68\x84\ +\x4d\xa1\xf9\x91\x0d\xc1\x60\x8f\x96\x0e\x3d\x8d\xbe\xba\xec\xd9\ +\x29\xb1\xf4\x34\xfb\x1b\x6f\x05\x4a\xab\x83\x06\x80\x96\x36\x7e\ +\x2b\xca\xd6\x4a\x9a\xbe\xb1\x78\x0e\xc7\x94\x8a\x25\x4b\x56\x6c\ +\xc4\x5d\x36\x61\x72\x18\xd1\x3e\xd2\x03\x95\x81\x26\x94\x76\xd9\ +\x8f\x6b\x08\xb7\x47\x1e\xb3\xd4\x1f\x64\x5f\x40\xf7\x49\x23\x47\ +\xd4\x0d\x1a\x74\x7e\x9b\xa2\x7e\x4a\x70\xa5\x0e\x07\x1a\x61\xcb\ +\x1a\x99\xd6\xea\x58\x8b\x98\x78\x22\x18\x65\x2a\x02\x7b\xb5\xb0\ +\x5f\x90\x3c\x03\x21\x94\xf5\x1a\xec\x4a\xce\x99\xef\x8d\xf8\x7a\ +\x27\x82\x1f\xd3\x10\x7d\x82\xe2\x6b\xbe\xd5\x1f\xdc\x67\xe6\x37\ +\x3d\x10\x12\x53\x85\xd0\xba\x5b\x45\xd9\xc9\x74\xae\x3f\x07\xad\ +\x9c\x1f\x23\x88\x55\x5f\xbe\x57\x28\xa9\x1a\x2a\x59\x8e\x57\x0d\ +\x56\x0f\xda\xbd\x15\x44\xbb\x2c\xf6\xb0\xb3\xe6\x13\xb0\x5e\x6e\ +\xf4\x47\x33\x84\x93\x14\xd8\xa0\xa9\xf9\x8b\xfb\x9a\x2d\xff\xee\ +\x93\x63\xa9\xf9\x5a\xd9\xba\xaa\x84\x41\xe7\x24\x7a\x6b\x12\x2a\ +\xb6\x28\x51\x83\x4b\x24\x1c\x5a\x3a\xe2\xa0\x20\x13\xcb\x46\x56\ +\xbf\x18\xc2\xca\x49\xe8\x85\x76\x86\xab\xb6\x75\xc0\xc3\x34\x3d\ +\x4f\xbb\x0f\xd2\x9d\x44\x27\xaf\xaa\xa8\x9f\x8a\x6b\xdf\xcd\xf6\ +\x78\xce\x98\x82\x7b\x6a\x99\x6d\xcd\xa5\xfb\x33\x7f\xe2\x5b\x7e\ +\x4a\x45\xf5\x89\x0d\x9e\x82\x01\x04\xa7\x43\x36\x69\x44\xf0\xa6\ +\x8f\x34\xdd\x80\x07\xd9\x4f\x62\x79\x44\x61\x26\xe2\xbd\x9d\x90\ +\xc8\x75\x58\x26\xc1\x80\x4e\x60\x0e\x74\xaf\x76\x25\x7b\x26\x84\ +\xb3\x5e\xdc\x75\x58\xb6\xbd\xc2\x89\xd8\x0f\x90\x3b\xce\x91\xc3\ +\xb2\x70\x0b\x2e\xf8\x67\xfe\x09\xc5\xbb\xfc\x9c\xe3\x01\xbc\x46\ +\xc8\xe4\x7a\xb3\xf4\xb1\x21\x11\xd8\x2d\x92\x1a\x40\xc9\x8a\xed\ +\xed\x20\xb8\x36\x02\xb3\x19\x72\xb9\x2e\x5d\xd8\xe5\xea\x06\x68\ +\xa6\x19\x0c\x1e\xa9\xbd\xde\x3b\x42\x27\x88\x48\x19\xc9\xc6\xa8\ +\xe1\x93\xfe\x1e\x99\xe5\x2e\x3f\xef\x28\x3e\xa8\xfe\x70\xc9\x1f\ +\xf9\x92\x33\xfe\xcc\x25\xbf\xe0\x7f\xe5\x5d\x52\xb6\x94\x32\x82\ +\x14\x0d\x58\x6c\x04\x69\x1c\x5f\x1a\xa7\x02\xca\x27\xc2\xa0\xf4\ +\xdc\x88\x9d\x80\x8f\x4f\xd5\x1f\x61\x84\x79\x5d\xcb\xa2\x80\xbe\ +\xfe\x70\x62\xd8\xe1\xe2\xc4\x43\x05\x2c\x47\x25\x9a\x65\x89\x08\ +\xba\xb8\x01\x14\x7c\x1d\xf3\xef\xa5\xa8\x43\x16\x47\xc5\xa5\x7b\ +\xc8\x39\x5f\xf2\x57\xbe\xe6\x9c\x98\x9f\xf3\xbf\xf1\x26\x0d\x2d\ +\x0b\x59\xe6\xa0\x83\x7e\x84\x0a\xab\xb2\x75\xc8\x34\x7a\x8a\x7a\ +\x22\x99\x42\x44\xc4\x56\x8a\xea\x2a\xc8\xff\xf5\x88\xb4\xa7\x79\ +\x58\xe9\x7c\x31\x70\xc1\xc3\x85\x73\x7a\xef\x74\x20\x9a\xa7\x8a\ +\x8a\x52\xe8\xa6\xfa\x80\xc0\xf2\xca\x27\x42\x63\xd9\x7e\xb0\xfe\ +\xc3\x05\xdf\xf0\x15\x0f\xb8\xa4\xe2\x92\x4b\x7e\xc2\xff\xc9\xbf\ +\x25\x66\x03\x32\x97\xa3\x65\x34\x69\x08\xe9\x32\xe8\x7d\xba\xc0\ +\x91\x31\x52\x76\xc5\x14\xc2\x89\x69\xc2\x10\x5a\x3c\x10\x57\xf1\ +\x9a\xa8\x2a\x4c\x10\xab\xc1\xe2\x6b\xb5\x17\x3a\x77\xff\xa4\xd2\ +\xf4\x6b\xf6\xb6\x52\x3f\x8b\x29\xfe\x12\x86\xa8\x59\xb8\x6f\xf8\ +\x0b\x8f\x38\xe3\x9c\x0d\x35\x4f\xd8\xf0\x26\xff\x3b\x3f\x93\x8d\ +\xcb\x88\xcc\x8a\xf7\xd6\xf1\xc1\x8f\x8c\xf7\xdc\xd9\xee\x29\x6a\ +\xf9\x68\x47\x41\x2a\x93\xfa\x8d\x34\xfd\xeb\x80\x5e\xec\xc8\x24\ +\xf6\x29\xb2\xda\xee\x3c\x0c\x77\x91\x97\x72\x36\x5b\x16\x3c\xa4\ +\x70\x37\xdf\x4f\xee\xc5\x83\xc7\xfa\xca\x08\xd5\x63\xf7\x0d\xff\ +\xcc\x1f\x45\x16\x53\x73\xc1\x97\x8c\xf8\x3f\xf8\xbf\x48\xb8\x12\ +\x3c\xb0\x92\x2f\x31\xd2\x89\x3a\xfc\x56\x36\x60\x01\x3b\x49\x0c\ +\x2b\xd2\x1b\x37\xa9\x99\x30\x66\xcc\x39\x89\x2c\x1c\xd1\xa2\x38\ +\xd5\x84\xb0\x69\xaf\xd9\xd8\xd6\xb7\x15\xf7\x4f\xc4\x56\x46\xe7\ +\xd6\xdc\xe3\x02\xf8\x8f\x5f\x4d\x98\xaa\x68\xaf\x0e\x7a\x09\x43\ +\xf8\x36\x6b\x73\xd7\x7e\xfc\xff\xf0\x47\xfe\x2c\xd4\xe0\x46\xda\ +\xef\x6f\xf3\xaf\x70\xac\x83\xb0\xa7\xef\x53\x44\x68\x6a\xb1\xe1\ +\x6e\x3f\x67\x3b\x98\xc1\xe8\x84\x89\xb9\x3b\x11\x09\x15\x23\x66\ +\x1c\xb3\xe4\x88\x05\x5b\x1e\xb3\x64\x1b\xe4\xc5\xd5\xde\x4e\x7a\ +\xb5\xa7\x4d\xa0\x44\x21\x64\x5f\x46\x32\xa6\xa6\x60\x4e\xc6\x82\ +\xff\xca\x37\xac\xf9\x37\xfc\x9d\xbb\xa1\x7a\xe5\x55\x2d\x2a\xb9\ +\x2a\xd0\xd2\x77\x5b\x67\xaf\xc9\x23\x2a\x56\xce\x6b\xdd\x3f\x66\ +\x41\x49\x1b\x10\x24\x98\x73\x2a\xea\x3e\x26\x88\xa3\x20\xd9\xc2\ +\x7e\x57\x0b\x49\x88\x6d\x20\x07\x0c\x57\xd2\xfa\x29\x8d\x2c\x34\ +\xf0\xfc\xc0\x5a\xce\x82\x95\x88\x67\x94\xc1\x59\xda\xf0\x3d\x76\ +\x6d\xc2\x61\x66\xa9\x42\xae\x59\x0b\xeb\xaa\xa5\xe1\x82\xc7\xfc\ +\xdf\x9c\x63\x79\xdf\xcd\x19\xa9\xdd\xf0\x33\xd2\x5e\xec\x88\x04\ +\x40\xba\xbe\x17\xf6\x3f\x00\xe1\x00\x14\x01\xde\x26\x16\xb2\x00\ +\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +" + +qt_resource_name = b"\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x08\ +\x0b\x77\x5a\x87\ +\x00\x68\ +\x00\x65\x00\x61\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ +\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/graphicsview/dragdroprobot/images/head.png b/examples/widgets/graphicsview/dragdroprobot/images/head.png new file mode 100644 index 0000000000000000000000000000000000000000..1e520e09b8d0bde4af5947c1430a83feae03a822 GIT binary patch literal 14972 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 0: + angle = Edge.TwoPi - angle + + sourceArrowP1 = self.sourcePoint + QtCore.QPointF(math.sin(angle + Edge.Pi / 3) * self.arrowSize, + math.cos(angle + Edge.Pi / 3) * self.arrowSize) + sourceArrowP2 = self.sourcePoint + QtCore.QPointF(math.sin(angle + Edge.Pi - Edge.Pi / 3) * self.arrowSize, + math.cos(angle + Edge.Pi - Edge.Pi / 3) * self.arrowSize) + destArrowP1 = self.destPoint + QtCore.QPointF(math.sin(angle - Edge.Pi / 3) * self.arrowSize, + math.cos(angle - Edge.Pi / 3) * self.arrowSize) + destArrowP2 = self.destPoint + QtCore.QPointF(math.sin(angle - Edge.Pi + Edge.Pi / 3) * self.arrowSize, + math.cos(angle - Edge.Pi + Edge.Pi / 3) * self.arrowSize) + + painter.setBrush(QtCore.Qt.black) + painter.drawPolygon(QtGui.QPolygonF([line.p1(), sourceArrowP1, sourceArrowP2])) + painter.drawPolygon(QtGui.QPolygonF([line.p2(), destArrowP1, destArrowP2])) + + +class Node(QtWidgets.QGraphicsItem): + Type = QtWidgets.QGraphicsItem.UserType + 1 + + def __init__(self, graphWidget): + QtWidgets.QGraphicsItem.__init__(self) + + self.graph = weakref.ref(graphWidget) + self.edgeList = [] + self.newPos = QtCore.QPointF() + self.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable) + self.setFlag(QtWidgets.QGraphicsItem.ItemSendsGeometryChanges) + self.setCacheMode(self.DeviceCoordinateCache) + self.setZValue(-1) + + def type(self): + return Node.Type + + def addEdge(self, edge): + self.edgeList.append(weakref.ref(edge)) + edge.adjust() + + def edges(self): + return self.edgeList + + def calculateForces(self): + if not self.scene() or self.scene().mouseGrabberItem() is self: + self.newPos = self.pos() + return + + # Sum up all forces pushing this item away. + xvel = 0.0 + yvel = 0.0 + for item in self.scene().items(): + if not isinstance(item, Node): + continue + + line = QtCore.QLineF(self.mapFromItem(item, 0, 0), QtCore.QPointF(0, 0)) + dx = line.dx() + dy = line.dy() + l = 2.0 * (dx * dx + dy * dy) + if l > 0: + xvel += (dx * 150.0) / l + yvel += (dy * 150.0) / l + + # Now subtract all forces pulling items together. + weight = (len(self.edgeList) + 1) * 10.0 + for edge in self.edgeList: + if edge().sourceNode() is self: + pos = self.mapFromItem(edge().destNode(), 0, 0) + else: + pos = self.mapFromItem(edge().sourceNode(), 0, 0) + xvel += pos.x() / weight + yvel += pos.y() / weight + + if QtCore.qAbs(xvel) < 0.1 and QtCore.qAbs(yvel) < 0.1: + xvel = yvel = 0.0 + + sceneRect = self.scene().sceneRect() + self.newPos = self.pos() + QtCore.QPointF(xvel, yvel) + self.newPos.setX(min(max(self.newPos.x(), sceneRect.left() + 10), sceneRect.right() - 10)) + self.newPos.setY(min(max(self.newPos.y(), sceneRect.top() + 10), sceneRect.bottom() - 10)) + + def advance(self): + if self.newPos == self.pos(): + return False + + self.setPos(self.newPos) + return True + + def boundingRect(self): + adjust = 2.0 + return QtCore.QRectF(-10 - adjust, -10 - adjust, + 23 + adjust, 23 + adjust) + + def shape(self): + path = QtGui.QPainterPath() + path.addEllipse(-10, -10, 20, 20) + return path + + def paint(self, painter, option, widget): + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.darkGray) + painter.drawEllipse(-7, -7, 20, 20) + + gradient = QtGui.QRadialGradient(-3, -3, 10) + if option.state & QtWidgets.QStyle.State_Sunken: + gradient.setCenter(3, 3) + gradient.setFocalPoint(3, 3) + gradient.setColorAt(1, QtGui.QColor(QtCore.Qt.yellow).lighter(120)) + gradient.setColorAt(0, QtGui.QColor(QtCore.Qt.darkYellow).lighter(120)) + else: + gradient.setColorAt(0, QtCore.Qt.yellow) + gradient.setColorAt(1, QtCore.Qt.darkYellow) + + painter.setBrush(QtGui.QBrush(gradient)) + painter.setPen(QtGui.QPen(QtCore.Qt.black, 0)) + painter.drawEllipse(-10, -10, 20, 20) + + def itemChange(self, change, value): + if change == QtWidgets.QGraphicsItem.ItemPositionChange: + for edge in self.edgeList: + edge().adjust() + self.graph().itemMoved() + + return QtWidgets.QGraphicsItem.itemChange(self, change, value) + + def mousePressEvent(self, event): + self.update() + QtWidgets.QGraphicsItem.mousePressEvent(self, event) + + def mouseReleaseEvent(self, event): + self.update() + QtWidgets.QGraphicsItem.mouseReleaseEvent(self, event) + + +class GraphWidget(QtWidgets.QGraphicsView): + def __init__(self): + QtWidgets.QGraphicsView.__init__(self) + + self.timerId = 0 + + scene = QtWidgets.QGraphicsScene(self) + scene.setItemIndexMethod(QtWidgets.QGraphicsScene.NoIndex) + scene.setSceneRect(-200, -200, 400, 400) + self.setScene(scene) + self.setCacheMode(QtWidgets.QGraphicsView.CacheBackground) + self.setRenderHint(QtGui.QPainter.Antialiasing) + self.setTransformationAnchor(QtWidgets.QGraphicsView.AnchorUnderMouse) + self.setResizeAnchor(QtWidgets.QGraphicsView.AnchorViewCenter) + + node1 = Node(self) + node2 = Node(self) + node3 = Node(self) + node4 = Node(self) + self.centerNode = Node(self) + node6 = Node(self) + node7 = Node(self) + node8 = Node(self) + node9 = Node(self) + scene.addItem(node1) + scene.addItem(node2) + scene.addItem(node3) + scene.addItem(node4) + scene.addItem(self.centerNode) + scene.addItem(node6) + scene.addItem(node7) + scene.addItem(node8) + scene.addItem(node9) + scene.addItem(Edge(node1, node2)) + scene.addItem(Edge(node2, node3)) + scene.addItem(Edge(node2, self.centerNode)) + scene.addItem(Edge(node3, node6)) + scene.addItem(Edge(node4, node1)) + scene.addItem(Edge(node4, self.centerNode)) + scene.addItem(Edge(self.centerNode, node6)) + scene.addItem(Edge(self.centerNode, node8)) + scene.addItem(Edge(node6, node9)) + scene.addItem(Edge(node7, node4)) + scene.addItem(Edge(node8, node7)) + scene.addItem(Edge(node9, node8)) + + node1.setPos(-50, -50) + node2.setPos(0, -50) + node3.setPos(50, -50) + node4.setPos(-50, 0) + self.centerNode.setPos(0, 0) + node6.setPos(50, 0) + node7.setPos(-50, 50) + node8.setPos(0, 50) + node9.setPos(50, 50) + + self.scale(0.8, 0.8) + self.setMinimumSize(400, 400) + self.setWindowTitle(self.tr("Elastic Nodes")) + + def itemMoved(self): + if not self.timerId: + self.timerId = self.startTimer(1000 / 25) + + def keyPressEvent(self, event): + key = event.key() + + if key == QtCore.Qt.Key_Up: + self.centerNode.moveBy(0, -20) + elif key == QtCore.Qt.Key_Down: + self.centerNode.moveBy(0, 20) + elif key == QtCore.Qt.Key_Left: + self.centerNode.moveBy(-20, 0) + elif key == QtCore.Qt.Key_Right: + self.centerNode.moveBy(20, 0) + elif key == QtCore.Qt.Key_Plus: + self.scaleView(1.2) + elif key == QtCore.Qt.Key_Minus: + self.scaleView(1 / 1.2) + elif key == QtCore.Qt.Key_Space or key == QtCore.Qt.Key_Enter: + for item in self.scene().items(): + if isinstance(item, Node): + item.setPos(-150 + QtCore.qrand() % 300, -150 + QtCore.qrand() % 300) + else: + QtWidgets.QGraphicsView.keyPressEvent(self, event) + + + def timerEvent(self, event): + nodes = [item for item in self.scene().items() if isinstance(item, Node)] + + for node in nodes: + node.calculateForces() + + itemsMoved = False + for node in nodes: + if node.advance(): + itemsMoved = True + + if not itemsMoved: + self.killTimer(self.timerId) + self.timerId = 0 + + def wheelEvent(self, event): + self.scaleView(math.pow(2.0, -event.delta() / 240.0)) + + def drawBackground(self, painter, rect): + # Shadow. + sceneRect = self.sceneRect() + rightShadow = QtCore.QRectF(sceneRect.right(), sceneRect.top() + 5, 5, sceneRect.height()) + bottomShadow = QtCore.QRectF(sceneRect.left() + 5, sceneRect.bottom(), sceneRect.width(), 5) + if rightShadow.intersects(rect) or rightShadow.contains(rect): + painter.fillRect(rightShadow, QtCore.Qt.darkGray) + if bottomShadow.intersects(rect) or bottomShadow.contains(rect): + painter.fillRect(bottomShadow, QtCore.Qt.darkGray) + + # Fill. + gradient = QtGui.QLinearGradient(sceneRect.topLeft(), sceneRect.bottomRight()) + gradient.setColorAt(0, QtCore.Qt.white) + gradient.setColorAt(1, QtCore.Qt.lightGray) + painter.fillRect(rect.intersected(sceneRect), QtGui.QBrush(gradient)) + painter.setBrush(QtCore.Qt.NoBrush) + painter.drawRect(sceneRect) + + # Text. + textRect = QtCore.QRectF(sceneRect.left() + 4, sceneRect.top() + 4, + sceneRect.width() - 4, sceneRect.height() - 4) + message = self.tr("Click and drag the nodes around, and zoom with the " + "mouse wheel or the '+' and '-' keys") + + font = painter.font() + font.setBold(True) + font.setPointSize(14) + painter.setFont(font) + painter.setPen(QtCore.Qt.lightGray) + painter.drawText(textRect.translated(2, 2), message) + painter.setPen(QtCore.Qt.black) + painter.drawText(textRect, message) + + def scaleView(self, scaleFactor): + factor = self.matrix().scale(scaleFactor, scaleFactor).mapRect(QtCore.QRectF(0, 0, 1, 1)).width() + + if factor < 0.07 or factor > 100: + return + + self.scale(scaleFactor, scaleFactor) + + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + QtCore.qsrand(QtCore.QTime(0,0,0).secsTo(QtCore.QTime.currentTime())) + + widget = GraphWidget() + widget.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/itemviews/addressbook/adddialogwidget.py b/examples/widgets/itemviews/addressbook/adddialogwidget.py new file mode 100644 index 0000000..cdf11a7 --- /dev/null +++ b/examples/widgets/itemviews/addressbook/adddialogwidget.py @@ -0,0 +1,103 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2011 Arun Srinivasan +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import Qt +from PySide2.QtWidgets import (QDialog, QLabel, QTextEdit, QLineEdit, + QDialogButtonBox, QGridLayout, QVBoxLayout) + +class AddDialogWidget(QDialog): + """ A dialog to add a new address to the addressbook. """ + + def __init__(self, parent=None): + super(AddDialogWidget, self).__init__(parent) + + nameLabel = QLabel("Name") + addressLabel = QLabel("Address") + buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | + QDialogButtonBox.Cancel) + + self.nameText = QLineEdit() + self.addressText = QTextEdit() + + grid = QGridLayout() + grid.setColumnStretch(1, 2) + grid.addWidget(nameLabel, 0, 0) + grid.addWidget(self.nameText, 0, 1) + grid.addWidget(addressLabel, 1, 0, Qt.AlignLeft | Qt.AlignTop) + grid.addWidget(self.addressText, 1, 1, Qt.AlignLeft) + + layout = QVBoxLayout() + layout.addLayout(grid) + layout.addWidget(buttonBox) + + self.setLayout(layout) + + self.setWindowTitle("Add a Contact") + + buttonBox.accepted.connect(self.accept) + buttonBox.rejected.connect(self.reject) + + # These properties make using this dialog a little cleaner. It's much + # nicer to type "addDialog.address" to retrieve the address as compared + # to "addDialog.addressText.toPlainText()" + @property + def name(self): + return self.nameText.text() + + @property + def address(self): + return self.addressText.toPlainText() + + +if __name__ == "__main__": + import sys + from PySide2.QtWidgets import QApplication + + app = QApplication(sys.argv) + + dialog = AddDialogWidget() + if (dialog.exec_()): + name = dialog.name + address = dialog.address + print("Name:" + name) + print("Address:" + address) diff --git a/examples/widgets/itemviews/addressbook/addressbook.py b/examples/widgets/itemviews/addressbook/addressbook.py new file mode 100644 index 0000000..32ab511 --- /dev/null +++ b/examples/widgets/itemviews/addressbook/addressbook.py @@ -0,0 +1,131 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2011 Arun Srinivasan +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import (QMainWindow, QAction, QFileDialog, QApplication) + +from addresswidget import AddressWidget + + +class MainWindow(QMainWindow): + + def __init__(self, parent=None): + super(MainWindow, self).__init__(parent) + + self.addressWidget = AddressWidget() + self.setCentralWidget(self.addressWidget) + self.createMenus() + self.setWindowTitle("Address Book") + + def createMenus(self): + # Create the main menuBar menu items + fileMenu = self.menuBar().addMenu("&File") + toolMenu = self.menuBar().addMenu("&Tools") + + # Populate the File menu + openAction = self.createAction("&Open...", fileMenu, self.openFile) + saveAction = self.createAction("&Save As...", fileMenu, self.saveFile) + fileMenu.addSeparator() + exitAction = self.createAction("E&xit", fileMenu, self.close) + + # Populate the Tools menu + addAction = self.createAction("&Add Entry...", toolMenu, self.addressWidget.addEntry) + self.editAction = self.createAction("&Edit Entry...", toolMenu, self.addressWidget.editEntry) + toolMenu.addSeparator() + self.removeAction = self.createAction("&Remove Entry", toolMenu, self.addressWidget.removeEntry) + + # Disable the edit and remove menu items initially, as there are + # no items yet. + self.editAction.setEnabled(False) + self.removeAction.setEnabled(False) + + # Wire up the updateActions slot + self.addressWidget.selectionChanged.connect(self.updateActions) + + def createAction(self, text, menu, slot): + """ Helper function to save typing when populating menus + with action. + """ + action = QAction(text, self) + menu.addAction(action) + action.triggered.connect(slot) + return action + + # Quick gotcha: + # + # QFiledialog.getOpenFilename and QFileDialog.get.SaveFileName don't + # behave in PySide2 as they do in Qt, where they return a QString + # containing the filename. + # + # In PySide2, these functions return a tuple: (filename, filter) + + def openFile(self): + filename, _ = QFileDialog.getOpenFileName(self) + if filename: + self.addressWidget.readFromFile(filename) + + def saveFile(self): + filename, _ = QFileDialog.getSaveFileName(self) + if filename: + self.addressWidget.writeToFile(filename) + + def updateActions(self, selection): + """ Only allow the user to remove or edit an item if an item + is actually selected. + """ + indexes = selection.indexes() + + if len(indexes) > 0: + self.removeAction.setEnabled(True) + self.editAction.setEnabled(True) + else: + self.removeAction.setEnabled(False) + self.editAction.setEnabled(False) + + +if __name__ == "__main__": + """ Run the application. """ + import sys + app = QApplication(sys.argv) + mw = MainWindow() + mw.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/itemviews/addressbook/addresswidget.py b/examples/widgets/itemviews/addressbook/addresswidget.py new file mode 100644 index 0000000..e275ab7 --- /dev/null +++ b/examples/widgets/itemviews/addressbook/addresswidget.py @@ -0,0 +1,249 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2011 Arun Srinivasan +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +try: + import cpickle as pickle +except ImportError: + import pickle + +from PySide2.QtCore import (Qt, Signal, QRegExp, QModelIndex, + QItemSelection, QItemSelectionModel, QSortFilterProxyModel) +from PySide2.QtWidgets import (QWidget, QTabWidget, QMessageBox, QTableView, + QAbstractItemView) + +from tablemodel import TableModel +from newaddresstab import NewAddressTab +from adddialogwidget import AddDialogWidget + + +class AddressWidget(QTabWidget): + """ The central widget of the application. Most of the addressbook's + functionality is contained in this class. + """ + + selectionChanged = Signal(QItemSelection) + + def __init__(self, parent=None): + """ Initialize the AddressWidget. """ + super(AddressWidget, self).__init__(parent) + + self.tableModel = TableModel() + self.newAddressTab = NewAddressTab() + self.newAddressTab.sendDetails.connect(self.addEntry) + + self.addTab(self.newAddressTab, "Address Book") + + self.setupTabs() + + def addEntry(self, name=None, address=None): + """ Add an entry to the addressbook. """ + if name is None and address is None: + addDialog = AddDialogWidget() + + if addDialog.exec_(): + name = addDialog.name + address = addDialog.address + + address = {"name": name, "address": address} + addresses = self.tableModel.addresses[:] + + # The QT docs for this example state that what we're doing here + # is checking if the entered name already exists. What they + # (and we here) are actually doing is checking if the whole + # name/address pair exists already - ok for the purposes of this + # example, but obviously not how a real addressbook application + # should behave. + try: + addresses.remove(address) + QMessageBox.information(self, "Duplicate Name", + "The name \"%s\" already exists." % name) + except ValueError: + # The address didn't already exist, so let's add it to the model. + + # Step 1: create the row + self.tableModel.insertRows(0) + + # Step 2: get the index of the newly created row and use it. + # to set the name + ix = self.tableModel.index(0, 0, QModelIndex()) + self.tableModel.setData(ix, address["name"], Qt.EditRole) + + # Step 3: lather, rinse, repeat for the address. + ix = self.tableModel.index(0, 1, QModelIndex()) + self.tableModel.setData(ix, address["address"], Qt.EditRole) + + # Remove the newAddressTab, as we now have at least one + # address in the model. + self.removeTab(self.indexOf(self.newAddressTab)) + + # The screenshot for the QT example shows nicely formatted + # multiline cells, but the actual application doesn't behave + # quite so nicely, at least on Ubuntu. Here we resize the newly + # created row so that multiline addresses look reasonable. + tableView = self.currentWidget() + tableView.resizeRowToContents(ix.row()) + + def editEntry(self): + """ Edit an entry in the addressbook. """ + tableView = self.currentWidget() + proxyModel = tableView.model() + selectionModel = tableView.selectionModel() + + # Get the name and address of the currently selected row. + indexes = selectionModel.selectedRows() + + for index in indexes: + row = proxyModel.mapToSource(index).row() + ix = self.tableModel.index(row, 0, QModelIndex()) + name = self.tableModel.data(ix, Qt.DisplayRole) + ix = self.tableModel.index(row, 1, QModelIndex()) + address = self.tableModel.data(ix, Qt.DisplayRole) + + # Open an addDialogWidget, and only allow the user to edit the address. + addDialog = AddDialogWidget() + addDialog.setWindowTitle("Edit a Contact") + + addDialog.nameText.setReadOnly(True) + addDialog.nameText.setText(name) + addDialog.addressText.setText(address) + + # If the address is different, add it to the model. + if addDialog.exec_(): + newAddress = addDialog.address + if newAddress != address: + ix = self.tableModel.index(row, 1, QModelIndex()) + self.tableModel.setData(ix, newAddress, Qt.EditRole) + + def removeEntry(self): + """ Remove an entry from the addressbook. """ + tableView = self.currentWidget() + proxyModel = tableView.model() + selectionModel = tableView.selectionModel() + + # Just like editEntry, but this time remove the selected row. + indexes = selectionModel.selectedRows() + + for index in indexes: + row = proxyModel.mapToSource(index).row() + self.tableModel.removeRows(row) + + # If we've removed the last address in the model, display the + # newAddressTab + if self.tableModel.rowCount() == 0: + self.insertTab(0, self.newAddressTab, "Address Book") + + def setupTabs(self): + """ Setup the various tabs in the AddressWidget. """ + groups = ["ABC", "DEF", "GHI", "JKL", "MNO", "PQR", "STU", "VW", "XYZ"] + + for group in groups: + proxyModel = QSortFilterProxyModel(self) + proxyModel.setSourceModel(self.tableModel) + proxyModel.setDynamicSortFilter(True) + + tableView = QTableView() + tableView.setModel(proxyModel) + tableView.setSortingEnabled(True) + tableView.setSelectionBehavior(QAbstractItemView.SelectRows) + tableView.horizontalHeader().setStretchLastSection(True) + tableView.verticalHeader().hide() + tableView.setEditTriggers(QAbstractItemView.NoEditTriggers) + tableView.setSelectionMode(QAbstractItemView.SingleSelection) + + # This here be the magic: we use the group name (e.g. "ABC") to + # build the regex for the QSortFilterProxyModel for the group's + # tab. The regex will end up looking like "^[ABC].*", only + # allowing this tab to display items where the name starts with + # "A", "B", or "C". Notice that we set it to be case-insensitive. + reFilter = "^[%s].*" % group + + proxyModel.setFilterRegExp(QRegExp(reFilter, Qt.CaseInsensitive)) + proxyModel.setFilterKeyColumn(0) # Filter on the "name" column + proxyModel.sort(0, Qt.AscendingOrder) + + # This prevents an application crash (see: http://www.qtcentre.org/threads/58874-QListView-SelectionModel-selectionChanged-Crash) + viewselectionmodel = tableView.selectionModel() + tableView.selectionModel().selectionChanged.connect(self.selectionChanged) + + self.addTab(tableView, group) + + # Note: the QT example uses a QDataStream for the saving and loading. + # Here we're using a python dictionary to store the addresses, which + # can't be streamed using QDataStream, so we just use cpickle for this + # example. + def readFromFile(self, filename): + """ Read contacts in from a file. """ + try: + f = open(filename, "rb") + addresses = pickle.load(f) + except IOError: + QMessageBox.information(self, "Unable to open file: %s" % filename) + finally: + f.close() + + if len(addresses) == 0: + QMessageBox.information(self, "No contacts in file: %s" % filename) + else: + for address in addresses: + self.addEntry(address["name"], address["address"]) + + def writeToFile(self, filename): + """ Save all contacts in the model to a file. """ + try: + f = open(filename, "wb") + pickle.dump(self.tableModel.addresses, f) + + except IOError: + QMessageBox.information(self, "Unable to open file: %s" % filename) + finally: + f.close() + + +if __name__ == "__main__": + import sys + from PySide2.QtWidgets import QApplication + + app = QApplication(sys.argv) + addressWidget = AddressWidget() + addressWidget.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/itemviews/addressbook/newaddresstab.py b/examples/widgets/itemviews/addressbook/newaddresstab.py new file mode 100644 index 0000000..afb8e66 --- /dev/null +++ b/examples/widgets/itemviews/addressbook/newaddresstab.py @@ -0,0 +1,94 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2011 Arun Srinivasan +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import (Qt, Signal) +from PySide2.QtWidgets import (QWidget, QLabel, QPushButton, QVBoxLayout) + +from adddialogwidget import AddDialogWidget + +class NewAddressTab(QWidget): + """ An extra tab that prompts the user to add new contacts. + To be displayed only when there are no contacts in the model. + """ + + sendDetails = Signal(str, str) + + def __init__(self, parent=None): + super(NewAddressTab, self).__init__(parent) + + descriptionLabel = QLabel("There are no contacts in your address book." + "\nClick Add to add new contacts.") + + addButton = QPushButton("Add") + + layout = QVBoxLayout() + layout.addWidget(descriptionLabel) + layout.addWidget(addButton, 0, Qt.AlignCenter) + + self.setLayout(layout) + + addButton.clicked.connect(self.addEntry) + + def addEntry(self): + addDialog = AddDialogWidget() + + if addDialog.exec_(): + name = addDialog.name + address = addDialog.address + self.sendDetails.emit(name, address) + + +if __name__ == "__main__": + + def printAddress(name, address): + print("Name:" + name) + print("Address:" + address) + + import sys + from PySide2.QtWidgets import QApplication + + app = QApplication(sys.argv) + newAddressTab = NewAddressTab() + newAddressTab.sendDetails.connect(printAddress) + newAddressTab.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/itemviews/addressbook/tablemodel.py b/examples/widgets/itemviews/addressbook/tablemodel.py new file mode 100644 index 0000000..240a434 --- /dev/null +++ b/examples/widgets/itemviews/addressbook/tablemodel.py @@ -0,0 +1,147 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2011 Arun Srinivasan +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import (Qt, QAbstractTableModel, QModelIndex) + +class TableModel(QAbstractTableModel): + + def __init__(self, addresses=None, parent=None): + super(TableModel, self).__init__(parent) + + if addresses is None: + self.addresses = [] + else: + self.addresses = addresses + + def rowCount(self, index=QModelIndex()): + """ Returns the number of rows the model holds. """ + return len(self.addresses) + + def columnCount(self, index=QModelIndex()): + """ Returns the number of columns the model holds. """ + return 2 + + def data(self, index, role=Qt.DisplayRole): + """ Depending on the index and role given, return data. If not + returning data, return None (PySide equivalent of QT's + "invalid QVariant"). + """ + if not index.isValid(): + return None + + if not 0 <= index.row() < len(self.addresses): + return None + + if role == Qt.DisplayRole: + name = self.addresses[index.row()]["name"] + address = self.addresses[index.row()]["address"] + + if index.column() == 0: + return name + elif index.column() == 1: + return address + + return None + + def headerData(self, section, orientation, role=Qt.DisplayRole): + """ Set the headers to be displayed. """ + if role != Qt.DisplayRole: + return None + + if orientation == Qt.Horizontal: + if section == 0: + return "Name" + elif section == 1: + return "Address" + + return None + + def insertRows(self, position, rows=1, index=QModelIndex()): + """ Insert a row into the model. """ + self.beginInsertRows(QModelIndex(), position, position + rows - 1) + + for row in range(rows): + self.addresses.insert(position + row, {"name":"", "address":""}) + + self.endInsertRows() + return True + + def removeRows(self, position, rows=1, index=QModelIndex()): + """ Remove a row from the model. """ + self.beginRemoveRows(QModelIndex(), position, position + rows - 1) + + del self.addresses[position:position+rows] + + self.endRemoveRows() + return True + + def setData(self, index, value, role=Qt.EditRole): + """ Adjust the data (set it to ) depending on the given + index and role. + """ + if role != Qt.EditRole: + return False + + if index.isValid() and 0 <= index.row() < len(self.addresses): + address = self.addresses[index.row()] + if index.column() == 0: + address["name"] = value + elif index.column() == 1: + address["address"] = value + else: + return False + + self.dataChanged.emit(index, index, 0) + return True + + return False + + def flags(self, index): + """ Set the item flags at the given index. Seems like we're + implementing this function just to see how it's done, as we + manually adjust each tableView to have NoEditTriggers. + """ + if not index.isValid(): + return Qt.ItemIsEnabled + return Qt.ItemFlags(QAbstractTableModel.flags(self, index) | + Qt.ItemIsEditable) diff --git a/examples/widgets/itemviews/basicsortfiltermodel.py b/examples/widgets/itemviews/basicsortfiltermodel.py new file mode 100755 index 0000000..c8df546 --- /dev/null +++ b/examples/widgets/itemviews/basicsortfiltermodel.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets + + +class Window(QtWidgets.QWidget): + def __init__(self): + super(Window, self).__init__() + + self.proxyModel = QtCore.QSortFilterProxyModel() + self.proxyModel.setDynamicSortFilter(True) + + self.sourceGroupBox = QtWidgets.QGroupBox("Original Model") + self.proxyGroupBox = QtWidgets.QGroupBox("Sorted/Filtered Model") + + self.sourceView = QtWidgets.QTreeView() + self.sourceView.setRootIsDecorated(False) + self.sourceView.setAlternatingRowColors(True) + + self.proxyView = QtWidgets.QTreeView() + self.proxyView.setRootIsDecorated(False) + self.proxyView.setAlternatingRowColors(True) + self.proxyView.setModel(self.proxyModel) + self.proxyView.setSortingEnabled(True) + + self.sortCaseSensitivityCheckBox = QtWidgets.QCheckBox("Case sensitive sorting") + self.filterCaseSensitivityCheckBox = QtWidgets.QCheckBox("Case sensitive filter") + + self.filterPatternLineEdit = QtWidgets.QLineEdit() + self.filterPatternLabel = QtWidgets.QLabel("&Filter pattern:") + self.filterPatternLabel.setBuddy(self.filterPatternLineEdit) + + self.filterSyntaxComboBox = QtWidgets.QComboBox() + self.filterSyntaxComboBox.addItem("Regular expression", + QtCore.QRegExp.RegExp) + self.filterSyntaxComboBox.addItem("Wildcard", + QtCore.QRegExp.Wildcard) + self.filterSyntaxComboBox.addItem("Fixed string", + QtCore.QRegExp.FixedString) + self.filterSyntaxLabel = QtWidgets.QLabel("Filter &syntax:") + self.filterSyntaxLabel.setBuddy(self.filterSyntaxComboBox) + + self.filterColumnComboBox = QtWidgets.QComboBox() + self.filterColumnComboBox.addItem("Subject") + self.filterColumnComboBox.addItem("Sender") + self.filterColumnComboBox.addItem("Date") + self.filterColumnLabel = QtWidgets.QLabel("Filter &column:") + self.filterColumnLabel.setBuddy(self.filterColumnComboBox) + + self.filterPatternLineEdit.textChanged.connect(self.filterRegExpChanged) + self.filterSyntaxComboBox.currentIndexChanged.connect(self.filterRegExpChanged) + self.filterColumnComboBox.currentIndexChanged.connect(self.filterColumnChanged) + self.filterCaseSensitivityCheckBox.toggled.connect(self.filterRegExpChanged) + self.sortCaseSensitivityCheckBox.toggled.connect(self.sortChanged) + + sourceLayout = QtWidgets.QHBoxLayout() + sourceLayout.addWidget(self.sourceView) + self.sourceGroupBox.setLayout(sourceLayout) + + proxyLayout = QtWidgets.QGridLayout() + proxyLayout.addWidget(self.proxyView, 0, 0, 1, 3) + proxyLayout.addWidget(self.filterPatternLabel, 1, 0) + proxyLayout.addWidget(self.filterPatternLineEdit, 1, 1, 1, 2) + proxyLayout.addWidget(self.filterSyntaxLabel, 2, 0) + proxyLayout.addWidget(self.filterSyntaxComboBox, 2, 1, 1, 2) + proxyLayout.addWidget(self.filterColumnLabel, 3, 0) + proxyLayout.addWidget(self.filterColumnComboBox, 3, 1, 1, 2) + proxyLayout.addWidget(self.filterCaseSensitivityCheckBox, 4, 0, 1, 2) + proxyLayout.addWidget(self.sortCaseSensitivityCheckBox, 4, 2) + self.proxyGroupBox.setLayout(proxyLayout) + + mainLayout = QtWidgets.QVBoxLayout() + mainLayout.addWidget(self.sourceGroupBox) + mainLayout.addWidget(self.proxyGroupBox) + self.setLayout(mainLayout) + + self.setWindowTitle("Basic Sort/Filter Model") + self.resize(500, 450) + + self.proxyView.sortByColumn(1, QtCore.Qt.AscendingOrder) + self.filterColumnComboBox.setCurrentIndex(1) + + self.filterPatternLineEdit.setText("Andy|Grace") + self.filterCaseSensitivityCheckBox.setChecked(True) + self.sortCaseSensitivityCheckBox.setChecked(True) + + def setSourceModel(self, model): + self.proxyModel.setSourceModel(model) + self.sourceView.setModel(model) + + def filterRegExpChanged(self): + syntax_nr = self.filterSyntaxComboBox.itemData(self.filterSyntaxComboBox.currentIndex()) + syntax = QtCore.QRegExp.PatternSyntax(syntax_nr) + + if self.filterCaseSensitivityCheckBox.isChecked(): + caseSensitivity = QtCore.Qt.CaseSensitive + else: + caseSensitivity = QtCore.Qt.CaseInsensitive + + regExp = QtCore.QRegExp(self.filterPatternLineEdit.text(), + caseSensitivity, syntax) + self.proxyModel.setFilterRegExp(regExp) + + def filterColumnChanged(self): + self.proxyModel.setFilterKeyColumn(self.filterColumnComboBox.currentIndex()) + + def sortChanged(self): + if self.sortCaseSensitivityCheckBox.isChecked(): + caseSensitivity = QtCore.Qt.CaseSensitive + else: + caseSensitivity = QtCore.Qt.CaseInsensitive + + self.proxyModel.setSortCaseSensitivity(caseSensitivity) + + +def addMail(model, subject, sender, date): + model.insertRow(0) + model.setData(model.index(0, 0), subject) + model.setData(model.index(0, 1), sender) + model.setData(model.index(0, 2), date) + + +def createMailModel(parent): + model = QtGui.QStandardItemModel(0, 3, parent) + + model.setHeaderData(0, QtCore.Qt.Horizontal, "Subject") + model.setHeaderData(1, QtCore.Qt.Horizontal, "Sender") + model.setHeaderData(2, QtCore.Qt.Horizontal, "Date") + + addMail(model, "Happy New Year!", "Grace K. ", + QtCore.QDateTime(QtCore.QDate(2006, 12, 31), QtCore.QTime(17, 3))) + addMail(model, "Radically new concept", "Grace K. ", + QtCore.QDateTime(QtCore.QDate(2006, 12, 22), QtCore.QTime(9, 44))) + addMail(model, "Accounts", "pascale@nospam.com", + QtCore.QDateTime(QtCore.QDate(2006, 12, 31), QtCore.QTime(12, 50))) + addMail(model, "Expenses", "Joe Bloggs ", + QtCore.QDateTime(QtCore.QDate(2006, 12, 25), QtCore.QTime(11, 39))) + addMail(model, "Re: Expenses", "Andy ", + QtCore.QDateTime(QtCore.QDate(2007, 1, 2), QtCore.QTime(16, 5))) + addMail(model, "Re: Accounts", "Joe Bloggs ", + QtCore.QDateTime(QtCore.QDate(2007, 1, 3), QtCore.QTime(14, 18))) + addMail(model, "Re: Accounts", "Andy ", + QtCore.QDateTime(QtCore.QDate(2007, 1, 3), QtCore.QTime(14, 26))) + addMail(model, "Sports", "Linda Smith ", + QtCore.QDateTime(QtCore.QDate(2007, 1, 5), QtCore.QTime(11, 33))) + addMail(model, "AW: Sports", "Rolf Newschweinstein ", + QtCore.QDateTime(QtCore.QDate(2007, 1, 5), QtCore.QTime(12, 0))) + addMail(model, "RE: Sports", "Petra Schmidt ", + QtCore.QDateTime(QtCore.QDate(2007, 1, 5), QtCore.QTime(12, 1))) + + return model + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + window = Window() + window.setSourceModel(createMailModel(window)) + window.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/itemviews/fetchmore.py b/examples/widgets/itemviews/fetchmore.py new file mode 100755 index 0000000..2eeb1bd --- /dev/null +++ b/examples/widgets/itemviews/fetchmore.py @@ -0,0 +1,148 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2009 Darryl Wallace, 2009 +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets + + +class FileListModel(QtCore.QAbstractListModel): + numberPopulated = QtCore.Signal(int) + + def __init__(self, parent=None): + super(FileListModel, self).__init__(parent) + + self.fileCount = 0 + self.fileList = [] + + def rowCount(self, parent=QtCore.QModelIndex()): + return self.fileCount + + def data(self, index, role=QtCore.Qt.DisplayRole): + if not index.isValid(): + return None + + if index.row() >= len(self.fileList) or index.row() < 0: + return None + + if role == QtCore.Qt.DisplayRole: + return self.fileList[index.row()] + + if role == QtCore.Qt.BackgroundRole: + batch = (index.row() // 100) % 2 +# FIXME: QGuiApplication::palette() required + if batch == 0: + return QtWidgets.qApp.palette().base() + + return QtWidgets.qApp.palette().alternateBase() + + return None + + def canFetchMore(self, index): + return self.fileCount < len(self.fileList) + + def fetchMore(self, index): + remainder = len(self.fileList) - self.fileCount + itemsToFetch = min(100, remainder) + + self.beginInsertRows(QtCore.QModelIndex(), self.fileCount, + self.fileCount + itemsToFetch) + + self.fileCount += itemsToFetch + + self.endInsertRows() + + self.numberPopulated.emit(itemsToFetch) + + def setDirPath(self, path): + dir = QtCore.QDir(path) + + self.beginResetModel() + self.fileList = list(dir.entryList()) + self.fileCount = 0 + self.endResetModel() + + +class Window(QtWidgets.QWidget): + def __init__(self, parent=None): + super(Window, self).__init__(parent) + + model = FileListModel(self) + model.setDirPath(QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.PrefixPath)) + + label = QtWidgets.QLabel("Directory") + lineEdit = QtWidgets.QLineEdit() + label.setBuddy(lineEdit) + + view = QtWidgets.QListView() + view.setModel(model) + + self.logViewer = QtWidgets.QTextBrowser() + self.logViewer.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)) + + lineEdit.textChanged.connect(model.setDirPath) + lineEdit.textChanged.connect(self.logViewer.clear) + model.numberPopulated.connect(self.updateLog) + + layout = QtWidgets.QGridLayout() + layout.addWidget(label, 0, 0) + layout.addWidget(lineEdit, 0, 1) + layout.addWidget(view, 1, 0, 1, 2) + layout.addWidget(self.logViewer, 2, 0, 1, 2) + + self.setLayout(layout) + self.setWindowTitle("Fetch More Example") + + def updateLog(self, number): + self.logViewer.append("%d items added." % number) + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + + window = Window() + window.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/itemviews/stardelegate/stardelegate.py b/examples/widgets/itemviews/stardelegate/stardelegate.py new file mode 100644 index 0000000..34492e3 --- /dev/null +++ b/examples/widgets/itemviews/stardelegate/stardelegate.py @@ -0,0 +1,174 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2010 Hans-Peter Jansen +## Copyright (C) 2011 Arun Srinivasan +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import (QItemDelegate, QStyledItemDelegate, QStyle) + +from starrating import StarRating +from stareditor import StarEditor + +class StarDelegate(QStyledItemDelegate): + """ A subclass of QStyledItemDelegate that allows us to render our + pretty star ratings. + """ + + def __init__(self, parent=None): + super(StarDelegate, self).__init__(parent) + + def paint(self, painter, option, index): + """ Paint the items in the table. + + If the item referred to by is a StarRating, we handle the + painting ourselves. For the other items, we let the base class + handle the painting as usual. + + In a polished application, we'd use a better check than the + column number to find out if we needed to paint the stars, but + it works for the purposes of this example. + """ + if index.column() == 3: + starRating = StarRating(index.data()) + + # If the row is currently selected, we need to make sure we + # paint the background accordingly. + if option.state & QStyle.State_Selected: + # The original C++ example used option.palette.foreground() to + # get the brush for painting, but there are a couple of + # problems with that: + # - foreground() is obsolete now, use windowText() instead + # - more importantly, windowText() just returns a brush + # containing a flat color, where sometimes the style + # would have a nice subtle gradient or something. + # Here we just use the brush of the painter object that's + # passed in to us, which keeps the row highlighting nice + # and consistent. + painter.fillRect(option.rect, painter.brush()) + + # Now that we've painted the background, call starRating.paint() + # to paint the stars. + starRating.paint(painter, option.rect, option.palette) + else: + QStyledItemDelegate.paint(self, painter, option, index) + + def sizeHint(self, option, index): + """ Returns the size needed to display the item in a QSize object. """ + if index.column() == 3: + starRating = StarRating(index.data()) + return starRating.sizeHint() + else: + return QStyledItemDelegate.sizeHint(self, option, index) + + # The next 4 methods handle the custom editing that we need to do. + # If this were just a display delegate, paint() and sizeHint() would + # be all we needed. + + def createEditor(self, parent, option, index): + """ Creates and returns the custom StarEditor object we'll use to edit + the StarRating. + """ + if index.column() == 3: + editor = StarEditor(parent) + editor.editingFinished.connect(self.commitAndCloseEditor) + return editor + else: + return QStyledItemDelegate.createEditor(self, parent, option, index) + + def setEditorData(self, editor, index): + """ Sets the data to be displayed and edited by our custom editor. """ + if index.column() == 3: + editor.starRating = StarRating(index.data()) + else: + QStyledItemDelegate.setEditorData(self, editor, index) + + def setModelData(self, editor, model, index): + """ Get the data from our custom editor and stuffs it into the model. + """ + if index.column() == 3: + model.setData(index, editor.starRating.starCount) + else: + QStyledItemDelegate.setModelData(self, editor, model, index) + + def commitAndCloseEditor(self): + """ Erm... commits the data and closes the editor. :) """ + editor = self.sender() + + # The commitData signal must be emitted when we've finished editing + # and need to write our changed back to the model. + self.commitData.emit(editor) + self.closeEditor.emit(editor, QStyledItemDelegate.NoHint) + + +if __name__ == "__main__": + """ Run the application. """ + from PySide2.QtWidgets import (QApplication, QTableWidget, QTableWidgetItem, + QAbstractItemView) + import sys + + app = QApplication(sys.argv) + + # Create and populate the tableWidget + tableWidget = QTableWidget(4, 4) + tableWidget.setItemDelegate(StarDelegate()) + tableWidget.setEditTriggers(QAbstractItemView.DoubleClicked | + QAbstractItemView.SelectedClicked) + tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows) + tableWidget.setHorizontalHeaderLabels(["Title", "Genre", "Artist", "Rating"]) + + data = [ ["Mass in B-Minor", "Baroque", "J.S. Bach", 5], + ["Three More Foxes", "Jazz", "Maynard Ferguson", 4], + ["Sex Bomb", "Pop", "Tom Jones", 3], + ["Barbie Girl", "Pop", "Aqua", 5] ] + + for r in range(len(data)): + tableWidget.setItem(r, 0, QTableWidgetItem(data[r][0])) + tableWidget.setItem(r, 1, QTableWidgetItem(data[r][1])) + tableWidget.setItem(r, 2, QTableWidgetItem(data[r][2])) + item = QTableWidgetItem() + item.setData(0, StarRating(data[r][3]).starCount) + tableWidget.setItem(r, 3, item) + + tableWidget.resizeColumnsToContents() + tableWidget.resize(500, 300) + tableWidget.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/itemviews/stardelegate/stareditor.py b/examples/widgets/itemviews/stardelegate/stareditor.py new file mode 100644 index 0000000..1be69e8 --- /dev/null +++ b/examples/widgets/itemviews/stardelegate/stareditor.py @@ -0,0 +1,99 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2010 Hans-Peter Jansen +## Copyright (C) 2011 Arun Srinivasan +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import (QWidget) +from PySide2.QtGui import (QPainter) +from PySide2.QtCore import Signal + + +class StarEditor(QWidget): + """ The custome editor for editing StarRatings. """ + + # A signal to tell the delegate when we've finished editing. + editingFinished = Signal() + + def __init__(self, parent=None): + """ Initialize the editor object, making sure we can watch mouse + events. + """ + super(StarEditor, self).__init__(parent) + + self.setMouseTracking(True) + self.setAutoFillBackground(True) + + def sizeHint(self): + """ Tell the caller how big we are. """ + return self.starRating.sizeHint() + + def paintEvent(self, event): + """ Paint the editor, offloading the work to the StarRating class. """ + painter = QPainter(self) + self.starRating.paint(painter, self.rect(), self.palette(), isEditable=True) + + def mouseMoveEvent(self, event): + """ As the mouse moves inside the editor, track the position and + update the editor to display as many stars as necessary. + """ + star = self.starAtPosition(event.x()) + + if (star != self.starRating.starCount) and (star != -1): + self.starRating.starCount = star + self.update() + + def mouseReleaseEvent(self, event): + """ Once the user has clicked his/her chosen star rating, tell the + delegate we're done editing. + """ + self.editingFinished.emit() + + def starAtPosition(self, x): + """ Calculate which star the user's mouse cursor is currently + hovering over. + """ + star = (x / (self.starRating.sizeHint().width() / + self.starRating.maxStarCount)) + 1 + if (star <= 0) or (star > self.starRating.maxStarCount): + return -1 + + return star diff --git a/examples/widgets/itemviews/stardelegate/starrating.py b/examples/widgets/itemviews/stardelegate/starrating.py new file mode 100644 index 0000000..bd5b084 --- /dev/null +++ b/examples/widgets/itemviews/stardelegate/starrating.py @@ -0,0 +1,102 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2010 Hans-Peter Jansen +## Copyright (C) 2011 Arun Srinivasan +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from math import (cos, sin, pi) + +from PySide2.QtGui import (QPainter, QPolygonF) +from PySide2.QtCore import (QPointF, QSize, Qt) + +PAINTING_SCALE_FACTOR = 20 + + +class StarRating(object): + """ Handle the actual painting of the stars themselves. """ + + def __init__(self, starCount=1, maxStarCount=5): + self.starCount = starCount + self.maxStarCount = maxStarCount + + # Create the star shape we'll be drawing. + self.starPolygon = QPolygonF() + self.starPolygon.append(QPointF(1.0, 0.5)) + for i in range(1, 5): + self.starPolygon.append(QPointF(0.5 + 0.5 * cos(0.8 * i * pi), + 0.5 + 0.5 * sin(0.8 * i * pi))) + + # Create the diamond shape we'll show in the editor + self.diamondPolygon = QPolygonF() + diamondPoints = [QPointF(0.4, 0.5), QPointF(0.5, 0.4), + QPointF(0.6, 0.5), QPointF(0.5, 0.6), + QPointF(0.4, 0.5)] + for point in diamondPoints: + self.diamondPolygon.append(point) + + def sizeHint(self): + """ Tell the caller how big we are. """ + return PAINTING_SCALE_FACTOR * QSize(self.maxStarCount, 1) + + def paint(self, painter, rect, palette, isEditable=False): + """ Paint the stars (and/or diamonds if we're in editing mode). """ + painter.save() + + painter.setRenderHint(QPainter.Antialiasing, True) + painter.setPen(Qt.NoPen) + + if isEditable: + painter.setBrush(palette.highlight()) + else: + painter.setBrush(palette.windowText()) + + yOffset = (rect.height() - PAINTING_SCALE_FACTOR) / 2 + painter.translate(rect.x(), rect.y() + yOffset) + painter.scale(PAINTING_SCALE_FACTOR, PAINTING_SCALE_FACTOR) + + for i in range(self.maxStarCount): + if i < self.starCount: + painter.drawPolygon(self.starPolygon, Qt.WindingFill) + elif isEditable: + painter.drawPolygon(self.diamondPolygon, Qt.WindingFill) + painter.translate(1.0, 0.0) + + painter.restore() diff --git a/examples/widgets/layouts/basiclayouts.py b/examples/widgets/layouts/basiclayouts.py new file mode 100755 index 0000000..ef53b48 --- /dev/null +++ b/examples/widgets/layouts/basiclayouts.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/layouts/basiclayout example from Qt v5.x""" + +from PySide2 import QtCore, QtGui, QtWidgets + + +class Dialog(QtWidgets.QDialog): + NumGridRows = 3 + NumButtons = 4 + + def __init__(self): + super(Dialog, self).__init__() + + self.createMenu() + self.createHorizontalGroupBox() + self.createGridGroupBox() + self.createFormGroupBox() + + bigEditor = QtWidgets.QTextEdit() + bigEditor.setPlainText("This widget takes up all the remaining space " + "in the top-level layout.") + + buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel) + + buttonBox.accepted.connect(self.accept) + buttonBox.rejected.connect(self.reject) + + mainLayout = QtWidgets.QVBoxLayout() + mainLayout.setMenuBar(self.menuBar) + mainLayout.addWidget(self.horizontalGroupBox) + mainLayout.addWidget(self.gridGroupBox) + mainLayout.addWidget(self.formGroupBox) + mainLayout.addWidget(bigEditor) + mainLayout.addWidget(buttonBox) + self.setLayout(mainLayout) + + self.setWindowTitle("Basic Layouts") + + def createMenu(self): + self.menuBar = QtWidgets.QMenuBar() + + self.fileMenu = QtWidgets.QMenu("&File", self) + self.exitAction = self.fileMenu.addAction("E&xit") + self.menuBar.addMenu(self.fileMenu) + + self.exitAction.triggered.connect(self.accept) + + def createHorizontalGroupBox(self): + self.horizontalGroupBox = QtWidgets.QGroupBox("Horizontal layout") + layout = QtWidgets.QHBoxLayout() + + for i in range(Dialog.NumButtons): + button = QtWidgets.QPushButton("Button %d" % (i + 1)) + layout.addWidget(button) + + self.horizontalGroupBox.setLayout(layout) + + def createGridGroupBox(self): + self.gridGroupBox = QtWidgets.QGroupBox("Grid layout") + layout = QtWidgets.QGridLayout() + + for i in range(Dialog.NumGridRows): + label = QtWidgets.QLabel("Line %d:" % (i + 1)) + lineEdit = QtWidgets.QLineEdit() + layout.addWidget(label, i + 1, 0) + layout.addWidget(lineEdit, i + 1, 1) + + self.smallEditor = QtWidgets.QTextEdit() + self.smallEditor.setPlainText("This widget takes up about two thirds " + "of the grid layout.") + + layout.addWidget(self.smallEditor, 0, 2, 4, 1) + + layout.setColumnStretch(1, 10) + layout.setColumnStretch(2, 20) + self.gridGroupBox.setLayout(layout) + + def createFormGroupBox(self): + self.formGroupBox = QtWidgets.QGroupBox("Form layout") + layout = QtWidgets.QFormLayout() + layout.addRow(QtWidgets.QLabel("Line 1:"), QtWidgets.QLineEdit()) + layout.addRow(QtWidgets.QLabel("Line 2, long text:"), QtWidgets.QComboBox()) + layout.addRow(QtWidgets.QLabel("Line 3:"), QtWidgets.QSpinBox()) + self.formGroupBox.setLayout(layout) + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + dialog = Dialog() + sys.exit(dialog.exec_()) diff --git a/examples/widgets/layouts/dynamiclayouts.py b/examples/widgets/layouts/dynamiclayouts.py new file mode 100644 index 0000000..77750ee --- /dev/null +++ b/examples/widgets/layouts/dynamiclayouts.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/layouts/dynamiclayouts example from Qt v5.x""" + +from PySide2.QtCore import Qt, QSize +from PySide2.QtWidgets import (QApplication, QDialog, QLayout, QGridLayout, + QMessageBox, QGroupBox, QSpinBox, QSlider, + QProgressBar, QDial, QDialogButtonBox, + QComboBox, QLabel) + +class Dialog(QDialog): + def __init__(self): + super(Dialog, self).__init__() + + self.rotableWidgets = [] + + self.createRotableGroupBox() + self.createOptionsGroupBox() + self.createButtonBox() + + mainLayout = QGridLayout() + mainLayout.addWidget(self.rotableGroupBox, 0, 0) + mainLayout.addWidget(self.optionsGroupBox, 1, 0) + mainLayout.addWidget(self.buttonBox, 2, 0) + mainLayout.setSizeConstraint(QLayout.SetMinimumSize) + + self.mainLayout = mainLayout + self.setLayout(self.mainLayout) + + self.setWindowTitle("Dynamic Layouts") + + def rotateWidgets(self): + count = len(self.rotableWidgets) + if count % 2 == 1: + raise AssertionError("Number of widgets must be even") + + for widget in self.rotableWidgets: + self.rotableLayout.removeWidget(widget) + + self.rotableWidgets.append(self.rotableWidgets.pop(0)) + + for i in range(count//2): + self.rotableLayout.addWidget(self.rotableWidgets[count - i - 1], 0, i) + self.rotableLayout.addWidget(self.rotableWidgets[i], 1, i) + + + def buttonsOrientationChanged(self, index): + self.mainLayout.setSizeConstraint(QLayout.SetNoConstraint) + self.setMinimumSize(0, 0) + + orientation = Qt.Orientation(int(self.buttonsOrientationComboBox.itemData(index))) + + if orientation == self.buttonBox.orientation(): + return + + self.mainLayout.removeWidget(self.buttonBox) + + spacing = self.mainLayout.spacing() + + oldSizeHint = self.buttonBox.sizeHint() + QSize(spacing, spacing) + self.buttonBox.setOrientation(orientation) + newSizeHint = self.buttonBox.sizeHint() + QSize(spacing, spacing) + + if orientation == Qt.Horizontal: + self.mainLayout.addWidget(self.buttonBox, 2, 0) + self.resize(self.size() + QSize(-oldSizeHint.width(), newSizeHint.height())) + else: + self.mainLayout.addWidget(self.buttonBox, 0, 3, 2, 1) + self.resize(self.size() + QSize(newSizeHint.width(), -oldSizeHint.height())) + + self.mainLayout.setSizeConstraint(QLayout.SetDefaultConstraint) + + def show_help(self): + QMessageBox.information(self, "Dynamic Layouts Help", + "This example shows how to change layouts " + "dynamically.") + + def createRotableGroupBox(self): + self.rotableGroupBox = QGroupBox("Rotable Widgets") + + self.rotableWidgets.append(QSpinBox()) + self.rotableWidgets.append(QSlider()) + self.rotableWidgets.append(QDial()) + self.rotableWidgets.append(QProgressBar()) + count = len(self.rotableWidgets) + for i in range(count): + self.rotableWidgets[i].valueChanged[int].\ + connect(self.rotableWidgets[(i+1) % count].setValue) + + self.rotableLayout = QGridLayout() + self.rotableGroupBox.setLayout(self.rotableLayout) + + self.rotateWidgets() + + def createOptionsGroupBox(self): + self.optionsGroupBox = QGroupBox("Options") + + buttonsOrientationLabel = QLabel("Orientation of buttons:") + + buttonsOrientationComboBox = QComboBox() + buttonsOrientationComboBox.addItem("Horizontal", Qt.Horizontal) + buttonsOrientationComboBox.addItem("Vertical", Qt.Vertical) + buttonsOrientationComboBox.currentIndexChanged[int].connect(self.buttonsOrientationChanged) + + self.buttonsOrientationComboBox = buttonsOrientationComboBox + + optionsLayout = QGridLayout() + optionsLayout.addWidget(buttonsOrientationLabel, 0, 0) + optionsLayout.addWidget(self.buttonsOrientationComboBox, 0, 1) + optionsLayout.setColumnStretch(2, 1) + self.optionsGroupBox.setLayout(optionsLayout) + + def createButtonBox(self): + self.buttonBox = QDialogButtonBox() + + closeButton = self.buttonBox.addButton(QDialogButtonBox.Close) + helpButton = self.buttonBox.addButton(QDialogButtonBox.Help) + rotateWidgetsButton = self.buttonBox.addButton("Rotate &Widgets", QDialogButtonBox.ActionRole) + + rotateWidgetsButton.clicked.connect(self.rotateWidgets) + closeButton.clicked.connect(self.close) + helpButton.clicked.connect(self.show_help) + + +if __name__ == '__main__': + import sys + + app = QApplication(sys.argv) + dialog = Dialog() + dialog.exec_() diff --git a/examples/widgets/layouts/flowlayout.py b/examples/widgets/layouts/flowlayout.py new file mode 100755 index 0000000..51522ca --- /dev/null +++ b/examples/widgets/layouts/flowlayout.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/layouts/flowlayout example from Qt v5.x""" + +from PySide2 import QtCore, QtGui, QtWidgets + + +class Window(QtWidgets.QWidget): + def __init__(self): + super(Window, self).__init__() + + flowLayout = FlowLayout() + flowLayout.addWidget(QtWidgets.QPushButton("Short")) + flowLayout.addWidget(QtWidgets.QPushButton("Longer")) + flowLayout.addWidget(QtWidgets.QPushButton("Different text")) + flowLayout.addWidget(QtWidgets.QPushButton("More text")) + flowLayout.addWidget(QtWidgets.QPushButton("Even longer button text")) + self.setLayout(flowLayout) + + self.setWindowTitle("Flow Layout") + + +class FlowLayout(QtWidgets.QLayout): + def __init__(self, parent=None, margin=0, spacing=-1): + super(FlowLayout, self).__init__(parent) + + if parent is not None: + self.setMargin(margin) + + self.setSpacing(spacing) + + self.itemList = [] + + def __del__(self): + item = self.takeAt(0) + while item: + item = self.takeAt(0) + + def addItem(self, item): + self.itemList.append(item) + + def count(self): + return len(self.itemList) + + def itemAt(self, index): + if index >= 0 and index < len(self.itemList): + return self.itemList[index] + + return None + + def takeAt(self, index): + if index >= 0 and index < len(self.itemList): + return self.itemList.pop(index) + + return None + + def expandingDirections(self): + return QtCore.Qt.Orientations(QtCore.Qt.Orientation(0)) + + def hasHeightForWidth(self): + return True + + def heightForWidth(self, width): + height = self.doLayout(QtCore.QRect(0, 0, width, 0), True) + return height + + def setGeometry(self, rect): + super(FlowLayout, self).setGeometry(rect) + self.doLayout(rect, False) + + def sizeHint(self): + return self.minimumSize() + + def minimumSize(self): + size = QtCore.QSize() + + for item in self.itemList: + size = size.expandedTo(item.minimumSize()) + + size += QtCore.QSize(2 * self.contentsMargins().top(), 2 * self.contentsMargins().top()) + return size + + def doLayout(self, rect, testOnly): + x = rect.x() + y = rect.y() + lineHeight = 0 + + for item in self.itemList: + wid = item.widget() + spaceX = self.spacing() + wid.style().layoutSpacing(QtWidgets.QSizePolicy.PushButton, QtWidgets.QSizePolicy.PushButton, QtCore.Qt.Horizontal) + spaceY = self.spacing() + wid.style().layoutSpacing(QtWidgets.QSizePolicy.PushButton, QtWidgets.QSizePolicy.PushButton, QtCore.Qt.Vertical) + nextX = x + item.sizeHint().width() + spaceX + if nextX - spaceX > rect.right() and lineHeight > 0: + x = rect.x() + y = y + lineHeight + spaceY + nextX = x + item.sizeHint().width() + spaceX + lineHeight = 0 + + if not testOnly: + item.setGeometry(QtCore.QRect(QtCore.QPoint(x, y), item.sizeHint())) + + x = nextX + lineHeight = max(lineHeight, item.sizeHint().height()) + + return y + lineHeight - rect.y() + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + mainWin = Window() + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/mainwindows/application/application.py b/examples/widgets/mainwindows/application/application.py new file mode 100755 index 0000000..78a1f99 --- /dev/null +++ b/examples/widgets/mainwindows/application/application.py @@ -0,0 +1,273 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets + +import application_rc + +class MainWindow(QtWidgets.QMainWindow): + def __init__(self): + super(MainWindow, self).__init__() + + self.curFile = '' + + self.textEdit = QtWidgets.QTextEdit() + self.setCentralWidget(self.textEdit) + + self.createActions() + self.createMenus() + self.createToolBars() + self.createStatusBar() + + self.readSettings() + + self.textEdit.document().contentsChanged.connect(self.documentWasModified) + + self.setCurrentFile('') + self.setUnifiedTitleAndToolBarOnMac(True) + + def closeEvent(self, event): + if self.maybeSave(): + self.writeSettings() + event.accept() + else: + event.ignore() + + def newFile(self): + if self.maybeSave(): + self.textEdit.clear() + self.setCurrentFile('') + + def open(self): + if self.maybeSave(): + fileName, filtr = QtWidgets.QFileDialog.getOpenFileName(self) + if fileName: + self.loadFile(fileName) + + def save(self): + if self.curFile: + return self.saveFile(self.curFile) + + return self.saveAs() + + def saveAs(self): + fileName, filtr = QtWidgets.QFileDialog.getSaveFileName(self) + if fileName: + return self.saveFile(fileName) + + return False + + def about(self): + QtWidgets.QMessageBox.about(self, "About Application", + "The Application example demonstrates how to write " + "modern GUI applications using Qt, with a menu bar, " + "toolbars, and a status bar.") + + def documentWasModified(self): + self.setWindowModified(self.textEdit.document().isModified()) + + def createActions(self): + self.newAct = QtWidgets.QAction(QtGui.QIcon(':/images/new.png'), "&New", + self, shortcut=QtGui.QKeySequence.New, + statusTip="Create a new file", triggered=self.newFile) + + self.openAct = QtWidgets.QAction(QtGui.QIcon(':/images/open.png'), + "&Open...", self, shortcut=QtGui.QKeySequence.Open, + statusTip="Open an existing file", triggered=self.open) + + self.saveAct = QtWidgets.QAction(QtGui.QIcon(':/images/save.png'), + "&Save", self, shortcut=QtGui.QKeySequence.Save, + statusTip="Save the document to disk", triggered=self.save) + + self.saveAsAct = QtWidgets.QAction("Save &As...", self, + shortcut=QtGui.QKeySequence.SaveAs, + statusTip="Save the document under a new name", + triggered=self.saveAs) + + self.exitAct = QtWidgets.QAction("E&xit", self, shortcut="Ctrl+Q", + statusTip="Exit the application", triggered=self.close) + + self.cutAct = QtWidgets.QAction(QtGui.QIcon(':/images/cut.png'), "Cu&t", + self, shortcut=QtGui.QKeySequence.Cut, + statusTip="Cut the current selection's contents to the clipboard", + triggered=self.textEdit.cut) + + self.copyAct = QtWidgets.QAction(QtGui.QIcon(':/images/copy.png'), + "&Copy", self, shortcut=QtGui.QKeySequence.Copy, + statusTip="Copy the current selection's contents to the clipboard", + triggered=self.textEdit.copy) + + self.pasteAct = QtWidgets.QAction(QtGui.QIcon(':/images/paste.png'), + "&Paste", self, shortcut=QtGui.QKeySequence.Paste, + statusTip="Paste the clipboard's contents into the current selection", + triggered=self.textEdit.paste) + + self.aboutAct = QtWidgets.QAction("&About", self, + statusTip="Show the application's About box", + triggered=self.about) + + self.aboutQtAct = QtWidgets.QAction("About &Qt", self, + statusTip="Show the Qt library's About box", + triggered=QtWidgets.qApp.aboutQt) + + self.cutAct.setEnabled(False) + self.copyAct.setEnabled(False) + self.textEdit.copyAvailable.connect(self.cutAct.setEnabled) + self.textEdit.copyAvailable.connect(self.copyAct.setEnabled) + + def createMenus(self): + self.fileMenu = self.menuBar().addMenu("&File") + self.fileMenu.addAction(self.newAct) + self.fileMenu.addAction(self.openAct) + self.fileMenu.addAction(self.saveAct) + self.fileMenu.addAction(self.saveAsAct) + self.fileMenu.addSeparator() + self.fileMenu.addAction(self.exitAct) + + self.editMenu = self.menuBar().addMenu("&Edit") + self.editMenu.addAction(self.cutAct) + self.editMenu.addAction(self.copyAct) + self.editMenu.addAction(self.pasteAct) + + self.menuBar().addSeparator() + + self.helpMenu = self.menuBar().addMenu("&Help") + self.helpMenu.addAction(self.aboutAct) + self.helpMenu.addAction(self.aboutQtAct) + + def createToolBars(self): + self.fileToolBar = self.addToolBar("File") + self.fileToolBar.addAction(self.newAct) + self.fileToolBar.addAction(self.openAct) + self.fileToolBar.addAction(self.saveAct) + + self.editToolBar = self.addToolBar("Edit") + self.editToolBar.addAction(self.cutAct) + self.editToolBar.addAction(self.copyAct) + self.editToolBar.addAction(self.pasteAct) + + def createStatusBar(self): + self.statusBar().showMessage("Ready") + + def readSettings(self): + settings = QtCore.QSettings("Trolltech", "Application Example") + pos = settings.value("pos", QtCore.QPoint(200, 200)) + size = settings.value("size", QtCore.QSize(400, 400)) + self.resize(size) + self.move(pos) + + def writeSettings(self): + settings = QtCore.QSettings("Trolltech", "Application Example") + settings.setValue("pos", self.pos()) + settings.setValue("size", self.size()) + + def maybeSave(self): + if self.textEdit.document().isModified(): + ret = QtWidgets.QMessageBox.warning(self, "Application", + "The document has been modified.\nDo you want to save " + "your changes?", + QtWidgets.QMessageBox.Save | QtWidgets.QMessageBox.Discard | + QtWidgets.QMessageBox.Cancel) + if ret == QtWidgets.QMessageBox.Save: + return self.save() + elif ret == QtWidgets.QMessageBox.Cancel: + return False + return True + + def loadFile(self, fileName): + file = QtCore.QFile(fileName) + if not file.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text): + QtWidgets.QMessageBox.warning(self, "Application", + "Cannot read file %s:\n%s." % (fileName, file.errorString())) + return + + inf = QtCore.QTextStream(file) + QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) + self.textEdit.setPlainText(inf.readAll()) + QtWidgets.QApplication.restoreOverrideCursor() + + self.setCurrentFile(fileName) + self.statusBar().showMessage("File loaded", 2000) + + def saveFile(self, fileName): + file = QtCore.QFile(fileName) + if not file.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text): + QtWidgets.QMessageBox.warning(self, "Application", + "Cannot write file %s:\n%s." % (fileName, file.errorString())) + return False + + outf = QtCore.QTextStream(file) + QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) + + # FIXME: Once file is out of scope, the file is empty, instead of having text. + outf << self.textEdit.toPlainText() + QtWidgets.QApplication.restoreOverrideCursor() + + self.setCurrentFile(fileName) + self.statusBar().showMessage("File saved", 2000) + return True + + def setCurrentFile(self, fileName): + self.curFile = fileName + self.textEdit.document().setModified(False) + self.setWindowModified(False) + + if self.curFile: + shownName = self.strippedName(self.curFile) + else: + shownName = 'untitled.txt' + + self.setWindowTitle("%s[*] - Application" % shownName) + + def strippedName(self, fullFileName): + return QtCore.QFileInfo(fullFileName).fileName() + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + mainWin = MainWindow() + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/mainwindows/application/application.qrc b/examples/widgets/mainwindows/application/application.qrc new file mode 100644 index 0000000..0a776fa --- /dev/null +++ b/examples/widgets/mainwindows/application/application.qrc @@ -0,0 +1,10 @@ + + + images/copy.png + images/cut.png + images/new.png + images/open.png + images/paste.png + images/save.png + + diff --git a/examples/widgets/mainwindows/application/application_rc.py b/examples/widgets/mainwindows/application/application_rc.py new file mode 100644 index 0000000..6592aa4 --- /dev/null +++ b/examples/widgets/mainwindows/application/application_rc.py @@ -0,0 +1,645 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Tue Aug 3 15:36:52 2010 +# by: The Resource Compiler for PySide (Qt v4.6.2) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x03\x54\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x02\xe6\x49\x44\x41\x54\x58\xc3\xd5\ +\x97\xcd\x4e\x13\x61\x14\x86\xeb\x35\x94\x95\x7b\x71\xe1\xd2\xc4\ +\xe0\x05\xb8\xe2\x0e\x5c\xb8\xf4\x02\x5c\xb1\x30\xea\x05\x18\x96\ +\x26\x62\x58\xb8\xb0\x91\x58\x20\xd1\x9d\xbf\x89\xa4\x14\xb1\x52\ +\xa4\x48\x45\x94\xfe\xd0\x02\x43\xff\xa6\x9d\x19\xa6\x65\x80\xe3\ +\x79\x7b\xfa\x85\x51\x4a\x82\xc9\x21\x86\x49\xde\x9c\x33\xa7\xf3\ +\xcd\xfb\x9c\xf3\x4d\x9b\x4e\x84\x88\x22\xff\x53\x91\x73\x01\xc0\ +\xc7\xd5\x90\x6e\xff\xa5\xfb\xac\xc7\x3d\x3d\x64\x0d\xa9\x02\xf0\ +\x31\x32\x3c\x3c\xbc\x6a\x34\x3a\x3a\xba\x19\x56\x3c\x1e\xaf\x26\ +\x93\xc9\x56\x3a\x9d\x76\x13\x89\x44\x6b\x60\x60\x20\xcd\x6b\x6e\ +\x68\x02\xa4\x38\xd2\xe1\xe1\x71\x99\xba\xef\xb7\xc9\xb2\x2c\xda\ +\xdf\xdf\x27\x86\xf1\x78\xcd\x18\xeb\x8a\x1a\x40\x3f\xf3\xb0\x1c\ +\xc7\xa5\x4c\x66\xb9\x0b\x14\x04\x01\xc5\x62\xb1\x3a\xaf\x7b\x70\ +\x1a\x88\x53\x01\x1c\x1c\x10\x77\x77\xb2\x6c\xdb\xa1\xf9\xf9\xcf\ +\x64\x0e\xd7\x75\xe9\xf9\xc4\x44\x17\x42\x05\x00\x26\x7b\xc1\xc9\ +\xaa\x37\x1c\x4a\xce\xcd\x53\xf8\x70\x5d\x0f\x8b\x17\x54\x00\x82\ +\x10\x40\x67\x4f\x14\xce\xed\xa6\x47\x1f\x67\x66\xe9\xf5\x9b\xb7\ +\x14\x9f\x9c\xa4\xa9\xa9\x69\x7a\xf7\xfe\x03\x45\xa3\xd1\x65\x5e\ +\x7f\x41\x05\xc0\xef\x10\xed\xb6\x25\x86\x85\x9a\xe3\x05\x94\x5d\ +\xcd\xd1\xe4\xf4\x2b\x7a\x32\xfe\x94\x9e\xc5\x5e\xd0\x4c\x62\x0e\ +\x8b\x17\x55\x00\xda\x81\x18\xf5\x13\x20\x3c\xff\x90\x6a\xcd\x36\ +\x15\x37\xab\x94\x2f\x6e\x53\x89\x63\x8d\xb7\x85\xd7\x7e\x51\x01\ +\xf0\x79\xcc\xcd\x5d\x1e\xb5\xc7\x7b\xdb\xee\x9f\x3b\xbe\xe4\x88\ +\x5d\xb8\xbd\xee\xe2\x94\xca\x33\xe0\x75\xe4\xc6\x75\x57\x62\xd8\ +\x10\x39\xea\xe6\x33\x44\xd4\x01\xa7\x06\xe0\xf4\x3a\xad\x39\x22\ +\x98\x98\x68\x72\x80\x98\x6b\x50\x53\x9d\x00\x00\x2a\x2d\xb9\x31\ +\xe2\x4e\x53\x8c\x10\x0d\x04\xf2\x6d\xfb\x28\xb6\x7c\x45\x00\x9b\ +\x3b\xdb\x6a\xfc\x69\x8e\x3c\x6c\x88\x1a\xae\x39\x13\x80\x3a\x8f\ +\xb7\x54\x23\x2a\xd7\xc5\x04\x06\x06\x00\x35\x28\x9c\x17\xab\xbc\ +\x25\xbb\xca\x13\xc0\x4d\x61\x0e\x15\x2a\x72\x6e\xcc\x7e\x5a\x02\ +\x68\x6a\xdd\xad\xf1\x94\x27\x00\x53\xdc\x1c\x71\x6d\x5b\x40\x60\ +\x9a\xab\x1c\x75\x9e\xeb\x81\x41\x15\x47\x11\xc0\x6a\x89\x31\x0c\ +\xd6\x77\x04\x20\x0c\x64\x26\x62\xb6\x69\x75\x8b\xa8\xaa\x09\x50\ +\xb6\xc5\xbc\xd0\x03\xf8\xbe\x29\x63\x87\x29\x60\x0c\x18\x84\x1c\ +\x00\x5b\x4d\x45\x00\x74\x03\x53\x98\xad\x94\xc5\x1c\xe7\x46\xe6\ +\x1c\x00\xc8\x71\x5d\xa9\xa1\x08\x80\xfd\xfc\x56\x12\x73\x33\x01\ +\x08\x35\x18\x42\xe8\xda\x7c\x8e\x29\xa8\x4e\x00\x5b\x00\x03\xc8\ +\x98\x67\x36\x04\x00\x32\xe6\x85\xde\xf8\x17\x0b\xfc\x2c\xd8\x8a\ +\x00\x18\x67\x3a\x4f\xb4\x54\x14\x23\x98\x02\x00\x02\x0c\x3e\xfb\ +\xc5\x53\x28\xf0\x43\xb8\x66\x49\xf7\x6b\xf9\x52\x87\xd7\xbe\x54\ +\x01\xc8\x55\x8f\xba\x4e\xad\x4b\x0e\x90\xaf\x85\xde\xb7\xc2\x92\ +\x3d\x4f\xa6\xb3\xde\xa3\xb1\x71\xeb\xda\xd0\xf5\x15\x98\xb3\x6e\ +\xa9\x00\x6c\x34\xa4\x6b\x18\xff\xe0\x11\x7f\x5a\x17\x53\xd4\x13\ +\x0b\x59\x6f\xe4\xee\xbd\xe2\xa5\xc1\xcb\x4b\x7c\x6d\x8c\x75\x87\ +\x35\xa8\xfa\xb7\x1c\xdd\x65\xd9\x3c\x8f\x1f\x19\xfe\x9e\xcf\x1e\ +\x37\xbd\xc9\xba\x78\x26\x6f\x46\x00\x68\xf2\xff\x81\x99\x94\x9e\ +\xe9\x3f\xbf\x19\x01\x42\xd3\xf4\xfc\xbd\x9c\x9e\xa5\x7e\x03\x51\ +\x6c\x25\xa1\x92\x95\x0a\x77\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ +\x42\x60\x82\ +\x00\x00\x05\x3a\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x04\xcc\x49\x44\x41\x54\x58\xc3\xb5\ +\x97\x5d\x4c\x5b\x65\x1c\xc6\x77\x6f\xbc\xd9\xe5\x12\x49\x20\x71\ +\xd7\x26\xe3\x4e\x13\xb8\x70\xd1\x85\x44\xbd\x50\xe3\x10\x18\xe5\ +\x2b\x2e\x26\x4a\x04\x27\x86\xaa\x8b\x99\xe0\xd0\xa2\x6c\x19\x86\ +\x39\x17\xdc\x1a\x16\x98\x80\x40\x6c\xa6\x43\xca\x20\x2b\x83\x1e\ +\x28\xcc\xda\xd1\x96\xd2\xd2\x4a\x7b\xfa\x01\xa5\xd0\xef\x16\x1e\ +\xdf\xff\xdb\x1d\xc7\xcc\x04\x2a\x87\x93\x3c\x39\x6f\x21\x9c\xe7\ +\xf7\x3c\xef\x47\x0f\x87\x00\x1c\xca\x46\xcf\xbd\xfa\xe9\xbb\x4c\ +\x5a\x26\x61\x0f\x6a\x60\xca\xd9\xe9\x79\xd9\x9a\x3f\x5d\x50\xf2\ +\xa5\xc1\xe9\x8f\xa7\x57\xc3\x40\x30\x02\x84\xa2\x19\xad\xc7\x32\ +\x8a\x27\x81\x58\x22\x73\xbf\x79\x6b\xda\x4b\x10\x72\x02\x1c\x7b\ +\xe7\xac\xda\x1c\xd8\xc8\x98\x12\x40\x84\x99\x85\xe3\x19\x91\x31\ +\x29\x1a\x4b\x61\x25\x94\x44\x38\x9a\x42\x73\x87\xc6\xbe\x13\xc4\ +\xff\x02\x90\x12\x93\x79\x24\xf1\xc8\x58\x92\xcf\x1f\x84\x5d\x8c\ +\xc2\xe5\x09\x22\x12\x4b\xa3\xf4\xc3\xef\x4d\x34\x75\x59\x01\xb0\ +\xeb\xd8\x36\xd5\x90\x9e\x3a\xfc\xcc\xb9\xe7\x5f\x2e\x11\x3f\x56\ +\x9e\x45\x45\x55\x0d\x2a\x99\xde\xaf\xad\xc3\x9d\xb1\x89\xc7\x00\ +\xac\xb6\x25\xfc\xb9\xe8\x87\x6b\x15\x58\xf6\x04\x10\x08\xc6\xd2\ +\xaf\x9c\xbe\x70\x9f\x41\x1c\xd9\x15\x80\x5d\x87\x99\x1a\x8a\x8a\ +\x8a\xcc\x92\x5a\x5b\x5b\xdd\xa4\xaf\x55\xad\xfe\xaf\x54\xdf\xa6\ +\x06\x06\x06\x31\x39\x35\x85\xd9\xb9\x39\xe8\x26\x26\x50\x50\x50\ +\x80\x21\xcd\x6f\x7c\xde\x49\xa6\xf9\x05\xcc\x98\x5c\x1c\xc0\xe1\ +\x4f\x41\xf4\x85\xf0\x43\xaf\xce\xcd\x00\x6a\xf6\x02\x50\x43\x66\ +\xd8\xe5\x8a\xc7\xe3\xf0\x7a\xbd\x48\xa7\xd3\x98\x9c\x9c\x44\x65\ +\x65\x35\x66\x67\x8d\xbc\x81\x07\x66\x1b\x74\xd3\x16\x0e\x40\x32\ +\x2d\x78\xf0\xdd\x8d\x51\x8f\xac\x00\xe1\x70\x18\x46\xa3\x91\x8f\ +\x53\xa9\x14\x7e\xea\xed\x45\xe3\x27\x9f\x61\x86\x41\x38\x96\xdc\ +\x50\x77\x75\xe3\x4c\x43\x23\xce\x35\x9d\xc7\xed\x91\x71\x5c\xbc\ +\x3e\x2c\x2f\xc0\xc6\xc6\x06\xf4\x7a\xfd\x63\x40\x7d\x7d\xfd\x50\ +\x32\x88\xd0\x46\x1c\x66\x9b\x0b\x82\xc1\x88\xa9\x19\x13\xac\x0e\ +\x11\x97\xba\x64\x6e\x80\x00\xa6\xd8\x3a\xd8\x7e\x45\x22\x11\x94\ +\x2b\x2a\x30\xae\x13\x40\xe7\x04\x6d\x57\xda\xaa\x34\xbe\x7c\x53\ +\xe6\x35\x40\x66\x3a\x9d\x0e\xc3\xc3\xc3\xe8\x65\xf5\xf7\xf7\xf7\ +\x43\xab\xd5\xa2\xaa\xba\x06\x63\x77\xf5\x90\x0e\x2a\x77\x90\xed\ +\x04\xb6\x0e\xda\xbb\x65\x06\xa0\x79\xb7\xdb\xed\x18\x1a\x1a\x42\ +\x67\x67\x27\x7a\x7a\x7a\x38\x50\x49\x69\x19\x6e\x69\xf5\x10\xd7\ +\x00\x6f\x08\xb0\xf9\x00\x67\x00\xb8\xd0\x25\x33\xc0\xd6\xd6\x16\ +\xdf\x09\x81\x40\x00\xa2\x28\xc2\xef\xf7\x63\x6d\x6d\x0d\xa7\x14\ +\x95\xd0\xfc\xae\xe7\xa9\xc9\x7c\xc1\x0b\x98\x3d\x40\x9b\xdc\x00\ +\xdb\x41\x36\x37\x37\xf9\x76\xa4\x56\x14\x15\xd5\xe8\xfb\x55\xe0\ +\xa9\x1d\x81\x47\x00\xe7\x3b\x0f\x00\x80\xcc\x25\x80\x24\x33\x4f\ +\x24\x12\x28\x2b\xaf\xe2\x00\x7f\xb8\x00\x8b\x98\x01\xa0\x36\x5a\ +\xd5\x07\x30\x05\xff\x98\x27\x93\x3c\x3d\x4d\x49\xc9\xa9\x4a\x0e\ +\xa0\xb7\xb3\x03\x89\x3d\xc5\xf8\x17\x30\xb1\x00\x7c\x71\xf5\x00\ +\x00\xa4\xea\xc9\x98\x14\x8b\xc5\x50\xa6\xa8\x82\x7a\x48\xc0\x98\ +\x19\xb8\x6b\x05\xe6\x9c\x99\xfb\xe7\x57\x64\x04\x90\xd2\x53\x6a\ +\x02\x88\x46\xa3\xdc\x3c\x14\x0a\xa1\xb8\xb4\x02\xd7\x06\x05\xdc\ +\x66\x87\xe4\xa0\x01\x1c\x64\xc4\x04\x28\x3b\x64\x06\x48\x3d\x9c\ +\x73\x12\x99\xd3\xb9\x40\x20\xc5\x65\x55\xb8\xd8\x2d\xa0\x7f\x3a\ +\x63\xae\x7d\x90\x69\xe0\xa3\x76\x99\x00\xfe\x5d\x3d\xa5\x26\xad\ +\xae\xae\x72\x88\xb7\x4a\x2a\x70\xb9\x57\xc0\x3d\x1b\xb8\x7e\x9e\ +\x01\xee\xcc\x03\x67\x2e\xed\x13\x40\xaa\x9d\x44\x8b\x8e\x92\xd3\ +\x71\x4c\xdf\x01\x2b\x2b\x2b\x58\x5f\x5f\xe7\x10\x27\x59\x03\xdf\ +\x74\x09\x50\x4f\x00\xbf\xcc\x65\x1a\xb8\x32\x06\x34\xec\xa7\x01\ +\xc9\x58\xda\xeb\x64\x4e\x69\x29\x39\x1d\x44\x04\x40\xf5\xd3\xcf\ +\xde\x7c\x5b\x81\x96\xeb\x02\x4f\x7e\x75\x1c\xb8\x71\x0f\xf8\x71\ +\x2c\x9e\x7e\xbd\x4e\x6d\xa6\x37\xaa\xac\x00\x9e\x64\x2c\x6d\x37\ +\x32\x25\x00\xd1\x23\xf2\xe4\x12\xcc\x1b\x27\x15\x68\xef\x11\xa0\ +\xbc\x66\x5b\x7f\x4f\x35\xe2\x3c\x71\x9a\xbf\x8e\x69\xf7\xfc\x4a\ +\x26\x01\x90\xa9\x24\x69\xb5\x53\x42\x32\x0f\x06\x83\x70\xb9\x5c\ +\xdc\x90\x5e\x4a\xe8\xb3\xc7\xe3\x81\xdb\xed\xc6\xf1\x13\xaf\x25\ +\x9f\x7d\xa1\x9c\x4c\x3b\x98\x8a\x99\x8e\x3e\xc9\x78\x47\x00\x95\ +\x4a\xc5\x01\xa4\x15\x2e\xcd\x37\x19\x52\x52\x3a\xf7\x29\xb5\xc3\ +\xe1\xe0\x22\xe3\xc5\xc5\x45\x0e\xf5\xe2\xf1\x97\x5c\xf4\x1e\xb9\ +\x93\xe9\xae\x00\x2d\x2d\x2d\x6e\xe9\x60\xa1\xd4\xd2\x97\x0d\x8d\ +\x97\x97\x97\xe1\xf3\xf9\x60\xb3\xd9\xf8\x7d\x69\x69\x89\x43\x10\ +\x00\x8d\x0b\x0b\x0b\xcd\xb2\x00\xd0\xa2\x92\x52\x93\x11\x8d\xe9\ +\x4e\xdf\x78\x54\x3b\x35\x60\xb5\x5a\x79\xf5\xd4\x0a\xfd\xce\x60\ +\x30\x24\xf2\xf2\xf2\xee\xb3\x67\x1c\xd9\x17\x40\x53\x53\x93\x5b\ +\x9a\x67\x4a\x4f\x22\x13\xaa\x9a\xc6\x16\x8b\x99\x37\x40\x9f\x47\ +\x47\x47\x23\x6d\x6d\x6d\xde\xfc\xfc\x7c\x13\xfb\xdb\x41\xa6\xb2\ +\xbd\x9a\xff\x27\x40\x73\x73\x33\x9f\x02\x4a\x47\x10\x54\x3f\x55\ +\x3f\x3f\x3f\xcf\xeb\xd6\x68\x34\x91\xba\xba\x3a\xe7\xc3\xb4\x5d\ +\x4c\x1f\x30\x1d\xcd\xc6\x78\x47\x00\xa5\x52\xe9\x76\x3a\x9d\xbc\ +\x62\x4a\x4a\x6f\x3e\x94\xb4\xbe\xbe\xde\x99\x93\x93\x23\x99\x16\ +\x67\x53\x75\x56\x00\x8d\x8d\x8d\x6e\x8b\xc5\x82\x81\x81\x81\x48\ +\x6d\x6d\xad\x33\x37\x37\x57\x56\xd3\xdd\x00\xf8\x7f\x46\x4c\xc2\ +\x41\x99\x6e\xd7\xdf\x43\x39\x56\x18\x85\x70\xc8\x04\x00\x00\x00\ +\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x05\x2b\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x04\xbd\x49\x44\x41\x54\x58\xc3\xed\ +\x57\x6b\x4c\x93\x57\x18\x3e\x23\x71\xc9\x32\xe9\x16\x97\xa8\x54\ +\x65\x38\x9d\x02\x15\xf6\x03\x87\x32\x93\x01\x66\x2c\x5b\x70\xc4\ +\x30\xff\x60\xa2\x2e\x1a\x3a\x1d\x4e\x03\xba\x31\x89\x5b\xb3\x80\ +\xd9\x0c\x84\x02\x19\x58\x1c\x14\x8b\x85\xb2\x82\x95\x5e\xe4\x66\ +\x0b\x8e\x31\xf8\xc3\x46\xcb\x2d\x81\x15\xdc\xa8\xc2\x1c\x1b\xb7\ +\x6a\x69\x91\xf2\xee\xbc\x87\xaf\x0c\xdc\xb8\x0d\x61\xd9\xb2\x93\ +\x3c\xed\x97\xf3\x7d\xfd\xde\xe7\xbc\xef\xf3\x5e\x4a\x00\x80\xfc\ +\x93\x20\xff\x0a\x02\x74\x09\x28\x44\x14\xd9\x14\x71\x14\x01\x2b\ +\x46\x80\xae\xdd\x64\xdd\xc6\x66\x22\x4c\xf8\x95\xc4\x8b\x47\xc8\ +\xa1\xd3\xf7\xc8\x8e\x97\x3b\x38\x32\x61\x2b\x41\x20\x85\x9c\xbe\ +\x30\x48\x2e\xdd\x80\x19\x40\x32\xab\x79\x4d\xf4\xbe\xfb\x72\x13\ +\x68\x64\x06\x91\x04\x5e\xa3\x51\xf4\x06\xee\x85\x47\xf5\xd0\xbd\ +\x83\xcb\x4d\x20\x9b\x9d\xf6\x40\x74\x2f\xbd\x16\x32\x3d\x20\x89\ +\x3f\x48\xa5\x2c\x1b\x01\x8c\x31\x79\xc1\xbb\x9d\x88\x4b\xc6\xd7\ +\xc6\x26\x0e\xa0\x10\xb9\xfd\x42\xfe\xc5\x2b\x36\x46\x8c\x12\x5c\ +\x4e\x02\x93\xa7\xa7\xa7\x0d\xcc\xd3\x39\xb9\x98\x63\x36\x14\x0a\ +\xd2\xe4\xa3\x2b\x41\x20\x8c\x29\x9e\x2a\xdf\x37\x47\xeb\xdc\x7b\ +\xb5\xcc\x89\x9e\x40\x44\x96\x54\x83\x2b\x2c\x0b\x36\x46\x48\x08\ +\x13\xf5\x64\x2a\x7b\x2e\x54\x03\x01\xf8\x03\x37\xbf\xc0\x0e\x34\ +\x2a\x54\xdf\x62\x88\x52\xd5\x2c\x58\x03\x74\x1d\x16\x08\x04\x7a\ +\x45\x55\xf5\xc8\xa0\x6d\x74\xc2\xd4\x73\xf7\x21\xbe\x73\x51\x95\ +\x90\xae\x8f\xd0\x13\xcf\xe5\x94\x83\x87\xb4\x02\x9e\xcc\x2e\x03\ +\xd4\x06\xdd\xaf\x99\xcb\xb0\xaf\xaf\xaf\x3e\xbf\xd2\x60\xb5\xdb\ +\xed\x80\xf8\x79\xe4\x3e\xc4\x5e\xab\xb4\xb9\x88\x2f\x86\x80\x27\ +\xd3\xc0\x67\xf9\x8e\x19\xf5\x60\xd7\x5e\x33\xba\x76\xda\x73\xee\ +\x68\xd8\xc7\xc7\x47\x9f\xab\xab\xb0\x0e\x0f\x0d\xc1\x10\x87\xb2\ +\xf6\x2e\xe7\x96\x37\xf7\x77\x73\x61\xd8\xbd\xe8\x5e\x80\x2f\x66\ +\x9a\xa0\x86\xdf\xa9\x36\x42\xf7\xf0\x03\xd8\x19\x9f\xd4\xcf\xa5\ +\xe7\x1a\x8a\x98\x2d\x7e\xfe\x6d\x97\x54\x1a\x6b\x5f\x5f\x1f\xb8\ +\xd0\xd1\x73\x07\x62\x72\x15\x56\x4e\xc4\x87\x97\xd4\x8c\x30\x14\ +\xe9\x15\xb7\x1e\x38\x1c\x0e\x40\xa4\xd6\x19\x31\x9e\x85\x9b\x05\ +\x7e\x6d\xa9\x25\x1a\x5b\x97\xd9\x0c\xe6\x2e\x0a\xf3\x24\x14\xdf\ +\x36\x8e\x7b\xbd\x1e\xd1\xcd\x42\xc8\x09\x6f\xa9\x04\x3c\xd1\xbd\ +\x56\xab\x15\x10\x77\x7f\x1b\x84\xf3\x92\x5c\xbb\x52\xa9\x84\xfa\ +\xfa\x7a\x30\x99\x4c\x0c\x75\xdf\x35\xc1\x51\xb1\x64\x18\xc9\x51\ +\x44\x3e\xb6\x76\xcc\xb4\x40\x4f\x93\x5f\x7e\xd3\xd6\xdf\xdf\x0f\ +\x32\x99\x0c\x44\x22\x11\xa8\x54\x2a\x90\x4a\xa5\xa0\xd1\x68\x20\ +\x4b\x5b\x39\xbe\xe9\x95\xe0\x1f\xb8\x53\xaf\x79\x2c\xf3\x00\x97\ +\x8e\x22\x9e\xc7\x86\xe6\x53\x29\x19\xf6\x82\x82\x02\xe6\xe2\xa0\ +\xa0\x20\xe0\xf1\x78\x60\xb1\x58\x40\x5b\x5e\x01\xfb\xcf\x26\x0c\ +\x2d\xa6\x53\xce\x67\x94\xcf\x09\x4c\x83\xe2\x5b\x7b\xe6\xc2\x60\ +\x9a\xb2\x14\x14\x0a\x05\x88\xc5\x62\xc8\xcc\xcc\x84\xa2\xa2\x22\ +\x50\xab\xd5\xd0\xd9\xd9\xc9\x60\xec\xfe\xc9\xb9\xc9\xdb\xa7\x75\ +\x2e\xb7\xcf\x4b\x80\xae\xb7\xd8\x29\x70\x0e\xc0\x6a\x97\xac\x78\ +\x88\xca\x7f\x82\xe2\x29\x89\x0e\x3e\x97\x2b\x21\x5b\x96\x0f\x07\ +\x63\xe3\x47\x84\x1f\x26\xd8\x92\x72\x64\x8e\x6f\x1a\xbf\x07\xa3\ +\xd1\x08\x2d\xad\x2d\xf0\xcb\xc0\x20\x1c\x38\xf1\xbe\x05\xb3\x62\ +\xc1\x04\x5c\x69\x84\x85\x85\x84\x46\xdc\x26\xe7\x32\xac\x2c\xcf\ +\x33\xb5\x13\xec\x3b\xe3\xba\xd3\x33\xaf\x82\xe5\xfe\x7a\x89\x06\ +\x9e\xde\xfc\x62\x1b\xf7\x3c\x92\x8d\x7b\x66\xab\x4f\x5b\xca\x35\ +\xed\x58\x43\x43\x3d\x34\x34\x34\x80\xa5\xb7\x17\x32\x14\xc5\xc3\ +\xf3\xe9\xc0\x65\x3c\x92\xe5\x28\x9e\x36\x5d\xe5\x9c\x2a\x32\x78\ +\x7d\xf4\x83\x2e\x5a\x6c\x12\x31\x0c\x1b\x25\xea\x71\xf7\x2f\xcb\ +\x27\xef\x05\x87\x5f\xfe\xd3\xe4\x44\x0b\x4c\x68\xf4\xc9\x3e\x75\ +\x95\x1e\x0c\x06\x03\xb4\xb7\xb7\xc3\xd7\xc6\x96\x31\xae\x81\x09\ +\x66\xf1\x36\x6d\x38\x68\x3c\x49\x3a\x3a\x65\xf8\x62\x81\x83\x44\ +\xbd\x57\x43\xb6\x0a\x5e\x9b\x2a\xc3\x94\x5c\xb0\x42\x0f\xab\x24\ +\xb4\x04\x9f\x4a\xaa\x9b\x43\x37\x31\x28\xd4\x4f\xf2\x0a\xc7\x74\ +\x3a\x1d\xd4\xd6\xd6\x82\xc9\x7c\xdb\xb9\x61\x9b\xf7\x5f\xea\x62\ +\xb2\xe5\x7e\x9c\x75\x1f\x0d\xf3\xb2\xd4\x4e\xf2\xf6\xb1\xeb\x2e\ +\xb6\xae\x94\xc3\x90\x6c\x97\x55\xc1\x4b\x57\xab\x80\x9c\x4d\x6e\ +\x5a\xd0\x1c\x49\xbd\xb1\xe7\x88\xb0\xef\xca\x57\xc5\x50\x5a\x5a\ +\x0a\x1d\x3f\xf6\x4c\x04\x06\x87\x74\x3c\xaa\x0b\xc2\x84\x46\x8d\ +\x07\xc8\x6f\x02\xd9\xf9\xaa\x7e\x9a\xf1\x30\x46\x8e\x36\x20\xaf\ +\xbc\x4a\x78\x43\x69\x00\x92\x28\x1d\x98\xcd\x95\xb3\x79\xc3\x7d\ +\x3d\xbf\xf9\x44\x6a\xa6\x5d\x2e\x97\x43\x53\x4b\x2b\x44\x1c\x7b\ +\xf7\xce\xf4\x14\x25\xae\xf1\x8a\xf5\x77\x9c\xf5\x70\x02\xc2\xd9\ +\x0f\x89\xd1\x81\x03\x4f\x8e\xf7\xdc\xd2\x69\xe7\xf3\xdf\x75\xfc\ +\x6f\x14\x2e\x36\xd2\xef\xd8\x17\x69\x49\xbe\x2c\x9d\xc8\xd3\x96\ +\x3b\xa7\x0f\x31\x8c\x25\xc6\xdf\x9f\xba\x77\x5f\x71\x35\xa0\x41\ +\x6c\xb5\x08\x8c\xf9\x94\xf1\xe0\xf0\x33\x4b\x9a\x7c\x68\x13\x5a\ +\xbd\xce\xa3\xd9\x6b\x4f\x48\xf7\x0c\x0f\xb0\x0f\xfe\xf3\x87\xc8\ +\xf9\x2f\xee\xb9\x49\x6e\x00\xf6\x7b\x3e\xed\xf7\x08\x1e\x2a\x3e\ +\x5d\xe5\x58\xaa\xf1\x47\x5a\xf5\xb6\x59\x0b\x11\x1d\xb3\x43\xc9\ +\x91\x38\x09\x39\xf9\xa9\x96\x21\xfa\x5c\x1a\x0d\xcf\xb3\xff\xff\ +\x37\xfc\x4f\x13\xf8\x1d\xe7\x87\x19\xb9\x44\xc3\x01\xcf\x00\x00\ +\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x04\xa3\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x04\x35\x49\x44\x41\x54\x58\xc3\xe5\ +\x97\xcd\x8f\x54\x45\x14\xc5\x7f\xb7\xea\xd6\x7b\xaf\xdb\x6e\xc7\ +\xf9\x40\x9d\x89\x46\x4d\x34\x99\x44\x8d\x1a\x48\x98\xc4\x8c\x1f\ +\x1b\xfe\x02\x4c\x5c\xf1\x07\x18\x16\x2e\x4d\x5c\x6b\x58\xc3\x8e\ +\xc4\x8d\x1b\x17\xce\x82\x68\x74\x41\x5c\x18\x0d\xe2\xc4\xc6\x00\ +\x3d\x60\x50\x51\x19\x60\x02\xa2\x0e\x0c\x83\xd3\xfd\x5e\xf7\x94\ +\x8b\xaa\xee\xf9\x60\xe6\x0d\x84\x51\x16\x56\x52\xa9\xce\x7b\xb7\ +\xeb\x9e\x3a\xf7\xd4\xa9\x7a\xea\xbd\xe7\x7e\x36\xe5\x3e\xb7\x3e\ +\x80\x5d\xbb\x76\xbd\x03\xec\xfd\x8f\xf2\x4e\x35\x1a\x8d\x03\xeb\ +\x19\xd8\xbb\xef\xbd\xa3\x3b\x1f\x1f\x76\x00\x9c\x3c\x3a\xcf\xcc\ +\x97\x37\x58\x9c\xef\xdc\x53\xa6\xda\xa0\xf2\xdc\x6b\x03\xbc\xb8\ +\x67\x10\x80\x8b\x7f\x16\x7c\xf8\xee\x1e\x80\xdb\x00\x70\xfc\xec\ +\x1c\xdf\x3f\x30\x04\x78\x2e\xfd\xb8\xc0\xfe\xb7\xce\x6f\xcb\x72\ +\x0f\x1d\x79\x9a\x0b\x23\x96\xd3\x9f\x1f\x64\xfc\xd5\x7d\x9b\x6b\ +\x40\x45\xb0\x16\x40\x78\x70\x2c\x23\xcb\xb2\x6d\x01\x30\x30\x96\ +\x61\x8d\x50\x1b\x7c\x14\x23\x25\x22\x14\x2b\xd8\x18\x91\xd5\x95\ +\x73\xe7\xce\x83\x2a\xb8\x04\xd2\x14\xb2\x0c\xd2\x2c\x8c\x49\x0a\ +\x49\x12\xde\x77\x3a\x90\xe7\x90\xb7\xa1\xd5\x82\x76\x2b\x8e\x6d\ +\x28\x72\xb2\xfa\x38\xd6\x0a\xe3\xaf\xbc\x49\x6b\xf1\xfa\xe6\x00\ +\xac\x15\xac\x15\x04\xb0\x46\xd8\xbd\x7b\xe7\x16\x6b\xeb\x86\xae\ +\x80\x5a\xa8\x56\x81\xea\x6d\x51\x8d\xaf\x04\xb5\x82\xf7\xa0\xa6\ +\x84\x01\x67\x05\x35\x82\x08\xa8\x0a\x95\x2c\xc3\x23\x20\x1e\x08\ +\xc0\xf0\x1e\x2f\x02\xde\x23\x12\x26\x15\x7c\x88\x23\xc4\x21\x1e\ +\x3c\x21\x5e\x40\x4d\x58\x18\x40\xd7\x4a\x89\x06\xac\xa0\xda\x63\ +\x00\x9a\x33\xbf\x05\x8a\x53\x07\x69\x02\x95\x04\xb2\x34\xf6\x04\ +\x12\x07\x4e\xa1\xe8\x40\x5e\x40\x2b\x8f\xbd\x05\x4b\x39\xb4\x73\ +\xc8\x0b\x54\x87\x71\x3d\x00\x2a\xe5\x25\x70\x31\x40\xd5\x30\x39\ +\xf9\xd2\xd6\x0a\xf3\x3e\xd0\xaf\x16\xaa\x1b\x8b\xf6\xd8\x27\x61\ +\x61\xbd\x1c\x25\x25\x20\x00\xf0\x81\x8d\x34\x4d\xa3\x3a\xc3\xb3\ +\x98\x11\x89\x6c\x07\xda\x63\x09\x56\x98\x5f\x29\x46\xfc\x61\xcd\ +\x72\x7f\x61\x1d\x2d\xd1\x80\x3a\x09\x54\x49\x18\x4f\x34\x2f\xe0\ +\x9d\x85\xc4\x21\x89\xc3\x67\x09\x92\x69\xd8\x11\x89\xe2\x13\x87\ +\x58\x8b\xef\x76\x91\xbc\x80\xbc\x03\xed\x02\xdf\x6a\x23\xed\x02\ +\xf2\x02\x9f\x77\x50\x1d\x45\xd5\x20\x78\x3a\xeb\x54\x78\x9b\x06\ +\x9c\x33\x78\x0f\x03\x8f\x24\xbc\xfe\xf2\xf3\x77\x68\xe8\x36\x68\ +\xa4\xbe\xf1\xeb\xc6\xfc\xdf\xb1\x04\x52\x5e\x82\x44\x4d\x5f\x84\ +\x8f\x0d\xa5\x38\xe7\xb6\xc5\x88\x9e\x18\x4b\xb9\x76\xb3\x03\x08\ +\x9d\x52\x11\xaa\x90\xb8\x50\xef\x5a\xc5\x30\x7d\xb1\xcb\x40\xc5\ +\xb0\x0e\xf4\x26\xad\x57\xf9\x55\x2e\xe1\xe1\xc6\xd2\x32\xf5\xcc\ +\x70\x7d\xc9\x84\x2d\xe9\x4a\x19\x10\x9c\x1a\xc0\x73\xe5\x66\x97\ +\x2b\x37\xbb\xac\x51\x57\x3f\xd7\xaa\x64\x7e\xc5\x27\xa2\x29\xac\ +\x05\x15\xc3\x9c\x0b\xb5\x77\xa6\x6c\x17\xa8\xc1\xa9\x20\xc8\x1a\ +\x35\xaf\x9b\x35\x1a\x8f\x59\x31\x9e\xfe\x7b\xe9\xef\x14\x00\xf1\ +\x82\xef\x9b\x58\x30\x2b\x57\x56\x02\x55\x21\xd1\x90\xfc\xe7\x53\ +\xdf\xf2\xeb\x99\x13\x2c\x2d\xde\xb8\xa7\xfa\x57\x6a\x03\x3c\xf5\ +\xec\x4e\x9e\x79\x61\x02\x0f\xa8\x33\x5b\x31\x10\x03\x7c\x87\xf7\ +\xf7\xbf\xc1\xc2\xc2\x02\xb7\x6e\xdd\xa2\x28\x0a\x44\x04\x6b\x2d\ +\xd6\x5a\x54\x15\x55\xc5\x39\x87\xaa\x62\xad\xc5\x98\xf0\xdf\xe5\ +\xe5\x65\xf2\x3c\xef\xf7\x23\xcd\xf9\xb8\xf2\x2d\x18\x70\x56\x50\ +\x17\x18\xdc\x31\x3a\xb6\x72\x4f\x38\x7e\x9c\xe9\xe9\x69\x8c\x31\ +\x78\xef\x99\x98\x98\x60\x72\x72\xf2\x8e\x59\xd8\x31\x3a\xd6\xdf\ +\x86\xae\xd4\x09\x55\x70\x36\xac\xa2\x56\xaf\xf7\x6b\x39\x33\x33\ +\xc3\xd0\xd0\x10\xd6\x5a\xbc\xf7\x34\x9b\xcd\xbb\x02\x50\xab\xd7\ +\x70\xd1\x88\xb4\xd4\x88\x14\x9c\x0b\x27\x5c\xa0\x2a\x00\xa8\x56\ +\xab\x64\x59\xd6\xa7\xb8\x37\xde\x69\x73\x1a\xa9\x17\x41\x4b\xad\ +\x38\x1e\xc7\xbd\x23\xb4\xd7\x8c\x31\x88\x44\xdf\x8f\x3a\xb8\xab\ +\x9b\xaf\x35\xa8\x0d\xf3\xf6\x18\x2e\x3d\x8e\x83\x29\x6d\xe3\xd5\ +\xdb\x12\xa9\xf7\xe5\x56\x6c\xad\xf4\x91\x0e\x8e\x0c\xc3\xf2\xef\ +\xdb\x02\xe0\xa1\x91\x61\xd4\xc2\xb5\x2b\x97\x59\x9c\xbf\xbe\x05\ +\x03\x36\xf8\xc0\x60\xad\x02\x0b\xdb\xc3\xc0\x50\xad\xc2\xec\xc5\ +\x4b\x9c\xfd\xee\x1b\xce\x9f\x9c\x9e\x03\xa6\x36\x04\x60\x24\x5e\ +\x4a\x05\x12\x0b\xed\x91\x27\xa9\x3d\x0c\x6f\x1f\x38\xc8\x66\xc7\ +\x81\x27\x3a\xf1\x2a\xe7\x35\x1e\x32\x81\x14\x28\xba\x70\xf9\xea\ +\x55\xce\x34\x8e\xd1\xfc\xfa\x8b\xb9\xd9\x1f\x4e\x1d\x02\x0e\x6f\ +\x08\xe0\xb3\x8f\x3e\xe0\xa7\xd3\x27\x57\x99\xe9\xda\xa3\x86\x55\ +\xe6\xbb\x1e\x04\x1b\x3c\x5f\x1d\x6f\x7c\x77\xee\x8f\xd9\x5f\x0e\ +\x01\x87\x1b\x8d\xc6\x5f\x1b\x01\x98\x9a\xfe\xf4\xe3\x7f\xf5\x73\ +\x6c\x7d\xf2\x35\x00\xe2\xb7\xda\x81\xff\xdd\xd7\xf1\x3f\x4d\xf0\ +\x4b\xb9\xe8\x46\x89\xaf\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ +\x60\x82\ +\x00\x00\x06\x6d\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x06\x34\x49\x44\x41\x54\x78\x5e\xad\x97\x5b\x6c\x54\xc7\ +\x1d\xc6\x7f\x73\xce\xd9\x8b\xbd\xf6\xfa\x16\xa0\xbe\x00\x0e\xb2\ +\x69\x63\x24\x42\x4a\x21\x22\xa1\x2d\x95\x62\xa5\x2f\xee\x4b\x68\ +\x2b\x95\xa6\x55\xa5\xc6\x60\x55\xaa\xda\xb4\xaa\xfa\x56\x09\x55\ +\xca\x03\x94\x27\xda\x07\x84\x14\x29\xad\xc4\x8b\xa5\x52\x83\x79\ +\x08\xc5\x18\x39\x0e\x69\xd3\x84\x9a\x9b\x63\x6a\xec\xb2\x04\x1b\ +\x3b\xbb\xf6\x7a\x8f\xbd\xbb\xde\xb3\x67\xa6\xc3\x68\x85\xe5\x72\ +\x6c\x88\xc9\x27\x7d\xfa\x9f\x9d\x87\xfd\x7e\xf3\x9f\x99\x73\x11\ +\x4a\x29\x82\x24\x84\x78\x05\x78\x9e\xc7\x6b\x48\x29\xf5\x77\xd6\ +\x28\x27\x20\xb8\x43\xbb\x01\x68\x97\x52\xbe\xc6\x63\x64\x59\xd6\ +\x07\x1a\xf6\xbb\x40\xb7\x06\x39\xff\x14\x00\x26\xfc\xb7\xed\xf5\ +\xe2\x60\x5d\x44\x44\x6e\xce\x89\x8a\x2b\x57\xae\x50\x5d\x53\x8d\ +\x40\x00\xa0\x50\x08\x65\x28\x41\x29\x66\xd3\x69\x5e\xa9\x17\x2f\ +\xbc\xb4\x4e\x6c\x3b\xf1\x1f\xb9\x47\x83\x7c\x5b\x43\x4c\x3c\x4d\ +\x07\xf6\xff\x60\x8b\xdd\x2c\x25\xf8\x4a\x32\x3c\x3c\x4c\x65\x65\ +\x25\x2b\xc9\x75\x5d\x1e\xc0\x6e\xa9\xb0\x22\x1b\xa2\x2a\x72\x3f\ +\xa7\xea\x81\xb5\x03\x08\x2d\x05\x48\xa1\x0d\xf4\x5d\xbc\x48\x2e\ +\x97\xc3\x2f\x16\x51\x4a\x91\xcf\xe7\x59\x5c\x5c\xa4\x50\x28\x50\ +\xd4\x63\xb5\xb5\xb5\x94\x01\x58\x80\xf8\x82\xf6\x80\x01\x00\x36\ +\x44\x05\x1f\x0f\xbc\x4b\x3e\x3b\x8f\x85\x44\x95\x32\xe2\xb6\xc4\ +\xb6\x04\x21\x21\x70\x3e\x53\x6c\x8c\x3b\x80\x44\x2a\x04\xf0\x9c\ +\x10\x02\xe0\xcb\x40\x05\x50\x0f\x34\x60\xc4\x48\x69\x9f\x24\x02\ +\x01\x4e\x9c\x38\x21\x00\x81\x05\xd2\x87\x96\x96\x67\x09\x65\x6d\ +\x14\xe5\x28\xa5\xb4\x41\x08\x58\x57\x19\x25\xe2\xd8\x44\x42\x16\ +\xc3\x13\x73\x5c\xbc\x3d\x41\xf7\x58\x8e\x5c\x24\xbe\xa9\xbd\x7d\ +\xf7\xef\x2d\xcb\x5a\xdc\xb1\x63\x47\x59\x55\x55\x95\xd3\xd8\xd8\ +\x18\x7e\xe0\x86\x86\x86\xd0\xa5\x4b\x97\xdc\xae\xae\xae\x08\xf0\ +\xd6\xaa\x1d\x00\x13\x44\x55\x2c\xc2\x73\xd5\x31\xf2\x9e\x4f\xa1\ +\x28\x91\x4a\x61\x09\x41\xd8\xb1\x88\x86\x6c\xe6\x72\x05\x12\xa2\ +\x8e\x3f\x9f\xff\x2b\x0d\x4d\x1b\x01\x22\xc0\x66\x96\x84\xef\xfb\ +\x78\x9e\x47\x75\x75\xb5\x9e\x50\x4b\xf4\xea\xd5\xab\x87\x84\x10\ +\x28\xa5\xde\x5a\x11\xc0\xb2\x41\x00\xb6\x2d\x90\xda\xb6\x14\x38\ +\x08\xa4\x12\x58\xc2\x8c\x1b\x8f\x4c\xb9\xec\x7b\xf5\x3b\xd4\x37\ +\x36\x11\x7c\x2f\xc1\x84\x67\x32\x19\xca\xcb\xcb\xcd\x66\x3e\x76\ +\xec\xd8\x26\xbd\x7f\x0e\x2e\x41\x2c\x01\xd0\xd9\xd9\xa9\x0e\x1d\ +\x3a\xa4\x6c\x21\x08\x59\x10\xb6\x2d\x1c\xc7\xc6\x42\x50\xb4\xcd\ +\x1a\x1b\x00\xc7\xb2\x88\x38\x96\xae\x02\x60\x59\x78\x10\xc0\xdc\ +\xdc\x1c\x35\x35\x35\x06\x20\x1a\x8d\x72\xe4\xc8\x91\xcd\xc0\x03\ +\x88\x1b\x1a\xa2\xc7\x62\xb9\xb0\x6d\x74\x30\x66\x8d\xcb\x23\x36\ +\xb1\xa8\xa3\xc7\x2c\x32\x8b\x1e\x93\x99\x1c\x63\xa9\x79\xee\xcc\ +\x2e\xe8\xdf\x45\x72\xf9\x3c\xab\xc8\x2c\x41\x36\x9b\x35\xa7\x66\ +\xe9\xff\x6d\x0e\x1c\x38\xb0\x1e\xe8\x00\x58\x06\xa0\xb4\x74\x16\ +\x8e\x0d\xe1\x90\xc0\x53\x8a\xb1\xa4\xcb\x8d\x8c\x83\xd3\xb2\x97\ +\xa6\x7d\xaf\xb3\xb5\xe3\x17\xac\xdb\xfb\x3a\x0d\x2f\xb4\x73\xfb\ +\xce\x24\xfd\xfd\xfd\x24\x93\x49\x94\x52\xe6\xfa\xf8\xf1\xe3\xe8\ +\xba\xac\x33\xe7\xce\x9d\xe3\xe8\xd1\xa3\x1c\x3e\x7c\x98\xde\xde\ +\x5e\x12\x89\x84\x04\x2c\xa1\x15\xdc\x01\xed\xff\xce\xe6\xf8\xe7\ +\x94\x4f\x6b\xc7\xcf\xf8\xe6\x2f\xdf\x26\xf6\xf5\x37\x99\x7c\xa6\ +\x83\x6b\xfe\x2e\xae\xf1\x2d\x64\x6b\x17\xad\x7b\x7f\x4e\x5e\x56\ +\x73\xfa\x6f\x67\xd1\x77\x4d\xee\xdc\x9d\xe2\x1b\xaf\x76\x72\xfd\ +\xfa\x75\x03\xa0\x67\x6b\xd6\x3f\x16\x8b\x99\xeb\x78\x3c\x8e\xe3\ +\x38\x25\x38\x04\xc0\x23\x00\x96\x25\x98\xca\x41\x3a\xde\xca\xfe\ +\xdf\xbd\x4d\xd5\xae\xd7\x28\x84\x62\x08\xdb\x42\x59\x82\x6c\x41\ +\x72\x7f\x66\x91\x4f\xee\x66\x18\xb8\xea\x72\xfa\x1f\x61\x64\xd5\ +\x5e\xae\x8f\xdc\x67\x32\xd7\xc6\x85\x0f\xee\x9b\x00\xed\x87\xa1\ +\xcd\xcd\xcd\xb4\xb5\xb5\x19\x37\x35\x35\xa1\xa1\x14\x20\x83\x1f\ +\x46\x16\xdc\x71\x15\xdf\xff\xe9\x6f\xa8\x6c\xd8\x48\xe2\xec\x3b\ +\x4c\x8f\x5e\xc3\x89\x94\xb1\xb5\x79\x07\x9b\x5b\xb6\xf3\x49\x79\ +\x25\x63\x09\x97\xcf\x66\xf2\xdc\x9d\xce\x32\xa1\xed\x88\x0d\x4c\ +\x27\xe7\xd8\xb7\x2b\xca\xfa\x25\x00\x33\x7b\x3d\x6b\xea\xea\xea\ +\x00\xcc\x75\x2a\x95\x32\x00\x4a\x2b\x10\xa0\xb9\x5a\x70\xe1\x9d\ +\x63\x28\x2c\xca\xe6\xc6\xd9\x10\x8f\x52\x94\x92\x7b\xc3\x7d\x24\ +\x65\x05\xdb\xda\x7f\x4c\x4d\xdb\xcb\x7c\x3c\x9c\x66\xd2\x5f\xc0\ +\xcd\x78\x2c\xcc\x6b\x2f\x78\x20\x00\xb5\x74\x3a\x42\xa1\x90\x09\ +\x2d\xdd\xea\x1f\x8e\x01\x2a\xf8\x3e\x60\xc1\xc6\xb8\xa0\x50\x1c\ +\x23\x1c\x8b\x53\xb7\xa5\x96\x92\x78\x76\x7d\x05\xe9\xac\xc7\x68\ +\xff\x9f\x98\xae\xbc\x4c\xcb\xf6\x83\xb8\x0b\x61\xbc\x82\xa4\x58\ +\x94\x78\xda\x21\xc7\x42\x2d\xaa\x80\xe3\x69\xa0\x96\xd5\x15\x01\ +\x00\xd6\xc7\x43\x84\xca\x23\xfc\xbf\x6a\x63\x21\x9e\xa9\x0c\x73\ +\xe1\xdf\x83\xec\xd9\xf9\x13\xca\xa3\x0e\xb9\x32\x47\x03\x28\x03\ +\x61\x6b\x00\x16\x4b\x21\xa5\x1c\x25\x30\x2a\x15\xa4\x5c\x05\x40\ +\x58\xa5\x2a\xcc\xf5\x23\xfa\x70\x6c\x86\xf1\x59\x8f\xef\xfd\xfa\ +\x8f\xdc\xca\xd4\xe0\x44\x5c\xa2\x11\x1b\xcf\x93\x14\x3d\x07\xd3\ +\x01\xa5\x90\x52\xf2\x50\x6a\x59\x01\x56\x05\x10\x08\x4c\x0d\x04\ +\x18\x9d\x76\xf9\xd5\x5f\x86\x18\xbd\xb7\x80\x3d\x93\x67\xd3\xba\ +\x32\xf2\x79\x5f\xbb\x68\xea\xce\xaf\xd4\x70\xf9\xdd\xe0\x25\x00\ +\x9e\x78\x09\x4c\xb8\x10\x3c\xa2\xd6\x2f\x55\xf2\x87\x1f\x3e\xcf\ +\xf5\x4f\x33\x44\x1b\xb7\xb1\xf3\xc5\x97\x59\x12\x5c\x4e\x60\x8e\ +\xdb\x53\x01\x28\xc0\x12\x25\x00\x6d\xd4\x52\x7d\xb1\xb5\x96\xdd\ +\x5b\xe2\x74\xbf\x97\xa5\x6a\xf7\x57\xf9\xd1\x1b\x6f\x10\xa0\xb5\ +\x03\x98\xb5\x37\xd5\xd8\x08\x01\xd2\xcb\x53\x70\x53\x78\xf3\x33\ +\x14\xb3\x69\x0a\x19\x1f\x25\xfd\xd5\x82\xd6\x08\xf0\xf0\x29\xe7\ +\xe3\xe7\x33\x14\xe6\x75\xa8\x0e\xd6\x00\xcb\xf7\x89\x10\xc1\x33\ +\x7d\xfa\xd7\x72\x8c\xb2\x13\x37\x03\xc7\x01\xb2\x1e\xfe\xad\x94\ +\xcc\x6f\xf7\x44\x54\x03\xd8\x5f\x70\x07\x08\x92\x09\xfd\xd7\x3d\ +\x3f\xfd\x7e\x42\xa6\xcf\xdf\xf6\xef\x02\xee\x76\x3b\xfc\x92\x06\ +\xa8\xe3\x73\xca\x75\x5d\x1f\x70\x57\xed\x00\x40\x32\xab\x0a\x1f\ +\x7e\x2a\xd3\xbd\xb7\xfc\xd4\xcd\x69\x39\x05\xf4\x03\x97\x74\x68\ +\xbf\x10\xa2\xd3\xb6\xed\xaf\x7d\x9e\x25\x58\x58\x58\xf0\x07\x06\ +\x06\xd2\x27\x4f\x9e\x9c\x06\xba\x83\x00\x3e\x1a\x49\xca\xad\xe3\ +\xb3\x2a\xd7\x3b\xe2\xa7\x6e\x4c\xcb\xd1\x52\xe8\x59\x1d\x74\x8b\ +\x00\x3d\x09\xc0\xd0\xd0\x90\xdb\xd3\xd3\x93\xd2\x4e\xcf\xce\xce\ +\x9e\x2e\xbd\x1d\xdf\x08\x02\xe8\xee\xea\x29\x00\x8c\x04\x84\x06\ +\x85\xaf\x08\x30\x35\x35\x55\xd0\x2f\x22\xa9\x53\xa7\x4e\x25\xc7\ +\xc7\xc7\x2f\x03\x67\x81\x7e\x1d\xec\xae\xb8\x09\x4b\xdf\x76\xda\ +\x4f\x26\x85\x01\x40\x08\x40\x61\x5a\xfc\xde\xe0\x60\xba\xbb\xbb\ +\x3b\xa5\xdf\x8a\xcc\x24\xd0\x5e\xed\x73\xcd\x61\xed\x9a\x77\x33\ +\x6e\x11\x60\x70\xf0\xfd\x74\x5f\x5f\x5f\xfa\xcc\x99\x33\xa6\xc5\ +\xa5\xd0\x8f\x78\x02\x89\xb5\x9e\x63\x21\x44\x18\x78\x13\xd8\x4f\ +\x69\x73\x06\xb4\xf8\xb1\xfa\x1f\xbd\xfa\x2a\x5f\xf2\xd8\x15\x9d\ +\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x08\x19\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x07\xab\x49\x44\x41\x54\x58\xc3\xad\ +\x57\x5b\x50\x93\x67\x1a\xf6\xca\xce\xec\xcc\xf6\x62\x2f\xbc\xd9\ +\xe9\xce\xec\x6e\xbd\xda\xd9\x9b\xb5\xce\xba\x3b\x7b\xb0\xad\xcc\ +\x7a\xb1\xce\xce\x3a\xb3\x76\x54\x70\x75\xdb\xe2\x81\xd6\xb6\x54\ +\x04\xbb\xa5\x20\x6d\xc1\x82\x06\x08\x07\x51\x42\x80\x80\x80\x02\ +\x21\x81\x10\x92\x40\x48\x10\x73\x24\x21\x67\x72\x80\x04\x42\x20\ +\x9c\x09\x47\xb5\x54\x78\xf6\xfb\x7e\x13\x16\x30\x58\x8b\x7d\x67\ +\x9e\xf9\x2f\x92\xfc\xcf\xfb\x3e\xcf\xfb\xbe\xdf\x97\x5d\x00\x76\ +\xfd\x98\x20\xf1\x0b\x82\x14\x02\x03\xc1\x75\x82\x03\xcf\xfd\xfe\ +\x8f\x48\xbc\x9b\x20\xe1\x57\xaf\xef\xb5\x2a\x8c\xd6\x65\xdb\x02\ +\x60\x19\x1e\x5b\x09\x27\xf1\x33\xfa\x19\x81\x22\xfc\xdc\x3e\x76\ +\x48\x7e\x8a\xa0\xb9\xb6\x59\x1c\x32\xcf\xad\x42\x39\xfe\x1d\x44\ +\xf6\x51\xd8\xc7\xe6\xe8\x87\x86\x3d\x7b\xf6\x58\x53\x52\xae\x2c\ +\xca\x3a\x3a\x10\x4e\xe2\xe5\x49\xc3\xc4\x31\x04\xb7\x3e\x49\xf9\ +\x2c\x60\x9b\x5d\x59\x53\x4d\x03\x4d\xb6\x11\x34\xeb\xfb\x20\x31\ +\x79\x60\x19\x9d\xc5\xbb\xef\xbe\x3f\xc5\xab\xbe\x83\xf1\x89\x29\ +\x4c\x4f\xcf\xae\x92\xef\xd7\xbc\x74\x02\x11\x9f\x0f\xbe\x1d\xe3\ +\xb2\x04\x43\x4f\xb4\x33\x40\x8b\x7b\x06\xcd\x3d\x2e\x34\xeb\xec\ +\xa8\x57\xf6\x20\x87\x53\x85\x32\x5e\x35\x43\xbc\xb0\xf4\x90\x81\ +\xc1\x60\x5c\x26\xbf\x4b\x7c\xe1\x04\x48\x1c\x24\x38\x41\xfd\xdd\ +\xea\x73\x27\xf1\xb9\x27\x04\x48\x87\x97\xc1\xd7\xbb\x20\x22\x55\ +\x37\xdc\x37\xa2\xb8\x4e\x88\x2c\x56\x3e\xcc\x56\xdb\x3a\x71\x04\ +\x2c\x16\x6b\x2c\xfc\xce\xe7\x27\x10\x91\x36\x93\x95\x3f\x46\x7d\ +\xa5\xfe\x12\xc4\x6f\xf4\x59\x31\xb6\x02\x7e\xef\x20\x5a\x7b\x9c\ +\xe0\x3f\x30\xa1\x4c\x28\x43\x46\x0e\x1b\xb2\x0e\xf9\x26\xd2\xf9\ +\xc5\x65\xcc\x2d\x2c\x21\x34\xbf\x88\xbd\x7b\xf7\x5a\xc9\x3b\x7e\ +\xba\x6d\x02\x24\x7e\x43\x90\x46\x3d\x35\x13\x69\x75\xb3\x80\xd2\ +\x3f\x0f\xcb\xc4\xe2\x9a\x50\xa1\x5a\xb4\x6c\xf1\x59\xa0\xb6\xa0\ +\xa6\x5d\x8d\x2f\xb2\x73\x71\xb7\x9e\xff\x0c\x31\x25\x9d\x09\xcd\ +\x63\x62\x6a\x06\x83\x43\x81\x27\xe4\xdd\xbc\x2d\xd3\xb0\x3b\x92\ +\x03\x33\x26\xd4\x53\xb5\xd3\xfb\x58\x4f\x88\xc5\x03\x21\x88\x2c\ +\x43\x50\xba\x46\xd0\xed\x09\x42\xe5\x9b\x42\x9b\x73\xfc\xa9\xcf\ +\x5a\x1b\xee\x2a\x74\xc8\xbc\xc9\x45\x09\xa7\x6c\x93\xcf\x9b\x88\ +\x27\xa7\x11\x18\x1d\xc3\x80\x6f\x08\xa2\xd6\xd6\x25\xc2\x51\xdb\ +\x28\x12\x87\xc6\x1f\xaf\x82\x2f\x62\x94\x4d\x89\x24\x90\x22\xea\ +\x52\x2d\x9a\x42\xab\xe8\x18\x79\x04\xa1\xc5\xcf\x10\x53\x74\xf6\ +\x0d\xa3\xd3\xe1\x87\xd4\x3c\x80\x16\xbd\x03\x0d\x5d\x06\x14\xd5\ +\x0a\x90\x91\x95\x0d\x2f\x79\xf1\xc6\xaa\xa9\xd4\xb3\x73\x0b\x4c\ +\xc5\x94\xd8\xdd\xef\x85\xc9\x62\x05\xb7\xbc\x12\xa5\xe5\x95\x4b\ +\x13\xf3\xcb\xab\x23\x0f\x01\x37\xd9\x11\xe6\xd9\x15\x84\x97\x15\ +\x13\x06\xcb\x3c\xd0\x68\xf2\xa3\xdd\xee\x5f\x27\x96\x3b\x86\x20\ +\xb3\x78\xd7\x7d\xe6\x08\xa4\xf8\x3c\x33\x1b\x2a\x8d\x36\xaa\xdc\ +\x53\x33\x21\x8c\x8e\x8d\x33\x15\xd3\x26\xe4\x37\x09\xf1\xc1\xc5\ +\x8f\x51\x73\xaf\x01\xbe\x65\x60\xfc\x11\xa0\x23\x13\x23\xf2\xce\ +\xa1\xbe\x5d\xb9\xb8\x51\x01\x83\x81\x74\x74\x4d\xa7\x1e\x0a\x67\ +\x80\xa9\xb8\xdd\xea\x83\xd8\xe8\x42\x93\xca\xcc\xf8\x7c\xe5\xcb\ +\x2c\x88\xda\x24\x51\x89\xa7\x67\xe7\x18\x1b\x86\x86\x47\x60\x77\ +\x38\x49\x82\x3a\x24\x7c\xf8\x21\xae\xb3\x0b\xe1\x99\x5c\x80\x6f\ +\x09\xd0\x90\xde\xe1\x0f\x2c\x81\xab\x1f\xc4\x7d\xef\x04\xdd\x07\ +\x1d\x61\xeb\xff\x9f\xc0\x1d\xb9\x16\x1d\xf6\x21\x48\xcc\xfd\x4f\ +\x7d\xee\xd4\x22\x9d\x55\x84\xaa\x9a\xba\x4d\x3e\x47\xe4\x8e\xf8\ +\x3c\x3c\x12\x84\xd3\xdd\x0f\xbd\xc1\x88\xc2\xe2\x62\x9c\x7e\x2f\ +\x1e\x3d\x03\x01\xf4\x2f\x02\x83\x84\xbc\xc5\xff\x2d\xee\x3a\x43\ +\x28\x51\x91\xf7\xf6\x05\xf1\x4e\xdc\xbf\x7d\x84\x33\x69\xe3\x20\ +\x18\xf4\x33\xab\xe0\xc9\x54\x68\x35\x38\xd1\xd8\xdd\x0b\x9e\x58\ +\x89\xac\x5c\xf6\x33\x3e\x47\xaa\x9e\x9c\x9e\x65\xe4\xee\xf7\x0e\ +\xa2\xd7\x6c\x41\x43\x03\x1f\x27\x62\xe3\x20\xe9\xd6\xc0\x45\xcf\ +\x01\x52\x90\x24\xb8\x86\xb2\x9e\x00\x6e\xb4\xdb\x50\xd1\x1b\x44\ +\x85\xce\x8b\x4a\x7e\x0b\x6d\xbe\x9b\x5b\x27\xd1\xa0\x99\xf8\x16\ +\x65\x22\x05\xee\x29\xf4\x28\x13\xc8\x90\x78\x35\x0b\x1a\xad\x3e\ +\xaa\xdc\x63\x13\x93\xf0\x0d\x0d\xc3\x66\xef\x83\xb4\x5d\x8e\xc4\ +\x4b\x97\x90\xc3\xca\xc3\xd4\x63\xc0\x4e\x7a\x49\x31\x4e\xfa\x89\ +\x94\x7f\x5b\x3b\x84\x7c\x85\x13\x25\x6a\x1f\x4a\xd5\x03\xe8\xf2\ +\x30\xa3\x28\x22\xf8\xf9\x33\x09\x74\x8f\x2e\xa1\xa8\xbe\x15\xa5\ +\x7c\x09\xb2\x4a\x2a\xf0\xcf\xe3\x71\x51\xe5\xf6\x07\x46\xd1\xe7\ +\xf2\x40\xab\x37\x20\xfd\x6a\x06\x92\xbf\x48\x83\xcd\x37\x02\x27\ +\xa9\xda\x40\x1a\x4c\xe0\x7b\x88\x52\x9d\x1f\x45\xdd\xfd\x0c\x71\ +\x41\x97\x1b\xc5\xdd\x1e\x88\x9c\x41\xfc\xf9\xcd\xb7\x5d\x84\xeb\ +\x6c\xb4\x43\xd0\x28\xf7\x4e\x23\xa7\xfc\x1e\xb2\x4b\xab\xf1\x51\ +\xea\x57\x48\xfe\x6f\xea\xfa\x58\x51\xb9\x47\x82\xe3\xf0\x0c\xf8\ +\x60\x34\x99\x51\xc9\xab\xc2\xfb\x67\xcf\x41\xfe\x40\x03\x3f\xe9\ +\x6e\xb2\x8d\x19\xb9\x6f\x69\x06\x19\xd2\x9b\x2a\x2f\x72\xe5\x0e\ +\xe4\x75\xf6\xa1\xf0\xbe\x1b\x1c\x95\x1b\xf9\x9c\xca\x29\xc2\x53\ +\xb8\xdd\x29\xdc\x2b\x76\x04\x90\x51\xc8\xc5\x95\x6b\x79\x38\x11\ +\x9f\x80\x9b\xb7\x6e\x33\x63\x15\x91\xdb\x6a\x73\x40\x22\x6d\xc7\ +\x85\x84\x0f\x50\x74\xbb\x0c\xf3\x2b\x80\x9f\x34\x58\xf7\x24\x20\ +\x1c\x7c\x84\x4a\xd3\x18\x38\xfa\x61\x86\x9c\x56\xfd\x55\xb3\x1e\ +\xac\x0e\x3b\xb8\x3a\x1f\xd9\x21\x1e\x7a\x2f\xe0\x13\xbc\xba\x5d\ +\x02\x26\xbe\xc1\x83\x94\x6f\xd8\x38\x9f\x9c\x8a\x03\x7f\x3d\x04\ +\x63\xaf\x99\xe9\x6e\x2a\xb7\x46\xd7\x83\xa4\xcb\xc9\x48\xff\x3a\ +\x8b\x8c\xd5\x3c\x53\xb5\x71\xf6\xa9\xdc\x35\xf6\x69\x5c\x97\x59\ +\x19\xd9\xbf\x6e\x21\xa7\xa0\xd4\x82\x74\xbe\x1a\x57\x9b\x34\x60\ +\xc9\xcc\x10\xbb\x82\xf8\xe5\xaf\x5f\xa7\x67\xc0\x3b\xe1\x75\x1f\ +\x35\xcc\x35\xdd\x66\x7c\x94\x96\x85\xb8\x73\x17\xf1\x97\x43\x31\ +\x4c\xd5\x74\x99\xf0\xaa\xaa\x71\xfa\xf4\x19\x68\xcc\x0e\x8c\x92\ +\x2d\x36\x14\x1e\xab\x5a\xc7\x0c\x78\xe6\x71\x70\x0d\x23\x4c\xa3\ +\x65\x8a\x0c\x8c\xec\xb4\xfa\x9c\xb6\x5e\x94\x74\x39\xd0\x66\xf7\ +\xaf\x1e\x3d\x11\x4b\x47\x2e\x6f\xc3\x79\x13\x35\x2c\x5c\x99\x1a\ +\xf1\x97\x3e\xc7\xd1\xd8\x33\xf8\x38\x31\x09\x86\x5e\x13\x1a\x9b\ +\x04\xf8\xdd\x1b\xfb\x51\x4f\xd4\xf1\x90\x99\xee\x9a\x00\xaa\xad\ +\x93\x60\x2b\x5d\x0c\x39\xf5\xbc\xf0\xbe\x67\xbd\xea\xcc\x16\x3d\ +\x4a\x55\x1e\x08\x6d\x01\x94\xd4\xf1\x43\xe1\x65\x53\x40\xf0\xca\ +\xf7\x25\x60\x2b\x6e\x6a\xc7\xa9\x84\x44\xc4\x1c\x39\x8a\xdc\x7c\ +\x36\x5a\x5a\xc5\x38\x14\x13\x83\x2f\x39\x35\xc8\x14\x6a\x98\xe6\ +\xa2\xd5\xd2\x27\xf5\x9a\x7a\x4c\x13\xa1\x49\x64\xb7\x99\x90\xdb\ +\x6e\x46\xb9\xda\x8d\x06\xa5\x76\x39\x2c\x39\x3d\xf9\x4e\x13\xec\ +\xd9\x72\xd4\x47\x0d\x3b\xab\x46\x88\x63\xff\x39\x8f\xdf\xee\xfb\ +\x3d\x1a\xf9\x02\x9c\xbf\x90\x80\x93\xf1\x17\x70\xa3\xad\x07\x19\ +\xc4\x4f\x4a\x14\xe9\x6e\xba\x58\xa8\xef\x2c\xfa\x94\x98\x50\x28\ +\xb7\x40\xe9\x0e\x3c\xf9\x57\xec\x29\x2a\x77\x2d\xc1\x67\x04\xfb\ +\xb6\xb9\xe4\x44\x8d\xbe\xcc\xb2\x5a\xfc\xe3\xe4\x19\x1c\x3c\xf4\ +\x37\xb0\x72\xf3\xb0\xef\xc0\x1f\x50\x20\xd1\x21\x89\x27\x65\x2a\ +\xa6\x4b\x85\x3e\xbf\x21\xd5\x46\xe4\x2e\x90\x5b\x21\xb0\x0c\xae\ +\xe5\xdc\xe2\xd2\x11\x13\x13\xe4\x87\x6f\x3c\xaf\x3c\xe7\x96\x15\ +\x35\x9c\x69\x45\xe5\xf8\xfb\xb1\x58\x1c\x3f\x19\x87\x37\xf6\xef\ +\xc7\x8d\x3a\x11\x92\xab\xa4\x0c\x21\xed\x70\xea\x35\x55\x21\x8b\ +\x34\x5b\xc9\x03\x37\x2a\x34\x6e\xd4\x49\x3a\x17\xc3\x72\x73\x08\ +\x8e\x6d\x95\xfb\x87\x24\xe0\x4a\x65\x73\x70\xe4\xf8\x29\x1c\x3e\ +\x7c\x98\x8c\x63\x2e\x32\x05\x2a\x5c\x22\xd5\xd3\x5d\x7e\x4d\xdc\ +\x0b\x36\xe9\x74\x76\xa7\x1d\x77\x8c\xe4\x88\xb6\xf9\x9e\x84\xb7\ +\x1a\x95\xfb\x22\xbd\x49\xfd\x80\x0b\x6d\xf4\x04\x32\x4a\x78\x4c\ +\x0f\x9c\x4b\x49\xc3\xb5\xa6\x2e\x7c\xc2\x6d\x65\x36\x59\xf1\x83\ +\x01\x5c\x97\x9a\xc1\x51\x7b\x20\xf3\x04\xd7\xce\x25\x26\x05\x36\ +\xc8\xfd\xc7\x9d\xc8\x1d\xd5\x82\xdc\x1a\x01\xce\x5e\x4e\x45\x81\ +\x58\x85\x78\xf6\x5d\x5c\xa9\x55\x90\xaa\xfb\xc0\x96\xdb\x50\xad\ +\x75\xe3\xae\x54\x41\x2f\x10\xca\x0d\x72\xbf\xba\xd3\x6a\xa3\x05\ +\xb7\xa2\x51\xf8\x1d\xaf\x43\x8d\x4f\xb9\x2d\x88\xcb\xe6\xe1\x9a\ +\x48\x8f\xaa\x1e\x2f\x9a\x35\xe6\xc7\x7f\x7a\xf3\x2d\x57\x78\xac\ +\xa8\xdc\xaf\xbd\xac\xdc\xd1\xe2\x08\xdd\x05\x5c\x75\x1f\xde\xcb\ +\xaf\x45\xb9\x76\x00\x32\x67\x60\xf5\xc2\xa7\x97\xa9\xdc\xf7\x08\ +\xd2\xa9\xdc\x3b\xf8\x03\xf3\xc2\xf1\x13\x82\xca\x1c\xee\x9d\x50\ +\x0b\x39\x94\xb8\x0d\xc2\xc8\x16\xa3\x17\x87\xc3\x2f\x22\xf7\x0e\ +\xff\xda\x6d\x8a\xdd\x61\x99\xd5\x1b\xb6\xd8\x6b\xbb\x5e\x32\xbe\ +\x2f\x89\xff\x01\x66\xb9\x5f\xfc\x11\x80\x3d\xcf\x00\x00\x00\x00\ +\x49\x45\x4e\x44\xae\x42\x60\x82\ +" + +qt_resource_name = b"\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x07\ +\x04\xca\x57\xa7\ +\x00\x6e\ +\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x06\x7c\x5a\x07\ +\x00\x63\ +\x00\x6f\x00\x70\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x07\ +\x0a\xc7\x57\x87\ +\x00\x63\ +\x00\x75\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x08\xc8\x58\x67\ +\x00\x73\ +\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x0a\xa8\xba\x47\ +\x00\x70\ +\x00\x61\x00\x73\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x06\xc1\x59\x87\ +\x00\x6f\ +\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x02\ +\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\x26\x00\x00\x00\x00\x00\x01\x00\x00\x03\x58\ +\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x18\xdd\ +\x00\x00\x00\x50\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xc5\ +\x00\x00\x00\x66\x00\x00\x00\x00\x00\x01\x00\x00\x12\x6c\ +\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x08\x96\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/mainwindows/application/images/copy.png b/examples/widgets/mainwindows/application/images/copy.png new file mode 100644 index 0000000000000000000000000000000000000000..2aeb28288f58ddffdd1d75115f170c5bf2773814 GIT binary patch literal 1338 zcmV-A1;zS_P)3P|jKV4ArrNQZsr&q&3Fam_48Lh`MiYI|sB6GiaYuZZ? zasnKC=d9Ws*vOa?K!llv;~9}LDH=;*C6q)snnH7j#=aB8{{oN_lX)cZ$XJrkAB0_u z!sQ7f5=*1>!|zQrby)$h>)1Bcke)jH%(>@ZE)hRgo<&7f4Jw)5udTzKv5Ch3thOcm zx#)*$6jZ zxjE=2CQwjNfFaFqeBMc>`320FTpYmRPeJsB@I$Z8%>Zil0#HL{*yW1HLMx&9BQ>hew>g`42C!b-4K{%G& zPNKpdi`TSeSQ5jt zz}D6l-wA<00HP?u@AqSEZ4IXsmC*dI=c&nj!3&r@K%3kE+d(!rH~Ds?RumQ0==)XR zsU3kw0Ovao0D#OTfFv_dBoZhqui^lIxB!co0iZTo)dw&I|ClF}JUvZG$*D>XptrLF zi9N;m7cj8^d~x*v0Ho^4m=ue}P^PGYdPu;S8Mtc&=A4=P=T~F|kkV6X0*FSV+&mNt zp}4dH*9HaLW{2dU0UTt+1SmUX21q@ea}t@;xj-PrWmUM?EueooW3GLWY2c%FnE?J> zJ*6hCuC8*3w@NB-xmUnF8@PU+0q)ELXD;m%K&qWYi;j}haZKLWGrnrG9>`fBl6@D%o`^aXzvlAyk=W}Pc`B^ahku5Y4`j}CIOJCBx$u% zLNX5qgK)WA+>l;M=(ES;f!poI@e{8lpM9a6Ogos0nT|fmct-%0O2q-B6)w#;8B$U@ z_bIi*;ou_U#l=Mq_2TiDT=X8flj*JiEiEl>>0qJM(w7a5mzS5}^Z8)2+4y~FX^BG+ z0F4U^3(c|s(4vx3lM#*SPTzP`J2hanT6y)<3jNMtFeLKw^6s-|9N8B@Q&W>$nrBK+ zA`_~b#ukg2H$b09M@J)VZEfEC{CpGp+d-zXy_)|gKy!05p8`rp5L7=^KR-Xu>(*#A zk-EA%=fkvJOdl{E&Bk~~0Hsptb~>HBVoFMHK9sb+zTTOWlOvfHXH#`n0F8}}Zi~f& wfq{WYZEdYHH#b*S)7=30e@0BgL78sX-$OZ87=>`i1ONa407*qoM6N<$g6NH5LI3~& literal 0 HcmV?d00001 diff --git a/examples/widgets/mainwindows/application/images/cut.png b/examples/widgets/mainwindows/application/images/cut.png new file mode 100644 index 0000000000000000000000000000000000000000..54638e9386dc8af40dcc9a3ee2f57c62e248e406 GIT binary patch literal 1323 zcmV+`1=RY9P)J0(1!|L=@Q+aTEb7Mu4u}WZlMQB24&|#EVDBq0{%sj+Z+)GGQx0 zAcdU1Fi0-lfEhqCt9ecIzWZ_$Xk-SF1YV<2^ak#QNA=LXgUd}Io1OMRbT7RYGCd%P zKS-r48v%?ldBMA#h)c%T#wHG+5V`$A{>3XcMvM|%P6Cssr>70f(>b}AV>T2D(&VEn zK_HANo+{rrN9){swakg0Ktz^QgDWfxHbzJY6ZK>&doEN10r&$qzrYSODpcQMh*H%o zSOat&76=4-MOF34plx)*)N}VCzH?EPkgku=6VK(8gNL*Np3E)-)CS$Jnai-RudhD8 z(qOgQ?SS}sjv4h}*IqNacG`39XxPWcN1v;!unrFm!4QYC z_Acj^H}`jQVc5OsUVtxVnxKZ?sWw9Q@B`QxpVZH#=NgKbEq?xOmsA>SUtb@%(9v@T zVsaH$PQ-_o)Qm6`=@qvgI2;Z@q}CZRo`stQer>5G8e5my4CXEh^CT4CHjaC}9?{K0 z$O&($1U%8bR;v{dcYhm%^O9V6PFgxKporEb{=Djv}7NhUQZ#8TNvL0_NhN zpdjG!cwn(uKwDk``_Co}Ev8e>XOzzgOoQTEd*;Gmnz9rW3I&M8V#v(QgrcG%P^;C@ z+1bfp?EcBQ$=j!OF1OE1fUdXLDR2(JYL~2dh{}J0;wgy^K9?&YTb2(8W8+7JA12t6 za%7Hg8ovjl(FiTAE%3|0ARIXHz6G;l!311sgoTBKM%*UnGOR4mGqn@!JL9_3Gp~Z> z{(6Z9p5FXo8}~etjeBORPg}}0?N~!YJv1~lfTgz=G8Dzb^Xb54Jd))oo;F?OoGLPS zee{DaT5J+A3>zitarZCFC+`J^U;fkNL<>x4^vOPTl^zTR1GKld!`H@^F|L6LX7M&{ zIA}acIyz>{0a00^F4~fx%15b|k+|p_1^WSy+Zxk*z z((l+8X-U2;oygOcJEspZj3vh3pSpKnaW$YpY_$lC`IPbC@H0!Ad}tF|z0RZAYfnh` z3=gmm{_}^(`7iFdNp1l4dp_;=2p%dvUFBG+@kd(qwpj}i9kWBpkvIuC`Kgv6`dk_f h&$IvkH~dc%_#Nkm8M#Em0nY#c002ovPDHLkV1hsWYZL$g literal 0 HcmV?d00001 diff --git a/examples/widgets/mainwindows/application/images/new.png b/examples/widgets/mainwindows/application/images/new.png new file mode 100644 index 0000000000000000000000000000000000000000..12131b01008a3ec29ec69f8b3f65c4b3c15b60d6 GIT binary patch literal 852 zcmV-a1FQUrP)IE2xvpcKl890$E8eWxeF8o0mWjmIG{M&7eWO9CVRojsy7@;&dpQ!a9t0J7gPX(5I|>76wd9YM;~Wq>Ghkp6rY@= zsi|pt_x=M#qtRtve?bMn?-1>_C5DBX;{}vm&C%raD|#~il%B<2&`e?uix*V@+JPAL z6CgbQkZR2~6*sGtFK$zbV~w|k*M3m}@OjM5T^_Z^d)w}xJHF(IUAVpO;*`oW;C1B2 zbys585IO4RGepz@rv~8kI;}Y(n3!mCfS7AgQ=I?+DlNG&;!abH5Df(KZTl#;d_@48 zJKJjfX^uQ>h#Iar6M#C8w^So4*Tn<|1^_iEoENLSCA-QKz)fKe6)JLW%zjz|XlmW9 z@suY3Q`{VJZCgNKnyVajp6h`@6-N=kYKbun)^`LT3}hx^wrO>XsHzE2w#B^A1Ngov zV}~hV3>btQ09#E(0CWRWn5~q>9Op*n90161U8$i6fc^Yd5_2;F2sIc&=-PaaDX2~W zTL1&dm}fQw05ax<-uM>_{4Cgt02pUFPqb7NBbWjJ0t`O;#ZxHoL%3#1_iOo5hu6MT z0mxO4x=yW24v?>f-nYV%Jx`{y-lMT`>)O!u6_~SbsQ_#=q-z-e;1PdX7gN*|3t4aE z?!Drr!OKg0ZH#q?HK_Wx9NlHvJdYn4{+`bsH@(TacqVT~0BG|6fti$^=|8_20YcOC e{Jor>rG5iZY$c(Rl?rzN0000RP)CWtKz1rEEwa&Ubd$6s{da=&VIP1;2`BM0`Wb;D z{M-!)vd0-ix#k=pmKgFxQgYk(eOi$0QlJD2NbOI5d5567avIIj< zv@<}9dj`!tE;Q@xs8{wNhf{?zUNu9!u=J3D!C+h_ze{}K1V|htI6?j0>T@UYxhDij zhnKMl|M#(rT!AcZ}eF)wgP_d zAX10jekLr}U#(CrCA<(opAbNs2#S{v>vbjZBPMG2>Dlh2!oC#Mk@9m9Zc z2%^^3CBjkLC=!RpAFqNhVw6pZB#Q!^oqj*T-F(Vw$mLX*nO_ zNX-3DeeTpEomGUYnz~IsN92z9JUkMF)7=lf!HB}*Vw`?29z6pA^e+N~guKQ7E$%u) zC{dC3_66}y+`oN81yr%;K@{IH8|1O-3y*riL6}qGd@SEo}8X#Q_kq zZ|eG3QMpHgF(8Pc07FLLD$kpMaaUZZl&Qk=tr>Kq76&g@g}Kbh`}mD}bLg zSob6#9DIaI(-=7VVTPPm{Z+FbtPVT4Iv?2~9(pg}6TG@z0w%t}gOqRBIG>z~1AjdP zW3QR%ZYsA%*Mp?X$w>b?i;UGgQ?+sSsoXX8X`%zES@sOGBngFV;lVB@d3_10@@V;lg>dY2BN>v^RZ2^?j@k8NdQ$X;_ z_a$H}ZfeJ=gha#~If~qTHdcoJ4Lhqwh-3dbkKgY5JsSA}oWGEOlkpdDqpb%S#7{~T>2A7M zsP8QLl$cN`w?OF*Jo#7bDJpj@!Dj^fwz=d)jlRsXTKwbW85}(HH?VT^u<$rb~rBzaiB|lB=W)A?(%51dO$!?mU^ ze8O#IHd*n50bG}w!BKl4^90wps7K`#)>4RXJ_(`usyx1v$_9j`-;Pq{6K%jV&lNRO%>FPb&x$A5bBEmwG~ zsNAo;tlZJ!2;Bu-bsyf#uSL0b05WG_^}?r@soeJn(y81#_yhC8@e_i|9PXV^3ptdy z4Z_G4qZfz6FCzC2|JrSe-C>#48@AYMyIwNBFNyyFX1QPd5r93<00000NkvXXu0mjf DP*&js literal 0 HcmV?d00001 diff --git a/examples/widgets/mainwindows/application/images/paste.png b/examples/widgets/mainwindows/application/images/paste.png new file mode 100644 index 0000000000000000000000000000000000000000..c14425cad1ff1b2c5628be5769c9e9e52b78635f GIT binary patch literal 1645 zcmV-z29o)SP)3Gx zefpoBhy8x@pP6$JN-2UQgm?vbp2urQDfM^OC?_DeL%RWJmr}mQV`N#@2O9RfK(_`t z{}ccw{I~7(;$U4wL~hQBiYr&HP+e1vKmedn2xTZiDQ44YUa1!^ytGbiJMka6M}vG@ zLrgqP2loG9i`^_G_)0Q7JWOR}B`e8wT^_)0sjwm&qAGGfr|N;V0|+ezNTCh%UA#yx zm%}d>QA&}|=UH4_q);eO)MK@^wUhx^fcS#;fB^tDLmDAYR7=GY}hKA6kOPAcP zuC561)~X!<6GT-k!gJLz@}5tjD3MBG2|?Jgh=y$Das?8ijz6FOD-BH>0V2R=mW1#7 zc%Dafb+w*QOZ4j1tA~UTD5c(75x}xR0JbfV+O`xp2&58N!i*b_Ou6iP^*huzHW7R; z!Gvcr8OqDc&1OD!?ARu~e-17|ECJBj*{Kd4I;3nN2w4!eEgZ+jLQu5L8XEw|vWPgA zt^#0Lco4wc+#EGEH3lFWjdJA3kD9q>HlpG95}EZ=m1y-ptN)rjt$|Ez*CB`q|1$rgVVB? zrhTuowc{78+xt2VFSK*}&LsW){Unn~lv3vU`0?ZDx~wzj&Yk1v(W4wbe3;(eUJ{9f z1T3Ky+yU+X&gS^%luv8N&-msq-zN6;H<^5HH8r836d;2i zMi$(072p5qZ>Vh8NaE}}Opji}iIlOmc?X+Yw)07OC1VMf&t~%6oz60$?T8IbC+FC= zE6VyM05f|%YwGIi0L*nNl`;TID-fW$T5#c=V<;@j=Em6&k5ZJ9d&7MsWd+;Xe@so= z%X~bXX3}54&3G)#YcF^p0JU^FLZOfeE#2xLjsYt8K48JdxS&uRBOHrUx22Yncy@gS z>8!_S|DTwyyiCjXgSZP}yn>`ylz7@9$3iWtfa7VPmemyj0M^GtgvulQziMM4o~aCT z;opPo+4&R7qYk+;M*}DWVQT;uOChBkB`_)#q+A6+Sfwh=^&|RlY=-e!kMI5ZkKD@C z;6z-a5gX5w6g>yi0i}>q@=$770agVN2uuwG7@cUt@bD?; zK3j0A)Rg|7%OH8oYxFCwW^r%olu$Hy-NXMuhl?5?;8OW$_d zPbP%{KnOr#TKwMNV7j}zJEh->%p}lW?Q_jx?V5KpZV_N`@cndOUtjvnnKP!vrO=Of r0*SSrV$g&__6vQz4|I&^4Jxf00000NkvXXu0mjfT=)$w literal 0 HcmV?d00001 diff --git a/examples/widgets/mainwindows/application/images/save.png b/examples/widgets/mainwindows/application/images/save.png new file mode 100644 index 0000000000000000000000000000000000000000..daba865fafd22fa18e7c0488eb699b79d3554170 GIT binary patch literal 1187 zcmV;U1YG-xP)5-PJz!8#8DIjU4h)0S{a*K!i>mJVVCD^kQ5IHGsm^=1>z+FI)Tw&v zz2|;5 zYXiKvXAppke-?cB?jC^K0C4>59N#}M1b8m}xWN9m&Tq?d4;^`$3nP}(pC4rW)qR_5 zKt-??KzML0Bg?XF0WdI@VU185d=w)kA`~mw7?IVLbLY;3D!2sF6tWD`ER0DCNfO?7 zI*{j(x1rU7b}No;C~~s;IMxc|ue?cX@%rWftQD*k1h7Wfy?f^tYwL!tfLf?lf$D8h zjjsf?g7=`NgaKy-HG&AJ3Y9FwBOo3K!0;X~0^TDMCKY^$Bg7#dJRx2{O;{K}*Gh>7 ztf1Os0Gczu1&UJ#X#$l5vNZMt5(iG9=s;dTE04VeOF6W2$O}}5aXkPkPoHKY21CJ!U{_^v8Xy`U*q`vX%#{A#01X5mtL``3Wj}4_b=eEU&o)}BH zcC!Nrol+61khoCqTE#GZvCBZkunzPltylR~F5%(E(lYhTaDB;yE$K=b5S$vobLD22 zD>u8WQCC0Ls$_n}C!#5=1r@`b3$=HqY!|4(sUXN2HLsgB8jo2qp8k93?-T&>g72GH zFe_J90#zZ=ko@OU-}3936D%#>xTpG8Y6Cp=>`tC}VFC}RGg~nb1AK?~_rJly!UDH$ z-J&Q8L>2*RmC}ns$#9hnDF1_1m8Hc<-5*m|${p@{U>9F*?@YhOX2JRd6<}qE@f>YdJGB!_d$W)>^#xG@H%40#K{h zaM6gg)QA+E3nyHlDgdZft7KW$r?@xXX>%H>7ePy{I3CBnBed6yF^ELpk2<)ko3Ayf z4fFOGEDock Widgets example demonstrates how to use " + "Qt's dock widgets. You can enter your own text, click a " + "customer to add a customer name and address, and click " + "standard paragraphs to add them.") + + def createActions(self): + self.newLetterAct = QAction(QIcon.fromTheme('document-new', QIcon(':/images/new.png')), "&New Letter", + self, shortcut=QKeySequence.New, + statusTip="Create a new form letter", triggered=self.newLetter) + + self.saveAct = QAction(QIcon.fromTheme('document-save', QIcon(':/images/save.png')), "&Save...", self, + shortcut=QKeySequence.Save, + statusTip="Save the current form letter", triggered=self.save) + + self.printAct = QAction(QIcon.fromTheme('document-print', QIcon(':/images/print.png')), "&Print...", self, + shortcut=QKeySequence.Print, + statusTip="Print the current form letter", + triggered=self.print_) + + self.undoAct = QAction(QIcon.fromTheme('edit-undo', QIcon(':/images/undo.png')), "&Undo", self, + shortcut=QKeySequence.Undo, + statusTip="Undo the last editing action", triggered=self.undo) + + self.quitAct = QAction("&Quit", self, shortcut="Ctrl+Q", + statusTip="Quit the application", triggered=self.close) + + self.aboutAct = QAction("&About", self, + statusTip="Show the application's About box", + triggered=self.about) + + self.aboutQtAct = QAction("About &Qt", self, + statusTip="Show the Qt library's About box", + triggered=QApplication.instance().aboutQt) + + def createMenus(self): + self.fileMenu = self.menuBar().addMenu("&File") + self.fileMenu.addAction(self.newLetterAct) + self.fileMenu.addAction(self.saveAct) + self.fileMenu.addAction(self.printAct) + self.fileMenu.addSeparator() + self.fileMenu.addAction(self.quitAct) + + self.editMenu = self.menuBar().addMenu("&Edit") + self.editMenu.addAction(self.undoAct) + + self.viewMenu = self.menuBar().addMenu("&View") + + self.menuBar().addSeparator() + + self.helpMenu = self.menuBar().addMenu("&Help") + self.helpMenu.addAction(self.aboutAct) + self.helpMenu.addAction(self.aboutQtAct) + + def createToolBars(self): + self.fileToolBar = self.addToolBar("File") + self.fileToolBar.addAction(self.newLetterAct) + self.fileToolBar.addAction(self.saveAct) + self.fileToolBar.addAction(self.printAct) + + self.editToolBar = self.addToolBar("Edit") + self.editToolBar.addAction(self.undoAct) + + def createStatusBar(self): + self.statusBar().showMessage("Ready") + + def createDockWindows(self): + dock = QDockWidget("Customers", self) + dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea) + self.customerList = QListWidget(dock) + self.customerList.addItems(( + "John Doe, Harmony Enterprises, 12 Lakeside, Ambleton", + "Jane Doe, Memorabilia, 23 Watersedge, Beaton", + "Tammy Shea, Tiblanka, 38 Sea Views, Carlton", + "Tim Sheen, Caraba Gifts, 48 Ocean Way, Deal", + "Sol Harvey, Chicos Coffee, 53 New Springs, Eccleston", + "Sally Hobart, Tiroli Tea, 67 Long River, Fedula")) + dock.setWidget(self.customerList) + self.addDockWidget(Qt.RightDockWidgetArea, dock) + self.viewMenu.addAction(dock.toggleViewAction()) + + dock = QDockWidget("Paragraphs", self) + self.paragraphsList = QListWidget(dock) + self.paragraphsList.addItems(( + "Thank you for your payment which we have received today.", + "Your order has been dispatched and should be with you within " + "28 days.", + "We have dispatched those items that were in stock. The rest of " + "your order will be dispatched once all the remaining items " + "have arrived at our warehouse. No additional shipping " + "charges will be made.", + "You made a small overpayment (less than $5) which we will keep " + "on account for you, or return at your request.", + "You made a small underpayment (less than $1), but we have sent " + "your order anyway. We'll add this underpayment to your next " + "bill.", + "Unfortunately you did not send enough money. Please remit an " + "additional $. Your order will be dispatched as soon as the " + "complete amount has been received.", + "You made an overpayment (more than $5). Do you wish to buy more " + "items, or should we return the excess to you?")) + dock.setWidget(self.paragraphsList) + self.addDockWidget(Qt.RightDockWidgetArea, dock) + self.viewMenu.addAction(dock.toggleViewAction()) + + self.customerList.currentTextChanged.connect(self.insertCustomer) + self.paragraphsList.currentTextChanged.connect(self.addParagraph) + + +if __name__ == '__main__': + + import sys + + app = QApplication(sys.argv) + mainWin = MainWindow() + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/mainwindows/dockwidgets/dockwidgets.qrc b/examples/widgets/mainwindows/dockwidgets/dockwidgets.qrc new file mode 100644 index 0000000..968feac --- /dev/null +++ b/examples/widgets/mainwindows/dockwidgets/dockwidgets.qrc @@ -0,0 +1,8 @@ + + + images/new.png + images/print.png + images/save.png + images/undo.png + + diff --git a/examples/widgets/mainwindows/dockwidgets/dockwidgets_rc.py b/examples/widgets/mainwindows/dockwidgets/dockwidgets_rc.py new file mode 100644 index 0000000..393a226 --- /dev/null +++ b/examples/widgets/mainwindows/dockwidgets/dockwidgets_rc.py @@ -0,0 +1,503 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Tue Aug 3 15:48:46 2010 +# by: The Resource Compiler for PySide (Qt v4.6.2) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x06\xc4\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd9\x04\xdc\xb2\xda\x02\ +\x00\x00\x06\x7b\x49\x44\x41\x54\x58\xc3\xad\x57\x69\x4c\x54\x57\ +\x14\x76\x21\x62\x95\x04\x97\xa8\x25\x18\x52\x1b\x0d\x11\x45\x04\ +\xaa\xa4\x49\xb5\x56\x4d\x6c\x69\xb0\x68\xa3\xb6\xc5\xb2\x46\xfd\ +\xa3\x2c\x61\x51\x48\x24\x08\x64\xc2\x12\xd0\x22\x42\x11\x59\x44\ +\x40\x40\xf6\x91\x7d\x53\x36\x09\xb2\xa9\x08\x0e\x24\x0c\x62\x01\ +\x83\x02\x82\x0b\x08\xa9\x5f\xcf\xb9\x99\x31\xa3\x80\x9d\xb4\xf3\ +\x92\x2f\xf3\xde\xbc\x7b\xce\xf7\xdd\x73\xce\x3d\xf7\xbe\x79\xf3\ +\x54\x2e\x3b\xbb\xe8\x2f\x1c\x1d\x23\x1d\x1d\x1d\x23\x02\x1d\x1c\ +\x2e\x48\xd2\xd3\xab\x25\x97\x2e\x15\x56\x47\x46\xde\xac\x4d\x4c\ +\xac\xa8\xad\xaa\x6a\xbf\x2f\x95\x36\x41\x89\x2b\x57\x4a\xdb\x8d\ +\x8d\xf7\x7c\x49\xa6\xf3\xe7\x69\xe8\x5a\x68\x6f\xff\x47\xa1\xfc\ +\xf1\x73\x4c\xff\x0d\xb5\x10\x10\x98\x3c\x48\x76\xc6\x1a\x13\xc1\ +\x33\xf2\xf4\x4a\x7a\x3d\x36\x09\xa8\x03\xf9\xc0\x38\x2c\x2c\x7e\ +\xce\x21\xd3\xb5\x9a\x8a\xc2\xfc\xc3\x87\xfd\xa3\x8a\xab\x64\x18\ +\x7a\x0d\xb5\xe0\xe3\x1b\x3f\x4a\x76\x3f\x11\x3e\xd3\x88\x82\xed\ +\xdb\x0f\xac\x3d\xeb\x97\x89\xde\x17\x50\x0b\xf9\xe5\x32\x18\x18\ +\x18\xc7\x91\xe9\xe7\x1a\x8b\x82\xad\x6d\x58\x79\x63\xf7\x38\x64\ +\xcf\xf1\xaf\xe0\x71\x16\x16\x07\x5b\xc8\xee\x2b\x82\x96\x46\x14\ +\xd8\xd8\x04\xfb\xa4\x15\xc9\xd0\x3a\x08\xb5\x60\xe7\x18\xf4\x9c\ +\xcc\x7e\x21\x2c\xd1\x88\x00\x4b\x4b\xaf\x8d\xa1\x97\xaa\xd0\xf0\ +\x17\xd4\x42\x08\x8d\x25\x33\x7f\xc2\x0a\x8d\x2d\x49\x17\xf7\xa4\ +\xfe\x4a\x39\xa0\x0e\x22\x92\x9a\xa0\xa7\x67\x28\xd5\xe4\x6a\x98\ +\x47\xcd\xa8\x28\xbf\xfd\x2d\x8a\xba\x31\x27\x0a\xba\x80\xdc\x4e\ +\x20\xb6\x74\x00\x86\x86\x3b\xea\xc9\xcc\x54\x63\x75\x60\x67\x17\ +\x1e\xc4\x8e\xb3\x3a\x80\x8c\x36\x20\xad\x09\x48\x69\x00\x92\xea\ +\x80\x84\x6a\x20\xa6\x1c\xc8\x6c\x04\x4a\x1e\x00\xf5\xed\xe3\x68\ +\x6a\xea\x80\xaf\xaf\xef\x2b\x32\x35\xf8\xdf\xe4\x12\x89\x44\x2e\ +\x95\x96\x20\xab\x70\x00\xa9\x52\x08\x94\x10\x31\x71\x50\xf3\x01\ +\x7a\x9e\x8c\x61\x68\x68\x08\xbd\xbd\xbd\x78\xf8\xf0\x21\x1e\x3c\ +\x78\x20\x7e\x13\x13\x13\xb1\x7b\xf7\xee\xda\x43\x87\x0e\x05\x58\ +\x5a\x5a\x6e\xe4\x54\xfe\x27\x01\xa1\xa1\xa1\x7d\x13\x13\x13\x98\ +\x9c\x9c\xc4\xd4\xd4\x14\xba\xba\xba\x70\xe7\xce\x1d\xdc\xbe\x7d\ +\x1b\xf9\xf9\xf9\x28\x29\x29\x41\x55\x55\x15\xea\xeb\xeb\xd1\xdc\ +\xdc\x2c\x04\x30\x92\x92\x92\x70\xe3\xc6\x0d\xe4\xe5\xe5\x89\xfb\ +\x13\x27\x4e\xdc\xdd\xb1\x63\x87\x99\xda\x42\xec\xec\xec\x96\xd9\ +\xda\xda\x7e\x17\x12\x12\xd2\xce\x33\x54\xa2\xb0\xb0\x50\x38\x56\ +\x25\xcf\xca\xca\x42\x42\x42\x02\xc2\xc3\xc3\x11\x17\x17\x87\xab\ +\x57\xaf\x0a\x81\x7d\x7d\x7d\xe8\xe9\xe9\x11\x36\x75\x75\x75\x38\ +\x7d\xfa\xf4\x84\xb9\xb9\xf9\x6f\xe4\x5e\xfb\x93\xe4\x47\x8f\x1e\ +\xb5\xa7\xc1\x2f\xa2\xa2\xa2\x10\x1d\x1d\x8d\x8c\x8c\x0c\xc4\xc6\ +\xc6\x22\x37\x37\x17\x39\x39\x39\x88\x8c\x8c\x04\x09\x03\xbf\xbf\ +\x76\xed\x1a\x2a\x2a\x2a\x44\xd8\x47\x46\x46\x30\x3c\x3c\x8c\x67\ +\xcf\x9e\x09\xb1\x4f\x9f\x3e\xc5\xe0\xe0\x20\x06\x06\x06\x50\x50\ +\x50\x80\x86\x86\x06\x78\x78\x78\x4c\x6e\xda\xb4\xc9\x69\xce\x76\ +\x6d\x63\x63\xb3\x2b\x2c\x2c\x4c\x84\xba\xa3\xa3\x03\xf7\xee\xdd\ +\x13\xbf\x72\xb9\x5c\x08\xb8\x7c\xf9\xb2\xf8\xef\xd5\xab\x57\x18\ +\x1f\x1f\xc7\xd8\xd8\x18\x46\x47\x47\x3f\x49\xde\xdd\xdd\x8d\xca\ +\xca\x4a\x11\xb9\xb6\xb6\x36\x1c\x38\x70\x60\x88\xa8\xbe\x99\x75\ +\x95\x1c\x39\x72\x24\x4f\x26\x93\x89\xd0\xa9\x8a\x60\x43\x26\xe2\ +\xfc\x96\x95\x95\x7d\x92\x9c\xc5\x36\x36\x36\x8a\xd0\x73\x0d\x30\ +\x79\x6b\x6b\xab\x28\x54\xf6\x1b\x14\x14\x04\x13\x13\x93\xbc\x59\ +\x7b\x05\x55\x6d\x0d\xab\x56\xe6\x4f\x55\x04\x3b\x61\x42\xbe\xe7\ +\x9c\x2a\xc9\x79\xb6\xf7\xef\xdf\x17\xa9\xe0\xda\x60\x81\x2d\x2d\ +\x2d\x82\xf0\xc9\x93\x27\x78\xfc\xf8\x31\x1e\x3d\x7a\x24\x8a\xb4\ +\xa6\xa6\x06\xc1\xc1\xc1\xa0\x5a\xe8\x20\xba\xef\x67\xa4\x82\xc2\ +\x53\xdb\xd9\xd9\x89\xb9\x44\xb4\xb7\xb7\x8b\x99\x73\xf1\x71\x11\ +\x4a\xa5\x52\x14\x17\x17\x8b\x77\x4c\xa6\x0c\x3b\x93\xb2\x60\x26\ +\xe4\x48\x30\x6e\xde\xbc\x29\x0a\xd4\xdd\xdd\x1d\x5b\xb7\x6e\x95\ +\x11\xdd\xef\x04\x9d\x0f\x04\xec\xdf\xbf\xbf\x96\x0a\x50\x38\x9d\ +\x4b\x04\x3f\xf3\xcc\xf9\x9d\x6a\xce\x95\x4b\x94\x0b\x8e\x57\x06\ +\xd7\x4c\x76\x76\xb6\x28\x64\x3f\x3f\x3f\x38\x39\x39\xe1\xd8\xb1\ +\x63\xf0\xf6\xf6\xe6\x14\xb0\x00\xfb\x19\x02\xa8\x69\x14\x14\x15\ +\x15\x21\x26\x26\x06\xce\xce\xce\x48\x49\x49\x11\x8e\x55\x45\x70\ +\x1d\x30\x31\xcf\x92\x43\xcd\x62\xd3\xd2\xd2\x70\xfd\xfa\x75\xb1\ +\x62\x92\x93\x93\x71\xfe\xfc\x79\xae\x78\xb8\xba\xba\x82\x7a\x09\ +\x32\x33\x33\xe1\x1b\xef\x0c\xef\xaa\xc3\x42\x84\xb1\xb1\xf1\xec\ +\x02\xf6\xed\xdb\x17\x74\xf7\xee\x5d\x51\x64\xfd\xfd\xfd\x48\x4f\ +\x4f\x87\x97\x97\x97\x58\x7a\x4c\xa6\x14\xc1\xa1\x8f\x8f\x8f\x17\ +\x4d\x86\x09\x79\x75\x04\x04\x04\x88\xf0\x32\x31\x17\x1a\x0b\xe2\ +\x34\x95\x97\x97\x8b\x94\xf9\x25\xba\xc2\x2b\xe7\x57\xee\x07\xd8\ +\xbc\x79\xf3\xec\x02\xf6\xee\xdd\x2b\x61\xa2\x37\x6f\xde\x08\x11\ +\x1c\x6a\x9e\x29\x3b\x63\x21\x11\x11\x11\x22\xaf\x1c\x62\x9e\xe5\ +\xb9\x73\xe7\x44\xa4\x98\x98\x9f\x79\x1c\x8b\xe3\x9c\xab\x92\xb3\ +\x0d\xe7\x9f\x7b\x01\x17\xa1\x91\x91\xd1\xec\x02\xa8\x7f\x4b\x78\ +\xc9\x4d\x4f\x4f\x7f\x20\x82\xf3\xcc\x35\xc1\x85\xe4\xe9\xe9\x89\ +\xe3\xc7\x8f\xc3\xc7\xc7\x47\x84\x97\xa3\xa0\xcc\xb9\x2a\x39\xa7\ +\x92\xdf\x5d\xb8\x70\x01\x54\x5b\x5c\xf9\xe2\xff\x33\x67\xce\xd0\ +\x8e\x69\x38\xbb\x80\x9d\x3b\x77\x4a\x58\xe9\xbb\x77\xef\xe6\x14\ +\xc1\xc5\xc7\x4d\x45\x99\xf3\x8f\xc9\xb9\x7e\x02\x03\x03\x85\x50\ +\xda\x15\xdf\xb7\x68\x1e\xcf\x4d\xce\xcd\xcd\x0d\xa6\xa6\xa6\x7d\ +\x44\xe7\x34\x43\xc0\x86\x0d\x1b\xf4\x69\x89\x64\x50\x3f\x78\xcb\ +\x61\x9b\x4b\x04\x13\xa9\x92\x73\x24\x4e\x9d\x3a\x05\x6a\x64\xa0\ +\x7d\x04\x2e\x2e\x2e\x1f\x90\x73\x0b\xe7\x0d\x8b\x6d\x79\x53\xa3\ +\x31\xc3\x44\xe7\x46\xd0\x9d\x71\x10\xe5\x7d\x5c\x57\x57\xd7\x63\ +\xcb\x96\x2d\x72\x76\xca\x45\xf7\xb1\x88\xd2\xd2\xd2\xf7\xe4\x1c\ +\x0d\xda\xe9\x60\x6d\x6d\x3d\x2b\x39\x37\x2d\xb6\xe1\xab\xa9\xa9\ +\x09\x27\x4f\x9e\x1c\x25\xff\x7c\x68\xf1\x98\xeb\xe8\x36\x5f\xa1\ +\xcc\x7c\xcd\x9a\x35\xd1\x66\x66\x66\x23\xfe\xfe\xfe\xc2\x89\x52\ +\x04\x77\x3d\x65\xd8\xb3\xb3\xcb\x20\x91\x64\x51\x04\x7c\xde\x93\ +\xf3\xe6\xc5\xdd\xf1\xe5\xcb\x97\xc2\x26\x35\x35\x15\x94\xde\xc1\ +\xa5\x4b\x97\xd6\x92\xdf\x54\xc2\x59\xc5\x7e\xb0\xe8\x93\xe7\x41\ +\xc2\x6a\xc2\x9e\x75\xeb\xd6\x95\xec\xda\xb5\x6b\x8a\x77\x40\x76\ +\x78\xeb\xd6\x2d\xb1\x13\xf2\x0a\xb0\xb2\xb2\xa6\xa2\xf4\xc3\xc5\ +\x8b\xd5\xb4\x4a\x8a\xa9\x5b\x76\x89\xd9\x72\xb8\x49\xcc\x34\x45\ +\xb2\x6f\xf1\xe2\xc5\x95\xe4\xe7\x2a\xc1\x95\xf0\xb5\xc2\xef\x22\ +\x75\xcf\x25\x3c\xd0\x40\x5b\x5b\xdb\x71\xfd\xfa\xf5\x6d\x56\x56\ +\x56\xa0\x2d\x1b\xdb\xb6\x6d\x03\x3d\x0f\xae\x5a\xb5\xaa\x59\x47\ +\x47\xa7\xd2\xc4\xc4\x7c\x88\x85\xa4\xa6\xe6\xc2\xc1\xc1\x61\x42\ +\x4f\x4f\x4f\xa6\xa5\xa5\x55\x40\xb6\x7f\x12\x4e\x28\xce\x89\x2b\ +\xfe\xcf\x59\x91\x2b\xd6\x68\xf9\xf2\xe5\x81\xfa\xfa\xfa\x8d\x0b\ +\x16\x2c\x28\xa2\xe7\x44\x82\x3b\xe1\x07\x8e\xd4\xca\x95\x2b\xe3\ +\x56\xaf\x5e\xdd\x40\xf7\x59\x84\x70\xc5\x37\x82\xa1\x22\xa5\x0b\ +\x35\xf2\xb5\xa4\x98\x05\x87\xf1\x20\x0b\x22\x2c\x53\x9c\x72\xb4\ +\x14\x9f\x65\xdf\x12\x7e\x54\x1c\x4a\x97\xa8\xf3\xc5\xfc\x0f\xd1\ +\xc2\x47\xb4\x63\xf2\xc9\xfc\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ +\x42\x60\x82\ +\x00\x00\x03\xd1\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x03\x63\x49\x44\x41\x54\x58\xc3\xc5\ +\x97\xcd\x6f\x1b\x55\x14\xc5\x7f\x77\x66\x92\x89\xd3\x7c\xd4\xad\ +\x17\x09\x20\xd2\x4d\x55\x51\x10\x08\x51\x84\xca\x0a\x09\xd8\x20\ +\xc4\xa2\x52\x17\x2c\x2a\x24\x28\x6b\x36\x2c\x90\xfa\x1f\xc0\x82\ +\x0d\xa8\x3b\x04\x2c\xd8\x82\x10\xaa\xda\x45\x05\x64\x07\x08\x04\ +\xa1\x34\x40\x85\x11\x6e\x21\xb5\x13\x9c\xe6\xc3\xb5\xd3\x79\xef\ +\x5d\x16\xf3\xec\x8c\x9d\xc4\xa6\xf5\x54\x1d\xe9\x4a\x1e\x69\x3c\ +\xe7\xdc\x73\xce\xbb\xef\x8d\xa8\x2a\xf7\xf2\x0a\xb8\xc7\x57\xf4\ +\x7f\x1e\x7a\xff\x35\x79\xf2\xe6\x16\x91\x55\xa4\x30\xca\x13\xc6\ +\x12\xaa\x22\x00\x51\xc0\x4c\x18\x30\xeb\x94\xc0\x3a\x1a\xd5\x35\ +\x3e\x7b\xfb\x73\xe6\x81\xa6\xaa\xba\x41\xef\x96\x41\x16\x9c\x7d\ +\x5d\xce\x3c\xf8\xc8\x0b\xaf\x3a\xa7\xa1\xaa\x06\x0f\x1c\x7d\x76\ +\xdc\x39\x15\x54\x05\x60\xaa\x34\x17\x8d\x17\xef\x1f\x09\xc2\x82\ +\x98\xad\x86\x7e\xf1\xde\x89\xea\x77\x8b\xff\xbe\xfb\xe1\x57\x7c\ +\x02\xd4\x55\xd5\xf6\x05\x50\xd5\xbe\x75\xf6\x34\x3f\xaa\xaa\xaa\ +\x3a\x5f\xb6\xab\x9c\x5a\x6d\xb5\x6e\x6a\xb5\xba\xa4\xc6\x18\xbd\ +\xb2\xf0\x75\xf2\xe6\x8b\x7c\xfb\xfc\xa3\xbc\x02\x14\xdb\x4d\xee\ +\x55\x03\x33\xe0\x94\x10\x2c\x60\x7c\x39\xd2\xfb\xb4\x04\x8b\x31\ +\xb7\x58\x5e\xae\x11\x86\x21\x87\x1e\x7a\x3a\x3a\xf9\xc6\x07\x8f\ +\x1d\x9e\xe1\xe5\x97\x8e\xf1\x1c\x30\x21\x22\x72\xc7\x21\x4c\xbd\ +\xd6\x2e\xd0\xb4\x1c\xe0\x50\x2c\xaa\x09\xcd\x66\x23\x0d\x55\x14\ +\xf1\xf0\xf1\x93\xa3\xa7\xdf\xfa\xf8\x99\xb9\x12\xa7\x80\x43\x40\ +\x61\xc8\x55\x90\x02\x81\x45\x31\x9e\x40\x02\x18\xc4\x93\xc9\xe6\ +\x6d\xdf\xbe\x09\x8e\x3c\x75\x22\x2e\x4d\x72\x1c\x38\x0a\x4c\x0e\ +\xb5\x0a\x14\x87\x60\xd2\xd4\x6e\xe7\x97\x54\x19\x08\x02\xc5\x98\ +\x16\x17\x2f\x5e\x60\x6d\x6d\x83\x20\x80\xfd\xfb\x8b\x68\x54\x8c\ +\x61\x75\x0e\x98\x00\xaa\x77\xac\x80\x64\x2c\xd0\x4e\x1e\x12\xda\ +\xd9\x18\x1d\x15\x66\x66\x0f\xd2\x6c\xd6\xd9\xdc\xac\x61\xcc\x26\ +\x85\xc2\x08\xad\xe6\x2a\x5e\xfe\x68\x48\x05\xac\x57\x40\x3b\x7d\ +\x4b\x46\x85\x20\x54\xee\x9b\x2d\x31\x35\xf9\x38\xc6\x18\xa2\x28\ +\x22\x8e\x0f\x70\x7e\x04\xcd\x65\x10\x09\xce\x77\x4c\xc6\x06\x45\ +\x11\x04\x25\x10\x21\x8e\x85\x38\xce\x5a\x3d\x46\x18\x74\xa4\xd3\ +\x1c\x32\x90\xf8\xb7\xa4\xa0\xda\x87\x6e\x4a\xce\xe5\x37\x8a\xdb\ +\x5e\xb7\x3b\x6f\x83\x48\x4f\x2c\xb7\x1b\x15\xff\x9f\x9c\x08\x08\ +\x0e\xcd\x58\xd0\x26\xa1\x3b\xd6\xc3\x36\x1d\xc9\x57\x81\xd4\x82\ +\xfe\x24\x7b\xe9\xe5\x48\x40\xfd\xe0\x91\x2e\x03\xba\x41\xe9\x49\ +\x9a\xe6\x69\x41\x56\x01\xd9\xa5\x63\x7a\x08\xe5\xae\x40\x9a\x01\ +\xd3\xe9\x51\x76\x89\x1c\x3e\x96\xd2\x09\xa7\xcd\xdf\x82\xde\x5e\ +\xa5\x13\xc6\x14\x7a\xfb\x79\xbd\x1b\x0a\x24\x3b\xe4\xee\xf6\x5c\ +\xbb\x16\x67\xce\x0a\xec\x9c\x84\xba\xeb\x73\xd9\xdd\x43\xf3\x1f\ +\x44\x83\x62\xd7\xfd\xfb\x2e\x0c\xa2\xac\xf3\xfd\x94\x68\x0f\xec\ +\x5c\x97\x61\xba\x15\x0f\x3a\xe1\xc7\xc0\x38\x50\x64\x6d\x25\x70\ +\x1b\x4d\x5a\xb9\x6d\x46\x3b\x2d\x80\xf4\x48\x39\x86\x30\x8d\x52\ +\xa4\x56\x59\xb1\x95\xc5\xcb\xf6\xa7\x2f\x3f\x4a\xae\x2c\xfe\xd0\ +\xb8\x74\x95\x3f\x80\x55\x60\x6b\x48\x05\xd4\x1f\x40\x15\x25\x04\ +\x0a\x08\x53\x28\x07\xa8\x55\x56\xed\xc2\xfc\xb9\xe4\xd7\x6f\x3e\ +\x35\xe5\x72\x79\xfd\xef\x3a\xcb\xdf\xff\xc9\x6f\xe5\x2a\x65\xe0\ +\x1a\x70\x19\x58\x1f\x32\x03\xa0\x8c\xa1\x4c\x03\x07\x3d\xe8\x85\ +\x0e\xe8\x2f\xd7\xa8\x5c\xaa\xf0\xfb\xd2\x0d\xfe\x02\x6a\xc0\x12\ +\xf0\x8f\x3f\x86\xd5\x81\xcd\x21\x15\x38\x42\xad\xb2\x6c\x17\xe6\ +\xcf\xef\x05\x7a\x1d\xb8\xea\x41\xeb\xc0\x86\x07\xdd\xd2\x01\x5f\ +\x3e\x03\x09\xac\x37\x39\xf7\xce\xa9\xc2\xf4\xf5\x1b\xd8\x9f\x2b\ +\x2c\xed\x01\xba\xe2\x65\x6e\x00\x89\xde\xc6\x17\xef\xc0\x4f\x33\ +\x11\x29\x01\xc7\x80\xc3\xc0\x2d\x0f\x38\x14\xe8\xed\x12\x18\x01\ +\xa6\xfd\xd1\xda\x7a\x69\x87\x02\xcd\x5e\xff\x01\xf9\x68\x10\x8e\ +\x11\x57\x76\x24\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\ +\x00\x00\x07\x66\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x07\x2d\x49\x44\x41\x54\x78\x5e\xb5\x56\x5d\x6f\x1c\x57\ +\x19\x7e\xce\xc7\x7c\xec\x97\xd7\x6e\x9c\x38\xc6\x89\x03\x49\x9a\ +\x26\x4d\x21\xaa\x08\x95\xb8\x40\xca\x25\x08\x89\xfb\x8a\x2b\xee\ +\xb8\x41\x48\x48\x20\x21\x21\x04\x37\x5c\xf1\x03\xb8\x00\xa9\x70\ +\x83\xa2\x0a\x51\x22\x01\x37\x20\x15\xd1\xa0\xe6\xb3\xad\x53\x2b\ +\x49\x9b\xa4\xb1\xe3\x8f\xb5\xbd\x3b\x9b\x59\xef\xcc\xce\xce\xcc\ +\x39\x87\xf3\x1e\x2d\x2b\xd3\x3a\xf5\x02\xe2\x58\x8f\xde\x39\xc7\ +\x1a\x3f\xcf\xfb\xbc\xef\x79\xc7\xcc\x18\x83\xff\x75\x5d\xbc\xf8\ +\x6d\x0e\x20\x54\xaa\xa8\x68\x5d\xd6\x19\xe3\x14\xa7\x74\xa9\xea\ +\x5a\x95\x15\xad\xf4\x94\x31\x68\x7a\x15\xb9\xba\xbc\x7c\xf9\x4d\ +\x00\x99\xe5\xd5\x00\x20\xf7\x12\x5c\xf8\xc2\xb7\xbe\x94\xa5\x83\ +\x53\x40\x59\x63\xe0\x75\x3f\x0c\x6b\x42\x7a\x55\x18\x56\x07\x50\ +\x63\x8c\xd5\x00\xd4\xc1\x10\x5a\xd0\x59\x08\x98\x0a\x98\x0e\xb5\ +\x31\x81\x86\xf6\x34\x2b\x3d\x4b\x2a\x99\x27\xc5\xdc\xe9\xe7\xd9\ +\xd9\x17\xcf\xf2\xc6\xcc\x0c\x13\xcd\x19\xf1\x97\x5f\xbd\xf6\x00\ +\xc0\xab\x16\x14\xe3\x4f\x08\x38\x3c\x7f\xf8\x97\x5f\xfc\xca\xcb\ +\x2f\x65\xda\x53\x79\x51\xb0\x3b\x37\xdf\x62\x1f\xdc\x7d\x17\x5e\ +\xe0\x81\x0b\x30\xce\x01\x21\xb8\x83\xe7\x09\x16\x04\x92\x85\xa1\ +\x8f\x8a\x45\xb5\x1a\xda\x18\xa2\x5e\xab\xa2\x56\xab\x60\xee\xe8\ +\x02\x4e\x5f\xf8\x32\xae\x6c\x7f\x16\xed\xf6\x03\xf0\xd6\x32\x94\ +\x2a\xe7\x01\xbc\x62\xd1\xd9\x57\xc0\xc9\x73\xa7\xce\x7f\xe3\x7b\ +\xaf\xf2\xdf\xfd\x63\xc8\x3f\xba\xf9\x16\xe6\x16\x24\x7e\xf8\xdd\ +\x1f\xa1\x54\x40\x18\x04\xf0\x3d\x89\x6a\xa5\x82\x30\x0c\x10\xf8\ +\x9e\xdd\xfb\x90\x52\x40\x08\x01\xce\x18\x98\x05\x18\x20\xa5\xe7\ +\xce\xb3\x5c\xe1\x27\x57\x3b\x78\x78\x7b\x09\xcf\x9b\x77\xe1\xab\ +\x5c\x00\x20\x11\xa1\x05\x3e\x21\x60\x37\xc9\xb3\x37\x6f\x0f\x6b\ +\xbf\xf9\xeb\x0a\x3a\xd7\x96\xf0\xcd\x53\x06\x5f\xff\xea\xd7\xb0\ +\xb1\xbe\x8e\x7e\xd2\x47\x96\x0d\xa1\x94\x42\x59\x14\xc8\x87\x43\ +\x68\xad\x61\x8c\x71\xb1\x2c\xcb\x31\xe8\xcc\x89\x11\x3e\x4e\x1e\ +\x3a\x89\xf5\x13\xaf\xa0\x9a\xe7\x28\x57\xaf\x01\x00\x23\xec\x2b\ +\x80\x5e\x54\xf4\xc7\x94\x71\x2f\x47\x4f\x63\xdc\x78\xfb\x2a\xd6\ +\x36\xb7\x51\x14\x85\x23\xe3\x9c\xec\xa7\x0c\x25\xc1\x65\x4f\x8b\ +\x44\xd0\xa2\xdf\xfb\xbe\x6f\xcb\x50\x43\xb5\xd1\x84\xfc\x40\x21\ +\xac\x56\x21\x94\x40\xb9\x87\x6b\x5f\x01\x24\x5a\x0a\x8e\xc0\x13\ +\x80\x64\x08\xc3\x0a\x16\x17\x17\xc1\xbd\x90\x32\x27\x01\x44\x48\ +\xd9\x8d\x41\xcb\xed\x39\x07\xed\x38\xf5\x87\xf4\x5c\x3f\x88\xa0\ +\x0a\xc9\x13\x04\x82\xc1\xe3\x40\x7e\x90\x00\x80\x41\x70\x06\x5f\ +\x70\x80\x19\xd4\x6d\x16\x73\x9f\x39\x8a\x24\x2b\x9c\xfd\x45\x31\ +\x1c\x59\x6e\xe0\x7e\x94\x86\x36\xe4\x9c\x76\x0e\x39\x94\x05\x54\ +\xa9\xe0\x16\xb7\x42\x2a\x2f\xc2\xf7\x32\x27\x1c\x07\x3a\x60\x41\ +\xdc\xbe\xc7\x20\x7d\x89\xa8\x1b\xe1\xf6\xf5\x9b\xd8\xdc\x89\xc8\ +\xe2\xb1\xbd\x41\x10\x50\x19\xe8\x99\x1a\x93\x1c\xb0\x44\x15\xb2\ +\x9f\x88\xdc\x79\xd5\xda\xee\x59\x07\x7e\xfd\x46\x8c\x40\x0a\x97\ +\x18\xd8\x81\x0e\x18\x48\xce\xe0\x49\x61\x23\x50\xaf\xd7\xf1\xc2\ +\xf9\xcf\x63\xb6\x13\x8d\xad\xfe\xb7\x12\xb8\x37\x00\xce\xc8\xb1\ +\x71\x1c\x97\x85\x1a\x32\x94\x02\xa1\xa7\x21\x05\x3b\xd8\x01\x22\ +\x90\x92\x23\xb0\x90\x8c\x51\x23\x59\xd4\x51\x14\xa5\x43\xa9\x4a\ +\xa8\x51\x97\x13\x40\x11\xb0\x67\x64\x7d\x89\xe1\x30\x47\x59\x94\ +\x50\xda\xf5\x0b\x0c\x97\xa8\x86\xc7\x10\xf8\x8a\x12\x9b\xac\x04\ +\x94\x79\xe8\xb9\x46\x44\xa7\xbd\x83\x7b\xcb\x4b\x68\x77\x7b\x2e\ +\x73\xcf\xf7\xdd\x3c\xa8\x84\x15\x04\x81\x0f\x3f\x08\x21\x3d\x39\ +\xb6\x9e\x40\x37\xc3\x73\x65\xe1\xa0\xf5\xfb\xf5\x6d\x57\x02\x8f\ +\xcc\x39\x48\x00\x29\xf0\x84\x73\xc0\x92\x79\x98\x3d\x64\xa7\xd9\ +\x99\x73\x38\x39\xba\x7e\xd2\x35\xe7\x7e\x99\x18\x17\xb4\x32\xc8\ +\x4a\x20\x4e\x34\xb2\x42\x21\xb7\xfb\x6a\x40\x25\x30\x93\x36\x21\ +\x83\xeb\x01\x01\x54\x67\xe6\x30\x7f\xa6\x09\xe9\x79\x6e\x36\x64\ +\x85\x41\x77\xa0\x90\xe4\x06\x69\xae\xd1\xb7\xb1\x3f\xd4\xd8\xcd\ +\x34\x7a\x43\xe3\x62\x6c\x41\x67\x69\x6e\xa0\x0c\x5c\x89\x3a\x03\ +\x8d\x66\x35\x04\x04\x0e\x16\xc0\x19\x29\x05\x7c\xa1\xec\xf5\x3b\ +\x81\x3b\x9a\xe1\xfb\x57\x76\x30\x5b\x15\x18\x94\x06\x89\x25\x1c\ +\x14\x06\x79\x39\x82\x02\x4a\x63\x50\x8e\x9e\x15\x18\xc0\x38\x04\ +\x97\x60\xe4\x96\x2e\x1d\x6f\x73\x4a\xa0\xa0\xfd\x24\x73\x80\x6a\ +\x15\x70\x86\xe9\xa9\x06\x4a\x0e\xdc\x6f\x15\xb8\x8b\x02\xca\xd0\ +\xb0\x11\x60\x42\x42\xba\x9a\x73\x70\xc9\xc0\x8d\x86\x60\x39\xbc\ +\xb2\x0f\x3d\xe8\x23\xdd\x8d\x30\xe8\x45\x28\x8b\x1c\x53\x47\x4f\ +\x62\xfe\xd8\x09\x54\x7c\x01\x23\x30\xc9\x35\x84\xb3\x3f\xf4\x05\ +\x18\x37\x90\x9e\xef\xb2\x28\xb3\x14\x26\xdd\x45\x96\xc6\xc8\x7a\ +\x16\x49\x17\xc3\x24\x86\xca\xfa\x10\x6a\x80\x9a\xd4\x98\xae\x49\ +\x1c\x6e\x56\x71\xee\xb9\x06\xe6\x4e\x37\x70\xe4\xd0\x34\x9a\x33\ +\x1a\x6f\x74\x7c\xd7\x57\x1e\x4d\xca\xc9\x46\x31\x09\x90\x96\x34\ +\xc6\xfa\x3b\x7f\x42\xda\xfa\x10\x53\x15\x89\x43\x8d\x10\x0b\xd3\ +\x35\xcc\x1f\x6d\x62\x76\xba\x8e\x99\xc6\x09\x1c\x9d\x9d\xc6\x9c\ +\xc5\x73\x53\x75\x54\x2b\x81\x6b\xd4\x52\x29\xa4\x83\x0c\xbb\xfd\ +\x04\xbd\xfe\x10\x8b\x26\xc0\x40\x0b\xe4\x93\xcc\x01\x0e\x27\xc0\ +\x5a\xe6\x63\x3b\x6a\xe1\xe2\x91\x1c\x3f\xfd\xf1\x77\xb0\xb1\xb9\ +\x85\xcd\x8d\x75\xb4\x5a\x2d\x44\xdd\x36\x9a\xd0\x38\x73\xfc\x38\ +\x82\x30\x74\x9f\xe1\x24\xcb\xa9\xeb\xdd\x1c\x31\xc6\x8c\x46\xb2\ +\x86\x61\x40\x3d\x14\xd0\x05\x47\x3a\x89\x00\x8c\x1c\xf0\x03\x09\ +\x66\x4a\x57\x0e\xc6\x04\xee\x7d\xf8\x08\x97\x2f\x5f\xc6\x60\x30\ +\x70\x23\x76\x6a\x6a\x0a\xc7\x4e\x7c\xce\xcd\x81\x4f\x5b\x44\x19\ +\xd0\xb5\x06\x0d\xb6\xfd\x9b\xf0\x63\xa7\xcc\x91\x06\xa3\x41\xc4\ +\x19\x77\x83\x65\x7d\x7d\x9d\xc8\xdd\x97\xf1\xb8\xcd\x9c\xbe\x03\ +\x93\x2e\x9f\x26\xab\xcf\xe0\xfb\xf2\x60\x01\x9c\x8d\x26\xa1\xe4\ +\xee\x45\xce\x01\x03\x43\x84\xf4\xb1\x71\x1f\x19\x21\x04\xed\xc9\ +\xee\xc9\x04\xf8\x1c\x01\x33\x28\xd2\x0e\x98\x19\xdb\xc0\x9e\xe1\ +\x80\x13\xe0\xc8\x7d\xc1\x5d\x7d\x61\xc6\xdf\x89\x71\x8d\xff\x93\ +\x15\x48\xa0\xfb\xf0\x06\x56\x97\xde\x47\xb7\xbb\xb2\x0e\x60\x68\ +\x51\x3e\x53\x80\x10\x80\x27\xb9\x05\x95\xc0\x69\xfd\xaf\x17\xe9\ +\x67\xfd\x16\xee\xfe\xed\x0f\xb8\x7f\xeb\xc1\xf6\xda\xda\x8d\xeb\ +\x00\x56\x2c\x7a\xfb\xdf\x02\x3e\x6a\x42\xc9\x20\xe5\xbf\x32\x06\ +\x14\x5d\xad\x34\xa5\x3e\x20\xfb\x69\xff\xa9\x25\x10\x82\xbb\x9a\ +\x6b\x53\x62\xe5\xfa\x9f\x71\xef\xda\x72\x6f\x75\xe5\xd6\xad\xa2\ +\x48\x48\xc0\x7b\x16\xdd\x7d\x05\xc0\x30\x67\x89\x20\x21\x16\x9c\ +\x33\x68\xad\x31\x3b\x3b\x8b\x4b\x97\x2e\x61\x61\x61\x01\xd3\xd3\ +\xd3\x68\x34\x1a\xee\x3f\x63\x29\x85\x8d\x9e\x7b\xe6\x5c\x20\xcf\ +\x4b\x3c\x7d\x9a\x98\x76\xbb\xc7\xda\xed\x18\xbd\xdd\x0c\x77\xaf\ +\x3d\x1a\x3e\x79\x7c\xe7\x4e\x92\x6c\xbd\x0d\xe0\x9a\xc5\x47\x16\ +\xf9\x33\x07\x51\xa3\x0a\xcc\x1f\x06\xe2\xc3\x4d\x84\xba\x81\xbc\ +\xc8\x71\xe1\xc2\x4b\x38\x7f\xfe\x05\x4b\x90\x43\x29\xed\x66\x7f\ +\xb7\x9b\x22\x49\x62\xc4\x71\x86\x28\x4a\xcc\xf6\x76\x57\x6d\x6d\ +\xed\x0c\xdb\xed\xad\x7e\xaf\x17\xc5\x69\xda\xe9\xc6\xf1\x56\x7b\ +\x75\xf5\xe1\xd6\x60\xb0\xfb\x00\x00\x65\x7f\xdf\xa2\x6f\xec\xda\ +\x57\x80\xe7\x4b\x7f\xd0\x4f\x71\xf5\xb7\xaf\x61\x63\xed\x09\xce\ +\xce\x1f\x31\x0f\x1f\x6d\xe3\xf1\x4a\x8b\x45\x51\xdf\x92\x26\x26\ +\x8a\x76\xcb\x4e\x27\xca\xba\xdd\x9d\x7e\x1c\xb7\xe3\x38\xde\x89\ +\xba\xdd\xcd\x76\xbb\xbd\xd1\x4e\xd3\x5e\x44\x04\x16\xb1\x45\x6f\ +\x14\x9f\x5a\xb4\x2c\x36\x69\x3f\x26\xdf\x4f\xc0\xe3\x47\x6b\x1b\ +\x3f\xff\xc1\x2f\x16\xef\xbe\xf7\x7e\x91\x26\x59\xb1\x94\xdf\xcb\ +\xae\xbc\xfe\xf7\x7e\xad\x86\xdd\x7e\x3f\xea\x46\xd1\x46\x7b\x67\ +\x67\x6d\x7b\x38\x1c\x10\xc1\xee\x98\x64\x0c\xb7\x4f\x2c\x32\x8b\ +\xe1\x9e\x98\x5b\xde\xf2\xc0\x49\x78\x6f\xe9\xf6\xcf\x7a\xbd\x27\ +\x2f\xa7\x83\x56\x7d\x30\x88\x22\xad\x4b\x52\xdf\x27\xec\x21\x7c\ +\x3a\x7a\x4e\x1d\xc1\x98\x64\x4c\xa4\x70\xf0\xda\x5f\xc0\xc3\x47\ +\x7f\x7c\x1d\xc0\x3b\x16\xcd\x51\x26\xbd\xbd\x59\x7c\x8c\x48\x4f\ +\xc8\x31\xb9\x80\x11\xe1\xf2\x68\x3e\x14\x23\x22\x83\xff\xe3\xfa\ +\x27\x0a\xd7\x77\xe2\xf8\x4e\x6d\x80\x00\x00\x00\x00\x49\x45\x4e\ +\x44\xae\x42\x60\x82\ +\x00\x00\x06\xe8\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x06\x7a\x49\x44\x41\x54\x58\xc3\xed\ +\x57\x09\x4c\x54\x57\x14\x1d\x6a\xed\xa6\x4d\x69\x69\xb5\x2e\x15\ +\xf7\x1d\xb1\x20\x8a\x0a\x28\x2a\xb2\xa9\x88\xc0\x20\x28\x22\xae\ +\xe0\x30\x08\x6e\x6c\x23\x42\x01\xc5\x71\x41\x76\x71\xa1\x0a\x28\ +\xe2\x5a\xc0\x0a\x5a\x91\x60\xc0\x15\xad\x88\x68\xcd\x18\xd4\xaa\ +\xd4\x5a\xb1\x2e\xe8\x8c\x0a\x9e\x9e\x0f\x3f\x8d\x52\x29\x9a\x9a\ +\x36\x69\x9c\xe4\x64\x32\x33\xff\xdd\x73\xef\x39\xf7\xde\xff\x47\ +\x02\x40\xf2\x5f\x42\xf2\x36\x81\xff\x65\x02\x66\x52\x85\x91\x99\ +\x34\x58\x66\xea\x14\x14\x6f\xea\x18\x98\x66\xea\x18\x90\x3e\xd4\ +\x7e\xc1\xaa\x81\xb6\xde\x93\x25\x12\xc9\xc7\x44\x33\xc9\x9b\x7e\ +\x0d\x9b\x18\xd2\x97\xc4\x11\xc3\x9c\x17\x17\x7b\x2c\xdc\x7c\x39\ +\x60\xf9\xe1\xdb\xa1\xd1\x17\xab\x15\x2b\xae\xa8\x15\xcb\xaf\xa8\ +\x03\xa3\xce\x3c\x90\x29\x76\xdf\x1a\x6c\xe7\x97\x6f\x60\x31\x5d\ +\xc6\x23\x9f\x10\xef\xbe\x01\xe2\xc5\x96\x24\x4d\x99\x34\x37\x59\ +\x15\x91\x50\x76\x37\x3c\x41\x53\x2b\x0f\x07\x26\x2d\x00\xc6\x7a\ +\x02\xa3\xa7\x02\x23\xdd\x00\x6b\x77\xc0\x7d\x1e\x10\x16\x5d\xf9\ +\xc4\xc2\x75\xc9\xb5\xd6\xba\x7a\x52\x1e\xd7\xf9\xc7\xc4\xd3\x17\ +\xa5\x56\x28\x93\xaf\x3e\x0c\x8c\x06\xdc\x02\x49\x24\x03\x4c\xa6\ +\x01\x86\x93\x01\x3d\x29\xd0\xdb\x1e\xe8\x66\x4b\x8c\x06\xfa\xd9\ +\x00\xd2\x39\xc0\x82\xf0\x22\x75\xaf\xc1\x13\x72\x18\xc6\xe0\xf5\ +\x89\x9d\x17\xeb\x12\x8a\x49\xbe\xc9\xaa\x95\x1b\x49\xbc\x06\x70\ +\x0d\x02\x2c\xe4\xc0\x50\x56\x6c\x4c\x0c\x64\x12\x83\xbc\x09\x92\ +\xe9\x7b\x00\x3d\x5d\x80\x4e\x63\x00\x5d\x0b\x60\x88\x13\x10\x10\ +\xa5\x7e\x36\xd0\x56\x56\xc9\x70\x4e\xaf\x45\x3e\x7c\x62\x88\xdc\ +\xc6\x23\xaa\x2c\x3c\xbe\xa4\x2a\x3c\x19\x98\xba\x84\x15\xfb\x01\ +\x66\x73\x89\xf9\x94\x5b\x01\xd8\x47\x01\x93\xa9\xc6\xd4\x38\x26\ +\xc6\xf7\x71\xdf\x50\x11\x5f\xa0\xef\x14\xa0\xab\x1d\x60\xe4\x0c\ +\xcc\xa5\x45\xe6\x4e\x01\x77\x19\xd2\xf7\xb5\xaa\x96\x2d\xd9\x71\ +\x35\x26\x5d\x53\xeb\x4d\x92\xf1\x01\xf4\x96\xa4\x23\xfc\x01\x9b\ +\x08\x92\x92\x70\x7e\x3a\xb0\x7c\x2f\xb0\xbe\x10\xd8\x54\x04\x24\ +\xfc\x00\xf8\x6f\xa5\xec\x2b\xa8\x0e\x13\xed\xc3\x5e\x18\xcc\x5e\ +\xf0\x5d\xc6\xe4\xbc\xe3\xab\x19\x5a\xf1\x0a\xe4\x0a\x27\xa1\xea\ +\xc8\xc4\x92\xaa\x88\x75\x24\x0a\x63\xd5\x24\x1d\x45\xbf\x6d\x22\ +\xd9\x6c\x09\xf4\x74\x1b\x10\x7b\x08\xc8\x2a\x03\xb6\x1e\x54\xd5\ +\x84\xc4\xee\x51\x7b\x2c\x88\x7b\x18\xb9\x2e\x4f\xb3\xbd\x84\x92\ +\x67\x50\x09\x5e\x6b\x4c\x6b\x46\xd1\x2a\x45\x2c\xed\x19\x23\xbf\ +\xc7\xf0\x4b\xfe\x1c\x1f\x8e\x86\x31\xbf\xf8\x88\xd0\x7a\x5e\x72\ +\x07\xcf\x98\x0b\xb1\x69\x37\x35\xf3\xe9\xb5\x53\x08\x60\x49\x99\ +\xad\x59\xb1\x34\x06\x90\xb1\x62\xe5\x01\x60\x57\x29\xb0\xad\x40\ +\x55\x33\xc6\x23\xf4\x41\x5f\xd3\x89\x57\x3b\xf4\x1a\x5a\xac\xd3\ +\xae\xfb\x4e\x36\xda\xb1\xb5\xbb\x4a\x34\x89\xf9\xb4\x24\x91\x7d\ +\x12\x54\x1f\x63\x55\x9a\xfa\x99\x91\xb5\xe7\xed\x3a\x05\x04\xf2\ +\xc4\xd4\xb2\xdf\x0d\x2d\x67\x6d\xea\xd2\xdf\x62\xbc\xb8\x28\xb4\ +\x98\x58\xf0\x0c\xff\xd4\x8a\xd8\x2d\x9a\x5a\x2f\x25\xbd\xe5\x41\ +\x2b\xfa\x69\xbf\x0a\xf0\x48\x61\x15\x39\x40\xca\x31\x20\xfb\xf4\ +\x9d\x5a\x59\xe8\x86\x47\x02\xf1\x97\x9d\xf4\xf3\x79\x76\x39\xe1\ +\x45\x8c\x63\x3c\x7f\xdf\xc8\xf4\xdf\x32\x4f\x02\x3e\xa9\x4c\x9a\ +\x71\x7c\xe3\x81\xc8\xa4\x13\x4f\xba\x1b\x8d\x39\xcf\x6b\xfc\x04\ +\x05\x4a\x0b\x8f\x30\xab\x75\xa7\x1f\xe9\x9b\xbb\x65\xe9\x99\xb9\ +\xc8\xb9\xc1\xb6\xf9\x45\xe4\x5c\x57\x6e\x06\xa6\xd1\x6f\x3b\xca\ +\x6e\xcb\x77\x97\x24\x40\x9e\x09\xac\x2c\x00\xf6\x94\x03\x69\xfb\ +\xcb\x9e\x8e\x70\xf6\xbf\xdf\xa1\xb7\x49\x09\x83\xad\x21\x3c\x09\ +\x73\xa2\x33\xf1\x59\xff\x11\xee\x16\x5e\x21\x29\xd7\x77\xfd\x48\ +\x1b\xb6\x53\x31\x5a\x18\x9f\x45\x05\xdd\x42\x1f\x68\xb7\xea\xb8\ +\x9b\xd7\xb8\x08\x0d\x56\x96\xcb\x80\x2b\xf9\xa3\x97\xe2\x94\xda\ +\x78\x9c\xef\x85\xf0\xa4\xeb\x1a\x7f\x7a\xeb\xb6\x94\xcb\x84\x72\ +\xdb\x0b\x5d\xfd\x2d\x83\xb0\xc1\xd6\x1e\x07\xf2\xca\xd5\xcf\x16\ +\x29\xb7\x70\x96\xed\x2b\x3e\x6f\xdf\x63\x5f\x9d\x97\x12\x89\x1d\ +\xd1\xf5\xf9\x55\x6b\xe2\xb0\x68\xda\xb2\x0d\xfb\x7f\xcd\x64\x1f\ +\x84\x91\x58\xf9\x1d\x10\x9e\x74\xf8\x71\x57\x03\x2b\xa1\xfa\x30\ +\xc2\x58\xb0\xe0\xdc\xae\x5c\x60\x4e\x28\x3b\xdb\x07\x70\x5c\x54\ +\x5d\xeb\x42\x52\x07\x62\x1c\xbb\x55\x4a\xc9\x66\x6d\x01\x42\xe9\ +\x75\x2a\x2b\xc9\x2d\xbb\x53\x3b\x51\xae\xac\xee\xd4\x6f\x44\x29\ +\x03\xc4\x10\x33\x89\x21\x44\xeb\x86\xab\x55\xb8\x17\x64\x1c\xbc\ +\x58\x9d\xce\xa4\xe3\x38\x11\x69\x07\xef\xd4\x9a\x3b\xf9\xdf\x6f\ +\xa1\xdd\x3a\x93\x3f\xbb\x12\x6d\xeb\x12\xd8\xb9\x9f\xbe\x72\xa6\ +\x4d\xbc\x00\x53\x8e\x8b\x55\x58\x7d\xd5\x93\xd6\x03\x9e\x94\x6e\ +\x29\x3b\x3c\x93\x92\xe7\x9c\xba\x51\x23\x4a\x7e\x92\x87\x95\x84\ +\x83\x58\x75\x0b\xe2\x9d\x86\xf7\x06\xa9\x3c\xe6\x42\xf1\x65\x36\ +\x28\x7b\x60\xe7\x51\xf5\x33\x47\x2f\x65\xb5\x78\x36\x98\x30\x24\ +\x3e\xa8\x4b\x60\x0f\x09\x66\x2b\xeb\x67\x7a\x24\x95\xb0\x67\x87\ +\x4f\xa1\xff\x3e\x94\x2c\x92\x33\x9d\x41\xf2\xb5\x59\x27\x9e\x8c\ +\x24\x79\xbb\x6e\x03\x8f\xf0\x60\x24\x31\x96\x68\xdf\xd8\x0d\x45\ +\x68\xee\xf4\xbc\xb2\xbb\x85\x2a\x20\xff\x02\x30\x2f\x72\x8b\x5a\ +\x54\x4d\x48\xdc\x96\xf8\xa2\x6e\xe2\x84\x04\x72\x8a\xd9\x9d\xdc\ +\x6c\x76\x4c\xc2\x81\x92\x4f\xe5\x78\x79\xd3\xb3\x10\xf6\x46\xf2\ +\x19\x56\x70\xec\x46\x0d\x1b\xb4\x52\xbb\x95\x6e\x8e\xb8\x3c\xac\ +\x88\x36\x8d\x91\x0b\xbb\xc3\xc3\x3f\x59\x55\xfe\x0b\x70\xfa\x2a\ +\xf7\xc4\xd2\xad\x8f\x44\xdf\x57\x13\x13\x5e\x48\x5c\x48\x20\xef\ +\x14\xc7\x8a\xdd\xed\xbe\x11\x98\xc1\xa5\x31\x97\xcd\x16\x4c\x55\ +\xa2\x38\x66\x6b\x0a\xea\xc9\xdb\x77\x1f\x54\xc8\xcb\x17\x0a\xd6\ +\x8a\xd9\xbf\xbc\x72\xa7\x20\x1d\x26\xb0\xf3\x50\xe9\x4d\x4d\x79\ +\x25\xc9\xa3\xb6\x3e\x14\xc9\x85\x7e\x11\xee\x80\xba\x2f\x9c\x15\ +\x12\x28\xa2\x44\x71\x5c\x16\x41\x9c\xed\xc5\x6c\xb6\x65\x5c\xa3\ +\xd1\xec\xdc\xb5\xdc\x6c\x99\x97\xb8\x52\xb3\x4e\x3e\xee\x3d\x64\ +\xc2\x51\x9d\xb6\xdd\x3c\xc5\xec\x1b\x7d\xa0\x60\xbc\x39\x71\x19\ +\x45\xb7\x4a\x2a\x34\xb5\xce\xb2\x15\xf7\xba\x19\x5a\x97\x8b\x23\ +\xea\x4c\x74\x24\x9a\x37\x3c\x70\xee\xec\xcf\xc0\xc1\x9f\x48\x56\ +\x5a\xdf\x6c\x7b\xe8\x5b\x76\x05\xb0\x8f\xf2\x15\xdc\x00\xce\x56\ +\x01\xeb\x76\x17\xa9\xfb\x98\x48\x77\xf0\x48\x1f\xe2\xfd\x46\x1e\ +\x4a\xec\x42\x13\xf7\x5e\xcb\x3f\x7d\x53\x33\x76\x7a\xc4\xed\xce\ +\xfa\xa3\x84\xfd\xb0\x52\xbc\xeb\xfd\x95\x5c\x9c\xd5\x8c\xec\xa2\ +\xcb\x9a\xec\xe2\x4b\x4f\xb3\x8a\x54\x35\xd9\x47\x55\x35\x39\xc4\ +\xde\x63\xc4\x71\x55\xcd\xf7\x44\xee\x09\x01\x97\x9e\xba\xfa\xae\ +\xae\x6a\xa5\xab\xe7\x23\xfa\xaf\xd5\xe0\xf9\xa0\x87\x47\xc0\xfa\ +\x8b\xab\xd3\x0a\xab\x0c\x2d\x67\x9e\xfb\xaa\xe7\xe0\x03\xfc\x3a\ +\x82\xb0\x17\x65\x6f\xfe\x52\xc9\x0c\x46\xcf\x70\x19\x60\x35\xbb\ +\xa0\xdf\xf0\xc9\xe7\xf5\xcc\x5c\x2f\x35\x8a\x61\xae\xaa\x36\x5d\ +\x0c\x72\xc4\xb9\xef\xf2\x12\x1b\x9a\x75\x37\xb2\x35\xef\x3d\xd4\ +\x71\xe3\x87\x2d\x3f\x8d\xe2\x67\x39\x31\x92\x68\xd7\xd4\xa3\x97\ +\xb0\xb9\x06\x88\x8b\x61\x76\x13\x70\x13\x44\x13\x1f\xa5\xb4\x1a\ +\xc4\x11\x3e\x6b\x13\x5f\x0b\xf7\x31\xd1\x2a\xed\x57\x79\xee\x6b\ +\x26\x26\xd1\x46\x6c\xb0\xbf\x43\x9b\x26\x9e\x6a\xb5\xea\x96\x8b\ +\x44\xd2\x92\x78\xef\x25\x49\xfe\xfb\xaf\xb7\xff\x8c\xde\x26\xd0\ +\x14\xfe\x00\xc6\x8f\x6d\x5f\x51\xaa\x96\x24\x00\x00\x00\x00\x49\ +\x45\x4e\x44\xae\x42\x60\x82\ +" + +qt_resource_name = b"\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x09\ +\x00\x57\xb8\x67\ +\x00\x70\ +\x00\x72\x00\x69\x00\x6e\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x07\ +\x04\xca\x57\xa7\ +\x00\x6e\ +\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x08\xc8\x58\x67\ +\x00\x73\ +\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x04\xb2\x58\xc7\ +\x00\x75\ +\x00\x6e\x00\x64\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x02\ +\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\x54\x00\x00\x00\x00\x00\x01\x00\x00\x12\x07\ +\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x06\xc8\ +\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x9d\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/mainwindows/dockwidgets/images/new.png b/examples/widgets/mainwindows/dockwidgets/images/new.png new file mode 100644 index 0000000000000000000000000000000000000000..dd795cfffc5c1ce273b3afedb5ed01da3fc5668c GIT binary patch literal 977 zcmV;?11|iDP)bWCsWYp)^2+5pE&16P)J5wbOa;T^94~jGe@$^;8|{N*-xE=iGD7yYG#t zD);gVxW`xYe;#`OHF@&p7Liq?Fv=6g5~?BqQNT@!pB*cZ>hN`{7r7 z0@PL2_61PYzIFCAKdP##I$yS{oLX(QZfdoPWw^&}T5r!d$9(p=D`Njv29iHLkmyYoqFd-sx$01C;)-KSr9NW?hA@p%q*ht6 zmBq{Ur!PNBt}Oo0xOA02fK^~?NCng%Kounf3J6mu2dGt6?ZW)I`_c{m0&2h#@Q*)+)q%|+6*xkz zvTPUT&+i3#9k}X2>%fKw-O>SHJ_8A?H#zstslxR28`z&KEbRfh;$?0CiQdK+@4!zp z5h(%3fWyEo4>%O)?GhLPrv1^{dTECO&0hZj`DhT15m$C300000NkvXXu0mjfIXk#o literal 0 HcmV?d00001 diff --git a/examples/widgets/mainwindows/dockwidgets/images/print.png b/examples/widgets/mainwindows/dockwidgets/images/print.png new file mode 100644 index 0000000000000000000000000000000000000000..2afb769ee23189efd927255c5f01da54588f17a0 GIT binary patch literal 1732 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 literal 0 HcmV?d00001 diff --git a/examples/widgets/mainwindows/dockwidgets/images/undo.png b/examples/widgets/mainwindows/dockwidgets/images/undo.png new file mode 100644 index 0000000000000000000000000000000000000000..eee23d24a3128303b6096d80582ffa3fef7af7fb GIT binary patch literal 1768 zcmVP)v;?WRp>X|*mD_Z_hyiV7$yvZ;u`ASfcP;4lboY$HMe#c@G)aiIz*;#$B8 zT9IJD6|IP9%^1|G)LOAF=!^=Uo)15bQYo66HffyXWHK}V-E;3b_ul_U0zmR#Lh?3& z|78MZQiYM3G+1Wp6clgj7?@`27?3{He!;4Nw%(H^63NFzGs&BN4VxI!m&6gnoEH~+ zEZlrKVEN(Oq0tws6)Uc&70a)v1EbD7kSTWG8f@p6Z(uQ9#v`8)@4f-z#g-&ZnKU<9 z6_HSOH#|X8D-Q=IEda)P0;8t_Bi#UNcffrf5Efne#KLvSwbr_NQXbd&$HdbYrB*1D zuRaWn2HXNkBm+#Q0fv(SJt@%J9_VIEj0XDI0Ma?Yg76}BufY>?7{=iBiJceg5{gN_ z$*PqbNxTMd4FW9Wz))6fOblcagS-in>3aY@U4Tww09^}Uh!YSHrG7ThR#wSyPOn8i zd}4^)#v`gMJieqVJQrImJ0rZxnBm4oI2$GU;embyxFR;E4*i-~0`~diG zrR*!H4ioLeUKq??@Lk5_yyL4GTJZ|x3MZlJ$i$MWh;<|iW7Q-bMZaw#*=z~)bQ=(R z2*@e}wjNZ~gv9Pqdn|~17`ZM_v%Q3pXHW@VYfNiK(JDnO?HMD#$M8%393PH`F~9hT z(0X2S2hW%bv1vCo^Xauy2w+K>ty!@&29U90y{!Rhs&lk+tXTIt2vs#MH9i4J~JF>eAn0ytpW|m{{-( z|I~`uEt*;{CB5ZAEBa}_3h+o_6*)l4F(CW&omyGwhDQSNm!0(Ud3HJBMT}!Sf8WUT z-!e}EKB-KaaeU)}$fOfbx*Lr-&ujby1xgE#FspT^AL*OBW$Br@$hpC``921>Hg)Xt(OPo7cDq4OW)RfGhc~*bt)^#ExS`YQLe1+ z)Ne#71H=$Bi6KPmhO1S$7i1i~Se?$K<2Vs%2k+FHJNe&lq1`%@Kf4lb>k`t}i-m9S@rPoe)llq`}nok8-oStp*1Bze1T1CQ`v zBr%p~-`EXBXzuj9vb%*UApZg|FLH}oR82_SmiVG>;)DcpirJmqY<5h-fs#+_r%hzk3`>B6BAxYTu31A z6vv9)?Ym%@#~mqBv%23hK$*cOO*9%NGjPirK%sa;G32Cb08R=}k>}CCQ_< zJ`~A?ei80~x-Xm+5-6fXaaJ-8{wY z8-1W)yg6|hMYl>SG_}sM75BOsT9=C>>P&Pbnm0Uf?(EON!JkN0THkDY=v#ILu#fT; z+yKs20qb@bsr#5nckoCb;{8S*O6)=t_g>3CeN!`bdc^I{`lE#Xuu{D1{gqst)r{<- z%bM)sOHZ?kR5jU0RW&)p-ebgZRn7NA?g;^xp1S(3u4<*L=Og;B)!_M{heyEri>uQL zs|+n?p8Klj-~;?Rg0L55Z~jur3`Wmz8DKTLpx^Mx=k?57FExr`uBtX&406P|@A48G znsqm_HSaytapQ+AKaJvNIWdxG*VLnzu(<|^i(z&Xa1%rmAEmS!#1TGg6JHDWG0`gR zS9$JhCMMBFY_PvWn(hEjNT^D6#f9lk8NL3s+J@G0000< KMNUMnLSTY!`bcR2 literal 0 HcmV?d00001 diff --git a/examples/widgets/mainwindows/mdi/images/copy.png b/examples/widgets/mainwindows/mdi/images/copy.png new file mode 100644 index 0000000000000000000000000000000000000000..2aeb28288f58ddffdd1d75115f170c5bf2773814 GIT binary patch literal 1338 zcmV-A1;zS_P)3P|jKV4ArrNQZsr&q&3Fam_48Lh`MiYI|sB6GiaYuZZ? zasnKC=d9Ws*vOa?K!llv;~9}LDH=;*C6q)snnH7j#=aB8{{oN_lX)cZ$XJrkAB0_u z!sQ7f5=*1>!|zQrby)$h>)1Bcke)jH%(>@ZE)hRgo<&7f4Jw)5udTzKv5Ch3thOcm zx#)*$6jZ zxjE=2CQwjNfFaFqeBMc>`320FTpYmRPeJsB@I$Z8%>Zil0#HL{*yW1HLMx&9BQ>hew>g`42C!b-4K{%G& zPNKpdi`TSeSQ5jt zz}D6l-wA<00HP?u@AqSEZ4IXsmC*dI=c&nj!3&r@K%3kE+d(!rH~Ds?RumQ0==)XR zsU3kw0Ovao0D#OTfFv_dBoZhqui^lIxB!co0iZTo)dw&I|ClF}JUvZG$*D>XptrLF zi9N;m7cj8^d~x*v0Ho^4m=ue}P^PGYdPu;S8Mtc&=A4=P=T~F|kkV6X0*FSV+&mNt zp}4dH*9HaLW{2dU0UTt+1SmUX21q@ea}t@;xj-PrWmUM?EueooW3GLWY2c%FnE?J> zJ*6hCuC8*3w@NB-xmUnF8@PU+0q)ELXD;m%K&qWYi;j}haZKLWGrnrG9>`fBl6@D%o`^aXzvlAyk=W}Pc`B^ahku5Y4`j}CIOJCBx$u% zLNX5qgK)WA+>l;M=(ES;f!poI@e{8lpM9a6Ogos0nT|fmct-%0O2q-B6)w#;8B$U@ z_bIi*;ou_U#l=Mq_2TiDT=X8flj*JiEiEl>>0qJM(w7a5mzS5}^Z8)2+4y~FX^BG+ z0F4U^3(c|s(4vx3lM#*SPTzP`J2hanT6y)<3jNMtFeLKw^6s-|9N8B@Q&W>$nrBK+ zA`_~b#ukg2H$b09M@J)VZEfEC{CpGp+d-zXy_)|gKy!05p8`rp5L7=^KR-Xu>(*#A zk-EA%=fkvJOdl{E&Bk~~0Hsptb~>HBVoFMHK9sb+zTTOWlOvfHXH#`n0F8}}Zi~f& wfq{WYZEdYHH#b*S)7=30e@0BgL78sX-$OZ87=>`i1ONa407*qoM6N<$g6NH5LI3~& literal 0 HcmV?d00001 diff --git a/examples/widgets/mainwindows/mdi/images/cut.png b/examples/widgets/mainwindows/mdi/images/cut.png new file mode 100644 index 0000000000000000000000000000000000000000..54638e9386dc8af40dcc9a3ee2f57c62e248e406 GIT binary patch literal 1323 zcmV+`1=RY9P)J0(1!|L=@Q+aTEb7Mu4u}WZlMQB24&|#EVDBq0{%sj+Z+)GGQx0 zAcdU1Fi0-lfEhqCt9ecIzWZ_$Xk-SF1YV<2^ak#QNA=LXgUd}Io1OMRbT7RYGCd%P zKS-r48v%?ldBMA#h)c%T#wHG+5V`$A{>3XcMvM|%P6Cssr>70f(>b}AV>T2D(&VEn zK_HANo+{rrN9){swakg0Ktz^QgDWfxHbzJY6ZK>&doEN10r&$qzrYSODpcQMh*H%o zSOat&76=4-MOF34plx)*)N}VCzH?EPkgku=6VK(8gNL*Np3E)-)CS$Jnai-RudhD8 z(qOgQ?SS}sjv4h}*IqNacG`39XxPWcN1v;!unrFm!4QYC z_Acj^H}`jQVc5OsUVtxVnxKZ?sWw9Q@B`QxpVZH#=NgKbEq?xOmsA>SUtb@%(9v@T zVsaH$PQ-_o)Qm6`=@qvgI2;Z@q}CZRo`stQer>5G8e5my4CXEh^CT4CHjaC}9?{K0 z$O&($1U%8bR;v{dcYhm%^O9V6PFgxKporEb{=Djv}7NhUQZ#8TNvL0_NhN zpdjG!cwn(uKwDk``_Co}Ev8e>XOzzgOoQTEd*;Gmnz9rW3I&M8V#v(QgrcG%P^;C@ z+1bfp?EcBQ$=j!OF1OE1fUdXLDR2(JYL~2dh{}J0;wgy^K9?&YTb2(8W8+7JA12t6 za%7Hg8ovjl(FiTAE%3|0ARIXHz6G;l!311sgoTBKM%*UnGOR4mGqn@!JL9_3Gp~Z> z{(6Z9p5FXo8}~etjeBORPg}}0?N~!YJv1~lfTgz=G8Dzb^Xb54Jd))oo;F?OoGLPS zee{DaT5J+A3>zitarZCFC+`J^U;fkNL<>x4^vOPTl^zTR1GKld!`H@^F|L6LX7M&{ zIA}acIyz>{0a00^F4~fx%15b|k+|p_1^WSy+Zxk*z z((l+8X-U2;oygOcJEspZj3vh3pSpKnaW$YpY_$lC`IPbC@H0!Ad}tF|z0RZAYfnh` z3=gmm{_}^(`7iFdNp1l4dp_;=2p%dvUFBG+@kd(qwpj}i9kWBpkvIuC`Kgv6`dk_f h&$IvkH~dc%_#Nkm8M#Em0nY#c002ovPDHLkV1hsWYZL$g literal 0 HcmV?d00001 diff --git a/examples/widgets/mainwindows/mdi/images/new.png b/examples/widgets/mainwindows/mdi/images/new.png new file mode 100644 index 0000000000000000000000000000000000000000..12131b01008a3ec29ec69f8b3f65c4b3c15b60d6 GIT binary patch literal 852 zcmV-a1FQUrP)IE2xvpcKl890$E8eWxeF8o0mWjmIG{M&7eWO9CVRojsy7@;&dpQ!a9t0J7gPX(5I|>76wd9YM;~Wq>Ghkp6rY@= zsi|pt_x=M#qtRtve?bMn?-1>_C5DBX;{}vm&C%raD|#~il%B<2&`e?uix*V@+JPAL z6CgbQkZR2~6*sGtFK$zbV~w|k*M3m}@OjM5T^_Z^d)w}xJHF(IUAVpO;*`oW;C1B2 zbys585IO4RGepz@rv~8kI;}Y(n3!mCfS7AgQ=I?+DlNG&;!abH5Df(KZTl#;d_@48 zJKJjfX^uQ>h#Iar6M#C8w^So4*Tn<|1^_iEoENLSCA-QKz)fKe6)JLW%zjz|XlmW9 z@suY3Q`{VJZCgNKnyVajp6h`@6-N=kYKbun)^`LT3}hx^wrO>XsHzE2w#B^A1Ngov zV}~hV3>btQ09#E(0CWRWn5~q>9Op*n90161U8$i6fc^Yd5_2;F2sIc&=-PaaDX2~W zTL1&dm}fQw05ax<-uM>_{4Cgt02pUFPqb7NBbWjJ0t`O;#ZxHoL%3#1_iOo5hu6MT z0mxO4x=yW24v?>f-nYV%Jx`{y-lMT`>)O!u6_~SbsQ_#=q-z-e;1PdX7gN*|3t4aE z?!Drr!OKg0ZH#q?HK_Wx9NlHvJdYn4{+`bsH@(TacqVT~0BG|6fti$^=|8_20YcOC e{Jor>rG5iZY$c(Rl?rzN0000RP)CWtKz1rEEwa&Ubd$6s{da=&VIP1;2`BM0`Wb;D z{M-!)vd0-ix#k=pmKgFxQgYk(eOi$0QlJD2NbOI5d5567avIIj< zv@<}9dj`!tE;Q@xs8{wNhf{?zUNu9!u=J3D!C+h_ze{}K1V|htI6?j0>T@UYxhDij zhnKMl|M#(rT!AcZ}eF)wgP_d zAX10jekLr}U#(CrCA<(opAbNs2#S{v>vbjZBPMG2>Dlh2!oC#Mk@9m9Zc z2%^^3CBjkLC=!RpAFqNhVw6pZB#Q!^oqj*T-F(Vw$mLX*nO_ zNX-3DeeTpEomGUYnz~IsN92z9JUkMF)7=lf!HB}*Vw`?29z6pA^e+N~guKQ7E$%u) zC{dC3_66}y+`oN81yr%;K@{IH8|1O-3y*riL6}qGd@SEo}8X#Q_kq zZ|eG3QMpHgF(8Pc07FLLD$kpMaaUZZl&Qk=tr>Kq76&g@g}Kbh`}mD}bLg zSob6#9DIaI(-=7VVTPPm{Z+FbtPVT4Iv?2~9(pg}6TG@z0w%t}gOqRBIG>z~1AjdP zW3QR%ZYsA%*Mp?X$w>b?i;UGgQ?+sSsoXX8X`%zES@sOGBngFV;lVB@d3_10@@V;lg>dY2BN>v^RZ2^?j@k8NdQ$X;_ z_a$H}ZfeJ=gha#~If~qTHdcoJ4Lhqwh-3dbkKgY5JsSA}oWGEOlkpdDqpb%S#7{~T>2A7M zsP8QLl$cN`w?OF*Jo#7bDJpj@!Dj^fwz=d)jlRsXTKwbW85}(HH?VT^u<$rb~rBzaiB|lB=W)A?(%51dO$!?mU^ ze8O#IHd*n50bG}w!BKl4^90wps7K`#)>4RXJ_(`usyx1v$_9j`-;Pq{6K%jV&lNRO%>FPb&x$A5bBEmwG~ zsNAo;tlZJ!2;Bu-bsyf#uSL0b05WG_^}?r@soeJn(y81#_yhC8@e_i|9PXV^3ptdy z4Z_G4qZfz6FCzC2|JrSe-C>#48@AYMyIwNBFNyyFX1QPd5r93<00000NkvXXu0mjf DP*&js literal 0 HcmV?d00001 diff --git a/examples/widgets/mainwindows/mdi/images/paste.png b/examples/widgets/mainwindows/mdi/images/paste.png new file mode 100644 index 0000000000000000000000000000000000000000..c14425cad1ff1b2c5628be5769c9e9e52b78635f GIT binary patch literal 1645 zcmV-z29o)SP)3Gx zefpoBhy8x@pP6$JN-2UQgm?vbp2urQDfM^OC?_DeL%RWJmr}mQV`N#@2O9RfK(_`t z{}ccw{I~7(;$U4wL~hQBiYr&HP+e1vKmedn2xTZiDQ44YUa1!^ytGbiJMka6M}vG@ zLrgqP2loG9i`^_G_)0Q7JWOR}B`e8wT^_)0sjwm&qAGGfr|N;V0|+ezNTCh%UA#yx zm%}d>QA&}|=UH4_q);eO)MK@^wUhx^fcS#;fB^tDLmDAYR7=GY}hKA6kOPAcP zuC561)~X!<6GT-k!gJLz@}5tjD3MBG2|?Jgh=y$Das?8ijz6FOD-BH>0V2R=mW1#7 zc%Dafb+w*QOZ4j1tA~UTD5c(75x}xR0JbfV+O`xp2&58N!i*b_Ou6iP^*huzHW7R; z!Gvcr8OqDc&1OD!?ARu~e-17|ECJBj*{Kd4I;3nN2w4!eEgZ+jLQu5L8XEw|vWPgA zt^#0Lco4wc+#EGEH3lFWjdJA3kD9q>HlpG95}EZ=m1y-ptN)rjt$|Ez*CB`q|1$rgVVB? zrhTuowc{78+xt2VFSK*}&LsW){Unn~lv3vU`0?ZDx~wzj&Yk1v(W4wbe3;(eUJ{9f z1T3Ky+yU+X&gS^%luv8N&-msq-zN6;H<^5HH8r836d;2i zMi$(072p5qZ>Vh8NaE}}Opji}iIlOmc?X+Yw)07OC1VMf&t~%6oz60$?T8IbC+FC= zE6VyM05f|%YwGIi0L*nNl`;TID-fW$T5#c=V<;@j=Em6&k5ZJ9d&7MsWd+;Xe@so= z%X~bXX3}54&3G)#YcF^p0JU^FLZOfeE#2xLjsYt8K48JdxS&uRBOHrUx22Yncy@gS z>8!_S|DTwyyiCjXgSZP}yn>`ylz7@9$3iWtfa7VPmemyj0M^GtgvulQziMM4o~aCT z;opPo+4&R7qYk+;M*}DWVQT;uOChBkB`_)#q+A6+Sfwh=^&|RlY=-e!kMI5ZkKD@C z;6z-a5gX5w6g>yi0i}>q@=$770agVN2uuwG7@cUt@bD?; zK3j0A)Rg|7%OH8oYxFCwW^r%olu$Hy-NXMuhl?5?;8OW$_d zPbP%{KnOr#TKwMNV7j}zJEh->%p}lW?Q_jx?V5KpZV_N`@cndOUtjvnnKP!vrO=Of r0*SSrV$g&__6vQz4|I&^4Jxf00000NkvXXu0mjfT=)$w literal 0 HcmV?d00001 diff --git a/examples/widgets/mainwindows/mdi/images/save.png b/examples/widgets/mainwindows/mdi/images/save.png new file mode 100644 index 0000000000000000000000000000000000000000..daba865fafd22fa18e7c0488eb699b79d3554170 GIT binary patch literal 1187 zcmV;U1YG-xP)5-PJz!8#8DIjU4h)0S{a*K!i>mJVVCD^kQ5IHGsm^=1>z+FI)Tw&v zz2|;5 zYXiKvXAppke-?cB?jC^K0C4>59N#}M1b8m}xWN9m&Tq?d4;^`$3nP}(pC4rW)qR_5 zKt-??KzML0Bg?XF0WdI@VU185d=w)kA`~mw7?IVLbLY;3D!2sF6tWD`ER0DCNfO?7 zI*{j(x1rU7b}No;C~~s;IMxc|ue?cX@%rWftQD*k1h7Wfy?f^tYwL!tfLf?lf$D8h zjjsf?g7=`NgaKy-HG&AJ3Y9FwBOo3K!0;X~0^TDMCKY^$Bg7#dJRx2{O;{K}*Gh>7 ztf1Os0Gczu1&UJ#X#$l5vNZMt5(iG9=s;dTE04VeOF6W2$O}}5aXkPkPoHKY21CJ!U{_^v8Xy`U*q`vX%#{A#01X5mtL``3Wj}4_b=eEU&o)}BH zcC!Nrol+61khoCqTE#GZvCBZkunzPltylR~F5%(E(lYhTaDB;yE$K=b5S$vobLD22 zD>u8WQCC0Ls$_n}C!#5=1r@`b3$=HqY!|4(sUXN2HLsgB8jo2qp8k93?-T&>g72GH zFe_J90#zZ=ko@OU-}3936D%#>xTpG8Y6Cp=>`tC}VFC}RGg~nb1AK?~_rJly!UDH$ z-J&Q8L>2*RmC}ns$#9hnDF1_1m8Hc<-5*m|${p@{U>9F*?@YhOX2JRd6<}qE@f>YdJGB!_d$W)>^#xG@H%40#K{h zaM6gg)QA+E3nyHlDgdZft7KW$r?@xXX>%H>7ePy{I3CBnBed6yF^ELpk2<)ko3Ayf z4fFOGEMDI example demonstrates how to write multiple " + "document interface applications using Qt.") + + def updateMenus(self): + hasMdiChild = (self.activeMdiChild() is not None) + self.saveAct.setEnabled(hasMdiChild) + self.saveAsAct.setEnabled(hasMdiChild) + self.pasteAct.setEnabled(hasMdiChild) + self.closeAct.setEnabled(hasMdiChild) + self.closeAllAct.setEnabled(hasMdiChild) + self.tileAct.setEnabled(hasMdiChild) + self.cascadeAct.setEnabled(hasMdiChild) + self.nextAct.setEnabled(hasMdiChild) + self.previousAct.setEnabled(hasMdiChild) + self.separatorAct.setVisible(hasMdiChild) + + hasSelection = (self.activeMdiChild() is not None and + self.activeMdiChild().textCursor().hasSelection()) + self.cutAct.setEnabled(hasSelection) + self.copyAct.setEnabled(hasSelection) + + def updateWindowMenu(self): + self.windowMenu.clear() + self.windowMenu.addAction(self.closeAct) + self.windowMenu.addAction(self.closeAllAct) + self.windowMenu.addSeparator() + self.windowMenu.addAction(self.tileAct) + self.windowMenu.addAction(self.cascadeAct) + self.windowMenu.addSeparator() + self.windowMenu.addAction(self.nextAct) + self.windowMenu.addAction(self.previousAct) + self.windowMenu.addAction(self.separatorAct) + + windows = self.mdiArea.subWindowList() + self.separatorAct.setVisible(len(windows) != 0) + + for i, window in enumerate(windows): + child = window.widget() + + text = "%d %s" % (i + 1, child.userFriendlyCurrentFile()) + if i < 9: + text = '&' + text + + action = self.windowMenu.addAction(text) + action.setCheckable(True) + action.setChecked(child is self.activeMdiChild()) + action.triggered.connect(self.windowMapper.map) + self.windowMapper.setMapping(action, window) + + def createMdiChild(self): + child = MdiChild() + self.mdiArea.addSubWindow(child) + + child.copyAvailable.connect(self.cutAct.setEnabled) + child.copyAvailable.connect(self.copyAct.setEnabled) + + return child + + def createActions(self): + + self.newAct = QAction(QIcon.fromTheme("document-new", QIcon(':/images/new.png')), "&New", self, + shortcut=QKeySequence.New, statusTip="Create a new file", + triggered=self.newFile) + + self.openAct = QAction(QIcon.fromTheme("document-open", QIcon(':/images/open.png')), "&Open...", self, + shortcut=QKeySequence.Open, statusTip="Open an existing file", + triggered=self.open) + + self.saveAct = QAction(QIcon.fromTheme("document-save", QIcon(':/images/save.png')), "&Save", self, + shortcut=QKeySequence.Save, + statusTip="Save the document to disk", triggered=self.save) + + self.saveAsAct = QAction("Save &As...", self, + shortcut=QKeySequence.SaveAs, + statusTip="Save the document under a new name", + triggered=self.saveAs) + + self.exitAct = QAction("E&xit", self, shortcut=QKeySequence.Quit, + statusTip="Exit the application", + triggered=QApplication.instance().closeAllWindows) + + self.cutAct = QAction(QIcon.fromTheme("edit-cut", QIcon(':/images/cut.png')), "Cu&t", self, + shortcut=QKeySequence.Cut, + statusTip="Cut the current selection's contents to the clipboard", + triggered=self.cut) + + self.copyAct = QAction(QIcon.fromTheme("edit-copy", QIcon(':/images/copy.png')), "&Copy", self, + shortcut=QKeySequence.Copy, + statusTip="Copy the current selection's contents to the clipboard", + triggered=self.copy) + + self.pasteAct = QAction(QIcon.fromTheme("edit-paste", QIcon(':/images/paste.png')), "&Paste", self, + shortcut=QKeySequence.Paste, + statusTip="Paste the clipboard's contents into the current selection", + triggered=self.paste) + + self.closeAct = QAction("Cl&ose", self, + statusTip="Close the active window", + triggered=self.mdiArea.closeActiveSubWindow) + + self.closeAllAct = QAction("Close &All", self, + statusTip="Close all the windows", + triggered=self.mdiArea.closeAllSubWindows) + + self.tileAct = QAction("&Tile", self, statusTip="Tile the windows", + triggered=self.mdiArea.tileSubWindows) + + self.cascadeAct = QAction("&Cascade", self, + statusTip="Cascade the windows", + triggered=self.mdiArea.cascadeSubWindows) + + self.nextAct = QAction("Ne&xt", self, shortcut=QKeySequence.NextChild, + statusTip="Move the focus to the next window", + triggered=self.mdiArea.activateNextSubWindow) + + self.previousAct = QAction("Pre&vious", self, + shortcut=QKeySequence.PreviousChild, + statusTip="Move the focus to the previous window", + triggered=self.mdiArea.activatePreviousSubWindow) + + self.separatorAct = QAction(self) + self.separatorAct.setSeparator(True) + + self.aboutAct = QAction("&About", self, + statusTip="Show the application's About box", + triggered=self.about) + + self.aboutQtAct = QAction("About &Qt", self, + statusTip="Show the Qt library's About box", + triggered=QApplication.instance().aboutQt) + + def createMenus(self): + self.fileMenu = self.menuBar().addMenu("&File") + self.fileMenu.addAction(self.newAct) + self.fileMenu.addAction(self.openAct) + self.fileMenu.addAction(self.saveAct) + self.fileMenu.addAction(self.saveAsAct) + self.fileMenu.addSeparator() + action = self.fileMenu.addAction("Switch layout direction") + action.triggered.connect(self.switchLayoutDirection) + self.fileMenu.addAction(self.exitAct) + + self.editMenu = self.menuBar().addMenu("&Edit") + self.editMenu.addAction(self.cutAct) + self.editMenu.addAction(self.copyAct) + self.editMenu.addAction(self.pasteAct) + + self.windowMenu = self.menuBar().addMenu("&Window") + self.updateWindowMenu() + self.windowMenu.aboutToShow.connect(self.updateWindowMenu) + + self.menuBar().addSeparator() + + self.helpMenu = self.menuBar().addMenu("&Help") + self.helpMenu.addAction(self.aboutAct) + self.helpMenu.addAction(self.aboutQtAct) + + def createToolBars(self): + self.fileToolBar = self.addToolBar("File") + self.fileToolBar.addAction(self.newAct) + self.fileToolBar.addAction(self.openAct) + self.fileToolBar.addAction(self.saveAct) + + self.editToolBar = self.addToolBar("Edit") + self.editToolBar.addAction(self.cutAct) + self.editToolBar.addAction(self.copyAct) + self.editToolBar.addAction(self.pasteAct) + + def createStatusBar(self): + self.statusBar().showMessage("Ready") + + def readSettings(self): + settings = QSettings('Trolltech', 'MDI Example') + pos = settings.value('pos', QPoint(200, 200)) + size = settings.value('size', QSize(400, 400)) + self.move(pos) + self.resize(size) + + def writeSettings(self): + settings = QSettings('Trolltech', 'MDI Example') + settings.setValue('pos', self.pos()) + settings.setValue('size', self.size()) + + def activeMdiChild(self): + activeSubWindow = self.mdiArea.activeSubWindow() + if activeSubWindow: + return activeSubWindow.widget() + return None + + def findMdiChild(self, fileName): + canonicalFilePath = QFileInfo(fileName).canonicalFilePath() + + for window in self.mdiArea.subWindowList(): + if window.widget().currentFile() == canonicalFilePath: + return window + return None + + def switchLayoutDirection(self): + if self.layoutDirection() == Qt.LeftToRight: + QApplication.setLayoutDirection(Qt.RightToLeft) + else: + QApplication.setLayoutDirection(Qt.LeftToRight) + + def setActiveSubWindow(self, window): + if window: + self.mdiArea.setActiveSubWindow(window) + + +if __name__ == '__main__': + + import sys + + app = QApplication(sys.argv) + mainWin = MainWindow() + mainWin.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/mainwindows/mdi/mdi.qrc b/examples/widgets/mainwindows/mdi/mdi.qrc new file mode 100644 index 0000000..0a776fa --- /dev/null +++ b/examples/widgets/mainwindows/mdi/mdi.qrc @@ -0,0 +1,10 @@ + + + images/copy.png + images/cut.png + images/new.png + images/open.png + images/paste.png + images/save.png + + diff --git a/examples/widgets/mainwindows/mdi/mdi_rc.py b/examples/widgets/mainwindows/mdi/mdi_rc.py new file mode 100644 index 0000000..0055267 --- /dev/null +++ b/examples/widgets/mainwindows/mdi/mdi_rc.py @@ -0,0 +1,645 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Tue Aug 3 16:19:17 2010 +# by: The Resource Compiler for PySide (Qt v4.6.2) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x03\x54\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x02\xe6\x49\x44\x41\x54\x58\xc3\xd5\ +\x97\xcd\x4e\x13\x61\x14\x86\xeb\x35\x94\x95\x7b\x71\xe1\xd2\xc4\ +\xe0\x05\xb8\xe2\x0e\x5c\xb8\xf4\x02\x5c\xb1\x30\xea\x05\x18\x96\ +\x26\x62\x58\xb8\xb0\x91\x58\x20\xd1\x9d\xbf\x89\xa4\x14\xb1\x52\ +\xa4\x48\x45\x94\xfe\xd0\x02\x43\xff\xa6\x9d\x19\xa6\x65\x80\xe3\ +\x79\x7b\xfa\x85\x51\x4a\x82\xc9\x21\x86\x49\xde\x9c\x33\xa7\xf3\ +\xcd\xfb\x9c\xf3\x4d\x9b\x4e\x84\x88\x22\xff\x53\x91\x73\x01\xc0\ +\xc7\xd5\x90\x6e\xff\xa5\xfb\xac\xc7\x3d\x3d\x64\x0d\xa9\x02\xf0\ +\x31\x32\x3c\x3c\xbc\x6a\x34\x3a\x3a\xba\x19\x56\x3c\x1e\xaf\x26\ +\x93\xc9\x56\x3a\x9d\x76\x13\x89\x44\x6b\x60\x60\x20\xcd\x6b\x6e\ +\x68\x02\xa4\x38\xd2\xe1\xe1\x71\x99\xba\xef\xb7\xc9\xb2\x2c\xda\ +\xdf\xdf\x27\x86\xf1\x78\xcd\x18\xeb\x8a\x1a\x40\x3f\xf3\xb0\x1c\ +\xc7\xa5\x4c\x66\xb9\x0b\x14\x04\x01\xc5\x62\xb1\x3a\xaf\x7b\x70\ +\x1a\x88\x53\x01\x1c\x1c\x10\x77\x77\xb2\x6c\xdb\xa1\xf9\xf9\xcf\ +\x64\x0e\xd7\x75\xe9\xf9\xc4\x44\x17\x42\x05\x00\x26\x7b\xc1\xc9\ +\xaa\x37\x1c\x4a\xce\xcd\x53\xf8\x70\x5d\x0f\x8b\x17\x54\x00\x82\ +\x10\x40\x67\x4f\x14\xce\xed\xa6\x47\x1f\x67\x66\xe9\xf5\x9b\xb7\ +\x14\x9f\x9c\xa4\xa9\xa9\x69\x7a\xf7\xfe\x03\x45\xa3\xd1\x65\x5e\ +\x7f\x41\x05\xc0\xef\x10\xed\xb6\x25\x86\x85\x9a\xe3\x05\x94\x5d\ +\xcd\xd1\xe4\xf4\x2b\x7a\x32\xfe\x94\x9e\xc5\x5e\xd0\x4c\x62\x0e\ +\x8b\x17\x55\x00\xda\x81\x18\xf5\x13\x20\x3c\xff\x90\x6a\xcd\x36\ +\x15\x37\xab\x94\x2f\x6e\x53\x89\x63\x8d\xb7\x85\xd7\x7e\x51\x01\ +\xf0\x79\xcc\xcd\x5d\x1e\xb5\xc7\x7b\xdb\xee\x9f\x3b\xbe\xe4\x88\ +\x5d\xb8\xbd\xee\xe2\x94\xca\x33\xe0\x75\xe4\xc6\x75\x57\x62\xd8\ +\x10\x39\xea\xe6\x33\x44\xd4\x01\xa7\x06\xe0\xf4\x3a\xad\x39\x22\ +\x98\x98\x68\x72\x80\x98\x6b\x50\x53\x9d\x00\x00\x2a\x2d\xb9\x31\ +\xe2\x4e\x53\x8c\x10\x0d\x04\xf2\x6d\xfb\x28\xb6\x7c\x45\x00\x9b\ +\x3b\xdb\x6a\xfc\x69\x8e\x3c\x6c\x88\x1a\xae\x39\x13\x80\x3a\x8f\ +\xb7\x54\x23\x2a\xd7\xc5\x04\x06\x06\x00\x35\x28\x9c\x17\xab\xbc\ +\x25\xbb\xca\x13\xc0\x4d\x61\x0e\x15\x2a\x72\x6e\xcc\x7e\x5a\x02\ +\x68\x6a\xdd\xad\xf1\x94\x27\x00\x53\xdc\x1c\x71\x6d\x5b\x40\x60\ +\x9a\xab\x1c\x75\x9e\xeb\x81\x41\x15\x47\x11\xc0\x6a\x89\x31\x0c\ +\xd6\x77\x04\x20\x0c\x64\x26\x62\xb6\x69\x75\x8b\xa8\xaa\x09\x50\ +\xb6\xc5\xbc\xd0\x03\xf8\xbe\x29\x63\x87\x29\x60\x0c\x18\x84\x1c\ +\x00\x5b\x4d\x45\x00\x74\x03\x53\x98\xad\x94\xc5\x1c\xe7\x46\xe6\ +\x1c\x00\xc8\x71\x5d\xa9\xa1\x08\x80\xfd\xfc\x56\x12\x73\x33\x01\ +\x08\x35\x18\x42\xe8\xda\x7c\x8e\x29\xa8\x4e\x00\x5b\x00\x03\xc8\ +\x98\x67\x36\x04\x00\x32\xe6\x85\xde\xf8\x17\x0b\xfc\x2c\xd8\x8a\ +\x00\x18\x67\x3a\x4f\xb4\x54\x14\x23\x98\x02\x00\x02\x0c\x3e\xfb\ +\xc5\x53\x28\xf0\x43\xb8\x66\x49\xf7\x6b\xf9\x52\x87\xd7\xbe\x54\ +\x01\xc8\x55\x8f\xba\x4e\xad\x4b\x0e\x90\xaf\x85\xde\xb7\xc2\x92\ +\x3d\x4f\xa6\xb3\xde\xa3\xb1\x71\xeb\xda\xd0\xf5\x15\x98\xb3\x6e\ +\xa9\x00\x6c\x34\xa4\x6b\x18\xff\xe0\x11\x7f\x5a\x17\x53\xd4\x13\ +\x0b\x59\x6f\xe4\xee\xbd\xe2\xa5\xc1\xcb\x4b\x7c\x6d\x8c\x75\x87\ +\x35\xa8\xfa\xb7\x1c\xdd\x65\xd9\x3c\x8f\x1f\x19\xfe\x9e\xcf\x1e\ +\x37\xbd\xc9\xba\x78\x26\x6f\x46\x00\x68\xf2\xff\x81\x99\x94\x9e\ +\xe9\x3f\xbf\x19\x01\x42\xd3\xf4\xfc\xbd\x9c\x9e\xa5\x7e\x03\x51\ +\x6c\x25\xa1\x92\x95\x0a\x77\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ +\x42\x60\x82\ +\x00\x00\x05\x3a\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x04\xcc\x49\x44\x41\x54\x58\xc3\xb5\ +\x97\x5d\x4c\x5b\x65\x1c\xc6\x77\x6f\xbc\xd9\xe5\x12\x49\x20\x71\ +\xd7\x26\xe3\x4e\x13\xb8\x70\xd1\x85\x44\xbd\x50\xe3\x10\x18\xe5\ +\x2b\x2e\x26\x4a\x04\x27\x86\xaa\x8b\x99\xe0\xd0\xa2\x6c\x19\x86\ +\x39\x17\xdc\x1a\x16\x98\x80\x40\x6c\xa6\x43\xca\x20\x2b\x83\x1e\ +\x28\xcc\xda\xd1\x96\xd2\xd2\x4a\x7b\xfa\x01\xa5\xd0\xef\x16\x1e\ +\xdf\xff\xdb\x1d\xc7\xcc\x04\x2a\x87\x93\x3c\x39\x6f\x21\x9c\xe7\ +\xf7\x3c\xef\x47\x0f\x87\x00\x1c\xca\x46\xcf\xbd\xfa\xe9\xbb\x4c\ +\x5a\x26\x61\x0f\x6a\x60\xca\xd9\xe9\x79\xd9\x9a\x3f\x5d\x50\xf2\ +\xa5\xc1\xe9\x8f\xa7\x57\xc3\x40\x30\x02\x84\xa2\x19\xad\xc7\x32\ +\x8a\x27\x81\x58\x22\x73\xbf\x79\x6b\xda\x4b\x10\x72\x02\x1c\x7b\ +\xe7\xac\xda\x1c\xd8\xc8\x98\x12\x40\x84\x99\x85\xe3\x19\x91\x31\ +\x29\x1a\x4b\x61\x25\x94\x44\x38\x9a\x42\x73\x87\xc6\xbe\x13\xc4\ +\xff\x02\x90\x12\x93\x79\x24\xf1\xc8\x58\x92\xcf\x1f\x84\x5d\x8c\ +\xc2\xe5\x09\x22\x12\x4b\xa3\xf4\xc3\xef\x4d\x34\x75\x59\x01\xb0\ +\xeb\xd8\x36\xd5\x90\x9e\x3a\xfc\xcc\xb9\xe7\x5f\x2e\x11\x3f\x56\ +\x9e\x45\x45\x55\x0d\x2a\x99\xde\xaf\xad\xc3\x9d\xb1\x89\xc7\x00\ +\xac\xb6\x25\xfc\xb9\xe8\x87\x6b\x15\x58\xf6\x04\x10\x08\xc6\xd2\ +\xaf\x9c\xbe\x70\x9f\x41\x1c\xd9\x15\x80\x5d\x87\x99\x1a\x8a\x8a\ +\x8a\xcc\x92\x5a\x5b\x5b\xdd\xa4\xaf\x55\xad\xfe\xaf\x54\xdf\xa6\ +\x06\x06\x06\x31\x39\x35\x85\xd9\xb9\x39\xe8\x26\x26\x50\x50\x50\ +\x80\x21\xcd\x6f\x7c\xde\x49\xa6\xf9\x05\xcc\x98\x5c\x1c\xc0\xe1\ +\x4f\x41\xf4\x85\xf0\x43\xaf\xce\xcd\x00\x6a\xf6\x02\x50\x43\x66\ +\xd8\xe5\x8a\xc7\xe3\xf0\x7a\xbd\x48\xa7\xd3\x98\x9c\x9c\x44\x65\ +\x65\x35\x66\x67\x8d\xbc\x81\x07\x66\x1b\x74\xd3\x16\x0e\x40\x32\ +\x2d\x78\xf0\xdd\x8d\x51\x8f\xac\x00\xe1\x70\x18\x46\xa3\x91\x8f\ +\x53\xa9\x14\x7e\xea\xed\x45\xe3\x27\x9f\x61\x86\x41\x38\x96\xdc\ +\x50\x77\x75\xe3\x4c\x43\x23\xce\x35\x9d\xc7\xed\x91\x71\x5c\xbc\ +\x3e\x2c\x2f\xc0\xc6\xc6\x06\xf4\x7a\xfd\x63\x40\x7d\x7d\xfd\x50\ +\x32\x88\xd0\x46\x1c\x66\x9b\x0b\x82\xc1\x88\xa9\x19\x13\xac\x0e\ +\x11\x97\xba\x64\x6e\x80\x00\xa6\xd8\x3a\xd8\x7e\x45\x22\x11\x94\ +\x2b\x2a\x30\xae\x13\x40\xe7\x04\x6d\x57\xda\xaa\x34\xbe\x7c\x53\ +\xe6\x35\x40\x66\x3a\x9d\x0e\xc3\xc3\xc3\xe8\x65\xf5\xf7\xf7\xf7\ +\x43\xab\xd5\xa2\xaa\xba\x06\x63\x77\xf5\x90\x0e\x2a\x77\x90\xed\ +\x04\xb6\x0e\xda\xbb\x65\x06\xa0\x79\xb7\xdb\xed\x18\x1a\x1a\x42\ +\x67\x67\x27\x7a\x7a\x7a\x38\x50\x49\x69\x19\x6e\x69\xf5\x10\xd7\ +\x00\x6f\x08\xb0\xf9\x00\x67\x00\xb8\xd0\x25\x33\xc0\xd6\xd6\x16\ +\xdf\x09\x81\x40\x00\xa2\x28\xc2\xef\xf7\x63\x6d\x6d\x0d\xa7\x14\ +\x95\xd0\xfc\xae\xe7\xa9\xc9\x7c\xc1\x0b\x98\x3d\x40\x9b\xdc\x00\ +\xdb\x41\x36\x37\x37\xf9\x76\xa4\x56\x14\x15\xd5\xe8\xfb\x55\xe0\ +\xa9\x1d\x81\x47\x00\xe7\x3b\x0f\x00\x80\xcc\x25\x80\x24\x33\x4f\ +\x24\x12\x28\x2b\xaf\xe2\x00\x7f\xb8\x00\x8b\x98\x01\xa0\x36\x5a\ +\xd5\x07\x30\x05\xff\x98\x27\x93\x3c\x3d\x4d\x49\xc9\xa9\x4a\x0e\ +\xa0\xb7\xb3\x03\x89\x3d\xc5\xf8\x17\x30\xb1\x00\x7c\x71\xf5\x00\ +\x00\xa4\xea\xc9\x98\x14\x8b\xc5\x50\xa6\xa8\x82\x7a\x48\xc0\x98\ +\x19\xb8\x6b\x05\xe6\x9c\x99\xfb\xe7\x57\x64\x04\x90\xd2\x53\x6a\ +\x02\x88\x46\xa3\xdc\x3c\x14\x0a\xa1\xb8\xb4\x02\xd7\x06\x05\xdc\ +\x66\x87\xe4\xa0\x01\x1c\x64\xc4\x04\x28\x3b\x64\x06\x48\x3d\x9c\ +\x73\x12\x99\xd3\xb9\x40\x20\xc5\x65\x55\xb8\xd8\x2d\xa0\x7f\x3a\ +\x63\xae\x7d\x90\x69\xe0\xa3\x76\x99\x00\xfe\x5d\x3d\xa5\x26\xad\ +\xae\xae\x72\x88\xb7\x4a\x2a\x70\xb9\x57\xc0\x3d\x1b\xb8\x7e\x9e\ +\x01\xee\xcc\x03\x67\x2e\xed\x13\x40\xaa\x9d\x44\x8b\x8e\x92\xd3\ +\x71\x4c\xdf\x01\x2b\x2b\x2b\x58\x5f\x5f\xe7\x10\x27\x59\x03\xdf\ +\x74\x09\x50\x4f\x00\xbf\xcc\x65\x1a\xb8\x32\x06\x34\xec\xa7\x01\ +\xc9\x58\xda\xeb\x64\x4e\x69\x29\x39\x1d\x44\x04\x40\xf5\xd3\xcf\ +\xde\x7c\x5b\x81\x96\xeb\x02\x4f\x7e\x75\x1c\xb8\x71\x0f\xf8\x71\ +\x2c\x9e\x7e\xbd\x4e\x6d\xa6\x37\xaa\xac\x00\x9e\x64\x2c\x6d\x37\ +\x32\x25\x00\xd1\x23\xf2\xe4\x12\xcc\x1b\x27\x15\x68\xef\x11\xa0\ +\xbc\x66\x5b\x7f\x4f\x35\xe2\x3c\x71\x9a\xbf\x8e\x69\xf7\xfc\x4a\ +\x26\x01\x90\xa9\x24\x69\xb5\x53\x42\x32\x0f\x06\x83\x70\xb9\x5c\ +\xdc\x90\x5e\x4a\xe8\xb3\xc7\xe3\x81\xdb\xed\xc6\xf1\x13\xaf\x25\ +\x9f\x7d\xa1\x9c\x4c\x3b\x98\x8a\x99\x8e\x3e\xc9\x78\x47\x00\x95\ +\x4a\xc5\x01\xa4\x15\x2e\xcd\x37\x19\x52\x52\x3a\xf7\x29\xb5\xc3\ +\xe1\xe0\x22\xe3\xc5\xc5\x45\x0e\xf5\xe2\xf1\x97\x5c\xf4\x1e\xb9\ +\x93\xe9\xae\x00\x2d\x2d\x2d\x6e\xe9\x60\xa1\xd4\xd2\x97\x0d\x8d\ +\x97\x97\x97\xe1\xf3\xf9\x60\xb3\xd9\xf8\x7d\x69\x69\x89\x43\x10\ +\x00\x8d\x0b\x0b\x0b\xcd\xb2\x00\xd0\xa2\x92\x52\x93\x11\x8d\xe9\ +\x4e\xdf\x78\x54\x3b\x35\x60\xb5\x5a\x79\xf5\xd4\x0a\xfd\xce\x60\ +\x30\x24\xf2\xf2\xf2\xee\xb3\x67\x1c\xd9\x17\x40\x53\x53\x93\x5b\ +\x9a\x67\x4a\x4f\x22\x13\xaa\x9a\xc6\x16\x8b\x99\x37\x40\x9f\x47\ +\x47\x47\x23\x6d\x6d\x6d\xde\xfc\xfc\x7c\x13\xfb\xdb\x41\xa6\xb2\ +\xbd\x9a\xff\x27\x40\x73\x73\x33\x9f\x02\x4a\x47\x10\x54\x3f\x55\ +\x3f\x3f\x3f\xcf\xeb\xd6\x68\x34\x91\xba\xba\x3a\xe7\xc3\xb4\x5d\ +\x4c\x1f\x30\x1d\xcd\xc6\x78\x47\x00\xa5\x52\xe9\x76\x3a\x9d\xbc\ +\x62\x4a\x4a\x6f\x3e\x94\xb4\xbe\xbe\xde\x99\x93\x93\x23\x99\x16\ +\x67\x53\x75\x56\x00\x8d\x8d\x8d\x6e\x8b\xc5\x82\x81\x81\x81\x48\ +\x6d\x6d\xad\x33\x37\x37\x57\x56\xd3\xdd\x00\xf8\x7f\x46\x4c\xc2\ +\x41\x99\x6e\xd7\xdf\x43\x39\x56\x18\x85\x70\xc8\x04\x00\x00\x00\ +\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x05\x2b\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x04\xbd\x49\x44\x41\x54\x58\xc3\xed\ +\x57\x6b\x4c\x93\x57\x18\x3e\x23\x71\xc9\x32\xe9\x16\x97\xa8\x54\ +\x65\x38\x9d\x02\x15\xf6\x03\x87\x32\x93\x01\x66\x2c\x5b\x70\xc4\ +\x30\xff\x60\xa2\x2e\x1a\x3a\x1d\x4e\x03\xba\x31\x89\x5b\xb3\x80\ +\xd9\x0c\x84\x02\x19\x58\x1c\x14\x8b\x85\xb2\x82\x95\x5e\xe4\x66\ +\x0b\x8e\x31\xf8\xc3\x46\xcb\x2d\x81\x15\xdc\xa8\xc2\x1c\x1b\xb7\ +\x6a\x69\x91\xf2\xee\xbc\x87\xaf\x0c\xdc\xb8\x0d\x61\xd9\xb2\x93\ +\x3c\xed\x97\xf3\x7d\xfd\xde\xe7\xbc\xef\xf3\x5e\x4a\x00\x80\xfc\ +\x93\x20\xff\x0a\x02\x74\x09\x28\x44\x14\xd9\x14\x71\x14\x01\x2b\ +\x46\x80\xae\xdd\x64\xdd\xc6\x66\x22\x4c\xf8\x95\xc4\x8b\x47\xc8\ +\xa1\xd3\xf7\xc8\x8e\x97\x3b\x38\x32\x61\x2b\x41\x20\x85\x9c\xbe\ +\x30\x48\x2e\xdd\x80\x19\x40\x32\xab\x79\x4d\xf4\xbe\xfb\x72\x13\ +\x68\x64\x06\x91\x04\x5e\xa3\x51\xf4\x06\xee\x85\x47\xf5\xd0\xbd\ +\x83\xcb\x4d\x20\x9b\x9d\xf6\x40\x74\x2f\xbd\x16\x32\x3d\x20\x89\ +\x3f\x48\xa5\x2c\x1b\x01\x8c\x31\x79\xc1\xbb\x9d\x88\x4b\xc6\xd7\ +\xc6\x26\x0e\xa0\x10\xb9\xfd\x42\xfe\xc5\x2b\x36\x46\x8c\x12\x5c\ +\x4e\x02\x93\xa7\xa7\xa7\x0d\xcc\xd3\x39\xb9\x98\x63\x36\x14\x0a\ +\xd2\xe4\xa3\x2b\x41\x20\x8c\x29\x9e\x2a\xdf\x37\x47\xeb\xdc\x7b\ +\xb5\xcc\x89\x9e\x40\x44\x96\x54\x83\x2b\x2c\x0b\x36\x46\x48\x08\ +\x13\xf5\x64\x2a\x7b\x2e\x54\x03\x01\xf8\x03\x37\xbf\xc0\x0e\x34\ +\x2a\x54\xdf\x62\x88\x52\xd5\x2c\x58\x03\x74\x1d\x16\x08\x04\x7a\ +\x45\x55\xf5\xc8\xa0\x6d\x74\xc2\xd4\x73\xf7\x21\xbe\x73\x51\x95\ +\x90\xae\x8f\xd0\x13\xcf\xe5\x94\x83\x87\xb4\x02\x9e\xcc\x2e\x03\ +\xd4\x06\xdd\xaf\x99\xcb\xb0\xaf\xaf\xaf\x3e\xbf\xd2\x60\xb5\xdb\ +\xed\x80\xf8\x79\xe4\x3e\xc4\x5e\xab\xb4\xb9\x88\x2f\x86\x80\x27\ +\xd3\xc0\x67\xf9\x8e\x19\xf5\x60\xd7\x5e\x33\xba\x76\xda\x73\xee\ +\x68\xd8\xc7\xc7\x47\x9f\xab\xab\xb0\x0e\x0f\x0d\xc1\x10\x87\xb2\ +\xf6\x2e\xe7\x96\x37\xf7\x77\x73\x61\xd8\xbd\xe8\x5e\x80\x2f\x66\ +\x9a\xa0\x86\xdf\xa9\x36\x42\xf7\xf0\x03\xd8\x19\x9f\xd4\xcf\xa5\ +\xe7\x1a\x8a\x98\x2d\x7e\xfe\x6d\x97\x54\x1a\x6b\x5f\x5f\x1f\xb8\ +\xd0\xd1\x73\x07\x62\x72\x15\x56\x4e\xc4\x87\x97\xd4\x8c\x30\x14\ +\xe9\x15\xb7\x1e\x38\x1c\x0e\x40\xa4\xd6\x19\x31\x9e\x85\x9b\x05\ +\x7e\x6d\xa9\x25\x1a\x5b\x97\xd9\x0c\xe6\x2e\x0a\xf3\x24\x14\xdf\ +\x36\x8e\x7b\xbd\x1e\xd1\xcd\x42\xc8\x09\x6f\xa9\x04\x3c\xd1\xbd\ +\x56\xab\x15\x10\x77\x7f\x1b\x84\xf3\x92\x5c\xbb\x52\xa9\x84\xfa\ +\xfa\x7a\x30\x99\x4c\x0c\x75\xdf\x35\xc1\x51\xb1\x64\x18\xc9\x51\ +\x44\x3e\xb6\x76\xcc\xb4\x40\x4f\x93\x5f\x7e\xd3\xd6\xdf\xdf\x0f\ +\x32\x99\x0c\x44\x22\x11\xa8\x54\x2a\x90\x4a\xa5\xa0\xd1\x68\x20\ +\x4b\x5b\x39\xbe\xe9\x95\xe0\x1f\xb8\x53\xaf\x79\x2c\xf3\x00\x97\ +\x8e\x22\x9e\xc7\x86\xe6\x53\x29\x19\xf6\x82\x82\x02\xe6\xe2\xa0\ +\xa0\x20\xe0\xf1\x78\x60\xb1\x58\x40\x5b\x5e\x01\xfb\xcf\x26\x0c\ +\x2d\xa6\x53\xce\x67\x94\xcf\x09\x4c\x83\xe2\x5b\x7b\xe6\xc2\x60\ +\x9a\xb2\x14\x14\x0a\x05\x88\xc5\x62\xc8\xcc\xcc\x84\xa2\xa2\x22\ +\x50\xab\xd5\xd0\xd9\xd9\xc9\x60\xec\xfe\xc9\xb9\xc9\xdb\xa7\x75\ +\x2e\xb7\xcf\x4b\x80\xae\xb7\xd8\x29\x70\x0e\xc0\x6a\x97\xac\x78\ +\x88\xca\x7f\x82\xe2\x29\x89\x0e\x3e\x97\x2b\x21\x5b\x96\x0f\x07\ +\x63\xe3\x47\x84\x1f\x26\xd8\x92\x72\x64\x8e\x6f\x1a\xbf\x07\xa3\ +\xd1\x08\x2d\xad\x2d\xf0\xcb\xc0\x20\x1c\x38\xf1\xbe\x05\xb3\x62\ +\xc1\x04\x5c\x69\x84\x85\x85\x84\x46\xdc\x26\xe7\x32\xac\x2c\xcf\ +\x33\xb5\x13\xec\x3b\xe3\xba\xd3\x33\xaf\x82\xe5\xfe\x7a\x89\x06\ +\x9e\xde\xfc\x62\x1b\xf7\x3c\x92\x8d\x7b\x66\xab\x4f\x5b\xca\x35\ +\xed\x58\x43\x43\x3d\x34\x34\x34\x80\xa5\xb7\x17\x32\x14\xc5\xc3\ +\xf3\xe9\xc0\x65\x3c\x92\xe5\x28\x9e\x36\x5d\xe5\x9c\x2a\x32\x78\ +\x7d\xf4\x83\x2e\x5a\x6c\x12\x31\x0c\x1b\x25\xea\x71\xf7\x2f\xcb\ +\x27\xef\x05\x87\x5f\xfe\xd3\xe4\x44\x0b\x4c\x68\xf4\xc9\x3e\x75\ +\x95\x1e\x0c\x06\x03\xb4\xb7\xb7\xc3\xd7\xc6\x96\x31\xae\x81\x09\ +\x66\xf1\x36\x6d\x38\x68\x3c\x49\x3a\x3a\x65\xf8\x62\x81\x83\x44\ +\xbd\x57\x43\xb6\x0a\x5e\x9b\x2a\xc3\x94\x5c\xb0\x42\x0f\xab\x24\ +\xb4\x04\x9f\x4a\xaa\x9b\x43\x37\x31\x28\xd4\x4f\xf2\x0a\xc7\x74\ +\x3a\x1d\xd4\xd6\xd6\x82\xc9\x7c\xdb\xb9\x61\x9b\xf7\x5f\xea\x62\ +\xb2\xe5\x7e\x9c\x75\x1f\x0d\xf3\xb2\xd4\x4e\xf2\xf6\xb1\xeb\x2e\ +\xb6\xae\x94\xc3\x90\x6c\x97\x55\xc1\x4b\x57\xab\x80\x9c\x4d\x6e\ +\x5a\xd0\x1c\x49\xbd\xb1\xe7\x88\xb0\xef\xca\x57\xc5\x50\x5a\x5a\ +\x0a\x1d\x3f\xf6\x4c\x04\x06\x87\x74\x3c\xaa\x0b\xc2\x84\x46\x8d\ +\x07\xc8\x6f\x02\xd9\xf9\xaa\x7e\x9a\xf1\x30\x46\x8e\x36\x20\xaf\ +\xbc\x4a\x78\x43\x69\x00\x92\x28\x1d\x98\xcd\x95\xb3\x79\xc3\x7d\ +\x3d\xbf\xf9\x44\x6a\xa6\x5d\x2e\x97\x43\x53\x4b\x2b\x44\x1c\x7b\ +\xf7\xce\xf4\x14\x25\xae\xf1\x8a\xf5\x77\x9c\xf5\x70\x02\xc2\xd9\ +\x0f\x89\xd1\x81\x03\x4f\x8e\xf7\xdc\xd2\x69\xe7\xf3\xdf\x75\xfc\ +\x6f\x14\x2e\x36\xd2\xef\xd8\x17\x69\x49\xbe\x2c\x9d\xc8\xd3\x96\ +\x3b\xa7\x0f\x31\x8c\x25\xc6\xdf\x9f\xba\x77\x5f\x71\x35\xa0\x41\ +\x6c\xb5\x08\x8c\xf9\x94\xf1\xe0\xf0\x33\x4b\x9a\x7c\x68\x13\x5a\ +\xbd\xce\xa3\xd9\x6b\x4f\x48\xf7\x0c\x0f\xb0\x0f\xfe\xf3\x87\xc8\ +\xf9\x2f\xee\xb9\x49\x6e\x00\xf6\x7b\x3e\xed\xf7\x08\x1e\x2a\x3e\ +\x5d\xe5\x58\xaa\xf1\x47\x5a\xf5\xb6\x59\x0b\x11\x1d\xb3\x43\xc9\ +\x91\x38\x09\x39\xf9\xa9\x96\x21\xfa\x5c\x1a\x0d\xcf\xb3\xff\xff\ +\x37\xfc\x4f\x13\xf8\x1d\xe7\x87\x19\xb9\x44\xc3\x01\xcf\x00\x00\ +\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x04\xa3\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x04\x35\x49\x44\x41\x54\x58\xc3\xe5\ +\x97\xcd\x8f\x54\x45\x14\xc5\x7f\xb7\xea\xd6\x7b\xaf\xdb\x6e\xc7\ +\xf9\x40\x9d\x89\x46\x4d\x34\x99\x44\x8d\x1a\x48\x98\xc4\x8c\x1f\ +\x1b\xfe\x02\x4c\x5c\xf1\x07\x18\x16\x2e\x4d\x5c\x6b\x58\xc3\x8e\ +\xc4\x8d\x1b\x17\xce\x82\x68\x74\x41\x5c\x18\x0d\xe2\xc4\xc6\x00\ +\x3d\x60\x50\x51\x19\x60\x02\xa2\x0e\x0c\x83\xd3\xfd\x5e\xf7\x94\ +\x8b\xaa\xee\xf9\x60\xe6\x0d\x84\x51\x16\x56\x52\xa9\xce\x7b\xb7\ +\xeb\x9e\x3a\xf7\xd4\xa9\x7a\xea\xbd\xe7\x7e\x36\xe5\x3e\xb7\x3e\ +\x80\x5d\xbb\x76\xbd\x03\xec\xfd\x8f\xf2\x4e\x35\x1a\x8d\x03\xeb\ +\x19\xd8\xbb\xef\xbd\xa3\x3b\x1f\x1f\x76\x00\x9c\x3c\x3a\xcf\xcc\ +\x97\x37\x58\x9c\xef\xdc\x53\xa6\xda\xa0\xf2\xdc\x6b\x03\xbc\xb8\ +\x67\x10\x80\x8b\x7f\x16\x7c\xf8\xee\x1e\x80\xdb\x00\x70\xfc\xec\ +\x1c\xdf\x3f\x30\x04\x78\x2e\xfd\xb8\xc0\xfe\xb7\xce\x6f\xcb\x72\ +\x0f\x1d\x79\x9a\x0b\x23\x96\xd3\x9f\x1f\x64\xfc\xd5\x7d\x9b\x6b\ +\x40\x45\xb0\x16\x40\x78\x70\x2c\x23\xcb\xb2\x6d\x01\x30\x30\x96\ +\x61\x8d\x50\x1b\x7c\x14\x23\x25\x22\x14\x2b\xd8\x18\x91\xd5\x95\ +\x73\xe7\xce\x83\x2a\xb8\x04\xd2\x14\xb2\x0c\xd2\x2c\x8c\x49\x0a\ +\x49\x12\xde\x77\x3a\x90\xe7\x90\xb7\xa1\xd5\x82\x76\x2b\x8e\x6d\ +\x28\x72\xb2\xfa\x38\xd6\x0a\xe3\xaf\xbc\x49\x6b\xf1\xfa\xe6\x00\ +\xac\x15\xac\x15\x04\xb0\x46\xd8\xbd\x7b\xe7\x16\x6b\xeb\x86\xae\ +\x80\x5a\xa8\x56\x81\xea\x6d\x51\x8d\xaf\x04\xb5\x82\xf7\xa0\xa6\ +\x84\x01\x67\x05\x35\x82\x08\xa8\x0a\x95\x2c\xc3\x23\x20\x1e\x08\ +\xc0\xf0\x1e\x2f\x02\xde\x23\x12\x26\x15\x7c\x88\x23\xc4\x21\x1e\ +\x3c\x21\x5e\x40\x4d\x58\x18\x40\xd7\x4a\x89\x06\xac\xa0\xda\x63\ +\x00\x9a\x33\xbf\x05\x8a\x53\x07\x69\x02\x95\x04\xb2\x34\xf6\x04\ +\x12\x07\x4e\xa1\xe8\x40\x5e\x40\x2b\x8f\xbd\x05\x4b\x39\xb4\x73\ +\xc8\x0b\x54\x87\x71\x3d\x00\x2a\xe5\x25\x70\x31\x40\xd5\x30\x39\ +\xf9\xd2\xd6\x0a\xf3\x3e\xd0\xaf\x16\xaa\x1b\x8b\xf6\xd8\x27\x61\ +\x61\xbd\x1c\x25\x25\x20\x00\xf0\x81\x8d\x34\x4d\xa3\x3a\xc3\xb3\ +\x98\x11\x89\x6c\x07\xda\x63\x09\x56\x98\x5f\x29\x46\xfc\x61\xcd\ +\x72\x7f\x61\x1d\x2d\xd1\x80\x3a\x09\x54\x49\x18\x4f\x34\x2f\xe0\ +\x9d\x85\xc4\x21\x89\xc3\x67\x09\x92\x69\xd8\x11\x89\xe2\x13\x87\ +\x58\x8b\xef\x76\x91\xbc\x80\xbc\x03\xed\x02\xdf\x6a\x23\xed\x02\ +\xf2\x02\x9f\x77\x50\x1d\x45\xd5\x20\x78\x3a\xeb\x54\x78\x9b\x06\ +\x9c\x33\x78\x0f\x03\x8f\x24\xbc\xfe\xf2\xf3\x77\x68\xe8\x36\x68\ +\xa4\xbe\xf1\xeb\xc6\xfc\xdf\xb1\x04\x52\x5e\x82\x44\x4d\x5f\x84\ +\x8f\x0d\xa5\x38\xe7\xb6\xc5\x88\x9e\x18\x4b\xb9\x76\xb3\x03\x08\ +\x9d\x52\x11\xaa\x90\xb8\x50\xef\x5a\xc5\x30\x7d\xb1\xcb\x40\xc5\ +\xb0\x0e\xf4\x26\xad\x57\xf9\x55\x2e\xe1\xe1\xc6\xd2\x32\xf5\xcc\ +\x70\x7d\xc9\x84\x2d\xe9\x4a\x19\x10\x9c\x1a\xc0\x73\xe5\x66\x97\ +\x2b\x37\xbb\xac\x51\x57\x3f\xd7\xaa\x64\x7e\xc5\x27\xa2\x29\xac\ +\x05\x15\xc3\x9c\x0b\xb5\x77\xa6\x6c\x17\xa8\xc1\xa9\x20\xc8\x1a\ +\x35\xaf\x9b\x35\x1a\x8f\x59\x31\x9e\xfe\x7b\xe9\xef\x14\x00\xf1\ +\x82\xef\x9b\x58\x30\x2b\x57\x56\x02\x55\x21\xd1\x90\xfc\xe7\x53\ +\xdf\xf2\xeb\x99\x13\x2c\x2d\xde\xb8\xa7\xfa\x57\x6a\x03\x3c\xf5\ +\xec\x4e\x9e\x79\x61\x02\x0f\xa8\x33\x5b\x31\x10\x03\x7c\x87\xf7\ +\xf7\xbf\xc1\xc2\xc2\x02\xb7\x6e\xdd\xa2\x28\x0a\x44\x04\x6b\x2d\ +\xd6\x5a\x54\x15\x55\xc5\x39\x87\xaa\x62\xad\xc5\x98\xf0\xdf\xe5\ +\xe5\x65\xf2\x3c\xef\xf7\x23\xcd\xf9\xb8\xf2\x2d\x18\x70\x56\x50\ +\x17\x18\xdc\x31\x3a\xb6\x72\x4f\x38\x7e\x9c\xe9\xe9\x69\x8c\x31\ +\x78\xef\x99\x98\x98\x60\x72\x72\xf2\x8e\x59\xd8\x31\x3a\xd6\xdf\ +\x86\xae\xd4\x09\x55\x70\x36\xac\xa2\x56\xaf\xf7\x6b\x39\x33\x33\ +\xc3\xd0\xd0\x10\xd6\x5a\xbc\xf7\x34\x9b\xcd\xbb\x02\x50\xab\xd7\ +\x70\xd1\x88\xb4\xd4\x88\x14\x9c\x0b\x27\x5c\xa0\x2a\x00\xa8\x56\ +\xab\x64\x59\xd6\xa7\xb8\x37\xde\x69\x73\x1a\xa9\x17\x41\x4b\xad\ +\x38\x1e\xc7\xbd\x23\xb4\xd7\x8c\x31\x88\x44\xdf\x8f\x3a\xb8\xab\ +\x9b\xaf\x35\xa8\x0d\xf3\xf6\x18\x2e\x3d\x8e\x83\x29\x6d\xe3\xd5\ +\xdb\x12\xa9\xf7\xe5\x56\x6c\xad\xf4\x91\x0e\x8e\x0c\xc3\xf2\xef\ +\xdb\x02\xe0\xa1\x91\x61\xd4\xc2\xb5\x2b\x97\x59\x9c\xbf\xbe\x05\ +\x03\x36\xf8\xc0\x60\xad\x02\x0b\xdb\xc3\xc0\x50\xad\xc2\xec\xc5\ +\x4b\x9c\xfd\xee\x1b\xce\x9f\x9c\x9e\x03\xa6\x36\x04\x60\x24\x5e\ +\x4a\x05\x12\x0b\xed\x91\x27\xa9\x3d\x0c\x6f\x1f\x38\xc8\x66\xc7\ +\x81\x27\x3a\xf1\x2a\xe7\x35\x1e\x32\x81\x14\x28\xba\x70\xf9\xea\ +\x55\xce\x34\x8e\xd1\xfc\xfa\x8b\xb9\xd9\x1f\x4e\x1d\x02\x0e\x6f\ +\x08\xe0\xb3\x8f\x3e\xe0\xa7\xd3\x27\x57\x99\xe9\xda\xa3\x86\x55\ +\xe6\xbb\x1e\x04\x1b\x3c\x5f\x1d\x6f\x7c\x77\xee\x8f\xd9\x5f\x0e\ +\x01\x87\x1b\x8d\xc6\x5f\x1b\x01\x98\x9a\xfe\xf4\xe3\x7f\xf5\x73\ +\x6c\x7d\xf2\x35\x00\xe2\xb7\xda\x81\xff\xdd\xd7\xf1\x3f\x4d\xf0\ +\x4b\xb9\xe8\x46\x89\xaf\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ +\x60\x82\ +\x00\x00\x06\x6d\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x06\x34\x49\x44\x41\x54\x78\x5e\xad\x97\x5b\x6c\x54\xc7\ +\x1d\xc6\x7f\x73\xce\xd9\x8b\xbd\xf6\xfa\x16\xa0\xbe\x00\x0e\xb2\ +\x69\x63\x24\x42\x4a\x21\x22\xa1\x2d\x95\x62\xa5\x2f\xee\x4b\x68\ +\x2b\x95\xa6\x55\xa5\xc6\x60\x55\xaa\xda\xb4\xaa\xfa\x56\x09\x55\ +\xca\x03\x94\x27\xda\x07\x84\x14\x29\xad\xc4\x8b\xa5\x52\x83\x79\ +\x08\xc5\x18\x39\x0e\x69\xd3\x84\x9a\x9b\x63\x6a\xec\xb2\x04\x1b\ +\x3b\xbb\xf6\x7a\x8f\xbd\xbb\xde\xb3\x67\xa6\xc3\x68\x85\xe5\x72\ +\x6c\x88\xc9\x27\x7d\xfa\x9f\x9d\x87\xfd\x7e\xf3\x9f\x99\x73\x11\ +\x4a\x29\x82\x24\x84\x78\x05\x78\x9e\xc7\x6b\x48\x29\xf5\x77\xd6\ +\x28\x27\x20\xb8\x43\xbb\x01\x68\x97\x52\xbe\xc6\x63\x64\x59\xd6\ +\x07\x1a\xf6\xbb\x40\xb7\x06\x39\xff\x14\x00\x26\xfc\xb7\xed\xf5\ +\xe2\x60\x5d\x44\x44\x6e\xce\x89\x8a\x2b\x57\xae\x50\x5d\x53\x8d\ +\x40\x00\xa0\x50\x08\x65\x28\x41\x29\x66\xd3\x69\x5e\xa9\x17\x2f\ +\xbc\xb4\x4e\x6c\x3b\xf1\x1f\xb9\x47\x83\x7c\x5b\x43\x4c\x3c\x4d\ +\x07\xf6\xff\x60\x8b\xdd\x2c\x25\xf8\x4a\x32\x3c\x3c\x4c\x65\x65\ +\x25\x2b\xc9\x75\x5d\x1e\xc0\x6e\xa9\xb0\x22\x1b\xa2\x2a\x72\x3f\ +\xa7\xea\x81\xb5\x03\x08\x2d\x05\x48\xa1\x0d\xf4\x5d\xbc\x48\x2e\ +\x97\xc3\x2f\x16\x51\x4a\x91\xcf\xe7\x59\x5c\x5c\xa4\x50\x28\x50\ +\xd4\x63\xb5\xb5\xb5\x94\x01\x58\x80\xf8\x82\xf6\x80\x01\x00\x36\ +\x44\x05\x1f\x0f\xbc\x4b\x3e\x3b\x8f\x85\x44\x95\x32\xe2\xb6\xc4\ +\xb6\x04\x21\x21\x70\x3e\x53\x6c\x8c\x3b\x80\x44\x2a\x04\xf0\x9c\ +\x10\x02\xe0\xcb\x40\x05\x50\x0f\x34\x60\xc4\x48\x69\x9f\x24\x02\ +\x01\x4e\x9c\x38\x21\x00\x81\x05\xd2\x87\x96\x96\x67\x09\x65\x6d\ +\x14\xe5\x28\xa5\xb4\x41\x08\x58\x57\x19\x25\xe2\xd8\x44\x42\x16\ +\xc3\x13\x73\x5c\xbc\x3d\x41\xf7\x58\x8e\x5c\x24\xbe\xa9\xbd\x7d\ +\xf7\xef\x2d\xcb\x5a\xdc\xb1\x63\x47\x59\x55\x55\x95\xd3\xd8\xd8\ +\x18\x7e\xe0\x86\x86\x86\xd0\xa5\x4b\x97\xdc\xae\xae\xae\x08\xf0\ +\xd6\xaa\x1d\x00\x13\x44\x55\x2c\xc2\x73\xd5\x31\xf2\x9e\x4f\xa1\ +\x28\x91\x4a\x61\x09\x41\xd8\xb1\x88\x86\x6c\xe6\x72\x05\x12\xa2\ +\x8e\x3f\x9f\xff\x2b\x0d\x4d\x1b\x01\x22\xc0\x66\x96\x84\xef\xfb\ +\x78\x9e\x47\x75\x75\xb5\x9e\x50\x4b\xf4\xea\xd5\xab\x87\x84\x10\ +\x28\xa5\xde\x5a\x11\xc0\xb2\x41\x00\xb6\x2d\x90\xda\xb6\x14\x38\ +\x08\xa4\x12\x58\xc2\x8c\x1b\x8f\x4c\xb9\xec\x7b\xf5\x3b\xd4\x37\ +\x36\x11\x7c\x2f\xc1\x84\x67\x32\x19\xca\xcb\xcb\xcd\x66\x3e\x76\ +\xec\xd8\x26\xbd\x7f\x0e\x2e\x41\x2c\x01\xd0\xd9\xd9\xa9\x0e\x1d\ +\x3a\xa4\x6c\x21\x08\x59\x10\xb6\x2d\x1c\xc7\xc6\x42\x50\xb4\xcd\ +\x1a\x1b\x00\xc7\xb2\x88\x38\x96\xae\x02\x60\x59\x78\x10\xc0\xdc\ +\xdc\x1c\x35\x35\x35\x06\x20\x1a\x8d\x72\xe4\xc8\x91\xcd\xc0\x03\ +\x88\x1b\x1a\xa2\xc7\x62\xb9\xb0\x6d\x74\x30\x66\x8d\xcb\x23\x36\ +\xb1\xa8\xa3\xc7\x2c\x32\x8b\x1e\x93\x99\x1c\x63\xa9\x79\xee\xcc\ +\x2e\xe8\xdf\x45\x72\xf9\x3c\xab\xc8\x2c\x41\x36\x9b\x35\xa7\x66\ +\xe9\xff\x6d\x0e\x1c\x38\xb0\x1e\xe8\x00\x58\x06\xa0\xb4\x74\x16\ +\x8e\x0d\xe1\x90\xc0\x53\x8a\xb1\xa4\xcb\x8d\x8c\x83\xd3\xb2\x97\ +\xa6\x7d\xaf\xb3\xb5\xe3\x17\xac\xdb\xfb\x3a\x0d\x2f\xb4\x73\xfb\ +\xce\x24\xfd\xfd\xfd\x24\x93\x49\x94\x52\xe6\xfa\xf8\xf1\xe3\xe8\ +\xba\xac\x33\xe7\xce\x9d\xe3\xe8\xd1\xa3\x1c\x3e\x7c\x98\xde\xde\ +\x5e\x12\x89\x84\x04\x2c\xa1\x15\xdc\x01\xed\xff\xce\xe6\xf8\xe7\ +\x94\x4f\x6b\xc7\xcf\xf8\xe6\x2f\xdf\x26\xf6\xf5\x37\x99\x7c\xa6\ +\x83\x6b\xfe\x2e\xae\xf1\x2d\x64\x6b\x17\xad\x7b\x7f\x4e\x5e\x56\ +\x73\xfa\x6f\x67\xd1\x77\x4d\xee\xdc\x9d\xe2\x1b\xaf\x76\x72\xfd\ +\xfa\x75\x03\xa0\x67\x6b\xd6\x3f\x16\x8b\x99\xeb\x78\x3c\x8e\xe3\ +\x38\x25\x38\x04\xc0\x23\x00\x96\x25\x98\xca\x41\x3a\xde\xca\xfe\ +\xdf\xbd\x4d\xd5\xae\xd7\x28\x84\x62\x08\xdb\x42\x59\x82\x6c\x41\ +\x72\x7f\x66\x91\x4f\xee\x66\x18\xb8\xea\x72\xfa\x1f\x61\x64\xd5\ +\x5e\xae\x8f\xdc\x67\x32\xd7\xc6\x85\x0f\xee\x9b\x00\xed\x87\xa1\ +\xcd\xcd\xcd\xb4\xb5\xb5\x19\x37\x35\x35\xa1\xa1\x14\x20\x83\x1f\ +\x46\x16\xdc\x71\x15\xdf\xff\xe9\x6f\xa8\x6c\xd8\x48\xe2\xec\x3b\ +\x4c\x8f\x5e\xc3\x89\x94\xb1\xb5\x79\x07\x9b\x5b\xb6\xf3\x49\x79\ +\x25\x63\x09\x97\xcf\x66\xf2\xdc\x9d\xce\x32\xa1\xed\x88\x0d\x4c\ +\x27\xe7\xd8\xb7\x2b\xca\xfa\x25\x00\x33\x7b\x3d\x6b\xea\xea\xea\ +\x00\xcc\x75\x2a\x95\x32\x00\x4a\x2b\x10\xa0\xb9\x5a\x70\xe1\x9d\ +\x63\x28\x2c\xca\xe6\xc6\xd9\x10\x8f\x52\x94\x92\x7b\xc3\x7d\x24\ +\x65\x05\xdb\xda\x7f\x4c\x4d\xdb\xcb\x7c\x3c\x9c\x66\xd2\x5f\xc0\ +\xcd\x78\x2c\xcc\x6b\x2f\x78\x20\x00\xb5\x74\x3a\x42\xa1\x90\x09\ +\x2d\xdd\xea\x1f\x8e\x01\x2a\xf8\x3e\x60\xc1\xc6\xb8\xa0\x50\x1c\ +\x23\x1c\x8b\x53\xb7\xa5\x96\x92\x78\x76\x7d\x05\xe9\xac\xc7\x68\ +\xff\x9f\x98\xae\xbc\x4c\xcb\xf6\x83\xb8\x0b\x61\xbc\x82\xa4\x58\ +\x94\x78\xda\x21\xc7\x42\x2d\xaa\x80\xe3\x69\xa0\x96\xd5\x15\x01\ +\x00\xd6\xc7\x43\x84\xca\x23\xfc\xbf\x6a\x63\x21\x9e\xa9\x0c\x73\ +\xe1\xdf\x83\xec\xd9\xf9\x13\xca\xa3\x0e\xb9\x32\x47\x03\x28\x03\ +\x61\x6b\x00\x16\x4b\x21\xa5\x1c\x25\x30\x2a\x15\xa4\x5c\x05\x40\ +\x58\xa5\x2a\xcc\xf5\x23\xfa\x70\x6c\x86\xf1\x59\x8f\xef\xfd\xfa\ +\x8f\xdc\xca\xd4\xe0\x44\x5c\xa2\x11\x1b\xcf\x93\x14\x3d\x07\xd3\ +\x01\xa5\x90\x52\xf2\x50\x6a\x59\x01\x56\x05\x10\x08\x4c\x0d\x04\ +\x18\x9d\x76\xf9\xd5\x5f\x86\x18\xbd\xb7\x80\x3d\x93\x67\xd3\xba\ +\x32\xf2\x79\x5f\xbb\x68\xea\xce\xaf\xd4\x70\xf9\xdd\xe0\x25\x00\ +\x9e\x78\x09\x4c\xb8\x10\x3c\xa2\xd6\x2f\x55\xf2\x87\x1f\x3e\xcf\ +\xf5\x4f\x33\x44\x1b\xb7\xb1\xf3\xc5\x97\x59\x12\x5c\x4e\x60\x8e\ +\xdb\x53\x01\x28\xc0\x12\x25\x00\x6d\xd4\x52\x7d\xb1\xb5\x96\xdd\ +\x5b\xe2\x74\xbf\x97\xa5\x6a\xf7\x57\xf9\xd1\x1b\x6f\x10\xa0\xb5\ +\x03\x98\xb5\x37\xd5\xd8\x08\x01\xd2\xcb\x53\x70\x53\x78\xf3\x33\ +\x14\xb3\x69\x0a\x19\x1f\x25\xfd\xd5\x82\xd6\x08\xf0\xf0\x29\xe7\ +\xe3\xe7\x33\x14\xe6\x75\xa8\x0e\xd6\x00\xcb\xf7\x89\x10\xc1\x33\ +\x7d\xfa\xd7\x72\x8c\xb2\x13\x37\x03\xc7\x01\xb2\x1e\xfe\xad\x94\ +\xcc\x6f\xf7\x44\x54\x03\xd8\x5f\x70\x07\x08\x92\x09\xfd\xd7\x3d\ +\x3f\xfd\x7e\x42\xa6\xcf\xdf\xf6\xef\x02\xee\x76\x3b\xfc\x92\x06\ +\xa8\xe3\x73\xca\x75\x5d\x1f\x70\x57\xed\x00\x40\x32\xab\x0a\x1f\ +\x7e\x2a\xd3\xbd\xb7\xfc\xd4\xcd\x69\x39\x05\xf4\x03\x97\x74\x68\ +\xbf\x10\xa2\xd3\xb6\xed\xaf\x7d\x9e\x25\x58\x58\x58\xf0\x07\x06\ +\x06\xd2\x27\x4f\x9e\x9c\x06\xba\x83\x00\x3e\x1a\x49\xca\xad\xe3\ +\xb3\x2a\xd7\x3b\xe2\xa7\x6e\x4c\xcb\xd1\x52\xe8\x59\x1d\x74\x8b\ +\x00\x3d\x09\xc0\xd0\xd0\x90\xdb\xd3\xd3\x93\xd2\x4e\xcf\xce\xce\ +\x9e\x2e\xbd\x1d\xdf\x08\x02\xe8\xee\xea\x29\x00\x8c\x04\x84\x06\ +\x85\xaf\x08\x30\x35\x35\x55\xd0\x2f\x22\xa9\x53\xa7\x4e\x25\xc7\ +\xc7\xc7\x2f\x03\x67\x81\x7e\x1d\xec\xae\xb8\x09\x4b\xdf\x76\xda\ +\x4f\x26\x85\x01\x40\x08\x40\x61\x5a\xfc\xde\xe0\x60\xba\xbb\xbb\ +\x3b\xa5\xdf\x8a\xcc\x24\xd0\x5e\xed\x73\xcd\x61\xed\x9a\x77\x33\ +\x6e\x11\x60\x70\xf0\xfd\x74\x5f\x5f\x5f\xfa\xcc\x99\x33\xa6\xc5\ +\xa5\xd0\x8f\x78\x02\x89\xb5\x9e\x63\x21\x44\x18\x78\x13\xd8\x4f\ +\x69\x73\x06\xb4\xf8\xb1\xfa\x1f\xbd\xfa\x2a\x5f\xf2\xd8\x15\x9d\ +\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x08\x19\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x07\xab\x49\x44\x41\x54\x58\xc3\xad\ +\x57\x5b\x50\x93\x67\x1a\xf6\xca\xce\xec\xcc\xf6\x62\x2f\xbc\xd9\ +\xe9\xce\xec\x6e\xbd\xda\xd9\x9b\xb5\xce\xba\x3b\x7b\xb0\xad\xcc\ +\x7a\xb1\xce\xce\x3a\xb3\x76\x54\x70\x75\xdb\xe2\x81\xd6\xb6\x54\ +\x04\xbb\xa5\x20\x6d\xc1\x82\x06\x08\x07\x51\x42\x80\x80\x80\x02\ +\x21\x81\x10\x92\x40\x48\x10\x73\x24\x21\x67\x72\x80\x04\x42\x20\ +\x9c\x09\x47\xb5\x54\x78\xf6\xfb\x7e\x13\x16\x30\x58\x8b\x7d\x67\ +\x9e\xf9\x2f\x92\xfc\xcf\xfb\x3e\xcf\xfb\xbe\xdf\x97\x5d\x00\x76\ +\xfd\x98\x20\xf1\x0b\x82\x14\x02\x03\xc1\x75\x82\x03\xcf\xfd\xfe\ +\x8f\x48\xbc\x9b\x20\xe1\x57\xaf\xef\xb5\x2a\x8c\xd6\x65\xdb\x02\ +\x60\x19\x1e\x5b\x09\x27\xf1\x33\xfa\x19\x81\x22\xfc\xdc\x3e\x76\ +\x48\x7e\x8a\xa0\xb9\xb6\x59\x1c\x32\xcf\xad\x42\x39\xfe\x1d\x44\ +\xf6\x51\xd8\xc7\xe6\xe8\x87\x86\x3d\x7b\xf6\x58\x53\x52\xae\x2c\ +\xca\x3a\x3a\x10\x4e\xe2\xe5\x49\xc3\xc4\x31\x04\xb7\x3e\x49\xf9\ +\x2c\x60\x9b\x5d\x59\x53\x4d\x03\x4d\xb6\x11\x34\xeb\xfb\x20\x31\ +\x79\x60\x19\x9d\xc5\xbb\xef\xbe\x3f\xc5\xab\xbe\x83\xf1\x89\x29\ +\x4c\x4f\xcf\xae\x92\xef\xd7\xbc\x74\x02\x11\x9f\x0f\xbe\x1d\xe3\ +\xb2\x04\x43\x4f\xb4\x33\x40\x8b\x7b\x06\xcd\x3d\x2e\x34\xeb\xec\ +\xa8\x57\xf6\x20\x87\x53\x85\x32\x5e\x35\x43\xbc\xb0\xf4\x90\x81\ +\xc1\x60\x5c\x26\xbf\x4b\x7c\xe1\x04\x48\x1c\x24\x38\x41\xfd\xdd\ +\xea\x73\x27\xf1\xb9\x27\x04\x48\x87\x97\xc1\xd7\xbb\x20\x22\x55\ +\x37\xdc\x37\xa2\xb8\x4e\x88\x2c\x56\x3e\xcc\x56\xdb\x3a\x71\x04\ +\x2c\x16\x6b\x2c\xfc\xce\xe7\x27\x10\x91\x36\x93\x95\x3f\x46\x7d\ +\xa5\xfe\x12\xc4\x6f\xf4\x59\x31\xb6\x02\x7e\xef\x20\x5a\x7b\x9c\ +\xe0\x3f\x30\xa1\x4c\x28\x43\x46\x0e\x1b\xb2\x0e\xf9\x26\xd2\xf9\ +\xc5\x65\xcc\x2d\x2c\x21\x34\xbf\x88\xbd\x7b\xf7\x5a\xc9\x3b\x7e\ +\xba\x6d\x02\x24\x7e\x43\x90\x46\x3d\x35\x13\x69\x75\xb3\x80\xd2\ +\x3f\x0f\xcb\xc4\xe2\x9a\x50\xa1\x5a\xb4\x6c\xf1\x59\xa0\xb6\xa0\ +\xa6\x5d\x8d\x2f\xb2\x73\x71\xb7\x9e\xff\x0c\x31\x25\x9d\x09\xcd\ +\x63\x62\x6a\x06\x83\x43\x81\x27\xe4\xdd\xbc\x2d\xd3\xb0\x3b\x92\ +\x03\x33\x26\xd4\x53\xb5\xd3\xfb\x58\x4f\x88\xc5\x03\x21\x88\x2c\ +\x43\x50\xba\x46\xd0\xed\x09\x42\xe5\x9b\x42\x9b\x73\xfc\xa9\xcf\ +\x5a\x1b\xee\x2a\x74\xc8\xbc\xc9\x45\x09\xa7\x6c\x93\xcf\x9b\x88\ +\x27\xa7\x11\x18\x1d\xc3\x80\x6f\x08\xa2\xd6\xd6\x25\xc2\x51\xdb\ +\x28\x12\x87\xc6\x1f\xaf\x82\x2f\x62\x94\x4d\x89\x24\x90\x22\xea\ +\x52\x2d\x9a\x42\xab\xe8\x18\x79\x04\xa1\xc5\xcf\x10\x53\x74\xf6\ +\x0d\xa3\xd3\xe1\x87\xd4\x3c\x80\x16\xbd\x03\x0d\x5d\x06\x14\xd5\ +\x0a\x90\x91\x95\x0d\x2f\x79\xf1\xc6\xaa\xa9\xd4\xb3\x73\x0b\x4c\ +\xc5\x94\xd8\xdd\xef\x85\xc9\x62\x05\xb7\xbc\x12\xa5\xe5\x95\x4b\ +\x13\xf3\xcb\xab\x23\x0f\x01\x37\xd9\x11\xe6\xd9\x15\x84\x97\x15\ +\x13\x06\xcb\x3c\xd0\x68\xf2\xa3\xdd\xee\x5f\x27\x96\x3b\x86\x20\ +\xb3\x78\xd7\x7d\xe6\x08\xa4\xf8\x3c\x33\x1b\x2a\x8d\x36\xaa\xdc\ +\x53\x33\x21\x8c\x8e\x8d\x33\x15\xd3\x26\xe4\x37\x09\xf1\xc1\xc5\ +\x8f\x51\x73\xaf\x01\xbe\x65\x60\xfc\x11\xa0\x23\x13\x23\xf2\xce\ +\xa1\xbe\x5d\xb9\xb8\x51\x01\x83\x81\x74\x74\x4d\xa7\x1e\x0a\x67\ +\x80\xa9\xb8\xdd\xea\x83\xd8\xe8\x42\x93\xca\xcc\xf8\x7c\xe5\xcb\ +\x2c\x88\xda\x24\x51\x89\xa7\x67\xe7\x18\x1b\x86\x86\x47\x60\x77\ +\x38\x49\x82\x3a\x24\x7c\xf8\x21\xae\xb3\x0b\xe1\x99\x5c\x80\x6f\ +\x09\xd0\x90\xde\xe1\x0f\x2c\x81\xab\x1f\xc4\x7d\xef\x04\xdd\x07\ +\x1d\x61\xeb\xff\x9f\xc0\x1d\xb9\x16\x1d\xf6\x21\x48\xcc\xfd\x4f\ +\x7d\xee\xd4\x22\x9d\x55\x84\xaa\x9a\xba\x4d\x3e\x47\xe4\x8e\xf8\ +\x3c\x3c\x12\x84\xd3\xdd\x0f\xbd\xc1\x88\xc2\xe2\x62\x9c\x7e\x2f\ +\x1e\x3d\x03\x01\xf4\x2f\x02\x83\x84\xbc\xc5\xff\x2d\xee\x3a\x43\ +\x28\x51\x91\xf7\xf6\x05\xf1\x4e\xdc\xbf\x7d\x84\x33\x69\xe3\x20\ +\x18\xf4\x33\xab\xe0\xc9\x54\x68\x35\x38\xd1\xd8\xdd\x0b\x9e\x58\ +\x89\xac\x5c\xf6\x33\x3e\x47\xaa\x9e\x9c\x9e\x65\xe4\xee\xf7\x0e\ +\xa2\xd7\x6c\x41\x43\x03\x1f\x27\x62\xe3\x20\xe9\xd6\xc0\x45\xcf\ +\x01\x52\x90\x24\xb8\x86\xb2\x9e\x00\x6e\xb4\xdb\x50\xd1\x1b\x44\ +\x85\xce\x8b\x4a\x7e\x0b\x6d\xbe\x9b\x5b\x27\xd1\xa0\x99\xf8\x16\ +\x65\x22\x05\xee\x29\xf4\x28\x13\xc8\x90\x78\x35\x0b\x1a\xad\x3e\ +\xaa\xdc\x63\x13\x93\xf0\x0d\x0d\xc3\x66\xef\x83\xb4\x5d\x8e\xc4\ +\x4b\x97\x90\xc3\xca\xc3\xd4\x63\xc0\x4e\x7a\x49\x31\x4e\xfa\x89\ +\x94\x7f\x5b\x3b\x84\x7c\x85\x13\x25\x6a\x1f\x4a\xd5\x03\xe8\xf2\ +\x30\xa3\x28\x22\xf8\xf9\x33\x09\x74\x8f\x2e\xa1\xa8\xbe\x15\xa5\ +\x7c\x09\xb2\x4a\x2a\xf0\xcf\xe3\x71\x51\xe5\xf6\x07\x46\xd1\xe7\ +\xf2\x40\xab\x37\x20\xfd\x6a\x06\x92\xbf\x48\x83\xcd\x37\x02\x27\ +\xa9\xda\x40\x1a\x4c\xe0\x7b\x88\x52\x9d\x1f\x45\xdd\xfd\x0c\x71\ +\x41\x97\x1b\xc5\xdd\x1e\x88\x9c\x41\xfc\xf9\xcd\xb7\x5d\x84\xeb\ +\x6c\xb4\x43\xd0\x28\xf7\x4e\x23\xa7\xfc\x1e\xb2\x4b\xab\xf1\x51\ +\xea\x57\x48\xfe\x6f\xea\xfa\x58\x51\xb9\x47\x82\xe3\xf0\x0c\xf8\ +\x60\x34\x99\x51\xc9\xab\xc2\xfb\x67\xcf\x41\xfe\x40\x03\x3f\xe9\ +\x6e\xb2\x8d\x19\xb9\x6f\x69\x06\x19\xd2\x9b\x2a\x2f\x72\xe5\x0e\ +\xe4\x75\xf6\xa1\xf0\xbe\x1b\x1c\x95\x1b\xf9\x9c\xca\x29\xc2\x53\ +\xb8\xdd\x29\xdc\x2b\x76\x04\x90\x51\xc8\xc5\x95\x6b\x79\x38\x11\ +\x9f\x80\x9b\xb7\x6e\x33\x63\x15\x91\xdb\x6a\x73\x40\x22\x6d\xc7\ +\x85\x84\x0f\x50\x74\xbb\x0c\xf3\x2b\x80\x9f\x34\x58\xf7\x24\x20\ +\x1c\x7c\x84\x4a\xd3\x18\x38\xfa\x61\x86\x9c\x56\xfd\x55\xb3\x1e\ +\xac\x0e\x3b\xb8\x3a\x1f\xd9\x21\x1e\x7a\x2f\xe0\x13\xbc\xba\x5d\ +\x02\x26\xbe\xc1\x83\x94\x6f\xd8\x38\x9f\x9c\x8a\x03\x7f\x3d\x04\ +\x63\xaf\x99\xe9\x6e\x2a\xb7\x46\xd7\x83\xa4\xcb\xc9\x48\xff\x3a\ +\x8b\x8c\xd5\x3c\x53\xb5\x71\xf6\xa9\xdc\x35\xf6\x69\x5c\x97\x59\ +\x19\xd9\xbf\x6e\x21\xa7\xa0\xd4\x82\x74\xbe\x1a\x57\x9b\x34\x60\ +\xc9\xcc\x10\xbb\x82\xf8\xe5\xaf\x5f\xa7\x67\xc0\x3b\xe1\x75\x1f\ +\x35\xcc\x35\xdd\x66\x7c\x94\x96\x85\xb8\x73\x17\xf1\x97\x43\x31\ +\x4c\xd5\x74\x99\xf0\xaa\xaa\x71\xfa\xf4\x19\x68\xcc\x0e\x8c\x92\ +\x2d\x36\x14\x1e\xab\x5a\xc7\x0c\x78\xe6\x71\x70\x0d\x23\x4c\xa3\ +\x65\x8a\x0c\x8c\xec\xb4\xfa\x9c\xb6\x5e\x94\x74\x39\xd0\x66\xf7\ +\xaf\x1e\x3d\x11\x4b\x47\x2e\x6f\xc3\x79\x13\x35\x2c\x5c\x99\x1a\ +\xf1\x97\x3e\xc7\xd1\xd8\x33\xf8\x38\x31\x09\x86\x5e\x13\x1a\x9b\ +\x04\xf8\xdd\x1b\xfb\x51\x4f\xd4\xf1\x90\x99\xee\x9a\x00\xaa\xad\ +\x93\x60\x2b\x5d\x0c\x39\xf5\xbc\xf0\xbe\x67\xbd\xea\xcc\x16\x3d\ +\x4a\x55\x1e\x08\x6d\x01\x94\xd4\xf1\x43\xe1\x65\x53\x40\xf0\xca\ +\xf7\x25\x60\x2b\x6e\x6a\xc7\xa9\x84\x44\xc4\x1c\x39\x8a\xdc\x7c\ +\x36\x5a\x5a\xc5\x38\x14\x13\x83\x2f\x39\x35\xc8\x14\x6a\x98\xe6\ +\xa2\xd5\xd2\x27\xf5\x9a\x7a\x4c\x13\xa1\x49\x64\xb7\x99\x90\xdb\ +\x6e\x46\xb9\xda\x8d\x06\xa5\x76\x39\x2c\x39\x3d\xf9\x4e\x13\xec\ +\xd9\x72\xd4\x47\x0d\x3b\xab\x46\x88\x63\xff\x39\x8f\xdf\xee\xfb\ +\x3d\x1a\xf9\x02\x9c\xbf\x90\x80\x93\xf1\x17\x70\xa3\xad\x07\x19\ +\xc4\x4f\x4a\x14\xe9\x6e\xba\x58\xa8\xef\x2c\xfa\x94\x98\x50\x28\ +\xb7\x40\xe9\x0e\x3c\xf9\x57\xec\x29\x2a\x77\x2d\xc1\x67\x04\xfb\ +\xb6\xb9\xe4\x44\x8d\xbe\xcc\xb2\x5a\xfc\xe3\xe4\x19\x1c\x3c\xf4\ +\x37\xb0\x72\xf3\xb0\xef\xc0\x1f\x50\x20\xd1\x21\x89\x27\x65\x2a\ +\xa6\x4b\x85\x3e\xbf\x21\xd5\x46\xe4\x2e\x90\x5b\x21\xb0\x0c\xae\ +\xe5\xdc\xe2\xd2\x11\x13\x13\xe4\x87\x6f\x3c\xaf\x3c\xe7\x96\x15\ +\x35\x9c\x69\x45\xe5\xf8\xfb\xb1\x58\x1c\x3f\x19\x87\x37\xf6\xef\ +\xc7\x8d\x3a\x11\x92\xab\xa4\x0c\x21\xed\x70\xea\x35\x55\x21\x8b\ +\x34\x5b\xc9\x03\x37\x2a\x34\x6e\xd4\x49\x3a\x17\xc3\x72\x73\x08\ +\x8e\x6d\x95\xfb\x87\x24\xe0\x4a\x65\x73\x70\xe4\xf8\x29\x1c\x3e\ +\x7c\x98\x8c\x63\x2e\x32\x05\x2a\x5c\x22\xd5\xd3\x5d\x7e\x4d\xdc\ +\x0b\x36\xe9\x74\x76\xa7\x1d\x77\x8c\xe4\x88\xb6\xf9\x9e\x84\xb7\ +\x1a\x95\xfb\x22\xbd\x49\xfd\x80\x0b\x6d\xf4\x04\x32\x4a\x78\x4c\ +\x0f\x9c\x4b\x49\xc3\xb5\xa6\x2e\x7c\xc2\x6d\x65\x36\x59\xf1\x83\ +\x01\x5c\x97\x9a\xc1\x51\x7b\x20\xf3\x04\xd7\xce\x25\x26\x05\x36\ +\xc8\xfd\xc7\x9d\xc8\x1d\xd5\x82\xdc\x1a\x01\xce\x5e\x4e\x45\x81\ +\x58\x85\x78\xf6\x5d\x5c\xa9\x55\x90\xaa\xfb\xc0\x96\xdb\x50\xad\ +\x75\xe3\xae\x54\x41\x2f\x10\xca\x0d\x72\xbf\xba\xd3\x6a\xa3\x05\ +\xb7\xa2\x51\xf8\x1d\xaf\x43\x8d\x4f\xb9\x2d\x88\xcb\xe6\xe1\x9a\ +\x48\x8f\xaa\x1e\x2f\x9a\x35\xe6\xc7\x7f\x7a\xf3\x2d\x57\x78\xac\ +\xa8\xdc\xaf\xbd\xac\xdc\xd1\xe2\x08\xdd\x05\x5c\x75\x1f\xde\xcb\ +\xaf\x45\xb9\x76\x00\x32\x67\x60\xf5\xc2\xa7\x97\xa9\xdc\xf7\x08\ +\xd2\xa9\xdc\x3b\xf8\x03\xf3\xc2\xf1\x13\x82\xca\x1c\xee\x9d\x50\ +\x0b\x39\x94\xb8\x0d\xc2\xc8\x16\xa3\x17\x87\xc3\x2f\x22\xf7\x0e\ +\xff\xda\x6d\x8a\xdd\x61\x99\xd5\x1b\xb6\xd8\x6b\xbb\x5e\x32\xbe\ +\x2f\x89\xff\x01\x66\xb9\x5f\xfc\x11\x80\x3d\xcf\x00\x00\x00\x00\ +\x49\x45\x4e\x44\xae\x42\x60\x82\ +" + +qt_resource_name = b"\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x07\ +\x04\xca\x57\xa7\ +\x00\x6e\ +\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x06\x7c\x5a\x07\ +\x00\x63\ +\x00\x6f\x00\x70\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x07\ +\x0a\xc7\x57\x87\ +\x00\x63\ +\x00\x75\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x08\xc8\x58\x67\ +\x00\x73\ +\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x0a\xa8\xba\x47\ +\x00\x70\ +\x00\x61\x00\x73\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x06\xc1\x59\x87\ +\x00\x6f\ +\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x02\ +\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\x26\x00\x00\x00\x00\x00\x01\x00\x00\x03\x58\ +\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x18\xdd\ +\x00\x00\x00\x50\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xc5\ +\x00\x00\x00\x66\x00\x00\x00\x00\x00\x01\x00\x00\x12\x6c\ +\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x08\x96\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/painting/basicdrawing/basicdrawing.py b/examples/widgets/painting/basicdrawing/basicdrawing.py new file mode 100755 index 0000000..0dab1d9 --- /dev/null +++ b/examples/widgets/painting/basicdrawing/basicdrawing.py @@ -0,0 +1,350 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/painting/basicdrawing example from Qt v5.x, originating from PyQt""" + +from PySide2.QtCore import QPoint, QRect, QSize, Qt, qVersion +from PySide2.QtGui import (QBrush, QConicalGradient, QLinearGradient, QPainter, + QPainterPath, QPalette, QPen, QPixmap, QPolygon, QRadialGradient) +from PySide2.QtWidgets import (QApplication, QCheckBox, QComboBox, QGridLayout, + QLabel, QSpinBox, QWidget) + +import basicdrawing_rc + + +class RenderArea(QWidget): + points = QPolygon([ + QPoint(10, 80), + QPoint(20, 10), + QPoint(80, 30), + QPoint(90, 70) + ]) + + Line, Points, Polyline, Polygon, Rect, RoundedRect, Ellipse, Arc, Chord, \ + Pie, Path, Text, Pixmap = range(13) + + def __init__(self, parent=None): + super(RenderArea, self).__init__(parent) + + self.pen = QPen() + self.brush = QBrush() + self.pixmap = QPixmap() + + self.shape = RenderArea.Polygon + self.antialiased = False + self.transformed = False + self.pixmap.load(':/images/qt-logo.png') + + self.setBackgroundRole(QPalette.Base) + self.setAutoFillBackground(True) + + def minimumSizeHint(self): + return QSize(100, 100) + + def sizeHint(self): + return QSize(400, 200) + + def setShape(self, shape): + self.shape = shape + self.update() + + def setPen(self, pen): + self.pen = pen + self.update() + + def setBrush(self, brush): + self.brush = brush + self.update() + + def setAntialiased(self, antialiased): + self.antialiased = antialiased + self.update() + + def setTransformed(self, transformed): + self.transformed = transformed + self.update() + + def paintEvent(self, event): + rect = QRect(10, 20, 80, 60) + + path = QPainterPath() + path.moveTo(20, 80) + path.lineTo(20, 30) + path.cubicTo(80, 0, 50, 50, 80, 80) + + startAngle = 30 * 16 + arcLength = 120 * 16 + + painter = QPainter(self) + painter.setPen(self.pen) + painter.setBrush(self.brush) + if self.antialiased: + painter.setRenderHint(QPainter.Antialiasing) + + for x in range(0, self.width(), 100): + for y in range(0, self.height(), 100): + painter.save() + painter.translate(x, y) + if self.transformed: + painter.translate(50, 50) + painter.rotate(60.0) + painter.scale(0.6, 0.9) + painter.translate(-50, -50) + + if self.shape == RenderArea.Line: + painter.drawLine(rect.bottomLeft(), rect.topRight()) + elif self.shape == RenderArea.Points: + painter.drawPoints(RenderArea.points) + elif self.shape == RenderArea.Polyline: + painter.drawPolyline(RenderArea.points) + elif self.shape == RenderArea.Polygon: + painter.drawPolygon(RenderArea.points) + elif self.shape == RenderArea.Rect: + painter.drawRect(rect) + elif self.shape == RenderArea.RoundedRect: + painter.drawRoundedRect(rect, 25, 25, Qt.RelativeSize) + elif self.shape == RenderArea.Ellipse: + painter.drawEllipse(rect) + elif self.shape == RenderArea.Arc: + painter.drawArc(rect, startAngle, arcLength) + elif self.shape == RenderArea.Chord: + painter.drawChord(rect, startAngle, arcLength) + elif self.shape == RenderArea.Pie: + painter.drawPie(rect, startAngle, arcLength) + elif self.shape == RenderArea.Path: + painter.drawPath(path) + elif self.shape == RenderArea.Text: + painter.drawText(rect, Qt.AlignCenter, + "PySide 2\nQt %s" % qVersion()) + elif self.shape == RenderArea.Pixmap: + painter.drawPixmap(10, 10, self.pixmap) + + painter.restore() + + painter.setPen(self.palette().dark().color()) + painter.setBrush(Qt.NoBrush) + painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1)) + + +IdRole = Qt.UserRole + +class Window(QWidget): + def __init__(self): + super(Window, self).__init__() + + self.renderArea = RenderArea() + + self.shapeComboBox = QComboBox() + self.shapeComboBox.addItem("Polygon", RenderArea.Polygon) + self.shapeComboBox.addItem("Rectangle", RenderArea.Rect) + self.shapeComboBox.addItem("Rounded Rectangle", RenderArea.RoundedRect) + self.shapeComboBox.addItem("Ellipse", RenderArea.Ellipse) + self.shapeComboBox.addItem("Pie", RenderArea.Pie) + self.shapeComboBox.addItem("Chord", RenderArea.Chord) + self.shapeComboBox.addItem("Path", RenderArea.Path) + self.shapeComboBox.addItem("Line", RenderArea.Line) + self.shapeComboBox.addItem("Polyline", RenderArea.Polyline) + self.shapeComboBox.addItem("Arc", RenderArea.Arc) + self.shapeComboBox.addItem("Points", RenderArea.Points) + self.shapeComboBox.addItem("Text", RenderArea.Text) + self.shapeComboBox.addItem("Pixmap", RenderArea.Pixmap) + + shapeLabel = QLabel("&Shape:") + shapeLabel.setBuddy(self.shapeComboBox) + + self.penWidthSpinBox = QSpinBox() + self.penWidthSpinBox.setRange(0, 20) + self.penWidthSpinBox.setSpecialValueText("0 (cosmetic pen)") + + penWidthLabel = QLabel("Pen &Width:") + penWidthLabel.setBuddy(self.penWidthSpinBox) + + self.penStyleComboBox = QComboBox() + self.penStyleComboBox.addItem("Solid", Qt.SolidLine) + self.penStyleComboBox.addItem("Dash", Qt.DashLine) + self.penStyleComboBox.addItem("Dot", Qt.DotLine) + self.penStyleComboBox.addItem("Dash Dot", Qt.DashDotLine) + self.penStyleComboBox.addItem("Dash Dot Dot", Qt.DashDotDotLine) + self.penStyleComboBox.addItem("None", Qt.NoPen) + + penStyleLabel = QLabel("&Pen Style:") + penStyleLabel.setBuddy(self.penStyleComboBox) + + self.penCapComboBox = QComboBox() + self.penCapComboBox.addItem("Flat", Qt.FlatCap) + self.penCapComboBox.addItem("Square", Qt.SquareCap) + self.penCapComboBox.addItem("Round", Qt.RoundCap) + + penCapLabel = QLabel("Pen &Cap:") + penCapLabel.setBuddy(self.penCapComboBox) + + self.penJoinComboBox = QComboBox() + self.penJoinComboBox.addItem("Miter", Qt.MiterJoin) + self.penJoinComboBox.addItem("Bevel", Qt.BevelJoin) + self.penJoinComboBox.addItem("Round", Qt.RoundJoin) + + penJoinLabel = QLabel("Pen &Join:") + penJoinLabel.setBuddy(self.penJoinComboBox) + + self.brushStyleComboBox = QComboBox() + self.brushStyleComboBox.addItem("Linear Gradient", + Qt.LinearGradientPattern) + self.brushStyleComboBox.addItem("Radial Gradient", + Qt.RadialGradientPattern) + self.brushStyleComboBox.addItem("Conical Gradient", + Qt.ConicalGradientPattern) + self.brushStyleComboBox.addItem("Texture", Qt.TexturePattern) + self.brushStyleComboBox.addItem("Solid", Qt.SolidPattern) + self.brushStyleComboBox.addItem("Horizontal", Qt.HorPattern) + self.brushStyleComboBox.addItem("Vertical", Qt.VerPattern) + self.brushStyleComboBox.addItem("Cross", Qt.CrossPattern) + self.brushStyleComboBox.addItem("Backward Diagonal", Qt.BDiagPattern) + self.brushStyleComboBox.addItem("Forward Diagonal", Qt.FDiagPattern) + self.brushStyleComboBox.addItem("Diagonal Cross", Qt.DiagCrossPattern) + self.brushStyleComboBox.addItem("Dense 1", Qt.Dense1Pattern) + self.brushStyleComboBox.addItem("Dense 2", Qt.Dense2Pattern) + self.brushStyleComboBox.addItem("Dense 3", Qt.Dense3Pattern) + self.brushStyleComboBox.addItem("Dense 4", Qt.Dense4Pattern) + self.brushStyleComboBox.addItem("Dense 5", Qt.Dense5Pattern) + self.brushStyleComboBox.addItem("Dense 6", Qt.Dense6Pattern) + self.brushStyleComboBox.addItem("Dense 7", Qt.Dense7Pattern) + self.brushStyleComboBox.addItem("None", Qt.NoBrush) + + brushStyleLabel = QLabel("&Brush Style:") + brushStyleLabel.setBuddy(self.brushStyleComboBox) + + otherOptionsLabel = QLabel("Other Options:") + self.antialiasingCheckBox = QCheckBox("&Antialiasing") + self.transformationsCheckBox = QCheckBox("&Transformations") + + self.shapeComboBox.activated.connect(self.shapeChanged) + self.penWidthSpinBox.valueChanged.connect(self.penChanged) + self.penStyleComboBox.activated.connect(self.penChanged) + self.penCapComboBox.activated.connect(self.penChanged) + self.penJoinComboBox.activated.connect(self.penChanged) + self.brushStyleComboBox.activated.connect(self.brushChanged) + self.antialiasingCheckBox.toggled.connect(self.renderArea.setAntialiased) + self.transformationsCheckBox.toggled.connect(self.renderArea.setTransformed) + + mainLayout = QGridLayout() + mainLayout.setColumnStretch(0, 1) + mainLayout.setColumnStretch(3, 1) + mainLayout.addWidget(self.renderArea, 0, 0, 1, 4) + mainLayout.setRowMinimumHeight(1, 6) + mainLayout.addWidget(shapeLabel, 2, 1, Qt.AlignRight) + mainLayout.addWidget(self.shapeComboBox, 2, 2) + mainLayout.addWidget(penWidthLabel, 3, 1, Qt.AlignRight) + mainLayout.addWidget(self.penWidthSpinBox, 3, 2) + mainLayout.addWidget(penStyleLabel, 4, 1, Qt.AlignRight) + mainLayout.addWidget(self.penStyleComboBox, 4, 2) + mainLayout.addWidget(penCapLabel, 5, 1, Qt.AlignRight) + mainLayout.addWidget(self.penCapComboBox, 5, 2) + mainLayout.addWidget(penJoinLabel, 6, 1, Qt.AlignRight) + mainLayout.addWidget(self.penJoinComboBox, 6, 2) + mainLayout.addWidget(brushStyleLabel, 7, 1, Qt.AlignRight) + mainLayout.addWidget(self.brushStyleComboBox, 7, 2) + mainLayout.setRowMinimumHeight(8, 6) + mainLayout.addWidget(otherOptionsLabel, 9, 1, Qt.AlignRight) + mainLayout.addWidget(self.antialiasingCheckBox, 9, 2) + mainLayout.addWidget(self.transformationsCheckBox, 10, 2) + self.setLayout(mainLayout) + + self.shapeChanged() + self.penChanged() + self.brushChanged() + self.antialiasingCheckBox.setChecked(True) + + self.setWindowTitle("Basic Drawing") + + def shapeChanged(self): + shape = self.shapeComboBox.itemData(self.shapeComboBox.currentIndex(), + IdRole) + self.renderArea.setShape(shape) + + def penChanged(self): + width = self.penWidthSpinBox.value() + style = Qt.PenStyle(self.penStyleComboBox.itemData( + self.penStyleComboBox.currentIndex(), IdRole)) + cap = Qt.PenCapStyle(self.penCapComboBox.itemData( + self.penCapComboBox.currentIndex(), IdRole)) + join = Qt.PenJoinStyle(self.penJoinComboBox.itemData( + self.penJoinComboBox.currentIndex(), IdRole)) + + self.renderArea.setPen(QPen(Qt.blue, width, style, cap, join)) + + def brushChanged(self): + style = Qt.BrushStyle(self.brushStyleComboBox.itemData( + self.brushStyleComboBox.currentIndex(), IdRole)) + + if style == Qt.LinearGradientPattern: + linearGradient = QLinearGradient(0, 0, 100, 100) + linearGradient.setColorAt(0.0, Qt.white) + linearGradient.setColorAt(0.2, Qt.green) + linearGradient.setColorAt(1.0, Qt.black) + self.renderArea.setBrush(QBrush(linearGradient)) + elif style == Qt.RadialGradientPattern: + radialGradient = QRadialGradient(50, 50, 50, 70, 70) + radialGradient.setColorAt(0.0, Qt.white) + radialGradient.setColorAt(0.2, Qt.green) + radialGradient.setColorAt(1.0, Qt.black) + self.renderArea.setBrush(QBrush(radialGradient)) + elif style == Qt.ConicalGradientPattern: + conicalGradient = QConicalGradient(50, 50, 150) + conicalGradient.setColorAt(0.0, Qt.white) + conicalGradient.setColorAt(0.2, Qt.green) + conicalGradient.setColorAt(1.0, Qt.black) + self.renderArea.setBrush(QBrush(conicalGradient)) + elif style == Qt.TexturePattern: + self.renderArea.setBrush(QBrush(QPixmap(':/images/brick.png'))) + else: + self.renderArea.setBrush(QBrush(Qt.green, style)) + + +if __name__ == '__main__': + + import sys + + app = QApplication(sys.argv) + window = Window() + window.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/painting/basicdrawing/basicdrawing.qrc b/examples/widgets/painting/basicdrawing/basicdrawing.qrc new file mode 100644 index 0000000..9d8a23a --- /dev/null +++ b/examples/widgets/painting/basicdrawing/basicdrawing.qrc @@ -0,0 +1,6 @@ + + + images/brick.png + images/qt-logo.png + + diff --git a/examples/widgets/painting/basicdrawing/basicdrawing_rc.py b/examples/widgets/painting/basicdrawing/basicdrawing_rc.py new file mode 100644 index 0000000..6e1668c --- /dev/null +++ b/examples/widgets/painting/basicdrawing/basicdrawing_rc.py @@ -0,0 +1,174 @@ +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Wed Dec 28 19:54:31 2005 +# by: The Resource Compiler for PyQt (Qt v4.1.0) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x03\x58\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x10\x08\x02\x00\x00\x00\xf8\x62\xea\x0e\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xb1\x8e\x7c\xfb\x51\x93\ +\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x7a\x25\x00\x00\x80\x83\ +\x00\x00\xf9\xff\x00\x00\x80\xe8\x00\x00\x75\x30\x00\x00\xea\x60\ +\x00\x00\x3a\x97\x00\x00\x17\x6f\x97\xa9\x99\xd4\x00\x00\x02\xe3\ +\x49\x44\x41\x54\x38\xcb\x45\x94\xcb\x8d\x1e\x45\x10\xc7\x7f\x55\ +\xd5\x33\xb3\xf6\x6a\x9d\x09\x49\x90\x04\x0e\x05\x09\x99\x78\xe0\ +\xc4\xc1\x12\x07\x42\x20\x04\x08\xc1\x96\xd7\xcb\xb7\xf3\xcd\xf4\ +\xa3\xaa\x38\x4c\x5b\xee\x73\xbd\xfa\xff\x92\xcf\xff\xfc\xa6\x86\ +\x1a\x28\x2a\x20\x64\x42\x92\x41\x04\x38\x1e\xa4\x93\x41\x38\x39\ +\x40\x11\x41\x94\x8c\x59\x93\x57\x41\x42\x62\x2b\x65\xc3\x16\xac\ +\x20\x85\xf7\x3f\xbd\x2f\x08\xf5\xf6\x6f\xd9\x50\x25\x0c\x35\xc4\ +\x48\xc7\x3b\x31\x18\x8d\x18\xa4\x13\x4e\x74\x7c\x20\x82\x16\x80\ +\x74\xdc\xf1\x46\x0c\xc2\x11\x00\xa4\xb0\xbc\xe1\xe1\x09\xdb\xf8\ +\xf5\xc3\x87\x0c\x8a\x1a\xaa\xd4\x97\xbf\xcb\x82\x2e\xf3\x04\x9c\ +\xa8\xd4\x9d\x7e\xa7\x9f\xf3\xd8\xd1\xf0\x93\x70\xb4\x20\x82\x77\ +\xfa\xc1\x68\x10\x44\x02\xa8\x62\x0b\xeb\x23\xfd\x1d\x7f\xfe\xf5\ +\x31\x02\x51\x8a\x16\xd4\x10\xa5\xdd\x3e\x6a\x61\x7b\x22\x20\x06\ +\x7d\xe7\xfc\xc2\xf9\x1f\xc7\x33\xf5\x75\x82\xd0\x76\x46\x45\x94\ +\x18\x78\xa7\xef\x8c\x8e\x2a\xde\xc9\xc4\x0a\xdb\x3b\x1e\x9e\x58\ +\x1e\xf1\x0e\x01\x50\x44\x10\xc3\x0a\x61\x94\x07\xca\x86\x2e\x84\ +\x93\x01\x4c\x32\xc6\x81\x0f\xd2\x69\x07\x5e\x01\xc4\x88\x81\x18\ +\x0c\xbc\x33\x1a\xd1\xf1\x42\xd9\x68\x85\x4c\x62\x90\x49\x06\xe5\ +\xc2\x54\x0c\x51\x6c\x45\x0b\x19\x64\xe2\x83\x76\xe7\xf8\x4a\xdb\ +\x49\x68\x77\xc6\x9d\xd1\x89\x41\x06\xb6\x20\x4a\x3f\x21\x18\x8d\ +\xbe\x93\x49\x11\xbc\x61\x1b\xfd\xa0\xef\x8c\x13\xef\x17\x07\x05\ +\x51\x44\x11\x21\x9c\x51\xa9\x37\xce\x17\x8e\xaf\xd4\xdb\xe4\x60\ +\x9c\xdc\xbf\x90\x17\xb7\x83\xf5\x11\x51\xfa\x7d\x76\x89\x92\x8e\ +\x08\x11\x78\x87\xa4\x9f\xf4\x93\x51\x2f\x88\x14\xb9\x78\x1b\x8c\ +\xca\xf9\xc2\xf1\xc2\xf1\x3c\xfb\xc9\x89\xd5\x68\x78\xbb\xb4\x42\ +\x0c\x80\x51\x51\xa3\x6c\x2c\x6f\x21\x27\x6e\x5e\x51\x9d\xda\x8d\ +\xa0\x44\x00\x98\x12\x2b\x80\x57\xfa\x49\xbb\x51\x6f\xb4\x57\x32\ +\x09\x67\x1c\x64\xa0\x85\x7e\xc7\x3b\x5a\xe8\x8a\x15\xc8\x39\xb7\ +\xac\x08\x88\x52\x1e\xa6\x82\x33\x41\x20\x29\x17\x99\x62\xa8\x11\ +\x8e\x77\xbc\x11\x41\x38\x75\xa7\x1f\x53\x91\xa3\x7e\xf7\x97\x77\ +\x32\x88\x95\x70\x60\xee\x36\xc3\x16\x96\x47\x32\xbe\x41\xa7\x20\ +\x14\x51\x08\x62\xd0\x0e\x54\x19\x95\xe8\x4c\x62\x8c\x4c\x46\x65\ +\x1c\xd4\x1d\x3f\x49\x07\x21\x83\x14\xa2\x91\x49\xef\xa0\xac\x6f\ +\x91\x85\x64\xb2\x7d\xad\xbc\x0e\x2a\x99\x78\xa7\xed\xec\x9f\xb0\ +\x85\x18\x93\x0f\x35\xca\x4a\x37\x86\x53\x5f\x69\xfb\x34\xd4\x25\ +\x41\x35\x10\x46\x23\x1d\x35\xfa\x1d\x35\xb2\x93\x81\x28\x6a\x13\ +\x15\x5b\x28\x31\xe8\x07\xf7\x67\xf6\x4f\xac\x4f\xa8\xe1\x8d\x51\ +\x21\xb0\x82\x95\xef\x6e\xb8\xac\x24\x42\x0f\x60\xc6\x43\x79\x83\ +\x6d\x84\xd3\x4f\x00\xdb\xe6\xee\xeb\x44\x2b\x94\x70\x7c\xf0\xc7\ +\xef\x1f\x23\xd8\x9e\xa6\x4b\x11\xa2\xd1\x76\xda\x9d\xfa\x4a\xbb\ +\x31\x2a\x97\xf5\x2f\x45\x66\x80\x20\x8a\x1e\x58\xc5\xf6\xc9\xa2\ +\x1a\xba\x00\x94\x6f\x9b\x4a\x38\xbf\xfc\xfc\xe1\x32\x9e\xad\x88\ +\xcc\x54\xf1\x41\xdd\x89\x2b\xf2\xea\x4c\xba\xab\x87\x2b\x68\xa1\ +\xac\xe8\x82\x74\x54\x41\xd0\x05\x55\x00\x51\x74\x41\x8d\x4c\xe4\ +\xc7\x1f\x40\x67\x16\x5e\xc0\x5d\xef\x92\x53\xe6\x84\x3e\x06\x04\ +\x57\x5d\x06\xe4\xfc\x41\x59\xbf\xb5\x08\x57\x6e\x8a\xce\x39\x97\ +\xe4\xfe\x07\xb6\x84\x15\x24\x5c\xbc\x4f\xce\x00\x00\x00\x00\x49\ +\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x02\x15\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x50\x00\x00\x00\x50\x04\x03\x00\x00\x00\x7c\x3f\xef\x9e\ +\x00\x00\x00\x15\x50\x4c\x54\x45\xa3\xc2\x00\xf4\xf8\xe1\x8a\xa1\ +\x09\x14\x14\x18\x3f\x47\x16\xd3\xe2\x86\x70\x82\x0e\xfd\x17\x22\ +\x39\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x00\x48\x00\x00\x00\ +\x48\x00\x46\xc9\x6b\x3e\x00\x00\x01\xa6\x49\x44\x41\x54\x48\xc7\ +\xed\x56\x4b\x6e\x84\x30\x0c\x45\x66\xc4\x39\xa2\x49\xd5\x35\x22\ +\x11\x6b\xd4\x48\x73\x0e\x54\x10\xf7\x3f\x42\x0b\xc4\x4c\xfc\x83\ +\xd9\x75\xd1\xf1\x0a\xa2\x97\x17\xdb\xb1\x9f\x53\x55\x6f\xfb\x6b\ +\xbb\x2f\xcb\xfd\x1a\x05\x73\x0a\xbf\x16\x1f\xee\x1c\xd7\x6c\xb0\ +\x0d\x3a\x9e\xe2\x42\x61\xe3\x8b\xb8\x13\x24\x24\x0a\x8c\x96\x9f\ +\x53\x60\xd6\xeb\xb8\x5b\x10\x36\xa8\xc0\x24\x81\xf1\x45\x42\x9d\ +\x12\x09\xe3\x63\x59\xe6\x64\x53\x62\x6a\xf6\x2b\x81\xd9\xa4\xf4\ +\x19\x87\xff\x1f\x56\xe0\x89\xaf\xe7\x64\x39\x3d\x14\x27\xd2\x3f\ +\xa8\x27\x7f\xc9\xbd\x9d\x7a\xf2\x93\x6e\xc4\x35\x16\x37\xb0\xdd\ +\x7e\x75\xb6\x56\x4a\xe3\x46\xd7\x60\xfb\x06\xc5\xc9\x9a\x9e\xe2\ +\xf7\xf8\x93\x74\x72\x22\x4b\x90\xe9\x6b\x99\xc9\x44\x0e\xf1\x19\ +\xd0\xc8\x68\x52\x99\x44\xc0\x02\x07\x91\x72\x20\x5b\xf3\x6d\xb6\ +\x6c\xff\x51\x11\x3d\x25\x5c\x9d\x9c\x78\x7e\x08\x30\x13\x76\xf8\ +\x39\xf0\x34\x76\x94\xd0\x61\xd6\x04\xb0\x15\x84\xfb\xba\x01\x84\ +\xb2\xa9\x75\xe0\x50\x12\xf6\xd5\x05\x23\x84\x6b\xc6\xb6\x20\xcc\ +\x94\x37\x33\x6a\xa0\xca\x23\xa2\x3e\xf2\xe8\xa9\x9e\x78\x15\x18\ +\x09\xa1\x7e\x33\x78\xd7\x35\x93\x28\x71\xd7\xb8\x02\x54\x1f\x81\ +\x36\x52\x59\x8f\x9b\x53\x1d\xe6\x52\xa9\x47\xac\x70\x28\x98\x42\ +\x98\x64\x85\x1f\x3d\xb3\x77\x4b\x11\x3c\xeb\x99\xa3\x0b\x61\x73\ +\x1e\x4c\xe5\x7b\xf6\xb5\xef\x2a\x9a\x4f\xa7\x29\x85\xcb\x1a\x51\ +\x50\x46\x55\x7b\x3a\xae\x82\x52\x7b\x1a\x76\x0e\x98\xe2\xcc\xf5\ +\x11\x29\x2d\xc5\x3d\x90\xb3\x35\xbe\x50\xc3\x7b\xaa\xe1\xa6\x36\ +\xb3\xa9\xa0\x51\xaa\x73\xe6\x94\x92\xdb\x78\x31\x84\x4f\xa6\xd7\ +\xa4\xe2\xe2\x0b\xf3\x7a\xb2\xc6\x61\x93\x64\x85\xc7\x8b\xb7\xc7\ +\x1e\x84\xb7\x46\x36\x7f\xa5\x80\x41\xb8\xda\x92\xdf\x3d\xf9\x62\ +\x87\xb3\x97\xd4\xe7\xf7\xf1\x92\x02\xf7\x7e\x59\xfe\x3f\xfb\x01\ +\xbd\xf6\xdd\x91\xa2\xf3\xda\xd4\x00\x00\x00\x00\x49\x45\x4e\x44\ +\xae\x42\x60\x82\ +" + +qt_resource_name = b"\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x09\ +\x0f\x9e\x84\x47\ +\x00\x62\ +\x00\x72\x00\x69\x00\x63\x00\x6b\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0b\ +\x05\x52\xbf\x27\ +\x00\x71\ +\x00\x74\x00\x2d\x00\x6c\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\ +\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x03\x5c\ +\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/painting/basicdrawing/images/brick.png b/examples/widgets/painting/basicdrawing/images/brick.png new file mode 100644 index 0000000000000000000000000000000000000000..ab5e383dce423441b3278ae83bbd1a5ce01bdf40 GIT binary patch literal 856 zcmV-e1E>6nP)004R=004l4008;_004mK004C`008P>0026d000+nm#LZ50008x zNklPqpCPe zTkdnc`u~#8|NN$g8Yn6tWI~cb1UMd~lR-E+KoLQdj9HUcK|*3HWy2P%Acgloy)Ov$ z_HWrxB@8vhNXI)d7>yXD6Hat|Ac7WvblmYq48jorq_Di<;R)OL^}~k@iW;iam%qz` zF7pJOsMMW)r=RoK(eRUSv><|a`oU-rL;|Q{3+p5O9e@7yF#=JF7Ss@>-9Bnzdmu>Kc1A^%7J3SpE7%7!k4lL1UJ z#(@vgX$M{b#E5|y47@WM(eXmrXoXB-kVyvR!c+`VY()zhWa5K%=lDw7NoaS*ozaOw z2DTtdKOq>6zLQB2ykQ&tpzn+m?-vIJQA80ToKdMa&KHia)Z64>oZP>V7q^4;5mEYm zc8QXX2oZRPq@VPYQ7?!Txp*6l%K5_a!tp%&$%)lyc)PSh41iHlqiig1At!ELQJvb2 zphN(e5-WgL`boP{Z?so331=K+poMDw%kv?d+ehg&30$HOfjihErc@`!v)gK{XIYBONvR9W}C( zfhcMd6qIM*aD4E` z?;j)Bo~BC?qS1ERo%%|P)(;hbw5ItmuMtR6)=MRRB?RL5)o0#~(mv7GA(z?~+sIggyoYS6v3={6Sg2 iwFp;kiq1Kg)a}HDx_dh}l#7z8y*>%zJ3Zj=6+p(WhRd4%iyD!WA z8U=F-zZM_v9M^2H4LY9ULSf^JxDzBK3XGPYQ()HXxLXi5sK6wF@kK(N5((pDS>|L@ zVrup)f!U<=8HfKLR^W-R=VUoO6erR@s3(8Py`6gUlWxQ{7B{fnes#81O5;Y?VEYEe z$(o+x_xO`^aw1ER>1&zEL=N#8(8y>~nMA+>2a$3hTk~zUZ2wUaJtbV7oOpf+FcWt8 zIq)=gl+a<;1h5r^`?>*yvZ;08P!jgl1tWxO#Hh-mnLActI-#z(ahqIT|=lAiF0{4Dd{y+Nx Xz4qOaqVw9+00000NkvXXu0mjfxVr9- literal 0 HcmV?d00001 diff --git a/examples/widgets/painting/concentriccircles.py b/examples/widgets/painting/concentriccircles.py new file mode 100755 index 0000000..fa6c24f --- /dev/null +++ b/examples/widgets/painting/concentriccircles.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/painting/concentriccircles example from Qt v5.x, originating from PyQt""" + +from PySide2.QtCore import QRect, QRectF, QSize, Qt, QTimer +from PySide2.QtGui import QColor, QPainter, QPalette, QPen +from PySide2.QtWidgets import (QApplication, QFrame, QGridLayout, QLabel, + QSizePolicy, QWidget) + + +class CircleWidget(QWidget): + def __init__(self, parent=None): + super(CircleWidget, self).__init__(parent) + + self.floatBased = False + self.antialiased = False + self.frameNo = 0 + + self.setBackgroundRole(QPalette.Base) + self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + def setFloatBased(self, floatBased): + self.floatBased = floatBased + self.update() + + def setAntialiased(self, antialiased): + self.antialiased = antialiased + self.update() + + def minimumSizeHint(self): + return QSize(50, 50) + + def sizeHint(self): + return QSize(180, 180) + + def nextAnimationFrame(self): + self.frameNo += 1 + self.update() + + def paintEvent(self, event): + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing, self.antialiased) + painter.translate(self.width() / 2, self.height() / 2) + + for diameter in range(0, 256, 9): + delta = abs((self.frameNo % 128) - diameter / 2) + alpha = 255 - (delta * delta) / 4 - diameter + if alpha > 0: + painter.setPen(QPen(QColor(0, diameter / 2, 127, alpha), 3)) + + if self.floatBased: + painter.drawEllipse(QRectF(-diameter / 2.0, + -diameter / 2.0, diameter, diameter)) + else: + painter.drawEllipse(QRect(-diameter / 2, + -diameter / 2, diameter, diameter)) + + +class Window(QWidget): + def __init__(self): + super(Window, self).__init__() + + aliasedLabel = self.createLabel("Aliased") + antialiasedLabel = self.createLabel("Antialiased") + intLabel = self.createLabel("Int") + floatLabel = self.createLabel("Float") + + layout = QGridLayout() + layout.addWidget(aliasedLabel, 0, 1) + layout.addWidget(antialiasedLabel, 0, 2) + layout.addWidget(intLabel, 1, 0) + layout.addWidget(floatLabel, 2, 0) + + timer = QTimer(self) + + for i in range(2): + for j in range(2): + w = CircleWidget() + w.setAntialiased(j != 0) + w.setFloatBased(i != 0) + + timer.timeout.connect(w.nextAnimationFrame) + + layout.addWidget(w, i + 1, j + 1) + + timer.start(100) + self.setLayout(layout) + + self.setWindowTitle("Concentric Circles") + + def createLabel(self, text): + label = QLabel(text) + label.setAlignment(Qt.AlignCenter) + label.setMargin(2) + label.setFrameStyle(QFrame.Box | QFrame.Sunken) + return label + + +if __name__ == '__main__': + + import sys + + app = QApplication(sys.argv) + window = Window() + window.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/richtext/orderform.py b/examples/widgets/richtext/orderform.py new file mode 100755 index 0000000..fe81d4b --- /dev/null +++ b/examples/widgets/richtext/orderform.py @@ -0,0 +1,297 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/richtext/orderform example from Qt v5.x""" + +from PySide2 import QtCore, QtGui, QtWidgets, QtPrintSupport + + +class MainWindow(QtWidgets.QMainWindow): + def __init__(self): + super(MainWindow, self).__init__() + + fileMenu = QtWidgets.QMenu("&File", self) + newAction = fileMenu.addAction("&New...") + newAction.setShortcut("Ctrl+N") + self.printAction = fileMenu.addAction("&Print...", self.printFile) + self.printAction.setShortcut("Ctrl+P") + self.printAction.setEnabled(False) + quitAction = fileMenu.addAction("E&xit") + quitAction.setShortcut("Ctrl+Q") + self.menuBar().addMenu(fileMenu) + + self.letters = QtWidgets.QTabWidget() + + newAction.triggered.connect(self.openDialog) + quitAction.triggered.connect(self.close) + + self.setCentralWidget(self.letters) + self.setWindowTitle("Order Form") + + def createLetter(self, name, address, orderItems, sendOffers): + editor = QtWidgets.QTextEdit() + tabIndex = self.letters.addTab(editor, name) + self.letters.setCurrentIndex(tabIndex) + + cursor = editor.textCursor() + cursor.movePosition(QtGui.QTextCursor.Start) + topFrame = cursor.currentFrame() + topFrameFormat = topFrame.frameFormat() + topFrameFormat.setPadding(16) + topFrame.setFrameFormat(topFrameFormat) + + textFormat = QtGui.QTextCharFormat() + boldFormat = QtGui.QTextCharFormat() + boldFormat.setFontWeight(QtGui.QFont.Bold) + + referenceFrameFormat = QtGui.QTextFrameFormat() + referenceFrameFormat.setBorder(1) + referenceFrameFormat.setPadding(8) + referenceFrameFormat.setPosition(QtGui.QTextFrameFormat.FloatRight) + referenceFrameFormat.setWidth(QtGui.QTextLength(QtGui.QTextLength.PercentageLength, 40)) + cursor.insertFrame(referenceFrameFormat) + + cursor.insertText("A company", boldFormat) + cursor.insertBlock() + cursor.insertText("321 City Street") + cursor.insertBlock() + cursor.insertText("Industry Park") + cursor.insertBlock() + cursor.insertText("Another country") + + cursor.setPosition(topFrame.lastPosition()) + + cursor.insertText(name, textFormat) + for line in address.split("\n"): + cursor.insertBlock() + cursor.insertText(line) + + cursor.insertBlock() + cursor.insertBlock() + + date = QtCore.QDate.currentDate() + cursor.insertText("Date: %s" % date.toString('d MMMM yyyy'), + textFormat) + cursor.insertBlock() + + bodyFrameFormat = QtGui.QTextFrameFormat() + bodyFrameFormat.setWidth(QtGui.QTextLength(QtGui.QTextLength.PercentageLength, 100)) + cursor.insertFrame(bodyFrameFormat) + + cursor.insertText("I would like to place an order for the following " + "items:", textFormat) + cursor.insertBlock() + cursor.insertBlock() + + orderTableFormat = QtGui.QTextTableFormat() + orderTableFormat.setAlignment(QtCore.Qt.AlignHCenter) + orderTable = cursor.insertTable(1, 2, orderTableFormat) + + orderFrameFormat = cursor.currentFrame().frameFormat() + orderFrameFormat.setBorder(1) + cursor.currentFrame().setFrameFormat(orderFrameFormat) + + cursor = orderTable.cellAt(0, 0).firstCursorPosition() + cursor.insertText("Product", boldFormat) + cursor = orderTable.cellAt(0, 1).firstCursorPosition() + cursor.insertText("Quantity", boldFormat) + + for text, quantity in orderItems: + row = orderTable.rows() + + orderTable.insertRows(row, 1) + cursor = orderTable.cellAt(row, 0).firstCursorPosition() + cursor.insertText(text, textFormat) + cursor = orderTable.cellAt(row, 1).firstCursorPosition() + cursor.insertText(str(quantity), textFormat) + + cursor.setPosition(topFrame.lastPosition()) + + cursor.insertBlock() + + cursor.insertText("Please update my records to take account of the " + "following privacy information:") + cursor.insertBlock() + + offersTable = cursor.insertTable(2, 2) + + cursor = offersTable.cellAt(0, 1).firstCursorPosition() + cursor.insertText("I want to receive more information about your " + "company's products and special offers.", textFormat) + cursor = offersTable.cellAt(1, 1).firstCursorPosition() + cursor.insertText("I do not want to receive any promotional " + "information from your company.", textFormat) + + if sendOffers: + cursor = offersTable.cellAt(0, 0).firstCursorPosition() + else: + cursor = offersTable.cellAt(1, 0).firstCursorPosition() + + cursor.insertText('X', boldFormat) + + cursor.setPosition(topFrame.lastPosition()) + cursor.insertBlock() + cursor.insertText("Sincerely,", textFormat) + cursor.insertBlock() + cursor.insertBlock() + cursor.insertBlock() + cursor.insertText(name) + + self.printAction.setEnabled(True) + + def createSample(self): + dialog = DetailsDialog('Dialog with default values', self) + self.createLetter('Mr Smith', + '12 High Street\nSmall Town\nThis country', + dialog.orderItems(), True) + + def openDialog(self): + dialog = DetailsDialog("Enter Customer Details", self) + + if dialog.exec_() == QtWidgets.QDialog.Accepted: + self.createLetter(dialog.senderName(), dialog.senderAddress(), + dialog.orderItems(), dialog.sendOffers()) + + def printFile(self): + editor = self.letters.currentWidget() + printer = QtPrintSupport.QPrinter() + + dialog = QtPrintSupport.QPrintDialog(printer, self) + dialog.setWindowTitle("Print Document") + + if editor.textCursor().hasSelection(): + dialog.addEnabledOption(QtPrintSupport.QAbstractPrintDialog.PrintSelection) + + if dialog.exec_() != QtWidgets.QDialog.Accepted: + return + + editor.print_(printer) + + +class DetailsDialog(QtWidgets.QDialog): + def __init__(self, title, parent): + super(DetailsDialog, self).__init__(parent) + + self.items = ("T-shirt", "Badge", "Reference book", "Coffee cup") + + nameLabel = QtWidgets.QLabel("Name:") + addressLabel = QtWidgets.QLabel("Address:") + addressLabel.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) + + self.nameEdit = QtWidgets.QLineEdit() + self.addressEdit = QtWidgets.QTextEdit() + self.offersCheckBox = QtWidgets.QCheckBox("Send information about " + "products and special offers:") + + self.setupItemsTable() + + buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel) + + buttonBox.accepted.connect(self.verify) + buttonBox.rejected.connect(self.reject) + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(nameLabel, 0, 0) + mainLayout.addWidget(self.nameEdit, 0, 1) + mainLayout.addWidget(addressLabel, 1, 0) + mainLayout.addWidget(self.addressEdit, 1, 1) + mainLayout.addWidget(self.itemsTable, 0, 2, 2, 1) + mainLayout.addWidget(self.offersCheckBox, 2, 1, 1, 2) + mainLayout.addWidget(buttonBox, 3, 0, 1, 3) + self.setLayout(mainLayout) + + self.setWindowTitle(title) + + def setupItemsTable(self): + self.itemsTable = QtWidgets.QTableWidget(len(self.items), 2) + + for row, item in enumerate(self.items): + name = QtWidgets.QTableWidgetItem(item) + name.setFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable) + self.itemsTable.setItem(row, 0, name) + quantity = QtWidgets.QTableWidgetItem('1') + self.itemsTable.setItem(row, 1, quantity) + + def orderItems(self): + orderList = [] + + for row in range(len(self.items)): + text = self.itemsTable.item(row, 0).text() + quantity = int(self.itemsTable.item(row, 1).data(QtCore.Qt.DisplayRole)) + orderList.append((text, max(0, quantity))) + + return orderList + + def senderName(self): + return self.nameEdit.text() + + def senderAddress(self): + return self.addressEdit.toPlainText() + + def sendOffers(self): + return self.offersCheckBox.isChecked() + + def verify(self): + if self.nameEdit.text() and self.addressEdit.toPlainText(): + self.accept() + return + + answer = QtWidgets.QMessageBox.warning(self, "Incomplete Form", + "The form does not contain all the necessary information.\n" + "Do you want to discard it?", + QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No) + + if answer == QtWidgets.QMessageBox.Yes: + self.reject() + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + window = MainWindow() + window.resize(640, 480) + window.show() + window.createSample() + sys.exit(app.exec_()) diff --git a/examples/widgets/richtext/syntaxhighlighter.py b/examples/widgets/richtext/syntaxhighlighter.py new file mode 100755 index 0000000..83621ca --- /dev/null +++ b/examples/widgets/richtext/syntaxhighlighter.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/richtext/syntaxhighlighter example from Qt v5.x""" + +from PySide2 import QtCore, QtGui, QtWidgets + + +class MainWindow(QtWidgets.QMainWindow): + def __init__(self, parent=None): + super(MainWindow, self).__init__(parent) + + self.setupFileMenu() + self.setupHelpMenu() + self.setupEditor() + + self.setCentralWidget(self.editor) + self.setWindowTitle("Syntax Highlighter") + + def about(self): + QtWidgets.QMessageBox.about(self, "About Syntax Highlighter", + "

The Syntax Highlighter example shows how to " \ + "perform simple syntax highlighting by subclassing the " \ + "QSyntaxHighlighter class and describing highlighting " \ + "rules using regular expressions.

") + + def newFile(self): + self.editor.clear() + + def openFile(self, path=None): + if not path: + path = QtWidgets.QFileDialog.getOpenFileName(self, "Open File", + '', "C++ Files (*.cpp *.h)") + + if path: + inFile = QtCore.QFile(path[0]) + if inFile.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text): + text = inFile.readAll() + + try: + # Python v3. + text = str(text, encoding='ascii') + except TypeError: + # Python v2. + text = str(text) + + self.editor.setPlainText(text) + + def setupEditor(self): + font = QtGui.QFont() + font.setFamily('Courier') + font.setFixedPitch(True) + font.setPointSize(10) + + self.editor = QtWidgets.QTextEdit() + self.editor.setFont(font) + + self.highlighter = Highlighter(self.editor.document()) + + def setupFileMenu(self): + fileMenu = QtWidgets.QMenu("&File", self) + self.menuBar().addMenu(fileMenu) + + fileMenu.addAction("&New...", self.newFile, "Ctrl+N") + fileMenu.addAction("&Open...", self.openFile, "Ctrl+O") + fileMenu.addAction("E&xit", QtWidgets.qApp.quit, "Ctrl+Q") + + def setupHelpMenu(self): + helpMenu = QtWidgets.QMenu("&Help", self) + self.menuBar().addMenu(helpMenu) + + helpMenu.addAction("&About", self.about) + helpMenu.addAction("About &Qt", QtWidgets.qApp.aboutQt) + + +class Highlighter(QtGui.QSyntaxHighlighter): + def __init__(self, parent=None): + super(Highlighter, self).__init__(parent) + + keywordFormat = QtGui.QTextCharFormat() + keywordFormat.setForeground(QtCore.Qt.darkBlue) + keywordFormat.setFontWeight(QtGui.QFont.Bold) + + keywordPatterns = ["\\bchar\\b", "\\bclass\\b", "\\bconst\\b", + "\\bdouble\\b", "\\benum\\b", "\\bexplicit\\b", "\\bfriend\\b", + "\\binline\\b", "\\bint\\b", "\\blong\\b", "\\bnamespace\\b", + "\\boperator\\b", "\\bprivate\\b", "\\bprotected\\b", + "\\bpublic\\b", "\\bshort\\b", "\\bsignals\\b", "\\bsigned\\b", + "\\bslots\\b", "\\bstatic\\b", "\\bstruct\\b", + "\\btemplate\\b", "\\btypedef\\b", "\\btypename\\b", + "\\bunion\\b", "\\bunsigned\\b", "\\bvirtual\\b", "\\bvoid\\b", + "\\bvolatile\\b"] + + self.highlightingRules = [(QtCore.QRegExp(pattern), keywordFormat) + for pattern in keywordPatterns] + + classFormat = QtGui.QTextCharFormat() + classFormat.setFontWeight(QtGui.QFont.Bold) + classFormat.setForeground(QtCore.Qt.darkMagenta) + self.highlightingRules.append((QtCore.QRegExp("\\bQ[A-Za-z]+\\b"), + classFormat)) + + singleLineCommentFormat = QtGui.QTextCharFormat() + singleLineCommentFormat.setForeground(QtCore.Qt.red) + self.highlightingRules.append((QtCore.QRegExp("//[^\n]*"), + singleLineCommentFormat)) + + self.multiLineCommentFormat = QtGui.QTextCharFormat() + self.multiLineCommentFormat.setForeground(QtCore.Qt.red) + + quotationFormat = QtGui.QTextCharFormat() + quotationFormat.setForeground(QtCore.Qt.darkGreen) + self.highlightingRules.append((QtCore.QRegExp("\".*\""), + quotationFormat)) + + functionFormat = QtGui.QTextCharFormat() + functionFormat.setFontItalic(True) + functionFormat.setForeground(QtCore.Qt.blue) + self.highlightingRules.append((QtCore.QRegExp("\\b[A-Za-z0-9_]+(?=\\()"), + functionFormat)) + + self.commentStartExpression = QtCore.QRegExp("/\\*") + self.commentEndExpression = QtCore.QRegExp("\\*/") + + def highlightBlock(self, text): + for pattern, format in self.highlightingRules: + expression = QtCore.QRegExp(pattern) + index = expression.indexIn(text) + while index >= 0: + length = expression.matchedLength() + self.setFormat(index, length, format) + index = expression.indexIn(text, index + length) + + self.setCurrentBlockState(0) + + startIndex = 0 + if self.previousBlockState() != 1: + startIndex = self.commentStartExpression.indexIn(text) + + while startIndex >= 0: + endIndex = self.commentEndExpression.indexIn(text, startIndex) + + if endIndex == -1: + self.setCurrentBlockState(1) + commentLength = len(text) - startIndex + else: + commentLength = endIndex - startIndex + self.commentEndExpression.matchedLength() + + self.setFormat(startIndex, commentLength, + self.multiLineCommentFormat) + startIndex = self.commentStartExpression.indexIn(text, + startIndex + commentLength) + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + window = MainWindow() + window.resize(640, 512) + window.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/richtext/syntaxhighlighter/examples/example b/examples/widgets/richtext/syntaxhighlighter/examples/example new file mode 100644 index 0000000..db8e7b1 --- /dev/null +++ b/examples/widgets/richtext/syntaxhighlighter/examples/example @@ -0,0 +1,79 @@ +TEMPLATE = app +LANGUAGE = C++ +TARGET = assistant + +CONFIG += qt warn_on +QT += xml network + +PROJECTNAME = Assistant +DESTDIR = ../../bin + +FORMS += finddialog.ui \ + helpdialog.ui \ + mainwindow.ui \ + settingsdialog.ui \ + tabbedbrowser.ui \ + topicchooser.ui + +SOURCES += main.cpp \ + helpwindow.cpp \ + topicchooser.cpp \ + docuparser.cpp \ + settingsdialog.cpp \ + index.cpp \ + profile.cpp \ + config.cpp \ + finddialog.cpp \ + helpdialog.cpp \ + mainwindow.cpp \ + tabbedbrowser.cpp + +HEADERS += helpwindow.h \ + topicchooser.h \ + docuparser.h \ + settingsdialog.h \ + index.h \ + profile.h \ + finddialog.h \ + helpdialog.h \ + mainwindow.h \ + tabbedbrowser.h \ + config.h + +RESOURCES += assistant.qrc + +DEFINES += QT_KEYWORDS +#DEFINES += QT_PALMTOPCENTER_DOCS +!network:DEFINES += QT_INTERNAL_NETWORK +else:QT += network +!xml: DEFINES += QT_INTERNAL_XML +else:QT += xml +include( ../../src/qt_professional.pri ) + +win32 { + LIBS += -lshell32 + RC_FILE = assistant.rc +} + +macos { + ICON = assistant.icns + TARGET = assistant +# QMAKE_INFO_PLIST = Info_mac.plist +} + +#target.path = $$[QT_INSTALL_BINS] +#INSTALLS += target + +#assistanttranslations.files = *.qm +#assistanttranslations.path = $$[QT_INSTALL_TRANSLATIONS] +#INSTALLS += assistanttranslations + +TRANSLATIONS = assistant_de.ts \ + assistant_fr.ts + + +unix:!contains(QT_CONFIG, zlib):LIBS += -lz + + +target.path=$$[QT_INSTALL_BINS] +INSTALLS += target diff --git a/examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter.py b/examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter.py new file mode 100644 index 0000000..32adb70 --- /dev/null +++ b/examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/richtext/syntaxhighlighter example from Qt v5.x""" + +import sys +import re +from PySide2 import QtCore, QtGui, QtWidgets + +import syntaxhighlighter_rc + + +class MainWindow(QtWidgets.QMainWindow): + def __init__(self, parent=None): + QtWidgets.QMainWindow.__init__(self, parent) + + self.highlighter = Highlighter() + + self.setupFileMenu() + self.setupEditor() + + self.setCentralWidget(self.editor) + self.setWindowTitle(self.tr("Syntax Highlighter")) + + def newFile(self): + self.editor.clear() + + def openFile(self, path=""): + fileName = path + + if fileName=="": + fileName,_ = QtWidgets.QFileDialog.getOpenFileName(self, self.tr("Open File"), "", + "qmake Files (*.pro *.prf *.pri)") + + if fileName!="": + inFile = QtCore.QFile(fileName) + if inFile.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text): + self.editor.setPlainText(str(inFile.readAll())) + + def setupEditor(self): + variableFormat = QtGui.QTextCharFormat() + variableFormat.setFontWeight(QtGui.QFont.Bold) + variableFormat.setForeground(QtCore.Qt.blue) + self.highlighter.addMapping("\\b[A-Z_]+\\b", variableFormat) + + singleLineCommentFormat = QtGui.QTextCharFormat() + singleLineCommentFormat.setBackground(QtGui.QColor("#77ff77")) + self.highlighter.addMapping("#[^\n]*", singleLineCommentFormat) + + quotationFormat = QtGui.QTextCharFormat() + quotationFormat.setBackground(QtCore.Qt.cyan) + quotationFormat.setForeground(QtCore.Qt.blue) + self.highlighter.addMapping("\".*\"", quotationFormat) + + functionFormat = QtGui.QTextCharFormat() + functionFormat.setFontItalic(True) + functionFormat.setForeground(QtCore.Qt.blue) + self.highlighter.addMapping("\\b[a-z0-9_]+\\(.*\\)", functionFormat) + + font = QtGui.QFont() + font.setFamily("Courier") + font.setFixedPitch(True) + font.setPointSize(10) + + self.editor = QtWidgets.QTextEdit() + self.editor.setFont(font) + self.highlighter.addToDocument(self.editor.document()) + + def setupFileMenu(self): + fileMenu = QtWidgets.QMenu(self.tr("&File"), self) + self.menuBar().addMenu(fileMenu) + + newFileAct = QtWidgets.QAction(self.tr("&New..."), self) + newFileAct.setShortcut(QtGui.QKeySequence(self.tr("Ctrl+N", "File|New"))) + self.connect(newFileAct, QtCore.SIGNAL("triggered()"), self.newFile) + fileMenu.addAction(newFileAct) + + openFileAct = QtWidgets.QAction(self.tr("&Open..."), self) + openFileAct.setShortcut(QtGui.QKeySequence(self.tr("Ctrl+O", "File|Open"))) + self.connect(openFileAct, QtCore.SIGNAL("triggered()"), self.openFile) + fileMenu.addAction(openFileAct) + + fileMenu.addAction(self.tr("E&xit"), QtWidgets.qApp, QtCore.SLOT("quit()"), + QtGui.QKeySequence(self.tr("Ctrl+Q", "File|Exit"))) + + +class Highlighter(QtCore.QObject): + def __init__(self, parent=None): + QtCore.QObject.__init__(self, parent) + + self.mappings = {} + + def addToDocument(self, doc): + self.connect(doc, QtCore.SIGNAL("contentsChange(int, int, int)"), self.highlight) + + def addMapping(self, pattern, format): + self.mappings[pattern] = format + + def highlight(self, position, removed, added): + doc = self.sender() + + block = doc.findBlock(position) + if not block.isValid(): + return + + if added > removed: + endBlock = doc.findBlock(position + added) + else: + endBlock = block + + while block.isValid() and not (endBlock < block): + self.highlightBlock(block) + block = block.next() + + def highlightBlock(self, block): + layout = block.layout() + text = block.text() + + overrides = [] + + for pattern in self.mappings: + for m in re.finditer(pattern,text): + range = QtGui.QTextLayout.FormatRange() + s,e = m.span() + range.start = s + range.length = e-s + range.format = self.mappings[pattern] + overrides.append(range) + + layout.setAdditionalFormats(overrides) + block.document().markContentsDirty(block.position(), block.length()) + + +if __name__ == '__main__': + app = QtWidgets.QApplication(sys.argv) + window = MainWindow() + window.resize(640, 512) + window.show() + window.openFile(":/examples/example") + sys.exit(app.exec_()) diff --git a/examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter.qrc b/examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter.qrc new file mode 100644 index 0000000..e5f9abf --- /dev/null +++ b/examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter.qrc @@ -0,0 +1,5 @@ + + + examples/example + + diff --git a/examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter_rc.py b/examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter_rc.py new file mode 100644 index 0000000..3751463 --- /dev/null +++ b/examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter_rc.py @@ -0,0 +1,183 @@ +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Wed Dec 28 19:56:58 2005 +# by: The Resource Compiler for PyQt (Qt v4.1.0) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x06\x79\ +\x54\ +\x45\x4d\x50\x4c\x41\x54\x45\x20\x3d\x20\x61\x70\x70\x0a\x4c\x41\ +\x4e\x47\x55\x41\x47\x45\x20\x3d\x20\x43\x2b\x2b\x0a\x54\x41\x52\ +\x47\x45\x54\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3d\x20\x61\x73\ +\x73\x69\x73\x74\x61\x6e\x74\x0a\x0a\x43\x4f\x4e\x46\x49\x47\x20\ +\x20\x20\x20\x20\x20\x20\x20\x2b\x3d\x20\x71\x74\x20\x77\x61\x72\ +\x6e\x5f\x6f\x6e\x0a\x51\x54\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x2b\x3d\x20\x78\x6d\x6c\x20\x6e\x65\x74\x77\x6f\x72\ +\x6b\x0a\x0a\x50\x52\x4f\x4a\x45\x43\x54\x4e\x41\x4d\x45\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3d\x20\x41\x73\x73\x69\x73\x74\x61\x6e\ +\x74\x0a\x44\x45\x53\x54\x44\x49\x52\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3d\x20\x2e\x2e\x2f\x2e\x2e\x2f\x62\x69\x6e\ +\x0a\x0a\x46\x4f\x52\x4d\x53\x20\x2b\x3d\x20\x66\x69\x6e\x64\x64\ +\x69\x61\x6c\x6f\x67\x2e\x75\x69\x20\x5c\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x68\x65\x6c\x70\x64\x69\x61\x6c\x6f\x67\x2e\x75\x69\ +\x20\x5c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6d\x61\x69\x6e\x77\ +\x69\x6e\x64\x6f\x77\x2e\x75\x69\x20\x5c\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x65\x74\x74\x69\x6e\x67\x73\x64\x69\x61\x6c\x6f\ +\x67\x2e\x75\x69\x20\x5c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x74\ +\x61\x62\x62\x65\x64\x62\x72\x6f\x77\x73\x65\x72\x2e\x75\x69\x20\ +\x5c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x74\x6f\x70\x69\x63\x63\ +\x68\x6f\x6f\x73\x65\x72\x2e\x75\x69\x0a\x0a\x53\x4f\x55\x52\x43\ +\x45\x53\x20\x2b\x3d\x20\x6d\x61\x69\x6e\x2e\x63\x70\x70\x20\x5c\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x68\x65\x6c\x70\x77\x69\x6e\ +\x64\x6f\x77\x2e\x63\x70\x70\x20\x5c\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x74\x6f\x70\x69\x63\x63\x68\x6f\x6f\x73\x65\x72\x2e\x63\ +\x70\x70\x20\x5c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x64\x6f\x63\ +\x75\x70\x61\x72\x73\x65\x72\x2e\x63\x70\x70\x20\x5c\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x65\x74\x74\x69\x6e\x67\x73\x64\x69\ +\x61\x6c\x6f\x67\x2e\x63\x70\x70\x20\x5c\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x64\x65\x78\x2e\x63\x70\x70\x20\x5c\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x66\x69\x6c\x65\x2e\x63\ +\x70\x70\x20\x5c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\ +\x66\x69\x67\x2e\x63\x70\x70\x20\x5c\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x66\x69\x6e\x64\x64\x69\x61\x6c\x6f\x67\x2e\x63\x70\x70\ +\x20\x5c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x68\x65\x6c\x70\x64\ +\x69\x61\x6c\x6f\x67\x2e\x63\x70\x70\x20\x5c\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x6d\x61\x69\x6e\x77\x69\x6e\x64\x6f\x77\x2e\x63\ +\x70\x70\x20\x5c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x74\x61\x62\ +\x62\x65\x64\x62\x72\x6f\x77\x73\x65\x72\x2e\x63\x70\x70\x0a\x0a\ +\x48\x45\x41\x44\x45\x52\x53\x20\x20\x20\x20\x20\x20\x20\x20\x2b\ +\x3d\x20\x68\x65\x6c\x70\x77\x69\x6e\x64\x6f\x77\x2e\x68\x20\x5c\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x74\x6f\x70\x69\x63\x63\x68\ +\x6f\x6f\x73\x65\x72\x2e\x68\x20\x5c\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x64\x6f\x63\x75\x70\x61\x72\x73\x65\x72\x2e\x68\x20\x5c\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x65\x74\x74\x69\x6e\x67\ +\x73\x64\x69\x61\x6c\x6f\x67\x2e\x68\x20\x5c\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x64\x65\x78\x2e\x68\x20\x5c\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x66\x69\x6c\x65\x2e\x68\x20\ +\x5c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x66\x69\x6e\x64\x64\x69\ +\x61\x6c\x6f\x67\x2e\x68\x20\x5c\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x68\x65\x6c\x70\x64\x69\x61\x6c\x6f\x67\x2e\x68\x20\x5c\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x6d\x61\x69\x6e\x77\x69\x6e\x64\ +\x6f\x77\x2e\x68\x20\x5c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x74\ +\x61\x62\x62\x65\x64\x62\x72\x6f\x77\x73\x65\x72\x2e\x68\x20\x5c\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x66\x69\x67\x2e\ +\x68\x0a\x0a\x52\x45\x53\x4f\x55\x52\x43\x45\x53\x20\x2b\x3d\x20\ +\x61\x73\x73\x69\x73\x74\x61\x6e\x74\x2e\x71\x72\x63\x0a\x0a\x44\ +\x45\x46\x49\x4e\x45\x53\x20\x2b\x3d\x20\x51\x54\x5f\x4b\x45\x59\ +\x57\x4f\x52\x44\x53\x0a\x23\x44\x45\x46\x49\x4e\x45\x53\x20\x2b\ +\x3d\x20\x20\x51\x54\x5f\x50\x41\x4c\x4d\x54\x4f\x50\x43\x45\x4e\ +\x54\x45\x52\x5f\x44\x4f\x43\x53\x0a\x21\x6e\x65\x74\x77\x6f\x72\ +\x6b\x3a\x44\x45\x46\x49\x4e\x45\x53\x20\x20\x20\x20\x20\x20\x20\ +\x20\x2b\x3d\x20\x51\x54\x5f\x49\x4e\x54\x45\x52\x4e\x41\x4c\x5f\ +\x4e\x45\x54\x57\x4f\x52\x4b\x0a\x65\x6c\x73\x65\x3a\x51\x54\x20\ +\x2b\x3d\x20\x6e\x65\x74\x77\x6f\x72\x6b\x0a\x21\x78\x6d\x6c\x3a\ +\x20\x44\x45\x46\x49\x4e\x45\x53\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x2b\x3d\x20\x51\x54\x5f\x49\x4e\ +\x54\x45\x52\x4e\x41\x4c\x5f\x58\x4d\x4c\x0a\x65\x6c\x73\x65\x3a\ +\x51\x54\x20\x2b\x3d\x20\x78\x6d\x6c\x0a\x69\x6e\x63\x6c\x75\x64\ +\x65\x28\x20\x2e\x2e\x2f\x2e\x2e\x2f\x73\x72\x63\x2f\x71\x74\x5f\ +\x70\x72\x6f\x66\x65\x73\x73\x69\x6f\x6e\x61\x6c\x2e\x70\x72\x69\ +\x20\x29\x0a\x0a\x77\x69\x6e\x33\x32\x20\x7b\x0a\x20\x20\x20\x20\ +\x4c\x49\x42\x53\x20\x2b\x3d\x20\x2d\x6c\x73\x68\x65\x6c\x6c\x33\ +\x32\x0a\x20\x20\x20\x20\x52\x43\x5f\x46\x49\x4c\x45\x20\x3d\x20\ +\x61\x73\x73\x69\x73\x74\x61\x6e\x74\x2e\x72\x63\x0a\x7d\x0a\x0a\ +\x6d\x61\x63\x20\x7b\x0a\x20\x20\x20\x20\x49\x43\x4f\x4e\x20\x3d\ +\x20\x61\x73\x73\x69\x73\x74\x61\x6e\x74\x2e\x69\x63\x6e\x73\x0a\ +\x20\x20\x20\x20\x54\x41\x52\x47\x45\x54\x20\x3d\x20\x61\x73\x73\ +\x69\x73\x74\x61\x6e\x74\x0a\x23\x20\x20\x20\x20\x51\x4d\x41\x4b\ +\x45\x5f\x49\x4e\x46\x4f\x5f\x50\x4c\x49\x53\x54\x20\x3d\x20\x49\ +\x6e\x66\x6f\x5f\x6d\x61\x63\x2e\x70\x6c\x69\x73\x74\x0a\x7d\x0a\ +\x0a\x23\x74\x61\x72\x67\x65\x74\x2e\x70\x61\x74\x68\x20\x3d\x20\ +\x24\x24\x5b\x51\x54\x5f\x49\x4e\x53\x54\x41\x4c\x4c\x5f\x42\x49\ +\x4e\x53\x5d\x0a\x23\x49\x4e\x53\x54\x41\x4c\x4c\x53\x20\x2b\x3d\ +\x20\x74\x61\x72\x67\x65\x74\x0a\x0a\x23\x61\x73\x73\x69\x73\x74\ +\x61\x6e\x74\x74\x72\x61\x6e\x73\x6c\x61\x74\x69\x6f\x6e\x73\x2e\ +\x66\x69\x6c\x65\x73\x20\x3d\x20\x2a\x2e\x71\x6d\x0a\x23\x61\x73\ +\x73\x69\x73\x74\x61\x6e\x74\x74\x72\x61\x6e\x73\x6c\x61\x74\x69\ +\x6f\x6e\x73\x2e\x70\x61\x74\x68\x20\x3d\x20\x24\x24\x5b\x51\x54\ +\x5f\x49\x4e\x53\x54\x41\x4c\x4c\x5f\x54\x52\x41\x4e\x53\x4c\x41\ +\x54\x49\x4f\x4e\x53\x5d\x0a\x23\x49\x4e\x53\x54\x41\x4c\x4c\x53\ +\x20\x2b\x3d\x20\x61\x73\x73\x69\x73\x74\x61\x6e\x74\x74\x72\x61\ +\x6e\x73\x6c\x61\x74\x69\x6f\x6e\x73\x0a\x0a\x54\x52\x41\x4e\x53\ +\x4c\x41\x54\x49\x4f\x4e\x53\x20\x20\x20\x20\x20\x20\x20\x20\x3d\ +\x20\x61\x73\x73\x69\x73\x74\x61\x6e\x74\x5f\x64\x65\x2e\x74\x73\ +\x20\x5c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x61\x73\x73\x69\x73\x74\x61\x6e\x74\x5f\x66\ +\x72\x2e\x74\x73\x0a\x0a\x0a\x75\x6e\x69\x78\x3a\x21\x63\x6f\x6e\ +\x74\x61\x69\x6e\x73\x28\x51\x54\x5f\x43\x4f\x4e\x46\x49\x47\x2c\ +\x20\x7a\x6c\x69\x62\x29\x3a\x4c\x49\x42\x53\x20\x2b\x3d\x20\x2d\ +\x6c\x7a\x0a\x0a\x0a\x74\x61\x72\x67\x65\x74\x2e\x70\x61\x74\x68\ +\x3d\x24\x24\x5b\x51\x54\x5f\x49\x4e\x53\x54\x41\x4c\x4c\x5f\x42\ +\x49\x4e\x53\x5d\x0a\x49\x4e\x53\x54\x41\x4c\x4c\x53\x20\x2b\x3d\ +\x20\x74\x61\x72\x67\x65\x74\x0a\ +" + +qt_resource_name = b"\ +\x00\x08\ +\x0e\x84\x7f\x43\ +\x00\x65\ +\x00\x78\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x73\ +\x00\x07\ +\x0c\xe8\x47\xe5\ +\x00\x65\ +\x00\x78\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ +\x00\x00\x00\x16\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/widgets/richtext/textobject/files/heart.svg b/examples/widgets/richtext/textobject/files/heart.svg new file mode 100644 index 0000000..ba5f050 --- /dev/null +++ b/examples/widgets/richtext/textobject/files/heart.svg @@ -0,0 +1,55 @@ + + + + + +Heart Left-Highlight +This is a normal valentines day heart. + + +holiday +valentines + +valentine +hash(0x8a091c0) +hash(0x8a0916c) +signs_and_symbols +hash(0x8a091f0) +day + + + + +Jon Phillips + + + + +Jon Phillips + + + + +Jon Phillips + + + +image/svg+xml + + +en + + + + + + + + + + + + + + + diff --git a/examples/widgets/richtext/textobject/textobject.py b/examples/widgets/richtext/textobject/textobject.py new file mode 100755 index 0000000..5866052 --- /dev/null +++ b/examples/widgets/richtext/textobject/textobject.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/richtext/textobject example from Qt v5.x""" + +from PySide2 import QtCore, QtGui, QtWidgets, QtSvg + + +class SvgTextObject(QtCore.QObject, QtGui.QTextObjectInterface): + + def intrinsicSize(self, doc, posInDocument, format): + renderer = QtSvg.QSvgRenderer(format.property(Window.SvgData).toByteArray()) + size = renderer.defaultSize() + + if size.height() > 25: + size *= 25.0 / size.height() + + return QtCore.QSizeF(size) + + def drawObject(self, painter, rect, doc, posInDocument, format): + renderer = QtSvg.QSvgRenderer(format.property(Window.SvgData).toByteArray()) + renderer.render(painter, rect) + + +class Window(QtWidgets.QWidget): + + SvgTextFormat = QtGui.QTextFormat.UserObject + 1 + + SvgData = 1 + + def __init__(self): + super(Window, self).__init__() + + self.setupGui() + self.setupTextObject() + + self.setWindowTitle(self.tr("Text Object Example")) + + def insertTextObject(self): + fileName = self.fileNameLineEdit.text() + file = QtCore.QFile(fileName) + + if not file.open(QtCore.QIODevice.ReadOnly): + QtWidgets.QMessageBox.warning(self, self.tr("Error Opening File"), + self.tr("Could not open '%1'").arg(fileName)) + + svgData = file.readAll() + + svgCharFormat = QtGui.QTextCharFormat() + svgCharFormat.setObjectType(Window.SvgTextFormat) + svgCharFormat.setProperty(Window.SvgData, svgData) + + cursor = self.textEdit.textCursor() + cursor.insertText(u"\uFFFD", svgCharFormat) + self.textEdit.setTextCursor(cursor) + + def setupTextObject(self): + svgInterface = SvgTextObject(self) + self.textEdit.document().documentLayout().registerHandler(Window.SvgTextFormat, svgInterface) + + def setupGui(self): + fileNameLabel = QtWidgets.QLabel(self.tr("Svg File Name:")) + self.fileNameLineEdit = QtWidgets.QLineEdit() + insertTextObjectButton = QtWidgets.QPushButton(self.tr("Insert Image")) + + self.fileNameLineEdit.setText('./files/heart.svg') + QtCore.QObject.connect(insertTextObjectButton, QtCore.SIGNAL('clicked()'), self.insertTextObject) + + bottomLayout = QtWidgets.QHBoxLayout() + bottomLayout.addWidget(fileNameLabel) + bottomLayout.addWidget(self.fileNameLineEdit) + bottomLayout.addWidget(insertTextObjectButton) + + self.textEdit = QtWidgets.QTextEdit() + + mainLayout = QtWidgets.QVBoxLayout() + mainLayout.addWidget(self.textEdit) + mainLayout.addLayout(bottomLayout) + + self.setLayout(mainLayout) + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + window = Window() + window.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/state-machine/eventtrans.py b/examples/widgets/state-machine/eventtrans.py new file mode 100755 index 0000000..27349df --- /dev/null +++ b/examples/widgets/state-machine/eventtrans.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2010 velociraptor Genjix +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import * +from PySide2.QtCore import * + +class MainWindow(QMainWindow): + def __init__(self): + super(MainWindow, self).__init__() + button = QPushButton(self) + button.setGeometry(QRect(100, 100, 100, 100)) + + machine = QStateMachine(self) + s1 = QState() + s1.assignProperty(button, 'text', 'Outside') + s2 = QState() + s2.assignProperty(button, 'text', 'Inside') + + enterTransition = QEventTransition(button, QEvent.Enter) + enterTransition.setTargetState(s2) + s1.addTransition(enterTransition) + + leaveTransition = QEventTransition(button, QEvent.Leave) + leaveTransition.setTargetState(s1) + s2.addTransition(leaveTransition) + + s3 = QState() + s3.assignProperty(button, 'text', 'Pressing...') + + pressTransition = QEventTransition(button, QEvent.MouseButtonPress) + pressTransition.setTargetState(s3) + s2.addTransition(pressTransition) + + releaseTransition = QEventTransition(button, QEvent.MouseButtonRelease) + releaseTransition.setTargetState(s2) + s3.addTransition(releaseTransition) + + machine.addState(s1) + machine.addState(s2) + machine.addState(s3) + + machine.setInitialState(s1) + machine.start() + + self.setCentralWidget(button) + self.show() + +if __name__ == '__main__': + import sys + + app = QApplication(sys.argv) + mainWin = MainWindow() + sys.exit(app.exec_()) diff --git a/examples/widgets/state-machine/factstates.py b/examples/widgets/state-machine/factstates.py new file mode 100755 index 0000000..2f07a3f --- /dev/null +++ b/examples/widgets/state-machine/factstates.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2010 velociraptor Genjix +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import * +from PySide2.QtCore import * + +class Factorial(QObject): + xChanged = Signal(int) + def __init__(self): + super(Factorial, self).__init__() + self.xval = -1 + self.facval = 1 + def getX(self): + return self.xval + def setX(self, x): + if self.xval == x: + return + self.xval = x + self.xChanged.emit(x) + x = Property(int, getX, setX) + def getFact(self): + return self.facval + def setFact(self, fac): + self.facval = fac + fac = Property(int, getFact, setFact) + +class FactorialLoopTransition(QSignalTransition): + def __init__(self, fact): + super(FactorialLoopTransition, self).__init__(fact, SIGNAL('xChanged(int)')) + self.fact = fact + def eventTest(self, e): + if not super(FactorialLoopTransition, self).eventTest(e): + return False + return e.arguments()[0] > 1 + def onTransition(self, e): + x = e.arguments()[0] + fac = self.fact.fac + self.fact.fac = x * fac + self.fact.x = x - 1 + +class FactorialDoneTransition(QSignalTransition): + def __init__(self, fact): + super(FactorialDoneTransition, self).__init__(fact, SIGNAL('xChanged(int)')) + self.fact = fact + def eventTest(self, e): + if not super(FactorialDoneTransition, self).eventTest(e): + return False + return e.arguments()[0] <= 1 + def onTransition(self, e): + print(self.fact.fac) + +if __name__ == '__main__': + import sys + app = QCoreApplication(sys.argv) + factorial = Factorial() + machine = QStateMachine() + + compute = QState(machine) + compute.assignProperty(factorial, 'fac', 1) + compute.assignProperty(factorial, 'x', 6) + compute.addTransition(FactorialLoopTransition(factorial)) + + done = QFinalState(machine) + doneTransition = FactorialDoneTransition(factorial) + doneTransition.setTargetState(done) + compute.addTransition(doneTransition) + + machine.setInitialState(compute) + machine.finished.connect(app.quit) + machine.start() + + sys.exit(app.exec_()) diff --git a/examples/widgets/state-machine/pingpong.py b/examples/widgets/state-machine/pingpong.py new file mode 100755 index 0000000..9d924c5 --- /dev/null +++ b/examples/widgets/state-machine/pingpong.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2010 velociraptor Genjix +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import * +from PySide2.QtCore import * + +class PingEvent(QEvent): + def __init__(self): + super(PingEvent, self).__init__(QEvent.Type(QEvent.User+2)) +class PongEvent(QEvent): + def __init__(self): + super(PongEvent, self).__init__(QEvent.Type(QEvent.User+3)) + +class Pinger(QState): + def __init__(self, parent): + super(Pinger, self).__init__(parent) + def onEntry(self, e): + self.p = PingEvent() + self.machine().postEvent(self.p) + print('ping?') + +class PongTransition(QAbstractTransition): + def eventTest(self, e): + return e.type() == QEvent.User+3 + def onTransition(self, e): + self.p = PingEvent() + machine.postDelayedEvent(self.p, 500) + print('ping?') +class PingTransition(QAbstractTransition): + def eventTest(self, e): + return e.type() == QEvent.User+2 + def onTransition(self, e): + self.p = PongEvent() + machine.postDelayedEvent(self.p, 500) + print('pong!') + +if __name__ == '__main__': + import sys + app = QCoreApplication(sys.argv) + + machine = QStateMachine() + group = QState(QState.ParallelStates) + group.setObjectName('group') + + pinger = Pinger(group) + pinger.setObjectName('pinger') + pinger.addTransition(PongTransition()) + + ponger = QState(group) + ponger.setObjectName('ponger') + ponger.addTransition(PingTransition()) + + machine.addState(group) + machine.setInitialState(group) + machine.start() + + sys.exit(app.exec_()) diff --git a/examples/widgets/state-machine/rogue.py b/examples/widgets/state-machine/rogue.py new file mode 100755 index 0000000..fe74e6d --- /dev/null +++ b/examples/widgets/state-machine/rogue.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2010 velociraptor Genjix +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import * +from PySide2.QtGui import * +from PySide2.QtCore import * + +class MovementTransition(QEventTransition): + def __init__(self, window): + super(MovementTransition, self).__init__(window, QEvent.KeyPress) + self.window = window + def eventTest(self, event): + if event.type() == QEvent.StateMachineWrapped and \ + event.event().type() == QEvent.KeyPress: + key = event.event().key() + return key == Qt.Key_2 or key == Qt.Key_8 or \ + key == Qt.Key_6 or key == Qt.Key_4 + return False + def onTransition(self, event): + key = event.event().key() + if key == Qt.Key_4: + self.window.movePlayer(self.window.Left) + if key == Qt.Key_8: + self.window.movePlayer(self.window.Up) + if key == Qt.Key_6: + self.window.movePlayer(self.window.Right) + if key == Qt.Key_2: + self.window.movePlayer(self.window.Down) + +class Custom(QState): + def __init__(self, parent, mw): + super(Custom, self).__init__(parent) + self.mw = mw + + def onEntry(self, e): + print(self.mw.status) + +class MainWindow(QMainWindow): + def __init__(self): + super(MainWindow, self).__init__() + self.pX = 5 + self.pY = 5 + self.width = 35 + self.height = 20 + self.statusStr = '' + + database = QFontDatabase() + font = QFont() + if 'Monospace' in database.families(): + font = QFont('Monospace', 12) + else: + for family in database.families(): + if database.isFixedPitch(family): + font = QFont(family, 12) + self.setFont(font) + + self.setupMap() + self.buildMachine() + self.show() + def setupMap(self): + self.map = [] + qsrand(QTime(0, 0, 0).secsTo(QTime.currentTime())) + for x in range(self.width): + column = [] + for y in range(self.height): + if x == 0 or x == self.width - 1 or y == 0 or \ + y == self.height - 1 or qrand() % 40 == 0: + column.append('#') + else: + column.append('.') + self.map.append(column) + + def buildMachine(self): + machine = QStateMachine(self) + + inputState = Custom(machine, self) + # this line sets the status + self.status = 'hello!' + # however this line does not + inputState.assignProperty(self, 'status', 'Move the rogue with 2, 4, 6, and 8') + + machine.setInitialState(inputState) + machine.start() + + transition = MovementTransition(self) + inputState.addTransition(transition) + + quitState = QState(machine) + quitState.assignProperty(self, 'status', 'Really quit(y/n)?') + + yesTransition = QKeyEventTransition(self, QEvent.KeyPress, Qt.Key_Y) + self.finalState = QFinalState(machine) + yesTransition.setTargetState(self.finalState) + quitState.addTransition(yesTransition) + + noTransition = QKeyEventTransition(self, QEvent.KeyPress, Qt.Key_N) + noTransition.setTargetState(inputState) + quitState.addTransition(noTransition) + + quitTransition = QKeyEventTransition(self, QEvent.KeyPress, Qt.Key_Q) + quitTransition.setTargetState(quitState) + inputState.addTransition(quitTransition) + + machine.setInitialState(inputState) + machine.finished.connect(qApp.quit) + machine.start() + + def sizeHint(self): + metrics = QFontMetrics(self.font()) + return QSize(metrics.width('X') * self.width, metrics.height() * (self.height + 1)) + def paintEvent(self, event): + metrics = QFontMetrics(self.font()) + painter = QPainter(self) + fontHeight = metrics.height() + fontWidth = metrics.width('X') + + painter.fillRect(self.rect(), Qt.black) + painter.setPen(Qt.white) + + yPos = fontHeight + painter.drawText(QPoint(0, yPos), self.status) + for y in range(self.height): + yPos += fontHeight + xPos = 0 + for x in range(self.width): + if y == self.pY and x == self.pX: + xPos += fontWidth + continue + painter.drawText(QPoint(xPos, yPos), self.map[x][y]) + xPos += fontWidth + painter.drawText(QPoint(self.pX * fontWidth, (self.pY + 2) * fontHeight), '@') + def movePlayer(self, direction): + if direction == self.Left: + if self.map[self.pX - 1][self.pY] != '#': + self.pX -= 1 + elif direction == self.Right: + if self.map[self.pX + 1][self.pY] != '#': + self.pX += 1 + elif direction == self.Up: + if self.map[self.pX][self.pY - 1] != '#': + self.pY -= 1 + elif direction == self.Down: + if self.map[self.pX][self.pY + 1] != '#': + self.pY += 1 + self.repaint() + def getStatus(self): + return self.statusStr + def setStatus(self, status): + self.statusStr = status + self.repaint() + status = Property(str, getStatus, setStatus) + Up = 0 + Down = 1 + Left = 2 + Right = 3 + Width = 35 + Height = 20 + +if __name__ == '__main__': + import sys + app = QApplication(sys.argv) + mainWin = MainWindow() + sys.exit(app.exec_()) diff --git a/examples/widgets/state-machine/trafficlight.py b/examples/widgets/state-machine/trafficlight.py new file mode 100755 index 0000000..6f30347 --- /dev/null +++ b/examples/widgets/state-machine/trafficlight.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2010 velociraptor Genjix +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import * +from PySide2.QtGui import * +from PySide2.QtCore import * + +class LightWidget(QWidget): + def __init__(self, color): + super(LightWidget, self).__init__() + self.color = color + self.onVal = False + def isOn(self): + return self.onVal + def setOn(self, on): + if self.onVal == on: + return + self.onVal = on + self.update() + @Slot() + def turnOff(self): + self.setOn(False) + @Slot() + def turnOn(self): + self.setOn(True) + def paintEvent(self, e): + if not self.onVal: + return + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing) + painter.setBrush(self.color) + painter.drawEllipse(0, 0, self.width(), self.height()) + + on = Property(bool, isOn, setOn) + +class TrafficLightWidget(QWidget): + def __init__(self): + super(TrafficLightWidget, self).__init__() + vbox = QVBoxLayout(self) + self.redLight = LightWidget(Qt.red) + vbox.addWidget(self.redLight) + self.yellowLight = LightWidget(Qt.yellow) + vbox.addWidget(self.yellowLight) + self.greenLight = LightWidget(Qt.green) + vbox.addWidget(self.greenLight) + pal = QPalette() + pal.setColor(QPalette.Background, Qt.black) + self.setPalette(pal) + self.setAutoFillBackground(True) + +def createLightState(light, duration, parent=None): + lightState = QState(parent) + timer = QTimer(lightState) + timer.setInterval(duration) + timer.setSingleShot(True) + timing = QState(lightState) + timing.entered.connect(light.turnOn) + timing.entered.connect(timer.start) + timing.exited.connect(light.turnOff) + done = QFinalState(lightState) + timing.addTransition(timer, SIGNAL('timeout()'), done) + lightState.setInitialState(timing) + return lightState + +class TrafficLight(QWidget): + def __init__(self): + super(TrafficLight, self).__init__() + vbox = QVBoxLayout(self) + widget = TrafficLightWidget() + vbox.addWidget(widget) + vbox.setContentsMargins(0, 0, 0, 0) + + machine = QStateMachine(self) + redGoingYellow = createLightState(widget.redLight, 1000) + redGoingYellow.setObjectName('redGoingYellow') + yellowGoingGreen = createLightState(widget.redLight, 1000) + yellowGoingGreen.setObjectName('redGoingYellow') + redGoingYellow.addTransition(redGoingYellow, SIGNAL('finished()'), yellowGoingGreen) + greenGoingYellow = createLightState(widget.yellowLight, 3000) + greenGoingYellow.setObjectName('redGoingYellow') + yellowGoingGreen.addTransition(yellowGoingGreen, SIGNAL('finished()'), greenGoingYellow) + yellowGoingRed = createLightState(widget.greenLight, 1000) + yellowGoingRed.setObjectName('redGoingYellow') + greenGoingYellow.addTransition(greenGoingYellow, SIGNAL('finished()'), yellowGoingRed) + yellowGoingRed.addTransition(yellowGoingRed, SIGNAL('finished()'), redGoingYellow) + + machine.addState(redGoingYellow) + machine.addState(yellowGoingGreen) + machine.addState(greenGoingYellow) + machine.addState(yellowGoingRed) + machine.setInitialState(redGoingYellow) + machine.start() + +if __name__ == '__main__': + import sys + app = QApplication(sys.argv) + widget = TrafficLight() + widget.resize(110, 300) + widget.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/state-machine/twowaybutton.py b/examples/widgets/state-machine/twowaybutton.py new file mode 100755 index 0000000..0275d71 --- /dev/null +++ b/examples/widgets/state-machine/twowaybutton.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2010 velociraptor Genjix +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import * +from PySide2.QtCore import * + +if __name__ == '__main__': + import sys + app = QApplication(sys.argv) + button = QPushButton() + machine = QStateMachine() + + off = QState() + off.assignProperty(button, 'text', 'Off') + off.setObjectName('off') + + on = QState() + on.setObjectName('on') + on.assignProperty(button, 'text', 'On') + + off.addTransition(button, SIGNAL('clicked()'), on) + # Let's use the new style signals just for the kicks. + on.addTransition(button.clicked, off) + + machine.addState(off) + machine.addState(on) + machine.setInitialState(off) + machine.start() + button.resize(100, 50) + button.show() + sys.exit(app.exec_()) diff --git a/examples/widgets/tutorials/addressbook/part1.py b/examples/widgets/tutorials/addressbook/part1.py new file mode 100755 index 0000000..a424e14 --- /dev/null +++ b/examples/widgets/tutorials/addressbook/part1.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets + + +class AddressBook(QtWidgets.QWidget): + def __init__(self, parent=None): + super(AddressBook, self).__init__(parent) + + nameLabel = QtWidgets.QLabel("Name:") + self.nameLine = QtWidgets.QLineEdit() + + addressLabel = QtWidgets.QLabel("Address:") + self.addressText = QtWidgets.QTextEdit() + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(nameLabel, 0, 0) + mainLayout.addWidget(self.nameLine, 0, 1) + mainLayout.addWidget(addressLabel, 1, 0, QtCore.Qt.AlignTop) + mainLayout.addWidget(self.addressText, 1, 1) + + self.setLayout(mainLayout) + self.setWindowTitle("Simple Address Book") + + +if __name__ == '__main__': + import sys + + app = QtWidgets.QApplication(sys.argv) + + addressBook = AddressBook() + addressBook.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/tutorials/addressbook/part2.py b/examples/widgets/tutorials/addressbook/part2.py new file mode 100755 index 0000000..c6d1957 --- /dev/null +++ b/examples/widgets/tutorials/addressbook/part2.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets + + +class SortedDict(dict): + class Iterator(object): + def __init__(self, sorted_dict): + self._dict = sorted_dict + self._keys = sorted(self._dict.keys()) + self._nr_items = len(self._keys) + self._idx = 0 + + def __iter__(self): + return self + + def next(self): + if self._idx >= self._nr_items: + raise StopIteration + + key = self._keys[self._idx] + value = self._dict[key] + self._idx += 1 + + return key, value + + __next__ = next + + def __iter__(self): + return SortedDict.Iterator(self) + + iterkeys = __iter__ + + +class AddressBook(QtWidgets.QWidget): + def __init__(self, parent=None): + super(AddressBook, self).__init__(parent) + + self.contacts = SortedDict() + self.oldName = '' + self.oldAddress = '' + + nameLabel = QtWidgets.QLabel("Name:") + self.nameLine = QtWidgets.QLineEdit() + self.nameLine.setReadOnly(True) + + addressLabel = QtWidgets.QLabel("Address:") + self.addressText = QtWidgets.QTextEdit() + self.addressText.setReadOnly(True) + + self.addButton = QtWidgets.QPushButton("&Add") + self.addButton.show() + self.submitButton = QtWidgets.QPushButton("&Submit") + self.submitButton.hide() + self.cancelButton = QtWidgets.QPushButton("&Cancel") + self.cancelButton.hide() + + self.addButton.clicked.connect(self.addContact) + self.submitButton.clicked.connect(self.submitContact) + self.cancelButton.clicked.connect(self.cancel) + + buttonLayout1 = QtWidgets.QVBoxLayout() + buttonLayout1.addWidget(self.addButton, QtCore.Qt.AlignTop) + buttonLayout1.addWidget(self.submitButton) + buttonLayout1.addWidget(self.cancelButton) + buttonLayout1.addStretch() + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(nameLabel, 0, 0) + mainLayout.addWidget(self.nameLine, 0, 1) + mainLayout.addWidget(addressLabel, 1, 0, QtCore.Qt.AlignTop) + mainLayout.addWidget(self.addressText, 1, 1) + mainLayout.addLayout(buttonLayout1, 1, 2) + + self.setLayout(mainLayout) + self.setWindowTitle("Simple Address Book") + + def addContact(self): + self.oldName = self.nameLine.text() + self.oldAddress = self.addressText.toPlainText() + + self.nameLine.clear() + self.addressText.clear() + + self.nameLine.setReadOnly(False) + self.nameLine.setFocus(QtCore.Qt.OtherFocusReason) + self.addressText.setReadOnly(False) + + self.addButton.setEnabled(False) + self.submitButton.show() + self.cancelButton.show() + + def submitContact(self): + name = self.nameLine.text() + address = self.addressText.toPlainText() + + if name == "" or address == "": + QtWidgets.QMessageBox.information(self, "Empty Field", + "Please enter a name and address.") + return + + if name not in self.contacts: + self.contacts[name] = address + QtWidgets.QMessageBox.information(self, "Add Successful", + "\"%s\" has been added to your address book." % name) + else: + QtWidgets.QMessageBox.information(self, "Add Unsuccessful", + "Sorry, \"%s\" is already in your address book." % name) + return + + if not self.contacts: + self.nameLine.clear() + self.addressText.clear() + + self.nameLine.setReadOnly(True) + self.addressText.setReadOnly(True) + self.addButton.setEnabled(True) + self.submitButton.hide() + self.cancelButton.hide() + + def cancel(self): + self.nameLine.setText(self.oldName) + self.nameLine.setReadOnly(True) + + self.addressText.setText(self.oldAddress) + self.addressText.setReadOnly(True) + + self.addButton.setEnabled(True) + self.submitButton.hide() + self.cancelButton.hide() + + +if __name__ == '__main__': + import sys + + app = QtWidgets.QApplication(sys.argv) + + addressBook = AddressBook() + addressBook.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/tutorials/addressbook/part3.py b/examples/widgets/tutorials/addressbook/part3.py new file mode 100755 index 0000000..0a4769a --- /dev/null +++ b/examples/widgets/tutorials/addressbook/part3.py @@ -0,0 +1,247 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets + + +class SortedDict(dict): + class Iterator(object): + def __init__(self, sorted_dict): + self._dict = sorted_dict + self._keys = sorted(self._dict.keys()) + self._nr_items = len(self._keys) + self._idx = 0 + + def __iter__(self): + return self + + def next(self): + if self._idx >= self._nr_items: + raise StopIteration + + key = self._keys[self._idx] + value = self._dict[key] + self._idx += 1 + + return key, value + + __next__ = next + + def __iter__(self): + return SortedDict.Iterator(self) + + iterkeys = __iter__ + + +class AddressBook(QtWidgets.QWidget): + def __init__(self, parent=None): + super(AddressBook, self).__init__(parent) + + self.contacts = SortedDict() + self.oldName = '' + self.oldAddress = '' + + nameLabel = QtWidgets.QLabel("Name:") + self.nameLine = QtWidgets.QLineEdit() + self.nameLine.setReadOnly(True) + + addressLabel = QtWidgets.QLabel("Address:") + self.addressText = QtWidgets.QTextEdit() + self.addressText.setReadOnly(True) + + self.addButton = QtWidgets.QPushButton("&Add") + self.addButton.show() + self.submitButton = QtWidgets.QPushButton("&Submit") + self.submitButton.hide() + self.cancelButton = QtWidgets.QPushButton("&Cancel") + self.cancelButton.hide() + self.nextButton = QtWidgets.QPushButton("&Next") + self.nextButton.setEnabled(False) + self.previousButton = QtWidgets.QPushButton("&Previous") + self.previousButton.setEnabled(False) + + self.addButton.clicked.connect(self.addContact) + self.submitButton.clicked.connect(self.submitContact) + self.cancelButton.clicked.connect(self.cancel) + self.nextButton.clicked.connect(self.next) + self.previousButton.clicked.connect(self.previous) + + buttonLayout1 = QtWidgets.QVBoxLayout() + buttonLayout1.addWidget(self.addButton, QtCore.Qt.AlignTop) + buttonLayout1.addWidget(self.submitButton) + buttonLayout1.addWidget(self.cancelButton) + buttonLayout1.addStretch() + + buttonLayout2 = QtWidgets.QHBoxLayout() + buttonLayout2.addWidget(self.previousButton) + buttonLayout2.addWidget(self.nextButton) + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(nameLabel, 0, 0) + mainLayout.addWidget(self.nameLine, 0, 1) + mainLayout.addWidget(addressLabel, 1, 0, QtCore.Qt.AlignTop) + mainLayout.addWidget(self.addressText, 1, 1) + mainLayout.addLayout(buttonLayout1, 1, 2) + mainLayout.addLayout(buttonLayout2, 3, 1) + + self.setLayout(mainLayout) + self.setWindowTitle("Simple Address Book") + + def addContact(self): + self.oldName = self.nameLine.text() + self.oldAddress = self.addressText.toPlainText() + + self.nameLine.clear() + self.addressText.clear() + + self.nameLine.setReadOnly(False) + self.nameLine.setFocus(QtCore.Qt.OtherFocusReason) + self.addressText.setReadOnly(False) + + self.addButton.setEnabled(False) + self.nextButton.setEnabled(False) + self.previousButton.setEnabled(False) + self.submitButton.show() + self.cancelButton.show() + + def submitContact(self): + name = self.nameLine.text() + address = self.addressText.toPlainText() + + if name == "" or address == "": + QtWidgets.QMessageBox.information(self, "Empty Field", + "Please enter a name and address.") + return + + if name not in self.contacts: + self.contacts[name] = address + QtWidgets.QMessageBox.information(self, "Add Successful", + "\"%s\" has been added to your address book." % name) + else: + QtWidgets.QMessageBox.information(self, "Add Unsuccessful", + "Sorry, \"%s\" is already in your address book." % name) + return + + if not self.contacts: + self.nameLine.clear() + self.addressText.clear() + + self.nameLine.setReadOnly(True) + self.addressText.setReadOnly(True) + self.addButton.setEnabled(True) + + number = len(self.contacts) + self.nextButton.setEnabled(number > 1) + self.previousButton.setEnabled(number > 1) + + self.submitButton.hide() + self.cancelButton.hide() + + def cancel(self): + self.nameLine.setText(self.oldName) + self.addressText.setText(self.oldAddress) + + if not self.contacts: + self.nameLine.clear() + self.addressText.clear() + + self.nameLine.setReadOnly(True) + self.addressText.setReadOnly(True) + self.addButton.setEnabled(True) + + number = len(self.contacts) + self.nextButton.setEnabled(number > 1) + self.previousButton.setEnabled(number > 1) + + self.submitButton.hide() + self.cancelButton.hide() + + def next(self): + name = self.nameLine.text() + it = iter(self.contacts) + + try: + while True: + this_name, _ = it.next() + + if this_name == name: + next_name, next_address = it.next() + break + except StopIteration: + next_name, next_address = iter(self.contacts).next() + + self.nameLine.setText(next_name) + self.addressText.setText(next_address) + + def previous(self): + name = self.nameLine.text() + + prev_name = prev_address = None + for this_name, this_address in self.contacts: + if this_name == name: + break + + prev_name = this_name + prev_address = this_address + else: + self.nameLine.clear() + self.addressText.clear() + return + + if prev_name is None: + for prev_name, prev_address in self.contacts: + pass + + self.nameLine.setText(prev_name) + self.addressText.setText(prev_address) + + +if __name__ == '__main__': + import sys + + app = QtWidgets.QApplication(sys.argv) + + addressBook = AddressBook() + addressBook.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/tutorials/addressbook/part4.py b/examples/widgets/tutorials/addressbook/part4.py new file mode 100755 index 0000000..11d1d66 --- /dev/null +++ b/examples/widgets/tutorials/addressbook/part4.py @@ -0,0 +1,301 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets + + +class SortedDict(dict): + class Iterator(object): + def __init__(self, sorted_dict): + self._dict = sorted_dict + self._keys = sorted(self._dict.keys()) + self._nr_items = len(self._keys) + self._idx = 0 + + def __iter__(self): + return self + + def next(self): + if self._idx >= self._nr_items: + raise StopIteration + + key = self._keys[self._idx] + value = self._dict[key] + self._idx += 1 + + return key, value + + __next__ = next + + def __iter__(self): + return SortedDict.Iterator(self) + + iterkeys = __iter__ + + +class AddressBook(QtWidgets.QWidget): + NavigationMode, AddingMode, EditingMode = range(3) + + def __init__(self, parent=None): + super(AddressBook, self).__init__(parent) + + self.contacts = SortedDict() + self.oldName = '' + self.oldAddress = '' + self.currentMode = self.NavigationMode + + nameLabel = QtWidgets.QLabel("Name:") + self.nameLine = QtWidgets.QLineEdit() + self.nameLine.setReadOnly(True) + + addressLabel = QtWidgets.QLabel("Address:") + self.addressText = QtWidgets.QTextEdit() + self.addressText.setReadOnly(True) + + self.addButton = QtWidgets.QPushButton("&Add") + self.addButton.show() + self.editButton = QtWidgets.QPushButton("&Edit") + self.editButton.setEnabled(False) + self.removeButton = QtWidgets.QPushButton("&Remove") + self.removeButton.setEnabled(False) + self.submitButton = QtWidgets.QPushButton("&Submit") + self.submitButton.hide() + self.cancelButton = QtWidgets.QPushButton("&Cancel") + self.cancelButton.hide() + + self.nextButton = QtWidgets.QPushButton("&Next") + self.nextButton.setEnabled(False) + self.previousButton = QtWidgets.QPushButton("&Previous") + self.previousButton.setEnabled(False) + + self.addButton.clicked.connect(self.addContact) + self.submitButton.clicked.connect(self.submitContact) + self.editButton.clicked.connect(self.editContact) + self.removeButton.clicked.connect(self.removeContact) + self.cancelButton.clicked.connect(self.cancel) + self.nextButton.clicked.connect(self.next) + self.previousButton.clicked.connect(self.previous) + + buttonLayout1 = QtWidgets.QVBoxLayout() + buttonLayout1.addWidget(self.addButton) + buttonLayout1.addWidget(self.editButton) + buttonLayout1.addWidget(self.removeButton) + buttonLayout1.addWidget(self.submitButton) + buttonLayout1.addWidget(self.cancelButton) + buttonLayout1.addStretch() + + buttonLayout2 = QtWidgets.QHBoxLayout() + buttonLayout2.addWidget(self.previousButton) + buttonLayout2.addWidget(self.nextButton) + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(nameLabel, 0, 0) + mainLayout.addWidget(self.nameLine, 0, 1) + mainLayout.addWidget(addressLabel, 1, 0, QtCore.Qt.AlignTop) + mainLayout.addWidget(self.addressText, 1, 1) + mainLayout.addLayout(buttonLayout1, 1, 2) + mainLayout.addLayout(buttonLayout2, 3, 1) + + self.setLayout(mainLayout) + self.setWindowTitle("Simple Address Book") + + def addContact(self): + self.oldName = self.nameLine.text() + self.oldAddress = self.addressText.toPlainText() + + self.nameLine.clear() + self.addressText.clear() + + self.updateInterface(self.AddingMode) + + def editContact(self): + self.oldName = self.nameLine.text() + self.oldAddress = self.addressText.toPlainText() + + self.updateInterface(self.EditingMode) + + def submitContact(self): + name = self.nameLine.text() + address = self.addressText.toPlainText() + + if name == "" or address == "": + QtWidgets.QMessageBox.information(self, "Empty Field", + "Please enter a name and address.") + return + + if self.currentMode == self.AddingMode: + if name not in self.contacts: + self.contacts[name] = address + QtWidgets.QMessageBox.information(self, "Add Successful", + "\"%s\" has been added to your address book." % name) + else: + QtWidgets.QMessageBox.information(self, "Add Unsuccessful", + "Sorry, \"%s\" is already in your address book." % name) + return + + elif self.currentMode == self.EditingMode: + if self.oldName != name: + if name not in self.contacts: + QtWidgets.QMessageBox.information(self, "Edit Successful", + "\"%s\" has been edited in your address book." % self.oldName) + del self.contacts[self.oldName] + self.contacts[name] = address + else: + QtWidgets.QMessageBox.information(self, "Edit Unsuccessful", + "Sorry, \"%s\" is already in your address book." % name) + return + elif self.oldAddress != address: + QtWidgets.QMessageBox.information(self, "Edit Successful", + "\"%s\" has been edited in your address book." % name) + self.contacts[name] = address + + self.updateInterface(self.NavigationMode) + + def cancel(self): + self.nameLine.setText(self.oldName) + self.addressText.setText(self.oldAddress) + self.updateInterface(self.NavigationMode) + + def removeContact(self): + name = self.nameLine.text() + address = self.addressText.toPlainText() + + if name in self.contacts: + button = QtWidgets.QMessageBox.question(self, "Confirm Remove", + "Are you sure you want to remove \"%s\"?" % name, + QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) + + if button == QtWidgets.QMessageBox.Yes: + self.previous() + del self.contacts[name] + + QtWidgets.QMessageBox.information(self, "Remove Successful", + "\"%s\" has been removed from your address book." % name) + + self.updateInterface(self.NavigationMode) + + def next(self): + name = self.nameLine.text() + it = iter(self.contacts) + + try: + while True: + this_name, _ = it.next() + + if this_name == name: + next_name, next_address = it.next() + break + except StopIteration: + next_name, next_address = iter(self.contacts).next() + + self.nameLine.setText(next_name) + self.addressText.setText(next_address) + + def previous(self): + name = self.nameLine.text() + + prev_name = prev_address = None + for this_name, this_address in self.contacts: + if this_name == name: + break + + prev_name = this_name + prev_address = this_address + else: + self.nameLine.clear() + self.addressText.clear() + return + + if prev_name is None: + for prev_name, prev_address in self.contacts: + pass + + self.nameLine.setText(prev_name) + self.addressText.setText(prev_address) + + def updateInterface(self, mode): + self.currentMode = mode + + if self.currentMode in (self.AddingMode, self.EditingMode): + self.nameLine.setReadOnly(False) + self.nameLine.setFocus(QtCore.Qt.OtherFocusReason) + self.addressText.setReadOnly(False) + + self.addButton.setEnabled(False) + self.editButton.setEnabled(False) + self.removeButton.setEnabled(False) + + self.nextButton.setEnabled(False) + self.previousButton.setEnabled(False) + + self.submitButton.show() + self.cancelButton.show() + + elif self.currentMode == self.NavigationMode: + if not self.contacts: + self.nameLine.clear() + self.addressText.clear() + + self.nameLine.setReadOnly(True) + self.addressText.setReadOnly(True) + self.addButton.setEnabled(True) + + number = len(self.contacts) + self.editButton.setEnabled(number >= 1) + self.removeButton.setEnabled(number >= 1) + self.nextButton.setEnabled(number > 1) + self.previousButton.setEnabled(number >1 ) + + self.submitButton.hide() + self.cancelButton.hide() + + +if __name__ == '__main__': + import sys + + app = QtWidgets.QApplication(sys.argv) + + addressBook = AddressBook() + addressBook.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/tutorials/addressbook/part5.py b/examples/widgets/tutorials/addressbook/part5.py new file mode 100755 index 0000000..3f94ba4 --- /dev/null +++ b/examples/widgets/tutorials/addressbook/part5.py @@ -0,0 +1,361 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets + + +class SortedDict(dict): + class Iterator(object): + def __init__(self, sorted_dict): + self._dict = sorted_dict + self._keys = sorted(self._dict.keys()) + self._nr_items = len(self._keys) + self._idx = 0 + + def __iter__(self): + return self + + def next(self): + if self._idx >= self._nr_items: + raise StopIteration + + key = self._keys[self._idx] + value = self._dict[key] + self._idx += 1 + + return key, value + + __next__ = next + + def __iter__(self): + return SortedDict.Iterator(self) + + iterkeys = __iter__ + + +class AddressBook(QtWidgets.QWidget): + NavigationMode, AddingMode, EditingMode = range(3) + + def __init__(self, parent=None): + super(AddressBook, self).__init__(parent) + + self.contacts = SortedDict() + self.oldName = '' + self.oldAddress = '' + self.currentMode = self.NavigationMode + + nameLabel = QtWidgets.QLabel("Name:") + self.nameLine = QtWidgets.QLineEdit() + self.nameLine.setReadOnly(True) + + addressLabel = QtWidgets.QLabel("Address:") + self.addressText = QtWidgets.QTextEdit() + self.addressText.setReadOnly(True) + + self.addButton = QtWidgets.QPushButton("&Add") + self.addButton.show() + self.editButton = QtWidgets.QPushButton("&Edit") + self.editButton.setEnabled(False) + self.removeButton = QtWidgets.QPushButton("&Remove") + self.removeButton.setEnabled(False) + self.findButton = QtWidgets.QPushButton("&Find") + self.findButton.setEnabled(False) + self.submitButton = QtWidgets.QPushButton("&Submit") + self.submitButton.hide() + self.cancelButton = QtWidgets.QPushButton("&Cancel") + self.cancelButton.hide() + + self.nextButton = QtWidgets.QPushButton("&Next") + self.nextButton.setEnabled(False) + self.previousButton = QtWidgets.QPushButton("&Previous") + self.previousButton.setEnabled(False) + + self.dialog = FindDialog() + + self.addButton.clicked.connect(self.addContact) + self.submitButton.clicked.connect(self.submitContact) + self.editButton.clicked.connect(self.editContact) + self.removeButton.clicked.connect(self.removeContact) + self.findButton.clicked.connect(self.findContact) + self.cancelButton.clicked.connect(self.cancel) + self.nextButton.clicked.connect(self.next) + self.previousButton.clicked.connect(self.previous) + + buttonLayout1 = QtWidgets.QVBoxLayout() + buttonLayout1.addWidget(self.addButton) + buttonLayout1.addWidget(self.editButton) + buttonLayout1.addWidget(self.removeButton) + buttonLayout1.addWidget(self.findButton) + buttonLayout1.addWidget(self.submitButton) + buttonLayout1.addWidget(self.cancelButton) + buttonLayout1.addStretch() + + buttonLayout2 = QtWidgets.QHBoxLayout() + buttonLayout2.addWidget(self.previousButton) + buttonLayout2.addWidget(self.nextButton) + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(nameLabel, 0, 0) + mainLayout.addWidget(self.nameLine, 0, 1) + mainLayout.addWidget(addressLabel, 1, 0, QtCore.Qt.AlignTop) + mainLayout.addWidget(self.addressText, 1, 1) + mainLayout.addLayout(buttonLayout1, 1, 2) + mainLayout.addLayout(buttonLayout2, 2, 1) + + self.setLayout(mainLayout) + self.setWindowTitle("Simple Address Book") + + def addContact(self): + self.oldName = self.nameLine.text() + self.oldAddress = self.addressText.toPlainText() + + self.nameLine.clear() + self.addressText.clear() + + self.updateInterface(self.AddingMode) + + def editContact(self): + self.oldName = self.nameLine.text() + self.oldAddress = self.addressText.toPlainText() + + self.updateInterface(self.EditingMode) + + def submitContact(self): + name = self.nameLine.text() + address = self.addressText.toPlainText() + + if name == "" or address == "": + QtWidgets.QMessageBox.information(self, "Empty Field", + "Please enter a name and address.") + return + + if self.currentMode == self.AddingMode: + if name not in self.contacts: + self.contacts[name] = address + QtWidgets.QMessageBox.information(self, "Add Successful", + "\"%s\" has been added to your address book." % name) + else: + QtWidgets.QMessageBox.information(self, "Add Unsuccessful", + "Sorry, \"%s\" is already in your address book." % name) + return + + elif self.currentMode == self.EditingMode: + if self.oldName != name: + if name not in self.contacts: + QtWidgets.QMessageBox.information(self, "Edit Successful", + "\"%s\" has been edited in your address book." % self.oldName) + del self.contacts[self.oldName] + self.contacts[name] = address + else: + QtWidgets.QMessageBox.information(self, "Edit Unsuccessful", + "Sorry, \"%s\" is already in your address book." % name) + return + elif self.oldAddress != address: + QtWidgets.QMessageBox.information(self, "Edit Successful", + "\"%s\" has been edited in your address book." % name) + self.contacts[name] = address + + self.updateInterface(self.NavigationMode) + + def cancel(self): + self.nameLine.setText(self.oldName) + self.addressText.setText(self.oldAddress) + self.updateInterface(self.NavigationMode) + + def removeContact(self): + name = self.nameLine.text() + address = self.addressText.toPlainText() + + if name in self.contacts: + button = QtWidgets.QMessageBox.question(self, "Confirm Remove", + "Are you sure you want to remove \"%s\"?" % name, + QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) + + if button == QtWidgets.QMessageBox.Yes: + self.previous() + del self.contacts[name] + + QtWidgets.QMessageBox.information(self, "Remove Successful", + "\"%s\" has been removed from your address book." % name) + + self.updateInterface(self.NavigationMode) + + def next(self): + name = self.nameLine.text() + it = iter(self.contacts) + + try: + while True: + this_name, _ = it.next() + + if this_name == name: + next_name, next_address = it.next() + break + except StopIteration: + next_name, next_address = iter(self.contacts).next() + + self.nameLine.setText(next_name) + self.addressText.setText(next_address) + + def previous(self): + name = self.nameLine.text() + + prev_name = prev_address = None + for this_name, this_address in self.contacts: + if this_name == name: + break + + prev_name = this_name + prev_address = this_address + else: + self.nameLine.clear() + self.addressText.clear() + return + + if prev_name is None: + for prev_name, prev_address in self.contacts: + pass + + self.nameLine.setText(prev_name) + self.addressText.setText(prev_address) + + def findContact(self): + self.dialog.show() + + if self.dialog.exec_() == QtWidgets.QDialog.Accepted: + contactName = self.dialog.getFindText() + + if contactName in self.contacts: + self.nameLine.setText(contactName) + self.addressText.setText(self.contacts[contactName]) + else: + QtWidgets.QMessageBox.information(self, "Contact Not Found", + "Sorry, \"%s\" is not in your address book." % contactName) + return + + self.updateInterface(self.NavigationMode) + + def updateInterface(self, mode): + self.currentMode = mode + + if self.currentMode in (self.AddingMode, self.EditingMode): + self.nameLine.setReadOnly(False) + self.nameLine.setFocus(QtCore.Qt.OtherFocusReason) + self.addressText.setReadOnly(False) + + self.addButton.setEnabled(False) + self.editButton.setEnabled(False) + self.removeButton.setEnabled(False) + + self.nextButton.setEnabled(False) + self.previousButton.setEnabled(False) + + self.submitButton.show() + self.cancelButton.show() + + elif self.currentMode == self.NavigationMode: + if not self.contacts: + self.nameLine.clear() + self.addressText.clear() + + self.nameLine.setReadOnly(True) + self.addressText.setReadOnly(True) + self.addButton.setEnabled(True) + + number = len(self.contacts) + self.editButton.setEnabled(number >= 1) + self.removeButton.setEnabled(number >= 1) + self.findButton.setEnabled(number > 2) + self.nextButton.setEnabled(number > 1) + self.previousButton.setEnabled(number >1 ) + + self.submitButton.hide() + self.cancelButton.hide() + + +class FindDialog(QtWidgets.QDialog): + def __init__(self, parent=None): + super(FindDialog, self).__init__(parent) + + findLabel = QtWidgets.QLabel("Enter the name of a contact:") + self.lineEdit = QtWidgets.QLineEdit() + + self.findButton = QtWidgets.QPushButton("&Find") + self.findText = '' + + layout = QtWidgets.QHBoxLayout() + layout.addWidget(findLabel) + layout.addWidget(self.lineEdit) + layout.addWidget(self.findButton) + + self.setLayout(layout) + self.setWindowTitle("Find a Contact") + + self.findButton.clicked.connect(self.findClicked) + self.findButton.clicked.connect(self.accept) + + def findClicked(self): + text = self.lineEdit.text() + + if not text: + QtWidgets.QMessageBox.information(self, "Empty Field", + "Please enter a name.") + return + else: + self.findText = text + self.lineEdit.clear() + self.hide() + + def getFindText(self): + return self.findText + + +if __name__ == '__main__': + import sys + + app = QtWidgets.QApplication(sys.argv) + + addressBook = AddressBook() + addressBook.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/tutorials/addressbook/part6.py b/examples/widgets/tutorials/addressbook/part6.py new file mode 100755 index 0000000..ba81362 --- /dev/null +++ b/examples/widgets/tutorials/addressbook/part6.py @@ -0,0 +1,426 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +import pickle + +from PySide2 import QtCore, QtGui, QtWidgets + + +class SortedDict(dict): + class Iterator(object): + def __init__(self, sorted_dict): + self._dict = sorted_dict + self._keys = sorted(self._dict.keys()) + self._nr_items = len(self._keys) + self._idx = 0 + + def __iter__(self): + return self + + def next(self): + if self._idx >= self._nr_items: + raise StopIteration + + key = self._keys[self._idx] + value = self._dict[key] + self._idx += 1 + + return key, value + + __next__ = next + + def __iter__(self): + return SortedDict.Iterator(self) + + iterkeys = __iter__ + + +class AddressBook(QtWidgets.QWidget): + NavigationMode, AddingMode, EditingMode = range(3) + + def __init__(self, parent=None): + super(AddressBook, self).__init__(parent) + + self.contacts = SortedDict() + self.oldName = '' + self.oldAddress = '' + self.currentMode = self.NavigationMode + + nameLabel = QtWidgets.QLabel("Name:") + self.nameLine = QtWidgets.QLineEdit() + self.nameLine.setReadOnly(True) + + addressLabel = QtWidgets.QLabel("Address:") + self.addressText = QtWidgets.QTextEdit() + self.addressText.setReadOnly(True) + + self.addButton = QtWidgets.QPushButton("&Add") + self.addButton.show() + self.editButton = QtWidgets.QPushButton("&Edit") + self.editButton.setEnabled(False) + self.removeButton = QtWidgets.QPushButton("&Remove") + self.removeButton.setEnabled(False) + self.findButton = QtWidgets.QPushButton("&Find") + self.findButton.setEnabled(False) + self.submitButton = QtWidgets.QPushButton("&Submit") + self.submitButton.hide() + self.cancelButton = QtWidgets.QPushButton("&Cancel") + self.cancelButton.hide() + + self.nextButton = QtWidgets.QPushButton("&Next") + self.nextButton.setEnabled(False) + self.previousButton = QtWidgets.QPushButton("&Previous") + self.previousButton.setEnabled(False) + + self.loadButton = QtWidgets.QPushButton("&Load...") + self.loadButton.setToolTip("Load contacts from a file") + self.saveButton = QtWidgets.QPushButton("Sa&ve...") + self.saveButton.setToolTip("Save contacts to a file") + self.saveButton.setEnabled(False) + + self.dialog = FindDialog() + + self.addButton.clicked.connect(self.addContact) + self.submitButton.clicked.connect(self.submitContact) + self.editButton.clicked.connect(self.editContact) + self.removeButton.clicked.connect(self.removeContact) + self.findButton.clicked.connect(self.findContact) + self.cancelButton.clicked.connect(self.cancel) + self.nextButton.clicked.connect(self.next) + self.previousButton.clicked.connect(self.previous) + self.loadButton.clicked.connect(self.loadFromFile) + self.saveButton.clicked.connect(self.saveToFile) + + buttonLayout1 = QtWidgets.QVBoxLayout() + buttonLayout1.addWidget(self.addButton) + buttonLayout1.addWidget(self.editButton) + buttonLayout1.addWidget(self.removeButton) + buttonLayout1.addWidget(self.findButton) + buttonLayout1.addWidget(self.submitButton) + buttonLayout1.addWidget(self.cancelButton) + buttonLayout1.addWidget(self.loadButton) + buttonLayout1.addWidget(self.saveButton) + buttonLayout1.addStretch() + + buttonLayout2 = QtWidgets.QHBoxLayout() + buttonLayout2.addWidget(self.previousButton) + buttonLayout2.addWidget(self.nextButton) + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(nameLabel, 0, 0) + mainLayout.addWidget(self.nameLine, 0, 1) + mainLayout.addWidget(addressLabel, 1, 0, QtCore.Qt.AlignTop) + mainLayout.addWidget(self.addressText, 1, 1) + mainLayout.addLayout(buttonLayout1, 1, 2) + mainLayout.addLayout(buttonLayout2, 2, 1) + + self.setLayout(mainLayout) + self.setWindowTitle("Simple Address Book") + + def addContact(self): + self.oldName = self.nameLine.text() + self.oldAddress = self.addressText.toPlainText() + + self.nameLine.clear() + self.addressText.clear() + + self.updateInterface(self.AddingMode) + + def editContact(self): + self.oldName = self.nameLine.text() + self.oldAddress = self.addressText.toPlainText() + + self.updateInterface(self.EditingMode) + + def submitContact(self): + name = self.nameLine.text() + address = self.addressText.toPlainText() + + if name == "" or address == "": + QtWidgets.QMessageBox.information(self, "Empty Field", + "Please enter a name and address.") + return + + if self.currentMode == self.AddingMode: + if name not in self.contacts: + self.contacts[name] = address + QtWidgets.QMessageBox.information(self, "Add Successful", + "\"%s\" has been added to your address book." % name) + else: + QtWidgets.QMessageBox.information(self, "Add Unsuccessful", + "Sorry, \"%s\" is already in your address book." % name) + return + + elif self.currentMode == self.EditingMode: + if self.oldName != name: + if name not in self.contacts: + QtWidgets.QMessageBox.information(self, "Edit Successful", + "\"%s\" has been edited in your address book." % self.oldName) + del self.contacts[self.oldName] + self.contacts[name] = address + else: + QtWidgets.QMessageBox.information(self, "Edit Unsuccessful", + "Sorry, \"%s\" is already in your address book." % name) + return + elif self.oldAddress != address: + QtWidgets.QMessageBox.information(self, "Edit Successful", + "\"%s\" has been edited in your address book." % name) + self.contacts[name] = address + + self.updateInterface(self.NavigationMode) + + def cancel(self): + self.nameLine.setText(self.oldName) + self.addressText.setText(self.oldAddress) + self.updateInterface(self.NavigationMode) + + def removeContact(self): + name = self.nameLine.text() + address = self.addressText.toPlainText() + + if name in self.contacts: + button = QtWidgets.QMessageBox.question(self, "Confirm Remove", + "Are you sure you want to remove \"%s\"?" % name, + QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) + + if button == QtWidgets.QMessageBox.Yes: + self.previous() + del self.contacts[name] + + QtWidgets.QMessageBox.information(self, "Remove Successful", + "\"%s\" has been removed from your address book." % name) + + self.updateInterface(self.NavigationMode) + + def next(self): + name = self.nameLine.text() + it = iter(self.contacts) + + try: + while True: + this_name, _ = it.next() + + if this_name == name: + next_name, next_address = it.next() + break + except StopIteration: + next_name, next_address = iter(self.contacts).next() + + self.nameLine.setText(next_name) + self.addressText.setText(next_address) + + def previous(self): + name = self.nameLine.text() + + prev_name = prev_address = None + for this_name, this_address in self.contacts: + if this_name == name: + break + + prev_name = this_name + prev_address = this_address + else: + self.nameLine.clear() + self.addressText.clear() + return + + if prev_name is None: + for prev_name, prev_address in self.contacts: + pass + + self.nameLine.setText(prev_name) + self.addressText.setText(prev_address) + + def findContact(self): + self.dialog.show() + + if self.dialog.exec_() == QtWidgets.QDialog.Accepted: + contactName = self.dialog.getFindText() + + if contactName in self.contacts: + self.nameLine.setText(contactName) + self.addressText.setText(self.contacts[contactName]) + else: + QtWidgets.QMessageBox.information(self, "Contact Not Found", + "Sorry, \"%s\" is not in your address book." % contactName) + return + + self.updateInterface(self.NavigationMode) + + def updateInterface(self, mode): + self.currentMode = mode + + if self.currentMode in (self.AddingMode, self.EditingMode): + self.nameLine.setReadOnly(False) + self.nameLine.setFocus(QtCore.Qt.OtherFocusReason) + self.addressText.setReadOnly(False) + + self.addButton.setEnabled(False) + self.editButton.setEnabled(False) + self.removeButton.setEnabled(False) + + self.nextButton.setEnabled(False) + self.previousButton.setEnabled(False) + + self.submitButton.show() + self.cancelButton.show() + + self.loadButton.setEnabled(False) + self.saveButton.setEnabled(False) + + elif self.currentMode == self.NavigationMode: + if not self.contacts: + self.nameLine.clear() + self.addressText.clear() + + self.nameLine.setReadOnly(True) + self.addressText.setReadOnly(True) + self.addButton.setEnabled(True) + + number = len(self.contacts) + self.editButton.setEnabled(number >= 1) + self.removeButton.setEnabled(number >= 1) + self.findButton.setEnabled(number > 2) + self.nextButton.setEnabled(number > 1) + self.previousButton.setEnabled(number >1 ) + + self.submitButton.hide() + self.cancelButton.hide() + + self.loadButton.setEnabled(True) + self.saveButton.setEnabled(number >= 1) + + def saveToFile(self): + fileName,_ = QtWidgets.QFileDialog.getSaveFileName(self, + "Save Address Book", '', + "Address Book (*.abk);;All Files (*)") + + if not fileName: + return + + try: + out_file = open(str(fileName), 'wb') + except IOError: + QtWidgets.QMessageBox.information(self, "Unable to open file", + "There was an error opening \"%s\"" % fileName) + return + + pickle.dump(self.contacts, out_file) + out_file.close() + + def loadFromFile(self): + fileName,_ = QtWidgets.QFileDialog.getOpenFileName(self, + "Open Address Book", '', + "Address Book (*.abk);;All Files (*)") + + if not fileName: + return + + try: + in_file = open(str(fileName), 'rb') + except IOError: + QtWidgets.QMessageBox.information(self, "Unable to open file", + "There was an error opening \"%s\"" % fileName) + return + + self.contacts = pickle.load(in_file) + in_file.close() + + if len(self.contacts) == 0: + QtWidgets.QMessageBox.information(self, "No contacts in file", + "The file you are attempting to open contains no " + "contacts.") + else: + for name, address in self.contacts: + self.nameLine.setText(name) + self.addressText.setText(address) + + self.updateInterface(self.NavigationMode) + + +class FindDialog(QtWidgets.QDialog): + def __init__(self, parent=None): + super(FindDialog, self).__init__(parent) + + findLabel = QtWidgets.QLabel("Enter the name of a contact:") + self.lineEdit = QtWidgets.QLineEdit() + + self.findButton = QtWidgets.QPushButton("&Find") + self.findText = '' + + layout = QtWidgets.QHBoxLayout() + layout.addWidget(findLabel) + layout.addWidget(self.lineEdit) + layout.addWidget(self.findButton) + + self.setLayout(layout) + self.setWindowTitle("Find a Contact") + + self.findButton.clicked.connect(self.findClicked) + self.findButton.clicked.connect(self.accept) + + def findClicked(self): + text = self.lineEdit.text() + + if not text: + QtWidgets.QMessageBox.information(self, "Empty Field", + "Please enter a name.") + return + + self.findText = text + self.lineEdit.clear() + self.hide() + + def getFindText(self): + return self.findText + + +if __name__ == '__main__': + import sys + + app = QtWidgets.QApplication(sys.argv) + + addressBook = AddressBook() + addressBook.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/tutorials/addressbook/part7.py b/examples/widgets/tutorials/addressbook/part7.py new file mode 100755 index 0000000..ce73e63 --- /dev/null +++ b/examples/widgets/tutorials/addressbook/part7.py @@ -0,0 +1,478 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +import pickle + +from PySide2 import QtCore, QtGui, QtWidgets + + +class SortedDict(dict): + class Iterator(object): + def __init__(self, sorted_dict): + self._dict = sorted_dict + self._keys = sorted(self._dict.keys()) + self._nr_items = len(self._keys) + self._idx = 0 + + def __iter__(self): + return self + + def next(self): + if self._idx >= self._nr_items: + raise StopIteration + + key = self._keys[self._idx] + value = self._dict[key] + self._idx += 1 + + return key, value + + __next__ = next + + def __iter__(self): + return SortedDict.Iterator(self) + + iterkeys = __iter__ + + +class AddressBook(QtWidgets.QWidget): + NavigationMode, AddingMode, EditingMode = range(3) + + def __init__(self, parent=None): + super(AddressBook, self).__init__(parent) + + self.contacts = SortedDict() + self.oldName = '' + self.oldAddress = '' + self.currentMode = self.NavigationMode + + nameLabel = QtWidgets.QLabel("Name:") + self.nameLine = QtWidgets.QLineEdit() + self.nameLine.setReadOnly(True) + + addressLabel = QtWidgets.QLabel("Address:") + self.addressText = QtWidgets.QTextEdit() + self.addressText.setReadOnly(True) + + self.addButton = QtWidgets.QPushButton("&Add") + self.addButton.show() + self.editButton = QtWidgets.QPushButton("&Edit") + self.editButton.setEnabled(False) + self.removeButton = QtWidgets.QPushButton("&Remove") + self.removeButton.setEnabled(False) + self.findButton = QtWidgets.QPushButton("&Find") + self.findButton.setEnabled(False) + self.submitButton = QtWidgets.QPushButton("&Submit") + self.submitButton.hide() + self.cancelButton = QtWidgets.QPushButton("&Cancel") + self.cancelButton.hide() + + self.nextButton = QtWidgets.QPushButton("&Next") + self.nextButton.setEnabled(False) + self.previousButton = QtWidgets.QPushButton("&Previous") + self.previousButton.setEnabled(False) + + self.loadButton = QtWidgets.QPushButton("&Load...") + self.loadButton.setToolTip("Load contacts from a file") + self.saveButton = QtWidgets.QPushButton("Sa&ve...") + self.saveButton.setToolTip("Save contacts to a file") + self.saveButton.setEnabled(False) + + self.exportButton = QtWidgets.QPushButton("Ex&port") + self.exportButton.setToolTip("Export as vCard") + self.exportButton.setEnabled(False) + + self.dialog = FindDialog() + + self.addButton.clicked.connect(self.addContact) + self.submitButton.clicked.connect(self.submitContact) + self.editButton.clicked.connect(self.editContact) + self.removeButton.clicked.connect(self.removeContact) + self.findButton.clicked.connect(self.findContact) + self.cancelButton.clicked.connect(self.cancel) + self.nextButton.clicked.connect(self.next) + self.previousButton.clicked.connect(self.previous) + self.loadButton.clicked.connect(self.loadFromFile) + self.saveButton.clicked.connect(self.saveToFile) + self.exportButton.clicked.connect(self.exportAsVCard) + + buttonLayout1 = QtWidgets.QVBoxLayout() + buttonLayout1.addWidget(self.addButton) + buttonLayout1.addWidget(self.editButton) + buttonLayout1.addWidget(self.removeButton) + buttonLayout1.addWidget(self.findButton) + buttonLayout1.addWidget(self.submitButton) + buttonLayout1.addWidget(self.cancelButton) + buttonLayout1.addWidget(self.loadButton) + buttonLayout1.addWidget(self.saveButton) + buttonLayout1.addWidget(self.exportButton) + buttonLayout1.addStretch() + + buttonLayout2 = QtWidgets.QHBoxLayout() + buttonLayout2.addWidget(self.previousButton) + buttonLayout2.addWidget(self.nextButton) + + mainLayout = QtWidgets.QGridLayout() + mainLayout.addWidget(nameLabel, 0, 0) + mainLayout.addWidget(self.nameLine, 0, 1) + mainLayout.addWidget(addressLabel, 1, 0, QtCore.Qt.AlignTop) + mainLayout.addWidget(self.addressText, 1, 1) + mainLayout.addLayout(buttonLayout1, 1, 2) + mainLayout.addLayout(buttonLayout2, 2, 1) + + self.setLayout(mainLayout) + self.setWindowTitle("Simple Address Book") + + def addContact(self): + self.oldName = self.nameLine.text() + self.oldAddress = self.addressText.toPlainText() + + self.nameLine.clear() + self.addressText.clear() + + self.updateInterface(self.AddingMode) + + def editContact(self): + self.oldName = self.nameLine.text() + self.oldAddress = self.addressText.toPlainText() + + self.updateInterface(self.EditingMode) + + def submitContact(self): + name = self.nameLine.text() + address = self.addressText.toPlainText() + + if name == "" or address == "": + QtWidgets.QMessageBox.information(self, "Empty Field", + "Please enter a name and address.") + return + + if self.currentMode == self.AddingMode: + if name not in self.contacts: + self.contacts[name] = address + QtWidgets.QMessageBox.information(self, "Add Successful", + "\"%s\" has been added to your address book." % name) + else: + QtWidgets.QMessageBox.information(self, "Add Unsuccessful", + "Sorry, \"%s\" is already in your address book." % name) + return + + elif self.currentMode == self.EditingMode: + if self.oldName != name: + if name not in self.contacts: + QtWidgets.QMessageBox.information(self, "Edit Successful", + "\"%s\" has been edited in your address book." % self.oldName) + del self.contacts[self.oldName] + self.contacts[name] = address + else: + QtWidgets.QMessageBox.information(self, "Edit Unsuccessful", + "Sorry, \"%s\" is already in your address book." % name) + return + elif self.oldAddress != address: + QtWidgets.QMessageBox.information(self, "Edit Successful", + "\"%s\" has been edited in your address book." % name) + self.contacts[name] = address + + self.updateInterface(self.NavigationMode) + + def cancel(self): + self.nameLine.setText(self.oldName) + self.addressText.setText(self.oldAddress) + self.updateInterface(self.NavigationMode) + + def removeContact(self): + name = self.nameLine.text() + address = self.addressText.toPlainText() + + if name in self.contacts: + button = QtWidgets.QMessageBox.question(self, "Confirm Remove", + "Are you sure you want to remove \"%s\"?" % name, + QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) + + if button == QtWidgets.QMessageBox.Yes: + self.previous() + del self.contacts[name] + + QtWidgets.QMessageBox.information(self, "Remove Successful", + "\"%s\" has been removed from your address book." % name) + + self.updateInterface(self.NavigationMode) + + def next(self): + name = self.nameLine.text() + it = iter(self.contacts) + + try: + while True: + this_name, _ = it.next() + + if this_name == name: + next_name, next_address = it.next() + break + except StopIteration: + next_name, next_address = iter(self.contacts).next() + + self.nameLine.setText(next_name) + self.addressText.setText(next_address) + + def previous(self): + name = self.nameLine.text() + + prev_name = prev_address = None + for this_name, this_address in self.contacts: + if this_name == name: + break + + prev_name = this_name + prev_address = this_address + else: + self.nameLine.clear() + self.addressText.clear() + return + + if prev_name is None: + for prev_name, prev_address in self.contacts: + pass + + self.nameLine.setText(prev_name) + self.addressText.setText(prev_address) + + def findContact(self): + self.dialog.show() + + if self.dialog.exec_() == QtWidgets.QDialog.Accepted: + contactName = self.dialog.getFindText() + + if contactName in self.contacts: + self.nameLine.setText(contactName) + self.addressText.setText(self.contacts[contactName]) + else: + QtWidgets.QMessageBox.information(self, "Contact Not Found", + "Sorry, \"%s\" is not in your address book." % contactName) + return + + self.updateInterface(self.NavigationMode) + + def updateInterface(self, mode): + self.currentMode = mode + + if self.currentMode in (self.AddingMode, self.EditingMode): + self.nameLine.setReadOnly(False) + self.nameLine.setFocus(QtCore.Qt.OtherFocusReason) + self.addressText.setReadOnly(False) + + self.addButton.setEnabled(False) + self.editButton.setEnabled(False) + self.removeButton.setEnabled(False) + + self.nextButton.setEnabled(False) + self.previousButton.setEnabled(False) + + self.submitButton.show() + self.cancelButton.show() + + self.loadButton.setEnabled(False) + self.saveButton.setEnabled(False) + self.exportButton.setEnabled(False) + + elif self.currentMode == self.NavigationMode: + if not self.contacts: + self.nameLine.clear() + self.addressText.clear() + + self.nameLine.setReadOnly(True) + self.addressText.setReadOnly(True) + self.addButton.setEnabled(True) + + number = len(self.contacts) + self.editButton.setEnabled(number >= 1) + self.removeButton.setEnabled(number >= 1) + self.findButton.setEnabled(number > 2) + self.nextButton.setEnabled(number > 1) + self.previousButton.setEnabled(number >1 ) + + self.submitButton.hide() + self.cancelButton.hide() + + self.exportButton.setEnabled(number >= 1) + + self.loadButton.setEnabled(True) + self.saveButton.setEnabled(number >= 1) + + def saveToFile(self): + fileName,_ = QtWidgets.QFileDialog.getSaveFileName(self, + "Save Address Book", '', + "Address Book (*.abk);;All Files (*)") + + if not fileName: + return + + try: + out_file = open(str(fileName), 'wb') + except IOError: + QtWidgets.QMessageBox.information(self, "Unable to open file", + "There was an error opening \"%s\"" % fileName) + return + + pickle.dump(self.contacts, out_file) + out_file.close() + + def loadFromFile(self): + fileName,_ = QtWidgets.QFileDialog.getOpenFileName(self, + "Open Address Book", '', + "Address Book (*.abk);;All Files (*)") + + if not fileName: + return + + try: + in_file = open(str(fileName), 'rb') + except IOError: + QtWidgets.QMessageBox.information(self, "Unable to open file", + "There was an error opening \"%s\"" % fileName) + return + + self.contacts = pickle.load(in_file) + in_file.close() + + if len(self.contacts) == 0: + QtWidgets.QMessageBox.information(self, "No contacts in file", + "The file you are attempting to open contains no " + "contacts.") + else: + for name, address in self.contacts: + self.nameLine.setText(name) + self.addressText.setText(address) + + self.updateInterface(self.NavigationMode) + + def exportAsVCard(self): + name = str(self.nameLine.text()) + address = self.addressText.toPlainText() + + nameList = name.split() + + if len(nameList) > 1: + firstName = nameList[0] + lastName = nameList[-1] + else: + firstName = name + lastName = '' + + fileName = QtWidgets.QFileDialog.getSaveFileName(self, "Export Contact", + '', "vCard Files (*.vcf);;All Files (*)")[0] + + if not fileName: + return + + out_file = QtCore.QFile(fileName) + + if not out_file.open(QtCore.QIODevice.WriteOnly): + QtWidgets.QMessageBox.information(self, "Unable to open file", + out_file.errorString()) + return + + out_s = QtCore.QTextStream(out_file) + + out_s << 'BEGIN:VCARD' << '\n' + out_s << 'VERSION:2.1' << '\n' + out_s << 'N:' << lastName << ';' << firstName << '\n' + out_s << 'FN:' << ' '.join(nameList) << '\n' + + address.replace(';', '\\;') + address.replace('\n', ';') + address.replace(',', ' ') + + out_s << 'ADR;HOME:;' << address << '\n' + out_s << 'END:VCARD' << '\n' + + QtWidgets.QMessageBox.information(self, "Export Successful", + "\"%s\" has been exported as a vCard." % name) + + +class FindDialog(QtWidgets.QDialog): + def __init__(self, parent=None): + super(FindDialog, self).__init__(parent) + + findLabel = QtWidgets.QLabel("Enter the name of a contact:") + self.lineEdit = QtWidgets.QLineEdit() + + self.findButton = QtWidgets.QPushButton("&Find") + self.findText = '' + + layout = QtWidgets.QHBoxLayout() + layout.addWidget(findLabel) + layout.addWidget(self.lineEdit) + layout.addWidget(self.findButton) + + self.setLayout(layout) + self.setWindowTitle("Find a Contact") + + self.findButton.clicked.connect(self.findClicked) + self.findButton.clicked.connect(self.accept) + + def findClicked(self): + text = self.lineEdit.text() + + if not text: + QtWidgets.QMessageBox.information(self, "Empty Field", + "Please enter a name.") + return + + self.findText = text + self.lineEdit.clear() + self.hide() + + def getFindText(self): + return self.findText + + +if __name__ == '__main__': + import sys + + app = QtWidgets.QApplication(sys.argv) + + addressBook = AddressBook() + addressBook.show() + + sys.exit(app.exec_()) diff --git a/examples/widgets/widgets/hellogl_openglwidget_legacy.py b/examples/widgets/widgets/hellogl_openglwidget_legacy.py new file mode 100755 index 0000000..42b48fc --- /dev/null +++ b/examples/widgets/widgets/hellogl_openglwidget_legacy.py @@ -0,0 +1,289 @@ +#!/usr/bin/env python + +############################################################################ +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +"""PySide2 port of the opengl/legacy/hellogl example from Qt v5.x modified to use a QOpenGLWidget to demonstrate porting from QGLWidget to QOpenGLWidget""" + +import sys +import math +from PySide2 import QtCore, QtGui, QtWidgets + +try: + from OpenGL import GL +except ImportError: + app = QtWidgets.QApplication(sys.argv) + messageBox = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Critical, "OpenGL hellogl", + "PyOpenGL must be installed to run this example.", + QtWidgets.QMessageBox.Close) + messageBox.setDetailedText("Run:\npip install PyOpenGL PyOpenGL_accelerate") + messageBox.exec_() + sys.exit(1) + + +class Window(QtWidgets.QWidget): + def __init__(self, parent=None): + QtWidgets.QWidget.__init__(self, parent) + + self.glWidget = GLWidget() + + self.xSlider = self.createSlider(QtCore.SIGNAL("xRotationChanged(int)"), + self.glWidget.setXRotation) + self.ySlider = self.createSlider(QtCore.SIGNAL("yRotationChanged(int)"), + self.glWidget.setYRotation) + self.zSlider = self.createSlider(QtCore.SIGNAL("zRotationChanged(int)"), + self.glWidget.setZRotation) + + mainLayout = QtWidgets.QHBoxLayout() + mainLayout.addWidget(self.glWidget) + mainLayout.addWidget(self.xSlider) + mainLayout.addWidget(self.ySlider) + mainLayout.addWidget(self.zSlider) + self.setLayout(mainLayout) + + self.xSlider.setValue(170 * 16) + self.ySlider.setValue(160 * 16) + self.zSlider.setValue(90 * 16) + + self.setWindowTitle(self.tr("QOpenGLWidget")) + + def createSlider(self, changedSignal, setterSlot): + slider = QtWidgets.QSlider(QtCore.Qt.Vertical) + + slider.setRange(0, 360 * 16) + slider.setSingleStep(16) + slider.setPageStep(15 * 16) + slider.setTickInterval(15 * 16) + slider.setTickPosition(QtWidgets.QSlider.TicksRight) + + self.glWidget.connect(slider, QtCore.SIGNAL("valueChanged(int)"), setterSlot) + self.connect(self.glWidget, changedSignal, slider, QtCore.SLOT("setValue(int)")) + + return slider + + +class GLWidget(QtWidgets.QOpenGLWidget): + xRotationChanged = QtCore.Signal(int) + yRotationChanged = QtCore.Signal(int) + zRotationChanged = QtCore.Signal(int) + + def __init__(self, parent=None): + QtWidgets.QOpenGLWidget.__init__(self, parent) + + self.object = 0 + self.xRot = 0 + self.yRot = 0 + self.zRot = 0 + + self.lastPos = QtCore.QPoint() + + self.trolltechGreen = QtGui.QColor.fromCmykF(0.40, 0.0, 1.0, 0.0) + self.trolltechPurple = QtGui.QColor.fromCmykF(0.39, 0.39, 0.0, 0.0) + + def xRotation(self): + return self.xRot + + def yRotation(self): + return self.yRot + + def zRotation(self): + return self.zRot + + def minimumSizeHint(self): + return QtCore.QSize(50, 50) + + def sizeHint(self): + return QtCore.QSize(400, 400) + + def setXRotation(self, angle): + angle = self.normalizeAngle(angle) + if angle != self.xRot: + self.xRot = angle + self.emit(QtCore.SIGNAL("xRotationChanged(int)"), angle) + self.update() + + def setYRotation(self, angle): + angle = self.normalizeAngle(angle) + if angle != self.yRot: + self.yRot = angle + self.emit(QtCore.SIGNAL("yRotationChanged(int)"), angle) + self.update() + + def setZRotation(self, angle): + angle = self.normalizeAngle(angle) + if angle != self.zRot: + self.zRot = angle + self.emit(QtCore.SIGNAL("zRotationChanged(int)"), angle) + self.update() + + def initializeGL(self): + darkTrolltechPurple = self.trolltechPurple.darker() + GL.glClearColor(darkTrolltechPurple.redF(), darkTrolltechPurple.greenF(), darkTrolltechPurple.blueF(), darkTrolltechPurple.alphaF()) + self.object = self.makeObject() + GL.glShadeModel(GL.GL_FLAT) + GL.glEnable(GL.GL_DEPTH_TEST) + GL.glEnable(GL.GL_CULL_FACE) + + def paintGL(self): + GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT) + GL.glLoadIdentity() + GL.glTranslated(0.0, 0.0, -10.0) + GL.glRotated(self.xRot / 16.0, 1.0, 0.0, 0.0) + GL.glRotated(self.yRot / 16.0, 0.0, 1.0, 0.0) + GL.glRotated(self.zRot / 16.0, 0.0, 0.0, 1.0) + GL.glCallList(self.object) + + def resizeGL(self, width, height): + side = min(width, height) + GL.glViewport(int((width - side) / 2),int((height - side) / 2), side, side) + + GL.glMatrixMode(GL.GL_PROJECTION) + GL.glLoadIdentity() + GL.glOrtho(-0.5, +0.5, -0.5, +0.5, 4.0, 15.0) + GL.glMatrixMode(GL.GL_MODELVIEW) + + def mousePressEvent(self, event): + self.lastPos = QtCore.QPoint(event.pos()) + + def mouseMoveEvent(self, event): + dx = event.x() - self.lastPos.x() + dy = event.y() - self.lastPos.y() + + if event.buttons() & QtCore.Qt.LeftButton: + self.setXRotation(self.xRot + 8 * dy) + self.setYRotation(self.yRot + 8 * dx) + elif event.buttons() & QtCore.Qt.RightButton: + self.setXRotation(self.xRot + 8 * dy) + self.setZRotation(self.zRot + 8 * dx) + + self.lastPos = QtCore.QPoint(event.pos()) + + def makeObject(self): + genList = GL.glGenLists(1) + GL.glNewList(genList, GL.GL_COMPILE) + + GL.glBegin(GL.GL_QUADS) + + x1 = +0.06 + y1 = -0.14 + x2 = +0.14 + y2 = -0.06 + x3 = +0.08 + y3 = +0.00 + x4 = +0.30 + y4 = +0.22 + + self.quad(x1, y1, x2, y2, y2, x2, y1, x1) + self.quad(x3, y3, x4, y4, y4, x4, y3, x3) + + self.extrude(x1, y1, x2, y2) + self.extrude(x2, y2, y2, x2) + self.extrude(y2, x2, y1, x1) + self.extrude(y1, x1, x1, y1) + self.extrude(x3, y3, x4, y4) + self.extrude(x4, y4, y4, x4) + self.extrude(y4, x4, y3, x3) + + Pi = 3.14159265358979323846 + NumSectors = 200 + + for i in range(NumSectors): + angle1 = (i * 2 * Pi) / NumSectors + x5 = 0.30 * math.sin(angle1) + y5 = 0.30 * math.cos(angle1) + x6 = 0.20 * math.sin(angle1) + y6 = 0.20 * math.cos(angle1) + + angle2 = ((i + 1) * 2 * Pi) / NumSectors + x7 = 0.20 * math.sin(angle2) + y7 = 0.20 * math.cos(angle2) + x8 = 0.30 * math.sin(angle2) + y8 = 0.30 * math.cos(angle2) + + self.quad(x5, y5, x6, y6, x7, y7, x8, y8) + + self.extrude(x6, y6, x7, y7) + self.extrude(x8, y8, x5, y5) + + GL.glEnd() + GL.glEndList() + + return genList + + def quad(self, x1, y1, x2, y2, x3, y3, x4, y4): + GL.glColor(self.trolltechGreen.redF(), self.trolltechGreen.greenF(), self.trolltechGreen.blueF(), self.trolltechGreen.alphaF()) + + GL.glVertex3d(x1, y1, +0.05) + GL.glVertex3d(x2, y2, +0.05) + GL.glVertex3d(x3, y3, +0.05) + GL.glVertex3d(x4, y4, +0.05) + + GL.glVertex3d(x4, y4, -0.05) + GL.glVertex3d(x3, y3, -0.05) + GL.glVertex3d(x2, y2, -0.05) + GL.glVertex3d(x1, y1, -0.05) + + def extrude(self, x1, y1, x2, y2): + darkTrolltechGreen = self.trolltechGreen.darker(250 + int(100 * x1)) + GL.glColor(darkTrolltechGreen.redF(), darkTrolltechGreen.greenF(), darkTrolltechGreen.blueF(), darkTrolltechGreen.alphaF()) + + GL.glVertex3d(x1, y1, -0.05) + GL.glVertex3d(x2, y2, -0.05) + GL.glVertex3d(x2, y2, +0.05) + GL.glVertex3d(x1, y1, +0.05) + + def normalizeAngle(self, angle): + while angle < 0: + angle += 360 * 16 + while angle > 360 * 16: + angle -= 360 * 16 + return angle + + def freeResources(self): + self.makeCurrent() + GL.glDeleteLists(self.object, 1) + +if __name__ == '__main__': + app = QtWidgets.QApplication(sys.argv) + window = Window() + window.show() + res = app.exec_() + window.glWidget.freeResources() + sys.exit(res) diff --git a/examples/widgets/widgets/tetrix.py b/examples/widgets/widgets/tetrix.py new file mode 100644 index 0000000..33e17a7 --- /dev/null +++ b/examples/widgets/widgets/tetrix.py @@ -0,0 +1,499 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the widgets/widgets/tetrix example from Qt v5.x""" + +import random + +from PySide2 import QtCore, QtGui, QtWidgets + + +NoShape, ZShape, SShape, LineShape, TShape, SquareShape, LShape, MirroredLShape = range(8) + + +class TetrixWindow(QtWidgets.QWidget): + def __init__(self): + super(TetrixWindow, self).__init__() + + self.board = TetrixBoard() + + nextPieceLabel = QtWidgets.QLabel() + nextPieceLabel.setFrameStyle(QtWidgets.QFrame.Box | QtWidgets.QFrame.Raised) + nextPieceLabel.setAlignment(QtCore.Qt.AlignCenter) + self.board.setNextPieceLabel(nextPieceLabel) + + scoreLcd = QtWidgets.QLCDNumber(5) + scoreLcd.setSegmentStyle(QtWidgets.QLCDNumber.Filled) + levelLcd = QtWidgets.QLCDNumber(2) + levelLcd.setSegmentStyle(QtWidgets.QLCDNumber.Filled) + linesLcd = QtWidgets.QLCDNumber(5) + linesLcd.setSegmentStyle(QtWidgets.QLCDNumber.Filled) + + startButton = QtWidgets.QPushButton("&Start") + startButton.setFocusPolicy(QtCore.Qt.NoFocus) + quitButton = QtWidgets.QPushButton("&Quit") + quitButton.setFocusPolicy(QtCore.Qt.NoFocus) + pauseButton = QtWidgets.QPushButton("&Pause") + pauseButton.setFocusPolicy(QtCore.Qt.NoFocus) + + startButton.clicked.connect(self.board.start) + pauseButton.clicked.connect(self.board.pause) + quitButton.clicked.connect(QtWidgets.qApp.quit) + self.board.scoreChanged.connect(scoreLcd.display) + self.board.levelChanged.connect(levelLcd.display) + self.board.linesRemovedChanged.connect(linesLcd.display) + + layout = QtWidgets.QGridLayout() + layout.addWidget(self.createLabel("NEXT"), 0, 0) + layout.addWidget(nextPieceLabel, 1, 0) + layout.addWidget(self.createLabel("LEVEL"), 2, 0) + layout.addWidget(levelLcd, 3, 0) + layout.addWidget(startButton, 4, 0) + layout.addWidget(self.board, 0, 1, 6, 1) + layout.addWidget(self.createLabel("SCORE"), 0, 2) + layout.addWidget(scoreLcd, 1, 2) + layout.addWidget(self.createLabel("LINES REMOVED"), 2, 2) + layout.addWidget(linesLcd, 3, 2) + layout.addWidget(quitButton, 4, 2) + layout.addWidget(pauseButton, 5, 2) + self.setLayout(layout) + + self.setWindowTitle("Tetrix") + self.resize(550, 370) + + def createLabel(self, text): + lbl = QtWidgets.QLabel(text) + lbl.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom) + return lbl + + +class TetrixBoard(QtWidgets.QFrame): + BoardWidth = 10 + BoardHeight = 22 + + scoreChanged = QtCore.Signal(int) + + levelChanged = QtCore.Signal(int) + + linesRemovedChanged = QtCore.Signal(int) + + def __init__(self, parent=None): + super(TetrixBoard, self).__init__(parent) + + self.timer = QtCore.QBasicTimer() + self.nextPieceLabel = None + self.isWaitingAfterLine = False + self.curPiece = TetrixPiece() + self.nextPiece = TetrixPiece() + self.curX = 0 + self.curY = 0 + self.numLinesRemoved = 0 + self.numPiecesDropped = 0 + self.score = 0 + self.level = 0 + self.board = None + + self.setFrameStyle(QtWidgets.QFrame.Panel | QtWidgets.QFrame.Sunken) + self.setFocusPolicy(QtCore.Qt.StrongFocus) + self.isStarted = False + self.isPaused = False + self.clearBoard() + + self.nextPiece.setRandomShape() + + def shapeAt(self, x, y): + return self.board[(y * TetrixBoard.BoardWidth) + x] + + def setShapeAt(self, x, y, shape): + self.board[(y * TetrixBoard.BoardWidth) + x] = shape + + def timeoutTime(self): + return 1000 / (1 + self.level) + + def squareWidth(self): + return self.contentsRect().width() / TetrixBoard.BoardWidth + + def squareHeight(self): + return self.contentsRect().height() / TetrixBoard.BoardHeight + + def setNextPieceLabel(self, label): + self.nextPieceLabel = label + + def sizeHint(self): + return QtCore.QSize(TetrixBoard.BoardWidth * 15 + self.frameWidth() * 2, + TetrixBoard.BoardHeight * 15 + self.frameWidth() * 2) + + def minimumSizeHint(self): + return QtCore.QSize(TetrixBoard.BoardWidth * 5 + self.frameWidth() * 2, + TetrixBoard.BoardHeight * 5 + self.frameWidth() * 2) + + def start(self): + if self.isPaused: + return + + self.isStarted = True + self.isWaitingAfterLine = False + self.numLinesRemoved = 0 + self.numPiecesDropped = 0 + self.score = 0 + self.level = 1 + self.clearBoard() + + self.linesRemovedChanged.emit(self.numLinesRemoved) + self.scoreChanged.emit(self.score) + self.levelChanged.emit(self.level) + + self.newPiece() + self.timer.start(self.timeoutTime(), self) + + def pause(self): + if not self.isStarted: + return + + self.isPaused = not self.isPaused + if self.isPaused: + self.timer.stop() + else: + self.timer.start(self.timeoutTime(), self) + + self.update() + + def paintEvent(self, event): + super(TetrixBoard, self).paintEvent(event) + + painter = QtGui.QPainter(self) + rect = self.contentsRect() + + if self.isPaused: + painter.drawText(rect, QtCore.Qt.AlignCenter, "Pause") + return + + boardTop = rect.bottom() - TetrixBoard.BoardHeight * self.squareHeight() + + for i in range(TetrixBoard.BoardHeight): + for j in range(TetrixBoard.BoardWidth): + shape = self.shapeAt(j, TetrixBoard.BoardHeight - i - 1) + if shape != NoShape: + self.drawSquare(painter, + rect.left() + j * self.squareWidth(), + boardTop + i * self.squareHeight(), shape) + + if self.curPiece.shape() != NoShape: + for i in range(4): + x = self.curX + self.curPiece.x(i) + y = self.curY - self.curPiece.y(i) + self.drawSquare(painter, rect.left() + x * self.squareWidth(), + boardTop + (TetrixBoard.BoardHeight - y - 1) * self.squareHeight(), + self.curPiece.shape()) + + def keyPressEvent(self, event): + if not self.isStarted or self.isPaused or self.curPiece.shape() == NoShape: + super(TetrixBoard, self).keyPressEvent(event) + return + + key = event.key() + if key == QtCore.Qt.Key_Left: + self.tryMove(self.curPiece, self.curX - 1, self.curY) + elif key == QtCore.Qt.Key_Right: + self.tryMove(self.curPiece, self.curX + 1, self.curY) + elif key == QtCore.Qt.Key_Down: + self.tryMove(self.curPiece.rotatedRight(), self.curX, self.curY) + elif key == QtCore.Qt.Key_Up: + self.tryMove(self.curPiece.rotatedLeft(), self.curX, self.curY) + elif key == QtCore.Qt.Key_Space: + self.dropDown() + elif key == QtCore.Qt.Key_D: + self.oneLineDown() + else: + super(TetrixBoard, self).keyPressEvent(event) + + def timerEvent(self, event): + if event.timerId() == self.timer.timerId(): + if self.isWaitingAfterLine: + self.isWaitingAfterLine = False + self.newPiece() + self.timer.start(self.timeoutTime(), self) + else: + self.oneLineDown() + else: + super(TetrixBoard, self).timerEvent(event) + + def clearBoard(self): + self.board = [NoShape for i in range(TetrixBoard.BoardHeight * TetrixBoard.BoardWidth)] + + def dropDown(self): + dropHeight = 0 + newY = self.curY + while newY > 0: + if not self.tryMove(self.curPiece, self.curX, newY - 1): + break + newY -= 1 + dropHeight += 1 + + self.pieceDropped(dropHeight) + + def oneLineDown(self): + if not self.tryMove(self.curPiece, self.curX, self.curY - 1): + self.pieceDropped(0) + + def pieceDropped(self, dropHeight): + for i in range(4): + x = self.curX + self.curPiece.x(i) + y = self.curY - self.curPiece.y(i) + self.setShapeAt(x, y, self.curPiece.shape()) + + self.numPiecesDropped += 1 + if self.numPiecesDropped % 25 == 0: + self.level += 1 + self.timer.start(self.timeoutTime(), self) + self.levelChanged.emit(self.level) + + self.score += dropHeight + 7 + self.scoreChanged.emit(self.score) + self.removeFullLines() + + if not self.isWaitingAfterLine: + self.newPiece() + + def removeFullLines(self): + numFullLines = 0 + + for i in range(TetrixBoard.BoardHeight - 1, -1, -1): + lineIsFull = True + + for j in range(TetrixBoard.BoardWidth): + if self.shapeAt(j, i) == NoShape: + lineIsFull = False + break + + if lineIsFull: + numFullLines += 1 + for k in range(TetrixBoard.BoardHeight - 1): + for j in range(TetrixBoard.BoardWidth): + self.setShapeAt(j, k, self.shapeAt(j, k + 1)) + + for j in range(TetrixBoard.BoardWidth): + self.setShapeAt(j, TetrixBoard.BoardHeight - 1, NoShape) + + if numFullLines > 0: + self.numLinesRemoved += numFullLines + self.score += 10 * numFullLines + self.linesRemovedChanged.emit(self.numLinesRemoved) + self.scoreChanged.emit(self.score) + + self.timer.start(500, self) + self.isWaitingAfterLine = True + self.curPiece.setShape(NoShape) + self.update() + + def newPiece(self): + self.curPiece = self.nextPiece + self.nextPiece.setRandomShape() + self.showNextPiece() + self.curX = TetrixBoard.BoardWidth // 2 + 1 + self.curY = TetrixBoard.BoardHeight - 1 + self.curPiece.minY() + + if not self.tryMove(self.curPiece, self.curX, self.curY): + self.curPiece.setShape(NoShape) + self.timer.stop() + self.isStarted = False + + def showNextPiece(self): + if self.nextPieceLabel is not None: + return + + dx = self.nextPiece.maxX() - self.nextPiece.minX() + 1 + dy = self.nextPiece.maxY() - self.nextPiece.minY() + 1 + + pixmap = QtGui.QPixmap(dx * self.squareWidth(), dy * self.squareHeight()) + painter = QtGui.QPainter(pixmap) + painter.fillRect(pixmap.rect(), self.nextPieceLabel.palette().background()) + + for int in range(4): + x = self.nextPiece.x(i) - self.nextPiece.minX() + y = self.nextPiece.y(i) - self.nextPiece.minY() + self.drawSquare(painter, x * self.squareWidth(), + y * self.squareHeight(), self.nextPiece.shape()) + + self.nextPieceLabel.setPixmap(pixmap) + + def tryMove(self, newPiece, newX, newY): + for i in range(4): + x = newX + newPiece.x(i) + y = newY - newPiece.y(i) + if x < 0 or x >= TetrixBoard.BoardWidth or y < 0 or y >= TetrixBoard.BoardHeight: + return False + if self.shapeAt(x, y) != NoShape: + return False + + self.curPiece = newPiece + self.curX = newX + self.curY = newY + self.update() + return True + + def drawSquare(self, painter, x, y, shape): + colorTable = [0x000000, 0xCC6666, 0x66CC66, 0x6666CC, + 0xCCCC66, 0xCC66CC, 0x66CCCC, 0xDAAA00] + + color = QtGui.QColor(colorTable[shape]) + painter.fillRect(x + 1, y + 1, self.squareWidth() - 2, + self.squareHeight() - 2, color) + + painter.setPen(color.lighter()) + painter.drawLine(x, y + self.squareHeight() - 1, x, y) + painter.drawLine(x, y, x + self.squareWidth() - 1, y) + + painter.setPen(color.darker()) + painter.drawLine(x + 1, y + self.squareHeight() - 1, + x + self.squareWidth() - 1, y + self.squareHeight() - 1) + painter.drawLine(x + self.squareWidth() - 1, + y + self.squareHeight() - 1, x + self.squareWidth() - 1, y + 1) + + +class TetrixPiece(object): + coordsTable = ( + ((0, 0), (0, 0), (0, 0), (0, 0)), + ((0, -1), (0, 0), (-1, 0), (-1, 1)), + ((0, -1), (0, 0), (1, 0), (1, 1)), + ((0, -1), (0, 0), (0, 1), (0, 2)), + ((-1, 0), (0, 0), (1, 0), (0, 1)), + ((0, 0), (1, 0), (0, 1), (1, 1)), + ((-1, -1), (0, -1), (0, 0), (0, 1)), + ((1, -1), (0, -1), (0, 0), (0, 1)) + ) + + def __init__(self): + self.coords = [[0,0] for _ in range(4)] + self.pieceShape = NoShape + + self.setShape(NoShape) + + def shape(self): + return self.pieceShape + + def setShape(self, shape): + table = TetrixPiece.coordsTable[shape] + for i in range(4): + for j in range(2): + self.coords[i][j] = table[i][j] + + self.pieceShape = shape + + def setRandomShape(self): + self.setShape(random.randint(1, 7)) + + def x(self, index): + return self.coords[index][0] + + def y(self, index): + return self.coords[index][1] + + def setX(self, index, x): + self.coords[index][0] = x + + def setY(self, index, y): + self.coords[index][1] = y + + def minX(self): + m = self.coords[0][0] + for i in range(4): + m = min(m, self.coords[i][0]) + + return m + + def maxX(self): + m = self.coords[0][0] + for i in range(4): + m = max(m, self.coords[i][0]) + + return m + + def minY(self): + m = self.coords[0][1] + for i in range(4): + m = min(m, self.coords[i][1]) + + return m + + def maxY(self): + m = self.coords[0][1] + for i in range(4): + m = max(m, self.coords[i][1]) + + return m + + def rotatedLeft(self): + if self.pieceShape == SquareShape: + return self + + result = TetrixPiece() + result.pieceShape = self.pieceShape + for i in range(4): + result.setX(i, self.y(i)) + result.setY(i, -self.x(i)) + + return result + + def rotatedRight(self): + if self.pieceShape == SquareShape: + return self + + result = TetrixPiece() + result.pieceShape = self.pieceShape + for i in range(4): + result.setX(i, -self.y(i)) + result.setY(i, self.x(i)) + + return result + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + window = TetrixWindow() + window.show() + random.seed(None) + sys.exit(app.exec_()) diff --git a/examples/xml/dombookmarks/dombookmarks.py b/examples/xml/dombookmarks/dombookmarks.py new file mode 100755 index 0000000..b9d076c --- /dev/null +++ b/examples/xml/dombookmarks/dombookmarks.py @@ -0,0 +1,263 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""PySide2 port of the xml/dombookmarks example from Qt v5.x""" + +from PySide2 import QtCore, QtGui, QtWidgets, QtXml + + +class MainWindow(QtWidgets.QMainWindow): + def __init__(self, parent=None): + super(MainWindow, self).__init__(parent) + + self.xbelTree = XbelTree() + self.setCentralWidget(self.xbelTree) + + self.createActions() + self.createMenus() + + self.statusBar().showMessage("Ready") + + self.setWindowTitle("DOM Bookmarks") + self.resize(480, 320) + + def open(self): + fileName = QtWidgets.QFileDialog.getOpenFileName(self, + "Open Bookmark File", QtCore.QDir.currentPath(), + "XBEL Files (*.xbel *.xml)")[0] + + if not fileName: + return + + inFile = QtCore.QFile(fileName) + if not inFile.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text): + QtWidgets.QMessageBox.warning(self, "DOM Bookmarks", + "Cannot read file %s:\n%s." % (fileName, inFile.errorString())) + return + + if self.xbelTree.read(inFile): + self.statusBar().showMessage("File loaded", 2000) + + def saveAs(self): + fileName = QtWidgets.QFileDialog.getSaveFileName(self, + "Save Bookmark File", QtCore.QDir.currentPath(), + "XBEL Files (*.xbel *.xml)")[0] + + if not fileName: + return + + outFile = QtCore.QFile(fileName) + if not outFile.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text): + QtWidgets.QMessageBox.warning(self, "DOM Bookmarks", + "Cannot write file %s:\n%s." % (fileName, outFile.errorString())) + return + + if self.xbelTree.write(outFile): + self.statusBar().showMessage("File saved", 2000) + + def about(self): + QtWidgets.QMessageBox.about(self, "About DOM Bookmarks", + "The DOM Bookmarks example demonstrates how to use Qt's " + "DOM classes to read and write XML documents.") + + def createActions(self): + self.openAct = QtWidgets.QAction("&Open...", self, shortcut="Ctrl+O", + triggered=self.open) + + self.saveAsAct = QtWidgets.QAction("&Save As...", self, shortcut="Ctrl+S", + triggered=self.saveAs) + + self.exitAct = QtWidgets.QAction("E&xit", self, shortcut="Ctrl+Q", + triggered=self.close) + + self.aboutAct = QtWidgets.QAction("&About", self, triggered=self.about) + + self.aboutQtAct = QtWidgets.QAction("About &Qt", self, + triggered=QtWidgets.qApp.aboutQt) + + def createMenus(self): + self.fileMenu = self.menuBar().addMenu("&File") + self.fileMenu.addAction(self.openAct) + self.fileMenu.addAction(self.saveAsAct) + self.fileMenu.addAction(self.exitAct) + + self.menuBar().addSeparator() + + self.helpMenu = self.menuBar().addMenu("&Help") + self.helpMenu.addAction(self.aboutAct) + self.helpMenu.addAction(self.aboutQtAct) + + +class XbelTree(QtWidgets.QTreeWidget): + def __init__(self, parent=None): + super(XbelTree, self).__init__(parent) + + self.header().setSectionResizeMode(QtWidgets.QHeaderView.Stretch) + self.setHeaderLabels(("Title", "Location")) + + self.domDocument = QtXml.QDomDocument() + + self.domElementForItem = {} + + self.folderIcon = QtGui.QIcon() + self.bookmarkIcon = QtGui.QIcon() + + self.folderIcon.addPixmap(self.style().standardPixmap(QtWidgets.QStyle.SP_DirClosedIcon), + QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.folderIcon.addPixmap(self.style().standardPixmap(QtWidgets.QStyle.SP_DirOpenIcon), + QtGui.QIcon.Normal, QtGui.QIcon.On) + self.bookmarkIcon.addPixmap(self.style().standardPixmap(QtWidgets.QStyle.SP_FileIcon)) + + def read(self, device): + ok, errorStr, errorLine, errorColumn = self.domDocument.setContent(device, True) + if not ok: + QtWidgets.QMessageBox.information(self.window(), "DOM Bookmarks", + "Parse error at line %d, column %d:\n%s" % (errorLine, errorColumn, errorStr)) + return False + + root = self.domDocument.documentElement() + if root.tagName() != 'xbel': + QtWidgets.QMessageBox.information(self.window(), "DOM Bookmarks", + "The file is not an XBEL file.") + return False + elif root.hasAttribute('version') and root.attribute('version') != '1.0': + QtWidgets.QMessageBox.information(self.window(), "DOM Bookmarks", + "The file is not an XBEL version 1.0 file.") + return False + + self.clear() + + # It might not be connected. + try: + self.itemChanged.disconnect(self.updateDomElement) + except: + pass + + child = root.firstChildElement('folder') + while not child.isNull(): + self.parseFolderElement(child) + child = child.nextSiblingElement('folder') + + self.itemChanged.connect(self.updateDomElement) + + return True + + def write(self, device): + indentSize = 4 + + out = QtCore.QTextStream(device) + self.domDocument.save(out, indentSize) + return True + + def updateDomElement(self, item, column): + element = self.domElementForItem.get(id(item)) + if not element.isNull(): + if column == 0: + oldTitleElement = element.firstChildElement('title') + newTitleElement = self.domDocument.createElement('title') + + newTitleText = self.domDocument.createTextNode(item.text(0)) + newTitleElement.appendChild(newTitleText) + + element.replaceChild(newTitleElement, oldTitleElement) + else: + if element.tagName() == 'bookmark': + element.setAttribute('href', item.text(1)) + + def parseFolderElement(self, element, parentItem=None): + item = self.createItem(element, parentItem) + + title = element.firstChildElement('title').text() + if not title: + title = "Folder" + + item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable) + item.setIcon(0, self.folderIcon) + item.setText(0, title) + + folded = (element.attribute('folded') != 'no') + self.setItemExpanded(item, not folded) + + child = element.firstChildElement() + while not child.isNull(): + if child.tagName() == 'folder': + self.parseFolderElement(child, item) + elif child.tagName() == 'bookmark': + childItem = self.createItem(child, item) + + title = child.firstChildElement('title').text() + if not title: + title = "Folder" + + childItem.setFlags(item.flags() | QtCore.Qt.ItemIsEditable) + childItem.setIcon(0, self.bookmarkIcon) + childItem.setText(0, title) + childItem.setText(1, child.attribute('href')) + elif child.tagName() == 'separator': + childItem = self.createItem(child, item) + childItem.setFlags(item.flags() & ~(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable)) + childItem.setText(0, 30 * "\xb7") + + child = child.nextSiblingElement() + + def createItem(self, element, parentItem=None): + item = QtWidgets.QTreeWidgetItem() + + if parentItem is not None: + item = QtWidgets.QTreeWidgetItem(parentItem) + else: + item = QtWidgets.QTreeWidgetItem(self) + + self.domElementForItem[id(item)] = element + return item + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + mainWin = MainWindow() + mainWin.show() + mainWin.open() + sys.exit(app.exec_()) diff --git a/examples/xml/dombookmarks/frank.xbel b/examples/xml/dombookmarks/frank.xbel new file mode 100644 index 0000000..f498a5e --- /dev/null +++ b/examples/xml/dombookmarks/frank.xbel @@ -0,0 +1,230 @@ + + + + + Literate Programming + + Synopsis of Literate Programming + + + Literate Programming: Propaganda and Tools + + + Literate Programming by Henrik Turbell + + + Literate Programming Library + + + Literate Programming Basics + + + Literate Programming Overview + + + POD is not Literate Programming + + + Computers That We Can Count On + + + Literate Programming - Issues and Problems + + + Literate Programming - Wiki Pages + + + What is well-commented code? + + + Bibliography on literate programming - A searchable bibliography + + + Program comprehension and code reading bibliography + + + Elucidative Programming + + + AVL Trees (TexiWeb) + + + Literate Programming on Wikiverse + + + Physically Based Rendering: From Theory to Implementation + + + + Useful C++ Links + + STL + + STL Reference Documentation + + + STL Tutorial + + + STL Reference + + + + Qt + + Qt 2.3 Reference + + + Qt 3.3 Reference + + + Qt 4.0 Reference + + + Trolltech Home Page + + + + IOStreams + + IO Stream Library + + + Binary I/O + + + I/O Stream FAQ + + + + gdb + + GDB Tutorial + + + Debugging with GDB + + + GDB Quick Reference Page (PDF) (Handy) + + + + Classes and Constructors + + Constructor FAQ + + + Organizing Classes + + + + + Software Documentation or System Documentation + + The Almighty Thud + + + Microsoft Coding Techniques and Programming Practices + + + Software and Documentation + + + The Source Code is the Design + + + What is Software Design? + + + How To Write Unmaintainable Code + + + Self Documenting Program Code Remains a Distant Goal + + + Place Tab A in Slot B + + + UML Reference Card + + + + TeX Resources + + The TeX User's Group + + + MikTeX website + + + MetaPost website + + + HEVEA is a quite complete and fast LATEX to HTML translator + + + + Portable Document Format (PDF) + + Adobe - The postscript and PDF standards + + + Reference Manual Portable Document Format + + + Adobe Acrobat Software Development Kit + + + + Literature Sites + + Guide to Special Collections (Columbia University) + + + Literary Criticism on the Web from the Internet Public Library + + + Victorian Web. + + + Voice of the Shuttle. + + + Modernist Journals Project + + + Museum of American Poetics + + + Modern American Poetry + + + FindArticles.com + + + Literary History + + + Literary Encyclopedia + + + + The University of California Press + + + Wright American Fiction, 1851-1875 + + + Documenting the American South: Beginnings to 1920 + + + Electronic Text Center at the University of Virginia + + + The Schomburg Center for Research in Black Culture + + + Alex Catalog of Electronic Texts. + + + diff --git a/examples/xml/dombookmarks/jennifer.xbel b/examples/xml/dombookmarks/jennifer.xbel new file mode 100644 index 0000000..1f7810b --- /dev/null +++ b/examples/xml/dombookmarks/jennifer.xbel @@ -0,0 +1,93 @@ + + + + + Qt Resources + + Trolltech Partners + + Training Partners + + + Consultants and System Integrators + + + Technology Partners + + + Value Added Resellers (VARs) + + + + Community Resources + + QtForum.org + + + The Independent Qt Tutorial + + + French PROG.Qt + + + German Qt Forum + + + Korean Qt Community Site + + + Russian Qt Forum + + + Digitalfanatics: The QT 4 Resource Center + + + QtQuestions + + + + Qt Quarterly + + + Trolltech's home page + + + Qt 4.0 documentation + + + Frequently Asked Questions + + + + Online Dictionaries + + Dictionary.com + + + Merriam-Webster Online + + + Cambridge Dictionaries Online + + + OneLook Dictionary Search + + + + The New English-German Dictionary + + + TU Chemnitz German-English Dictionary + + + + Trésor de la Langue Française informatisé + + + Dictionnaire de l'Académie Française + + + Dictionnaire des synonymes + + + diff --git a/examples/xmlpatterns/schema/files/contact.xsd b/examples/xmlpatterns/schema/files/contact.xsd new file mode 100644 index 0000000..3e1b570 --- /dev/null +++ b/examples/xmlpatterns/schema/files/contact.xsd @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/xmlpatterns/schema/files/invalid_contact.xml b/examples/xmlpatterns/schema/files/invalid_contact.xml new file mode 100644 index 0000000..42f1edd --- /dev/null +++ b/examples/xmlpatterns/schema/files/invalid_contact.xml @@ -0,0 +1,11 @@ + + John + Doe + Prof. + + Sandakerveien 116 + N-0550 + Oslo + Norway + + diff --git a/examples/xmlpatterns/schema/files/invalid_order.xml b/examples/xmlpatterns/schema/files/invalid_order.xml new file mode 100644 index 0000000..8ffc5fd --- /dev/null +++ b/examples/xmlpatterns/schema/files/invalid_order.xml @@ -0,0 +1,13 @@ + + 234219 +
+ 21692 + 3 +
+
+ 24749 + 9 +
+ 2009-01-23 + yes +
diff --git a/examples/xmlpatterns/schema/files/invalid_recipe.xml b/examples/xmlpatterns/schema/files/invalid_recipe.xml new file mode 100644 index 0000000..4d75af6 --- /dev/null +++ b/examples/xmlpatterns/schema/files/invalid_recipe.xml @@ -0,0 +1,14 @@ + + Cheese on Toast + + + diff --git a/examples/xmlpatterns/schema/files/order.xsd b/examples/xmlpatterns/schema/files/order.xsd new file mode 100644 index 0000000..405cafe --- /dev/null +++ b/examples/xmlpatterns/schema/files/order.xsd @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/xmlpatterns/schema/files/recipe.xsd b/examples/xmlpatterns/schema/files/recipe.xsd new file mode 100644 index 0000000..bbbafd9 --- /dev/null +++ b/examples/xmlpatterns/schema/files/recipe.xsd @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/xmlpatterns/schema/files/valid_contact.xml b/examples/xmlpatterns/schema/files/valid_contact.xml new file mode 100644 index 0000000..53c04d4 --- /dev/null +++ b/examples/xmlpatterns/schema/files/valid_contact.xml @@ -0,0 +1,11 @@ + + John + Doe + 1977-12-25 + + Sandakerveien 116 + N-0550 + Oslo + Norway + + diff --git a/examples/xmlpatterns/schema/files/valid_order.xml b/examples/xmlpatterns/schema/files/valid_order.xml new file mode 100644 index 0000000..f83c36c --- /dev/null +++ b/examples/xmlpatterns/schema/files/valid_order.xml @@ -0,0 +1,18 @@ + + 194223 +
+ 22242 + 5 +
+
+ 32372 + 12 + without stripes +
+
+ 23649 + 2 +
+ 2009-01-23 + true +
diff --git a/examples/xmlpatterns/schema/files/valid_recipe.xml b/examples/xmlpatterns/schema/files/valid_recipe.xml new file mode 100644 index 0000000..f6499ba --- /dev/null +++ b/examples/xmlpatterns/schema/files/valid_recipe.xml @@ -0,0 +1,13 @@ + + Cheese on Toast + + + diff --git a/examples/xmlpatterns/schema/schema.py b/examples/xmlpatterns/schema/schema.py new file mode 100755 index 0000000..4a24e4f --- /dev/null +++ b/examples/xmlpatterns/schema/schema.py @@ -0,0 +1,278 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtGui, QtWidgets, QtXmlPatterns + +import schema_rc +from ui_schema import Ui_SchemaMainWindow + + +try: + # Python v2. + unicode + + def encode_utf8(ba): + return unicode(ba, encoding='utf8') + + def decode_utf8(qs): + return QtCore.QByteArray(str(qs)) + +except NameError: + # Python v3. + + def encode_utf8(ba): + return str(ba.data(), encoding='utf8') + + def decode_utf8(qs): + return QtCore.QByteArray(bytes(qs, encoding='utf8')) + + +class XmlSyntaxHighlighter(QtGui.QSyntaxHighlighter): + + def __init__(self, parent=None): + super(XmlSyntaxHighlighter, self).__init__(parent) + + self.highlightingRules = [] + + # Tag format. + format = QtGui.QTextCharFormat() + format.setForeground(QtCore.Qt.darkBlue) + format.setFontWeight(QtGui.QFont.Bold) + pattern = QtCore.QRegExp("(<[a-zA-Z:]+\\b|<\\?[a-zA-Z:]+\\b|\\?>|>|/>|)") + self.highlightingRules.append((pattern, format)) + + # Attribute format. + format = QtGui.QTextCharFormat() + format.setForeground(QtCore.Qt.darkGreen) + pattern = QtCore.QRegExp("[a-zA-Z:]+=") + self.highlightingRules.append((pattern, format)) + + # Attribute content format. + format = QtGui.QTextCharFormat() + format.setForeground(QtCore.Qt.red) + pattern = QtCore.QRegExp("(\"[^\"]*\"|'[^']*')") + self.highlightingRules.append((pattern, format)) + + # Comment format. + self.commentFormat = QtGui.QTextCharFormat() + self.commentFormat.setForeground(QtCore.Qt.lightGray) + self.commentFormat.setFontItalic(True) + + self.commentStartExpression = QtCore.QRegExp("") + + def highlightBlock(self, text): + for pattern, format in self.highlightingRules: + expression = QtCore.QRegExp(pattern) + index = expression.indexIn(text) + while index >= 0: + length = expression.matchedLength() + self.setFormat(index, length, format) + index = expression.indexIn(text, index + length) + + self.setCurrentBlockState(0) + + startIndex = 0 + if self.previousBlockState() != 1: + startIndex = self.commentStartExpression.indexIn(text) + + while startIndex >= 0: + endIndex = self.commentEndExpression.indexIn(text, startIndex) + if endIndex == -1: + self.setCurrentBlockState(1) + commentLength = text.length() - startIndex + else: + commentLength = endIndex - startIndex + self.commentEndExpression.matchedLength() + + self.setFormat(startIndex, commentLength, self.commentFormat) + startIndex = self.commentStartExpression.indexIn(text, + startIndex + commentLength) + + +class MessageHandler(QtXmlPatterns.QAbstractMessageHandler): + + def __init__(self): + super(MessageHandler, self).__init__() + + self.m_description = "" + self.m_sourceLocation = QtXmlPatterns.QSourceLocation() + + def statusMessage(self): + return self.m_description + + def line(self): + return self.m_sourceLocation.line() + + def column(self): + return self.m_sourceLocation.column() + + def handleMessage(self, type, description, identifier, sourceLocation): + self.m_description = description + self.m_sourceLocation = sourceLocation + + +class MainWindow(QtWidgets.QMainWindow, Ui_SchemaMainWindow): + + def __init__(self): + QtWidgets.QMainWindow.__init__(self) + + self.setupUi(self) + + XmlSyntaxHighlighter(self.schemaView.document()) + XmlSyntaxHighlighter(self.instanceEdit.document()) + + self.schemaSelection.addItem("Contact Schema") + self.schemaSelection.addItem("Recipe Schema") + self.schemaSelection.addItem("Order Schema") + + self.instanceSelection.addItem("Valid Contact Instance") + self.instanceSelection.addItem("Invalid Contact Instance") + + self.schemaSelection.currentIndexChanged[int].connect(self.schemaSelected) + self.instanceSelection.currentIndexChanged[int].connect(self.instanceSelected) + self.validateButton.clicked.connect(self.validate) + self.instanceEdit.textChanged.connect(self.textChanged) + + self.validationStatus.setAlignment(QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter) + + self.schemaSelected(0) + self.instanceSelected(0) + + def schemaSelected(self, index): + self.instanceSelection.clear() + + if index == 0: + self.instanceSelection.addItem("Valid Contact Instance") + self.instanceSelection.addItem("Invalid Contact Instance") + elif index == 1: + self.instanceSelection.addItem("Valid Recipe Instance") + self.instanceSelection.addItem("Invalid Recipe Instance") + elif index == 2: + self.instanceSelection.addItem("Valid Order Instance") + self.instanceSelection.addItem("Invalid Order Instance") + + self.textChanged() + + schemaFile = QtCore.QFile(':/schema_%d.xsd' % index) + schemaFile.open(QtCore.QIODevice.ReadOnly) + schemaData = schemaFile.readAll() + self.schemaView.setPlainText(encode_utf8(schemaData)) + + self.validate() + + def instanceSelected(self, index): + if index is -1: + return + + index += 2 * self.schemaSelection.currentIndex() + instanceFile = QtCore.QFile(':/instance_%d.xml' % index) + instanceFile.open(QtCore.QIODevice.ReadOnly) + instanceData = instanceFile.readAll() + self.instanceEdit.setPlainText(encode_utf8(instanceData)) + + self.validate() + + def validate(self): + schemaData = decode_utf8(self.schemaView.toPlainText()) + instanceData = decode_utf8(self.instanceEdit.toPlainText()) + + messageHandler = MessageHandler() + + schema = QtXmlPatterns.QXmlSchema() + schema.setMessageHandler(messageHandler) + schema.load(schemaData, QtCore.QUrl()) + + errorOccurred = False + if not schema.isValid(): + errorOccurred = True + else: + validator = QtXmlPatterns.QXmlSchemaValidator(schema) + if not validator.validate(instanceData): + errorOccurred = True + + if errorOccurred: + self.validationStatus.setText(messageHandler.statusMessage()) + self.moveCursor(messageHandler.line(), messageHandler.column()) + background = QtCore.Qt.red + else: + self.validationStatus.setText("validation successful") + background = QtCore.Qt.green + + styleSheet = 'QLabel {background: %s; padding: 3px}' % QtGui.QColor(background).lighter(160).name() + self.validationStatus.setStyleSheet(styleSheet) + + def textChanged(self): + self.instanceEdit.setExtraSelections([]) + + def moveCursor(self, line, column): + self.instanceEdit.moveCursor(QtGui.QTextCursor.Start) + + for i in range(1, line): + self.instanceEdit.moveCursor(QtGui.QTextCursor.Down) + + for i in range(1, column): + self.instanceEdit.moveCursor(QtGui.QTextCursor.Right) + + extraSelections = [] + selection = QtWidgets.QTextEdit.ExtraSelection() + + lineColor = QtGui.QColor(QtCore.Qt.red).lighter(160) + selection.format.setBackground(lineColor) + selection.format.setProperty(QtGui.QTextFormat.FullWidthSelection, True) + selection.cursor = self.instanceEdit.textCursor() + selection.cursor.clearSelection() + extraSelections.append(selection) + + self.instanceEdit.setExtraSelections(extraSelections) + + self.instanceEdit.setFocus() + + +if __name__ == '__main__': + + import sys + + app = QtWidgets.QApplication(sys.argv) + window = MainWindow() + window.show() + sys.exit(app.exec_()) diff --git a/examples/xmlpatterns/schema/schema.qrc b/examples/xmlpatterns/schema/schema.qrc new file mode 100644 index 0000000..eb7ddfd --- /dev/null +++ b/examples/xmlpatterns/schema/schema.qrc @@ -0,0 +1,13 @@ + + + files/contact.xsd + files/recipe.xsd + files/order.xsd + files/valid_contact.xml + files/invalid_contact.xml + files/valid_recipe.xml + files/invalid_recipe.xml + files/valid_order.xml + files/invalid_order.xml + + diff --git a/examples/xmlpatterns/schema/schema.ui b/examples/xmlpatterns/schema/schema.ui new file mode 100644 index 0000000..b67f444 --- /dev/null +++ b/examples/xmlpatterns/schema/schema.ui @@ -0,0 +1,71 @@ + + + SchemaMainWindow + + + + 0 + 0 + 417 + 594 + + + + XML Schema Validation + + + + + + + XML Schema Document: + + + + + + + + + + + + + XML Instance Document: + + + + + + + + + + + + + Status: + + + + + + + not validated + + + + + + + Validate + + + + + + + + + + diff --git a/examples/xmlpatterns/schema/schema_rc.py b/examples/xmlpatterns/schema/schema_rc.py new file mode 100644 index 0000000..87d567c --- /dev/null +++ b/examples/xmlpatterns/schema/schema_rc.py @@ -0,0 +1,501 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2013 Riverbank Computing Limited. +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: http://www.qt.io/licensing/ +## +## This file is part of the Qt for Python examples of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:BSD$ +## You may use this file under the terms of the BSD license as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Tue Jul 27 10:50:50 2010 +# by: The Resource Compiler for PySide (Qt v4.6.2) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x03\x67\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x3f\x3e\x0a\x3c\x78\x73\x64\x3a\x73\x63\x68\x65\x6d\x61\ +\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x73\x64\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x31\x2f\x58\x4d\x4c\x53\x63\x68\x65\x6d\x61\x22\x3e\x0a\x0a\ +\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\ +\x20\x6e\x61\x6d\x65\x3d\x22\x6f\x72\x64\x65\x72\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\x6d\x70\ +\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\ +\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\ +\x20\x6e\x61\x6d\x65\x3d\x22\x63\x75\x73\x74\x6f\x6d\x65\x72\x49\ +\x64\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x70\x6f\x73\ +\x69\x74\x69\x76\x65\x49\x6e\x74\x65\x67\x65\x72\x22\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\ +\x65\x3d\x22\x61\x72\x74\x69\x63\x6c\x65\x22\x20\x74\x79\x70\x65\ +\x3d\x22\x61\x72\x74\x69\x63\x6c\x65\x54\x79\x70\x65\x22\x20\x6d\ +\x61\x78\x4f\x63\x63\x75\x72\x73\x3d\x22\x75\x6e\x62\x6f\x75\x6e\ +\x64\x65\x64\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\ +\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x64\x65\x6c\x69\x76\x65\ +\x72\x79\x44\x61\x74\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\ +\x64\x3a\x64\x61\x74\x65\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\ +\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x70\x61\x79\ +\x65\x64\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x62\x6f\ +\x6f\x6c\x65\x61\x6e\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x73\x65\x71\x75\x65\ +\x6e\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x78\ +\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\ +\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\ +\x74\x3e\x0a\x0a\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\x6d\ +\x70\x6c\x65\x78\x54\x79\x70\x65\x20\x6e\x61\x6d\x65\x3d\x22\x61\ +\x72\x74\x69\x63\x6c\x65\x54\x79\x70\x65\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\ +\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\ +\x65\x3d\x22\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x22\x20\x74\x79\ +\x70\x65\x3d\x22\x78\x73\x64\x3a\x70\x6f\x73\x69\x74\x69\x76\x65\ +\x49\x6e\x74\x65\x67\x65\x72\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\ +\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x75\x6e\x74\x22\ +\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x70\x6f\x73\x69\x74\ +\x69\x76\x65\x49\x6e\x74\x65\x67\x65\x72\x22\x2f\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\ +\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6d\ +\x6d\x65\x6e\x74\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\ +\x73\x74\x72\x69\x6e\x67\x22\x20\x6d\x69\x6e\x4f\x63\x63\x75\x72\ +\x73\x3d\x22\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\x63\x65\x3e\x0a\ +\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\ +\x78\x54\x79\x70\x65\x3e\x0a\x0a\x3c\x2f\x78\x73\x64\x3a\x73\x63\ +\x68\x65\x6d\x61\x3e\x0a\ +\x00\x00\x01\x1d\ +\x3c\ +\x63\x6f\x6e\x74\x61\x63\x74\x3e\x0a\x20\x20\x20\x20\x3c\x67\x69\ +\x76\x65\x6e\x4e\x61\x6d\x65\x3e\x4a\x6f\x68\x6e\x3c\x2f\x67\x69\ +\x76\x65\x6e\x4e\x61\x6d\x65\x3e\x0a\x20\x20\x20\x20\x3c\x66\x61\ +\x6d\x69\x6c\x79\x4e\x61\x6d\x65\x3e\x44\x6f\x65\x3c\x2f\x66\x61\ +\x6d\x69\x6c\x79\x4e\x61\x6d\x65\x3e\x0a\x20\x20\x20\x20\x3c\x74\ +\x69\x74\x6c\x65\x3e\x50\x72\x6f\x66\x2e\x3c\x2f\x74\x69\x74\x6c\ +\x65\x3e\x0a\x20\x20\x20\x20\x3c\x77\x6f\x72\x6b\x41\x64\x64\x72\ +\x65\x73\x73\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x72\x65\x65\x74\x3e\x53\x61\x6e\x64\x61\x6b\x65\x72\x76\x65\x69\ +\x65\x6e\x20\x31\x31\x36\x3c\x2f\x73\x74\x72\x65\x65\x74\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x7a\x69\x70\x43\x6f\x64\x65\ +\x3e\x4e\x2d\x30\x35\x35\x30\x3c\x2f\x7a\x69\x70\x43\x6f\x64\x65\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x69\x74\x79\x3e\ +\x4f\x73\x6c\x6f\x3c\x2f\x63\x69\x74\x79\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x63\x6f\x75\x6e\x74\x72\x79\x3e\x4e\x6f\x72\ +\x77\x61\x79\x3c\x2f\x63\x6f\x75\x6e\x74\x72\x79\x3e\x0a\x20\x20\ +\x20\x20\x3c\x2f\x77\x6f\x72\x6b\x41\x64\x64\x72\x65\x73\x73\x3e\ +\x0a\x3c\x2f\x63\x6f\x6e\x74\x61\x63\x74\x3e\x0a\ +\x00\x00\x02\x25\ +\x3c\ +\x72\x65\x63\x69\x70\x65\x3e\x0a\x20\x20\x20\x20\x3c\x74\x69\x74\ +\x6c\x65\x3e\x43\x68\x65\x65\x73\x65\x20\x6f\x6e\x20\x54\x6f\x61\ +\x73\x74\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\ +\x69\x6e\x67\x72\x65\x64\x69\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\ +\x22\x42\x72\x65\x61\x64\x22\x20\x71\x75\x61\x6e\x74\x69\x74\x79\ +\x3d\x22\x32\x22\x20\x75\x6e\x69\x74\x3d\x22\x73\x6c\x69\x63\x65\ +\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x67\x72\x65\x64\ +\x69\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x43\x68\x65\x65\x73\ +\x65\x22\x20\x71\x75\x61\x6e\x74\x69\x74\x79\x3d\x22\x32\x22\x20\ +\x75\x6e\x69\x74\x3d\x22\x73\x6c\x69\x63\x65\x73\x22\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x74\x69\x6d\x65\x20\x71\x75\x61\x6e\x74\x69\ +\x74\x79\x3d\x22\x33\x22\x20\x75\x6e\x69\x74\x3d\x22\x6d\x69\x6e\ +\x75\x74\x65\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6d\x65\x74\ +\x68\x6f\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x65\x70\x3e\x31\x2e\x20\x53\x6c\x69\x63\x65\x20\x74\x68\x65\x20\ +\x62\x72\x65\x61\x64\x20\x61\x6e\x64\x20\x63\x68\x65\x65\x73\x65\ +\x2e\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x65\x70\x3e\x32\x2e\x20\x47\x72\x69\x6c\x6c\x20\ +\x6f\x6e\x65\x20\x73\x69\x64\x65\x20\x6f\x66\x20\x65\x61\x63\x68\ +\x20\x73\x6c\x69\x63\x65\x20\x6f\x66\x20\x62\x72\x65\x61\x64\x2e\ +\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x65\x70\x3e\x33\x2e\x20\x54\x75\x72\x6e\x20\x6f\x76\ +\x65\x72\x20\x74\x68\x65\x20\x62\x72\x65\x61\x64\x20\x61\x6e\x64\ +\x20\x70\x6c\x61\x63\x65\x20\x61\x20\x73\x6c\x69\x63\x65\x20\x6f\ +\x66\x20\x63\x68\x65\x65\x73\x65\x20\x6f\x6e\x20\x65\x61\x63\x68\ +\x20\x70\x69\x65\x63\x65\x2e\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x65\x70\x3e\x34\x2e\x20\ +\x47\x72\x69\x6c\x6c\x20\x75\x6e\x74\x69\x6c\x20\x74\x68\x65\x20\ +\x63\x68\x65\x65\x73\x65\x20\x68\x61\x73\x20\x73\x74\x61\x72\x74\ +\x65\x64\x20\x74\x6f\x20\x6d\x65\x6c\x74\x2e\x3c\x2f\x73\x74\x65\ +\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x65\x70\ +\x3e\x35\x2e\x20\x53\x65\x72\x76\x65\x20\x61\x6e\x64\x20\x65\x6e\ +\x6a\x6f\x79\x21\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\ +\x3c\x2f\x6d\x65\x74\x68\x6f\x64\x3e\x0a\x3c\x2f\x72\x65\x63\x69\ +\x70\x65\x3e\x0a\ +\x00\x00\x03\xbb\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x3f\x3e\x0a\x3c\x78\x73\x64\x3a\x73\x63\x68\x65\x6d\x61\ +\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x73\x64\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x31\x2f\x58\x4d\x4c\x53\x63\x68\x65\x6d\x61\x22\x3e\x0a\x0a\ +\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\ +\x20\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6e\x74\x61\x63\x74\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\ +\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\ +\x65\x6e\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\ +\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x67\x69\x76\x65\x6e\x4e\x61\ +\x6d\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x73\x74\ +\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\ +\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x66\x61\x6d\x69\x6c\ +\x79\x4e\x61\x6d\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\ +\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\ +\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x62\x69\ +\x72\x74\x68\x64\x61\x74\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\ +\x73\x64\x3a\x64\x61\x74\x65\x22\x20\x6d\x69\x6e\x4f\x63\x63\x75\ +\x72\x73\x3d\x22\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\ +\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x68\x6f\x6d\x65\ +\x41\x64\x64\x72\x65\x73\x73\x22\x20\x74\x79\x70\x65\x3d\x22\x61\ +\x64\x64\x72\x65\x73\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\ +\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x77\x6f\x72\ +\x6b\x41\x64\x64\x72\x65\x73\x73\x22\x20\x74\x79\x70\x65\x3d\x22\ +\x61\x64\x64\x72\x65\x73\x73\x22\x20\x6d\x69\x6e\x4f\x63\x63\x75\ +\x72\x73\x3d\x22\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x73\x65\x71\x75\x65\ +\x6e\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x78\ +\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\ +\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\ +\x74\x3e\x0a\x0a\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\x6d\ +\x70\x6c\x65\x78\x54\x79\x70\x65\x20\x6e\x61\x6d\x65\x3d\x22\x61\ +\x64\x64\x72\x65\x73\x73\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\x63\x65\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\ +\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x73\ +\x74\x72\x65\x65\x74\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\ +\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\ +\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x7a\x69\x70\x43\x6f\x64\ +\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x73\x74\x72\ +\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\ +\x6e\x61\x6d\x65\x3d\x22\x63\x69\x74\x79\x22\x20\x74\x79\x70\x65\ +\x3d\x22\x78\x73\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\ +\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x63\ +\x6f\x75\x6e\x74\x72\x79\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\ +\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\ +\x63\x65\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x63\x6f\ +\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\x0a\x3c\x2f\x78\x73\ +\x64\x3a\x73\x63\x68\x65\x6d\x61\x3e\x0a\ +\x00\x00\x01\xb6\ +\x3c\ +\x6f\x72\x64\x65\x72\x3e\x0a\x20\x20\x20\x20\x3c\x63\x75\x73\x74\ +\x6f\x6d\x65\x72\x49\x64\x3e\x31\x39\x34\x32\x32\x33\x3c\x2f\x63\ +\x75\x73\x74\x6f\x6d\x65\x72\x49\x64\x3e\x0a\x20\x20\x20\x20\x3c\ +\x61\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x32\x32\x32\x34\ +\x32\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x35\x3c\x2f\ +\x63\x6f\x75\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x61\x72\x74\ +\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\x61\x72\x74\x69\x63\ +\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x61\x72\x74\ +\x69\x63\x6c\x65\x49\x64\x3e\x33\x32\x33\x37\x32\x3c\x2f\x61\x72\ +\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x31\x32\x3c\x2f\x63\x6f\x75\x6e\ +\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x6f\x6d\x6d\ +\x65\x6e\x74\x3e\x77\x69\x74\x68\x6f\x75\x74\x20\x73\x74\x72\x69\ +\x70\x65\x73\x3c\x2f\x63\x6f\x6d\x6d\x65\x6e\x74\x3e\x0a\x20\x20\ +\x20\x20\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\ +\x20\x3c\x61\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x32\x33\ +\x36\x34\x39\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x32\ +\x3c\x2f\x63\x6f\x75\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x61\ +\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\x64\x65\x6c\ +\x69\x76\x65\x72\x79\x44\x61\x74\x65\x3e\x32\x30\x30\x39\x2d\x30\ +\x31\x2d\x32\x33\x3c\x2f\x64\x65\x6c\x69\x76\x65\x72\x79\x44\x61\ +\x74\x65\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x79\x65\x64\x3e\x74\ +\x72\x75\x65\x3c\x2f\x70\x61\x79\x65\x64\x3e\x0a\x3c\x2f\x6f\x72\ +\x64\x65\x72\x3e\x0a\ +\x00\x00\x02\x55\ +\x3c\ +\x72\x65\x63\x69\x70\x65\x3e\x0a\x20\x20\x20\x20\x3c\x74\x69\x74\ +\x6c\x65\x3e\x43\x68\x65\x65\x73\x65\x20\x6f\x6e\x20\x54\x6f\x61\ +\x73\x74\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\ +\x69\x6e\x67\x72\x65\x64\x69\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\ +\x22\x42\x72\x65\x61\x64\x22\x20\x71\x75\x61\x6e\x74\x69\x74\x79\ +\x3d\x22\x32\x22\x20\x75\x6e\x69\x74\x3d\x22\x73\x6c\x69\x63\x65\ +\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x67\x72\x65\x64\ +\x69\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x43\x68\x65\x65\x73\ +\x65\x22\x20\x71\x75\x61\x6e\x74\x69\x74\x79\x3d\x22\x32\x22\x20\ +\x75\x6e\x69\x74\x3d\x22\x73\x6c\x69\x63\x65\x73\x22\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x74\x69\x6d\x65\x20\x71\x75\x61\x6e\x74\x69\ +\x74\x79\x3d\x22\x33\x22\x20\x75\x6e\x69\x74\x3d\x22\x64\x61\x79\ +\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6d\x65\x74\x68\x6f\x64\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x65\x70\x3e\ +\x31\x2e\x20\x53\x6c\x69\x63\x65\x20\x74\x68\x65\x20\x62\x72\x65\ +\x61\x64\x20\x61\x6e\x64\x20\x63\x68\x65\x65\x73\x65\x2e\x3c\x2f\ +\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\ +\x74\x65\x70\x3e\x32\x2e\x20\x47\x72\x69\x6c\x6c\x20\x6f\x6e\x65\ +\x20\x73\x69\x64\x65\x20\x6f\x66\x20\x65\x61\x63\x68\x20\x73\x6c\ +\x69\x63\x65\x20\x6f\x66\x20\x62\x72\x65\x61\x64\x2e\x3c\x2f\x73\ +\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x65\x70\x3e\x33\x2e\x20\x54\x75\x72\x6e\x20\x6f\x76\x65\x72\x20\ +\x74\x68\x65\x20\x62\x72\x65\x61\x64\x20\x61\x6e\x64\x20\x70\x6c\ +\x61\x63\x65\x20\x61\x20\x73\x6c\x69\x63\x65\x20\x6f\x66\x20\x63\ +\x68\x65\x65\x73\x65\x20\x6f\x6e\x20\x65\x61\x63\x68\x20\x70\x69\ +\x65\x63\x65\x2e\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x73\x74\x65\x70\x3e\x34\x2e\x20\x47\x72\x69\ +\x6c\x6c\x20\x75\x6e\x74\x69\x6c\x20\x74\x68\x65\x20\x63\x68\x65\ +\x65\x73\x65\x20\x68\x61\x73\x20\x73\x74\x61\x72\x74\x65\x64\x20\ +\x74\x6f\x20\x6d\x65\x6c\x74\x2e\x3c\x2f\x73\x74\x65\x70\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x65\x70\x3e\x35\x2e\ +\x20\x53\x65\x72\x76\x65\x20\x61\x6e\x64\x20\x65\x6e\x6a\x6f\x79\ +\x21\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6d\ +\x65\x74\x68\x6f\x64\x3e\x0a\x20\x20\x20\x20\x3c\x63\x6f\x6d\x6d\ +\x65\x6e\x74\x3e\x54\x65\x6c\x6c\x20\x79\x6f\x75\x72\x20\x66\x72\ +\x69\x65\x6e\x64\x73\x20\x61\x62\x6f\x75\x74\x20\x69\x74\x21\x3c\ +\x2f\x63\x6f\x6d\x6d\x65\x6e\x74\x3e\x0a\x3c\x2f\x72\x65\x63\x69\ +\x70\x65\x3e\x0a\ +\x00\x00\x06\x05\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x3f\x3e\x0a\x3c\x78\x73\x64\x3a\x73\x63\x68\x65\x6d\x61\ +\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x73\x64\x3d\x22\x68\x74\x74\x70\ +\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\ +\x30\x31\x2f\x58\x4d\x4c\x53\x63\x68\x65\x6d\x61\x22\x3e\x0a\x0a\ +\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\ +\x20\x6e\x61\x6d\x65\x3d\x22\x72\x65\x63\x69\x70\x65\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\x6d\ +\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\x65\ +\x6e\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\ +\x74\x20\x6e\x61\x6d\x65\x3d\x22\x74\x69\x74\x6c\x65\x22\x20\x74\ +\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\ +\x6e\x61\x6d\x65\x3d\x22\x69\x6e\x67\x72\x65\x64\x69\x65\x6e\x74\ +\x22\x20\x74\x79\x70\x65\x3d\x22\x69\x6e\x67\x72\x65\x64\x69\x65\ +\x6e\x74\x54\x79\x70\x65\x22\x20\x6d\x61\x78\x4f\x63\x63\x75\x72\ +\x73\x3d\x22\x75\x6e\x62\x6f\x75\x6e\x64\x65\x64\x22\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\ +\x65\x3d\x22\x74\x69\x6d\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x74\ +\x69\x6d\x65\x54\x79\x70\x65\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\ +\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x6d\x65\ +\x74\x68\x6f\x64\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\ +\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\ +\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\ +\x65\x3d\x22\x73\x74\x65\x70\x22\x20\x74\x79\x70\x65\x3d\x22\x78\ +\x73\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\x20\x6d\x61\x78\x4f\x63\ +\x63\x75\x72\x73\x3d\x22\x75\x6e\x62\x6f\x75\x6e\x64\x65\x64\x22\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\ +\x3a\x73\x65\x71\x75\x65\x6e\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x2f\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x2f\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x78\ +\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\x63\x65\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\ +\x65\x78\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x78\x73\ +\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x3e\x0a\x0a\x20\x20\x20\x20\ +\x3c\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\ +\x20\x6e\x61\x6d\x65\x3d\x22\x69\x6e\x67\x72\x65\x64\x69\x65\x6e\ +\x74\x54\x79\x70\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x78\x73\x64\x3a\x61\x74\x74\x72\x69\x62\x75\x74\x65\x20\x6e\ +\x61\x6d\x65\x3d\x22\x6e\x61\x6d\x65\x22\x20\x74\x79\x70\x65\x3d\ +\x22\x78\x73\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x61\x74\x74\x72\ +\x69\x62\x75\x74\x65\x20\x6e\x61\x6d\x65\x3d\x22\x71\x75\x61\x6e\ +\x74\x69\x74\x79\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\ +\x70\x6f\x73\x69\x74\x69\x76\x65\x49\x6e\x74\x65\x67\x65\x72\x22\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\ +\x61\x74\x74\x72\x69\x62\x75\x74\x65\x20\x6e\x61\x6d\x65\x3d\x22\ +\x75\x6e\x69\x74\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\ +\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\ +\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\ +\x0a\x0a\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\ +\x65\x78\x54\x79\x70\x65\x20\x6e\x61\x6d\x65\x3d\x22\x74\x69\x6d\ +\x65\x54\x79\x70\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x78\x73\x64\x3a\x61\x74\x74\x72\x69\x62\x75\x74\x65\x20\x6e\ +\x61\x6d\x65\x3d\x22\x71\x75\x61\x6e\x74\x69\x74\x79\x22\x20\x74\ +\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x70\x6f\x73\x69\x74\x69\x76\ +\x65\x49\x6e\x74\x65\x67\x65\x72\x22\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x61\x74\x74\x72\x69\x62\x75\ +\x74\x65\x20\x6e\x61\x6d\x65\x3d\x22\x75\x6e\x69\x74\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\ +\x3a\x73\x69\x6d\x70\x6c\x65\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\ +\x64\x3a\x72\x65\x73\x74\x72\x69\x63\x74\x69\x6f\x6e\x20\x62\x61\ +\x73\x65\x3d\x22\x78\x73\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6e\x75\x6d\x65\x72\ +\x61\x74\x69\x6f\x6e\x20\x76\x61\x6c\x75\x65\x3d\x22\x73\x65\x63\ +\x6f\x6e\x64\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\ +\x3a\x65\x6e\x75\x6d\x65\x72\x61\x74\x69\x6f\x6e\x20\x76\x61\x6c\ +\x75\x65\x3d\x22\x6d\x69\x6e\x75\x74\x65\x73\x22\x2f\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6e\x75\x6d\x65\x72\x61\x74\ +\x69\x6f\x6e\x20\x76\x61\x6c\x75\x65\x3d\x22\x68\x6f\x75\x72\x73\ +\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x72\x65\x73\x74\x72\x69\ +\x63\x74\x69\x6f\x6e\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x73\x69\x6d\x70\x6c\x65\x54\ +\x79\x70\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x78\ +\x73\x64\x3a\x61\x74\x74\x72\x69\x62\x75\x74\x65\x3e\x0a\x20\x20\ +\x20\x20\x3c\x2f\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\ +\x79\x70\x65\x3e\x0a\x0a\x3c\x2f\x78\x73\x64\x3a\x73\x63\x68\x65\ +\x6d\x61\x3e\x0a\ +\x00\x00\x01\x2e\ +\x3c\ +\x6f\x72\x64\x65\x72\x3e\x0a\x20\x20\x20\x20\x3c\x63\x75\x73\x74\ +\x6f\x6d\x65\x72\x49\x64\x3e\x32\x33\x34\x32\x31\x39\x3c\x2f\x63\ +\x75\x73\x74\x6f\x6d\x65\x72\x49\x64\x3e\x0a\x20\x20\x20\x20\x3c\ +\x61\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x32\x31\x36\x39\ +\x32\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x33\x3c\x2f\ +\x63\x6f\x75\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x61\x72\x74\ +\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\x61\x72\x74\x69\x63\ +\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x61\x72\x74\ +\x69\x63\x6c\x65\x49\x64\x3e\x32\x34\x37\x34\x39\x3c\x2f\x61\x72\ +\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x39\x3c\x2f\x63\x6f\x75\x6e\x74\ +\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x3e\ +\x0a\x20\x20\x20\x20\x3c\x64\x65\x6c\x69\x76\x65\x72\x79\x44\x61\ +\x74\x65\x3e\x32\x30\x30\x39\x2d\x30\x31\x2d\x32\x33\x3c\x2f\x64\ +\x65\x6c\x69\x76\x65\x72\x79\x44\x61\x74\x65\x3e\x0a\x20\x20\x20\ +\x20\x3c\x70\x61\x79\x65\x64\x3e\x79\x65\x73\x3c\x2f\x70\x61\x79\ +\x65\x64\x3e\x0a\x3c\x2f\x6f\x72\x64\x65\x72\x3e\x0a\ +\x00\x00\x01\x2a\ +\x3c\ +\x63\x6f\x6e\x74\x61\x63\x74\x3e\x0a\x20\x20\x20\x20\x3c\x67\x69\ +\x76\x65\x6e\x4e\x61\x6d\x65\x3e\x4a\x6f\x68\x6e\x3c\x2f\x67\x69\ +\x76\x65\x6e\x4e\x61\x6d\x65\x3e\x0a\x20\x20\x20\x20\x3c\x66\x61\ +\x6d\x69\x6c\x79\x4e\x61\x6d\x65\x3e\x44\x6f\x65\x3c\x2f\x66\x61\ +\x6d\x69\x6c\x79\x4e\x61\x6d\x65\x3e\x0a\x20\x20\x20\x20\x3c\x62\ +\x69\x72\x74\x68\x64\x61\x74\x65\x3e\x31\x39\x37\x37\x2d\x31\x32\ +\x2d\x32\x35\x3c\x2f\x62\x69\x72\x74\x68\x64\x61\x74\x65\x3e\x0a\ +\x20\x20\x20\x20\x3c\x68\x6f\x6d\x65\x41\x64\x64\x72\x65\x73\x73\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x65\x65\ +\x74\x3e\x53\x61\x6e\x64\x61\x6b\x65\x72\x76\x65\x69\x65\x6e\x20\ +\x31\x31\x36\x3c\x2f\x73\x74\x72\x65\x65\x74\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x7a\x69\x70\x43\x6f\x64\x65\x3e\x4e\x2d\ +\x30\x35\x35\x30\x3c\x2f\x7a\x69\x70\x43\x6f\x64\x65\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x69\x74\x79\x3e\x4f\x73\x6c\ +\x6f\x3c\x2f\x63\x69\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x63\x6f\x75\x6e\x74\x72\x79\x3e\x4e\x6f\x72\x77\x61\x79\ +\x3c\x2f\x63\x6f\x75\x6e\x74\x72\x79\x3e\x0a\x20\x20\x20\x20\x3c\ +\x2f\x68\x6f\x6d\x65\x41\x64\x64\x72\x65\x73\x73\x3e\x0a\x3c\x2f\ +\x63\x6f\x6e\x74\x61\x63\x74\x3e\x0a\ +" + +qt_resource_name = b"\ +\x00\x0c\ +\x08\x16\x87\xf4\ +\x00\x73\ +\x00\x63\x00\x68\x00\x65\x00\x6d\x00\x61\x00\x5f\x00\x32\x00\x2e\x00\x78\x00\x73\x00\x64\ +\x00\x0e\ +\x00\x79\x4a\x1c\ +\x00\x69\ +\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x31\x00\x2e\x00\x78\x00\x6d\x00\x6c\ +\x00\x0e\ +\x00\x70\x4a\x1c\ +\x00\x69\ +\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x32\x00\x2e\x00\x78\x00\x6d\x00\x6c\ +\x00\x0c\ +\x08\x10\x87\xf4\ +\x00\x73\ +\x00\x63\x00\x68\x00\x65\x00\x6d\x00\x61\x00\x5f\x00\x30\x00\x2e\x00\x78\x00\x73\x00\x64\ +\x00\x0e\ +\x00\x72\x4a\x1c\ +\x00\x69\ +\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x34\x00\x2e\x00\x78\x00\x6d\x00\x6c\ +\x00\x0e\ +\x00\x73\x4a\x1c\ +\x00\x69\ +\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x33\x00\x2e\x00\x78\x00\x6d\x00\x6c\ +\x00\x0c\ +\x08\x13\x87\xf4\ +\x00\x73\ +\x00\x63\x00\x68\x00\x65\x00\x6d\x00\x61\x00\x5f\x00\x31\x00\x2e\x00\x78\x00\x73\x00\x64\ +\x00\x0e\ +\x00\x75\x4a\x1c\ +\x00\x69\ +\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x35\x00\x2e\x00\x78\x00\x6d\x00\x6c\ +\x00\x0e\ +\x00\x76\x4a\x1c\ +\x00\x69\ +\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x30\x00\x2e\x00\x78\x00\x6d\x00\x6c\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x01\ +\x00\x00\x00\x40\x00\x00\x00\x00\x00\x01\x00\x00\x04\x8c\ +\x00\x00\x00\x80\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x74\ +\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x2e\ +\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x01\x00\x00\x14\x90\ +\x00\x00\x01\x04\x00\x00\x00\x00\x00\x01\x00\x00\x15\xc2\ +\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x03\x6b\ +\x00\x00\x00\x62\x00\x00\x00\x00\x00\x01\x00\x00\x06\xb5\ +\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x87\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/examples/xmlpatterns/schema/ui_schema.py b/examples/xmlpatterns/schema/ui_schema.py new file mode 100644 index 0000000..a5690c2 --- /dev/null +++ b/examples/xmlpatterns/schema/ui_schema.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'schema.ui' +# +# Created: Fri Feb 5 15:27:54 2010 +# by: PyQt4 UI code generator snapshot-4.7.1-c39e85a8e2ec +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore, QtGui, QtWidgets + +class Ui_SchemaMainWindow(object): + def setupUi(self, SchemaMainWindow): + SchemaMainWindow.setObjectName("SchemaMainWindow") + SchemaMainWindow.resize(417, 594) + self.centralwidget = QtWidgets.QWidget(SchemaMainWindow) + self.centralwidget.setObjectName("centralwidget") + self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) + self.gridLayout.setObjectName("gridLayout") + self.schemaLabel = QtWidgets.QLabel(self.centralwidget) + self.schemaLabel.setObjectName("schemaLabel") + self.gridLayout.addWidget(self.schemaLabel, 0, 0, 1, 2) + self.schemaSelection = QtWidgets.QComboBox(self.centralwidget) + self.schemaSelection.setObjectName("schemaSelection") + self.gridLayout.addWidget(self.schemaSelection, 0, 2, 1, 2) + self.schemaView = QtWidgets.QTextBrowser(self.centralwidget) + self.schemaView.setObjectName("schemaView") + self.gridLayout.addWidget(self.schemaView, 1, 0, 1, 4) + self.instanceLabel = QtWidgets.QLabel(self.centralwidget) + self.instanceLabel.setObjectName("instanceLabel") + self.gridLayout.addWidget(self.instanceLabel, 2, 0, 1, 2) + self.instanceSelection = QtWidgets.QComboBox(self.centralwidget) + self.instanceSelection.setObjectName("instanceSelection") + self.gridLayout.addWidget(self.instanceSelection, 2, 2, 1, 2) + self.instanceEdit = QtWidgets.QTextEdit(self.centralwidget) + self.instanceEdit.setObjectName("instanceEdit") + self.gridLayout.addWidget(self.instanceEdit, 3, 0, 1, 4) + self.label = QtWidgets.QLabel(self.centralwidget) + self.label.setObjectName("label") + self.gridLayout.addWidget(self.label, 4, 0, 1, 1) + self.validationStatus = QtWidgets.QLabel(self.centralwidget) + self.validationStatus.setObjectName("validationStatus") + self.gridLayout.addWidget(self.validationStatus, 4, 1, 1, 2) + self.validateButton = QtWidgets.QPushButton(self.centralwidget) + self.validateButton.setObjectName("validateButton") + self.gridLayout.addWidget(self.validateButton, 4, 3, 1, 1) + SchemaMainWindow.setCentralWidget(self.centralwidget) + self.statusbar = QtWidgets.QStatusBar(SchemaMainWindow) + self.statusbar.setObjectName("statusbar") + SchemaMainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(SchemaMainWindow) + QtCore.QMetaObject.connectSlotsByName(SchemaMainWindow) + + def retranslateUi(self, SchemaMainWindow): + SchemaMainWindow.setWindowTitle(QtWidgets.QApplication.translate("SchemaMainWindow", "XML Schema Validation", None)) + self.schemaLabel.setText(QtWidgets.QApplication.translate("SchemaMainWindow", "XML Schema Document:", None)) + self.instanceLabel.setText(QtWidgets.QApplication.translate("SchemaMainWindow", "XML Instance Document:", None)) + self.label.setText(QtWidgets.QApplication.translate("SchemaMainWindow", "Status:", None)) + self.validationStatus.setText(QtWidgets.QApplication.translate("SchemaMainWindow", "not validated", None)) + self.validateButton.setText(QtWidgets.QApplication.translate("SchemaMainWindow", "Validate", None)) + diff --git a/ez_setup.py b/ez_setup.py new file mode 100644 index 0000000..ddc630e --- /dev/null +++ b/ez_setup.py @@ -0,0 +1,376 @@ +#!/usr/bin/env python +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" +Bootstrap setuptools installation + +To use setuptools in your package's setup.py, include this +file in the same directory and add this to the top of your setup.py:: + + from ez_setup import use_setuptools + use_setuptools() + +To require a specific version of setuptools, set a download +mirror, or use an alternate download directory, simply supply +the appropriate options to ``use_setuptools()``. + +This file can also be run as a script to install or upgrade setuptools. +""" +import os +import shutil +import sys +import tempfile +import zipfile +import optparse +import subprocess +import platform +import textwrap +import contextlib + +from distutils import log + +try: + from urllib.request import urlopen +except ImportError: + from urllib2 import urlopen + +try: + from site import USER_SITE +except ImportError: + USER_SITE = None + +DEFAULT_VERSION = "7.0" +DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/" + +def _python_cmd(*args): + """ + Return True if the command succeeded. + """ + args = (sys.executable,) + args + return subprocess.call(args) == 0 + + +def _install(archive_filename, install_args=()): + with archive_context(archive_filename): + # installing + log.warn('Installing Setuptools') + if not _python_cmd('setup.py', 'install', *install_args): + log.warn('Something went wrong during the installation.') + log.warn('See the error message above.') + # exitcode will be 2 + return 2 + + +def _build_egg(egg, archive_filename, to_dir): + with archive_context(archive_filename): + # building an egg + log.warn('Building a Setuptools egg in {}'.format(to_dir)) + _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) + # returning the result + log.warn(egg) + if not os.path.exists(egg): + raise IOError('Could not build the egg.') + + +class ContextualZipFile(zipfile.ZipFile): + """ + Supplement ZipFile class to support context manager for Python 2.6 + """ + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + self.close() + + def __new__(cls, *args, **kwargs): + """ + Construct a ZipFile or ContextualZipFile as appropriate + """ + if hasattr(zipfile.ZipFile, '__exit__'): + return zipfile.ZipFile(*args, **kwargs) + return super(ContextualZipFile, cls).__new__(cls) + + +@contextlib.contextmanager +def archive_context(filename): + # extracting the archive + tmpdir = tempfile.mkdtemp() + log.warn('Extracting in {}'.format(tmpdir)) + old_wd = os.getcwd() + try: + os.chdir(tmpdir) + with ContextualZipFile(filename) as archive: + archive.extractall() + + # going in the directory + subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) + os.chdir(subdir) + log.warn('Now working in {}'.format(subdir)) + yield + + finally: + os.chdir(old_wd) + shutil.rmtree(tmpdir) + + +def _do_download(version, download_base, to_dir, download_delay): + egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg' + % (version, sys.version_info[0], sys.version_info[1])) + if not os.path.exists(egg): + archive = download_setuptools(version, download_base, + to_dir, download_delay) + _build_egg(egg, archive, to_dir) + sys.path.insert(0, egg) + + # Remove previously-imported pkg_resources if present (see + # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details). + if 'pkg_resources' in sys.modules: + del sys.modules['pkg_resources'] + + import setuptools + setuptools.bootstrap_install_from = egg + + +def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, + to_dir=os.curdir, download_delay=15): + to_dir = os.path.abspath(to_dir) + rep_modules = 'pkg_resources', 'setuptools' + imported = set(sys.modules).intersection(rep_modules) + try: + import pkg_resources + except ImportError: + return _do_download(version, download_base, to_dir, download_delay) + try: + pkg_resources.require("setuptools>=" + version) + return + except pkg_resources.DistributionNotFound: + return _do_download(version, download_base, to_dir, download_delay) + except pkg_resources.VersionConflict as VC_err: + if imported: + msg = textwrap.dedent(""" + The required version of setuptools (>={version}) is not + available, and can't be installed while this script is running. + Please install a more recent version first, using + 'easy_install -U setuptools'. + + (Currently using {VC_err.args[0]!r}) + """).format(VC_err=VC_err, version=version) + sys.stderr.write(msg) + sys.exit(2) + + # otherwise, reload ok + del pkg_resources, sys.modules['pkg_resources'] + return _do_download(version, download_base, to_dir, download_delay) + +def _clean_check(cmd, target): + """ + Run the command to download target. + If the command fails, clean up before re-raising the error. + """ + try: + subprocess.check_call(cmd) + except subprocess.CalledProcessError: + if os.access(target, os.F_OK): + os.unlink(target) + raise + +def download_file_powershell(url, target): + """ + Download the file at url to target using Powershell + (which will validate trust). + Raise an exception if the command cannot complete. + """ + target = os.path.abspath(target) + ps_cmd = ( + "[System.Net.WebRequest]::DefaultWebProxy.Credentials = " + "[System.Net.CredentialCache]::DefaultCredentials; " + "(new-object System.Net.WebClient).DownloadFile({}, {})".format( + url, target)) + ) + cmd = [ + 'powershell', + '-Command', + ps_cmd, + ] + _clean_check(cmd, target) + +def has_powershell(): + if platform.system() != 'Windows': + return False + cmd = ['powershell', '-Command', 'echo test'] + with open(os.path.devnull, 'wb') as devnull: + try: + subprocess.check_call(cmd, stdout=devnull, stderr=devnull) + except Exception: + return False + return True + +download_file_powershell.viable = has_powershell + +def download_file_curl(url, target): + cmd = ['curl', url, '--silent', '--output', target] + _clean_check(cmd, target) + +def has_curl(): + cmd = ['curl', '--version'] + with open(os.path.devnull, 'wb') as devnull: + try: + subprocess.check_call(cmd, stdout=devnull, stderr=devnull) + except Exception: + return False + return True + +download_file_curl.viable = has_curl + +def download_file_wget(url, target): + cmd = ['wget', url, '--quiet', '--output-document', target] + _clean_check(cmd, target) + +def has_wget(): + cmd = ['wget', '--version'] + with open(os.path.devnull, 'wb') as devnull: + try: + subprocess.check_call(cmd, stdout=devnull, stderr=devnull) + except Exception: + return False + return True + +download_file_wget.viable = has_wget + +def download_file_insecure(url, target): + """ + Use Python to download the file, even though it cannot authenticate + the connection. + """ + src = urlopen(url) + try: + # Read all the data in one block. + data = src.read() + finally: + src.close() + + # Write all the data in one block to avoid creating a partial file. + with open(target, "wb") as dst: + dst.write(data) + +download_file_insecure.viable = lambda: True + +def get_best_downloader(): + downloaders = ( + download_file_powershell, + download_file_curl, + download_file_wget, + download_file_insecure, + ) + viable_downloaders = (dl for dl in downloaders if dl.viable()) + return next(viable_downloaders, None) + +def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, + to_dir=os.curdir, delay=15, downloader_factory=get_best_downloader): + """ + Download setuptools from a specified location and return its + filename + + `version` should be a valid setuptools version number that is + available as an sdist for download under the `download_base` URL + (which should end with a '/'). + `to_dir` is the directory where the egg will be downloaded. + `delay` is the number of seconds to pause before an actual download + attempt. + + ``downloader_factory`` should be a function taking no arguments and + returning a function for downloading a URL to a target. + """ + # making sure we use the absolute path + to_dir = os.path.abspath(to_dir) + zip_name = "setuptools-{}.zip".format(version) + url = download_base + zip_name + saveto = os.path.join(to_dir, zip_name) + if not os.path.exists(saveto): # Avoid repeated downloads + log.warn("Downloading {}".format(url)) + downloader = downloader_factory() + downloader(url, saveto) + return os.path.realpath(saveto) + +def _build_install_args(options): + """ + Build the arguments to 'python setup.py install' on the + setuptools package + """ + return ['--user'] if options.user_install else [] + +def _parse_args(): + """ + Parse the command line for options + """ + parser = optparse.OptionParser() + parser.add_option( + '--user', dest='user_install', action='store_true', default=False, + help='install in user site package (requires Python 2.6 or later)') + parser.add_option( + '--download-base', dest='download_base', metavar="URL", + default=DEFAULT_URL, + help='alternative URL from where to download the setuptools package') + parser.add_option( + '--insecure', dest='downloader_factory', action='store_const', + const=lambda: download_file_insecure, default=get_best_downloader, + help='Use internal, non-validating downloader' + ) + parser.add_option( + '--version', help="Specify which version to download", + default=DEFAULT_VERSION, + ) + options, args = parser.parse_args() + # positional arguments are ignored + return options + +def main(): + """Install or upgrade setuptools and EasyInstall""" + options = _parse_args() + archive = download_setuptools( + version=options.version, + download_base=options.download_base, + downloader_factory=options.downloader_factory, + ) + return _install(archive, _build_install_args(options)) + +if __name__ == '__main__': + sys.exit(main()) diff --git a/header.BSD-OLD b/header.BSD-OLD new file mode 100644 index 0000000..687705f --- /dev/null +++ b/header.BSD-OLD @@ -0,0 +1,39 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the FOO module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD-OLD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ diff --git a/missing_bindings.py b/missing_bindings.py new file mode 100644 index 0000000..ad7cfce --- /dev/null +++ b/missing_bindings.py @@ -0,0 +1,442 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +# This script is used to generate a summary of missing types / classes +# which are present in C++ Qt5, but are missing in PySide2. +# +# Required packages: bs4 +# Installed via: pip install bs4 +# +# The script uses beautiful soup 4 to parse out the class names from +# the online Qt documentation. It then tries to import the types from +# PySide2. +# +# Example invocation of script: +# python missing_bindings.py --qt-version 5.9 -w all +# --qt-version - specify which version of qt documentation to load. +# -w - if PyQt5 is an installed package, check if the tested +# class also exists there. + +from __future__ import print_function + +try: + import urllib.request as urllib2 +except ImportError: + import urllib2 + +import argparse +from bs4 import BeautifulSoup +from collections import OrderedDict +from time import gmtime, strftime +import sys +import os.path + +modules_to_test = OrderedDict() + +# Essentials +modules_to_test['QtCore'] = 'qtcore-module.html' +modules_to_test['QtGui'] = 'qtgui-module.html' +modules_to_test['QtMultimedia'] = 'qtmultimedia-module.html' +modules_to_test['QtMultimediaWidgets'] = 'qtmultimediawidgets-module.html' +modules_to_test['QtNetwork'] = 'qtnetwork-module.html' +modules_to_test['QtQml'] = 'qtqml-module.html' +modules_to_test['QtQuick'] = 'qtquick-module.html' +modules_to_test['QtSql'] = 'qtsql-module.html' +modules_to_test['QtTest'] = 'qttest-module.html' +modules_to_test['QtWidgets'] = 'qtwidgets-module.html' + +# Addons +modules_to_test['Qt3DCore'] = 'qt3dcore-module.html' +modules_to_test['Qt3DInput'] = 'qt3dinput-module.html' +modules_to_test['Qt3DLogic'] = 'qt3dlogic-module.html' +modules_to_test['Qt3DRender'] = 'qt3drender-module.html' +modules_to_test['Qt3DAnimation'] = 'qt3danimation-module.html' +modules_to_test['Qt3DExtras'] = 'qt3dextras-module.html' +modules_to_test['QtConcurrent'] = 'qtconcurrent-module.html' +modules_to_test['QtNetworkAuth'] = 'qtnetworkauth-module.html' +modules_to_test['QtHelp'] = 'qthelp-module.html' +modules_to_test['QtLocation'] = 'qtlocation-module.html' +modules_to_test['QtPrintSupport'] = 'qtprintsupport-module.html' +modules_to_test['QtSCXML'] = 'qtscxml-module.html' +modules_to_test['QtSpeech'] = 'qtspeech-module.html' +modules_to_test['QtSvg'] = 'qtsvg-module.html' +modules_to_test['QtUiTools'] = 'qtuitools-module.html' +modules_to_test['QtWebChannel'] = 'qtwebchannel-module.html' +modules_to_test['QtWebEngine'] = 'qtwebengine-module.html' +modules_to_test['QtWebEngineWidgets'] = 'qtwebenginewidgets-module.html' +modules_to_test['QtWebSockets'] = 'qtwebsockets-module.html' +modules_to_test['QtMacExtras'] = 'qtmacextras-module.html' +modules_to_test['QtX11Extras'] = 'qtx11extras-module.html' +modules_to_test['QtWinExtras'] = 'qtwinextras-module.html' +modules_to_test['QtXml'] = 'qtxml-module.html' +modules_to_test['QtXmlPatterns'] = 'qtxmlpatterns-module.html' +modules_to_test['QtCharts'] = 'qt-charts-module.html' +modules_to_test['QtDataVisualization'] = 'qtdatavisualization-module.html' + +types_to_ignore = set() +# QtCore +types_to_ignore.add('QFlag') +types_to_ignore.add('QFlags') +types_to_ignore.add('QGlobalStatic') +types_to_ignore.add('QDebug') +types_to_ignore.add('QDebugStateSaver') +types_to_ignore.add('QMetaObject.Connection') +types_to_ignore.add('QPointer') +types_to_ignore.add('QAssociativeIterable') +types_to_ignore.add('QSequentialIterable') +types_to_ignore.add('QStaticPlugin') +types_to_ignore.add('QChar') +types_to_ignore.add('QLatin1Char') +types_to_ignore.add('QHash') +types_to_ignore.add('QMultiHash') +types_to_ignore.add('QLinkedList') +types_to_ignore.add('QList') +types_to_ignore.add('QMap') +types_to_ignore.add('QMultiMap') +types_to_ignore.add('QMap.key_iterator') +types_to_ignore.add('QPair') +types_to_ignore.add('QQueue') +types_to_ignore.add('QScopedArrayPointer') +types_to_ignore.add('QScopedPointer') +types_to_ignore.add('QScopedValueRollback') +types_to_ignore.add('QMutableSetIterator') +types_to_ignore.add('QSet') +types_to_ignore.add('QSet.const_iterator') +types_to_ignore.add('QSet.iterator') +types_to_ignore.add('QExplicitlySharedDataPointer') +types_to_ignore.add('QSharedData') +types_to_ignore.add('QSharedDataPointer') +types_to_ignore.add('QEnableSharedFromThis') +types_to_ignore.add('QSharedPointer') +types_to_ignore.add('QWeakPointer') +types_to_ignore.add('QStack') +types_to_ignore.add('QLatin1String') +types_to_ignore.add('QString') +types_to_ignore.add('QStringRef') +types_to_ignore.add('QStringList') +types_to_ignore.add('QStringMatcher') +types_to_ignore.add('QVarLengthArray') +types_to_ignore.add('QVector') +types_to_ignore.add('QFutureIterator') +types_to_ignore.add('QHashIterator') +types_to_ignore.add('QMutableHashIterator') +types_to_ignore.add('QLinkedListIterator') +types_to_ignore.add('QMutableLinkedListIterator') +types_to_ignore.add('QListIterator') +types_to_ignore.add('QMutableListIterator') +types_to_ignore.add('QMapIterator') +types_to_ignore.add('QMutableMapIterator') +types_to_ignore.add('QSetIterator') +types_to_ignore.add('QMutableVectorIterator') +types_to_ignore.add('QVectorIterator') + +# QtGui +types_to_ignore.add('QIconEnginePlugin') +types_to_ignore.add('QImageIOPlugin') +types_to_ignore.add('QGenericPlugin') +types_to_ignore.add('QGenericPluginFactory') +types_to_ignore.add('QGenericMatrix') +types_to_ignore.add('QOpenGLExtraFunctions') +types_to_ignore.add('QOpenGLFunctions') +types_to_ignore.add('QOpenGLFunctions_1_0') +types_to_ignore.add('QOpenGLFunctions_1_1') +types_to_ignore.add('QOpenGLFunctions_1_2') +types_to_ignore.add('QOpenGLFunctions_1_3') +types_to_ignore.add('QOpenGLFunctions_1_4') +types_to_ignore.add('QOpenGLFunctions_1_5') +types_to_ignore.add('QOpenGLFunctions_2_0') +types_to_ignore.add('QOpenGLFunctions_2_1') +types_to_ignore.add('QOpenGLFunctions_3_0') +types_to_ignore.add('QOpenGLFunctions_3_1') +types_to_ignore.add('QOpenGLFunctions_3_2_Compatibility') +types_to_ignore.add('QOpenGLFunctions_3_2_Core') +types_to_ignore.add('QOpenGLFunctions_3_3_Compatibility') +types_to_ignore.add('QOpenGLFunctions_3_3_Core') +types_to_ignore.add('QOpenGLFunctions_4_0_Compatibility') +types_to_ignore.add('QOpenGLFunctions_4_0_Core') +types_to_ignore.add('QOpenGLFunctions_4_1_Compatibility') +types_to_ignore.add('QOpenGLFunctions_4_1_Core') +types_to_ignore.add('QOpenGLFunctions_4_2_Compatibility') +types_to_ignore.add('QOpenGLFunctions_4_2_Core') +types_to_ignore.add('QOpenGLFunctions_4_3_Compatibility') +types_to_ignore.add('QOpenGLFunctions_4_3_Core') +types_to_ignore.add('QOpenGLFunctions_4_4_Compatibility') +types_to_ignore.add('QOpenGLFunctions_4_4_Core') +types_to_ignore.add('QOpenGLFunctions_4_5_Compatibility') +types_to_ignore.add('QOpenGLFunctions_4_5_Core') +types_to_ignore.add('QOpenGLFunctions_ES2') + +# QtWidgets +types_to_ignore.add('QItemEditorCreator') +types_to_ignore.add('QStandardItemEditorCreator') +types_to_ignore.add('QStylePlugin') + +# QtSql +types_to_ignore.add('QSqlDriverCreator') +types_to_ignore.add('QSqlDriverPlugin') + +qt_documentation_website_prefixes = OrderedDict() +qt_documentation_website_prefixes['5.6'] = 'http://doc.qt.io/qt-5.6/' +qt_documentation_website_prefixes['5.8'] = 'http://doc.qt.io/qt-5.8/' +qt_documentation_website_prefixes['5.9'] = 'http://doc.qt.io/qt-5.9/' +qt_documentation_website_prefixes['5.10'] = 'http://doc.qt.io/qt-5.10/' +qt_documentation_website_prefixes['5.11'] = 'http://doc.qt.io/qt-5/' +qt_documentation_website_prefixes['dev'] = 'http://doc-snapshots.qt.io/qt5-dev/' + + +def qt_version_to_doc_prefix(version): + if version in qt_documentation_website_prefixes: + return qt_documentation_website_prefixes[version] + else: + raise RuntimeError("The specified qt version is not supported") + + +def create_doc_url(module_doc_page_url, version): + return qt_version_to_doc_prefix(version) + module_doc_page_url + +parser = argparse.ArgumentParser() +parser.add_argument("module", + default='all', + choices=list(modules_to_test.keys()).append('all'), + nargs='?', + type=str, + help="the Qt module for which to get the missing types") +parser.add_argument("--qt-version", + "-v", + default='5.11', + choices=['5.6', '5.9', '5.11', 'dev'], + type=str, + dest='version', + help="the Qt version to use to check for types") +parser.add_argument("--which-missing", + "-w", + default='all', + choices=['all', 'in-pyqt', 'not-in-pyqt'], + type=str, + dest='which_missing', + help="Which missing types to show (all, or just those " + "that are not present in PyQt)") + +args = parser.parse_args() + +if hasattr(args, "module") and args.module != 'all': + saved_value = modules_to_test[args.module] + modules_to_test.clear() + modules_to_test[args.module] = saved_value + +pyside_package_name = "PySide2" +pyqt_package_name = "PyQt5" + +total_missing_types_count = 0 +total_missing_types_count_compared_to_pyqt = 0 +total_missing_modules_count = 0 + +wiki_file = open('missing_bindings_for_wiki_qt_io.txt', 'w') +wiki_file.truncate() + + +def log(*pargs, **kw): + print(*pargs) + + computed_str = '' + for arg in pargs: + computed_str += str(arg) + + style = 'text' + if 'style' in kw: + style = kw['style'] + + if style == 'heading1': + computed_str = '= ' + computed_str + ' =' + elif style == 'heading5': + computed_str = '===== ' + computed_str + ' =====' + elif style == 'with_newline': + computed_str += '\n' + elif style == 'bold_colon': + computed_str = computed_str.replace(':', ":'''") + computed_str += "'''" + computed_str += '\n' + elif style == 'error': + computed_str = "''" + computed_str.strip('\n') + "''\n" + elif style == 'text_with_link': + computed_str = computed_str + elif style == 'code': + computed_str = ' ' + computed_str + elif style == 'end': + return + + print(computed_str, file=wiki_file) + +log('PySide2 bindings for Qt {}'.format(args.version), style='heading1') + +log("""Using Qt version {} documentation to find public API Qt types and test +if the types are present in the PySide2 package.""".format(args.version)) + +log("""Results are usually stored at +https://wiki.qt.io/PySide2_Missing_Bindings +so consider taking the contents of the generated +missing_bindings_for_wiki_qt_io.txt file and updating the linked wiki page.""", +style='end') + +log("""Similar report: +https://gist.github.com/ethanhs/6c626ca4e291f3682589699296377d3a""", +style='text_with_link') + +python_executable = os.path.basename(sys.executable or '') +command_line_arguments = ' '.join(sys.argv) +report_date = strftime("%Y-%m-%d %H:%M:%S %Z", gmtime()) + +log(""" +This report was generated by running the following command: + {} {} +on the following date: + {} +""".format(python_executable, command_line_arguments, report_date)) + +for module_name in modules_to_test.keys(): + log(module_name, style='heading5') + + url = create_doc_url(modules_to_test[module_name], args.version) + log('Documentation link: {}\n'.format(url), style='text_with_link') + + # Import the tested module + try: + pyside_tested_module = getattr(__import__(pyside_package_name, + fromlist=[module_name]), module_name) + except Exception as e: + log('\nCould not load {}.{}. Received error: {}. Skipping.\n'.format( + pyside_package_name, module_name, str(e).replace("'", '')), + style='error') + total_missing_modules_count += 1 + continue + + try: + pyqt_tested_module = getattr(__import__(pyqt_package_name, + fromlist=[module_name]), module_name) + except Exception as e: + log("\nCould not load {}.{} for comparison. " + "Received error: {}.\n".format(pyqt_package_name, module_name, + str(e).replace("'", '')), style='error') + + # Get C++ class list from documentation page. + page = urllib2.urlopen(url) + soup = BeautifulSoup(page, 'html.parser') + + # Extract the Qt type names from the documentation classes table + links = soup.body.select('.annotated a') + types_on_html_page = [] + + for link in links: + link_text = link.text + link_text = link_text.replace('::', '.') + if link_text not in types_to_ignore: + types_on_html_page.append(link_text) + + log('Number of types in {}: {}'.format(module_name, + len(types_on_html_page)), style='bold_colon') + + missing_types_count = 0 + missing_types_compared_to_pyqt = 0 + missing_types = [] + for qt_type in types_on_html_page: + try: + pyside_qualified_type = 'pyside_tested_module.' + + if "Charts" in module_name: + pyside_qualified_type += 'QtCharts.' + elif "DataVisualization" in module_name: + pyside_qualified_type += 'QtDataVisualization.' + + pyside_qualified_type += qt_type + o = eval(pyside_qualified_type) + except: + missing_type = qt_type + missing_types_count += 1 + total_missing_types_count += 1 + + is_present_in_pyqt = False + try: + pyqt_qualified_type = 'pyqt_tested_module.' + + if "Charts" in module_name: + pyqt_qualified_type += 'QtCharts.' + elif "DataVisualization" in module_name: + pyqt_qualified_type += 'QtDataVisualization.' + + pyqt_qualified_type += qt_type + eval(pyqt_qualified_type) + missing_type += " (is present in PyQt5)" + missing_types_compared_to_pyqt += 1 + total_missing_types_count_compared_to_pyqt += 1 + is_present_in_pyqt = True + except: + pass + + if args.which_missing == 'all': + missing_types.append(missing_type) + elif args.which_missing == 'in-pyqt' and is_present_in_pyqt: + missing_types.append(missing_type) + elif (args.which_missing == 'not-in-pyqt' and + not is_present_in_pyqt): + missing_types.append(missing_type) + + if len(missing_types) > 0: + log('Missing types in {}:'.format(module_name), style='with_newline') + missing_types.sort() + for missing_type in missing_types: + log(missing_type, style='code') + log('') + + log('Number of missing types: {}'.format(missing_types_count), + style='bold_colon') + if len(missing_types) > 0: + log('Number of missing types that are present in PyQt5: {}' + .format(missing_types_compared_to_pyqt), style='bold_colon') + log('End of missing types for {}\n'.format(module_name), style='end') + else: + log('', style='end') + +log('Summary', style='heading5') +log('Total number of missing types: {}'.format(total_missing_types_count), + style='bold_colon') +log('Total number of missing types that are present in PyQt5: {}' + .format(total_missing_types_count_compared_to_pyqt), style='bold_colon') +log('Total number of missing modules: {}' + .format(total_missing_modules_count), style='bold_colon') +wiki_file.close() diff --git a/popenasync.py b/popenasync.py new file mode 100644 index 0000000..77faf9e --- /dev/null +++ b/popenasync.py @@ -0,0 +1,360 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +################################################################################ +""" + +Modification of http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/440554 + +""" + +#################################### IMPORTS ################################### + +import os +import subprocess +import errno +import time +import sys +import unittest +import tempfile + +def geterror (): + return sys.exc_info()[1] + +if sys.version_info >= (3,): + null_byte = '\x00'.encode('ascii') +else: + null_byte = '\x00' + +mswindows = (sys.platform == "win32") + +if mswindows: + if sys.version_info >= (3,): + # Test date should be in ascii. + def encode(s): + return s.encode('ascii', 'ignore') + + def decode(b): + return b.decode('ascii', 'ignore') + else: + # Strings only; do nothing + def encode(s): + return s + + def decode(b): + return b + + try: + import ctypes + from ctypes.wintypes import DWORD + kernel32 = ctypes.windll.kernel32 + TerminateProcess = ctypes.windll.kernel32.TerminateProcess + def WriteFile(handle, data, ol = None): + c_written = DWORD() + success = ctypes.windll.kernel32.WriteFile(handle, + ctypes.create_string_buffer(encode(data)), len(data), + ctypes.byref(c_written), ol) + return ctypes.windll.kernel32.GetLastError(), c_written.value + def ReadFile(handle, desired_bytes, ol = None): + c_read = DWORD() + buffer = ctypes.create_string_buffer(desired_bytes+1) + success = ctypes.windll.kernel32.ReadFile(handle, buffer, + desired_bytes, ctypes.byref(c_read), ol) + buffer[c_read.value] = null_byte + return ctypes.windll.kernel32.GetLastError(), decode(buffer.value) + def PeekNamedPipe(handle, desired_bytes): + c_avail = DWORD() + c_message = DWORD() + if desired_bytes > 0: + c_read = DWORD() + buffer = ctypes.create_string_buffer(desired_bytes+1) + success = ctypes.windll.kernel32.PeekNamedPipe(handle, buffer, + desired_bytes, ctypes.byref(c_read), ctypes.byref(c_avail), + ctypes.byref(c_message)) + buffer[c_read.value] = null_byte + return decode(buffer.value), c_avail.value, c_message.value + else: + success = ctypes.windll.kernel32.PeekNamedPipe(handle, None, + desired_bytes, None, ctypes.byref(c_avail), + ctypes.byref(c_message)) + return "", c_avail.value, c_message.value + + except ImportError: + from win32file import ReadFile, WriteFile + from win32pipe import PeekNamedPipe + from win32api import TerminateProcess + import msvcrt + +else: + from signal import SIGINT, SIGTERM, SIGKILL + import select + import fcntl + +################################### CONSTANTS ################################## + +PIPE = subprocess.PIPE + +################################################################################ + +class Popen(subprocess.Popen): + def __init__(self, *args, **kwargs): + subprocess.Popen.__init__(self, *args, **kwargs) + + def recv(self, maxsize=None): + return self._recv('stdout', maxsize) + + def recv_err(self, maxsize=None): + return self._recv('stderr', maxsize) + + def send_recv(self, input='', maxsize=None): + return self.send(input), self.recv(maxsize), self.recv_err(maxsize) + + def read_async(self, wait=.1, e=1, tr=5, stderr=0): + if tr < 1: + tr = 1 + x = time.time()+ wait + y = [] + r = '' + pr = self.recv + if stderr: + pr = self.recv_err + while time.time() < x or r: + r = pr() + if r is None: + if e: + raise Exception("Other end disconnected!") + else: + break + elif r: + y.append(r) + else: + time.sleep(max((x-time.time())/tr, 0)) + return ''.join(y) + + def send_all(self, data): + while len(data): + sent = self.send(data) + if sent is None: + raise Exception("Other end disconnected!") + data = buffer(data, sent) + + def get_conn_maxsize(self, which, maxsize): + if maxsize is None: + maxsize = 1024 + elif maxsize < 1: + maxsize = 1 + return getattr(self, which), maxsize + + def _close(self, which): + conn = getattr(self, which) + flags = fcntl.fcntl(conn, fcntl.F_GETFL) + if not conn.closed: + fcntl.fcntl(conn, fcntl.F_SETFL, flags & ~os.O_NONBLOCK) + assert conn.read() == '' + getattr(self, which).close() + setattr(self, which, None) + + if mswindows: + def kill(self): + # Recipes + #http://me.in-berlin.de/doc/python/faq/windows.html#how-do-i-emulate-os-kill-in-windows + #http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/347462 + + """kill function for Win32""" + TerminateProcess(int(self._handle), 0) # returns None + + def send(self, input): + if not self.stdin: + return None + + try: + x = msvcrt.get_osfhandle(self.stdin.fileno()) + (errCode, written) = WriteFile(x, input) + except ValueError: + return self._close('stdin') + except (subprocess.pywintypes.error, Exception): + if geterror()[0] in (109, errno.ESHUTDOWN): + return self._close('stdin') + raise + + return written + + def _recv(self, which, maxsize): + conn, maxsize = self.get_conn_maxsize(which, maxsize) + if conn is None: + return None + + try: + x = msvcrt.get_osfhandle(conn.fileno()) + (read, nAvail, nMessage) = PeekNamedPipe(x, 0) + if maxsize < nAvail: + nAvail = maxsize + if nAvail > 0: + (errCode, read) = ReadFile(x, nAvail, None) + except ValueError: + return self._close(which) + except (subprocess.pywintypes.error, Exception): + if geterror()[0] in (109, errno.ESHUTDOWN): + return self._close(which) + raise + + if self.universal_newlines: + # Translate newlines. For Python 3.x assume read is text. + # If bytes then another solution is needed. + read = read.replace("\r\n", "\n").replace("\r", "\n") + return read + + else: + def kill(self): + for i, sig in enumerate([SIGTERM, SIGKILL] * 2): + if i % 2 == 0: os.kill(self.pid, sig) + time.sleep((i * (i % 2) / 5.0) + 0.01) + + killed_pid, stat = os.waitpid(self.pid, os.WNOHANG) + if killed_pid != 0: return + + def send(self, input): + if not self.stdin: + return None + + if not select.select([], [self.stdin], [], 0)[1]: + return 0 + + try: + written = os.write(self.stdin.fileno(), input) + except OSError: + if geterror()[0] == errno.EPIPE: #broken pipe + return self._close('stdin') + raise + + return written + + def _recv(self, which, maxsize): + conn, maxsize = self.get_conn_maxsize(which, maxsize) + if conn is None: + return None + + flags = fcntl.fcntl(conn, fcntl.F_GETFL) + if not conn.closed: + fcntl.fcntl(conn, fcntl.F_SETFL, flags| os.O_NONBLOCK) + + try: + if not select.select([conn], [], [], 0)[0]: + return '' + + try: + r = conn.read(maxsize) + except IOError as e: + if e.errno == errno.EAGAIN: + return '' + raise + if not r: + return self._close(which) + + if self.universal_newlines: + r = r.replace("\r\n", "\n").replace("\r", "\n") + return r + finally: + if not conn.closed: + fcntl.fcntl(conn, fcntl.F_SETFL, flags) + +################################################################################ + +def proc_in_time_or_kill(cmd, time_out, wd = None, env = None): + proc = Popen ( + cmd, cwd = wd, env = env, + stdin = subprocess.PIPE, stdout = subprocess.PIPE, + stderr = subprocess.STDOUT, universal_newlines = 1 + ) + + ret_code = None + response = [] + + t = time.time() + while ret_code is None and ((time.time() -t) < time_out): + ret_code = proc.poll() + response += [proc.read_async(wait=0.1, e=0)] + + if ret_code is None: + ret_code = '"Process timed out (time_out = {} secs) '.format(time_out) + try: + proc.kill() + ret_code += 'and was successfully terminated"' + except Exception: + ret_code += ("and termination failed " + "(exception: {})".format(geterror(),)) + + return ret_code, ''.join(response) + +################################################################################ + +class AsyncTest(unittest.TestCase): + def test_proc_in_time_or_kill(self): + ret_code, response = proc_in_time_or_kill( + [sys.executable, '-c', 'while 1: pass'], time_out = 1 + ) + + self.assert_( 'rocess timed out' in ret_code ) + self.assert_( 'successfully terminated' in ret_code ) + +################################################################################ + +def _example(): + if sys.platform == 'win32': + shell, commands, tail = ('cmd', ('echo "hello"', 'echo "HELLO WORLD"'), + '\r\n') + else: + shell, commands, tail = ('sh', ('ls', 'echo HELLO WORLD'), '\n') + + a = Popen(shell, stdin=PIPE, stdout=PIPE) + sys.stdout.write(a.read_async()) + sys.stdout.write(" ") + for cmd in commands: + a.send_all(cmd + tail) + sys.stdout.write(a.read_async()) + sys.stdout.write(" ") + a.send_all('exit' + tail) + print (a.read_async(e=0)) + a.wait() + +################################################################################ + +if __name__ == '__main__': + if 1: unittest.main() + else: _example() diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..b218397 --- /dev/null +++ b/setup.py @@ -0,0 +1,304 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the Qt for Python project. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +""" +This is a distutils setup-script for the Qt for Python project + +To build PySide2 simply execute: + python setup.py build +or + python setup.py install +to build and install into your current Python installation. + + +Optionally, one can specify the location of qmake and cmake if it is +not on the current PATH with: + --qmake=/path/to/qt/bin/qmake +and + --cmake=/path/to/bin/cmake +respectively. + +For Windows, if OpenSSL support is required, it's necessary to specify +the directory path that contains the OpenSSL shared libraries +"libeay32.dll" and "ssleay32.dll", for example: + --openssl=C:\OpenSSL-Win64\bin +This will make sure that the libraries are copied into the PySide2 +package and are found by the QtNetwork module. + +ADDITIONAL OPTIONS: + +On Linux and macOS you can use the option `--standalone` to embed Qt +libraries into the PySide2 package. +The option does not affect Windows, because it is used implicitly, +i.e. all relevant DLLs have to be copied into the PySide2 package +anyway, because there is no proper rpath support on the platform. + +You can use the option `--rpath=/path/to/lib/path` to specify which +rpath values should be embedded into the PySide2 modules and shared +libraries. +This overrides the automatically generated values when the option is +not specified. + +You can use the option `--only-package` if you want to create more +binary packages (bdist_wheel, bdist_egg, ...) without rebuilding the +entire PySide2 every time: + +e.g.: + +* First, we create a bdist_wheel from a full PySide2 build: + + python setup.py bdist_wheel --qmake=c:\Qt\5.9\bin\qmake.exe + --cmake=c:\tools\cmake\bin\cmake.exe + --openssl=c:\libs\OpenSSL32bit\bin + +* Then, we create a bdist_egg reusing PySide2 build with option + `--only-package`: + + python setup.py bdist_egg --only-package + --qmake=c:\Qt\5.9\bin\qmake.exe + --cmake=c:\tools\cmake\bin\cmake.exe + --openssl=c:\libs\OpenSSL32bit\bin + +You can use the option `--qt-conf-prefix` to pass a path relative to +the PySide2 installed package, which will be embedded into an +auto-generated `qt.conf` registered in the Qt resource system. +This path will serve as the PrefixPath for QLibraryInfo, thus allowing +to choose where Qt plugins should be loaded from. +This option overrides the usual prefix chosen by `--standalone` option, +or when building on Windows. + +To temporarily disable registration of the internal `qt.conf` file, a +new environment variable called PYSIDE_DISABLE_INTERNAL_QT_CONF is +introduced. + +You should assign the integer "1" to disable the internal `qt.conf`, +or "0" (or leave empty) to keep usining the internal `qt.conf` file. + +DEVELOPMENT OPTIONS: + +For development purposes the following options might be of use, when +using `setup.py build`: + + --module-subset allows for specifying the Qt modules to be built. + A minimal set is: --module-subset=Core,Gui,Test,Widgets + --skip-modules allows for specifying the Qt modules that will be + skipped during the build process. + For example: --skip-modules=WebEngineCore,WebEngineWidgets + --reuse-build option allows recompiling only the modified sources and + not the whole world, shortening development iteration time, + --skip-cmake will reuse the already generated Makefiles (or + equivalents), instead of invoking, CMake to update the + Makefiles (note, CMake should be ran at least once to generate + the files), + --skip-make-install will not run make install (or equivalent) for + each module built, + --skip-packaging will skip creation of the python package, + --ignore-git will skip the fetching and checkout steps for + supermodule and all submodules. + --verbose-build will output the compiler invocation with command line + arguments, etc. + --sanitize-address will build the project with address sanitizer + enabled (Linux or macOS only). + --skip-docs skip the documentation generation. + --limited-api=yes|no default yes if applicable + Set or clear the limited API flag. Ignored for Python 2. + --package-timestamp allows specifying the timestamp that will be + used as part of the version number for a snapshot package. + For example given --package-timestamp=1529646276 + the package version will be 5.x.y.dev1529646276. + +REQUIREMENTS: + +* Python: 2.7 and 3.3+ are supported +* CMake: Specify the path to cmake with `--cmake` option or add cmake + to the system path. +* Qt: 5.9 and 5.11 are supported. Specify the path to qmake with + `--qmake` option or add qmake to the system path. + +OPTIONAL: + +* OpenSSL: + Specifying the --openssl option only affects Windows. + It is a no-op for other platforms. + + Please note that official Windows packages do not ship the + OpenSSL libraries due to import / export restrictions as + described in + http://doc.qt.io/qt-5/ssl.html#import-and-export-restrictions + + You can specify the location of the OpenSSL DLLs with the + following option: + --openssl=. + + You can download OpenSSL for Windows here: + http://slproweb.com/products/Win32OpenSSL.html (*) + + Official Qt packages do not link to the SSL library directly, but + rather try to find the library at runtime. + + On Windows, official Qt builds will try to pick up OpenSSL + libraries at application path, system registry, or in the PATH + environment variable. + + On macOS, official Qt builds use SecureTransport (provided by OS) + instead of OpenSSL. + + On Linux, official Qt builds will try to pick up the system OpenSSL + library. + + Note: this means that Qt packages that directly link to the OpenSSL + shared libraries, are not currently compatible with + standalone PySide2 packages. + + (*) Revised on 21.06.2018 + +* macOS SDK: + You can specify which macOS SDK should be used for compilation with + the option: + --macos-sysroot=. + + e.g.: "--macos-sysroot=/Applications/Xcode.app/.../Developer/SDKs/MacOSX10.12.sdk/" + +* macOS minimum deployment target: + You can specify a custom macOS minimum deployment target with the + option: + --macos-deployment-target= + + e.g.: "--macos-deployment-target=10.10" + + If the option is not set, the minimum deployment target of the used + Qt library will be used instead. Thus it is not necessary to use + the option without a good reason. + + If a new value is specified, it has to be higher or equal to both + Python's and Qt's minimum deployment targets. + + Description: macOS allows specifying a minimum OS version on which + a binary will be able to run. This implies that an + application can be built on a machine with the latest + macOS version installed, with latest Xcode version and + SDK version and the built application can still run on + an older OS version. +""" + +import os, sys + +# Change the current directory to setup.py's dir. +try: + this_file = __file__ +except NameError: + this_file = sys.argv[0] +this_file = os.path.abspath(this_file) +if os.path.dirname(this_file): + os.chdir(os.path.dirname(this_file)) + +from build_scripts.main import get_package_version, get_setuptools_extension_modules +from build_scripts.main import pyside_package_dir_name +from build_scripts.main import cmd_class_dict +from build_scripts.main import README, CHANGES +from setuptools import setup, Extension + +# The __version__ variable is just for PEP compliancy, and shouldn't be +# used as a value source. +__version__ = get_package_version() + +extension_modules = get_setuptools_extension_modules() + +setup( + name = "PySide2", + version = get_package_version(), + description = ("Python bindings for the Qt cross-platform application and " + "UI framework"), + long_description = README + "\n\n" + CHANGES, + long_description_content_type = 'text/markdown', + classifiers = [ + 'Development Status :: 5 - Production/Stable', + 'Environment :: Console', + 'Environment :: MacOS X', + 'Environment :: X11 Applications :: Qt', + 'Environment :: Win32 (MS Windows)', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)', + 'Operating System :: MacOS :: MacOS X', + 'Operating System :: POSIX', + 'Operating System :: POSIX :: Linux', + 'Operating System :: Microsoft', + 'Operating System :: Microsoft :: Windows', + 'Programming Language :: C++', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Topic :: Database', + 'Topic :: Software Development', + 'Topic :: Software Development :: Code Generators', + 'Topic :: Software Development :: Libraries :: Application Frameworks', + 'Topic :: Software Development :: User Interfaces', + 'Topic :: Software Development :: Widget Sets', + ], + keywords = 'Qt', + author = 'Qt for Python Team', + author_email = 'pyside@qt-project.org', + url = 'https://www.pyside.org', + download_url = 'https://download.qt.io/official_releases/QtForPython/', + license = 'LGPL', + packages = ['PySide2', 'pyside2uic', + 'pyside2uic.Compiler', + 'pyside2uic.port_v{}'.format(sys.version_info[0]) ], + package_dir = {'': pyside_package_dir_name}, + include_package_data = True, + zip_safe = False, + entry_points = { + 'console_scripts': [ + 'pyside2-uic = PySide2.scripts.uic:main', + ] + }, + cmdclass = cmd_class_dict, + # Add a bogus extension module (will never be built here since we + # are overriding the build command to do it using cmake) so things + # like bdist_egg will know that there are extension modules and + # will name the dist with the full platform info. + ext_modules = extension_modules, + ext_package = 'PySide2', +) diff --git a/sources/patchelf/COPYING b/sources/patchelf/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/sources/patchelf/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/sources/patchelf/README b/sources/patchelf/README new file mode 100644 index 0000000..1db25bc --- /dev/null +++ b/sources/patchelf/README @@ -0,0 +1,107 @@ +PatchELF is a simple utility for modifing existing ELF executables and +libraries. In particular, it can do the following: + +* Change the dynamic loader ("ELF interpreter") of executables: + + $ patchelf --set-interpreter /lib/my-ld-linux.so.2 my-program + +* Change the RPATH of executables and libraries: + + $ patchelf --set-rpath /opt/my-libs/lib:/other-libs my-program + +* Shrink the RPATH of executables and libraries: + + $ patchelf --shrink-rpath my-program + + This removes from the RPATH all directories that do not contain a + library referenced by DT_NEEDED fields of the executable or library. + For instance, if an executable references one library libfoo.so, has + an RPATH "/lib:/usr/lib:/foo/lib", and libfoo.so can only be found + in /foo/lib, then the new RPATH will be "/foo/lib". + + +AUTHOR + +Copyright 2004-2009 Eelco Dolstra . + + +LICENSE + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +HOMEPAGE + +http://nixos.org/patchelf.html + + +BUGS + +The `strip' command from binutils generated broken executables when +applied to the output of patchelf (if `--set-rpath' or +`--set-interpreter' with a larger path than the original is used). +This appears to be a bug in binutils +(http://bugs.strategoxt.org/browse/NIXPKGS-85). + + +RELEASE HISTORY + +0.6 (November 7, 2011): + +* Hacky support for executables created by the Gold linker. + +* Support segments with an alignment of 0 (contributed by Zack + Weinberg). + +* Added a manual page (contributed by Jeremy Sanders + ). + +0.5 (November 4, 2009): + +* Various bugfixes. + +* `--force-rpath' now deletes the DT_RUNPATH if it is present. + +0.4 (June 4, 2008): + +* Support for growing the RPATH on dynamic libraries. + +* IA-64 support (not tested) and related 64-bit fixes. + +* FreeBSD support. + +* `--set-rpath', `--shrink-rpath' and `--print-rpath' now prefer + DT_RUNPATH over DT_RPATH, which is obsolete. When updating, if both + are present, both are updated. If only DT_RPATH is present, it is + converted to DT_RUNPATH unless `--force-rpath' is specified. If + neither is present, a DT_RUNPATH is added unless `--force-rpath' is + specified, in which case a DT_RPATH is added. + +0.3 (May 24, 2007): + +* Support for 64-bit ELF binaries (such as on x86_64-linux). + +* Support for big-endian ELF binaries (such as on powerpc-linux). + +* Various bugfixes. + +0.2 (January 15, 2007): + +* Provides a hack to get certain programs (such as the + Belastingaangifte 2005) to work. + +0.1 (October 11, 2005): + +* Initial release. + diff --git a/sources/patchelf/elf.h b/sources/patchelf/elf.h new file mode 100644 index 0000000..b897f5b --- /dev/null +++ b/sources/patchelf/elf.h @@ -0,0 +1,2674 @@ +/* This file defines standard ELF types, structures, and macros. + Copyright (C) 1995-2003,2004,2005,2006,2007,2008 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _ELF_H +#define _ELF_H 1 + +/* Standard ELF types. */ + +#include + +/* Type for a 16-bit quantity. */ +typedef uint16_t Elf32_Half; +typedef uint16_t Elf64_Half; + +/* Types for signed and unsigned 32-bit quantities. */ +typedef uint32_t Elf32_Word; +typedef int32_t Elf32_Sword; +typedef uint32_t Elf64_Word; +typedef int32_t Elf64_Sword; + +/* Types for signed and unsigned 64-bit quantities. */ +typedef uint64_t Elf32_Xword; +typedef int64_t Elf32_Sxword; +typedef uint64_t Elf64_Xword; +typedef int64_t Elf64_Sxword; + +/* Type of addresses. */ +typedef uint32_t Elf32_Addr; +typedef uint64_t Elf64_Addr; + +/* Type of file offsets. */ +typedef uint32_t Elf32_Off; +typedef uint64_t Elf64_Off; + +/* Type for section indices, which are 16-bit quantities. */ +typedef uint16_t Elf32_Section; +typedef uint16_t Elf64_Section; + +/* Type for version symbol information. */ +typedef Elf32_Half Elf32_Versym; +typedef Elf64_Half Elf64_Versym; + + +/* The ELF file header. This appears at the start of every ELF file. */ + +#define EI_NIDENT (16) + +typedef struct +{ + unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */ + Elf32_Half e_type; /* Object file type */ + Elf32_Half e_machine; /* Architecture */ + Elf32_Word e_version; /* Object file version */ + Elf32_Addr e_entry; /* Entry point virtual address */ + Elf32_Off e_phoff; /* Program header table file offset */ + Elf32_Off e_shoff; /* Section header table file offset */ + Elf32_Word e_flags; /* Processor-specific flags */ + Elf32_Half e_ehsize; /* ELF header size in bytes */ + Elf32_Half e_phentsize; /* Program header table entry size */ + Elf32_Half e_phnum; /* Program header table entry count */ + Elf32_Half e_shentsize; /* Section header table entry size */ + Elf32_Half e_shnum; /* Section header table entry count */ + Elf32_Half e_shstrndx; /* Section header string table index */ +} Elf32_Ehdr; + +typedef struct +{ + unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */ + Elf64_Half e_type; /* Object file type */ + Elf64_Half e_machine; /* Architecture */ + Elf64_Word e_version; /* Object file version */ + Elf64_Addr e_entry; /* Entry point virtual address */ + Elf64_Off e_phoff; /* Program header table file offset */ + Elf64_Off e_shoff; /* Section header table file offset */ + Elf64_Word e_flags; /* Processor-specific flags */ + Elf64_Half e_ehsize; /* ELF header size in bytes */ + Elf64_Half e_phentsize; /* Program header table entry size */ + Elf64_Half e_phnum; /* Program header table entry count */ + Elf64_Half e_shentsize; /* Section header table entry size */ + Elf64_Half e_shnum; /* Section header table entry count */ + Elf64_Half e_shstrndx; /* Section header string table index */ +} Elf64_Ehdr; + +/* Fields in the e_ident array. The EI_* macros are indices into the + array. The macros under each EI_* macro are the values the byte + may have. */ + +#define EI_MAG0 0 /* File identification byte 0 index */ +#define ELFMAG0 0x7f /* Magic number byte 0 */ + +#define EI_MAG1 1 /* File identification byte 1 index */ +#define ELFMAG1 'E' /* Magic number byte 1 */ + +#define EI_MAG2 2 /* File identification byte 2 index */ +#define ELFMAG2 'L' /* Magic number byte 2 */ + +#define EI_MAG3 3 /* File identification byte 3 index */ +#define ELFMAG3 'F' /* Magic number byte 3 */ + +/* Conglomeration of the identification bytes, for easy testing as a word. */ +#define ELFMAG "\177ELF" +#define SELFMAG 4 + +#define EI_CLASS 4 /* File class byte index */ +#define ELFCLASSNONE 0 /* Invalid class */ +#define ELFCLASS32 1 /* 32-bit objects */ +#define ELFCLASS64 2 /* 64-bit objects */ +#define ELFCLASSNUM 3 + +#define EI_DATA 5 /* Data encoding byte index */ +#define ELFDATANONE 0 /* Invalid data encoding */ +#define ELFDATA2LSB 1 /* 2's complement, little endian */ +#define ELFDATA2MSB 2 /* 2's complement, big endian */ +#define ELFDATANUM 3 + +#define EI_VERSION 6 /* File version byte index */ + /* Value must be EV_CURRENT */ + +#define EI_OSABI 7 /* OS ABI identification */ +#define ELFOSABI_NONE 0 /* UNIX System V ABI */ +#define ELFOSABI_SYSV 0 /* Alias. */ +#define ELFOSABI_HPUX 1 /* HP-UX */ +#define ELFOSABI_NETBSD 2 /* NetBSD. */ +#define ELFOSABI_LINUX 3 /* Linux. */ +#define ELFOSABI_SOLARIS 6 /* Sun Solaris. */ +#define ELFOSABI_AIX 7 /* IBM AIX. */ +#define ELFOSABI_IRIX 8 /* SGI Irix. */ +#define ELFOSABI_FREEBSD 9 /* FreeBSD. */ +#define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX. */ +#define ELFOSABI_MODESTO 11 /* Novell Modesto. */ +#define ELFOSABI_OPENBSD 12 /* OpenBSD. */ +#define ELFOSABI_ARM 97 /* ARM */ +#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */ + +#define EI_ABIVERSION 8 /* ABI version */ + +#define EI_PAD 9 /* Byte index of padding bytes */ + +/* Legal values for e_type (object file type). */ + +#define ET_NONE 0 /* No file type */ +#define ET_REL 1 /* Relocatable file */ +#define ET_EXEC 2 /* Executable file */ +#define ET_DYN 3 /* Shared object file */ +#define ET_CORE 4 /* Core file */ +#define ET_NUM 5 /* Number of defined types */ +#define ET_LOOS 0xfe00 /* OS-specific range start */ +#define ET_HIOS 0xfeff /* OS-specific range end */ +#define ET_LOPROC 0xff00 /* Processor-specific range start */ +#define ET_HIPROC 0xffff /* Processor-specific range end */ + +/* Legal values for e_machine (architecture). */ + +#define EM_NONE 0 /* No machine */ +#define EM_M32 1 /* AT&T WE 32100 */ +#define EM_SPARC 2 /* SUN SPARC */ +#define EM_386 3 /* Intel 80386 */ +#define EM_68K 4 /* Motorola m68k family */ +#define EM_88K 5 /* Motorola m88k family */ +#define EM_860 7 /* Intel 80860 */ +#define EM_MIPS 8 /* MIPS R3000 big-endian */ +#define EM_S370 9 /* IBM System/370 */ +#define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian */ + +#define EM_PARISC 15 /* HPPA */ +#define EM_VPP500 17 /* Fujitsu VPP500 */ +#define EM_SPARC32PLUS 18 /* Sun's "v8plus" */ +#define EM_960 19 /* Intel 80960 */ +#define EM_PPC 20 /* PowerPC */ +#define EM_PPC64 21 /* PowerPC 64-bit */ +#define EM_S390 22 /* IBM S390 */ + +#define EM_V800 36 /* NEC V800 series */ +#define EM_FR20 37 /* Fujitsu FR20 */ +#define EM_RH32 38 /* TRW RH-32 */ +#define EM_RCE 39 /* Motorola RCE */ +#define EM_ARM 40 /* ARM */ +#define EM_FAKE_ALPHA 41 /* Digital Alpha */ +#define EM_SH 42 /* Hitachi SH */ +#define EM_SPARCV9 43 /* SPARC v9 64-bit */ +#define EM_TRICORE 44 /* Siemens Tricore */ +#define EM_ARC 45 /* Argonaut RISC Core */ +#define EM_H8_300 46 /* Hitachi H8/300 */ +#define EM_H8_300H 47 /* Hitachi H8/300H */ +#define EM_H8S 48 /* Hitachi H8S */ +#define EM_H8_500 49 /* Hitachi H8/500 */ +#define EM_IA_64 50 /* Intel Merced */ +#define EM_MIPS_X 51 /* Stanford MIPS-X */ +#define EM_COLDFIRE 52 /* Motorola Coldfire */ +#define EM_68HC12 53 /* Motorola M68HC12 */ +#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator*/ +#define EM_PCP 55 /* Siemens PCP */ +#define EM_NCPU 56 /* Sony nCPU embeeded RISC */ +#define EM_NDR1 57 /* Denso NDR1 microprocessor */ +#define EM_STARCORE 58 /* Motorola Start*Core processor */ +#define EM_ME16 59 /* Toyota ME16 processor */ +#define EM_ST100 60 /* STMicroelectronic ST100 processor */ +#define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam*/ +#define EM_X86_64 62 /* AMD x86-64 architecture */ +#define EM_PDSP 63 /* Sony DSP Processor */ + +#define EM_FX66 66 /* Siemens FX66 microcontroller */ +#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */ +#define EM_ST7 68 /* STmicroelectronics ST7 8 bit mc */ +#define EM_68HC16 69 /* Motorola MC68HC16 microcontroller */ +#define EM_68HC11 70 /* Motorola MC68HC11 microcontroller */ +#define EM_68HC08 71 /* Motorola MC68HC08 microcontroller */ +#define EM_68HC05 72 /* Motorola MC68HC05 microcontroller */ +#define EM_SVX 73 /* Silicon Graphics SVx */ +#define EM_ST19 74 /* STMicroelectronics ST19 8 bit mc */ +#define EM_VAX 75 /* Digital VAX */ +#define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */ +#define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded processor */ +#define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */ +#define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */ +#define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */ +#define EM_HUANY 81 /* Harvard University machine-independent object files */ +#define EM_PRISM 82 /* SiTera Prism */ +#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ +#define EM_FR30 84 /* Fujitsu FR30 */ +#define EM_D10V 85 /* Mitsubishi D10V */ +#define EM_D30V 86 /* Mitsubishi D30V */ +#define EM_V850 87 /* NEC v850 */ +#define EM_M32R 88 /* Mitsubishi M32R */ +#define EM_MN10300 89 /* Matsushita MN10300 */ +#define EM_MN10200 90 /* Matsushita MN10200 */ +#define EM_PJ 91 /* picoJava */ +#define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */ +#define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */ +#define EM_XTENSA 94 /* Tensilica Xtensa Architecture */ +#define EM_NUM 95 + +/* If it is necessary to assign new unofficial EM_* values, please + pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the + chances of collision with official or non-GNU unofficial values. */ + +#define EM_ALPHA 0x9026 + +/* Legal values for e_version (version). */ + +#define EV_NONE 0 /* Invalid ELF version */ +#define EV_CURRENT 1 /* Current version */ +#define EV_NUM 2 + +/* Section header. */ + +typedef struct +{ + Elf32_Word sh_name; /* Section name (string tbl index) */ + Elf32_Word sh_type; /* Section type */ + Elf32_Word sh_flags; /* Section flags */ + Elf32_Addr sh_addr; /* Section virtual addr at execution */ + Elf32_Off sh_offset; /* Section file offset */ + Elf32_Word sh_size; /* Section size in bytes */ + Elf32_Word sh_link; /* Link to another section */ + Elf32_Word sh_info; /* Additional section information */ + Elf32_Word sh_addralign; /* Section alignment */ + Elf32_Word sh_entsize; /* Entry size if section holds table */ +} Elf32_Shdr; + +typedef struct +{ + Elf64_Word sh_name; /* Section name (string tbl index) */ + Elf64_Word sh_type; /* Section type */ + Elf64_Xword sh_flags; /* Section flags */ + Elf64_Addr sh_addr; /* Section virtual addr at execution */ + Elf64_Off sh_offset; /* Section file offset */ + Elf64_Xword sh_size; /* Section size in bytes */ + Elf64_Word sh_link; /* Link to another section */ + Elf64_Word sh_info; /* Additional section information */ + Elf64_Xword sh_addralign; /* Section alignment */ + Elf64_Xword sh_entsize; /* Entry size if section holds table */ +} Elf64_Shdr; + +/* Special section indices. */ + +#define SHN_UNDEF 0 /* Undefined section */ +#define SHN_LORESERVE 0xff00 /* Start of reserved indices */ +#define SHN_LOPROC 0xff00 /* Start of processor-specific */ +#define SHN_BEFORE 0xff00 /* Order section before all others + (Solaris). */ +#define SHN_AFTER 0xff01 /* Order section after all others + (Solaris). */ +#define SHN_HIPROC 0xff1f /* End of processor-specific */ +#define SHN_LOOS 0xff20 /* Start of OS-specific */ +#define SHN_HIOS 0xff3f /* End of OS-specific */ +#define SHN_ABS 0xfff1 /* Associated symbol is absolute */ +#define SHN_COMMON 0xfff2 /* Associated symbol is common */ +#define SHN_XINDEX 0xffff /* Index is in extra table. */ +#define SHN_HIRESERVE 0xffff /* End of reserved indices */ + +/* Legal values for sh_type (section type). */ + +#define SHT_NULL 0 /* Section header table entry unused */ +#define SHT_PROGBITS 1 /* Program data */ +#define SHT_SYMTAB 2 /* Symbol table */ +#define SHT_STRTAB 3 /* String table */ +#define SHT_RELA 4 /* Relocation entries with addends */ +#define SHT_HASH 5 /* Symbol hash table */ +#define SHT_DYNAMIC 6 /* Dynamic linking information */ +#define SHT_NOTE 7 /* Notes */ +#define SHT_NOBITS 8 /* Program space with no data (bss) */ +#define SHT_REL 9 /* Relocation entries, no addends */ +#define SHT_SHLIB 10 /* Reserved */ +#define SHT_DYNSYM 11 /* Dynamic linker symbol table */ +#define SHT_INIT_ARRAY 14 /* Array of constructors */ +#define SHT_FINI_ARRAY 15 /* Array of destructors */ +#define SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */ +#define SHT_GROUP 17 /* Section group */ +#define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */ +#define SHT_NUM 19 /* Number of defined types. */ +#define SHT_LOOS 0x60000000 /* Start OS-specific. */ +#define SHT_GNU_ATTRIBUTES 0x6ffffff5 /* Object attributes. */ +#define SHT_GNU_HASH 0x6ffffff6 /* GNU-style hash table. */ +#define SHT_GNU_LIBLIST 0x6ffffff7 /* Prelink library list */ +#define SHT_CHECKSUM 0x6ffffff8 /* Checksum for DSO content. */ +#define SHT_LOSUNW 0x6ffffffa /* Sun-specific low bound. */ +#define SHT_SUNW_move 0x6ffffffa +#define SHT_SUNW_COMDAT 0x6ffffffb +#define SHT_SUNW_syminfo 0x6ffffffc +#define SHT_GNU_verdef 0x6ffffffd /* Version definition section. */ +#define SHT_GNU_verneed 0x6ffffffe /* Version needs section. */ +#define SHT_GNU_versym 0x6fffffff /* Version symbol table. */ +#define SHT_HISUNW 0x6fffffff /* Sun-specific high bound. */ +#define SHT_HIOS 0x6fffffff /* End OS-specific type */ +#define SHT_LOPROC 0x70000000 /* Start of processor-specific */ +#define SHT_HIPROC 0x7fffffff /* End of processor-specific */ +#define SHT_LOUSER 0x80000000 /* Start of application-specific */ +#define SHT_HIUSER 0x8fffffff /* End of application-specific */ + +/* Legal values for sh_flags (section flags). */ + +#define SHF_WRITE (1 << 0) /* Writable */ +#define SHF_ALLOC (1 << 1) /* Occupies memory during execution */ +#define SHF_EXECINSTR (1 << 2) /* Executable */ +#define SHF_MERGE (1 << 4) /* Might be merged */ +#define SHF_STRINGS (1 << 5) /* Contains nul-terminated strings */ +#define SHF_INFO_LINK (1 << 6) /* `sh_info' contains SHT index */ +#define SHF_LINK_ORDER (1 << 7) /* Preserve order after combining */ +#define SHF_OS_NONCONFORMING (1 << 8) /* Non-standard OS specific handling + required */ +#define SHF_GROUP (1 << 9) /* Section is member of a group. */ +#define SHF_TLS (1 << 10) /* Section hold thread-local data. */ +#define SHF_MASKOS 0x0ff00000 /* OS-specific. */ +#define SHF_MASKPROC 0xf0000000 /* Processor-specific */ +#define SHF_ORDERED (1 << 30) /* Special ordering requirement + (Solaris). */ +#define SHF_EXCLUDE (1 << 31) /* Section is excluded unless + referenced or allocated (Solaris).*/ + +/* Section group handling. */ +#define GRP_COMDAT 0x1 /* Mark group as COMDAT. */ + +/* Symbol table entry. */ + +typedef struct +{ + Elf32_Word st_name; /* Symbol name (string tbl index) */ + Elf32_Addr st_value; /* Symbol value */ + Elf32_Word st_size; /* Symbol size */ + unsigned char st_info; /* Symbol type and binding */ + unsigned char st_other; /* Symbol visibility */ + Elf32_Section st_shndx; /* Section index */ +} Elf32_Sym; + +typedef struct +{ + Elf64_Word st_name; /* Symbol name (string tbl index) */ + unsigned char st_info; /* Symbol type and binding */ + unsigned char st_other; /* Symbol visibility */ + Elf64_Section st_shndx; /* Section index */ + Elf64_Addr st_value; /* Symbol value */ + Elf64_Xword st_size; /* Symbol size */ +} Elf64_Sym; + +/* The syminfo section if available contains additional information about + every dynamic symbol. */ + +typedef struct +{ + Elf32_Half si_boundto; /* Direct bindings, symbol bound to */ + Elf32_Half si_flags; /* Per symbol flags */ +} Elf32_Syminfo; + +typedef struct +{ + Elf64_Half si_boundto; /* Direct bindings, symbol bound to */ + Elf64_Half si_flags; /* Per symbol flags */ +} Elf64_Syminfo; + +/* Possible values for si_boundto. */ +#define SYMINFO_BT_SELF 0xffff /* Symbol bound to self */ +#define SYMINFO_BT_PARENT 0xfffe /* Symbol bound to parent */ +#define SYMINFO_BT_LOWRESERVE 0xff00 /* Beginning of reserved entries */ + +/* Possible bitmasks for si_flags. */ +#define SYMINFO_FLG_DIRECT 0x0001 /* Direct bound symbol */ +#define SYMINFO_FLG_PASSTHRU 0x0002 /* Pass-thru symbol for translator */ +#define SYMINFO_FLG_COPY 0x0004 /* Symbol is a copy-reloc */ +#define SYMINFO_FLG_LAZYLOAD 0x0008 /* Symbol bound to object to be lazy + loaded */ +/* Syminfo version values. */ +#define SYMINFO_NONE 0 +#define SYMINFO_CURRENT 1 +#define SYMINFO_NUM 2 + + +/* How to extract and insert information held in the st_info field. */ + +#define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4) +#define ELF32_ST_TYPE(val) ((val) & 0xf) +#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) + +/* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field. */ +#define ELF64_ST_BIND(val) ELF32_ST_BIND (val) +#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val) +#define ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type)) + +/* Legal values for ST_BIND subfield of st_info (symbol binding). */ + +#define STB_LOCAL 0 /* Local symbol */ +#define STB_GLOBAL 1 /* Global symbol */ +#define STB_WEAK 2 /* Weak symbol */ +#define STB_NUM 3 /* Number of defined types. */ +#define STB_LOOS 10 /* Start of OS-specific */ +#define STB_HIOS 12 /* End of OS-specific */ +#define STB_LOPROC 13 /* Start of processor-specific */ +#define STB_HIPROC 15 /* End of processor-specific */ + +/* Legal values for ST_TYPE subfield of st_info (symbol type). */ + +#define STT_NOTYPE 0 /* Symbol type is unspecified */ +#define STT_OBJECT 1 /* Symbol is a data object */ +#define STT_FUNC 2 /* Symbol is a code object */ +#define STT_SECTION 3 /* Symbol associated with a section */ +#define STT_FILE 4 /* Symbol's name is file name */ +#define STT_COMMON 5 /* Symbol is a common data object */ +#define STT_TLS 6 /* Symbol is thread-local data object*/ +#define STT_NUM 7 /* Number of defined types. */ +#define STT_LOOS 10 /* Start of OS-specific */ +#define STT_HIOS 12 /* End of OS-specific */ +#define STT_LOPROC 13 /* Start of processor-specific */ +#define STT_HIPROC 15 /* End of processor-specific */ + + +/* Symbol table indices are found in the hash buckets and chain table + of a symbol hash table section. This special index value indicates + the end of a chain, meaning no further symbols are found in that bucket. */ + +#define STN_UNDEF 0 /* End of a chain. */ + + +/* How to extract and insert information held in the st_other field. */ + +#define ELF32_ST_VISIBILITY(o) ((o) & 0x03) + +/* For ELF64 the definitions are the same. */ +#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) + +/* Symbol visibility specification encoded in the st_other field. */ +#define STV_DEFAULT 0 /* Default symbol visibility rules */ +#define STV_INTERNAL 1 /* Processor specific hidden class */ +#define STV_HIDDEN 2 /* Sym unavailable in other modules */ +#define STV_PROTECTED 3 /* Not preemptible, not exported */ + + +/* Relocation table entry without addend (in section of type SHT_REL). */ + +typedef struct +{ + Elf32_Addr r_offset; /* Address */ + Elf32_Word r_info; /* Relocation type and symbol index */ +} Elf32_Rel; + +/* I have seen two different definitions of the Elf64_Rel and + Elf64_Rela structures, so we'll leave them out until Novell (or + whoever) gets their act together. */ +/* The following, at least, is used on Sparc v9, MIPS, and Alpha. */ + +typedef struct +{ + Elf64_Addr r_offset; /* Address */ + Elf64_Xword r_info; /* Relocation type and symbol index */ +} Elf64_Rel; + +/* Relocation table entry with addend (in section of type SHT_RELA). */ + +typedef struct +{ + Elf32_Addr r_offset; /* Address */ + Elf32_Word r_info; /* Relocation type and symbol index */ + Elf32_Sword r_addend; /* Addend */ +} Elf32_Rela; + +typedef struct +{ + Elf64_Addr r_offset; /* Address */ + Elf64_Xword r_info; /* Relocation type and symbol index */ + Elf64_Sxword r_addend; /* Addend */ +} Elf64_Rela; + +/* How to extract and insert information held in the r_info field. */ + +#define ELF32_R_SYM(val) ((val) >> 8) +#define ELF32_R_TYPE(val) ((val) & 0xff) +#define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff)) + +#define ELF64_R_SYM(i) ((i) >> 32) +#define ELF64_R_TYPE(i) ((i) & 0xffffffff) +#define ELF64_R_INFO(sym,type) ((((Elf64_Xword) (sym)) << 32) + (type)) + +/* Program segment header. */ + +typedef struct +{ + Elf32_Word p_type; /* Segment type */ + Elf32_Off p_offset; /* Segment file offset */ + Elf32_Addr p_vaddr; /* Segment virtual address */ + Elf32_Addr p_paddr; /* Segment physical address */ + Elf32_Word p_filesz; /* Segment size in file */ + Elf32_Word p_memsz; /* Segment size in memory */ + Elf32_Word p_flags; /* Segment flags */ + Elf32_Word p_align; /* Segment alignment */ +} Elf32_Phdr; + +typedef struct +{ + Elf64_Word p_type; /* Segment type */ + Elf64_Word p_flags; /* Segment flags */ + Elf64_Off p_offset; /* Segment file offset */ + Elf64_Addr p_vaddr; /* Segment virtual address */ + Elf64_Addr p_paddr; /* Segment physical address */ + Elf64_Xword p_filesz; /* Segment size in file */ + Elf64_Xword p_memsz; /* Segment size in memory */ + Elf64_Xword p_align; /* Segment alignment */ +} Elf64_Phdr; + +/* Legal values for p_type (segment type). */ + +#define PT_NULL 0 /* Program header table entry unused */ +#define PT_LOAD 1 /* Loadable program segment */ +#define PT_DYNAMIC 2 /* Dynamic linking information */ +#define PT_INTERP 3 /* Program interpreter */ +#define PT_NOTE 4 /* Auxiliary information */ +#define PT_SHLIB 5 /* Reserved */ +#define PT_PHDR 6 /* Entry for header table itself */ +#define PT_TLS 7 /* Thread-local storage segment */ +#define PT_NUM 8 /* Number of defined types */ +#define PT_LOOS 0x60000000 /* Start of OS-specific */ +#define PT_GNU_EH_FRAME 0x6474e550 /* GCC .eh_frame_hdr segment */ +#define PT_GNU_STACK 0x6474e551 /* Indicates stack executability */ +#define PT_GNU_RELRO 0x6474e552 /* Read-only after relocation */ +#define PT_LOSUNW 0x6ffffffa +#define PT_SUNWBSS 0x6ffffffa /* Sun Specific segment */ +#define PT_SUNWSTACK 0x6ffffffb /* Stack segment */ +#define PT_HISUNW 0x6fffffff +#define PT_HIOS 0x6fffffff /* End of OS-specific */ +#define PT_LOPROC 0x70000000 /* Start of processor-specific */ +#define PT_HIPROC 0x7fffffff /* End of processor-specific */ + +/* Legal values for p_flags (segment flags). */ + +#define PF_X (1 << 0) /* Segment is executable */ +#define PF_W (1 << 1) /* Segment is writable */ +#define PF_R (1 << 2) /* Segment is readable */ +#define PF_MASKOS 0x0ff00000 /* OS-specific */ +#define PF_MASKPROC 0xf0000000 /* Processor-specific */ + +/* Legal values for note segment descriptor types for core files. */ + +#define NT_PRSTATUS 1 /* Contains copy of prstatus struct */ +#define NT_FPREGSET 2 /* Contains copy of fpregset struct */ +#define NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */ +#define NT_PRXREG 4 /* Contains copy of prxregset struct */ +#define NT_TASKSTRUCT 4 /* Contains copy of task structure */ +#define NT_PLATFORM 5 /* String from sysinfo(SI_PLATFORM) */ +#define NT_AUXV 6 /* Contains copy of auxv array */ +#define NT_GWINDOWS 7 /* Contains copy of gwindows struct */ +#define NT_ASRS 8 /* Contains copy of asrset struct */ +#define NT_PSTATUS 10 /* Contains copy of pstatus struct */ +#define NT_PSINFO 13 /* Contains copy of psinfo struct */ +#define NT_PRCRED 14 /* Contains copy of prcred struct */ +#define NT_UTSNAME 15 /* Contains copy of utsname struct */ +#define NT_LWPSTATUS 16 /* Contains copy of lwpstatus struct */ +#define NT_LWPSINFO 17 /* Contains copy of lwpinfo struct */ +#define NT_PRFPXREG 20 /* Contains copy of fprxregset struct */ +#define NT_PRXFPREG 0x46e62b7f /* Contains copy of user_fxsr_struct */ +#define NT_PPC_VMX 0x100 /* PowerPC Altivec/VMX registers */ +#define NT_PPC_SPE 0x101 /* PowerPC SPE/EVR registers */ +#define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ + +/* Legal values for the note segment descriptor types for object files. */ + +#define NT_VERSION 1 /* Contains a version string. */ + + +/* Dynamic section entry. */ + +typedef struct +{ + Elf32_Sword d_tag; /* Dynamic entry type */ + union + { + Elf32_Word d_val; /* Integer value */ + Elf32_Addr d_ptr; /* Address value */ + } d_un; +} Elf32_Dyn; + +typedef struct +{ + Elf64_Sxword d_tag; /* Dynamic entry type */ + union + { + Elf64_Xword d_val; /* Integer value */ + Elf64_Addr d_ptr; /* Address value */ + } d_un; +} Elf64_Dyn; + +/* Legal values for d_tag (dynamic entry type). */ + +#define DT_NULL 0 /* Marks end of dynamic section */ +#define DT_NEEDED 1 /* Name of needed library */ +#define DT_PLTRELSZ 2 /* Size in bytes of PLT relocs */ +#define DT_PLTGOT 3 /* Processor defined value */ +#define DT_HASH 4 /* Address of symbol hash table */ +#define DT_STRTAB 5 /* Address of string table */ +#define DT_SYMTAB 6 /* Address of symbol table */ +#define DT_RELA 7 /* Address of Rela relocs */ +#define DT_RELASZ 8 /* Total size of Rela relocs */ +#define DT_RELAENT 9 /* Size of one Rela reloc */ +#define DT_STRSZ 10 /* Size of string table */ +#define DT_SYMENT 11 /* Size of one symbol table entry */ +#define DT_INIT 12 /* Address of init function */ +#define DT_FINI 13 /* Address of termination function */ +#define DT_SONAME 14 /* Name of shared object */ +#define DT_RPATH 15 /* Library search path (deprecated) */ +#define DT_SYMBOLIC 16 /* Start symbol search here */ +#define DT_REL 17 /* Address of Rel relocs */ +#define DT_RELSZ 18 /* Total size of Rel relocs */ +#define DT_RELENT 19 /* Size of one Rel reloc */ +#define DT_PLTREL 20 /* Type of reloc in PLT */ +#define DT_DEBUG 21 /* For debugging; unspecified */ +#define DT_TEXTREL 22 /* Reloc might modify .text */ +#define DT_JMPREL 23 /* Address of PLT relocs */ +#define DT_BIND_NOW 24 /* Process relocations of object */ +#define DT_INIT_ARRAY 25 /* Array with addresses of init fct */ +#define DT_FINI_ARRAY 26 /* Array with addresses of fini fct */ +#define DT_INIT_ARRAYSZ 27 /* Size in bytes of DT_INIT_ARRAY */ +#define DT_FINI_ARRAYSZ 28 /* Size in bytes of DT_FINI_ARRAY */ +#define DT_RUNPATH 29 /* Library search path */ +#define DT_FLAGS 30 /* Flags for the object being loaded */ +#define DT_ENCODING 32 /* Start of encoded range */ +#define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/ +#define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */ +#define DT_NUM 34 /* Number used */ +#define DT_LOOS 0x6000000d /* Start of OS-specific */ +#define DT_HIOS 0x6ffff000 /* End of OS-specific */ +#define DT_LOPROC 0x70000000 /* Start of processor-specific */ +#define DT_HIPROC 0x7fffffff /* End of processor-specific */ +#define DT_PROCNUM DT_MIPS_NUM /* Most used by any processor */ + +/* DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the + Dyn.d_un.d_val field of the Elf*_Dyn structure. This follows Sun's + approach. */ +#define DT_VALRNGLO 0x6ffffd00 +#define DT_GNU_PRELINKED 0x6ffffdf5 /* Prelinking timestamp */ +#define DT_GNU_CONFLICTSZ 0x6ffffdf6 /* Size of conflict section */ +#define DT_GNU_LIBLISTSZ 0x6ffffdf7 /* Size of library list */ +#define DT_CHECKSUM 0x6ffffdf8 +#define DT_PLTPADSZ 0x6ffffdf9 +#define DT_MOVEENT 0x6ffffdfa +#define DT_MOVESZ 0x6ffffdfb +#define DT_FEATURE_1 0x6ffffdfc /* Feature selection (DTF_*). */ +#define DT_POSFLAG_1 0x6ffffdfd /* Flags for DT_* entries, effecting + the following DT_* entry. */ +#define DT_SYMINSZ 0x6ffffdfe /* Size of syminfo table (in bytes) */ +#define DT_SYMINENT 0x6ffffdff /* Entry size of syminfo */ +#define DT_VALRNGHI 0x6ffffdff +#define DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag)) /* Reverse order! */ +#define DT_VALNUM 12 + +/* DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the + Dyn.d_un.d_ptr field of the Elf*_Dyn structure. + + If any adjustment is made to the ELF object after it has been + built these entries will need to be adjusted. */ +#define DT_ADDRRNGLO 0x6ffffe00 +#define DT_GNU_HASH 0x6ffffef5 /* GNU-style hash table. */ +#define DT_TLSDESC_PLT 0x6ffffef6 +#define DT_TLSDESC_GOT 0x6ffffef7 +#define DT_GNU_CONFLICT 0x6ffffef8 /* Start of conflict section */ +#define DT_GNU_LIBLIST 0x6ffffef9 /* Library list */ +#define DT_CONFIG 0x6ffffefa /* Configuration information. */ +#define DT_DEPAUDIT 0x6ffffefb /* Dependency auditing. */ +#define DT_AUDIT 0x6ffffefc /* Object auditing. */ +#define DT_PLTPAD 0x6ffffefd /* PLT padding. */ +#define DT_MOVETAB 0x6ffffefe /* Move table. */ +#define DT_SYMINFO 0x6ffffeff /* Syminfo table. */ +#define DT_ADDRRNGHI 0x6ffffeff +#define DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag)) /* Reverse order! */ +#define DT_ADDRNUM 11 + +/* The versioning entry types. The next are defined as part of the + GNU extension. */ +#define DT_VERSYM 0x6ffffff0 + +#define DT_RELACOUNT 0x6ffffff9 +#define DT_RELCOUNT 0x6ffffffa + +/* These were chosen by Sun. */ +#define DT_FLAGS_1 0x6ffffffb /* State flags, see DF_1_* below. */ +#define DT_VERDEF 0x6ffffffc /* Address of version definition + table */ +#define DT_VERDEFNUM 0x6ffffffd /* Number of version definitions */ +#define DT_VERNEED 0x6ffffffe /* Address of table with needed + versions */ +#define DT_VERNEEDNUM 0x6fffffff /* Number of needed versions */ +#define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) /* Reverse order! */ +#define DT_VERSIONTAGNUM 16 + +/* Sun added these machine-independent extensions in the "processor-specific" + range. Be compatible. */ +#define DT_AUXILIARY 0x7ffffffd /* Shared object to load before self */ +#define DT_FILTER 0x7fffffff /* Shared object to get values from */ +#define DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1) +#define DT_EXTRANUM 3 + +/* Values of `d_un.d_val' in the DT_FLAGS entry. */ +#define DF_ORIGIN 0x00000001 /* Object may use DF_ORIGIN */ +#define DF_SYMBOLIC 0x00000002 /* Symbol resolutions starts here */ +#define DF_TEXTREL 0x00000004 /* Object contains text relocations */ +#define DF_BIND_NOW 0x00000008 /* No lazy binding for this object */ +#define DF_STATIC_TLS 0x00000010 /* Module uses the static TLS model */ + +/* State flags selectable in the `d_un.d_val' element of the DT_FLAGS_1 + entry in the dynamic section. */ +#define DF_1_NOW 0x00000001 /* Set RTLD_NOW for this object. */ +#define DF_1_GLOBAL 0x00000002 /* Set RTLD_GLOBAL for this object. */ +#define DF_1_GROUP 0x00000004 /* Set RTLD_GROUP for this object. */ +#define DF_1_NODELETE 0x00000008 /* Set RTLD_NODELETE for this object.*/ +#define DF_1_LOADFLTR 0x00000010 /* Trigger filtee loading at runtime.*/ +#define DF_1_INITFIRST 0x00000020 /* Set RTLD_INITFIRST for this object*/ +#define DF_1_NOOPEN 0x00000040 /* Set RTLD_NOOPEN for this object. */ +#define DF_1_ORIGIN 0x00000080 /* $ORIGIN must be handled. */ +#define DF_1_DIRECT 0x00000100 /* Direct binding enabled. */ +#define DF_1_TRANS 0x00000200 +#define DF_1_INTERPOSE 0x00000400 /* Object is used to interpose. */ +#define DF_1_NODEFLIB 0x00000800 /* Ignore default lib search path. */ +#define DF_1_NODUMP 0x00001000 /* Object can't be dldump'ed. */ +#define DF_1_CONFALT 0x00002000 /* Configuration alternative created.*/ +#define DF_1_ENDFILTEE 0x00004000 /* Filtee terminates filters search. */ +#define DF_1_DISPRELDNE 0x00008000 /* Disp reloc applied at build time. */ +#define DF_1_DISPRELPND 0x00010000 /* Disp reloc applied at run-time. */ + +/* Flags for the feature selection in DT_FEATURE_1. */ +#define DTF_1_PARINIT 0x00000001 +#define DTF_1_CONFEXP 0x00000002 + +/* Flags in the DT_POSFLAG_1 entry effecting only the next DT_* entry. */ +#define DF_P1_LAZYLOAD 0x00000001 /* Lazyload following object. */ +#define DF_P1_GROUPPERM 0x00000002 /* Symbols from next object are not + generally available. */ + +/* Version definition sections. */ + +typedef struct +{ + Elf32_Half vd_version; /* Version revision */ + Elf32_Half vd_flags; /* Version information */ + Elf32_Half vd_ndx; /* Version Index */ + Elf32_Half vd_cnt; /* Number of associated aux entries */ + Elf32_Word vd_hash; /* Version name hash value */ + Elf32_Word vd_aux; /* Offset in bytes to verdaux array */ + Elf32_Word vd_next; /* Offset in bytes to next verdef + entry */ +} Elf32_Verdef; + +typedef struct +{ + Elf64_Half vd_version; /* Version revision */ + Elf64_Half vd_flags; /* Version information */ + Elf64_Half vd_ndx; /* Version Index */ + Elf64_Half vd_cnt; /* Number of associated aux entries */ + Elf64_Word vd_hash; /* Version name hash value */ + Elf64_Word vd_aux; /* Offset in bytes to verdaux array */ + Elf64_Word vd_next; /* Offset in bytes to next verdef + entry */ +} Elf64_Verdef; + + +/* Legal values for vd_version (version revision). */ +#define VER_DEF_NONE 0 /* No version */ +#define VER_DEF_CURRENT 1 /* Current version */ +#define VER_DEF_NUM 2 /* Given version number */ + +/* Legal values for vd_flags (version information flags). */ +#define VER_FLG_BASE 0x1 /* Version definition of file itself */ +#define VER_FLG_WEAK 0x2 /* Weak version identifier */ + +/* Versym symbol index values. */ +#define VER_NDX_LOCAL 0 /* Symbol is local. */ +#define VER_NDX_GLOBAL 1 /* Symbol is global. */ +#define VER_NDX_LORESERVE 0xff00 /* Beginning of reserved entries. */ +#define VER_NDX_ELIMINATE 0xff01 /* Symbol is to be eliminated. */ + +/* Auxialiary version information. */ + +typedef struct +{ + Elf32_Word vda_name; /* Version or dependency names */ + Elf32_Word vda_next; /* Offset in bytes to next verdaux + entry */ +} Elf32_Verdaux; + +typedef struct +{ + Elf64_Word vda_name; /* Version or dependency names */ + Elf64_Word vda_next; /* Offset in bytes to next verdaux + entry */ +} Elf64_Verdaux; + + +/* Version dependency section. */ + +typedef struct +{ + Elf32_Half vn_version; /* Version of structure */ + Elf32_Half vn_cnt; /* Number of associated aux entries */ + Elf32_Word vn_file; /* Offset of filename for this + dependency */ + Elf32_Word vn_aux; /* Offset in bytes to vernaux array */ + Elf32_Word vn_next; /* Offset in bytes to next verneed + entry */ +} Elf32_Verneed; + +typedef struct +{ + Elf64_Half vn_version; /* Version of structure */ + Elf64_Half vn_cnt; /* Number of associated aux entries */ + Elf64_Word vn_file; /* Offset of filename for this + dependency */ + Elf64_Word vn_aux; /* Offset in bytes to vernaux array */ + Elf64_Word vn_next; /* Offset in bytes to next verneed + entry */ +} Elf64_Verneed; + + +/* Legal values for vn_version (version revision). */ +#define VER_NEED_NONE 0 /* No version */ +#define VER_NEED_CURRENT 1 /* Current version */ +#define VER_NEED_NUM 2 /* Given version number */ + +/* Auxiliary needed version information. */ + +typedef struct +{ + Elf32_Word vna_hash; /* Hash value of dependency name */ + Elf32_Half vna_flags; /* Dependency specific information */ + Elf32_Half vna_other; /* Unused */ + Elf32_Word vna_name; /* Dependency name string offset */ + Elf32_Word vna_next; /* Offset in bytes to next vernaux + entry */ +} Elf32_Vernaux; + +typedef struct +{ + Elf64_Word vna_hash; /* Hash value of dependency name */ + Elf64_Half vna_flags; /* Dependency specific information */ + Elf64_Half vna_other; /* Unused */ + Elf64_Word vna_name; /* Dependency name string offset */ + Elf64_Word vna_next; /* Offset in bytes to next vernaux + entry */ +} Elf64_Vernaux; + + +/* Legal values for vna_flags. */ +#define VER_FLG_WEAK 0x2 /* Weak version identifier */ + + +/* Auxiliary vector. */ + +/* This vector is normally only used by the program interpreter. The + usual definition in an ABI supplement uses the name auxv_t. The + vector is not usually defined in a standard file, but it + can't hurt. We rename it to avoid conflicts. The sizes of these + types are an arrangement between the exec server and the program + interpreter, so we don't fully specify them here. */ + +typedef struct +{ + uint32_t a_type; /* Entry type */ + union + { + uint32_t a_val; /* Integer value */ + /* We use to have pointer elements added here. We cannot do that, + though, since it does not work when using 32-bit definitions + on 64-bit platforms and vice versa. */ + } a_un; +} Elf32_auxv_t; + +typedef struct +{ + uint64_t a_type; /* Entry type */ + union + { + uint64_t a_val; /* Integer value */ + /* We use to have pointer elements added here. We cannot do that, + though, since it does not work when using 32-bit definitions + on 64-bit platforms and vice versa. */ + } a_un; +} Elf64_auxv_t; + +/* Legal values for a_type (entry type). */ + +#define AT_NULL 0 /* End of vector */ +#define AT_IGNORE 1 /* Entry should be ignored */ +#define AT_EXECFD 2 /* File descriptor of program */ +#define AT_PHDR 3 /* Program headers for program */ +#define AT_PHENT 4 /* Size of program header entry */ +#define AT_PHNUM 5 /* Number of program headers */ +#define AT_PAGESZ 6 /* System page size */ +#define AT_BASE 7 /* Base address of interpreter */ +#define AT_FLAGS 8 /* Flags */ +#define AT_ENTRY 9 /* Entry point of program */ +#define AT_NOTELF 10 /* Program is not ELF */ +#define AT_UID 11 /* Real uid */ +#define AT_EUID 12 /* Effective uid */ +#define AT_GID 13 /* Real gid */ +#define AT_EGID 14 /* Effective gid */ +#define AT_CLKTCK 17 /* Frequency of times() */ + +/* Some more special a_type values describing the hardware. */ +#define AT_PLATFORM 15 /* String identifying platform. */ +#define AT_HWCAP 16 /* Machine dependent hints about + processor capabilities. */ + +/* This entry gives some information about the FPU initialization + performed by the kernel. */ +#define AT_FPUCW 18 /* Used FPU control word. */ + +/* Cache block sizes. */ +#define AT_DCACHEBSIZE 19 /* Data cache block size. */ +#define AT_ICACHEBSIZE 20 /* Instruction cache block size. */ +#define AT_UCACHEBSIZE 21 /* Unified cache block size. */ + +/* A special ignored value for PPC, used by the kernel to control the + interpretation of the AUXV. Must be > 16. */ +#define AT_IGNOREPPC 22 /* Entry should be ignored. */ + +#define AT_SECURE 23 /* Boolean, was exec setuid-like? */ + +#define AT_EXECFN 31 /* Filename of executable. */ + +/* Pointer to the global system page used for system calls and other + nice things. */ +#define AT_SYSINFO 32 +#define AT_SYSINFO_EHDR 33 + +/* Shapes of the caches. Bits 0-3 contains associativity; bits 4-7 contains + log2 of line size; mask those to get cache size. */ +#define AT_L1I_CACHESHAPE 34 +#define AT_L1D_CACHESHAPE 35 +#define AT_L2_CACHESHAPE 36 +#define AT_L3_CACHESHAPE 37 + +/* Note section contents. Each entry in the note section begins with + a header of a fixed form. */ + +typedef struct +{ + Elf32_Word n_namesz; /* Length of the note's name. */ + Elf32_Word n_descsz; /* Length of the note's descriptor. */ + Elf32_Word n_type; /* Type of the note. */ +} Elf32_Nhdr; + +typedef struct +{ + Elf64_Word n_namesz; /* Length of the note's name. */ + Elf64_Word n_descsz; /* Length of the note's descriptor. */ + Elf64_Word n_type; /* Type of the note. */ +} Elf64_Nhdr; + +/* Known names of notes. */ + +/* Solaris entries in the note section have this name. */ +#define ELF_NOTE_SOLARIS "SUNW Solaris" + +/* Note entries for GNU systems have this name. */ +#define ELF_NOTE_GNU "GNU" + + +/* Defined types of notes for Solaris. */ + +/* Value of descriptor (one word) is desired pagesize for the binary. */ +#define ELF_NOTE_PAGESIZE_HINT 1 + + +/* Defined note types for GNU systems. */ + +/* ABI information. The descriptor consists of words: + word 0: OS descriptor + word 1: major version of the ABI + word 2: minor version of the ABI + word 3: subminor version of the ABI +*/ +#define NT_GNU_ABI_TAG 1 +#define ELF_NOTE_ABI NT_GNU_ABI_TAG /* Old name. */ + +/* Known OSes. These values can appear in word 0 of an + NT_GNU_ABI_TAG note section entry. */ +#define ELF_NOTE_OS_LINUX 0 +#define ELF_NOTE_OS_GNU 1 +#define ELF_NOTE_OS_SOLARIS2 2 +#define ELF_NOTE_OS_FREEBSD 3 + +/* Synthetic hwcap information. The descriptor begins with two words: + word 0: number of entries + word 1: bitmask of enabled entries + Then follow variable-length entries, one byte followed by a + '\0'-terminated hwcap name string. The byte gives the bit + number to test if enabled, (1U << bit) & bitmask. */ +#define NT_GNU_HWCAP 2 + +/* Build ID bits as generated by ld --build-id. + The descriptor consists of any nonzero number of bytes. */ +#define NT_GNU_BUILD_ID 3 + + +/* Move records. */ +typedef struct +{ + Elf32_Xword m_value; /* Symbol value. */ + Elf32_Word m_info; /* Size and index. */ + Elf32_Word m_poffset; /* Symbol offset. */ + Elf32_Half m_repeat; /* Repeat count. */ + Elf32_Half m_stride; /* Stride info. */ +} Elf32_Move; + +typedef struct +{ + Elf64_Xword m_value; /* Symbol value. */ + Elf64_Xword m_info; /* Size and index. */ + Elf64_Xword m_poffset; /* Symbol offset. */ + Elf64_Half m_repeat; /* Repeat count. */ + Elf64_Half m_stride; /* Stride info. */ +} Elf64_Move; + +/* Macro to construct move records. */ +#define ELF32_M_SYM(info) ((info) >> 8) +#define ELF32_M_SIZE(info) ((unsigned char) (info)) +#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size)) + +#define ELF64_M_SYM(info) ELF32_M_SYM (info) +#define ELF64_M_SIZE(info) ELF32_M_SIZE (info) +#define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size) + + +/* Motorola 68k specific definitions. */ + +/* Values for Elf32_Ehdr.e_flags. */ +#define EF_CPU32 0x00810000 + +/* m68k relocs. */ + +#define R_68K_NONE 0 /* No reloc */ +#define R_68K_32 1 /* Direct 32 bit */ +#define R_68K_16 2 /* Direct 16 bit */ +#define R_68K_8 3 /* Direct 8 bit */ +#define R_68K_PC32 4 /* PC relative 32 bit */ +#define R_68K_PC16 5 /* PC relative 16 bit */ +#define R_68K_PC8 6 /* PC relative 8 bit */ +#define R_68K_GOT32 7 /* 32 bit PC relative GOT entry */ +#define R_68K_GOT16 8 /* 16 bit PC relative GOT entry */ +#define R_68K_GOT8 9 /* 8 bit PC relative GOT entry */ +#define R_68K_GOT32O 10 /* 32 bit GOT offset */ +#define R_68K_GOT16O 11 /* 16 bit GOT offset */ +#define R_68K_GOT8O 12 /* 8 bit GOT offset */ +#define R_68K_PLT32 13 /* 32 bit PC relative PLT address */ +#define R_68K_PLT16 14 /* 16 bit PC relative PLT address */ +#define R_68K_PLT8 15 /* 8 bit PC relative PLT address */ +#define R_68K_PLT32O 16 /* 32 bit PLT offset */ +#define R_68K_PLT16O 17 /* 16 bit PLT offset */ +#define R_68K_PLT8O 18 /* 8 bit PLT offset */ +#define R_68K_COPY 19 /* Copy symbol at runtime */ +#define R_68K_GLOB_DAT 20 /* Create GOT entry */ +#define R_68K_JMP_SLOT 21 /* Create PLT entry */ +#define R_68K_RELATIVE 22 /* Adjust by program base */ +/* Keep this the last entry. */ +#define R_68K_NUM 23 + +/* Intel 80386 specific definitions. */ + +/* i386 relocs. */ + +#define R_386_NONE 0 /* No reloc */ +#define R_386_32 1 /* Direct 32 bit */ +#define R_386_PC32 2 /* PC relative 32 bit */ +#define R_386_GOT32 3 /* 32 bit GOT entry */ +#define R_386_PLT32 4 /* 32 bit PLT address */ +#define R_386_COPY 5 /* Copy symbol at runtime */ +#define R_386_GLOB_DAT 6 /* Create GOT entry */ +#define R_386_JMP_SLOT 7 /* Create PLT entry */ +#define R_386_RELATIVE 8 /* Adjust by program base */ +#define R_386_GOTOFF 9 /* 32 bit offset to GOT */ +#define R_386_GOTPC 10 /* 32 bit PC relative offset to GOT */ +#define R_386_32PLT 11 +#define R_386_TLS_TPOFF 14 /* Offset in static TLS block */ +#define R_386_TLS_IE 15 /* Address of GOT entry for static TLS + block offset */ +#define R_386_TLS_GOTIE 16 /* GOT entry for static TLS block + offset */ +#define R_386_TLS_LE 17 /* Offset relative to static TLS + block */ +#define R_386_TLS_GD 18 /* Direct 32 bit for GNU version of + general dynamic thread local data */ +#define R_386_TLS_LDM 19 /* Direct 32 bit for GNU version of + local dynamic thread local data + in LE code */ +#define R_386_16 20 +#define R_386_PC16 21 +#define R_386_8 22 +#define R_386_PC8 23 +#define R_386_TLS_GD_32 24 /* Direct 32 bit for general dynamic + thread local data */ +#define R_386_TLS_GD_PUSH 25 /* Tag for pushl in GD TLS code */ +#define R_386_TLS_GD_CALL 26 /* Relocation for call to + __tls_get_addr() */ +#define R_386_TLS_GD_POP 27 /* Tag for popl in GD TLS code */ +#define R_386_TLS_LDM_32 28 /* Direct 32 bit for local dynamic + thread local data in LE code */ +#define R_386_TLS_LDM_PUSH 29 /* Tag for pushl in LDM TLS code */ +#define R_386_TLS_LDM_CALL 30 /* Relocation for call to + __tls_get_addr() in LDM code */ +#define R_386_TLS_LDM_POP 31 /* Tag for popl in LDM TLS code */ +#define R_386_TLS_LDO_32 32 /* Offset relative to TLS block */ +#define R_386_TLS_IE_32 33 /* GOT entry for negated static TLS + block offset */ +#define R_386_TLS_LE_32 34 /* Negated offset relative to static + TLS block */ +#define R_386_TLS_DTPMOD32 35 /* ID of module containing symbol */ +#define R_386_TLS_DTPOFF32 36 /* Offset in TLS block */ +#define R_386_TLS_TPOFF32 37 /* Negated offset in static TLS block */ +/* 38? */ +#define R_386_TLS_GOTDESC 39 /* GOT offset for TLS descriptor. */ +#define R_386_TLS_DESC_CALL 40 /* Marker of call through TLS + descriptor for + relaxation. */ +#define R_386_TLS_DESC 41 /* TLS descriptor containing + pointer to code and to + argument, returning the TLS + offset for the symbol. */ +/* Keep this the last entry. */ +#define R_386_NUM 42 + +/* SUN SPARC specific definitions. */ + +/* Legal values for ST_TYPE subfield of st_info (symbol type). */ + +#define STT_SPARC_REGISTER 13 /* Global register reserved to app. */ + +/* Values for Elf64_Ehdr.e_flags. */ + +#define EF_SPARCV9_MM 3 +#define EF_SPARCV9_TSO 0 +#define EF_SPARCV9_PSO 1 +#define EF_SPARCV9_RMO 2 +#define EF_SPARC_LEDATA 0x800000 /* little endian data */ +#define EF_SPARC_EXT_MASK 0xFFFF00 +#define EF_SPARC_32PLUS 0x000100 /* generic V8+ features */ +#define EF_SPARC_SUN_US1 0x000200 /* Sun UltraSPARC1 extensions */ +#define EF_SPARC_HAL_R1 0x000400 /* HAL R1 extensions */ +#define EF_SPARC_SUN_US3 0x000800 /* Sun UltraSPARCIII extensions */ + +/* SPARC relocs. */ + +#define R_SPARC_NONE 0 /* No reloc */ +#define R_SPARC_8 1 /* Direct 8 bit */ +#define R_SPARC_16 2 /* Direct 16 bit */ +#define R_SPARC_32 3 /* Direct 32 bit */ +#define R_SPARC_DISP8 4 /* PC relative 8 bit */ +#define R_SPARC_DISP16 5 /* PC relative 16 bit */ +#define R_SPARC_DISP32 6 /* PC relative 32 bit */ +#define R_SPARC_WDISP30 7 /* PC relative 30 bit shifted */ +#define R_SPARC_WDISP22 8 /* PC relative 22 bit shifted */ +#define R_SPARC_HI22 9 /* High 22 bit */ +#define R_SPARC_22 10 /* Direct 22 bit */ +#define R_SPARC_13 11 /* Direct 13 bit */ +#define R_SPARC_LO10 12 /* Truncated 10 bit */ +#define R_SPARC_GOT10 13 /* Truncated 10 bit GOT entry */ +#define R_SPARC_GOT13 14 /* 13 bit GOT entry */ +#define R_SPARC_GOT22 15 /* 22 bit GOT entry shifted */ +#define R_SPARC_PC10 16 /* PC relative 10 bit truncated */ +#define R_SPARC_PC22 17 /* PC relative 22 bit shifted */ +#define R_SPARC_WPLT30 18 /* 30 bit PC relative PLT address */ +#define R_SPARC_COPY 19 /* Copy symbol at runtime */ +#define R_SPARC_GLOB_DAT 20 /* Create GOT entry */ +#define R_SPARC_JMP_SLOT 21 /* Create PLT entry */ +#define R_SPARC_RELATIVE 22 /* Adjust by program base */ +#define R_SPARC_UA32 23 /* Direct 32 bit unaligned */ + +/* Additional Sparc64 relocs. */ + +#define R_SPARC_PLT32 24 /* Direct 32 bit ref to PLT entry */ +#define R_SPARC_HIPLT22 25 /* High 22 bit PLT entry */ +#define R_SPARC_LOPLT10 26 /* Truncated 10 bit PLT entry */ +#define R_SPARC_PCPLT32 27 /* PC rel 32 bit ref to PLT entry */ +#define R_SPARC_PCPLT22 28 /* PC rel high 22 bit PLT entry */ +#define R_SPARC_PCPLT10 29 /* PC rel trunc 10 bit PLT entry */ +#define R_SPARC_10 30 /* Direct 10 bit */ +#define R_SPARC_11 31 /* Direct 11 bit */ +#define R_SPARC_64 32 /* Direct 64 bit */ +#define R_SPARC_OLO10 33 /* 10bit with secondary 13bit addend */ +#define R_SPARC_HH22 34 /* Top 22 bits of direct 64 bit */ +#define R_SPARC_HM10 35 /* High middle 10 bits of ... */ +#define R_SPARC_LM22 36 /* Low middle 22 bits of ... */ +#define R_SPARC_PC_HH22 37 /* Top 22 bits of pc rel 64 bit */ +#define R_SPARC_PC_HM10 38 /* High middle 10 bit of ... */ +#define R_SPARC_PC_LM22 39 /* Low miggle 22 bits of ... */ +#define R_SPARC_WDISP16 40 /* PC relative 16 bit shifted */ +#define R_SPARC_WDISP19 41 /* PC relative 19 bit shifted */ +#define R_SPARC_7 43 /* Direct 7 bit */ +#define R_SPARC_5 44 /* Direct 5 bit */ +#define R_SPARC_6 45 /* Direct 6 bit */ +#define R_SPARC_DISP64 46 /* PC relative 64 bit */ +#define R_SPARC_PLT64 47 /* Direct 64 bit ref to PLT entry */ +#define R_SPARC_HIX22 48 /* High 22 bit complemented */ +#define R_SPARC_LOX10 49 /* Truncated 11 bit complemented */ +#define R_SPARC_H44 50 /* Direct high 12 of 44 bit */ +#define R_SPARC_M44 51 /* Direct mid 22 of 44 bit */ +#define R_SPARC_L44 52 /* Direct low 10 of 44 bit */ +#define R_SPARC_REGISTER 53 /* Global register usage */ +#define R_SPARC_UA64 54 /* Direct 64 bit unaligned */ +#define R_SPARC_UA16 55 /* Direct 16 bit unaligned */ +#define R_SPARC_TLS_GD_HI22 56 +#define R_SPARC_TLS_GD_LO10 57 +#define R_SPARC_TLS_GD_ADD 58 +#define R_SPARC_TLS_GD_CALL 59 +#define R_SPARC_TLS_LDM_HI22 60 +#define R_SPARC_TLS_LDM_LO10 61 +#define R_SPARC_TLS_LDM_ADD 62 +#define R_SPARC_TLS_LDM_CALL 63 +#define R_SPARC_TLS_LDO_HIX22 64 +#define R_SPARC_TLS_LDO_LOX10 65 +#define R_SPARC_TLS_LDO_ADD 66 +#define R_SPARC_TLS_IE_HI22 67 +#define R_SPARC_TLS_IE_LO10 68 +#define R_SPARC_TLS_IE_LD 69 +#define R_SPARC_TLS_IE_LDX 70 +#define R_SPARC_TLS_IE_ADD 71 +#define R_SPARC_TLS_LE_HIX22 72 +#define R_SPARC_TLS_LE_LOX10 73 +#define R_SPARC_TLS_DTPMOD32 74 +#define R_SPARC_TLS_DTPMOD64 75 +#define R_SPARC_TLS_DTPOFF32 76 +#define R_SPARC_TLS_DTPOFF64 77 +#define R_SPARC_TLS_TPOFF32 78 +#define R_SPARC_TLS_TPOFF64 79 +/* Keep this the last entry. */ +#define R_SPARC_NUM 80 + +/* For Sparc64, legal values for d_tag of Elf64_Dyn. */ + +#define DT_SPARC_REGISTER 0x70000001 +#define DT_SPARC_NUM 2 + +/* Bits present in AT_HWCAP on SPARC. */ + +#define HWCAP_SPARC_FLUSH 1 /* The CPU supports flush insn. */ +#define HWCAP_SPARC_STBAR 2 +#define HWCAP_SPARC_SWAP 4 +#define HWCAP_SPARC_MULDIV 8 +#define HWCAP_SPARC_V9 16 /* The CPU is v9, so v8plus is ok. */ +#define HWCAP_SPARC_ULTRA3 32 +#define HWCAP_SPARC_BLKINIT 64 /* Sun4v with block-init/load-twin. */ +#define HWCAP_SPARC_N2 128 + +/* MIPS R3000 specific definitions. */ + +/* Legal values for e_flags field of Elf32_Ehdr. */ + +#define EF_MIPS_NOREORDER 1 /* A .noreorder directive was used */ +#define EF_MIPS_PIC 2 /* Contains PIC code */ +#define EF_MIPS_CPIC 4 /* Uses PIC calling sequence */ +#define EF_MIPS_XGOT 8 +#define EF_MIPS_64BIT_WHIRL 16 +#define EF_MIPS_ABI2 32 +#define EF_MIPS_ABI_ON32 64 +#define EF_MIPS_ARCH 0xf0000000 /* MIPS architecture level */ + +/* Legal values for MIPS architecture level. */ + +#define EF_MIPS_ARCH_1 0x00000000 /* -mips1 code. */ +#define EF_MIPS_ARCH_2 0x10000000 /* -mips2 code. */ +#define EF_MIPS_ARCH_3 0x20000000 /* -mips3 code. */ +#define EF_MIPS_ARCH_4 0x30000000 /* -mips4 code. */ +#define EF_MIPS_ARCH_5 0x40000000 /* -mips5 code. */ +#define EF_MIPS_ARCH_32 0x60000000 /* MIPS32 code. */ +#define EF_MIPS_ARCH_64 0x70000000 /* MIPS64 code. */ + +/* The following are non-official names and should not be used. */ + +#define E_MIPS_ARCH_1 0x00000000 /* -mips1 code. */ +#define E_MIPS_ARCH_2 0x10000000 /* -mips2 code. */ +#define E_MIPS_ARCH_3 0x20000000 /* -mips3 code. */ +#define E_MIPS_ARCH_4 0x30000000 /* -mips4 code. */ +#define E_MIPS_ARCH_5 0x40000000 /* -mips5 code. */ +#define E_MIPS_ARCH_32 0x60000000 /* MIPS32 code. */ +#define E_MIPS_ARCH_64 0x70000000 /* MIPS64 code. */ + +/* Special section indices. */ + +#define SHN_MIPS_ACOMMON 0xff00 /* Allocated common symbols */ +#define SHN_MIPS_TEXT 0xff01 /* Allocated test symbols. */ +#define SHN_MIPS_DATA 0xff02 /* Allocated data symbols. */ +#define SHN_MIPS_SCOMMON 0xff03 /* Small common symbols */ +#define SHN_MIPS_SUNDEFINED 0xff04 /* Small undefined symbols */ + +/* Legal values for sh_type field of Elf32_Shdr. */ + +#define SHT_MIPS_LIBLIST 0x70000000 /* Shared objects used in link */ +#define SHT_MIPS_MSYM 0x70000001 +#define SHT_MIPS_CONFLICT 0x70000002 /* Conflicting symbols */ +#define SHT_MIPS_GPTAB 0x70000003 /* Global data area sizes */ +#define SHT_MIPS_UCODE 0x70000004 /* Reserved for SGI/MIPS compilers */ +#define SHT_MIPS_DEBUG 0x70000005 /* MIPS ECOFF debugging information*/ +#define SHT_MIPS_REGINFO 0x70000006 /* Register usage information */ +#define SHT_MIPS_PACKAGE 0x70000007 +#define SHT_MIPS_PACKSYM 0x70000008 +#define SHT_MIPS_RELD 0x70000009 +#define SHT_MIPS_IFACE 0x7000000b +#define SHT_MIPS_CONTENT 0x7000000c +#define SHT_MIPS_OPTIONS 0x7000000d /* Miscellaneous options. */ +#define SHT_MIPS_SHDR 0x70000010 +#define SHT_MIPS_FDESC 0x70000011 +#define SHT_MIPS_EXTSYM 0x70000012 +#define SHT_MIPS_DENSE 0x70000013 +#define SHT_MIPS_PDESC 0x70000014 +#define SHT_MIPS_LOCSYM 0x70000015 +#define SHT_MIPS_AUXSYM 0x70000016 +#define SHT_MIPS_OPTSYM 0x70000017 +#define SHT_MIPS_LOCSTR 0x70000018 +#define SHT_MIPS_LINE 0x70000019 +#define SHT_MIPS_RFDESC 0x7000001a +#define SHT_MIPS_DELTASYM 0x7000001b +#define SHT_MIPS_DELTAINST 0x7000001c +#define SHT_MIPS_DELTACLASS 0x7000001d +#define SHT_MIPS_DWARF 0x7000001e /* DWARF debugging information. */ +#define SHT_MIPS_DELTADECL 0x7000001f +#define SHT_MIPS_SYMBOL_LIB 0x70000020 +#define SHT_MIPS_EVENTS 0x70000021 /* Event section. */ +#define SHT_MIPS_TRANSLATE 0x70000022 +#define SHT_MIPS_PIXIE 0x70000023 +#define SHT_MIPS_XLATE 0x70000024 +#define SHT_MIPS_XLATE_DEBUG 0x70000025 +#define SHT_MIPS_WHIRL 0x70000026 +#define SHT_MIPS_EH_REGION 0x70000027 +#define SHT_MIPS_XLATE_OLD 0x70000028 +#define SHT_MIPS_PDR_EXCEPTION 0x70000029 + +/* Legal values for sh_flags field of Elf32_Shdr. */ + +#define SHF_MIPS_GPREL 0x10000000 /* Must be part of global data area */ +#define SHF_MIPS_MERGE 0x20000000 +#define SHF_MIPS_ADDR 0x40000000 +#define SHF_MIPS_STRINGS 0x80000000 +#define SHF_MIPS_NOSTRIP 0x08000000 +#define SHF_MIPS_LOCAL 0x04000000 +#define SHF_MIPS_NAMES 0x02000000 +#define SHF_MIPS_NODUPE 0x01000000 + + +/* Symbol tables. */ + +/* MIPS specific values for `st_other'. */ +#define STO_MIPS_DEFAULT 0x0 +#define STO_MIPS_INTERNAL 0x1 +#define STO_MIPS_HIDDEN 0x2 +#define STO_MIPS_PROTECTED 0x3 +#define STO_MIPS_PLT 0x8 +#define STO_MIPS_SC_ALIGN_UNUSED 0xff + +/* MIPS specific values for `st_info'. */ +#define STB_MIPS_SPLIT_COMMON 13 + +/* Entries found in sections of type SHT_MIPS_GPTAB. */ + +typedef union +{ + struct + { + Elf32_Word gt_current_g_value; /* -G value used for compilation */ + Elf32_Word gt_unused; /* Not used */ + } gt_header; /* First entry in section */ + struct + { + Elf32_Word gt_g_value; /* If this value were used for -G */ + Elf32_Word gt_bytes; /* This many bytes would be used */ + } gt_entry; /* Subsequent entries in section */ +} Elf32_gptab; + +/* Entry found in sections of type SHT_MIPS_REGINFO. */ + +typedef struct +{ + Elf32_Word ri_gprmask; /* General registers used */ + Elf32_Word ri_cprmask[4]; /* Coprocessor registers used */ + Elf32_Sword ri_gp_value; /* $gp register value */ +} Elf32_RegInfo; + +/* Entries found in sections of type SHT_MIPS_OPTIONS. */ + +typedef struct +{ + unsigned char kind; /* Determines interpretation of the + variable part of descriptor. */ + unsigned char size; /* Size of descriptor, including header. */ + Elf32_Section section; /* Section header index of section affected, + 0 for global options. */ + Elf32_Word info; /* Kind-specific information. */ +} Elf_Options; + +/* Values for `kind' field in Elf_Options. */ + +#define ODK_NULL 0 /* Undefined. */ +#define ODK_REGINFO 1 /* Register usage information. */ +#define ODK_EXCEPTIONS 2 /* Exception processing options. */ +#define ODK_PAD 3 /* Section padding options. */ +#define ODK_HWPATCH 4 /* Hardware workarounds performed */ +#define ODK_FILL 5 /* record the fill value used by the linker. */ +#define ODK_TAGS 6 /* reserve space for desktop tools to write. */ +#define ODK_HWAND 7 /* HW workarounds. 'AND' bits when merging. */ +#define ODK_HWOR 8 /* HW workarounds. 'OR' bits when merging. */ + +/* Values for `info' in Elf_Options for ODK_EXCEPTIONS entries. */ + +#define OEX_FPU_MIN 0x1f /* FPE's which MUST be enabled. */ +#define OEX_FPU_MAX 0x1f00 /* FPE's which MAY be enabled. */ +#define OEX_PAGE0 0x10000 /* page zero must be mapped. */ +#define OEX_SMM 0x20000 /* Force sequential memory mode? */ +#define OEX_FPDBUG 0x40000 /* Force floating point debug mode? */ +#define OEX_PRECISEFP OEX_FPDBUG +#define OEX_DISMISS 0x80000 /* Dismiss invalid address faults? */ + +#define OEX_FPU_INVAL 0x10 +#define OEX_FPU_DIV0 0x08 +#define OEX_FPU_OFLO 0x04 +#define OEX_FPU_UFLO 0x02 +#define OEX_FPU_INEX 0x01 + +/* Masks for `info' in Elf_Options for an ODK_HWPATCH entry. */ + +#define OHW_R4KEOP 0x1 /* R4000 end-of-page patch. */ +#define OHW_R8KPFETCH 0x2 /* may need R8000 prefetch patch. */ +#define OHW_R5KEOP 0x4 /* R5000 end-of-page patch. */ +#define OHW_R5KCVTL 0x8 /* R5000 cvt.[ds].l bug. clean=1. */ + +#define OPAD_PREFIX 0x1 +#define OPAD_POSTFIX 0x2 +#define OPAD_SYMBOL 0x4 + +/* Entry found in `.options' section. */ + +typedef struct +{ + Elf32_Word hwp_flags1; /* Extra flags. */ + Elf32_Word hwp_flags2; /* Extra flags. */ +} Elf_Options_Hw; + +/* Masks for `info' in ElfOptions for ODK_HWAND and ODK_HWOR entries. */ + +#define OHWA0_R4KEOP_CHECKED 0x00000001 +#define OHWA1_R4KEOP_CLEAN 0x00000002 + +/* MIPS relocs. */ + +#define R_MIPS_NONE 0 /* No reloc */ +#define R_MIPS_16 1 /* Direct 16 bit */ +#define R_MIPS_32 2 /* Direct 32 bit */ +#define R_MIPS_REL32 3 /* PC relative 32 bit */ +#define R_MIPS_26 4 /* Direct 26 bit shifted */ +#define R_MIPS_HI16 5 /* High 16 bit */ +#define R_MIPS_LO16 6 /* Low 16 bit */ +#define R_MIPS_GPREL16 7 /* GP relative 16 bit */ +#define R_MIPS_LITERAL 8 /* 16 bit literal entry */ +#define R_MIPS_GOT16 9 /* 16 bit GOT entry */ +#define R_MIPS_PC16 10 /* PC relative 16 bit */ +#define R_MIPS_CALL16 11 /* 16 bit GOT entry for function */ +#define R_MIPS_GPREL32 12 /* GP relative 32 bit */ + +#define R_MIPS_SHIFT5 16 +#define R_MIPS_SHIFT6 17 +#define R_MIPS_64 18 +#define R_MIPS_GOT_DISP 19 +#define R_MIPS_GOT_PAGE 20 +#define R_MIPS_GOT_OFST 21 +#define R_MIPS_GOT_HI16 22 +#define R_MIPS_GOT_LO16 23 +#define R_MIPS_SUB 24 +#define R_MIPS_INSERT_A 25 +#define R_MIPS_INSERT_B 26 +#define R_MIPS_DELETE 27 +#define R_MIPS_HIGHER 28 +#define R_MIPS_HIGHEST 29 +#define R_MIPS_CALL_HI16 30 +#define R_MIPS_CALL_LO16 31 +#define R_MIPS_SCN_DISP 32 +#define R_MIPS_REL16 33 +#define R_MIPS_ADD_IMMEDIATE 34 +#define R_MIPS_PJUMP 35 +#define R_MIPS_RELGOT 36 +#define R_MIPS_JALR 37 +#define R_MIPS_TLS_DTPMOD32 38 /* Module number 32 bit */ +#define R_MIPS_TLS_DTPREL32 39 /* Module-relative offset 32 bit */ +#define R_MIPS_TLS_DTPMOD64 40 /* Module number 64 bit */ +#define R_MIPS_TLS_DTPREL64 41 /* Module-relative offset 64 bit */ +#define R_MIPS_TLS_GD 42 /* 16 bit GOT offset for GD */ +#define R_MIPS_TLS_LDM 43 /* 16 bit GOT offset for LDM */ +#define R_MIPS_TLS_DTPREL_HI16 44 /* Module-relative offset, high 16 bits */ +#define R_MIPS_TLS_DTPREL_LO16 45 /* Module-relative offset, low 16 bits */ +#define R_MIPS_TLS_GOTTPREL 46 /* 16 bit GOT offset for IE */ +#define R_MIPS_TLS_TPREL32 47 /* TP-relative offset, 32 bit */ +#define R_MIPS_TLS_TPREL64 48 /* TP-relative offset, 64 bit */ +#define R_MIPS_TLS_TPREL_HI16 49 /* TP-relative offset, high 16 bits */ +#define R_MIPS_TLS_TPREL_LO16 50 /* TP-relative offset, low 16 bits */ +#define R_MIPS_GLOB_DAT 51 +#define R_MIPS_COPY 126 +#define R_MIPS_JUMP_SLOT 127 +/* Keep this the last entry. */ +#define R_MIPS_NUM 128 + +/* Legal values for p_type field of Elf32_Phdr. */ + +#define PT_MIPS_REGINFO 0x70000000 /* Register usage information */ +#define PT_MIPS_RTPROC 0x70000001 /* Runtime procedure table. */ +#define PT_MIPS_OPTIONS 0x70000002 + +/* Special program header types. */ + +#define PF_MIPS_LOCAL 0x10000000 + +/* Legal values for d_tag field of Elf32_Dyn. */ + +#define DT_MIPS_RLD_VERSION 0x70000001 /* Runtime linker interface version */ +#define DT_MIPS_TIME_STAMP 0x70000002 /* Timestamp */ +#define DT_MIPS_ICHECKSUM 0x70000003 /* Checksum */ +#define DT_MIPS_IVERSION 0x70000004 /* Version string (string tbl index) */ +#define DT_MIPS_FLAGS 0x70000005 /* Flags */ +#define DT_MIPS_BASE_ADDRESS 0x70000006 /* Base address */ +#define DT_MIPS_MSYM 0x70000007 +#define DT_MIPS_CONFLICT 0x70000008 /* Address of CONFLICT section */ +#define DT_MIPS_LIBLIST 0x70000009 /* Address of LIBLIST section */ +#define DT_MIPS_LOCAL_GOTNO 0x7000000a /* Number of local GOT entries */ +#define DT_MIPS_CONFLICTNO 0x7000000b /* Number of CONFLICT entries */ +#define DT_MIPS_LIBLISTNO 0x70000010 /* Number of LIBLIST entries */ +#define DT_MIPS_SYMTABNO 0x70000011 /* Number of DYNSYM entries */ +#define DT_MIPS_UNREFEXTNO 0x70000012 /* First external DYNSYM */ +#define DT_MIPS_GOTSYM 0x70000013 /* First GOT entry in DYNSYM */ +#define DT_MIPS_HIPAGENO 0x70000014 /* Number of GOT page table entries */ +#define DT_MIPS_RLD_MAP 0x70000016 /* Address of run time loader map. */ +#define DT_MIPS_DELTA_CLASS 0x70000017 /* Delta C++ class definition. */ +#define DT_MIPS_DELTA_CLASS_NO 0x70000018 /* Number of entries in + DT_MIPS_DELTA_CLASS. */ +#define DT_MIPS_DELTA_INSTANCE 0x70000019 /* Delta C++ class instances. */ +#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a /* Number of entries in + DT_MIPS_DELTA_INSTANCE. */ +#define DT_MIPS_DELTA_RELOC 0x7000001b /* Delta relocations. */ +#define DT_MIPS_DELTA_RELOC_NO 0x7000001c /* Number of entries in + DT_MIPS_DELTA_RELOC. */ +#define DT_MIPS_DELTA_SYM 0x7000001d /* Delta symbols that Delta + relocations refer to. */ +#define DT_MIPS_DELTA_SYM_NO 0x7000001e /* Number of entries in + DT_MIPS_DELTA_SYM. */ +#define DT_MIPS_DELTA_CLASSSYM 0x70000020 /* Delta symbols that hold the + class declaration. */ +#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 /* Number of entries in + DT_MIPS_DELTA_CLASSSYM. */ +#define DT_MIPS_CXX_FLAGS 0x70000022 /* Flags indicating for C++ flavor. */ +#define DT_MIPS_PIXIE_INIT 0x70000023 +#define DT_MIPS_SYMBOL_LIB 0x70000024 +#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025 +#define DT_MIPS_LOCAL_GOTIDX 0x70000026 +#define DT_MIPS_HIDDEN_GOTIDX 0x70000027 +#define DT_MIPS_PROTECTED_GOTIDX 0x70000028 +#define DT_MIPS_OPTIONS 0x70000029 /* Address of .options. */ +#define DT_MIPS_INTERFACE 0x7000002a /* Address of .interface. */ +#define DT_MIPS_DYNSTR_ALIGN 0x7000002b +#define DT_MIPS_INTERFACE_SIZE 0x7000002c /* Size of the .interface section. */ +#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d /* Address of rld_text_rsolve + function stored in GOT. */ +#define DT_MIPS_PERF_SUFFIX 0x7000002e /* Default suffix of dso to be added + by rld on dlopen() calls. */ +#define DT_MIPS_COMPACT_SIZE 0x7000002f /* (O32)Size of compact rel section. */ +#define DT_MIPS_GP_VALUE 0x70000030 /* GP value for aux GOTs. */ +#define DT_MIPS_AUX_DYNAMIC 0x70000031 /* Address of aux .dynamic. */ +/* The address of .got.plt in an executable using the new non-PIC ABI. */ +#define DT_MIPS_PLTGOT 0x70000032 +/* The base of the PLT in an executable using the new non-PIC ABI if that + PLT is writable. For a non-writable PLT, this is omitted or has a zero + value. */ +#define DT_MIPS_RWPLT 0x70000034 +#define DT_MIPS_NUM 0x35 + +/* Legal values for DT_MIPS_FLAGS Elf32_Dyn entry. */ + +#define RHF_NONE 0 /* No flags */ +#define RHF_QUICKSTART (1 << 0) /* Use quickstart */ +#define RHF_NOTPOT (1 << 1) /* Hash size not power of 2 */ +#define RHF_NO_LIBRARY_REPLACEMENT (1 << 2) /* Ignore LD_LIBRARY_PATH */ +#define RHF_NO_MOVE (1 << 3) +#define RHF_SGI_ONLY (1 << 4) +#define RHF_GUARANTEE_INIT (1 << 5) +#define RHF_DELTA_C_PLUS_PLUS (1 << 6) +#define RHF_GUARANTEE_START_INIT (1 << 7) +#define RHF_PIXIE (1 << 8) +#define RHF_DEFAULT_DELAY_LOAD (1 << 9) +#define RHF_REQUICKSTART (1 << 10) +#define RHF_REQUICKSTARTED (1 << 11) +#define RHF_CORD (1 << 12) +#define RHF_NO_UNRES_UNDEF (1 << 13) +#define RHF_RLD_ORDER_SAFE (1 << 14) + +/* Entries found in sections of type SHT_MIPS_LIBLIST. */ + +typedef struct +{ + Elf32_Word l_name; /* Name (string table index) */ + Elf32_Word l_time_stamp; /* Timestamp */ + Elf32_Word l_checksum; /* Checksum */ + Elf32_Word l_version; /* Interface version */ + Elf32_Word l_flags; /* Flags */ +} Elf32_Lib; + +typedef struct +{ + Elf64_Word l_name; /* Name (string table index) */ + Elf64_Word l_time_stamp; /* Timestamp */ + Elf64_Word l_checksum; /* Checksum */ + Elf64_Word l_version; /* Interface version */ + Elf64_Word l_flags; /* Flags */ +} Elf64_Lib; + + +/* Legal values for l_flags. */ + +#define LL_NONE 0 +#define LL_EXACT_MATCH (1 << 0) /* Require exact match */ +#define LL_IGNORE_INT_VER (1 << 1) /* Ignore interface version */ +#define LL_REQUIRE_MINOR (1 << 2) +#define LL_EXPORTS (1 << 3) +#define LL_DELAY_LOAD (1 << 4) +#define LL_DELTA (1 << 5) + +/* Entries found in sections of type SHT_MIPS_CONFLICT. */ + +typedef Elf32_Addr Elf32_Conflict; + + +/* HPPA specific definitions. */ + +/* Legal values for e_flags field of Elf32_Ehdr. */ + +#define EF_PARISC_TRAPNIL 0x00010000 /* Trap nil pointer dereference. */ +#define EF_PARISC_EXT 0x00020000 /* Program uses arch. extensions. */ +#define EF_PARISC_LSB 0x00040000 /* Program expects little endian. */ +#define EF_PARISC_WIDE 0x00080000 /* Program expects wide mode. */ +#define EF_PARISC_NO_KABP 0x00100000 /* No kernel assisted branch + prediction. */ +#define EF_PARISC_LAZYSWAP 0x00400000 /* Allow lazy swapping. */ +#define EF_PARISC_ARCH 0x0000ffff /* Architecture version. */ + +/* Defined values for `e_flags & EF_PARISC_ARCH' are: */ + +#define EFA_PARISC_1_0 0x020b /* PA-RISC 1.0 big-endian. */ +#define EFA_PARISC_1_1 0x0210 /* PA-RISC 1.1 big-endian. */ +#define EFA_PARISC_2_0 0x0214 /* PA-RISC 2.0 big-endian. */ + +/* Additional section indeces. */ + +#define SHN_PARISC_ANSI_COMMON 0xff00 /* Section for tenatively declared + symbols in ANSI C. */ +#define SHN_PARISC_HUGE_COMMON 0xff01 /* Common blocks in huge model. */ + +/* Legal values for sh_type field of Elf32_Shdr. */ + +#define SHT_PARISC_EXT 0x70000000 /* Contains product specific ext. */ +#define SHT_PARISC_UNWIND 0x70000001 /* Unwind information. */ +#define SHT_PARISC_DOC 0x70000002 /* Debug info for optimized code. */ + +/* Legal values for sh_flags field of Elf32_Shdr. */ + +#define SHF_PARISC_SHORT 0x20000000 /* Section with short addressing. */ +#define SHF_PARISC_HUGE 0x40000000 /* Section far from gp. */ +#define SHF_PARISC_SBP 0x80000000 /* Static branch prediction code. */ + +/* Legal values for ST_TYPE subfield of st_info (symbol type). */ + +#define STT_PARISC_MILLICODE 13 /* Millicode function entry point. */ + +#define STT_HP_OPAQUE (STT_LOOS + 0x1) +#define STT_HP_STUB (STT_LOOS + 0x2) + +/* HPPA relocs. */ + +#define R_PARISC_NONE 0 /* No reloc. */ +#define R_PARISC_DIR32 1 /* Direct 32-bit reference. */ +#define R_PARISC_DIR21L 2 /* Left 21 bits of eff. address. */ +#define R_PARISC_DIR17R 3 /* Right 17 bits of eff. address. */ +#define R_PARISC_DIR17F 4 /* 17 bits of eff. address. */ +#define R_PARISC_DIR14R 6 /* Right 14 bits of eff. address. */ +#define R_PARISC_PCREL32 9 /* 32-bit rel. address. */ +#define R_PARISC_PCREL21L 10 /* Left 21 bits of rel. address. */ +#define R_PARISC_PCREL17R 11 /* Right 17 bits of rel. address. */ +#define R_PARISC_PCREL17F 12 /* 17 bits of rel. address. */ +#define R_PARISC_PCREL14R 14 /* Right 14 bits of rel. address. */ +#define R_PARISC_DPREL21L 18 /* Left 21 bits of rel. address. */ +#define R_PARISC_DPREL14R 22 /* Right 14 bits of rel. address. */ +#define R_PARISC_GPREL21L 26 /* GP-relative, left 21 bits. */ +#define R_PARISC_GPREL14R 30 /* GP-relative, right 14 bits. */ +#define R_PARISC_LTOFF21L 34 /* LT-relative, left 21 bits. */ +#define R_PARISC_LTOFF14R 38 /* LT-relative, right 14 bits. */ +#define R_PARISC_SECREL32 41 /* 32 bits section rel. address. */ +#define R_PARISC_SEGBASE 48 /* No relocation, set segment base. */ +#define R_PARISC_SEGREL32 49 /* 32 bits segment rel. address. */ +#define R_PARISC_PLTOFF21L 50 /* PLT rel. address, left 21 bits. */ +#define R_PARISC_PLTOFF14R 54 /* PLT rel. address, right 14 bits. */ +#define R_PARISC_LTOFF_FPTR32 57 /* 32 bits LT-rel. function pointer. */ +#define R_PARISC_LTOFF_FPTR21L 58 /* LT-rel. fct ptr, left 21 bits. */ +#define R_PARISC_LTOFF_FPTR14R 62 /* LT-rel. fct ptr, right 14 bits. */ +#define R_PARISC_FPTR64 64 /* 64 bits function address. */ +#define R_PARISC_PLABEL32 65 /* 32 bits function address. */ +#define R_PARISC_PLABEL21L 66 /* Left 21 bits of fdesc address. */ +#define R_PARISC_PLABEL14R 70 /* Right 14 bits of fdesc address. */ +#define R_PARISC_PCREL64 72 /* 64 bits PC-rel. address. */ +#define R_PARISC_PCREL22F 74 /* 22 bits PC-rel. address. */ +#define R_PARISC_PCREL14WR 75 /* PC-rel. address, right 14 bits. */ +#define R_PARISC_PCREL14DR 76 /* PC rel. address, right 14 bits. */ +#define R_PARISC_PCREL16F 77 /* 16 bits PC-rel. address. */ +#define R_PARISC_PCREL16WF 78 /* 16 bits PC-rel. address. */ +#define R_PARISC_PCREL16DF 79 /* 16 bits PC-rel. address. */ +#define R_PARISC_DIR64 80 /* 64 bits of eff. address. */ +#define R_PARISC_DIR14WR 83 /* 14 bits of eff. address. */ +#define R_PARISC_DIR14DR 84 /* 14 bits of eff. address. */ +#define R_PARISC_DIR16F 85 /* 16 bits of eff. address. */ +#define R_PARISC_DIR16WF 86 /* 16 bits of eff. address. */ +#define R_PARISC_DIR16DF 87 /* 16 bits of eff. address. */ +#define R_PARISC_GPREL64 88 /* 64 bits of GP-rel. address. */ +#define R_PARISC_GPREL14WR 91 /* GP-rel. address, right 14 bits. */ +#define R_PARISC_GPREL14DR 92 /* GP-rel. address, right 14 bits. */ +#define R_PARISC_GPREL16F 93 /* 16 bits GP-rel. address. */ +#define R_PARISC_GPREL16WF 94 /* 16 bits GP-rel. address. */ +#define R_PARISC_GPREL16DF 95 /* 16 bits GP-rel. address. */ +#define R_PARISC_LTOFF64 96 /* 64 bits LT-rel. address. */ +#define R_PARISC_LTOFF14WR 99 /* LT-rel. address, right 14 bits. */ +#define R_PARISC_LTOFF14DR 100 /* LT-rel. address, right 14 bits. */ +#define R_PARISC_LTOFF16F 101 /* 16 bits LT-rel. address. */ +#define R_PARISC_LTOFF16WF 102 /* 16 bits LT-rel. address. */ +#define R_PARISC_LTOFF16DF 103 /* 16 bits LT-rel. address. */ +#define R_PARISC_SECREL64 104 /* 64 bits section rel. address. */ +#define R_PARISC_SEGREL64 112 /* 64 bits segment rel. address. */ +#define R_PARISC_PLTOFF14WR 115 /* PLT-rel. address, right 14 bits. */ +#define R_PARISC_PLTOFF14DR 116 /* PLT-rel. address, right 14 bits. */ +#define R_PARISC_PLTOFF16F 117 /* 16 bits LT-rel. address. */ +#define R_PARISC_PLTOFF16WF 118 /* 16 bits PLT-rel. address. */ +#define R_PARISC_PLTOFF16DF 119 /* 16 bits PLT-rel. address. */ +#define R_PARISC_LTOFF_FPTR64 120 /* 64 bits LT-rel. function ptr. */ +#define R_PARISC_LTOFF_FPTR14WR 123 /* LT-rel. fct. ptr., right 14 bits. */ +#define R_PARISC_LTOFF_FPTR14DR 124 /* LT-rel. fct. ptr., right 14 bits. */ +#define R_PARISC_LTOFF_FPTR16F 125 /* 16 bits LT-rel. function ptr. */ +#define R_PARISC_LTOFF_FPTR16WF 126 /* 16 bits LT-rel. function ptr. */ +#define R_PARISC_LTOFF_FPTR16DF 127 /* 16 bits LT-rel. function ptr. */ +#define R_PARISC_LORESERVE 128 +#define R_PARISC_COPY 128 /* Copy relocation. */ +#define R_PARISC_IPLT 129 /* Dynamic reloc, imported PLT */ +#define R_PARISC_EPLT 130 /* Dynamic reloc, exported PLT */ +#define R_PARISC_TPREL32 153 /* 32 bits TP-rel. address. */ +#define R_PARISC_TPREL21L 154 /* TP-rel. address, left 21 bits. */ +#define R_PARISC_TPREL14R 158 /* TP-rel. address, right 14 bits. */ +#define R_PARISC_LTOFF_TP21L 162 /* LT-TP-rel. address, left 21 bits. */ +#define R_PARISC_LTOFF_TP14R 166 /* LT-TP-rel. address, right 14 bits.*/ +#define R_PARISC_LTOFF_TP14F 167 /* 14 bits LT-TP-rel. address. */ +#define R_PARISC_TPREL64 216 /* 64 bits TP-rel. address. */ +#define R_PARISC_TPREL14WR 219 /* TP-rel. address, right 14 bits. */ +#define R_PARISC_TPREL14DR 220 /* TP-rel. address, right 14 bits. */ +#define R_PARISC_TPREL16F 221 /* 16 bits TP-rel. address. */ +#define R_PARISC_TPREL16WF 222 /* 16 bits TP-rel. address. */ +#define R_PARISC_TPREL16DF 223 /* 16 bits TP-rel. address. */ +#define R_PARISC_LTOFF_TP64 224 /* 64 bits LT-TP-rel. address. */ +#define R_PARISC_LTOFF_TP14WR 227 /* LT-TP-rel. address, right 14 bits.*/ +#define R_PARISC_LTOFF_TP14DR 228 /* LT-TP-rel. address, right 14 bits.*/ +#define R_PARISC_LTOFF_TP16F 229 /* 16 bits LT-TP-rel. address. */ +#define R_PARISC_LTOFF_TP16WF 230 /* 16 bits LT-TP-rel. address. */ +#define R_PARISC_LTOFF_TP16DF 231 /* 16 bits LT-TP-rel. address. */ +#define R_PARISC_GNU_VTENTRY 232 +#define R_PARISC_GNU_VTINHERIT 233 +#define R_PARISC_TLS_GD21L 234 /* GD 21-bit left. */ +#define R_PARISC_TLS_GD14R 235 /* GD 14-bit right. */ +#define R_PARISC_TLS_GDCALL 236 /* GD call to __t_g_a. */ +#define R_PARISC_TLS_LDM21L 237 /* LD module 21-bit left. */ +#define R_PARISC_TLS_LDM14R 238 /* LD module 14-bit right. */ +#define R_PARISC_TLS_LDMCALL 239 /* LD module call to __t_g_a. */ +#define R_PARISC_TLS_LDO21L 240 /* LD offset 21-bit left. */ +#define R_PARISC_TLS_LDO14R 241 /* LD offset 14-bit right. */ +#define R_PARISC_TLS_DTPMOD32 242 /* DTP module 32-bit. */ +#define R_PARISC_TLS_DTPMOD64 243 /* DTP module 64-bit. */ +#define R_PARISC_TLS_DTPOFF32 244 /* DTP offset 32-bit. */ +#define R_PARISC_TLS_DTPOFF64 245 /* DTP offset 32-bit. */ +#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L +#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R +#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L +#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R +#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32 +#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64 +#define R_PARISC_HIRESERVE 255 + +/* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr. */ + +#define PT_HP_TLS (PT_LOOS + 0x0) +#define PT_HP_CORE_NONE (PT_LOOS + 0x1) +#define PT_HP_CORE_VERSION (PT_LOOS + 0x2) +#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3) +#define PT_HP_CORE_COMM (PT_LOOS + 0x4) +#define PT_HP_CORE_PROC (PT_LOOS + 0x5) +#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6) +#define PT_HP_CORE_STACK (PT_LOOS + 0x7) +#define PT_HP_CORE_SHM (PT_LOOS + 0x8) +#define PT_HP_CORE_MMF (PT_LOOS + 0x9) +#define PT_HP_PARALLEL (PT_LOOS + 0x10) +#define PT_HP_FASTBIND (PT_LOOS + 0x11) +#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12) +#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13) +#define PT_HP_STACK (PT_LOOS + 0x14) + +#define PT_PARISC_ARCHEXT 0x70000000 +#define PT_PARISC_UNWIND 0x70000001 + +/* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr. */ + +#define PF_PARISC_SBP 0x08000000 + +#define PF_HP_PAGE_SIZE 0x00100000 +#define PF_HP_FAR_SHARED 0x00200000 +#define PF_HP_NEAR_SHARED 0x00400000 +#define PF_HP_CODE 0x01000000 +#define PF_HP_MODIFY 0x02000000 +#define PF_HP_LAZYSWAP 0x04000000 +#define PF_HP_SBP 0x08000000 + + +/* Alpha specific definitions. */ + +/* Legal values for e_flags field of Elf64_Ehdr. */ + +#define EF_ALPHA_32BIT 1 /* All addresses must be < 2GB. */ +#define EF_ALPHA_CANRELAX 2 /* Relocations for relaxing exist. */ + +/* Legal values for sh_type field of Elf64_Shdr. */ + +/* These two are primerily concerned with ECOFF debugging info. */ +#define SHT_ALPHA_DEBUG 0x70000001 +#define SHT_ALPHA_REGINFO 0x70000002 + +/* Legal values for sh_flags field of Elf64_Shdr. */ + +#define SHF_ALPHA_GPREL 0x10000000 + +/* Legal values for st_other field of Elf64_Sym. */ +#define STO_ALPHA_NOPV 0x80 /* No PV required. */ +#define STO_ALPHA_STD_GPLOAD 0x88 /* PV only used for initial ldgp. */ + +/* Alpha relocs. */ + +#define R_ALPHA_NONE 0 /* No reloc */ +#define R_ALPHA_REFLONG 1 /* Direct 32 bit */ +#define R_ALPHA_REFQUAD 2 /* Direct 64 bit */ +#define R_ALPHA_GPREL32 3 /* GP relative 32 bit */ +#define R_ALPHA_LITERAL 4 /* GP relative 16 bit w/optimization */ +#define R_ALPHA_LITUSE 5 /* Optimization hint for LITERAL */ +#define R_ALPHA_GPDISP 6 /* Add displacement to GP */ +#define R_ALPHA_BRADDR 7 /* PC+4 relative 23 bit shifted */ +#define R_ALPHA_HINT 8 /* PC+4 relative 16 bit shifted */ +#define R_ALPHA_SREL16 9 /* PC relative 16 bit */ +#define R_ALPHA_SREL32 10 /* PC relative 32 bit */ +#define R_ALPHA_SREL64 11 /* PC relative 64 bit */ +#define R_ALPHA_GPRELHIGH 17 /* GP relative 32 bit, high 16 bits */ +#define R_ALPHA_GPRELLOW 18 /* GP relative 32 bit, low 16 bits */ +#define R_ALPHA_GPREL16 19 /* GP relative 16 bit */ +#define R_ALPHA_COPY 24 /* Copy symbol at runtime */ +#define R_ALPHA_GLOB_DAT 25 /* Create GOT entry */ +#define R_ALPHA_JMP_SLOT 26 /* Create PLT entry */ +#define R_ALPHA_RELATIVE 27 /* Adjust by program base */ +#define R_ALPHA_TLS_GD_HI 28 +#define R_ALPHA_TLSGD 29 +#define R_ALPHA_TLS_LDM 30 +#define R_ALPHA_DTPMOD64 31 +#define R_ALPHA_GOTDTPREL 32 +#define R_ALPHA_DTPREL64 33 +#define R_ALPHA_DTPRELHI 34 +#define R_ALPHA_DTPRELLO 35 +#define R_ALPHA_DTPREL16 36 +#define R_ALPHA_GOTTPREL 37 +#define R_ALPHA_TPREL64 38 +#define R_ALPHA_TPRELHI 39 +#define R_ALPHA_TPRELLO 40 +#define R_ALPHA_TPREL16 41 +/* Keep this the last entry. */ +#define R_ALPHA_NUM 46 + +/* Magic values of the LITUSE relocation addend. */ +#define LITUSE_ALPHA_ADDR 0 +#define LITUSE_ALPHA_BASE 1 +#define LITUSE_ALPHA_BYTOFF 2 +#define LITUSE_ALPHA_JSR 3 +#define LITUSE_ALPHA_TLS_GD 4 +#define LITUSE_ALPHA_TLS_LDM 5 + +/* Legal values for d_tag of Elf64_Dyn. */ +#define DT_ALPHA_PLTRO (DT_LOPROC + 0) +#define DT_ALPHA_NUM 1 + +/* PowerPC specific declarations */ + +/* Values for Elf32/64_Ehdr.e_flags. */ +#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */ + +/* Cygnus local bits below */ +#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag*/ +#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib + flag */ + +/* PowerPC relocations defined by the ABIs */ +#define R_PPC_NONE 0 +#define R_PPC_ADDR32 1 /* 32bit absolute address */ +#define R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored. */ +#define R_PPC_ADDR16 3 /* 16bit absolute address */ +#define R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */ +#define R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */ +#define R_PPC_ADDR16_HA 6 /* adjusted high 16bit */ +#define R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */ +#define R_PPC_ADDR14_BRTAKEN 8 +#define R_PPC_ADDR14_BRNTAKEN 9 +#define R_PPC_REL24 10 /* PC relative 26 bit */ +#define R_PPC_REL14 11 /* PC relative 16 bit */ +#define R_PPC_REL14_BRTAKEN 12 +#define R_PPC_REL14_BRNTAKEN 13 +#define R_PPC_GOT16 14 +#define R_PPC_GOT16_LO 15 +#define R_PPC_GOT16_HI 16 +#define R_PPC_GOT16_HA 17 +#define R_PPC_PLTREL24 18 +#define R_PPC_COPY 19 +#define R_PPC_GLOB_DAT 20 +#define R_PPC_JMP_SLOT 21 +#define R_PPC_RELATIVE 22 +#define R_PPC_LOCAL24PC 23 +#define R_PPC_UADDR32 24 +#define R_PPC_UADDR16 25 +#define R_PPC_REL32 26 +#define R_PPC_PLT32 27 +#define R_PPC_PLTREL32 28 +#define R_PPC_PLT16_LO 29 +#define R_PPC_PLT16_HI 30 +#define R_PPC_PLT16_HA 31 +#define R_PPC_SDAREL16 32 +#define R_PPC_SECTOFF 33 +#define R_PPC_SECTOFF_LO 34 +#define R_PPC_SECTOFF_HI 35 +#define R_PPC_SECTOFF_HA 36 + +/* PowerPC relocations defined for the TLS access ABI. */ +#define R_PPC_TLS 67 /* none (sym+add)@tls */ +#define R_PPC_DTPMOD32 68 /* word32 (sym+add)@dtpmod */ +#define R_PPC_TPREL16 69 /* half16* (sym+add)@tprel */ +#define R_PPC_TPREL16_LO 70 /* half16 (sym+add)@tprel@l */ +#define R_PPC_TPREL16_HI 71 /* half16 (sym+add)@tprel@h */ +#define R_PPC_TPREL16_HA 72 /* half16 (sym+add)@tprel@ha */ +#define R_PPC_TPREL32 73 /* word32 (sym+add)@tprel */ +#define R_PPC_DTPREL16 74 /* half16* (sym+add)@dtprel */ +#define R_PPC_DTPREL16_LO 75 /* half16 (sym+add)@dtprel@l */ +#define R_PPC_DTPREL16_HI 76 /* half16 (sym+add)@dtprel@h */ +#define R_PPC_DTPREL16_HA 77 /* half16 (sym+add)@dtprel@ha */ +#define R_PPC_DTPREL32 78 /* word32 (sym+add)@dtprel */ +#define R_PPC_GOT_TLSGD16 79 /* half16* (sym+add)@got@tlsgd */ +#define R_PPC_GOT_TLSGD16_LO 80 /* half16 (sym+add)@got@tlsgd@l */ +#define R_PPC_GOT_TLSGD16_HI 81 /* half16 (sym+add)@got@tlsgd@h */ +#define R_PPC_GOT_TLSGD16_HA 82 /* half16 (sym+add)@got@tlsgd@ha */ +#define R_PPC_GOT_TLSLD16 83 /* half16* (sym+add)@got@tlsld */ +#define R_PPC_GOT_TLSLD16_LO 84 /* half16 (sym+add)@got@tlsld@l */ +#define R_PPC_GOT_TLSLD16_HI 85 /* half16 (sym+add)@got@tlsld@h */ +#define R_PPC_GOT_TLSLD16_HA 86 /* half16 (sym+add)@got@tlsld@ha */ +#define R_PPC_GOT_TPREL16 87 /* half16* (sym+add)@got@tprel */ +#define R_PPC_GOT_TPREL16_LO 88 /* half16 (sym+add)@got@tprel@l */ +#define R_PPC_GOT_TPREL16_HI 89 /* half16 (sym+add)@got@tprel@h */ +#define R_PPC_GOT_TPREL16_HA 90 /* half16 (sym+add)@got@tprel@ha */ +#define R_PPC_GOT_DTPREL16 91 /* half16* (sym+add)@got@dtprel */ +#define R_PPC_GOT_DTPREL16_LO 92 /* half16* (sym+add)@got@dtprel@l */ +#define R_PPC_GOT_DTPREL16_HI 93 /* half16* (sym+add)@got@dtprel@h */ +#define R_PPC_GOT_DTPREL16_HA 94 /* half16* (sym+add)@got@dtprel@ha */ + +/* Keep this the last entry. */ +#define R_PPC_NUM 95 + +/* The remaining relocs are from the Embedded ELF ABI, and are not + in the SVR4 ELF ABI. */ +#define R_PPC_EMB_NADDR32 101 +#define R_PPC_EMB_NADDR16 102 +#define R_PPC_EMB_NADDR16_LO 103 +#define R_PPC_EMB_NADDR16_HI 104 +#define R_PPC_EMB_NADDR16_HA 105 +#define R_PPC_EMB_SDAI16 106 +#define R_PPC_EMB_SDA2I16 107 +#define R_PPC_EMB_SDA2REL 108 +#define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */ +#define R_PPC_EMB_MRKREF 110 +#define R_PPC_EMB_RELSEC16 111 +#define R_PPC_EMB_RELST_LO 112 +#define R_PPC_EMB_RELST_HI 113 +#define R_PPC_EMB_RELST_HA 114 +#define R_PPC_EMB_BIT_FLD 115 +#define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */ + +/* Diab tool relocations. */ +#define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */ +#define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */ +#define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */ +#define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */ +#define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */ +#define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */ + +/* GNU relocs used in PIC code sequences. */ +#define R_PPC_REL16 249 /* word32 (sym-.) */ +#define R_PPC_REL16_LO 250 /* half16 (sym-.)@l */ +#define R_PPC_REL16_HI 251 /* half16 (sym-.)@h */ +#define R_PPC_REL16_HA 252 /* half16 (sym-.)@ha */ + +/* This is a phony reloc to handle any old fashioned TOC16 references + that may still be in object files. */ +#define R_PPC_TOC16 255 + +/* PowerPC specific values for the Dyn d_tag field. */ +#define DT_PPC_GOT (DT_LOPROC + 0) +#define DT_PPC_NUM 1 + +/* PowerPC64 relocations defined by the ABIs */ +#define R_PPC64_NONE R_PPC_NONE +#define R_PPC64_ADDR32 R_PPC_ADDR32 /* 32bit absolute address */ +#define R_PPC64_ADDR24 R_PPC_ADDR24 /* 26bit address, word aligned */ +#define R_PPC64_ADDR16 R_PPC_ADDR16 /* 16bit absolute address */ +#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO /* lower 16bits of address */ +#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI /* high 16bits of address. */ +#define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA /* adjusted high 16bits. */ +#define R_PPC64_ADDR14 R_PPC_ADDR14 /* 16bit address, word aligned */ +#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN +#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN +#define R_PPC64_REL24 R_PPC_REL24 /* PC-rel. 26 bit, word aligned */ +#define R_PPC64_REL14 R_PPC_REL14 /* PC relative 16 bit */ +#define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN +#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN +#define R_PPC64_GOT16 R_PPC_GOT16 +#define R_PPC64_GOT16_LO R_PPC_GOT16_LO +#define R_PPC64_GOT16_HI R_PPC_GOT16_HI +#define R_PPC64_GOT16_HA R_PPC_GOT16_HA + +#define R_PPC64_COPY R_PPC_COPY +#define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT +#define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT +#define R_PPC64_RELATIVE R_PPC_RELATIVE + +#define R_PPC64_UADDR32 R_PPC_UADDR32 +#define R_PPC64_UADDR16 R_PPC_UADDR16 +#define R_PPC64_REL32 R_PPC_REL32 +#define R_PPC64_PLT32 R_PPC_PLT32 +#define R_PPC64_PLTREL32 R_PPC_PLTREL32 +#define R_PPC64_PLT16_LO R_PPC_PLT16_LO +#define R_PPC64_PLT16_HI R_PPC_PLT16_HI +#define R_PPC64_PLT16_HA R_PPC_PLT16_HA + +#define R_PPC64_SECTOFF R_PPC_SECTOFF +#define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO +#define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI +#define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA +#define R_PPC64_ADDR30 37 /* word30 (S + A - P) >> 2 */ +#define R_PPC64_ADDR64 38 /* doubleword64 S + A */ +#define R_PPC64_ADDR16_HIGHER 39 /* half16 #higher(S + A) */ +#define R_PPC64_ADDR16_HIGHERA 40 /* half16 #highera(S + A) */ +#define R_PPC64_ADDR16_HIGHEST 41 /* half16 #highest(S + A) */ +#define R_PPC64_ADDR16_HIGHESTA 42 /* half16 #highesta(S + A) */ +#define R_PPC64_UADDR64 43 /* doubleword64 S + A */ +#define R_PPC64_REL64 44 /* doubleword64 S + A - P */ +#define R_PPC64_PLT64 45 /* doubleword64 L + A */ +#define R_PPC64_PLTREL64 46 /* doubleword64 L + A - P */ +#define R_PPC64_TOC16 47 /* half16* S + A - .TOC */ +#define R_PPC64_TOC16_LO 48 /* half16 #lo(S + A - .TOC.) */ +#define R_PPC64_TOC16_HI 49 /* half16 #hi(S + A - .TOC.) */ +#define R_PPC64_TOC16_HA 50 /* half16 #ha(S + A - .TOC.) */ +#define R_PPC64_TOC 51 /* doubleword64 .TOC */ +#define R_PPC64_PLTGOT16 52 /* half16* M + A */ +#define R_PPC64_PLTGOT16_LO 53 /* half16 #lo(M + A) */ +#define R_PPC64_PLTGOT16_HI 54 /* half16 #hi(M + A) */ +#define R_PPC64_PLTGOT16_HA 55 /* half16 #ha(M + A) */ + +#define R_PPC64_ADDR16_DS 56 /* half16ds* (S + A) >> 2 */ +#define R_PPC64_ADDR16_LO_DS 57 /* half16ds #lo(S + A) >> 2 */ +#define R_PPC64_GOT16_DS 58 /* half16ds* (G + A) >> 2 */ +#define R_PPC64_GOT16_LO_DS 59 /* half16ds #lo(G + A) >> 2 */ +#define R_PPC64_PLT16_LO_DS 60 /* half16ds #lo(L + A) >> 2 */ +#define R_PPC64_SECTOFF_DS 61 /* half16ds* (R + A) >> 2 */ +#define R_PPC64_SECTOFF_LO_DS 62 /* half16ds #lo(R + A) >> 2 */ +#define R_PPC64_TOC16_DS 63 /* half16ds* (S + A - .TOC.) >> 2 */ +#define R_PPC64_TOC16_LO_DS 64 /* half16ds #lo(S + A - .TOC.) >> 2 */ +#define R_PPC64_PLTGOT16_DS 65 /* half16ds* (M + A) >> 2 */ +#define R_PPC64_PLTGOT16_LO_DS 66 /* half16ds #lo(M + A) >> 2 */ + +/* PowerPC64 relocations defined for the TLS access ABI. */ +#define R_PPC64_TLS 67 /* none (sym+add)@tls */ +#define R_PPC64_DTPMOD64 68 /* doubleword64 (sym+add)@dtpmod */ +#define R_PPC64_TPREL16 69 /* half16* (sym+add)@tprel */ +#define R_PPC64_TPREL16_LO 70 /* half16 (sym+add)@tprel@l */ +#define R_PPC64_TPREL16_HI 71 /* half16 (sym+add)@tprel@h */ +#define R_PPC64_TPREL16_HA 72 /* half16 (sym+add)@tprel@ha */ +#define R_PPC64_TPREL64 73 /* doubleword64 (sym+add)@tprel */ +#define R_PPC64_DTPREL16 74 /* half16* (sym+add)@dtprel */ +#define R_PPC64_DTPREL16_LO 75 /* half16 (sym+add)@dtprel@l */ +#define R_PPC64_DTPREL16_HI 76 /* half16 (sym+add)@dtprel@h */ +#define R_PPC64_DTPREL16_HA 77 /* half16 (sym+add)@dtprel@ha */ +#define R_PPC64_DTPREL64 78 /* doubleword64 (sym+add)@dtprel */ +#define R_PPC64_GOT_TLSGD16 79 /* half16* (sym+add)@got@tlsgd */ +#define R_PPC64_GOT_TLSGD16_LO 80 /* half16 (sym+add)@got@tlsgd@l */ +#define R_PPC64_GOT_TLSGD16_HI 81 /* half16 (sym+add)@got@tlsgd@h */ +#define R_PPC64_GOT_TLSGD16_HA 82 /* half16 (sym+add)@got@tlsgd@ha */ +#define R_PPC64_GOT_TLSLD16 83 /* half16* (sym+add)@got@tlsld */ +#define R_PPC64_GOT_TLSLD16_LO 84 /* half16 (sym+add)@got@tlsld@l */ +#define R_PPC64_GOT_TLSLD16_HI 85 /* half16 (sym+add)@got@tlsld@h */ +#define R_PPC64_GOT_TLSLD16_HA 86 /* half16 (sym+add)@got@tlsld@ha */ +#define R_PPC64_GOT_TPREL16_DS 87 /* half16ds* (sym+add)@got@tprel */ +#define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l */ +#define R_PPC64_GOT_TPREL16_HI 89 /* half16 (sym+add)@got@tprel@h */ +#define R_PPC64_GOT_TPREL16_HA 90 /* half16 (sym+add)@got@tprel@ha */ +#define R_PPC64_GOT_DTPREL16_DS 91 /* half16ds* (sym+add)@got@dtprel */ +#define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l */ +#define R_PPC64_GOT_DTPREL16_HI 93 /* half16 (sym+add)@got@dtprel@h */ +#define R_PPC64_GOT_DTPREL16_HA 94 /* half16 (sym+add)@got@dtprel@ha */ +#define R_PPC64_TPREL16_DS 95 /* half16ds* (sym+add)@tprel */ +#define R_PPC64_TPREL16_LO_DS 96 /* half16ds (sym+add)@tprel@l */ +#define R_PPC64_TPREL16_HIGHER 97 /* half16 (sym+add)@tprel@higher */ +#define R_PPC64_TPREL16_HIGHERA 98 /* half16 (sym+add)@tprel@highera */ +#define R_PPC64_TPREL16_HIGHEST 99 /* half16 (sym+add)@tprel@highest */ +#define R_PPC64_TPREL16_HIGHESTA 100 /* half16 (sym+add)@tprel@highesta */ +#define R_PPC64_DTPREL16_DS 101 /* half16ds* (sym+add)@dtprel */ +#define R_PPC64_DTPREL16_LO_DS 102 /* half16ds (sym+add)@dtprel@l */ +#define R_PPC64_DTPREL16_HIGHER 103 /* half16 (sym+add)@dtprel@higher */ +#define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera */ +#define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest */ +#define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta */ + +/* Keep this the last entry. */ +#define R_PPC64_NUM 107 + +/* PowerPC64 specific values for the Dyn d_tag field. */ +#define DT_PPC64_GLINK (DT_LOPROC + 0) +#define DT_PPC64_OPD (DT_LOPROC + 1) +#define DT_PPC64_OPDSZ (DT_LOPROC + 2) +#define DT_PPC64_NUM 3 + + +/* ARM specific declarations */ + +/* Processor specific flags for the ELF header e_flags field. */ +#define EF_ARM_RELEXEC 0x01 +#define EF_ARM_HASENTRY 0x02 +#define EF_ARM_INTERWORK 0x04 +#define EF_ARM_APCS_26 0x08 +#define EF_ARM_APCS_FLOAT 0x10 +#define EF_ARM_PIC 0x20 +#define EF_ARM_ALIGN8 0x40 /* 8-bit structure alignment is in use */ +#define EF_ARM_NEW_ABI 0x80 +#define EF_ARM_OLD_ABI 0x100 + +/* Other constants defined in the ARM ELF spec. version B-01. */ +/* NB. These conflict with values defined above. */ +#define EF_ARM_SYMSARESORTED 0x04 +#define EF_ARM_DYNSYMSUSESEGIDX 0x08 +#define EF_ARM_MAPSYMSFIRST 0x10 +#define EF_ARM_EABIMASK 0XFF000000 + +#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK) +#define EF_ARM_EABI_UNKNOWN 0x00000000 +#define EF_ARM_EABI_VER1 0x01000000 +#define EF_ARM_EABI_VER2 0x02000000 + +/* Additional symbol types for Thumb */ +#define STT_ARM_TFUNC 0xd + +/* ARM-specific values for sh_flags */ +#define SHF_ARM_ENTRYSECT 0x10000000 /* Section contains an entry point */ +#define SHF_ARM_COMDEF 0x80000000 /* Section may be multiply defined + in the input to a link step */ + +/* ARM-specific program header flags */ +#define PF_ARM_SB 0x10000000 /* Segment contains the location + addressed by the static base */ + +/* Processor specific values for the Phdr p_type field. */ +#define PT_ARM_EXIDX 0x70000001 /* .ARM.exidx segment */ + +/* ARM relocs. */ + +#define R_ARM_NONE 0 /* No reloc */ +#define R_ARM_PC24 1 /* PC relative 26 bit branch */ +#define R_ARM_ABS32 2 /* Direct 32 bit */ +#define R_ARM_REL32 3 /* PC relative 32 bit */ +#define R_ARM_PC13 4 +#define R_ARM_ABS16 5 /* Direct 16 bit */ +#define R_ARM_ABS12 6 /* Direct 12 bit */ +#define R_ARM_THM_ABS5 7 +#define R_ARM_ABS8 8 /* Direct 8 bit */ +#define R_ARM_SBREL32 9 +#define R_ARM_THM_PC22 10 +#define R_ARM_THM_PC8 11 +#define R_ARM_AMP_VCALL9 12 +#define R_ARM_SWI24 13 +#define R_ARM_THM_SWI8 14 +#define R_ARM_XPC25 15 +#define R_ARM_THM_XPC22 16 +#define R_ARM_TLS_DTPMOD32 17 /* ID of module containing symbol */ +#define R_ARM_TLS_DTPOFF32 18 /* Offset in TLS block */ +#define R_ARM_TLS_TPOFF32 19 /* Offset in static TLS block */ +#define R_ARM_COPY 20 /* Copy symbol at runtime */ +#define R_ARM_GLOB_DAT 21 /* Create GOT entry */ +#define R_ARM_JUMP_SLOT 22 /* Create PLT entry */ +#define R_ARM_RELATIVE 23 /* Adjust by program base */ +#define R_ARM_GOTOFF 24 /* 32 bit offset to GOT */ +#define R_ARM_GOTPC 25 /* 32 bit PC relative offset to GOT */ +#define R_ARM_GOT32 26 /* 32 bit GOT entry */ +#define R_ARM_PLT32 27 /* 32 bit PLT address */ +#define R_ARM_ALU_PCREL_7_0 32 +#define R_ARM_ALU_PCREL_15_8 33 +#define R_ARM_ALU_PCREL_23_15 34 +#define R_ARM_LDR_SBREL_11_0 35 +#define R_ARM_ALU_SBREL_19_12 36 +#define R_ARM_ALU_SBREL_27_20 37 +#define R_ARM_GNU_VTENTRY 100 +#define R_ARM_GNU_VTINHERIT 101 +#define R_ARM_THM_PC11 102 /* thumb unconditional branch */ +#define R_ARM_THM_PC9 103 /* thumb conditional branch */ +#define R_ARM_TLS_GD32 104 /* PC-rel 32 bit for global dynamic + thread local data */ +#define R_ARM_TLS_LDM32 105 /* PC-rel 32 bit for local dynamic + thread local data */ +#define R_ARM_TLS_LDO32 106 /* 32 bit offset relative to TLS + block */ +#define R_ARM_TLS_IE32 107 /* PC-rel 32 bit for GOT entry of + static TLS block offset */ +#define R_ARM_TLS_LE32 108 /* 32 bit offset relative to static + TLS block */ +#define R_ARM_RXPC25 249 +#define R_ARM_RSBREL32 250 +#define R_ARM_THM_RPC22 251 +#define R_ARM_RREL32 252 +#define R_ARM_RABS22 253 +#define R_ARM_RPC24 254 +#define R_ARM_RBASE 255 +/* Keep this the last entry. */ +#define R_ARM_NUM 256 + +/* IA-64 specific declarations. */ + +/* Processor specific flags for the Ehdr e_flags field. */ +#define EF_IA_64_MASKOS 0x0000000f /* os-specific flags */ +#define EF_IA_64_ABI64 0x00000010 /* 64-bit ABI */ +#define EF_IA_64_ARCH 0xff000000 /* arch. version mask */ + +/* Processor specific values for the Phdr p_type field. */ +#define PT_IA_64_ARCHEXT (PT_LOPROC + 0) /* arch extension bits */ +#define PT_IA_64_UNWIND (PT_LOPROC + 1) /* ia64 unwind bits */ +#define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12) +#define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13) +#define PT_IA_64_HP_STACK (PT_LOOS + 0x14) + +/* Processor specific flags for the Phdr p_flags field. */ +#define PF_IA_64_NORECOV 0x80000000 /* spec insns w/o recovery */ + +/* Processor specific values for the Shdr sh_type field. */ +#define SHT_IA_64_EXT (SHT_LOPROC + 0) /* extension bits */ +#define SHT_IA_64_UNWIND (SHT_LOPROC + 1) /* unwind bits */ + +/* Processor specific flags for the Shdr sh_flags field. */ +#define SHF_IA_64_SHORT 0x10000000 /* section near gp */ +#define SHF_IA_64_NORECOV 0x20000000 /* spec insns w/o recovery */ + +/* Processor specific values for the Dyn d_tag field. */ +#define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0) +#define DT_IA_64_NUM 1 + +/* IA-64 relocations. */ +#define R_IA64_NONE 0x00 /* none */ +#define R_IA64_IMM14 0x21 /* symbol + addend, add imm14 */ +#define R_IA64_IMM22 0x22 /* symbol + addend, add imm22 */ +#define R_IA64_IMM64 0x23 /* symbol + addend, mov imm64 */ +#define R_IA64_DIR32MSB 0x24 /* symbol + addend, data4 MSB */ +#define R_IA64_DIR32LSB 0x25 /* symbol + addend, data4 LSB */ +#define R_IA64_DIR64MSB 0x26 /* symbol + addend, data8 MSB */ +#define R_IA64_DIR64LSB 0x27 /* symbol + addend, data8 LSB */ +#define R_IA64_GPREL22 0x2a /* @gprel(sym + add), add imm22 */ +#define R_IA64_GPREL64I 0x2b /* @gprel(sym + add), mov imm64 */ +#define R_IA64_GPREL32MSB 0x2c /* @gprel(sym + add), data4 MSB */ +#define R_IA64_GPREL32LSB 0x2d /* @gprel(sym + add), data4 LSB */ +#define R_IA64_GPREL64MSB 0x2e /* @gprel(sym + add), data8 MSB */ +#define R_IA64_GPREL64LSB 0x2f /* @gprel(sym + add), data8 LSB */ +#define R_IA64_LTOFF22 0x32 /* @ltoff(sym + add), add imm22 */ +#define R_IA64_LTOFF64I 0x33 /* @ltoff(sym + add), mov imm64 */ +#define R_IA64_PLTOFF22 0x3a /* @pltoff(sym + add), add imm22 */ +#define R_IA64_PLTOFF64I 0x3b /* @pltoff(sym + add), mov imm64 */ +#define R_IA64_PLTOFF64MSB 0x3e /* @pltoff(sym + add), data8 MSB */ +#define R_IA64_PLTOFF64LSB 0x3f /* @pltoff(sym + add), data8 LSB */ +#define R_IA64_FPTR64I 0x43 /* @fptr(sym + add), mov imm64 */ +#define R_IA64_FPTR32MSB 0x44 /* @fptr(sym + add), data4 MSB */ +#define R_IA64_FPTR32LSB 0x45 /* @fptr(sym + add), data4 LSB */ +#define R_IA64_FPTR64MSB 0x46 /* @fptr(sym + add), data8 MSB */ +#define R_IA64_FPTR64LSB 0x47 /* @fptr(sym + add), data8 LSB */ +#define R_IA64_PCREL60B 0x48 /* @pcrel(sym + add), brl */ +#define R_IA64_PCREL21B 0x49 /* @pcrel(sym + add), ptb, call */ +#define R_IA64_PCREL21M 0x4a /* @pcrel(sym + add), chk.s */ +#define R_IA64_PCREL21F 0x4b /* @pcrel(sym + add), fchkf */ +#define R_IA64_PCREL32MSB 0x4c /* @pcrel(sym + add), data4 MSB */ +#define R_IA64_PCREL32LSB 0x4d /* @pcrel(sym + add), data4 LSB */ +#define R_IA64_PCREL64MSB 0x4e /* @pcrel(sym + add), data8 MSB */ +#define R_IA64_PCREL64LSB 0x4f /* @pcrel(sym + add), data8 LSB */ +#define R_IA64_LTOFF_FPTR22 0x52 /* @ltoff(@fptr(s+a)), imm22 */ +#define R_IA64_LTOFF_FPTR64I 0x53 /* @ltoff(@fptr(s+a)), imm64 */ +#define R_IA64_LTOFF_FPTR32MSB 0x54 /* @ltoff(@fptr(s+a)), data4 MSB */ +#define R_IA64_LTOFF_FPTR32LSB 0x55 /* @ltoff(@fptr(s+a)), data4 LSB */ +#define R_IA64_LTOFF_FPTR64MSB 0x56 /* @ltoff(@fptr(s+a)), data8 MSB */ +#define R_IA64_LTOFF_FPTR64LSB 0x57 /* @ltoff(@fptr(s+a)), data8 LSB */ +#define R_IA64_SEGREL32MSB 0x5c /* @segrel(sym + add), data4 MSB */ +#define R_IA64_SEGREL32LSB 0x5d /* @segrel(sym + add), data4 LSB */ +#define R_IA64_SEGREL64MSB 0x5e /* @segrel(sym + add), data8 MSB */ +#define R_IA64_SEGREL64LSB 0x5f /* @segrel(sym + add), data8 LSB */ +#define R_IA64_SECREL32MSB 0x64 /* @secrel(sym + add), data4 MSB */ +#define R_IA64_SECREL32LSB 0x65 /* @secrel(sym + add), data4 LSB */ +#define R_IA64_SECREL64MSB 0x66 /* @secrel(sym + add), data8 MSB */ +#define R_IA64_SECREL64LSB 0x67 /* @secrel(sym + add), data8 LSB */ +#define R_IA64_REL32MSB 0x6c /* data 4 + REL */ +#define R_IA64_REL32LSB 0x6d /* data 4 + REL */ +#define R_IA64_REL64MSB 0x6e /* data 8 + REL */ +#define R_IA64_REL64LSB 0x6f /* data 8 + REL */ +#define R_IA64_LTV32MSB 0x74 /* symbol + addend, data4 MSB */ +#define R_IA64_LTV32LSB 0x75 /* symbol + addend, data4 LSB */ +#define R_IA64_LTV64MSB 0x76 /* symbol + addend, data8 MSB */ +#define R_IA64_LTV64LSB 0x77 /* symbol + addend, data8 LSB */ +#define R_IA64_PCREL21BI 0x79 /* @pcrel(sym + add), 21bit inst */ +#define R_IA64_PCREL22 0x7a /* @pcrel(sym + add), 22bit inst */ +#define R_IA64_PCREL64I 0x7b /* @pcrel(sym + add), 64bit inst */ +#define R_IA64_IPLTMSB 0x80 /* dynamic reloc, imported PLT, MSB */ +#define R_IA64_IPLTLSB 0x81 /* dynamic reloc, imported PLT, LSB */ +#define R_IA64_COPY 0x84 /* copy relocation */ +#define R_IA64_SUB 0x85 /* Addend and symbol difference */ +#define R_IA64_LTOFF22X 0x86 /* LTOFF22, relaxable. */ +#define R_IA64_LDXMOV 0x87 /* Use of LTOFF22X. */ +#define R_IA64_TPREL14 0x91 /* @tprel(sym + add), imm14 */ +#define R_IA64_TPREL22 0x92 /* @tprel(sym + add), imm22 */ +#define R_IA64_TPREL64I 0x93 /* @tprel(sym + add), imm64 */ +#define R_IA64_TPREL64MSB 0x96 /* @tprel(sym + add), data8 MSB */ +#define R_IA64_TPREL64LSB 0x97 /* @tprel(sym + add), data8 LSB */ +#define R_IA64_LTOFF_TPREL22 0x9a /* @ltoff(@tprel(s+a)), imm2 */ +#define R_IA64_DTPMOD64MSB 0xa6 /* @dtpmod(sym + add), data8 MSB */ +#define R_IA64_DTPMOD64LSB 0xa7 /* @dtpmod(sym + add), data8 LSB */ +#define R_IA64_LTOFF_DTPMOD22 0xaa /* @ltoff(@dtpmod(sym + add)), imm22 */ +#define R_IA64_DTPREL14 0xb1 /* @dtprel(sym + add), imm14 */ +#define R_IA64_DTPREL22 0xb2 /* @dtprel(sym + add), imm22 */ +#define R_IA64_DTPREL64I 0xb3 /* @dtprel(sym + add), imm64 */ +#define R_IA64_DTPREL32MSB 0xb4 /* @dtprel(sym + add), data4 MSB */ +#define R_IA64_DTPREL32LSB 0xb5 /* @dtprel(sym + add), data4 LSB */ +#define R_IA64_DTPREL64MSB 0xb6 /* @dtprel(sym + add), data8 MSB */ +#define R_IA64_DTPREL64LSB 0xb7 /* @dtprel(sym + add), data8 LSB */ +#define R_IA64_LTOFF_DTPREL22 0xba /* @ltoff(@dtprel(s+a)), imm22 */ + +/* SH specific declarations */ + +/* SH relocs. */ +#define R_SH_NONE 0 +#define R_SH_DIR32 1 +#define R_SH_REL32 2 +#define R_SH_DIR8WPN 3 +#define R_SH_IND12W 4 +#define R_SH_DIR8WPL 5 +#define R_SH_DIR8WPZ 6 +#define R_SH_DIR8BP 7 +#define R_SH_DIR8W 8 +#define R_SH_DIR8L 9 +#define R_SH_SWITCH16 25 +#define R_SH_SWITCH32 26 +#define R_SH_USES 27 +#define R_SH_COUNT 28 +#define R_SH_ALIGN 29 +#define R_SH_CODE 30 +#define R_SH_DATA 31 +#define R_SH_LABEL 32 +#define R_SH_SWITCH8 33 +#define R_SH_GNU_VTINHERIT 34 +#define R_SH_GNU_VTENTRY 35 +#define R_SH_TLS_GD_32 144 +#define R_SH_TLS_LD_32 145 +#define R_SH_TLS_LDO_32 146 +#define R_SH_TLS_IE_32 147 +#define R_SH_TLS_LE_32 148 +#define R_SH_TLS_DTPMOD32 149 +#define R_SH_TLS_DTPOFF32 150 +#define R_SH_TLS_TPOFF32 151 +#define R_SH_GOT32 160 +#define R_SH_PLT32 161 +#define R_SH_COPY 162 +#define R_SH_GLOB_DAT 163 +#define R_SH_JMP_SLOT 164 +#define R_SH_RELATIVE 165 +#define R_SH_GOTOFF 166 +#define R_SH_GOTPC 167 +/* Keep this the last entry. */ +#define R_SH_NUM 256 + +/* Additional s390 relocs */ + +#define R_390_NONE 0 /* No reloc. */ +#define R_390_8 1 /* Direct 8 bit. */ +#define R_390_12 2 /* Direct 12 bit. */ +#define R_390_16 3 /* Direct 16 bit. */ +#define R_390_32 4 /* Direct 32 bit. */ +#define R_390_PC32 5 /* PC relative 32 bit. */ +#define R_390_GOT12 6 /* 12 bit GOT offset. */ +#define R_390_GOT32 7 /* 32 bit GOT offset. */ +#define R_390_PLT32 8 /* 32 bit PC relative PLT address. */ +#define R_390_COPY 9 /* Copy symbol at runtime. */ +#define R_390_GLOB_DAT 10 /* Create GOT entry. */ +#define R_390_JMP_SLOT 11 /* Create PLT entry. */ +#define R_390_RELATIVE 12 /* Adjust by program base. */ +#define R_390_GOTOFF32 13 /* 32 bit offset to GOT. */ +#define R_390_GOTPC 14 /* 32 bit PC relative offset to GOT. */ +#define R_390_GOT16 15 /* 16 bit GOT offset. */ +#define R_390_PC16 16 /* PC relative 16 bit. */ +#define R_390_PC16DBL 17 /* PC relative 16 bit shifted by 1. */ +#define R_390_PLT16DBL 18 /* 16 bit PC rel. PLT shifted by 1. */ +#define R_390_PC32DBL 19 /* PC relative 32 bit shifted by 1. */ +#define R_390_PLT32DBL 20 /* 32 bit PC rel. PLT shifted by 1. */ +#define R_390_GOTPCDBL 21 /* 32 bit PC rel. GOT shifted by 1. */ +#define R_390_64 22 /* Direct 64 bit. */ +#define R_390_PC64 23 /* PC relative 64 bit. */ +#define R_390_GOT64 24 /* 64 bit GOT offset. */ +#define R_390_PLT64 25 /* 64 bit PC relative PLT address. */ +#define R_390_GOTENT 26 /* 32 bit PC rel. to GOT entry >> 1. */ +#define R_390_GOTOFF16 27 /* 16 bit offset to GOT. */ +#define R_390_GOTOFF64 28 /* 64 bit offset to GOT. */ +#define R_390_GOTPLT12 29 /* 12 bit offset to jump slot. */ +#define R_390_GOTPLT16 30 /* 16 bit offset to jump slot. */ +#define R_390_GOTPLT32 31 /* 32 bit offset to jump slot. */ +#define R_390_GOTPLT64 32 /* 64 bit offset to jump slot. */ +#define R_390_GOTPLTENT 33 /* 32 bit rel. offset to jump slot. */ +#define R_390_PLTOFF16 34 /* 16 bit offset from GOT to PLT. */ +#define R_390_PLTOFF32 35 /* 32 bit offset from GOT to PLT. */ +#define R_390_PLTOFF64 36 /* 16 bit offset from GOT to PLT. */ +#define R_390_TLS_LOAD 37 /* Tag for load insn in TLS code. */ +#define R_390_TLS_GDCALL 38 /* Tag for function call in general + dynamic TLS code. */ +#define R_390_TLS_LDCALL 39 /* Tag for function call in local + dynamic TLS code. */ +#define R_390_TLS_GD32 40 /* Direct 32 bit for general dynamic + thread local data. */ +#define R_390_TLS_GD64 41 /* Direct 64 bit for general dynamic + thread local data. */ +#define R_390_TLS_GOTIE12 42 /* 12 bit GOT offset for static TLS + block offset. */ +#define R_390_TLS_GOTIE32 43 /* 32 bit GOT offset for static TLS + block offset. */ +#define R_390_TLS_GOTIE64 44 /* 64 bit GOT offset for static TLS + block offset. */ +#define R_390_TLS_LDM32 45 /* Direct 32 bit for local dynamic + thread local data in LE code. */ +#define R_390_TLS_LDM64 46 /* Direct 64 bit for local dynamic + thread local data in LE code. */ +#define R_390_TLS_IE32 47 /* 32 bit address of GOT entry for + negated static TLS block offset. */ +#define R_390_TLS_IE64 48 /* 64 bit address of GOT entry for + negated static TLS block offset. */ +#define R_390_TLS_IEENT 49 /* 32 bit rel. offset to GOT entry for + negated static TLS block offset. */ +#define R_390_TLS_LE32 50 /* 32 bit negated offset relative to + static TLS block. */ +#define R_390_TLS_LE64 51 /* 64 bit negated offset relative to + static TLS block. */ +#define R_390_TLS_LDO32 52 /* 32 bit offset relative to TLS + block. */ +#define R_390_TLS_LDO64 53 /* 64 bit offset relative to TLS + block. */ +#define R_390_TLS_DTPMOD 54 /* ID of module containing symbol. */ +#define R_390_TLS_DTPOFF 55 /* Offset in TLS block. */ +#define R_390_TLS_TPOFF 56 /* Negated offset in static TLS + block. */ +#define R_390_20 57 /* Direct 20 bit. */ +#define R_390_GOT20 58 /* 20 bit GOT offset. */ +#define R_390_GOTPLT20 59 /* 20 bit offset to jump slot. */ +#define R_390_TLS_GOTIE20 60 /* 20 bit GOT offset for static TLS + block offset. */ +/* Keep this the last entry. */ +#define R_390_NUM 61 + + +/* CRIS relocations. */ +#define R_CRIS_NONE 0 +#define R_CRIS_8 1 +#define R_CRIS_16 2 +#define R_CRIS_32 3 +#define R_CRIS_8_PCREL 4 +#define R_CRIS_16_PCREL 5 +#define R_CRIS_32_PCREL 6 +#define R_CRIS_GNU_VTINHERIT 7 +#define R_CRIS_GNU_VTENTRY 8 +#define R_CRIS_COPY 9 +#define R_CRIS_GLOB_DAT 10 +#define R_CRIS_JUMP_SLOT 11 +#define R_CRIS_RELATIVE 12 +#define R_CRIS_16_GOT 13 +#define R_CRIS_32_GOT 14 +#define R_CRIS_16_GOTPLT 15 +#define R_CRIS_32_GOTPLT 16 +#define R_CRIS_32_GOTREL 17 +#define R_CRIS_32_PLT_GOTREL 18 +#define R_CRIS_32_PLT_PCREL 19 + +#define R_CRIS_NUM 20 + + +/* AMD x86-64 relocations. */ +#define R_X86_64_NONE 0 /* No reloc */ +#define R_X86_64_64 1 /* Direct 64 bit */ +#define R_X86_64_PC32 2 /* PC relative 32 bit signed */ +#define R_X86_64_GOT32 3 /* 32 bit GOT entry */ +#define R_X86_64_PLT32 4 /* 32 bit PLT address */ +#define R_X86_64_COPY 5 /* Copy symbol at runtime */ +#define R_X86_64_GLOB_DAT 6 /* Create GOT entry */ +#define R_X86_64_JUMP_SLOT 7 /* Create PLT entry */ +#define R_X86_64_RELATIVE 8 /* Adjust by program base */ +#define R_X86_64_GOTPCREL 9 /* 32 bit signed PC relative + offset to GOT */ +#define R_X86_64_32 10 /* Direct 32 bit zero extended */ +#define R_X86_64_32S 11 /* Direct 32 bit sign extended */ +#define R_X86_64_16 12 /* Direct 16 bit zero extended */ +#define R_X86_64_PC16 13 /* 16 bit sign extended pc relative */ +#define R_X86_64_8 14 /* Direct 8 bit sign extended */ +#define R_X86_64_PC8 15 /* 8 bit sign extended pc relative */ +#define R_X86_64_DTPMOD64 16 /* ID of module containing symbol */ +#define R_X86_64_DTPOFF64 17 /* Offset in module's TLS block */ +#define R_X86_64_TPOFF64 18 /* Offset in initial TLS block */ +#define R_X86_64_TLSGD 19 /* 32 bit signed PC relative offset + to two GOT entries for GD symbol */ +#define R_X86_64_TLSLD 20 /* 32 bit signed PC relative offset + to two GOT entries for LD symbol */ +#define R_X86_64_DTPOFF32 21 /* Offset in TLS block */ +#define R_X86_64_GOTTPOFF 22 /* 32 bit signed PC relative offset + to GOT entry for IE symbol */ +#define R_X86_64_TPOFF32 23 /* Offset in initial TLS block */ +#define R_X86_64_PC64 24 /* PC relative 64 bit */ +#define R_X86_64_GOTOFF64 25 /* 64 bit offset to GOT */ +#define R_X86_64_GOTPC32 26 /* 32 bit signed pc relative + offset to GOT */ +/* 27 .. 33 */ +#define R_X86_64_GOTPC32_TLSDESC 34 /* GOT offset for TLS descriptor. */ +#define R_X86_64_TLSDESC_CALL 35 /* Marker for call through TLS + descriptor. */ +#define R_X86_64_TLSDESC 36 /* TLS descriptor. */ + +#define R_X86_64_NUM 37 + + +/* AM33 relocations. */ +#define R_MN10300_NONE 0 /* No reloc. */ +#define R_MN10300_32 1 /* Direct 32 bit. */ +#define R_MN10300_16 2 /* Direct 16 bit. */ +#define R_MN10300_8 3 /* Direct 8 bit. */ +#define R_MN10300_PCREL32 4 /* PC-relative 32-bit. */ +#define R_MN10300_PCREL16 5 /* PC-relative 16-bit signed. */ +#define R_MN10300_PCREL8 6 /* PC-relative 8-bit signed. */ +#define R_MN10300_GNU_VTINHERIT 7 /* Ancient C++ vtable garbage... */ +#define R_MN10300_GNU_VTENTRY 8 /* ... collection annotation. */ +#define R_MN10300_24 9 /* Direct 24 bit. */ +#define R_MN10300_GOTPC32 10 /* 32-bit PCrel offset to GOT. */ +#define R_MN10300_GOTPC16 11 /* 16-bit PCrel offset to GOT. */ +#define R_MN10300_GOTOFF32 12 /* 32-bit offset from GOT. */ +#define R_MN10300_GOTOFF24 13 /* 24-bit offset from GOT. */ +#define R_MN10300_GOTOFF16 14 /* 16-bit offset from GOT. */ +#define R_MN10300_PLT32 15 /* 32-bit PCrel to PLT entry. */ +#define R_MN10300_PLT16 16 /* 16-bit PCrel to PLT entry. */ +#define R_MN10300_GOT32 17 /* 32-bit offset to GOT entry. */ +#define R_MN10300_GOT24 18 /* 24-bit offset to GOT entry. */ +#define R_MN10300_GOT16 19 /* 16-bit offset to GOT entry. */ +#define R_MN10300_COPY 20 /* Copy symbol at runtime. */ +#define R_MN10300_GLOB_DAT 21 /* Create GOT entry. */ +#define R_MN10300_JMP_SLOT 22 /* Create PLT entry. */ +#define R_MN10300_RELATIVE 23 /* Adjust by program base. */ + +#define R_MN10300_NUM 24 + + +/* M32R relocs. */ +#define R_M32R_NONE 0 /* No reloc. */ +#define R_M32R_16 1 /* Direct 16 bit. */ +#define R_M32R_32 2 /* Direct 32 bit. */ +#define R_M32R_24 3 /* Direct 24 bit. */ +#define R_M32R_10_PCREL 4 /* PC relative 10 bit shifted. */ +#define R_M32R_18_PCREL 5 /* PC relative 18 bit shifted. */ +#define R_M32R_26_PCREL 6 /* PC relative 26 bit shifted. */ +#define R_M32R_HI16_ULO 7 /* High 16 bit with unsigned low. */ +#define R_M32R_HI16_SLO 8 /* High 16 bit with signed low. */ +#define R_M32R_LO16 9 /* Low 16 bit. */ +#define R_M32R_SDA16 10 /* 16 bit offset in SDA. */ +#define R_M32R_GNU_VTINHERIT 11 +#define R_M32R_GNU_VTENTRY 12 +/* M32R relocs use SHT_RELA. */ +#define R_M32R_16_RELA 33 /* Direct 16 bit. */ +#define R_M32R_32_RELA 34 /* Direct 32 bit. */ +#define R_M32R_24_RELA 35 /* Direct 24 bit. */ +#define R_M32R_10_PCREL_RELA 36 /* PC relative 10 bit shifted. */ +#define R_M32R_18_PCREL_RELA 37 /* PC relative 18 bit shifted. */ +#define R_M32R_26_PCREL_RELA 38 /* PC relative 26 bit shifted. */ +#define R_M32R_HI16_ULO_RELA 39 /* High 16 bit with unsigned low */ +#define R_M32R_HI16_SLO_RELA 40 /* High 16 bit with signed low */ +#define R_M32R_LO16_RELA 41 /* Low 16 bit */ +#define R_M32R_SDA16_RELA 42 /* 16 bit offset in SDA */ +#define R_M32R_RELA_GNU_VTINHERIT 43 +#define R_M32R_RELA_GNU_VTENTRY 44 +#define R_M32R_REL32 45 /* PC relative 32 bit. */ + +#define R_M32R_GOT24 48 /* 24 bit GOT entry */ +#define R_M32R_26_PLTREL 49 /* 26 bit PC relative to PLT shifted */ +#define R_M32R_COPY 50 /* Copy symbol at runtime */ +#define R_M32R_GLOB_DAT 51 /* Create GOT entry */ +#define R_M32R_JMP_SLOT 52 /* Create PLT entry */ +#define R_M32R_RELATIVE 53 /* Adjust by program base */ +#define R_M32R_GOTOFF 54 /* 24 bit offset to GOT */ +#define R_M32R_GOTPC24 55 /* 24 bit PC relative offset to GOT */ +#define R_M32R_GOT16_HI_ULO 56 /* High 16 bit GOT entry with unsigned + low */ +#define R_M32R_GOT16_HI_SLO 57 /* High 16 bit GOT entry with signed + low */ +#define R_M32R_GOT16_LO 58 /* Low 16 bit GOT entry */ +#define R_M32R_GOTPC_HI_ULO 59 /* High 16 bit PC relative offset to + GOT with unsigned low */ +#define R_M32R_GOTPC_HI_SLO 60 /* High 16 bit PC relative offset to + GOT with signed low */ +#define R_M32R_GOTPC_LO 61 /* Low 16 bit PC relative offset to + GOT */ +#define R_M32R_GOTOFF_HI_ULO 62 /* High 16 bit offset to GOT + with unsigned low */ +#define R_M32R_GOTOFF_HI_SLO 63 /* High 16 bit offset to GOT + with signed low */ +#define R_M32R_GOTOFF_LO 64 /* Low 16 bit offset to GOT */ +#define R_M32R_NUM 256 /* Keep this the last entry. */ + + +#endif /* elf.h */ diff --git a/sources/patchelf/patchelf.cc b/sources/patchelf/patchelf.cc new file mode 100644 index 0000000..c6f495e --- /dev/null +++ b/sources/patchelf/patchelf.cc @@ -0,0 +1,1239 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "elf.h" + +using namespace std; + + +#ifdef MIPSEL +/* The lemote fuloong 2f kernel defconfig sets a page size of 16KB */ +const unsigned int pageSize = 4096*4; +#else +const unsigned int pageSize = 4096; +#endif + + +static bool debugMode = false; + +static bool forceRPath = false; + +static string fileName; + + +off_t fileSize, maxSize; +unsigned char * contents = 0; + + +#define ElfFileParams class Elf_Ehdr, class Elf_Phdr, class Elf_Shdr, class Elf_Addr, class Elf_Off, class Elf_Dyn, class Elf_Sym +#define ElfFileParamNames Elf_Ehdr, Elf_Phdr, Elf_Shdr, Elf_Addr, Elf_Off, Elf_Dyn, Elf_Sym + + +template +class ElfFile +{ + Elf_Ehdr * hdr; + vector phdrs; + vector shdrs; + + bool littleEndian; + + bool changed; + + bool isExecutable; + + typedef string SectionName; + typedef map ReplacedSections; + + ReplacedSections replacedSections; + + string sectionNames; /* content of the .shstrtab section */ + + /* Align on 4 or 8 bytes boundaries on 32- or 64-bit platforms + respectively. */ + unsigned int sectionAlignment; + + vector sectionsByOldIndex; + +public: + + ElfFile() + { + changed = false; + sectionAlignment = sizeof(Elf_Off); + } + + bool isChanged() + { + return changed; + } + + void parse(); + +private: + + struct CompPhdr + { + ElfFile * elfFile; + bool operator ()(const Elf_Phdr & x, const Elf_Phdr & y) + { + if (x.p_type == PT_PHDR) return true; + if (y.p_type == PT_PHDR) return false; + return elfFile->rdi(x.p_paddr) < elfFile->rdi(y.p_paddr); + } + }; + + friend struct CompPhdr; + + void sortPhdrs(); + + struct CompShdr + { + ElfFile * elfFile; + bool operator ()(const Elf_Shdr & x, const Elf_Shdr & y) + { + return elfFile->rdi(x.sh_offset) < elfFile->rdi(y.sh_offset); + } + }; + + friend struct CompShdr; + + void sortShdrs(); + + void shiftFile(unsigned int extraPages, Elf_Addr startPage); + + string getSectionName(const Elf_Shdr & shdr); + + Elf_Shdr & findSection(const SectionName & sectionName); + + Elf_Shdr * findSection2(const SectionName & sectionName); + + unsigned int findSection3(const SectionName & sectionName); + + string & replaceSection(const SectionName & sectionName, + unsigned int size); + + void writeReplacedSections(Elf_Off & curOff, + Elf_Addr startAddr, Elf_Off startOffset); + + void rewriteHeaders(Elf_Addr phdrAddress); + + void rewriteSectionsLibrary(); + + void rewriteSectionsExecutable(); + +public: + + void rewriteSections(); + + string getInterpreter(); + + void setInterpreter(const string & newInterpreter); + + typedef enum { rpPrint, rpShrink, rpSet } RPathOp; + + void modifyRPath(RPathOp op, string newRPath); + + void removeNeeded(set libs); + +private: + + /* Convert an integer in big or little endian representation (as + specified by the ELF header) to this platform's integer + representation. */ + template + I rdi(I i); + + /* Convert back to the ELF representation. */ + template + I wri(I & t, unsigned long long i) + { + t = rdi((I) i); + return i; + } +}; + + +/* !!! G++ creates broken code if this function is inlined, don't know + why... */ +template +template +I ElfFile::rdi(I i) +{ + I r = 0; + if (littleEndian) { + for (unsigned int n = 0; n < sizeof(I); ++n) { + r |= ((I) *(((unsigned char *) &i) + n)) << (n * 8); + } + } else { + for (unsigned int n = 0; n < sizeof(I); ++n) { + r |= ((I) *(((unsigned char *) &i) + n)) << ((sizeof(I) - n - 1) * 8); + } + } + return r; +} + + +/* Ugly: used to erase DT_RUNPATH when using --force-rpath. */ +#define DT_IGNORE 0x00726e67 + + +static void debug(const char * format, ...) +{ + if (debugMode) { + va_list ap; + va_start(ap, format); + vfprintf(stderr, format, ap); + va_end(ap); + } +} + + +static void error(string msg) +{ + if (errno) perror(msg.c_str()); else fprintf(stderr, "%s\n", msg.c_str()); + exit(1); +} + + +static void growFile(off_t newSize) +{ + if (newSize > maxSize) error("maximum file size exceeded"); + if (newSize <= fileSize) return; + if (newSize > fileSize) + memset(contents + fileSize, 0, newSize - fileSize); + fileSize = newSize; +} + + +static void readFile(string fileName, mode_t * fileMode) +{ + struct stat st; + if (stat(fileName.c_str(), &st) != 0) error("stat"); + fileSize = st.st_size; + *fileMode = st.st_mode; + maxSize = fileSize + 8 * 1024 * 1024; + + contents = (unsigned char *) malloc(fileSize + maxSize); + if (!contents) abort(); + + int fd = open(fileName.c_str(), O_RDONLY); + if (fd == -1) error("open"); + + if (read(fd, contents, fileSize) != fileSize) error("read"); + + close(fd); +} + + +static void checkPointer(void * p, unsigned int size) +{ + unsigned char * q = (unsigned char *) p; + assert(q >= contents && q + size <= contents + fileSize); +} + + +template +void ElfFile::parse() +{ + isExecutable = false; + + /* Check the ELF header for basic validity. */ + if (fileSize < (off_t) sizeof(Elf_Ehdr)) error("missing ELF header"); + + hdr = (Elf_Ehdr *) contents; + + if (memcmp(hdr->e_ident, ELFMAG, SELFMAG) != 0) + error("not an ELF executable"); + + littleEndian = contents[EI_DATA] == ELFDATA2LSB; + + if (rdi(hdr->e_type) != ET_EXEC && rdi(hdr->e_type) != ET_DYN) + error("wrong ELF type"); + + if ((off_t) (rdi(hdr->e_phoff) + rdi(hdr->e_phnum) * rdi(hdr->e_phentsize)) > fileSize) + error("missing program headers"); + + if ((off_t) (rdi(hdr->e_shoff) + rdi(hdr->e_shnum) * rdi(hdr->e_shentsize)) > fileSize) + error("missing section headers"); + + if (rdi(hdr->e_phentsize) != sizeof(Elf_Phdr)) + error("program headers have wrong size"); + + /* Copy the program and section headers. */ + for (int i = 0; i < rdi(hdr->e_phnum); ++i) { + phdrs.push_back(* ((Elf_Phdr *) (contents + rdi(hdr->e_phoff)) + i)); + if (rdi(phdrs[i].p_type) == PT_INTERP) isExecutable = true; + } + + for (int i = 0; i < rdi(hdr->e_shnum); ++i) + shdrs.push_back(* ((Elf_Shdr *) (contents + rdi(hdr->e_shoff)) + i)); + + /* Get the section header string table section (".shstrtab"). Its + index in the section header table is given by e_shstrndx field + of the ELF header. */ + unsigned int shstrtabIndex = rdi(hdr->e_shstrndx); + assert(shstrtabIndex < shdrs.size()); + unsigned int shstrtabSize = rdi(shdrs[shstrtabIndex].sh_size); + char * shstrtab = (char * ) contents + rdi(shdrs[shstrtabIndex].sh_offset); + checkPointer(shstrtab, shstrtabSize); + + assert(shstrtabSize > 0); + assert(shstrtab[shstrtabSize - 1] == 0); + + sectionNames = string(shstrtab, shstrtabSize); + + sectionsByOldIndex.resize(hdr->e_shnum); + for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) + sectionsByOldIndex[i] = getSectionName(shdrs[i]); +} + + +template +void ElfFile::sortPhdrs() +{ + /* Sort the segments by offset. */ + CompPhdr comp; + comp.elfFile = this; + sort(phdrs.begin(), phdrs.end(), comp); +} + + +template +void ElfFile::sortShdrs() +{ + /* Translate sh_link mappings to section names, since sorting the + sections will invalidate the sh_link fields. */ + map linkage; + for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) + if (rdi(shdrs[i].sh_link) != 0) + linkage[getSectionName(shdrs[i])] = getSectionName(shdrs[rdi(shdrs[i].sh_link)]); + + /* Idem for sh_info on certain sections. */ + map info; + for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) + if (rdi(shdrs[i].sh_info) != 0 && + (rdi(shdrs[i].sh_type) == SHT_REL || rdi(shdrs[i].sh_type) == SHT_RELA)) + info[getSectionName(shdrs[i])] = getSectionName(shdrs[rdi(shdrs[i].sh_info)]); + + /* Idem for the index of the .shstrtab section in the ELF header. */ + SectionName shstrtabName = getSectionName(shdrs[rdi(hdr->e_shstrndx)]); + + /* Sort the sections by offset. */ + CompShdr comp; + comp.elfFile = this; + sort(shdrs.begin(), shdrs.end(), comp); + + /* Restore the sh_link mappings. */ + for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) + if (rdi(shdrs[i].sh_link) != 0) + wri(shdrs[i].sh_link, + findSection3(linkage[getSectionName(shdrs[i])])); + + /* And the st_info mappings. */ + for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) + if (rdi(shdrs[i].sh_info) != 0 && + (rdi(shdrs[i].sh_type) == SHT_REL || rdi(shdrs[i].sh_type) == SHT_RELA)) + wri(shdrs[i].sh_info, + findSection3(info[getSectionName(shdrs[i])])); + + /* And the .shstrtab index. */ + wri(hdr->e_shstrndx, findSection3(shstrtabName)); +} + + +static void writeFile(string fileName, mode_t fileMode) +{ + string fileName2 = fileName + "_patchelf_tmp"; + + int fd = open(fileName2.c_str(), + O_CREAT | O_TRUNC | O_WRONLY, 0700); + if (fd == -1) error("open"); + + if (write(fd, contents, fileSize) != fileSize) error("write"); + + if (close(fd) != 0) error("close"); + + if (chmod(fileName2.c_str(), fileMode) != 0) error("chmod"); + + if (rename(fileName2.c_str(), fileName.c_str()) != 0) error("rename"); +} + + +static unsigned int roundUp(unsigned int n, unsigned int m) +{ + return ((n - 1) / m + 1) * m; +} + + +template +void ElfFile::shiftFile(unsigned int extraPages, Elf_Addr startPage) +{ + /* Move the entire contents of the file `extraPages' pages + further. */ + unsigned int oldSize = fileSize; + unsigned int shift = extraPages * pageSize; + growFile(fileSize + extraPages * pageSize); + memmove(contents + extraPages * pageSize, contents, oldSize); + memset(contents + sizeof(Elf_Ehdr), 0, shift - sizeof(Elf_Ehdr)); + + /* Adjust the ELF header. */ + wri(hdr->e_phoff, sizeof(Elf_Ehdr)); + wri(hdr->e_shoff, rdi(hdr->e_shoff) + shift); + + /* Update the offsets in the section headers. */ + for (int i = 1; i < rdi(hdr->e_shnum); ++i) + wri(shdrs[i].sh_offset, rdi(shdrs[i].sh_offset) + shift); + + /* Update the offsets in the program headers. */ + for (int i = 0; i < rdi(hdr->e_phnum); ++i) { + wri(phdrs[i].p_offset, rdi(phdrs[i].p_offset) + shift); + if (rdi(phdrs[i].p_align) != 0 && + (rdi(phdrs[i].p_vaddr) - rdi(phdrs[i].p_offset)) % rdi(phdrs[i].p_align) != 0) { + debug("changing alignment of program header %d from %d to %d\n", i, + rdi(phdrs[i].p_align), pageSize); + wri(phdrs[i].p_align, pageSize); + } + } + + /* Add a segment that maps the new program/section headers and + PT_INTERP segment into memory. Otherwise glibc will choke. */ + phdrs.resize(rdi(hdr->e_phnum) + 1); + wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1); + Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1]; + wri(phdr.p_type, PT_LOAD); + wri(phdr.p_offset, 0); + wri(phdr.p_vaddr, wri(phdr.p_paddr, startPage)); + wri(phdr.p_filesz, wri(phdr.p_memsz, shift)); + wri(phdr.p_flags, PF_R | PF_W); + wri(phdr.p_align, pageSize); +} + + +template +string ElfFile::getSectionName(const Elf_Shdr & shdr) +{ + return string(sectionNames.c_str() + rdi(shdr.sh_name)); +} + + +template +Elf_Shdr & ElfFile::findSection(const SectionName & sectionName) +{ + Elf_Shdr * shdr = findSection2(sectionName); + if (!shdr) + error("cannot find section " + sectionName); + return *shdr; +} + + +template +Elf_Shdr * ElfFile::findSection2(const SectionName & sectionName) +{ + unsigned int i = findSection3(sectionName); + return i ? &shdrs[i] : 0; +} + + +template +unsigned int ElfFile::findSection3(const SectionName & sectionName) +{ + for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) + if (getSectionName(shdrs[i]) == sectionName) return i; + return 0; +} + + +template +string & ElfFile::replaceSection(const SectionName & sectionName, + unsigned int size) +{ + ReplacedSections::iterator i = replacedSections.find(sectionName); + string s; + + if (i != replacedSections.end()) { + s = string(i->second); + } else { + Elf_Shdr & shdr = findSection(sectionName); + s = string((char *) contents + rdi(shdr.sh_offset), rdi(shdr.sh_size)); + } + + s.resize(size); + replacedSections[sectionName] = s; + + return replacedSections[sectionName]; +} + + +template +void ElfFile::writeReplacedSections(Elf_Off & curOff, + Elf_Addr startAddr, Elf_Off startOffset) +{ + /* Overwrite the old section contents with 'X's. Do this + *before* writing the new section contents (below) to prevent + clobbering previously written new section contents. */ + for (ReplacedSections::iterator i = replacedSections.begin(); + i != replacedSections.end(); ++i) + { + string sectionName = i->first; + Elf_Shdr & shdr = findSection(sectionName); + memset(contents + rdi(shdr.sh_offset), 'X', rdi(shdr.sh_size)); + } + + for (ReplacedSections::iterator i = replacedSections.begin(); + i != replacedSections.end(); ++i) + { + string sectionName = i->first; + Elf_Shdr & shdr = findSection(sectionName); + debug("rewriting section `%s' from offset 0x%x (size %d) to offset 0x%x (size %d)\n", + sectionName.c_str(), rdi(shdr.sh_offset), rdi(shdr.sh_size), curOff, i->second.size()); + + memcpy(contents + curOff, (unsigned char *) i->second.c_str(), + i->second.size()); + + /* Update the section header for this section. */ + wri(shdr.sh_offset, curOff); + wri(shdr.sh_addr, startAddr + (curOff - startOffset)); + wri(shdr.sh_size, i->second.size()); + wri(shdr.sh_addralign, sectionAlignment); + + /* If this is the .interp section, then the PT_INTERP segment + must be sync'ed with it. */ + if (sectionName == ".interp") { + for (unsigned int j = 0; j < phdrs.size(); ++j) + if (rdi(phdrs[j].p_type) == PT_INTERP) { + phdrs[j].p_offset = shdr.sh_offset; + phdrs[j].p_vaddr = phdrs[j].p_paddr = shdr.sh_addr; + phdrs[j].p_filesz = phdrs[j].p_memsz = shdr.sh_size; + } + } + + /* If this is the .dynamic section, then the PT_DYNAMIC segment + must be sync'ed with it. */ + if (sectionName == ".dynamic") { + for (unsigned int j = 0; j < phdrs.size(); ++j) + if (rdi(phdrs[j].p_type) == PT_DYNAMIC) { + phdrs[j].p_offset = shdr.sh_offset; + phdrs[j].p_vaddr = phdrs[j].p_paddr = shdr.sh_addr; + phdrs[j].p_filesz = phdrs[j].p_memsz = shdr.sh_size; + } + } + + curOff += roundUp(i->second.size(), sectionAlignment); + } + + replacedSections.clear(); +} + + +template +void ElfFile::rewriteSectionsLibrary() +{ + /* For dynamic libraries, we just place the replacement sections + at the end of the file. They're mapped into memory by a + PT_LOAD segment located directly after the last virtual address + page of other segments. */ + Elf_Addr startPage = 0; + for (unsigned int i = 0; i < phdrs.size(); ++i) { + Elf_Addr thisPage = roundUp(rdi(phdrs[i].p_vaddr) + rdi(phdrs[i].p_memsz), pageSize); + if (thisPage > startPage) startPage = thisPage; + } + + debug("last page is 0x%llx\n", (unsigned long long) startPage); + + + /* Compute the total space needed for the replaced sections and + the program headers. */ + off_t neededSpace = (phdrs.size() + 1) * sizeof(Elf_Phdr); + for (ReplacedSections::iterator i = replacedSections.begin(); + i != replacedSections.end(); ++i) + neededSpace += roundUp(i->second.size(), sectionAlignment); + debug("needed space is %d\n", neededSpace); + + + size_t startOffset = roundUp(fileSize, pageSize); + + growFile(startOffset + neededSpace); + + + /* Even though this file is of type ET_DYN, it could actually be + an executable. For instance, Gold produces executables marked + ET_DYN. In that case we can still hit the kernel bug that + necessitated rewriteSectionsExecutable(). However, such + executables also tend to start at virtual address 0, so + rewriteSectionsExecutable() won't work because it doesn't have + any virtual address space to grow downwards into. As a + workaround, make sure that the virtual address of our new + PT_LOAD segment relative to the first PT_LOAD segment is equal + to its offset; otherwise we hit the kernel bug. This may + require creating a hole in the executable. The bigger the size + of the uninitialised data segment, the bigger the hole. */ + if (isExecutable) { + if (startOffset >= startPage) { + debug("shifting new PT_LOAD segment by %d bytes to work around a Linux kernel bug\n", startOffset - startPage); + } else { + size_t hole = startPage - startOffset; + /* Print a warning, because the hole could be very big. */ + fprintf(stderr, "warning: working around a Linux kernel bug by creating a hole of %zu bytes in ‘%s’\n", hole, fileName.c_str()); + assert(hole % pageSize == 0); + /* !!! We could create an actual hole in the file here, + but it's probably not worth the effort. */ + growFile(fileSize + hole); + startOffset += hole; + } + startPage = startOffset; + } + + + /* Add a segment that maps the replaced sections and program + headers into memory. */ + phdrs.resize(rdi(hdr->e_phnum) + 1); + wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1); + Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1]; + wri(phdr.p_type, PT_LOAD); + wri(phdr.p_offset, startOffset); + wri(phdr.p_vaddr, wri(phdr.p_paddr, startPage)); + wri(phdr.p_filesz, wri(phdr.p_memsz, neededSpace)); + wri(phdr.p_flags, PF_R | PF_W); + wri(phdr.p_align, pageSize); + + + /* Write out the replaced sections. */ + Elf_Off curOff = startOffset + phdrs.size() * sizeof(Elf_Phdr); + writeReplacedSections(curOff, startPage, startOffset); + assert((off_t) curOff == startOffset + neededSpace); + + + /* Move the program header to the start of the new area. */ + wri(hdr->e_phoff, startOffset); + + rewriteHeaders(startPage); +} + + +template +void ElfFile::rewriteSectionsExecutable() +{ + /* Sort the sections by offset, otherwise we won't correctly find + all the sections before the last replaced section. */ + sortShdrs(); + + + /* What is the index of the last replaced section? */ + unsigned int lastReplaced = 0; + for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) { + string sectionName = getSectionName(shdrs[i]); + if (replacedSections.find(sectionName) != replacedSections.end()) { + debug("using replaced section `%s'\n", sectionName.c_str()); + lastReplaced = i; + } + } + + assert(lastReplaced != 0); + + debug("last replaced is %d\n", lastReplaced); + + /* Try to replace all sections before that, as far as possible. + Stop when we reach an irreplacable section (such as one of type + SHT_PROGBITS). These cannot be moved in virtual address space + since that would invalidate absolute references to them. */ + assert(lastReplaced + 1 < shdrs.size()); /* !!! I'm lazy. */ + size_t startOffset = rdi(shdrs[lastReplaced + 1].sh_offset); + Elf_Addr startAddr = rdi(shdrs[lastReplaced + 1].sh_addr); + string prevSection; + for (unsigned int i = 1; i <= lastReplaced; ++i) { + Elf_Shdr & shdr(shdrs[i]); + string sectionName = getSectionName(shdr); + debug("looking at section `%s'\n", sectionName.c_str()); + /* !!! Why do we stop after a .dynstr section? I can't + remember! */ + if ((rdi(shdr.sh_type) == SHT_PROGBITS && sectionName != ".interp") + || prevSection == ".dynstr") + { + startOffset = rdi(shdr.sh_offset); + startAddr = rdi(shdr.sh_addr); + lastReplaced = i - 1; + break; + } else { + if (replacedSections.find(sectionName) == replacedSections.end()) { + debug("replacing section `%s' which is in the way\n", sectionName.c_str()); + replaceSection(sectionName, rdi(shdr.sh_size)); + } + } + prevSection = sectionName; + } + + debug("first reserved offset/addr is 0x%x/0x%llx\n", + startOffset, (unsigned long long) startAddr); + + assert(startAddr % pageSize == startOffset % pageSize); + Elf_Addr firstPage = startAddr - startOffset; + debug("first page is 0x%llx\n", (unsigned long long) firstPage); + + /* Right now we assume that the section headers are somewhere near + the end, which appears to be the case most of the time. + Therefore they're not accidentally overwritten by the replaced + sections. !!! Fix this. */ + assert((off_t) rdi(hdr->e_shoff) >= startOffset); + + + /* Compute the total space needed for the replaced sections, the + ELF header, and the program headers. */ + size_t neededSpace = sizeof(Elf_Ehdr) + phdrs.size() * sizeof(Elf_Phdr); + for (ReplacedSections::iterator i = replacedSections.begin(); + i != replacedSections.end(); ++i) + neededSpace += roundUp(i->second.size(), sectionAlignment); + + debug("needed space is %d\n", neededSpace); + + /* If we need more space at the start of the file, then grow the + file by the minimum number of pages and adjust internal + offsets. */ + if (neededSpace > startOffset) { + + /* We also need an additional program header, so adjust for that. */ + neededSpace += sizeof(Elf_Phdr); + debug("needed space is %d\n", neededSpace); + + unsigned int neededPages = roundUp(neededSpace - startOffset, pageSize) / pageSize; + debug("needed pages is %d\n", neededPages); + if (neededPages * pageSize > firstPage) + error("virtual address space underrun!"); + + firstPage -= neededPages * pageSize; + startOffset += neededPages * pageSize; + + shiftFile(neededPages, firstPage); + } + + + /* Clear out the free space. */ + Elf_Off curOff = sizeof(Elf_Ehdr) + phdrs.size() * sizeof(Elf_Phdr); + debug("clearing first %d bytes\n", startOffset - curOff); + memset(contents + curOff, 0, startOffset - curOff); + + + /* Write out the replaced sections. */ + writeReplacedSections(curOff, firstPage, 0); + assert((off_t) curOff == neededSpace); + + + rewriteHeaders(firstPage + rdi(hdr->e_phoff)); +} + + +template +void ElfFile::rewriteSections() +{ + if (replacedSections.empty()) return; + + for (ReplacedSections::iterator i = replacedSections.begin(); + i != replacedSections.end(); ++i) + debug("replacing section `%s' with size %d\n", + i->first.c_str(), i->second.size()); + + if (rdi(hdr->e_type) == ET_DYN) { + debug("this is a dynamic library\n"); + rewriteSectionsLibrary(); + } else if (rdi(hdr->e_type) == ET_EXEC) { + debug("this is an executable\n"); + rewriteSectionsExecutable(); + } else error("unknown ELF type"); +} + + +template +void ElfFile::rewriteHeaders(Elf_Addr phdrAddress) +{ + /* Rewrite the program header table. */ + + /* If there is a segment for the program header table, update it. + (According to the ELF spec, it must be the first entry.) */ + if (rdi(phdrs[0].p_type) == PT_PHDR) { + phdrs[0].p_offset = hdr->e_phoff; + wri(phdrs[0].p_vaddr, wri(phdrs[0].p_paddr, phdrAddress)); + wri(phdrs[0].p_filesz, wri(phdrs[0].p_memsz, phdrs.size() * sizeof(Elf_Phdr))); + } + + sortPhdrs(); + + for (unsigned int i = 0; i < phdrs.size(); ++i) + * ((Elf_Phdr *) (contents + rdi(hdr->e_phoff)) + i) = phdrs[i]; + + + /* Rewrite the section header table. For neatness, keep the + sections sorted. */ + assert(rdi(hdr->e_shnum) == shdrs.size()); + sortShdrs(); + for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) + * ((Elf_Shdr *) (contents + rdi(hdr->e_shoff)) + i) = shdrs[i]; + + + /* Update all those nasty virtual addresses in the .dynamic + section. Note that not all executables have .dynamic sections + (e.g., those produced by klibc's klcc). */ + Elf_Shdr * shdrDynamic = findSection2(".dynamic"); + if (shdrDynamic) { + Elf_Dyn * dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic->sh_offset)); + unsigned int d_tag; + for ( ; (d_tag = rdi(dyn->d_tag)) != DT_NULL; dyn++) + if (d_tag == DT_STRTAB) + dyn->d_un.d_ptr = findSection(".dynstr").sh_addr; + else if (d_tag == DT_STRSZ) + dyn->d_un.d_val = findSection(".dynstr").sh_size; + else if (d_tag == DT_SYMTAB) + dyn->d_un.d_ptr = findSection(".dynsym").sh_addr; + else if (d_tag == DT_HASH) + dyn->d_un.d_ptr = findSection(".hash").sh_addr; + else if (d_tag == DT_GNU_HASH) + dyn->d_un.d_ptr = findSection(".gnu.hash").sh_addr; + else if (d_tag == DT_JMPREL) { + Elf_Shdr * shdr = findSection2(".rel.plt"); + if (!shdr) shdr = findSection2(".rela.plt"); /* 64-bit Linux, x86-64 */ + if (!shdr) shdr = findSection2(".rela.IA_64.pltoff"); /* 64-bit Linux, IA-64 */ + if (!shdr) error("cannot find section corresponding to DT_JMPREL"); + dyn->d_un.d_ptr = shdr->sh_addr; + } + else if (d_tag == DT_REL) { /* !!! hack! */ + Elf_Shdr * shdr = findSection2(".rel.dyn"); + /* no idea if this makes sense, but it was needed for some + program */ + if (!shdr) shdr = findSection2(".rel.got"); + if (!shdr) error("cannot find .rel.dyn or .rel.got"); + dyn->d_un.d_ptr = shdr->sh_addr; + } + else if (d_tag == DT_RELA) + dyn->d_un.d_ptr = findSection(".rela.dyn").sh_addr; /* PPC Linux */ + else if (d_tag == DT_VERNEED) + dyn->d_un.d_ptr = findSection(".gnu.version_r").sh_addr; + else if (d_tag == DT_VERSYM) + dyn->d_un.d_ptr = findSection(".gnu.version").sh_addr; + } + + + /* Rewrite the .dynsym section. It contains the indices of the + sections in which symbols appear, so these need to be + remapped. */ + for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) { + if (rdi(shdrs[i].sh_type) != SHT_SYMTAB && rdi(shdrs[i].sh_type) != SHT_DYNSYM) continue; + debug("rewriting symbol table section %d\n", i); + for (size_t entry = 0; (entry + 1) * sizeof(Elf_Sym) <= rdi(shdrs[i].sh_size); entry++) { + Elf_Sym * sym = (Elf_Sym *) (contents + rdi(shdrs[i].sh_offset) + entry * sizeof(Elf_Sym)); + if (sym->st_shndx != SHN_UNDEF && sym->st_shndx < SHN_LORESERVE) { + string section = sectionsByOldIndex[rdi(sym->st_shndx)]; + assert(!section.empty()); + unsigned int newIndex = findSection3(section); // inefficient + //debug("rewriting symbol %d: index = %d (%s) -> %d\n", entry, rdi(sym->st_shndx), section.c_str(), newIndex); + wri(sym->st_shndx, newIndex); + } + } + } +} + + + +static void setSubstr(string & s, unsigned int pos, const string & t) +{ + assert(pos + t.size() <= s.size()); + copy(t.begin(), t.end(), s.begin() + pos); +} + + +template +string ElfFile::getInterpreter() +{ + Elf_Shdr & shdr = findSection(".interp"); + return string((char *) contents + rdi(shdr.sh_offset), rdi(shdr.sh_size)); +} + + +template +void ElfFile::setInterpreter(const string & newInterpreter) +{ + string & section = replaceSection(".interp", newInterpreter.size() + 1); + setSubstr(section, 0, newInterpreter + '\0'); + changed = true; +} + + +static void concatToRPath(string & rpath, const string & path) +{ + if (!rpath.empty()) rpath += ":"; + rpath += path; +} + + +template +void ElfFile::modifyRPath(RPathOp op, string newRPath) +{ + Elf_Shdr & shdrDynamic = findSection(".dynamic"); + + /* !!! We assume that the virtual address in the DT_STRTAB entry + of the dynamic section corresponds to the .dynstr section. */ + Elf_Shdr & shdrDynStr = findSection(".dynstr"); + char * strTab = (char *) contents + rdi(shdrDynStr.sh_offset); + + /* Find the DT_STRTAB entry in the dynamic section. */ + Elf_Dyn * dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset)); + Elf_Addr strTabAddr = 0; + for ( ; rdi(dyn->d_tag) != DT_NULL; dyn++) + if (rdi(dyn->d_tag) == DT_STRTAB) strTabAddr = rdi(dyn->d_un.d_ptr); + if (!strTabAddr) error("strange: no string table"); + + assert(strTabAddr == rdi(shdrDynStr.sh_addr)); + + + /* Walk through the dynamic section, look for the RPATH/RUNPATH + entry. + + According to the ld.so docs, DT_RPATH is obsolete, we should + use DT_RUNPATH. DT_RUNPATH has two advantages: it can be + overriden by LD_LIBRARY_PATH, and it's scoped (the DT_RUNPATH + for an executable or library doesn't affect the search path for + libraries used by it). DT_RPATH is ignored if DT_RUNPATH is + present. The binutils `ld' still generates only DT_RPATH, + unless you use its `--enable-new-dtag' option, in which case it + generates a DT_RPATH and DT_RUNPATH pointing at the same + string. */ + static vector neededLibs; + dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset)); + Elf_Dyn * dynRPath = 0, * dynRunPath = 0; + char * rpath = 0; + for ( ; rdi(dyn->d_tag) != DT_NULL; dyn++) { + if (rdi(dyn->d_tag) == DT_RPATH) { + dynRPath = dyn; + /* Only use DT_RPATH if there is no DT_RUNPATH. */ + if (!dynRunPath) + rpath = strTab + rdi(dyn->d_un.d_val); + } + else if (rdi(dyn->d_tag) == DT_RUNPATH) { + dynRunPath = dyn; + rpath = strTab + rdi(dyn->d_un.d_val); + } + else if (rdi(dyn->d_tag) == DT_NEEDED) + neededLibs.push_back(string(strTab + rdi(dyn->d_un.d_val))); + } + + if (op == rpPrint) { + printf("%s\n", rpath ? rpath : ""); + return; + } + + if (op == rpShrink && !rpath) { + debug("no RPATH to shrink\n"); + return; + } + + + /* For each directory in the RPATH, check if it contains any + needed library. */ + if (op == rpShrink) { + static vector neededLibFound(neededLibs.size(), false); + + newRPath = ""; + + char * pos = rpath; + while (*pos) { + char * end = strchr(pos, ':'); + if (!end) end = strchr(pos, 0); + + /* Get the name of the directory. */ + string dirName(pos, end - pos); + if (*end == ':') ++end; + pos = end; + + /* Non-absolute entries are allowed (e.g., the special + "$ORIGIN" hack). */ + if (dirName[0] != '/') { + concatToRPath(newRPath, dirName); + continue; + } + + /* For each library that we haven't found yet, see if it + exists in this directory. */ + bool libFound = false; + for (unsigned int j = 0; j < neededLibs.size(); ++j) + if (!neededLibFound[j]) { + string libName = dirName + "/" + neededLibs[j]; + struct stat st; + if (stat(libName.c_str(), &st) == 0) { + neededLibFound[j] = true; + libFound = true; + } + } + + if (!libFound) + debug("removing directory `%s' from RPATH\n", dirName.c_str()); + else + concatToRPath(newRPath, dirName); + } + } + + + if (string(rpath ? rpath : "") == newRPath) return; + + changed = true; + + /* Zero out the previous rpath to prevent retained dependencies in + Nix. */ + unsigned int rpathSize = 0; + if (rpath) { + rpathSize = strlen(rpath); + memset(rpath, 'X', rpathSize); + } + + debug("new rpath is `%s'\n", newRPath.c_str()); + + if (!forceRPath && dynRPath && !dynRunPath) { /* convert DT_RPATH to DT_RUNPATH */ + dynRPath->d_tag = DT_RUNPATH; + dynRunPath = dynRPath; + dynRPath = 0; + } + + if (forceRPath && dynRPath && dynRunPath) { /* convert DT_RUNPATH to DT_RPATH */ + dynRunPath->d_tag = DT_IGNORE; + } + + if (newRPath.size() <= rpathSize) { + strcpy(rpath, newRPath.c_str()); + return; + } + + /* Grow the .dynstr section to make room for the new RPATH. */ + debug("rpath is too long, resizing...\n"); + + string & newDynStr = replaceSection(".dynstr", + rdi(shdrDynStr.sh_size) + newRPath.size() + 1); + setSubstr(newDynStr, rdi(shdrDynStr.sh_size), newRPath + '\0'); + + /* Update the DT_RUNPATH and DT_RPATH entries. */ + if (dynRunPath || dynRPath) { + if (dynRunPath) dynRunPath->d_un.d_val = shdrDynStr.sh_size; + if (dynRPath) dynRPath->d_un.d_val = shdrDynStr.sh_size; + } + + else { + /* There is no DT_RUNPATH entry in the .dynamic section, so we + have to grow the .dynamic section. */ + string & newDynamic = replaceSection(".dynamic", + rdi(shdrDynamic.sh_size) + sizeof(Elf_Dyn)); + + unsigned int idx = 0; + for ( ; rdi(((Elf_Dyn *) newDynamic.c_str())[idx].d_tag) != DT_NULL; idx++) ; + debug("DT_NULL index is %d\n", idx); + + /* Shift all entries down by one. */ + setSubstr(newDynamic, sizeof(Elf_Dyn), + string(newDynamic, 0, sizeof(Elf_Dyn) * (idx + 1))); + + /* Add the DT_RUNPATH entry at the top. */ + Elf_Dyn newDyn; + wri(newDyn.d_tag, forceRPath ? DT_RPATH : DT_RUNPATH); + newDyn.d_un.d_val = shdrDynStr.sh_size; + setSubstr(newDynamic, 0, string((char *) &newDyn, sizeof(Elf_Dyn))); + } +} + + +template +void ElfFile::removeNeeded(set libs) +{ + if (libs.empty()) return; + + Elf_Shdr & shdrDynamic = findSection(".dynamic"); + Elf_Shdr & shdrDynStr = findSection(".dynstr"); + char * strTab = (char *) contents + rdi(shdrDynStr.sh_offset); + + Elf_Dyn * dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset)); + Elf_Dyn * last = dyn; + for ( ; rdi(dyn->d_tag) != DT_NULL; dyn++) { + if (rdi(dyn->d_tag) == DT_NEEDED) { + char * name = strTab + rdi(dyn->d_un.d_val); + if (libs.find(name) != libs.end()) { + debug("removing DT_NEEDED entry `%s'\n", name); + changed = true; + } else { + debug("keeping DT_NEEDED entry `%s'\n", name); + *last++ = *dyn; + } + } else + *last++ = *dyn; + } + + memset(last, 0, sizeof(Elf_Dyn) * (dyn - last)); +} + + +static bool printInterpreter = false; +static string newInterpreter; + +static bool shrinkRPath = false; +static bool setRPath = false; +static bool printRPath = false; +static string newRPath; +static set neededLibsToRemove; + + +template +static void patchElf2(ElfFile & elfFile, mode_t fileMode) +{ + elfFile.parse(); + + if (printInterpreter) + printf("%s\n", elfFile.getInterpreter().c_str()); + + if (newInterpreter != "") + elfFile.setInterpreter(newInterpreter); + + if (printRPath) + elfFile.modifyRPath(elfFile.rpPrint, ""); + + if (shrinkRPath) + elfFile.modifyRPath(elfFile.rpShrink, ""); + else if (setRPath) + elfFile.modifyRPath(elfFile.rpSet, newRPath); + + elfFile.removeNeeded(neededLibsToRemove); + + if (elfFile.isChanged()){ + elfFile.rewriteSections(); + writeFile(fileName, fileMode); + } +} + + +static void patchElf() +{ + if (!printInterpreter && !printRPath) + debug("patching ELF file `%s'\n", fileName.c_str()); + + mode_t fileMode; + + readFile(fileName, &fileMode); + + + /* Check the ELF header for basic validity. */ + if (fileSize < (off_t) sizeof(Elf32_Ehdr)) error("missing ELF header"); + + if (memcmp(contents, ELFMAG, SELFMAG) != 0) + error("not an ELF executable"); + + if (contents[EI_CLASS] == ELFCLASS32 && + contents[EI_VERSION] == EV_CURRENT) + { + ElfFile elfFile; + patchElf2(elfFile, fileMode); + } + else if (contents[EI_CLASS] == ELFCLASS64 && + contents[EI_VERSION] == EV_CURRENT) + { + ElfFile elfFile; + patchElf2(elfFile, fileMode); + } + else { + error("ELF executable is not 32/64-bit, little/big-endian, version 1"); + } +} + + +void showHelp(const string & progName) +{ + fprintf(stderr, "syntax: %s\n\ + [--set-interpreter FILENAME]\n\ + [--print-interpreter]\n\ + [--set-rpath RPATH]\n\ + [--shrink-rpath]\n\ + [--print-rpath]\n\ + [--force-rpath]\n\ + [--remove-needed LIBRARY]\n\ + [--debug]\n\ + [--version]\n\ + FILENAME\n", progName.c_str()); +} + + +int main(int argc, char * * argv) +{ + if (argc <= 1) { + showHelp(argv[0]); + return 1; + } + + if (getenv("PATCHELF_DEBUG") != 0) debugMode = true; + + int i; + for (i = 1; i < argc; ++i) { + string arg(argv[i]); + if (arg == "--set-interpreter" || arg == "--interpreter") { + if (++i == argc) error("missing argument"); + newInterpreter = argv[i]; + } + else if (arg == "--print-interpreter") { + printInterpreter = true; + } + else if (arg == "--shrink-rpath") { + shrinkRPath = true; + } + else if (arg == "--set-rpath") { + if (++i == argc) error("missing argument"); + setRPath = true; + newRPath = argv[i]; + } + else if (arg == "--print-rpath") { + printRPath = true; + } + else if (arg == "--force-rpath") { + /* Generally we prefer to emit DT_RUNPATH instead of + DT_RPATH, as the latter is obsolete. However, there is + a slight semantic difference: DT_RUNPATH is "scoped", + it only affects the executable or library in question, + not its recursive imports. So maybe you really want to + force the use of DT_RPATH. That's what this option + does. Without it, DT_RPATH (if encountered) is + converted to DT_RUNPATH, and if neither is present, a + DT_RUNPATH is added. With it, DT_RPATH isn't converted + to DT_RUNPATH, and if neither is present, a DT_RPATH is + added. */ + forceRPath = true; + } + else if (arg == "--remove-needed") { + if (++i == argc) error("missing argument"); + neededLibsToRemove.insert(argv[i]); + } + else if (arg == "--debug") { + debugMode = true; + } + else if (arg == "--help") { + showHelp(argv[0]); + return 0; + } + else if (arg == "--version") { + printf("1.0\n"); + return 0; + } + else break; + } + + if (i == argc) error("missing filename"); + fileName = argv[i]; + + patchElf(); + + return 0; +} diff --git a/sources/pyside2-tools/AUTHORS b/sources/pyside2-tools/AUTHORS new file mode 100644 index 0000000..ed5c792 --- /dev/null +++ b/sources/pyside2-tools/AUTHORS @@ -0,0 +1,12 @@ +This is a fork of pyuic from PyQt4. + +Authors +- PySide developers + +PyQt4 pyuic authors +- Torsten Marek +- Phil Thompson + +PyQt4 pyrcc4 authors +- Trolltech +- Phil Thompson diff --git a/sources/pyside2-tools/CMakeLists.txt b/sources/pyside2-tools/CMakeLists.txt new file mode 100644 index 0000000..d328654 --- /dev/null +++ b/sources/pyside2-tools/CMakeLists.txt @@ -0,0 +1,91 @@ +cmake_minimum_required(VERSION 3.1) +project(pyside2-tools) + +find_package(Shiboken2 2.0.0 REQUIRED) +find_package(Qt5 REQUIRED Core) +find_package(PySide2 2.0.0 REQUIRED) + +set(pyside2_tools_MAJOR_VERSION "2") +set(pyside2_tools_MINOR_VERSION "0") +set(pyside2_tools_MICRO_VERSION "0") +set(pyside2_tools_VERSION "${pyside2_tools_MAJOR_VERSION}.${pyside2_tools_MINOR_VERSION}.${pyside2_tools_MICRO_VERSION}") + +configure_file("pyside2uic/__init__.py.in" "${CMAKE_CURRENT_BINARY_DIR}/pyside2uic/__init__.py" @ONLY) + +option(BUILD_TESTS "Build tests." TRUE) + +if(CMAKE_HOST_APPLE) + set(OSX_USE_LIBCPP "OFF" CACHE BOOL "Explicitly link the libc++ standard library (useful for osx deployment targets lower than 10.9.") + if(OSX_USE_LIBCPP) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + endif() +endif() + +# UIC stuff +if (NOT SITE_PACKAGE) + execute_process( + COMMAND ${SHIBOKEN_PYTHON_INTERPRETER} -c "if True: + from distutils import sysconfig + from os.path import sep + print(sysconfig.get_python_lib(1, 0, prefix='${CMAKE_INSTALL_PREFIX}').replace(sep, '/')) + " + OUTPUT_VARIABLE SITE_PACKAGE + OUTPUT_STRIP_TRAILING_WHITESPACE) + if (NOT SITE_PACKAGE) + message(FATAL_ERROR "Could not detect Python module installation directory.") + endif() +endif() + +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pyside2-uic + DESTINATION bin + PERMISSIONS + OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ + WORLD_EXECUTE WORLD_READ) + +# on win32 we cannot rely on the shebang for the shell to interpret the pyside2-uic command +if (WIN32) + file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/pyside2-uic.bat "python %~dp0pyside2-uic %*\n") + install (FILES ${CMAKE_CURRENT_BINARY_DIR}/pyside2-uic.bat DESTINATION bin) +endif () + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pyside2uic/__init__.py" + DESTINATION "${SITE_PACKAGE}/pyside2uic") +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/pyside2uic + DESTINATION ${SITE_PACKAGE} + PATTERN "*.in" EXCLUDE + PATTERN "*pyside2uic/*.1" EXCLUDE + PATTERN "*pyside2uic/__init__.py" EXCLUDE + PATTERN "*pyside2uic\\__init__.py" EXCLUDE) + +# Man pages for pyside2-uic +if (NOT WIN32) + file(GLOB manpages "${CMAKE_CURRENT_SOURCE_DIR}/pyside2uic/*.1") + install(FILES ${manpages} DESTINATION share/man/man1) +endif() + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) + +add_custom_target(uninstall "${CMAKE_COMMAND}" + -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") + +set(ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${pyside2_tools_VERSION}) +add_custom_target(dist + COMMAND mkdir -p "${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}" && + git log > "${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}/ChangeLog" && + git archive --prefix=${ARCHIVE_NAME}/ HEAD --format=tar --output="${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar" && + tar -C "${CMAKE_BINARY_DIR}" --owner=root --group=root -r "${ARCHIVE_NAME}/ChangeLog" -f "${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar" && + bzip2 -f9 "${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar" && + echo "Source package created at ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2.\n" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) + +set(PYSIDE2RCC_EXECUTABLE ${CMAKE_CURRENT_BINARY_DIR}/pyrcc/pyside2-rcc) +add_subdirectory(pyrcc) +add_subdirectory(pylupdate) + +if (BUILD_TESTS) + enable_testing() + add_subdirectory(tests) +endif () diff --git a/sources/pyside2-tools/LICENSE-lupdate b/sources/pyside2-tools/LICENSE-lupdate new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/sources/pyside2-tools/LICENSE-lupdate @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sources/pyside2-tools/LICENSE-rcc b/sources/pyside2-tools/LICENSE-rcc new file mode 100644 index 0000000..4ccd714 --- /dev/null +++ b/sources/pyside2-tools/LICENSE-rcc @@ -0,0 +1,342 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +------------------------------------------------------------------------- diff --git a/sources/pyside2-tools/LICENSE-uic b/sources/pyside2-tools/LICENSE-uic new file mode 100644 index 0000000..984e154 --- /dev/null +++ b/sources/pyside2-tools/LICENSE-uic @@ -0,0 +1,372 @@ +Copyright (c) 2005,2006 Torsten Marek . +All rights reserved. + +The software module is double-licensed under the revised BSD and GPL +licenses. + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/sources/pyside2-tools/README.md b/sources/pyside2-tools/README.md new file mode 100644 index 0000000..7ffe058 --- /dev/null +++ b/sources/pyside2-tools/README.md @@ -0,0 +1,21 @@ +Tools +===== + +PySide development tools (pyuic and pyrcc) + +This repository is the tools for PySide2. If you would like to install PySide2, please go to [pyside2-setup](https://github.com/PySide/pyside2-setup) for instructions. + +Resources: + +* [PySide2-setup](https://github.com/PySide/pyside2-setup) + The container-project with the setup.py script. It contains the following sub-projects: + * [PySide2 Wiki](https://github.com/PySide/pyside2/wiki) + Developer information + * [PySide2](https://github.com/PySide/pyside2) + The PySide2 project + * [Shiboken2](https://github.com/PySide/shiboken2) + The Shiboken2 project + * [PySide2-tools](https://github.com/PySide/pyside2-examples) + The PySide2-tools project + * [PySide2-examples](https://github.com/PySide/pyside2-examples) + The PySide2 example scripts diff --git a/sources/pyside2-tools/cmake_uninstall.cmake b/sources/pyside2-tools/cmake_uninstall.cmake new file mode 100644 index 0000000..df95fb9 --- /dev/null +++ b/sources/pyside2-tools/cmake_uninstall.cmake @@ -0,0 +1,21 @@ +IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") +ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + +FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +STRING(REGEX REPLACE "\n" ";" files "${files}") +FOREACH(file ${files}) + MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") + IF(EXISTS "$ENV{DESTDIR}${file}") + EXEC_PROGRAM( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + IF(NOT "${rm_retval}" STREQUAL 0) + MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") + ENDIF(NOT "${rm_retval}" STREQUAL 0) + ELSE(EXISTS "$ENV{DESTDIR}${file}") + MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") + ENDIF(EXISTS "$ENV{DESTDIR}${file}") +ENDFOREACH(file) diff --git a/sources/pyside2-tools/pylupdate/CMakeLists.txt b/sources/pyside2-tools/pylupdate/CMakeLists.txt new file mode 100644 index 0000000..a46608c --- /dev/null +++ b/sources/pyside2-tools/pylupdate/CMakeLists.txt @@ -0,0 +1,44 @@ + +set(lupdate_SRC +fetchtr.cpp +main.cpp +merge.cpp +metatranslator.cpp +numberh.cpp +proparser.cpp +sametexth.cpp +simtexth.cpp +translator.cpp +) + +find_package(Qt5Core) +find_package(Qt5Gui) +find_package(Qt5Xml) +find_package(Qt5Widgets) + +set(lupdate_MOC_HEADERS translator.h) +qt5_wrap_cpp(lupdate_MOC_OUTFILES ${lupdate_MOC_HEADERS}) + +add_executable(pyside2-lupdate ${lupdate_SRC} ${lupdate_MOC_OUTFILES}) +include_directories(pyside2-lupdate + ${CMAKE_CURRENT_SOURCE_DIR} + ${Qt5Xml_INCLUDE_DIRS} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ) + +target_link_libraries(pyside2-lupdate + ${Qt5Core_LIBRARIES} + ${Qt5Xml_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ) + +install(TARGETS pyside2-lupdate RUNTIME DESTINATION bin) + +# Man pages +if (NOT WIN32) + file(GLOB manpages "${CMAKE_CURRENT_SOURCE_DIR}/*.1") + install(FILES ${manpages} DESTINATION share/man/man1) +endif() diff --git a/sources/pyside2-tools/pylupdate/fetchtr.cpp b/sources/pyside2-tools/pylupdate/fetchtr.cpp new file mode 100644 index 0000000..06485a4 --- /dev/null +++ b/sources/pyside2-tools/pylupdate/fetchtr.cpp @@ -0,0 +1,891 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2005 Trolltech AS. All rights reserved. + * Copyright (C) 2002-2007 Detlev Offenbach + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +static const char MagicComment[] = "TRANSLATOR "; + +static QMap needs_Q_OBJECT; +static QMap lacks_Q_OBJECT; + +/* + The first part of this source file is the Python tokenizer. We skip + most of Python; the only tokens that interest us are defined here. +*/ + +enum { Tok_Eof, Tok_class, Tok_return, Tok_tr, + Tok_trUtf8, Tok_translate, Tok_Ident, + Tok_Comment, Tok_Dot, Tok_String, + Tok_LeftParen, Tok_RightParen, + Tok_Comma, Tok_None, Tok_Integer}; + +/* + The tokenizer maintains the following global variables. The names + should be self-explanatory. +*/ +static QByteArray yyFileName; +static int yyCh; +static char yyIdent[128]; +static size_t yyIdentLen; +static char yyComment[65536]; +static size_t yyCommentLen; +static char yyString[65536]; +static size_t yyStringLen; +static qlonglong yyInteger; +static QStack yySavedParenDepth; +static int yyParenDepth; +static int yyLineNo; +static int yyCurLineNo; +static int yyParenLineNo; +static QTextCodec *yyCodecForTr = 0; +static QTextCodec *yyCodecForSource = 0; + +// the file to read from (if reading from a file) +static FILE *yyInFile; + +// the string to read from and current position in the string (otherwise) +static QString yyInStr; +static int yyInPos; +static int buf; + +static int (*getChar)(); +static int (*peekChar)(); + +static bool yyParsingUtf8; + +static int yyIndentationSize; +static int yyContinuousSpaceCount; +static bool yyCountingIndentation; + +// (Context, indentation level) pair. +typedef QPair ContextPair; +// Stack of (Context, indentation level) pairs. +typedef QStack ContextStack; +static ContextStack yyContextStack; + +static int yyContextPops; + +static int getCharFromFile() +{ + int c; + + if ( buf < 0 ) + c = getc( yyInFile ); + else { + c = buf; + buf = -1; + } + if ( c == '\n' ) { + yyCurLineNo++; + yyCountingIndentation = true; + yyContinuousSpaceCount = 0; + } else if ( yyCountingIndentation && ( c == 32 || c == 9 ) ) { + yyContinuousSpaceCount++; + } else { + if ( yyIndentationSize == 1 && yyContinuousSpaceCount > yyIndentationSize ) + yyIndentationSize = yyContinuousSpaceCount; + if ( yyCountingIndentation && yyContextStack.count() > 1 ) { + ContextPair& top = yyContextStack.top(); + if ( top.second == 0 && yyContinuousSpaceCount > 0 ) { + top.second = yyContinuousSpaceCount; + yyContinuousSpaceCount = 0; + } else if ( yyContinuousSpaceCount < top.second ) { + yyContextPops = (top.second - yyContinuousSpaceCount) / yyIndentationSize; + } + } + yyCountingIndentation = false; + } + return c; +} + +static int peekCharFromFile() +{ + int c = getc( yyInFile ); + buf = c; + return c; +} + +static void startTokenizer( const char *fileName, int (*getCharFunc)(), + int (*peekCharFunc)(), QTextCodec *codecForTr, QTextCodec *codecForSource ) +{ + yyInPos = 0; + buf = -1; + getChar = getCharFunc; + peekChar = peekCharFunc; + + yyFileName = fileName; + yyCh = getChar(); + yySavedParenDepth.clear(); + yyParenDepth = 0; + yyCurLineNo = 1; + yyParenLineNo = 1; + yyCodecForTr = codecForTr; + if (!yyCodecForTr) + yyCodecForTr = QTextCodec::codecForName("ISO-8859-1"); + Q_ASSERT(yyCodecForTr); + yyCodecForSource = codecForSource; + + yyParsingUtf8 = false; + yyIndentationSize = 1; + yyContinuousSpaceCount = 0; + yyCountingIndentation = false; + yyContextStack.clear(); + yyContextPops = 0; +} + +static int getToken() +{ + const char tab[] = "abfnrtv"; + const char backTab[] = "\a\b\f\n\r\t\v"; + uint n; + bool quiet; + + yyIdentLen = 0; + yyCommentLen = 0; + yyStringLen = 0; + while ( yyCh != EOF ) { + yyLineNo = yyCurLineNo; + + if ( isalpha(yyCh) || yyCh == '_' ) { + do { + if ( yyIdentLen < sizeof(yyIdent) - 1 ) + yyIdent[yyIdentLen++] = (char) yyCh; + yyCh = getChar(); + } while ( isalnum(yyCh) || yyCh == '_' ); + yyIdent[yyIdentLen] = '\0'; + + switch ( yyIdent[0] ) { + case 'N': + if ( strcmp(yyIdent + 1, "one") == 0 ) + return Tok_None; + break; + case 'Q': + if ( strcmp(yyIdent + 1, "T_TR_NOOP") == 0 ) { + yyParsingUtf8 = false; + return Tok_tr; + } else if ( strcmp(yyIdent + 1, "T_TRANSLATE_NOOP") == 0 ) { + yyParsingUtf8 = false; + return Tok_translate; + } + break; + case 'c': + if ( strcmp(yyIdent + 1, "lass") == 0 ) + return Tok_class; + break; + case 'f': + /* + QTranslator::findMessage() has the same parameters as + QApplication::translate(). + */ + if ( strcmp(yyIdent + 1, "indMessage") == 0 ) + return Tok_translate; + break; + case 'r': + if ( strcmp(yyIdent + 1, "eturn") == 0 ) + return Tok_return; + break; + case 't': + if ( strcmp(yyIdent + 1, "r") == 0 ) { + yyParsingUtf8 = false; + return Tok_tr; + } else if ( qstrcmp(yyIdent + 1, "rUtf8") == 0 ) { + yyParsingUtf8 = true; + return Tok_trUtf8; + } else if ( qstrcmp(yyIdent + 1, "ranslate") == 0 ) { + yyParsingUtf8 = false; + return Tok_translate; + } + break; + case '_': + if ( strcmp(yyIdent + 1, "_tr") == 0 ) { + yyParsingUtf8 = false; + return Tok_tr; + } else if ( strcmp(yyIdent + 1, "_trUtf8") == 0 ) { + yyParsingUtf8 = true; + return Tok_trUtf8; + } + break; + } + return Tok_Ident; + } else { + switch ( yyCh ) { + case '#': + yyCh = getChar(); + do { + yyCh = getChar(); + } while ( yyCh != EOF && yyCh != '\n' ); + break; + case '"': + case '\'': + int quoteChar; + int trippelQuote, singleQuote; + int in; + + quoteChar = yyCh; + trippelQuote = 0; + singleQuote = 1; + in = 0; + yyCh = getChar(); + quiet = false; + + while ( yyCh != EOF ) { + if ( singleQuote && (yyCh == '\n' || (in && yyCh == quoteChar)) ) + break; + + if ( yyCh == quoteChar ) { + if (peekChar() == quoteChar) { + yyCh = getChar(); + if (!trippelQuote) { + trippelQuote = 1; + singleQuote = 0; + in = 1; + yyCh = getChar(); + } else { + yyCh = getChar(); + if (yyCh == quoteChar) { + trippelQuote = 0; + break; + } + } + } else if (trippelQuote) { + if ( yyStringLen < sizeof(yyString) - 1 ) + yyString[yyStringLen++] = (char) yyCh; + yyCh = getChar(); + continue; + } else + break; + } else + in = 1; + + if ( yyCh == '\\' ) { + yyCh = getChar(); + + if ( yyCh == 'x' ) { + QByteArray hex = "0"; + + yyCh = getChar(); + while ( isxdigit(yyCh) ) { + hex += (char) yyCh; + yyCh = getChar(); + } +#if defined(_MSC_VER) && _MSC_VER >= 1400 + sscanf_s( hex, "%x", &n ); +#else + sscanf( hex, "%x", &n ); +#endif + if ( yyStringLen < sizeof(yyString) - 1 ) + yyString[yyStringLen++] = (char) n; + } else if ( yyCh >= '0' && yyCh < '8' ) { + QByteArray oct = ""; + int n = 0; + + do { + oct += (char) yyCh; + ++n; + yyCh = getChar(); + } while ( yyCh >= '0' && yyCh < '8' && n < 3 ); + #if defined(_MSC_VER) && _MSC_VER >= 1400 + sscanf_s( oct, "%o", &n ); + #else + sscanf( oct, "%o", &n ); + #endif + if ( yyStringLen < sizeof(yyString) - 1 ) + yyString[yyStringLen++] = (char) n; + } else { + const char *p = strchr( tab, yyCh ); + if ( yyStringLen < sizeof(yyString) - 1 ) + yyString[yyStringLen++] = ( p == 0 ) ? + (char) yyCh : backTab[p - tab]; + yyCh = getChar(); + } + } else { + if (!yyCodecForSource) { + if ( yyParsingUtf8 && yyCh >= 0x80 && !quiet) { + qWarning( "%s:%d: Non-ASCII character detected in trUtf8 string", + (const char *) yyFileName, yyLineNo ); + quiet = true; + } + // common case: optimized + if ( yyStringLen < sizeof(yyString) - 1 ) + yyString[yyStringLen++] = (char) yyCh; + yyCh = getChar(); + } else { + QByteArray originalBytes; + while ( yyCh != EOF && (trippelQuote || yyCh != '\n') && yyCh != quoteChar && yyCh != '\\' ) { + if ( yyParsingUtf8 && yyCh >= 0x80 && !quiet) { + qWarning( "%s:%d: Non-ASCII character detected in trUtf8 string", + (const char *) yyFileName, yyLineNo ); + quiet = true; + } + originalBytes += (char)yyCh; + yyCh = getChar(); + } + + QString unicodeStr = yyCodecForSource->toUnicode(originalBytes); + QByteArray convertedBytes; + + if (!yyCodecForTr->canEncode(unicodeStr) && !quiet) { + qWarning( "%s:%d: Cannot convert Python string from %s to %s", + (const char *) yyFileName, yyLineNo, yyCodecForSource->name().constData(), + yyCodecForTr->name().constData() ); + quiet = true; + } + convertedBytes = yyCodecForTr->fromUnicode(unicodeStr); + + size_t len = qMin((size_t)convertedBytes.size(), sizeof(yyString) - yyStringLen - 1); + memcpy(yyString + yyStringLen, convertedBytes.constData(), len); + yyStringLen += len; + } + } + } + yyString[yyStringLen] = '\0'; + + if ( yyCh != quoteChar ) { + printf("%c\n", yyCh); + qWarning( "%s:%d: Unterminated string", + (const char *) yyFileName, yyLineNo ); + } + + if ( yyCh == EOF ) { + return Tok_Eof; + } else { + yyCh = getChar(); + return Tok_String; + } + break; + case '(': + if (yyParenDepth == 0) + yyParenLineNo = yyCurLineNo; + yyParenDepth++; + yyCh = getChar(); + return Tok_LeftParen; + case ')': + if (yyParenDepth == 0) + yyParenLineNo = yyCurLineNo; + yyParenDepth--; + yyCh = getChar(); + return Tok_RightParen; + case ',': + yyCh = getChar(); + return Tok_Comma; + case '.': + yyCh = getChar(); + return Tok_Dot; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + QByteArray ba; + ba+=yyCh; + yyCh = getChar(); + bool hex = yyCh == 'x'; + if ( hex ) { + ba+=yyCh; + yyCh = getChar(); + } + while ( (hex ? isxdigit(yyCh) : isdigit(yyCh)) ) { + ba+=yyCh; + yyCh = getChar(); + } + bool ok; + yyInteger = ba.toLongLong(&ok); + if (ok) return Tok_Integer; + break; + } + default: + yyCh = getChar(); + } + } + } + return Tok_Eof; +} + +/* + The second part of this source file is the parser. It accomplishes + a very easy task: It finds all strings inside a tr() or translate() + call, and possibly finds out the context of the call. It supports + three cases: + (1) the context is specified, as in FunnyDialog.tr("Hello") or + translate("FunnyDialog", "Hello"); + (2) the call appears within an inlined function; + (3) the call appears within a function defined outside the class definition. +*/ + +static int yyTok; + +static bool match( int t ) +{ + bool matches = ( yyTok == t ); + if ( matches ) + yyTok = getToken(); + return matches; +} + +static bool matchString( QByteArray *s ) +{ + bool matches = ( yyTok == Tok_String ); + *s = ""; + while ( yyTok == Tok_String ) { + *s += yyString; + yyTok = getToken(); + } + return matches; +} + +static bool matchEncoding( bool *utf8 ) +{ + // Remove any leading module paths. + if (yyTok == Tok_Ident && strcmp(yyIdent, "PySide2") == 0) + { + yyTok = getToken(); + + if (yyTok != Tok_Dot) + return false; + + yyTok = getToken(); + } + + if (yyTok == Tok_Ident && (strcmp(yyIdent, "QtGui") == 0 || strcmp(yyIdent, "QtCore") == 0)) + { + yyTok = getToken(); + + if (yyTok != Tok_Dot) + return false; + + yyTok = getToken(); + } + + if ( yyTok == Tok_Ident ) { + if (strcmp(yyIdent, "QApplication") == 0 || strcmp(yyIdent, "QCoreApplication") == 0) { + yyTok = getToken(); + + if (yyTok == Tok_Dot) + yyTok = getToken(); + } + *utf8 = QString( yyIdent ).endsWith( QString("UTF8") ); + yyTok = getToken(); + return true; + } else { + return false; + } +} + +static bool matchStringOrNone(QByteArray *s) +{ + bool matches = matchString(s); + + if (!matches) + matches = match(Tok_None); + + return matches; +} + +/* + * match any expression that can return a number, which can be + * 1. Literal number (e.g. '11') + * 2. simple identifier (e.g. 'm_count') + * 3. simple function call (e.g. 'size()' ) + * 4. function call on an object (e.g. 'list.size()') + * + * Other cases: + * size(2,4) + * list().size() + * list(a,b).size(2,4) + * etc... + */ +static bool matchExpression() +{ + if (match(Tok_Integer)) { + return true; + } + + int parenlevel = 0; + while (match(Tok_Ident) || parenlevel > 0) { + if (yyTok == Tok_RightParen) { + if (parenlevel == 0) break; + --parenlevel; + yyTok = getToken(); + } else if (yyTok == Tok_LeftParen) { + yyTok = getToken(); + if (yyTok == Tok_RightParen) { + yyTok = getToken(); + } else { + ++parenlevel; + } + } else if (yyTok == Tok_Ident) { + continue; + } else if (parenlevel == 0) { + return false; + } + } + return true; +} + +static void parse( MetaTranslator *tor, const char *initialContext, + const char *defaultContext ) +{ + QByteArray context; + QByteArray text; + QByteArray com; + QByteArray prefix; + bool utf8 = false; + + yyContextStack.push(ContextPair(initialContext, 0)); + + yyTok = getToken(); + while ( yyTok != Tok_Eof ) { + + if (yyContextPops > 0) { + for ( int i = 0; i < yyContextPops; i++) + yyContextStack.pop(); + yyContextPops = 0; + } + + switch ( yyTok ) { + case Tok_class: + yyTok = getToken(); + yyContextStack.push(ContextPair(yyIdent, 0)); + yyContinuousSpaceCount = 0; + yyTok = getToken(); + break; + case Tok_tr: + case Tok_trUtf8: + utf8 = (yyTok == Tok_trUtf8 || (yyCodecForTr && strcmp(yyCodecForTr->name(), "UTF-8") == 0)); + yyTok = getToken(); + if (match(Tok_LeftParen) && matchString(&text)) + { + com = ""; + bool plural = false; + + if (match(Tok_RightParen)) + { + // There is no comment or plural arguments. + } + else if (match(Tok_Comma) && matchStringOrNone(&com)) + { + // There is a comment argument. + if (match(Tok_RightParen)) + { + // There is no plural argument. + } + else if (match(Tok_Comma)) + { + // There is a plural argument. + plural = true; + } + } + + if (prefix.isNull()) + context = defaultContext; + else if (qstrcmp(prefix, "self") == 0) + context = yyContextStack.top().first; + else + context = prefix; + + prefix = (const char *) 0; + + if (!text.isEmpty()) + { + tor->insert(MetaTranslatorMessage(context, text, com, + yyFileName, yyLineNo, + QStringList(), utf8, + MetaTranslatorMessage::Unfinished, plural)); + } + } + break; + case Tok_translate: + utf8 = false; + yyTok = getToken(); + if ( match(Tok_LeftParen) && + matchString(&context) && + match(Tok_Comma) && + matchString(&text) ) { + com = ""; + bool plural = false; + if (!match(Tok_RightParen)) { + // look for comment + if ( match(Tok_Comma) && matchStringOrNone(&com)) { + if (!match(Tok_RightParen)) { + // look for encoding + if (match(Tok_Comma)) { + if (matchEncoding(&utf8)) { + if (!match(Tok_RightParen)) { + // look for the plural quantifier, + // this can be a number, an identifier or a function call, + // so for simplicity we mark it as plural if we know we have a comma instead of an + // right parentheses. + plural = match(Tok_Comma); + } + } else { + // This can be a QTranslator::translate("context", "source", "comment", n) plural translation + if (matchExpression() && match(Tok_RightParen)) { + plural = true; + } else { + break; + } + } + } else { + break; + } + } + } else { + break; + } + } + if (!text.isEmpty()) + { + tor->insert( MetaTranslatorMessage(context, text, com, + yyFileName, yyLineNo, + QStringList(), utf8, + MetaTranslatorMessage::Unfinished, + plural) ); + } + } + break; + case Tok_Ident: + if ( !prefix.isNull() ) + prefix += "."; + prefix += yyIdent; + yyTok = getToken(); + if ( yyTok != Tok_Dot ) + prefix = (const char *) 0; + break; + case Tok_Comment: + com = yyComment; + com = com.simplified(); + if ( com.left(sizeof(MagicComment) - 1) == MagicComment ) { + com.remove( 0, sizeof(MagicComment) - 1 ); + int k = com.indexOf( ' ' ); + if ( k == -1 ) { + context = com; + } else { + context = com.left( k ); + com.remove( 0, k + 1 ); + tor->insert( MetaTranslatorMessage(context, "", com, + yyFileName, yyLineNo, + QStringList(), false) ); + + } + } + yyTok = getToken(); + break; + default: + yyTok = getToken(); + } + } + + if ( yyParenDepth != 0 ) + qWarning( "%s: Unbalanced parentheses in Python code", + (const char *) yyFileName ); +} + +void fetchtr_py( const char *fileName, MetaTranslator *tor, + const char *defaultContext, bool mustExist, const QByteArray &codecForSource ) +{ +#if defined(_MSC_VER) && _MSC_VER >= 1400 + if (fopen_s(&yyInFile, fileName, "r")) { + if ( mustExist ) { + char buf[100]; + strerror_s(buf, sizeof(buf), errno); + fprintf( stderr, + "pyside2-lupdate error: Cannot open Python source file '%s': %s\n", + fileName, buf ); + } +#else + yyInFile = fopen( fileName, "r" ); + if ( yyInFile == 0 ) { + if ( mustExist ) + fprintf( stderr, + "pyside2-lupdate error: Cannot open Python source file '%s': %s\n", + fileName, strerror(errno) ); +#endif + return; + } + + startTokenizer( fileName, getCharFromFile, peekCharFromFile, tor->codecForTr(), QTextCodec::codecForName(codecForSource) ); + parse( tor, 0, defaultContext ); + fclose( yyInFile ); +} + +class UiHandler : public QXmlDefaultHandler +{ +public: + UiHandler( MetaTranslator *translator, const char *fileName ) + : tor( translator ), fname( fileName ), comment( "" ) { } + + virtual bool startElement( const QString& namespaceURI, + const QString& localName, const QString& qName, + const QXmlAttributes& atts ); + virtual bool endElement( const QString& namespaceURI, + const QString& localName, const QString& qName ); + virtual bool characters( const QString& ch ); + virtual bool fatalError( const QXmlParseException& exception ); + + virtual void setDocumentLocator(QXmlLocator *locator) + { + m_locator = locator; + } + QXmlLocator *m_locator; +private: + void flush(); + + MetaTranslator *tor; + QByteArray fname; + QString context; + QString source; + QString comment; + + QString accum; + int m_lineNumber; + bool trString; +}; + +bool UiHandler::startElement( const QString& /* namespaceURI */, + const QString& /* localName */, + const QString& qName, + const QXmlAttributes& atts ) +{ + if ( qName == QString("item") ) { + flush(); + if ( !atts.value(QString("text")).isEmpty() ) + source = atts.value( QString("text") ); + } else if ( qName == QString("string") ) { + flush(); + if (atts.value(QString("notr")).isEmpty() || + atts.value(QString("notr")) != QString("true")) { + trString = true; + comment = atts.value(QString("comment")); + } else { + trString = false; + } + } + if (trString) m_lineNumber = m_locator->lineNumber(); + accum.truncate( 0 ); + return true; +} + +bool UiHandler::endElement( const QString& /* namespaceURI */, + const QString& /* localName */, + const QString& qName ) +{ + accum.replace( QRegExp(QString("\r\n")), "\n" ); + + if ( qName == QString("class") ) { + if ( context.isEmpty() ) + context = accum; + } else if ( qName == QString("string") && trString ) { + source = accum; + } else if ( qName == QString("comment") ) { + comment = accum; + flush(); + } else { + flush(); + } + return true; +} + +bool UiHandler::characters( const QString& ch ) +{ + accum += ch; + return true; +} + +bool UiHandler::fatalError( const QXmlParseException& exception ) +{ + QString msg; + msg.sprintf( "Parse error at line %d, column %d (%s).", + exception.lineNumber(), exception.columnNumber(), + exception.message().toLatin1().data() ); + fprintf( stderr, "XML error: %s\n", msg.toLatin1().data() ); + return false; +} + +void UiHandler::flush() +{ + if ( !context.isEmpty() && !source.isEmpty() ) + tor->insert( MetaTranslatorMessage(context.toUtf8(), source.toUtf8(), + comment.toUtf8(), QString(fname), m_lineNumber, + QStringList(), true) ); + source.truncate( 0 ); + comment.truncate( 0 ); +} + +void fetchtr_ui( const char *fileName, MetaTranslator *tor, + const char * /* defaultContext */, bool mustExist ) +{ + QFile f( fileName ); + if ( !f.open(QIODevice::ReadOnly) ) { + if ( mustExist ) { +#if defined(_MSC_VER) && _MSC_VER >= 1400 + char buf[100]; + strerror_s(buf, sizeof(buf), errno); + fprintf( stderr, "pyside2-lupdate error: cannot open UI file '%s': %s\n", + fileName, buf ); +#else + fprintf( stderr, "pyside2-lupdate error: cannot open UI file '%s': %s\n", + fileName, strerror(errno) ); +#endif + } + return; + } + + QXmlInputSource in( &f ); + QXmlSimpleReader reader; + reader.setFeature( "http://xml.org/sax/features/namespaces", false ); + reader.setFeature( "http://xml.org/sax/features/namespace-prefixes", true ); + reader.setFeature( "http://trolltech.com/xml/features/report-whitespace" + "-only-CharData", false ); + QXmlDefaultHandler *hand = new UiHandler( tor, fileName ); + reader.setContentHandler( hand ); + reader.setErrorHandler( hand ); + + if ( !reader.parse(in) ) + fprintf( stderr, "%s: Parse error in UI file\n", fileName ); + reader.setContentHandler( 0 ); + reader.setErrorHandler( 0 ); + delete hand; + f.close(); +} diff --git a/sources/pyside2-tools/pylupdate/main.cpp b/sources/pyside2-tools/pylupdate/main.cpp new file mode 100644 index 0000000..f0e6d5b --- /dev/null +++ b/sources/pyside2-tools/pylupdate/main.cpp @@ -0,0 +1,256 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2005 Trolltech AS. All rights reserved. + * Copyright (C) 2002-2007 Detlev Offenbach + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +// defined in fetchtr.cpp +extern void fetchtr_py( const char *fileName, MetaTranslator *tor, + const char *defaultContext, bool mustExist, const QByteArray &codecForSource ); +extern void fetchtr_ui( const char *fileName, MetaTranslator *tor, + const char *defaultContext, bool mustExist ); + + + +// defined in merge.cpp +extern void merge( const MetaTranslator *tor, const MetaTranslator *virginTor, MetaTranslator *out, + bool verbose, bool noObsolete ); + +typedef QList TML; + +static void printUsage() +{ + fprintf( stderr, "Usage:\n" + " pyside2-lupdate [options] project-file\n" + " pyside2-lupdate [options] source-files -ts ts-files\n" + "Options:\n" + " -help Display this information and exit\n" + " -noobsolete\n" + " Drop all obsolete strings\n" + " -verbose\n" + " Explain what is being done\n" + " -version\n" + " Display the version of pyside2-lupdate and exit\n" ); +} + +static void updateTsFiles( const MetaTranslator& fetchedTor, + const QStringList& tsFileNames, const QString& codecForTr, + bool noObsolete, bool verbose ) +{ + QStringList::ConstIterator t = tsFileNames.begin(); + QDir dir; + while ( t != tsFileNames.end() ) { + QString fn = dir.relativeFilePath(*t); + MetaTranslator tor; + MetaTranslator out; + tor.load( *t ); + if ( !codecForTr.isEmpty() ) + tor.setCodec( codecForTr.toLatin1() ); + if ( verbose ) + fprintf( stderr, "Updating '%s'...\n", fn.toLatin1().constData() ); + + merge( &tor, &fetchedTor, &out, verbose, noObsolete ); + if ( noObsolete ) + out.stripObsoleteMessages(); + out.stripEmptyContexts(); + if ( !out.save(*t) ) { +#if defined(_MSC_VER) && _MSC_VER >= 1400 + char buf[100]; + strerror_s(buf, sizeof(buf), errno); + fprintf( stderr, "pyside2-lupdate error: Cannot save '%s': %s\n", + fn.toLatin1().constData(), buf ); +#else + fprintf( stderr, "pyside2-lupdate error: Cannot save '%s': %s\n", + fn.toLatin1().constData(), strerror(errno) ); +#endif + } + ++t; + } +} + +int main( int argc, char **argv ) +{ + QString defaultContext = "@default"; + MetaTranslator fetchedTor; + QByteArray codecForTr; + QByteArray codecForSource; + QStringList tsFileNames; + QStringList uiFileNames; + + bool verbose = false; + bool noObsolete = false; + bool metSomething = false; + int numFiles = 0; + bool standardSyntax = true; + bool metTsFlag = false; + + int i; + + for ( i = 1; i < argc; i++ ) { + if ( qstrcmp(argv[i], "-ts") == 0 ) + standardSyntax = false; + } + + for ( i = 1; i < argc; i++ ) { + if ( qstrcmp(argv[i], "-help") == 0 ) { + printUsage(); + return 0; + } else if ( qstrcmp(argv[i], "-noobsolete") == 0 ) { + noObsolete = true; + continue; + } else if ( qstrcmp(argv[i], "-verbose") == 0 ) { + verbose = true; + continue; + } else if ( qstrcmp(argv[i], "-version") == 0 ) { + fprintf( stderr, "pyside2-lupdate version %s\n", QT_VERSION_STR ); + return 0; + } else if ( qstrcmp(argv[i], "-ts") == 0 ) { + metTsFlag = true; + continue; + } + + numFiles++; + + QString fullText; + + if ( !metTsFlag ) { + QFile f( argv[i] ); + if ( !f.open(QIODevice::ReadOnly) ) { +#if defined(_MSC_VER) && _MSC_VER >= 1400 + char buf[100]; + strerror_s(buf, sizeof(buf), errno); + fprintf( stderr, "pyside2-lupdate error: Cannot open file '%s': %s\n", + argv[i], buf ); +#else + fprintf( stderr, "pyside2-lupdate error: Cannot open file '%s': %s\n", + argv[i], strerror(errno) ); +#endif + return 1; + } + + QTextStream t( &f ); + fullText = t.readAll(); + f.close(); + } + + QString oldDir = QDir::currentPath(); + QDir::setCurrent( QFileInfo(argv[i]).path() ); + + if ( standardSyntax ) { + fetchedTor = MetaTranslator(); + codecForTr.clear(); + codecForSource.clear(); + tsFileNames.clear(); + uiFileNames.clear(); + + QMap tagMap = proFileTagMap( fullText ); + QMap::Iterator it; + + for ( it = tagMap.begin(); it != tagMap.end(); ++it ) { + QStringList toks = it.value().split(' '); + QStringList::Iterator t; + + for ( t = toks.begin(); t != toks.end(); ++t ) { + if ( it.key() == "SOURCES" ) { + fetchtr_py( (*t).toUtf8(), &fetchedTor, defaultContext.toUtf8(), true, codecForSource ); + metSomething = true; + } else if ( it.key() == "TRANSLATIONS" ) { + tsFileNames.append( *t ); + metSomething = true; + } else if ( it.key() == "CODEC" || + it.key() == "DEFAULTCODEC" || + it.key() == "CODECFORTR" ) { + codecForTr = (*t).toLatin1(); + fetchedTor.setCodecForTr(codecForTr); + } else if ( it.key() == "CODECFORSRC" ) { + codecForSource = (*t).toLatin1(); + } else if ( it.key() == "FORMS" ) { + fetchtr_ui( (*t).toUtf8(), &fetchedTor, defaultContext.toUtf8(), true); + } + } + } + + updateTsFiles( fetchedTor, tsFileNames, codecForTr, noObsolete, verbose ); + + if ( !metSomething ) { + fprintf( stderr, + "pyside2-lupdate warning: File '%s' does not look like a" + " project file\n", + argv[i] ); + } else if ( tsFileNames.isEmpty() ) { + fprintf( stderr, + "pyside2-lupdate warning: Met no 'TRANSLATIONS' entry in" + " project file '%s'\n", + argv[i] ); + } + } else { + if ( metTsFlag ) { + if ( QString(argv[i]).toLower().endsWith(".ts") ) { + QFileInfo fi( argv[i] ); + if ( !fi.exists() || fi.isWritable() ) { + tsFileNames.append( argv[i] ); + } else { + fprintf( stderr, + "pyside2-lupdate warning: For some reason, I cannot" + " save '%s'\n", + argv[i] ); + } + } else { + fprintf( stderr, + "pyside2-lupdate error: File '%s' lacks .ts extension\n", + argv[i] ); + } + } else { + QFileInfo fi(argv[i]); + if ( fi.suffix() == "py" || fi.suffix() == "pyw" ) { + fetchtr_py( fi.fileName().toUtf8(), &fetchedTor, defaultContext.toUtf8(), true, codecForSource ); + } else { + fetchtr_ui( fi.fileName().toUtf8(), &fetchedTor, defaultContext.toUtf8(), true); + } + } + } + QDir::setCurrent( oldDir ); + } + + if ( !standardSyntax ) + updateTsFiles( fetchedTor, tsFileNames, codecForTr, noObsolete, verbose ); + + if ( numFiles == 0 ) { + printUsage(); + return 1; + } + return 0; +} diff --git a/sources/pyside2-tools/pylupdate/merge.cpp b/sources/pyside2-tools/pylupdate/merge.cpp new file mode 100644 index 0000000..9d0b8ef --- /dev/null +++ b/sources/pyside2-tools/pylupdate/merge.cpp @@ -0,0 +1,199 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2006 Trolltech AS. All rights reserved. + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + + +#include "metatranslator.h" +#include "simtexth.h" +#include + +// defined in numberh.cpp +extern int applyNumberHeuristic( MetaTranslator *tor ); +// defined in sametexth.cpp +extern int applySameTextHeuristic( MetaTranslator *tor ); + +typedef QList TML; + +/* + Merges two MetaTranslator objects into the first one. The first one + is a set of source texts and translations for a previous version of + the internationalized program; the second one is a set of fresh + source texts newly extracted from the source code, without any + translation yet. +*/ + +void merge( const MetaTranslator *tor, const MetaTranslator *virginTor, MetaTranslator *outTor, bool verbose, bool noObsolete ) +{ + int known = 0; + int neww = 0; + int obsoleted = 0; + int UntranslatedObsoleted = 0; + int similarTextHeuristicCount = 0; + TML all = tor->messages(); + TML::Iterator it; + outTor->setLanguageCode(tor->languageCode()); + + /* + The types of all the messages from the vernacular translator + are updated according to the virgin translator. + */ + for ( it = all.begin(); it != all.end(); ++it ) { + MetaTranslatorMessage::Type newType = MetaTranslatorMessage::Finished; + MetaTranslatorMessage m = *it; + + // skip context comment + if ( !QByteArray(m.sourceText()).isEmpty() ) { + MetaTranslatorMessage mv = virginTor->find(m.context(), m.sourceText(), m.comment()); + if ( mv.isNull() ) { + mv = virginTor->find(m.context(), m.comment(), m.fileName(), m.lineNumber()); + if ( mv.isNull() ) { + // did not find it in the virgin, mark it as obsolete + newType = MetaTranslatorMessage::Obsolete; + if ( m.type() != MetaTranslatorMessage::Obsolete ) + obsoleted++; + } else { + // Do not just accept it if its on the same line number, but different source text. + // Also check if the texts are more or less similar before we consider them to represent the same message... + // ### The QString() cast is evil + if (getSimilarityScore(QString(m.sourceText()), mv.sourceText()) >= textSimilarityThreshold) { + // It is just slightly modified, assume that it is the same string + m = MetaTranslatorMessage(m.context(), mv.sourceText(), m.comment(), m.fileName(), m.lineNumber(), m.translations()); + m.setPlural(mv.isPlural()); + + // Mark it as unfinished. (Since the source text was changed it might require re-translating...) + newType = MetaTranslatorMessage::Unfinished; + ++similarTextHeuristicCount; + } else { + // The virgin and vernacular sourceTexts are so different that we could not find it. + newType = MetaTranslatorMessage::Obsolete; + if ( m.type() != MetaTranslatorMessage::Obsolete ) + obsoleted++; + } + neww++; + } + } else { + switch ( m.type() ) { + case MetaTranslatorMessage::Finished: + default: + if (m.isPlural() == mv.isPlural()) { + newType = MetaTranslatorMessage::Finished; + } else { + newType = MetaTranslatorMessage::Unfinished; + } + known++; + break; + case MetaTranslatorMessage::Unfinished: + newType = MetaTranslatorMessage::Unfinished; + known++; + break; + case MetaTranslatorMessage::Obsolete: + newType = MetaTranslatorMessage::Unfinished; + neww++; + } + + // Always get the filename and linenumber info from the virgin Translator, in case it has changed location. + // This should also enable us to read a file that does not have the element. + m.setFileName(mv.fileName()); + m.setLineNumber(mv.lineNumber()); + m.setPlural(mv.isPlural()); // ### why not use operator=? + } + + if (newType == MetaTranslatorMessage::Obsolete && !m.isTranslated()) { + ++UntranslatedObsoleted; + } + + m.setType(newType); + outTor->insert(m); + } + } + + /* + Messages found only in the virgin translator are added to the + vernacular translator. Among these are all the context comments. + */ + all = virginTor->messages(); + + for ( it = all.begin(); it != all.end(); ++it ) { + MetaTranslatorMessage mv = *it; + bool found = tor->contains(mv.context(), mv.sourceText(), mv.comment()); + if (!found) { + MetaTranslatorMessage m = tor->find(mv.context(), mv.comment(), mv.fileName(), mv.lineNumber()); + if (!m.isNull()) { + if (getSimilarityScore(QString(m.sourceText()), mv.sourceText()) >= textSimilarityThreshold) { + found = true; + } + } else { + found = false; + } + } + if ( !found ) { + outTor->insert( mv ); + if ( !QByteArray(mv.sourceText()).isEmpty() ) + neww++; + } + } + + /* + The same-text heuristic handles cases where a message has an + obsolete counterpart with a different context or comment. + */ + int sameTextHeuristicCount = applySameTextHeuristic( outTor ); + + /* + The number heuristic handles cases where a message has an + obsolete counterpart with mostly numbers differing in the + source text. + */ + int sameNumberHeuristicCount = applyNumberHeuristic( outTor ); + + if ( verbose ) { + int totalFound = neww + known; + fprintf( stderr, " Found %d source text%s (%d new and %d already existing)\n", + totalFound, totalFound == 1 ? "" : "s", neww, known); + + if (obsoleted) { + if (noObsolete) { + fprintf( stderr, " Removed %d obsolete entr%s\n", + obsoleted, obsoleted == 1 ? "y" : "ies" ); + } else { + int total = obsoleted - UntranslatedObsoleted; + fprintf( stderr, " Kept %d obsolete translation%s\n", + total, total == 1 ? "" : "s" ); + + fprintf( stderr, " Removed %d obsolete untranslated entr%s\n", + UntranslatedObsoleted, UntranslatedObsoleted == 1 ? "y" : "ies" ); + + } + } + + if (sameNumberHeuristicCount) + fprintf( stderr, " Number heuristic provided %d translation%s\n", + sameNumberHeuristicCount, sameNumberHeuristicCount == 1 ? "" : "s" ); + if (sameTextHeuristicCount) + fprintf( stderr, " Same-text heuristic provided %d translation%s\n", + sameTextHeuristicCount, sameTextHeuristicCount == 1 ? "" : "s" ); + if (similarTextHeuristicCount) + fprintf( stderr, " Similar-text heuristic provided %d translation%s\n", + similarTextHeuristicCount, similarTextHeuristicCount == 1 ? "" : "s" ); + } +} diff --git a/sources/pyside2-tools/pylupdate/metatranslator.cpp b/sources/pyside2-tools/pylupdate/metatranslator.cpp new file mode 100644 index 0000000..f610333 --- /dev/null +++ b/sources/pyside2-tools/pylupdate/metatranslator.cpp @@ -0,0 +1,767 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2005 Trolltech AS. All rights reserved. + * Copyright (C) 2002-2007 Detlev Offenbach + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#include "metatranslator.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +static bool encodingIsUtf8( const QXmlAttributes& atts ) +{ + for ( int i = 0; i < atts.length(); i++ ) { + // utf8="true" is a pre-3.0 syntax + if ( atts.qName(i) == QString("utf8") ) { + return ( atts.value(i) == QString("true") ); + } else if ( atts.qName(i) == QString("encoding") ) { + return ( atts.value(i) == QString("UTF-8") ); + } + } + return false; +} + +class TsHandler : public QXmlDefaultHandler +{ +public: + TsHandler( MetaTranslator *translator ) + : tor( translator ), type( MetaTranslatorMessage::Finished ), + inMessage( false ), ferrorCount( 0 ), contextIsUtf8( false ), + messageIsUtf8( false ), m_isPlural(false) { } + + virtual bool startElement( const QString& namespaceURI, + const QString& localName, const QString& qName, + const QXmlAttributes& atts ); + virtual bool endElement( const QString& namespaceURI, + const QString& localName, const QString& qName ); + virtual bool characters( const QString& ch ); + virtual bool fatalError( const QXmlParseException& exception ); + QString language() const { return m_language; } + +private: + MetaTranslator *tor; + MetaTranslatorMessage::Type type; + bool inMessage; + QString m_language; + QString context; + QString source; + QString comment; + QStringList translations; + QString m_fileName; + int m_lineNumber; + + QString accum; + int ferrorCount; + bool contextIsUtf8; + bool messageIsUtf8; + bool m_isPlural; +}; + +bool TsHandler::startElement( const QString& /* namespaceURI */, + const QString& /* localName */, + const QString& qName, + const QXmlAttributes& atts ) +{ + if ( qName == QString("byte") ) { + for ( int i = 0; i < atts.length(); i++ ) { + if ( atts.qName(i) == QString("value") ) { + QString value = atts.value( i ); + int base = 10; + if ( value.startsWith("x") ) { + base = 16; + value = value.mid( 1 ); + } + int n = value.toUInt( 0, base ); + if ( n != 0 ) + accum += QChar( n ); + } + } + } else { + if ( qName == QString("TS") ) { + m_language = atts.value(QLatin1String("language")); + } else if ( qName == QString("context") ) { + context.truncate( 0 ); + source.truncate( 0 ); + comment.truncate( 0 ); + translations.clear(); + contextIsUtf8 = encodingIsUtf8( atts ); + } else if ( qName == QString("message") ) { + inMessage = true; + type = MetaTranslatorMessage::Finished; + source.truncate( 0 ); + comment.truncate( 0 ); + translations.clear(); + messageIsUtf8 = encodingIsUtf8( atts ); + m_isPlural = atts.value(QLatin1String("numerus")).compare(QLatin1String("yes")) == 0; + } else if (qName == QString("location") && inMessage) { + bool bOK; + int lineNo = atts.value(QString("line")).toInt(&bOK); + if (!bOK) lineNo = -1; + m_fileName = atts.value(QString("filename")); + m_lineNumber = lineNo; + } else if ( qName == QString("translation") ) { + for ( int i = 0; i < atts.length(); i++ ) { + if ( atts.qName(i) == QString("type") ) { + if ( atts.value(i) == QString("unfinished") ) + type = MetaTranslatorMessage::Unfinished; + else if ( atts.value(i) == QString("obsolete") ) + type = MetaTranslatorMessage::Obsolete; + else + type = MetaTranslatorMessage::Finished; + } + } + } + accum.truncate( 0 ); + } + return true; +} + +bool TsHandler::endElement( const QString& /* namespaceURI */, + const QString& /* localName */, + const QString& qName ) +{ + if ( qName == QString("codec") || qName == QString("defaultcodec") ) { + // "codec" is a pre-3.0 syntax + tor->setCodec( accum.toLatin1() ); + } else if ( qName == QString("name") ) { + context = accum; + } else if ( qName == QString("source") ) { + source = accum; + } else if ( qName == QString("comment") ) { + if ( inMessage ) { + comment = accum; + } else { + if ( contextIsUtf8 ) + tor->insert( MetaTranslatorMessage(context.toUtf8(), + ContextComment, + accum.toUtf8(), QString(), 0, + QStringList(), true, + MetaTranslatorMessage::Unfinished) ); + else + tor->insert( MetaTranslatorMessage(context.toUtf8(), + ContextComment, + accum.toUtf8(), QString(), 0, + QStringList(), false, + MetaTranslatorMessage::Unfinished) ); + } + } else if ( qName == QString("numerusform") ) { + translations.append(accum); + m_isPlural = true; + } else if ( qName == QString("translation") ) { + if (translations.isEmpty()) + translations.append(accum); + } else if ( qName == QString("message") ) { + if ( messageIsUtf8 ) + tor->insert( MetaTranslatorMessage(context.toUtf8(), source.toUtf8(), + comment.toUtf8(), m_fileName, m_lineNumber, + translations, true, type, m_isPlural) ); + else + tor->insert( MetaTranslatorMessage(context.toUtf8(), source.toUtf8(), + comment.toUtf8(), m_fileName, m_lineNumber, + translations, false, type, m_isPlural) ); + inMessage = false; + } + return true; +} + +bool TsHandler::characters( const QString& ch ) +{ + QString t = ch; + t.replace( "\r", "" ); + accum += t; + return true; +} + +bool TsHandler::fatalError( const QXmlParseException& exception ) +{ + if ( ferrorCount++ == 0 ) { + QString msg; + msg.sprintf( "Parse error at line %d, column %d (%s).", + exception.lineNumber(), exception.columnNumber(), + exception.message().toLatin1().data() ); + if ( qApp == 0 ) + fprintf( stderr, "XML error: %s\n", msg.toLatin1().data() ); + else + QMessageBox::information(0, + QObject::tr("Qt Linguist"), msg ); + } + return false; +} + +static QString numericEntity( int ch ) +{ + return QString( ch <= 0x20 ? "" : "&#x%1;" ) + .arg( ch, 0, 16 ); +} + +static QString protect( const QByteArray& str ) +{ + QString result; + int len = (int) str.length(); + for ( int k = 0; k < len; k++ ) { + switch( str[k] ) { + case '\"': + result += QString( """ ); + break; + case '&': + result += QString( "&" ); + break; + case '>': + result += QString( ">" ); + break; + case '<': + result += QString( "<" ); + break; + case '\'': + result += QString( "'" ); + break; + default: + if ( (uchar) str[k] < 0x20 && str[k] != '\n' ) + result += numericEntity( (uchar) str[k] ); + else + result += str[k]; + } + } + return result; +} + +static QString evilBytes( const QByteArray& str, bool utf8 ) +{ + if ( utf8 ) { + return protect( str ); + } else { + QString result; + QByteArray t = protect( str ).toLatin1(); + int len = (int) t.length(); + for ( int k = 0; k < len; k++ ) { + if ( (uchar) t[k] >= 0x7f ) + result += numericEntity( (uchar) t[k] ); + else + result += QChar( t[k] ); + } + return result; + } +} + +MetaTranslatorMessage::MetaTranslatorMessage() + : utfeight( false ), ty( Unfinished ), m_plural(false) +{ +} + +MetaTranslatorMessage::MetaTranslatorMessage( const char *context, + const char *sourceText, + const char *comment, + const QString &fileName, + int lineNumber, + const QStringList& translations, + bool utf8, Type type, bool plural ) + : TranslatorMessage( context, sourceText, comment, fileName, lineNumber, translations ), + utfeight( false ), ty( type ), m_plural(plural) +{ + /* + Don't use UTF-8 if it makes no difference. UTF-8 should be + reserved for the real problematic case: non-ASCII (possibly + non-Latin1) characters in .ui files. + */ + if ( utf8 ) { + if ( sourceText != 0 ) { + int i = 0; + while ( sourceText[i] != '\0' ) { + if ( (uchar) sourceText[i] >= 0x80 ) { + utfeight = true; + break; + } + i++; + } + } + if ( !utfeight && comment != 0 ) { + int i = 0; + while ( comment[i] != '\0' ) { + if ( (uchar) comment[i] >= 0x80 ) { + utfeight = true; + break; + } + i++; + } + } + } +} + +MetaTranslatorMessage::MetaTranslatorMessage( const MetaTranslatorMessage& m ) + : TranslatorMessage( m ), utfeight( m.utfeight ), ty( m.ty ), m_plural(m.m_plural) +{ +} + +MetaTranslatorMessage& MetaTranslatorMessage::operator=( + const MetaTranslatorMessage& m ) +{ + TranslatorMessage::operator=( m ); + utfeight = m.utfeight; + ty = m.ty; + m_plural = m.m_plural; + return *this; +} + +bool MetaTranslatorMessage::operator==( const MetaTranslatorMessage& m ) const +{ + return qstrcmp( context(), m.context() ) == 0 && + qstrcmp( sourceText(), m.sourceText() ) == 0 && + qstrcmp( comment(), m.comment() ) == 0; +} + +bool MetaTranslatorMessage::operator<( const MetaTranslatorMessage& m ) const +{ + int delta = qstrcmp( context(), m.context() ); + if ( delta == 0 ) { + delta = qstrcmp( sourceText(), m.sourceText() ); + if ( delta == 0 ) + delta = qstrcmp( comment(), m.comment() ); + } + return delta < 0; +} + +MetaTranslator::MetaTranslator() +{ + clear(); +} + +MetaTranslator::MetaTranslator( const MetaTranslator& tor ) + : mm( tor.mm ), codecName( tor.codecName ), codec( tor.codec ) +{ +} + +MetaTranslator& MetaTranslator::operator=( const MetaTranslator& tor ) +{ + mm = tor.mm; + codecName = tor.codecName; + codec = tor.codec; + return *this; +} + +void MetaTranslator::clear() +{ + mm.clear(); + codecName = "ISO-8859-1"; + codec = 0; +} + +bool MetaTranslator::load( const QString& filename ) +{ + QFile f( filename ); + if ( !f.open(QIODevice::ReadOnly) ) + return false; + + QXmlInputSource in( &f ); + QXmlSimpleReader reader; + reader.setFeature( "http://xml.org/sax/features/namespaces", false ); + reader.setFeature( "http://xml.org/sax/features/namespace-prefixes", true ); + TsHandler *hand = new TsHandler( this ); + reader.setContentHandler( static_cast(hand) ); + reader.setErrorHandler( static_cast(hand) ); + + bool ok = reader.parse( in ); + reader.setContentHandler( 0 ); + reader.setErrorHandler( 0 ); + + m_language = hand->language(); + makeFileNamesAbsolute(QFileInfo(filename).absoluteDir()); + + delete hand; + f.close(); + return ok; +} + +bool MetaTranslator::save( const QString& filename ) const +{ + QFile f( filename ); + if ( !f.open(QIODevice::WriteOnly) ) + return false; + + QTextStream t( &f ); + t.setCodec( QTextCodec::codecForName("ISO-8859-1") ); + + //### The xml prolog allows processors to easily detect the correct encoding + t << "\n\n"; + if ( codecName != "ISO-8859-1" ) + t << "" << codecName << "\n"; + TMM::ConstIterator m = mm.begin(); + while ( m != mm.end() ) { + TMMInv inv; + TMMInv::Iterator i; + bool contextIsUtf8 = m.key().utf8(); + QByteArray context = m.key().context(); + QByteArray comment = ""; + + do { + if (QByteArray(m.key().sourceText()) == ContextComment) { + if ( m.key().type() != MetaTranslatorMessage::Obsolete ) { + contextIsUtf8 = m.key().utf8(); + comment = QByteArray(m.key().comment()); + } + } else { + inv.insert( *m, m.key() ); + } + } while ( ++m != mm.end() && QByteArray(m.key().context()) == context ); + + if ( inv.isEmpty() ) + continue; + + t << "\n"; + t << " " << evilBytes( context, contextIsUtf8 ) + << "\n"; + if ( !comment.isEmpty() ) + t << " " << evilBytes( comment, contextIsUtf8 ) + << "\n"; + + for ( i = inv.begin(); i != inv.end(); ++i ) { + MetaTranslatorMessage msg = *i; + // no need for such noise + if ( msg.type() == MetaTranslatorMessage::Obsolete && + msg.translation().isEmpty() ) + continue; + + t << " \n"; + if (!msg.fileName().isEmpty() && msg.lineNumber() >= 0) { + QDir tsPath = QFileInfo(filename).absoluteDir(); + QString fn = tsPath.relativeFilePath(msg.fileName()).replace('\\','/'); + t << " \n"; + } + t << " " << evilBytes( msg.sourceText(), + msg.utf8() ) + << "\n"; + if ( !QByteArray(msg.comment()).isEmpty() ) + t << " " << evilBytes( msg.comment(), + msg.utf8() ) + << "\n"; + t << " "; + if (msg.isPlural()) { + t << "\n"; + QLocale::Language l; + QLocale::Country c; + languageAndCountry(m_language, &l, &c); + QStringList translns = normalizedTranslations(msg, l, c); + for (int j = 0; j < qMax(1, translns.count()); ++j) + t << " " << protect( translns.value(j).toUtf8() ) << "\n"; + t << " "; + } else { + t << protect( msg.translation().toUtf8() ); + } + t << "\n"; + t << " \n"; + } + t << "\n"; + } + t << "\n"; + f.close(); + return true; +} + +void MetaTranslator::languageAndCountry(const QString &languageCode, QLocale::Language *lang, QLocale::Country *country) +{ + QLocale locale(languageCode); + if (lang) + *lang = locale.language(); + + if (country) { + if (languageCode.indexOf(QLatin1Char('_')) != -1) { + *country = locale.country(); + } else { + *country = QLocale::AnyCountry; + } + } +} + +bool MetaTranslator::release( const QString& filename, bool verbose, + bool ignoreUnfinished, + Translator::SaveMode mode ) const +{ + Translator tor( 0 ); + int finished = 0; + int unfinished = 0; + int untranslated = 0; + TMM::ConstIterator m; + + for ( m = mm.begin(); m != mm.end(); ++m ) { + if ( m.key().type() != MetaTranslatorMessage::Obsolete ) { + if ( m.key().translation().isEmpty() ) { + untranslated++; + } else { + if ( m.key().type() == MetaTranslatorMessage::Unfinished ) + unfinished++; + else + finished++; + + QByteArray context = m.key().context(); + QByteArray sourceText = m.key().sourceText(); + QByteArray comment = m.key().comment(); + QStringList translations = m.key().translations(); + + if ( !ignoreUnfinished + || m.key().type() != MetaTranslatorMessage::Unfinished ) { + /* + Drop the comment in (context, sourceText, comment), + unless the context is empty, + unless (context, sourceText, "") already exists or + unless we already dropped the comment of (context, + sourceText, comment0). + */ + if ( comment.isEmpty() + || context.isEmpty() + || contains(context, sourceText, "") + || !tor.findMessage(context, sourceText, "").translation() + .isNull() ) { + tor.insert( m.key() ); + } else { + tor.insert( TranslatorMessage(context, sourceText, "", + QString(), -1, translations) ); + //filename and lineNumbers will be ignored from now. + } + } + } + } + } + + bool saved = tor.save( filename, mode ); + if ( saved && verbose ) + fprintf( stderr, + " %d finished, %d unfinished and %d untranslated messages\n", + finished, unfinished, untranslated ); + + return saved; +} + +QString MetaTranslator::languageCode() const +{ + return m_language; +} + +void MetaTranslator::setLanguageCode(const QString &languageCode) +{ + m_language = languageCode; +} + +bool MetaTranslator::contains( const char *context, const char *sourceText, + const char *comment ) const +{ + return mm.contains(MetaTranslatorMessage(context, sourceText, comment, QString(), 0)); +} + +MetaTranslatorMessage MetaTranslator::find( const char *context, + const char *sourceText, const char *comment ) const +{ + QMap::const_iterator it = + mm.constFind(MetaTranslatorMessage(context, sourceText, comment, QString(), 0)); + return (it == mm.constEnd() ? MetaTranslatorMessage() : it.key()); +} + +MetaTranslatorMessage MetaTranslator::find(const char *context, const char *comment, + const QString &fileName, int lineNumber) const +{ + if (lineNumber >= 0 && !fileName.isEmpty()) { + MetaTranslatorMessage m; + + for (QMap::const_iterator it = mm.constBegin(); + it != mm.constEnd(); ++it) { + m = it.key(); + int delta = qstrcmp(m.context(), context); + if (delta == 0) { + delta = qstrcmp(m.comment(), comment); + if (delta == 0) { + delta = QString::compare(m.fileName(), fileName); + if (delta == 0) { + delta = m.lineNumber() - lineNumber; + if (delta == 0) + return m; + } + } + } + } + } + return MetaTranslatorMessage(); +} + +void MetaTranslator::insert( const MetaTranslatorMessage& m ) +{ + int pos = mm.count(); + if (mm.contains(m)) { + pos = mm.value(m); + mm.remove(m); + } + mm.insert(m, pos); +} + +void MetaTranslator::stripObsoleteMessages() +{ + TMM newmm; + TMM::Iterator m = mm.begin(); + while ( m != mm.end() ) { + if ( m.key().type() != MetaTranslatorMessage::Obsolete ) + newmm.insert( m.key(), *m ); + ++m; + } + mm = newmm; +} + +void MetaTranslator::stripEmptyContexts() +{ + TMM newmm; + + TMM::Iterator m = mm.begin(); + while ( m != mm.end() ) { + if ( QByteArray(m.key().sourceText()) == ContextComment ) { + TMM::Iterator n = m; + ++n; + // the context comment is followed by other messages + if ( n != newmm.end() && + qstrcmp(m.key().context(), n.key().context()) == 0 ) + newmm.insert( m.key(), *m ); + } else { + newmm.insert( m.key(), *m ); + } + ++m; + } + mm = newmm; +} + +void MetaTranslator::makeFileNamesAbsolute(const QDir &oldPath) +{ + TMM newmm; + for (TMM::iterator m = mm.begin(); m != mm.end(); ++m) { + MetaTranslatorMessage msg = m.key(); + QString fileName = m.key().fileName(); + QFileInfo fi (fileName); + if (fi.isRelative()) { + fileName = oldPath.absoluteFilePath(fileName); + } + + msg.setFileName(fileName); + newmm.insert(msg, m.value()); + } + mm = newmm; +} + +void MetaTranslator::setCodec( const char *name ) +{ + const int latin1 = 4; + + codecName = name; + codec = QTextCodec::codecForName( name ); + if ( codec == 0 || codec->mibEnum() == latin1 ) + codec = 0; +} + +QString MetaTranslator::toUnicode( const char *str, bool utf8 ) const +{ + if ( utf8 ) + return QString::fromUtf8( str ); + else if ( codec == 0 ) + return QString( str ); + else + return codec->toUnicode( str ); +} + +QList MetaTranslator::messages() const +{ + int n = mm.count(); + TMM::ConstIterator *t = new TMM::ConstIterator[n + 1]; + TMM::ConstIterator m; + for ( m = mm.begin(); m != mm.end(); ++m ) + t[*m] = m; + + QList val; + for ( int i = 0; i < n; i++ ) + val.append( t[i].key() ); + + delete[] t; + return val; +} + +QList MetaTranslator::translatedMessages() const +{ + QList val; + TMM::ConstIterator m; + for ( m = mm.begin(); m != mm.end(); ++m ) { + if ( m.key().type() == MetaTranslatorMessage::Finished ) + val.append( m.key() ); + } + return val; +} + +// the grammatical numerus is the number of plural forms + singular forms. +// i.e english has two forms: singular og plural. +// and polish has three forms: +// 1. singular (1), +// 2. plural form 1 (numbers that ends with 2,3,4 except 12,13,14) +// 3. plural form 2 (all others) +// Thus, english returns 2, polish returns 3 +int MetaTranslator::grammaticalNumerus(QLocale::Language language, QLocale::Country country) +{ + QStringList forms; + getNumerusInfo(language, country, &forms); + return forms.count(); +} + +QStringList MetaTranslator::normalizedTranslations(const MetaTranslatorMessage& m, + QLocale::Language language, + QLocale::Country country) +{ + QStringList translations = m.translations(); + int numTranslations = 1; + if (m.isPlural()) { + numTranslations = grammaticalNumerus(language, country); + } + + // make sure that the stringlist always have the size of the language's current numerus, or 1 if its not plural + if (translations.count() > numTranslations) { + for (int i = translations.count(); i > numTranslations; --i) + translations.removeLast(); + } else if (translations.count() < numTranslations) { + for (int i = translations.count(); i < numTranslations; ++i) + translations << QString(); + } + return translations; +} diff --git a/sources/pyside2-tools/pylupdate/metatranslator.h b/sources/pyside2-tools/pylupdate/metatranslator.h new file mode 100644 index 0000000..8575351 --- /dev/null +++ b/sources/pyside2-tools/pylupdate/metatranslator.h @@ -0,0 +1,144 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2005 Trolltech AS. All rights reserved. + * Copyright (C) 2002-2007 Detlev Offenbach + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#ifndef METATRANSLATOR_H +#define METATRANSLATOR_H + +#include +#include +#include +#include +#include +#include + +QT_FORWARD_DECLARE_CLASS(QTextCodec) + +class MetaTranslatorMessage : public TranslatorMessage +{ +public: + enum Type { Unfinished, Finished, Obsolete }; + + MetaTranslatorMessage(); + MetaTranslatorMessage( const char *context, const char *sourceText, + const char *comment, + const QString &fileName, int lineNumber, + const QStringList& translations = QStringList(), + bool utf8 = false, Type type = Unfinished, + bool plural = false ); + MetaTranslatorMessage( const MetaTranslatorMessage& m ); + + MetaTranslatorMessage& operator=( const MetaTranslatorMessage& m ); + + void setType( Type nt ) { ty = nt; } + Type type() const { return ty; } + bool utf8() const { return utfeight; } + bool isPlural() const { return m_plural; } + void setPlural(bool isplural) { m_plural = isplural; } + + bool operator==( const MetaTranslatorMessage& m ) const; + bool operator!=( const MetaTranslatorMessage& m ) const + { return !operator==( m ); } + bool operator<( const MetaTranslatorMessage& m ) const; + bool operator<=( const MetaTranslatorMessage& m ) + { return !operator>( m ); } + bool operator>( const MetaTranslatorMessage& m ) const + { return this->operator<( m ); } + bool operator>=( const MetaTranslatorMessage& m ) const + { return !operator<( m ); } + +private: + bool utfeight; + Type ty; + bool m_plural; +}; + +class MetaTranslator +{ +public: + MetaTranslator(); + MetaTranslator( const MetaTranslator& tor ); + + MetaTranslator& operator=( const MetaTranslator& tor ); + + void clear(); + bool load( const QString& filename ); + bool save( const QString& filename ) const; + bool release( const QString& filename, bool verbose = false, + bool ignoreUnfinished = false, + Translator::SaveMode mode = Translator::Stripped ) const; + + bool contains( const char *context, const char *sourceText, + const char *comment ) const; + + MetaTranslatorMessage find( const char *context, const char *sourceText, + const char *comment ) const; + MetaTranslatorMessage find(const char *context, const char *comment, + const QString &fileName, int lineNumber) const; + + void insert( const MetaTranslatorMessage& m ); + + void stripObsoleteMessages(); + void stripEmptyContexts(); + + void setCodec( const char *name ); // kill me + void setCodecForTr( const char *name ) { setCodec(name); } + QTextCodec *codecForTr() const { return codec; } + QString toUnicode( const char *str, bool utf8 ) const; + + QString languageCode() const; + static void languageAndCountry(const QString &languageCode, QLocale::Language *lang, QLocale::Country *country); + void setLanguageCode(const QString &languageCode); + QList messages() const; + QList translatedMessages() const; + static int grammaticalNumerus(QLocale::Language language, QLocale::Country country); + static QStringList normalizedTranslations(const MetaTranslatorMessage& m, + QLocale::Language lang, QLocale::Country country); + +private: + void makeFileNamesAbsolute(const QDir &oldPath); + + typedef QMap TMM; + typedef QMap TMMInv; + + TMM mm; + QByteArray codecName; + QTextCodec *codec; + QString m_language; // A string beginning with a 2 or 3 letter language code (ISO 639-1 or ISO-639-2), + // followed by the optional country variant to distinguist between country-specific variations + // of the language. The language code and country code are always separated by '_' + // Note that the language part can also be a 3-letter ISO 639-2 code. + // Legal examples: + // 'pt' portuguese, assumes portuguese from portugal + // 'pt_BR' Brazilian portuguese (ISO 639-1 language code) + // 'por_BR' Brazilian portuguese (ISO 639-2 language code) +}; + +/* + This is a quick hack. The proper way to handle this would be + to extend MetaTranslator's interface. +*/ +#define ContextComment "QT_LINGUIST_INTERNAL_CONTEXT_COMMENT" + +#endif diff --git a/sources/pyside2-tools/pylupdate/numberh.cpp b/sources/pyside2-tools/pylupdate/numberh.cpp new file mode 100644 index 0000000..04f2d41 --- /dev/null +++ b/sources/pyside2-tools/pylupdate/numberh.cpp @@ -0,0 +1,240 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2006 Trolltech AS. All rights reserved. + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#include "metatranslator.h" + +#include +#include +#include +#include +#include + +typedef QMap TMM; +typedef QList TML; + +static bool isDigitFriendly( int c ) +{ + return ispunct((uchar)c) || isspace((uchar)c); +} + +static int numberLength( const char *s ) +{ + int i = 0; + + if ( isdigit((uchar)s[0]) ) { + do { + i++; + } while (isdigit((uchar)s[i]) || + (isDigitFriendly(s[i]) && + (isdigit((uchar)s[i + 1]) || + (isDigitFriendly(s[i + 1]) && isdigit((uchar)s[i + 2]))))); + } + return i; +} + +/* + Returns a version of 'key' where all numbers have been replaced by zeroes. If + there were none, returns "". +*/ +static QByteArray zeroKey( const char *key ) +{ + QByteArray zeroed; + zeroed.resize( int(strlen(key)) + 1 ); + char *z = zeroed.data(); + int i = 0, j = 0; + int len; + bool metSomething = false; + + while ( key[i] != '\0' ) { + len = numberLength( key + i ); + if ( len > 0 ) { + i += len; + z[j++] = '0'; + metSomething = true; + } else { + z[j++] = key[i++]; + } + } + z[j] = '\0'; + + if ( metSomething ) + return zeroed; + else + return ""; +} + +static QString translationAttempt( const QString& oldTranslation, + const char *oldSource, + const char *newSource ) +{ + int p = zeroKey( oldSource ).count( '0' ); + int oldSourceLen = qstrlen( oldSource ); + QString attempt; + QStringList oldNumbers; + QStringList newNumbers; + QVector met( p ); + QVector matchedYet( p ); + int i, j; + int k = 0, ell, best; + int m, n; + int pass; + + /* + This algorithm is hard to follow, so we'll consider an example + all along: oldTranslation is "XeT 3.0", oldSource is "TeX 3.0" + and newSource is "XeT 3.1". + + First, we set up two tables: oldNumbers and newNumbers. In our + example, oldNumber[0] is "3.0" and newNumber[0] is "3.1". + */ + for ( i = 0, j = 0; i < oldSourceLen; i++, j++ ) { + m = numberLength( oldSource + i ); + n = numberLength( newSource + j ); + if ( m > 0 ) { + oldNumbers.append( QByteArray(oldSource + i, m + 1) ); + newNumbers.append( QByteArray(newSource + j, n + 1) ); + i += m; + j += n; + met[k] = false; + matchedYet[k] = 0; + k++; + } + } + + /* + We now go over the old translation, "XeT 3.0", one letter at a + time, looking for numbers found in oldNumbers. Whenever such a + number is met, it is replaced with its newNumber equivalent. In + our example, the "3.0" of "XeT 3.0" becomes "3.1". + */ + for ( i = 0; i < (int) oldTranslation.length(); i++ ) { + attempt += oldTranslation[i]; + for ( k = 0; k < p; k++ ) { + if ( oldTranslation[i] == oldNumbers[k][matchedYet[k]] ) + matchedYet[k]++; + else + matchedYet[k] = 0; + } + + /* + Let's find out if the last character ended a match. We make + two passes over the data. In the first pass, we try to + match only numbers that weren't matched yet; if that fails, + the second pass does the trick. This is useful in some + suspicious cases, flagged below. + */ + for ( pass = 0; pass < 2; pass++ ) { + best = p; // an impossible value + for ( k = 0; k < p; k++ ) { + if ( (!met[k] || pass > 0) && + matchedYet[k] == (int) oldNumbers[k].length() && + numberLength(oldTranslation.toLatin1().constData() + (i + 1) - + matchedYet[k]) == matchedYet[k] ) { + // the longer the better + if ( best == p || matchedYet[k] > matchedYet[best] ) + best = k; + } + } + if ( best != p ) { + attempt.truncate( attempt.length() - matchedYet[best] ); + attempt += newNumbers[best]; + met[best] = true; + for ( k = 0; k < p; k++ ) + matchedYet[k] = 0; + break; + } + } + } + + /* + We flag two kinds of suspicious cases. They are identified as + such with comments such as "{2000?}" at the end. + + Example of the first kind: old source text "TeX 3.0" translated + as "XeT 2.0" is flagged "TeX 2.0 {3.0?}", no matter what the + new text is. + */ + for ( k = 0; k < p; k++ ) { + if ( !met[k] ) + attempt += QString( " {" ) + newNumbers[k] + QString( "?}" ); + } + + /* + Example of the second kind: "1 of 1" translated as "1 af 1", + with new source text "1 of 2", generates "1 af 2 {1 or 2?}" + because it's not clear which of "1 af 2" and "2 af 1" is right. + */ + for ( k = 0; k < p; k++ ) { + for ( ell = 0; ell < p; ell++ ) { + if ( k != ell && oldNumbers[k] == oldNumbers[ell] && + newNumbers[k] < newNumbers[ell] ) + attempt += QString( " {" ) + newNumbers[k] + QString( " or " ) + + newNumbers[ell] + QString( "?}" ); + } + } + return attempt; +} + +/* + Augments a MetaTranslator with translations easily derived from + similar existing (probably obsolete) translations. + + For example, if "TeX 3.0" is translated as "XeT 3.0" and "TeX 3.1" + has no translation, "XeT 3.1" is added to the translator and is + marked Unfinished. + + Returns the number of additional messages that this heuristic translated. +*/ +int applyNumberHeuristic( MetaTranslator *tor ) +{ + TMM translated, untranslated; + TMM::Iterator t, u; + TML all = tor->messages(); + TML::Iterator it; + int inserted = 0; + + for ( it = all.begin(); it != all.end(); ++it ) { + bool hasTranslation = (*it).isTranslated(); + if ( (*it).type() == MetaTranslatorMessage::Unfinished ) { + if ( !hasTranslation ) + untranslated.insert(QByteArray((*it).context()) + "\n" + (*it).sourceText() + "\n" + + (*it).comment(), *it); + } else if ( hasTranslation && (*it).translations().count() == 1 ) { + translated.insert( zeroKey((*it).sourceText()), *it ); + } + } + + for ( u = untranslated.begin(); u != untranslated.end(); ++u ) { + t = translated.find( zeroKey((*u).sourceText()) ); + if ( t != translated.end() && !t.key().isEmpty() && + qstrcmp((*t).sourceText(), (*u).sourceText()) != 0 ) { + MetaTranslatorMessage m( *u ); + m.setTranslation(translationAttempt((*t).translation(), (*t).sourceText(), + (*u).sourceText())); + tor->insert( m ); + inserted++; + } + } + return inserted; +} diff --git a/sources/pyside2-tools/pylupdate/proparser.cpp b/sources/pyside2-tools/pylupdate/proparser.cpp new file mode 100644 index 0000000..54ee43b --- /dev/null +++ b/sources/pyside2-tools/pylupdate/proparser.cpp @@ -0,0 +1,209 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2005 Trolltech AS. All rights reserved. + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#include "proparser.h" + +#include +#include +#include +#include +#include +#include + +#ifdef Q_OS_UNIX +#include +#endif + +#ifdef Q_OS_WIN32 +#define QT_POPEN _popen +#else +#define QT_POPEN popen +#endif + +QString loadFile( const QString &fileName ) +{ + QFile file( fileName ); + if ( !file.open(QIODevice::ReadOnly) ) { + fprintf( stderr, "error: Cannot load '%s': %s\n", + file.fileName().toLatin1().constData(), + file.errorString().toLatin1().constData() ); + return QString(); + } + + QTextStream in( &file ); + return in.readAll(); +} + +QMap proFileTagMap( const QString& text ) +{ + QString t = text; + + QMap tagMap; + bool stillProcess = true; // If include() has a $$tag then we need to reprocess + + while (stillProcess) { + /* + Strip any commments before we try to include. We + still need to do it after we include to make sure the + included file does not have comments + */ + t.replace( QRegExp(QString("#[^\n]*\n")), QString(" ") ); + + /* + Process include() commands. + $$PWD is a special case so we have to change it while + we know where the included file is. + */ + QRegExp callToInclude("include\\s*\\(\\s*([^()\\s]+)\\s*\\)"); + int i = 0; + while ( (i = callToInclude.indexIn(t, i)) != -1 ) { + bool doneWithVar = false; + QString fileName = callToInclude.cap(1); + QString after = fileName.replace("$$PWD", QDir::currentPath()); + if (!tagMap.isEmpty() && after.contains("$$")) { + QRegExp var( "\\$\\$[({]?([a-zA-Z0-9_]+)[)}]?" ); + int ii = 0; + while ((ii = after.indexOf(var, ii)) != -1) { + if (tagMap.contains(var.cap(1))) { + after.replace(ii, var.cap(0).length(), tagMap[var.cap(1)]); + } else { // Couldn't find it + doneWithVar = true; + break; + } + } + + } + if (doneWithVar || !after.contains("$$")) { + after = loadFile(after); + QFileInfo fi(callToInclude.cap(1)); + after.replace("$$PWD", fi.path()); + t.replace( i, callToInclude.matchedLength(), after ); + } + i += after.length(); + } + + /* + Strip comments, merge lines ending with backslash, add + spaces around '=' and '+=', replace '\n' with ';', and + simplify white spaces. + */ + t.replace( QRegExp(QString("#[^\n]*\n")), QString(" ") ); + t.replace( QRegExp(QString("\\\\[^\n\\S]*\n")), QString(" ") ); + t.replace( "=", QString(" = ") ); + t.replace( "+ =", QString(" += ") ); + t.replace( "\n", QString(";") ); + t.replace( "\r", QString("") ); // remove carriage return + t = t.simplified(); + + /* + Populate tagMap with 'key = value' entries. + */ + QStringList lines = t.split(';', QString::SkipEmptyParts); + QStringList::Iterator line; + for ( line = lines.begin(); line != lines.end(); ++line ) { + QStringList toks = (*line).split(' ', QString::SkipEmptyParts); + + if ( toks.count() >= 3 && + (toks[1] == QString("=") || toks[1] == QString("+=") || + toks[1] == QString("*=")) ) { + QString tag = toks.first(); + int k = tag.lastIndexOf( QChar(':') ); // as in 'unix:' + if ( k != -1 ) + tag = tag.mid( k + 1 ); + toks.erase( toks.begin() ); + + QString action = toks.first(); + toks.erase( toks.begin() ); + + if ( tagMap.contains(tag) ) { + if ( action == QString("=") ) + tagMap.insert( tag, toks.join(" ") ); + else + tagMap[tag] += QChar( ' ' ) + toks.join( " " ); + } else { + tagMap[tag] = toks.join( " " ); + } + } + } + /* + Expand $$variables within the 'value' part of a 'key = value' + pair. + */ + QRegExp var( "\\$\\$[({]?([a-zA-Z0-9_]+)[)}]?" ); + QMap::Iterator it; + for ( it = tagMap.begin(); it != tagMap.end(); ++it ) { + int i = 0; + while ( (i = var.indexIn((*it), i)) != -1 ) { + int len = var.matchedLength(); + QString invocation = var.cap(1); + QString after; + + if ( invocation == "system" ) { + // skip system(); it will be handled in the next pass + ++i; + } else { + if ( tagMap.contains(invocation) ) + after = tagMap[invocation]; + else if (invocation.toLower() == "pwd") + after = QDir::currentPath(); + (*it).replace( i, len, after ); + i += after.length(); + } + } + } + + /* + Execute system() calls. + */ + QRegExp callToSystem( "\\$\\$system\\s*\\(([^()]*)\\)" ); + for ( it = tagMap.begin(); it != tagMap.end(); ++it ) { + int i = 0; + while ( (i = callToSystem.indexIn((*it), i)) != -1 ) { + /* + This code is stolen from qmake's project.cpp file. + Ideally we would use the same parser, so we wouldn't + have this code duplication. + */ + QString after; + char buff[256]; + FILE *proc = QT_POPEN( callToSystem.cap(1).toLatin1().constData(), "r" ); + while ( proc && !feof(proc) ) { + int read_in = int(fread( buff, 1, 255, proc )); + if ( !read_in ) + break; + for ( int i = 0; i < read_in; i++ ) { + if ( buff[i] == '\n' || buff[i] == '\t' ) + buff[i] = ' '; + } + buff[read_in] = '\0'; + after += buff; + } + (*it).replace( i, callToSystem.matchedLength(), after ); + i += after.length(); + } + } + stillProcess = callToInclude.indexIn(t) != -1; + } + return tagMap; +} diff --git a/sources/pyside2-tools/pylupdate/proparser.h b/sources/pyside2-tools/pylupdate/proparser.h new file mode 100644 index 0000000..742080d --- /dev/null +++ b/sources/pyside2-tools/pylupdate/proparser.h @@ -0,0 +1,34 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2005 Trolltech AS. All rights reserved. + * Copyright (C) 2002-2007 Detlev Offenbach + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#ifndef PROPARSER_H +#define PROPARSER_H + +#include +#include + +QMap proFileTagMap( const QString& text ); + +#endif diff --git a/sources/pyside2-tools/pylupdate/pyside2-lupdate.1 b/sources/pyside2-tools/pylupdate/pyside2-lupdate.1 new file mode 100644 index 0000000..d5e95e0 --- /dev/null +++ b/sources/pyside2-tools/pylupdate/pyside2-lupdate.1 @@ -0,0 +1,27 @@ +.TH PYSIDE-LUPDATE "1" "December 2010" "pyside2-lupdate" "User Commands" +.SH NAME +pyside2\-lupdate \- extracts translatable messages from Qt UI files and Python source code. +.SH DESCRIPTION +.SS "Usage:" +.IP +pyside2\-lupdate [options] project\-file +.IP +pyside2\-lupdate [options] source\-files \-ts ts\-files +.SS "Options:" +.TP +\fB\-noobsolete +Drop all obsolete strings +.TP +\fB\-verbose +Explain what is being done +.TP +\fB\-version +Display the version of pyside2-lupdate and exit +.TP +\fB\-help +Display this information and exit +.SH COPYRIGHT +Copyright \(co 2010 Nokia Corporation and/or its subsidiary(\fB\-ies\fR) +.SH AUTHOR +.PP +This manpage was written by Marcelo Lira , on the 29. December 2010. diff --git a/sources/pyside2-tools/pylupdate/sametexth.cpp b/sources/pyside2-tools/pylupdate/sametexth.cpp new file mode 100644 index 0000000..fa5cc5a --- /dev/null +++ b/sources/pyside2-tools/pylupdate/sametexth.cpp @@ -0,0 +1,87 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2006 Trolltech AS. All rights reserved. + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#include "metatranslator.h" + +#include +#include + +typedef QMap TMM; +typedef QList TML; + +/* + Augments a MetaTranslator with trivially derived translations. + + For example, if "Enabled:" is consistendly translated as "Eingeschaltet:" no + matter the context or the comment, "Eingeschaltet:" is added as the + translation of any untranslated "Enabled:" text and is marked Unfinished. + + Returns the number of additional messages that this heuristic translated. +*/ + +int applySameTextHeuristic( MetaTranslator *tor ) +{ + TMM translated; + TMM avoid; + TMM::Iterator t; + TML untranslated; + TML::Iterator u; + TML all = tor->messages(); + TML::Iterator it; + int inserted = 0; + + for ( it = all.begin(); it != all.end(); ++it ) { + if ( (*it).type() == MetaTranslatorMessage::Unfinished ) { + if ( !(*it).isTranslated() ) + untranslated.append( *it ); + } else { + QByteArray key = (*it).sourceText(); + t = translated.find( key ); + if ( t != translated.end() ) { + /* + The same source text is translated at least two + different ways. Do nothing then. + */ + if ( (*t).translations() != (*it).translations() ) { + translated.remove( key ); + avoid.insert( key, *it ); + } + } else if ( !avoid.contains(key) && (*it).isTranslated() ) { + translated.insert( key, *it ); + } + } + } + + for ( u = untranslated.begin(); u != untranslated.end(); ++u ) { + QByteArray key = (*u).sourceText(); + t = translated.find( key ); + if ( t != translated.end() ) { + MetaTranslatorMessage m( *u ); + m.setTranslations( (*t).translations() ); + tor->insert( m ); + inserted++; + } + } + return inserted; +} diff --git a/sources/pyside2-tools/pylupdate/simtexth.cpp b/sources/pyside2-tools/pylupdate/simtexth.cpp new file mode 100644 index 0000000..b8d8d44 --- /dev/null +++ b/sources/pyside2-tools/pylupdate/simtexth.cpp @@ -0,0 +1,256 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2006 Trolltech AS. All rights reserved. + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#include "simtexth.h" +#include "metatranslator.h" + +#include +#include + +#include + +typedef QList TML; + +/* + How similar are two texts? The approach used here relies on co-occurrence + matrices and is very efficient. + + Let's see with an example: how similar are "here" and "hither"? The + co-occurrence matrix M for "here" is M[h,e] = 1, M[e,r] = 1, M[r,e] = 1, and 0 + elsewhere; the matrix N for "hither" is N[h,i] = 1, N[i,t] = 1, ..., + N[h,e] = 1, N[e,r] = 1, and 0 elsewhere. The union U of both matrices is the + matrix U[i,j] = max { M[i,j], N[i,j] }, and the intersection V is + V[i,j] = min { M[i,j], N[i,j] }. The score for a pair of texts is + + score = (sum of V[i,j] over all i, j) / (sum of U[i,j] over all i, j), + + a formula suggested by Arnt Gulbrandsen. Here we have + + score = 2 / 6, + + or one third. + + The implementation differs from this in a few details. Most importantly, + repetitions are ignored; for input "xxx", M[x,x] equals 1, not 2. +*/ + +/* + Every character is assigned to one of 20 buckets so that the co-occurrence + matrix requires only 20 * 20 = 400 bits, not 256 * 256 = 65536 bits or even + more if we want the whole Unicode. Which character falls in which bucket is + arbitrary. + + The second half of the table is a replica of the first half, because of + laziness. +*/ +static const int indexOf[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +// ! " # $ % & ' ( ) * + , - . / + 0, 2, 6, 7, 10, 12, 15, 19, 2, 6, 7, 10, 12, 15, 19, 0, +// 0 1 2 3 4 5 6 7 8 9 : ; < = > ? + 1, 3, 4, 5, 8, 9, 11, 13, 14, 16, 2, 6, 7, 10, 12, 15, +// @ A B C D E F G H I J K L M N O + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 6, 10, 11, 12, 13, 14, +// P Q R S T U V W X Y Z [ \ ] ^ _ + 15, 12, 16, 17, 18, 19, 2, 10, 15, 7, 19, 2, 6, 7, 10, 0, +// ` a b c d e f g h i j k l m n o + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 6, 10, 11, 12, 13, 14, +// p q r s t u v w x y z { | } ~ + 15, 12, 16, 17, 18, 19, 2, 10, 15, 7, 19, 2, 6, 7, 10, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 6, 7, 10, 12, 15, 19, 2, 6, 7, 10, 12, 15, 19, 0, + 1, 3, 4, 5, 8, 9, 11, 13, 14, 16, 2, 6, 7, 10, 12, 15, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 6, 10, 11, 12, 13, 14, + 15, 12, 16, 17, 18, 19, 2, 10, 15, 7, 19, 2, 6, 7, 10, 0, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 6, 10, 11, 12, 13, 14, + 15, 12, 16, 17, 18, 19, 2, 10, 15, 7, 19, 2, 6, 7, 10, 0 +}; + +/* + The entry bitCount[i] (for i between 0 and 255) is the number of bits used to + represent i in binary. +*/ +static const int bitCount[256] = { + 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 +}; + +struct CoMatrix +{ + /* + The matrix has 20 * 20 = 400 entries. This requires 50 bytes, or 13 + words. Some operations are performed on words for more efficiency. + */ + union { + quint8 b[52]; + quint32 w[13]; + }; + + CoMatrix() { memset( b, 0, 52 ); } + CoMatrix( const char *text ) { + char c = '\0', d; + memset( b, 0, 52 ); + /* + The Knuth books are not in the office only for show; they help make + loops 30% faster and 20% as readable. + */ + while ( (d = *text) != '\0' ) { + setCoocc( c, d ); + if ( (c = *++text) != '\0' ) { + setCoocc( d, c ); + text++; + } + } + } + + void setCoocc( char c, char d ) { + int k = indexOf[(uchar) c] + 20 * indexOf[(uchar) d]; + b[k >> 3] |= k & 0x7; + } + + int worth() const { + int w = 0; + for ( int i = 0; i < 50; i++ ) + w += bitCount[b[i]]; + return w; + } +}; + +static inline CoMatrix reunion( const CoMatrix& m, const CoMatrix& n ) +{ + CoMatrix p; + for ( int i = 0; i < 13; i++ ) + p.w[i] = m.w[i] | n.w[i]; + return p; +} + +static inline CoMatrix intersection( const CoMatrix& m, const CoMatrix& n ) +{ + CoMatrix p; + for ( int i = 0; i < 13; i++ ) + p.w[i] = m.w[i] & n.w[i]; + return p; +} + +StringSimilarityMatcher::StringSimilarityMatcher(const QString &stringToMatch) +{ + m_cm = new CoMatrix( stringToMatch.toLatin1().constData() ); + m_length = stringToMatch.length(); +} + +int StringSimilarityMatcher::getSimilarityScore(const QString &strCandidate) +{ + CoMatrix cmTarget( strCandidate.toLatin1().constData() ); + int targetLen = strCandidate.length(); + int delta = qAbs( m_length - targetLen ); + + int score = ( (intersection(*m_cm, cmTarget).worth() + 1) << 10 ) / + ( reunion(*m_cm, cmTarget).worth() + (delta << 1) + 1 ); + + return score; +} + +StringSimilarityMatcher::~StringSimilarityMatcher() +{ + delete m_cm; +} + +/** + * Checks how similar two strings are. + * The return value is the score, and a higher score is more similar than one with a low score. + * Linguist considers a score over 190 to be a good match. + * \sa StringSimilarityMatcher + */ +int getSimilarityScore(const QString &str1, const char* str2) +{ + CoMatrix cmTarget( str2 ); + int targetLen = qstrlen( str2 ); + CoMatrix cm( str1.toLatin1().constData() ); + int delta = qAbs( (int) str1.length() - targetLen ); + + int score = ( (intersection(cm, cmTarget).worth() + 1) << 10 ) / + ( reunion(cm, cmTarget).worth() + (delta << 1) + 1 ); + + return score; +} + +CandidateList similarTextHeuristicCandidates( const MetaTranslator *tor, + const char *text, + int maxCandidates ) +{ + QList scores; + CandidateList candidates; + + TML all = tor->translatedMessages(); + + foreach ( MetaTranslatorMessage mtm, all ) { + if ( mtm.type() == MetaTranslatorMessage::Unfinished || + mtm.translation().isEmpty() ) + continue; + + QString s = tor->toUnicode( mtm.sourceText(), mtm.utf8() ); + int score = getSimilarityScore(s, text); + + if ( (int) candidates.count() == maxCandidates && + score > scores[maxCandidates - 1] ) + candidates.removeAt( candidates.size()-1 ); + if ( (int) candidates.count() < maxCandidates && score >= textSimilarityThreshold ) { + Candidate cand( s, mtm.translation() ); + + int i; + for ( i = 0; i < (int) candidates.size(); i++ ) { + if ( score >= scores.at(i) ) { + if ( score == scores.at(i) ) { + if ( candidates.at(i) == cand ) + goto continue_outer_loop; + } else { + break; + } + } + } + scores.insert( i, score ); + candidates.insert( i, cand ); + } + continue_outer_loop: + ; + } + return candidates; +} diff --git a/sources/pyside2-tools/pylupdate/simtexth.h b/sources/pyside2-tools/pylupdate/simtexth.h new file mode 100644 index 0000000..5cdd12c --- /dev/null +++ b/sources/pyside2-tools/pylupdate/simtexth.h @@ -0,0 +1,77 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2006 Trolltech AS. All rights reserved. + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#ifndef SIMTEXTH_H +#define SIMTEXTH_H + +const int textSimilarityThreshold = 190; + +#include +#include + +class MetaTranslator; + +struct Candidate { + QString source; + QString target; + + Candidate() { } + Candidate( const QString& source0, const QString& target0 ) + : source( source0 ), target( target0 ) { } +}; + +inline bool operator==( const Candidate& c, const Candidate& d ) { + return c.target == d.target && c.source == d.source; +} +inline bool operator!=( const Candidate& c, const Candidate& d ) { + return !operator==( c, d ); +} + +typedef QList CandidateList; + +struct CoMatrix; +/** + * This class is more efficient for searching through a large array of candidate strings, since we only + * have to construct the CoMatrix for the \a stringToMatch once, + * after that we just call getSimilarityScore(strCandidate). + * \sa getSimilarityScore + */ +class StringSimilarityMatcher { +public: + StringSimilarityMatcher(const QString &stringToMatch); + ~StringSimilarityMatcher(); + int getSimilarityScore(const QString &strCandidate); + +private: + CoMatrix *m_cm; + int m_length; +}; + +int getSimilarityScore(const QString &str1, const char* str2); + +CandidateList similarTextHeuristicCandidates( const MetaTranslator *tor, + const char *text, + int maxCandidates ); + +#endif diff --git a/sources/pyside2-tools/pylupdate/translator.cpp b/sources/pyside2-tools/pylupdate/translator.cpp new file mode 100644 index 0000000..7a90770 --- /dev/null +++ b/sources/pyside2-tools/pylupdate/translator.cpp @@ -0,0 +1,1184 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2005 Trolltech AS. All rights reserved. + * Copyright (C) 2002-2007 Detlev Offenbach + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#include "translator.h" + +#ifndef QT_NO_TRANSLATION + +#include "qfileinfo.h" +#include "qstring.h" +#include "qcoreapplication.h" +#include "qdatastream.h" +#include "qfile.h" +#include "qmap.h" +#include "qalgorithms.h" +#include "qhash.h" +#include "qglobal.h" + +// most of the headers below are already included in qplatformdefs.h +// also this lacks Large File support but that's probably irrelevant +#if defined(QT_USE_MMAP) +// for mmap +#include +#include +#endif + +#include + +/* +$ mcookie +3cb86418caef9c95cd211cbf60a1bddd +$ +*/ + +// magic number for the file +static const int MagicLength = 16; +static const uchar magic[MagicLength] = { + 0x3c, 0xb8, 0x64, 0x18, 0xca, 0xef, 0x9c, 0x95, + 0xcd, 0x21, 0x1c, 0xbf, 0x60, 0xa1, 0xbd, 0xdd +}; + +static uint elfHash(const char * name) +{ + const uchar *k; + uint h = 0; + uint g; + + if (name) { + k = (const uchar *) name; + while (*k) { + h = (h << 4) + *k++; + if ((g = (h & 0xf0000000)) != 0) + h ^= g >> 24; + h &= ~g; + } + } + if (!h) + h = 1; + return h; +} + +extern bool qt_detectRTLLanguage(); + +class TranslatorPrivate +{ +public: + struct Offset { + Offset() + : h(0), o(0) { } + Offset(const TranslatorMessage& m, int offset) + : h(m.hash()), o(offset) { } + + bool operator<(const Offset &other) const { + return (h != other.h) ? h < other.h : o < other.o; + } + bool operator==(const Offset &other) const { + return h == other.h && o == other.o; + } + uint h; + uint o; + }; + + enum { Contexts = 0x2f, Hashes = 0x42, Messages = 0x69 }; + + TranslatorPrivate(Translator *qq) : q(qq), unmapPointer(0), unmapLength(0) {} + // Translator must finalize this before deallocating it + + Translator *q; + // for mmap'ed files, this is what needs to be unmapped. + char *unmapPointer; + unsigned int unmapLength; + + // for squeezed but non-file data, this is what needs to be deleted + QByteArray messageArray; + QByteArray offsetArray; + QByteArray contextArray; + +#ifndef QT_NO_TRANSLATION_BUILDER + QMap messages; +#endif + + bool do_load(const uchar *data, int len); + +}; + + +/*! + \class Translator + + \brief The Translator class provides internationalization support for text + output. + + \ingroup i18n + \ingroup environment + \mainclass + + An object of this class contains a set of TranslatorMessage + objects, each of which specifies a translation from a source + language to a target language. Translator provides functions to + look up translations, add new ones, remove them, load and save + them, etc. + + The most common use of Translator is to: load a translator file + created with \l{Qt Linguist Manual}, install it using + QApplication::installTranslator(), and use it via QObject::tr(). + For example: + + \code + int main(int argc, char ** argv) + { + QApplication app(argc, argv); + + Translator translator(0); + translator.load("french.qm", "."); + app.installTranslator(&translator); + + MyWidget m; + app.setMainWidget(&m); + m.show(); + + return app.exec(); + } + \endcode + Note that the translator must be created \e before the + application's main window. + + Most applications will never need to do anything else with this + class. The other functions provided by this class are useful for + applications that work on translator files. + + We call a translation a "messsage". For this reason, translation + files are sometimes referred to as "message files". + + It is possible to lookup a translation using findMessage() (as + tr() and QApplication::translate() do) and contains(), to insert a + new translation messsage using insert(), and to remove one using + remove(). + + Translation tools often need more information than the bare source + text and translation, for example, context information to help + the translator. But end-user programs that are using translations + usually only need lookup. To cater for these different needs, + Translator can use stripped translator files that use the minimum + of memory and which support little more functionality than + findMessage(). + + Thus, load() may not load enough information to make anything more + than findMessage() work. save() has an argument indicating + whether to save just this minimum of information or to save + everything. + + "Everything" means that for each translation item the following + information is kept: + + \list + \i The \e {translated text} - the return value from tr(). + \i The input key: + \list + \i The \e {source text} - usually the argument to tr(). + \i The \e context - usually the class name for the tr() caller. + \i The \e comment - a comment that helps disambiguate different uses + of the same text in the same context. + \endlist + \endlist + + The minimum for each item is just the information necessary for + findMessage() to return the right text. This may include the + source, context and comment, but usually it is just a hash value + and the translated text. + + For example, the "Cancel" in a dialog might have "Anuluj" when the + program runs in Polish (in this case the source text would be + "Cancel"). The context would (normally) be the dialog's class + name; there would normally be no comment, and the translated text + would be "Anuluj". + + But it's not always so simple. The Spanish version of a printer + dialog with settings for two-sided printing and binding would + probably require both "Activado" and "Activada" as translations + for "Enabled". In this case the source text would be "Enabled" in + both cases, and the context would be the dialog's class name, but + the two items would have disambiguating comments such as + "two-sided printing" for one and "binding" for the other. The + comment enables the translator to choose the appropriate gender + for the Spanish version, and enables Qt to distinguish between + translations. + + Note that when Translator loads a stripped file, most functions + do not work. The functions that do work with stripped files are + explicitly documented as such. + + \sa TranslatorMessage QApplication::installTranslator() + QApplication::removeTranslator() QObject::tr() QApplication::translate() +*/ + +/*! + \enum Translator::SaveMode + + This enum type defines how Translator writes translation + files. There are two modes: + + \value Everything files are saved with all available information + \value Stripped files are saved with just enough information for + end-user applications + + Note that when Translator loads a stripped file, most functions do + not work. The functions that do work with stripped files are + explicitly documented as such. +*/ + +/*! + Constructs an empty message file object with parent \a parent that + is not connected to any file. +*/ + +Translator::Translator(QObject * parent) + : QTranslator(parent) +{ + d = new TranslatorPrivate(this); +} + +/*! + Destroys the object and frees any allocated resources. +*/ + +Translator::~Translator() +{ + if (QCoreApplication::instance()) + QCoreApplication::instance()->removeTranslator(this); + clear(); + delete d; +} + +/*! + Loads \a filename + \a suffix (".qm" if the \a suffix is + not specified), which may be an absolute file name or relative + to \a directory. The previous contents of this translator object + is discarded. + + If the file name does not exist, other file names are tried + in the following order: + + \list 1 + \i File name without \a suffix appended. + \i File name with text after a character in \a search_delimiters + stripped ("_." is the default for \a search_delimiters if it is + an empty string) and \a suffix. + \i File name stripped without \a suffix appended. + \i File name stripped further, etc. + \endlist + + For example, an application running in the fr_CA locale + (French-speaking Canada) might call load("foo.fr_ca", + "/opt/foolib"). load() would then try to open the first existing + readable file from this list: + + \list 1 + \i /opt/foolib/foo.fr_ca.qm + \i /opt/foolib/foo.fr_ca + \i /opt/foolib/foo.fr.qm + \i /opt/foolib/foo.fr + \i /opt/foolib/foo.qm + \i /opt/foolib/foo + \endlist + + \sa save() +*/ + +bool Translator::load(const QString & filename, const QString & directory, + const QString & search_delimiters, + const QString & suffix) +{ + clear(); + + QString prefix; + + if (filename[0] == QLatin1Char('/') +#ifdef Q_WS_WIN + || (filename[0].isLetter() && filename[1] == QLatin1Char(':')) || filename[0] == QLatin1Char('\\') +#endif + ) + prefix = QLatin1String(""); + else + prefix = directory; + + if (prefix.length()) { + if (prefix[int(prefix.length()-1)] != QLatin1Char('/')) + prefix += QLatin1Char('/'); + } + + QString fname = filename; + QString realname; + QString delims; + delims = search_delimiters.isNull() ? QString::fromLatin1("_.") : search_delimiters; + + for (;;) { + QFileInfo fi; + + realname = prefix + fname + (suffix.isNull() ? QString::fromLatin1(".qm") : suffix); + fi.setFile(realname); + if (fi.isReadable()) + break; + + realname = prefix + fname; + fi.setFile(realname); + if (fi.isReadable()) + break; + + int rightmost = 0; + for (int i = 0; i < (int)delims.length(); i++) { + int k = fname.lastIndexOf(delims[i]); + if (k > rightmost) + rightmost = k; + } + + // no truncations? fail + if (rightmost == 0) + return false; + + fname.truncate(rightmost); + } + + // realname is now the fully qualified name of a readable file. + + bool ok = false; + +#ifdef QT_USE_MMAP + +#ifndef MAP_FILE +#define MAP_FILE 0 +#endif +#ifndef MAP_FAILED +#define MAP_FAILED -1 +#endif + + int fd = -1; + if (!realname.startsWith(QLatin1String(":"))) + fd = QT_OPEN(QFile::encodeName(realname), O_RDONLY, +#if defined(Q_OS_WIN) + _S_IREAD | _S_IWRITE +#else + 0666 +#endif + ); + if (fd >= 0) { + struct stat st; + if (!fstat(fd, &st)) { + char *ptr; + ptr = reinterpret_cast( + mmap(0, st.st_size, // any address, whole file + PROT_READ, // read-only memory + MAP_FILE | MAP_PRIVATE, // swap-backed map from file + fd, 0)); // from offset 0 of fd + if (ptr && ptr != reinterpret_cast(MAP_FAILED)) { + d->unmapPointer = ptr; + d->unmapLength = st.st_size; + ok = true; + } + } + ::close(fd); + } +#endif // QT_USE_MMAP + + if (!ok) { + QFile file(realname); + if (!file.exists()) + return false; + d->unmapLength = file.size(); + d->unmapPointer = new char[d->unmapLength]; + + if (file.open(QIODevice::ReadOnly)) + ok = (d->unmapLength == (uint)file.read(d->unmapPointer, d->unmapLength)); + + if (!ok) { + delete [] d->unmapPointer; + d->unmapPointer = 0; + d->unmapLength = 0; + return false; + } + } + + return d->do_load(reinterpret_cast(d->unmapPointer), d->unmapLength); +} + +/*! + \overload + \fn bool Translator::load(const uchar *data, int len) + + Loads the .qm file data \a data of length \a len into the + translator. + + The data is not copied. The caller must be able to guarantee that \a data + will not be deleted or modified. +*/ +bool Translator::load(const uchar *data, int len) +{ + clear(); + return d->do_load(data, len); +} + +bool TranslatorPrivate::do_load(const uchar *data, int len) +{ + if (len < MagicLength || memcmp(data, magic, MagicLength) != 0) { + q->clear(); + return false; + } + + QByteArray array = QByteArray::fromRawData((const char *) data, len); + QDataStream s(&array, QIODevice::ReadOnly); + bool ok = true; + + s.device()->seek(MagicLength); + + quint8 tag = 0; + quint32 blockLen = 0; + s >> tag >> blockLen; + while (tag && blockLen) { + if ((quint32) s.device()->pos() + blockLen > (quint32) len) { + ok = false; + break; + } + + if (tag == TranslatorPrivate::Contexts) { + contextArray = QByteArray(array.constData() + s.device()->pos(), blockLen); + } else if (tag == TranslatorPrivate::Hashes) { + offsetArray = QByteArray(array.constData() + s.device()->pos(), blockLen); + } else if (tag == TranslatorPrivate::Messages) { + messageArray = QByteArray(array.constData() + s.device()->pos(), blockLen); + } + + if (!s.device()->seek(s.device()->pos() + blockLen)) { + ok = false; + break; + } + tag = 0; + blockLen = 0; + if (!s.atEnd()) + s >> tag >> blockLen; + } + + return ok; +} + +#ifndef QT_NO_TRANSLATION_BUILDER + +/*! + Saves this message file to \a filename, overwriting the previous + contents of \a filename. If \a mode is \c Everything (the + default), all the information is preserved. If \a mode is \c + Stripped, any information that is not necessary for findMessage() + is stripped away. + + \sa load() +*/ + +bool Translator::save(const QString & filename, SaveMode mode) +{ + QFile file(filename); + if (file.open(QIODevice::WriteOnly)) { + squeeze(mode); + + QDataStream s(&file); + s.writeRawData((const char *)magic, MagicLength); + quint8 tag; + + if (!d->offsetArray.isEmpty()) { + tag = (quint8)TranslatorPrivate::Hashes; + quint32 oas = (quint32)d->offsetArray.size(); + s << tag << oas; + s.writeRawData(d->offsetArray, oas); + } + if (!d->messageArray.isEmpty()) { + tag = (quint8)TranslatorPrivate::Messages; + quint32 mas = (quint32)d->messageArray.size(); + s << tag << mas; + s.writeRawData(d->messageArray, mas); + } + if (!d->contextArray.isEmpty()) { + tag = (quint8)TranslatorPrivate::Contexts; + quint32 cas = (quint32)d->contextArray.size(); + s << tag << cas; + s.writeRawData(d->contextArray, cas); + } + return true; + } + return false; +} + +#endif + +/*! + Empties this translator of all contents. + + This function works with stripped translator files. +*/ + +void Translator::clear() +{ + if (d->unmapPointer && d->unmapLength) { +#if defined(QT_USE_MMAP) + munmap(d->unmapPointer, d->unmapLength); +#else + delete [] d->unmapPointer; +#endif + d->unmapPointer = 0; + d->unmapLength = 0; + } + + d->messageArray.clear(); + d->offsetArray.clear(); + d->contextArray.clear(); +#ifndef QT_NO_TRANSLATION_BUILDER + d->messages.clear(); +#endif + + QEvent ev(QEvent::LanguageChange); + QCoreApplication::sendEvent(QCoreApplication::instance(), &ev); +} + +#ifndef QT_NO_TRANSLATION_BUILDER + +/*! + Converts this message file to the compact format used to store + message files on disk. + + You should never need to call this directly; save() and other + functions call it as necessary. \a mode is for internal use. + + \sa save() unsqueeze() +*/ + +void Translator::squeeze(SaveMode mode) +{ + if (d->messages.isEmpty()) { + if (mode == Stripped) + unsqueeze(); + else + return; + } + + QMap messages = d->messages; + clear(); + + QMap offsets; + + QDataStream ms(&d->messageArray, QIODevice::WriteOnly); + QMap::const_iterator it, next; + int cpPrev = 0, cpNext = 0; + for (it = messages.constBegin(); it != messages.constEnd(); ++it) { + cpPrev = cpNext; + next = it; + ++next; + if (next == messages.constEnd()) + cpNext = 0; + else + cpNext = (int) it.key().commonPrefix(next.key()); + offsets.insert(TranslatorPrivate::Offset(it.key(), ms.device()->pos()), (void *)0); + it.key().write(ms, mode == Stripped, (TranslatorMessage::Prefix)qMax(cpPrev, cpNext + 1)); + } + + QMap::Iterator offset; + offset = offsets.begin(); + QDataStream ds(&d->offsetArray, QIODevice::WriteOnly); + while (offset != offsets.end()) { + TranslatorPrivate::Offset k = offset.key(); + ++offset; + ds << (quint32)k.h << (quint32)k.o; + } + + if (mode == Stripped) { + QMap contextSet; + for (it = messages.constBegin(); it != messages.constEnd(); ++it) + ++contextSet[it.key().context()]; + + quint16 hTableSize; + if (contextSet.size() < 200) + hTableSize = (contextSet.size() < 60) ? 151 : 503; + else if (contextSet.size() < 2500) + hTableSize = (contextSet.size() < 750) ? 1511 : 5003; + else + hTableSize = (contextSet.size() < 10000) ? 15013 : 3 * contextSet.size() / 2; + + QMultiMap hashMap; + QMap::const_iterator c; + for (c = contextSet.constBegin(); c != contextSet.constEnd(); ++c) + hashMap.insert(elfHash(c.key()) % hTableSize, c.key()); + + /* + The contexts found in this translator are stored in a hash + table to provide fast lookup. The context array has the + following format: + + quint16 hTableSize; + quint16 hTable[hTableSize]; + quint8 contextPool[...]; + + The context pool stores the contexts as Pascal strings: + + quint8 len; + quint8 data[len]; + + Let's consider the look-up of context "FunnyDialog". A + hash value between 0 and hTableSize - 1 is computed, say h. + If hTable[h] is 0, "FunnyDialog" is not covered by this + translator. Else, we check in the contextPool at offset + 2 * hTable[h] to see if "FunnyDialog" is one of the + contexts stored there, until we find it or we meet the + empty string. + */ + d->contextArray.resize(2 + (hTableSize << 1)); + QDataStream t(&d->contextArray, QIODevice::WriteOnly); + + quint16 *hTable = new quint16[hTableSize]; + memset(hTable, 0, hTableSize * sizeof(quint16)); + + t << hTableSize; + t.device()->seek(2 + (hTableSize << 1)); + t << (quint16)0; // the entry at offset 0 cannot be used + uint upto = 2; + + QMap::const_iterator entry = hashMap.constBegin(); + while (entry != hashMap.constEnd()) { + int i = entry.key(); + hTable[i] = (quint16)(upto >> 1); + + do { + const char *con = entry.value(); + uint len = (uint)qstrlen(con); + len = qMin(len, 255u); + t << (quint8)len; + t.writeRawData(con, len); + upto += 1 + len; + ++entry; + } while (entry != hashMap.constEnd() && entry.key() == i); + do { + t << (quint8) 0; // empty string + ++upto; + } while ((upto & 0x1) != 0); // offsets have to be even + } + t.device()->seek(2); + for (int j = 0; j < hTableSize; j++) + t << hTable[j]; + delete [] hTable; + + if (upto > 131072) { + qWarning("Translator::squeeze: Too many contexts"); + d->contextArray.clear(); + } + } +} + + +/*! + Converts this message file into an easily modifiable data + structure, less compact than the format used in the files. + + You should never need to call this function; it is called by + insert() and friends as necessary. + + \sa squeeze() +*/ + +void Translator::unsqueeze() +{ + if (!d->messages.isEmpty() || d->messageArray.isEmpty()) + return; + + qFatal("Cannot unsqueeze (bug in Linguist?)"); +} + + +/*! + Returns true if this message file contains a message with the key + (\a context, \a sourceText, \a comment); otherwise returns false. + + This function works with stripped translator files. + + (This is is a one-liner that calls findMessage().) +*/ + +bool Translator::contains(const char* context, const char* sourceText, + const char* comment) const +{ + return !findMessage(context, sourceText, comment).translation().isNull(); +} + + +bool Translator::contains(const char *context, + const char *comment, const QString &fileName, int lineNumber) const +{ + return !findMessage(context, 0, comment, fileName, lineNumber).isNull(); +} + +/*! + Inserts \a message into this message file. + + This function does \e not work with stripped translator files. It + may appear to, but that is not dependable. + + \sa remove() +*/ + +void Translator::insert(const TranslatorMessage& message) +{ + unsqueeze(); + d->messages.remove(message); // safer + d->messages.insert(message, (void *) 0); +} + +/*! + \fn void Translator::insert(const char *context, const char + *sourceText, const QString &translation) + \overload + \obsolete + + Inserts the \a sourceText and \a translation into the translator + with the given \a context. +*/ + +/*! + Removes \a message from this translator. + + This function works with stripped translator files. + + \sa insert() +*/ + +void Translator::remove(const TranslatorMessage& message) +{ + unsqueeze(); + d->messages.remove(message); +} + + +/*! + \fn void Translator::remove(const char *, const char *) + \overload + \obsolete + + Removes the translation associated to the key (\a context, \a sourceText, + "") from this translator. +*/ +#endif + +/*! Returns the TranslatorMessage for the key + (\a context, \a sourceText, \a comment). If none is found, + also tries (\a context, \a sourceText, ""). +*/ + +TranslatorMessage Translator::findMessage(const char *context, const char *sourceText, + const char *comment, + const QString &fileName, int lineNumber) const +{ + if (context == 0) + context = ""; + if (sourceText == 0) + sourceText = ""; + if (comment == 0) + comment = ""; + + QString myFilename = fileName; + int myLineNumber = lineNumber; + + if (!d->messages.isEmpty()) { + QMap::const_iterator it; + + // Either we want to find an item that matches context, sourcetext (and optionally comment) + // Or we want to find an item that matches context, filename, linenumber (and optionally comment) + it = d->messages.find(TranslatorMessage(context, sourceText, comment, myFilename, myLineNumber)); + if (it != d->messages.constEnd()) + return it.key(); + + if (comment[0]) { + it = d->messages.find(TranslatorMessage(context, sourceText, "", myFilename, myLineNumber)); + if (it != d->messages.constEnd()) + return it.key(); + } + it = d->messages.find(TranslatorMessage(context, "", comment, myFilename, myLineNumber)); + if (it != d->messages.constEnd()) + return it.key(); + if (comment[0]) { + it = d->messages.find(TranslatorMessage(context, "", "", myFilename, myLineNumber)); + if (it != d->messages.constEnd()) + return it.key(); + } + return TranslatorMessage(); + } + + return TranslatorMessage(); +} + +/*! + Returns true if this translator is empty, otherwise returns false. + This function works with stripped and unstripped translation files. +*/ +bool Translator::isEmpty() const +{ + return !d->unmapPointer && !d->unmapLength && d->messageArray.isEmpty() && + d->offsetArray.isEmpty() && d->contextArray.isEmpty() && d->messages.isEmpty(); +} + + +#ifndef QT_NO_TRANSLATION_BUILDER + +/*! + Returns a list of the messages in the translator. This function is + rather slow. Because it is seldom called, it's optimized for + simplicity and small size, rather than speed. + + If you want to iterate over the list, you should iterate over a + copy, e.g. + \code + QList list = myTranslator.messages(); + QList::Iterator it = list.begin(); + while (it != list.end()) { + process_message(*it); + ++it; + } + \endcode +*/ + +QList Translator::messages() const +{ + ((Translator *) this)->unsqueeze(); + return d->messages.keys(); +} + +#endif + +/*! + \class TranslatorMessage + + \brief The TranslatorMessage class contains a translator message and its + properties. + + \ingroup i18n + \ingroup environment + + This class is of no interest to most applications. It is useful + for translation tools such as \l{Qt Linguist Manual}{Qt Linguist}. + It is provided simply to make the API complete and regular. + + For a Translator object, a lookup key is a triple (\e context, \e + {source text}, \e comment) that uniquely identifies a message. An + extended key is a quadruple (\e hash, \e context, \e {source + text}, \e comment), where \e hash is computed from the source text + and the comment. Unless you plan to read and write messages + yourself, you need not worry about the hash value. + + TranslatorMessage stores this triple or quadruple and the relevant + translation if there is any. + + \sa Translator +*/ + +/*! + Constructs a translator message with the extended key (0, 0, 0, 0) + and an empty string as translation. +*/ + +TranslatorMessage::TranslatorMessage() + : h(0), m_fileName(), m_lineNumber(-1) +{ +} + + +/*! + Constructs an translator message with the extended key (\e h, \a + context, \a sourceText, \a comment), where \e h is computed from + \a sourceText and \a comment, and possibly with a \a translation. +*/ + +TranslatorMessage::TranslatorMessage(const char * context, + const char * sourceText, + const char * comment, + const QString &fileName, + int lineNumber, + const QStringList& translations) + : cx(context), st(sourceText), cm(comment), m_translations(translations), + m_fileName(fileName), m_lineNumber(lineNumber) +{ + // 0 means we don't know, "" means empty + if (cx == (const char*)0) + cx = ""; + if (st == (const char*)0) + st = ""; + if (cm == (const char*)0) + cm = ""; + h = elfHash(st + cm); +} + + +/*! + Constructs a copy of translator message \a m. +*/ + +TranslatorMessage::TranslatorMessage(const TranslatorMessage & m) + : cx(m.cx), st(m.st), cm(m.cm), m_translations(m.m_translations), + m_fileName(m.m_fileName), m_lineNumber(m.m_lineNumber) +{ + h = m.h; +} + + +/*! + Assigns message \a m to this translator message and returns a + reference to this translator message. +*/ + +TranslatorMessage & TranslatorMessage::operator=( + const TranslatorMessage & m) +{ + h = m.h; + cx = m.cx; + st = m.st; + cm = m.cm; + m_translations = m.m_translations; + m_fileName = m.m_fileName; + m_lineNumber = m.m_lineNumber; + return *this; +} + + +/*! + \fn uint TranslatorMessage::hash() const + + Returns the hash value used internally to represent the lookup + key. This value is zero only if this translator message was + constructed from a stream containing invalid data. + + The hashing function is unspecified, but it will remain unchanged + in future versions of Qt. +*/ + +/*! + \fn const char *TranslatorMessage::context() const + + Returns the context for this message (e.g. "MyDialog"). +*/ + +/*! + \fn const char *TranslatorMessage::sourceText() const + + Returns the source text of this message (e.g. "&Save"). +*/ + +/*! + \fn const char *TranslatorMessage::comment() const + + Returns the comment for this message (e.g. "File|Save"). +*/ + +/*! + \fn void TranslatorMessage::setTranslation(const QString & translation) + + Sets the translation of the source text to \a translation. + + \sa translation() +*/ + +/*! + \fn QString TranslatorMessage::translation() const + + Returns the translation of the source text (e.g., "&Sauvegarder"). + + \sa setTranslation() +*/ + +/*! + \enum TranslatorMessage::Prefix + + Let (\e h, \e c, \e s, \e m) be the extended key. The possible + prefixes are + + \value NoPrefix no prefix + \value Hash only (\e h) + \value HashContext only (\e h, \e c) + \value HashContextSourceText only (\e h, \e c, \e s) + \value HashContextSourceTextComment the whole extended key, (\e + h, \e c, \e s, \e m) + + \sa write() commonPrefix() +*/ + +/*! + Writes this translator message to the \a stream. If \a strip is + false (the default), all the information in the message is + written. If \a strip is true, only the part of the extended key + specified by \a prefix is written with the translation (\c + HashContextSourceTextComment by default). + + \sa commonPrefix() +*/ + +void TranslatorMessage::write(QDataStream & stream, bool strip, Prefix prefix) const +{ + for (int i = 0; i < m_translations.count(); ++i) + stream << quint8(Tag_Translation) << m_translations.at(i); + + if (!strip) + prefix = HashContextSourceTextComment; + + switch (prefix) { + case HashContextSourceTextComment: + stream << quint8(Tag_Comment) << cm; + // fall through + case HashContextSourceText: + stream << quint8(Tag_SourceText) << st; + // fall through + case HashContext: + stream << quint8(Tag_Context) << cx; + default: + ; + } + + stream << quint8(Tag_End); +} + + +/*! + Returns the widest lookup prefix that is common to this translator + message and to message \a m. + + For example, if the extended key is for this message is (71, + "PrintDialog", "Yes", "Print?") and that for \a m is (71, + "PrintDialog", "No", "Print?"), this function returns \c + HashContext. + + \sa write() +*/ + +TranslatorMessage::Prefix TranslatorMessage::commonPrefix( + const TranslatorMessage& m) const +{ + if (h != m.h) + return NoPrefix; + if (cx != m.cx) + return Hash; + if (st != m.st) + return HashContext; + if (cm != m.cm) + return HashContextSourceText; + return HashContextSourceTextComment; +} + + +/*! + Returns true if the extended key of this object is equal to that of + \a m; otherwise returns false. +*/ + +bool TranslatorMessage::operator==(const TranslatorMessage& m) const +{ + bool isHashEq = (h == m.h ? true : false); + bool isContextEq = (cx == m.cx ? true : false); + bool isSourceEq = (st == m.st ? true : false); + bool isCommentEq = (cm == m.cm ? true : false); + bool isLocationEq = m_lineNumber == m.m_lineNumber && m_fileName == m.m_fileName; + + return (isHashEq && isContextEq && isSourceEq && isCommentEq) || // translation can be different, but treat the equal + (st.isEmpty() && isContextEq && isCommentEq && isLocationEq); +} + + +/*! + \fn bool TranslatorMessage::operator!=(const TranslatorMessage& m) const + + Returns true if the extended key of this object is different from + that of \a m; otherwise returns false. +*/ + + +/*! + Returns true if the extended key of this object is + lexicographically before than that of \a m; otherwise returns + false. +*/ + +bool TranslatorMessage::operator<(const TranslatorMessage& m) const +{ + return h != m.h ? h < m.h + : (cx != m.cx ? cx < m.cx + : (st != m.st ? st < m.st : cm < m.cm)); +} + + +/*! + \fn bool TranslatorMessage::operator<=(const TranslatorMessage& m) const + + Returns true if the extended key of this object is + lexicographically before that of \a m or if they are equal; + otherwise returns false. +*/ + +/*! + \fn bool TranslatorMessage::operator>(const TranslatorMessage& m) const + + Returns true if the extended key of this object is + lexicographically after that of \a m; otherwise returns false. +*/ + +/*! + \fn bool TranslatorMessage::operator>=(const TranslatorMessage& m) const + + Returns true if the extended key of this object is + lexicographically after that of \a m or if they are equal; + otherwise returns false. +*/ + +/*! + \fn QString Translator::find(const char *context, const char *sourceText, const char * comment) const + + Use findMessage() instead. +*/ + +bool getNumerusInfo(QLocale::Language language, QLocale::Country country, + QStringList *forms) +{ + forever { + for (int i = 0; i < NumerusTableSize; ++i) { + const NumerusTableEntry &entry = numerusTable[i]; + for (int j = 0; entry.languages[j] != EOL; ++j) { + if (entry.languages[j] == language + && ((!entry.countries && country == QLocale::AnyCountry) + || (entry.countries && entry.countries[j] == country))) { + if (forms) { + forms->clear(); + for (int k = 0; entry.forms[k]; ++k) + forms->append(QLatin1String(entry.forms[k])); + } + return true; + } + } + } + + if (country == QLocale::AnyCountry) + break; + country = QLocale::AnyCountry; + } + return false; +} + +#endif // QT_NO_TRANSLATION diff --git a/sources/pyside2-tools/pylupdate/translator.h b/sources/pyside2-tools/pylupdate/translator.h new file mode 100644 index 0000000..d0cd4e7 --- /dev/null +++ b/sources/pyside2-tools/pylupdate/translator.h @@ -0,0 +1,387 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2005 Trolltech AS. All rights reserved. + * Copyright (C) 2002-2007 Detlev Offenbach + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#ifndef TRANSLATOR_H +#define TRANSLATOR_H + +#include "QtCore/qobject.h" +#include "QtCore/qbytearray.h" +#include "QtCore/qstringlist.h" +#include "QtCore/qlocale.h" +#include + +class TranslatorPrivate; + +class TranslatorMessage +{ +public: + TranslatorMessage(); + TranslatorMessage(const char * context, const char * sourceText, + const char * comment, + const QString &fileName, + int lineNumber, + const QStringList& translations = QStringList()); + TranslatorMessage(const TranslatorMessage & m); + + TranslatorMessage & operator=(const TranslatorMessage & m); + + uint hash() const { return h; } + const char *context() const { return cx.isNull() ? 0 : cx.constData(); } + const char *sourceText() const { return st.isNull() ? 0 : st.constData(); } + const char *comment() const { return cm.isNull() ? 0 : cm.constData(); } + + inline void setTranslations(const QStringList &translations); + QStringList translations() const { return m_translations; } + void setTranslation(const QString &translation) { m_translations = QStringList(translation); } + QString translation() const { return m_translations.value(0); } + bool isTranslated() const { return m_translations.count() > 1 || !m_translations.value(0).isEmpty(); } + + enum Prefix { NoPrefix, Hash, HashContext, HashContextSourceText, + HashContextSourceTextComment }; + void write(QDataStream & s, bool strip = false, + Prefix prefix = HashContextSourceTextComment) const; + Prefix commonPrefix(const TranslatorMessage&) const; + + bool operator==(const TranslatorMessage& m) const; + bool operator!=(const TranslatorMessage& m) const + { return !operator==(m); } + bool operator<(const TranslatorMessage& m) const; + bool operator<=(const TranslatorMessage& m) const + { return !m.operator<(*this); } + bool operator>(const TranslatorMessage& m) const + { return m.operator<(*this); } + bool operator>=(const TranslatorMessage& m) const + { return !operator<(m); } + + QString fileName(void) const { return m_fileName; } + void setFileName(const QString &fileName) { m_fileName = fileName; } + int lineNumber(void) const { return m_lineNumber; } + void setLineNumber(int lineNumber) { m_lineNumber = lineNumber; } + bool isNull() const { return st.isNull() && m_lineNumber == -1 && m_translations.isEmpty(); } + +private: + uint h; + QByteArray cx; + QByteArray st; + QByteArray cm; + QStringList m_translations; + QString m_fileName; + int m_lineNumber; + + enum Tag { Tag_End = 1, Tag_SourceText16, Tag_Translation, Tag_Context16, + Tag_Hash, Tag_SourceText, Tag_Context, Tag_Comment, + Tag_Obsolete1 }; +}; + +QT_BEGIN_NAMESPACE +Q_DECLARE_TYPEINFO(TranslatorMessage, Q_MOVABLE_TYPE); +QT_END_NAMESPACE + +inline void TranslatorMessage::setTranslations(const QStringList &translations) +{ m_translations = translations; } + +class Translator : public QTranslator +{ + Q_OBJECT +public: + explicit Translator(QObject *parent = 0); + ~Translator(); + + virtual TranslatorMessage findMessage(const char *context, const char *sourceText, + const char *comment = 0, + const QString &fileName = 0, int lineNumber = -1) const; + virtual QString translate(const char *context, const char *sourceText, + const char *comment = 0) const + { return findMessage(context, sourceText, comment).translation(); } + + bool load(const QString & filename, + const QString & directory = QString(), + const QString & search_delimiters = QString(), + const QString & suffix = QString()); + bool load(const uchar *data, int len); + + void clear(); + + enum SaveMode { Everything, Stripped }; + + bool save(const QString & filename, SaveMode mode = Everything); + + void insert(const TranslatorMessage&); + inline void insert(const char *context, const char *sourceText, const QString &fileName, int lineNo, const QStringList &translations) { + insert(TranslatorMessage(context, sourceText, "", fileName, lineNo, translations)); + } + void remove(const TranslatorMessage&); + inline void remove(const char *context, const char *sourceText) { + remove(TranslatorMessage(context, sourceText, "", QLatin1String(""), -1)); + } + bool contains(const char *context, const char *sourceText, const char * comment = 0) const; + bool contains(const char *context, const char *comment, const QString &fileName, int lineNumber) const; + + void squeeze(SaveMode = Everything); + void unsqueeze(); + + QList messages() const; + + bool isEmpty() const; + +private: + Q_DISABLE_COPY(Translator) + TranslatorPrivate *d; +}; + +static const char * const japaneseStyleForms[] = { "Unique Form", 0 }; +static const char * const englishStyleForms[] = { "Singular", "Plural", 0 }; +static const char * const frenchStyleForms[] = { "Singular", "Plural", 0 }; +static const char * const latvianForms[] = { "Singular", "Plural", "Nullar", 0 }; +static const char * const irishStyleForms[] = { "Singular", "Dual", "Plural", 0 }; +static const char * const czechForms[] = { "Singular", "Dual", "Plural", 0 }; +static const char * const slovakForms[] = { "Singular", "Dual", "Plural", 0 }; +static const char * const macedonianForms[] = { "Singular", "Dual", "Plural", 0 }; +static const char * const lithuanianForms[] = { "Singular", "Dual", "Plural", 0 }; +static const char * const russianStyleForms[] = { "Singular", "Dual", "Plural", 0 }; +static const char * const polishForms[] = { "Singular", "Paucal", "Plural", 0 }; +static const char * const romanianForms[] = + { "Singular", "Plural Form for 2 to 19", "Plural", 0 }; +static const char * const slovenianForms[] = { "Singular", "Dual", "Trial", "Plural", 0 }; +static const char * const malteseForms[] = + { "Singular", "Plural Form for 2 to 10", "Plural Form for 11 to 19", "Plural", 0 }; +static const char * const welshForms[] = + { "Nullar", "Singular", "Dual", "Sexal", "Plural", 0 }; +static const char * const arabicForms[] = + { "Nullar", "Singular", "Dual", "Minority Plural", "Plural", "Plural Form for 100, 200, ...", 0 }; + +#define EOL QLocale::C + +static const QLocale::Language japaneseStyleLanguages[] = { + QLocale::Afan, + QLocale::Armenian, + QLocale::Bhutani, + QLocale::Bislama, + QLocale::Burmese, + QLocale::Chinese, + QLocale::Fijian, + QLocale::Guarani, + QLocale::Hungarian, + QLocale::Indonesian, + QLocale::Japanese, + QLocale::Javanese, + QLocale::Korean, + QLocale::Malay, + QLocale::NauruLanguage, + QLocale::Persian, + QLocale::Sundanese, + QLocale::Thai, + QLocale::Tibetan, + QLocale::Vietnamese, + QLocale::Yoruba, + QLocale::Zhuang, + EOL +}; + +static const QLocale::Language englishStyleLanguages[] = { + QLocale::Abkhazian, + QLocale::Afar, + QLocale::Afrikaans, + QLocale::Albanian, + QLocale::Amharic, + QLocale::Assamese, + QLocale::Aymara, + QLocale::Azerbaijani, + QLocale::Bashkir, + QLocale::Basque, + QLocale::Bengali, + QLocale::Bihari, + // Missing: Bokmal, + QLocale::Bulgarian, + QLocale::Cambodian, + QLocale::Catalan, + QLocale::Cornish, + QLocale::Corsican, + QLocale::Danish, + QLocale::Dutch, + QLocale::English, + QLocale::Esperanto, + QLocale::Estonian, + QLocale::Faroese, + QLocale::Finnish, + // Missing: Friulian, + QLocale::Frisian, + QLocale::Galician, + QLocale::Georgian, + QLocale::German, + QLocale::Greek, + QLocale::Greenlandic, + QLocale::Gujarati, + QLocale::Hausa, + QLocale::Hebrew, + QLocale::Hindi, + QLocale::Icelandic, + QLocale::Interlingua, + QLocale::Interlingue, + QLocale::Italian, + QLocale::Kannada, + QLocale::Kashmiri, + QLocale::Kazakh, + QLocale::Kinyarwanda, + QLocale::Kirghiz, + QLocale::Kurdish, + QLocale::Kurundi, + QLocale::Lao, + QLocale::Latin, + // Missing: Letzeburgesch, + QLocale::Lingala, + QLocale::Malagasy, + QLocale::Malayalam, + QLocale::Marathi, + QLocale::Mongolian, + // Missing: Nahuatl, + QLocale::Nepali, + QLocale::NorthernSotho, + QLocale::Norwegian, + QLocale::NorwegianNynorsk, + QLocale::Occitan, + QLocale::Oriya, + QLocale::Pashto, + QLocale::Portuguese, + QLocale::Punjabi, + QLocale::Quechua, + QLocale::RhaetoRomance, + QLocale::SouthernSotho, + QLocale::Tswana, + QLocale::Shona, + QLocale::Sindhi, + QLocale::Sinhala, + QLocale::Swati, + QLocale::Somali, + QLocale::Spanish, + QLocale::Swahili, + QLocale::Swedish, + QLocale::Tagalog, + QLocale::Tajik, + QLocale::Tamil, + QLocale::Tatar, + QLocale::Telugu, + QLocale::Tongan, + QLocale::Tsonga, + QLocale::Turkish, + QLocale::Turkmen, + QLocale::Twi, + QLocale::Uigur, + QLocale::Uzbek, + QLocale::Volapuk, + QLocale::Wolof, + QLocale::Xhosa, + QLocale::Yiddish, + QLocale::Zulu, + EOL +}; +static const QLocale::Language frenchStyleLanguages[] = { + // keep synchronized with frenchStyleCountries + QLocale::Breton, + QLocale::French, + QLocale::Portuguese, + // Missing: Filipino, + QLocale::Tigrinya, + // Missing: Walloon + EOL +}; +static const QLocale::Language latvianLanguage[] = { QLocale::Latvian, EOL }; +static const QLocale::Language irishStyleLanguages[] = { + QLocale::Divehi, + QLocale::Gaelic, + QLocale::Inuktitut, + QLocale::Inupiak, + QLocale::Irish, + QLocale::Manx, + QLocale::Maori, + // Missing: Sami, + QLocale::Samoan, + QLocale::Sanskrit, + EOL +}; +static const QLocale::Language czechLanguage[] = { QLocale::Czech, EOL }; +static const QLocale::Language slovakLanguage[] = { QLocale::Slovak, EOL }; +static const QLocale::Language macedonianLanguage[] = { QLocale::Macedonian, EOL }; +static const QLocale::Language lithuanianLanguage[] = { QLocale::Lithuanian, EOL }; +static const QLocale::Language russianStyleLanguages[] = { + QLocale::Bosnian, + QLocale::Byelorussian, + QLocale::Croatian, + QLocale::Russian, + QLocale::Serbian, + QLocale::SerboCroatian, + QLocale::Ukrainian, + EOL +}; +static const QLocale::Language polishLanguage[] = { QLocale::Polish, EOL }; +static const QLocale::Language romanianLanguages[] = { + QLocale::Moldavian, + QLocale::Romanian, + EOL +}; +static const QLocale::Language slovenianLanguage[] = { QLocale::Slovenian, EOL }; +static const QLocale::Language malteseLanguage[] = { QLocale::Maltese, EOL }; +static const QLocale::Language welshLanguage[] = { QLocale::Welsh, EOL }; +static const QLocale::Language arabicLanguage[] = { QLocale::Arabic, EOL }; + +static const QLocale::Country frenchStyleCountries[] = { + // keep synchronized with frenchStyleLanguages + QLocale::AnyCountry, + QLocale::AnyCountry, + QLocale::Brazil, + QLocale::AnyCountry +}; + +struct NumerusTableEntry { + const char * const *forms; + const QLocale::Language *languages; + const QLocale::Country *countries; +}; + +static const NumerusTableEntry numerusTable[] = { + { japaneseStyleForms, japaneseStyleLanguages, 0 }, + { englishStyleForms, englishStyleLanguages, 0 }, + { frenchStyleForms, frenchStyleLanguages, frenchStyleCountries }, + { latvianForms, latvianLanguage, 0 }, + { irishStyleForms, irishStyleLanguages, 0 }, + { czechForms, czechLanguage, 0 }, + { slovakForms, slovakLanguage, 0 }, + { macedonianForms, macedonianLanguage, 0 }, + { lithuanianForms, lithuanianLanguage, 0 }, + { russianStyleForms, russianStyleLanguages, 0 }, + { polishForms, polishLanguage, 0 }, + { romanianForms, romanianLanguages, 0 }, + { slovenianForms, slovenianLanguage, 0 }, + { malteseForms, malteseLanguage, 0 }, + { welshForms, welshLanguage, 0 }, + { arabicForms, arabicLanguage, 0 } +}; + +static const int NumerusTableSize = sizeof(numerusTable) / sizeof(numerusTable[0]); + +bool getNumerusInfo(QLocale::Language language, QLocale::Country country, + QStringList *forms); + +#endif // TRANSLATOR_H diff --git a/sources/pyside2-tools/pyrcc/CMakeLists.txt b/sources/pyside2-tools/pyrcc/CMakeLists.txt new file mode 100644 index 0000000..2aaf788 --- /dev/null +++ b/sources/pyside2-tools/pyrcc/CMakeLists.txt @@ -0,0 +1,18 @@ +find_package(Qt5Xml) + +add_executable(pyside2-rcc main.cpp rcc.cpp) +include_directories(pyside2-rcc + ${Qt5Xml_INCLUDE_DIRS} + ${Qt5Core_INCLUDE_DIRS}) + +target_link_libraries(pyside2-rcc + ${Qt5Core_LIBRARIES} + ${Qt5Xml_LIBRARIES}) + +install(TARGETS pyside2-rcc RUNTIME DESTINATION bin) + +# Man pages +if (NOT WIN32) + file(GLOB manpages "${CMAKE_CURRENT_SOURCE_DIR}/*.1") + install(FILES ${manpages} DESTINATION share/man/man1) +endif() diff --git a/sources/pyside2-tools/pyrcc/main.cpp b/sources/pyside2-tools/pyrcc/main.cpp new file mode 100644 index 0000000..9028e95 --- /dev/null +++ b/sources/pyside2-tools/pyrcc/main.cpp @@ -0,0 +1,192 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2005 Trolltech AS. All rights reserved. + * Copyright (C) 2016 The Qt Company Ltd. + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "rcc.h" + +// Some static globals +static QString initName; +static bool verbose = false; +static int py_version = 3; +static int compressLevel = CONSTANT_COMPRESSLEVEL_DEFAULT; +static int compressThreshold = CONSTANT_COMPRESSTHRESHOLD_DEFAULT; +static QString resourceRoot; + +bool processResourceFile(const QStringList &filenamesIn, const QString &filenameOut, bool list) +{ + if (verbose) + fprintf(stderr, "PySide2 resource compiler\n"); + + //setup + RCCResourceLibrary library; + library.setInputFiles(filenamesIn); + library.setInitName(initName); + library.setVerbose(verbose); + library.setPythonVersion(py_version); + library.setCompressLevel(compressLevel); + library.setCompressThreshold(compressThreshold); + library.setResourceRoot(resourceRoot); + if(!library.readFiles()) + return false; + + //open output + FILE *out_fd = stdout; + if (!filenameOut.isEmpty() && filenameOut != QLatin1String("-")) { +#if defined(_MSC_VER) && _MSC_VER >= 1400 + if (fopen_s(&out_fd, filenameOut.toLocal8Bit().constData(), "w")) { +#else + out_fd = fopen(filenameOut.toLocal8Bit().constData(), "w"); + if(!out_fd) { +#endif + fprintf(stderr, "Unable to open %s for writing\n", filenameOut.toLatin1().constData()); + return false; + } + } + + //do the task + bool ret = true; + if(list) { + const QStringList data = library.dataFiles(); + for(int i = 0; i < data.size(); ++i) + fprintf(out_fd, "%s\n", QDir::cleanPath(data.at(i)).toLatin1().constData()); + } else { + ret = library.output(out_fd); + } + if(out_fd != stdout) + fclose(out_fd); + + //done + return ret; +} + +void showHelp(const char *argv0, const QString &error) +{ + fprintf(stderr, "PySide2 resource compiler\n"); + if (!error.isEmpty()) + fprintf(stderr, "%s: %s\n", argv0, error.toLatin1().constData()); + fprintf(stderr, "Usage: %s [options] \n\n" + "Options:\n" + " -o file Write output to file rather than stdout\n" + " -py2 Generate code for any Python v2.x version\n" + " -py3 Generate code for any Python v3.x version (default)\n" + " -name name Create an external initialization function with name\n" + " -threshold level Threshold to consider compressing files\n" + " -compress level Compress input files by level\n" + " -root path Prefix resource access path with root path\n" + " -no-compress Disable all compression\n" + " -version Display version\n" + " -help Display this information\n", + argv0); +} + +int main(int argc, char *argv[]) +{ + QString outFilename; + bool list = false; + QStringList files; + + //parse options + QString errorMsg; + for (int i = 1; i < argc && errorMsg.isEmpty(); i++) { + if (argv[i][0] == '-') { // option + QByteArray opt = argv[i] + 1; + if (opt == "o") { + if (!(i < argc-1)) { + errorMsg = QLatin1String("Missing output name"); + break; + } + outFilename = argv[++i]; + } else if(opt == "name") { + if (!(i < argc-1)) { + errorMsg = QLatin1String("Missing target name"); + break; + } + initName = argv[++i]; + } else if(opt == "root") { + if (!(i < argc-1)) { + errorMsg = QLatin1String("Missing root path"); + break; + } + resourceRoot = QDir::cleanPath(argv[++i]); + if(resourceRoot.isEmpty() || resourceRoot[0] != '/') + errorMsg = QLatin1String("Root must start with a /"); + } else if(opt == "compress") { + if (!(i < argc-1)) { + errorMsg = QLatin1String("Missing compression level"); + break; + } + compressLevel = QString(argv[++i]).toInt(); + } else if(opt == "threshold") { + if (!(i < argc-1)) { + errorMsg = QLatin1String("Missing compression threshold"); + break; + } + compressThreshold = QString(argv[++i]).toInt(); + } else if(opt == "verbose") { + verbose = true; + } else if(opt == "py2") { + py_version = 2; + } else if(opt == "py3") { + py_version = 3; + } else if(opt == "list") { + list = true; + } else if(opt == "version") { + fprintf(stderr, "Resource Compiler for Qt version %s\n", QT_VERSION_STR); + return 0; + } else if(opt == "help" || opt == "h") { + showHelp(argv[0], errorMsg); + return 0; + } else if(opt == "no-compress") { + compressLevel = -2; + } else { + errorMsg = QString(QLatin1String("Unknown option: '%1'")).arg(argv[i]); + } + } else { + if(!QFile::exists(argv[i])) { + qWarning("%s: File does not exist '%s'", argv[0], argv[i]); + return 1; + } + files.append(argv[i]); + } + } + + if (!files.size() || !errorMsg.isEmpty()) + { + showHelp(argv[0], errorMsg); + return 1; + } + return int(!processResourceFile(files, outFilename, list)); +} + + + diff --git a/sources/pyside2-tools/pyrcc/pyside2-rcc.1 b/sources/pyside2-tools/pyrcc/pyside2-rcc.1 new file mode 100644 index 0000000..6c78d3b --- /dev/null +++ b/sources/pyside2-tools/pyrcc/pyside2-rcc.1 @@ -0,0 +1,43 @@ +.TH PYSIDE\-RCC "1" "December 2010" "pyside2\-rcc" "User Commands" +.SH NAME +pyside2\-rcc \- PySide2 resource compiler +.SH DESCRIPTION +.SS "Usage:" +.IP +pyside2\-rcc [options] +.SS "Options:" +.TP +\fB\-o\fR file +Write output to file rather than stdout +.TP +\fB\-py2\fR +Generate code for any Python v2.x version (default) +.TP +\fB\-py3\fR +Generate code for any Python v3.x version +.TP +\fB\-name\fR name +Create an external initialization function with name +.TP +\fB\-threshold\fR level +Threshold to consider compressing files +.TP +\fB\-compress\fR level +Compress input files by level +.TP +\fB\-root\fR path +Prefix resource access path with root path +.TP +\fB\-no\-compress +Disable all compression +.TP +\fB\-version +Display version +.TP +\fB\-help +Display this information +.SH COPYRIGHT +Copyright \(co 2010 Nokia Corporation and/or its subsidiary(\fB\-ies\fR) +.SH AUTHOR +.PP +This manpage was written by Marcelo Lira , on the 29. December 2010. diff --git a/sources/pyside2-tools/pyrcc/rcc.cpp b/sources/pyside2-tools/pyrcc/rcc.cpp new file mode 100644 index 0000000..aa7451e --- /dev/null +++ b/sources/pyside2-tools/pyrcc/rcc.cpp @@ -0,0 +1,552 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2005 Trolltech AS. All rights reserved. + * Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "rcc.h" + +static bool qt_rcc_write_number(FILE *out, quint32 number, int width) +{ + int dividend = 1; + switch (width) { + case 2: + dividend = 256; + break; + case 3: + dividend = 65536; + break; + case 4: + dividend = 16777216; + break; + default: + break; + } + + // Write bytes + while (dividend >= 1) { + const quint8 tmp = number / dividend; + + if (tmp >= 32 && tmp < 127 && tmp != '"' && tmp != '\\') { + /* Optimization for printable characters */ + fprintf(out, "%c", tmp); + } else { + fprintf(out, "\\x%02x", tmp); + } + + number -= tmp * dividend; + dividend /= 256; + } + return true; +} + +bool RCCFileInfo::writeDataInfo(FILE *out) +{ + //pointer data + if(flags & RCCFileInfo::Directory) { + //name offset + qt_rcc_write_number(out, nameOffset, 4); + + //flags + qt_rcc_write_number(out, flags, 2); + + //child count + qt_rcc_write_number(out, children.size(), 4); + + //first child offset + qt_rcc_write_number(out, childOffset, 4); + } else { + //name offset + qt_rcc_write_number(out, nameOffset, 4); + + //flags + qt_rcc_write_number(out, flags, 2); + + //locale + qt_rcc_write_number(out, locale.country(), 2); + qt_rcc_write_number(out, locale.language(), 2); + + //data offset + qt_rcc_write_number(out, dataOffset, 4); + } + fprintf(out, "\\\n"); + return true; +} + +qint64 RCCFileInfo::writeDataBlob(FILE *out, qint64 offset) +{ + //capture the offset + dataOffset = offset; + + //find the data to be written + QFile file(fileInfo.absoluteFilePath()); + if (!file.open(QFile::ReadOnly)) { + fprintf(stderr, "Couldn't open %s\n", fileInfo.absoluteFilePath().toLatin1().constData()); + return false; + } + QByteArray data = file.readAll(); + +#ifndef QT_NO_COMPRESS + // Check if compression is useful for this file + if (mCompressLevel != 0 && data.size() != 0) { + QByteArray compressed = qCompress(reinterpret_cast(data.data()), data.size(), mCompressLevel); + + int compressRatio = int(100.0f * (float(data.size() - compressed.size()) / float(data.size()))); + if (compressRatio >= mCompressThreshold) { + data = compressed; + flags |= Compressed; + } + } +#endif // QT_NO_COMPRESS + + //write the length + qt_rcc_write_number(out, data.size(), 4); + fprintf(out, "\\\n"); + offset += 4; + + //write the payload + for (int i=0; iroot == 0) { + fprintf(stderr, "No resources in resource description.\n"); + return false; + } + return true; +} + +bool RCCResourceLibrary::addFile(const QString &alias, const RCCFileInfo &file) +{ + if (file.fileInfo.size() > 0xffffffff) { + fprintf(stderr, "File too big: %s", + file.fileInfo.absoluteFilePath().toLatin1().constData()); + return false; + } + if(!root) + root = new RCCFileInfo("", QFileInfo(), QLocale(), RCCFileInfo::Directory); + + RCCFileInfo *parent = root; + const QStringList nodes = alias.split('/'); + for(int i = 1; i < nodes.size()-1; ++i) { + const QString node = nodes.at(i); + if(!parent->children.contains(node)) { + RCCFileInfo *s = new RCCFileInfo(node, QFileInfo(), QLocale(), RCCFileInfo::Directory); + s->parent = parent; + parent->children.insert(node, s); + parent = s; + } else { + parent = parent->children[node]; + } + } + + const QString filename = nodes.at(nodes.size()-1); + RCCFileInfo *s = new RCCFileInfo(file); + s->parent = parent; + parent->children.insertMulti(filename, s); + return true; +} + +bool RCCResourceLibrary::readFiles() +{ + //read in data + if (mVerbose) + fprintf(stderr, "Processing %d files\n", mFileNames.size()); + for (int i=0; i pending; + + if (!root) + return ret; + + pending.push(root); + while(!pending.isEmpty()) { + RCCFileInfo *file = pending.pop(); + for(QHash::iterator it = file->children.begin(); + it != file->children.end(); ++it) { + RCCFileInfo *child = it.value(); + if(child->flags & RCCFileInfo::Directory) + pending.push(child); + ret.append(child->fileInfo.filePath()); + } + } + return ret; +} + +bool RCCResourceLibrary::output(FILE *out) +{ + //write out + if (mVerbose) + fprintf(stderr, "Outputting code\n"); + if (!writeHeader(out)) { + fprintf(stderr, "Couldn't write header\n"); + return false; + } + if (!writeDataBlobs(out)) { + fprintf(stderr, "Couldn't write data blob\n"); + return false; + } + if (!writeDataNames(out)) { + fprintf(stderr, "Couldn't write file names\n"); + return false; + } + if (!writeDataStructure(out)) { + fprintf(stderr, "Couldn't write data tree\n"); + return false; + } + if (!writeInitializer(out)) { + fprintf(stderr, "Couldn't write footer\n"); + return false; + } + return true; +} + +bool +RCCResourceLibrary::writeHeader(FILE *out) +{ + fprintf(out, "# -*- coding: utf-8 -*-\n\n"); + fprintf(out, "# Resource object code\n"); + fprintf(out, "#\n"); + fprintf(out, "# Created: %s\n", QDateTime::currentDateTime().toString().toUtf8().constData()); + fprintf(out, "# by: The Resource Compiler for PySide2 (Qt v%s)\n", QT_VERSION_STR); + fprintf(out, "#\n"); + fprintf(out, "# WARNING! All changes made in this file will be lost!\n"); + fprintf(out, "\n"); + fprintf(out, "from PySide2 import QtCore\n\n"); + + return true; +} + +bool +RCCResourceLibrary::writeDataBlobs(FILE *out) +{ + fprintf(out, "qt_resource_data = %s\"\\\n", mPrefix); + QStack pending; + + if (!root) + return false; + + pending.push(root); + qint64 offset = 0; + while(!pending.isEmpty()) { + RCCFileInfo *file = pending.pop(); + for(QHash::iterator it = file->children.begin(); + it != file->children.end(); ++it) { + RCCFileInfo *child = it.value(); + if(child->flags & RCCFileInfo::Directory) + pending.push(child); + else + offset = child->writeDataBlob(out, offset); + } + } + fprintf(out, "\"\n\n"); + return true; +} + +bool +RCCResourceLibrary::writeDataNames(FILE *out) +{ + fprintf(out, "qt_resource_name = %s\"\\\n", mPrefix); + + QHash names; + QStack pending; + + if (!root) + return false; + + pending.push(root); + qint64 offset = 0; + while(!pending.isEmpty()) { + RCCFileInfo *file = pending.pop(); + for(QHash::iterator it = file->children.begin(); + it != file->children.end(); ++it) { + RCCFileInfo *child = it.value(); + if(child->flags & RCCFileInfo::Directory) + pending.push(child); + if(names.contains(child->name)) { + child->nameOffset = names.value(child->name); + } else { + names.insert(child->name, offset); + offset = child->writeDataName(out, offset); + } + } + } + fprintf(out, "\"\n\n"); + return true; +} + +static bool qt_rcc_compare_hash(const RCCFileInfo *left, const RCCFileInfo *right) +{ + return qt_hash(left->name) < qt_hash(right->name); +} + +bool +RCCResourceLibrary::writeDataStructure(FILE *out) +{ + fprintf(out, "qt_resource_struct = %s\"\\\n", mPrefix); + QStack pending; + + if (!root) + return false; + + //calculate the child offsets (flat) + pending.push(root); + int offset = 1; + while(!pending.isEmpty()) { + RCCFileInfo *file = pending.pop(); + file->childOffset = offset; + + //sort by hash value for binary lookup + QList children = file->children.values(); + qSort(children.begin(), children.end(), qt_rcc_compare_hash); + + //write out the actual data now + for(int i = 0; i < children.size(); ++i) { + RCCFileInfo *child = children.at(i); + ++offset; + if(child->flags & RCCFileInfo::Directory) + pending.push(child); + } + } + + //write out the structure (ie iterate again!) + pending.push(root); + root->writeDataInfo(out); + while(!pending.isEmpty()) { + RCCFileInfo *file = pending.pop(); + + //sort by hash value for binary lookup + QList children = file->children.values(); + qSort(children.begin(), children.end(), qt_rcc_compare_hash); + + //write out the actual data now + for(int i = 0; i < children.size(); ++i) { + RCCFileInfo *child = children.at(i); + child->writeDataInfo(out); + if(child->flags & RCCFileInfo::Directory) + pending.push(child); + } + } + fprintf(out, "\"\n\n"); + + return true; +} + +bool +RCCResourceLibrary::writeInitializer(FILE *out) +{ + fprintf(out, "def qInitResources():\n"); + fprintf(out, " QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)\n"); + + fprintf(out, "\n"); + + fprintf(out, "def qCleanupResources():\n"); + fprintf(out, " QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)\n"); + + fprintf(out, "\n"); + + fprintf(out, "qInitResources()\n"); + + return true; +} diff --git a/sources/pyside2-tools/pyrcc/rcc.h b/sources/pyside2-tools/pyrcc/rcc.h new file mode 100644 index 0000000..041478d --- /dev/null +++ b/sources/pyside2-tools/pyrcc/rcc.h @@ -0,0 +1,154 @@ +/* + * This file is part of the PySide Tools project. + * + * Copyright (C) 1992-2005 Trolltech AS. All rights reserved. + * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#ifndef RCC_H +#define RCC_H + +#define TAG_RCC "RCC" +#define TAG_RESOURCE "qresource" +#define TAG_FILE "file" + +#define ATTRIBUTE_LANG "lang" +#define ATTRIBUTE_PREFIX "prefix" +#define ATTRIBUTE_ALIAS "alias" +#define ATTRIBUTE_THRESHOLD "threshold" +#define ATTRIBUTE_COMPRESS "compress" + + +#define CONSTANT_HEADER_SIZE 8 +#define CONSTANT_COMPRESSLEVEL_DEFAULT 0 +#define CONSTANT_COMPRESSTHRESHOLD_DEFAULT 70 + +struct RCCFileInfo; + +class RCCResourceLibrary +{ +public: + inline RCCResourceLibrary(); + ~RCCResourceLibrary(); + + bool output(FILE *out); + + bool readFiles(); + + inline void setInputFiles(QStringList files) { mFileNames = files; } + inline QStringList inputFiles() const { return mFileNames; } + + QStringList dataFiles() const; + + inline void setVerbose(bool b) { mVerbose = b; } + inline bool verbose() const { return mVerbose; } + + inline void setPythonVersion(int v) { mPrefix = (v == 2 ? "" : "b"); } + + inline void setInitName(const QString &n) { mInitName = n; } + inline QString initName() const { return mInitName; } + + inline void setCompressLevel(int c) { mCompressLevel = c; } + inline int compressLevel() const { return mCompressLevel; } + + inline void setCompressThreshold(int t) { mCompressThreshold = t; } + inline int compressThreshold() const { return mCompressThreshold; } + + inline void setResourceRoot(QString str) { mResourceRoot = str; } + inline QString resourceRoot() const { return mResourceRoot; } + +private: + RCCFileInfo *root; + bool addFile(const QString &alias, const RCCFileInfo &file); + bool interpretResourceFile(QIODevice *inputDevice, QString file, QString currentPath = QString()); + + bool writeHeader(FILE *out); + bool writeDataBlobs(FILE *out); + bool writeDataNames(FILE *out); + bool writeDataStructure(FILE *out); + bool writeInitializer(FILE *out); + + QStringList mFileNames; + QString mResourceRoot, mInitName; + bool mVerbose; + int mCompressLevel; + int mCompressThreshold; + int mTreeOffset, mNamesOffset, mDataOffset; + const char *mPrefix; +}; + +inline RCCResourceLibrary::RCCResourceLibrary() +{ + root = 0; + mVerbose = false; + mCompressLevel = -1; + mCompressThreshold = 70; + mTreeOffset = mNamesOffset = mDataOffset = 0; +} + +struct RCCFileInfo +{ + enum Flags + { + NoFlags = 0x00, + Compressed = 0x01, + Directory = 0x02 + }; + + inline RCCFileInfo(QString name = QString(), QFileInfo fileInfo = QFileInfo(), + QLocale locale = QLocale(), uint flags = NoFlags, + int compressLevel = CONSTANT_COMPRESSLEVEL_DEFAULT, int compressThreshold = CONSTANT_COMPRESSTHRESHOLD_DEFAULT); + ~RCCFileInfo() { qDeleteAll(children); } + inline QString resourceName() { + QString resource = name; + for(RCCFileInfo *p = parent; p; p = p->parent) + resource = resource.prepend(p->name + "/"); + return ":" + resource; + } + + int flags; + QString name; + QLocale locale; + QFileInfo fileInfo; + RCCFileInfo *parent; + QHash children; + int mCompressLevel; + int mCompressThreshold; + + qint64 nameOffset, dataOffset, childOffset; + qint64 writeDataBlob(FILE *out, qint64 offset); + qint64 writeDataName(FILE *out, qint64 offset); + bool writeDataInfo(FILE *out); +}; + +inline RCCFileInfo::RCCFileInfo(QString name, QFileInfo fileInfo, QLocale locale, uint flags, + int compressLevel, int compressThreshold) +{ + this->name = name; + this->fileInfo = fileInfo; + this->locale = locale; + this->flags = flags; + this->parent = 0; + this->nameOffset = this->dataOffset = this->childOffset = 0; + this->mCompressLevel = compressLevel; + this->mCompressThreshold = compressThreshold; +} + +#endif diff --git a/sources/pyside2-tools/pyside2-uic b/sources/pyside2-tools/pyside2-uic new file mode 100644 index 0000000..b8924a2 --- /dev/null +++ b/sources/pyside2-tools/pyside2-uic @@ -0,0 +1,70 @@ +#!/usr/bin/env python +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +import sys +import optparse + +from PySide2 import QtCore +from pyside2uic.driver import Driver +from PySide2 import __version__ as PySideVersion +from pyside2uic import __version__ as PySideUicVersion + +Version = "PySide2 User Interface Compiler version %s, running on PySide2 %s." % (PySideUicVersion, PySideVersion) + +def main(): + if sys.hexversion >= 0x03000000: + from pyside2uic.port_v3.invoke import invoke + else: + from pyside2uic.port_v2.invoke import invoke + + parser = optparse.OptionParser(usage="pyside2-uic [options] ", + version=Version) + parser.add_option("-p", "--preview", dest="preview", action="store_true", + default=False, + help="show a preview of the UI instead of generating code") + parser.add_option("-o", "--output", dest="output", default="-", metavar="FILE", + help="write generated code to FILE instead of stdout") + parser.add_option("-x", "--execute", dest="execute", action="store_true", + default=False, + help="generate extra code to test and display the class") + parser.add_option("-d", "--debug", dest="debug", action="store_true", + default=False, help="show debug output") + parser.add_option("-i", "--indent", dest="indent", action="store", type="int", + default=4, metavar="N", + help="set indent width to N spaces, tab if N is 0 (default: 4)") + + g = optparse.OptionGroup(parser, title="Code generation options") + g.add_option("--from-imports", dest="from_imports", action="store_true", + default=False, help="generate imports relative to '.'") + parser.add_option_group(g) + + opts, args = parser.parse_args() + + if len(args) != 1: + sys.stderr.write("Error: one input ui-file must be specified\n") + sys.exit(1) + + sys.exit(invoke(Driver(opts, args[0]))) + +if __name__ == "__main__": + main() diff --git a/sources/pyside2-tools/pyside2uic/Compiler/__init__.py b/sources/pyside2-tools/pyside2uic/Compiler/__init__.py new file mode 100644 index 0000000..6aa6c34 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/Compiler/__init__.py @@ -0,0 +1,22 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2009 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + diff --git a/sources/pyside2-tools/pyside2uic/Compiler/compiler.py b/sources/pyside2-tools/pyside2uic/Compiler/compiler.py new file mode 100644 index 0000000..2013170 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/Compiler/compiler.py @@ -0,0 +1,103 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +import sys + +from pyside2uic.properties import Properties +from pyside2uic.uiparser import UIParser +from pyside2uic.Compiler import qtproxies +from pyside2uic.Compiler.indenter import createCodeIndenter, getIndenter, \ + write_code +from pyside2uic.Compiler.qobjectcreator import CompilerCreatorPolicy +from pyside2uic.Compiler.misc import write_import + + +class UICompiler(UIParser): + def __init__(self): + UIParser.__init__(self, qtproxies.QtCore, qtproxies.QtGui, qtproxies.QtWidgets, + CompilerCreatorPolicy()) + + def reset(self): + qtproxies.i18n_strings = [] + UIParser.reset(self) + + def setContext(self, context): + qtproxies.i18n_context = context + + def createToplevelWidget(self, classname, widgetname): + indenter = getIndenter() + indenter.level = 0 + + indenter.write("from PySide2 import QtCore, QtGui, QtWidgets") + indenter.write("") + + indenter.write("class Ui_%s(object):" % self.uiname) + indenter.indent() + indenter.write("def setupUi(self, %s):" % widgetname) + indenter.indent() + w = self.factory.createQObject(classname, widgetname, (), + is_attribute = False, + no_instantiation = True) + w.baseclass = classname + w.uiclass = "Ui_%s" % self.uiname + return w + + def setDelayedProps(self): + write_code("") + write_code("self.retranslateUi(%s)" % self.toplevelWidget) + UIParser.setDelayedProps(self) + + def finalize(self): + indenter = getIndenter() + indenter.level = 1 + indenter.write("") + indenter.write("def retranslateUi(self, %s):" % self.toplevelWidget) + indenter.indent() + + if qtproxies.i18n_strings: + for s in qtproxies.i18n_strings: + indenter.write(s) + else: + indenter.write("pass") + + indenter.dedent() + indenter.dedent() + + # Make a copy of the resource modules to import because the parser will + # reset() before returning. + self._resources = self.resources + + def compileUi(self, input_stream, output_stream, from_imports): + createCodeIndenter(output_stream) + w = self.parse(input_stream) + + indenter = getIndenter() + indenter.write("") + + self.factory._cpolicy._writeOutImports() + + for res in self._resources: + write_import(res, from_imports) + + return {"widgetname": str(w), + "uiclass" : w.uiclass, + "baseclass" : w.baseclass} diff --git a/sources/pyside2-tools/pyside2uic/Compiler/indenter.py b/sources/pyside2-tools/pyside2uic/Compiler/indenter.py new file mode 100644 index 0000000..c8700ae --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/Compiler/indenter.py @@ -0,0 +1,59 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2009 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +indentwidth = 4 + +_indenter = None + +class _IndentedCodeWriter(object): + def __init__(self, output): + self.level = 0 + self.output = output + + def indent(self): + self.level += 1 + + def dedent(self): + self.level -= 1 + + def write(self, line): + if line.strip(): + if indentwidth > 0: + indent = " " * indentwidth + line = line.replace("\t", indent) + else: + indent = "\t" + + self.output.write("%s%s\n" % (indent * self.level, line)) + else: + self.output.write("\n") + + +def createCodeIndenter(output): + global _indenter + _indenter = _IndentedCodeWriter(output) + +def getIndenter(): + return _indenter + +def write_code(string): + _indenter.write(string) diff --git a/sources/pyside2-tools/pyside2uic/Compiler/misc.py b/sources/pyside2-tools/pyside2uic/Compiler/misc.py new file mode 100644 index 0000000..bd95663 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/Compiler/misc.py @@ -0,0 +1,52 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + + +from pyside2uic.Compiler.indenter import write_code + + +def write_import(module_name, from_imports): + if from_imports: + write_code("from . import %s" % module_name) + else: + write_code("import %s" % module_name) + + +def moduleMember(module, name): + if module: + return "%s.%s" % (module, name) + + return name + + +class Literal(object): + """Literal(string) -> new literal + + string will not be quoted when put into an argument list""" + def __init__(self, string): + self.string = string + + def __str__(self): + return self.string + + def __or__(self, r_op): + return Literal("%s|%s" % (self, r_op)) diff --git a/sources/pyside2-tools/pyside2uic/Compiler/proxy_type.py b/sources/pyside2-tools/pyside2uic/Compiler/proxy_type.py new file mode 100644 index 0000000..01a26fb --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/Compiler/proxy_type.py @@ -0,0 +1,59 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +from pyside2uic.Compiler.misc import Literal, moduleMember + + +class ProxyType(type): + def __init__(*args): + type.__init__(*args) + for cls in args[0].__dict__.values(): + if type(cls) is ProxyType: + cls.module = args[0].__name__ + + if not hasattr(args[0], "module"): + args[0].module = "" + + def __getattribute__(cls, name): + try: + return type.__getattribute__(cls, name) + except AttributeError: + # Handle internal (ie. non-PySide) attributes as normal. + if name == "module": + raise + + # Avoid a circular import. + from pyside2uic.Compiler.qtproxies import LiteralProxyClass + + return type(name, (LiteralProxyClass, ), + {"module": moduleMember(type.__getattribute__(cls, "module"), + type.__getattribute__(cls, "__name__"))}) + + def __str__(cls): + return moduleMember(type.__getattribute__(cls, "module"), + type.__getattribute__(cls, "__name__")) + + def __or__(self, r_op): + return Literal("%s|%s" % (self, r_op)) + + def __eq__(self, other): + return str(self) == str(other) diff --git a/sources/pyside2-tools/pyside2uic/Compiler/qobjectcreator.py b/sources/pyside2-tools/pyside2uic/Compiler/qobjectcreator.py new file mode 100644 index 0000000..296ac36 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/Compiler/qobjectcreator.py @@ -0,0 +1,165 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + + +import logging + +try: + set() +except NameError: + from sets import Set as set + +from pyside2uic.Compiler.indenter import write_code +from pyside2uic.Compiler.qtproxies import (QtWidgets, QtGui, Literal, + strict_getattr) + + +logger = logging.getLogger(__name__) +DEBUG = logger.debug + + +class _QtGuiWrapper(object): + def search(clsname): + try: + return strict_getattr(QtGui, clsname) + except AttributeError: + return None + + search = staticmethod(search) + + +class _QtWidgetsWrapper(object): + def search(clsname): + try: + return strict_getattr(QtWidgets, clsname) + except AttributeError: + return None + + search = staticmethod(search) + + +class _ModuleWrapper(object): + def __init__(self, name, classes): + if "." in name: + idx = name.rfind(".") + self._package = name[:idx] + self._module = name[idx + 1:] + else: + self._package = None + self._module = name + + self._classes = set(classes) + self._used = False + + def search(self, cls): + if cls in self._classes: + self._used = True + return type(cls, (QtWidgets.QWidget,), {"module": self._module}) + else: + return None + + def _writeImportCode(self): + if self._used: + if self._package is None: + write_code("import %s" % self._module) + else: + write_code("from %s import %s" % (self._package, self._module)) + + +class _CustomWidgetLoader(object): + def __init__(self): + self._widgets = {} + self._usedWidgets = set() + + def addCustomWidget(self, widgetClass, baseClass, module): + assert widgetClass not in self._widgets + self._widgets[widgetClass] = (baseClass, module) + + + def _resolveBaseclass(self, baseClass): + try: + for x in range(0, 10): + try: return strict_getattr(QtWidgets, baseClass) + except AttributeError: pass + + baseClass = self._widgets[baseClass][0] + else: + raise ValueError("baseclass resolve took too long, check custom widgets") + + except KeyError: + raise ValueError("unknown baseclass %s" % baseClass) + + + def search(self, cls): + try: + self._usedWidgets.add(cls) + baseClass = self._resolveBaseclass(self._widgets[cls][0]) + DEBUG("resolved baseclass of %s: %s" % (cls, baseClass)) + + return type(cls, (baseClass,), + {"module" : ""}) + + except KeyError: + return None + + def _writeImportCode(self): + imports = {} + for widget in self._usedWidgets: + _, module = self._widgets[widget] + imports.setdefault(module, []).append(widget) + + for module, classes in imports.items(): + write_code("from %s import %s" % (module, ", ".join(classes))) + + +class CompilerCreatorPolicy(object): + def __init__(self): + self._modules = [] + + def createQtGuiWrapper(self): + return _QtGuiWrapper + + def createQtWidgetsWrapper(self): + return _QtWidgetsWrapper + + def createModuleWrapper(self, name, classes): + mw = _ModuleWrapper(name, classes) + self._modules.append(mw) + return mw + + def createCustomWidgetLoader(self): + cw = _CustomWidgetLoader() + self._modules.append(cw) + return cw + + def instantiate(self, clsObject, objectname, ctor_args, is_attribute=True, no_instantiation=False): + return clsObject(objectname, is_attribute, ctor_args, no_instantiation) + + def invoke(self, rname, method, args): + return method(rname, *args) + + def getSlot(self, object, slotname): + return Literal("%s.%s" % (object, slotname)) + + def _writeOutImports(self): + for module in self._modules: + module._writeImportCode() diff --git a/sources/pyside2-tools/pyside2uic/Compiler/qtproxies.py b/sources/pyside2-tools/pyside2uic/Compiler/qtproxies.py new file mode 100644 index 0000000..506c5df --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/Compiler/qtproxies.py @@ -0,0 +1,408 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + + +import sys +import re + +from pyside2uic.Compiler.indenter import write_code +from pyside2uic.Compiler.misc import Literal, moduleMember + +if sys.hexversion >= 0x03000000: + from pyside2uic.port_v3.proxy_base import ProxyBase + from pyside2uic.port_v3.as_string import as_string +else: + from pyside2uic.port_v2.proxy_base import ProxyBase + from pyside2uic.port_v2.as_string import as_string + +i18n_strings = [] +i18n_context = "" + +def i18n_print(string): + i18n_strings.append(string) + +def i18n_void_func(name): + def _printer(self, *args): + i18n_print("%s.%s(%s)" % (self, name, ", ".join(map(as_string, args)))) + return _printer + +def i18n_func(name): + def _printer(self, rname, *args): + i18n_print("%s = %s.%s(%s)" % (rname, self, name, ", ".join(map(as_string, args)))) + return Literal(rname) + + return _printer + +def strict_getattr(module, clsname): + cls = getattr(module, clsname) + if issubclass(cls, LiteralProxyClass): + raise AttributeError(cls) + else: + return cls + + +class i18n_string(object): + def __init__(self, string, disambig): + self.string = string + self.disambig = disambig + + def __str__(self): + if self.disambig is None: + disambig = "None" + else: + disambig = as_string(self.disambig, encode=False) + + return 'QtWidgets.QApplication.translate("%s", %s, %s, -1)' % (i18n_context, as_string(self.string, encode=False), disambig) + + +# Classes with this flag will be handled as literal values. If functions are +# called on these classes, the literal value changes. +# Example: +# the code +# >>> QSize(9,10).expandedTo(...) +# will print just that code. +AS_ARGUMENT = 2 + +# ATTENTION: currently, classes can either be literal or normal. If a class +# should need both kinds of behaviour, the code has to be changed. + +class ProxyClassMember(object): + def __init__(self, proxy, function_name, flags): + self.proxy = proxy + self.function_name = function_name + self.flags = flags + + def __str__(self): + return "%s.%s" % (self.proxy, self.function_name) + + def __call__(self, *args): + func_call = "%s.%s(%s)" % (self.proxy, + self.function_name, + ", ".join(map(as_string, args))) + if self.flags & AS_ARGUMENT: + self.proxy._uic_name = func_call + return self.proxy + else: + needs_translation = False + for arg in args: + if isinstance(arg, i18n_string): + needs_translation = True + if needs_translation: + i18n_print(func_call) + else: + write_code(func_call) + + +class ProxyClass(ProxyBase): + flags = 0 + + def __init__(self, objectname, is_attribute, args=(), noInstantiation=False): + if objectname: + if is_attribute: + objectname = "self." + objectname + + self._uic_name = objectname + else: + self._uic_name = "Unnamed" + + if not noInstantiation: + funcall = "%s(%s)" % \ + (moduleMember(self.module, self.__class__.__name__), + ", ".join(map(str, args))) + + if objectname: + funcall = "%s = %s" % (objectname, funcall) + + write_code(funcall) + + def __str__(self): + return self._uic_name + + def __getattribute__(self, attribute): + try: + return object.__getattribute__(self, attribute) + except AttributeError: + return ProxyClassMember(self, attribute, self.flags) + + +class LiteralProxyClass(ProxyClass): + """LiteralObject(*args) -> new literal class + + a literal class can be used as argument in a function call + + >>> class Foo(LiteralProxyClass): pass + >>> str(Foo(1,2,3)) == "Foo(1,2,3)" + """ + flags = AS_ARGUMENT + def __init__(self, *args): + self._uic_name = "%s(%s)" % \ + (moduleMember(self.module, self.__class__.__name__), + ", ".join(map(as_string, args))) + + +class ProxyNamespace(ProxyBase): + pass + + +# These are all the Qt classes used by pyuic4 in their namespaces. If a class +# is missing, the compiler will fail, normally with an AttributeError. +# +# For adding new classes: +# - utility classes used as literal values do not need to be listed +# because they are created on the fly as subclasses of LiteralProxyClass +# - classes which are *not* QWidgets inherit from ProxyClass and they +# have to be listed explicitly in the correct namespace. These classes +# are created via a ProxyQObjectCreator +# - new QWidget-derived classes have to inherit from qtproxies.QWidget +# If the widget does not need any special methods, it can be listed +# in _qwidgets + +class QtCore(ProxyNamespace): + class Qt(ProxyNamespace): + pass + + ## connectSlotsByName and connect have to be handled as class methods, + ## otherwise they would be created as LiteralProxyClasses and never be + ## printed + class QMetaObject(ProxyClass): + def connectSlotsByName(cls, *args): + ProxyClassMember(cls, "connectSlotsByName", 0)(*args) + connectSlotsByName = classmethod(connectSlotsByName) + + + class QObject(ProxyClass): + def metaObject(self): + class _FakeMetaObject(object): + def className(*args): + return self.__class__.__name__ + return _FakeMetaObject() + + def objectName(self): + return self._uic_name.split(".")[-1] + + def connect(cls, *args): + # Handle slots that have names corresponding to Python keywords. + slot_name = str(args[-1]) + if slot_name.endswith('.raise'): + args = list(args[:-1]) + args.append(Literal(slot_name + '_')) + + ProxyClassMember(cls, "connect", 0)(*args) + connect = classmethod(connect) + +class QtGui(ProxyNamespace): + class QIcon(ProxyClass): pass + class QConicalGradient(ProxyClass): pass + class QLinearGradient(ProxyClass): pass + class QRadialGradient(ProxyClass): pass + class QBrush(ProxyClass): pass + class QPainter(ProxyClass): pass + class QPalette(ProxyClass): pass + class QFont(ProxyClass): pass + +# These sub-class QWidget but aren't themselves sub-classed. +_qwidgets = ("QCalendarWidget", "QDialogButtonBox", "QDockWidget", "QGroupBox", + "QLineEdit", "QMainWindow", "QMenuBar", "QProgressBar", "QStatusBar", + "QToolBar", "QWizardPage") + +class QtWidgets(ProxyNamespace): + class QApplication(QtCore.QObject): + def translate(uiname, text, disambig, encoding): + return i18n_string(text or "", disambig) + translate = staticmethod(translate) + + class QSpacerItem(ProxyClass): pass + class QSizePolicy(ProxyClass): pass + ## QActions inherit from QObject for the metaobject stuff + ## and the hierarchy has to be correct since we have a + ## isinstance(x, QtWidgets.QLayout) call in the ui parser + class QAction(QtCore.QObject): pass + class QActionGroup(QtCore.QObject): pass + class QButtonGroup(QtCore.QObject): pass + class QLayout(QtCore.QObject): + def setMargin(self, v): + ProxyClassMember(self, "setContentsMargins", 0)(v, v, v, v); + + class QGridLayout(QLayout): pass + class QBoxLayout(QLayout): pass + class QHBoxLayout(QBoxLayout): pass + class QVBoxLayout(QBoxLayout): pass + class QFormLayout(QLayout): pass + + class QWidget(QtCore.QObject): + def font(self): + return Literal("%s.font()" % self) + + def minimumSizeHint(self): + return Literal("%s.minimumSizeHint()" % self) + + def sizePolicy(self): + sp = LiteralProxyClass() + sp._uic_name = "%s.sizePolicy()" % self + return sp + + class QDialog(QWidget): pass + class QWizard(QDialog): pass + + class QAbstractSlider(QWidget): pass + class QDial(QAbstractSlider): pass + class QScrollBar(QAbstractSlider): pass + class QSlider(QAbstractSlider): pass + + class QMenu(QWidget): + def menuAction(self): + return Literal("%s.menuAction()" % self) + + class QTabWidget(QWidget): + def addTab(self, *args): + text = args[-1] + + if isinstance(text, i18n_string): + i18n_print("%s.setTabText(%s.indexOf(%s), %s)" % \ + (self._uic_name, self._uic_name, args[0], text)) + args = args[:-1] + ("", ) + + ProxyClassMember(self, "addTab", 0)(*args) + + def indexOf(self, page): + return Literal("%s.indexOf(%s)" % (self, page)) + + class QComboBox(QWidget): pass + class QFontComboBox(QComboBox): pass + + class QAbstractSpinBox(QWidget): pass + class QDoubleSpinBox(QAbstractSpinBox): pass + class QSpinBox(QAbstractSpinBox): pass + + class QDateTimeEdit(QAbstractSpinBox): pass + class QDateEdit(QDateTimeEdit): pass + class QTimeEdit(QDateTimeEdit): pass + + class QFrame(QWidget): pass + class QLabel(QFrame): pass + class QLCDNumber(QFrame): pass + class QSplitter(QFrame): pass + class QStackedWidget(QFrame): pass + + class QToolBox(QFrame): + def addItem(self, *args): + text = args[-1] + + if isinstance(text, i18n_string): + i18n_print("%s.setItemText(%s.indexOf(%s), %s)" % \ + (self._uic_name, self._uic_name, args[0], text)) + args = args[:-1] + ("", ) + + ProxyClassMember(self, "addItem", 0)(*args) + + def indexOf(self, page): + return Literal("%s.indexOf(%s)" % (self, page)) + + def layout(self): + return QtWidgets.QLayout("%s.layout()" % self, + False, (), noInstantiation=True) + + class QAbstractScrollArea(QFrame): pass + class QGraphicsView(QAbstractScrollArea): pass + class QMdiArea(QAbstractScrollArea): pass + class QPlainTextEdit(QAbstractScrollArea): pass + class QScrollArea(QAbstractScrollArea): pass + + class QTextEdit(QAbstractScrollArea): pass + class QTextBrowser(QTextEdit): pass + + class QAbstractItemView(QAbstractScrollArea): pass + class QColumnView(QAbstractItemView): pass + class QHeaderView(QAbstractItemView): pass + class QListView(QAbstractItemView): pass + + class QTableView(QAbstractItemView): + def horizontalHeader(self): + return QtWidgets.QHeaderView("%s.horizontalHeader()" % self, + False, (), noInstantiation=True) + + def verticalHeader(self): + return QtWidgets.QHeaderView("%s.verticalHeader()" % self, + False, (), noInstantiation=True) + + class QTreeView(QAbstractItemView): + def header(self): + return QtWidgets.QHeaderView("%s.header()" % self, + False, (), noInstantiation=True) + + class QListWidgetItem(ProxyClass): pass + + class QListWidget(QListView): + isSortingEnabled = i18n_func("isSortingEnabled") + setSortingEnabled = i18n_void_func("setSortingEnabled") + + def item(self, row): + return QtWidgets.QListWidgetItem("%s.item(%i)" % (self, row), False, + (), noInstantiation=True) + + class QTableWidgetItem(ProxyClass): pass + + class QTableWidget(QTableView): + isSortingEnabled = i18n_func("isSortingEnabled") + setSortingEnabled = i18n_void_func("setSortingEnabled") + + def item(self, row, col): + return QtWidgets.QTableWidgetItem("%s.item(%i, %i)" % (self, row, col), + False, (), noInstantiation=True) + + def horizontalHeaderItem(self, col): + return QtWidgets.QTableWidgetItem("%s.horizontalHeaderItem(%i)" % (self, col), + False, (), noInstantiation=True) + + def verticalHeaderItem(self, row): + return QtWidgets.QTableWidgetItem("%s.verticalHeaderItem(%i)" % (self, row), + False, (), noInstantiation=True) + + class QTreeWidgetItem(ProxyClass): + def child(self, index): + return QtWidgets.QTreeWidgetItem("%s.child(%i)" % (self, index), + False, (), noInstantiation=True) + + class QTreeWidget(QTreeView): + isSortingEnabled = i18n_func("isSortingEnabled") + setSortingEnabled = i18n_void_func("setSortingEnabled") + + def headerItem(self): + return QtWidgets.QWidget("%s.headerItem()" % self, False, (), + noInstantiation=True) + + def topLevelItem(self, index): + return QtWidgets.QTreeWidgetItem("%s.topLevelItem(%i)" % (self, index), + False, (), noInstantiation=True) + + class QAbstractButton(QWidget): pass + class QCheckBox(QAbstractButton): pass + class QRadioButton(QAbstractButton): pass + class QToolButton(QAbstractButton): pass + + class QPushButton(QAbstractButton): pass + class QCommandLinkButton(QPushButton): pass + + # Add all remaining classes. + for _class in _qwidgets: + if _class not in locals(): + locals()[_class] = type(_class, (QWidget, ), {}) diff --git a/sources/pyside2-tools/pyside2uic/__init__.py.in b/sources/pyside2-tools/pyside2uic/__init__.py.in new file mode 100644 index 0000000..8d48844 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/__init__.py.in @@ -0,0 +1,150 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +__all__ = ("compileUi", "compileUiDir", "widgetPluginPath") + +__version__ = "@pyside_tools_VERSION@" + +from pyside2uic.Compiler import indenter, compiler + +_header = """# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '%s', +# licensing of '%s' applies. +# +# Created: %s +# by: pyside2-uic %s running on PySide2 %s +# +# WARNING! All changes made in this file will be lost! + +""" + +_display_code = """ +if __name__ == "__main__": +\timport sys +\tapp = QtWidgets.QApplication(sys.argv) +\t%(widgetname)s = QtWidgets.%(baseclass)s() +\tui = %(uiclass)s() +\tui.setupUi(%(widgetname)s) +\t%(widgetname)s.show() +\tsys.exit(app.exec_()) +""" + + +def compileUiDir(dir, recurse=False, map=None, **compileUi_args): + """compileUiDir(dir, recurse=False, map=None, **compileUi_args) + + Creates Python modules from Qt Designer .ui files in a directory or + directory tree. + + dir is the name of the directory to scan for files whose name ends with + '.ui'. By default the generated Python module is created in the same + directory ending with '.py'. + recurse is set if any sub-directories should be scanned. The default is + False. + map is an optional callable that is passed the name of the directory + containing the '.ui' file and the name of the Python module that will be + created. The callable should return a tuple of the name of the directory + in which the Python module will be created and the (possibly modified) + name of the module. The default is None. + compileUi_args are any additional keyword arguments that are passed to + the compileUi() function that is called to create each Python module. + """ + + import os + + # Compile a single .ui file. + def compile_ui(ui_dir, ui_file): + # Ignore if it doesn't seem to be a .ui file. + if ui_file.endswith('.ui'): + py_dir = ui_dir + py_file = ui_file[:-3] + '.py' + + # Allow the caller to change the name of the .py file or generate + # it in a different directory. + if map is not None: + py_dir, py_file = map(py_dir, py_file) + + # Make sure the destination directory exists. + try: + os.makedirs(py_dir) + except: + pass + + ui_path = os.path.join(ui_dir, ui_file) + py_path = os.path.join(py_dir, py_file) + + ui_file = open(ui_path, 'r') + py_file = open(py_path, 'w') + + try: + compileUi(ui_file, py_file, **compileUi_args) + finally: + ui_file.close() + py_file.close() + + if recurse: + for root, _, files in os.walk(dir): + for ui in files: + compile_ui(root, ui) + else: + for ui in os.listdir(dir): + if os.path.isfile(os.path.join(dir, ui)): + compile_ui(dir, ui) + + +def compileUi(uifile, pyfile, execute=False, indent=4, from_imports=False): + """compileUi(uifile, pyfile, execute=False, indent=4, from_imports=False) + + Creates a Python module from a Qt Designer .ui file. + + uifile is a file name or file-like object containing the .ui file. + pyfile is the file-like object to which the Python code will be written to. + execute is optionally set to generate extra Python code that allows the + code to be run as a standalone application. The default is False. + indent is the optional indentation width using spaces. If it is 0 then a + tab is used. The default is 4. + from_imports is optionally set to generate import statements that are + relative to '.'. + """ + + from time import ctime + import PySide2 + + try: + uifname = uifile.name + except AttributeError: + uifname = uifile + + indenter.indentwidth = indent + + global PySideToolsVersion + pyfile.write(_header % (uifname, uifname, ctime(), __version__, PySide2.__version__)) + + winfo = compiler.UICompiler().compileUi(uifile, pyfile, from_imports) + + if execute: + indenter.write_code(_display_code % winfo) + + +# The list of directories that are searched for widget plugins. +from pyside2uic.objcreator import widgetPluginPath diff --git a/sources/pyside2-tools/pyside2uic/driver.py b/sources/pyside2-tools/pyside2uic/driver.py new file mode 100644 index 0000000..7b37509 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/driver.py @@ -0,0 +1,128 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + + +import sys +import logging + +from pyside2uic import compileUi + + +class Driver(object): + """ This encapsulates access to the pyuic functionality so that it can be + called by code that is Python v2/v3 specific. + """ + + LOGGER_NAME = 'PySide2.uic' + + def __init__(self, opts, ui_file): + """ Initialise the object. opts is the parsed options. ui_file is the + name of the .ui file. + """ + + if opts.debug: + logger = logging.getLogger(self.LOGGER_NAME) + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter("%(name)s: %(message)s")) + logger.addHandler(handler) + logger.setLevel(logging.DEBUG) + + self._opts = opts + self._ui_file = ui_file + + def invoke(self): + """ Invoke the action as specified by the parsed options. Returns 0 if + there was no error. + """ + + if self._opts.preview: + return self._preview() + + self._generate() + + return 0 + + def _preview(self): + """ Preview the .ui file. Return the exit status to be passed back to + the parent process. + """ + + from PySide2 import QtUiTools + from PySide2 import QtGui + from PySide2 import QtWidgets + + app = QtWidgets.QApplication([self._ui_file]) + widget = QtUiTools.QUiLoader().load(self._ui_file) + widget.show() + + return app.exec_() + + def _generate(self): + """ Generate the Python code. """ + + if sys.hexversion >= 0x03000000: + if self._opts.output == '-': + from io import TextIOWrapper + + pyfile = TextIOWrapper(sys.stdout.buffer, encoding='utf8') + else: + pyfile = open(self._opts.output, 'wt', encoding='utf8') + else: + if self._opts.output == '-': + pyfile = sys.stdout + else: + pyfile = open(self._opts.output, 'wt') + + compileUi(self._ui_file, pyfile, self._opts.execute, self._opts.indent, self._opts.from_imports) + + def on_IOError(self, e): + """ Handle an IOError exception. """ + + sys.stderr.write("Error: %s: \"%s\"\n" % (e.strerror, e.filename)) + + def on_SyntaxError(self, e): + """ Handle a SyntaxError exception. """ + + sys.stderr.write("Error in input file: %s\n" % e) + + def on_NoSuchWidgetError(self, e): + """ Handle a NoSuchWidgetError exception. """ + + if e.args[0].startswith("Q3"): + sys.stderr.write("Error: Q3Support widgets are not supported by PySide2.\n") + else: + sys.stderr.write(str(e) + "\n") + + def on_Exception(self, e): + """ Handle a generic exception. """ + + if logging.getLogger(self.LOGGER_NAME).level == logging.DEBUG: + import traceback + + traceback.print_exception(*sys.exc_info()) + else: + from PySide2 import QtCore + + sys.stderr.write("""An unexpected error occurred. +Check that you are using the latest version of PySide2 and report the error to +http://bugs.openbossa.org, including the ui file used to trigger the error. +""") diff --git a/sources/pyside2-tools/pyside2uic/exceptions.py b/sources/pyside2-tools/pyside2uic/exceptions.py new file mode 100644 index 0000000..18bb51a --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/exceptions.py @@ -0,0 +1,31 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2009 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +class NoSuchWidgetError(Exception): + def __str__(self): + return "Unknown Qt widget: %s" % (self.args[0],) + +class UnsupportedPropertyError(Exception): + pass + +class WidgetPluginError(Exception): + pass diff --git a/sources/pyside2-tools/pyside2uic/icon_cache.py b/sources/pyside2-tools/pyside2uic/icon_cache.py new file mode 100644 index 0000000..523d207 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/icon_cache.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python +# This file is part of the PySide project. +# +# Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + + +import os.path + + +class IconCache(object): + """Maintain a cache of icons. If an icon is used more than once by a GUI + then ensure that only one copy is created. + """ + + def __init__(self, object_factory, qtgui_module): + """Initialise the cache.""" + + self._object_factory = object_factory + self._qtgui_module = qtgui_module + self._base_dir = '' + self._cache = [] + + def set_base_dir(self, base_dir): + """ Set the base directory to be used for all relative filenames. """ + + self._base_dir = base_dir + + def get_icon(self, iconset): + """Return an icon described by the given iconset tag.""" + + iset = _IconSet(iconset, self._base_dir) + + try: + idx = self._cache.index(iset) + except ValueError: + idx = -1 + + if idx >= 0: + # Return the icon from the cache. + iset = self._cache[idx] + else: + # Follow uic's naming convention. + name = 'icon' + idx = len(self._cache) + + if idx > 0: + name += str(idx) + + icon = self._object_factory.createQObject("QIcon", name, (), + is_attribute=False) + iset.set_icon(icon, self._qtgui_module) + self._cache.append(iset) + + return iset.icon + + +class _IconSet(object): + """An icon set, ie. the mode and state and the pixmap used for each.""" + + def __init__(self, iconset, base_dir): + """Initialise the icon set from an XML tag.""" + + # Set the pre-Qt v4.4 fallback (ie. with no roles). + self._fallback = self._file_name(iconset.text, base_dir) + self._use_fallback = True + + # Parse the icon set. + self._roles = {} + + for i in iconset: + file_name = i.text + if file_name is not None: + file_name = self._file_name(file_name, base_dir) + + self._roles[i.tag] = file_name + self._use_fallback = False + + # There is no real icon yet. + self.icon = None + + @staticmethod + def _file_name(fname, base_dir): + """ Convert a relative filename if we have a base directory. """ + + fname = fname.replace("\\", "\\\\") + + if base_dir != '' and fname[0] != ':' and not os.path.isabs(fname): + fname = os.path.join(base_dir, fname) + + return fname + + def set_icon(self, icon, qtgui_module): + """Save the icon and set its attributes.""" + + if self._use_fallback: + icon.addFile(self._fallback) + else: + for role, pixmap in self._roles.items(): + if role.endswith("off"): + mode = role[:-3] + state = qtgui_module.QIcon.Off + elif role.endswith("on"): + mode = role[:-2] + state = qtgui_module.QIcon.On + else: + continue + + mode = getattr(qtgui_module.QIcon, mode.title()) + + if pixmap: + icon.addPixmap(qtgui_module.QPixmap(pixmap), mode, state) + else: + icon.addPixmap(qtgui_module.QPixmap(), mode, state) + + self.icon = icon + + def __eq__(self, other): + """Compare two icon sets for equality.""" + + if not isinstance(other, type(self)): + return NotImplemented + + if self._use_fallback: + if other._use_fallback: + return self._fallback == other._fallback + + return False + + if other._use_fallback: + return False + + return self._roles == other._roles diff --git a/sources/pyside2-tools/pyside2uic/objcreator.py b/sources/pyside2-tools/pyside2uic/objcreator.py new file mode 100644 index 0000000..1721c8f --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/objcreator.py @@ -0,0 +1,113 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +import sys +import os.path + +from pyside2uic.exceptions import NoSuchWidgetError, WidgetPluginError + +if sys.hexversion >= 0x03000000: + from pyside2uic.port_v3.load_plugin import load_plugin +else: + from pyside2uic.port_v2.load_plugin import load_plugin + + +# The list of directories that are searched for widget plugins. This is +# exposed as part of the API. +widgetPluginPath = [os.path.join(os.path.dirname(__file__), 'widget-plugins')] + + +MATCH = True +NO_MATCH = False +MODULE = 0 +CW_FILTER = 1 + + +class QObjectCreator(object): + def __init__(self, creatorPolicy): + self._cpolicy = creatorPolicy + + self._cwFilters = [] + self._modules = [self._cpolicy.createQtWidgetsWrapper(), + self._cpolicy.createQtGuiWrapper()] + + # Get the optional plugins. + for plugindir in widgetPluginPath: + try: + plugins = os.listdir(plugindir) + except: + plugins = [] + + for filename in plugins: + if not filename.endswith('.py') or filename == '__init__.py': + continue + + filename = os.path.join(plugindir, filename) + + plugin_globals = { + "MODULE": MODULE, + "CW_FILTER": CW_FILTER, + "MATCH": MATCH, + "NO_MATCH": NO_MATCH} + + plugin_locals = {} + + if load_plugin(open(filename), plugin_globals, plugin_locals): + pluginType = plugin_locals["pluginType"] + if pluginType == MODULE: + modinfo = plugin_locals["moduleInformation"]() + self._modules.append(self._cpolicy.createModuleWrapper(*modinfo)) + elif pluginType == CW_FILTER: + self._cwFilters.append(plugin_locals["getFilter"]()) + else: + raise WidgetPluginError("Unknown plugin type of %s" % filename) + + self._customWidgets = self._cpolicy.createCustomWidgetLoader() + self._modules.append(self._customWidgets) + + def createQObject(self, classname, *args, **kwargs): + classType = self.findQObjectType(classname) + if classType: + return self._cpolicy.instantiate(classType, *args, **kwargs) + raise NoSuchWidgetError(classname) + + def invoke(self, rname, method, args=()): + return self._cpolicy.invoke(rname, method, args) + + def findQObjectType(self, classname): + for module in self._modules: + w = module.search(classname) + if w is not None: + return w + return None + + def getSlot(self, obj, slotname): + return self._cpolicy.getSlot(obj, slotname) + + def addCustomWidget(self, widgetClass, baseClass, module): + for cwFilter in self._cwFilters: + match, result = cwFilter(widgetClass, baseClass, module) + if match: + widgetClass, baseClass, module = result + break + + self._customWidgets.addCustomWidget(widgetClass, baseClass, module) diff --git a/sources/pyside2-tools/pyside2uic/port_v2/__init__.py b/sources/pyside2-tools/pyside2uic/port_v2/__init__.py new file mode 100644 index 0000000..164c865 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v2/__init__.py @@ -0,0 +1,20 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA diff --git a/sources/pyside2-tools/pyside2uic/port_v2/as_string.py b/sources/pyside2-tools/pyside2uic/port_v2/as_string.py new file mode 100644 index 0000000..23272b2 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v2/as_string.py @@ -0,0 +1,40 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +import re + + +def as_string(obj, encode=True): + if isinstance(obj, basestring): + s = '"' + _escape(obj.encode('UTF-8')) + '"' + return s + + return str(obj) + + +_esc_regex = re.compile(r"(\"|\'|\\)") + +def _escape(text): + # This escapes any escaped single or double quote or backslash. + x = _esc_regex.sub(r"\\\1", text) + + # This replaces any '\n' with an escaped version and a real line break. + return re.sub(r'\n', r'\\n"\n"', x) diff --git a/sources/pyside2-tools/pyside2uic/port_v2/ascii_upper.py b/sources/pyside2-tools/pyside2uic/port_v2/ascii_upper.py new file mode 100644 index 0000000..05843bf --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v2/ascii_upper.py @@ -0,0 +1,32 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +import string + + +# A translation table for converting ASCII lower case to upper case. +_ascii_trans_table = string.maketrans(string.ascii_lowercase, + string.ascii_uppercase) + + +# Convert a string to ASCII upper case irrespective of the current locale. +def ascii_upper(s): + return s.translate(_ascii_trans_table) diff --git a/sources/pyside2-tools/pyside2uic/port_v2/invoke.py b/sources/pyside2-tools/pyside2uic/port_v2/invoke.py new file mode 100644 index 0000000..0072c97 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v2/invoke.py @@ -0,0 +1,48 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +from pyside2uic.exceptions import NoSuchWidgetError + + +def invoke(driver): + """ Invoke the given command line driver. Return the exit status to be + passed back to the parent process. + """ + + exit_status = 1 + + try: + exit_status = driver.invoke() + + except IOError, e: + driver.on_IOError(e) + + except SyntaxError, e: + driver.on_SyntaxError(e) + + except NoSuchWidgetError, e: + driver.on_NoSuchWidgetError(e) + + except Exception, e: + driver.on_Exception(e) + + return exit_status diff --git a/sources/pyside2-tools/pyside2uic/port_v2/load_plugin.py b/sources/pyside2-tools/pyside2uic/port_v2/load_plugin.py new file mode 100644 index 0000000..3e82f9f --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v2/load_plugin.py @@ -0,0 +1,39 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +from pyside2uic.exceptions import WidgetPluginError + + +def load_plugin(plugin, plugin_globals, plugin_locals): + """ Load the given plugin (which is an open file). Return True if the + plugin was loaded, or False if it wanted to be ignored. Raise an exception + if there was an error. + """ + + try: + exec(plugin.read(), plugin_globals, plugin_locals) + except ImportError: + return False + except Exception, e: + raise WidgetPluginError("%s: %s" % (e.__class__, str(e))) + + return True diff --git a/sources/pyside2-tools/pyside2uic/port_v2/proxy_base.py b/sources/pyside2-tools/pyside2uic/port_v2/proxy_base.py new file mode 100644 index 0000000..b5cacb8 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v2/proxy_base.py @@ -0,0 +1,27 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +from pyside2uic.Compiler.proxy_type import ProxyType + + +class ProxyBase(object): + __metaclass__ = ProxyType diff --git a/sources/pyside2-tools/pyside2uic/port_v2/string_io.py b/sources/pyside2-tools/pyside2uic/port_v2/string_io.py new file mode 100644 index 0000000..4657b52 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v2/string_io.py @@ -0,0 +1,27 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + + +# Import the StringIO object. +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO diff --git a/sources/pyside2-tools/pyside2uic/port_v3/__init__.py b/sources/pyside2-tools/pyside2uic/port_v3/__init__.py new file mode 100644 index 0000000..164c865 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v3/__init__.py @@ -0,0 +1,20 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA diff --git a/sources/pyside2-tools/pyside2uic/port_v3/as_string.py b/sources/pyside2-tools/pyside2uic/port_v3/as_string.py new file mode 100644 index 0000000..51acccf --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v3/as_string.py @@ -0,0 +1,41 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +import re + + +def as_string(obj, encode=True): + if isinstance(obj, str): + s = '"' + _escape(obj) + '"' + + return s + + return str(obj) + + +_esc_regex = re.compile(r"(\"|\'|\\)") + +def _escape(text): + # This escapes any escaped single or double quote or backslash. + x = _esc_regex.sub(r"\\\1", text) + + # This replaces any '\n' with an escaped version and a real line break. + return re.sub(r'\n', r'\\n"\n"', x) diff --git a/sources/pyside2-tools/pyside2uic/port_v3/ascii_upper.py b/sources/pyside2-tools/pyside2uic/port_v3/ascii_upper.py new file mode 100644 index 0000000..00af8b8 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v3/ascii_upper.py @@ -0,0 +1,30 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + + +# A translation table for converting ASCII lower case to upper case. +_ascii_trans_table = bytes.maketrans(b'abcdefghijklmnopqrstuvwxyz', + b'ABCDEFGHIJKLMNOPQRSTUVWXYZ') + + +# Convert a string to ASCII upper case irrespective of the current locale. +def ascii_upper(s): + return s.translate(_ascii_trans_table) diff --git a/sources/pyside2-tools/pyside2uic/port_v3/invoke.py b/sources/pyside2-tools/pyside2uic/port_v3/invoke.py new file mode 100644 index 0000000..81edfb4 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v3/invoke.py @@ -0,0 +1,48 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +from pyside2uic.exceptions import NoSuchWidgetError + + +def invoke(driver): + """ Invoke the given command line driver. Return the exit status to be + passed back to the parent process. + """ + + exit_status = 1 + + try: + exit_status = driver.invoke() + + except IOError as e: + driver.on_IOError(e) + + except SyntaxError as e: + driver.on_SyntaxError(e) + + except NoSuchWidgetError as e: + driver.on_NoSuchWidgetError(e) + + except Exception as e: + driver.on_Exception(e) + + return exit_status diff --git a/sources/pyside2-tools/pyside2uic/port_v3/load_plugin.py b/sources/pyside2-tools/pyside2uic/port_v3/load_plugin.py new file mode 100644 index 0000000..3fc4020 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v3/load_plugin.py @@ -0,0 +1,39 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +from pyside2uic.exceptions import WidgetPluginError + + +def load_plugin(plugin, plugin_globals, plugin_locals): + """ Load the given plugin (which is an open file). Return True if the + plugin was loaded, or False if it wanted to be ignored. Raise an exception + if there was an error. + """ + + try: + exec(plugin.read(), plugin_globals, plugin_locals) + except ImportError: + return False + except Exception as e: + raise WidgetPluginError("%s: %s" % (e.__class__, str(e))) + + return True diff --git a/sources/pyside2-tools/pyside2uic/port_v3/proxy_base.py b/sources/pyside2-tools/pyside2uic/port_v3/proxy_base.py new file mode 100644 index 0000000..c24f6ab --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v3/proxy_base.py @@ -0,0 +1,27 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +from pyside2uic.Compiler.proxy_type import ProxyType + + +class ProxyBase(metaclass=ProxyType): + pass diff --git a/sources/pyside2-tools/pyside2uic/port_v3/string_io.py b/sources/pyside2-tools/pyside2uic/port_v3/string_io.py new file mode 100644 index 0000000..cce6b3a --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/port_v3/string_io.py @@ -0,0 +1,24 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + + +# Import the StringIO object. +from io import StringIO diff --git a/sources/pyside2-tools/pyside2uic/properties.py b/sources/pyside2-tools/pyside2uic/properties.py new file mode 100644 index 0000000..f4d3fc2 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/properties.py @@ -0,0 +1,489 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +import logging +import os.path +import sys + +from pyside2uic.exceptions import UnsupportedPropertyError +from pyside2uic.icon_cache import IconCache + +if sys.hexversion >= 0x03000000: + from pyside2uic.port_v3.ascii_upper import ascii_upper +else: + from pyside2uic.port_v2.ascii_upper import ascii_upper + +logger = logging.getLogger(__name__) +DEBUG = logger.debug + +QtCore = None +QtGui = None +QtWidgets = None + + +def int_list(prop): + return [int(child.text) for child in prop] + +def float_list(prop): + return [float(child.text) for child in prop] + +bool_ = lambda v: v == "true" + +def needsWidget(func): + func.needsWidget = True + return func + + +class Properties(object): + def __init__(self, factory, QtCore_mod, QtGui_mod, QtWidgets_mod): + global QtGui, QtCore, QtWidgets + QtWidgets = QtWidgets_mod + QtGui = QtGui_mod + QtCore = QtCore_mod + self.factory = factory + + self._base_dir = '' + + self.reset() + + def set_base_dir(self, base_dir): + """ Set the base directory to be used for all relative filenames. """ + + self._base_dir = base_dir + self.icon_cache.set_base_dir(base_dir) + + def reset(self): + self.buddies = [] + self.delayed_props = [] + self.icon_cache = IconCache(self.factory, QtGui) + + def _pyEnumMember(self, cpp_name): + try: + prefix, membername = cpp_name.split("::") + except ValueError: + prefix = "Qt" + membername = cpp_name + + if prefix == "Qt": + return getattr(QtCore.Qt, membername) + + scope = self.factory.findQObjectType(prefix) + if scope is None: + raise AttributeError("unknown enum %s" % cpp_name) + + return getattr(scope, membername) + + def _set(self, prop): + expr = [self._pyEnumMember(v) for v in prop.text.split('|')] + + value = expr[0] + for v in expr[1:]: + value |= v + + return value + + def _enum(self, prop): + return self._pyEnumMember(prop.text) + + def _number(self, prop): + return int(prop.text) + + _uInt = _longLong = _uLongLong = _number + + def _double(self, prop): + return float(prop.text) + + def _bool(self, prop): + return prop.text == 'true' + + def _stringlist(self, prop): + return [self._string(p, notr='true') for p in prop] + + def _string(self, prop, notr=None): + text = prop.text + + if text is None: + return "" + + if prop.get('notr', notr) == 'true': + return text + + return QtWidgets.QApplication.translate(self.uiname, text, + prop.get('comment'), -1) + + _char = _string + + def _cstring(self, prop): + return str(prop.text) + + def _color(self, prop): + args = int_list(prop) + + # Handle the optional alpha component. + alpha = int(prop.get("alpha", "255")) + + if alpha != 255: + args.append(alpha) + + return QtGui.QColor(*args) + + def _point(self, prop): + return QtCore.QPoint(*int_list(prop)) + + def _pointf(self, prop): + return QtCore.QPointF(*float_list(prop)) + + def _rect(self, prop): + return QtCore.QRect(*int_list(prop)) + + def _rectf(self, prop): + return QtCore.QRectF(*float_list(prop)) + + def _size(self, prop): + return QtCore.QSize(*int_list(prop)) + + def _sizef(self, prop): + return QtCore.QSizeF(*float_list(prop)) + + def _pixmap(self, prop): + if prop.text: + fname = prop.text.replace("\\", "\\\\") + if self._base_dir != '' and fname[0] != ':' and not os.path.isabs(fname): + fname = os.path.join(self._base_dir, fname) + + return QtGui.QPixmap(fname) + + # Don't bother to set the property if the pixmap is empty. + return None + + def _iconset(self, prop): + return self.icon_cache.get_icon(prop) + + def _url(self, prop): + return QtCore.QUrl(prop[0].text) + + def _locale(self, prop): + lang = getattr(QtCore.QLocale, prop.attrib['language']) + country = getattr(QtCore.QLocale, prop.attrib['country']) + return QtCore.QLocale(lang, country) + + def _cursor(self, prop): + return QtGui.QCursor(QtCore.Qt.CursorShape(int(prop.text))) + + def _date(self, prop): + return QtCore.QDate(*int_list(prop)) + + def _datetime(self, prop): + args = int_list(prop) + return QtCore.QDateTime(QtCore.QDate(*args[-3:]), QtCore.QTime(*args[:-3])) + + def _time(self, prop): + return QtCore.QTime(*int_list(prop)) + + def _gradient(self, prop): + name = 'gradient' + + # Create the specific gradient. + gtype = prop.get('type', '') + + if gtype == 'LinearGradient': + startx = float(prop.get('startx')) + starty = float(prop.get('starty')) + endx = float(prop.get('endx')) + endy = float(prop.get('endy')) + gradient = self.factory.createQObject('QLinearGradient', name, + (startx, starty, endx, endy), is_attribute=False) + + elif gtype == 'ConicalGradient': + centralx = float(prop.get('centralx')) + centraly = float(prop.get('centraly')) + angle = float(prop.get('angle')) + gradient = self.factory.createQObject('QConicalGradient', name, + (centralx, centraly, angle), is_attribute=False) + + elif gtype == 'RadialGradient': + centralx = float(prop.get('centralx')) + centraly = float(prop.get('centraly')) + radius = float(prop.get('radius')) + focalx = float(prop.get('focalx')) + focaly = float(prop.get('focaly')) + gradient = self.factory.createQObject('QRadialGradient', name, + (centralx, centraly, radius, focalx, focaly), + is_attribute=False) + + else: + raise UnsupportedPropertyError(prop.tag) + + # Set the common values. + spread = prop.get('spread') + if spread: + gradient.setSpread(getattr(QtGui.QGradient, spread)) + + cmode = prop.get('coordinatemode') + if cmode: + gradient.setCoordinateMode(getattr(QtGui.QGradient, cmode)) + + # Get the gradient stops. + for gstop in prop: + if gstop.tag != 'gradientstop': + raise UnsupportedPropertyError(gstop.tag) + + position = float(gstop.get('position')) + color = self._color(gstop[0]) + + gradient.setColorAt(position, color) + + return name + + def _palette(self, prop): + palette = self.factory.createQObject("QPalette", "palette", (), + is_attribute=False) + + for palette_elem in prop: + sub_palette = getattr(QtGui.QPalette, palette_elem.tag.title()) + for role, color in enumerate(palette_elem): + if color.tag == 'color': + # Handle simple colour descriptions where the role is + # implied by the colour's position. + palette.setColor(sub_palette, + QtGui.QPalette.ColorRole(role), self._color(color)) + elif color.tag == 'colorrole': + role = getattr(QtGui.QPalette, color.get('role')) + brush = self._brush(color[0]) + palette.setBrush(sub_palette, role, brush) + else: + raise UnsupportedPropertyError(color.tag) + + return palette + + def _brush(self, prop): + brushstyle = prop.get('brushstyle') + + if brushstyle in ('LinearGradientPattern', 'ConicalGradientPattern', 'RadialGradientPattern'): + gradient = self._gradient(prop[0]) + brush = self.factory.createQObject("QBrush", "brush", (gradient, ), + is_attribute=False) + else: + color = self._color(prop[0]) + brush = self.factory.createQObject("QBrush", "brush", (color, ), + is_attribute=False) + + brushstyle = getattr(QtCore.Qt, brushstyle) + brush.setStyle(brushstyle) + + return brush + + #@needsWidget + def _sizepolicy(self, prop, widget): + values = [int(child.text) for child in prop] + + if len(values) == 2: + # Qt v4.3.0 and later. + horstretch, verstretch = values + hsizetype = getattr(QtWidgets.QSizePolicy, prop.get('hsizetype')) + vsizetype = getattr(QtWidgets.QSizePolicy, prop.get('vsizetype')) + else: + hsizetype, vsizetype, horstretch, verstretch = values + hsizetype = QtWidgets.QSizePolicy.Policy(hsizetype) + vsizetype = QtWidgets.QSizePolicy.Policy(vsizetype) + + sizePolicy = self.factory.createQObject("QSizePolicy", "sizePolicy", + (hsizetype, vsizetype), is_attribute=False) + sizePolicy.setHorizontalStretch(horstretch) + sizePolicy.setVerticalStretch(verstretch) + sizePolicy.setHeightForWidth(widget.sizePolicy().hasHeightForWidth()) + return sizePolicy + _sizepolicy = needsWidget(_sizepolicy) + + # font needs special handling/conversion of all child elements. + _font_attributes = (("Family", str), + ("PointSize", int), + ("Weight", int), + ("Italic", bool_), + ("Underline", bool_), + ("StrikeOut", bool_), + ("Bold", bool_)) + + def _font(self, prop): + newfont = self.factory.createQObject("QFont", "font", (), + is_attribute = False) + for attr, converter in self._font_attributes: + v = prop.findtext("./%s" % (attr.lower(),)) + if v is None: + continue + + getattr(newfont, "set%s" % (attr,))(converter(v)) + return newfont + + def _cursorShape(self, prop): + return getattr(QtCore.Qt, prop.text) + + def convert(self, prop, widget=None): + try: + func = getattr(self, "_" + prop[0].tag) + except AttributeError: + raise UnsupportedPropertyError(prop[0].tag) + else: + args = {} + if getattr(func, "needsWidget", False): + assert widget is not None + args["widget"] = widget + + return func(prop[0], **args) + + + def _getChild(self, elem_tag, elem, name, default=None): + for prop in elem.findall(elem_tag): + if prop.attrib["name"] == name: + return self.convert(prop) + else: + return default + + def getProperty(self, elem, name, default=None): + return self._getChild("property", elem, name, default) + + def getAttribute(self, elem, name, default=None): + return self._getChild("attribute", elem, name, default) + + def setProperties(self, widget, elem): + try: + self.wclass = elem.attrib["class"] + except KeyError: + pass + for prop in elem.findall("property"): + prop_name = prop.attrib["name"] + DEBUG("setting property %s" % (prop_name,)) + + try: + stdset = bool(int(prop.attrib["stdset"])) + except KeyError: + stdset = True + + if not stdset: + self._setViaSetProperty(widget, prop) + elif hasattr(self, prop_name): + getattr(self, prop_name)(widget, prop) + else: + prop_value = self.convert(prop, widget) + if prop_value is not None: + getattr(widget, "set%s%s" % (ascii_upper(prop_name[0]), prop_name[1:]))(prop_value) + + # SPECIAL PROPERTIES + # If a property has a well-known value type but needs special, + # context-dependent handling, the default behaviour can be overridden here. + + # Delayed properties will be set after the whole widget tree has been + # populated. + def _delayed_property(self, widget, prop): + prop_value = self.convert(prop) + if prop_value is not None: + prop_name = prop.attrib["name"] + self.delayed_props.append((widget, False, + 'set%s%s' % (ascii_upper(prop_name[0]), prop_name[1:]), + prop_value)) + + # These properties will be set with a widget.setProperty call rather than + # calling the set function. + def _setViaSetProperty(self, widget, prop): + prop_value = self.convert(prop) + if prop_value is not None: + widget.setProperty(prop.attrib["name"], prop_value) + + # Ignore the property. + def _ignore(self, widget, prop): + pass + + # Define properties that use the canned handlers. + currentIndex = _delayed_property + currentRow = _delayed_property + + showDropIndicator = _setViaSetProperty + intValue = _setViaSetProperty + value = _setViaSetProperty + + objectName = _ignore + leftMargin = _ignore + topMargin = _ignore + rightMargin = _ignore + bottomMargin = _ignore + horizontalSpacing = _ignore + verticalSpacing = _ignore + + # tabSpacing is actually the spacing property of the widget's layout. + def tabSpacing(self, widget, prop): + prop_value = self.convert(prop) + if prop_value is not None: + self.delayed_props.append((widget, True, 'setSpacing', prop_value)) + + # buddy setting has to be done after the whole widget tree has been + # populated. We can't use delay here because we cannot get the actual + # buddy yet. + def buddy(self, widget, prop): + buddy_name = prop[0].text + if buddy_name: + self.buddies.append((widget, buddy_name)) + + # geometry is handled specially if set on the toplevel widget. + def geometry(self, widget, prop): + if widget.objectName() == self.uiname: + geom = int_list(prop[0]) + widget.resize(geom[2], geom[3]) + else: + widget.setGeometry(self._rect(prop[0])) + + def orientation(self, widget, prop): + # If the class is a QFrame, it's a line. + if widget.metaObject().className() == "QFrame": + widget.setFrameShape( + {"Qt::Horizontal": QtWidgets.QFrame.HLine, + "Qt::Vertical" : QtWidgets.QFrame.VLine}[prop[0].text]) + + # In Qt Designer, lines appear to be sunken, QFormBuilder loads + # them as such, uic generates plain lines. We stick to the look in + # Qt Designer. + widget.setFrameShadow(QtWidgets.QFrame.Sunken) + else: + widget.setOrientation(self._enum(prop[0])) + + # The isWrapping attribute of QListView is named inconsistently, it should + # be wrapping. + def isWrapping(self, widget, prop): + widget.setWrapping(self.convert(prop)) + + # This is a pseudo-property injected to deal with setContentsMargin() + # introduced in Qt v4.3. + def pyuicContentsMargins(self, widget, prop): + widget.setContentsMargins(*int_list(prop)) + + # This is a pseudo-property injected to deal with setHorizontalSpacing() + # and setVerticalSpacing() introduced in Qt v4.3. + def pyuicSpacing(self, widget, prop): + horiz, vert = int_list(prop) + + if horiz == vert: + widget.setSpacing(horiz) + else: + if horiz >= 0: + widget.setHorizontalSpacing(horiz) + + if vert >= 0: + widget.setVerticalSpacing(vert) diff --git a/sources/pyside2-tools/pyside2uic/pyside2-uic.1 b/sources/pyside2-tools/pyside2uic/pyside2-uic.1 new file mode 100644 index 0000000..98b4a4e --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/pyside2-uic.1 @@ -0,0 +1,31 @@ +.TH PYSIDE-UIC "1" "December 2010" "pyside2-uic" "User Commands" +.SH NAME +pyside2\-uic \- DESCRIPTION... +.SH DESCRIPTION +.SS "Usage:" +.IP +pyside2\-uic [options] +.SS "Options:" +.TP +\fB\-\-version +show program's version number and exit +.TP +.BI \-h\fB \fR,\fB \-\-help +show this help message and exit +.TP +.BI \-o FILE \fR, \-\-output=\fIFILE +write generated code to FILE instead of stdout +.TP +.BI \-x \fR, \-\-execute +generate extra code to test and display the class +.TP +.BI \-d \fR, \-\-debug +show debug output +.TP +.BI \-i N\fR, \-\-ident=N +set indent width to N spaces, tab if N is 0 (default: 4) +.SH COPYRIGHT +Copyright \(co 2010 Nokia Corporation and/or its subsidiary(\fB\-ies\fR) +.SH AUTHOR +.PP +This manpage was written by Marcelo Lira , on the 29. December 2010. diff --git a/sources/pyside2-tools/pyside2uic/uiparser.py b/sources/pyside2-tools/pyside2uic/uiparser.py new file mode 100644 index 0000000..5f34c92 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/uiparser.py @@ -0,0 +1,889 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +import sys +import logging +import os.path +import re + +try: + from xml.etree.cElementTree import parse, SubElement +except ImportError: + from xml.etree.ElementTree import parse, SubElement + + +from pyside2uic.exceptions import NoSuchWidgetError +from pyside2uic.objcreator import QObjectCreator +from pyside2uic.properties import Properties + + +logger = logging.getLogger(__name__) +DEBUG = logger.debug + +if sys.version_info < (2,4,0): + def reversed(seq): + for i in xrange(len(seq)-1, -1, -1): + yield seq[i] + +QtCore = None +QtGui = None +QtWidgets = None + + +def gridPosition(elem): + """gridPosition(elem) -> tuple + + Return the 4-tuple of (row, column, rowspan, colspan) + for a widget element, or an empty tuple. + """ + try: + return (int(elem.attrib["row"]), + int(elem.attrib["column"]), + int(elem.attrib.get("rowspan", 1)), + int(elem.attrib.get("colspan", 1))) + except KeyError: + return () + + +class WidgetStack(list): + topwidget = None + def push(self, item): + DEBUG("push %s %s" % (item.metaObject().className(), + item.objectName())) + self.append(item) + if isinstance(item, QtWidgets.QWidget): + self.topwidget = item + + def popLayout(self): + layout = list.pop(self) + DEBUG("pop layout %s %s" % (layout.metaObject().className(), + layout.objectName())) + return layout + + def popWidget(self): + widget = list.pop(self) + DEBUG("pop widget %s %s" % (widget.metaObject().className(), + widget.objectName())) + for item in reversed(self): + if isinstance(item, QtWidgets.QWidget): + self.topwidget = item + break + else: + self.topwidget = None + DEBUG("new topwidget %s" % (self.topwidget,)) + return widget + + def peek(self): + return self[-1] + + def topIsLayout(self): + return isinstance(self[-1], QtWidgets.QLayout) + + +class UIParser(object): + def __init__(self, QtCoreModule, QtGuiModule, QtWidgetsModule, creatorPolicy): + self.factory = QObjectCreator(creatorPolicy) + self.wprops = Properties(self.factory, QtCoreModule, QtGuiModule, QtWidgetsModule) + + global QtCore, QtGui, QtWidgets + QtCore = QtCoreModule + QtGui = QtGuiModule + QtWidgets = QtWidgetsModule + + self.reset() + + def uniqueName(self, name): + """UIParser.uniqueName(string) -> string + + Create a unique name from a string. + >>> p = UIParser(QtCore, QtGui, QtWidgets) + >>> p.uniqueName("foo") + 'foo' + >>> p.uniqueName("foo") + 'foo1' + """ + try: + suffix = self.name_suffixes[name] + except KeyError: + self.name_suffixes[name] = 0 + return name + + suffix += 1 + self.name_suffixes[name] = suffix + + return "%s%i" % (name, suffix) + + def reset(self): + try: self.wprops.reset() + except AttributeError: pass + self.toplevelWidget = None + self.stack = WidgetStack() + self.name_suffixes = {} + self.defaults = {"spacing": 6, "margin": 0} + self.actions = [] + self.currentActionGroup = None + self.resources = [] + self.button_groups = [] + self.layout_widget = False + + def setupObject(self, clsname, parent, branch, is_attribute = True): + name = self.uniqueName(branch.attrib.get("name") or clsname[1:].lower()) + if parent is None: + args = () + else: + args = (parent, ) + obj = self.factory.createQObject(clsname, name, args, is_attribute) + self.wprops.setProperties(obj, branch) + obj.setObjectName(name) + if is_attribute: + setattr(self.toplevelWidget, name, obj) + return obj + + def createWidget(self, elem): + self.column_counter = 0 + self.row_counter = 0 + self.item_nr = 0 + self.itemstack = [] + self.sorting_enabled = None + + widget_class = elem.attrib['class'].replace('::', '.') + if widget_class == 'Line': + widget_class = 'QFrame' + + # Ignore the parent if it is a container + parent = self.stack.topwidget + + # if is a Menubar on MacOS + macMenu = (sys.platform == 'darwin') and (widget_class == 'QMenuBar') + + if isinstance(parent, (QtWidgets.QDockWidget, QtWidgets.QMdiArea, + QtWidgets.QScrollArea, QtWidgets.QStackedWidget, + QtWidgets.QToolBox, QtWidgets.QTabWidget, + QtWidgets.QWizard)) or macMenu: + parent = None + + + # See if this is a layout widget. + if widget_class == 'QWidget': + if parent is not None: + if not isinstance(parent, QtWidgets.QMainWindow): + self.layout_widget = True + + self.stack.push(self.setupObject(widget_class, parent, elem)) + + if isinstance(self.stack.topwidget, QtWidgets.QTableWidget): + self.stack.topwidget.setColumnCount(len(elem.findall("column"))) + self.stack.topwidget.setRowCount(len(elem.findall("row"))) + + self.traverseWidgetTree(elem) + widget = self.stack.popWidget() + + self.layout_widget = False + + if isinstance(widget, QtWidgets.QTreeView): + self.handleHeaderView(elem, "header", widget.header()) + + elif isinstance(widget, QtWidgets.QTableView): + self.handleHeaderView(elem, "horizontalHeader", + widget.horizontalHeader()) + self.handleHeaderView(elem, "verticalHeader", + widget.verticalHeader()) + + elif isinstance(widget, QtWidgets.QAbstractButton): + bg_i18n = self.wprops.getAttribute(elem, "buttonGroup") + if bg_i18n is not None: + if isinstance(bg_i18n, str): + bg_name = bg_i18n + else: + bg_name = bg_i18n.string + + for bg in self.button_groups: + if bg.objectName() == bg_name: + break + else: + bg = self.factory.createQObject("QButtonGroup", bg_name, + (self.toplevelWidget, )) + bg.setObjectName(bg_name) + self.button_groups.append(bg) + + bg.addButton(widget) + + if self.sorting_enabled is not None: + widget.setSortingEnabled(self.sorting_enabled) + self.sorting_enabled = None + + if self.stack.topIsLayout(): + lay = self.stack.peek() + gp = elem.attrib["grid-position"] + + if isinstance(lay, QtWidgets.QFormLayout): + lay.setWidget(gp[0], self._form_layout_role(gp), widget) + else: + lay.addWidget(widget, *gp) + + topwidget = self.stack.topwidget + + if isinstance(topwidget, QtWidgets.QToolBox): + icon = self.wprops.getAttribute(elem, "icon") + if icon is not None: + topwidget.addItem(widget, icon, self.wprops.getAttribute(elem, "label")) + else: + topwidget.addItem(widget, self.wprops.getAttribute(elem, "label")) + + tooltip = self.wprops.getAttribute(elem, "toolTip") + if tooltip is not None: + topwidget.setItemToolTip(topwidget.indexOf(widget), tooltip) + + elif isinstance(topwidget, QtWidgets.QTabWidget): + icon = self.wprops.getAttribute(elem, "icon") + if icon is not None: + topwidget.addTab(widget, icon, self.wprops.getAttribute(elem, "title")) + else: + topwidget.addTab(widget, self.wprops.getAttribute(elem, "title")) + + tooltip = self.wprops.getAttribute(elem, "toolTip") + if tooltip is not None: + topwidget.setTabToolTip(topwidget.indexOf(widget), tooltip) + + elif isinstance(topwidget, QtWidgets.QWizard): + topwidget.addPage(widget) + + elif isinstance(topwidget, QtWidgets.QStackedWidget): + topwidget.addWidget(widget) + + elif isinstance(topwidget, (QtWidgets.QDockWidget, QtWidgets.QScrollArea)): + topwidget.setWidget(widget) + + elif isinstance(topwidget, QtWidgets.QMainWindow): + if type(widget) == QtWidgets.QWidget: + topwidget.setCentralWidget(widget) + elif isinstance(widget, QtWidgets.QToolBar): + tbArea = self.wprops.getAttribute(elem, "toolBarArea") + + if tbArea is None: + topwidget.addToolBar(widget) + else: + topwidget.addToolBar(tbArea, widget) + + tbBreak = self.wprops.getAttribute(elem, "toolBarBreak") + + if tbBreak: + topwidget.insertToolBarBreak(widget) + + elif isinstance(widget, QtWidgets.QMenuBar): + topwidget.setMenuBar(widget) + elif isinstance(widget, QtWidgets.QStatusBar): + topwidget.setStatusBar(widget) + elif isinstance(widget, QtWidgets.QDockWidget): + dwArea = self.wprops.getAttribute(elem, "dockWidgetArea") + topwidget.addDockWidget(QtCore.Qt.DockWidgetArea(dwArea), + widget) + + def handleHeaderView(self, elem, name, header): + value = self.wprops.getAttribute(elem, name + "Visible") + if value is not None: + header.setVisible(value) + + value = self.wprops.getAttribute(elem, name + "CascadingSectionResizes") + if value is not None: + header.setCascadingSectionResizes(value) + + value = self.wprops.getAttribute(elem, name + "DefaultSectionSize") + if value is not None: + header.setDefaultSectionSize(value) + + value = self.wprops.getAttribute(elem, name + "HighlightSections") + if value is not None: + header.setHighlightSections(value) + + value = self.wprops.getAttribute(elem, name + "MinimumSectionSize") + if value is not None: + header.setMinimumSectionSize(value) + + value = self.wprops.getAttribute(elem, name + "ShowSortIndicator") + if value is not None: + header.setSortIndicatorShown(value) + + value = self.wprops.getAttribute(elem, name + "StretchLastSection") + if value is not None: + header.setStretchLastSection(value) + + def createSpacer(self, elem): + width = elem.findtext("property/size/width") + height = elem.findtext("property/size/height") + + if width is None or height is None: + size_args = () + else: + size_args = (int(width), int(height)) + + sizeType = self.wprops.getProperty(elem, "sizeType", + QtWidgets.QSizePolicy.Expanding) + + policy = (QtWidgets.QSizePolicy.Minimum, sizeType) + + if self.wprops.getProperty(elem, "orientation") == QtCore.Qt.Horizontal: + policy = policy[1], policy[0] + + spacer = self.factory.createQObject("QSpacerItem", + self.uniqueName("spacerItem"), size_args + policy, + is_attribute=False) + + if self.stack.topIsLayout(): + lay = self.stack.peek() + gp = elem.attrib["grid-position"] + + if isinstance(lay, QtWidgets.QFormLayout): + lay.setItem(gp[0], self._form_layout_role(gp), spacer) + else: + lay.addItem(spacer, *gp) + + def createLayout(self, elem): + # Qt v4.3 introduced setContentsMargins() and separate values for each + # of the four margins which are specified as separate properties. This + # doesn't really fit the way we parse the tree (why aren't the values + # passed as attributes of a single property?) so we create a new + # property and inject it. However, if we find that they have all been + # specified and have the same value then we inject a different property + # that is compatible with older versions of Qt. + left = self.wprops.getProperty(elem, 'leftMargin', -1) + top = self.wprops.getProperty(elem, 'topMargin', -1) + right = self.wprops.getProperty(elem, 'rightMargin', -1) + bottom = self.wprops.getProperty(elem, 'bottomMargin', -1) + + # Count the number of properties and if they had the same value. + def comp_property(m, so_far=-2, nr=0): + if m >= 0: + nr += 1 + + if so_far == -2: + so_far = m + elif so_far != m: + so_far = -1 + + return so_far, nr + + margin, nr_margins = comp_property(left) + margin, nr_margins = comp_property(top, margin, nr_margins) + margin, nr_margins = comp_property(right, margin, nr_margins) + margin, nr_margins = comp_property(bottom, margin, nr_margins) + + if nr_margins > 0: + if nr_margins == 4 and margin >= 0: + # We can inject the old margin property. + me = SubElement(elem, 'property', name='margin') + SubElement(me, 'number').text = str(margin) + else: + # We have to inject the new internal property. + cme = SubElement(elem, 'property', name='pyuicContentsMargins') + SubElement(cme, 'number').text = str(left) + SubElement(cme, 'number').text = str(top) + SubElement(cme, 'number').text = str(right) + SubElement(cme, 'number').text = str(bottom) + elif self.layout_widget: + margin = self.wprops.getProperty(elem, 'margin', -1) + if margin < 0: + # The layouts of layout widgets have no margin. + me = SubElement(elem, 'property', name='margin') + SubElement(me, 'number').text = '0' + + # In case there are any nested layouts. + self.layout_widget = False + + # We do the same for setHorizontalSpacing() and setVerticalSpacing(). + horiz = self.wprops.getProperty(elem, 'horizontalSpacing', -1) + vert = self.wprops.getProperty(elem, 'verticalSpacing', -1) + + if horiz >= 0 or vert >= 0: + # We inject the new internal property. + cme = SubElement(elem, 'property', name='pyuicSpacing') + SubElement(cme, 'number').text = str(horiz) + SubElement(cme, 'number').text = str(vert) + + classname = elem.attrib["class"] + if self.stack.topIsLayout(): + parent = None + else: + parent = self.stack.topwidget + if "name" not in elem.attrib: + elem.attrib["name"] = classname[1:].lower() + self.stack.push(self.setupObject(classname, parent, elem)) + self.traverseWidgetTree(elem) + + layout = self.stack.popLayout() + self.configureLayout(elem, layout) + + if self.stack.topIsLayout(): + top_layout = self.stack.peek() + gp = elem.attrib["grid-position"] + + if isinstance(top_layout, QtWidgets.QFormLayout): + top_layout.setLayout(gp[0], self._form_layout_role(gp), layout) + else: + top_layout.addLayout(layout, *gp) + + def configureLayout(self, elem, layout): + if isinstance(layout, QtWidgets.QGridLayout): + self.setArray(elem, 'columnminimumwidth', + layout.setColumnMinimumWidth) + self.setArray(elem, 'rowminimumheight', + layout.setRowMinimumHeight) + self.setArray(elem, 'columnstretch', layout.setColumnStretch) + self.setArray(elem, 'rowstretch', layout.setRowStretch) + + elif isinstance(layout, QtWidgets.QBoxLayout): + self.setArray(elem, 'stretch', layout.setStretch) + + def setArray(self, elem, name, setter): + array = elem.attrib.get(name) + if array: + for idx, value in enumerate(array.split(',')): + value = int(value) + if value > 0: + setter(idx, value) + + def handleItem(self, elem): + if self.stack.topIsLayout(): + elem[0].attrib["grid-position"] = gridPosition(elem) + self.traverseWidgetTree(elem) + else: + w = self.stack.topwidget + + if isinstance(w, QtWidgets.QComboBox): + text = self.wprops.getProperty(elem, "text") + icon = self.wprops.getProperty(elem, "icon") + + if icon: + w.addItem(icon, '') + else: + w.addItem('') + + w.setItemText(self.item_nr, text) + + elif isinstance(w, QtWidgets.QListWidget): + text = self.wprops.getProperty(elem, "text") + icon = self.wprops.getProperty(elem, "icon") + flags = self.wprops.getProperty(elem, "flags") + check_state = self.wprops.getProperty(elem, "checkState") + background = self.wprops.getProperty(elem, "background") + foreground = self.wprops.getProperty(elem, "foreground") + + if icon or flags or check_state: + item_name = "item" + else: + item_name = None + + item = self.factory.createQObject("QListWidgetItem", item_name, + (w, ), False) + + if self.item_nr == 0: + self.sorting_enabled = self.factory.invoke("__sortingEnabled", w.isSortingEnabled) + w.setSortingEnabled(False) + + if text: + w.item(self.item_nr).setText(text) + + if icon: + item.setIcon(icon) + + if flags: + item.setFlags(flags) + + if check_state: + item.setCheckState(check_state) + + if background: + item.setBackground(background) + + if foreground: + item.setForeground(foreground) + + elif isinstance(w, QtWidgets.QTreeWidget): + if self.itemstack: + parent, _ = self.itemstack[-1] + _, nr_in_root = self.itemstack[0] + else: + parent = w + nr_in_root = self.item_nr + + item = self.factory.createQObject("QTreeWidgetItem", + "item_%d" % len(self.itemstack), (parent, ), False) + + if self.item_nr == 0 and not self.itemstack: + self.sorting_enabled = self.factory.invoke("__sortingEnabled", w.isSortingEnabled) + w.setSortingEnabled(False) + + self.itemstack.append((item, self.item_nr)) + self.item_nr = 0 + + # We have to access the item via the tree when setting the + # text. + titm = w.topLevelItem(nr_in_root) + for child, nr_in_parent in self.itemstack[1:]: + titm = titm.child(nr_in_parent) + + column = -1 + for prop in elem.findall("property"): + c_prop = self.wprops.convert(prop) + c_prop_name = prop.attrib["name"] + + if c_prop_name == "text": + column += 1 + if c_prop: + titm.setText(column, c_prop) + elif c_prop_name == "icon": + item.setIcon(column, c_prop) + elif c_prop_name == "flags": + item.setFlags(c_prop) + elif c_prop_name == "checkState": + item.setCheckState(column, c_prop) + elif c_prop_name == "background": + item.setBackground(column, c_prop) + elif c_prop_name == "foreground": + item.setForeground(column, c_prop) + + self.traverseWidgetTree(elem) + _, self.item_nr = self.itemstack.pop() + + elif isinstance(w, QtWidgets.QTableWidget): + text = self.wprops.getProperty(elem, "text") + icon = self.wprops.getProperty(elem, "icon") + flags = self.wprops.getProperty(elem, "flags") + check_state = self.wprops.getProperty(elem, "checkState") + background = self.wprops.getProperty(elem, "background") + foreground = self.wprops.getProperty(elem, "foreground") + + item = self.factory.createQObject("QTableWidgetItem", "item", + (), False) + + if self.item_nr == 0: + self.sorting_enabled = self.factory.invoke("__sortingEnabled", w.isSortingEnabled) + w.setSortingEnabled(False) + + row = int(elem.attrib["row"]) + col = int(elem.attrib["column"]) + + if icon: + item.setIcon(icon) + + if flags: + item.setFlags(flags) + + if check_state: + item.setCheckState(check_state) + + if background: + item.setBackground(background) + + if foreground: + item.setForeground(foreground) + + w.setItem(row, col, item) + + if text: + # Text is translated so we don't have access to the item + # attribute when generating code so we must get it from the + # widget after it has been set. + w.item(row, col).setText(text) + + self.item_nr += 1 + + def addAction(self, elem): + self.actions.append((self.stack.topwidget, elem.attrib["name"])) + + def addHeader(self, elem): + w = self.stack.topwidget + + if isinstance(w, QtWidgets.QTreeWidget): + text = self.wprops.getProperty(elem, "text") + icon = self.wprops.getProperty(elem, "icon") + + if text: + w.headerItem().setText(self.column_counter, text) + + if icon: + w.headerItem().setIcon(self.column_counter, icon) + + self.column_counter += 1 + + elif isinstance(w, QtWidgets.QTableWidget): + if len(elem) == 0: + return + + text = self.wprops.getProperty(elem, "text") + icon = self.wprops.getProperty(elem, "icon") + whatsThis = self.wprops.getProperty(elem, "whatsThis") + + item = self.factory.createQObject("QTableWidgetItem", "item", + (), False) + + if elem.tag == "column": + w.setHorizontalHeaderItem(self.column_counter, item) + + if text: + w.horizontalHeaderItem(self.column_counter).setText(text) + + if icon: + item.setIcon(icon) + + if whatsThis: + w.horizontalHeaderItem(self.column_counter).setWhatsThis(whatsThis) + + self.column_counter += 1 + elif elem.tag == "row": + w.setVerticalHeaderItem(self.row_counter, item) + + if text: + w.verticalHeaderItem(self.row_counter).setText(text) + + if icon: + item.setIcon(icon) + + if whatsThis: + w.verticalHeaderItem(self.row_counter).setWhatsThis(whatsThis) + + self.row_counter += 1 + + def createAction(self, elem): + self.setupObject("QAction", self.currentActionGroup or self.toplevelWidget, + elem) + + def createActionGroup(self, elem): + action_group = self.setupObject("QActionGroup", self.toplevelWidget, elem) + self.currentActionGroup = action_group + self.traverseWidgetTree(elem) + self.currentActionGroup = None + + widgetTreeItemHandlers = { + "widget" : createWidget, + "addaction" : addAction, + "layout" : createLayout, + "spacer" : createSpacer, + "item" : handleItem, + "action" : createAction, + "actiongroup": createActionGroup, + "column" : addHeader, + "row" : addHeader, + } + + def traverseWidgetTree(self, elem): + for child in iter(elem): + try: + handler = self.widgetTreeItemHandlers[child.tag] + except KeyError: + continue + + handler(self, child) + + def createUserInterface(self, elem): + # Get the names of the class and widget. + cname = elem.attrib["class"] + wname = elem.attrib["name"] + + # If there was no widget name then derive it from the class name. + if not wname: + wname = cname + + if wname.startswith("Q"): + wname = wname[1:] + + wname = wname[0].lower() + wname[1:] + + self.toplevelWidget = self.createToplevelWidget(cname, wname) + self.toplevelWidget.setObjectName(wname) + DEBUG("toplevel widget is %s", + self.toplevelWidget.metaObject().className()) + self.wprops.setProperties(self.toplevelWidget, elem) + self.stack.push(self.toplevelWidget) + self.traverseWidgetTree(elem) + self.stack.popWidget() + self.addActions() + self.setBuddies() + self.setDelayedProps() + + def addActions(self): + for widget, action_name in self.actions: + if action_name == "separator": + widget.addSeparator() + else: + DEBUG("add action %s to %s", action_name, widget.objectName()) + action_obj = getattr(self.toplevelWidget, action_name) + if isinstance(action_obj, QtWidgets.QMenu): + widget.addAction(action_obj.menuAction()) + elif not isinstance(action_obj, QtWidgets.QActionGroup): + widget.addAction(action_obj) + + def setDelayedProps(self): + for widget, layout, setter, args in self.wprops.delayed_props: + if layout: + widget = widget.layout() + + setter = getattr(widget, setter) + setter(args) + + def setBuddies(self): + for widget, buddy in self.wprops.buddies: + DEBUG("%s is buddy of %s", buddy, widget.objectName()) + try: + widget.setBuddy(getattr(self.toplevelWidget, buddy)) + except AttributeError: + DEBUG("ERROR in ui spec: %s (buddy of %s) does not exist", + buddy, widget.objectName()) + + def classname(self, elem): + DEBUG("uiname is %s", elem.text) + name = elem.text + + if name is None: + name = "" + + self.uiname = name + self.wprops.uiname = name + self.setContext(name) + + def setContext(self, context): + """ + Reimplemented by a sub-class if it needs to know the translation + context. + """ + pass + + def readDefaults(self, elem): + self.defaults["margin"] = int(elem.attrib["margin"]) + self.defaults["spacing"] = int(elem.attrib["spacing"]) + + def setTaborder(self, elem): + lastwidget = None + for widget_elem in elem: + widget = getattr(self.toplevelWidget, widget_elem.text) + + if lastwidget is not None: + self.toplevelWidget.setTabOrder(lastwidget, widget) + + lastwidget = widget + + def readResources(self, elem): + """ + Read a "resources" tag and add the module to import to the parser's + list of them. + """ + for include in elem.getiterator("include"): + loc = include.attrib.get("location") + + # Assume our convention for naming the Python files generated by + # pyrcc4. + if loc and loc.endswith('.qrc'): + self.resources.append(os.path.basename(loc[:-4] + '_rc')) + + def createConnections(self, elem): + def name2object(obj): + if obj == self.uiname: + return self.toplevelWidget + else: + return getattr(self.toplevelWidget, obj) + for conn in iter(elem): + QtCore.QObject.connect(name2object(conn.findtext("sender")), + QtCore.SIGNAL(conn.findtext("signal")), + self.factory.getSlot(name2object(conn.findtext("receiver")), + conn.findtext("slot").split("(")[0])) + QtCore.QMetaObject.connectSlotsByName(self.toplevelWidget) + + def customWidgets(self, elem): + def header2module(header): + """header2module(header) -> string + + Convert paths to C++ header files to according Python modules + >>> header2module("foo/bar/baz.h") + 'foo.bar.baz' + """ + if header.endswith(".h"): + header = header[:-2] + + mpath = [] + for part in header.split('/'): + # Ignore any empty parts or those that refer to the current + # directory. + if part not in ('', '.'): + if part == '..': + # We should allow this for Python3. + raise SyntaxError("custom widget header file name may not contain '..'.") + + mpath.append(part) + + return '.'.join(mpath) + + for custom_widget in iter(elem): + classname = custom_widget.findtext("class") + if classname.startswith("Q3"): + raise NoSuchWidgetError(classname) + self.factory.addCustomWidget(classname, + custom_widget.findtext("extends") or "QWidget", + header2module(custom_widget.findtext("header"))) + + def createToplevelWidget(self, classname, widgetname): + raise NotImplementedError + + # finalize will be called after the whole tree has been parsed and can be + # overridden. + def finalize(self): + pass + + def parse(self, filename, base_dir=''): + self.wprops.set_base_dir(base_dir) + + # The order in which the different branches are handled is important. + # The widget tree handler relies on all custom widgets being known, and + # in order to create the connections, all widgets have to be populated. + branchHandlers = ( + ("layoutdefault", self.readDefaults), + ("class", self.classname), + ("customwidgets", self.customWidgets), + ("widget", self.createUserInterface), + ("connections", self.createConnections), + ("tabstops", self.setTaborder), + ("resources", self.readResources), + ) + + document = parse(filename) + version = document.getroot().attrib["version"] + DEBUG("UI version is %s" % (version,)) + # Right now, only version 4.0 is supported. + assert version in ("4.0",) + for tagname, actor in branchHandlers: + elem = document.find(tagname) + if elem is not None: + actor(elem) + self.finalize() + w = self.toplevelWidget + self.reset() + return w + + @staticmethod + def _form_layout_role(grid_position): + if grid_position[3] > 1: + role = QtWidgets.QFormLayout.SpanningRole + elif grid_position[1] == 1: + role = QtWidgets.QFormLayout.FieldRole + else: + role = QtWidgets.QFormLayout.LabelRole + + return role diff --git a/sources/pyside2-tools/pyside2uic/widget-plugins/qtdeclarative.py b/sources/pyside2-tools/pyside2uic/widget-plugins/qtdeclarative.py new file mode 100644 index 0000000..bb3dd00 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/widget-plugins/qtdeclarative.py @@ -0,0 +1,32 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2010 Riverbank Computing Limited. +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + +# If pluginType is MODULE, the plugin loader will call moduleInformation. The +# variable MODULE is inserted into the local namespace by the plugin loader. +pluginType = MODULE + + +# moduleInformation() must return a tuple (module, widget_list). If "module" +# is "A" and any widget from this module is used, the code generator will write +# "import A". If "module" is "A[.B].C", the code generator will write +# "from A[.B] import C". Each entry in "widget_list" must be unique. +def moduleInformation(): + return "PySide2.QtDeclarative", ("QDeclarativeView", ) diff --git a/sources/pyside2-tools/pyside2uic/widget-plugins/qtwebkit.py b/sources/pyside2-tools/pyside2uic/widget-plugins/qtwebkit.py new file mode 100644 index 0000000..2c02967 --- /dev/null +++ b/sources/pyside2-tools/pyside2uic/widget-plugins/qtwebkit.py @@ -0,0 +1,34 @@ +# This file is part of the PySide project. +# +# Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +# Copyright (C) 2009 Riverbank Computing Limited. +# Copyright (C) 2009 Torsten Marek +# +# Contact: PySide team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA + + +# If pluginType is MODULE, the plugin loader will call moduleInformation. The +# variable MODULE is inserted into the local namespace by the plugin loader. +pluginType = MODULE + + +# moduleInformation() must return a tuple (module, widget_list). If "module" +# is "A" and any widget from this module is used, the code generator will write +# "import A". If "module" is "A[.B].C", the code generator will write +# "from A[.B] import C". Each entry in "widget_list" must be unique. +def moduleInformation(): + return "PySide2.QtWebKit", ("QWebView", ) diff --git a/sources/pyside2-tools/qt_attribution.json b/sources/pyside2-tools/qt_attribution.json new file mode 100644 index 0000000..73a2bb0 --- /dev/null +++ b/sources/pyside2-tools/qt_attribution.json @@ -0,0 +1,44 @@ +[ +{ + "Id": "pylupdate", + "Name": "pylupdate", + "Path": "pylupdate", + "Description": "The pylupdate tool is used to create or update Qt Linguist translation files from Python sources", + "QtUsage": "Python version of the Qt lupdate tool", + "License": "GNU Library General Public License v2 only", + "LicenseId": "GPL-2.0", + "LicenseFile": "LICENSE-lupdate", + "Copyright": "Copyright (C) 1992-2006 Trolltech AS. +Copyright (C) 2002-2007 Detlev Offenbach . +Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +Copyright (C) 2010 Marcelo Lira ." +}, +{ + "Id": "pyrcc", + "Name": "pyrcc", + "Path": "pyrcc", + "Description": "The pyrcc tool provides data resources in a Python-readable format", + "QtUsage": "Python version of the Qt rcc tool", + "License": "GNU Library General Public License v2 only", + "LicenseId": "GPL-2.0", + "LicenseFile": "LICENSE-rcc", + "Copyright": "Copyright (C) 1992-2005 Trolltech AS. +Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +Copyright (C) 2010 Marcelo Lira . +Copyright (C) 2016 The Qt Company Ltd." +}, +{ + "Id": "pyside2uic", + "Name": "pyside2uic", + "Path": "pyside2-uic:", + "Description": "The pyside2uic tool is used to generate Python code building a QtWidgets-based UI from an user interface definition (.ui) XML format file as generated by Qt Designer", + "QtUsage": "Python version of the Qt uic tool", + "License": "GNU Library General Public License v2 only", + "LicenseId": "BSD-3-Clause AND GPL-2.0", + "LicenseFile": "LICENSE-uic", + "Copyright": "Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies). +Copyright (C) 2009-2010 Riverbank Computing Limited. +Copyright (C) 2009 Torsten Marek. +Copyright (C) 2010 Marcelo Lira ." +} +] diff --git a/sources/pyside2-tools/tests/CMakeLists.txt b/sources/pyside2-tools/tests/CMakeLists.txt new file mode 100644 index 0000000..c2da412 --- /dev/null +++ b/sources/pyside2-tools/tests/CMakeLists.txt @@ -0,0 +1,5 @@ +find_package(Shiboken2 2.0.0 REQUIRED) +add_subdirectory(rcc) +add_test(QWizard ${SHIBOKEN_PYTHON_INTERPRETER} ${CMAKE_SOURCE_DIR}/pyside2-uic "${CMAKE_CURRENT_SOURCE_DIR}/qwizard_test.ui") +set_tests_properties(QWizard PROPERTIES + ENVIRONMENT "PYTHONPATH=$ENV{PYTHONPATH}:${CMAKE_SOURCE_DIR}:${CMAKE_CURRENT_SOURCE_DIR}") diff --git a/sources/pyside2-tools/tests/qwizard_test.ui b/sources/pyside2-tools/tests/qwizard_test.ui new file mode 100644 index 0000000..6b725f8 --- /dev/null +++ b/sources/pyside2-tools/tests/qwizard_test.ui @@ -0,0 +1,67 @@ + + + Wizard + + + + 0 + 0 + 400 + 300 + + + + Wizard + + + + + + + + 0 + 0 + + + + + 72 + + + + Hello + + + Qt::PlainText + + + true + + + Qt::AlignCenter + + + + + + + + http://test.qml + + + + + + + + + + + QDeclarativeView + QGraphicsView +
QtDeclarative/QDeclarativeView
+
+
+ + +
diff --git a/sources/pyside2-tools/tests/rcc/CMakeLists.txt b/sources/pyside2-tools/tests/rcc/CMakeLists.txt new file mode 100644 index 0000000..70341ab --- /dev/null +++ b/sources/pyside2-tools/tests/rcc/CMakeLists.txt @@ -0,0 +1,10 @@ +macro(ADD_RCC_TEST name pyfile qrcfile) + add_test(${name} ${CMAKE_CURRENT_SOURCE_DIR}/run_test.sh + ${PYSIDERCC_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/${pyfile} + ${CMAKE_CURRENT_SOURCE_DIR}/${qrcfile} + ${CMAKE_CURRENT_SOURCE_DIR}) +endmacro() + +add_rcc_test(RccTest rcc_test.py example.qrc) +add_rcc_test(RccImageTest rcc_image_test.py image.qrc) diff --git a/sources/pyside2-tools/tests/rcc/document-print-preview.png b/sources/pyside2-tools/tests/rcc/document-print-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..772efe5a8a6f214a249d7c4cbf54b72bd153b91d GIT binary patch literal 1719 zcmV;o21xmdP)H>IQPh+aB~gKj zgitC%r2tiV^-CWhXw}k6i5eC701|wNA~k|Ugp^jsRIMnGmWJ{QH7RW%F$G(G#@>f_ z);lxz-hS}fv3a;Wl78utj&x_QX3p>Y@0oLU;Q!sU+ih&$zI}Htms#ic=LhrI@O(XewqWtr zMp`;Dyts53@1HtJ%heXz+uMiTvMemix_bp)dF2=LYra%7Hx{d5*|tCM(zDZ;^I!!9 zrj92hWr0E}f+b9skNCQe}b z#0WwPgp^1rQBoj;hoK~o)>ZQA{tuY?;6q&brP|$+jyR$q{!lWM-M)KA;R-+%G&e1y8{3%?RsumS)oBk zuT5335Wl5^uA>3A?O|FLq46bT9Yw$GB85vTnFJu4&7x_aHCWRe<4wOcfci_;9(duY zM?#$cS37>grNn3AGr>S$nHrvitgC40$PgLlBUI+2tE&s8prfN>FpWG!d3pJr1FTuI zW_EX1?}Fxw&8&F#8CJe}f^a}19`WNh6+S~zV1O$%`fS1B_uKf%@;a_wy-F&T;>wlF zghJub0rCp0UcFjbrrDWuoUiQNyZ6JP{oy{kZrwVc&*wY2=|`I)*RNlrq&UFyPt~#O z&_#L@HkR(8q)Trq%Y~K{e>~sK*5%WAcwz? zwzihS!a~B~aOtU2r^J~vXHLL~alCfz+P)n-c8nW3yG*8^!$%qcnA0$a^2h|Nf&zpm z=u7nS!G&`iJ$jVMwNr>z#qm6k&dyFO%i_w%m+|?1tY5nUzu!N)!jxkD`gNIIyLK0k zssYz^$0?;~Z*Rl0ELvOJsGIsQLU^1#cb1O!cI>Q;X_y280pjsEE55ao0|(#6&e}|x zIGIQ!LQhW*wUZ{()zirjH+`R#FMXTR;$l*%G_L0|eR@4Y$iOX&PzXUXnWU;R%D}(? zWu+wq0zrb~Lr5u+QXqvyr%*m2!takX zv3k`SIy$=;$l5r$+$cpxwPMfnXly);ZD)vt!)Tg@5FVcA;y5{Sxf}zz0kTx_O&MqWrMsjRHzr$5_9E|)_o zHQ4`^8g%(t_CpGcbcN)=!2>K=vVH+2xe852M-d-g15&6V@LnQ{{8!iR#mZV=~4nkf#F2lu>gb+ z!)r~`Fbo}Cw}vO%kP337B1#Qj=hx+tauzLIc+>Ag=D6 + + words.txt + shining.txt + manychars.txt + + diff --git a/sources/pyside2-tools/tests/rcc/image.qrc b/sources/pyside2-tools/tests/rcc/image.qrc new file mode 100644 index 0000000..c569508 --- /dev/null +++ b/sources/pyside2-tools/tests/rcc/image.qrc @@ -0,0 +1,5 @@ + + + document-print-preview.png + + diff --git a/sources/pyside2-tools/tests/rcc/manychars.txt b/sources/pyside2-tools/tests/rcc/manychars.txt new file mode 100644 index 0000000..82e73d0 --- /dev/null +++ b/sources/pyside2-tools/tests/rcc/manychars.txt @@ -0,0 +1 @@ +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/sources/pyside2-tools/tests/rcc/rcc_image_test.py b/sources/pyside2-tools/tests/rcc/rcc_image_test.py new file mode 100644 index 0000000..00015be --- /dev/null +++ b/sources/pyside2-tools/tests/rcc/rcc_image_test.py @@ -0,0 +1,16 @@ + +import unittest + +from PySide2.QtWidgets import QApplication +from PySide2.QtGui import QPixmap + +import image_rc + +class TestRccImage(unittest.TestCase): + def testImage(self): + app = QApplication([]) + image = QPixmap(":image") + self.assertFalse(image.isNull()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2-tools/tests/rcc/rcc_test.py b/sources/pyside2-tools/tests/rcc/rcc_test.py new file mode 100644 index 0000000..91b5ca8 --- /dev/null +++ b/sources/pyside2-tools/tests/rcc/rcc_test.py @@ -0,0 +1,31 @@ +import os +import unittest +from PySide2.QtCore import QFile +import example_rc + +class TestRccSimple(unittest.TestCase): + + def setUp(self): + self.testdir = os.path.dirname(__file__) + + def testSimple(self): + handle = QFile(":words.txt") + handle.open(QFile.ReadOnly) + original = open(os.path.join(self.testdir, "words.txt"), "r") + self.assertEqual(handle.readLine(), original.readline()) + + def testAlias(self): + handle = QFile(":jack") + handle.open(QFile.ReadOnly) + original = open(os.path.join(self.testdir, "shining.txt"), "r") + self.assertEqual(handle.readLine(), original.readline()) + + def testHuge(self): + handle = QFile(":manychars.txt") + handle.open(QFile.ReadOnly) + original = open(os.path.join(self.testdir, "manychars.txt"), "r") + self.assertEqual(handle.readLine(), original.readline()) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2-tools/tests/rcc/run_test.sh b/sources/pyside2-tools/tests/rcc/run_test.sh new file mode 100755 index 0000000..72c4906 --- /dev/null +++ b/sources/pyside2-tools/tests/rcc/run_test.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# This is a nasty workaround of a CTest limitation +# of setting the environment variables for the test. + +# $1: pyside2-rcc +# $2: python test +# $3: qrc file + +export PYTHONPATH=$PYTHONPATH:`pwd` +$1 -o `basename $3 .qrc`_rc.py $3 +`pkg-config shiboken2 --variable=python_interpreter` $2 diff --git a/sources/pyside2-tools/tests/rcc/shining.txt b/sources/pyside2-tools/tests/rcc/shining.txt new file mode 100644 index 0000000..2528eb9 --- /dev/null +++ b/sources/pyside2-tools/tests/rcc/shining.txt @@ -0,0 +1 @@ +All work and no play makes Jack a dull boy. diff --git a/sources/pyside2-tools/tests/rcc/words.txt b/sources/pyside2-tools/tests/rcc/words.txt new file mode 100644 index 0000000..53f03fc --- /dev/null +++ b/sources/pyside2-tools/tests/rcc/words.txt @@ -0,0 +1 @@ +The Quick Brown Fox Jumps Over The Lazy Dog. diff --git a/sources/pyside2/CMakeLists.txt b/sources/pyside2/CMakeLists.txt new file mode 100644 index 0000000..358c119 --- /dev/null +++ b/sources/pyside2/CMakeLists.txt @@ -0,0 +1,557 @@ +include(cmake/Macros/icecc.cmake) # this must be the first line! + +cmake_minimum_required(VERSION 3.1) +cmake_policy(VERSION 3.1) + +# Don't ignore targets that do not exist, inside add_dependencies calls. +cmake_policy(SET CMP0046 NEW) + +project(pysidebindings) + +set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Macros/ + ${CMAKE_MODULE_PATH}) + +option(USE_PYTHON_VERSION "Use specific python version to build pyside2." "") + +if (USE_PYTHON_VERSION) + find_package(PythonInterp ${USE_PYTHON_VERSION} REQUIRED) + find_package(PythonLibs ${USE_PYTHON_VERSION} REQUIRED) +else() + find_package(PythonInterp 2.7) + find_package(PythonLibs 2.7) +endif() + +set(PYSIDE_VERSION_FILE_PATH "${CMAKE_SOURCE_DIR}/pyside_version.py") +set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS + ${PYSIDE_VERSION_FILE_PATH} +) +execute_process( + COMMAND ${PYTHON_EXECUTABLE} "${PYSIDE_VERSION_FILE_PATH}" + OUTPUT_VARIABLE PYSIDE_VERSION_OUTPUT + ERROR_VARIABLE PYSIDE_VERSION_OUTPUT_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE) +if (NOT PYSIDE_VERSION_OUTPUT) + message(FATAL_ERROR "Could not identify PySide2 version. Error: ${PYSIDE_VERSION_OUTPUT_ERROR}") +endif() + +list(GET PYSIDE_VERSION_OUTPUT 0 BINDING_API_MAJOR_VERSION) +list(GET PYSIDE_VERSION_OUTPUT 1 BINDING_API_MINOR_VERSION) +list(GET PYSIDE_VERSION_OUTPUT 2 BINDING_API_MICRO_VERSION) +# a - alpha, b - beta, rc - rc +list(GET PYSIDE_VERSION_OUTPUT 3 BINDING_API_PRE_RELEASE_VERSION_TYPE) +# the number of the pre release (alpha1, beta3, rc7, etc.) +list(GET PYSIDE_VERSION_OUTPUT 4 BINDING_API_PRE_RELEASE_VERSION) + +macro(get_python_extension_suffix) + # Result of imp.get_suffixes() depends on the platform, but generally looks something like: + # [('.cpython-34m-x86_64-linux-gnu.so', 'rb', 3), ('.cpython-34m.so', 'rb', 3), + # ('.abi3.so', 'rb', 3), ('.so', 'rb', 3), ('.py', 'r', 1), ('.pyc', 'rb', 2)] + # We pick the first most detailed one, strip of the file extension part. + + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "if True: + import imp, re + first_suffix = imp.get_suffixes()[0][0] + res = re.search(r'^(.+)\\.', first_suffix) + if res: + first_suffix = res.group(1) + else: + first_suffix = '' + print(first_suffix) + " + OUTPUT_VARIABLE PYTHON_EXTENSION_SUFFIX + OUTPUT_STRIP_TRAILING_WHITESPACE) + message("PYTHON_EXTENSION_SUFFIX: " ${PYTHON_EXTENSION_SUFFIX}) +endmacro() + + +if (NOT PYTHON_EXTENSION_SUFFIX) + get_python_extension_suffix() +endif() + +# On Windows, PYTHON_LIBRARIES can be a list. Example: +# optimized;C:/Python36/libs/python36.lib;debug;C:/Python36/libs/python36_d.lib +# On other platforms, this result is not used at all. +execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "if True: + for lib in '${PYTHON_LIBRARIES}'.split(';'): + if '/' in lib: + prefix, py = lib.rsplit( '/', 1) + if py.startswith('python3'): + print(prefix + '/python3.lib') + break + " + OUTPUT_VARIABLE PYTHON_LIMITED_LIBRARIES + OUTPUT_STRIP_TRAILING_WHITESPACE) + +if (WIN32) + set(PATH_SEP "\;") +else() + set(PATH_SEP ":") +endif() + +option(FORCE_LIMITED_API "Enable the limited API." "yes") + +set(PYTHON_LIMITED_API 0) +if(FORCE_LIMITED_API STREQUAL "yes") + # GREATER_EQUAL is available only from cmake 3.7 on. We mean python 3.5 . + if (${PYTHON_VERSION_MAJOR} EQUAL 3 AND ${PYTHON_VERSION_MINOR} GREATER 4) + add_definitions("-DPy_LIMITED_API=0x03050000") + set(PYTHON_LIMITED_API 1) + endif() +endif() +if (CMAKE_BUILD_TYPE STREQUAL "Release") + add_definitions("-DNDEBUG") +endif() + +if (PYTHON_LIMITED_API) + if (WIN32 AND NOT EXISTS "${PYTHON_LIMITED_LIBRARIES}") + message(FATAL_ERROR "The Limited API was enabled, but ${PYTHON_LIMITED_LIBRARIES} was not found!") + endif() + message(STATUS "******************************************************") + message(STATUS "** Limited API enabled ${PYTHON_LIMITED_LIBRARIES}") + message(STATUS "******************************************************") +endif() + +if (NOT PYTHON_CONFIG_SUFFIX) + if (PYTHON_VERSION_MAJOR EQUAL 2) + set(PYTHON_CONFIG_SUFFIX "-python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}") + if (PYTHON_EXTENSION_SUFFIX) + set(PYTHON_CONFIG_SUFFIX "${PYTHON_CONFIG_SUFFIX}${PYTHON_EXTENSION_SUFFIX}") + endif() + elseif (PYTHON_VERSION_MAJOR EQUAL 3) + if (PYTHON_LIMITED_API) + if(WIN32) + set(PYTHON_EXTENSION_SUFFIX "") + else() + set(PYTHON_EXTENSION_SUFFIX ".abi3") + endif() + endif() + set(PYTHON_CONFIG_SUFFIX "${PYTHON_EXTENSION_SUFFIX}") + endif() +endif() + +if (NOT PYTHON_SHARED_LIBRARY_SUFFIX) + set(PYTHON_SHARED_LIBRARY_SUFFIX "${PYTHON_CONFIG_SUFFIX}") + + # Append a "v" to disambiguate the python version and the pyside version in the + # shared library file name. + if (APPLE AND PYTHON_VERSION_MAJOR EQUAL 2) + set(PYTHON_SHARED_LIBRARY_SUFFIX "${PYTHON_SHARED_LIBRARY_SUFFIX}v") + endif() +endif() + + +message(STATUS "PYTHON_EXTENSION_SUFFIX: ${PYTHON_EXTENSION_SUFFIX}") +message(STATUS "PYTHON_CONFIG_SUFFIX: ${PYTHON_CONFIG_SUFFIX}") +message(STATUS "PYTHON_SHARED_LIBRARY_SUFFIX: ${PYTHON_SHARED_LIBRARY_SUFFIX}") + +find_package(Shiboken2 2.0.0 REQUIRED) +find_package(Qt5 5.7 REQUIRED COMPONENTS Core) +add_definitions(${Qt5Core_DEFINITIONS}) + +find_file(GL_H "gl.h" PATH_SUFFIXES "GL") +message("result:" "${GL_H}") +include(FindQt5Extra) + +set(XVFB_EXEC "") +option(USE_XVFB "Uses xvfb-run with the unit tests to avoid QtGui tests popping windows on the screen." FALSE) +if(USE_XVFB) + find_program(XVFB_RUN NAMES xvfb-run) + if (NOT ${XVFB_RUN} MATCHES "XVFB_RUN-NOTFOUND") + set(XVFB_EXEC ${XVFB_RUN} -a) + message(STATUS "Using xvfb-run to perform QtGui tests.") + endif() +endif() + +option(BUILD_TESTS "Build tests." TRUE) +option(ENABLE_VERSION_SUFFIX "Used to use current version in suffix to generated files. This is used to allow multiples versions installed simultaneous." FALSE) +set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" ) +set(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is /lib${LIB_SUFFIX})" FORCE) +if(CMAKE_HOST_APPLE) + set(ALTERNATIVE_QT_INCLUDE_DIR "" CACHE PATH "Deprecated. CMake now finds the proper include dir itself.") + set(OSX_USE_LIBCPP "OFF" CACHE BOOL "Explicitly link the libc++ standard library (useful for osx deployment targets lower than 10.9.") + if(OSX_USE_LIBCPP) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + endif() +endif() + +# Force usage of the C++11 standard, without a silent fallback +# to C++98 if the compiler does not support C++11. +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Qt5: QT_INCLUDE_DIR does no longer exist. +# On Windows, macOS, and Linux it can be computed from Qt5Core_INCLUDE_DIRS, which contains +# a list of include directories. We take the first one. +message(STATUS "*** Qt5Core_INCLUDE_DIRS = ${Qt5Core_INCLUDE_DIRS}") +list(GET Qt5Core_INCLUDE_DIRS 0 QT_INCLUDE_DIR) + +# On macOS, check if Qt is a framework build. This affects how include paths should be handled. +get_target_property(QtCore_is_framework Qt5::Core FRAMEWORK) + +if (QtCore_is_framework) + # Get the path to the framework dir. + get_filename_component(QT_FRAMEWORK_INCLUDE_DIR "${QT_INCLUDE_DIR}/../" ABSOLUTE) + message(STATUS "*** QT_FRAMEWORK_INCLUDE_DIR is ${QT_FRAMEWORK_INCLUDE_DIR}") + + # QT_INCLUDE_DIR points to the QtCore.framework directory, so we need to adjust this to point + # to the actual include directory, which has include files for non-framework parts of Qt. + get_filename_component(QT_INCLUDE_DIR "${QT_INCLUDE_DIR}/../../include" ABSOLUTE) +endif() + +if(MSVC) + # Qt5: this flag has changed from /Zc:wchar_t- in Qt4.X + set(CMAKE_CXX_FLAGS "/Zc:wchar_t /GR /EHsc /DNOCOLOR /DWIN32 /D_WINDOWS /D_SCL_SECURE_NO_WARNINGS") # XXX +else() + if(CMAKE_HOST_UNIX AND NOT CYGWIN) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fvisibility=hidden -Wno-strict-aliasing") + endif() + set(CMAKE_CXX_FLAGS_DEBUG "-g") + option(ENABLE_GCC_OPTIMIZATION "Enable specific GCC flags to optimization library size and performance. Only available on Release Mode" 0) + if(ENABLE_GCC_OPTIMIZATION) + set(CMAKE_BUILD_TYPE Release) + set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -Os -Wl,-O1") + if(NOT CMAKE_HOST_APPLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--hash-style=gnu") + endif() + endif() + + if(CMAKE_HOST_APPLE) + # ALTERNATIVE_QT_INCLUDE_DIR is deprecated, because CMake takes care of finding the proper + # include folders using the qmake found in the environment. Only use it for now in case + # something goes wrong with the cmake process. + if(ALTERNATIVE_QT_INCLUDE_DIR AND NOT QT_INCLUDE_DIR) + set(QT_INCLUDE_DIR ${ALTERNATIVE_QT_INCLUDE_DIR}) + endif() + endif() +endif() +message(STATUS "*** computed QT_INCLUDE_DIR as ${QT_INCLUDE_DIR}") + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE ${SHIBOKEN_BUILD_TYPE}) +endif() + +set(BINDING_NAME PySide2) + +set(BINDING_API_VERSION "${BINDING_API_MAJOR_VERSION}.${BINDING_API_MINOR_VERSION}.${BINDING_API_MICRO_VERSION}" CACHE STRING "PySide2 version" FORCE) +set(PYSIDE_SO_VERSION ${BINDING_API_MAJOR_VERSION}.${BINDING_API_MINOR_VERSION}) +if (BINDING_API_PRE_RELEASE_VERSION_TYPE STREQUAL "") + set(BINDING_API_VERSION_FULL "${BINDING_API_MAJOR_VERSION}.${BINDING_API_MINOR_VERSION}.${BINDING_API_MICRO_VERSION}" + CACHE STRING "PySide2 version [full]" FORCE) +else() + set(BINDING_API_VERSION_FULL "${BINDING_API_MAJOR_VERSION}.${BINDING_API_MINOR_VERSION}.${BINDING_API_MICRO_VERSION}~${BINDING_API_PRE_RELEASE_VERSION_TYPE}${BINDING_API_PRE_RELEASE_VERSION}" + CACHE STRING "PySide2 version [full]" FORCE) +endif() + +string(TIMESTAMP PYSIDE_BUILD_DATE "%Y-%m-%dT%H:%M:%S+00:00" UTC) +if (PYSIDE_BUILD_DATE) + set(PYSIDE_BUILD_DATE "__build_date__ = '${PYSIDE_BUILD_DATE}'") +endif() + +if (PYSIDE_SETUP_PY_PACKAGE_VERSION) + set(PYSIDE_SETUP_PY_PACKAGE_VERSION_ASSIGNMENT "__setup_py_package_version__ = '${PYSIDE_SETUP_PY_PACKAGE_VERSION}'") + set(FINAL_PACKAGE_VERSION ${PYSIDE_SETUP_PY_PACKAGE_VERSION}) +else() + set(FINAL_PACKAGE_VERSION ${BINDING_API_VERSION_FULL}) +endif() + +if (PYSIDE_SETUP_PY_PACKAGE_TIMESTAMP) + set(PYSIDE_SETUP_PY_PACKAGE_TIMESTAMP_ASSIGNMENT "__setup_py_package_timestamp__ = '${PYSIDE_SETUP_PY_PACKAGE_TIMESTAMP}'") +else() + set(PYSIDE_SETUP_PY_PACKAGE_TIMESTAMP_ASSIGNMENT "__setup_py_package_timestamp__ = ''") +endif() + +find_package(Git) +if(GIT_FOUND) + # Check if current source folder is inside a git repo, so that commit information can be + # queried. + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --git-dir + OUTPUT_VARIABLE PYSIDE_SOURCE_IS_INSIDE_REPO + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if(PYSIDE_SOURCE_IS_INSIDE_REPO) + # Force git dates to be UTC-based. + set(ENV{TZ} UTC) + execute_process( + COMMAND ${GIT_EXECUTABLE} --no-pager show --date=format-local:%Y-%m-%dT%H:%M:%S+00:00 -s --format=%cd HEAD + OUTPUT_VARIABLE PYSIDE_BUILD_COMMIT_DATE + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(PYSIDE_BUILD_COMMIT_DATE) + set(PYSIDE_BUILD_COMMIT_DATE "__build_commit_date__ = '${PYSIDE_BUILD_COMMIT_DATE}'") + endif() + unset(ENV{TZ}) + + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse HEAD + OUTPUT_VARIABLE PYSIDE_BUILD_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(PYSIDE_BUILD_COMMIT_HASH) + set(PYSIDE_BUILD_COMMIT_HASH "__build_commit_hash__ = '${PYSIDE_BUILD_COMMIT_HASH}'") + endif() + + execute_process( + COMMAND ${GIT_EXECUTABLE} describe HEAD + OUTPUT_VARIABLE PYSIDE_BUILD_COMMIT_HASH_DESCRIBED + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(PYSIDE_BUILD_COMMIT_HASH_DESCRIBED) + set(PYSIDE_BUILD_COMMIT_HASH_DESCRIBED "__build_commit_hash_described__ = '${PYSIDE_BUILD_COMMIT_HASH_DESCRIBED}'") + endif() + + endif() +endif() + +include(PySideModules) + +macro(COLLECT_MODULE_IF_FOUND shortname) + set(name "Qt5${shortname}") + find_package(${name}) + # If package is found, _name_found will be equal to 1 + set(_name_found "${name}_FOUND") + # _name_dir will keep the path to the directory where the CMake rules were found + # e.g: ~/qt5.9-install/qtbase/lib/cmake/Qt5Core or /usr/lib64/cmake/Qt5Core + set(_name_dir "${name}_DIR") + # Qt5Core will set the base path to check if all the modules are on the same + # directory, to avoid CMake looking in another path. + # This will be saved in a global variable at the beginning of the modules + # collection process. + string(FIND "${name}" "Qt5Core" qtcore_found) + if(("${qtcore_found}" GREATER "0") OR ("${qtcore_found}" EQUAL "0")) + get_filename_component(_core_abs_dir "${${_name_dir}}/../" ABSOLUTE) + # Setting the absolute path where the Qt5Core was found + # e.g: ~/qt5.9-install/qtbase/lib/cmake or /usr/lib64/cmake + message(STATUS "CORE_ABS_DIR:" ${_core_abs_dir}) + endif() + + # Getting the absolute path for each module where the CMake was found, to + # compare it with CORE_ABS_DIR and check if they are in the same source directory + # e.g: ~/qt5.9-install/qtbase/lib/cmake/Qt5Script or /usr/lib64/cmake/Qt5Script + get_filename_component(_module_dir "${${_name_dir}}" ABSOLUTE) + string(FIND "${_module_dir}" "${_core_abs_dir}" found_basepath) + + # Determine essential/optional/missing + set(module_state "missing") + list(FIND ALL_ESSENTIAL_MODULES "${shortname}" essentialIndex) + if(${essentialIndex} EQUAL -1) + list(FIND ALL_OPTIONAL_MODULES "${shortname}" optionalIndex) + if(NOT ${optionalIndex} EQUAL -1) + set(module_state "optional") + endif() + else() + set(module_state "essential") + endif() + + # If the module was found, and also the module path is the same as the + # Qt5Core base path, we will generate the list with the modules to be installed + set(looked_in_message ". Looked in: ${${_name_dir}}") + if("${${_name_found}}" AND (("${found_basepath}" GREATER "0") OR ("${found_basepath}" EQUAL "0"))) + message(STATUS "${module_state} module ${name} found (${ARGN})${looked_in_message}") + # record the shortnames for the tests + list(APPEND all_module_shortnames ${shortname}) + else() + if("${module_state}" STREQUAL "optional") + message(STATUS "optional module ${name} skipped${looked_in_message}") + elseif("${module_state}" STREQUAL "essential") + message(STATUS "skipped module ${name} is essential!\n" + " We do not guarantee that all tests are working.${looked_in_message}") + else() + message(FATAL_ERROR "module ${name} MISSING${looked_in_message}") + endif() + endif() +endmacro() + +# Set default values for pyside2_global.h +set (Qt5X11Extras_FOUND "0") +set (Qt5Test_FOUND "0") +set (Qt5Widgets_FOUND "0") + +# Collect all essential modules. +# note: the order of this list is relevant for dependencies. +# For instance: Qt5Printsupport must come before Qt5WebKitWidgets. +set(ALL_ESSENTIAL_MODULES Core Gui Widgets PrintSupport Sql Network Test Concurrent) +if(UNIX AND NOT APPLE) + list(APPEND ALL_ESSENTIAL_MODULES X11Extras) +endif() +if(WIN32) + list(APPEND ALL_ESSENTIAL_MODULES WinExtras) +endif() +if(APPLE) + list(APPEND ALL_ESSENTIAL_MODULES MacExtras) +endif() + +# Collect all optional modules. +set(ALL_OPTIONAL_MODULES Xml XmlPatterns Help Multimedia MultimediaWidgets OpenGL Positioning Location Qml Quick QuickWidgets Scxml Script ScriptTools Sensors TextToSpeech Charts Svg DataVisualization) +find_package(Qt5UiTools) +if(Qt5UiTools_FOUND) + list(APPEND ALL_OPTIONAL_MODULES UiTools) +else() + set(DISABLE_QtUiTools 1) +endif() +if(WIN32) + list(APPEND ALL_OPTIONAL_MODULES AxContainer) +endif() +# Disabling WebKit by default +# If WebKit support is needed add the following elements +# to the list: WebKit WebKitWidgets +list(APPEND ALL_OPTIONAL_MODULES WebChannel WebEngineCore WebEngine WebEngineWidgets WebSockets) +if (Qt5Core_VERSION VERSION_GREATER 5.9.3) # Depending on fixes in Qt3D + list(APPEND ALL_OPTIONAL_MODULES 3DCore 3DRender 3DInput 3DLogic 3DAnimation 3DExtras) +endif() + +# Modules to be built unless specified by -DMODULES on command line +if (NOT MODULES) + set(MODULES "${ALL_ESSENTIAL_MODULES};${ALL_OPTIONAL_MODULES}") +endif() + +# This will contain the set of modules for which bindings are not built. +set(DISABLED_MODULES "${ALL_ESSENTIAL_MODULES};${ALL_OPTIONAL_MODULES}") + +# Removing from the MODULES list the items that were defined with +# -DSKIP_MODULES on command line +if (SKIP_MODULES) + foreach(s ${SKIP_MODULES}) + list(REMOVE_ITEM MODULES ${s}) + endforeach() +endif() + +foreach(m ${MODULES}) + COLLECT_MODULE_IF_FOUND(${m}) + list(FIND all_module_shortnames ${m} is_module_collected) + # If the module was collected, remove it from disabled modules list. + if (NOT is_module_collected EQUAL -1) + list(REMOVE_ITEM DISABLED_MODULES ${m}) + endif() +endforeach() + +# Mark all non-collected modules as disabled. This is used for disabling tests +# that depend on the disabled modules. +foreach(m ${DISABLED_MODULES}) + set(DISABLE_Qt${m} 1) +endforeach() + + +string(REGEX MATCHALL "[0-9]+" qt_version_helper "${Qt5Core_VERSION}") + +list(GET qt_version_helper 0 QT_VERSION_MAJOR) +list(GET qt_version_helper 1 QT_VERSION_MINOR) +unset(qt_version_helper) + +set(PYSIDE_QT_VERSION "${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}" CACHE STRING "Qt version used to compile PySide" FORCE) +if(ENABLE_VERSION_SUFFIX) + set(pyside_SUFFIX "-${BINDING_API_MAJOR_VERSION}.${BINDING_API_MINOR_VERSION}") +endif() + +# no more supported: include(${QT_USE_FILE}) + +# Configure OS support +set(ENABLE_X11 "0") +set(ENABLE_MAC "0") +set(ENABLE_WIN "0") +set(ENABLE_SIMULATOR "0") + +# no more Maemo, no more simulator +if(CMAKE_HOST_APPLE) + set(ENABLE_MAC "1") + set(AUTO_OS "mac") +elseif(CMAKE_HOST_WIN32) + set(ENABLE_WIN "1") + set(AUTO_OS "win") +elseif(CMAKE_HOST_UNIX) + set(ENABLE_X11 "1") + set(AUTO_OS "x11") +else() + message(FATAL_ERROR "OS not supported") +endif() +message(STATUS "Detected OS: ${AUTO_OS}") + +# Define supported Qt Version +set(SUPPORTED_QT_VERSION "${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}") + +# uninstall target +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) +add_custom_target(uninstall "${CMAKE_COMMAND}" + -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") + + +if (NOT PYTHON_SITE_PACKAGES) + execute_process( + COMMAND ${SHIBOKEN_PYTHON_INTERPRETER} -c "if True: + from distutils import sysconfig + from os.path import sep + print(sysconfig.get_python_lib(1, 0, prefix='${CMAKE_INSTALL_PREFIX}').replace(sep, '/')) + " + OUTPUT_VARIABLE PYTHON_SITE_PACKAGES + OUTPUT_STRIP_TRAILING_WHITESPACE) + if (NOT PYTHON_SITE_PACKAGES) + message(FATAL_ERROR "Could not detect Python module installation directory.") + elseif (APPLE) + message(STATUS "!!! The generated bindings will be installed on ${PYTHON_SITE_PACKAGES}, is it right!?") + endif() +endif() + +set(GENERATOR_EXTRA_FLAGS --generator-set=shiboken + --enable-parent-ctor-heuristic + --enable-pyside-extensions + --enable-return-value-heuristic + --use-isnull-as-nb_nonzero) +# 2017-04-24 The protected hack can unfortunately not be disabled, because +# Clang does produce linker errors when we disable the hack. +# But the ugly workaround in Python is replaced by a shiboken change. +if(WIN32 OR DEFINED AVOID_PROTECTED_HACK) + message(STATUS "PySide2 will be generated avoiding the protected hack!") + set(GENERATOR_EXTRA_FLAGS ${GENERATOR_EXTRA_FLAGS} --avoid-protected-hack) + add_definitions(-DAVOID_PROTECTED_HACK) +else() + message(STATUS "PySide will be generated using the protected hack!") +endif() + +# Build with Address sanitizer enabled if requested. This may break things, so use at your own risk. +if (SANITIZE_ADDRESS AND NOT MSVC) + # Currently this does not check that the clang / gcc version used supports Address sanitizer, + # so once again, use at your own risk. + add_compile_options("-fsanitize=address" "-g" "-fno-omit-frame-pointer") + # We need to add the sanitize address option to all linked executables / shared libraries + # so that proper sanitizer symbols are linked in. + # + # Note that when running tests, you may need to set an additional environment variable + # in set_tests_properties for shiboken2 / pyside tests, or exported in your shell. Address + # sanitizer will tell you what environment variable needs to be exported. For example: + # export DYLD_INSERT_LIBRARIES=/Applications/Xcode.app/Contents/Developer/Toolchains/ + # ./XcodeDefault.xctoolchain/usr/lib/clang/8.1.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib + set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_STANDARD_LIBRARIES} -fsanitize=address") +endif() + +add_subdirectory(libpyside) +find_package(Qt5Designer) +if(Qt5UiTools_FOUND AND Qt5Designer_FOUND) + add_subdirectory(plugins) +endif() + +# project directories +add_subdirectory(PySide2) +if (BUILD_TESTS) + enable_testing() + add_subdirectory(tests) +endif () + +find_program(SPHINX_BUILD sphinx-build) +find_program(DOT_EXEC dot) + +if (QT_SRC_DIR AND SPHINX_BUILD AND DOT_EXEC) + add_subdirectory(doc) +else () + set(DOCS_TARGET_DISABLED_MESSAGE "apidoc generation targets disabled.") + if (NOT QT_SRC_DIR) + message(STATUS "QT_SRC_DIR variable not set, ${DOCS_TARGET_DISABLED_MESSAGE}") + elseif (NOT SPHINX_BUILD) + message(STATUS "sphinx-build command not found, ${DOCS_TARGET_DISABLED_MESSAGE}") + elseif (NOT DOT_EXEC) + message(STATUS "graphviz not found, ${DOCS_TARGET_DISABLED_MESSAGE}") + else() + message(STATUS "Unknown issue occurred, ${DOCS_TARGET_DISABLED_MESSAGE}") + endif() +endif() diff --git a/sources/pyside2/COPYING b/sources/pyside2/COPYING new file mode 100644 index 0000000..9315102 --- /dev/null +++ b/sources/pyside2/COPYING @@ -0,0 +1,501 @@ +GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + diff --git a/sources/pyside2/PySide2/CMakeLists.txt b/sources/pyside2/PySide2/CMakeLists.txt new file mode 100644 index 0000000..0263f74 --- /dev/null +++ b/sources/pyside2/PySide2/CMakeLists.txt @@ -0,0 +1,100 @@ +project(pyside2) + +# Configure include based on platform +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/global.h.in" + "${CMAKE_CURRENT_BINARY_DIR}/pyside2_global.h" @ONLY) + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.in" + "${CMAKE_CURRENT_BINARY_DIR}/__init__.py" @ONLY) + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/_config.py.in" + "${CMAKE_CURRENT_BINARY_DIR}/_config.py" @ONLY) + +# Use absolute path instead of relative path, to avoid ninja build errors due to +# duplicate file dependency inconsistency. +set(pyside_version_relative_path "${CMAKE_CURRENT_SOURCE_DIR}/../pyside_version.py") +get_filename_component(pyside_version_path ${pyside_version_relative_path} ABSOLUTE) +configure_file("${pyside_version_path}" + "${CMAKE_CURRENT_BINARY_DIR}/_git_pyside_version.py" @ONLY) + +# qt.conf needs to be placed next to QtWebEngineProcess so that the executable uses the correct +# Prefix location leading to an existing icu data file. It is needed on Windows, Linux, and macOS +# non-framework build. In framework build, instead of using qt.conf, Bundle querying is used. +if (WIN32 OR (UNIX AND NOT APPLE) OR (APPLE AND NOT QtCore_is_framework)) + + if (WIN32) + # On Windows, the QtWebEngineProcess is directly located in the Prefix, due to not using + # a "Qt" subfolder like on the other platforms. + set(QT_CONF_PREFIX ".") + else() + # On Linux and non-framework macOS, the QtWebEngineProcess is in ./libexec, so prefix is one + # level higher. + set(QT_CONF_PREFIX "..") + endif() + + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/qt.conf.in" + "${CMAKE_CURRENT_BINARY_DIR}/qt.conf" @ONLY) +endif() + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/support/__init__.py" + "${CMAKE_CURRENT_BINARY_DIR}/support/__init__.py" COPYONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/support/signature/__init__.py" + "${CMAKE_CURRENT_BINARY_DIR}/support/signature/__init__.py" COPYONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/support/signature/loader.py" + "${CMAKE_CURRENT_BINARY_DIR}/support/signature/loader.py" COPYONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/support/signature/mapping.py" + "${CMAKE_CURRENT_BINARY_DIR}/support/signature/mapping.py" COPYONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/support/signature/parser.py" + "${CMAKE_CURRENT_BINARY_DIR}/support/signature/parser.py" COPYONLY) +if (PYTHON_VERSION_MAJOR EQUAL 3) +else() + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/support/signature/backport_inspect.py" + "${CMAKE_CURRENT_BINARY_DIR}/support/signature/backport_inspect.py" COPYONLY) + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/support/signature/typing27.py" + "${CMAKE_CURRENT_BINARY_DIR}/support/signature/typing.py" COPYONLY) +endif() + +# now compile all modules. +file(READ "${CMAKE_CURRENT_BINARY_DIR}/pyside2_global.h" pyside2_global_contents) + +foreach(shortname IN LISTS all_module_shortnames) + set(name "Qt5${shortname}") + HAS_QT_MODULE(${name}_FOUND Qt${shortname}) + + # Create a module header consisting of pyside2_global.h and the module + # include. Note: The contents of pyside2_global.h must be copied instead of + # just #including it since shiboken will otherwise generate an + # #include for the the type entries originating from it + # (cf AbstractMetaBuilderPrivate::setInclude()). + set(module_header "${CMAKE_CURRENT_BINARY_DIR}/Qt${shortname}_global.h") + set(module_header_content "") + set(pre_header "${CMAKE_CURRENT_BINARY_DIR}/Qt${shortname}/Qt${shortname}_global.pre.h") + if(EXISTS "${pre_header}") + file(READ "${pre_header}" pre_header_content) + set(module_header_content "${pre_header_content}") + endif() + set(module_header_content "${module_header_content}\n${pyside2_global_contents}") + # AxContainer/AxServer from Active Qt do not have module headers + if(NOT "${shortname}" STREQUAL "AxContainer") + set(module_header_content "${module_header_content}\n#include ") + endif() + set(post_header "${CMAKE_CURRENT_BINARY_DIR}/Qt${shortname}/Qt${shortname}_global.post.h") + if(EXISTS "${post_header}") + file(READ "${post_header}" post_header_content) + set(module_header_content "${module_header_content}\n${post_header_content}") + endif() + file(WRITE ${module_header} "${module_header_content}") +endforeach() + +# install +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/__init__.py" + DESTINATION "${PYTHON_SITE_PACKAGES}/${BINDING_NAME}${pyside2_SUFFIX}") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/_config.py" + DESTINATION "${PYTHON_SITE_PACKAGES}/${BINDING_NAME}${pyside2_SUFFIX}") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/_git_pyside_version.py" + DESTINATION "${PYTHON_SITE_PACKAGES}/${BINDING_NAME}${pyside2_SUFFIX}") +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_templates.xml + DESTINATION share/PySide2${pyside_SUFFIX}/typesystems) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pyside2_global.h + DESTINATION include/${BINDING_NAME}${pyside2_SUFFIX}) + diff --git a/sources/pyside2/PySide2/Qt3DAnimation/CMakeLists.txt b/sources/pyside2/PySide2/Qt3DAnimation/CMakeLists.txt new file mode 100644 index 0000000..9bdf36a --- /dev/null +++ b/sources/pyside2/PySide2/Qt3DAnimation/CMakeLists.txt @@ -0,0 +1,55 @@ +project(Qt3DAnimation) + +set(Qt3DAnimation_SRC +${Qt3DAnimation_GEN_DIR}/qt3danimation_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qabstractanimation_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qabstractanimationclip_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qabstractclipanimator_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qabstractclipblendnode_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qadditiveclipblend_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qanimationaspect_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qanimationcontroller_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qanimationgroup_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qblendedclipanimator_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qclipanimator_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qkeyframeanimation_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qlerpclipblend_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qmorphinganimation_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qmorphtarget_wrapper.cpp +${Qt3DAnimation_GEN_DIR}/qt3danimation_qvertexblendanimation_wrapper.cpp +# module is always needed +${Qt3DAnimation_GEN_DIR}/qt3danimation_module_wrapper.cpp) + +set(Qt3DAnimation_include_dirs + ${Qt3DAnimation_SOURCE_DIR} + ${Qt3DAnimation_BINARY_DIR} + ${pyside2_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIR} + ${Qt53DCore_INCLUDE_DIRS} + ${Qt53DRender_INCLUDE_DIRS} + ${Qt53DAnimation_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${Qt3DCore_GEN_DIR} + ${Qt3DRender_GEN_DIR} + ${Qt3DAnimation_GEN_DIR}) + +set(Qt3DAnimation_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt53DAnimation_LIBRARIES}) + +set(Qt3DAnimation_deps Qt3DRender) + +create_pyside_module(Qt3DAnimation + Qt3DAnimation_include_dirs + Qt3DAnimation_libraries + Qt3DAnimation_deps + Qt3DAnimation_SOURCE_DIR + Qt3DAnimation_SRC + "" + ${Qt3DAnimation_BINARY_DIR}/typesystem_3danimation.xml) diff --git a/sources/pyside2/PySide2/Qt3DAnimation/typesystem_3danimation.xml b/sources/pyside2/PySide2/Qt3DAnimation/typesystem_3danimation.xml new file mode 100644 index 0000000..cf72b84 --- /dev/null +++ b/sources/pyside2/PySide2/Qt3DAnimation/typesystem_3danimation.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/Qt3DCore/CMakeLists.txt b/sources/pyside2/PySide2/Qt3DCore/CMakeLists.txt new file mode 100644 index 0000000..53d3cc6 --- /dev/null +++ b/sources/pyside2/PySide2/Qt3DCore/CMakeLists.txt @@ -0,0 +1,74 @@ +project(Qt3DCore) + +set(Qt3DCore_SRC +${Qt3DCore_GEN_DIR}/qt3dcore_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qabstractaspect_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qaspectengine_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qaspectjob_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qbackendnode_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qcomponent_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qcomponentaddedchange_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qcomponentremovedchange_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qdynamicpropertyupdatedchange_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qentity_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qnode_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qnodecreatedchangebase_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qnodedestroyedchange_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qnodeid_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qnodeidtypepair_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qpropertynodeaddedchange_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qpropertynoderemovedchange_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qpropertyupdatedchange_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qpropertyupdatedchangebase_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qpropertyvalueaddedchange_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qpropertyvalueaddedchangebase_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qpropertyvalueremovedchange_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qpropertyvalueremovedchangebase_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qscenechange_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qstaticpropertyupdatedchangebase_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qstaticpropertyvalueaddedchangebase_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qstaticpropertyvalueremovedchangebase_wrapper.cpp +${Qt3DCore_GEN_DIR}/qt3dcore_qtransform_wrapper.cpp +# module is always needed +${Qt3DCore_GEN_DIR}/qt3dcore_module_wrapper.cpp) + +if (Qt53DCore_VERSION VERSION_EQUAL 5.10.0 OR Qt53DCore_VERSION VERSION_GREATER 5.10.0) + list(APPEND Qt3DCore_SRC + ${Qt3DCore_GEN_DIR}/qt3dcore_qarmature_wrapper.cpp + ${Qt3DCore_GEN_DIR}/qt3dcore_qjoint_wrapper.cpp + ${Qt3DCore_GEN_DIR}/qt3dcore_qabstractskeleton_wrapper.cpp + ${Qt3DCore_GEN_DIR}/qt3dcore_qnodecommand_wrapper.cpp + ${Qt3DCore_GEN_DIR}/qt3dcore_qskeleton_wrapper.cpp + ${Qt3DCore_GEN_DIR}/qt3dcore_qskeletonloader_wrapper.cpp) +endif() + +set(Qt3DCore_include_dirs + ${Qt3DCore_SOURCE_DIR} + ${Qt3DCore_BINARY_DIR} + ${pyside2_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} + ${Qt53DCore_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtNetwork_GEN_DIR}) + +set(Qt3DCore_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt53DCore_LIBRARIES}) + +set(Qt3DCore_deps QtGui QtNetwork) + +create_pyside_module(Qt3DCore + Qt3DCore_include_dirs + Qt3DCore_libraries + Qt3DCore_deps + Qt3DCore_SOURCE_DIR + Qt3DCore_SRC + "" + ${Qt3DCore_BINARY_DIR}/typesystem_3dcore.xml) diff --git a/sources/pyside2/PySide2/Qt3DCore/typesystem_3dcore.xml b/sources/pyside2/PySide2/Qt3DCore/typesystem_3dcore.xml new file mode 100644 index 0000000..fb7a83b --- /dev/null +++ b/sources/pyside2/PySide2/Qt3DCore/typesystem_3dcore.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/Qt3DExtras/CMakeLists.txt b/sources/pyside2/PySide2/Qt3DExtras/CMakeLists.txt new file mode 100644 index 0000000..4bc25d5 --- /dev/null +++ b/sources/pyside2/PySide2/Qt3DExtras/CMakeLists.txt @@ -0,0 +1,81 @@ +project(Qt3DExtras) + +set(Qt3DExtras_SRC +${Qt3DExtras_GEN_DIR}/qt3dextras_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qconegeometry_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qconemesh_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qcuboidgeometry_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qcuboidmesh_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qcylindergeometry_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qcylindermesh_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qdiffusemapmaterial_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qdiffusespecularmapmaterial_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qextrudedtextgeometry_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qextrudedtextmesh_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qfirstpersoncameracontroller_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qforwardrenderer_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qgoochmaterial_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qmetalroughmaterial_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qmorphphongmaterial_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qnormaldiffusemapmaterial_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qnormaldiffusespecularmapmaterial_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qorbitcameracontroller_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qpervertexcolormaterial_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qphongmaterial_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qphongalphamaterial_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qplanegeometry_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qplanemesh_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qskyboxentity_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qspheregeometry_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qspheremesh_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qtext2dentity_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qtexturematerial_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qtorusgeometry_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qtorusmesh_wrapper.cpp +${Qt3DExtras_GEN_DIR}/qt3dextras_qt3dwindow_wrapper.cpp +# module is always needed +${Qt3DExtras_GEN_DIR}/qt3dextras_module_wrapper.cpp) + +if (Qt53DExtras_VERSION VERSION_EQUAL 5.10.0 OR Qt53DExtras_VERSION VERSION_GREATER 5.10.0) + list(APPEND Qt3DExtras_SRC + ${Qt3DExtras_GEN_DIR}/qt3dextras_qabstractcameracontroller_wrapper.cpp + ${Qt3DExtras_GEN_DIR}/qt3dextras_qabstractcameracontroller_inputstate_wrapper.cpp + ${Qt3DExtras_GEN_DIR}/qt3dextras_qabstractspritesheet_wrapper.cpp + ${Qt3DExtras_GEN_DIR}/qt3dextras_qdiffusespecularmaterial_wrapper.cpp + ${Qt3DExtras_GEN_DIR}/qt3dextras_qspritegrid_wrapper.cpp + ${Qt3DExtras_GEN_DIR}/qt3dextras_qspritesheet_wrapper.cpp + ${Qt3DExtras_GEN_DIR}/qt3dextras_qspritesheetitem_wrapper.cpp) +endif() + +set(Qt3DExtras_include_dirs + ${Qt3DExtras_SOURCE_DIR} + ${Qt3DExtras_BINARY_DIR} + ${pyside2_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt53DCore_INCLUDE_DIRS} + ${Qt53DRender_INCLUDE_DIRS} + ${Qt53DExtras_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${Qt3DCore_GEN_DIR} + ${Qt3DRender_GEN_DIR}) + +set(Qt3DExtras_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt53DExtras_LIBRARIES}) + +set(Qt3DExtras_deps Qt3DRender) + +create_pyside_module(Qt3DExtras + Qt3DExtras_include_dirs + Qt3DExtras_libraries + Qt3DExtras_deps + Qt3DExtras_SOURCE_DIR + Qt3DExtras_SRC + "" + ${Qt3DExtras_BINARY_DIR}/typesystem_3dextras.xml) diff --git a/sources/pyside2/PySide2/Qt3DExtras/typesystem_3dextras.xml b/sources/pyside2/PySide2/Qt3DExtras/typesystem_3dextras.xml new file mode 100644 index 0000000..54f4df3 --- /dev/null +++ b/sources/pyside2/PySide2/Qt3DExtras/typesystem_3dextras.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/Qt3DInput/CMakeLists.txt b/sources/pyside2/PySide2/Qt3DInput/CMakeLists.txt new file mode 100644 index 0000000..694f373 --- /dev/null +++ b/sources/pyside2/PySide2/Qt3DInput/CMakeLists.txt @@ -0,0 +1,56 @@ +project(Qt3DInput) + +set(Qt3DInput_SRC +${Qt3DInput_GEN_DIR}/qt3dinput_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qabstractactioninput_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qabstractaxisinput_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qabstractphysicaldevice_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qaction_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qactioninput_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qanalogaxisinput_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qaxis_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qaxisaccumulator_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qaxissetting_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qbuttonaxisinput_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qinputaspect_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qinputchord_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qinputsequence_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qinputsettings_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qkeyboardhandler_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qkeyevent_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qlogicaldevice_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qkeyboarddevice_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qmousedevice_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qmouseevent_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qwheelevent_wrapper.cpp +${Qt3DInput_GEN_DIR}/qt3dinput_qmousehandler_wrapper.cpp +# module is always needed +${Qt3DInput_GEN_DIR}/qt3dinput_module_wrapper.cpp) + +set(Qt3DInput_include_dirs + ${Qt3DInput_SOURCE_DIR} + ${Qt3DInput_BINARY_DIR} + ${pyside2_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${Qt3DCore_GEN_DIR}) + +set(Qt3DInput_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt53DInput_LIBRARIES}) + +set(Qt3DInput_deps Qt3DCore) + +create_pyside_module(Qt3DInput + Qt3DInput_include_dirs + Qt3DInput_libraries + Qt3DInput_deps + Qt3DInput_SOURCE_DIR + Qt3DInput_SRC + "" + ${Qt3DInput_BINARY_DIR}/typesystem_3dinput.xml) diff --git a/sources/pyside2/PySide2/Qt3DInput/typesystem_3dinput.xml b/sources/pyside2/PySide2/Qt3DInput/typesystem_3dinput.xml new file mode 100644 index 0000000..dd72c5c --- /dev/null +++ b/sources/pyside2/PySide2/Qt3DInput/typesystem_3dinput.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/Qt3DLogic/CMakeLists.txt b/sources/pyside2/PySide2/Qt3DLogic/CMakeLists.txt new file mode 100644 index 0000000..23cde88 --- /dev/null +++ b/sources/pyside2/PySide2/Qt3DLogic/CMakeLists.txt @@ -0,0 +1,37 @@ +project(Qt3DLogic) + +set(Qt3DLogic_SRC +${Qt3DLogic_GEN_DIR}/qt3dlogic_wrapper.cpp +${Qt3DLogic_GEN_DIR}/qt3dlogic_qframeaction_wrapper.cpp +${Qt3DLogic_GEN_DIR}/qt3dlogic_qlogicaspect_wrapper.cpp +# module is always needed +${Qt3DLogic_GEN_DIR}/qt3dlogic_module_wrapper.cpp) + +set(Qt3DLogic_include_dirs + ${Qt3DLogic_SOURCE_DIR} + ${Qt3DLogic_BINARY_DIR} + ${pyside2_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${Qt3DCore_GEN_DIR}) + +set(Qt3DLogic_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt53DLogic_LIBRARIES}) + +set(Qt3DLogic_deps Qt3DCore) + +create_pyside_module(Qt3DLogic + Qt3DLogic_include_dirs + Qt3DLogic_libraries + Qt3DLogic_deps + Qt3DLogic_SOURCE_DIR + Qt3DLogic_SRC + "" + ${Qt3DLogic_BINARY_DIR}/typesystem_3dlogic.xml) diff --git a/sources/pyside2/PySide2/Qt3DLogic/typesystem_3dlogic.xml b/sources/pyside2/PySide2/Qt3DLogic/typesystem_3dlogic.xml new file mode 100644 index 0000000..ec9ed9e --- /dev/null +++ b/sources/pyside2/PySide2/Qt3DLogic/typesystem_3dlogic.xml @@ -0,0 +1,49 @@ + + + + + + + + + + diff --git a/sources/pyside2/PySide2/Qt3DRender/CMakeLists.txt b/sources/pyside2/PySide2/Qt3DRender/CMakeLists.txt new file mode 100644 index 0000000..1b859ca --- /dev/null +++ b/sources/pyside2/PySide2/Qt3DRender/CMakeLists.txt @@ -0,0 +1,155 @@ +project(Qt3DRender) + +set(Qt3DRender_SRC +${Qt3DRender_GEN_DIR}/qt3drender_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_propertyreaderinterface_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qabstractfunctor_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qabstractlight_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qabstracttexture_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qabstracttextureimage_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qalphacoverage_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qalphatest_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qattribute_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qblendequation_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qblendequationarguments_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qbuffer_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qbuffercapture_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qbufferdatagenerator_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qcamera_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qcameralens_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qcameraselector_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qclearbuffers_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qclipplane_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qcolormask_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qcomputecommand_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qcullface_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qdepthtest_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qdirectionallight_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qdispatchcompute_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qdithering_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qeffect_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qenvironmentlight_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qfilterkey_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qframegraphnode_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qframegraphnodecreatedchangebase_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qfrontface_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qfrustumculling_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qgeometry_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qgeometryfactory_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qgeometryrenderer_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qgraphicsapifilter_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qlayer_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qlayerfilter_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qlevelofdetail_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qlevelofdetailboundingsphere_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qlevelofdetailswitch_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qmaterial_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qmemorybarrier_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qmesh_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qmultisampleantialiasing_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qnodepthmask_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qnodraw_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qobjectpicker_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qpaintedtextureimage_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qparameter_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qpickevent_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qpicktriangleevent_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qpickingsettings_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qpointlight_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qpointsize_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qpolygonoffset_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qrenderaspect_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qrendercapture_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qrendercapturereply_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qrenderpass_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qrenderpassfilter_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qrendersettings_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qrenderstate_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qrenderstateset_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qrendersurfaceselector_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qrendertarget_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qrendertargetoutput_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qrendertargetselector_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qsceneloader_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qscissortest_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qseamlesscubemap_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qshaderdata_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qshaderprogram_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qsortpolicy_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qspotlight_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qstencilmask_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qstenciloperation_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qstenciloperationarguments_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qstenciltest_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qstenciltestarguments_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtechnique_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtechniquefilter_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexture1d_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexture1darray_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexture2d_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexture2darray_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexture2dmultisample_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexture2dmultisamplearray_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexture3d_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexturebuffer_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexturecubemap_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexturecubemaparray_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexturedata_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexturegenerator_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtextureimage_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtextureimagedata_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtextureimagedatagenerator_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtextureloader_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexturerectangle_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qtexturewrapmode_wrapper.cpp +${Qt3DRender_GEN_DIR}/qt3drender_qviewport_wrapper.cpp +# module is always needed +${Qt3DRender_GEN_DIR}/qt3drender_module_wrapper.cpp) + +if (Qt53DRender_VERSION VERSION_EQUAL 5.10.0 OR Qt53DRender_VERSION VERSION_GREATER 5.10.0) + list(APPEND Qt3DRender_SRC + ${Qt3DRender_GEN_DIR}/qt3drender_qblitframebuffer_wrapper.cpp + ${Qt3DRender_GEN_DIR}/qt3drender_qlinewidth_wrapper.cpp + ${Qt3DRender_GEN_DIR}/qt3drender_qpicklineevent_wrapper.cpp + ${Qt3DRender_GEN_DIR}/qt3drender_qpickpointevent_wrapper.cpp + ${Qt3DRender_GEN_DIR}/qt3drender_qproximityfilter_wrapper.cpp + ${Qt3DRender_GEN_DIR}/qt3drender_qshaderprogrambuilder_wrapper.cpp +) +endif() + +if (Qt53DRender_VERSION VERSION_EQUAL 5.11.0 OR Qt53DRender_VERSION VERSION_GREATER 5.11.0) + list(APPEND Qt3DRender_SRC + ${Qt3DRender_GEN_DIR}/qt3drender_qabstractraycaster_wrapper.cpp + ${Qt3DRender_GEN_DIR}/qt3drender_qraycaster_wrapper.cpp + ${Qt3DRender_GEN_DIR}/qt3drender_qraycasterhit_wrapper.cpp + ${Qt3DRender_GEN_DIR}/qt3drender_qscreenraycaster_wrapper.cpp) +endif() + +set(Qt3DRender_include_dirs + ${Qt3DRender_SOURCE_DIR} + ${Qt3DRender_BINARY_DIR} + ${pyside2_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${Qt3DCore_GEN_DIR}) + +set(Qt3DRender_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt53DRender_LIBRARIES}) + +set(Qt3DRender_deps Qt3DCore) + +create_pyside_module(Qt3DRender + Qt3DRender_include_dirs + Qt3DRender_libraries + Qt3DRender_deps + Qt3DRender_SOURCE_DIR + Qt3DRender_SRC + "" + ${Qt3DRender_BINARY_DIR}/typesystem_3drender.xml) diff --git a/sources/pyside2/PySide2/Qt3DRender/typesystem_3drender.xml b/sources/pyside2/PySide2/Qt3DRender/typesystem_3drender.xml new file mode 100644 index 0000000..e4fda94 --- /dev/null +++ b/sources/pyside2/PySide2/Qt3DRender/typesystem_3drender.xml @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtAxContainer/CMakeLists.txt b/sources/pyside2/PySide2/QtAxContainer/CMakeLists.txt new file mode 100644 index 0000000..a397178 --- /dev/null +++ b/sources/pyside2/PySide2/QtAxContainer/CMakeLists.txt @@ -0,0 +1,46 @@ +project(QtAxContainer) + +set(QtAxContainer_SRC +${QtAxContainer_GEN_DIR}/qaxbase_wrapper.cpp +${QtAxContainer_GEN_DIR}/qaxobject_wrapper.cpp +${QtAxContainer_GEN_DIR}/qaxscript_wrapper.cpp +${QtAxContainer_GEN_DIR}/qaxscriptengine_wrapper.cpp +${QtAxContainer_GEN_DIR}/qaxscriptmanager_wrapper.cpp +${QtAxContainer_GEN_DIR}/qaxselect_wrapper.cpp +${QtAxContainer_GEN_DIR}/qaxwidget_wrapper.cpp +# module is always needed +${QtAxContainer_GEN_DIR}/qtaxcontainer_module_wrapper.cpp) + +configure_file("${QtAxContainer_SOURCE_DIR}/QtAxContainer_global.post.h.in" + "${QtAxContainer_BINARY_DIR}/QtAxContainer_global.post.h" @ONLY) + +set(QtAxContainer_include_dirs + ${QtAxContainer_SOURCE_DIR} + ${QtAxContainer_BINARY_DIR} + ${pyside2_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtWidgets_GEN_DIR}) + +set(QtAxContainer_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5AxContainer_LIBRARIES} + ${Qt5AxBase_LIBRARIES}) + +set(QtAxContainer_deps QtWidgets) + +create_pyside_module(QtAxContainer + QtAxContainer_include_dirs + QtAxContainer_libraries + QtAxContainer_deps + QtAxContainer_SOURCE_DIR + QtAxContainer_SRC + "" + ${QtAxContainer_BINARY_DIR}/typesystem_axcontainer.xml) diff --git a/sources/pyside2/PySide2/QtAxContainer/QtAxContainer_global.post.h.in b/sources/pyside2/PySide2/QtAxContainer/QtAxContainer_global.post.h.in new file mode 100644 index 0000000..22e1b01 --- /dev/null +++ b/sources/pyside2/PySide2/QtAxContainer/QtAxContainer_global.post.h.in @@ -0,0 +1,5 @@ +#include +#include +#include +#include +#include diff --git a/sources/pyside2/PySide2/QtAxContainer/typesystem_axcontainer.xml b/sources/pyside2/PySide2/QtAxContainer/typesystem_axcontainer.xml new file mode 100644 index 0000000..427a6f0 --- /dev/null +++ b/sources/pyside2/PySide2/QtAxContainer/typesystem_axcontainer.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtCharts/CMakeLists.txt b/sources/pyside2/PySide2/QtCharts/CMakeLists.txt new file mode 100644 index 0000000..fa17730 --- /dev/null +++ b/sources/pyside2/PySide2/QtCharts/CMakeLists.txt @@ -0,0 +1,90 @@ +project(QtCharts) + +set(QtCharts_SRC +${QtCharts_GEN_DIR}/qtcharts_qabstractaxis_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qabstractbarseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qabstractseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qarealegendmarker_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qareaseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qbarcategoryaxis_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qbarlegendmarker_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qbarmodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qbarseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qbarset_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qboxplotlegendmarker_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qboxplotmodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qboxplotseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qboxset_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qcandlesticklegendmarker_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qcandlestickmodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qcandlestickseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qcandlestickset_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qcategoryaxis_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qchart_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qchartview_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qdatetimeaxis_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qhbarmodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qhboxplotmodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qhcandlestickmodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qhorizontalbarseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qhorizontalpercentbarseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qhorizontalstackedbarseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qhpiemodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qhxymodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qlegend_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qlegendmarker_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qlineseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qlogvalueaxis_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qpercentbarseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qpielegendmarker_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qpiemodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qpieseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qpieslice_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qpolarchart_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qscatterseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qsplineseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qstackedbarseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qvalueaxis_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qvbarmodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qvboxplotmodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qvcandlestickmodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qvpiemodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qvxymodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qxylegendmarker_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qxymodelmapper_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_qxyseries_wrapper.cpp +${QtCharts_GEN_DIR}/qtcharts_wrapper.cpp +# module is always needed +${QtCharts_GEN_DIR}/qtcharts_module_wrapper.cpp +) + +set(QtCharts_include_dirs ${QtCharts_SOURCE_DIR} + ${QtCharts_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5Charts_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtWidgets_GEN_DIR}) + +set(QtCharts_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Charts_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Widgets_LIBRARIES}) + +set(QtCharts_deps QtCore QtGui QtWidgets) + +create_pyside_module(QtCharts + QtCharts_include_dirs + QtCharts_libraries + QtCharts_deps + QtCharts_SOURCE_DIR + QtCharts_SRC + "") diff --git a/sources/pyside2/PySide2/QtCharts/typesystem_charts.xml b/sources/pyside2/PySide2/QtCharts/typesystem_charts.xml new file mode 100644 index 0000000..ebcd09b --- /dev/null +++ b/sources/pyside2/PySide2/QtCharts/typesystem_charts.xml @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shiboken::Object::releaseOwnership(%PYARG_1); + + + + + Shiboken::Object::releaseOwnership(%PYARG_1); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtConcurrent/CMakeLists.txt b/sources/pyside2/PySide2/QtConcurrent/CMakeLists.txt new file mode 100644 index 0000000..4fb62ee --- /dev/null +++ b/sources/pyside2/PySide2/QtConcurrent/CMakeLists.txt @@ -0,0 +1,31 @@ +project(QtConcurrent) + +set(QtConcurrent_SRC +${QtConcurrent_GEN_DIR}/qtconcurrent_wrapper.cpp +# module is always needed +${QtConcurrent_GEN_DIR}/qtconcurrent_module_wrapper.cpp +) + +set(QtConcurrent_include_dirs ${QtConcurrent_SOURCE_DIR} + ${QtConcurrent_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Concurrent_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ) +set(QtConcurrent_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${QtConcurrent_LIBRARIES} + ) +set(QtConcurrent_deps QtCore) + +create_pyside_module(QtConcurrent + QtConcurrent_include_dirs + QtConcurrent_libraries + QtConcurrent_deps + QtConcurrent_SOURCE_DIR + QtConcurrent_SRC + "") diff --git a/sources/pyside2/PySide2/QtConcurrent/curr_errors.txt b/sources/pyside2/PySide2/QtConcurrent/curr_errors.txt new file mode 100644 index 0000000..827ebea --- /dev/null +++ b/sources/pyside2/PySide2/QtConcurrent/curr_errors.txt @@ -0,0 +1,21 @@ +Generating class model... [OK] +Generating enum model... [OK] +Generating namespace model... [WARNING] + enum 'QtConcurrent::ThreadFunctionResult' does not have a type entry or is not an enum + enum 'QtConcurrent::ReduceQueueThrottleLimit' does not have a type entry or is not an enum + + +Resolving typedefs... [OK] +Fixing class inheritance... [OK] +Detecting inconsistencies in class model... [OK] +[OK] + +Done, 2 warnings (506 known issues) +Scanning dependencies of target QtConcurrent +[ 21%] Building CXX object PySide/QtConcurrent/CMakeFiles/QtConcurrent.dir/PySide/QtConcurrent/qtconcurrent_module_wrapper.cpp.o +In file included from /Users/tismer/src/pyside-setup2/pyside_build/py3.4-qt5.4.2-64bit-debug/pyside/PySide/QtConcurrent/PySide/QtConcurrent/qtconcurrent_module_wrapper.cpp:30: +/Users/tismer/src/pyside-setup2/pyside_build/py3.4-qt5.4.2-64bit-debug/pyside/PySide/QtConcurrent/PySide/QtConcurrent/pyside_qtconcurrent_python.h:44:10: fatal error: + 'qtconcurrentexception.h' file not found +#include + ^ +1 error generated. diff --git a/sources/pyside2/PySide2/QtConcurrent/typesystem_concurrent.xml b/sources/pyside2/PySide2/QtConcurrent/typesystem_concurrent.xml new file mode 100644 index 0000000..bed9477 --- /dev/null +++ b/sources/pyside2/PySide2/QtConcurrent/typesystem_concurrent.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtCore/CMakeLists.txt b/sources/pyside2/PySide2/QtCore/CMakeLists.txt new file mode 100644 index 0000000..1d0b7d4 --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/CMakeLists.txt @@ -0,0 +1,196 @@ +project(QtCore) + +set(QtCore_gluecode "${QtCore_SOURCE_DIR}/glue/qeasingcurve_glue.cpp") + +if(ENABLE_WIN) + set(SPECIFIC_OS_FILES + ${QtCore_GEN_DIR}/qwineventnotifier_wrapper.cpp + ) +else() + set(SPECIFIC_OS_FILES "") +endif() + +set(QtCore_SRC +${QtCore_GEN_DIR}/qabstractanimation_wrapper.cpp +${QtCore_GEN_DIR}/qabstracteventdispatcher_timerinfo_wrapper.cpp +${QtCore_GEN_DIR}/qabstracteventdispatcher_wrapper.cpp +${QtCore_GEN_DIR}/qabstractitemmodel_wrapper.cpp +${QtCore_GEN_DIR}/qabstractlistmodel_wrapper.cpp +${QtCore_GEN_DIR}/qabstractproxymodel_wrapper.cpp +${QtCore_GEN_DIR}/qabstractstate_wrapper.cpp +${QtCore_GEN_DIR}/qabstracttablemodel_wrapper.cpp +${QtCore_GEN_DIR}/qabstracttransition_wrapper.cpp +${QtCore_GEN_DIR}/qanimationgroup_wrapper.cpp +${QtCore_GEN_DIR}/qbasicmutex_wrapper.cpp +${QtCore_GEN_DIR}/qbasictimer_wrapper.cpp +${QtCore_GEN_DIR}/qbitarray_wrapper.cpp +${QtCore_GEN_DIR}/qbuffer_wrapper.cpp +${QtCore_GEN_DIR}/qbytearray_wrapper.cpp +${QtCore_GEN_DIR}/qbytearraymatcher_wrapper.cpp +${QtCore_GEN_DIR}/qchildevent_wrapper.cpp +${QtCore_GEN_DIR}/qcollator_wrapper.cpp +${QtCore_GEN_DIR}/qcollatorsortkey_wrapper.cpp +${QtCore_GEN_DIR}/qcommandlineoption_wrapper.cpp +${QtCore_GEN_DIR}/qcommandlineparser_wrapper.cpp +${QtCore_GEN_DIR}/qcoreapplication_wrapper.cpp +${QtCore_GEN_DIR}/qcryptographichash_wrapper.cpp +${QtCore_GEN_DIR}/qdatastream_wrapper.cpp +${QtCore_GEN_DIR}/qdate_wrapper.cpp +${QtCore_GEN_DIR}/qdatetime_wrapper.cpp +${QtCore_GEN_DIR}/qdir_wrapper.cpp +${QtCore_GEN_DIR}/qdiriterator_wrapper.cpp +${QtCore_GEN_DIR}/qdynamicpropertychangeevent_wrapper.cpp +${QtCore_GEN_DIR}/qeasingcurve_wrapper.cpp +${QtCore_GEN_DIR}/qelapsedtimer_wrapper.cpp +${QtCore_GEN_DIR}/qevent_wrapper.cpp +${QtCore_GEN_DIR}/qeventloop_wrapper.cpp +${QtCore_GEN_DIR}/qeventtransition_wrapper.cpp +${QtCore_GEN_DIR}/qfactoryinterface_wrapper.cpp +${QtCore_GEN_DIR}/qfile_wrapper.cpp +${QtCore_GEN_DIR}/qfileselector_wrapper.cpp +${QtCore_GEN_DIR}/qfiledevice_wrapper.cpp +${QtCore_GEN_DIR}/qfileinfo_wrapper.cpp +${QtCore_GEN_DIR}/qfilesystemwatcher_wrapper.cpp +${QtCore_GEN_DIR}/qfinalstate_wrapper.cpp +${QtCore_GEN_DIR}/qgenericargument_wrapper.cpp +${QtCore_GEN_DIR}/qgenericreturnargument_wrapper.cpp +${QtCore_GEN_DIR}/qhistorystate_wrapper.cpp +${QtCore_GEN_DIR}/qidentityproxymodel_wrapper.cpp +${QtCore_GEN_DIR}/qiodevice_wrapper.cpp +${QtCore_GEN_DIR}/qjsonarray_wrapper.cpp +${QtCore_GEN_DIR}/qjsondocument_wrapper.cpp +${QtCore_GEN_DIR}/qjsonparseerror_wrapper.cpp +${QtCore_GEN_DIR}/qjsonvalue_wrapper.cpp +${QtCore_GEN_DIR}/qitemselection_wrapper.cpp +${QtCore_GEN_DIR}/qitemselectionmodel_wrapper.cpp +${QtCore_GEN_DIR}/qitemselectionrange_wrapper.cpp +${QtCore_GEN_DIR}/qlibraryinfo_wrapper.cpp +${QtCore_GEN_DIR}/qline_wrapper.cpp +${QtCore_GEN_DIR}/qlinef_wrapper.cpp +${QtCore_GEN_DIR}/qlocale_wrapper.cpp +${QtCore_GEN_DIR}/qlockfile_wrapper.cpp +${QtCore_GEN_DIR}/qmargins_wrapper.cpp +${QtCore_GEN_DIR}/qmarginsf_wrapper.cpp +${QtCore_GEN_DIR}/qmessageauthenticationcode_wrapper.cpp +${QtCore_GEN_DIR}/qmessagelogcontext_wrapper.cpp +${QtCore_GEN_DIR}/qmetaclassinfo_wrapper.cpp +${QtCore_GEN_DIR}/qmetaenum_wrapper.cpp +${QtCore_GEN_DIR}/qmetamethod_wrapper.cpp +${QtCore_GEN_DIR}/qmetaobject_connection_wrapper.cpp +${QtCore_GEN_DIR}/qmetaobject_wrapper.cpp +${QtCore_GEN_DIR}/qmetaproperty_wrapper.cpp +${QtCore_GEN_DIR}/qmimedata_wrapper.cpp +${QtCore_GEN_DIR}/qmimedatabase_wrapper.cpp +${QtCore_GEN_DIR}/qmimetype_wrapper.cpp +${QtCore_GEN_DIR}/qmodelindex_wrapper.cpp +${QtCore_GEN_DIR}/qmutex_wrapper.cpp +${QtCore_GEN_DIR}/qmutexlocker_wrapper.cpp +${QtCore_GEN_DIR}/qobject_wrapper.cpp +${QtCore_GEN_DIR}/qoperatingsystemversion_wrapper.cpp +${QtCore_GEN_DIR}/qparallelanimationgroup_wrapper.cpp +${QtCore_GEN_DIR}/qpauseanimation_wrapper.cpp +${QtCore_GEN_DIR}/qpersistentmodelindex_wrapper.cpp +${QtCore_GEN_DIR}/qpluginloader_wrapper.cpp +${QtCore_GEN_DIR}/qpoint_wrapper.cpp +${QtCore_GEN_DIR}/qpointf_wrapper.cpp +${QtCore_GEN_DIR}/qprocess_wrapper.cpp +${QtCore_GEN_DIR}/qprocessenvironment_wrapper.cpp +${QtCore_GEN_DIR}/qpropertyanimation_wrapper.cpp +${QtCore_GEN_DIR}/qrandomgenerator_wrapper.cpp +${QtCore_GEN_DIR}/qrandomgenerator64_wrapper.cpp +${QtCore_GEN_DIR}/qreadlocker_wrapper.cpp +${QtCore_GEN_DIR}/qreadwritelock_wrapper.cpp +${QtCore_GEN_DIR}/qrect_wrapper.cpp +${QtCore_GEN_DIR}/qrectf_wrapper.cpp +${QtCore_GEN_DIR}/qregexp_wrapper.cpp +${QtCore_GEN_DIR}/qregularexpression_wrapper.cpp +${QtCore_GEN_DIR}/qregularexpressionmatch_wrapper.cpp +${QtCore_GEN_DIR}/qregularexpressionmatchiterator_wrapper.cpp +${QtCore_GEN_DIR}/qresource_wrapper.cpp +${QtCore_GEN_DIR}/qrunnable_wrapper.cpp +${QtCore_GEN_DIR}/qsavefile_wrapper.cpp +${QtCore_GEN_DIR}/qsemaphore_wrapper.cpp +${QtCore_GEN_DIR}/qsemaphorereleaser_wrapper.cpp +${QtCore_GEN_DIR}/qsequentialanimationgroup_wrapper.cpp +${QtCore_GEN_DIR}/qsettings_wrapper.cpp +${QtCore_GEN_DIR}/qsignalblocker_wrapper.cpp +${QtCore_GEN_DIR}/qsignalmapper_wrapper.cpp +${QtCore_GEN_DIR}/qsignaltransition_wrapper.cpp +${QtCore_GEN_DIR}/qsize_wrapper.cpp +${QtCore_GEN_DIR}/qsizef_wrapper.cpp +${QtCore_GEN_DIR}/qsocketnotifier_wrapper.cpp +${QtCore_GEN_DIR}/qsortfilterproxymodel_wrapper.cpp +${QtCore_GEN_DIR}/qstate_wrapper.cpp +${QtCore_GEN_DIR}/qstandardpaths_wrapper.cpp +${QtCore_GEN_DIR}/qstatemachine_signalevent_wrapper.cpp +${QtCore_GEN_DIR}/qstatemachine_wrappedevent_wrapper.cpp +${QtCore_GEN_DIR}/qstatemachine_wrapper.cpp +${QtCore_GEN_DIR}/qstorageinfo_wrapper.cpp +${QtCore_GEN_DIR}/qstringlistmodel_wrapper.cpp +${QtCore_GEN_DIR}/qsysinfo_wrapper.cpp +${QtCore_GEN_DIR}/qsystemsemaphore_wrapper.cpp +${QtCore_GEN_DIR}/qt_wrapper.cpp +${QtCore_GEN_DIR}/qtemporarydir_wrapper.cpp +${QtCore_GEN_DIR}/qtemporaryfile_wrapper.cpp +${QtCore_GEN_DIR}/qtextboundaryfinder_wrapper.cpp +${QtCore_GEN_DIR}/qtextcodec_converterstate_wrapper.cpp +${QtCore_GEN_DIR}/qtextcodec_wrapper.cpp +${QtCore_GEN_DIR}/qtextdecoder_wrapper.cpp +${QtCore_GEN_DIR}/qtextencoder_wrapper.cpp +${QtCore_GEN_DIR}/qtextstream_wrapper.cpp +${QtCore_GEN_DIR}/qtextstreammanipulator_wrapper.cpp +${QtCore_GEN_DIR}/qthread_wrapper.cpp +${QtCore_GEN_DIR}/qthreadpool_wrapper.cpp +${QtCore_GEN_DIR}/qtime_wrapper.cpp +${QtCore_GEN_DIR}/qtimeline_wrapper.cpp +${QtCore_GEN_DIR}/qtimer_wrapper.cpp +${QtCore_GEN_DIR}/qtimerevent_wrapper.cpp +${QtCore_GEN_DIR}/qtimezone_wrapper.cpp +${QtCore_GEN_DIR}/qtimezone_offsetdata_wrapper.cpp +${QtCore_GEN_DIR}/qtranslator_wrapper.cpp +${QtCore_GEN_DIR}/qurl_wrapper.cpp +${QtCore_GEN_DIR}/qurlquery_wrapper.cpp +${QtCore_GEN_DIR}/quuid_wrapper.cpp +${QtCore_GEN_DIR}/qvariantanimation_wrapper.cpp +${QtCore_GEN_DIR}/qversionnumber_wrapper.cpp +${QtCore_GEN_DIR}/qwaitcondition_wrapper.cpp +${QtCore_GEN_DIR}/qwritelocker_wrapper.cpp +${QtCore_GEN_DIR}/qxmlstreamattribute_wrapper.cpp +${QtCore_GEN_DIR}/qxmlstreamattributes_wrapper.cpp +${QtCore_GEN_DIR}/qxmlstreamentitydeclaration_wrapper.cpp +${QtCore_GEN_DIR}/qxmlstreamentityresolver_wrapper.cpp +${QtCore_GEN_DIR}/qxmlstreamnamespacedeclaration_wrapper.cpp +${QtCore_GEN_DIR}/qxmlstreamnotationdeclaration_wrapper.cpp +${QtCore_GEN_DIR}/qxmlstreamreader_wrapper.cpp +${QtCore_GEN_DIR}/qxmlstreamwriter_wrapper.cpp + + +${SPECIFIC_OS_FILES} +# module is always needed +${QtCore_GEN_DIR}/qtcore_module_wrapper.cpp +) + +configure_file("${QtCore_SOURCE_DIR}/typesystem_core.xml.in" + "${QtCore_BINARY_DIR}/typesystem_core.xml" @ONLY) + +set(QtCore_include_dirs ${QtCore_SOURCE_DIR} + ${QtCore_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ) +set(QtCore_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Core_LIBRARIES} + ) +create_pyside_module(QtCore + QtCore_include_dirs + QtCore_libraries + "" + QtCore_SOURCE_DIR + QtCore_SRC + QtCore_gluecode + ${QtCore_BINARY_DIR}/typesystem_core.xml) + diff --git a/sources/pyside2/PySide2/QtCore/glue/qbytearray_bufferprotocol.cpp b/sources/pyside2/PySide2/QtCore/glue/qbytearray_bufferprotocol.cpp new file mode 100644 index 0000000..ed5fef3 --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/glue/qbytearray_bufferprotocol.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#if PY_VERSION_HEX < 0x03000000 + +// QByteArray buffer protocol functions +// see: http://www.python.org/dev/peps/pep-3118/ + +extern "C" { + +static Py_ssize_t SbkQByteArray_segcountproc(PyObject* self, Py_ssize_t* lenp) +{ + if (lenp) + *lenp = Py_TYPE(self)->tp_as_sequence->sq_length(self); + return 1; +} + +static Py_ssize_t SbkQByteArray_readbufferproc(PyObject* self, Py_ssize_t segment, void** ptrptr) +{ + if (segment || !Shiboken::Object::isValid(self)) + return -1; + + QByteArray* cppSelf = %CONVERTTOCPP[QByteArray*](self); + *ptrptr = reinterpret_cast(cppSelf->data()); + return cppSelf->size(); +} + +PyBufferProcs SbkQByteArrayBufferProc = { + /*bf_getreadbuffer*/ &SbkQByteArray_readbufferproc, + /*bf_getwritebuffer*/ (writebufferproc) &SbkQByteArray_readbufferproc, + /*bf_getsegcount*/ &SbkQByteArray_segcountproc, + /*bf_getcharbuffer*/ (charbufferproc) &SbkQByteArray_readbufferproc +}; + +} + +#endif diff --git a/sources/pyside2/PySide2/QtCore/glue/qbytearray_mgetitem.cpp b/sources/pyside2/PySide2/QtCore/glue/qbytearray_mgetitem.cpp new file mode 100644 index 0000000..9612f41 --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/glue/qbytearray_mgetitem.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +if (PyIndex_Check(_key)) { + Py_ssize_t _i; + _i = PyNumber_AsSsize_t(_key, PyExc_IndexError); + if (_i < 0 || _i >= %CPPSELF.size()) { + PyErr_SetString(PyExc_IndexError, "index out of bounds"); + return 0; + } else { + char res[2]; + res[0] = %CPPSELF.at(_i); + res[1] = 0; + return PyBytes_FromStringAndSize(res, 1); + } +} else if (PySlice_Check(_key)) { + Py_ssize_t start, stop, step, slicelength, cur; + +#ifdef IS_PY3K + PyObject *key = _key; +#else + PySliceObject *key = reinterpret_cast(_key); +#endif + if (PySlice_GetIndicesEx(key, %CPPSELF.count(), &start, &stop, &step, &slicelength) < 0) { + return NULL; + } + + QByteArray ba; + if (slicelength <= 0) { + return %CONVERTTOPYTHON[QByteArray](ba); + } else if (step == 1) { + Py_ssize_t max = %CPPSELF.count(); + start = qBound(Py_ssize_t(0), start, max); + stop = qBound(Py_ssize_t(0), stop, max); + QByteArray ba; + if (start < stop) + ba = %CPPSELF.mid(start, stop - start); + return %CONVERTTOPYTHON[QByteArray](ba); + } else { + QByteArray ba; + for (cur = start; slicelength > 0; cur += static_cast(step), slicelength--) { + ba.append(%CPPSELF.at(cur)); + } + return %CONVERTTOPYTHON[QByteArray](ba); + } +} else { + PyErr_Format(PyExc_TypeError, + "list indices must be integers or slices, not %.200s", + Py_TYPE(_key)->tp_name); + return NULL; +} diff --git a/sources/pyside2/PySide2/QtCore/glue/qbytearray_msetitem.cpp b/sources/pyside2/PySide2/QtCore/glue/qbytearray_msetitem.cpp new file mode 100644 index 0000000..1349f40 --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/glue/qbytearray_msetitem.cpp @@ -0,0 +1,158 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +if (PyIndex_Check(_key)) { + Py_ssize_t _i = PyNumber_AsSsize_t(_key, PyExc_IndexError); + if (_i == -1 && PyErr_Occurred()) + return -1; + + if (_i < 0) + _i += %CPPSELF.count(); + + if (_i < 0 || _i >= %CPPSELF.size()) { + PyErr_SetString(PyExc_IndexError, "QByteArray index out of range"); + return -1; + } + + // Provide more specific error message for bytes/str, bytearray, QByteArray respectively +#ifdef IS_PY3K + if (PyBytes_Check(_value)) { + if (Py_SIZE(_value) != 1) { + PyErr_SetString(PyExc_ValueError, "bytes must be of size 1"); +#else + if (PyString_CheckExact(_value)) { + if (Py_SIZE(_value) != 1) { + PyErr_SetString(PyExc_ValueError, "str must be of size 1"); +#endif + return -1; + } + } else if (PyByteArray_Check(_value)) { + if (Py_SIZE(_value) != 1) { + PyErr_SetString(PyExc_ValueError, "bytearray must be of size 1"); + return -1; + } + } else if (reinterpret_cast(Py_TYPE(_value)) == reinterpret_cast(SbkPySide2_QtCoreTypes[SBK_QBYTEARRAY_IDX])) { + if (PyObject_Length(_value) != 1) { + PyErr_SetString(PyExc_ValueError, "QByteArray must be of size 1"); + return -1; + } + } else { +#ifdef IS_PY3K + PyErr_SetString(PyExc_ValueError, "a bytes, bytearray, QByteArray of size 1 is required"); +#else + PyErr_SetString(PyExc_ValueError, "a str, bytearray, QByteArray of size 1 is required"); +#endif + return -1; + } + + // Not support int or long. + %CPPSELF.remove(_i, 1); + PyObject *args = Py_BuildValue("(nO)", _i, _value); + PyObject *result = Sbk_QByteArrayFunc_insert(self, args); + Py_DECREF(args); + Py_XDECREF(result); + return !result ? -1 : 0; +} else if (PySlice_Check(_key)) { + Py_ssize_t start, stop, step, slicelength, value_length; + +#ifdef IS_PY3K + PyObject *key = _key; +#else + PySliceObject *key = reinterpret_cast(_key); +#endif + if (PySlice_GetIndicesEx(key, %CPPSELF.count(), &start, &stop, &step, &slicelength) < 0) { + return -1; + } + // The parameter candidates are: bytes/str, bytearray, QByteArray itself. + // Not support iterable which contains ints between 0~255 + + // case 1: value is NULL, means delete the items within the range + // case 2: step is 1, means shrink or expanse + // case 3: step is not 1, then the number of slots have to equal the number of items in _value + QByteArray ba; + if (_value == NULL || _value == Py_None) { + ba = QByteArray(); + value_length = 0; + } else if (!(PyBytes_Check(_value) || PyByteArray_Check(_value) || reinterpret_cast(Py_TYPE(_value)) == reinterpret_cast(SbkPySide2_QtCoreTypes[SBK_QBYTEARRAY_IDX]))) { + PyErr_Format(PyExc_TypeError, "bytes, bytearray or QByteArray is required, not %.200s", Py_TYPE(_value)->tp_name); + return -1; + } else { + value_length = PyObject_Length(_value); + } + + if (step != 1 && value_length != slicelength) { + PyErr_Format(PyExc_ValueError, "attempt to assign %s of size %d to extended slice of size %d",Py_TYPE(_value)->tp_name, value_length, slicelength); + return -1; + } + + if (step != 1) { + int i = start; + for (int j = 0; j < slicelength; j++) { + PyObject *item = PyObject_GetItem(_value, PyLong_FromLong(j)); + QByteArray temp; +#ifdef IS_PY3K + if (PyLong_Check(item)) { +#else + if (PyLong_Check(item) || PyInt_Check(item)) { +#endif + int overflow; + long ival = PyLong_AsLongAndOverflow(item, &overflow); + // Not suppose to bigger than 255 because only bytes, bytearray, QByteArray were accept + const char *el = reinterpret_cast(&ival); + temp = QByteArray(el); + } else { + temp = %CONVERTTOCPP[QByteArray](item); + } + + %CPPSELF.replace(i, 1, temp); + i += step; + } + return 0; + } else { + ba = %CONVERTTOCPP[QByteArray](_value); + %CPPSELF.replace(start, slicelength, ba); + return 0; + } +} else { + PyErr_Format(PyExc_TypeError, "QBytearray indices must be integers or slices, not %.200s", + Py_TYPE(_key)->tp_name); + return -1; +} + + diff --git a/sources/pyside2/PySide2/QtCore/glue/qcoreapplication_init.cpp b/sources/pyside2/PySide2/QtCore/glue/qcoreapplication_init.cpp new file mode 100644 index 0000000..9bdaa01 --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/glue/qcoreapplication_init.cpp @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +static void QCoreApplicationConstructor(PyObject *self, PyObject *pyargv, QCoreApplicationWrapper **cptr) +{ + static int argc; + static char **argv; + PyObject *stringlist = PyTuple_GET_ITEM(pyargv, 0); + if (Shiboken::listToArgcArgv(stringlist, &argc, &argv, "PySideApp")) { + *cptr = new QCoreApplicationWrapper(argc, argv); + Shiboken::Object::releaseOwnership(reinterpret_cast(self)); + PySide::registerCleanupFunction(&PySide::destroyQCoreApplication); + } +} diff --git a/sources/pyside2/PySide2/QtCore/glue/qeasingcurve_glue.cpp b/sources/pyside2/PySide2/QtCore/glue/qeasingcurve_glue.cpp new file mode 100644 index 0000000..46a69be --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/glue/qeasingcurve_glue.cpp @@ -0,0 +1,159 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include + +#include "glue/qeasingcurve_glue.h" + +#define __ECF_ATT_NAME__ "__ecf__" +#define MAX_CUSTOM_FUNCTIONS 10 + +static void deleteData(void* data); + +struct CustomFunctionsData +{ + static CustomFunctionsData m_list[MAX_CUSTOM_FUNCTIONS]; + + PySideEasingCurveFunctor* m_obj; + QEasingCurve::EasingFunction m_func; +}; + +CustomFunctionsData CustomFunctionsData::m_list[MAX_CUSTOM_FUNCTIONS]; + +template +struct CustomFunctions +{ + static void init() + { + CustomFunctionsData data; + data.m_obj = 0; + data.m_func = &CustomFunctions::callback; + CustomFunctionsData::m_list[N] = data; + + CustomFunctions::init(); + } + + static qreal callback(qreal v) + { + return (*CustomFunctionsData::m_list[N].m_obj)(v); + } +}; + +template<> +struct CustomFunctions<0> +{ + static void init() + { + CustomFunctionsData data; + data.m_obj = 0; + data.m_func = &CustomFunctions<0>::callback; + CustomFunctionsData::m_list[0] = data; + } + + static qreal callback(qreal v) + { + return (*CustomFunctionsData::m_list[0].m_obj)(v); + } +}; + +void deleteData(void* data) +{ + delete (PySideEasingCurveFunctor*)(data); +} + +void PySideEasingCurveFunctor::init() +{ + CustomFunctions::init(); +} + +QEasingCurve::EasingFunction PySideEasingCurveFunctor::createCustomFuntion(PyObject* parent, PyObject* pyFunc) +{ + for(int i=0; i < MAX_CUSTOM_FUNCTIONS; i++) { + CustomFunctionsData& data = CustomFunctionsData::m_list[i]; + if (data.m_obj == 0) { + data.m_obj = new PySideEasingCurveFunctor(i, parent, pyFunc); + return data.m_func; + } + } + //PyErr_Format(PyExc_RuntimeError, "PySide only supports %d custom functions simultaneously.", MAX_CUSTOM_FUNCTIONS); + return 0; +} + +PySideEasingCurveFunctor::~PySideEasingCurveFunctor() +{ + + CustomFunctionsData::m_list[m_index].m_obj = 0; + PyObject_SetAttrString(m_parent, __ECF_ATT_NAME__, Py_None); +} + +qreal PySideEasingCurveFunctor::operator()(qreal progress) +{ + Shiboken::GilState state; + PyObject* args = Py_BuildValue("(f)", progress); + PyObject* result = PyObject_CallObject(m_func, args); + qreal cppResult = 0.0; + if (result) { + Shiboken::Conversions::pythonToCppCopy(Shiboken::Conversions::PrimitiveTypeConverter(), result, &cppResult); + Py_DECREF(result); + } + Py_DECREF(args); + return cppResult; +} + +PyObject* PySideEasingCurveFunctor::callable() +{ + Py_INCREF(m_func); + return m_func; +} + +PyObject* PySideEasingCurveFunctor::callable(PyObject* parent) +{ + return PyObject_GetAttrString(parent, __ECF_ATT_NAME__); +} + +PySideEasingCurveFunctor::PySideEasingCurveFunctor(int index, PyObject* parent, PyObject* pyFunc) + : m_parent(parent), m_func(pyFunc), m_index(index) +{ + PyObject_SetAttrString(m_parent, __ECF_ATT_NAME__, m_func); + PySide::WeakRef::create(m_parent, deleteData, this); +} + diff --git a/sources/pyside2/PySide2/QtCore/glue/qeasingcurve_glue.h b/sources/pyside2/PySide2/QtCore/glue/qeasingcurve_glue.h new file mode 100644 index 0000000..358ea9e --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/glue/qeasingcurve_glue.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef __QEASINGCURVE_GLUE__ +#define __QEASINGCURVE_GLUE__ + +#include +#include + +class PySideEasingCurveFunctor +{ + public: + static void init(); + static QEasingCurve::EasingFunction createCustomFuntion(PyObject* parent, PyObject* pyFunc); + + qreal operator()(qreal progress); + + PyObject* callable(); //Return New reference + static PyObject* callable(PyObject* parent); //Return New reference + + ~PySideEasingCurveFunctor(); + private: + PyObject* m_parent; + PyObject* m_func; + int m_index; + + PySideEasingCurveFunctor(int index, PyObject* parent, PyObject *pyFunc); +}; + +#endif diff --git a/sources/pyside2/PySide2/QtCore/glue/qobject_connect.cpp b/sources/pyside2/PySide2/QtCore/glue/qobject_connect.cpp new file mode 100644 index 0000000..20f3720 --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/glue/qobject_connect.cpp @@ -0,0 +1,227 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +static bool isDecorator(PyObject* method, PyObject* self) +{ + Shiboken::AutoDecRef methodName(PyObject_GetAttrString(method, "__name__")); + if (!PyObject_HasAttr(self, methodName)) + return true; + Shiboken::AutoDecRef otherMethod(PyObject_GetAttr(self, methodName)); + return PyMethod_GET_FUNCTION(otherMethod.object()) != PyMethod_GET_FUNCTION(method); +} + +static bool getReceiver(QObject *source, const char* signal, PyObject* callback, QObject** receiver, PyObject** self, QByteArray* callbackSig) +{ + bool forceGlobalReceiver = false; + if (PyMethod_Check(callback)) { + *self = PyMethod_GET_SELF(callback); + if (%CHECKTYPE[QObject*](*self)) + *receiver = %CONVERTTOCPP[QObject*](*self); + forceGlobalReceiver = isDecorator(callback, *self); + } else if (PyCFunction_Check(callback)) { + *self = PyCFunction_GET_SELF(callback); + if (*self && %CHECKTYPE[QObject*](*self)) + *receiver = %CONVERTTOCPP[QObject*](*self); + } else if (PyCallable_Check(callback)) { + // Ok, just a callable object + *receiver = 0; + *self = 0; + } + + bool usingGlobalReceiver = !*receiver || forceGlobalReceiver; + + // Check if this callback is a overwrite of a non-virtual Qt slot. + if (!usingGlobalReceiver && receiver && self) { + *callbackSig = PySide::Signal::getCallbackSignature(signal, *receiver, callback, usingGlobalReceiver).toLatin1(); + const QMetaObject* metaObject = (*receiver)->metaObject(); + int slotIndex = metaObject->indexOfSlot(callbackSig->constData()); + if (slotIndex != -1 && slotIndex < metaObject->methodOffset() && PyMethod_Check(callback)) + usingGlobalReceiver = true; + } + + if (usingGlobalReceiver) { + PySide::SignalManager& signalManager = PySide::SignalManager::instance(); + *receiver = signalManager.globalReceiver(source, callback); + *callbackSig = PySide::Signal::getCallbackSignature(signal, *receiver, callback, usingGlobalReceiver).toLatin1(); + } + + return usingGlobalReceiver; +} + +static bool qobjectConnect(QObject* source, const char* signal, QObject* receiver, const char* slot, Qt::ConnectionType type) +{ + if (!signal || !slot) + return false; + + if (!PySide::Signal::checkQtSignal(signal)) + return false; + signal++; + + if (!PySide::SignalManager::registerMetaMethod(source, signal, QMetaMethod::Signal)) + return false; + + bool isSignal = PySide::Signal::isQtSignal(slot); + slot++; + PySide::SignalManager::registerMetaMethod(receiver, slot, isSignal ? QMetaMethod::Signal : QMetaMethod::Slot); + bool connection; + Py_BEGIN_ALLOW_THREADS + connection = QObject::connect(source, signal - 1, receiver, slot - 1, type); + Py_END_ALLOW_THREADS + return connection; +} + +static bool qobjectConnect(QObject* source, QMetaMethod signal, QObject* receiver, QMetaMethod slot, Qt::ConnectionType type) +{ + return qobjectConnect(source, signal.methodSignature(), receiver, slot.methodSignature(), type); +} + +static bool qobjectConnectCallback(QObject* source, const char* signal, PyObject* callback, Qt::ConnectionType type) +{ + if (!signal || !PySide::Signal::checkQtSignal(signal)) + return false; + signal++; + + int signalIndex = PySide::SignalManager::registerMetaMethodGetIndex(source, signal, QMetaMethod::Signal); + if (signalIndex == -1) + return false; + + PySide::SignalManager& signalManager = PySide::SignalManager::instance(); + + // Extract receiver from callback + QObject* receiver = 0; + PyObject* self = 0; + QByteArray callbackSig; + bool usingGlobalReceiver = getReceiver(source, signal, callback, &receiver, &self, &callbackSig); + if (receiver == 0 && self == 0) + return false; + + const QMetaObject* metaObject = receiver->metaObject(); + const char* slot = callbackSig.constData(); + int slotIndex = metaObject->indexOfSlot(slot); + QMetaMethod signalMethod = metaObject->method(signalIndex); + + if (slotIndex == -1) { + if (!usingGlobalReceiver && self && !Shiboken::Object::hasCppWrapper((SbkObject*)self)) { + qWarning() << "You can't add dynamic slots on an object originated from C++."; + if (usingGlobalReceiver) + signalManager.releaseGlobalReceiver(source, receiver); + + return false; + } + + if (usingGlobalReceiver) + slotIndex = signalManager.globalReceiverSlotIndex(receiver, slot); + else + slotIndex = PySide::SignalManager::registerMetaMethodGetIndex(receiver, slot, QMetaMethod::Slot); + + if (slotIndex == -1) { + if (usingGlobalReceiver) + signalManager.releaseGlobalReceiver(source, receiver); + + return false; + } + } + bool connection; + Py_BEGIN_ALLOW_THREADS + connection = QMetaObject::connect(source, signalIndex, receiver, slotIndex, type); + Py_END_ALLOW_THREADS + if (connection) { + if (usingGlobalReceiver) + signalManager.notifyGlobalReceiver(receiver); + #ifndef AVOID_PROTECTED_HACK + source->connectNotify(signalMethod); //Qt5: QMetaMethod instead of char* + #else + // Need to cast to QObjectWrapper* and call the public version of + // connectNotify when avoiding the protected hack. + reinterpret_cast(source)->connectNotify(signalMethod); //Qt5: QMetaMethod instead of char* + #endif + + return connection; + } + + if (usingGlobalReceiver) + signalManager.releaseGlobalReceiver(source, receiver); + + return false; +} + + +static bool qobjectDisconnectCallback(QObject* source, const char* signal, PyObject* callback) +{ + if (!PySide::Signal::checkQtSignal(signal)) + return false; + + PySide::SignalManager& signalManager = PySide::SignalManager::instance(); + + // Extract receiver from callback + QObject* receiver = 0; + PyObject* self = 0; + QByteArray callbackSig; + QMetaMethod slotMethod; + bool usingGlobalReceiver = getReceiver(NULL, signal, callback, &receiver, &self, &callbackSig); + if (receiver == 0 && self == 0) + return false; + + const QMetaObject* metaObject = receiver->metaObject(); + int signalIndex = source->metaObject()->indexOfSignal(++signal); + int slotIndex = -1; + + slotIndex = metaObject->indexOfSlot(callbackSig); + slotMethod = metaObject->method(slotIndex); + + bool disconnected; + Py_BEGIN_ALLOW_THREADS + disconnected = QMetaObject::disconnectOne(source, signalIndex, receiver, slotIndex); + Py_END_ALLOW_THREADS + + if (disconnected) { + if (usingGlobalReceiver) + signalManager.releaseGlobalReceiver(source, receiver); + + #ifndef AVOID_PROTECTED_HACK + source->disconnectNotify(slotMethod); //Qt5: QMetaMethod instead of char* + #else + // Need to cast to QObjectWrapper* and call the public version of + // connectNotify when avoiding the protected hack. + reinterpret_cast(source)->disconnectNotify(slotMethod); //Qt5: QMetaMethod instead of char* + #endif + return true; + } + return false; +} diff --git a/sources/pyside2/PySide2/QtCore/glue/qobject_findchild.cpp b/sources/pyside2/PySide2/QtCore/glue/qobject_findchild.cpp new file mode 100644 index 0000000..b32d104 --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/glue/qobject_findchild.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +static QObject* _findChildHelper(const QObject* parent, const QString& name, PyTypeObject* desiredType) +{ + foreach(QObject* child, parent->children()) { + Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QObject*](child)); + if (PyType_IsSubtype(Py_TYPE(pyChild), desiredType) + && (name.isNull() || name == child->objectName())) { + return child; + } + } + + QObject* obj; + foreach(QObject* child, parent->children()) { + obj = _findChildHelper(child, name, desiredType); + if (obj) + return obj; + } + return 0; +} + +static inline bool _findChildrenComparator(const QObject*& child, const QRegExp& name) +{ + return name.indexIn(child->objectName()) != -1; +} + +static inline bool _findChildrenComparator(const QObject*& child, const QString& name) +{ + return name.isNull() || name == child->objectName(); +} + +template +static void _findChildrenHelper(const QObject* parent, const T& name, PyTypeObject* desiredType, PyObject* result) +{ + foreach(const QObject* child, parent->children()) { + Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QObject*](child)); + if (PyType_IsSubtype(Py_TYPE(pyChild), desiredType) && _findChildrenComparator(child, name)) + PyList_Append(result, pyChild); + _findChildrenHelper(child, name, desiredType, result); + } +} diff --git a/sources/pyside2/PySide2/QtCore/typesystem_core.xml.in b/sources/pyside2/PySide2/QtCore/typesystem_core.xml.in new file mode 100644 index 0000000..8be5bba --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/typesystem_core.xml.in @@ -0,0 +1,45 @@ + + + + + + diff --git a/sources/pyside2/PySide2/QtCore/typesystem_core_common.xml b/sources/pyside2/PySide2/QtCore/typesystem_core_common.xml new file mode 100644 index 0000000..cc9b5e5 --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/typesystem_core_common.xml @@ -0,0 +1,4426 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #include <pyside.h> + + + + + + + + + + + + + + + + + // qFatal doesn't have a stream version, so we do a + // qWarning call followed by a qFatal() call using a + // literal. + qWarning() << %1; + qFatal("[A qFatal() call was made from Python code]"); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + return PyBool_FromLong((bool)%in); + + + + %out = %OUTTYPE(%in == Py_True); + + + + + + + + + + return PyLong_FromLong(%in); + + + + %out = %OUTTYPE(PyLong_AsLong(%in)); + + + + + + + + return PyLong_FromUnsignedLong(%in); + + + + %out = %OUTTYPE(PyLong_AsUnsignedLong(%in)); + + + + + + + + return PyLong_FromLong(%in); + + + + %out = %OUTTYPE(PyLong_AsLong(%in)); + + + + + + + bool py2kStrCheck(PyObject *obj) + { + #ifdef IS_PY3K + return false; + #else + return PyString_Check(obj); + #endif + } + + + + + + + QByteArray ba = %in.toUtf8(); + PyObject *%out = PyUnicode_FromStringAndSize(ba.constData(), ba.size()); + return %out; + + + + #ifndef Py_LIMITED_API + Py_UNICODE* unicode = PyUnicode_AS_UNICODE(%in); + # if defined(Py_UNICODE_WIDE) + // cast as Py_UNICODE can be a different type + %out = QString::fromUcs4((const uint*)unicode); + # else + %out = QString::fromUtf16((const ushort*)unicode, PyUnicode_GET_SIZE(%in)); + # endif + #else + wchar_t *temp = PyUnicode_AsWideCharString(%in, NULL); + %out = QString::fromWCharArray(temp); + PyMem_Free(temp); + #endif + + + #ifndef IS_PY3K + const char* str = %CONVERTTOCPP[const char*](%in); + %out = %OUTTYPE(str); + #endif + + + %out = %OUTTYPE(); + + + + + + + + + const int N = %in.toString().length(); + wchar_t *str = new wchar_t[N]; + %in.toString().toWCharArray(str); + PyObject *%out = PyUnicode_FromWideChar(str, N); + delete[] str; + return %out; + + + + + + + wchar_t c = (wchar_t)%in.unicode(); + return PyUnicode_FromWideChar(&c, 1); + + + + char c = %CONVERTTOCPP[char](%in); + %out = %OUTTYPE(c); + + + int i = %CONVERTTOCPP[int](%in); + %out = %OUTTYPE(i); + + + %out = %OUTTYPE(); + + + + + + + + + if (!%in.isValid()) + Py_RETURN_NONE; + + if (qstrcmp(%in.typeName(), "QVariantList") == 0) { + QList<QVariant> var = %in.value<QVariantList>(); + return %CONVERTTOPYTHON[QList<QVariant>](var); + } + + if (qstrcmp(%in.typeName(), "QStringList") == 0) { + QStringList var = %in.value<QStringList>(); + return %CONVERTTOPYTHON[QList<QString>](var); + } + + if (qstrcmp(%in.typeName(), "QVariantMap") == 0) { + QMap<QString, QVariant> var = %in.value<QVariantMap>(); + return %CONVERTTOPYTHON[QMap<QString, QVariant>](var); + } + + Shiboken::Conversions::SpecificConverter converter(cppInRef.typeName()); + if (converter) { + void *ptr = cppInRef.data(); + return converter.toPython(ptr); + } + PyErr_Format(PyExc_RuntimeError, "Can't find converter for '%s'.", %in.typeName()); + return 0; + + + + %out = %OUTTYPE(%in == Py_True); + + + %out = %OUTTYPE(); + + + QString in = %CONVERTTOCPP[QString](%in); + %out = %OUTTYPE(in); + + + QByteArray in = %CONVERTTOCPP[QByteArray](%in); + %out = %OUTTYPE(in); + + + double in = %CONVERTTOCPP[double](%in); + %out = %OUTTYPE(in); + + + + qlonglong in = %CONVERTTOCPP[qlonglong](%in); + %out = %OUTTYPE(in); + + + qlonglong in = %CONVERTTOCPP[qlonglong](%in); + %out = %OUTTYPE(in); + + + int in = %CONVERTTOCPP[int](%in); + %out = %OUTTYPE(in); + + + // a class supported by QVariant? + int typeCode; + const char *typeName = QVariant_resolveMetaType(Py_TYPE(%in), &typeCode); + if (!typeCode || !typeName) + return; + QVariant var(typeCode, (void*)0); + Shiboken::Conversions::SpecificConverter converter(typeName); + converter.toCpp(pyIn, var.data()); + %out = var; + + + QVariant ret = QVariant_convertToVariantMap(%in); + %out = ret.isValid() ? ret : QVariant::fromValue<PySide::PyObjectWrapper>(%in); + + + QVariant ret = QVariant_convertToVariantList(%in); + %out = ret.isValid() ? ret : QVariant::fromValue<PySide::PyObjectWrapper>(%in); + + + // Is a shiboken type not known by Qt + %out = QVariant::fromValue<PySide::PyObjectWrapper>(%in); + + + + + + static const char *QVariant_resolveMetaType(PyTypeObject *type, int *typeId) + { + if (PyObject_TypeCheck(type, SbkObjectType_TypeF())) { + SbkObjectType* sbkType = (SbkObjectType*)type; + const char* typeName = Shiboken::ObjectType::getOriginalName(sbkType); + if (!typeName) + return 0; + bool valueType = '*' != typeName[qstrlen(typeName) - 1]; + // Do not convert user type of value + if (valueType && Shiboken::ObjectType::isUserType(type)) + return 0; + int obTypeId = QMetaType::type(typeName); + if (obTypeId) { + *typeId = obTypeId; + return typeName; + } + // Do not resolve types to value type + if (valueType) + return 0; + // Find in base types. First check tp_bases, and only after check tp_base, because + // tp_base does not always point to the first base class, but rather to the first + // that has added any python fields or slots to its object layout. + // See https://mail.python.org/pipermail/python-list/2009-January/520733.html + if (type->tp_bases) { + for (int i = 0; i < PyTuple_GET_SIZE(type->tp_bases); ++i) { + const char *derivedName = QVariant_resolveMetaType(reinterpret_cast<PyTypeObject *>(PyTuple_GET_ITEM( + type->tp_bases, i)), typeId); + if (derivedName) + return derivedName; + } + } + else if (type->tp_base) { + return QVariant_resolveMetaType(type->tp_base, typeId); + } + } + *typeId = 0; + return 0; + } + static QVariant QVariant_convertToValueList(PyObject *list) + { + if (PySequence_Size(list) < 0) { + // clear the error if < 0 which means no length at all + PyErr_Clear(); + return QVariant(); + } + + Shiboken::AutoDecRef element(PySequence_GetItem(list, 0)); + int typeId; + const char *typeName = QVariant_resolveMetaType(element.cast<PyTypeObject*>(), &typeId); + if (typeName) { + QByteArray listTypeName("QList<"); + listTypeName += typeName; + listTypeName += '>'; + typeId = QMetaType::type(listTypeName); + if (typeId > 0) { + Shiboken::Conversions::SpecificConverter converter(listTypeName); + if (converter) { + QVariant var(typeId, (void*)0); + converter.toCpp(list, &var); + return var; + } + qWarning() << "Type converter for :" << listTypeName << "not registered."; + } + } + return QVariant(); + } + static bool QVariant_isStringList(PyObject *list) + { + bool allString = true; + + if (PySequence_Check(list)) { + if (PySequence_Size(list) < 0) { + // clear the error if < 0 which means no length at all + PyErr_Clear(); + return false; + } + Shiboken::AutoDecRef fast(PySequence_Fast(list, "Failed to convert QVariantList")); + Py_ssize_t size = PySequence_Fast_GET_SIZE(fast.object()); + for (int i = 0; i < size; ++i) { + PyObject *item = PySequence_Fast_GET_ITEM(fast.object(), i); + if (!%CHECKTYPE[QString](item)) { + allString = false; + break; + } + } + } else { + // If it is not a list or a derived list class + // we assume that will not be a String list neither. + allString = false; + } + return allString; + } + static QVariant QVariant_convertToVariantMap(PyObject *map) + { + Py_ssize_t pos = 0; + Shiboken::AutoDecRef keys(PyDict_Keys(map)); + if (!QVariant_isStringList(keys)) + return QVariant(); + PyObject *key; + PyObject *value; + QMap<QString,QVariant> ret; + while (PyDict_Next(map, &pos, &key, &value)) { + QString cppKey = %CONVERTTOCPP[QString](key); + QVariant cppValue = %CONVERTTOCPP[QVariant](value); + ret.insert(cppKey, cppValue); + } + return QVariant(ret); + } + static QVariant QVariant_convertToVariantList(PyObject *list) + { + if (QVariant_isStringList(list)) { + QList<QString > lst = %CONVERTTOCPP[QList<QString>](list); + return QVariant(QStringList(lst)); + } + QVariant valueList = QVariant_convertToValueList(list); + if (valueList.isValid()) + return valueList; + + if (PySequence_Size(list) < 0) { + // clear the error if < 0 which means no length at all + PyErr_Clear(); + return QVariant(); + } + + QList<QVariant> lst; + Shiboken::AutoDecRef fast(PySequence_Fast(list, "Failed to convert QVariantList")); + Py_ssize_t size = PySequence_Fast_GET_SIZE(fast.object()); + for (int i = 0; i < size; ++i) { + PyObject *pyItem = PySequence_Fast_GET_ITEM(fast.object(), i); + QVariant item = %CONVERTTOCPP[QVariant](pyItem); + lst.append(item); + } + return QVariant(lst); + } + + + + + + const char *typeName = QVariant::typeToName(%in); + PyObject *%out; + PyTypeObject *pyType = nullptr; + if (typeName) + pyType = Shiboken::Conversions::getPythonTypeObject(typeName); + %out = pyType ? (reinterpret_cast<PyObject*>(pyType)) : Py_None; + Py_INCREF(%out); + return %out; + + + + %out = QVariant::Invalid; + + + const char *typeName; + if (Shiboken::String::checkType(reinterpret_cast<PyTypeObject *>(%in))) + typeName = "QString"; + else if (%in == reinterpret_cast<PyObject*>(&PyFloat_Type)) + typeName = "double"; // float is a UserType in QVariant. + else if (%in == reinterpret_cast<PyObject*>(&PyLong_Type)) + typeName = "int"; // long is a UserType in QVariant. + else if (Py_TYPE(%in) == SbkObjectType_TypeF()) + typeName = Shiboken::ObjectType::getOriginalName((SbkObjectType*)%in); + else + typeName = reinterpret_cast<PyTypeObject *>(%in)->tp_name; + %out = QVariant::nameToType(typeName); + + + %out = QVariant::nameToType(Shiboken::String::toCString(%in)); + + + %out = QVariant::nameToType("QVariantMap"); + + + %out = QVariantType_isStringList(%in) ? QVariant::StringList : QVariant::List; + + + + + + + + Shiboken::Conversions::registerConverterName(SbkPySide2_QtCoreTypeConverters[SBK_QTCORE_QMAP_QSTRING_QVARIANT_IDX], "QVariantMap"); + + + + static bool QVariantType_isStringList(PyObject *list) + { + bool allString = true; + Shiboken::AutoDecRef fast(PySequence_Fast(list, "Failed to convert QVariantList")); + Py_ssize_t size = PySequence_Fast_GET_SIZE(fast.object()); + for (int i=0; i < size; i++) { + PyObject *item = PySequence_Fast_GET_ITEM(fast.object(), i); + if (!%CHECKTYPE[QString](item)) { + allString = false; + break; + } + } + return allString; + } + static bool QVariantType_checkAllStringKeys(PyObject *dict) + { + Shiboken::AutoDecRef keys(PyDict_Keys(dict)); + return QVariantType_isStringList(keys); + } + + + + + + + + + + + + + + + + + + + + + + + + // The QVariantMap returned by QJsonObject seems to cause a segfault, so + // using QJsonObject.toVariantMap() won't work. + // Wrapping it in a QJsonValue first allows it to work + QJsonValue val(%in); + QVariant ret = val.toVariant(); + + return %CONVERTTOPYTHON[QVariant](ret); + + + + QVariant dict = QVariant_convertToVariantMap(%in); + QJsonValue val = QJsonValue::fromVariant(dict); + + %out = val.toObject(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PyObject *%out = PyTuple_New(2); + PyTuple_SET_ITEM(%out, 0, %CONVERTTOPYTHON[%INTYPE_0](%in.first)); + PyTuple_SET_ITEM(%out, 1, %CONVERTTOPYTHON[%INTYPE_1](%in.second)); + return %out; + + + + %out.first = %CONVERTTOCPP[%OUTTYPE_0](PySequence_Fast_GET_ITEM(%in, 0)); + %out.second = %CONVERTTOCPP[%OUTTYPE_1](PySequence_Fast_GET_ITEM(%in, 1)); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + double _abs = qAbs(%1); + %PYARG_0 = %CONVERTTOPYTHON[double](_abs); + + + + + namespace PySide { + static QStack<PyObject*> globalPostRoutineFunctions; + void globalPostRoutineCallback() + { + Shiboken::GilState state; + foreach(PyObject *callback, globalPostRoutineFunctions) { + Shiboken::AutoDecRef result(PyObject_CallObject(callback, NULL)); + Py_DECREF(callback); + } + globalPostRoutineFunctions.clear(); + } + void addPostRoutine(PyObject *callback) + { + if (PyCallable_Check(callback)) { + globalPostRoutineFunctions << callback; + Py_INCREF(callback); + } else { + PyErr_SetString(PyExc_TypeError, "qAddPostRoutine: The argument must be a callable object."); + } + } + } // namespace + + + + PySide::addPostRoutine(%1); + + + + qAddPostRoutine(PySide::globalPostRoutineCallback); + + + + QList<QByteArray> version = QByteArray(qVersion()).split('.'); + PyObject *pyQtVersion = PyTuple_New(3); + for (int i = 0; i < 3; ++i) + PyTuple_SET_ITEM(pyQtVersion, i, PyInt_FromLong(version[i].toInt())); + PyModule_AddObject(module, "__version_info__", pyQtVersion); + PyModule_AddStringConstant(module, "__version__", qVersion()); + + + + { // Avoid name clash + Shiboken::AutoDecRef regFunc((PyObject*)NULL); + Shiboken::AutoDecRef atexit(Shiboken::Module::import("atexit")); + if (atexit.isNull()) { + qWarning() << "Module atexit not found for registering __moduleShutdown"; + PyErr_Clear(); + }else{ + regFunc = PyObject_GetAttrString(atexit, "register"); + if (regFunc.isNull()) { + qWarning() << "Function atexit.register not found for registering __moduleShutdown"; + PyErr_Clear(); + } + } + if (!atexit.isNull() && !regFunc.isNull()){ + PyObject *shutDownFunc = PyObject_GetAttrString(module, "__moduleShutdown"); + Shiboken::AutoDecRef args(PyTuple_New(1)); + PyTuple_SET_ITEM(args, 0, shutDownFunc); + Shiboken::AutoDecRef retval(PyObject_Call(regFunc, args, 0)); + Q_ASSERT(!retval.isNull()); + } + } + + + + + PySide::runCleanupFunctions(); + + + + + + Shiboken::Conversions::registerConverterName(SbkPySide2_QtCoreTypeConverters[SBK_QSTRING_IDX], "unicode"); + Shiboken::Conversions::registerConverterName(SbkPySide2_QtCoreTypeConverters[SBK_QSTRING_IDX], "str"); + Shiboken::Conversions::registerConverterName(SbkPySide2_QtCoreTypeConverters[SBK_QTCORE_QLIST_QVARIANT_IDX], "QVariantList"); + + PySide::registerInternalQtConf(); + PySide::init(module); + Py_AtExit(QtCoreModuleExit); + + + + // Define a global variable to handle qInstallMessageHandler callback + static PyObject *qtmsghandler = nullptr; + + static void msgHandlerCallback(QtMsgType type, const QMessageLogContext &ctx, const QString &msg) + { + Shiboken::GilState state; + Shiboken::AutoDecRef arglist(PyTuple_New(3)); + PyTuple_SET_ITEM(arglist, 0, %CONVERTTOPYTHON[QtMsgType](type)); + PyTuple_SET_ITEM(arglist, 1, %CONVERTTOPYTHON[QMessageLogContext &](ctx)); + QByteArray array = msg.toLatin1().data(); + char *data = array.data(); + PyTuple_SET_ITEM(arglist, 2, %CONVERTTOPYTHON[char *](data)); + Shiboken::AutoDecRef ret(PyObject_CallObject(qtmsghandler, arglist)); + } + static void QtCoreModuleExit() + { + PySide::SignalManager::instance().clear(); + } + + + + if (%PYARG_1 == Py_None) { + qInstallMessageHandler(0); + %PYARG_0 = qtmsghandler ? qtmsghandler : Py_None; + qtmsghandler = 0; + } else if (!PyCallable_Check(%PYARG_1)) { + PyErr_SetString(PyExc_TypeError, "parameter must be callable"); + } else { + %PYARG_0 = qtmsghandler ? qtmsghandler : Py_None; + Py_INCREF(%PYARG_1); + qtmsghandler = %PYARG_1; + qInstallMessageHandler(msgHandlerCallback); + } + + if (%PYARG_0 == Py_None) + Py_INCREF(%PYARG_0); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + namespace PySide { + template<> inline uint hash(const QLine &v) { + return qHash(qMakePair(qMakePair(v.x1(), v.y1()), qMakePair(v.x2(), v.y2()))); + } + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QPointF p; + %RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &p); + %PYARG_0 = PyTuple_New(2); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](retval)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QPointF](p)); + + + + + + + Returns a read only buffer object pointing to the segment of data that this resource represents. If the resource is compressed the data returns is compressed and qUncompress() must be used to access the data. If the resource is a directory None is returned. + + + + + + const void *d = %CPPSELF.%FUNCTION_NAME(); + if (d) { + %PYARG_0 = Shiboken::Buffer::newObject(d, %CPPSELF.size()); + } else { + Py_INCREF(Py_None); + %PYARG_0 = Py_None; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %out = %OUTTYPE(); + + + int day = PyDateTime_GET_DAY(%in); + int month = PyDateTime_GET_MONTH(%in); + int year = PyDateTime_GET_YEAR(%in); + %out = %OUTTYPE(year, month, day); + + + + + + + + + + + + + + + + + + + + + + + + + + + if (!PyDateTimeAPI) + PySideDateTime_IMPORT; + %PYARG_0 = PyDate_FromDate(%CPPSELF.year(), %CPPSELF.month(), %CPPSELF.day()); + + + + + + + + + + + + + + + + + int year, month, day; + %BEGIN_ALLOW_THREADS + %CPPSELF.%FUNCTION_NAME(&year, &month, &day); + %END_ALLOW_THREADS + %PYARG_0 = PyTuple_New(3); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[int](year)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[int](month)); + PyTuple_SET_ITEM(%PYARG_0, 2, %CONVERTTOPYTHON[int](day)); + + + + + + + + + + + int yearNumber; + %BEGIN_ALLOW_THREADS + int week = %CPPSELF.%FUNCTION_NAME(&yearNumber); + %END_ALLOW_THREADS + %PYARG_0 = PyTuple_New(2); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[int](week)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[int](yearNumber)); + + + + + + + + + + + + + %out = %OUTTYPE(); + + + int day = PyDateTime_GET_DAY(%in); + int month = PyDateTime_GET_MONTH(%in); + int year = PyDateTime_GET_YEAR(%in); + int hour = PyDateTime_DATE_GET_HOUR(%in); + int min = PyDateTime_DATE_GET_MINUTE(%in); + int sec = PyDateTime_DATE_GET_SECOND(%in); + int usec = PyDateTime_DATE_GET_MICROSECOND(%in); + %out = %OUTTYPE(QDate(year, month, day), QTime(hour, min, sec, usec/1000)); + + + + + + + + + + + + + QDate date(%1, %2, %3); + QTime time(%4, %5, %6, %7); + %0 = new %TYPE(date, time, Qt::TimeSpec(%8)); + + + + + QDate date(%1, %2, %3); + QTime time(%4, %5, %6); + %0 = new %TYPE(date, time); + + + + + + + + + + + + + + + + + + + + + QDate date = %CPPSELF.date(); + QTime time = %CPPSELF.time(); + if (!PyDateTimeAPI) PySideDateTime_IMPORT; + %PYARG_0 = PyDateTime_FromDateAndTime(date.year(), date.month(), date.day(), time.hour(), time.minute(), time.second(), time.msec()*1000); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + namespace PySide { + template<> inline uint hash(const QPoint &v) { + return qHash(qMakePair(v.x(), v.y())); + } + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + namespace PySide { + template<> inline uint hash(const QRect &v) { + return qHash(qMakePair(qMakePair(v.x(), v.y()), qMakePair(v.width(), v.height()))); + } + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + namespace PySide { + template<> inline uint hash(const QSize &v) { + return qHash(qMakePair(v.width(), v.height())); + } + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %out = %OUTTYPE(); + + + int hour = PyDateTime_TIME_GET_HOUR(%in); + int min = PyDateTime_TIME_GET_MINUTE(%in); + int sec = PyDateTime_TIME_GET_SECOND(%in); + int usec = PyDateTime_TIME_GET_MICROSECOND(%in); + %out = %OUTTYPE(hour, min, sec, usec/1000); + + + + + + + + + + + + + + + + + + + + + + + + + + + if (!PyDateTimeAPI) + PySideDateTime_IMPORT; + %PYARG_0 = PyTime_FromTime(%CPPSELF.hour(), %CPPSELF.minute(), %CPPSELF.second(), %CPPSELF.msec()*1000); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + return %CPPSELF.size(); + + + + + if (_i < 0 || _i >= %CPPSELF.size()) { + PyErr_SetString(PyExc_IndexError, "index out of bounds"); + return 0; + } + bool ret = %CPPSELF.at(_i); + return %CONVERTTOPYTHON[bool](ret); + + + + + PyObject *args = Py_BuildValue("(iiO)", _i, 1, _value); + PyObject *result = Sbk_QBitArrayFunc_setBit(self, args); + Py_DECREF(args); + Py_XDECREF(result); + return !result ? -1 : 0; + + + + + + + + + + + + + + + + + + + + + + + + + + + + %CPPSELF.unlock(); + + + + + + + + + + + + + + %CPPSELF.unlock(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%1, %2, %PYARG_3); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + Creates a model index for the given row and column with the internal pointer ptr. + When using a QSortFilterProxyModel, its indexes have their own internal pointer. It is not advisable to access this internal pointer outside of the model. Use the data() function instead. + This function provides a consistent interface that model subclasses must use to create model indexes. + + .. warning:: Because of some Qt/Python itegration rules, the ptr argument do not get the reference incremented during the QModelIndex life time. So it is necessary to keep the object used on ptr argument alive during the whole process. Do not destroy the object if you are not sure about that. + + + + qRegisterMetaType<QVector<int> >("QVector<int>"); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // %FUNCTION_NAME() - disable generation of function call. + bool %0 = qobjectConnect(%1, %2, %CPPSELF, %3, %4); + %PYARG_0 = %CONVERTTOPYTHON[bool](%0); + + + + + + + + + // %FUNCTION_NAME() - disable generation of function call. + bool %0 = qobjectConnect(%1, %2, %3, %4, %5); + %PYARG_0 = %CONVERTTOPYTHON[bool](%0); + + + + + + + + // %FUNCTION_NAME() - disable generation of function call. + bool %0 = qobjectConnect(%1, %2, %3, %4, %5); + %PYARG_0 = %CONVERTTOPYTHON[bool](%0); + + + + + + + + + + // %FUNCTION_NAME() - disable generation of function call. + %RETURN_TYPE %0 = qobjectConnectCallback(%1, %2, %PYARG_3, %4); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + // %FUNCTION_NAME() - disable generation of function call. + %RETURN_TYPE %0 = qobjectConnectCallback(%CPPSELF, %1, %PYARG_2, %3); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + // %FUNCTION_NAME() - disable generation of function call. + %RETURN_TYPE %0 = qobjectConnect(%CPPSELF, %1, %2, %3, %4); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + %RETURN_TYPE %0 = PySide::SignalManager::instance().emitSignal(%CPPSELF, %1, %PYARG_2); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + // %FUNCTION_NAME() - disable generation of function call. + %RETURN_TYPE %0 = qobjectDisconnectCallback(%CPPSELF, %1, %2); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + // %FUNCTION_NAME() - disable generation of function call. + %RETURN_TYPE %0 = qobjectDisconnectCallback(%1, %2, %3); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + QObject *child = _findChildHelper(%CPPSELF, %2, (PyTypeObject*)%PYARG_1); + %PYARG_0 = %CONVERTTOPYTHON[QObject*](child); + + + + + + + + + + + %PYARG_0 = PyList_New(0); + _findChildrenHelper(%CPPSELF, %2, (PyTypeObject*)%PYARG_1, %PYARG_0); + + + + + + + + + + + %PYARG_0 = PyList_New(0); + _findChildrenHelper(%CPPSELF, %2, (PyTypeObject*)%PYARG_1, %PYARG_0); + + + + + + + + + + + + + + + + QString result; + if (QCoreApplication::instance()) { + PyObject *klass = PyObject_GetAttrString(%PYSELF, "__class__"); + PyObject *cname = PyObject_GetAttrString(klass, "__name__"); + result = QString(QCoreApplication::instance()->translate(Shiboken::String::toCString(cname), + /* %1, %2, QCoreApplication::CodecForTr, %3)); */ + %1, %2, %3)); + + Py_DECREF(klass); + Py_DECREF(cname); + } else { + result = QString(QString::fromLatin1(%1)); + } + %PYARG_0 = %CONVERTTOPYTHON[QString](result); + + + + + + // Avoid return +1 because SignalManager connect to "destroyed()" signal to control object timelife + int ret = %CPPSELF.%FUNCTION_NAME(%1); + if (ret > 0 && ((strcmp(%1, SIGNAL(destroyed())) == 0) || (strcmp(%1, SIGNAL(destroyed(QObject*))) == 0))) + ret -= PySide::SignalManager::instance().countConnectionsWith(%CPPSELF); + + %PYARG_0 = %CONVERTTOPYTHON[int](ret); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Replaces every occurrence of the regular expression in *sourceString* with *after*. + Returns a new Python string with the modified contents. For example: + + :: + + s = "Banana" + re = QRegExp("a[mn]") + s = re.replace(s, "ox") + # s == "Boxoxa" + + + For regular expressions containing capturing parentheses, occurrences of \1, \2, ..., in *after* + are replaced with rx.cap(1), cap(2), ... + + :: + + t = "A <i>bon mot</i>." + re = QRegExp("<i>([^<]*)</i>") + t = re.replace(t, "\\emph{\\1}") + # t == "A \\emph{bon mot}." + + + + %1.replace(*%CPPSELF, %2); + %PYARG_0 = %CONVERTTOPYTHON[QString](%1); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %out = %OUTTYPE(); + + + #ifdef IS_PY3K + %out = %OUTTYPE(PyBytes_AS_STRING(%in), PyBytes_GET_SIZE(%in)); + #else + %out = %OUTTYPE(Shiboken::String::toCString(%in), Shiboken::String::len(%in)); + #endif + + + %out = %OUTTYPE(PyByteArray_AsString(%in), PyByteArray_Size(%in)); + + + %out = %OUTTYPE(Shiboken::String::toCString(%in), Shiboken::String::len(%in)); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QByteArray ba = QByteArray(PyBytes_AS_STRING(%PYARG_1), PyBytes_GET_SIZE(%PYARG_1)) + *%CPPSELF; + %PYARG_0 = %CONVERTTOPYTHON[QByteArray](ba); + + + + + QByteArray ba = QByteArray(PyByteArray_AsString(%PYARG_1), PyByteArray_Size(%PYARG_1)) + *%CPPSELF; + %PYARG_0 = %CONVERTTOPYTHON[QByteArray](ba); + + + + + QByteArray ba = *%CPPSELF + QByteArray(PyByteArray_AsString(%PYARG_1), PyByteArray_Size(%PYARG_1)); + %PYARG_0 = %CONVERTTOPYTHON[QByteArray](ba); + + + + + *%CPPSELF += QByteArray(PyByteArray_AsString(%PYARG_1), PyByteArray_Size(%PYARG_1)); + + + + + if (PyUnicode_CheckExact(%PYARG_1)) { + Shiboken::AutoDecRef data(PyUnicode_AsASCIIString(%PYARG_1)); + QByteArray ba = QByteArray(PyBytes_AsString(data.object()), PyBytes_GET_SIZE(data.object())); + bool cppResult = %CPPSELF == ba; + %PYARG_0 = %CONVERTTOPYTHON[bool](cppResult); + } + + + + + if (PyUnicode_CheckExact(%PYARG_1)) { + Shiboken::AutoDecRef data(PyUnicode_AsASCIIString(%PYARG_1)); + QByteArray ba = QByteArray(PyBytes_AsString(data.object()), PyBytes_GET_SIZE(data.object())); + bool cppResult = %CPPSELF != ba; + %PYARG_0 = %CONVERTTOPYTHON[bool](cppResult); + } + + + + + if (PyUnicode_CheckExact(%PYARG_1)) { + Shiboken::AutoDecRef data(PyUnicode_AsASCIIString(%PYARG_1)); + QByteArray ba = QByteArray(PyBytes_AsString(data.object()), PyBytes_GET_SIZE(data.object())); + bool cppResult = %CPPSELF > ba; + %PYARG_0 = %CONVERTTOPYTHON[bool](cppResult); + } + + + + + if (PyUnicode_CheckExact(%PYARG_1)) { + Shiboken::AutoDecRef data(PyUnicode_AsASCIIString(%PYARG_1)); + QByteArray ba = QByteArray(PyBytes_AsString(data.object()), PyBytes_GET_SIZE(data.object())); + bool cppResult = %CPPSELF >= ba; + %PYARG_0 = %CONVERTTOPYTHON[bool](cppResult); + } + + + + + if (PyUnicode_CheckExact(%PYARG_1)) { + Shiboken::AutoDecRef data(PyUnicode_AsASCIIString(%PYARG_1)); + QByteArray ba = QByteArray(PyBytes_AsString(data.object()), PyBytes_GET_SIZE(data.object())); + bool cppResult = %CPPSELF < ba; + %PYARG_0 = %CONVERTTOPYTHON[bool](cppResult); + } + + + + + if (PyUnicode_CheckExact(%PYARG_1)) { + Shiboken::AutoDecRef data(PyUnicode_AsASCIIString(%PYARG_1)); + QByteArray ba = QByteArray(PyBytes_AsString(data.object()), PyBytes_GET_SIZE(data.object())); + bool cppResult = %CPPSELF <= ba; + %PYARG_0 = %CONVERTTOPYTHON[bool](cppResult); + } + + + + + + + PyObject *aux = PyBytes_FromStringAndSize(%CPPSELF.constData(), %CPPSELF.size()); + if (aux == NULL) { + return NULL; + } + QByteArray b(Py_TYPE(%PYSELF)->tp_name); + #ifdef IS_PY3K + %PYARG_0 = PyUnicode_FromFormat("%s(%R)", b.constData(), aux); + #else + aux = PyObject_Repr(aux); + b += "("; + b += QByteArray(PyBytes_AS_STRING(aux), PyBytes_GET_SIZE(aux)); + b += ")"; + %PYARG_0 = Shiboken::String::fromStringAndSize(b.constData(), b.size()); + #endif + Py_DECREF(aux); + + + + + + + + + + + + + + + if (PyBytes_Check(%PYARG_1)) { + %0 = new QByteArray(PyBytes_AsString(%PYARG_1), PyBytes_GET_SIZE(%PYARG_1)); + } else if (Shiboken::String::check(%PYARG_1)) { + %0 = new QByteArray(Shiboken::String::toCString(%PYARG_1), Shiboken::String::len(%PYARG_1)); + } + + + > + + %0 = new QByteArray(PyByteArray_AsString(%PYARG_1), PyByteArray_Size(%PYARG_1)); + + + + + %0 = new QByteArray(PyBytes_AS_STRING(%PYARG_1), PyBytes_GET_SIZE(%PYARG_1)); + + + + + + #if PY_VERSION_HEX < 0x03000000 + Shiboken::SbkType<QByteArray>()->tp_as_buffer = &SbkQByteArrayBufferProc; + Shiboken::SbkType<QByteArray>()->tp_flags |= Py_TPFLAGS_HAVE_GETCHARBUFFER; + #endif + + + + + %PYARG_0 = PyBytes_FromStringAndSize(%CPPSELF.%FUNCTION_NAME(), %CPPSELF.size()); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(PyBytes_AsString(%PYARG_1), PyBytes_GET_SIZE(%PYARG_1)); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + + + + + + + + + + + PyObject *aux = PyBytes_FromStringAndSize(%CPPSELF.constData(), %CPPSELF.size()); + if (aux == NULL) { + return NULL; + } + #ifdef IS_PY3K + %PYARG_0 = PyObject_Repr(aux); + Py_DECREF(aux); + #else + %PYARG_0 = aux; + #endif + + + + + return %CPPSELF.count(); + + + + + if (_i < 0 || _i >= %CPPSELF.size()) { + PyErr_SetString(PyExc_IndexError, "index out of bounds"); + return 0; + } else { + char res[2]; + res[0] = %CPPSELF.at(_i); + res[1] = 0; + return PyBytes_FromStringAndSize(res, 1); + } + + + + + + + + %CPPSELF.remove(_i, 1); + PyObject *args = Py_BuildValue("(nO)", _i, _value); + PyObject *result = Sbk_QByteArrayFunc_insert(self, args); + Py_DECREF(args); + Py_XDECREF(result); + return !result ? -1 : 0; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + uchar *ptr = reinterpret_cast<uchar*>(Shiboken::Buffer::getPointer(%PYARG_1)); + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(ptr); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + %PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(%1, %2, %3), %2, Shiboken::Buffer::ReadWrite); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QByteArray ba; + ba.resize(%2); + %CPPSELF.%FUNCTION_NAME(ba.data(), ba.size()); + %PYARG_0 = Shiboken::String::fromCString(ba.constData()); + + + + + + + + %RETURN_TYPE %out = 0; + if (PyBytes_Check(%PYARG_0)) { + %out = PyBytes_GET_SIZE((PyObject*)%PYARG_0); + memcpy(%1, PyBytes_AS_STRING((PyObject*)%PYARG_0), %out); + } else if (Shiboken::String::check(%PYARG_0)) { + %out = Shiboken::String::len((PyObject*)%PYARG_0); + memcpy(%1, Shiboken::String::toCString((PyObject*)%PYARG_0), %out); + } + + + + + + QByteArray ba; + ba.resize(%2); + %CPPSELF.%FUNCTION_NAME(ba.data(), ba.size()); + %PYARG_0 = Shiboken::String::fromCString(ba.constData()); + + + + + + + + %RETURN_TYPE %out = 0; + if (PyBytes_Check(%PYARG_0)) { + %out = PyBytes_GET_SIZE((PyObject*)%PYARG_0); + memcpy(%1, PyBytes_AS_STRING((PyObject*)%PYARG_0), %out); + } else if (Shiboken::String::check(%PYARG_0)) { + %out = Shiboken::String::len((PyObject*)%PYARG_0); + memcpy(%1, Shiboken::String::toCString((PyObject*)%PYARG_0), %out); + } + + + + + + + + + + + + %CPPSELF.%FUNCTION_NAME(Shiboken::String::toCString(%PYARG_1), Shiboken::String::len(%PYARG_1)); + + + + + + + + + + + + + + + + + + + + + + + + + %CPPSELF.unlock(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shiboken::AutoDecRef socket(%PYARG_1); + if (!socket.isNull()) { + // We use qintptr as PyLong, but we check for int + // since it is currently an alias to be Python2 compatible. + // Internally, ints are qlonglongs. + if (%CHECKTYPE[int](socket)) { + int cppSocket = %CONVERTTOCPP[int](socket); + qintptr socket = (qintptr)cppSocket; + %0 = new %TYPE(socket, %2, %3); + } else { + PyErr_SetString(PyExc_TypeError, + "QSocketNotifier: first argument (socket) must be an int."); + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Py_ssize_t size; + uchar *ptr = reinterpret_cast<uchar*>(Shiboken::Buffer::getPointer(%PYARG_1, &size)); + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(const_cast<const uchar*>(ptr), size); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + + + + + + + + + + + + // %FUNCTION_NAME() - disable generation of c++ function call + (void) %2; // remove warning about unused variable + Shiboken::AutoDecRef emptyTuple(PyTuple_New(0)); + PyObject *pyTimer = reinterpret_cast<PyTypeObject *>(Shiboken::SbkType<QTimer>())->tp_new(Shiboken::SbkType<QTimer>(), emptyTuple, 0); + reinterpret_cast<PyTypeObject *>(Shiboken::SbkType<QTimer>())->tp_init(pyTimer, emptyTuple, 0); + + QTimer* timer = %CONVERTTOCPP[QTimer*](pyTimer); + Shiboken::AutoDecRef result( + PyObject_CallMethod(pyTimer, + const_cast<char*>("connect"), + const_cast<char*>("OsOs"), + pyTimer, + SIGNAL(timeout()), + %PYARG_2, + %3) + ); + Shiboken::Object::releaseOwnership((SbkObject*)pyTimer); + Py_XDECREF(pyTimer); + timer->setSingleShot(true); + timer->connect(timer, SIGNAL(timeout()), timer, SLOT(deleteLater())); + timer->start(%1); + + + + + // %FUNCTION_NAME() - disable generation of c++ function call + Shiboken::AutoDecRef emptyTuple(PyTuple_New(0)); + PyObject *pyTimer = reinterpret_cast<PyTypeObject *>(Shiboken::SbkType<QTimer>())->tp_new(Shiboken::SbkType<QTimer>(), emptyTuple, 0); + reinterpret_cast<PyTypeObject *>(Shiboken::SbkType<QTimer>())->tp_init(pyTimer, emptyTuple, 0); + QTimer* timer = %CONVERTTOCPP[QTimer*](pyTimer); + timer->setSingleShot(true); + + if (PyObject_TypeCheck(%2, PySideSignalInstanceTypeF())) { + PySideSignalInstance *signalInstance = reinterpret_cast<PySideSignalInstance*>(%2); + Shiboken::AutoDecRef signalSignature(Shiboken::String::fromFormat("2%s", PySide::Signal::getSignature(signalInstance))); + Shiboken::AutoDecRef result( + PyObject_CallMethod(pyTimer, + const_cast<char*>("connect"), + const_cast<char*>("OsOO"), + pyTimer, + SIGNAL(timeout()), + PySide::Signal::getObject(signalInstance), + signalSignature.object()) + ); + } else { + Shiboken::AutoDecRef result( + PyObject_CallMethod(pyTimer, + const_cast<char*>("connect"), + const_cast<char*>("OsO"), + pyTimer, + SIGNAL(timeout()), + %PYARG_2) + ); + } + + timer->connect(timer, SIGNAL(timeout()), timer, SLOT(deleteLater()), Qt::DirectConnection); + Shiboken::Object::releaseOwnership((SbkObject*)pyTimer); + Py_XDECREF(pyTimer); + timer->start(%1); + + + + + + + + + + + + + + + + + + + + + + + + + + + qint64 pid; + %RETURN_TYPE retval = %TYPE::%FUNCTION_NAME(%1, %2, %3, &pid); + %PYARG_0 = PyTuple_New(2); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](retval)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[qint64](pid)); + + + + + + + long result; + #ifdef WIN32 + _PROCESS_INFORMATION *procInfo = %CPPSELF.%FUNCTION_NAME(); + result = procInfo ? procInfo->dwProcessId : 0; + #else + result = %CPPSELF.%FUNCTION_NAME(); + #endif + %PYARG_0 = %CONVERTTOPYTHON[long](result); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +.. class:: QCoreApplication(args) + + Constructs a Qt kernel application. Kernel applications are applications + without a graphical user interface. These type of applications are used + at the console or as server processes. + + The *args* argument is processed by the application, and made available + in a more convenient form by the :meth:`~QCoreApplication.arguments()` + method. + + + + QCoreApplicationConstructor(%PYSELF, args, &%0); + + + + + PyObject *empty = PyTuple_New(2); + if (!PyTuple_SetItem(empty, 0, PyList_New(0))) { + QCoreApplicationConstructor(%PYSELF, empty, &%0); + } + + + + + + + + + + + QCoreApplication *app = QCoreApplication::instance(); + PyObject *pyApp = Py_None; + if (app) { + pyApp = reinterpret_cast<PyObject*>( + Shiboken::BindingManager::instance().retrieveWrapper(app)); + if (!pyApp) + pyApp = %CONVERTTOPYTHON[QCoreApplication*](app); + // this will keep app live after python exit (extra ref) + } + // PYSIDE-571: make sure that we return the singleton "None" + if (pyApp == Py_None) + Py_DECREF(MakeSingletonQAppWrapper(0)); // here qApp and instance() diverge + %PYARG_0 = pyApp; + Py_XINCREF(%PYARG_0); + + + + + + + + + + + + + + + + + + + long *%out = new long; + %out = 0; + + + + + + %RETURN_TYPE %out = false; + if (PySequence_Check(%PYARG_0) && (PySequence_Size(%PYARG_0) == 2)) { + Shiboken::AutoDecRef pyResult(PySequence_GetItem(%PYARG_0, 0)); + %out = %CONVERTTOCPP[bool](pyResult); + } + + + + %PYARG_0 = PyTuple_New(2); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](%0)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[long](*result_out)); + delete result_out; + + + + + + + + + + + + + + + + + + + + + + .. warning:: QSettings.value can return different types (QVariant types) depending on the platform it's running on, so the safest way to use it is always casting the result to the desired type, e.g.: int(settings.value("myKey")) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QByteArray data; + data.resize(%2); + int result = %CPPSELF.%FUNCTION_NAME(data.data(), data.size()); + if (result == -1) { + Py_INCREF(Py_None); + %PYARG_0 = Py_None; + } else { + %PYARG_0 = PyBytes_FromStringAndSize(data.data(), result); + } + + + + + + + + int r = %CPPSELF.%FUNCTION_NAME(%1, Shiboken::String::len(%PYARG_1)); + %PYARG_0 = %CONVERTTOPYTHON[int](r); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QString &res = *%0; + %PYARG_0 = %CONVERTTOPYTHON[QString](res); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shiboken::Object::releaseOwnership(%PYARG_0); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + for (int counter = 0; counter < %CPPSELF.animationCount(); ++counter ) { + QAbstractAnimation *animation = %CPPSELF.animationAt(counter); + PyObject *obj = %CONVERTTOPYTHON[QAbstractAnimation*](animation); + Shiboken::Object::setParent(NULL, obj); + Py_DECREF(obj); + } + %CPPSELF.clear(); + + + + + + + + + + + + + + PySideEasingCurveFunctor::init(); + + + + + QEasingCurve::EasingFunction func = PySideEasingCurveFunctor::createCustomFuntion(%PYSELF, %PYARG_1); + if (func) + %CPPSELF.%FUNCTION_NAME(func); + + + + + //%FUNCTION_NAME() + %PYARG_0 = PySideEasingCurveFunctor::callable(%PYSELF); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <code>machine = QStateMachine() + +s1 = QState() +s11 = QState(s1) +s12 = QState(s1) + +s1h = QHistoryState(s1) +s1h.setDefaultState(s11) + +machine.addState(s1) + +s2 = QState() +machine.addState(s2) + +button = QPushButton() +# Clicking the button will cause the state machine to enter the child state +# that s1 was in the last time s1 was exited, or the history state's default +# state if s1 has never been entered. +s1.addTransition(button.clicked, s1h)</code> + + + + + + + + + + + + + + + + + + + + + + + if (PyObject_TypeCheck(%1, PySideSignalInstanceTypeF())) { + PyObject *dataSource = PySide::Signal::getObject((PySideSignalInstance*)%PYARG_1); + Shiboken::AutoDecRef obType(PyObject_Type(dataSource)); + QObject* sender = %CONVERTTOCPP[QObject*](dataSource); + if (sender) { + const char*dataSignature = PySide::Signal::getSignature((PySideSignalInstance*)%PYARG_1); + QByteArray signature(dataSignature); // Append SIGNAL flag (2) + %0 = new QSignalTransitionWrapper(sender,"2" + signature,%2); + } + } + + + + + + + + + + + + + + + + + + + QString signalName(%2); + if (PySide::SignalManager::registerMetaMethod(%1, signalName.mid(1).toLatin1().data(), QMetaMethod::Signal)) { + QSignalTransition *%0 = %CPPSELF->addTransition(%1, %2, %3); + %PYARG_0 = %CONVERTTOPYTHON[QSignalTransition*](%0); + } else { + Py_INCREF(Py_None); + %PYARG_0 = Py_None; + } + + + + + + + + + + + + + + + // Obviously the label used by the following goto is a very awkward solution, + // since it refers to a name very tied to the generator implementation. + // Check bug #362 for more information on this + // http://bugs.openbossa.org/show_bug.cgi?id=362 + if (!PyObject_TypeCheck(%1, PySideSignalInstanceTypeF())) + goto Sbk_%TYPEFunc_%FUNCTION_NAME_TypeError; + PySideSignalInstance *signalInstance = reinterpret_cast<PySideSignalInstance*>(%1); + QObject* sender = %CONVERTTOCPP[QObject*](PySide::Signal::getObject(signalInstance)); + QSignalTransition *%0 = %CPPSELF->%FUNCTION_NAME(sender, PySide::Signal::getSignature(signalInstance),%2); + %PYARG_0 = %CONVERTTOPYTHON[QSignalTransition*](%0); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %PYARG_0 = PySet_New(0); + foreach(QAbstractState *abs_state, %CPPSELF.configuration()) { + Shiboken::AutoDecRef obj(%CONVERTTOPYTHON[QAbstractState*](abs_state)); + Shiboken::Object::setParent(self, obj); + PySet_Add(%PYARG_0, obj); + } + + + + + + + + %PYARG_0 = PyList_New(0); + foreach(QAbstractAnimation *abs_anim, %CPPSELF.defaultAnimations()) { + Shiboken::AutoDecRef obj(%CONVERTTOPYTHON[QAbstractAnimation*](abs_anim)); + Shiboken::Object::setParent(self, obj); + PyList_Append(%PYARG_0, obj); + } + + + + + + + + + + + + + + + + + + + %PYARG_0 = Shiboken::String::fromFormat("2%s",QMetaObject::normalizedSignature(%1).constData()); + + + + + + %PYARG_0 = Shiboken::String::fromFormat("1%s",QMetaObject::normalizedSignature(%1).constData()); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QT_BEGIN_NAMESPACE + extern bool + qRegisterResourceData(int, + const unsigned char *, + const unsigned char *, + const unsigned char *); + + extern bool + qUnregisterResourceData(int, + const unsigned char *, + const unsigned char *, + const unsigned char *); + QT_END_NAMESPACE + + + + %RETURN_TYPE %0 = %FUNCTION_NAME(%1, reinterpret_cast<uchar*>(PyBytes_AS_STRING(%PYARG_2)), + reinterpret_cast<uchar*>(PyBytes_AS_STRING(%PYARG_3)), + reinterpret_cast<uchar*>(PyBytes_AS_STRING(%PYARG_4))); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + %RETURN_TYPE %0 = %FUNCTION_NAME(%1, reinterpret_cast<uchar*>(PyBytes_AS_STRING(%PYARG_2)), + reinterpret_cast<uchar*>(PyBytes_AS_STRING(%PYARG_3)), + reinterpret_cast<uchar*>(PyBytes_AS_STRING(%PYARG_4))); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtCore/typesystem_core_mac.xml b/sources/pyside2/PySide2/QtCore/typesystem_core_mac.xml new file mode 100644 index 0000000..583c1c0 --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/typesystem_core_mac.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtCore/typesystem_core_win.xml b/sources/pyside2/PySide2/QtCore/typesystem_core_win.xml new file mode 100644 index 0000000..4101872 --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/typesystem_core_win.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + #ifdef IS_PY3K + return PyCapsule_New(%in, 0, 0); + #else + return PyCObject_FromVoidPtr(%in, 0); + #endif + + + + %out = 0; + + + #ifdef IS_PY3K + %out = (%OUTTYPE)PyCapsule_GetPointer(%in, 0); + #else + %out = (%OUTTYPE)PyCObject_AsVoidPtr(%in); + #endif + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtCore/typesystem_core_x11.xml b/sources/pyside2/PySide2/QtCore/typesystem_core_x11.xml new file mode 100644 index 0000000..d5b0bae --- /dev/null +++ b/sources/pyside2/PySide2/QtCore/typesystem_core_x11.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtDataVisualization/CMakeLists.txt b/sources/pyside2/PySide2/QtDataVisualization/CMakeLists.txt new file mode 100644 index 0000000..e61a702 --- /dev/null +++ b/sources/pyside2/PySide2/QtDataVisualization/CMakeLists.txt @@ -0,0 +1,70 @@ +project(QtDataVisualization) + +set(QtDataVisualization_SRC +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qabstract3daxis_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qcategory3daxis_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qlogvalue3daxisformatter_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qvalue3daxis_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qvalue3daxisformatter_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qabstract3dseries_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qabstractdataproxy_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qbar3dseries_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qbardataitem_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qbardataproxy_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qcustom3ditem_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qcustom3dlabel_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qcustom3dvolume_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qheightmapsurfacedataproxy_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qitemmodelbardataproxy_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qitemmodelscatterdataproxy_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qitemmodelsurfacedataproxy_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qscatter3dseries_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qscatterdataitem_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qscatterdataproxy_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qsurface3dseries_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qsurfacedataitem_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qsurfacedataproxy_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_q3dbars_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_q3dcamera_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_q3dlight_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_q3dobject_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_q3dscatter_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_q3dscene_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_q3dsurface_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qabstract3dgraph_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_q3dinputhandler_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qabstract3dinputhandler_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_qtouch3dinputhandler_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_q3dtheme_wrapper.cpp +${QtDataVisualization_GEN_DIR}/qtdatavisualization_wrapper.cpp +# module is always needed +${QtDataVisualization_GEN_DIR}/qtdatavisualization_module_wrapper.cpp +) + +set(QtDataVisualization_include_dirs ${QtDataVisualization_SOURCE_DIR} + ${QtDataVisualization_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5DataVisualization_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR}) + +set(QtDataVisualization_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5DataVisualization_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES}) + +set(QtDataVisualization_deps QtCore QtGui) + +create_pyside_module(QtDataVisualization + QtDataVisualization_include_dirs + QtDataVisualization_libraries + QtDataVisualization_deps + QtDataVisualization_SOURCE_DIR + QtDataVisualization_SRC + "") diff --git a/sources/pyside2/PySide2/QtDataVisualization/typesystem_datavisualization.xml b/sources/pyside2/PySide2/QtDataVisualization/typesystem_datavisualization.xml new file mode 100644 index 0000000..d2018ff --- /dev/null +++ b/sources/pyside2/PySide2/QtDataVisualization/typesystem_datavisualization.xml @@ -0,0 +1,465 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shiboken::Object::releaseOwnership(%PYARG_1); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shiboken::Object::releaseOwnership(%PYARG_1); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shiboken::Object::releaseOwnership(%PYARG_1); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shiboken::Object::releaseOwnership(%PYARG_1); + + + + + + + + Shiboken::Object::releaseOwnership(%PYARG_1); + + + + + + + + Shiboken::Object::releaseOwnership(%PYARG_1); + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtGui/CMakeLists.txt b/sources/pyside2/PySide2/QtGui/CMakeLists.txt new file mode 100644 index 0000000..1fe743c --- /dev/null +++ b/sources/pyside2/PySide2/QtGui/CMakeLists.txt @@ -0,0 +1,250 @@ +project(QtGui) + +qt5_wrap_cpp(QPYTEXTOBJECT_MOC "${pyside2_SOURCE_DIR}/qpytextobject.h") + +set(QtGui_OPTIONAL_SRC) +set(QtGui_DROPPED_ENTRIES) + +check_qt_class(QtGui QOpenGLTimeMonitor QtGui_OPTIONAL_SRC QtGui_DROPPED_ENTRIES) +check_qt_class(QtGui QOpenGLTimerQuery QtGui_OPTIONAL_SRC QtGui_DROPPED_ENTRIES) + +set(QtGui_SRC +${QtGui_GEN_DIR}/qabstractopenglfunctions_wrapper.cpp +${QtGui_GEN_DIR}/qabstracttextdocumentlayout_paintcontext_wrapper.cpp +${QtGui_GEN_DIR}/qabstracttextdocumentlayout_selection_wrapper.cpp +${QtGui_GEN_DIR}/qabstracttextdocumentlayout_wrapper.cpp +${QtGui_GEN_DIR}/qaccessible_wrapper.cpp +${QtGui_GEN_DIR}/qaccessibleeditabletextinterface_wrapper.cpp +${QtGui_GEN_DIR}/qaccessibleevent_wrapper.cpp +${QtGui_GEN_DIR}/qaccessibleobject_wrapper.cpp +${QtGui_GEN_DIR}/qaccessiblestatechangeevent_wrapper.cpp +${QtGui_GEN_DIR}/qaccessibletablecellinterface_wrapper.cpp +${QtGui_GEN_DIR}/qaccessibletablemodelchangeevent_wrapper.cpp +${QtGui_GEN_DIR}/qaccessibletextcursorevent_wrapper.cpp +${QtGui_GEN_DIR}/qaccessibletextinsertevent_wrapper.cpp +${QtGui_GEN_DIR}/qaccessibletextinterface_wrapper.cpp +${QtGui_GEN_DIR}/qaccessibletextremoveevent_wrapper.cpp +${QtGui_GEN_DIR}/qaccessibletextselectionevent_wrapper.cpp +${QtGui_GEN_DIR}/qaccessibletextupdateevent_wrapper.cpp +${QtGui_GEN_DIR}/qaccessiblevaluechangeevent_wrapper.cpp +${QtGui_GEN_DIR}/qaccessiblevalueinterface_wrapper.cpp +${QtGui_GEN_DIR}/qactionevent_wrapper.cpp +${QtGui_GEN_DIR}/qbackingstore_wrapper.cpp +${QtGui_GEN_DIR}/qbitmap_wrapper.cpp +${QtGui_GEN_DIR}/qbrush_wrapper.cpp +${QtGui_GEN_DIR}/qclipboard_wrapper.cpp +${QtGui_GEN_DIR}/qcloseevent_wrapper.cpp +${QtGui_GEN_DIR}/qcolor_wrapper.cpp +${QtGui_GEN_DIR}/qconicalgradient_wrapper.cpp +${QtGui_GEN_DIR}/qcontextmenuevent_wrapper.cpp +${QtGui_GEN_DIR}/qcursor_wrapper.cpp +${QtGui_GEN_DIR}/qdesktopservices_wrapper.cpp +${QtGui_GEN_DIR}/qdoublevalidator_wrapper.cpp +${QtGui_GEN_DIR}/qdrag_wrapper.cpp +${QtGui_GEN_DIR}/qdragenterevent_wrapper.cpp +${QtGui_GEN_DIR}/qdragleaveevent_wrapper.cpp +${QtGui_GEN_DIR}/qdragmoveevent_wrapper.cpp +${QtGui_GEN_DIR}/qdropevent_wrapper.cpp +${QtGui_GEN_DIR}/qenterevent_wrapper.cpp +${QtGui_GEN_DIR}/qexposeevent_wrapper.cpp +${QtGui_GEN_DIR}/qfileopenevent_wrapper.cpp +${QtGui_GEN_DIR}/qfocusevent_wrapper.cpp +${QtGui_GEN_DIR}/qfont_wrapper.cpp +${QtGui_GEN_DIR}/qfontdatabase_wrapper.cpp +${QtGui_GEN_DIR}/qfontinfo_wrapper.cpp +${QtGui_GEN_DIR}/qfontmetrics_wrapper.cpp +${QtGui_GEN_DIR}/qfontmetricsf_wrapper.cpp +${QtGui_GEN_DIR}/qgradient_wrapper.cpp +${QtGui_GEN_DIR}/qguiapplication_wrapper.cpp +${QtGui_GEN_DIR}/qhelpevent_wrapper.cpp +${QtGui_GEN_DIR}/qhideevent_wrapper.cpp +${QtGui_GEN_DIR}/qhoverevent_wrapper.cpp +${QtGui_GEN_DIR}/qicon_wrapper.cpp +${QtGui_GEN_DIR}/qicondragevent_wrapper.cpp +${QtGui_GEN_DIR}/qiconengine_availablesizesargument_wrapper.cpp +${QtGui_GEN_DIR}/qiconengine_wrapper.cpp +${QtGui_GEN_DIR}/qimage_wrapper.cpp +${QtGui_GEN_DIR}/qimageiohandler_wrapper.cpp +${QtGui_GEN_DIR}/qimagereader_wrapper.cpp +${QtGui_GEN_DIR}/qimagewriter_wrapper.cpp +${QtGui_GEN_DIR}/qinputevent_wrapper.cpp +${QtGui_GEN_DIR}/qinputmethod_wrapper.cpp +${QtGui_GEN_DIR}/qinputmethodevent_attribute_wrapper.cpp +${QtGui_GEN_DIR}/qinputmethodevent_wrapper.cpp +${QtGui_GEN_DIR}/qinputmethodqueryevent_wrapper.cpp +${QtGui_GEN_DIR}/qintvalidator_wrapper.cpp +${QtGui_GEN_DIR}/qkeyevent_wrapper.cpp +${QtGui_GEN_DIR}/qkeysequence_wrapper.cpp +${QtGui_GEN_DIR}/qlineargradient_wrapper.cpp +${QtGui_GEN_DIR}/qmatrix_wrapper.cpp +${QtGui_GEN_DIR}/qmatrix2x2_wrapper.cpp +${QtGui_GEN_DIR}/qmatrix2x3_wrapper.cpp +${QtGui_GEN_DIR}/qmatrix2x4_wrapper.cpp +${QtGui_GEN_DIR}/qmatrix3x2_wrapper.cpp +${QtGui_GEN_DIR}/qmatrix3x3_wrapper.cpp +${QtGui_GEN_DIR}/qmatrix3x4_wrapper.cpp +${QtGui_GEN_DIR}/qmatrix4x2_wrapper.cpp +${QtGui_GEN_DIR}/qmatrix4x3_wrapper.cpp +${QtGui_GEN_DIR}/qmatrix4x4_wrapper.cpp +${QtGui_GEN_DIR}/qmouseevent_wrapper.cpp +${QtGui_GEN_DIR}/qmoveevent_wrapper.cpp +${QtGui_GEN_DIR}/qmovie_wrapper.cpp +${QtGui_GEN_DIR}/qnativegestureevent_wrapper.cpp +${QtGui_GEN_DIR}/qoffscreensurface_wrapper.cpp +${QtGui_GEN_DIR}/qopenglcontextgroup_wrapper.cpp +${QtGui_GEN_DIR}/qopengldebuglogger_wrapper.cpp +${QtGui_GEN_DIR}/qopengldebugmessage_wrapper.cpp +${QtGui_GEN_DIR}/qopenglextrafunctions_wrapper.cpp +${QtGui_GEN_DIR}/qopenglframebufferobjectformat_wrapper.cpp +${QtGui_GEN_DIR}/qopenglfunctions_wrapper.cpp +# Compile error on Windows: ${QtGui_GEN_DIR}/qopenglpaintdevice_wrapper.cpp +${QtGui_GEN_DIR}/qopenglpixeltransferoptions_wrapper.cpp +${QtGui_GEN_DIR}/qopenglshaderprogram_wrapper.cpp +${QtGui_GEN_DIR}/qopengltexture_wrapper.cpp +${QtGui_GEN_DIR}/qopengltextureblitter_wrapper.cpp +${QtGui_GEN_DIR}/qopenglversionprofile_wrapper.cpp +${QtGui_GEN_DIR}/qopenglvertexarrayobject_wrapper.cpp +${QtGui_GEN_DIR}/qopenglvertexarrayobject_binder_wrapper.cpp +${QtGui_GEN_DIR}/qopenglwindow_wrapper.cpp +${QtGui_GEN_DIR}/qpagedpaintdevice_margins_wrapper.cpp +${QtGui_GEN_DIR}/qpagedpaintdevice_wrapper.cpp +${QtGui_GEN_DIR}/qpagelayout_wrapper.cpp +${QtGui_GEN_DIR}/qpagesize_wrapper.cpp +${QtGui_GEN_DIR}/qpaintdevice_wrapper.cpp +${QtGui_GEN_DIR}/qpaintdevicewindow_wrapper.cpp +${QtGui_GEN_DIR}/qpaintengine_wrapper.cpp +${QtGui_GEN_DIR}/qpaintenginestate_wrapper.cpp +${QtGui_GEN_DIR}/qpainter_pixmapfragment_wrapper.cpp +${QtGui_GEN_DIR}/qpainter_wrapper.cpp +${QtGui_GEN_DIR}/qpainterpath_element_wrapper.cpp +${QtGui_GEN_DIR}/qpainterpath_wrapper.cpp +${QtGui_GEN_DIR}/qpainterpathstroker_wrapper.cpp +${QtGui_GEN_DIR}/qpaintevent_wrapper.cpp +${QtGui_GEN_DIR}/qpalette_wrapper.cpp +${QtGui_GEN_DIR}/qpdfwriter_wrapper.cpp +${QtGui_GEN_DIR}/qpen_wrapper.cpp +${QtGui_GEN_DIR}/qpicture_wrapper.cpp +${QtGui_GEN_DIR}/qpictureio_wrapper.cpp +${QtGui_GEN_DIR}/qpixmap_wrapper.cpp +${QtGui_GEN_DIR}/qpixmapcache_key_wrapper.cpp +${QtGui_GEN_DIR}/qpixmapcache_wrapper.cpp +${QtGui_GEN_DIR}/qpixelformat_wrapper.cpp +${QtGui_GEN_DIR}/qpointingdeviceuniqueid_wrapper.cpp +${QtGui_GEN_DIR}/qpolygon_wrapper.cpp +${QtGui_GEN_DIR}/qpolygonf_wrapper.cpp +${QtGui_GEN_DIR}/qpytextobject_wrapper.cpp +${QtGui_GEN_DIR}/qquaternion_wrapper.cpp +${QtGui_GEN_DIR}/qradialgradient_wrapper.cpp +${QtGui_GEN_DIR}/qregexpvalidator_wrapper.cpp +${QtGui_GEN_DIR}/qregion_wrapper.cpp +${QtGui_GEN_DIR}/qresizeevent_wrapper.cpp +${QtGui_GEN_DIR}/qsessionmanager_wrapper.cpp +${QtGui_GEN_DIR}/qshortcutevent_wrapper.cpp +${QtGui_GEN_DIR}/qshowevent_wrapper.cpp +${QtGui_GEN_DIR}/qstandarditem_wrapper.cpp +${QtGui_GEN_DIR}/qstandarditemmodel_wrapper.cpp +${QtGui_GEN_DIR}/qstatustipevent_wrapper.cpp +${QtGui_GEN_DIR}/qopenglbuffer_wrapper.cpp +${QtGui_GEN_DIR}/qopenglcontext_wrapper.cpp +${QtGui_GEN_DIR}/qaccessible_state_wrapper.cpp +${QtGui_GEN_DIR}/qaccessibleinterface_wrapper.cpp +${QtGui_GEN_DIR}/qscreen_wrapper.cpp +${QtGui_GEN_DIR}/qopenglshader_wrapper.cpp +#${QtGui_GEN_DIR}/qopenglshaderprogram_wrapper.cpp +${QtGui_GEN_DIR}/qopenglframebufferobject_wrapper.cpp +${QtGui_GEN_DIR}/qrasterwindow_wrapper.cpp +${QtGui_GEN_DIR}/qrawfont_wrapper.cpp +${QtGui_GEN_DIR}/qscrollevent_wrapper.cpp +${QtGui_GEN_DIR}/qscrollprepareevent_wrapper.cpp +${QtGui_GEN_DIR}/qstatictext_wrapper.cpp +${QtGui_GEN_DIR}/qstylehints_wrapper.cpp +${QtGui_GEN_DIR}/qsurface_wrapper.cpp +${QtGui_GEN_DIR}/qsurfaceformat_wrapper.cpp +${QtGui_GEN_DIR}/qsyntaxhighlighter_wrapper.cpp +${QtGui_GEN_DIR}/qtabletevent_wrapper.cpp +${QtGui_GEN_DIR}/qtextblock_iterator_wrapper.cpp +${QtGui_GEN_DIR}/qtextblock_wrapper.cpp +${QtGui_GEN_DIR}/qtextblockformat_wrapper.cpp +${QtGui_GEN_DIR}/qtextblockgroup_wrapper.cpp +${QtGui_GEN_DIR}/qtextblockuserdata_wrapper.cpp +${QtGui_GEN_DIR}/qtextcharformat_wrapper.cpp +${QtGui_GEN_DIR}/qtextcursor_wrapper.cpp +${QtGui_GEN_DIR}/qtextdocument_wrapper.cpp +${QtGui_GEN_DIR}/qtextdocumentfragment_wrapper.cpp +${QtGui_GEN_DIR}/qtextdocumentwriter_wrapper.cpp +${QtGui_GEN_DIR}/qtextformat_wrapper.cpp +${QtGui_GEN_DIR}/qtextfragment_wrapper.cpp +${QtGui_GEN_DIR}/qtextframe_iterator_wrapper.cpp +${QtGui_GEN_DIR}/qtextframe_wrapper.cpp +${QtGui_GEN_DIR}/qtextframeformat_wrapper.cpp +${QtGui_GEN_DIR}/qtextimageformat_wrapper.cpp +${QtGui_GEN_DIR}/qtextinlineobject_wrapper.cpp +${QtGui_GEN_DIR}/qtextitem_wrapper.cpp +${QtGui_GEN_DIR}/qtextlayout_formatrange_wrapper.cpp +${QtGui_GEN_DIR}/qtextlayout_wrapper.cpp +${QtGui_GEN_DIR}/qtextlength_wrapper.cpp +${QtGui_GEN_DIR}/qtextline_wrapper.cpp +${QtGui_GEN_DIR}/qtextlist_wrapper.cpp +${QtGui_GEN_DIR}/qtextlistformat_wrapper.cpp +${QtGui_GEN_DIR}/qtextobject_wrapper.cpp +${QtGui_GEN_DIR}/qtextobjectinterface_wrapper.cpp +${QtGui_GEN_DIR}/qtextoption_tab_wrapper.cpp +${QtGui_GEN_DIR}/qtextoption_wrapper.cpp +${QtGui_GEN_DIR}/qtexttable_wrapper.cpp +${QtGui_GEN_DIR}/qtexttablecell_wrapper.cpp +${QtGui_GEN_DIR}/qtexttablecellformat_wrapper.cpp +${QtGui_GEN_DIR}/qtexttableformat_wrapper.cpp +${QtGui_GEN_DIR}/qtoolbarchangeevent_wrapper.cpp +${QtGui_GEN_DIR}/qtouchdevice_wrapper.cpp +${QtGui_GEN_DIR}/qtouchevent_touchpoint_wrapper.cpp +${QtGui_GEN_DIR}/qtouchevent_wrapper.cpp +${QtGui_GEN_DIR}/qtransform_wrapper.cpp +${QtGui_GEN_DIR}/qvalidator_wrapper.cpp +${QtGui_GEN_DIR}/qvector2d_wrapper.cpp +${QtGui_GEN_DIR}/qvector3d_wrapper.cpp +${QtGui_GEN_DIR}/qvector4d_wrapper.cpp +${QtGui_GEN_DIR}/qwhatsthisclickedevent_wrapper.cpp +${QtGui_GEN_DIR}/qwheelevent_wrapper.cpp +${QtGui_GEN_DIR}/qwindow_wrapper.cpp +${QtGui_GEN_DIR}/qwindowstatechangeevent_wrapper.cpp +${QtGui_OPTIONAL_SRC} +# module is always needed +${QtGui_GEN_DIR}/qtgui_module_wrapper.cpp +) + +configure_file("${QtGui_SOURCE_DIR}/typesystem_gui.xml.in" + "${QtGui_BINARY_DIR}/typesystem_gui.xml" @ONLY) + +configure_file("${QtGui_SOURCE_DIR}/QtGui_global.post.h.in" + "${QtGui_BINARY_DIR}/QtGui_global.post.h" @ONLY) + +set(QtGui_include_dirs ${QtGui_SOURCE_DIR} + ${QtGui_BINARY_DIR} + ${pyside2_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ) +set(QtGui_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Gui_LIBRARIES}) +set(QtGui_deps QtCore) + +create_pyside_module(QtGui + QtGui_include_dirs + QtGui_libraries + QtGui_deps + QtGui_SOURCE_DIR + QtGui_SRC + QPYTEXTOBJECT_MOC + ${QtGui_BINARY_DIR}/typesystem_gui.xml + "" + "" + QtGui_DROPPED_ENTRIES) + +install(FILES ${pyside2_SOURCE_DIR}/qpytextobject.h DESTINATION include/PySide2/QtGui/) + diff --git a/sources/pyside2/PySide2/QtGui/QtGui_global.post.h.in b/sources/pyside2/PySide2/QtGui/QtGui_global.post.h.in new file mode 100644 index 0000000..6d3a3ee --- /dev/null +++ b/sources/pyside2/PySide2/QtGui/QtGui_global.post.h.in @@ -0,0 +1 @@ +#include "qpytextobject.h" // PySide class diff --git a/sources/pyside2/PySide2/QtGui/glue/qguiapplication_init.cpp b/sources/pyside2/PySide2/QtGui/glue/qguiapplication_init.cpp new file mode 100644 index 0000000..ae5dd22 --- /dev/null +++ b/sources/pyside2/PySide2/QtGui/glue/qguiapplication_init.cpp @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +static void QGuiApplicationConstructor(PyObject *self, PyObject *pyargv, QGuiApplicationWrapper **cptr) +{ + static int argc; + static char **argv; + PyObject *stringlist = PyTuple_GET_ITEM(pyargv, 0); + if (Shiboken::listToArgcArgv(stringlist, &argc, &argv, "PySideApp")) { + *cptr = new QGuiApplicationWrapper(argc, argv, 0); + Shiboken::Object::releaseOwnership(reinterpret_cast(self)); + PySide::registerCleanupFunction(&PySide::destroyQCoreApplication); + } +} diff --git a/sources/pyside2/PySide2/QtGui/typesystem_gui.xml.in b/sources/pyside2/PySide2/QtGui/typesystem_gui.xml.in new file mode 100644 index 0000000..dfd5a9c --- /dev/null +++ b/sources/pyside2/PySide2/QtGui/typesystem_gui.xml.in @@ -0,0 +1,46 @@ + + + + + + + diff --git a/sources/pyside2/PySide2/QtGui/typesystem_gui_common.xml b/sources/pyside2/PySide2/QtGui/typesystem_gui_common.xml new file mode 100644 index 0000000..70fd169 --- /dev/null +++ b/sources/pyside2/PySide2/QtGui/typesystem_gui_common.xml @@ -0,0 +1,3745 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + return PyLong_FromVoidPtr(reinterpret_cast<void *>(%in)); + + + + %out = reinterpret_cast<%OUTTYPE>(PyLong_AsVoidPtr(%in)); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QTransform _result; + if (QTransform::quadToQuad(%1, %2, _result)) { + %PYARG_0 = %CONVERTTOPYTHON[QTransform](_result); + } else { + Py_INCREF(Py_None); + %PYARG_0 = Py_None; + } + + + + + QTransform _result; + if (QTransform::quadToSquare(%1, _result)) { + %PYARG_0 = %CONVERTTOPYTHON[QTransform](_result); + } else { + Py_INCREF(Py_None); + %PYARG_0 = Py_None; + } + + + + + + QTransform _result; + if (QTransform::squareToQuad(%1, _result)) { + %PYARG_0 = %CONVERTTOPYTHON[QTransform](_result); + } else { + Py_INCREF(Py_None); + %PYARG_0 = Py_None; + } + + + + + + + + + + + + + + + + + uchar *buffer = reinterpret_cast<uchar*>(Shiboken::Buffer::getPointer(%PYARG_2)); + QBitmap %0 = QBitmap::fromData(%1, buffer, %3); + %PYARG_0 = %CONVERTTOPYTHON[QBitmap](%0); + + + + + + + + + + + + + + + + + + + + + %BEGIN_ALLOW_THREADS + %RETURN_TYPE %0 = %CPPSELF->::%TYPE::%FUNCTION_NAME(&%1, %2); + %END_ALLOW_THREADS + %PYARG_0 = PyTuple_New(2); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](%0)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[%ARG1_TYPE](%1)); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + if (_i < 0 || _i >= %CPPSELF.count()) { + PyErr_SetString(PyExc_IndexError, "index out of bounds"); + return 0; + } + int item = (*%CPPSELF)[_i]; + return %CONVERTTOPYTHON[int](item); + + + + + + + + + + + + + + + + + + %PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.data(), %CPPSELF.size()); + + + + + + + PyObject *%out = Shiboken::Buffer::newObject(%in, size); + + + Py_ssize_t bufferLen; + char *%out = reinterpret_cast<char*>(Shiboken::Buffer::getPointer(%PYARG_1, &bufferLen)); + + + + + + uint %out = bufferLen; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + const QTextDocument *doc = %CPPSELF.document(); + if (doc) { + Shiboken::AutoDecRef pyDocument(%CONVERTTOPYTHON[QTextDocument*](doc)); + Shiboken::Object::setParent(pyDocument, %PYARG_1); + } + + + + + + + + const QTextDocument *doc = %CPPSELF.document(); + if (doc) { + Shiboken::AutoDecRef pyDocument(%CONVERTTOPYTHON[QTextDocument*](doc)); + Shiboken::Object::setParent(pyDocument, %PYARG_0); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PyObject *points = PyList_New(%CPPSELF.count()); + for (int i = 0, max = %CPPSELF.count(); i < max; ++i){ + int x, y; + %CPPSELF.point(i, &x, &y); + QPoint pt = QPoint(x, y); + PyList_SET_ITEM(points, i, %CONVERTTOPYTHON[QPoint](pt)); + } + + + + + + + + + + + + + + // %FUNCTION_NAME() + *%CPPSELF << %1; + %PYARG_0 = %CONVERTTOPYTHON[QPolygon*](%CPPSELF); + + + + + // %FUNCTION_NAME() + *%CPPSELF << %1; + %PYARG_0 = %CONVERTTOPYTHON[QPolygon*](%CPPSELF); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %0 = new %TYPE(QPixmap::fromImage(%1)); + + + + + + + + + + + + + + + + + + + const uchar *%out = reinterpret_cast<const uchar*>(PyBytes_AS_STRING(%PYARG_1)); + + + + + + uint %out = static_cast<uint>(PyBytes_Size(%PYARG_1)); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(), %CPPSELF.byteCount()); + + + + + // byteCount() is only available on Qt4.7, so we use bytesPerLine * height + %PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(), %CPPSELF.bytesPerLine() * %CPPSELF.height(), Shiboken::Buffer::ReadWrite); + + + + + %PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(%1), %CPPSELF.bytesPerLine()); + + + + + + + + %PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(%1), %CPPSELF.bytesPerLine(), Shiboken::Buffer::ReadWrite); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shiboken::AutoDecRef func(PyObject_GetAttr(%PYSELF, PyTuple_GET_ITEM(%1, 0))); + PyObject *args = PyTuple_GET_ITEM(%1, 1); + %PYARG_0 = PyObject_Call(func, args, NULL); + + + + + switch(%CPPSELF.spec()) { + case QColor::Rgb: + { + qreal r, g, b, a; + %CPPSELF.getRgbF(&r, &g, &b, &a); + %PYARG_0 = Py_BuildValue("(ON(s(ffff)))", Py_TYPE(%PYSELF), PyTuple_New(0), "setRgbF", (float)r, (float)g, (float)b, (float)a); + break; + } + case QColor::Hsv: + { + qreal h, s, v, a; + %CPPSELF.getHsvF(&h, &s, &v, &a); + %PYARG_0 = Py_BuildValue("(ON(s(ffff)))", Py_TYPE(%PYSELF), PyTuple_New(0), "setHsvF", (float)h, (float)s, (float)v, (float)a); + break; + } + case QColor::Cmyk: + { + qreal c, m, y, k, a; + %CPPSELF.getCmykF(&c, &m, &y, &k, &a); + %PYARG_0 = Py_BuildValue("(ON(s(fffff)))", Py_TYPE(%PYSELF), PyTuple_New(0), "setCmykF", (float)c, (float)m, (float)y, (float)k, (float)a); + break; + } + #if QT_VERSION >= 0x040600 + case QColor::Hsl: + { + qreal h, s, l, a; + %CPPSELF.getHslF(&h, &s, &l, &a); + %PYARG_0 = Py_BuildValue("(ON(s(ffff)))", Py_TYPE(%PYSELF), PyTuple_New(0), "setHslF", (float)h, (float)s, (float)l, (float)a); + break; + } + #endif + default: + { + %PYARG_0 = Py_BuildValue("(N(O))", PyObject_Type(%PYSELF), Py_None); + } + } + + + + + + switch(%CPPSELF.spec()) { + case QColor::Rgb: + { + int r, g, b, a; + %CPPSELF.getRgb(&r, &g, &b, &a); + %PYARG_0 = Py_BuildValue("iiii", r, g, b, a); + break; + } + case QColor::Hsv: + { + int h, s, v, a; + %CPPSELF.getHsv(&h, &s, &v, &a); + %PYARG_0 = Py_BuildValue("iiii", h, s, v, a); + break; + } + case QColor::Cmyk: + { + int c, m, y, k, a; + %CPPSELF.getCmyk(&c, &m, &y, &k, &a); + %PYARG_0 = Py_BuildValue("iiiii", c, m, y, k, a); + break; + } + case QColor::Hsl: + { + int h, s, l, a; + %CPPSELF.getHsl(&h, &s, &l, &a); + %PYARG_0 = Py_BuildValue("iiii", h, s, l, a); + break; + } + default: + { + %PYARG_0 = 0; + } + } + + + + + + + + + + if (%1.type() == QVariant::Color) + %0 = new %TYPE(%1.value<QColor>()); + else + PyErr_SetString(PyExc_TypeError, "QVariant must be holding a QColor"); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + int *array = nullptr; + bool errorOccurred = false; + + if (numArgs == 5) { + array = Shiboken::sequenceToIntArray(%PYARG_5, true); + if (PyErr_Occurred()) { + if (array) + delete []array; + errorOccurred = true; + } + } + + if (!errorOccurred) { + %RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, array); + + if (array) + delete []array; + + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](retval); + } + + + + + + + + + int *array = nullptr; + bool errorOccurred = false; + + if (numArgs == 4) { + array = Shiboken::sequenceToIntArray(%PYARG_4, true); + if (PyErr_Occurred()) { + if (array) + delete []array; + errorOccurred = true; + } + } + + if (!errorOccurred) { + %RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, array); + + if (array) + delete []array; + + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](retval); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + int *array = nullptr; + bool errorOccurred = false; + + if (numArgs == 8) { + array = Shiboken::sequenceToIntArray(%PYARG_8, true); + if (PyErr_Occurred()) { + if (array) + delete []array; + errorOccurred = true; + } + } + + if (!errorOccurred) { + %RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, %5, %6, %7, array); + + if (array) + delete []array; + + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](retval); + } + + + + + + + + + int *array = nullptr; + bool errorOccurred = false; + + if (numArgs == 5) { + array = Shiboken::sequenceToIntArray(%PYARG_5, true); + if (PyErr_Occurred()) { + if (array) + delete []array; + errorOccurred = true; + } + } + + if (!errorOccurred) { + %RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, %4, array); + + if (array) + delete []array; + + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](retval); + } + + + + + + + + + int *array = nullptr; + bool errorOccurred = false; + + if (numArgs == 4) { + array = Shiboken::sequenceToIntArray(%PYARG_4, true); + if (PyErr_Occurred()) { + if (array) + delete []array; + errorOccurred = true; + } + } + + if (!errorOccurred) { + %RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(%1, %2, %3, array); + + if (array) + delete []array; + + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](retval); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QPixmap p; + if (%CPPSELF.%FUNCTION_NAME(%1, &p)) { + %PYARG_0 = %CONVERTTOPYTHON[QPixmap](p); + } else { + %PYARG_0 = Py_None; + Py_INCREF(%PYARG_0); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // Clear parent from the old child + QStandardItem *_i = %CPPSELF->child(%1, %2); + if (_i) { + PyObject *_pyI = %CONVERTTOPYTHON[QStandardItem*](_i); + Shiboken::Object::setParent(0, _pyI); + } + + + + + + + + // Clear parent from the old child + QStandardItem *_i = %CPPSELF->child(%1); + if (_i) { + PyObject *_pyI = %CONVERTTOPYTHON[QStandardItem*](_i); + Shiboken::Object::setParent(0, _pyI); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bool ret = !(&%CPPSELF == %1); + %PYARG_0 = %CONVERTTOPYTHON[bool](ret); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // Clear parent from the old child + QStandardItem *_i = %CPPSELF->item(%1, %2); + if (_i) { + PyObject *_pyI = %CONVERTTOPYTHON[QStandardItem*](_i); + Shiboken::Object::setParent(0, _pyI); + } + + + + + + + + // Clear parent from the old child + QStandardItem *_i = %CPPSELF->item(%1); + if (_i) { + PyObject *_pyI = %CONVERTTOPYTHON[QStandardItem*](_i); + Shiboken::Object::setParent(0, _pyI); + } + + + + + + + + + + + + + + // Clear parent from the old child + QStandardItem *_i = %CPPSELF->verticalHeaderItem(%1); + if (_i) { + PyObject *_pyI = %CONVERTTOPYTHON[QStandardItem*](_i); + Shiboken::Object::setParent(0, _pyI); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shiboken::BindingManager &bm = Shiboken::BindingManager::instance(); + SbkObject *pyRoot = bm.retrieveWrapper(%CPPSELF.invisibleRootItem()); + if (pyRoot) { + Shiboken::Object::destroy(pyRoot, %CPPSELF.invisibleRootItem()); + } + + for (int r=0, r_max = %CPPSELF.rowCount(); r < r_max; r++) { + QList<QStandardItem *> ri = %CPPSELF.takeRow(0); + + PyObject *pyResult = %CONVERTTOPYTHON[QList<QStandardItem * >](ri); + Shiboken::Object::setParent(Py_None, pyResult); + Py_XDECREF(pyResult); + } + + + + + + + + + + + + + + + + + + + + + + + + %BEGIN_ALLOW_THREADS + %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2); + %END_ALLOW_THREADS + %PYARG_0 = PyTuple_New(2); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](retval_)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[%ARG1_TYPE](%1)); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %BEGIN_ALLOW_THREADS + %CPPSELF.%FUNCTION_NAME(%1.data(), %1.size(), %2); + %END_ALLOW_THREADS + + + + + + %BEGIN_ALLOW_THREADS + %CPPSELF.%FUNCTION_NAME(%1.data(), %1.size(), %2); + %END_ALLOW_THREADS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + if (PySequence_Size(%PYARG_1) == 16) { + float values[16]; + for (int i=0; i < 16; i++) { + PyObject *pv = PySequence_Fast_GET_ITEM(%PYARG_1, i); + values[i] = PyFloat_AsDouble(pv); + } + + %0 = new %TYPE(values[0], values[1], values[2], values[3], + values[4], values[5], values[6], values[7], + values[8], values[9], values[10], values[11], + values[12], values[13], values[14], values[15]); + } + + + + + + + + + + + + + + + + + + float values[16]; + %CPPSELF.%FUNCTION_NAME(values); + %PYARG_0 = PyTuple_New(16); + for (int i = 0; i < 16; i++) { + PyObject *v = PyFloat_FromDouble(values[i]); + PyTuple_SET_ITEM(%PYARG_0, i, v); + } + + + + + + + + + + + + + + + + + + + + + + + + if (PySequence_Check(_key)) { + Shiboken::AutoDecRef key(PySequence_Fast(_key, "Invalid matrix index.")); + if (PySequence_Fast_GET_SIZE(key.object()) == 2) { + PyObject *posx = PySequence_Fast_GET_ITEM(key.object(), 0); + PyObject *posy = PySequence_Fast_GET_ITEM(key.object(), 1); + Py_ssize_t x = PyInt_AsSsize_t(posx); + Py_ssize_t y = PyInt_AsSsize_t(posy); + float ret = (*%CPPSELF)(x,y); + return %CONVERTTOPYTHON[float](ret); + } + } + PyErr_SetString(PyExc_IndexError, "Invalid matrix index."); + return 0; + + + + + _______ end of matrix block _______ --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + " + + + + + + + + + + + + + + QGuiApplicationConstructor(%PYSELF, args, &%0); + + + + + PyObject *empty = PyTuple_New(2); + if (!PyTuple_SetItem(empty, 0, PyList_New(0))) { + QGuiApplicationConstructor(%PYSELF, empty, &%0); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtGui/typesystem_gui_mac.xml b/sources/pyside2/PySide2/QtGui/typesystem_gui_mac.xml new file mode 100644 index 0000000..27fb938 --- /dev/null +++ b/sources/pyside2/PySide2/QtGui/typesystem_gui_mac.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtGui/typesystem_gui_win.xml b/sources/pyside2/PySide2/QtGui/typesystem_gui_win.xml new file mode 100644 index 0000000..66d47d3 --- /dev/null +++ b/sources/pyside2/PySide2/QtGui/typesystem_gui_win.xml @@ -0,0 +1,42 @@ + + + diff --git a/sources/pyside2/PySide2/QtGui/typesystem_gui_x11.xml b/sources/pyside2/PySide2/QtGui/typesystem_gui_x11.xml new file mode 100644 index 0000000..66d47d3 --- /dev/null +++ b/sources/pyside2/PySide2/QtGui/typesystem_gui_x11.xml @@ -0,0 +1,42 @@ + + + diff --git a/sources/pyside2/PySide2/QtHelp/CMakeLists.txt b/sources/pyside2/PySide2/QtHelp/CMakeLists.txt new file mode 100644 index 0000000..342863a --- /dev/null +++ b/sources/pyside2/PySide2/QtHelp/CMakeLists.txt @@ -0,0 +1,48 @@ +project(QtHelp) + +set(QtHelp_SRC +${QtHelp_GEN_DIR}/qhelpcontentitem_wrapper.cpp +${QtHelp_GEN_DIR}/qhelpcontentmodel_wrapper.cpp +${QtHelp_GEN_DIR}/qhelpcontentwidget_wrapper.cpp +${QtHelp_GEN_DIR}/qhelpenginecore_wrapper.cpp +${QtHelp_GEN_DIR}/qhelpengine_wrapper.cpp +${QtHelp_GEN_DIR}/qhelpindexmodel_wrapper.cpp +${QtHelp_GEN_DIR}/qhelpindexwidget_wrapper.cpp +${QtHelp_GEN_DIR}/qhelpsearchengine_wrapper.cpp +${QtHelp_GEN_DIR}/qhelpsearchquerywidget_wrapper.cpp +${QtHelp_GEN_DIR}/qhelpsearchquery_wrapper.cpp +${QtHelp_GEN_DIR}/qhelpsearchresult_wrapper.cpp +${QtHelp_GEN_DIR}/qhelpsearchresultwidget_wrapper.cpp +# module is always needed +${QtHelp_GEN_DIR}/qthelp_module_wrapper.cpp +) + +set(QtHelp_include_dirs ${QtHelp_SOURCE_DIR} + ${QtHelp_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5Help_INCLUDE_DIRS} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${QtWidgets_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtCore_GEN_DIR} + ) +set(QtHelp_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ${Qt5Help_LIBRARIES}) + +set(QtHelp_deps QtWidgets) + +create_pyside_module(QtHelp + QtHelp_include_dirs + QtHelp_libraries + QtHelp_deps + QtHelp_SOURCE_DIR + QtHelp_SRC + "") diff --git a/sources/pyside2/PySide2/QtHelp/typesystem_help.xml b/sources/pyside2/PySide2/QtHelp/typesystem_help.xml new file mode 100644 index 0000000..080fe42 --- /dev/null +++ b/sources/pyside2/PySide2/QtHelp/typesystem_help.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtLocation/CMakeLists.txt b/sources/pyside2/PySide2/QtLocation/CMakeLists.txt new file mode 100644 index 0000000..f968d1a --- /dev/null +++ b/sources/pyside2/PySide2/QtLocation/CMakeLists.txt @@ -0,0 +1,80 @@ +project(QtLocation) + +set(QtLocation_OPTIONAL_SRC ) +set(QtLocation_DROPPED_ENTRIES ) + +set(QtLocation_SRC +${QtLocation_GEN_DIR}/qgeocodereply_wrapper.cpp +${QtLocation_GEN_DIR}/qgeomaneuver_wrapper.cpp +${QtLocation_GEN_DIR}/qgeoroute_wrapper.cpp +${QtLocation_GEN_DIR}/qgeoroutereply_wrapper.cpp +${QtLocation_GEN_DIR}/qgeoroutesegment_wrapper.cpp +${QtLocation_GEN_DIR}/qgeoserviceprovider_wrapper.cpp +${QtLocation_GEN_DIR}/qplace_wrapper.cpp +${QtLocation_GEN_DIR}/qplacecontentreply_wrapper.cpp +${QtLocation_GEN_DIR}/qplacedetailsreply_wrapper.cpp +${QtLocation_GEN_DIR}/qplaceicon_wrapper.cpp +${QtLocation_GEN_DIR}/qplaceidreply_wrapper.cpp +${QtLocation_GEN_DIR}/qplacemanager_wrapper.cpp +${QtLocation_GEN_DIR}/qplaceuser_wrapper.cpp +${QtLocation_GEN_DIR}/qgeocodingmanager_wrapper.cpp +${QtLocation_GEN_DIR}/qgeocodingmanagerengine_wrapper.cpp +${QtLocation_GEN_DIR}/qgeorouterequest_wrapper.cpp +${QtLocation_GEN_DIR}/qgeoroutingmanager_wrapper.cpp +${QtLocation_GEN_DIR}/qgeoroutingmanagerengine_wrapper.cpp +${QtLocation_GEN_DIR}/qgeoserviceproviderfactory_wrapper.cpp +${QtLocation_GEN_DIR}/qplaceattribute_wrapper.cpp +${QtLocation_GEN_DIR}/qplacecategory_wrapper.cpp +${QtLocation_GEN_DIR}/qplacecontactdetail_wrapper.cpp +${QtLocation_GEN_DIR}/qplacecontent_wrapper.cpp +${QtLocation_GEN_DIR}/qplacecontentrequest_wrapper.cpp +${QtLocation_GEN_DIR}/qplaceeditorial_wrapper.cpp +${QtLocation_GEN_DIR}/qplaceimage_wrapper.cpp +${QtLocation_GEN_DIR}/qplacemanagerengine_wrapper.cpp +${QtLocation_GEN_DIR}/qplacematchreply_wrapper.cpp +${QtLocation_GEN_DIR}/qplacematchrequest_wrapper.cpp +${QtLocation_GEN_DIR}/qplaceproposedsearchresult_wrapper.cpp +${QtLocation_GEN_DIR}/qplaceratings_wrapper.cpp +${QtLocation_GEN_DIR}/qplacereply_wrapper.cpp +${QtLocation_GEN_DIR}/qplaceresult_wrapper.cpp +${QtLocation_GEN_DIR}/qplacereview_wrapper.cpp +${QtLocation_GEN_DIR}/qplacesearchreply_wrapper.cpp +${QtLocation_GEN_DIR}/qplacesearchrequest_wrapper.cpp +${QtLocation_GEN_DIR}/qplacesearchresult_wrapper.cpp +${QtLocation_GEN_DIR}/qplacesearchsuggestionreply_wrapper.cpp +${QtLocation_GEN_DIR}/qplacesupplier_wrapper.cpp +# module is always needed +${QtLocation_GEN_DIR}/qtlocation_module_wrapper.cpp +) + +if (Qt5Location_VERSION VERSION_EQUAL 5.11.0 OR Qt5Location_VERSION VERSION_GREATER 5.11.0) + list(APPEND QtLocation_SRC + ${QtLocation_GEN_DIR}/qgeoserviceproviderfactoryv2_wrapper.cpp) +endif() + +set(QtLocation_include_dirs ${QtLocation_SOURCE_DIR} + ${QtLocation_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Location_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtPositioning_GEN_DIR}) + +set(QtLocation_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Location_LIBRARIES}) + +set(QtLocation_deps QtCore QtPositioning) + +create_pyside_module(QtLocation + QtLocation_include_dirs + QtLocation_libraries + QtLocation_deps + QtLocation_SOURCE_DIR + QtLocation_SRC + "" + "" + QtLocation_DROPPED_ENTRIES) diff --git a/sources/pyside2/PySide2/QtLocation/typesystem_location.xml b/sources/pyside2/PySide2/QtLocation/typesystem_location.xml new file mode 100644 index 0000000..794c1f3 --- /dev/null +++ b/sources/pyside2/PySide2/QtLocation/typesystem_location.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtMacExtras/CMakeLists.txt b/sources/pyside2/PySide2/QtMacExtras/CMakeLists.txt new file mode 100644 index 0000000..6c69a78 --- /dev/null +++ b/sources/pyside2/PySide2/QtMacExtras/CMakeLists.txt @@ -0,0 +1,37 @@ +project(QtMacExtras) + +set(QtMacExtras_SRC +${QtMacExtras_GEN_DIR}/qmacpasteboardmime_wrapper.cpp +${QtMacExtras_GEN_DIR}/qmactoolbar_wrapper.cpp +${QtMacExtras_GEN_DIR}/qmactoolbaritem_wrapper.cpp + +# module is always needed +${QtMacExtras_GEN_DIR}/qtmacextras_module_wrapper.cpp +) + +set(QtMacExtras_include_dirs ${QtMacExtras_SOURCE_DIR} + ${QtMacExtras_BINARY_DIR} + ${Qt5MacExtras_INCLUDE_DIRS} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR}) + +set(QtMacExtras_libraries pyside2 + ${Qt5MacExtras_LIBRARIES} + ${SHIBOKEN_PYTHON_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES}) + +set(QtMacExtras_deps QtCore QtGui) + +create_pyside_module(QtMacExtras + QtMacExtras_include_dirs + QtMacExtras_libraries + QtMacExtras_deps + QtMacExtras_SOURCE_DIR + QtMacExtras_SRC + "") diff --git a/sources/pyside2/PySide2/QtMacExtras/typesystem_macextras.xml b/sources/pyside2/PySide2/QtMacExtras/typesystem_macextras.xml new file mode 100644 index 0000000..0fecf04 --- /dev/null +++ b/sources/pyside2/PySide2/QtMacExtras/typesystem_macextras.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtMultimedia/CMakeLists.txt b/sources/pyside2/PySide2/QtMultimedia/CMakeLists.txt new file mode 100644 index 0000000..e9caaa6 --- /dev/null +++ b/sources/pyside2/PySide2/QtMultimedia/CMakeLists.txt @@ -0,0 +1,134 @@ +project(QtMultimedia) + +set(QtMultimedia_SRC +${QtMultimedia_GEN_DIR}/qabstractaudiodeviceinfo_wrapper.cpp +${QtMultimedia_GEN_DIR}/qabstractaudioinput_wrapper.cpp +${QtMultimedia_GEN_DIR}/qabstractaudiooutput_wrapper.cpp +${QtMultimedia_GEN_DIR}/qabstractvideobuffer_wrapper.cpp +${QtMultimedia_GEN_DIR}/qabstractvideofilter_wrapper.cpp +${QtMultimedia_GEN_DIR}/qabstractvideosurface_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudiobuffer_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudiodecoder_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudiodecodercontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudiodeviceinfo_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudioencodersettingscontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudioencodersettings_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudioformat_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudioinputselectorcontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudioinput_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudiooutputselectorcontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudiooutput_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudioprobe_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudiorecorder_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudiorolecontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qaudio_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcameracapturebufferformatcontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcameracapturedestinationcontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcameracontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcameraexposurecontrol_wrapper.cpp +# Private destructor: ${QtMultimedia_GEN_DIR}/qcameraexposure_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcamerafeedbackcontrol_wrapper.cpp +# Private destructor: ${${QtMultimedia_GEN_DIR}/qcamerafocus_wrapper.cpp +# needs enums from QCameraFocus ${QtMultimedia_GEN_DIR}/qcameraflashcontrol_wrapper.cpp +# needs enums from QCameraFocus ${QtMultimedia_GEN_DIR}/qcamerafocuscontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcamerafocuszone_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcamera_frameraterange_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcameraimagecapturecontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcameraimagecapture_wrapper.cpp +# Private destructor: ${QtMultimedia_GEN_DIR}/qcameraimageprocessing_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcameraimageprocessingcontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcamerainfocontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcamerainfo_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcameralockscontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcameraviewfindersettingscontrol2_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcameraviewfindersettingscontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcameraviewfindersettings_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcamera_wrapper.cpp +${QtMultimedia_GEN_DIR}/qcamerazoomcontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qimageencodercontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qimageencodersettings_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaaudioprobecontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaavailabilitycontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediabindableinterface_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediacontainercontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediacontent_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediacontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediagaplessplaybackcontrol_wrapper.cpp +# Causes compile errors: ${QtMultimedia_GEN_DIR}/qmediametadata_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmedianetworkaccesscontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaobject_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaplayercontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaplayer_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaplaylist_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediarecordercontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediarecorder_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaresource_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaservice_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaservicecamerainfointerface_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaservicedefaultdeviceinterface_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaservicefeaturesinterface_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaserviceproviderhint_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaservicesupporteddevicesinterface_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediaservicesupportedformatsinterface_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediastreamscontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediatimeinterval_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediatimerange_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmediavideoprobecontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmetadatareadercontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmetadatawritercontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qmultimedia_wrapper.cpp +${QtMultimedia_GEN_DIR}/qradiodatacontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qradiodata_wrapper.cpp +${QtMultimedia_GEN_DIR}/qradiotunercontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qradiotuner_wrapper.cpp +${QtMultimedia_GEN_DIR}/qsoundeffect_wrapper.cpp +${QtMultimedia_GEN_DIR}/qsound_wrapper.cpp +${QtMultimedia_GEN_DIR}/qvideodeviceselectorcontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qvideoencodersettingscontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qvideoencodersettings_wrapper.cpp +${QtMultimedia_GEN_DIR}/qvideofilterrunnable_wrapper.cpp +${QtMultimedia_GEN_DIR}/qvideoframe_wrapper.cpp +${QtMultimedia_GEN_DIR}/qvideoprobe_wrapper.cpp +${QtMultimedia_GEN_DIR}/qvideorenderercontrol_wrapper.cpp +${QtMultimedia_GEN_DIR}/qvideosurfaceformat_wrapper.cpp +${QtMultimedia_GEN_DIR}/qvideowindowcontrol_wrapper.cpp + +# module is always needed +${QtMultimedia_GEN_DIR}/qtmultimedia_module_wrapper.cpp +) + +if (Qt5Multimedia_VERSION VERSION_EQUAL 5.11.0 OR Qt5Multimedia_VERSION VERSION_GREATER 5.11.0) + list(APPEND QtMultimedia_SRC + ${QtMultimedia_GEN_DIR}/qcustomaudiorolecontrol_wrapper.cpp) +endif() + +set(QtMultimedia_include_dirs ${QtMultimedia_SOURCE_DIR} + ${QtMultimedia_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} + ${Qt5Multimedia_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtNetwork_GEN_DIR}) + +set(QtMultimedia_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Multimedia_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Network_LIBRARIES} + ) +set(QtMultimedia_deps QtCore QtGui QtNetwork) + +create_pyside_module(QtMultimedia + QtMultimedia_include_dirs + QtMultimedia_libraries + QtMultimedia_deps + QtMultimedia_SOURCE_DIR + QtMultimedia_SRC + "") diff --git a/sources/pyside2/PySide2/QtMultimedia/typesystem_multimedia.xml b/sources/pyside2/PySide2/QtMultimedia/typesystem_multimedia.xml new file mode 100644 index 0000000..ebd003b --- /dev/null +++ b/sources/pyside2/PySide2/QtMultimedia/typesystem_multimedia.xml @@ -0,0 +1,45 @@ + + + + + + diff --git a/sources/pyside2/PySide2/QtMultimedia/typesystem_multimedia_common.xml b/sources/pyside2/PySide2/QtMultimedia/typesystem_multimedia_common.xml new file mode 100644 index 0000000..6fe90cc --- /dev/null +++ b/sources/pyside2/PySide2/QtMultimedia/typesystem_multimedia_common.xml @@ -0,0 +1,400 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %BEGIN_ALLOW_THREADS + QObject* upcastedArg = %CONVERTTOCPP[QObject*](%PYARG_1); + %CPPSELF.%FUNCTION_NAME(reinterpret_cast< %ARG1_TYPE >(upcastedArg)); + %END_ALLOW_THREADS + + + + + + + + %BEGIN_ALLOW_THREADS + QObject* upcastedArg = %CONVERTTOCPP[QObject*](%PYARG_1); + %CPPSELF.%FUNCTION_NAME(reinterpret_cast< %ARG1_TYPE >(upcastedArg)); + %END_ALLOW_THREADS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %BEGIN_ALLOW_THREADS + QObject* upcastedArg = %CONVERTTOCPP[QObject*](%PYARG_1); + %CPPSELF.%FUNCTION_NAME(reinterpret_cast< %ARG1_TYPE >(upcastedArg)); + %END_ALLOW_THREADS + + + + + + + + %BEGIN_ALLOW_THREADS + QObject* upcastedArg = %CONVERTTOCPP[QObject*](%PYARG_1); + %CPPSELF.%FUNCTION_NAME(reinterpret_cast< %ARG1_TYPE >(upcastedArg)); + %END_ALLOW_THREADS + + + + + + + + %BEGIN_ALLOW_THREADS + QObject* upcastedArg = %CONVERTTOCPP[QObject*](%PYARG_1); + %CPPSELF.%FUNCTION_NAME(reinterpret_cast< %ARG1_TYPE >(upcastedArg)); + %END_ALLOW_THREADS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtMultimedia/typesystem_multimedia_forward_declarations.xml b/sources/pyside2/PySide2/QtMultimedia/typesystem_multimedia_forward_declarations.xml new file mode 100644 index 0000000..fec0e28 --- /dev/null +++ b/sources/pyside2/PySide2/QtMultimedia/typesystem_multimedia_forward_declarations.xml @@ -0,0 +1,45 @@ + + + + + + diff --git a/sources/pyside2/PySide2/QtMultimediaWidgets/CMakeLists.txt b/sources/pyside2/PySide2/QtMultimediaWidgets/CMakeLists.txt new file mode 100644 index 0000000..abae2ce --- /dev/null +++ b/sources/pyside2/PySide2/QtMultimediaWidgets/CMakeLists.txt @@ -0,0 +1,47 @@ +project(QtMultimediaWidgets) + +set(QtMultimediaWidgets_SRC +${QtMultimediaWidgets_GEN_DIR}/qcameraviewfinder_wrapper.cpp +${QtMultimediaWidgets_GEN_DIR}/qgraphicsvideoitem_wrapper.cpp +${QtMultimediaWidgets_GEN_DIR}/qvideowidget_wrapper.cpp +${QtMultimediaWidgets_GEN_DIR}/qvideowidgetcontrol_wrapper.cpp +# module is always needed +${QtMultimediaWidgets_GEN_DIR}/qtmultimediawidgets_module_wrapper.cpp +) + +set(QtMultimediaWidgets_include_dirs ${QtMultimediaWidgets_SOURCE_DIR} + ${QtMultimediaWidgets_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5Multimedia_INCLUDE_DIRS} + ${Qt5MultimediaWidgets_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtNetwork_GEN_DIR} + ${QtWidgets_GEN_DIR} + ${QtMultimedia_GEN_DIR}) + +set(QtMultimediaWidgets_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Multimedia_LIBRARIES} + ${Qt5MultimediaWidgets_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Network_LIBRARIES} + ${Qt5Widgets_LIBRARIES}) + +set(QtMultimediaWidgets_deps QtCore QtGui QtNetwork QtWidgets QtMultimedia) + +create_pyside_module(QtMultimediaWidgets + QtMultimediaWidgets_include_dirs + QtMultimediaWidgets_libraries + QtMultimediaWidgets_deps + QtMultimediaWidgets_SOURCE_DIR + QtMultimediaWidgets_SRC + "") diff --git a/sources/pyside2/PySide2/QtMultimediaWidgets/typesystem_multimediawidgets.xml b/sources/pyside2/PySide2/QtMultimediaWidgets/typesystem_multimediawidgets.xml new file mode 100644 index 0000000..16a42d2 --- /dev/null +++ b/sources/pyside2/PySide2/QtMultimediaWidgets/typesystem_multimediawidgets.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtNetwork/CMakeLists.txt b/sources/pyside2/PySide2/QtNetwork/CMakeLists.txt new file mode 100644 index 0000000..0267bfa --- /dev/null +++ b/sources/pyside2/PySide2/QtNetwork/CMakeLists.txt @@ -0,0 +1,88 @@ +project(QtNetwork) + +set(QtNetwork_OPTIONAL_SRC ) +set(QtNetwork_DROPPED_ENTRIES ) + +check_qt_class(QtNetwork QSslCertificate QtNetwork_OPTIONAL_SRC QtNetwork_DROPPED_ENTRIES) +check_qt_class(QtNetwork QSslCertificateExtension QtNetwork_OPTIONAL_SRC QtNetwork_DROPPED_ENTRIES) +check_qt_class(QtNetwork QSslCipher QtNetwork_OPTIONAL_SRC QtNetwork_DROPPED_ENTRIES) +check_qt_class(QtNetwork QSslConfiguration QtNetwork_OPTIONAL_SRC QtNetwork_DROPPED_ENTRIES) +check_qt_class(QtNetwork QSslDiffieHellmanParameters QtNetwork_OPTIONAL_SRC QtNetwork_DROPPED_ENTRIES) +# Problems with operator==(QSslEllipticCurve,QSslEllipticCurve) +# check_qt_class(QtNetwork QSslEllipticCurve QtNetwork_OPTIONAL_SRC QtNetwork_DROPPED_ENTRIES) +check_qt_class(QtNetwork QSslError QtNetwork_OPTIONAL_SRC QtNetwork_DROPPED_ENTRIES) +check_qt_class(QtNetwork QSslKey QtNetwork_OPTIONAL_SRC QtNetwork_DROPPED_ENTRIES) +check_qt_class(QtNetwork QSslPreSharedKeyAuthenticator QtNetwork_OPTIONAL_SRC QtNetwork_DROPPED_ENTRIES) +check_qt_class(QtNetwork QSslSocket QtNetwork_OPTIONAL_SRC QtNetwork_DROPPED_ENTRIES) + +check_qt_class(QtNetwork QSctpServer QtNetwork_OPTIONAL_SRC QtNetwork_DROPPED_ENTRIES) +check_qt_class(QtNetwork QSctpSocket QtNetwork_OPTIONAL_SRC QtNetwork_DROPPED_ENTRIES) + +set(QtNetwork_SRC +${QtNetwork_GEN_DIR}/qabstractnetworkcache_wrapper.cpp +${QtNetwork_GEN_DIR}/qabstractsocket_wrapper.cpp +${QtNetwork_GEN_DIR}/qauthenticator_wrapper.cpp +${QtNetwork_GEN_DIR}/qdnsdomainnamerecord_wrapper.cpp +${QtNetwork_GEN_DIR}/qdnshostaddressrecord_wrapper.cpp +${QtNetwork_GEN_DIR}/qdnslookup_wrapper.cpp +${QtNetwork_GEN_DIR}/qdnsmailexchangerecord_wrapper.cpp +${QtNetwork_GEN_DIR}/qdnsservicerecord_wrapper.cpp +${QtNetwork_GEN_DIR}/qdnstextrecord_wrapper.cpp +${QtNetwork_GEN_DIR}/qhostaddress_wrapper.cpp +${QtNetwork_GEN_DIR}/qhostinfo_wrapper.cpp +${QtNetwork_GEN_DIR}/qhstspolicy_wrapper.cpp +${QtNetwork_GEN_DIR}/qhttpmultipart_wrapper.cpp +${QtNetwork_GEN_DIR}/qhttppart_wrapper.cpp +${QtNetwork_GEN_DIR}/qipv6address_wrapper.cpp +${QtNetwork_GEN_DIR}/qlocalserver_wrapper.cpp +${QtNetwork_GEN_DIR}/qlocalsocket_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkaccessmanager_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkaddressentry_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkcachemetadata_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkconfiguration_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkconfigurationmanager_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkcookie_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkcookiejar_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkdatagram_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkdiskcache_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkinterface_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkproxy_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkproxyfactory_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkproxyquery_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkreply_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworkrequest_wrapper.cpp +${QtNetwork_GEN_DIR}/qnetworksession_wrapper.cpp +${QtNetwork_GEN_DIR}/qssl_wrapper.cpp +${QtNetwork_GEN_DIR}/qtcpserver_wrapper.cpp +${QtNetwork_GEN_DIR}/qtcpsocket_wrapper.cpp +${QtNetwork_GEN_DIR}/qudpsocket_wrapper.cpp +${QtNetwork_OPTIONAL_SRC} +# module is always needed +${QtNetwork_GEN_DIR}/qtnetwork_module_wrapper.cpp +) + +set(QtNetwork_include_dirs ${QtNetwork_SOURCE_DIR} + ${QtNetwork_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR}) + +set(QtNetwork_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Network_LIBRARIES}) + +set(QtNetwork_deps QtCore) + +create_pyside_module(QtNetwork + QtNetwork_include_dirs + QtNetwork_libraries + QtNetwork_deps + QtNetwork_SOURCE_DIR + QtNetwork_SRC + "" + "" + QtNetwork_DROPPED_ENTRIES) diff --git a/sources/pyside2/PySide2/QtNetwork/typesystem_network.xml b/sources/pyside2/PySide2/QtNetwork/typesystem_network.xml new file mode 100644 index 0000000..e4235e0 --- /dev/null +++ b/sources/pyside2/PySide2/QtNetwork/typesystem_network.xml @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shiboken::AutoArrayPointer<char> data(%ARGUMENT_NAMES); + QHostAddress ha; + quint16 port; + %BEGIN_ALLOW_THREADS + %RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(data, %ARGUMENT_NAMES, &ha, &port); + %END_ALLOW_THREADS + QByteArray ba(data, retval); + %PYARG_0 = PyTuple_New(3); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[QByteArray](ba)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QHostAddress](ha)); + PyTuple_SET_ITEM(%PYARG_0, 2, %CONVERTTOPYTHON[quint16](port)); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + return 16; + + + + + if (_i >= 16) { + PyErr_SetString(PyExc_IndexError, "index out of bounds"); + return 0; + } + if (_i < 0) + _i = 16 - qAbs(_i); + + uint item = %CPPSELF.c[_i]; + return %CONVERTTOPYTHON[uint](item); + + + + + return 16; + + + + + if (_i >= 16) { + PyErr_SetString(PyExc_IndexError, "index out of bounds"); + return -1; + } + if (_i < 0) + _i = 16 - qAbs(_i); + quint8 item = %CONVERTTOCPP[quint8](_value); + %CPPSELF.c[_i] = item; + return 0; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtOpenGL/CMakeLists.txt b/sources/pyside2/PySide2/QtOpenGL/CMakeLists.txt new file mode 100644 index 0000000..9a8b640 --- /dev/null +++ b/sources/pyside2/PySide2/QtOpenGL/CMakeLists.txt @@ -0,0 +1,46 @@ +project(QtOpenGL) + +set(QtOpenGL_SRC +${QtOpenGL_GEN_DIR}/qgl_wrapper.cpp +${QtOpenGL_GEN_DIR}/qglbuffer_wrapper.cpp +${QtOpenGL_GEN_DIR}/qglcolormap_wrapper.cpp +${QtOpenGL_GEN_DIR}/qglcontext_wrapper.cpp +${QtOpenGL_GEN_DIR}/qglformat_wrapper.cpp +${QtOpenGL_GEN_DIR}/qglframebufferobject_wrapper.cpp +${QtOpenGL_GEN_DIR}/qglframebufferobjectformat_wrapper.cpp +${QtOpenGL_GEN_DIR}/qglpixelbuffer_wrapper.cpp +${QtOpenGL_GEN_DIR}/qglshader_wrapper.cpp +${QtOpenGL_GEN_DIR}/qglshaderprogram_wrapper.cpp +${QtOpenGL_GEN_DIR}/qglwidget_wrapper.cpp +# module is always needed +${QtOpenGL_GEN_DIR}/qtopengl_module_wrapper.cpp +) + +set(QtOpenGL_include_dirs ${QtOpenGL_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5OpenGL_INCLUDE_DIRS} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${QtWidgets_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtCore_GEN_DIR} + ${QtOpenGL_GEN_DIR} + ) +set(QtOpenGL_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ${Qt5OpenGL_LIBRARIES}) +set(QtOpenGL_deps QtWidgets) + +create_pyside_module(QtOpenGL + QtOpenGL_include_dirs + QtOpenGL_libraries + QtOpenGL_deps + QtOpenGL_SOURCE_DIR + QtOpenGL_SRC + "") diff --git a/sources/pyside2/PySide2/QtOpenGL/typesystem_opengl.xml b/sources/pyside2/PySide2/QtOpenGL/typesystem_opengl.xml new file mode 100644 index 0000000..ea5c24c --- /dev/null +++ b/sources/pyside2/PySide2/QtOpenGL/typesystem_opengl.xml @@ -0,0 +1,766 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + int size = (%2 < 0) ? %1.size() : %2; + %CPPSELF.allocate((const void*) %1.data(), size); + + + + + Py_ssize_t dataSize = %CPPSELF.size(); + void* data = %CPPSELF.map(%1); + + if (!data) { + Py_INCREF(Py_None); + %PYARG_0 = Py_None; + } else if (%1 == QGLBuffer::ReadOnly) { + %PYARG_0 = Shiboken::Buffer::newObject(data, dataSize, Shiboken::Buffer::ReadOnly); + } else { + %PYARG_0 = Shiboken::Buffer::newObject(data, dataSize, Shiboken::Buffer::ReadWrite); + } + + + + + + + + + + + char *data = new char[%3]; + bool result = %CPPSELF.read(%1, data, %3); + QByteArray ret; + if (result) + ret.append((const char*)data, %3); + %PYARG_0 = PyTuple_New(2); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[bool](result)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QByteArray](ret)); + delete[] data; + + + + + + + + + + + int size = (%3 < 0) ? %2.size() : %3; + %CPPSELF.write(%1, (const void*) %2.data(), size); + + + + + diff --git a/sources/pyside2/PySide2/QtPositioning/CMakeLists.txt b/sources/pyside2/PySide2/QtPositioning/CMakeLists.txt new file mode 100644 index 0000000..3a2eb9c --- /dev/null +++ b/sources/pyside2/PySide2/QtPositioning/CMakeLists.txt @@ -0,0 +1,55 @@ +project(QtPositioning) + +set(QtPositioning_OPTIONAL_SRC ) +set(QtPositioning_DROPPED_ENTRIES ) + +set(QtPositioning_SRC +${QtPositioning_GEN_DIR}/qgeoaddress_wrapper.cpp +${QtPositioning_GEN_DIR}/qgeoareamonitorinfo_wrapper.cpp +${QtPositioning_GEN_DIR}/qgeoareamonitorsource_wrapper.cpp +${QtPositioning_GEN_DIR}/qgeolocation_wrapper.cpp +${QtPositioning_GEN_DIR}/qgeocircle_wrapper.cpp +${QtPositioning_GEN_DIR}/qgeocoordinate_wrapper.cpp +${QtPositioning_GEN_DIR}/qgeopath_wrapper.cpp +${QtPositioning_GEN_DIR}/qgeopositioninfo_wrapper.cpp +${QtPositioning_GEN_DIR}/qgeopositioninfosource_wrapper.cpp +${QtPositioning_GEN_DIR}/qgeopositioninfosourcefactory_wrapper.cpp +${QtPositioning_GEN_DIR}/qgeorectangle_wrapper.cpp +${QtPositioning_GEN_DIR}/qgeosatelliteinfo_wrapper.cpp +${QtPositioning_GEN_DIR}/qgeosatelliteinfosource_wrapper.cpp +${QtPositioning_GEN_DIR}/qgeoshape_wrapper.cpp +${QtPositioning_GEN_DIR}/qnmeapositioninfosource_wrapper.cpp +# module is always needed +${QtPositioning_GEN_DIR}/qtpositioning_module_wrapper.cpp +) + +if (Qt5Positioning_VERSION VERSION_EQUAL 5.10.0 OR Qt5Positioning_VERSION VERSION_GREATER 5.10.0) + list(APPEND QtPositioning_SRC + ${QtPositioning_GEN_DIR}/qgeopolygon_wrapper.cpp) +endif() + +set(QtPositioning_include_dirs ${QtPositioning_SOURCE_DIR} + ${QtPositioning_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Positioning_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR}) + +set(QtPositioning_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Positioning_LIBRARIES}) + +set(QtPositioning_deps QtCore) + +create_pyside_module(QtPositioning + QtPositioning_include_dirs + QtPositioning_libraries + QtPositioning_deps + QtPositioning_SOURCE_DIR + QtPositioning_SRC + "" + "" + QtPositioning_DROPPED_ENTRIES) diff --git a/sources/pyside2/PySide2/QtPositioning/typesystem_positioning.xml b/sources/pyside2/PySide2/QtPositioning/typesystem_positioning.xml new file mode 100644 index 0000000..718b0b3 --- /dev/null +++ b/sources/pyside2/PySide2/QtPositioning/typesystem_positioning.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtPrintSupport/CMakeLists.txt b/sources/pyside2/PySide2/QtPrintSupport/CMakeLists.txt new file mode 100644 index 0000000..201dd6d --- /dev/null +++ b/sources/pyside2/PySide2/QtPrintSupport/CMakeLists.txt @@ -0,0 +1,44 @@ +project(QtPrintSupport) + +set(QtPrintSupport_SRC +${QtPrintSupport_GEN_DIR}/qabstractprintdialog_wrapper.cpp +${QtPrintSupport_GEN_DIR}/qpagesetupdialog_wrapper.cpp +${QtPrintSupport_GEN_DIR}/qprintdialog_wrapper.cpp +${QtPrintSupport_GEN_DIR}/qprintengine_wrapper.cpp +${QtPrintSupport_GEN_DIR}/qprinter_wrapper.cpp +${QtPrintSupport_GEN_DIR}/qprinterinfo_wrapper.cpp +${QtPrintSupport_GEN_DIR}/qprintpreviewdialog_wrapper.cpp +${QtPrintSupport_GEN_DIR}/qprintpreviewwidget_wrapper.cpp +# module is always needed +${QtPrintSupport_GEN_DIR}/qtprintsupport_module_wrapper.cpp +) + +set(QtPrintSupport_include_dirs ${QtPrintSupport_SOURCE_DIR} + ${QtPrintSupport_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5PrintSupport_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtWidgets_GEN_DIR} + ) +set(QtPrintSupport_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ${Qt5PrintSupport_LIBRARIES} + ) +set(QtPrintSupport_deps QtWidgets) +create_pyside_module(QtPrintSupport + QtPrintSupport_include_dirs + QtPrintSupport_libraries + QtPrintSupport_deps + QtPrintSupport_SOURCE_DIR + QtPrintSupport_SRC + "") diff --git a/sources/pyside2/PySide2/QtPrintSupport/typesystem_printsupport.xml b/sources/pyside2/PySide2/QtPrintSupport/typesystem_printsupport.xml new file mode 100644 index 0000000..b6111a0 --- /dev/null +++ b/sources/pyside2/PySide2/QtPrintSupport/typesystem_printsupport.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtQml/CMakeLists.txt b/sources/pyside2/PySide2/QtQml/CMakeLists.txt new file mode 100644 index 0000000..fb09443 --- /dev/null +++ b/sources/pyside2/PySide2/QtQml/CMakeLists.txt @@ -0,0 +1,65 @@ +project(QtQml) + +set(QtQml_registerType "${QtQml_SOURCE_DIR}/pysideqmlregistertype.cpp") + +set(QtQml_SRC +${QtQml_GEN_DIR}/qjsengine_wrapper.cpp +${QtQml_GEN_DIR}/qjsvalue_wrapper.cpp +${QtQml_GEN_DIR}/qjsvalueiterator_wrapper.cpp +${QtQml_GEN_DIR}/qqmlabstracturlinterceptor_wrapper.cpp +${QtQml_GEN_DIR}/qqmlapplicationengine_wrapper.cpp +${QtQml_GEN_DIR}/qqmlcomponent_wrapper.cpp +${QtQml_GEN_DIR}/qqmlcontext_wrapper.cpp +${QtQml_GEN_DIR}/qqmlerror_wrapper.cpp +${QtQml_GEN_DIR}/qqmldebuggingenabler_wrapper.cpp +${QtQml_GEN_DIR}/qqmlengine_wrapper.cpp +${QtQml_GEN_DIR}/qqmlexpression_wrapper.cpp +${QtQml_GEN_DIR}/qqmlextensioninterface_wrapper.cpp +${QtQml_GEN_DIR}/qqmltypesextensioninterface_wrapper.cpp +${QtQml_GEN_DIR}/qqmlextensionplugin_wrapper.cpp +${QtQml_GEN_DIR}/qqmlfile_wrapper.cpp +${QtQml_GEN_DIR}/qqmlfileselector_wrapper.cpp +${QtQml_GEN_DIR}/qqmlimageproviderbase_wrapper.cpp +${QtQml_GEN_DIR}/qqmlincubator_wrapper.cpp +${QtQml_GEN_DIR}/qqmlincubationcontroller_wrapper.cpp +#${QtQml_GEN_DIR}/qqmllistproperty_wrapper.cpp +${QtQml_GEN_DIR}/qqmllistreference_wrapper.cpp +${QtQml_GEN_DIR}/qqmlparserstatus_wrapper.cpp +${QtQml_GEN_DIR}/qqmlproperty_wrapper.cpp +${QtQml_GEN_DIR}/qqmlpropertymap_wrapper.cpp +${QtQml_GEN_DIR}/qqmlpropertyvaluesource_wrapper.cpp +${QtQml_GEN_DIR}/qqmlscriptstring_wrapper.cpp +${QtQml_GEN_DIR}/qqmlnetworkaccessmanagerfactory_wrapper.cpp +# module is always needed +${QtQml_GEN_DIR}/qtqml_module_wrapper.cpp +) + +set(QtQml_include_dirs ${QtQml_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} + ${Qt5Qml_INCLUDE_DIRS} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${QtGui_GEN_DIR} + ${QtCore_GEN_DIR} + ${QtNetwork_GEN_DIR} + ${QtQml_GEN_DIR}) + +set(QtQml_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Network_LIBRARIES} + ${Qt5Qml_LIBRARIES}) + +set(QtQml_deps QtGui QtNetwork) + +create_pyside_module(QtQml + QtQml_include_dirs + QtQml_libraries + QtQml_deps + QtQml_SOURCE_DIR + QtQml_SRC + QtQml_registerType) diff --git a/sources/pyside2/PySide2/QtQml/pysideqmlregistertype.cpp b/sources/pyside2/PySide2/QtQml/pysideqmlregistertype.cpp new file mode 100644 index 0000000..0b427c2 --- /dev/null +++ b/sources/pyside2/PySide2/QtQml/pysideqmlregistertype.cpp @@ -0,0 +1,496 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "pysideqmlregistertype.h" + +// shiboken +#include + +// pyside +#include +#include + +// auto generated headers +#include "pyside2_qtcore_python.h" +#include "pyside2_qtqml_python.h" + +#ifndef PYSIDE_MAX_QML_TYPES +// Maximum number of different Qt QML types the user can export to QML using +// qmlRegisterType. This limit exists because the QML engine instantiates objects +// by calling a function with one argument (a void* pointer where the object should +// be created), and thus does not allow us to choose which object to create. Thus +// we create a C++ factory function for each new registered type at compile time. +#define PYSIDE_MAX_QML_TYPES 50 +#endif + +// Forward declarations. +static void propListMetaCall(PySideProperty* pp, PyObject* self, QMetaObject::Call call, + void **args); + +// All registered python types and their creation functions. +static PyObject* pyTypes[PYSIDE_MAX_QML_TYPES]; +static void (*createFuncs[PYSIDE_MAX_QML_TYPES])(void*); + +// Mutex used to avoid race condition on PySide::nextQObjectMemoryAddr. +static QMutex nextQmlElementMutex; + +template +struct ElementFactoryBase +{ + static void createInto(void* memory) + { + QMutexLocker locker(&nextQmlElementMutex); + PySide::setNextQObjectMemoryAddr(memory); + Shiboken::GilState state; + PyObject* obj = PyObject_CallObject(pyTypes[N], 0); + if (!obj || PyErr_Occurred()) + PyErr_Print(); + PySide::setNextQObjectMemoryAddr(0); + } +}; + +template +struct ElementFactory : ElementFactoryBase +{ + static void init() + { + createFuncs[N] = &ElementFactoryBase::createInto; + ElementFactory::init(); + } +}; + +template<> +struct ElementFactory<0> : ElementFactoryBase<0> +{ + static void init() + { + createFuncs[0] = &ElementFactoryBase<0>::createInto; + } +}; + +int PySide::qmlRegisterType(PyObject *pyObj, const char *uri, int versionMajor, + int versionMinor, const char *qmlName) +{ + using namespace Shiboken; + + static PyTypeObject *qobjectType = Shiboken::Conversions::getPythonTypeObject("QObject*"); + assert(qobjectType); + static int nextType = 0; + + if (nextType >= PYSIDE_MAX_QML_TYPES) { + PyErr_Format(PyExc_TypeError, "You can only export %d custom QML types to QML.", + PYSIDE_MAX_QML_TYPES); + return -1; + } + + PyTypeObject *pyObjType = reinterpret_cast(pyObj); + if (!PySequence_Contains(pyObjType->tp_mro, reinterpret_cast(qobjectType))) { + PyErr_Format(PyExc_TypeError, "A type inherited from %s expected, got %s.", + qobjectType->tp_name, pyObjType->tp_name); + return -1; + } + + QMetaObject *metaObject = reinterpret_cast( + ObjectType::getTypeUserData(reinterpret_cast(pyObj))); + Q_ASSERT(metaObject); + + QQmlPrivate::RegisterType type; + type.version = 0; + + // Allow registering Qt Quick items. + bool registered = false; +#ifdef PYSIDE_QML_SUPPORT + QuickRegisterItemFunction quickRegisterItemFunction = getQuickRegisterItemFunction(); + if (quickRegisterItemFunction) { + registered = quickRegisterItemFunction(pyObj, uri, versionMajor, versionMinor, + qmlName, &type); + } +#endif + + // Register as simple QObject rather than Qt Quick item. + if (!registered) { + // Incref the type object, don't worry about decref'ing it because + // there's no way to unregister a QML type. + Py_INCREF(pyObj); + + pyTypes[nextType] = pyObj; + + // FIXME: Fix this to assign new type ids each time. + type.typeId = qMetaTypeId(); + type.listId = qMetaTypeId >(); + type.attachedPropertiesFunction = QQmlPrivate::attachedPropertiesFunc(); + type.attachedPropertiesMetaObject = QQmlPrivate::attachedPropertiesMetaObject(); + + type.parserStatusCast = + QQmlPrivate::StaticCastSelector::cast(); + type.valueSourceCast = + QQmlPrivate::StaticCastSelector::cast(); + type.valueInterceptorCast = + QQmlPrivate::StaticCastSelector::cast(); + + int objectSize = static_cast(PySide::getSizeOfQObject( + reinterpret_cast(pyObj))); + type.objectSize = objectSize; + type.create = createFuncs[nextType]; + type.uri = uri; + type.versionMajor = versionMajor; + type.versionMinor = versionMinor; + type.elementName = qmlName; + type.metaObject = metaObject; + + type.extensionObjectCreate = 0; + type.extensionMetaObject = 0; + type.customParser = 0; + ++nextType; + } + + int qmlTypeId = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, &type); + if (qmlTypeId == -1) { + PyErr_Format(PyExc_TypeError, "QML meta type registration of \"%s\" failed.", + qmlName); + } + return qmlTypeId; +} + +extern "C" +{ + +// This is the user data we store in the property. +struct QmlListProperty +{ + PyTypeObject* type; + PyObject* append; + PyObject* at; + PyObject* clear; + PyObject* count; +}; + +static int propListTpInit(PyObject* self, PyObject* args, PyObject* kwds) +{ + static const char *kwlist[] = {"type", "append", "at", "clear", "count", 0}; + PySideProperty* pySelf = reinterpret_cast(self); + QmlListProperty* data = new QmlListProperty; + memset(data, 0, sizeof(QmlListProperty)); + + if (!PyArg_ParseTupleAndKeywords(args, kwds, + "OO|OOO:QtQml.ListProperty", (char**) kwlist, + &data->type, + &data->append, + &data->at, + &data->clear, + &data->count)) { + return 0; + } + PySide::Property::setMetaCallHandler(pySelf, &propListMetaCall); + PySide::Property::setTypeName(pySelf, "QQmlListProperty"); + PySide::Property::setUserData(pySelf, data); + + return 1; +} + +void propListTpFree(void* self) +{ + PySideProperty* pySelf = reinterpret_cast(self); + delete reinterpret_cast(PySide::Property::userData(pySelf)); + // calls base type constructor + Py_TYPE(pySelf)->tp_base->tp_free(self); +} + +static PyType_Slot PropertyListType_slots[] = { + {Py_tp_init, (void *)propListTpInit}, + {Py_tp_free, (void *)propListTpFree}, + {Py_tp_dealloc, (void *)SbkDummyDealloc}, + {0, 0} +}; +static PyType_Spec PropertyListType_spec = { + "PySide2.QtQml.ListProperty", + sizeof(PySideProperty), + 0, + Py_TPFLAGS_DEFAULT, + PropertyListType_slots, +}; + + +PyTypeObject *PropertyListTypeF(void) +{ + static PyTypeObject *type = nullptr; + if (!type) { + PyObject *bases = Py_BuildValue("(O)", PySidePropertyTypeF()); + type = (PyTypeObject *)PyType_FromSpecWithBases(&PropertyListType_spec, bases); + Py_XDECREF(bases); + } + return type; +} + +} // extern "C" + +// Implementation of QQmlListProperty::AppendFunction callback +void propListAppender(QQmlListProperty *propList, QObject *item) +{ + Shiboken::GilState state; + + Shiboken::AutoDecRef args(PyTuple_New(2)); + PyTuple_SET_ITEM(args, 0, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide2_QtCoreTypes[SBK_QOBJECT_IDX], propList->object)); + PyTuple_SET_ITEM(args, 1, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide2_QtCoreTypes[SBK_QOBJECT_IDX], item)); + + QmlListProperty* data = reinterpret_cast(propList->data); + Shiboken::AutoDecRef retVal(PyObject_CallObject(data->append, args)); + + if (PyErr_Occurred()) + PyErr_Print(); +} + +// Implementation of QQmlListProperty::CountFunction callback +int propListCount(QQmlListProperty *propList) +{ + Shiboken::GilState state; + + Shiboken::AutoDecRef args(PyTuple_New(1)); + PyTuple_SET_ITEM(args, 0, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide2_QtCoreTypes[SBK_QOBJECT_IDX], propList->object)); + + QmlListProperty* data = reinterpret_cast(propList->data); + Shiboken::AutoDecRef retVal(PyObject_CallObject(data->count, args)); + + // Check return type + int cppResult = 0; + PythonToCppFunc pythonToCpp = 0; + if (PyErr_Occurred()) + PyErr_Print(); + else if ((pythonToCpp = Shiboken::Conversions::isPythonToCppConvertible(Shiboken::Conversions::PrimitiveTypeConverter(), retVal))) + pythonToCpp(retVal, &cppResult); + return cppResult; +} + +// Implementation of QQmlListProperty::AtFunction callback +QObject *propListAt(QQmlListProperty *propList, int index) +{ + Shiboken::GilState state; + + Shiboken::AutoDecRef args(PyTuple_New(2)); + PyTuple_SET_ITEM(args, 0, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide2_QtCoreTypes[SBK_QOBJECT_IDX], propList->object)); + PyTuple_SET_ITEM(args, 1, Shiboken::Conversions::copyToPython(Shiboken::Conversions::PrimitiveTypeConverter(), &index)); + + QmlListProperty* data = reinterpret_cast(propList->data); + Shiboken::AutoDecRef retVal(PyObject_CallObject(data->at, args)); + + QObject *result = 0; + if (PyErr_Occurred()) + PyErr_Print(); + else if (PyType_IsSubtype(Py_TYPE(retVal), data->type)) + Shiboken::Conversions::pythonToCppPointer((SbkObjectType*)SbkPySide2_QtCoreTypes[SBK_QOBJECT_IDX], retVal, &result); + return result; +} + +// Implementation of QQmlListProperty::ClearFunction callback +void propListClear(QQmlListProperty * propList) +{ + Shiboken::GilState state; + + Shiboken::AutoDecRef args(PyTuple_New(1)); + PyTuple_SET_ITEM(args, 0, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide2_QtCoreTypes[SBK_QOBJECT_IDX], propList->object)); + + QmlListProperty* data = reinterpret_cast(propList->data); + Shiboken::AutoDecRef retVal(PyObject_CallObject(data->clear, args)); + + if (PyErr_Occurred()) + PyErr_Print(); +} + +// qt_metacall specialization for ListProperties +static void propListMetaCall(PySideProperty* pp, PyObject* self, QMetaObject::Call call, void** args) +{ + if (call != QMetaObject::ReadProperty) + return; + + QmlListProperty* data = reinterpret_cast(PySide::Property::userData(pp)); + QObject* qobj; + Shiboken::Conversions::pythonToCppPointer((SbkObjectType*)SbkPySide2_QtCoreTypes[SBK_QOBJECT_IDX], self, &qobj); + QQmlListProperty declProp(qobj, data, &propListAppender, &propListCount, &propListAt, &propListClear); + + // Copy the data to the memory location requested by the meta call + void* v = args[0]; + *reinterpret_cast *>(v) = declProp; +} + +// VolatileBool (volatile bool) type definition. + +static PyObject * +QtQml_VolatileBoolObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + static const char *kwlist[] = {"x", 0}; + PyObject *x = Py_False; + long ok; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:bool", const_cast(kwlist), &x)) + return Q_NULLPTR; + ok = PyObject_IsTrue(x); + if (ok < 0) + return Q_NULLPTR; + + QtQml_VolatileBoolObject *self + = reinterpret_cast(type->tp_alloc(type, 0)); + + if (self != Q_NULLPTR) + self->flag = ok; + + return reinterpret_cast(self); +} + +static PyObject * +QtQml_VolatileBoolObject_get(QtQml_VolatileBoolObject *self) +{ + if (self->flag) + return Py_True; + return Py_False; +} + +static PyObject * +QtQml_VolatileBoolObject_set(QtQml_VolatileBoolObject *self, PyObject *args) +{ + PyObject *value = Py_False; + long ok; + + if (!PyArg_ParseTuple(args, "O:bool", &value)) { + return Q_NULLPTR; + } + + ok = PyObject_IsTrue(value); + if (ok < 0) { + PyErr_SetString(PyExc_TypeError, "Not a boolean value."); + return Q_NULLPTR; + } + + if (ok > 0) + self->flag = true; + else + self->flag = false; + + Py_RETURN_NONE; +} + +static PyMethodDef QtQml_VolatileBoolObject_methods[] = { + {"get", reinterpret_cast(QtQml_VolatileBoolObject_get), METH_NOARGS, + "B.get() -> Bool. Returns the value of the volatile boolean" + }, + {"set", reinterpret_cast(QtQml_VolatileBoolObject_set), METH_VARARGS, + "B.set(a) -> None. Sets the value of the volatile boolean" + }, + {Q_NULLPTR} /* Sentinel */ +}; + +static PyObject * +QtQml_VolatileBoolObject_repr(QtQml_VolatileBoolObject *self) +{ + PyObject *s; + + if (self->flag) + s = PyBytes_FromFormat("%s(True)", + Py_TYPE(self)->tp_name); + else + s = PyBytes_FromFormat("%s(False)", + Py_TYPE(self)->tp_name); + Py_XINCREF(s); + return s; +} + +static PyObject * +QtQml_VolatileBoolObject_str(QtQml_VolatileBoolObject *self) +{ + PyObject *s; + + if (self->flag) + s = PyBytes_FromFormat("%s(True) -> %p", + Py_TYPE(self)->tp_name, &(self->flag)); + else + s = PyBytes_FromFormat("%s(False) -> %p", + Py_TYPE(self)->tp_name, &(self->flag)); + Py_XINCREF(s); + return s; +} + +static PyType_Slot QtQml_VolatileBoolType_slots[] = { + {Py_tp_repr, (void *)reinterpret_cast(QtQml_VolatileBoolObject_repr)}, + {Py_tp_str, (void *)reinterpret_cast(QtQml_VolatileBoolObject_str)}, + {Py_tp_methods, (void *)QtQml_VolatileBoolObject_methods}, + {Py_tp_new, (void *)QtQml_VolatileBoolObject_new}, + {Py_tp_dealloc, (void *)SbkDummyDealloc}, + {0, 0} +}; +static PyType_Spec QtQml_VolatileBoolType_spec = { + "PySide2.QtQml.VolatileBool", + sizeof(QtQml_VolatileBoolObject), + 0, + Py_TPFLAGS_DEFAULT, + QtQml_VolatileBoolType_slots, +}; + + +PyTypeObject *QtQml_VolatileBoolTypeF(void) +{ + static PyTypeObject *type = nullptr; + if (!type) + type = (PyTypeObject *)PyType_FromSpec(&QtQml_VolatileBoolType_spec); + return type; +} + +void PySide::initQmlSupport(PyObject* module) +{ + ElementFactory::init(); + + // Export QmlListProperty type + if (PyType_Ready(PropertyListTypeF()) < 0) { + PyErr_Print(); + qWarning() << "Error initializing PropertyList type."; + return; + } + + Py_INCREF(reinterpret_cast(PropertyListTypeF())); + PyModule_AddObject(module, PepType_GetNameStr(PropertyListTypeF()), + reinterpret_cast(PropertyListTypeF())); + + if (PyType_Ready(QtQml_VolatileBoolTypeF()) < 0) { + PyErr_Print(); + qWarning() << "Error initializing VolatileBool type."; + return; + } + + Py_INCREF(QtQml_VolatileBoolTypeF()); + PyModule_AddObject(module, PepType_GetNameStr(QtQml_VolatileBoolTypeF()), + reinterpret_cast(QtQml_VolatileBoolTypeF())); +} diff --git a/sources/pyside2/PySide2/QtQml/pysideqmlregistertype.h b/sources/pyside2/PySide2/QtQml/pysideqmlregistertype.h new file mode 100644 index 0000000..0ef6539 --- /dev/null +++ b/sources/pyside2/PySide2/QtQml/pysideqmlregistertype.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDEQMLREGISTERTYPE_H +#define PYSIDEQMLREGISTERTYPE_H + +#include + +struct SbkObjectType; + +namespace PySide +{ + +extern void* nextQmlElementMemoryAddr; + +/** + * Init the QML support doing things like registering QtQml.ListProperty and create the necessary stuff for + * qmlRegisterType. + * + * \param module QtQml python module + */ +void initQmlSupport(PyObject* module); + +/** + * PySide implementation of qmlRegisterType function. + * + * \param pyObj Python type to be registered. + * \param uri QML element uri. + * \param versionMajor QML component major version. + * \param versionMinor QML component minor version. + * \param qmlName QML element name + * \return the metatype id of the registered type. + */ +int qmlRegisterType(PyObject *pyObj, const char *uri, int versionMajor, int versionMinor, + const char *qmlName); +} + +// Volatile Bool Ptr type definition. + +typedef struct { + PyObject_HEAD + volatile bool flag; +} QtQml_VolatileBoolObject; + +PyAPI_FUNC(PyTypeObject *) QtQml_VolatileBoolTypeF(void); + +#define VolatileBool_Check(op) (Py_TYPE(op) == QtQml_VolatileBoolTypeF()) + +#endif diff --git a/sources/pyside2/PySide2/QtQml/typesystem_qml.xml b/sources/pyside2/PySide2/QtQml/typesystem_qml.xml new file mode 100644 index 0000000..9a0d1e0 --- /dev/null +++ b/sources/pyside2/PySide2/QtQml/typesystem_qml.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + This function registers the Python type in the QML system with the name qmlName, in the library imported from uri having the version number composed from versionMajor and versionMinor. + Returns the QML type id. + + For example, this registers a Python class MySliderItem as a QML type named Slider for version 1.0 of a module called "com.mycompany.qmlcomponents": + + :: + + qmlRegisterType(MySliderItem, "com.mycompany.qmlcomponents", 1, 0, "Slider") + + Once this is registered, the type can be used in QML by importing the specified module name and version number: + + :: + + import com.mycompany.qmlcomponents 1.0 + + Slider { ... } + + Note that it's perfectly reasonable for a library to register types to older versions than the actual version of the library. Indeed, it is normal for the new library to allow QML written to previous versions to continue to work, even if more advanced versions of some of its types are available. + + + + int %0 = PySide::qmlRegisterType(%ARGUMENT_NAMES); + %PYARG_0 = %CONVERTTOPYTHON[int](%0); + + + + + + + + + + + + PySide::initQmlSupport(module); + + + + + + + %RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(%1); + return %CONVERTTOPYTHON[%RETURN_TYPE](retval); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + volatile bool * %out = + &((reinterpret_cast<QtQml_VolatileBoolObject *>(%PYARG_1))->flag); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtQuick/CMakeLists.txt b/sources/pyside2/PySide2/QtQuick/CMakeLists.txt new file mode 100644 index 0000000..01e369e --- /dev/null +++ b/sources/pyside2/PySide2/QtQuick/CMakeLists.txt @@ -0,0 +1,93 @@ +project(QtQuick) + +set(QtQuick_registerType "${QtQuick_SOURCE_DIR}/pysidequickregistertype.cpp") + +set(QtQuick_SRC +${QtQuick_GEN_DIR}/qquickframebufferobject_wrapper.cpp +${QtQuick_GEN_DIR}/qquickframebufferobject_renderer_wrapper.cpp +${QtQuick_GEN_DIR}/qquicktexturefactory_wrapper.cpp +${QtQuick_GEN_DIR}/qquickimageprovider_wrapper.cpp +${QtQuick_GEN_DIR}/qquicktransform_wrapper.cpp +${QtQuick_GEN_DIR}/qquickitem_wrapper.cpp +${QtQuick_GEN_DIR}/qquickitem_updatepaintnodedata_wrapper.cpp +${QtQuick_GEN_DIR}/qquickitemgrabresult_wrapper.cpp +${QtQuick_GEN_DIR}/qsharedpointer_qquickitemgrabresult_wrapper.cpp +${QtQuick_GEN_DIR}/qquickpainteditem_wrapper.cpp +${QtQuick_GEN_DIR}/qquickrendercontrol_wrapper.cpp +${QtQuick_GEN_DIR}/qquicktextdocument_wrapper.cpp +${QtQuick_GEN_DIR}/qquickview_wrapper.cpp +${QtQuick_GEN_DIR}/qquickwindow_wrapper.cpp +${QtQuick_GEN_DIR}/qsgabstractrenderer_wrapper.cpp +${QtQuick_GEN_DIR}/qsgbasicgeometrynode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgclipnode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgdynamictexture_wrapper.cpp +${QtQuick_GEN_DIR}/qsgengine_wrapper.cpp +#${QtQuick_GEN_DIR}/qsgflatcolormaterial_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometry_attribute_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometry_attributeset_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometry_coloredpoint2d_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometry_point2d_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometry_texturedpoint2d_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometry_wrapper.cpp +${QtQuick_GEN_DIR}/qsggeometrynode_wrapper.cpp +#${QtQuick_GEN_DIR}/qsgmaterial_wrapper.cpp +#${QtQuick_GEN_DIR}/qsgmaterialshader_renderstate_wrapper.cpp +# Issue with virtual char const *const *attributeNames() +#${QtQuick_GEN_DIR}/qsgmaterialshader_wrapper.cpp +${QtQuick_GEN_DIR}/qsgmaterialtype_wrapper.cpp +${QtQuick_GEN_DIR}/qsgnode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgopacitynode_wrapper.cpp +#${QtQuick_GEN_DIR}/qsgopaquetexturematerial_wrapper.cpp +#${QtQuick_GEN_DIR}/qsgsimplematerial_wrapper.cpp +#${QtQuick_GEN_DIR}/qsgsimplematerialshader_wrapper.cpp +${QtQuick_GEN_DIR}/qsgsimplerectnode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgsimpletexturenode_wrapper.cpp +${QtQuick_GEN_DIR}/qsgtexture_wrapper.cpp +#${QtQuick_GEN_DIR}/qsgtexturematerial_wrapper.cpp +${QtQuick_GEN_DIR}/qsgtextureprovider_wrapper.cpp +${QtQuick_GEN_DIR}/qsgtransformnode_wrapper.cpp +#${QtQuick_GEN_DIR}/qsgvertexcolormaterial_wrapper.cpp +# module is always needed +${QtQuick_GEN_DIR}/qtquick_module_wrapper.cpp +) + +if (Qt5Quick_VERSION VERSION_GREATER 5.5.1) + set(QtQuick_SRC ${QtQuick_SRC} + ${QtQuick_GEN_DIR}/qquickasyncimageprovider_wrapper.cpp + ${QtQuick_GEN_DIR}/qquickimageresponse_wrapper.cpp + ) +endif() + +set(QtQuick_include_dirs ${QtQuick_SOURCE_DIR} + ${QtQml_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} + ${Qt5Qml_INCLUDE_DIRS} + ${Qt5Quick_INCLUDE_DIRS} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${QtGui_GEN_DIR} + ${QtCore_GEN_DIR} + ${QtNetwork_GEN_DIR} + ${QtQml_GEN_DIR} + ${QtQuick_GEN_DIR}) + +set(QtQuick_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Network_LIBRARIES} + ${Qt5Qml_LIBRARIES} + ${Qt5Quick_LIBRARIES}) + +set(QtQuick_deps QtGui QtNetwork QtQml) + +create_pyside_module(QtQuick + QtQuick_include_dirs + QtQuick_libraries + QtQuick_deps + QtQuick_SOURCE_DIR + QtQuick_SRC + QtQuick_registerType) diff --git a/sources/pyside2/PySide2/QtQuick/pysidequickregistertype.cpp b/sources/pyside2/PySide2/QtQuick/pysidequickregistertype.cpp new file mode 100644 index 0000000..bf3ff06 --- /dev/null +++ b/sources/pyside2/PySide2/QtQuick/pysidequickregistertype.cpp @@ -0,0 +1,253 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "pysidequickregistertype.h" + +#include + +// Auto generated headers. +#include "qquickitem_wrapper.h" +#include "qquickpainteditem_wrapper.h" +#include "qquickframebufferobject_wrapper.h" +#include "pyside2_qtcore_python.h" +#include "pyside2_qtquick_python.h" +#include "pyside2_qtqml_python.h" + +#ifndef PYSIDE_MAX_QUICK_TYPES +// Maximum number of different Qt Quick types the user can export to QML using +// qmlRegisterType. This limit exists because the QML engine instantiates objects +// by calling a function with one argument (a void* pointer where the object should +// be created), and thus does not allow us to choose which object to create. Thus +// we create a C++ factory function for each new registered type at compile time. +# define PYSIDE_MAX_QUICK_TYPES 50 +#endif // !PYSIDE_MAX_QUICK_TYPES + +// All registered python types and their creation functions. +static PyObject *pyTypes[PYSIDE_MAX_QUICK_TYPES]; +static void (*createFuncs[PYSIDE_MAX_QUICK_TYPES])(void*); + +// Mutex used to avoid race condition on PySide::nextQObjectMemoryAddr. +static QMutex nextQmlElementMutex; + +// Python object factory functions. +template +struct ElementFactoryBase +{ + static void createQuickItem(void *memory) + { + QMutexLocker locker(&nextQmlElementMutex); + PySide::setNextQObjectMemoryAddr(memory); + Shiboken::GilState state; + PyObject *obj = PyObject_CallObject(pyTypes[N], 0); + if (!obj || PyErr_Occurred()) + PyErr_Print(); + PySide::setNextQObjectMemoryAddr(0); + } +}; + +template +struct ElementFactory : ElementFactoryBase +{ + static void init() + { + createFuncs[N] = &ElementFactoryBase::createQuickItem; + ElementFactory::init(); + } +}; + +template<> +struct ElementFactory<0> : ElementFactoryBase<0> +{ + static void init() + { + createFuncs[0] = &ElementFactoryBase<0>::createQuickItem; + } +}; + +#define PY_REGISTER_IF_INHERITS_FROM(className, typeToRegister,typePointerName, \ + typeListName, typeMetaObject, type, registered) \ + registerTypeIfInheritsFromClass(#className, typeToRegister, \ + typePointerName, typeListName, \ + typeMetaObject, type, registered) + +bool pyTypeObjectInheritsFromClass(PyTypeObject *pyObjType, QByteArray className) +{ + className.append('*'); + PyTypeObject *classPyType = Shiboken::Conversions::getPythonTypeObject(className.constData()); + bool isDerived = PySequence_Contains(pyObjType->tp_mro, + reinterpret_cast(classPyType)); + return isDerived; +} + +template +void registerTypeIfInheritsFromClass( + QByteArray className, + PyTypeObject *typeToRegister, + const QByteArray &typePointerName, + const QByteArray &typeListName, + QMetaObject *typeMetaObject, + QQmlPrivate::RegisterType *type, + bool ®istered) +{ + bool shouldRegister = !registered && pyTypeObjectInheritsFromClass(typeToRegister, className); + if (shouldRegister) { + int ptrType = + QMetaType::registerNormalizedType( + typePointerName.constData(), + QtMetaTypePrivate::QMetaTypeFunctionHelper::Destruct, + QtMetaTypePrivate::QMetaTypeFunctionHelper::Construct, + sizeof(WrapperClass *), + static_cast< ::QFlags >(QtPrivate::QMetaTypeTypeFlags< + WrapperClass *>::Flags), + typeMetaObject); + if (ptrType == -1) { + PyErr_Format(PyExc_TypeError, "Meta type registration of \"%s\" for QML usage failed.", + typePointerName.constData()); + return; + } + + int lstType = + QMetaType::registerNormalizedType( + typeListName.constData(), + QtMetaTypePrivate::QMetaTypeFunctionHelper > + ::Destruct, + QtMetaTypePrivate::QMetaTypeFunctionHelper > + ::Construct, + sizeof(QQmlListProperty), + static_cast< ::QFlags >( + QtPrivate::QMetaTypeTypeFlags >::Flags), + static_cast(0)); + if (lstType == -1) { + PyErr_Format(PyExc_TypeError, "Meta type registration of \"%s\" for QML usage failed.", + typeListName.constData()); + return; + } + + type->typeId = ptrType; + type->listId = lstType; + type->attachedPropertiesFunction = QQmlPrivate::attachedPropertiesFunc(); + type->attachedPropertiesMetaObject = + QQmlPrivate::attachedPropertiesMetaObject(); + type->parserStatusCast = + QQmlPrivate::StaticCastSelector::cast(); + type->valueSourceCast = + QQmlPrivate::StaticCastSelector::cast(); + type->valueInterceptorCast = + QQmlPrivate::StaticCastSelector::cast(); + type->objectSize = sizeof(WrapperClass); + registered = true; + } +} + +bool quickRegisterType(PyObject *pyObj, const char *uri, int versionMajor, int versionMinor, + const char *qmlName, QQmlPrivate::RegisterType *type) +{ + using namespace Shiboken; + static int nextType = 0; + + if (nextType >= PYSIDE_MAX_QUICK_TYPES) { + PyErr_Format(PyExc_TypeError, + "You can only export %d Qt Quick types to QML.", PYSIDE_MAX_QUICK_TYPES); + return false; + } + + PyTypeObject *pyObjType = reinterpret_cast(pyObj); + PyTypeObject *qQuickItemPyType = + Shiboken::Conversions::getPythonTypeObject("QQuickItem*"); + bool isQuickItem = PySequence_Contains(pyObjType->tp_mro, + reinterpret_cast(qQuickItemPyType)); + + // Register only classes that inherit QQuickItem or its children. + if (!isQuickItem) + return false; + + // Used inside macros to register the type. + QMetaObject *metaObject = + reinterpret_cast( + ObjectType::getTypeUserData(reinterpret_cast(pyObj))); + Q_ASSERT(metaObject); + + + // Incref the type object, don't worry about decref'ing it because + // there's no way to unregister a QML type. + Py_INCREF(pyObj); + + pyTypes[nextType] = pyObj; + + // Used in macro registration. + QByteArray pointerName(qmlName); + pointerName.append('*'); + QByteArray listName(qmlName); + listName.prepend("QQmlListProperty<"); + listName.append('>'); + + bool registered = false; + PY_REGISTER_IF_INHERITS_FROM(QQuickPaintedItem, pyObjType, pointerName, listName, metaObject, + type, registered); + PY_REGISTER_IF_INHERITS_FROM(QQuickFramebufferObject, pyObjType, pointerName, listName, + metaObject, type, registered); + PY_REGISTER_IF_INHERITS_FROM(QQuickItem, pyObjType, pointerName, listName, metaObject, + type, registered); + if (!registered) + return false; + + type->create = createFuncs[nextType]; + type->version = 0; + type->uri = uri; + type->versionMajor = versionMajor; + type->versionMinor = versionMinor; + type->elementName = qmlName; + type->metaObject = metaObject; + + type->extensionObjectCreate = 0; + type->extensionMetaObject = 0; + type->customParser = 0; + + ++nextType; + return true; +} + +void PySide::initQuickSupport(PyObject *module) +{ + Q_UNUSED(module); + ElementFactory::init(); +#ifdef PYSIDE_QML_SUPPORT + setQuickRegisterItemFunction(quickRegisterType); +#endif +} diff --git a/sources/pyside2/PySide2/QtQuick/pysidequickregistertype.h b/sources/pyside2/PySide2/QtQuick/pysidequickregistertype.h new file mode 100644 index 0000000..1955413 --- /dev/null +++ b/sources/pyside2/PySide2/QtQuick/pysidequickregistertype.h @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDE_QUICK_REGISTER_TYPE_H +#define PYSIDE_QUICK_REGISTER_TYPE_H + +#include + +struct SbkObjectType; + +namespace PySide +{ +void initQuickSupport(PyObject *module); +} + +#endif // PYSIDE_QUICK_REGISTER_TYPE_H diff --git a/sources/pyside2/PySide2/QtQuick/typesystem_quick.xml b/sources/pyside2/PySide2/QtQuick/typesystem_quick.xml new file mode 100644 index 0000000..7e6b450 --- /dev/null +++ b/sources/pyside2/PySide2/QtQuick/typesystem_quick.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + PySide::initQuickSupport(module); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtQuickWidgets/CMakeLists.txt b/sources/pyside2/PySide2/QtQuickWidgets/CMakeLists.txt new file mode 100644 index 0000000..8699120 --- /dev/null +++ b/sources/pyside2/PySide2/QtQuickWidgets/CMakeLists.txt @@ -0,0 +1,47 @@ +project(QtQuickWidgets) + +set(QtQuickWidgets_SRC +${QtQuickWidgets_GEN_DIR}/qquickwidget_wrapper.cpp +# module is always needed +${QtQuickWidgets_GEN_DIR}/qtquickwidgets_module_wrapper.cpp +) + +set(QtQuickWidgets_include_dirs ${QtQuickWidgets_SOURCE_DIR} + ${QtQml_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} + ${Qt5Quick_INCLUDE_DIRS} + ${Qt5Qml_INCLUDE_DIRS} + ${Qt5QuickWidgets_INCLUDE_DIRS} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${QtGui_GEN_DIR} + ${QtCore_GEN_DIR} + ${QtWidgets_GEN_DIR} + ${QtNetwork_GEN_DIR} + ${QtQuick_GEN_DIR} + ${QtQml_GEN_DIR} + ${QtQuickWidgets_GEN_DIR}) + +set(QtQuickWidgets_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Network_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ${Qt5Quick_LIBRARIES} + ${Qt5Qml_LIBRARIES} + ${Qt5QuickWidgets_LIBRARIES}) + +set(QtQuickWidgets_deps QtGui QtQml QtQuick QtWidgets QtNetwork) + +create_pyside_module(QtQuickWidgets + QtQuickWidgets_include_dirs + QtQuickWidgets_libraries + QtQuickWidgets_deps + QtQuickWidgets_SOURCE_DIR + QtQuickWidgets_SRC + "") diff --git a/sources/pyside2/PySide2/QtQuickWidgets/typesystem_quickwidgets.xml b/sources/pyside2/PySide2/QtQuickWidgets/typesystem_quickwidgets.xml new file mode 100644 index 0000000..0323018 --- /dev/null +++ b/sources/pyside2/PySide2/QtQuickWidgets/typesystem_quickwidgets.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtScript/CMakeLists.txt b/sources/pyside2/PySide2/QtScript/CMakeLists.txt new file mode 100644 index 0000000..1e06c46 --- /dev/null +++ b/sources/pyside2/PySide2/QtScript/CMakeLists.txt @@ -0,0 +1,42 @@ +project(QtScript) + +set(QtScript_SRC +${QtScript_GEN_DIR}/qscriptable_wrapper.cpp +${QtScript_GEN_DIR}/qscriptclass_wrapper.cpp +${QtScript_GEN_DIR}/qscriptclasspropertyiterator_wrapper.cpp +${QtScript_GEN_DIR}/qscriptcontext_wrapper.cpp +${QtScript_GEN_DIR}/qscriptcontextinfo_wrapper.cpp +${QtScript_GEN_DIR}/qscriptengineagent_wrapper.cpp +${QtScript_GEN_DIR}/qscriptprogram_wrapper.cpp +${QtScript_GEN_DIR}/qscriptengine_wrapper.cpp +${QtScript_GEN_DIR}/qscriptextensioninterface_wrapper.cpp +${QtScript_GEN_DIR}/qscriptextensionplugin_wrapper.cpp +${QtScript_GEN_DIR}/qscriptstring_wrapper.cpp +${QtScript_GEN_DIR}/qscriptvalue_wrapper.cpp +${QtScript_GEN_DIR}/qscriptvalueiterator_wrapper.cpp +# module is always needed +${QtScript_GEN_DIR}/qtscript_module_wrapper.cpp +) + +set(QtScript_include_dirs ${QtScript_SOURCE_DIR} + ${QtScript_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Script_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ) +set(QtScript_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Core_LIBRARIES} + ${Qt5Script_LIBRARIES}) +set(QtScript_deps QtCore) +create_pyside_module(QtScript + QtScript_include_dirs + QtScript_libraries + QtScript_deps + QtScript_SOURCE_DIR + QtScript_SRC + "") diff --git a/sources/pyside2/PySide2/QtScript/qscript_value_iterator_glue.cpp b/sources/pyside2/PySide2/QtScript/qscript_value_iterator_glue.cpp new file mode 100644 index 0000000..fd9cd84 --- /dev/null +++ b/sources/pyside2/PySide2/QtScript/qscript_value_iterator_glue.cpp @@ -0,0 +1,3 @@ +%PYARG_0 = Shiboken::Object::newObject( + reinterpret_cast(Shiboken::SbkType< ::QScriptValueIterator >()), + new QScriptValueIterator(*%CPPSELF), true, true); diff --git a/sources/pyside2/PySide2/QtScript/typesystem_script.xml b/sources/pyside2/PySide2/QtScript/typesystem_script.xml new file mode 100644 index 0000000..d2d3e31 --- /dev/null +++ b/sources/pyside2/PySide2/QtScript/typesystem_script.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + if (%CPPSELF.isVariant() || %CPPSELF.isString()) { + QString format = QString().sprintf("%s(\"%s\")", + Py_TYPE(%PYSELF)->tp_name, + qPrintable(%CPPSELF.toString())); + %PYARG_0 = Shiboken::String::fromCString(qPrintable(format)); + } else { + %PYARG_0 = Shiboken::String::fromCString(Py_TYPE(%PYSELF)->tp_name); + } + + + + + Shiboken::AutoDecRef key(PyObject_Str(_key)); + QVariant res = %CPPSELF.property(Shiboken::String::toCString(key.object())).toVariant(); + if (res.isValid()) { + return %CONVERTTOPYTHON[QVariant](res); + } else { + PyObject* errorType = PyInt_Check(_key) ? PyExc_IndexError : PyExc_KeyError; + PyErr_SetString(errorType, "Key not found."); + return 0; + } + + + + + + + + + + + + + + + if (%CPPSELF.hasNext()) { + %CPPSELF.next(); + QString name = %CPPSELF.name(); + QVariant value = %CPPSELF.value().toVariant(); + %PYARG_0 = PyTuple_New(2); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[QString](name)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QVariant](value)); + } else { + PyErr_SetNone(PyExc_StopIteration); + } + + + + + diff --git a/sources/pyside2/PySide2/QtScriptTools/CMakeLists.txt b/sources/pyside2/PySide2/QtScriptTools/CMakeLists.txt new file mode 100644 index 0000000..92bf1a5 --- /dev/null +++ b/sources/pyside2/PySide2/QtScriptTools/CMakeLists.txt @@ -0,0 +1,41 @@ +project(QtScriptTools) + +set(QtScriptTools_SRC +${QtScriptTools_GEN_DIR}/qscriptenginedebugger_wrapper.cpp +# module is always needed +${QtScriptTools_GEN_DIR}/qtscripttools_module_wrapper.cpp +) + +set(QtScriptTools_include_dirs ${QtScriptTools_SOURCE_DIR} + ${QtScriptTools_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5Script_INCLUDE_DIRS} + ${Qt5ScriptTools_INCLUDE_DIRS} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtWidgets_GEN_DIR} + ${QtScript_GEN_DIR} + ) + +set(QtScriptTools_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ${Qt5Script_LIBRARIES} + ${Qt5ScriptTools_LIBRARIES}) + +set(QtScriptTools_deps QtCore QtScript QtGui QtWidgets) + +create_pyside_module(QtScriptTools + QtScriptTools_include_dirs + QtScriptTools_libraries + QtScriptTools_deps + QtScriptTools_SOURCE_DIR + QtScriptTools_SRC + "") diff --git a/sources/pyside2/PySide2/QtScriptTools/typesystem_scripttools.xml b/sources/pyside2/PySide2/QtScriptTools/typesystem_scripttools.xml new file mode 100644 index 0000000..81a4048 --- /dev/null +++ b/sources/pyside2/PySide2/QtScriptTools/typesystem_scripttools.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtScxml/CMakeLists.txt b/sources/pyside2/PySide2/QtScxml/CMakeLists.txt new file mode 100644 index 0000000..0a75ffc --- /dev/null +++ b/sources/pyside2/PySide2/QtScxml/CMakeLists.txt @@ -0,0 +1,60 @@ +project(QtScxml) + +set(QtScxml_OPTIONAL_SRC ) +set(QtScxml_DROPPED_ENTRIES ) + +set(QtScxml_SRC +${QtScxml_GEN_DIR}/qscxmlcompiler_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmlcompiler_loader_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmlevent_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmldynamicscxmlservicefactory_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmlinvokableservice_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmlinvokableservicefactory_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmlstaticscxmlservicefactory_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmlstatemachine_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmltabledata_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmlerror_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmlexecutablecontent_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmlexecutablecontent_assignmentinfo_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmlexecutablecontent_evaluatorinfo_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmlexecutablecontent_foreachinfo_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmlexecutablecontent_invokeinfo_wrapper.cpp +${QtScxml_GEN_DIR}/qscxmlexecutablecontent_parameterinfo_wrapper.cpp +# module is always needed +${QtScxml_GEN_DIR}/qtscxml_module_wrapper.cpp +) + +if (Qt5Scxml_VERSION VERSION_EQUAL 5.12.0 OR Qt5Scxml_VERSION VERSION_GREATER 5.12.0) + list(APPEND QtScxml_SRC + ${QtScxml_GEN_DIR}/qscxmldatamodel_wrapper.cpp + ${QtScxml_GEN_DIR}/qscxmldatamodel_foreachloopbody_wrapper.cpp + ${QtScxml_GEN_DIR}/qscxmlecmascriptdatamodel_wrapper.cpp + ${QtScxml_GEN_DIR}/qscxmlcppdatamodel_wrapper.cpp + ${QtScxml_GEN_DIR}/qscxmlnulldatamodel_wrapper.cpp) +endif() + +set(QtScxml_include_dirs ${QtScxml_SOURCE_DIR} + ${QtScxml_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Scxml_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR}) + +set(QtScxml_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Scxml_LIBRARIES}) + +set(QtScxml_deps QtCore) + +create_pyside_module(QtScxml + QtScxml_include_dirs + QtScxml_libraries + QtScxml_deps + QtScxml_SOURCE_DIR + QtScxml_SRC + "" + "" + QtScxml_DROPPED_ENTRIES) diff --git a/sources/pyside2/PySide2/QtScxml/typesystem_scxml.xml b/sources/pyside2/PySide2/QtScxml/typesystem_scxml.xml new file mode 100644 index 0000000..67a0cc4 --- /dev/null +++ b/sources/pyside2/PySide2/QtScxml/typesystem_scxml.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtSensors/CMakeLists.txt b/sources/pyside2/PySide2/QtSensors/CMakeLists.txt new file mode 100644 index 0000000..2266254 --- /dev/null +++ b/sources/pyside2/PySide2/QtSensors/CMakeLists.txt @@ -0,0 +1,106 @@ +project(QtSensors) + +set(QtSensors_OPTIONAL_SRC ) +set(QtSensors_DROPPED_ENTRIES ) + +set(QtSensors_SRC +# overrides QObject::metaObject() by private method +# ${QtSensors_GEN_DIR}/qsensorgesture_wrapper.cpp + ${QtSensors_GEN_DIR}/qsensorgesturemanager_wrapper.cpp + ${QtSensors_GEN_DIR}/qsensorgestureplugininterface_wrapper.cpp + ${QtSensors_GEN_DIR}/qsensorgesturerecognizer_wrapper.cpp + ${QtSensors_GEN_DIR}/qaccelerometer_wrapper.cpp + ${QtSensors_GEN_DIR}/qaccelerometerfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qaccelerometerreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qaltimeter_wrapper.cpp + ${QtSensors_GEN_DIR}/qaltimeterfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qaltimeterreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qambientlightfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qambientlightreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qambientlightsensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qambienttemperaturefilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qambienttemperaturereading_wrapper.cpp + ${QtSensors_GEN_DIR}/qambienttemperaturesensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qcompass_wrapper.cpp + ${QtSensors_GEN_DIR}/qcompassfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qcompassreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qdistancefilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qdistancereading_wrapper.cpp + ${QtSensors_GEN_DIR}/qdistancesensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qgyroscope_wrapper.cpp + ${QtSensors_GEN_DIR}/qgyroscopefilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qgyroscopereading_wrapper.cpp + ${QtSensors_GEN_DIR}/qholsterfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qholsterreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qholstersensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qhumidityfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qhumidityreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qhumiditysensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qirproximityfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qirproximityreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qirproximitysensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qlidfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qlidreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qlidsensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qlightfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qlightreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qlightsensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qmagnetometer_wrapper.cpp + ${QtSensors_GEN_DIR}/qmagnetometerfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qmagnetometerreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qorientationfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qorientationreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qorientationsensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qpressurefilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qpressurereading_wrapper.cpp + ${QtSensors_GEN_DIR}/qpressuresensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qproximityfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qproximityreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qproximitysensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qrotationfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qrotationreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qrotationsensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qsensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qsensorfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qsensorreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qoutputrange_wrapper.cpp + ${QtSensors_GEN_DIR}/qsensorbackend_wrapper.cpp + ${QtSensors_GEN_DIR}/qsensorbackendfactory_wrapper.cpp + ${QtSensors_GEN_DIR}/qsensormanager_wrapper.cpp + ${QtSensors_GEN_DIR}/qsensorchangesinterface_wrapper.cpp + ${QtSensors_GEN_DIR}/qsensorplugininterface_wrapper.cpp + ${QtSensors_GEN_DIR}/qtapfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qtapreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qtapsensor_wrapper.cpp + ${QtSensors_GEN_DIR}/qtiltfilter_wrapper.cpp + ${QtSensors_GEN_DIR}/qtiltreading_wrapper.cpp + ${QtSensors_GEN_DIR}/qtiltsensor_wrapper.cpp +# module is always needed + ${QtSensors_GEN_DIR}/qtsensors_module_wrapper.cpp +) + +set(QtSensors_include_dirs ${QtSensors_SOURCE_DIR} + ${QtSensors_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Sensors_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR}) + +set(QtSensors_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Sensors_LIBRARIES}) + +set(QtSensors_deps QtCore) + +create_pyside_module(QtSensors + QtSensors_include_dirs + QtSensors_libraries + QtSensors_deps + QtSensors_SOURCE_DIR + QtSensors_SRC + "" + "" + QtSensors_DROPPED_ENTRIES) diff --git a/sources/pyside2/PySide2/QtSensors/typesystem_sensors.xml b/sources/pyside2/PySide2/QtSensors/typesystem_sensors.xml new file mode 100644 index 0000000..5c82db2 --- /dev/null +++ b/sources/pyside2/PySide2/QtSensors/typesystem_sensors.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtSql/CMakeLists.txt b/sources/pyside2/PySide2/QtSql/CMakeLists.txt new file mode 100644 index 0000000..0573ab5 --- /dev/null +++ b/sources/pyside2/PySide2/QtSql/CMakeLists.txt @@ -0,0 +1,54 @@ +project(QtSql) + +set(QtSql_SRC +${QtSql_GEN_DIR}/qsql_wrapper.cpp +${QtSql_GEN_DIR}/qsqldatabase_wrapper.cpp +${QtSql_GEN_DIR}/qsqldriver_wrapper.cpp +${QtSql_GEN_DIR}/qsqldrivercreatorbase_wrapper.cpp +${QtSql_GEN_DIR}/qsqlerror_wrapper.cpp +${QtSql_GEN_DIR}/qsqlfield_wrapper.cpp +${QtSql_GEN_DIR}/qsqlindex_wrapper.cpp +${QtSql_GEN_DIR}/qsqlquery_wrapper.cpp +${QtSql_GEN_DIR}/qsqlquerymodel_wrapper.cpp +${QtSql_GEN_DIR}/qsqlrecord_wrapper.cpp +${QtSql_GEN_DIR}/qsqlrelation_wrapper.cpp +${QtSql_GEN_DIR}/qsqlrelationaldelegate_wrapper.cpp +${QtSql_GEN_DIR}/qsqlrelationaltablemodel_wrapper.cpp +${QtSql_GEN_DIR}/qsqlresult_wrapper.cpp +${QtSql_GEN_DIR}/qsqltablemodel_wrapper.cpp +# module is always needed +${QtSql_GEN_DIR}/qtsql_module_wrapper.cpp +) + +configure_file("${QtSql_SOURCE_DIR}/QtSql_global.pre.h.in" + "${QtSql_BINARY_DIR}/QtSql_global.pre.h" @ONLY) + +set(QtSql_include_dirs ${QtSql_SOURCE_DIR} + ${QtSql_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5Sql_INCLUDE_DIRS} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtWidgets_GEN_DIR} + ) +set(QtSql_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ${Qt5Sql_LIBRARIES}) +set(QtSql_deps QtWidgets) + +create_pyside_module(QtSql + QtSql_include_dirs + QtSql_libraries + QtSql_deps + QtSql_SOURCE_DIR + QtSql_SRC + "") diff --git a/sources/pyside2/PySide2/QtSql/QtSql_global.pre.h.in b/sources/pyside2/PySide2/QtSql/QtSql_global.pre.h.in new file mode 100644 index 0000000..0c20c18 --- /dev/null +++ b/sources/pyside2/PySide2/QtSql/QtSql_global.pre.h.in @@ -0,0 +1,5 @@ +// QT_WIDGETS_LIB must be defined for QSqlRelationalDelegate to become visible. + +#if @Qt5Widgets_FOUND@ +# define QT_WIDGETS_LIB +#endif diff --git a/sources/pyside2/PySide2/QtSql/typesystem_sql.xml b/sources/pyside2/PySide2/QtSql/typesystem_sql.xml new file mode 100644 index 0000000..1b6baa1 --- /dev/null +++ b/sources/pyside2/PySide2/QtSql/typesystem_sql.xml @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtSvg/CMakeLists.txt b/sources/pyside2/PySide2/QtSvg/CMakeLists.txt new file mode 100644 index 0000000..72914b1 --- /dev/null +++ b/sources/pyside2/PySide2/QtSvg/CMakeLists.txt @@ -0,0 +1,41 @@ +project(QtSvg) + +set(QtSvg_SRC +${QtSvg_GEN_DIR}/qgraphicssvgitem_wrapper.cpp +${QtSvg_GEN_DIR}/qsvggenerator_wrapper.cpp +${QtSvg_GEN_DIR}/qsvgrenderer_wrapper.cpp +${QtSvg_GEN_DIR}/qsvgwidget_wrapper.cpp +# module is always needed +${QtSvg_GEN_DIR}/qtsvg_module_wrapper.cpp +) + +set(QtSvg_include_dirs ${QtSvg_SOURCE_DIR} + ${QtSvg_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5Svg_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtWidgets_GEN_DIR} + ) +set(QtSvg_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ${Qt5Svg_LIBRARIES} + ) +set(QtSvg_deps QtWidgets) + +create_pyside_module(QtSvg + QtSvg_include_dirs + QtSvg_libraries + QtSvg_deps + QtSvg_SOURCE_DIR + QtSvg_SRC + "") diff --git a/sources/pyside2/PySide2/QtSvg/typesystem_svg.xml b/sources/pyside2/PySide2/QtSvg/typesystem_svg.xml new file mode 100644 index 0000000..5c4fcb7 --- /dev/null +++ b/sources/pyside2/PySide2/QtSvg/typesystem_svg.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtTest/CMakeLists.txt b/sources/pyside2/PySide2/QtTest/CMakeLists.txt new file mode 100644 index 0000000..6d2630f --- /dev/null +++ b/sources/pyside2/PySide2/QtTest/CMakeLists.txt @@ -0,0 +1,45 @@ +project(QtTest) + +set(QtTest_SRC +${QtTest_GEN_DIR}/qtest_pysideqtoucheventsequence_wrapper.cpp +${QtTest_GEN_DIR}/qtest_wrapper.cpp +# module is always needed +${QtTest_GEN_DIR}/qttest_module_wrapper.cpp +) + +configure_file("${QtTest_SOURCE_DIR}/QtTest_global.pre.h.in" + "${QtTest_BINARY_DIR}/QtTest_global.pre.h" @ONLY) + +configure_file("${QtTest_SOURCE_DIR}/QtTest_global.post.h.in" + "${QtTest_BINARY_DIR}/QtTest_global.post.h" @ONLY) + +set(QtTest_include_dirs ${QtTest_SOURCE_DIR} + ${QtTest_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5Test_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtWidgets_GEN_DIR} + ) +set(QtTest_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Test_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Core_LIBRARIES} + ) +set(QtTest_deps QtWidgets) + +create_pyside_module(QtTest + QtTest_include_dirs + QtTest_libraries + QtTest_deps + QtTest_SOURCE_DIR + QtTest_SRC + "") diff --git a/sources/pyside2/PySide2/QtTest/QtTest_global.post.h.in b/sources/pyside2/PySide2/QtTest/QtTest_global.post.h.in new file mode 100644 index 0000000..ccd1815 --- /dev/null +++ b/sources/pyside2/PySide2/QtTest/QtTest_global.post.h.in @@ -0,0 +1 @@ +#include "pysideqtesttouch.h" diff --git a/sources/pyside2/PySide2/QtTest/QtTest_global.pre.h.in b/sources/pyside2/PySide2/QtTest/QtTest_global.pre.h.in new file mode 100644 index 0000000..65daf1b --- /dev/null +++ b/sources/pyside2/PySide2/QtTest/QtTest_global.pre.h.in @@ -0,0 +1,5 @@ +// QT_WIDGETS_LIB changes code generation in pysideqtesttouch.h + +#if @Qt5Widgets_FOUND@ +# define QT_WIDGETS_LIB +#endif diff --git a/sources/pyside2/PySide2/QtTest/typesystem_test.xml b/sources/pyside2/PySide2/QtTest/typesystem_test.xml new file mode 100644 index 0000000..86c12f8 --- /dev/null +++ b/sources/pyside2/PySide2/QtTest/typesystem_test.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtTextToSpeech/CMakeLists.txt b/sources/pyside2/PySide2/QtTextToSpeech/CMakeLists.txt new file mode 100644 index 0000000..63b5a36 --- /dev/null +++ b/sources/pyside2/PySide2/QtTextToSpeech/CMakeLists.txt @@ -0,0 +1,35 @@ +project(QtTextToSpeech) + +set(QtTextToSpeech_SRC +${QtTextToSpeech_GEN_DIR}/qtexttospeech_wrapper.cpp +${QtTextToSpeech_GEN_DIR}/qtexttospeechengine_wrapper.cpp +${QtTextToSpeech_GEN_DIR}/qvoice_wrapper.cpp +# module is always needed +${QtTextToSpeech_GEN_DIR}/qttexttospeech_module_wrapper.cpp +) + +set(QtTextToSpeech_include_dirs ${QtTextToSpeech_SOURCE_DIR} + ${QtTextToSpeech_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5TextToSpeech_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR}) + +set(QtTextToSpeech_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Multimedia_LIBRARIES} + ${Qt5TextToSpeech_LIBRARIES} + ${Qt5Core_LIBRARIES}) + +set(QtTextToSpeech_deps QtCore QtMultimedia) + +create_pyside_module(QtTextToSpeech + QtTextToSpeech_include_dirs + QtTextToSpeech_libraries + QtTextToSpeech_deps + QtTextToSpeech_SOURCE_DIR + QtTextToSpeech_SRC + "") diff --git a/sources/pyside2/PySide2/QtTextToSpeech/typesystem_texttospeech.xml b/sources/pyside2/PySide2/QtTextToSpeech/typesystem_texttospeech.xml new file mode 100644 index 0000000..9e553ec --- /dev/null +++ b/sources/pyside2/PySide2/QtTextToSpeech/typesystem_texttospeech.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtUiTools/CMakeLists.txt b/sources/pyside2/PySide2/QtUiTools/CMakeLists.txt new file mode 100644 index 0000000..e4de03f --- /dev/null +++ b/sources/pyside2/PySide2/QtUiTools/CMakeLists.txt @@ -0,0 +1,41 @@ +project(QtUiTools) + +set(QtUiTools_SRC +${QtUiTools_GEN_DIR}/quiloader_wrapper.cpp +# module is always needed +${QtUiTools_GEN_DIR}/qtuitools_module_wrapper.cpp +) + +set(QtUiTools_include_dirs ${QtUiTools_SOURCE_DIR} + ${QtUiTools_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5Xml_INCLUDE_DIRS} + ${Qt5Designer_INCLUDE_DIRS} + ${Qt5UiTools_INCLUDE_DIRS} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${plugins_SOURCE_DIR} + ${QtCore_GEN_DIR} + ${QtXml_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtWidgets_GEN_DIR} + ) +set(QtUiTools_libraries pyside2 + uiplugin + ${SHIBOKEN_PYTHON_LIBRARIES} + ${Qt5UiTools_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ) +set(QtUiTools_deps QtWidgets QtXml) +create_pyside_module(QtUiTools + QtUiTools_include_dirs + QtUiTools_libraries + QtUiTools_deps + QtUiTools_SOURCE_DIR + QtUiTools_SRC + "") diff --git a/sources/pyside2/PySide2/QtUiTools/glue/plugins.h b/sources/pyside2/PySide2/QtUiTools/glue/plugins.h new file mode 100644 index 0000000..d1b250d --- /dev/null +++ b/sources/pyside2/PySide2/QtUiTools/glue/plugins.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef _PLUGIN_H_ +#define _PLUGIN_H_ + +#include +#include "customwidgets.h" + +inline void registerCustomWidget(PyObject* obj) +{ + static PyCustomWidgets* plugin = 0; + + if (plugin == 0) { + foreach(QObject* o, QPluginLoader::staticInstances()) { + plugin = qobject_cast(o); + if (plugin) + break; + } + } + + if (!plugin) + qDebug() << "Failed to load uiloader plugin."; + else + plugin->registerWidgetType(obj); +} + +#endif diff --git a/sources/pyside2/PySide2/QtUiTools/glue/uitools_loadui.cpp b/sources/pyside2/PySide2/QtUiTools/glue/uitools_loadui.cpp new file mode 100644 index 0000000..c078eac --- /dev/null +++ b/sources/pyside2/PySide2/QtUiTools/glue/uitools_loadui.cpp @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + * Based on code provided by: + * Antonio Valentino + * Frédéric + */ + +#include +#include +#include +#include + +static void createChildrenNameAttributes(PyObject* root, QObject* object) +{ + foreach (QObject* child, object->children()) { + const QByteArray name = child->objectName().toLocal8Bit(); + + if (!name.isEmpty() && !name.startsWith("_") && !name.startsWith("qt_")) { + bool hasAttr = PyObject_HasAttrString(root, name.constData()); + if (!hasAttr) { + Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QObject*](child)); + PyObject_SetAttrString(root, name.constData(), pyChild); + } + createChildrenNameAttributes(root, child); + } + createChildrenNameAttributes(root, child); + } +} + +static PyObject* QUiLoadedLoadUiFromDevice(QUiLoader* self, QIODevice* dev, QWidget* parent) +{ + QWidget* wdg = self->load(dev, parent); + + if (wdg) { + PyObject* pyWdg = %CONVERTTOPYTHON[QWidget*](wdg); + createChildrenNameAttributes(pyWdg, wdg); + if (parent) { + Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](parent)); + Shiboken::Object::setParent(pyParent, pyWdg); + } + return pyWdg; + } + + if (!PyErr_Occurred()) + PyErr_SetString(PyExc_RuntimeError, "Unable to open/read ui device"); + return 0; +} + +static PyObject* QUiLoaderLoadUiFromFileName(QUiLoader* self, const QString& uiFile, QWidget* parent) +{ + QFile fd(uiFile); + return QUiLoadedLoadUiFromDevice(self, &fd, parent); +} diff --git a/sources/pyside2/PySide2/QtUiTools/typesystem_uitools.xml b/sources/pyside2/PySide2/QtUiTools/typesystem_uitools.xml new file mode 100644 index 0000000..4fded34 --- /dev/null +++ b/sources/pyside2/PySide2/QtUiTools/typesystem_uitools.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + Q_IMPORT_PLUGIN(PyCustomWidgets); + + + + + + + Registers a Python created custom widget to QUiLoader, so it can be recognized when + loading a `.ui` file. The custom widget type is passed via the ``customWidgetType`` argument. + This is needed when you want to override a virtual method of some widget in the interface, + since duck punching will not work with widgets created by QUiLoader based on the contents + of the `.ui` file. + + (Remember that `duck punching virtual methods is an invitation for your own demise! + <http://www.pyside.org/docs/shiboken/wordsofadvice.html#duck-punching-and-virtual-methods>`_) + + Let's see an obvious example. If you want to create a new widget it's probable you'll end up + overriding :class:`~PySide2.QtGui.QWidget`'s :meth:`~PySide2.QtGui.QWidget.paintEvent` method. + + .. code-block:: python + + class Circle(QWidget): + def paintEvent(self, event): + painter = QPainter(self) + painter.setPen(self.pen) + painter.setBrush(QBrush(self.color)) + painter.drawEllipse(event.rect().center(), 20, 20) + + # ... + + loader = QUiLoader() + loader.registerCustomWidget(Circle) + circle = loader.load('circle.ui') + circle.show() + + # ... + + + registerCustomWidget(%PYARG_1); + %CPPSELF.addPluginPath(""); // force reload widgets + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // Avoid calling the original function: %CPPSELF.%FUNCTION_NAME() + %PYARG_0 = QUiLoadedLoadUiFromDevice(%CPPSELF, %1, %2); + + + + + + + + + + + + + + // Avoid calling the original function: %CPPSELF.%FUNCTION_NAME() + %PYARG_0 = QUiLoaderLoadUiFromFileName(%CPPSELF, %1, %2); + + + + + diff --git a/sources/pyside2/PySide2/QtWebChannel/CMakeLists.txt b/sources/pyside2/PySide2/QtWebChannel/CMakeLists.txt new file mode 100644 index 0000000..b7fee0d --- /dev/null +++ b/sources/pyside2/PySide2/QtWebChannel/CMakeLists.txt @@ -0,0 +1,33 @@ +project(QtWebChannel) + +set(QtWebChannel_SRC +${QtWebChannel_GEN_DIR}/qwebchannel_wrapper.cpp +${QtWebChannel_GEN_DIR}/qwebchannelabstracttransport_wrapper.cpp +# module is always needed +${QtWebChannel_GEN_DIR}/qtwebchannel_module_wrapper.cpp +) + +set(QtWebChannel_include_dirs ${QtWebChannel_SOURCE_DIR} + ${QtWebChannel_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5WebChannel_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ) +set(QtWebChannel_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5WebChannel_LIBRARIES} + ${Qt5Core_LIBRARIES} + ) +set(QtWebChannel_deps QtCore) + +create_pyside_module(QtWebChannel + QtWebChannel_include_dirs + QtWebChannel_libraries + QtWebChannel_deps + QtWebChannel_SOURCE_DIR + QtWebChannel_SRC + "") diff --git a/sources/pyside2/PySide2/QtWebChannel/typesystem_webchannel.xml b/sources/pyside2/PySide2/QtWebChannel/typesystem_webchannel.xml new file mode 100644 index 0000000..874924d --- /dev/null +++ b/sources/pyside2/PySide2/QtWebChannel/typesystem_webchannel.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtWebEngine/CMakeLists.txt b/sources/pyside2/PySide2/QtWebEngine/CMakeLists.txt new file mode 100644 index 0000000..9029509 --- /dev/null +++ b/sources/pyside2/PySide2/QtWebEngine/CMakeLists.txt @@ -0,0 +1,32 @@ +project(QtWebEngine) + +set(QtWebEngine_SRC +${QtWebEngine_GEN_DIR}/qtwebengine_wrapper.cpp +# module is always needed +${QtWebEngine_GEN_DIR}/qtwebengine_module_wrapper.cpp +) + +set(QtWebEngine_include_dirs + ${QtWebEngine_SOURCE_DIR} + ${QtWebEngine_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ) +set(QtWebEngine_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5WebEngine_LIBRARIES} + ${Qt5Core_LIBRARIES} + ) +set(QtWebEngine_deps QtCore) +create_pyside_module(QtWebEngine + QtWebEngine_include_dirs + QtWebEngine_libraries + QtWebEngine_deps + QtWebEngine_SOURCE_DIR + QtWebEngine_SRC + "") + diff --git a/sources/pyside2/PySide2/QtWebEngine/typesystem_webengine.xml b/sources/pyside2/PySide2/QtWebEngine/typesystem_webengine.xml new file mode 100644 index 0000000..9b38bc1 --- /dev/null +++ b/sources/pyside2/PySide2/QtWebEngine/typesystem_webengine.xml @@ -0,0 +1,45 @@ + + + + + + diff --git a/sources/pyside2/PySide2/QtWebEngineCore/CMakeLists.txt b/sources/pyside2/PySide2/QtWebEngineCore/CMakeLists.txt new file mode 100644 index 0000000..109b9f2 --- /dev/null +++ b/sources/pyside2/PySide2/QtWebEngineCore/CMakeLists.txt @@ -0,0 +1,37 @@ +project(QtWebEngineCore) + +set(QtWebEngineCore_SRC +${QtWebEngineCore_GEN_DIR}/qwebenginecookiestore_wrapper.cpp +${QtWebEngineCore_GEN_DIR}/qwebenginehttprequest_wrapper.cpp +${QtWebEngineCore_GEN_DIR}/qwebengineurlrequestinfo_wrapper.cpp +${QtWebEngineCore_GEN_DIR}/qwebengineurlrequestinterceptor_wrapper.cpp +${QtWebEngineCore_GEN_DIR}/qwebengineurlrequestjob_wrapper.cpp +${QtWebEngineCore_GEN_DIR}/qwebengineurlschemehandler_wrapper.cpp +# module is always needed +${QtWebEngineCore_GEN_DIR}/qtwebenginecore_module_wrapper.cpp +) + +set(QtWebEngineCore_include_dirs + ${QtWebEngineCore_SOURCE_DIR} + ${QtWebEngineCore_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ) +set(QtWebEngineCore_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5WebEngineCore_LIBRARIES} + ${Qt5Core_LIBRARIES} + ) +set(QtWebEngineCore_deps QtCore) +create_pyside_module(QtWebEngineCore + QtWebEngineCore_include_dirs + QtWebEngineCore_libraries + QtWebEngineCore_deps + QtWebEngineCore_SOURCE_DIR + QtWebEngineCore_SRC + "") + diff --git a/sources/pyside2/PySide2/QtWebEngineCore/typesystem_webenginecore.xml b/sources/pyside2/PySide2/QtWebEngineCore/typesystem_webenginecore.xml new file mode 100644 index 0000000..e6faee9 --- /dev/null +++ b/sources/pyside2/PySide2/QtWebEngineCore/typesystem_webenginecore.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtWebEngineWidgets/CMakeLists.txt b/sources/pyside2/PySide2/QtWebEngineWidgets/CMakeLists.txt new file mode 100644 index 0000000..e0648c4 --- /dev/null +++ b/sources/pyside2/PySide2/QtWebEngineWidgets/CMakeLists.txt @@ -0,0 +1,58 @@ +project(QtWebEngineWidgets) + +set(QtWebEngineWidgets_SRC +${QtWebEngineWidgets_GEN_DIR}/qwebenginecertificateerror_wrapper.cpp +${QtWebEngineWidgets_GEN_DIR}/qwebenginedownloaditem_wrapper.cpp +#${QtWebEngineWidgets_GEN_DIR}/qwebenginehistory_wrapper.cpp +${QtWebEngineWidgets_GEN_DIR}/qwebenginehistoryitem_wrapper.cpp +${QtWebEngineWidgets_GEN_DIR}/qwebenginepage_wrapper.cpp +${QtWebEngineWidgets_GEN_DIR}/qwebengineprofile_wrapper.cpp +${QtWebEngineWidgets_GEN_DIR}/qwebenginescript_wrapper.cpp +${QtWebEngineWidgets_GEN_DIR}/qwebenginescriptcollection_wrapper.cpp +${QtWebEngineWidgets_GEN_DIR}/qwebenginesettings_wrapper.cpp +${QtWebEngineWidgets_GEN_DIR}/qwebengineview_wrapper.cpp +${QtWebEngineWidgets_GEN_DIR}/qwebenginecontextmenudata_wrapper.cpp +${QtWebEngineWidgets_GEN_DIR}/qwebenginefullscreenrequest_wrapper.cpp +# module is always needed +${QtWebEngineWidgets_GEN_DIR}/qtwebenginewidgets_module_wrapper.cpp +) + +set(QtWebEngineWidgets_include_dirs + ${QtWebEngineWidgets_SOURCE_DIR} + ${QtWebEngineWidgets_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} + ${Qt5WebChannel_INCLUDE_DIRS} + ${Qt5WebEngineWidgets_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtWidgets_GEN_DIR} + ${QtWebEngineWidgets_GEN_DIR} + ${QtNetwork_GEN_DIR} + ${QtWebChannel_GEN_DIR} + ${QtWebEngineCore_GEN_DIR} + ) +set(QtWebEngineWidgets_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5WebEngineWidgets_LIBRARIES} + ${Qt5Network_LIBRARIES} + ${Qt5WebChannel_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Core_LIBRARIES} + ) +set(QtWebEngineWidgets_deps QtGui QtWidgets QtNetwork QtWebChannel) +create_pyside_module(QtWebEngineWidgets + QtWebEngineWidgets_include_dirs + QtWebEngineWidgets_libraries + QtWebEngineWidgets_deps + QtWebEngineWidgets_SOURCE_DIR + QtWebEngineWidgets_SRC + "") + diff --git a/sources/pyside2/PySide2/QtWebEngineWidgets/typesystem_webenginewidgets.xml b/sources/pyside2/PySide2/QtWebEngineWidgets/typesystem_webenginewidgets.xml new file mode 100644 index 0000000..6e74184 --- /dev/null +++ b/sources/pyside2/PySide2/QtWebEngineWidgets/typesystem_webenginewidgets.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtWebKit/CMakeLists.txt b/sources/pyside2/PySide2/QtWebKit/CMakeLists.txt new file mode 100644 index 0000000..78f865c --- /dev/null +++ b/sources/pyside2/PySide2/QtWebKit/CMakeLists.txt @@ -0,0 +1,39 @@ +project(QtWebKit) + +set(QtWebKit_SRC +${QtWebKit_GEN_DIR}/webcore_wrapper.cpp +# module is always needed +${QtWebKit_GEN_DIR}/qtwebkit_module_wrapper.cpp +) + +set(QtWebKit_include_dirs ${QtWebKit_SOURCE_DIR} + ${QtWebKit_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} + ${Qt5WebKit_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtWidgets_GEN_DIR} + ${QtNetwork_GEN_DIR} + ) +set(QtWebKit_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5WebKit_LIBRARIES} + ${Qt5Network_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Core_LIBRARIES} + ) +set(QtWebKit_deps QtGui QtNetwork) +create_pyside_module(QtWebKit + QtWebKit_include_dirs + QtWebKit_libraries + QtWebKit_deps + QtWebKit_SOURCE_DIR + QtWebKit_SRC + "") + diff --git a/sources/pyside2/PySide2/QtWebKit/typesystem_webkit.xml b/sources/pyside2/PySide2/QtWebKit/typesystem_webkit.xml new file mode 100644 index 0000000..5feb613 --- /dev/null +++ b/sources/pyside2/PySide2/QtWebKit/typesystem_webkit.xml @@ -0,0 +1,49 @@ + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtWebKitWidgets/CMakeLists.txt b/sources/pyside2/PySide2/QtWebKitWidgets/CMakeLists.txt new file mode 100644 index 0000000..cd7aa32 --- /dev/null +++ b/sources/pyside2/PySide2/QtWebKitWidgets/CMakeLists.txt @@ -0,0 +1,70 @@ +project(QtWebKitWidgets) + +set(QtWebKitWidgets_SRC +${QtWebKitWidgets_GEN_DIR}/qgraphicswebview_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebdatabase_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebelement_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebelementcollection_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebframe_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebhistory_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebhistoryinterface_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebhistoryitem_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebhittestresult_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebinspector_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebpage_choosemultiplefilesextensionoption_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebpage_choosemultiplefilesextensionreturn_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebpage_errorpageextensionoption_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebpage_errorpageextensionreturn_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebpage_extensionoption_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebpage_extensionreturn_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebpage_viewportattributes_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebpage_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebpluginfactory_mimetype_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebpluginfactory_plugin_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebpluginfactory_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebsecurityorigin_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebsettings_wrapper.cpp +${QtWebKitWidgets_GEN_DIR}/qwebview_wrapper.cpp +# module is always needed +${QtWebKitWidgets_GEN_DIR}/qtwebkitwidgets_module_wrapper.cpp +) + +set(QtWebKitWidgets_include_dirs + ${QtWebKitWidgets_SOURCE_DIR} + ${QtWebKitWidgets_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5WebKit_INCLUDE_DIRS} + ${Qt5PrintSupport_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} + ${Qt5WebKitWidgets_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtWidgets_GEN_DIR} + ${QtPrintSupport_GEN_DIR} + ${QtWebKit_GEN_DIR} + ${QtNetwork_GEN_DIR} + ) +set(QtWebKitWidgets_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5WebKit_LIBRARIES} + ${Qt5WebKitWidgets_LIBRARIES} + ${Qt5Network_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Core_LIBRARIES} + ) +set(QtWebKitWidgets_deps QtWidgets QtPrintSupport QtNetwork) +create_pyside_module(QtWebKitWidgets + QtWebKitWidgets_include_dirs + QtWebKitWidgets_libraries + QtWebKitWidgets_deps + QtWebKitWidgets_SOURCE_DIR + QtWebKitWidgets_SRC + "") + diff --git a/sources/pyside2/PySide2/QtWebKitWidgets/typesystem_webkitwidgets.xml b/sources/pyside2/PySide2/QtWebKitWidgets/typesystem_webkitwidgets.xml new file mode 100644 index 0000000..74a9625 --- /dev/null +++ b/sources/pyside2/PySide2/QtWebKitWidgets/typesystem_webkitwidgets.xml @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SbkObject* _pyReturn = reinterpret_cast<SbkObject*>(%PYARG_0); + if (!Shiboken::Object::hasParentInfo(_pyReturn)) + Shiboken::Object::setParent(%PYSELF, %PYARG_0); + + + + + + + + + + + + + return %CPPSELF.count(); + + + + + if (_i < 0 || _i >= %CPPSELF.count()) { + PyErr_SetString(PyExc_IndexError, "index out of bounds"); + return 0; + } + QWebElement element = %CPPSELF.at(_i); + return %CONVERTTOPYTHON[QWebElement](element); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QString _local; + QString* %4 = &_local; + + + + + + Shiboken::AutoDecRef pyRes(PySequence_GetItem(%PYARG_0, 0)); + Shiboken::AutoDecRef pyStr(PySequence_GetItem(%PYARG_0, 1)); + %RETURN_TYPE %out = %CONVERTTOCPP[%RETURN_TYPE](pyRes); + *%4 = %CONVERTTOCPP[QString](pyStr); + + + %PYARG_0 = PyTuple_New(2); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](%0)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QString](*%4)); + + + + + + + static int _signalIndex = -1; + static QMetaMethod _m; + + if (_signalIndex == -1) { + _signalIndex = QWebPage::staticMetaObject.indexOfSlot("shouldInterruptJavaScript()"); + _m = QWebPage::staticMetaObject.method(_signalIndex); + } + + if (_signalIndex == id) { + Shiboken::GilState gil; + PyObject* self = (PyObject*)Shiboken::BindingManager::instance().retrieveWrapper(this); + if (self) { + Shiboken::AutoDecRef _pyMethod(PyObject_GetAttrString(self, "shouldInterruptJavaScript")); + return PySide::SignalManager::callPythonMetaMethod(_m, args, _pyMethod, false); + } + } + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtWebSockets/CMakeLists.txt b/sources/pyside2/PySide2/QtWebSockets/CMakeLists.txt new file mode 100644 index 0000000..495fd4e --- /dev/null +++ b/sources/pyside2/PySide2/QtWebSockets/CMakeLists.txt @@ -0,0 +1,41 @@ +project(QtWebSockets) + +set(QtWebSockets_SRC +${QtWebSockets_GEN_DIR}/qmaskgenerator_wrapper.cpp +${QtWebSockets_GEN_DIR}/qwebsocket_wrapper.cpp +${QtWebSockets_GEN_DIR}/qwebsocketcorsauthenticator_wrapper.cpp +${QtWebSockets_GEN_DIR}/qwebsocketprotocol_wrapper.cpp +${QtWebSockets_GEN_DIR}/qwebsocketserver_wrapper.cpp +# module is always needed +${QtWebSockets_GEN_DIR}/qtwebsockets_module_wrapper.cpp +) + +set(QtWebSockets_include_dirs ${QtWebSockets_SOURCE_DIR} + ${QtWebSockets_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} + ${Qt5WebSockets_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtWebSockets_GEN_DIR} + ${QtNetwork_GEN_DIR} + ) +set(QtWebSockets_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5WebSockets_LIBRARIES} + ${Qt5Network_LIBRARIES} + ${Qt5Core_LIBRARIES} + ) + +set(QtWebSockets_deps QtNetwork) + +create_pyside_module(QtWebSockets + QtWebSockets_include_dirs + QtWebSockets_libraries + QtWebSockets_deps + QtWebSockets_SOURCE_DIR + QtWebSockets_SRC + "") diff --git a/sources/pyside2/PySide2/QtWebSockets/typesystem_websockets.xml b/sources/pyside2/PySide2/QtWebSockets/typesystem_websockets.xml new file mode 100644 index 0000000..6b26ccd --- /dev/null +++ b/sources/pyside2/PySide2/QtWebSockets/typesystem_websockets.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtWidgets/CMakeLists.txt b/sources/pyside2/PySide2/QtWidgets/CMakeLists.txt new file mode 100644 index 0000000..dee7974 --- /dev/null +++ b/sources/pyside2/PySide2/QtWidgets/CMakeLists.txt @@ -0,0 +1,248 @@ +project(QtWidgets) + + +set(QtWidgets_OPTIONAL_SRC ) +set(QtWidgets_DROPPED_ENTRIES ) +## XXX check if these conditionals need to be done elsewhere +check_qt_class(QtWidgets QGtkStyle QtWidgets_OPTIONAL_SRC QtWidgets_DROPPED_ENTRIES) +check_qt_class(QtWidgets QMacStyle QtWidgets_OPTIONAL_SRC QtWidgets_DROPPED_ENTRIES) + +set(QtWidgets_SRC +${QtWidgets_GEN_DIR}/qaccessiblewidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qabstractbutton_wrapper.cpp +${QtWidgets_GEN_DIR}/qabstractgraphicsshapeitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qabstractitemdelegate_wrapper.cpp +${QtWidgets_GEN_DIR}/qabstractitemview_wrapper.cpp +${QtWidgets_GEN_DIR}/qabstractscrollarea_wrapper.cpp +${QtWidgets_GEN_DIR}/qabstractslider_wrapper.cpp +${QtWidgets_GEN_DIR}/qabstractspinbox_wrapper.cpp +${QtWidgets_GEN_DIR}/qaction_wrapper.cpp +${QtWidgets_GEN_DIR}/qactiongroup_wrapper.cpp +${QtWidgets_GEN_DIR}/qapplication_wrapper.cpp +${QtWidgets_GEN_DIR}/qboxlayout_wrapper.cpp +${QtWidgets_GEN_DIR}/qbuttongroup_wrapper.cpp +${QtWidgets_GEN_DIR}/qcalendarwidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qcheckbox_wrapper.cpp +${QtWidgets_GEN_DIR}/qcolordialog_wrapper.cpp +${QtWidgets_GEN_DIR}/qcolormap_wrapper.cpp +${QtWidgets_GEN_DIR}/qcolumnview_wrapper.cpp +${QtWidgets_GEN_DIR}/qcombobox_wrapper.cpp +${QtWidgets_GEN_DIR}/qcommandlinkbutton_wrapper.cpp +${QtWidgets_GEN_DIR}/qcommonstyle_wrapper.cpp +${QtWidgets_GEN_DIR}/qcompleter_wrapper.cpp +${QtWidgets_GEN_DIR}/qdatawidgetmapper_wrapper.cpp +${QtWidgets_GEN_DIR}/qdateedit_wrapper.cpp +${QtWidgets_GEN_DIR}/qdatetimeedit_wrapper.cpp +${QtWidgets_GEN_DIR}/qdesktopwidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qdial_wrapper.cpp +${QtWidgets_GEN_DIR}/qdialog_wrapper.cpp +${QtWidgets_GEN_DIR}/qdialogbuttonbox_wrapper.cpp +${QtWidgets_GEN_DIR}/qdirmodel_wrapper.cpp +${QtWidgets_GEN_DIR}/qdockwidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qdoublespinbox_wrapper.cpp +${QtWidgets_GEN_DIR}/qerrormessage_wrapper.cpp +${QtWidgets_GEN_DIR}/qfiledialog_wrapper.cpp +${QtWidgets_GEN_DIR}/qfileiconprovider_wrapper.cpp +${QtWidgets_GEN_DIR}/qfilesystemmodel_wrapper.cpp +${QtWidgets_GEN_DIR}/qfocusframe_wrapper.cpp +${QtWidgets_GEN_DIR}/qfontcombobox_wrapper.cpp +${QtWidgets_GEN_DIR}/qfontdialog_wrapper.cpp +${QtWidgets_GEN_DIR}/qformlayout_wrapper.cpp +${QtWidgets_GEN_DIR}/qframe_wrapper.cpp +${QtWidgets_GEN_DIR}/qgesture_wrapper.cpp +${QtWidgets_GEN_DIR}/qgestureevent_wrapper.cpp +${QtWidgets_GEN_DIR}/qgesturerecognizer_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsanchor_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsanchorlayout_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsblureffect_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicscolorizeeffect_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsdropshadoweffect_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicseffect_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsellipseitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsgridlayout_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsitemanimation_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsitemgroup_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicslayout_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicslayoutitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicslinearlayout_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicslineitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsobject_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsopacityeffect_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicspathitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicspixmapitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicspolygonitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsproxywidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsrectitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsrotation_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsscale_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsscene_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsscenecontextmenuevent_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsscenedragdropevent_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicssceneevent_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsscenehelpevent_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsscenehoverevent_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsscenemouseevent_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsscenemoveevent_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicssceneresizeevent_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsscenewheelevent_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicssimpletextitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicstextitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicstransform_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicsview_wrapper.cpp +${QtWidgets_GEN_DIR}/qgraphicswidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qgridlayout_wrapper.cpp +${QtWidgets_GEN_DIR}/qgroupbox_wrapper.cpp +${QtWidgets_GEN_DIR}/qhboxlayout_wrapper.cpp +${QtWidgets_GEN_DIR}/qheaderview_wrapper.cpp +${QtWidgets_GEN_DIR}/qinputdialog_wrapper.cpp +${QtWidgets_GEN_DIR}/qitemdelegate_wrapper.cpp +${QtWidgets_GEN_DIR}/qitemeditorcreatorbase_wrapper.cpp +${QtWidgets_GEN_DIR}/qitemeditorfactory_wrapper.cpp +${QtWidgets_GEN_DIR}/qkeyeventtransition_wrapper.cpp +${QtWidgets_GEN_DIR}/qkeysequenceedit_wrapper.cpp +${QtWidgets_GEN_DIR}/qlabel_wrapper.cpp +${QtWidgets_GEN_DIR}/qlayout_wrapper.cpp +${QtWidgets_GEN_DIR}/qlayoutitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qlcdnumber_wrapper.cpp +${QtWidgets_GEN_DIR}/qlineedit_wrapper.cpp +${QtWidgets_GEN_DIR}/qlistview_wrapper.cpp +${QtWidgets_GEN_DIR}/qlistwidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qlistwidgetitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qmainwindow_wrapper.cpp +${QtWidgets_GEN_DIR}/qmdiarea_wrapper.cpp +${QtWidgets_GEN_DIR}/qmdisubwindow_wrapper.cpp +${QtWidgets_GEN_DIR}/qmenu_wrapper.cpp +${QtWidgets_GEN_DIR}/qmenubar_wrapper.cpp +${QtWidgets_GEN_DIR}/qmessagebox_wrapper.cpp +${QtWidgets_GEN_DIR}/qmouseeventtransition_wrapper.cpp +${QtWidgets_GEN_DIR}/qopenglwidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qpangesture_wrapper.cpp +${QtWidgets_GEN_DIR}/qpinchgesture_wrapper.cpp +${QtWidgets_GEN_DIR}/qplaintextdocumentlayout_wrapper.cpp +${QtWidgets_GEN_DIR}/qplaintextedit_wrapper.cpp +${QtWidgets_GEN_DIR}/qprogressbar_wrapper.cpp +${QtWidgets_GEN_DIR}/qprogressdialog_wrapper.cpp +${QtWidgets_GEN_DIR}/qproxystyle_wrapper.cpp +${QtWidgets_GEN_DIR}/qpushbutton_wrapper.cpp +${QtWidgets_GEN_DIR}/qradiobutton_wrapper.cpp +${QtWidgets_GEN_DIR}/qrubberband_wrapper.cpp +${QtWidgets_GEN_DIR}/qscrollarea_wrapper.cpp +${QtWidgets_GEN_DIR}/qscrollbar_wrapper.cpp +${QtWidgets_GEN_DIR}/qscroller_wrapper.cpp +${QtWidgets_GEN_DIR}/qscrollerproperties_wrapper.cpp +${QtWidgets_GEN_DIR}/qshortcut_wrapper.cpp +${QtWidgets_GEN_DIR}/qsizegrip_wrapper.cpp +${QtWidgets_GEN_DIR}/qsizepolicy_wrapper.cpp +${QtWidgets_GEN_DIR}/qslider_wrapper.cpp +${QtWidgets_GEN_DIR}/qspaceritem_wrapper.cpp +${QtWidgets_GEN_DIR}/qspinbox_wrapper.cpp +${QtWidgets_GEN_DIR}/qsplashscreen_wrapper.cpp +${QtWidgets_GEN_DIR}/qsplitter_wrapper.cpp +${QtWidgets_GEN_DIR}/qsplitterhandle_wrapper.cpp +${QtWidgets_GEN_DIR}/qstackedlayout_wrapper.cpp +${QtWidgets_GEN_DIR}/qstackedwidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qstatusbar_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyle_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleditemdelegate_wrapper.cpp +${QtWidgets_GEN_DIR}/qstylefactory_wrapper.cpp +${QtWidgets_GEN_DIR}/qstylehintreturn_wrapper.cpp +${QtWidgets_GEN_DIR}/qstylehintreturnmask_wrapper.cpp +${QtWidgets_GEN_DIR}/qstylehintreturnvariant_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoption_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptionbutton_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptioncombobox_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptioncomplex_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptiondockwidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptionfocusrect_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptionframe_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptiongraphicsitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptiongroupbox_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptionheader_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptionmenuitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptionprogressbar_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptionrubberband_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptionsizegrip_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptionslider_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptionspinbox_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptiontab_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptiontabbarbase_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptiontabwidgetframe_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptiontitlebar_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptiontoolbar_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptiontoolbox_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptiontoolbutton_wrapper.cpp +${QtWidgets_GEN_DIR}/qstyleoptionviewitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qstylepainter_wrapper.cpp +${QtWidgets_GEN_DIR}/qswipegesture_wrapper.cpp +${QtWidgets_GEN_DIR}/qsystemtrayicon_wrapper.cpp +${QtWidgets_GEN_DIR}/qtabbar_wrapper.cpp +${QtWidgets_GEN_DIR}/qtableview_wrapper.cpp +${QtWidgets_GEN_DIR}/qtablewidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qtablewidgetitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qtablewidgetselectionrange_wrapper.cpp +${QtWidgets_GEN_DIR}/qtabwidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qtapandholdgesture_wrapper.cpp +${QtWidgets_GEN_DIR}/qtapgesture_wrapper.cpp +${QtWidgets_GEN_DIR}/qtextbrowser_wrapper.cpp +${QtWidgets_GEN_DIR}/qtextedit_extraselection_wrapper.cpp +${QtWidgets_GEN_DIR}/qtextedit_wrapper.cpp +${QtWidgets_GEN_DIR}/qtilerules_wrapper.cpp +${QtWidgets_GEN_DIR}/qtimeedit_wrapper.cpp +${QtWidgets_GEN_DIR}/qtoolbar_wrapper.cpp +${QtWidgets_GEN_DIR}/qtoolbox_wrapper.cpp +${QtWidgets_GEN_DIR}/qtoolbutton_wrapper.cpp +${QtWidgets_GEN_DIR}/qtooltip_wrapper.cpp +${QtWidgets_GEN_DIR}/qtreeview_wrapper.cpp +${QtWidgets_GEN_DIR}/qtreewidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qtreewidgetitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qtreewidgetitemiterator_wrapper.cpp +${QtWidgets_GEN_DIR}/qundocommand_wrapper.cpp +${QtWidgets_GEN_DIR}/qundogroup_wrapper.cpp +${QtWidgets_GEN_DIR}/qundostack_wrapper.cpp +${QtWidgets_GEN_DIR}/qundoview_wrapper.cpp +${QtWidgets_GEN_DIR}/qvboxlayout_wrapper.cpp +${QtWidgets_GEN_DIR}/qwhatsthis_wrapper.cpp +${QtWidgets_GEN_DIR}/qwidget_wrapper.cpp +${QtWidgets_GEN_DIR}/qwidgetaction_wrapper.cpp +${QtWidgets_GEN_DIR}/qwidgetitem_wrapper.cpp +${QtWidgets_GEN_DIR}/qwizard_wrapper.cpp +${QtWidgets_GEN_DIR}/qwizardpage_wrapper.cpp + +${SPECIFIC_OS_FILES} +# module is always needed +${QtWidgets_GEN_DIR}/qtwidgets_module_wrapper.cpp +) + +configure_file("${QtWidgets_SOURCE_DIR}/typesystem_widgets.xml.in" + "${QtWidgets_BINARY_DIR}/typesystem_widgets.xml" @ONLY) + +set(QtWidgets_include_dirs ${QtWidgets_SOURCE_DIR} + ${QtWidgets_BINARY_DIR} + ${pyside2_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ) +set(QtWidgets_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ) +set(QtWidgets_deps QtGui) + +create_pyside_module(QtWidgets + QtWidgets_include_dirs + QtWidgets_libraries + QtWidgets_deps + QtWidgets_SOURCE_DIR + QtWidgets_SRC + "" + ${QtWidgets_BINARY_DIR}/typesystem_widgets.xml) diff --git a/sources/pyside2/PySide2/QtWidgets/glue/qapplication_init.cpp b/sources/pyside2/PySide2/QtWidgets/glue/qapplication_init.cpp new file mode 100644 index 0000000..aef11f2 --- /dev/null +++ b/sources/pyside2/PySide2/QtWidgets/glue/qapplication_init.cpp @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +static void QApplicationConstructor(PyObject *self, PyObject *pyargv, QApplicationWrapper **cptr) +{ + static int argc; + static char **argv; + PyObject *stringlist = PyTuple_GET_ITEM(pyargv, 0); + if (Shiboken::listToArgcArgv(stringlist, &argc, &argv, "PySideApp")) { + *cptr = new QApplicationWrapper(argc, argv, 0); + Shiboken::Object::releaseOwnership(reinterpret_cast(self)); + PySide::registerCleanupFunction(&PySide::destroyQCoreApplication); + } +} diff --git a/sources/pyside2/PySide2/QtWidgets/glue/qlayout_help_functions.cpp b/sources/pyside2/PySide2/QtWidgets/glue/qlayout_help_functions.cpp new file mode 100644 index 0000000..d542b88 --- /dev/null +++ b/sources/pyside2/PySide2/QtWidgets/glue/qlayout_help_functions.cpp @@ -0,0 +1,161 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +void addLayoutOwnership(QLayout* layout, QLayoutItem* item); +void removeLayoutOwnership(QLayout* layout, QWidget* widget); + +inline QByteArray retrieveObjectName(PyObject* obj) +{ + Shiboken::AutoDecRef objName(PyObject_Str(obj)); + return Shiboken::String::toCString(objName); +} + +inline void addLayoutOwnership(QLayout* layout, QWidget* widget) +{ + //transfer ownership to parent widget + QWidget *lw = layout->parentWidget(); + QWidget *pw = widget->parentWidget(); + + Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QWidget*](widget)); + + //Transfer parent to layout widget + if (pw && lw && pw != lw) + Shiboken::Object::setParent(0, pyChild); + + if (!lw && !pw) { + //keep the reference while the layout is orphan + Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](layout)); + Shiboken::Object::keepReference(reinterpret_cast(pyParent.object()), retrieveObjectName(pyParent).data(), pyChild, true); + } else { + if (!lw) + lw = pw; + Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](lw)); + Shiboken::Object::setParent(pyParent, pyChild); + } +} + +inline void addLayoutOwnership(QLayout* layout, QLayout* other) +{ + //transfer all children widgets from other to layout parent widget + QWidget* parent = layout->parentWidget(); + if (!parent) { + //keep the reference while the layout is orphan + Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QLayout*](layout)); + Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayout*](other)); + Shiboken::Object::keepReference(reinterpret_cast(pyParent.object()), retrieveObjectName(pyParent).data(), pyChild, true); + return; + } + + for (int i=0, i_max=other->count(); i < i_max; i++) { + QLayoutItem* item = other->itemAt(i); + if (PyErr_Occurred() || !item) + return; + addLayoutOwnership(layout, item); + } + + Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QLayout*](layout)); + Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayout*](other)); + Shiboken::Object::setParent(pyParent, pyChild); +} + +inline void addLayoutOwnership(QLayout* layout, QLayoutItem* item) +{ + if (!item) + return; + + QWidget* w = item->widget(); + if (w) + addLayoutOwnership(layout, w); + else { + QLayout* l = item->layout(); + if (l) + addLayoutOwnership(layout, l); + } + + Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QLayout*](layout)); + Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayoutItem*](item)); + Shiboken::Object::setParent(pyParent, pyChild); +} + +static void removeWidgetFromLayout(QLayout* layout, QWidget* widget) +{ + QWidget* parent = widget->parentWidget(); + + if (!parent) { + //remove reference on layout + Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](layout)); + Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QWidget*](widget)); + Shiboken::Object::removeReference(reinterpret_cast(pyParent.object()), retrieveObjectName(pyParent).data(), pyChild); + } else { + //give the ownership to parent + Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](parent)); + Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QWidget*](widget)); + Shiboken::Object::setParent(pyParent, pyChild); + } +} + +inline void removeLayoutOwnership(QLayout* layout, QLayoutItem* item) +{ + QWidget* w = item->widget(); + if (w) + removeWidgetFromLayout(layout, w); + else { + QLayout* l = item->layout(); + if (l && item != l) + removeLayoutOwnership(layout, l); + } + + Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayoutItem*](item)); + Shiboken::Object::invalidate(pyChild); + Shiboken::Object::setParent(0, pyChild); +} + +inline void removeLayoutOwnership(QLayout* layout, QWidget* widget) +{ + if (!widget) + return; + + for (int i=0, i_max=layout->count(); i < i_max; i++) { + QLayoutItem* item = layout->itemAt(i); + if (PyErr_Occurred() || !item) + return; + if (item->widget() == widget) + removeLayoutOwnership(layout, item); + } +} diff --git a/sources/pyside2/PySide2/QtWidgets/glue/qmenu_glue.cpp b/sources/pyside2/PySide2/QtWidgets/glue/qmenu_glue.cpp new file mode 100644 index 0000000..4e9c8c3 --- /dev/null +++ b/sources/pyside2/PySide2/QtWidgets/glue/qmenu_glue.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +inline PyObject* addActionWithPyObject(QMenu* self, const QIcon& icon, const QString& text, PyObject* callback, const QKeySequence& shortcut) +{ + QAction* act = new QAction(text, self); + + if (!icon.isNull()) + act->setIcon(icon); + + if (!shortcut.isEmpty()) + act->setShortcut(shortcut); + + self->addAction(act); + + PyObject* pyAct = %CONVERTTOPYTHON[QAction*](act); + Shiboken::AutoDecRef result(PyObject_CallMethod(pyAct, + const_cast("connect"), + const_cast("OsO"), + pyAct, + SIGNAL(triggered()), callback)); + if (result.isNull()) { + Py_DECREF(pyAct); + return 0; + } + + return pyAct; +} diff --git a/sources/pyside2/PySide2/QtWidgets/glue/qmenubar_glue.cpp b/sources/pyside2/PySide2/QtWidgets/glue/qmenubar_glue.cpp new file mode 100644 index 0000000..8cdbc2e --- /dev/null +++ b/sources/pyside2/PySide2/QtWidgets/glue/qmenubar_glue.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +inline PyObject* +addActionWithPyObject(QMenuBar* self, const QString& text, PyObject* callback) +{ + QAction* act = new QAction(text, self); + + self->addAction(act); + + PyObject* pyAct = %CONVERTTOPYTHON[QAction*](act); + PyObject* result = PyObject_CallMethod(pyAct, + const_cast("connect"), + const_cast("OsO"), + pyAct, + SIGNAL(triggered(bool)), callback); + + if (result == 0 || result == Py_False) { + if (result) + Py_DECREF(result); + Py_DECREF(pyAct); + return 0; + } + + return pyAct; +} diff --git a/sources/pyside2/PySide2/QtWidgets/glue/qwidget_glue.cpp b/sources/pyside2/PySide2/QtWidgets/glue/qwidget_glue.cpp new file mode 100644 index 0000000..674e34c --- /dev/null +++ b/sources/pyside2/PySide2/QtWidgets/glue/qwidget_glue.cpp @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +static QString retrieveObjectName(PyObject *obj) +{ + Shiboken::AutoDecRef objName(PyObject_Str(obj)); + return QString(Shiboken::String::toCString(objName)); +} + + +/** + * Tranfer objects ownership from layout to widget + **/ +static inline void qwidgetReparentLayout(QWidget *parent, QLayout *layout) +{ + Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](parent)); + + for (int i=0; i < layout->count(); i++) { + QLayoutItem* item = layout->itemAt(i); + if (PyErr_Occurred() || !item) + return; + + QWidget* w = item->widget(); + if (w) { + QWidget* pw = w->parentWidget(); + if (pw != parent) { + Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QWidget*](w)); + Shiboken::Object::setParent(pyParent, pyChild); + } + } else { + QLayout* l = item->layout(); + if (l) + qwidgetReparentLayout(parent, l); + } + } + + Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayout*](layout)); + Shiboken::Object::setParent(pyParent, pyChild); + //remove previous references + Shiboken::Object::keepReference(reinterpret_cast(pyChild.object()), qPrintable(retrieveObjectName(pyChild)), Py_None); +} + +static inline void qwidgetSetLayout(QWidget *self, QLayout *layout) +{ + if (!layout || self->layout()) + return; + + QObject* oldParent = layout->parent(); + if (oldParent && oldParent != self) { + if (oldParent->isWidgetType()) { + // remove old parent policy + Shiboken::AutoDecRef pyLayout(%CONVERTTOPYTHON[QLayout*](layout)); + Shiboken::Object::setParent(Py_None, pyLayout); + } else { + PyErr_Format(PyExc_RuntimeError, "QWidget::setLayout: Attempting to set QLayout \"%s\" on %s \"%s\", when the QLayout already has a parent", + qPrintable(layout->objectName()), self->metaObject()->className(), qPrintable(self->objectName())); + return; + } + } + + if (oldParent != self) { + qwidgetReparentLayout(self, layout); + if (PyErr_Occurred()) + return; + + self->setLayout(layout); + } +} diff --git a/sources/pyside2/PySide2/QtWidgets/typesystem_widgets.xml.in b/sources/pyside2/PySide2/QtWidgets/typesystem_widgets.xml.in new file mode 100644 index 0000000..ea57b78 --- /dev/null +++ b/sources/pyside2/PySide2/QtWidgets/typesystem_widgets.xml.in @@ -0,0 +1,46 @@ + + + + + + + diff --git a/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_common.xml b/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_common.xml new file mode 100644 index 0000000..76b3dd1 --- /dev/null +++ b/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_common.xml @@ -0,0 +1,3741 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + if (**%CPPSELF) { + QTreeWidgetItemIterator *%0 = new QTreeWidgetItemIterator((*%CPPSELF)++); + %PYARG_0 = %CONVERTTOPYTHON[QTreeWidgetItemIterator*](%0); + } + + + + + + QTreeWidgetItem *%0 = %CPPSELF.operator*(); + %PYARG_0 = %CONVERTTOPYTHON[QTreeWidgetItem*](%0); + Shiboken::Object::releaseOwnership(%PYARG_0); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PyObject *userTypeConstant = PyInt_FromLong(QGraphicsItem::UserType); + PyDict_SetItemString(reinterpret_cast<PyTypeObject *>(Sbk_QGraphicsItem_TypeF())->tp_dict, "UserType", userTypeConstant); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QGraphicsItem *item_ = NULL; + %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&item_); + %PYARG_0 = PyTuple_New(2); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](retval_)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QGraphicsItem*](item_)); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shiboken::Object::releaseOwnership(%PYARG_2); + + + + + + + + //this function is static we need keep ref to default value, to be able to call python virtual functions + static PyObject* _defaultValue = 0; + %CPPSELF.%FUNCTION_NAME(%1); + Py_INCREF(%PYARG_1); + if (_defaultValue) + Py_DECREF(_defaultValue); + + _defaultValue = %PYARG_1; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %PYARG_0 = addActionWithPyObject(%CPPSELF, QIcon(), %1, %2, %3); + + + + + + + + + + + + + %PYARG_0 = addActionWithPyObject(%CPPSELF, %1, %2, %3, %4); + + + + + + %CPPSELF.addAction(%1); + + + + + + Shiboken::BindingManager& bm = Shiboken::BindingManager::instance(); + PyObject* pyObj; + foreach(QAction* act, %CPPSELF.actions()) { + if ((pyObj = (PyObject*)bm.retrieveWrapper(act)) != 0) { + Py_INCREF(pyObj); + Shiboken::Object::setParent(NULL, pyObj); + Shiboken::Object::invalidate(pyObj); + Py_DECREF(pyObj); + } + } + + + + + + + + + + + + + + + + + + + + %PYARG_0 = addActionWithPyObject(%CPPSELF, %1, %2); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + foreach(QAction *act, %CPPSELF.actions()) { + Shiboken::AutoDecRef pyAct(%CONVERTTOPYTHON[QAction*](act)); + Shiboken::Object::setParent(NULL, pyAct); + Shiboken::Object::invalidate(pyAct); + } + + + + + + %CPPSELF.addAction(%1); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %0 = new %TYPE(%1, %2); + + + Shiboken::AutoDecRef result(PyObject_CallMethod(%PYSELF, + const_cast<char *>("connect"), + const_cast<char *>("OsO"), + %PYSELF, SIGNAL(activated()), %PYARG_3) + ); + if (!result.isNull()) + Shiboken::Object::setParent(%PYARG_2, %PYSELF); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QWidget *_widget = %CPPSELF.widget(%1); + if (_widget) { + Shiboken::AutoDecRef pyWidget(%CONVERTTOPYTHON[QWidget*](_widget)); + Shiboken::Object::setParent(0, pyWidget); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + addLayoutOwnership(%CPPSELF, %0); + + + + + + removeLayoutOwnership(%CPPSELF, %1); + + + + + removeLayoutOwnership(%CPPSELF, %1); + + + + + + + + + + + + + + + + + + + + + addLayoutOwnership(%CPPSELF, %1); + + + + + + addLayoutOwnership(%CPPSELF, %1); + + + + + addLayoutOwnership(%CPPSELF, %1); + + + + + addLayoutOwnership(%CPPSELF, %1); + + + + + addLayoutOwnership(%CPPSELF, %1); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %CPPSELF.setAlignment(%1); + + + + + + + + + + + addLayoutOwnership(%CPPSELF, %2); + + + + + + + + + + + + addLayoutOwnership(%CPPSELF, %1); + + + + + + addLayoutOwnership(%CPPSELF, %1); + + + + + + addLayoutOwnership(%CPPSELF, %2); + + + + + addLayoutOwnership(%CPPSELF, %2); + + + + + addLayoutOwnership(%CPPSELF, %2); + + + + + addLayoutOwnership(%CPPSELF, %1); + + + + + addLayoutOwnership(%CPPSELF, %2); + + + + + + + + + + + + addLayoutOwnership(%CPPSELF, %0); + + + + + + + + addLayoutOwnership(%CPPSELF, %1); + + + + + + + + addLayoutOwnership(%CPPSELF, %1); + + + + + + + + addLayoutOwnership(%CPPSELF, %1); + + + + + + + + addLayoutOwnership(%CPPSELF, %1); + + + + + + + + + + + + + + addLayoutOwnership(%CPPSELF, %1); + + + + + + + + + + + + + + + + + + + + + int a, b, c, d; + %CPPSELF.%FUNCTION_NAME(%1, &a, &b, &c, &d); + %PYARG_0 = PyTuple_New(4); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[int](a)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[int](b)); + PyTuple_SET_ITEM(%PYARG_0, 2, %CONVERTTOPYTHON[int](c)); + PyTuple_SET_ITEM(%PYARG_0, 3, %CONVERTTOPYTHON[int](d)); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + int %out = PySequence_Size(%PYARG_1); + + + + + + + int numItems = PySequence_Size(%PYARG_1); + Shiboken::AutoArrayPointer<QGraphicsItem*> %out(numItems); + for (int i=0; i < numItems; i++) { + %out[i] = %CONVERTTOCPP[QGraphicsItem*](PySequence_Fast_GET_ITEM(%PYARG_1, i)); + } + + + + Shiboken::AutoDecRef object(PyList_New(0)); + for (int i=0, max=numItems; i < max; i++) { + PyList_Append(object, %CONVERTTOPYTHON[QGraphicsItem*](%in[i])); + } + PyObject *%out = object.object(); + + + + + + + Shiboken::AutoDecRef option_object(PyList_New(0)); + for (int i=0, max=numItems; i < max; i++) { + const QStyleOptionGraphicsItem* item = &%in[i]; + PyList_Append(option_object, %CONVERTTOPYTHON[QStyleOptionGraphicsItem](item)); + } + PyObject* %out = option_object.object(); + + + + int numOptions = PySequence_Size(%PYARG_2); + Shiboken::AutoArrayPointer<QStyleOptionGraphicsItem> %out(numOptions); + for (int i=0; i < numOptions; i++) { + %out[i] = %CONVERTTOCPP[QStyleOptionGraphicsItem](PySequence_Fast_GET_ITEM(%PYARG_1, i)); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QGraphicsItem* parentItem = %1->parentItem(); + Shiboken::AutoDecRef parent(%CONVERTTOPYTHON[QGraphicsItem*](parentItem)); + foreach (QGraphicsItem* item, %1->childItems()) + Shiboken::Object::setParent(parent, %CONVERTTOPYTHON[QGraphicsItem*](item)); + %BEGIN_ALLOW_THREADS + %CPPSELF.%FUNCTION_NAME(%1); + %END_ALLOW_THREADS + // the arg was destroyed by Qt. + Shiboken::Object::invalidate(%PYARG_1); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%1, %2); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + Shiboken::Object::keepReference((SbkObject*)%PYARG_0, "setWidget(QWidget*)1", %PYARG_1); + + + + + + + + + + + + + const QList<QGraphicsItem*> items = %CPPSELF.items(); + Shiboken::BindingManager& bm = Shiboken::BindingManager::instance(); + foreach (QGraphicsItem* item, items) { + SbkObject* obj = bm.retrieveWrapper(item); + if (obj) { + if (reinterpret_cast<PyObject*>(obj)->ob_refcnt > 1) // If the refcnt is 1 the object will vannish anyway. + Shiboken::Object::invalidate(obj); + Shiboken::Object::removeParent(obj); + } + } + %CPPSELF.%FUNCTION_NAME(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QTreeWidgetItem *rootItem = %CPPSELF.invisibleRootItem(); + Shiboken::BindingManager &bm = Shiboken::BindingManager::instance(); + for (int i = 0; i < rootItem->childCount(); ++i) { + QTreeWidgetItem *item = rootItem->child(i); + SbkObject* wrapper = bm.retrieveWrapper(item); + if (wrapper) + Shiboken::Object::setParent(0, reinterpret_cast<PyObject*>(wrapper)); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // Only call the parent function if this return some value + // the parent can be the TreeWidget + if (%0) + Shiboken::Object::setParent(%PYARG_0, %PYSELF); + + + + + + + + // Only call the parent function if this return some value + // the parent can be the TreeWidgetItem + if (%0) + Shiboken::Object::setParent(%PYARG_0, %PYSELF); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shiboken::BindingManager &bm = Shiboken::BindingManager::instance(); + PyObject *pyObj; + for (int i = 0; i < %CPPSELF.count(); i++) { + QListWidgetItem *item = %CPPSELF.item(i); + if ((pyObj = reinterpret_cast<PyObject*>(bm.retrieveWrapper(item))) != 0) { + Py_INCREF(pyObj); + Shiboken::Object::setParent(NULL, pyObj); + Shiboken::Object::invalidate(pyObj); + Py_DECREF(pyObj); + } + } + %CPPSELF.%FUNCTION_NAME(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shiboken::Object::keepReference(reinterpret_cast<SbkObject*>(%PYSELF), "__style__", %PYARG_1); + + + + + QStyle* myStyle = %CPPSELF->style(); + if (myStyle && qApp) { + %PYARG_0 = %CONVERTTOPYTHON[QStyle*](myStyle); + QStyle *appStyle = qApp->style(); + if (appStyle == myStyle) { + Shiboken::AutoDecRef pyApp(%CONVERTTOPYTHON[QApplication*](qApp)); + Shiboken::Object::setParent(pyApp, %PYARG_0); + Shiboken::Object::releaseOwnership(%PYARG_0); + } else { + Shiboken::Object::keepReference(reinterpret_cast<SbkObject*>(%PYSELF), "__style__", %PYARG_0); + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + qwidgetSetLayout(%CPPSELF, %1); + // %FUNCTION_NAME() - disable generation of function call. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QWidget* tab = %CPPSELF.widget(%1); + if (tab) { + Shiboken::AutoDecRef pyWidget(%CONVERTTOPYTHON[QWidget*](tab)); + %CPPSELF.%FUNCTION_NAME(%1); + } + + + + + Shiboken::BindingManager& bm = Shiboken::BindingManager::instance(); + for (int i = 0; i < %CPPSELF.count(); i++) { + QWidget* widget = %CPPSELF.widget(i); + if (bm.hasWrapper(widget)) { + Shiboken::AutoDecRef pyWidget(%CONVERTTOPYTHON[QWidget*](widget)); + Shiboken::Object::releaseOwnership(pyWidget); + } + } + %CPPSELF.%FUNCTION_NAME(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %CPPSELF.addAction(%1); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +:: + + def callback_int(value_as_int): + print 'int value changed:', repr(value_as_int) + + app = QApplication(sys.argv) + spinbox = QSpinBox() + spinbox.valueChanged[unicode].connect(callback_unicode) + spinbox.show() + sys.exit(app.exec_()) + + + + +:: + + def callback_unicode(value_as_unicode): + print 'unicode value changed:', repr(value_as_unicode) + + app = QApplication(sys.argv) + spinbox = QSpinBox() + spinbox.valueChanged[unicode].connect(callback_unicode) + spinbox.show() + sys.exit(app.exec_()) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QAction *action = %CPPSELF.addAction(%1, %2); + %PYARG_0 = %CONVERTTOPYTHON[QAction*](action); + Shiboken::AutoDecRef result(PyObject_CallMethod(%PYARG_0, + const_cast<char *>("connect"), + const_cast<char *>("OsO"), + %PYARG_0, SIGNAL(triggered()), %PYARG_3) + ); + + + + + + + + + + + + + + QAction *action = %CPPSELF.addAction(%1); + %PYARG_0 = %CONVERTTOPYTHON[QAction*](action); + Shiboken::AutoDecRef result(PyObject_CallMethod(%PYARG_0, + const_cast<char *>("connect"), + const_cast<char *>("OsO"), + %PYARG_0, SIGNAL(triggered()), %PYARG_2) + ); + + + + + + + + + + + + + + + %CPPSELF.addAction(%1); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QList<PyObject* > lst; + Shiboken::BindingManager& bm = Shiboken::BindingManager::instance(); + foreach(QToolButton* child, %CPPSELF.findChildren<QToolButton*>()) { + if (bm.hasWrapper(child)) { + PyObject* pyChild = %CONVERTTOPYTHON[QToolButton*](child); + Shiboken::Object::setParent(0, pyChild); + lst << pyChild; + } + } + + //Remove actions + foreach(QAction *act, %CPPSELF.actions()) { + Shiboken::AutoDecRef pyAct(%CONVERTTOPYTHON[QAction*](act)); + Shiboken::Object::setParent(NULL, pyAct); + Shiboken::Object::invalidate(pyAct); + } + + %CPPSELF.clear(); + foreach(PyObject* obj, lst) { + Shiboken::Object::invalidate(reinterpret_cast<SbkObject* >(obj)); + Py_XDECREF(obj); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QApplicationConstructor(%PYSELF, args, &%0); + + + + + PyObject *empty = PyTuple_New(2); + if (!PyTuple_SetItem(empty, 0, PyList_New(0))) { + QApplicationConstructor(%PYSELF, empty, &%0); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QWidget* _old = %CPPSELF.widget(); + if (_old) + Shiboken::Object::setParent(NULL, %CONVERTTOPYTHON[QWidget*](_old)); + %CPPSELF.%FUNCTION_NAME(%1); + Shiboken::Object::setParent(%PYSELF, %PYARG_1); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_mac.xml b/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_mac.xml new file mode 100644 index 0000000..b9aec39 --- /dev/null +++ b/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_mac.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_win.xml b/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_win.xml new file mode 100644 index 0000000..5bacf63 --- /dev/null +++ b/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_win.xml @@ -0,0 +1,42 @@ + + + diff --git a/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_x11.xml b/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_x11.xml new file mode 100644 index 0000000..5bacf63 --- /dev/null +++ b/sources/pyside2/PySide2/QtWidgets/typesystem_widgets_x11.xml @@ -0,0 +1,42 @@ + + + diff --git a/sources/pyside2/PySide2/QtWinExtras/CMakeLists.txt b/sources/pyside2/PySide2/QtWinExtras/CMakeLists.txt new file mode 100644 index 0000000..5932792 --- /dev/null +++ b/sources/pyside2/PySide2/QtWinExtras/CMakeLists.txt @@ -0,0 +1,45 @@ +project(QtWinExtras) + +set(QtWinExtras_SRC +${QtWinExtras_GEN_DIR}/qwincolorizationchangeevent_wrapper.cpp +${QtWinExtras_GEN_DIR}/qwincompositionchangeevent_wrapper.cpp +${QtWinExtras_GEN_DIR}/qwinevent_wrapper.cpp +${QtWinExtras_GEN_DIR}/qwinjumplist_wrapper.cpp +${QtWinExtras_GEN_DIR}/qwinjumplistcategory_wrapper.cpp +${QtWinExtras_GEN_DIR}/qwinjumplistitem_wrapper.cpp +#${QtWinExtras_GEN_DIR}/qwinmime_wrapper.cpp +${QtWinExtras_GEN_DIR}/qwintaskbarbutton_wrapper.cpp +${QtWinExtras_GEN_DIR}/qwintaskbarprogress_wrapper.cpp +${QtWinExtras_GEN_DIR}/qwinthumbnailtoolbar_wrapper.cpp +${QtWinExtras_GEN_DIR}/qwinthumbnailtoolbutton_wrapper.cpp + +# module is always needed +${QtWinExtras_GEN_DIR}/qtwinextras_module_wrapper.cpp +) + +set(QtWinExtras_include_dirs ${QtWinExtras_SOURCE_DIR} + ${QtWinExtras_BINARY_DIR} + ${Qt5WinExtras_INCLUDE_DIRS} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR}) + +set(QtWinExtras_libraries pyside2 + ${Qt5WinExtras_LIBRARIES} + ${SHIBOKEN_PYTHON_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES}) + +set(QtWinExtras_deps QtCore QtGui) + +create_pyside_module(QtWinExtras + QtWinExtras_include_dirs + QtWinExtras_libraries + QtWinExtras_deps + QtWinExtras_SOURCE_DIR + QtWinExtras_SRC + "") diff --git a/sources/pyside2/PySide2/QtWinExtras/typesystem_winextras.xml b/sources/pyside2/PySide2/QtWinExtras/typesystem_winextras.xml new file mode 100644 index 0000000..2ffd790 --- /dev/null +++ b/sources/pyside2/PySide2/QtWinExtras/typesystem_winextras.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtX11Extras/CMakeLists.txt b/sources/pyside2/PySide2/QtX11Extras/CMakeLists.txt new file mode 100644 index 0000000..4f01119 --- /dev/null +++ b/sources/pyside2/PySide2/QtX11Extras/CMakeLists.txt @@ -0,0 +1,37 @@ +project(QtX11Extras) + +set(QtX11Extras_SRC +${QtX11Extras_GEN_DIR}/qx11info_wrapper.cpp +# module is always needed +${QtX11Extras_GEN_DIR}/qtx11extras_module_wrapper.cpp +) + +configure_file("${QtX11Extras_SOURCE_DIR}/QtX11Extras_global.post.h.in" + "${QtX11Extras_BINARY_DIR}/QtX11Extras_global.post.h" @ONLY) + +set(QtX11Extras_include_dirs ${QtX11Extras_SOURCE_DIR} + ${QtX11Extras_BINARY_DIR} + ${Qt5X11Extras_INCLUDE_DIRS} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR}) + +set(QtX11Extras_libraries pyside2 + ${Qt5X11Extras_LIBRARIES} + ${SHIBOKEN_PYTHON_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES}) + +set(QtX11Extras_deps QtCore QtGui) + +create_pyside_module(QtX11Extras + QtX11Extras_include_dirs + QtX11Extras_libraries + QtX11Extras_deps + QtX11Extras_SOURCE_DIR + QtX11Extras_SRC + "") diff --git a/sources/pyside2/PySide2/QtX11Extras/QtX11Extras_global.post.h.in b/sources/pyside2/PySide2/QtX11Extras/QtX11Extras_global.post.h.in new file mode 100644 index 0000000..abdaf3d --- /dev/null +++ b/sources/pyside2/PySide2/QtX11Extras/QtX11Extras_global.post.h.in @@ -0,0 +1 @@ +#include diff --git a/sources/pyside2/PySide2/QtX11Extras/typesystem_x11extras.xml b/sources/pyside2/PySide2/QtX11Extras/typesystem_x11extras.xml new file mode 100644 index 0000000..5958f5a --- /dev/null +++ b/sources/pyside2/PySide2/QtX11Extras/typesystem_x11extras.xml @@ -0,0 +1,49 @@ + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtXml/CMakeLists.txt b/sources/pyside2/PySide2/QtXml/CMakeLists.txt new file mode 100644 index 0000000..9c724cf --- /dev/null +++ b/sources/pyside2/PySide2/QtXml/CMakeLists.txt @@ -0,0 +1,61 @@ +project(QtXml) + +set(QtXml_SRC +${QtXml_GEN_DIR}/qdomattr_wrapper.cpp +${QtXml_GEN_DIR}/qdomcdatasection_wrapper.cpp +${QtXml_GEN_DIR}/qdomcharacterdata_wrapper.cpp +${QtXml_GEN_DIR}/qdomcomment_wrapper.cpp +${QtXml_GEN_DIR}/qdomdocument_wrapper.cpp +${QtXml_GEN_DIR}/qdomdocumentfragment_wrapper.cpp +${QtXml_GEN_DIR}/qdomdocumenttype_wrapper.cpp +${QtXml_GEN_DIR}/qdomelement_wrapper.cpp +${QtXml_GEN_DIR}/qdomentity_wrapper.cpp +${QtXml_GEN_DIR}/qdomentityreference_wrapper.cpp +${QtXml_GEN_DIR}/qdomimplementation_wrapper.cpp +${QtXml_GEN_DIR}/qdomnamednodemap_wrapper.cpp +${QtXml_GEN_DIR}/qdomnode_wrapper.cpp +${QtXml_GEN_DIR}/qdomnodelist_wrapper.cpp +${QtXml_GEN_DIR}/qdomnotation_wrapper.cpp +${QtXml_GEN_DIR}/qdomprocessinginstruction_wrapper.cpp +${QtXml_GEN_DIR}/qdomtext_wrapper.cpp +${QtXml_GEN_DIR}/qxmlattributes_wrapper.cpp +${QtXml_GEN_DIR}/qxmlcontenthandler_wrapper.cpp +${QtXml_GEN_DIR}/qxmldeclhandler_wrapper.cpp +${QtXml_GEN_DIR}/qxmldefaulthandler_wrapper.cpp +${QtXml_GEN_DIR}/qxmldtdhandler_wrapper.cpp +${QtXml_GEN_DIR}/qxmlentityresolver_wrapper.cpp +${QtXml_GEN_DIR}/qxmlerrorhandler_wrapper.cpp +${QtXml_GEN_DIR}/qxmlinputsource_wrapper.cpp +${QtXml_GEN_DIR}/qxmllexicalhandler_wrapper.cpp +${QtXml_GEN_DIR}/qxmllocator_wrapper.cpp +${QtXml_GEN_DIR}/qxmlnamespacesupport_wrapper.cpp +${QtXml_GEN_DIR}/qxmlparseexception_wrapper.cpp +${QtXml_GEN_DIR}/qxmlreader_wrapper.cpp +${QtXml_GEN_DIR}/qxmlsimplereader_wrapper.cpp +# module is always needed +${QtXml_GEN_DIR}/qtxml_module_wrapper.cpp +) + +set(QtXml_include_dirs ${QtXml_SOURCE_DIR} + ${QtXml_BINARY_DIR} + ${CMAKE_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Xml_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QtCore_GEN_DIR} + ) +set(QtXml_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Xml_LIBRARIES}) +set(QtXml_deps QtCore) + +create_pyside_module(QtXml + QtXml_include_dirs + QtXml_libraries + QtXml_deps + QtXml_SOURCE_DIR + QtXml_SRC + "") diff --git a/sources/pyside2/PySide2/QtXml/typesystem_xml.xml b/sources/pyside2/PySide2/QtXml/typesystem_xml.xml new file mode 100644 index 0000000..3bfd7c6 --- /dev/null +++ b/sources/pyside2/PySide2/QtXml/typesystem_xml.xml @@ -0,0 +1,438 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QXmlInputSource* _qxmlinputsource_arg_ = 0; + %BEGIN_ALLOW_THREADS + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_); + %END_ALLOW_THREADS + %PYARG_0 = PyTuple_New(2); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](%0)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QXmlInputSource*](_qxmlinputsource_arg_)); + + + + + + + + + + + + + + + + + + + + + QXmlInputSource* _qxmlinputsource_arg_ = 0; + %BEGIN_ALLOW_THREADS + %RETURN_TYPE %0 = %CPPSELF.%TYPE::%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_); + %END_ALLOW_THREADS + %PYARG_0 = PyTuple_New(2); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](%0)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QXmlInputSource*](_qxmlinputsource_arg_)); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/QtXmlPatterns/CMakeLists.txt b/sources/pyside2/PySide2/QtXmlPatterns/CMakeLists.txt new file mode 100644 index 0000000..d279f43 --- /dev/null +++ b/sources/pyside2/PySide2/QtXmlPatterns/CMakeLists.txt @@ -0,0 +1,45 @@ +project(QtXmlPatterns) + +set(QtXmlPatterns_SRC +${QtXmlPatterns_GEN_DIR}/qabstractmessagehandler_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qabstracturiresolver_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qabstractxmlnodemodel_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qabstractxmlreceiver_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qsourcelocation_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qxmlformatter_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qxmlitem_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qxmlnamepool_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qxmlname_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qxmlnodemodelindex_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qxmlquery_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qxmlresultitems_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qxmlschemavalidator_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qxmlschema_wrapper.cpp +${QtXmlPatterns_GEN_DIR}/qxmlserializer_wrapper.cpp +## always needed +${QtXmlPatterns_GEN_DIR}/qtxmlpatterns_module_wrapper.cpp +) + +set(QtXmlPatterns_include_dirs ${QtXmlPatterns_SOURCE_DIR} + ${QtXmlPatterns_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5XmlPatterns_INCLUDE_DIRS} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${SHIBOKEN_INCLUDE_DIR} + ${libpyside_SOURCE_DIR} + ${QtCore_GEN_DIR} + ) +set(QtXmlPatterns_libraries pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5XmlPatterns_LIBRARIES}) +set(QtXmlPatterns_deps QtCore) + +create_pyside_module(QtXmlPatterns + QtXmlPatterns_include_dirs + QtXmlPatterns_libraries + QtXmlPatterns_deps + QtXmlPatterns_SOURCE_DIR + QtXmlPatterns_SRC + "") + diff --git a/sources/pyside2/PySide2/QtXmlPatterns/typesystem_xmlpatterns.xml b/sources/pyside2/PySide2/QtXmlPatterns/typesystem_xmlpatterns.xml new file mode 100644 index 0000000..f4e6908 --- /dev/null +++ b/sources/pyside2/PySide2/QtXmlPatterns/typesystem_xmlpatterns.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + QXmlSchema* %0 = new QXmlSchema(%CPPSELF.schema()); + %PYARG_0 = %CONVERTTOPYTHON[QXmlSchema*](%0); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/PySide2/__init__.py.in b/sources/pyside2/PySide2/__init__.py.in new file mode 100644 index 0000000..ab50ef7 --- /dev/null +++ b/sources/pyside2/PySide2/__init__.py.in @@ -0,0 +1,47 @@ +__all__ = list("Qt" + body for body in + "@all_module_shortnames@" + .split(";")) +__version__ = "@FINAL_PACKAGE_VERSION@" +__version_info__ = (@BINDING_API_MAJOR_VERSION@, @BINDING_API_MINOR_VERSION@, @BINDING_API_MICRO_VERSION@, "@BINDING_API_PRE_RELEASE_VERSION_TYPE@", "@BINDING_API_PRE_RELEASE_VERSION@") + +@PYSIDE_BUILD_DATE@ +@PYSIDE_BUILD_COMMIT_DATE@ +@PYSIDE_BUILD_COMMIT_HASH@ +@PYSIDE_BUILD_COMMIT_HASH_DESCRIBED@ + +# Timestamp used for snapshot build, which is part of snapshot package version. +@PYSIDE_SETUP_PY_PACKAGE_TIMESTAMP_ASSIGNMENT@ + +def _setupQtDirectories(): + import sys + import os + + pyside_package_dir = os.path.abspath(os.path.dirname(__file__)) + # Used by signature module. + os.environ["PYSIDE_PACKAGE_DIR"] = pyside_package_dir + + if sys.platform == 'win32': + # PATH has to contain the package directory, otherwise plugins + # won't be able to find their required Qt libraries (e.g. the + # svg image plugin won't find Qt5Svg.dll). + os.environ['PATH'] = pyside_package_dir + os.pathsep + os.environ['PATH'] + + # On Windows add the PySide2\openssl folder (if it exists) to + # the PATH so that the SSL DLLs can be found when Qt tries to + # dynamically load them. Tell Qt to load them and then reset + # the PATH. + openssl_dir = os.path.join(pyside_package_dir, 'openssl') + if os.path.exists(openssl_dir): + path = os.environ['PATH'] + try: + os.environ['PATH'] = openssl_dir + os.pathsep + path + try: + from . import QtNetwork + except ImportError: + pass + else: + QtNetwork.QSslSocket.supportsSsl() + finally: + os.environ['PATH'] = path + +_setupQtDirectories() diff --git a/sources/pyside2/PySide2/_config.py.in b/sources/pyside2/PySide2/_config.py.in new file mode 100644 index 0000000..31a2f7a --- /dev/null +++ b/sources/pyside2/PySide2/_config.py.in @@ -0,0 +1,17 @@ +built_modules = list(name for name in + "@all_module_shortnames@" + .split(";")) + +shiboken_library_soversion = str(@SHIBOKEN_SO_VERSION@) +pyside_library_soversion = str(@PYSIDE_SO_VERSION@) + +version = "@FINAL_PACKAGE_VERSION@" +version_info = (@BINDING_API_MAJOR_VERSION@, @BINDING_API_MINOR_VERSION@, @BINDING_API_MICRO_VERSION@, "@BINDING_API_PRE_RELEASE_VERSION_TYPE@", "@BINDING_API_PRE_RELEASE_VERSION@") + +@PYSIDE_BUILD_DATE@ +@PYSIDE_BUILD_COMMIT_DATE@ +@PYSIDE_BUILD_COMMIT_HASH@ +@PYSIDE_BUILD_COMMIT_HASH_DESCRIBED@ + +# Timestamp used for snapshot build, which is part of snapshot package version. +@PYSIDE_SETUP_PY_PACKAGE_TIMESTAMP_ASSIGNMENT@ diff --git a/sources/pyside2/PySide2/global.h.in b/sources/pyside2/PySide2/global.h.in new file mode 100644 index 0000000..a8065a7 --- /dev/null +++ b/sources/pyside2/PySide2/global.h.in @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#if @ENABLE_X11@ + #define Q_OS_X11 +#elif @ENABLE_MAC@ + #define Q_OS_MAC +#elif @ENABLE_WIN@ + #define Q_OS_WIN +#endif + +// There are symbols in Qt that exist in Debug but +// not in release +#define QT_NO_DEBUG + +// Make "signals:", "slots:" visible as access specifiers +#define QT_ANNOTATE_ACCESS_SPECIFIER(a) __attribute__((annotate(#a))) + +// Here are now all configured modules appended: diff --git a/sources/pyside2/PySide2/licensecomment.txt b/sources/pyside2/PySide2/licensecomment.txt new file mode 100644 index 0000000..9d271ba --- /dev/null +++ b/sources/pyside2/PySide2/licensecomment.txt @@ -0,0 +1,38 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ diff --git a/sources/pyside2/PySide2/pysideqtesttouch.h b/sources/pyside2/PySide2/pysideqtesttouch.h new file mode 100644 index 0000000..60d3bbe --- /dev/null +++ b/sources/pyside2/PySide2/pysideqtesttouch.h @@ -0,0 +1,227 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDEQTESTTOUCH_H +#define PYSIDEQTESTTOUCH_H + +#include +#include +#include +#include +#include + +#include +#include +#include +#ifdef QT_WIDGETS_LIB +#include +#endif + +QT_BEGIN_NAMESPACE + +namespace QTest +{ + + class PySideQTouchEventSequence + { + public: + ~PySideQTouchEventSequence() + { + if (commitWhenDestroyed) + commit(); + } + PySideQTouchEventSequence* press(int touchId, const QPoint &pt, QWindow *window = 0) + { + QTouchEvent::TouchPoint &p = point(touchId); + p.setScreenPos(mapToScreen(window, pt)); + p.setState(Qt::TouchPointPressed); + return this; + } + PySideQTouchEventSequence* move(int touchId, const QPoint &pt, QWindow *window = 0) + { + QTouchEvent::TouchPoint &p = point(touchId); + p.setScreenPos(mapToScreen(window, pt)); + p.setState(Qt::TouchPointMoved); + return this; + } + PySideQTouchEventSequence* release(int touchId, const QPoint &pt, QWindow *window = 0) + { + QTouchEvent::TouchPoint &p = point(touchId); + p.setScreenPos(mapToScreen(window, pt)); + p.setState(Qt::TouchPointReleased); + return this; + } + PySideQTouchEventSequence* stationary(int touchId) + { + QTouchEvent::TouchPoint &p = pointOrPreviousPoint(touchId); + p.setState(Qt::TouchPointStationary); + return this; + } + +#ifdef QT_WIDGETS_LIB + PySideQTouchEventSequence* press(int touchId, const QPoint &pt, QWidget *widget = 0) + { + QTouchEvent::TouchPoint &p = point(touchId); + p.setScreenPos(mapToScreen(widget, pt)); + p.setState(Qt::TouchPointPressed); + return this; + } + + PySideQTouchEventSequence* move(int touchId, const QPoint &pt, QWidget *widget = 0) + { + QTouchEvent::TouchPoint &p = point(touchId); + p.setScreenPos(mapToScreen(widget, pt)); + p.setState(Qt::TouchPointMoved); + return this; + } + + PySideQTouchEventSequence* release(int touchId, const QPoint &pt, QWidget *widget = 0) + { + QTouchEvent::TouchPoint &p = point(touchId); + p.setScreenPos(mapToScreen(widget, pt)); + p.setState(Qt::TouchPointReleased); + return this; + } +#endif + + void commit(bool processEvents = true) + { + if (!points.isEmpty()) { + if (targetWindow) + { + qt_handleTouchEvent(targetWindow, device, points.values()); + } +#ifdef QT_WIDGETS_LIB + else if (targetWidget) + { + qt_handleTouchEvent(targetWidget->windowHandle(), device, points.values()); + } +#endif + } + if (processEvents) + QCoreApplication::processEvents(); + previousPoints = points; + points.clear(); + } + +private: +#ifdef QT_WIDGETS_LIB + PySideQTouchEventSequence(QWidget *widget, QTouchDevice *aDevice, bool autoCommit) + : targetWidget(widget), targetWindow(0), device(aDevice), commitWhenDestroyed(autoCommit) + { + } +#endif + PySideQTouchEventSequence(QWindow *window, QTouchDevice *aDevice, bool autoCommit) + : +#ifdef QT_WIDGETS_LIB + targetWidget(0), +#endif + targetWindow(window), device(aDevice), commitWhenDestroyed(autoCommit) + { + } + + QTouchEvent::TouchPoint &point(int touchId) + { + if (!points.contains(touchId)) + points[touchId] = QTouchEvent::TouchPoint(touchId); + return points[touchId]; + } + + QTouchEvent::TouchPoint &pointOrPreviousPoint(int touchId) + { + if (!points.contains(touchId)) { + if (previousPoints.contains(touchId)) + points[touchId] = previousPoints.value(touchId); + else + points[touchId] = QTouchEvent::TouchPoint(touchId); + } + return points[touchId]; + } + +#ifdef QT_WIDGETS_LIB + QPoint mapToScreen(QWidget *widget, const QPoint &pt) + { + if (widget) + return widget->mapToGlobal(pt); + return targetWidget ? targetWidget->mapToGlobal(pt) : pt; + } +#endif + QPoint mapToScreen(QWindow *window, const QPoint &pt) + { + if(window) + return window->mapToGlobal(pt); + return targetWindow ? targetWindow->mapToGlobal(pt) : pt; + } + + QMap previousPoints; + QMap points; +#ifdef QT_WIDGETS_LIB + QWidget *targetWidget; +#endif + QWindow *targetWindow; + QTouchDevice *device; + bool commitWhenDestroyed; +#ifdef QT_WIDGETS_LIB + friend PySideQTouchEventSequence* generateTouchEvent(QWidget *, QTouchDevice*, bool); +#endif + friend PySideQTouchEventSequence* generateTouchEvent(QWindow *, QTouchDevice*, bool); + }; + +#ifdef QT_WIDGETS_LIB + inline + PySideQTouchEventSequence* generateTouchEvent(QWidget *widget, + QTouchDevice *device, + bool autoCommit = true) + { + return new PySideQTouchEventSequence(widget, device, autoCommit); + } +#endif + inline + PySideQTouchEventSequence* generateTouchEvent(QWindow *window, + QTouchDevice *device, + bool autoCommit = true) + { + return new PySideQTouchEventSequence(window, device, autoCommit); + } + +} + +QT_END_NAMESPACE + +#endif // PYSIDEQTESTTOUCH_H diff --git a/sources/pyside2/PySide2/pysidewtypes.h b/sources/pyside2/PySide2/pysidewtypes.h new file mode 100644 index 0000000..e147274 --- /dev/null +++ b/sources/pyside2/PySide2/pysidewtypes.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef __PYSIDEWTYPES__ +#define __PYSIDEWTYPES__ + +typedef struct HWND__ *HWND; +typedef unsigned UINT; +typedef long LONG; +typedef unsigned long DWORD; +typedef UINT WPARAM; +typedef LONG LPARAM; + +struct POINT +{ + LONG x; + LONG y; +}; + +struct MSG +{ + HWND hwnd; + UINT message; + WPARAM wParam; + LPARAM lParam; + DWORD time; + POINT pt; +}; + +#endif diff --git a/sources/pyside2/PySide2/qpytextobject.cpp b/sources/pyside2/PySide2/qpytextobject.cpp new file mode 100644 index 0000000..9bab45e --- /dev/null +++ b/sources/pyside2/PySide2/qpytextobject.cpp @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qpytextobject.h" + +/*! + \class QPyTextObject + \brief Workaround to make possible use QTextObjectInterface on PySide. + \ingroup richtext-processing + Due to the technical details of how to bind C++ classes to Python, you need to use this class when you need to implement + your own QTextObjectInterface rather than create a class inheriting from QObject and QTextObjectInterface. + + \sa QTextObjectInterface +*/ diff --git a/sources/pyside2/PySide2/qpytextobject.h b/sources/pyside2/PySide2/qpytextobject.h new file mode 100644 index 0000000..ecdfa7f --- /dev/null +++ b/sources/pyside2/PySide2/qpytextobject.h @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPYTEXTOBJECT +#define QPYTEXTOBJECT + +#include +#include + +// Qt5: no idea why this definition is not found automatically! It should come +// from which resolves to qabstracttextdocumentlayout.h +#ifdef Q_MOC_RUN +Q_DECLARE_INTERFACE(QTextObjectInterface, "org.qt-project.Qt.QTextObjectInterface") +#endif + +class QPyTextObject : public QObject, public QTextObjectInterface +{ + Q_OBJECT + Q_INTERFACES(QTextObjectInterface) +public: + QPyTextObject(QObject* parent = 0) : QObject(parent) {} + void drawObject(QPainter* painter, const QRectF& rect, QTextDocument* doc, int posInDocument, const QTextFormat& format ) = 0; + QSizeF intrinsicSize(QTextDocument* doc, int posInDocument, const QTextFormat& format ) = 0; +}; +#endif + + diff --git a/sources/pyside2/PySide2/qt.conf.in b/sources/pyside2/PySide2/qt.conf.in new file mode 100644 index 0000000..ff5b0a3 --- /dev/null +++ b/sources/pyside2/PySide2/qt.conf.in @@ -0,0 +1,2 @@ +[Paths] +Prefix = @QT_CONF_PREFIX@ diff --git a/sources/pyside2/PySide2/support/__init__.py b/sources/pyside2/PySide2/support/__init__.py new file mode 100644 index 0000000..18abd9d --- /dev/null +++ b/sources/pyside2/PySide2/support/__init__.py @@ -0,0 +1,48 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Import VoidPtr type to expose it under PySide2.support.VoidPtr +try: + # The normal import statement when PySide2 is installed. + from PySide2.shiboken2 import VoidPtr +except ImportError: + # When running make test in shiboken build dir, or when running testrunner.py, + # shiboken2 is not part of the PySide2 module, so it needs to be imported as a standalone + # module. + from shiboken2 import VoidPtr diff --git a/sources/pyside2/PySide2/support/signature/PSF-3.7.0.txt b/sources/pyside2/PySide2/support/signature/PSF-3.7.0.txt new file mode 100644 index 0000000..be42010 --- /dev/null +++ b/sources/pyside2/PySide2/support/signature/PSF-3.7.0.txt @@ -0,0 +1,43 @@ +PSF LICENSE AGREEMENT FOR PYTHON 3.7.0 + +1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and + the Individual or Organization ("Licensee") accessing and otherwise using Python + 3.7.0 software in source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby + grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, + analyze, test, perform and/or display publicly, prepare derivative works, + distribute, and otherwise use Python 3.7.0 alone or in any derivative + version, provided, however, that PSF's License Agreement and PSF's notice of + copyright, i.e., "Copyright © 2001-2018 Python Software Foundation; All Rights + Reserved" are retained in Python 3.7.0 alone or in any derivative version + prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on or + incorporates Python 3.7.0 or any part thereof, and wants to make the + derivative work available to others as provided herein, then Licensee hereby + agrees to include in any such work a brief summary of the changes made to Python + 3.7.0. + +4. PSF is making Python 3.7.0 available to Licensee on an "AS IS" basis. + PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF + EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR + WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE + USE OF PYTHON 3.7.0 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 3.7.0 + FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF + MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 3.7.0, OR ANY DERIVATIVE + THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material breach of + its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any relationship + of agency, partnership, or joint venture between PSF and Licensee. This License + Agreement does not grant permission to use PSF trademarks or trade name in a + trademark sense to endorse or promote products or services of Licensee, or any + third party. + +8. By copying, installing or otherwise using Python 3.7.0, Licensee agrees + to be bound by the terms and conditions of this License Agreement. diff --git a/sources/pyside2/PySide2/support/signature/__init__.py b/sources/pyside2/PySide2/support/signature/__init__.py new file mode 100644 index 0000000..0ff9ec7 --- /dev/null +++ b/sources/pyside2/PySide2/support/signature/__init__.py @@ -0,0 +1,42 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function, absolute_import + +from .loader import inspect diff --git a/sources/pyside2/PySide2/support/signature/backport_inspect.py b/sources/pyside2/PySide2/support/signature/backport_inspect.py new file mode 100644 index 0000000..0eafe9c --- /dev/null +++ b/sources/pyside2/PySide2/support/signature/backport_inspect.py @@ -0,0 +1,956 @@ +# This Python file uses the following encoding: utf-8 +# It has been edited by fix-complaints.py . + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +""" +PSF LICENSE AGREEMENT FOR PYTHON 3.7.0 + +1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and + the Individual or Organization ("Licensee") accessing and otherwise using Python + 3.7.0 software in source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby + grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, + analyze, test, perform and/or display publicly, prepare derivative works, + distribute, and otherwise use Python 3.7.0 alone or in any derivative + version, provided, however, that PSF's License Agreement and PSF's notice of + copyright, i.e., "Copyright © 2001-2018 Python Software Foundation; All Rights + Reserved" are retained in Python 3.7.0 alone or in any derivative version + prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on or + incorporates Python 3.7.0 or any part thereof, and wants to make the + derivative work available to others as provided herein, then Licensee hereby + agrees to include in any such work a brief summary of the changes made to Python + 3.7.0. + +4. PSF is making Python 3.7.0 available to Licensee on an "AS IS" basis. + PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF + EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR + WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE + USE OF PYTHON 3.7.0 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 3.7.0 + FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF + MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 3.7.0, OR ANY DERIVATIVE + THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material breach of + its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any relationship + of agency, partnership, or joint venture between PSF and Licensee. This License + Agreement does not grant permission to use PSF trademarks or trade name in a + trademark sense to endorse or promote products or services of Licensee, or any + third party. + +8. By copying, installing or otherwise using Python 3.7.0, Licensee agrees + to be bound by the terms and conditions of this License Agreement. +""" + +__doc__ = """ + signature() - get a Signature object for the callable +""" + +import sys +from collections import OrderedDict + +CO_OPTIMIZED = 0x0001 +CO_NEWLOCALS = 0x0002 +CO_VARARGS = 0x0004 +CO_VARKEYWORDS = 0x0008 +CO_NESTED = 0x0010 +CO_GENERATOR = 0x0020 +CO_NOFREE = 0x0040 + + +############################################################################### +### Function Signature Object (PEP 362) +############################################################################### + + +# This function was changed: 'builtins' and 'qualname' don't exist. +# We use '__builtin__' and '__name__' instead. +# It is further changed because we use a local copy of typing +def formatannotation(annotation, base_module=None): + if getattr(annotation, '__module__', None) == 'PySide2.support.signature.typing': + return repr(annotation).replace('PySide2.support.signature.typing.', '') + if isinstance(annotation, type): + if annotation.__module__ in ('__builtin__', base_module): + return annotation.__name__ + return annotation.__module__+'.'+annotation.__name__ + return repr(annotation) + + +def _signature_is_functionlike(obj): + """Private helper to test if `obj` is a duck type of FunctionType. + A good example of such objects are functions compiled with + Cython, which have all attributes that a pure Python function + would have, but have their code statically compiled. + """ + + if not callable(obj) or isclass(obj): + # All function-like objects are obviously callables, + # and not classes. + return False + + name = getattr(obj, '__name__', None) + code = getattr(obj, '__code__', None) + defaults = getattr(obj, '__defaults__', _void) # Important to use _void ... + kwdefaults = getattr(obj, '__kwdefaults__', _void) # ... and not None here + annotations = getattr(obj, '__annotations__', None) + + return (isinstance(code, types.CodeType) and + isinstance(name, str) and + (defaults is None or isinstance(defaults, tuple)) and + (kwdefaults is None or isinstance(kwdefaults, dict)) and + isinstance(annotations, dict)) + + + +def _signature_from_function(cls, func): + """Private helper: constructs Signature for the given python function.""" + + is_duck_function = False + if not isfunction(func): + if _signature_is_functionlike(func): + is_duck_function = True + else: + # If it's not a pure Python function, and not a duck type + # of pure function: + raise TypeError('{!r} is not a Python function'.format(func)) + + Parameter = cls._parameter_cls + + # Parameter information. + func_code = func.__code__ + pos_count = func_code.co_argcount + arg_names = func_code.co_varnames + positional = tuple(arg_names[:pos_count]) + keyword_only_count = 0 # func_code.co_kwonlyargcount + keyword_only = arg_names[pos_count:(pos_count + keyword_only_count)] + annotations = func.__annotations__ + defaults = func.__defaults__ + kwdefaults = func.__kwdefaults__ + + if defaults: + pos_default_count = len(defaults) + else: + pos_default_count = 0 + + parameters = [] + + # Non-keyword-only parameters w/o defaults. + non_default_count = pos_count - pos_default_count + for name in positional[:non_default_count]: + annotation = annotations.get(name, _empty) + parameters.append(Parameter(name, annotation=annotation, + kind=_POSITIONAL_OR_KEYWORD)) + + # ... w/ defaults. + for offset, name in enumerate(positional[non_default_count:]): + annotation = annotations.get(name, _empty) + parameters.append(Parameter(name, annotation=annotation, + kind=_POSITIONAL_OR_KEYWORD, + default=defaults[offset])) + + # *args + if func_code.co_flags & CO_VARARGS: + name = arg_names[pos_count + keyword_only_count] + annotation = annotations.get(name, _empty) + parameters.append(Parameter(name, annotation=annotation, + kind=_VAR_POSITIONAL)) + + # Keyword-only parameters. + for name in keyword_only: + default = _empty + if kwdefaults is not None: + default = kwdefaults.get(name, _empty) + + annotation = annotations.get(name, _empty) + parameters.append(Parameter(name, annotation=annotation, + kind=_KEYWORD_ONLY, + default=default)) + # **kwargs + if func_code.co_flags & CO_VARKEYWORDS: + index = pos_count + keyword_only_count + if func_code.co_flags & CO_VARARGS: + index += 1 + + name = arg_names[index] + annotation = annotations.get(name, _empty) + parameters.append(Parameter(name, annotation=annotation, + kind=_VAR_KEYWORD)) + + # Is 'func' is a pure Python function - don't validate the + # parameters list (for correct order and defaults), it should be OK. + return cls(parameters, + return_annotation=annotations.get('return', _empty), + __validate_parameters__=is_duck_function) + + + + +class _void(object): + """A private marker - used in Parameter & Signature.""" + + +class _empty(object): + """Marker object for Signature.empty and Parameter.empty.""" + + +class _ParameterKind(object): # (enum.IntEnum): + POSITIONAL_ONLY = 0 + POSITIONAL_OR_KEYWORD = 1 + VAR_POSITIONAL = 2 + KEYWORD_ONLY = 3 + VAR_KEYWORD = 4 + + def __str__(self): + return self._name_ + + +_POSITIONAL_ONLY = _ParameterKind.POSITIONAL_ONLY +_POSITIONAL_OR_KEYWORD = _ParameterKind.POSITIONAL_OR_KEYWORD +_VAR_POSITIONAL = _ParameterKind.VAR_POSITIONAL +_KEYWORD_ONLY = _ParameterKind.KEYWORD_ONLY +_VAR_KEYWORD = _ParameterKind.VAR_KEYWORD + + +class Parameter(object): + """Represents a parameter in a function signature. + + Has the following public attributes: + + * name : str + The name of the parameter as a string. + * default : object + The default value for the parameter if specified. If the + parameter has no default value, this attribute is set to + `Parameter.empty`. + * annotation + The annotation for the parameter if specified. If the + parameter has no annotation, this attribute is set to + `Parameter.empty`. + * kind : str + Describes how argument values are bound to the parameter. + Possible values: `Parameter.POSITIONAL_ONLY`, + `Parameter.POSITIONAL_OR_KEYWORD`, `Parameter.VAR_POSITIONAL`, + `Parameter.KEYWORD_ONLY`, `Parameter.VAR_KEYWORD`. + """ + + __slots__ = ('_name', '_kind', '_default', '_annotation') + + POSITIONAL_ONLY = _POSITIONAL_ONLY + POSITIONAL_OR_KEYWORD = _POSITIONAL_OR_KEYWORD + VAR_POSITIONAL = _VAR_POSITIONAL + KEYWORD_ONLY = _KEYWORD_ONLY + VAR_KEYWORD = _VAR_KEYWORD + + empty = _empty + + def __init__(self, name, kind, default=_empty, annotation=_empty): + + if kind not in (_POSITIONAL_ONLY, _POSITIONAL_OR_KEYWORD, + _VAR_POSITIONAL, _KEYWORD_ONLY, _VAR_KEYWORD): + raise ValueError("invalid value for 'Parameter.kind' attribute") + self._kind = kind + + if default is not _empty: + if kind in (_VAR_POSITIONAL, _VAR_KEYWORD): + msg = '{} parameters cannot have default values'.format(kind) + raise ValueError(msg) + self._default = default + self._annotation = annotation + + if name is _empty: + raise ValueError('name is a required attribute for Parameter') + + if not isinstance(name, str): + raise TypeError("name must be a str, not a {!r}".format(name)) + + if name[0] == '.' and name[1:].isdigit(): + # These are implicit arguments generated by comprehensions. In + # order to provide a friendlier interface to users, we recast + # their name as "implicitN" and treat them as positional-only. + # See issue 19611. + if kind != _POSITIONAL_OR_KEYWORD: + raise ValueError( + 'implicit arguments must be passed in as {}'.format( + _POSITIONAL_OR_KEYWORD + ) + ) + self._kind = _POSITIONAL_ONLY + name = 'implicit{}'.format(name[1:]) + + if not True: # name.isidentifier(): + raise ValueError('{!r} is not a valid parameter name'.format(name)) + + self._name = name + + def __reduce__(self): + return (type(self), + (self._name, self._kind), + {'_default': self._default, + '_annotation': self._annotation}) + + def __setstate__(self, state): + self._default = state['_default'] + self._annotation = state['_annotation'] + + @property + def name(self): + return self._name + + @property + def default(self): + return self._default + + @property + def annotation(self): + return self._annotation + + @property + def kind(self): + return self._kind + + def replace(self, name=_void, kind=_void, + annotation=_void, default=_void): + """Creates a customized copy of the Parameter.""" + + if name is _void: + name = self._name + + if kind is _void: + kind = self._kind + + if annotation is _void: + annotation = self._annotation + + if default is _void: + default = self._default + + return type(self)(name, kind, default=default, annotation=annotation) + + def __str__(self): + kind = self.kind + formatted = self._name + + # Add annotation and default value + if self._annotation is not _empty: + formatted = '{}:{}'.format(formatted, + formatannotation(self._annotation)) + + if self._default is not _empty: + formatted = '{}={}'.format(formatted, repr(self._default)) + + if kind == _VAR_POSITIONAL: + formatted = '*' + formatted + elif kind == _VAR_KEYWORD: + formatted = '**' + formatted + + return formatted + + def __repr__(self): + return '<{} "{}">'.format(self.__class__.__name__, self) + + def __hash__(self): + return hash((self.name, self.kind, self.annotation, self.default)) + + def __eq__(self, other): + if self is other: + return True + if not isinstance(other, Parameter): + return NotImplemented + return (self._name == other._name and + self._kind == other._kind and + self._default == other._default and + self._annotation == other._annotation) + + +class BoundArguments(object): + """Result of `Signature.bind` call. Holds the mapping of arguments + to the function's parameters. + + Has the following public attributes: + + * arguments : OrderedDict + An ordered mutable mapping of parameters' names to arguments' values. + Does not contain arguments' default values. + * signature : Signature + The Signature object that created this instance. + * args : tuple + Tuple of positional arguments values. + * kwargs : dict + Dict of keyword arguments values. + """ + + __slots__ = ('arguments', '_signature', '__weakref__') + + def __init__(self, signature, arguments): + self.arguments = arguments + self._signature = signature + + @property + def signature(self): + return self._signature + + @property + def args(self): + args = [] + for param_name, param in self._signature.parameters.items(): + if param.kind in (_VAR_KEYWORD, _KEYWORD_ONLY): + break + + try: + arg = self.arguments[param_name] + except KeyError: + # We're done here. Other arguments + # will be mapped in 'BoundArguments.kwargs' + break + else: + if param.kind == _VAR_POSITIONAL: + # *args + args.extend(arg) + else: + # plain argument + args.append(arg) + + return tuple(args) + + @property + def kwargs(self): + kwargs = {} + kwargs_started = False + for param_name, param in self._signature.parameters.items(): + if not kwargs_started: + if param.kind in (_VAR_KEYWORD, _KEYWORD_ONLY): + kwargs_started = True + else: + if param_name not in self.arguments: + kwargs_started = True + continue + + if not kwargs_started: + continue + + try: + arg = self.arguments[param_name] + except KeyError: + pass + else: + if param.kind == _VAR_KEYWORD: + # **kwargs + kwargs.update(arg) + else: + # plain keyword argument + kwargs[param_name] = arg + + return kwargs + + def apply_defaults(self): + """Set default values for missing arguments. + + For variable-positional arguments (*args) the default is an + empty tuple. + + For variable-keyword arguments (**kwargs) the default is an + empty dict. + """ + arguments = self.arguments + new_arguments = [] + for name, param in self._signature.parameters.items(): + try: + new_arguments.append((name, arguments[name])) + except KeyError: + if param.default is not _empty: + val = param.default + elif param.kind is _VAR_POSITIONAL: + val = () + elif param.kind is _VAR_KEYWORD: + val = {} + else: + # This BoundArguments was likely produced by + # Signature.bind_partial(). + continue + new_arguments.append((name, val)) + self.arguments = OrderedDict(new_arguments) + + def __eq__(self, other): + if self is other: + return True + if not isinstance(other, BoundArguments): + return NotImplemented + return (self.signature == other.signature and + self.arguments == other.arguments) + + def __setstate__(self, state): + self._signature = state['_signature'] + self.arguments = state['arguments'] + + def __getstate__(self): + return {'_signature': self._signature, 'arguments': self.arguments} + + def __repr__(self): + args = [] + for arg, value in self.arguments.items(): + args.append('{}={!r}'.format(arg, value)) + return '<{} ({})>'.format(self.__class__.__name__, ', '.join(args)) + + +class Signature(object): + """A Signature object represents the overall signature of a function. + It stores a Parameter object for each parameter accepted by the + function, as well as information specific to the function itself. + + A Signature object has the following public attributes and methods: + + * parameters : OrderedDict + An ordered mapping of parameters' names to the corresponding + Parameter objects (keyword-only arguments are in the same order + as listed in `code.co_varnames`). + * return_annotation : object + The annotation for the return type of the function if specified. + If the function has no annotation for its return type, this + attribute is set to `Signature.empty`. + * bind(*args, **kwargs) -> BoundArguments + Creates a mapping from positional and keyword arguments to + parameters. + * bind_partial(*args, **kwargs) -> BoundArguments + Creates a partial mapping from positional and keyword arguments + to parameters (simulating 'functools.partial' behavior.) + """ + + __slots__ = ('_return_annotation', '_parameters') + + _parameter_cls = Parameter + _bound_arguments_cls = BoundArguments + + empty = _empty + + def __init__(self, parameters=None, return_annotation=_empty, + __validate_parameters__=True): + """Constructs Signature from the given list of Parameter + objects and 'return_annotation'. All arguments are optional. + """ + + if parameters is None: + params = OrderedDict() + else: + if __validate_parameters__: + params = OrderedDict() + top_kind = _POSITIONAL_ONLY + kind_defaults = False + + for idx, param in enumerate(parameters): + kind = param.kind + name = param.name + + if kind < top_kind: + msg = 'wrong parameter order: {!r} before {!r}' + msg = msg.format(top_kind, kind) + raise ValueError(msg) + elif kind > top_kind: + kind_defaults = False + top_kind = kind + + if kind in (_POSITIONAL_ONLY, _POSITIONAL_OR_KEYWORD): + if param.default is _empty: + if kind_defaults: + # No default for this parameter, but the + # previous parameter of the same kind had + # a default + msg = 'non-default argument follows default ' \ + 'argument' + raise ValueError(msg) + else: + # There is a default for this parameter. + kind_defaults = True + + if name in params: + msg = 'duplicate parameter name: {!r}'.format(name) + raise ValueError(msg) + + params[name] = param + else: + params = OrderedDict(((param.name, param) + for param in parameters)) + + self._parameters = params # types.MappingProxyType(params) + self._return_annotation = return_annotation + + @classmethod + def from_function(cls, func): + """Constructs Signature for the given python function.""" + + warnings.warn("inspect.Signature.from_function() is deprecated, " + "use Signature.from_callable()", + DeprecationWarning, stacklevel=2) + return _signature_from_function(cls, func) + + @classmethod + def from_builtin(cls, func): + """Constructs Signature for the given builtin function.""" + + warnings.warn("inspect.Signature.from_builtin() is deprecated, " + "use Signature.from_callable()", + DeprecationWarning, stacklevel=2) + return _signature_from_builtin(cls, func) + + @classmethod + def from_callable(cls, obj, follow_wrapped=True): + """Constructs Signature for the given callable object.""" + return _signature_from_callable(obj, sigcls=cls, + follow_wrapper_chains=follow_wrapped) + + @property + def parameters(self): + return self._parameters + + @property + def return_annotation(self): + return self._return_annotation + + def replace(self, parameters=_void, return_annotation=_void): + """Creates a customized copy of the Signature. + Pass 'parameters' and/or 'return_annotation' arguments + to override them in the new copy. + """ + + if parameters is _void: + parameters = self.parameters.values() + + if return_annotation is _void: + return_annotation = self._return_annotation + + return type(self)(parameters, + return_annotation=return_annotation) + + def _hash_basis(self): + params = tuple(param for param in self.parameters.values() + if param.kind != _KEYWORD_ONLY) + + kwo_params = {param.name: param for param in self.parameters.values() + if param.kind == _KEYWORD_ONLY} + + return params, kwo_params, self.return_annotation + + def __hash__(self): + params, kwo_params, return_annotation = self._hash_basis() + kwo_params = frozenset(kwo_params.values()) + return hash((params, kwo_params, return_annotation)) + + def __eq__(self, other): + if self is other: + return True + if not isinstance(other, Signature): + return NotImplemented + return self._hash_basis() == other._hash_basis() + + def _bind(self, args, kwargs, partial=False): + """Private method. Don't use directly.""" + + arguments = OrderedDict() + + parameters = iter(self.parameters.values()) + parameters_ex = () + arg_vals = iter(args) + + while True: + # Let's iterate through the positional arguments and corresponding + # parameters + try: + arg_val = next(arg_vals) + except StopIteration: + # No more positional arguments + try: + param = next(parameters) + except StopIteration: + # No more parameters. That's it. Just need to check that + # we have no `kwargs` after this while loop + break + else: + if param.kind == _VAR_POSITIONAL: + # That's OK, just empty *args. Let's start parsing + # kwargs + break + elif param.name in kwargs: + if param.kind == _POSITIONAL_ONLY: + msg = '{arg!r} parameter is positional only, ' \ + 'but was passed as a keyword' + msg = msg.format(arg=param.name) + raise TypeError(msg)# from None + parameters_ex = (param,) + break + elif (param.kind == _VAR_KEYWORD or + param.default is not _empty): + # That's fine too - we have a default value for this + # parameter. So, lets start parsing `kwargs`, starting + # with the current parameter + parameters_ex = (param,) + break + else: + # No default, not VAR_KEYWORD, not VAR_POSITIONAL, + # not in `kwargs` + if partial: + parameters_ex = (param,) + break + else: + msg = 'missing a required argument: {arg!r}' + msg = msg.format(arg=param.name) + raise TypeError(msg)# from None + else: + # We have a positional argument to process + try: + param = next(parameters) + except StopIteration: + raise TypeError('too many positional arguments')# from None + else: + if param.kind in (_VAR_KEYWORD, _KEYWORD_ONLY): + # Looks like we have no parameter for this positional + # argument + raise TypeError( + 'too many positional arguments')# from None + + if param.kind == _VAR_POSITIONAL: + # We have an '*args'-like argument, let's fill it with + # all positional arguments we have left and move on to + # the next phase + values = [arg_val] + values.extend(arg_vals) + arguments[param.name] = tuple(values) + break + + if param.name in kwargs: + raise TypeError( + 'multiple values for argument {arg!r}'.format( + arg=param.name))# from None + + arguments[param.name] = arg_val + + # Now, we iterate through the remaining parameters to process + # keyword arguments + kwargs_param = None + for param in itertools.chain(parameters_ex, parameters): + if param.kind == _VAR_KEYWORD: + # Memorize that we have a '**kwargs'-like parameter + kwargs_param = param + continue + + if param.kind == _VAR_POSITIONAL: + # Named arguments don't refer to '*args'-like parameters. + # We only arrive here if the positional arguments ended + # before reaching the last parameter before *args. + continue + + param_name = param.name + try: + arg_val = kwargs.pop(param_name) + except KeyError: + # We have no value for this parameter. It's fine though, + # if it has a default value, or it is an '*args'-like + # parameter, left alone by the processing of positional + # arguments. + if (not partial and param.kind != _VAR_POSITIONAL and + param.default is _empty): + raise TypeError('missing a required argument: {arg!r}'. \ + format(arg=param_name))# from None + + else: + if param.kind == _POSITIONAL_ONLY: + # This should never happen in case of a properly built + # Signature object (but let's have this check here + # to ensure correct behavior just in case) + raise TypeError('{arg!r} parameter is positional only, ' + 'but was passed as a keyword'. \ + format(arg=param.name)) + + arguments[param_name] = arg_val + + if kwargs: + if kwargs_param is not None: + # Process our '**kwargs'-like parameter + arguments[kwargs_param.name] = kwargs + else: + raise TypeError( + 'got an unexpected keyword argument {arg!r}'.format( + arg=next(iter(kwargs)))) + + return self._bound_arguments_cls(self, arguments) + + def bind(*args, **kwargs): + """Get a BoundArguments object, that maps the passed `args` + and `kwargs` to the function's signature. Raises `TypeError` + if the passed arguments can not be bound. + """ + return args[0]._bind(args[1:], kwargs) + + def bind_partial(*args, **kwargs): + """Get a BoundArguments object, that partially maps the + passed `args` and `kwargs` to the function's signature. + Raises `TypeError` if the passed arguments can not be bound. + """ + return args[0]._bind(args[1:], kwargs, partial=True) + + def __reduce__(self): + return (type(self), + (tuple(self._parameters.values()),), + {'_return_annotation': self._return_annotation}) + + def __setstate__(self, state): + self._return_annotation = state['_return_annotation'] + + def __repr__(self): + return '<{} {}>'.format(self.__class__.__name__, self) + + def __str__(self): + result = [] + render_pos_only_separator = False + render_kw_only_separator = True + for param in self.parameters.values(): + formatted = str(param) + + kind = param.kind + + if kind == _POSITIONAL_ONLY: + render_pos_only_separator = True + elif render_pos_only_separator: + # It's not a positional-only parameter, and the flag + # is set to 'True' (there were pos-only params before.) + result.append('/') + render_pos_only_separator = False + + if kind == _VAR_POSITIONAL: + # OK, we have an '*args'-like parameter, so we won't need + # a '*' to separate keyword-only arguments + render_kw_only_separator = False + elif kind == _KEYWORD_ONLY and render_kw_only_separator: + # We have a keyword-only parameter to render and we haven't + # rendered an '*args'-like parameter before, so add a '*' + # separator to the parameters list ("foo(arg1, *, arg2)" case) + result.append('*') + # This condition should be only triggered once, so + # reset the flag + render_kw_only_separator = False + + result.append(formatted) + + if render_pos_only_separator: + # There were only positional-only parameters, hence the + # flag was not reset to 'False' + result.append('/') + + rendered = '({})'.format(', '.join(result)) + + if self.return_annotation is not _empty: + anno = formatannotation(self.return_annotation) + rendered += ' -> {}'.format(anno) + + return rendered + + +def signature(obj, follow_wrapped=True): + """Get a signature object for the passed callable.""" + return Signature.from_callable(obj, follow_wrapped=follow_wrapped) + + +def _main(): + """ Logic for inspecting an object given at command line """ + import argparse + import importlib + + parser = argparse.ArgumentParser() + parser.add_argument( + 'object', + help="The object to be analysed. " + "It supports the 'module:qualname' syntax") + parser.add_argument( + '-d', '--details', action='store_true', + help='Display info about the module rather than its source code') + + args = parser.parse_args() + + target = args.object + mod_name, has_attrs, attrs = target.partition(":") + try: + obj = module = importlib.import_module(mod_name) + except Exception as exc: + msg = "Failed to import {} ({}: {})".format(mod_name, + type(exc).__name__, + exc) + print(msg, file=sys.stderr) + exit(2) + + if has_attrs: + parts = attrs.split(".") + obj = module + for part in parts: + obj = getattr(obj, part) + + if module.__name__ in sys.builtin_module_names: + print("Can't get info for builtin modules.", file=sys.stderr) + exit(1) + + if args.details: + print('Target: {}'.format(target)) + print('Origin: {}'.format(getsourcefile(module))) + print('Cached: {}'.format(module.__cached__)) + if obj is module: + print('Loader: {}'.format(repr(module.__loader__))) + if hasattr(module, '__path__'): + print('Submodule search path: {}'.format(module.__path__)) + else: + try: + __, lineno = findsource(obj) + except Exception: + pass + else: + print('Line: {}'.format(lineno)) + + print('\n') + else: + print(getsource(obj)) + + +if __name__ == "__main__": + _main() diff --git a/sources/pyside2/PySide2/support/signature/fix-complaints.py b/sources/pyside2/PySide2/support/signature/fix-complaints.py new file mode 100644 index 0000000..fa2b444 --- /dev/null +++ b/sources/pyside2/PySide2/support/signature/fix-complaints.py @@ -0,0 +1,91 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function, absolute_import + +""" +fix-complaints.py + +This module fixes the buildbot messages of external python modules. +Run it once after copying a new version. It is idem-potent, unless +you are changing messages (what I did, of course :-) . +""" + +import os + +patched_modules = "backport_inspect typing27" + +offending_words = { + "behavio""ur": "behavior", + "at""least": "at_least", + "reali""sed": "realized", +} + +utf8_line = "# This Python file uses the following encoding: utf-8\n" +marker_line = "# It has been edited by {} .\n".format( + os.path.basename(__file__)) + +def patch_file(fname): + with open(fname) as f: + lines = f.readlines() + dup = lines[:] + for idx, line in enumerate(lines): + for word, repl in offending_words.items(): + if word in line: + lines[idx] = line.replace(word, repl) + print("line:{!r} {!r}->{!r}".format(line, word, repl)) + if lines[0].strip() != utf8_line.strip(): + lines[:0] = [utf8_line, "\n"] + if lines[1] != marker_line: + lines[1:1] = marker_line + if lines != dup: + with open(fname, "w") as f: + f.write("".join(lines)) + +def doit(): + dir = os.path.dirname(__file__) + for name in patched_modules.split(): + fname = os.path.join(dir, name + ".py") + print("Working on", fname) + patch_file(fname) + +if __name__ == "__main__": + doit() + +# end of file diff --git a/sources/pyside2/PySide2/support/signature/loader.py b/sources/pyside2/PySide2/support/signature/loader.py new file mode 100644 index 0000000..f51bafe --- /dev/null +++ b/sources/pyside2/PySide2/support/signature/loader.py @@ -0,0 +1,110 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function, absolute_import + +""" +loader.py + +The loader has to lazy-load the signature module and also provides a few +Python modules to support Python 2.7 . + +This file was originally directly embedded into the C source. +After it grew more and more, I now prefer to have it as Python file. +The remaining stub loader in the C source is now only a short string. + +This version does no longer use an embedded .zip file but is a package. +The old code without a package but with zip compression can still be found +at https://codereview.qt-project.org/#/c/203533/ for reference. +""" + +import sys +import os + +# Make sure that we always have the PySide containing package first. +# This is crucial for the mapping during reload in the tests. +package_dir = __file__ +for _ in "four": + package_dir = os.path.dirname(package_dir) +sys.path.insert(0, package_dir) +if sys.version_info >= (3,): + import inspect +else: + import inspect + namespace = inspect.__dict__ + from PySide2.support.signature import backport_inspect as inspect + _doc = inspect.__doc__ + inspect.__dict__.update(namespace) + inspect.__doc__ += _doc + # force inspect to find all attributes. See "heuristic" in pydoc.py! + inspect.__all__ = list(x for x in dir(inspect) if not x.startswith("_")) + +# name used in signature.cpp +from PySide2.support.signature.parser import pyside_type_init +sys.path.pop(0) +# Note also that during the tests we have a different encoding that would +# break the Python license decorated files without an encoding line. + +# name used in signature.cpp +def create_signature(props, sig_kind): + if not props: + # empty signatures string + return + if isinstance(props["multi"], list): + return list(create_signature(elem, sig_kind) + for elem in props["multi"]) + varnames = props["varnames"] + if sig_kind == "method": + varnames = ("self",) + varnames + elif sig_kind == "staticmethod": + pass + elif sig_kind == "classmethod": + varnames = ("klass",) + varnames + else: + raise SystemError("Methods must be normal, staticmethod or " + "classmethod") + argstr = ", ".join(varnames) + fakefunc = eval("lambda {}: None".format(argstr)) + fakefunc.__name__ = props["name"] + fakefunc.__defaults__ = props["defaults"] + fakefunc.__kwdefaults__ = props["kwdefaults"] + fakefunc.__annotations__ = props["annotations"] + return inspect._signature_from_function(inspect.Signature, fakefunc) + +# end of file diff --git a/sources/pyside2/PySide2/support/signature/mapping.py b/sources/pyside2/PySide2/support/signature/mapping.py new file mode 100644 index 0000000..dd3df09 --- /dev/null +++ b/sources/pyside2/PySide2/support/signature/mapping.py @@ -0,0 +1,477 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function, absolute_import + +""" +mapping.py + +This module has the mapping from the pyside C-modules view of signatures +to the Python representation. + +The PySide modules are not loaded in advance, but only after they appear +in sys.modules. This minimises the loading overhead. +In principle, we need to re-load the module, when the imports change. +But it is much easier to do it on demand, when we get an exception. +See _resolve_value() in singature.py +""" + +import sys +import struct +import PySide2 +try: + from . import typing +except ImportError: + import typing + +ellipsis = "..." +Char = typing.Union[str, int] # how do I model the limitation to 1 char? +StringList = typing.List[str] +IntList = typing.List[int] +Variant = typing.Any +ModelIndexList = typing.List[int] +QImageCleanupFunction = typing.Callable +FloatMatrix = typing.List[typing.List[float]] +# Pair could be more specific, but we loose the info in the generator. +Pair = typing.Tuple[typing.Any, typing.Any] +MultiMap = typing.DefaultDict[str, typing.List[str]] +Text = typing.Text + +# ulong_max is only 32 bit on windows. +ulong_max = 2*sys.maxsize+1 if len(struct.pack("L", 1)) != 4 else 0xffffffff +ushort_max = 0xffff + +GL_COLOR_BUFFER_BIT = 0x00004000 +GL_NEAREST = 0x2600 + +WId = int + +# from 5.9 +GL_TEXTURE_2D = 0x0DE1 +GL_RGBA = 0x1908 + +class _NotCalled(str): + """ + Wrap some text with semantics + + This class is wrapped around text in order to avoid calling it. + There are three reasons for this: + + - some instances cannot be created since they are abstract, + - some can only be created after qApp was created, + - some have an ugly __repr__ with angle brackets in it. + + By using derived classes, good looking instances can be created + which can be used to generate source code or .pyi files. When the + real object is needed, the wrapper can simply be called. + """ + def __repr__(self): + suppress = "PySide2.support.signature.typing." + text = self[len(suppress):] if self.startswith(suppress) else self + return "{}({})".format(type(self).__name__, text) + + def __call__(self): + from .mapping import __dict__ as namespace + text = self if self.endswith(")") else self + "()" + return eval(text, namespace) + +# Some types are abstract. They just show their name. +class Virtual(_NotCalled): + pass + +# Other types I simply could not find. +class Missing(_NotCalled): + pass + +class Invalid(_NotCalled): + pass + +# Helper types +class Default(_NotCalled): + pass + +class Instance(_NotCalled): + pass + + +class Reloader(object): + def __init__(self): + self.sys_module_count = 0 + self.uninitialized = PySide2.__all__[:] + + def update(self): + if self.sys_module_count == len(sys.modules): + return + self.sys_module_count = len(sys.modules) + g = globals() + for mod_name in self.uninitialized[:]: + if "PySide2." + mod_name in sys.modules: + self.uninitialized.remove(mod_name) + proc_name = "init_" + mod_name + if proc_name in g: + g.update(g[proc_name]()) + + +update_mapping = Reloader().update +type_map = {} + +def init_QtCore(): + import PySide2.QtCore + from PySide2.QtCore import Qt, QUrl, QDir, QGenericArgument + from PySide2.QtCore import QRect, QSize, QPoint, QLocale, QByteArray + from PySide2.QtCore import QMarginsF # 5.9 + try: + # seems to be not generated by 5.9 ATM. + from PySide2.QtCore import Connection + except ImportError: + pass + type_map.update({ + "str": str, + "int": int, + "QString": str, + "bool": bool, + "PyObject": object, + "void": int, # be more specific? + "char": Char, + "'%'": "%", + "' '": " ", + "false": False, + "double": float, + "'g'": "g", + "long long": int, + "unsigned int": int, # should we define an unsigned type? + "Q_NULLPTR": None, + "long": int, + "float": float, + "short": int, + "unsigned long": int, + "unsigned long long": int, + "unsigned short": int, + "QStringList": StringList, + "QList": list, + "QChar": Char, + "signed char": Char, + "QVariant": Variant, + "QVariant.Type": type, # not so sure here... + "QStringRef": str, + "QString()": "", + "QModelIndexList": ModelIndexList, + "QPair": Pair, + "unsigned char": Char, + "QSet": set, # seems _not_ to work + "QVector": list, + "QJsonObject": dict, # seems to work + "QStringList()": [], + "ULONG_MAX": ulong_max, + "quintptr": int, + "PyCallable": typing.Callable, + "...": ellipsis, # no idea how this should be translated... maybe so? + "PyTypeObject": type, + "PySequence": typing.Sequence, + "qptrdiff": int, + "true": True, + "Qt.HANDLE": int, # be more explicit with some consts? + "list of QAbstractState": list, # how to use typing.List when we don't have QAbstractState? + "list of QAbstractAnimation": list, # dto. + "QVariant()": Invalid(Variant), + "QMap": dict, + "PySide2.QtCore.bool": bool, + "QHash": dict, + "PySide2.QtCore.QChar": Char, + "PySide2.QtCore.qreal": float, + "PySide2.QtCore.float": float, + "PySide2.QtCore.qint16": int, + "PySide2.QtCore.qint32": int, + "PySide2.QtCore.qint64": int, + "PySide2.QtCore.qint8": int, + "PySide2.QtCore.QString": str, + "PySide2.QtCore.QStringList": StringList, + "PySide2.QtCore.QVariant": Variant, + "PySide2.QtCore.quint16": int, + "PySide2.QtCore.quint32": int, + "PySide2.QtCore.quint64": int, + "PySide2.QtCore.quint8": int, + "PySide2.QtCore.uchar": Char, + "PySide2.QtCore.unsigned char": Char, # 5.9 + "PySide2.QtCore.long": int, + "PySide2.QtCore.QUrl.ComponentFormattingOptions": + PySide2.QtCore.QUrl.ComponentFormattingOption, # mismatch option/enum, why??? + "QUrl.FormattingOptions(PrettyDecoded)": Instance( + "QUrl.FormattingOptions(QUrl.PrettyDecoded)"), + # from 5.9 + "QDir.Filters(AllEntries | NoDotAndDotDot)": Instance( + "QDir.Filters(QDir.AllEntries | QDir.NoDotAndDotDot)"), + "NULL": None, # 5.6, MSVC + "QDir.SortFlags(Name | IgnoreCase)": Instance( + "QDir.SortFlags(QDir.Name | QDir.IgnoreCase)"), + "PyBytes": bytes, + "PyByteArray": bytearray, + "PyUnicode": Text, + "signed long": int, + "PySide2.QtCore.int": int, + "PySide2.QtCore.char": StringList, # A 'char **' is a list of strings. + "char[]": StringList, # 5.9 + "unsigned long int": int, # 5.6, RHEL 6.6 + "unsigned short int": int, # 5.6, RHEL 6.6 + "4294967295UL": 4294967295, # 5.6, RHEL 6.6 + "PySide2.QtCore.int32_t": int, # 5.9 + "PySide2.QtCore.int64_t": int, # 5.9 + "UnsignedShortType": int, # 5.9 + "nullptr": None, # 5.9 + "uint64_t": int, # 5.9 + "PySide2.QtCore.uint32_t": int, # 5.9 + "float[][]": FloatMatrix, # 5.9 + "PySide2.QtCore.unsigned int": int, # 5.9 Ubuntu + "PySide2.QtCore.long long": int, # 5.9, MSVC 15 + "QGenericArgument(nullptr)": QGenericArgument(None), # 5.10 + "QModelIndex()": Invalid("PySide2.QtCore.QModelIndex"), # repr is btw. very wrong, fix it?! + "QGenericArgument((0))": None, # 5.6, RHEL 6.6. Is that ok? + "QGenericArgument()": None, + "QGenericArgument(0)": None, + "QGenericArgument(NULL)": None, # 5.6, MSVC + "QGenericArgument(Q_NULLPTR)": None, + "zero(PySide2.QtCore.QObject)": None, + "zero(PySide2.QtCore.QThread)": None, + "zero(quintptr)": 0, + "zero(str)": "", + "zero(int)": 0, + "zero(PySide2.QtCore.QState)": None, + "zero(PySide2.QtCore.bool)": False, + "zero(PySide2.QtCore.int)": 0, + "zero(void)": None, + "zero(long long)": 0, + "zero(PySide2.QtCore.QAbstractItemModel)": None, + "zero(PySide2.QtCore.QJsonParseError)": None, + "zero(double)": 0.0, + "zero(PySide2.QtCore.qint64)": 0, + "zero(PySide2.QtCore.QTextCodec.ConverterState)": None, + "zero(long long)": 0, + "zero(QImageCleanupFunction)": None, + "zero(unsigned int)": 0, + "zero(PySide2.QtCore.QPoint)": Default("PySide2.QtCore.QPoint"), + "zero(unsigned char)": 0, + "zero(PySide2.QtCore.QEvent.Type)": None, + "CheckIndexOption.NoOption": Instance( + "PySide2.QtCore.QAbstractItemModel.CheckIndexOptions.NoOption"), # 5.11 + }) + try: + type_map.update({ + "PySide2.QtCore.QMetaObject.Connection": PySide2.QtCore.Connection, # wrong! + }) + except AttributeError: + # this does not exist on 5.9 ATM. + pass + return locals() + +def init_QtGui(): + import PySide2.QtGui + from PySide2.QtGui import QPageLayout, QPageSize # 5.9 + type_map.update({ + "QVector< QTextLayout.FormatRange >()": [], # do we need more structure? + "USHRT_MAX": ushort_max, + "0.0f": 0.0, + "1.0f": 1.0, + "uint32_t": int, + "uint8_t": int, + "int32_t": int, + "GL_COLOR_BUFFER_BIT": GL_COLOR_BUFFER_BIT, + "GL_NEAREST": GL_NEAREST, + "WId": WId, + "PySide2.QtGui.QPlatformSurface": Virtual("PySide2.QtGui.QPlatformSurface"), # hmm... + "QList< QTouchEvent.TouchPoint >()": [], # XXX improve? + "QPixmap()": Default("PySide2.QtGui.QPixmap"), # can't create without qApp + "PySide2.QtCore.uint8_t": int, # macOS 5.9 + "zero(uint32_t)": 0, + "zero(PySide2.QtGui.QWindow)": None, + "zero(PySide2.QtGui.QOpenGLContext)": None, + "zero(PySide2.QtGui.QRegion)": None, + "zero(PySide2.QtGui.QPaintDevice)": None, + "zero(PySide2.QtGui.QTextLayout.FormatRange)": None, + "zero(PySide2.QtGui.QTouchDevice)": None, + "zero(PySide2.QtGui.QScreen)": None, + }) + return locals() + +def init_QtWidgets(): + import PySide2.QtWidgets + from PySide2.QtWidgets import QWidget, QMessageBox, QStyleOption, QStyleHintReturn, QStyleOptionComplex + from PySide2.QtWidgets import QGraphicsItem, QStyleOptionGraphicsItem # 5.9 + GraphicsItemList = typing.List[QGraphicsItem] + StyleOptionGraphicsItemList = typing.List[QStyleOptionGraphicsItem] + type_map.update({ + "QMessageBox.StandardButtons(Yes | No)": Instance( + "QMessageBox.StandardButtons(QMessageBox.Yes | QMessageBox.No)"), + "QWidget.RenderFlags(DrawWindowBackground | DrawChildren)": Instance( + "QWidget.RenderFlags(QWidget.DrawWindowBackground | QWidget.DrawChildren)"), + "static_cast(Qt.MatchExactly|Qt.MatchCaseSensitive)": Instance( + "Qt.MatchFlags(Qt.MatchExactly | Qt.MatchCaseSensitive)"), + "QVector< int >()": [], + "WId": WId, + # from 5.9 + "Type": PySide2.QtWidgets.QListWidgetItem.Type, + "SO_Default": QStyleOption.SO_Default, + "SH_Default": QStyleHintReturn.SH_Default, + "SO_Complex": QStyleOptionComplex.SO_Complex, + "QGraphicsItem[]": GraphicsItemList, + "QStyleOptionGraphicsItem[]": StyleOptionGraphicsItemList, + "zero(PySide2.QtWidgets.QWidget)": None, + "zero(PySide2.QtWidgets.QGraphicsItem)": None, + "zero(PySide2.QtCore.QEvent)": None, + "zero(PySide2.QtWidgets.QStyleOption)": None, + "zero(PySide2.QtWidgets.QStyleHintReturn)": None, + "zero(PySide2.QtWidgets.QGraphicsLayoutItem)": None, + "zero(PySide2.QtWidgets.QListWidget)": None, + "zero(PySide2.QtGui.QKeySequence)": None, + "zero(PySide2.QtWidgets.QAction)": None, + "zero(PySide2.QtWidgets.QUndoCommand)": None, + "zero(WId)": 0, + }) + return locals() + +def init_QtSql(): + import PySide2.QtSql + from PySide2.QtSql import QSqlDatabase + type_map.update({ + "QLatin1String(defaultConnection)": QSqlDatabase.defaultConnection, + "QVariant.Invalid": Invalid("PySide2.QtCore.QVariant"), # not sure what I should create, here... + }) + return locals() + +def init_QtNetwork(): + import PySide2.QtNetwork + type_map.update({ + "QMultiMap": MultiMap, + "zero(unsigned short)": 0, + "zero(PySide2.QtCore.QIODevice)": None, + "zero(QList)": [], + }) + return locals() + +def init_QtXmlPatterns(): + import PySide2.QtXmlPatterns + from PySide2.QtXmlPatterns import QXmlName + type_map.update({ + "QXmlName.PrefixCode": Missing("PySide2.QtXmlPatterns.QXmlName.PrefixCode"), + "QXmlName.NamespaceCode": Missing("PySide2.QtXmlPatterns.QXmlName.NamespaceCode") + }) + return locals() + +def init_QtMultimedia(): + import PySide2.QtMultimedia + import PySide2.QtMultimediaWidgets + type_map.update({ + "QVariantMap": dict, + "QGraphicsVideoItem": PySide2.QtMultimediaWidgets.QGraphicsVideoItem, + "QVideoWidget": PySide2.QtMultimediaWidgets.QVideoWidget, + }) + return locals() + +def init_QtOpenGL(): + import PySide2.QtOpenGL + type_map.update({ + "GLuint": int, + "GLenum": int, + "GLint": int, + "GLbitfield": int, + "PySide2.QtOpenGL.GLint": int, + "PySide2.QtOpenGL.GLuint": int, + "GLfloat": float, # 5.6, MSVC 15 + "zero(PySide2.QtOpenGL.QGLContext)": None, + "zero(GLenum)": 0, + "zero(PySide2.QtOpenGL.QGLWidget)": None, + }) + return locals() + +def init_QtQml(): + import PySide2.QtQml + type_map.update({ + "QJSValueList()": [], + "PySide2.QtQml.bool volatile": bool, + # from 5.9 + "QVariantHash()": {}, + "zero(PySide2.QtQml.QQmlContext)": None, + "zero(PySide2.QtQml.QQmlEngine)": None, + }) + return locals() + +def init_QtQuick(): + import PySide2.QtQuick + type_map.update({ + "PySide2.QtQuick.QSharedPointer": int, + "PySide2.QtCore.uint": int, + "T": int, + "zero(PySide2.QtQuick.QQuickItem)": None, + "zero(GLuint)": 0, + }) + return locals() + +def init_QtScript(): + import PySide2.QtScript + type_map.update({ + "QScriptValueList()": [], + }) + return locals() + +def init_QtTest(): + import PySide2.QtTest + type_map.update({ + "PySide2.QtTest.QTouchEventSequence": PySide2.QtTest.QTest.QTouchEventSequence, + }) + return locals() + +# from 5.9 +def init_QtWebEngineWidgets(): + import PySide2.QtWebEngineWidgets + type_map.update({ + "PySide2.QtTest.QTouchEventSequence": PySide2.QtTest.QTest.QTouchEventSequence, + "zero(PySide2.QtWebEngineWidgets.QWebEnginePage.FindFlags)": 0, + }) + return locals() + +# from 5.6, MSVC +def init_QtWinExtras(): + import PySide2.QtWinExtras + type_map.update({ + "QList< QWinJumpListItem* >()": [], + }) + return locals() + +# Here was testbinding, actually the source of all evil. + +# end of file diff --git a/sources/pyside2/PySide2/support/signature/parser.py b/sources/pyside2/PySide2/support/signature/parser.py new file mode 100644 index 0000000..9313fb5 --- /dev/null +++ b/sources/pyside2/PySide2/support/signature/parser.py @@ -0,0 +1,245 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function, absolute_import + +import sys +import re +import warnings +import types +import keyword +import functools +from .mapping import type_map, update_mapping, __dict__ as namespace + +_DEBUG = False + +""" +parser.py + +This module parses the signature text and creates properties for the +signature objects. + +PySide has a new function 'CppGenerator::writeSignatureInfo()' +that extracts the gathered information about the function arguments +and defaults as good as it can. But what PySide generates is still +very C-ish and has many constants that Python doesn't understand. + +The function 'try_to_guess()' below understands a lot of PySide's +peculiar way to assume local context. If it is able to do the guess, +then the result is inserted into the dict, so the search happens +not again. For everything that is not covered by these automatic +guesses, we provide an entry in 'type_map' that resolves it. + +In effect, 'type_map' maps text to real Python objects. +""" + +def dprint(*args, **kw): + if _DEBUG: + import pprint + for arg in args: + pprint.pprint(arg) + +def _parse_line(line): + line_re = r""" + ((?P ([0-9]+)) : )? # the optional multi-index + (?P \w+(\.\w+)*) # the function name + \( (?P .*?) \) # the argument list + ( -> (?P .*) )? # the optional return type + $ + """ + ret = re.match(line_re, line, re.VERBOSE).groupdict() + arglist = ret["arglist"] + # The following is a split re. The string is broken into pieces which are + # between the recognized strings. Because the re has groups, both the + # strings and the delimiters are returned, where the strings are not + # interesting at all: They are just the commata. + # Note that it is necessary to put the characters with special handling in + # the first group (comma, brace, angle bracket). + # Then they are not recognized there, and we can handle them differently + # in the following expressions. + arglist = list(x.strip() for x in re.split(r""" + ( + (?: # inner group is not capturing + [^,()<>] # no commas or braces or angle brackets + | + \( + (?: + [^()]* # or one brace pair + | + \( + [^()]* # or doubls nested pair + \) + )* + \) + | + < # or one angle bracket pair + [^<>]* + > + )+ # longest possible span + ) # this list is interspersed with "," and surrounded by "" + """, arglist, flags=re.VERBOSE) + if x.strip() not in ("", ",")) + args = [] + for arg in arglist: + name, ann = arg.split(":") + if name in keyword.kwlist: + name = name + "_" + if "=" in ann: + ann, default = ann.split("=") + tup = name, ann, default + else: + tup = name, ann + args.append(tup) + ret["arglist"] = args + multi = ret["multi"] + if multi is not None: + ret["multi"] = int(multi) + return ret + +def make_good_value(thing, valtype): + try: + if thing.endswith("()"): + thing = 'Default("{}")'.format(thing[:-2]) + else: + ret = eval(thing, namespace) + if valtype and repr(ret).startswith("<"): + thing = 'Instance("{}")'.format(thing) + return eval(thing, namespace) + except Exception: + pass + +def try_to_guess(thing, valtype): + if "." not in thing and "(" not in thing: + text = "{}.{}".format(valtype, thing) + ret = make_good_value(text, valtype) + if ret is not None: + return ret + typewords = valtype.split(".") + valwords = thing.split(".") + braceless = valwords[0] # Yes, not -1. Relevant is the overlapped word. + if "(" in braceless: + braceless = braceless[:braceless.index("(")] + for idx, w in enumerate(typewords): + if w == braceless: + text = ".".join(typewords[:idx] + valwords) + ret = make_good_value(text, valtype) + if ret is not None: + return ret + return None + +def _resolve_value(thing, valtype, line): + if thing in ("0", "None") and valtype: + thing = "zero({})".format(valtype) + if thing in type_map: + return type_map[thing] + res = make_good_value(thing, valtype) + if res is not None: + type_map[thing] = res + return res + res = try_to_guess(thing, valtype) if valtype else None + if res is not None: + type_map[thing] = res + return res + warnings.warn("""pyside_type_init: + + UNRECOGNIZED: {!r} + OFFENDING LINE: {!r} + """.format(thing, line), RuntimeWarning) + return thing + +def _resolve_type(thing, line): + return _resolve_value(thing, None, line) + +def calculate_props(line): + line = line.strip() + res = _parse_line(line) + arglist = res["arglist"] + annotations = {} + _defaults = [] + for tup in arglist: + name, ann = tup[:2] + annotations[name] = _resolve_type(ann, line) + if len(tup) == 3: + default = _resolve_value(tup[2], ann, line) + _defaults.append(default) + defaults = tuple(_defaults) + returntype = res["returntype"] + if returntype is not None: + annotations["return"] = _resolve_type(returntype, line) + props = {} + props["defaults"] = defaults + props["kwdefaults"] = {} + props["annotations"] = annotations + props["varnames"] = varnames = tuple(tup[0] for tup in arglist) + funcname = res["funcname"] + props["fullname"] = funcname + shortname = funcname[funcname.rindex(".")+1:] + props["name"] = shortname + props["multi"] = res["multi"] + return props + +def pyside_type_init(typemod, sig_str): + dprint() + if type(typemod) is types.ModuleType: + dprint("Initialization of module '{}'".format(typemod.__name__)) + else: + dprint("Initialization of type '{}.{}'".format(typemod.__module__, + typemod.__name__)) + update_mapping() + ret = {} + multi_props = [] + for line in sig_str.strip().splitlines(): + props = calculate_props(line) + shortname = props["name"] + multi = props["multi"] + if multi is None: + ret[shortname] = props + dprint(props) + else: + fullname = props.pop("fullname") + multi_props.append(props) + if multi > 0: + continue + multi_props = {"multi": multi_props, "fullname": fullname} + ret[shortname] = multi_props + dprint(multi_props) + multi_props = [] + return ret + +# end of file diff --git a/sources/pyside2/PySide2/support/signature/qt_attribution.json b/sources/pyside2/PySide2/support/signature/qt_attribution.json new file mode 100644 index 0000000..491ae80 --- /dev/null +++ b/sources/pyside2/PySide2/support/signature/qt_attribution.json @@ -0,0 +1,13 @@ +{ + "Id": "python", + "Name": "Python", + "QDocModule": "QtForPython", + "QtUsage": "Used for Qt for Python in the signature extension.", + "Description": "Qt for Python is an add-on for Python. The signature packages of PySide uses certain copied and adapted source files (backport_inspect.py, typing27.py). See the folder sources/pyside2/PySide2/support/signature .", + "Homepage": "http://www.python.org/", + "Version": "3.7.0", + "LicenseId": "Python-2.0", + "License": "Python License 2.0", + "LicenseFile": "PSF-3.7.0.txt", + "Copyright": "© Copyright 2001-2018, Python Software Foundation." +} diff --git a/sources/pyside2/PySide2/support/signature/typing27.py b/sources/pyside2/PySide2/support/signature/typing27.py new file mode 100644 index 0000000..ae1d6ba --- /dev/null +++ b/sources/pyside2/PySide2/support/signature/typing27.py @@ -0,0 +1,2288 @@ +# This Python file uses the following encoding: utf-8 +# It has been edited by fix-complaints.py . + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" +PSF LICENSE AGREEMENT FOR PYTHON 3.7.0 + +1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and + the Individual or Organization ("Licensee") accessing and otherwise using Python + 3.7.0 software in source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby + grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, + analyze, test, perform and/or display publicly, prepare derivative works, + distribute, and otherwise use Python 3.7.0 alone or in any derivative + version, provided, however, that PSF's License Agreement and PSF's notice of + copyright, i.e., "Copyright © 2001-2018 Python Software Foundation; All Rights + Reserved" are retained in Python 3.7.0 alone or in any derivative version + prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on or + incorporates Python 3.7.0 or any part thereof, and wants to make the + derivative work available to others as provided herein, then Licensee hereby + agrees to include in any such work a brief summary of the changes made to Python + 3.7.0. + +4. PSF is making Python 3.7.0 available to Licensee on an "AS IS" basis. + PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF + EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR + WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE + USE OF PYTHON 3.7.0 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 3.7.0 + FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF + MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 3.7.0, OR ANY DERIVATIVE + THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material breach of + its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any relationship + of agency, partnership, or joint venture between PSF and Licensee. This License + Agreement does not grant permission to use PSF trademarks or trade name in a + trademark sense to endorse or promote products or services of Licensee, or any + third party. + +8. By copying, installing or otherwise using Python 3.7.0, Licensee agrees + to be bound by the terms and conditions of this License Agreement. +""" + +from __future__ import absolute_import, unicode_literals + +import abc +from abc import abstractmethod, abstractproperty +import collections +import functools +import re as stdlib_re # Avoid confusion with the re we export. +import sys +import types +try: + import collections.abc as collections_abc +except ImportError: + import collections as collections_abc # Fallback for PY3.2. + + +# Please keep __all__ alphabetized within each category. +__all__ = [ + # Super-special typing primitives. + 'Any', + 'Callable', + 'ClassVar', + 'Generic', + 'Optional', + 'Tuple', + 'Type', + 'TypeVar', + 'Union', + + # ABCs (from collections.abc). + 'AbstractSet', # collections.abc.Set. + 'GenericMeta', # subclass of abc.ABCMeta and a metaclass + # for 'Generic' and ABCs below. + 'ByteString', + 'Container', + 'ContextManager', + 'Hashable', + 'ItemsView', + 'Iterable', + 'Iterator', + 'KeysView', + 'Mapping', + 'MappingView', + 'MutableMapping', + 'MutableSequence', + 'MutableSet', + 'Sequence', + 'Sized', + 'ValuesView', + + # Structural checks, a.k.a. protocols. + 'Reversible', + 'SupportsAbs', + 'SupportsComplex', + 'SupportsFloat', + 'SupportsInt', + + # Concrete collection types. + 'Counter', + 'Deque', + 'Dict', + 'DefaultDict', + 'List', + 'Set', + 'FrozenSet', + 'NamedTuple', # Not really a type. + 'Generator', + + # One-off things. + 'AnyStr', + 'cast', + 'get_type_hints', + 'NewType', + 'no_type_check', + 'no_type_check_decorator', + 'overload', + 'Text', + 'TYPE_CHECKING', +] + +# The pseudo-submodules 're' and 'io' are part of the public +# namespace, but excluded from __all__ because they might stomp on +# legitimate imports of those modules. + + +def _qualname(x): + if sys.version_info[:2] >= (3, 3): + return x.__qualname__ + else: + # Fall back to just name. + return x.__name__ + + +def _trim_name(nm): + whitelist = ('_TypeAlias', '_ForwardRef', '_TypingBase', '_FinalTypingBase') + if nm.startswith('_') and nm not in whitelist: + nm = nm[1:] + return nm + + +class TypingMeta(type): + """Metaclass for most types defined in typing module + (not a part of public API). + + This also defines a dummy constructor (all the work for most typing + constructs is done in __new__) and a nicer repr(). + """ + + _is_protocol = False + + def __new__(cls, name, bases, namespace): + return super(TypingMeta, cls).__new__(cls, str(name), bases, namespace) + + @classmethod + def assert_no_subclassing(cls, bases): + for base in bases: + if isinstance(base, cls): + raise TypeError("Cannot subclass %s" % + (', '.join(map(_type_repr, bases)) or '()')) + + def __init__(self, *args, **kwds): + pass + + def _eval_type(self, globalns, localns): + """Override this in subclasses to interpret forward references. + + For example, List['C'] is internally stored as + List[_ForwardRef('C')], which should evaluate to List[C], + where C is an object found in globalns or localns (searching + localns first, of course). + """ + return self + + def _get_type_vars(self, tvars): + pass + + def __repr__(self): + qname = _trim_name(_qualname(self)) + return '%s.%s' % (self.__module__, qname) + + +class _TypingBase(object): + """Internal indicator of special typing constructs.""" + __metaclass__ = TypingMeta + __slots__ = ('__weakref__',) + + def __init__(self, *args, **kwds): + pass + + def __new__(cls, *args, **kwds): + """Constructor. + + This only exists to give a better error message in case + someone tries to subclass a special typing object (not a good idea). + """ + if (len(args) == 3 and + isinstance(args[0], str) and + isinstance(args[1], tuple)): + # Close enough. + raise TypeError("Cannot subclass %r" % cls) + return super(_TypingBase, cls).__new__(cls) + + # Things that are not classes also need these. + def _eval_type(self, globalns, localns): + return self + + def _get_type_vars(self, tvars): + pass + + def __repr__(self): + cls = type(self) + qname = _trim_name(_qualname(cls)) + return '%s.%s' % (cls.__module__, qname) + + def __call__(self, *args, **kwds): + raise TypeError("Cannot instantiate %r" % type(self)) + + +class _FinalTypingBase(_TypingBase): + """Internal mix-in class to prevent instantiation. + + Prevents instantiation unless _root=True is given in class call. + It is used to create pseudo-singleton instances Any, Union, Optional, etc. + """ + + __slots__ = () + + def __new__(cls, *args, **kwds): + self = super(_FinalTypingBase, cls).__new__(cls, *args, **kwds) + if '_root' in kwds and kwds['_root'] is True: + return self + raise TypeError("Cannot instantiate %r" % cls) + + def __reduce__(self): + return _trim_name(type(self).__name__) + + +class _ForwardRef(_TypingBase): + """Internal wrapper to hold a forward reference.""" + + __slots__ = ('__forward_arg__', '__forward_code__', + '__forward_evaluated__', '__forward_value__') + + def __init__(self, arg): + super(_ForwardRef, self).__init__(arg) + if not isinstance(arg, basestring): + raise TypeError('Forward reference must be a string -- got %r' % (arg,)) + try: + code = compile(arg, '', 'eval') + except SyntaxError: + raise SyntaxError('Forward reference must be an expression -- got %r' % + (arg,)) + self.__forward_arg__ = arg + self.__forward_code__ = code + self.__forward_evaluated__ = False + self.__forward_value__ = None + + def _eval_type(self, globalns, localns): + if not self.__forward_evaluated__ or localns is not globalns: + if globalns is None and localns is None: + globalns = localns = {} + elif globalns is None: + globalns = localns + elif localns is None: + localns = globalns + self.__forward_value__ = _type_check( + eval(self.__forward_code__, globalns, localns), + "Forward references must evaluate to types.") + self.__forward_evaluated__ = True + return self.__forward_value__ + + def __eq__(self, other): + if not isinstance(other, _ForwardRef): + return NotImplemented + return (self.__forward_arg__ == other.__forward_arg__ and + self.__forward_value__ == other.__forward_value__) + + def __hash__(self): + return hash((self.__forward_arg__, self.__forward_value__)) + + def __instancecheck__(self, obj): + raise TypeError("Forward references cannot be used with isinstance().") + + def __subclasscheck__(self, cls): + raise TypeError("Forward references cannot be used with issubclass().") + + def __repr__(self): + return '_ForwardRef(%r)' % (self.__forward_arg__,) + + +class _TypeAlias(_TypingBase): + """Internal helper class for defining generic variants of concrete types. + + Note that this is not a type; let's call it a pseudo-type. It cannot + be used in instance and subclass checks in parameterized form, i.e. + ``isinstance(42, Match[str])`` raises ``TypeError`` instead of returning + ``False``. + """ + + __slots__ = ('name', 'type_var', 'impl_type', 'type_checker') + + def __init__(self, name, type_var, impl_type, type_checker): + """Initializer. + + Args: + name: The name, e.g. 'Pattern'. + type_var: The type parameter, e.g. AnyStr, or the + specific type, e.g. str. + impl_type: The implementation type. + type_checker: Function that takes an impl_type instance. + and returns a value that should be a type_var instance. + """ + assert isinstance(name, basestring), repr(name) + assert isinstance(impl_type, type), repr(impl_type) + assert not isinstance(impl_type, TypingMeta), repr(impl_type) + assert isinstance(type_var, (type, _TypingBase)), repr(type_var) + self.name = name + self.type_var = type_var + self.impl_type = impl_type + self.type_checker = type_checker + + def __repr__(self): + return "%s[%s]" % (self.name, _type_repr(self.type_var)) + + def __getitem__(self, parameter): + if not isinstance(self.type_var, TypeVar): + raise TypeError("%s cannot be further parameterized." % self) + if self.type_var.__constraints__ and isinstance(parameter, type): + if not issubclass(parameter, self.type_var.__constraints__): + raise TypeError("%s is not a valid substitution for %s." % + (parameter, self.type_var)) + if isinstance(parameter, TypeVar) and parameter is not self.type_var: + raise TypeError("%s cannot be re-parameterized." % self) + return self.__class__(self.name, parameter, + self.impl_type, self.type_checker) + + def __eq__(self, other): + if not isinstance(other, _TypeAlias): + return NotImplemented + return self.name == other.name and self.type_var == other.type_var + + def __hash__(self): + return hash((self.name, self.type_var)) + + def __instancecheck__(self, obj): + if not isinstance(self.type_var, TypeVar): + raise TypeError("Parameterized type aliases cannot be used " + "with isinstance().") + return isinstance(obj, self.impl_type) + + def __subclasscheck__(self, cls): + if not isinstance(self.type_var, TypeVar): + raise TypeError("Parameterized type aliases cannot be used " + "with issubclass().") + return issubclass(cls, self.impl_type) + + +def _get_type_vars(types, tvars): + for t in types: + if isinstance(t, TypingMeta) or isinstance(t, _TypingBase): + t._get_type_vars(tvars) + + +def _type_vars(types): + tvars = [] + _get_type_vars(types, tvars) + return tuple(tvars) + + +def _eval_type(t, globalns, localns): + if isinstance(t, TypingMeta) or isinstance(t, _TypingBase): + return t._eval_type(globalns, localns) + return t + + +def _type_check(arg, msg): + """Check that the argument is a type, and return it (internal helper). + + As a special case, accept None and return type(None) instead. + Also, _TypeAlias instances (e.g. Match, Pattern) are acceptable. + + The msg argument is a human-readable error message, e.g. + + "Union[arg, ...]: arg should be a type." + + We append the repr() of the actual value (truncated to 100 chars). + """ + if arg is None: + return type(None) + if isinstance(arg, basestring): + arg = _ForwardRef(arg) + if ( + isinstance(arg, _TypingBase) and type(arg).__name__ == '_ClassVar' or + not isinstance(arg, (type, _TypingBase)) and not callable(arg) + ): + raise TypeError(msg + " Got %.100r." % (arg,)) + # Bare Union etc. are not valid as type arguments + if ( + type(arg).__name__ in ('_Union', '_Optional') and + not getattr(arg, '__origin__', None) or + isinstance(arg, TypingMeta) and _gorg(arg) in (Generic, _Protocol) + ): + raise TypeError("Plain %s is not valid as type argument" % arg) + return arg + + +def _type_repr(obj): + """Return the repr() of an object, special-casing types (internal helper). + + If obj is a type, we return a shorter version than the default + type.__repr__, based on the module and qualified name, which is + typically enough to uniquely identify a type. For everything + else, we fall back on repr(obj). + """ + if isinstance(obj, type) and not isinstance(obj, TypingMeta): + if obj.__module__ == '__builtin__': + return _qualname(obj) + return '%s.%s' % (obj.__module__, _qualname(obj)) + if obj is Ellipsis: + return('...') + if isinstance(obj, types.FunctionType): + return obj.__name__ + return repr(obj) + + +class ClassVarMeta(TypingMeta): + """Metaclass for _ClassVar""" + + def __new__(cls, name, bases, namespace): + cls.assert_no_subclassing(bases) + self = super(ClassVarMeta, cls).__new__(cls, name, bases, namespace) + return self + + +class _ClassVar(_FinalTypingBase): + """Special type construct to mark class variables. + + An annotation wrapped in ClassVar indicates that a given + attribute is intended to be used as a class variable and + should not be set on instances of that class. Usage:: + + class Starship: + stats = {} # type: ClassVar[Dict[str, int]] # class variable + damage = 10 # type: int # instance variable + + ClassVar accepts only types and cannot be further subscribed. + + Note that ClassVar is not a class itself, and should not + be used with isinstance() or issubclass(). + """ + + __metaclass__ = ClassVarMeta + __slots__ = ('__type__',) + + def __init__(self, tp=None, _root=False): + self.__type__ = tp + + def __getitem__(self, item): + cls = type(self) + if self.__type__ is None: + return cls(_type_check(item, + '{} accepts only types.'.format(cls.__name__[1:])), + _root=True) + raise TypeError('{} cannot be further subscripted' + .format(cls.__name__[1:])) + + def _eval_type(self, globalns, localns): + return type(self)(_eval_type(self.__type__, globalns, localns), + _root=True) + + def __repr__(self): + r = super(_ClassVar, self).__repr__() + if self.__type__ is not None: + r += '[{}]'.format(_type_repr(self.__type__)) + return r + + def __hash__(self): + return hash((type(self).__name__, self.__type__)) + + def __eq__(self, other): + if not isinstance(other, _ClassVar): + return NotImplemented + if self.__type__ is not None: + return self.__type__ == other.__type__ + return self is other + + +ClassVar = _ClassVar(_root=True) + + +class AnyMeta(TypingMeta): + """Metaclass for Any.""" + + def __new__(cls, name, bases, namespace): + cls.assert_no_subclassing(bases) + self = super(AnyMeta, cls).__new__(cls, name, bases, namespace) + return self + + +class _Any(_FinalTypingBase): + """Special type indicating an unconstrained type. + + - Any is compatible with every type. + - Any assumed to have all methods. + - All values assumed to be instances of Any. + + Note that all the above statements are true from the point of view of + static type checkers. At runtime, Any should not be used with instance + or class checks. + """ + __metaclass__ = AnyMeta + __slots__ = () + + def __instancecheck__(self, obj): + raise TypeError("Any cannot be used with isinstance().") + + def __subclasscheck__(self, cls): + raise TypeError("Any cannot be used with issubclass().") + + +Any = _Any(_root=True) + + +class NoReturnMeta(TypingMeta): + """Metaclass for NoReturn.""" + + def __new__(cls, name, bases, namespace): + cls.assert_no_subclassing(bases) + self = super(NoReturnMeta, cls).__new__(cls, name, bases, namespace) + return self + + +class _NoReturn(_FinalTypingBase): + """Special type indicating functions that never return. + Example:: + + from typing import NoReturn + + def stop() -> NoReturn: + raise Exception('no way') + + This type is invalid in other positions, e.g., ``List[NoReturn]`` + will fail in static type checkers. + """ + __metaclass__ = NoReturnMeta + __slots__ = () + + def __instancecheck__(self, obj): + raise TypeError("NoReturn cannot be used with isinstance().") + + def __subclasscheck__(self, cls): + raise TypeError("NoReturn cannot be used with issubclass().") + + +NoReturn = _NoReturn(_root=True) + + +class TypeVarMeta(TypingMeta): + def __new__(cls, name, bases, namespace): + cls.assert_no_subclassing(bases) + return super(TypeVarMeta, cls).__new__(cls, name, bases, namespace) + + +class TypeVar(_TypingBase): + """Type variable. + + Usage:: + + T = TypeVar('T') # Can be anything + A = TypeVar('A', str, bytes) # Must be str or bytes + + Type variables exist primarily for the benefit of static type + checkers. They serve as the parameters for generic types as well + as for generic function definitions. See class Generic for more + information on generic types. Generic functions work as follows: + + def repeat(x: T, n: int) -> List[T]: + '''Return a list containing n references to x.''' + return [x]*n + + def longest(x: A, y: A) -> A: + '''Return the longest of two strings.''' + return x if len(x) >= len(y) else y + + The latter example's signature is essentially the overloading + of (str, str) -> str and (bytes, bytes) -> bytes. Also note + that if the arguments are instances of some subclass of str, + the return type is still plain str. + + At runtime, isinstance(x, T) and issubclass(C, T) will raise TypeError. + + Type variables defined with covariant=True or contravariant=True + can be used do declare covariant or contravariant generic types. + See PEP 484 for more details. By default generic types are invariant + in all type variables. + + Type variables can be introspected. e.g.: + + T.__name__ == 'T' + T.__constraints__ == () + T.__covariant__ == False + T.__contravariant__ = False + A.__constraints__ == (str, bytes) + """ + + __metaclass__ = TypeVarMeta + __slots__ = ('__name__', '__bound__', '__constraints__', + '__covariant__', '__contravariant__') + + def __init__(self, name, *constraints, **kwargs): + super(TypeVar, self).__init__(name, *constraints, **kwargs) + bound = kwargs.get('bound', None) + covariant = kwargs.get('covariant', False) + contravariant = kwargs.get('contravariant', False) + self.__name__ = name + if covariant and contravariant: + raise ValueError("Bivariant types are not supported.") + self.__covariant__ = bool(covariant) + self.__contravariant__ = bool(contravariant) + if constraints and bound is not None: + raise TypeError("Constraints cannot be combined with bound=...") + if constraints and len(constraints) == 1: + raise TypeError("A single constraint is not allowed") + msg = "TypeVar(name, constraint, ...): constraints must be types." + self.__constraints__ = tuple(_type_check(t, msg) for t in constraints) + if bound: + self.__bound__ = _type_check(bound, "Bound must be a type.") + else: + self.__bound__ = None + + def _get_type_vars(self, tvars): + if self not in tvars: + tvars.append(self) + + def __repr__(self): + if self.__covariant__: + prefix = '+' + elif self.__contravariant__: + prefix = '-' + else: + prefix = '~' + return prefix + self.__name__ + + def __instancecheck__(self, instance): + raise TypeError("Type variables cannot be used with isinstance().") + + def __subclasscheck__(self, cls): + raise TypeError("Type variables cannot be used with issubclass().") + + +# Some unconstrained type variables. These are used by the container types. +# (These are not for export.) +T = TypeVar('T') # Any type. +KT = TypeVar('KT') # Key type. +VT = TypeVar('VT') # Value type. +T_co = TypeVar('T_co', covariant=True) # Any type covariant containers. +V_co = TypeVar('V_co', covariant=True) # Any type covariant containers. +VT_co = TypeVar('VT_co', covariant=True) # Value type covariant containers. +T_contra = TypeVar('T_contra', contravariant=True) # Ditto contravariant. + +# A useful type variable with constraints. This represents string types. +# (This one *is* for export!) +AnyStr = TypeVar('AnyStr', bytes, unicode) + + +def _replace_arg(arg, tvars, args): + """An internal helper function: replace arg if it is a type variable + found in tvars with corresponding substitution from args or + with corresponding substitution sub-tree if arg is a generic type. + """ + + if tvars is None: + tvars = [] + if hasattr(arg, '_subs_tree') and isinstance(arg, (GenericMeta, _TypingBase)): + return arg._subs_tree(tvars, args) + if isinstance(arg, TypeVar): + for i, tvar in enumerate(tvars): + if arg == tvar: + return args[i] + return arg + + +# Special typing constructs Union, Optional, Generic, Callable and Tuple +# use three special attributes for internal bookkeeping of generic types: +# * __parameters__ is a tuple of unique free type parameters of a generic +# type, for example, Dict[T, T].__parameters__ == (T,); +# * __origin__ keeps a reference to a type that was subscripted, +# e.g., Union[T, int].__origin__ == Union; +# * __args__ is a tuple of all arguments used in subscripting, +# e.g., Dict[T, int].__args__ == (T, int). + + +def _subs_tree(cls, tvars=None, args=None): + """An internal helper function: calculate substitution tree + for generic cls after replacing its type parameters with + substitutions in tvars -> args (if any). + Repeat the same following __origin__'s. + + Return a list of arguments with all possible substitutions + performed. Arguments that are generic classes themselves are represented + as tuples (so that no new classes are created by this function). + For example: _subs_tree(List[Tuple[int, T]][str]) == [(Tuple, int, str)] + """ + + if cls.__origin__ is None: + return cls + # Make of chain of origins (i.e. cls -> cls.__origin__) + current = cls.__origin__ + orig_chain = [] + while current.__origin__ is not None: + orig_chain.append(current) + current = current.__origin__ + # Replace type variables in __args__ if asked ... + tree_args = [] + for arg in cls.__args__: + tree_args.append(_replace_arg(arg, tvars, args)) + # ... then continue replacing down the origin chain. + for ocls in orig_chain: + new_tree_args = [] + for arg in ocls.__args__: + new_tree_args.append(_replace_arg(arg, ocls.__parameters__, tree_args)) + tree_args = new_tree_args + return tree_args + + +def _remove_dups_flatten(parameters): + """An internal helper for Union creation and substitution: flatten Union's + among parameters, then remove duplicates and strict subclasses. + """ + + # Flatten out Union[Union[...], ...]. + params = [] + for p in parameters: + if isinstance(p, _Union) and p.__origin__ is Union: + params.extend(p.__args__) + elif isinstance(p, tuple) and len(p) > 0 and p[0] is Union: + params.extend(p[1:]) + else: + params.append(p) + # Weed out strict duplicates, preserving the first of each occurrence. + all_params = set(params) + if len(all_params) < len(params): + new_params = [] + for t in params: + if t in all_params: + new_params.append(t) + all_params.remove(t) + params = new_params + assert not all_params, all_params + # Weed out subclasses. + # E.g. Union[int, Employee, Manager] == Union[int, Employee]. + # If object is present it will be sole survivor among proper classes. + # Never discard type variables. + # (In particular, Union[str, AnyStr] != AnyStr.) + all_params = set(params) + for t1 in params: + if not isinstance(t1, type): + continue + if any(isinstance(t2, type) and issubclass(t1, t2) + for t2 in all_params - {t1} + if not (isinstance(t2, GenericMeta) and + t2.__origin__ is not None)): + all_params.remove(t1) + return tuple(t for t in params if t in all_params) + + +def _check_generic(cls, parameters): + # Check correct count for parameters of a generic cls (internal helper). + if not cls.__parameters__: + raise TypeError("%s is not a generic class" % repr(cls)) + alen = len(parameters) + elen = len(cls.__parameters__) + if alen != elen: + raise TypeError("Too %s parameters for %s; actual %s, expected %s" % + ("many" if alen > elen else "few", repr(cls), alen, elen)) + + +_cleanups = [] + + +def _tp_cache(func): + maxsize = 128 + cache = {} + _cleanups.append(cache.clear) + + @functools.wraps(func) + def inner(*args): + key = args + try: + return cache[key] + except TypeError: + # Assume it's an unhashable argument. + return func(*args) + except KeyError: + value = func(*args) + if len(cache) >= maxsize: + # If the cache grows too much, just start over. + cache.clear() + cache[key] = value + return value + + return inner + + +class UnionMeta(TypingMeta): + """Metaclass for Union.""" + + def __new__(cls, name, bases, namespace): + cls.assert_no_subclassing(bases) + return super(UnionMeta, cls).__new__(cls, name, bases, namespace) + + +class _Union(_FinalTypingBase): + """Union type; Union[X, Y] means either X or Y. + + To define a union, use e.g. Union[int, str]. Details: + + - The arguments must be types and there must be at least one. + + - None as an argument is a special case and is replaced by + type(None). + + - Unions of unions are flattened, e.g.:: + + Union[Union[int, str], float] == Union[int, str, float] + + - Unions of a single argument vanish, e.g.:: + + Union[int] == int # The constructor actually returns int + + - Redundant arguments are skipped, e.g.:: + + Union[int, str, int] == Union[int, str] + + - When comparing unions, the argument order is ignored, e.g.:: + + Union[int, str] == Union[str, int] + + - When two arguments have a subclass relationship, the least + derived argument is kept, e.g.:: + + class Employee: pass + class Manager(Employee): pass + Union[int, Employee, Manager] == Union[int, Employee] + Union[Manager, int, Employee] == Union[int, Employee] + Union[Employee, Manager] == Employee + + - Similar for object:: + + Union[int, object] == object + + - You cannot subclass or instantiate a union. + + - You can use Optional[X] as a shorthand for Union[X, None]. + """ + + __metaclass__ = UnionMeta + __slots__ = ('__parameters__', '__args__', '__origin__', '__tree_hash__') + + def __new__(cls, parameters=None, origin=None, *args, **kwds): + self = super(_Union, cls).__new__(cls, parameters, origin, *args, **kwds) + if origin is None: + self.__parameters__ = None + self.__args__ = None + self.__origin__ = None + self.__tree_hash__ = hash(frozenset(('Union',))) + return self + if not isinstance(parameters, tuple): + raise TypeError("Expected parameters=") + if origin is Union: + parameters = _remove_dups_flatten(parameters) + # It's not a union if there's only one type left. + if len(parameters) == 1: + return parameters[0] + self.__parameters__ = _type_vars(parameters) + self.__args__ = parameters + self.__origin__ = origin + # Pre-calculate the __hash__ on instantiation. + # This improves speed for complex substitutions. + subs_tree = self._subs_tree() + if isinstance(subs_tree, tuple): + self.__tree_hash__ = hash(frozenset(subs_tree)) + else: + self.__tree_hash__ = hash(subs_tree) + return self + + def _eval_type(self, globalns, localns): + if self.__args__ is None: + return self + ev_args = tuple(_eval_type(t, globalns, localns) for t in self.__args__) + ev_origin = _eval_type(self.__origin__, globalns, localns) + if ev_args == self.__args__ and ev_origin == self.__origin__: + # Everything is already evaluated. + return self + return self.__class__(ev_args, ev_origin, _root=True) + + def _get_type_vars(self, tvars): + if self.__origin__ and self.__parameters__: + _get_type_vars(self.__parameters__, tvars) + + def __repr__(self): + if self.__origin__ is None: + return super(_Union, self).__repr__() + tree = self._subs_tree() + if not isinstance(tree, tuple): + return repr(tree) + return tree[0]._tree_repr(tree) + + def _tree_repr(self, tree): + arg_list = [] + for arg in tree[1:]: + if not isinstance(arg, tuple): + arg_list.append(_type_repr(arg)) + else: + arg_list.append(arg[0]._tree_repr(arg)) + return super(_Union, self).__repr__() + '[%s]' % ', '.join(arg_list) + + @_tp_cache + def __getitem__(self, parameters): + if parameters == (): + raise TypeError("Cannot take a Union of no types.") + if not isinstance(parameters, tuple): + parameters = (parameters,) + if self.__origin__ is None: + msg = "Union[arg, ...]: each arg must be a type." + else: + msg = "Parameters to generic types must be types." + parameters = tuple(_type_check(p, msg) for p in parameters) + if self is not Union: + _check_generic(self, parameters) + return self.__class__(parameters, origin=self, _root=True) + + def _subs_tree(self, tvars=None, args=None): + if self is Union: + return Union # Nothing to substitute + tree_args = _subs_tree(self, tvars, args) + tree_args = _remove_dups_flatten(tree_args) + if len(tree_args) == 1: + return tree_args[0] # Union of a single type is that type + return (Union,) + tree_args + + def __eq__(self, other): + if isinstance(other, _Union): + return self.__tree_hash__ == other.__tree_hash__ + elif self is not Union: + return self._subs_tree() == other + else: + return self is other + + def __hash__(self): + return self.__tree_hash__ + + def __instancecheck__(self, obj): + raise TypeError("Unions cannot be used with isinstance().") + + def __subclasscheck__(self, cls): + raise TypeError("Unions cannot be used with issubclass().") + + +Union = _Union(_root=True) + + +class OptionalMeta(TypingMeta): + """Metaclass for Optional.""" + + def __new__(cls, name, bases, namespace): + cls.assert_no_subclassing(bases) + return super(OptionalMeta, cls).__new__(cls, name, bases, namespace) + + +class _Optional(_FinalTypingBase): + """Optional type. + + Optional[X] is equivalent to Union[X, None]. + """ + + __metaclass__ = OptionalMeta + __slots__ = () + + @_tp_cache + def __getitem__(self, arg): + arg = _type_check(arg, "Optional[t] requires a single type.") + return Union[arg, type(None)] + + +Optional = _Optional(_root=True) + + +def _gorg(a): + """Return the farthest origin of a generic class (internal helper).""" + assert isinstance(a, GenericMeta) + while a.__origin__ is not None: + a = a.__origin__ + return a + + +def _geqv(a, b): + """Return whether two generic classes are equivalent (internal helper). + + The intention is to consider generic class X and any of its + parameterized forms (X[T], X[int], etc.) as equivalent. + + However, X is not equivalent to a subclass of X. + + The relation is reflexive, symmetric and transitive. + """ + assert isinstance(a, GenericMeta) and isinstance(b, GenericMeta) + # Reduce each to its origin. + return _gorg(a) is _gorg(b) + + +def _next_in_mro(cls): + """Helper for Generic.__new__. + + Returns the class after the last occurrence of Generic or + Generic[...] in cls.__mro__. + """ + next_in_mro = object + # Look for the last occurrence of Generic or Generic[...]. + for i, c in enumerate(cls.__mro__[:-1]): + if isinstance(c, GenericMeta) and _gorg(c) is Generic: + next_in_mro = cls.__mro__[i + 1] + return next_in_mro + + +def _make_subclasshook(cls): + """Construct a __subclasshook__ callable that incorporates + the associated __extra__ class in subclass checks performed + against cls. + """ + if isinstance(cls.__extra__, abc.ABCMeta): + # The logic mirrors that of ABCMeta.__subclasscheck__. + # Registered classes need not be checked here because + # cls and its extra share the same _abc_registry. + def __extrahook__(cls, subclass): + res = cls.__extra__.__subclasshook__(subclass) + if res is not NotImplemented: + return res + if cls.__extra__ in getattr(subclass, '__mro__', ()): + return True + for scls in cls.__extra__.__subclasses__(): + if isinstance(scls, GenericMeta): + continue + if issubclass(subclass, scls): + return True + return NotImplemented + else: + # For non-ABC extras we'll just call issubclass(). + def __extrahook__(cls, subclass): + if cls.__extra__ and issubclass(subclass, cls.__extra__): + return True + return NotImplemented + return classmethod(__extrahook__) + + +class GenericMeta(TypingMeta, abc.ABCMeta): + """Metaclass for generic types. + + This is a metaclass for typing.Generic and generic ABCs defined in + typing module. User defined subclasses of GenericMeta can override + __new__ and invoke super().__new__. Note that GenericMeta.__new__ + has strict rules on what is allowed in its bases argument: + * plain Generic is disallowed in bases; + * Generic[...] should appear in bases at most once; + * if Generic[...] is present, then it should list all type variables + that appear in other bases. + In addition, type of all generic bases is erased, e.g., C[int] is + stripped to plain C. + """ + + def __new__(cls, name, bases, namespace, + tvars=None, args=None, origin=None, extra=None, orig_bases=None): + """Create a new generic class. GenericMeta.__new__ accepts + keyword arguments that are used for internal bookkeeping, therefore + an override should pass unused keyword arguments to super(). + """ + if tvars is not None: + # Called from __getitem__() below. + assert origin is not None + assert all(isinstance(t, TypeVar) for t in tvars), tvars + else: + # Called from class statement. + assert tvars is None, tvars + assert args is None, args + assert origin is None, origin + + # Get the full set of tvars from the bases. + tvars = _type_vars(bases) + # Look for Generic[T1, ..., Tn]. + # If found, tvars must be a subset of it. + # If not found, tvars is it. + # Also check for and reject plain Generic, + # and reject multiple Generic[...]. + gvars = None + for base in bases: + if base is Generic: + raise TypeError("Cannot inherit from plain Generic") + if (isinstance(base, GenericMeta) and + base.__origin__ is Generic): + if gvars is not None: + raise TypeError( + "Cannot inherit from Generic[...] multiple types.") + gvars = base.__parameters__ + if gvars is None: + gvars = tvars + else: + tvarset = set(tvars) + gvarset = set(gvars) + if not tvarset <= gvarset: + raise TypeError( + "Some type variables (%s) " + "are not listed in Generic[%s]" % + (", ".join(str(t) for t in tvars if t not in gvarset), + ", ".join(str(g) for g in gvars))) + tvars = gvars + + initial_bases = bases + if extra is None: + extra = namespace.get('__extra__') + if extra is not None and type(extra) is abc.ABCMeta and extra not in bases: + bases = (extra,) + bases + bases = tuple(_gorg(b) if isinstance(b, GenericMeta) else b for b in bases) + + # remove bare Generic from bases if there are other generic bases + if any(isinstance(b, GenericMeta) and b is not Generic for b in bases): + bases = tuple(b for b in bases if b is not Generic) + namespace.update({'__origin__': origin, '__extra__': extra}) + self = super(GenericMeta, cls).__new__(cls, name, bases, namespace) + + self.__parameters__ = tvars + # Be prepared that GenericMeta will be subclassed by TupleMeta + # and CallableMeta, those two allow ..., (), or [] in __args___. + self.__args__ = tuple(Ellipsis if a is _TypingEllipsis else + () if a is _TypingEmpty else + a for a in args) if args else None + # Speed hack (https://github.com/python/typing/issues/196). + self.__next_in_mro__ = _next_in_mro(self) + # Preserve base classes on subclassing (__bases__ are type erased now). + if orig_bases is None: + self.__orig_bases__ = initial_bases + + # This allows unparameterized generic collections to be used + # with issubclass() and isinstance() in the same way as their + # collections.abc counterparts (e.g., isinstance([], Iterable)). + if ( + '__subclasshook__' not in namespace and extra or + # allow overriding + getattr(self.__subclasshook__, '__name__', '') == '__extrahook__' + ): + self.__subclasshook__ = _make_subclasshook(self) + + if origin and hasattr(origin, '__qualname__'): # Fix for Python 3.2. + self.__qualname__ = origin.__qualname__ + self.__tree_hash__ = (hash(self._subs_tree()) if origin else + super(GenericMeta, self).__hash__()) + return self + + def __init__(self, *args, **kwargs): + super(GenericMeta, self).__init__(*args, **kwargs) + if isinstance(self.__extra__, abc.ABCMeta): + self._abc_registry = self.__extra__._abc_registry + self._abc_cache = self.__extra__._abc_cache + elif self.__origin__ is not None: + self._abc_registry = self.__origin__._abc_registry + self._abc_cache = self.__origin__._abc_cache + + # _abc_negative_cache and _abc_negative_cache_version + # realized as descriptors, since GenClass[t1, t2, ...] always + # share subclass info with GenClass. + # This is an important memory optimization. + @property + def _abc_negative_cache(self): + if isinstance(self.__extra__, abc.ABCMeta): + return self.__extra__._abc_negative_cache + return _gorg(self)._abc_generic_negative_cache + + @_abc_negative_cache.setter + def _abc_negative_cache(self, value): + if self.__origin__ is None: + if isinstance(self.__extra__, abc.ABCMeta): + self.__extra__._abc_negative_cache = value + else: + self._abc_generic_negative_cache = value + + @property + def _abc_negative_cache_version(self): + if isinstance(self.__extra__, abc.ABCMeta): + return self.__extra__._abc_negative_cache_version + return _gorg(self)._abc_generic_negative_cache_version + + @_abc_negative_cache_version.setter + def _abc_negative_cache_version(self, value): + if self.__origin__ is None: + if isinstance(self.__extra__, abc.ABCMeta): + self.__extra__._abc_negative_cache_version = value + else: + self._abc_generic_negative_cache_version = value + + def _get_type_vars(self, tvars): + if self.__origin__ and self.__parameters__: + _get_type_vars(self.__parameters__, tvars) + + def _eval_type(self, globalns, localns): + ev_origin = (self.__origin__._eval_type(globalns, localns) + if self.__origin__ else None) + ev_args = tuple(_eval_type(a, globalns, localns) for a + in self.__args__) if self.__args__ else None + if ev_origin == self.__origin__ and ev_args == self.__args__: + return self + return self.__class__(self.__name__, + self.__bases__, + dict(self.__dict__), + tvars=_type_vars(ev_args) if ev_args else None, + args=ev_args, + origin=ev_origin, + extra=self.__extra__, + orig_bases=self.__orig_bases__) + + def __repr__(self): + if self.__origin__ is None: + return super(GenericMeta, self).__repr__() + return self._tree_repr(self._subs_tree()) + + def _tree_repr(self, tree): + arg_list = [] + for arg in tree[1:]: + if arg == (): + arg_list.append('()') + elif not isinstance(arg, tuple): + arg_list.append(_type_repr(arg)) + else: + arg_list.append(arg[0]._tree_repr(arg)) + return super(GenericMeta, self).__repr__() + '[%s]' % ', '.join(arg_list) + + def _subs_tree(self, tvars=None, args=None): + if self.__origin__ is None: + return self + tree_args = _subs_tree(self, tvars, args) + return (_gorg(self),) + tuple(tree_args) + + def __eq__(self, other): + if not isinstance(other, GenericMeta): + return NotImplemented + if self.__origin__ is None or other.__origin__ is None: + return self is other + return self.__tree_hash__ == other.__tree_hash__ + + def __hash__(self): + return self.__tree_hash__ + + @_tp_cache + def __getitem__(self, params): + if not isinstance(params, tuple): + params = (params,) + if not params and not _gorg(self) is Tuple: + raise TypeError( + "Parameter list to %s[...] cannot be empty" % _qualname(self)) + msg = "Parameters to generic types must be types." + params = tuple(_type_check(p, msg) for p in params) + if self is Generic: + # Generic can only be subscripted with unique type variables. + if not all(isinstance(p, TypeVar) for p in params): + raise TypeError( + "Parameters to Generic[...] must all be type variables") + if len(set(params)) != len(params): + raise TypeError( + "Parameters to Generic[...] must all be unique") + tvars = params + args = params + elif self in (Tuple, Callable): + tvars = _type_vars(params) + args = params + elif self is _Protocol: + # _Protocol is internal, don't check anything. + tvars = params + args = params + elif self.__origin__ in (Generic, _Protocol): + # Can't subscript Generic[...] or _Protocol[...]. + raise TypeError("Cannot subscript already-subscripted %s" % + repr(self)) + else: + # Subscripting a regular Generic subclass. + _check_generic(self, params) + tvars = _type_vars(params) + args = params + + prepend = (self,) if self.__origin__ is None else () + return self.__class__(self.__name__, + prepend + self.__bases__, + dict(self.__dict__), + tvars=tvars, + args=args, + origin=self, + extra=self.__extra__, + orig_bases=self.__orig_bases__) + + def __subclasscheck__(self, cls): + if self.__origin__ is not None: + if sys._getframe(1).f_globals['__name__'] not in ['abc', 'functools']: + raise TypeError("Parameterized generics cannot be used with class " + "or instance checks") + return False + if self is Generic: + raise TypeError("Class %r cannot be used with class " + "or instance checks" % self) + return super(GenericMeta, self).__subclasscheck__(cls) + + def __instancecheck__(self, instance): + # Since we extend ABC.__subclasscheck__ and + # ABC.__instancecheck__ inlines the cache checking done by the + # latter, we must extend __instancecheck__ too. For simplicity + # we just skip the cache check -- instance checks for generic + # classes are supposed to be rare anyways. + if not isinstance(instance, type): + return issubclass(instance.__class__, self) + return False + + def __copy__(self): + return self.__class__(self.__name__, self.__bases__, dict(self.__dict__), + self.__parameters__, self.__args__, self.__origin__, + self.__extra__, self.__orig_bases__) + + def __setattr__(self, attr, value): + # We consider all the subscripted genrics as proxies for original class + if ( + attr.startswith('__') and attr.endswith('__') or + attr.startswith('_abc_') + ): + super(GenericMeta, self).__setattr__(attr, value) + else: + super(GenericMeta, _gorg(self)).__setattr__(attr, value) + + +# Prevent checks for Generic to crash when defining Generic. +Generic = None + + +def _generic_new(base_cls, cls, *args, **kwds): + # Assure type is erased on instantiation, + # but attempt to store it in __orig_class__ + if cls.__origin__ is None: + return base_cls.__new__(cls) + else: + origin = _gorg(cls) + obj = base_cls.__new__(origin) + try: + obj.__orig_class__ = cls + except AttributeError: + pass + obj.__init__(*args, **kwds) + return obj + + +class Generic(object): + """Abstract base class for generic types. + + A generic type is typically declared by inheriting from + this class parameterized with one or more type variables. + For example, a generic mapping type might be defined as:: + + class Mapping(Generic[KT, VT]): + def __getitem__(self, key: KT) -> VT: + ... + # Etc. + + This class can then be used as follows:: + + def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: + try: + return mapping[key] + except KeyError: + return default + """ + + __metaclass__ = GenericMeta + __slots__ = () + + def __new__(cls, *args, **kwds): + if _geqv(cls, Generic): + raise TypeError("Type Generic cannot be instantiated; " + "it can be used only as a base class") + return _generic_new(cls.__next_in_mro__, cls, *args, **kwds) + + +class _TypingEmpty(object): + """Internal placeholder for () or []. Used by TupleMeta and CallableMeta + to allow empty list/tuple in specific places, without allowing them + to sneak in where prohibited. + """ + + +class _TypingEllipsis(object): + """Internal placeholder for ... (ellipsis).""" + + +class TupleMeta(GenericMeta): + """Metaclass for Tuple (internal).""" + + @_tp_cache + def __getitem__(self, parameters): + if self.__origin__ is not None or not _geqv(self, Tuple): + # Normal generic rules apply if this is not the first subscription + # or a subscription of a subclass. + return super(TupleMeta, self).__getitem__(parameters) + if parameters == (): + return super(TupleMeta, self).__getitem__((_TypingEmpty,)) + if not isinstance(parameters, tuple): + parameters = (parameters,) + if len(parameters) == 2 and parameters[1] is Ellipsis: + msg = "Tuple[t, ...]: t must be a type." + p = _type_check(parameters[0], msg) + return super(TupleMeta, self).__getitem__((p, _TypingEllipsis)) + msg = "Tuple[t0, t1, ...]: each t must be a type." + parameters = tuple(_type_check(p, msg) for p in parameters) + return super(TupleMeta, self).__getitem__(parameters) + + def __instancecheck__(self, obj): + if self.__args__ is None: + return isinstance(obj, tuple) + raise TypeError("Parameterized Tuple cannot be used " + "with isinstance().") + + def __subclasscheck__(self, cls): + if self.__args__ is None: + return issubclass(cls, tuple) + raise TypeError("Parameterized Tuple cannot be used " + "with issubclass().") + + +class Tuple(tuple): + """Tuple type; Tuple[X, Y] is the cross-product type of X and Y. + + Example: Tuple[T1, T2] is a tuple of two elements corresponding + to type variables T1 and T2. Tuple[int, float, str] is a tuple + of an int, a float and a string. + + To specify a variable-length tuple of homogeneous type, use Tuple[T, ...]. + """ + + __metaclass__ = TupleMeta + __extra__ = tuple + __slots__ = () + + def __new__(cls, *args, **kwds): + if _geqv(cls, Tuple): + raise TypeError("Type Tuple cannot be instantiated; " + "use tuple() instead") + return _generic_new(tuple, cls, *args, **kwds) + + +class CallableMeta(GenericMeta): + """ Metaclass for Callable.""" + + def __repr__(self): + if self.__origin__ is None: + return super(CallableMeta, self).__repr__() + return self._tree_repr(self._subs_tree()) + + def _tree_repr(self, tree): + if _gorg(self) is not Callable: + return super(CallableMeta, self)._tree_repr(tree) + # For actual Callable (not its subclass) we override + # super(CallableMeta, self)._tree_repr() for nice formatting. + arg_list = [] + for arg in tree[1:]: + if not isinstance(arg, tuple): + arg_list.append(_type_repr(arg)) + else: + arg_list.append(arg[0]._tree_repr(arg)) + if arg_list[0] == '...': + return repr(tree[0]) + '[..., %s]' % arg_list[1] + return (repr(tree[0]) + + '[[%s], %s]' % (', '.join(arg_list[:-1]), arg_list[-1])) + + def __getitem__(self, parameters): + """A thin wrapper around __getitem_inner__ to provide the latter + with hashable arguments to improve speed. + """ + + if self.__origin__ is not None or not _geqv(self, Callable): + return super(CallableMeta, self).__getitem__(parameters) + if not isinstance(parameters, tuple) or len(parameters) != 2: + raise TypeError("Callable must be used as " + "Callable[[arg, ...], result].") + args, result = parameters + if args is Ellipsis: + parameters = (Ellipsis, result) + else: + if not isinstance(args, list): + raise TypeError("Callable[args, result]: args must be a list." + " Got %.100r." % (args,)) + parameters = (tuple(args), result) + return self.__getitem_inner__(parameters) + + @_tp_cache + def __getitem_inner__(self, parameters): + args, result = parameters + msg = "Callable[args, result]: result must be a type." + result = _type_check(result, msg) + if args is Ellipsis: + return super(CallableMeta, self).__getitem__((_TypingEllipsis, result)) + msg = "Callable[[arg, ...], result]: each arg must be a type." + args = tuple(_type_check(arg, msg) for arg in args) + parameters = args + (result,) + return super(CallableMeta, self).__getitem__(parameters) + + +class Callable(object): + """Callable type; Callable[[int], str] is a function of (int) -> str. + + The subscription syntax must always be used with exactly two + values: the argument list and the return type. The argument list + must be a list of types or ellipsis; the return type must be a single type. + + There is no syntax to indicate optional or keyword arguments, + such function types are rarely used as callback types. + """ + + __metaclass__ = CallableMeta + __extra__ = collections_abc.Callable + __slots__ = () + + def __new__(cls, *args, **kwds): + if _geqv(cls, Callable): + raise TypeError("Type Callable cannot be instantiated; " + "use a non-abstract subclass instead") + return _generic_new(cls.__next_in_mro__, cls, *args, **kwds) + + +def cast(typ, val): + """Cast a value to a type. + + This returns the value unchanged. To the type checker this + signals that the return value has the designated type, but at + runtime we intentionally don't check anything (we want this + to be as fast as possible). + """ + return val + + +def _get_defaults(func): + """Internal helper to extract the default arguments, by name.""" + code = func.__code__ + pos_count = code.co_argcount + arg_names = code.co_varnames + arg_names = arg_names[:pos_count] + defaults = func.__defaults__ or () + kwdefaults = func.__kwdefaults__ + res = dict(kwdefaults) if kwdefaults else {} + pos_offset = pos_count - len(defaults) + for name, value in zip(arg_names[pos_offset:], defaults): + assert name not in res + res[name] = value + return res + + +def get_type_hints(obj, globalns=None, localns=None): + """In Python 2 this is not supported and always returns None.""" + return None + + +def no_type_check(arg): + """Decorator to indicate that annotations are not type hints. + + The argument must be a class or function; if it is a class, it + applies recursively to all methods and classes defined in that class + (but not to methods defined in its superclasses or subclasses). + + This mutates the function(s) or class(es) in place. + """ + if isinstance(arg, type): + arg_attrs = arg.__dict__.copy() + for attr, val in arg.__dict__.items(): + if val in arg.__bases__: + arg_attrs.pop(attr) + for obj in arg_attrs.values(): + if isinstance(obj, types.FunctionType): + obj.__no_type_check__ = True + if isinstance(obj, type): + no_type_check(obj) + try: + arg.__no_type_check__ = True + except TypeError: # built-in classes + pass + return arg + + +def no_type_check_decorator(decorator): + """Decorator to give another decorator the @no_type_check effect. + + This wraps the decorator with something that wraps the decorated + function in @no_type_check. + """ + + @functools.wraps(decorator) + def wrapped_decorator(*args, **kwds): + func = decorator(*args, **kwds) + func = no_type_check(func) + return func + + return wrapped_decorator + + +def _overload_dummy(*args, **kwds): + """Helper for @overload to raise when called.""" + raise NotImplementedError( + "You should not call an overloaded function. " + "A series of @overload-decorated functions " + "outside a stub module should always be followed " + "by an implementation that is not @overload-ed.") + + +def overload(func): + """Decorator for overloaded functions/methods. + + In a stub file, place two or more stub definitions for the same + function in a row, each decorated with @overload. For example: + + @overload + def utf8(value: None) -> None: ... + @overload + def utf8(value: bytes) -> bytes: ... + @overload + def utf8(value: str) -> bytes: ... + + In a non-stub file (i.e. a regular .py file), do the same but + follow it with an implementation. The implementation should *not* + be decorated with @overload. For example: + + @overload + def utf8(value: None) -> None: ... + @overload + def utf8(value: bytes) -> bytes: ... + @overload + def utf8(value: str) -> bytes: ... + def utf8(value): + # implementation goes here + """ + return _overload_dummy + + +class _ProtocolMeta(GenericMeta): + """Internal metaclass for _Protocol. + + This exists so _Protocol classes can be generic without deriving + from Generic. + """ + + def __instancecheck__(self, obj): + if _Protocol not in self.__bases__: + return super(_ProtocolMeta, self).__instancecheck__(obj) + raise TypeError("Protocols cannot be used with isinstance().") + + def __subclasscheck__(self, cls): + if not self._is_protocol: + # No structural checks since this isn't a protocol. + return NotImplemented + + if self is _Protocol: + # Every class is a subclass of the empty protocol. + return True + + # Find all attributes defined in the protocol. + attrs = self._get_protocol_attrs() + + for attr in attrs: + if not any(attr in d.__dict__ for d in cls.__mro__): + return False + return True + + def _get_protocol_attrs(self): + # Get all Protocol base classes. + protocol_bases = [] + for c in self.__mro__: + if getattr(c, '_is_protocol', False) and c.__name__ != '_Protocol': + protocol_bases.append(c) + + # Get attributes included in protocol. + attrs = set() + for base in protocol_bases: + for attr in base.__dict__.keys(): + # Include attributes not defined in any non-protocol bases. + for c in self.__mro__: + if (c is not base and attr in c.__dict__ and + not getattr(c, '_is_protocol', False)): + break + else: + if (not attr.startswith('_abc_') and + attr != '__abstractmethods__' and + attr != '_is_protocol' and + attr != '__dict__' and + attr != '__args__' and + attr != '__slots__' and + attr != '_get_protocol_attrs' and + attr != '__next_in_mro__' and + attr != '__parameters__' and + attr != '__origin__' and + attr != '__orig_bases__' and + attr != '__extra__' and + attr != '__tree_hash__' and + attr != '__module__'): + attrs.add(attr) + + return attrs + + +class _Protocol(object): + """Internal base class for protocol classes. + + This implements a simple-minded structural issubclass check + (similar but more general than the one-offs in collections.abc + such as Hashable). + """ + + __metaclass__ = _ProtocolMeta + __slots__ = () + + _is_protocol = True + + +# Various ABCs mimicking those in collections.abc. +# A few are simply re-exported for completeness. + +Hashable = collections_abc.Hashable # Not generic. + + +class Iterable(Generic[T_co]): + __slots__ = () + __extra__ = collections_abc.Iterable + + +class Iterator(Iterable[T_co]): + __slots__ = () + __extra__ = collections_abc.Iterator + + +class SupportsInt(_Protocol): + __slots__ = () + + @abstractmethod + def __int__(self): + pass + + +class SupportsFloat(_Protocol): + __slots__ = () + + @abstractmethod + def __float__(self): + pass + + +class SupportsComplex(_Protocol): + __slots__ = () + + @abstractmethod + def __complex__(self): + pass + + +class SupportsAbs(_Protocol[T_co]): + __slots__ = () + + @abstractmethod + def __abs__(self): + pass + + +if hasattr(collections_abc, 'Reversible'): + class Reversible(Iterable[T_co]): + __slots__ = () + __extra__ = collections_abc.Reversible +else: + class Reversible(_Protocol[T_co]): + __slots__ = () + + @abstractmethod + def __reversed__(self): + pass + + +Sized = collections_abc.Sized # Not generic. + + +class Container(Generic[T_co]): + __slots__ = () + __extra__ = collections_abc.Container + + +# Callable was defined earlier. + + +class AbstractSet(Sized, Iterable[T_co], Container[T_co]): + __slots__ = () + __extra__ = collections_abc.Set + + +class MutableSet(AbstractSet[T]): + __slots__ = () + __extra__ = collections_abc.MutableSet + + +# NOTE: It is only covariant in the value type. +class Mapping(Sized, Iterable[KT], Container[KT], Generic[KT, VT_co]): + __slots__ = () + __extra__ = collections_abc.Mapping + + +class MutableMapping(Mapping[KT, VT]): + __slots__ = () + __extra__ = collections_abc.MutableMapping + + +if hasattr(collections_abc, 'Reversible'): + class Sequence(Sized, Reversible[T_co], Container[T_co]): + __slots__ = () + __extra__ = collections_abc.Sequence +else: + class Sequence(Sized, Iterable[T_co], Container[T_co]): + __slots__ = () + __extra__ = collections_abc.Sequence + + +class MutableSequence(Sequence[T]): + __slots__ = () + __extra__ = collections_abc.MutableSequence + + +class ByteString(Sequence[int]): + pass + + +ByteString.register(str) +ByteString.register(bytearray) + + +class List(list, MutableSequence[T]): + __slots__ = () + __extra__ = list + + def __new__(cls, *args, **kwds): + if _geqv(cls, List): + raise TypeError("Type List cannot be instantiated; " + "use list() instead") + return _generic_new(list, cls, *args, **kwds) + + +class Deque(collections.deque, MutableSequence[T]): + __slots__ = () + __extra__ = collections.deque + + def __new__(cls, *args, **kwds): + if _geqv(cls, Deque): + return collections.deque(*args, **kwds) + return _generic_new(collections.deque, cls, *args, **kwds) + + +class Set(set, MutableSet[T]): + __slots__ = () + __extra__ = set + + def __new__(cls, *args, **kwds): + if _geqv(cls, Set): + raise TypeError("Type Set cannot be instantiated; " + "use set() instead") + return _generic_new(set, cls, *args, **kwds) + + +class FrozenSet(frozenset, AbstractSet[T_co]): + __slots__ = () + __extra__ = frozenset + + def __new__(cls, *args, **kwds): + if _geqv(cls, FrozenSet): + raise TypeError("Type FrozenSet cannot be instantiated; " + "use frozenset() instead") + return _generic_new(frozenset, cls, *args, **kwds) + + +class MappingView(Sized, Iterable[T_co]): + __slots__ = () + __extra__ = collections_abc.MappingView + + +class KeysView(MappingView[KT], AbstractSet[KT]): + __slots__ = () + __extra__ = collections_abc.KeysView + + +class ItemsView(MappingView[Tuple[KT, VT_co]], + AbstractSet[Tuple[KT, VT_co]], + Generic[KT, VT_co]): + __slots__ = () + __extra__ = collections_abc.ItemsView + + +class ValuesView(MappingView[VT_co]): + __slots__ = () + __extra__ = collections_abc.ValuesView + + +class ContextManager(Generic[T_co]): + __slots__ = () + + def __enter__(self): + return self + + @abc.abstractmethod + def __exit__(self, exc_type, exc_value, traceback): + return None + + @classmethod + def __subclasshook__(cls, C): + if cls is ContextManager: + # In Python 3.6+, it is possible to set a method to None to + # explicitly indicate that the class does not implement an ABC + # (https://bugs.python.org/issue25958), but we do not support + # that pattern here because this fallback class is only used + # in Python 3.5 and earlier. + if (any("__enter__" in B.__dict__ for B in C.__mro__) and + any("__exit__" in B.__dict__ for B in C.__mro__)): + return True + return NotImplemented + + +class Dict(dict, MutableMapping[KT, VT]): + __slots__ = () + __extra__ = dict + + def __new__(cls, *args, **kwds): + if _geqv(cls, Dict): + raise TypeError("Type Dict cannot be instantiated; " + "use dict() instead") + return _generic_new(dict, cls, *args, **kwds) + + +class DefaultDict(collections.defaultdict, MutableMapping[KT, VT]): + __slots__ = () + __extra__ = collections.defaultdict + + def __new__(cls, *args, **kwds): + if _geqv(cls, DefaultDict): + return collections.defaultdict(*args, **kwds) + return _generic_new(collections.defaultdict, cls, *args, **kwds) + + +class Counter(collections.Counter, Dict[T, int]): + __slots__ = () + __extra__ = collections.Counter + + def __new__(cls, *args, **kwds): + if _geqv(cls, Counter): + return collections.Counter(*args, **kwds) + return _generic_new(collections.Counter, cls, *args, **kwds) + + +# Determine what base class to use for Generator. +if hasattr(collections_abc, 'Generator'): + # Sufficiently recent versions of 3.5 have a Generator ABC. + _G_base = collections_abc.Generator +else: + # Fall back on the exact type. + _G_base = types.GeneratorType + + +class Generator(Iterator[T_co], Generic[T_co, T_contra, V_co]): + __slots__ = () + __extra__ = _G_base + + def __new__(cls, *args, **kwds): + if _geqv(cls, Generator): + raise TypeError("Type Generator cannot be instantiated; " + "create a subclass instead") + return _generic_new(_G_base, cls, *args, **kwds) + + +# Internal type variable used for Type[]. +CT_co = TypeVar('CT_co', covariant=True, bound=type) + + +# This is not a real generic class. Don't use outside annotations. +class Type(Generic[CT_co]): + """A special construct usable to annotate class objects. + + For example, suppose we have the following classes:: + + class User: ... # Abstract base for User classes + class BasicUser(User): ... + class ProUser(User): ... + class TeamUser(User): ... + + And a function that takes a class argument that's a subclass of + User and returns an instance of the corresponding class:: + + U = TypeVar('U', bound=User) + def new_user(user_class: Type[U]) -> U: + user = user_class() + # (Here we could write the user object to a database) + return user + + joe = new_user(BasicUser) + + At this point the type checker knows that joe has type BasicUser. + """ + __slots__ = () + __extra__ = type + + +def NamedTuple(typename, fields): + """Typed version of namedtuple. + + Usage:: + + Employee = typing.NamedTuple('Employee', [('name', str), ('id', int)]) + + This is equivalent to:: + + Employee = collections.namedtuple('Employee', ['name', 'id']) + + The resulting class has one extra attribute: _field_types, + giving a dict mapping field names to types. (The field names + are in the _fields attribute, which is part of the namedtuple + API.) + """ + fields = [(n, t) for n, t in fields] + cls = collections.namedtuple(typename, [n for n, t in fields]) + cls._field_types = dict(fields) + # Set the module to the caller's module (otherwise it'd be 'typing'). + try: + cls.__module__ = sys._getframe(1).f_globals.get('__name__', '__main__') + except (AttributeError, ValueError): + pass + return cls + + +def NewType(name, tp): + """NewType creates simple unique types with almost zero + runtime overhead. NewType(name, tp) is considered a subtype of tp + by static type checkers. At runtime, NewType(name, tp) returns + a dummy function that simply returns its argument. Usage:: + + UserId = NewType('UserId', int) + + def name_by_id(user_id): + # type: (UserId) -> str + ... + + UserId('user') # Fails type check + + name_by_id(42) # Fails type check + name_by_id(UserId(42)) # OK + + num = UserId(5) + 1 # type: int + """ + + def new_type(x): + return x + + # Some versions of Python 2 complain because of making all strings unicode + new_type.__name__ = str(name) + new_type.__supertype__ = tp + return new_type + + +# Python-version-specific alias (Python 2: unicode; Python 3: str) +Text = unicode + + +# Constant that's True when type checking, but False here. +TYPE_CHECKING = False + + +class IO(Generic[AnyStr]): + """Generic base class for TextIO and BinaryIO. + + This is an abstract, generic version of the return of open(). + + NOTE: This does not distinguish between the different possible + classes (text vs. binary, read vs. write vs. read/write, + append-only, unbuffered). The TextIO and BinaryIO subclasses + below capture the distinctions between text vs. binary, which is + pervasive in the interface; however we currently do not offer a + way to track the other distinctions in the type system. + """ + + __slots__ = () + + @abstractproperty + def mode(self): + pass + + @abstractproperty + def name(self): + pass + + @abstractmethod + def close(self): + pass + + @abstractmethod + def closed(self): + pass + + @abstractmethod + def fileno(self): + pass + + @abstractmethod + def flush(self): + pass + + @abstractmethod + def isatty(self): + pass + + @abstractmethod + def read(self, n=-1): + pass + + @abstractmethod + def readable(self): + pass + + @abstractmethod + def readline(self, limit=-1): + pass + + @abstractmethod + def readlines(self, hint=-1): + pass + + @abstractmethod + def seek(self, offset, whence=0): + pass + + @abstractmethod + def seekable(self): + pass + + @abstractmethod + def tell(self): + pass + + @abstractmethod + def truncate(self, size=None): + pass + + @abstractmethod + def writable(self): + pass + + @abstractmethod + def write(self, s): + pass + + @abstractmethod + def writelines(self, lines): + pass + + @abstractmethod + def __enter__(self): + pass + + @abstractmethod + def __exit__(self, type, value, traceback): + pass + + +class BinaryIO(IO[bytes]): + """Typed version of the return of open() in binary mode.""" + + __slots__ = () + + @abstractmethod + def write(self, s): + pass + + @abstractmethod + def __enter__(self): + pass + + +class TextIO(IO[unicode]): + """Typed version of the return of open() in text mode.""" + + __slots__ = () + + @abstractproperty + def buffer(self): + pass + + @abstractproperty + def encoding(self): + pass + + @abstractproperty + def errors(self): + pass + + @abstractproperty + def line_buffering(self): + pass + + @abstractproperty + def newlines(self): + pass + + @abstractmethod + def __enter__(self): + pass + + +class io(object): + """Wrapper namespace for IO generic classes.""" + + __all__ = ['IO', 'TextIO', 'BinaryIO'] + IO = IO + TextIO = TextIO + BinaryIO = BinaryIO + + +io.__name__ = __name__ + b'.io' +sys.modules[io.__name__] = io + + +Pattern = _TypeAlias('Pattern', AnyStr, type(stdlib_re.compile('')), + lambda p: p.pattern) +Match = _TypeAlias('Match', AnyStr, type(stdlib_re.match('', '')), + lambda m: m.re.pattern) + + +class re(object): + """Wrapper namespace for re type aliases.""" + + __all__ = ['Pattern', 'Match'] + Pattern = Pattern + Match = Match + + +re.__name__ = __name__ + b'.re' +sys.modules[re.__name__] = re diff --git a/sources/pyside2/PySide2/typesystem_templates.xml b/sources/pyside2/PySide2/typesystem_templates.xml new file mode 100644 index 0000000..a173372 --- /dev/null +++ b/sources/pyside2/PySide2/typesystem_templates.xml @@ -0,0 +1,502 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/cmake/Macros/FindQt5Extra.cmake b/sources/pyside2/cmake/Macros/FindQt5Extra.cmake new file mode 100644 index 0000000..6bfa5e0 --- /dev/null +++ b/sources/pyside2/cmake/Macros/FindQt5Extra.cmake @@ -0,0 +1,25 @@ +# +# Try to find QtMultimedia +# TODO: Remove this hack when cmake support QtMultimedia module +# CT: maybe we can remove this. +# For now, I just use the mapping to Qt5 + +find_package(Qt5Multimedia) + +if (NOT Qt5Multimedia_FOUND) + find_path(QT_QTMULTIMEDIA_INCLUDE_DIR QtMultimedia + PATHS ${QT_HEADERS_DIR}/QtMultimedia + ${QT_LIBRARY_DIR}/QtMultimedia.framework/Headers + NO_DEFAULT_PATH) + find_library(QT_QTMULTIMEDIA_LIBRARY QtMultimedia PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH) + if (QT_QTMULTIMEDIA_INCLUDE_DIR AND QT_QTMULTIMEDIA_LIBRARY) + set(QT_QTMULTIMEDIA_FOUND ON) + else() + #Replace this on documentation + set(if_QtMultimedia "") + endif() +endif () + +# Maemo is no longer supported +# QtDeclarative is no longer supported diff --git a/sources/pyside2/cmake/Macros/PySideModules.cmake b/sources/pyside2/cmake/Macros/PySideModules.cmake new file mode 100644 index 0000000..3648891 --- /dev/null +++ b/sources/pyside2/cmake/Macros/PySideModules.cmake @@ -0,0 +1,223 @@ +macro(make_path varname) + # accepts any number of path variables + string(REPLACE ";" "${PATH_SEP}" ${varname} "${ARGN}") +endmacro() + +macro(unmake_path varname) + string(REPLACE "${PATH_SEP}" ";" ${varname} "${ARGN}") +endmacro() + +macro(create_pyside_module + module_name + module_include_dir + module_libraries + module_deps + module_typesystem_path + module_sources + module_static_sources) + string(TOLOWER ${module_name} _module) + string(REGEX REPLACE ^qt "" _module ${_module}) + if(${ARGC} GREATER 7) + set (typesystem_name ${ARGV7}) + else() + set (typesystem_name "") + endif() + if(${ARGC} GREATER 8) + string(REPLACE ";" "\\;" dropped_entries "${${ARGV8}}") + else() + set (dropped_entries "") + endif() + + if (NOT EXISTS ${typesystem_name}) + set(typesystem_path ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_${_module}.xml) + else() + set(typesystem_path ${typesystem_name}) + endif() + + # check for class files that were commented away. + if(DEFINED ${module_sources}_skipped_files) + if(DEFINED PYTHON3_EXECUTABLE) + set(_python_interpreter "${PYTHON3_EXECUTABLE}") + else() + set(_python_interpreter "${PYTHON_EXECUTABLE}") + endif() + if(NOT _python_interpreter) + message(FATAL_ERROR "*** we need a python interpreter for postprocessing!") + endif() + set(_python_postprocessor "${_python_interpreter}" "${CMAKE_CURRENT_BINARY_DIR}/filter_init.py") + else() + set(_python_postprocessor "") + endif() + + # Create typesystem XML dependencies list, so that whenever they change, shiboken is invoked + # automatically. + # First add the main file. + set(total_type_system_files ${typesystem_path}) + + get_filename_component(typesystem_root "${CMAKE_CURRENT_SOURCE_DIR}" DIRECTORY) + + set(deps ${module_name} ${${module_deps}}) + foreach(dep ${deps}) + set(glob_expression "${typesystem_root}/${dep}/*.xml") + file(GLOB type_system_files ${glob_expression}) + set(total_type_system_files ${total_type_system_files} ${type_system_files}) + endforeach(dep) + + # Remove any possible duplicates. + list(REMOVE_DUPLICATES total_type_system_files) + + # Contains include directories to pass to shiboken's preprocessor. + set(shiboken_include_dirs ${pyside2_SOURCE_DIR}${PATH_SEP}${QT_INCLUDE_DIR}) + set(shiboken_framework_include_dirs_option "") + if(CMAKE_HOST_APPLE) + set(shiboken_framework_include_dirs "${QT_FRAMEWORK_INCLUDE_DIR}") + make_path(shiboken_framework_include_dirs ${shiboken_framework_include_dirs}) + set(shiboken_framework_include_dirs_option "--framework-include-paths=${shiboken_framework_include_dirs}") + endif() + + # Transform the path separators into something shiboken understands. + make_path(shiboken_include_dirs ${shiboken_include_dirs}) + + get_filename_component(pyside_binary_dir ${CMAKE_CURRENT_BINARY_DIR} DIRECTORY) + + add_custom_command(OUTPUT ${${module_sources}} + COMMAND "${SHIBOKEN_BINARY}" ${GENERATOR_EXTRA_FLAGS} + "${pyside2_BINARY_DIR}/${module_name}_global.h" + --include-paths=${shiboken_include_dirs} + ${shiboken_framework_include_dirs_option} + --typesystem-paths=${pyside_binary_dir}${PATH_SEP}${pyside2_SOURCE_DIR}${PATH_SEP}${${module_typesystem_path}} + --output-directory=${CMAKE_CURRENT_BINARY_DIR} + --license-file=${CMAKE_CURRENT_SOURCE_DIR}/../licensecomment.txt + ${typesystem_path} + --api-version=${SUPPORTED_QT_VERSION} + --drop-type-entries="${dropped_entries}" + COMMAND ${_python_postprocessor} + DEPENDS ${total_type_system_files} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Running generator for ${module_name}...") + + include_directories(${module_name} ${${module_include_dir}} ${pyside2_SOURCE_DIR}) + add_library(${module_name} MODULE ${${module_sources}} ${${module_static_sources}}) + set_target_properties(${module_name} PROPERTIES + PREFIX "" + OUTPUT_NAME "${module_name}${PYTHON_EXTENSION_SUFFIX}" + LIBRARY_OUTPUT_DIRECTORY ${pyside2_BINARY_DIR}) + if(WIN32) + set_target_properties(${module_name} PROPERTIES SUFFIX ".pyd") + # Sanitize windows.h as pulled by gl.h to prevent clashes with QAbstract3dAxis::min(), etc. + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOMINMAX") + endif() + + target_link_libraries(${module_name} ${${module_libraries}}) + if(${module_deps}) + add_dependencies(${module_name} ${${module_deps}}) + endif() + + # install + install(TARGETS ${module_name} LIBRARY DESTINATION ${PYTHON_SITE_PACKAGES}/PySide2) + string(TOLOWER ${module_name} lower_module_name) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/PySide2/${module_name}/pyside2_${lower_module_name}_python.h + DESTINATION include/PySide2${pyside2_SUFFIX}/${module_name}/) + file(GLOB typesystem_files ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_*.xml ${typesystem_path}) + +# Copy typesystem files and remove module names from the element +# so that it works in a flat directory: +# +# \n" + "${NAMESPACE_USE}\n" + "int main() { sizeof(${class}); }\n" + ) + + # Because Qt is built with -fPIC (by default), the compile tests also have to have that. + get_property(ADDITIONAL_FLAGS TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_OPTIONS) + + # Don't add version tagging, because for some reason linker fails with: + # (.qtversion[qt_version_tag]+0x0): undefined reference to `qt_version_tag' + # Force usage of the C++11 standard. CMAKE_CXX_STANDARD does not work with try_compile + # but the issue has a fix in CMake 3.9. Thus we use a terrible workaround, we pass the C++ + # standard flag the way CheckCXXSourceCompiles.cmake does it. + + set(ADDITIONAL_FLAGS "${ADDITIONAL_FLAGS} -DQT_NO_VERSION_TAGGING ${CMAKE_CXX11_EXTENSION_COMPILE_OPTION}") + + try_compile(Q_WORKS ${CMAKE_BINARY_DIR} + ${SRC_FILE} + CMAKE_FLAGS + "-DINCLUDE_DIRECTORIES=${QT_INCLUDE_DIR};${Qt5${_module_no_qt_prefix}_INCLUDE_DIRS}" + "-DCOMPILE_DEFINITIONS:STRING=${ADDITIONAL_FLAGS}" + OUTPUT_VARIABLE OUTPUT) + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCheckQtClassTest.log ${OUTPUT}) + + set("PYSIDE_${class}" ${Q_WORKS} CACHE STRING "Has ${class} class been found?") + if(Q_WORKS) + message(STATUS "Checking for ${class} in ${module} -- found") + list(APPEND ${optional_source_files} ${_cppfile}) + else() + message(STATUS "Checking for ${class} in ${module} -- not found") + list(APPEND ${dropped_entries} PySide2.${module}.${class}) + endif() + endif() +endmacro() + + +# Only add subdirectory if the associated Qt module is found. +# As a side effect, this macro now also defines the variable ${name}_GEN_DIR +# and must be called for every subproject. +macro(HAS_QT_MODULE var name) + if (NOT DISABLE_${name} AND ${var}) + # we keep the PySide name here because this is compiled into shiboken + set(${name}_GEN_DIR ${CMAKE_CURRENT_BINARY_DIR}/${name}/PySide2/${name} + CACHE INTERNAL "dir with generated source" FORCE) + add_subdirectory(${name}) + else() + # Used on documentation to skip modules + set("if_${name}" "" PARENT_SCOPE) + endif() +endmacro() + diff --git a/sources/pyside2/cmake/Macros/icecc.cmake b/sources/pyside2/cmake/Macros/icecc.cmake new file mode 100644 index 0000000..b2bf071 --- /dev/null +++ b/sources/pyside2/cmake/Macros/icecc.cmake @@ -0,0 +1,11 @@ +include (CMakeForceCompiler) +option(ENABLE_ICECC "Enable icecc checking, for distributed compilation") +if (ENABLE_ICECC) + find_program(ICECC icecc) + if (ICECC) + message(STATUS "icecc found! Distributed compilation for all!! huhuhu.") + cmake_force_cxx_compiler(${ICECC} icecc) + else(ICECC) + message(FATAL_ERROR "icecc NOT found! re-run cmake without -DENABLE_ICECC") + endif(ICECC) +endif(ENABLE_ICECC) diff --git a/sources/pyside2/cmake_uninstall.cmake b/sources/pyside2/cmake_uninstall.cmake new file mode 100644 index 0000000..df95fb9 --- /dev/null +++ b/sources/pyside2/cmake_uninstall.cmake @@ -0,0 +1,21 @@ +IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") +ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + +FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +STRING(REGEX REPLACE "\n" ";" files "${files}") +FOREACH(file ${files}) + MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") + IF(EXISTS "$ENV{DESTDIR}${file}") + EXEC_PROGRAM( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + IF(NOT "${rm_retval}" STREQUAL 0) + MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") + ENDIF(NOT "${rm_retval}" STREQUAL 0) + ELSE(EXISTS "$ENV{DESTDIR}${file}") + MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") + ENDIF(EXISTS "$ENV{DESTDIR}${file}") +ENDFOREACH(file) diff --git a/sources/pyside2/doc/CMakeLists.txt b/sources/pyside2/doc/CMakeLists.txt new file mode 100644 index 0000000..5a78db4 --- /dev/null +++ b/sources/pyside2/doc/CMakeLists.txt @@ -0,0 +1,139 @@ +cmake_minimum_required(VERSION 3.1) +cmake_policy(VERSION 3.1) + +project(doc) + +if (WIN32) + set(PATH_SEP "\;") +else() + set(PATH_SEP ":") +endif() + +set(DOC_DATA_DIR "${CMAKE_CURRENT_BINARY_DIR}/qdoc-output") + +get_filename_component(ROOT ${CMAKE_CURRENT_BINARY_DIR} DIRECTORY) +set(TS_ROOT "${ROOT}/PySide2") + +file(REMOVE ${CMAKE_CURRENT_LIST_DIR}/pyside.qdocconf ${CMAKE_CURRENT_LIST_DIR}/pyside.qdocconf.in) + +# For Qt modules that are part of the documentation build: +# - Configure the module docconf file +# - Write shiboken header consisting of pyside2_global.h and module includes +# - Build include path for qdoc for shiboken + +# The last element of the include list is the mkspec directory containing qplatformdefs.h +list(GET Qt5Core_INCLUDE_DIRS -1 mkspecInclude) +configure_file("pyside-config.qdocconf.in" "${CMAKE_CURRENT_LIST_DIR}/pyside-config.qdocconf" @ONLY) + +file(READ "${pyside2_BINARY_DIR}/pyside2_global.h" docHeaderContents) +file(READ "typesystem_doc.xml.in" typeSystemDocXmlContents) + +foreach(moduleIn ${all_module_shortnames}) + string(TOLOWER "${moduleIn}" lowerModuleIn) + set(docConf "${CMAKE_CURRENT_LIST_DIR}/qtmodules/pyside-qt${lowerModuleIn}.qdocconf.in") + if(EXISTS "${docConf}") + string(REGEX REPLACE "(^.*)\.in" "\\1" OUTFILE ${docConf}) + get_filename_component(BASENAME ${OUTFILE} NAME) + configure_file(${docConf} "${CMAKE_CURRENT_LIST_DIR}/qtmodules/${BASENAME}" @ONLY) + file(APPEND "pyside.qdocconf.in" "\@CMAKE_CURRENT_LIST_DIR\@/qtmodules/${BASENAME}\n") + # Handle docconf files in Qt that contain multiple modules + if ("${moduleIn}" STREQUAL "3DExtras") + set(modules 3DCore 3DRender 3DInput 3DLogic 3DAnimation "${moduleIn}") + elseif ("${moduleIn}" STREQUAL "QuickWidgets") + set(modules Qml Quick "${moduleIn}") + elseif ("${moduleIn}" STREQUAL "MultimediaWidgets") + set(modules Multimedia "${moduleIn}") + elseif ("${moduleIn}" STREQUAL "WebEngineWidgets") + set(modules WebEngine WebEngineCore "${moduleIn}") + else() + set(modules "${moduleIn}") + endif() + foreach(module ${modules}) + string(TOLOWER "${module}" lowerModule) + # -- @TODO fix this for macOS frameworks. + file(APPEND "${CMAKE_CURRENT_LIST_DIR}/pyside-config.qdocconf" + " -I ${QT_INCLUDE_DIR}Qt${module} \\\n" + " -I ${QT_INCLUDE_DIR}Qt${module}/${Qt5Core_VERSION} \\\n" + " -I ${QT_INCLUDE_DIR}Qt${module}/${Qt5Core_VERSION}/Qt${module} \\\n") + + if (${moduleIn} STREQUAL "X11Extras") + set(globalHeader "QX11Info") + else() + set(globalHeader "Qt${module}") + endif() + set(docHeaderContents "${docHeaderContents}\n#include ") + set(typeSystemDocXmlContents "${typeSystemDocXmlContents}\n") + endforeach() + endif() +endforeach() + +set(typeSystemDocXmlContents "${typeSystemDocXmlContents}\n\n") +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/typesystem_doc.xml" "${typeSystemDocXmlContents}") + +set(docHeader "${pyside2_BINARY_DIR}/qdoc.h") +file(WRITE ${docHeader} "${docHeaderContents}") + +configure_file("pyside.qdocconf.in" "pyside.qdocconf" @ONLY) + +set(QDOC_TYPESYSTEM_PATH "${pyside2_SOURCE_DIR}${PATH_SEP}${pyside2_BINARY_DIR}") + +add_custom_target(qdoc + # Use dummy Qt version information, QDoc needs it but has no effect on WebXML output + COMMAND ${CMAKE_COMMAND} -E env BUILDDIR=${CMAKE_CURRENT_LIST_DIR}/src QT_INSTALL_DOCS=${QT_SRC_DIR}/doc QT_VERSION=1.0.0 QT_VER=1.0 QT_VERSION_TAG=100 + qdoc pyside.qdocconf -single-exec -installdir ${DOC_DATA_DIR} -outputdir ${DOC_DATA_DIR} + COMMENT "Running qdoc against Qt source code..." + SOURCE "pyside.qdocconf") + +add_custom_target(apidoc + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/rst + COMMAND ${SHIBOKEN_PYTHON_INTERPRETER} ${SPHINX_BUILD} -b html ${CMAKE_CURRENT_BINARY_DIR}/rst html + ) + +# create conf.py based on conf.py.in +configure_file("conf.py.in" "rst/conf.py" @ONLY) + +add_custom_target("docrsts" + COMMAND ${SHIBOKEN_BINARY} --generator-set=qtdoc ${docHeader} + --include-paths="${QT_INCLUDE_DIR}${PATH_SEP}${pyside2_SOURCE_DIR}${PATH_SEP}${TS_ROOT}" + --api-version=${SUPPORTED_QT_VERSION} + --typesystem-paths="${QDOC_TYPESYSTEM_PATH}" + --library-source-dir=${QT_SRC_DIR} + --documentation-data-dir=${DOC_DATA_DIR}/webxml + --output-directory=${CMAKE_CURRENT_BINARY_DIR}/rst + --documentation-code-snippets-dir=${CMAKE_CURRENT_SOURCE_DIR}/codesnippets/doc/src/snippets${PATH_SEP}${CMAKE_CURRENT_SOURCE_DIR}/codesnippets/examples + --documentation-extra-sections-dir=${CMAKE_CURRENT_SOURCE_DIR}/extras + --additional-documentation=${CMAKE_CURRENT_LIST_DIR}/additionaldocs.lst + ${CMAKE_CURRENT_BINARY_DIR}/typesystem_doc.xml + WORKING_DIRECTORY ${${module}_SOURCE_DIR} + COMMENT "Running generator to generate documentation..." +) + +add_custom_target("licensedocrsts" + COMMAND ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_LIST_DIR}/qtattributionsscannertorst.py + ${CMAKE_CURRENT_LIST_DIR}/../../.. + ${CMAKE_CURRENT_BINARY_DIR}/rst/licenses.rst + COMMENT "Creating 3rdparty license documentation..." +) + +add_dependencies(apidoc docrsts licensedocrsts) +add_dependencies(licensedocrsts docrsts) +add_dependencies(docrsts qdoc) + +# #create devhelp file +# add_custom_target(apidevhelp +# COMMAND python;${CMAKE_CURRENT_SOURCE_DIR}/pyhtml2devhelp.py;${CMAKE_BINARY_DIR}/apidoc/html;index.html > +# ${CMAKE_BINARY_DIR}/apidoc/html/PySide.devhelp;${BINDING_API_VERSION}&&; +# gzip;-9v;-f;${CMAKE_BINARY_DIR}/apidoc/html/PySide.devhelp +# COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_INSTALL_PREFIX}/share/devhelp/books" +# COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_INSTALL_PREFIX}/share/doc/${BINDING_NAME}/html" "${CMAKE_INSTALL_PREFIX}/share/devhelp/books/${BINDING_NAME}" +# ) + +#install files +add_custom_target(apidocinstall + COMMAND mkdir -p ${CMAKE_INSTALL_PREFIX}/share/doc/PySide2-${BINDING_API_VERSION} && cp -rv ${CMAKE_CURRENT_BINARY_DIR}/html/* ${CMAKE_INSTALL_PREFIX}/share/doc/PySide-${BINDING_API_VERSION} +) + +add_dependencies(apidocinstall apidoc) +# add_dependencies(apidocinstall apidevhelp) + diff --git a/sources/pyside2/doc/_templates/layout.html b/sources/pyside2/doc/_templates/layout.html new file mode 100644 index 0000000..6ab1276 --- /dev/null +++ b/sources/pyside2/doc/_templates/layout.html @@ -0,0 +1,40 @@ +{% extends "!layout.html" %} + +# Invert sidebars +{%- block sidebar1 %}{{ sidebar() }}{%- endblock %} +{%- block sidebar2 %}{%- endblock %} + +{%- block header %} +
+
+
+ + +
+
+{%- endblock -%} + +{%- block footer %} + +
+{%- endblock %} + +# No top relbar. +{%- block relbar1 %}{%- endblock %} + +# No bottom relbar. +{%- block relbar2 %}{%- endblock %} diff --git a/sources/pyside2/doc/_themes/pysidedocs/domainindex.html b/sources/pyside2/doc/_themes/pysidedocs/domainindex.html new file mode 100644 index 0000000..c136cdd --- /dev/null +++ b/sources/pyside2/doc/_themes/pysidedocs/domainindex.html @@ -0,0 +1,57 @@ +{# + basic/domainindex.html + ~~~~~~~~~~~~~~~~~~~~~~ + + Template for domain indices (module index, ...). + + :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +#} +{% extends "layout.html" %} +{% set title = indextitle %} +{% block extrahead %} +{{ super() }} +{% if not embedded and collapse_index %} + +{% endif %} +{% endblock %} +{% block body %} +
+ {%- set curr_group = 0 %} + +

{{ indextitle }}

+ +
+ {%- for (letter, entries) in content %} + {{ letter }} + {%- if not loop.last %} | {% endif %} + {%- endfor %} +
+ + + {%- for letter, entries in content %} + + + {%- for (name, grouptype, page, anchor, extra, qualifier, description) + in entries %} + {%- if grouptype == 1 %}{% set curr_group = curr_group + 1 %}{% endif %} + + + + {%- endfor %} + {%- endfor %} +
 
+ {{ letter }}
{% if grouptype == 1 -%} + + {%- endif %}{% if grouptype == 2 %}   {% endif %} + {% if page %}{% endif -%} + {{ name|e }} + {%- if page %}{% endif %} + {%- if extra %} ({{ extra|e }}){% endif -%} + {% if qualifier %}{{ qualifier|e }}:{% endif %} + {{ description|e }}
+
+{% endblock %} diff --git a/sources/pyside2/doc/_themes/pysidedocs/searchbox.html b/sources/pyside2/doc/_themes/pysidedocs/searchbox.html new file mode 100644 index 0000000..55a9721 --- /dev/null +++ b/sources/pyside2/doc/_themes/pysidedocs/searchbox.html @@ -0,0 +1,12 @@ +{%- if pagename != "search" %} + + +{%- endif %} diff --git a/sources/pyside2/doc/_themes/pysidedocs/static/bg_header.png b/sources/pyside2/doc/_themes/pysidedocs/static/bg_header.png new file mode 100644 index 0000000000000000000000000000000000000000..843e7e2c5a85f4ced9bc4d4f90dab4a6d82aa3f3 GIT binary patch literal 36012 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 literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/_themes/pysidedocs/static/bg_topo.jpg b/sources/pyside2/doc/_themes/pysidedocs/static/bg_topo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4229ae8db5242e11c8fc52dd1122735d198a3545 GIT binary patch literal 14237 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 literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/_themes/pysidedocs/static/fakebar.png b/sources/pyside2/doc/_themes/pysidedocs/static/fakebar.png new file mode 100644 index 0000000000000000000000000000000000000000..b45830e000eb123c3efab6bfc3b17809a3a08530 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0y~yVB`m~89A7Mq`$$QwLprqz$3Dlfr0M`2s2LA=92~r xihH^^hG*5B1h}~tn49EFcPMuw|ksYXn!PC{xWt~$(69Du$7_a~U literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/_themes/pysidedocs/static/logo_python.jpg b/sources/pyside2/doc/_themes/pysidedocs/static/logo_python.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd474efbaa633dde7998c09170e4500acc4a13ce GIT binary patch literal 2660 zcmb`IXHe5w7sme~g$OYaK&6YcMRr390r3+A|xavB_t5ih(D1=Af=?GkO)~>IXPKbWhEsg<%53%5*HWWi`XkK zEiJFO54BJ6Z{vSmh+Y9GIDiN0z#tSLh5~_6AW=I|u-mp67z6_CHu@J(m>5JH41(`! zUyXk_5GV{R1`?MBKwz*KL`+-^F7@Y`uPIOvs0{3op{)3MbzG!5y=N&o#g`K~VJ*6)Dq`KvT zk7yJ?fOo@DU=&~t2rnf4Uq}Xr&&_ps5U%Od5m+;`D@y2KU7y?K!B6dR!KI2x1LxVN zThjDpjo~?pE3=`Ze=@Jb4EMm#&Z{c%ktEbwOmjVc58a)c_v7 z^2MlLFz3o;viH}U20@|{zs+hPXm(CKkc{ah^>dxHUMB&Rz}^K5mOOeIT0MSp1h4W| z{KZjc8cj#1DX*cvzU5;{ea_mO#ks(Hwg>7&fPbG|8Lt1F^jAndImrqQ;f70!cj8Lz zf=*zz_gKE{4KUT8y|%vM)PKT{;Mp&@dekLDmofk)#)iE0fA8y%i}m0+U~I3oD$T(1 zA5XhUtWFjOtuwp1a2Ayt8a|EoZeXRPj%U;cpO7`SDT~c2j2PaDsE9ni%yz~{G1-;5 zbKH%~b6gIZdU5Mh-xOBlT*j1n4fS#I59QCk)ILI-#t+ z7_$S3!rDC|;1GE^zmZ69<;l#~X7#=_5TaCLh37`_yoV-QH9zgd+-o*z6DUQtdsYvP zkGK;RuhS0aJac)*>WJ>BEqsxY+skV1?DT$Ki$suO^i_$p<5h5tN`C=MpBmL!?erh0 z2mpADBDK&#)zhSCUh+jh!D3KP8unV&lW@rfm#B8miLFo8X$f$QMJy{M+R8|Y2I&OSoy*3L*Pf`l%ShmbEk&INIUFHoB73zAug?mpSwf~kJ&nRB0763oO#yn zm+u$RspIu*Zm4!MIxRM0^BrWpD{A)WqtG0`!XRk5H6$qg)^RTQ_xw#4M>Dl2QME_t zlzp+@Kd`^}wF#&if|5k1Q8j!&nA+1jwRCg8e@I4G>bPkPb%+omXC|gVj`yF-4b(JE zamB1jOX-H=j2p2Oga0s@%p~5-GI!`XgH-HDD(mPUr8hxrX3sX@yKQ|16``D{0c0^d zr~XHWVI;aR3yfRDS!D6>ceuX@*$USgX;`b6c~|*aDP#BwPRg4)VR5Uc9)W4fv{upo zUWJo+&(%}WKG6MOPUCTeDQ~@p+AFN8%VH8Z-x8z&Igm4g28Q1$xx$4_4t3g(0N>K__+vw>T|k23p)P0^n-=+A3i zY+H*fVf1`O%9E&$-#lDCTJxG9FfS1h-1_Cd@Lel1GbxF3e|-sn4kaf5_V0Db`*qBCX|R@#Ejf zKhjI7!&GMUh8DVM`Po^=Eh`~%sp=$S>kTjL#29|AYS43dCr-Hb!f8Mm^Q^bP(Gsd# z!WTBvI9VeqCj9AxQ@uM2Hi@c6FOqZ)B%TC>cjzYy&9Y9fcnicbJ&^Rq&P_G zrRg(kUMFj2KM0JkMi#k~O156rJV>u2RJ6>LV}7*`Pup9`TbehWH7D{;YrpZbw2#$@ zxp8Lxs#SiVCS4}EIi)Q`|9*BOMIlq+vDP>hpWo#!mrXm~&}1?ha~|Rnf!^>FXut8G znJWjSvIstupS7uj`>k%~Zh<2xZTUz_6LV=qSRI;vngJxvcdWnjN*h1HEdczWqS~ zku}LHT9*4G6hHzJ1wX#8>mK(U>Ui&EJJ@g|OQyrQ;b!L?QeQJnN8QLG+7KI29osqi zE}dBuaq(;!#lBlxZqTXl^{H*?D__4LTmK4e+J5sxWdrw}Gkp(2?G_(d%oaInxK{Z% zb2Ob})}LK8b+)k2n`OO9mT3Rj5!ZWPR(7(synXcyf$!M1G~Vrk>%Sf`#JbfG6Z30@ zY8!cnD92GAdKy_%THEI}C1vWA$7FIm&sFP({eSF&u3fno=skRc?{_0a8;-N|DqjT|?_BFWCv45f9)3Jho Lk^f!7iAMelGjO_W literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/_themes/pysidedocs/static/logo_qt.png b/sources/pyside2/doc/_themes/pysidedocs/static/logo_qt.png new file mode 100644 index 0000000000000000000000000000000000000000..3bc03b7c7e5581f9b56bd5505684d99c31df99d6 GIT binary patch literal 1936 zcmaJ?X;c$e6dnkuMX{n*tyUXjTNfmg1cD?I5fUOPhFuAYl#omyKr$g2B%o-(rJ}8Z zNO7YsRja7TLBS0bp=uQ+EMZ?2f&qeIQMRyjqN4p#I_J*3_wKphch`3&!NYBxx!HU( z007KcE(|YpU2Ax!V9;;c%{VQ(e2qAB5N}w3L~*4M;K+xAAS_G74TiiREr zF9!3YFZ4vig&>H83W8BlQTQlpJS+`Hu@nkOAb}*36>4E6ixwkXxs_P9WSoHk$#_zs z1QEhwtbvgm1VgDfoY&Ml8mLXg*4`MNBIFt!56!NKd)^;Qci9sL}=uSkUv#lM4VdrFLL$D(| zGAJab%{Z0;^CCr%7#YX%KVyj#Vhtl9lAxX$kW{!8;xnbN2>U*Ds&K+s=*|=JeZ=x7 zjD^me5DTKgfQAPDtKs7+bczhyPveUoK3xDvj84529dDzqd?o-GrF*RRaYnDm*w~ok z3$G92^un87o>ntt7ysB+#dnx1p5p zTPEO?1^bnSY(hmP+^h=qSA}j-g$0y{2bPPuJP*<{IaXz;O@pldmEDy znv(Z79XZgHa`5G`#8=0YUY$s8PCH_d-&2}TrM8?-Z8>wS- zUOLm7ezrCJf+pjlCi9XeGrcYAa$DAww(A+~*;yU8Z*<(b(Q!9ho13G(cT;=smiED& z&b)hX3i94O%F{j0*F7oF{av7Y`d8P}$6bX_yI(x(Ru*;_KS!mfwYF zRoYuo)?2B1TUGwHs_I=`^}D*7clEV>4Rw8u4Sg?P^{bl))GY(ATL(0n!S=Snj*g*D z?NFyq-=))ccj>!(^u0a9y?rD7{UZYdBZGq@L;6v@esp+vba-TRWOQs4?NPSl+U01s zOb{2{j+A+s7dgBJYIpE zE6(A^Jx@0?SprPXU1OR!TbR?i0HEcFY8TFbXq-8td&nejgT?09t321K6-M?RbIGZb zn!F_sJr%rA()1Qa4z*~ZV#kw+lXTaqZnt#LFY5tI%(Z+!z?Hq%C@9V} z7K%TEo8uxGZFHaEFEI-&i8^e|S;z^*eB+tC6o`y7WhrE#B=ha&_vdahnpEDr7_)xT z+?8XdxxVqX3a)$RBY4$8Ot__AWit*}Iz6+%y?CnRW)<@RaQg=fiv-Mf!zOG$#iA(s zsx_waqi_Yrzn3-(HX^iX;re5@?7!@)P4jG7o!61H4$RP)gb7^T)z*8?Y}?cFYhOUf z;H`lG&ASS_4nf(_iRIKpPm{)=hJEBDWob;DOTojqC$qf0uL*JwGZlq8fsmV;UCFzc4K5X1;+ma2r*h^ literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/_themes/pysidedocs/static/minus.png b/sources/pyside2/doc/_themes/pysidedocs/static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..da1c5620d10c047525a467a425abe9ff5269cfc2 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1SHkYJtzcHoCO|{#XvD(5N2eUHAey{$X?>< z>&kweokM_|(Po{+Q=kw>iEBiObAE1aYF-J$w=>iB1I2R$WLpMkF=>bh=@O1TaS?83{1OVknK< z>&kweokM`jkU7Va11Q8%;u=xnoS&PUnpeW`?aZ|OK(QcC7sn8Z%gHvy&v=;Q4jejg zV8NnAO`-4Z@2~&zopr02WF_WB>pF literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/_themes/pysidedocs/static/pysidedocs.css b/sources/pyside2/doc/_themes/pysidedocs/static/pysidedocs.css new file mode 100644 index 0000000..6b1c427 --- /dev/null +++ b/sources/pyside2/doc/_themes/pysidedocs/static/pysidedocs.css @@ -0,0 +1,477 @@ +* { + font: 100% Verdana, Arial, Helvetica, sans-serif; + font-size:12px; +} + +html { + height: 100%; +} + +body { + margin: 0; + padding: 0; + background-color: #EBEBEB; + height: 100%; + color: #333; +} + +strong { + font-weight:bold; +} + +.document { + padding-bottom: 90px; +} + +#container { + position: relative; + min-height: 100%; + background-image: url(fakebar.png); + background-repeat: repeat-y; + background-color: white; +} + +.footer { + position: absolute; + bottom: 0px; + margin-top: 50px; + text-align:center; + background-color: white; + border-top: 2px solid #e0e0e0; + white-space: normal; + height: 90px; + width: 100%; +} + +.footer img { + margin-left: 8px; + margin-right: 8px; +} + +.sphinxsidebar { + float: left; + width: 250px; + padding: 0px 10px 0px 10px; + text-align: left; +} + +.sphinxsidebar ul { + padding: 0px; + margin: 0px; + list-style-position: inside; +} + +.sphinxsidebar > ul { + padding: 0px; + margin: 0px; +} + +.sphinxsidebar ul li { + margin-left: 10px; + padding: 0px; +} + +.sphinxsidebar h3, .sphinxsidebar h3 a { + font-weight: bold; + color: #333; +} + +.documentwrapper { + margin-left: 270px; + text-align: left; + background-color: #ffffff; + border-left: 1px solid #989898; + font-size:18px; + padding: 10px 50px 15px 50px; + height: 100%; +} + +h1 { + font-size:18px; + padding-left: 50px; + padding-bottom: 15px; + padding-top: 15px; + border-bottom: 1px solid #c2c2c2; +/* text-transform:uppercase; */ + margin-right: -100px; + position: relative; + left: -50px; + top: -10px; +} + +h2 { + font-size:12px; + font-weight:bold; + border-left-width: 1px; + border-right-width: 1px; + border-top-width: 1px; + border-bottom-width: 2px; + border-style: solid; + border-left-color: #b1b1b1; + border-right-color: #b1b1b1; + border-top-color: #b1b1b1; + border-bottom-color: #009491; + background-color: #e0e0e0; + padding:5px; + margin-top: 20px; + -moz-border-radius:5px; + -webkit-border-radius:5px; + -khtml-border-radius:5px; +} + +h3, h4 { + font-weight: bolder; +} + +pre { + border-top: 1px solid #e0e0e0; + border-bottom: 1px solid #e0e0e0; + background-color: #fafafa; + padding: 5px; + font: 100% monospace; + overflow: auto; +} + +pre * { + font: 100% monospace; +} + +.pre { + font: 100% monospace; +} + +.headerlink { + font-size: 100%; + color: inherit; + float: right; + visibility: Hidden +} + +h1 .headerlink { + padding-right: 50px; +} + +h1:hover .headerlink, h2:hover .headerlink, h3:hover .headerlink { + visibility: Visible; +} + +a, a:visited { + color: #009491; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +div.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +div.seealso { + background-color: #ffffcc; + border: 1px solid #ffff66; +} + +div.note { + border: 1px solid #e3e3e3; +} + +table.docutils { + margin-left: auto; + margin-right: auto; + margin-bottom: 10px; + border: none; +} + +table.docutils td { + border: none; +} + +table.docutils th { + border: none; + font-weight: bold; + vertical-align: top; +} + +h2 em { + float: right; + font-size: 10px; + position: relative; + top: -20px; +} + +/* Table of pymaemo components */ + +#development table.docutils td { + border-bottom: 1px solid #EBEBEB; +} + +#development th { + background-color: #EBEBEB; + color: #FC7E00; + padding: 5px; +} + +#development th:first-child { + -moz-border-radius: 20px 0px 0px 0px; + -webkit-border-radius: 20px 0px 0px 0px; + -khtml-border-radius: 20px 0px 0px 0px; + padding-left: 10px; +} +#development th:last-child { + -moz-border-radius: 0px 20px 0px 0px; + -webkit-border-radius: 0px 20px 0px 0px; + -khtml-border-radius: 0px 20px 0px 0px; + padding-right: 10px; + width: 100px; +} + +hr { + border: none; + border-bottom: 1px dashed #EBEBEB; + width: 70% +} + +.oldnews { + text-align: right; +} + +/******************* TOPO *****************************/ +.header { + background-image: url(bg_topo.jpg); + background-repeat: repeat-x; + height: 147px; +} + +.header_container { + background-image: url(bg_header.png); + background-repeat: no-repeat; + background-position: 100px 0px; +} + +.logo { + text-align: left; + margin-bottom: 10px; +} + +#searchbox { + border-top: 1px solid #989898; + padding-top: 10px; + margin-left: -10px; + margin-right: -10px; + padding-left: 10px; + padding-right: 10px; +} + +#search_button { + border: 1px solid #3A393A; + background-color: #3A393A; + color: white; + cursor: pointer; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + -khtml-border-radius: 5px; + +} + +form { + margin: 0px; + padding: 0px; +} + +/* search field */ +form #q { + width: 136px; +/* height: 22px; */ + border: none; + margin: 0px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + -khtml-border-radius: 5px; + margin-top: 2px; + padding: 4px; + line-height: 22px +} + +#search-results h2 { + display: none; +} + +#search-results h2 { + display: none; +} + +#search-results ul.search { + margin: 0px; + padding: 0px; +} + +ul.search div.context { + padding-left: 40px; +} + +#installation td { + text-align: center; + font-weight: bold; +} + +em { + color: inherit; + font-style:italic; +} + +/******** REL bar *********/ + +.related { + display: inline; +} + +.related ul { + padding: 0px 0px 0px 10px; + margin: 0px; + text-align: left; + background-image: url(relbar_bg.png); +} + +.related li { + display: inline; + color: white; + font-weight: bold; +} + +.related li a { + color: inherit; + line-height: 35px; + font-weight: bold; + vertical-align: middle; +} + +.related li.right { + float: right; + margin-right: 5px; +} + +.related h3 { + display: none; +} + +.align-center { + text-align: center; +} + +.contentstable { + width: 100%; +} + +.contentstable td { + padding-left: 30px; + vertical-align: top; +} + +p.biglink a { + font-size: 20px; +} + +dt:target, .highlight { + background-color: #fbe54e; +} + +img { + border: 0px; +} + +.figure .caption { + font-style:italic; +} + +table.footnote { + margin: 0px; +} + +#synopsis table, table.field-list { + margin: 0px; +} + +tt.descname { + font-size: 120%; + font-weight: bold; +} + +#functions ul, #virtual-functions ul, #slots ul, #signals ul, #static-functions ul { + list-style: none; + margin: 0px; + padding: 10px; + border: 1px solid #ddd; + background-color: #f4f4f4; + -moz-border-radius:10px; + -webkit-border-radius:10px; + -khtml-border-radius:10px; +} + +#synopsis span.pre { + color: #009491; + font-weight: bolder; +} + +#detailed-description .class dt, #detailed-description .method dt, #detailed-description .attribute dt { + margin: 0px; + padding: 10px; + border: 1px solid #ddd; + background-color: #f4f4f4; + -moz-border-radius:10px; + -webkit-border-radius:10px; + -khtml-border-radius:10px; +} + +.pysidetoc ul { + list-style: none; + padding: 0px; + margin: 0px; +} + +.pysidetoc em { + font-style: normal; +} + +.pysidetoc strong { + display: block; + padding: 5px; + border: 1px solid #ddd; + background-color: #f4f4f4; + -moz-border-radius:6px; + -webkit-border-radius:6px; + -khtml-border-radius:6px; +} + +.hide { + display: none; +} + diff --git a/sources/pyside2/doc/_themes/pysidedocs/static/pysidelogo.png b/sources/pyside2/doc/_themes/pysidedocs/static/pysidelogo.png new file mode 100644 index 0000000000000000000000000000000000000000..882a004dd1eca07d966c477889f44ce4e5faa380 GIT binary patch literal 9473 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 literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/_themes/pysidedocs/static/relbar_bg.png b/sources/pyside2/doc/_themes/pysidedocs/static/relbar_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..4036733a7bad6f210ffe961dbc394fce33800be6 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^{6MVC!3HF~cLcBlDNj!q#}JRsx6=-CG8k|$i|$$w zTw?G%WViDYU8g_t)58~aoe=wQ /dev/null +# if [ $? -ne 0 ] +# then +# if fgrep '' "$F" > /dev/null # Exclude reference only +# then +# egrep "( /dev/null || echo $F +# fi +# fi +# done +# A line enclosed in [] denotes a (relative) target directory + +[overviews] +animation-overview.webxml +animation.webxml +application-windows.webxml +audiooverview.webxml +bearer-management.webxml +cameraoverview.webxml +# changes.webxml +codec-big5.webxml +codec-big5hkscs.webxml +codec-eucjp.webxml +codec-euckr.webxml +codec-gbk.webxml +codec-sjis.webxml +codec-tscii.webxml +codecs-jis.webxml +compatmap.webxml +# containers.webxml +coordsys.webxml +creating-a-sensor-plugin.webxml +custom-types.webxml +datastreamformat.webxml +datavisualization-examples.webxml +determining-the-default-sensor-for-a-type.webxml +dialogs.webxml +dnd.webxml +dynamic-sensor-backend-registration.webxml +events.webxml +eventsandfilters.webxml +examples-desktop.webxml +examples-dialogs.webxml +examples-graphicsview.webxml +examples-itemviews.webxml +examples-mainwindow.webxml +examples-network.webxml +examples-painting.webxml +examples-qthelp.webxml +examples-qtuitools.webxml +examples-richtext.webxml +examples-widgets-opengl.webxml +examples-widgets.webxml +focus.webxml +gallery.webxml +genericbackend.webxml +gestures-overview.webxml +graphicsview.webxml +guibooks.webxml +helpsystem.webxml +implicit-sharing.webxml +io-functions.webxml +io.webxml +json.webxml +layout.webxml +location-cpp-qml.webxml +location-maps-cpp.webxml +location-maps-qml.webxml +location-places-backend.webxml +location-places-cpp.webxml +location-places-qml.webxml +location-plugin-esri.webxml +location-plugin-here.webxml +location-plugin-itemsoverlay.webxml +location-plugin-mapbox.webxml +location-plugin-mapboxgl.webxml +location-plugin-osm.webxml +location-positioning-cpp.webxml +location-positioning-qml.webxml +mainwindow.webxml +metaobjects.webxml +model-view-programming.webxml +modelview.webxml +multimedia-examples.webxml +multimediabackend.webxml +multimediaoverview.webxml +object.webxml +objecttrees.webxml +painting.webxml +paintsystem-devices.webxml +paintsystem-drawing.webxml +paintsystem-images.webxml +paintsystem.webxml +pdf-licensing.webxml +plugins.webxml +positioning-cpp-qml.webxml +properties.webxml +qfloat16.webxml +qml-advtutorial.webxml +qml-dynamicview-tutorial.webxml +qml-location5-maps.webxml +qml-multimedia.webxml +qml-qtlocation5-maps.webxml +qml-tutorial.webxml +qml-tutorial1.webxml +qml-tutorial2.webxml +qml-tutorial3.webxml +qmlexampletoggleswitch.webxml +qt3d-advancedcustommaterial-example.webxml +qt3d-audio-visualizer-qml-example.webxml +qt3d-basicshapes-cpp-example.webxml +qt3d-cpp.webxml +qt3d-examples.webxml +qt3d-multiviewport-example.webxml +qt3d-overview.webxml +qt3d-pbr-materials-example.webxml +qt3d-planets-qml-example.webxml +qt3d-qml.webxml +qt3d-scene2d-example.webxml +qt3d-scene3d-example.webxml +qt3d-shadow-map-qml-example.webxml +qt3d-simple-cpp-example.webxml +qt3d-simple-qml-example.webxml +qt3d-simplecustommaterial-example.webxml +qt3d-wave-example.webxml +qt3d-widgets-scene3d-example.webxml +qt3d-wireframe-example.webxml +qt3drender-framegraph.webxml +qt3drender-geometry.webxml +qt3drender-protips.webxml +qtalgorithms.webxml +qtconcurrent-imagescaling-example.webxml +qtconcurrent-map-example.webxml +qtconcurrent-progressdialog-example.webxml +qtconcurrent-runfunction-example.webxml +qtconcurrent-wordcount-example.webxml +qtconcurrentfilter.webxml +qtconcurrentmap.webxml +qtconcurrentrun.webxml +qtcore-ipc-localfortuneclient-example.webxml +qtcore-ipc-localfortuneserver-example.webxml +qtcore-ipc-sharedmemory-example.webxml +qtcore-mimetypes-mimetypebrowser-example.webxml +qtcore-serialization-savegame-example.webxml +qtcore-threads-mandelbrot-example.webxml +qtcore-threads-queuedcustomtype-example.webxml +qtcore-threads-semaphores-example.webxml +qtcore-threads-waitconditions-example.webxml +qtcore-tools-contiguouscache-example.webxml +qtcore-tools-customtype-example.webxml +qtdatavisualization-audiolevels-example.webxml +qtdatavisualization-bars-example.webxml +qtdatavisualization-custominput-example.webxml +qtdatavisualization-customitems-example.webxml +qtdatavisualization-customproxy-example.webxml +qtdatavisualization-data-handling.webxml +qtdatavisualization-draggableaxes-example.webxml +qtdatavisualization-interacting-with-data.webxml +qtdatavisualization-itemmodel-example.webxml +qtdatavisualization-known-issues.webxml +qtdatavisualization-overview.webxml +qtdatavisualization-qmlaxisdrag-example.webxml +qtdatavisualization-qmlaxisformatter-example.webxml +qtdatavisualization-qmlbars-example.webxml +qtdatavisualization-qmlcustominput-example.webxml +qtdatavisualization-qmllegend-example.webxml +qtdatavisualization-qmlmultigraph-example.webxml +qtdatavisualization-qmloscilloscope-example.webxml +qtdatavisualization-qmlscatter-example.webxml +qtdatavisualization-qmlspectrogram-example.webxml +qtdatavisualization-qmlsurface-example.webxml +qtdatavisualization-qmlsurfacelayers-example.webxml +qtdatavisualization-rotations-example.webxml +qtdatavisualization-scatter-example.webxml +qtdatavisualization-surface-example.webxml +qtdatavisualization-texturesurface-example.webxml +qtdatavisualization-volumetric-example.webxml +qtest-overview.webxml +qtest-tutorial.webxml +qtglobal.webxml +qtgui-analogclock-example.webxml +qtgui-hellovulkancubes-example.webxml +qtgui-hellovulkantexture-example.webxml +qtgui-hellovulkantriangle-example.webxml +qtgui-hellovulkanwidget-example.webxml +qtgui-hellovulkanwindow-example.webxml +qtgui-openglwindow-example.webxml +qtgui-rasterwindow-example.webxml +qthelp-framework.webxml +qthelpproject.webxml +qtlocation-changes.webxml +qtlocation-cpp.webxml +qtlocation-examples.webxml +qtlocation-geoservices.webxml +qtlocation-mapviewer-example.webxml +qtlocation-minimal-map-example.webxml +qtlocation-places-example.webxml +qtlocation-places-list-example.webxml +qtlocation-places-map-example.webxml +qtlocation-planespotter-example.webxml +qtmath.webxml +qtmultimedia-ios.webxml +qtmultimedia-multimedia-audiodevices-example.webxml +qtmultimedia-multimedia-audioengine-example.webxml +qtmultimedia-multimedia-audioinput-example.webxml +qtmultimedia-multimedia-audiooutput-example.webxml +qtmultimedia-multimedia-audiorecorder-example.webxml +qtmultimedia-multimedia-declarative-camera-example.webxml +qtmultimedia-multimedia-declarative-radio-example.webxml +qtmultimedia-multimedia-spectrum-example.webxml +qtmultimedia-multimedia-video-qmlvideo-example.webxml +qtmultimedia-multimedia-video-qmlvideofx-example.webxml +qtmultimedia-multimediawidgets-camera-example.webxml +qtmultimedia-multimediawidgets-player-example.webxml +qtmultimedia-multimediawidgets-videographicsitem-example.webxml +qtmultimedia-multimediawidgets-videowidget-example.webxml +qtmultimedia-windows.webxml +qtnetwork-blockingfortuneclient-example.webxml +qtnetwork-broadcastreceiver-example.webxml +qtnetwork-broadcastsender-example.webxml +qtnetwork-download-example.webxml +qtnetwork-downloadmanager-example.webxml +qtnetwork-fortuneclient-example.webxml +qtnetwork-fortuneserver-example.webxml +qtnetwork-googlesuggest-example.webxml +qtnetwork-http-example.webxml +qtnetwork-loopback-example.webxml +qtnetwork-multicastreceiver-example.webxml +qtnetwork-multicastsender-example.webxml +qtnetwork-network-chat-example.webxml +qtnetwork-programming.webxml +qtnetwork-securesocketclient-example.webxml +qtnetwork-threadedfortuneserver-example.webxml +qtnetwork-torrent-example.webxml +qtopengl-2dpainting-example.webxml +qtopengl-cube-example.webxml +qtopengl-hellogl2-example.webxml +qtpositioning-examples.webxml +qtpositioning-geoflickr-example.webxml +qtpositioning-logfilepositionsource-example.webxml +qtpositioning-plugins.webxml +qtpositioning-satelliteinfo-example.webxml +qtpositioning-weatherinfo-example.webxml +qtquick-animation-example.webxml +qtquick-bestpractices.webxml +qtquick-canvas-example.webxml +qtquick-codesamples.webxml +qtquick-convenience-topic.webxml +qtquick-cppextensionpoints.webxml +qtquick-customitems-dialcontrol-example.webxml +qtquick-customitems-flipable-example.webxml +qtquick-customitems-painteditem-example.webxml +qtquick-customitems-scrollbar-example.webxml +qtquick-customitems-tabwidget-example.webxml +qtquick-demos-calqlatr-example.webxml +qtquick-demos-clocks-example.webxml +qtquick-demos-maroon-example.webxml +qtquick-demos-photosurface-example.webxml +qtquick-demos-photoviewer-example.webxml +qtquick-demos-rssnews-example.webxml +qtquick-demos-samegame-example.webxml +qtquick-demos-stocqt-example.webxml +qtquick-demos-tweetsearch-example.webxml +qtquick-draganddrop-example.webxml +qtquick-effects-particles.webxml +qtquick-effects-sprites.webxml +qtquick-effects-topic.webxml +qtquick-effects-transformations.webxml +qtquick-externaldraganddrop-example.webxml +qtquick-imageelements-example.webxml +qtquick-imageprovider-example.webxml +qtquick-imageresponseprovider-example.webxml +qtquick-input-focus.webxml +qtquick-input-mouseevents.webxml +qtquick-input-textinput.webxml +qtquick-input-topic.webxml +qtquick-keyinteraction-example.webxml +qtquick-layouts-example.webxml +qtquick-localstorage-example.webxml +qtquick-modelviewsdata-cppmodels.webxml +qtquick-modelviewsdata-modelview.webxml +qtquick-modelviewsdata-topic.webxml +qtquick-mousearea-example.webxml +qtquick-particles-affectors-example.webxml +qtquick-particles-customparticle-example.webxml +qtquick-particles-emitters-example.webxml +qtquick-particles-imageparticle-example.webxml +qtquick-particles-performance.webxml +qtquick-particles-system-example.webxml +qtquick-positioners-example.webxml +qtquick-positioning-anchors.webxml +qtquick-positioning-layouts.webxml +qtquick-positioning-righttoleft.webxml +qtquick-positioning-topic.webxml +qtquick-quick-accessibility-example.webxml +qtquick-righttoleft-example.webxml +qtquick-scenegraph-customgeometry-example.webxml +qtquick-scenegraph-materials.webxml +qtquick-scenegraph-nodes.webxml +qtquick-scenegraph-openglunderqml-example.webxml +qtquick-scenegraph-simplematerial-example.webxml +qtquick-shadereffects-example.webxml +qtquick-shapes-example.webxml +qtquick-statesanimations-animations.webxml +qtquick-statesanimations-behaviors.webxml +qtquick-statesanimations-states.webxml +qtquick-statesanimations-topic.webxml +qtquick-text-example.webxml +qtquick-text-validator.webxml +qtquick-threading-example.webxml +qtquick-threading-threadedlistmodel-example.webxml +qtquick-tools-and-utilities.webxml +qtquick-touchinteraction-example.webxml +qtquick-tutorials-dynamicview-dynamicview1-example.webxml +qtquick-tutorials-dynamicview-dynamicview2-example.webxml +qtquick-tutorials-dynamicview-dynamicview3-example.webxml +qtquick-tutorials-dynamicview-dynamicview4-example.webxml +qtquick-tutorials-samegame-samegame1-example.webxml +qtquick-tutorials-samegame-samegame2-example.webxml +qtquick-tutorials-samegame-samegame3-example.webxml +qtquick-tutorials-samegame-samegame4-example.webxml +qtquick-views-example.webxml +qtquick-visualcanvas-adaptations-d3d12.webxml +qtquick-visualcanvas-adaptations-openvg.webxml +qtquick-visualcanvas-adaptations-software.webxml +qtquick-visualcanvas-adaptations.webxml +qtquick-visualcanvas-coordinates.webxml +qtquick-visualcanvas-scenegraph-renderer.webxml +qtquick-visualcanvas-scenegraph.webxml +qtquick-visualcanvas-topic.webxml +qtquick-visualcanvas-visualparent.webxml +qtquick-visualtypes-topic.webxml +qtquick-window-example.webxml +qtquicklayouts-overview.webxml +qtsensorgestures-cpp.webxml +qtsensors-accelbubble-example.webxml +qtsensors-cpp.webxml +qtsensors-examples.webxml +qtsensors-grue-example.webxml +qtsensors-maze-example.webxml +qtsensors-porting.webxml +qtsensors-qmlqtsensors-example.webxml +qtsensors-qmlsensorgestures-example.webxml +qtsensors-sensor-explorer-example.webxml +qtsensors-sensorgestures-example.webxml +qtsensors-shakeit-example.webxml +qtsql-books-example.webxml +qtsql-cachedtable-example.webxml +qtsql-drilldown-example.webxml +qtsql-masterdetail-example.webxml +qtsql-sqlwidgetmapper-example.webxml +qtsvg-richtext-textobject-example.webxml +qtsvg-svggenerator-example.webxml +qtsvg-svgviewer-example.webxml +qttestlib-tutorial1-example.webxml +qttestlib-tutorial2-example.webxml +qttestlib-tutorial3-example.webxml +qttestlib-tutorial4-example.webxml +qttestlib-tutorial5-example.webxml +qttestlib-tutorial6.webxml +qtuitools-multipleinheritance-example.webxml +qtuitools-textfinder-example.webxml +qtwidgets-animation-easing-example.webxml +qtwidgets-animation-moveblocks-example.webxml +qtwidgets-animation-stickman-example.webxml +qtwidgets-animation-sub-attaq-example.webxml +qtwidgets-desktop-screenshot-example.webxml +qtwidgets-desktop-systray-example.webxml +qtwidgets-dialogs-classwizard-example.webxml +qtwidgets-dialogs-extension-example.webxml +qtwidgets-dialogs-findfiles-example.webxml +qtwidgets-dialogs-licensewizard-example.webxml +qtwidgets-dialogs-tabdialog-example.webxml +qtwidgets-dialogs-trivialwizard-example.webxml +qtwidgets-draganddrop-draggableicons-example.webxml +qtwidgets-draganddrop-dropsite-example.webxml +qtwidgets-draganddrop-fridgemagnets-example.webxml +qtwidgets-draganddrop-puzzle-example.webxml +qtwidgets-effects-blurpicker-example.webxml +qtwidgets-effects-fademessage-example.webxml +qtwidgets-gestures-imagegestures-example.webxml +qtwidgets-graphicsview-anchorlayout-example.webxml +qtwidgets-graphicsview-basicgraphicslayouts-example.webxml +qtwidgets-graphicsview-boxes-example.webxml +qtwidgets-graphicsview-chip-example.webxml +qtwidgets-graphicsview-collidingmice-example.webxml +qtwidgets-graphicsview-diagramscene-example.webxml +qtwidgets-graphicsview-dragdroprobot-example.webxml +qtwidgets-graphicsview-elasticnodes-example.webxml +qtwidgets-graphicsview-embeddeddialogs-example.webxml +qtwidgets-graphicsview-flowlayout-example.webxml +qtwidgets-graphicsview-padnavigator-example.webxml +qtwidgets-graphicsview-simpleanchorlayout-example.webxml +qtwidgets-graphicsview-weatheranchorlayout-example.webxml +qtwidgets-itemviews-addressbook-example.webxml +qtwidgets-itemviews-chart-example.webxml +qtwidgets-itemviews-coloreditorfactory-example.webxml +qtwidgets-itemviews-combowidgetmapper-example.webxml +qtwidgets-itemviews-customsortfiltermodel-example.webxml +qtwidgets-itemviews-dirview-example.webxml +qtwidgets-itemviews-editabletreemodel-example.webxml +qtwidgets-itemviews-fetchmore-example.webxml +qtwidgets-itemviews-frozencolumn-example.webxml +qtwidgets-itemviews-pixelator-example.webxml +qtwidgets-itemviews-puzzle-example.webxml +qtwidgets-itemviews-simpledommodel-example.webxml +qtwidgets-itemviews-simpletreemodel-example.webxml +qtwidgets-itemviews-simplewidgetmapper-example.webxml +qtwidgets-itemviews-spinboxdelegate-example.webxml +qtwidgets-itemviews-stardelegate-example.webxml +qtwidgets-layouts-basiclayouts-example.webxml +qtwidgets-layouts-borderlayout-example.webxml +qtwidgets-layouts-dynamiclayouts-example.webxml +qtwidgets-layouts-flowlayout-example.webxml +qtwidgets-mainwindows-application-example.webxml +qtwidgets-mainwindows-dockwidgets-example.webxml +qtwidgets-mainwindows-menus-example.webxml +qtwidgets-painting-affine-example.webxml +qtwidgets-painting-basicdrawing-example.webxml +qtwidgets-painting-composition-example.webxml +qtwidgets-painting-concentriccircles-example.webxml +qtwidgets-painting-deform-example.webxml +qtwidgets-painting-fontsampler-example.webxml +qtwidgets-painting-gradients-example.webxml +qtwidgets-painting-imagecomposition-example.webxml +qtwidgets-painting-painterpaths-example.webxml +qtwidgets-painting-pathstroke-example.webxml +qtwidgets-painting-transformations-example.webxml +qtwidgets-richtext-calendar-example.webxml +qtwidgets-richtext-orderform-example.webxml +qtwidgets-richtext-syntaxhighlighter-example.webxml +qtwidgets-statemachine-eventtransitions-example.webxml +qtwidgets-statemachine-factorial-example.webxml +qtwidgets-statemachine-pingpong-example.webxml +qtwidgets-statemachine-rogue-example.webxml +qtwidgets-statemachine-trafficlight-example.webxml +qtwidgets-statemachine-twowaybutton-example.webxml +qtwidgets-tools-codecs-example.webxml +qtwidgets-tools-completer-example.webxml +qtwidgets-tools-customcompleter-example.webxml +qtwidgets-tools-echoplugin-example.webxml +qtwidgets-tools-plugandpaint-app-example.webxml +qtwidgets-tools-plugandpaint-plugins-basictools-example.webxml +qtwidgets-tools-plugandpaint-plugins-extrafilters-example.webxml +qtwidgets-tools-regularexpression-example.webxml +qtwidgets-tools-styleplugin-example.webxml +qtwidgets-tools-treemodelcompleter-example.webxml +qtwidgets-tools-undo-example.webxml +qtwidgets-tools-undoframework-example.webxml +qtwidgets-tutorials-addressbook-part1-example.webxml +qtwidgets-tutorials-addressbook-part2-example.webxml +qtwidgets-tutorials-addressbook-part3-example.webxml +qtwidgets-tutorials-addressbook-part4-example.webxml +qtwidgets-tutorials-addressbook-part5-example.webxml +qtwidgets-tutorials-addressbook-part6-example.webxml +qtwidgets-tutorials-addressbook-part7-example.webxml +qtwidgets-tutorials-notepad-example.webxml +qtwidgets-tutorials-widgets-childwidget-example.webxml +qtwidgets-tutorials-widgets-nestedlayouts-example.webxml +qtwidgets-tutorials-widgets-toplevel-example.webxml +qtwidgets-tutorials-widgets-windowlayout-example.webxml +qtwidgets-widgets-analogclock-example.webxml +qtwidgets-widgets-calculator-example.webxml +qtwidgets-widgets-calendarwidget-example.webxml +qtwidgets-widgets-charactermap-example.webxml +qtwidgets-widgets-codeeditor-example.webxml +qtwidgets-widgets-digitalclock-example.webxml +qtwidgets-widgets-elidedlabel-example.webxml +qtwidgets-widgets-groupbox-example.webxml +qtwidgets-widgets-icons-example.webxml +qtwidgets-widgets-imageviewer-example.webxml +qtwidgets-widgets-lineedits-example.webxml +qtwidgets-widgets-mousebuttons-example.webxml +qtwidgets-widgets-movie-example.webxml +qtwidgets-widgets-scribble-example.webxml +qtwidgets-widgets-shapedclock-example.webxml +qtwidgets-widgets-sliders-example.webxml +qtwidgets-widgets-spinboxes-example.webxml +qtwidgets-widgets-styles-example.webxml +qtwidgets-widgets-stylesheet-example.webxml +qtwidgets-widgets-tablet-example.webxml +qtwidgets-widgets-tetrix-example.webxml +qtwidgets-widgets-tooltips-example.webxml +qtwidgets-widgets-wiggly-example.webxml +qtwidgets-widgets-windowflags-example.webxml +qtxml-dombookmarks-example.webxml +qtxml-saxbookmarks-example.webxml +qtxml-streambookmarks-example.webxml +qtxml-xmlstreamlint-example.webxml +qtxmlpatterns-filetree-example.webxml +qtxmlpatterns-recipes-example.webxml +qtxmlpatterns-schema-example.webxml +qtxmlpatterns-xquery-example.webxml +qwidget-styling.webxml +radiooverview.webxml +resources.webxml +richtext-advanced-processing.webxml +richtext-common-tasks.webxml +richtext-cursor.webxml +richtext-html-subset.webxml +richtext-layouts.webxml +richtext-structure.webxml +richtext.webxml +senorfwbackend.webxml +sensorgesture-emulator-topics.webxml +sensorgesture-plugins-topics.webxml +sensors-backend-topics.webxml +shared.webxml +signalsandslots.webxml +sql-connecting.webxml +sql-driver.webxml +sql-forms.webxml +sql-model.webxml +sql-presenting.webxml +sql-programming.webxml +sql-sqlstatements.webxml +sql-types.webxml +ssl.webxml +statemachine-api.webxml +statemachine.webxml +style-reference.webxml +stylesheet-customizing.webxml +stylesheet-designer.webxml +stylesheet-examples.webxml +stylesheet-reference.webxml +stylesheet-syntax.webxml +stylesheet.webxml +svgrendering.webxml +textedit-example.webxml +timers.webxml +tutorials-addressbook.webxml +videooverview.webxml +widget-classes.webxml +widgets-tutorial.webxml +xml-dom-tml.webxml +xml-namespaces.webxml +xml-processing.webxml +xml-sax.webxml +xml-streaming.webxml +xml-tools.webxml +xmlpattern-examples.webxml +xmlprocessing.webxml +xquery-introduction.webxml diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/accessibilityfactorysnippet.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/accessibilityfactorysnippet.cpp new file mode 100644 index 0000000..92ce5d2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/accessibilityfactorysnippet.cpp @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +//! [0] +QAccessibleInterface *sliderFactory(const QString &classname, QObject *object) +{ + QAccessibleInterface *interface = 0; + + if (classname == "QSlider" && object && object->isWidgetType()) + interface = new SliderInterface(classname, + static_cast(object)); + + return interface; +} + +int main(int argv, char **args) +{ + QApplication app(argv, args); + QAccessible::installFactory(sliderFactory); +//! [0] + + QMainWindow mainWindow; + mainWindow.show(); + + return app.exec(); +//! [1] +} +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/accessibilitypluginsnippet.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/accessibilitypluginsnippet.cpp new file mode 100644 index 0000000..438514d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/accessibilitypluginsnippet.cpp @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +class SliderPlugin : public QAccessiblePlugin +{ +public: + SliderPlugin() {} + + QStringList keys() const; + QAccessibleInterface *create(const QString &classname, QObject *object); +}; + +//! [0] +QStringList SliderPlugin::keys() const +{ + return QStringList() << "QSlider"; +} +//! [0] + +//! [1] +QAccessibleInterface *SliderPlugin::create(const QString &classname, QObject *object) +{ + QAccessibleInterface *interface = 0; + + if (classname == "QSlider" && object && object->isWidgetType()) + interface = new AccessibleSlider(classname, static_cast(object)); + + return interface; +} +//! [1] + +//! [2] +Q_EXPORT_STATIC_PLUGIN(SliderPlugin) +Q_EXPORT_PLUGIN2(acc_sliderplugin, SliderPlugin) +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/accessibilityslidersnippet.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/accessibilityslidersnippet.cpp new file mode 100644 index 0000000..6c479cd --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/accessibilityslidersnippet.cpp @@ -0,0 +1,271 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +//! [0] +QAccessibleSlider::QAccessibleSlider(QWidget *w) +: QAccessibleAbstractSlider(w) +{ + Q_ASSERT(slider()); + addControllingSignal(QLatin1String("valueChanged(int)")); +} +//! [0] + +QSlider *QAccessibleSlider::slider() const +{ + return qobject_cast(object()); +} + +//! [1] +QRect QAccessibleSlider::rect(int child) const +{ +//! [1] + QRect rect; + if (!slider()->isVisible()) + return rect; + const QStyleOptionSlider option = qt_qsliderStyleOption(slider()); + QRect srect = slider()->style()->subControlRect(QStyle::CC_Slider, &option, + QStyle::SC_SliderHandle, slider()); + +//! [2] + switch (child) { + case PageLeft: + if (slider()->orientation() == Qt::Vertical) + rect = QRect(0, 0, slider()->width(), srect.y()); + else + rect = QRect(0, 0, srect.x(), slider()->height()); + break; + case Position: + rect = srect; + break; + case PageRight: + if (slider()->orientation() == Qt::Vertical) + rect = QRect(0, srect.y() + srect.height(), slider()->width(), slider()->height()- srect.y() - srect.height()); + else + rect = QRect(srect.x() + srect.width(), 0, slider()->width() - srect.x() - srect.width(), slider()->height()); + break; + default: + return QAccessibleAbstractSlider::rect(child); + } +//! [2] //! [3] + + QPoint tp = slider()->mapToGlobal(QPoint(0,0)); + return QRect(tp.x() + rect.x(), tp.y() + rect.y(), rect.width(), rect.height()); +} +//! [3] + +int QAccessibleSlider::childCount() const +{ + if (!slider()->isVisible()) + return 0; + return PageRight; +} + +//! [4] +QString QAccessibleSlider::text(Text t, int child) const +{ + if (!slider()->isVisible()) + return QString(); + switch (t) { + case Value: + if (!child || child == 2) + return QString::number(slider()->value()); + return QString(); + case Name: + switch (child) { + case PageLeft: + return slider()->orientation() == Qt::Horizontal ? + QSlider::tr("Page left") : QSlider::tr("Page up"); + case Position: + return QSlider::tr("Position"); + case PageRight: + return slider()->orientation() == Qt::Horizontal ? + QSlider::tr("Page right") : QSlider::tr("Page down"); + } + break; + default: + break; + } + return QAccessibleAbstractSlider::text(t, child); +} +//! [4] + +//! [5] +QAccessible::Role QAccessibleSlider::role(int child) const +{ + switch (child) { + case PageLeft: + case PageRight: + return PushButton; + case Position: + return Indicator; + default: + return Slider; + } +} +//! [5] + +//! [6] +QAccessible::State QAccessibleSlider::state(int child) const +{ + const State parentState = QAccessibleAbstractSlider::state(0); +//! [6] + + if (child == 0) + return parentState; + + // Inherit the Invisible state from parent. + State state = parentState & QAccessible::Invisible; + + // Disable left/right if we are at the minimum/maximum. + const QSlider * const slider = QAccessibleSlider::slider(); +//! [7] + switch (child) { + case PageLeft: + if (slider->value() <= slider->minimum()) + state |= Unavailable; + break; + case PageRight: + if (slider->value() >= slider->maximum()) + state |= Unavailable; + break; + case Position: + default: + break; + } + + return state; +} +//! [7] + +int QAccessibleSlider::defaultAction(int child) const +{ + switch (child) { + case SliderSelf: + return SetFocus; + case PageLeft: + return Press; + case PageRight: + return Press; + } + + return 0; +} + +// Name, Description, Value, Help, Accelerator +static const char * const actionTexts[][5] = +{ + {"Press", "Decreases the value of the slider", "", "", "Ctrl+L"}, + {"Press", "Increaces the value of the slider", "", "", "Ctrl+R"} +}; + +QString QAccessibleSlider::actionText(int action, Text text, int child) const +{ + if (action != Press || child < 1 || child > 2) + return QAccessibleAbstractSlider::actionText(action, text, child); + + return actionTexts[child - 1][t]; +} + +bool QAccessibleSlider::doAction(int action, int child) +{ + if (action != Press || child < 1 || child > 2) + return false; + + if (child == PageLeft) + slider()->setValue(slider()->value() - slider()->pageStep()); + else + slider()->setValue(slider()->value() + slider()->pageStep()); +} + +QAccessibleAbstractSlider::QAccessibleAbstractSlider(QWidget *w, Role r) + : QAccessibleWidgetEx(w, r) +{ + Q_ASSERT(qobject_cast(w)); +} + +QVariant QAccessibleAbstractSlider::invokeMethodEx(Method method, int child, const QVariantList ¶ms) +{ + switch (method) { + case ListSupportedMethods: { + QSet set; + set << ListSupportedMethods; + return qVariantFromValue(set | qvariant_cast >( + QAccessibleWidgetEx::invokeMethodEx(method, child, params))); + } + default: + return QAccessibleWidgetEx::invokeMethodEx(method, child, params); + } +} + +QVariant QAccessibleAbstractSlider::currentValue() +{ + return abstractSlider()->value(); +} + +void QAccessibleAbstractSlider::setCurrentValue(const QVariant &value) +{ + abstractSlider()->setValue(value.toInt()); +} + +QVariant QAccessibleAbstractSlider::maximumValue() +{ + return abstractSlider()->maximum(); +} + +QVariant QAccessibleAbstractSlider::minimumValue() +{ + return abstractSlider()->minimum(); +} + +QAbstractSlider *QAccessibleAbstractSlider::abstractSlider() const +{ + return static_cast(object()); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/alphachannel.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/alphachannel.cpp new file mode 100644 index 0000000..78c2c54 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/alphachannel.cpp @@ -0,0 +1,64 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] + pixmap = QPixmap(100, 100) + pixmap.fill(Qt.transparent) + + gradient = QRadialGradient(50, 50, 50, 50, 50) + gradient.setColorAt(0, QColor.fromRgbF(1, 0, 0, 1)) + gradient.setColorAt(1, QColor.fromRgbF(0, 0, 0, 0)) + painter = QPainter(pixmap) + painter.fillRect(0, 0, 100, 100, gradient) + + channelImage = pixmap.alphaChannel() + update() +//! [0] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/audio/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/audio/main.cpp new file mode 100644 index 0000000..09d1aa4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/audio/main.cpp @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +class Window2 (QWidget): +//![0] + @Slot(QAudio.State) + def stateChanged(self, newState): + if newState == QAudio.StopState: + if self.input.error() != QAudio.NoError: + # Error handling +//![0] + +class Window (QWidget): + def __init__(self): + QWidget.__init__(self) + self.output = QAudioOutput() + self.output.stateChanged[QAudio.State].connect(self.stateChanged) + + def setupFormat(self): +//![1] + format = QAudioFormat() + format.setFrequency(44100) +//![1] + format.setChannels(2) + format.setSampleSize(16) + format.setCodec("audio/pcm") + format.setByteOrder(QAudioFormat.LittleEndian) +//![2] + format.setSampleType(QAudioFormat.SignedInt) + + info = QAudioDeviceInfo(QAudioDeviceInfo.defaultOutputDevice()) + + if not info.isFormatSupported(format): + format = info.nearestFormat(format) +//![2] + +//![3] + @Slot(QAudio.State) + def stateChanged(self, newState): + if newState == QAudio.StopState: + if self.output.error() != QAudio.NoError: + # Perform error handling + else: + # Normal stop +//![3] + + # Handle + elif newState == QAudio.ActiveState: + # Handle active state... + +app = QApplication(sys.argv) + +window = Window() +window.show() +sys.exit(app.exec_()) + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/brush/brush.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/brush/brush.cpp new file mode 100644 index 0000000..ad842a9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/brush/brush.cpp @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main() +{ + QWidget anyPaintDevice; + { + // PEN SNIPPET + QPainter painter; + QPen pen(Qt::red, 2); // red solid line, 2 pixels wide + painter.begin(&anyPaintDevice); // paint something + painter.setPen(pen); // set the red, wide pen + painter.drawRect(40,30, 200,100); // draw a rectangle + painter.setPen(Qt::blue); // set blue pen, 0 pixel width + painter.drawLine(40,30, 240,130); // draw a diagonal in rectangle + painter.end(); // painting done + } + + { + // BRUSH SNIPPET + QPainter painter; + QBrush brush(Qt::yellow); // yellow solid pattern + painter.begin(&anyPaintDevice); // paint something + painter.setBrush(brush); // set the yellow brush + painter.setPen(Qt::NoPen); // do not draw outline + painter.drawRect(40,30, 200,100); // draw filled rectangle + painter.setBrush(Qt::NoBrush); // do not fill + painter.setPen(Qt::black); // set black pen, 0 pixel width + painter.drawRect(10,10, 30,20); // draw rectangle outline + painter.end(); // painting done + } + + // LINEAR +//! [0] + linearGrad = QLinearGradient(QPointF(100, 100), QPointF(200, 200)) + linearGrad.setColorAt(0, Qt.black) + linearGrad.setColorAt(1, Qt.white) +//! [0] + + // RADIAL +//! [1] + radialGrad = QRadialGradient(QPointF(100, 100), 100) + radialGrad.setColorAt(0, Qt.red) + radialGrad.setColorAt(0.5, Qt.blue) + radialGrad.setColorAt(1, Qt.green) +//! [1] +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/brush/gradientcreationsnippet.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/brush/gradientcreationsnippet.cpp new file mode 100644 index 0000000..25d6667 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/brush/gradientcreationsnippet.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argv, char **args) +{ + QApplication app(argv, args); + +//! [0] + gradient = QRadialGradient gradient(50, 50, 50, 50, 50) + gradient.setColorAt(0, QColor.fromRgbF(0, 1, 0, 1)) + gradient.setColorAt(1, QColor.fromRgbF(0, 0, 0, 0)) + + brush = QBrush(gradient) +//! [0] + + QWidget widget; + QPalette palette; + palette.setBrush(widget.backgroundRole(), brush); + widget.setPalette(palette); + widget.show(); + + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/main.cpp new file mode 100644 index 0000000..c874001 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "stylewidget.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + StyleWidget widget; + widget.show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/qt-logo.png b/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/qt-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d609c1e1e5b46d571cc46378cf7ae74b250aa82b GIT binary patch literal 15518 zcmeI3eNDl)3V!MHsK5a=b`HaB8$q1Ch=XAJuqt7h$ z`x-$kHj`3`Um_HnrHSHzk{nxxB$@Lt60KY(vn$mq$#R2SsWqtdnx9Kl3Z;%zXh@|& zrc@ijTceN!Us6i~h)f>3z?f-W85|D$XOKoX)73ypYL+XBKrpKD*4#keLk6m3Zt7kS~sQ3A~U}3Z@i9Gz+7YQpP1j zwW94IA9snz;Rj9INyfoAK?)BjD5K8BUBn3-U&O@#80wCRQD6&Vun>DJyt3kC=Gi3{< z&a`DbY$-#p^l(o9K6g_do)Nc?Svs|ULI*>z82lU1$j+Q<@Oo6SuV+ST_rK#RE2r z*)Y9zs>8v~a$!Qt1CBK#WfzZb3r~T?HIe?KZmKPOQGpC`pnxFCn$E6#XQam-!&}6- zBDXudRRdOjRcsTUD-gVthe<31J7Tt{QNVe6YV0BGMU<XB$4Lnm)=3pIq}x?!BEya0F-@W01Y5J8qQqfVg-vT zI9fzAlqLRT1z==>+cd_a(`waP6B*eYnUTTz7)Oqk1&1mxZWT2c$)6M15jAmLtVF0I zm>4Jp=!VK)DS=jSy9VwQ$K*kss5)mxGxL_K{7~?`Bf&~~COamEX zTu4N)0ONvbAY+URi3k>8Trdq}jBz0m!2*m6rh$wxE+isYfN{YzkTJ%EL<9>kE|>-~ z#<-A(U;)Mj(?G@;7ZMRHz_?%<$Qa{7B7y}N7fb^gV_Zl?umIzNX&_^a3yBC8U|cW_ zWQ=hk5y1kC3#NgLF)kz`Sb%ZCG>|dIg+v4kFfNz|GJYVggz&?cj0-$*=>?Bgem~!O z4m_4Av8QI*2%>xmK~%g*5dWP7-#r9Tq9BMHc?4m6ogjX|?R@^sN`i>fW;~mn0&*rN zClebp;dfGFR`RFW)=$@@i0@xN)ASo#Q*L_G`t*zIe|3>s^EsXSW%2rEM_#kb-m-yi z@h~lXQEN$2YbkrlyW#St(yum`w{3l)?T;1zuH15U`_`*FwzcnixqWwK`=4LA_LrSs z@7>k0Z+FN3*E-+c(^<8rtLlxe1N*uTzS;fWTiw-fcOQPI`|!d49DVotvFhu`4_!Zg zq^IU+PtCC#e>-vWWX;XL*W9cH0foPTg(z@a`uc-#vS}_v|OV z7yjAXc($+cd|y*z|L33ef6+AX$-hla+7hwqP!+`l(EF*-IeHa0OnJ~2KqIRS8; z>K|SWz|9jf)3XR-iLCSH=>-)!fb=J6*2HZ6`Nmyq*M79(i7ji-Em`*1kCv^vRrgd* zM)s|_k8Rv8JvTo2W}fc+i_4F6Hg^2uLfZxJPV*bN7uy&2#aC42y}s$S=T~nsZ(DJH zzqNYdJG)*wQ(3p8Vc}ah_HB2UEaJD$InqMRec`~)mU+hy#m_%gJ*eGXwY6-^pIDtb z@6m%#_AIJsK5EfjsF3Y_zxS0xC-48^g!6l<_HWlNGf9r-CjWTd0vG*WT>4+DK3bId zoa80-g8j<(=f2we#EvWT1|Pq@xMS{UMO@Fr)iv{(9RuHLkgcjrE3Vt@9QhsB)3yGC zW;6NQjmMtb`_qY@0~;RAaEzYJ@ughJUDY~%&RQGq*3SEGU;U!5S9H!FY4|Mu8WF!# rX+L3EYOU*da^tnu%HO+}*T? + +#include "renderarea.h" + +RenderArea::RenderArea(QBrush *brush, QWidget *parent) + : QWidget(parent) +{ + currentBrush = brush; +} + +QSize RenderArea::minimumSizeHint() const +{ + return QSize(120, 60); +} + +void RenderArea::paintEvent(QPaintEvent *) +{ + QPainter painter(this); + painter.setPen(Qt::NoPen); + painter.setRenderHint(QPainter::Antialiasing); + + + if(currentBrush->style() == Qt::LinearGradientPattern) { + currentBrush = new QBrush(QLinearGradient(0, 0, width(), 60)); + } else if(currentBrush->style() == Qt::RadialGradientPattern) { + QRadialGradient radial(width() / 2, 30, width() / 2, width() / 2, 30); + radial.setColorAt(0, Qt::white); + radial.setColorAt(1, Qt::black); + currentBrush = new QBrush(radial); + } else if(currentBrush->style() == Qt::ConicalGradientPattern) { + currentBrush = new QBrush(QConicalGradient(width() / 2, 30, 90)); + } + painter.setBrush(*currentBrush); + + QPainterPath path; + path.addRect(0, 0, parentWidget()->width(), 60); + painter.drawPath(path); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/renderarea.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/renderarea.h new file mode 100644 index 0000000..82356e2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/renderarea.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef RENDERAREA_H +#define RENDERAREA_H + +#include + +class RenderArea : public QWidget +{ + Q_OBJECT + +public: + RenderArea(QBrush *brush, QWidget *parent = 0); + QSize minimumSizeHint() const; + +protected: + void paintEvent(QPaintEvent *event); + +private: + QBrush *currentBrush; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/stylewidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/stylewidget.cpp new file mode 100644 index 0000000..92e9e7f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/stylewidget.cpp @@ -0,0 +1,154 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "stylewidget.h" + +StyleWidget::StyleWidget(QWidget *parent) + : QWidget(parent) +{ + solid = new RenderArea(new QBrush(Qt::SolidPattern)); + dense1 = new RenderArea(new QBrush(Qt::Dense1Pattern)); + dense2 = new RenderArea(new QBrush(Qt::Dense2Pattern)); + dense3 = new RenderArea(new QBrush(Qt::Dense3Pattern)); + dense4 = new RenderArea(new QBrush(Qt::Dense4Pattern)); + dense5 = new RenderArea(new QBrush(Qt::Dense5Pattern)); + dense6 = new RenderArea(new QBrush(Qt::Dense6Pattern)); + dense7 = new RenderArea(new QBrush(Qt::Dense7Pattern)); + no = new RenderArea(new QBrush(Qt::NoBrush)); + hor = new RenderArea(new QBrush(Qt::HorPattern)); + ver = new RenderArea(new QBrush(Qt::VerPattern)); + cross = new RenderArea(new QBrush(Qt::CrossPattern)); + bdiag = new RenderArea(new QBrush(Qt::BDiagPattern)); + fdiag = new RenderArea(new QBrush(Qt::FDiagPattern)); + diagCross = new RenderArea(new QBrush(Qt::DiagCrossPattern)); + linear = new RenderArea(new QBrush(QLinearGradient())); + radial = new RenderArea(new QBrush(QRadialGradient())); + conical = new RenderArea(new QBrush(QConicalGradient())); + texture = new RenderArea(new QBrush(QPixmap("qt-logo.png"))); + + solidLabel = new QLabel("Qt::SolidPattern"); + dense1Label = new QLabel("Qt::Dense1Pattern"); + dense2Label = new QLabel("Qt::Dense2Pattern"); + dense3Label = new QLabel("Qt::Dense3Pattern"); + dense4Label = new QLabel("Qt::Dense4Pattern"); + dense5Label = new QLabel("Qt::Dense5Pattern"); + dense6Label = new QLabel("Qt::Dense6Pattern"); + dense7Label = new QLabel("Qt::Dense7Pattern"); + noLabel = new QLabel("Qt::NoPattern"); + horLabel = new QLabel("Qt::HorPattern"); + verLabel = new QLabel("Qt::VerPattern"); + crossLabel = new QLabel("Qt::CrossPattern"); + bdiagLabel = new QLabel("Qt::BDiagPattern"); + fdiagLabel = new QLabel("Qt::FDiagPattern"); + diagCrossLabel = new QLabel("Qt::DiagCrossPattern"); + linearLabel = new QLabel("Qt::LinearGradientPattern"); + radialLabel = new QLabel("Qt::RadialGradientPattern"); + conicalLabel = new QLabel("Qt::ConicalGradientPattern"); + textureLabel = new QLabel("Qt::TexturePattern"); + + QGridLayout *layout = new QGridLayout; + layout->addWidget(solid, 0, 0); + layout->addWidget(dense1, 0, 1); + layout->addWidget(dense2, 0, 2); + layout->addWidget(solidLabel, 1, 0); + layout->addWidget(dense1Label, 1, 1); + layout->addWidget(dense2Label, 1, 2); + + layout->addWidget(dense3, 2, 0 ); + layout->addWidget(dense4, 2, 1); + layout->addWidget(dense5, 2, 2); + layout->addWidget(dense3Label, 3, 0); + layout->addWidget(dense4Label, 3, 1); + layout->addWidget(dense5Label, 3, 2); + + layout->addWidget(dense6, 4, 0); + layout->addWidget(dense7, 4, 1); + layout->addWidget(no, 4, 2); + layout->addWidget(dense6Label, 5, 0); + layout->addWidget(dense7Label, 5, 1); + layout->addWidget(noLabel, 5, 2); + + layout->addWidget(hor, 6, 0); + layout->addWidget(ver, 6, 1); + layout->addWidget(cross, 6, 2); + layout->addWidget(horLabel, 7, 0); + layout->addWidget(verLabel, 7, 1); + layout->addWidget(crossLabel, 7, 2); + + layout->addWidget(bdiag, 8, 0); + layout->addWidget(fdiag, 8, 1); + layout->addWidget(diagCross, 8, 2); + layout->addWidget(bdiagLabel, 9, 0); + layout->addWidget(fdiagLabel, 9, 1); + layout->addWidget(diagCrossLabel, 9, 2); + + layout->addWidget(linear, 10, 0); + layout->addWidget(radial, 10, 1); + layout->addWidget(conical, 10, 2); + layout->addWidget(linearLabel, 11, 0); + layout->addWidget(radialLabel, 11, 1); + layout->addWidget(conicalLabel, 11, 2); + + layout->addWidget(texture, 12, 0, 1, 3); + layout->addWidget(textureLabel, 13, 0, 1, 3); + + setLayout(layout); + + QPalette newPalette = palette(); + newPalette.setColor(QPalette::Window, Qt::white); + setPalette(newPalette); + + setWindowTitle(tr("Brush Styles")); + resize(430, 605); +} + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/stylewidget.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/stylewidget.h new file mode 100644 index 0000000..57223cb --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/brushstyles/stylewidget.h @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef STYLEWIDGET_H +#define STYLEWIDGET_H + +#include +#include +#include "renderarea.h" + +class QLabel; + +class StyleWidget : public QWidget +{ + Q_OBJECT + +public: + StyleWidget(QWidget *parent = 0); + +private: + RenderArea *solid; + RenderArea *dense1; + RenderArea *dense2; + RenderArea *dense3; + RenderArea *dense4; + RenderArea *dense5; + RenderArea *dense6; + RenderArea *dense7; + RenderArea *no; + RenderArea *hor; + RenderArea *ver; + RenderArea *cross; + RenderArea *bdiag; + RenderArea *fdiag; + RenderArea *diagCross; + RenderArea *linear; + RenderArea *radial; + RenderArea *conical; + RenderArea *texture; + + QLabel *solidLabel; + QLabel *dense1Label; + QLabel *dense2Label; + QLabel *dense3Label; + QLabel *dense4Label; + QLabel *dense5Label; + QLabel *dense6Label; + QLabel *dense7Label; + QLabel *noLabel; + QLabel *horLabel; + QLabel *verLabel; + QLabel *crossLabel; + QLabel *bdiagLabel; + QLabel *fdiagLabel; + QLabel *diagCrossLabel; + QLabel *linearLabel; + QLabel *radialLabel; + QLabel *conicalLabel; + QLabel *textureLabel; +}; +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/buffer/buffer.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/buffer/buffer.cpp new file mode 100644 index 0000000..8034fa6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/buffer/buffer.cpp @@ -0,0 +1,133 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +static void main_snippet() +{ +//! [0] + buffer = QBuffer() + + buffer.open(QBuffer.ReadWrite) + buffer.write("Qt rocks!") + buffer.seek(0) + ch = buffer.getChar() # ch == 'Q' + ch = buffer.getChar() # ch == 't' + ch = buffer.getChar() # ch == ' ' + ch = buffer.getChar() # ch == 'r' +//! [0] +} + +static void write_datastream_snippets() +{ +//! [1] + byteArray = QByteArray() + buffer = QBuffer(byteArray) + buffer.open(QIODevice.WriteOnly) + + out = QDataStream(buffer) + out << QApplication.palette() +//! [1] +} + +static void read_datastream_snippets() +{ + QByteArray byteArray; + +//! [2] + palette = QPalette() + buffer = QBuffer(byteArray) + buffer.open(QIODevice.ReadOnly) + + in = QDataStream(buffer) + in >> palette +//! [2] +} + +static void bytearray_ptr_ctor_snippet() +{ +//! [3] + byteArray = QByteArray("abc") + buffer = QBuffer(byteArray) + buffer.open(QIODevice.WriteOnly) + buffer.seek(3) + buffer.write("def") + buffer.close() + # byteArray == "abcdef" +//! [3] +} + +static void setBuffer_snippet() +{ +//! [4] + byteArray = QByteArray("abc") + buffer = QBuffer() + buffer.setBuffer(byteArray) + buffer.open(QIODevice.WriteOnly) + buffer.seek(3) + buffer.write("def") + buffer.close() + # byteArray == "abcdef" +//! [4] +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + main_snippet(); + bytearray_ptr_ctor_snippet(); + write_datastream_snippets(); + read_datastream_snippets(); + setBuffer_snippet(); + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/clipboard/clipwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/clipboard/clipwindow.cpp new file mode 100644 index 0000000..726ceb8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/clipboard/clipwindow.cpp @@ -0,0 +1,106 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +form PySide2.QtGui import * + + +def __init__(self, parent): + QMainWindow.__init__(self, parent) + clipboard = QApplication.clipboard() + + centralWidget = QWidget(self) + currentItem = QWidget(centralWidget) + mimeTypeLabel = QLabel(tr("MIME types:"), currentItem) + mimeTypeCombo = QComboBox(currentItem) + dataLabel = QLabel(tr("Data:"), currentItem) + dataInfoLabel = QLabel("", currentItem) + + previousItems = QListWidget(centralWidget) + +//! [0] + connect(clipboard, SIGNAL("dataChanged()"), self, SLOT("updateClipboard()")) +//! [0] + connect(mimeTypeCombo, SIGNAL("activated(const QString &)"), + self, SLOT("updateData(const QString &))") + + currentLayout = QVBoxLayout(currentItem) + currentLayout.addWidget(mimeTypeLabel) + currentLayout.addWidget(mimeTypeCombo) + currentLayout.addWidget(dataLabel) + currentLayout.addWidget(dataInfoLabel) + currentLayout.addStretch(1) + + mainLayout = QHBoxLayout(centralWidget) + mainLayout.addWidget(currentItem, 1) + mainLayout.addWidget(previousItems) + + setCentralWidget(centralWidget) + setWindowTitle(tr("Clipboard")) + +//! [1] +def updateClipboard(self): + formats = clipboard.mimeData().formats() + data = clipboard.mimeData().data(format) +//! [1] + + mimeTypeCombo.clear() + mimeTypeCombo.insertStringList(formats) + + size = clipboard.mimeData().data(formats[0]).size() + Item = QListWidgetItem(previousItems) + Item.setText(tr("%1 (%2 bytes)").arg(formats[0]).arg(size)) + + updateData(formats[0]) +//! [2] +//! [2] + +def updateData(self, format) + data = clipboard.mimeData().data(format) + dataInfoLabel.setText(tr("%1 bytes").arg(data.size())) diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/clipboard/clipwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/clipboard/clipwindow.h new file mode 100644 index 0000000..a06b59b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/clipboard/clipwindow.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CLIPWINDOW_H +#define CLIPWINDOW_H + +#include + +class QClipboard; +class QComboBox; +class QLabel; +class QListWidget; +class QMimeData; +class QWidget; + +class ClipWindow : public QMainWindow +{ + Q_OBJECT + +public: + ClipWindow(QWidget *parent = 0); + +public slots: + void updateClipboard(); + void updateData(const QString &format); + +private: + int currentItem; + QClipboard *clipboard; + QComboBox *mimeTypeCombo; + QLabel *dataInfoLabel; + QListWidget *previousItems; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/clipboard/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/clipboard/main.cpp new file mode 100644 index 0000000..f7eea6c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/clipboard/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "clipwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + ClipWindow *window = new ClipWindow; + window->resize(640, 480); + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qnamespace.qdoc b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qnamespace.qdoc new file mode 100644 index 0000000..b63810f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qnamespace.qdoc @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QObject::connect: Cannot queue arguments of type 'MyType' +//! [0] + + +//! [1] +# An important event +ImportantEventPriority = Qt.HighEventPriority +# A more important event +MoreImportantEventPriority = ImportantEventPriority + 1 +# A critical event +CriticalEventPriority = 100 * MoreImportantEventPriority +# Not that important +StatusEventPriority = Qt.LowEventPriority +# These are less important than Status events +IdleProcessingDoneEventPriority = StatusEventPriority - 1 +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtcore.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtcore.cpp new file mode 100644 index 0000000..4696bd3 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtcore.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +import PySide2.QtCore +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtnetwork.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtnetwork.cpp new file mode 100644 index 0000000..84e7e91 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtnetwork.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [1] +import PySide2.QtNetwork +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtopengl.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtopengl.cpp new file mode 100644 index 0000000..63c5665 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtopengl.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +import PySide2.QtOpenGL +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtprintsupport.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtprintsupport.cpp new file mode 100644 index 0000000..fb55416 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtprintsupport.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 20188888888 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [1] +import PySide2.QtPrintSupport +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtqml.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtqml.cpp new file mode 100644 index 0000000..3eeb024 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtqml.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +import PySide2.QtQml +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtquick.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtquick.cpp new file mode 100644 index 0000000..bf55f0c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtquick.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +import PySide2.QtQuick +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtsql.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtsql.cpp new file mode 100644 index 0000000..31849e7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtsql.cpp @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//! [0] +import PySide2.QtSql +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qttest.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qttest.cpp new file mode 100644 index 0000000..34dd7bb --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qttest.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +import PySide2.QtTest +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtwidgets.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtwidgets.cpp new file mode 100644 index 0000000..a0deee9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtwidgets.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [1] +import PySide2.QtWidgets +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtxml.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtxml.cpp new file mode 100644 index 0000000..077be43 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/doc_src_qtxml.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +import PySide2.QtXml +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.gui.text.qtextdocumentwriter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.gui.text.qtextdocumentwriter.cpp new file mode 100644 index 0000000..bfe7b30 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.gui.text.qtextdocumentwriter.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + writer = QTextDocumentWriter() + writer.setFormat("odf") # same as writer.setFormat("ODF"); +//! [0] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.qdbus.qdbuspendingcall.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.qdbus.qdbuspendingcall.cpp new file mode 100644 index 0000000..549d7a6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.qdbus.qdbuspendingcall.cpp @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +{ +//! [0] + QDBusPendingCall async = iface->asyncCall("RemoteMethod", value1, value2); + QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(async, this); + + QObject::connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), + this, SLOT(callFinishedSlot(QDBusPendingCallWatcher*))); +//! [0] + +} + +//! [1] +void MyClass::callFinishedSlot(QDBusPendingCallWatcher *call) +{ + QDBusPendingReply reply = *call; + if (reply.isError()) { + showError(); + } else { + QString text = reply.argumentAt<0>(); + QByteArray data = reply.argumentAt<1>(); + showReply(text, data); + } +} +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.qdbus.qdbuspendingreply.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.qdbus.qdbuspendingreply.cpp new file mode 100644 index 0000000..5029d3a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.qdbus.qdbuspendingreply.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +{ +//! [0] + QDBusPendingReply reply = interface->asyncCall("RemoteMethod"); + reply.waitForFinished(); + if (reply.isError()) + // call failed. Show an error condition. + showError(reply.error()); + else + // use the returned value + useValue(reply.value()); +//! [0] + +//! [2] + QDBusPendingReply reply = interface->asyncCall("RemoteMethod"); + reply.waitForFinished(); + if (!reply.isError()) { + if (reply.argumentAt<0>()) + showSuccess(reply.argumentAt<1>()); + else + showFailure(reply.argumentAt<1>()); + } +//! [2] +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.scripttools.qscriptenginedebugger.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.scripttools.qscriptenginedebugger.cpp new file mode 100644 index 0000000..53c4a9e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src.scripttools.qscriptenginedebugger.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + engine = QScriptEngine() + debugger = QScriptEngineDebugger() + debugger.attachTo(engine) +//! [0] + +//! [1] + engine.evaluate("debugger") +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_codecs_qtextcodec.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_codecs_qtextcodec.cpp new file mode 100644 index 0000000..7cbfc4e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_codecs_qtextcodec.cpp @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +encodedString = QByteArray("...") +codec = QTextCodec.codecForName("KOI8-R") +string = codec.toUnicode(encodedString) +//! [0] + + +//! [1] +string = u"..." +codec = QTextCodec.codecForName("KOI8-R") +encodedString = codec.fromUnicode(string) +//! [1] + + +//! [2] +codec = QTextCodec.codecForName("Shift-JIS") +decoder = codec.makeDecoder() + +string = u'' +while new_data_available(): + chunk = get_new_data() + string += decoder.toUnicode(chunk) + +//! [2] + + +//! [3] +def main(): + app = QApplication([]) + QTextCodec.setCodecForTr(QTextCodec.codecForName("eucKR")) + ... +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_codecs_qtextcodecplugin.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_codecs_qtextcodecplugin.cpp new file mode 100644 index 0000000..3538b65 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_codecs_qtextcodecplugin.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + +def names(self): + return list = ["IBM01140", "hp15-tw"] + +def createForName(name): + if (name == "IBM01140"): + return Ibm01140Codec() + else if (name == "hp15-tw"): + return Hp15TwCodec() + return None +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qfuture.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qfuture.cpp new file mode 100644 index 0000000..7dcc705 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qfuture.cpp @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QFuture future = ...; + +QFuture::const_iterator i; +for (i = future.constBegin(); i != future.constEnd(); ++i) + cout << *i << endl; +//! [0] + + +//! [1] +QFuture future; +... +QFutureIterator i(future); +while (i.hasNext()) + qDebug() << i.next(); +//! [1] + + +//! [2] +QFutureIterator i(future); +i.toBack(); +while (i.hasPrevious()) + qDebug() << i.previous(); +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qfuturesynchronizer.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qfuturesynchronizer.cpp new file mode 100644 index 0000000..014c5b1 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qfuturesynchronizer.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +void someFunction() +{ + QFutureSynchronizer synchronizer; + + ... + + synchronizer.addFuture(QtConcurrent::run(anotherFunction)); + synchronizer.addFuture(QtConcurrent::map(list, mapFunction)); + + return; // QFutureSynchronizer waits for all futures to finish +} +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qfuturewatcher.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qfuturewatcher.cpp new file mode 100644 index 0000000..9c536b8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qfuturewatcher.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +// Instantiate the objects and connect to the finished signal. +MyClass myObject; +QFutureWatcher watcher; +connect(&watcher, SIGNAL(finished()), &myObject, SLOT(handleFinished())); + +// Start the computation. +QFuture future = QtConcurrent::run(...); +watcher.setFuture(future); +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentexception.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentexception.cpp new file mode 100644 index 0000000..da4254a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentexception.cpp @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + +class MyException : public QtConcurrent::Exception +{ +public: + void raise() const { throw *this; } + Exception *clone() const { return new MyException(*this); } +}; + +//! [0] + + +//! [1] + +try { + QtConcurrent::blockingMap(list, throwFunction); // throwFunction throws MyException +} catch (MyException &e) { + // handle exception +} + +//! [1] + + +//! [2] + +void MyException::raise() const { throw *this; } + +//! [2] + + +//! [3] + +MyException *MyException::clone() const { return new MyException(*this); } + +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp new file mode 100644 index 0000000..a0f6778 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp @@ -0,0 +1,181 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +bool function(const T &t); +//! [0] + + +//! [1] +bool allLowerCase(const QString &string) +{ + return string.lowered() == string; +} + +QStringList strings = ...; +QFuture lowerCaseStrings = QtConcurrent::filtered(strings, allLowerCase); +//! [1] + + +//! [2] +QStringList strings = ...; +QFuture future = QtConcurrent::filter(strings, allLowerCase); +//! [2] + + +//! [3] +V function(T &result, const U &intermediate) +//! [3] + + +//! [4] +void addToDictionary(QSet &dictionary, const QString &string) +{ + dictionary.insert(string); +} + +QStringList strings = ...; +QFuture > dictionary = QtConcurrent::filteredReduced(strings, allLowerCase, addToDictionary); +//! [4] + + +//! [5] +QStringList strings = ...; +QFuture lowerCaseStrings = QtConcurrent::filtered(strings.constBegin(), strings.constEnd(), allLowerCase); + +// filter in-place only works on non-const iterators +QFuture future = QtConcurrent::filter(strings.begin(), strings.end(), allLowerCase); + +QFuture > dictionary = QtConcurrent::filteredReduced(strings.constBegin(), strings.constEnd(), allLowerCase, addToDictionary); +//! [5] + + +//! [6] +QStringList strings = ...; + +// each call blocks until the entire operation is finished +QStringList lowerCaseStrings = QtConcurrent::blockingFiltered(strings, allLowerCase); + + +QtConcurrent::blockingFilter(strings, allLowerCase); + +QSet dictionary = QtConcurrent::blockingFilteredReduced(strings, allLowerCase, addToDictionary); +//! [6] + + +//! [7] +// keep only images with an alpha channel +QList images = ...; +QFuture alphaImages = QtConcurrent::filter(strings, &QImage::hasAlphaChannel); + +// keep only gray scale images +QList images = ...; +QFuture grayscaleImages = QtConcurrent::filtered(images, &QImage::isGrayscale); + +// create a set of all printable characters +QList characters = ...; +QFuture > set = QtConcurrent::filteredReduced(characters, &QChar::isPrint, &QSet::insert); +//! [7] + + +//! [8] +// can mix normal functions and member functions with QtConcurrent::filteredReduced() + +// create a dictionary of all lower cased strings +extern bool allLowerCase(const QString &string); +QStringList strings = ...; +QFuture > averageWordLength = QtConcurrent::filteredReduced(strings, allLowerCase, QSet::insert); + +// create a collage of all gray scale images +extern void addToCollage(QImage &collage, const QImage &grayscaleImage); +QList images = ...; +QFuture collage = QtConcurrent::filteredReduced(images, &QImage::isGrayscale, addToCollage); +//! [8] + + +//! [9] +bool QString::contains(const QRegExp ®exp) const; +//! [9] + + +//! [10] +boost::bind(&QString::contains, QRegExp("^\\S+$")); // matches strings without whitespace +//! [10] + + +//! [11] +bool contains(const QString &string) +//! [11] + + +//! [12] +QStringList strings = ...; +boost::bind(static_cast( &QString::contains ), QRegExp("..." )); +//! [12] + +//! [13] +struct StartsWith +{ + StartsWith(const QString &string) + : m_string(string) { } + + typedef bool result_type; + + bool operator()(const QString &testString) + { + return testString.startsWith(m_string); + } + + QString m_string; +}; + +QList strings = ...; +QFuture fooString = QtConcurrent::filtered(images, StartsWith(QLatin1String("Foo"))); +//! [13] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp new file mode 100644 index 0000000..e61b736 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp @@ -0,0 +1,194 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +U function(const T &t); +//! [0] + + +//! [1] +QImage scaled(const QImage &image) +{ + return image.scaled(100, 100); +} + +QList images = ...; +QFuture thumbnails = QtConcurrent::mapped(images, scaled); +//! [1] + + +//! [2] +U function(T &t); +//! [2] + + +//! [3] +void scale(QImage &image) +{ + image = image.scaled(100, 100); +} + +QList images = ...; +QFuture future = QtConcurrent::map(images, scale); +//! [3] + + +//! [4] +V function(T &result, const U &intermediate) +//! [4] + + +//! [5] +void addToCollage(QImage &collage, const QImage &thumbnail) +{ + QPainter p(&collage); + static QPoint offset = QPoint(0, 0); + p.drawImage(offset, thumbnail); + offset += ...; +} + +QList images = ...; +QFuture collage = QtConcurrent::mappedReduced(images, scaled, addToCollage); +//! [5] + + +//! [6] +QList images = ...; + +QFuture thumbnails = QtConcurrent::mapped(images.constBegin(), images.constEnd(), scaled); + +// map in-place only works on non-const iterators +QFuture future = QtConcurrent::map(images.begin(), images.end(), scale); + +QFuture collage = QtConcurrent::mappedReduced(images.constBegin(), images.constEnd(), scaled, addToCollage); +//! [6] + + +//! [7] +QList images = ...; + +// each call blocks until the entire operation is finished +QList future = QtConcurrent::blockingMapped(images, scaled); + +QtConcurrent::blockingMap(images, scale); + +QImage collage = QtConcurrent::blockingMappedReduced(images, scaled, addToCollage); +//! [7] + + +//! [8] +// squeeze all strings in a QStringList +QStringList strings = ...; +QFuture squeezedStrings = QtConcurrent::map(strings, &QString::squeeze); + +// swap the rgb values of all pixels on a list of images +QList images = ...; +QFuture bgrImages = QtConcurrent::mapped(images, &QImage::rgbSwapped); + +// create a set of the lengths of all strings in a list +QStringList strings = ...; +QFuture > wordLengths = QtConcurrent::mappedReduced(string, &QString::length, &QSet::insert); +//! [8] + + +//! [9] +// can mix normal functions and member functions with QtConcurrent::mappedReduced() + +// compute the average length of a list of strings +extern void computeAverage(int &average, int length); +QStringList strings = ...; +QFuture averageWordLength = QtConcurrent::mappedReduced(strings, &QString::length, computeAverage); + +// create a set of the color distribution of all images in a list +extern int colorDistribution(const QImage &string); +QList images = ...; +QFuture > totalColorDistribution = QtConcurrent::mappedReduced(images, colorDistribution, QSet::insert); +//! [9] + + +//! [10] +QImage QImage::scaledToWidth(int width, Qt::TransformationMode) const; +//! [10] + + +//! [11] +boost::bind(&QImage::scaledToWidth, 100, Qt::SmoothTransformation) +//! [11] + + +//! [12] +QImage scaledToWith(const QImage &image) +//! [12] + + +//! [13] +QList images = ...; +QFuture thumbnails = QtConcurrent::mapped(images, boost::bind(&QImage::scaledToWidth, 100 Qt::SmoothTransformation)); +//! [13] + +//! [14] +struct Scaled +{ + Scaled(int size) + : m_size(size) { } + + typedef QImage result_type; + + QImage operator()(const QImage &image) + { + return image.scaled(m_size, m_size); + } + + int m_size; +}; + +QList images = ...; +QFuture thumbnails = QtConcurrent::mapped(images, Scaled(100)); +//! [14] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp new file mode 100644 index 0000000..3c55ef7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp @@ -0,0 +1,110 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +extern void aFunction(); +QFuture future = QtConcurrent::run(aFunction); +//! [0] + + +//! [1] +extern void aFunctionWithArguments(int arg1, double arg2, const QString &string); + +int integer = ...; +double floatingPoint = ...; +QString string = ...; + +QFuture future = QtConcurrent::run(aFunctionWithArguments, integer, floatingPoint, string); +//! [1] + + +//! [2] +extern QString functionReturningAString(); +QFuture future = QtConcurrent::run(functionReturningAString); +... +QString result = future.result(); +//! [2] + + +//! [3] +extern QString someFunction(const QByteArray &input); + +QByteArray bytearray = ...; + +QFuture future = QtConcurrent::run(someFunction, bytearray); +... +QString result = future.result(); +//! [3] + + +//! [4] +// call 'QStringList QString::split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const' in a separate thread +QString string = ...; +QFuture future = QtConcurrent::run(string, &QString::split, QString(", "), QString::KeepEmptyParts, Qt::CaseSensitive); +... +QStringList result = future.result(); +//! [4] + + +//! [5] +// call 'void QImage::invertPixels(InvertMode mode)' in a separate thread +QImage image = ...; +QFuture future = QtConcurrent::run(image, &QImage::invertPixels, QImage::InvertRgba); +... +future.waitForFinished(); +// At this point, the pixels in 'image' have been inverted +//! [5] + + +//! [6] +void someFunction(int arg1, double arg2); +QFuture future = QtConcurrent::run(boost::bind(someFunction, 1, 2.0)); +... +//! [6] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qthreadpool.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qthreadpool.cpp new file mode 100644 index 0000000..f552f34 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_concurrent_qthreadpool.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class HelloWorldTask(QRunnable): + def run(self): + print "Hello world from thread", QThread.currentThread() + +hello = HelloWorldTask() +# QThreadPool takes ownership and deletes 'hello' automatically +QThreadPool.globalInstance().start(hello) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_global_qglobal.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_global_qglobal.cpp new file mode 100644 index 0000000..c172beb --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_global_qglobal.cpp @@ -0,0 +1,514 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +label.setAlignment(Qt.AlignLeft | Qt.AlignTop) +//! [0] + + +//! [1] +class MyClass +{ +public: + enum Option { + NoOptions = 0x0, + ShowTabs = 0x1, + ShowAll = 0x2, + SqueezeBlank = 0x4 + }; + Q_DECLARE_FLAGS(Options, Option) + ... +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(MyClass::Options) +//! [1] + +//! [meta-object flags] +Q_FLAGS(Options) +//! [meta-object flags] + +//! [2] +typedef QFlags Flags; +//! [2] + + +//! [3] +int myValue = 10; +int minValue = 2; +int maxValue = 6; + +int boundedValue = qBound(minValue, myValue, maxValue); +// boundedValue == 6 +//! [3] + + +//! [4] +if (!driver()->isOpen() || driver()->isOpenError()) { + qWarning("QSqlQuery::exec: database not open"); + return false; +} +//! [4] + + +//! [5] +qint64 value = Q_INT64_C(932838457459459); +//! [5] + + +//! [6] +quint64 value = Q_UINT64_C(932838457459459); +//! [6] + + +//! [7] +void myMsgHandler(QtMsgType, const char *); +//! [7] + + +//! [8] +qint64 value = Q_INT64_C(932838457459459); +//! [8] + + +//! [9] +quint64 value = Q_UINT64_C(932838457459459); +//! [9] + + +//! [10] +myValue = -4 +absoluteValue = qAbs(myValue) +// absoluteValue == 4 +//! [10] + + +//! [11] +valueA = 2.3 +valueB = 2.7 + +roundedValueA = qRound(valueA) +// roundedValueA = 2 +roundedValueB = qRound(valueB) +// roundedValueB = 3 +//! [11] + + +//! [12] +valueA = 42949672960.3 +valueB = 42949672960.7 + +roundedValueA = qRound(valueA) +// roundedValueA = 42949672960 +roundedValueB = qRound(valueB) +// roundedValueB = 42949672961 +//! [12] + + +//! [13] +myValue = 6 +yourValue = 4 + +minValue = qMin(myValue, yourValue) +// minValue == yourValue +//! [13] + + +//! [14] +myValue = 6 +yourValue = 4 + +maxValue = qMax(myValue, yourValue) +// maxValue == myValue +//! [14] + + +//! [15] +myValue = 10 +minValue = 2 +maxValue = 6 + +boundedValue = qBound(minValue, myValue, maxValue) +// boundedValue == 6 +//! [15] + + +//! [16] +#if QT_VERSION >= 0x040100 + QIcon icon = style()->standardIcon(QStyle::SP_TrashIcon); +#else + QPixmap pixmap = style()->standardPixmap(QStyle::SP_TrashIcon); + QIcon icon(pixmap); +#endif +//! [16] + + +//! [17] +// File: div.cpp + +#include + +int divide(int a, int b) +{ + Q_ASSERT(b != 0); + return a / b; +} +//! [17] + + +//! [18] +ASSERT: "b == 0" in file div.cpp, line 7 +//! [18] + + +//! [19] +// File: div.cpp + +#include + +int divide(int a, int b) +{ + Q_ASSERT_X(b != 0, "divide", "division by zero"); + return a / b; +} +//! [19] + + +//! [20] +ASSERT failure in divide: "division by zero", file div.cpp, line 7 +//! [20] + + +//! [21] +int *a; + +Q_CHECK_PTR(a = new int[80]); // WRONG! + +a = new (nothrow) int[80]; // Right +Q_CHECK_PTR(a); +//! [21] + + +//! [22] +template +const TInputType &myMin(const TInputType &value1, const TInputType &value2) +{ + qDebug() << Q_FUNC_INFO << "was called with value1:" << value1 << "value2:" << value2; + + if(value1 < value2) + return value1; + else + return value2; +} +//! [22] + + +//! [23] +#include +#include +#include + +void myMessageOutput(QtMsgType type, const char *msg) +{ + switch (type) { + case QtDebugMsg: + fprintf(stderr, "Debug: %s\n", msg); + break; + case QtWarningMsg: + fprintf(stderr, "Warning: %s\n", msg); + break; + case QtCriticalMsg: + fprintf(stderr, "Critical: %s\n", msg); + break; + case QtFatalMsg: + fprintf(stderr, "Fatal: %s\n", msg); + abort(); + } +} + +int main(int argc, char **argv) +{ + qInstallMsgHandler(myMessageOutput); + QApplication app(argc, argv); + ... + return app.exec(); +} +//! [23] + + +//! [24] +qDebug("Items in list: %d", myList.size()); +//! [24] + + +//! [25] +qDebug() << "Brush:" << myQBrush << "Other value:" << i; +//! [25] + + +//! [26] +void f(int c) +{ + if (c > 200) + qWarning("f: bad argument, c == %d", c); +} +//! [26] + + +//! [27] +qWarning() << "Brush:" << myQBrush << "Other value:" +<< i; +//! [27] + + +//! [28] +void load(const QString &fileName) +{ + QFile file(fileName); + if (!file.exists()) + qCritical("File '%s' does not exist!", qPrintable(fileName)); +} +//! [28] + + +//! [29] +qCritical() << "Brush:" << myQBrush << "Other +value:" << i; +//! [29] + + +//! [30] +int divide(int a, int b) +{ + if (b == 0) // program error + qFatal("divide: cannot divide by zero"); + return a / b; +} +//! [30] + + +//! [31] +forever { + ... +} +//! [31] + + +//! [32] +CONFIG += no_keywords +//! [32] + + +//! [33] +CONFIG += no_keywords +//! [33] + + +//! [34] +QString FriendlyConversation::greeting(int type) +{ +static const char *greeting_strings[] = { + QT_TR_NOOP("Hello"), + QT_TR_NOOP("Goodbye") +}; +return tr(greeting_strings[type]); +} +//! [34] + + +//! [35] +static const char *greeting_strings[] = { + QT_TRANSLATE_NOOP("FriendlyConversation", "Hello"), + QT_TRANSLATE_NOOP("FriendlyConversation", "Goodbye") +}; + +QString FriendlyConversation::greeting(int type) +{ + return tr(greeting_strings[type]); +} + +QString global_greeting(int type) +{ + return qApp->translate("FriendlyConversation", + greeting_strings[type]); +} +//! [35] + + +//! [36] + +static { const char *source; const char *comment; } greeting_strings[] = +{ + QT_TRANSLATE_NOOP3("FriendlyConversation", "Hello", + "A really friendly hello"), + QT_TRANSLATE_NOOP3("FriendlyConversation", "Goodbye", + "A really friendly goodbye") +}; + +QString FriendlyConversation::greeting(int type) +{ + return tr(greeting_strings[type].source, + greeting_strings[type].comment); +} + +QString global_greeting(int type) +{ + return qApp->translate("FriendlyConversation", + greeting_strings[type].source, + greeting_strings[type].comment); +} +//! [36] + + +//! [37] +qWarning("%s: %s", qPrintable(key), qPrintable(value)); +//! [37] + + +//! [38] +struct Point2D +{ + int x; + int y; +}; + +Q_DECLARE_TYPEINFO(Point2D, Q_PRIMITIVE_TYPE); +//! [38] + + +//! [39] +class Point2D +{ +public: + Point2D() { data = new int[2]; } + Point2D(const Point2D &other) { ... } + ~Point2D() { delete[] data; } + + Point2D &operator=(const Point2D &other) { ... } + + int x() const { return data[0]; } + int y() const { return data[1]; } + +private: + int *data; +}; + +Q_DECLARE_TYPEINFO(Point2D, Q_MOVABLE_TYPE); +//! [39] + + +//! [40] +#if Q_BYTE_ORDER == Q_BIG_ENDIAN +... +#endif + +or + +#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN +... +#endif + +//! [40] + + +//! [41] + +#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN +... +#endif + +//! [41] + + +//! [42] +#if Q_BYTE_ORDER == Q_BIG_ENDIAN +... +#endif + +//! [42] + +//! [begin namespace macro] +namespace QT_NAMESPACE { +//! [begin namespace macro] + +//! [end namespace macro] +} +//! [end namespace macro] + +//! [43] +class MyClass : public QObject +{ + + private: + Q_DISABLE_COPY(MyClass) +}; + +//! [43] + +//! [44] +class MyClass : public QObject +{ + + private: + MyClass(const MyClass &); + MyClass &operator=(const MyClass &); +}; +//! [44] + +//! [45] + w = QWidget() +//! [45] + +//! [46] + // Instead of comparing with 0.0 + qFuzzyCompare(0.0,1.0e-200); // This will return false + // Compare adding 1 to both values will fix the problem + qFuzzyCompare(1 + 0.0, 1 + 1.0e-200); // This will return true +//! [46] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qabstractfileengine.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qabstractfileengine.cpp new file mode 100644 index 0000000..878259f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qabstractfileengine.cpp @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class ZipEngineHandler(QAbstractFileEngineHandler): + def create(self, fileName): + # ZipEngineHandler returns a ZipEngine for all .zip files + if fileName.toLower().endsWith(".zip"): + return ZipEngine(fileName) + else + return None + +def main(): + app = QApplication(sys.argv) + + engine = ZipEngineHandler() + + window = MainWindow() + window.show() + + return app.exec() +//! [0] + + +//! [1] +def create(fileName): + # ZipEngineHandler returns a ZipEngine for all .zip files + if fileName.lower().endswith(".zip"): + return ZipEngine(fileName) + else + return None +//! [1] + + +//! [2] +# @arg filters QDir.Filters +# @arg filterNames [str, ...] +# @return QAbstractFileEngineIterator +def beginEntryList(filters, filterNames): + return CustomFileEngineIterator(filters, filterNames) +//! [2] + + +//! [3] +class CustomIterator(QAbstractFileEngineIterator): + def __init__(self, nameFilters, filters): + QAbstractFileEngineIterator.__init__(self, nameFilters, filters) + + self.index = 0 + # In a real iterator, these entries are fetched from the + # file system based on the value of path(). + self.entries << "entry1" << "entry2" << "entry3" + + def hasNext(self): + return self.index < self.entries.size() - 1 + + def next(self): + if not self.hasNext(): + return None + index += 1 + return currentFilePath() + + def currentFileName(self): + return self.entries.at(index) +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qdatastream.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qdatastream.cpp new file mode 100644 index 0000000..79e64d4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qdatastream.cpp @@ -0,0 +1,135 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +void wrapInFunction() +{ + +//! [0] +file_ = QFile("file.dat") +file_.open(QIODevice.WriteOnly) +# we will serialize the data into the file +out = QDataStream(file_) +# serialize a string +out.writeQString("the answer is") +# serialize an integer +out.writeInt32(42) +//! [0] + + +//! [1] +file_ = QFile("file.dat") +file_.open(QIODevice.ReadOnly) +# read the data serialized from the file +i = QDataStream(file_) +string = '' +a = 0 +# extract "the answer is" and 42 +string = i.readQString() +a = i.readInt32() +//! [1] + + +//! [2] +stream.setVersion(QDataStream.Qt_4_0) +//! [2] + + +//! [3] +file_ = QFile("file.xxx") +file_.open(QIODevice.WriteOnly) +out = QDataStream(file_) + +# Write a header with a "magic number" and a version +out.writeInt32(0xA0B0C0D0) +out.writeInt32(123) + +out.setVersion(QDataStream.Qt_4_0) + +// Write the data +out << lots_of_interesting_data +//! [3] + + +//! [4] +file_ = QFile("file.xxx") +file_.open(QIODevice.ReadOnly) +i = QDataStream(file_) + +// Read and check the header +magic = i.readInt32() +if magic != 0xA0B0C0D0: + return XXX_BAD_FILE_FORMAT + +// Read the version +version = i.readInt32() +if version < 100: + return XXX_BAD_FILE_TOO_OLD +if version > 123: + return XXX_BAD_FILE_TOO_NEW + +if version <= 110: + in_.setVersion(QDataStream.Qt_3_2) +else: + in_.setVersion(QDataStream.Qt_4_0) + +// Read the data +in_ >> lots_of_interesting_data +if version >= 120: + in_ >> data_new_in_XXX_version_1_2 +in_ >> other_interesting_data +//! [4] + + +//! [5] +out = QDataStream(file_) +out.setVersion(QDataStream.Qt_4_0) +//! [5] + +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qdir.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qdir.cpp new file mode 100644 index 0000000..16f20c2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qdir.cpp @@ -0,0 +1,179 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +void wrapInFunction() +{ + +//! [0] +QDir("/home/user/Documents") +QDir("C:/Documents and Settings") +//! [0] + + +//! [1] +QDir("images/landscape.png") +//! [1] + + +//! [2] +QDir("Documents/Letters/Applications").dirName() # "Applications" +QDir().dirName() # "." +//! [2] + + +//! [3] +directory = QDir("Documents/Letters") +path = directory.filePath("contents.txt") +absolutePath = directory.absoluteFilePath("contents.txt") +//! [3] + + +//! [4] +dir = QDir("example") +if not dir.exists(): + print "Cannot find the example directory" +//! [4] + + +//! [5] +dir = QDir.root() # "/" +if not dir.cd("tmp"): # "/tmp" + print "Cannot find the \"/tmp\" directory" +else: + file = QFile(dir.filePath("ex1.txt")) # "/tmp/ex1.txt" + if !file.open(QIODevice.ReadWrite): + print "Cannot create the file %s" % (file.name()) +//! [5] + + +//! [6] +bin = "/local/bin" # where /local/bin is a symlink to /usr/bin +binDir = QDir(bin) +canonicalBin = binDir.canonicalPath() +# canonicalBin now equals "/usr/bin" + +ls = "/local/bin/ls" # where ls is the executable "ls" +lsDir = QDir(ls) +canonicalLs = lsDir.canonicalPath() +# canonicalLS now equals "/usr/bin/ls". +//! [6] + + +//! [7] +dir = QDir("/home/bob") + +s = dir.relativeFilePath("images/file.jpg") # s is "images/file.jpg" +s = dir.relativeFilePath("/home/mary/file.txt") # s is "../mary/file.txt" +//! [7] + + +//! [8] +QDir.setSearchPaths("icons", [QDir.homePath() + "/images"]) +QDir.setSearchPaths("docs", [":/embeddedDocuments"]) +... +pixmap = QPixmap("icons:undo.png") # will look for undo.png in QDir::homePath() + "/images" +file = QFile("docs:design.odf") # will look in the :/embeddedDocuments resource path +//! [8] + + +//! [9] +dir = QDir("/tmp/root_link") +dir = dir.canonicalPath() +if dir.isRoot(): + print "It is a root link" +//! [9] + + +//! [10] +# The current directory is "/usr/local" +d1 = QDir("/usr/local/bin") +d2 = QDir("bin") +if d1 == d2: + print "They're the same" +//! [10] + + +//! [11] +// The current directory is "/usr/local" +d1 = QDir("/usr/local/bin") +d1.setFilter(QDir.Executable) +d2 = QDir("bin") +if d1 != d2: + print "They differ" +//! [11] + + +//! [12] +C:/Documents and Settings/Username +//! [12] + + +//! [13] +Q_INIT_RESOURCE(myapp); +//! [13] + + +//! [14] +def initMyResource(): + Q_INIT_RESOURCE(myapp) + +class MyNamespace + ... + + def myFunction(self): + initMyResource() +//! [14] + + +//! [15] +Q_CLEANUP_RESOURCE(myapp); +//! [15] + +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qdiriterator.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qdiriterator.cpp new file mode 100644 index 0000000..be68a5d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qdiriterator.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +it = QDirIterator("/etc", QDirIterator.Subdirectories) +while it.hasNext(): + print it.next() + + # /etc/. + # /etc/.. + # /etc/X11 + # /etc/X11/fs + # ... + +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qfile.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qfile.cpp new file mode 100644 index 0000000..1e9d102 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qfile.cpp @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +file = QFile() +QDir.setCurrent("/tmp") +file.setFileName("readme.txt") +QDir.setCurrent("/home") +file.open(QIODevice.ReadOnly) # opens "/home/readme.txt" under Unix +//! [0] + + +//! [1] +def myEncoderFunc(fileName): +//! [1] + + +//! [2] +def myDecoderFunc(localFileName): +//! [2] + + +//! [3] + +def printError(msg): + file = QFile() + file.open(sys.stderr.fileno(), QIODevice.WriteOnly) + file.write(msg, size(msg)) # write to stderr + file.close() +//! [3] + + +//! [4] +CONFIG += console +//! [4] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qfileinfo.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qfileinfo.cpp new file mode 100644 index 0000000..1027525 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qfileinfo.cpp @@ -0,0 +1,148 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![newstuff] + fi = QFileInfo("c:/temp/foo") => fi.absoluteFilePath() => "C:/temp/foo" +//![newstuff] + +//! [0] +info1 = QFileInfo("/home/bob/bin/untabify") +info1.isSymLink() # returns true +info1.absoluteFilePath() # returns "/home/bob/bin/untabify" +info1.size() # returns 56201 +info1.symLinkTarget() # returns "/opt/pretty++/bin/untabify" + +info2 = QFileInfo(info1.symLinkTarget()) +info1.isSymLink() # returns False +info1.absoluteFilePath() # returns "/opt/pretty++/bin/untabify" +info1.size() # returns 56201 + +//! [0] + + +//! [1] +info1 = QFileInfo("C:\\Documents and Settings\\Bob\\untabify.lnk") +info1.isSymLink() # returns True +info1.absoluteFilePath() # returns "C:/Documents and Settings/Bob/untabify.lnk" +info1.size() # returns 743 +info1.symLinkTarget() # returns "C:/Pretty++/untabify" + +info2 = QFileInfo(info1.symLinkTarget()) +info1.isSymLink() # returns False +info1.absoluteFilePath() # returns "C:/Pretty++/untabify" +info1.size() # returns 63942 +//! [1] + + +//! [2] +absolute = "/local/bin" +relative = "local/bin" +absFile = QFileInfo(absolute) +relFile = QFileInfo(relative) + +QDir.setCurrent(QDir.rootPath()) +# absFile and relFile now point to the same file + +QDir.setCurrent("/tmp") +# absFile now points to "/local/bin", +# while relFile points to "/tmp/local/bin" +//! [2] + + +//! [3] +fi = QFileInfo("/tmp/archive.tar.gz") +name = fi.fileName() # name = "archive.tar.gz" +//! [3] + + +//! [4] +fi = QFileInfo("/Applications/Safari.app") +bundle = fi.bundleName() # name = "Safari" +//! [4] + + +//! [5] +fi = QFileInfo("/tmp/archive.tar.gz") +base = fi.baseName() # base = "archive" +//! [5] + + +//! [6] +fi = QFileInfo("/tmp/archive.tar.gz") +base = fi.completeBaseName() # base = "archive.tar" +//! [6] + + +//! [7] +fi = QFileInfo("/tmp/archive.tar.gz") +ext = fi.completeSuffix() # ext = "tar.gz" +//! [7] + + +//! [8] +fi = QFileInfo("/tmp/archive.tar.gz") +ext = fi.suffix(); # ext = "gz" +//! [8] + + +//! [9] +info = QFileInfo(fileName) +if info.isSymLink(): + fileName = info.symLinkTarget() +//! [9] + + +//! [10] +fi = QFileInfo("/tmp/archive.tar.gz") +if fi.permission(QFile.WriteUser | QFile.ReadGroup): + print "I can change the file; my group can read the file" +if fi.permission(QFile.WriteGroup | QFile.WriteOther): + print "The group or others can change the file" +//! [10] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qiodevice.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qiodevice.cpp new file mode 100644 index 0000000..d8f155c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qiodevice.cpp @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +gzip = QProcess() +gzip.start("gzip", ["-c"]) +if not gzip.waitForStarted(): + return False + +gzip.write("uncompressed data") + +compressed = QByteArray() +while gzip.waitForReadyRead(): + compressed += gzip.readAll() +//! [0] + + +//! [1] +def bytesAvailable(self): + return buffer.size() + QIODevice.bytesAvailable() +//! [1] + + +//! [2] +file = QFile("box.txt") +if file.open(QFile.ReadOnly): + buf = file.readLine(1024) + if buf.size(): + # the line is available in buf +//! [2] + + +//! [3] +def canReadLine(self): + return buffer.contains('\n') or QIODevice.canReadLine() +//! [3] + + +//! [4] +def isExeFile(file_): + buf = file_.peek(2) + if buf.size() == 2: + return buf[0] == 'M' and buf[1] == 'Z' + return False +//! [4] + + +//! [5] +def isExeFile(file_): + return file_.peek(2) == "MZ" +//! [5] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qprocess.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qprocess.cpp new file mode 100644 index 0000000..a4b74ae --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qprocess.cpp @@ -0,0 +1,132 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +def wrapInFunction(): + +//! [0] +builder = QProcess() +builder.setProcessChannelMode(QProcess.MergedChannels) +builder.start("make", ["-j2"]) + +import sys +if not builder.waitForFinished(): + sys.stderr.write("Make failed:" + builder.errorString()) +else + sys.stderr.write("Make output:" + builder.readAll()) +//! [0] + + +//! [1] +more = QProcess() +more.start("more") +more.write("Text to display") +more.closeWriteChannel() +#QProcess will emit readyRead() once "more" starts printing +//! [1] + + +//! [2] +command1 | command2 +//! [2] + + +//! [3] +process1 = QProcess() +process2 = QProcess() + +process1.setStandardOutputProcess(process2) + +process1.start("command1") +process2.start("command2") +//! [3] + + +//! [4] +class SandboxProcess(QProcess): + def setupChildProcess(self) + # Drop all privileges in the child process, and enter + # a chroot jail. + os.setgroups(0, 0) + os.chroot("/etc/safe") + os.chdir("/") + os.setgid(safeGid) + os.setuid(safeUid) + os.umask(0) + +//! [4] + + +//! [5] +process = QProcess() +process.start("del /s *.txt") +# same as process.start("del", ["/s", "*.txt"]) +... +//! [5] + + +//! [6] +process = QProcess() +process.start("dir \"My Documents\"") +//! [6] + + +//! [7] +process = QProcess() +process.start("dir \"\"\"My Documents\"\"\"") +//! [7] + + +//! [8] +environment = QProcess.systemEnvironment() +# environment = [PATH=/usr/bin:/usr/local/bin", +# "USER=greg", "HOME=/home/greg"] +//! [8] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qsettings.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qsettings.cpp new file mode 100644 index 0000000..11bb9af --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qsettings.cpp @@ -0,0 +1,327 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +settings = QSettings("MySoft", "Star Runner") +color = QColor(settings.value("DataPump/bgcolor")) +//! [0] + + +//! [1] +settings = QSettings("MySoft", "Star Runner") +color = palette().background().color() +settings.setValue("DataPump/bgcolor", color) +//! [1] + + +//! [2] +settings = QSettings("/home/petra/misc/myapp.ini", + QSettings.IniFormat) +//! [2] + + +//! [3] +settings = QSettings("/Users/petra/misc/myapp.plist", + QSettings.NativeFormat) +//! [3] + + +//! [4] +settings = QSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Office", + QSettings.NativeFormat) +//! [4] + + +//! [5] +settings.setValue("11.0/Outlook/Security/DontTrustInstalledFiles", 0) +//! [5] + + +//! [6] +settings.setValue("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy", "Milkyway") +settings.setValue("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy\\Sun", "OurStar") +settings.value("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy\\Default") # returns "Milkyway" +//! [6] + + +//! [7] + organizationName = "grenoullelogique.fr" if sys.platform.startswith('darwin') else "Grenoulle Logique" + settings = QSettings(organizationName, "Squash") +//! [7] + + +//! [8] +pos = @Point(100 100) +//! [8] + + +//! [9] +windir = C:\Windows +//! [9] + + +//! [10] +settings = QSettings("Moose Tech", "Facturo-Pro") +//! [10] + + +//! [11] +settings = QSettings("Moose Soft", "Facturo-Pro") +//! [11] + + +//! [12] +QCoreApplication.setOrganizationName("Moose Soft") +QCoreApplication.setApplicationName("Facturo-Pro") +settings = QSettings() +//! [12] + + +//! [13] +settings.beginGroup("mainwindow") +settings.setValue("size", win.size()) +settings.setValue("fullScreen", win.isFullScreen()) +settings.endGroup() + +settings.beginGroup("outputpanel") +settings.setValue("visible", panel.isVisible()) +settings.endGroup() +//! [13] + + +//! [14] +settings.beginGroup("alpha") +# settings.group() == "alpha" + +settings.beginGroup("beta") +# settings.group() == "alpha/beta" + +settings.endGroup() +# settings.group() == "alpha" + +settings.endGroup() +# settings.group() == "" +//! [14] + + +//! [15] +class Login: + userName = '' + password = '' + + logins = [] + ... + + settings = QSettings() + size = settings.beginReadArray("logins") + for i in range(size): + settings.setArrayIndex(i) + login = Login() + login.userName = settings.value("userName") + login.password = settings.value("password") + logins.append(login) + + settings.endArray() +//! [15] + + +//! [16] +class Login: + userName = '' + password = '' + + logins = [] + ... + + settings = QSettings() + settings.beginWriteArray("logins") + for i in range(logins.size()): + settings.setArrayIndex(i) + settings.setValue("userName", list.at(i).userName) + settings.setValue("password", list.at(i).password) + + settings.endArray() +//! [16] + + +//! [17] +settings = QSettings() +settings.setValue("fridge/color", Qt.white) +settings.setValue("fridge/size", QSize(32, 96)) +settings.setValue("sofa", True) +settings.setValue("tv", False) + +keys = settings.allKeys(); +# keys: ["fridge/color", "fridge/size", "sofa", "tv"] +//! [17] + + +//! [18] +settings.beginGroup("fridge") +keys = settings.allKeys() +# keys: ["color", "size"] +//! [18] + + +//! [19] +settings = QSettings() +settings.setValue("fridge/color", Qt.white) +settings.setValue("fridge/size", QSize(32, 96)) +settings.setValue("sofa", True) +settings.setValue("tv", False) + +keys = settings.childKeys() +# keys: ["sofa", "tv"] +//! [19] + + +//! [20] +settings.beginGroup("fridge") +keys = settings.childKeys() +# keys: ["color", "size"] +//! [20] + + +//! [21] +settings = QSettings() +settings.setValue("fridge/color", Qt.white) +settings.setValue("fridge/size", QSize(32, 96)); +settings.setValue("sofa", True) +settings.setValue("tv", False) + +groups = settings.childGroups() +# group: ["fridge"] +//! [21] + + +//! [22] +settings.beginGroup("fridge") +groups = settings.childGroups() +# groups: [] +//! [22] + + +//! [23] +settings = QSettings() +settings.setValue("interval", 30) +settings.value("interval") # returns 30 + +settings.setValue("interval", 6.55) +settings.value("interval") # returns 6.55 +//! [23] + + +//! [24] +settings = QSettings() +settings.setValue("ape") +settings.setValue("monkey", 1) +settings.setValue("monkey/sea", 2) +settings.setValue("monkey/doe", 4) + +settings.remove("monkey") +keys = settings.allKeys() +# keys: ["ape"] +//! [24] + + +//! [25] +settings = QSettings() +settings.setValue("ape") +settings.setValue("monkey", 1) +settings.setValue("monkey/sea", 2) +settings.setValue("monkey/doe", 4) + +settings.beginGroup("monkey") +settings.remove("") +settings.endGroup() + +keys = settings.allKeys() +# keys: ["ape"] +//! [25] + + +//! [26] +settings = QSettings() +settings.setValue("animal/snake", 58) +settings.value("animal/snake", 1024) # returns 58 +settings.value("animal/zebra", 1024) # returns 1024 +settings.value("animal/zebra") # returns 0 +//! [26] + + +//! [27] +# @arg device QIODevice +# @arg map QSettings.SettingsMap +# @return bool +def myReadFunc(device, map): +//! [27] + + +//! [28] +# @arg device QIODevice +# @arg map QSettings.SettingsMap +# @return bool +def myWriteFunc(device, map) +//! [28] + + +//! [29] +# @arg device QIODevice +# @arg map QSettings.SettingsMap +# @return bool +def readXmlFile(device, map): +def writeXmlFile(device, map): + +def main(): + XmlFormat = QSettings::registerFormat("xml", readXmlFile, writeXmlFile) + settings = QSettings(XmlFormat, QSettings.UserSettings, + "MySoft", "Star Runner") + ... +//! [29] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qtemporaryfile.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qtemporaryfile.cpp new file mode 100644 index 0000000..7244c22 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qtemporaryfile.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +{ +//! [0] + # Within a function/method... + + file_ = QTemporaryFile() + if file_.open(): + # file_.fileName() returns the unique file name + + # The QTemporaryFile destructor removes the temporary file + # as it goes out of scope. +//! [0] +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qtextstream.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qtextstream.cpp new file mode 100644 index 0000000..cf67a61 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qtextstream.cpp @@ -0,0 +1,140 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +data = QFile("output.txt") +if data.open(QFile.WriteOnly | QFile.Truncate): + out = QTextStream(&data) + out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7 + # writes "Result: 3.14 2.7 " + +//! [0] + + +//! [1] +stream = QTextStream(sys.stdin.fileno()) + +while(True): + line = stream.readLine() + if line.isNull(): + break; +//! [1] + + +//! [2] +in_ = QTextStream("0x50 0x20") +firstNumber = 0 +secondNumber = 0 + +in_ >> firstNumber # firstNumber == 80 +in_ >> dec >> secondNumber # secondNumber == 0 + +ch = None +in_ >> ch # ch == 'x' +//! [2] + + +//! [3] +def main(): + # read numeric arguments (123, 0x20, 4.5...) + for i in sys.argv(): + number = None + QTextStream in_(i) + in_ >> number + ... +//! [3] + + +//! [4] +str = QString() +in_ = QTextStream(sys.stdin.fileno()) +in_ >> str +//! [4] + + +//! [5] +s = QString() +out = QTextStream(s) +out.setFieldWidth(10) +out.setFieldAlignment(QTextStream::AlignCenter) +out.setPadChar('-') +out << "Qt" << "rocks!" +//! [5] + + +//! [6] +----Qt------rocks!-- +//! [6] + + +//! [7] +in_ = QTextStream(file) +ch1 = QChar() +ch2 = QChar() +ch3 = QChar() +in_ >> ch1 >> ch2 >> ch3; +//! [7] + + +//! [8] +out = QTextStream(sys.stdout.fileno()) +out << "Qt rocks!" << endl +//! [8] + + +//! [9] +stream << '\n' << flush +//! [9] + + +//! [10] +out = QTextStream(file) +out.setCodec("UTF-8") +//! [10] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qurl.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qurl.cpp new file mode 100644 index 0000000..d32a7b9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_io_qurl.cpp @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +url = QUrl("http://www.example.com/List of holidays.xml") +# url.toEncoded() == "http://www.example.com/List%20of%20holidays.xml" +//! [0] + + +//! [1] +url = QUrl.fromEncoded("http://qtsoftware.com/List%20of%20holidays.xml") +//! [1] + + +//! [2] +def checkUrl(url): + if !url.isValid(): + print "Invalid URL: %s" % url.toString() + return False + + return True + +//! [2] + + +//! [3] +ftp = QFtp() +ftp.connectToHost(url.host(), url.port(21)) +//! [3] + + +//! [4] +http://www.example.com/cgi-bin/drawgraph.cgi?type-pie/color-green +//! [4] + + +//! [5] +baseUrl = QUrl("http://qtsoftware.com/support") +relativeUrl = QUrl("../products/solutions") +print baseUrl.resolved(relativeUrl).toString() +# prints "http://qtsoftware.com/products/solutions" +//! [5] + + +//! [6] +ba = QUrl.toPercentEncoding("{a fishy string?}", "{}", "s") +print ba +# prints "{a fi%73hy %73tring%3F}" +//! [6] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qabstracteventdispatcher.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qabstracteventdispatcher.cpp new file mode 100644 index 0000000..a531f22 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qabstracteventdispatcher.cpp @@ -0,0 +1,3 @@ +//! [0] +bool myEventFilter(void *message); +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp new file mode 100644 index 0000000..f2a9e82 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +beginInsertRows(parent, 2, 4) +//! [0] + + +//! [1] +beginInsertRows(parent, 4, 5) +//! [1] + + +//! [2] +beginRemoveRows(parent, 2, 3) +//! [2] + + +//! [3] +beginInsertColumns(parent, 4, 6) +//! [3] + + +//! [4] +beginInsertColumns(parent, 6, 8) +//! [4] + + +//! [5] +beginRemoveColumns(parent, 4, 6) +//! [5] + + +//! [6] +beginMoveRows(sourceParent, 2, 4, destinationParent, 2) +//! [6] + + +//! [7] +beginMoveRows(sourceParent, 2, 4, destinationParent, 6) +//! [7] + + +//! [8] +beginMoveRows(parent, 2, 2, parent, 0) +//! [8] + + +//! [9] +beginMoveRows(parent, 2, 2, parent, 4) +//! [9] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qcoreapplication.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qcoreapplication.cpp new file mode 100644 index 0000000..115c766 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qcoreapplication.cpp @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +event = QMouseEvent(QEvent.MouseButtonPress, pos, 0, 0, 0) +QApplication.sendEvent(mainWindow, event) +//! [0] + + +//! [1] +quitButton = QPushButton("Quit") +quitButton.clicked.connect(app.quit) +//! [1] + + +//! [2] +for path in app.libraryPaths(): + do_something(path) +//! [2] + + +//! [3] +myEventFilter(message, result) +//! [3] + + +//! [4] +def cleanup_stuff(): + # do the cleanup stuff + +def init_stuff(): + qAddPostRoutine(cleanup_stuff) +//! [4] + + +//! [5] +class MyPrivateInitStuff : public QObject +{ +public: + static MyPrivateInitStuff *initStuff(QObject *parent) + { + if (!p) + p = new MyPrivateInitStuff(parent); + return p; + } + + ~MyPrivateInitStuff() + { + // cleanup goes here + } + +private: + MyPrivateInitStuff(QObject *parent) + : QObject(parent) + { + // initialization goes here + } + + MyPrivateInitStuff *p; +}; +//! [5] + + +//! [6] +static inline QString tr(const char *sourceText, + const char *comment = 0); +static inline QString trUtf8(const char *sourceText, + const char *comment = 0); +//! [6] + + +//! [7] +class MyMfcView : public CView +{ + Q_DECLARE_TR_FUNCTIONS(MyMfcView) + +public: + MyMfcView(); + ... +}; +//! [7] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qmetaobject.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qmetaobject.cpp new file mode 100644 index 0000000..79fe7f0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qmetaobject.cpp @@ -0,0 +1,132 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +void wrapInFunction() +{ + +//! [0] +class MyClass: + + Q_CLASSINFO("author", "Sabrina Schweinsteiger") + Q_CLASSINFO("url", "http://doc.moosesoft.co.uk/1.0/") + + ... +//! [0] + + +//! [1] +normType = QMetaObject.normalizedType(" int const *") +# normType is now "const int*" +//! [1] + + +//! [2] +QMetaObject.invokeMethod(pushButton, "animateClick", + Qt.QueuedConnection) +//! [2] + + +//! [3] +QMetaObject.invokeMethod: Unable to handle unregistered datatype 'MyType' +//! [3] + + +//! [4] +retVal = QString() +QMetaObject.invokeMethod(obj, "compute", Qt::DirectConnection, + Q_RETURN_ARG(QString, retVal), + Q_ARG(QString, "sqrt"), + Q_ARG(int, 42), + Q_ARG(double, 9.7)); +//! [4] + + +//! [5] +class MyClass: + Q_CLASSINFO("author", "Sabrina Schweinsteiger") + Q_CLASSINFO("url", "http://doc.moosesoft.co.uk/1.0/") +//! [5] + + +//! [propertyCount] +metaObject = obj.metaObject() +properties = [metaObject.property(i).name() for i in range(metaObject.propertyOffset(), metaObject.propertyCount())] +//! [propertyCount] + + +//! [methodCount] +metaObject = obj.metaObject() +methods = [metaObject.method(i).signature() for i in range(metaObject.methodOffset(), metaObject.methodCount())] +//! [methodCount] + +//! [6] +methodIndex = pushButton.metaObject().indexOfMethod("animateClick()") +method = metaObject.method(methodIndex) +method.invoke(pushButton, Qt.QueuedConnection) +//! [6] + +//! [7] +QMetaMethod.invoke: Unable to handle unregistered datatype 'MyType' +//! [7] + +//! [8] +retVal = QString() +normalizedSignature = QMetaObject.normalizedSignature("compute(QString, int, double)") +methodIndex = obj.metaObject().indexOfMethod(normalizedSignature) +method = metaObject.method(methodIndex) +method.invoke(obj, + Qt.DirectConnection, + Q_RETURN_ARG(QString, retVal), + Q_ARG(QString, "sqrt"), + Q_ARG(int, 42), + Q_ARG(double, 9.7)); +//! [8] + +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qmetatype.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qmetatype.cpp new file mode 100644 index 0000000..14f07a1 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qmetatype.cpp @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +struct MyStruct +{ + int i; + ... +}; + +Q_DECLARE_METATYPE(MyStruct) +//! [0] + + +//! [1] +namespace MyNamespace +{ + ... +} + +Q_DECLARE_METATYPE(MyNamespace::MyStruct) +//! [1] + + +//! [2] +MyStruct s; +QVariant var; +var.setValue(s); // copy s into the variant + +... + +// retrieve the value +MyStruct s2 = var.value(); +//! [2] + + +//! [3] +int id = QMetaType::type("MyClass"); +if (id == 0) { + void *myClassPtr = QMetaType::construct(id); + ... + QMetaType::destroy(id, myClassPtr); + myClassPtr = 0; +} +//! [3] + + +//! [4] +qRegisterMetaType("MyClass"); +//! [4] + + +//! [5] +qRegisterMetaTypeStreamOperators("MyClass"); +//! [5] + + +//! [6] +QDataStream &operator<<(QDataStream &out, const MyClass &myObj); +QDataStream &operator>>(QDataStream &in, MyClass &myObj); +//! [6] + + +//! [7] +int id = qRegisterMetaType(); +//! [7] + + +//! [8] +int id = qMetaTypeId(); // id is now QMetaType::QString +id = qMetaTypeId(); // compile error if MyStruct not declared +//! [8] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qmimedata.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qmimedata.cpp new file mode 100644 index 0000000..46c7e31 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qmimedata.cpp @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def dragEnterEvent(self, event): + if event.mimeData().hasUrls(): + event.acceptProposedAction() + +def dropEvent(self, event): + if event->mimeData().hasUrls(): + for url in event.mimeData().urls(): + ... +//! [0] + + +//! [1] +csvData = QByteArray(...) + +mimeData = QMimeData() +mimeData.setData("text/csv", csvData) +//! [1] + + +//! [2] +def dropEvent(self, event): + myData = event->mimeData() + if myData: + # access myData's data directly (not through QMimeData's API) +} +//! [2] + + +//! [3] +application/x-qt-windows-mime;value="" +//! [3] + + +//! [4] +application/x-qt-windows-mime;value="FileGroupDescriptor" +application/x-qt-windows-mime;value="FileContents" +//! [4] + + +//! [5] +if event.mimeData().hasImage(): + image = QImage(event.mimeData().imageData()) + ... +//! [5] + + +//! [6] +mimeData.setImageData(QImage("beautifulfjord.png")) +//! [6] + + +//! [7] +if event.mimeData().hasColor(): + color = QColor(event.mimeData().colorData()) + ... +//! [7] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qobject.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qobject.cpp new file mode 100644 index 0000000..1de4dbb --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qobject.cpp @@ -0,0 +1,369 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +lineEdit = qt_find_obj_child(myWidget, "QLineEdit", "my line edit") +if lineEdit: + lineEdit.setText("Default") +//! [0] + + +//! [1] +obj = QPushButton() +obj.metaObject().className() # returns "QPushButton" + +QPushButton.staticMetaObject.className() # returns "QPushButton" +//! [1] + + +//! [2] +QPushButton.staticMetaObject.className() # returns "QPushButton" + +obj = QPushButton() +obj.metaObject().className() # returns "QPushButton" +//! [2] + + +//! [3] +obj = QTimer() # QTimer inherits QObject + +timer = obj +# timer == (QObject *)obj + +button = obj +# button == 0 +//! [3] + + +//! [4] +timer = QTimer() # QTimer inherits QObject +timer.inherits("QTimer") # returns true +timer.inherits("QObject") # returns true +timer.inherits("QAbstractButton") # returns false + +# QLayout inherits QObject and QLayoutItem +layout = QLayout() +layout.inherits("QObject") # returns true +layout.inherits("QLayoutItem") # returns false +//! [4] + + +//! [5] +print "MyClass::setPrecision(): (%s) invalid precision %f" % \ + (qPrintable(objectName()), newPrecision) +//! [5] + + +//! [6] +class MainWindow(QMainWindow): + def __init__(self): + self.textEdit = QTextEdit() + setCentralWidget(self.textEdit) + textEdit.installEventFilter(self) + + def eventFilter(self, obj, event): + if obj == textEdit: + if event.type() == QEvent.KeyPress: + keyEvent = event + print "Ate key press", keyEvent.key() + return true + else: + return false + else: + # pass the event on to the parent class + return QMainWindow.eventFilter(self, obj, event) +//! [6] + + +//! [7] +myObject.moveToThread(QApplication.instance().thread()) +//! [7] + + +//! [8] +class MyObject(QObject): + def __init__(self, parent): + QObject.__init__(self, parent) + + self.startTimer(50) # 50-millisecond timer + self.startTimer(1000) # 1-second timer + self.startTimer(60000) # 1-minute timer + + + def timerEvent(self, event): + print "Timer ID:", event.timerId() + +//! [8] + + +//! [9] +list = window().queryList("QAbstractButton") +for obj in list: + obj.setEnabled(false) +//! [9] + + +//! [10] +button = parentWidget.findChild(QPushButton, "button1") +//! [10] + + +//! [11] +list = parentWidget.findChild(QListWidget) +//! [11] + + +//! [12] +widgets = parentWidget.findChildren(QWidget, "widgetname") +//! [12] + + +//! [13] +allPButtons = parentWidget.findChildren(QPushButton) +//! [13] + + +//! [14] +monitoredObj.installEventFilter(filterObj) +//! [14] + + +//! [15] +class KeyPressEater(QObject): + def eventFilter(self, obj, event): + if event.type() == QEvent.KeyPress: + print "Ate key press", event.key() + return True + else: + # standard event processing + return QObject.eventFilter(self, obj, event) +//! [15] + + +//! [16] +keyPressEater = KeyPressEater(self) +pushButton = QPushButton(self) +listView = QListView(self) + +pushButton.installEventFilter(keyPressEater) +listView.installEventFilter(keyPressEater) +//! [16] + + +//! [17] +def __init__(self): + senderLabel = QLabel(self.tr("Name:")) + recipientLabel = QLabel(self.tr("Name:", "recipient")) + # ... +//! [17] + + +//! [18] +n = messages.count(); +showMessage(self.tr("%n message(s) saved", "", n)); +//! [18] + + +//! [19] +if n == 1: + self.tr("%n message saved") +else: + self.tr("%n messages saved") +//! [19] + + +//! [20] +label.setText(self.tr("F\374r \310lise")) +//! [20] + + +//! [21] +if receivers(SIGNAL('valueChanged()')) > 0: + data = get_the_value() # expensive operation + self.valueChanged(data) +//! [21] + + +//! [22] +label = QLabel() +scrollBar = QScrollBar() +QObject.connect(scrollBar, SIGNAL('valueChanged()'), + label, SLOT('setNum()')) +//! [22] + + +//! [23] +// WRONG +QObject.connect(scrollBar, SIGNAL('valueChanged()'), + label, SLOT('setNum()')); +//! [23] + + +//! [24] +class MyWidget(QWidget): + def __init__(self): + myButton = QPushButton(self) + connect(myButton, SIGNAL('clicked()'), + self, SIGNAL('buttonClicked()')) +//! [24] + + +//! [25] +QObject.connect: Cannot queue arguments of type 'MyType' +(Make sure 'MyType' is registered using qRegisterMetaType().) +//! [25] + + +//! [26] +disconnect(myObject, 0, 0, 0) +//! [26] + + +//! [27] +myObject.disconnect() +//! [27] + + +//! [28] +disconnect(myObject, SIGNAL('mySignal()'), 0, 0) +//! [28] + + +//! [29] +myObject.disconnect(SIGNAL('mySignal()')) +//! [29] + + +//! [30] +disconnect(myObject, 0, myReceiver, 0) +//! [30] + + +//! [31] +myObject.disconnect(myReceiver) +//! [31] + + +//! [32] +if QLatin1String(signal) == SIGNAL('valueChanged()'): + # signal is valueChanged() +//! [32] + + +//! [33] +def on__() +//! [33] + + +//! [34] +def on_button1_clicked() +//! [34] + + +//! [35] +class MyClass(QObject): + Q_CLASSINFO("Author", "Pierre Gendron") + Q_CLASSINFO("URL", "http://www.my-organization.qc.ca") + +//! [35] + + +//! [36] +Q_PROPERTY(type name + READ getFunction + [WRITE setFunction] + [RESET resetFunction] + [DESIGNABLE bool] + [SCRIPTABLE bool] + [STORED bool] + [USER bool]) +//! [36] + + +//! [37] +Q_PROPERTY(QString title READ title WRITE setTitle USER true) +//! [37] + + +//! [38] +#this not apply for Python +class MyClass(QObject): + + Q_OBJECT + Q_ENUMS(Priority) + +public: + MyClass(QObject *parent = 0); + ~MyClass(); + + enum Priority { High, Low, VeryHigh, VeryLow }; + void setPriority(Priority priority); + Priority priority() const; +}; +//! [38] + + +//! [39] +#this not apply for Python +Q_FLAGS(Options Alignment) +//! [39] + + +//! [40] +//: This name refers to a host name. +hostNameLabel.setText(self.tr("Name:")) + +#: This text refers to a C++ code example. +example = self.tr("Example") +//! [40] + +//! [explicit tr context] +text = QScrollBar.tr("Page up") +//! [explicit tr context] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qsystemsemaphore.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qsystemsemaphore.cpp new file mode 100644 index 0000000..2a93852 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qsystemsemaphore.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +sem = QSystemSemaphore("market", 3, QSystemSemaphore.Create) +# resources available == 3 +sem.acquire() # resources available == 2 +sem.acquire() # resources available == 1 +sem.acquire() # resources available == 0 +sem.release() # resources available == 1 +sem.release(2) # resources available == 3 +//! [0] + + +//! [1] +sem = QSystemSemaphore("market", 5, QSystemSemaphore.Create) +sem.acquire(5) # acquire all 5 resources +sem.release(5) # release the 5 resources +//! [1] + + +//! [2] +sem.release(10) # "create" 10 new resources +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qtimer.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qtimer.cpp new file mode 100644 index 0000000..c0c703d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_kernel_qtimer.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +from PySide2.QtCore import QApplication, QTimer + +def main(): + + app = QApplication([]) + QTimer.singleShot(600000, app, SLOT('quit()')) + ... + return app.exec_() +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_plugin_qlibrary.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_plugin_qlibrary.cpp new file mode 100644 index 0000000..310cf5d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_plugin_qlibrary.cpp @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QLibrary myLib("mylib"); +typedef void (*MyPrototype)(); +MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol"); +if (myFunction) + myFunction(); +//! [0] + + +//! [1] +typedef void (*MyPrototype)(); +MyPrototype myFunction = + (MyPrototype) QLibrary::resolve("mylib", "mysymbol"); +if (myFunction) + myFunction(); +//! [1] + + +//! [2] +typedef int (*AvgFunction)(int, int); + +AvgFunction avg = (AvgFunction) library->resolve("avg"); +if (avg) + return avg(5, 8); +else + return -1; +//! [2] + + +//! [3] +extern "C" MY_EXPORT int avg(int a, int b) +{ + return (a + b) / 2; +} +//! [3] + + +//! [4] +#ifdef Q_WS_WIN +#define MY_EXPORT __declspec(dllexport) +#else +#define MY_EXPORT +#endif +//! [4] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_plugin_quuid.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_plugin_quuid.cpp new file mode 100644 index 0000000..90eafb9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_plugin_quuid.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +# {67C8770B-44F1-410A-AB9A-F9B5446F13EE} +IID_MyInterface = QUuid(0x67c8770b, 0x44f1, 0x410a, 0xab, 0x9a, 0xf9, 0xb5, 0x44, 0x6f, 0x13, 0xee) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_statemachine_qstatemachine.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_statemachine_qstatemachine.cpp new file mode 100644 index 0000000..6a78e19 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_statemachine_qstatemachine.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [simple state machine] +button = QPushButton() + +machine = QStateMachine() +s1 = QState() +s1.assignProperty(button, "text", "Click me") + +s2 = QFinalState() +s1.addTransition(button, SIGNAL('clicked()'), s2) + +machine.addState(s1) +machine.addState(s2) +machine.setInitialState(s1) +machine.start() +//! [simple state machine] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qatomic.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qatomic.cpp new file mode 100644 index 0000000..7c999e5 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qatomic.cpp @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +MySharedType &MySharedType::operator=(const MySharedType &other) +{ + (void) other.data->atomicInt.ref(); + if (!data->atomicInt.deref()) { + // The last reference has been released + delete d; + } + d = other.d; + return *this; +} +//! [0] + + +//! [1] +if (currentValue == expectedValue) { + currentValue = newValue; + return true; +} +return false; +//! [1] + + +//! [2] +int originalValue = currentValue; +currentValue = newValue; +return originalValue; +//! [2] + + +//! [3] +int originalValue = currentValue; +currentValue += valueToAdd; +return originalValue; +//! [3] + + +//! [4] +if (currentValue == expectedValue) { + currentValue = newValue; + return true; +} +return false; +//! [4] + + +//! [5] +T *originalValue = currentValue; +currentValue = newValue; +return originalValue; +//! [5] + + +//! [6] +T *originalValue = currentValue; +currentValue += valueToAdd; +return originalValue; +//! [6] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qmutex.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qmutex.cpp new file mode 100644 index 0000000..e799cbb --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qmutex.cpp @@ -0,0 +1,165 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +number = 6 + +def method1(): + number *= 5 + number /= 4 + +def method2(): + number *= 3 + number /= 2 +//! [0] + + +//! [1] +# method1() +number *= 5 # number is now 30 +number /= 4 # number is now 7 + +# method2() +number *= 3 # number is now 21 +number /= 2 # number is now 10 +//! [1] + + +//! [2] +# Thread 1 calls method1() +number *= 5 # number is now 30 + +# Thread 2 calls method2(). +# +# Most likely Thread 1 has been put to sleep by the operating +# system to allow Thread 2 to run. +number *= 3 # number is now 90 +number /= 2 # number is now 45 + +# Thread 1 finishes executing. +number /= 4 # number is now 11, instead of 10 +//! [2] + + +//! [3] +mutex = QMutex() +number = 6 + +def method1(): + mutex.lock() + number *= 5 + number /= 4 + mutex.unlock() + +def method2(): + mutex.lock() + number *= 3 + number /= 2 + mutex.unlock() +//! [3] + + +//! [4] +def complexFunction(flag): + mutex.lock() + + retVal = 0 + + if flag == 0 or flag == 1: + mutex.unlock() + return moreComplexFunction(flag) + elif flag == 2: + status = anotherFunction() + if status < 0: + mutex.unlock() + return -2 + retVal = status + flag + else: + if flag > 10: + mutex.unlock() + return -1 + + mutex.unlock() + return retVal +//! [4] + + +//! [5] +def complexFunction(flag): + locker = QMutexLocker(mutex) + + retVal = 0 + + if flag == 0 or flag == 1: + return moreComplexFunction(flag) + elif flag == 2: + status = anotherFunction() + if status < 0: + return -2 + retVal = status + flag + else: + if flag > 10: + return -1 + + return retVal +//! [5] + + +//! [6] +class SignalWaiter: + def __init__(mutex): + self.locker = mutex + + def waitForSignal(): + # ... + while not signalled: + waitCondition.wait(self.locker.mutex()) + # ... +//! [6] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qmutexpool.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qmutexpool.cpp new file mode 100644 index 0000000..622cb18 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qmutexpool.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class Number: + def __init__(n): + self.num = n +//! [0] + + +//! [1] +def calcSquare(number): + locker = QMutexLocker(mutexpool.get(number)) + number.num = number.num * number.num +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qreadwritelock.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qreadwritelock.cpp new file mode 100644 index 0000000..d441042 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qreadwritelock.cpp @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +lock = QReadWriteLock() + +class ReaderThread: + # ... + def run(): + # ... + lock.lockForRead() + read_file() + lock.unlock() + # ... + +class WriterThread: + #... + def run(): + # ... + lock.lockForWrite() + write_file() + lock.unlock() + # ... +//! [0] + + +//! [1] +lock = QReadWriteLock() + +def readData(): + locker = QReadLocker(lock) + # ... + return data +//! [1] + + +//! [2] +lock = QReadWriteLock() + +def readData(): + locker.lockForRead() + # ... + locker.unlock() + return data +//! [2] + + +//! [3] +lock = QReadWriteLock() + +def writeData(data): + locker = QWriteLocker(lock) + # ... +//! [3] + + +//! [4] +lock = QReadWriteLock() + +def writeData(data): + locker.lockForWrite() + # ... + locker.unlock() +//! [4] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qsemaphore.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qsemaphore.cpp new file mode 100644 index 0000000..086b105 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qsemaphore.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +sem = QSemaphore(5) # sem.available() == 5 + +sem.acquire(3) # sem.available() == 2 +sem.acquire(2) # sem.available() == 0 +sem.release(5) # sem.available() == 5 +sem.release(5) # sem.available() == 10 + +sem.tryAcquire(1) # sem.available() == 9, returns true +sem.tryAcquire(250) # sem.available() == 9, returns false +//! [0] + + +//! [1] +sem = QSemaphore(5) # a semaphore that guards 5 resources +sem.acquire(5) # acquire all 5 resources +sem.release(5) # release the 5 resources +sem.release(10) # "create" 10 new resources +//! [1] + + +//! [2] +sem = QSemaphore(5) # sem.available() == 5 +sem.tryAcquire(250) # sem.available() == 5, returns false +sem.tryAcquire(3) # sem.available() == 2, returns true +//! [2] + + +//! [3] +sem = QSemaphore(5) # sem.available() == 5 +sem.tryAcquire(250, 1000) # sem.available() == 5, waits 1000 milliseconds and returns false +sem.tryAcquire(3, 30000) # sem.available() == 2, returns true without waiting +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qthread.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qthread.cpp new file mode 100644 index 0000000..5470e8a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qthread.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class MyThread (QThread): + def run(): + socket = QTcpSocket() + # connect QTcpSocket's signals somewhere meaningful + # ... + socket.connectToHost(hostName, portNumber) + self.exec_() +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qwaitcondition_unix.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qwaitcondition_unix.cpp new file mode 100644 index 0000000..f652e5f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_thread_qwaitcondition_unix.cpp @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +while True: + mutex.lock() + keyPressed.wait(mutex) + do_something() + mutex.unlock() +//! [0] + + +//! [1] +while True: + getchar() + keyPressed.wakeAll() + +//! [1] + + +//! [2] +while True: + mutex.lock() + keyPressed.wait(&mutex) + count += 1 + mutex.unlock() + + do_something() + + mutex.lock() + count -= 1 + mutex.unlock() +//! [2] + + +//! [3] +while True: + getchar() + + mutex.lock() + # Sleep until there are no busy worker threads + while count > 0: + mutex.unlock() + sleep(1) + mutex.lock() + keyPressed.wakeAll() + mutex.unlock() +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qbitarray.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qbitarray.cpp new file mode 100644 index 0000000..2edd35b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qbitarray.cpp @@ -0,0 +1,239 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +ba = QBitArray(200) +//! [0] + + +//! [1] +ba = QBitArray() +ba.resize(3) +ba[0] = True +ba[1] = False +ba[2] = True +//! [1] + + +//! [2] +ba = QBitArray(3) +ba.setBit(0, True) +ba.setBit(1, False) +ba.setBit(2, True) +//! [2] + + +//! [3] +x = QBitArray(5) +x.setBit(3, True) +# x: [ 0, 0, 0, 1, 0 ] + +y = QBitArray(5) +y.setBit(4, True) +# y: [ 0, 0, 0, 0, 1 ] + +x |= y +# x: [ 0, 0, 0, 1, 1 ] +//! [3] + + +//! [4] +QBitArray().isNull() # returns True +QBitArray().isEmpty() # returns True + +QBitArray(0).isNull() # returns False +QBitArray(0).isEmpty() # returns True + +QBitArray(3).isNull() # returns False +QBitArray(3).isEmpty() # returns False +//! [4] + + +//! [5] +QBitArray().isNull() # returns True +QBitArray(0).isNull() # returns False +QBitArray(3).isNull() # returns False +//! [5] + + +//! [6] +ba = QBitArray(8) +ba.fill(True) +# ba: [ 1, 1, 1, 1, 1, 1, 1, 1 ] + +ba.fill(False, 2) +# ba: [ 0, 0 ] +//! [6] + + +//! [7] +a = QBitArray(3) +a[0] = False +a[1] = True +a[2] = a[0] ^ a[1] +//! [7] + + +//! [8] +a = QBitArray(3) +b = QBitArray(2) +a[0] = 1 +a[1] = 0 +a[2] = 1 +# a: [ 1, 0, 1 ] + +b[0] = 1 +b[1] = 0 +# b: [ 1, 1 ] + +a &= b +# a: [ 1, 0, 0 ] +//! [8] + + +//! [9] +a = QBitArray(3) +b = QBitArray(2) +a[0] = 1 +a[1] = 0 +a[2] = 1 +# a: [ 1, 0, 1 ] + +b[0] = 1 +b[1] = 0 +# b: [ 1, 1 ] + +a |= b +# a: [ 1, 1, 1 ] +//! [9] + + +//! [10] +a = QBitArray(3) +b = QBitArray(2) +a[0] = 1 +a[1] = 0 +a[2] = 1 +# a: [ 1, 0, 1 ] + +b[0] = 1 +b[1] = 0 +# b: [ 1, 1 ] + +a ^= b +# a: [ 0, 1, 1 ] +//! [10] + + +//! [11] +a = QBitArray(3) +b = QBitArray() +a[0] = 1 +a[1] = 0 +a[2] = 1 +# a: [ 1, 0, 1 ] + +b = ~a +# b: [ 0, 1, 0 ] +//! [11] + + +//! [12] +a = QBitArray(3) +b = QBitArray(2) +c = QBitArray() +a[0] = 1 +a[1] = 0 +a[2] = 1 +# a: [ 1, 0, 1 ] + +b[0] = 1 +b[1] = 0 +# b: [ 1, 1 ] + +c = a & b +# c: [ 1, 0, 0 ] +//! [12] + + +//! [13] +a = QBitArray(3) +QBitArray b(2) +QBitArray c +a[0] = 1 +a[1] = 0 +a[2] = 1 +# a: [ 1, 0, 1 ] + +b[0] = 1 +b[1] = 0 +# b: [ 1, 1 ] + +c = a | b +# c: [ 1, 1, 1 ] +//! [13] + + +//! [14] +a = QBitArray(3) +b = QBitArray(2) +c = QBitArray() +a[0] = 1 +a[1] = 0 +a[2] = 1 +# a: [ 1, 0, 1 ] + +b[0] = 1 +b[1] = 0 +# b: [ 1, 1 ] + +c = a ^ b +# c: [ 0, 1, 1 ] +//! [14] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qbytearray.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qbytearray.cpp new file mode 100644 index 0000000..bb0bc7d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qbytearray.cpp @@ -0,0 +1,402 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +void wrapInFunction() +{ + +//! [0] +ba = QByteArray("Hello") +//! [0] + + +//! [1] +ba = QByteArray() +ba.resize(5) +ba[0] = 'H' +ba[1] = 'e' +ba[2] = 'l' +ba[3] = 'l' +ba[4] = 'o' +//! [1] + + +//! [2] +for i in range(0, ba.size()): + if ba.at(i) >= 'a' and ba.at(i) <= 'f': + print "Found character in range [a-f]" +//! [2] + + +//! [3] +x = QByteArray("and") +x.prepend("rock ") # x == "rock and" +x.append(" roll") # x == "rock and roll" +x.replace(5, 3, "&") # x == "rock & roll" +//! [3] + + +//! [4] +ba = QByteArray("We must be bold, very bold") +j = 0 +while (j = ba.indexOf("", j)) != -1: + print "Found tag at index position %d" % j + ++j +//! [4] + + +//! [5] +QByteArray().isNull() # returns true +QByteArray().isEmpty() # returns true + +QByteArray("").isNull() # returns false +QByteArray("").isEmpty() # returns true + +QByteArray("abc").isNull() # returns false +QByteArray("abc").isEmpty() # returns false +//! [5] + + +//! [6] +ba = QByteArray("Hello") +n = ba.size() # n == 5 +ba.data()[0] # returns 'H' +ba.data()[4] # returns 'o' +//! [6] + + +//! [7] +QByteArray().isEmpty() # returns true +QByteArray("").isEmpty() # returns true +QByteArray("abc").isEmpty() # returns false +//! [7] + + +//! [8] +ba = QByteArray("Hello world"); +print ba.data(); +//! [8] + + +//! [9] +ba = QByteArray() +for i in range(0, 10): + ba[i] = 'A' + str(i) +# ba == "ABCDEFGHIJ" +//! [9] + + +//! [10] +ba = QByteArray("Stockholm") +ba.truncate(5) # ba == "Stock" +//! [10] + + +//! [11] +ba = QByteArray("STARTTLS\r\n") +ba.chop(2) # ba == "STARTTLS" +//! [11] + + +//! [12] +x = QByteArray("free") +y = QByteArray("dom"); +x += y +# x == "freedom" +//! [12] + + +//! [13] +QByteArray().isNull() # returns true +QByteArray("").isNull() # returns false +QByteArray("abc").isNull() # returns false +//! [13] + + +//! [14] +ba = QByteArray("Istambul") +ba.fill('o') +# ba == "oooooooo" + +ba.fill('X', 2) +# ba == "XX" +//! [14] + + +//! [15] +x = QByteArray("ship") +y = QByteArray("air") +x.prepend(y) +# x == "airship" +//! [15] + + +//! [16] +x = QByteArray("free") +y = QByteArray("dom") +x.append(y) +# x == "freedom" +//! [16] + + +//! [17] +ba = QByteArray("Meal") +ba.insert(1, QByteArray("ontr")) +# ba == "Montreal" +//! [17] + + +//! [18] +ba = QByteArray("Montreal") +ba.remove(1, 4) +# ba == "Meal" +//! [18] + + +//! [19] +x = QByteArray("Say yes!") +y = QByteArray("no") +x.replace(4, 3, y) +# x == "Say no!" +//! [19] + + +//! [20] +ba = QByteArray("colour behaviour flavour neighbour") +ba.replace(QByteArray("ou"), QByteArray("o")) +# ba == "color behavior flavor neighbor" +//! [20] + + +//! [21] +x = QByteArray("sticky question") +y = QByteArray("sti") +x.indexOf(y) # returns 0 +x.indexOf(y, 1) # returns 10 +x.indexOf(y, 10) # returns 10 +x.indexOf(y, 11) # returns -1 +//! [21] + + +//! [22] +ba = QByteArray("ABCBA") +ba.indexOf("B") # returns 1 +ba.indexOf("B", 1) # returns 1 +ba.indexOf("B", 2) # returns 3 +ba.indexOf("X") # returns -1 +//! [22] + + +//! [23] +x = QByteArray("crazy azimuths") +y = QByteArray("azy") +x.lastIndexOf(y) # returns 6 +x.lastIndexOf(y, 6) # returns 6 +x.lastIndexOf(y, 5) # returns 2 +x.lastIndexOf(y, 1) # returns -1 +//! [23] + + +//! [24] +ba = QByteArray("ABCBA") +ba.lastIndexOf("B") # returns 3 +ba.lastIndexOf("B", 3) # returns 3 +ba.lastIndexOf("B", 2) # returns 1 +ba.lastIndexOf("X") # returns -1 +//! [24] + + +//! [25] +url = QByteArray("ftp://ftp.qt-project.org/") +if url.startsWith("ftp:"): + ... +//! [25] + + +//! [26] +url = QByteArray("http://qtsoftware.com/index.html") +if url.endsWith(".html"): + ... +//! [26] + + +//! [27] +x = QByteArray("Pineapple") +y = x.left(4) +# y == "Pine" +//! [27] + + +//! [28] +x = QByteArray("Pineapple") +y = x.right(5) +# y == "apple" +//! [28] + + +//! [29] +x = QByteArray("Five pineapples") +y = x.mid(5, 4) # y == "pine" +z = x.mid(5) # z == "pineapples" +//! [29] + + +//! [30] +x = QByteArray("Qt by THE QT COMPANY") +y = x.toLower() +# y == "qt by the qt company" +//! [30] + + +//! [31] +x = QByteArray("Qt by THE QT COMPANY") +y = x.toUpper() +# y == "QT BY THE QT COMPANY" +//! [31] + + +//! [32] +ba = QByteArray(" lots\t of\nwhitespace\r\n ") +ba = ba.simplified() +# ba == "lots of whitespace"; +//! [32] + + +//! [33] +ba = QByteArray(" lots\t of\nwhitespace\r\n "); +ba = ba.trimmed(); +# ba == "lots\t of\nwhitespace"; +//! [33] + + +//! [34] +x = QByteArray("apple") +y = x.leftJustified(8, '.') # y == "apple..." +//! [34] + + +//! [35] +x = QByteArray("apple") +y = x.rightJustified(8, '.') # y == "...apple" +//! [35] + + +//! [36] +string = QByteArray("FF") +(hex, ok) = string.toInt(16) # hex == 255, ok == true +(dec, ok) = string.toInt(10) # dec == 0, ok == false +//! [36] + + +//! [37] +string = QByteArray("FF") +(hex, ok) = str.toLong(16); # hex == 255, ok == true +(dec, ok) = str.toLong(10); # dec == 0, ok == false +//! [37] + + +//! [38] +string = QByteArray("1234.56") +(a, ok) = string.toDouble() # a == 1234.56, ok == true +//! [38] + + +//! [39] +text = QByteArray("Qt is great!") +text.toBase64() # returns "UXQgaXMgZ3JlYXQh" +//! [39] + + +//! [40] +ba = QByteArray() +n = 63 +ba.setNum(n) # ba == "63" +ba.setNum(n, 16) # ba == "3f" +//! [40] + + +//! [41] +n = 63; +QByteArray.number(n) # returns "63" +QByteArray.number(n, 16) # returns "3f" +QByteArray.number(n, 16).toUpper() # returns "3F" +//! [41] + + +//! [42] +ba = QByteArray.number(12.3456, 'E', 3) +# ba == 1.235E+01 +//! [42] + + +//! [43] +mydata = '\x00\x00\x03\x84\x78\x9c\x3b\x76'\ + '\xec\x18\xc3\x31\x0a\xf1\xcc\x99'\ + ... + '\x6d\x5b' + +data = QByteArray.fromRawData(mydata) +in_ = QDataStream(data, QIODevice.ReadOnly) +... +//! [43] + + +//! [44] +text = QByteArray.fromBase64("UXQgaXMgZ3JlYXQh") +text.data() # returns "Qt is great!" +//! [44] + + +//! [45] +text = QByteArray.fromHex("517420697320677265617421") +text.data() # returns "Qt is great!" +//! [45] + +} + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qdatetime.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qdatetime.cpp new file mode 100644 index 0000000..ea8c044 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qdatetime.cpp @@ -0,0 +1,156 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +d1 = QDate(1995, 5, 17) # May 17, 1995 +d2 = QDate(1995, 5, 20) # May 20, 1995 +d1.daysTo(d2) # returns 3 +d2.daysTo(d1) # returns -3 +//! [0] + + +//! [1] +date = QDate.fromString("1MM12car2003", "d'MM'MMcaryyyy") +# date is 1 December 2003 +//! [1] + + +//! [2] +date = QDate.fromString("130", "Md") # invalid +//! [2] + + +//! [3] +QDate.fromString("1.30", "M.d") # January 30 1900 +QDate.fromString("20000110", "yyyyMMdd") # January 10, 2000 +QDate.fromString("20000110", "yyyyMd") # January 10, 2000 +//! [3] + + +//! [4] +QDate.isValid(2002, 5, 17) # True +QDate.isValid(2002, 2, 30) # False (Feb 30 does not exist) +QDate.isValid(2004, 2, 29) # True (2004 is a leap year) +QDate.isValid(2000, 2, 29) # True (2000 is a leap year) +QDate.isValid(2006, 2, 29) # False (2006 is not a leap year) +QDate.isValid(2100, 2, 29) # False (2100 is not a leap year) +QDate.isValid(1202, 6, 6) # True (even though 1202 is pre-Gregorian) +//! [4] + + +//! [5] +n = QTime(14, 0, 0) # n == 14:00:00 +t = QTime() +t = n.addSecs(70) # t == 14:01:10 +t = n.addSecs(-70) # t == 13:58:50 +t = n.addSecs(10 * 60 * 60 + 5) # t == 00:00:05 +t = n.addSecs(-15 * 60 * 60) # t == 23:00:00 +//! [5] + + +//! [6] +time = QTime.fromString("1mm12car00", "m'mm'hcarss") +# time is 12:01.00 +//! [6] + + +//! [7] +time = QTime.fromString("00:710", "hh:ms") # invalid +//! [7] + + +//! [8] +time = QTime.fromString("1.30", "m.s") +# time is 00:01:30.000 +//! [8] + + +//! [9] +QTime.isValid(21, 10, 30) # returns True +QTime.isValid(22, 5, 62) # returns False +//! [9] + + +//! [10] +t = QTime() +t.start() +some_lengthy_task() +print ("Time elapsed: %d ms" % t.elapsed()) +//! [10] + + +//! [11] +now = QDateTime.currentDateTime() +xmas(QDate(now.date().year(), 12, 25), QTime(0, 0)) +print("There are %d seconds to Christmas" % now.secsTo(xmas)) +//! [11] + + +//! [12] +time1 = QTime.fromString("131", "HHh") +# time1 is 13:00:00 +time1 = QTime.fromString("1apA", "1amAM") +# time1 is 01:00:00 + +dateTime2 = QDateTime.fromString("M1d1y9800:01:02", + "'M'M'd'd'y'yyhh:mm:ss") +# dateTime is 1 January 1998 00:01:02 +//! [12] + + +//! [13] +dateTime = QDateTime.fromString("130", "Mm") # invalid +//! [13] + + +//! [14] +dateTime = QDateTime.fromString("1.30.1", "M.d.s") +# dateTime is January 30 in 1900 at 00:00:01. +//! [14] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qhash.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qhash.cpp new file mode 100644 index 0000000..985c7da --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qhash.cpp @@ -0,0 +1,309 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QHash hash; +//! [0] + + +//! [1] +hash["one"] = 1; +hash["three"] = 3; +hash["seven"] = 7; +//! [1] + + +//! [2] +hash.insert("twelve", 12); +//! [2] + + +//! [3] +int num1 = hash["thirteen"]; +int num2 = hash.value("thirteen"); +//! [3] + + +//! [4] +int timeout = 30; +if (hash.contains("TIMEOUT")) + timeout = hash.value("TIMEOUT"); +//! [4] + + +//! [5] +int timeout = hash.value("TIMEOUT", 30); +//! [5] + + +//! [6] +// WRONG +QHash hash; +... +for (int i = 0; i < 1000; ++i) { + if (hash[i] == okButton) + cout << "Found button at index " << i << endl; +} +//! [6] + + +//! [7] +QHashIterator i(hash); +while (i.hasNext()) { + i.next(); + cout << i.key() << ": " << i.value() << endl; +} +//! [7] + + +//! [8] +QHash::const_iterator i = hash.constBegin(); +while (i != hash.constEnd()) { + cout << i.key() << ": " << i.value() << endl; + ++i; +} +//! [8] + + +//! [9] +hash.insert("plenty", 100); +hash.insert("plenty", 2000); +// hash.value("plenty") == 2000 +//! [9] + + +//! [10] +QList values = hash.values("plenty"); +for (int i = 0; i < values.size(); ++i) + cout << values.at(i) << endl; +//! [10] + + +//! [11] +QHash::iterator i = hash.find("plenty"); +while (i != hash.end() && i.key() == "plenty") { + cout << i.value() << endl; + ++i; +} +//! [11] + + +//! [12] +QHash hash; +... +foreach (int value, hash) + cout << value << endl; +//! [12] + + +//! [13] +#ifndef EMPLOYEE_H +#define EMPLOYEE_H + +class Employee +{ +public: + Employee() {} + Employee(const QString &name, const QDate &dateOfBirth); + ... + +private: + QString myName; + QDate myDateOfBirth; +}; + +inline bool operator==(const Employee &e1, const Employee &e2) +{ + return e1.name() == e2.name() + && e1.dateOfBirth() == e2.dateOfBirth(); +} + +inline uint qHash(const Employee &key) +{ + return qHash(key.name()) ^ key.dateOfBirth().day(); +} + +#endif // EMPLOYEE_H +//! [13] + + +//! [14] +QHash hash; +hash.reserve(20000); +for (int i = 0; i < 20000; ++i) + hash.insert(keys[i], values[i]); +//! [14] + + +//! [15] +QHash objectHash; +... +QHash::iterator i = objectHash.find(obj); +while (i != objectHash.end() && i.key() == obj) { + if (i.value() == 0) { + i = objectHash.erase(i); + } else { + ++i; + } +} +//! [15] + + +//! [16] +QHash hash; +... +QHash::const_iterator i = hash.find("HDR"); +while (i != hash.end() && i.key() == "HDR") { + cout << i.value() << endl; + ++i; +} +//! [16] + + +//! [17] +QHash hash; +hash.insert("January", 1); +hash.insert("February", 2); +... +hash.insert("December", 12); + +QHash::iterator i; +for (i = hash.begin(); i != hash.end(); ++i) + cout << i.key() << ": " << i.value() << endl; +//! [17] + + +//! [18] +QHash::iterator i; +for (i = hash.begin(); i != hash.end(); ++i) + i.value() += 2; +//! [18] + + +//! [19] +QHash::iterator i = hash.begin(); +while (i != hash.end()) { + if (i.key().startsWith("_")) + i = hash.erase(i); + else + ++i; +} +//! [19] + + +//! [20] +QHash::iterator i = hash.begin(); +while (i != hash.end()) { + QHash::iterator prev = i; + ++i; + if (prev.key().startsWith("_")) + hash.erase(prev); +} +//! [20] + + +//! [21] +// WRONG +while (i != hash.end()) { + if (i.key().startsWith("_")) + hash.erase(i); + ++i; +} +//! [21] + + +//! [22] +if (i.key() == "Hello") + i.value() = "Bonjour"; +//! [22] + + +//! [23] +QHash hash; +hash.insert("January", 1); +hash.insert("February", 2); +... +hash.insert("December", 12); + +QHash::const_iterator i; +for (i = hash.constBegin(); i != hash.constEnd(); ++i) + cout << i.key() << ": " << i.value() << endl; +//! [23] + + +//! [24] +QMultiHash hash1, hash2, hash3; + +hash1.insert("plenty", 100); +hash1.insert("plenty", 2000); +// hash1.size() == 2 + +hash2.insert("plenty", 5000); +// hash2.size() == 1 + +hash3 = hash1 + hash2; +// hash3.size() == 3 +//! [24] + + +//! [25] +QList values = hash.values("plenty"); +for (int i = 0; i < values.size(); ++i) + cout << values.at(i) << endl; +//! [25] + + +//! [26] +QMultiHash::iterator i = hash.find("plenty"); +while (i != hash.end() && i.key() == "plenty") { + cout << i.value() << endl; + ++i; +} +//! [26] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qlinkedlist.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qlinkedlist.cpp new file mode 100644 index 0000000..947594a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qlinkedlist.cpp @@ -0,0 +1,214 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QLinkedList integerList; +QLinkedList timeList; +//! [0] + + +//! [1] +QLinkedList list; +list << "one" << "two" << "three"; +// list: ["one", "two", "three"] +//! [1] + + +//! [2] +QLinkedList list; +... +while (!list.isEmpty()) + delete list.takeFirst(); +//! [2] + + +//! [3] +QLinkedList list; +list.append("one"); +list.append("two"); +list.append("three"); +// list: ["one", "two", "three"] +//! [3] + + +//! [4] +QLinkedList list; +list.prepend("one"); +list.prepend("two"); +list.prepend("three"); +// list: ["three", "two", "one"] +//! [4] + + +//! [5] +QList list; +list << "sun" << "cloud" << "sun" << "rain"; +list.removeAll("sun"); +// list: ["cloud", "rain"] +//! [5] + + +//! [6] +QList list; +list << "sun" << "cloud" << "sun" << "rain"; +list.removeOne("sun"); +// list: ["cloud", "sun", "rain"] +//! [6] + + +//! [7] +QLinkedList list; +list.append("January"); +list.append("February"); +... +list.append("December"); + +QLinkedList::iterator i; +for (i = list.begin(); i != list.end(); ++i) + cout << *i << endl; +//! [7] + + +//! [8] +QLinkedList list; +... +QLinkedList::iterator it = qFind(list.begin(), + list.end(), "Joel"); +if (it != list.end()) + cout << "Found Joel" << endl; +//! [8] + + +//! [9] +QLinkedList::iterator i; +for (i = list.begin(); i != list.end(); ++i) + *i += 2; +//! [9] + + +//! [10] +QLinkedList list; +... +QLinkedList::iterator i = list.begin(); +while (i != list.end()) { + if ((*i).startsWith("_")) + i = list.erase(i); + else + ++i; +} +//! [10] + + +//! [11] +QLinkedList::iterator i = list.begin(); +while (i != list.end()) { + QLinkedList::iterator previous = i; + ++i; + if ((*previous).startsWith("_")) + list.erase(previous); +} +//! [11] + + +//! [12] +// WRONG +while (i != list.end()) { + if ((*i).startsWith("_")) + list.erase(i); + ++i; +} +//! [12] + + +//! [13] +if (*it == "Hello") + *it = "Bonjour"; +//! [13] + + +//! [14] +QLinkedList list; +list.append("January"); +list.append("February"); +... +list.append("December"); + +QLinkedList::const_iterator i; +for (i = list.constBegin(); i != list.constEnd(); ++i) + cout << *i << endl; +//! [14] + + +//! [15] +QLinkedList list; +... +QLinkedList::iterator it = qFind(list.constBegin(), + list.constEnd(), "Joel"); +if (it != list.constEnd()) + cout << "Found Joel" << endl; +//! [15] + + +//! [16] +std::list stdlist; +list.push_back(1.2); +list.push_back(0.5); +list.push_back(3.14); + +QLinkedList list = QLinkedList::fromStdList(stdlist); +//! [16] + + +//! [17] +QLinkedList list; +list << 1.2 << 0.5 << 3.14; + +std::list stdlist = list.toStdList(); +//! [17] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qlistdata.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qlistdata.cpp new file mode 100644 index 0000000..d90d932 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qlistdata.cpp @@ -0,0 +1,277 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QList integerList; +QList dateList; +//! [0] + + +//! [1] +QList list; +list << "one" << "two" << "three"; +// list: ["one", "two", "three"] +//! [1] + + +//! [2] +if (list[0] == "Bob") + list[0] = "Robert"; +//! [2] + + +//! [3] +for (int i = 0; i < list.size(); ++i) { + if (list.at(i) == "Jane") + cout << "Found Jane at position " << i << endl; +} +//! [3] + + +//! [4] +QList list; +... +while (!list.isEmpty()) + delete list.takeFirst(); +//! [4] + + +//! [5] +int i = list.indexOf("Jane"); +if (i != -1) + cout << "First occurrence of Jane is at position " << i << endl; +//! [5] + + +//! [6] +QList list; +list.append("one"); +list.append("two"); +list.append("three"); +// list: ["one", "two", "three"] +//! [6] + + +//! [7] +QList list; +list.prepend("one"); +list.prepend("two"); +list.prepend("three"); +// list: ["three", "two", "one"] +//! [7] + + +//! [8] +QList list; +list << "alpha" << "beta" << "delta"; +list.insert(2, "gamma"); +// list: ["alpha", "beta", "gamma", "delta"] +//! [8] + + +//! [9] +QList list; +list << "sun" << "cloud" << "sun" << "rain"; +list.removeAll("sun"); +// list: ["cloud", "rain"] +//! [9] + + +//! [10] +QList list; +list << "sun" << "cloud" << "sun" << "rain"; +list.removeOne("sun"); +// list: ["cloud", ,"sun", "rain"] +//! [10] + + +//! [11] +QList list; +list << "A" << "B" << "C" << "D" << "E" << "F"; +list.move(1, 4); +// list: ["A", "C", "D", "E", "B", "F"] +//! [11] + + +//! [12] +QList list; +list << "A" << "B" << "C" << "D" << "E" << "F"; +list.swap(1, 4); +// list: ["A", "E", "C", "D", "B", "F"] +//! [12] + + +//! [13] +QList list; +list << "A" << "B" << "C" << "B" << "A"; +list.indexOf("B"); // returns 1 +list.indexOf("B", 1); // returns 1 +list.indexOf("B", 2); // returns 3 +list.indexOf("X"); // returns -1 +//! [13] + + +//! [14] +QList list; +list << "A" << "B" << "C" << "B" << "A"; +list.lastIndexOf("B"); // returns 3 +list.lastIndexOf("B", 3); // returns 3 +list.lastIndexOf("B", 2); // returns 1 +list.lastIndexOf("X"); // returns -1 +//! [14] + + +//! [15] +QList list; +list.append("January"); +list.append("February"); +... +list.append("December"); + +QList::iterator i; +for (i = list.begin(); i != list.end(); ++i) + cout << *i << endl; +//! [15] + + +//! [16] +QList::iterator i; +for (i = list.begin(); i != list.end(); ++i) + *i += 2; +//! [16] + + +//! [17] +QList list; +... +qDeleteAll(list.begin(), list.end()); +//! [17] + + +//! [18] +if (*it == "Hello") + *it = "Bonjour"; +//! [18] + + +//! [19] +QList list; +list.append("January"); +list.append("February"); +... +list.append("December"); + +QList::const_iterator i; +for (i = list.constBegin(); i != list.constEnd(); ++i) + cout << *i << endl; +//! [19] + + +//! [20] +QList list; +... +qDeleteAll(list.constBegin(), list.constEnd()); +//! [20] + + +//! [21] +QVector vect; +vect << 20.0 << 30.0 << 40.0 << 50.0; + +QList list = QVector::fromVector(vect); +// list: [20.0, 30.0, 40.0, 50.0] +//! [21] + + +//! [22] +QStringList list; +list << "Sven" << "Kim" << "Ola"; + +QVector vect = list.toVector(); +// vect: ["Sven", "Kim", "Ola"] +//! [22] + + +//! [23] +QSet set; +set << 20.0 << 30.0 << 40.0 << ... << 70.0; + +QList list = QList::fromSet(set); +qSort(list); +//! [23] + + +//! [24] +QStringList list; +list << "Julia" << "Mike" << "Mike" << "Julia" << "Julia"; + +QSet set = list.toSet(); +set.contains("Julia"); // returns true +set.contains("Mike"); // returns true +set.size(); // returns 2 +//! [24] + + +//! [25] +std::list stdlist; +list.push_back(1.2); +list.push_back(0.5); +list.push_back(3.14); + +QList list = QList::fromStdList(stdlist); +//! [25] + + +//! [26] +QList list; +list << 1.2 << 0.5 << 3.14; + +std::list stdlist = list.toStdList(); +//! [26] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qlocale.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qlocale.cpp new file mode 100644 index 0000000..4be07da --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qlocale.cpp @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +egyptian = QLocale(QLocale.Arabic, QLocale.Egypt) +s1 = egyptian.toString(1.571429E+07, 'e') +s2 = egyptian.toString(10) + +(d, ok) = egyptian.toDouble(s1) +(i, ok) = egyptian.toInt(s2) +//! [0] + + +//! [1] +QLocale.setDefault(QLocale(QLocale.Hebrew, QLocale.Israel)) +hebrew = QLocale() # Constructs a default QLocale +s1 = hebrew.toString(15714.3, 'e') + +QLocale.setDefault(QLocale(QLocale.C)) +c = QLocale() +(d, ok) = c.toDouble("1234,56") # ok == false +(d, ok) = c.toDouble("1234.56") # ok == true, d == 1234.56 + +QLocale.setDefault(QLocale(QLocale.German)) +german = QLocale() +(d, ok) = german.toDouble("1234,56") # ok == true, d == 1234.56 +(d, ok) = german.toDouble("1234.56") # ok == true, d == 1234.56 + +QLocale.setDefault(QLocale(QLocale.English, QLocale.UnitedStates)) +english = QLocale() +string = '%s %s %10x' % (12345, english.toString(12345), 12345) +# string == "12345 12,345 3039" +//! [1] + + +//! [2] +korean = QLocale("ko") +swiss = QLocale("de_CH") +//! [2] + + +//! [3] +c = QLocale(QLocale.C) +(d, ok) = c.toDouble( "1234.56" ) # ok == true, d == 1234.56 +(d, ok) = c.toDouble( "1,234.56" ) # ok == true, d == 1234.56 +(d, ok) = c.toDouble( "1234,56" ) # ok == false + +german = QLocale(QLocale.German) +(d, ok) = german.toDouble( "1234,56" ) # ok == true, d == 1234.56 +(d, ok) = german.toDouble( "1.234,56" ) # ok == true, d == 1234.56 +(d, ok) = german.toDouble( "1234.56" ) # ok == false + +(d, ok) = german.toDouble( "1.234" ) # ok == true, d == 1234.0 +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qmap.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qmap.cpp new file mode 100644 index 0000000..5bd7dc6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qmap.cpp @@ -0,0 +1,323 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QMap map; +//! [0] + + +//! [1] +map["one"] = 1; +map["three"] = 3; +map["seven"] = 7; +//! [1] + + +//! [2] +map.insert("twelve", 12); +//! [2] + + +//! [3] +int num1 = map["thirteen"]; +int num2 = map.value("thirteen"); +//! [3] + + +//! [4] +int timeout = 30; +if (map.contains("TIMEOUT")) + timeout = map.value("TIMEOUT"); +//! [4] + + +//! [5] +int timeout = map.value("TIMEOUT", 30); +//! [5] + + +//! [6] +// WRONG +QMap map; +... +for (int i = 0; i < 1000; ++i) { + if (map[i] == okButton) + cout << "Found button at index " << i << endl; +} +//! [6] + + +//! [7] +QMapIterator i(map); +while (i.hasNext()) { + i.next(); + cout << i.key() << ": " << i.value() << endl; +} +//! [7] + + +//! [8] +QMap::const_iterator i = map.constBegin(); +while (i != map.constEnd()) { + cout << i.key() << ": " << i.value() << endl; + ++i; +} +//! [8] + + +//! [9] +map.insert("plenty", 100); +map.insert("plenty", 2000); +// map.value("plenty") == 2000 +//! [9] + + +//! [10] +QList values = map.values("plenty"); +for (int i = 0; i < values.size(); ++i) + cout << values.at(i) << endl; +//! [10] + + +//! [11] +QMap::iterator i = map.find("plenty"); +while (i != map.end() && i.key() == "plenty") { + cout << i.value() << endl; + ++i; +} +//! [11] + + +//! [12] +QMap map; +... +foreach (int value, map) + cout << value << endl; +//! [12] + + +//! [13] +#ifndef EMPLOYEE_H +#define EMPLOYEE_H + +class Employee +{ +public: + Employee() {} + Employee(const QString &name, const QDate &dateOfBirth); + ... + +private: + QString myName; + QDate myDateOfBirth; +}; + +inline bool operator<(const Employee &e1, const Employee &e2) +{ + if (e1.name() != e2.name()) + return e1.name() < e2.name(); + return e1.dateOfBirth() < e2.dateOfBirth(); +} + +#endif // EMPLOYEE_H +//! [13] + + +//! [14] +QMap map; +... +QMap::const_iterator i = map.find("HDR"); +while (i != map.end() && i.key() == "HDR") { + cout << i.value() << endl; + ++i; +} +//! [14] + + +//! [15] +QMap map; +map.insert(1, "one"); +map.insert(5, "five"); +map.insert(10, "ten"); + +map.lowerBound(0); // returns iterator to (1, "one") +map.lowerBound(1); // returns iterator to (1, "one") +map.lowerBound(2); // returns iterator to (5, "five") +map.lowerBound(10); // returns iterator to (10, "ten") +map.lowerBound(999); // returns end() +//! [15] + + +//! [16] +QMap map; +... +QMap::const_iterator i = map.lowerBound("HDR"); +QMap::const_iterator upperBound = map.upperBound("HDR"); +while (i != upperBound) { + cout << i.value() << endl; + ++i; +} +//! [16] + + +//! [17] +QMap map; +map.insert(1, "one"); +map.insert(5, "five"); +map.insert(10, "ten"); + +map.upperBound(0); // returns iterator to (1, "one") +map.upperBound(1); // returns iterator to (5, "five") +map.upperBound(2); // returns iterator to (5, "five") +map.upperBound(10); // returns end() +map.upperBound(999); // returns end() +//! [17] + + +//! [18] +QMap map; +map.insert("January", 1); +map.insert("February", 2); +... +map.insert("December", 12); + +QMap::iterator i; +for (i = map.begin(); i != map.end(); ++i) + cout << i.key() << ": " << i.value() << endl; +//! [18] + + +//! [19] +QMap::iterator i; +for (i = map.begin(); i != map.end(); ++i) + i.value() += 2; +//! [19] + + +//! [20] +QMap::iterator i = map.begin(); +while (i != map.end()) { + if (i.key().startsWith("_")) + i = map.erase(i); + else + ++i; +} +//! [20] + + +//! [21] +QMap::iterator i = map.begin(); +while (i != map.end()) { + QMap::iterator prev = i; + ++i; + if (prev.key().startsWith("_")) + map.erase(prev); +} +//! [21] + + +//! [22] +// WRONG +while (i != map.end()) { + if (i.key().startsWith("_")) + map.erase(i); + ++i; +} +//! [22] + + +//! [23] +if (i.key() == "Hello") + i.value() = "Bonjour"; +//! [23] + + +//! [24] +QMap map; +map.insert("January", 1); +map.insert("February", 2); +... +map.insert("December", 12); + +QMap::const_iterator i; +for (i = map.constBegin(); i != map.constEnd(); ++i) + cout << i.key() << ": " << i.value() << endl; +//! [24] + + +//! [25] +QMultiMap map1, map2, map3; + +map1.insert("plenty", 100); +map1.insert("plenty", 2000); +// map1.size() == 2 + +map2.insert("plenty", 5000); +// map2.size() == 1 + +map3 = map1 + map2; +// map3.size() == 3 +//! [25] + + +//! [26] +QList values = map.values("plenty"); +for (int i = 0; i < values.size(); ++i) + cout << values.at(i) << endl; +//! [26] + + +//! [27] +QMultiMap::iterator i = map.find("plenty"); +while (i != map.end() && i.key() == "plenty") { + cout << i.value() << endl; + ++i; +} +//! [27] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qpoint.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qpoint.cpp new file mode 100644 index 0000000..e6a5e0c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qpoint.cpp @@ -0,0 +1,161 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +p = QPoint() + +p.setX(p.x() + 1) +p += QPoint(1, 0) +//! [0] + + +//! [1] +p = QPoint(1, 2) +#p.rx()--; // p becomes (0, 2) +//! [1] + + +//! [2] +p = QPoint(1, 2) +#p.ry()++; // p becomes (1, 3) +//! [2] + + +//! [3] +p = QPoint( 3, 7) +q = QPoint(-1, 4) +p += q # p becomes (2, 11) +//! [3] + + +//! [4] +p = QPoint( 3, 7) +q = QPoint(-1, 4) +p -= q # p becomes (4, 3) +//! [4] + + +//! [5] +p = QPoint(-1, 4) +p *= 2.5 # p becomes (-3, 10) +//! [5] + + +//! [6] +p = QPoint(-3, 10) +p /= 2.5 # p becomes (-1, 4) +//! [6] + + +//! [7] + +class MyWidget(QWidget): + + self.oldPosition = QPointer() + + # event : QMouseEvent + def mouseMoveEvent(QMouseEvent event): + point = event.pos() - self.oldPosition + if (point.manhattanLength() > 3): + # the mouse has moved more than 3 pixels since the oldPosition + pass +//! [7] + + +//! [8] +trueLength = sqrt(pow(x(), 2) + pow(y(), 2)) +//! [8] + + +//! [9] +p = QPointF() + +p.setX(p.x() + 1.0) +p += QPointF(1.0, 0.0) +#p.rx()++; +//! [9] + + +//! [10] + p = QPointF(1.1, 2.5) + #p.rx()--; // p becomes (0.1, 2.5) +//! [10] + + +//! [11] +p = QPointF(1.1, 2.5) +#p.ry()++; // p becomes (1.1, 3.5) +//! [11] + + +//! [12] +p = QPointF( 3.1, 7.1) +q = QPointF(-1.0, 4.1) +p += q # p becomes (2.1, 11.2) +//! [12] + + +//! [13] +p = QPointF( 3.1, 7.1) +q = QPointF(-1.0, 4.1) +p -= q # p becomes (4.1, 3.0) +//! [13] + + +//! [14] +p = QPointF(-1.1, 4.1) +p *= 2.5 # p becomes (-2.75, 10.25) +//! [14] + + +//! [15] +p = QPointF(-2.75, 10.25) +p /= 2.5 # p becomes (-1.1, 4.1) +//! [15] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qqueue.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qqueue.cpp new file mode 100644 index 0000000..a0ea405 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qqueue.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QQueue queue; +queue.enqueue(1); +queue.enqueue(2); +queue.enqueue(3); +while (!queue.isEmpty()) + cout << queue.dequeue() << endl; +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qrect.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qrect.cpp new file mode 100644 index 0000000..a388275 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qrect.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +r1 = QRect(100, 200, 11, 16) +r2 = QRect(QPoint(100, 200), QSize(11, 16)) +//! [0] + + +//! [1] +r1 = QRectF(100, 200, 11, 16) +r2 = QRectF(QPoint(100, 200), QSize(11, 16)) +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qregexp.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qregexp.cpp new file mode 100644 index 0000000..d3f45bb --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qregexp.cpp @@ -0,0 +1,225 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +rx = QRegExp("(\\d+)") +txt = "Offsets: 12 14 99 231 7" +lst = [] + +pos = rx.indexIn(txt, 0) + +while pos != -1: + lst.append(rx.cap(1)) + pos += rx.matchedLength() + pos = rx.indexIn(txt, pos) + +# lst: ["12", "14", "99", "231", "7"] +//! [0] + + +//! [1] +rx = QRegExp("*.txt") +rx.setPatternSyntax(QRegExp.Wildcard) +rx.exactMatch("README.txt") # returns True +rx.exactMatch("welcome.txt.bak") # returns False +//! [1] + + +//! [2] +rx = QRegExp("ro+m") +rx.setMinimal(True) +//! [2] + + +//! [3] +mark = QRegExp("\\b" # word boundary + "[Mm]ark" # the word we want to match + ) +//! [3] + + +//! [4] +rx = QRegExp("^\\d\\d?$") # match integers 0 to 99 +rx.indexIn("123") # returns -1 (no match) +rx.indexIn("-6") # returns -1 (no match) +rx.indexIn("6") # returns 0 (matched as position 0) +//! [4] + + +//! [5] +rx = QRegExp("^\\S+$") # match strings without whitespace +rx.indexIn("Hello world") # returns -1 (no match) +rx.indexIn("This_is-OK") # returns 0 (matched at position 0) +//! [5] + + +//! [6] +rx = QRegExp("\\b(mail|letter|correspondence)\\b") +rx.indexIn("I sent you an email") # returns -1 (no match) +rx.indexIn("Please write the letter") # returns 17 +//! [6] + + +//! [7] +captured = rx.cap(1) # captured == "letter" +//! [7] + + +//! [8] +rx = QRegExp("&(?!amp;)") # match ampersands but not & +line1 = QString("This & that") +line1.replace(rx, "&") # line1 == "This & that" +line2 = QString("His & hers & theirs") +line2.replace(rx, "&") # line2 == "His & hers & theirs" +//! [8] + + +//! [9] +txt = QString("One Eric another Eirik, and an Ericsson. How many Eiriks, Eric?") +rx = QRegExp("\\b(Eric|Eirik)\\b") # match Eric or Eirik +pos = 0 # where we are in the string +count = 0 # how many Eric and Eirik's we've counted + +while pos >= 0: + pos = rx.indexIn(txt, pos) + if pos >= 0: + pos += 1 # move along in str + count += 1 # count our Eric or Eirik +//! [9] + + +//! [10] +txt = "The Qt Company Ltd\tqt.io\tFinland" +rx.setPattern("^([^\t]+)\t([^\t]+)\t([^\t]+)$"); +if rx.indexIn(txt) != -1: + company = rx.cap(1) + web = rx.cap(2) + country = rx.cap(3) +//! [10] + + +//! [11] +field = txt.split("\t") +//! [11] + + +//! [12] +rx = QRegExp("*.html") +rx.setPatternSyntax(QRegExp.Wildcard) +rx.exactMatch("index.html") # returns True +rx.exactMatch("default.htm") # returns False +rx.exactMatch("readme.txt") # returns False +//! [12] + + +//! [13] +txt = QString("offsets: 1.23 .50 71.00 6.00") +rx = QRegExp("\\d*\\.\\d+") # primitive floating point matching +count = 0 +pos = rx.indexIn(txt, 0) +while pos != -1: + count += 1 + pos += rx.matchedLength() + pos = rx.indexIn(txt, pos) + +# pos will be 9, 14, 18 and finally 24; count will end up as 4 +//! [13] + + +//! [14] +rx = QRegExp("(\\d+)(\\s*)(cm|inch(es)?)") +pos = rx.indexIn("Length: 36 inches") +lst = rx.capturedTexts() +# lst is now ("36 inches", "36", " ", "inches", "es") +//! [14] + + +//! [15] +rx = QRegExp("(\\d+)(?:\\s*)(cm|inch(?:es)?)") +pos = rx.indexIn("Length: 36 inches") +lst = rx.capturedTexts() +# lst is now ("36 inches", "36", "inches") +//! [15] + + +//! [16] +for a in rx.capturedTexts(): + myProcessing(a) +//! [16] + + +//! [17] +rxlen = QRegExp("(\\d+)(?:\\s*)(cm|inch)") +pos = rxlen.indexIn("Length: 189cm") +if pos > -1: + value = rxlen.cap(1) # "189" + unit = rxlen.cap(2) # "cm" +//! [17] + + +//! [18] +rx = QRegExp("/([a-z]+)/([a-z]+)") +rx.indexIn("Output /dev/null") # returns 7 (position of /dev/null) +rx.pos(0) # returns 7 (position of /dev/null) +rx.pos(1) # returns 8 (position of dev) +rx.pos(2) # returns 12 (position of null) +//! [18] + + +//! [19] +s1 = QRegExp.escape("bingo") # s1 == "bingo" +s2 = QRegExp.escape("f(x)") # s2 == "f\\(x\\)" +//! [19] + + +//! [20] +rx = QRegExp("(" + QRegExp.escape(name) + "|" + QRegExp.escape(alias) + ")") +//! [20] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qsize.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qsize.cpp new file mode 100644 index 0000000..ef8b297 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qsize.cpp @@ -0,0 +1,146 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +t1 = QSize(10, 12) +t1.scale(60, 60, Qt.IgnoreAspectRatio) +# t1 is (60, 60) + +t2 = QSize(10, 12) +t2.scale(60, 60, Qt.KeepAspectRatio) +# t2 is (50, 60) + +t3 = QSize(10, 12) +t3.scale(60, 60, Qt.KeepAspectRatioByExpanding) +# t3 is (60, 72) +//! [0] + + +//! [1] +size = QSize(100, 10) +size.rwidth() += 20 + +#size becomes (120,10) +//! [1] + + +//! [2] +size = QSize(100, 10) +size.rheight() += 5 + +# size becomes (100,15) +//! [2] + + +//! [3] +s = QSize( 3, 7) +r = QSize(-1, 4) +s += r + +# s becomes (2,11) +//! [3] + + +//! [4] +s = QSize( 3, 7) +r = QSize(-1, 4) +s -= r + +# s becomes (4,3) +//! [4] + + +//! [5] +t1 = QSizeF(10, 12) +t1.scale(60, 60, Qt.IgnoreAspectRatio) +# t1 is (60, 60) + +t2 = QSizeF(10, 12) +t2.scale(60, 60, Qt.KeepAspectRatio) +# t2 is (50, 60) + +t3 = QSizeF(10, 12) +t3.scale(60, 60, Qt.KeepAspectRatioByExpanding) +# t3 is (60, 72) +//! [5] + + +//! [6] +size = QSizeF(100.3, 10) +size.rwidth() += 20.5 + +# size becomes (120.8,10) +//! [6] + + +//! [7] +size = QSizeF(100, 10.2) +size.rheight() += 5.5 + +# size becomes (100,15.7) +//! [7] + + +//! [8] +s = QSizeF( 3, 7) +r = QSizeF(-1, 4) +s += r + +# s becomes (2,11) +//! [8] + + +//! [9] +s = QSizeF( 3, 7) +r = QSizeF(-1, 4) +s -= r + +# s becomes (4,3) +//! [9] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qstring.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qstring.cpp new file mode 100644 index 0000000..8225d16 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qstring.cpp @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +DEFINES += QT_NO_CAST_FROM_ASCII \ + QT_NO_CAST_TO_ASCII +//! [0] + + +//! [1] +url = QLatin1String("http://www.unicode.org/") +//! [1] + + +//! [2] +d = 12.34; +str = QString("delta: %1").arg(d, 0, 'E', 3) +# str == "delta: 1.234E+01" +//! [2] + + +//! [3] +if str == "auto" || str == "extern" || str == "static" || str == "register": + ... +//! [3] + + +//! [4] +if str == QString("auto") || + str == QString("extern") || + str == QString("static") || + str == QString("register"): + ... +//! [4] + + +//! [5] +if str == QLatin1String("auto") || + str == QLatin1String("extern") || + str == QLatin1String("static") || + str == QLatin1String("register"): + ... +//! [5] + + +//! [6] +label = QLabel(QLatin1String("MOD"), self) +//! [6] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qtimeline.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qtimeline.cpp new file mode 100644 index 0000000..480731a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qtimeline.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +... +progressBar = QProgressBar(self) +progressBar.setRange(0, 100) + +# Construct a 1-second timeline with a frame range of 0 - 100 +timeLine = QTimeLine(1000, self) +timeLine.setFrameRange(0, 100) +timeLine.frameChanged[int].connect(progressBar.setValue) + +# Clicking the push button will start the progress bar animation +pushButton = QPushButton(QObject.tr("Start animation"), self) +pushButton.clicked.connect(timeLine.start) +... +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qvector.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qvector.cpp new file mode 100644 index 0000000..57ffcae --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_tools_qvector.cpp @@ -0,0 +1,193 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QVector integerVector; +QVector stringVector; +//! [0] + + +//! [1] +QVector vector(200); +//! [1] + + +//! [2] +QVector vector(200, "Pass"); +//! [2] + + +//! [3] +if (vector[0] == "Liz") + vector[0] = "Elizabeth"; +//! [3] + + +//! [4] +for (int i = 0; i < vector.size(); ++i) { + if (vector.at(i) == "Alfonso") + cout << "Found Alfonso at position " << i << endl; +} +//! [4] + + +//! [5] +int i = vector.indexOf("Harumi"); +if (i != -1) + cout << "First occurrence of Harumi is at position " << i << endl; +//! [5] + + +//! [6] +QVector vector(10); +int *data = vector.data(); +for (int i = 0; i < 10; ++i) + data[i] = 2 * i; +//! [6] + + +//! [7] +QVector vector(0); +vector.append("one"); +vector.append("two"); +vector.append("three"); +// vector: ["one", "two", "three"] +//! [7] + + +//! [8] +QVector vector; +vector.prepend("one"); +vector.prepend("two"); +vector.prepend("three"); +// vector: ["three", "two", "one"] +//! [8] + + +//! [9] +QVector vector; +vector << "alpha" << "beta" << "delta"; +vector.insert(2, "gamma"); +// vector: ["alpha", "beta", "gamma", "delta"] +//! [9] + + +//! [10] +QVector vector; +vector << 2.718 << 1.442 << 0.4342; +vector.insert(1, 3, 9.9); +// vector: [2.718, 9.9, 9.9, 9.9, 1.442, 0.4342] +//! [10] + + +//! [11] +QVector vector(3); +vector.fill("Yes"); +// vector: ["Yes", "Yes", "Yes"] + +vector.fill("oh", 5); +// vector: ["oh", "oh", "oh", "oh", "oh"] +//! [11] + + +//! [12] +QVector vector; +vector << "A" << "B" << "C" << "B" << "A"; +vector.indexOf("B"); // returns 1 +vector.indexOf("B", 1); // returns 1 +vector.indexOf("B", 2); // returns 3 +vector.indexOf("X"); // returns -1 +//! [12] + + +//! [13] +QList vector; +vector << "A" << "B" << "C" << "B" << "A"; +vector.lastIndexOf("B"); // returns 3 +vector.lastIndexOf("B", 3); // returns 3 +vector.lastIndexOf("B", 2); // returns 1 +vector.lastIndexOf("X"); // returns -1 +//! [13] + + +//! [14] +QVector vect; +vect << "red" << "green" << "blue" << "black"; + +QList list = vect.toList(); +// list: ["red", "green", "blue", "black"] +//! [14] + + +//! [15] +QStringList list; +list << "Sven" << "Kim" << "Ola"; + +QVector vect = QVector::fromList(list); +// vect: ["Sven", "Kim", "Ola"] +//! [15] + + +//! [16] +std::vector stdvector; +vector.push_back(1.2); +vector.push_back(0.5); +vector.push_back(3.14); + +QVector vector = QVector::fromStdVector(stdvector); +//! [16] + + +//! [17] +QVector vector; +vector << 1.2 << 0.5 << 3.14; + +std::vector stdvector = vector.toStdVector(); +//! [17] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_xml_qxmlstream.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_xml_qxmlstream.cpp new file mode 100644 index 0000000..f03a906 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_corelib_xml_qxmlstream.cpp @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +xml = QXmlStreamReader() +... +while not xml.atEnd(): + xml.readNext(); + ... # do processing + +if xml.hasError(): + ... # do error handling + +//! [0] + + +//! [1] +writeStartElement(qualifiedName) +writeCharacters(text) +writeEndElement() +//! [1] + + +//! [2] +writeStartElement(namespaceUri, name) +writeCharacters(text) +writeEndElement() +//! [2] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_accessible_qaccessible.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_accessible_qaccessible.cpp new file mode 100644 index 0000000..9971983 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_accessible_qaccessible.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +child = QAccessibleInterface() +targetChild = object.navigate(Accessible.Child, 1, child) +if child: + # ... + del child +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qabstractprintdialog.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qabstractprintdialog.cpp new file mode 100644 index 0000000..db6a8a8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qabstractprintdialog.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +printDialog = QPrintDialog(printer, parent) +if printDialog.exec_() == QDialog.Accepted: + # print ... +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp new file mode 100644 index 0000000..dd5f81b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp @@ -0,0 +1,136 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +fileName = QFileDialog.getOpenFileName(self, + tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)")) +//! [0] + + +//! [1] +"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)" +//! [1] + + +//! [2] +dialog = QFileDialog(self) +dialog.setFileMode(QFileDialog.AnyFile) +//! [2] + + +//! [3] +dialog.setNameFilter(tr("Images (*.png *.xpm *.jpg)")) +//! [3] + + +//! [4] +dialog.setViewMode(QFileDialog.Detail) +//! [4] + + +//! [5] +if dialog.exec_(): + fileNames = dialog.selectedFiles() +//! [5] + + +//! [6] +dialog.setNameFilter("All C++ files (*.cpp *.cc *.C *.cxx *.c++)") +dialog.setNameFilter("*.cpp *.cc *.C *.cxx *.c++") +//! [6] + + +//! [7] +filters = QStringList() +filters << "Image files (*.png *.xpm *.jpg)" + << "Text files (*.txt)" + << "Any files (*)" + +dialog = QFileDialog(this) +dialog.setNameFilters(filters) +dialog.exec_() +//! [7] + + +//! [8] +fileName = QFileDialog.getOpenFileName(self, tr("Open File"), + "/home", + tr("Images (*.png *.xpm *.jpg)")) +//! [8] + + +//! [9] +files = QFileDialog.getOpenFileNames(self, + "Select one or more files to open", + "/home", + "Images (*.png *.xpm *.jpg)") +//! [9] + + +//! [10] +for it in list: + myProcessing(it) + it++ +//! [10] + + +//! [11] +fileName = QFileDialog.getSaveFileName(self, tr("Save F:xile"), + "/home/jana/untitled.png", + tr("Images (*.png *.xpm *.jpg)")) +//! [11] + + +//! [12] +dir = QFileDialog.getExistingDirectory(self, tr("Open Directory"), + "/home", + QFileDialog.ShowDirsOnly + | QFileDialog.DontResolveSymlinks) +//! [12] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qfontdialog.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qfontdialog.cpp new file mode 100644 index 0000000..6c91d21 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qfontdialog.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + +(ok, font) = QFontDialog.getFont(QFont("Helvetica [Cronyx]", 10), self) +if ok: + # the user clicked OK and font is set to the font the user selected +else: + # the user canceled the dialog; font is set to the initial + # value, in this case Helvetica [Cronyx], 10 +//! [0] + + +//! [1] +myWidget.setFont(QFontDialog.getFont(0, myWidget.font())) +//! [1] + + +//! [2] +(ok, font) = QFontDialog.getFont(QFont("Times", 12), self) +if ok: + # font is set to the font the user selected +else: + # the user canceled the dialog; font is set to the initial + # value, in this case Times, 12. +//! [2] + + +//! [3] +myWidget.setFont(QFontDialog.getFont(0, myWidget.font())) +//! [3] + + +//! [4] + +(ok, font) = QFontDialog.getFont(self) +if ok: + # font is set to the font the user selected +else: + # the user canceled the dialog; font is set to the default + # application font, QApplication.font() +//! [4] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp new file mode 100644 index 0000000..55cdf81 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp @@ -0,0 +1,152 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +ret = QMessageBox.warning(self, self.tr("My Application"), + self.tr("The document has been modified.\n" + \ + "Do you want to save your changes?"), + QMessageBox.Save | QMessageBox.Discard + | QMessageBox.Cancel, + QMessageBox.Save) +//! [0] + + +//! [1] +msgBox = QMessageBox() +msgBox.setStandardButtons(QMessageBox.Yes | QMessageBox.No) +result = msgBox.exec_() + +if result == QMessageBox.Yes: + # yes was clicked +elif result == QMessageBox.No: + # no was clicked +else: + # should never be reached +//! [1] + + +//! [2] +msgBox = QMessageBox() +connectButton = msgBox.addButton(self.tr("Connect"), QMessageBox.ActionRole) +abortButton = msgBox.addButton(QMessageBox.Abort) + +msgBox.exec_() + +if msgBox.clickedButton() == connectButton: + # connect +elif msgBox.clickedButton() == abortButton: + # abort +} +//! [2] + + +//! [3] +messageBox = QMessageBox(self) +disconnectButton = messageBox.addButton(self.tr("Disconnect"), + QMessageBox.ActionRole) +... +messageBox.exec_() +if messageBox.clickedButton() == disconnectButton: + ... + +//! [3] + + +//! [4] +#include +#include + +int main(int argc, char *argv[]) +{ +# Not Supported by PySide + QT_REQUIRE_VERSION(argc, argv, "4.0.2") + + QApplication app(argc, argv); + ... + return app.exec(); +} +//! [4] + +//! [5] +msgBox = QMessageBox() +msgBox.setText("The document has been modified.") +msgBox.exec_() +//! [5] + +//! [6] +msgBox = QMessageBox() +msgBox.setText("The document has been modified.") +msgBox.setInformativeText("Do you want to save your changes?") +msgBox.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel) +msgBox.setDefaultButton(QMessageBox.Save) +ret = msgBox.exec_() +//! [6] + +//! [7] + +if ret == QMessageBox.Save: + # Save was clicked +elif ret == QMessageBox.Discard: + # Don't save was clicked +elif ret == QMessageBox.Cancel: + # cancel was clicked +else: + # should never be reached + +//! [7] + +//! [9] +msgBox = QMessageBox(self) +msgBox.setText(tr("The document has been modified.\n" + \ + "Do you want to save your changes?")) +msgBox.setStandardButtons(QMessageBox.Save | QMessageBox.Discard + | QMessageBox.Cancel) +msgBox.setDefaultButton(QMessageBox.Save) +//! [9] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qwizard.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qwizard.cpp new file mode 100644 index 0000000..9db90a7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_dialogs_qwizard.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def nextId(self): + id = self.currentId() + if id == Page_Intro: + if field("intro.evaluate").toBool(): + return Page_Evaluate + else: + return Page_Register + elif id == Page_Evaluate: + return Page_Conclusion + elif id == Page_Register: + if field("register.upgradeKey").toString().isEmpty(): + return Page_Details + else: + return Page_Conclusion + elif id == Page_Details: + return Page_Conclusion + else: + return -1 +//! [0] + + +//! [1] +class MyWizard(QWizard): + def __init__(self, parent): + QWizard.__ini__(self, parent) + ... + layout = [QWizard.Stretch, QWizard.BackButton, QWizard.CancelButton, QWizard.NextButton, QWizard.FinishButton] + setButtonLayout(layout); + ... +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_effects_qgraphicseffect.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_effects_qgraphicseffect.cpp new file mode 100644 index 0000000..d4b47fa --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_effects_qgraphicseffect.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def draw(self, painter): + # Fully opaque draw directly without going through a pixmap. + if qFuzzyCompare(self.opacity, 1): + drawSource(painter) + return + # ... +//! [0] + +//! [1] +def draw(self, painter): + # ... + offset = QPoint() + if self.sourceIsPixmap(): + # No point in drawing in device coordinates (pixmap will be scaled anyways). + pixmap = sourcePixmap(Qt.LogicalCoordinates, offset) + ... + painter.drawPixmap(offset, pixmap) + else: + # Draw pixmap in device coordinates to avoid pixmap scaling + pixmap = sourcePixmap(Qt.DeviceCoordinates, offset) + painter.setWorldTransform(QTransform()) + # ... + painter.drawPixmap(offset, pixmap) + # ... +//! [1] + +//! [2] +# ... +alphaGradient = QLinearGradient(rect.topLeft(), rect.bottomLeft()) +alphaGradient.setColorAt(0.0, Qt.transparent) +alphaGradient.setColorAt(0.5, Qt.black) +alphaGradient.setColorAt(1.0, Qt.transparent) +effect = QGraphicsOpacityEffect() +effect.setOpacityMask(alphaGradient) +# ... +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsgridlayout.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsgridlayout.cpp new file mode 100644 index 0000000..4d138db --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsgridlayout.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +scene = QGraphicsScene() +textEdit = scene.addWidget(QTextEdit()) +pushButton = scene.addWidget(QPushButton()) + +layout = QGraphicsGridLayout() +layout.addItem(textEdit, 0, 0) +layout.addItem(pushButton, 0, 1) + +form = QGraphicsWidget() +form.setLayout(layout) +scene.addItem(form) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp new file mode 100644 index 0000000..59f26c7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp @@ -0,0 +1,249 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class SimpleItem(QGraphicsItem): + + def boundingRect(self): + penWidth = 1.0 + return QRectF(-10 - penWidth / 2, -10 - penWidth / 2, + 20 + penWidth, 20 + penWidth) + + def paint(self, painter, option, widget): + painter.drawRoundedRect(-10, -10, 20, 20, 5, 5) +//! [0] + + +//! [1] +class CustomItem(QGraphicsItem): + ... + self.Type = QGraphicsItem.UserType + 1 + + def type(self): + # Enable the use of qgraphicsitem_cast with this item. + return self.Type + ... + +//! [1] + + +//! [2] +item.setCursor(Qt.IBeamCursor) +//! [2] + + +//! [3] +item.setCursor(Qt.IBeamCursor) +//! [3] + + +//! [4] +rect = QGraphicsRectItem() +rect.setPos(100, 100) + +rect.sceneTransform().map(QPointF(0, 0)) +# returns QPointF(100, 100) + +rect.sceneTransform().inverted().map(QPointF(100, 100)) +# returns QPointF(0, 0); +//! [4] + + +//! [5] +rect = QGraphicsRectItem() +rect.setPos(100, 100) + +rect.deviceTransform(view.viewportTransform()).map(QPointF(0, 0)) +# returns the item's (0, 0) point in view's viewport coordinates + +rect.deviceTransform(view.viewportTransform()).inverted().map(QPointF(100, 100)) +# returns view's viewport's (100, 100) coordinate in item coordinates +//! [5] + + +//! [6] +# Rotate an item 45 degrees around (0, 0) +item.rotate(45) + +# Rotate an item 45 degrees around (x, y) +item.setTransform(QTransform().translate(x, y).rotate(45).translate(-x, -y)) +//! [6] + + +//! [7] +# Scale an item by 3x2 from its origin +item.scale(3, 2) + +# Scale an item by 3x2 from (x, y) +item.setTransform(QTransform().translate(x, y).scale(3, 2).translate(-x, -y)) +//! [7] + + +//! [8] +def boundingRect(self): + penWidth = 1.0 + return QRectF(-radius - penWidth / 2, -radius - penWidth / 2, + diameter + penWidth, diameter + penWidth) +//! [8] + + +//! [9] +def shape(self): + path = QPainterPath() + path.addEllipse(boundingRect()) + return path +//! [9] + + +//! [10] +def paint(self, painter, option, widget): + painter.drawRoundedRect(-10, -10, 20, 20, 5, 5) +//! [10] + + +//! [11] +ObjectName = 0; + +item = scene.itemAt(100, 50) +if len(item.data(ObjectName)) == 0: + if isinstance(ButtonItem, item): + item.setData(ObjectName, "Button") +//! [11] + + +//! [12] +scene = QGraphicsScene() +ellipse = scene.addEllipse(QRectF(-10, -10, 20, 20)) +line = scene.addLine(QLineF(-10, -10, 20, 20)) + +line.installSceneEventFilter(ellipse) +# line's events are filtered by ellipse's sceneEventFilter() function. + +ellipse.installSceneEventFilter(line) +# ellipse's events are filtered by line's sceneEventFilter() function. +//! [12] + + +//! [13] +def contextMenuEvent(self, event): + menu = QMenu() + removeAction = menu.addAction("Remove") + markAction = menu.addAction("Mark") + selectedAction = menu.exec(event.screenPos()) + // ... +//! [13] + + +//! [14] +def __init__(self): + self.setAcceptDrops(true) + ... + +def dragEnterEvent(self, event): + event.setAccepted(event.mimeData().hasFormat("text/plain")) +//! [14] + + +//! [15] +def itemChange(self, change, value): + if change == ItemPositionChange && scene(): + # value is the new position. + rect = scene().sceneRect() + if !rect.contains(value): + # Keep the item inside the scene rect. + value.setX(qMin(rect.right(), qMax(value.x(), rect.left()))) + value.setY(qMin(rect.bottom(), qMax(value.y(), rect.top()))) + return value + return QGraphicsItem.itemChange(self, change, value) +//! [15] + + +//! [16] +def setRadius(self, newRadius): + if radius != newRadius: + prepareGeometryChange() + radius = newRadius +//! [16] + + +//! [17] +# Group all selected items together +group = scene.createItemGroup(scene.selecteditems()) + +# Destroy the group, and delete the group item +scene.destroyItemGroup(group) +//! [17] + + +//! [QGraphicsItem type] +class CustomItem(QGraphicsItem): + ... + self.Type = QGraphicsItem.UserType + 1 + + def type(self): + # Enable the use of qgraphicsitem_cast with this item. + return self.Type + ... +//! [QGraphicsItem type] + +//! [18] +class QGraphicsPathItem (QAbstractGraphicsShapeItem): + Type = 2 + + def type(self): + return QGraphicsPathItem.Type +# ... +//! [18] + +//! [19] +xform = item.deviceTransform(view.viewportTransform()) +deviceRect = xform.mapRect(rect).toAlignedRect() +view.viewport().scroll(dx, dy, deviceRect) +//! [19] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicslinearlayout.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicslinearlayout.cpp new file mode 100644 index 0000000..8e7dcc4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicslinearlayout.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +scene = QGraphicsScene() +textEdit = scene.addWidget(QTextEdit()) +pushButton = scene.addWidget(QPushButton()) + +layout = QGraphicsLinearLayout() +layout.addItem(textEdit) +layout.addItem(pushButton) + +form = QGraphicsWidget() +form.setLayout(layout) +scene.addItem(form) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsproxywidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsproxywidget.cpp new file mode 100644 index 0000000..d0d21a6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsproxywidget.cpp @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +import sys + +QApplication app(sys.argv) + +tabWidget = QTabWidget() + +scene = QGraphicsScene() +proxy = scene.addWidget(tabWidget) + +view = QGraphicsView(scene) +view.show() + +return app.exec_() +//! [0] + +//! [1] +groupBox = QGroupBox("Contact Details") +numberLabel = QLabel("Telephone number") +numberEdit = QLineEdit() + +layout = QFormLayout() +layout.addRow(numberLabel, numberEdit) +groupBox.setLayout(layout) + +scene = QGraphicsScene() +proxy = scene.addWidget(groupBox) + +view = QGraphicsView(scene) +view.show() +//! [1] + +//! [2] +scene = QGraphicsScene() + +edit = QLineEdit() +proxy = scene.addWidget(edit) + +edit.isVisible() // returns true +proxy.isVisible() // also returns true + +edit.hide() + +edit.isVisible() // returns false +proxy.isVisible() // also returns false +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp new file mode 100644 index 0000000..1f1316b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp @@ -0,0 +1,125 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +scene = QGraphicsScene() +scene.addText("Hello, world!") + +view = QGraphicsView(&scene) +view.show() +//! [0] + + +//! [1] +scene = QGraphicsScene +scene.addItem(... +... +printer = QPrinter(QPrinter.HighResolution) +printer.setPaperSize(QPrinter.A4) + +painter = QPainter(printer) +scene.render(&painter) +//! [1] + + +//! [2] +segmentSize = sceneRect().size() / math.pow(2, depth - 1) +//! [2] + + +//! [3] +scene = QGraphicsScene() +view = QGraphicsView(scene) +view.show() + +# a blue background +scene.setBackgroundBrush(Qt.blue) + +# a gradient background +gradient = QRadialGradient(0, 0, 10) +gradient.setSpread(QGradient.RepeatSpread) +scene.setBackgroundBrush(gradient) +//! [3] + + +//! [4] +scene = QGraphicsScene() +view = QGraphicsView(scene) +view.show() + +# a white semi-transparent foreground +scene.setForegroundBrush(QColor(255, 255, 255, 127)) + +# a grid foreground +scene.setForegroundBrush(QBrush(Qt.lightGray, Qt.CrossPattern)) +//! [4] + + +//! [5] +class TileScene (QGraphicsScene): + # ... + def rectForTile(x, y): + # Return the rectangle for the tile at position (x, y). + return QRectF(x * self.tileWidth, y * self.tileHeight, self.tileWidth, self.tileHeight) + + def setTile(x, y, pixmap): + # Sets or replaces the tile at position (x, y) with pixmap. + if x >= 0 && x < self.numTilesH && y >= 0 && y < self.numTilesV: + self.tiles[y][x] = pixmap + invalidate(rectForTile(x, y), BackgroundLayer) + + def drawBackground(painter, exposed): + # Draws all tiles that intersect the exposed area. + for y in range(0, self.numTilesV: + for x in range(0, self.numTilesH: + rect = rectForTile(x, y) + if exposed.intersects(rect): + painter.drawPixmap(rect.topLeft(), tiles[y][x]) +//! [5] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicssceneevent.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicssceneevent.cpp new file mode 100644 index 0000000..afb5f9f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicssceneevent.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + +setDropAction(proposedAction()) + +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp new file mode 100644 index 0000000..d13cee8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp @@ -0,0 +1,136 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +scene = QGraphicsScene() +scene.addText("Hello, world!") + +view = QGraphicsView(scene) +view.show() +//! [0] + + +//! [1] +scene = QGraphicsScene() +scene.addRect(QRectF(-10, -10, 20, 20)) + +view = QGraphicsView(scene) +view.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform) +view.show() +//! [1] + + +//! [2] +view = QGraphicsView() +view.setBackgroundBrush(QImage(":/images/backgroundtile.png")) +view.setCacheMode(QGraphicsView.CacheBackground) +//! [2] + + +//! [3] +scene = QGraphicsScene() +scene.addText("GraphicsView rotated clockwise") + +view = QGraphicsView(scene) +view.rotate(90) # the text is rendered with a 90 degree clockwise rotation +view.show() +//! [3] + + +//! [4] +scene = QGraphicsScene() +scene.addItem(... +... + +view = QGraphicsView(scene) +view.show() +... + +printer = QPrinter(QPrinter.HighResolution) +printer.setPageSize(QPrinter.A4) +painter = QPainter(printer) + +# print, fitting the viewport contents into a full page +view.render(painter) + +# print the upper half of the viewport into the lower. +# half of the page. +viewport = view.viewport()->rect() +view.render(painter, + QRectF(0, printer.height() / 2, + printer.width(), printer.height() / 2), + viewport.adjusted(0, 0, 0, -viewport.height() / 2)) + +//! [4] + + +//! [5] +def mousePressEvent(self, event): + print "There are", items(event->pos()).size(), "items at position", mapToScene(event->pos()) +//! [5] + + +//! [6] +def mousePressEvent(self, event): + if (item = itemAt(event.pos()): + print "You clicked on item", item + else: + print "You didn't click on an item." +//! [6] + + +//! [7] +scene = QGraphicsScene() +scene.addText("GraphicsView rotated clockwise") + +view = QGraphicsView(scene) +view.rotate(90) # the text is rendered with a 90 degree clockwise rotation +view.show() +//! [7] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicswidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicswidget.cpp new file mode 100644 index 0000000..ffba7a1 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_graphicsview_qgraphicswidget.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class MyGroupBoxWidget (QStyleOptionGroupBox): + # ... + def initStyleOption(option): + QGraphicsWidget.initStyleOption(self, option) + if isinstance(option, QStyleOptionGroupBox): + # Add group box specific state. + box.flat = isFlat() + # ... +//! [0] + + +//! [1] +setTabOrder(a, b) # a to b +setTabOrder(b, c) # a to b to c +setTabOrder(c, d) # a to b to c to d +//! [1] + + +//! [2] +# WRONG +setTabOrder(c, d) # c to d +setTabOrder(a, b) # a to b AND c to d +setTabOrder(b, c) # a to b to c, but not c to d +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qbitmap.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qbitmap.cpp new file mode 100644 index 0000000..aab995f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qbitmap.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +uchar arrow_bits[] = { 0x3f, 0x1f, 0x0f, 0x1f, 0x3b, 0x71, 0xe0, 0xc0 }; +QBitmap bm(8, 8, arrow_bits, true); +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qicon.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qicon.cpp new file mode 100644 index 0000000..d40f485 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qicon.cpp @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +button = QToolButton() +button.setIcon(QIcon("open.xpm")) +//! [0] + + +//! [1] +button.setIcon(QIcon()) +//! [1] + + +//! [2] +def drawIcon(self, painter, pos): + enabledStatus = QIcon.Normal + if not isEnabled(): + enabledStatus = QIcon::Disabled + + onOff = QIcon.On + if not isOn(): + onOff = QIcon.Off + + pixmap = self.icon.pixmap(QSize(22, 22), enabledStatus, onOff) + painter.drawPixmap(pos, pixmap) +//! [2] + +//! [3] + undoicon = QIcon.fromTheme("edit-undo") +//! [3] + +//! [4] + undoicon = QIcon.fromTheme("edit-undo", QIcon(":/undo.png")) +//! [4] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qimage.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qimage.cpp new file mode 100644 index 0000000..e100624 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qimage.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +image = QImage(3, 3, QImage.Format_RGB32) + +value = qRgb(189, 149, 39) # 0xffbd9527 +image.setPixel(1, 1, value) + +value = qRgb(122, 163, 39) # 0xff7aa327 +image.setPixel(0, 1, value) +image.setPixel(1, 0, value) + +value = qRgb(237, 187, 51) # 0xffedba31 +image.setPixel(2, 1, value) +//! [0] + + +//! [1] +image = QImage(3, 3, QImage.Format_Indexed8) +value = qRgb(122, 163, 39) # 0xff7aa327 +image.setColor(0, value) + +value = qRgb(237, 187, 51) # 0xffedba31 +image.setColor(1, value) + +value = qRgb(189, 149, 39) # 0xffbd9527 +image.setColor(2, value) + +image.setPixel(0, 1, 0) +image.setPixel(1, 0, 0) +image.setPixel(1, 1, 2) +image.setPixel(2, 1, 1) +//! [1] + + +//! [2] +start_xpm = ["16 15 8 1", "a c #cec6bd", .... +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qimagereader.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qimagereader.cpp new file mode 100644 index 0000000..2e36ba8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qimagereader.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +reader = QImageReader() +reader.setFormat("png") # same as reader.setFormat("PNG") +//! [0] + + +//! [1] +reader = QImageReader("image.png") +# reader.format() == "png" +//! [1] + + +//! [2] +icon = QImage(64, 64, QImage.Format_RGB32) +reader = QImageReader("icon_64x64.bmp") +if reader.read(icon): + # Display icon +//! [2] + + +//! [3] +reader = QImageReader(":/image.png") +if reader.supportsOption(QImageIOHandler.Size): + print "Size:", str(reader.size()) +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qimagewriter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qimagewriter.cpp new file mode 100644 index 0000000..b656817 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qimagewriter.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +writer = QImageWriter() +writer.setFormat("png") # same as writer.setFormat("PNG") +//! [0] + + +//! [1] +image = QImage("some/image.jpeg") +writer = QImageWriter("images/outimage.png", "png") +writer.setText("Author", "John Smith") +writer.write(image) +//! [1] + + +//! [2] +writer = QImageWriter(fileName) +if writer.supportsOption(QImageIOHandler.Description): + writer.setText("Author", "John Smith") +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qmovie.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qmovie.cpp new file mode 100644 index 0000000..050213e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qmovie.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +label = QLabel() +movie = QMovie("animations/fire.gif") + +label.setMovie(movie) +movie.start() +//! [0] + + +//! [1] +movie = QMovie("racecar.gif") +movie.setSpeed(200) // 2x speed +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qpixmap.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qpixmap.cpp new file mode 100644 index 0000000..76d359a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qpixmap.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +static const char * const start_xpm[]={ + "16 15 8 1", + "a c #cec6bd", +.... +//! [0] + + +//! [1] +myPixmap = QPixmap() +myPixmap.setMask(myPixmap.createHeuristicMask()) +//! [1] + +//! [2] +pixmap = QPixmap("background.png") +exposed = QRegion() +pixmap.scroll(10, 10, pixmap.rect(), exposed) +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qpixmapcache.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qpixmapcache.cpp new file mode 100644 index 0000000..6112031 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qpixmapcache.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +pm = QPixmap() +if not QPixmapCache.find("my_big_image", pm): + pm.load("bigimage.png") + QPixmapCache.insert("my_big_image", pm) +painter.drawPixmap(0, 0, pm) +//! [0] + + +//! [1] +pm = QPixmap() +if not QPixmapCache.find("my_big_image", pm): + pm.load("bigimage.png") + QPixmapCache.insert("my_big_image", pm) +painter.drawPixmap(0, 0, pm) +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qpixmapfilter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qpixmapfilter.cpp new file mode 100644 index 0000000..4fa6e79 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_image_qpixmapfilter.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +myFilter = QPixmapColorFilter() +myFilter.setColor(QColor(128, 0, 0)) +myFilter.draw(painter, QPoint(0, 0), originalPixmap) +//! [0] + +//! [1] +myFilter = QPixmapConvolutionFilter() +kernel = [ + 0.0,-1.0, 0.0, + -1.0, 5.0,-1.0, + 0.0,-1.0, 0.0 + ] +myFilter.setConvolutionKernel(kernel, 3, 3) +myFilter.sdraw(painter, QPoint(0, 0), originalPixmap) +//! [1] + +//! [2] +myFilter = QPixmapDropShadowFilter() +myFilter.draw(painter, QPoint(0, 0), originalPixmap) +//! [2] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qabstractitemview.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qabstractitemview.cpp new file mode 100644 index 0000000..0d89ff7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qabstractitemview.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def resizeEvent(self, event): + horizontalScrollBar().setRange(0, realWidth - width()) + ... +//! [0] + +//! [1] +setIndexWidget(index, QLineEdit()) +... +setIndexWidget(index, QTextEdit()) +//! [1] + +//! [2] +m = view->selectionModel() +view->setModel(model()) +del m +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qdatawidgetmapper.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qdatawidgetmapper.cpp new file mode 100644 index 0000000..54687e7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qdatawidgetmapper.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +mapper = QDataWidgetMapper +mapper.setModel(model) +mapper.addMapping(mySpinBox, 0) +mapper.addMapping(myLineEdit, 1) +mapper.addMapping(myCountryChooser, 2) +mapper.toFirst() +//! [0] + + +//! [1] +mapper = QDataWidgetMapper() +mapper.setModel(myModel) +mapper.addMapping(nameLineEdit, 0) +mapper.addMapping(ageSpinBox, 1) +//! [1] + + +//! [2] +mapper = QDataWidgetMapper() +connect(myTableView.selectionModel(), SIGNAL("currentRowChanged(QModelIndex,QModelIndex)"), + mapper, SLOT(setCurrentModelIndex(QModelIndex))) +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp new file mode 100644 index 0000000..44d0594 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +Q_PROPERTY(QColor color READ color WRITE setColor USER true) +//! [0] + + +//! [1] +QItemEditorCreator *itemCreator = + new QItemEditorCreator("myProperty"); + +QItemEditorFactory *factory = new QItemEditorFactory; +//! [1] + + +//! [2] +QItemEditorFactory *editorFactory = new QItemEditorFactory; +QItemEditorCreatorBase *creator = new QStandardItemEditorCreator(); +editorFactory->registerEditor(QVariant::DateType, creator); +//! [2] + + +//! [3] +Q_PROPERTY(QColor color READ color WRITE setColor USER true) +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qitemselectionmodel.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qitemselectionmodel.cpp new file mode 100644 index 0000000..62861d9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qitemselectionmodel.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +selection = QItemSelection(topLeft, bottomRight) +//! [0] + + +//! [1] +selection = QItemSelection() +... +selection.select(topLeft, bottomRight) +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp new file mode 100644 index 0000000..42a64fb --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +model = QStandardItemModel (4, 4) +for row in range(4): + for column in range(4): + item = QStandardItem("row %d, column %d" % (row, column)) + model.setItem(row, column, item) +//! [0] + + +//! [1] +model = QStandardItemModel() +parentItem = model.invisibleRootItem() +for i in range(4): + item = QStandardItem("item %d" % i) + parentItem.appendRow(item) + parentItem = item +//! [1] + + +//! [2] +treeView = QTreeView(self) +treeView.setModel(myStandardItemModel) +treeView.clicked[QModelIndex].connect(self.clicked) +//! [2] + + +//! [3] +def clicked(self, index): + item = myStandardItemModel.itemFromIndex(index) + # Do stuff with the item ... +//! [3] + + +//! [4] +treeView.scrollTo(item.index()) +//! [4] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qtablewidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qtablewidget.cpp new file mode 100644 index 0000000..ca7c0db --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qtablewidget.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +setCellWidget(index, QLineEdit()) +... +setCellWidget(index, QTextEdit()) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qtreewidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qtreewidget.cpp new file mode 100644 index 0000000..ecdb794 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_itemviews_qtreewidget.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +treeWidget = QTreeWidget() +treeWidget.setColumnCount(1) +items = [] +for i in range(10): + items.append(QTreeWidgetItem(None, QStringList(QString("item: %1").arg(i)))) +treeWidget.insertTopLevelItems(None, items) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qaction.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qaction.cpp new file mode 100644 index 0000000..31a83e2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qaction.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +app = QApplication(argv) +app.setAttribute(Qt.AA_DontShowIconsInMenus) # Icons are *no longer shown* in menus +// ... +myAction = QAction() +// ... +myAction.setIcon(SomeIcon) +myAction.setIconVisibleInMenu(True) # Icon *will* be shown in menus for *this* action. +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qapplication.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qapplication.cpp new file mode 100644 index 0000000..fe02c93 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qapplication.cpp @@ -0,0 +1,167 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def main(): + useGUI = not '-no-gui' in sys.argv + app = QApplication(sys.argv) if useGUI else QCoreApplication(sys.argv) + ... + return app.exec_() +//! [0] + + +//! [1] +QApplication.setStyle(QWindowsStyle()) +//! [1] + + +//! [2] +def main(): + QApplication.setColorSpec(QApplication.ManyColor) + QApplication app(sys.argv) + ... + return app.exec_() + +//! [2] + + +//! [3] +class MyWidget (QWidget): + # ... + def sizeHint(self): + return QSize(80, 25).expandedTo(QApplication.globalStrut()) +//! [3] + + +//! [4] +def showAllHiddenTopLevelWidgets(): + for widget in QApplication.topLevelWidgets(): + if widget.isHidden(): + widget.show() +//! [4] + + +//! [5] +def updateAllWidgets(): + for widget in QApplication.allWidgets() + widget.update() +//! [5] + + +//! [6] +if __name__ == '__main__': + QApplication.setDesktopSettingsAware(False) + app = QApplication(sys.argv) + # ... + return app.exec_() +//! [6] + + +//! [7] +if (startPos - currentPos).manhattanLength() >= QApplication.startDragDistance(): + startTheDrag() +//! [7] + + +//! [8] +class MyApplication (QApplication): +# ... + def commitData(QSessionManager& manager) + if manager.allowsInteraction(): + ret = QMessageBox.warning( + mainWindow, + QObject.tr("My Application"), + QObject.tr("Save changes to document?"), + QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel) + + if ret == QMessageBox.Save: + manager.release() + if not saveDocument(): + manager.cancel() + elif ret == QMessageBox.Discard: + pass + else: + manager.cancel() + else: + # we did not get permission to interact, then + # do something reasonable instead + pass +//! [8] + + +//! [9] +appname -session id +//! [9] + + +//! [10] +for command in mySession.restartCommand(): + do_something(command) +//! [10] + + +//! [11] +for command in mySession.discardCommand(): + do_something(command) +//! [11] + + +//! [12] +widget = qApp.widgetAt(x, y) +if widget: + widget = widget.window() +//! [12] + + +//! [13] +widget = qApp.widgetAt(point) +if widget: + widget = widget.window() +//! [13] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qapplication_x11.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qapplication_x11.cpp new file mode 100644 index 0000000..5c90b99 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qapplication_x11.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) +calculateHugeMandelbrot() # lunch time... +QApplication.restoreOverrideCursor() +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qclipboard.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qclipboard.cpp new file mode 100644 index 0000000..0148351 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qclipboard.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +clipboard = QGuiApplication.clipboard() +originalText = clipboard.text() +... +clipboard.setText(newText) +//! [0] + + +//! [1] +data = QMimeData() +data.setImageData(image) +clipboard.setMimeData(data, mode) +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qevent.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qevent.cpp new file mode 100644 index 0000000..38d18d0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qevent.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def wheelEvent(self, event): + numDegrees = event.delta() / 8 + numSteps = numDegrees / 15 + + if event->orientation() == Qt.Horizontal: + scrollHorizontally(numSteps) + else: + scrollVertically(numSteps) + event.accept() +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qformlayout.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qformlayout.cpp new file mode 100644 index 0000000..1b3e580 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qformlayout.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +formLayout = QFormLayout() +formLayout.addRow(self.tr("&Name:"), nameLineEdit) +formLayout.addRow(self.tr("&Email:"), emailLineEdit) +formLayout.addRow(self.tr("&Age:"), ageSpinBox) +setLayout(formLayout) +//! [0] + + +//! [1] +nameLabel = QLabel(self.tr("&Name:")) +nameLabel.setBuddy(nameLineEdit) + +emailLabel = QLabel(self.tr("&Name:")) +emailLabel.setBuddy(emailLineEdit) + +ageLabel = QLabel(self.tr("&Name:")) +ageLabel.setBuddy(ageSpinBox) + +gridLayout = QGridLayout() +gridLayout.addWidget(nameLabel, 0, 0) +gridLayout.addWidget(nameLineEdit, 0, 1) +gridLayout.addWidget(emailLabel, 1, 0) +gridLayout.addWidget(emailLineEdit, 1, 1) +gridLayout.addWidget(ageLabel, 2, 0) +gridLayout.addWidget(ageSpinBox, 2, 1) +setLayout(gridLayout) +//! [1] + + +//! [2] +formLayout.trowWrapPolicy(QFormLayout.DontWrapRows) +formLayout.setFieldGrowthPolicy(QFormLayout.FieldsStayAtSizeHint) +formLayout.setFormAlignment(Qt.AlignHCenter | Qt.AlignTop) +formLayout.setLabelAlignment(Qt.AlignLeft) +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qkeysequence.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qkeysequence.cpp new file mode 100644 index 0000000..25d5ee2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qkeysequence.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QKeySequence(QKeySequence.Print) +QKeySequence(tr("Ctrl+P")) +QKeySequence(tr("Ctrl+p")) +QKeySequence(Qt.CTRL + Qt.Key_P) +//! [0] + + +//! [1] +QKeySequence(tr("Ctrl+X, Ctrl+C")) +QKeySequence(Qt.CTRL + Qt.Key_X, Qt.CTRL + Qt.Key_C) +//! [1] + + +//! [2] +file = QMenu(self) +file.addAction(tr("&Open..."), self, SLOT("open()"), + QKeySequence(tr("Ctrl+O", "File|Open"))) +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qlayout.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qlayout.cpp new file mode 100644 index 0000000..867e73b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qlayout.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + +def paintLayout(self, painter, item): + layout = item.layout() + + if layout: + for layout_item in layout: + self.paintLayout(painter, layout_item) + + painter.drawRect(item.geometry()) + +def paintEvent(self, event): + painter = QPainter(self) + if self.layout(): + self.paintLayout(painter, self.layout()) + +//! [0] + + +//! [1] +child = layout.takeAt(0) +while child: + ... + del child +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qlayoutitem.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qlayoutitem.cpp new file mode 100644 index 0000000..8749f53 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qlayoutitem.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def heightForWidth(self, w): + if cache_dirty or cached_width != w: + h = calculateHeightForWidth(w) + self.cached_hfw = h + return h + return cached_hfw +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qshortcut.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qshortcut.cpp new file mode 100644 index 0000000..baaf605 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qshortcut.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +shortcut = QShortcut(QKeySequence(self.tr("Ctrl+O", "File|Open")), + parent) +//! [0] + + +//! [1] +setKey(0) # no signal emitted +setKey(QKeySequence()) # no signal emitted +setKey(0x3b1) # Greek letter alpha +setKey(Qt.Key_D) # 'd', e.g. to delete +setKey('q') # 'q', e.g. to quit +setKey(Qt.CTRL + Qt.Key_P) # Ctrl+P, e.g. to print document +setKey("Ctrl+P") # Ctrl+P, e.g. to print document +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qshortcutmap.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qshortcutmap.cpp new file mode 100644 index 0000000..48f63f6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qshortcutmap.cpp @@ -0,0 +1,3 @@ +//! [0] +key = QKeySequence() +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qsound.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qsound.cpp new file mode 100644 index 0000000..6ad7ef4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qsound.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QSound.play("mysounds/bells.wav") +//! [0] + + +//! [1] +bells = QSound("mysounds/bells.wav") +bells.play() +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qwidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qwidget.cpp new file mode 100644 index 0000000..efa0f05 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_kernel_qwidget.cpp @@ -0,0 +1,150 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +w.setWindowState(w.windowState() ^ Qt.WindowFullScreen) +//! [0] + + +//! [1] +w.setWindowState(w.windowState() & ~Qt.WindowMinimized | Qt.WindowActive) +//! [1] + + +//! [2] +width = widget.baseSize().width() + i * widget.sizeIncrement().width() +height = widget.baseSize().height() + j * widget.sizeIncrement().height() +//! [2] + + +//! [3] +aWidget.window().setWindowTitle("New Window Title") +//! [3] + + +//! [4] +font = QFont("Helvetica", 12, QFont.Bold) +widget.setFont(font) +//! [4] + + +//! [5] +font = QFont() +font.setBold(false) +widget.setFont(font) +//! [5] + + +//! [6] +widget.setCursor(Qt.IBeamCursor) +//! [6] + + +//! [7] +pixmap = QPixmap(widget.size()) +widget.render(&pixmap) +//! [7] + + +//! [8] +painter = QPainter(self) +... +painter.end() +myWidget.render(self) +//! [8] + + +//! [9] +widget.setTabOrder(a, b) # a to b +widget.setTabOrder(b, c) # a to b to c +widge.tsetTabOrder(c, d) # a to b to c to d +//! [9] + + +//! [10] +# WRONG +widget.setTabOrder(c, d) # c to d +widget.setTabOrder(a, b) # a to b AND c to d +widget.setTabOrder(b, c) # a to b to c, but not c to d +//! [10] + + +//! [11] +class MyWidget(QWidget): + + self.settings = None + + def closeEvent(event): + # event is a QCloseEvent + self.settings = QSettings("MyCompany", "MyApp") + self.settings.setValue("geometry", self.saveGeometry()) + QWidget.closeEvent(self, event) +//! [11] + + +//! [12] +settings = QSettings("MyCompany", "MyApp") +myWidget.restoreGeometry(settings.value("myWidget/geometry").toByteArray()) +//! [12] + + +//! [13] +widget.setUpdatesEnabled(False) +widget.bigVisualChanges() +widget.setUpdatesEnabled(True) +//! [13] + + +//! [14] +... +extern void qt_x11_set_global_double_buffer(bool); +qt_x11_set_global_double_buffer(false); +... +//! [14] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qbrush.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qbrush.cpp new file mode 100644 index 0000000..55fa8a7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qbrush.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +painter = QPainter(self) + +painter.setBrush(Qt.cyan) +painter.setPen(Qt.darkCyan) +painter.drawRect(0, 0, 100,100) + +painter.setBrush(Qt.NoBrush) +painter.setPen(Qt.darkGreen) +painter.drawRect(40, 40, 100, 100) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qcolor.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qcolor.cpp new file mode 100644 index 0000000..cac026a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qcolor.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +# Specify semi-transparent red +painter.setBrush(QColor(255, 0, 0, 127)) +painter.drawRect(0, 0, self.width()/2, self.height()) + +# Specify semi-transparent blue +painter.setBrush(QColor(0, 0, 255, 127)) +painter.drawRect(0, 0, self.width(), self.height()/2) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qdrawutil.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qdrawutil.cpp new file mode 100644 index 0000000..1f76792 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qdrawutil.cpp @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +frame = QFrame() +frame.setFrameStyle(QFrame.HLine | QFrame.Sunken) +//! [0] + + +//! [1] +frame = QFrame() +frame.setFrameStyle(QFrame.Box | QFrame.Raised) +//! [1] + + +//! [2] +frame = QFrame() +frame.setFrameStyle( QFrame.Panel | QFrame.Sunken) +//! [2] + + +//! [3] +frame = QFrame() +frame.setFrameStyle(QFrame.WinPanel | QFrame.Raised) +//! [3] + + +//! [4] +frame = QFrame() +frame.setFrameStyle(QFrame.Box | QFrame.Plain) +//! [4] + + +//! [5] +frame = QFrame() +frame.setFrameStyle(QFrame.HLine | QFrame.Sunken) +//! [5] + + +//! [6] +frame = QFrame() +frame.setFrameStyle(QFrame.Box | QFrame.Raised) +//! [6] + + +//! [7] +frame = QFrame() +frame.setFrameStyle( QFrame.Panel | QFrame.Sunken) +//! [7] + + +//! [8] +frame = QFrame() +frame.setFrameStyle(QFrame.WinPanel | QFrame.Raised) +//! [8] + + +//! [9] +frame = QFrame() +frame.setFrameStyle(QFrame.Box | QFrame.Plain) +//! [9] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qmatrix.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qmatrix.cpp new file mode 100644 index 0000000..73ce084 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qmatrix.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +x' = m11*x + m21*y + dx +y' = m22*y + m12*x + dy +//! [0] + + +//! [1] +x' = m11*x + m21*y + dx +y' = m22*y + m12*x + dy +//! [1] + + +//! [2] +x' = m11*x + m21*y + dx +y' = m22*y + m12*x + dy +//! [2] + + +//! [3] +x' = m11*x + m21*y + dx +y' = m22*y + m12*x + dy +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qpainter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qpainter.cpp new file mode 100644 index 0000000..e295f66 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qpainter.cpp @@ -0,0 +1,261 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def paintEvent(self, paintEvent): + painter = QPainter(self) + painter.setPen(Qt.blue) + painter.setFont(QFont("Arial", 30)) + painter.drawText(rect(), Qt.AlignCenter, "Qt") +//! [0] + + +//! [1] +def paintEvent(self, paintEvent): + p = QPainter() + p.begin(self) + p.drawLine(...) # drawing code + p.end() +//! [1] + + +//! [2] +self paintEvent(self, paintEvent): + p = QPainter(self) + p.drawLine(...) # drawing code + +//! [2] + + +//! [3] +painter.begin(0) # impossible - paint device cannot be 0 + +image = QPixmap(0, 0) +painter.begin(&image) # impossible - image.isNull() == true + +painter.begin(myWidget) +painter2.begin(myWidget) # impossible - only one painter at a time +//! [3] + + +//! [4] +def rotate(self, angle): + matrix = QMatrix() + matrix.rotate(angle) + setWorldMatrix(matrix, true) +//! [4] + + +//! [5] +path = QPainterPath() +path.moveTo(20, 80) +path.lineTo(20, 30) +path.cubicTo(80, 0, 50, 50, 80, 80) + +painter = QPainter(self) +painter.drawPath(path) +//! [5] + + +//! [6] +line = QLineF(10.0, 80.0, 90.0, 20.0) + +painter = QPainter(self) +painter.drawLine(line) +//! [6] + + +//! [7] +rectangle = QRectF(10.0, 20.0, 80.0, 60.0) + +painter = QPainter(self) +painter.drawRect(rectangle) +//! [7] + + +//! [8] +rectangle = QRectF(10.0, 20.0, 80.0, 60.0) + +painter = QPainter(self) +painter.drawRoundedRect(rectangle, 20.0, 15.0) +//! [8] + + +//! [9] +rectangle = QRectF(10.0, 20.0, 80.0, 60.0) + +painter = QPainter(self) +painter.drawEllipse(rectangle) +//! [9] + + +//! [10] +rectangle = QRectF(10.0, 20.0, 80.0, 60.0) +startAngle = 30 * 16 +spanAngle = 120 * 16 + +painter = QPainter(self) +painter.drawArc(rectangle, startAngle, spanAngle) +//! [10] + + +//! [11] +rectangle = QRectF(10.0, 20.0, 80.0, 60.0) +startAngle = 30 * 16 +spanAngle = 120 * 16 + +painter = QPainter(self) +painter.drawPie(rectangle, startAngle, spanAngle) +//! [11] + + +//! [12] +rectangle = QRectF(10.0, 20.0, 80.0, 60.0) +startAngle = 30 * 16 +spanAngle = 120 * 16 + +painter = QPainter(self) +painter.drawChord(rect, startAngle, spanAngle) +//! [12] + + +//! [13] +points = [ + QPointF(10.0, 80.0), + QPointF(20.0, 10.0), + QPointF(80.0, 30.0), +] + +painter = QPainter(self) +painter.drawPolyline(points, 3) +//! [13] + + +//! [14] +points = [ + QPointF(10.0, 80.0), + QPointF(20.0, 10.0), + QPointF(80.0, 30.0), + QPointF(90.0, 70.0) +] + +painter = QPainter(self) +painter.drawPolygon(points, 4) +//! [14] + + +//! [15] +points = [ + QPointF(10.0, 80.0), + QPointF(20.0, 10.0), + QPointF(80.0, 30.0), + QPointF(90.0, 70.0) +] + +painter = QPainter(self) +painter.drawConvexPolygon(points, 4) +//! [15] + + +//! [16] +target = QRectF(10.0, 20.0, 80.0, 60.0) +source = QRectF(0.0, 0.0, 70.0, 40.0) +pixmap = QPixmap(":myPixmap.png") + +painter = QPainter(self) +painter.drawPixmap(target, image, source) +//! [16] + + +//! [17] +painter = QPainter(self) +painter.drawText(rect, Qt.AlignCenter, tr("Qt\nProject")) +//! [17] + + +//! [18] +picture = QPicture() +point = QPointF(10.0, 20.0) +picture.load("drawing.pic") + +painter = QPainter(self) +painter.drawPicture(0, 0, picture) +//! [18] + + +//! [19] +fillRect(rectangle, background()) +//! [19] + + +//! [20] +target = QRectF(10.0, 20.0, 80.0, 60.0) +source = QRectF(0.0, 0.0, 70.0, 40.0) +image = QImage(":/images/myImage.png") + +painter = QPainter(self) +painter.drawImage(target, image, source) +//! [20] + +//! [21] +painter = QPainter(self) +painter.fillRect(0, 0, 128, 128, Qt.green) +painter.beginNativePainting() + +glEnable(GL_SCISSOR_TEST) +glScissor(0, 0, 64, 64) + +glClearColor(1, 0, 0, 1) +glClear(GL_COLOR_BUFFER_BIT) + +glDisable(GL_SCISSOR_TEST) + +painter.endNativePainting() +//! [21] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qpainterpath.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qpainterpath.cpp new file mode 100644 index 0000000..cbf1aab --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qpainterpath.cpp @@ -0,0 +1,160 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +path = QPainterPath() +path.addRect(20, 20, 60, 60) + +path.moveTo(0, 0) +path.cubicTo(99, 0, 50, 50, 99, 99) +path.cubicTo(0, 99, 50, 50, 0, 0) + +QPainter painter(self) +painter.fillRect(0, 0, 100, 100, Qt.white) +painter.setPen(QPen(QColor(79, 106, 25), 1, Qt.SolidLine, + Qt.FlatCap, Qt.MiterJoin)) +painter.setBrush(QColor(122, 163, 39)) + +painter.drawPath(path) +//! [0] + + +//! [1] +myGradient = QLinearGradient() +myPen = QPen() + +myPath = QPainterPath() +myPath.cubicTo(c1, c2, endPoint) + +painter = QPainter(self) +painter.setBrush(myGradient) +painter.setPen(myPen) +painter.drawPath(myPath) +//! [1] + + +//! [2] +myGradient = QLinearGradient() +myPen = QPen() + +startPoint = QPointF() +center = QPointF() + +myPath = QPainterPath() +myPath.moveTo(center) +myPath.arcTo(boundingRect, startAngle, + sweepLength) + +painter = QPainter(self) +painter.setBrush(myGradient) +painter.setPen(myPen) +painter.drawPath(myPath) +//! [2] + + +//! [3] +myGradient = QLinearGradient() +myPen = QPen() +myRectangle = QRectF() + +myPath = QPainterPath() +myPath.addRect(myRectangle) + +painter = QPainter(self) +painter.setBrush(myGradient) +painter.setPen(myPen) +painter.drawPath(myPath) +//! [3] + + +//! [4] +myGradient = QLinearGradient() +myPen = QPen() +myPolygon = QPolygonF() + +myPath = QPainterPath() +myPath.addPolygon(myPolygon) + +QPainter painter(self) +painter.setBrush(myGradient) +painter.setPen(myPen) +painter.drawPath(myPath) +//! [4] + + +//! [5] +myGradient = QLinearGradient() +myPen = QPen() +boundingRectangle = QRectF() + +myPath = QPainterPath() +myPath.addEllipse(boundingRectangle) + +QPainter painter(self) +painter.setBrush(myGradient) +painter.setPen(myPen) +painter.drawPath(myPath) +//! [5] + + +//! [6] +myGradient = QLinearGradient() +myPen = QPen() +myFont = QFont() +QPointF baseline(x, y) + +myPath = QPainterPath() +myPath.addText(baseline, myFont, tr("Qt")) + +painter QPainter(self) +painter.setBrush(myGradient) +painter.setPen(myPen) +painter.drawPath(myPath) +//! [6] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qpen.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qpen.cpp new file mode 100644 index 0000000..871935c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qpen.cpp @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +painter = QPainter(self) +pen = QPen(Qt.green, 3, Qt.DashDotLine, Qt.RoundCap, Qt.RoundJoin) +painter.setPen(pen) +//! [0] + + +//! [1] +painter = QPainter(self) +pen = QPen() # creates a default pen + +pen.setStyle(Qt.DashDotLine) +pen.setWidth(3) +pen.setBrush(Qt.green) +pen.setCapStyle(Qt.RoundCap) +pen.setJoinStyle(Qt.RoundJoin) + +painter.setPen(pen) +//! [1] + + +//! [2] +pen = QPen() +space = 4; +dashes = [1, space, 3, space, 9, space, 27, space, 9, space] +pen.setDashPattern(dashes) +//! [2] + + +//! [3] +pen = QPen() +space = 4; +dashes = [1, space, 3, space, 9, space, 27, space, 9, space] +pen.setDashPattern(dashes) +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qregion.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qregion.cpp new file mode 100644 index 0000000..08e9c22 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qregion.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class MyWidget (QWidget): + # ... + def paintEvent(self): + r1 = QRegion(QRect(100, 100, 200, 80), QRegion.Ellipse) # r1: elliptic region + ) + r2 = QRect(100, 120, 90, 30) # r2: rectangular region + r3 = r1.intersected(r2) # r3: intersection + + painter = QPainter(self) + painter.setClipRegion(r3) + ... # paint clipped graphics +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qregion_unix.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qregion_unix.cpp new file mode 100644 index 0000000..b347fb3 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qregion_unix.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +r1 = QRegion(10, 10, 20, 20) +r1.isNull() // false +r1.isEmpty() // false + +r2 = QRegion(40, 40, 20, 20) +r3 = QRegion() +r3.isNull() // true +r3.isEmpty() // true + +r3 = r1.intersected(r2) // r3: intersection of r1 and r2 +r3.isNull() // false +r3.isEmpty() // true + +r3 = r1.united(r2) // r3: union of r1 and r2 +r3.isNull() // false +r3.isEmpty() // false +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qtransform.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qtransform.cpp new file mode 100644 index 0000000..71ff406 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_painting_qtransform.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +x' = m11*x + m21*y + dx +y' = m22*y + m12*x + dy +if is not affine: + w' = m13*x + m23*y + m33 + x' /= w' + y' /= w' +//! [0] + + +//! [1] +x' = m11*x + m21*y + dx +y' = m22*y + m12*x + dy +if is not affine: + w' = m13*x + m23*y + m33 + x' /= w' + y' /= w' +//! [1] + + +//! [2] +x' = m11*x + m21*y + dx +y' = m22*y + m12*x + dy +if is not affine: + w' = m13*x + m23*y + m33 + x' /= w' + y' /= w' +//! [2] + + +//! [3] +x' = m11*x + m21*y + dx +y' = m22*y + m12*x + dy +if is not affine: + w' = m13*x + m23*y + m33 + x' /= w' + y' /= w' +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_styles_qstyle.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_styles_qstyle.cpp new file mode 100644 index 0000000..be555b4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_styles_qstyle.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +python myapplication.py -style windows +//! [0] + + +//! [1] +python myapplication.py -style custom +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_styles_qstyleoption.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_styles_qstyleoption.cpp new file mode 100644 index 0000000..c46066a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_styles_qstyleoption.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def styleHint(self, stylehint, opt, widget, returnData): + if stylehint == SH_RubberBand_Mask: + if isinstance(QStyleHintReturnMask, hint): + ... + ... +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qfont.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qfont.cpp new file mode 100644 index 0000000..43537f9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qfont.cpp @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +serifFont = QFont("Times", 10, QFont.Bold) +sansFont = QFont("Helvetica [Cronyx]", 12) +//! [0] + + +//! [1] +f = QFont("Helvetica") +//! [1] + + +//! [2] +f = QFont("Helvetica [Cronyx]") +//! [2] + + +//! [3] +info = QFontInfo(f1) +family = info.family() +//! [3] + + +//! [4] +fm = QFontMetrics(f1) +textWidthInPixels = fm.width("How many pixels wide is this text?") +textHeightInPixels = fm.height() +//! [4] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qfontmetrics.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qfontmetrics.cpp new file mode 100644 index 0000000..a184a00 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qfontmetrics.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +font = QFont("times", 24) +fm = QFontMetrics(font) +pixelsWide = fm.width("What's the width of this text?") +pixelsHigh = fm.height() +//! [0] + + +//! [1] +font = QFont("times", 24) +fm = QFontMetricsF(font) +pixelsWide = fm.width("What's the width of this text?") +pixelsHigh = fm.height() +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qsyntaxhighlighter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qsyntaxhighlighter.cpp new file mode 100644 index 0000000..2188be0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qsyntaxhighlighter.cpp @@ -0,0 +1,124 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +editor = QTextEdit() +highlighter = MyHighlighter(editor.document()) +//! [0] + + +//! [1] +class MyHighlighter(QSyntaxHighlighter): + def highlightBlock(self, text): + myClassFormat = QTextCharFormat() + myClassFormat.setFontWeight(QFont.Bold) + myClassFormat.setForeground(Qt.darkMagenta) + pattern = QString("\\bMy[A-Za-z]+\\b") + + expression = QRegExp(pattern) + index = text.indexOf(expression) + while index >= 0: + length = expression.matchedLength() + setFormat(index, length, myClassFormat) + index = text.indexOf(expression, index + length) +//! [1] + + +//! [2] +multiLineCommentFormat = QTextCharFormat() +multiLineCommentFormat.setForeground(Qt.red) + +startExpression = QRegExp("/\\*") +endExpression = QRegExp("\\*/") + +setCurrentBlockState(0) + +startIndex = 0 +if previousBlockState() != 1: + startIndex = text.indexOf(startExpression) + +while startIndex >= 0: + endIndex = text.indexOf(endExpression, startIndex) + if endIndex == -1: + setCurrentBlockState(1) + commentLength = text.length() - startIndex + else: + commentLength = endIndex - startIndex + + endExpression.matchedLength() + + setFormat(startIndex, commentLength, multiLineCommentFormat) + startIndex = text.indexOf(startExpression, + startIndex + commentLength) +//! [2] + + +//! [3] +class MyHighlighter(QSyntaxHighlighter): + def highlightBlock(self, text): + myClassFormat = QTextCharFormat() + myClassFormat.setFontWeight(QFont.Bold) + myClassFormat.setForeground(Qt.darkMagenta) + pattern = QString("\\bMy[A-Za-z]+\\b") + + expression = QRegExp(pattern) + index = text.indexOf(expression) + while index >= 0: + length = expression.matchedLength() + setFormat(index, length, myClassFormat) + index = text.indexOf(expression, index + length) +//! [3] + + +//! [4] +class BlockData(QTextBlockUserData): + def __init__(self): + # ... + self.parentheses = [] +//! [4] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qtextcursor.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qtextcursor.cpp new file mode 100644 index 0000000..12189bf --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qtextcursor.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +cursor.clearSelection() +cursor.movePosition(QTextCursor.NextWord, QTextCursor.KeepAnchor) +cursor.insertText("Hello World") +//! [0] + + +//! [1] +img = ... # A QImage +textDocument.addResource(QTextDocument.ImageResource, QUrl("myimage"), img) +cursor.insertImage("myimage") +//! [1] + + +//! [2] +cursor = QTextCursor(textDocument) +cursor.beginEditBlock() +cursor.insertText("Hello") +cursor.insertText("World") +cursor.endEditBlock() + +textDocument.undo() +//! [2] + + +//! [3] +cursor = QTextCursor(textDocument) +cursor.beginEditBlock() +cursor.insertText("Hello") +cursor.insertText("World") +cursor.endEditBlock() + +... + +cursor.joinPreviousEditBlock() +cursor.insertText("Hey") +cursor.endEditBlock() + +textDocument.undo() +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qtextdocument.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qtextdocument.cpp new file mode 100644 index 0000000..201d14f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qtextdocument.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +plain = QString("#include ") +html = Qt::escape(plain) +# html == "#include <QtCore>" +//! [0] + + +//! [1] +... +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qtextlayout.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qtextlayout.cpp new file mode 100644 index 0000000..33cde13 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_text_qtextlayout.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +leading = fontMetrics.leading() +height = 0 +widthUsed = 0 +textLayout.beginLayout() +while True: + line = textLayout.createLine() + if not line.isValid(): + break + + line.setLineWidth(lineWidth) + height += leading + line.setPosition(QPointF(0, height)) + height += line.height() + widthUsed = qMax(widthUsed, line.naturalTextWidth()) +textLayout.endLayout() +//! [0] + + +//! [1] +painter = QPainter(self) +textLayout.draw(painter, QPoint(0, 0)) +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qcompleter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qcompleter.cpp new file mode 100644 index 0000000..a9ba16a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qcompleter.cpp @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +wordList = ["alpha", "omega", "omicron", "zeta"] + +lineEdit = QLineEdit(self) + +completer = QCompleter(wordList, self) +completer.setCaseSensitivity(Qt.CaseInsensitive) +lineEdit.setCompleter(completer) +//! [0] + + +//! [1] +completer = QCompleter(self) +completer.setModel(QDirModel(completer)) +lineEdit.setCompleter(completer) +//! [1] + + +//! [2] +i = 0 +while completer.setCurrentRow(i): + print "%s is match number %d" % (completer.currentCompletion(), i) + i += 1 +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qdesktopservices.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qdesktopservices.cpp new file mode 100644 index 0000000..f79f1ed --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qdesktopservices.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def showHelp(url): + # ... + pass + +QDesktopServices.setUrlHandler("help", showHelp); +//! [0] + +//! [1] +mailto:user@foo.com?subject=Test&body=Just a test +//! [1] + +//! [2] +QDesktopServices.openUrl(QUrl("file:///C:/Documents and Settings/All Users/Desktop", QUrl.TolerantMode)) +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qundostack.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qundostack.cpp new file mode 100644 index 0000000..9875747 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qundostack.cpp @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class AppendText(QUndoCommand): + self.m_document = '' + self.m_text = '' + + def AppendText(self, doc, text): + self.m_document = doc + self.m_text = text + self.setText("append text") + + def undo(self): + self.m_document.chop(self.m_text.length()) + + def redo(self): + self.m_document->append(self.m_text) +//! [0] + + +//! [1] +command1 = MyCommand() +stack.push(command1) +command2 = MyCommand() +stack.push(command2) + +stack.undo() + +command3 = MyCommand() +stack.push(command3) # command2 gets deleted +//! [1] + + +//! [2] +insertRed = QUndoCommand() # an empty command +insertRed.setText("insert red text") + +InsertText(document, idx, text, insertRed) # becomes child of insertRed +SetColor(document, idx, text.length(), Qt.red, insertRed) + +stack.push(insertRed) +//! [2] + + +//! [3] +class AppendText(QUndoCommand): + ... + def mergeWith(self, other): + if other.id() != self.id(): # make sure other is also an AppendText command + return False + m_text += other.m_text + return True +//! [3] + + +//! [4] +stack.beginMacro("insert red text") +stack.push(InsertText(document, idx, text)) +stack.push(SetColor(document, idx, text.length(), Qt.red)) +stack.endMacro() # indexChanged() is emitted +//! [4] + + +//! [5] +insertRed = QUndoCommand() # an empty command +insertRed.setText("insert red text") + +InsertText(document, idx, text, insertRed) # becomes child of insertRed +SetColor(document, idx, text.length(), Qt.red, insertRed) + +stack.push(insertRed) +//! [5] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qvalidator.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qvalidator.cpp new file mode 100644 index 0000000..df55131 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_util_qvalidator.cpp @@ -0,0 +1,155 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +validator = QIntValidator(100, 999, self) +edit = QLineEdit(self) + +# the edit lineedit will only accept integers between 100 and 999 +edit.setValidator(validator) +//! [0] + + +//! [1] +pos = 0 +v = QIntValidator(100, 900, self) + +str = "1" +v.validate(str, pos) # returns Intermediate +str = "012" +v.validate(str, pos) # returns Intermediate + +str = "123" +v.validate(str, pos) # returns Acceptable +str = "678" +v.validate(str, pos) # returns Acceptable + +str = "999" +v.validate(str, pos) # returns Intermediate + +str = "1234" +v.validate(str, pos) # returns Invalid +str = "-123" +v.validate(str, pos) # returns Invalid +str = "abc" +v.validate(str, pos) # returns Invalid +str = "12cm" +v.validate(str, pos) # returns Invalid +//! [1] + + +//! [2] +pos = 0 + +s = "abc" +v.validate(s, pos) # returns Invalid + +s = "5" +v.validate(s, pos) # returns Intermediate + +s = "50" +v.validate(s, pos) # returns Acceptable +//! [2] + + +//! [3] +# regexp: optional '-' followed by between 1 and 3 digits +rx = QRegExp("-?\\d{1,3}") +validator = QRegExpValidator(rx, self) + +edit = QLineEdit(self) +edit.setValidator(validator) +//! [3] + + +//! [4] +# integers 1 to 9999 +rx = QRegExp("[1-9]\\d{0,3}") +# the validator treats the regexp as "^[1-9]\\d{0,3}$" +v = QRegExpValidator(rx, 0) +pos = 0 + +s = "0" +v.validate(s, pos) # returns Invalid +s = "12345" +v.validate(s, pos) # returns Invalid +s = "1" +v.validate(s, pos) # returns Acceptable + +rx.setPattern("\\S+") # one or more non-whitespace characters +v.setRegExp(rx) +s = "myfile.txt" +v.validate(s, pos) # Returns Acceptable +s = "my file.txt" +v.validate(s, pos) # Returns Invalid + +# A, B or C followed by exactly five digits followed by W, X, Y or Z +rx.setPattern("[A-C]\\d{5}[W-Z]") +v.setRegExp(rx) +s = "a12345Z" +v.validate(s, pos) # Returns Invalid +s = "A12345Z" +v.validate(s, pos) # Returns Acceptable +s = "B12" +v.validate(s, pos) # Returns Intermediate + +# match most 'readme' files +rx.setPattern("read\\S?me(\.(txt|asc|1st))?") +rx.setCaseSensitive(false) +v.setRegExp(rx) +s = "readme" +v.validate(s, pos) # Returns Acceptable +s = "README.1ST" +v.validate(s, pos) # Returns Acceptable +s = "read me.txt" +v.validate(s, pos) # Returns Invalid +s = "readm" +v.validate(s, pos) # Returns Intermediate +//! [4] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qabstractbutton.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qabstractbutton.cpp new file mode 100644 index 0000000..c4219b3 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qabstractbutton.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +button = QPushButton(QObject.tr("Ro&ck && Roll"), self) +//! [0] + + +//! [1] +button.setIcon(QIcon(":/images/print.png")) +button.setShortcut(tr("Alt+F7")) +//! [1] + + +//! [2] +class MyWidget (QWidget): + #... + def reactToToggle(checked): + if checked: + // Examine the button states. + ... +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qabstractspinbox.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qabstractspinbox.cpp new file mode 100644 index 0000000..c8d60d0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qabstractspinbox.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +spinBox = QSpinBox(self) +spinBox.setRange(0, 100) +spinBox.setWrapping(True) +spinBox.setValue(100) +spinBox.stepBy(1) +// value is 0 +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qcalendarwidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qcalendarwidget.cpp new file mode 100644 index 0000000..9d83f0b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qcalendarwidget.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +calendar.setGridVisible(True) +//! [0] + + +//! [1] +calendar.setGridVisible(True) +calendar.setMinimumDate(QDate(2006, 6, 19)) +//! [1] + + +//! [2] +calendar.setGridVisible(True) +calendar.setMaximumDate(QDate(2006, 7, 3)) +//! [2] + + +//! [3] + +calendar.setDateRange(min, max) +//! [3] + + +//! [4] + +calendar.setMinimumDate(min) +calendar.setMaximumDate(max) +//! [4] + + +//! [5] +calendar.setGridVisible(True) +//! [5] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qcheckbox.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qcheckbox.cpp new file mode 100644 index 0000000..c8aa50a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qcheckbox.cpp @@ -0,0 +1,3 @@ +//! [0] +checkbox = QCheckBox("C&ase sensitive", self) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qdatetimeedit.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qdatetimeedit.cpp new file mode 100644 index 0000000..1dd6947 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qdatetimeedit.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +dateEdit = QDateTimeEdit(QDate.currentDate()) +dateEdit.setMinimumDate(QDate.currentDate().addDays(-365)) +dateEdit.setMaximumDate(QDate.currentDate().addDays(365)) +dateEdit.setDisplayFormat("yyyy.MM.dd") +//! [0] + + +//! [1] +setDateTimeRange(min, max) +//! [1] + + +//! [2] +setMinimumDateTime(min) +setMaximumDateTime(max) +//! [2] + + +//! [3] +setDateRange(min, max) +//! [3] + + +//! [4] +setMinimumDate(min) +setMaximumDate(max) +//! [4] + + +//! [5] +setTimeRange(min, max) +//! [5] + + +//! [6] +setMinimumTime(min) +setMaximumTime(max) +//! [6] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qdockwidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qdockwidget.cpp new file mode 100644 index 0000000..c9da19b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qdockwidget.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +dockWidget = parentWidget() +if dockWidget.features() & QDockWidget.DockWidgetVerticalTitleBar: + # I need to be vertical +else: + # I need to be horizontal +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qframe.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qframe.cpp new file mode 100644 index 0000000..a41f1c4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qframe.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +label = QLabel() +label.setFrameStyle(QFrame.Panel | QFrame.Raised) +label.setLineWidth(2) + +pbar = QProgressBar() +label.setFrameStyle(QFrame.NoFrame) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qgroupbox.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qgroupbox.cpp new file mode 100644 index 0000000..d236d91 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qgroupbox.cpp @@ -0,0 +1,3 @@ +//! [0] +g.setTitle("&User information") +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qlabel.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qlabel.cpp new file mode 100644 index 0000000..4a73a18 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qlabel.cpp @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +label = QLabel(self) +label.setFrameStyle(QFrame.Panel | QFrame.Sunken) +label.setText("first line\nsecond line") +label.setAlignment(Qt.AlignBottom | Qt.AlignRight) +//! [0] + + +//! [1] +phoneEdit = QLineEdit(self) +phoneLabel = QLabel("&Phone:", self) +phoneLabel.setBuddy(phoneEdit) +//! [1] + + +//! [2] +nameEd = QLineEdit(self) +nameLb = QLabel("&Name:", self) +nameLb.setBuddy(nameEd) +phoneEd = QLineEdit(self) +phoneLb = QLabel("&Phone:", self) +phoneLb.setBuddy(phoneEd) +# (layout setup not shown) +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qlineedit.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qlineedit.cpp new file mode 100644 index 0000000..bf093ba --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qlineedit.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def contextMenuEvent(event): + menu = createStandardContextMenu() + menu.addAction(QObject.tr("My Menu Item")) + #... + menu.exec_(event.globalPos()) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qmainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qmainwindow.cpp new file mode 100644 index 0000000..a510470 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qmainwindow.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def closeEvent(self, event): + settings = QSettings("MyCompany", "MyApp") + settings.setValue("geometry", self.saveGeometry()) + settings.setValue("windowState", self.saveState()) + QMainWindow.closeEvent(self, event) +//! [0] + + +//! [1] +def readSettings(self): + settings = QSettings("MyCompany", "MyApp") + restoreGeometry(settings.value("myWidget/geometry")) + restoreState(settings.value("myWidget/windowState")) +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qmenu.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qmenu.cpp new file mode 100644 index 0000000..6bf1bf8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qmenu.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +exec_(QCursor.pos()) +//! [0] + + +//! [1] +exec_(somewidget.mapToGlobal(QPoint(0,0))) +//! [1] + + +//! [2] +exec_(e.globalPos()) +//! [2] + + +//! [3] +exec_(QCursor.pos()) +//! [3] + + +//! [4] +exec_(somewidget.mapToGlobal(QPoint(0, 0))) +//! [4] + + +//! [5] +exec_(e.globalPos()) +//! [5] + + +//! [6] +menu = QMenu() +at = actions[0] // Assumes actions is not empty +for a in actions: + menu.addAction(a) +menu.exec_(pos, at) +//! [6] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qmenubar.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qmenubar.cpp new file mode 100644 index 0000000..fa5bb3b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qmenubar.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +menubar.addMenu(fileMenu) +//! [0] + + +//! [1] +menuBar = QMenuBar() +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qplaintextedit.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qplaintextedit.cpp new file mode 100644 index 0000000..674f786 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qplaintextedit.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class MyQPlainTextEdit(QPlainTextEdit): + def contextMenuEvent(self, event): + menu = createStandardContextMenu() + menu.addAction(tr("My Menu Item")) + # ... + menu.exec_(event.globalPos()) + del menu +//! [0] + + +//! [1] +edit.textCursor().insertText(text) +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qpushbutton.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qpushbutton.cpp new file mode 100644 index 0000000..74b4cf8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qpushbutton.cpp @@ -0,0 +1,3 @@ +//! [0] +button = QPushButton("&Download", self) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qradiobutton.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qradiobutton.cpp new file mode 100644 index 0000000..dbee868 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qradiobutton.cpp @@ -0,0 +1,3 @@ +//! [0] +button = QRadioButton("Search from the &cursor", self) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qrubberband.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qrubberband.cpp new file mode 100644 index 0000000..61f784a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qrubberband.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class Widget: + def mousePressEvent(self, event): + origin = event.pos() + if not self.rubberBand: + self.rubberBand = QRubberBand(QRubberBand.Rectangle, self) + rubberBand.setGeometry(QRect(origin, QSize())) + rubberBand.show() + + def mouseMoveEvent(self, event): + rubberBand.setGeometry(QRect(origin, event.pos()).normalized()) + + def mouseReleaseEvent(self, event): + rubberBand.hide() + # determine selection, for example using QRect.intersects() + # and QRect.contains(). +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qscrollarea.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qscrollarea.cpp new file mode 100644 index 0000000..7172efd --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qscrollarea.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +imageLabel = QLabel() +image = QImage("happyguy.png") +imageLabel.setPixmap(QPixmap.fromImage(image)) + +scrollArea = QScrollArea() +scrollArea.setBackgroundRole(QPalette.Dark) +scrollArea.setWidget(imageLabel) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qspinbox.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qspinbox.cpp new file mode 100644 index 0000000..77273e2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qspinbox.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +sb.setPrefix("$") +//! [0] + + +//! [1] +sb.setSuffix(" km") +//! [1] + + +//! [2] +setRange(minimum, maximum) +//! [2] + + +//! [3] +setMinimum(minimum) +setMaximum(maximum) +//! [3] + + +//! [4] +spinbox.setPrefix("$") +//! [4] + + +//! [5] +spinbox.setSuffix(" km") +//! [5] + + +//! [6] +setRange(minimum, maximum) +//! [6] + + +//! [7] +setMinimum(minimum) +setMaximum(maximum) +//! [7] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qsplashscreen.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qsplashscreen.cpp new file mode 100644 index 0000000..2bddb83 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qsplashscreen.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +pixmap = QPixmap(":/splash.png") +splash = QSplashScreen(pixmap) +splash.show() + +... # Loading some items +splash.showMessage("Loaded modules") + +qApp.processEvents() + +... # Establishing connections +splash.showMessage("Established connections") + +qApp.processEvents() +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qsplitter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qsplitter.cpp new file mode 100644 index 0000000..c5dfcd8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qsplitter.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +widget = splitter.widget(index) +policy = widget.sizePolicy() +policy.setHorizontalStretch(stretch) +policy.setVerticalStretch(stretch) +widget.setSizePolicy(policy) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qstatusbar.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qstatusbar.cpp new file mode 100644 index 0000000..8b972b6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qstatusbar.cpp @@ -0,0 +1,3 @@ +//! [0] +statusBar().addWidget(MyReadWriteIndication()) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qtextbrowser.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qtextbrowser.cpp new file mode 100644 index 0000000..e35b40c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qtextbrowser.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +backaction.setToolTip(browser.historyTitle(-1)) +forwardaction.setToolTip(browser.historyTitle(+1)) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qtextedit.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qtextedit.cpp new file mode 100644 index 0000000..fad9f6b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qtextedit.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class MyTextEdit(QTextEdit): + def contextMenuEvent(self, event): + menu = createStandardContextMenu() + menu.addAction(tr("My Menu Item")) + #... + menu.exec_(event->globalPos()) + del menu +//! [0] + + +//! [1] +edit.textCursor().insertText(text) +//! [1] + + +//! [2] +edit.textCursor().insertHtml(fragment) +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qworkspace.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qworkspace.cpp new file mode 100644 index 0000000..1c77733 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_gui_widgets_qworkspace.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class MainWindow(...): + def __init__(self): + self.workspace = QWorkspace() + self.setCentralWidget(workspace) + ... +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qftp.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qftp.cpp new file mode 100644 index 0000000..d0426fd --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qftp.cpp @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +ftp = QFtp(parent) +ftp.connectToHost("ftp.qt-project.org") +ftp.login() +//! [0] + + +//! [1] +ftp.connectToHost("ftp.qt-project.org") # id == 1 +ftp.login() # id == 2 +ftp.cd("qt") # id == 3 +ftp.get("INSTALL") # id == 4 +ftp.close() # id == 5 +//! [1] + + +//! [2] +start(1) +stateChanged(HostLookup) +stateChanged(Connecting) +stateChanged(Connected) +finished(1, false) + +start(2) +stateChanged(LoggedIn) +finished(2, false) + +start(3) +finished(3, false) + +start(4) +dataTransferProgress(0, 3798) +dataTransferProgress(2896, 3798) +readyRead() +dataTransferProgress(3798, 3798) +readyRead() +finished(4, false) + +start(5) +stateChanged(Closing) +stateChanged(Unconnected) +finished(5, false) + +done(false) +//! [2] + + +//! [3] +start(1) +stateChanged(HostLookup) +stateChanged(Connecting) +stateChanged(Connected) +finished(1, false) + +start(2) +finished(2, true) + +done(true) +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qhttp.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qhttp.cpp new file mode 100644 index 0000000..333ea2b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qhttp.cpp @@ -0,0 +1,132 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +content-type: text/html +//! [0] + + +//! [1] +header.setValue("content-type", "text/html") +contentType = header.value("content-type") +//! [1] + + +//! [2] +header = QHttpRequestHeader("GET", QUrl.toPercentEncoding("/index.html")) +header.setValue("Host", "qtsoftware.com") +http.setHost("qtsoftware.com") +http.request(header) +//! [2] + + +//! [3] +http.setHost("qtsoftware.com") # id == 1 +http.get(QUrl.toPercentEncoding("/index.html")) # id == 2 +//! [3] + + +//! [4] +requestStarted(1) +requestFinished(1, False) + +requestStarted(2) +stateChanged(Connecting) +stateChanged(Sending) +dataSendProgress(77, 77) +stateChanged(Reading) +responseHeaderReceived(responseheader) +dataReadProgress(5388, 0) +readyRead(responseheader) +dataReadProgress(18300, 0) +readyRead(responseheader) +stateChanged(Connected) +requestFinished(2, False) + +done(False) + +stateChanged(Closing) +stateChanged(Unconnected) +//! [4] + + +//! [5] +http.setHost("www.foo.bar") # id == 1 +http.get("/index.html") # id == 2 +http.post("register.html", data) # id == 3 +//! [5] + + +//! [6] +requestStarted(1) +requestFinished(1, False) + +requestStarted(2) +stateChanged(HostLookup) +requestFinished(2, True) + +done(True) + +stateChanged(Unconnected) +//! [6] + + +//! [7] +def getTicks(self): + http = QHttp(self) + self.connect(http, SIGNAL('done(bool)'), self, SLOT('showPage()')) + http.setProxy("proxy.example.com", 3128) + http.setHost("ticker.example.com") + http.get("/ticks.asp") + +def showPage(self): + self.display(http.readAll()) + +//! [7] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp new file mode 100644 index 0000000..4784725 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +manager = QNetworkAccessManager(self) +manager.finished[QNetworkReply].connect(self.replyFinished) + +manager.get(QNetworkRequest(QUrl("http://qt-project.org"))) +//! [0] + + +//! [1] +request = QNetworkRequest() +request.setUrl(QUrl("http://qt-project.org")) +request.setRawHeader("User-Agent", "MyOwnBrowser 1.0") + +reply = manager.get(request) +reply.readyRead.connect(self.slotReadyRead) +reply.error[QNetworkReply.NetworkError].connect(self..slotError) +reply.sslErrors.connect(self.slotSslErrors) +//! [1] + +//! [2] +manager = QNetworkConfigurationManager() +networkAccessManager.setConfiguration(manager.defaultConfiguration()) +//! [2] + +//! [3] +networkAccessManager.setConfiguration(QNetworkConfiguration()) +//! [3] + +//! [4] +networkAccessManager.setNetworkAccessible(QNetworkAccessManager.NotAccessible) +//! [4] + +//! [5] +networkAccessManager.setNetworkAccessible(QNetworkAccessManager.Accessible) +//! [5] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qnetworkdiskcache.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qnetworkdiskcache.cpp new file mode 100644 index 0000000..c8c81ad --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qnetworkdiskcache.cpp @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +manager = QNetworkAccessManager(self) +diskCache = QNetworkDiskCache(self) +diskCache.setCacheDirectory("cacheDir") +manager.setCache(diskCache) +//! [0] + +//! [1] +# do a normal request (preferred from network, as this is the default) +request = QNetworkRequest(QUrl("http://qt-project.org")) +manager.get(request) + +# do a request preferred from cache +request2 = QNetworkRequest(QUrl("http://qt-project.org")) +request2.setAttribute(QNetworkRequest.CacheLoadControlAttribute, QNetworkRequest.PreferCache) +manager.get(request2) +//! [1] + +//! [2] +@Slot(QNetworkReply) +def replyFinished(reply): + fromCache = reply.attribute(QNetworkRequest.SourceIsFromCacheAttribute) + print("page from cache? %d" % fromCache) +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qnetworkrequest.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qnetworkrequest.cpp new file mode 100644 index 0000000..9156597 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_access_qnetworkrequest.cpp @@ -0,0 +1,3 @@ +//! [0] +request.setRawHeader("Last-Modified", "Sun, 06 Nov 1994 08:49:37 GMT") +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp new file mode 100644 index 0000000..d30aca2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +mgr = QNetworkConfigurationManager() +activeConfigs = mgr.allConfigurations(QNetworkConfiguration.Active) +if activeConfigs: + assert(mgr.isOnline()) +else: + assert(not mgr.isOnline()) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_kernel_qhostaddress.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_kernel_qhostaddress.cpp new file mode 100644 index 0000000..e45b6d5 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_kernel_qhostaddress.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +addr = hostAddr.toIPv6Address() +# addr contains 16 unsigned characters + +for i in range(0, 16): + # process addr[i] +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_kernel_qhostinfo.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_kernel_qhostinfo.cpp new file mode 100644 index 0000000..b1430a4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_kernel_qhostinfo.cpp @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +# To find the IP address of qt-project.org +QHostInfo.lookupHost("qt-project.org", self, SLOT("printResults(QHostInfo)")) + +# To find the host name for 4.2.2.1 +QHostInfo.lookupHost("4.2.2.1", self, SLOT("printResults(QHostInfo)")) +//! [0] + + +//! [1] +info = QHostInfo.fromName("qt-project.org") +//! [1] + + +//! [2] +QHostInfo.lookupHost("www.kde.org", self.lookedUp) +//! [2] + + +//! [3] +def lookedUp(host): + if host.error() != QHostInfo.NoError: + print "Lookup failed: %s" % host.errorString() + return + + for address in host.addresses(): + print "Found address: %s" % address.toString() +//! [3] + + +//! [4] +QHostInfo.lookupHost("4.2.2.1", self.lookedUp) +//! [4] + + +//! [5] +info = QHostInfo() +... +if not info.addresses().isEmpty(): + address = info.addresses().first() + # use the first IP address +//! [5] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_kernel_qnetworkproxy.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_kernel_qnetworkproxy.cpp new file mode 100644 index 0000000..29c6a8e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_kernel_qnetworkproxy.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +proxy = QNetworkProxy() +proxy.setType(QNetworkProxy.Socks5Proxy) +proxy.setHostName("proxy.example.com") +proxy.setPort(1080) +proxy.setUser("username") +proxy.setPassword("password") +QNetworkProxy.setApplicationProxy(proxy) +//! [0] + + +//! [1] +serverSocket.setProxy(QNetworkProxy.NoProxy) +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qabstractsocket.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qabstractsocket.cpp new file mode 100644 index 0000000..ea70b1f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qabstractsocket.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +socket.connectToHost("imap", 143) +if socket.waitForConnected(1000): + print "Connected!" +//! [0] + + +//! [1] +socket.disconnectFromHost() + if socket.state() == QAbstractSocket.UnconnectedState or \ + socket.waitForDisconnected(1000): + print "Disconnected!" +//! [1] + + +//! [2] +class SocketClass(...): + def readyReadSlot(self): + # This slot is connected to QAbstractSocket::readyRead() + while not socket.atEnd(): + data = socket.read(100) + ... +//! [2] + + +//! [3] +socket.setProxy(QNetworkProxy.NoProxy) +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qlocalsocket_unix.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qlocalsocket_unix.cpp new file mode 100644 index 0000000..1687fe6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qlocalsocket_unix.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +socket.connectToServer("market") +if (socket.waitForConnected(1000)) + print("Connected!") +//! [0] + + +//! [1] +socket.disconnectFromServer() +if (socket.waitForDisconnected(1000)) + print("Disconnected!") +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qnativesocketengine.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qnativesocketengine.cpp new file mode 100644 index 0000000..9fda752 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qnativesocketengine.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +socketLayer = QNativeSocketEngine() +socketLayer.initialize(QAbstractSocket.TcpSocket, QAbstractSocket.IPv4Protocol) +socketLayer.connectToHost(QHostAddress.LocalHost, 22) +# returns False + +socketLayer.waitForWrite() +socketLayer.connectToHost(QHostAddress.LocalHost, 22) +# returns True +//! [0] + + +//! [1] +socketLayer = QNativeSocketEngine() +socketLayer.bind(QHostAddress.Any, 4000) +socketLayer.listen() +if socketLayer.waitForRead(): + clientSocket = socketLayer.accept() + # a client is connected + +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qtcpserver.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qtcpserver.cpp new file mode 100644 index 0000000..b685462 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qtcpserver.cpp @@ -0,0 +1,3 @@ +//! [0] +server.setProxy(QNetworkProxy.NoProxy) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qudpsocket.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qudpsocket.cpp new file mode 100644 index 0000000..cbeb0be --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_socket_qudpsocket.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def initSocket(self): + udpSocket = QUdpSocket(self) + udpSocket.bind(QHostAddress.LocalHost, 7755) + + self.connect(udpSocket, SIGNAL('readyRead()'), + self, SLOT('readPendingDatagrams()')) + +def readPendingDatagrams(self): + while udpSocket.hasPendingDatagrams(): + datagram = QByteArray() + datagram.resize(udpSocket.pendingDatagramSize()) + + (sender, senderPort) = udpSocket.readDatagram(datagram.data(), datagram.size()) + + processTheDatagram(datagram) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_ssl_qsslcertificate.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_ssl_qsslcertificate.cpp new file mode 100644 index 0000000..d13d4dd --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_ssl_qsslcertificate.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +for cert in QSslCertificate.fromPath('C:/ssl/certificate.*.pem', QSsL.Pem, QRegExp.Wildcard): + print cert.issuerInfo(QSslCertificate.Organization) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_ssl_qsslconfiguration.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_ssl_qsslconfiguration.cpp new file mode 100644 index 0000000..1ba2170 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_ssl_qsslconfiguration.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +config = sslSocket.sslConfiguration() +config.setProtocol(QSsl.TlsV1) +sslSocket.setSslConfiguration(config) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_ssl_qsslsocket.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_ssl_qsslsocket.cpp new file mode 100644 index 0000000..d822b80 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_network_ssl_qsslsocket.cpp @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +socket = QSslSocket(self) +QObject.connect(socket, SIGNAL("encrypted()"), self, SLOT("ready()")) + +socket.connectToHostEncrypted("imap.example.com", 993) +//! [0] + + +//! [1] +def incomingConnection(socketDescriptor): + serverSocket = QSslSocket() + if serverSocket.setSocketDescriptor(socketDescriptor): + QObject.connect(serverSocket, SIGNAL("encrypted()"), self, SLOT("ready()")) + serverSocket.startServerEncryption() +//! [1] + + +//! [2] +socket = QSslSocket() +socket.connectToHostEncrypted("http.example.com", 443) +if not socket.waitForEncrypted(): + print socket.errorString() + return false + +socket.write("GET / HTTP/1.0\r\n\r\n") +while socket.waitForReadyRead(): + print socket.readAll().data() +//! [2] + + +//! [3] +socket = QSslSocket() +QObject.connect(socket, SIGNAL("encrypted()"), receiver, SLOT("socketEncrypted()")) + +socket.connectToHostEncrypted("imap", 993) +socket.write("1 CAPABILITY\r\n") +//! [3] + + +//! [4] +socket = QSslSocket() +socket.setCiphers("DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA") +//! [4] + + +//! [5] +socket.connectToHostEncrypted("imap", 993) +if socket.waitForEncrypted(1000): + print "Encrypted!" +//! [5] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qgl.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qgl.cpp new file mode 100644 index 0000000..264cf08 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qgl.cpp @@ -0,0 +1,168 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +fmt = QGLFormat() +fmt.setAlpha(True) +fmt.setStereo(True) +QGLFormat.setDefaultFormat(fmt) +//! [0] + + +//! [1] +fmt = QGLFormat() +fmt.setDoubleBuffer(False) # single buffer +fmt.setDirectRendering(False) # software rendering +myWidget = MyGLWidget(fmt, ...) +//! [1] + + +//! [2] +fmt = QGLFormat() +fmt.setOverlay(True) +fmt.setStereo(True) +myWidget = MyGLWidget(fmt, ...) +if !myWidget.format().stereo(): + # ok, goggles off + if !myWidget.format().hasOverlay(): + print "Cool hardware required" +//! [2] + + +//! [3] +# The rendering in MyGLWidget depends on using +# stencil buffer and alpha channel + +class MyGLWidget(QGLWidget): + def __init__(self, parent): + QGLWidget.__init__(self, QGLFormat(QGL.StencilBuffer | QGL.AlphaChannel), parent) + + if !format().stencil(): + print "Could not get stencil buffer results will be suboptimal" + if !format().alpha(): + print "Could not get alpha channel results will be suboptimal" + ... +//! [3] + + +//! [4] +a = QApplication([]) +f = QGLFormat() +f.setDoubleBuffer(False) +QGLFormat.setDefaultFormat(f) +//! [4] + + +//! [5] +f = QGLFormat.defaultOverlayFormat() +f.setDoubleBuffer(True) +QGLFormat.setDefaultOverlayFormat(f) +//! [5] + + +//! [6] +# ...continued from above +myWidget = MyGLWidget(QGLFormat(QGL.HasOverlay), ...) +if myWidget.format().hasOverlay(): + # Yes, we got an overlay, let's check _its_ format: + olContext = myWidget.overlayContext() + if olContext.format().doubleBuffer(): + # yes, we got a double buffered overlay + else: + # no, only single buffered overlays are available +//! [6] + + +//! [7] +cx = QGLContext() +# ... +f = QGLFormat() +f.setStereo(True) +cx.setFormat(f) +if !cx.create(): + exit() # no OpenGL support, or cannot render on the specified paintdevice +if !cx.format().stereo(): + exit() # could not create stereo context +//! [7] + + +//! [8] +class MyGLDrawer(QGLWidget): + + def __init__(self, parent): + QGLWidget.__init__(self, parent) + pass + + def initializeGL(self): + # Set up the rendering context, define display lists etc.: + ... + glClearColor(0.0, 0.0, 0.0, 0.0) + glEnable(GL_DEPTH_TEST) + ... + + def resizeGL(self, w, h): + # setup viewport, projection etc.: + glViewport(0, 0, w, h) + ... + glFrustum(...) + ... + + def paintGL(self): + # draw the scene: + ... + glRotatef(...) + glMaterialfv(...) + glBegin(GL_QUADS) + glVertex3f(...) + glVertex3f(...) + ... + glEnd() + ... +//! [8] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qglcolormap.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qglcolormap.cpp new file mode 100644 index 0000000..7f8a144 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qglcolormap.cpp @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +import sys + +from PySide2.QtGui import QApplication, qRgb +from PySide2.QtOpenGL import QGLColormap + +def main(argv): + app = QApplication(argv) + + widget = MySuperGLWidget() # a QGLWidget in color-index mode + colormap = QGLColormap() + + # This will fill the colormap with colors ranging from + # black to white. + for i in range(0, colormap.size()): + colormap.setEntry(i, qRgb(i, i, i)) + + widget.setColormap(colormap) + widget.show() + return app.exec_() + +if __name__ == "__main__": + main(sys.argv) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qglpixelbuffer.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qglpixelbuffer.cpp new file mode 100644 index 0000000..fd8c504 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qglpixelbuffer.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +pbuffer QGLPixelBuffer(...) +... +pbuffer.makeCurrent() +dynamicTexture = pbuffer.generateDynamicTexture() +pbuffer.bindToDynamicTexture(dynamicTexture) +... +pbuffer.releaseFromDynamicTexture() +//! [0] + + +//! [1] +pbuffer QGLPixelBuffer(...) +... +pbuffer.makeCurrent() +dynamicTexture = pbuffer.generateDynamicTexture() +... +pbuffer.updateDynamicTexture(dynamicTexture) +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qglshaderprogram.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qglshaderprogram.cpp new file mode 100644 index 0000000..102867f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_opengl_qglshaderprogram.cpp @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +shader = QGLShader(QGLShader.Vertex) +shader.compileSourceCode(code) + +program = QGLShaderProgram(context) +program.addShader(shader) +program.link() + +program.bind() +//! [0] + +//! [1] +program.addShaderFromSourceCode(QGLShader.Vertex, + "attribute highp vec4 vertex\n" \ + "attribute mediump mat4 matrix\n" \ + "void main(void)\n" \ + "{\n" \ + " gl_Position = matrix * vertex\n" \ + "}") +program.addShaderFromSourceCode(QGLShader.Fragment, + "uniform mediump vec4 color\n" \ + "void main(void)\n" \ + "{\n" \ + " gl_FragColor = color\n" \ + "}") +program.link() +program.bind() + +vertexLocation = program.attributeLocation("vertex") +matrixLocation = program.attributeLocation("matrix") +colorLocation = program.uniformLocation("color") +//! [1] + +//! [2] +triangleVertices = ( + 60.0f, 10.0f, 0.0f, + 110.0f, 110.0f, 0.0f, + 10.0f, 110.0f, 0.0f) + +color = QColor(0, 255, 0, 255) + +pmvMatrix = QMatrix4x4() +pmvMatrix.ortho(self.rect()) + +program.enableAttributeArray(vertexLocation) +program.setAttributeArray(vertexLocation, triangleVertices, 3) +program.setUniformValue(matrixLocation, pmvMatrix) +program.setUniformValue(colorLocation, color) + +glDrawArrays(GL_TRIANGLES, 0, 3) + +program.disableAttributeArray(vertexLocation) +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_qtestlib_qtestcase.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_qtestlib_qtestcase.cpp new file mode 100644 index 0000000..8ff2a6e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_qtestlib_qtestcase.cpp @@ -0,0 +1,237 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QVERIFY(1 + 1 == 2) +//! [0] + + +//! [1] +QVERIFY2(1 + 1 == 2, "A breach in basic arithmetic occured.") +//! [1] + + +//! [2] +QCOMPARE(QString("hello").toUpper(), QString("HELLO")) +//! [2] + + +//! [3] +void TestQString.toInt_data() +{ + QTest.addColumn("aString") + QTest.addColumn("expected") + + QTest.newRow("positive value") << "42" << 42 + QTest.newRow("negative value") << "-42" << -42 + QTest.newRow("zero") << "0" << 0 +} +//! [3] + + +//! [4] +void TestQString.toInt() +{ + QFETCH(QString, aString) + QFETCH(int, expected) + + QCOMPARE(aString.toInt(), expected) +} +//! [4] + + +//! [5] +if (sizeof(int) != 4) + QFAIL("This test has not been ported to this platform yet.") +//! [5] + + +//! [6] +QFETCH(QString, myString) +QCOMPARE(QString("hello").toUpper(), myString) +//! [6] + + +//! [7] +QTEST(QString("hello").toUpper(), "myString") +//! [7] + + +//! [8] +if (!QSqlDatabase.drivers().contains("SQLITE")) + QSKIP("This test requires the SQLITE database driver", SkipAll) +//! [8] + + +//! [9] +QEXPECT_FAIL("", "Will fix in the next release", Continue) +QCOMPARE(i, 42) +QCOMPARE(j, 43) +//! [9] + + +//! [10] +QEXPECT_FAIL("data27", "Oh my, this is soooo broken", Abort) +QCOMPARE(i, 42) +//! [10] + + +//! [11] +class TestQString: public QObject { ... } +QTEST_MAIN(TestQString) +//! [11] + + +//! [12] +#ifdef Q_WS_X11 + QTEST_MAIN(MyX11Test) +#else + // do nothing on non-X11 platforms + QTEST_NOOP_MAIN +#endif +//! [12] + + +//! [13] +QTest.keyClick(myWidget, 'a') +//! [13] + + +//! [14] +QTest.keyClick(myWidget, Qt.Key_Escape) + +QTest.keyClick(myWidget, Qt.Key_Escape, Qt.ShiftModifier, 200) +//! [14] + + +//! [15] +QTest.keyClicks(myWidget, "hello world") +//! [15] + + +//! [16] +namespace QTest { + template<> + char *toString(const MyPoint &point) + { + QByteArray ba = "MyPoint(" + ba += QByteArray.number(point.x()) + ", " + QByteArray.number(point.y()) + ba += ")" + return qstrdup(ba.data()) + } +} +//! [16] + + +//! [17] +int i = 0 +while (myNetworkServerNotResponding() && i++ < 50) + QTest.qWait(250) +//! [17] + + +//! [18] +MyFirstTestObject test1 +QTest.qExec(&test1) + +MySecondTestObject test2 +QTest.qExec(&test2) +//! [18] + + +//! [19] +QDir dir + +QTest.ignoreMessage(QtWarningMsg, "QDir.mkdir: Empty or null file name(s)") +dir.mkdir("") +//! [19] + + +//! [20] +void myTestFunction_data() +{ + QTest.addColumn("aString") + QTest.newRow("just hello") << QString("hello") + QTest.newRow("a null string") << QString() +} +//! [20] + + +//! [21] +void myTestFunction_data() { + QTest.addColumn("intval") + QTest.addColumn("str") + QTest.addColumn("dbl") + + QTest.newRow("row1") << 1 << "hello" << 1.5 +} +//! [21] + + +//! [22] +void MyTestClass.cleanup() +{ + if (qstrcmp(currentTestFunction(), "myDatabaseTest") == 0) { + // clean up all database connections + closeAllDatabases() + } +} +//! [22] + + +//! [23] +QTest.qSleep(250) +//! [23] + +//! [24] +widget = QWidget() +widget.show() +QTest.qWaitForWindowShown(widget) +//! [24] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptable.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptable.cpp new file mode 100644 index 0000000..ac181e7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptable.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class MyScriptableObject(QObject, QScriptable): +... + def doSomething(self): + ... + def doSomethingElse(self): + ... +//! [0] + + +//! [1] + +def doSomething(self): + self.context().throwError('Threw an error from a slot') + +def doSomethingElse(self): + return self.thisObject() + +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptclass.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptclass.cpp new file mode 100644 index 0000000..94601aa --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptclass.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +if extension == Callable: + context = argument + engine = context.engine() + sum = 0 + for i in range(0, context.argumentCount()): + sum += context.argument(i).toNumber() + return sum +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptcontext.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptcontext.cpp new file mode 100644 index 0000000..632283d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptcontext.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +foo(20.5, "hello", Object()) +//! [0] + + +//! [1] +def Person_prototype_fullName(context, engine): + self = context.selfObject() + result = self.property("firstName").toString() + result += QLatin1String(" ") + result += self.property("lastName").toString() + return result +//! [1] + + +//! [2] +def myInclude(ctx, eng): + fileName = ctx.argument(0).toString() + contents = readTheFile(fileName) + ctx.setActivationObject(ctx.parentContext().activationObject()) + ctx.setThisObject(ctx.parentContext().selfObject()) + return eng.evaluate(contents, fileName) +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptengine.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptengine.cpp new file mode 100644 index 0000000..4005e2c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptengine.cpp @@ -0,0 +1,320 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +myEngine = QScriptEngine() +three = myEngine.evaluate("1 + 2") +//! [0] + + +//! [1] +fun = myEngine.evaluate("function(a, b) { return a + b }"); +args = QScriptValueList() +args << 1 << 2 +threeAgain = fun.call(QScriptValue(), args) +//! [1] + + +//! [2] +fileName = "helloworld.qs" +scriptFile = QFile(fileName) +if !scriptFile.open(QIODevice.ReadOnly): + # handle error +stream = QTextStream(scriptFile) +contents = stream.readAll() +scriptFile.close() +myEngine.evaluate(contents, fileName) +//! [2] + + +//! [3] +myEngine.globalObject().setProperty("myNumber", 123) +... +myNumberPlusOne = myEngine.evaluate("myNumber + 1") +//! [3] + + +//! [4] +result = myEngine.evaluate(...) +if myEngine.hasUncaughtException(): + line = myEngine.uncaughtExceptionLineNumber() + print "uncaught exception at line", line, ":", result.toString() +//! [4] + + +//! [5] +button = QPushButton() +QScriptValue scriptButton = myEngine.QObject(button) +myEngine.globalObject().setProperty("button", scriptButton) + +myEngine.evaluate("button.checkable = True") + +print scriptButton.property("checkable").toBoolean() +scriptButton.property("show").call() # call the show() slot +//! [5] + + +//! [6] +def myAdd(context, engine): + a = context.argument(0) + b = context.argument(1) + return a.toNumber() + b.toNumber() +//! [6] + + +//! [7] +fun = myEngine.Function(myAdd) +myEngine.globalObject().setProperty("myAdd", fun) +//! [7] + + +//! [8] +result = myEngine.evaluate("myAdd(myNumber, 1)") +//! [8] + + +//! [9] +def Foo(context, engine): + if context.calledAsConstructor(): + # initialize the object + context.selfObject().setProperty("bar", ...) + # ... + # return a non-object value to indicate that the + # selfObject() should be the result of the " Foo()" expression + return engine.undefinedValue() + else: + # not called as " Foo()", just "Foo()" + # create our own object and return that one + object = engine.Object() + object.setPrototype(context.callee().property("prototype")) + object.setProperty("baz", ...) + return object +... + +fooProto = engine.Object() +fooProto.setProperty("whatever", ...) +engine.globalObject().setProperty("Foo", engine->Function(Foo, fooProto)) +//! [9] + + +//! [10] +class Bar: + ... + +def constructBar(context, engine): + bar = Bar() + # initialize from arguments in context, if desired + ... + return engine.toScriptValue(bar) + +class BarPrototype(QObject, QScriptable): +# provide the scriptable interface of self type using slots and properties +... + +... + +# create and register the Bar prototype and constructor in the engine +barPrototypeObject = BarPrototype(...) +barProto = engine.QObject(barPrototypeObject) +engine.setDefaultPrototype(qMetaTypeId(Bar), barProto) +barCtor = engine.Function(constructBar, barProto) +engine.globalObject().setProperty("Bar", barCtor) +//! [10] + + +//! [11] +def getSetFoo(context,engine): + callee = context.callee() + if context.argumentCount() == 1: # writing? + callee.setProperty("value", context.argument(0)) + return callee.property("value") +} + +.... + +object = engine.Object() +object.setProperty("foo", engine.Function(getSetFoo), + QScriptValue.PropertyGetter | QScriptValue::PropertySetter) +//! [11] + + +//! [12] +object = engine.Object() +object.setProperty("foo", engine.Function(getFoo), QScriptValue.PropertyGetter) +object.setProperty("foo", engine.Function(setFoo), QScriptValue.PropertySetter) +//! [12] + + +//! [13] +Q_SCRIPT_DECLARE_QMETAOBJECT(QLineEdit, QWidget*) + +... + +lineEditClass = engine.scriptValueFromQMetaObject(QLineEdit) +engine.globalObject().setProperty("QLineEdit", lineEditClass) +//! [13] + + +//! [14] +if hello && world: + print("hello world") +//! [14] + + +//! [15] +if hello && +//! [15] + + +//! [16] +0 = 0 +//! [16] + + +//! [17] +./test.js +//! [17] + + +//! [18] +foo["bar"] +//! [18] + + +//! [19] +engine = QScriptEngine() +context = engine.pushContext() +context.activationObject().setProperty("myArg", 123) +engine.evaluate("var tmp = myArg + 42") +... +engine.popContext() +//! [19] + + +//! [20] +class MyStruct: + x = 0 + y = 0 +//! [20] + + +//! [21] +Q_DECLARE_METATYPE(MyStruct) +//! [21] + + +//! [22] +def toScriptValue(engine, s): + obj = engine.Object() + obj.setProperty("x", s.x) + obj.setProperty("y", s.y) + return obj + +def fromScriptValue(obj, s): + s.x = obj.property("x").toInt32() + s.y = obj.property("y").toInt32() +//! [22] + + +//! [23] +qScriptRegisterMetaType(engine, toScriptValue, fromScriptValue) +//! [23] + + +//! [24] +s = context.argument(0) +... +s2 = MyStruct() +s2.x = s.x + 10 +s2.y = s.y + 20 +v = engine.toScriptValue(s2) +//! [24] + + +//! [25] +def createMyStruct(cx, engine): + s = MyStruct() + s.x = 123 + s.y = 456 + return engine.toScriptValue(s) +... + +ctor = engine.Function(createMyStruct) +engine.globalObject().setProperty("MyStruct", ctor) +//! [25] + + +//! [26] +Q_DECLARE_METATYPE(QVector) + +... + +qScriptRegisterSequenceMetaType >(engine) +... +v = engine.evaluate("[5, 1, 3, 2]") +v.sort() +a = engine.toScriptValue(v) +print a.toString() # outputs "[1, 2, 3, 5]" +//! [26] + +//! [27] +def mySpecialQObjectConstructor(context, engine): + parent = context.argument(0).toQObject() + object = QObject(parent) + return engine.QObject(object, QScriptEngine.ScriptOwnership) + +... + +ctor = engine.Function(mySpecialQObjectConstructor) +metaObject = engine.QMetaObject(QObject.staticMetaObject, ctor) +engine.globalObject().setProperty("QObject", metaObject) + +result = engine.evaluate(" QObject()") +//! [27] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptengineagent.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptengineagent.cpp new file mode 100644 index 0000000..91541f5 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptengineagent.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +var a = Math.random() + 2; +//! [0] + + +//! [1] +function cube(a) { + return a * a * a; +} + +var a = cube(3); +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptvalue.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptvalue.cpp new file mode 100644 index 0000000..18109bd --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptvalue.cpp @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +myEngine = QScriptEngine() +myObject = myEngine.newObject() +myOtherObject = myEngine.newObject() +myObject.setProperty("myChild", myOtherObject) +myObject.setProperty("name", "John Doe") +//! [0] + + +//! [1] +val = QScriptValue(myEngine, 123) +myObject.setProperty("myReadOnlyProperty", val, QScriptValue.ReadOnly) +//! [1] + + +//! [2] +engine = QScriptEngine() +engine.evaluate("function fullName() { return this.firstName + ' ' + this.lastName; }") +engine.evaluate("somePerson = { firstName: 'John', lastName: 'Doe' }") + +global_ = engine.globalObject() +fullName = global_.property("fullName") +who = global_.property("somePerson") +print fullName.call(who).toString() # "John Doe" + +engine.evaluate("function cube(x) { return x * x * x; }") +QScriptValue cube = global_.property("cube") +args = QScriptValueList() +args << 3 +print cube.call(QScriptValue(), args).toNumber() # 27 +//! [2] + + +//! [3] + +def myNativeFunction(context, engine): + otherFunction = ... + + return otherFunction.call(context.thisObject(), context.argumentsObject()) + +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptvalueiterator.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptvalueiterator.cpp new file mode 100644 index 0000000..f940148 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_script_qscriptvalueiterator.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +object = QScriptValue() +... +it = QScriptValueIterator(object) +while it.hasNext(): + it.next() + print "%s:%s" % (it.name(), it.value().toString()) +//! [0] + + +//! [1] +QScriptValue obj = ... // the object to iterate over +while obj.isObject(): + it = QScriptValueIterator(obj) + while it.hasNext(): + it.next() + print it.name() + obj = obj.prototype() +//! [1] + + +//! [2] +while it.hasNext(): + it.next() + if it.flags() & QScriptValue::SkipInEnumeration: + continue + print "found enumerated property: %s" % it.name() +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqldatabase.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqldatabase.cpp new file mode 100644 index 0000000..6bf0e00 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqldatabase.cpp @@ -0,0 +1,146 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +# WRONG +db = QSqlDatabase.database("sales") +query = QSqlQuery("SELECT NAME, DOB FROM EMPLOYEES", db) +QSqlDatabase.removeDatabase("sales") # will output a warning + +# "db" is now a dangling invalid database connection, +# "query" contains an invalid result set +//! [0] + + +//! [1] +db = QSqlDatabase.database("sales") +query = QSqlQuery("SELECT NAME, DOB FROM EMPLOYEES", db) +# Both "db" and "query" are destroyed because they are out of scope +QSqlDatabase.removeDatabase("sales") # correct +//! [1] + + +//! [2] +class MyDatabaseDriverCreatorBase(QtSql.QSqlDriverCreatorBase): + ... + def createObject(self): + return MyDatabaseDriver() + +mydriver = MyDatabaseDriverCreatorBase() +QtSql.QSqlDatabase.registerSqlDriver("MYDRIVER", mydriver) +db = QtSql.QSqlDatabase.addDatabase("MYDRIVER") +//! [2] + + +//! [3] +... +db = QSqlDatabase.addDatabase("QODBC") +db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb") +if db.open(): + # success! + pass +... +//! [3] + + +//! [4] +... +# MySQL connection +db.setConnectOptions("CLIENT_SSL=1;CLIENT_IGNORE_SPACE=1") # use an SSL connection to the server +if not db.open(): + db.setConnectOptions() # clears the connect option string + ... +... +# PostgreSQL connection +db.setConnectOptions("requiressl=1") # enable PostgreSQL SSL connections +if not db.open(): + db.setConnectOptions() # clear options + ... +... +# ODBC connection +# set ODBC options +db.setConnectOptions("SQL_ATTR_ACCESS_MODE=SQL_MODE_READ_ONLY;SQL_ATTR_TRACE=SQL_OPT_TRACE_ON") +if not db.open(): + db.setConnectOptions() # don't try to set this option + ... +//! [4] + + +//! [5] +#include "qtdir/src/sql/drivers/psql/qsql_psql.cpp" +//! [5] + + +//! [6] +con = PQconnectdb("host=server user=bart password=simpson dbname=springfield") +drv = QPSQLDriver(con) +db = QSqlDatabase.addDatabase(drv) # becomes the new default connection +query = QSqlQuery() +query.exec_("SELECT NAME, ID FROM STAFF") +... +//! [6] + + +//! [7] +unix:LIBS += -lpq +win32:LIBS += libpqdll.lib +//! [7] + + +//! [8] +db = QSqlDatabase() +print(db.isValid()) # Returns False + +db = QSqlDatabase.database("sales") +print(db.isValid()) # Returns True if "sales" connection exists + +QSqlDatabase.removeDatabase("sales") +print(db.isValid()) # Returns False +//! [8] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqldriver.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqldriver.cpp new file mode 100644 index 0000000..cedc675 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqldriver.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +db = QSqlDatabase.addDatabase("SQLITE3") +v = QVariant(db.driver().handle()) +if v.isValid() && v.typeName() == "sqlite3*": + # v.data() returns a pointer to the handle + sqlite3 *handle = *static_cast(v.data()) + if handle != 0: # check that it is not NULL + doSomething() +//! [0] + + +//! [1] +# Impossible to translate to python +if (v.typeName() == "PGconn*") { + PGconn *handle = *static_cast(v.data()) + if (handle != 0) ... +} + +if (v.typeName() == "MYSQL*") { + MYSQL *handle = *static_cast(v.data()) + if (handle != 0) ... +} +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlerror.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlerror.cpp new file mode 100644 index 0000000..ea0c870 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlerror.cpp @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +model = QSqlQueryModel() +model.setQuery("select * from myTable") +if model.lastError().isValid(): + print model.lastError() +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlindex.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlindex.cpp new file mode 100644 index 0000000..3af6ef4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlindex.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +strlist = myIndex.toStringList() +for i in strlist: + myProcessing(i) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlquery.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlquery.cpp new file mode 100644 index 0000000..8e32368 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlquery.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +SELECT forename, surname FROM people +//! [0] + + +//! [1] +q = QSqlQuery("select * from employees") +rec = q.record() + +print "Number of columns: %d" % rec.count() + +nameCol = rec.indexOf("name") # index of the field "name" +while q.next(): + print q.value(nameCol) # output all names +//! [1] + + +//! [2] +q = QSqlQuery() +q.prepare("insert into myTable values (?, ?)") + +ints = [1, 2, 3, 4] +q.addBindValue(ints) + +names = ["Harald", "Boris", "Trond", ""] +q.addBindValue(names) + +if not q.execBatch(): + print q.lastError() +//! [2] + + +//! [3] +1 Harald +2 Boris +3 Trond +4 NULL +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlresult.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlresult.cpp new file mode 100644 index 0000000..3ba3277 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_kernel_qsqlresult.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +q = QSqlQuery() +q.prepare("insert into test (i1, i2, s) values (?, ?, ?)") + +col1 = [1, 3] +col2 = [2, 4] +col3 = ["hello", "world"] + +q.bindValue(0, col1) +q.bindValue(1, col2) +q.bindValue(2, col3) + +if not q.execBatch(): + print q.lastError() +//! [0] + + +//! [1] +query = QSqlQuery ... +v = query.result().handle() +if v.isValid() and (v.typeName() == "sqlite3_stmt*"): + # v.data() returns a pointer to the handle + handle = v.data() + if handle != 0: # check that it is not NULL + ... +//! [1] + + +//! [2] +if v.typeName() == "PGresult*": + handle = v.data() + if handle != 0 ... + +if v.typeName() == "MYSQL_STMT*": + handle = v.data() + if handle != 0 ... +} +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_models_qsqlquerymodel.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_models_qsqlquerymodel.cpp new file mode 100644 index 0000000..fc5c398 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_sql_models_qsqlquerymodel.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +while myModel.canFetchMore(): + myModel.fetchMore() +//! [0] + + +//! [1] +model = QSqlQueryModel() +model.setQuery("select * from MyTable") +if model.lastError().isValid(): + print model.lastError() +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xml_dom_qdom.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xml_dom_qdom.cpp new file mode 100644 index 0000000..6396cbc --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xml_dom_qdom.cpp @@ -0,0 +1,230 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +doc = QDomDocument() +impl = QDomImplementation() + +# This will create the element, but the resulting XML document will +# be invalid, because '~' is not a valid character in a tag name. +impl.setInvalidDataPolicy(QDomImplementation.AcceptInvalidData) +elt1 = doc.createElement("foo~bar") + +# This will create an element with the tag name "foobar". +impl.setInvalidDataPolicy(QDomImplementation.DropInvalidData) +elt2 = doc.createElement("foo~bar") + +# This will create a null element. +impl.setInvalidDataPolicy(QDomImplementation::ReturnNullNode) +elt3 = doc.createElement("foo~bar") +//! [0] + + +//! [1] +d = QDomDocument() +d.setContent(someXML) +n = d.firstChild() +while !n.isNull(): + if n.isElement(): + e = n.toElement() + print "Element name: %s" % e.tagName() + break + n = n.nextSibling() +//! [1] + + +//! [2] +QDomDocument document +QDomElement element1 = document.documentElement() +QDomElement element2 = element1 +//! [2] + + +//! [3] +QDomElement element3 = document.createElement("MyElement") +QDomElement element4 = document.createElement("MyElement") +//! [3] + + +//! [4] + +

Heading

+

Hello you

+ +//! [4] + + +//! [5] +

Heading

+

The text...

+

Next heading

+//! [5] + + +//! [6] +

Heading

+

The text...

+

Next heading

+//! [6] + + +//! [7] + +//! [7] + + +//! [8] +e = # some QDomElement... +#... +a = e.attributeNode("href") +print a.value() # prints "http://qt-project.org.com" +a.setValue("http://qt-project.org/doc") # change the node's attribute +a2 = e.attributeNode("href") +print a2.value() # prints "http://qt-project.org/doc" +//! [8] + + +//! [9] +e = # some QDomElement... +#... +s = e.text() +//! [9] + + +//! [10] +text = QString() +element = doc.documentElement() + +n = element.firstChild() +while True: + if not n.isNull() + break + t = n.toText() + if !t.isNull(): + text += t.data() + + n = n.nextSibling() +//! [10] + + +//! [11] +doc = # some QDomDocument ... +root = doc.firstChildElement("database") +elt = root.firstChildElement("entry") +while True: + if not elt.isNull(): + break + # ... + elt = elt.nextSiblingElement("entry") +//! [11] + + +//! [12] + +//! [12] + + +//! [13] +

Hello Qt ]]>

+//! [13] + + +//! [14] +Hello Qt +//! [14] + + +//! [15] + +//! [15] + + +//! [16] +doc = QDomDocument("mydocument") +file = QFile("mydocument.xml") +if not file.open(QIODevice::ReadOnly): + return +if not doc.setContent(&file): + file.close() + return +file.close() + +# print out the element names of all elements that are direct children +# of the outermost element. +docElem = doc.documentElement() + +n = docElem.firstChild() +while not n.isNull(): + e = n.toElement() # try to convert the node to an element. + if not e.isNull(): + print e.tagName() # the node really is an element. + n = n.nextSibling() +} + +# Here we append a new element to the end of the document +elem = doc.createElement("img") +elem.setAttribute("src", "myimage.png") +docElem.appendChild(elem) +//! [16] + + +//! [17] +doc = QDomDocument("MyML") +root = doc.createElement("MyML") +doc.appendChild(root) + +tag = doc.createElement("Greeting") +root.appendChild(tag) + +t = doc.createTextNode("Hello World") +tag.appendChild(t) + +xml = doc.toString() +//! [17] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xml_sax_qxml.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xml_sax_qxml.cpp new file mode 100644 index 0000000..9df91ab --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xml_sax_qxml.cpp @@ -0,0 +1,3 @@ +//! [0] +xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", True) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstracturiresolver.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstracturiresolver.cpp new file mode 100644 index 0000000..990a849 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstracturiresolver.cpp @@ -0,0 +1,3 @@ +//! [0] +return baseURI.resolved(relative); +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstractxmlforwarditerator.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstractxmlforwarditerator.cpp new file mode 100644 index 0000000..f31ea3f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstractxmlforwarditerator.cpp @@ -0,0 +1,3 @@ +//! [0] +OutputType inputToOutputItem(const InputType &inputType) const; +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstractxmlnodemodel.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstractxmlnodemodel.cpp new file mode 100644 index 0000000..0ba6de2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstractxmlnodemodel.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +myInstance = QXmlNodeModelIndex(); +//! [0] + +//! [1] +QFile queryFile(argv[1]); +QFile chemistryData(argv[2]); +QString moleculeName = argv[3]; + +QXmlQuery query; +query.setQuery(&queryFile, QUrl::fromLocalFile(queryFile.fileName())); + +ChemistryNodeModel myNodeModel(query.namePool(), chemistryData); +QXmlNodeModelIndex startNode = myNodeModel.nodeFor(moleculeName); +query.bindVariable("queryRoot", startNode); + +QFile out; +out.open(stdout, QIODevice::WriteOnly); + +QXmlSerializer serializer(query, &out); +query.evaluateTo(&serializer); +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstractxmlreceiver.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstractxmlreceiver.cpp new file mode 100644 index 0000000..32397e3 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qabstractxmlreceiver.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QXmlQuery query; +query.setQuery("doc('index.html')/html/body/p[1]"); + +QXmlSerializer serializer(query, myOutputDevice); +query.evaluateTo(&serializer); +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qsimplexmlnodemodel.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qsimplexmlnodemodel.cpp new file mode 100644 index 0000000..80147c8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qsimplexmlnodemodel.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QXmlNodeModelIndex MyTreeModel::nextFromSimpleAxis(SimpleAxis axis, const QXmlNodeModelIndex &ni) const +{ + // Convert the QXmlNodeModelIndex to a value that is specific to what we represent. + const MyValue value = toMyValue(ni); + + switch(axis) + { + case Parent: + return toNodeIndex(value.parent()); + case FirstChild: + case PreviousSibling: + case NextSibling: + // and so on + ; + } + return QXmlNodeModelIndex(); +} +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlformatter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlformatter.cpp new file mode 100644 index 0000000..3695d41 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlformatter.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QXmlQuery query; +query.setQuery("doc('index.html')/html/body/p[1]"); + +QXmlFormatter formatter(query, myOutputDevice); +formatter.setIndentationDepth(2); +query.evaluateTo(&formatter); +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlname.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlname.cpp new file mode 100644 index 0000000..0337570 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlname.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Fills the bits from begin to end with 1s and leaves the rest as 0. + +template +inline IntegralT bitmask(IntegralT begin, IntegralT end) +{ + IntegralT filled_bits = (1 << (end - begin + 1)) - 1; + return filled_bits << begin; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlquery.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlquery.cpp new file mode 100644 index 0000000..a5a2706 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlquery.cpp @@ -0,0 +1,202 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QXmlNamePool namePool(query.namePool()); + query.bindVariable(QXmlName(namePool, localName), value); +//! [0] + + +{ +//! [1] + QByteArray myDocument; + QBuffer buffer(&myDocument); // This is a QIODevice. + buffer.open(QIODevice::ReadOnly); + QXmlQuery query; + query.bindVariable("myDocument", &buffer); + query.setQuery("doc($myDocument)"); +//! [1] +} + + +{ + QIODevice *device = 0; +//! [2] + QXmlNamePool namePool(query.namePool()); + query.bindVariable(QXmlName(namePool, localName), device); +//! [2] + +} + +{ + QIODevice *myOutputDevice = 0; +//! [3] + QFile xq("myquery.xq"); + + QXmlQuery query; + query.setQuery(&xq, QUrl::fromLocalFile(xq.fileName())); + + QXmlSerializer serializer(query, myOutputDevice); + query.evaluateTo(&serializer); +//! [3] +} + +{ + QIODevice *myOutputDevice = 0; +//! [4] + QFile xq("myquery.xq"); + QString fileName("the filename"); + QString publisherName("the publisher"); + qlonglong year = 1234; + + QXmlQuery query; + + query.bindVariable("file", QVariant(fileName)); + query.bindVariable("publisher", QVariant(publisherName)); + query.bindVariable("year", QVariant(year)); + + query.setQuery(&xq, QUrl::fromLocalFile(xq.fileName())); + + QXmlSerializer serializer(query, myOutputDevice); + query.evaluateTo(&serializer); +//! [4] +} + +{ +//! [5] + QFile xq("myquery.xq"); + QString fileName("the filename"); + QString publisherName("the publisher"); + qlonglong year = 1234; + + QXmlQuery query; + + query.bindVariable("file", QVariant(fileName)); + query.bindVariable("publisher", QVariant(publisherName)); + query.bindVariable("year", QVariant(year)); + + query.setQuery(&xq, QUrl::fromLocalFile(xq.fileName())); + + QXmlResultItems result; + query.evaluateTo(&result); + QXmlItem item(result.next()); + while (!item.isNull()) { + if (item.isAtomicValue()) { + QVariant v = item.toAtomicValue(); + switch (v.type()) { + case QVariant::LongLong: + // xs:integer + break; + case QVariant::String: + // xs:string + break; + default: + // error + break; + } + } + else if (item.isNode()) { + QXmlNodeModelIndex i = item.toNodeModelIndex(); + // process node + } + item = result.next(); + } +//! [5] +} + +{ +//! [6] + QFile xq("myquery.xq"); + + QXmlQuery query; + query.setQuery(&xq, QUrl::fromLocalFile(xq.fileName())); + + QXmlResultItems result; + query.evaluateTo(&result); + QXmlItem item(result.next()); + while (!item.isNull()) { + if (item.isAtomicValue()) { + QVariant v = item.toAtomicValue(); + switch (v.type()) { + case QVariant::LongLong: + // xs:integer + break; + case QVariant::String: + // xs:string + break; + default: + if (v.userType() == qMetaTypeId()) { + QXmlName n = qVariantValue(v); + // process QXmlName n... + } + else { + // error + } + break; + } + } + else if (item.isNode()) { + QXmlNodeModelIndex i = item.toNodeModelIndex(); + // process node + } + item = result.next(); + } +//! [6] +} + +{ + QIODevice *out = 0; +//! [7] + QXmlQuery query(QXmlQuery::XSLT20); + query.setFocus(QUrl("myInput.xml")); + query.setQuery(QUrl("myStylesheet.xsl")); + query.evaluateTo(out); +//! [7] +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlresultitems.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlresultitems.cpp new file mode 100644 index 0000000..62bb471 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlresultitems.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QXmlQuery query; +query.setQuery(", 1, 'two'"); +QXmlResultItems result; + +if (query.isValid()) { + query.evaluateTo(&result); + QXmlItem item(result.next()); + while (!item.isNull()) { + // use item + item = result.next(); + } + if (result.hasError()) + /* Runtime error! */; +} +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlserializer.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlserializer.cpp new file mode 100644 index 0000000..32397e3 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/src_xmlpatterns_api_qxmlserializer.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QXmlQuery query; +query.setQuery("doc('index.html')/html/body/p[1]"); + +QXmlSerializer serializer(query, myOutputDevice); +query.evaluateTo(&serializer); +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_assistant_compat_lib_qassistantclient.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_assistant_compat_lib_qassistantclient.cpp new file mode 100644 index 0000000..c0baf89 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_assistant_compat_lib_qassistantclient.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QProcess *process = new QProcess(this); + QString app = QLibraryInfo::location(QLibraryInfo::BinariesPath) + + QLatin1String("/assistant"); + + process->start(app, QStringList() << QLatin1String("-enableRemoteControl")); + if (!process->waitForStarted()) { + QMessageBox::critical(this, tr("Remote Control"), + tr("Could not start Qt Assistant from %1.").arg(app)); + return; + } + + // show index page + QTextStream str(process); + str << QLatin1String("SetSource qthelp://mycompany.com/doc/index.html") + << QLatin1Char('\0') << endl; + } +//! [0] + + +//! [1] + CONFIG += assistant +//! [1] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_extension_default_extensionfactory.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_extension_default_extensionfactory.cpp new file mode 100644 index 0000000..4f6de9e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_extension_default_extensionfactory.cpp @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QObject *ANewExtensionFactory::createExtension(QObject *object, + const QString &iid, QObject *parent) const + { + if (iid != Q_TYPEID(QDesignerContainerExtension)) + return 0; + + if (MyCustomWidget *widget = qobject_cast + (object)) + return new MyContainerExtension(widget, parent); + + return 0; + } +//! [0] + + +//! [1] + QObject *AGeneralExtensionFactory::createExtension(QObject *object, + const QString &iid, QObject *parent) const + { + MyCustomWidget *widget = qobject_cast(object); + + if (widget && (iid == Q_TYPEID(QDesignerTaskMenuExtension))) { + return new MyTaskMenuExtension(widget, parent); + + } else if (widget && (iid == Q_TYPEID(QDesignerContainerExtension))) { + return new MyContainerExtension(widget, parent); + + } else { + return 0; + } + } +//! [1] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_extension_extension.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_extension_extension.cpp new file mode 100644 index 0000000..14fe376 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_extension_extension.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QDesignerPropertySheetExtension *propertySheet; + QExtensionManager manager = formEditor->extensionManager(); + + propertySheet = qt_extension(manager, widget); + + if(propertySheet) {...} +//! [0] + + +//! [1] + Q_DECLARE_EXTENSION_INTERFACE(MyExtension, "com.mycompany.myproduct.myextension") +//! [1] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_extension_qextensionmanager.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_extension_qextensionmanager.cpp new file mode 100644 index 0000000..dabd9f7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_extension_qextensionmanager.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + void MyPlugin::initialize(QDesignerFormEditorInterface *formEditor) + { + if (initialized) + return; + + QExtensionManager *manager = formEditor->extensionManager(); + Q_ASSERT(manager != 0); + + manager->registerExtensions(new MyExtensionFactory(manager), + Q_TYPEID(QDesignerTaskMenuExtension)); + + initialized = true; + } +//! [0] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformeditor.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformeditor.cpp new file mode 100644 index 0000000..2fe32e6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformeditor.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QDesignerObjectInspectorInterface *objectInspector = 0; + objectInspector = formEditor->objectInspector(); + + QDesignerFormWindowManagerInterface *manager = 0; + manager = formEditor->formWindowManager(); + + objectInspector->setFormWindow(manager->formWindow(0)); +//! [0] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindow.cpp new file mode 100644 index 0000000..f9d97e6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindow.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QDesignerFormWindowInterface *formWindow; + formWindow = QDesignerFormWindowInterface::findFormWindow(myWidget); +//! [0] + + +//! [1] + QList forms; + QDesignerFormWindowInterface *formWindow; + + QDesignerFormWindowManagerInterface *manager = formEditor->formWindowManager(); + + for (int i = 0; i < manager->formWindowCount(); i++) { + formWindow = manager->formWindow(i); + forms.append(formWindow); + } +//! [1] + + +//! [2] + if (formWindow->isManaged(myWidget)) + formWindow->manageWidget(myWidget->childWidget); +//! [2] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindowcursor.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindowcursor.cpp new file mode 100644 index 0000000..79b98f0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindowcursor.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QDesignerFormWindowInterface *formWindow = 0; + formWindow = QDesignerFormWindowInterface::findFormWindow(myWidget); + + formWindow->cursor()->setProperty(myWidget, myProperty, newValue); +//! [0] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindowmanager.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindowmanager.cpp new file mode 100644 index 0000000..d6654b3 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindowmanager.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QDesignerFormWindowManagerInterface *manager = 0; + QDesignerFormWindowInterface *formWindow = 0; + + manager = formEditor->formWindowManager(); + formWindow = manager->formWindow(0); + + manager->setActiveFormWindow(formWindow); +//! [0] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractobjectinspector.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractobjectinspector.cpp new file mode 100644 index 0000000..2fe32e6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractobjectinspector.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QDesignerObjectInspectorInterface *objectInspector = 0; + objectInspector = formEditor->objectInspector(); + + QDesignerFormWindowManagerInterface *manager = 0; + manager = formEditor->formWindowManager(); + + objectInspector->setFormWindow(manager->formWindow(0)); +//! [0] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractpropertyeditor.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractpropertyeditor.cpp new file mode 100644 index 0000000..2552315 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractpropertyeditor.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QDesignerPropertyEditorInterface *propertyEditor = 0; + propertyEditor = formEditor->propertyEditor(); + + connect(propertyEditor, SIGNAL(propertyChanged(QString, QVariant)), + this, SLOT(checkProperty(QString, QVariant))); +//! [0] + + +//! [1] + void checkProperty(QString property, QVariant value) { + QDesignerPropertyEditorInterface *propertyEditor = 0; + propertyEditor = formEditor->propertyEditor(); + + QObject *object = propertyeditor->object(); + MyCustomWidget *widget = qobject_cast(object); + + if (widget && property == aProperty && value != expectedValue) + {...} + } +//! [1] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractwidgetbox.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractwidgetbox.cpp new file mode 100644 index 0000000..7c0a415 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_sdk_abstractwidgetbox.cpp @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QDesignerWidgetBoxInterface *widgetBox = 0: + widgetBox = formEditor->widgetBox(); + + widgetBox->load(); +//! [0] + + +//! [1] + QString originalFile = widgetBox->fileName(); + + widgetBox->setFileName("myWidgetBox.xml"); + widgetBox->save(); +//! [1] + + +//! [2] + widgetBox->setFileName(originalFile); + widgetBox->load(); +//! [2] + + +//! [3] + if (widgetBox->filename() != "myWidgetBox.xml") { + widgetBox->setFileName("myWidgetBox.xml"); + widgetBox->load(); + } +//! [3] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_uilib_abstractformbuilder.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_uilib_abstractformbuilder.cpp new file mode 100644 index 0000000..781ce75 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_uilib_abstractformbuilder.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + MyForm::MyForm(QWidget *parent) + : QWidget(parent) + { + QFormBuilder builder; + QFile file(":/forms/myWidget.ui"); + file.open(QFile::ReadOnly); + QWidget *myWidget = builder.load(&file, this); + file.close(); + + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget(myWidget); + setLayout(layout); + } +//! [0] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_uilib_formbuilder.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_uilib_formbuilder.cpp new file mode 100644 index 0000000..fc58aa5 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_designer_src_lib_uilib_formbuilder.cpp @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + MyForm::MyForm(QWidget *parent) + : QWidget(parent) + { + QFormBuilder builder; + QFile file(":/forms/myWidget.ui"); + file.open(QFile::ReadOnly); + QWidget *myWidget = builder.load(&file, this); + file.close(); + + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget(myWidget); + setLayout(layout); + } +//! [0] + + +//! [1] + + + mywidget.ui + + +//! [1] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_patternist_qapplicationargumentparser.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_patternist_qapplicationargumentparser.cpp new file mode 100644 index 0000000..91bd24b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_patternist_qapplicationargumentparser.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + \include main.cpp +//! [0] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qtgradienteditor_qtgradientdialog.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qtgradienteditor_qtgradientdialog.cpp new file mode 100644 index 0000000..a9c6a26 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qtgradienteditor_qtgradientdialog.cpp @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + bool ok; + QGradient gradient = QtGradientDialog::getGradient(&ok, QRadialGradient(), this); + if (ok) { + // the user clicked OK and gradient is set to the gradient the user selected + } else { + // the user canceled the dialog; gradient is set to the initial + // value, in this case radial gradient + } +//! [0] + + +//! [1] + bool detailsVisible; + QColor::Spec spec; + QGradient gradient; + + QtGradientDialog dlg(this); + dlg.setDetailsVisible(detailsVisible); + dlg.setSpec(spec); + dlg.setGradient(gradient); + if (dlg.exec() != QDialog::Accepted) + return; + + gradient = dlg.gradient(); + // detailsVisible and spec properties can be changed interactively by the user too, + // we store the values of these properties for the next time QtGradientDialog is executed. + detailsVisible = dlg.detailsVisible(); + spec = dlg.spec(); +//! [1] + + +//! [2] + QtGradientDialog dlg; + dlg.setBackgroundCheckered(true); +//! [2] + + +//! [3] + QtGradientDialog dlg; + dlg.setBackgroundCheckered(false); +//! [3] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qtpropertybrowser_qtpropertybrowser.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qtpropertybrowser_qtpropertybrowser.cpp new file mode 100644 index 0000000..64bdb67 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qtpropertybrowser_qtpropertybrowser.cpp @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QtSpinBoxFactory *factory; + QSet managers = factory->propertyManagers(); +//! [0] + + +//! [1] + QtBrowserItem *item; + QList childrenItems = item->children(); + + QList childrenProperties = item->property()->subProperties(); +//! [1] + + +//! [2] + QtProperty *property1, *property2, *property3; + + property2->addSubProperty(property1); + property3->addSubProperty(property2); + + QtAbstractPropertyBrowser *editor; + + editor->addProperty(property1); + editor->addProperty(property2); + editor->addProperty(property3); +//! [2] + + +//! [3] + QtIntPropertyManager *intManager; + QtDoublePropertyManager *doubleManager; + + QtProperty *myInteger = intManager->addProperty(); + QtProperty *myDouble = doubleManager->addProperty(); + + QtSpinBoxFactory *spinBoxFactory; + QtDoubleSpinBoxFactory *doubleSpinBoxFactory; + + QtAbstractPropertyBrowser *editor; + editor->setFactoryForManager(intManager, spinBoxFactory); + editor->setFactoryForManager(doubleManager, doubleSpinBoxFactory); + + editor->addProperty(myInteger); + editor->addProperty(myDouble); +//! [3] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qtpropertybrowser_qtvariantproperty.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qtpropertybrowser_qtvariantproperty.cpp new file mode 100644 index 0000000..95de10d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qtpropertybrowser_qtvariantproperty.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QtVariantPropertyManager *variantPropertyManager; + QtProperty *property; + + variantPropertyManager->setValue(property, 10); +//! [0] + + +//! [1] + QtVariantPropertyManager *variantPropertyManager; + QtVariantProperty *property; + + property->setValue(10); +//! [1] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qttoolbardialog_qttoolbardialog.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qttoolbardialog_qttoolbardialog.cpp new file mode 100644 index 0000000..93a9b53 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/code/tools_shared_qttoolbardialog_qttoolbardialog.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QtToolBarManager *toolBarManager; + + void MyMainWindow::customize() + { + QtToolBarDialog dialog(this); + dialog.setToolBarManager(toolBarManager); + dialog.exec(); + } +//! [0] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/console/dbus_pingpong.txt b/sources/pyside2/doc/codesnippets/doc/src/snippets/console/dbus_pingpong.txt new file mode 100644 index 0000000..3c700db --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/console/dbus_pingpong.txt @@ -0,0 +1,3 @@ +[qtuser@workstation:~/dev/qt-4.4/examples/dbus/pingpong]$ ./pong & +[qtuser@workstation:~/dev/qt-4.4/examples/dbus/pingpong]$ ./ping Hello +Reply was: ping("Hello") got called diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/coordsys/coordsys.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/coordsys/coordsys.cpp new file mode 100644 index 0000000..068864f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/coordsys/coordsys.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +class MyWidget : public QWidget +{ +public: + MyWidget(); + +protected: + void paintEvent(QPaintEvent *); +}; + +MyWidget::MyWidget() +{ + QPalette palette(MyWidget::palette()); + palette.setColor(backgroundRole(), Qt::white); + setPalette(palette); +} + +void MyWidget::paintEvent(QPaintEvent *) +{ + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + painter.setPen(Qt::darkGreen); + painter.drawRect(1, 2, 6, 4); + + //painter.setPen(Qt::darkGray); + //painter.drawLine(2, 8, 6, 2); +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MyWidget widget; + widget.show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/customstyle/customstyle.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/customstyle/customstyle.cpp new file mode 100644 index 0000000..cd0af78 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/customstyle/customstyle.cpp @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "customstyle.h" + +CustomStyle::CustomStyle() +{ +//! [0] + if widget: +//! [0] //! [1] +//! [1] +} + +//! [2] +def drawPrimitive(element, option, painter, widget): + if element == PE_IndicatorSpinUp or element == PE_IndicatorSpinDown: + points = QPolygon(3) + x = option->rect.x() + y = option->rect.y() + w = option->rect.width() / 2 + h = option->rect.height() / 2 + x += (option->rect.width() - w) / 2 + y += (option->rect.height() - h) / 2 + + if element == PE_IndicatorSpinUp: + points[0] = QPoint(x, y + h) + points[1] = QPoint(x + w, y + h) + points[2] = QPoint(x + w / 2, y) + else: # PE_SpinBoxDown + points[0] = QPoint(x, y) + points[1] = QPoint(x + w, y) + points[2] = QPoint(x + w / 2, y + h) + + if option.state & State_Enabled: + painter.setPen(option.palette.mid().color()) + painter.setBrush(option.palette.buttonText()) + else: + painter.setPen(option.palette.buttonText().color()) + painter.setBrush(option.palette.mid()) + + painter.drawPolygon(points) + + else: + QWindowsStyle.drawPrimitive(element, option, painter, widget) +//! [2] //! [3] + +//! [3] //! [4] +} +//! [4] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/customstyle/customstyle.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/customstyle/customstyle.h new file mode 100644 index 0000000..8aead8e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/customstyle/customstyle.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CUSTOMSTYLE_H +#define CUSTOMSTYLE_H + +#include + +//! [0] +class CustomStyle(QProxyStyle): + ... + + def drawPrimitive(PrimitiveElement element, const QStyleOption *option, + QPainter *painter, const QWidget *widget) const; + # element : PrimitiveElement + # option : QStyleOption + # painter : QPainter + # widget : QWidget + ... +//! [0] + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/customstyle/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/customstyle/main.cpp new file mode 100644 index 0000000..ec0636e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/customstyle/main.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [using a custom style] +#include + +#include "customstyle.h" + +int main(int argc, char *argv[]) +{ + QApplication::setStyle(new CustomStyle); + QApplication app(argc, argv); + QSpinBox spinBox; + spinBox.show(); + return app.exec(); +} +//! [using a custom style] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/customviewstyle.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/customviewstyle.cpp new file mode 100644 index 0000000..a8a9364 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/customviewstyle.cpp @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "customviewstyle.h" + + + +void CustomViewStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const +{ + +//![0] + switch (element) { + case (PE_PanelItemViewItem): { + painter->save(); + + QPoint topLeft = option->rect.topLeft(); + QPoint bottomRight = option->rect.topRight(); + QLinearGradient backgroundGradient(topLeft, bottomRight); + backgroundGradient.setColorAt(0.0, QColor(Qt::yellow).lighter(190)); + backgroundGradient.setColorAt(1.0, Qt::white); + painter->fillRect(option->rect, QBrush(backgroundGradient)); + + painter->restore(); + break; + } + default: + QProxyStyle::drawPrimitive(element, option, painter, widget); + } +//![0] +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/imagedialog.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/imagedialog.cpp new file mode 100644 index 0000000..c0a7326 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/imagedialog.cpp @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "imagedialog.h" + +ImageDialog::ImageDialog(QWidget *parent) + : QDialog(parent) +{ + setupUi(this); + okButton->setAutoDefault(false); + cancelButton->setAutoDefault(false); + + colorDepthCombo->addItem(tr("2 colors (1 bit per pixel)")); + colorDepthCombo->addItem(tr("4 colors (2 bits per pixel)")); + colorDepthCombo->addItem(tr("16 colors (4 bits per pixel)")); + colorDepthCombo->addItem(tr("256 colors (8 bits per pixel)")); + colorDepthCombo->addItem(tr("65536 colors (16 bits per pixel)")); + colorDepthCombo->addItem(tr("16 million colors (24 bits per pixel)")); + + connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); +} + +void ImageDialog::on_okButton_clicked() +{ + if (nameLineEdit->text().isEmpty()) + (void) QMessageBox::information(this, tr("No Image Name"), + tr("Please supply a name for the image."), QMessageBox::Cancel); + else + accept(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/imagedialog.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/imagedialog.h new file mode 100644 index 0000000..d5852c9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/imagedialog.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef IMAGEDIALOG_H +#define IMAGEDIALOG_H + +#include "ui_imagedialog.h" + +//! [0] +class ImageDialog : public QDialog, private Ui::ImageDialog +{ + Q_OBJECT + +public: + ImageDialog(QWidget *parent = 0); + +private slots: + void on_okButton_clicked(); +}; +//! [0] + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/imagedialog.ui b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/imagedialog.ui new file mode 100644 index 0000000..1c5e546 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/imagedialog.ui @@ -0,0 +1,389 @@ + + + ImageDialog + + + ImageDialog + + + + 0 + 0 + 320 + 180 + + + + Create Image + + + + + + + 9 + + + 6 + + + + + + + + 1 + + + 6 + + + + + widthLabel + + + + 1 + 27 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Width: + + + Qt::AutoText + + + + + + + heightLabel + + + + 1 + 55 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Height: + + + Qt::AutoText + + + + + + + colorDepthCombo + + + + 74 + 83 + 227 + 22 + + + + + 5 + 0 + 0 + 0 + + + + QComboBox::InsertAtBottom + + + + + + + nameLineEdit + + + + 74 + 83 + 227 + 22 + + + + + 5 + 0 + 1 + 0 + + + + Untitled image + + + QLineEdit::Normal + + + + + + + spinBox + + + + 74 + 1 + 227 + 20 + + + + + 5 + 0 + 0 + 0 + + + + QAbstractSpinBox::UpDownArrows + + + 32 + + + 1024 + + + 1 + + + + + + + spinBox_2 + + + + 74 + 27 + 227 + 22 + + + + + 5 + 0 + 0 + 0 + + + + QAbstractSpinBox::UpDownArrows + + + 32 + + + 1024 + + + 1 + + + + + + + nameLabel + + + + 1 + 1 + 67 + 20 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Name: + + + Qt::AutoText + + + + + + + colorDepthLabel + + + + 1 + 83 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Color depth: + + + Qt::AutoText + + + + + + + + + + + + + 9 + 121 + 302 + 18 + + + + Qt::Vertical + + + + + + + + + + 1 + + + 6 + + + + + + + + + 1 + 1 + 128 + 24 + + + + Qt::Horizontal + + + + + + + okButton + + + + 135 + 1 + 80 + 24 + + + + OK + + + + + + + cancelButton + + + + 221 + 1 + 80 + 24 + + + + Cancel + + + + + + + + + + nameLineEdit + spinBox + spinBox_2 + colorDepthCombo + okButton + cancelButton + + + + nameLineEdit + returnPressed() + okButton + animateClick() + + + -1 + 7 + + + -1 + 7 + + + + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/main.cpp new file mode 100644 index 0000000..db74fe0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/autoconnection/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "imagedialog.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + ImageDialog *dialog = new ImageDialog; + dialog->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/imagedialog/imagedialog.ui b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/imagedialog/imagedialog.ui new file mode 100644 index 0000000..1c5e546 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/imagedialog/imagedialog.ui @@ -0,0 +1,389 @@ + + + ImageDialog + + + ImageDialog + + + + 0 + 0 + 320 + 180 + + + + Create Image + + + + + + + 9 + + + 6 + + + + + + + + 1 + + + 6 + + + + + widthLabel + + + + 1 + 27 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Width: + + + Qt::AutoText + + + + + + + heightLabel + + + + 1 + 55 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Height: + + + Qt::AutoText + + + + + + + colorDepthCombo + + + + 74 + 83 + 227 + 22 + + + + + 5 + 0 + 0 + 0 + + + + QComboBox::InsertAtBottom + + + + + + + nameLineEdit + + + + 74 + 83 + 227 + 22 + + + + + 5 + 0 + 1 + 0 + + + + Untitled image + + + QLineEdit::Normal + + + + + + + spinBox + + + + 74 + 1 + 227 + 20 + + + + + 5 + 0 + 0 + 0 + + + + QAbstractSpinBox::UpDownArrows + + + 32 + + + 1024 + + + 1 + + + + + + + spinBox_2 + + + + 74 + 27 + 227 + 22 + + + + + 5 + 0 + 0 + 0 + + + + QAbstractSpinBox::UpDownArrows + + + 32 + + + 1024 + + + 1 + + + + + + + nameLabel + + + + 1 + 1 + 67 + 20 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Name: + + + Qt::AutoText + + + + + + + colorDepthLabel + + + + 1 + 83 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Color depth: + + + Qt::AutoText + + + + + + + + + + + + + 9 + 121 + 302 + 18 + + + + Qt::Vertical + + + + + + + + + + 1 + + + 6 + + + + + + + + + 1 + 1 + 128 + 24 + + + + Qt::Horizontal + + + + + + + okButton + + + + 135 + 1 + 80 + 24 + + + + OK + + + + + + + cancelButton + + + + 221 + 1 + 80 + 24 + + + + Cancel + + + + + + + + + + nameLineEdit + spinBox + spinBox_2 + colorDepthCombo + okButton + cancelButton + + + + nameLineEdit + returnPressed() + okButton + animateClick() + + + -1 + 7 + + + -1 + 7 + + + + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/imagedialog/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/imagedialog/main.cpp new file mode 100644 index 0000000..aed18a2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/imagedialog/main.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "ui_imagedialog.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QDialog *window = new QDialog; + Ui::ImageDialog ui; + ui.setupUi(window); + + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/imagedialog.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/imagedialog.cpp new file mode 100644 index 0000000..fede71a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/imagedialog.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "imagedialog.h" + +ImageDialog::ImageDialog(QWidget *parent) + : QDialog(parent) +{ + setupUi(this); + + colorDepthCombo->addItem(tr("2 colors (1 bit per pixel)")); + colorDepthCombo->addItem(tr("4 colors (2 bits per pixel)")); + colorDepthCombo->addItem(tr("16 colors (4 bits per pixel)")); + colorDepthCombo->addItem(tr("256 colors (8 bits per pixel)")); + colorDepthCombo->addItem(tr("65536 colors (16 bits per pixel)")); + colorDepthCombo->addItem(tr("16 million colors (24 bits per pixel)")); + + connect(okButton, SIGNAL(clicked()), this, SLOT(accept())); + connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/imagedialog.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/imagedialog.h new file mode 100644 index 0000000..1b95cb3 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/imagedialog.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef IMAGEDIALOG_H +#define IMAGEDIALOG_H + +#include "ui_imagedialog.h" + +class ImageDialog : public QDialog, private Ui::ImageDialog +{ + Q_OBJECT + +public: + ImageDialog(QWidget *parent = 0); +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/imagedialog.ui b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/imagedialog.ui new file mode 100644 index 0000000..1c5e546 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/imagedialog.ui @@ -0,0 +1,389 @@ + + + ImageDialog + + + ImageDialog + + + + 0 + 0 + 320 + 180 + + + + Create Image + + + + + + + 9 + + + 6 + + + + + + + + 1 + + + 6 + + + + + widthLabel + + + + 1 + 27 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Width: + + + Qt::AutoText + + + + + + + heightLabel + + + + 1 + 55 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Height: + + + Qt::AutoText + + + + + + + colorDepthCombo + + + + 74 + 83 + 227 + 22 + + + + + 5 + 0 + 0 + 0 + + + + QComboBox::InsertAtBottom + + + + + + + nameLineEdit + + + + 74 + 83 + 227 + 22 + + + + + 5 + 0 + 1 + 0 + + + + Untitled image + + + QLineEdit::Normal + + + + + + + spinBox + + + + 74 + 1 + 227 + 20 + + + + + 5 + 0 + 0 + 0 + + + + QAbstractSpinBox::UpDownArrows + + + 32 + + + 1024 + + + 1 + + + + + + + spinBox_2 + + + + 74 + 27 + 227 + 22 + + + + + 5 + 0 + 0 + 0 + + + + QAbstractSpinBox::UpDownArrows + + + 32 + + + 1024 + + + 1 + + + + + + + nameLabel + + + + 1 + 1 + 67 + 20 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Name: + + + Qt::AutoText + + + + + + + colorDepthLabel + + + + 1 + 83 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Color depth: + + + Qt::AutoText + + + + + + + + + + + + + 9 + 121 + 302 + 18 + + + + Qt::Vertical + + + + + + + + + + 1 + + + 6 + + + + + + + + + 1 + 1 + 128 + 24 + + + + Qt::Horizontal + + + + + + + okButton + + + + 135 + 1 + 80 + 24 + + + + OK + + + + + + + cancelButton + + + + 221 + 1 + 80 + 24 + + + + Cancel + + + + + + + + + + nameLineEdit + spinBox + spinBox_2 + colorDepthCombo + okButton + cancelButton + + + + nameLineEdit + returnPressed() + okButton + animateClick() + + + -1 + 7 + + + -1 + 7 + + + + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/main.cpp new file mode 100644 index 0000000..db74fe0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/multipleinheritance/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "imagedialog.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + ImageDialog *dialog = new ImageDialog; + dialog->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/imagedialog.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/imagedialog.cpp new file mode 100644 index 0000000..6dae192 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/imagedialog.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "imagedialog.h" + +//! [0] +ImageDialog::ImageDialog(QWidget *parent) + : QDialog(parent) +{ + setupUi(this); + okButton->setAutoDefault(false); + cancelButton->setAutoDefault(false); +//! [0] + + colorDepthCombo->addItem(tr("2 colors (1 bit per pixel)")); + colorDepthCombo->addItem(tr("4 colors (2 bits per pixel)")); + colorDepthCombo->addItem(tr("16 colors (4 bits per pixel)")); + colorDepthCombo->addItem(tr("256 colors (8 bits per pixel)")); + colorDepthCombo->addItem(tr("65536 colors (16 bits per pixel)")); + colorDepthCombo->addItem(tr("16 million colors (24 bits per pixel)")); + + connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); +//! [1] + connect(okButton, SIGNAL(clicked()), this, SLOT(checkValues())); +} +//! [1] + +//! [2] +void ImageDialog::checkValues() +{ + if (nameLineEdit->text().isEmpty()) + (void) QMessageBox::information(this, tr("No Image Name"), + tr("Please supply a name for the image."), QMessageBox::Cancel); + else + accept(); +} +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/imagedialog.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/imagedialog.h new file mode 100644 index 0000000..16ff0ec --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/imagedialog.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef IMAGEDIALOG_H +#define IMAGEDIALOG_H + +#include "ui_imagedialog.h" + +//! [0] +class ImageDialog : public QDialog, private Ui::ImageDialog +{ + Q_OBJECT + +public: + ImageDialog(QWidget *parent = 0); + +private slots: + void checkValues(); +}; +//! [0] + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/imagedialog.ui b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/imagedialog.ui new file mode 100644 index 0000000..1c5e546 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/imagedialog.ui @@ -0,0 +1,389 @@ + + + ImageDialog + + + ImageDialog + + + + 0 + 0 + 320 + 180 + + + + Create Image + + + + + + + 9 + + + 6 + + + + + + + + 1 + + + 6 + + + + + widthLabel + + + + 1 + 27 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Width: + + + Qt::AutoText + + + + + + + heightLabel + + + + 1 + 55 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Height: + + + Qt::AutoText + + + + + + + colorDepthCombo + + + + 74 + 83 + 227 + 22 + + + + + 5 + 0 + 0 + 0 + + + + QComboBox::InsertAtBottom + + + + + + + nameLineEdit + + + + 74 + 83 + 227 + 22 + + + + + 5 + 0 + 1 + 0 + + + + Untitled image + + + QLineEdit::Normal + + + + + + + spinBox + + + + 74 + 1 + 227 + 20 + + + + + 5 + 0 + 0 + 0 + + + + QAbstractSpinBox::UpDownArrows + + + 32 + + + 1024 + + + 1 + + + + + + + spinBox_2 + + + + 74 + 27 + 227 + 22 + + + + + 5 + 0 + 0 + 0 + + + + QAbstractSpinBox::UpDownArrows + + + 32 + + + 1024 + + + 1 + + + + + + + nameLabel + + + + 1 + 1 + 67 + 20 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Name: + + + Qt::AutoText + + + + + + + colorDepthLabel + + + + 1 + 83 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Color depth: + + + Qt::AutoText + + + + + + + + + + + + + 9 + 121 + 302 + 18 + + + + Qt::Vertical + + + + + + + + + + 1 + + + 6 + + + + + + + + + 1 + 1 + 128 + 24 + + + + Qt::Horizontal + + + + + + + okButton + + + + 135 + 1 + 80 + 24 + + + + OK + + + + + + + cancelButton + + + + 221 + 1 + 80 + 24 + + + + Cancel + + + + + + + + + + nameLineEdit + spinBox + spinBox_2 + colorDepthCombo + okButton + cancelButton + + + + nameLineEdit + returnPressed() + okButton + animateClick() + + + -1 + 7 + + + -1 + 7 + + + + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/main.cpp new file mode 100644 index 0000000..db74fe0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/noautoconnection/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "imagedialog.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + ImageDialog *dialog = new ImageDialog; + dialog->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/imagedialog.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/imagedialog.cpp new file mode 100644 index 0000000..b7c3168 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/imagedialog.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "imagedialog.h" + +ImageDialog::ImageDialog(QWidget *parent) + : QDialog(parent) +{ + ui.setupUi(this); + + ui.colorDepthCombo->addItem(tr("2 colors (1 bit per pixel)")); + ui.colorDepthCombo->addItem(tr("4 colors (2 bits per pixel)")); + ui.colorDepthCombo->addItem(tr("16 colors (4 bits per pixel)")); + ui.colorDepthCombo->addItem(tr("256 colors (8 bits per pixel)")); + ui.colorDepthCombo->addItem(tr("65536 colors (16 bits per pixel)")); + ui.colorDepthCombo->addItem(tr("16 million colors (24 bits per pixel)")); + + connect(ui.okButton, SIGNAL(clicked()), this, SLOT(accept())); + connect(ui.cancelButton, SIGNAL(clicked()), this, SLOT(reject())); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/imagedialog.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/imagedialog.h new file mode 100644 index 0000000..a14a628 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/imagedialog.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef IMAGEDIALOG_H +#define IMAGEDIALOG_H + +#include "ui_imagedialog.h" + +class ImageDialog : public QDialog +{ + Q_OBJECT + +public: + ImageDialog(QWidget *parent = 0); + +private: + Ui::ImageDialog ui; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/imagedialog.ui b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/imagedialog.ui new file mode 100644 index 0000000..1c5e546 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/imagedialog.ui @@ -0,0 +1,389 @@ + + + ImageDialog + + + ImageDialog + + + + 0 + 0 + 320 + 180 + + + + Create Image + + + + + + + 9 + + + 6 + + + + + + + + 1 + + + 6 + + + + + widthLabel + + + + 1 + 27 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Width: + + + Qt::AutoText + + + + + + + heightLabel + + + + 1 + 55 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Height: + + + Qt::AutoText + + + + + + + colorDepthCombo + + + + 74 + 83 + 227 + 22 + + + + + 5 + 0 + 0 + 0 + + + + QComboBox::InsertAtBottom + + + + + + + nameLineEdit + + + + 74 + 83 + 227 + 22 + + + + + 5 + 0 + 1 + 0 + + + + Untitled image + + + QLineEdit::Normal + + + + + + + spinBox + + + + 74 + 1 + 227 + 20 + + + + + 5 + 0 + 0 + 0 + + + + QAbstractSpinBox::UpDownArrows + + + 32 + + + 1024 + + + 1 + + + + + + + spinBox_2 + + + + 74 + 27 + 227 + 22 + + + + + 5 + 0 + 0 + 0 + + + + QAbstractSpinBox::UpDownArrows + + + 32 + + + 1024 + + + 1 + + + + + + + nameLabel + + + + 1 + 1 + 67 + 20 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Name: + + + Qt::AutoText + + + + + + + colorDepthLabel + + + + 1 + 83 + 67 + 22 + + + + QFrame::NoFrame + + + QFrame::Plain + + + Color depth: + + + Qt::AutoText + + + + + + + + + + + + + 9 + 121 + 302 + 18 + + + + Qt::Vertical + + + + + + + + + + 1 + + + 6 + + + + + + + + + 1 + 1 + 128 + 24 + + + + Qt::Horizontal + + + + + + + okButton + + + + 135 + 1 + 80 + 24 + + + + OK + + + + + + + cancelButton + + + + 221 + 1 + 80 + 24 + + + + Cancel + + + + + + + + + + nameLineEdit + spinBox + spinBox_2 + colorDepthCombo + okButton + cancelButton + + + + nameLineEdit + returnPressed() + okButton + animateClick() + + + -1 + 7 + + + -1 + 7 + + + + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/main.cpp new file mode 100644 index 0000000..db74fe0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/designer/singleinheritance/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "imagedialog.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + ImageDialog *dialog = new ImageDialog; + dialog->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dialogs/dialogs.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/dialogs/dialogs.cpp new file mode 100644 index 0000000..047434f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dialogs/dialogs.cpp @@ -0,0 +1,129 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + + +//! [0] +def find(self) + + if !self.findDialog: + self.findDialog = FindDialog(self) + connect(findDialog, SIGNAL("findNext()"), self, SLOT("findNext()")) + + + self.findDialog.show() + self.findDialog.raise() + self.findDialog.activateWindow() + +//! [0] + +//! [1] +def countWords(self): + dialog = WordCountDialog(self) + dialog.setWordCount(document().wordCount()) + dialog.exec_() + +//! [1] + +//! [2] + mb = QMessageBox("Application Name", + "Hardware failure.\n\nDisk error detected\nDo you want to stop?", + QMessageBox.Question, + QMessageBox.Yes | QMessageBox.Default, + QMessageBox.No | QMessageBox.Escape, + QMessageBox.NoButton) + if mb.exec() == QMessageBox.No: + # try again +//! [2] + +//! [3] + progress = QProgressDialog("Copying files...", "Abort Copy", 0, numFiles, self) + progress.setWindowModality(Qt.WindowModal) + + for i in rang(numFiles): + progress.setValue(i) + + if progress.wasCanceled(): + break + #... copy one file + + progress.setValue(numFiles) +//! [3] + +//! [4] +# Operation constructor +def __init__(self, parent): + QObject.__init__(self, parent) + + pd = QProgressDialog("Operation in progress.", "Cancel", 0, 100) + connect(pd, SIGNAL("canceled()"), self, SLOT("cancel()")) + t = QTimer(self) + connect(t, SIGNAL("timeout()"), self, SLOT("perform()")) + t.start(0) + +//! [4] //! [5] + +def perform(self): + + pd.setValue(steps) + #... perform one percent of the operation + steps++ + if steps > pd.maximum(): + t.stop() + +//! [5] //! [6] + +def cancel(self): + + t.stop() + #... cleanup + +//! [6] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtcharts.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtcharts.cpp new file mode 100644 index 0000000..bfc35e1 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtcharts.cpp @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +import PySide2.QtCharts +//! [0] + +//! [3] +series = QtCharts.QLineSeries() +series.append(0,6) +series.append(2,4) +... +chartView = QtCharts.QChartView() +chartView.chart().addSeries(series) +chartView.chart().createDefaultAxes() +chartView.show() +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtgui.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtgui.cpp new file mode 100644 index 0000000..11c3cf5 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtgui.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +import PySide2.QtCore +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtmultimedia.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtmultimedia.cpp new file mode 100644 index 0000000..4941453 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtmultimedia.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +import PySide2.QtMultimedia +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtxmlpatterns.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtxmlpatterns.cpp new file mode 100644 index 0000000..c3363e9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/doc_src_qtxmlpatterns.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +//! [0] +import PySide2.QtXmlPatterns +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/modules.html b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/modules.html new file mode 100644 index 0000000..9c67393 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/modules.html @@ -0,0 +1,28 @@ + + + + + + Qt 4.0: Qt Classes by Module + + + + + +

Qt Classes by Module

+ + + + + + + +
QtCoreCore classes used by other modules.
QtGuiGraphical User Interface components
QtNetworkClasses for network programming.
QtOpenGLOpenGL support classes.
QtSqlClasses for database integration using SQL.
QtXmlClasses for handling XML.
+ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtcore.html b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtcore.html new file mode 100644 index 0000000..947ad40 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtcore.html @@ -0,0 +1,122 @@ + + + + + + Qt 4.0: QtCore Classes + + + + + + +

QtCore Classes

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QAbstractEventDispatcherManages Qt's event queue, excluding GUI-related events
QAbstractItemModelThe abstract interface for item model classes
QAbstractListModelAbstract model that can be subclassed to create one-dimensional list models
QAbstractTableModelAbstract model that can be subclassed to create table models
QBasicTimerTimer events for
QBitArrayArray of bits
QBufferQIODevice interface for a QByteArray
QByteArrayArray of bytes
QByteArrayMatcherHolds a sequence of bytes that can be quickly matched in a byte array
QCacheTemplate class that provides a cache
QChar16-bit Unicode character
QChildEventEvent parameters for child object events
QCoreApplicationEvent loop for Qt applications
QCustomEventSupport for custom events
QDataStreamSerialization of binary data to a QIODevice
QDateDate functions
QDateTimeDate and time functions
QDirAccess to directory structures and their contents
QEventThe base class of all event classes. Event objects contain event parameters
QFileInterface for reading from and writing to files
QFileEngineAbstraction for accessing the filesystem
QFileEngineHandlerAllows custom QFileEngines to be plugged into Qt
QFileInfoSystem-independent file information
QHashTemplate class that provides a hash-table-based dictionary
QIODeviceThe base interface class of all I/O devices in Qt
QLatin1Char8-bit ASCII/Latin-1 character
QLatin1StringThin wrapper around an ASCII/Latin-1 encoded string literal
QLibraryLoads shared libraries at runtime
QLibraryInfoInformation about the Qt library
QLineTwo-dimensional vector that uses integer point coordinates for accuracy
QLineFTwo-dimensional vector that uses floating point coordinates for accuracy
QLinkedListTemplate class that provides linked lists
QListTemplate class that provides lists
QLocaleConverts between numbers and their string representations in various languages
QMapTemplate class that provides a skip-list-based dictionary
QMetaClassInfoAdditional information about a class
QMetaEnumMeta data about an enumerator
QMetaMemberMeta data about a member function
QMetaObjectMeta information about Qt objects
QMetaPropertyMeta data about a property
QMetaTypeManages named types in the meta object system
QMimeDataContainer for data that records information about its MIME type
QModelIndexUsed to locate data in a data model
QMultiHashConvenience QHash subclass that provides multi-valued hashes
QMultiMapConvenience QMap subclass that provides multi-valued maps
QMutexAccess serialization between threads
QMutexLockerConvenience class that simplifies locking and unlocking mutexes
QObjectThe base class of all Qt objects
QObjectCleanupHandlerWatches the lifetime of multiple QObjects
QPairTemplate class that stores a pair of items
QPersistentModelIndexUsed to locate data in a data model
QPluginLoaderLoads a plugin at runtime
QPointDefines a point in the plane
QPointFPoint object that uses floating point coordinates for accuracy
QPointerTemplate class that provides guarded pointers to QObjects
QProcessUsed to start external programs and to communicate with them
QQueueGeneric container that provides a queue
QReadLockerConvenience class that simplifies locking and unlocking read-write locks for read access
QReadWriteLockRead-write locking
QRectDefines a rectangle in the plane
QRectFDefines a rectangle in the plane using floating point coordinates for accuracy
QRegExpPattern matching using regular expressions
QResourceAccess to application resource data
QSemaphoreGeneral counting semaphore
QSetTemplate class that provides a hash-table-based set
QSettingsPersistent platform-independent application settings
QSharedDataBase class for shared data objects
QSharedDataPointerPointer to a shared data object
QSignalCan be used to send signals for classes that do not inherit QObject
QSignalMapperBundles signals from identifiable senders
QSizeDefines the size of a two-dimensional object
QSizeFDefines the size of a two-dimensional object using floating point values for accuracy
QSocketNotifierSupport for monitoring activity on a file descriptor
QStackTemplate class that provides a stack
QStringUnicode character string
QStringListList of strings
QTemporaryFileI/O device that operates on temporary files
QTextCodecConversions between text encodings
QTextCodecPluginAbstract base for custom QTextCodec plugins
QTextDecoderState-based decoder
QTextEncoderState-based encoder
QTextIStreamConvenience class for input streams
QTextOStreamConvenience class for output streams
QTextStreamConvenient interface for reading and writing text
QThreadPlatform-independent threads
QThreadStoragePer-thread data storage
QTimeClock time functions
QTimerRepetitive and single-shot timers
QTimerEventParameters that describe a timer event
QTranslatorInternationalization support for text output
QTranslatorMessageTranslator message and its properties
QTsciiCodecConversion to and from the Tamil TSCII encoding
QUrlConvenient interface for working with URLs
QUuidDefines a Universally Unique Identifier (UUID)
QVarLengthArrayLow-level variable-length array
QVariantActs like a union for the most common Qt data types
QVectorTemplate class that provides a dynamic array
QWaitConditionCondition variable for synchronizing threads
QWriteLockerConvenience class that simplifies locking and unlocking read-write locks for write access

+ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtgui.html b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtgui.html new file mode 100644 index 0000000..9182b4c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtgui.html @@ -0,0 +1,276 @@ + + + + + + Qt 4.0: QtGui Classes + + + + + + +

QtGui Classes

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QAbstractButtonThe abstract base class of button widgets, providing functionality common to buttons
QAbstractItemDelegateUsed to display and edit data items from a model
QAbstractItemViewThe basic functionality for item view classes
QAbstractScrollAreaScrolling area with on-demand scroll bars
QAbstractSliderInteger value within a range
QAbstractSpinBoxSpinwidget and a line edit to display values
QAbstractTextDocumentLayoutAbstract base class used to implement custom layouts for QTextDocuments
QAccessibleEnums and static functions relating to accessibility
QAccessibleInterfaceDefines an interface that exposes information about accessible objects
QAccessibleObjectImplements parts of the QAccessibleInterface for QObjects
QAccessiblePluginAbstract base for accessibility plugins
QAccessibleWidgetImplements the QAccessibleInterface for QWidgets
QActionAbstract user interface action that can be inserted into widgets with QWidget::addAction()
QActionGroupGroups actions together
QApplicationManages the GUI application's control flow and main settings
QBitmapMonochrome (1-bit depth) pixmaps
QBoxLayoutLines up child widgets horizontally or vertically
QBrushDefines the fill pattern of shapes drawn by a QPainter
QButtonGroupContainer to organize groups of button widgets
QCDEStyleCDE look and feel
QCheckBoxCheckbox with a text label
QClipboardAccess to the window system clipboard
QCloseEventParameters that describe a close event
QColorColors based on RGB or HSV values
QColorDialogDialog widget for specifying colors
QColorGroup
QComboBoxCombined button and popup list
QCommonStyleEncapsulates the common Look and Feel of a GUI
QConicalGradientUsed in combination with QBrush to specify a conical gradient brush
QContextMenuEventParameters that describe a context menu event
QCopChannelCommunication capabilities between several clients
QCursorMouse cursor with an arbitrary shape
QDateTimeEditWidget for editing dates and times
QDecorationAllows the appearance of the Qtopia Core Window Manager to be customized
QDecorationFactoryCreates QDecoration objects
QDecorationPluginAbstract base for custom QDecoration plugins
QDesktopWidgetAccess to screen information on multi-head systems
QDialRounded range control (like a speedometer or potentiometer)
QDialogThe base class of dialog windows
QDirModelData model for the local filesystem
QDirectPainterDirect access to the video hardware
QDockWidgetWidget that can be docked inside a QMainWindow or floated as a top-level window on the desktop
QDoubleSpinBoxSpin box widget that takes doubles
QDoubleValidatorRange checking of floating-point numbers
QDragSupport for MIME-based drag and drop data transfer
QDragEnterEventEvent which is sent to a widget when a drag and drop action enters it
QDragLeaveEventEvent that is sent to a widget when a drag and drop action leaves it
QDragMoveEventEvent which is sent while a drag and drop action is in progress
QDropEventEvent which is sent when a drag and drop action is completed
QErrorMessageError message display dialog
QFileDialogDialog that allow users to select files or directories
QFileIconProviderFile icon for the QDirModel class
QFileOpenEventEvent that will be sent when there is a request to open a file
QFocusEventEvent parameters for widget focus events
QFocusFrameFocus frame which can be outside of a widget's normal paintable area
QFontFont used for drawing text
QFontDatabaseInformation about the fonts available in the underlying window system
QFontDialogDialog widget for selecting a font
QFontInfoGeneral information about fonts
QFontMetricsFont metrics information
QFontMetricsFFont metrics information
QFrameThe base class of widgets that can have a frame
QGfxDriverFactoryCreates QScreen objects for Qtopia Core
QGfxDriverPluginAbstract base for Qtopia Core graphics driver plugins
QGradientUsed in combination with QBrush to specify gradient fills
QGridLayoutLays out widgets in a grid
QGridWidgetSimple geometry management of its children
QGroupBoxGroup box frame with a title
QHBoxLayoutLines up widgets horizontally
QHBoxWidgetHorizontal geometry management for its child widgets
QHeaderViewHeader row or header column for item views
QHideEventEvent which is sent after a widget is hidden
QHoverEventParameters that describe a mouse event
QIconScalable icons in different modes and states
QIconDragEventIndicates that a main icon drag has begun
QIconEngineAbstract base class for QIcon renderers
QIconEnginePluginAbstract base for custom QIconEngine plugins
QImageHardware-independent pixmap that allows direct access to the pixel data, and can be used as a paint device
QImageIOHandlerDefines the common image I/O interface for all image formats in Qt
QImageIOHandlerFactoryInterfaceThe factory interface for QImageIOPlugin
QImageIOPluginDefines an interface for writing an image format plugin
QImageReaderFormat independent interface for reading images from files or other devices
QImageWriterFormat independent interface for writing images to files or other devices
QInputContextAbstracts the input method dependent data and composing state
QInputContextPluginAbstract base for custom QInputContext plugins
QInputDialogSimple convenience dialog to get a single value from the user
QInputEventThe base class for events that describe user input
QInputMethodEventParameters for input method events
QIntValidatorValidator that ensures a string contains a valid integer within a specified range
QItemDelegateDisplay and editing facilities for data items from a model
QItemSelectionManages information about selected items in a model
QItemSelectionModelKeeps track of a view's selected items
QItemSelectionRangeManages information about a range of selected items in a model
QKbdDriverFactoryCreates QWSKeyboardHandler objects for Qtopia Core
QKbdDriverPluginAbstract base for Qtopia Core keyboard driver plugins
QKeyEventDescribes a key event
QKeySequenceEncapsulates a key sequence as used by shortcuts
QLCDNumberDisplays a number with LCD-like digits
QLabelText or image display
QLayoutThe base class of geometry managers
QLayoutItemAbstract item that a QLayout manipulates
QLineEditOne-line text editor
QLinearGradientUsed in combination with QBrush to specify a linear gradient brush
QListViewDefault model/view implementation of a list, and of an icon view
QListWidgetItem-based list widget
QListWidgetItemItem for use with the QListWidget item view class
QMacMimeMaps open-standard MIME to Mac flavors
QMacStyleImplements an Appearance Manager style
QMainWindowMain application window
QMatrix2D transformations of a coordinate system
QMenuMenu widget for use in menu bars, context menus, and other popup menus
QMenuBarHorizontal menu bar
QMenuItemRepresents an item in a menu
QMessageBoxModal dialog with a short message, an icon, and some buttons
QMotifPlusStyleMore sophisticated Motif-ish look and feel
QMotifStyleMotif look and feel
QMouseDriverFactoryCreates QWSMouseHandler objects for Qtopia Core
QMouseDriverPluginAbstract base for Qtopia Core mouse driver plugins
QMouseEventParameters that describe a mouse event
QMoveEventEvent parameters for move events
QMovieConvenience class for playing movies with QImageReader
QPaintDeviceThe base class of objects that can be painted
QPaintEngineAbstract definition of how QPainter draws to a given device on a given platform
QPaintEventEvent parameters for paint events
QPainterDoes low-level painting e.g. on widgets
QPainterPathContainer for painting operations, enabling graphical shapes to be constructed and reused
QPaletteColor groups for each widget state
QPenDefines how a QPainter should draw lines and outlines of shapes
QPicturePaint device that records and replays QPainter commands
QPictureFormatPluginAbstract base for custom picture format plugins
QPictureIOParameters for loading and saving pictures
QPixmapOff-screen, pixel-based paint device
QPixmapCacheApplication-wide cache for pixmaps
QPlatinumStyleMac/Platinum look and feel
QPolygonVector of points
QPolygonFVector of points
QPrintEngineDefines an interface for how QPrinter interacts with a given printing subsystem
QPrinterPaint device that paints on a printer
QProgressBarHorizontal progress bar
QProgressDialogFeedback on the progress of a slow operation
QProxyModelSupport for filtering and sorting data that is passed between another model and a view
QPushButtonCommand button
QRadialGradientUsed in combination with QBrush to specify a radial gradient brush
QRadioButtonRadio button with a text label
QRegExpValidatorUsed to check a string against a regular expression
QRegionClip region for a painter
QResizeEventEvent parameters for resize events
QRubberBandRectangle or line that can indicate a selection or a boundary
QSGIStyleSGI/Irix look and feel
QScreenAnd its descendants manage the framebuffer and palette
QScrollAreaScrolling view onto another widget
QScrollBarVertical or horizontal scroll bar
QSessionManagerAccess to the session manager
QShortcutUsed to create keyboard shortcuts
QShowEventEvent that is sent when a widget is shown
QSizeGripCorner-grip for resizing a top-level window
QSizePolicyLayout attribute describing horizontal and vertical resizing policy
QSliderVertical or horizontal slider
QSoundAccess to the platform audio facilities
QSpacerItemBlank space in a layout
QSpinBoxSpin box widget
QSplashScreenSplash screen that can be shown during application startup
QSplitterImplements a splitter widget
QSplitterHandleHandle functionality of the splitter
QStackedLayoutStack of widgets where only one widget is visible at a time
QStackedWidgetStack of widgets where only one widget is visible at a time
QStandardItemModel
QStatusBarHorizontal bar suitable for presenting status information
QStyleAbstract base class that encapsulates the look and feel of a GUI
QStyleFactoryCreates QStyle objects
QStyleHintReturn
QStyleOptionStores the parameters used by QStyle functions
QStyleOptionButtonUsed to describe the parameters for drawing buttons
QStyleOptionComboBoxUsed to describe the parameter for drawing a combobox
QStyleOptionComplexUsed to hold parameters that are common to all complex controls
QStyleOptionDockWidgetUsed to describe the parameters for drawing a dock window
QStyleOptionFocusRectUsed to describe the parameters for drawing a focus rectangle with QStyle
QStyleOptionFrameUsed to describe the parameters for drawing a frame
QStyleOptionHeaderUsed to describe the parameters for drawing a header
QStyleOptionMenuItemUsed to describe the parameter necessary for drawing a menu item
QStyleOptionProgressBarUsed to describe the parameters necessary for drawing a progress bar
QStyleOptionQ3DockWindowUsed to describe the parameters for drawing various parts of a
QStyleOptionQ3ListViewUsed to describe the parameters for drawing a Q3ListView
QStyleOptionQ3ListViewItemUsed to describe an item drawn in a Q3ListView
QStyleOptionSliderUsed to describe the parameters needed for drawing a slider
QStyleOptionSpinBoxUsed to describe the parameters necessary for drawing a spin box
QStyleOptionTabUsed to describe the parameters for drawing a tab bar
QStyleOptionTitleBarUsed to describe the parameters for drawing a title bar
QStyleOptionToolBoxUsed to describe the parameters needed for drawing a tool box
QStyleOptionToolButtonUsed to describe the parameters for drawing a tool button
QStyleOptionViewItemUsed to describe the parameters used to draw an item in a view widget
QStylePainterConvenience class for drawing QStyle elements inside a widget
QStylePluginAbstract base for custom QStyle plugins
QTabBarTab bar, e.g. for use in tabbed dialogs
QTabWidgetStack of tabbed widgets
QTableViewDefault model/view implementation of a table view
QTableWidgetItem-based table view with a default model
QTableWidgetItemItem for use with the QTableWidget class
QTableWidgetSelectionRange
QTabletEventParameters that describe a Tablet event
QTextBlockContainer for text fragments in a QTextDocument
QTextBlockFormatFormatting information for blocks of text in a QTextDocument
QTextBlockGroupContainer for text blocks within a QTextDocument
QTextBrowserRich text browser with hypertext navigation
QTextCharFormatFormatting information for characters in a QTextDocument
QTextCursorOffers an API to access and modify QTextDocuments
QTextDocumentHolds formatted text that can be viewed and edited using a QTextEdit
QTextDocumentFragmentRepresents a piece of formatted text from a QTextDocument
QTextEditWidget that is used to edit and display both plain and rich text
QTextFormatFormatting information for a QTextDocument
QTextFragmentHolds a piece of text in a QTextDocument with a single QTextCharFormat
QTextFrameRepresents a frame in a QTextDocument
QTextFrameFormatFormatting information for frames in a QTextDocument
QTextImageFormatFormatting information for images in a QTextDocument
QTextInlineObjectRepresents an inline object in a QTextLayout
QTextLayoutUsed to lay out and paint a single paragraph of text
QTextLengthEncapsulates the different types of length used in a QTextDocument
QTextLineRepresents a line of text inside a QTextLayout
QTextListDecorated list of items in a QTextDocument
QTextListFormatFormatting information for lists in a QTextDocument
QTextObjectBase class for different kinds of objects that can group parts of a QTextDocument together
QTextOptionDescription of general rich text properties
QTextTableRepresents a table in a QTextDocument
QTextTableCellRepresents the properties of a cell in a QTextTable
QTextTableFormatFormatting information for tables in a QTextDocument
QToolBarMovable panel that contains a set of controls
QToolBarChangeEventEvent that is sent whenever a the toolbar button is clicked on Mac OS X
QToolBoxColumn of tabbed widget items
QToolButtonQuick-access button to commands or options, usually used inside a QToolBar
QToolTipTool tips (balloon help) for any widget
QTreeViewDefault model/view implementation of a tree view
QTreeWidgetTree view that uses a predefined tree model
QTreeWidgetItemItem for use with the QTreeWidget convenience class
QVBoxLayoutLines up widgets vertically
QVBoxWidgetVertical geometry management of its child widgets
QValidatorValidation of input text
QWSInputMethodInternational input methods for Qtopia Core
QWSKeyboardHandlerImplements the keyboard driver for Qtopia Core
QWSMouseHandlerMouse driver for Qtopia Core
QWSServerServer-specific functionality in Qtopia Core
QWSWindowServer-specific functionality in Qtopia Core
QWhatsThisSimple description of any widget, i.e. answering the question "What's this?"
QWhatsThisActionReady-made action to invoke "What's This" context help
QWheelEventParameters that describe a wheel event
QWidgetThe base class of all user interface objects
QWidgetContainerPluginAbstract base for complex custom container QWidget plugins
QWidgetItemLayout item that represents a widget
QWidgetPluginAbstract base for custom QWidget plugins
QWindowsMimeMaps open-standard MIME to Window Clipboard formats
QWindowsStyleMicrosoft Windows-like look and feel
QWindowsXPStyleMicrosoft WindowsXP-like look and feel
QWorkspaceWorkspace window that be used in an MDI application
QX11InfoInformation about the X display configuration

+ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtnetwork.html b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtnetwork.html new file mode 100644 index 0000000..01e1fa4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtnetwork.html @@ -0,0 +1,35 @@ + + + + + + Qt 4.0: QtNetwork Classes + + + + + + +

QtNetwork Classes

+

+ + + + + + + + + + + + +
QAbstractSocketThe base functionality common to all socket types
QFtpImplementation of the FTP protocol
QHostAddressIP address
QHostInfoStatic functions for host name lookups
QHttpImplementation of the HTTP protocol
QHttpHeaderHeader information for HTTP
QHttpRequestHeaderRequest header information for HTTP
QHttpResponseHeaderResponse header information for HTTP
QTcpServerTCP-based server
QTcpSocketTCP socket
QUdpSocketUDP socket
QUrlInfoStores information about URLs

+ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtopengl.html b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtopengl.html new file mode 100644 index 0000000..c42c4ae --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtopengl.html @@ -0,0 +1,27 @@ + + + + + + Qt 4.0: QtOpenGL Classes + + + + + + +

QtOpenGL Classes

+

+ + + + +
QGLColormapUsed for installing custom colormaps into QGLWidgets
QGLContextEncapsulates an OpenGL rendering context
QGLFormatThe display format of an OpenGL rendering context
QGLWidgetWidget for rendering OpenGL graphics

+ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtsql.html b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtsql.html new file mode 100644 index 0000000..db44d6d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtsql.html @@ -0,0 +1,39 @@ + + + + + + Qt 4.0: QtSql Classes + + + + + + +

QtSql Classes

+

+ + + + + + + + + + + + + + + + +
QSqlDatabaseRepresents a connection to a database
QSqlDriverAbstract base class for accessing specific SQL databases
QSqlDriverCreatorTemplate class that provides a SQL driver factory for a specific driver type
QSqlDriverCreatorBaseThe base class for SQL driver factories
QSqlDriverPluginAbstract base for custom QSqlDriver plugins
QSqlErrorSQL database error information
QSqlFieldManipulates the fields in SQL database tables and views
QSqlIndexFunctions to manipulate and describe database indexes
QSqlQueryMeans of executing and manipulating SQL statements
QSqlQueryModelRead-only data model for SQL result sets
QSqlRecordEncapsulates a database record
QSqlRelationStores information about an SQL foreign key
QSqlRelationalDelegate
QSqlRelationalTableModelEditable data model for a single database table, with foreign key support
QSqlResultAbstract interface for accessing data from specific SQL databases
QSqlTableModelEditable data model for a single database table

+ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtxml.html b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtxml.html new file mode 100644 index 0000000..d10d542 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/qtxml.html @@ -0,0 +1,53 @@ + + + + + + Qt 4.0: QtXml Classes + + + + + +

QtXml Classes

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QDomAttrRepresents one attribute of a QDomElement
QDomCDATASectionRepresents an XML CDATA section
QDomCharacterDataRepresents a generic string in the DOM
QDomCommentRepresents an XML comment
QDomDocumentRepresents an XML document
QDomDocumentFragmentTree of QDomNodes which is not usually a complete QDomDocument
QDomDocumentTypeThe representation of the DTD in the document tree
QDomElementRepresents one element in the DOM tree
QDomEntityRepresents an XML entity
QDomEntityReferenceRepresents an XML entity reference
QDomImplementationInformation about the features of the DOM implementation
QDomNamedNodeMapCollection of nodes that can be accessed by name
QDomNodeThe base class for all the nodes in a DOM tree
QDomNodeListList of QDomNode objects
QDomNotationRepresents an XML notation
QDomProcessingInstructionRepresents an XML processing instruction
QDomTextRepresents text data in the parsed XML document
QXmlAttributesXML attributes
QXmlContentHandlerInterface to report the logical content of XML data
QXmlDTDHandlerInterface to report DTD content of XML data
QXmlDeclHandlerInterface to report declaration content of XML data
QXmlDefaultHandlerDefault implementation of all the XML handler classes
QXmlEntityResolverInterface to resolve external entities contained in XML data
QXmlErrorHandlerInterface to report errors in XML data
QXmlInputSourceThe input data for the QXmlReader subclasses
QXmlLexicalHandlerInterface to report the lexical content of XML data
QXmlLocatorThe XML handler classes with information about the parsing position within a file
QXmlNamespaceSupportHelper class for XML readers which want to include namespace support
QXmlParseExceptionUsed to report errors with the QXmlErrorHandler interface
QXmlReaderInterface for XML readers (i.e. parsers)
QXmlSimpleReaderImplementation of a simple XML parser

+ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/titles.txt b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/titles.txt new file mode 100644 index 0000000..016825d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/Resources/titles.txt @@ -0,0 +1,7 @@ +Qt Classes by Module :/Resources/modules.html +QtCore :/Resources/qtcore.html +QtGui :/Resources/qtgui.html +QtNetwork :/Resources/qtnetwork.html +QtOpenGL :/Resources/qtopengl.html +QtSql :/Resources/qtsql.html +QtXml :/Resources/qtxml.html diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/dockwidgets.qrc b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/dockwidgets.qrc new file mode 100644 index 0000000..8c462a5 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/dockwidgets.qrc @@ -0,0 +1,12 @@ + + + Resources/titles.txt + Resources/modules.html + Resources/qtcore.html + Resources/qtgui.html + Resources/qtnetwork.html + Resources/qtopengl.html + Resources/qtsql.html + Resources/qtxml.html + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/main.cpp new file mode 100644 index 0000000..455aa8c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QMainWindow *window = new MainWindow; + window->show(); + window->resize(640, 480); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/mainwindow.cpp new file mode 100644 index 0000000..8bc0fae --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/mainwindow.cpp @@ -0,0 +1,131 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) +{ + setWindowTitle("Dock Widgets"); + + setupDockWindow(); + setupContents(); + setupMenus(); + + textBrowser = new QTextBrowser(this); + + connect(headingList, SIGNAL(itemClicked(QListWidgetItem *)), + this, SLOT(updateText(QListWidgetItem *))); + + updateText(headingList->item(0)); + headingList->setCurrentRow(0); + setCentralWidget(textBrowser); +} + +void MainWindow::setupContents() +{ + QFile titlesFile(":/Resources/titles.txt"); + titlesFile.open(QFile::ReadOnly); + int chapter = 0; + + do { + QString line = titlesFile.readLine().trimmed(); + QStringList parts = line.split("\t", QString::SkipEmptyParts); + if (parts.size() != 2) + break; + + QString chapterTitle = parts[0]; + QString fileName = parts[1]; + + QFile chapterFile(fileName); + + chapterFile.open(QFile::ReadOnly); + QListWidgetItem *item = new QListWidgetItem(chapterTitle, headingList); + item->setData(Qt::DisplayRole, chapterTitle); + item->setData(Qt::UserRole, chapterFile.readAll()); + item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable); + chapterFile.close(); + + chapter++; + } while (titlesFile.isOpen()); + + titlesFile.close(); +} + +void MainWindow::setupDockWindow() +{ +//! [0] + contentsWindow = QDockWidget(tr("Table of Contents"), self) + contentsWindow.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea) + addDockWidget(Qt.LeftDockWidgetArea, contentsWindow) + + headingList = QListWidget(contentsWindow) + contentsWindow.setWidget(headingList) +//! [0] +} + +void MainWindow::setupMenus() +{ + QAction *exitAct = new QAction(tr("E&xit"), this); + exitAct->setShortcut(tr("Ctrl+Q")); + exitAct->setStatusTip(tr("Exit the application")); + connect(exitAct, SIGNAL(triggered()), qApp, SLOT(closeAllWindows())); + + QMenu *fileMenu = menuBar()->addMenu(tr("&File")); + fileMenu->addAction(exitAct); +} + +void MainWindow::updateText(QListWidgetItem *item) +{ + QString text = item->data(Qt::UserRole).toString(); + textBrowser->setHtml(text); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/mainwindow.h new file mode 100644 index 0000000..e9891d6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dockwidgets/mainwindow.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +class QDockWidget; +class QListWidget; +class QListWidgetItem; +class QTextBrowser; + +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + MainWindow(QWidget *parent = 0); + +private slots: + void updateText(QListWidgetItem *item); + +private: + void setupContents(); + void setupDockWindow(); + void setupMenus(); + + QDockWidget *contentsWindow; + QListWidget *headingList; + QTextBrowser *textBrowser; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/dragwidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/dragwidget.cpp new file mode 100644 index 0000000..a50581c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/dragwidget.cpp @@ -0,0 +1,163 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "dragwidget.h" + +DragWidget::DragWidget(QWidget *parent) + : QFrame(parent) +{ + setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); + dragDropLabel = new QLabel("", this); + dragDropLabel->setAlignment(Qt::AlignHCenter); + + QHBoxLayout *layout = new QHBoxLayout(this); + layout->addStretch(0); + layout->addWidget(dragDropLabel); + layout->addStretch(0); + + setAcceptDrops(true); +} + +// Accept all actions, but deal with them separately later. +//! [0] +void DragWidget::dragEnterEvent(QDragEnterEvent *event) +{ + event->acceptProposedAction(); +} +//! [0] + +//! [1] +void DragWidget::dropEvent(QDropEvent *event) +{ + if (event->source() == this && event->possibleActions() & Qt::MoveAction) + return; +//! [1] + +//! [2] + if (event->proposedAction() == Qt::MoveAction) { + event->acceptProposedAction(); + // Process the data from the event. +//! [2] + emit dragResult(tr("The data was moved here.")); +//! [3] + } else if (event->proposedAction() == Qt::CopyAction) { + event->acceptProposedAction(); + // Process the data from the event. +//! [3] + emit dragResult(tr("The data was copied here.")); +//! [4] + } else { + // Ignore the drop. + return; + } +//! [4] + // End of quote + + emit mimeTypes(event->mimeData()->formats()); + setData(event->mimeData()->formats()[0], + event->mimeData()->data(event->mimeData()->formats()[0])); +//! [5] +} +//! [5] + +//! [6] +void DragWidget::mousePressEvent(QMouseEvent *event) +{ + if (event->button() == Qt::LeftButton) + dragStartPosition = event->pos(); +} +//! [6] + +//! [7] +void DragWidget::mouseMoveEvent(QMouseEvent *event) +{ + if (!(event->buttons() & Qt::LeftButton)) + return; + if ((event->pos() - dragStartPosition).manhattanLength() + < QApplication::startDragDistance()) + return; + + QDrag *drag = new QDrag(this); + QMimeData *mimeData = new QMimeData; + + mimeData->setData(mimeType, data); + drag->setMimeData(mimeData); + + Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction); +//! [7] + + switch (dropAction) { + case Qt::CopyAction: + emit dragResult(tr("The text was copied.")); + break; + case Qt::MoveAction: + emit dragResult(tr("The text was moved.")); + break; + default: + emit dragResult(tr("Unknown action.")); + break; + } +//! [8] +} +//! [8] + +void DragWidget::setData(const QString &mimetype, const QByteArray &newData) +{ + mimeType = mimetype; + data = QByteArray(newData); + + dragDropLabel->setText(tr("%1 bytes").arg(data.size())); + + QStringList formats; + formats << mimetype; + emit mimeTypes(formats); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/dragwidget.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/dragwidget.h new file mode 100644 index 0000000..88bff66 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/dragwidget.h @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DRAGWIDGET_H +#define DRAGWIDGET_H + +#include +#include +#include +#include + +class QComboBox; +class QFrame; +class QLabel; +class QTextBrowser; + +class DragWidget : public QFrame +{ + Q_OBJECT + +public: + DragWidget(QWidget *parent); + void setData(const QString &mimetype, const QByteArray &newData); + +signals: + void dragResult(const QString &actionText); + void mimeTypes(const QStringList &types); + +protected: + void dragEnterEvent(QDragEnterEvent *event); + void dropEvent(QDropEvent *event); + void mouseMoveEvent(QMouseEvent *event); + void mousePressEvent(QMouseEvent *event); + +private: + QByteArray data; + QLabel *dragDropLabel; + QPoint dragStartPosition; + QString mimeType; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/main.cpp new file mode 100644 index 0000000..cf9c3fa --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/main.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window1 = new MainWindow; + MainWindow *window2 = new MainWindow; + window1->show(); + window2->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/mainwindow.cpp new file mode 100644 index 0000000..9485326 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/mainwindow.cpp @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "dragwidget.h" +#include "mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) +{ + QFrame *centralWidget = new QFrame(this); + + QLabel *mimeTypeLabel = new QLabel(tr("MIME types:"), centralWidget); + mimeTypeCombo = new QComboBox(centralWidget); + + QLabel *dataLabel = new QLabel(tr("Amount of data (bytes):"), centralWidget); + dragWidget = new DragWidget(centralWidget); + + connect(dragWidget, SIGNAL(mimeTypes(const QStringList &)), + this, SLOT(setMimeTypes(const QStringList &))); + connect(dragWidget, SIGNAL(dragResult(const QString &)), + this, SLOT(setDragResult(const QString &))); + + QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget); + mainLayout->addWidget(mimeTypeLabel); + mainLayout->addWidget(mimeTypeCombo); + mainLayout->addSpacing(32); + mainLayout->addWidget(dataLabel); + mainLayout->addWidget(dragWidget); + + statusBar(); + dragWidget->setData(QString("text/plain"), QByteArray("Hello world")); + setCentralWidget(centralWidget); + setWindowTitle(tr("Drag and Drop")); +} + +void MainWindow::setDragResult(const QString &actionText) +{ + statusBar()->showMessage(actionText); +} + +void MainWindow::setMimeTypes(const QStringList &types) +{ + mimeTypeCombo->clear(); + mimeTypeCombo->addItems(types); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/mainwindow.h new file mode 100644 index 0000000..ece2a81 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/draganddrop/mainwindow.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include + +class QComboBox; +class QLabel; +class QLineEdit; +class QMouseEvent; +class QTextEdit; +class DragWidget; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = 0); + +public slots: + void setDragResult(const QString &actionText); + void setMimeTypes(const QStringList &types); + +private: + QComboBox *mimeTypeCombo; + DragWidget *dragWidget; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/images.qrc b/sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/images.qrc new file mode 100644 index 0000000..30b8a29 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/images.qrc @@ -0,0 +1,5 @@ + + + images/file.png + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/images/file.png b/sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/images/file.png new file mode 100644 index 0000000000000000000000000000000000000000..9520080ed0bce0fb7a294663addd4ec947d4baa6 GIT binary patch literal 313 zcmV-90mlA`P))5pFc`-1f2AlQ;_Bky0lb2E2UjO24}9WccyC zACOpReq#Q?QBXpnAIW)n8*Uug5=osq*x1`3%vc88!(y>P*pSw^gA0ob3Ls%!<6h4d z&JlzJSb1Dc7CH>L0I=Y0xraX^3NYfzo)mzWzPbv>jM;G~Lx3}f?-+z3QzlL&rRT!g zX^(FC>T5Xjup6Q#=WVc_Z1iokNN$Bqn*pDkRQ%BJy!p2ZKT&wzE&5 + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/mainwindow.cpp new file mode 100644 index 0000000..6e40734 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/mainwindow.cpp @@ -0,0 +1,72 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + + +//! [0] +def mousePressEvent(self, event): + if event.button() == Qt.LeftButton + && iconLabel.geometry().contains(event.pos()): + +//! [1] + drag = QDrag(self) + mimeData = QMimeData() + + mimeData.setText(commentEdit.toPlainText()) + drag.setMimeData(mimeData) +//! [1] + drag.setPixmap(iconPixmap) + + dropAction = drag.exec_() +//! [0] + +//! [2] + + +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/mainwindow.h new file mode 100644 index 0000000..fccb01a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dragging/mainwindow.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include + +class QLabel; +class QLineEdit; +class QMouseEvent; +class QTextEdit; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = 0); + +protected: + void mousePressEvent(QMouseEvent *event); + +private: + QLabel *iconLabel; + QLineEdit *nameEdit; + QPixmap iconPixmap; + QPoint dragStartPosition; + QTextEdit *commentEdit; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dropactions/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/dropactions/main.cpp new file mode 100644 index 0000000..f910d28 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dropactions/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "window.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Window *window = new Window; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dropactions/window.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/dropactions/window.cpp new file mode 100644 index 0000000..70a54e5 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dropactions/window.cpp @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "window.h" + +Window::Window(QWidget *parent) + : QWidget(parent) +{ + QLabel *textLabel = new QLabel(tr("Data:"), this); + textBrowser = new QTextBrowser(this); + + QLabel *mimeTypeLabel = new QLabel(tr("MIME types:"), this); + mimeTypeCombo = new QComboBox(this); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->addWidget(textLabel); + layout->addWidget(textBrowser); + layout->addWidget(mimeTypeLabel); + layout->addWidget(mimeTypeCombo); +/* + ... + setAcceptDrops(true); +*/ + setAcceptDrops(true); + setWindowTitle(tr("Drop Actions")); +} + +void Window::dragEnterEvent(QDragEnterEvent *event) +{ + if (event->mimeData()->hasFormat("text/plain")) + event->acceptProposedAction(); +} + +void Window::dropEvent(QDropEvent *event) +{ + QMenu actionMenu(this); + QAction *copyAction = 0; + QAction *moveAction = 0; + QAction *linkAction = 0; + QAction *ignoreAction = 0; + if (event->possibleActions() & Qt::CopyAction) + copyAction = actionMenu.addAction(tr("Copy")); + if (event->possibleActions() & Qt::MoveAction) + moveAction = actionMenu.addAction(tr("Move")); + if (event->possibleActions() & Qt::LinkAction) + linkAction = actionMenu.addAction(tr("Link")); + if (event->possibleActions() & Qt::IgnoreAction) + ignoreAction = actionMenu.addAction(tr("Ignore")); + + QAction *result = actionMenu.exec(QCursor::pos()); + + if (copyAction && result == copyAction) + event->setDropAction(Qt::CopyAction); + else if (moveAction && result == moveAction) + event->setDropAction(Qt::MoveAction); + else if (linkAction && result == linkAction) + event->setDropAction(Qt::LinkAction); + else { + event->setDropAction(Qt::IgnoreAction); + return; + } + + textBrowser->setPlainText(event->mimeData()->text()); + mimeTypeCombo->clear(); + mimeTypeCombo->addItems(event->mimeData()->formats()); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dropactions/window.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/dropactions/window.h new file mode 100644 index 0000000..8607b69 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dropactions/window.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include +#include + +class QComboBox; +class QFrame; +class QTextBrowser; + +class Window : public QWidget +{ + Q_OBJECT + +public: + Window(QWidget *parent = 0); + +protected: + void dragEnterEvent(QDragEnterEvent *event); + void dropEvent(QDropEvent *event); + +private: + QComboBox *mimeTypeCombo; + QFrame *dropFrame; + QTextBrowser *textBrowser; + QString oldText; + QStringList oldMimeTypes; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/droparea.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/droparea.cpp new file mode 100644 index 0000000..6628520 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/droparea.cpp @@ -0,0 +1,147 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +from PySide2.QtGui import * + + +DropArea.DropArea(QWidget *parent) + : QLabel(parent) +{ + setMinimumSize(200, 200) + setFrameStyle(QFrame.Sunken | QFrame::StyledPanel) + setAlignment(Qt.AlignCenter) + setAcceptDrops(True) + setAutoFillBackground(True) + clear() +} + +void DropArea.dragEnterEvent(QDragEnterEvent *event) +{ + setText(tr("")) + setBackgroundRole(QPalette.Highlight) + + event.acceptProposedAction() + emit changed(event.mimeData()) +} + +void DropArea.dragMoveEvent(QDragMoveEvent *event) +{ + event.acceptProposedAction() +} + +void DropArea.dropEvent(QDropEvent *event) +{ + const QMimeData *mimeData = event.mimeData() + + if (mimeData.hasImage()) { + setPixmap(qvariant_cast(mimeData.imageData())) + } else if (mimeData.hasHtml()) { + setText(mimeData.html()) + setTextFormat(Qt.RichText) + } else if (mimeData.hasText()) { + setText(mimeData.text()) + setTextFormat(Qt.PlainText) + } else { + setText(tr("Cannot display data")) + } + + setBackgroundRole(QPalette.Dark) + event.acceptProposedAction() +} + +//![0] +def paste(self): + clipboard = QGuiApplication.clipboard() + mimeData = clipboard.mimeData() + + if mimeData.hasImage(): + setPixmap(mimeData.imageData()) + elif mimeData.hasHtml(): + setText(mimeData.html()) + setTextFormat(Qt.RichText) + elif (mimeData.hasText(): + setText(mimeData.text()) + setTextFormat(Qt.PlainText) + else: + setText(tr("Cannot display data")) +//![0] + + emit changed(mimeData) + setBackgroundRole(QPalette.Dark) + //event.acceptProposedAction() +} + +void DropArea.dragLeaveEvent(QDragLeaveEvent *event) +{ + clear() + event.accept() +} + +void DropArea.clear() +{ + setText(tr("")) + setBackgroundRole(QPalette.Dark) + + emit changed() +} + +QPixmap DropArea.extractPixmap(const QByteArray &data, const QString &format) +{ + QList imageFormats = QImageReader.supportedImageFormats() + QPixmap pixmap + + foreach (QByteArray imageFormat, imageFormats) { + if (format.mid(6) == QString(imageFormat)) { + pixmap.loadFromData(data, imageFormat) + break + } + } + return pixmap +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dropevents/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/dropevents/main.cpp new file mode 100644 index 0000000..6d4e9fb --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dropevents/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "window.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + Window *window = new Window; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dropevents/window.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/dropevents/window.cpp new file mode 100644 index 0000000..409ab5b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dropevents/window.cpp @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "window.h" + +//! [0] +Window::Window(QWidget *parent) + : QWidget(parent) +{ +//! [0] + QLabel *textLabel = new QLabel(tr("Data:"), this); + textBrowser = new QTextBrowser(this); + + QLabel *mimeTypeLabel = new QLabel(tr("MIME types:"), this); + mimeTypeCombo = new QComboBox(this); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->addWidget(textLabel); + layout->addWidget(textBrowser); + layout->addWidget(mimeTypeLabel); + layout->addWidget(mimeTypeCombo); + +//! [1] + setAcceptDrops(true); +//! [1] + setWindowTitle(tr("Drop Events")); +//! [2] +} +//! [2] + +//! [3] +void Window::dragEnterEvent(QDragEnterEvent *event) +{ + if (event->mimeData()->hasFormat("text/plain")) + event->acceptProposedAction(); +} +//! [3] + +//! [4] +void Window::dropEvent(QDropEvent *event) +{ + textBrowser->setPlainText(event->mimeData()->text()); + mimeTypeCombo->clear(); + mimeTypeCombo->addItems(event->mimeData()->formats()); + + event->acceptProposedAction(); +} +//! [4] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/dropevents/window.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/dropevents/window.h new file mode 100644 index 0000000..8607b69 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/dropevents/window.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include +#include + +class QComboBox; +class QFrame; +class QTextBrowser; + +class Window : public QWidget +{ + Q_OBJECT + +public: + Window(QWidget *parent = 0); + +protected: + void dragEnterEvent(QDragEnterEvent *event); + void dropEvent(QDropEvent *event); + +private: + QComboBox *mimeTypeCombo; + QFrame *dropFrame; + QTextBrowser *textBrowser; + QString oldText; + QStringList oldMimeTypes; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/droprectangle/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/droprectangle/main.cpp new file mode 100644 index 0000000..f910d28 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/droprectangle/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "window.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Window *window = new Window; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/droprectangle/window.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/droprectangle/window.cpp new file mode 100644 index 0000000..5f8ff73 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/droprectangle/window.cpp @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "window.h" + +Window::Window(QWidget *parent) + : QWidget(parent) +{ + QLabel *textLabel = new QLabel(tr("Data:"), this); + textBrowser = new QTextBrowser(this); + + QLabel *mimeTypeLabel = new QLabel(tr("MIME types:"), this); + mimeTypeCombo = new QComboBox(this); + + dropFrame = new QFrame(this); + dropFrame->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); + QLabel *dropLabel = new QLabel(tr("Drop items here"), dropFrame); + dropLabel->setAlignment(Qt::AlignHCenter); + + QVBoxLayout *dropFrameLayout = new QVBoxLayout(dropFrame); + dropFrameLayout->addWidget(dropLabel); + + QHBoxLayout *dropLayout = new QHBoxLayout; + dropLayout->addStretch(0); + dropLayout->addWidget(dropFrame); + dropLayout->addStretch(0); + + QVBoxLayout *mainLayout = new QVBoxLayout(this); + mainLayout->addWidget(textLabel); + mainLayout->addWidget(textBrowser); + mainLayout->addWidget(mimeTypeLabel); + mainLayout->addWidget(mimeTypeCombo); + mainLayout->addSpacing(32); + mainLayout->addLayout(dropLayout); + + setAcceptDrops(true); + setWindowTitle(tr("Drop Rectangle")); +} + +//! [0] +void Window::dragMoveEvent(QDragMoveEvent *event) +{ + if (event->mimeData()->hasFormat("text/plain") + && event->answerRect().intersects(dropFrame->geometry())) + + event->acceptProposedAction(); +} +//! [0] + +void Window::dropEvent(QDropEvent *event) +{ + textBrowser->setPlainText(event->mimeData()->text()); + mimeTypeCombo->clear(); + mimeTypeCombo->addItems(event->mimeData()->formats()); + + event->acceptProposedAction(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/droprectangle/window.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/droprectangle/window.h new file mode 100644 index 0000000..e7854bc --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/droprectangle/window.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include +#include + +class QComboBox; +class QFrame; +class QTextBrowser; + +class Window : public QWidget +{ + Q_OBJECT + +public: + Window(QWidget *parent = 0); + +protected: + void dragMoveEvent(QDragMoveEvent *event); + void dropEvent(QDropEvent *event); + +private: + QComboBox *mimeTypeCombo; + QFrame *dropFrame; + QTextBrowser *textBrowser; + QString oldText; + QStringList oldMimeTypes; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/eventfilters/filterobject.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/eventfilters/filterobject.cpp new file mode 100644 index 0000000..183d2ef --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/eventfilters/filterobject.cpp @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "filterobject.h" + +FilterObject::FilterObject(QObject *parent) + : QObject(parent), target(0) +{ +} + +//! [0] +bool FilterObject::eventFilter(QObject *object, QEvent *event) +{ + if (object == target && event->type() == QEvent::KeyPress) { + QKeyEvent *keyEvent = static_cast(event); + if (keyEvent->key() == Qt::Key_Tab) { + // Special tab handling + return true; + } else + return false; + } + return false; +} +//! [0] + +void FilterObject::setFilteredObject(QObject *object) +{ + if (target) + target->removeEventFilter(this); + + target = object; + + if (target) + target->installEventFilter(this); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/eventfilters/filterobject.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/eventfilters/filterobject.h new file mode 100644 index 0000000..18fd7b8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/eventfilters/filterobject.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef FILTEROBJECT_H +#define FILTEROBJECT_H + +#include + +class FilterObject : public QObject +{ + Q_OBJECT + +public: + FilterObject(QObject *parent = 0); + bool eventFilter(QObject *object, QEvent *event); + void setFilteredObject(QObject *object); + +private: + QObject *target; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/eventfilters/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/eventfilters/main.cpp new file mode 100644 index 0000000..b1d3e70 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/eventfilters/main.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include "filterobject.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QTextEdit editor; + FilterObject filter; + filter.setFilteredObject(&editor); + editor.show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/events/events.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/events/events.cpp new file mode 100644 index 0000000..030cf23 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/events/events.cpp @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +class MyCheckBox : public QCheckBox +{ +public: + void mousePressEvent(QMouseEvent *event); +}; + +//! [0] +void MyCheckBox::mousePressEvent(QMouseEvent *event) +{ + if (event->button() == Qt::LeftButton) { + // handle left mouse button here + } else { + // pass on other buttons to base class + QCheckBox::mousePressEvent(event); + } +} +//! [0] + +class MyWidget : public QWidget +{ +public: + bool event(QEvent *event); +}; + +static const int MyCustomEventType = 1099; + +class MyCustomEvent : public QEvent +{ +public: + MyCustomEvent() : QEvent((QEvent::Type)MyCustomEventType) {} +}; + +//! [1] +bool MyWidget::event(QEvent *event) +{ + if (event->type() == QEvent::KeyPress) { + QKeyEvent *ke = static_cast(event); + if (ke->key() == Qt::Key_Tab) { + // special tab handling here + return true; + } + } else if (event->type() == MyCustomEventType) { + MyCustomEvent *myEvent = static_cast(event); + // custom event handling here + return true; + } + + return QWidget::event(event); +} +//! [1] + +int main() +{ +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/explicitlysharedemployee/employee.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/explicitlysharedemployee/employee.cpp new file mode 100644 index 0000000..d862513 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/explicitlysharedemployee/employee.cpp @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "employee.h" + +//! [0] +EmployeeData::EmployeeData() +{ + id = -1; + name = 0; +} +//! [0] + +//! [1] +EmployeeData::EmployeeData(const EmployeeData &other) +//! [1] //! [2] + : QSharedData(other) +{ + id = other.id; + if (other.name) { + name = new QString(*other.name); + } else { + name = 0; + } +} +//! [2] + +//! [3] +EmployeeData::~EmployeeData() +//! [3] //! [4] +{ + delete name; +} +//! [4] + +//! [5] +Employee::Employee() +//! [5] //! [6] +{ + d = new EmployeeData; +} +//! [6] + +//! [7] +Employee::Employee(int id, const QString &name) +//! [7] //! [8] +{ + d = new EmployeeData; + setId(id); + setName(name); +} +//! [8] + +//! [9] +void Employee::setName(const QString &name) +//! [9] //! [10] +{ + if (!d->name) + d->name = new QString; + *d->name = name; +} +//! [10] + +//! [11] +QString Employee::name() const +//! [11] //! [12] +{ + if (!d->name) + return QString(); + return *d->name; +} +//! [12] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/explicitlysharedemployee/employee.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/explicitlysharedemployee/employee.h new file mode 100644 index 0000000..66ca6b3 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/explicitlysharedemployee/employee.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef EMPLOYEE_H +#define EMPLOYEE_H + +#include +#include + +class EmployeeData : public QSharedData +{ +public: + EmployeeData(); + EmployeeData(const EmployeeData &other); + ~EmployeeData(); + + int id; + QString *name; +}; + +class Employee +{ +public: + Employee(); + Employee(int id, const QString &name); + + void setId(int id) { d->id = id; } + void setName(const QString &name); + + int id() const { return d->id; } + QString name() const; + +private: + QExplicitlySharedDataPointer d; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/explicitlysharedemployee/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/explicitlysharedemployee/main.cpp new file mode 100644 index 0000000..13571ac --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/explicitlysharedemployee/main.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "employee.h" + +int main() +{ + { + Employee e1(10, "Albrecht Durer"); + Employee e2 = e1; + e1.setName("Hans Holbein"); + } +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/file/file.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/file/file.cpp new file mode 100644 index 0000000..3818e6a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/file/file.cpp @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +static void process_line(const QByteArray &) +{ +} + +static void process_line(const QString &) +{ +} + +static void noStream_snippet() +{ +//! [0] + file = QFile("in.txt") + if not file.open(QIODevice.ReadOnly | QIODevice.Text): + return + + while not file.atEnd(): + line = file.readLine() # A QByteArray + process_line(line) +//! [0] +} + +static void readTextStream_snippet() +{ +//! [1] + file = QFile("in.txt") + if not file.open(QIODevice.ReadOnly | QIODevice.Text): + return + + in = QTextStream(file) + while not in.atEnd(): + line = in.readLine() # A QByteArray + process_line(line) +//! [1] +} + +static void writeTextStream_snippet() +{ +//! [2] + file = QFile("out.txt") + if not file.open(QIODevice.WriteOnly | QIODevice.Text): + return + + out = QTextStream(file) + out << "The magic number is: " << 49 << "\n" +//! [2] +} + +static void writeTextStream_snippet() +{ + QFile file("out.dat"); + if (!file.open(QIODevice.WriteOnly)) + return; + + QDataStream out(&file); + out << "The magic number is: " << 49 << "\n"; +} + +static void readRegularEmptyFile_snippet() +{ +//! [3] + file = QFile("/proc/modules") + if not file.open(QIODevice.ReadOnly | QIODevice.Text): + return + + in = QTextStream(file) + line = in.readLine() + while not line.isNull(): + process_line(line) + line = in.readLine() +//! [3] +} + +int main() +{ + lineByLine_snippet(); + writeStream_snippet(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/filedialogurls.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/filedialogurls.cpp new file mode 100644 index 0000000..192188e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/filedialogurls.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argv, char **args) +{ + QApplication app(argv, args); + +//![0] + QList urls; + urls << QUrl::fromLocalFile("/home/gvatteka/dev/qt-45") + << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); + + QFileDialog dialog; + dialog.setSidebarUrls(urls); + dialog.setFileMode(QFileDialog::AnyFile); + if(dialog.exec()) { + // ... + } +//![0] + + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/fileinfo/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/fileinfo/main.cpp new file mode 100644 index 0000000..09ff00b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/fileinfo/main.cpp @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + +//! [0] + fileInfo1 = QFileInfo("~/examples/191697/.") + fileInfo2 = QFileInfo("~/examples/191697/..") + fileInfo3 = QFileInfo("~/examples/191697/main.cpp") +//! [0] +//! [1] + fileInfo4 = QFileInfo(".") + fileInfo5 = QFileInfo("..") + fileInfo6 = QFileInfo("main.cpp") +//! [1] + + qDebug() << fileInfo1.fileName(); + qDebug() << fileInfo2.fileName(); + qDebug() << fileInfo3.fileName(); + qDebug() << fileInfo4.fileName(); + qDebug() << fileInfo5.fileName(); + qDebug() << fileInfo6.fileName(); + + QPushButton* button1 = new QPushButton(fileInfo1.dir().path()); + QPushButton* button2 = new QPushButton(fileInfo2.dir().path()); + QPushButton* button3 = new QPushButton(fileInfo3.dir().path()); + QPushButton* button4 = new QPushButton(fileInfo4.dir().path()); + QPushButton* button5 = new QPushButton(fileInfo5.dir().path()); + QPushButton* button6 = new QPushButton(fileInfo6.dir().path()); + + QVBoxLayout* vbox = new QVBoxLayout; + vbox->addWidget(button1); + vbox->addWidget(button2); + vbox->addWidget(button3); + vbox->addWidget(button4); + vbox->addWidget(button5); + vbox->addWidget(button6); + vbox->addStretch(1); + + QGroupBox *groupBox = new QGroupBox("QFileInfo::dir() test"); + groupBox->setLayout(vbox); + groupBox->show(); + + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/graphicssceneadditemsnippet.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/graphicssceneadditemsnippet.cpp new file mode 100644 index 0000000..8a5c819 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/graphicssceneadditemsnippet.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +class CustomScene : public QGraphicsScene +{ +public: + CustomScene() + { addItem(new QGraphicsEllipseItem(QRect(10, 10, 30, 30))); } + + void drawItems(QPainter *painter, int numItems, QGraphicsItem *items[], + const QStyleOptionGraphicsItem options[], + QWidget *widget = 0); +}; + +//! [0] +void CustomScene::drawItems(QPainter *painter, int numItems, + QGraphicsItem *items[], + const QStyleOptionGraphicsItem options[], + QWidget *widget) +{ + for (int i = 0; i < numItems; ++i) { + // Draw the item + painter->save(); + painter->setMatrix(items[i]->sceneMatrix(), true); + items[i]->paint(painter, &options[i], widget); + painter->restore(); + } +} +//! [0] + +int main(int argv, char **args) +{ + QApplication app(argv, args); + + CustomScene scene; + QGraphicsView view(&scene); + + view.show(); + + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/main.cpp new file mode 100644 index 0000000..cbcc304 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/main.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "myclass.h" + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + + QTranslator translator; + translator.load(":/translations/i18n-non-qt-class_" + QLocale::system().name()); + app.installTranslator(&translator); + + MyClass instance; + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/myclass.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/myclass.cpp new file mode 100644 index 0000000..506dac2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/myclass.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "myclass.h" + +MyClass::MyClass() +{ + std::cout << tr("Hello Qt!\n").toLocal8Bit().constData(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/myclass.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/myclass.h new file mode 100644 index 0000000..0f49fe2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/myclass.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MYCLASS_H +#define MYCLASS_H + +#include + +//! [0] +class MyClass +{ + Q_DECLARE_TR_FUNCTIONS(MyClass) + +public: + MyClass(); +//! [0] + /* ... */ +//! [1] +}; +//! [1] + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/myclass.ts b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/myclass.ts new file mode 100644 index 0000000..9bd90f2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/myclass.ts @@ -0,0 +1,12 @@ + + + + MyClass + + + Hello Qt! + + + + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/resources.qrc b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/resources.qrc new file mode 100644 index 0000000..903ac85 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/resources.qrc @@ -0,0 +1,6 @@ + + + translations/i18n-non-qt-class_en.qm + translations/i18n-non-qt-class_fr.qm + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/translations/i18n-non-qt-class_en.ts b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/translations/i18n-non-qt-class_en.ts new file mode 100644 index 0000000..54f1886 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/translations/i18n-non-qt-class_en.ts @@ -0,0 +1,12 @@ + + + + MyClass + + + Hello Qt! + + + + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/translations/i18n-non-qt-class_fr.ts b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/translations/i18n-non-qt-class_fr.ts new file mode 100644 index 0000000..3f3cebc --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/i18n-non-qt-class/translations/i18n-non-qt-class_fr.ts @@ -0,0 +1,13 @@ + + + + MyClass + + + Hello Qt! + + Bonjour Qt! + + + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/image/image.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/image/image.cpp new file mode 100644 index 0000000..a35f95c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/image/image.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + image = QImage() + ba = QByteArray() + buffer(ba) + buffer.open(QIODevice.WriteOnly) + image.save(buffer, "PNG") # writes image into ba in PNG format +//! [0] +//! [1] + pixmap = QPixmap() + bytes = QByteArray() + buffer(bytes) + buffer.open(QIODevice.WriteOnly) + pixmap.save(buffer, "PNG") # writes pixmap into bytes in PNG format +//! [1] +//! [2] + alpha = QPixmap("image-with-alpha.png") + alphacopy = alpha + alphacopy.setMask(alphacopy.mask()) +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/image/supportedformat.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/image/supportedformat.cpp new file mode 100644 index 0000000..2d8459f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/image/supportedformat.cpp @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + writer = QImageWriter() + writer.setFormat("png") + if writer.supportsOption(QImageIOHandler.Description): + print "Png supports embedded text" +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/inherited-slot/button.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/inherited-slot/button.cpp new file mode 100644 index 0000000..f15066b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/inherited-slot/button.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "button.h" + +Button::Button(QWidget *parent) + : QPushButton(parent) +{ +} + +void Button::animateClick() +{ + qDebug() << "Extra code goes here..."; + QPushButton::animateClick(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/inherited-slot/button.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/inherited-slot/button.h new file mode 100644 index 0000000..855bea0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/inherited-slot/button.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +//! [Button class with reimplemented slot] +class Button : public QPushButton +{ + Q_OBJECT + +public: + Button(QWidget *parent = 0); + +public slots: + void animateClick(); +}; +//! [Button class with reimplemented slot] + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/inherited-slot/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/inherited-slot/main.cpp new file mode 100644 index 0000000..b170106 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/inherited-slot/main.cpp @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include "button.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QWidget window; + QHBoxLayout *layout = new QHBoxLayout(&window); + QLineEdit *lineEdit = new QLineEdit; + Button *button = new Button; + + QObject::connect(lineEdit, SIGNAL(returnPressed()), button, SLOT(animateClick())); + + layout->addWidget(lineEdit); + layout->addWidget(button); + window.show(); + + for (int i = 0; i < button->metaObject()->methodCount(); ++i) + qDebug() << i << button->metaObject()->method(i).signature(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/itemselection/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/itemselection/main.cpp new file mode 100644 index 0000000..83b06b9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/itemselection/main.cpp @@ -0,0 +1,125 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + main.cpp + + A simple example that shows how selections can be used directly on a model. + It shows the result of some selections made using a table view. +*/ + +#include +#include +#include +#include + +#include "model.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + +//! [0] + TableModel *model = new TableModel(8, 4, &app); + + QTableView *table = new QTableView(0); + table->setModel(model); + + QItemSelectionModel *selectionModel = table->selectionModel(); +//! [0] //! [1] + QModelIndex topLeft; + QModelIndex bottomRight; + + topLeft = model->index(0, 0, QModelIndex()); + bottomRight = model->index(5, 2, QModelIndex()); +//! [1] + +//! [2] + QItemSelection selection(topLeft, bottomRight); + selectionModel->select(selection, QItemSelectionModel::Select); +//! [2] + +//! [3] + QItemSelection toggleSelection; + + topLeft = model->index(2, 1, QModelIndex()); + bottomRight = model->index(7, 3, QModelIndex()); + toggleSelection.select(topLeft, bottomRight); + + selectionModel->select(toggleSelection, QItemSelectionModel::Toggle); +//! [3] + +//! [4] + QItemSelection columnSelection; + + topLeft = model->index(0, 1, QModelIndex()); + bottomRight = model->index(0, 2, QModelIndex()); + + columnSelection.select(topLeft, bottomRight); + + selectionModel->select(columnSelection, + QItemSelectionModel::Select | QItemSelectionModel::Columns); + + QItemSelection rowSelection; + + topLeft = model->index(0, 0, QModelIndex()); + bottomRight = model->index(1, 0, QModelIndex()); + + rowSelection.select(topLeft, bottomRight); + + selectionModel->select(rowSelection, + QItemSelectionModel::Select | QItemSelectionModel::Rows); +//! [4] + + table->setWindowTitle("Selected items in a table model"); + table->show(); + table->resize(460, 280); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/itemselection/model.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/itemselection/model.h new file mode 100644 index 0000000..6b40768 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/itemselection/model.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODEL_H +#define MODEL_H + +#include +#include +#include + +class TableModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + TableModel(int rows = 1, int columns = 1, QObject *parent = 0); + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::EditRole); + + bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool insertColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + +private: + QList rowList; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/javastyle.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/javastyle.cpp new file mode 100644 index 0000000..9654808 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/javastyle.cpp @@ -0,0 +1,2755 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "javastyle.h" +#include + +static const int windowsItemFrame = 2; +static const int windowsSepHeight = 2; +static const int windowsItemHMargin = 3; +static const int windowsItemVMargin = 2; +static const int windowsArrowHMargin = 6; +static const int windowsTabSpacing = 12; +static const int windowsCheckMarkHMargin = 2; +static const int windowsRightBorder = 15; +static const int windowsCheckMarkWidth = 12; + +JavaStyle::JavaStyle() +{ + qApp->setPalette(standardPalette()); +} + + +inline QPoint JavaStyle::adjustScrollPoint(const QPoint &point, + Qt::Orientation orientation, + bool add) const +{ + int adder = add ? -1 : 1; + QPoint retPoint; + + if (orientation == Qt::Horizontal) { + retPoint = QPoint(point.y() * adder, point.x()); + } else { + retPoint = QPoint(point.x(), point.y() * adder); + } + + return retPoint; +} + +QPalette JavaStyle::standardPalette() const +{ + QPalette palette = QWindowsStyle::standardPalette(); + + palette.setBrush(QPalette::Active, QPalette::Button, + QColor(184, 207, 229)); + palette.setBrush(QPalette::Active, QPalette::WindowText, + Qt::black); + palette.setBrush(QPalette::Active, QPalette::Background, + QColor(238, 238, 238)); + palette.setBrush(QPalette::Active, QPalette::Window, + QColor(238 ,238, 238)); + palette.setBrush(QPalette::Active, QPalette::Base, Qt::white); + palette.setBrush(QPalette::Active, QPalette::AlternateBase, QColor(238, 238, 238)); + palette.setBrush(QPalette::Active, QPalette::Text, Qt::black); + palette.setBrush(QPalette::Active, QPalette::BrightText, Qt::white); + + palette.setBrush(QPalette::Active, QPalette::Light, QColor(163, 184, 204)); // focusFrameColor + palette.setBrush(QPalette::Active, QPalette::Midlight, QColor(99, 130, 191)); // tabBarBorderColor + palette.setBrush(QPalette::Active, QPalette::Dark, QColor(106, 104, 100)); + palette.setBrush(QPalette::Active, QPalette::Mid, QColor(122, 138, 153)); //defaultFrameColor + palette.setBrush(QPalette::Active, QPalette::Shadow, QColor(122, 138, 153)); // defaultFrame + + palette.setBrush(QPalette::Active, QPalette::Highlight, QColor(184, 207, 229)); + palette.setBrush(QPalette::Active, QPalette::HighlightedText, Qt::black); + + palette.setBrush(QPalette::Inactive, QPalette::Highlight, QColor(184, 207, 229)); + palette.setBrush(QPalette::Inactive, QPalette::HighlightedText, Qt::black); + + palette.setBrush(QPalette::Disabled, QPalette::Button, + QColor(238, 238, 238)); + palette.setBrush(QPalette::Disabled, QPalette::WindowText, + QColor(153, 153, 153)); + palette.setBrush(QPalette::Disabled, QPalette::Background, QColor(238, 238, 238)); + + palette.setBrush(QPalette::Inactive, QPalette::Button, + QColor(184, 207, 229)); + palette.setBrush(QPalette::Inactive, QPalette::Background, + QColor(238, 238, 238)); + palette.setBrush(QPalette::Inactive, QPalette::Window, + QColor(238 ,238, 238)); + palette.setBrush(QPalette::Inactive, QPalette::Light, QColor(163, 184, 204)); // focusFrameColor + palette.setBrush(QPalette::Inactive, QPalette::Midlight, QColor(99, 130, 191)); // tabBarBorderColor + palette.setBrush(QPalette::Inactive, QPalette::Dark,QColor(106, 104, 100)); + palette.setBrush(QPalette::Inactive, QPalette::Mid, QColor(122, 138, 153)); //defaultFrame + palette.setBrush(QPalette::Inactive, QPalette::Shadow, QColor(122, 138, 153)); // defaultFrame + + return palette; +} + +inline void JavaStyle::drawScrollBarArrow(const QRect &rect, QPainter *painter, + const QStyleOptionSlider *option, + bool add) const +{ + + painter->save(); + + Qt::Orientation orient = option->orientation; + QPoint offset; + + if (add) { + if (orient == Qt::Vertical) { + offset = rect.bottomLeft(); + } else { + offset = rect.topRight(); + } + } else { + offset = rect.topLeft(); + } + + QPainterPath arrow; + arrow.moveTo(offset + adjustScrollPoint(QPoint(4, 8), orient, add)); + arrow.lineTo(offset + adjustScrollPoint(QPoint(7, 5), orient, add)); + arrow.lineTo(offset + adjustScrollPoint(QPoint(8, 5), orient, add)); + arrow.lineTo(offset + adjustScrollPoint(QPoint(11, 8), orient, add)); + arrow.lineTo(offset + adjustScrollPoint(QPoint(4, 8), orient, add)); + + QColor fillColor; + if (option->state & State_Sunken) + fillColor = QColor(option->palette.color(QPalette::Button)); + else + fillColor = option->palette.color(QPalette::Background); + + painter->fillRect(rect, fillColor); + + painter->setPen(option->palette.color(QPalette::Base)); + int adjust = option->state & State_Sunken ? 0 : 1; + painter->drawRect(rect.adjusted(adjust, adjust, -1, -1)); + painter->setPen(option->palette.color(QPalette::Mid)); + painter->drawRect(rect.adjusted(0, 0, -1, -1)); + + painter->setPen(option->palette.color(QPalette::WindowText)); + painter->setBrush(option->palette.color(QPalette::WindowText)); + painter->drawPath(arrow); + + painter->restore(); +} + +inline QPoint JavaStyle::adjustScrollHandlePoint(Qt::Orientation orig, + const QPoint &point) const +{ + QPoint retPoint; + + if (orig == Qt::Vertical) + retPoint = point; + else + retPoint = QPoint(point.y(), point.x()); + + return retPoint; +} + +void JavaStyle::drawControl(ControlElement control, const QStyleOption *option, + QPainter *painter, const QWidget *widget) const +{ + + painter->save(); + + switch (control) { + case CE_ToolBoxTabShape: { + const QStyleOptionToolBox *box = + qstyleoption_cast(option); + + painter->save(); + + if (box->direction == Qt::RightToLeft) { + painter->rotate(1); + painter->translate(box->rect.width(), -box->rect.height()); + } + + int textWidth = box->fontMetrics.width(box->text) + 20; + + QPolygon innerLine; + innerLine << (box->rect.topLeft() + QPoint(0, 1)) << + (box->rect.topLeft() + QPoint(textWidth, 1)) << + (box->rect.bottomLeft() + QPoint(textWidth + 15, -3)) << + (box->rect.bottomRight() + QPoint(0, -3)) << + box->rect.bottomRight() << + box->rect.bottomLeft() << + box->rect.topLeft(); + + painter->setPen(box->palette.color(QPalette::Base)); + painter->setBrush(QColor(200, 221, 242)); + painter->drawPolygon(innerLine); + + QPolygon outerLine; + outerLine << (box->rect.bottomRight() + QPoint(0, -3)) << + box->rect.bottomRight() << + box->rect.bottomLeft() << + box->rect.topLeft() << + (box->rect.topLeft() + QPoint(textWidth, 0)) << + (box->rect.bottomLeft() + QPoint(textWidth + 15, -4)) << + (box->rect.bottomRight() + QPoint(0, -4)); + + painter->setPen(box->palette.color(QPalette::Midlight)); + painter->setBrush(Qt::NoBrush); + painter->drawPolyline(outerLine); + + painter->restore(); + break; + } + case CE_DockWidgetTitle: { + const QStyleOptionDockWidgetV2 *docker = + new QStyleOptionDockWidgetV2( + *qstyleoption_cast(option)); + + QRect rect = docker->rect; + QRect titleRect = rect; + if (docker->verticalTitleBar) { + QRect r = rect; + QSize s = r.size(); + s.transpose(); + r.setSize(s); + + titleRect = QRect(r.left() + rect.bottom() + - titleRect.bottom(), + r.top() + titleRect.left() - rect.left(), + titleRect.height(), titleRect.width()); + + painter->translate(r.left(), r.top() + r.width()); + painter->rotate(-90); + painter->translate(-r.left(), -r.top()); + + rect = r; + } + + QLinearGradient gradient(rect.topLeft(), + rect.bottomLeft()); + gradient.setColorAt(1.0, QColor(191, 212, 231)); + gradient.setColorAt(0.3, Qt::white); + gradient.setColorAt(0.0, QColor(221, 232, 243)); + + painter->setPen(Qt::NoPen); + painter->setBrush(gradient); + painter->drawRect(rect.adjusted(0, 0, -1, -1)); + + if (!docker->title.isEmpty()) { + QRect textRect = docker->fontMetrics.boundingRect(docker->title); + textRect.moveCenter(rect.center()); + + QFont font = painter->font(); + font.setPointSize(font.pointSize() - 1); + painter->setFont(font); + painter->setPen(docker->palette.text().color()); + painter->drawText(textRect, docker->title, + QTextOption(Qt::AlignHCenter | + Qt::AlignVCenter)); + } + break; + } + case CE_RubberBand: { + painter->setPen(option->palette.color(QPalette::Active, + QPalette::WindowText)); + painter->drawRect(option->rect.adjusted(0, 0, -1, -1)); + break; + } + case CE_SizeGrip: { + break; + } + case CE_HeaderSection: { + const QStyleOptionHeader *header = + qstyleoption_cast(option); + + painter->setPen(Qt::NoPen); + painter->setBrush(option->palette.color(QPalette::Active, + QPalette::Background)); + painter->drawRect(option->rect); + + painter->setPen(header->palette.color(QPalette::Mid)); + if (header->orientation == Qt::Horizontal) { + if (header->position == QStyleOptionHeader::Beginning || + header->position == QStyleOptionHeader::OnlyOneSection) { + painter->drawRect(header->rect.adjusted(0, 0, -1, -1)); + painter->setPen(header->palette.color(QPalette::Base)); + painter->drawLine(header->rect.bottomLeft() + QPoint(1, -1), + header->rect.topLeft() + QPoint(1, 1)); + painter->drawLine(header->rect.topLeft() + QPoint(1, 1), + header->rect.topRight() + QPoint(-1, 1)); + } else { + painter->drawLine(header->rect.bottomRight(), + header->rect.topRight()); + painter->drawLine(header->rect.topLeft(), + header->rect.topRight()); + painter->drawLine(header->rect.bottomLeft(), + header->rect.bottomRight()); + painter->setPen(option->palette.color(QPalette::Base)); + painter->drawLine(header->rect.bottomLeft() + QPoint(0, -1), + header->rect.topLeft() + QPoint(0, 1)); + painter->drawLine(header->rect.topLeft() + QPoint(1, 1), + header->rect.topRight() + QPoint(-1, 1)); + } + } else { // Vertical + if (header->position == QStyleOptionHeader::Beginning || + header->position == QStyleOptionHeader::OnlyOneSection) { + painter->drawRect(header->rect.adjusted(0, 0, -1, -1)); + painter->setPen(header->palette.color(QPalette::Base)); + painter->drawLine(header->rect.bottomLeft() + QPoint(1, -1), + header->rect.topLeft() + QPoint(1, 1)); + painter->drawLine(header->rect.topLeft() + QPoint(1, 1), + header->rect.topRight() + QPoint(-1, 1)); + } else { + painter->drawLine(header->rect.bottomLeft(), + header->rect.bottomRight()); + painter->drawLine(header->rect.topLeft(), + header->rect.bottomLeft()); + painter->drawLine(header->rect.topRight(), + header->rect.bottomRight()); + painter->setPen(header->palette.color(QPalette::Base)); + painter->drawLine(header->rect.topLeft(), + header->rect.topRight() + QPoint(-1, 0)); + painter->drawLine(header->rect.bottomLeft() + QPoint(1, -1), + header->rect.topLeft() + QPoint(1, 0)); + } + } + break; + } + case CE_ToolBar: { + QRect rect = option->rect; + + QLinearGradient gradient(rect.topLeft(), rect.bottomLeft()); + gradient.setColorAt(1.0, QColor(221, 221, 221)); + gradient.setColorAt(0.0, QColor(241, 241, 241)); + + if (option->state & State_Horizontal) { + painter->setPen(QColor(204, 204, 204)); + painter->setBrush(gradient); + } else { + painter->setPen(Qt::NoPen); + painter->setBrush(option->palette.color(QPalette::Background)); + } + painter->drawRect(rect.adjusted(0, 0, -1, -1)); + break; + } + case CE_ProgressBar: { + const QStyleOptionProgressBar *bar1 = + qstyleoption_cast(option); + + QStyleOptionProgressBarV2 *bar = new QStyleOptionProgressBarV2(*bar1); + + QRect rect = bar->rect; + if (bar->orientation == Qt::Vertical) { + rect = QRect(rect.left(), rect.top(), rect.height(), rect.width()); + QMatrix m; + m.translate(rect.height()-1, 0); + m.rotate(90.0); + painter->setMatrix(m); + } + + painter->setPen(bar->palette.color(QPalette::Mid)); + painter->drawRect(rect.adjusted(0, 0, -1, -1)); + + QRect grooveRect = subElementRect(SE_ProgressBarGroove, bar, + widget); + if (bar->orientation == Qt::Vertical) { + grooveRect = QRect(grooveRect.left(), grooveRect.top(), + grooveRect.height(), grooveRect.width()); + } + + QStyleOptionProgressBar grooveBar = *bar; + grooveBar.rect = grooveRect; + + drawControl(CE_ProgressBarGroove, &grooveBar, painter, widget); + + QRect progressRect = subElementRect(SE_ProgressBarContents, bar, + widget); + if (bar->orientation == Qt::Vertical) { + progressRect = QRect(progressRect.left(), progressRect.top(), + progressRect.height(), progressRect.width()); + progressRect.adjust(0, 0, 0, -1); + } + QStyleOptionProgressBar progressOpt = *bar; + progressOpt.rect = progressRect; + drawControl(CE_ProgressBarContents, &progressOpt, painter, widget); + + QRect labelRect = subElementRect(SE_ProgressBarLabel, bar, widget); + if (bar->orientation == Qt::Vertical) { + labelRect = QRect(labelRect.left(), labelRect.top(), + labelRect.height(), labelRect.width()); + } + QStyleOptionProgressBar subBar = *bar; + subBar.rect = labelRect; + if (bar->textVisible) + drawControl(CE_ProgressBarLabel, &subBar, painter, widget); + + delete bar; + break; + } + case CE_ProgressBarGroove: { + painter->setBrush(option->palette.color(QPalette::Background)); + painter->setPen(Qt::NoPen); + painter->drawRect(option->rect.adjusted(0, 0, -1, -1)); + + painter->setPen(option->palette.color(QPalette::Button)); + painter->drawLine(option->rect.topLeft() + QPoint(0, 0), + option->rect.topRight() + QPoint(0, 0)); + break; + } + case CE_ProgressBarContents: { + const QStyleOptionProgressBar *bar = + qstyleoption_cast(option); + int progress = int((double(bar->progress) / + double(bar->maximum - bar->minimum)) * + bar->rect.width()); + + painter->setBrush(bar->palette.color(QPalette::Light)); + painter->setPen(Qt::NoPen); + QRect progressRect = QRect(bar->rect.topLeft(), QPoint(progress, + bar->rect.bottom())); + painter->drawRect(progressRect); + + painter->setPen(bar->palette.color(QPalette::Midlight)); + painter->setBrush(Qt::NoBrush); + + painter->drawLine(bar->rect.bottomLeft(), bar->rect.topLeft()); + painter->drawLine(bar->rect.topLeft(), QPoint(progress, + bar->rect.top())); + break; + } + case CE_ProgressBarLabel: { + painter->save(); + const QStyleOptionProgressBar *bar = + qstyleoption_cast(option); + + QRect rect = bar->rect; + QRect leftRect; + + int progressIndicatorPos = int((double(bar->progress) / + double(bar->maximum - bar->minimum)) * + bar->rect.width()); + + QFont font; + font.setBold(true); + painter->setFont(font); + painter->setPen(bar->palette.color(QPalette::Midlight)); + + if (progressIndicatorPos >= 0 && + progressIndicatorPos <= rect.width()) { + leftRect = QRect(bar->rect.topLeft(), + QPoint(progressIndicatorPos, + bar->rect.bottom())); + } else if (progressIndicatorPos > rect.width()) { + painter->setPen(bar->palette.color(QPalette::Base)); + } else { + painter->setPen(bar->palette.color(QPalette::Midlight)); + } + + QRect textRect = QFontMetrics(font).boundingRect(bar->text); + textRect.moveCenter(option->rect.center()); + painter->drawText(textRect, bar->text, + QTextOption(Qt::AlignCenter)); + if (!leftRect.isNull()) { + painter->setPen(bar->palette.color(QPalette::Base)); + painter->setClipRect(leftRect, Qt::IntersectClip); + painter->drawText(textRect, bar->text, + QTextOption(Qt::AlignCenter)); + } + + painter->restore(); + break; + } + case CE_MenuBarEmptyArea: { + QRect emptyArea = option->rect.adjusted(0, 0, -1, -1); + QLinearGradient gradient(emptyArea.topLeft(), emptyArea.bottomLeft() + - QPoint(0, 1)); + gradient.setColorAt(0.0, option->palette.color(QPalette::Base)); + gradient.setColorAt(1.0, QColor(223, 223, 223)); + + painter->setPen(QColor(238, 238, 238)); + painter->setBrush(gradient); + painter->drawRect(emptyArea.adjusted(0, 0, 0, -1)); + break; + } + case CE_MenuBarItem: { + if (!(option->state & State_Sunken)) { + QLinearGradient gradient(option->rect.topLeft(), + option->rect.bottomLeft()); + gradient.setColorAt(0.0, Qt::white); + gradient.setColorAt(1.0, QColor(223, 223, 223)); + + painter->setPen(Qt::NoPen); + painter->setBrush(gradient); + } else { + painter->setBrush(option->palette.color(QPalette::Light)); + } + + painter->drawRect(option->rect); + if (option->state & State_Sunken) { + painter->setPen(option->palette.color(QPalette::Mid)); + painter->drawRect(option->rect.adjusted(0, 0, -1, -1)); + painter->setPen(option->palette.color(QPalette::Base)); + painter->setBrush(Qt::NoBrush); + painter->drawLine(option->rect.bottomRight() + QPoint(0, -1), + option->rect.topRight() + QPoint(0, -1)); + } + QCommonStyle::drawControl(control, option, painter, widget); + break; + } + case CE_MenuItem: { + const QStyleOptionMenuItem *menuItem = + qstyleoption_cast(option); + + bool selected = menuItem->state & State_Selected; + bool checkable = menuItem->checkType != + QStyleOptionMenuItem::NotCheckable; + bool checked = menuItem->checked; + + if (menuItem->menuItemType == QStyleOptionMenuItem::Separator) { + QPoint center = menuItem->rect.center(); + + painter->setPen(menuItem->palette.color(QPalette::Midlight)); + painter->drawLine(QPoint(menuItem->rect.left() - 2, center.y()), + QPoint(menuItem->rect.right(), center.y())); + painter->setPen(menuItem->palette.color(QPalette::Base)); + painter->drawLine(QPoint(menuItem->rect.left() - 2, + center.y() + 1), + QPoint(menuItem->rect.right(), + center.y() + 1)); + + break; + } + + if (selected) { + painter->setBrush(menuItem->palette.color(QPalette::Light)); + painter->setPen(Qt::NoPen); + painter->drawRect(menuItem->rect); + painter->setPen(menuItem->palette.color(QPalette::Midlight)); + painter->drawLine(menuItem->rect.topLeft(), + menuItem->rect.topRight()); + painter->setPen(menuItem->palette.color(QPalette::Base)); + painter->drawLine(menuItem->rect.bottomLeft(), + menuItem->rect.bottomRight()); + } + + if (checkable) { + QRect checkRect(option->rect.left() + 5, + option->rect.center().y() - 5, 10, 10); + if (menuItem->checkType & QStyleOptionMenuItem::Exclusive) { + QStyleOptionButton button; + button.rect = checkRect; + button.state = menuItem->state; + if (button.state & State_Sunken) + button.state ^= State_Sunken; + if (checked) + button.state |= State_On; + button.palette = menuItem->palette; + drawPrimitive(PE_IndicatorRadioButton, &button, painter, + widget); + } else { + QBrush buttonBrush = gradientBrush(option->rect); + painter->setBrush(buttonBrush); + painter->setPen(option->palette.color(QPalette::Mid)); + + painter->drawRect(checkRect); + + if (checked) { + QImage image(":/images/checkboxchecked.png"); + painter->drawImage(QPoint(option->rect.left() + 5, + option->rect.center().y() - 8), image); + } + } + } + + bool dis = !(menuItem->state & State_Enabled); + bool act = menuItem->state & State_Selected; + const QStyleOption *opt = option; + const QStyleOptionMenuItem *menuitem = menuItem; + int checkcol = qMax(menuitem->maxIconWidth, 20); + if (menuItem->icon.isNull()) + checkcol = 0; + + QPainter *p = painter; + QRect vCheckRect = visualRect(opt->direction, menuitem->rect, + QRect(menuitem->rect.x(), + menuitem->rect.y(), + checkcol, menuitem->rect.height())); + if (!menuItem->icon.isNull()) { + QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal; + if (act && !dis) + mode = QIcon::Active; + QPixmap pixmap; + if (checked) + pixmap = menuItem->icon.pixmap( + pixelMetric(PM_SmallIconSize), mode, QIcon::On); + else + pixmap = menuItem->icon.pixmap( + pixelMetric(PM_SmallIconSize), mode); + int pixw = pixmap.width(); + int pixh = pixmap.height(); + + int adjustedIcon = checkable ? 15 : 0; + QRect pmr(0, 0, pixw, pixh); + pmr.moveCenter(vCheckRect.center()); + painter->setPen(menuItem->palette.text().color()); + if (checkable && checked) + painter->drawPixmap(QPoint(pmr.left() + + adjustedIcon, pmr.top() + 1), pixmap); + else + painter->drawPixmap(pmr.topLeft() + + QPoint(adjustedIcon, 0), pixmap); + } + + if (selected) { + painter->setPen(menuItem->palette.highlightedText().color()); + } else { + painter->setPen(menuItem->palette.text().color()); + } + int x, y, w, h; + menuitem->rect.getRect(&x, &y, &w, &h); + int tab = menuitem->tabWidth; + QColor discol; + if (dis) { + discol = menuitem->palette.text().color(); + p->setPen(discol); + } + int xm = windowsItemFrame + checkcol + windowsItemHMargin; + int xpos = menuitem->rect.x() + xm; + QRect textRect; + if (!menuItem->icon.isNull()) + textRect.setRect(xpos, y + windowsItemVMargin, w - xm - + windowsRightBorder - tab + 1, h - 2 * windowsItemVMargin); + else + textRect.setRect(menuItem->rect.left() + 9, + y + windowsItemVMargin, + w - xm - windowsRightBorder - tab, + h - 2 * windowsItemVMargin); + + if (checkable) + textRect.adjust(10, 0, 10, 0); + + QRect vTextRect = visualRect(opt->direction, menuitem->rect, + textRect); + QString s = menuitem->text; + if (!s.isEmpty()) { + int t = s.indexOf(QLatin1Char('\t')); + int text_flags = Qt::AlignVCenter | Qt::TextShowMnemonic | + Qt::TextDontClip | Qt::TextSingleLine; + if (!styleHint(SH_UnderlineShortcut, menuitem, widget)) + text_flags |= Qt::TextHideMnemonic; + text_flags |= Qt::AlignLeft; + if (t >= 0) { + QRect vShortcutRect = visualRect(opt->direction, + menuitem->rect, + QRect(textRect.topRight(), + QPoint(menuitem->rect.right(), textRect.bottom()))); + if (dis && !act) { + p->setPen(menuitem->palette.light().color()); + p->drawText(vShortcutRect.adjusted(1, 1, 1, 1), + text_flags, + s.mid(t + 1)); + p->setPen(discol); + } + p->drawText(vShortcutRect, text_flags, s.mid(t + 1)); + s = s.left(t); + } + QFont font = menuitem->font; + if (menuitem->menuItemType == QStyleOptionMenuItem::DefaultItem) + font.setBold(true); + p->setFont(font); + if (dis && !act) { + p->setPen(menuitem->palette.light().color()); + p->drawText(vTextRect.adjusted(1,1,1,1), text_flags, + s.left(t)); + p->setPen(discol); + } + p->drawText(vTextRect, text_flags, s.left(t)); + } + + if (menuItem->menuItemType & QStyleOptionMenuItem::SubMenu) { + QPoint center = menuItem->rect.center(); + QPoint drawStart(menuItem->rect.right() - 6, center.y() + 4); + + QPainterPath arrow; + arrow.moveTo(drawStart); + arrow.lineTo(drawStart + QPoint(0, -8)); + arrow.lineTo(drawStart + QPoint(4, -5)); + arrow.lineTo(drawStart + QPoint(4, -4)); + arrow.lineTo(drawStart + QPoint(0, 0)); + + painter->save(); + painter->setBrush(menuItem->palette.color(QPalette::Text)); + painter->setPen(Qt::NoPen); + painter->drawPath(arrow); + painter->restore(); + } + + break; + } + case CE_MenuVMargin: { + break; + } + case CE_MenuHMargin: { + break; + } + case CE_Splitter: { + drawSplitter(option, painter, option->state & State_Horizontal); + break; + } + case CE_ScrollBarAddPage: { + case CE_ScrollBarSubPage: + const QStyleOptionSlider *scrollBar = + qstyleoption_cast(option); + QRect myRect; + if (scrollBar->orientation == Qt::Horizontal) { + myRect = QRect(option->rect.topLeft(), + option->rect.bottomRight()).adjusted(0, 0, 1, -1); + } else { + myRect = option->rect; + } + + painter->setPen(Qt::NoPen); + painter->setBrush(option->palette.color(QPalette::Background)); + painter->drawRect(myRect); + + painter->setBrush(Qt::NoBrush); + painter->setPen(scrollBar->palette.color(QPalette::Mid)); + painter->drawRect(myRect.adjusted(0, 0, -1, 0)); + painter->setPen(scrollBar->palette.color(QPalette::Button)); + painter->drawLine(myRect.bottomLeft() + QPoint(1, 0), + myRect.topLeft() + QPoint(1, 1)); + painter->drawLine(myRect.topLeft() + QPoint(1, 1), + myRect.topRight() + QPoint(-1, 1)); + break; + } + case CE_ScrollBarSubLine: { + const QStyleOptionSlider *scrollBar = + qstyleoption_cast(option); + int scrollBarExtent = pixelMetric(PM_ScrollBarExtent); + QRect scrollBarSubLine = option->rect; + + QRect button1; + QRect button2; + + if (scrollBar->orientation == Qt::Horizontal) { + button1.setRect(scrollBarSubLine.left(), scrollBarSubLine.top(), + 16, scrollBarExtent); + button2.setRect(scrollBarSubLine.right() - 15, + scrollBarSubLine.top(), 16, scrollBarExtent); + } else { + button1.setRect(scrollBarSubLine.left(), scrollBarSubLine.top(), + scrollBarExtent, 16); + button2.setRect(scrollBarSubLine.left(), + scrollBarSubLine.bottom() - 15, scrollBarExtent, 16); + } + + painter->fillRect(button2, Qt::blue); + + drawScrollBarArrow(button1, painter, scrollBar); + drawScrollBarArrow(button2, painter, scrollBar); + break; + } + case CE_ScrollBarAddLine: { + const QStyleOptionSlider *scrollBar = + qstyleoption_cast(option); + QRect button(option->rect.left(), option->rect.top(), 16, 16); + drawScrollBarArrow(button, painter, scrollBar, true); + break; + } + case CE_ScrollBarSlider: { + const QStyleOptionSlider *scrollBar = + qstyleoption_cast(option); + + painter->setPen(scrollBar->palette.color(QPalette::Midlight)); + painter->drawRect(scrollBar->rect.adjusted(-1, 0, -3, -1)); + + QPoint g1, g2; + if (scrollBar->orientation == Qt::Horizontal) { + g1 = option->rect.topLeft(); + g2 = option->rect.bottomLeft(); + } else { + g1 = option->rect.topLeft(); + g2 = option->rect.topRight(); + } + + if (scrollBar->state & State_Enabled) { + QLinearGradient gradient(g1, g2); + gradient.setColorAt(1.0, QColor(188, 210, 230)); + gradient.setColorAt(0.3, Qt::white); + gradient.setColorAt(0.0, QColor(223, 233, 243)); + painter->setBrush(gradient); + } else { + painter->setPen(scrollBar->palette.buttonText().color()); + painter->setBrush(scrollBar->palette.button()); + } + painter->drawRect(scrollBar->rect.adjusted(0, 0, -1, -1)); + + int sliderLength = option->rect.height(); + int drawPos = scrollBar->orientation == Qt::Vertical ? + (sliderLength / 2) + 1 : 1 - ((option->rect.width() / 2)); + + QPoint origin; + if (scrollBar->orientation == Qt::Vertical) + origin = option->rect.bottomLeft(); + else + origin = option->rect.topLeft(); + + painter->setPen(scrollBar->palette.color(QPalette::Base)); + painter->drawLine(origin + adjustScrollHandlePoint( + scrollBar->orientation, + QPoint(4, -drawPos)), + origin + adjustScrollHandlePoint( + scrollBar->orientation, + QPoint(13, -drawPos))); + painter->drawLine(origin + adjustScrollHandlePoint( + scrollBar->orientation, + QPoint(4, 2 - drawPos)), + origin + adjustScrollHandlePoint( + scrollBar->orientation, + QPoint(13, 2 - drawPos))); + painter->drawLine(origin + adjustScrollHandlePoint( + scrollBar->orientation, + QPoint(4, 4 - drawPos)), + origin + adjustScrollHandlePoint( + scrollBar->orientation, + QPoint(13, 4 - drawPos))); + + painter->setPen(option->palette.color(QPalette::Midlight)); + painter->drawLine(origin + adjustScrollHandlePoint( + scrollBar->orientation, + QPoint(3, -(drawPos + 1))), + origin + adjustScrollHandlePoint( + scrollBar->orientation, + QPoint(12, -(drawPos + 1)))); + painter->drawLine(origin + adjustScrollHandlePoint( + scrollBar->orientation, + QPoint(3, 1 - drawPos)), + origin + adjustScrollHandlePoint( + scrollBar->orientation, + QPoint(12, 1 - drawPos))); + painter->drawLine(origin + adjustScrollHandlePoint( + scrollBar->orientation, + QPoint(3, 3 - drawPos)), + origin + adjustScrollHandlePoint( + scrollBar->orientation, + QPoint(12, 3 - drawPos))); + + break; + } + case CE_TabBarTabLabel: { + QStyleOptionTab copy = + *qstyleoption_cast(option); + if (copy.state & State_HasFocus) + copy.state ^= State_HasFocus; + painter->setBrush(Qt::NoBrush); + QWindowsStyle::drawControl(CE_TabBarTabLabel, ©, painter, + widget); + break; + } + case CE_TabBarTabShape: { + const QStyleOptionTab *tab = + qstyleoption_cast(option); + QRect myRect = option->rect; + QPoint bottomLeft, bottomRight, topLeft, topRight; + + if ((tab->position == QStyleOptionTab::Beginning) || + (tab->position == QStyleOptionTab::OnlyOneTab)) { + if (tab->shape == QTabBar::RoundedSouth || + tab->shape == QTabBar::RoundedNorth) { + myRect = myRect.adjusted(2, 0, 0, 0); + } else { + myRect = myRect.adjusted(0, 2, 0, 0); + } + } + + switch (tab->shape) { + case QTabBar::RoundedNorth: + topLeft = myRect.topLeft(); + topRight = myRect.topRight(); + bottomLeft = myRect.bottomLeft(); + bottomRight = myRect.bottomRight(); + break; + case QTabBar::RoundedSouth: + topLeft = myRect.bottomLeft(); + topRight = myRect.bottomRight(); + bottomLeft = myRect.topLeft(); + bottomRight = myRect.topRight(); + break; + case QTabBar::RoundedWest: + topLeft = myRect.topLeft(); + topRight = myRect.bottomLeft(); + bottomLeft = myRect.topRight(); + bottomRight = myRect.bottomRight(); + break; + case QTabBar::RoundedEast: + topLeft = myRect.topRight(); + topRight = myRect.bottomRight(); + bottomLeft = myRect.topLeft(); + bottomRight = myRect.bottomLeft(); + break; + default: + ; + } + + QPainterPath outerPath; + outerPath.moveTo(bottomLeft + adjustTabPoint(QPoint(0, -2), + tab->shape)); + outerPath.lineTo(bottomLeft + adjustTabPoint(QPoint(0, -14), + tab->shape)); + outerPath.lineTo(topLeft + adjustTabPoint(QPoint(6 , 0), + tab->shape)); + outerPath.lineTo(topRight + adjustTabPoint(QPoint(0, 0), + tab->shape)); + outerPath.lineTo(bottomRight + adjustTabPoint(QPoint(0, -2), + tab->shape)); + + if (tab->state & State_Selected || + tab->position == QStyleOptionTab::OnlyOneTab) { + QPainterPath innerPath; + innerPath.moveTo(topLeft + adjustTabPoint(QPoint(6, 2), + tab->shape)); + innerPath.lineTo(topRight + adjustTabPoint(QPoint(-1, 2), + tab->shape)); + innerPath.lineTo(bottomRight + adjustTabPoint(QPoint(-1 , -2), + tab->shape)); + innerPath.lineTo(bottomLeft + adjustTabPoint(QPoint(2 , -2), + tab->shape)); + innerPath.lineTo(bottomLeft + adjustTabPoint(QPoint(2 , -14), + tab->shape)); + innerPath.lineTo(topLeft + adjustTabPoint(QPoint(6, 2), + tab->shape)); + + QPainterPath whitePath; + whitePath.moveTo(bottomLeft + adjustTabPoint(QPoint(1, -2), + tab->shape)); + whitePath.lineTo(bottomLeft + adjustTabPoint(QPoint(1, -14), + tab->shape)); + whitePath.lineTo(topLeft + adjustTabPoint(QPoint(6, 1), + tab->shape)); + whitePath.lineTo(topRight + adjustTabPoint(QPoint(-1, 1), + tab->shape)); + + painter->setPen(tab->palette.color(QPalette::Midlight)); + painter->setBrush(QColor(200, 221, 242)); + painter->drawPath(outerPath); + painter->setPen(QColor(200, 221, 242)); + painter->drawRect(QRect(bottomLeft + adjustTabPoint( + QPoint(2, -3), tab->shape), + bottomRight + adjustTabPoint( + QPoint(-2, 0), tab->shape))); + painter->setPen(tab->palette.color(QPalette::Base)); + painter->setBrush(Qt::NoBrush); + painter->drawPath(whitePath); + + if (option->state & State_HasFocus) { + painter->setPen(option->palette.color(QPalette::Mid)); + painter->drawPath(innerPath); + } + } else { + painter->setPen(tab->palette.color(QPalette::Mid)); + painter->drawPath(outerPath); + } + break; + } + case CE_PushButtonLabel: + painter->save(); + + if (const QStyleOptionButton *button = + qstyleoption_cast(option)) { + QRect ir = button->rect; + uint tf = Qt::AlignVCenter | Qt::TextShowMnemonic; + if (!styleHint(SH_UnderlineShortcut, button, widget)) + tf |= Qt::TextHideMnemonic; + + if (!button->icon.isNull()) { + QPoint point; + + QIcon::Mode mode = button->state & State_Enabled ? QIcon::Normal + : QIcon::Disabled; + if (mode == QIcon::Normal && button->state & State_HasFocus) + mode = QIcon::Active; + QIcon::State state = QIcon::Off; + if (button->state & State_On) + state = QIcon::On; + + QPixmap pixmap = button->icon.pixmap(button->iconSize, mode, + state); + int w = pixmap.width(); + int h = pixmap.height(); + + if (!button->text.isEmpty()) + w += button->fontMetrics.width(button->text) + 2; + + point = QPoint(ir.x() + ir.width() / 2 - w / 2, + ir.y() + ir.height() / 2 - h / 2); + + if (button->direction == Qt::RightToLeft) + point.rx() += pixmap.width(); + + painter->drawPixmap(visualPos(button->direction, button->rect, + point), pixmap); + + if (button->direction == Qt::RightToLeft) + ir.translate(-point.x() - 2, 0); + else + ir.translate(point.x() + pixmap.width(), 0); + + if (!button->text.isEmpty()) + tf |= Qt::AlignLeft; + + } else { + tf |= Qt::AlignHCenter; + } + + if (button->fontMetrics.height() > 14) + ir.translate(0, 1); + + drawItemText(painter, ir, tf, button->palette, (button->state & + State_Enabled), + button->text, QPalette::ButtonText); + } + + painter->restore(); + break; + + default: + QWindowsStyle::drawControl(control, option, painter, widget); + } + painter->restore(); +} + +inline QPoint JavaStyle::adjustTabPoint(const QPoint &point, + QTabBar::Shape shape) const +{ + QPoint rPoint; + + switch (shape) { + case QTabBar::RoundedWest: + rPoint = QPoint(point.y(), point.x()); + break; + case QTabBar::RoundedSouth: + rPoint = QPoint(point.x(), point.y() * -1); + break; + case QTabBar::RoundedEast: + rPoint = QPoint(point.y() * -1, point.x()); + break; + default: + rPoint = point; + } + return rPoint; +} + +QRect JavaStyle::subControlRect(ComplexControl control, + const QStyleOptionComplex *option, + SubControl subControl, + const QWidget *widget) const +{ + QRect rect = QWindowsStyle::subControlRect(control, option, subControl, + widget); + + switch (control) { + case CC_TitleBar: { + const QStyleOptionTitleBar *bar = + qstyleoption_cast(option); + + switch (subControl) { + case SC_TitleBarMinButton: { + rect = QRect(bar->rect.topRight() + QPoint(-68, 2), + QSize(15, 15)); + break; + } + case SC_TitleBarMaxButton: { + rect = QRect(bar->rect.topRight() + QPoint(-43, 3), + QSize(15, 15)); + break; + } + case SC_TitleBarCloseButton: { + rect = QRect(bar->rect.topRight() + QPoint(-18, 3), + QSize(15, 15)); + break; + } + case SC_TitleBarLabel: { + QRect labelRect = bar->fontMetrics.boundingRect(bar->text); + rect = labelRect; + rect.translate(bar->rect.left() + 30, 0); + rect.moveTop(bar->rect.top()); + rect.adjust(0, 2, 2, 2); + break; + } + case SC_TitleBarSysMenu: { + rect = QRect(bar->rect.topLeft() + QPoint(6, 3), + QSize(16, 16)); + break; + } + default: + ; + } + break; + } + case CC_GroupBox: { + const QStyleOptionGroupBox *box = + qstyleoption_cast(option); + bool hasCheckbox = box->subControls & SC_GroupBoxCheckBox; + int checkAdjust = 13; + + QRect textRect = box->fontMetrics.boundingRect(box->text); + + switch (subControl) { + case SC_GroupBoxFrame: { + rect = box->rect; + break; + } + case SC_GroupBoxCheckBox: { + if (hasCheckbox) { + rect = QRect(box->rect.topLeft() + QPoint(7, 4 + + (textRect.height() / 2 - checkAdjust / 2)), + QSize(checkAdjust, checkAdjust)); + } + else { + rect = QRect(); + } + break; + } + case SC_GroupBoxLabel: { + rect = QRect(box->rect.topLeft() + QPoint(7 + (hasCheckbox ? + checkAdjust + 2 : 0), 4), textRect.size()); + break; + } + case SC_GroupBoxContents: { + rect = box->rect.adjusted(10, 10 + textRect.height(), -10, + -10); + break; + } + default: + ; + } + break; + } + case CC_SpinBox: { + const QStyleOptionSpinBox *spinBox = + qstyleoption_cast(option); + int spinnerWidth = 16; + QRect myRect = spinBox->rect; + QPoint center = myRect.center(); + int frameWidth = pixelMetric(PM_SpinBoxFrameWidth, spinBox, widget); + + switch (subControl) { + case SC_SpinBoxUp: { + rect = QRect(myRect.topRight() + QPoint(-16, 0), + QSize(16, center.y() - myRect.topRight().y())); + break; + } + case SC_SpinBoxDown: { + rect = QRect(QPoint(myRect.bottomRight().x() - 16, + center.y() + 1), + QSize(16, myRect.bottomRight().y() - + center.y() - 1)); + break; + } + case SC_SpinBoxFrame: { + rect = QRect(myRect.topLeft(), myRect.bottomRight() + + QPoint(-16, 0)); + break; + } + case SC_SpinBoxEditField: { + rect = QRect(myRect.topLeft() + QPoint(2, 2), + myRect.bottomRight() + QPoint(-15 - frameWidth, -2)); + break; + } + default: + ; + } + break; + } + case CC_ToolButton: { + const QStyleOptionToolButton *button = + qstyleoption_cast(option); + + switch (subControl) { + case SC_ToolButton: { + rect = option->rect.adjusted(1, 1, -1, -1); + break; + } + case SC_ToolButtonMenu: { + rect = QRect(option->rect.bottomRight() + + QPoint(-11, -11), QSize(10, 10)); + break; + } + } + break; + } + case CC_ComboBox: { + const QStyleOptionComboBox *combo = + qstyleoption_cast(option); + + bool reverse = combo->direction == Qt::RightToLeft; + + switch (subControl) { + case SC_ComboBoxFrame: + rect = combo->rect; + break; + case SC_ComboBoxArrow: + if (reverse) { + rect = QRect(combo->rect.topLeft(), + combo->rect.bottomLeft() + QPoint(17, 0)); + } else { + rect = QRect(combo->rect.topRight() + QPoint(-17, 0), + combo->rect.bottomRight()); + } + break; + case SC_ComboBoxEditField: + if (reverse) { + rect = QRect(combo->rect.topLeft() + QPoint(19, 2), + combo->rect.bottomRight() + QPoint(-2, 2)); + } else { + rect = QRect(combo->rect.topLeft() + QPoint(2, 2), + combo->rect.bottomRight() + QPoint(-19, -2)); + } + break; + case SC_ComboBoxListBoxPopup: + rect = combo->rect; + break; + } + break; + } + case CC_ScrollBar: { + const QStyleOptionSlider *scrollBar = + qstyleoption_cast(option); + int scrollBarExtent = pixelMetric(PM_ScrollBarExtent, scrollBar, + widget); + int sliderMaxLength = ((scrollBar->orientation == Qt::Horizontal) ? + scrollBar->rect.width() : + scrollBar->rect.height()) - (16 * 3); + int sliderMinLength = pixelMetric(PM_ScrollBarSliderMin, scrollBar, + widget); + int sliderLength; + + if (scrollBar->maximum != scrollBar->minimum) { + uint valueRange = scrollBar->maximum - scrollBar->minimum; + sliderLength = (scrollBar->pageStep * sliderMaxLength) / + (valueRange + scrollBar->pageStep); + + if (sliderLength < sliderMinLength || valueRange > INT_MAX / 2) + sliderLength = sliderMinLength; + if (sliderLength > sliderMaxLength) + sliderLength = sliderMaxLength; + } else { + sliderLength = sliderMaxLength; + } + int sliderStart = 16 + sliderPositionFromValue(scrollBar->minimum, + scrollBar->maximum, + scrollBar->sliderPosition, + sliderMaxLength - sliderLength, + scrollBar->upsideDown); + QRect scrollBarRect = scrollBar->rect; + + switch (subControl) { + case SC_ScrollBarSubLine: + if (scrollBar->orientation == Qt::Horizontal) { + rect.setRect(scrollBarRect.left(), scrollBarRect.top(), + scrollBarRect.width() - 16, scrollBarExtent); + } else { + rect.setRect(scrollBarRect.left(), scrollBarRect.top(), + scrollBarExtent, scrollBarRect.height() - 16); + } + break; + case SC_ScrollBarAddLine: + if (scrollBar->orientation == Qt::Horizontal) { + rect.setRect(scrollBarRect.right() - 15, + scrollBarRect.top(), 16, scrollBarExtent); + } else { + rect.setRect(scrollBarRect.left(), scrollBarRect.bottom() + - 15, scrollBarExtent, 16); + } + break; + case SC_ScrollBarSubPage: + if (scrollBar->orientation == Qt::Horizontal) { + rect.setRect(scrollBarRect.left() + 16, scrollBarRect.top(), + sliderStart - (scrollBarRect.left() + 16), + scrollBarExtent); + } else { + rect.setRect(scrollBarRect.left(), scrollBarRect.top() + 16, + scrollBarExtent, + sliderStart - (scrollBarRect.left() + 16)); + } + break; + case SC_ScrollBarAddPage: + if (scrollBar->orientation == Qt::Horizontal) + rect.setRect(sliderStart + sliderLength, 0, + sliderMaxLength - sliderStart - + sliderLength + 16, scrollBarExtent); + else + rect.setRect(0, sliderStart + sliderLength, + scrollBarExtent, sliderMaxLength - + sliderStart - sliderLength + 16); + break; + case SC_ScrollBarGroove: + if (scrollBar->orientation == Qt::Horizontal) { + rect = scrollBarRect.adjusted(16, 0, -32, 0); + } else { + rect = scrollBarRect.adjusted(0, 16, 0, -32); + } + break; + case SC_ScrollBarSlider: + if (scrollBar->orientation == Qt::Horizontal) { + rect.setRect(sliderStart, 0, sliderLength, + scrollBarExtent); + } else { + rect.setRect(0, sliderStart, scrollBarExtent, + sliderLength); + } + break; + default: + return QWindowsStyle::subControlRect(control, option, + subControl, widget); + } + break; + } + case CC_Slider: { + const QStyleOptionSlider *slider = + qstyleoption_cast(option); + rect = slider->rect; + int tickSize = pixelMetric(PM_SliderTickmarkOffset, option, widget); + int handleSize = pixelMetric(PM_SliderControlThickness, option, + widget); + + int dist = slider->orientation == Qt::Vertical ? slider->rect.height() : + slider->rect.width(); + int pos = QStyle::sliderPositionFromValue(slider->minimum, + slider->maximum, slider->sliderValue, dist - handleSize); + + switch (subControl) { + case SC_SliderGroove: { + QPoint center = rect.center(); + + if (slider->orientation == Qt::Horizontal) { + rect.setHeight(handleSize); + if (slider->tickPosition == QSlider::TicksBelow) { + center.ry() -= tickSize; + } + } else { + rect.adjust(0, 0, 0, 0); + rect.setWidth(handleSize); + if (slider->tickPosition == QSlider::TicksBelow) { + center.rx() -= tickSize; + } + } + rect.moveCenter(center); + break; + } + case SC_SliderHandle: { + QPoint center = rect.center(); + + if (slider->orientation == Qt::Horizontal) { + rect.setHeight(handleSize); + if (slider->tickPosition == QSlider::TicksBelow) { + center.ry() -= tickSize; + } + + rect.moveCenter(center); + + if (slider->upsideDown) + rect.setLeft(slider->rect.right() - + pos - (handleSize - 1)); + else + rect.setLeft(pos); + + rect.setWidth(handleSize - 1); + } else { + rect.setWidth(handleSize); + if (slider->tickPosition == QSlider::TicksBelow) { + center.rx() -= tickSize; + } + + rect.moveCenter(center); + + if (slider->upsideDown) + rect.setTop(slider->rect.bottom() - + ((pos + handleSize) - 2)); + else + rect.setTop(slider->rect.top() + pos); + + rect.setHeight(handleSize); + } + break; + } + case SC_SliderTickmarks: { + QPoint center = slider->rect.center(); + + if (slider->tickPosition & QSlider::TicksBelow) { + if (slider->orientation == Qt::Horizontal) { + rect.setHeight(tickSize); + center.ry() += tickSize / 2; + rect.adjust(6, 0, -10, 0); + } else { + rect.setWidth(tickSize); + center.rx() += tickSize / 2; + rect.adjust(0, 6, 0, -10); + } + } else { + rect = QRect(); + } + rect.moveCenter(center); + break; + } + default: + ; + } + break; + } + default: + return QWindowsStyle::subControlRect(control, option, subControl, + widget); + } + return rect; +} + +static const char * const sliderHandleImage[] = { + "15 16 7 1", + " c None", + "+ c #FFFFFF", + "@ c #FFFFFF", + "$ c #FFFFFF", + "( c #E5EDF5", + ") c #F2F6FA", + "[ c #FFFFFF", + " +++++++++++++ ", + "+@@@@@@@@@@@@@+", + "+@(((((((((((@+", + "+@(((((((((((@+", + "+@)))))))))))@+", + "+@[[[[[[[[[[[@+", + "+@[[[[[[[[[[[@+", + "+@)))))))))))@+", + "+@)))))))))))@+", + " +@)))))))))@+ ", + " +@(((((((@+ ", + " +@(((((@+ ", + " +@(((@+ ", + " +@(@+ ", + " +@+ ", + " + "}; + + +void JavaStyle::drawComplexControl(ComplexControl control, + const QStyleOptionComplex *option, + QPainter *painter, + const QWidget *widget) const +{ + painter->save(); + + switch (control) { + case CC_TitleBar: { + const QStyleOptionTitleBar *bar = + qstyleoption_cast(option); + + bool sunken = bar->state & State_Sunken; + + QLinearGradient gradient(bar->rect.bottomLeft(), + bar->rect.topLeft()); + gradient.setColorAt(0.0, QColor(191, 212, 231)); + gradient.setColorAt(0.7, Qt::white); + gradient.setColorAt(1.0, QColor(221, 232, 243)); + + painter->setPen(Qt::NoPen); + if (bar->titleBarState & State_Active) { + painter->setBrush(gradient); + } + else + painter->setBrush(bar->palette.color(QPalette::Active, + QPalette::Background)); + + painter->drawRect(bar->rect.adjusted(0, 0, -1, -1)); + + painter->setBrush(QColor(233, 233, 233)); + painter->drawRect(QRect(bar->rect.bottomLeft() + QPoint(0, 1), + bar->rect.bottomRight() + QPoint(0, 2))); + + QRect minButtonRect = subControlRect(control, bar, + SC_TitleBarMinButton); + QRect maxButtonRect = subControlRect(control, bar, + SC_TitleBarMaxButton); + QRect closeButtonRect = subControlRect(control, bar, + SC_TitleBarCloseButton); + QRect systemButtonRect = subControlRect(control, bar, + SC_TitleBarSysMenu); + QRect labelRect = subControlRect(control, bar, SC_TitleBarLabel); + QRect gripRect = QRect(QPoint(labelRect.right() + 5, bar->rect.top() + 5), + QPoint(minButtonRect.left() - 5, + bar->rect.bottom() - 4)); + + QColor textColor = option->palette.color(QPalette::Text); + painter->setPen(textColor); + painter->setBrush(Qt::NoBrush); + + drawItemText(painter, labelRect, Qt::TextShowMnemonic | + Qt::AlignHCenter | Qt::AlignCenter, + bar->palette, bar->state & State_Enabled, bar->text, + textColor.isValid() ? QPalette::NoRole : + QPalette::WindowText); + + for (int i = 0; i < gripRect.width(); ++i) { + painter->setPen(i % 2 ? bar->palette.color(QPalette::Midlight) + : Qt::white); + + for (int j = 0; j < 4; ++j) { + painter->drawPoint(i + gripRect.left(), + gripRect.top() - 2 + i % 4 + 4 * j); + } + } + + QPixmap maximizePixmap(":/images/internalmaximize.png"); + QPixmap minimizePixmap(":/images/internalminimize.png"); + QPixmap closePixmap(":/images/internalclose.png"); + QPixmap internalPixmap(":/images/internalsystem.png"); + QPixmap internalCloseDownPixmap(":/images/internalclosedown.png"); + QPixmap minimizeDownPixmap(":/images/internalminimizedown.png"); + QPixmap maximizeDownPixmap(":/images/internalmaximizedown.png"); + + if (bar->activeSubControls & SC_TitleBarCloseButton && + bar->state & State_Sunken) + painter->drawPixmap(closeButtonRect.topLeft(), + internalCloseDownPixmap); + else + painter->drawPixmap(closeButtonRect.topLeft(), closePixmap); + + if (bar->activeSubControls & SC_TitleBarMinButton && + bar->state & State_Sunken) + painter->drawPixmap(minButtonRect.topLeft(), + minimizeDownPixmap); + else + painter->drawPixmap(minButtonRect.topLeft(), minimizePixmap); + + if (bar->activeSubControls & SC_TitleBarMaxButton && + bar->state & State_Sunken) + painter->drawPixmap(maxButtonRect.topLeft(), + maximizeDownPixmap); + else + painter->drawPixmap(maxButtonRect.topLeft(), maximizePixmap); + + painter->drawPixmap(systemButtonRect.topLeft(), internalPixmap); + + break; + } + case CC_GroupBox: { + const QStyleOptionGroupBox *box = + qstyleoption_cast(option); + + QRect frameRect = subControlRect(control, box, SC_GroupBoxFrame); + QRect labelRect = subControlRect(control, box, SC_GroupBoxLabel); + QRect contentsRect = subControlRect(control, box, + SC_GroupBoxContents); + QRect checkerRect = subControlRect(control, box, + SC_GroupBoxCheckBox); + + int y = labelRect.center().y(); + + painter->setPen(box->palette.color(QPalette::Button)); + painter->drawRect(frameRect.adjusted(2, y - frameRect.top(), -2, + -2)); + + painter->setPen(box->palette.color(QPalette::Background)); + + if (box->subControls & SC_GroupBoxCheckBox) { + painter->drawLine(checkerRect.left() - 1, y, + checkerRect.right() + 2, y); + QStyleOptionButton checker; + checker.QStyleOption::operator=(*box); + checker.rect = checkerRect; + drawPrimitive(PE_IndicatorCheckBox, &checker, painter, widget); + } + + if (box->subControls & SC_GroupBoxLabel && !box->text.isEmpty()) { + painter->drawLine(labelRect.left() - 1, y, + labelRect.right() +1, y); + + QColor textColor = box->textColor; + if (textColor.isValid()) + painter->setPen(textColor); + + drawItemText(painter, labelRect, Qt::TextShowMnemonic | + Qt::AlignHCenter | int(box->textAlignment), + box->palette, box->state & State_Enabled, + box->text, textColor.isValid() ? QPalette::NoRole : + QPalette::WindowText); + } + break; + } + case CC_SpinBox: { + const QStyleOptionSpinBox *spinner = + qstyleoption_cast(option); + + QRect frameRect = subControlRect(control, spinner, SC_SpinBoxFrame); + QRect upRect = subControlRect(control, spinner, SC_SpinBoxUp); + QRect downRect = subControlRect(control, spinner, SC_SpinBoxDown); + + painter->setPen(Qt::white); + painter->drawRect(frameRect.adjusted(1, 1, -1, -1)); + painter->drawPoint(frameRect.bottomLeft()); + + painter->setPen(spinner->palette.color(QPalette::Mid)); + painter->drawRect(frameRect.adjusted(0, 0, -1, -2)); + + bool isEnabled = (spinner->state & State_Enabled); + bool hover = isEnabled && (spinner->state & State_MouseOver); + bool sunken = (spinner->state & State_Sunken); + bool upIsActive = (spinner->activeSubControls == SC_SpinBoxUp); + bool downIsActive = (spinner->activeSubControls == SC_SpinBoxDown); + bool stepUpEnabled = spinner->stepEnabled & + QAbstractSpinBox::StepUpEnabled; + bool stepDownEnabled = spinner->stepEnabled & + QAbstractSpinBox::StepDownEnabled; + + painter->setBrush(spinner->palette.color(QPalette::Background)); + + painter->drawRect(upRect); + if (upIsActive && stepUpEnabled) { + if (sunken) { + drawSunkenButtonShadow(painter, upRect, + spinner->palette.color(QPalette::Mid)); + } else if (hover) { + drawButtonHoverFrame(painter, upRect, + spinner->palette.color(QPalette::Mid), + spinner->palette.color(QPalette::Button)); + } + } + + QStyleOptionSpinBox upSpin = *spinner; + upSpin.rect = upRect; + drawPrimitive(PE_IndicatorSpinUp, &upSpin, painter, widget); + + painter->drawRect(downRect); + if (downIsActive && stepDownEnabled) { + if (sunken) { + drawSunkenButtonShadow(painter, downRect, + spinner->palette.color(QPalette::Mid)); + } else if (hover) { + drawButtonHoverFrame(painter, downRect, + spinner->palette.color(QPalette::Mid), + spinner->palette.color(QPalette::Button)); + } + } + + QStyleOptionSpinBox downSpin = *spinner; + downSpin.rect = downRect; + drawPrimitive(PE_IndicatorSpinDown, &downSpin, painter, widget); + + break; + } + case CC_ToolButton: { + const QStyleOptionToolButton *button = + qstyleoption_cast(option); + + painter->setPen(Qt::white); + painter->drawRect(button->rect.adjusted(1, 1, -1, -1)); + + QStyleOptionToolButton panelOption = *button; + QRect panelRect; + if (!(button->state & State_MouseOver) && + !(button->state & State_On)) { + painter->setPen(QColor(153, 153, 153)); + painter->drawRect(button->rect.adjusted(0, 0, -2, -2)); + + panelRect = subControlRect(control, option, SC_ToolButton); + panelOption.rect = panelRect; + } else { + panelOption.rect.adjust(0, 0, -1, -1); + } + + QRect menuRect = subControlRect(control, option, SC_ToolButtonMenu); + + drawPrimitive(PE_PanelButtonTool, &panelOption, painter, widget); + + QStyleOptionToolButton menuOption = *button; + menuOption.rect = menuRect; + + QStyleOptionToolButton label = *button; + int fw = 5; + + drawControl(CE_ToolButtonLabel, &label, painter, widget); + if (button->subControls & SC_ToolButtonMenu) { + painter->setPen(button->palette.color(QPalette::WindowText)); + drawPrimitive(PE_IndicatorArrowDown, &menuOption, painter, widget); + } + + if (button->state & State_HasFocus) { + QStyleOptionToolButton focusOption = *button; + focusOption.rect = label.rect.adjusted(-1, -1, 1, 1); + + drawPrimitive(PE_FrameFocusRect, &focusOption, painter, widget); + } + + break; + } + case CC_ComboBox: { + const QStyleOptionComboBox *combo = + qstyleoption_cast(option); + + QRect frameRect = subControlRect(control, option, SC_ComboBoxFrame, + widget); + painter->setPen(combo->palette.color(QPalette::Mid)); + + if (option->state & State_HasFocus) + painter->setBrush(option->palette.color(QPalette::Light)); + else + painter->setBrush(combo->palette.color(QPalette::Background)); + + painter->drawRect(frameRect.adjusted(0, 0, -1, -1)); + + QRect arrowRect = subControlRect(control, option, SC_ComboBoxArrow, + widget); + painter->setPen(combo->palette.color(QPalette::Button)); + painter->setBrush(Qt::NoBrush); + + if (combo->direction == Qt::LeftToRight) { + painter->drawRect(QRect(frameRect.topLeft() + QPoint(1, 1), + arrowRect.bottomLeft() + QPoint(-2, -2))); + } else { + painter->drawRect(QRect(arrowRect.topLeft() + QPoint(1, 1), + frameRect.bottomRight() + QPoint(-2, -2))); + } + + QStyleOptionButton button; + button.rect = arrowRect; + button.state = combo->state; + button.palette = combo->palette; + + if (button.state & State_On) + button.state ^= State_On; + + painter->save(); + drawButtonBackground(&button, painter, false); + painter->restore(); + + QPoint center = arrowRect.center(); + QPoint offset = QPoint(arrowRect.bottomLeft().x() + 1, + center.y() + 7); + QPainterPath arrow; + arrow.moveTo(offset + QPoint(4, -8)); + arrow.lineTo(offset + QPoint(7, -5)); + arrow.lineTo(offset + QPoint(8, -5)); + arrow.lineTo(offset + QPoint(11, -8)); + arrow.lineTo(offset + QPoint(4, -8)); + + painter->setBrush(combo->palette.color(QPalette::WindowText)); + painter->setPen(combo->palette.color(QPalette::WindowText)); + + painter->drawPath(arrow); + + QRect fieldRect = subControlRect(control, option, + SC_ComboBoxEditField, widget); + + break; + } + case CC_Slider: { + const QStyleOptionSlider *slider = + qstyleoption_cast(option); + + bool horizontal = slider->orientation == Qt::Horizontal; + + QRect groove = subControlRect(control, option, SC_SliderGroove, + widget); + QRect ticks = subControlRect(control, option, SC_SliderTickmarks, + widget); + QRect handle = subControlRect(control, option, SC_SliderHandle, + widget); + + QRect afterHandle = QRect(handle.topLeft() + xySwitch(QPoint(4, 6), horizontal), + groove.bottomRight() + xySwitch(QPoint(-4, -6), horizontal)); + QRect beforeHandle = QRect(groove.topLeft() + xySwitch(QPoint(4, 6), horizontal), + handle.bottomRight() + xySwitch(QPoint(-4, -6), horizontal)); + + if (slider->upsideDown || !horizontal) { + QRect remember; + remember = afterHandle; + afterHandle = beforeHandle; + beforeHandle = remember; + } + + painter->setPen(slider->palette.color(QPalette::Mid)); + painter->setBrush(option->palette.color(QPalette::Background)); + painter->drawRect(afterHandle); + painter->setPen(slider->palette.color(QPalette::Light)); + painter->drawLine(afterHandle.topLeft() + xySwitch(QPoint(0, 1), horizontal), + afterHandle.topRight() + xySwitch(QPoint(0, 1), horizontal)); + painter->setPen(option->palette.color(QPalette::Midlight)); + + if (horizontal) { + painter->setBrush(gradientBrush(QRect(QPoint(groove.x(), + handle.y() + 1), + QSize(groove.width(), + handle.height() + 1)))); + } else { + QRect rect = QRect(QPoint(groove.x(), + handle.x() - 1), + QSize(groove.height(), + handle.width() + 1)); + QLinearGradient gradient(groove.bottomLeft(), + groove.bottomRight()); + gradient.setColorAt(1.0, QColor(188, 210, 230)); + gradient.setColorAt(0.3, Qt::white); + gradient.setColorAt(0.0, QColor(223, 233, 243)); + + painter->setBrush(gradient); + } + + painter->drawRect(beforeHandle); + + QPainterPath handlePath; + QPainterPath innerPath; + QPoint topLeft, topRight, bottomLeft; + if (horizontal) { + topLeft = handle.topLeft(); + topRight = handle.topRight(); + bottomLeft = handle.bottomLeft(); + } else { + topLeft = handle.bottomLeft(); + topRight = handle.topLeft(); + bottomLeft = handle.topRight(); + } + + if (horizontal) { + QImage image(sliderHandleImage); + + image.setColor(1, + option->palette.color(QPalette::Midlight).rgb()); + image.setColor(2, + option->palette.color(QPalette::Button).rgb()); + + if (!(slider->state & State_Enabled)) { + image.setColor(4, slider->palette.color(QPalette::Background).rgb()); + image.setColor(5, slider->palette.color(QPalette::Background).rgb()); + image.setColor(6, slider->palette.color(QPalette::Background).rgb()); + } + + painter->drawImage(handle.topLeft(), image); + } else { + QImage image(":/images/verticalsliderhandle.png"); + painter->drawImage(handle.topLeft(), image); + } + + if (slider->tickPosition & QSlider::TicksBelow) { + painter->setPen(slider->palette.color(QPalette::Light)); + int tickInterval = slider->tickInterval ? slider->tickInterval : + slider->pageStep; + + for (int i = 0; i <= slider->maximum; i += tickInterval) { + if (horizontal) { + int pos = int(((i / double(slider->maximum)) * + ticks.width()) - 1); + painter->drawLine(QPoint(ticks.left() + pos, + ticks.top() + 2), QPoint(ticks.left() + pos, ticks.top() + 8)); + } else { + int pos = int(((i / double(slider->maximum)) * + ticks.height()) - 1); + painter->drawLine(QPoint(ticks.left() + 2, ticks.bottom() - pos), + QPoint(ticks.right() - 2, ticks.bottom() - pos)); + } + } + if (horizontal) { + painter->drawLine(QPoint(ticks.right(), ticks.top() + 2), + QPoint(ticks.right(), ticks.top() + 8)); + } else { + painter->drawLine(QPoint(ticks.left() + 2, ticks.top()), + QPoint(ticks.right() - 2, ticks.top())); + } + } + break; + } + default: + QWindowsStyle::drawComplexControl(control, option, painter, widget); + } + painter->restore(); +} + +inline void JavaStyle::drawSunkenButtonShadow(QPainter *painter, + QRect rect, + const QColor &frameColor, + bool reverse) const +{ + painter->save(); + + painter->setPen(frameColor); + + if (!reverse) { + painter->drawLine(QLine(QPoint(rect.x() + 1, rect.y() + 1), + QPoint(rect.x() + rect.width() - 1, rect.y() + 1))); + painter->drawLine(QLine(QPoint(rect.x() + 1, rect.y()), + QPoint(rect.x() + 1, rect.y() + rect.height()))); + } else { + painter->drawLine(QLine(QPoint(rect.right(), rect.bottom()), + QPoint(rect.right(), rect.top()))); + painter->drawLine(QLine(QPoint(rect.left(), rect.top() + 1), + QPoint(rect.right(), rect.top() + 1))); + } + painter->restore(); +} + +inline void JavaStyle::drawButtonHoverFrame(QPainter *painter, QRect rect, + const QColor &frameColor, + const QColor &activeFrame) const +{ + painter->save(); + + painter->setPen(activeFrame); + painter->drawRect(rect); + rect.adjust(1, 1, -1, -1); + painter->setPen(frameColor); + painter->drawRect(rect); + rect.adjust(1, 1, -1, -1); + painter->setPen(activeFrame); + painter->drawRect(rect); + + painter->restore(); +} + +QStyle::SubControl JavaStyle::hitTestComplexControl(ComplexControl control, + const QStyleOptionComplex *option, + const QPoint &pos, + const QWidget *widget) const +{ + SubControl ret = SC_None; + + switch (control) { + case CC_TitleBar: { + const QStyleOptionTitleBar *bar = + qstyleoption_cast(option); + + QRect maximize = subControlRect(control, bar, SC_TitleBarMaxButton); + if (maximize.contains(pos)) { + ret = SC_TitleBarMaxButton; + break; + } + QRect minimize = subControlRect(control, bar, SC_TitleBarMinButton); + if (minimize.contains(pos)) { + ret = SC_TitleBarMinButton; + break; + } + QRect close = subControlRect(control, bar, SC_TitleBarCloseButton); + if (close.contains(pos)) { + ret = SC_TitleBarCloseButton; + break; + } + QRect system = subControlRect(control, bar, SC_TitleBarSysMenu); + if (system.contains(pos)) { + ret = SC_TitleBarSysMenu; + break; + } + ret = SC_TitleBarLabel; + break; + } + case CC_ScrollBar: + if (const QStyleOptionSlider *scrollBar = + qstyleoption_cast(option)) { + QRect slider = subControlRect(control, scrollBar, + SC_ScrollBarSlider, widget); + if (slider.contains(pos)) { + ret = SC_ScrollBarSlider; + break; + } + + QRect scrollBarAddLine = subControlRect(control, scrollBar, + SC_ScrollBarAddLine, widget); + if (scrollBarAddLine.contains(pos)) { + ret = SC_ScrollBarAddLine; + break; + } + + QRect scrollBarSubPage = subControlRect(control, scrollBar, + SC_ScrollBarSubPage, widget); + if (scrollBarSubPage.contains(pos)) { + ret = SC_ScrollBarSubPage; + break; + } + + QRect scrollBarAddPage = subControlRect(control, scrollBar, + SC_ScrollBarAddPage, widget); + if (scrollBarAddPage.contains(pos)) { + ret = SC_ScrollBarAddPage; + break; + } + + QRect scrollBarSubLine = subControlRect(control, scrollBar, + SC_ScrollBarSubLine, widget); + if (scrollBarSubLine.contains(pos)) { + ret = SC_ScrollBarSubLine; + break; + } + } + break; + + default: + ret = QWindowsStyle::hitTestComplexControl(control, option, pos, + widget); + } + return ret; +} + +void JavaStyle::polish(QWidget *widget) +{ + if (qobject_cast(widget) || + qobject_cast(widget) || + qobject_cast(widget) || + qobject_cast(widget) || + qobject_cast(widget) || + qobject_cast(widget)) + widget->setAttribute(Qt::WA_Hover, true); +} + +void JavaStyle::unpolish(QWidget *widget) +{ + if (qobject_cast(widget) || + qobject_cast(widget) || + qobject_cast(widget) || + qobject_cast(widget) || + qobject_cast(widget) || + qobject_cast(widget)) + widget->setAttribute(Qt::WA_Hover, false); +} + +void JavaStyle::drawSplitter(const QStyleOption *option, QPainter *painter, + bool horizontal) const +{ + QRect rect = option->rect; + + painter->setPen(Qt::NoPen); + painter->setBrush(option->palette.color(QPalette::Background)); + + painter->drawRect(rect); + + QColor colors[] = { Qt::white, option->palette.color(QPalette::Mid) }; + int iterations = horizontal ? rect.height() - 1 : rect.width() - 1; + for (int i = 0; i < iterations; ++i) { + painter->setPen(colors[i % 2]); + painter->drawPoint(xySwitch(QPoint(rect.x() + 0 + (i % 4), + rect.y() + i), horizontal)); + } +} + +inline QPoint JavaStyle::xySwitch(const QPoint &point, bool horizontal) const +{ + QPoint retPoint = point; + + if (!horizontal) { + retPoint = QPoint(point.y(), point.x()); + } + + return retPoint; +} + +void JavaStyle::drawPrimitive(PrimitiveElement element, + const QStyleOption *option, + QPainter *painter, + const QWidget *widget) const +{ + painter->save(); + + switch (element) { + case PE_PanelButtonBevel: + case PE_FrameButtonBevel: { + painter->save(); + painter->setBrush(option->palette.background()); + painter->setPen(Qt::NoPen); + painter->drawRect(option->rect); + painter->restore(); + break; + } + case PE_IndicatorBranch: { + painter->save(); + QColor lineColor(204, 204, 255); + QPixmap openPixmap(":/images/jtreeopen.png"); + QPixmap closedPixmap(":/images/jtreeclosed.png"); + QRect pixmapRect(QPoint(0, 0), QSize(12, 12)); + pixmapRect.moveCenter(option->rect.center()); + pixmapRect.translate(2, 0); + QPoint center = option->rect.center(); + + painter->setPen(lineColor); + painter->setBrush(Qt::NoBrush); + + if (option->state & State_Item) { + painter->drawLine(center, + QPoint(option->rect.right(), center.y())); + + painter->drawLine(center, QPoint(center.x(), + option->rect.top())); + + if (option->state & State_Sibling) { + painter->drawLine(center, QPoint(center.x(), + option->rect.bottom())); + } + + if (option->state & State_Children) + if (option->state & State_Open) + painter->drawPixmap(pixmapRect.topLeft(), closedPixmap); + else + painter->drawPixmap(pixmapRect.topLeft(), openPixmap); + } else if (option->state & State_Sibling) { + painter->drawLine(center.x(), option->rect.top(), center.x(), + option->rect.bottom()); + } + + painter->restore(); + break; + } + case PE_IndicatorViewItemCheck: { + break; + } + case PE_FrameWindow: { + painter->save(); + bool active = option->state & State_Active; + + painter->setPen(Qt::NoPen); + painter->setBrush(active ? option->palette.color(QPalette::Midlight) + : option->palette.color(QPalette::Mid)); + + painter->drawRect(QRect(option->rect.topLeft(), option->rect.bottomLeft() + QPoint(5, 0))); + painter->drawRect(QRect(option->rect.bottomLeft(), option->rect.bottomRight() + QPoint(0, -5))); + painter->drawRect(QRect(option->rect.bottomRight() + QPoint(-5, 0), option->rect.topRight())); + painter->drawRect(QRect(option->rect.topLeft(), option->rect.topRight() + QPoint(0, 4))); + + painter->setBrush(Qt::NoBrush); + painter->setPen(option->palette.color(QPalette::Active, QPalette::WindowText)); + painter->drawLine(option->rect.topLeft() + QPoint(2, 14), + option->rect.bottomLeft() + QPoint(2, -14)); + + painter->drawLine(option->rect.topRight() + QPoint(-2, 14), + option->rect.bottomRight() + QPoint(-2, -14)); + + painter->drawLine(option->rect.topLeft() + QPoint(14, 2), + option->rect.topRight() + QPoint(-14, 2)); + + painter->drawLine(option->rect.bottomLeft() + QPoint(14, -2), + option->rect.bottomRight() + QPoint(-14, -2)); + + painter->setPen(active ? option->palette.color(QPalette::Light) : + option->palette.color(QPalette::Button)); + painter->drawLine(option->rect.topLeft() + QPoint(3, 15), + option->rect.bottomLeft() + QPoint(3, -13)); + + painter->drawLine(option->rect.topRight() + QPoint(-1, 15), + option->rect.bottomRight() + QPoint(-1, -13)); + + painter->drawLine(option->rect.topLeft() + QPoint(15, 3), + option->rect.topRight() + QPoint(-13, 3)); + + painter->drawLine(option->rect.bottomLeft() + QPoint(15, -1), + option->rect.bottomRight() + QPoint(-13, -1)); + + painter->restore(); + break; + } + case PE_IndicatorSpinUp: { + const QStyleOptionSpinBox *spinner = + qstyleoption_cast(option); + int add = spinner->state & State_Sunken && + spinner->activeSubControls & SC_SpinBoxUp ? 1 : 0; + + QPoint center = option->rect.center(); + painter->drawLine(center.x() + add, center.y() + 1 + add, + center.x() + 2 + add, center.y() + 1 + add); + painter->drawPoint(center.x() + 1 + add, center.y() + add); + break; + } + case PE_IndicatorSpinDown: { + const QStyleOptionSpinBox *spinner = + qstyleoption_cast(option); + + int add = spinner->state & State_Sunken && + spinner->activeSubControls & SC_SpinBoxDown ? 1 : 0; + QPoint center = option->rect.center(); + painter->drawLine(center.x() + add, center.y() + add, + center.x() + 2 + add, center.y() + add); + painter->drawPoint(center.x() + 1 + add, center.y() + 1 + add); + break; + } + case PE_FrameDockWidget: { + drawPrimitive(PE_FrameWindow, option, painter, widget); + break; + } + case PE_IndicatorToolBarHandle: { + QPoint offset; + bool horizontal = option->state & State_Horizontal; + + if (horizontal) + offset = option->rect.topLeft(); + else + offset = option->rect.topLeft(); + + int iterations = horizontal ? option->rect.height() : + option->rect.width(); + + for (int i = 0; i < iterations; ++i) { + painter->setPen(i % 2 ? Qt::white : + option->palette.color(QPalette::Mid)); + int add = i % 4; + painter->drawPoint(offset + xySwitch(QPoint(add, i), + horizontal)); + painter->drawPoint(offset + xySwitch(QPoint(add + 4, i), + horizontal)); + if (add + 8 < 10) + painter->drawPoint(offset + xySwitch(QPoint(add + 8, i), + horizontal)); + } + + break; + } + case PE_IndicatorToolBarSeparator: { + break; + } + case PE_PanelButtonTool: { + const QStyleOptionToolButton *button = + qstyleoption_cast(option); + + if (!button) { + painter->setPen(Qt::red); + if (!(option->state & State_Enabled)) + painter->drawRect(option->rect.adjusted(0, 0, -1, -1)); + drawButtonBackground(option, painter, false); + break; + } + + if (button->state & State_MouseOver || button->state & State_On) { + QStyleOptionButton bevel; + bevel.state = button->state; + bevel.rect = button->rect; + bevel.palette = button->palette; + + drawButtonBackground(&bevel, painter, false); + } else { + painter->setPen(Qt::NoPen); + painter->setBrush(button->palette.color(QPalette::Background)); + + painter->drawRect(button->rect.adjusted(0, 0, -1, -1)); + } + break; + } + case PE_FrameMenu: { + painter->setPen(option->palette.color(QPalette::Midlight)); + painter->drawRect(option->rect.adjusted(0, 0, -1, -1)); + break; + } + case PE_PanelButtonCommand: { + const QStyleOptionButton *btn = + qstyleoption_cast(option); + bool hover = (btn->state & State_Enabled) && + (btn->state & State_MouseOver); + bool sunken = btn->state & State_Sunken; + bool isDefault = btn->features & QStyleOptionButton::DefaultButton; + bool on = option->state & State_On; + + drawButtonBackground(option, painter, false); + + QRect rect = option->rect.adjusted(0, 0, -1, -1); + if (hover && !sunken && !isDefault && !on) { + drawButtonHoverFrame(painter, rect, + btn->palette.color(QPalette::Mid), + btn->palette.color(QPalette::Button)); + } else if (isDefault) { + drawPrimitive(PE_FrameDefaultButton, option, painter, widget); + } + break; + } + case PE_FrameDefaultButton: { + painter->setPen(option->palette.color(QPalette::Mid)); + QRect rect = option->rect.adjusted(0, 0, -1, -1); + painter->drawRect(rect); + painter->drawRect(rect.adjusted(1, 1, -1, -1)); + break; + } +//! [0] + case PE_IndicatorCheckBox: { + painter->save(); + drawButtonBackground(option, painter, true); + + if (option->state & State_Enabled && + option->state & State_MouseOver && + !(option->state & State_Sunken)) { + painter->setPen(option->palette.color(QPalette::Button)); + QRect rect = option->rect.adjusted(1, 1, -2, -2); + painter->drawRect(rect); + rect = rect.adjusted(1, 1, -1, -1); + painter->drawRect(rect); + } + + if (option->state & State_On) { + QImage image(":/images/checkboxchecked.png"); + painter->drawImage(option->rect.topLeft(), image); + } + painter->restore(); + break; +//! [0] + } + case PE_IndicatorRadioButton: { + painter->save(); + QBrush radioBrush = option->palette.button(); + + if (!(option->state & State_Sunken) && + option->state & State_Enabled) + radioBrush = gradientBrush(option->rect); + + painter->setBrush(radioBrush); + if (option->state & State_Enabled) + painter->setPen(option->palette.color(QPalette::Mid)); + else + painter->setPen(option->palette.color(QPalette::Disabled, + QPalette::WindowText)); + painter->drawEllipse(option->rect.adjusted(0, 0, -1, -1)); + + if (option->state & State_MouseOver && + option->state & State_Enabled && + !(option->state & State_Sunken)) { + gradientBrush(option->rect); + painter->setPen(option->palette.color(QPalette::Button)); + painter->setBrush(Qt::NoBrush); + QRect rect = option->rect.adjusted(1, 1, -2, -2); + painter->drawEllipse(rect); + rect = rect.adjusted(1, 1, -1, -1); + painter->drawEllipse(rect); + } + + if (option->state & State_On) { + painter->setBrush(option->palette.color(QPalette::Text)); + painter->setPen(Qt::NoPen); + painter->drawEllipse(option->rect.adjusted(3, 3, -3, -3)); + } + if (option->state & State_Sunken && + option->state & State_Enabled) { + painter->setPen(option->palette.color(QPalette::Mid)); + painter->drawArc(option->rect.adjusted(1, 1, -2, -2), 80 * 16, + 100 * 16); + } + painter->restore(); + break; + } + case PE_FrameTabWidget: { + painter->setPen(option->palette.color(QPalette::Midlight)); + painter->drawRect(option->rect.adjusted(0, 0, -1, -1)); + painter->setPen(Qt::white); + painter->drawRect(option->rect.adjusted(1, 1, -2, -2)); + break; + } + case PE_Frame: + case PE_FrameLineEdit: { + const QStyleOptionFrame *frame = + qstyleoption_cast(option); + const QStyleOptionFrameV2 frameV2(*frame); + + painter->setPen(frame->palette.color(QPalette::Mid)); + painter->drawRect(frameV2.rect.adjusted(0, 0, -2, -2)); + painter->setPen(Qt::white); + painter->drawRect(frameV2.rect.adjusted(1, 1, -1, -1)); + painter->setPen(frameV2.palette.color(QPalette::Active, + QPalette::Background)); + painter->drawLine(frameV2.rect.bottomLeft(), + frameV2.rect.bottomLeft() + QPoint(1, -1)); + painter->drawLine(frameV2.rect.topRight(), + frameV2.rect.topRight() + QPoint(-1, 1)); + break; + } + case PE_FrameFocusRect: { + painter->setPen(option->palette.color(QPalette::Light)); + painter->setBrush(Qt::NoBrush); + QRect rect = option->rect; + rect = rect.adjusted(0,0, -1, -1); + painter->drawRect(rect); + break; + } + default: + QWindowsStyle::drawPrimitive(element, option, painter, widget); + } + painter->restore(); +} + +//! [1] +void JavaStyle::drawButtonBackground(const QStyleOption *option, + QPainter *painter, bool isCheckbox) const +{ + QBrush buttonBrush = option->palette.button(); + bool sunken = option->state & State_Sunken; + bool disabled = !(option->state & State_Enabled); + bool on = option->state & State_On; + + if (!sunken && !disabled && (!on || isCheckbox)) + buttonBrush = gradientBrush(option->rect); + + painter->fillRect(option->rect, buttonBrush); + + QRect rect = option->rect.adjusted(0, 0, -1, -1); + + if (disabled) + painter->setPen(option->palette.color(QPalette::Disabled, + QPalette::WindowText)); + else + painter->setPen(option->palette.color(QPalette::Mid)); + + painter->drawRect(rect); + + if (sunken && !disabled) { + drawSunkenButtonShadow(painter, rect, + option->palette.color(QPalette::Mid), + option->direction == Qt::RightToLeft); + } +} +//! [1] + +QBrush JavaStyle::gradientBrush(const QRect &rect) const +{ + QLinearGradient gradient(rect.topLeft(), rect.bottomLeft()); + gradient.setColorAt(1.0, QColor(188, 210, 230)); + gradient.setColorAt(0.3, Qt::white); + gradient.setColorAt(0.0, QColor(223, 233, 243)); + + return QBrush(gradient); +} + +QRect JavaStyle::subElementRect(SubElement element, + const QStyleOption *option, + const QWidget *widget) const +{ + QRect rect; + + switch (element) { + case SE_ToolBoxTabContents: { + const QStyleOptionToolBox *box = + qstyleoption_cast(option); + + rect.moveTopLeft(box->rect.topLeft() + QPoint(0, 2)); + rect.setHeight(box->rect.height() - 4); + rect.setWidth(box->fontMetrics.width(box->text) + 15); + break; + } + case SE_ProgressBarLabel: + case SE_ProgressBarGroove: + case SE_ProgressBarContents: { + rect = option->rect.adjusted(1, 1, -1, -1); + break; + } + case SE_PushButtonFocusRect: { + const QStyleOptionButton *btn = + qstyleoption_cast(option); + + rect = btn->fontMetrics.boundingRect(btn->text); + rect = QRect(0, 0, btn->fontMetrics.width(btn->text), + rect.height()); + + if (!btn->icon.isNull()) { + rect.adjust(0, 0, btn->iconSize.width(), btn->iconSize.height() + > rect.height() ? btn->iconSize.height() - rect.height() : 0); + rect.translate(-btn->iconSize.width(), 0); + rect.adjust(-1, -1, 1, 1); + } + rect = QRect(int(ceil((btn->rect.width() - rect.width()) / 2.0)), + int(ceil((btn->rect.height() - rect.height()) / 2.0)), + rect.width() - 1, rect.height()); + rect.adjust(-1, 0, 1, 0); + + break; + } + default: + rect = QWindowsStyle::subElementRect(element, option, widget); + } + return rect; +} + +int JavaStyle::pixelMetric(PixelMetric metric, + const QStyleOption* /* option */, + const QWidget* /*widget*/) const +{ + int value = 0; + + switch (metric) { + case PM_ButtonShiftHorizontal: + case PM_ButtonShiftVertical: + case PM_TabBarTabShiftHorizontal: + case PM_ButtonDefaultIndicator: + case PM_TabBarTabShiftVertical: + value = 0; + break; + case PM_TabBarBaseOverlap: + case PM_DefaultFrameWidth: + value = 2; + break; + case PM_TabBarTabVSpace: + value = 4; + break; + case PM_ScrollBarExtent: + value = 16; + break; + case PM_ScrollBarSliderMin: + value = 26; + break; + case PM_SplitterWidth: + value = 8; + break; + case PM_SliderThickness: + value = 16; + break; + case PM_SliderControlThickness: + value = 16; + break; + case PM_SliderTickmarkOffset: + value = 10; + break; + case PM_SliderSpaceAvailable: + break; + case PM_MenuPanelWidth: + value = 1; + break; + case PM_MenuVMargin: + value = 2; + break; + case PM_MenuBarPanelWidth: + value = 1; + break; + case PM_MenuBarItemSpacing: + value = 0; + break; + case PM_MenuBarHMargin: + value = 3; + break; + case PM_MenuBarVMargin: + value = 0; + break; + case PM_ComboBoxFrameWidth: + value = 1; + break; + case PM_MenuButtonIndicator: + value = 15; + break; + case PM_ToolBarItemMargin: + value = 3; + break; + case PM_ToolBarHandleExtent: + value = 13; + break; + case PM_SpinBoxFrameWidth: + value = 2; + break; + case PM_TitleBarHeight: { + value = 21; + break; + case PM_MDIFrameWidth: + value = 6; + break; + } + case PM_DockWidgetFrameWidth: { + value = 5; + break; + } + default: + value = QWindowsStyle::pixelMetric(metric); + } + return value; +} + + +int JavaStyle::styleHint(StyleHint hint, const QStyleOption *option, + const QWidget *widget, + QStyleHintReturn *returnData) const +{ + int ret; + + switch (hint) { + case SH_Table_GridLineColor: { + ret = static_cast(option->palette.color(QPalette::Mid).rgb()); + break; + } + case QStyle::SH_Menu_Scrollable: + ret = 1; + break; + default: + ret = QWindowsStyle::styleHint(hint, option, widget, returnData); + } + return ret; +} + +QPixmap JavaStyle::standardPixmap(StandardPixmap standardPixmap, + const QStyleOption *option, + const QWidget *widget) const +{ + QPixmap pixmap = QWindowsStyle::standardPixmap(standardPixmap, option, + widget); + + QPixmap maximizePixmap(":/images/internalmaximize.png"); + QPixmap minimizePixmap(":/images/internalminimize.png"); + QPixmap closePixmap(":/images/internalclose.png"); + QPixmap internalPixmap(":/images/internalsystem.png"); + QPixmap internalCloseDownPixmap(":/images/internalclosedown.png"); + QPixmap minimizeDownPixmap(":/images/internalminimizedown.png"); + QPixmap maximizeDownPixmap(":/images/internalmaximizedown.png"); + QPixmap dirOpenPixmap(":/images/open24.png"); + QPixmap filePixmap(":/images/file.png"); + + switch (standardPixmap) { + case SP_DirLinkIcon: + case SP_DirClosedIcon: + case SP_DirIcon: + case SP_DirOpenIcon: { + pixmap = closePixmap; + break; + } + case SP_FileIcon: { + pixmap = filePixmap; + break; + } + case SP_FileDialogBack: { + pixmap = QPixmap(":/images/fileback.png"); + break; + } + case SP_FileDialogToParent: { + pixmap = QPixmap(":/images/fileparent.png"); + break; + } + case SP_FileDialogNewFolder: { + pixmap = QPixmap(":/images/open24.png"); + break; + } + case SP_FileDialogListView: { + pixmap = QPixmap(":/images/filelist.png"); + break; + } + case SP_FileDialogDetailedView: { + pixmap = QPixmap(":/images/filedetail.png"); + break; + } + case SP_MessageBoxInformation: { + pixmap = QPixmap(":/images/information.png"); + break; + } + case SP_MessageBoxWarning: { + pixmap = QPixmap(":/images/warning.png"); + } + case SP_MessageBoxCritical: { + pixmap = QPixmap(":/images/critical.png"); + break; + } + case SP_MessageBoxQuestion: { + pixmap = QPixmap(":/images/question.png"); + break; + } + case SP_TitleBarNormalButton: + pixmap = maximizePixmap; + break; + case SP_TitleBarCloseButton: + pixmap = closePixmap; + break; + default: + ; + } + + return pixmap; +} + +QSize JavaStyle::sizeFromContents(ContentsType type, + const QStyleOption *option, + const QSize &contentsSize, + const QWidget *widget) const +{ + switch (type) { + case CT_ComboBox: { + return QSize(contentsSize.width() + 27, contentsSize.height()); + } + case CT_Slider: { + const QStyleOptionSlider *slider = + qstyleoption_cast(option); + if (slider->tickPosition == QSlider::TicksBelow) { + return QSize(contentsSize.width(), contentsSize.height() + 15); + } else { + return contentsSize; + } + } + case CT_MenuBarItem: { + const QStyleOptionMenuItem *menuItem = + qstyleoption_cast(option); + QFontMetrics metrics(menuItem->font); + QRect boundingRect = metrics.boundingRect(menuItem->text); + int width = boundingRect.width() + 14; + int height = boundingRect.height() + 3; + if (height < 20) + height = 20; + + return QSize(width, height); + } + case CT_MenuItem: { + const QStyleOptionMenuItem *menuItem = + qstyleoption_cast(option); + QSize defaultSize = QWindowsStyle::sizeFromContents(type, option, + contentsSize, widget); + + if (menuItem->menuItemType == QStyleOptionMenuItem::Separator) + return defaultSize; + + int width = 30; + int height = 0; + + if (!menuItem->icon.isNull()) { + width += 20; + height += 20; + } + if (!menuItem->text.isEmpty()) { + QFontMetrics metrics(menuItem->font); + QString text = menuItem->text; + text.remove(QLatin1Char('\t')); + QRect textRect = metrics.boundingRect(text); + width += textRect.width(); + if (height < textRect.height()) + height += textRect.height(); + } + if (menuItem->checkType != QStyleOptionMenuItem::NotCheckable) { + width += 10; + if (height < 10) + height = 10; + } + return QSize(width, height); + } + default: + return QWindowsStyle::sizeFromContents(type, option, contentsSize, + widget); + } +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/layouts/layouts.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/layouts/layouts.cpp new file mode 100644 index 0000000..9bcc5db --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/layouts/layouts.cpp @@ -0,0 +1,126 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] + window = QWidget() +//! [0] //! [1] + button1 = QPushButton("One") +//! [1] //! [2] + button2 = QPushButton("Two") + button3 = QPushButton("Three") + button4 = QPushButton("Four") + button5 = QPushButton("Five") +//! [2] + +//! [3] + layout = QHBoxLayout() +//! [3] //! [4] + layout.addWidget(button1) + layout.addWidget(button2) + layout.addWidget(button3) + layout.addWidget(button4) + layout.addWidget(button5) + + window.setLayout(layout) +//! [4] //! [5] + window.show() +//! [5] + +//! [6] + window = QWidget() +//! [6] //! [7] + button1 = QPushButton("One") +//! [7] //! [8] + button2 = QPushButton("Two") + button3 = QPushButton("Three") + button4 = QPushButton("Four") + button5 = QPushButton("Five") +//! [8] + +//! [9] + layout = QVBoxLayout() + +//! [9] //! [10] + layout.addWidget(button1) + layout.addWidget(button2) + layout.addWidget(button3) + layout.addWidget(button4) + layout.addWidget(button5) + + window.setLayout(layout) +//! [10] //! [11] + window.show() +//! [11] + +//! [12] + window = QWidget() +//! [12] //! [13] + button1 = QPushButton("One") +//! [13] //! [14] + button2 = QPushButton("Two") + button3 = QPushButton("Three") + button4 = QPushButton("Four") + button5 = QPushButton("Five") +//! [14] + +//! [15] + layout = QGridLayout() + +//! [15] //! [16] + layout.addWidget(button1, 0, 0) + layout.addWidget(button2, 0, 1) + layout.addWidget(button3, 1, 0, 1, 2) + layout.addWidget(button4, 2, 0) + layout.addWidget(button5, 2, 1) + + window.setLayout(layout) +//! [16] //! [17] + window.show() +//! [17] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/mainwindowsnippet.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/mainwindowsnippet.cpp new file mode 100644 index 0000000..1b0f94e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/mainwindowsnippet.cpp @@ -0,0 +1,58 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] + dockWidget = QDockWidget(tr("Dock Widget"), self) + dockWidget.setAllowedAreas(Qt.LeftDockWidgetArea | + Qt.RightDockWidgetArea) + dockWidget.setWidget(dockWidgetContents) + addDockWidget(Qt.LeftDockWidgetArea, dockWidget) +//! [0] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/matrix/matrix.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/matrix/matrix.cpp new file mode 100644 index 0000000..369d25a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/matrix/matrix.cpp @@ -0,0 +1,112 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] +def paintEvent(self, event): + painter = QPainter(self) + painter.setPen(QPen(Qt.blue, 1, Qt.DashLine)) + painter.drawRect(0, 0, 100, 100) + + painter.rotate(45) + + painter.setFont(QFont("Helvetica", 24)) + painter.setPen(QPen(Qt.black, 1)) + painter.drawText(20, 10, "QMatrix") +//! [0] + + +//! [1] +def paintEvent(self, event) + + painter = QPainter(self) + painter.setPen(QPen(Qt.blue, 1, Qt.DashLine)) + painter.drawRect(0, 0, 100, 100) + + matrix = QMatrix() + matrix.translate(50, 50) + matrix.rotate(45) + matrix.scale(0.5, 1.0) + painter.setMatrix(matrix) + + painter.setFont(QFont("Helvetica", 24)) + painter.setPen(QPen(Qt.black, 1)) + painter.drawText(20, 10, "QMatrix") + +//! [1] + + +//! [2] +def paintEvent(self, event) + + pi = 3.14 + + a = pi/180 * 45.0 + sina = sin(a) + cosa = cos(a) + + translationMatrix = QMatrix(1, 0, 0, 1, 50.0, 50.0) + rotationMatrix = QMatrix(cosa, sina, -sina, cosa, 0, 0) + scalingMatrix = QMatrix(0.5, 0, 0, 1.0, 0, 0) + + matrix = QMatrix() + matrix = scalingMatrix * rotationMatrix * translationMatrix + + painter = QPainter(self) + painter.setPen(QPen(Qt.blue, 1, Qt::DashLine)) + painter.drawRect(0, 0, 100, 100) + + painter.setMatrix(matrix) + + painter.setFont(QFont("Helvetica", 24)) + painter.setPen(QPen(Qt.black, 1)) + painter.drawText(20, 10, "QMatrix") + +//! [2] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/mdiareasnippets.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/mdiareasnippets.cpp new file mode 100644 index 0000000..f7d07c8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/mdiareasnippets.cpp @@ -0,0 +1,66 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] + mainWindow = QMainWindow() + mainWindow.setCentralWidget(mdiArea) +//! [0] + +//! [1] + mdiArea = QMdiArea() + subWindow1 = QMdiSubWindow() + subWindow1.setWidget(internalWidget1) + subWindow1.setAttribute(Qt.WA_DeleteOnClose) + mdiArea.addSubWindow(subWindow1) + + subWindow2 = QMdiSubWindow() + mdiArea.addSubWindow(internalWidget2) +//! [1] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/moc/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/moc/main.cpp new file mode 100644 index 0000000..0a1763a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/moc/main.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "myclass1.h" + +MyClass::MyClass(QObject *) {} +MyClass::~MyClass() {} +void MyClass::mySlot() {} +#undef MyClass + +#include "myclass2.h" + +MyClass::MyClass(QObject *) {} +MyClass::~MyClass() {} +void MyClass::setPriority(Priority) {} +MyClass::Priority MyClass::priority() const { return High; } +#undef MyClass + +#include "myclass3.h" + +MyClass::MyClass(QObject *) {} +MyClass::~MyClass() {} +#undef MyClass + +int main() +{ + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/moc/myclass1.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/moc/myclass1.h new file mode 100644 index 0000000..0391b48 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/moc/myclass1.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MYCLASS1_H +#define MYCLASS1_H + +#include + +#define MyClass MyClass1 + +//! [0] +class MyClass : public QObject +{ + Q_OBJECT + +public: + MyClass(QObject *parent = 0); + ~MyClass(); + +signals: + void mySignal(); + +public slots: + void mySlot(); +}; +//! [0] + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/moc/myclass2.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/moc/myclass2.h new file mode 100644 index 0000000..e39cb6a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/moc/myclass2.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MYCLASS2_H +#define MYCLASS2_H + +#include + +#define MyClass MyClass2 + +//! [0] +class MyClass : public QObject +{ + Q_OBJECT + Q_PROPERTY(Priority priority READ priority WRITE setPriority) + Q_ENUMS(Priority) + +public: + enum Priority { High, Low, VeryHigh, VeryLow }; + + MyClass(QObject *parent = 0); + ~MyClass(); + + void setPriority(Priority priority); + Priority priority() const; +}; +//! [0] + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/moc/myclass3.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/moc/myclass3.h new file mode 100644 index 0000000..5110c62 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/moc/myclass3.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MYCLASS3_H +#define MYCLASS3_H + +#include + +//! [0] +class MyClass : public QObject +{ + Q_OBJECT + Q_CLASSINFO("Author", "Oscar Peterson") + Q_CLASSINFO("Status", "Active") + +public: + MyClass(QObject *parent = 0); + ~MyClass(); +}; +//! [0] + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/main.cpp new file mode 100644 index 0000000..fd43b1a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/main.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + main.cpp + + An example of a main window application that used a subclassed model + and view to display data from sound files. +*/ + +#include + +#include "model.h" +#include "view.h" +#include "window.h" + +/*! + The main function for the linear model example. This creates and + populates a model with long integers then displays the contents of the + model using a QListView widget. +*/ + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + MainWindow *window = new MainWindow; + + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/model.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/model.cpp new file mode 100644 index 0000000..e4d4033 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/model.cpp @@ -0,0 +1,162 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + model.cpp + + A simple model that uses a QVector as its data source. +*/ + +#include "model.h" + +/*! + Returns the number of items in the string list as the number of rows + in the model. +*/ + +int LinearModel::rowCount(const QModelIndex &parent) const +{ + Q_USING(parent); + + return values.count(); +} + +/* + Returns an appropriate value for the requested data. + If the view requests an invalid index, an invalid variant is returned. + If a header is requested then we just return the column or row number, + depending on the orientation of the header. + Any valid index that corresponds to a string in the list causes that + string to be returned. +*/ + +/*! + Returns a model index for other component to use when referencing the + item specified by the given row, column, and type. The parent index + is ignored. +*/ + +QModelIndex LinearModel::index(int row, int column, const QModelIndex &parent) const +{ + if (parent == QModelIndex() && row >= 0 && row < rowCount() + && column == 0) + return createIndex(row, column, 0); + else + return QModelIndex(); +} + +QVariant LinearModel::data(const QModelIndex &index, int role) const +{ + Q_UNUSED(role); + + if (!index.isValid()) + return QVariant(); + + return values.at(index.row()); +} + +/*! + Returns Qt::ItemIsEditable so that all items in the vector can be edited. +*/ + +Qt::ItemFlags LinearModel::flags(const QModelIndex &index) const +{ + // all items in the model are editable + return QAbstractListModel::flags(index) | Qt::ItemIsEditable; +} + +/*! + Changes an item in the string list, but only if the following conditions + are met: + + * The index supplied is valid. + * The index corresponds to an item to be shown in a view. + * The role associated with editing text is specified. + + The dataChanged() signal is emitted if the item is changed. +*/ + +bool LinearModel::setData(const QModelIndex &index, + const QVariant &value, int role) +{ + if (!index.isValid() || role != Qt::EditRole) + return false; + values.replace(index.row(), value.toInt()); + emit dataChanged(index, index); + return true; +} + +/*! + Inserts a number of rows into the model at the specified position. +*/ + +bool LinearModel::insertRows(int position, int rows, const QModelIndex &parent) +{ + beginInsertRows(parent, position, position + rows - 1); + + values.insert(position, rows, 0); + + endInsertRows(); + return true; +} + +/*! + Removes a number of rows from the model at the specified position. +*/ + +bool LinearModel::removeRows(int position, int rows, const QModelIndex &parent) +{ + beginRemoveRows(QModelIndex(), position, position+rows-1); + + values.remove(position, rows); + + endRemoveRows(); + return true; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/model.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/model.h new file mode 100644 index 0000000..e9f8587 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/model.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODEL_H +#define MODEL_H + +#include +#include +#include + +class LinearModel : public QAbstractListModel +{ + Q_OBJECT +public: + LinearModel(QObject *parent = 0) + : QAbstractListModel(parent) {} + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::EditRole); + + bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()); + +private: + QVector values; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/view.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/view.cpp new file mode 100644 index 0000000..eb13a0f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/view.cpp @@ -0,0 +1,324 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + view.cpp + + Provides a view to represent a one-dimensional sequence of integers + obtained from a list model as a series of rows. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "view.h" + +LinearView::LinearView(QWidget *parent) + : QAbstractItemView(parent) +{ + setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); +} + +/*! + Returns the position of the item in viewport coordinates. +*/ + +QRect LinearView::itemViewportRect(const QModelIndex &index) const +{ + QRect rect = itemRect(index); + QRect result(rect.left() - horizontalScrollBar()->value(), + rect.top() - verticalScrollBar()->value(), + rect.width(), viewport()->height()); + + return result; +} + +/*! + Returns the rectangle of the item at position \a index in the + model. The rectangle is in contents coordinates. +*/ + +QRect LinearView::itemRect(const QModelIndex &index) const +{ + if (!index.isValid()) + return QRect(); + else + return QRect(index.row(), 0, 1, 1); +} + + +void LinearView::ensureVisible(const QModelIndex &index) +{ + QRect area = viewport()->rect(); + QRect rect = itemViewportRect(index); + + if (rect.left() < area.left()) + horizontalScrollBar()->setValue( + horizontalScrollBar()->value() - rect.left()); + else if (rect.right() > area.right()) + horizontalScrollBar()->setValue( + horizontalScrollBar()->value() + rect.left() - area.width()); +} + +/*! + Returns the item that covers the coordinate given in the view. +*/ + +QModelIndex LinearView::itemAt(int x, int /* y */) const +{ + int row = x + horizontalScrollBar()->value(); + + return model()->index(row, 0, QModelIndex()); +} + +//void LinearView::dataChanged(const QModelIndex &/* topLeft */, +// const QModelIndex &/* bottomRight */) +//{ +// updateGeometries(); +// if (isVisible()) +// repaint(); +//} + +void LinearView::rowsInserted(const QModelIndex &/* parent */, int /* start */, + int /* end */) +{ + updateGeometries(); + if (isVisible()) + repaint(); +} + +void LinearView::rowsRemoved(const QModelIndex &/* parent */, int /* start */, + int /* end */) +{ + updateGeometries(); + if (isVisible()) + repaint(); +} +/* +void LinearView::verticalScrollbarAction(int action) +{ +} + +void LinearView::horizontalScrollbarAction(int action) +{ +} +*/ + +/*! + Select the items in the model that lie within the rectangle specified by + \a rect, using the selection \a command. +*/ + +void LinearView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) +{ + QModelIndex leftIndex = itemAt(rect.left(), 0); + QModelIndex rightIndex = itemAt(rect.right(), 0); + + QItemSelection selection(leftIndex, rightIndex); + + selectionModel()->select(selection, command); +} + +QModelIndex LinearView::moveCursor(QAbstractItemView::CursorAction cursorAction, + Qt::KeyboardModifiers) +{ + QModelIndex current = currentIndex(); + + switch (cursorAction) { + case MoveLeft:{ + if (current.row() > 0) + return model()->index(current.row() - 1, 0, QModelIndex()); + else + return model()->index(0, 0, QModelIndex()); + break;} + case MoveRight:{ + if (current.row() < rows(current) - 1) + return model()->index(current.row() + 1, 0, QModelIndex()); + else + return model()->index(rows(current) - 1, 0,QModelIndex()); + break;} + case MoveUp: + return current; + case MoveDown: + return current; + case MovePageUp: + return current; + case MovePageDown: + return current; + case MoveHome: + return model()->index(0, 0, QModelIndex()); + case MoveEnd: + return model()->index(rows(current) - 1, 0, QModelIndex()); + default: + return current; + } +} + +int LinearView::horizontalOffset() const +{ + return horizontalScrollBar()->value(); +} + +int LinearView::verticalOffset() const +{ + return verticalScrollBar()->value(); +} + +/*! + Returns a rectangle corresponding to the selection in viewport cooridinates. +*/ + +QRect LinearView::selectionViewportRect(const QItemSelection &selection) const +{ + int ranges = selection.count(); + + if (ranges == 0) + return QRect(); + + // Note that we use the top and bottom functions of the selection range + // since the data is stored in rows. + + int firstRow = selection.at(0).top(); + int lastRow = selection.at(0).top(); + + for (int i = 0; i < ranges; ++i) { + firstRow = qMin(firstRow, selection.at(i).top()); + lastRow = qMax(lastRow, selection.at(i).bottom()); + } + + QModelIndex firstItem = model()->index(qMin(firstRow, lastRow), 0, + QModelIndex()); + QModelIndex lastItem = model()->index(qMax(firstRow, lastRow), 0, + QModelIndex()); + + QRect firstRect = itemViewportRect(firstItem); + QRect lastRect = itemViewportRect(lastItem); + + return QRect(firstRect.left(), firstRect.top(), + lastRect.right() - firstRect.left(), firstRect.height()); +} + +void LinearView::paintEvent(QPaintEvent *event) +{ + QPainter painter(viewport()); + + QRect updateRect = event->rect(); + QBrush background(Qt::black); + QPen foreground(Qt::white); + + painter.fillRect(updateRect, background); + painter.setPen(foreground); + + QModelIndex firstItem = itemAt(updateRect.left(), updateRect.top()); + if (!firstItem.isValid()) + firstItem = model()->index(0, 0, QModelIndex()); + + QModelIndex lastItem = itemAt(updateRect.right(), updateRect.bottom()); + if (!lastItem.isValid()) + lastItem = model()->index(rows() - 1, 0, QModelIndex()); + + int x = updateRect.left(); + //int top = updateRect.top(); + //int bottom = updateRect.bottom(); + + int row = firstItem.row(); + QModelIndex index = model()->index(row, 0, QModelIndex()); + int value = model()->data(index, Qt::DisplayRole).toInt(); + int midPoint = viewport()->height()/2; + int y2 = midPoint - int(value * midPoint/255.0); + + while (row <= lastItem.row()) { + + QModelIndex index = model()->index(row, 0, QModelIndex()); + int value = model()->data(index, Qt::DisplayRole).toInt(); + + int y1 = y2; + y2 = midPoint - int(value * midPoint/255.0); + + painter.drawLine(x-1, y1, x, y2); + ++row; ++x; + } +} + +void LinearView::resizeEvent(QResizeEvent * /* event */) +{ + updateGeometries(); +} + +void LinearView::updateGeometries() +{ + if (viewport()->width() < rows()) { + horizontalScrollBar()->setPageStep(viewport()->width()); + horizontalScrollBar()->setRange(0, rows() - viewport()->width() - 1); + } +} + +QSize LinearView::sizeHint() const +{ + return QSize(rows(), 200); +} + +int LinearView::rows(const QModelIndex &index) const +{ + return model()->rowCount(model()->parent(index)); +} + +bool LinearView::isIndexHidden(const QModelIndex &index) const +{ + return false; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/view.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/view.h new file mode 100644 index 0000000..f6a5e71 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/view.h @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef VIEW_H +#define VIEW_H + +#include +#include +#include +#include +#include +#include +#include + +class LinearView : public QAbstractItemView +{ + Q_OBJECT +public: + LinearView(QWidget *parent = 0); + + QRect itemViewportRect(const QModelIndex &index) const; + void ensureVisible(const QModelIndex &index); + QModelIndex itemAt(int x, int y) const; + +protected slots: + /*void dataChanged(const QModelIndex &topLeft, const QModelIndex + &bottomRight);*/ + void rowsInserted(const QModelIndex &parent, int start, int end); + void rowsRemoved(const QModelIndex &parent, int start, int end); + /*void selectionChanged(const QItemSelection &deselected, const QItemSelection &selected); + void verticalScrollbarAction(int action); + void horizontalScrollbarAction(int action);*/ + +protected: + void setSelection(const QRect&, QItemSelectionModel::SelectionFlags command); + QRect selectionViewportRect(const QItemSelection &selection) const; + QRect itemRect(const QModelIndex &item) const; + bool isIndexHidden(const QModelIndex &index) const; + int horizontalOffset() const; + int verticalOffset() const; + QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, + Qt::KeyboardModifiers modifiers); + + void paintEvent(QPaintEvent *event); + void resizeEvent(QResizeEvent *event); + QSize sizeHint() const; + +private: + int rows(const QModelIndex &index = QModelIndex()) const; + void updateGeometries(); +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/window.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/window.cpp new file mode 100644 index 0000000..fcd61d2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/window.cpp @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include "window.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) +{ + setWindowTitle("Model/View example"); + + setupModelView(); + + QAction *openAction = new QAction(tr("&Open"), this); + QAction *quitAction = new QAction(tr("E&xit"), this); + QMenu *fileMenu = new QMenu(tr("&File"), this); + fileMenu->addAction(openAction); + fileMenu->addAction(quitAction); + menuBar()->addMenu(fileMenu); + + connect(openAction, SIGNAL(triggered()), this, SLOT(selectOpenFile())); + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + + setCentralWidget(view); +} + +void MainWindow::setupModelView() +{ + model = new LinearModel(this); + view = new LinearView(this); + view->setModel(model); +} + +void MainWindow::selectOpenFile() +{ + QString fileName = QFileDialog::getOpenFileName(this, + tr("Select a file to open"), "", tr("Sound files (*.wav)")); + + if (!fileName.isEmpty()) + openFile(fileName); +} + +void MainWindow::openFile(const QString &fileName) +{ + QFile file(fileName); + int length = file.size(); + + if (file.open(QFile::ReadOnly)) { + model->removeRows(0, model->rowCount()); + + int rows = (length - 0x2c)/2; + model->insertRows(0, rows); + + // Perform some dodgy tricks to extract the data from the file. + QDataStream stream(&file); + stream.setByteOrder(QDataStream::LittleEndian); + + Q_INT16 left; + Q_INT16 right; + + for (int row = 0; row < rows; ++row) { + QModelIndex index = model->index(row); + + stream >> left >> right; + model->setData(index, int(left / 256)); + } + } +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/window.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/window.h new file mode 100644 index 0000000..ac4988f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/modelview-subclasses/window.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include +#include + +#include "model.h" +#include "view.h" + +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + MainWindow::MainWindow(QWidget *parent = 0); + +public slots: + void selectOpenFile(); + +private: + void setupModelView(); + void openFile(const QString &fileName); + + LinearModel *model; + LinearView *view; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/myscrollarea.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/myscrollarea.cpp new file mode 100644 index 0000000..2e6869c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/myscrollarea.cpp @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +from PySide2.QtCore import * +from PySide2.QtGui import * +import sys + +class MyScrollArea (QAbstractScrollArea): + widget = None + + def __init__(widget): + self.setWidget(widget); + + def setWidget(w): + self.widget = w; + self.widget.setParent(viewport()); + if not self.widget.testAttribute(Qt.WA_Resized): + self.widget.resize(widget.sizeHint()) + + self.verticalScrollBar().setValue(0) + self.verticalScrollBar().setValue(0) + + self.updateArea() + + + def updateWidgetPosition(): +//! [0] + hvalue = self.horizontalScrollBar().value() + vvalue = self.verticalScrollBar().value() + topLeft = self.viewport().rect().topLeft() + + self.widget.move(topLeft.x() - hvalue, topLeft.y() - vvalue) +//! [0] + + + def scrollContentsBy(dx, dy): + self.updateWidgetPosition() + + def updateArea(): +//! [1] + areaSize = viewport().size() + widgetSize = widget.size() + + self.verticalScrollBar().setPageStep(widgetSize.height()) + self.horizontalScrollBar().setPageStep(widgetSize.width()) + self.verticalScrollBar().setRange(0, widgetSize.height() - areaSize.height()) + self.horizontalScrollBar().setRange(0, widgetSize.width() - areaSize.width()) + self.updateWidgetPosition() +//! [1] + + def resizeEvent(QResizeEvent): + self.updateArea() + +app = QApplication(sys.argv) +pixmap = QPixmap("mypixmap.png") +label = QLabel() +label.setPixmap(pixmap) +area = MyScrollArea(label) +area.resize(300, 300) +area.show() + +area.setWidget(label) + +app.exec_(); + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/network/tcpwait.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/network/tcpwait.cpp new file mode 100644 index 0000000..fc7d278 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/network/tcpwait.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +from PySide2.QtGui import * +from PySide2.QtNetwork import QTcpSocket + +def main(): + app = QCoreApplication() + + socket = QTcpSocket() + socket.connectToHost("localhost", 1025) + +//! [0] + numRead = 0 + numReadTotal = 0 + + while(True): + buffer = socket.read(50) + # do whatever with array + numReadTotal += buffer.size() + if (buffer.size() == 0 && !socket.waitForReadyRead()): + break +//! [0] + return app.exec_() diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/ntfsp.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/ntfsp.cpp new file mode 100644 index 0000000..c50c3cd --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/ntfsp.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +//! [0] +extern Q_CORE_EXPORT int qt_ntfs_permission_lookup; +//! [0] + +//! [1] +qt_ntfs_permission_lookup += 1 // turn checking on +qt_ntfs_permission_lookup += 1 // turn it off again +//! [1] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/painterpath/painterpath.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/painterpath/painterpath.cpp new file mode 100644 index 0000000..ea589b6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/painterpath/painterpath.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + + + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + + QImage image(100, 100, QImage::Format_RGB32); + + QPainterPath path; + path.addRect(20, 20, 60, 60); + + path.moveTo(0, 0); + path.cubicTo(99, 0, 50, 50, 99, 99); + path.cubicTo(0, 99, 50, 50, 0, 0); + + QPainter painter(&image); + painter.fillRect(0, 0, 100, 100, Qt::white); + + painter.save(); + painter.translate(0.5, 0.5); + painter.setPen(QPen(QColor(79, 106, 25), 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); + painter.setBrush(QColor(122, 163, 39)); + painter.setRenderHint(QPainter::Antialiasing); + + painter.drawPath(path); + + painter.restore(); + painter.end(); + + QLabel lab; + lab.setPixmap(QPixmap::fromImage(image)); + lab.show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/anyHTMLElement.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/anyHTMLElement.xq new file mode 100644 index 0000000..9f5ee12 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/anyHTMLElement.xq @@ -0,0 +1 @@ +doc('data.xml')/*:body diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/anyXLinkAttribute.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/anyXLinkAttribute.xq new file mode 100644 index 0000000..059bcc0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/anyXLinkAttribute.xq @@ -0,0 +1,2 @@ +declare namespace xlink = "http://www.w3.org/1999/xlink"; +doc('image.svg')//@xlink:* diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesIncluded.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesIncluded.xq new file mode 100644 index 0000000..3961c28 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesIncluded.xq @@ -0,0 +1 @@ +{sum((1, 2, 3))} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesIncludedResult.xml b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesIncludedResult.xml new file mode 100644 index 0000000..0004c71 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesIncludedResult.xml @@ -0,0 +1 @@ +6 diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesOmitted.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesOmitted.xq new file mode 100644 index 0000000..ffbadd0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesOmitted.xq @@ -0,0 +1 @@ +sum({(1, 2, 3)}) diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesOmittedResult.xml b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesOmittedResult.xml new file mode 100644 index 0000000..744fb8f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/bracesOmittedResult.xml @@ -0,0 +1,2 @@ + +sum(1 2 3) \ No newline at end of file diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/computedTreeFragment.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/computedTreeFragment.xq new file mode 100644 index 0000000..c5b93ad --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/computedTreeFragment.xq @@ -0,0 +1,14 @@ +declare default element namespace "http://example.com/Namespace"; +declare variable $documentElementName := "doc"; + +element {$documentElementName} +{ + attribute xml:base {"http://example.com/"}, + element anotherElement + { + comment {" a comment "}, + processing-instruction target {"data"}, + element anotherElement {()}, + text {"some text"} + } +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/copyAttribute.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/copyAttribute.xq new file mode 100644 index 0000000..40e4494 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/copyAttribute.xq @@ -0,0 +1,9 @@ + + +

+ { + doc('feed.rss')/rss/@version + } +

+ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/copyID.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/copyID.xq new file mode 100644 index 0000000..2409caf --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/copyID.xq @@ -0,0 +1,3 @@ +(: Copy the value of xml:id attribute from other.html. This is a comment by the way! :) + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/directTreeFragment.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/directTreeFragment.xq new file mode 100644 index 0000000..96bc963 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/directTreeFragment.xq @@ -0,0 +1,7 @@ + + + + + + some text + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/doc.txt b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/doc.txt new file mode 100644 index 0000000..d30b057 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/doc.txt @@ -0,0 +1,35 @@ + +

+ 1 + 2 +

+

+ 3 + 4 +

+

+ 5 + 6 +

+

+ 7 + 8 +

+

+ 9 + a +

+

+ b + c +

+

+ d + e +

+

+ f + 0 +

+
+ diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/docPlainHTML.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/docPlainHTML.xq new file mode 100644 index 0000000..622bec8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/docPlainHTML.xq @@ -0,0 +1 @@ +doc("myPlainHTML.html")/body diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/docPlainHTML2.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/docPlainHTML2.xq new file mode 100644 index 0000000..5e7fbae --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/docPlainHTML2.xq @@ -0,0 +1 @@ +doc("myPlainHTML.html")/html/body diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/embedDataInXHTML.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/embedDataInXHTML.xq new file mode 100644 index 0000000..b513922 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/embedDataInXHTML.xq @@ -0,0 +1,10 @@ +declare default element namespace "http://www.w3.org/1999/xhtml"; + + + { + for $i in doc("testResult.xml")/tests/test[@status = "failure"] + order by $i/@name + return

{$i/@name}

+ } + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/embedDataInXHTML2.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/embedDataInXHTML2.xq new file mode 100644 index 0000000..754ddba --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/embedDataInXHTML2.xq @@ -0,0 +1,10 @@ +declare namespace x = "http://www.w3.org/1998/xhtml"; + + + { + for $i in doc("testResult.xml")/tests/test[@status = "failure"] + order by $i/@name + return {$i/@name} + } + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/emptyParagraphs.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/emptyParagraphs.xq new file mode 100644 index 0000000..6024d28 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/emptyParagraphs.xq @@ -0,0 +1 @@ +doc('index.html')//p[string-length(.) = 0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/escapeCurlyBraces.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/escapeCurlyBraces.xq new file mode 100644 index 0000000..669e7c1 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/escapeCurlyBraces.xq @@ -0,0 +1,4 @@ + + This is one left followed by one right curly brace: {{ }} + Here they are again, but with character references: { } + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/escapeStringLiterals.xml b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/escapeStringLiterals.xml new file mode 100644 index 0000000..425ccb0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/escapeStringLiterals.xml @@ -0,0 +1,2 @@ +

"I hate quotations" -- Ralph Waldo Emerson" + '"I hate quotations"" -- Ralph Waldo Emerson"', appeared above

\ No newline at end of file diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/escapeStringLiterals.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/escapeStringLiterals.xq new file mode 100644 index 0000000..4a6054b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/escapeStringLiterals.xq @@ -0,0 +1,7 @@ +

+{ + """I hate quotations"" -- Ralph Waldo Emerson""", + " ", + '''"I hate quotations"" -- Ralph Waldo Emerson"'', appeared above' +} +

diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/expressionInsideAttribute.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/expressionInsideAttribute.xq new file mode 100644 index 0000000..97f46b1 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/expressionInsideAttribute.xq @@ -0,0 +1,2 @@ +declare variable $additionalClass := "example"; +

diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/filterOnPath.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/filterOnPath.xq new file mode 100644 index 0000000..d23dfe8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/filterOnPath.xq @@ -0,0 +1,2 @@ +let $doc := doc('doc.txt') +return ($doc/doc/p/span)[1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/filterOnStep.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/filterOnStep.xq new file mode 100644 index 0000000..46b77fa --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/filterOnStep.xq @@ -0,0 +1,2 @@ +let $doc := doc('doc.txt') +return $doc/doc/p/span[1] \ No newline at end of file diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/firstParagraph.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/firstParagraph.xq new file mode 100644 index 0000000..db5e2c7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/firstParagraph.xq @@ -0,0 +1 @@ +doc("index.html")/html/body/p[@xml:id = "thatSpecialOne"] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/fnStringOnAttribute.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/fnStringOnAttribute.xq new file mode 100644 index 0000000..b26e9f2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/fnStringOnAttribute.xq @@ -0,0 +1,9 @@ + + +

+ { + string(doc('feed.rss')/rss/@version) + } +

+ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/forClause.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/forClause.xq new file mode 100644 index 0000000..a412dca --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/forClause.xq @@ -0,0 +1,3 @@ +for $i in(reverse(1 to 10)), + $d in xs:integer(doc("numbers.xml")/numbers/number) +return ($i + $d) diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/forClause2.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/forClause2.xq new file mode 100644 index 0000000..4fa505d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/forClause2.xq @@ -0,0 +1,3 @@ +for $i in(reverse(1 to 10)), + $d in xs:integer(doc("numbers.xml")/numbers/number) +return $i + $d diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/forClauseOnFeed.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/forClauseOnFeed.xq new file mode 100644 index 0000000..9ec3339 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/forClauseOnFeed.xq @@ -0,0 +1,6 @@ +for $item in doc('feed.rss')//item +return

+ { + $item/description/node() + } +

diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/indented.xml b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/indented.xml new file mode 100644 index 0000000..a312c63 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/indented.xml @@ -0,0 +1,5 @@ + + + +

Some Text

+
diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introAcneRemover.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introAcneRemover.xq new file mode 100644 index 0000000..4e6ee80 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introAcneRemover.xq @@ -0,0 +1,8 @@ + + The following skin care products have shipped, ordered by shipping date(oldest first): + { + for $i in doc("myOrders.xml")/orders/order[@product = "Acme Skin Care"] + order by xs:date($i/@shippingDate) descending + return $i + } + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introExample2.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introExample2.xq new file mode 100644 index 0000000..411cc17 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introExample2.xq @@ -0,0 +1,5 @@ + +{ + doc($file)/bib/book[publisher = $publisher and @year > $year]/{title} +} + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introFileHierarchy.xml b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introFileHierarchy.xml new file mode 100644 index 0000000..cfa6151 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introFileHierarchy.xml @@ -0,0 +1,14 @@ + + + + + + + + + ... + + + ... + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introNavigateFS.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introNavigateFS.xq new file mode 100644 index 0000000..1f5a3a7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introNavigateFS.xq @@ -0,0 +1,12 @@ +declare variable $myRoot := ; (: This line is a dummy and shouldn't appear in the documentation. :) + + + { + $myRoot//file[@mimetype = 'text/xml' or @mimetype = 'application/xml'] + / + (if(doc-available(@uri)) + then () + else

Failed to parse file {@uri}.

) + } + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introductionExample.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introductionExample.xq new file mode 100644 index 0000000..1a309dd --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/introductionExample.xq @@ -0,0 +1,3 @@ + +{doc("library.xml")/bib/book[publisher="Addison-Wesley" and @year>1991]/{title}} + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/invalidLetOrderBy.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/invalidLetOrderBy.xq new file mode 100644 index 0000000..d65f240 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/invalidLetOrderBy.xq @@ -0,0 +1,3 @@ +let $i := (2, 3, 1) +order by $i[1] +return $i diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/items.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/items.xq new file mode 100644 index 0000000..0b46ec1 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/items.xq @@ -0,0 +1,5 @@ +, +xs:base64Binary("FFFF"), +current-date(), +3e3, (: A floating point value :) +attribute {"name"} {()} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/letOrderBy.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/letOrderBy.xq new file mode 100644 index 0000000..f4106d2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/letOrderBy.xq @@ -0,0 +1,4 @@ +for $a in (8, -4, 2) +let $b := ($a * -1, $a) +order by $a +return $b diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/literalsAndOperators.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/literalsAndOperators.xq new file mode 100644 index 0000000..ec4af33 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/literalsAndOperators.xq @@ -0,0 +1,2 @@ +declare variable $date := fn:current-date(); (: This line should not be part of the example. It exists in order to make the query valid. :) +fn:current-date() - $date > xs:dayTimeDuration("P365D") diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/mobeyDick.xml b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/mobeyDick.xml new file mode 100644 index 0000000..32d0b6c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/mobeyDick.xml @@ -0,0 +1,4 @@ + + Mobey Dick ... + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nextLastParagraph.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nextLastParagraph.xq new file mode 100644 index 0000000..9424f79 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nextLastParagraph.xq @@ -0,0 +1 @@ +doc('index.html')//p[last() - 1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nodeConstructorsAreExpressions.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nodeConstructorsAreExpressions.xq new file mode 100644 index 0000000..ce36e84 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nodeConstructorsAreExpressions.xq @@ -0,0 +1,4 @@ +let $docURI := 'maybeNotWellformed.xml' +return if(doc-available($docURI)) + then doc($docURI)//p/{./node()} + else Failed to load {$docURI} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nodeConstructorsInPaths.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nodeConstructorsInPaths.xq new file mode 100644 index 0000000..beb294f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nodeConstructorsInPaths.xq @@ -0,0 +1 @@ +doc('feed.rss')//item/

{description/node()}

diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nodeTestChildElement.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nodeTestChildElement.xq new file mode 100644 index 0000000..7aa7b34 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/nodeTestChildElement.xq @@ -0,0 +1 @@ +doc('index.html')/descendant-or-self::element(p)/child::element(span) diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/notIndented.xml b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/notIndented.xml new file mode 100644 index 0000000..b3321f2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/notIndented.xml @@ -0,0 +1 @@ +

Some Text

diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/oneElementConstructor.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/oneElementConstructor.xq new file mode 100644 index 0000000..b7eb615 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/oneElementConstructor.xq @@ -0,0 +1 @@ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/paragraphsExceptTheFiveFirst.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/paragraphsExceptTheFiveFirst.xq new file mode 100644 index 0000000..16438d1 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/paragraphsExceptTheFiveFirst.xq @@ -0,0 +1 @@ +doc('index.html')//p[position() > 5] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/paragraphsWithTables.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/paragraphsWithTables.xq new file mode 100644 index 0000000..dbb9fcf --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/paragraphsWithTables.xq @@ -0,0 +1 @@ +doc('index.html')/html/body/p[table] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/pathAB.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/pathAB.xq new file mode 100644 index 0000000..26fd1e5 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/pathAB.xq @@ -0,0 +1 @@ +doc('index.html')//p/span diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/pathsAllParagraphs.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/pathsAllParagraphs.xq new file mode 100644 index 0000000..ba47900 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/pathsAllParagraphs.xq @@ -0,0 +1 @@ +doc('index.html')//p diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/simpleHTML.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/simpleHTML.xq new file mode 100644 index 0000000..93ac31e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/simpleHTML.xq @@ -0,0 +1 @@ +doc("index.html")/html/body/p[@class="example"] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/simpleXHTML.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/simpleXHTML.xq new file mode 100644 index 0000000..fda5371 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/simpleXHTML.xq @@ -0,0 +1,2 @@ +declare namespace x = "http://www.w3.org/1999/xhtml/"; +doc("index.html")/x:html/x:body/x:p[@class="example"] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/svgDocumentElement.xml b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/svgDocumentElement.xml new file mode 100644 index 0000000..0c7be4e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/svgDocumentElement.xml @@ -0,0 +1 @@ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/tablesInParagraphs.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/tablesInParagraphs.xq new file mode 100644 index 0000000..fc92cf0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/tablesInParagraphs.xq @@ -0,0 +1 @@ +doc('index.html')/html/body/p/table diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/twoSVGElements.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/twoSVGElements.xq new file mode 100644 index 0000000..ab4fe35 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/twoSVGElements.xq @@ -0,0 +1,5 @@ +declare namespace s = "http://www.w3.org/2000/svg"; +declare default element namespace "http://www.w3.org/2000/svg"; +let $doc := doc('image.svg') +return ($doc/svg, + $doc/s:svg) diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/xmlStylesheet.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/xmlStylesheet.xq new file mode 100644 index 0000000..9e02208 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/xmlStylesheet.xq @@ -0,0 +1 @@ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/xsBooleanTrue.xq b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/xsBooleanTrue.xq new file mode 100644 index 0000000..897a99e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/xsBooleanTrue.xq @@ -0,0 +1 @@ +xs:boolean("true") diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/xsvgDocumentElement.xml b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/xsvgDocumentElement.xml new file mode 100644 index 0000000..fb6a236 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/patternist/xsvgDocumentElement.xml @@ -0,0 +1 @@ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/main.cpp new file mode 100644 index 0000000..3e610dc --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/mainwindow.cpp new file mode 100644 index 0000000..0d89416 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/mainwindow.cpp @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" +#include "model.h" + +/*! + The main window constructor creates and populates a model with values + from a string list then displays the contents of the model using a + QListView widget. +*/ + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + QMenu *itemsMenu = new QMenu(tr("&Items")); + + insertAction = itemsMenu->addAction(tr("&Insert Item")); + removeAction = itemsMenu->addAction(tr("&Remove Item")); + + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(itemsMenu); + + QStringList numbers; + numbers << tr("One") << tr("Two") << tr("Three") << tr("Four") << tr("Five") + << tr("Six") << tr("Seven") << tr("Eight") << tr("Nine") << tr("Ten"); + + model = new StringListModel(numbers); + QListView *view = new QListView(this); + view->setModel(model); + + selectionModel = view->selectionModel(); + + connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); + connect(insertAction, SIGNAL(triggered()), this, SLOT(insertItem())); + connect(removeAction, SIGNAL(triggered()), this, SLOT(removeItem())); + connect(selectionModel, + SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), + this, SLOT(updateMenus(const QModelIndex &))); + + setCentralWidget(view); + setWindowTitle("View onto a string list model"); +} + +void MainWindow::insertItem() +{ + if (!selectionModel->currentIndex().isValid()) + return; + + QString itemText = QInputDialog::getText(this, tr("Insert Item"), + tr("Input text for the new item:")); + + if (itemText.isNull()) + return; + + int row = selectionModel->currentIndex().row(); + + if (model->insertRows(row, 1)) + model->setData(model->index(row, 0), itemText, Qt::EditRole); +} + +void MainWindow::removeItem() +{ + if (!selectionModel->currentIndex().isValid()) + return; + + int row = selectionModel->currentIndex().row(); + + model->removeRows(row, 1); +} + +void MainWindow::updateMenus(const QModelIndex ¤tIndex) +{ + insertAction->setEnabled(currentIndex.isValid()); + removeAction->setEnabled(currentIndex.isValid()); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/mainwindow.h new file mode 100644 index 0000000..8f8c36f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/mainwindow.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include + +class QAbstractItemModel; +class QAction; +class QItemSelectionModel; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = 0); + +private slots: + void insertItem(); + void removeItem(); + void updateMenus(const QModelIndex ¤tIndex); + +private: + QAbstractItemModel *model; + QAction *insertAction; + QAction *removeAction; + QItemSelectionModel *selectionModel; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/model.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/model.h new file mode 100644 index 0000000..0dbd0b8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/persistentindexes/model.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODEL_H +#define MODEL_H + +#include +#include +#include + +class StringListModel : public QAbstractListModel +{ + Q_OBJECT +public: + StringListModel(const QStringList &strings, QObject *parent = 0) + : QAbstractListModel(parent), stringList(strings) {} + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::EditRole); + + bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()); + +private: + QStringList stringList; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/picture/picture.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/picture/picture.cpp new file mode 100644 index 0000000..6d4ef56 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/picture/picture.cpp @@ -0,0 +1,121 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] + picture = QPicture() + painter = QPainter() + painter.begin(picture) # paint in picture + painter.drawEllipse(10,20, 80,70) # draw an ellipse + painter.end() # painting done + picture.save("drawing.pic") # save picture +//! [0] + +//! [1] + picture = QPicture() + picture.load("drawing.pic") # load picture + painter = QPainter() + painter.begin(myImage) # paint in myImage + painter.drawPicture(0, 0, picture) # draw the picture at (0,0) + painter.end() # painting done +//! [1] + +//! [2] + list = QPicture.inputFormatList() + for string in list: + myProcessing(string) +//! [2] + +//! [3] + list = QPicture.outputFormatList() + for string in list: + myProcessing(string) +//! [3] + +//! [4] + iio = QPictureIO() + pixmap = QPixmap() + iio.setFileName("vegeburger.pic") + if iio.read(): # OK + picture = iio.picture() + painter = QPainter(pixmap) + painter.drawPicture(0, 0, picture) + +//! [4] + +//! [5] + iio = QPictureIO() + picture = QPicture() + painter = QPainter(picture) + painter.drawPixmap(0, 0, pixmap) + iio.setPicture(picture) + iio.setFileName("vegeburger.pic") + iio.setFormat("PIC") + if iio.write(): + return True # returned true if written successfully +//! [5] + +//! [6] +def readSVG(picture): + # read the picture using the picture.ioDevice() + +//! [6] + + +//! [7] +def writeSVG(picture): + # write the picture using the picture.ioDevice() + +//! [7] + + +//! [8] + # add the SVG picture handler + # ... +//! [8] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/plaintextlayout/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/plaintextlayout/main.cpp new file mode 100644 index 0000000..2149c6b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/plaintextlayout/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "window.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Window *window = new Window; + window->resize(337, 343); + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/plaintextlayout/window.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/plaintextlayout/window.cpp new file mode 100644 index 0000000..00db9a8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/plaintextlayout/window.cpp @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include "window.h" + +Window::Window(QWidget *parent) + : QWidget(parent) +{ + text = QString("Support for text rendering and layout in Qt 4 has been " + "redesigned around a system that allows textual content to " + "be represented in a more flexible way than was possible " + "with Qt 3. Qt 4 also provides a more convenient " + "programming interface for editing documents. These " + "improvements are made available through a reimplementation " + "of the existing text rendering engine, and the " + "introduction of several new classes. " + "See the relevant module overview for a detailed discussion " + "of this framework. The following sections provide a brief " + "overview of the main concepts behind Scribe."); + + setWindowTitle(tr("Plain Text Layout")); +} + +void Window::paintEvent(QPaintEvent *event) +{ +//! [0] + QTextLayout textLayout(text, font); + qreal margin = 10; + qreal radius = qMin(width()/2.0, height()/2.0) - margin; + QFontMetrics fm(font); + + qreal lineHeight = fm.height(); + qreal y = 0; + + textLayout.beginLayout(); + + while (1) { + // create a new line + QTextLine line = textLayout.createLine(); + if (!line.isValid()) + break; + + qreal x1 = qMax(0.0, pow(pow(radius,2)-pow(radius-y,2), 0.5)); + qreal x2 = qMax(0.0, pow(pow(radius,2)-pow(radius-(y+lineHeight),2), 0.5)); + qreal x = qMax(x1, x2) + margin; + qreal lineWidth = (width() - margin) - x; + + line.setLineWidth(lineWidth); + line.setPosition(QPointF(x, margin+y)); + y += line.height(); + } + + textLayout.endLayout(); + + QPainter painter; + painter.begin(this); + painter.setRenderHint(QPainter::Antialiasing); + painter.fillRect(rect(), Qt::white); + painter.setBrush(QBrush(Qt::black)); + painter.setPen(QPen(Qt::black)); + textLayout.draw(&painter, QPoint(0,0)); + + painter.setBrush(QBrush(QColor("#a6ce39"))); + painter.setPen(QPen(Qt::black)); + painter.drawEllipse(QRectF(-radius, margin, 2*radius, 2*radius)); + painter.end(); +//! [0] +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/plaintextlayout/window.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/plaintextlayout/window.h new file mode 100644 index 0000000..1d14ed0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/plaintextlayout/window.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class Window : public QWidget +{ + Q_OBJECT + +public: + Window(QWidget *parent = 0); + +protected: + void paintEvent(QPaintEvent *event); + +private: + QFont font; + QString text; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/pointer/pointer.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/pointer/pointer.cpp new file mode 100644 index 0000000..e75addb --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/pointer/pointer.cpp @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + +//! [0] + QPointer label = new QLabel; + label->setText("&Status:"); +//! [0] + +//! [1] + if (label) +//! [1] //! [2] + label->show(); +//! [2] + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/polygon/polygon.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/polygon/polygon.cpp new file mode 100644 index 0000000..03c9f40 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/polygon/polygon.cpp @@ -0,0 +1,96 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] + polygon = QPolygon() + polygon << QPoint(10, 20) << QPoint(20, 30) +//! [0] + +//! [1] + polygon = QPolygonF() + polygon << QPointF(10.4, 20.5) << QPointF(20.2, 30.2) +//! [1] + +//! [2] + points = [ 10, 20, 30, 40 ] + polygon = QPolygon() + polygon.setPoints(2, points) +//! [2] + +//! [3] + polygon = QPolygon() + polygon.setPoints(2, 10, 20, 30, 40) +//! [3] + +//! [4] + polygon = QPolygon(1) + polygon[0] = QPoint(4, 5) + polygon.putPoints(1, 2, 6,7, 8,9) +//! [4] + +//! [5] + polygon = QPolygon(3) + polygon.putPoints(0, 3, 4,5, 0,0, 8,9) + polygon.putPoints(1, 1, 6,7) +//! [5] + +//! [6] + polygon1 = QPolygon() + polygon1.putPoints(0, 3, 1,2, 0,0, 5,6) + # polygon1 is now the three-point polygon(1,2, 0,0, 5,6) + + polygon2 = QPolygon() + polygon2.putPoints(0, 3, 4,4, 5,5, 6,6) + # polygon2 is now (4,4, 5,5, 6,6) + + polygon1.putPoints(2, 3, polygon2) + # polygon1 is now the five-point polygon(1,2, 0,0, 4,4, 5,5, 6,6) +//! [6] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/porting4-dropevents/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/porting4-dropevents/main.cpp new file mode 100644 index 0000000..66f5e55 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/porting4-dropevents/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "window.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + MyWidget window; + window.show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/porting4-dropevents/window.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/porting4-dropevents/window.cpp new file mode 100644 index 0000000..64e8f42 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/porting4-dropevents/window.cpp @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "window.h" + +MyWidget::MyWidget(QWidget *parent) + : QWidget(parent) +{ + QLabel *textLabel = new QLabel(tr("Data:"), this); + dataLabel = new QLabel(this); + dataLabel->setFixedSize(200, 200); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->addWidget(textLabel); + layout->addWidget(dataLabel); + + setAcceptDrops(true); + setWindowTitle(tr("Drop Events")); +} + +//! [0] +void MyWidget::dragEnterEvent(QDragEnterEvent *event) +{ + if (event->mimeData()->hasText() || event->mimeData()->hasImage()) + event->acceptProposedAction(); +} +//! [0] + +//! [1] +void MyWidget::dropEvent(QDropEvent *event) +{ + if (event->mimeData()->hasText()) + dataLabel->setText(event->mimeData()->text()); + else if (event->mimeData()->hasImage()) { + QVariant imageData = event->mimeData()->imageData(); + dataLabel->setPixmap(qvariant_cast(imageData)); + } + event->acceptProposedAction(); +} +//! [1] + +//! [2] +void MyWidget::mousePressEvent(QMouseEvent *event) +{ +//! [2] + QString text = dataLabel->text(); + QPixmap iconPixmap(32, 32); + iconPixmap.fill(qRgba(255, 0, 0, 127)); + QImage image(100, 100, QImage::Format_RGB32); + image.fill(qRgb(0, 0, 255)); + +//! [3] + if (event->button() == Qt::LeftButton) { + + QDrag *drag = new QDrag(this); + QMimeData *mimeData = new QMimeData; + + mimeData->setText(text); + mimeData->setImageData(image); + drag->setMimeData(mimeData); + drag->setPixmap(iconPixmap); + + Qt::DropAction dropAction = drag->exec(); +//! [3] + // ... +//! [4] + event->accept(); + } +//! [4] + else if (event->button() == Qt::MidButton) { + + QDrag *drag = new QDrag(this); + QMimeData *mimeData = new QMimeData; + + mimeData->setImageData(image); + drag->setMimeData(mimeData); + drag->setPixmap(iconPixmap); + + Qt::DropAction dropAction = drag->exec(); + // ... + event->accept(); + } +//! [5] +} +//! [5] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/porting4-dropevents/window.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/porting4-dropevents/window.h new file mode 100644 index 0000000..56bab84 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/porting4-dropevents/window.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include +#include + +class QComboBox; +class QFrame; +class QLabel; + +class MyWidget : public QWidget +{ + Q_OBJECT + +public: + MyWidget(QWidget *parent = 0); + +protected: + void dragEnterEvent(QDragEnterEvent *event); + void dropEvent(QDropEvent *event); + void mousePressEvent(QMouseEvent *event); + +private: + QComboBox *mimeTypeCombo; + QFrame *dropFrame; + QLabel *dataLabel; + QString oldText; + QStringList oldMimeTypes; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/errors.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/errors.cpp new file mode 100644 index 0000000..8c71d1e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/errors.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + printer = QPrinter() + printer.setOutputFormat(QPrinter.PdfFormat) + printer.setOutputFileName("/foobar/nonwritable.pdf") + QPainter painter + if painter.begin(printer): # failed to open file + print "failed to open file, is it writable?" + return 1 + + painter.drawText(10, 10, "Test") + if !printer.Page(): + print "failed in flushing page to disk, disk full?" + return 1 + + painter.drawText(10, 10, "Test 2") + painter.end() +//! [0] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/main.cpp new file mode 100644 index 0000000..6e0815f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/main.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "object.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Object object; + QTimer timer; + timer.setSingleShot(true); + timer.connect(&timer, SIGNAL(timeout()), &object, SLOT(print())); + timer.start(0); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/object.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/object.cpp new file mode 100644 index 0000000..1ad5200 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/object.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "object.h" + +Object::Object(QObject *parent) + : QObject(parent) +{ +} + +void Object::print() +{ + int numberOfPages = 10; + int lastPage = numberOfPages - 1; + +//! [0] + QPrinter printer(QPrinter::HighResolution); + printer.setOutputFileName("print.ps"); + QPainter painter; + painter.begin(&printer); + + for (int page = 0; page < numberOfPages; ++page) { + + // Use the painter to draw on the page. + + if (page != lastPage) + printer.newPage(); + } + + painter.end(); +//! [0] + qApp->quit(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/object.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/object.h new file mode 100644 index 0000000..a70dcd1 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/printing-qprinter/object.h @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +class Object : public QObject +{ + Q_OBJECT + +public: + Object(QObject *parent = 0); + +public slots: + void print(); +}; diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/process/process.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/process/process.cpp new file mode 100644 index 0000000..178aa80 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/process/process.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +bool zip() +{ +//! [0] + gzip = QProcess() + gzip.start("gzip", ["-c"]) + if not gzip.waitForStarted(): + return False + + gzip.write("Qt rocks!") + gzip.closeWriteChannel() + + if not gzip.waitForFinished(): + return False + + result = gzip.readAll() +//! [0] + + gzip.start("gzip", QStringList() << "-d" << "-c"); + gzip.write(result); + gzip.closeWriteChannel(); + + if (!gzip.waitForFinished()) + return false; + + qDebug("Result: %s", gzip.readAll().data()); + return true; +} + + +int main() +{ + zip(); + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qabstractsliderisnippet.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qabstractsliderisnippet.cpp new file mode 100644 index 0000000..db93f8e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qabstractsliderisnippet.cpp @@ -0,0 +1,519 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +QAbstractSliderPrivate::QAbstractSliderPrivate() + : minimum(0), maximum(99), singleStep(1), pageStep(10), + value(0), position(0), pressValue(-1), tracking(true), blocktracking(false), pressed(false), + invertedAppearance(false), invertedControls(false), + orientation(Qt::Horizontal), repeatAction(QAbstractSlider::SliderNoAction) +{ +} + +QAbstractSliderPrivate::~QAbstractSliderPrivate() +{ +} + +oid QAbstractSlider::setRange(int min, int max) +{ + Q_D(QAbstractSlider); + int oldMin = d->minimum; + int oldMax = d->maximum; + d->minimum = min; + d->maximum = qMax(min, max); + if (oldMin != d->minimum || oldMax != d->maximum) { + sliderChange(SliderRangeChange); + emit rangeChanged(d->minimum, d->maximum); + setValue(d->value); // re-bound + } +} + + +void QAbstractSliderPrivate::setSteps(int single, int page) +{ + Q_Q(QAbstractSlider); + singleStep = qAbs(single); + pageStep = qAbs(page); + q->sliderChange(QAbstractSlider::SliderStepsChange); +} + +AbstractSlider::QAbstractSlider(QWidget *parent) + :QWidget(*new QAbstractSliderPrivate, parent, 0) +{ +} + +QAbstractSlider::QAbstractSlider(QAbstractSliderPrivate &dd, QWidget *parent) + :QWidget(dd, parent, 0) +{ +} + +QAbstractSlider::~QAbstractSlider() +{ +} + +void QAbstractSlider::setOrientation(Qt::Orientation orientation) +{ + Q_D(QAbstractSlider); + if (d->orientation == orientation) + return; + + d->orientation = orientation; + if (!testAttribute(Qt::WA_WState_OwnSizePolicy)) { + QSizePolicy sp = sizePolicy(); + sp.transpose(); + setSizePolicy(sp); + setAttribute(Qt::WA_WState_OwnSizePolicy, false); + } + update(); + updateGeometry(); +} + +Qt::Orientation QAbstractSlider::orientation() const +{ + Q_D(const QAbstractSlider); + return d->orientation; +} + + +void QAbstractSlider::setMinimum(int min) +{ + Q_D(QAbstractSlider); + setRange(min, qMax(d->maximum, min)); +} + +int QAbstractSlider::minimum() const +{ + Q_D(const QAbstractSlider); + return d->minimum; +} + + +void QAbstractSlider::setMaximum(int max) +{ + Q_D(QAbstractSlider); + setRange(qMin(d->minimum, max), max); +} + +int QAbstractSlider::maximum() const +{ + Q_D(const QAbstractSlider); + return d->maximum; +} + + + +void QAbstractSlider::setSingleStep(int step) +{ + Q_D(QAbstractSlider); + d->setSteps(step, d->pageStep); +} + +int QAbstractSlider::singleStep() const +{ + Q_D(const QAbstractSlider); + return d->singleStep; +} + + +void QAbstractSlider::setPageStep(int step) +{ + Q_D(QAbstractSlider); + d->setSteps(d->singleStep, step); +} + +int QAbstractSlider::pageStep() const +{ + Q_D(const QAbstractSlider); + return d->pageStep; +} + +oid QAbstractSlider::setTracking(bool enable) +{ + Q_D(QAbstractSlider); + d->tracking = enable; +} + +bool QAbstractSlider::hasTracking() const +{ + Q_D(const QAbstractSlider); + return d->tracking; +} + + + +void QAbstractSlider::setSliderDown(bool down) +{ + Q_D(QAbstractSlider); + bool doEmit = d->pressed != down; + + d->pressed = down; + + if (doEmit) { + if (down) + emit sliderPressed(); + else + emit sliderReleased(); + } + + if (!down && d->position != d->value) + triggerAction(SliderMove); +} + +bool QAbstractSlider::isSliderDown() const +{ + Q_D(const QAbstractSlider); + return d->pressed; +} + + +void QAbstractSlider::setSliderPosition(int position) +{ + Q_D(QAbstractSlider); + position = d->bound(position); + if (position == d->position) + return; + d->position = position; + if (!d->tracking) + update(); + if (d->pressed) + emit sliderMoved(position); + if (d->tracking && !d->blocktracking) + triggerAction(SliderMove); +} + +int QAbstractSlider::sliderPosition() const +{ + Q_D(const QAbstractSlider); + return d->position; +} + + + +int QAbstractSlider::value() const +{ + Q_D(const QAbstractSlider); + return d->value; +} + +//! [0] +void QAbstractSlider::setValue(int value) +//! [0] +{ + Q_D(QAbstractSlider); + value = d->bound(value); + if (d->value == value && d->position == value) + return; + d->value = value; + if (d->position != value) { + d->position = value; + if (d->pressed) + emit sliderMoved((d->position = value)); + } +#ifndef QT_NO_ACCESSIBILITY +//! [1] + QAccessible::updateAccessibility(this, 0, QAccessible::ValueChanged); +//! [1] +#endif + sliderChange(SliderValueChange); + emit valueChanged(value); +//! [2] +} +//! [2] + +bool QAbstractSlider::invertedAppearance() const +{ + Q_D(const QAbstractSlider); + return d->invertedAppearance; +} + +void QAbstractSlider::setInvertedAppearance(bool invert) +{ + Q_D(QAbstractSlider); + d->invertedAppearance = invert; + update(); +} + + + +bool QAbstractSlider::invertedControls() const +{ + Q_D(const QAbstractSlider); + return d->invertedControls; +} + +void QAbstractSlider::setInvertedControls(bool invert) +{ + Q_D(QAbstractSlider); + d->invertedControls = invert; +} + +void QAbstractSlider::triggerAction(SliderAction action) +{ + Q_D(QAbstractSlider); + d->blocktracking = true; + switch (action) { + case SliderSingleStepAdd: + setSliderPosition(d->value + d->singleStep); + break; + case SliderSingleStepSub: + setSliderPosition(d->value - d->singleStep); + break; + case SliderPageStepAdd: + setSliderPosition(d->value + d->pageStep); + break; + case SliderPageStepSub: + setSliderPosition(d->value - d->pageStep); + break; + case SliderToMinimum: + setSliderPosition(d->minimum); + break; + case SliderToMaximum: + setSliderPosition(d->maximum); + break; + case SliderMove: + case SliderNoAction: + break; + }; + emit actionTriggered(action); + d->blocktracking = false; + setValue(d->position); +} + +void QAbstractSlider::setRepeatAction(SliderAction action, int thresholdTime, int repeatTime) +{ + Q_D(QAbstractSlider); + if ((d->repeatAction = action) == SliderNoAction) { + d->repeatActionTimer.stop(); + } else { + d->repeatActionTime = repeatTime; + d->repeatActionTimer.start(thresholdTime, this); + } +} + +QAbstractSlider::SliderAction QAbstractSlider::repeatAction() const +{ + Q_D(const QAbstractSlider); + return d->repeatAction; +} + +void QAbstractSlider::timerEvent(QTimerEvent *e) +{ + Q_D(QAbstractSlider); + if (e->timerId() == d->repeatActionTimer.timerId()) { + if (d->repeatActionTime) { // was threshold time, use repeat time next time + d->repeatActionTimer.start(d->repeatActionTime, this); + d->repeatActionTime = 0; + } + if (d->repeatAction == SliderPageStepAdd) + d->setAdjustedSliderPosition(d->value + d->pageStep); + else if (d->repeatAction == SliderPageStepSub) + d->setAdjustedSliderPosition(d->value - d->pageStep); + else + triggerAction(d->repeatAction); + } +} + +oid QAbstractSlider::sliderChange(SliderChange) +{ + update(); +} + + +#ifndef QT_NO_WHEELEVENT +void QAbstractSlider::wheelEvent(QWheelEvent * e) +{ + Q_D(QAbstractSlider); + e->ignore(); + if (e->orientation() != d->orientation && !rect().contains(e->pos())) + return; + + static qreal offset = 0; + static QAbstractSlider *offset_owner = 0; + if (offset_owner != this){ + offset_owner = this; + offset = 0; + } + + int step = qMin(QApplication::wheelScrollLines() * d->singleStep, d->pageStep); + if ((e->modifiers() & Qt::ControlModifier) || (e->modifiers() & Qt::ShiftModifier)) + step = d->pageStep; + offset += e->delta() * step / 120; + if (d->invertedControls) + offset = -offset; + + if (qAbs(offset) < 1) + return; + + int prevValue = d->value; + d->position = d->value + int(offset); // value will be updated by triggerAction() + triggerAction(SliderMove); + if (prevValue == d->value) { + offset = 0; + } else { + offset -= int(offset); + e->accept(); + } +} +#endif +void QAbstractSlider::keyPressEvent(QKeyEvent *ev) +{ + Q_D(QAbstractSlider); + SliderAction action = SliderNoAction; + switch (ev->key()) { +#ifdef QT_KEYPAD_NAVIGATION + case Qt::Key_Select: + if (QApplication::keypadNavigationEnabled()) + setEditFocus(!hasEditFocus()); + else + ev->ignore(); + break; + case Qt::Key_Back: + if (QApplication::keypadNavigationEnabled() && hasEditFocus()) { + setValue(d->origValue); + setEditFocus(false); + } else + ev->ignore(); + break; +#endif + + // It seems we need to use invertedAppearance for Left and right, otherwise, things look weird. + case Qt::Key_Left: +#ifdef QT_KEYPAD_NAVIGATION + if (QApplication::keypadNavigationEnabled() && !hasEditFocus()) { + ev->ignore(); + return; + } + if (QApplication::keypadNavigationEnabled() && d->orientation == Qt::Vertical) + action = d->invertedControls ? SliderSingleStepSub : SliderSingleStepAdd; + else +#endif + action = !d->invertedAppearance ? SliderSingleStepSub : SliderSingleStepAdd; + break; + case Qt::Key_Right: +#ifdef QT_KEYPAD_NAVIGATION + if (QApplication::keypadNavigationEnabled() && !hasEditFocus()) { + ev->ignore(); + return; + } + if (QApplication::keypadNavigationEnabled() && d->orientation == Qt::Vertical) + action = d->invertedControls ? SliderSingleStepAdd : SliderSingleStepSub; + else +#endif + action = !d->invertedAppearance ? SliderSingleStepAdd : SliderSingleStepSub; + break; + case Qt::Key_Up: +#ifdef QT_KEYPAD_NAVIGATION + if (QApplication::keypadNavigationEnabled()) { + ev->ignore(); + break; + } +#endif + action = d->invertedControls ? SliderSingleStepSub : SliderSingleStepAdd; + break; + case Qt::Key_Down: +#ifdef QT_KEYPAD_NAVIGATION + if (QApplication::keypadNavigationEnabled()) { + ev->ignore(); + break; + } +#endif + action = d->invertedControls ? SliderSingleStepAdd : SliderSingleStepSub; + break; + case Qt::Key_PageUp: + action = d->invertedControls ? SliderPageStepSub : SliderPageStepAdd; + break; + case Qt::Key_PageDown: + action = d->invertedControls ? SliderPageStepAdd : SliderPageStepSub; + break; + case Qt::Key_Home: + action = SliderToMinimum; + break; + case Qt::Key_End: + action = SliderToMaximum; + break; + default: + ev->ignore(); + break; + } + if (action) + triggerAction(action); +} + +void QAbstractSlider::changeEvent(QEvent *ev) +{ + Q_D(QAbstractSlider); + switch (ev->type()) { + case QEvent::EnabledChange: + if (!isEnabled()) { + d->repeatActionTimer.stop(); + setSliderDown(false); + } + // fall through... + default: + QWidget::changeEvent(ev); + } +} + +bool QAbstractSlider::event(QEvent *e) +{ +#ifdef QT_KEYPAD_NAVIGATION + Q_D(QAbstractSlider); + switch (e->type()) { + case QEvent::FocusIn: + d->origValue = d->value; + break; + default: + break; + } +#endif + + return QWidget::event(e); +} + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qcalendarwidget/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qcalendarwidget/main.cpp new file mode 100644 index 0000000..479779d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qcalendarwidget/main.cpp @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + + QCalendarWidget calendar; + calendar.setSelectedDate(calendar.selectedDate().addDays(3)); + calendar.setGridVisible(true); + calendar.show(); + + QCalendarWidget calendarMin; + calendarMin.setMinimumDate(calendarMin.selectedDate().addDays(-7)); + calendarMin.setGridVisible(true); + calendarMin.show(); + + QCalendarWidget calendarMax; + calendarMax.setMaximumDate(calendarMax.selectedDate().addDays(7)); + calendarMax.setGridVisible(true); + calendarMax.show(); + + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qcolumnview/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qcolumnview/main.cpp new file mode 100644 index 0000000..b14e308 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qcolumnview/main.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QStandardItemModel model; + + QStandardItem *name = new QStandardItem("Name"); + QStandardItem *firstName = new QStandardItem("First Name"); + QStandardItem *lastName = new QStandardItem("Last Name"); + + name->appendRow(firstName); + name->appendRow(lastName); + model.appendRow(name); + + QStandardItem *john = new QStandardItem("John"); + QStandardItem *smith = new QStandardItem("Smith"); + + firstName->appendRow(john); + lastName->appendRow(smith); + + QStandardItem *address = new QStandardItem("Address"); + QStandardItem *street = new QStandardItem("Street"); + QStandardItem *city = new QStandardItem("City"); + QStandardItem *state = new QStandardItem("State"); + QStandardItem *country = new QStandardItem("Country"); + + address->appendRow(street); + address->appendRow(city); + address->appendRow(state); + address->appendRow(country); + model.appendRow(address); + + QColumnView columnView; + columnView.setModel(&model); + columnView.show(); + + return app.exec(); +} \ No newline at end of file diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qdebug/qdebugsnippet.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qdebug/qdebugsnippet.cpp new file mode 100644 index 0000000..ff482e4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qdebug/qdebugsnippet.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +class Coordinate : public QObject +{ +public: + int myX, myY; + + int x() const { return myX; }; + int y() const { return myY; }; +}; + +//! [0] +QDebug operator<<(QDebug dbg, const Coordinate &c) +{ + dbg.nospace() << "(" << c.x() << ", " << c.y() << ")"; + + return dbg.space(); +} +//! [0] + +int main(int argv, char **args) +{ + Coordinate coordinate; + coordinate.myX = 10; + coordinate.myY = 44; + +//! [1] + qDebug() << "Date:" << QDate::currentDate(); + qDebug() << "Types:" << QString("String") << QChar('x') << QRect(0, 10, 50, 40); + qDebug() << "Custom coordinate type:" << coordinate; +//! [1] +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qdir-filepaths/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qdir-filepaths/main.cpp new file mode 100644 index 0000000..ca93213 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qdir-filepaths/main.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +int main(int argc, char *argv[]) +{ + QDir directory("Documents/Letters"); + QString path = directory.filePath("contents.txt"); + QString absolutePath = directory.absoluteFilePath("contents.txt"); + + std::cout << qPrintable(directory.dirName()) << std::endl; + std::cout << qPrintable(path) << std::endl; + std::cout << qPrintable(absolutePath) << std::endl; + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qdir-listfiles/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qdir-listfiles/main.cpp new file mode 100644 index 0000000..9bd6399 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qdir-listfiles/main.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + +from PySide2.QtCore import QDir, QCoreApplication +import sys + +app = QCoreApplication(sys.argv) +directory = QDir() +directory.setFilter(QDir.Files | QDir.Hidden | QDir.NoSymLinks) +directory.setSorting(QDir.Size | QDir.Reversed) + +for entry in directory.entryInfoList(): + print "%s %s" % (entry.size(), entry.fileName()) + +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qdir-namefilters/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qdir-namefilters/main.cpp new file mode 100644 index 0000000..ab22163 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qdir-namefilters/main.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +from PySide2.QtCore import * + +def main(): + dir_ = QDir() + dir_.setFilter(QDir.Files | QDir.Hidden | QDir.NoSymLinks) + dir_.setSorting(QDir.Size | QDir.Reversed) + +//! [0] + filters = ["*.cpp", "*.cxx", "*.cc"] + dir_.setNameFilters(filters) +//! [0] +// + lst = d.entryInfoList() + + print " Bytes Filename" + for fileInfo in lst: + print '%d %s' % (fileInfo.size(), fileInfo.fileName()) + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qelapsedtimer/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qelapsedtimer/main.cpp new file mode 100644 index 0000000..0e81fca --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qelapsedtimer/main.cpp @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include + +void slowOperation1() +{ + static char buf[256]; + for (int i = 0; i < (1<<20); ++i) + buf[i % sizeof buf] = i; +} + +void slowOperation2(int) { slowOperation1(); } + +void startExample() +{ +//![0] + timer = QElapsedTimer() + timer.start() + + slowOperation1() + + sys.stderr.write("The slow operation took" + timer.elapsed() + "milliseconds") +//![0] +} + +//![1] +def executeSlowOperations(timeout): + timer = QElapsedTimer() + timer.start() + slowOperation1() + + remainingTime = timeout - timer.elapsed() + if remainingTime > 0: + slowOperation2(remainingTime) +//![1] + +//![2] +def executeOperationsForTime(ms): + timer = QElapsedTimer() + timer.start() + + while not timer.hasExpired(ms): + slowOperation1() +//![2] + +int restartExample() +{ +//![3] + timer = QElapsedTimer() + + count = 1 + timer.start() + + while True: + count *= 2 + slowOperation2(count) + if timer.restart() < 250: + break + + return count +//![3] +} + +int main(int argc, char **argv) +{ + QCoreApplication app(argc, argv); + + startExample(); + restartExample(); + executeSlowOperations(5); + executeOperationsForTime(5); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qfontdatabase/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qfontdatabase/main.cpp new file mode 100644 index 0000000..bc199b2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qfontdatabase/main.cpp @@ -0,0 +1,74 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] + database = QFontDatabase() + fontTree = QTreeWidget() + fontTree.setColumnCount(2) + fontTree.setHeaderLabels(QStringList() << "Font" << "Smooth Sizes") + + for family in database.families(): + familyItem = QTreeWidgetItem(fontTree) + familyItem.setText(0, family) + + for style in database.styles(family): + styleItem = QTreeWidgetItem(familyItem) + styleItem.setText(0, style) + + sizes = 0 + for points in database.smoothSizes(family, style): + sizes += QString.number(points) + " " + + styleItem.setText(1, sizes.trimmed()) + +//! [0] //! [1] + +//! [1] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qgl-namespace/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qgl-namespace/main.cpp new file mode 100644 index 0000000..691cfc8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qgl-namespace/main.cpp @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlabel/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlabel/main.cpp new file mode 100644 index 0000000..b40aade --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlabel/main.cpp @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +class Updater : public QObject +{ + Q_OBJECT + +public: + Updater(QWidget *widget); + +public slots: + void adjustSize(); + +private: + QWidget *widget; +}; + +Updater::Updater(QWidget *widget) + : widget(widget) +{ +} + +void Updater::adjustSize() +{ + widget->adjustSize(); +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QLabel *label = new QLabel("My label"); + QLineEdit *editor = new QLineEdit("New text"); + QWidget window; + //Updater updater(&label); + QObject::connect(editor, SIGNAL(textChanged(const QString &)), + label, SLOT(setText(const QString &))); + //QObject::connect(editor, SIGNAL(textChanged(const QString &)), + // &updater, SLOT(adjustSize())); + //editor.show(); + //label.show(); + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget(label); + layout->addWidget(editor); + window.setLayout(layout); + window.show(); + return app.exec(); +} + +#include "main.moc" diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlineargradient/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlineargradient/main.cpp new file mode 100644 index 0000000..8b850a5 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlineargradient/main.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "paintwidget.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + PaintWidget window; + window.show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlineargradient/paintwidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlineargradient/paintwidget.cpp new file mode 100644 index 0000000..2bd3637 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlineargradient/paintwidget.cpp @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "paintwidget.h" + +PaintWidget::PaintWidget(QWidget *parent) + : QWidget(parent) +{ +} + +void PaintWidget::paintEvent(QPaintEvent *event) +{ + QLinearGradient gradient1(rect().topLeft(), rect().bottomRight()); + gradient1.setColorAt(0, QColor("#ffffcc")); + gradient1.setColorAt(1, QColor("#ccccff")); + + QRectF ellipseRect(width()*0.25, height()*0.25, width()*0.5, height()*0.5); + QLinearGradient gradient2(ellipseRect.topLeft(), ellipseRect.bottomRight()); + gradient2.setColorAt(0, QColor("#ccccff")); + gradient2.setColorAt(1, QColor("#ffffcc")); + + QPainter painter; + painter.begin(this); + painter.setRenderHint(QPainter::Antialiasing); + painter.fillRect(rect(), QBrush(gradient1)); + painter.setBrush(QBrush(gradient2)); + painter.drawEllipse(ellipseRect); + painter.end(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlineargradient/paintwidget.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlineargradient/paintwidget.h new file mode 100644 index 0000000..d43ff3e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlineargradient/paintwidget.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PAINTWIDGET_H +#define PAINTWIDGET_H + +#include + +class QPaintEvent; + +class PaintWidget : public QWidget +{ + Q_OBJECT + +public: + PaintWidget(QWidget *parent = 0); + +protected: + void paintEvent(QPaintEvent *event); +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/main.cpp new file mode 100644 index 0000000..e76756f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/mainwindow.cpp new file mode 100644 index 0000000..5403a89 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/mainwindow.cpp @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" +#include "model.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + menuBar()->addMenu(fileMenu); + +// For convenient quoting: +//! [0] +QListView *listView = new QListView(this); +listView->setSelectionMode(QAbstractItemView::ExtendedSelection); +listView->setDragEnabled(true); +listView->setAcceptDrops(true); +listView->setDropIndicatorShown(true); +//! [0] + + this->listView = listView; + + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + + setupListItems(); + + setCentralWidget(listView); + setWindowTitle(tr("List View")); +} + +void MainWindow::setupListItems() +{ + QStringList items; + items << tr("Oak") << tr("Fir") << tr("Pine") << tr("Birch") << tr("Hazel") + << tr("Redwood") << tr("Sycamore") << tr("Chestnut") + << tr("Mahogany"); + + DragDropListModel *model = new DragDropListModel(items, this); + listView->setModel(model); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/mainwindow.h new file mode 100644 index 0000000..9788231 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/mainwindow.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QListView; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +private: + void setupListItems(); + + QListView *listView; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/model.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/model.cpp new file mode 100644 index 0000000..5464ff4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/model.cpp @@ -0,0 +1,161 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + model.cpp + + A simple model that uses a QStringList as its data source. +*/ + +#include + +#include "model.h" + +DragDropListModel::DragDropListModel(const QStringList &strings, + QObject *parent) + : QStringListModel(strings, parent) +{ +} + +//! [0] +bool DragDropListModel::dropMimeData(const QMimeData *data, + Qt::DropAction action, int row, int column, const QModelIndex &parent) +{ + if (action == Qt::IgnoreAction) + return true; + + if (!data->hasFormat("application/vnd.text.list")) + return false; + + if (column > 0) +//! [0] //! [1] + return false; +//! [1] + +//! [2] + int beginRow; + + if (row != -1) + beginRow = row; +//! [2] //! [3] + else if (parent.isValid()) + beginRow = parent.row(); +//! [3] //! [4] + else + beginRow = rowCount(QModelIndex()); +//! [4] + +//! [5] + QByteArray encodedData = data->data("application/vnd.text.list"); + QDataStream stream(&encodedData, QIODevice::ReadOnly); + QStringList newItems; + int rows = 0; + + while (!stream.atEnd()) { + QString text; + stream >> text; + newItems << text; + ++rows; + } +//! [5] + +//! [6] + insertRows(beginRow, rows, QModelIndex()); + foreach (QString text, newItems) { + QModelIndex idx = index(beginRow, 0, QModelIndex()); + setData(idx, text); + beginRow++; + } + + return true; +} +//! [6] + +//! [7] +Qt::ItemFlags DragDropListModel::flags(const QModelIndex &index) const +{ + Qt::ItemFlags defaultFlags = QStringListModel::flags(index); + + if (index.isValid()) + return Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | defaultFlags; + else + return Qt::ItemIsDropEnabled | defaultFlags; +} +//! [7] + +//! [8] +def mimeData(self, indexes): + mimeData = QMimeData() + encodedData = QByteArray() + stream = QDataStream(encodedData, QIODevice.WriteOnly) + + for index in indexes: + if index.isValid(): + stream << data(index, Qt.DisplayRole) + + mimeData.setData("application/vnd.text.list", encodedData) + return mimeData; +//! [8] + +//! [9] +QStringList DragDropListModel::mimeTypes() const +{ + QStringList types; + types << "application/vnd.text.list"; + return types; +} +//! [9] + +//! [10] +Qt::DropActions DragDropListModel::supportedDropActions() const +{ + return Qt::CopyAction | Qt::MoveAction; +} +//! [10] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/model.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/model.h new file mode 100644 index 0000000..5ced99c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-dnd/model.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODEL_H +#define MODEL_H + +#include +#include + +class DragDropListModel : public QStringListModel +{ + Q_OBJECT + +public: + DragDropListModel(const QStringList &strings, QObject *parent = 0); + + Qt::ItemFlags flags(const QModelIndex &index) const; + + bool dropMimeData(const QMimeData *data, Qt::DropAction action, + int row, int column, const QModelIndex &parent); + QMimeData *mimeData(const QModelIndexList &indexes) const; + QStringList mimeTypes() const; + Qt::DropActions supportedDropActions() const; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/main.cpp new file mode 100644 index 0000000..e76756f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/mainwindow.cpp new file mode 100644 index 0000000..3c49055 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/mainwindow.cpp @@ -0,0 +1,147 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" +#include "model.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + QMenu *itemsMenu = new QMenu(tr("&Items")); + + insertAction = itemsMenu->addAction(tr("&Insert Item")); + removeAction = itemsMenu->addAction(tr("&Remove Item")); + QAction *ascendingAction = itemsMenu->addAction(tr("Sort in &Ascending Order")); + QAction *descendingAction = itemsMenu->addAction(tr("Sort in &Descending Order")); + + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(itemsMenu); + + QStringList strings; + strings << tr("Oak") << tr("Fir") << tr("Pine") << tr("Birch") + << tr("Hazel") << tr("Redwood") << tr("Sycamore") << tr("Chestnut"); + model = new StringListModel(strings, this); +/* For convenient quoting: + QListView *listView = new QListView(this); +*/ + listView = new QListView(this); + listView->setModel(model); + listView->setSelectionMode(QAbstractItemView::SingleSelection); + + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + connect(ascendingAction, SIGNAL(triggered()), this, SLOT(sortAscending())); + connect(descendingAction, SIGNAL(triggered()), this, SLOT(sortDescending())); + connect(insertAction, SIGNAL(triggered()), this, SLOT(insertItem())); + connect(removeAction, SIGNAL(triggered()), this, SLOT(removeItem())); + connect(listView->selectionModel(), + SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), + this, SLOT(updateMenus(const QModelIndex &))); + + updateMenus(listView->selectionModel()->currentIndex()); + + setCentralWidget(listView); + setWindowTitle(tr("List View")); +} + +void MainWindow::sortAscending() +{ + model->sort(0, Qt::AscendingOrder); +} + +void MainWindow::sortDescending() +{ + model->sort(0, Qt::DescendingOrder); +} + +void MainWindow::insertItem() +{ + QModelIndex currentIndex = listView->currentIndex(); + if (!currentIndex.isValid()) + return; + + QString itemText = QInputDialog::getText(this, tr("Insert Item"), + tr("Input text for the new item:")); + + if (itemText.isNull()) + return; + + if (model->insertRow(currentIndex.row(), QModelIndex())) { + QModelIndex newIndex = model->index(currentIndex.row(), 0, QModelIndex()); + model->setData(newIndex, itemText, Qt::EditRole); + + QString toolTipText = tr("Tooltip:") + itemText; + QString statusTipText = tr("Status tip:") + itemText; + QString whatsThisText = tr("What's This?:") + itemText; + model->setData(newIndex, toolTipText, Qt::ToolTipRole); + model->setData(newIndex, toolTipText, Qt::StatusTipRole); + model->setData(newIndex, whatsThisText, Qt::WhatsThisRole); + } +} + +void MainWindow::removeItem() +{ + QModelIndex currentIndex = listView->currentIndex(); + if (!currentIndex.isValid()) + return; + + model->removeRow(currentIndex.row(), QModelIndex()); +} + +void MainWindow::updateMenus(const QModelIndex ¤t) +{ + insertAction->setEnabled(current.isValid()); + removeAction->setEnabled(current.isValid()); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/mainwindow.h new file mode 100644 index 0000000..848ef6b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/mainwindow.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include + +class QAction; +class QListView; +class StringListModel; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void insertItem(); + void removeItem(); + void sortAscending(); + void sortDescending(); + void updateMenus(const QModelIndex ¤t); + +private: + QAction *insertAction; + QAction *removeAction; + QListView *listView; + StringListModel *model; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/model.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/model.h new file mode 100644 index 0000000..6451ac2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistview-using/model.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODEL_H +#define MODEL_H + +#include +#include +#include + +class StringListModel : public QAbstractListModel +{ + Q_OBJECT + +public: + StringListModel(const QStringList &strings, QObject *parent = 0) + : QAbstractListModel(parent), stringList(strings) {} + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::EditRole); + + bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()); + +private: + QStringList stringList; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-dnd/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-dnd/main.cpp new file mode 100644 index 0000000..e76756f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-dnd/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-dnd/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-dnd/mainwindow.cpp new file mode 100644 index 0000000..a80b2fc --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-dnd/mainwindow.cpp @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + menuBar()->addMenu(fileMenu); + +// For convenient quoting: +//! [0] +QListWidget *listWidget = new QListWidget(this); +listWidget->setSelectionMode(QAbstractItemView::SingleSelection); +listWidget->setDragEnabled(true); +listWidget->viewport()->setAcceptDrops(true); +listWidget->setDropIndicatorShown(true); +//! [0] //! [1] +listWidget->setDragDropMode(QAbstractItemView::InternalMove); +//! [1] + + this->listWidget = listWidget; + + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + + setupListItems(); + + setCentralWidget(listWidget); + setWindowTitle(tr("List Widget")); +} + +void MainWindow::setupListItems() +{ + QListWidgetItem *item; + item = new QListWidgetItem(tr("Oak"), listWidget); + item = new QListWidgetItem(tr("Fir"), listWidget); + item = new QListWidgetItem(tr("Pine"), listWidget); + item = new QListWidgetItem(tr("Birch"), listWidget); + item = new QListWidgetItem(tr("Hazel"), listWidget); + item = new QListWidgetItem(tr("Redwood"), listWidget); + item = new QListWidgetItem(tr("Sycamore"), listWidget); + item = new QListWidgetItem(tr("Chestnut"), listWidget); + item = new QListWidgetItem(tr("Mahogany"), listWidget); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-dnd/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-dnd/mainwindow.h new file mode 100644 index 0000000..ca6e41c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-dnd/mainwindow.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QListWidget; +class QListWidgetItem; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +private: + void setupListItems(); + + QListWidget *listWidget; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-using/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-using/main.cpp new file mode 100644 index 0000000..e76756f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-using/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-using/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-using/mainwindow.cpp new file mode 100644 index 0000000..efc2836 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-using/mainwindow.cpp @@ -0,0 +1,168 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + QMenu *itemsMenu = new QMenu(tr("&Items")); + + insertAction = itemsMenu->addAction(tr("&Insert Item")); + removeAction = itemsMenu->addAction(tr("&Remove Item")); + QAction *ascendingAction = itemsMenu->addAction(tr("Sort in &Ascending Order")); + QAction *descendingAction = itemsMenu->addAction(tr("Sort in &Descending Order")); + + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(itemsMenu); + +/* For convenient quoting: +//! [0] + listWidget = QListWidget(self) +//! [0] +*/ + listWidget = new QListWidget(this); + listWidget->setSelectionMode(QAbstractItemView::SingleSelection); + + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + connect(ascendingAction, SIGNAL(triggered()), this, SLOT(sortAscending())); + connect(descendingAction, SIGNAL(triggered()), this, SLOT(sortDescending())); + connect(insertAction, SIGNAL(triggered()), this, SLOT(insertItem())); + connect(removeAction, SIGNAL(triggered()), this, SLOT(removeItem())); + connect(listWidget, + SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), + this, SLOT(updateMenus(QListWidgetItem *))); + + setupListItems(); + updateMenus(listWidget->currentItem()); + + setCentralWidget(listWidget); + setWindowTitle(tr("List Widget")); +} + +void MainWindow::setupListItems() +{ +//! [1] + QListWidgetItem(tr("Oak"), listWidget) + QListWidgetItem(tr("Fir"), listWidget) + QListWidgetItem(tr("Pine"), listWidget) +//! [1] + new QListWidgetItem(tr("Birch"), listWidget); +//! [2] + QListWidgetItem(tr("Hazel"), listWidget) +//! [2] + new QListWidgetItem(tr("Redwood"), listWidget); +//! [3] + QListWidgetItem(tr("Sycamore"), listWidget) + QListWidgetItem(tr("Chestnut"), listWidget) + QListWidgetItem(tr("Mahogany"), listWidget) +//! [3] +} + +void MainWindow::sortAscending() +{ +//! [4] + listWidget.sortItems(Qt.AscendingOrder) +//! [4] +} + +void MainWindow::sortDescending() +{ +//! [5] + listWidget.sortItems(Qt.DescendingOrder) +//! [5] +} + +void MainWindow::insertItem() +{ + if (!listWidget->currentItem()) + return; + + QString itemText = QInputDialog::getText(this, tr("Insert Item"), + tr("Input text for the new item:")); + + if (itemText.isNull()) + return; + +//! [6] + newItem = QListWidgetItem() + newItem.setText(itemText) +//! [6] + int row = listWidget->row(listWidget->currentItem()); +//! [7] + listWidget.insertItem(row, newItem) +//! [7] + + QString toolTipText = tr("Tooltip:") + itemText; + QString statusTipText = tr("Status tip:") + itemText; + QString whatsThisText = tr("What's This?:") + itemText; +//! [8] + newItem.setToolTip(toolTipText) + newItem.setStatusTip(toolTipText) + newItem.setWhatsThis(whatsThisText) +//! [8] +} + +void MainWindow::removeItem() +{ + listWidget->takeItem(listWidget->row(listWidget->currentItem())); +} + +void MainWindow::updateMenus(QListWidgetItem *current) +{ + insertAction->setEnabled(current != 0); + removeAction->setEnabled(current != 0); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-using/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-using/mainwindow.h new file mode 100644 index 0000000..b03749d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qlistwidget-using/mainwindow.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QAction; +class QListWidget; +class QListWidgetItem; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void insertItem(); + void removeItem(); + void sortAscending(); + void sortDescending(); + void updateMenus(QListWidgetItem *current); + +private: + void setupListItems(); + + QAction *insertAction; + QAction *removeAction; + QListWidget *listWidget; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qmacnativewidget/main.mm b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmacnativewidget/main.mm new file mode 100644 index 0000000..12794b1 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmacnativewidget/main.mm @@ -0,0 +1,144 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#ifdef QT_MAC_USE_COCOA +#import +#else +#include +#endif + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); +#ifdef QT_MAC_USE_COCOA +//![0] + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSWindow *window = [[NSWindow alloc] initWithContentRect:NSMakeRect(200, app.desktop()->height() - 200, 239, 200) + styleMask:NSTitledWindowMask | NSClosableWindowMask + | NSMiniaturizableWindowMask | NSResizableWindowMask + backing:NSBackingStoreBuffered defer:NO]; + + QMacNativeWidget *nativeWidget = new QMacNativeWidget(); + nativeWidget->move(0, 0); + nativeWidget->setPalette(QPalette(Qt::red)); + nativeWidget->setAutoFillBackground(true); + QVBoxLayout *layout = new QVBoxLayout(); + QPushButton *pushButton = new QPushButton("An Embedded Qt Button!", nativeWidget); + pushButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // Don't use the layout rect calculated from QMacStyle. + layout->addWidget(pushButton); + nativeWidget->setLayout(layout); + + // Adjust Cocoa layouts + NSView *nativeWidgetView = reinterpret_cast(nativeWidget->winId()); + NSView *contentView = [window contentView]; + [contentView setAutoresizesSubviews:YES]; + [nativeWidgetView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + [nativeWidgetView setAutoresizesSubviews:YES]; + NSView *pushButtonView = reinterpret_cast(pushButton->winId()); + [pushButtonView setAutoresizingMask:NSViewWidthSizable]; + + // Add the nativeWidget to the window. + [contentView addSubview:nativeWidgetView positioned:NSWindowAbove relativeTo:nil]; + nativeWidget->show(); + pushButton->show(); + + // Show the window. + [window makeKeyAndOrderFront:window]; + [pool release]; +//![0] +#else +//![1] + Rect contentRect; + SetRect(&contentRect, 200, 200, 400, 400); + HIWindowRef windowRef; + CreateNewWindow(kDocumentWindowClass, kWindowStandardDocumentAttributes | kWindowCompositingAttribute | kWindowStandardHandlerAttribute | kWindowLiveResizeAttribute, &contentRect, &windowRef); + HIViewRef contentView = 0; + GetRootControl(windowRef, &contentView); + + QMacNativeWidget *nativeWidget = new QMacNativeWidget(); + nativeWidget->move(0, 0); + nativeWidget->setPalette(QPalette(Qt::red)); + nativeWidget->setAutoFillBackground(true); + QVBoxLayout *layout = new QVBoxLayout(); + QPushButton *pushButton = new QPushButton("An Embedded Qt Button!", nativeWidget); + pushButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // Don't use the layout rect calculated from QMacStyle. + layout->addWidget(pushButton); + nativeWidget->setLayout(layout); + HIViewRef nativeWidgetView = reinterpret_cast(nativeWidget->winId()); + // Add the nativeWidget to the window. + HIViewAddSubview(contentView, nativeWidgetView); + + // Adjust Carbon layouts + HILayoutInfo layoutInfo; + layoutInfo.version = kHILayoutInfoVersionZero; + HIViewGetLayoutInfo(nativeWidgetView, &layoutInfo); + + layoutInfo.binding.top.toView = contentView; + layoutInfo.binding.top.kind = kHILayoutBindTop; + layoutInfo.binding.left.toView = contentView; + layoutInfo.binding.left.kind = kHILayoutBindLeft; + layoutInfo.binding.right.toView = contentView; + layoutInfo.binding.right.kind = kHILayoutBindRight; + layoutInfo.binding.bottom.toView = contentView; + layoutInfo.binding.bottom.kind = kHILayoutBindBottom; + + HIViewSetLayoutInfo(nativeWidgetView, &layoutInfo); + HIViewApplyLayout(nativeWidgetView); + + pushButton->show(); + nativeWidget->show(); + // Show the window. + ShowWindow(windowRef); +//![1] +#endif + return app.exec(); // gives us the same behavior in both +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/delegate.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/delegate.h new file mode 100644 index 0000000..ff07205 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/delegate.h @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/main.cpp new file mode 100644 index 0000000..ff07205 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/main.cpp @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/model.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/model.cpp new file mode 100644 index 0000000..ff07205 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/model.cpp @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/model.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/model.h new file mode 100644 index 0000000..ff07205 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/model.h @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/paintwidget_unix.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/paintwidget_unix.cpp new file mode 100644 index 0000000..e4361c6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/paintwidget_unix.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +int main(int argc, char *argv[]) +{ + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/view.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/view.h new file mode 100644 index 0000000..ff07205 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmake/view.h @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qmetaobject-invokable/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmetaobject-invokable/main.cpp new file mode 100644 index 0000000..ed05fec --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmetaobject-invokable/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include "window.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Window window; + qDebug() << window.metaObject()->methodCount(); + window.show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qmetaobject-invokable/window.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmetaobject-invokable/window.cpp new file mode 100644 index 0000000..2a06203 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmetaobject-invokable/window.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "window.h" + +Window::Window() +{ +} + +void Window::normalMethod() +{ + // Cannot be called by the meta-object system. + show(); +} + +void Window::invokableMethod() +{ + // Can be called by the meta-object system. + show(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qmetaobject-invokable/window.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmetaobject-invokable/window.h new file mode 100644 index 0000000..7c87111 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qmetaobject-invokable/window.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +//! [Window class with invokable method] +class Window : public QWidget +{ + Q_OBJECT + +public: + Window(); + void normalMethod(); + Q_INVOKABLE void invokableMethod(); +}; +//! [Window class with invokable method] + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qprocess-environment/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qprocess-environment/main.cpp new file mode 100644 index 0000000..93b5855 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qprocess-environment/main.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +void startProcess() +{ + { +//! [0] +import re +from PySide2.QtCore import QProcess + +process = QProcess() + +env = QProcess.systemEnvironment() +env.append("TMPDIR=C:\\MyApp\\temp") # Add an environment variable +regex = re.compile(r'^PATH=(.*)', re.IGNORECASE) +env = [regex.sub(r'PATH=\1;C:\\Bin', var) for var in env] +process.setEnvironment(env) +process.start("myapp") +//! [0] + } + + { +//! [1] +process = QProcess() +env = QProcessEnvironment.systemEnvironment() +env.insert("TMPDIR", "C:\\MyApp\\temp") # Add an environment variable +env.insert("PATH", env.value("Path") + ";C:\\Bin") +process.setProcessEnvironment(env) +process.start("myapp") +//! [1] + } +} + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + startProcess(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qprocess/qprocess-simpleexecution.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qprocess/qprocess-simpleexecution.cpp new file mode 100644 index 0000000..c7d964b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qprocess/qprocess-simpleexecution.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); +//! [0] + ... +//! [0] + parent = &app; + +//! [1] + program = "./path/to/Qt/examples/widgets/analogclock" +//! [1] + program = "./../../../../examples/widgets/analogclock/analogclock"; + +//! [2] + arguments = ["-style", "fusion"] + + myProcess = QProcess(parent) + myProcess.start(program, arguments) +//! [2] + + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qquickview-ex.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qquickview-ex.cpp new file mode 100644 index 0000000..380989e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qquickview-ex.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +if __name__ == '__main__': + app = QGuiApplication(sys.argv) + view = QQuickView() + view.setResizeMode(QQuickView.SizeRootObjectToView) + + qmlFile = os.path.join(os.path.dirname(__file__), 'view.qml') + view.setSource(QUrl.fromLocalFile(os.path.abspath(qmlFile))) + if view.status() == QQuickView.Error: + sys.exit(-1) + view.show() + + app.exec_() + # Deleting the view before it goes out of scope is required to make + # sure all child QML instances are destroyed in the correct order. + del view +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/buttonwidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/buttonwidget.cpp new file mode 100644 index 0000000..8bf8072 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/buttonwidget.cpp @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "buttonwidget.h" + +//! [0] + +def __init__(self, texts, parent): + QWidget.__init__(self, parent) + + self.signalMapper = QSignalMapper(self) + + layout = QGridLayout() + + for text, index in enumerate(texts): + button = QPushButton(text) + self.connect(SIGNAL("clicked()"), self.signalMapper, SLOT("map()")) +//! [0] //! [1] + self.signalMapper.setMapping(button, text) + layout.addWidget(button, index / 3, index % 3) + + self.signalMapper.connect(SIGNAL("mapped(const QString &)"), +//! [1] //! [2] + self, SLOT("clicked(const QString &)")) + + self.setLayout(layout) + +//! [2] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/buttonwidget.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/buttonwidget.h new file mode 100644 index 0000000..6763da0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/buttonwidget.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef BUTTONWIDGET_H +#define BUTTONWIDGET_H + +#include + +class QSignalMapper; +class QString; +class QStringList; + +//! [0] + +class ButtonWidget(QWidget): + def __init__(self, texts, parent=None): + QWidget.__init__(self, parent) + ... +//! [0] //! [1] + +//! [1] + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/main.cpp new file mode 100644 index 0000000..f570a9b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "buttonwidget.h" +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QStringList texts; + texts << "January" << "February" << "March" << "April" + << "May" << "June" << "July" << "August" + << "September" << "October" << "November" + << "December"; + MainWindow *mw = new MainWindow; + ButtonWidget *buttons = new ButtonWidget(texts, mw); + mw->setCentralWidget(buttons); + mw->show(); + QObject::connect(buttons, SIGNAL(clicked(const QString &)), + mw, SLOT(buttonPressed(const QString &))); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/mainwindow.h new file mode 100644 index 0000000..18037fa --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsignalmapper/mainwindow.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow() + { + statusBar()->showMessage(tr("Ready")); + } + +public slots: + void buttonPressed(const QString &text) + { + statusBar()->showMessage(tr("Chose %1").arg(text)); + } +}; diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsortfilterproxymodel-details/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsortfilterproxymodel-details/main.cpp new file mode 100644 index 0000000..9b097f3 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsortfilterproxymodel-details/main.cpp @@ -0,0 +1,79 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + + +//! [0] //! [1] + treeView = QTreeView() +//! [0] + model = MyItemModel(self) + + treeView.setModel(model) +//! [1] + +//! [2] + sourceModel = MyItemModel(self) + proxyModel = QSortFilterProxyModel(self) + + proxyModel.setSourceModel(sourceModel) + treeView.setModel(proxyModel) +//! [2] + +//! [3] + treeView.setSortingEnabled(True) +//! [3] + +//! [4] + proxyModel.sort(2, Qt.AscendingOrder) +//! [4] //! [5] + proxyModel.setFilterRegExp(QRegExp(".png", Qt.CaseInsensitive, + QRegExp.FixedString)) + proxyModel.setFilterKeyColumn(1) +//! [5] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsortfilterproxymodel/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsortfilterproxymodel/main.cpp new file mode 100644 index 0000000..a1a1a23 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsortfilterproxymodel/main.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QObject *parent = &app; + + QStringList numbers; + numbers << "One" << "Two" << "Three" << "Four" << "Five"; + + QAbstractItemModel *stringListModel = new QStringListModel(numbers, parent); + +//! [0] + QSortFilterProxyModel *filterModel = new QSortFilterProxyModel(parent); + filterModel->setSourceModel(stringListModel); +//! [0] + + QWidget *window = new QWidget; + +//! [1] + QListView *filteredView = new QListView; + filteredView->setModel(filterModel); +//! [1] + filteredView->setWindowTitle("Filtered view onto a string list model"); + + QLineEdit *patternEditor = new QLineEdit; + QObject:: + connect(patternEditor, SIGNAL(textChanged(const QString &)), + filterModel, SLOT(setFilterRegExp(const QString &))); + + QVBoxLayout *layout = new QVBoxLayout(window); + layout->addWidget(filteredView); + layout->addWidget(patternEditor); + + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/main.cpp new file mode 100644 index 0000000..33b48f7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/main.cpp @@ -0,0 +1,66 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + + +//! [0] +def main(): + app = QApplication(sys.argv) + pixmap = QPixmap(":/splash.png") + splash = QSplashScreen(pixmap) + splash.show() + app.processEvents() +//! [0] + +//! [1] + window = QMainWindow() + window.show() + splash.finish(&window) + return app.exec_() +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/mainwindow.cpp new file mode 100644 index 0000000..d948985 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/mainwindow.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +MainWindow::MainWindow() +{ + QLabel *label = new QLabel(tr("This is the main window.")); + label->setAlignment(Qt::AlignCenter); + setCentralWidget(label); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/mainwindow.h new file mode 100644 index 0000000..2213203 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/mainwindow.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/qsplashscreen.qrc b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/qsplashscreen.qrc new file mode 100644 index 0000000..330ec78 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/qsplashscreen.qrc @@ -0,0 +1,5 @@ + + + splash.png + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/splash.png b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsplashscreen/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..d82f6d21844a9eabd058a5ecaa2fd72fa2b56ca2 GIT binary patch literal 27926 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 RVUYj;002ovPDHLkV1n}eJAeQH literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsql-namespace/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsql-namespace/main.cpp new file mode 100644 index 0000000..7f512e0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsql-namespace/main.cpp @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qstack/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstack/main.cpp new file mode 100644 index 0000000..60b83bf --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstack/main.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +using namespace std; + +int main(int argc, char *argv[]) +{ +//! [0] + QStack stack; + stack.push(1); + stack.push(2); + stack.push(3); + while (!stack.isEmpty()) + cout << stack.pop() << endl; +//! [0] +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qstackedlayout/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstackedlayout/main.cpp new file mode 100644 index 0000000..9652a0e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstackedlayout/main.cpp @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +class Widget : public QWidget +{ +public: + Widget(QWidget *parent = 0); +}; + +Widget::Widget(QWidget *parent) + : QWidget(parent) +{ +//! [0] + QWidget *firstPageWidget = new QWidget; + QWidget *secondPageWidget = new QWidget; + QWidget *thirdPageWidget = new QWidget; + + QStackedLayout *stackedLayout = new QStackedLayout; + stackedLayout->addWidget(firstPageWidget); + stackedLayout->addWidget(secondPageWidget); + stackedLayout->addWidget(thirdPageWidget); + +//! [0] //! [1] + QComboBox *pageComboBox = new QComboBox; + pageComboBox->addItem(tr("Page 1")); + pageComboBox->addItem(tr("Page 2")); + pageComboBox->addItem(tr("Page 3")); + connect(pageComboBox, SIGNAL(activated(int)), + stackedLayout, SLOT(setCurrentIndex(int))); +//! [1] + +//! [2] + QVBoxLayout *mainLayout = new QVBoxLayout; +//! [2] + mainLayout->addWidget(pageComboBox); +//! [3] + mainLayout->addLayout(stackedLayout); + setLayout(mainLayout); +//! [3] +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Widget widget; + widget.show(); + return app.exec(); +} + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qstackedwidget/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstackedwidget/main.cpp new file mode 100644 index 0000000..98a08be --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstackedwidget/main.cpp @@ -0,0 +1,78 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + + +//! [0] + firstPageWidget = QWidget() + secondPageWidget = QWidget() + thirdPageWidget = QWidget() + + stackedWidget = QStackedWidget() + stackedWidget.addWidget(firstPageWidget) + stackedWidget.addWidget(secondPageWidget) + stackedWidget.addWidget(thirdPageWidget) + +//! [0] //! [1] + pageComboBox = QComboBox() + pageComboBox.addItem(tr("Page 1")) + pageComboBox.addItem(tr("Page 2")) + pageComboBox.addItem(tr("Page 3")) + connect(pageComboBox, SIGNAL("activated(int)"), + stackedWidget, SLOT("setCurrentIndex(int)")) + +//! [1] //! [2] + layout = QVBoxLayout() +//! [2] + layout.addWidget(pageComboBox) +//! [3] + layout.addWidget(stackedWidget) + setLayout(layout) +//! [3] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qstandarditemmodel/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstandarditemmodel/main.cpp new file mode 100644 index 0000000..c5b9ab9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstandarditemmodel/main.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +class Widget : public QWidget +{ +public: + Widget(QWidget *parentWidget = 0); +}; + +Widget::Widget(QWidget *parentWidget) + : QWidget(parentWidget) +{ + QStandardItemModel *model = new QStandardItemModel(); + QModelIndex parent; + for (int i = 0; i < 4; ++i) { + parent = model->index(0, 0, parent); + model->insertRows(0, 1, parent); + model->insertColumns(0, 1, parent); + QModelIndex index = model->index(0, 0, parent); + model->setData(index, i); + } +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Widget widget; + widget.show(); + return app.exec(); +} + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qstatustipevent/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstatustipevent/main.cpp new file mode 100644 index 0000000..0ba3895 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstatustipevent/main.cpp @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] //! [1] +def __init__(self, parent): + QMainWindow.__init__(self, parent) +//! [0] + myWidget = QWidget() + myWidget.setStatusTip(tr("This is my widget.")) + + setCentralWidget(myWidget) +//! [1] + +//! [2] + fileMenu = menuBar().addMenu(tr("File")) + + Act = QAction(self.tr("&New"), self) + Act.setStatusTip(tr("Create a new file.")) + fileMenu.addAction(Act) +//! [2] + + statusBar().showMessage(self.tr("Ready")) + setWindowTitle(tr("QStatusTipEvent")) +//! [3] + +//! [3] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qstringlistmodel/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstringlistmodel/main.cpp new file mode 100644 index 0000000..07c77f9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstringlistmodel/main.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +class Widget : public QWidget +{ +public: + Widget(QWidget *parent = 0); +}; + +Widget::Widget(QWidget *parent) + : QWidget(parent) +{ +//! [0] + model = QStringListModel() + list = QStringList() + list.append("a") + list.append("b") + list.append("c") + model.setStringList(list) +//! [0] +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Widget widget; + widget.show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qstyleoption/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstyleoption/main.cpp new file mode 100644 index 0000000..12fb026 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstyleoption/main.cpp @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def paintEvent(self, qpaintevent): + option = QStyleOptionButton() + option.initFrom(self) + if isDown(): + option.state = QStyle.State_Sunken + else: + option.state = QStyle.State_Raised + + if self.isDefault(): + option.features = option.features or QStyleOptionButton.DefaultButton + option.text = self.text() + option.icon = self.icon() + + painter = QPainter(self) + self.style().drawControl(QStyle.CE_PushButton, option, painter, self) +//! [0] +//! [1] + option = QStyleOptionFrame() + + if isinstance(option, QStyleOptionFrameV2): + frameOptionV2 = QStyleOptionFrameV2(option) + + # draw the frame using frameOptionV2 + +//! [1] + +//! [2] + if isinstance(option, QStyleOptionProgressBarV2): + progressBarV2 = QStyleOptionProgressBarV2(option) + + # draw the progress bar using progressBarV2 + +//! [2] + +//! [3] + if isinstance(option, QStyleOptionTabV2): + tabV2 = QStyleOptionTabV2(option) + + # draw the tab using tabV2 + +//! [3] + + +//! [4] +def drawPrimitive(self, element, option, painter, widget): + if element == self.PE_FrameFocusRect: + focusRectOption = QStyleOptionFocusRect(option) + if focusRectOption: + # ... + + + # ... + +//! [4] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qstyleplugin/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstyleplugin/main.cpp new file mode 100644 index 0000000..67c5b51 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qstyleplugin/main.cpp @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +class MyStylePlugin : public QStylePlugin +{ +public: + MyStylePlugin(QObject *parent = 0); + + QStyle *create(const QString &key); + QStringList keys() const; +}; + +class RocketStyle : public QCommonStyle +{ +public: + RocketStyle() {}; + +}; + +class StarBusterStyle : public QCommonStyle +{ +public: + StarBusterStyle() {}; +}; + +MyStylePlugin::MyStylePlugin(QObject *parent) + : QStylePlugin(parent) +{ +} + +//! [0] +QStringList MyStylePlugin::keys() const +{ + return QStringList() << "Rocket" << "StarBuster"; +} +//! [0] + +//! [1] +QStyle *MyStylePlugin::create(const QString &key) +{ + QString lcKey = key; + if (lcKey == "rocket") { + return new RocketStyle; + } else if (lcKey == "starbuster") { + return new StarBusterStyle; + } + return 0; +//! [1] //! [2] +} +//! [2] + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MyStylePlugin plugin; + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/main.cpp new file mode 100644 index 0000000..537c8ac --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/main.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); +//! [0] + QSvgWidget window(":/files/spheres.svg"); + window.show(); +//! [0] + QSvgRenderer *renderer = window.renderer(); + QImage image(150, 150, QImage::Format_RGB32); + QPainter painter; + painter.begin(&image); + renderer->render(&painter); + painter.end(); + image.save("spheres.png", "PNG", 9); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/qsvgwidget.qrc b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/qsvgwidget.qrc new file mode 100644 index 0000000..13d8b36 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/qsvgwidget.qrc @@ -0,0 +1,5 @@ + + + spheres.svg + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/spheres.svg b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/spheres.svg new file mode 100644 index 0000000..9e38193 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/spheres.svg @@ -0,0 +1,79 @@ + + + Spheres + Gradient filled spheres with different colors. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/sunflower.svg b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/sunflower.svg new file mode 100644 index 0000000..b60dd11 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qsvgwidget/sunflower.svg @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qt-namespace/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qt-namespace/main.cpp new file mode 100644 index 0000000..90d3f00 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qt-namespace/main.cpp @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/Images/cubed.png b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/Images/cubed.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd9048ca6ba463b6a0f31d94ed6420346693df9 GIT binary patch literal 437 zcmV;m0ZRUfP)AYzJ8A$Jsu3gLE0jsrCbVwz^E~U-XNTt+ikC{v7xCypdngXa*zW?L0~UJ z1s$s`p$H509F^yJu5X`D4l-3Tl`1Kvq?EEE0wN-?Ab^0VtiTE@oX%*nR9F?3)50ZO ztZs)<1_HtW20QvoPdg1302mByXRv+$@z$6_wv92E9G$rR^VYEg5CE=gN7FWVtN-x* zMC*zGcPDe$%+zIHvk!Lr^TSdRz^9F0S1vqyzPP-(GT+|Vlk=UFe7^g4^GWa7#)sbO zk-6ieqFm1sI(lyIQdz$I<4rZ~!@80x!ZEr2yEl97e z3~&fL>X+l!Q*Yz!FfkYeF59o>PVZE!C(qOX05WaoTf5kH2H%%nuS_-A7-3g^F7EYS z?0#7}KMVj|?nFASo@%1|uX}H*&QL^VuBEb9MkOb@)lQU@lu|_yyE#T2>}yOG&Tz_x flubw&jKTi_Ge!*bk)o;&00000NkvXXu0mjf)3C*+ literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/Images/squared.png b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/Images/squared.png new file mode 100644 index 0000000000000000000000000000000000000000..bfdf99328950607c9173e5e2b931a798e87b9189 GIT binary patch literal 440 zcmV;p0Z0CcP)GY6nC@~(NbFlIYpD32rf-gPSW5KK})k^gE>Tz z2nG!e5_MXT(I50W(#JcW>-YRV?_Mu&Y;1o0w)OqT&)+-E*5BQ%eUSevq5}YC2mkI~CY6Q;4RF8&AW$r=-I|t=1Assf2iAYhE-jXVxg;S3!n#LmXD1WD z0Z<6CBF31GylLLfTn?at%5YLt4waQQmL3EN2hjSnho7nom*>;=ozC3zBT+6;+?!t* zoijb!3Nzy;E*%(-P*P8?ELQFhpBzbVOx`=*H5{b${dW1--4Aak2J=>PyKCTr*#BA8 zT4zJGXzp%Ej%49w|8?_scCMWu5ICr(wK9G>>wPtLCIA4qi0Nj$7SqO;o2$!*3nYXi z^}eRQUw)B&Tt4460OXMDPdurH&c&;JQ$qn60tf3}sD~s!_4Kjw1O(s!*{(tUXGbOw i2$vvn33Epv1o{tvNn + + Images/squared.png + Images/cubed.png + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/main.cpp new file mode 100644 index 0000000..e76756f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/mainwindow.cpp new file mode 100644 index 0000000..e0ac8a2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/mainwindow.cpp @@ -0,0 +1,153 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "math.h" + +#include "mainwindow.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + QMenu *itemsMenu = new QMenu(tr("&Items")); + + QAction *sumItemsAction = itemsMenu->addAction(tr("&Sum Items")); + QAction *averageItemsAction = itemsMenu->addAction(tr("&Average Items")); + + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(itemsMenu); + + tableWidget = new QTableWidget(12, 3, this); + tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); + tableWidget->setDragEnabled(true); + tableWidget->setAcceptDrops(true); + tableWidget->setDropIndicatorShown(true); + + QTableWidgetItem *valuesHeaderItem = new QTableWidgetItem(tr("Values")); + tableWidget->setHorizontalHeaderItem(0, valuesHeaderItem); + valuesHeaderItem->setTextAlignment(Qt::AlignVCenter); + QTableWidgetItem *squaresHeaderItem = new QTableWidgetItem(tr("Squares")); + squaresHeaderItem->setIcon(QIcon(QPixmap(":/Images/squared.png"))); + squaresHeaderItem->setTextAlignment(Qt::AlignVCenter); + QTableWidgetItem *cubesHeaderItem = new QTableWidgetItem(tr("Cubes")); + cubesHeaderItem->setIcon(QIcon(QPixmap(":/Images/cubed.png"))); + cubesHeaderItem->setTextAlignment(Qt::AlignVCenter); + tableWidget->setHorizontalHeaderItem(1, squaresHeaderItem); + tableWidget->setHorizontalHeaderItem(2, cubesHeaderItem); + + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + connect(sumItemsAction, SIGNAL(triggered()), this, SLOT(sumItems())); + connect(averageItemsAction, SIGNAL(triggered()), this, SLOT(averageItems())); + + setupTableItems(); + + setCentralWidget(tableWidget); + setWindowTitle(tr("Table Widget")); +} + +void MainWindow::setupTableItems() +{ + for (int row = 0; row < tableWidget->rowCount()-1; ++row) { + for (int column = 0; column < tableWidget->columnCount(); ++column) { + QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg( + pow((float)row, (float)column+1))); + tableWidget->setItem(row, column, newItem); + } + } + for (int column = 0; column < tableWidget->columnCount(); ++column) { + QTableWidgetItem *newItem = new QTableWidgetItem; + newItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable); + tableWidget->setItem(tableWidget->rowCount()-1, column, newItem); + } +} + +void MainWindow::averageItems() +{ + QList selected = tableWidget->selectedItems(); + QTableWidgetItem *item; + int number = 0; + double total = 0; + + foreach (item, selected) { + bool ok; + double value = item->text().toDouble(&ok); + + if (ok && !item->text().isEmpty()) { + total += value; + number++; + } + } + if (number > 0) + tableWidget->currentItem()->setText(QString::number(total/number)); +} + +void MainWindow::sumItems() +{ + QList selected = tableWidget->selectedItems(); + QTableWidgetItem *item; + int number = 0; + double total = 0; + + foreach (item, selected) { + bool ok; + double value = item->text().toDouble(&ok); + + if (ok && !item->text().isEmpty()) { + total += value; + number++; + } + } + if (number > 0) + tableWidget->currentItem()->setText(QString::number(total)); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/mainwindow.h new file mode 100644 index 0000000..8387de5 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-dnd/mainwindow.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QAction; +class QTableWidget; +class QTableWidgetItem; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void averageItems(); + void sumItems(); + +private: + void setupTableItems(); + + QAction *removeAction; + QTableWidget *tableWidget; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-resizing/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-resizing/main.cpp new file mode 100644 index 0000000..e76756f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-resizing/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-resizing/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-resizing/mainwindow.cpp new file mode 100644 index 0000000..fcaa776 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-resizing/mainwindow.cpp @@ -0,0 +1,124 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + QMenu *tableMenu = new QMenu(tr("&Table")); + + QAction *tableWidthAction = tableMenu->addAction(tr("Change Table &Width")); + QAction *tableHeightAction = tableMenu->addAction(tr("Change Table &Height")); + + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(tableMenu); + +//! [0] + tableWidget = QTableWidget() +//! [0] + tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); + + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + connect(tableWidthAction, SIGNAL(triggered()), this, SLOT(changeWidth())); + connect(tableHeightAction, SIGNAL(triggered()), this, SLOT(changeHeight())); + + setupTableItems(); + + setCentralWidget(tableWidget); + setWindowTitle(tr("Table Widget Resizing")); +} + +void MainWindow::setupTableItems() +{ +//! [1] + tableWidget.setRowCount(10) + tableWidget.setColumnCount(5) +//! [1] + + for (int row = 0; row < tableWidget->rowCount(); ++row) { + for (int column = 0; column < tableWidget->columnCount(); ++column) { +//! [2] + newItem = QTableWidgetItem(tr("%s" % ((row+1)*(column+1)))) + tableWidget.setItem(row, column, newItem) +//! [2] + } + } +} + +void MainWindow::changeWidth() +{ + bool ok; + + int newWidth = QInputDialog::getInteger(this, tr("Change table width"), + tr("Input the number of columns required (1-20):"), + tableWidget->columnCount(), 1, 20, 1, &ok); + + if (ok) + tableWidget->setColumnCount(newWidth); +} + +void MainWindow::changeHeight() +{ + bool ok; + + int newHeight = QInputDialog::getInteger(this, tr("Change table height"), + tr("Input the number of rows required (1-20):"), + tableWidget->rowCount(), 1, 20, 1, &ok); + + if (ok) + tableWidget->setRowCount(newHeight); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-resizing/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-resizing/mainwindow.h new file mode 100644 index 0000000..8eaaa7e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-resizing/mainwindow.h @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QAction; +class QTableWidget; +class QTableWidgetItem; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void changeHeight(); + void changeWidth(); + +private: + void setupTableItems(); + + QTableWidget *tableWidget; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/Images/cubed.png b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/Images/cubed.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd9048ca6ba463b6a0f31d94ed6420346693df9 GIT binary patch literal 437 zcmV;m0ZRUfP)AYzJ8A$Jsu3gLE0jsrCbVwz^E~U-XNTt+ikC{v7xCypdngXa*zW?L0~UJ z1s$s`p$H509F^yJu5X`D4l-3Tl`1Kvq?EEE0wN-?Ab^0VtiTE@oX%*nR9F?3)50ZO ztZs)<1_HtW20QvoPdg1302mByXRv+$@z$6_wv92E9G$rR^VYEg5CE=gN7FWVtN-x* zMC*zGcPDe$%+zIHvk!Lr^TSdRz^9F0S1vqyzPP-(GT+|Vlk=UFe7^g4^GWa7#)sbO zk-6ieqFm1sI(lyIQdz$I<4rZ~!@80x!ZEr2yEl97e z3~&fL>X+l!Q*Yz!FfkYeF59o>PVZE!C(qOX05WaoTf5kH2H%%nuS_-A7-3g^F7EYS z?0#7}KMVj|?nFASo@%1|uX}H*&QL^VuBEb9MkOb@)lQU@lu|_yyE#T2>}yOG&Tz_x flubw&jKTi_Ge!*bk)o;&00000NkvXXu0mjf)3C*+ literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/Images/squared.png b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/Images/squared.png new file mode 100644 index 0000000000000000000000000000000000000000..bfdf99328950607c9173e5e2b931a798e87b9189 GIT binary patch literal 440 zcmV;p0Z0CcP)GY6nC@~(NbFlIYpD32rf-gPSW5KK})k^gE>Tz z2nG!e5_MXT(I50W(#JcW>-YRV?_Mu&Y;1o0w)OqT&)+-E*5BQ%eUSevq5}YC2mkI~CY6Q;4RF8&AW$r=-I|t=1Assf2iAYhE-jXVxg;S3!n#LmXD1WD z0Z<6CBF31GylLLfTn?at%5YLt4waQQmL3EN2hjSnho7nom*>;=ozC3zBT+6;+?!t* zoijb!3Nzy;E*%(-P*P8?ELQFhpBzbVOx`=*H5{b${dW1--4Aak2J=>PyKCTr*#BA8 zT4zJGXzp%Ej%49w|8?_scCMWu5ICr(wK9G>>wPtLCIA4qi0Nj$7SqO;o2$!*3nYXi z^}eRQUw)B&Tt4460OXMDPdurH&c&;JQ$qn60tf3}sD~s!_4Kjw1O(s!*{(tUXGbOw i2$vvn33Epv1o{tvNn + + Images/squared.png + Images/cubed.png + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/main.cpp new file mode 100644 index 0000000..e76756f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/mainwindow.cpp new file mode 100644 index 0000000..e983595 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/mainwindow.cpp @@ -0,0 +1,159 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "math.h" + +#include "mainwindow.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + QMenu *itemsMenu = new QMenu(tr("&Items")); + + QAction *sumItemsAction = itemsMenu->addAction(tr("&Sum Items")); + QAction *averageItemsAction = itemsMenu->addAction(tr("&Average Items")); + + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(itemsMenu); + +//! [0] + tableWidget = QTableWidget(12, 3, self) +//! [0] + tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); + +//! [1] + valuesHeaderItem = QTableWidgetItem(tr("Values")) + tableWidget.setHorizontalHeaderItem(0, valuesHeaderItem) +//! [1] + valuesHeaderItem->setTextAlignment(Qt::AlignVCenter); + QTableWidgetItem *squaresHeaderItem = new QTableWidgetItem(tr("Squares")); + squaresHeaderItem->setIcon(QIcon(QPixmap(":/Images/squared.png"))); + squaresHeaderItem->setTextAlignment(Qt::AlignVCenter); +//! [2] + cubesHeaderItem = QTableWidgetItem(tr("Cubes")) + cubesHeaderItem.setIcon(QIcon(QPixmap(":/Images/cubed.png"))) + cubesHeaderItem.setTextAlignment(Qt::AlignVCenter) +//! [2] + tableWidget->setHorizontalHeaderItem(1, squaresHeaderItem); + tableWidget->setHorizontalHeaderItem(2, cubesHeaderItem); + + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + connect(sumItemsAction, SIGNAL(triggered()), this, SLOT(sumItems())); + connect(averageItemsAction, SIGNAL(triggered()), this, SLOT(averageItems())); + + setupTableItems(); + + setCentralWidget(tableWidget); + setWindowTitle(tr("Table Widget")); +} + +void MainWindow::setupTableItems() +{ + for (int row = 0; row < tableWidget->rowCount()-1; ++row) { + for (int column = 0; column < tableWidget->columnCount(); ++column) { +//! [3] + newItem = QTableWidgetItem(tr("%s" % pow(row, column+1))) + tableWidget.setItem(row, column, newItem) +//! [3] + } + } + for (int column = 0; column < tableWidget->columnCount(); ++column) { + QTableWidgetItem *newItem = new QTableWidgetItem; + newItem->setFlags(Qt::ItemIsEnabled); + tableWidget->setItem(tableWidget->rowCount()-1, column, newItem); + } +} + +void MainWindow::averageItems() +{ + QList selected = tableWidget->selectedItems(); + QTableWidgetItem *item; + int number = 0; + double total = 0; + + foreach (item, selected) { + bool ok; + double value = item->text().toDouble(&ok); + + if (ok && !item->text().isEmpty()) { + total += value; + number++; + } + } + if (number > 0) + tableWidget->currentItem()->setText(QString::number(total/number)); +} + +void MainWindow::sumItems() +{ +//! [4] + QList selected = tableWidget->selectedItems(); + QTableWidgetItem *item; + int number = 0; + double total = 0; + + foreach (item, selected) { + bool ok; + double value = item->text().toDouble(&ok); + + if (ok && !item->text().isEmpty()) { + total += value; + number++; + } + } +//! [4] + if (number > 0) + tableWidget->currentItem()->setText(QString::number(total)); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/mainwindow.h new file mode 100644 index 0000000..9571090 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtablewidget-using/mainwindow.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QAction; +class QTableWidget; +class QTableWidgetItem; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void averageItems(); + void sumItems(); + +private: + void setupTableItems(); + + QAction *removeAction; +//! [0] + QTableWidget *tableWidget; +//! [0] +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtcast/qtcast.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtcast/qtcast.cpp new file mode 100644 index 0000000..88e97f4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtcast/qtcast.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include "qtcast.h" + +MyWidget::MyWidget() +{ +//! [0] + QObject *obj = new MyWidget; +//! [0] + +//! [1] + QWidget *widget = qobject_cast(obj); +//! [1] + +//! [2] + MyWidget *myWidget = qobject_cast(obj); +//! [2] + +//! [3] + QLabel *label = qobject_cast(obj); +//! [3] //! [4] + // label is 0 +//! [4] + +//! [5] + if (QLabel *label = qobject_cast(obj)) { +//! [5] //! [6] + label->setText(tr("Ping")); + } else if (QPushButton *button = qobject_cast(obj)) { + button->setText(tr("Pong!")); + } +//! [6] +} + +int main() +{ + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtcast/qtcast.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtcast/qtcast.h new file mode 100644 index 0000000..eb0278f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtcast/qtcast.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTCAST_H +#define QTCAST_H + +#include + +class MyWidget : public QWidget +{ + Q_OBJECT + +public: + MyWidget(); +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtest-namespace/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtest-namespace/main.cpp new file mode 100644 index 0000000..8661d6e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtest-namespace/main.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + QTest::qSleep(10); + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/dragdropmodel.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/dragdropmodel.h new file mode 100644 index 0000000..6c89f16 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/dragdropmodel.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DRAGDROPMODEL_H +#define DRAGDROPMODEL_H + +#include "treemodel.h" + +class DragDropModel : public TreeModel +{ + Q_OBJECT + +public: + DragDropModel(const QStringList &strings, QObject *parent = 0); + + Qt::ItemFlags flags(const QModelIndex &index) const; + + bool dropMimeData(const QMimeData *data, Qt::DropAction action, + int row, int column, const QModelIndex &parent); + QMimeData *mimeData(const QModelIndexList &indexes) const; + QStringList mimeTypes() const; + Qt::DropActions supportedDropActions() const; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/main.cpp new file mode 100644 index 0000000..e76756f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/mainwindow.cpp new file mode 100644 index 0000000..929f8ee --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/mainwindow.cpp @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" +#include "dragdropmodel.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + menuBar()->addMenu(fileMenu); + +// For convenient quoting: + QTreeView *treeView = new QTreeView(this); + treeView->setSelectionMode(QAbstractItemView::ExtendedSelection); + treeView->setDragEnabled(true); + treeView->setAcceptDrops(true); + treeView->setDropIndicatorShown(true); + + this->treeView = treeView; + + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + + setupItems(); + + setCentralWidget(treeView); + setWindowTitle(tr("Tree View")); +} + +void MainWindow::setupItems() +{ + QStringList items; + items << tr("Widgets\tUser interface objects used to create GUI applications.") + << tr(" QWidget\tThe basic building block for all other widgets.") + << tr(" QDialog\tThe base class for dialog windows.") + << tr("Tools\tUtilities and applications for Qt developers.") + << tr(" Qt Designer\tA GUI form designer for Qt applications.") + << tr(" Qt Assistant\tA documentation browser for Qt documentation."); + + DragDropModel *model = new DragDropModel(items, this); + QModelIndex index = model->index(0, 0, QModelIndex()); + model->insertRows(2, 3, index); + index = model->index(0, 0, QModelIndex()); + index = model->index(2, 0, index); + model->setData(index, QVariant("QFrame")); + model->removeRows(3, 2, index.parent()); + treeView->setModel(model); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/mainwindow.h new file mode 100644 index 0000000..d526dce --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/mainwindow.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QTreeView; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +private: + void setupItems(); + + QTreeView *treeView; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treeitem.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treeitem.cpp new file mode 100644 index 0000000..63270d2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treeitem.cpp @@ -0,0 +1,135 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + treeitem.cpp + + A container for items of data supplied by the simple tree model. +*/ + +#include + +#include "treeitem.h" + +TreeItem::TreeItem(const QList &data, TreeItem *parent) +{ + parentItem = parent; + itemData = data; +} + +TreeItem::~TreeItem() +{ + qDeleteAll(childItems); +} + +void TreeItem::appendChild(TreeItem *item) +{ + childItems.append(item); +} + +TreeItem *TreeItem::child(int row) +{ + return childItems.value(row); +} + +int TreeItem::childCount() const +{ + return childItems.count(); +} + +int TreeItem::columnCount() const +{ + return itemData.count(); +} + +QVariant TreeItem::data(int column) const +{ + return itemData.value(column); +} + +bool TreeItem::insertChild(int row, TreeItem *item) +{ + if (row < 0 || row > childItems.count()) + return false; + + childItems.insert(row, item); + return true; +} + +TreeItem *TreeItem::parent() +{ + return parentItem; +} + +bool TreeItem::removeChild(int row) +{ + if (row < 0 || row >= childItems.count()) + return false; + + delete childItems.takeAt(row); + return true; +} + +int TreeItem::row() const +{ + if (parentItem) + return parentItem->childItems.indexOf(const_cast(this)); + + return 0; +} + +bool TreeItem::setData(int column, const QVariant &data) +{ + if (column < 0 || column >= itemData.count()) + return false; + + itemData.replace(column, data); + return true; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treeitem.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treeitem.h new file mode 100644 index 0000000..4f3a167 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treeitem.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TREEITEM_H +#define TREEITEM_H + +#include +#include + +class TreeItem +{ +public: + TreeItem(const QList &data, TreeItem *parent = 0); + ~TreeItem(); + + void appendChild(TreeItem *child); + + TreeItem *child(int row); + int childCount() const; + int columnCount() const; + QVariant data(int column) const; + bool insertChild(int row, TreeItem *item); + TreeItem *parent(); + bool removeChild(int row); + int row() const; + bool setData(int column, const QVariant &data); + +private: + QList childItems; + QList itemData; + TreeItem *parentItem; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treemodel.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treemodel.cpp new file mode 100644 index 0000000..731a778 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treemodel.cpp @@ -0,0 +1,272 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + treemodel.cpp + + Provides a simple tree model to show how to create and use hierarchical + models. +*/ + +#include + +#include "treeitem.h" +#include "treemodel.h" + +TreeModel::TreeModel(const QStringList &strings, QObject *parent) + : QAbstractItemModel(parent) +{ + QList rootData; + rootData << "Title" << "Summary"; + rootItem = new TreeItem(rootData); + setupModelData(strings, rootItem); +} + +TreeModel::~TreeModel() +{ + delete rootItem; +} + +int TreeModel::columnCount(const QModelIndex &parent) const +{ + if (parent.isValid()) + return static_cast(parent.internalPointer())->columnCount(); + else + return rootItem->columnCount(); +} + +QVariant TreeModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (role != Qt::DisplayRole) + return QVariant(); + + TreeItem *item = static_cast(index.internalPointer()); + + return item->data(index.column()); +} + +Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + return Qt::ItemIsEnabled; + + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; +} + +QVariant TreeModel::headerData(int section, Qt::Orientation orientation, + int role) const +{ + if (orientation == Qt::Horizontal && role == Qt::DisplayRole) + return rootItem->data(section); + + return QVariant(); +} + +QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) + const +{ + TreeItem *parentItem; + + if (!parent.isValid()) + parentItem = rootItem; + else + parentItem = static_cast(parent.internalPointer()); + + TreeItem *childItem = parentItem->child(row); + if (childItem) + return createIndex(row, column, childItem); + else + return QModelIndex(); +} + +bool TreeModel::insertRows(int position, int rows, const QModelIndex &parent) +{ + TreeItem *parentItem; + + if (!parent.isValid()) + parentItem = rootItem; + else + parentItem = static_cast(parent.internalPointer()); + + if (position < 0 || position > parentItem->childCount()) + return false; + + QList blankList; + for (int column = 0; column < columnCount(); ++column) + blankList << QVariant(""); + + beginInsertRows(parent, position, position + rows - 1); + + for (int row = 0; row < rows; ++row) { + TreeItem *newItem = new TreeItem(blankList, parentItem); + if (!parentItem->insertChild(position, newItem)) + break; + } + + endInsertRows(); + return true; +} + +QModelIndex TreeModel::parent(const QModelIndex &index) const +{ + if (!index.isValid()) + return QModelIndex(); + + TreeItem *childItem = static_cast(index.internalPointer()); + TreeItem *parentItem = childItem->parent(); + + if (parentItem == rootItem) + return QModelIndex(); + + return createIndex(parentItem->row(), 0, parentItem); +} + +bool TreeModel::removeRows(int position, int rows, const QModelIndex &parent) +{ + TreeItem *parentItem; + + if (!parent.isValid()) + parentItem = rootItem; + else + parentItem = static_cast(parent.internalPointer()); + + if (position < 0 || position > parentItem->childCount()) + return false; + + beginRemoveRows(parent, position, position + rows - 1); + + for (int row = 0; row < rows; ++row) { + if (!parentItem->removeChild(position)) + break; + } + + endRemoveRows(); + return true; +} + +int TreeModel::rowCount(const QModelIndex &parent) const +{ + TreeItem *parentItem; + + if (!parent.isValid()) + parentItem = rootItem; + else + parentItem = static_cast(parent.internalPointer()); + + return parentItem->childCount(); +} + +bool TreeModel::setData(const QModelIndex &index, + const QVariant &value, int role) +{ + if (!index.isValid() || role != Qt::EditRole) + return false; + + TreeItem *item = static_cast(index.internalPointer()); + + if (item->setData(index.column(), value)) + emit dataChanged(index, index); + else + return false; + + return true; +} + +void TreeModel::setupModelData(const QStringList &lines, TreeItem *parent) +{ + QList parents; + QList indentations; + parents << parent; + indentations << 0; + + int number = 0; + + while (number < lines.count()) { + int position = 0; + while (position < lines[number].length()) { + if (lines[number].mid(position, 1) != " ") + break; + position++; + } + + QString lineData = lines[number].mid(position).trimmed(); + + if (!lineData.isEmpty()) { + // Read the column data from the rest of the line. + QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts); + QList columnData; + for (int column = 0; column < columnStrings.count(); ++column) + columnData << columnStrings[column]; + + if (position > indentations.last()) { + // The last child of the current parent is now the new parent + // unless the current parent has no children. + + if (parents.last()->childCount() > 0) { + parents << parents.last()->child(parents.last()->childCount()-1); + indentations << position; + } + } else { + while (position < indentations.last() && parents.count() > 0) { + parents.pop_back(); + indentations.pop_back(); + } + } + + // Append a new item to the current parent's list of children. + parents.last()->appendChild(new TreeItem(columnData, parents.last())); + } + + number++; + } +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treemodel.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treemodel.h new file mode 100644 index 0000000..faf970e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreeview-dnd/treemodel.h @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TREEMODEL_H +#define TREEMODEL_H + +#include +#include +#include + +class TreeItem; + +class TreeModel : public QAbstractItemModel +{ + Q_OBJECT + +public: + TreeModel(const QStringList &strings, QObject *parent = 0); + ~TreeModel(); + + QVariant data(const QModelIndex &index, int role) const; + Qt::ItemFlags flags(const QModelIndex &index) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + QModelIndex index(int row, int column, + const QModelIndex &parent = QModelIndex()) const; + QModelIndex parent(const QModelIndex &index) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + + bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::EditRole); + +private: + void setupModelData(const QStringList &lines, TreeItem *parent); + + TreeItem *rootItem; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidget-using/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidget-using/main.cpp new file mode 100644 index 0000000..e76756f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidget-using/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidget-using/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidget-using/mainwindow.cpp new file mode 100644 index 0000000..c7b355c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidget-using/mainwindow.cpp @@ -0,0 +1,111 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] + treeWidget = QTreeWidget(self) +//! [0] + +//! [1] + treeWidget.setColumnCount(2) +//! [1] //! [2] + headers = QStringList() + headers << tr("Subject") << tr("Default") + treeWidget.setHeaderLabels(headers) +//! [2] + +//! [3] + cities = QTreeWidgetItem(treeWidget) + cities.setText(0, tr("Cities")) + osloItem = QTreeWidgetItem(cities) + osloItem.setText(0, tr("Oslo")) + osloItem.setText(1, tr("Yes")) +//! [3] + +//! [4] //! [5] + planets = QTreeWidgetItem(treeWidget, cities) +//! [4] + planets.setText(0, tr("Planets")) +//! [5] + +//! [6] + item = QTreeWidgetItem() +//! [6] + +//! [7] + found = treeWidget.findItems(itemText, Qt.MatchWildcard) + + for item in found: + treeWidget.setItemSelected(item, True) + # Show the item.text(0) for each item. + +//! [7] + +//! [8] + parent = currentItem.parent() + if parent: + Item = QTreeWidgetItem(parent, treeWidget.currentItem()) + else +//! [8] //! [9] + Item = QTreeWidgetItem(treeWidget, treeWidget.currentItem()) +//! [9] + +//! [10] + parent = currentItem.parent() + + if parent: + index = parent.indexOfChild(treeWidget->currentItem()) + delete parent.takeChild(index) + else: + index = treeWidget.indexOfTopLevelItem(treeWidget->currentItem()) + delete treeWidget.takeTopLevelItem(index) +//! [10] //! [11] + +//! [11] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidget-using/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidget-using/mainwindow.h new file mode 100644 index 0000000..876ceba --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidget-using/mainwindow.h @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QAction; +class QTreeWidget; +class QTreeWidgetItem; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void findItems(); + void insertItem(); + void removeItem(); + void sortAscending(); + void sortDescending(); + void updateMenus(QTreeWidgetItem *current); + void updateSortItems(); + +private: + void setupTreeItems(); + + QAction *ascendingAction; + QAction *autoSortAction; + QAction *descendingAction; + QAction *insertAction; + QAction *removeAction; + QTreeWidget *treeWidget; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidgetitemiterator-using/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidgetitemiterator-using/main.cpp new file mode 100644 index 0000000..e76756f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidgetitemiterator-using/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidgetitemiterator-using/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidgetitemiterator-using/mainwindow.cpp new file mode 100644 index 0000000..3cbe3e6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidgetitemiterator-using/mainwindow.cpp @@ -0,0 +1,59 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + + +//! [0] + it = QTreeWidgetItemIterator(treeWidget) + while it: + if it.text(0) == itemText: + *it.setSelected(True) + ++it +//! [0] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidgetitemiterator-using/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidgetitemiterator-using/mainwindow.h new file mode 100644 index 0000000..876ceba --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtreewidgetitemiterator-using/mainwindow.h @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QAction; +class QTreeWidget; +class QTreeWidgetItem; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void findItems(); + void insertItem(); + void removeItem(); + void sortAscending(); + void sortDescending(); + void updateMenus(QTreeWidgetItem *current); + void updateSortItems(); + +private: + void setupTreeItems(); + + QAction *ascendingAction; + QAction *autoSortAction; + QAction *descendingAction; + QAction *insertAction; + QAction *removeAction; + QTreeWidget *treeWidget; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/evaluation/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/evaluation/main.cpp new file mode 100644 index 0000000..d7fcc83 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/evaluation/main.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ +//! [0] + QScriptEngine engine; + qDebug() << "the magic number is:" << engine.evaluate("1 + 2").toNumber(); +//! [0] + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringobjects/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringobjects/main.cpp new file mode 100644 index 0000000..afd3da8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringobjects/main.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include "myobject.h" + +int main(int argc, char *argv[]) +{ +//! [0] + QScriptEngine engine; + QObject *someObject = new MyObject; + QScriptValue objectValue = engine.newQObject(someObject); + engine.globalObject().setProperty("myObject", objectValue); +//! [0] + qDebug() << "myObject's calculate() function returns" + << engine.evaluate("myObject.calculate(10)").toNumber(); + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringobjects/myobject.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringobjects/myobject.cpp new file mode 100644 index 0000000..f6a795e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringobjects/myobject.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "myobject.h" + +MyObject::MyObject() +{ +} + +int MyObject::calculate(int value) const +{ + int total = 0; + for (int i = 0; i <= value; ++i) + total += i; + return total; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringobjects/myobject.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringobjects/myobject.h new file mode 100644 index 0000000..fa86f16 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringobjects/myobject.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MYOBJECT_H +#define MYOBJECT_H + +#include + +class MyObject : public QObject +{ + Q_OBJECT + +public: + MyObject(); + +public slots: + int calculate(int value) const; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringvalues/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringvalues/main.cpp new file mode 100644 index 0000000..8712164 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/registeringvalues/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + QScriptEngine engine; +//! [0] + engine.globalObject().setProperty("foo", 123); + qDebug() << "foo times two is:" << engine.evaluate("foo * 2").toNumber(); +//! [0] + return 0; +} + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/scriptedslot/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/scriptedslot/main.cpp new file mode 100644 index 0000000..4f1e578 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/scriptedslot/main.cpp @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include "myobject.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QScriptEngine engine; + QFile scriptFile(":/object.js"); + scriptFile.open(QFile::ReadOnly); + engine.evaluate(scriptFile.readAll()); + scriptFile.close(); + + QTextEdit editor; + QTimer timer; + QScriptValue constructor = engine.evaluate("Object"); + QScriptValueList arguments; + arguments << engine.newQObject(&timer); + arguments << engine.newQObject(&editor); + QScriptValue object = constructor.construct(arguments); + if (engine.hasUncaughtException()) { + qDebug() << engine.uncaughtException().toString(); + } + + editor.show(); + timer.start(1000); + + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/scriptedslot/object.js b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/scriptedslot/object.js new file mode 100644 index 0000000..44ad0e6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/scriptedslot/object.js @@ -0,0 +1,18 @@ +function Object(timer, editor) +{ + this.editor = editor; + this.counter = 0; + timer.timeout.connect(notify); + timer.timeout.connect(this, this.addLine); +} + +Object.prototype.addLine = function() +{ + this.editor.append(this.counter); + this.counter += 1; +} + +function notify() +{ + print("timeout() received"); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/scriptedslot/scriptedslot.qrc b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/scriptedslot/scriptedslot.qrc new file mode 100644 index 0000000..fc7ff67 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qtscript/scriptedslot/scriptedslot.qrc @@ -0,0 +1,5 @@ + + + object.js + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/doc_src_qtuiloader.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/doc_src_qtuiloader.cpp new file mode 100644 index 0000000..141189a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/doc_src_qtuiloader.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [1] +import PySide2.QtUiTools +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/main.cpp new file mode 100644 index 0000000..53684a4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/main.cpp @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include "mywidget.h" + +//! [0] +def loadCustomWidget(parent): + loader = QUiLoader() + + availableWidgets = loader.availableWidgets() + + if availableWidgets.contains("AnalogClock"): + myWidget = loader.createWidget("AnalogClock", parent) + + return myWidget +//! [0] + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MyWidget widget; + widget.show(); + + QWidget *customWidget = loadCustomWidget(0); + customWidget->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/myform.ui b/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/myform.ui new file mode 100644 index 0000000..00702e8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/myform.ui @@ -0,0 +1,130 @@ + + + + + Form + + + + 0 + 0 + 258 + 224 + + + + Export Document + + + + 8 + + + 6 + + + + + Export Options + + + + 8 + + + 6 + + + + + &DocBook + + + + + + + &LaTeX + + + true + + + + + + + Include p&ictures + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + &Compress + + + + + + + &HTML + + + + + + + &PostScript + + + + + + + PD&F + + + + + + + Include &metadata + + + + + + + Create inde&x + + + true + + + + + + + + + + + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/mywidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/mywidget.cpp new file mode 100644 index 0000000..351678a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/mywidget.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include "mywidget.h" + +//! [0] +class MyWidget(QWidget): + def __init__(self, parent): + super(QWidget, self).__init__(parent) + loader = QUiLoader() + file = QFile(":/forms/myform.ui") + file.open(QFile.ReadOnly) + myWidget = loader.load(file, self) + file.close() + + layout = QVBoxLayout() + layout.addWidget(myWidget) + self.setLayout(layout) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/mywidget.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/mywidget.h new file mode 100644 index 0000000..66e9235 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/mywidget.h @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MYWIDGET_H +#define MYWIDGET_H + +#include + +class MyWidget : public QWidget +{ +public: + MyWidget(QWidget *parent = 0); +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/mywidget.qrc b/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/mywidget.qrc new file mode 100644 index 0000000..47684d6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/quiloader/mywidget.qrc @@ -0,0 +1,5 @@ + + +myform.ui + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedcontainer/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedcontainer/main.cpp new file mode 100644 index 0000000..c23e2e8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedcontainer/main.cpp @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +//! [0] +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + if (app.arguments().count() != 2) { + qFatal("Error - expected executable path as argument"); + return 1; + } + + QX11EmbedContainer container; + container.show(); + + QProcess process(&container); + QString executable(app.arguments()[1]); + QStringList arguments; + arguments << QString::number(container.winId()); + process.start(executable, arguments); + + int status = app.exec(); + process.close(); + return status; +} +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedwidget/embedwidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedwidget/embedwidget.cpp new file mode 100644 index 0000000..cd1fbe7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedwidget/embedwidget.cpp @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "embedwidget.h" + +EmbedWidget::EmbedWidget(QWidget *parent) + : QX11EmbedWidget(parent) +{ + gradient = QRadialGradient(100, 100, 90, 60, 60); + gradient.setColorAt(0.0, Qt::white); + gradient.setColorAt(0.9, QColor(192, 192, 255)); + gradient.setColorAt(1.0, QColor(0, 32, 64)); +} + +QSize EmbedWidget::sizeHint() const +{ + return QSize(200, 200); +} + +void EmbedWidget::paintEvent(QPaintEvent *event) +{ + QPainter painter; + painter.begin(this); + painter.setRenderHint(QPainter::Antialiasing); + painter.fillRect(event->rect(), QBrush(gradient)); + painter.end(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedwidget/embedwidget.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedwidget/embedwidget.h new file mode 100644 index 0000000..1d54f70 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedwidget/embedwidget.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef EMBEDWIDGET_H +#define EMBEDWIDGET_H + +#include +#include +#include + +class QPaintEvent; + +class EmbedWidget : public QX11EmbedWidget +{ + Q_OBJECT + +public: + EmbedWidget(QWidget *parent = 0); + QSize sizeHint() const; + +protected: + void paintEvent(QPaintEvent *event); + +private: + QRadialGradient gradient; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedwidget/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedwidget/main.cpp new file mode 100644 index 0000000..c6f6443 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qx11embedwidget/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "embedwidget.h" + +//! [0] +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + if (app.arguments().count() != 2) { + qFatal("Error - expected window id as argument"); + return 1; + } + + QString windowId(app.arguments()[1]); + EmbedWidget window; + window.embedInto(windowId.toULong()); + window.show(); + + return app.exec(); +} +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlquery/bindingExample.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlquery/bindingExample.cpp new file mode 100644 index 0000000..734f603 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlquery/bindingExample.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + QBuffer device; + device.setData(myQString.toUtf8()); + device.open(QIODevice::ReadOnly); + + QXmlQuery query; + query.setQuery("doc($inputDocument)/query[theDocument]"); + query.bindVariable("inputDocument", &device); +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlschema/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlschema/main.cpp new file mode 100644 index 0000000..7001445 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlschema/main.cpp @@ -0,0 +1,124 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +class Schema +{ + public: + void loadFromUrl() const; + void loadFromFile() const; + void loadFromData() const; +}; + +void Schema::loadFromUrl() const +{ +//! [0] + url = QUrl("http://www.schema-example.org/myschema.xsd") + + schema = QXmlSchema() + if schema.load(url): + qDebug("schema is valid") + else: + qDebug("schema is invalid") +//! [0] +} + +void Schema::loadFromFile() const +{ +//! [1] + file = QFile("myschema.xsd") + file.open(QIODevice.ReadOnly) + + schema = QXmlSchema() + schema.load(file, QUrl.fromLocalFile(file.fileName())) + + if schema.isValid(): + qDebug("schema is valid") + else: + qDebug("schema is invalid") +//! [1] +} + +void Schema::loadFromData() const +{ +//! [2] + data = QByteArray("" + + "" + + "" ) + + schema = QXmlSchema() + schema.load(data) + + if schema.isValid(): + qDebug("schema is valid") + else: + qDebug("schema is invalid") +//! [2] +} + +int main(int argc, char **argv) +{ + QCoreApplication app(argc, argv); + + Schema schema; + + schema.loadFromUrl(); + schema.loadFromFile(); + schema.loadFromData(); + + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlschemavalidator/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlschemavalidator/main.cpp new file mode 100644 index 0000000..0d81b91 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlschemavalidator/main.cpp @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +def validateFromUrl(): +//! [0] + schema = getSchema() + + url = QUrl("http://www.schema-example.org/test.xml") + + validator = QXmlSchemaValidator(schema) + if validator.validate(url): + print "instance document is valid" + else: + print "instance document is invalid" +//! [0] + +def validateFromFile(): +//! [1] + schema = getSchema() + + file = QFile("test.xml") + file.open(QIODevice.ReadOnly) + + validator = QXmlSchemaValidator(schema) + if validator.validate(file, QUrl.fromLocalFile(file.fileName())): + print "instance document is valid" + else: + print "instance document is invalid" +//! [1] +} + +def validateFromData(): +//! [2] + schema = getSchema() + + data = QByteArray("") + + buffer = QBuffer(data) + buffer.open(QIODevice.ReadOnly) + + QXmlSchemaValidator validator(schema) + if validator.validate(buffer): + print "instance document is valid" + else: + print "instance document is invalid" +//! [2] + +def validateComplete(): +//! [3] + schemaUrl = QUrl("file:///home/user/schema.xsd") + + schema = QXmlSchema() + schema.load(schemaUrl) + + if schema.isValid(): + file = QFile("test.xml") + file.open(QIODevice.ReadOnly) + + validator = QXmlSchemaValidator(schema) + if validator.validate(file, QUrl.fromLocalFile(file.fileName())): + print "instance document is valid" + else: + print "instance document is invalid" + } +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlstreamwriter/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlstreamwriter/main.cpp new file mode 100644 index 0000000..3649f0f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/qxmlstreamwriter/main.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + QFile output; + output.open(stdout, QIODevice::WriteOnly); +//! [write output] +//! [start stream] + QXmlStreamWriter stream(&output); + stream.setAutoFormatting(true); + stream.writeStartDocument(); +//! [start stream] + stream.writeDTD(""); + stream.writeStartElement("xbel"); + stream.writeAttribute("version", "1.0"); + stream.writeStartElement("folder"); + stream.writeAttribute("folded", "no"); +//! [write element] + stream.writeStartElement("bookmark"); + stream.writeAttribute("href", "http://qt-project.org/"); + stream.writeTextElement("title", "Qt Home"); + stream.writeEndElement(); // bookmark +//! [write element] + stream.writeEndElement(); // folder + stream.writeEndElement(); // xbel +//! [finish stream] + stream.writeEndDocument(); +//! [finish stream] +//! [write output] + output.close(); + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/main.cpp new file mode 100644 index 0000000..3ae4962 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/main.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + main.cpp + + A simple example that shows how selections can be used directly on a model. + It shows the result of some selections made using a table view. +*/ + +#include + +#include "window.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QMainWindow *window = new MainWindow; + window->show(); + window->resize(640, 480); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/model.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/model.h new file mode 100644 index 0000000..6b40768 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/model.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODEL_H +#define MODEL_H + +#include +#include +#include + +class TableModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + TableModel(int rows = 1, int columns = 1, QObject *parent = 0); + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::EditRole); + + bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool insertColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + +private: + QList rowList; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/window.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/window.cpp new file mode 100644 index 0000000..269a18d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/window.cpp @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + window.cpp + + A minimal subclass of QTableView with slots to allow the selection model + to be monitored. +*/ + +#include +#include +#include +#include +#include +#include + +#include "model.h" +#include "window.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) +{ + setWindowTitle("Selected Items in a Table Model"); + + model = new TableModel(8, 4, this); + + table = new QTableView(this); + table->setModel(model); + + QMenu *actionMenu = new QMenu(tr("&Actions"), this); + QAction *fillAction = actionMenu->addAction(tr("&Fill Selection")); + QAction *clearAction = actionMenu->addAction(tr("&Clear Selection")); + QAction *selectAllAction = actionMenu->addAction(tr("&Select All")); + menuBar()->addMenu(actionMenu); + + connect(fillAction, SIGNAL(triggered()), this, SLOT(fillSelection())); + connect(clearAction, SIGNAL(triggered()), this, SLOT(clearSelection())); + connect(selectAllAction, SIGNAL(triggered()), this, SLOT(selectAll())); + + selectionModel = table->selectionModel(); + + statusBar(); + setCentralWidget(table); +} + +void MainWindow::fillSelection() +{ +//! [0] + QModelIndexList indexes = selectionModel->selectedIndexes(); + QModelIndex index; + + foreach(index, indexes) { + QString text = QString("(%1,%2)").arg(index.row()).arg(index.column()); + model->setData(index, text); + } +//! [0] +} + +void MainWindow::clearSelection() +{ + QModelIndexList indexes = selectionModel->selectedIndexes(); + QModelIndex index; + + foreach(index, indexes) + model->setData(index, ""); +} + +void MainWindow::selectAll() +{ +//! [1] + QModelIndex parent = QModelIndex(); +//! [1] //! [2] + QModelIndex topLeft = model->index(0, 0, parent); + QModelIndex bottomRight = model->index(model->rowCount(parent)-1, + model->columnCount(parent)-1, parent); +//! [2] + +//! [3] + QItemSelection selection(topLeft, bottomRight); + selectionModel->select(selection, QItemSelectionModel::Select); +//! [3] +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/window.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/window.h new file mode 100644 index 0000000..7bebf72 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/reading-selections/window.h @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include +#include +#include +#include + +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + MainWindow(QWidget *parent = 0); + +private slots: + void fillSelection(); + void clearSelection(); + void selectAll(); + +private: + QAbstractItemModel *model; + QItemSelectionModel *selectionModel; + QTableView *table; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/scribe-overview/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/scribe-overview/main.cpp new file mode 100644 index 0000000..5f94ded --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/scribe-overview/main.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +from PySide2.QtGui import * + +# edit : QTextEdit +def mergeFormat(edit): +//! [0] + document = edit.document() + cursor = QTextCursor(document) + + cursor.movePosition(QTextCursor.Start) + cursor.movePosition(QTextCursor.EndOfLine, QTextCursor.KeepAnchor) + + format = QTextCharFormat() + format.setFontWeight(QFont.Bold) + + cursor.mergeCharFormat(format) +//! [0] + +def main(): + aStringContainingHTMLtext QString("

Scribe Overview

") + + app = QApplication(sys.argv) + +//! [1] + editor = QTextEdit(None) + editor.setHtml(aStringContainingHTMLtext) + editor.show() +//! [1] + + return app.exec_() + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/scriptdebugger.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/scriptdebugger.cpp new file mode 100644 index 0000000..83b5fb2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/scriptdebugger.cpp @@ -0,0 +1,113 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +// Perhaps shpw entire example for getting debugger up with script +int main(int argv, char **args) +{ + QApplication app(argv, args); + + QString fileName("helloscript.qs"); + QFile scriptFile(fileName); + scriptFile.open(QIODevice::ReadOnly); + QTextStream stream(&scriptFile); + QString contents = stream.readAll(); + scriptFile.close(); + + QScriptEngine *engine = new QScriptEngine(); + + QScriptEngineDebugger *debugger = new QScriptEngineDebugger(); + debugger->attachTo(engine); + + // Set up configuration with only stack and code + QWidget *widget = new QWidget; +//![0] + codeWindow = debugger.widget(QScriptEngineDebugger.CodeWidget) + stackWidget = debugger.widget(QScriptEngineDebugger.StackWidget) + + layout = QHBoxLayout() + layout.addWidget(codeWindow) + layout.addWidget(stackWidget) +//![0] + +//![1] + continueAction = debugger.action(QScriptEngineDebugger.ContinueAction) + stepOverAction = debugger.action(QScriptEngineDebugger.StepOverAction) + stepIntoAction = debugger.action(QScriptEngineDebugger.StepIntoAction) + + toolBar = QToolBar() + toolBar.addAction(continueAction) +//![1] + toolBar->addAction(stepOverAction); + toolBar->addAction(stepIntoAction); + + layout->addWidget(toolBar); + continueAction->setIcon(QIcon("copy.png")); + + debugger->setAutoShowStandardWindow(false); + + widget->setLayout(layout); + widget->show(); + + QPushButton button; + QScriptValue scriptButton = engine->newQObject(&button); + engine->globalObject().setProperty("button", scriptButton); + +//![2] + debugger.action(QScriptEngineDebugger.InterruptAction).trigger() + engine.evaluate(contents, fileName) +//![2] + + return app.exec(); +} + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/finalwidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/finalwidget.cpp new file mode 100644 index 0000000..d9b5a78 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/finalwidget.cpp @@ -0,0 +1,136 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* +finalwidget.cpp + +A widget to display an image and a label containing a description. +*/ + +#include +#include "finalwidget.h" + +FinalWidget::FinalWidget(QWidget *parent, const QString &name, + const QSize &labelSize) + : QFrame(parent) +{ + hasImage = false; + imageLabel = new QLabel; + imageLabel->setFrameShadow(QFrame::Sunken); + imageLabel->setFrameShape(QFrame::StyledPanel); + imageLabel->setMinimumSize(labelSize); + nameLabel = new QLabel(name); + + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget(imageLabel, 1); + layout->addWidget(nameLabel, 0); + setLayout(layout); +} + +/*! + If the mouse moves far enough when the left mouse button is held down, + start a drag and drop operation. +*/ + +void FinalWidget::mouseMoveEvent(QMouseEvent *event) +{ + if (!(event->buttons() & Qt::LeftButton)) + return; + if ((event->pos() - dragStartPosition).manhattanLength() + < QApplication::startDragDistance()) + return; + if (!hasImage) + return; + + QDrag *drag = new QDrag(this); + QMimeData *mimeData = new QMimeData; + +//! [0] + output = QByteArray() + outputBuffer = QBuffer(output) + outputBuffer.open(QIODevice.WriteOnly) + imageLabel.pixmap().toImage().save(outputBuffer, "PNG") + mimeData.setData("image/png", output) +//! [0] +/* +//! [1] + mimeData.setImageData(QVariant(imageLabel.pixmap())) +//! [1] +*/ + drag.setMimeData(mimeData) + drag.setPixmap(imageLabel.pixmap().scaled(64, 64, Qt.KeepAspectRatio)) +//! [2] + drag.setHotSpot(QPoint(drag.pixmap().width()/2, + drag.pixmap().height())) +//! [2] + + drag->start(); +} + +/*! + Check for left mouse button presses in order to enable drag and drop. +*/ + +void FinalWidget::mousePressEvent(QMouseEvent *event) +{ + if (event->button() == Qt::LeftButton) + dragStartPosition = event->pos(); +} + +const QPixmap* FinalWidget::pixmap() const +{ + return imageLabel->pixmap(); +} + +void FinalWidget::setPixmap(const QPixmap &pixmap) +{ + imageLabel->setPixmap(pixmap); + hasImage = true; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/finalwidget.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/finalwidget.h new file mode 100644 index 0000000..2b40e76 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/finalwidget.h @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef FINALWIDGET_H +#define FINALWIDGET_H + +#include +#include +#include +#include + +class QGridLayout; +class QLabel; +class QMouseEvent; +class QWidget; + +class FinalWidget : public QFrame +{ + Q_OBJECT + +public: + FinalWidget(QWidget *parent, const QString &name, const QSize &labelSize); + void setPixmap(const QPixmap &pixmap); + const QPixmap *pixmap() const; + +protected: + void mouseMoveEvent(QMouseEvent *event); + void mousePressEvent(QMouseEvent *event); + +private: + void createImage(); + + bool hasImage; + QImage originalImage; + QLabel *imageLabel; + QLabel *nameLabel; + QPoint dragStartPosition; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/main.cpp new file mode 100644 index 0000000..f2ea7f2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/main.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "viewer.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Viewer viewer; + viewer.show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/screenwidget.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/screenwidget.cpp new file mode 100644 index 0000000..5f0bd6f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/screenwidget.cpp @@ -0,0 +1,227 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* +screenwidget.cpp + +A widget to display colour components from an image using independently +selected colors. Controls are provided to allow the image to be inverted, and +the color to be selection via a standard dialog. The image is displayed in a +label widget. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "screenwidget.h" + +/*! +Initializes the paint color, the mask color (cyan, magenta, +or yellow), connects the color selector and invert checkbox to functions, +and creates a two-by-two grid layout. +*/ + +ScreenWidget::ScreenWidget(QWidget *parent, QColor initialColor, + const QString &name, Separation mask, + const QSize &labelSize) + : QFrame(parent) +{ + paintColor = initialColor; + maskColor = mask; + inverted = false; + + imageLabel = new QLabel; + imageLabel->setFrameShadow(QFrame::Sunken); + imageLabel->setFrameShape(QFrame::StyledPanel); + imageLabel->setMinimumSize(labelSize); + + nameLabel = new QLabel(name); + colorButton = new QPushButton(tr("Modify...")); + colorButton->setBackgroundRole(QPalette::Button); + colorButton->setMinimumSize(32, 32); + + QPalette palette(colorButton->palette()); + palette.setColor(QPalette::Button, initialColor); + colorButton->setPalette(palette); + + invertButton = new QPushButton(tr("Invert")); + //invertButton->setToggleButton(true); + //invertButton->setOn(inverted); + invertButton->setEnabled(false); + + connect(colorButton, SIGNAL(clicked()), this, SLOT(setColor())); + connect(invertButton, SIGNAL(clicked()), this, SLOT(invertImage())); + + QGridLayout *gridLayout = new QGridLayout; + gridLayout->addWidget(imageLabel, 0, 0, 1, 2); + gridLayout->addWidget(nameLabel, 1, 0); + gridLayout->addWidget(colorButton, 1, 1); + gridLayout->addWidget(invertButton, 2, 1, 1, 1); + setLayout(gridLayout); +} + +/*! + Creates a new image by separating out the cyan, magenta, or yellow + component, depending on the mask color specified in the constructor. + + The amount of the component found in each pixel of the image is used + to determine how much of a user-selected ink is used for each pixel + in the new image for the label widget. +*/ + +void ScreenWidget::createImage() +{ + newImage = originalImage.copy(); + + // Create CMY components for the ink being used. + float cyanInk = (255 - paintColor.red())/255.0; + float magentaInk = (255 - paintColor.green())/255.0; + float yellowInk = (255 - paintColor.blue())/255.0; + + int (*convert)(QRgb); + + switch (maskColor) { + case Cyan: + convert = qRed; + break; + case Magenta: + convert = qGreen; + break; + case Yellow: + convert = qBlue; + break; + } + + for (int y = 0; y < newImage.height(); ++y) { + for (int x = 0; x < newImage.width(); ++x) { + QRgb p(originalImage.pixel(x, y)); + + // Separate the source pixel into its cyan component. + int amount; + + if (inverted) + amount = convert(p); + else + amount = 255 - convert(p); + + QColor newColor( + 255 - qMin(int(amount * cyanInk), 255), + 255 - qMin(int(amount * magentaInk), 255), + 255 - qMin(int(amount * yellowInk), 255)); + + newImage.setPixel(x, y, newColor.rgb()); + } + } + + imageLabel->setPixmap(QPixmap::fromImage(newImage)); +} + +/*! + Returns a pointer to the modified image. +*/ + +QImage* ScreenWidget::image() +{ + return &newImage; +} + +/*! + Sets whether the amount of ink applied to the canvas is to be inverted + (subtracted from the maximum value) before the ink is applied. +*/ + +void ScreenWidget::invertImage() +{ + //inverted = invertButton->isOn(); + inverted = !inverted; + createImage(); + emit imageChanged(); +} + +/*! + Separate the current image into cyan, magenta, and yellow components. + Create a representation of how each component might appear when applied + to a blank white piece of paper. +*/ + +void ScreenWidget::setColor() +{ + QColor newColor = QColorDialog::getColor(paintColor); + + if (newColor.isValid()) { + paintColor = newColor; + QPalette palette(colorButton->palette()); + palette.setColor(QPalette::Button, paintColor); + colorButton->setPalette(palette); + createImage(); + emit imageChanged(); + } +} + +/*! + Records the original image selected by the user, creates a color + separation, and enables the invert image checkbox. +*/ + +void ScreenWidget::setImage(QImage &image) +{ + originalImage = image; + createImage(); + invertButton->setEnabled(true); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/screenwidget.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/screenwidget.h new file mode 100644 index 0000000..2991e75 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/screenwidget.h @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SCREENWIDGET_H +#define SCREENWIDGET_H + +#include +#include +#include +#include + +class QGridLayout; +class QLabel; +class QPushButton; +class QWidget; + +class ScreenWidget : public QFrame +{ + Q_OBJECT +public: + enum Separation { Cyan, Magenta, Yellow }; + + ScreenWidget(QWidget *parent, QColor initialColor, const QString &name, + Separation mask, const QSize &labelSize); + void setImage(QImage &image); + QImage* image(); + +signals: + void imageChanged(); + +public slots: + void setColor(); + void invertImage(); + +private: + void createImage(); + + bool inverted; + QColor paintColor; + QImage newImage; + QImage originalImage; + QLabel *imageLabel; + QLabel *nameLabel; + QPushButton *colorButton; + QPushButton *invertButton; + Separation maskColor; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/viewer.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/viewer.cpp new file mode 100644 index 0000000..008279c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/viewer.cpp @@ -0,0 +1,338 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* +viewer.cpp + +Provides a main window for displaying a user-specified original image +with three color separations in a grid layout. + +A main menu provides entries for selecting files, and adjusting the +brightness of the separations. +*/ + +#include + +#include "finalwidget.h" +#include "screenwidget.h" +#include "viewer.h" + +/* + Constructor: initializes a default value for the brightness, creates + the main menu entries, and constructs a central widget that contains + enough space for images to be displayed. +*/ + +Viewer::Viewer() +{ + setWindowTitle(tr("QImage Color Separations")); + + brightness = 255; + + createMenus(); + setCentralWidget(createCentralWidget()); +} + +/* + Creates a main menu with two entries: a File menu, to allow the image + to be selected, and a Brightness menu to allow the brightness of the + separations to be changed. + + Initially, the Brightness menu items are disabled, but the first entry in + the menu is checked to reflect the default brightness. +*/ + +void Viewer::createMenus() +{ + fileMenu = new QMenu(tr("&File"), this); + brightnessMenu = new QMenu(tr("&Brightness"), this); + + QAction *openAction = fileMenu->addAction(tr("&Open...")); + openAction->setShortcut(QKeySequence("Ctrl+O")); + saveAction = fileMenu->addAction(tr("&Save...")); + saveAction->setShortcut(QKeySequence("Ctrl+S")); + saveAction->setEnabled(false); + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(QKeySequence("Ctrl+Q")); + + QAction *noBrightness = brightnessMenu->addAction(tr("&0%")); + noBrightness->setCheckable(true); + QAction *quarterBrightness = brightnessMenu->addAction(tr("&25%")); + quarterBrightness->setCheckable(true); + QAction *halfBrightness = brightnessMenu->addAction(tr("&50%")); + halfBrightness->setCheckable(true); + QAction *threeQuartersBrightness = brightnessMenu->addAction(tr("&75%")); + threeQuartersBrightness->setCheckable(true); + QAction *fullBrightness = brightnessMenu->addAction(tr("&100%")); + fullBrightness->setCheckable(true); + + menuMap[noBrightness] = None; + menuMap[quarterBrightness] = Quarter; + menuMap[halfBrightness] = Half; + menuMap[threeQuartersBrightness] = ThreeQuarters; + menuMap[fullBrightness] = Full; + + currentBrightness = fullBrightness; + currentBrightness->setChecked(true); + brightnessMenu->setEnabled(false); + + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(brightnessMenu); + + connect(openAction, SIGNAL(triggered()), this, SLOT(chooseFile())); + connect(saveAction, SIGNAL(triggered()), this, SLOT(saveImage())); + connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); + connect(brightnessMenu, SIGNAL(triggered(QAction *)), this, + SLOT(setBrightness(QAction *))); +} + +/* + Constructs a central widget for the window consisting of a two-by-two + grid of labels, each of which will contain an image. We restrict the + size of the labels to 256 pixels, and ensure that the window cannot + be resized. +*/ + +QFrame* Viewer::createCentralWidget() +{ + QFrame* frame = new QFrame(this); + grid = new QGridLayout(frame); + grid->setSpacing(8); + grid->setMargin(4); + + layout()->setSizeConstraint(QLayout::SetFixedSize); + + QSize labelSize(256, 256); + + finalWidget = new FinalWidget(frame, tr("Final image"), labelSize); + + cyanWidget = new ScreenWidget(frame, Qt::cyan, tr("Cyan"), + ScreenWidget::Cyan, labelSize); + magentaWidget = new ScreenWidget(frame, Qt::magenta, tr("Magenta"), + ScreenWidget::Magenta, labelSize); + yellowWidget = new ScreenWidget(frame, Qt::yellow, tr("Yellow"), + ScreenWidget::Yellow, labelSize); + + connect(cyanWidget, SIGNAL(imageChanged()), this, SLOT(createImage())); + connect(magentaWidget, SIGNAL(imageChanged()), this, SLOT(createImage())); + connect(yellowWidget, SIGNAL(imageChanged()), this, SLOT(createImage())); + + grid->addWidget(finalWidget, 0, 0, Qt::AlignTop | Qt::AlignHCenter); + grid->addWidget(cyanWidget, 0, 1, Qt::AlignTop | Qt::AlignHCenter); + grid->addWidget(magentaWidget, 1, 0, Qt::AlignTop | Qt::AlignHCenter); + grid->addWidget(yellowWidget, 1, 1, Qt::AlignTop | Qt::AlignHCenter); + + return frame; +} + +/* + Provides a dialog window to allow the user to specify an image file. + If a file is selected, the appropriate function is called to process + and display it. +*/ + +void Viewer::chooseFile() +{ + QString imageFile = QFileDialog::getOpenFileName(this, + tr("Choose an image file to open"), path, tr("Images (*.*)")); + + if (!imageFile.isEmpty()) { + openImageFile(imageFile); + path = imageFile; + } +} + +/* + Changes the value of the brightness according to the entry selected in the + Brightness menu. The selected entry is checked, and the previously selected + entry is unchecked. + + The color separations are updated to use the new value for the brightness. +*/ + +void Viewer::setBrightness(QAction *action) +{ + if (!menuMap.contains(action) || scaledImage.isNull()) + return; + + Brightness amount = menuMap[action]; + + switch (amount) { + case None: + brightness = 0; break; + case Quarter: + brightness = 64; break; + case Half: + brightness = 128; break; + case ThreeQuarters: + brightness = 191; break; + case Full: + brightness = 255; break; + default: return; + } + + currentBrightness->setChecked(false); + currentBrightness = action; + currentBrightness->setChecked(true); + + createImage(); +} + +/* + Load the image from the file given, and create four pixmaps based + on the original image. + + The window caption is set, and the Brightness menu enabled if the image file + can be loaded. +*/ + +void Viewer::openImageFile(QString &imageFile) +{ + QImage originalImage; + + if (originalImage.load(imageFile)) { + setWindowTitle(imageFile); + //menuBar()->setItemEnabled(brightnessMenuId, true); + saveAction->setEnabled(true); + brightnessMenu->setEnabled(true); + + /* Note: the ScaleMin value may be different for Qt 4. */ + scaledImage = originalImage.scaled(256, 256, Qt::KeepAspectRatio); + + cyanWidget->setImage(scaledImage); + magentaWidget->setImage(scaledImage); + yellowWidget->setImage(scaledImage); + createImage(); + } + else + (void) QMessageBox::warning(this, tr("Cannot open file"), + tr("The selected file could not be opened."), + QMessageBox::Cancel, QMessageBox::NoButton, QMessageBox::NoButton); +} + +/* + Creates an image by combining the contents of the three screens + to present a page preview. + + The image associated with each screen is separated into cyan, + magenta, and yellow components. We add up the values for each + component from the three screen images, and subtract the totals + from the maximum value for each corresponding primary color. +*/ + +void Viewer::createImage() +{ + QImage newImage = scaledImage.copy(); + + QImage *image1 = cyanWidget->image(); + QImage *image2 = magentaWidget->image(); + QImage *image3 = yellowWidget->image(); + int darkness = 255 - brightness; + + for (int y = 0; y < newImage.height(); ++y) { + for (int x = 0; x < newImage.width(); ++x) { + + // Create three screens, using the quantities of the source + // CMY components to determine how much of each of the + // inks are to be put on each screen. + QRgb p1(image1->pixel(x, y)); + float cyan1 = 255 - qRed(p1); + float magenta1 = 255 - qGreen(p1); + float yellow1 = 255 - qBlue(p1); + + QRgb p2(image2->pixel(x, y)); + float cyan2 = 255 - qRed(p2); + float magenta2 = 255 - qGreen(p2); + float yellow2 = 255 - qBlue(p2); + + QRgb p3(image3->pixel(x, y)); + float cyan3 = 255 - qRed(p3); + float magenta3 = 255 - qGreen(p3); + float yellow3 = 255 - qBlue(p3); + + QColor newColor( + qMax(255 - int(cyan1+cyan2+cyan3) - darkness, 0), + qMax(255 - int(magenta1+magenta2+magenta3) - darkness, 0), + qMax(255 - int(yellow1+yellow2+yellow3) - darkness, 0)); + + newImage.setPixel(x, y, newColor.rgb()); + } + } + + finalWidget->setPixmap(QPixmap::fromImage(newImage)); +} + +/* + Provides a dialog window to allow the user to save the image file. +*/ + +void Viewer::saveImage() +{ + QString imageFile = QFileDialog::getSaveFileName(this, + tr("Choose a filename to save the image"), "", tr("Images (*.png)")); + + QFileInfo info(imageFile); + + if (!info.baseName().isEmpty()) { + QString newImageFile = QFileInfo(info.absoluteDir(), + info.baseName() + ".png").absoluteFilePath(); + + if (!finalWidget->pixmap()->save(newImageFile, "PNG")) + (void) QMessageBox::warning(this, tr("Cannot save file"), + tr("The file could not be saved."), + QMessageBox::Cancel, QMessageBox::NoButton, + QMessageBox::NoButton); + } + else + (void) QMessageBox::warning(this, tr("Cannot save file"), + tr("Please enter a valid filename."), + QMessageBox::Cancel, QMessageBox::NoButton, + QMessageBox::NoButton); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/viewer.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/viewer.h new file mode 100644 index 0000000..3713c27 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/separations/viewer.h @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef VIEWER_H +#define VIEWER_H + +#include +#include +#include + +class QAction; +class QFrame; +class QGridLayout; +class QLabel; +class QMenu; +class FinalWidget; +class ScreenWidget; + +class Viewer : public QMainWindow +{ + Q_OBJECT +public: + enum Brightness { None, Quarter, Half, ThreeQuarters, Full }; + Viewer(); + +public slots: + void chooseFile(); + void setBrightness(QAction *action); + void createImage(); + void saveImage(); + +private: + void createMenus(); + QFrame *createCentralWidget(); + void openImageFile(QString &filePath); + + FinalWidget *finalWidget; + int brightness; + QAction *currentBrightness; + QAction *saveAction; + QGridLayout *grid; + QImage scaledImage; + QMap menuMap; + QMenu *brightnessMenu; + QMenu *fileMenu; + QString path; + ScreenWidget *cyanWidget; + ScreenWidget *magentaWidget; + ScreenWidget *yellowWidget; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/settings/settings.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/settings/settings.cpp new file mode 100644 index 0000000..e4bb50f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/settings/settings.cpp @@ -0,0 +1,188 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +QWidget *win +QWidget *panel + +void snippet_ctor1() +{ +//! [0] + settings = QSettings("MySoft", "Star Runner") +//! [0] +} + +void snippet_ctor2() +{ +//! [1] + QCoreApplication.setOrganizationName("MySoft") +//! [1] //! [2] + QCoreApplication.setOrganizationDomain("mysoft.com") +//! [2] //! [3] + QCoreApplication.setApplicationName("Star Runner") +//! [3] + +//! [4] + settings = QSettings() +//! [4] + +//! [5] + settings.setValue("editor/wrapMargin", 68) +//! [5] //! [6] + margin = int(settings.value("editor/wrapMargin")) +//! [6] + { +//! [7] + margin = int(settings.value("editor/wrapMargin", 80)) +//! [7] + } + +//! [8] + settings.setValue("mainwindow/size", win.size()) +//! [8] //! [9] + settings.setValue("mainwindow/fullScreen", win.isFullScreen()) +//! [9] //! [10] + settings.setValue("outputpanel/visible", panel.isVisible()) +//! [10] + +//! [11] + settings.beginGroup("mainwindow") + settings.setValue("size", win.size()) + settings.setValue("fullScreen", win.isFullScreen()) + settings.endGroup() +//! [11] + +//! [12] + settings.beginGroup("outputpanel") + settings.setValue("visible", panel.isVisible()) + settings.endGroup() +//! [12] +} + +void snippet_locations() +{ +//! [13] + obj1 = QSettings("MySoft", "Star Runner") +//! [13] //! [14] + obj2 = QSettings("MySoft") + obj3 = QSettings(QSettings.SystemScope, "MySoft", "Star Runner") + obj4 = QSettings(QSettings.SystemScope, "MySoft") +//! [14] + + { +//! [15] + settings = QSettings(QSettings.IniFormat, QSettings.UserScope, + "MySoft", "Star Runner") +//! [15] + } + + { + QSettings settings("starrunner.ini", QSettings.IniFormat) + } + + { + QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft", + QSettings.NativeFormat) + } +} + +class MainWindow : public QMainWindow +{ +public: + MainWindow() + + void writeSettings() + void readSettings() + +protected: + void closeEvent(QCloseEvent *event) +} + +//! [16] +class MainWindow(QMainWindow): + ... + def writeSettings(self): + self.settings = QSettings("Moose Soft", "Clipper") + self.settings.beginGroup("MainWindow") + self.settings.setValue("size", self.size()) + self.settings.setValue("pos", self.pos()) + self.settings.endGroup() +//! [16] + +//! [17] + def readSettings(self): + self.settings = QSettings("Moose Soft", "Clipper") + self.settings.beginGroup("MainWindow") + self.resize(settings.value("size", QSize(400, 400)).toSize()) + self.move(settings.value("pos", QPoint(200, 200)).toPoint()) + self.settings.endGroup() +//! [17] + +//! [18] + def __init__(self): + self.settings = None +//! [18] //! [19] + self.readSettings() +//! [19] //! [20] + +//! [20] + +bool userReallyWantsToQuit() { return true; } + +//! [21] + # event : QCloseEvent + def closeEvent(self, event): + if self.userReallyWantsToQuit(): + self.writeSettings() + event.accept() + else: + event.ignore() +//! [21] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/shareddirmodel/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/shareddirmodel/main.cpp new file mode 100644 index 0000000..338d131 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/shareddirmodel/main.cpp @@ -0,0 +1,90 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +""" + main.cpp + + A simple example of how to view a model in several views, and share a + selection model. +""" + +from PySide2.QtGui import * + + +//! [0] //! [1] +def main(): + app = QApplication(sys.argv) + splitter = QSplitter() + +//! [2] //! [3] + model = QFileSystemModel() + model.setRootPath(QDir.currentPath()) +//! [0] //! [2] //! [4] //! [5] + tree = QTreeView() +//! [3] //! [6] + tree.setModel(model) +//! [4] //! [6] //! [7] + tree.setRootIndex(model.index(QDir.currentPath())) +//! [7] + + list = QListView(splitter) + list.setModel(model) + list.setRootIndex(model.index(QDir.currentPath())) + +//! [5] + selection = QItemSelectionModel(model) + tree.setSelectionModel(selection) + list.setSelectionModel(selection) + +//! [8] + splitter.setWindowTitle("Two views onto the same directory model") + splitter.show() + return app.exec_() +//! [1] //! [8] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedemployee/employee.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedemployee/employee.cpp new file mode 100644 index 0000000..689b6b2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedemployee/employee.cpp @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "employee.h" diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedemployee/employee.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedemployee/employee.h new file mode 100644 index 0000000..23ffcdd --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedemployee/employee.h @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef EMPLOYEE_H +#define EMPLOYEE_H + +//! [0] +#include +#include + +class EmployeeData : public QSharedData +{ + public: + EmployeeData() : id(-1) { name.clear(); } + EmployeeData(const EmployeeData &other) + : QSharedData(other), id(other.id), name(other.name) { } + ~EmployeeData() { } + + int id; + QString name; +}; + +class Employee +{ + public: +//! [1] + Employee() { d = new EmployeeData; } +//! [1] //! [2] + Employee(int id, QString name) { + d = new EmployeeData; + setId(id); + setName(name); + } +//! [2] //! [7] + Employee(const Employee &other) + : d (other.d) + { + } +//! [7] +//! [3] + void setId(int id) { d->id = id; } +//! [3] //! [4] + void setName(QString name) { d->name = name; } +//! [4] + +//! [5] + int id() const { return d->id; } +//! [5] //! [6] + QString name() const { return d->name; } +//! [6] + + private: + QSharedDataPointer d; +}; +//! [0] + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedemployee/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedemployee/main.cpp new file mode 100644 index 0000000..5faa891 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedemployee/main.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +#include "employee.h" + +int main() +{ + Employee e1(1001, "Albrecht Durer"); + Employee e2 = e1; + e1.setName("Hans Holbein"); +} +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedtablemodel/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedtablemodel/main.cpp new file mode 100644 index 0000000..8dc6701 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedtablemodel/main.cpp @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + main.cpp + + A simple example that shows how a single model can be shared between + multiple views. +*/ + +#include +#include +#include +#include + +#include "model.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + TableModel *model = new TableModel(4, 2, &app); + +//! [0] + QTableView *firstTableView = new QTableView; + QTableView *secondTableView = new QTableView; +//! [0] + +//! [1] + firstTableView->setModel(model); + secondTableView->setModel(model); +//! [1] + + firstTableView->horizontalHeader()->setModel(model); + + for (int row = 0; row < 4; ++row) { + for (int column = 0; column < 2; ++column) { + QModelIndex index = model->index(row, column, QModelIndex()); + model->setData(index, QVariant(QString("(%1, %2)").arg(row).arg(column))); + } + } + +//! [2] + secondTableView->setSelectionModel(firstTableView->selectionModel()); +//! [2] + + firstTableView->setWindowTitle("First table view"); + secondTableView->setWindowTitle("Second table view"); + firstTableView->show(); + secondTableView->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedtablemodel/model.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedtablemodel/model.h new file mode 100644 index 0000000..6b40768 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/sharedtablemodel/model.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODEL_H +#define MODEL_H + +#include +#include +#include + +class TableModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + TableModel(int rows = 1, int columns = 1, QObject *parent = 0); + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::EditRole); + + bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool insertColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + +private: + QList rowList; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/accountsfile.txt b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/accountsfile.txt new file mode 100644 index 0000000..2ec5ffb --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/accountsfile.txt @@ -0,0 +1 @@ +1 + 1 = 2 diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/filereader.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/filereader.cpp new file mode 100644 index 0000000..f7e5b5c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/filereader.cpp @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "filereader.h" + + +FileReader::FileReader(QWidget *parent) + : QWidget(parent) +{ + textEdit = new QTextEdit; + + taxFileButton = new QPushButton("Tax File"); + accountFileButton = new QPushButton("Accounts File"); + reportFileButton = new QPushButton("Report File"); + +//! [0] + signalMapper = new QSignalMapper(this); + signalMapper->setMapping(taxFileButton, QString("taxfile.txt")); + signalMapper->setMapping(accountFileButton, QString("accountsfile.txt")); + signalMapper->setMapping(reportFileButton, QString("reportfile.txt")); + + connect(taxFileButton, SIGNAL(clicked()), + signalMapper, SLOT (map())); + connect(accountFileButton, SIGNAL(clicked()), + signalMapper, SLOT (map())); + connect(reportFileButton, SIGNAL(clicked()), + signalMapper, SLOT (map())); +//! [0] + +//! [1] + connect(signalMapper, SIGNAL(mapped(const QString &)), + this, SLOT(readFile(const QString &))); +//! [1] + + QHBoxLayout *buttonLayout = new QHBoxLayout; + buttonLayout->addWidget(taxFileButton); + buttonLayout->addWidget(accountFileButton); + buttonLayout->addWidget(reportFileButton); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(textEdit); + mainLayout->addLayout(buttonLayout); + + setLayout(mainLayout); +} + +void FileReader::readFile(const QString &filename) +{ + QFile file(filename); + + if (!file.open(QIODevice::ReadOnly)) { + QMessageBox::information(this, tr("Unable to open file"), + file.errorString()); + return; + } + + + QTextStream in(&file); + textEdit->setPlainText(in.readAll()); +} + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/filereader.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/filereader.h new file mode 100644 index 0000000..6509951 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/filereader.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef FILEREADER_H +#define FILEREADER_H + +#include +#include +#include + +class FileReader : public QWidget +{ + Q_OBJECT + +public: + FileReader(QWidget *parent=0); + void readFromFile(QString filename); + +public slots: + void readFile(const QString &); + +private: + QTextEdit *textEdit; + QPushButton *taxFileButton; + QPushButton *accountFileButton; + QPushButton *reportFileButton; + QSignalMapper *signalMapper; +}; + +#endif + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/main.cpp new file mode 100644 index 0000000..4047566 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/main.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "filereader.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + FileReader *reader = new FileReader; + reader->show(); + + return app.exec(); +} + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/reportfile.txt b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/reportfile.txt new file mode 100644 index 0000000..30123cc --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/reportfile.txt @@ -0,0 +1,2 @@ +Tax this year = 50% +Total profit = 2 diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/taxfile.txt b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/taxfile.txt new file mode 100644 index 0000000..a682e0a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalmapper/taxfile.txt @@ -0,0 +1 @@ +Tax this year = 50% diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/lcdnumber.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/lcdnumber.cpp new file mode 100644 index 0000000..c24a03d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/lcdnumber.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "lcdnumber.h" + +LcdNumber::LcdNumber(QWidget *parent) +{ +} + +void LcdNumber::display(int) +{ +} + +void LcdNumber::display(double) +{ +} + +void LcdNumber::display(const QString &) +{ +} + +void LcdNumber::setHexMode() +{ +} + +void LcdNumber::setDecMode() +{ +} + +void LcdNumber::setOctMode() +{ +} + +void LcdNumber::setBinMode() +{ +} + +void LcdNumber::setSmallDecimalPoint(bool) +{ +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/lcdnumber.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/lcdnumber.h new file mode 100644 index 0000000..68563e0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/lcdnumber.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +#ifndef LCDNUMBER_H +//! [0] //! [1] +#define LCDNUMBER_H +//! [1] + +//! [2] +#include +//! [2] + +//! [3] +class LcdNumber : public QFrame +//! [3] //! [4] +{ +//! [4] //! [5] + Q_OBJECT +//! [5] + +//! [6] +public: +//! [6] //! [7] + LcdNumber(QWidget *parent = 0); +//! [7] + +//! [8] +signals: +//! [8] //! [9] + void overflow(); +//! [9] + +//! [10] +public slots: +//! [10] //! [11] + void display(int num); + void display(double num); + void display(const QString &str); + void setHexMode(); + void setDecMode(); + void setOctMode(); + void setBinMode(); + void setSmallDecimalPoint(bool point); +//! [11] //! [12] +}; +//! [12] + +//! [13] +#endif +//! [13] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/signalsandslots.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/signalsandslots.cpp new file mode 100644 index 0000000..8e77a32 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/signalsandslots.cpp @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "signalsandslots.h" + +//! [0] +void Counter::setValue(int value) +{ + if (value != m_value) { + m_value = value; + emit valueChanged(value); + } +} +//! [0] + +int main() +{ +//! [1] + Counter a, b; +//! [1] //! [2] + QObject::connect(&a, SIGNAL(valueChanged(int)), + &b, SLOT(setValue(int))); +//! [2] + +//! [3] + a.setValue(12); // a.value() == 12, b.value() == 12 +//! [3] //! [4] + b.setValue(48); // a.value() == 12, b.value() == 48 +//! [4] + + + QWidget *widget = reinterpret_cast(new QObject(0)); +//! [5] + if (widget->inherits("QAbstractButton")) { + QAbstractButton *button = static_cast(widget); + button->toggle(); +//! [5] //! [6] + } +//! [6] + +//! [7] + if (QAbstractButton *button = qobject_cast(widget)) + button->toggle(); +//! [7] +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/signalsandslots.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/signalsandslots.h new file mode 100644 index 0000000..c89e83d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/signalsandslots/signalsandslots.h @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SIGNALSANDSLOTS_H +#define SIGNALSANDSLOTS_H + +#define Counter PlainCounter + +//! [0] +class Counter +{ +public: + Counter() { m_value = 0; } + + int value() const { return m_value; } + void setValue(int value); + +private: + int m_value; +}; +//! [0] + +#undef Counter +#define Counter ObjectCounter + +//! [1] +#include +//! [1] + +//! [2] +class Counter : public QObject +//! [2] //! [3] +{ + Q_OBJECT + +public: + Counter() { m_value = 0; } + + int value() const { return m_value; } + +public slots: + void setValue(int value); + +signals: + void valueChanged(int newValue); + +private: + int m_value; +}; +//! [3] + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/simplemodel-use/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/simplemodel-use/main.cpp new file mode 100644 index 0000000..b0184e3 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/simplemodel-use/main.cpp @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + main.cpp + + A simple example of how to access items from an existing model. +*/ + +#include + +/*! + Create a default directory model and, using the index-based interface to + the model and some QLabel widgets, populate the window's layout with the + names of objects in the directory. + + Note that we only want to read the filenames in the highest level of the + directory, so we supply a default (invalid) QModelIndex to the model in + order to indicate that we want top-level items. +*/ + +def main(): + app = QApplication(sys.argc, sys.argv) + + window = QWidget() + layout = QVBoxLayout(window) + title = QLabel("Some items from the directory model", window) + title.setBackgroundRole(QPalette.Base) + title.setMargin(8) + layout.addWidget(title) + +//! [0] + model = QFileSystemModel() + parentIndex = model.index(QDir.currentPath()) + numRows = model.rowCount(parentIndex) +//! [0] + +//! [1] + for row in range(numRows): + index = model.index(row, 0, parentIndex) +//! [1] + +//! [2] + text = model.data(index, Qt.DisplayRole) + // Display the text in a widget. +//! [2] + + label = QLabel(text, window) + layout.addWidget(label) +//! [3] +//! [3] + + window.setWindowTitle("A simple model example") + window.show() + return app.exec_() +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/simpleparse/handler.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/simpleparse/handler.cpp new file mode 100644 index 0000000..1bb2e80 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/simpleparse/handler.cpp @@ -0,0 +1,148 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* +handler.cpp + +Provides a handler for processing XML elements found by the reader. + +The handler stores the names of elements it finds and their indentation +levels. The indentation level is initially set to zero. +When a starting element is found, the indentation level is increased; +when an ending element is found, the indentation level is decreased. +*/ + +#include +#include "handler.h" + +/*! + Reset the state of the handler to ensure that new documents are + read correctly. + + We return true to indicate that parsing should continue. +*/ + +bool Handler::startDocument() +{ + elementName.clear(); + elementIndentation.clear(); + indentationLevel = 0; + + return true; +} + +/*! + Process each starting element in the XML document. + + Append the element name to the list of elements found; add its + corresponding indentation level to the list of indentation levels. + + Increase the level of indentation by one column. + + We return true to indicate that parsing should continue. +*/ + +bool Handler::startElement(const QString &, const QString &, + const QString & qName, const QXmlAttributes &) +{ + elementName.append(qName); + elementIndentation.append(indentationLevel); + indentationLevel += 1; + + return true; +} + +/*! + Process each ending element in the XML document. + + Decrease the level of indentation by one column. + + We return true to indicate that parsing should continue. +*/ + +bool Handler::endElement(const QString &, const QString &, + const QString &) +{ + indentationLevel -= 1; + + return true; +} + +/*! + Report a fatal parsing error, and return false to indicate to the reader + that parsing should stop. +*/ + +bool Handler::fatalError (const QXmlParseException & exception) +{ + qWarning() << QString("Fatal error on line %1, column %2: %3").arg( + exception.lineNumber()).arg(exception.columnNumber()).arg( + exception.message()); + + return false; +} + +/*! + Return the list of element names found. +*/ + +QStringList& Handler::names () +{ + return elementName; +} + +/*! + Return the list of indentations used for each element found. +*/ + +QList& Handler::indentations () +{ + return elementIndentation; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/simpleparse/handler.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/simpleparse/handler.h new file mode 100644 index 0000000..ea1b8b3 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/simpleparse/handler.h @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef HANDLER_H +#define HANDLER_H + +#include +#include + +class Handler : public QXmlDefaultHandler +{ +public: + bool startDocument(); + bool startElement(const QString &, const QString &, const QString &qName, + const QXmlAttributes &); + bool endElement(const QString &, const QString &, const QString &); + + bool fatalError(const QXmlParseException &exception); + + QStringList& names(); + QList& indentations(); + +private: + int indentationLevel; + QStringList elementName; + QList elementIndentation; +}; + +#endif + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/simpleparse/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/simpleparse/main.cpp new file mode 100644 index 0000000..810e442 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/simpleparse/main.cpp @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include "handler.h" + +#include + +int main(int argc, char **argv) +{ + if (argc != 2) { + std::cout << "Usage: " << argv[0] << " " << std::endl; + return 1; + } + + QFile *file = new QFile(argv[1]); + +//! [0] + xmlReader = QXmlSimpleReader() + source = QXmlInputSource(filename) +//! [0] + +//! [1] + handler = Handler() + xmlReader.setContentHandler(handler) + xmlReader.setErrorHandler(handler) +//! [1] + +//! [2] + ok = xmlReader.parse(source) + + if not ok: + print "Parsing failed." +//! [2] + else { + QStringList names = handler->names(); + QList indentations = handler->indentations(); + + int items = names.count(); + + for (int i = 0; i < items; ++i) { + for (int j = 0; j < indentations[i]; ++j) + std::cout << " "; + std::cout << names[i].toLocal8Bit().constData() << std::endl; + } + } + + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/splitter/splitter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/splitter/splitter.cpp new file mode 100644 index 0000000..90fd928 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/splitter/splitter.cpp @@ -0,0 +1,76 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + + +//! [0] + splitter = QSplitter(parent) + listview = QListView() + treeview = QTreeView() + textedit = QTextEdit() + splitter.addWidget(listview) + splitter.addWidget(treeview) + splitter.addWidget(textedit) +//! [0] + +//! [1] + settings = QSettings() + settings.setValue("splitterSizes", splitter.saveState()) +//! [1] + +//! [2] + settings = QSettings() + splitter.restoreState(settings.value("splitterSizes").toByteArray()) +//! [2] + +//! [3] + for it in splitter.sizes(): + processSize(it.next()) +//! [3] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/splitterhandle/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/splitterhandle/main.cpp new file mode 100644 index 0000000..f906522 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/splitterhandle/main.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include "splitter.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Splitter splitter(Qt::Horizontal); + splitter.addWidget(new QLabel("Hello")); + splitter.addWidget(new QLabel("World")); + Splitter verticalSplitter(Qt::Vertical, &splitter); + verticalSplitter.addWidget(new QLabel("A")); + verticalSplitter.addWidget(new QLabel("B")); + splitter.show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/splitterhandle/splitter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/splitterhandle/splitter.cpp new file mode 100644 index 0000000..7b9c064 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/splitterhandle/splitter.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "splitter.h" + +SplitterHandle::SplitterHandle(Qt::Orientation orientation, QSplitter *parent) + : QSplitterHandle(orientation, parent) +{ + gradient.setColorAt(0.0, Qt::darkGreen); + gradient.setColorAt(0.25, Qt::white); + gradient.setColorAt(1.0, Qt::darkGreen); +} + +//! [0] +void SplitterHandle::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + if (orientation() == Qt::Horizontal) { + gradient.setStart(rect().left(), rect().height()/2); + gradient.setFinalStop(rect().right(), rect().height()/2); + } else { + gradient.setStart(rect().width()/2, rect().top()); + gradient.setFinalStop(rect().width()/2, rect().bottom()); + } + painter.fillRect(event->rect(), QBrush(gradient)); +} +//! [0] + +Splitter::Splitter(Qt::Orientation orientation, QWidget *parent) + : QSplitter(orientation, parent) +{ +} + +//! [1] +QSplitterHandle *Splitter::createHandle() +{ + return new SplitterHandle(orientation(), this); +} +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/splitterhandle/splitter.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/splitterhandle/splitter.h new file mode 100644 index 0000000..5ecaafc --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/splitterhandle/splitter.h @@ -0,0 +1,61 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] +class Splitter(QSplitter): + def __init__(self, orientation, parent): + ... + + def createHandle(self): + ... +} +//! [0] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/sqldatabase/sqldatabase.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/sqldatabase/sqldatabase.cpp new file mode 100644 index 0000000..29ac9c8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/sqldatabase/sqldatabase.cpp @@ -0,0 +1,489 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +from PySide2.QtGui import * +from PySide2.QtSql import * + + +def tr(text): + return QApplication.translate(text, text) + +def QSqlDatabase_snippets(): +//! [0] + db = QSqlDatabase.addDatabase("QPSQL") + db.setHostName("acidalia") + db.setDatabaseName("customdb") + db.setUserName("mojito") + db.setPassword("J0a1m8") + ok = db.open() +//! [0] + +//! [1] + db = QSqlDatabase.database() +//! [1] + +def QSqlField_snippets(): +//! [2] + field = QSqlField("age", QVariant.Int) + field.setValue(QPixmap()) # WRONG +//! [2] + +//! [3] + field = QSqlField("age", QVariant.Int) + field.setValue(QString("123")) # casts QString to int +//! [3] + +//! [4] + query = QSqlQuery() +//! [4] //! [5] + record = query.record() +//! [5] //! [6] + field = record.field("country") +//! [6] + +def doSomething(str): + pass + +def QSqlQuery_snippets(): + # typical loop +//! [7] + query = QSqlQuery("SELECT country FROM artist") + while query.next(): + country = query.value(0) + doSomething(country) +//! [7] + + + # field index lookup +//! [8] + query = QSqlQuery("SELECT * FROM artist") + fieldNo = query.record().indexOf("country") + while query.next(): + country = query.value(fieldNo) + doSomething(country) +//! [8] + + # named with named +//! [9] + query = QSqlQuery() + query.prepare("INSERT INTO person (id, forename, surname) " + "VALUES (:id, :forename, :surname)") + query.bindValue(":id", 1001) + query.bindValue(":forename", "Bart") + query.bindValue(":surname", "Simpson") + query.exec_() +//! [9] + + # positional with named +//! [10] + query = QSqlQuery() + query.prepare("INSERT INTO person (id, forename, surname) " + "VALUES (:id, :forename, :surname)") + query.bindValue(0, 1001) + query.bindValue(1, "Bart") + query.bindValue(2, "Simpson") + query.exec_() +//! [10] + + # positional 1 +//! [11] + query = QSqlQuery() + query.prepare("INSERT INTO person (id, forename, surname) " + "VALUES (?, ?, ?)") + query.bindValue(0, 1001) + query.bindValue(1, "Bart") + query.bindValue(2, "Simpson") + query.exec_() +//! [11] + + # positional 2 +//! [12] + query = QSqlQuery() + query.prepare("INSERT INTO person (id, forename, surname) " + "VALUES (?, ?, ?)") + query.addBindValue(1001) + query.addBindValue("Bart") + query.addBindValue("Simpson") + query.exec_() +//! [12] + + # stored +//! [13] + query = QSqlQuery() + query.prepare("CALL AsciiToInt(?, ?)") + query.bindValue(0, "A") + query.bindValue(1, 0, QSql.Out) + query.exec_() + i = query.boundValue(1) # i is 65 +//! [13] + + query = QSqlQuery() + + # examine with named binding +//! [14] + i = query.boundValues() + while i.hasNext(): + i.next() + print i.key(), ": ", i.value() +//! [14] + + # examine with positional binding +//! [15] + list_ = query.boundValues().values() + for item in list: + print item +//! [15] + +def QSqlQueryModel_snippets(): + +//! [16] + model = QSqlQueryModel() + model.setQuery("SELECT name, salary FROM employee") + model.setHeaderData(0, Qt.Horizontal, tr("Name")) + model.setHeaderData(1, Qt.Horizontal, tr("Salary")) + +//! [17] + view = QTableView() +//! [17] //! [18] + view.setModel(model) +//! [18] //! [19] + view.show() +//! [16] //! [19] //! [20] + view.setEditTriggers(QAbstractItemView.NoEditTriggers) +//! [20] + +//! [21] + model = QSqlQueryModel() + model.setQuery("SELECT * FROM employee") + salary = model.record(4).value("salary") +//! [21] + +//! [22] + salary = model.data(model.index(4, 2)) +//! [22] + + for row in range(model.rowCount()): + for (col in range(model.columnCount())): + print model.data(model.index(row, col)) + + +class MyModel(QSqlQueryModel) + m_specialColumnNo = 0 + def data(item, role): +//! [23] + if item.column() == self.m_specialColumnNo: + # handle column separately + pass + + return QSqlQueryModel.data(item, role) + +//! [23] + + +def QSqlTableModel_snippets(): + +//! [24] + model = QSqlTableModel() + model.setTable("employee") + model.setEditStrategy(QSqlTableModel.OnManualSubmit) + model.select() + model.removeColumn(0) # don't show the ID + model.setHeaderData(0, Qt.Horizontal, tr("Name")) + model.setHeaderData(1, Qt.Horizontal, tr("Salary")) + + view = QTableView() + view.setModel(model) + view.show() +//! [24] + + +//! [25] + model = QSqlTableModel() + model.setTable("employee") + QString name = model.record(4).value("name") +//! [25] + +def sql_intro_snippets(): + +//! [26] + db = QSqlDatabase.addDatabase("QMYSQL") + db.setHostName("bigblue") + db.setDatabaseName("flightdb") + db.setUserName("acarlson") + db.setPassword("1uTbSbAs") + ok = db.open() +//! [26] + +//! [27] + firstDB = QSqlDatabase.addDatabase("QMYSQL", "first") + secondDB = QSqlDatabase.addDatabase("QMYSQL", "second") +//! [27] + +//! [28] + defaultDB = QSqlDatabase.database() +//! [28] //! [29] + firstDB = QSqlDatabase.database("first") +//! [29] //! [30] + secondDB = QSqlDatabase.database("second") +//! [30] + + # SELECT1 +//! [31] + query = QSqlQuery() + query.exec_("SELECT name, salary FROM employee WHERE salary > 50000") +//! [31] + +//! [32] + while query.next(): + name = query.value(0) + salary = query.value(1) + print name, salary +//! [32] + + # FEATURE +//! [33] + query = QSqlQuery() + query.exec_("SELECT name, salary FROM employee WHERE salary > 50000") + + defaultDB = QSqlDatabase.database() + if defaultDB.driver().hasFeature(QSqlDriver.QuerySize): + numRows = query.size() + else: + # self can be very slow + query.last() + numRows = query.at() + 1 +//! [33] + + # INSERT1 +//! [34] + query = QSqlQuery() + query.exec_("INSERT INTO employee (id, name, salary) " + "VALUES (1001, 'Thad Beaumont', 65000)") +//! [34] + + # NAMED BINDING +//! [35] + query = QSqlQuery() + query.prepare("INSERT INTO employee (id, name, salary) " + "VALUES (:id, :name, :salary)") + query.bindValue(":id", 1001) + query.bindValue(":name", "Thad Beaumont") + query.bindValue(":salary", 65000) + query.exec_() +//! [35] + + # POSITIONAL BINDING +//! [36] + query = QSqlQuery() + query.prepare("INSERT INTO employee (id, name, salary) " + "VALUES (?, ?, ?)") + query.addBindValue(1001) + query.addBindValue("Thad Beaumont") + query.addBindValue(65000) + query.exec_() +//! [36] + + # UPDATE1 +//! [37] + query = QSqlQuery() + query.exec_("UPDATE employee SET salary = 70000 WHERE id = 1003") +//! [37] + + # DELETE1 +//! [38] + query = QSqlQuery() + query.exec_("DELETE FROM employee WHERE id = 1007") +//! [38] + + # TRANSACTION +//! [39] + QSqlDatabase.database().transaction() + query = QSqlQuery() + query.exec_("SELECT id FROM employee WHERE name = 'Torild Halvorsen'") + if query.next(): + employeeId = query.value(0) + query.exec_("INSERT INTO project (id, name, ownerid) " + "VALUES (201, 'Manhattan Project', " + + QString.number(employeeId) + ')') + + QSqlDatabase.database().commit() +//! [39] + + # SQLQUERYMODEL1 +//! [40] + model = QSqlQueryModel() + model.setQuery("SELECT * FROM employee") + + for i in range(model.rowCount()): + _id = model.record(i).value("id") + name = model.record(i).value("name") + print _id, name + +//! [40] + } + + { + # SQLTABLEMODEL1 +//! [41] + model = QSqlTableModel() + model.setTable("employee") + model.setFilter("salary > 50000") + model.setSort(2, Qt.DescendingOrder) + model.select() + + for i in range(model.rowCount()): + name = model.record(i).value("name") + salary = model.record(i).value("salary") + print "%s: %d" % (name, salary) + +//! [41] + + # SQLTABLEMODEL2 + model = QSqlTableModel() + model.setTable("employee") + +//! [42] + for i in range(model.rowCount()): + record = model.record(i) + salary = record.value("salary") + salary *= 1.1 + record.setValue("salary", salary) + model.setRecord(i, record) + + model.submitAll() +//! [42] + + # SQLTABLEMODEL3 + row = 1 + column = 2 +//! [43] + model.setData(model.index(row, column), 75000) + model.submitAll() +//! [43] + + # SQLTABLEMODEL4 +//! [44] + model.insertRows(row, 1) + model.setData(model.index(row, 0), 1013) + model.setData(model.index(row, 1), "Peter Gordon") + model.setData(model.index(row, 2), 68500) + model.submitAll() +//! [44] + +//! [45] + model.removeRows(row, 5) +//! [45] + +//! [46] + model.submitAll() +//! [46] + +//! [47] +class XyzResult(QSqlResult): + def __init__(driver): + QSqlResult.__init__(self, driver) + pass + + def data(self, index): + return QVariant() + + def isNull(self, index): + return False + + def reset(self, query): + return False + + def fetch(self, index): + return False + + def fetchFirst(self): + return False + + def fetchLast(self): + return False + + def size(self): + return 0 + + def numRowsAffected(self): + return 0 + + def record(self): + return QSqlRecord() + +//! [47] + +//! [48] +class XyzDriver(QSqlDriver) + def hasFeature(self, feature): + return False + + def open(self, db, user, password, host, port, options): + return False + + def close(self): + pass + + def createResult(self): + return XyzResult(self) + +//! [48] + +def main(): + app = QApplication([]) + + QSqlDatabase_snippets() + QSqlField_snippets() + QSqlQuery_snippets() + QSqlQueryModel_snippets() + QSqlTableModel_snippets() + + driver = XyzDriver() + result = XyzResult(driver) diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/streaming/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/streaming/main.cpp new file mode 100644 index 0000000..d81ae3a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/streaming/main.cpp @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +//! [0] +struct Movie +{ + int id; + QString title; + QDate releaseDate; +}; +//! [0] + +//! [1] +QDataStream &operator<<(QDataStream &out, const Movie &movie) +{ + out << (quint32)movie.id << movie.title + << movie.releaseDate; + return out; +} +//! [1] + +//! [2] +QDataStream &operator>>(QDataStream &in, Movie &movie) +{ + quint32 id; + QDate date; + + in >> id >> movie.title >> date; + movie.id = (int)id; + movie.releaseDate = date; + return in; +} +//! [2] + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + Movie m; + m.id = 0001; + m.title = "Happy Meal"; + m.releaseDate = QDate(1995, 5, 17); + + QByteArray byteArray; + QDataStream stream(&byteArray, QIODevice::WriteOnly); + stream << m; + + // display + qDebug() << m.id << m.releaseDate << m.title; + + Movie m2; + + int id2; + QString title2; + QDate date2; + + QDataStream stream2(byteArray); + stream2 >> id2 >> title2 >> date2; + + m2.id = id2; + m2.title = title2; + m2.releaseDate = date2; + + qDebug() << id2 << " " << date2 << " " << title2; + + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/stringlistmodel/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/stringlistmodel/main.cpp new file mode 100644 index 0000000..b95a9f2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/stringlistmodel/main.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + The main function for the string list model example. This creates and + populates a model with values from a string list then displays the + contents of the model using a QListView widget. +*/ + +#include +#include +#include + +#include "model.h" + +//! [0] + +app = QApplication(sys.argv) + +// Unindented for quoting purposes: +//! [1] +numbers = ["One", "Two", "Three", "Four", "Five"] + +model = StringListModel(numbers) +//! [0] //! [1] //! [2] //! [3] +view = QListView() +//! [2] +view.setWindowTitle("View onto a string list model") +//! [4] +view.setModel(model) +//! [3] //! [4] + + model.insertRows(5, 7, QModelIndex()) + + for row in range(5, 12): + index = model.index(row, 0, QModelIndex()) + model.setData(index, str(row+1)) + +//! [5] + view.show() + sys.exit(app.exec_()) +//! [5] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/stringlistmodel/model.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/stringlistmodel/model.cpp new file mode 100644 index 0000000..79c449d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/stringlistmodel/model.cpp @@ -0,0 +1,170 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + model.cpp + + A simple model that uses a QStringList as its data source. +*/ + +/*! + Returns the number of items in the string list as the number of rows + in the model. +*/ + +//! [0] +def rowCount(self, parent): + return len(self.stringList) +//! [0] + +/*! + Returns an appropriate value for the requested data. + If the view requests an invalid index, an invalid variant is returned. + Any valid index that corresponds to a string in the list causes that + string to be returned. +*/ + +//! [1] +def data(self, index, role): + if not index.isValid(): + return None + + if index.row() >= stringList.size(): + return None + + if role == Qt.DisplayRole: + return stringList[index.row()] + else + return None +//! [1] + +/*! + Returns the appropriate header string depending on the orientation of + the header and the section. If anything other than the display role is + requested, we return an invalid variant. +*/ + +//! [2] +def headerData(self, section, orientation, role): + if role != Qt::DisplayRole: + return None + + if orientation == Qt::Horizontal: + return "Column %s" % section + else: + return "Row %s" % section +//! [2] + +/*! + Returns an appropriate value for the item's flags. Valid items are + enabled, selectable, and editable. +*/ + +//! [3] +def flags(self, index): + if not index.isValid() + return Qt.ItemIsEnabled + + return QAbstractItemModel.flags(index) | Qt.ItemIsEditable +//! [3] + +/*! + Changes an item in the string list, but only if the following conditions + are met: + + * The index supplied is valid. + * The index corresponds to an item to be shown in a view. + * The role associated with editing text is specified. + + The dataChanged() signal is emitted if the item is changed. +*/ + +//! [4] +def setData(self, index, value, role): + if index.isValid() and role == Qt.EditRole: + self.stringList[index.row()] = value + self.dataChanged.emit(index, index) + return True; +//! [4] //! [5] + return False; +} +//! [5] + +/*! + Inserts a number of rows into the model at the specified position. +*/ + +//! [6] +def insertRows(self, position, rows, parent): + self.beginInsertRows(QModelIndex(), position, position+rows-1) + + for row in range(0, rows): + self.stringList.insert(position, "") + + self.endInsertRows() + return True; +//! [6] //! [7] +//! [7] + +/*! + Removes a number of rows from the model at the specified position. +*/ + +//! [8] +def removeRows(self, position, rows, parent): + self.beginRemoveRows(QModelIndex(), position, position+rows-1) + + for row in range(0, rows): + del self.stringList[position] + + self.endRemoveRows() + return True; +//! [8] //! [9] +//! [9] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/stringlistmodel/model.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/stringlistmodel/model.h new file mode 100644 index 0000000..5868952 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/stringlistmodel/model.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class StringListModel (QAbstractListModel): + def __init__(strings, parent = None): + QAbstractListModel.__init__(self, parent) +//! [5] + self.stringList = strings +//! [5] + + def rowCount(self, parent = QModelIndex()): + # ... + def data(self, index, role): + # ... + def headerData(self, section, orientation, +//! [0] //! [1] + role = Qt.DisplayRole): +//! [1] + +//! [2] + def flags(self, index): + # ... + def setData(self, index, value, +//! [2] //! [3] + role = Qt.EditRole) +//! [3] + +//! [4] + def insertRows(self, position, rows, index = QModelIndex()): + # ... + def removeRows(self, position, rows, index = QModelIndex()): + # ... +//! [4] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/styles/styles.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/styles/styles.cpp new file mode 100644 index 0000000..b174451 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/styles/styles.cpp @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] //! [1] +def paintEvent(self, event): +//! [0] +//! [2] + painter = QPainter(self) +//! [2] + + option = QStyleOptionFocusRect() + option.initFrom(self) + option.backgroundColor = palette().color(QPalette.Background) + +//! [3] + style().drawPrimitive(QStyle.PE_FrameFocusRect, option, painter, self) +//! [3] +//! [1] + +def paintEvent2(event): +//! [4] +//! [4] //! [5] //! [6] + painter = QStylePainter(self) +//! [5] + + option = QStyleOptionFocusRect() + option.initFrom(self) + option.backgroundColor = palette().color(QPalette.Background) + +//! [7] + painter.drawPrimitive(QStyle.PE_FrameFocusRect, option) +//! [7] +//! [6] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/stylesheet/common-mistakes.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/stylesheet/common-mistakes.cpp new file mode 100644 index 0000000..a8dfe25 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/stylesheet/common-mistakes.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [1] + QPushButton { + color: grey; + border-image: url(/home/kamlie/code/button.png) 3 10 3 10; + border-top: 3px transparent; + border-bottom: 3px transparent; + border-right: 10px transparent; + border-left: 10px transparent; + } +//! [1] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-formats/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-formats/main.cpp new file mode 100644 index 0000000..f1b9d31 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-formats/main.cpp @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +QString tr(const char *text) +{ + return QApplication::translate(text, text); +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + +//! [0] + QTextEdit *editor = new QTextEdit(); + QTextCursor cursor(editor->textCursor()); +//! [0] + cursor.movePosition(QTextCursor::Start); + + QTextBlockFormat blockFormat = cursor.blockFormat(); + blockFormat.setTopMargin(4); + blockFormat.setLeftMargin(4); + blockFormat.setRightMargin(4); + blockFormat.setBottomMargin(4); + + cursor.setBlockFormat(blockFormat); + cursor.insertText(tr("This contains plain text inside a " + "text block with margins to keep it separate " + "from other parts of the document.")); + + cursor.insertBlock(); + +//! [1] + QTextBlockFormat backgroundFormat = blockFormat; + backgroundFormat.setBackground(QColor("lightGray")); + + cursor.setBlockFormat(backgroundFormat); +//! [1] + cursor.insertText(tr("The background color of a text block can be " + "changed to highlight text.")); + + cursor.insertBlock(); + + QTextBlockFormat rightAlignedFormat = blockFormat; + rightAlignedFormat.setAlignment(Qt::AlignRight); + + cursor.setBlockFormat(rightAlignedFormat); + cursor.insertText(tr("The alignment of the text within a block is " + "controlled by the alignment properties of " + "the block itself. This text block is " + "right-aligned.")); + + cursor.insertBlock(); + + QTextBlockFormat paragraphFormat = blockFormat; + paragraphFormat.setAlignment(Qt::AlignJustify); + paragraphFormat.setTextIndent(32); + + cursor.setBlockFormat(paragraphFormat); + cursor.insertText(tr("Text can be formatted so that the first " + "line in a paragraph has its own margin. " + "This makes the text more readable.")); + + cursor.insertBlock(); + + QTextBlockFormat reverseFormat = blockFormat; + reverseFormat.setAlignment(Qt::AlignJustify); + reverseFormat.setTextIndent(32); + + cursor.setBlockFormat(reverseFormat); + cursor.insertText(tr("The direction of the text can be reversed. " + "This is useful for right-to-left " + "languages.")); + + editor->setWindowTitle(tr("Text Block Formats")); + editor->resize(480, 480); + editor->show(); + + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/main.cpp new file mode 100644 index 0000000..42d8bc9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->resize(640, 480); + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/mainwindow.cpp new file mode 100644 index 0000000..9f11ca7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/mainwindow.cpp @@ -0,0 +1,158 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" +#include "xmlwriter.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *saveAction = fileMenu->addAction(tr("&Save...")); + saveAction->setShortcut(tr("Ctrl+S")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + QMenu *insertMenu = new QMenu(tr("&Insert")); + + QAction *calendarAction = insertMenu->addAction(tr("&Calendar")); + calendarAction->setShortcut(tr("Ctrl+I")); + + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(insertMenu); + + editor = new QTextEdit(this); + + connect(saveAction, SIGNAL(triggered()), this, SLOT(saveFile())); + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + connect(calendarAction, SIGNAL(triggered()), this, SLOT(insertCalendar())); + + setCentralWidget(editor); + setWindowTitle(tr("Text Document Writer")); +} + +void MainWindow::saveFile() +{ + QString fileName = QFileDialog::getSaveFileName(this, + tr("Save document as:"), "", tr("XML (*.xml)")); + + if (!fileName.isEmpty()) { + if (writeXml(fileName)) + setWindowTitle(fileName); + else + QMessageBox::warning(this, tr("Warning"), + tr("Failed to save the document."), QMessageBox::Cancel, + QMessageBox::NoButton); + } +} + +void MainWindow::insertCalendar() +{ + QTextCursor cursor(editor->textCursor()); + cursor.movePosition(QTextCursor::Start); + + QTextCharFormat format(cursor.charFormat()); + format.setFontFamily("Courier"); + + QTextCharFormat boldFormat = format; + boldFormat.setFontWeight(QFont::Bold); + + cursor.insertBlock(); + cursor.insertText(" ", boldFormat); + + QDate date = QDate::currentDate(); + int year = date.year(), month = date.month(); + + for (int weekDay = 1; weekDay <= 7; ++weekDay) { + cursor.insertText(QString("%1 ").arg(QDate::shortDayName(weekDay), 3), + boldFormat); + } + + cursor.insertBlock(); + cursor.insertText(" ", format); + + for (int column = 1; column < QDate(year, month, 1).dayOfWeek(); ++column) { + cursor.insertText(" ", format); + } + + for (int day = 1; day <= date.daysInMonth(); ++day) { + int weekDay = QDate(year, month, day).dayOfWeek(); + + if (QDate(year, month, day) == date) + cursor.insertText(QString("%1 ").arg(day, 3), boldFormat); + else + cursor.insertText(QString("%1 ").arg(day, 3), format); + + if (weekDay == 7) { + cursor.insertBlock(); + cursor.insertText(" ", format); + } + } +} + +bool MainWindow::writeXml(const QString &fileName) +{ + XmlWriter documentWriter(editor->document()); + + QDomDocument *domDocument = documentWriter.toXml(); + QFile file(fileName); + + if (file.open(QFile::WriteOnly)) { + QTextStream textStream(&file); + + textStream << domDocument->toByteArray(1); + return true; + } + else + return false; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/mainwindow.h new file mode 100644 index 0000000..4b691b5 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/mainwindow.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QTextEdit; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void insertCalendar(); + void saveFile(); + +private: + bool writeXml(const QString &fileName); + + QTextEdit *editor; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/xmlwriter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/xmlwriter.cpp new file mode 100644 index 0000000..78af3fe --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/xmlwriter.cpp @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "xmlwriter.h" + +QDomDocument *XmlWriter::toXml() +{ + QDomImplementation implementation; + QDomDocumentType docType = implementation.createDocumentType( + "scribe-document", "scribe", "qtsoftware.com/scribe"); + + document = new QDomDocument(docType); + + // ### This processing instruction is required to ensure that any kind + // of encoding is given when the document is written. + QDomProcessingInstruction process = document->createProcessingInstruction( + "xml", "version=\"1.0\" encoding=\"utf-8\""); + document->appendChild(process); + + QDomElement documentElement = document->createElement("document"); + document->appendChild(documentElement); + +//! [0] + QTextBlock currentBlock = textDocument->begin(); + + while (currentBlock.isValid()) { +//! [0] + QDomElement blockElement = document->createElement("block"); + document->appendChild(blockElement); + + readFragment(currentBlock, blockElement, document); + +//! [1] + processBlock(currentBlock); +//! [1] + +//! [2] + currentBlock = currentBlock.next(); + } +//! [2] + + return document; +} + +void XmlWriter::readFragment(const QTextBlock ¤tBlock, + QDomElement blockElement, + QDomDocument *document) +{ +//! [3] //! [4] + QTextBlock::iterator it; + for (it = currentBlock.begin(); !(it.atEnd()); ++it) { + QTextFragment currentFragment = it.fragment(); + if (currentFragment.isValid()) +//! [3] //! [5] + processFragment(currentFragment); +//! [4] //! [5] + + if (currentFragment.isValid()) { + QDomElement fragmentElement = document->createElement("fragment"); + blockElement.appendChild(fragmentElement); + + fragmentElement.setAttribute("length", currentFragment.length()); + QDomText fragmentText = document->createTextNode(currentFragment.text()); + + fragmentElement.appendChild(fragmentText); +//! [6] + } +//! [7] + } +//! [6] //! [7] +} + +void XmlWriter::processBlock(const QTextBlock ¤tBlock) +{ +} + +void XmlWriter::processFragment(const QTextFragment ¤tFragment) +{ +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/xmlwriter.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/xmlwriter.h new file mode 100644 index 0000000..56ce140 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textblock-fragments/xmlwriter.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef XMLWRITER_H +#define XMLWRITER_H + +#include + +class QTextDocument; + +class XmlWriter +{ +public: + XmlWriter(QTextDocument *document) : textDocument(document) {} + QDomDocument *toXml(); + +private: + void readFragment(const QTextBlock ¤tBlock, QDomElement blockElement, + QDomDocument *document); + void processBlock(const QTextBlock ¤tBlock); + void processFragment(const QTextFragment ¤tFragment); + + QDomDocument *document; + QTextDocument *textDocument; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/main.cpp new file mode 100644 index 0000000..42d8bc9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->resize(640, 480); + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/mainwindow.cpp new file mode 100644 index 0000000..33a08e4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/mainwindow.cpp @@ -0,0 +1,166 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" +#include "xmlwriter.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *saveAction = fileMenu->addAction(tr("&Save...")); + saveAction->setShortcut(tr("Ctrl+S")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + QMenu *insertMenu = new QMenu(tr("&Insert")); + + QAction *calendarAction = insertMenu->addAction(tr("&Calendar")); + calendarAction->setShortcut(tr("Ctrl+I")); + + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(insertMenu); + +//! [0] + editor = new QTextEdit(this); +//! [0] + + connect(saveAction, SIGNAL(triggered()), this, SLOT(saveFile())); + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + connect(calendarAction, SIGNAL(triggered()), this, SLOT(insertCalendar())); + + setCentralWidget(editor); + setWindowTitle(tr("Text Document Writer")); +} + +void MainWindow::saveFile() +{ + QString fileName = QFileDialog::getSaveFileName(this, + tr("Save document as:"), "", tr("XML (*.xml)")); + + if (!fileName.isEmpty()) { + if (writeXml(fileName)) + setWindowTitle(fileName); + else + QMessageBox::warning(this, tr("Warning"), + tr("Failed to save the document."), QMessageBox::Cancel, + QMessageBox::NoButton); + } +} + +void MainWindow::insertCalendar() +{ +//! [1] + QTextCursor cursor(editor->textCursor()); + cursor.movePosition(QTextCursor::Start); + + QTextCharFormat format(cursor.charFormat()); + format.setFontFamily("Courier"); + + QTextCharFormat boldFormat = format; + boldFormat.setFontWeight(QFont::Bold); + + cursor.insertBlock(); + cursor.insertText(" ", boldFormat); + + QDate date = QDate::currentDate(); + int year = date.year(), month = date.month(); + + for (int weekDay = 1; weekDay <= 7; ++weekDay) { + cursor.insertText(QString("%1 ").arg(QDate::shortDayName(weekDay), 3), + boldFormat); + } + + cursor.insertBlock(); + cursor.insertText(" ", format); + + for (int column = 1; column < QDate(year, month, 1).dayOfWeek(); ++column) { + cursor.insertText(" ", format); + } + + for (int day = 1; day <= date.daysInMonth(); ++day) { +//! [1] //! [2] + int weekDay = QDate(year, month, day).dayOfWeek(); + + if (QDate(year, month, day) == date) + cursor.insertText(QString("%1 ").arg(day, 3), boldFormat); + else + cursor.insertText(QString("%1 ").arg(day, 3), format); + + if (weekDay == 7) { + cursor.insertBlock(); + cursor.insertText(" ", format); + } +//! [2] //! [3] + } +//! [3] +} + +bool MainWindow::writeXml(const QString &fileName) +{ + XmlWriter documentWriter(editor->document()); + + QDomDocument *domDocument = documentWriter.toXml(); + QFile file(fileName); + + if (file.open(QFile::WriteOnly)) { + QTextStream textStream(&file); + textStream.setCodec(QTextCodec::codecForName("UTF-8")); + + textStream << domDocument->toString(1).toUtf8(); + file.close(); + return true; + } + else + return false; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/mainwindow.h new file mode 100644 index 0000000..4b691b5 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/mainwindow.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QTextEdit; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void insertCalendar(); + void saveFile(); + +private: + bool writeXml(const QString &fileName); + + QTextEdit *editor; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/xmlwriter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/xmlwriter.cpp new file mode 100644 index 0000000..a03a130 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/xmlwriter.cpp @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "xmlwriter.h" + +QDomDocument *XmlWriter::toXml() +{ + QDomImplementation implementation; + QDomDocumentType docType = implementation.createDocumentType( + "scribe-document", "scribe", "qtsoftware.com/scribe"); + + document = new QDomDocument(docType); + + // ### This processing instruction is required to ensure that any kind + // of encoding is given when the document is written. + QDomProcessingInstruction process = document->createProcessingInstruction( + "xml", "version=\"1.0\" encoding=\"utf-8\""); + document->appendChild(process); + + QDomElement documentElement = document->createElement("document"); + document->appendChild(documentElement); + + QTextBlock firstBlock = textDocument->begin(); + createItems(documentElement, firstBlock); + + return document; +} + +void XmlWriter::createItems(QDomElement &parent, const QTextBlock &block) +{ + QTextBlock currentBlock = block; + + while (currentBlock.isValid()) { + QDomElement blockElement = document->createElement("block"); + blockElement.setAttribute("length", currentBlock.length()); + parent.appendChild(blockElement); + + if (!(currentBlock.text().isNull())) { + QDomText textNode = document->createTextNode(currentBlock.text()); + blockElement.appendChild(textNode); + } + + currentBlock = currentBlock.next(); + } +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/xmlwriter.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/xmlwriter.h new file mode 100644 index 0000000..562ce5d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-blocks/xmlwriter.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef XMLWRITER_H +#define XMLWRITER_H + +#include + +class QTextDocument; + +class XmlWriter +{ +public: + XmlWriter(QTextDocument *document) : textDocument(document) {} + QDomDocument *toXml(); + +private: + void createItems(QDomElement &parent, const QTextBlock &block); + + QDomDocument *document; + QTextDocument *textDocument; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-charformats/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-charformats/main.cpp new file mode 100644 index 0000000..092f991 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-charformats/main.cpp @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +QString tr(const char *text) +{ + return QApplication::translate(text, text); +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QTextEdit *editor = new QTextEdit(); + + QTextCursor cursor(editor->textCursor()); + cursor.movePosition(QTextCursor::Start); + + QTextCharFormat plainFormat(cursor.charFormat()); + + QTextCharFormat headingFormat = plainFormat; + headingFormat.setFontWeight(QFont::Bold); + headingFormat.setFontPointSize(16); + + QTextCharFormat emphasisFormat = plainFormat; + emphasisFormat.setFontItalic(true); + + QTextCharFormat qtFormat = plainFormat; + qtFormat.setForeground(QColor("#990000")); + + QTextCharFormat underlineFormat = plainFormat; + underlineFormat.setFontUnderline(true); + +//! [0] + cursor.insertText(tr("Character formats"), + headingFormat); + + cursor.insertBlock(); + + cursor.insertText(tr("Text can be displayed in a variety of " + "different character formats. "), plainFormat); + cursor.insertText(tr("We can emphasize text by ")); + cursor.insertText(tr("making it italic"), emphasisFormat); +//! [0] + cursor.insertText(tr(", give it a "), plainFormat); + cursor.insertText(tr("different color "), qtFormat); + cursor.insertText(tr("to the default text color, "), plainFormat); + cursor.insertText(tr("underline it"), underlineFormat); + cursor.insertText(tr(", and use many other effects."), plainFormat); + + editor->setWindowTitle(tr("Text Document Character Formats")); + editor->resize(320, 480); + editor->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-css/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-css/main.cpp new file mode 100644 index 0000000..987489d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-css/main.cpp @@ -0,0 +1,58 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + + +//! [0] + browser = QTextBrowser() + linkColor = QColor(Qt.red) + sheet = QString.fromLatin1("a { text-decoration: underline color: %1 }").arg(linkColor.name()) + browser.document().setDefaultStyleSheet(sheet) +//! [0] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-cursors/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-cursors/main.cpp new file mode 100644 index 0000000..b224ed4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-cursors/main.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +QString tr(const char *text) +{ + return QApplication::translate(text, text); +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QTextEdit *editor = new QTextEdit; + +//! [0] + QTextDocument *document = editor->document(); + QTextCursor redCursor(document); +//! [0] //! [1] + QTextCursor blueCursor(document); +//! [1] + + QTextCharFormat redFormat(redCursor.charFormat()); + redFormat.setForeground(Qt::red); + QTextCharFormat blueFormat(blueCursor.charFormat()); + blueFormat.setForeground(Qt::blue); + + redCursor.setCharFormat(redFormat); + blueCursor.setCharFormat(blueFormat); + + for (int i = 0; i < 20; ++i) { + if (i % 2 == 0) + redCursor.insertText(tr("%1 ").arg(i), redFormat); + if (i % 5 == 0) + blueCursor.insertText(tr("%1 ").arg(i), blueFormat); + } + + editor->setWindowTitle(tr("Text Document Cursors")); + editor->resize(320, 480); + editor->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-find/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-find/main.cpp new file mode 100644 index 0000000..52187e9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-find/main.cpp @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +QString tr(const char *text) +{ + return QApplication::translate(text, text); +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QTextEdit *editor = new QTextEdit(); + + QTextCursor cursor(editor->textCursor()); + cursor.movePosition(QTextCursor::Start); + + QTextCharFormat plainFormat(cursor.charFormat()); + QTextCharFormat colorFormat = plainFormat; + colorFormat.setForeground(Qt::red); + + cursor.insertText(tr("Text can be displayed in a variety of " + "different character " + "formats. "), plainFormat); + cursor.insertText(tr("We can emphasize text by making it ")); + cursor.insertText(tr("italic, give it a different color ")); + cursor.insertText(tr("to the default text color, underline it, ")); + cursor.insertText(tr("and use many other effects.")); + + QString searchString = tr("text"); + + QTextDocument *document = editor->document(); +//! [0] + QTextCursor newCursor(document); + + while (!newCursor.isNull() && !newCursor.atEnd()) { + newCursor = document->find(searchString, newCursor); + + if (!newCursor.isNull()) { + newCursor.movePosition(QTextCursor::WordRight, + QTextCursor::KeepAnchor); + + newCursor.mergeCharFormat(colorFormat); + } +//! [0] //! [1] + } +//! [1] + + editor->setWindowTitle(tr("Text Document Find")); + editor->resize(320, 480); + editor->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/main.cpp new file mode 100644 index 0000000..2cb0b33 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/main.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->resize(480, 480); + window->show(); + return app.exec(); +} + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/mainwindow.cpp new file mode 100644 index 0000000..76bc692 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/mainwindow.cpp @@ -0,0 +1,171 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" +#include "xmlwriter.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *saveAction = fileMenu->addAction(tr("&Save...")); + saveAction->setShortcut(tr("Ctrl+S")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + menuBar()->addMenu(fileMenu); + editor = new QTextEdit(); + + QTextCursor cursor(editor->textCursor()); + cursor.movePosition(QTextCursor::Start); + + QTextFrame *mainFrame = cursor.currentFrame(); + + QTextCharFormat plainCharFormat; + QTextCharFormat boldCharFormat; + boldCharFormat.setFontWeight(QFont::Bold); +/* main frame +//! [0] + QTextFrame *mainFrame = cursor.currentFrame(); + cursor.insertText(...); +//! [0] +*/ + cursor.insertText("Text documents are represented by the " + "QTextDocument class, rather than by QString objects. " + "Each QTextDocument object contains information about " + "the document's internal representation, its structure, " + "and keeps track of modifications to provide undo/redo " + "facilities. This approach allows features such as the " + "layout management to be delegated to specialized " + "classes, but also provides a focus for the framework.", + plainCharFormat); + +//! [1] + QTextFrameFormat frameFormat; + frameFormat.setMargin(32); + frameFormat.setPadding(8); + frameFormat.setBorder(4); +//! [1] + cursor.insertFrame(frameFormat); + +/* insert frame +//! [2] + cursor.insertFrame(frameFormat); + cursor.insertText(...); +//! [2] +*/ + cursor.insertText("Documents are either converted from external sources " + "or created from scratch using Qt. The creation process " + "can done by an editor widget, such as QTextEdit, or by " + "explicit calls to the Scribe API.", boldCharFormat); + + cursor = mainFrame->lastCursorPosition(); +/* last cursor +//! [3] + cursor = mainFrame->lastCursorPosition(); + cursor.insertText(...); +//! [3] +*/ + cursor.insertText("There are two complementary ways to visualize the " + "contents of a document: as a linear buffer that is " + "used by editors to modify the contents, and as an " + "object hierarchy containing structural information " + "that is useful to layout engines. In the hierarchical " + "model, the objects generally correspond to visual " + "elements such as frames, tables, and lists. At a lower " + "level, these elements describe properties such as the " + "style of text used and its alignment. The linear " + "representation of the document is used for editing and " + "manipulation of the document's contents.", + plainCharFormat); + + + connect(saveAction, SIGNAL(triggered()), this, SLOT(saveFile())); + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + + setCentralWidget(editor); + setWindowTitle(tr("Text Document Frames")); +} + +void MainWindow::saveFile() +{ + QString fileName = QFileDialog::getSaveFileName(this, + tr("Save document as:"), "", tr("XML (*.xml)")); + + if (!fileName.isEmpty()) { + if (writeXml(fileName)) + setWindowTitle(fileName); + else + QMessageBox::warning(this, tr("Warning"), + tr("Failed to save the document."), QMessageBox::Cancel, + QMessageBox::NoButton); + } +} +bool MainWindow::writeXml(const QString &fileName) +{ + XmlWriter documentWriter(editor->document()); + + QDomDocument *domDocument = documentWriter.toXml(); + QFile file(fileName); + + if (file.open(QFile::WriteOnly)) { + QTextStream textStream(&file); + textStream.setCodec(QTextCodec::codecForName("UTF-8")); + + textStream << domDocument->toString(1).toUtf8(); + file.close(); + return true; + } + else + return false; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/mainwindow.h new file mode 100644 index 0000000..9aad859 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/mainwindow.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QTextEdit; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void saveFile(); + +private: + bool writeXml(const QString &fileName); + + QTextEdit *editor; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/xmlwriter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/xmlwriter.cpp new file mode 100644 index 0000000..5949a91 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/xmlwriter.cpp @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "xmlwriter.h" + +QDomDocument *XmlWriter::toXml() +{ + QDomImplementation implementation; + QDomDocumentType docType = implementation.createDocumentType( + "scribe-document", "scribe", "qtsoftware.com/scribe"); + + document = new QDomDocument(docType); + + // ### This processing instruction is required to ensure that any kind + // of encoding is given when the document is written. + QDomProcessingInstruction process = document->createProcessingInstruction( + "xml", "version=\"1.0\" encoding=\"utf-8\""); + document->appendChild(process); + + QDomElement documentElement = document->createElement("document"); + document->appendChild(documentElement); + +//! [0] + QTextFrame *root = textDocument->rootFrame(); +//! [0] + + if (root) + processFrame(documentElement, root); + + return document; +} + +void XmlWriter::processBlock(QDomElement &parent, const QTextBlock &block) +{ + QDomElement blockElement = document->createElement("block"); + blockElement.setAttribute("position", block.position()); + blockElement.setAttribute("length", block.length()); + parent.appendChild(blockElement); + + QTextBlock::iterator it; + for (it = block.begin(); !(it.atEnd()); ++it) { + QTextFragment fragment = it.fragment(); + + if (fragment.isValid()) { + QDomElement fragmentElement = document->createElement("fragment"); + blockElement.appendChild(fragmentElement); + + fragmentElement.setAttribute("length", fragment.length()); + QDomText fragmentText = document->createTextNode(fragment.text()); + + fragmentElement.appendChild(fragmentText); + } + } +} + +void XmlWriter::processFrame(QDomElement &parent, QTextFrame *frame) +{ + QDomElement frameElement = document->createElement("frame"); + frameElement.setAttribute("begin", frame->firstPosition()); + frameElement.setAttribute("end", frame->lastPosition()); + parent.appendChild(frameElement); + +//! [1] + QTextFrame::iterator it; + for (it = frame->begin(); !(it.atEnd()); ++it) { + + QTextFrame *childFrame = it.currentFrame(); + QTextBlock childBlock = it.currentBlock(); + + if (childFrame) +//! [1] //! [2] + processFrame(frameElement, childFrame); + else if (childBlock.isValid()) + processBlock(frameElement, childBlock); + } +//! [2] +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/xmlwriter.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/xmlwriter.h new file mode 100644 index 0000000..707af51 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-frames/xmlwriter.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef XMLWRITER_H +#define XMLWRITER_H + +#include + +class QTextDocument; + +class XmlWriter +{ +public: + XmlWriter(QTextDocument *document) : textDocument(document) {} + QDomDocument *toXml(); + +private: + void processBlock(QDomElement &parent, const QTextBlock &block); + void processFrame(QDomElement &parent, QTextFrame *frame); + + QDomDocument *document; +//! [0] + QTextDocument *textDocument; +//! [0] +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imagedrop/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imagedrop/main.cpp new file mode 100644 index 0000000..4ae9b68 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imagedrop/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "textedit.h" + +int main(int argc, char * argv[]) +{ + QApplication app(argc, argv); + + TextEdit *textEdit = new TextEdit; + textEdit->show(); + + return app.exec(); +} \ No newline at end of file diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imagedrop/textedit.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imagedrop/textedit.cpp new file mode 100644 index 0000000..a0392cc --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imagedrop/textedit.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "textedit.h" +#include + +TextEdit::TextEdit(QWidget *parent) + : QTextEdit(parent) +{ +} + +//! [0] + +def canInsertFromMimeData(source): + if source.hasImage: + return True + else: + return QTextEdit.canInsertFromMimeData(source) + +//! [0] + +//! [1] +void TextEdit::insertFromMimeData( const QMimeData *source ) +{ + if (source->hasImage()) + { + QImage image = qvariant_cast(source->imageData()); + QTextCursor cursor = this->textCursor(); + QTextDocument *document = this->document(); + document->addResource(QTextDocument::ImageResource, QUrl("image"), image); + cursor.insertImage("image"); + } +} +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imagedrop/textedit.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imagedrop/textedit.h new file mode 100644 index 0000000..a80481a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imagedrop/textedit.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TEXTEDIT_H +#define TEXTEDIT_H + +#include + +class TextEdit : public QTextEdit +{ + Q_OBJECT + +public: + TextEdit(QWidget *parent=0); + bool canInsertFromMimeData( const QMimeData *source ) const; + void insertFromMimeData( const QMimeData *source ); +}; + +#endif \ No newline at end of file diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imageformat/images.qrc b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imageformat/images.qrc new file mode 100644 index 0000000..6473daf --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imageformat/images.qrc @@ -0,0 +1,6 @@ + + + images/advert.png + images/newimage.png + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imageformat/images/advert.png b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imageformat/images/advert.png new file mode 100644 index 0000000000000000000000000000000000000000..40e10d5225dc1bdb09932ea11ba2eca3d0dd72a8 GIT binary patch literal 16291 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 literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imageformat/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imageformat/main.cpp new file mode 100644 index 0000000..5b59a20 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-imageformat/main.cpp @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +QString tr(const char *text) +{ + return QApplication::translate(text, text); +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QTextEdit *editor = new QTextEdit; + + QTextDocument *document = new QTextDocument(editor); + QTextCursor cursor(document); + + QTextImageFormat imageFormat; + imageFormat.setName(":/images/advert.png"); + cursor.insertImage(imageFormat); + + QTextBlock block = cursor.block(); + QTextFragment fragment; + QTextBlock::iterator it; + + for (it = block.begin(); !(it.atEnd()); ++it) { + fragment = it.fragment(); + + if (fragment.contains(cursor.position())) + break; + } + +//! [0] + if (fragment.isValid()) { + QTextImageFormat newImageFormat = fragment.charFormat().toImageFormat(); + + if (newImageFormat.isValid()) { + newImageFormat.setName(":/images/newimage.png"); + QTextCursor helper = cursor; + + helper.setPosition(fragment.position()); + helper.setPosition(fragment.position() + fragment.length(), + QTextCursor::KeepAnchor); + helper.setCharFormat(newImageFormat); +//! [0] //! [1] + } +//! [1] //! [2] + } +//! [2] + + cursor.insertBlock(); + cursor.insertText("Code less. Create more."); + + editor->setDocument(document); + editor->setWindowTitle(tr("Text Document Image Format")); + editor->resize(320, 480); + editor->show(); + + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-images/images.qrc b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-images/images.qrc new file mode 100644 index 0000000..09e305e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-images/images.qrc @@ -0,0 +1,5 @@ + + + images/advert.png + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-images/images/advert.png b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-images/images/advert.png new file mode 100644 index 0000000000000000000000000000000000000000..40e10d5225dc1bdb09932ea11ba2eca3d0dd72a8 GIT binary patch literal 16291 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 + +QString tr(const char *text) +{ + return QApplication::translate(text, text); +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QTextEdit *editor = new QTextEdit; + +//! [0] + QTextDocument *document = new QTextDocument(editor); + QTextCursor cursor(document); +//! [0] + +//! [1] + QTextImageFormat imageFormat; + imageFormat.setName(":/images/advert.png"); + cursor.insertImage(imageFormat); +//! [1] + + cursor.insertBlock(); + cursor.insertText("Code less. Create more."); + + editor->setDocument(document); + editor->setWindowTitle(tr("Text Document Images")); + editor->resize(320, 480); + editor->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-listitems/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-listitems/main.cpp new file mode 100644 index 0000000..42d8bc9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-listitems/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->resize(640, 480); + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-listitems/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-listitems/mainwindow.cpp new file mode 100644 index 0000000..55f4a86 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-listitems/mainwindow.cpp @@ -0,0 +1,207 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + fileMenu->addAction(tr("E&xit"), this, SLOT(close()), + QKeySequence(tr("Ctrl+Q", "File|Exit"))); + + QMenu *actionsMenu = new QMenu(tr("&Actions")); + actionsMenu->addAction(tr("&Highlight List Items"), + this, SLOT(highlightListItems())); + actionsMenu->addAction(tr("&Show Current List"), this, SLOT(showList())); + + QMenu *insertMenu = new QMenu(tr("&Insert")); + + insertMenu->addAction(tr("&List"), this, SLOT(insertList()), + QKeySequence(tr("Ctrl+L", "Insert|List"))); + + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(insertMenu); + menuBar()->addMenu(actionsMenu); + + editor = new QTextEdit(this); + document = new QTextDocument(this); + editor->setDocument(document); + + setCentralWidget(editor); + setWindowTitle(tr("Text Document List Items")); +} + +void MainWindow::highlightListItems() +{ + QTextCursor cursor = editor->textCursor(); + QTextList *list = cursor.currentList(); + + if (!list) + return; + + cursor.beginEditBlock(); +//! [0] + for (int index = 0; index < list->count(); ++index) { + QTextBlock listItem = list->item(index); +//! [0] + QTextBlockFormat newBlockFormat = listItem.blockFormat(); + newBlockFormat.setBackground(Qt::lightGray); + QTextCursor itemCursor = cursor; + itemCursor.setPosition(listItem.position()); + //itemCursor.movePosition(QTextCursor::StartOfBlock); + itemCursor.movePosition(QTextCursor::EndOfBlock, + QTextCursor::KeepAnchor); + itemCursor.setBlockFormat(newBlockFormat); + /* +//! [1] + processListItem(listItem); +//! [1] + */ +//! [2] + } +//! [2] + cursor.endEditBlock(); +} + +void MainWindow::showList() +{ + QTextCursor cursor = editor->textCursor(); + QTextFrame *frame = cursor.currentFrame(); + + if (!frame) + return; + + QTreeWidget *treeWidget = new QTreeWidget; + treeWidget->setColumnCount(1); + QStringList headerLabels; + headerLabels << tr("Lists"); + treeWidget->setHeaderLabels(headerLabels); + + QTreeWidgetItem *parentItem = 0; + QTreeWidgetItem *item; + QTreeWidgetItem *lastItem = 0; + parentItems.clear(); + previousItems.clear(); + +//! [3] + QTextFrame::iterator it; + for (it = frame->begin(); !(it.atEnd()); ++it) { + + QTextBlock block = it.currentBlock(); + + if (block.isValid()) { + + QTextList *list = block.textList(); + + if (list) { + int index = list->itemNumber(block); +//! [3] + if (index == 0) { + parentItems.append(parentItem); + previousItems.append(lastItem); + listStructures.append(list); + parentItem = lastItem; + lastItem = 0; + + if (parentItem != 0) + item = new QTreeWidgetItem(parentItem, lastItem); + else + item = new QTreeWidgetItem(treeWidget, lastItem); + + } else { + + while (parentItem != 0 && listStructures.last() != list) { + listStructures.pop_back(); + parentItem = parentItems.takeLast(); + lastItem = previousItems.takeLast(); + } + if (parentItem != 0) + item = new QTreeWidgetItem(parentItem, lastItem); + else + item = new QTreeWidgetItem(treeWidget, lastItem); + } + item->setText(0, block.text()); + lastItem = item; + /* +//! [4] + processListItem(list, index); +//! [4] + */ +//! [5] + } +//! [5] //! [6] + } +//! [6] //! [7] + } +//! [7] + + treeWidget->setWindowTitle(tr("List Contents")); + treeWidget->show(); +} + +void MainWindow::insertList() +{ + QTextCursor cursor = editor->textCursor(); + cursor.beginEditBlock(); + + QTextList *list = cursor.currentList(); + QTextListFormat listFormat; + if (list) + listFormat = list->format(); + + listFormat.setStyle(QTextListFormat::ListDisc); + listFormat.setIndent(listFormat.indent() + 1); + cursor.insertList(listFormat); + + cursor.endEditBlock(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-listitems/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-listitems/mainwindow.h new file mode 100644 index 0000000..deeeab8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-listitems/mainwindow.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include +#include + +class QAction; +class QTextDocument; +class QTextEdit; +class QTextList; +class QTreeWidgetItem; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void insertList(); + void highlightListItems(); + void showList(); + +private: + QString currentFile; + QTextEdit *editor; + QTextDocument *document; + QList listStructures; + QList previousItems; + QList parentItems; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-lists/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-lists/main.cpp new file mode 100644 index 0000000..42d8bc9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-lists/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->resize(640, 480); + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-lists/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-lists/mainwindow.cpp new file mode 100644 index 0000000..45f1ae8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-lists/mainwindow.cpp @@ -0,0 +1,201 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + fileMenu->addAction(tr("E&xit"), this, SLOT(close()), + QKeySequence(tr("Ctrl+Q", "File|Exit"))); + + QMenu *editMenu = new QMenu(tr("&Edit")); + + cutAction = editMenu->addAction(tr("Cu&t"), this, SLOT(cutSelection()), + QKeySequence(tr("Ctrl+X", "Edit|Cut"))); + copyAction = editMenu->addAction(tr("&Copy"), this, SLOT(copySelection()), + QKeySequence(tr("Ctrl+C", "Edit|Copy"))); + pasteAction = editMenu->addAction(tr("&Paste"), this, + SLOT(pasteSelection()), QKeySequence(tr("Ctrl+V", "Edit|Paste"))); + + QMenu *selectMenu = new QMenu(tr("&Select")); + selectMenu->addAction(tr("&Word"), this, SLOT(selectWord())); + selectMenu->addAction(tr("&Line"), this, SLOT(selectLine())); + selectMenu->addAction(tr("&Block"), this, SLOT(selectBlock())); + selectMenu->addAction(tr("&Frame"), this, SLOT(selectFrame())); + + QMenu *insertMenu = new QMenu(tr("&Insert")); + + insertMenu->addAction(tr("&List"), this, SLOT(insertList()), + QKeySequence(tr("Ctrl+L", "Insert|List"))); + + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(editMenu); + menuBar()->addMenu(selectMenu); + menuBar()->addMenu(insertMenu); + + editor = new QTextEdit(this); + document = new QTextDocument(this); + editor->setDocument(document); + + connect(editor, SIGNAL(selectionChanged()), this, SLOT(updateMenus())); + + updateMenus(); + + setCentralWidget(editor); + setWindowTitle(tr("Text Document Writer")); +} + +void MainWindow::cutSelection() +{ + QTextCursor cursor = editor->textCursor(); + if (cursor.hasSelection()) { + selection = cursor.selection(); + cursor.removeSelectedText(); + } +} + +void MainWindow::copySelection() +{ + QTextCursor cursor = editor->textCursor(); + if (cursor.hasSelection()) { + selection = cursor.selection(); + cursor.clearSelection(); + } +} + +void MainWindow::pasteSelection() +{ + QTextCursor cursor = editor->textCursor(); + cursor.insertFragment(selection); +} + +void MainWindow::selectWord() +{ + QTextCursor cursor = editor->textCursor(); + QTextBlock block = cursor.block(); + + cursor.beginEditBlock(); + cursor.movePosition(QTextCursor::StartOfWord); + cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor); + cursor.endEditBlock(); + + editor->setTextCursor(cursor); +} + +void MainWindow::selectLine() +{ + QTextCursor cursor = editor->textCursor(); + QTextBlock block = cursor.block(); + + cursor.beginEditBlock(); + cursor.movePosition(QTextCursor::StartOfLine); + cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); + cursor.endEditBlock(); + + editor->setTextCursor(cursor); +} + +void MainWindow::selectBlock() +{ + QTextCursor cursor = editor->textCursor(); + QTextBlock block = cursor.block(); + + cursor.beginEditBlock(); + cursor.movePosition(QTextCursor::StartOfBlock); + cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); + cursor.endEditBlock(); + + editor->setTextCursor(cursor); +} + +void MainWindow::selectFrame() +{ + QTextCursor cursor = editor->textCursor(); + QTextFrame *frame = cursor.currentFrame(); + + cursor.beginEditBlock(); + cursor.setPosition(frame->firstPosition()); + cursor.setPosition(frame->lastPosition(), QTextCursor::KeepAnchor); + cursor.endEditBlock(); + + editor->setTextCursor(cursor); +} + +void MainWindow::insertList() +{ + QTextCursor cursor = editor->textCursor(); + cursor.beginEditBlock(); + + QTextList *list = cursor.currentList(); +//! [0] + listFormat = QTextListFormat() + if list: + listFormat = list.format() + listFormat.setIndent(listFormat.indent() + 1) + + listFormat.setStyle(QTextListFormat.ListDisc) + cursor.insertList(listFormat) +//! [0] + + cursor.endEditBlock(); +} + +void MainWindow::updateMenus() +{ + QTextCursor cursor = editor->textCursor(); + cutAction->setEnabled(cursor.hasSelection()); + copyAction->setEnabled(cursor.hasSelection()); + + pasteAction->setEnabled(!selection.isEmpty()); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-lists/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-lists/mainwindow.h new file mode 100644 index 0000000..a52fa76 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-lists/mainwindow.h @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include + +class QAction; +class QTextDocument; +class QTextEdit; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void cutSelection(); + void copySelection(); + void insertList(); + void pasteSelection(); + void selectWord(); + void selectLine(); + void selectBlock(); + void selectFrame(); + void updateMenus(); + +private: + QAction *cutAction; + QAction *copyAction; + QAction *pasteAction; + QString currentFile; + QTextEdit *editor; + QTextDocument *document; + QTextDocumentFragment selection; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-printing/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-printing/main.cpp new file mode 100644 index 0000000..42d8bc9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-printing/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->resize(640, 480); + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-printing/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-printing/mainwindow.cpp new file mode 100644 index 0000000..b5ce5df --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-printing/mainwindow.cpp @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + fileMenu->addAction(tr("&Open..."), this, SLOT(openFile()), + QKeySequence(tr("Ctrl+O", "File|Open"))); + + printAction = fileMenu->addAction(tr("&Print..."), this, SLOT(printFile())); + printAction->setEnabled(false); + + pdfPrintAction = fileMenu->addAction(tr("Print as P&DF..."), this, SLOT(printPdf())); + pdfPrintAction->setEnabled(false); + + fileMenu->addAction(tr("E&xit"), this, SLOT(close()), + QKeySequence(tr("Ctrl+Q", "File|Exit"))); + + menuBar()->addMenu(fileMenu); + + editor = new QTextEdit(this); + document = new QTextDocument(this); + editor->setDocument(document); + + connect(editor, SIGNAL(selectionChanged()), this, SLOT(updateMenus())); + + setCentralWidget(editor); + setWindowTitle(tr("Text Document Writer")); +} + +void MainWindow::openFile() +{ + QString fileName = QFileDialog::getOpenFileName(this, + tr("Open file"), currentFile, "HTML files (*.html);;Text files (*.txt)"); + + if (!fileName.isEmpty()) { + QFileInfo info(fileName); + if (info.completeSuffix() == "html") { + QFile file(fileName); + + if (file.open(QIODevice::ReadOnly)) { + editor->setHtml(file.readAll()); + file.close(); + currentFile = fileName; + } + } else if (info.completeSuffix() == "txt") { + QFile file(fileName); + + if (file.open(QIODevice::ReadOnly)) { + editor->setPlainText(file.readAll()); + file.close(); + currentFile = fileName; + } + } + printAction->setEnabled(true); + pdfPrintAction->setEnabled(true); + } +} + +void MainWindow::printFile() +{ +//! [0] + QTextDocument *document = editor->document(); + QPrinter printer; + + QPrintDialog *dlg = new QPrintDialog(&printer, this); + if (dlg->exec() != QDialog::Accepted) + return; + + document->print(&printer); +//! [0] +} + +void MainWindow::printPdf() +{ + QPrinter printer(QPrinter::HighResolution); + printer.setOutputFormat(QPrinter::PdfFormat); + + QPrintDialog *printDialog = new QPrintDialog(&printer, this); + if (printDialog->exec() == QDialog::Accepted) + editor->document()->print(&printer); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-printing/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-printing/mainwindow.h new file mode 100644 index 0000000..c80d42b --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-printing/mainwindow.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include + +class QAction; +class QTextDocument; +class QTextEdit; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void openFile(); + void printFile(); + void printPdf(); + +private: + QAction *printAction; + QAction *pdfPrintAction; + QString currentFile; + QTextEdit *editor; + QTextDocument *document; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-selections/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-selections/main.cpp new file mode 100644 index 0000000..42d8bc9 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-selections/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->resize(640, 480); + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-selections/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-selections/mainwindow.cpp new file mode 100644 index 0000000..847dafe --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-selections/mainwindow.cpp @@ -0,0 +1,213 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + fileMenu->addAction(tr("&Open..."), this, SLOT(openFile()), + QKeySequence(tr("Ctrl+O", "File|Open"))); + + QAction *quitAction = fileMenu->addAction(tr("E&xit"), this, SLOT(close())); + quitAction->setShortcut(tr("Ctrl+Q")); + + QMenu *editMenu = new QMenu(tr("&Edit")); + + cutAction = editMenu->addAction(tr("Cu&t"), this, SLOT(cutSelection())); + cutAction->setShortcut(tr("Ctrl+X")); + cutAction->setEnabled(false); + + copyAction = editMenu->addAction(tr("&Copy"), this, SLOT(copySelection())); + copyAction->setShortcut(tr("Ctrl+C")); + copyAction->setEnabled(false); + + pasteAction = editMenu->addAction(tr("&Paste"), this, SLOT(pasteSelection())); + pasteAction->setShortcut(tr("Ctrl+V")); + pasteAction->setEnabled(false); + + QMenu *selectMenu = new QMenu(tr("&Select")); + selectMenu->addAction(tr("&Word"), this, SLOT(selectWord())); + selectMenu->addAction(tr("&Line"), this, SLOT(selectLine())); + selectMenu->addAction(tr("&Block"), this, SLOT(selectBlock())); + selectMenu->addAction(tr("&Frame"), this, SLOT(selectFrame())); + + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(editMenu); + menuBar()->addMenu(selectMenu); + + editor = new QTextEdit(this); + document = new QTextDocument(this); + editor->setDocument(document); + + connect(editor, SIGNAL(selectionChanged()), this, SLOT(updateMenus())); + + setCentralWidget(editor); + setWindowTitle(tr("Text Document Writer")); +} + +void MainWindow::openFile() +{ + QString fileName = QFileDialog::getOpenFileName(this, + tr("Open file"), currentFile, "HTML files (*.html);;Text files (*.txt)"); + + if (!fileName.isEmpty()) { + QFileInfo info(fileName); + if (info.completeSuffix() == "html") { + QFile file(fileName); + + if (file.open(QFile::ReadOnly)) { + editor->setHtml(QString(file.readAll())); + file.close(); + currentFile = fileName; + } + } else if (info.completeSuffix() == "txt") { + QFile file(fileName); + + if (file.open(QFile::ReadOnly)) { + editor->setPlainText(file.readAll()); + file.close(); + currentFile = fileName; + } + } + } +} + +void MainWindow::cutSelection() +{ + QTextCursor cursor = editor->textCursor(); + if (cursor.hasSelection()) { + selection = cursor.selection(); + cursor.removeSelectedText(); + } +} + +void MainWindow::copySelection() +{ + QTextCursor cursor = editor->textCursor(); + if (cursor.hasSelection()) { + selection = cursor.selection(); + cursor.clearSelection(); + } +} + +void MainWindow::pasteSelection() +{ + QTextCursor cursor = editor->textCursor(); + cursor.insertFragment(selection); +} + +void MainWindow::selectWord() +{ + QTextCursor cursor = editor->textCursor(); + QTextBlock block = cursor.block(); + +//! [0] + cursor.beginEditBlock(); +//! [1] + cursor.movePosition(QTextCursor::StartOfWord); + cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor); +//! [1] + cursor.endEditBlock(); +//! [0] + + editor->setTextCursor(cursor); +} + +void MainWindow::selectLine() +{ + QTextCursor cursor = editor->textCursor(); + QTextBlock block = cursor.block(); + + cursor.beginEditBlock(); + cursor.movePosition(QTextCursor::StartOfLine); + cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); + cursor.endEditBlock(); + + editor->setTextCursor(cursor); +} + +void MainWindow::selectBlock() +{ + QTextCursor cursor = editor->textCursor(); + QTextBlock block = cursor.block(); + + cursor.beginEditBlock(); + cursor.movePosition(QTextCursor::StartOfBlock); + cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); + cursor.endEditBlock(); + + editor->setTextCursor(cursor); +} + +void MainWindow::selectFrame() +{ + QTextCursor cursor = editor->textCursor(); + QTextFrame *frame = cursor.currentFrame(); + + cursor.beginEditBlock(); + cursor.setPosition(frame->firstPosition()); + cursor.setPosition(frame->lastPosition(), QTextCursor::KeepAnchor); + cursor.endEditBlock(); + + editor->setTextCursor(cursor); +} + +void MainWindow::updateMenus() +{ + QTextCursor cursor = editor->textCursor(); + cutAction->setEnabled(cursor.hasSelection()); + copyAction->setEnabled(cursor.hasSelection()); + + pasteAction->setEnabled(!selection.isEmpty()); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-selections/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-selections/mainwindow.h new file mode 100644 index 0000000..ba88919 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-selections/mainwindow.h @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include + +class QAction; +class QTextDocument; +class QTextEdit; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void cutSelection(); + void copySelection(); + void openFile(); + void pasteSelection(); + void selectWord(); + void selectLine(); + void selectBlock(); + void selectFrame(); + void updateMenus(); + +private: + QAction *cutAction; + QAction *copyAction; + QAction *pasteAction; + QString currentFile; + QTextEdit *editor; + QTextDocument *document; + QTextDocumentFragment selection; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/main.cpp new file mode 100644 index 0000000..b9a13a8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/main.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->resize(480, 480); + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/mainwindow.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/mainwindow.cpp new file mode 100644 index 0000000..cf43b08 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/mainwindow.cpp @@ -0,0 +1,125 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] //! [1] + cursor = QTextCursor(editor.textCursor()) +//! [0] + cursor.movePosition(QTextCursor.Start) +//! [1] + +//! [2] + tableFormat = QTextTableFormat() + tableFormat.setBackground(QColor("#e0e0e0")) + QVector constraints + constraints << QTextLength(QTextLength.PercentageLength, 16) + constraints << QTextLength(QTextLength.PercentageLength, 28) + constraints << QTextLength(QTextLength.PercentageLength, 28) + constraints << QTextLength(QTextLength.PercentageLength, 28) + tableFormat.setColumnWidthConstraints(constraints) +//! [3] + table = cursor.insertTable(rows, columns, tableFormat) +//! [2] //! [3] + +//! [4] + cell = table.cellAt(0, 0) + cellCursor = cell.firstCursorPosition() + cellCursor.insertText(tr("Week"), charFormat) +//! [4] + +//! [5] + for column in range(columns): + cell = table.cellAt(0, column) + cellCursor = cell.firstCursorPosition() + cellCursor.insertText(tr("Team %1").arg(column), charFormat) + + + for row in range(rows): + cell = table.cellAt(row, 0) + cellCursor = cell.firstCursorPosition() + cellCursor.insertText(tr("%1").arg(row), charFormat) + + for column in range(columns) + if (row-1) % 3 == column-1: +//! [5] //! [6] + cell = table.cellAt(row, column) + cellCursor = cell.firstCursorPosition() + cellCursor.insertText(tr("On duty"), charFormat) + +//! [6] //! [7] + +//! [7] //! [8] + +//! [8] + +//! [9] + for row in range(table.rows()): + for column in range(table.columns()): + tableCell = table.cellAt(row, column) +//! [9] + QTextFrame.iterator it + QString text + for (it = tableCell.begin() !(it.atEnd()); ++it): + QTextBlock childBlock = it.currentBlock() + if (childBlock.isValid()) + text += childBlock.text() + + Item = QTableWidgetItem(text) + tableWidget.setItem(row, column, Item) + +//! [10] + processTableCell(tableCell) +//! [10] + +//! [11] + +//! [11] //! [12] + +//! [12] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/mainwindow.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/mainwindow.h new file mode 100644 index 0000000..36fd197 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/mainwindow.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QTextEdit; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void saveFile(); + void showTable(); + +private: + bool writeXml(const QString &fileName); + + QTextEdit *editor; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/xmlwriter.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/xmlwriter.cpp new file mode 100644 index 0000000..b7eca8a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/xmlwriter.cpp @@ -0,0 +1,163 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "xmlwriter.h" + +QDomDocument *XmlWriter::toXml() +{ + QDomImplementation implementation; + QDomDocumentType docType = implementation.createDocumentType( + "scribe-document", "scribe", "qtsoftware.com/scribe"); + + document = new QDomDocument(docType); + + // ### This processing instruction is required to ensure that any kind + // of encoding is given when the document is written. + QDomProcessingInstruction process = document->createProcessingInstruction( + "xml", "version=\"1.0\" encoding=\"utf-8\""); + document->appendChild(process); + + QDomElement documentElement = document->createElement("document"); + document->appendChild(documentElement); + + QTextFrame *root = textDocument->rootFrame(); + + if (root) + processFrame(documentElement, root); + + return document; +} + +void XmlWriter::processBlock(QDomElement &parent, const QTextBlock &block) +{ + QDomElement blockElement = document->createElement("block"); + blockElement.setAttribute("position", block.position()); + blockElement.setAttribute("length", block.length()); + parent.appendChild(blockElement); + + QTextBlock::iterator it; + for (it = block.begin(); !(it.atEnd()); ++it) { + QTextFragment fragment = it.fragment(); + + if (fragment.isValid()) { + QDomElement fragmentElement = document->createElement("fragment"); + blockElement.appendChild(fragmentElement); + + fragmentElement.setAttribute("length", fragment.length()); + QDomText fragmentText = document->createTextNode(fragment.text()); + + fragmentElement.appendChild(fragmentText); + } + } +} + +void XmlWriter::processFrame(QDomElement &parent, QTextFrame *frame) +{ + QDomElement frameElement = document->createElement("frame"); + frameElement.setAttribute("begin", frame->firstPosition()); + frameElement.setAttribute("end", frame->lastPosition()); + parent.appendChild(frameElement); + +//! [0] + QTextFrame::iterator it; + for (it = frame->begin(); !(it.atEnd()); ++it) { + + QTextFrame *childFrame = it.currentFrame(); + QTextBlock childBlock = it.currentBlock(); + + if (childFrame) { + QTextTable *childTable = qobject_cast(childFrame); + + if (childTable) + processTable(frameElement, childTable); + else + processFrame(frameElement, childFrame); + + } else if (childBlock.isValid()) +//! [0] //! [1] + processBlock(frameElement, childBlock); + } +//! [1] +} + +void XmlWriter::processTable(QDomElement &parent, QTextTable *table) +{ + QDomElement element = document->createElement("table"); + + for (int row = 0; row < table->rows(); ++row) { + for (int column = 0; column < table->columns(); ++column) { + QTextTableCell cell = table->cellAt(row, column); + processTableCell(element, cell); + } + } + parent.appendChild(element); +} + +void XmlWriter::processTableCell(QDomElement &parent, const QTextTableCell &cell) +{ + QDomElement element = document->createElement("cell"); + element.setAttribute("row", cell.row()); + element.setAttribute("column", cell.column()); + + QTextFrame::iterator it; + for (it = cell.begin(); !(it.atEnd()); ++it) { + + QTextFrame *childFrame = it.currentFrame(); + QTextBlock childBlock = it.currentBlock(); + + if (childFrame) + processFrame(element, childFrame); + else if (childBlock.isValid()) + processBlock(element, childBlock); + } + parent.appendChild(element); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/xmlwriter.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/xmlwriter.h new file mode 100644 index 0000000..ebfbc82 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-tables/xmlwriter.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef XMLWRITER_H +#define XMLWRITER_H + +#include + +class QTextDocument; + +class XmlWriter +{ +public: + XmlWriter(QTextDocument *document) : textDocument(document) {} + QDomDocument *toXml(); + +private: + void processBlock(QDomElement &parent, const QTextBlock &block); + void processFrame(QDomElement &parent, QTextFrame *frame); + void processTable(QDomElement &parent, QTextTable *table); + void processTableCell(QDomElement &parent, const QTextTableCell &cell); + + QDomDocument *document; + QTextDocument *textDocument; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-texttable/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-texttable/main.cpp new file mode 100644 index 0000000..b662263 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocument-texttable/main.cpp @@ -0,0 +1,56 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] + table.mergeCells(0, 0, 1, 2) +//! [0] //! [1] + table.splitCell(0, 0, 1, 1) +//! [1] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocumentendsnippet.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocumentendsnippet.cpp new file mode 100644 index 0000000..c730134 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/textdocumentendsnippet.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +int main(int argv, char **args) +{ + QString contentString("One\nTwp\nThree"); + + QTextDocument *doc = new QTextDocument(contentString); + +//! [0] + it = doc.begin() + while it != doc.end(): + print it.text() + it = it.next() +//! [0] + + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/threads/threads.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/threads/threads.cpp new file mode 100644 index 0000000..bc31e0f --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/threads/threads.cpp @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +#include "threads.h" + +//! [0] +void MyThread::run() +//! [0] //! [1] +{ +//! [1] //! [2] +} +//! [2] + +#define Counter ReentrantCounter + +//! [3] +class Counter +//! [3] //! [4] +{ +public: + Counter() { n = 0; } + + void increment() { ++n; } + void decrement() { --n; } + int value() const { return n; } + +private: + int n; +}; +//! [4] + +#undef Counter +#define Counter ThreadSafeCounter + +//! [5] +class Counter +//! [5] //! [6] +{ +public: + Counter() { n = 0; } + + void increment() { QMutexLocker locker(&mutex); ++n; } + void decrement() { QMutexLocker locker(&mutex); --n; } + int value() const { QMutexLocker locker(&mutex); return n; } + +private: + mutable QMutex mutex; + int n; +}; +//! [6] + +typedef int SomeClass; + +//! [7] +QThreadStorage *> caches; + +void cacheObject(const QString &key, SomeClass *object) +//! [7] //! [8] +{ + if (!caches.hasLocalData()) + caches.setLocalData(new QCache); + + caches.localData()->insert(key, object); +} + +void removeFromCache(const QString &key) +//! [8] //! [9] +{ + if (!caches.hasLocalData()) + return; + + caches.localData()->remove(key); +} +//! [9] + +int main() +{ + return 0; +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/threads/threads.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/threads/threads.h new file mode 100644 index 0000000..2c48943 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/threads/threads.h @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +//! [0] +class MyThread : public QThread +{ + Q_OBJECT + +protected: + void run(); +}; +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/timeline/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/timeline/main.cpp new file mode 100644 index 0000000..22e7b51 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/timeline/main.cpp @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +int main(int argv, char *args[]) +{ + QApplication app(argv, args) + +//! [0] + ball = QGraphicsEllipseItem(0, 0, 20, 20) + + timer = QTimeLine(5000) + timer.setFrameRange(0, 100) + + animation = QGraphicsItemAnimation() + animation.setItem(ball) + animation.setTimeLine(timer) + + for i in range(200): + animation.setPosAt(i / 200.0, QPointF(i, i)) + + scene = QGraphicsScene() + scene.setSceneRect(0, 0, 250, 250) + scene.addItem(ball) + + view = QGraphicsView(scene) + view.show() + + timer.start() +//! [0] + + return app.exec() +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/timers/timers.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/timers/timers.cpp new file mode 100644 index 0000000..fbbd46a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/timers/timers.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +from PySide2.QtCore import QTimer + +class Foo : public QObject +{ +public: + Foo() +} + +Foo::Foo() +{ +//! [0] + timer = QTimer(self) +//! [0] //! [1] + timer.timeout.connect(self.updateCaption) +//! [1] //! [2] + timer.start(1000) +//! [2] + +//! [3] + QTimer.singleShot(200, self.updateCaption) +//! [3] + + { + // ZERO-CASE +//! [4] + timer = QTimer(self) +//! [4] //! [5] + timer.timeout.connect(self.processOneThing) +//! [5] //! [6] + timer.start() +//! [6] + } +} + +int main() +{ + +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/transform/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/transform/main.cpp new file mode 100644 index 0000000..325ea1c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/transform/main.cpp @@ -0,0 +1,110 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + + +//! [0] +def paintEvent(self, event) + painter = QPainter(self) + painter.setPen(QPen(Qt.blue, 1, Qt.DashLine)) + painter.drawRect(0, 0, 100, 100) + + painter.rotate(45) + + painter.setFont(QFont("Helvetica", 24)) + painter.setPen(QPen(Qt.black, 1)) + painter.drawText(20, 10, "QTransform") +//! [0] + +//! [1] +def paintEvent(self, event) + painter = QPainter(self) + painter.setPen(QPen(Qt.blue, 1, Qt.DashLine)) + painter.drawRect(0, 0, 100, 100) + + transform = QTransform() + transform.translate(50, 50) + transform.rotate(45) + transform.scale(0.5, 1.0) + painter.setTransform(transform) + + painter.setFont(QFont("Helvetica", 24)) + painter.setPen(QPen(Qt.black, 1)) + painter.drawText(20, 10, "QTransform") +//! [1] + + +//! [2] +def paintEvent(self, event) + pi = 3.14 + + a = pi/180 * 45.0 + sina = sin(a) + cosa = cos(a) + + translationTransform = QTransform(1, 0, 0, 1, 50.0, 50.0) + rotationTransform = QTransform(cosa, sina, -sina, cosa, 0, 0) + scalingTransform = QTransform(0.5, 0, 0, 1.0, 0, 0) + + transform = QTransform() + transform = scalingTransform * rotationTransform * translationTransform + + painter = QPainter(self) + painter.setPen(QPen(Qt.blue, 1, Qt.DashLine)) + painter.drawRect(0, 0, 100, 100) + + painter.setTransform(transform) + + painter.setFont(QFont("Helvetica", 24)) + painter.setPen(QPen(Qt.black, 1)) + painter.drawText(20, 10, "QTransform") + +//! [2] + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/uitools/calculatorform/calculatorform.ui b/sources/pyside2/doc/codesnippets/doc/src/snippets/uitools/calculatorform/calculatorform.ui new file mode 100644 index 0000000..dda0e62 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/uitools/calculatorform/calculatorform.ui @@ -0,0 +1,303 @@ + + + + + CalculatorForm + + + CalculatorForm + + + + 0 + 0 + 276 + 98 + + + + + 5 + 5 + 0 + 0 + + + + Calculator Builder + + + + + + + 9 + + + 6 + + + + + + + + 1 + + + 6 + + + + + + + + 1 + + + 6 + + + + + label + + + + 1 + 1 + 45 + 19 + + + + Input 1 + + + + + + + inputSpinBox1 + + + + 1 + 26 + 45 + 25 + + + + true + + + + + + + + + label_3 + + + + 54 + 1 + 7 + 52 + + + + + + + + Qt::AlignCenter + + + + + + + + + + 1 + + + 6 + + + + + label_2 + + + + 1 + 1 + 45 + 19 + + + + Input 2 + + + + + + + inputSpinBox2 + + + + 1 + 26 + 45 + 25 + + + + true + + + + + + + + + label_3_2 + + + + 120 + 1 + 7 + 52 + + + + = + + + Qt::AlignCenter + + + + + + + + + + 1 + + + 6 + + + + + label_2_2_2 + + + + 1 + 1 + 37 + 17 + + + + Output + + + + + + + outputWidget + + + + 1 + 24 + 37 + 27 + + + + QFrame::Box + + + QFrame::Sunken + + + 0 + + + Qt::AlignAbsolute|Qt::AlignBottom|Qt::AlignCenter|Qt::AlignHCenter|Qt::AlignHorizontal_Mask|Qt::AlignJustify|Qt::AlignLeading|Qt::AlignLeft|Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing|Qt::AlignVCenter|Qt::AlignVertical_Mask + + + + + + + + + + + verticalSpacer + + + + 85 + 69 + 20 + 20 + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + horizontalSpacer + + + + 188 + 26 + 79 + 20 + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/uitools/calculatorform/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/uitools/calculatorform/main.cpp new file mode 100644 index 0000000..3545412 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/uitools/calculatorform/main.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +#include "ui_calculatorform.h" +//! [0] +#include + +//! [1] +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QWidget *widget = new QWidget; + Ui::CalculatorForm ui; + ui.setupUi(widget); + + widget->show(); + return app.exec(); +} +//! [1] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/main.cpp new file mode 100644 index 0000000..3ae4962 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/main.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + main.cpp + + A simple example that shows how selections can be used directly on a model. + It shows the result of some selections made using a table view. +*/ + +#include + +#include "window.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QMainWindow *window = new MainWindow; + window->show(); + window->resize(640, 480); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/model.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/model.h new file mode 100644 index 0000000..6b40768 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/model.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODEL_H +#define MODEL_H + +#include +#include +#include + +class TableModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + TableModel(int rows = 1, int columns = 1, QObject *parent = 0); + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::EditRole); + + bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool insertColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + +private: + QList rowList; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/window.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/window.cpp new file mode 100644 index 0000000..bba70c6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/window.cpp @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + window.cpp + + A minimal subclass of QTableView with slots to allow the selection model + to be monitored. +*/ + +#include +#include +#include +#include + +#include "model.h" +#include "window.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) +{ + setWindowTitle("Selected items in a table model"); + + model = new TableModel(8, 4, this); + + table = new QTableView(this); + table->setModel(model); + + selectionModel = table->selectionModel(); + connect(selectionModel, + SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), + this, SLOT(updateSelection(const QItemSelection &, const QItemSelection &))); + connect(selectionModel, + SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), + this, SLOT(changeCurrent(const QModelIndex &, const QModelIndex &))); + + statusBar(); + setCentralWidget(table); +} + +//! [0] +void MainWindow::updateSelection(const QItemSelection &selected, + const QItemSelection &deselected) +{ + QModelIndex index; + QModelIndexList items = selected.indexes(); + + foreach (index, items) { + QString text = QString("(%1,%2)").arg(index.row()).arg(index.column()); + model->setData(index, text); +//! [0] //! [1] + } +//! [1] + +//! [2] + items = deselected.indexes(); + + foreach (index, items) + model->setData(index, ""); +} +//! [2] + +//! [3] +void MainWindow::changeCurrent(const QModelIndex ¤t, + const QModelIndex &previous) +{ + statusBar()->showMessage( + tr("Moved from (%1,%2) to (%3,%4)") + .arg(previous.row()).arg(previous.column()) + .arg(current.row()).arg(current.column())); +} +//! [3] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/window.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/window.h new file mode 100644 index 0000000..ba4a36a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/updating-selections/window.h @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include +#include +#include +#include + +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + MainWindow(QWidget *parent = 0); + +public slots: + void updateSelection(const QItemSelection &selected, + const QItemSelection &deselected); + void changeCurrent(const QModelIndex ¤t, const QModelIndex &previous); + +private: + QAbstractItemModel *model; + QItemSelectionModel *selectionModel; + QTableView *table; +}; + +#endif diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/webkit/webpage/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/webkit/webpage/main.cpp new file mode 100644 index 0000000..3d47848 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/webkit/webpage/main.cpp @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +from PySide2.QtGui import * +from PySide2.QWebKit import QWebPage +from PySide2.QWebKit import QWebFrame + + +//! [0] +class Thumbnailer(QObject): + page = QWebPage() +//! [1] + def __init__(self, url): + page.mainFrame().load(url) + connect(page, SIGNAL("loadFinished(bool)"), + self, SLOT("render()")) +//! [1] + +//! [2] + def render(self): + page.setViewportSize(page.mainFrame().contentsSize()) + image = QImage(page.viewportSize(), QImage.Format_ARGB32) + painter = QPainter(image) + + page.mainFrame().render(painter) + painter.end() + + thumbnail = image.scaled(400, 400) + thumbnail.save("thumbnail.png") + + self.finished() +//! [2] + +//! [0] + +def main(): + app = QApplication([]) + thumbnail = Thumbnailer(QUrl("http://qtsoftware.com")) + QObject.connect(thumbnail, SIGNAL("finished()"), + app, SLOT("quit()")) + + return app.exec_() + + + +#include "main.moc" diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/whatsthis/whatsthis.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/whatsthis/whatsthis.cpp new file mode 100644 index 0000000..ea97d1e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/whatsthis/whatsthis.cpp @@ -0,0 +1,57 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] + Act = QAction(tr("&New"), self) + Act.setShortcut(tr("Ctrl+N")) + Act.setStatusTip(QObject.tr("Create a new file")) + Act.setWhatsThis(QObject.tr("Click self option to create a new file.")) +//! [0] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/widget-mask/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/widget-mask/main.cpp new file mode 100644 index 0000000..f875eab --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/widget-mask/main.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); +//! [0] + QLabel topLevelLabel; + QPixmap pixmap(":/images/tux.png"); + topLevelLabel.setPixmap(pixmap); + topLevelLabel.setMask(pixmap.mask()); +//! [0] + topLevelLabel.show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/widget-mask/mask.qrc b/sources/pyside2/doc/codesnippets/doc/src/snippets/widget-mask/mask.qrc new file mode 100644 index 0000000..92f2272 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/widget-mask/mask.qrc @@ -0,0 +1,5 @@ + + + tux.png + + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/widget-mask/tux.png b/sources/pyside2/doc/codesnippets/doc/src/snippets/widget-mask/tux.png new file mode 100644 index 0000000000000000000000000000000000000000..a95527f3f2c3077f25e2c17fb9b91aa5816b3490 GIT binary patch literal 12191 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 literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/widgetdelegate.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/widgetdelegate.cpp new file mode 100644 index 0000000..960d501 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/widgetdelegate.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +class WidgetDelegate (QStyledItemDelegate): + # ... + + def paint(painter, option, index): + if index.column() == 1: + progress = index.data().toInt() + + progressBarOption = QStyleOptionProgressBar() + progressBarOption.rect = option.rect + progressBarOption.minimum = 0 + progressBarOption.maximum = 100 + progressBarOption.progress = progress + progressBarOption.text = QString::number(progress) + "%" + progressBarOption.textVisible = True + + QApplication.style().drawControl(QStyle.CE_ProgressBar, progressBarOption, painter) + else: + QStyledItemDelegate.paint(self, painter, option, index) + +//![0] + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/childwidget/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/childwidget/main.cpp new file mode 100644 index 0000000..4b78548 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/childwidget/main.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QWidget *window = new QWidget(); + window->resize(320, 240); + window->setWindowTitle(tr("Child widget")); + window->show(); + +//! [create, position and show] + QPushButton *button = new QPushButton(tr("Press me"), window); + button->move(100, 100); + button->show(); +//! [create, position and show] + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/nestedlayouts/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/nestedlayouts/main.cpp new file mode 100644 index 0000000..aae4d4d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/nestedlayouts/main.cpp @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QWidget *window = new QWidget(); +//! [create, lay out widgets and show] + QLabel *queryLabel = new QLabel(tr("Query:")); + QLineEdit *queryEdit = new QLineEdit(); + QTableView *resultView = new QTableView(); + + QHBoxLayout *queryLayout = new QHBoxLayout(); + queryLayout->addWidget(queryLabel); + queryLayout->addWidget(queryEdit); + + QVBoxLayout *mainLayout = new QVBoxLayout(); + mainLayout->addLayout(queryLayout); + mainLayout->addWidget(resultView); + window->setLayout(mainLayout); +//! [create, lay out widgets and show] + + QStandardItemModel model; + model.setHorizontalHeaderLabels(QStringList() << tr("Name") << tr("Office")); + QList rows = QList() + << (QStringList() << "Verne Nilsen" << "123") + << (QStringList() << "Carlos Tang" << "77") + << (QStringList() << "Bronwyn Hawcroft" << "119") + << (QStringList() << "Alessandro Hanssen" << "32") + << (QStringList() << "Andrew John Bakken" << "54") + << (QStringList() << "Vanessa Weatherley" << "85") + << (QStringList() << "Rebecca Dickens" << "17") + << (QStringList() << "David Bradley" << "42") + << (QStringList() << "Knut Walters" << "25") + << (QStringList() << "Andrea Jones" << "34"); + foreach (QStringList row, rows) { + QList items; + foreach (QString text, row) + items.append(new QStandardItem(text)); + model.appendRow(items); + } + + resultView->setModel(&model); + resultView->verticalHeader()->hide(); + resultView->horizontalHeader()->setStretchLastSection(true); + window->setWindowTitle(tr("Nested layouts")); + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/toplevel/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/toplevel/main.cpp new file mode 100644 index 0000000..de018bb --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/toplevel/main.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); +//! [create, resize and show] + QWidget *window = new QWidget(); + window->resize(320, 240); + window->show(); +//! [create, resize and show] + window->setWindowTitle(tr("Top-level widget")); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/windowlayout/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/windowlayout/main.cpp new file mode 100644 index 0000000..e5c6f86 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/widgets-tutorial/windowlayout/main.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QWidget *window = new QWidget(); +//! [create, lay out widgets and show] + QLabel *label = new QLabel(tr("Name:")); + QLineEdit *lineEdit = new QLineEdit(); + + QHBoxLayout *layout = new QHBoxLayout(); + layout->addWidget(label); + layout->addWidget(lineEdit); + window->setLayout(layout); +//! [create, lay out widgets and show] + window->setWindowTitle(tr("Window layout")); + window->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/handler.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/handler.cpp new file mode 100644 index 0000000..ff08b4e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/handler.cpp @@ -0,0 +1,188 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* +handler.cpp + +Provides a handler for processing XML elements found by the reader. + +The handler looks for and <link> elements within <item> elements, +and records the text found within them. Link information stored within +rdf:about attributes of <item> elements is also recorded when it is +available. + +For each item found, a signal is emitted which specifies its title and +link information. This may be used by user interfaces for the purpose of +displaying items as they are read. +*/ + +#include <QtWidgets> + +#include "handler.h" + +/* + Reset the state of the handler to ensure that new documents are + read correctly. + + We return true to indicate that parsing should continue. +*/ + +bool Handler::startDocument() +{ + inItem = false; + inTitle = false; + inLink = false; + + return true; +} + +/* + Process each starting element in the XML document. + + Nested item, title, or link elements are not allowed, so we return false + if we encounter any of these. We also prohibit multiple definitions of + title strings. + + Link destinations are read by this function if they are specified as + attributes in item elements. + + For all cases not explicitly checked for, we return true to indicate that + the element is acceptable, and that parsing should continue. By doing + this, we can ignore elements in which we are not interested. +*/ + +bool Handler::startElement(const QString &, const QString &, + const QString & qName, const QXmlAttributes &attr) +{ + if (qName == "item") { + + if (inItem) + return false; + else { + inItem = true; + linkString = attr.value("rdf:about"); + } + } + else if (qName == "title") { + + if (inTitle) + return false; + else if (!titleString.isEmpty()) + return false; + else if (inItem) + inTitle = true; + } + else if (qName == "link") { + + if (inLink) + return false; + else if (inItem) + inLink = true; + } + + return true; +} + +/* + Process each ending element in the XML document. + + For recognized elements, we reset flags to ensure that we can read new + instances of these elements. If we have read an item element, emit a + signal to indicate that a new item is available for display. + + We return true to indicate that parsing should continue. +*/ + +bool Handler::endElement(const QString &, const QString &, + const QString & qName) +{ + if (qName == "title" && inTitle) + inTitle = false; + else if (qName == "link" && inLink) + inLink = false; + else if (qName == "item") { + if (!titleString.isEmpty() && !linkString.isEmpty()) + emit newItem(titleString, linkString); + inItem = false; + titleString = ""; + linkString = ""; + } + + return true; +} + +/* + Collect characters when reading the contents of title or link elements + when they occur within an item element. + + We return true to indicate that parsing should continue. +*/ + +bool Handler::characters (const QString &chars) +{ + if (inTitle) + titleString += chars; + else if (inLink) + linkString += chars; + + return true; +} + +/* + Report a fatal parsing error, and return false to indicate to the reader + that parsing should stop. +*/ + +//! [0] +def fatalError(self, exception): + qWarning("Fatal error on line %d, column %d:%s" % (exception.lineNumber(), exception.columnNumber(), exception.message()) + + return False +//! [0] diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/handler.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/handler.h new file mode 100644 index 0000000..89acb5d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/handler.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef HANDLER_H +#define HANDLER_H + +#include <QObject> +#include <QString> +#include <QXmlDefaultHandler> + +/* Note that QObject must precede QXmlDefaultHandler in the following list. */ + +class Handler : public QObject, public QXmlDefaultHandler +{ + Q_OBJECT +public: + bool startDocument(); + bool startElement(const QString &, const QString &, const QString &qName, + const QXmlAttributes &attr); + bool endElement(const QString &, const QString &, const QString &qName); + bool characters(const QString &chars); + + bool fatalError(const QXmlParseException &exception); + +signals: + void newItem(QString &title, QString &link); + +private: + QString titleString; + QString linkString; + bool inItem; + bool inTitle; + bool inLink; +}; + +#endif + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/main.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/main.cpp new file mode 100644 index 0000000..1f326d5 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/main.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* +main.cpp + +Provides the main function for the RSS news reader example. +*/ + +#include <QtWidgets> + +#include "rsslisting.h" + +/*! + Create an application and a main widget. Open the main widget for + user input, and exit with an appropriate return value when it is + closed. +*/ + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + RSSListing *rsslisting = new RSSListing; + rsslisting->show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/rsslisting.cpp b/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/rsslisting.cpp new file mode 100644 index 0000000..b7fe284 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/rsslisting.cpp @@ -0,0 +1,255 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* +rsslisting.cpp + +Provides a widget for displaying news items from RDF news sources. +RDF is an XML-based format for storing items of information (see +http://www.w3.org/RDF/ for details). + +The widget itself provides a simple user interface for specifying +the URL of a news source, and controlling the downloading of news. + +The widget downloads and parses the XML asynchronously, feeding the +data to an XML reader in pieces. This allows the user to interrupt +its operation, and also allows very large data sources to be read. +*/ + + +#include <QtCore> +#include <QtWidgets> +#include <QtNetwork> +#include <QtXml> + +#include "rsslisting.h" + + +/* + Constructs an RSSListing widget with a simple user interface, and sets + up the XML reader to use a custom handler class. + + The user interface consists of a line edit, two push buttons, and a + list view widget. The line edit is used for entering the URLs of news + sources; the push buttons start and abort the process of reading the + news. +*/ + +RSSListing::RSSListing(QWidget *parent) + : QWidget(parent) +{ + lineEdit = new QLineEdit(this); + + fetchButton = new QPushButton(tr("Fetch"), this); + abortButton = new QPushButton(tr("Abort"), this); + abortButton->setEnabled(false); + + treeWidget = new QTreeWidget(this); + QStringList headerLabels; + headerLabels << tr("Title") << tr("Link"); + treeWidget->setHeaderLabels(headerLabels); + + handler = 0; + + connect(&http, SIGNAL(readyRead(const QHttpResponseHeader &)), + this, SLOT(readData(const QHttpResponseHeader &))); + + connect(&http, SIGNAL(requestFinished(int, bool)), + this, SLOT(finished(int, bool))); + + connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(fetch())); + connect(fetchButton, SIGNAL(clicked()), this, SLOT(fetch())); + connect(abortButton, SIGNAL(clicked()), &http, SLOT(abort())); + + QVBoxLayout *layout = new QVBoxLayout(this); + + QHBoxLayout *hboxLayout = new QHBoxLayout; + + hboxLayout->addWidget(lineEdit); + hboxLayout->addWidget(fetchButton); + hboxLayout->addWidget(abortButton); + + layout->addLayout(hboxLayout); + layout->addWidget(treeWidget); + + setWindowTitle(tr("RSS listing example")); +} + +/* + Starts fetching data from a news source specified in the line + edit widget. + + The line edit is made read only to prevent the user from modifying its + contents during the fetch; this is only for cosmetic purposes. + The fetch button is disabled, and the abort button is enabled to allow + the user to interrupt processing. The list view is cleared, and we + define the last list view item to be 0, meaning that there are no + existing items in the list. + + We reset the flag used to determine whether parsing should begin again + or continue. A new handler is created, if required, and made available + to the reader. + + The HTTP handler is supplied with the raw contents of the line edit and + a fetch is initiated. We keep the ID value returned by the HTTP handler + for future reference. +*/ + +void RSSListing::fetch() +{ + lineEdit->setReadOnly(true); + fetchButton->setEnabled(false); + abortButton->setEnabled(true); + treeWidget->clear(); + + lastItemCreated = 0; + + newInformation = true; + + if (handler != 0) + delete handler; + handler = new Handler; + +//! [0] + xmlReader.setContentHandler(handler) + xmlReader.setErrorHandler(handler) +//! [0] + + connect(handler, SIGNAL(newItem(QString &, QString &)), + this, SLOT(addItem(QString &, QString &))); + + QUrl url(lineEdit->text()); + + http.setHost(url.host()); + connectionId = http.get(url.path()); +} + +/* + Reads data received from the RDF source. + + We read all the available data, and pass it to the XML + input source. The first time we receive new information, + the reader is set up for a new incremental parse; + we continue parsing using a different function on + subsequent calls involving the same data source. + + If parsing fails for any reason, we abort the fetch. +*/ + +//! [1] +def readData(self, resp): + if resp.statusCode() != 200: + self.http.abort() + else: + xmlInput.setData(self.http.readAll()) + + if newInformation: + ok = xmlReader.parse(xmlInput, True) + newInformation = False + else: + ok = xmlReader.parseContinue() + + if not ok: + self.http.abort() +//! [1] + +/* + Finishes processing an HTTP request. + + The default behavior is to keep the text edit read only. + + If an error has occurred, the user interface is made available + to the user for further input, allowing a new fetch to be + started. + + If the HTTP get request has finished, we perform a final + parsing operation on the data returned to ensure that it was + well-formed. Whether this is successful or not, we make the + user interface available to the user for further input. +*/ + +void RSSListing::finished(int id, bool error) +{ + if (error) { + qWarning("Received error during HTTP fetch."); + lineEdit->setReadOnly(false); + abortButton->setEnabled(false); + fetchButton->setEnabled(true); + } + else if (id == connectionId) { + + bool ok = xmlReader.parseContinue(); + if (!ok) + qWarning("Parse error at the end of input."); + + lineEdit->setReadOnly(false); + abortButton->setEnabled(false); + fetchButton->setEnabled(true); + } +} + +/* + Adds an item to the list view as it is reported by the handler. + + We keep a record of the last item created to ensure that the + items are created in sequence. +*/ + +void RSSListing::addItem(QString &title, QString &link) +{ + QTreeWidgetItem *item; + + item = new QTreeWidgetItem(treeWidget, lastItemCreated); + item->setText(0, title); + item->setText(1, link); + + lastItemCreated = item; +} + diff --git a/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/rsslisting.h b/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/rsslisting.h new file mode 100644 index 0000000..c7d7552 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/doc/src/snippets/xml/rsslisting/rsslisting.h @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef RSSLISTING_H +#define RSSLISTING_H + +#include <QHttp> +#include <QWidget> +#include <QXmlInputSource> +#include <QXmlSimpleReader> + +#include "handler.h" + +class QLineEdit; +class QTreeWidget; +class QTreeWidgetItem; +class QPushButton; + +class RSSListing : public QWidget +{ + Q_OBJECT +public: + RSSListing(QWidget *widget = 0); + +public slots: + void addItem(QString &title, QString &link); + void fetch(); + void finished(int id, bool error); + void readData(const QHttpResponseHeader &); + +private: + Handler *handler; + QXmlInputSource xmlInput; + QXmlSimpleReader xmlReader; + + bool newInformation; + + QHttp http; + int connectionId; + + QLineEdit *lineEdit; + QTreeWidget *treeWidget; + QTreeWidgetItem *lastItemCreated; + QPushButton *abortButton; + QPushButton *fetchButton; +}; + +#endif + diff --git a/sources/pyside2/doc/codesnippets/examples/dbus/example-client.py b/sources/pyside2/doc/codesnippets/examples/dbus/example-client.py new file mode 100755 index 0000000..52ad733 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/dbus/example-client.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the documentation of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## # Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## # Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## # Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# -*- coding: utf-8 -*- + +# DBUS Client using PySide integration + +import sys +from traceback import print_exc + +# import python dbus module +import dbus +# import python dbus GLib mainloop support +import dbus.mainloop.glib +# import QtCore +from PySide2.QtCore import * + +# signal handler +def button_clicked(): + print "button clicked" + +# main function +if __name__ == '__main__': + + # Enable glib main loop support + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + # Get the session bus + bus = dbus.SessionBus() + + try: + # Get the remote object + remote_object = bus.get_object("com.example.SampleService", + "/DBusWidget") + # Get the remote interface for the remote object + iface = dbus.Interface(remote_object, "com.example.SampleWidget") + except dbus.DBusException: + print_exc() + sys.exit(1) + + # Start the application + app = QCoreApplication([]) + + # Call some methods of the remote interface + iface.show() + iface.setText("Emit signal") + # connect the DBus signal clicked to the function button_clicked + iface.connect_to_signal("clicked", button_clicked) + iface.connect_to_signal("lastWindowClosed", app.quit) + + # enter in the main loop + app.exec_() diff --git a/sources/pyside2/doc/codesnippets/examples/dbus/example-server.py b/sources/pyside2/doc/codesnippets/examples/dbus/example-server.py new file mode 100755 index 0000000..c42b869 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/dbus/example-server.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the documentation of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## # Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## # Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## # Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################# + +# -*- coding: utf-8 -*- + +# DBUS Server Example of use PySide with PyDBus library + +import dbus +import dbus.service +import dbus.mainloop.glib +import random + +from PySide2.QtCore import * +from PySide2.QtGui import QPushButton, QApplication + +# The adaptor, MUST inherit dbus.service.Object +class DBusWidget(dbus.service.Object): + def __init__(self, name, session): + # export this object to dbus + dbus.service.Object.__init__(self, name, session) + + # create a simple widget + self.widget = QPushButton() + self.widget.resize(200, 50) + + # To export a Qt signal as a DBus-signal, you need to connect it to a method in this class. + # The method MUST have the signal annotation, so python-dbus will export it as a dbus-signal + QObject.connect(self.widget, SIGNAL("clicked()"), self.clicked) + QObject.connect(QApplication.instance(), SIGNAL("lastWindowClosed()"), self.lastWindowClosed) + + # You can export methods to dbus like you do in python-dbus. + @dbus.service.method("com.example.SampleWidget", in_signature='', out_signature='') + def show(self): + self.widget.show() + + # Another method... now with a parameter + @dbus.service.method("com.example.SampleWidget", in_signature='s', out_signature='') + def setText(self, value): + self.widget.setText(value) + + # Another one... + @dbus.service.method("com.example.SampleWidget", in_signature='', out_signature='') + def exit(self): + qApp().quit() + + # A signal that will be exported to dbus + @dbus.service.signal("com.example.SampleWidget", signature='') + def clicked(self): + pass + + # Another signal that will be exported to dbus + @dbus.service.signal("com.example.SampleWidget", signature='') + def lastWindowClosed(self): + pass + + +if __name__ == '__main__': + app = QApplication([]) + # Use qt/glib mainloop integration to get dbus mainloop working + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + + session_bus = dbus.SessionBus() + # Export the service + name = dbus.service.BusName("com.example.SampleService", session_bus) + # Export the object + widget = DBusWidget(session_bus, '/DBusWidget') + + print "Running example service." + app.exec_() + diff --git a/sources/pyside2/doc/codesnippets/examples/declarative/cppextensions/plugins/plugin.cpp b/sources/pyside2/doc/codesnippets/examples/declarative/cppextensions/plugins/plugin.cpp new file mode 100644 index 0000000..4b8b923 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/declarative/cppextensions/plugins/plugin.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +class TimeModel (QObject): + hour = Property(int, getHour, notify = timeChanged) + minute = Property(int, getMinute, notify = timeChanged) +//![0] + +//![plugin] +class QExampleQmlPlugin (QDeclarativeExtensionPlugin): + + def registerTypes(self, uri): + assert(uri == "com.nokia.TimeExample") + qmlRegisterType(TimeModel, uri, 1, 0, "Time") +//![plugin] + +//![export] +# This isn't supported by PySide yet. +# Q_EXPORT_PLUGIN2(qmlqtimeexampleplugin, QExampleQmlPlugin); +//![export] diff --git a/sources/pyside2/doc/codesnippets/examples/declarative/cppextensions/plugins/plugins.qml b/sources/pyside2/doc/codesnippets/examples/declarative/cppextensions/plugins/plugins.qml new file mode 100644 index 0000000..4155318 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/declarative/cppextensions/plugins/plugins.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import com.nokia.TimeExample 1.0 // import types from the plugin + +Clock { // this class is defined in QML (com/nokia/TimeExample/Clock.qml) + + Time { // this class is defined in C++ (plugin.cpp) + id: time + } + + hours: time.hour + minutes: time.minute +} +//![0] diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/classwizard.cpp b/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/classwizard.cpp new file mode 100644 index 0000000..897410e --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/classwizard.cpp @@ -0,0 +1,259 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] //! [1] +def __init__(self, parent): + QWizard.__init__(self, parent): + self.addPage(IntroPage()) + self.addPage(ClassInfoPage()) + self.addPage(CodeStylePage()) + self.addPage(OutputFilesPage()) + self.addPage(ConclusionPage()) +//! [0] + + self.setPixmap(QWizard.BannerPixmap, QPixmap(":/images/banner.png")) + self.setPixmap(QWizard.BackgroundPixmap, QPixmap(":/images/background.png")) + + self.setWindowTitle(self.tr("Class Wizard")) +//! [2] + +//! [1] //! [2] + +//! [3] +def accept(self): +//! [3] //! [4] + className = self.field("className") + baseClass = self.field("baseClass") + macroName = self.field("macroName") + baseInclude = self.field("baseInclude") + + outputDir = self.field("outputDir") + header = self.field("header") + implementation = self.field("implementation") +//! [4] + +... + +//! [5] + QDialog.accept(self) +//! [5] //! [6] +} +//! [6] + +//! [7] +class IntroPage (QWizardPage): + + def __init__(self, parent): + QWizardPage.__init__(self, parent) + + self.setTitle(tr("Introduction")) + self.setPixmap(QWizard.WatermarkPixmap, QPixmap(":/images/watermark1.png")) + + label = QLabel(self.tr("This wizard will generate a skeleton C++ class " \ + "definition, including a few functions. You simply " \ + "need to specify the class name and set a few " \ + "options to produce a header file and an " \ + "implementation file for your new C++ class.")) + label.setWordWrap(True) + + layout = QVBoxLayout() + layout.addWidget(label) + self.setLayout(layout) +} +//! [7] + +//! [8] //! [9] +class ClassInfoPage(QWizardPage): + + def __init__(self, parent): + QWizardPage.__init__(self, parent) +//! [8] + self.setTitle(self.tr("Class Information")) + self.setSubTitle(self.tr("Specify basic information about the class for which you " \ + "want to generate skeleton source code files.")) + self.setPixmap(QWizard.LogoPixmap, QPixmap(":/images/logo1.png")) + +//! [10] + classNameLabel = QLabel(self.tr("&Class name:")) + classNameLineEdit = QLineEdit() + classNameLabel.setBuddy(classNameLineEdit) + + baseClassLabel = QLabel(self.tr("B&ase class:")) + baseClassLineEdit = QLineEdit() + baseClassLabel.setBuddy(baseClassLineEdit) + + qobjectMacroCheckBox = QCheckBox(self.tr("Generate Q_OBJECT ¯o")) + +//! [10] + groupBox = QGroupBox(self.tr("C&onstructor")) +//! [9] + + qobjectCtorRadioButton = QRadioButton(self.tr("&QObject-style constructor")) + qwidgetCtorRadioButton = QRadioButton(self.tr("Q&Widget-style constructor")) + defaultCtorRadioButton = QRadioButton(self.tr("&Default constructor")) + copyCtorCheckBox = QCheckBox(self.tr("&Generate copy constructor and operator=")) + + defaultCtorRadioButton.setChecked(True) + + self.connect(defaultCtorRadioButton, SIGNAL("toggled(bool)"), + copyCtorCheckBox, SLOT("setEnabled(bool)")) + +//! [11] //! [12] + registerField("className*", classNameLineEdit) + registerField("baseClass", baseClassLineEdit) + registerField("qobjectMacro", qobjectMacroCheckBox) +//! [11] + registerField("qobjectCtor", qobjectCtorRadioButton) + registerField("qwidgetCtor", qwidgetCtorRadioButton) + registerField("defaultCtor", defaultCtorRadioButton) + registerField("copyCtor", copyCtorCheckBox) + + groupBoxLayout = QVBoxLayout() +//! [12] + groupBoxLayout.addWidget(qobjectCtorRadioButton) + groupBoxLayout.addWidget(qwidgetCtorRadioButton) + groupBoxLayout.addWidget(defaultCtorRadioButton) + groupBoxLayout.addWidget(copyCtorCheckBox) + groupBox.setLayout(groupBoxLayout) + + layout = QGridLayout() + layout.addWidget(classNameLabel, 0, 0) + layout.addWidget(classNameLineEdit, 0, 1) + layout.addWidget(baseClassLabel, 1, 0) + layout.addWidget(baseClassLineEdit, 1, 1) + layout.addWidget(qobjectMacroCheckBox, 2, 0, 1, 2) + layout.addWidget(groupBox, 3, 0, 1, 2) + self.setLayout(layout) +//! [13] + +//! [13] + +//! [14] +class CodeStylePage(QWizardPage): + + def __init__(self, parent): + QWizardPage.__init__(self, parent) + self.setTitle(tr("Code Style Options")) + self.setSubTitle(tr("Choose the formatting of the generated code.")) + self.setPixmap(QWizard.LogoPixmap, QPixmap(":/images/logo2.png")) + + commentCheckBox = QCheckBox(self.tr("&Start generated files with a comment")) +//! [14] + commentCheckBox.setChecked(True) + + protectCheckBox = QCheckBox(self.tr("&Protect header file against multiple " \ + "inclusions")) + protectCheckBox.setChecked(True) + + macroNameLabel = QLabel(self.tr("&Macro name:")) + macroNameLineEdit = QLineEdit() + macroNameLabel.setBuddy(macroNameLineEdit) + + includeBaseCheckBox = QCheckBox(self.tr("&Include base class definition")) + baseIncludeLabel = QLabel(self.tr("Base class include:")) + baseIncludeLineEdit = QLineEdit() + baseIncludeLabel.setBuddy(baseIncludeLineEdit) + + self.connect(protectCheckBox, SIGNAL("toggled(bool)"), + macroNameLabel, SLOT("setEnabled(bool)")) + self.connect(protectCheckBox, SIGNAL("toggled(bool)"), + macroNameLineEdit, SLOT("setEnabled(bool)")) + self.connect(includeBaseCheckBox, SIGNAL("toggled(bool)"), + baseIncludeLabel, SLOT("setEnabled(bool)")) + self.connect(includeBaseCheckBox, SIGNAL(toggled(bool)), + baseIncludeLineEdit, SLOT("setEnabled(bool)")) + + self.registerField("comment", commentCheckBox) + self.registerField("protect", protectCheckBox) + self.registerField("macroName", macroNameLineEdit) + self.registerField("includeBase", includeBaseCheckBox) + self.registerField("baseInclude", baseIncludeLineEdit) + + layout = QGridLayout() + layout.setColumnMinimumWidth(0, 20) + layout.addWidget(commentCheckBox, 0, 0, 1, 3) + layout.addWidget(protectCheckBox, 1, 0, 1, 3) + layout.addWidget(macroNameLabel, 2, 1) + layout.addWidget(macroNameLineEdit, 2, 2) + layout.addWidget(includeBaseCheckBox, 3, 0, 1, 3) + layout.addWidget(baseIncludeLabel, 4, 1) + layout.addWidget(baseIncludeLineEdit, 4, 2) +//! [15] + self.setLayout(layout) +} +//! [15] + +//! [16] + def initializePage(self): + className = self.field("className") + self.macroNameLineEdit.setText(className.upper() + "_H") + + baseClass = self.field("baseClass") + + self.includeBaseCheckBox.setChecked(len(baseClass)) + self.includeBaseCheckBox.setEnabled(len(baseClass)) + self.baseIncludeLabel.setEnabled(len(baseClass)) + self.baseIncludeLineEdit.setEnabled(len(baseClass)) + + if not baseClass: + self.baseIncludeLineEdit.clear() + elsif QRegExp("Q[A-Z].*").exactMatch(baseClass): + baseIncludeLineEdit.setText("<" + baseClass + ">") + else: + baseIncludeLineEdit.setText("\"" + baseClass.lower() + ".h\"") +//! [16] + +//! [17] + def initializePage(self): + className = field("className") + self.headerLineEdit.setText(className.lower() + ".h") + self.implementationLineEdit.setText(className.lower() + ".cpp") + self.outputDirLineEdit.setText(QDir.convertSeparators(QDir.tempPath())) +//! [17] diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/classwizard.qrc b/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/classwizard.qrc new file mode 100644 index 0000000..41a5ddc --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/classwizard.qrc @@ -0,0 +1,11 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file>images/background.png</file> + <file>images/banner.png</file> + <file>images/logo1.png</file> + <file>images/logo2.png</file> + <file>images/logo3.png</file> + <file>images/watermark1.png</file> + <file>images/watermark2.png</file> +</qresource> +</RCC> diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/background.png b/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/background.png new file mode 100644 index 0000000000000000000000000000000000000000..44c7badb8568ff756804d2a5a651f8fff9961a1f GIT binary patch literal 22578 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 literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/banner.png b/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..3169152b8e6d9fbbaa61cb3598a6604f5660250b GIT binary patch literal 3947 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 FV1kZVGdKVM literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/logo1.png b/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/logo1.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b594aafcd6f944f6d950aeaab01017ddaef68a GIT binary patch literal 1619 zcmZ8h3s6#N7`>pZfT2z*q_$bEuguKR)L46{qhYg#$l6w>j^>Dtj{+Z)t&hMoH>Idd zS1lizrQ#zX7A(`KC|k{4r`7PCwyh#*Vw$9g?w@yT+WqHpIN$ltcfOxH_i~;>CgHHA zSO|h}2YkJ$;M?Q#2dxFLRLq)$AmlrWU!V^t!CF~eXI2Sq6#-{J5UeDwDZrHs#P#a| zIR!x}YmKMZ3_q_CU`SotUCmxegCKC-B$40}B!d#p2MSEm*V+|5J+Q5K*DhFu%P$=G zzx2ZG8UGyzN>~9lF`fR|k3_->j8EBYH~~gjgr~sD{p4gI)&v9qoEjX2r+nQ4n*sI; z1n@3EU<Mv=eH|!fFyO{~8yk3QVQ%h8P7a)K+0qgaj=4F&$-X{-Y*W+!g}|{5!NFkn zf|*$s7R%Dof-`}_L?XW+ApD4k&+P~V;Gpp=8Vw&t6dw;rj)B3e#zr_F7{D5CX#wYf zM_jV7c>U-R5bJ}2q<MLOz*B(EL?DWsoNoI14v58b3WZ9k{Pf|&^71m6e#_4foSCJq zeZ|@u{KiZas@U1N#Koo5-Mwt@-W%TDncsZFHZiI8_phN+>kc2TJ94D{=uuvHIPdsz z0gWb%iMf}Q1a5dsYHDjnhJ?jx<8b~cEBmv&ysNUZo6GH~tCR6~y?lP3P?&|m47aw9 zN~PmnT@&5i;8B?x7<fNCJUucp^Y(4FuI|Ul$#Z&oxyHt7l}e*lYnGOB@%TIf;bqjV zCh)9_lBnb#Ap}B8TN{N&W3X6V-E}yep1!`Jp^>pM-pp*{#&0*7Z?Uwpv9a4`zujSn zldCJyefJ&@Pj4UJAN&rI{V9Qghk}AbLc+o$BBP?BW8>oD>5Rmbv<xQeY*ua_n|<MO zenCM&VNvn*(z2@C)zvjMwcPrK2HxGfLUHqhmKMn)>9h8Z7oDA5FS}*EeFKAoL&GDZ zZ~qw^mrqP6rj^Q>+1Zct^D33<)8e8UtfeK52Hfci{z@)*al;RIdj_V24#^JD4FinY zM*pJP_Iu5|2^~CUYcM!8G=%lZ6*i^Pw}x6$D&&1tc1_LA&F{X;-*f7H#~7_BpK$x3 zY-Q|P`t$3>*+$ewDluenfoUr(@U(VyG^jP{OJTN=ji$Km$b_4dVOE8_O_65KbmpQf zrguM79ZG1ekVl&oQqtSsM<W|WTA^j>Xx>F6%?Gn9d<=OSWw5YM>x2WsinN2sv)g$I zx06$u?qsOETM=!iFVC`g5d15OUBFD<tt;QoN~Gb#u1JO^uoBtU5m()<v1x9oOBb0{ znv3K19S;5D+sr%nRzy2va*W)5Z+_iM;+G2<*&aP!$m2mZ%Y34p8`c)BcuWyi77*y% zY(f0fBae4qoqFDeXs@)tXQLx$39fBfCppQ{j=PiN$P6<YEw^doIx-iuH$GH3FhaD# zgy)%ry5>T<&i<p9bL&Rm9D0>Nysl~frNoI7W1DNeGXfEcuOe&WULcVHb4dX)_%1@N zT>8BPS!iMGE-OVDc`6>@A^Qp!>dD&({UYB8!A~rmsv$B#9gkK*XZjn>9dL?vL!}+{ zbPV~-20gOEL(+$K6nT`NnA%>io%RlO(rRSh@9&cG;i=ipl&eH^Bu8zgvR+KEvEX1g zum#f$+y(Up^@pk0Q<SUEG6hki&k{#&yyog06RbQ@J$7jjG49kn4DupTM0g*!_4_mV zqWOvNCb6lb)r4evyq`ky|IJ&PzptN}-)~MdOk9avI#;46V|UEFR6i{nsZV%9^H&6S nlK8Ze+1P^&dM&bcvz3Z~xlbf2_~GEs9)b?|ki8qd!ZQB_F{DF< literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/logo2.png b/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..5dcbd4669def9342b5bc3f2b5cd72bcdeb4f683a GIT binary patch literal 1619 zcmYjQ4K$N`9DX;JZSrx#7P=`HlO%`GE)@<<=W1qGw-OFH<oKw~$Ei-K>DG0VQdd+e zT-Pb)Yn$DX#g-OD?p3L^HL|W|hFZw7G52rpxsLyN_w0F|-}8Ikot^i+NFkHVuy$Ao zg3R`Wg;2qF;L-<e1n_Q4-UI|8$0^}ap+GKz%Wwn+a?5}f5X6Kaj)6ZgAdn!%f*{_S zHGlxwXmDT-umOUa4GthcHvK;Z9GrRx0=ps-36>xO0_^`YaMdzSy?zbH1lza6ZLnPK z1O&9fCP1*bJc7+-2ap#u8o)**63)Pj(!xSuf-r2ZT!;NvIXS?578wcTj7$b6;Sr4R zjQ}b*9DuM1R=@@L%EFg)IxO1=1bC#KnUUn@!wqdtPJpyJH~^fMNC39j*@4)~5|}@a ziCLQ3+jFqkCL<$Y0trqN5($uHKtTEu6PJDl0<km#e=-^kCtqY_0LitqR5UiOELXL+ z>t<$Pr_IrE{Lv$@*c%-!y>tm~00?|gDDd*?3JX)Vw0u*kv}(0(YHCrh2lwp`4+p=Q zWo*oMap4mPY!pi1?Je~2>Gb#S+__T}62e}!s>Rm!X+*>`Dz#_-{@w!zdJi7#OGx<p z@Zo=wllxOsUu9<x<m9|LbxM5Zj5se(R#YS}FPB$Te5k4#VKP6~)hSr4Q8s&&%jIA& z;~gCnB9Xeke`;U=JSsEq-hCY!`Z_$U85!Z2n$As3G@G0AY;5K=8of@ZpP%R9a6CL- zb|U}-9(P_gmHZQgKo}VtqtIv!7Hev{+RV({!oteR+QtTFZ@+Hcck3NCIyn;vZkye= zcx?6Z^(FcT><A1B2@U%(d@nhI5*4*CIwm$YJ|Qvb$dQz^^z;lGJ?q5jGmN}n&KF!N zEWCWJxTK_{^yaNQcgw5q-M?Q`Q_HMxXkaxrb6fZi+uMbYL|r|-&-?oNUk-@hO5Vw2 zgG0mek&lW|<=B|&vs(RSdiv|^tVW~xrq$}enV(-+(ChV;?8O4`;wJ0~35q%qHz?jm zvx>CtmcOF9N`t?Ah?5<1wUiAG4q`(KxUHvXo8p`(l}bsqTPvT>AOF61$MH|SisYNc z_<I8JqT+V$(>u2=SW~rBVyt$K;VLQ#a`E-FthJS#V04qMCz(CS%s(gMol9BklkB}| z46QHb?QZCP9KNGcnPOW?$?f@+f^6g&#g*rxSyzzBp_uIn3gk(Y<=if#qaFxn(pDnN zZQE6|ZADeNURLVn$`m&X<$1@4F*i_!C5)T^Q{|SttYlpL@4~?`tWdmZ*w=JZ+G#)3 z)hmqZg)5`(y&lrh%?^D#D^t8N`PP2V`0qPN><TXZLg4FQ<l*QVJ)7v}hjm4(Iw{<$ z5<HE0fs^s%Kxe@9$*0|jo+|eT1QTT*=k~_c!ed3o=}q~bjCgB#1)-bi$(S=<C(wA% zV~ygu7a90Eeksjl_rYrgb@C7U-eeN*EbxCT^D0VpEpXYEh={{glNZvTBax9a*^#NZ zetfM`^n(yt>S*IHzKgOBQa!{$?v*~&WA_jiH^UM+Kj)cL50de^473_LD{XY}FjMtd zsokh2Q^{x7nv+$5LJ8WF7g%w0a!bAO>2cIC=i%A#f6FR{CZ{)0t`pHoMLK(pi#C(s zScF|$$oWh+yR2KQo0?2JPPyK7j&nrbl{Ngwd#1@D&f;TDr%wZq-c%!q4kl4}xKO_} zyU($CvttRZEq0#HW5Um)QVJ>JuMko3E-9l}>Oi#0T1=Y%wai>x*!$(B?n(J@edgoj q2vtlUiJe?Fowk=wt3}psaMs{4ZA7Aqosa`w7ido?IixW-{@j1hPFq_5 literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/logo3.png b/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/logo3.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd3ea23589d5cd1e36995fb7930fbb65537e2c9 GIT binary patch literal 1619 zcmZ8g3s6#N7`>n*VyKe}scn|4VrJ%OYOFof!LV6FWNj-`M{*>`M}d#2rYvl0-PEGi zbjwOz*C`)mLaw%JJ}S#rbH-_HO%w%u@lr7q5(M^_J2_2v{(Cs*eCPZA|1$Spp;E|L zj1vZeAng7K5)J%@tlVfbfcIMR6cB`zQzK)-fi!|;x;jkctqI2<NDM)fCO&P#0TT{F z5P#h|5EnqugvkM%Zz3b6mQ^|YxoVni1l3W{LME?DFaa!B!USvzB;eZj?_qyp=g!p( zT!MX&{K^Nz;S!8M!VXBvnM@ECB9W^O$S8}7zLfCRtG$3Ia&mwviH-)brI8Wf00PJ0 zMmP*`k;elFmjHqV0$*lkSS(nM69{lgzp$Xp&xa?BySV`}?&1PaJ2V7P?Bw*-5Ln9M z;#R88&O!`k%*<?ci%}#J_+usnM4ptiats7w#RLzIM#D)(Mg|}vTib<(hLynQe@xxh z2F?Q{sE)h3s-HgxjnddyWnm#a0U+?fz)3$pNkoLYrDa(r(<_zwj~|T&1K3v@841oT zG&i5{@R%SFgecUczyDM~z*KPX^qxHu5=ppbjo8sq8Wkm_(PW1X$qpZu9XTSW)8)sG zDHsezYU*ru_H0hh?Afz(=g-gO<;`<As`7GGMTM%WYN4)fp}u~xv2l^hRW~&WEiE<e z?Vq~3miqg(0|Vey(GCymMn`o*;qt_U(8@}$P>8Ip#SRVzjmDtU8JCyEIGh-dXUt|M zg4ew{n@0HoLLkh{%~5EyB?e<<wHAxDwz09Zvv+X7IXiFI@Xbb-&2H`lg4b5>Z9d!m z0t1P`yLN|!lENdtk32w$qQ=A=jE#$rPoyU$A3vUwmY$x$WM!Q`cb=X1)1`vKqN1xe zic3mLN^jl1d#}9u{(}cKHMMmQA3bV(@}#My^;uh6=ku=DJ-u)H`ug7u41O3I9vKmg z3Plr>Q_~WuR5qtn&Z|_5YPCkA`J~nAz_q-r*BcCmO0Ka0e7N-eq|lht34+0cOuK0N zZqdIqPkz|EIAP?dr|pP9Ai#tdG(A1b+>+o%t&|K^dp&J!ZIyppy!+H_?-b)!G5&tX zpmFL>?wh-}FWb|!G-AAViS5}{66z7?Yg_9$bei2wv7f2yL1zA;NOUi4+?ed_&tz)@ zEkEpo9wgw~D<vt8rPSP>*%V|$vsprUF1qm=k`ZpXlRkw!gR))PYj(m1;ZEL8Z1mc3 z9lL{5mFs7xd{UX>Wh1%d`Yi4@R8a{#XP1>^TV56em-uU^K#J)c+#(FL+LCrI2zC7$ zyIOy3+Pl|>KfTqZZ%<{4zh%CC&_AtX?PP966YFxw`!M9O*ct<u=oN(VM9W@Ko2p9i z%(~0Gj8}(W?7BJgrW?^y<^31ILXyY3vw3ajNsf8?<9uIsqP?hs&|T-tUNYa%q48nG zn<X|~VdLvtOPLn?j@&4y7l{x4mr1;<Z~djrkCW<I;IShKk$|hF=+oaKk<km;(W$t8 ze66JGyG~@Ot3&YMJ(PW@>=_R7t_+}^ypOQC6_LdIG0&n}K*8%W&`Rh6zrn=^E9<dS zdeP3LQZB5wrpQ7%htR&wAr&WPwmmdICr6!h7pf!2%PK}^RGX+biRfgG&ROH3%_O*T zFzbtWb1dvt-Fn@}nY2^Xo3AhOj*DJr34b4}vpC8#zSO)3c+|{#T+<O7My597!h_cB zyU1-;OX*KroP6D-opaNCDmm&;QdjX_KD(IjLbS^=CNKY7W<6NcJO57is$BRm^Ccrn p7S~7SGRjnG2UyHnWbGz*4c_u^B2mVr=YY=z+8<6KHH0Nz{2v~~a_ay9 literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/watermark1.png b/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/watermark1.png new file mode 100644 index 0000000000000000000000000000000000000000..0091f5c17a06866c183e75033c2c91a1c3bf58db GIT binary patch literal 14516 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 SS_Iet0000<MNUMnLSTZk$EN}S literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/watermark2.png b/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/images/watermark2.png new file mode 100644 index 0000000000000000000000000000000000000000..3b88f2e360651f99bd1ca1bbf2a4e9ff99b1f8e9 GIT binary patch literal 14912 zcmV-GI={t<P)<h;3K|Lk000e1NJLTq005`}00DOh0{{R328!^=0008nP)t-st*rmV zki_CzW9Grt>71vyw*JV*{>#h$ySx9uzW&3*{?gL_*w_Eu+y1k&{^H{Pu&(~l&i?D` z{`2$x{QLgh1_;_BEZhwew~x`_-u~)ZTHOf?-5DPI?CjnE0Pyeq;S&?Tq29Z)^y4EV z<uWqnIy&Y-Ld?VT=~GkO6dJvOyX<Ui?Q(MNdwcSmoARQf(t)D%tgQCAx%%7N`t|zz z;^N&96}_wL{qpnVEG+9|WAKZM_07@ND?HdOJJ?28%2s>XB{A7FL)k)7*=>W`8zsth zp4u@z+EQfO8Y0_;owBL*+|%{UX^qT;t;~zGyQAaHN@?9tUbnFK-!M1LT6@i*&Egsw z&T*8^!0+U$z0WyR&p=zxy64bee&|I-=uAw|t=Q>rbiRti(N=Nl=KIomn#8N)(uu3= zc6idu_r-&>?vIi0fr0RZg!s$L(?neHlatd^ZPYbM)JtO2X@vCR>GiX-;0p`X!t3_f z-1o!7)na@3)YQnm^VOxu)+aZ<n$_1yUDR50%7(Jbbes6a#nw4Y&VZ)NVTH|_#NVjE z)0)1^dZOfcgw#%F)j(9{b9}_Q^ybFe=W1~0xXHz4lIUJw=!A^LbD_<WySAI)&9L6< zt+(sq^u>z1*R|NqtlGt()$OCI&ARH&Rd&W)hRBk^*;#Gytg*<m=-G#%@t&c;w)DA& z#`3?#+9@@{o72i%f%NI|&~1&|OIpyT(8^?t+&V_WqT1e=uhEUM(Z%t(rs>kV<<gzP z%%#%avCPwSlHoi;<48`+oy+88ZQ@Q=#CxpEvf|V+M8A~Iyqw$0sMyt$w9Q3h#cY_l zj?U0;ki>tm+C5CStMb}&iS)+H%50O^c#_m`jl;6+?2?!4)8qEu<Hd-&(T1tvf|B^t z)#013;heD3E<(_%)7z7*+sEnR+xN$Lr`ut4;l0(-Mq%VsTFHK?(mGP;&*H+B%)LFP z&;S58B1uF+RCr#LUE`x|yRKhf2B)=*ZQD4uZQHhuOWU?>8_%}w_ZPf24Vt#|?E5k> z$2p&VJ8F`qSrd&$vmw+oPf?i1UgieEpBx_ZuIs{F_Sb&Zd0q=um3fu+D$TE=w!Ptj zyWPeY(FES+GPivcHJVKewaG{gOu-2sM7c#*)D|j$bZ>@P*;k2o2`J$^ptgX7hu#9V zYmu5ulLcu}Hi@H*6rlDBCIDzIi#Inf;3gtvtQ8<5r2G<;0#%_DsBm>XgwyVaP%=&j z)ne?KhXpT$IGqaQnxR!y0$<@m%uFJBdMTJ)fC&7=Z}ZjlL~kz-DGIznQtuH{b5K!4 zS=WG-7+U2PXyvX-F*KrfJ2OP`&w#6lv<m<MVl4X5nhJOWN_a6@gv?0;y3R#Q^QtDC zz*W>v^Ceu(G7vX>Wgb7X3}p^r0VGg2FeXFDP!WF76Qgf1NBIRDHE*Dt-WAHfG#sT% z5sN(oj0qj>b^$ON6CoxYO}Qr{Z}@P+7oLi9s@-o6mk~V~lbAhnQp3$yQ`@nU5=Y?y z2h|mWYLeue$~{?@x<^R7DE_kC^V|s?SxPYBx2nXD7@^@RP&?B|yX2i>9R(-KXvOG3 zKLM*oikv0B76xU790mQf@Eq7$m?;?f+k$M{o7vhG(+80Bnob#0Pkg-v3t|@?Wn<F9 z*XvSg5d%!PD|0bAet@HB{hFnspAkn1YV1kDkYoWx_vBEr=n-fxq6cXM%#@0<TLPYD zN<+0Rg+RsK+Y1+@9&*$deT{Hg?7&b|)5?gSc&P->{wZUYW=w5m`CYh4LA#M3C9Fb# z7f4~vdA%2z!w;HMRXeLEu<#vI8!-Y$1tmIsL>k2<%94no5|(Jnk)QUBzBCuXqx5+V z4V)AC(2R*CFSdj_+75(2jmD&-5<m%X$?6-9n`rc+rXY26_Bk*V_^CLmyi;awdpZ4l z`%z~xN5wt8lraH`o?4<XPs~1tr)JR;RHDj0K3R-n@_>*Ty5g5lFaN#8#UC{=++&t1 zX5!B@>!^yKdO#TF5lqDD3m*e#g%y{4Av7k!>ezYfWqU@8jt(pR5D#&(BaP!xp&mlD zFkQ6gq2!p9Jifq0?^FdaD*;(%?mmD0qR`Dv;HLy76yhh`Q{eKMql{3X;w?)kt@gxF zXZr{e-kP#<`BRHNtr@7OS&TknDOeIi?IBMKT=RQy8LWU1L(xJkNoOP0moi6TQBpc; zpQoo3&e8s1D#A~%^_rmt@)Y$GZHXyITcUJ?*;y&cD~>*WmPr3_hi`Vvj>EPdFke?0 zpc!GDPzfG6e6*(~#rJ|0km3@GFhxnl=1KCk$4_&)AfLmgs(kz6=o>W}{m%gA=7mA4 zGU|HfnoYw#0wu7BHcs!@=4A~v7#&9?C;@;`vJ9_WSv^Mh5If)arMo^iHGlNfXtb)2 zEIr=>-8^h$NR0-;oWMtPG~lXBmKD?<d;Ekkxg^9q=$-_nc1-0NFM<nle&~hVIj0X> zpsWAx*5|)^)Y+H4c<<R?{dU_Ey}8rzXxib+GKxIyF*kFNyfvyE*Cy?tYFePGPrs;) z=8hT1(LY`cXzsXkRaW2D@o1Ygl$Ow@1`01>s?Ske;XwyTNps2U(3+N?3^16boBGb` zSL_Lqj#lUGjK!{FyiiA@6%=$7b9!w~l-q&Bhg%m*NccxPiLad9y!k5Y-#7Nr>TjJ} z3~77q`=+t+C`Kd#6x~z6&i6lm*A+del3*B`=aAWJxf9Nd0Oz_L!+x`oKfHSJs(l2s zyz!*{mdATmu3EEh7M$vZeF55KRb|oz2<4mD>Tv~q|F$F78xE}+NTmdj=2+Fa;JJ&Q zz37)uIF9BP?THq^?ZcTI{8M>LzvI?<co(Pr&ld;%PG_dse0bgpe^`r#ih{Pg+Moy| z{;HJ;U~QXpx-^<wC<@e2Am^BVd=IMK+$rcn4S`$V+FEhr=RbPu38z2*-sS${<k7b+ zOP2vqwJb?!a!B{Y9Q`IK{b=;=7BQ5lKEqqNN3#V9|6Vbpk^LE+b0dX$Pal5FatfRO z^?1vID~F{plnXjZ(R(f*f_n-|?DMCBWMe<iVZA4q?>JhU#f}_#dPZb1bN>V!1s+~_ z%2`=<?yrto?<BEv;AeMiM{$@Jm!5D51*{iaFq3cHzvz@yVCMA=BgV088F=zOt@bBI zNH2U3@N~JuJwL_H>)^0zXI^rr*Uz>B%5ryvB^@XH-sOM4WB0KC8Vh8hM+ph2=;02+ z{y$$B^soP^{d_#fAiq3L{t*v3kF>dAW&a0(7oFNZY#>Yy@Po>;h#u}{;7KXD>p4gI z3X9{x7QiIB!U}Hog<-#8V1K{@*wU&hgqpwcgIl)mxbu+*2L1Q^4X}GqS~^+bylVFV z{5><YiwjarLH(hiwZ70LvbA%tz5qAL=Ih6PdT?RT$@3e}JpHvG?Ad-*ir265+GS09 z7a^d7>cja0bMm$a2CcF!Kur$XC1Xm(qfwLxX^6whb=+gDkOu~(kG0V<%slfK%%S-q zRiMr~|J59kejRM?z!1FCS$h`eZ#%eo(``F;@9GqiF^fTQ@br=nzreK~RTQFUxbL?> z_VpY@5&sikQnK7x)KDh-fbrzlJOKget;aay-rdi@k?y@@VF2+LmT|d~+XdN+ex^mQ zq7qE&RCV;bsHDJ8mj3q)AfN7Tx%%h{pn)ge^SY;SIT+nG%rlD=h_^<vk}Y0xJ4){2 zN{LQJTps$HzyGXG?nb1fo|axPg_+On=B;;L2ukWIdM{(>jI)_x?SZkD$Wc#8Rp4w; zE1=Pq*u_s?@V<);uI&ak!ek`{m_%zQ!ToIBJ?yj^#a-rm{m>cGa*cE4ox>ikOzuHx z17G2r&7RjK^Z8PF{Vkt7#t92x^@O9Kq@#tx2YR{%vFedw!{$m)fG!?<?7F>1_SL*Z zqoZ{X?&{~1-C4rj21Tr;6XZyRwCJ0Lmk%GeUYSONtX@1RA+61A89KjvVE?1~jY+^| zqpZ^mS5G(QbJgno``6vPbzxVlrs@-Ll|&CWn-bupT@iZHd42O$K~%eS#!r>elZtz~ z(Pe5jdall#5`BEMVT6Cf%{zz9R;SbI<y0jT!4pTplrqgyg*2_Bh*Rjm5-^lKDJ=In z)4L!#zP`@ia09RtY5hXWy3f3qb1hFO%h>QiKjA`@jMIF}S|97^lMd(n&08ORVe6Gp zZyEX=eGHVeCr1AUr^#PCV#+h`^_zAMb4Z&Zt5-;UyQfXYOlv6DN29f#-Dqza7|_<? z(oEC1s4p8-tA<5E_1qklwCS<*K5g1t)~~z!ag%-2T*j;HRhL47RQ8xMWlk*mkT_-f zP4FWN1N&VVq~|T}d2~o=lV0wLe!d3+YRAfr`<9A+tEjEb`(>R#@>s^_?J%_&D%&^R z2q?$*M;aJYJBJn~tWLMQ?}1&qg71_xU;eUZCg)Frz0gnmXwl(Zw(+oGt9AvQs&ubX zpb9e?CSapqUX{A&@VfvQN!RedHD@?8JG450WIxp2GAQZnyn}XI1J<S|-?nbePp<j+ zuB9eb%1ZkI80qp%inl>a_p8M&g}ihj7j9U~cMRO-GE!l0X6d`0WpxA{KxbOCI?YB; zDtdKE!bi3$i}!azGk8eux(Py{>OwB6=$#!GKPjXD@`h*Tb!M@%pW|+rYSyquR0~Rt zv?QQl^NcX_!chRJvZgS?e-b#_fg(Q9<tIJ%aL>a0+DM_CpWQm__aL#)3tc0#zhy;) zAS+f<6ul@wX!PA6YZ9ZP!qazPrS8kNNUyls81;!A<M8hr$-+H9yJhFFKhxkapNmiS zCZHmBHYIq8F~JS&^kWj`o!V*lWJSAj2{hD!y?VXHwy#+fuOoS%gCG$lJhexah`wa7 z3M#oL;i$({-noO1ab?FpgfdJE`B{AT%X6>*3=PoBjeZ{g)-5{+OPvOIQ9?@G6smC7 zj=-u#l#B`Bk=4f=_K}88bA%86=^-dveE(a$#&=$I93~hKy)d-q^r1JJWU|x1{e}Rk zdrB<lVRsIsb?_(+MKc1pn1!Tqwi8y5SK~1XDkL@;Z5=lCUV|V7Q;IlR*4+5O7%P@M z043Qwj%IN@s_Txru>fA@EC#gZ@nMS~O3hiZ)Z1mk&Id#bIJLv4l}WVIl1l42!jC(3 z{1Vy66wKAzO=&@MQ)Nt+B7RagQB4{OIK`IG-)Ewx@fIU5PUCm(KDnPzt~zM!y9ouo zkf)N@<0UYGD&!~|Qx#cLmeDE?{AJN2+~jV9&Ow`RzI)@wO$T?FYEqLr%9sSClD&{L zzCi6Ef(bXUQLa*3lazFl#-yk<GXuz(n+@7%(z0iinsB?mDn&_!pDcU5%$Hbr@|sHG z8h%_Uk)TAvJfWH|Sv?E(_h?Phofo!1@JqoIq6j}7k1DJJQ*VUkf{!-q;nMAnD0;d) z%DkSUM86|4QT?<%{{%RLT~G&8+DG*^I5k3ylX_Lz2SL`Fp`fH~=4g_{hsFhnKudcF zw=fq-UvN^_D0h|!;;Le+x8E#w!kn>tDrxNmydhJ^uS|NM33ZhB!gM<k^p7$=<(?|I zN(5>V>Q2`-zOz#BWr~xcqzP(9o1wCMM}<exQG4gCsYQ_rNq~{SVGku6dkM^>PEv?W z1u9?B=FK$fsH!>wH3B8A@kJcv9_K<w_|iF?XvzeD;7+MPmauuXEfN=U(RI2ApEn!g z9_KpN&fF6{_mNR-0+&aC(g6-JqVQQsHR+88cyrpMc5G=ITu{P8aCLUaVy|nJFJ&n4 zWTWc@-U3o{R9RC|Fi#Ce^9V~tQ7ue?s&N7~h)e`zooaV1(=K1!DEuZ`-h@Ev$WLt4 z0^M{EUXH7vqtUqrF#Vb!Mp-D7#Ho^33Ogm8Pt|n-TjJ(Xl6^!Bvd;Yuh?0!SS5bH? zvj<B8HyZb2Gh{*;ul2xHVW$|plpl2WpuBW6N*u*x1cAnjy-M%mMJe{Aq38>IpiYJr ze8EY-1eiz_AlNxo;_ih|H`S`d(pT$KDqR*5lS*>b_ow`!p#qU^)-g)?NJ$+KrZaoY z?bzL0h^VEAR*2Vn_a?HS(dbFubP5AFE9f#$?8-Nle%Diqq0`}hJ&PYM;H-{C!I|QU zB=)4@65ovKwBX^2&Ik!m<Y&lHMZ{3bmxOXwP>S=y<c_Rft^`=Y>2T}Co*n6-+uMbo z+LkaP3EJC52ROK=S1Q8K+Ft0K4n^q|5UuoR>ZqQ86aR;yh98fzm(sdg;){5RcTgG+ z+*3(*AA^mWu?45NCx?+BHY9Ksq{7ldyHXK7tWLsAy@cxZQ#^grl}?N3V?CuvPxX#U zEGkenP7i5?qOY}b@~^^s$VQ#Wlu*{pQJ)-A5_=kEa7d_1<e;A5L%9=AW2g=7NP7qu z{ir~#qh*wDjg@hd6Rl#epHxoOjvG_z_(eg!R1>vjGE({yoMcU2a#wq6kysP^{E(#) zr8(+MUQP?)<&ngrF)u~*2o#?9fS71!;sEP73S&{<;}>$?l9x{Wz$h=mE21ayhk{2h zn$GRhQlI8jM56_m5}0VJmGI+5NnVJy^2OgKti(=!Po#m4Uzz0WO;2a_5;RF(FH30b zMe7tx+Z^R5t?3XPg<AzB=%3&nhogCopfNbnI?7lpcmk9TpR#>%_=n_ZOk_+kN6C<g zr|=HhD#EYyS}!UP8&lfs(`!BR6U-j(m?)`>GSRXWrt*e;9OjAO70lS^(|%NgC8X|k zi&xBxFzP}{DR(LwmGkv@OWe%<KD`$jRdV$e6vkOUQ4IvIY=ir8Qzck6R|TeK>iF|a z!cM^|Aa%x^^HQG*N-7AL2qz#`2E}662?>&7Df}i6wFpFo6i_16TuORA%pkif$)Y&9 zs}k|Oz@(S*rDKa^Op+^;%O~N>fh+J(xn%YM(IQVD8YDj|bdF^oyHwh^(>ltB1JRI} z5FeKwg{NRh!qGA&0;r>rIBJGh%IbLuErhE*j7YRGNiI+RDb!I6pNOZz;C5h4p>IlW zill=Q0gEUdL$}SJd{U#x)d?|@I(&sS=kzIC5jkt9<jg@p3ODB?(^4Nzq{~z!Tl+b? z%lyGcc-pey9q>Xgp}fV+yP#D7SZqGDdL{XG%+bi43IGbu=~%ZN-p4{NpSdHnz8fw1 z2CK)e4G$@=^MW?A`ZUgI4oZZ202Vp=kBgSh+ug?$6oC4>B22<gvGzD90ia%tAH{h= z&v-kC@Z)F{n~DC-@^jO^r5?aU(Q|4a!>kxAymdPff<%=3p@cuyKLvuvVh(SHon*Jf zcXgzQU!zIYDK{$4Uid0(RmP<A`q-8tj<$T376?{0ZEdf?%7H$*44NqmQ=uY!c<5U? z^J43l&?I3_@RiQ%wdet4&-x~-qPrXZ66&Q*z}g@e@%=qYA4%e-@p(OqU!4r(V?r7x z0L4_~YIlT6_UnV_o~aDliSSo~62Yo7k+g;;D$cD|;GXn&qAA-#+((%3%Hf47n(ir} z5MPtFdAQRBo%Fn?n4~t^a9w08hk#S{=vb~MNpZ7IRK)|9mO&!oe!?h^Iw0bFnc)6F zloXLVDmcwY$fYil3Q<8{Vv;a8i5<Rjqv--f5sc6RkH58}`kvgmt90c7uwqBq*cBf+ zsvH#AJl?S%wJI8<OX`&E9_VT<LYC4P06|--D4)s?+LREW*iosJRIs*Vjw++q5k7p_ zpk&=ZxQR%;sZ@nPt*}E&@+NuOag1N4qdX0ES~!|ECdbext=Z2Gk)L8tGPOW2p(Q*Z zbZ&4TpD>4puUHyceG4A}DiNvcEZjaQ#5Vz<j)sa_2}CJ6R>^F+j7>@Bp#j#^*0QMR z(<1;ndp!VUZsKuZ^7@+6g(qL`DVVa(CmA{od3}_J76kW|b2z2L^H0pwkey=a{3ES8 zq?<@&M$vN5ER8qBViK^$e><R4``DBOWG?g5^ro#Cd(70fmVA0}Uc81Xhu<t1qBzp` zef$8P5g}_r@l)@pBI(1gwGXXSs+=r70Ww0W#jf*u{w>sAXzyEYxu->x+!H)18LiNo zSmGk~q-QE4caN9Dn{Iv)kc^W1bdJU4KI(Nfm*yqj;_>4;E`nslA?Xts@%WE)dDL+g zmwN*+ZpGFHB{_&xAk!{X^HWGIN)bmRh-6Hz^7IvVtc@nBXsl60s`kUuEm{h*fMua4 znsTQTezZqr9j=e<K_vy^5fDYZ5nfdlKG<InC@3EofP+`~D0ZgfQHk)I(wNEnOy(Dp zQBcxdG<Veg0M0S(?Uext53Ti;nxG|qiRR{Mb}Btp?ujklf%IB6fKW+CI~#t39veGD zEz77CAKrDi53YP^7HTNH;`yVYG3nq5r2joQuK3FL7lM;RW&~U5Y(#0PYAVrrQ*@41 z$D?uoXlkFy-e^uZ>tWA#gq^(A6z()dyG(J~G%m_hAs&9D{b)f96}VteH!b1;zz%01 zvfGd+61>=tvZafXhHL$V0xP698`9hMR2qNG0lj$u!VkLhlx_-JOVZSUus4s6v;Dg9 zXfvUp;-Yvq5uABgy}J)q4=9<Lnx*k3qd=AFLx%4xQ|ufYk52Q3n7|B@J8paX=RZ1Z z&<BRH_%%!c80N}xsU*!%*$+9?bRvP9-e#imcvK^c&1w7`XZOPM%Q20QN7V)nand*Z zo^E^60E>9rmSnCCN@8X?{~wvX>UfO%M`PkKN{Xklb0<4vB7RQgC5}qky>L`_JL<}K zx-C<WO!T&Ev3;1R27IayA76UtG@`_J<;C_HJP4F+Nq~-zN5jtHf}3)wOG~jeSL;#{ z1SNRnilV)!K#Ef!z(Hm1R+01gndm|7sgPbGx7Flvw3gVZW^?jSGL{mOs=?@0G7B{j z5vLE;b4$e2>2y3=sG&b0)nQZuPjY&D%0so;<YlVsn9M%44UU(BDv`53$%a-hcWU_* zv@x}L<}l6jRp-{bfU*lTzU3{E+p7trxxaG<Psr3@g0pZoY|`RczV=3xNHC$q;0)uu zrtZ>V|H&X5dW1I$pC)7{S?ZvYjw-=tJXHf=X4*k@y|FLpm8qFtn{-zJS-n4ST0B(T zNr)h$aTV!lzWx~J>9<@O<s+b;+UN`3ua9SAhf8QEcR<OWw8l%Ftxx0ZGSX8ooiY`# z&(`TNO7Y4RE=qX&`}IhLe_o(OpC1#$C5-U)jR}tgpFA=^?`Q^gpV+ta$9gK^6H=U! zi>!^(dil~Z36I4t6-OiC{}!C~?kD2WXtM#=dWuMU2vdS5uH;27D%!8FJ(!uVrER!M zu_PM#vcbma=MCG*K>&K3FB3A9fvRoroL5l26(&c5Yd&So!IP(-K(a2;6z}dkkKVX_ zVbC$3@n{7NlQwOEm3lxjFHF3G3RInv0KTw5#tsVT)N7BrHjMHBYctQ1hpaVHDm?TG z7Q1dIl0z8UH&tH#K@KY13}v9_ZaDuROqKX2GYC@FrZ#(fU2)d#o@P7p^bh6k(Uu6T z?jqB@8VFLKykh;_aPMe@!>>H6cX!vye8U$GKf6?-Z)syHh@k~u!qS|l`N}ylKpdWD zDrx3VTqQxMzb!Kn7RroUARISO-Eh?5BdBx=L*L1b1>x{CB5g__d3AVMQ$;62X^MMX z%LA*wYmw=}hL(Nz3p~W@FUz<iS6h>lys#CCObOl;l!RCT=(v&&nf+h6>9}*|y|Lq? z>~??V4e;u9<MGHUZYBi<q_OBl=0%u^l={d3ETsZcyy&g3xqZjJ!LgvEilY;v6^jQt zjB<PpKNXe$P`vZR;V|iY!zm^38-*nBR7IX;Uxg8z+L}(a0~l9tUTxl!qNMS7<f34t zcq`FMb-a!Q5BR{MkjhVQ*noXHg45m<=KT&RY0rb%HApWw?2AjSi>z+!&J;(}<@*?B zp*EV>o|J<sE84uNHe6wB7iM=?I<=Ff{#;bjOpX7Tu;0_5q=n+BFf>d@5Gte1RbxRe z9Mv<DEj@j-odGr)?W==f6@EaH-3v3hqVZ{6LsOxWYK(>4GKI3|^HYEZ$ub{c1*DhJ z*xZJX6JsYv`f{hFnR58>bT5TICe;CvOh%~gs8tkLDmn^CnVWDENAJU_!>{ismmkbW zz81Ew$&<?D7X$PyuxFGhj;70G#89q0B2ulRx$49gLs~JpI5&j@XDbJC#R_LksH6}# zTP3|_Mu75=H&IgU@Re$c)u-GO@RW2EwKSLGmUvYwPFs3C%!|qm$p8J1$@NBKk3C^U znNZRt$V9tc9#8~fNvNa(Q)_CfMy8q{WNW$5=hk^d?t4d0N&jn7CJ_ILb^QYM<!-rW zhT=V8fEpzoO%5hL^O1X}=8jnr4oU@hQhO4?OHT<R)qOg`QIUSV0%ogrEEu8J15iSG z?Z_%=PaBibQ&Q3^v0q?w2^_@;ibzTiQpE>ixEws|;&{cQKPnzMzWPnUY}a#YQBmhf zH+8hjha$;mAajzT+!Kl3QPxq#Qq@!fZXWeitRC&22YtyX<hgZsY}tBX8MuN^<)x%{ zzmVm=OHe1KKVo8PpH@C{z4N1SLlJyLi3m+9fd}&thWZ9{_<Ntb?mARb!fA%nwu-u3 zdk)0PeU`jaQd#anL4Wm>mcgoxmn^l~5IDzOgyFzx?VrHc1JbBfW5b7!HcXq_Rl{13 zW9+sJ(d}pV!Rnr)=u7gXJ>(}`By-3`ZJO7jzNe;VPlbd}q@yuUfvYOBL%5%Q3ZdQE z1C|~EI5z=KSef=(k*?`@IXy1--3>3l?9vUefSyg9-1MNGyG@JJm{K17#vC=En4<+r zzS^+Y0)5#CfgYTxN><X{9SNWAv7IzS9+uk9tddT??Qqb^seiXfPn|UCvC)8R743K% zJb7$AT`KW=v_SgLU1uESDNO_P%tZuxRUfSB9l)7kAz|L>pp!MTw5yDJOS5Z{Ufl1u zdWq7wK#W@66jTJM+cm0JF9T@n`qt#{-*e%WtF2>qN(!EI^-xBqxwLMf=NM`tL1o=@ z3oWUaq-Tx$4qw(LW%aopM#sj4JX|&e|5Wrl-*8F_)rZ4jm|-PjJuL%A!@|H^e)imG zq^$dng+U2!G#*!xUP6lkAMHn_?dj*QICI-YuK<|&TH?v$1v=6{8-bFFC%rQ-iB`<P zz<DEj@Ss3wIQy1bIn8xVj{iva<BHvr>~pmFwck7jhkKr6uo?q0+;sEMYfP3VosyR1 zN!N8aY=%7f<4d+SzMlU2gatX6DP)AZRPfX7L|XJH_=ZYD4Z#F#q|s}v{MY`)U?nIi zMo+c1?73mZO1ikI#z612PDvWpgTCD+0OwspAYtsN;Oz1rw@jb86B{BO6}f-trh6v8 za`k$|h#BqLIyc~6i%RMu(lb~|VYxT7=CAjbD?Wd|oA-Rj(1m&%KKR*v{Z3Kp0;$WK zATZTX#gw%810B8m{z;2&6O}RcAkx`}?bg^PN@}3)1to1&hIqLjv3YMCwlYVC$^O91 zE-I*_WCui?)N@3Nw06=D5pI8c*Wf*G{viN(#QOYCB$d=q`P^ba2Zl2|yPpS>WvrgO z7n<%QYYI+f`333d1)d|heb{g1mW~7A&se0#gOY;T=T$igp47nn{9PjrbN-HDhYPsj z3~xk>2;<(oRw#D40I0pz9?dxK9?s-QUxO-v1xiX<+3N~m_2wJCPJfN*q18Bl)6M{< zl&Ksy*3(|yczAzU887sK0iw&#dDHE#pgHWwUqWyPNsN}h+I}6@1DqcvE?)S3)X#_Z zo%ZhAwm<s7uv272mX*Lz0SXT#B+-@_fNaHnG|EMqEzr|X4P^l76QBuwQqpxDyKi&C zyp-e4fuh~bJ9ZUime*9!DNCoLYWghk6e->YPj`{w92K30J_8kne$G@wP~5k&e;pvb z>5TgcCUnXD%MZ5fFfOQ3qrdk`B_#C>f7z2FOJf~vdC9W2{4gjv1%P&>CHI@4vjFtR zDs#Bo!o121f3Na97?esRM_NQpCy1pJDfguNiN?pHW~w~6!5N93jsRoo)RtZpoKufK zaKvU){+!WmnVEmdpX(4EMXYdj4;_>gDzR68eAkL~?h!6L9%)hi=dPY>efb#0Li0O@ zdEIOzYva+MurJ5WA5CxHj6Jrl2jWA<v;LAC=p82ltj`W=q?^_}WU{4ITZc;p?}uyB zr$PZ@YW`^Y{7p-zb^=g-7%2Yzl^;H~?Mu(%QZ+kh)l8?ExztOY!j<vUC#*w8W@8() zqW1O%nNuwPaMIVioH3951+f#BoGaQ0uj+K8tIydiI&aBWx~C+PeAradfEe$1#3unp zCn`MwSo*8r_Cpi;&n$7|?ojhb#XSXiNW5haN=ghJ%^qe}Da}s6D*9=W3e-%x+p~;d z{y*lAs<M-Ru`gwyprm)cd*jNLtJmGWFr48!sjfLYk;|}gy@g}JqI*i&{J36xsXk~8 zMWlK%HYn-coxIWMcV-&Fyy+^MK5K93eNiL4#qNLo`J<Lv3Z-JHAg!Gzo%I({pDHZn z63J$L+(e38%@TvDq%AWH^DuHw`%y*pGbYj5Gc36N5T38EVx*PEsE!C_i8(de-RmiD z&Ga@?0_iquNq^grygodDfiPuud(!L$YCIxUOFsT97-6v_ZTibC&@CN=sjANWhb1&i zMe^7>=$&I#^PaTrhq8}3O8D50^wi;b$T?p1yI0(l=c+u)!naflSJTH=<=~ZODPQCL zXfkJNL`rHs>730dN0)%)a}Ol)l~IbvmrW+NdjId=#LbR@J*7u0L<4^W>=WB$ZJO<; zjx$AK*C(1X_N8o2k=>7<?Wm&BsNGSp*7ekA<Ry8jGj}EaMIjAVPxJLuG}H4(^&t#> zo++{=z1^T{WY2RzGFr2JI72v##DKpFr?>}gneEU=z2yASLyr1N>t}AV`_TxhT00g7 z*Z1=1D4R4oqHY35LlUGwzwZ1|*kp?P@X13lOLKeObmY2CCdcT@-{<<j%Ff+YvaAZ@ zzUn-7b=~Inz3p678oLL?nLx#99d%G9QUn!5#EH~I2Jwj)G)7_|nssC(7z)CGnP?`O zb)ew{f-s?oe}i57e5}X$?IrE0TXh;bS**R+^YN`6l}#?mB8yLWTuHi*;S|tB#Bm-z zfuFg)eEarkj)qAb1=Lq-K=_NedDhon;g1s6^TbY9@idK!Ty`?!>@pO-&Yi=+Yua<C zW0y)j)cB)8k`#rOSQQb-c@m}ez=W=8uw^`VWysi4PKO$Ql;N@$!smoIJ;zZI6mD%U zl%TGn)-j3*^QHtu<|y$;nSkJMz22$1oO#NVcPOgWCYhYChY;Td$GOHIrNU>hT<@>X z8)XKwmJt=bm|^9RHGv3gtnpjOK4?uakKIdRou!<yZY0;IYn@om*@Dt^^e1?EwbD<E zP2Dna4nurow45<&=#lb~)Z^s)#~Erl9nONgtrvA!MPWGb;Fz9@m=6nvZ)%RByIpj~ z{KI9K7ciDuTM3$mMWx8J5itzj0W7s9R2=oQpOe;)-NT}B&WF#(g(<puqHc$X|NlVG zlA+?Hgx?<xhhZ&O@<;L>1R}a-@b)B4grlN*f(;c%0Yf?G<y=7j$dZqT;O)Ah&jyd2 zuxEvj+kZDQk4cY;(qZ?oqGiEkZrsJ7C2*WEayK4jE2bE2X9vxvAN|~>9i2^du0|qY z-T(j*d79%T#!SArJ~ld1jk<ms;^wW^N_KvAse-8|P^$iA6pj;mSPgCglgKoo&rO6j z#i-^dIZ*xMZgZ7?$Y80=lMq6S>pEt=Go-6DsGHE%N!_baKlbg<`|&R*O9h0I7+Wni zrOeZWYUZw^zRb3V5&66Xq6B7&kMWb9XT#0AlwB%1Gn)nk127d5dh$e#n{_6iAWAy+ z_(S!So@C`O^CpDWk6)8_+8i0OqfMvJ5k~z*h9U~pHwSk&)w&Lee4M${qnoKWEoWN{ z<t@%H!_<qsItnee1g8}}o-aWczW)<j`G`{kna{qcLwzYvl2=I~K{_hk1T&9KcP+1x znul;Yber{b(%gj}%F<xGzQn`V45Nq4-rpX9(MP;=feJMd@U>ol5+urA<@8OcHN}}w z{rE_W8po%ccJc@m1SYn+#fPy+j7L0t*?IGwFeqdg-fhY-B?JMHgTJn6EZFX8qLO3l zH6H#YhQXz!vY~H29GF*gW%Pbys1ZrWnE((XHR;ova^scI6)qJsVP|BsrDst1AqJ(F zhh(1g6aZD=It}sg^PCX23AGk)X(RfuQurFY!jp3NEQ#4QrDZC*2)R{c(l-iH_DC1U zds>C}1mkp(Z9dO_Xg_bzn`c@SrMrZoG)=gp`S_O#?@6*GV#l@6u^v?#7c~)Y)o>aU z+<cqC(Gu@T#AO66!j$+QjVQB@jO(#R%#kwZ657#!DEF~?$GkYzXpLAPVsY>`3@r4Q z@VKlSwcLBd5+h;zfj?Q`;m>nfvW*lsVJu)<sI#=LgSvqtl8)z{iIGco<_nNnYJ8>d z?ClRS`<$=$DkE9yS~OBw15*JeH;|g7o~tE9V*Fc8mQvG`N6b8UMol-WF0*P2p*OKt zTBp%AiKBk{z#vR1M`TA)4zJOP+;wJfCut9WKb@nNAzgf4JuW+27r@MSB8fJR1}zX; zL?hl?!2L`iR))2Aq37s2inf#}eW;#J^>T@<pSU?tlYvtva&?Q;;+*{<rF0N0n=BD1 z727R6SR#Iw?q{^3W7xbHf^tK!D}3W6JyLsde?0|Bk`zeAT2m-|#7tbzbP!XWRH{;1 zdzw(fyk)L7_nv6#GlEiv(s8s*F64uQKiq<m@$hx(W%EnZ2TPjhlw>Qqrrd*@`6bdB zB4v7eV{GI^A?;|Z@$i$zCj>;4c~--Ajjq7WJMq*VA~ywglTO}Zr_oYAr>~nTdiQ?p zAXj>{-hIQ|)6vu@A!=$YoilN<a!am?q1a^oHs`2)P_#uPV$u(ewgm5(8=pj<Bho4L z$VHsuD)WtXgBFsbN$f}Y@!&246I~L&u1kTD>aJc9HAR<%mdPB_sOa+@rHTT2`{Kmv z+mfxnu$oA*)s}lriHA?Y_uOMN@}g2P6OUal=JOJ@vF9zdJvo)*ln&HrVC@lcJ>dN& zWFYjim63EwqorSv#i!^S9zMkh!lbV|B}$P+r^GqBI)*c0ys^z1aXqAoBu0>2qNTQ! z(h-r+rM_{UTbi7sH1oWlgiK7`<NC%(L>sIP-A^SZW2jqCN6jOAdsa;psH9N+VRe~! z_|=x+{s$*726tmCnrb3kX>0N{+_nz4gw8!f64|9F_uOaPf+%JE#LzBnxYREa5QM@9 zrLye}yR0X&bkT1RdRA>s>9c$T6I%JB`h!_=G`gG^_e5?C@#-eRNG-Mr^)H?w`e<2S zZox8Hh0)$CYM~7)8_b598HIWRGr5ZqZLTKunXS!SzG=>#533#gC^Zh#MB}M9^LZS* zN)V*<o+M1hNorB!X_TsqBvQ^*+NJ`|_Xu21fYi_*P2|oI_N6(2WxZCSB*wzaWA;gU z6qC!r$s<P-ogOVuhNrTwruqrp4nab62Ywcr5+IUMo*W;QfxY@(9D|UC$yHPcni)5N z(n>uYOMlb?W;jo){zB(VW5pID7yxhg5R^xMD@l@(YBFyjNc5icamXLX_B6qVHpPmb zWynnCp7JF%GE0BdlMjsUL}}Pz4nvQ<@Olv#ol-wK`^q2Hk^66YBuE~NFs4uS+6DP$ zuoC5)p(1r)6|3Fo-^8JGhDPsx&BBz_JrzE&<}WIzWCq?-8fKf~!pP)1FGi_A9Yw33 zKO?;0=3(bH9&9z$7sZ=MEd5d6YwBT>s&^}i%(s+jN03S|Ul%79ZYA_WPs=)Vw$)tO zHnrlCrYt^LTC@{Y3;CGIb;+0PPcx9_^LB}1iV@koXzBGXJ$#m#&R;tBL73R<C_&N- zD;xA?t-(b}=S~m58e^;@5kLCP=QCdFl5XYtHAKrSg(5FrR~me5o#jwEdQP6#?t;*J zc1-mKflaSyA{0NF98aZ&x@enqz320J^dh-%NIl`ap1;LruERl8f~lo2ov_o^8448@ z@$e^g>ZD9bjzJp*sSh*RG&pJ0XEb;Pu@^(*u^*#Ric#nw2#swojgt+c_Dn1-z4G{M z(5feG?S>8l<`jpL%vi*+9%q{jbJ^d<G2q|(Fq_xIZX6VyzG!8euv)-L6>+|Id(A74 z^6*VR{eviF4yv$B*wrDK0z3UJiw}A773-@;F6rY-ihu#(<Ew?6cMJ7;RK%Rtprms9 zaBOwc>@r+E&9RwfDtZYSI1y5V9Z%Hv+J?X!zV+sbs~T#dK<Tp^2Tw!mOpTj3i9pe+ zALdCs7(o)(BuNv&nL_R4%8)Ac(rq?lpXz!&dtX`%?eyAdQb9oUPsSRLbx;WwGGviX z7k#Gk_SvWO__<rrHe|`v?xr2A!o}yg+lE6{ZFg<Xj6#di<qZ2{LS*fkt#Ol-`Ulh5 zv)Uldw2VW$qTBHVL8`_DO!j>!5MTga6a$&o`4EvRxZiM?Ag#(wtckUpAXS$;)swC3 z07MNuXZTLRgtAqm#!h2D5w}RqyIJrE0w6#Y3<nx-88q?XC>!&mc2Bc<g4EB+DkV~- zMI}bA>)n#>#feXy!^aJcq_Q`UCbU1>EAmql)<z`Y{Yswl=tsbbxq~qE4yQ*EsIk-l zYE~!Jz-g8X><fhxTHE?u3XT5#(YstH^G6N5KX<&X#?xiduWv%=a-==63pOv;$1gXJ z55Yft^2&}Lu9IY5&_qt9Gt^9|y!_;oqJOlwqjSReLUP>ZLer_w?u$C90ZeCqOT#E5 zo~jahgYpf!bc#ZgvXAW4`O1$TKYs1y#pIsAc?y;cD--F_f}^7GWE28LiHJI)kYu(8 z9Z2=jpCtKWt0~dn{OyM?x^e<jbG4pB)&)ulm}$<a#r1IYUKHTUyPBcC_~AeJ@zei( z^lt~PK*qVAUlytctSCGuCpIn$hN1tR5J#W?me?5?`dY_~`Q&Z+^#Cm>#szLt<?e(I z{Ou=bQX#kNf`&jO68qbC{N?$M=y_a3smuLWJE8BtTFrGv0^k2pc=$YeoV*XSrQSSW z*U`W0bo|0|9lI!?lIeMJ#<zKj3D~v`tY-0fNkJ!3HQ0%d)m(N-TYe0X?2J?TzAME{ zYmlWk@7{a#-G{feON@SAjGCaI_GFr*54@7LZ^-p<IaY8wy53Lbfen5Aogcfp+%~Z0 zn4TrZk$Nh+HH_r`t8<@%n}@wOLeIM25#vwdXm;`rhCNyiHh@m#@Gotr?fIp#tNnES zJjdx9brTt>8<fiD&$y&_h?^&nR6PQot@ERdnVeV=sa1EH4Lq`Qc$$>T%Mp|Exo0f- z7p}X`-;vp=6saN>Of>~nm%(j+y+uyg5UjtZE6`c%#L9E}>{$)HHS6G`y%(uYCo8sO zDg9AVIvcS?xa`|kouhHUzC%EM`y`!Ta8zr8Df8^hBw~S2HWayW|Fdv8T~fKtzwajK z@h>-4+JXVCXL@q~{MyI_j#BA8BYj_n%PlH<=c=>R<^D|}!Tn=WFk+-W`PJj+?)~}l z>_B%q+2vYJHi)Iwb|#P-6)A!ysr)xSw>c-Dy0c4?Jn8Vs*Jna?`cV0P@Y&_NRgN&C zU4w>cYEVwwHGS}C!|=X}j^5eN>$^OzS3%Df`O%?qV#ix<EMZt5vbj`F+HH9MY}P;i z(d%2ea@SV|-u?bnz{7_bt+G$BN<?nYw6@TngDa|}c<b8`-nyE*$`8`?osM05TM*s_ zno5x$C4^RV_L##>JN8}bS21-v{<n8Rk4~mY{a1(dKb~pMGh%w74qAgy&YmnQ3Sxfr zk);j+alV$XZ{}Xc-j)5?6#VtNQ)l5FDkHwe9AFjE+|QR1CFC9RDq~Zke)M6D)CQ(2 z_%tW=@8?CuSGK>tXei+o<sIb~48qjp{q@dJ9erEnlYZ@5B}NaG&x^r+ep?Wv7KUW! zzLfgxmDv7z(I{%`{q<Sf3s0w;`+F}<IYHX@S>C-qI;aZ$=8zw)5nZjcxb3xNA-ttH zl>J!_I{Zh!q|53G|LNX|4_vp6%mdmoRk8O=N+d#ma$t`pLhi2*&Da5<MwfKiS<qL{ z+dj-ESqP|7&)<kj3=I@8O4wgdxWuj5^=ExE>An~L)lG}ag{lfTEH6u#i1d}Q-khb_ zU!V6Gduwz1V&BxWyQItgpT2TEi^xM4eb}UW<___aA3Yh0{q?}0R3`V!ePh%lEG19l zo{pP8>d@FUptX9!B^@qejAnE)^E73JzoBQn-1o74;}es}46~N<o8^#j!X8)DI0~Q& zCzet#Wv@5ldVzhl7v8%$PwXZ#_kKAP2oV0QCmYCAk?PrI+h5PP-Z#ZQ=%BwJe0Z`( zQZF}n9MaEzA>edTuh&YMvR<#>mhz)ysEFJMU7qgUz5AYrclI+ahYJgtl`f%!S0Sj; zyLWjiyWW~Djm-2K?#CM+dF7?6lg+T^+MNj#jA*>5;3!ii=zW2oms|7Z>^g6i+iA8w zXFghcgy#0F?HSisXiw;P)6ru@ELr=wz*^;S%n5B5l&T4#9n=%O(en%S`pN3`!?;P8 zbm?y^fJ>381}Zz>-yYntf0T``CrCV2-;A^PdhMcmflv~p#GA3LQ48KZ`bQDhyCT(_ zFc7NIyUYWxLdq%jla0t+q?bC6E97C`Q6CCTG>Wf$nzM5d(>H9`@1{TFWCD~5Q;fTM z{f&C_C{FT4I?*UJSO(w3DSP-C?<vMiiD0zhN5_Pc&jhX!>l*}tn`cf*(LXANwvZrY zht^WCbR34BP`z<Q52wUU>EsT69uU$?*!}(EG@3Bk;g8dfpi>+z>h(jXL@}Mu*H7#p zji_X<N8><CNQ*BulJhQHJ`KT%Qou}1GTBb>v=f?V#CY`OjF=9-9KjfoS$L#Y2KW8- zY|Ip?0G!^<h#f|>rh%p!TEP=}oM)Q6RvQ4xCIBl$sZSA;gose7#Bv2cvBW&z)WR;g zW0E;4;?z+lwu;ttMTa1SF8I%cr9-4ABp^(R=2rKQwiV+7)S|kmm|`SPeX%J;iE(|4 zfSv@+3*hp)0-OpJ9=aUoaS=RDUvX7zc0}vlA}zxy4KXvr+?A?#^hZZV)bD3ex%0E9 zVbUkD)$gcNx}>k1C$SX%Xf~gPB4v^ckq9hP!p-wLng(szKf3Juu@efRLMHg5<*Ha3 zCL<O8XogN}EnzDxp?}o*>6m00{zXX=`lDGpT|hlKu_%jBLm^j!{!ww(xfy-DlpkH{ z{?QAlrz)t|@y7rZ^)Olc4F2Jx;QF}OXN)&c$^0nMGFiX@KZ)u|P%`}qI*pGTC(hit z3B}{{s~iSr80xrr`eJ9p8lHw$vO`8nrJq+nUTWaF4t8e++&m(9V}V=<K}Dt7H1t8p zOa)pOZRwbZWR9}QzXwN+RBETg64r1QK7R3Vqb-L6c}LBLPT`w5y6p@VOF7n1XnXJ! zV?vouXne6!V()Y!i@S<aRc<idup0~=`p(tS4@{FN2CXqkHjh!9U6fYXP!$%jqsN#D ylk}{>{XBgsQI3OmDxIUY^oXDu{-M4vIr?A0D%haKQIiM&0000<MNUMnLSTYC2$$dh literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/main.cpp b/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/main.cpp new file mode 100644 index 0000000..9e9566d --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/dialogs/classwizard/main.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QApplication> +#include <QTranslator> +#include <QLocale> +#include <QLibraryInfo> + +#include "classwizard.h" + +int main(int argc, char *argv[]) +{ + Q_INIT_RESOURCE(classwizard); + + QApplication app(argc, argv); + + QString translatorFileName = QLatin1String("qt_"); + translatorFileName += QLocale::system().name(); + QTranslator *translator = new QTranslator(&app); + if (translator->load(translatorFileName, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) + app.installTranslator(translator); + + ClassWizard wizard; + wizard.show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/extension/finddialog.cpp b/sources/pyside2/doc/codesnippets/examples/dialogs/extension/finddialog.cpp new file mode 100644 index 0000000..a8496f4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/dialogs/extension/finddialog.cpp @@ -0,0 +1,119 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + + +from PySide2.QtGui import * + +//! [0] +def __init__(self, parent): + QDialog.__init__(self, parent) + label = QLabel(self.tr("Find &what:")) + lineEdit = QLineEdit() + label.setBuddy(lineEdit) + + caseCheckBox = QCheckBox(self.tr("Match &case")) + fromStartCheckBox = QCheckBox(self.tr("Search from &start")) + fromStartCheckBox.setChecked(True) + +//! [1] + findButton = QPushButton(self.tr("&Find")) + findButton.setDefault(True) + + moreButton = QPushButton(self.tr("&More")) + moreButton.setCheckable(True) +//! [0] + moreButton.setAutoDefault(False) + + buttonBox = QDialogButtonBox(Qt.Vertical) + buttonBox.addButton(findButton, QDialogButtonBox.ActionRole) + buttonBox.addButton(moreButton, QDialogButtonBox.ActionRole) +//! [1] + +//! [2] + extension = QWidget() + + wholeWordsCheckBox = QCheckBox(self.tr("&Whole words")) + backwardCheckBox = QCheckBox(self.tr("Search &backward")) + searchSelectionCheckBox = QCheckBox(self.tr("Search se&lection")) +//! [2] + +//! [3] + connect(moreButton, SIGNAL("toggled(bool)"), extension, SLOT("setVisible(bool)")) + + extensionLayout = QVBoxLayout() + extensionLayout.setMargin(0) + extensionLayout.addWidget(wholeWordsCheckBox) + extensionLayout.addWidget(backwardCheckBox) + extensionLayout.addWidget(searchSelectionCheckBox) + extension.setLayout(extensionLayout) +//! [3] + +//! [4] + topLeftLayout = QHBoxLayout() + topLeftLayout.addWidget(label) + topLeftLayout.addWidget(lineEdit) + + leftLayout = QVBoxLayout() + leftLayout.addLayout(topLeftLayout) + leftLayout.addWidget(caseCheckBox) + leftLayout.addWidget(fromStartCheckBox) + leftLayout.addSself.tretch(1) + + mainLayout = QGridLayout() + mainLayout.setSizeConsself.traint(QLayout.SetFixedSize) + mainLayout.addLayout(leftLayout, 0, 0) + mainLayout.addWidget(buttonBox, 0, 1) + mainLayout.addWidget(extension, 1, 0, 1, 2) + setLayout(mainLayout) + + setWindowTitle(self.tr("Extension")) +//! [4] //! [5] + extension.hide() +//! [5] diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/images/logo.png b/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..56f17a3e5ade40967dd5b0a8e48ba8bc674f20df GIT binary patch literal 1810 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 W<;9W?^d<Y(ablz6q8cMp3jPlT=j?0% literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/images/watermark.png b/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/images/watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..124a05068b2d1af1a0a5532780a3fb99ddb565d7 GIT binary patch literal 34998 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 WA12G#%4>E20000<MNUMnLSTYu|73pv literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/licensewizard.cpp b/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/licensewizard.cpp new file mode 100644 index 0000000..453dac7 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/licensewizard.cpp @@ -0,0 +1,358 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtWidgets> + +#include "licensewizard.h" + +//! [0] //! [1] //! [2] +# class LicenseWizard +def __init__(self, parent) + QWizard(self, parent) +//! [0] + self.setPage(self.Page_Intro, IntroPage()) + self.setPage(self.Page_Evaluate, EvaluatePage()) + self.setPage(self.Page_Register, RegisterPage()) + self.setPage(self.Page_Details, DetailsPage()) + self.setPage(self.Page_Conclusion, ConclusionPage()) +//! [1] + + self.setStartId(self.Page_Intro); +//! [2] + +//! [3] + +//! [3] //! [4] + self.setWizardStyle(QWizard.ModernStyle); + +//! [4] //! [5] + self.setOption(HaveHelpButton, True); +//! [5] //! [6] + self.setPixmap(QWizard.LogoPixmap, QPixmap(":/images/logo.png")); + +//! [7] + connect(this, SIGNAL(helpRequested()), this, SLOT(showHelp())); +//! [7] + + setWindowTitle(tr("License Wizard")); +//! [8] +} +//! [6] //! [8] + +//! [9] //! [10] +void LicenseWizard::showHelp() +//! [9] //! [11] +{ + static QString lastHelpMessage; + + message = "" + + switch (currentId()) { + case Page_Intro: + message = tr("The decision you make here will affect which page you " + "get to see next."); + break; +//! [10] //! [11] + case Page_Evaluate: + message = tr("Make sure to provide a valid email address, such as " + "toni.buddenbrook@example.de."); + break; + case Page_Register: + message = tr("If you don't provide an upgrade key, you will be " + "asked to fill in your details."); + break; + case Page_Details: + message = tr("Make sure to provide a valid email address, such as " + "thomas.gradgrind@example.co.uk."); + break; + case Page_Conclusion: + message = tr("You must accept the terms and conditions of the " + "license to proceed."); + break; +//! [12] //! [13] + default: + message = tr("This help is likely not to be of any help."); + } +//! [12] + + if (lastHelpMessage == message) + message = tr("Sorry, I already gave what help I could. " + "Maybe you should try asking a human?"); + +//! [14] + QMessageBox::information(this, tr("License Wizard Help"), message); +//! [14] + + lastHelpMessage = message; +//! [15] +} +//! [13] //! [15] + +//! [16] +IntroPage::IntroPage(QWidget *parent) + : QWizardPage(parent) +{ + setTitle(tr("Introduction")); + setPixmap(QWizard::WatermarkPixmap, QPixmap(":/images/watermark.png")); + + topLabel = new QLabel(tr("This wizard will help you register your copy of " + "<i>Super Product One</i>™ or start " + "evaluating the product.")); + topLabel->setWordWrap(true); + + registerRadioButton = new QRadioButton(tr("&Register your copy")); + evaluateRadioButton = new QRadioButton(tr("&Evaluate the product for 30 " + "days")); + registerRadioButton->setChecked(true); + + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget(topLabel); + layout->addWidget(registerRadioButton); + layout->addWidget(evaluateRadioButton); + setLayout(layout); +} +//! [16] //! [17] + +//! [18] +# class IntroPage +def nextId(self): +//! [17] //! [19] + if evaluateRadioButton.isChecked(): + return LicenseWizard.Page_Evaluate + else: + return LicenseWizard.Page_Register +//! [18] //! [19] + +//! [20] +EvaluatePage::EvaluatePage(QWidget *parent) + : QWizardPage(parent) +{ + setTitle(tr("Evaluate <i>Super Product One</i>™")); + setSubTitle(tr("Please fill both fields. Make sure to provide a valid " + "email address (e.g., john.smith@example.com).")); + + nameLabel = new QLabel(tr("N&ame:")); + nameLineEdit = new QLineEdit; +//! [20] + nameLabel->setBuddy(nameLineEdit); + + emailLabel = new QLabel(tr("&Email address:")); + emailLineEdit = new QLineEdit; + emailLineEdit->setValidator(new QRegExpValidator(QRegExp(".*@.*"), this)); + emailLabel->setBuddy(emailLineEdit); + +//! [21] + registerField("evaluate.name*", nameLineEdit); + registerField("evaluate.email*", emailLineEdit); +//! [21] + + QGridLayout *layout = new QGridLayout; + layout->addWidget(nameLabel, 0, 0); + layout->addWidget(nameLineEdit, 0, 1); + layout->addWidget(emailLabel, 1, 0); + layout->addWidget(emailLineEdit, 1, 1); + setLayout(layout); +//! [22] +} +//! [22] + +//! [23] +# class EvaluatePage +def nextId(self): + return LicenseWizard.Page_Conclusion +//! [23] + +RegisterPage::RegisterPage(QWidget *parent) + : QWizardPage(parent) +{ + setTitle(tr("Register Your Copy of <i>Super Product One</i>™")); + setSubTitle(tr("If you have an upgrade key, please fill in " + "the appropriate field.")); + + nameLabel = new QLabel(tr("N&ame:")); + nameLineEdit = new QLineEdit; + nameLabel->setBuddy(nameLineEdit); + + upgradeKeyLabel = new QLabel(tr("&Upgrade key:")); + upgradeKeyLineEdit = new QLineEdit; + upgradeKeyLabel->setBuddy(upgradeKeyLineEdit); + + registerField("register.name*", nameLineEdit); + registerField("register.upgradeKey", upgradeKeyLineEdit); + + QGridLayout *layout = new QGridLayout; + layout->addWidget(nameLabel, 0, 0); + layout->addWidget(nameLineEdit, 0, 1); + layout->addWidget(upgradeKeyLabel, 1, 0); + layout->addWidget(upgradeKeyLineEdit, 1, 1); + setLayout(layout); +} + +//! [24] +# class RegisterPage +def nextId(self): + if self.upgradeKeyLineEdit.text().isEmpty(): + return LicenseWizard::Page_Details + else: + return LicenseWizard::Page_Conclusion +//! [24] + +DetailsPage::DetailsPage(QWidget *parent) + : QWizardPage(parent) +{ + setTitle(tr("Fill In Your Details")); + setSubTitle(tr("Please fill all three fields. Make sure to provide a valid " + "email address (e.g., tanaka.aya@example.co.jp).")); + + companyLabel = new QLabel(tr("&Company name:")); + companyLineEdit = new QLineEdit; + companyLabel->setBuddy(companyLineEdit); + + emailLabel = new QLabel(tr("&Email address:")); + emailLineEdit = new QLineEdit; + emailLineEdit->setValidator(new QRegExpValidator(QRegExp(".*@.*"), this)); + emailLabel->setBuddy(emailLineEdit); + + postalLabel = new QLabel(tr("&Postal address:")); + postalLineEdit = new QLineEdit; + postalLabel->setBuddy(postalLineEdit); + + registerField("details.company*", companyLineEdit); + registerField("details.email*", emailLineEdit); + registerField("details.postal*", postalLineEdit); + + QGridLayout *layout = new QGridLayout; + layout->addWidget(companyLabel, 0, 0); + layout->addWidget(companyLineEdit, 0, 1); + layout->addWidget(emailLabel, 1, 0); + layout->addWidget(emailLineEdit, 1, 1); + layout->addWidget(postalLabel, 2, 0); + layout->addWidget(postalLineEdit, 2, 1); + setLayout(layout); +} + +//! [25] +# class DetailsPage +def nextId(self): + return LicenseWizard.Page_Conclusion +//! [25] + +ConclusionPage::ConclusionPage(QWidget *parent) + : QWizardPage(parent) +{ + setTitle(tr("Complete Your Registration")); + setPixmap(QWizard::WatermarkPixmap, QPixmap(":/images/watermark.png")); + + bottomLabel = new QLabel; + bottomLabel->setWordWrap(true); + + agreeCheckBox = new QCheckBox(tr("I agree to the terms of the license")); + + registerField("conclusion.agree*", agreeCheckBox); + + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget(bottomLabel); + layout->addWidget(agreeCheckBox); + setLayout(layout); +} + +//! [26] +#class ConclusionPage +def nextId(self): + return -1 +//! [26] + +//! [27] +# class ConclusionPage +def initializePage(self): + if wizard().hasVisitedPage(LicenseWizard::Page_Evaluate): + licenseText = self.tr("<u>Evaluation License Agreement:</u> " \ + "You can use this software for 30 days and make one " \ + "backup, but you are not allowed to distribute it.") + elsif wizard().hasVisitedPage(LicenseWizard.Page_Details): + licenseText = self.tr("<u>First-Time License Agreement:</u> " \ + "You can use this software subject to the license " \ + "you will receive by email.") + else: + licenseText = self.tr("<u>Upgrade License Agreement:</u> " \ + "This software is licensed under the terms of your " \ + "current license.") + } + bottomLabel.setText(licenseText) +//! [27] + +//! [28] +void ConclusionPage::setVisible(bool visible) +{ + QWizardPage::setVisible(visible); + + if (visible) { +//! [29] + self.wizard().setButtonText(QWizard.CustomButton1, self.tr("&Print")) + self.wizard().setOption(QWizard.HaveCustomButton1, True) + self.connect(wizard(), SIGNAL("customButtonClicked(int)"), self, SLOT("printButtonClicked()")) +//! [29] + } else { + wizard()->setOption(QWizard::HaveCustomButton1, false); + disconnect(wizard(), SIGNAL(customButtonClicked(int)), + this, SLOT(printButtonClicked())); + } +} +//! [28] + +void ConclusionPage::printButtonClicked() +{ + QPrinter printer; + QPrintDialog dialog(&printer, this); + if (dialog.exec()) + QMessageBox::warning(this, tr("Print License"), + tr("As an environmentally friendly measure, the " + "license text will not actually be printed.")); +} diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/licensewizard.h b/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/licensewizard.h new file mode 100644 index 0000000..f0be5fa --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/licensewizard.h @@ -0,0 +1,173 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef LICENSEWIZARD_H +#define LICENSEWIZARD_H + +#include <QWizard> + +QT_BEGIN_NAMESPACE +class QCheckBox; +class QLabel; +class QLineEdit; +class QRadioButton; +QT_END_NAMESPACE + +//! [0] //! [1] +class LicenseWizard (QWizard): +//! [0] +//! [2] + Page_Intro = 1 + Page_Evaluate = 2 + Page_Register = 3 + Page_Details = 4 + Page_Conclusion = 5 +//! [2] + + def __init__(self, parent): + ... + + def showHelp(self): + ... +//! [3] + +//! [1] //! [3] + +//! [4] +class IntroPage : public QWizardPage +{ + Q_OBJECT + +public: + IntroPage(QWidget *parent = 0); + + int nextId() const; + +private: + QLabel *topLabel; + QRadioButton *registerRadioButton; + QRadioButton *evaluateRadioButton; +}; +//! [4] + +//! [5] +class EvaluatePage : public QWizardPage +{ + Q_OBJECT + +public: + EvaluatePage(QWidget *parent = 0); + + int nextId() const; + +private: + QLabel *nameLabel; + QLabel *emailLabel; + QLineEdit *nameLineEdit; + QLineEdit *emailLineEdit; +}; +//! [5] + +class RegisterPage : public QWizardPage +{ + Q_OBJECT + +public: + RegisterPage(QWidget *parent = 0); + + int nextId() const; + +private: + QLabel *nameLabel; + QLabel *upgradeKeyLabel; + QLineEdit *nameLineEdit; + QLineEdit *upgradeKeyLineEdit; +}; + +class DetailsPage : public QWizardPage +{ + Q_OBJECT + +public: + DetailsPage(QWidget *parent = 0); + + int nextId() const; + +private: + QLabel *companyLabel; + QLabel *emailLabel; + QLabel *postalLabel; + QLineEdit *companyLineEdit; + QLineEdit *emailLineEdit; + QLineEdit *postalLineEdit; +}; + +//! [6] +class ConclusionPage : public QWizardPage +{ + Q_OBJECT + +public: + ConclusionPage(QWidget *parent = 0); + + void initializePage(); + int nextId() const; + void setVisible(bool visible); + +private slots: + void printButtonClicked(); + +private: + QLabel *bottomLabel; + QCheckBox *agreeCheckBox; +}; +//! [6] + +#endif diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/licensewizard.qrc b/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/licensewizard.qrc new file mode 100644 index 0000000..b069938 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/licensewizard.qrc @@ -0,0 +1,6 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file>images/logo.png</file> + <file>images/watermark.png</file> +</qresource> +</RCC> diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/main.cpp b/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/main.cpp new file mode 100644 index 0000000..e372e9c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/dialogs/licensewizard/main.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QApplication> +#include <QTranslator> +#include <QLocale> +#include <QLibraryInfo> + +#include "licensewizard.h" + +int main(int argc, char *argv[]) +{ + Q_INIT_RESOURCE(licensewizard); + + QApplication app(argc, argv); + + QString translatorFileName = QLatin1String("qt_"); + translatorFileName += QLocale::system().name(); + QTranslator *translator = new QTranslator(&app); + if (translator->load(translatorFileName, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) + app.installTranslator(translator); + + LicenseWizard wizard; + wizard.show(); + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/standarddialogs/dialog.cpp b/sources/pyside2/doc/codesnippets/examples/dialogs/standarddialogs/dialog.cpp new file mode 100644 index 0000000..d4dde36 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/dialogs/standarddialogs/dialog.cpp @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] + i = QInputDialog().getInteger(self, self.tr("QInputDialog().getInteger()"), + self.tr("Percentage:"), 25, 0, 100, 1, ok) + if ok: + self.integerLabel.setText(self.tr("%1%").arg(i)) +//! [0] + +//! [1] + d = QInputDialog().getDouble(self, self.tr("QInputDialog().getDouble()"), + self.tr("Amount:"), 37.56, -10000, 10000, 2, ok) + if ok: + doubleLabel.setText(QString("$%1").arg(d)) +//! [1] + +//! [2] + items = [self.tr("Spring"), self.tr("Summer"), self.tr("Fall"), self.tr("Winter")] + + item = QInputDialog().getItem(self, self.tr("QInputDialog().getItem()"), + selftr("Season:"), items, 0, False, ok) + if ok and not item.isEmpty(): + itemLabel.setText(item) +//! [2] + +//! [3] + text = QInputDialog::getText(self, self.tr("QInputDialog().getText()"), + self.tr("User name:"), QLineEdit.Normal, + QDir().home().dirName(), ok) + if ok and text: + textLabel.setText(text) +//! [3] diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/tabdialog/tabdialog.cpp b/sources/pyside2/doc/codesnippets/examples/dialogs/tabdialog/tabdialog.cpp new file mode 100644 index 0000000..4fff4d6 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/dialogs/tabdialog/tabdialog.cpp @@ -0,0 +1,193 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class TabDialog (QDialog): + def __init__(self, fileName, parent = None): + QDialog.__init__(self, parent) + fileInfo = QFileInfo(fileName) + + self.tabWidget = QTabWidget() + self.tabWidget.addTab(GeneralTab(fileInfo), "General") + self.tabWidget.addTab(PermissionsTab(fileInfo), "Permissions") + self.tabWidget.addTab(ApplicationsTab(fileInfo), "Applications") +//! [0] + +//! [1] //! [2] + self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok +//! [1] //! [3] + | QDialogButtonBox.Cancel) + + self.buttonBox.accepted.connect(self.accept) + self.buttonBox.rejected.connect(self.reject) +//! [2] //! [3] + +//! [4] + mainLayout = QVBoxLayout() + mainLayout.addWidget(tabWidget) + mainLayout.addWidget(buttonBox) + self.setLayout(mainLayout) +//! [4] + +//! [5] + self.setWindowTitle("Tab Dialog") +//! [5] + +//! [6] +class GeneralTab (QWidget): + def __init__(self, fileInfo, parent = None): + QWidget.__init__(self, parent) + fileNameLabel = QLabel("File Name:") + fileNameEdit = QLineEdit(fileInfo.fileName()) + + pathLabel = QLabel("Path:") + pathValueLabel = QLabel(fileInfo.absoluteFilePath()) + pathValueLabel.setFrameStyle(QFrame.Panel | QFrame.Sunken) + + sizeLabel = QLabel("Size:") + size = fileInfo.size()/1024 + sizeValueLabel = QLabel("%d K" % size) + sizeValueLabel.setFrameStyle(QFrame.Panel | QFrame.Sunken) + + lastReadLabel = QLabel("Last Read:") + lastReadValueLabel = QLabel(fileInfo.lastRead().toString()) + lastReadValueLabel.setFrameStyle(QFrame.Panel | QFrame.Sunken) + + lastModLabel = QLabel("Last Modified:") + lastModValueLabel = QLabel(fileInfo.lastModified().toString()) + lastModValueLabel.setFrameStyle(QFrame.Panel | QFrame.Sunken) + + mainLayout = QVBoxLayout() + mainLayout.addWidget(fileNameLabel) + mainLayout.addWidget(fileNameEdit) + mainLayout.addWidget(pathLabel) + mainLayout.addWidget(pathValueLabel) + mainLayout.addWidget(sizeLabel) + mainLayout.addWidget(sizeValueLabel) + mainLayout.addWidget(lastReadLabel) + mainLayout.addWidget(lastReadValueLabel) + mainLayout.addWidget(lastModLabel) + mainLayout.addWidget(lastModValueLabel) + mainLayout.addStretch(1) + self.setLayout(mainLayout) +//! [6] + +//! [7] +class PermissionsTab (QWidget): + def __init__(self, fileInfo, parent = None): + QWidget.__init__(self, parent) + permissionsGroup = QGroupBox("Permissions") + + readable = QCheckBox("Readable") + if fileInfo.isReadable(): + readable.setChecked(True) + + writable = QCheckBox("Writable") + if fileInfo.isWritable(): + writable.setChecked(True) + + executable = QCheckBox("Executable") + if fileInfo.isExecutable(): + executable.setChecked(True) + + ownerGroup = QGroupBox("Ownership") + + ownerLabel = QLabel("Owner") + ownerValueLabel = QLabel(fileInfo.owner()) + ownerValueLabel.setFrameStyle(QFrame.Panel | QFrame.Sunken) + + groupLabel = QLabel("Group") + groupValueLabel = QLabel(fileInfo.group()) + groupValueLabel.setFrameStyle(QFrame.Panel | QFrame.Sunken) + + permissionsLayout = QVBoxLayout() + permissionsLayout.addWidget(readable) + permissionsLayout.addWidget(writable) + permissionsLayout.addWidget(executable) + permissionsGroup.setLayout(permissionsLayout) + + ownerLayout = QVBoxLayout() + ownerLayout.addWidget(ownerLabel) + ownerLayout.addWidget(ownerValueLabel) + ownerLayout.addWidget(groupLabel) + ownerLayout.addWidget(groupValueLabel) + ownerGroup.setLayout(ownerLayout) + + mainLayout = QVBoxLayout() + mainLayout.addWidget(permissionsGroup) + mainLayout.addWidget(ownerGroup) + mainLayout.addStretch(1) + self.setLayout(mainLayout) +//! [7] + +//! [8] +class ApplicationsTab (QWidget): + def __init__(self, fileInfo, parent = None): + QWidget.__init__(self, parent) + topLabel = QLabel("Open with:") + + applicationsListBox = QListWidget() + applications = [] + + for i in range(30): + applications.append("Application %d" %s i) + applicationsListBox.insertItems(0, applications) + + if fileInfo.suffix().isEmpty(): + alwaysCheckBox = QCheckBox("Always use this application to open this type of file") + else: + alwaysCheckBox = QCheckBox("Always use this application to open files with the extension '%s'" % fileInfo.suffix()) + + layout = QVBoxLayout() + layout.addWidget(topLabel) + layout.addWidget(applicationsListBox) + layout.addWidget(alwaysCheckBox) + self.setLayout(layout) +//! [8] diff --git a/sources/pyside2/doc/codesnippets/examples/dialogs/trivialwizard/trivialwizard.cpp b/sources/pyside2/doc/codesnippets/examples/dialogs/trivialwizard/trivialwizard.cpp new file mode 100644 index 0000000..6a06c17 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/dialogs/trivialwizard/trivialwizard.cpp @@ -0,0 +1,143 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtWidgets> +#include <QTranslator> +#include <QLocale> +#include <QLibraryInfo> + +//! [0] //! [1] +def createIntroPage(self): + page = QWizardPage() + page.setTitle("Introduction") + + label = QLabel("This wizard will help you register your copy of Super Product Two.") + label.setWordWrap(True) + + layout = QVBoxLayout() + layout.addWidget(label) + page.setLayout(layout) + + return page +//! [0] + +//! [2] +QWizardPage *createRegistrationPage() +//! [1] //! [3] + +//! [3] + QWizardPage *page = new QWizardPage; + page->setTitle("Registration"); + page->setSubTitle("Please fill both fields."); + + QLabel *nameLabel = new QLabel("Name:"); + QLineEdit *nameLineEdit = new QLineEdit; + + QLabel *emailLabel = new QLabel("Email address:"); + QLineEdit *emailLineEdit = new QLineEdit; + + QGridLayout *layout = new QGridLayout; + layout->addWidget(nameLabel, 0, 0); + layout->addWidget(nameLineEdit, 0, 1); + layout->addWidget(emailLabel, 1, 0); + layout->addWidget(emailLineEdit, 1, 1); + page->setLayout(layout); + + return page; +//! [4] + +//! [2] //! [4] + +//! [5] //! [6] +def createConclusionPage(self): +//! [5] //! [7] + +//! [7] + QWizardPage *page = new QWizardPage; + page->setTitle("Conclusion"); + + QLabel *label = new QLabel("You are now successfully registered. Have a " + "nice day!"); + label->setWordWrap(true); + + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget(label); + page->setLayout(layout); + + return page; +//! [8] + +//! [6] //! [8] + +//! [9] //! [10] + +//! [9] //! [11] +def main(): + app = QApplication(sys.argv) + + translatorFileName = "qt_" + translatorFileName += QLocale.system().name() + translator = QTranslator(app) + if translator.load(translatorFileName, QLibraryInfo.location(QLibraryInfo.TranslationsPath)): + app.installTranslator(translator) + + wizard = QWizard() + wizard.addPage(createIntroPage()) + wizard.addPage(createRegistrationPage()) + wizard.addPage(createConclusionPage()) + + wizard.setWindowTitle("Trivial Wizard") + wizard.show() + + return app.exec_() + +if __name__ == "__main__": + main() +//! [10] //! [11] diff --git a/sources/pyside2/doc/codesnippets/examples/graphicsview/simpleanchorlayout/main.cpp b/sources/pyside2/doc/codesnippets/examples/graphicsview/simpleanchorlayout/main.cpp new file mode 100644 index 0000000..818d865 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/graphicsview/simpleanchorlayout/main.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [adding a corner anchor in two steps] +layout.addAnchor(a, Qt.AnchorTop, layout, Qt.AnchorTop) +layout.addAnchor(a, Qt.AnchorLeft, layout, Qt.AnchorLeft) +//! [adding a corner anchor in two steps] + +//! [adding a corner anchor] +layout.addCornerAnchors(a, Qt.TopLeftCorner, layout, Qt.TopLeftCorner) +//! [adding a corner anchor] + +//! [adding anchors] +layout.addAnchor(b, Qt.AnchorLeft, a, Qt.AnchorRight) +layout.addAnchor(b, Qt.AnchorTop, a, Qt.AnchorBottom) +//! [adding anchors] + +//! [adding anchors to match sizes in two steps] +layout.addAnchor(b, Qt.AnchorLeft, c, Qt.AnchorLeft) +layout.addAnchor(b, Qt.AnchorRight, c, Qt.AnchorRight) +//! [adding anchors to match sizes in two steps] + +//! [adding anchors to match sizes] +layout.addAnchors(b, c, Qt.Horizontal) +//! [adding anchors to match sizes] diff --git a/sources/pyside2/doc/codesnippets/examples/imageprovider/imageprovider-example.qml b/sources/pyside2/doc/codesnippets/examples/imageprovider/imageprovider-example.qml new file mode 100644 index 0000000..58f2599 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/imageprovider/imageprovider-example.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import "ImageProviderCore" // import the plugin that registers the color image provider + +//![0] +Column { + Image { source: "image://colors/yellow" } + Image { source: "image://colors/red" } +} +//![0] diff --git a/sources/pyside2/doc/codesnippets/examples/imageprovider/imageprovider.cpp b/sources/pyside2/doc/codesnippets/examples/imageprovider/imageprovider.cpp new file mode 100644 index 0000000..b389011 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/imageprovider/imageprovider.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +class ColorImageProvider (QQuickImageProvider): + def __init__(self): + QQuickImageProvider.__init__(self, QQuickImageProvider.Pixmap) + + def requestPixmap(id, size, requestedSize): + width = 100 + height = 50 + + if size: + size.setWidth(width) + size.setHeight(height) + + if requestedSize.width() > 0: + width = requestedSize.width() + if requestedSize.height() > 0: + height = requestedSize.height() + + pixmap = QPixmap(width, height) + pixmap.fill(QColor(id).rgba()) +//![0] + # write the color name + painter = QPainter(pixmap) + f = painter.font() + f.setPixelSize(20) + painter.setFont(f) + painter.setPen(Qt.black) + if requestedSize.isValid(): + painter.scale(requestedSize.width() / width, requestedSize.height() / height) + painter.drawText(QRectF(0, 0, width, height), Qt.AlignCenter, id) +//![1] + return pixmap +//![1] diff --git a/sources/pyside2/doc/codesnippets/examples/itemviews/customsortfiltermodel/mysortfilterproxymodel.cpp b/sources/pyside2/doc/codesnippets/examples/itemviews/customsortfiltermodel/mysortfilterproxymodel.cpp new file mode 100644 index 0000000..f99b7e1 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/itemviews/customsortfiltermodel/mysortfilterproxymodel.cpp @@ -0,0 +1,109 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] +def __init__(self, parent): + QSortFilterProxyModel.__init__(self, parent) +//! [0] + +//! [1] +def setFilterMinimumDate(self, date): + self.minDate = date + self.invalidateFilter() + +//! [1] + +//! [2] +def setFilterMaximumDate(self, date): + self.maxDate = date + self.invalidateFilter() + +//! [2] + +//! [3] +def filterAcceptsRow(self, sourceRow, sourceParent): + index0 = sourceModel().index(sourceRow, 0, sourceParent) + index1 = sourceModel().index(sourceRow, 1, sourceParent) + index2 = sourceModel().index(sourceRow, 2, sourceParent) + + regex = filterRegExp() + return (regex.indexIn(sourceModel().data(index0)) != -1 + or regex.indexIn(sourceModel().data(index1)) != -1 + and dateInRange(sourceModel().data(index2)) +//! [3] + +//! [4] //! [5] +def lessThan(self, left, right): + leftData = sourceModel().data(left) + rightData = sourceModel().data(right) +//! [4] + +//! [6] + if isinstance(leftData, QDateTime): + return leftData < rightData + else: + emailPattern = QRegExp("([\\w\\.]*@[\\w\\.]*)") + + if left.column() == 1 && emailPattern.indexIn(leftData) != -1: + leftData = emailPattern.cap(1) + + if right.column() == 1 && emailPattern.indexIn(rightData) != -1: + rightData = emailPattern.cap(1) + + return leftString < rightString + +//! [5] //! [6] + +//! [7] +def dateInRange(self, date): + return (!minDate.isValid() || date > minDate) + && (!maxDate.isValid() || date < maxDate) + +//! [7] diff --git a/sources/pyside2/doc/codesnippets/examples/itemviews/pixelator/pixeldelegate.cpp b/sources/pyside2/doc/codesnippets/examples/itemviews/pixelator/pixeldelegate.cpp new file mode 100644 index 0000000..7c207d1 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/itemviews/pixelator/pixeldelegate.cpp @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def __init__(self, parent): + QAbstractItemDelegate.__init__(self, parent) + self.pixelSize = 12 +//! [0] + +//! [1] +def paint(self, painter, option, index): +//! [2] + if option.state and QStyle.State_Selected: + painter.fillRect(option.rect, option.palette.highlight()) +//! [1] + +//! [3] + size = qMin(option.rect.width(), option.rect.height()) +//! [3] //! [4] + brightness = index.model().data(index, Qt.DisplayRole).toInt() + radius = (size/2.0) - (brightness/255.0 * size/2.0) + if radius == 0.0: + return +//! [4] + +//! [5] + painter.save() +//! [5] //! [6] + painter.setRenderHint(QPainter.Antialiasing, true) +//! [6] //! [7] + painter.setPen(Qt.NoPen) +//! [7] //! [8] + if option.state and QStyle.State_Selected: +//! [8] //! [9] + painter.setBrush(option.palette.highlightedText()) + else +//! [2] + painter.setBrush(QBrush(Qt.black)) +//! [9] + +//! [10] + painter.drawEllipse(QRectF(option.rect.x() + option.rect.width()/2 - radius, + option.rect.y() + option.rect.height()/2 - radius, + 2*radius, 2*radius)) + painter.restore() +//! [10] + +//! [11] +def sizeHint(self, option, index): + return QSize(self.pixelSize, self.pixelSize) +//! [11] + +//! [12] +def setPixelSize(self, size): + self.pixelSize = size +//! [12] diff --git a/sources/pyside2/doc/codesnippets/examples/itemviews/simpledommodel/dommodel.cpp b/sources/pyside2/doc/codesnippets/examples/itemviews/simpledommodel/dommodel.cpp new file mode 100644 index 0000000..b9f5826 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/itemviews/simpledommodel/dommodel.cpp @@ -0,0 +1,197 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtWidgets> +#include <QtXml> + +#include "domitem.h" +#include "dommodel.h" + +//! [0] +DomModel::DomModel(QDomDocument document, QObject *parent) + : QAbstractItemModel(parent), domDocument(document) +{ + rootItem = new DomItem(domDocument, 0); +} +//! [0] + +//! [1] +DomModel::~DomModel() +{ + delete rootItem; +} +//! [1] + +//! [2] +def columnCount(self, parent): + return 3 +//! [2] + +//! [3] +QVariant DomModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (role != Qt::DisplayRole) + return QVariant(); + + DomItem *item = static_cast<DomItem*>(index.internalPointer()); + + QDomNode node = item->node(); +//! [3] //! [4] + QStringList attributes; + QDomNamedNodeMap attributeMap = node.attributes(); + + switch (index.column()) { + case 0: + return node.nodeName(); + case 1: + for (int i = 0; i < attributeMap.count(); ++i) { + QDomNode attribute = attributeMap.item(i); + attributes << attribute.nodeName() + "=\"" + +attribute.nodeValue() + "\""; + } + return attributes.join(" "); + case 2: + return node.nodeValue().split("\n").join(" "); + default: + return QVariant(); + } +} +//! [4] + +//! [5] +Qt::ItemFlags DomModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + return 0; + + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; +} +//! [5] + +//! [6] +QVariant DomModel::headerData(int section, Qt::Orientation orientation, + int role) const +{ + if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { + switch (section) { + case 0: + return tr("Name"); + case 1: + return tr("Attributes"); + case 2: + return tr("Value"); + default: + return QVariant(); + } + } + + return QVariant(); +} +//! [6] + +//! [7] +QModelIndex DomModel::index(int row, int column, const QModelIndex &parent) + const +{ + if (!hasIndex(row, column, parent)) + return QModelIndex(); + + DomItem *parentItem; + + if (!parent.isValid()) + parentItem = rootItem; + else + parentItem = static_cast<DomItem*>(parent.internalPointer()); +//! [7] + +//! [8] + DomItem *childItem = parentItem->child(row); + if (childItem) + return createIndex(row, column, childItem); + else + return QModelIndex(); +} +//! [8] + +//! [9] +QModelIndex DomModel::parent(const QModelIndex &child) const +{ + if (!child.isValid()) + return QModelIndex(); + + DomItem *childItem = static_cast<DomItem*>(child.internalPointer()); + DomItem *parentItem = childItem->parent(); + + if (!parentItem || parentItem == rootItem) + return QModelIndex(); + + return createIndex(parentItem->row(), 0, parentItem); +} +//! [9] + +//! [10] +int DomModel::rowCount(const QModelIndex &parent) const +{ + if (parent.column() > 0) + return 0; + + DomItem *parentItem; + + if (!parent.isValid()) + parentItem = rootItem; + else + parentItem = static_cast<DomItem*>(parent.internalPointer()); + + return parentItem->node().childNodes().count(); +} +//! [10] diff --git a/sources/pyside2/doc/codesnippets/examples/linguist/hellotr/main.cpp b/sources/pyside2/doc/codesnippets/examples/linguist/hellotr/main.cpp new file mode 100644 index 0000000..7125841 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/linguist/hellotr/main.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QApplication> +#include <QPushButton> +//! [0] +from PySide2.QtCore import QTranslator +//! [0] + +//! [1] //! [2] +def main(args): +//! [1] //! [3] //! [4] + app = QApplication(args) +//! [3] + +//! [5] + translator = QTranslator() +//! [5] //! [6] + translator.load("hellotr_la") +//! [6] //! [7] + app.installTranslator(translator) +//! [4] //! [7] + +//! [8] + hello = QPushButton(QPushButton.tr("Hello world!")) +//! [8] + hello.resize(100, 30) + + hello.show() + return app.exec_() +//! [2] diff --git a/sources/pyside2/doc/codesnippets/examples/mainwindows/application/mainwindow.cpp b/sources/pyside2/doc/codesnippets/examples/mainwindows/application/mainwindow.cpp new file mode 100644 index 0000000..b0331aa --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/mainwindows/application/mainwindow.cpp @@ -0,0 +1,359 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] +from PySide2.QtGui import * +//! [0] + +//! [1] +def __init__(self): + QMainWindow.__init__(self) +//! [1] //! [2] + textEdit = QPlainTextEdit() + setCentralWidget(textEdit) + + createActions() + createMenus() + createToolBars() + createStatusBar() + + readSettings() + + connect(textEdit.document(), SIGNAL("contentsChanged()"), + self, SLOT("documentWasModified()")) + + setCurrentFile("") + setUnifiedTitleAndToolBarOnMac(True) + +//! [2] + +//! [3] +def closeEvent(self, event): +//! [3] //! [4] + if maybeSave(): + writeSettings() + event.accept() + else: + event.ignore() +//! [4] + +//! [5] +def File(self): +//! [5] //! [6] + if maybeSave(): + textEdit.clear() + setCurrentFile("") +//! [6] + +//! [7] +def open(self): +//! [7] //! [8] + if maybeSave(): + fileName = QFileDialog.getOpenFileName(self) + if !fileName.isEmpty(): + loadFile(fileName) +//! [8] + +//! [9] +def save(self): +//! [9] //! [10] + if curFile.isEmpty(): + return saveAs() + else: + return saveFile(curFile) +//! [10] + +//! [11] +def saveAs(self): +//! [11] //! [12] + fileName = QFileDialog.getSaveFileName(self) + if fileName.isEmpty(): + return False + + return saveFile(fileName) +//! [12] + +//! [13] +def about(self): +//! [13] //! [14] + QMessageBox.about(self, tr("About Application"), + tr("The <b>Application</b> example demonstrates how to " + "write modern GUI applications using Qt, with a menu bar, " + "toolbars, and a status bar.")) + +//! [14] + +//! [15] +def documentWasModified(self): +//! [15] //! [16] + setWindowModified(textEdit.document().isModified()) +//! [16] + +//! [17] +def MainWindow.createActions(self): +//! [17] //! [18] + Act = QAction(QIcon(":/images/new.png"), tr("&New"), self) + Act.setShortcuts(QKeySequence.New) + Act.setStatusTip(tr("Create a new file")) + connect(Act, SIGNAL("triggered()"), self, SLOT("newFile()")) + +//! [19] + openAct = QAction(QIcon(":/images/open.png"), tr("&Open..."), self) + openAct.setShortcuts(QKeySequence.Open) + openAct.setStatusTip(tr("Open an existing file")) + connect(openAct, SIGNAL("triggered()"), self, SLOT("open()")) +//! [18] //! [19] + + saveAct = QAction(QIcon(":/images/save.png"), tr("&Save"), self) + saveAct.setShortcuts(QKeySequence.Save) + saveAct.setStatusTip(tr("Save the document to disk")) + connect(saveAct, SIGNAL("triggered()"), self, SLOT("save()")) + + saveAsAct = QAction(tr("Save &As..."), self) + saveAsAct.setShortcuts(QKeySequence.SaveAs) + saveAsAct.setStatusTip(tr("Save the document under a name")) + connect(saveAsAct, SIGNAL("triggered()"), self, SLOT("saveAs()")) + +//! [20] + exitAct = QAction(tr("E&xit"), self) + exitAct.setShortcut(tr("Ctrl+Q")) +//! [20] + exitAct.setStatusTip(tr("Exit the application")) + connect(exitAct, SIGNAL("triggered()"), self, SLOT("close()")) + +//! [21] + cutAct = QAction(QIcon(":/images/cut.png"), tr("Cu&t"), self) +//! [21] + cutAct.setShortcuts(QKeySequence.Cut) + cutAct.setStatusTip(tr("Cut the current selection's contents to the " + "clipboard")) + connect(cutAct, SIGNAL("triggered()"), textEdit, SLOT("cut()")) + + copyAct = QAction(QIcon(":/images/copy.png"), tr("&Copy"), self) + copyAct.setShortcuts(QKeySequence.Copy) + copyAct.setStatusTip(tr("Copy the current selection's contents to the " + "clipboard")) + connect(copyAct, SIGNAL("triggered()"), textEdit, SLOT("copy()")) + + pasteAct = QAction(QIcon(":/images/paste.png"), tr("&Paste"), self) + pasteAct.setShortcuts(QKeySequence.Paste) + pasteAct.setStatusTip(tr("Paste the clipboard's contents into the current " + "selection")) + connect(pasteAct, SIGNAL("triggered()"), textEdit, SLOT("paste()")) + + aboutAct = QAction(tr("&About"), self) + aboutAct.setStatusTip(tr("Show the application's About box")) + connect(aboutAct, SIGNAL("triggered()"), self, SLOT("about()")) + +//! [22] + aboutQtAct = QAction(tr("About &Qt"), self) + aboutQtAct.setStatusTip(tr("Show the Qt library's About box")) + connect(aboutQtAct, SIGNAL("triggered()"), qApp, SLOT("aboutQt()")) +//! [22] + +//! [23] + cutAct.setEnabled(False) +//! [23] //! [24] + copyAct.setEnabled(False) + connect(textEdit, SIGNAL("copyAvailable(bool)"), + cutAct, SLOT("setEnabled(bool)")) + connect(textEdit, SIGNAL("copyAvailable(bool)"), + copyAct, SLOT("setEnabled(bool)")) +} +//! [24] + +//! [25] //! [26] +def createMenus(self): +//! [25] //! [27] + fileMenu = menuBar().addMenu(tr("&File")) + fileMenu.addAction(Act) +//! [28] + fileMenu.addAction(openAct) +//! [28] + fileMenu.addAction(saveAct) +//! [26] + fileMenu.addAction(saveAsAct) + fileMenu.addSeparator() + fileMenu.addAction(exitAct) + + editMenu = menuBar().addMenu(tr("&Edit")) + editMenu.addAction(cutAct) + editMenu.addAction(copyAct) + editMenu.addAction(pasteAct) + + menuBar().addSeparator() + + helpMenu = menuBar().addMenu(tr("&Help")) + helpMenu.addAction(aboutAct) + helpMenu.addAction(aboutQtAct) + +//! [27] + +//! [29] //! [30] +def createToolBars(self): + fileToolBar = addToolBar(tr("File")) + fileToolBar.addAction(Act) +//! [29] //! [31] + fileToolBar.addAction(openAct) +//! [31] + fileToolBar.addAction(saveAct) + + editToolBar = addToolBar(tr("Edit")) + editToolBar.addAction(cutAct) + editToolBar.addAction(copyAct) + editToolBar.addAction(pasteAct) +//! [30] + +//! [32] +def createStatusBar(self): +//! [32] //! [33] + statusBar().showMessage(tr("Ready")) + +//! [33] + +//! [34] //! [35] +def readSettings(self): +//! [34] //! [36] + settings("Trolltech", "Application Example") + pos = settings.value("pos", QPoint(200, 200)).toPoint() + size = settings.value("size", QSize(400, 400)).toSize() + resize(size) + move(pos) + +//! [35] //! [36] + +//! [37] //! [38] +def writeSettings(self): +//! [37] //! [39] + settings = QSettings("Trolltech", "Application Example") + settings.setValue("pos", pos()) + settings.setValue("size", size()) + +//! [38] //! [39] + +//! [40] +def maybeSave(self): +//! [40] //! [41] + if textEdit.document()->isModified(): + ret = QMessageBox.warning(self, tr("Application"), + tr("The document has been modified.\n" + "Do you want to save your changes?"), + QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel) + if ret == QMessageBox.Save: + return save() + elif ret == QMessageBox.Cancel: + return False + return True +//! [41] + +//! [42] +def loadFile(self, fileName): +//! [42] //! [43] + file = QFile(fileName) + if !file.open(QFile.ReadOnly | QFile.Text): + QMessageBox.warning(self, tr("Application"), + tr("Cannot read file %1:\n%2.") + .arg(fileName) + .arg(file.errorString())) + return + + in = QTextStream(file) + QApplication.setOverrideCursor(Qt::WaitCursor) + textEdit.setPlainText(in.readAll()) + QApplication.restoreOverrideCursor() + + setCurrentFile(fileName) + statusBar().showMessage(tr("File loaded"), 2000) + +//! [43] + +//! [44] +def saveFile(self, fileName): +//! [44] //! [45] + file = QFile(fileName) + if !file.open(QFile.WriteOnly | QFile::Text): + QMessageBox.warning(self, tr("Application"), + tr("Cannot write file %1:\n%2.") + .arg(fileName) + .arg(file.errorString())) + return False + + out = QTextStream(file) + QApplication.setOverrideCursor(Qt.WaitCursor) + out << textEdit.toPlainText() + QApplication.restoreOverrideCursor() + + setCurrentFile(fileName) + statusBar().showMessage(tr("File saved"), 2000) + return True + +//! [45] + +//! [46] +def setCurrentFile(fileName): +//! [46] //! [47] + curFile = fileName + textEdit.document().setModified(False) + setWindowModified(False) + + if curFile.isEmpty(): + shownName = "untitled.txt" + else: + shownName = strippedName(curFile) + + setWindowTitle(tr("%1[*] - %2").arg(shownName).arg(tr("Application"))) + +//! [47] + +//! [48] +def strippedName(self, fullFileName): +//! [48] //! [49] + return QFileInfo(fullFileName).fileName() +//! [49] diff --git a/sources/pyside2/doc/codesnippets/examples/mainwindows/dockwidgets/mainwindow.cpp b/sources/pyside2/doc/codesnippets/examples/mainwindows/dockwidgets/mainwindow.cpp new file mode 100644 index 0000000..e1a9f55 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/mainwindows/dockwidgets/mainwindow.cpp @@ -0,0 +1,255 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +//! [0] +from PySide2.QtGui import * +//! [0] + +//! [1] +def __init__(self): + textEdit = QTextEdit() + setCentralWidget(textEdit) + + createActions() + createMenus() + createToolBars() + createStatusBar() + createDockWindows() + + setWindowTitle(tr("Dock Widgets")) + + Letter() + setUnifiedTitleAndToolBarOnMac(True) +//! [1] + +//! [2] +def Letter(self) + textEdit.clear() + + cursor = QTextCursor(textEdit.textCursor()) + cursor.movePosition(QTextCursor.Start) + topFrame = cursor.currentFrame() + topFrameFormat = topFrame.frameFormat() + topFrameFormat.setPadding(16) + topFrame.setFrameFormat(topFrameFormat) + + textFormat = QTextCharFormat() + boldFormat = QTextCharFormat() + boldFormat.setFontWeight(QFont.Bold) + italicFormat = QTextCharFormat() + italicFormat.setFontItalic(True) + + tableFormat = QTextTableFormat() + tableFormat.setBorder(1) + tableFormat.setCellPadding(16) + tableFormat.setAlignment(Qt.AlignRight) + cursor.insertTable(1, 1, tableFormat) + cursor.insertText("The Firm", boldFormat) + cursor.insertBlock() + cursor.insertText("321 City Street", textFormat) + cursor.insertBlock() + cursor.insertText("Industry Park") + cursor.insertBlock() + cursor.insertText("Some Country") + cursor.setPosition(topFrame.lastPosition()) + cursor.insertText(QDate.currentDate().toString("d MMMM yyyy"), textFormat) + cursor.insertBlock() + cursor.insertBlock() + cursor.insertText("Dear ", textFormat) + cursor.insertText("NAME", italicFormat) + cursor.insertText(",", textFormat) + for i in range(3): + cursor.insertBlock() + cursor.insertText(tr("Yours sincerely,"), textFormat) + for i in range(3): + cursor.insertBlock() + cursor.insertText("The Boss", textFormat) + cursor.insertBlock() + cursor.insertText("ADDRESS", italicFormat) +//! [2] + +//! [3] +def print(self) + document = textEdit.document() + printer = QPrinter() + + dlg = QPrintDialog(&printer, self) + if dlg.exec() != QDialog.Accepted: + return + + document.print(printer) + statusBar().showMessage(tr("Ready"), 2000) +//! [3] + +//! [4] +def save(self): + fileName = QFileDialog.getSaveFileName(self, + tr("Choose a file name"), ".", + tr("HTML (*.html *.htm)")) + if fileName.isEmpty(): + return + file = QFile(fileName) + if !file.open(QFile.WriteOnly | QFile::Text): + QMessageBox.warning(self, tr("Dock Widgets"), + tr("Cannot write file %1:\n%2.") + .arg(fileName) + .arg(file.errorString())) + return + + + out = QTextStream(file) + QApplication.setOverrideCursor(Qt::WaitCursor) + out << textEdit.toHtml() + QApplication.restoreOverrideCursor() + + statusBar().showMessage(tr("Saved '%1'").arg(fileName), 2000) + +//! [4] + +//! [5] +def undo(self): + document = textEdit.document() + document.undo() + +//! [5] + +//! [6] +def insertCustomer(self, customer): + if customer.isEmpty(): + return + + customerList = customer.split(", ") + document = textEdit.document() + cursor = document.find("NAME") + if not cursor.isNull(): + cursor.beginEditBlock() + cursor.insertText(customerList.at(0)) + oldcursor = cursor + cursor = document.find("ADDRESS") + if not cursor.isNull(): + for i in range(customerList.size()): + cursor.insertBlock() + cursor.insertText(customerList.at(i)) + + cursor.endEditBlock() + else: + oldcursor.endEditBlock() +//! [6] + +//! [7] +def addParagraph(self, paragraph): + if (paragraph.isEmpty()) + return + + document = textEdit.document() + cursor = document.find(tr("Yours sincerely,")) + if cursor.isNull(): + return + cursor.beginEditBlock() + cursor.movePosition(QTextCursor.PreviousBlock, QTextCursor.MoveAnchor, 2) + cursor.insertBlock() + cursor.insertText(paragraph) + cursor.insertBlock() + cursor.endEditBlock() + +//! [7] + + +//! [8] +def createStatusBar(self): + statusBar().showMessage(tr("Ready")) + +//! [8] + +//! [9] +def createDockWindows(self): + dock = QDockWidget(tr("Customers"), self) + dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea) + customerList = QListWidget(dock) + customerList.addItems(QStringList() + << "John Doe, Harmony Enterprises, 12 Lakeside, Ambleton" + << "Jane Doe, Memorabilia, 23 Watersedge, Beaton" + << "Tammy Shea, Tiblanka, 38 Sea Views, Carlton" + << "Tim Sheen, Caraba Gifts, 48 Ocean Way, Deal" + << "Sol Harvey, Chicos Coffee, 53 New Springs, Eccleston" + << "Sally Hobart, Tiroli Tea, 67 Long River, Fedula") + dock.setWidget(customerList) + addDockWidget(Qt.RightDockWidgetArea, dock) + viewMenu.addAction(dock.toggleViewAction()) + + dock = QDockWidget(tr("Paragraphs"), self) + paragraphsList = QListWidget(dock) + paragraphsList.addItems(QStringList() + << "Thank you for your payment which we have received today." + << "Your order has been dispatched and should be with you " + "within 28 days." + << "We have dispatched those items that were in stock. The " + "rest of your order will be dispatched once all the " + "remaining items have arrived at our warehouse. No " + "additional shipping charges will be made." + << "You made a small overpayment (less than $5) which we " + "will keep on account for you, or return at your request." + << "You made a small underpayment (less than $1), but we have " + "sent your order anyway. We'll add self underpayment to " + "your next bill." + << "Unfortunately you did not send enough money. Please remit " + "an additional $. Your order will be dispatched as soon as " + "the complete amount has been received." + << "You made an overpayment (more than $5). Do you wish to " + "buy more items, or should we return the excess to you?") + dock.setWidget(paragraphsList) + addDockWidget(Qt.RightDockWidgetArea, dock) + viewMenu.addAction(dock.toggleViewAction()) + + connect(customerList, SIGNAL("currentTextChanged(const QString &)"), + self, SLOT("insertCustomer(const QString &)")) + connect(paragraphsList, SIGNAL("currentTextChanged(const QString &)"), + self, SLOT("addParagraph(const QString &)")) +//! [9] diff --git a/sources/pyside2/doc/codesnippets/examples/mainwindows/mainwindow.cpp b/sources/pyside2/doc/codesnippets/examples/mainwindows/mainwindow.cpp new file mode 100644 index 0000000..6ed5f54 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/mainwindows/mainwindow.cpp @@ -0,0 +1,367 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +from PySide2.QtGui import * + +//! [0] +def __init__(self): + Q__init__(self) + + widget = QWidget() + setCentralWidget(widget) +//! [0] + +//! [1] + topFiller = QWidget() + topFiller.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + infoLabel = QLabel(tr("<i>Choose a menu option, or right-click to " + "invoke a context menu</i>")) + infoLabel.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken) + infoLabel.setAlignment(Qt.AlignCenter) + + bottomFiller = QWidget() + bottomFiller.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + layout = QVBoxLayout() + layout.setMargin(5) + layout.addWidget(topFiller) + layout.addWidget(infoLabel) + layout.addWidget(bottomFiller) + widget.setLayout(layout) +//! [1] + +//! [2] + createActions() + createMenus() + + message = tr("A context menu is available by right-clicking") + statusBar().showMessage(message) + + setWindowTitle(tr("Menus")) + setMinimumSize(160, 160) + resize(480, 320) + +//! [2] + +//! [3] +def contextMenuEvent(self, event): + menu = QMenu(self) + menu.addAction(cutAct) + menu.addAction(copyAct) + menu.addAction(pasteAct) + menu.exec_(event.globalPos()") + +//! [3] + +def File(self): + infoLabel.setText(tr("Invoked <b>File|New</b>")) + + +def open(self): + infoLabel.setText(tr("Invoked <b>File|Open</b>")) + + +def save(self): + infoLabel.setText(tr("Invoked <b>File|Save</b>")) + +def print_(self): + infoLabel.setText(tr("Invoked <b>File|Print</b>")) + +def undo(self): + infoLabel.setText(tr("Invoked <b>Edit|Undo</b>")) + +def redo(self): + infoLabel.setText(tr("Invoked <b>Edit|Redo</b>")) + +def cut(self): + + infoLabel.setText(tr("Invoked <b>Edit|Cut</b>")) + + +def copy(self): + + infoLabel.setText(tr("Invoked <b>Edit|Copy</b>")) + + +def paste(self): + + infoLabel.setText(tr("Invoked <b>Edit|Paste</b>")) + + +def bold(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Bold</b>")) + + +def italic(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Italic</b>")) + + +def leftAlign(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Left Align</b>")) + + +def rightAlign(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Right Align</b>")) + + +def justify(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Justify</b>")) + + +def center(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Center</b>")) + + +def setLineSpacing(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Set Line Spacing</b>")) + + +def setParagraphSpacing(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Set Paragraph Spacing</b>")) + + +def about(self): + + infoLabel.setText(tr("Invoked <b>Help|About</b>")) + QMessageBox.about(self, tr("About Menu"), + tr("The <b>Menu</b> example shows how to create " + "menu-bar menus and context menus.")) + + +def aboutQt(self): + + infoLabel.setText(tr("Invoked <b>Help|About Qt</b>")) + + +//! [4] +def createActions(self): + +//! [5] + Act = new QAction(tr("&New"), self) + Act.setShortcuts(QKeySequence.New) + Act.setStatusTip(tr("Create a new file")) + connect(Act, SIGNAL("triggered()"), self, SLOT("newFile()")) +//! [4] + + openAct = QAction(tr("&Open..."), self) + openAct.setShortcuts(QKeySequence.Open) + openAct.setStatusTip(tr("Open an existing file")) + connect(openAct, SIGNAL("triggered()"), self, SLOT("open()")) +//! [5] + + saveAct = QAction(tr("&Save"), self) + saveAct.setShortcuts(QKeySequence.Save) + saveAct.setStatusTip(tr("Save the document to disk")) + connect(saveAct, SIGNAL("triggered()"), self, SLOT("save()")) + + printAct = QAction(tr("&Print..."), self) + printAct.setShortcuts(QKeySequence.Print) + printAct.setStatusTip(tr("Print the document")) + connect(printAct, SIGNAL("triggered()"), self, SLOT("print_()")) + + exitAct = QAction(tr("E&xit"), self) + exitAct.setShortcut(tr("Ctrl+Q")) + exitAct.setStatusTip(tr("Exit the application")) + connect(exitAct, SIGNAL("triggered()"), self, SLOT("close()")) + + undoAct = QAction(tr("&Undo"), self) + undoAct.setShortcuts(QKeySequence.Undo) + undoAct.setStatusTip(tr("Undo the last operation")) + connect(undoAct, SIGNAL("triggered()"), self, SLOT("undo()")) + + redoAct = QAction(tr("&Redo"), self) + redoAct.setShortcuts(QKeySequence.Redo) + redoAct.setStatusTip(tr("Redo the last operation")) + connect(redoAct, SIGNAL("triggered()"), self, SLOT("redo()")) + + cutAct = QAction(tr("Cu&t"), self) + cutAct.setShortcuts(QKeySequence.Cut) + cutAct.setStatusTip(tr("Cut the current selection's contents to the " + "clipboard")) + connect(cutAct, SIGNAL("triggered()"), self, SLOT("cut()")) + + copyAct = QAction(tr("&Copy"), self) + copyAct.setShortcut(tr("Ctrl+C")) + copyAct.setStatusTip(tr("Copy the current selection's contents to the " + "clipboard")) + connect(copyAct, SIGNAL("triggered()"), self, SLOT("copy()")) + + pasteAct = QAction(tr("&Paste"), self) + pasteAct.setShortcuts(QKeySequence.Paste) + pasteAct.setStatusTip(tr("Paste the clipboard's contents into the current " + "selection")) + connect(pasteAct, SIGNAL("triggered()"), self, SLOT("paste()")) + + boldAct = QAction(tr("&Bold"), self) + boldAct.setCheckable(True) + boldAct.setShortcut(tr("Ctrl+B")) + boldAct.setStatusTip(tr("Make the text bold")) + connect(boldAct, SIGNAL("triggered()"), self, SLOT("bold()")) + + QFont boldFont = boldAct.font() + boldFont.setBold(True) + boldAct.setFont(boldFont) + + italicAct = QAction(tr("&Italic"), self) + italicAct.setCheckable(True) + italicAct.setShortcut(tr("Ctrl+I")) + italicAct.setStatusTip(tr("Make the text italic")) + connect(italicAct, SIGNAL("triggered()"), self, SLOT("italic()")) + + QFont italicFont = italicAct.font() + italicFont.setItalic(True) + italicAct.setFont(italicFont) + + setLineSpacingAct = QAction(tr("Set &Line Spacing..."), self) + setLineSpacingAct.setStatusTip(tr("Change the gap between the lines of a " + "paragraph")) + connect(setLineSpacingAct, SIGNAL("triggered()"), self, SLOT("setLineSpacing()")) + + setParagraphSpacingAct = QAction(tr("Set &Paragraph Spacing..."), self) + setLineSpacingAct.setStatusTip(tr("Change the gap between paragraphs")) + connect(setParagraphSpacingAct, SIGNAL("triggered()"), + self, SLOT("setParagraphSpacing()")) + + aboutAct = QAction(tr("&About"), self) + aboutAct.setStatusTip(tr("Show the application's About box")) + connect(aboutAct, SIGNAL("triggered()"), self, SLOT("about()")) + + aboutQtAct = QAction(tr("About &Qt"), self) + aboutQtAct.setStatusTip(tr("Show the Qt library's About box")) + connect(aboutQtAct, SIGNAL("triggered()"), qApp, SLOT("aboutQt()")) + connect(aboutQtAct, SIGNAL("triggered()"), self, SLOT("aboutQt()")) + + leftAlignAct = QAction(tr("&Left Align"), self) + leftAlignAct.setCheckable(True) + leftAlignAct.setShortcut(tr("Ctrl+L")) + leftAlignAct.setStatusTip(tr("Left align the selected text")) + connect(leftAlignAct, SIGNAL("triggered()"), self, SLOT("leftAlign()")) + + rightAlignAct = QAction(tr("&Right Align"), self) + rightAlignAct.setCheckable(True) + rightAlignAct.setShortcut(tr("Ctrl+R")) + rightAlignAct.setStatusTip(tr("Right align the selected text")) + connect(rightAlignAct, SIGNAL("triggered()"), self, SLOT("rightAlign()")) + + justifyAct = QAction(tr("&Justify"), self) + justifyAct.setCheckable(True) + justifyAct.setShortcut(tr("Ctrl+J")) + justifyAct.setStatusTip(tr("Justify the selected text")) + connect(justifyAct, SIGNAL("triggered()"), self, SLOT("justify()")) + + centerAct = QAction(tr("&Center"), self) + centerAct.setCheckable(True) + centerAct.setShortcut(tr("Ctrl+E")) + centerAct.setStatusTip(tr("Center the selected text")) + connect(centerAct, SIGNAL("triggered()"), self, SLOT("center()")) + +//! [6] //! [7] + alignmentGroup = QActionGroup(self) + alignmentGroup.addAction(leftAlignAct) + alignmentGroup.addAction(rightAlignAct) + alignmentGroup.addAction(justifyAct) + alignmentGroup.addAction(centerAct) + leftAlignAct.setChecked(True) +//! [6] + +//! [7] + +//! [8] +def createMenus(self): + +//! [9] //! [10] + fileMenu = menuBar().addMenu(tr("&File")) + fileMenu.addAction(Act) +//! [9] + fileMenu.addAction(openAct) +//! [10] + fileMenu.addAction(saveAct) + fileMenu.addAction(printAct) +//! [11] + fileMenu.addSeparator() +//! [11] + fileMenu.addAction(exitAct) + + editMenu = menuBar().addMenu(tr("&Edit")) + editMenu.addAction(undoAct) + editMenu.addAction(redoAct) + editMenu.addSeparator() + editMenu.addAction(cutAct) + editMenu.addAction(copyAct) + editMenu.addAction(pasteAct) + editMenu.addSeparator() + + helpMenu = menuBar().addMenu(tr("&Help")) + helpMenu.addAction(aboutAct) + helpMenu.addAction(aboutQtAct) +//! [8] + +//! [12] + formatMenu = editMenu.addMenu(tr("&Format")) + formatMenu.addAction(boldAct) + formatMenu.addAction(italicAct) + formatMenu.addSeparator()->setText(tr("Alignment")) + formatMenu.addAction(leftAlignAct) + formatMenu.addAction(rightAlignAct) + formatMenu.addAction(justifyAct) + formatMenu.addAction(centerAct) + formatMenu.addSeparator() + formatMenu.addAction(setLineSpacingAct) + formatMenu.addAction(setParagraphSpacingAct) +//! [12] diff --git a/sources/pyside2/doc/codesnippets/examples/mainwindows/mdi/mainwindow.cpp b/sources/pyside2/doc/codesnippets/examples/mainwindows/mdi/mainwindow.cpp new file mode 100644 index 0000000..cfee5cd --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/mainwindows/mdi/mainwindow.cpp @@ -0,0 +1,381 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +from PySide2.QtGui import * + +def __init__(self): + + mdiArea = QMdiArea() + mdiArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) + mdiArea.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) + setCentralWidget(mdiArea) + connect(mdiArea, SIGNAL("subWindowActivated(QMdiSubWindow *)"), + self, SLOT("updateMenus()")) + windowMapper = QSignalMapper(self) + connect(windowMapper, SIGNAL("mapped(QWidget *)"), + self, SLOT("setActiveSubWindow(QWidget *)")) + + createActions() + createMenus() + createToolBars() + createStatusBar() + updateMenus() + + readSettings() + + setWindowTitle(tr("MDI")) + setUnifiedTitleAndToolBarOnMac(True) + + +def closeEvent(self, event): + mdiArea.closeAllSubWindows() + if self.activeMdiChild(): + event.ignore() + else: + self.writeSettings() + event.accept() + +def File(self): + child = self.createMdiChild() + child.File() + child.show() + + +def open(self): + fileName = QFileDialog.getOpenFileName(self) + if !fileName.isEmpty()): + existing = self.findMdiChild(fileName) + if existing: + mdiArea.setActiveSubWindow(existing) + return + + child = createMdiChild() + if child.loadFile(fileName)): + statusBar().showMessage(tr("File loaded"), 2000) + child.show() + else: + child.close() + +def save(self): + if self.activeMdiChild() && self.activeMdiChild().save(): + self.statusBar().showMessage(tr("File saved"), 2000) + +def saveAs(self): + if self.activeMdiChild() && self.activeMdiChild().saveAs(): + self.statusBar().showMessage(tr("File saved"), 2000) + +def cut(self): + if self.activeMdiChild(): + self.activeMdiChild().cut() + +def copy(self): + if self.activeMdiChild(): + activeMdiChild().copy() + +def paste(self): + if self.activeMdiChild(): + activeMdiChild().paste() + +def about(self): + QMessageBox.about(self, tr("About MDI"), + tr("The <b>MDI</b> example demonstrates how to write multiple " + "document interface applications using Qt.")") + +def updateMenus(self): + hasMdiChild = (activeMdiChild() != 0) + self.saveAct.setEnabled(hasMdiChild) + self.saveAsAct.setEnabled(hasMdiChild) + self.pasteAct.setEnabled(hasMdiChild) + self.closeAct.setEnabled(hasMdiChild) + self.closeAllAct.setEnabled(hasMdiChild) + self.tileAct.setEnabled(hasMdiChild) + self.cascadeAct.setEnabled(hasMdiChild) + self.nextAct.setEnabled(hasMdiChild) + self.previousAct.setEnabled(hasMdiChild) + self.separatorAct.setVisible(hasMdiChild) + + hasSelection = (self.activeMdiChild() && + self.activeMdiChild().textCursor().hasSelection()") + self.cutAct.setEnabled(hasSelection) + self.copyAct.setEnabled(hasSelection) + +def updateWindowMenu(self): + self.windowMenu.clear() + self.windowMenu.addAction(closeAct) + self.windowMenu.addAction(closeAllAct) + self.windowMenu.addSeparator() + self.windowMenu.addAction(tileAct) + self.windowMenu.addAction(cascadeAct) + self.windowMenu.addSeparator() + self.windowMenu.addAction(nextAct) + self.windowMenu.addAction(previousAct) + self.windowMenu.addAction(separatorAct) + + windows = mdiArea.subWindowList() + separatorAct.setVisible(!windows.isEmpty()") + + for i in range((int i = 0 i < windows.size(); ++i) + MdiChild *child = qobject_cast<MdiChild *>(windows.at(i).widget()") + + QString text + if (i < 9) + text = tr("&%1 %2").arg(i + 1) + .arg(child.userFriendlyCurrentFile()") + else + text = tr("%1 %2").arg(i + 1) + .arg(child.userFriendlyCurrentFile()") + + QAction *action = windowMenu.addAction(text) + action.setCheckable(True) + action .setChecked(child == activeMdiChild()") + connect(action, SIGNAL("triggered()"), windowMapper, SLOT("map()")) + windowMapper.setMapping(action, windows.at(i)") + + + +MdiChild *createMdiChild() + + MdiChild *child = MdiChild + mdiArea.addSubWindow(child) + + connect(child, SIGNAL("copyAvailable(bool)"), + cutAct, SLOT("setEnabled(bool)")) + connect(child, SIGNAL("copyAvailable(bool)"), + copyAct, SLOT("setEnabled(bool)")) + + return child + + +def createActions() + + Act = new QAction(QIcon(":/images/new.png"), tr("&New"), self) + Act.setShortcuts(QKeySequence.New) + Act.setStatusTip(tr("Create a new file")") + connect(Act, SIGNAL("triggered()"), self, SLOT("newFile()")) + + openAct = QAction(QIcon(":/images/open.png"), tr("&Open..."), self) + openAct.setShortcuts(QKeySequence.Open) + openAct.setStatusTip(tr("Open an existing file")") + connect(openAct, SIGNAL("triggered()"), self, SLOT("open()")) + + saveAct = QAction(QIcon(":/images/save.png"), tr("&Save"), self) + saveAct.setShortcuts(QKeySequence.Save) + saveAct.setStatusTip(tr("Save the document to disk")") + connect(saveAct, SIGNAL("triggered()"), self, SLOT("save()")) + + saveAsAct = QAction(tr("Save &As..."), self) + saveAsAct.setShortcuts(QKeySequence.SaveAs) + saveAsAct.setStatusTip(tr("Save the document under a name")") + connect(saveAsAct, SIGNAL("triggered()"), self, SLOT("saveAs()")) + +//! [0] + exitAct = QAction(tr("E&xit"), self) + exitAct.setShortcut(tr("Ctrl+Q")") + exitAct.setStatusTip(tr("Exit the application")") + connect(exitAct, SIGNAL("triggered()"), qApp, SLOT("closeAllWindows()")) +//! [0] + + cutAct = QAction(QIcon(":/images/cut.png"), tr("Cu&t"), self) + cutAct.setShortcuts(QKeySequence.Cut) + cutAct.setStatusTip(tr("Cut the current selection's contents to the " + "clipboard")") + connect(cutAct, SIGNAL("triggered()"), self, SLOT("cut()")) + + copyAct = QAction(QIcon(":/images/copy.png"), tr("&Copy"), self) + copyAct.setShortcuts(QKeySequence.Copy) + copyAct.setStatusTip(tr("Copy the current selection's contents to the " + "clipboard")") + connect(copyAct, SIGNAL("triggered()"), self, SLOT("copy()")) + + pasteAct = QAction(QIcon(":/images/paste.png"), tr("&Paste"), self) + pasteAct.setShortcuts(QKeySequence.Paste) + pasteAct.setStatusTip(tr("Paste the clipboard's contents into the current " + "selection")") + connect(pasteAct, SIGNAL("triggered()"), self, SLOT("paste()")) + + closeAct = QAction(tr("Cl&ose"), self) + closeAct.setShortcut(tr("Ctrl+F4")") + closeAct.setStatusTip(tr("Close the active window")") + connect(closeAct, SIGNAL("triggered()"), + mdiArea, SLOT("closeActiveSubWindow()")) + + closeAllAct = QAction(tr("Close &All"), self) + closeAllAct.setStatusTip(tr("Close all the windows")") + connect(closeAllAct, SIGNAL("triggered()"), + mdiArea, SLOT("closeAllSubWindows()")) + + tileAct = QAction(tr("&Tile"), self) + tileAct.setStatusTip(tr("Tile the windows")") + connect(tileAct, SIGNAL("triggered()"), mdiArea, SLOT("tileSubWindows()")) + + cascadeAct = QAction(tr("&Cascade"), self) + cascadeAct.setStatusTip(tr("Cascade the windows")") + connect(cascadeAct, SIGNAL("triggered()"), mdiArea, SLOT("cascadeSubWindows()")) + + nextAct = QAction(tr("Ne&xt"), self) + nextAct.setShortcuts(QKeySequence.NextChild) + nextAct.setStatusTip(tr("Move the focus to the next window")") + connect(nextAct, SIGNAL("triggered()"), + mdiArea, SLOT("activateNextSubWindow()")) + + previousAct = QAction(tr("Pre&vious"), self) + previousAct.setShortcuts(QKeySequence.PreviousChild) + previousAct.setStatusTip(tr("Move the focus to the previous " + "window")") + connect(previousAct, SIGNAL("triggered()"), + mdiArea, SLOT("activatePreviousSubWindow()")) + + separatorAct = QAction(self) + separatorAct.setSeparator(True) + + aboutAct = QAction(tr("&About"), self) + aboutAct.setStatusTip(tr("Show the application's About box")") + connect(aboutAct, SIGNAL("triggered()"), self, SLOT("about()")) + + aboutQtAct = QAction(tr("About &Qt"), self) + aboutQtAct.setStatusTip(tr("Show the Qt library's About box")") + connect(aboutQtAct, SIGNAL("triggered()"), qApp, SLOT("aboutQt()")) + + +def createMenus() + + fileMenu = menuBar().addMenu(tr("&File")") + fileMenu.addAction(Act) + fileMenu.addAction(openAct) + fileMenu.addAction(saveAct) + fileMenu.addAction(saveAsAct) + fileMenu.addSeparator() + QAction *action = fileMenu.addAction(tr("Switch layout direction")") + connect(action, SIGNAL("triggered()"), self, SLOT("switchLayoutDirection()")) + fileMenu.addAction(exitAct) + + editMenu = menuBar().addMenu(tr("&Edit")") + editMenu.addAction(cutAct) + editMenu.addAction(copyAct) + editMenu.addAction(pasteAct) + + windowMenu = menuBar().addMenu(tr("&Window")") + updateWindowMenu() + connect(windowMenu, SIGNAL("aboutToShow()"), self, SLOT("updateWindowMenu()")) + + menuBar().addSeparator() + + helpMenu = menuBar().addMenu(tr("&Help")") + helpMenu.addAction(aboutAct) + helpMenu.addAction(aboutQtAct) + + +def createToolBars() + + fileToolBar = addToolBar(tr("File")") + fileToolBar.addAction(Act) + fileToolBar.addAction(openAct) + fileToolBar.addAction(saveAct) + + editToolBar = addToolBar(tr("Edit")") + editToolBar.addAction(cutAct) + editToolBar.addAction(copyAct) + editToolBar.addAction(pasteAct) + + +def createStatusBar() + + statusBar().showMessage(tr("Ready")") + + +def readSettings() + + QSettings settings("Trolltech", "MDI Example") + QPoint pos = settings.value("pos", QPoint(200, 200)").toPoint() + QSize size = settings.value("size", QSize(400, 400)").toSize() + move(pos) + resize(size) + + +def writeSettings() + + QSettings settings("Trolltech", "MDI Example") + settings.setValue("pos", pos()") + settings.setValue("size", size()") + + +MdiChild *activeMdiChild() + + if (QMdiSubWindow *activeSubWindow = mdiArea.activeSubWindow()") + return qobject_cast<MdiChild *>(activeSubWindow.widget()") + return 0 + + +QMdiSubWindow *findMdiChild(const QString &fileName) + + QString canonicalFilePath = QFileInfo(fileName).canonicalFilePath() + + foreach (QMdiSubWindow *window, mdiArea.subWindowList()") + MdiChild *mdiChild = qobject_cast<MdiChild *>(window.widget()") + if (mdiChild.currentFile() == canonicalFilePath) + return window + + return 0 + + +def switchLayoutDirection() + + if (layoutDirection() == Qt.LeftToRight) + qApp.setLayoutDirection(Qt.RightToLeft) + else + qApp.setLayoutDirection(Qt.LeftToRight) + + +def setActiveSubWindow(QWidget *window) + + if (!window) + return + mdiArea.setActiveSubWindow(qobject_cast<QMdiSubWindow *>(window)") + diff --git a/sources/pyside2/doc/codesnippets/examples/mainwindows/menus/mainwindow.cpp b/sources/pyside2/doc/codesnippets/examples/mainwindows/menus/mainwindow.cpp new file mode 100644 index 0000000..6ed5f54 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/mainwindows/menus/mainwindow.cpp @@ -0,0 +1,367 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +from PySide2.QtGui import * + +//! [0] +def __init__(self): + Q__init__(self) + + widget = QWidget() + setCentralWidget(widget) +//! [0] + +//! [1] + topFiller = QWidget() + topFiller.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + infoLabel = QLabel(tr("<i>Choose a menu option, or right-click to " + "invoke a context menu</i>")) + infoLabel.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken) + infoLabel.setAlignment(Qt.AlignCenter) + + bottomFiller = QWidget() + bottomFiller.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + layout = QVBoxLayout() + layout.setMargin(5) + layout.addWidget(topFiller) + layout.addWidget(infoLabel) + layout.addWidget(bottomFiller) + widget.setLayout(layout) +//! [1] + +//! [2] + createActions() + createMenus() + + message = tr("A context menu is available by right-clicking") + statusBar().showMessage(message) + + setWindowTitle(tr("Menus")) + setMinimumSize(160, 160) + resize(480, 320) + +//! [2] + +//! [3] +def contextMenuEvent(self, event): + menu = QMenu(self) + menu.addAction(cutAct) + menu.addAction(copyAct) + menu.addAction(pasteAct) + menu.exec_(event.globalPos()") + +//! [3] + +def File(self): + infoLabel.setText(tr("Invoked <b>File|New</b>")) + + +def open(self): + infoLabel.setText(tr("Invoked <b>File|Open</b>")) + + +def save(self): + infoLabel.setText(tr("Invoked <b>File|Save</b>")) + +def print_(self): + infoLabel.setText(tr("Invoked <b>File|Print</b>")) + +def undo(self): + infoLabel.setText(tr("Invoked <b>Edit|Undo</b>")) + +def redo(self): + infoLabel.setText(tr("Invoked <b>Edit|Redo</b>")) + +def cut(self): + + infoLabel.setText(tr("Invoked <b>Edit|Cut</b>")) + + +def copy(self): + + infoLabel.setText(tr("Invoked <b>Edit|Copy</b>")) + + +def paste(self): + + infoLabel.setText(tr("Invoked <b>Edit|Paste</b>")) + + +def bold(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Bold</b>")) + + +def italic(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Italic</b>")) + + +def leftAlign(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Left Align</b>")) + + +def rightAlign(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Right Align</b>")) + + +def justify(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Justify</b>")) + + +def center(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Center</b>")) + + +def setLineSpacing(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Set Line Spacing</b>")) + + +def setParagraphSpacing(self): + + infoLabel.setText(tr("Invoked <b>Edit|Format|Set Paragraph Spacing</b>")) + + +def about(self): + + infoLabel.setText(tr("Invoked <b>Help|About</b>")) + QMessageBox.about(self, tr("About Menu"), + tr("The <b>Menu</b> example shows how to create " + "menu-bar menus and context menus.")) + + +def aboutQt(self): + + infoLabel.setText(tr("Invoked <b>Help|About Qt</b>")) + + +//! [4] +def createActions(self): + +//! [5] + Act = new QAction(tr("&New"), self) + Act.setShortcuts(QKeySequence.New) + Act.setStatusTip(tr("Create a new file")) + connect(Act, SIGNAL("triggered()"), self, SLOT("newFile()")) +//! [4] + + openAct = QAction(tr("&Open..."), self) + openAct.setShortcuts(QKeySequence.Open) + openAct.setStatusTip(tr("Open an existing file")) + connect(openAct, SIGNAL("triggered()"), self, SLOT("open()")) +//! [5] + + saveAct = QAction(tr("&Save"), self) + saveAct.setShortcuts(QKeySequence.Save) + saveAct.setStatusTip(tr("Save the document to disk")) + connect(saveAct, SIGNAL("triggered()"), self, SLOT("save()")) + + printAct = QAction(tr("&Print..."), self) + printAct.setShortcuts(QKeySequence.Print) + printAct.setStatusTip(tr("Print the document")) + connect(printAct, SIGNAL("triggered()"), self, SLOT("print_()")) + + exitAct = QAction(tr("E&xit"), self) + exitAct.setShortcut(tr("Ctrl+Q")) + exitAct.setStatusTip(tr("Exit the application")) + connect(exitAct, SIGNAL("triggered()"), self, SLOT("close()")) + + undoAct = QAction(tr("&Undo"), self) + undoAct.setShortcuts(QKeySequence.Undo) + undoAct.setStatusTip(tr("Undo the last operation")) + connect(undoAct, SIGNAL("triggered()"), self, SLOT("undo()")) + + redoAct = QAction(tr("&Redo"), self) + redoAct.setShortcuts(QKeySequence.Redo) + redoAct.setStatusTip(tr("Redo the last operation")) + connect(redoAct, SIGNAL("triggered()"), self, SLOT("redo()")) + + cutAct = QAction(tr("Cu&t"), self) + cutAct.setShortcuts(QKeySequence.Cut) + cutAct.setStatusTip(tr("Cut the current selection's contents to the " + "clipboard")) + connect(cutAct, SIGNAL("triggered()"), self, SLOT("cut()")) + + copyAct = QAction(tr("&Copy"), self) + copyAct.setShortcut(tr("Ctrl+C")) + copyAct.setStatusTip(tr("Copy the current selection's contents to the " + "clipboard")) + connect(copyAct, SIGNAL("triggered()"), self, SLOT("copy()")) + + pasteAct = QAction(tr("&Paste"), self) + pasteAct.setShortcuts(QKeySequence.Paste) + pasteAct.setStatusTip(tr("Paste the clipboard's contents into the current " + "selection")) + connect(pasteAct, SIGNAL("triggered()"), self, SLOT("paste()")) + + boldAct = QAction(tr("&Bold"), self) + boldAct.setCheckable(True) + boldAct.setShortcut(tr("Ctrl+B")) + boldAct.setStatusTip(tr("Make the text bold")) + connect(boldAct, SIGNAL("triggered()"), self, SLOT("bold()")) + + QFont boldFont = boldAct.font() + boldFont.setBold(True) + boldAct.setFont(boldFont) + + italicAct = QAction(tr("&Italic"), self) + italicAct.setCheckable(True) + italicAct.setShortcut(tr("Ctrl+I")) + italicAct.setStatusTip(tr("Make the text italic")) + connect(italicAct, SIGNAL("triggered()"), self, SLOT("italic()")) + + QFont italicFont = italicAct.font() + italicFont.setItalic(True) + italicAct.setFont(italicFont) + + setLineSpacingAct = QAction(tr("Set &Line Spacing..."), self) + setLineSpacingAct.setStatusTip(tr("Change the gap between the lines of a " + "paragraph")) + connect(setLineSpacingAct, SIGNAL("triggered()"), self, SLOT("setLineSpacing()")) + + setParagraphSpacingAct = QAction(tr("Set &Paragraph Spacing..."), self) + setLineSpacingAct.setStatusTip(tr("Change the gap between paragraphs")) + connect(setParagraphSpacingAct, SIGNAL("triggered()"), + self, SLOT("setParagraphSpacing()")) + + aboutAct = QAction(tr("&About"), self) + aboutAct.setStatusTip(tr("Show the application's About box")) + connect(aboutAct, SIGNAL("triggered()"), self, SLOT("about()")) + + aboutQtAct = QAction(tr("About &Qt"), self) + aboutQtAct.setStatusTip(tr("Show the Qt library's About box")) + connect(aboutQtAct, SIGNAL("triggered()"), qApp, SLOT("aboutQt()")) + connect(aboutQtAct, SIGNAL("triggered()"), self, SLOT("aboutQt()")) + + leftAlignAct = QAction(tr("&Left Align"), self) + leftAlignAct.setCheckable(True) + leftAlignAct.setShortcut(tr("Ctrl+L")) + leftAlignAct.setStatusTip(tr("Left align the selected text")) + connect(leftAlignAct, SIGNAL("triggered()"), self, SLOT("leftAlign()")) + + rightAlignAct = QAction(tr("&Right Align"), self) + rightAlignAct.setCheckable(True) + rightAlignAct.setShortcut(tr("Ctrl+R")) + rightAlignAct.setStatusTip(tr("Right align the selected text")) + connect(rightAlignAct, SIGNAL("triggered()"), self, SLOT("rightAlign()")) + + justifyAct = QAction(tr("&Justify"), self) + justifyAct.setCheckable(True) + justifyAct.setShortcut(tr("Ctrl+J")) + justifyAct.setStatusTip(tr("Justify the selected text")) + connect(justifyAct, SIGNAL("triggered()"), self, SLOT("justify()")) + + centerAct = QAction(tr("&Center"), self) + centerAct.setCheckable(True) + centerAct.setShortcut(tr("Ctrl+E")) + centerAct.setStatusTip(tr("Center the selected text")) + connect(centerAct, SIGNAL("triggered()"), self, SLOT("center()")) + +//! [6] //! [7] + alignmentGroup = QActionGroup(self) + alignmentGroup.addAction(leftAlignAct) + alignmentGroup.addAction(rightAlignAct) + alignmentGroup.addAction(justifyAct) + alignmentGroup.addAction(centerAct) + leftAlignAct.setChecked(True) +//! [6] + +//! [7] + +//! [8] +def createMenus(self): + +//! [9] //! [10] + fileMenu = menuBar().addMenu(tr("&File")) + fileMenu.addAction(Act) +//! [9] + fileMenu.addAction(openAct) +//! [10] + fileMenu.addAction(saveAct) + fileMenu.addAction(printAct) +//! [11] + fileMenu.addSeparator() +//! [11] + fileMenu.addAction(exitAct) + + editMenu = menuBar().addMenu(tr("&Edit")) + editMenu.addAction(undoAct) + editMenu.addAction(redoAct) + editMenu.addSeparator() + editMenu.addAction(cutAct) + editMenu.addAction(copyAct) + editMenu.addAction(pasteAct) + editMenu.addSeparator() + + helpMenu = menuBar().addMenu(tr("&Help")) + helpMenu.addAction(aboutAct) + helpMenu.addAction(aboutQtAct) +//! [8] + +//! [12] + formatMenu = editMenu.addMenu(tr("&Format")) + formatMenu.addAction(boldAct) + formatMenu.addAction(italicAct) + formatMenu.addSeparator()->setText(tr("Alignment")) + formatMenu.addAction(leftAlignAct) + formatMenu.addAction(rightAlignAct) + formatMenu.addAction(justifyAct) + formatMenu.addAction(centerAct) + formatMenu.addSeparator() + formatMenu.addAction(setLineSpacingAct) + formatMenu.addAction(setParagraphSpacingAct) +//! [12] diff --git a/sources/pyside2/doc/codesnippets/examples/mainwindows/sdi/mainwindow.cpp b/sources/pyside2/doc/codesnippets/examples/mainwindows/sdi/mainwindow.cpp new file mode 100644 index 0000000..de169b2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/mainwindows/sdi/mainwindow.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [implicit tr context] +def createMenus(self): + fileMenu = menuBar().addMenu("&File") +//! [implicit tr context] + +//! [0] + fileToolBar = addToolBar("File") + fileToolBar.addAction(newAct) + fileToolBar.addAction(openAct) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/examples/quick/plugins/plugins.qml b/sources/pyside2/doc/codesnippets/examples/quick/plugins/plugins.qml new file mode 100644 index 0000000..f1b5c23 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/quick/plugins/plugins.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +renderer = QSvgRenderer(QLatin1String("SvgCardDeck.svg")) +black = QGraphicsSvgItem() +red = QGraphicsSvgItem() + +black.setSharedRenderer(renderer) +black.setElementId(QLatin1String("black_joker")) + +red.setSharedRenderer(renderer) +red.setElementId(QLatin1String("red_joker")) +//! [0] diff --git a/sources/pyside2/doc/codesnippets/examples/relationaltablemodel/relationaltablemodel.cpp b/sources/pyside2/doc/codesnippets/examples/relationaltablemodel/relationaltablemodel.cpp new file mode 100644 index 0000000..48803f0 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/relationaltablemodel/relationaltablemodel.cpp @@ -0,0 +1,120 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +from PySide2.QtGui import * +from PySide2.QtSql import * + +def initializeModel(model): +//! [0] + model.setTable("employee") +//! [0] + + model.setEditStrategy(QSqlTableModel.OnManualSubmit) +//! [1] + model.setRelation(2, QSqlRelation("city", "id", "name")) +//! [1] //! [2] + model.setRelation(3, QSqlRelation("country", "id", "name")) +//! [2] + +//! [3] + model.setHeaderData(0, Qt.Horizontal, QObject::tr("ID")) + model.setHeaderData(1, Qt.Horizontal, QObject::tr("Name")) + model.setHeaderData(2, Qt.Horizontal, QObject::tr("City")) + model.setHeaderData(3, Qt.Horizontal, QObject::tr("Country")) +//! [3] + + model.select() + + +def createView(title, model): +//! [4] + view = QTableView() + view.setModel(model) + view.setItemDelegate(QSqlRelationalDelegate(view)) +//! [4] + view.setWindowTitle(title) + return view + + +def createRelationalTables(): + query = QSqlQuery() + query.exec_("create table employee(id int primary key, name varchar(20), city int, country int)") + query.exec_("insert into employee values(1, 'Espen', 5000, 47)") + query.exec_("insert into employee values(2, 'Harald', 80000, 49)") + query.exec_("insert into employee values(3, 'Sam', 100, 1)") + + query.exec_("create table city(id int, name varchar(20))") + query.exec_("insert into city values(100, 'San Jose')") + query.exec_("insert into city values(5000, 'Oslo')") + query.exec_("insert into city values(80000, 'Munich')") + + query.exec_("create table country(id int, name varchar(20))") + query.exec_("insert into country values(1, 'USA')") + query.exec_("insert into country values(47, 'Norway')") + query.exec_("insert into country values(49, 'Germany')") + + +def main(): + + app = QApplication([]) + if !createConnection(): + return 1 + + createRelationalTables() + + model = QSqlRelationalTableModel() + + initializeModel(model) + + view = createView(QObject.tr("Relational Table Model"), model) + view.show() + + return app.exec_() + diff --git a/sources/pyside2/doc/codesnippets/examples/richtext/textobject/svgtextobject.h b/sources/pyside2/doc/codesnippets/examples/richtext/textobject/svgtextobject.h new file mode 100644 index 0000000..d0b9abf --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/richtext/textobject/svgtextobject.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SVGTEXTOBJECT_H +#define SVGTEXTOBJECT_H + +#include <QTextObjectInterface> + +QT_BEGIN_NAMESPACE +class QTextDocument; +class QTextFormat; +class QPainter; +class QRectF; +class QSizeF; +QT_END_NAMESPACE + +//![0] //![1] +class SvgTextObject(QObject, QTextObjectInterface): + def __init__(self,...): + super(SvgTextObject, self).__init__(...) + ... +//![1] + +public: + QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, + const QTextFormat &format); + void drawObject(QPainter *painter, const QRectF &rect, QTextDocument *doc, + int posInDocument, const QTextFormat &format); +}; +//![0] + +#endif diff --git a/sources/pyside2/doc/codesnippets/examples/sql/querymodel/editablesqlmodel.cpp b/sources/pyside2/doc/codesnippets/examples/sql/querymodel/editablesqlmodel.cpp new file mode 100644 index 0000000..844ee77 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/sql/querymodel/editablesqlmodel.cpp @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtSql> + +#include "editablesqlmodel.h" + +EditableSqlModel::EditableSqlModel(QObject *parent) + : QSqlQueryModel(parent) +{ +} + +//! [0] +def flags(self, index): + flags = QSqlQueryModel.flags(index) + if index.column() == 1 or index.column() == 2: + flags |= Qt.ItemIsEditable + return flags +//! [0] + +//! [1] +def setData(self, index, value, role): + if index.column() < 1 or index.column() > 2: + return False + + primaryKeyIndex = QSqlQueryModel.index(index.row(), 0) + id = self.data(primaryKeyIndex).toInt() + + self.clear() + + ok = False + if index.column() == 1: + ok = self.setFirstName(id, value) + else: + ok = self.setLastName(id, value) + self.refresh() + return ok +} +//! [1] + +void EditableSqlModel::refresh() +{ + setQuery("select * from person"); + setHeaderData(0, Qt::Horizontal, QObject::tr("ID")); + setHeaderData(1, Qt::Horizontal, QObject::tr("First name")); + setHeaderData(2, Qt::Horizontal, QObject::tr("Last name")); +} + +//! [2] +def setFirstName(self, personId, firstName): + query = QSqlQuery() + query.prepare("update person set firstname = ? where id = ?") + query.addBindValue(firstName) + query.addBindValue(personId) + return query.exec() +//! [2] + +bool EditableSqlModel::setLastName(int personId, const QString &lastName) +{ + QSqlQuery query; + query.prepare("update person set lastname = ? where id = ?"); + query.addBindValue(lastName); + query.addBindValue(personId); + return query.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/examples/svggenerator/window.cpp b/sources/pyside2/doc/codesnippets/examples/svggenerator/window.cpp new file mode 100644 index 0000000..60c4159 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/svggenerator/window.cpp @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QColorDialog> +#include <QFileDialog> +#include <QPainter> +#include <QSvgGenerator> +#include "window.h" +#include "displaywidget.h" + +Window::Window(QWidget *parent) + : QWidget(parent) +{ + setupUi(this); +} + +void Window::updateBackground(int background) +{ + displayWidget->setBackground(DisplayWidget::Background(background)); +} + +void Window::updateColor() +{ + QColor color = QColorDialog::getColor(displayWidget->color()); + if (color.isValid()) + displayWidget->setColor(color); +} + +void Window::updateShape(int shape) +{ + displayWidget->setShape(DisplayWidget::Shape(shape)); +} + +//! [save SVG] +def saveSvg(self): + newPath = QFileDialog.getSaveFileName(self, QObject.tr("Save SVG"), path, QObject.tr("SVG files (*.svg)")) + + if newPath.isEmpty(): + return + + path = newPath + +//![configure SVG generator] + generator = QSvgGenerator() + generator.setFileName(path) + generator.setSize(QSize(200, 200)) + generator.setViewBox(QRect(0, 0, 200, 200)) + generator.setTitle(QObject.tr("SVG Generator Example Drawing")) + generator.setDescription(QObject.tr("An SVG drawing created by the SVG Generator Example provided with Qt.")) +//![configure SVG generator] +//![begin painting] + painter = QPainter() + painter.begin(generator) +//![begin painting] + displayWidget->paint(painter) +//![end painting] + painter.end() +//![end painting] + +//! [save SVG] diff --git a/sources/pyside2/doc/codesnippets/examples/uitools/textfinder/textfinder.cpp b/sources/pyside2/doc/codesnippets/examples/uitools/textfinder/textfinder.cpp new file mode 100644 index 0000000..e493945 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/uitools/textfinder/textfinder.cpp @@ -0,0 +1,141 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtUiTools> +#include <QtWidgets> +#include "textfinder.h" + +//! [0] +def __init__(self, parent = None): + QWidget.__init__(self. parent) + formWidget = self.loadUiFile() + +//! [1] + self.ui_findButton = qFindChild(QPushButton, self, "findButton") + self.ui_textEdit = qFindChild(QTextEdit, self, "textEdit") + self.ui_lineEdit = qFindChild(QLineEdit, self, "lineEdit") +//! [0] //! [1] + +//! [2] + QMetaObject.connectSlotsByName(self) +//! [2] + +//! [3a] + self.loadTextFile() +//! [3a] + +//! [3b] + layout = QVBoxLayout() + layout.addWidget(formWidget) + self.setLayout(layout) +//! [3b] + +//! [3c] + self.setWindowTitle("Text Finder") + self.isFirstTime = True +//! [3c] + +//! [4] +def loadUiFile(self): + loader = QUiLoader() + return loader.load(":/forms/textfinder.ui", self) +//! [4] + +//! [5] +def loadTextFile(self): + inputFile = QFile(":/forms/input.txt") + inputFile.open(QIODevice.ReadOnly) + in = QTextStream(inputFile) + line = in.readAll() + inputFile.close() + + self.ui_textEdit.append(line) + self.ui_textEdit.setUndoRedoEnabled(False) + self.ui_textEdit.setUndoRedoEnabled(True) +//! [5] + +//! [6] //! [7] +@Slot() +def on_findButton_clicked(self): + searchString = self.ui_lineEdit.text() + document = self.ui_textEdit.document() + + found = False + + if not self.isFirstTime: + document.undo() + + if not searchString: + QMessageBox.information(self, "Empty Search Field", + "The search field is empty. Please enter a word and click Find.") + else: + highlightCursor = QTextCursor(document) + cursor = QTextCursor(document) + cursor.beginEditBlock() +//! [6] + plainFormat = QTextCharFormat(highlightCursor.charFormat()) + colorFormat = QTextCharFormat(plainFormat) + colorFormat.setForeground(Qt.red) + + while not highlightCursor.isNull() and not highlightCursor.atEnd(): + highlightCursor = document.find(searchString, highlightCursor, QTextDocument.FindWholeWords) + + if not highlightCursor.isNull(): + found = True + highlightCursor.movePosition(QTextCursor.WordRight, QTextCursor.KeepAnchor) + highlightCursor.mergeCharFormat(colorFormat) +//! [8] + cursor.endEditBlock() +//! [7] //! [9] + self.isFirstTime = False + + if not found: + QMessageBox.information(self, "Word Not Found", "Sorry, the word cannot be found."); +//! [8] //! [9] diff --git a/sources/pyside2/doc/codesnippets/examples/widgets/analogclock/analogclock.cpp b/sources/pyside2/doc/codesnippets/examples/widgets/analogclock/analogclock.cpp new file mode 100644 index 0000000..dcd24b2 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/widgets/analogclock/analogclock.cpp @@ -0,0 +1,155 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtWidgets> + +#include "analogclock.h" + +//! [0] //! [1] +AnalogClock::AnalogClock(QWidget *parent) +//! [0] //! [2] + : QWidget(parent) +//! [2] //! [3] +{ +//! [3] //! [4] + timer = QTimer(self) +//! [4] //! [5] + self.connect(timer, SIGNAL("timeout()"), self.update) +//! [5] //! [6] + timer.start(1000) +//! [6] + + setWindowTitle(tr("Analog Clock")); + resize(200, 200); +//! [7] +} +//! [1] //! [7] + +//! [8] //! [9] +void AnalogClock::paintEvent(QPaintEvent *) +//! [8] //! [10] +{ + static const QPoint hourHand[3] = { + QPoint(7, 8), + QPoint(-7, 8), + QPoint(0, -40) + }; + static const QPoint minuteHand[3] = { + QPoint(7, 8), + QPoint(-7, 8), + QPoint(0, -70) + }; + + QColor hourColor(127, 0, 127); + QColor minuteColor(0, 127, 127, 191); + + int side = qMin(width(), height()); + QTime time = QTime::currentTime(); +//! [10] + +//! [11] + QPainter painter(this); +//! [11] //! [12] + painter.setRenderHint(QPainter::Antialiasing); +//! [12] //! [13] + painter.translate(width() / 2, height() / 2); +//! [13] //! [14] + painter.scale(side / 200.0, side / 200.0); +//! [9] //! [14] + +//! [15] + painter.setPen(Qt::NoPen); +//! [15] //! [16] + painter.setBrush(hourColor); +//! [16] + +//! [17] //! [18] + painter.save(); +//! [17] //! [19] + painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))); + painter.drawConvexPolygon(hourHand, 3); + painter.restore(); +//! [18] //! [19] + +//! [20] + painter.setPen(hourColor); +//! [20] //! [21] + + for (int i = 0; i < 12; ++i) { + painter.drawLine(88, 0, 96, 0); + painter.rotate(30.0); + } +//! [21] + +//! [22] + painter.setPen(Qt::NoPen); +//! [22] //! [23] + painter.setBrush(minuteColor); + +//! [24] + painter.save(); + painter.rotate(6.0 * (time.minute() + time.second() / 60.0)); + painter.drawConvexPolygon(minuteHand, 3); + painter.restore(); +//! [23] //! [24] + +//! [25] + painter.setPen(minuteColor); +//! [25] //! [26] + +//! [27] + for (int j = 0; j < 60; ++j) { + if ((j % 5) != 0) + painter.drawLine(92, 0, 96, 0); + painter.rotate(6.0); + } +//! [27] +} +//! [26] diff --git a/sources/pyside2/doc/codesnippets/examples/widgets/groupbox/window.cpp b/sources/pyside2/doc/codesnippets/examples/widgets/groupbox/window.cpp new file mode 100644 index 0000000..a24e353 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/widgets/groupbox/window.cpp @@ -0,0 +1,187 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +def __init__(self, parent = None): + QWidget.__init__(self, parent) + + grid = QGridLayout() + grid.addWidget(createFirstExclusiveGroup(), 0, 0) + grid.addWidget(createSecondExclusiveGroup(), 1, 0) + grid.addWidget(createNonExclusiveGroup(), 0, 1) + grid.addWidget(createPushButtonGroup(), 1, 1) + setLayout(grid) + + setWindowTitle("Group Boxes") + resize(480, 320) + +//! [0] + +//! [1] +def createFirstExclusiveGroup(self): +//! [2] + groupBox = QGroupBox("Exclusive Radio Buttons") + + radio1 = QRadioButton("&Radio button 1") + radio2 = QRadioButton("R&adio button 2") + radio3 = QRadioButton("Ra&dio button 3") + + radio1.setChecked(True) +//! [1] //! [3] + + vbox = QVBoxLayout() + vbox.addWidget(radio1) + vbox.addWidget(radio2) + vbox.addWidget(radio3) + vbox.addStretch(1) + groupBox.setLayout(vbox) +//! [2] + return groupBox +//! [3] + +//! [4] +def createSecondExclusiveGroup(self): + groupBox = QGroupBox("E&xclusive Radio Buttons") + groupBox.setCheckable(True) + groupBox.setChecked(False) +//! [4] + +//! [5] + radio1 = QRadioButton("Rad&io button 1") + radio2 = QRadioButton("Radi&o button 2") + radio3 = QRadioButton("Radio &button 3") + radio1.setChecked(True) + checkBox = QCheckBox("Ind&ependent checkbox") + checkBox.setChecked(True) +//! [5] + +//! [6] + vbox = QVBoxLayout() + vbox.addWidget(radio1) + vbox.addWidget(radio2) + vbox.addWidget(radio3) + vbox.addWidget(checkBox) + vbox.addStretch(1) + groupBox.setLayout(vbox) + + return groupBox +//! [6] + +//! [7] +def createNonExclusiveGroup(self): + groupBox = QGroupBox("Non-Exclusive Checkboxes") + groupBox.setFlat(True) +//! [7] + +//! [8] + checkBox1 = QCheckBox("&Checkbox 1") + checkBox2 = QCheckBox("C&heckbox 2") + checkBox2.setChecked(True) + tristateBox = QCheckBox("Tri-&state button") + tristateBox.setTristate(True) +//! [8] + tristateBox.setCheckState(Qt.PartiallyChecked) + +//! [9] + vbox = QVBoxLayout() + vbox.addWidget(checkBox1) + vbox.addWidget(checkBox2) + vbox.addWidget(tristateBox) + vbox.addStretch(1) + groupBox.setLayout(vbox) + + return groupBox +//! [9] + +//! [10] +def createPushButtonGroup(self): + groupBox = QGroupBox("&Push Buttons") + groupBox.setCheckable(True) + groupBox.setChecked(True) +//! [10] + +//! [11] + pushButton = QPushButton("&Normal Button") + toggleButton = QPushButton("&Toggle Button") + toggleButton.setCheckable(True) + toggleButton.setChecked(True) + flatButton = QPushButton("&Flat Button") + flatButton.setFlat(True) +//! [11] + +//! [12] + popupButton = QPushButton("Pop&up Button") + menu = QMenu(self) + menu.addAction("&First Item") + menu.addAction("&Second Item") + menu.addAction("&Third Item") + menu.addAction("F&ourth Item") + popupButton.setMenu(menu) +//! [12] + + newAction = menu.addAction("Submenu") + QMenu *subMenu = QMenu("Popup Submenu") + subMenu.addAction("Item 1") + subMenu.addAction("Item 2") + subMenu.addAction("Item 3") + newAction.setMenu(subMenu) + +//! [13] + vbox = QVBoxLayout() + vbox.addWidget(pushButton) + vbox.addWidget(toggleButton) + vbox.addWidget(flatButton) + vbox.addWidget(popupButton) + vbox.addStretch(1) + groupBox.setLayout(vbox) + + return groupBox +} +//! [13] diff --git a/sources/pyside2/doc/codesnippets/examples/widgets/icons/iconsizespinbox.cpp b/sources/pyside2/doc/codesnippets/examples/widgets/icons/iconsizespinbox.cpp new file mode 100644 index 0000000..a289c5c --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/widgets/icons/iconsizespinbox.cpp @@ -0,0 +1,72 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + + +//! [0] +def __init__(self, parent): + QSpinBox.__init__(self, parent) + +//! [0] + +//! [1] +def valueFromText(self, text): + regExp = QRegExp(tr("(\\d+)(\\s*[xx]\\s*\\d+)?")) + + if regExp.exactMatch(text): + return regExp.cap(1).toInt() + else: + return 0 +//! [1] + +//! [2] +def textFromValue(self, value): + return self.tr("%1 x %1").arg(value) + +//! [2] diff --git a/sources/pyside2/doc/codesnippets/examples/widgets/spinboxes/window.cpp b/sources/pyside2/doc/codesnippets/examples/widgets/spinboxes/window.cpp new file mode 100644 index 0000000..7eace10 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/widgets/spinboxes/window.cpp @@ -0,0 +1,249 @@ +############################################################################ +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the examples of Qt for Python. +## +## $QT_BEGIN_LICENSE:BSD$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## BSD License Usage +## Alternatively, you may use this file under the terms of the BSD license +## as follows: +## +## "Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## * Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in +## the documentation and/or other materials provided with the +## distribution. +## * Neither the name of The Qt Company Ltd nor the names of its +## contributors may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +## +## $QT_END_LICENSE$ +## +############################################################################ + +from PySide2.QtGui import * + +//! [0] +def __init__(self): + createSpinBoxes() + createDateTimeEdits() + createDoubleSpinBoxes() + + layout = QHBoxLayout() + layout.addWidget(spinBoxesGroup) + layout.addWidget(editsGroup) + layout.addWidget(doubleSpinBoxesGroup) + setLayout(layout) + + setWindowTitle(tr("Spin Boxes")) +//! [0] + +//! [1] +def createSpinBoxes(self): + spinBoxesGroup = QGroupBox(tr("Spinboxes")) + + integerLabel = QLabel(tr("Enter a value between " + "%1 and %2:").arg(-20).arg(20)) + integerSpinBox = QSpinBox() + integerSpinBox.setRange(-20, 20) + integerSpinBox.setSingleStep(1) + integerSpinBox.setValue(0) +//! [1] + +//! [2] + zoomLabel = QLabel(tr("Enter a zoom value between " + "%1 and %2:").arg(0).arg(1000)) +//! [3] + zoomSpinBox = QSpinBox() + zoomSpinBox.setRange(0, 1000) + zoomSpinBox.setSingleStep(10) + zoomSpinBox.setSuffix("%") + zoomSpinBox.setSpecialValueText(tr("Automatic")) + zoomSpinBox.setValue(100) +//! [2] //! [3] + +//! [4] + priceLabel = QLabel(tr("Enter a price between " + "%1 and %2:").arg(0).arg(999)) + priceSpinBox = QSpinBox() + priceSpinBox.setRange(0, 999) + priceSpinBox.setSingleStep(1) + priceSpinBox.setPrefix("$") + priceSpinBox.setValue(99) +//! [4] //! [5] + + spinBoxLayout = QVBoxLayout() + spinBoxLayout.addWidget(integerLabel) + spinBoxLayout.addWidget(integerSpinBox) + spinBoxLayout.addWidget(zoomLabel) + spinBoxLayout.addWidget(zoomSpinBox) + spinBoxLayout.addWidget(priceLabel) + spinBoxLayout.addWidget(priceSpinBox) + spinBoxesGroup.setLayout(spinBoxLayout) + +//! [5] + +//! [6] +def createDateTimeEdits(self): + editsGroup = QGroupBox(tr("Date and time spin boxes")) + + dateLabel = QLabel() + dateEdit = QDateEdit(QDate.currentDate()) + dateEdit.setDateRange(QDate(2005, 1, 1), QDate(2010, 12, 31)) + dateLabel.setText(tr("Appointment date (between %0 and %1):") + .arg(dateEdit.minimumDate().toString(Qt.ISODate)) + .arg(dateEdit.maximumDate().toString(Qt.ISODate))) +//! [6] + +//! [7] + timeLabel = QLabel() + timeEdit = QTimeEdit(QTime.currentTime()) + timeEdit.setTimeRange(QTime(9, 0, 0, 0), QTime(16, 30, 0, 0)) + timeLabel.setText(tr("Appointment time (between %0 and %1):") + .arg(timeEdit.minimumTime().toString(Qt.ISODate)) + .arg(timeEdit.maximumTime().toString(Qt.ISODate))) +//! [7] + +//! [8] + meetingLabel = QLabel() + meetingEdit = QDateTimeEdit(QDateTime.currentDateTime()) +//! [8] + +//! [9] + formatLabel = QLabel(tr("Format string for the meeting date " + "and time:")) + formatComboBox = QComboBox() + formatComboBox.addItem("yyyy-MM-dd hh:mm:ss (zzz 'ms')") + formatComboBox.addItem("hh:mm:ss MM/dd/yyyy") + formatComboBox.addItem("hh:mm:ss dd/MM/yyyy") + formatComboBox.addItem("hh:mm:ss") + formatComboBox.addItem("hh:mm ap") +//! [9] //! [10] + + connect(formatComboBox, SIGNAL("activated(const QString &)"), + self, SLOT("setFormatString(const QString &)")) +//! [10] + + setFormatString(formatComboBox.currentText()) + +//! [11] + editsLayout = QVBoxLayout() + editsLayout.addWidget(dateLabel) + editsLayout.addWidget(dateEdit) + editsLayout.addWidget(timeLabel) + editsLayout.addWidget(timeEdit) + editsLayout.addWidget(meetingLabel) + editsLayout.addWidget(meetingEdit) + editsLayout.addWidget(formatLabel) + editsLayout.addWidget(formatComboBox) + editsGroup.setLayout(editsLayout) +//! [11] + +//! [12] +def setFormatString(self, formatString): + meetingEdit.setDisplayFormat(formatString) +//! [12] //! [13] + if meetingEdit.displayedSections() & QDateTimeEdit.DateSections_Mask: + meetingEdit.setDateRange(QDate(2004, 11, 1), QDate(2005, 11, 30)) + meetingLabel.setText(tr("Meeting date (between %0 and %1):") + .arg(meetingEdit.minimumDate().toString(Qt.ISODate)) + .arg(meetingEdit.maximumDate().toString(Qt.ISODate))) + else: + meetingEdit.setTimeRange(QTime(0, 7, 20, 0), QTime(21, 0, 0, 0)) + meetingLabel.setText(tr("Meeting time (between %0 and %1):") + .arg(meetingEdit.minimumTime().toString(Qt.ISODate)) + .arg(meetingEdit.maximumTime().toString(Qt.ISODate))) +//! [13] + +//! [14] +def createDoubleSpinBoxes(): + doubleSpinBoxesGroup = QGroupBox(tr("Double precision spinboxes")) + + precisionLabel = QLabel(tr("Number of decimal places " + "to show:")) + precisionSpinBox = QSpinBox() + precisionSpinBox.setRange(0, 100) + precisionSpinBox.setValue(2) +//! [14] + +//! [15] + doubleLabel = QLabel(tr("Enter a value between " + "%1 and %2:").arg(-20).arg(20)) + doubleSpinBox = QDoubleSpinBox () + doubleSpinBox.setRange(-20.0, 20.0) + doubleSpinBox.setSingleStep(1.0) + doubleSpinBox.setValue(0.0) +//! [15] + +//! [16] + scaleLabel = QLabel(tr("Enter a scale factor between " + "%1 and %2:").arg(0).arg(1000.0)) + scaleSpinBox = QDoubleSpinBox() + scaleSpinBox.setRange(0.0, 1000.0) + scaleSpinBox.setSingleStep(10.0) + scaleSpinBox.setSuffix("%") + scaleSpinBox.setSpecialValueText(tr("No scaling")) + scaleSpinBox.setValue(100.0) +//! [16] + +//! [17] + priceLabel = QLabel(tr("Enter a price between " + "%1 and %2:").arg(0).arg(1000)) + priceSpinBox = QDoubleSpinBox() + priceSpinBox.setRange(0.0, 1000.0) + priceSpinBox.setSingleStep(1.0) + priceSpinBox.setPrefix("$") + priceSpinBox.setValue(99.99) + + connect(precisionSpinBox, SIGNAL("valueChanged(int)"), +//! [17] + self, SLOT("changePrecision(int))") + +//! [18] + spinBoxLayout = QVBoxLayout() + spinBoxLayout.addWidget(precisionLabel) + spinBoxLayout.addWidget(precisionSpinBox) + spinBoxLayout.addWidget(doubleLabel) + spinBoxLayout.addWidget(doubleSpinBox) + spinBoxLayout.addWidget(scaleLabel) + spinBoxLayout.addWidget(scaleSpinBox) + spinBoxLayout.addWidget(priceLabel) + spinBoxLayout.addWidget(priceSpinBox) + doubleSpinBoxesGroup.setLayout(spinBoxLayout) +} +//! [18] + +//! [19] +def changePrecision(self, int) + doubleSpinBox.setDecimals(decimals) + scaleSpinBox.setDecimals(decimals) + priceSpinBox.setDecimals(decimals) + +//! [19] diff --git a/sources/pyside2/doc/codesnippets/examples/xml/streambookmarks/xbelreader.cpp b/sources/pyside2/doc/codesnippets/examples/xml/streambookmarks/xbelreader.cpp new file mode 100644 index 0000000..c82f027 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/xml/streambookmarks/xbelreader.cpp @@ -0,0 +1,210 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtWidgets> + +#include "xbelreader.h" + +//! [0] +XbelReader::XbelReader(QTreeWidget *treeWidget) + : treeWidget(treeWidget) +{ + QStyle *style = treeWidget->style(); + + folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirClosedIcon), + QIcon::Normal, QIcon::Off); + folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), + QIcon::Normal, QIcon::On); + bookmarkIcon.addPixmap(style->standardPixmap(QStyle::SP_FileIcon)); +} +//! [0] + +//! [1] +def read(self, device): + self.setDevice(device) + + while not atEnd(): + readNext() + + if isStartElement(): + if self.name() == "xbel" and self.attributes().value("version") == "1.0": + self.readXBEL() + else: + self.raiseError(QObject.tr("The file is not an XBEL version 1.0 file.")); + + return not self.error(); +//! [1] + +//! [2] +void XbelReader::readUnknownElement() +{ + Q_ASSERT(isStartElement()); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) + readUnknownElement(); + } +} +//! [2] + +//! [3] +void XbelReader::readXBEL() +{ + Q_ASSERT(isStartElement() && name() == "xbel"); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + if (name() == "folder") + readFolder(0); + else if (name() == "bookmark") + readBookmark(0); + else if (name() == "separator") + readSeparator(0); + else + readUnknownElement(); + } + } +} +//! [3] + +//! [4] +void XbelReader::readTitle(QTreeWidgetItem *item) +{ + Q_ASSERT(isStartElement() && name() == "title"); + + QString title = readElementText(); + item->setText(0, title); +} +//! [4] + +//! [5] +void XbelReader::readSeparator(QTreeWidgetItem *item) +{ + QTreeWidgetItem *separator = createChildItem(item); + separator->setFlags(item->flags() & ~Qt::ItemIsSelectable); + separator->setText(0, QString(30, 0xB7)); + readElementText(); +} +//! [5] + +void XbelReader::readFolder(QTreeWidgetItem *item) +{ + Q_ASSERT(isStartElement() && name() == "folder"); + + QTreeWidgetItem *folder = createChildItem(item); + bool folded = (attributes().value("folded") != "no"); + treeWidget->setItemExpanded(folder, !folded); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + if (name() == "title") + readTitle(folder); + else if (name() == "folder") + readFolder(folder); + else if (name() == "bookmark") + readBookmark(folder); + else if (name() == "separator") + readSeparator(folder); + else + readUnknownElement(); + } + } +} + +void XbelReader::readBookmark(QTreeWidgetItem *item) +{ + Q_ASSERT(isStartElement() && name() == "bookmark"); + + QTreeWidgetItem *bookmark = createChildItem(item); + bookmark->setFlags(bookmark->flags() | Qt::ItemIsEditable); + bookmark->setIcon(0, bookmarkIcon); + bookmark->setText(0, QObject::tr("Unknown title")); + bookmark->setText(1, attributes().value("href").toString()); + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + if (name() == "title") + readTitle(bookmark); + else + readUnknownElement(); + } + } +} + +QTreeWidgetItem *XbelReader::createChildItem(QTreeWidgetItem *item) +{ + QTreeWidgetItem *childItem; + if (item) { + childItem = new QTreeWidgetItem(item); + } else { + childItem = new QTreeWidgetItem(treeWidget); + } + childItem->setData(0, Qt::UserRole, name().toString()); + return childItem; +} diff --git a/sources/pyside2/doc/codesnippets/examples/xml/streambookmarks/xbelreader.h b/sources/pyside2/doc/codesnippets/examples/xml/streambookmarks/xbelreader.h new file mode 100644 index 0000000..cb72073 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/xml/streambookmarks/xbelreader.h @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef XBELREADER_H +#define XBELREADER_H + +#include <QIcon> +#include <QXmlStreamReader> + +QT_BEGIN_NAMESPACE +class QTreeWidget; +class QTreeWidgetItem; +QT_END_NAMESPACE + +//! [0] +class XbelReader (QXmlStreamReader): +//! [1] + def __init__(self, treeWidget): + ... +//! [1] + + def read(self, device); + ... + +//! [2] + def readUnknownElement(self): + ... + def readXBEL(self): + ... + def readTitle(self, item): + ... + def readSeparator(self, item): + ... + def readFolder(self, item): + ... + def readBookmark(self, item): + ... + def createChildItem(self, item): + ... +//! [2] +//! [0] + +#endif diff --git a/sources/pyside2/doc/codesnippets/examples/xml/streambookmarks/xbelwriter.cpp b/sources/pyside2/doc/codesnippets/examples/xml/streambookmarks/xbelwriter.cpp new file mode 100644 index 0000000..372bc53 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/examples/xml/streambookmarks/xbelwriter.cpp @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtWidgets> + +#include "xbelwriter.h" + +//! [0] +XbelWriter::XbelWriter(QTreeWidget *treeWidget) + : treeWidget(treeWidget) +{ + setAutoFormatting(true); +} +//! [0] + +//! [1] +def writeFile(self, device): + self.setDevice(device) + + self.writeStartDocument() + self.writeDTD("<!DOCTYPE xbel>") + self.writeStartElement("xbel") + self.writeAttribute("version", "1.0") + for i in range(0, self.treeWidget.topLevelItemCount()): + self.writeItem(self.treeWidget.topLevelItem(i)) + + self.writeEndDocument() + return True; +//! [1] + +//! [2] +void XbelWriter::writeItem(QTreeWidgetItem *item) +{ + QString tagName = item->data(0, Qt::UserRole).toString(); + if (tagName == "folder") { + bool folded = !treeWidget->isItemExpanded(item); + writeStartElement(tagName); + writeAttribute("folded", folded ? "yes" : "no"); + writeTextElement("title", item->text(0)); + for (int i = 0; i < item->childCount(); ++i) + writeItem(item->child(i)); + writeEndElement(); + } else if (tagName == "bookmark") { + writeStartElement(tagName); + if (!item->text(1).isEmpty()) + writeAttribute("href", item->text(1)); + writeTextElement("title", item->text(0)); + writeEndElement(); + } else if (tagName == "separator") { + writeEmptyElement(tagName); + } +} +//! [2] diff --git a/sources/pyside2/doc/codesnippets/snippets/customstyle/main.cpp b/sources/pyside2/doc/codesnippets/snippets/customstyle/main.cpp new file mode 100644 index 0000000..877c63a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/snippets/customstyle/main.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [using a custom style] +import sys +from PySide2.QtGui import * + +QApplication.setStyle(CustomStyle()) +app = QApplication(sys.argv) +spinBox = QSpinBox() +spinBox.show() +sys.exit(app.exec_()) + +//! [using a custom style] diff --git a/sources/pyside2/doc/codesnippets/snippets/textdocument-resources/main.cpp b/sources/pyside2/doc/codesnippets/snippets/textdocument-resources/main.cpp new file mode 100644 index 0000000..7a2f9b8 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/snippets/textdocument-resources/main.cpp @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtWidgets> + +QString tr(const char *text) +{ + return QApplication::translate(text, text); +} + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QTextEdit *editor = new QTextEdit; + + QTextDocument *document = new QTextDocument(editor); + QTextCursor cursor(document); + + QImage image(64, 64, QImage::Format_RGB32); + image.fill(qRgb(255, 160, 128)); + +//! [Adding a resource] + document.addResource(QTextDocument.ImageResource, + QUrl("mydata://image.png"), image) +//! [Adding a resource] + +//! [Inserting an image with a cursor] + imageFormat = QTextImageFormat() + imageFormat.setName("mydata://image.png") + cursor.insertImage(imageFormat) +//! [Inserting an image with a cursor] + + cursor.insertBlock(); + cursor.insertText("Code less. Create more."); + + editor->setDocument(document); + editor->setWindowTitle(tr("Text Document Images")); + editor->resize(320, 480); + editor->show(); + +//! [Inserting an image using HTML] + editor.append("<img src=\"mydata://image.png\" />") +//! [Inserting an image using HTML] + + return app.exec(); +} diff --git a/sources/pyside2/doc/codesnippets/webkitsnippets/qtwebkit_qwebinspector_snippet.cpp b/sources/pyside2/doc/codesnippets/webkitsnippets/qtwebkit_qwebinspector_snippet.cpp new file mode 100644 index 0000000..79dc151 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/webkitsnippets/qtwebkit_qwebinspector_snippet.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +def wrapInFunction(): +//! [0] + # ... + page = QWebPage() + # ... + + inspector = QWebInspector() + inspector.setPage(page) +//! [0] + diff --git a/sources/pyside2/doc/codesnippets/webkitsnippets/qtwebkit_qwebview_snippet.cpp b/sources/pyside2/doc/codesnippets/webkitsnippets/qtwebkit_qwebview_snippet.cpp new file mode 100644 index 0000000..268f434 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/webkitsnippets/qtwebkit_qwebview_snippet.cpp @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +def wrapInFunction(): +//! [0] + view.page().history() +//! [0] + + +//! [1] + view.page().settings() +//! [1] + + +//! [2] + view.triggerAction(QWebPage.Copy) +//! [2] + + +//! [3] + view.page().triggerPageAction(QWebPage.Stop) +//! [3] + + +//! [4] + view.page().triggerPageAction(QWebPage.GoBack) +//! [4] + + +//! [5] + view.page().triggerPageAction(QWebPage.GoForward) +//! [5] + diff --git a/sources/pyside2/doc/codesnippets/webkitsnippets/simple/main.cpp b/sources/pyside2/doc/codesnippets/webkitsnippets/simple/main.cpp new file mode 100644 index 0000000..1382cd4 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/webkitsnippets/simple/main.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +from PySide2.QtCore import * +from PySide2.QtGui import * +from PySide2.QtWebKit import * +import sys + +app = QApplication(sys.argv) +parent = None +//! [Using QWebView] +view = QWebView(parent) +view.load(QUrl("http://qt-project.org/")) +view.show() +//! [Using QWebView] +sys.exit(app.exec_()) diff --git a/sources/pyside2/doc/codesnippets/webkitsnippets/webelement/main.cpp b/sources/pyside2/doc/codesnippets/webkitsnippets/webelement/main.cpp new file mode 100644 index 0000000..67e101a --- /dev/null +++ b/sources/pyside2/doc/codesnippets/webkitsnippets/webelement/main.cpp @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +def traverse(): +//! [Traversing with QWebElement] + frame.setHtml("<html><body><p>First Paragraph</p><p>Second Paragraph</p></body></html>") + doc = frame.documentElement() + body = doc.firstChild() + firstParagraph = body.firstChild() + secondParagraph = firstParagraph.nextSibling() +//! [Traversing with QWebElement] + +def findButtonAndClick(): + frame.setHtml("<form name=\"myform\" action=\"submit_form.asp\" method=\"get\">" \ + "<input type=\"text\" name=\"myfield\">" \ + "<input type=\"submit\" value=\"Submit\">" \ + "</form>") + +//! [Calling a DOM element method] + + document = frame.documentElement() + # Assume that the document has the following structure: + # + # <form name="myform" action="submit_form.asp" method="get"> + # <input type="text" name="myfield"> + # <input type="submit" value="Submit"> + # </form> + + button = document.findFirst("input[type=submit]") + button.evaluateJavaScript("click()") + +//! [Calling a DOM element method] + +def autocomplete1(): + document = frame.documentElement() +//! [autocomplete1] + firstTextInput = document.findFirst("input[type=text]") + storedText = firstTextInput.attribute("value") +//! [autocomplete1] + +def autocomplete2(): + document = frame.documentElement() + storedText = "text" + +//! [autocomplete2] + firstTextInput = document.findFirst("input[type=text]") + textInput.setAttribute("value", storedText) +//! [autocomplete2] + +def findAll(): +//! [FindAll] + document = frame.documentElement() + # Assume the document has the following structure: + # + # <p class=intro> + # <span>Intro</span> + # <span>Snippets</span> + # </p> + # <p> + # <span>Content</span> + # <span>Here</span> + # </p> + +//! [FindAll intro] + allSpans = document.findAll("span") + introSpans = document.findAll("p.intro span") +//! [FindAll intro] //! [FindAll] diff --git a/sources/pyside2/doc/codesnippets/webkitsnippets/webpage/main.cpp b/sources/pyside2/doc/codesnippets/webkitsnippets/webpage/main.cpp new file mode 100644 index 0000000..b64a4f3 --- /dev/null +++ b/sources/pyside2/doc/codesnippets/webkitsnippets/webpage/main.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class Thumbnailer (QObject): + def __init__(self, url): +//! [1] + QObject.__init__(self) + self.page = QWebPage() + self.page.mainFrame().load(url) + page.loadFinished[bool].connect(self.render) +//! [1] + + finished = Signal() + +//! [2] + def render(self): + self.page.setViewportSize(self.page.mainFrame().contentsSize()) + image = QImage(self.page.viewportSize(), QImage.Format_ARGB32) + painter = QPainter(image) + + self.page.mainFrame().render(painter) + painter.end() + + thumbnail = image.scaled(400, 400) + thumbnail.save("thumbnail.png") + + self.finished.emit() +//! [2] +//! [0] + +app = QApplication(sys.argv) + +thumbnail = Thumbnailer(QUrl("http://qt-project.org")) +thumbnail.finished.connect(app.quit) +sys.exit(app.exec_()) diff --git a/sources/pyside2/doc/conf.py.in b/sources/pyside2/doc/conf.py.in new file mode 100644 index 0000000..2eb4e6b --- /dev/null +++ b/sources/pyside2/doc/conf.py.in @@ -0,0 +1,172 @@ +# -*- coding: utf-8 -*- +# +# PySide documentation build configuration file, created by +# sphinx-quickstart on Wed Apr 22 15:04:20 2009. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +sys.path.append('@CMAKE_CURRENT_SOURCE_DIR@') +sys.path.append('@pyside_BINARY_DIR@') +sys.path.append('@CMAKE_CURRENT_SOURCE_DIR@/../../../examples/webenginewidgets/tabbedbrowser') + +# -- General configuration ----------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +#extensions = ['sphinx.ext.todo', 'sphinx.ext.graphviz', 'inheritance_diagram', 'pysideinclude'] +extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.ifconfig', +'sphinx.ext.coverage', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', +'sphinx.ext.graphviz', 'inheritance_diagram', 'pysideinclude', +'sphinx.ext.viewcode'] + +rst_epilog = """ +.. |project| replace:: Qt for Python +.. |pymodname| replace:: PySide2 +""" + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +source_encoding = 'utf-8' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'PySide' +copyright = u'© 2018 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the <a href="http://www.gnu.org/license/fdl.html">GNU Free Documentation License version 1.3</a> as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.' +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '@BINDING_API_VERSION@' +# The full version, including alpha/beta/rc tags. +release = '@BINDING_API_VERSION_FULL@' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of documents that shouldn't be included in the build. +#unused_docs = [] + +# List of directories, relative to source directory, that shouldn't be searched +# for source files. +exclude_trees = ['_build', 'extras'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. Major themes that come with +# Sphinx are currently 'default' and 'sphinxdoc'. +html_theme = 'pysidedocs' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = { +#} + +# Add any paths that contain custom themes here, relative to this directory. +html_theme_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_themes'] + +# The name for this set of Sphinx documents. If None, it defaults to +# "<project> v<release> documentation". +html_title = u'Qt for Python (Technology Preview)' + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +#html_static_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = { '' : ''} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = { 'index' : 'index.html'} + +# If false, no module index is generated. +#html_use_modindex = True + +# If false, no index is generated. +html_use_index = False + +# If true, the index is split into individual pages for each letter. +html_split_index = False + +# If true, links to the reST sources are added to the pages. +html_show_sourcelink = False + +# If true, an OpenSearch description file will be output, and all pages will +# contain a <link> tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = '' + +# Output file base name for HTML help builder. +#htmlhelp_basename = 'PySideDoc' + +# Link to the shiboken2 sphinx project to enable linking +# between the two projects. +intersphinx_mapping = {'shiboken2': ('../../../shiboken2/doc/html','../../../shiboken2/doc/html/objects.inv')} diff --git a/sources/pyside2/doc/contents.rst b/sources/pyside2/doc/contents.rst new file mode 100644 index 0000000..d313058 --- /dev/null +++ b/sources/pyside2/doc/contents.rst @@ -0,0 +1,18 @@ +|project| Documentation +*************************** + +.. toctree:: + :maxdepth: 2 + + gettingstarted.rst + modules.rst + tutorials/index.rst + pysideapi2.rst + pysideversion.rst + licenses.rst + +Module Index +============ + +* :ref:`modindex` + diff --git a/sources/pyside2/doc/extras/PySide.QtCore.ClassInfo.rst b/sources/pyside2/doc/extras/PySide.QtCore.ClassInfo.rst new file mode 100644 index 0000000..d2267be --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtCore.ClassInfo.rst @@ -0,0 +1,23 @@ +.. module:: PySide2.QtCore +.. _ClassInfo: + +ClassInfo +********* + +This class is used to associates extra information to the class, which is available +using QObject.metaObject(). Qt and PySide doesn't use this information. + +The extra information takes the form of a dictionary with key and value in a literal string. + +.. note:: This Class is a implementation of Q_CLASSINFO macro. + + +Example +------- + +:: + + @ClassInfo(Author='PySide Team', URL='http://www.pyside.org') + class MyObject(QObject): + ... + diff --git a/sources/pyside2/doc/extras/PySide.QtCore.Signal.rst b/sources/pyside2/doc/extras/PySide.QtCore.Signal.rst new file mode 100644 index 0000000..16c6408 --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtCore.Signal.rst @@ -0,0 +1,39 @@ +.. module:: PySide2.QtCore +.. _Signal: + +Signal +****** + +Synopsis +-------- + +Functions +^^^^^^^^^ + ++---------------------------------------------------------------------------------------------+ +|def :meth:`connect<Signal.connect>` (receiver) | ++---------------------------------------------------------------------------------------------+ +|def :meth:`disconnect<Signal.disconnect>` (receiver) | ++---------------------------------------------------------------------------------------------+ +|def :meth:`emit<Signal.disconnect>` (\*args) | ++---------------------------------------------------------------------------------------------+ + +Detailed Description +-------------------- + + The :class:`~.Signal` class provides a way to declare and connect Qt signals in a pythonic way. + + PySide adopt PyQt's new signal and slot syntax as-is. The PySide implementation is functionally compatible with the PyQt 4.5 one, with the exceptions listed bellow. + +.. method:: Signal.connect(receiver[, type=Qt.AutoConnection]) + + Create a connection between this signal and a `receiver`, the `receiver` can be a Python callable, a :class:`Slot` or a :class:`Signal`. + +.. method:: Signal.disconnect(receiver) + + Disconnect this signal from a `receiver`, the `receiver` can be a Python callable, a :class:`Slot` or a :class:`Signal`. + +.. method:: Signal.emit(*args) + + `args` is the arguments to pass to any connected slots, if any. + diff --git a/sources/pyside2/doc/extras/PySide.QtCore.Slot.rst b/sources/pyside2/doc/extras/PySide.QtCore.Slot.rst new file mode 100644 index 0000000..6b93014 --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtCore.Slot.rst @@ -0,0 +1,39 @@ +.. module:: PySide2.QtCore +.. _Slot: + +Slot +**** + +Detailed Description +-------------------- + + PySide adopt PyQt's new signal and slot syntax as-is. The PySide + implementation is functionally compatible with the PyQt 4.5 one, with the + exceptions listed bellow. + + PyQt's new signal and slot style utilizes method and decorator names + specific to their implementation. These will be generalized according to + the table below: + + ======= ====================== ============= + Module PyQt factory function PySide class + ======= ====================== ============= + QtCore pyqtSignal Signal + QtCore pyqtSlot Slot + ======= ====================== ============= + +Q_INVOKABLE +----------- + + PySide doesn't offer something identical to Q_INVOKABLE macro of Qt, the + reason is simple, PySide slots can have return values, so if you need to + create a invokable method that returns some value, declare it as a slot, + e.g.: + + :: + + class Foo(QObject): + + @Slot(result=int, float) + def getFloatReturnInt(self, f): + return int(f) diff --git a/sources/pyside2/doc/extras/PySide.QtCore.rst b/sources/pyside2/doc/extras/PySide.QtCore.rst new file mode 100644 index 0000000..d3277a4 --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtCore.rst @@ -0,0 +1,5 @@ +All other Qt modules rely on this module. To include the definitions of the module's classes, use the following directive: + +:: + + import PySide2.QtCore diff --git a/sources/pyside2/doc/extras/PySide.QtGui.rst b/sources/pyside2/doc/extras/PySide.QtGui.rst new file mode 100644 index 0000000..e16329c --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtGui.rst @@ -0,0 +1,7 @@ +To include the definitions of modules classes, use the following directive: + +:: + + import PySide2.QtGui + +.. seealso:: :mod:`PySide2.QtCore` diff --git a/sources/pyside2/doc/extras/PySide.QtHelp.rst b/sources/pyside2/doc/extras/PySide.QtHelp.rst new file mode 100644 index 0000000..239f4fa --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtHelp.rst @@ -0,0 +1,5 @@ +To include the definitions of the module's classes, use the following directive: + +:: + + import PySide2.QtHelp diff --git a/sources/pyside2/doc/extras/PySide.QtMultimedia.rst b/sources/pyside2/doc/extras/PySide.QtMultimedia.rst new file mode 100644 index 0000000..5088db4 --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtMultimedia.rst @@ -0,0 +1,7 @@ +To include the definitions of the module's classes, use the following directive: + +:: + + import PySide2.QtMultimedia + + diff --git a/sources/pyside2/doc/extras/PySide.QtNetwork.rst b/sources/pyside2/doc/extras/PySide.QtNetwork.rst new file mode 100644 index 0000000..07303b1 --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtNetwork.rst @@ -0,0 +1,5 @@ +To include the definitions of the module's classes, use the following directive: + +:: + + import PySide2.QtNetwork diff --git a/sources/pyside2/doc/extras/PySide.QtOpenGL.rst b/sources/pyside2/doc/extras/PySide.QtOpenGL.rst new file mode 100644 index 0000000..38783d9 --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtOpenGL.rst @@ -0,0 +1,14 @@ +OpenGL is a standard API for rendering 3D graphics. OpenGL only deals with 3D rendering and provides little or no support for GUI programming issues. The user interface for an OpenGL application must be created with another toolkit, such as Motif on the X platform, Microsoft Foundation Classes (MFC) under Windows, or Qt on both platforms. + +.. note:: OpenGL is a trademark of Silicon Graphics, Inc. in the United States and other countries. + +The Qt OpenGL module makes it easy to use OpenGL in Qt applications. It provides an OpenGL widget class that can be used just like any other Qt widget, except that it opens an OpenGL display buffer where you can use the OpenGL API to render the contents. +To include the definitions of the module's classes, use the following directive: + +:: + + import PySide2.QtOpenGL + +The Qt OpenGL module is implemented as a platform-independent wrapper around the platform-dependent GLX (version 1.3 or later), WGL, or AGL C APIs. Although the basic functionality provided is very similar to Mark Kilgard's GLUT library, applications using the Qt OpenGL module can take advantage of the whole Qt API for non-OpenGL-specific GUI functionality. + +The QtOpenGL module is available on Windows, X11 and Mac OS X. Qt for Embedded Linux and OpenGL supports OpenGL ES (OpenGL for Embedded Systems). \ No newline at end of file diff --git a/sources/pyside2/doc/extras/PySide.QtScript.rst b/sources/pyside2/doc/extras/PySide.QtScript.rst new file mode 100644 index 0000000..8ce7681 --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtScript.rst @@ -0,0 +1,21 @@ +The QtScript module only provides core scripting facilities; the QtScriptTools module provides additional Qt Script-related components that application developers may find useful. + +To include the definitions of the module's classes, use the following directive: + +:: + + import PySide2.QtScript + +License Information +------------------- + +Qt Commercial Edition licensees that wish to distribute applications that use the QtScript module need to be aware of their obligations under the GNU Library General Public License (LGPL). + +Developers using the Open Source Edition can choose to redistribute the module under the appropriate version of the GNU LGPL. +QtScript is licensed under the GNU Library General Public License. Individual contributor names and copyright dates can be found inline in the code. + +This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. + +You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. diff --git a/sources/pyside2/doc/extras/PySide.QtScriptTools.rst b/sources/pyside2/doc/extras/PySide.QtScriptTools.rst new file mode 100644 index 0000000..a54ed91 --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtScriptTools.rst @@ -0,0 +1,5 @@ +Applications that use the Qt Script Tools classes need to be configured to be built against the QtScriptTools module. To include the definitions of the module's classes, use the following directive: + +:: + + import PySide2.QtScriptTools diff --git a/sources/pyside2/doc/extras/PySide.QtSql.rst b/sources/pyside2/doc/extras/PySide.QtSql.rst new file mode 100644 index 0000000..fcdd6ba --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtSql.rst @@ -0,0 +1,5 @@ +To include the definitions of the module's classes, use the following directive: + +:: + + import PySide2.QtSql diff --git a/sources/pyside2/doc/extras/PySide.QtSvg.rst b/sources/pyside2/doc/extras/PySide.QtSvg.rst new file mode 100644 index 0000000..7817e53 --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtSvg.rst @@ -0,0 +1,5 @@ +To include the definitions of the module's classes, use the following directive: + +:: + + import PySide2.QtSvg diff --git a/sources/pyside2/doc/extras/PySide.QtTest.rst b/sources/pyside2/doc/extras/PySide.QtTest.rst new file mode 100644 index 0000000..0b89a22 --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtTest.rst @@ -0,0 +1,7 @@ +To include the definitions of the module's classes, use the following directive: + +:: + + import PySide2.QtTest + +.. note:: All macros in the C++ version of QtTest were not binded in PySide, this module is useful only for GUI testing and benchmarking, for ordinary unit testing you should use the ``unittest`` Python module. diff --git a/sources/pyside2/doc/extras/PySide.QtUiTools.rst b/sources/pyside2/doc/extras/PySide.QtUiTools.rst new file mode 100644 index 0000000..5532245 --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtUiTools.rst @@ -0,0 +1,9 @@ +These forms are processed at run-time to produce dynamically-generated user interfaces. In order to generate a form at run-time, a resource file containing a UI file is needed. + +A form loader object, provided by the QUiLoader class, is used to construct the user interface. This user interface can be retrieved from any QIODevice; for example, a QFile object can be used to obtain a form stored in a project's resources. The :meth:`PySide2.QtUiTools.QUiLoader.load` function takes the user interface description contained in the file and constructs the form widget. + +To include the definitions of the module's classes, use the following directive: + +:: + + import PySide..QtUiTools diff --git a/sources/pyside2/doc/extras/PySide.QtWebKit.rst b/sources/pyside2/doc/extras/PySide.QtWebKit.rst new file mode 100644 index 0000000..58f9230 --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtWebKit.rst @@ -0,0 +1,94 @@ +QtWebKit provides a Web browser engine that makes it easy to embed content from the World Wide Web into your Qt application. At the same time Web content can be enhanced with native controls. + +QtWebKit provides facilities for rendering of HyperText Markup Language (HTML), Extensible HyperText Markup Language (XHTML) and Scalable Vector Graphics (SVG) documents, styled using Cascading Style Sheets (CSS) and scripted with JavaScript. + +A bridge between the JavaScript execution environment and the Qt object model makes it possible for custom QObjects to be scripted. Integration with the Qt networking module enables Web pages to be transparently loaded from Web servers, the local file system or even the Qt resource system. + +In addition to providing pure rendering features, HTML documents can be made fully editable to the user through the use of the contenteditable attribute on HTML elements. + +QtWebKit is based on the Open Source WebKit engine. More information about WebKit itself can be found on the _`WebKit Open Source Project <http://webkit.org/>` Web site. + +Including In Your Project +------------------------- + +To include the definitions of the module's classes, use the following directive: + +:: + + import PySide2.QtWebKit + + +.. note:: Web site icons, also known as "FavIcons", are currently not supported on Windows. We plan to address this in a future release. + +Architecture +------------ + +The easiest way to render content is through the QWebView class. As a widget it can be embedded into your forms or a graphics view, and it provides convenience functions for downloading and rendering web sites. + +:: + + view = QWebView(parent) + view.load(QUrl("http://qt.nokia.com/")) + view.show() + +QWebView is used to view Web pages. An instance of QWebView has one QWebPage. QWebPage provides access to the document structure in a page, describing features such as frames, the navigation history, and the undo/redo stack for editable content. + +HTML documents can be nested using frames in a frameset. An individual frame in HTML is represented using the QWebFrame class. This class includes the bridge to the JavaScript window object and can be painted using QPainter. Each QWebPage has one QWebFrame object as its main frame, and the main frame may contain many child frames. + +Individual elements of an HTML document can be accessed via DOM JavaScript interfaces from within a web page. The equivalent of this API in QtWebKit is represented by QWebElement. QWebElement objects are obtained using QWebFrame's findAllElements() and findFirstElement() functions with CSS selector queries. + +Common web browser features, defaults and other settings can be configured through the QWebSettings class. It is possible to provide defaults for all QWebPage instances through the default settings. Individual attributes can be overidden by the page specific settings object. + +Netscape Plugin Support +----------------------- + +.. note:: Netscape plugin support is only available on desktop platforms. + +Since WebKit supports the Netscape Plugin API, Qt applications can display Web pages that embed common plugins on platforms for which those plugins are available. To enable plugin support, the user must have the appropriate binary files for those plugins installed and the ``QWebSettings.PluginsEnabled`` attribute must be enabled for the application. + +The following locations are searched for plugins: + +* Linux/Unix (X11) + * .mozilla/plugins in the user's home directory + * .netscape/plugins in the user's home directory + * System locations, such as + * /usr/lib/browser/plugins + * /usr/local/lib/mozilla/plugins + * /usr/lib/firefox/plugins + * /usr/lib64/browser-plugins + * /usr/lib/browser-plugins + * /usr/lib/mozilla/plugins + * /usr/local/netscape/plugins + * /opt/mozilla/plugins + * /opt/mozilla/lib/plugins + * /opt/netscape/plugins + * /opt/netscape/communicator/plugins + * /usr/lib/netscape/plugins + * /usr/lib/netscape/plugins-libc5 + * /usr/lib/netscape/plugins-libc6 + * /usr/lib64/netscape/plugins + * /usr/lib64/mozilla/plugins + * Locations specified by environment variables: + * $MOZILLA_HOME/plugins + * $MOZ_PLUGIN_PATH + * $QTWEBKIT_PLUGIN_PATH +* Windows + * The user's Application Data\Mozilla\plugins directory + * Standard system locations of plugins for Quicktime, Flash, etc. +* Mac OS X + * Library/Internet Plug-Ins in the user's home directory + * The system /Library/Internet Plug-Ins directory + +License Information +------------------- + +Qt Commercial Edition licensees that wish to distribute applications that use the QtWebKit module need to be aware of their obligations under the GNU Library General Public License (LGPL). + +Developers using the Open Source Edition can choose to redistribute the module under the appropriate version of the GNU LGPL. +WebKit is licensed under the GNU Library General Public License. Individual contributor names and copyright dates can be found inline in the code. + +This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. + +You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. \ No newline at end of file diff --git a/sources/pyside2/doc/extras/PySide.QtXml.rst b/sources/pyside2/doc/extras/PySide.QtXml.rst new file mode 100644 index 0000000..4b48ef2 --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtXml.rst @@ -0,0 +1,5 @@ +To include the definitions of the module's classes, use the following directive: + +:: + + import PySide2.QtXml diff --git a/sources/pyside2/doc/extras/PySide.QtXmlPatterns.rst b/sources/pyside2/doc/extras/PySide.QtXmlPatterns.rst new file mode 100644 index 0000000..99254ad --- /dev/null +++ b/sources/pyside2/doc/extras/PySide.QtXmlPatterns.rst @@ -0,0 +1,12 @@ +To include the definitions of the module's classes, use the following directive: + +:: + + import PySide2.QtXmlPatterns + +Further Reading +--------------- + +General overviews of XQuery and XSchema can be found in the XQuery document. + +An introduction to the XQuery language can be found in A Short Path to XQuery. diff --git a/sources/pyside2/doc/gettingstarted.rst b/sources/pyside2/doc/gettingstarted.rst new file mode 100644 index 0000000..f24051c --- /dev/null +++ b/sources/pyside2/doc/gettingstarted.rst @@ -0,0 +1,87 @@ +=============== +Getting Started +=============== + +To get started with |project|, install the following prerequisites: + +* Python v3.5 or later +* libclang v3.9 or later +* Optional: a virtual environment, such as `venv <https://docs.python.org/3/library/venv.html>`_ or `virtualenv <https://virtualenv.pypa.io/en/stable/installation>`_ + +With these installed, you are ready to install the |project| +packages using the pip wheel. Run the following command from your command +prompt to install:: + + python -m pip install --index-url=http://download.qt.io/snapshots/ci/pyside/5.11/latest pyside2 --trusted-host download.qt.io + +Now that you have |project| installed, you can test your setup by running the following Python +constructs to print version information: + +.. include:: pysideversion.rst + :start-line: 5 + :end-line: 32 + +Your |project| setup is ready, so try exploring it further by developing a simple application +that prints "Hello World" in several languages. The following instructions will +guide you through the development process: + +* Create a new file named :code:`hello_world.py`, and add the following imports to it. + + :: + + import sys + import random + from PySide2 import QtCore, QtWidgets, QtGui + + The |pymodname| Python module provides access to the Qt APIs as its submodule. + In this case, you are importing the :code:`QtCore`, :code:`QtWidgets`, and :code:`QtGui` submodules. + +* Define a class named :code:`MyWidget`, which extends QWidget and includes a QPushButton and QLabel. + + :: + + class MyWidget(QtWidgets.QWidget): + def __init__(self): + super().__init__() + + self.hello = ["Hallo Welt", "你好,世界", "Hei maailma",\ + "Hola Mundo", "Привет мир"] + + self.button = QtWidgets.QPushButton("Click me!") + self.text = QtWidgets.QLabel("Hello World") + self.text.setAlignment(QtCore.Qt.AlignCenter) + + self.text.setFont(QtGui.QFont("Titillium", 30)) + self.button.setFont(QtGui.QFont("Titillium", 20)) + + self.layout = QtWidgets.QVBoxLayout() + self.layout.addWidget(self.text) + self.layout.addWidget(self.button) + self.setLayout(self.layout) + + self.button.clicked.connect(self.magic) + + + def magic(self): + self.text.setText(random.choice(self.hello)) + + The MyWidget class has the :code:`magic` member function that + randomly chooses an item from the list :code:`hello`. This function + is called when you click the button. + +* Now, add a main function where you instantiate :code:`MyWidget` and + :code:`show` it. + + :: + + if __name__ == "__main__": + app = QtWidgets.QApplication([]) + + widget = MyWidget() + widget.resize(800, 600) + widget.show() + + sys.exit(app.exec_()) + +Your example is ready to be run. Try clicking the button at the bottom +and see which greeting you get. diff --git a/sources/pyside2/doc/index.rst b/sources/pyside2/doc/index.rst new file mode 100644 index 0000000..fa1daec --- /dev/null +++ b/sources/pyside2/doc/index.rst @@ -0,0 +1,111 @@ +|project| +************* + +The |project| product enables the use of Qt5 APIs in Python applications. It +lets Python developers utilize the full potential of Qt, using the |pymodname| module. +The |pymodname| module provides access to the individual Qt modules such as QtCore, +QtGui, and so on. The following is the list of supported Qt5 modules: + +Qt Modules +=========== + +.. list-table:: + :widths: 150, 150 + :align: left + + * - `Qt Core <PySide2/QtCore/index.html>`_ + Provides core non-GUI functionality. + - `Qt 3D Animation <PySide2/Qt3DAnimation/index.html>`_ + Provides basic elements required to animate 3D objects. + * - `Qt Gui <PySide2/QtGui/index.html>`_ + Extends QtCore with GUI functionality. + - `Qt Help <PySide2/QtHelp/index.html>`_ + Provides classes for integrating online documentation in applications. + * - `Qt Network <PySide2/QtNetwork/index.html>`_ + Offers classes that lets you to write TCP/IP clients and servers. + - `Qt OpenGL <PySide2/QtOpenGL/index.html>`_ + Offers classes that make it easy to use OpenGL in Qt applications. + * - `Qt PrintSupport <PySide2/QtPrintSupport/index.html>`_ + Provides extensive cross-platform support for printing. + - `Qt Qml <PySide2/QtQml/index.html>`_ + Python API for Qt QML. + * - `Qt Charts <PySide2/QtCharts/index.html>`_ + Provides a set of easy to use chart components. + - `Qt Quick <PySide2/QtQuick/index.html>`_ + Provides classes for embedding Qt Quick in Qt applications. + * - `Qt DataVisualization <PySide2/QtDataVisualization/index.html>`_ + Provides a way to visualize data in 3D as bar, scatter, and surface graphs. + - `Qt QuickWidgets <PySide2/QtQuickWidgets/index.html>`_ + Provides the QQuickWidget class for embedding Qt Quick in widget-based applications. + * - `Qt TextToSpeech <PySide2/QtTextToSpeech/index.html>`_ + Provides API to access text-to-speech engines. + - `Qt Sql <PySide2/QtSql/index.html>`_ + Helps you provide seamless database integration to your Qt applications. + * - `Qt Multimedia <PySide2/QtMultimedia/index.html>`_ + Provides low-level multimedia functionality. + - `Qt MultimediaWidgets <PySide2/QtMultimediaWidgets/index.html>`_ + Provides the widget-based multimedia API. + * - `Qt MacExtras <PySide2/QtMacExtras/index.html>`_ + Provides classes and functions specific to + macOS and iOS operating systems. + - `Qt Svg <PySide2/QtSvg/index.html>`_ + Provides classes for displaying the contents of SVG files. + * - `Qt UiTools <PySide2/QtUiTools/index.html>`_ + Provides classes to handle forms created with Qt Designer. + - `Qt Test <PySide2/QtTest/index.html>`_ + Provides classes for unit testing Qt applications and libraries. + * - `Qt Concurrent <PySide2/QtConcurrent/index.html>`_ + Provides high-level APIs that make it possible + to write multi-threaded programs without using low-level threading + primitives such as mutexes, read-write locks, wait conditions, or semaphores. + - `Qt AxContainer <PySide2/QtAxContainer/index.html>`_ + Provides QAxObject and QAxWidget which act as + containers for COM objects and ActiveX controls. + * - `Qt WebEngineCore <PySide2/QtWebEngineCore/index.html>`_ + Provides the core functionality to integrate web content + - `Qt WebEngineWidgets <PySide2/QtWebEngineWidgets/index.html>`_ + Provides widgets that can handle web content + * - `Qt WebChannel <PySide2/QtWebChannel/index.html>`_ + Enables peer-to-peer communication between a server and a client + (HTML/JavaScript or QML application). + - `Qt WebSockets <PySide2/QtWebSockets/index.html>`_ + Provides interfaces that enable Qt applications + to act as a server that can process WebSocket requests, or a client that + can consume data received from the server, or both. + * - `Qt Widgets <PySide2/QtWidgets/index.html>`_ + Extends Qt GUI with C++ widget functionality. + - `Qt WinExtras <PySide2/QtWinExtras/index.html>`_ + Provides classes and functions for using some Windows APIs in a Qt way. + * - `Qt X11Extras <PySide2/QtX11Extras/index.html>`_ + Provides information about the X display configuration. + - `Qt Xml <PySide2/QtXml/index.html>`_ + Provides C++ implementations of SAX and DOM. + * - `Qt XmlPatterns <PySide2/QtXmlPatterns/index.html>`_ + Provides support for XPath, XQuery, XSLTi, and XML Schema validation. + - `Qt 3D Core <PySide2/Qt3DCore/index.html>`_ + Contains functionality to support near-realtime simulation systems. + * - `Qt 3D Extras <PySide2/Qt3DExtras/index.html>`_ + Provides a set of prebuilt elements to help you get started with Qt 3D. + - `Qt 3D Input <PySide2/Qt3DInput/index.html>`_ + Provides classes for handling user input in applications using Qt 3D. + * - `Qt 3D Logic <PySide2/Qt3DLogic/index.html>`_ + Enables synchronizing frames with the Qt 3D backend. + - `Qt 3D Render <PySide2/Qt3DRender/index.html>`_ + Contains functionality to support 2D and 3D rendering using Qt 3D. + * - `Qt Positioning <PySide2/QtPositioning/index.html>`_ + Provides positioning information via QML and Python interfaces. + - `Qt Location <PySide2/QtLocation/index.html>`_ + Helps you create viable mapping solutions using the data available from some of the popular location services. + * - `Qt Sensors <PySide2/QtSensors/index.html>`_ + Provides access to sensor hardware via QML and Python interfaces and a motion gesture recognition API for devices. + - `Qt Scxml <PySide2/QtScxml/index.html>`_ + Provides classes to create and use state machines from SCXML files. + +|project| also comes with the +:doc:`Shiboken2 <shiboken2:contents>` generator that outputs C++ code +for CPython extensions. + +.. toctree:: + :maxdepth: 2 + + contents.rst diff --git a/sources/pyside2/doc/inheritance_diagram.py b/sources/pyside2/doc/inheritance_diagram.py new file mode 100644 index 0000000..054cb7b --- /dev/null +++ b/sources/pyside2/doc/inheritance_diagram.py @@ -0,0 +1,372 @@ +# -*- coding: utf-8 -*- +r""" + sphinx.ext.inheritance_diagram + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Defines a docutils directive for inserting inheritance diagrams. + + Provide the directive with one or more classes or modules (separated + by whitespace). For modules, all of the classes in that module will + be used. + + Example:: + + Given the following classes: + + class A: pass + class B(A): pass + class C(A): pass + class D(B, C): pass + class E(B): pass + + .. inheritance-diagram: D E + + Produces a graph like the following: + + A + / \ + B C + / \ / + E D + + The graph is inserted as a PNG+image map into HTML and a PDF in + LaTeX. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2010-2011 by the PySide team. + :license: BSD, see LICENSE for details. +""" + +import os +import re +import sys +import inspect +try: + from hashlib import md5 +except ImportError: + from md5 import md5 + +from docutils import nodes +from docutils.parsers.rst import directives, Directive + +from sphinx.ext.graphviz import render_dot_html, render_dot_latex + +class InheritanceException(Exception): + pass + +# When passed something like: +# PySide2.QtCore.QStateMachine.SignalEvent +# try to import the underlying module and return a +# handle to the object. In a loop, import +# PySide2.QtCore.QStateMachine.SignalEvent +# PySide2.QtCore.QStateMachine +# PySide2.QtCore +# until the import succeeds and walk up the attributes +# to obtain the object + +def importClassOrModule(name): + components = name.split('.') + for i in range(len(components), 0, -1): + importPath = '.'.join(components[: i]) + try: + __import__(importPath) + except ImportError: + continue + if i == len(components): + return sys.modules[importPath] + remaining = components[i :] + cls = sys.modules[importPath] + for component in remaining: + try: + cls = getattr(cls, component) + except Exception: # No such attribute + return None + return cls + return None + +class InheritanceGraph(object): + """ + Given a list of classes, determines the set of classes that they inherit + from all the way to the root "object", and then is able to generate a + graphviz dot graph from them. + """ + def __init__(self, class_names, currmodule, show_builtins=False, parts=0): + """ + *class_names* is a list of child classes to show bases from. + + If *show_builtins* is True, then Python builtins will be shown + in the graph. + """ + self.class_names = class_names + classes = self._import_classes(class_names, currmodule) + self.class_info = self._class_info(classes, show_builtins, parts) + if not self.class_info: + raise InheritanceException('No classes found for ' + 'inheritance diagram') + + def _import_class_or_module(self, name, currmodule): + """ + Import a class using its fully-qualified *name*. + """ + todoc = importClassOrModule(name) + if not todoc and currmodule is not None: + todoc = importClassOrModule(currmodule + '.' + name) + if not todoc: + moduleStr = '(module {})'.format(currmodule) if currmodule else '' + raise InheritanceException('Could not import class {} specified for ' + 'inheritance diagram {}.'.format(name, moduleStr)) + if inspect.isclass(todoc): + return [todoc] + elif inspect.ismodule(todoc): + classes = [] + for cls in todoc.__dict__.values(): + if inspect.isclass(cls) and cls.__module__ == todoc.__name__: + classes.append(cls) + return classes + raise InheritanceException('%r specified for inheritance diagram is ' + 'not a class or module' % name) + + def _import_classes(self, class_names, currmodule): + """Import a list of classes.""" + classes = [] + for name in class_names: + classes.extend(self._import_class_or_module(name, currmodule)) + return classes + + def _class_info(self, classes, show_builtins, parts): + """Return name and bases for all classes that are ancestors of + *classes*. + + *parts* gives the number of dotted name parts that is removed from the + displayed node names. + """ + all_classes = {} + builtins = __builtins__.values() + + def recurse(cls): + if not show_builtins and cls in builtins: + return + + nodename = self.class_name(cls, parts) + fullname = self.class_name(cls, 0) + + baselist = [] + all_classes[cls] = (nodename, fullname, baselist) + for base in cls.__bases__: + if not show_builtins and base in builtins: + continue + if base.__name__ == "Object" and base.__module__ == "Shiboken": + continue + baselist.append(self.class_name(base, parts)) + if base not in all_classes: + recurse(base) + + for cls in classes: + recurse(cls) + + return list(all_classes.values()) + + def class_name(self, cls, parts=0): + """Given a class object, return a fully-qualified name. + + This works for things I've tested in matplotlib so far, but may not be + completely general. + """ + module = cls.__module__ + if module == '__builtin__': + fullname = cls.__name__ + else: + fullname = '%s.%s' % (module, cls.__name__) + if parts == 0: + return fullname + name_parts = fullname.split('.') + return '.'.join(name_parts[-parts:]) + + def get_all_class_names(self): + """ + Get all of the class names involved in the graph. + """ + return [fullname for (_, fullname, _) in self.class_info] + + # These are the default attrs for graphviz + default_graph_attrs = { + 'rankdir': 'LR', + 'size': '"8.0, 12.0"', + } + default_node_attrs = { + 'shape': 'box', + 'fontsize': 10, + 'height': 0.25, + 'fontname': '"Vera Sans, DejaVu Sans, Liberation Sans, ' + 'Arial, Helvetica, sans"', + 'style': '"setlinewidth(0.5)"', + } + default_edge_attrs = { + 'arrowsize': 0.5, + 'style': '"setlinewidth(0.5)"', + } + + def _format_node_attrs(self, attrs): + return ','.join(['%s=%s' % x for x in attrs.items()]) + + def _format_graph_attrs(self, attrs): + return ''.join(['%s=%s;\n' % x for x in attrs.items()]) + + def generate_dot(self, name, urls={}, env=None, + graph_attrs={}, node_attrs={}, edge_attrs={}): + """ + Generate a graphviz dot graph from the classes that + were passed in to __init__. + + *name* is the name of the graph. + + *urls* is a dictionary mapping class names to HTTP URLs. + + *graph_attrs*, *node_attrs*, *edge_attrs* are dictionaries containing + key/value pairs to pass on as graphviz properties. + """ + g_attrs = self.default_graph_attrs.copy() + n_attrs = self.default_node_attrs.copy() + e_attrs = self.default_edge_attrs.copy() + g_attrs.update(graph_attrs) + n_attrs.update(node_attrs) + e_attrs.update(edge_attrs) + if env: + g_attrs.update(env.config.inheritance_graph_attrs) + n_attrs.update(env.config.inheritance_node_attrs) + e_attrs.update(env.config.inheritance_edge_attrs) + + res = [] + res.append('digraph %s {\n' % name) + res.append(self._format_graph_attrs(g_attrs)) + + for name, fullname, bases in self.class_info: + # Write the node + this_node_attrs = n_attrs.copy() + url = urls.get(fullname) + if url is not None: + this_node_attrs['URL'] = '"%s"' % url + res.append(' "%s" [%s];\n' % + (name, self._format_node_attrs(this_node_attrs))) + + # Write the edges + for base_name in bases: + res.append(' "%s" -> "%s" [%s];\n' % + (base_name, name, + self._format_node_attrs(e_attrs))) + res.append('}\n') + return ''.join(res) + + +class inheritance_diagram(nodes.General, nodes.Element): + """ + A docutils node to use as a placeholder for the inheritance diagram. + """ + pass + + +class InheritanceDiagram(Directive): + """ + Run when the inheritance_diagram directive is first encountered. + """ + has_content = False + required_arguments = 1 + optional_arguments = 0 + final_argument_whitespace = True + option_spec = { + 'parts': directives.nonnegative_int, + } + + def run(self): + node = inheritance_diagram() + node.document = self.state.document + env = self.state.document.settings.env + class_names = self.arguments[0].split() + class_role = env.get_domain('py').role('class') + # Store the original content for use as a hash + node['parts'] = self.options.get('parts', 0) + node['content'] = ', '.join(class_names) + + # Create a graph starting with the list of classes + try: + graph = InheritanceGraph( + class_names, env.temp_data.get('py:module'), + parts=node['parts']) + except InheritanceException as err: + return [node.document.reporter.warning(err.args[0], + line=self.lineno)] + + # Create xref nodes for each target of the graph's image map and + # add them to the doc tree so that Sphinx can resolve the + # references to real URLs later. These nodes will eventually be + # removed from the doctree after we're done with them. + for name in graph.get_all_class_names(): + refnodes, x = class_role( + 'class', ':class:`%s`' % name, name, 0, self.state) + node.extend(refnodes) + # Store the graph object so we can use it to generate the + # dot file later + node['graph'] = graph + return [node] + + +def get_graph_hash(node): + hashString = node['content'] + str(node['parts']) + return md5(hashString.encode('utf-8')).hexdigest()[-10:] + + +def html_visit_inheritance_diagram(self, node): + """ + Output the graph for HTML. This will insert a PNG with clickable + image map. + """ + graph = node['graph'] + + graph_hash = get_graph_hash(node) + name = 'inheritance%s' % graph_hash + + # Create a mapping from fully-qualified class names to URLs. + urls = {} + for child in node: + if child.get('refuri') is not None: + urls[child['reftitle']] = child.get('refuri') + elif child.get('refid') is not None: + urls[child['reftitle']] = '#' + child.get('refid') + + dotcode = graph.generate_dot(name, urls, env=self.builder.env) + render_dot_html(self, node, dotcode, {}, 'inheritance', 'inheritance', + alt='Inheritance diagram of ' + node['content']) + raise nodes.SkipNode + + +def latex_visit_inheritance_diagram(self, node): + """ + Output the graph for LaTeX. This will insert a PDF. + """ + graph = node['graph'] + + graph_hash = get_graph_hash(node) + name = 'inheritance%s' % graph_hash + + dotcode = graph.generate_dot(name, env=self.builder.env, + graph_attrs={'size': '"6.0,6.0"'}) + render_dot_latex(self, node, dotcode, {}, 'inheritance') + raise nodes.SkipNode + + +def skip(self, node): + raise nodes.SkipNode + + +def setup(app): + app.setup_extension('sphinx.ext.graphviz') + app.add_node( + inheritance_diagram, + latex=(latex_visit_inheritance_diagram, None), + html=(html_visit_inheritance_diagram, None), + text=(skip, None), + man=(skip, None)) + app.add_directive('inheritance-diagram', InheritanceDiagram) + app.add_config_value('inheritance_graph_attrs', {}, False), + app.add_config_value('inheritance_node_attrs', {}, False), + app.add_config_value('inheritance_edge_attrs', {}, False), diff --git a/sources/pyside2/doc/modules.rst b/sources/pyside2/doc/modules.rst new file mode 100644 index 0000000..0ec1fb7 --- /dev/null +++ b/sources/pyside2/doc/modules.rst @@ -0,0 +1,28 @@ +|project| modules +******************* + +Qt is split into several modules. + +.. toctree:: + :maxdepth: 1 + + PySide2/Qt3DAnimation/index.rst + PySide2/Qt3DCore/index.rst + PySide2/Qt3DExtras/index.rst + PySide2/Qt3DInput/index.rst + PySide2/Qt3DLogic/index.rst + PySide2/Qt3DRender/index.rst + PySide2/QtCore/index.rst + PySide2/QtGui/index.rst + PySide2/QtHelp/index.rst + PySide2/QtMultimedia/index.rst + PySide2/QtNetwork/index.rst + PySide2/QtOpenGL/index.rst + PySide2/QtPrintSupport/index.rst + PySide2/QtQml/index.rst + PySide2/QtQuick/index.rst + PySide2/QtSql/index.rst + PySide2/QtSvg/index.rst + PySide2/QtUiTools/index.rst + PySide2/QtXml/index.rst + PySide2/QtXmlPatterns/index.rst diff --git a/sources/pyside2/doc/pyhtml2devhelp.py b/sources/pyside2/doc/pyhtml2devhelp.py new file mode 100644 index 0000000..aa39036 --- /dev/null +++ b/sources/pyside2/doc/pyhtml2devhelp.py @@ -0,0 +1,256 @@ +#! /usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Copyright (C) 2009 Matthias Klose <doko@debian.org> +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python tools. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" + This script is based on Python2.6 Ubuntu package script +""" + +import formatter, htmllib +import os, sys, re + +class PyHTMLParser(htmllib.HTMLParser): + pages_to_include = set(('index.html', 'PySide/QtHelp/index.html', 'PySide/QtSvg/index.html', + 'PySide/QtGui/index.html', 'PySide/QtNetwork/index.html', 'PySide/QtWebKit/index.html', + 'PySide/QtUiTools/index.html', 'PySide/QtXml/index.html', 'PySide/QtCore/index.html', + 'PySide/QtScriptTools/index.html', 'PySide/QtOpenGL/index.html', 'PySide/QtScript/index.html', + 'PySide/QtSql/index.html', 'howto-build/index.html')) + + def __init__(self, formatter, basedir, fn, indent, parents=set()): + htmllib.HTMLParser.__init__(self, formatter) + self.basedir = basedir + self.dir, self.fn = os.path.split(fn) + self.data = '' + self.parents = parents + self.link = {} + self.indent = indent + self.last_indent = indent - 1 + self.sub_indent = 0 + self.sub_count = 0 + self.next_link = False + + def process_link(self): + new_href = os.path.join(self.dir, self.link['href']) + text = self.link['text'] + indent = self.indent + self.sub_indent + if self.last_indent == indent: + print '%s</sub>' % (' ' * self.last_indent) + self.sub_count -= 1 + print '%s<sub link="%s" name="%s">' % (' ' * indent, new_href, text) + self.sub_count += 1 + self.last_indent = self.indent + self.sub_indent + + def start_li(self, attrs): + self.sub_indent += 1 + self.next_link = True + + def end_li(self): + indent = self.indent + self.sub_indent + if self.sub_count > 0: + print '%s</sub>' % (' ' * self.last_indent) + self.sub_count -= 1 + self.last_indent -= 1 + self.sub_indent -= 1 + + def start_a(self, attrs): + self.link = {} + for attr in attrs: + self.link[attr[0]] = attr[1] + self.data = '' + + def end_a(self): + process = False + text = self.data.replace('\t', '').replace('\n', ' ').replace('&', '&').replace('<', '<').replace('>', '>') + self.link['text'] = text + # handle a tag without href attribute + try: + href = self.link['href'] + except KeyError: + return + + abs_href = os.path.join(self.basedir, href) + if abs_href in self.parents: + return + if href.startswith('..') or href.startswith('http:') \ + or href.startswith('mailto:') or href.startswith('news:'): + return + if href in ('', 'about.html', 'modindex.html', 'genindex.html', 'glossary.html', + 'search.html', 'contents.html', 'download.html', 'bugs.html', + 'license.html', 'copyright.html'): + return + + if self.link.has_key('class'): + if self.link['class'] in ('biglink'): + process = True + if self.link['class'] in ('reference external'): + if self.next_link: + process = True + next_link = False + + if process == True: + self.process_link() + if href in self.pages_to_include: + self.parse_file(os.path.join(self.dir, href)) + + def finish(self): + if self.sub_count > 0: + print '%s</sub>' % (' ' * self.last_indent) + + def handle_data(self, data): + self.data += data + + def parse_file(self, href): + # TODO basedir bestimmen + parent = os.path.join(self.basedir, self.fn) + self.parents.add(parent) + parser = PyHTMLParser(formatter.NullFormatter(), + self.basedir, href, self.indent + 1, + self.parents) + text = file(self.basedir + '/' + href).read() + parser.feed(text) + parser.finish() + parser.close() + if parent in self.parents: + self.parents.remove(parent) + +class PyIdxHTMLParser(htmllib.HTMLParser): + def __init__(self, formatter, basedir, fn, indent): + htmllib.HTMLParser.__init__(self, formatter) + self.basedir = basedir + self.dir, self.fn = os.path.split(fn) + self.data = '' + self.link = {} + self.indent = indent + self.active = False + self.indented = False + self.nolink = False + self.header = '' + self.last_letter = 'Z' + self.last_text = '' + + def process_link(self): + new_href = os.path.join(self.dir, self.link['href']) + text = self.link['text'] + if not self.active: + return + if text.startswith('['): + return + if self.link.get('rel', None) in ('prev', 'parent', 'next', 'contents', 'index'): + return + if self.indented: + text = self.last_text + ' ' + text + else: + # Save it in case we need it again + self.last_text = re.sub(' \([\w\-\.\s]+\)', '', text) + indent = self.indent + print '%s<function link="%s" name="%s"/>' % (' ' * indent, new_href, text) + + def start_dl(self, attrs): + if self.last_text: + # Looks like we found the second part to a command + self.indented = True + + def end_dl(self): + self.indented = False + + def start_dt(self, attrs): + self.data = '' + self.nolink = True + + def end_dt(self): + if not self.active: + return + if self.nolink == True: + # Looks like we found the first part to a command + self.last_text = re.sub(' \([\w\-\.\s]+\)', '', self.data) + self.nolink = False + + def start_h2(self, attrs): + for k, v in attrs: + if k == 'id': + self.header = v + if v == '_': + self.active = True + + def start_td(self, attrs): + self.indented = False + self.last_text = '' + + def start_table(self, attrs): + pass + + def end_table(self): + if self.header == self.last_letter: + self.active = False + + def start_a(self, attrs): + self.nolink = False + self.link = {} + for attr in attrs: + self.link[attr[0]] = attr[1] + self.data = '' + + def end_a(self): + text = self.data.replace('\t', '').replace('\n', ' ').replace('&', '&').replace('<', '<').replace('>', '>') + self.link['text'] = text + # handle a tag without href attribute + try: + href = self.link['href'] + except KeyError: + return + self.process_link() + + def handle_data(self, data): + self.data += data + +def main(): + base = sys.argv[1] + fn = sys.argv[2] + + parser = PyHTMLParser(formatter.NullFormatter(), base, fn, indent=0) + print '<?xml version="1.0" encoding="iso-8859-1"?>' + print '<book title="PySide %s Documentation" name="PySide" version="%s" link="index.html">' % (sys.argv[3], sys.argv[3]) + print '<chapters>' + parser.parse_file(fn) + print '</chapters>' + + print '<functions>' + + fn = 'genindex.html' + parser = PyIdxHTMLParser(formatter.NullFormatter(), base, fn, indent=1) + text = file(base + '/' + fn).read() + parser.feed(text) + parser.close() + + print '</functions>' + print '</book>' + +main() + diff --git a/sources/pyside2/doc/pyside-config.qdocconf.in b/sources/pyside2/doc/pyside-config.qdocconf.in new file mode 100644 index 0000000..e897069 --- /dev/null +++ b/sources/pyside2/doc/pyside-config.qdocconf.in @@ -0,0 +1,17 @@ +buildversion = @PYSIDE_QT_VERSION@ +navigation.homepage = Qt for Python + +outputdir = @DOC_DATA_DIR@ +outputformats = WebXML +WebXML.quotinginformation = true +WebXML.nosubdirs = true +WebXML.outputsubdir = webxml + +spurious += "Hostile character .*" + +#excludes qdoc statements that are not relevant for PySide2 +defines += qtforpython + +includepaths += \ + -I @QT_INCLUDE_DIR@ \ + -I @mkspecInclude@ \ diff --git a/sources/pyside2/doc/pysideapi2.rst b/sources/pyside2/doc/pysideapi2.rst new file mode 100644 index 0000000..f1cc133 --- /dev/null +++ b/sources/pyside2/doc/pysideapi2.rst @@ -0,0 +1,81 @@ +.. _pysideapi2: + +|pymodname| API +*************** + +One of the goals of |pymodname| is to be API compatible with PyQt5, +with certain exceptions. For example, |pymodname| will not export C++ components +that are marked as deprecated by Qt. + +__hash__() function return value +================================ + +The hash value returned for the classes :class:`PySide2.QtCore.QDate`, :class:`PySide2.QtCore.QDateTime`, :class:`PySide2.QtCore.QTime`, :class:`PySide2.QtCore.QUrl` will be +based on their string representations, thus objects with the same value will +produce the same hash. + + +QString +======= + +Methods that change QString arguments +------------------------------------- + +Methods and functions that change the contents of a QString argument were +modified to receive an immutable Python unicode (or str) and return another +Python unicode/str as the modified string. + +The following methods had their return types modified this way: + +**Classes:** QAbstractSpinBox, QDateTimeEdit, QDoubleSpinBox, QSpinBox, QValidator + +- *fixup(string)*: string +- *validate(string, int)*: [QValidator.State, string, int] + + +**Classes:** QDoubleValidator, QIntValidator, QRegExpValidator + +- *validate(string, int)*: [QValidator.State, string, int] + +**Class:** QClipboard + +- *text(string, QClipboard.Mode mode=QClipboard.Clipboard)*: [string, string] + + +**Class:** QFileDialog + +Instead of *getOpenFileNameAndFilter()*, *getOpenFileNamesAndFilter()* and *getSaveFileNameAndFilter()* like PyQt4 does, +PySide has modified the original methods to return a tuple. + +- *getOpenFileName(QWidget parent=None, str caption=None, str dir=None, str filter=None, QFileDialog.Options options=0)*: [string, filter] +- *getOpenFileNames(QWidget parent=None, str caption=None, str dir=None, str filter=None, QFileDialog.Options options=0)*: [list(string), filter] +- *getSaveFileName(QWidget parent=None, str caption=None, str dir=None, str filter=None, QFileDialog.Options options=0)*: [string, filter] + +**Class:** QWebPage + +- *javaScriptPrompt(QWebFrame, string, string)*: [bool, string] + +Other QString related changes +----------------------------- + +**Classes:** QFontMetrics and QFontMetricsF + +They had two new methods added. Both take a string of one character and convert to a QChar (to call the C++ counterpart): + +- widthChar(string) +- boundingRectChar(string) + + +QTextStream +=========== + +Inside this class some renames were applied to avoid clashes with native Python functions. They are: *bin_()*, *hex_()* and *oct_()*. +The only modification was the addition of '_' character. + + +QVariant +======== + +As QVariant was removed, any function expecting it can receive any Python object (None is an invalid QVariant). The same rule is valid when returning something: the returned QVariant will be converted to the its original Python object type. + +When a method expects a *QVariant::Type* the programmer can use a string (the type name) or the type itself. diff --git a/sources/pyside2/doc/pysideinclude.py b/sources/pyside2/doc/pysideinclude.py new file mode 100644 index 0000000..91fffe1 --- /dev/null +++ b/sources/pyside2/doc/pysideinclude.py @@ -0,0 +1,147 @@ +# +# This code is a modified version of the code found in sphinx distribution +# the same license of sphinx distribution applies to this file as well. +# + +import os +import sys +import codecs +from os import path + +from docutils import nodes +from docutils.parsers.rst import Directive, directives + +from sphinx import addnodes +from sphinx.util import parselinenos + +class PySideInclude(Directive): + """ + Like ``.. include:: :literal:``, but only warns if the include file is + not found, and does not raise errors. Also has several options for + selecting what to include. + """ + + has_content = False + required_arguments = 1 + optional_arguments = 0 + final_argument_whitespace = False + option_spec = { + 'linenos': directives.flag, + 'tab-width': int, + 'language': directives.unchanged_required, + 'encoding': directives.encoding, + 'pyobject': directives.unchanged_required, + 'lines': directives.unchanged_required, + 'start-after': directives.unchanged_required, + 'end-before': directives.unchanged_required, + 'prepend': directives.unchanged_required, + 'append': directives.unchanged_required, + 'snippet': directives.unchanged_required, + } + + def run(self): + document = self.state.document + filename = self.arguments[0] + if not document.settings.file_insertion_enabled: + return [document.reporter.warning('File insertion disabled', + line=self.lineno)] + env = document.settings.env + if filename.startswith('/') or filename.startswith(os.sep): + rel_fn = filename[1:] + else: + docdir = path.dirname(env.doc2path(env.docname, base=None)) + rel_fn = path.join(docdir, filename) + try: + fn = path.join(env.srcdir, rel_fn) + except UnicodeDecodeError: + # the source directory is a bytestring with non-ASCII characters; + # let's try to encode the rel_fn in the file system encoding + rel_fn = rel_fn.encode(sys.getfilesystemencoding()) + fn = path.join(env.srcdir, rel_fn) + + if 'pyobject' in self.options and 'lines' in self.options: + return [document.reporter.warning( + 'Cannot use both "pyobject" and "lines" options', + line=self.lineno)] + + encoding = self.options.get('encoding', env.config.source_encoding) + codec_info = codecs.lookup(encoding) + try: + f = codecs.StreamReaderWriter(open(fn, 'Ub'), + codec_info[2], codec_info[3], 'strict') + lines = f.readlines() + f.close() + except (IOError, OSError): + return [document.reporter.warning( + 'Include file %r not found or reading it failed' % filename, + line=self.lineno)] + except UnicodeError: + return [document.reporter.warning( + 'Encoding %r used for reading included file %r seems to ' + 'be wrong, try giving an :encoding: option' % + (encoding, filename))] + + objectname = self.options.get('pyobject') + if objectname is not None: + from sphinx.pycode import ModuleAnalyzer + analyzer = ModuleAnalyzer.for_file(fn, '') + tags = analyzer.find_tags() + if objectname not in tags: + return [document.reporter.warning( + 'Object named %r not found in include file %r' % + (objectname, filename), line=self.lineno)] + else: + lines = lines[tags[objectname][1]-1 : tags[objectname][2]-1] + + linespec = self.options.get('lines') + if linespec is not None: + try: + linelist = parselinenos(linespec, len(lines)) + except ValueError as err: + return [document.reporter.warning(str(err), line=self.lineno)] + lines = [lines[i] for i in linelist] + + startafter = self.options.get('start-after') + endbefore = self.options.get('end-before') + prepend = self.options.get('prepend') + append = self.options.get('append') + snippet = self.options.get('snippet') + + if snippet: + startafter = "//![%s]" % snippet + endbefore = "//![%s]" % snippet + + if startafter is not None or endbefore is not None: + use = not startafter + res = [] + for line in lines: + if not use and startafter and startafter in line: + use = True + elif use and endbefore and endbefore in line: + use = False + break + elif use: + if not line.startswith("//!"): + res.append(line) + lines = res + + if prepend: + lines.insert(0, prepend + '\n') + if append: + lines.append(append + '\n') + + text = ''.join(lines) + if self.options.get('tab-width'): + text = text.expandtabs(self.options['tab-width']) + retnode = nodes.literal_block(text, text, source=fn) + retnode.line = 1 + retnode.attributes['line_number'] = self.lineno + if self.options.get('language', ''): + retnode['language'] = self.options['language'] + if 'linenos' in self.options: + retnode['linenos'] = True + document.settings.env.note_dependency(rel_fn) + return [retnode] + +def setup(app): + app.add_directive('pysideinclude', PySideInclude) diff --git a/sources/pyside2/doc/pysideversion.rst b/sources/pyside2/doc/pysideversion.rst new file mode 100644 index 0000000..24afba1 --- /dev/null +++ b/sources/pyside2/doc/pysideversion.rst @@ -0,0 +1,31 @@ +Printing |project| and Qt version +********************************* + +|project| exports its version numbers in a pythonic way. You can print these +numbers using the following python constructs: + + :: + + import PySide2.QtCore + + # Prints PySide version + # e.g. 1.0.2 + print(PySide2.__version__) + + # Gets a tuple with each version component + # e.g. (1, 0, 2, 'final', 1) + print(PySide2.__version_info__) + + # Prints the Qt version used to compile PySide + # e.g. "5.11.0" + print(PySide2.QtCore.__version__) + + # Gets a tuple with each version components of Qt used to compile PySide + # e.g. (5, 11, 0) + print(PySide2.QtCore.__version_info__) + + +Note that the Qt version used to compile |project| may differ from the version used to +run |project|. To print the current running Qt version number, you can use:: + + print(PySide2.QtCore.qVersion()) diff --git a/sources/pyside2/doc/qtattributionsscannertorst.py b/sources/pyside2/doc/qtattributionsscannertorst.py new file mode 100644 index 0000000..ff966b4 --- /dev/null +++ b/sources/pyside2/doc/qtattributionsscannertorst.py @@ -0,0 +1,131 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" +Tool to run qtattributionsscanner and convert its output to rst +""" + +import os, json, subprocess, sys, warnings + +def indent(lines, indent): + result = '' + for l in lines: + result += "{}{}\n".format(indent, l) + return result + +rstHeader="""Licenses Used in Qt for Python +****************************** + +Qt for Python contains some code that is not provided under the +GNU Lesser General Public License (LGPL) or the Qt Commercial License, +but rather under specific licenses from the original authors. +The Qt Company gratefully acknowledges these and other contributions +to Qt for Python. We recommend that programs that use Qt for Python +also acknowledge these contributions, and quote these license +statements in an appendix to the documentation. + +Note: You only need to comply with (and acknowledge) the licenses of +the third-party components that you are using with your application. +Click the name of the component to see the licensing details. + +Third-party Licenses +^^^^^^^^^^^^^^^^^^^^ + +The licenses for the third-party sources used by Qt itself are listed +in +`Qt documentation <http://doc.qt.io/qt-5/licenses-used-in-qt.html>`_. +The following table lists parts of Qt for Python that incorporates +code licensed under third-party opensource licenses: + +""" + +def rstHeadline(title): + return '{}\n{}\n'.format(title, '-' * len(title)) + +def rstUrl(title, url): + return '`{} <{}>`_'.format(title, url) + +def rstLiteralBlock(lines): + return '::\n\n' + indent(lines, ' ') + '\n\n' + +def rstLiteralBlockFromText(text): + return rstLiteralBlock(text.strip().split('\n')) + +def readFile(fileName): + with open(fileName, 'r') as file: + return file.readlines() + +def runScanner(directory, targetFileName): + # qtattributionsscanner recursively searches for qt_attribution.json files + # and outputs them in JSON with the paths of the 'LicenseFile' made absolute + command = 'qtattributionsscanner --output-format json {}'.format(directory) + jsonS = subprocess.check_output(command, shell=True) + if not jsonS: + raise RuntimeError('{} failed to produce output.'.format(command)) + + with open(targetFileName, 'w') as targetFile: + targetFile.write(rstHeader) + for entry in json.loads(jsonS.decode('utf-8')): + content = '{}\n{}\n{}\n\n'.format(rstHeadline(entry['Name']), + entry['Description'], entry['QtUsage']) + url = entry['Homepage'] + version = entry['Version'] + if url and version: + content += '{}, upstream version: {}\n\n'.format( + rstUrl('Project Homepage', url), version) + copyright = entry['Copyright'] + if copyright: + content += rstLiteralBlockFromText(copyright) + content += entry['License'] + '\n\n' + licenseFile = entry['LicenseFile'] + if licenseFile: + if os.path.isfile(licenseFile): + content += rstLiteralBlock(readFile(licenseFile)) + else: + warnings.warn('"{}" is not a file'.format(licenseFile), + RuntimeWarning) + targetFile.write(content) + +if len(sys.argv) < 3: + print("Usage: qtattributionsscannertorst [directory] [file]'") + sys.exit(0) + +directory = sys.argv[1] +targetFileName = sys.argv[2] +runScanner(directory, targetFileName) diff --git a/sources/pyside2/doc/qtmodules/pyside-qt3dextras.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qt3dextras.qdocconf.in new file mode 100644 index 0000000..20bd8d7 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qt3dextras.qdocconf.in @@ -0,0 +1,3 @@ +include(@QT_SRC_DIR@/../qt3d/src/doc/qt3d.qdocconf) +includepaths += -I @QT_SRC_DIR@/../qt3d/src/doc +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtcharts.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtcharts.qdocconf.in new file mode 100644 index 0000000..1a58c2d --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtcharts.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/../qtcharts/src/charts/doc/qtcharts.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtconcurrent.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtconcurrent.qdocconf.in new file mode 100644 index 0000000..a6976c2 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtconcurrent.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/src/concurrent/doc/qtconcurrent.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtcore.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtcore.qdocconf.in new file mode 100644 index 0000000..5fb7248 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtcore.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/src/corelib/doc/qtcore.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtdatavisualization.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtdatavisualization.qdocconf.in new file mode 100644 index 0000000..c9fcb31 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtdatavisualization.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/../qtdatavis3d/src/datavisualization/doc/qtdatavis3d.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtgui.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtgui.qdocconf.in new file mode 100644 index 0000000..77e7e6e --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtgui.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/src/gui/doc/qtgui.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qthelp.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qthelp.qdocconf.in new file mode 100644 index 0000000..9336909 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qthelp.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/../qttools/src/assistant/help/doc/qthelp.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtlocation.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtlocation.qdocconf.in new file mode 100644 index 0000000..5536e0c --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtlocation.qdocconf.in @@ -0,0 +1,3 @@ +include(@QT_SRC_DIR@/../qtlocation/src/location/doc/qtlocation.qdocconf) +includepaths += -I @QT_SRC_DIR@/../qtlocation/src/location/doc +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtmacextras.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtmacextras.qdocconf.in new file mode 100644 index 0000000..3e0e400 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtmacextras.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/../qtmacextras/src/macextras/doc/qtmacextras.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtmultimediawidgets.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtmultimediawidgets.qdocconf.in new file mode 100644 index 0000000..5415c39 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtmultimediawidgets.qdocconf.in @@ -0,0 +1,3 @@ +include(@QT_SRC_DIR@/../qtmultimedia/src/multimedia/doc/qtmultimedia.qdocconf) +includepaths += -I @QT_SRC_DIR@/../qtmultimedia/src/multimedia/doc +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtnetwork.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtnetwork.qdocconf.in new file mode 100644 index 0000000..addec9a --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtnetwork.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/src/network/doc/qtnetwork.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtopengl.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtopengl.qdocconf.in new file mode 100644 index 0000000..34895f0 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtopengl.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/src/opengl/doc/qtopengl.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtpositioning.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtpositioning.qdocconf.in new file mode 100644 index 0000000..4a2c677 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtpositioning.qdocconf.in @@ -0,0 +1,3 @@ +include(@QT_SRC_DIR@/../qtlocation/src/positioning/doc/qtpositioning.qdocconf) +includepaths += -I @QT_SRC_DIR@/../qtlocation/src/positioning/doc +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtprintsupport.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtprintsupport.qdocconf.in new file mode 100644 index 0000000..04c5544 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtprintsupport.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/src/printsupport/doc/qtprintsupport.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtqml.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtqml.qdocconf.in new file mode 100644 index 0000000..546ea7b --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtqml.qdocconf.in @@ -0,0 +1,5 @@ +#The index page for QtQml lists only the APIs. Including this qdocconf +#should also include the text and snippets from the module page +include(@QT_SRC_DIR@/../qtdeclarative/src/qml/doc/qtqml.qdocconf) +includepaths += -I @QT_SRC_DIR@/../qtdeclarative/src/qml/doc +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtquickwidgets.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtquickwidgets.qdocconf.in new file mode 100644 index 0000000..6f59645 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtquickwidgets.qdocconf.in @@ -0,0 +1,3 @@ +include(@QT_SRC_DIR@/../qtdeclarative/src/quick/doc/qtquick.qdocconf) +includepaths += -I @QT_SRC_DIR@/../qtdeclarative/src/quick/doc +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtscxml.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtscxml.qdocconf.in new file mode 100644 index 0000000..30b61a7 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtscxml.qdocconf.in @@ -0,0 +1,3 @@ +include(@QT_SRC_DIR@/../qtscxml/src/scxml/doc/qtscxml.qdocconf) +includepaths += -I @QT_SRC_DIR@/../qtscxml/src/scxml/doc +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtsensors.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtsensors.qdocconf.in new file mode 100644 index 0000000..b407db7 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtsensors.qdocconf.in @@ -0,0 +1,3 @@ +include(@QT_SRC_DIR@/../qtsensors/src/sensors/doc/qtsensors.qdocconf) +includepaths += -I @QT_SRC_DIR@/../qtsensors/src/sensors/doc +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtsql.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtsql.qdocconf.in new file mode 100644 index 0000000..8f41c55 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtsql.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/src/sql/doc/qtsql.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtsvg.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtsvg.qdocconf.in new file mode 100644 index 0000000..e3c39a6 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtsvg.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/../qtsvg/src/svg/doc/qtsvg.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qttest.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qttest.qdocconf.in new file mode 100644 index 0000000..b092d92 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qttest.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/src/testlib/doc/qttestlib.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qttexttospeech.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qttexttospeech.qdocconf.in new file mode 100644 index 0000000..ed49121 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qttexttospeech.qdocconf.in @@ -0,0 +1,3 @@ +include(@QT_SRC_DIR@/../qtspeech/src/doc/qtspeech.qdocconf) +includepaths += -I @QT_SRC_DIR@/../qtspeech/src/doc +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtuitools.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtuitools.qdocconf.in new file mode 100644 index 0000000..7bd3941 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtuitools.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/../qttools/src/designer/src/uitools/doc/qtuitools.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtwebchannel.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtwebchannel.qdocconf.in new file mode 100644 index 0000000..f3f2f5c --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtwebchannel.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/../qtwebchannel/src/webchannel/doc/qtwebchannel.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtwebenginewidgets.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtwebenginewidgets.qdocconf.in new file mode 100644 index 0000000..038c803 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtwebenginewidgets.qdocconf.in @@ -0,0 +1,3 @@ +include(@QT_SRC_DIR@/../qtwebengine/src/webengine/doc/qtwebengine.qdocconf) +includepaths += -I @QT_SRC_DIR@/../qtwebengine/src/webengine/doc +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtwebsockets.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtwebsockets.qdocconf.in new file mode 100644 index 0000000..082b948 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtwebsockets.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/../qtwebsockets/src/websockets/doc/qtwebsockets.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtwidgets.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtwidgets.qdocconf.in new file mode 100644 index 0000000..90e887f --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtwidgets.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/src/widgets/doc/qtwidgets.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtwinextras.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtwinextras.qdocconf.in new file mode 100644 index 0000000..d2c1d5b --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtwinextras.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/../qtwinextras/src/winextras/doc/qtwinextras.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtx11extras.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtx11extras.qdocconf.in new file mode 100644 index 0000000..9315fa5 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtx11extras.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/../qtx11extras/src/x11extras/doc/qtx11extras.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtxml.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtxml.qdocconf.in new file mode 100644 index 0000000..f9ccce7 --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtxml.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/src/xml/doc/qtxml.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/qtmodules/pyside-qtxmlpatterns.qdocconf.in b/sources/pyside2/doc/qtmodules/pyside-qtxmlpatterns.qdocconf.in new file mode 100644 index 0000000..9e132ff --- /dev/null +++ b/sources/pyside2/doc/qtmodules/pyside-qtxmlpatterns.qdocconf.in @@ -0,0 +1,2 @@ +include(@QT_SRC_DIR@/../qtxmlpatterns/src/xmlpatterns/doc/qtxmlpatterns.qdocconf) +include(../pyside-config.qdocconf) diff --git a/sources/pyside2/doc/src/README.md b/sources/pyside2/doc/src/README.md new file mode 100644 index 0000000..df37cf6 --- /dev/null +++ b/sources/pyside2/doc/src/README.md @@ -0,0 +1 @@ +Any qdoc source files in this directory will be parsed when generating docs. diff --git a/sources/pyside2/doc/tutorials/examples/images/tabbedbrowser.png b/sources/pyside2/doc/tutorials/examples/images/tabbedbrowser.png new file mode 100644 index 0000000000000000000000000000000000000000..27c3daa097b3dac5334fcada87cff286550e2b74 GIT binary patch literal 37147 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 literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/tutorials/examples/tabbedbrowser.rst b/sources/pyside2/doc/tutorials/examples/tabbedbrowser.rst new file mode 100644 index 0000000..d291e83 --- /dev/null +++ b/sources/pyside2/doc/tutorials/examples/tabbedbrowser.rst @@ -0,0 +1,57 @@ +********************** +Web Browser Example +********************** + +The example demonstrates the power and simplicity offered by |project| to developers. +It uses several |pymodname| submodules to offer a fluid and modern-looking UI that +is apt for a web browser. The application offers the following features: + * Tab-based browsing experience using QTabWidget. + * Download manager using a QProgressBar and QWebEngineDownloadItem. + * Bookmark manager using QTreeView. + +.. image:: images/tabbedbrowser.png + +The application's code is organized in several parts for ease of maintenance. For example, +:code:`DownloadWidget` provides a widget to track progress of a download item. In the following +sections, these different parts are discussed briefly to help you understand the Python code behind +them a little better. + +BookmarkWidget or :code:`bookmarkwidget.py` +=========================================== + +This widget docks to the left of the main window by default. It inherits QTreeView and +loads a default set of bookmarks using a QStandardItemModel. The model is populated at startup +from a JSON file, which is updated when you add or remove bookmarks from the tree view. + +.. automodule:: bookmarkwidget + :members: + +DownloadWidget or :code:`downloadwidget.py` +============================================= + +The widget tracks progress of the download item. It inherits QProgressBar to display +progress of the QWebEngineDownloadItem instance, and offers a context-menu with actions such as Launch, +Show in folder, Cancel, and Remove. + +.. automodule:: downloadwidget + :members: + +BrowserTabWidget or :code:`browsertabwidget.py` +=============================================== + +The widget includes a QWebEngineView to enable viewing web content. It docks to the right +of BookmarkWidget in the main window. + +.. automodule:: browsertabwidget + :members: + +MainWindow or :code:`main.py` +============================= + +This is the parent window that collates all the other widgets together to offer the complete package. + +.. automodule:: main + :members: + + +Try running the example to explore it further. diff --git a/sources/pyside2/doc/tutorials/index.rst b/sources/pyside2/doc/tutorials/index.rst new file mode 100644 index 0000000..18bac57 --- /dev/null +++ b/sources/pyside2/doc/tutorials/index.rst @@ -0,0 +1,25 @@ +PySide examples and tutorials +***************************** + +A collection of examples and tutorials with "walkthrough" guides are +provided with |project| to help new users get started. These +documents were ported from C++ to Python and cover a range of topics, +from basic use of widgets to step-by-step tutorials that show how an +application is put together. + +Examples and demos +=================== + +.. toctree:: + :maxdepth: 1 + + examples/tabbedbrowser.rst + +Tutorials +========== + +.. toctree:: + :maxdepth: 2 + + qmltutorial/index.rst + qmladvancedtutorial/index.rst diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-adv-tutorial1.png b/sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-adv-tutorial1.png new file mode 100644 index 0000000000000000000000000000000000000000..1699ab0e4da7e717fc3b1ae22684254a0d88b859 GIT binary patch literal 203229 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%0A}8=jR^GIblq^~t#FILb{1w$!CVV5AQMSUqRBb)C zt2X6ZRR~^k<Rlg+-OUVLftx?lq{?3KSfOu{L}Fq`v87G<Qvk?y0g$f?uc0z_Dq3az zv0?Z6V$)+JN;x#+g+g8zrs|yX+lP1w)=}|TO$_CV>?0Nku?hP!&W4D2imss-WLz5a z4HqiO3*Vzj7Or~Rt$q^#Zk0JP)2$YRV1|)CB{ixQUf~$Ramc-MXEsXfEenb0tD+n8 zr2&jAQvfZ6a2f%$$ZPnl%|IwhcpiPy8%?Q;x|d`sS>M&KY>qHB8e&3_^$)O{iTU)U zpf+`7o%Cg5>GF+@_l8m{oKwAFHLPzBp5!Wo0l9<jt_F^<E&vE2>#?leMZ&WndksI$ znj+7leT$VHY+B~ph+vQ&re2j!fO+C*lwAKo32hW3YsY*_k`@>uoFJ4`SH%2_>@+e% z!8XlC0k@P9a#b-Yi-h*NFc4c80s^^)!}oR3Wr0!xRQ1vBX#bJu-88Kt6f^462$JsQ zM>FL$M6a}MRUc+p0+^rT@UGZIs9tEn^9*?ny#&`ahA7%H4+$wj=j(z3*AShU7XVDv z`^G(SPbm<O|5?DZ(10z-?OUCWdw&qJyt#+qx9y}1hUQWVW<IbuTC|zhB#C+oS8h}` zNzx>0*;k=%ar?~%dS}pg_`}c2WTE^IIQ�jL&@YkNqp8KoN1H4xmez85L|?<Gof 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 SFe(cnU@_J=(<{??5b-~AZKmA- literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-adv-tutorial2.png b/sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-adv-tutorial2.png new file mode 100644 index 0000000000000000000000000000000000000000..ba27c442cef1ff40ca668b2edfe957aa499d39c2 GIT binary patch literal 249451 zcma&NWlUYq7x#Ohxcs2Fdx7HaTHLL;ySux!P~6?!-41TW-R<D+u7?9p|2KJ(`{pM1 z#m*#?HM7^=V=HUEp9p0|DO4l^Bme+_DkCkf3IITz0RYgm2+;p(X5otY{}qT%(%P;7 z08ZAwM*-?@Ynu)LKn9Qz7yap#{kQuyiAu_Y<VEoL&**5?bZt{-M-?F|ii4AdG(kzh z<lj#@of<Rh+xpFxLu(z?PTSIi(Zi4W^<ELV>1Yd{Y;1BsC_WLY(X6GrJF&O8<nZp5 zW8lpV4_nooriEj^in@2eM{e(P_wkG%sG=<ZkqoW~_y>Uu<461hKzar@m$`(Bod5D> z=gwngziHz$A2sw(^H$eKPO^@a<^CdiQ2s_z4Gtm{Q%_0+6boh_nZS_=oQP2?BOqPW z2s+4P=h{%m*7fP6Deu7BA$pfXzxU0c`s6A!Y1b>d5OM*)LoME$m?)cAxfnr6c?YCN z((oC3*$1{A-|uK%+YX|`)Nt1Y@*nMN-HsUvR0@f4@>KfMd~J6$9js2)7(a+?F|oJn zJR5K8^~rhK?LQ2VL%H@V$Jdy#UD=9B0s22U@eqX`QF+U=+n@n&Z7xsmrZ(&Sz07+_ zXKy@$k!zOgy17~Rp5|_yI5L+O8IWc;5!gw0bcB<cdGuI2Ai)j#C6DX7otTu4q=G~m zKCNeTmtSHObL`iu(}%$2VH-Av!mHO{6F2Y|)6sF=z5j*>y=9oVm?t@dNs3Ttt{>^s zH2wb94;KuDs?FnDXTsMuQX#ulb^Twj$A7BB+jGrXu&=W@Q2>kfZFSezbzUY9kMP5* zA4|5}Tf|~pyh0@6MPd9}=5v#2T7;%N+%><bgUTO7wCZS}XYE@I*EY|6Io|HR6hTq2 z**qTANyHoG5u+7;1+c8e>G{od?cx9WVPN5a7hp`-tpR?U-ipk>O(VsFMF<(fzB^yo z7v-q*--gvkqF|vjq-U)40!Q=y+@7`n&F%4|`DfS=>u%s=DeD>snDiBepL3a0%a^4N z(Lu<(WkbK0ql%`nnDSRL;McL-ziHxk-$IyGaCa}IuT=9C;!%cX#D^bOs-2wZa4G5X zxL~*$N(y&bivmrKV1~Gg^@nq&LEutnuRKS#`{%fyxudN_j;U8?sI_o1J5alxb9R@x z_k~aM4O*QioEf!|MY%)z++7%E%j?joswCv0`1*Xw;oG%SrUZVYk*(1{T<;s-jJvt+ zPj-Del#cl>R!Qq3mm)0sp|C0@=YWwu{_T$T1x$PP6Zo!WG<pyZF%5OXIZeg${fxt* zY+9`9m;#68AI>^pe9z|N)0CzM-=fAbq_6ss09cfa8Mx1pMC$(`QE(h}+4}Pn1%2f+ zGa|>a*T=Ojrj?-j1$VDD?_f)+%^?M%OIJ-jxW5^2^q5(>74UfEAWh790=DQ5<4-T$ z|0@r9#QY|lJ($x@FlPmKLh%Ezo0G-;yuLUVhPzWr{j@^*{dE`D6?p%kk2h%w{X`Ve z>$<<xjni?Of1UN{fXThj1LEPj8#Ls6OB0d*X0M_^+d&pgn`a5#_xEZ4+Q8R*dtcG7 zhhoa7OnsO7l=c|d^eX*A3i@Evth{Z(eLA(%#EGe*A-|Y> `rK)zC(*8EFUy9ey_ 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∈Z^FiY}w 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�Sv-ul<4cRng{=rC0-)2fg`+|Ot`X?3;RN2iCp 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 T>4X@Ay1O^AD9SL%WF2tGtsA= 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 literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-adv-tutorial3.png b/sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-adv-tutorial3.png new file mode 100644 index 0000000000000000000000000000000000000000..d500434d1417f988abc55374a27a3933f4bdb095 GIT binary patch literal 283378 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�M`@k)5XzoX~Vq%d=I9k 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%0DJ9wr<P)TZ`(5MKoJb?Y)7WNT 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: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%0DVVhcj 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 H=db@CGeKfy literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-adv-tutorial4.gif b/sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-adv-tutorial4.gif new file mode 100644 index 0000000000000000000000000000000000000000..827458daa5cf42f23e77264b2bef6fc800a8bde3 GIT binary patch literal 1687445 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Ÿ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௘Y`hjNYr0%ism}MXe5*K?2l<qj=TDp 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≀bAkz>b{hcut)k|^2Xx2%xq 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≀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 p3j*DhN&bkm$o^Lb3LPh!)w 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�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�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�q+&n{#V{Mx6Dqy{bzOY^H~p$heoe`*BO~hwhxir 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 literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-samegame.png b/sources/pyside2/doc/tutorials/qmladvancedtutorial/declarative-samegame.png new file mode 100644 index 0000000000000000000000000000000000000000..2232df2046e4907c6c37bc20f2613d507ce41d2f GIT binary patch literal 124904 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ó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 literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/index.rst b/sources/pyside2/doc/tutorials/qmladvancedtutorial/index.rst new file mode 100644 index 0000000..d40af59 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/index.rst @@ -0,0 +1,35 @@ +.. _qmladvancedtutorial: + +QML Advanced Tutorial +********************* + +This tutorial walks you through the steps of creating an application using QML. +It assumes that you already know the basics of QML (for example, from reading the +:ref:`qmltutorial`. + +In this tutorial, you will develop the game, *Same Game*. It is based on the +Same Game application included in the declarative demos directory, and looks +like this: + +.. figure:: declarative-samegame.png + :align: center + +The tutorial covers concepts related to producing a fully functional application, +including JavaScript integration, using QML states and behaviors to manage +components and enhance your interface, and storing persistent application data. + +Prior knowledge of JavaScript is useful to understand parts of this +tutorial, but if you don't know it, you can still get a feel of +integrating the backend logic that creates and controls QML items. + +Tutorial chapters: + +.. toctree:: + :maxdepth: 1 + + samegame1.rst + samegame2.rst + samegame3.rst + samegame4.rst + +All the code in this tutorial can be found :download:`here <samegame.tar.bz2>`. diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame.tar.bz2 b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..f33983d0a6de62c9e38bc141b9028fbf70830575 GIT binary patch literal 60105 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 ST!{G}{9VZu;X*(woDP^GbwZc` literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/Block.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/Block.qml new file mode 100644 index 0000000..18d0c2e --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/Block.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import QtQuick 2.0 + +Item { + id: block + + Image { + id: img + anchors.fill: parent + source: "../shared/pics/redStone.png" + } +} +//![0] diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/Button.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/Button.qml new file mode 100644 index 0000000..0c07904 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/Button.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import QtQuick 2.0 + +Rectangle { + id: container + + property string text: "Button" + + signal clicked + + width: buttonLabel.width + 20; height: buttonLabel.height + 5 + border { width: 1; color: Qt.darker(activePalette.button) } + smooth: true + radius: 8 + + // color the button with a gradient + gradient: Gradient { + GradientStop { + position: 0.0 + color: { + if (mouseArea.pressed) + return activePalette.dark + else + return activePalette.light + } + } + GradientStop { position: 1.0; color: activePalette.button } + } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: container.clicked(); + } + + Text { + id: buttonLabel + anchors.centerIn: container + color: activePalette.buttonText + text: container.text + } +} +//![0] diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/samegame.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/samegame.qml new file mode 100644 index 0000000..36b087d --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/samegame.qml @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import QtQuick 2.0 + +Rectangle { + id: screen + + width: 490; height: 720 + + SystemPalette { id: activePalette } + + Item { + width: parent.width + anchors { top: parent.top; bottom: toolBar.top } + + Image { + id: background + anchors.fill: parent + source: "../shared/pics/background.jpg" + fillMode: Image.PreserveAspectCrop + } + } + + Rectangle { + id: toolBar + width: parent.width; height: 30 + color: activePalette.window + anchors.bottom: screen.bottom + + Button { + anchors { left: parent.left; verticalCenter: parent.verticalCenter } + text: "New Game" + onClicked: console.log("This doesn't do anything yet...") + } + + Text { + id: score + anchors { right: parent.right; verticalCenter: parent.verticalCenter } + text: "Score: Who knows?" + } + } +} +//![0] diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/samegame1.qmlproject b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/samegame1.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame1/samegame1.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/Block.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/Block.qml new file mode 100644 index 0000000..fbbf6a9 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/Block.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + id: block + + Image { + id: img + anchors.fill: parent + source: "../shared/pics/redStone.png" + } +} diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/Button.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/Button.qml new file mode 100644 index 0000000..ffdd2d4 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/Button.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + id: container + + property string text: "Button" + + signal clicked + + width: buttonLabel.width + 20; height: buttonLabel.height + 5 + border { width: 1; color: Qt.darker(activePalette.button) } + smooth: true + radius: 8 + + // color the button with a gradient + gradient: Gradient { + GradientStop { + position: 0.0 + color: { + if (mouseArea.pressed) + return activePalette.dark + else + return activePalette.light + } + } + GradientStop { position: 1.0; color: activePalette.button } + } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: container.clicked(); + } + + Text { + id: buttonLabel + anchors.centerIn: container + color: activePalette.buttonText + text: container.text + } +} diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/samegame.js b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/samegame.js new file mode 100644 index 0000000..c749dc1 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/samegame.js @@ -0,0 +1,63 @@ +//![0] +var blockSize = 40; +var maxColumn = 10; +var maxRow = 15; +var maxIndex = maxColumn * maxRow; +var board = new Array(maxIndex); +var component; + +//Index function used instead of a 2D array +function index(column, row) { + return column + (row * maxColumn); +} + +function startNewGame() { + //Delete blocks from previous game + for (var i = 0; i < maxIndex; i++) { + if (board[i] != null) + board[i].destroy(); + } + + //Calculate board size + maxColumn = Math.floor(background.width / blockSize); + maxRow = Math.floor(background.height / blockSize); + maxIndex = maxRow * maxColumn; + + //Initialize Board + board = new Array(maxIndex); + for (var column = 0; column < maxColumn; column++) { + for (var row = 0; row < maxRow; row++) { + board[index(column, row)] = null; + createBlock(column, row); + } + } +} + +function createBlock(column, row) { + if (component == null) + component = Qt.createComponent("Block.qml"); + + // Note that if Block.qml was not a local file, component.status would be + // Loading and we should wait for the component's statusChanged() signal to + // know when the file is downloaded and ready before calling createObject(). + if (component.status == Component.Ready) { + var dynamicObject = component.createObject(background); + if (dynamicObject == null) { + console.log("error creating block"); + console.log(component.errorString()); + return false; + } + dynamicObject.x = column * blockSize; + dynamicObject.y = row * blockSize; + dynamicObject.width = blockSize; + dynamicObject.height = blockSize; + board[index(column, row)] = dynamicObject; + } else { + console.log("error loading block component"); + console.log(component.errorString()); + return false; + } + return true; +} +//![0] + diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/samegame.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/samegame.qml new file mode 100644 index 0000000..6ed5bca --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/samegame.qml @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +//![2] +import "samegame.js" as SameGame +//![2] + +Rectangle { + id: screen + + width: 490; height: 720 + + SystemPalette { id: activePalette } + + Item { + width: parent.width + anchors { top: parent.top; bottom: toolBar.top } + + Image { + id: background + anchors.fill: parent + source: "../shared/pics/background.jpg" + fillMode: Image.PreserveAspectCrop + } + } + + Rectangle { + id: toolBar + width: parent.width; height: 32 + color: activePalette.window + anchors.bottom: screen.bottom + +//![1] + Button { + anchors { left: parent.left; verticalCenter: parent.verticalCenter } + text: "New Game" + onClicked: SameGame.startNewGame() + } +//![1] + + Text { + id: score + anchors { right: parent.right; verticalCenter: parent.verticalCenter } + text: "Score: Who knows?" + } + } +} diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/samegame2.qmlproject b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/samegame2.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame2/samegame2.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/Block.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/Block.qml new file mode 100644 index 0000000..33a5868 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/Block.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import QtQuick 2.0 + +Item { + id: block + + property int type: 0 + + Image { + id: img + + anchors.fill: parent + source: { + if (type == 0) + return "../shared/pics/redStone.png"; + else if (type == 1) + return "../shared/pics/blueStone.png"; + else + return "../shared/pics/greenStone.png"; + } + } +} +//![0] diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/Button.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/Button.qml new file mode 100644 index 0000000..ffdd2d4 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/Button.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + id: container + + property string text: "Button" + + signal clicked + + width: buttonLabel.width + 20; height: buttonLabel.height + 5 + border { width: 1; color: Qt.darker(activePalette.button) } + smooth: true + radius: 8 + + // color the button with a gradient + gradient: Gradient { + GradientStop { + position: 0.0 + color: { + if (mouseArea.pressed) + return activePalette.dark + else + return activePalette.light + } + } + GradientStop { position: 1.0; color: activePalette.button } + } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: container.clicked(); + } + + Text { + id: buttonLabel + anchors.centerIn: container + color: activePalette.buttonText + text: container.text + } +} diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/Dialog.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/Dialog.qml new file mode 100644 index 0000000..bb4c362 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/Dialog.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import QtQuick 2.0 + +Rectangle { + id: container + + function show(text) { + dialogText.text = text; + container.opacity = 1; + } + + function hide() { + container.opacity = 0; + } + + width: dialogText.width + 20 + height: dialogText.height + 20 + opacity: 0 + + Text { + id: dialogText + anchors.centerIn: parent + text: "" + } + + MouseArea { + anchors.fill: parent + onClicked: hide(); + } +} +//![0] diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/samegame.js b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/samegame.js new file mode 100644 index 0000000..df5bdfb --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/samegame.js @@ -0,0 +1,174 @@ +/* This script file handles the game logic */ +var maxColumn = 10; +var maxRow = 15; +var maxIndex = maxColumn * maxRow; +var board = new Array(maxIndex); +var component; + +//Index function used instead of a 2D array +function index(column, row) { + return column + (row * maxColumn); +} + +function startNewGame() { + //Calculate board size + maxColumn = Math.floor(gameCanvas.width / gameCanvas.blockSize); + maxRow = Math.floor(gameCanvas.height / gameCanvas.blockSize); + maxIndex = maxRow * maxColumn; + + //Close dialogs + dialog.hide(); + + //Initialize Board + board = new Array(maxIndex); + gameCanvas.score = 0; + for (var column = 0; column < maxColumn; column++) { + for (var row = 0; row < maxRow; row++) { + board[index(column, row)] = null; + createBlock(column, row); + } + } +} + +function createBlock(column, row) { + if (component == null) + component = Qt.createComponent("Block.qml"); + + // Note that if Block.qml was not a local file, component.status would be + // Loading and we should wait for the component's statusChanged() signal to + // know when the file is downloaded and ready before calling createObject(). + if (component.status == Component.Ready) { + var dynamicObject = component.createObject(gameCanvas); + if (dynamicObject == null) { + console.log("error creating block"); + console.log(component.errorString()); + return false; + } + dynamicObject.type = Math.floor(Math.random() * 3); + dynamicObject.x = column * gameCanvas.blockSize; + dynamicObject.y = row * gameCanvas.blockSize; + dynamicObject.width = gameCanvas.blockSize; + dynamicObject.height = gameCanvas.blockSize; + board[index(column, row)] = dynamicObject; + } else { + console.log("error loading block component"); + console.log(component.errorString()); + return false; + } + return true; +} + +var fillFound; //Set after a floodFill call to the number of blocks found +var floodBoard; //Set to 1 if the floodFill reaches off that node + +//![1] +function handleClick(xPos, yPos) { + var column = Math.floor(xPos / gameCanvas.blockSize); + var row = Math.floor(yPos / gameCanvas.blockSize); + if (column >= maxColumn || column < 0 || row >= maxRow || row < 0) + return; + if (board[index(column, row)] == null) + return; + //If it's a valid block, remove it and all connected (does nothing if it's not connected) + floodFill(column, row, -1); + if (fillFound <= 0) + return; + gameCanvas.score += (fillFound - 1) * (fillFound - 1); + shuffleDown(); + victoryCheck(); +} +//![1] + +function floodFill(column, row, type) { + if (board[index(column, row)] == null) + return; + var first = false; + if (type == -1) { + first = true; + type = board[index(column, row)].type; + + //Flood fill initialization + fillFound = 0; + floodBoard = new Array(maxIndex); + } + if (column >= maxColumn || column < 0 || row >= maxRow || row < 0) + return; + if (floodBoard[index(column, row)] == 1 || (!first && type != board[index(column, row)].type)) + return; + floodBoard[index(column, row)] = 1; + floodFill(column + 1, row, type); + floodFill(column - 1, row, type); + floodFill(column, row + 1, type); + floodFill(column, row - 1, type); + if (first == true && fillFound == 0) + return; //Can't remove single blocks + board[index(column, row)].opacity = 0; + board[index(column, row)] = null; + fillFound += 1; +} + +function shuffleDown() { + //Fall down + for (var column = 0; column < maxColumn; column++) { + var fallDist = 0; + for (var row = maxRow - 1; row >= 0; row--) { + if (board[index(column, row)] == null) { + fallDist += 1; + } else { + if (fallDist > 0) { + var obj = board[index(column, row)]; + obj.y += fallDist * gameCanvas.blockSize; + board[index(column, row + fallDist)] = obj; + board[index(column, row)] = null; + } + } + } + } + //Fall to the left + var fallDist = 0; + for (var column = 0; column < maxColumn; column++) { + if (board[index(column, maxRow - 1)] == null) { + fallDist += 1; + } else { + if (fallDist > 0) { + for (var row = 0; row < maxRow; row++) { + var obj = board[index(column, row)]; + if (obj == null) + continue; + obj.x -= fallDist * gameCanvas.blockSize; + board[index(column - fallDist, row)] = obj; + board[index(column, row)] = null; + } + } + } + } +} + +//![2] +function victoryCheck() { + //Award bonus points if no blocks left + var deservesBonus = true; + for (var column = maxColumn - 1; column >= 0; column--) + if (board[index(column, maxRow - 1)] != null) + deservesBonus = false; + if (deservesBonus) + gameCanvas.score += 500; + + //Check whether game has finished + if (deservesBonus || !(floodMoveCheck(0, maxRow - 1, -1))) + dialog.show("Game Over. Your score is " + gameCanvas.score); +} +//![2] + +//only floods up and right, to see if it can find adjacent same-typed blocks +function floodMoveCheck(column, row, type) { + if (column >= maxColumn || column < 0 || row >= maxRow || row < 0) + return false; + if (board[index(column, row)] == null) + return false; + var myType = board[index(column, row)].type; + if (type == myType) + return true; + return floodMoveCheck(column + 1, row, myType) || floodMoveCheck(column, row - 1, board[index(column, row)].type); +} + diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/samegame.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/samegame.qml new file mode 100644 index 0000000..18a9383 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/samegame.qml @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import QtQuick 2.0 +import "samegame.js" as SameGame + +Rectangle { + id: screen + + width: 490; height: 720 + + SystemPalette { id: activePalette } + + Item { + width: parent.width + anchors { top: parent.top; bottom: toolBar.top } + + Image { + id: background + anchors.fill: parent + source: "../shared/pics/background.jpg" + fillMode: Image.PreserveAspectCrop + } + +//![1] + Item { + id: gameCanvas + + property int score: 0 + property int blockSize: 40 + + width: parent.width - (parent.width % blockSize) + height: parent.height - (parent.height % blockSize) + anchors.centerIn: parent + + MouseArea { + anchors.fill: parent + onClicked: SameGame.handleClick(mouse.x, mouse.y) + } + } +//![1] + } + +//![2] + Dialog { + id: dialog + anchors.centerIn: parent + z: 100 + } +//![2] + + Rectangle { + id: toolBar + width: parent.width; height: 30 + color: activePalette.window + anchors.bottom: screen.bottom + + Button { + anchors { left: parent.left; verticalCenter: parent.verticalCenter } + text: "New Game" + onClicked: SameGame.startNewGame() + } + + Text { + id: score + anchors { right: parent.right; verticalCenter: parent.verticalCenter } + text: "Score: Who knows?" + } + } +} +//![0] diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/samegame3.qmlproject b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/samegame3.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame3/samegame3.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/BoomBlock.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/BoomBlock.qml new file mode 100644 index 0000000..d400fa4 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/BoomBlock.qml @@ -0,0 +1,132 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import Qt.labs.particles 1.0 + +Item { + id: block + + property int type: 0 + property bool dying: false + + //![1] + property bool spawned: false + + Behavior on x { + enabled: spawned; + SpringAnimation{ spring: 2; damping: 0.2 } + } + Behavior on y { + SpringAnimation{ spring: 2; damping: 0.2 } + } + //![1] + + //![2] + Image { + id: img + + anchors.fill: parent + source: { + if (type == 0) + return "../../shared/pics/redStone.png"; + else if (type == 1) + return "../../shared/pics/blueStone.png"; + else + return "../../shared/pics/greenStone.png"; + } + opacity: 0 + + Behavior on opacity { + NumberAnimation { properties:"opacity"; duration: 200 } + } + } + //![2] + + //![3] + Particles { + id: particles + + width: 1; height: 1 + anchors.centerIn: parent + + emissionRate: 0 + lifeSpan: 700; lifeSpanDeviation: 600 + angle: 0; angleDeviation: 360; + velocity: 100; velocityDeviation: 30 + source: { + if (type == 0) + return "../../shared/pics/redStar.png"; + else if (type == 1) + return "../../shared/pics/blueStar.png"; + else + return "../../shared/pics/greenStar.png"; + } + } + //![3] + + //![4] + states: [ + State { + name: "AliveState" + when: spawned == true && dying == false + PropertyChanges { target: img; opacity: 1 } + }, + + State { + name: "DeathState" + when: dying == true + StateChangeScript { script: particles.burst(50); } + PropertyChanges { target: img; opacity: 0 } + StateChangeScript { script: block.destroy(1000); } + } + ] + //![4] +} diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/Button.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/Button.qml new file mode 100644 index 0000000..ffdd2d4 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/Button.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + id: container + + property string text: "Button" + + signal clicked + + width: buttonLabel.width + 20; height: buttonLabel.height + 5 + border { width: 1; color: Qt.darker(activePalette.button) } + smooth: true + radius: 8 + + // color the button with a gradient + gradient: Gradient { + GradientStop { + position: 0.0 + color: { + if (mouseArea.pressed) + return activePalette.dark + else + return activePalette.light + } + } + GradientStop { position: 1.0; color: activePalette.button } + } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: container.clicked(); + } + + Text { + id: buttonLabel + anchors.centerIn: container + color: activePalette.buttonText + text: container.text + } +} diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/Dialog.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/Dialog.qml new file mode 100644 index 0000000..0cdb04f --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/Dialog.qml @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +//![0] +Rectangle { + id: container +//![0] + +//![1] + property string inputText: textInput.text + signal closed + + function show(text) { + dialogText.text = text; + container.opacity = 1; + textInput.opacity = 0; + } + + function showWithInput(text) { + show(text); + textInput.opacity = 1; + textInput.focus = true; + textInput.text = "" + } + + function hide() { + textInput.focus = false; + container.opacity = 0; + container.closed(); + } +//![1] + + width: dialogText.width + textInput.width + 20 + height: dialogText.height + 20 + opacity: 0 + visible: opacity > 0 + + Text { + id: dialogText + anchors { verticalCenter: parent.verticalCenter; left: parent.left; leftMargin: 10 } + text: "" + } + +//![2] + TextInput { + id: textInput + anchors { verticalCenter: parent.verticalCenter; left: dialogText.right } + width: 80 + text: "" + + onAccepted: container.hide() // close dialog when Enter is pressed + } +//![2] + + MouseArea { + anchors.fill: parent + + onClicked: { + if (textInput.text == "" && textInput.opacity > 0) + textInput.openSoftwareInputPanel(); + else + hide(); + } + } + +//![3] +} +//![3] diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/samegame.js b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/samegame.js new file mode 100755 index 0000000..79ff0c1 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/content/samegame.js @@ -0,0 +1,225 @@ +/* This script file handles the game logic */ +var maxColumn = 10; +var maxRow = 15; +var maxIndex = maxColumn * maxRow; +var board = new Array(maxIndex); +var component; +var scoresURL = ""; +var gameDuration; + +//Index function used instead of a 2D array +function index(column, row) { + return column + (row * maxColumn); +} + +function startNewGame() { + //Delete blocks from previous game + for (var i = 0; i < maxIndex; i++) { + if (board[i] != null) + board[i].destroy(); + } + + //Calculate board size + maxColumn = Math.floor(gameCanvas.width / gameCanvas.blockSize); + maxRow = Math.floor(gameCanvas.height / gameCanvas.blockSize); + maxIndex = maxRow * maxColumn; + + //Close dialogs + nameInputDialog.hide(); + dialog.hide(); + + //Initialize Board + board = new Array(maxIndex); + gameCanvas.score = 0; + for (var column = 0; column < maxColumn; column++) { + for (var row = 0; row < maxRow; row++) { + board[index(column, row)] = null; + createBlock(column, row); + } + } + + gameDuration = new Date(); +} + +function createBlock(column, row) { + if (component == null) + component = Qt.createComponent("content/BoomBlock.qml"); + + // Note that if Block.qml was not a local file, component.status would be + // Loading and we should wait for the component's statusChanged() signal to + // know when the file is downloaded and ready before calling createObject(). + if (component.status == Component.Ready) { + var dynamicObject = component.createObject(gameCanvas); + if (dynamicObject == null) { + console.log("error creating block"); + console.log(component.errorString()); + return false; + } + dynamicObject.type = Math.floor(Math.random() * 3); + dynamicObject.x = column * gameCanvas.blockSize; + dynamicObject.y = row * gameCanvas.blockSize; + dynamicObject.width = gameCanvas.blockSize; + dynamicObject.height = gameCanvas.blockSize; + dynamicObject.spawned = true; + board[index(column, row)] = dynamicObject; + } else { + console.log("error loading block component"); + console.log(component.errorString()); + return false; + } + return true; +} + +var fillFound; //Set after a floodFill call to the number of blocks found +var floodBoard; //Set to 1 if the floodFill reaches off that node + +function handleClick(xPos, yPos) { + var column = Math.floor(xPos / gameCanvas.blockSize); + var row = Math.floor(yPos / gameCanvas.blockSize); + if (column >= maxColumn || column < 0 || row >= maxRow || row < 0) + return; + if (board[index(column, row)] == null) + return; + //If it's a valid block, remove it and all connected (does nothing if it's not connected) + floodFill(column, row, -1); + if (fillFound <= 0) + return; + gameCanvas.score += (fillFound - 1) * (fillFound - 1); + shuffleDown(); + victoryCheck(); +} + +function floodFill(column, row, type) { + if (board[index(column, row)] == null) + return; + var first = false; + if (type == -1) { + first = true; + type = board[index(column, row)].type; + + //Flood fill initialization + fillFound = 0; + floodBoard = new Array(maxIndex); + } + if (column >= maxColumn || column < 0 || row >= maxRow || row < 0) + return; + if (floodBoard[index(column, row)] == 1 || (!first && type != board[index(column, row)].type)) + return; + floodBoard[index(column, row)] = 1; + floodFill(column + 1, row, type); + floodFill(column - 1, row, type); + floodFill(column, row + 1, type); + floodFill(column, row - 1, type); + if (first == true && fillFound == 0) + return; //Can't remove single blocks + board[index(column, row)].dying = true; + board[index(column, row)] = null; + fillFound += 1; +} + +function shuffleDown() { + //Fall down + for (var column = 0; column < maxColumn; column++) { + var fallDist = 0; + for (var row = maxRow - 1; row >= 0; row--) { + if (board[index(column, row)] == null) { + fallDist += 1; + } else { + if (fallDist > 0) { + var obj = board[index(column, row)]; + obj.y = (row + fallDist) * gameCanvas.blockSize; + board[index(column, row + fallDist)] = obj; + board[index(column, row)] = null; + } + } + } + } + //Fall to the left + fallDist = 0; + for (column = 0; column < maxColumn; column++) { + if (board[index(column, maxRow - 1)] == null) { + fallDist += 1; + } else { + if (fallDist > 0) { + for (row = 0; row < maxRow; row++) { + obj = board[index(column, row)]; + if (obj == null) + continue; + obj.x = (fallDist - column) * gameCanvas.blockSize; + board[index(column - fallDist, row)] = obj; + board[index(column, row)] = null; + } + } + } + } +} + +//![3] +function victoryCheck() { +//![3] + //Award bonus points if no blocks left + var deservesBonus = true; + for (var column = maxColumn - 1; column >= 0; column--) + if (board[index(column, maxRow - 1)] != null) + deservesBonus = false; + if (deservesBonus) + gameCanvas.score += 500; + +//![4] + //Check whether game has finished + if (deservesBonus || !(floodMoveCheck(0, maxRow - 1, -1))) { + gameDuration = new Date() - gameDuration; + nameInputDialog.showWithInput("You won! Please enter your name: "); + } +} +//![4] + +//only floods up and right, to see if it can find adjacent same-typed blocks +function floodMoveCheck(column, row, type) { + if (column >= maxColumn || column < 0 || row >= maxRow || row < 0) + return false; + if (board[index(column, row)] == null) + return false; + var myType = board[index(column, row)].type; + if (type == myType) + return true; + return floodMoveCheck(column + 1, row, myType) || floodMoveCheck(column, row - 1, board[index(column, row)].type); +} + +//![2] +function saveHighScore(name) { + if (scoresURL != "") + sendHighScore(name); + + var db = openDatabaseSync("SameGameScores", "1.0", "Local SameGame High Scores", 100); + var dataStr = "INSERT INTO Scores VALUES(?, ?, ?, ?)"; + var data = [name, gameCanvas.score, maxColumn + "x" + maxRow, Math.floor(gameDuration / 1000)]; + db.transaction(function(tx) { + tx.executeSql('CREATE TABLE IF NOT EXISTS Scores(name TEXT, score NUMBER, gridSize TEXT, time NUMBER)'); + tx.executeSql(dataStr, data); + + var rs = tx.executeSql('SELECT * FROM Scores WHERE gridSize = "12x17" ORDER BY score desc LIMIT 10'); + var r = "\nHIGH SCORES for a standard sized grid\n\n" + for (var i = 0; i < rs.rows.length; i++) { + r += (i + 1) + ". " + rs.rows.item(i).name + ' got ' + rs.rows.item(i).score + ' points in ' + rs.rows.item(i).time + ' seconds.\n'; + } + dialog.show(r); + }); +} +//![2] + +//![1] +function sendHighScore(name) { + var postman = new XMLHttpRequest() + var postData = "name=" + name + "&score=" + gameCanvas.score + "&gridSize=" + maxColumn + "x" + maxRow + "&time=" + Math.floor(gameDuration / 1000); + postman.open("POST", scoresURL, true); + postman.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + postman.onreadystatechange = function() { + if (postman.readyState == postman.DONE) { + dialog.show("Your score has been uploaded."); + } + } + postman.send(postData); +} +//![1] + diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/README b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/README new file mode 100644 index 0000000..eaa00fa --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/README @@ -0,0 +1 @@ +The SameGame example can interface with a simple PHP script to store XML high score data on a remote server. We do not have a publically accessible server available for this use, but if you have access to a PHP capable webserver you can copy the files (score_data.xml, score.php, score_style.xsl) to it and alter the highscore_server variable at the top of the samegame.js file to point to it. diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/score_data.xml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/score_data.xml new file mode 100755 index 0000000..c3fd90d --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/score_data.xml @@ -0,0 +1,2 @@ +<record><score>1000000</score><name>Alan the Tester</name><gridSize>0x0</gridSize><seconds>0</seconds></record> +<record><score>6213</score><name>Alan</name><gridSize>12x17</gridSize><seconds>51</seconds></record> diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/score_style.xsl b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/score_style.xsl new file mode 100755 index 0000000..670354c --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/score_style.xsl @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<xsl:template match="/"> + <html> + <head><title>SameGame High Scores + +

SameGame High Scores

+ + + + + + + + + + + + + + + + +
NameScoreGrid SizeTime, s
+ + + + diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/scores.php b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/scores.php new file mode 100755 index 0000000..daf480e --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/highscores/scores.php @@ -0,0 +1,31 @@ +"; + echo "SameGame High Scores"; + if($score > 0){#Sending in a new high score + $name = $_POST["name"]; + $grid = $_POST["gridSize"]; + $time = $_POST["time"]; + if($name == "") + $name = "Anonymous"; + $file = fopen("score_data.xml", "a"); + $ret = fwrite($file, "". $score . "" + . $name . "" . $grid . "" + . $time . "\n"); + echo "Your score has been recorded. Thanks for playing!"; + if($ret == False) + echo "
There was an error though, so don't expect to see that score again."; + }else{#Read high score list + #Now uses XSLT to display. So just print the file. With XML cruft added. + #Note that firefox at least won't apply the XSLT on a php file. So redirecting + $file = fopen("scores.xml", "w"); + $ret = fwrite($file, '' . "\n" + . '' . "\n" + . "\n" . file_get_contents("score_data.xml") . "\n"); + if($ret == False) + echo "There was an internal error. Sorry."; + else + echo ''; + } + echo ""; +?> diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/samegame.qml b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/samegame.qml new file mode 100644 index 0000000..3e514f8 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/samegame.qml @@ -0,0 +1,125 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import "content" +import "content/samegame.js" as SameGame + +Rectangle { + id: screen + + width: 490; height: 720 + + SystemPalette { id: activePalette } + + Item { + width: parent.width + anchors { top: parent.top; bottom: toolBar.top } + + Image { + id: background + anchors.fill: parent + source: "../shared/pics/background.jpg" + fillMode: Image.PreserveAspectCrop + } + + Item { + id: gameCanvas + property int score: 0 + property int blockSize: 40 + + anchors.centerIn: parent + width: parent.width - (parent.width % blockSize); + height: parent.height - (parent.height % blockSize); + + MouseArea { + anchors.fill: parent; onClicked: SameGame.handleClick(mouse.x,mouse.y); + } + } + } + + Dialog { + id: dialog + anchors.centerIn: parent + z: 100 + } + + //![0] + Dialog { + id: nameInputDialog + anchors.centerIn: parent + z: 100 + + onClosed: { + if (nameInputDialog.inputText != "") + SameGame.saveHighScore(nameInputDialog.inputText); + } + } + //![0] + + Rectangle { + id: toolBar + width: parent.width; height: 30 + color: activePalette.window + anchors.bottom: screen.bottom + + Button { + anchors { left: parent.left; verticalCenter: parent.verticalCenter } + text: "New Game" + onClicked: SameGame.startNewGame() + } + + Text { + id: score + anchors { right: parent.right; verticalCenter: parent.verticalCenter } + text: "Score: " + gameCanvas.score + } + } +} diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/samegame4.qmlproject b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/samegame4.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/samegame4/samegame4.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/background.jpg b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..903d395c8d04c9c1f3ceec8e38aadaccf073ff01 GIT binary patch literal 36473 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 S~YJ6cAChryNrla?vKGSWGwlkT#oISh*m6) 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 literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/greenStar.png b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/greenStar.png new file mode 100644 index 0000000000000000000000000000000000000000..cd068547198be068e337176857026a1f29e7202b GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPggab^#V~1tp6FFQCvwPZ!4!i_>>6 zDe@f(5Ma5$-lVWVe1(364BO$vTLp5L;#iJ*DopiVaV*qihCT;lonzV4H|O4+Ns%lM z^__VvZP~R&3OOyosb zjPAsJJGb#bZ2+6U*f&P2$Dj1t6&0^#)N=_kJ(Q{`|8EzR^ye!>B##b9*@MOLK*uq7 My85}Sb4q9e09G(v)c^nh literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/greenStone.png b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/greenStone.png new file mode 100644 index 0000000000000000000000000000000000000000..b568a1900c3c656039afe3e6271a469b4b2f7603 GIT binary patch literal 2932 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 #?4kbOf9x1)YLbkap0(F02g!D* zNh8ESh>>OnrU^{jZ#ii}H7&R+u#|v*Mk6a$xTk1Bh%(oE@`oW+|iT*c{{0V7nB@H8qA=~0&Zj%(lA#??VLfuOL{M99CdTwbIWc=!NS5O%Bs~g zc{T%-1lVoE&~24D}GV>B>dkWrFyo>twqwp7{Z7;euz z;(cZ|C|8=8v^VyC$Q|WGa5hWs+2t_nfyV3}YT7C$1|&3yugQFkgk~2GXxiJ(nPZd- z2F9}u#N{&QVwBgbkdjt3wSrlgX9Z(zhGbpHI^a6sW`Oti!33CkA;uyiSfCS|oinpcB3}^$e@Pax`G)06Ty)7UOcrx{&u;$eD_ZfIjWV*6p|) zql)v9Jca}(sfeON8KLlmT=)k&?`G!rIxF1pk*^LtpK4r6B|EEX0b^YP%3Hu4$ZR(c z(boRY)NA)>Rfqu-J(-4`PJyP-jy#ls^SN+&-eI|X-fpFq@X}_@r^XI^dlqtl6_fIA z2G?DJPCu!cyr~F>W5bpDX1G`{Y4d1RK ze|e|j(`yF2ZO;eBrsZVa1lH*%$eD^eAT6M;!By#*>_Uq#kx(Hq5`ZGYMgwK!wH3!J ziw4@g`tJP?_GfUo!{@Rke)$p0p~C{vkN|cR>_Vrv3!1lKmbM;ehSl2Ls`d>uvwSs# zkZji-4>xNj*T;Nz8qfzU|M!M_o|!hDI%t3MSQh^N2-rip&=ZR_HcjC2q*~sEP78dW zr z?x+haHRbf+JEh*bx^(oihYv5^au(O{-GUR^S_`D=4SvbV5^%nNBB+CS$gS zTfDuw$ye@_7ykH`{lcYf|F59E7Ra~W;Q`3^QZR2J`=Kfaw}+GFjo80>iQZ^Z`~A7E z_hqENWqee8@c5>osisuZg0dJh9uK*mTXu8yx>YFFSp@?@pdw?j1Tl=yz9pJ(D{p zs*$R$_3mU6u5FK}=eH)eE)L5p?-cbVt?KJ&*aS9#EnpiM0b`(Sf&DzByoZ7_pV|lZ zwfAxhx+>NkRp*WwV~*v*p-f}|nyD&LwW@=Tnh-aL@dg@hpn4m)+ky>Ss4-BqaMhfO zx)P~5SOHcMIoLkS+c7Fs$1Tj=Ik1^p(-vx`+PrcP4e?^DnOAdm z&ja`7l-<{YXYKEs7Gk`IQhVjyV(vW@a53DnpsJnAQ#a?tX1;b-bfE>P<`in?R0<1f z>0T}7y#N>A%O2on4{%}OOf&})_W*f7vBm5E0IhF_Ml((E_5c6?07*qoM6N<$g6)ir A8~^|S literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/star.png b/sources/pyside2/doc/tutorials/qmladvancedtutorial/samegame/shared/pics/star.png new file mode 100644 index 0000000000000000000000000000000000000000..defbde53ca489900adbd2eb6b6c83a97cab11e80 GIT binary patch literal 262 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 F{0r&0eaHX+ literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/tutorials/qmltutorial/declarative-tutorial3_animation.gif b/sources/pyside2/doc/tutorials/qmltutorial/declarative-tutorial3_animation.gif new file mode 100644 index 0000000000000000000000000000000000000000..80b78dea9ca1dce4faffd83888e040da13514f81 GIT binary patch literal 301974 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 PZiEGho&5L0PE7v?h;LtC literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/tutorials/qmltutorial/helloworld.tar.bz2 b/sources/pyside2/doc/tutorials/qmltutorial/helloworld.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..001a5258d4da44879582bc61d6d9f5d94d0b30fd GIT binary patch literal 2401 zcmV-n37+;sT4*^jL0KkKS=`SpZ~zZ`|BUR^06=ti|Jr}&|LXtm|N0;R004jpU=BY3 z000000000000000030+jX`!Y@hM5@#Mn;A}Vra>r44D{)IA~Au?s&?=490?y6;f4s5X`*QrHCNkpoNNhK0ksS#Bk)AD%M&zP_K z(+N&XDOR76W$`Uvjd*R78C8ngrn67NT{d$xw5&9mv}m%u)7E^291lUExPM~B8;r)M z?mfZ4_MX!*gWoVeQALlez~XQ?mpTr^!-dx=QoL5Rc3Yv#+C~qk1I}C}b_nJoXkiACIe_e;pa~qDM=RK!sV#k!=Y&1MZhmdMmYFM$T z(0?*_p3>&?BVqLvT^uzx&Bj9JXE^2foreP>A(*3(+Faah;AUnuH8eO6 z_01MM=MhAsGUi4O@HDbsO%h0ui!g|L#X%<5#u?Jp!RDwH>t5}lHP+85~d~d`#yhO&Ho|V56tcc3Eq3V zDkI#LEiJsi(e&7kGw87#KcznJqDhgNXwy|s<*>ii{l>GA*O{^_6mg8Sw=`c-t)f{r zGP@aCYZk`km4=C-sy1PHS+Hq7#vCTAYquATCe34R&5fIK+nP6-O)}SJaeU-bSCH}^ z%ALo{-)R|B)#=V25;S!t$*PWcOEV{>fr%i5-%li?jL99$gfM6W8& zJ;eQ$*irEhxSvsT);~dmB9CzRMqy(?V9cZYiYR^M&IX6;GBZ5BSCF~*pQz$dE_+X5 zVqj77lzipMgPijiJjD|+GcYz5KUw_=^K&P^?nJbS_U$8SxT1v=P;V4mn}>|#Ow0}k z66T}IIgL)z<@i!gE5vhZD(sDSMEN(M6ni-iJ zP9tfk;AC`u(-L@D6z!gZ#u{F8k@uR{XC15InN>7c}}C4oudP!xblX= z#=>~+FnLUi3lu&!UajT^MHVbrGzu(eb{z%?xiB**W>JER3zCB71I^%QJVu58It7^g%1%!pxiKE zor7`EW>5JU7bXh~%}OX()VR5G%{#qk0imHoq-b2Q^&CRuiDS?>91j_S<%%p=+%_06 zT$+r^DA2h%c__56xT~%zXj+HD+0L`(ob;a2)H5X5ELdtxsU?m`;%K=_gX$S) zMMU~MQum^YiF%2dqHI1A+e#>*LW(Hb%Z$7!fm0IoD3unO78p0`Twt)w{0bS87_@U9>KRJ%13`h|ITn!f$|uvAfb$C5tdUD4yV1IMD4r@3Z6k;E`+q)< zdqJ5&ZiMbd$5fH-NBNHc>65s5Jhvn88wL)tq@N2Xb9GL;OLz^Voc}|2ImFseNy1py zl#c1%KBJhHI^L0K#NR}~)EkO9$7#+i9y1$8 zYH28VX%t*ox!<7t%-A$3nW31t)VYxqN{c$yiFGegKYvDNy+&hVLusKkF(hJ6Q~jDB z7|@QzYG|os)>KO(jmYjgWqHd7Y2!AXBY-(gbpJ>`PmymN4ml^3#0myD93?r=2;_Ek@M&$br!TOoDjE19< zP0EFuHpxFlj^gKzZ9S7hShf!1GSTayp)x*GIJs5kiiu*1C{Uz|lAx(drMr6WPfO1z zTOxW*uXbj{xbjq5XEvJ%{w|VcXm^>KAw;6%z9~QB{AqFPW|C<}^3!}#V6o;UtUUt7 z%MT%ubI4f1+Gtp!@WGln7p99=Vve&Shiw@b?;X3@nmLfuVKzkN;#@K_e#zz<6mUMX zaIr%M^Es!)Z7nWJoC{5-x?cM3Gm`~FB-3WsP{j)sEK3T?HznlTz&DvjW0AnIHz&V54i9q&S4q6+8OL$C8J`aW4knGF z!iqb`=NBJmfObkQI!-5+=*ZdM;9!>uRH&kp#?2EyDX6I^Yo>E6tIkcZ$t2pMe02E= TUs|ex|KjdQrwS4qndPnkTugJh literal 0 HcmV?d00001 diff --git a/sources/pyside2/doc/tutorials/qmltutorial/helloworld/Cell.qml b/sources/pyside2/doc/tutorials/qmltutorial/helloworld/Cell.qml new file mode 100644 index 0000000..78ff12d --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmltutorial/helloworld/Cell.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import QtQuick 2.0 + +//![1] +Item { + id: container +//![4] + property alias cellColor: rectangle.color +//![4] +//![5] + signal clicked(color cellColor) +//![5] + + width: 40; height: 25 +//![1] + +//![2] + Rectangle { + id: rectangle + border.color: "white" + anchors.fill: parent + } +//![2] + +//![3] + MouseArea { + anchors.fill: parent + onClicked: container.clicked(container.cellColor) + } +//![3] +} +//![0] diff --git a/sources/pyside2/doc/tutorials/qmltutorial/helloworld/tutorial1.qml b/sources/pyside2/doc/tutorials/qmltutorial/helloworld/tutorial1.qml new file mode 100644 index 0000000..381aeb8 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmltutorial/helloworld/tutorial1.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +//![3] +import QtQuick 2.0 +//![3] + +//![1] +Rectangle { + id: page + width: 500; height: 200 + color: "lightgray" +//![1] + +//![2] + Text { + id: helloText + text: "Hello world!" + y: 30 + anchors.horizontalCenter: page.horizontalCenter + font.pointSize: 24; font.bold: true + } +//![2] +} +//![0] diff --git a/sources/pyside2/doc/tutorials/qmltutorial/helloworld/tutorial2.qml b/sources/pyside2/doc/tutorials/qmltutorial/helloworld/tutorial2.qml new file mode 100644 index 0000000..4fd0cbf --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmltutorial/helloworld/tutorial2.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import QtQuick 2.0 + +Rectangle { + id: page + width: 500; height: 200 + color: "lightgray" + + Text { + id: helloText + text: "Hello world!" + y: 30 + anchors.horizontalCenter: page.horizontalCenter + font.pointSize: 24; font.bold: true + } + + Grid { + id: colorPicker + x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 + rows: 2; columns: 3; spacing: 3 + +//![1] + Cell { cellColor: "red"; onClicked: helloText.color = cellColor } +//![1] + Cell { cellColor: "green"; onClicked: helloText.color = cellColor } + Cell { cellColor: "blue"; onClicked: helloText.color = cellColor } + Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor } + Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor } + Cell { cellColor: "black"; onClicked: helloText.color = cellColor } + } +} +//![0] diff --git a/sources/pyside2/doc/tutorials/qmltutorial/helloworld/tutorial3.qml b/sources/pyside2/doc/tutorials/qmltutorial/helloworld/tutorial3.qml new file mode 100644 index 0000000..fcd7d38 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmltutorial/helloworld/tutorial3.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the examples of Qt for Python. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import QtQuick 2.0 + +Rectangle { + id: page + width: 500; height: 200 + color: "lightgray" + + Text { + id: helloText + text: "Hello world!" + y: 30 + anchors.horizontalCenter: page.horizontalCenter + font.pointSize: 24; font.bold: true + +//![1] + MouseArea { id: mouseArea; anchors.fill: parent } +//![1] + +//![2] + states: State { + name: "down"; when: mouseArea.pressed == true + PropertyChanges { target: helloText; y: 160; rotation: 180; color: "red" } + } +//![2] + +//![3] + transitions: Transition { + from: ""; to: "down"; reversible: true + ParallelAnimation { + NumberAnimation { properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad } + ColorAnimation { duration: 500 } + } + } +//![3] + } + + Grid { + id: colorPicker + x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 + rows: 2; columns: 3; spacing: 3 + + Cell { cellColor: "red"; onClicked: helloText.color = cellColor } + Cell { cellColor: "green"; onClicked: helloText.color = cellColor } + Cell { cellColor: "blue"; onClicked: helloText.color = cellColor } + Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor } + Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor } + Cell { cellColor: "black"; onClicked: helloText.color = cellColor } + } +} +//![0] diff --git a/sources/pyside2/doc/tutorials/qmltutorial/index.rst b/sources/pyside2/doc/tutorials/qmltutorial/index.rst new file mode 100644 index 0000000..45a6842 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmltutorial/index.rst @@ -0,0 +1,25 @@ + +.. _qmltutorial: + +QML Tutorial +************ + +This tutorial gives an introduction to QML, the mark up language for Qt Quick. It doesn't cover everything; +the emphasis is on teaching the key principles, and features are introduced as needed. + +Through the different steps of this tutorial you will learn about QML basic types, create our own QML component +with properties and signals, and create a simple animation with the help of states and transitions. + +Chapter one starts with a minimal "Hello world" program and the following chapters introduce new concepts. + +The tutorial's source code can be downloaded :download:`here`. + +Tutorial chapters: + +.. toctree:: + :maxdepth: 1 + + step1.rst + step2.rst + step3.rst + diff --git a/sources/pyside2/doc/tutorials/qmltutorial/step1.rst b/sources/pyside2/doc/tutorials/qmltutorial/step1.rst new file mode 100644 index 0000000..bca69d9 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmltutorial/step1.rst @@ -0,0 +1,66 @@ +.. _qmlbasictypes: + +QML Tutorial 1 - Basic Types +**************************** + +This first program is a very simple "Hello world" example that introduces some basic QML concepts. +The following image is a screenshot of this program. + +.. figure:: declarative-tutorial1.png + :align: center + +Here is the QML code for the application: + +.. pysideinclude:: helloworld/tutorial1.qml + :snippet: 0 + +Walkthrough +=========== + +Import +------ + +First, you need to import the types that are required for this example. Most QML files import the built-in QML +types (like Rectangle, Image, ...) that come with Qt, using the following statement: + +.. pysideinclude:: helloworld/tutorial1.qml + :snippet: 3 + +Rectangle element +----------------- + +.. pysideinclude:: helloworld/tutorial1.qml + :snippet: 1 + +Declare a root element using the Rectangle type, which is one of the basic building blocks to create an application in QML. +Give it an ``id`` so that you can refer to it later. For example, call it "page", and also set its ``width``, +``height``, and ``color`` properties. + +Text element +------------ + +.. pysideinclude code/tutorial1.qml + :snippet: 2 + +Add a Text element as the child of the Rectangle element to display the text, 'Hello world!'. + +Use its ``y`` property to position it at 30 pixels from the top of its parent. + +The ``anchors.horizontalCenter`` property refers to the horizontal center of an element. +In this case, specify that the text element must be horizontally centered in the *page* element. + +The ``font.pointSize`` and ``font.bold properties`` are related to fonts and use the dot notation. + + +Viewing the example +------------------- + +To view what you have created, run the ``qmlscene`` tool (located in the ``bin directory`` of your Qt installation) with your +QML filename as the first argument. For example, to run the Tutorial 1 example from the install +location, you would type: + +:: + + > [QT_INSTALL_DIR]\bin\qmlscene tutorial1.qml + +[Previous :ref:`qmltutorial`][Next :ref:`qmlcomponents`] diff --git a/sources/pyside2/doc/tutorials/qmltutorial/step2.rst b/sources/pyside2/doc/tutorials/qmltutorial/step2.rst new file mode 100644 index 0000000..5b48ca6 --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmltutorial/step2.rst @@ -0,0 +1,81 @@ +.. _qmlcomponents: + +QML Tutorial 2 - QML Components +******************************* + +In this chapter, you are going to add a color picker to change the color of the text. + +.. figure:: declarative-tutorial2.png + :align: center + +The color picker is made of six cells with different colors. +To avoid writing the same code multiple times for each cell, create a new ``Cell`` component. +A component provides a way of defining a new type that you can re-use in other QML files. +A QML component is like a black-box that interacts with the outside world through its properties, signals, +and functions, and is generally defined in its own QML file. +The component's filename must always start with a capital letter. + +Here is the QML code for ``Cell``: + +.. pysideinclude:: helloworld/Cell.qml + :snippet: 0 + +Walkthrough +=========== + +The Cell Component +------------------ + +.. pysideinclude:: helloworld/Cell.qml + :snippet: 1 + +The root element of the component is an Item with the ``id``, *container*. +An Item is the most basic visual element in QML and is often used as a container for other elements. + +.. pysideinclude:: helloworld/Cell.qml + :snippet: 4 + +Its ``cellColor`` property is accessible from *outside* the component, allowing you +to instantiate cells with different colors. It is an alias to the existing color property of the rectangle +that composes the cell. + +.. pysideinclude:: helloworld/Cell.qml + :snippet: 5 + +The Cell has a signal called *clicked* with the *cellColor* parameter of type *color*. +You need this signal to change the color of the text in the main QML file later. + +.. pysideinclude:: helloworld/Cell.qml + :snippet: 2 + +The cell component is basically a colored rectangle with the ``id``, *rectangle*. + +Its ``anchors.fill`` property is a convenient way to set the size of an element. +In this case the rectangle will have the same size as its parent. + +.. pysideinclude:: helloworld/Cell.qml + :snippet: 3 + +In order to change the color of the text when the cell is clicked, a MouseArea element with +the same size as its parent is used. + +A MouseArea enables you to react to mouse events such as clicked, hover, and so on. In this case, when the MouseArea *clicked* +signal is reported, the Cell's *clicked* signal is emitted. + +The main QML file +----------------- + +In the main QML file, use the ``Cell`` component to create the color picker: + +.. pysideinclude:: helloworld/tutorial2.qml + :snippet: 0 + +Create the color picker by putting 6 cells with different colors in a grid. + +.. pysideinclude:: helloworld/tutorial2.qml + :snippet: 1 + +When the *clicked* signal of a cell is triggered, set the color of the text to the *cellColor* passed as a parameter. +You can react to a signal of a component through a handler of the name, *'onSignalName'*. + +[Previous :ref:`qmlbasictypes`][Next :ref:`qmlstatesandtransitions`] diff --git a/sources/pyside2/doc/tutorials/qmltutorial/step3.rst b/sources/pyside2/doc/tutorials/qmltutorial/step3.rst new file mode 100644 index 0000000..6d5a72f --- /dev/null +++ b/sources/pyside2/doc/tutorials/qmltutorial/step3.rst @@ -0,0 +1,46 @@ +.. _qmlstatesandtransitions: + +QML Tutorial 3 - States and Transitions +*************************************** + +In this chapter, you are guided through the steps to make the example a little more dynamic by +introducing states and transitions. For example, moving the text to the bottom of the screen, +rotate, and change its color when clicked. + +.. figure:: declarative-tutorial3_animation.gif + :align: center + +Here is the QML code for such a behavior: + +.. pysideinclude:: helloworld/tutorial3.qml + :snippet: 0 + +Walkthrough +=========== + +.. pysideinclude:: helloworld/tutorial3.qml + :snippet: 2 + +First, create a new *down* state for the text element. +Pressing the MouseArea activates this new state and releasing it deactivates the state. + +The *down* state includes a set of property changes from the implicit *default state* +(the items as they were initially defined in the QML). +Specifically, set the ``y`` property of the text to ``160``, rotation to ``180``, and ``color`` to red. + +.. pysideinclude:: helloworld/tutorial3.qml + :snippet: 3 + +To make the application even better, add a transiton between the two states so that switching between these +two states look smooth and nice. + +The ``from`` and ``to`` properties of the Transition element define the states between which the transition will run. +In this case, you want a transition from the default state to the *down* state. + +To have a similar transition effect when changing back from the *down* state to the default state, +set the ``reversible`` property to ``true``. This is equivalent to writing two transitions. + +The ParallelAnimation element makes sure that the two types of animations (number and color) start at the same time. +You could also run them one after the other by using SequentialAnimation instead. + +[Previous :ref:`qmlcomponents`] diff --git a/sources/pyside2/doc/typesystem_doc.xml.in b/sources/pyside2/doc/typesystem_doc.xml.in new file mode 100644 index 0000000..94260fe --- /dev/null +++ b/sources/pyside2/doc/typesystem_doc.xml.in @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + diff --git a/sources/pyside2/libpyside/CMakeLists.txt b/sources/pyside2/libpyside/CMakeLists.txt new file mode 100644 index 0000000..3069b1c --- /dev/null +++ b/sources/pyside2/libpyside/CMakeLists.txt @@ -0,0 +1,169 @@ +project(libpyside) + +if(${Qt5Qml_FOUND}) + if(NOT "${Qt5Qml_PRIVATE_INCLUDE_DIRS}" MATCHES "/QtQml/") + string(REPLACE "/QtCore" "/QtQml" replaceme "${Qt5Core_PRIVATE_INCLUDE_DIRS}") + list(APPEND Qt5Qml_PRIVATE_INCLUDE_DIRS ${replaceme}) + list(REMOVE_DUPLICATES Qt5Qml_PRIVATE_INCLUDE_DIRS) + endif() +endif() + +if(${Qt5Quick_FOUND}) + if(NOT "${Qt5Quick_PRIVATE_INCLUDE_DIRS}" MATCHES "/QtQuick/") + string(REPLACE "/QtCore" "/QtQuick" replaceme "${Qt5Core_PRIVATE_INCLUDE_DIRS}") + list(APPEND Qt5Quick_PRIVATE_INCLUDE_DIRS ${Qt5Qml_PRIVATE_INCLUDE_DIRS}) + list(APPEND Qt5Quick_PRIVATE_INCLUDE_DIRS ${replaceme}) + list(REMOVE_DUPLICATES Qt5Quick_PRIVATE_INCLUDE_DIRS) + endif() +endif() + +if(Qt5Qml_FOUND) + # Used for registering custom QQuickItem classes defined in Python code. + set(QML_SUPPORT 1) + set(QML_INCLUDES ${Qt5Qml_INCLUDE_DIRS}) + set(QML_LIBRARIES ${Qt5Qml_LIBRARIES}) + + if(Qt5Qml_PRIVATE_INCLUDE_DIRS) + # Used for transforming QML exceptions into Python exceptions. + set(QML_PRIVATE_API_SUPPORT 1) + set(QML_INCLUDES ${QML_INCLUDES} ${Qt5Qml_PRIVATE_INCLUDE_DIRS}) + else() + set(QML_PRIVATE_API_SUPPORT 0) + message(WARNING "QML private API include files could not be found, support for catching QML exceptions inside Python code will not work.") + endif() +else() + set(QML_SUPPORT 0) + set(QML_PRIVATE_API_SUPPORT 0) + set(QML_INCLUDES "") + set(QML_LIBRARIES "") +endif() + +qt5_wrap_cpp(DESTROYLISTENER_MOC "destroylistener.h") + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/signalmanager.cpp.in" + "${CMAKE_CURRENT_BINARY_DIR}/signalmanager.cpp" @ONLY) + +set(libpyside_SRC + dynamicqmetaobject.cpp + destroylistener.cpp + ${CMAKE_CURRENT_BINARY_DIR}/signalmanager.cpp + globalreceiver.cpp + globalreceiverv2.cpp + pysideclassinfo.cpp + pysidemetafunction.cpp + pysidesignal.cpp + pysideslot.cpp + pysideproperty.cpp + pysideqflags.cpp + pysideweakref.cpp + pyside.cpp + ${DESTROYLISTENER_MOC} +) + +# Add python files to project explorer in Qt Creator, when opening the CMakeLists.txt as a project, +# so you can look up python files with the Locator. +macro(add_other_files) + foreach(_it ${ARGN}) + if(NOT IS_DIRECTORY ${_it}) + get_filename_component(name ${_it} NAME) + if(NOT ${_it} MATCHES "^/\\\\..*$;~$") + set_source_files_properties(${_it} PROPERTIES HEADER_FILE_ONLY TRUE) + endif() + endif() + endforeach() +endmacro() + +# Test files. +file(GLOB_RECURSE pyside_folder_py_files "../*.py") + +# Mostly for setup.py. +file(GLOB setup_folder_py_files "../../../*.py") + +set(other_files ${pyside_folder_py_files} ${setup_folder_py_files}) +add_other_files(${other_files}) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${SHIBOKEN_INCLUDE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR} + ${QML_INCLUDES} + ${Qt5Core_INCLUDE_DIRS}) +add_library(pyside2 SHARED ${libpyside_SRC} ${other_files}) +target_link_libraries(pyside2 + ${SHIBOKEN_PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${QML_LIBRARIES} + ${Qt5Core_LIBRARIES}) + +set_target_properties(pyside2 PROPERTIES + VERSION ${BINDING_API_VERSION} + SOVERSION "${PYSIDE_SO_VERSION}" + OUTPUT_NAME "pyside2${pyside2_SUFFIX}${SHIBOKEN_PYTHON_SHARED_LIBRARY_SUFFIX}" + DEFINE_SYMBOL PYSIDE_EXPORTS) + +if(Qt5Core_VERSION VERSION_GREATER "5.7.1") + set_property(TARGET pyside2 PROPERTY CXX_STANDARD 11) +endif() + +if(QML_SUPPORT) + target_compile_definitions(pyside2 PUBLIC PYSIDE_QML_SUPPORT=1) +endif() + +if(PYSIDE_QT_CONF_PREFIX) + set_property(SOURCE pyside.cpp + APPEND + PROPERTY COMPILE_DEFINITIONS + PYSIDE_QT_CONF_PREFIX=${PYSIDE_QT_CONF_PREFIX}) +endif() + +# +# install stuff +# + +set(libpyside_HEADERS + destroylistener.h + dynamicqmetaobject.h + globalreceiver.h + pysideclassinfo.h + pysidemacros.h + signalmanager.h + pyside.h + pysidemetafunction.h + pysidesignal.h + pysideproperty.h + pysideqflags.h + pysideweakref.h +) + +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(LIBRARY_OUTPUT_SUFFIX ${CMAKE_DEBUG_POSTFIX}) +else() + set(LIBRARY_OUTPUT_SUFFIX ${CMAKE_RELEASE_POSTFIX}) +endif() + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D QT_NO_CAST_FROM_ASCII -D QT_NO_CAST_TO_ASCII") + +# create pkg-config file +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/pyside2.pc.in" + "${CMAKE_CURRENT_BINARY_DIR}/pyside2${pyside2_SUFFIX}.pc" @ONLY) +# create cmake-config files +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/PySide2Config.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/PySide2Config.cmake" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/PySide2Config-spec.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/PySide2Config${SHIBOKEN_PYTHON_CONFIG_SUFFIX}.cmake" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/PySide2ConfigVersion.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/PySide2ConfigVersion.cmake" @ONLY) + +install(FILES ${libpyside_HEADERS} + DESTINATION include/${BINDING_NAME}${pyside2_SUFFIX}) +install(TARGETS pyside2 EXPORT pyside2 + LIBRARY DESTINATION "${LIB_INSTALL_DIR}" + ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" + RUNTIME DESTINATION bin) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pyside2${pyside2_SUFFIX}.pc" + DESTINATION "${LIB_INSTALL_DIR}/pkgconfig") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/PySide2Config.cmake" + DESTINATION "${LIB_INSTALL_DIR}/cmake/PySide2-${BINDING_API_VERSION}") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/PySide2Config${SHIBOKEN_PYTHON_CONFIG_SUFFIX}.cmake" + DESTINATION "${LIB_INSTALL_DIR}/cmake/PySide2-${BINDING_API_VERSION}") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/PySide2ConfigVersion.cmake" + DESTINATION "${LIB_INSTALL_DIR}/cmake/PySide2-${BINDING_API_VERSION}") diff --git a/sources/pyside2/libpyside/PySide2Config-spec.cmake.in b/sources/pyside2/libpyside/PySide2Config-spec.cmake.in new file mode 100644 index 0000000..4281ade --- /dev/null +++ b/sources/pyside2/libpyside/PySide2Config-spec.cmake.in @@ -0,0 +1,18 @@ +# PYSIDE_INCLUDE_DIR - Directories to include to use PySide2 +# PYSIDE_LIBRARY - Files to link against to use PySide2 +# PYSIDE_PYTHONPATH - Path to where the PySide2 Python module files could be found +# PYSIDE_TYPESYSTEMS - Type system files that should be used by other bindings extending PySide2 + +SET(PYSIDE_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include/PySide2@pyside2_SUFFIX@") +# Platform specific library names +if(MSVC) + SET(PYSIDE_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@pyside2@pyside2_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@PYTHON_SHARED_LIBRARY_SUFFIX@.lib") +elseif(CYGWIN) + SET(PYSIDE_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@pyside2@pyside2_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@PYTHON_SHARED_LIBRARY_SUFFIX@@CMAKE_IMPORT_LIBRARY_SUFFIX@") +elseif(WIN32) + SET(PYSIDE_LIBRARY "@CMAKE_INSTALL_PREFIX@/bin/@CMAKE_SHARED_LIBRARY_PREFIX@pyside2@pyside2_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@PYTHON_SHARED_LIBRARY_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@") +else() + SET(PYSIDE_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@pyside2@pyside2_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@PYTHON_SHARED_LIBRARY_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@") +endif() +SET(PYSIDE_PYTHONPATH "@PYTHON_SITE_PACKAGES@") +SET(PYSIDE_TYPESYSTEMS "@CMAKE_INSTALL_PREFIX@/share/PySide2@pyside2_SUFFIX@/typesystems") diff --git a/sources/pyside2/libpyside/PySide2Config.cmake.in b/sources/pyside2/libpyside/PySide2Config.cmake.in new file mode 100644 index 0000000..352a899 --- /dev/null +++ b/sources/pyside2/libpyside/PySide2Config.cmake.in @@ -0,0 +1,5 @@ +if (NOT PYTHON_CONFIG_SUFFIX) + message(STATUS "PySide2Config: Using default python: @SHIBOKEN_PYTHON_CONFIG_SUFFIX@") + SET(PYTHON_CONFIG_SUFFIX @SHIBOKEN_PYTHON_CONFIG_SUFFIX@) +endif() +include(@LIB_INSTALL_DIR@/cmake/PySide2-@BINDING_API_VERSION@/PySide2Config${PYTHON_CONFIG_SUFFIX}.cmake) diff --git a/sources/pyside2/libpyside/PySide2ConfigVersion.cmake.in b/sources/pyside2/libpyside/PySide2ConfigVersion.cmake.in new file mode 100644 index 0000000..f5073ce --- /dev/null +++ b/sources/pyside2/libpyside/PySide2ConfigVersion.cmake.in @@ -0,0 +1,10 @@ +set(PACKAGE_VERSION @BINDING_API_VERSION@) + +if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") +endif("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) diff --git a/sources/pyside2/libpyside/destroylistener.cpp b/sources/pyside2/libpyside/destroylistener.cpp new file mode 100644 index 0000000..95e53f7 --- /dev/null +++ b/sources/pyside2/libpyside/destroylistener.cpp @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "destroylistener.h" + +#include +#include +#include +#include + +PySide::DestroyListener* PySide::DestroyListener::m_instance = 0; + +namespace PySide +{ + +struct DestroyListenerPrivate +{ + static bool m_destroyed; +}; + + +DestroyListener* DestroyListener::instance() +{ + if (!m_instance) + m_instance = new DestroyListener(0); + return m_instance; +} + +void DestroyListener::destroy() +{ + if (m_instance) { + m_instance->disconnect(); + delete m_instance; + m_instance = 0; + } +} + +void DestroyListener::listen(QObject *obj) +{ + SbkObject* wrapper = Shiboken::BindingManager::instance().retrieveWrapper(obj); + if (!wrapper) // avoid problem with multiple inheritance + return; + + if (Py_IsInitialized() == 0) + onObjectDestroyed(obj); + else + QObject::connect(obj, SIGNAL(destroyed(QObject*)), this, SLOT(onObjectDestroyed(QObject*)), Qt::DirectConnection); +} + +void DestroyListener::onObjectDestroyed(QObject* obj) +{ + SbkObject* wrapper = Shiboken::BindingManager::instance().retrieveWrapper(obj); + if (wrapper) //make sure the object exists before destroy + Shiboken::Object::destroy(wrapper, obj); +} + +DestroyListener::DestroyListener(QObject *parent) + : QObject(parent) +{ + m_d = new DestroyListenerPrivate(); +} + +DestroyListener::~DestroyListener() +{ + delete m_d; +} + +}//namespace + diff --git a/sources/pyside2/libpyside/destroylistener.h b/sources/pyside2/libpyside/destroylistener.h new file mode 100644 index 0000000..0a80045 --- /dev/null +++ b/sources/pyside2/libpyside/destroylistener.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDE_DESTROY_LISTENER +#define PYSIDE_DESTROY_LISTENER + + +#include +#include "pysidemacros.h" + +namespace PySide +{ +struct DestroyListenerPrivate; +/// \deprecated This class is deprecated and isn't used by libpyside anymore. +class PYSIDE_API DestroyListener : public QObject +{ + Q_OBJECT + public: + PYSIDE_DEPRECATED(static DestroyListener* instance()); + static void destroy(); + void listen(QObject* obj); + + public Q_SLOTS: + void onObjectDestroyed(QObject* obj); + + private: + static DestroyListener* m_instance; + DestroyListenerPrivate* m_d; + DestroyListener(QObject *parent); + ~DestroyListener(); +}; + +}//namespace + +#endif + diff --git a/sources/pyside2/libpyside/dynamicqmetaobject.cpp b/sources/pyside2/libpyside/dynamicqmetaobject.cpp new file mode 100644 index 0000000..af2f416 --- /dev/null +++ b/sources/pyside2/libpyside/dynamicqmetaobject.cpp @@ -0,0 +1,901 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "dynamicqmetaobject.h" +#include "dynamicqmetaobject_p.h" +#include "pysidesignal.h" +#include "pysidesignal_p.h" +#include "pysideproperty.h" +#include "pysideproperty_p.h" +#include "pysideslot_p.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define EMPTY_META_METHOD "0()" + +using namespace PySide; + +enum PropertyFlags { + Invalid = 0x00000000, + Readable = 0x00000001, + Writable = 0x00000002, + Resettable = 0x00000004, + EnumOrFlag = 0x00000008, + StdCppSet = 0x00000100, +// Override = 0x00000200, + Constant = 0x00000400, + Final = 0x00000800, + Designable = 0x00001000, + ResolveDesignable = 0x00002000, + Scriptable = 0x00004000, + ResolveScriptable = 0x00008000, + Stored = 0x00010000, + ResolveStored = 0x00020000, + Editable = 0x00040000, + ResolveEditable = 0x00080000, + User = 0x00100000, + ResolveUser = 0x00200000, + Notify = 0x00400000 +}; + +// these values are from moc source code, generator.cpp:66 +enum MethodFlags { + AccessPrivate = 0x00, + AccessProtected = 0x01, + AccessPublic = 0x02, + MethodMethod = 0x00, + MethodSignal = 0x04, + MethodSlot = 0x08, + MethodConstructor = 0x0c, + MethodCompatibility = 0x10, + MethodCloned = 0x20, + MethodScriptable = 0x40 +}; + +enum MetaDataFlags { + IsUnresolvedType = 0x80000000, + TypeNameIndexMask = 0x7FFFFFFF +}; + +class DynamicQMetaObject::DynamicQMetaObjectPrivate +{ +public: + QList m_methods; + QList m_properties; + + QMap m_info; + QByteArray m_className; + bool m_updated; // when the meta data is not update + int m_methodOffset; + int m_propertyOffset; + int m_dataSize; + int m_emptyMethod; + int m_nullIndex; + + DynamicQMetaObjectPrivate() + : m_updated(false), m_methodOffset(0), m_propertyOffset(0), + m_dataSize(0), m_emptyMethod(-1), m_nullIndex(0) {} + + int createMetaData(QMetaObject* metaObj, QLinkedList &strings); + void updateMetaObject(QMetaObject* metaObj); + void writeMethodsData(const QList& methods, unsigned int** data, QLinkedList& strings, int* prtIndex, int nullIndex, int flags); + void writeStringData(char *, QLinkedList &strings); + int getPropertyNotifyId(PySideProperty *property) const; +}; + +bool sortMethodSignalSlot(const MethodData &m1, const MethodData &m2) +{ + if (m1.methodType() == QMetaMethod::Signal) + return m2.methodType() == QMetaMethod::Slot; + return false; +} + +static int registerString(const QByteArray& s, QLinkedList& strings) +{ + int idx = 0; + QLinkedList::const_iterator it = strings.begin(); + QLinkedList::const_iterator itEnd = strings.end(); + while (it != itEnd) { + if (strcmp(*it, s) == 0) + return idx; + ++idx; + ++it; + } + strings.append(s); + return idx; +} + +static int blobSize(QLinkedList &strings) +{ + int size = strings.size() * sizeof(QByteArrayData); + + QByteArray str; + QByteArray debug_str; + foreach (const QByteArray &field, strings) { + str.append(field); + str.append(char(0)); + + debug_str.append(field); + debug_str.append('|'); + } + //qDebug()< &methods) +{ + int sum = 0; + for (int i = 0; i < methods.size(); ++i) + sum += methods.at(i).parameterCount() * 2 + 1; // nb_param*2 (type and names) +1 for return type + return sum; +} + +static void writeString(char *out, int i, const QByteArray &str, + const int offsetOfStringdataMember, int &stringdataOffset) +{ + int size = str.size(); + qptrdiff offset = offsetOfStringdataMember + stringdataOffset + - i * sizeof(QByteArrayData); + const QByteArrayData data = + Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(size, offset); + + memcpy(out + i * sizeof(QByteArrayData), &data, sizeof(QByteArrayData)); + + memcpy(out + offsetOfStringdataMember + stringdataOffset, str.constData(), size); + out[offsetOfStringdataMember + stringdataOffset + size] = '\0'; + + stringdataOffset += size + 1; +} + +static int qvariant_nameToType(const char* name) +{ + if (!name) + return 0; + + if (strcmp(name, "QVariant") == 0) + return 0xffffffff; + if (strcmp(name, "QCString") == 0) + return QMetaType::QByteArray; + if (strcmp(name, "Q_LLONG") == 0) + return QMetaType::LongLong; + if (strcmp(name, "Q_ULLONG") == 0) + return QMetaType::ULongLong; + if (strcmp(name, "QIconSet") == 0) + return QMetaType::QIcon; + + uint tp = QMetaType::type(name); + return tp < QMetaType::User ? tp : 0; +} + +/* + Returns true if the type is a QVariant types. +*/ +static bool isVariantType(const char* type) +{ + return qvariant_nameToType(type) != 0; +} + +/*! + Returns true if the type is qreal. +*/ +static bool isQRealType(const char *type) +{ + return strcmp(type, "qreal") == 0; +} + +uint PropertyData::flags() const +{ + const QByteArray btype(type()); + const char* typeName = btype.data(); + uint flags = Invalid; + if (!isVariantType(typeName)) + flags |= EnumOrFlag; + else if (!isQRealType(typeName)) + flags |= qvariant_nameToType(typeName) << 24; + + if (PySide::Property::isReadable(m_data)) + flags |= Readable; + + if (PySide::Property::isWritable(m_data)) + flags |= Writable; + + if (PySide::Property::hasReset(m_data)) + flags |= Resettable; + + if (PySide::Property::isDesignable(m_data)) + flags |= Designable; + else + flags |= ResolveDesignable; + + if (PySide::Property::isScriptable(m_data)) + flags |= Scriptable; + else + flags |= ResolveScriptable; + + if (PySide::Property::isStored(m_data)) + flags |= Stored; + else + flags |= ResolveStored; + + //EDITABLE + flags |= ResolveEditable; + + if (PySide::Property::isUser(m_data)) + flags |= User; + else + flags |= ResolveUser; + + if (m_cachedNotifyId != -1) + flags |= Notify; + + if (PySide::Property::isConstant(m_data)) + flags |= Constant; + + if (PySide::Property::isFinal(m_data)) + flags |= Final; + + return flags; +} + +// const QByteArray with EMPTY_META_METHOD, used to save some memory +const QByteArray MethodData::m_emptySig(EMPTY_META_METHOD); + +MethodData::MethodData() + : m_signature(m_emptySig) +{ +} + +MethodData::MethodData(QMetaMethod::MethodType mtype, const QByteArray& signature, const QByteArray& rtype) + : m_signature(QMetaObject::normalizedSignature(signature.constData())) + , m_rtype(QMetaObject::normalizedSignature(rtype.constData())) + , m_mtype(mtype) +{ +} + +void MethodData::clear() +{ + m_signature = m_emptySig; + m_rtype.clear(); +} + +bool MethodData::isValid() const +{ + return m_signature != m_emptySig; +} + +QList MethodData::parameterTypes() const +{ + const char *signature = m_signature.constData(); + QList list; + while (*signature && *signature != '(') + ++signature; + while (*signature && *signature != ')' && *++signature != ')') { + const char *begin = signature; + int level = 0; + while (*signature && (level > 0 || *signature != ',') && *signature != ')') { + if (*signature == '<') + ++level; + else if (*signature == '>') + --level; + ++signature; + } + list += QByteArray(begin, signature - begin); + } + return list; +} + +int MethodData::parameterCount() const +{ + return parameterTypes().size(); +} + +QByteArray MethodData::name() const +{ + return m_signature.left(qMax(m_signature.indexOf('('), 0)); +} + +PropertyData::PropertyData() + : m_cachedNotifyId(0), m_data(0) +{ +} + +PropertyData::PropertyData(const char* name, int notifyId, PySideProperty* data) + : m_name(name), m_cachedNotifyId(notifyId), m_data(data) +{ +} + +QByteArray PropertyData::type() const +{ + return QByteArray(PySide::Property::getTypeName(m_data)); +} + + +bool PropertyData::isValid() const +{ + return !m_name.isEmpty(); +} + +int PropertyData::cachedNotifyId() const +{ + return m_cachedNotifyId; +} + +bool PropertyData::operator==(const PropertyData& other) const +{ + return m_data == other.m_data; +} + +bool PropertyData::operator==(const char* name) const +{ + return m_name == name; +} + + +DynamicQMetaObject::DynamicQMetaObject(PyTypeObject* type, const QMetaObject* base) + : m_d(new DynamicQMetaObjectPrivate) +{ + d.superdata = base; + d.stringdata = NULL; + d.data = NULL; + d.extradata = NULL; + d.relatedMetaObjects = NULL; + d.static_metacall = NULL; + + m_d->m_className = QByteArray(type->tp_name).split('.').last(); + m_d->m_methodOffset = base->methodCount() - 1; + m_d->m_propertyOffset = base->propertyCount() - 1; + parsePythonType(type); +} + +DynamicQMetaObject::DynamicQMetaObject(const char* className, const QMetaObject* metaObject) + : m_d(new DynamicQMetaObjectPrivate) +{ + d.superdata = metaObject; + d.stringdata = 0; + d.data = 0; + d.extradata = 0; + d.relatedMetaObjects = NULL; + d.static_metacall = NULL; + + m_d->m_className = className; + m_d->m_methodOffset = metaObject->methodCount() - 1; + m_d->m_propertyOffset = metaObject->propertyCount() - 1; +} + +DynamicQMetaObject::~DynamicQMetaObject() +{ + free(reinterpret_cast(const_cast(d.stringdata))); + free(const_cast(d.data)); + delete m_d; +} + +int DynamicQMetaObject::addMethod(QMetaMethod::MethodType mtype, const char* signature, const char* type) +{ + int index = -1; + int counter = 0; + + QList::iterator it = m_d->m_methods.begin(); + for (; it != m_d->m_methods.end(); ++it) { + if ((it->signature() == signature) && (it->methodType() == mtype)) + return m_d->m_methodOffset + counter; + else if (!it->isValid()) { + index = counter; + } + counter++; + } + + // Common mistake not to add parentheses to the signature. + if ((strchr(signature, ')') == 0) || ((strchr(signature, '(') == 0))) { + const QString message = + QLatin1String("DynamicQMetaObject::addMethod: Invalid method signature " + "provided for ") + QLatin1String(signature); + const QByteArray messageLatin = message.toLatin1(); + PyErr_WarnEx(PyExc_RuntimeWarning, messageLatin.constData(), 0); + return -1; + } + + //has blank method + if (index != -1) { + m_d->m_methods[index] = MethodData(mtype, signature, type); + index++; + } else { + m_d->m_methods << MethodData(mtype, signature, type); + index = m_d->m_methods.size(); + } + + m_d->m_updated = false; + return m_d->m_methodOffset + index; +} + +void DynamicQMetaObject::removeMethod(QMetaMethod::MethodType mtype, uint index) +{ + const char* methodSig = method(index).methodSignature(); + QList::iterator it = m_d->m_methods.begin(); + for (; it != m_d->m_methods.end(); ++it) { + if ((it->signature() == methodSig) && (it->methodType() == mtype)){ + it->clear(); + m_d->m_updated = false; + break; + } + } +} + +int DynamicQMetaObject::addSignal(const char* signal, const char* type) +{ + return addMethod(QMetaMethod::Signal, signal, type); +} + +int DynamicQMetaObject::addSlot(const char* slot, const char* type) +{ + return addMethod(QMetaMethod::Slot, slot, type); +} + +void DynamicQMetaObject::removeSlot(uint index) +{ + removeMethod(QMetaMethod::Slot, index); +} + +void DynamicQMetaObject::removeSignal(uint index) +{ + removeMethod(QMetaMethod::Signal, index); +} + +int DynamicQMetaObject::addProperty(const char* propertyName, PyObject* data) +{ + int index = m_d->m_properties.indexOf(propertyName); + if (index != -1) + return m_d->m_propertyOffset + index; + + // retrieve notifyId + PySideProperty *property = reinterpret_cast(data); + const int notifyId = m_d->getPropertyNotifyId(property); + + //search for a empty space + PropertyData blank; + index = m_d->m_properties.indexOf(blank); + if (index != -1) { + m_d->m_properties[index] = PropertyData(propertyName, notifyId, property); + } else { + m_d->m_properties << PropertyData(propertyName, notifyId, property); + index = m_d->m_properties.size(); + } + m_d->m_updated = false; + return m_d->m_propertyOffset + index; +} + +int DynamicQMetaObject::DynamicQMetaObjectPrivate::getPropertyNotifyId(PySideProperty *property) const +{ + int notifyId = -1; + if (property->d->notify) { + const char *signalNotify = PySide::Property::getNotifyName(property); + if (signalNotify) { + const MethodData signalObject(QMetaMethod::Signal, signalNotify, ""); + notifyId = m_methods.indexOf(signalObject); + } + } + return notifyId; +} + +void DynamicQMetaObject::addInfo(const char* key, const char* value) +{ + m_d->m_info[key] = value; +} + +void DynamicQMetaObject::addInfo(QMap info) +{ + QMap::const_iterator i = info.constBegin(); + while (i != info.constEnd()) { + m_d->m_info[i.key()] = i.value(); + ++i; + } + m_d->m_updated = false; +} + +const QMetaObject* DynamicQMetaObject::update() const +{ + if (!m_d->m_updated) { + m_d->updateMetaObject(const_cast(this)); + m_d->m_updated = true; + } + return this; +} + +void DynamicQMetaObject::DynamicQMetaObjectPrivate::writeMethodsData(const QList& methods, + unsigned int** data, + QLinkedList& strings, + int* prtIndex, + int nullIndex, + int flags) +{ + int index = *prtIndex; + int paramsIndex = index + methods.count() * 5; + + QList::const_iterator it = methods.begin(); + + if (m_emptyMethod == -1) + m_emptyMethod = registerString(EMPTY_META_METHOD, strings); + + for (; it != methods.end(); ++it) { + int name_idx = 0; + int argc = it->parameterCount(); + if (it->signature() != EMPTY_META_METHOD) + name_idx = registerString(it->name(), strings); + else + name_idx = m_emptyMethod; // func name + + (*data)[index++] = name_idx; + (*data)[index++] = argc; // argc (previously: arg name) + (*data)[index++] = paramsIndex; //parameter index + (*data)[index++] = nullIndex; // tags + (*data)[index++] = flags | (it->methodType() == QMetaMethod::Signal ? MethodSignal : MethodSlot); + + if (it->methodType() == QMetaMethod::Signal) + (*data)[13] += 1; //signal count + + paramsIndex += 1 + argc * 2; + } + *prtIndex = index; +} + +void DynamicQMetaObject::parsePythonType(PyTypeObject *type) +{ + // Get all non-QObject-derived base types in method resolution order, filtering out the types + // that can't have signals, slots or properties. + // This enforces registering of all signals and slots at type parsing time, and not later at + // signal connection time, thus making sure no method indices change which would break + // existing connections. + const PyObject *mro = type->tp_mro; + const Py_ssize_t basesCount = PyTuple_GET_SIZE(mro); + PyTypeObject *qObjectType = Shiboken::Conversions::getPythonTypeObject("QObject*"); + QVector basesToCheck; + for (Py_ssize_t i = 0; i < basesCount; ++i) { + PyTypeObject *baseType = reinterpret_cast(PyTuple_GET_ITEM(mro, i)); + if (PyType_IsSubtype(baseType, qObjectType) + || baseType == reinterpret_cast(SbkObject_TypeF()) + || baseType == reinterpret_cast(&PyBaseObject_Type)) { + continue; + } else { + basesToCheck.append(baseType); + } + } + + // Prepend the actual type that we are parsing. + basesToCheck.prepend(type); + // PYSIDE-315: Handle all signals first, in all involved types. + for (int baseIndex = 0, baseEnd = basesToCheck.size(); baseIndex < baseEnd; ++baseIndex) { + PyTypeObject *baseType = basesToCheck[baseIndex]; + PyObject *attrs = baseType->tp_dict; + PyObject *key = 0; + PyObject *value = 0; + Py_ssize_t pos = 0; + + while (PyDict_Next(attrs, &pos, &key, &value)) { + if (Signal::checkType(value)) { + // Register signals. + PySideSignal *data = reinterpret_cast(value); + const char *signalName = Shiboken::String::toCString(key); + data->signalName = strdup(signalName); + QByteArray sig; + sig.reserve(128); + for (int i = 0; i < data->signaturesSize; ++i) { + sig = signalName; + sig += '('; + if (data->signatures[i]) + sig += data->signatures[i]; + sig += ')'; + if (d.superdata->indexOfSignal(sig) == -1) + addSignal(sig, "void"); + } + } + } + } + + Shiboken::AutoDecRef slotAttrName(Shiboken::String::fromCString(PYSIDE_SLOT_LIST_ATTR)); + // PYSIDE-315: Now take care of the rest. + // Signals and slots should be separated, unless the types are modified, later. + // We check for this using "is_sorted()". Sorting no longer happens at all. + for (int baseIndex = 0, baseEnd = basesToCheck.size(); baseIndex < baseEnd; ++baseIndex) { + PyTypeObject *baseType = basesToCheck[baseIndex]; + PyObject *attrs = baseType->tp_dict; + PyObject *key = 0; + PyObject *value = 0; + Py_ssize_t pos = 0; + + typedef std::pair PropPair; + QVector properties; + + while (PyDict_Next(attrs, &pos, &key, &value)) { + if (Property::checkType(value)) { + // Leave the properties to be registered after signals because they may depend on + // notify signals. + int index = d.superdata->indexOfProperty(Shiboken::String::toCString(key)); + if (index == -1) + properties << PropPair(Shiboken::String::toCString(key), value); + } else if (PyFunction_Check(value)) { + // Register slots. + if (PyObject_HasAttr(value, slotAttrName)) { + PyObject *signatureList = PyObject_GetAttr(value, slotAttrName); + for (Py_ssize_t i = 0, i_max = PyList_Size(signatureList); i < i_max; ++i) { + PyObject *signature = PyList_GET_ITEM(signatureList, i); + QByteArray sig(Shiboken::String::toCString(signature)); + // Split the slot type and its signature. + QList slotInfo = sig.split(' '); + int index = d.superdata->indexOfSlot(slotInfo[1]); + if (index == -1) + addSlot(slotInfo[1], slotInfo[0]); + } + } + } + } + + // Register properties + foreach (const PropPair &propPair, properties) + addProperty(propPair.first, propPair.second); + } +} + +/*! + Allocate the meta data table. + Returns the index in the table corresponding to the header fields count. +*/ +int DynamicQMetaObject::DynamicQMetaObjectPrivate::createMetaData(QMetaObject* metaObj, QLinkedList &strings) +{ + const int n_methods = m_methods.size(); + const int n_properties = m_properties.size(); + const int n_info = m_info.size(); + + int header[] = {7, // revision (Used by moc, qmetaobjectbuilder and qdbus) + 0, // class name index in m_metadata + n_info, 0, // classinfo and classinfo index + n_methods, 0, // method count and method list index + n_properties, 0, // prop count and prop indexes + 0, 0, // enum count and enum index + 0, 0, // constructors (since revision 2) + 0, // flags (since revision 3) + 0}; // signal count (since revision 4) + + const int HEADER_LENGHT = sizeof(header)/sizeof(int); + + m_dataSize = HEADER_LENGHT; + m_dataSize += n_info*2; //class info: name, value + m_dataSize += n_methods*5; //method: name, argc, parameters, tag, flags + m_dataSize += n_properties*4; //property: name, type, flags + m_dataSize += 1; //eod + + m_dataSize += aggregateParameterCount(m_methods); // types and parameter names + + uint* data = reinterpret_cast(realloc(const_cast(metaObj->d.data), m_dataSize * sizeof(uint))); + + Q_ASSERT(data); + std::memcpy(data, header, sizeof(header)); + + metaObj->d.data = data; + + return HEADER_LENGHT; +} + +// Writes strings to string data struct. +// The struct consists of an array of QByteArrayData, followed by a char array +// containing the actual strings. This format must match the one produced by +// moc (see generator.cpp). +void DynamicQMetaObject::DynamicQMetaObjectPrivate::writeStringData(char *out, QLinkedList &strings) +{ + Q_ASSERT(!(reinterpret_cast(out) & (Q_ALIGNOF(QByteArrayData)-1))); + + int offsetOfStringdataMember = strings.size() * sizeof(QByteArrayData); + int stringdataOffset = 0; + int i = 0; + foreach(const QByteArray& str, strings) { + writeString(out, i, str, offsetOfStringdataMember, stringdataOffset); + i++; + } +} + +QList::iterator is_sorted_until(QList::iterator first, + QList::iterator last, + bool comp(const MethodData &m1, const MethodData &m2)) +{ + if (first != last) { + QList::iterator next = first; + while (++next != last) { + if (comp(*next, *first)) + return next; + ++first; + } + } + return last; +} + +bool is_sorted(QList::iterator first, QList::iterator last, + bool comp(const MethodData &m1, const MethodData &m2)) +{ + return is_sorted_until(first, last, comp) == last; +} + +void DynamicQMetaObject::DynamicQMetaObjectPrivate::updateMetaObject(QMetaObject* metaObj) +{ + Q_ASSERT(!m_updated); + uint *data = const_cast(metaObj->d.data); + int index = 0; + QLinkedList strings; + m_dataSize = 0; + + // Recompute the size and reallocate memory + // index is set after the last header field. + index = createMetaData(metaObj, strings); + data = const_cast(metaObj->d.data); + + registerString(m_className, strings); // register class string + m_nullIndex = registerString("", strings); // register a null string + + // Write class info. + if (m_info.size()) { + if (data[3] == 0) + data[3] = index; + + QMap::const_iterator i = m_info.constBegin(); //TODO: info is a hash this can fail + while (i != m_info.constEnd()) { + int valueIndex = registerString(i.value(), strings); + int keyIndex = registerString(i.key(), strings); + data[index++] = keyIndex; + data[index++] = valueIndex; + i++; + } + } + + // Write methods first, then properties, to be consistent with moc. + // Write signals/slots (signals must be written first, see indexOfMethodRelative in + // qmetaobject.cpp). + + QList::iterator it; + // PYSIDE-315: Instead of sorting the items and maybe breaking indices, + // we ensure that the signals and slots are sorted by the improved parsePythonType(). + // The order can only become distorted if the class is modified after creation. + // In that case, we give a warning. + if (!is_sorted(m_methods.begin(), m_methods.end(), sortMethodSignalSlot)) { + const char *metaObjectName = this->m_className.data(); + PyObject *txt = PyBytes_FromFormat("\n\n*** Sort Warning ***\n" + "Signals and slots in QMetaObject '%s' are not ordered correctly, " + "this may lead to issues.\n", metaObjectName); + it = m_methods.begin(); + QList::iterator end = m_methods.end(); + QList::iterator until = is_sorted_until(m_methods.begin(), m_methods.end(), + sortMethodSignalSlot); + for (; it != end; ++it) { + PyObject *atxt = PyBytes_FromFormat("%d%s %s %s\n", it - m_methods.begin() + 1, + until >= it + 1 ? " " : "!", + it->methodType() == QMetaMethod::Signal ? "Signal" : "Slot ", + it->signature().data() ); + PyBytes_ConcatAndDel(&txt, atxt); + } + PyErr_WarnEx(PyExc_RuntimeWarning, PyBytes_AsString(txt), 0); + Py_DECREF(txt); + // Prevent a warning from being turned into an error. We cannot easily unwind. + PyErr_Clear(); + } + + if (m_methods.size()) { + if (data[5] == 0) + data[5] = index; + + writeMethodsData(m_methods, &data, strings, &index, m_nullIndex, AccessPublic); + } + + // Write signal/slots parameters. + if (m_methods.size()) { + for (it = m_methods.begin(); it != m_methods.end(); ++it) { + QList paramTypeNames = it->parameterTypes(); + int paramCount = paramTypeNames.size(); + for (int i = -1; i < paramCount; ++i) { + const QByteArray &typeName = (i < 0) ? it->returnType() : paramTypeNames.at(i); + int typeInfo; + if (QtPrivate::isBuiltinType(typeName)) + typeInfo = QMetaType::type(typeName); + else + typeInfo = IsUnresolvedType | registerString(typeName, strings); + data[index++] = typeInfo; + } + + // Parameter names (use a null string) + for (int i = 0; i < paramCount; ++i) { + data[index++] = m_nullIndex; + } + } + } + + // Write properties. + if (m_properties.size()) { + if (data[7] == 0) + data[7] = index; + + QList::const_iterator i = m_properties.constBegin(); + while (i != m_properties.constEnd()) { + if (i->isValid()) { + data[index++] = registerString(i->name(), strings); // name + } else + data[index++] = m_nullIndex; + + // Find out the property type index. + int typeInfo = m_nullIndex; + if (i->isValid()) { + const QByteArray &typeName = i->type(); + if (QtPrivate::isBuiltinType(typeName)) + typeInfo = QMetaType::type(typeName); + else + typeInfo = IsUnresolvedType | registerString(typeName, strings); + } + data[index++] = typeInfo; // normalized type + + data[index++] = i->flags(); + i++; + } + + // Write properties notify. + i = m_properties.constBegin(); + while (i != m_properties.constEnd()) { + // Recompute notifyId, because sorting the methods might have changed the relative + // index. + const int notifyId = getPropertyNotifyId(i->data()); + data[index++] = notifyId >= 0 ? static_cast(notifyId) : 0; //signal notify index + i++; + } + } + + data[index++] = 0; // the end + + // Create the m_metadata string. + int size = blobSize(strings); + char *blob = + reinterpret_cast(realloc(reinterpret_cast(const_cast(metaObj->d.stringdata)), size)); + writeStringData(blob, strings); + + metaObj->d.stringdata = reinterpret_cast(blob); + metaObj->d.data = data; +} diff --git a/sources/pyside2/libpyside/dynamicqmetaobject.h b/sources/pyside2/libpyside/dynamicqmetaobject.h new file mode 100644 index 0000000..5ecce50 --- /dev/null +++ b/sources/pyside2/libpyside/dynamicqmetaobject.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DYNAMICQMETAOBJECT_H +#define DYNAMICQMETAOBJECT_H + +#include "pysidemacros.h" +#include +#include +#include + +namespace PySide +{ + +class DynamicQMetaObject : public QMetaObject +{ +public: + DynamicQMetaObject(const char* className, const QMetaObject* metaObject); + DynamicQMetaObject(PyTypeObject* type, const QMetaObject* metaobject); + ~DynamicQMetaObject(); + + + int addMethod(QMetaMethod::MethodType mtype, const char* signature, const char* type); + void removeMethod(QMetaMethod::MethodType mtype, uint index); + int addSignal(const char* signal, const char* type = 0); + int addSlot(const char* slot, const char* type = 0); + int addProperty(const char* property, PyObject* data); + void addInfo(const char* key, const char* value); + void addInfo(QMap info); + + void removeSignal(uint idex); + void removeSlot(uint index); + void removeProperty(uint index); + + const QMetaObject* update() const; + +private: + class DynamicQMetaObjectPrivate; + DynamicQMetaObjectPrivate* m_d; + + void parsePythonType(PyTypeObject *type); +}; + + +} +#endif diff --git a/sources/pyside2/libpyside/dynamicqmetaobject_p.h b/sources/pyside2/libpyside/dynamicqmetaobject_p.h new file mode 100644 index 0000000..219ffc4 --- /dev/null +++ b/sources/pyside2/libpyside/dynamicqmetaobject_p.h @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DYNAMICMETAPROPERTY_P_H +#define DYNAMICMETAPROPERTY_P_H + +#include +#include +#include + +#define GLOBAL_RECEIVER_CLASS_NAME "__GlobalReceiver__" + +struct PySideProperty; +namespace PySide +{ + class MethodData + { + public: + MethodData(); + /** + * \param signature method signature + * \param type method return type + */ + MethodData(QMetaMethod::MethodType mtype, + const QByteArray& signature, + const QByteArray& rtype = QByteArray("void")); + void clear(); + bool isValid() const; + const QByteArray& signature() const { return m_signature; } + const QByteArray& returnType() const { return m_rtype; } + QMetaMethod::MethodType methodType() const { return m_mtype; } + //Qt5 moc: now we have to store method parameter names, count, type + QList parameterTypes() const; + int parameterCount() const; + QByteArray name() const; + bool operator==(const MethodData& other) const; + + private: + QByteArray m_signature; + QByteArray m_rtype; + QMetaMethod::MethodType m_mtype; + static const QByteArray m_emptySig; + }; + + class PropertyData + { + public: + PropertyData(); + PropertyData(const char *name, int cachedNotifyId = 0, PySideProperty *data = 0); + const QByteArray& name() const { return m_name; } + PySideProperty *data() const { return m_data; } + QByteArray type() const; + uint flags() const; + bool isValid() const; + int cachedNotifyId() const; + bool operator==(const PropertyData& other) const; + bool operator==(const char* name) const; + + private: + QByteArray m_name; + int m_cachedNotifyId; + PySideProperty* m_data; + }; + +inline bool MethodData::operator==(const MethodData& other) const +{ + return m_mtype == other.methodType() && m_signature == other.signature(); +} + +} + +#endif diff --git a/sources/pyside2/libpyside/globalreceiver.cpp b/sources/pyside2/libpyside/globalreceiver.cpp new file mode 100644 index 0000000..ee1f635 --- /dev/null +++ b/sources/pyside2/libpyside/globalreceiver.cpp @@ -0,0 +1,329 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "globalreceiver.h" +#include "dynamicqmetaobject_p.h" +#include "pysideweakref.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "signalmanager.h" + +#define RECEIVER_DESTROYED_SLOT_NAME "__receiverDestroyed__(QObject*)" + +namespace PySide +{ +class DynamicSlotData +{ + public: + DynamicSlotData(int id, PyObject* callback, GlobalReceiver* parent); + void addRef(const QObject* o); + void decRef(const QObject* o); + void clear(); + int hasRefTo(const QObject* o) const; + int refCount() const; + int id() const; + PyObject* call(PyObject* args); + ~DynamicSlotData(); + static void onCallbackDestroyed(void* data); + + private: + int m_id; + bool m_isMethod; + PyObject* m_callback; + PyObject* m_pythonSelf; + PyObject* m_pyClass; + PyObject* m_weakRef; + GlobalReceiver* m_parent; + QLinkedList m_refs; +}; + +} + +using namespace PySide; + +DynamicSlotData::DynamicSlotData(int id, PyObject* callback, GlobalReceiver* parent) + : m_id(id), m_pythonSelf(0), m_pyClass(0), m_weakRef(0), m_parent(parent) +{ + Shiboken::GilState gil; + + m_isMethod = PyMethod_Check(callback); + if (m_isMethod) { + //Can not store calback pointe because this will be destroyed at the end of the scope + //To avoid increment intance reference keep the callback information + m_callback = PyMethod_GET_FUNCTION(callback); +#ifdef IS_PY3K + m_pyClass = 0; +#else + m_pyClass = PyMethod_GET_CLASS(callback); +#endif + + m_pythonSelf = PyMethod_GET_SELF(callback); + + //monitor class from method lifetime + m_weakRef = WeakRef::create(m_pythonSelf, DynamicSlotData::onCallbackDestroyed, this); + } else { + m_callback = callback; + Py_INCREF(m_callback); + } +} + +PyObject* DynamicSlotData::call(PyObject* args) +{ + PyObject* callback = m_callback; + + //create a callback based on method data + Shiboken::GilState gil; + if (m_isMethod) +#ifdef IS_PY3K + callback = PyMethod_New(callback, m_pythonSelf); +#else + callback = PyMethod_New(callback, m_pythonSelf, m_pyClass); +#endif + + PyObject* result = PyObject_CallObject(callback, args); + + if (m_isMethod) + Py_DECREF(callback); + + return result; +} + +void DynamicSlotData::addRef(const QObject *o) +{ + m_refs.append(o); +} + +void DynamicSlotData::decRef(const QObject *o) +{ + m_refs.removeOne(o); +} + +int DynamicSlotData::refCount() const +{ + return m_refs.size(); +} + +int DynamicSlotData::id() const +{ + return m_id; +} + +int DynamicSlotData::hasRefTo(const QObject *o) const +{ + return m_refs.count(o); +} + +void DynamicSlotData::clear() +{ + Shiboken::GilState gil; + Py_XDECREF(m_weakRef); + m_weakRef = 0; + m_refs.clear(); +} + +DynamicSlotData::~DynamicSlotData() +{ + Shiboken::GilState gil; + clear(); + if (!m_isMethod) + Py_DECREF(m_callback); +} + +void DynamicSlotData::onCallbackDestroyed(void *data) +{ + Shiboken::GilState gil; + DynamicSlotData* self = reinterpret_cast(data); + + //Disconnect all sources + QMetaMethod m = self->m_parent->metaObject()->method(self->m_id); + QByteArray methodName = QByteArray::number(m.methodType()).append(m.methodSignature()); + QLinkedList sources = self->m_refs; + foreach(const QObject* src, sources) + const_cast(src)->disconnect(self->m_parent, methodName); + self->m_weakRef = 0; +} + +GlobalReceiver::GlobalReceiver() + : m_metaObject(GLOBAL_RECEIVER_CLASS_NAME, &QObject::staticMetaObject) +{ + //slot used to be notifyed of object destrouction + m_metaObject.addSlot(RECEIVER_DESTROYED_SLOT_NAME); + m_metaObject.update(); + setObjectName(QLatin1String("GLOBAL RECEIVER")); +} + +GlobalReceiver::~GlobalReceiver() +{ + while(!m_slotReceivers.empty()) { + DynamicSlotData* data = m_slotReceivers.take(m_slotReceivers.begin().key()); + data->clear(); + delete data; + } +} + +void GlobalReceiver::connectNotify(QObject* source, int slotId) +{ + if (m_slotReceivers.contains(slotId)) { + DynamicSlotData* data = m_slotReceivers[slotId]; + if (!data->hasRefTo(source)) + QObject::connect(source, SIGNAL(destroyed(QObject*)), this, "1" RECEIVER_DESTROYED_SLOT_NAME); + data->addRef(source); + } +} + +void GlobalReceiver::disconnectNotify(QObject* source, int slotId) +{ + if (m_slotReceivers.contains(slotId)) { + DynamicSlotData *data = m_slotReceivers[slotId]; + data->decRef(source); + if (data->refCount() == 0) + removeSlot(slotId); + + if (!hasConnectionWith(source)) + QObject::disconnect(source, SIGNAL(destroyed(QObject*)), this, "1" RECEIVER_DESTROYED_SLOT_NAME); + } +} + +const QMetaObject* GlobalReceiver::metaObject() const +{ + return m_metaObject.update(); +} + +int GlobalReceiver::addSlot(const char* slot, PyObject* callback) +{ + int slotId = m_metaObject.addSlot(slot); + if (!m_slotReceivers.contains(slotId)) + m_slotReceivers[slotId] = new DynamicSlotData(slotId, callback, this); + + bool isShortCircuit = true; + for (int i = 0; slot[i]; ++i) { + if (slot[i] == '(') { + isShortCircuit = false; + break; + } + } + + if (isShortCircuit) + m_shortCircuitSlots << slotId; + + Q_ASSERT(slotId >= QObject::staticMetaObject.methodCount()); + return slotId; +} + +void GlobalReceiver::removeSlot(int slotId) +{ + if (m_slotReceivers.contains(slotId)) { + delete m_slotReceivers.take(slotId); + m_metaObject.removeSlot(slotId); + m_shortCircuitSlots.remove(slotId); + } +} + +bool GlobalReceiver::hasConnectionWith(const QObject *object) +{ + QHash::iterator i = m_slotReceivers.begin(); + while(i != m_slotReceivers.end()) { + if (i.value()->hasRefTo(object)) { + return true; + } + i++; + } + return false; +} + +int GlobalReceiver::qt_metacall(QMetaObject::Call call, int id, void** args) +{ + Q_ASSERT(call == QMetaObject::InvokeMetaMethod); + Q_ASSERT(id >= QObject::staticMetaObject.methodCount()); + QMetaMethod slot = metaObject()->method(id); + Q_ASSERT(slot.methodType() == QMetaMethod::Slot); + + if (strcmp(slot.methodSignature(), RECEIVER_DESTROYED_SLOT_NAME) == 0) { + QObject *arg = *(QObject**)args[1]; + + //avoid hash changes during the destruction + QHash copy = m_slotReceivers; + QHash::iterator i = copy.begin(); + while(i != copy.end()) { + //Remove all refs + int refs = i.value()->hasRefTo(arg); + while(refs) { + disconnectNotify(arg, i.key()); + refs--; + } + i++; + } + return -1; + } + + DynamicSlotData* data = m_slotReceivers.value(id); + if (!data) { + qWarning() << "Unknown global slot, id:" << id; + return -1; + } + + Shiboken::GilState gil; + PyObject* retval = 0; + if (m_shortCircuitSlots.contains(id)) { + retval = data->call(reinterpret_cast(args[1])); + } else { + QList paramTypes = slot.parameterTypes(); + Shiboken::AutoDecRef preparedArgs(PyTuple_New(paramTypes.count())); + for (int i = 0, max = paramTypes.count(); i < max; ++i) { + const QByteArray& paramType = paramTypes[i]; + Shiboken::Conversions::SpecificConverter converter(paramType.constData()); + PyTuple_SET_ITEM(preparedArgs.object(), i, converter.toPython(args[i+1])); + } + retval = data->call(preparedArgs); + } + + if (!retval) + PyErr_Print(); + else + Py_DECREF(retval); + + return -1; +} diff --git a/sources/pyside2/libpyside/globalreceiver.h b/sources/pyside2/libpyside/globalreceiver.h new file mode 100644 index 0000000..426d40b --- /dev/null +++ b/sources/pyside2/libpyside/globalreceiver.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef GLOBALRECEIVER_H +#define GLOBALRECEIVER_H + +#include +#include +#include +#include +#include "dynamicqmetaobject.h" + +namespace PySide +{ + +class DynamicSlotData; + +class GlobalReceiver : public QObject +{ +public: + GlobalReceiver(); + ~GlobalReceiver(); + int qt_metacall(QMetaObject::Call call, int id, void** args); + const QMetaObject* metaObject() const; + int addSlot(const char* slot, PyObject* callback); + void removeSlot(int slotId); + void connectNotify(QObject* sender, int slotId); + void disconnectNotify(QObject* sender, int slotId); + bool hasConnectionWith(const QObject* object); + +protected: + using QObject::connectNotify; + using QObject::disconnectNotify; + +private: + DynamicQMetaObject m_metaObject; + QSet m_shortCircuitSlots; + QHash m_slotReceivers; +}; + +} + +#endif + diff --git a/sources/pyside2/libpyside/globalreceiverv2.cpp b/sources/pyside2/libpyside/globalreceiverv2.cpp new file mode 100644 index 0000000..05565e5 --- /dev/null +++ b/sources/pyside2/libpyside/globalreceiverv2.cpp @@ -0,0 +1,357 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "globalreceiverv2.h" +#include "dynamicqmetaobject_p.h" +#include "pysideweakref.h" + +#include +#include +#include +#include +#include +#include + +#include "signalmanager.h" + +#define RECEIVER_DESTROYED_SLOT_NAME "__receiverDestroyed__(QObject*)" + +namespace +{ + static int DESTROY_SIGNAL_ID = 0; + static int DESTROY_SLOT_ID = 0; +} + +namespace PySide +{ +class DynamicSlotDataV2 +{ + public: + DynamicSlotDataV2(PyObject* callback, GlobalReceiverV2* parent); + ~DynamicSlotDataV2(); + + int addSlot(const char* signature); + int id(const char* signature) const; + PyObject* callback(); + QByteArray hash() const; + void notify(); + + static void onCallbackDestroyed(void* data); + static QByteArray hash(PyObject *callback); + + + private: + bool m_isMethod; + PyObject* m_callback; + PyObject* m_pythonSelf; + PyObject* m_pyClass; + PyObject* m_weakRef; + QMap m_signatures; + GlobalReceiverV2* m_parent; + QByteArray m_hash; +}; + +} + +using namespace PySide; + +DynamicSlotDataV2::DynamicSlotDataV2(PyObject* callback, GlobalReceiverV2* parent) + : m_pythonSelf(0), m_pyClass(0), m_weakRef(0), m_parent(parent) +{ + Shiboken::GilState gil; + + m_isMethod = PyMethod_Check(callback); + if (m_isMethod) { + //Can not store calback pointe because this will be destroyed at the end of the scope + //To avoid increment intance reference keep the callback information + m_callback = PyMethod_GET_FUNCTION(callback); +#ifndef IS_PY3K + m_pyClass = PyMethod_GET_CLASS(callback); +#endif + m_pythonSelf = PyMethod_GET_SELF(callback); + + //monitor class from method lifetime + m_weakRef = WeakRef::create(m_pythonSelf, DynamicSlotDataV2::onCallbackDestroyed, this); + + m_hash = QByteArray::number((qlonglong)PyObject_Hash(m_callback)) + + QByteArray::number((qlonglong)PyObject_Hash(m_pythonSelf)); + + } else { + m_callback = callback; + Py_INCREF(m_callback); + + m_hash = QByteArray::number((qlonglong)PyObject_Hash(m_callback)); + } +} + +QByteArray DynamicSlotDataV2::hash() const +{ + return m_hash; +} + +QByteArray DynamicSlotDataV2::hash(PyObject* callback) +{ + Shiboken::GilState gil; + if (PyMethod_Check(callback)) + return QByteArray::number((qlonglong)PyObject_Hash(PyMethod_GET_FUNCTION(callback))) + + QByteArray::number((qlonglong)PyObject_Hash(PyMethod_GET_SELF(callback))); + else + return QByteArray::number((qlonglong)PyObject_Hash(callback)); +} + +PyObject* DynamicSlotDataV2::callback() +{ + PyObject* callback = m_callback; + + //create a callback based on method data + if (m_isMethod) +#ifdef IS_PY3K + callback = PyMethod_New(m_callback, m_pythonSelf); +#else + callback = PyMethod_New(m_callback, m_pythonSelf, m_pyClass); +#endif + else + Py_INCREF(callback); + + return callback; +} + +int DynamicSlotDataV2::id(const char* signature) const +{ + if (m_signatures.contains(signature)) + return m_signatures[signature]; + return -1; +} + +int DynamicSlotDataV2::addSlot(const char* signature) +{ + int index = id(signature); + if (index == -1) { + DynamicQMetaObject *dmo = const_cast(reinterpret_cast(m_parent->metaObject())); + index = m_signatures[signature] = dmo->addSlot(signature); + } + return index; +} + +void DynamicSlotDataV2::onCallbackDestroyed(void *data) +{ + DynamicSlotDataV2* self = reinterpret_cast(data); + self->m_weakRef = 0; + Py_BEGIN_ALLOW_THREADS + delete self->m_parent; + Py_END_ALLOW_THREADS +} + +DynamicSlotDataV2::~DynamicSlotDataV2() +{ + Shiboken::GilState gil; + + Py_XDECREF(m_weakRef); + m_weakRef = 0; + + if (!m_isMethod) + Py_DECREF(m_callback); +} + +GlobalReceiverV2::GlobalReceiverV2(PyObject *callback, SharedMap map) + : QObject(0), m_metaObject(GLOBAL_RECEIVER_CLASS_NAME, &QObject::staticMetaObject), m_sharedMap(map) +{ + m_data = new DynamicSlotDataV2(callback, this); + m_metaObject.addSlot(RECEIVER_DESTROYED_SLOT_NAME); + m_metaObject.update(); + m_refs.append(NULL); + + + if (DESTROY_SIGNAL_ID == 0) + DESTROY_SIGNAL_ID = QObject::staticMetaObject.indexOfSignal("destroyed(QObject*)"); + + if (DESTROY_SLOT_ID == 0) + DESTROY_SLOT_ID = m_metaObject.indexOfSlot(RECEIVER_DESTROYED_SLOT_NAME); + + +} + +GlobalReceiverV2::~GlobalReceiverV2() +{ + m_refs.clear(); + // Remove itself from map. + m_sharedMap->remove(m_data->hash()); + // Suppress handling of destroyed() for objects whose last reference is contained inside + // the callback object that will now be deleted. The reference could be a default argument, + // a callback local variable, etc. + // The signal has to be suppressed because it would lead to the following situation: + // Callback is deleted, hence the last reference is decremented, + // leading to the object being deleted, which emits destroyed(), which would try to invoke + // the already deleted callback, and also try to delete the object again. + DynamicSlotDataV2 *data = m_data; + m_data = Q_NULLPTR; + delete data; +} + +int GlobalReceiverV2::addSlot(const char* signature) +{ + return m_data->addSlot(signature); +} + +void GlobalReceiverV2::incRef(const QObject* link) +{ + if (link) { + if (!m_refs.contains(link)) { + bool connected; + Py_BEGIN_ALLOW_THREADS + connected = QMetaObject::connect(link, DESTROY_SIGNAL_ID, this, DESTROY_SLOT_ID); + Py_END_ALLOW_THREADS + if (connected) + m_refs.append(link); + else + Q_ASSERT(false); + } else { + m_refs.append(link); + } + } else { + m_refs.append(NULL); + } +} + +void GlobalReceiverV2::decRef(const QObject* link) +{ + if (m_refs.size() <= 0) + return; + + + m_refs.removeOne(link); + if (link) { + if (!m_refs.contains(link)) { + bool result; + Py_BEGIN_ALLOW_THREADS + result = QMetaObject::disconnect(link, DESTROY_SIGNAL_ID, this, DESTROY_SLOT_ID); + Py_END_ALLOW_THREADS + Q_ASSERT(result); + if (!result) + return; + } + } + + if (m_refs.size() == 0) + Py_BEGIN_ALLOW_THREADS + delete this; + Py_END_ALLOW_THREADS + +} + +int GlobalReceiverV2::refCount(const QObject* link) const +{ + if (link) + return m_refs.count(link); + + return m_refs.size(); +} + +void GlobalReceiverV2::notify() +{ + QSet objs = QSet::fromList(m_refs); + Py_BEGIN_ALLOW_THREADS + foreach(const QObject* o, objs) { + QMetaObject::disconnect(o, DESTROY_SIGNAL_ID, this, DESTROY_SLOT_ID); + QMetaObject::connect(o, DESTROY_SIGNAL_ID, this, DESTROY_SLOT_ID); + } + Py_END_ALLOW_THREADS +} + +QByteArray GlobalReceiverV2::hash() const +{ + return m_data->hash(); +} + +QByteArray GlobalReceiverV2::hash(PyObject* callback) +{ + return DynamicSlotDataV2::hash(callback); +} + +const QMetaObject* GlobalReceiverV2::metaObject() const +{ + return m_metaObject.update(); +} + +int GlobalReceiverV2::qt_metacall(QMetaObject::Call call, int id, void** args) +{ + Shiboken::GilState gil; + Q_ASSERT(call == QMetaObject::InvokeMetaMethod); + Q_ASSERT(id >= QObject::staticMetaObject.methodCount()); + + QMetaMethod slot = metaObject()->method(id); + Q_ASSERT(slot.methodType() == QMetaMethod::Slot); + + if (!m_data) { + if (id != DESTROY_SLOT_ID) { + const QByteArray message = "PySide2 Warning: Skipping callback call " + + slot.methodSignature() + " because the callback object is being destructed."; + PyErr_WarnEx(PyExc_RuntimeWarning, message.constData(), 0); + } + return -1; + } + + if (id == DESTROY_SLOT_ID) { + if (m_refs.size() == 0) + return -1; + QObject *obj = *(QObject**)args[1]; + incRef(); //keep the object live (safe ref) + m_refs.removeAll(obj); // remove all refs to this object + decRef(); //remove the safe ref + } else { + bool isShortCuit = (strstr(slot.methodSignature(), "(") == 0); + Shiboken::AutoDecRef callback(m_data->callback()); + SignalManager::callPythonMetaMethod(slot, args, callback, isShortCuit); + } + + // SignalManager::callPythonMetaMethod might have failed, in that case we have to print the + // error so it considered "handled". + if (PyErr_Occurred()) { + int reclimit = Py_GetRecursionLimit(); + // Inspired by Python's errors.c: PyErr_GivenExceptionMatches() function. + // Temporarily bump the recursion limit, so that PyErr_Print will not raise a recursion + // error again. Don't do it when the limit is already insanely high, to avoid overflow. + if (reclimit < (1 << 30)) + Py_SetRecursionLimit(reclimit + 5); + PyErr_Print(); + Py_SetRecursionLimit(reclimit); + } + + return -1; +} diff --git a/sources/pyside2/libpyside/globalreceiverv2.h b/sources/pyside2/libpyside/globalreceiverv2.h new file mode 100644 index 0000000..880719d --- /dev/null +++ b/sources/pyside2/libpyside/globalreceiverv2.h @@ -0,0 +1,148 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef GLOBALRECEIVER_V2_H +#define GLOBALRECEIVER_V2_H + +#include +#include +#include +#include +#include +#include +#include + +#include "dynamicqmetaobject.h" + +namespace PySide +{ + +class DynamicSlotDataV2; +class GlobalReceiverV2; + +typedef QMap GlobalReceiverV2Map; +typedef QSharedPointer SharedMap; + +/** + * A class used to make the link between the C++ Signal/Slot and Python callback + * This class is used internally by SignalManager + **/ + +class GlobalReceiverV2 : public QObject +{ +public: + /** + * Create a GlobalReceiver object that will call 'callback' argumentent + * + * @param callback A Python callable object (can be a method or not) + * @param ma A SharedPointer used on Signal manager that contains all instaces of GlobalReceiver + **/ + GlobalReceiverV2(PyObject *callback, SharedMap map); + + /** + * Destructor + **/ + ~GlobalReceiverV2(); + + /** + * Reimplemented function from QObject + **/ + int qt_metacall(QMetaObject::Call call, int id, void** args); + const QMetaObject* metaObject() const; + + /** + * Add a extra slot to this object + * + * @param signature The signature of the slot to be added + * @return The index of this slot on metaobject + **/ + int addSlot(const char* signature); + + /** + * Notify to GlobalReceiver about when a new connection was made + **/ + void notify(); + + /** + * Used to increment the reference of the GlobalReceiver object + * + * @param link This is a optional paramenter used to link the ref to some QObject life + **/ + void incRef(const QObject* link = 0); + + /** + * Used to decrement the reference of the GlobalReceiver object + * + * @param link This is a optional paramenter used to dismiss the link ref to some QObject + **/ + void decRef(const QObject* link = 0); + + /* + * Return the count of refs which the GlobalReceiver has + * + * @param link If any QObject was passed, the function return the number of references relative to this 'link' object + * @return The number of references + **/ + int refCount(const QObject* link) const; + + /** + * Use to retrive the unique hash of this GlobalReceiver object + * + * @return a string with a unique id based on GlobalReceiver contents + **/ + QByteArray hash() const; + + /** + * Use to retrive the unique hash of the PyObject based on GlobalReceiver rules + * + * @param callback The Python callable object used to calculate the id + * @return a string with a unique id based on GlobalReceiver contents + **/ + static QByteArray hash(PyObject* callback); + +private: + DynamicQMetaObject m_metaObject; + DynamicSlotDataV2 *m_data; + QList m_refs; + SharedMap m_sharedMap; +}; + +} + +#endif diff --git a/sources/pyside2/libpyside/pyside.cpp b/sources/pyside2/libpyside/pyside.cpp new file mode 100644 index 0000000..b4f7d87 --- /dev/null +++ b/sources/pyside2/libpyside/pyside.cpp @@ -0,0 +1,549 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "pyside.h" +#include "signalmanager.h" +#include "pysideclassinfo_p.h" +#include "pysideproperty_p.h" +#include "pysideproperty.h" +#include "pysidesignal.h" +#include "pysidesignal_p.h" +#include "pysideslot_p.h" +#include "pysidemetafunction_p.h" +#include "pysidemetafunction.h" +#include "dynamicqmetaobject.h" +#include "destroylistener.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static QStack cleanupFunctionList; +static void* qobjectNextAddr; + +QT_BEGIN_NAMESPACE +extern bool qRegisterResourceData(int, const unsigned char *, const unsigned char *, + const unsigned char *); +QT_END_NAMESPACE + +namespace PySide +{ + +void init(PyObject *module) +{ + qobjectNextAddr = 0; + ClassInfo::init(module); + Signal::init(module); + Slot::init(module); + Property::init(module); + MetaFunction::init(module); + // Init signal manager, so it will register some meta types used by QVariant. + SignalManager::instance(); +} + +bool fillQtProperties(PyObject* qObj, const QMetaObject* metaObj, PyObject* kwds, const char** blackList, unsigned int blackListSize) +{ + + PyObject *key, *value; + Py_ssize_t pos = 0; + + while (PyDict_Next(kwds, &pos, &key, &value)) { + if (!blackListSize || !std::binary_search(blackList, blackList + blackListSize, std::string(Shiboken::String::toCString(key)))) { + QByteArray propName(Shiboken::String::toCString(key)); + if (metaObj->indexOfProperty(propName) != -1) { + propName[0] = std::toupper(propName[0]); + propName.prepend("set"); + + Shiboken::AutoDecRef propSetter(PyObject_GetAttrString(qObj, propName.constData())); + if (!propSetter.isNull()) { + Shiboken::AutoDecRef args(PyTuple_Pack(1, value)); + Shiboken::AutoDecRef retval(PyObject_CallObject(propSetter, args)); + } else { + PyObject* attr = PyObject_GenericGetAttr(qObj, key); + if (PySide::Property::checkType(attr)) + PySide::Property::setValue(reinterpret_cast(attr), qObj, value); + } + } else { + propName.append("()"); + if (metaObj->indexOfSignal(propName) != -1) { + propName.prepend('2'); + PySide::Signal::connect(qObj, propName, value); + } else { + PyErr_Format(PyExc_AttributeError, "'%s' is not a Qt property or a signal", propName.constData()); + return false; + }; + } + } + } + return true; +} + +void registerCleanupFunction(CleanupFunction func) +{ + cleanupFunctionList.push(func); +} + +void runCleanupFunctions() +{ + //PySide::DestroyListener::instance()->destroy(); + while (!cleanupFunctionList.isEmpty()) { + CleanupFunction f = cleanupFunctionList.pop(); + f(); + } + PySide::DestroyListener::destroy(); +} + +static void destructionVisitor(SbkObject* pyObj, void* data) +{ + void** realData = reinterpret_cast(data); + SbkObject* pyQApp = reinterpret_cast(realData[0]); + PyTypeObject* pyQObjectType = reinterpret_cast(realData[1]); + + if (pyObj != pyQApp && PyObject_TypeCheck(pyObj, pyQObjectType)) { + if (Shiboken::Object::hasOwnership(pyObj) && Shiboken::Object::isValid(pyObj, false)) { + Shiboken::Object::setValidCpp(pyObj, false); + + Py_BEGIN_ALLOW_THREADS + Shiboken::callCppDestructor(Shiboken::Object::cppPointer(pyObj, pyQObjectType)); + Py_END_ALLOW_THREADS + } + } + +}; + +void destroyQCoreApplication() +{ + QCoreApplication* app = QCoreApplication::instance(); + if (!app) + return; + SignalManager::instance().clear(); + + Shiboken::BindingManager& bm = Shiboken::BindingManager::instance(); + SbkObject* pyQApp = bm.retrieveWrapper(app); + PyTypeObject* pyQObjectType = Shiboken::Conversions::getPythonTypeObject("QObject*"); + assert(pyQObjectType); + + void* data[2] = {pyQApp, pyQObjectType}; + bm.visitAllPyObjects(&destructionVisitor, &data); + + // in the end destroy app + // Allow threads because the destructor calls + // QThreadPool::globalInstance().waitForDone() which may deadlock on the GIL + // if there is a worker working with python objects. + Py_BEGIN_ALLOW_THREADS + delete app; + Py_END_ALLOW_THREADS + // PYSIDE-571: make sure to create a singleton deleted qApp. + MakeSingletonQAppWrapper(NULL); +} + +struct TypeUserData { + TypeUserData(PyTypeObject* type, const QMetaObject* metaobject) : mo(type, metaobject) {} + DynamicQMetaObject mo; + std::size_t cppObjSize; +}; + +std::size_t getSizeOfQObject(SbkObjectType* type) +{ + using namespace Shiboken::ObjectType; + TypeUserData* userData = reinterpret_cast(getTypeUserData(reinterpret_cast(type))); + return userData->cppObjSize; +} + +void initDynamicMetaObject(SbkObjectType* type, const QMetaObject* base, const std::size_t& cppObjSize) +{ + //create DynamicMetaObject based on python type + TypeUserData* userData = new TypeUserData(reinterpret_cast(type), base); + userData->cppObjSize = cppObjSize; + userData->mo.update(); + Shiboken::ObjectType::setTypeUserData(type, userData, Shiboken::callCppDestructor); + + //initialize staticQMetaObject property + void* metaObjectPtr = &userData->mo; + static SbkConverter* converter = Shiboken::Conversions::getConverter("QMetaObject"); + if (!converter) + return; + Shiboken::AutoDecRef pyMetaObject(Shiboken::Conversions::pointerToPython(converter, metaObjectPtr)); + PyObject_SetAttrString(reinterpret_cast(type), "staticMetaObject", pyMetaObject); +} + +void initDynamicMetaObject(SbkObjectType* type, const QMetaObject* base) +{ + initDynamicMetaObject(type, base, 0); +} + +void initQObjectSubType(SbkObjectType *type, PyObject *args, PyObject * /* kwds */) +{ + PyTypeObject* qObjType = Shiboken::Conversions::getPythonTypeObject("QObject*"); + QByteArray className(Shiboken::String::toCString(PyTuple_GET_ITEM(args, 0))); + + PyObject* bases = PyTuple_GET_ITEM(args, 1); + int numBases = PyTuple_GET_SIZE(bases); + QMetaObject* baseMo = 0; + SbkObjectType* qobjBase = 0; + + for (int i = 0; i < numBases; ++i) { + PyTypeObject* base = reinterpret_cast(PyTuple_GET_ITEM(bases, i)); + if (PyType_IsSubtype(base, qObjType)) { + baseMo = reinterpret_cast(Shiboken::ObjectType::getTypeUserData(reinterpret_cast(base))); + qobjBase = reinterpret_cast(base); + reinterpret_cast(baseMo)->update(); + break; + } + } + if (!baseMo) { + qWarning("Sub class of QObject not inheriting QObject!? Crash will happen when using %s.", className.constData()); + return; + } + + TypeUserData* userData = reinterpret_cast(Shiboken::ObjectType::getTypeUserData(qobjBase)); + initDynamicMetaObject(type, baseMo, userData->cppObjSize); +} + +PyObject* getMetaDataFromQObject(QObject* cppSelf, PyObject* self, PyObject* name) +{ + PyObject* attr = PyObject_GenericGetAttr(self, name); + if (!Shiboken::Object::isValid(reinterpret_cast(self), false)) + return attr; + + if (attr && Property::checkType(attr)) { + PyObject *value = Property::getValue(reinterpret_cast(attr), self); + Py_DECREF(attr); + if (!value) + return 0; + Py_INCREF(value); + attr = value; + } + + //mutate native signals to signal instance type + if (attr && PyObject_TypeCheck(attr, PySideSignalTypeF())) { + PyObject* signal = reinterpret_cast(Signal::initialize(reinterpret_cast(attr), name, self)); + PyObject_SetAttr(self, name, reinterpret_cast(signal)); + return signal; + } + + //search on metaobject (avoid internal attributes started with '__') + if (!attr) { + const char* cname = Shiboken::String::toCString(name); + uint cnameLen = qstrlen(cname); + if (std::strncmp("__", cname, 2)) { + const QMetaObject* metaObject = cppSelf->metaObject(); + //signal + QList signalList; + for(int i=0, i_max = metaObject->methodCount(); i < i_max; i++) { + QMetaMethod method = metaObject->method(i); + const QByteArray methSig_ = method.methodSignature(); + const char *methSig = methSig_.constData(); + bool methMacth = !std::strncmp(cname, methSig, cnameLen) && methSig[cnameLen] == '('; + if (methMacth) { + if (method.methodType() == QMetaMethod::Signal) { + signalList.append(method); + } else { + PySideMetaFunction* func = MetaFunction::newObject(cppSelf, i); + if (func) { + PyObject *result = reinterpret_cast(func); + PyObject_SetAttr(self, name, result); + return result; + } + } + } + } + if (signalList.size() > 0) { + PyObject* pySignal = reinterpret_cast(Signal::newObjectFromMethod(self, signalList)); + PyObject_SetAttr(self, name, pySignal); + return pySignal; + } + } + } + return attr; +} + +bool inherits(PyTypeObject* objType, const char* class_name) +{ + if (strcmp(objType->tp_name, class_name) == 0) + return true; + + PyTypeObject* base = objType->tp_base; + if (base == 0) + return false; + + return inherits(base, class_name); +} + +void* nextQObjectMemoryAddr() +{ + return qobjectNextAddr; +} + +void setNextQObjectMemoryAddr(void* addr) +{ + qobjectNextAddr = addr; +} + +} // namespace PySide + +// A QSharedPointer is used with a deletion function to invalidate a pointer +// when the property value is cleared. This should be a QSharedPointer with +// a void* pointer, but that isn't allowed +typedef char any_t; +Q_DECLARE_METATYPE(QSharedPointer); + +namespace PySide +{ + +static void invalidatePtr(any_t* object) +{ + Shiboken::GilState state; + + SbkObject* wrapper = Shiboken::BindingManager::instance().retrieveWrapper(object); + if (wrapper != NULL) + Shiboken::BindingManager::instance().releaseWrapper(wrapper); +} + +static const char invalidatePropertyName[] = "_PySideInvalidatePtr"; + +PyObject* getWrapperForQObject(QObject* cppSelf, SbkObjectType* sbk_type) +{ + PyObject* pyOut = reinterpret_cast(Shiboken::BindingManager::instance().retrieveWrapper(cppSelf)); + if (pyOut) { + Py_INCREF(pyOut); + return pyOut; + } + + // Setting the property will trigger an QEvent notification, which may call into + // code that creates the wrapper so only set the property if it isn't already + // set and check if it's created after the set call + QVariant existing = cppSelf->property(invalidatePropertyName); + if (!existing.isValid()) { + QSharedPointer shared_with_del((any_t*)cppSelf, invalidatePtr); + cppSelf->setProperty(invalidatePropertyName, QVariant::fromValue(shared_with_del)); + pyOut = reinterpret_cast(Shiboken::BindingManager::instance().retrieveWrapper(cppSelf)); + if (pyOut) { + Py_INCREF(pyOut); + return pyOut; + } + } + + const char* typeName = typeid(*cppSelf).name(); + pyOut = Shiboken::Object::newObject(sbk_type, cppSelf, false, false, typeName); + + return pyOut; +} + +#ifdef PYSIDE_QML_SUPPORT +static QuickRegisterItemFunction quickRegisterItem; + +QuickRegisterItemFunction getQuickRegisterItemFunction() +{ + return quickRegisterItem; +} + +void setQuickRegisterItemFunction(QuickRegisterItemFunction function) +{ + quickRegisterItem = function; +} +#endif // PYSIDE_QML_SUPPORT + +// Inspired by Shiboken::String::toCString; +QString pyStringToQString(PyObject *str) { + if (str == Py_None) + return QString(); + +#ifdef IS_PY3K + if (PyUnicode_Check(str)) { + const char *unicodeBuffer = _PepUnicode_AsString(str); + if (unicodeBuffer) + return QString::fromUtf8(unicodeBuffer); + } +#endif + if (PyBytes_Check(str)) { + const char *asciiBuffer = PyBytes_AS_STRING(str); + if (asciiBuffer) + return QString::fromLatin1(asciiBuffer); + } + return QString(); +} + +static const unsigned char qt_resource_name[] = { + // qt + 0x0,0x2, + 0x0,0x0,0x7,0x84, + 0x0,0x71, + 0x0,0x74, + // etc + 0x0,0x3, + 0x0,0x0,0x6c,0xa3, + 0x0,0x65, + 0x0,0x74,0x0,0x63, + // qt.conf + 0x0,0x7, + 0x8,0x74,0xa6,0xa6, + 0x0,0x71, + 0x0,0x74,0x0,0x2e,0x0,0x63,0x0,0x6f,0x0,0x6e,0x0,0x66 +}; + +static const unsigned char qt_resource_struct[] = { + // : + 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1, + // :/qt + 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2, + // :/qt/etc + 0x0,0x0,0x0,0xa,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x3, + // :/qt/etc/qt.conf + 0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0 +}; + +bool registerInternalQtConf() +{ + // Guard to ensure single registration. +#ifdef PYSIDE_QT_CONF_PREFIX + static bool registrationAttempted = false; +#else + static bool registrationAttempted = true; +#endif + static bool isRegistered = false; + if (registrationAttempted) + return isRegistered; + registrationAttempted = true; + + // Support PyInstaller case when a qt.conf file might be provided next to the generated + // PyInstaller executable. + // This will disable the internal qt.conf which points to the PySide2 subdirectory (due to the + // subdirectory not existing anymore). + QString executablePath = +#if PY_MAJOR_VERSION >= 3 + QString::fromWCharArray(Py_GetProgramFullPath()); +#else + // Python 2 unfortunately returns a char* array instead of a wchar*, which means that on + // Windows if the executable path contains unicode characters, the returned path will be + // invalid. We can't use QCoreApplication::applicationFilePath because it requires an + // existing QCoreApplication instance despite being a static method. + // This means that a qt.conf near an executable won't be picked up correctly on + // Windows + Python 2. + QString::fromLocal8Bit(Py_GetProgramFullPath()); +#endif + QString appDirPath = QFileInfo(executablePath).absolutePath(); + QString maybeQtConfPath = QDir(appDirPath).filePath(QStringLiteral("qt.conf")); + bool executableQtConfAvailable = QFileInfo::exists(maybeQtConfPath); + maybeQtConfPath = QDir::toNativeSeparators(maybeQtConfPath); + + // Allow disabling the usage of the internal qt.conf. This is necessary for tests to work, + // because tests are executed before the package is installed, and thus the Prefix specified + // in qt.conf would point to a not yet existing location. + bool disableInternalQtConf = + qEnvironmentVariableIntValue("PYSIDE_DISABLE_INTERNAL_QT_CONF") > 0 ? true : false; + if (disableInternalQtConf || executableQtConfAvailable) { + registrationAttempted = true; + return false; + } + + PyObject *pysideModule = PyImport_ImportModule("PySide2"); + if (!pysideModule) + return false; + + // Querying __file__ should be done only for modules that have finished their initialization. + // Thus querying for the top-level PySide2 package works for us whenever any Qt-wrapped module + // is loaded. + PyObject *pysideInitFilePath = PyObject_GetAttrString(pysideModule, "__file__"); + Py_DECREF(pysideModule); + if (!pysideInitFilePath) + return false; + + QString initPath = pyStringToQString(pysideInitFilePath); + Py_DECREF(pysideInitFilePath); + if (initPath.isEmpty()) + return false; + + // pysideDir - absolute path to the directory containing the init file, which also contains + // the rest of the PySide2 modules. + // prefixPath - absolute path to the directory containing the installed Qt (prefix). + QDir pysideDir = QFileInfo(QDir::fromNativeSeparators(initPath)).absoluteDir(); + QString setupPrefix; +#ifdef PYSIDE_QT_CONF_PREFIX + setupPrefix = QStringLiteral(PYSIDE_QT_CONF_PREFIX); +#endif + QString prefixPath = pysideDir.absoluteFilePath(setupPrefix); + + // rccData needs to be static, otherwise when it goes out of scope, the Qt resource system + // will point to invalid memory. + static QByteArray rccData = QByteArray("[Paths]\nPrefix = ") + prefixPath.toLocal8Bit() +#ifdef Q_OS_WIN + // LibraryExecutables needs to point to Prefix instead of ./bin because we don't + // currently conform to the Qt default directory layout on Windows. This is necessary + // for QtWebEngineCore to find the location of QtWebEngineProcess.exe. + + QByteArray("\nLibraryExecutables = ") + prefixPath.toLocal8Bit() +#endif + ; + rccData.append('\n'); + + // The RCC data structure expects a 4-byte size value representing the actual data. + int size = rccData.size(); + + for (int i = 0; i < 4; ++i) { + rccData.prepend((size & 0xff)); + size >>= 8; + } + + const int version = 0x01; + isRegistered = qRegisterResourceData(version, qt_resource_struct, qt_resource_name, + reinterpret_cast( + rccData.constData())); + + return isRegistered; +} + + + +} //namespace PySide + diff --git a/sources/pyside2/libpyside/pyside.h b/sources/pyside2/libpyside/pyside.h new file mode 100644 index 0000000..e2e108e --- /dev/null +++ b/sources/pyside2/libpyside/pyside.h @@ -0,0 +1,172 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDE_H +#define PYSIDE_H + +#include +#include + +#ifdef PYSIDE_QML_SUPPORT +# include +#endif + +#include +#include +#include +#include + +struct SbkObjectType; + +namespace PySide +{ + +PYSIDE_API void init(PyObject *module); + +/** + * Hash function used to enable hash on objects not supported on native Qt library which has toString function. + */ +template +inline uint hash(const T& value) +{ + return qHash(value.toString()); +} + +/** + * Fill QObject properties and do signal connections using the values found in \p kwds dictonary. + * \param qObj PyObject fot the QObject. + * \param metaObj QMetaObject of \p qObj. + * \param blackList keys to be ignored in kwds dictionary, this string list MUST be sorted. + * \param blackListSize numbe rof elements in blackList. + * \param kwds key->value dictonary. + * \return True if everything goes well, false with a Python error setted otherwise. + */ +PYSIDE_API bool fillQtProperties(PyObject* qObj, const QMetaObject* metaObj, PyObject* kwds, const char** blackList, unsigned int blackListSize); + +/** +* If the type \p T was registered on Qt meta type system with Q_DECLARE_METATYPE macro, this class will initialize +* the meta type. +* +* Initialize a meta type means register it on Qt meta type system, Qt itself only do this on the first call of +* qMetaTypeId, and this is exactly what we do to init it. If we don't do that, calls to QMetaType::type("QMatrix2x2") +* could return zero, causing QVariant to not recognize some C++ types, like QMatrix2x2. +*/ +template::Defined > +struct initQtMetaType { + initQtMetaType() + { + qMetaTypeId(); + } +}; + +// Template specialization to do nothing when the type wasn't registered on Qt meta type system. +template +struct initQtMetaType { +}; + +PYSIDE_DEPRECATED(PYSIDE_API void initDynamicMetaObject(SbkObjectType* type, const QMetaObject* base)); +PYSIDE_API void initDynamicMetaObject(SbkObjectType* type, const QMetaObject* base, const std::size_t& cppObjSize); +PYSIDE_API void initQObjectSubType(SbkObjectType* type, PyObject* args, PyObject* kwds); + +/// Return the size in bytes of a type that inherits QObject. +PYSIDE_API std::size_t getSizeOfQObject(SbkObjectType* type); + +typedef void (*CleanupFunction)(void); + +/** + * Register a function to be called before python die + */ +PYSIDE_API void registerCleanupFunction(CleanupFunction func); +PYSIDE_API void runCleanupFunctions(); + +/** + * Destroy a QCoreApplication taking care of destroy all instances of QObject first. + */ +PYSIDE_API void destroyQCoreApplication(); + +/** + * Check for properties and signals registered on MetaObject and return these + * \param cppSelf Is the QObject which contains the metaobject + * \param self Python object of cppSelf + * \param name Name of the argument which the function will try retrieve from MetaData + * \return The Python object which contains the Data obtained in metaObject or the Python attribute related with name + */ +PYSIDE_API PyObject* getMetaDataFromQObject(QObject* cppSelf, PyObject* self, PyObject* name); + +/** + * Check if self inherits from class_name + * \param self Python object + * \param class_name strict with the class name + * \return Returns true if self object inherits from class_name, otherwise returns false + */ +PYSIDE_API bool inherits(PyTypeObject* self, const char* class_name); + +PYSIDE_API void* nextQObjectMemoryAddr(); +PYSIDE_API void setNextQObjectMemoryAddr(void* addr); + +PYSIDE_API PyObject* getWrapperForQObject(QObject* cppSelf, SbkObjectType* sbk_type); + +#ifdef PYSIDE_QML_SUPPORT +// Used by QtQuick module to notify QtQml that custom QtQuick items can be registered. +typedef bool (*QuickRegisterItemFunction)(PyObject *pyObj, const char *uri, int versionMajor, + int versionMinor, const char *qmlName, + QQmlPrivate::RegisterType *); +PYSIDE_API QuickRegisterItemFunction getQuickRegisterItemFunction(); +PYSIDE_API void setQuickRegisterItemFunction(QuickRegisterItemFunction function); +#endif // PYSIDE_QML_SUPPORT + +/** + * Given A PyObject repesenting ASCII or Unicode data, returns an equivalent QString. + */ +PYSIDE_API QString pyStringToQString(PyObject *str); + +/** + * Registers a dynamic "qt.conf" file with the Qt resource system. + * + * This is used in a standalone build, to inform QLibraryInfo of the Qt prefix (where Qt libraries + * are installed) so that plugins can be successfully loaded. + */ +PYSIDE_API bool registerInternalQtConf(); + + +} //namespace PySide + + +#endif // PYSIDE_H + diff --git a/sources/pyside2/libpyside/pyside2.pc.in b/sources/pyside2/libpyside/pyside2.pc.in new file mode 100644 index 0000000..37a1159 --- /dev/null +++ b/sources/pyside2/libpyside/pyside2.pc.in @@ -0,0 +1,14 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@LIB_INSTALL_DIR@ +includedir=@CMAKE_INSTALL_PREFIX@/include/PySide2@pyside2_SUFFIX@ +typesystemdir=@CMAKE_INSTALL_PREFIX@/share/PySide2@pyside2_SUFFIX@/typesystems +pythonpath=@PYTHON_SITE_PACKAGES@ + +Name: PySide2@pyside2_SUFFIX@ +Description: Support library for Python bindings of Qt5-based libraries. +Version: @BINDING_API_VERSION_FULL@ +Libs: -L${libdir} -lpyside2@pyside2_SUFFIX@@SHIBOKEN_PYTHON_CONFIG_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@ +Cflags: -I${includedir} +Requires: shiboken2 + diff --git a/sources/pyside2/libpyside/pysideclassinfo.cpp b/sources/pyside2/libpyside/pysideclassinfo.cpp new file mode 100644 index 0000000..24a0c64 --- /dev/null +++ b/sources/pyside2/libpyside/pysideclassinfo.cpp @@ -0,0 +1,204 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "pysideclassinfo.h" +#include "pysideclassinfo_p.h" +#include "dynamicqmetaobject.h" + +#include +#include + +#define CLASSINFO_CLASS_NAME "ClassInfo" + +extern "C" +{ + +static PyObject* classInfoTpNew(PyTypeObject* subtype, PyObject* args, PyObject* kwds); +static int classInfoTpInit(PyObject*, PyObject*, PyObject*); +static void classInfoFree(void*); +static PyObject* classCall(PyObject*, PyObject*, PyObject*); + +static PyType_Slot PySideClassInfoType_slots[] = { + {Py_tp_call, (void *)classCall}, + {Py_tp_init, (void *)classInfoTpInit}, + {Py_tp_new, (void *)classInfoTpNew}, + {Py_tp_free, (void *)classInfoFree}, + {Py_tp_dealloc, (void *)SbkDummyDealloc}, + {0, 0} +}; +static PyType_Spec PySideClassInfoType_spec = { + "PySide2.QtCore." CLASSINFO_CLASS_NAME, + sizeof(PySideClassInfo), + 0, + Py_TPFLAGS_DEFAULT, + PySideClassInfoType_slots, +}; + + +PyTypeObject *PySideClassInfoTypeF(void) +{ + static PyTypeObject *type = nullptr; + if (!type) + type = (PyTypeObject *)PyType_FromSpec(&PySideClassInfoType_spec); + return type; +} + +PyObject *classCall(PyObject *self, PyObject *args, PyObject * /* kw */) +{ + if (!PyTuple_Check(args) || PyTuple_Size(args) != 1) { + PyErr_Format(PyExc_TypeError, + "The ClassInfo decorator takes exactly 1 positional argument (%zd given)", + PyTuple_Size(args)); + return 0; + } + + PySideClassInfo* data = reinterpret_cast(self); + PySideClassInfoPrivate* pData = data->d; + + if (pData->m_alreadyWrapped) { + PyErr_SetString(PyExc_TypeError, "This instance of ClassInfo() was already used to wrap an object"); + return 0; + } + + PyObject* klass; + klass = PyTuple_GetItem(args, 0); + bool validClass = false; + + // This will sometimes segfault if you mistakenly use it on a function declaration + if (!PyType_Check(klass)) { + PyErr_SetString(PyExc_TypeError, "This decorator can only be used on class declarations"); + return 0; + } + + if (Shiboken::ObjectType::checkType(reinterpret_cast(klass))) { + PySide::DynamicQMetaObject* mo = reinterpret_cast(Shiboken::ObjectType::getTypeUserData(reinterpret_cast(klass))); + if (mo) { + mo->addInfo(PySide::ClassInfo::getMap(data)); + pData->m_alreadyWrapped = true; + validClass = true; + } + } + + if (!validClass) { + PyErr_SetString(PyExc_TypeError, "This decorator can only be used on classes that are subclasses of QObject"); + return 0; + } + + Py_INCREF(klass); + return klass; +} + +static PyObject *classInfoTpNew(PyTypeObject *subtype, PyObject * /* args */, PyObject * /* kwds */) +{ + PySideClassInfo* me = reinterpret_cast(subtype->tp_alloc(subtype, 0)); + me->d = new PySideClassInfoPrivate; + + me->d->m_alreadyWrapped = false; + + return reinterpret_cast(me); +} + +int classInfoTpInit(PyObject* self, PyObject* args, PyObject* kwds) +{ + if (PyTuple_Check(args) && PyTuple_Size(args) > 0) { + PyErr_Format(PyExc_TypeError, "ClassInfo() takes exactly 0 positional arguments (%zd given)", PyTuple_Size(args)); + return -1; + } + + PySideClassInfo* data = reinterpret_cast(self); + PySideClassInfoPrivate* pData = data->d; + + PyObject* key; + PyObject* value; + Py_ssize_t pos = 0; + + // PyDict_Next causes a segfault if kwds is empty + if (kwds && PyDict_Check(kwds) && PyDict_Size(kwds) > 0) { + while (PyDict_Next(kwds, &pos, &key, &value)) { + if (Shiboken::String::check(key) && Shiboken::String::check(value)) { + pData->m_data[Shiboken::String::toCString(key)] = Shiboken::String::toCString(value); + } else { + PyErr_SetString(PyExc_TypeError, "All keys and values provided to ClassInfo() must be strings"); + return -1; + } + } + } + + return PyErr_Occurred() ? -1 : 1; +} + +void classInfoFree(void *self) +{ + PyObject* pySelf = reinterpret_cast(self); + PySideClassInfo* data = reinterpret_cast(self); + + delete data->d; + Py_TYPE(pySelf)->tp_base->tp_free(self); +} + + +} // extern "C" + + +namespace PySide { namespace ClassInfo { + +void init(PyObject* module) +{ + if (PyType_Ready(PySideClassInfoTypeF()) < 0) + return; + + Py_INCREF(PySideClassInfoTypeF()); + PyModule_AddObject(module, CLASSINFO_CLASS_NAME, reinterpret_cast(PySideClassInfoTypeF())); +} + +bool checkType(PyObject* pyObj) +{ + if (pyObj) + return PyType_IsSubtype(Py_TYPE(pyObj), PySideClassInfoTypeF()); + return false; +} + +QMap getMap(PySideClassInfo* obj) +{ + return obj->d->m_data; +} + +} //namespace Property +} //namespace PySide diff --git a/sources/pyside2/libpyside/pysideclassinfo.h b/sources/pyside2/libpyside/pysideclassinfo.h new file mode 100644 index 0000000..910dd9f --- /dev/null +++ b/sources/pyside2/libpyside/pysideclassinfo.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDE_CLASSINFO_H +#define PYSIDE_CLASSINFO_H + +#include +#include +#include +#include + +extern "C" +{ + extern PYSIDE_API PyTypeObject *PySideClassInfoTypeF(void); + + struct PySideClassInfoPrivate; + struct PYSIDE_API PySideClassInfo + { + PyObject_HEAD + PySideClassInfoPrivate* d; + }; +}; + +namespace PySide { namespace ClassInfo { + +PYSIDE_API bool checkType(PyObject* pyObj); +PYSIDE_API QMap getMap(PySideClassInfo* obj); + +} //namespace ClassInfo +} //namespace PySide + +#endif diff --git a/sources/pyside2/libpyside/pysideclassinfo_p.h b/sources/pyside2/libpyside/pysideclassinfo_p.h new file mode 100644 index 0000000..426aee1 --- /dev/null +++ b/sources/pyside2/libpyside/pysideclassinfo_p.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDE_CLASSINFO_P_H +#define PYSIDE_CLASSINFO_P_H + +#include +#include +#include "pysideclassinfo.h" + +#define __INFO_ATTR_NAME__ "__classInfo__" + +struct PySideClassInfo; + +extern "C" +{ + +struct PySideClassInfoPrivate { + QMap m_data; + bool m_alreadyWrapped; +}; + +} // extern "C" + +namespace PySide { namespace ClassInfo { + +/** + * Init PySide QProperty support system + */ +void init(PyObject* module); + + +} // namespace ClassInfo +} // namespace PySide + +#endif diff --git a/sources/pyside2/libpyside/pysidemacros.h b/sources/pyside2/libpyside/pysidemacros.h new file mode 100644 index 0000000..5b493a2 --- /dev/null +++ b/sources/pyside2/libpyside/pysidemacros.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDEMACROS_H +#define PYSIDEMACROS_H + +#if defined _WIN32 + #if PYSIDE_EXPORTS + #define PYSIDE_API __declspec(dllexport) + #else + #if defined __MINGW32__ + #define PYSIDE_API + #else + #define PYSIDE_API __declspec(dllimport) + #endif + #endif + #define PYSIDE_DEPRECATED(func) __declspec(deprecated) func +#else + #if __GNUC__ >= 4 + #define PYSIDE_API __attribute__ ((visibility("default"))) + #define PYSIDE_DEPRECATED(func) func __attribute__ ((deprecated)) + #else + #define PYSIDE_API + #define PYSIDE_DEPRECATED(func) func + #endif +#endif + +#endif diff --git a/sources/pyside2/libpyside/pysidemetafunction.cpp b/sources/pyside2/libpyside/pysidemetafunction.cpp new file mode 100644 index 0000000..9839a10 --- /dev/null +++ b/sources/pyside2/libpyside/pysidemetafunction.cpp @@ -0,0 +1,227 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include +#include "pysidemetafunction.h" +#include "pysidemetafunction_p.h" + +#include +#include +#include +#include + +extern "C" +{ + +struct PySideMetaFunctionPrivate +{ + QObject* qobject; + int methodIndex; +}; + +//methods +static void functionFree(void*); +static PyObject* functionCall(PyObject*, PyObject*, PyObject*); + +static PyType_Slot PySideMetaFunctionType_slots[] = { + {Py_tp_call, (void *)functionCall}, + {Py_tp_new, (void *)PyType_GenericNew}, + {Py_tp_free, (void *)functionFree}, + {Py_tp_dealloc, (void *)SbkDummyDealloc}, + {0, 0} +}; +static PyType_Spec PySideMetaFunctionType_spec = { + "PySide.MetaFunction", + sizeof(PySideMetaFunction), + 0, + Py_TPFLAGS_DEFAULT, + PySideMetaFunctionType_slots, +}; + + +PyTypeObject *PySideMetaFunctionTypeF(void) +{ + static PyTypeObject *type = nullptr; + if (!type) + type = (PyTypeObject *)PyType_FromSpec(&PySideMetaFunctionType_spec); + return type; +} + +void functionFree(void *self) +{ + PySideMetaFunction* function = reinterpret_cast(self); + delete function->d; +} + +PyObject *functionCall(PyObject *self, PyObject *args, PyObject * /* kw */) +{ + PySideMetaFunction* function = reinterpret_cast(self); + + PyObject* retVal; + if (!PySide::MetaFunction::call(function->d->qobject, function->d->methodIndex, args, &retVal)) + return 0; + return retVal; +} + +} // extern "C" + +namespace PySide { namespace MetaFunction { + +void init(PyObject* module) +{ + if (PyType_Ready(PySideMetaFunctionTypeF()) < 0) + return; + + PyModule_AddObject(module, "MetaFunction", reinterpret_cast(PySideMetaFunctionTypeF())); +} + +PySideMetaFunction* newObject(QObject* source, int methodIndex) +{ + if (methodIndex >= source->metaObject()->methodCount()) + return 0; + + QMetaMethod method = source->metaObject()->method(methodIndex); + if ((method.methodType() == QMetaMethod::Slot) || + (method.methodType() == QMetaMethod::Method)) { + PySideMetaFunction* function = PyObject_New(PySideMetaFunction, PySideMetaFunctionTypeF()); + function->d = new PySideMetaFunctionPrivate(); + function->d->qobject = source; + function->d->methodIndex = methodIndex; + return function; + } + return 0; +} + +bool call(QObject* self, int methodIndex, PyObject* args, PyObject** retVal) +{ + + QMetaMethod method = self->metaObject()->method(methodIndex); + QList argTypes = method.parameterTypes(); + + // args given plus return type + Shiboken::AutoDecRef sequence(PySequence_Fast(args, 0)); + int numArgs = PySequence_Fast_GET_SIZE(sequence.object()) + 1; + + if (numArgs - 1 > argTypes.count()) { + PyErr_Format(PyExc_TypeError, "%s only accepts %d argument(s), %d given!", + method.methodSignature().constData(), + argTypes.count(), numArgs - 1); + return false; + } + + if (numArgs - 1 < argTypes.count()) { + PyErr_Format(PyExc_TypeError, "%s needs %d argument(s), %d given!", + method.methodSignature().constData(), + argTypes.count(), numArgs - 1); + return false; + } + + QVariant* methValues = new QVariant[numArgs]; + void** methArgs = new void*[numArgs]; + + // Prepare room for return type + const char* returnType = method.typeName(); + if (returnType && std::strcmp("void", returnType)) + argTypes.prepend(returnType); + else + argTypes.prepend(QByteArray()); + + int i; + for (i = 0; i < numArgs; ++i) { + const QByteArray& typeName = argTypes[i]; + // This must happen only when the method hasn't return type. + if (typeName.isEmpty()) { + methArgs[i] = 0; + continue; + } + + Shiboken::Conversions::SpecificConverter converter(typeName); + if (converter) { + int typeId = QMetaType::type(typeName); + if (!Shiboken::Conversions::pythonTypeIsObjectType(converter)) { + if (!typeId) { + PyErr_Format(PyExc_TypeError, "Value types used on meta functions (including signals) need to be " + "registered on meta type: %s", typeName.data()); + break; + } + methValues[i] = QVariant(typeId, static_cast(0)); + } + methArgs[i] = methValues[i].data(); + if (i == 0) // Don't do this for return type + continue; + if (typeId == QVariant::String) { + QString tmp; + converter.toCpp(PySequence_Fast_GET_ITEM(sequence.object(), i - 1), &tmp); + methValues[i] = tmp; + } else { + converter.toCpp(PySequence_Fast_GET_ITEM(sequence.object(), i - 1), methArgs[i]); + } + } else { + PyErr_Format(PyExc_TypeError, "Unknown type used to call meta function (that may be a signal): %s", argTypes[i].constData()); + break; + } + } + + bool ok = i == numArgs; + if (ok) { + Py_BEGIN_ALLOW_THREADS + QMetaObject::metacall(self, QMetaObject::InvokeMetaMethod, method.methodIndex(), methArgs); + Py_END_ALLOW_THREADS + + if (retVal) { + if (methArgs[0]) { + static SbkConverter* qVariantTypeConverter = Shiboken::Conversions::getConverter("QVariant"); + Q_ASSERT(qVariantTypeConverter); + *retVal = Shiboken::Conversions::copyToPython(qVariantTypeConverter, &methValues[0]); + } else { + *retVal = Py_None; + Py_INCREF(*retVal); + } + } + } + + delete[] methArgs; + delete[] methValues; + + return ok; +} + + +} //namespace MetaFunction +} //namespace PySide + diff --git a/sources/pyside2/libpyside/pysidemetafunction.h b/sources/pyside2/libpyside/pysidemetafunction.h new file mode 100644 index 0000000..020f02d --- /dev/null +++ b/sources/pyside2/libpyside/pysidemetafunction.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDE_METAFUNCTION_H +#define PYSIDE_METAFUNCTION_H + +#include +#include +#include + +#include +#include + +extern "C" +{ + extern PYSIDE_API PyTypeObject *PySideMetaFunctionTypeF(void); + + struct PySideMetaFunctionPrivate; + struct PYSIDE_API PySideMetaFunction + { + PyObject_HEAD + PySideMetaFunctionPrivate* d; + }; +}; //extern "C" + +namespace PySide { namespace MetaFunction { + +/** + * This function creates a MetaFunction object + * + * @param obj the QObject witch this fuction is part of + * @param methodIndex The index of this function on MetaObject + * @return Return a new reference of PySideMetaFunction + **/ +PYSIDE_API PySideMetaFunction* newObject(QObject* obj, int methodIndex); + +} //namespace MetaFunction +} //namespace PySide + +#endif diff --git a/sources/pyside2/libpyside/pysidemetafunction_p.h b/sources/pyside2/libpyside/pysidemetafunction_p.h new file mode 100644 index 0000000..c3b8fe0 --- /dev/null +++ b/sources/pyside2/libpyside/pysidemetafunction_p.h @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDE_METAFUNCTION_P_H +#define PYSIDE_METAFUNCTION_P_H + +#include +#include +#include + +QT_BEGIN_NAMESPACE +class QObject; +QT_END_NAMESPACE + +namespace PySide { namespace MetaFunction { + + void init(PyObject* module); + /** + * Does a Qt metacall on a QObject + */ + bool call(QObject* self, int methodIndex, PyObject* args, PyObject** retVal = 0); + +} //namespace MetaFunction +} //namespace PySide + +#endif diff --git a/sources/pyside2/libpyside/pysideproperty.cpp b/sources/pyside2/libpyside/pysideproperty.cpp new file mode 100644 index 0000000..279e09e --- /dev/null +++ b/sources/pyside2/libpyside/pysideproperty.cpp @@ -0,0 +1,497 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "pysideproperty.h" +#include "pysideproperty_p.h" +#include "dynamicqmetaobject_p.h" +#include "pysidesignal.h" +#include "pysidesignal_p.h" + +#include +#include + + +#define QPROPERTY_CLASS_NAME "Property" + +extern "C" +{ + +static PyObject* qpropertyTpNew(PyTypeObject* subtype, PyObject* args, PyObject* kwds); +static int qpropertyTpInit(PyObject*, PyObject*, PyObject*); +static void qpropertyDeAlloc(PyObject* self); + +//methods +static PyObject* qPropertyCall(PyObject*, PyObject*, PyObject*); +static PyObject* qPropertySetter(PyObject*, PyObject*); +static PyObject* qPropertyGetter(PyObject*, PyObject*); +static int qpropertyTraverse(PyObject* self, visitproc visit, void* arg); +static int qpropertyClear(PyObject* self); + +static PyMethodDef PySidePropertyMethods[] = { + {"setter", (PyCFunction)qPropertySetter, METH_O, 0}, + {"write", (PyCFunction)qPropertySetter, METH_O, 0}, + {"getter", (PyCFunction)qPropertyGetter, METH_O, 0}, + {"read", (PyCFunction)qPropertyGetter, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyType_Slot PySidePropertyType_slots[] = { + {Py_tp_dealloc, (void *)qpropertyDeAlloc}, + {Py_tp_call, (void *)qPropertyCall}, + {Py_tp_traverse, (void *)qpropertyTraverse}, + {Py_tp_clear, (void *)qpropertyClear}, + {Py_tp_methods, (void *)PySidePropertyMethods}, + {Py_tp_init, (void *)qpropertyTpInit}, + {Py_tp_new, (void *)qpropertyTpNew}, + {0, 0} +}; +// Dotted modulename is crucial for PyType_FromSpec to work. Is this name right? +static PyType_Spec PySidePropertyType_spec = { + "PySide2.QtCore." QPROPERTY_CLASS_NAME, + sizeof(PySideProperty), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_BASETYPE, + PySidePropertyType_slots, +}; + + +PyTypeObject *PySidePropertyTypeF(void) +{ + static PyTypeObject *type = nullptr; + if (!type) + type = (PyTypeObject *)PyType_FromSpec(&PySidePropertyType_spec); + return type; +} + +static void qpropertyMetaCall(PySideProperty* pp, PyObject* self, QMetaObject::Call call, void** args) +{ + Shiboken::Conversions::SpecificConverter converter(pp->d->typeName); + Q_ASSERT(converter); + + QByteArray type(pp->d->typeName); + + switch(call) { + case QMetaObject::ReadProperty: + { + Shiboken::GilState gil; + PyObject* value = PySide::Property::getValue(pp, self); + if (value) { + converter.toCpp(value, args[0]); + Py_DECREF(value); + } + break; + } + + case QMetaObject::WriteProperty: + { + Shiboken::GilState gil; + Shiboken::AutoDecRef value(converter.toPython(args[0])); + PySide::Property::setValue(pp, self, value); + break; + } + + case QMetaObject::ResetProperty: + { + Shiboken::GilState gil; + PySide::Property::reset(pp, self); + break; + } + + case QMetaObject::QueryPropertyDesignable: + case QMetaObject::QueryPropertyScriptable: + case QMetaObject::QueryPropertyStored: + case QMetaObject::QueryPropertyEditable: + case QMetaObject::QueryPropertyUser: + // just to avoid gcc warnings + case QMetaObject::InvokeMetaMethod: + case QMetaObject::CreateInstance: + case QMetaObject::IndexOfMethod: + case QMetaObject::RegisterPropertyMetaType: + case QMetaObject::RegisterMethodArgumentMetaType: + break; + } +} + + +static PyObject *qpropertyTpNew(PyTypeObject *subtype, PyObject * /* args */, PyObject * /* kwds */) +{ + PySideProperty* me = reinterpret_cast(subtype->tp_alloc(subtype, 0)); + me->d = new PySidePropertyPrivate; + memset(me->d, 0, sizeof(PySidePropertyPrivate)); + PySidePropertyPrivate* pData = me->d; + pData->designable = true; + pData->scriptable = true; + pData->stored = true; + return reinterpret_cast(me); +} + +int qpropertyTpInit(PyObject* self, PyObject* args, PyObject* kwds) +{ + PyObject* type = 0; + PySideProperty* data = reinterpret_cast(self); + PySidePropertyPrivate* pData = data->d; + pData->metaCallHandler = &qpropertyMetaCall; + + static const char *kwlist[] = {"type", "fget", "fset", "freset", "fdel", "doc", "notify", + "designable", "scriptable", "stored", "user", + "constant", "final", 0}; + if (!PyArg_ParseTupleAndKeywords(args, kwds, + "O|OOOOsObbbbbb:QtCore.QProperty", (char**) kwlist, + /*OO*/ &type, &(pData->fget), + /*OOO*/ &(pData->fset), &(pData->freset), &(pData->fdel), + /*s*/ &(pData->doc), + /*O*/ &(pData->notify), + /*bbbbbb*/ &(pData->designable), &(pData->scriptable), &(pData->stored), &(pData->user), &(pData->constant), &(pData->final))) { + return 0; + } + + + pData->typeName = PySide::Signal::getTypeName(type); + + if (!pData->typeName) + PyErr_SetString(PyExc_TypeError, "Invalid property type or type name."); + else if (pData->constant && (pData->fset || pData->notify)) + PyErr_SetString(PyExc_TypeError, "A constant property cannot have a WRITE method or a NOTIFY signal."); + + if (!PyErr_Occurred()) { + Py_XINCREF(pData->fget); + Py_XINCREF(pData->fset); + Py_XINCREF(pData->freset); + Py_XINCREF(pData->fdel); + Py_XINCREF(pData->notify); + return 1; + } else { + pData->fget = 0; + pData->fset = 0; + pData->freset = 0; + pData->fdel = 0; + pData->notify = 0; + return -1; + } +} + +void qpropertyDeAlloc(PyObject* self) +{ + qpropertyClear(self); + Py_TYPE(self)->tp_free(self); +} + +PyObject *qPropertyCall(PyObject *self, PyObject *args, PyObject * /* kw */) +{ + PyObject *callback = PyTuple_GetItem(args, 0); + if (PyFunction_Check(callback)) { + PySideProperty *prop = reinterpret_cast(self); + PySidePropertyPrivate* pData = prop->d; + + Py_INCREF(callback); + pData->fget = callback; + + Py_INCREF(self); + return self; + } else { + PyErr_SetString(PyExc_TypeError, "Invalid property usage."); + return 0; + } +} + +PyObject* qPropertySetter(PyObject* self, PyObject* callback) +{ + if (PyFunction_Check(callback)) { + PySideProperty *prop = reinterpret_cast(self); + PySidePropertyPrivate* pData = prop->d; + + Py_INCREF(callback); + pData->fset = callback; + + Py_INCREF(callback); + return callback; + } else { + PyErr_SetString(PyExc_TypeError, "Invalid property setter agument."); + return 0; + } +} + +PyObject* qPropertyGetter(PyObject* self, PyObject* callback) +{ + if (PyFunction_Check(callback)) { + PySideProperty *prop = reinterpret_cast(self); + PySidePropertyPrivate* pData = prop->d; + + Py_INCREF(callback); + pData->fget = callback; + + Py_INCREF(callback); + return callback; + } else { + PyErr_SetString(PyExc_TypeError, "Invalid property getter agument."); + return 0; + } +} + +static int qpropertyTraverse(PyObject* self, visitproc visit, void* arg) +{ + PySidePropertyPrivate* data = reinterpret_cast(self)->d; + if (!data) + return 0; + + Py_VISIT(data->fget); + Py_VISIT(data->fset); + Py_VISIT(data->freset); + Py_VISIT(data->fdel); + Py_VISIT(data->notify); + return 0; +} + +static int qpropertyClear(PyObject* self) +{ + PySidePropertyPrivate* data = reinterpret_cast(self)->d; + if (!data) + return 0; + + Py_CLEAR(data->fget); + Py_CLEAR(data->fset); + Py_CLEAR(data->freset); + Py_CLEAR(data->fdel); + Py_CLEAR(data->notify); + + + free(data->typeName); + free(data->doc); + free(data->notifySignature); + delete data; + reinterpret_cast(self)->d = 0; + return 0; +} + +} // extern "C" + +namespace { + +static PyObject* getFromType(PyTypeObject* type, PyObject* name) +{ + PyObject* attr = 0; + attr = PyDict_GetItem(type->tp_dict, name); + if (!attr) { + PyObject* bases = type->tp_bases; + int size = PyTuple_GET_SIZE(bases); + for(int i=0; i < size; i++) { + PyObject* base = PyTuple_GET_ITEM(bases, i); + attr = getFromType(reinterpret_cast(base), name); + if (attr) + return attr; + } + } + return attr; +} + +} //namespace + + +namespace PySide { namespace Property { + +void init(PyObject* module) +{ + if (PyType_Ready(PySidePropertyTypeF()) < 0) + return; + + Py_INCREF(PySidePropertyTypeF()); + PyModule_AddObject(module, QPROPERTY_CLASS_NAME, reinterpret_cast(PySidePropertyTypeF())); +} + +bool checkType(PyObject* pyObj) +{ + if (pyObj) { + return PyType_IsSubtype(Py_TYPE(pyObj), PySidePropertyTypeF()); + } + return false; +} + +bool isPropertyType(PyObject* pyObj) +{ + return checkType(pyObj); +} + +int setValue(PySideProperty* self, PyObject* source, PyObject* value) +{ + PyObject* fset = self->d->fset; + if (fset) { + Shiboken::AutoDecRef args(PyTuple_New(2)); + PyTuple_SET_ITEM(args, 0, source); + PyTuple_SET_ITEM(args, 1, value); + Py_INCREF(source); + Py_INCREF(value); + Shiboken::AutoDecRef result(PyObject_CallObject(fset, args)); + return (result.isNull() ? -1 : 0); + } else { + PyErr_SetString(PyExc_AttributeError, "Attibute read only"); + } + return -1; +} + +PyObject* getValue(PySideProperty* self, PyObject* source) +{ + PyObject* fget = self->d->fget; + if (fget) { + Shiboken::AutoDecRef args(PyTuple_New(1)); + Py_INCREF(source); + PyTuple_SET_ITEM(args, 0, source); + return PyObject_CallObject(fget, args); + } + return 0; +} + +int reset(PySideProperty* self, PyObject* source) +{ + PyObject* freset = self->d->freset; + if (freset) { + Shiboken::AutoDecRef args(PyTuple_New(1)); + Py_INCREF(source); + PyTuple_SET_ITEM(args, 0, source); + Shiboken::AutoDecRef result(PyObject_CallObject(freset, args)); + return (result.isNull() ? -1 : 0); + } + return -1; +} + +const char* getTypeName(const PySideProperty* self) +{ + return self->d->typeName; +} + +PySideProperty* getObject(PyObject* source, PyObject* name) +{ + PyObject* attr = 0; + + if (Shiboken::Object::isUserType(source)) { + PyObject* dict = reinterpret_cast(source)->ob_dict; + if (dict) + attr = PyDict_GetItem(dict, name); + } + + attr = getFromType(Py_TYPE(source), name); + if (attr && checkType(attr)) { + Py_INCREF(attr); + return reinterpret_cast(attr); + } + + if (!attr) + PyErr_Clear(); //Clear possible error caused by PyObject_GenericGetAttr + + return 0; +} + +bool isReadable(const PySideProperty * /* self */) +{ + return true; +} + +bool isWritable(const PySideProperty* self) +{ + return (self->d->fset != 0); +} + +bool hasReset(const PySideProperty* self) +{ + return (self->d->freset != 0); +} + +bool isDesignable(const PySideProperty* self) +{ + return self->d->designable; +} + +bool isScriptable(const PySideProperty* self) +{ + return self->d->scriptable; +} + +bool isStored(const PySideProperty* self) +{ + return self->d->stored; +} + +bool isUser(const PySideProperty* self) +{ + return self->d->user; +} + +bool isConstant(const PySideProperty* self) +{ + return self->d->constant; +} + +bool isFinal(const PySideProperty* self) +{ + return self->d->final; +} + +const char* getNotifyName(PySideProperty* self) +{ + if (!self->d->notifySignature) { + PyObject* str = PyObject_Str(self->d->notify); + self->d->notifySignature = strdup(Shiboken::String::toCString(str)); + Py_DECREF(str); + } + + return self->d->notifySignature; +} + +void setMetaCallHandler(PySideProperty* self, MetaCallHandler handler) +{ + self->d->metaCallHandler = handler; +} + +void setTypeName(PySideProperty* self, const char* typeName) +{ + self->d->typeName = strdup(typeName); +} + +void setUserData(PySideProperty* self, void* data) +{ + self->d->userData = data; +} + +void* userData(PySideProperty* self) +{ + return self->d->userData; +} + +} //namespace Property +} //namespace PySide diff --git a/sources/pyside2/libpyside/pysideproperty.h b/sources/pyside2/libpyside/pysideproperty.h new file mode 100644 index 0000000..d77416a --- /dev/null +++ b/sources/pyside2/libpyside/pysideproperty.h @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDE_PROPERTY_H +#define PYSIDE_PROPERTY_H + +#include +#include +#include + +extern "C" +{ + extern PYSIDE_API PyTypeObject *PySidePropertyTypeF(void); + + struct PySidePropertyPrivate; + struct PYSIDE_API PySideProperty + { + PyObject_HEAD + PySidePropertyPrivate* d; + }; +}; + +namespace PySide { namespace Property { + +typedef void (*MetaCallHandler)(PySideProperty*,PyObject*,QMetaObject::Call, void**); + +PYSIDE_API bool checkType(PyObject* pyObj); + +/// @deprecated Use checkType +PYSIDE_DEPRECATED(PYSIDE_API bool isPropertyType(PyObject* pyObj)); + +/** + * This function call set property function and pass value as arg + * This function does not check the property object type + * + * @param self The property object + * @param source The QObject witch has the property + * @param value The value to set in property + * @return Return 0 if ok or -1 if this function fail + **/ +PYSIDE_API int setValue(PySideProperty* self, PyObject* source, PyObject* value); + +/** + * This function call get property function + * This function does not check the property object type + * + * @param self The property object + * @param source The QObject witch has the property + * @return Return the result of property get function or 0 if this fail + **/ +PYSIDE_API PyObject* getValue(PySideProperty* self, PyObject* source); + +/** + * This function return the notify name used on this property + * + * @param self The property object + * @return Return a const char with the notify name used + **/ +PYSIDE_API const char* getNotifyName(PySideProperty* self); + + +/** + * This function search in the source object for desired property + * + * @param source The QObject object + * @param name The property name + * @return Return a new reference to property object + **/ +PYSIDE_API PySideProperty* getObject(PyObject* source, PyObject* name); + +PYSIDE_API void setMetaCallHandler(PySideProperty* self, MetaCallHandler handler); + +PYSIDE_API void setTypeName(PySideProperty* self, const char* typeName); + +PYSIDE_API void setUserData(PySideProperty* self, void* data); +PYSIDE_API void* userData(PySideProperty* self); + +} //namespace Property +} //namespace PySide + +#endif diff --git a/sources/pyside2/libpyside/pysideproperty_p.h b/sources/pyside2/libpyside/pysideproperty_p.h new file mode 100644 index 0000000..f08e5f5 --- /dev/null +++ b/sources/pyside2/libpyside/pysideproperty_p.h @@ -0,0 +1,184 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDE_QPROPERTY_P_H +#define PYSIDE_QPROPERTY_P_H + +#include +#include +#include "pysideproperty.h" + +struct PySideProperty; + +extern "C" +{ + +struct PySidePropertyPrivate { + char* typeName; + PySide::Property::MetaCallHandler metaCallHandler; + PyObject* fget; + PyObject* fset; + PyObject* freset; + PyObject* fdel; + PyObject* notify; + char* notifySignature; + char* doc; + bool designable; + bool scriptable; + bool stored; + bool user; + bool constant; + bool final; + void* userData; +}; + +} // extern "C" + +namespace PySide { namespace Property { + +/** + * Init PySide QProperty support system + */ +void init(PyObject* module); + +/** + * This function call reset property function + * This function does not check the property object type + * + * @param self The property object + * @param source The QObject witch has the property + * @return Return 0 if ok or -1 if this function fail + **/ +int reset(PySideProperty* self, PyObject* source); + + +/** + * This function return the property type + * This function does not check the property object type + * + * @param self The property object + * @return Return the property type name + **/ +const char* getTypeName(const PySideProperty* self); + +/** + * This function check if property has read function + * This function does not check the property object type + * + * @param self The property object + * @return Return a boolean value + **/ +bool isReadable(const PySideProperty* self); + +/** + * This function check if property has write function + * This function does not check the property object type + * + * @param self The property object + * @return Return a boolean value + **/ +bool isWritable(const PySideProperty* self); + +/** + * This function check if property has reset function + * This function does not check the property object type + * + * @param self The property object + * @return Return a boolean value + **/ +bool hasReset(const PySideProperty* self); + +/** + * This function check if property has the flag DESIGNABLE setted + * This function does not check the property object type + * + * @param self The property object + * @return Return a boolean value + **/ +bool isDesignable(const PySideProperty* self); + +/** + * This function check if property has the flag SCRIPTABLE setted + * This function does not check the property object type + * + * @param self The property object + * @return Return a boolean value + **/ +bool isScriptable(const PySideProperty* self); + +/** + * This function check if property has the flag STORED setted + * This function does not check the property object type + * + * @param self The property object + * @return Return a boolean value + **/ +bool isStored(const PySideProperty* self); + +/** + * This function check if property has the flag USER setted + * This function does not check the property object type + * + * @param self The property object + * @return Return a boolean value + **/ +bool isUser(const PySideProperty* self); + +/** + * This function check if property has the flag CONSTANT setted + * This function does not check the property object type + * + * @param self The property object + * @return Return a boolean value + **/ +bool isConstant(const PySideProperty* self); + +/** + * This function check if property has the flag FINAL setted + * This function does not check the property object type + * + * @param self The property object + * @return Return a boolean value + **/ +bool isFinal(const PySideProperty* self); + +} // namespace Property +} // namespace PySide + +#endif diff --git a/sources/pyside2/libpyside/pysideqflags.cpp b/sources/pyside2/libpyside/pysideqflags.cpp new file mode 100644 index 0000000..7a8fa2a --- /dev/null +++ b/sources/pyside2/libpyside/pysideqflags.cpp @@ -0,0 +1,211 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "pysideqflags.h" +#include +#include + +extern "C" { + struct SbkConverter; + + struct PySideQFlagsTypePrivate + { + SbkConverter** converterPtr; + SbkConverter* converter; + }; + /** + * Type of all QFlags + */ + struct PySideQFlagsType + { + PyTypeObject type; + }; + + #define PYSIDE_QFLAGS(X) reinterpret_cast(X) + + PyObject *PySideQFlagsNew(PyTypeObject *type, PyObject *args, PyObject * /* kwds */) + { + long val = 0; + if (PyTuple_GET_SIZE(args)) { + PyObject* arg = PyTuple_GET_ITEM(args, 0); + if (Shiboken::isShibokenEnum(arg)) {// faster call + val = Shiboken::Enum::getValue(arg); + } else if (PyNumber_Check(arg)) { + Shiboken::AutoDecRef number(PyNumber_Long(arg)); + val = PyLong_AsLong(number); + } else { + PyErr_SetString(PyExc_TypeError,"QFlags must be created using enums or numbers."); + return 0; + } + } + PySideQFlagsObject* self = PyObject_New(PySideQFlagsObject, type); + self->ob_value = val; + return reinterpret_cast(self); + } + + static long getNumberValue(PyObject* v) + { + Shiboken::AutoDecRef number(PyNumber_Long(v)); + return PyLong_AsLong(number); + } + + PyObject* PySideQFlagsRichCompare(PyObject* self, PyObject* other, int op) + { + int result = 0; + if (!PyNumber_Check(other)) { + PyErr_BadArgument(); + return NULL; + } + + long valA = PYSIDE_QFLAGS(self)->ob_value; + long valB = getNumberValue(other); + + if (self == other) { + result = 1; + } else { + switch (op) { + case Py_EQ: + result = (valA == valB); + break; + case Py_NE: + result = (valA != valB); + break; + case Py_LE: + result = (valA <= valB); + break; + case Py_GE: + result = (valA >= valB); + break; + case Py_LT: + result = (valA < valB); + break; + case Py_GT: + result = (valA > valB); + break; + default: + PyErr_BadArgument(); + return NULL; + } + } + if (result) + Py_RETURN_TRUE; + else + Py_RETURN_FALSE; + } +} + +namespace PySide +{ +namespace QFlags +{ + static PyType_Slot SbkNewQFlagsType_slots[] = { +#ifdef IS_PY3K + {Py_nb_bool, 0}, +#else + {Py_nb_nonzero, 0}, + {Py_nb_long, 0}, +#endif + {Py_nb_invert, 0}, + {Py_nb_and, 0}, + {Py_nb_xor, 0}, + {Py_nb_or, 0}, + {Py_nb_int, 0}, +#ifndef IS_PY3K + {Py_nb_long, 0}, +#endif + {Py_tp_new, (void *)PySideQFlagsNew}, + {Py_tp_richcompare, (void *)PySideQFlagsRichCompare}, + {Py_tp_dealloc, (void *)SbkDummyDealloc}, + {0, 0} + }; + static PyType_Spec SbkNewQFlagsType_spec = { + "missing QFlags name", // to be inserted later + sizeof(PySideQFlagsObject), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES, + SbkNewQFlagsType_slots, + }; + + PyTypeObject *create(const char* name, PyType_Slot numberMethods[]) + { + char qualname[200]; + // PYSIDE-747: Here we insert now the full class name. + strcpy(qualname, name); + // Careful: PyType_FromSpec does not allocate the string. + PyType_Spec *newspec = new PyType_Spec; + newspec->name = strdup(qualname); + newspec->basicsize = SbkNewQFlagsType_spec.basicsize; + newspec->itemsize = SbkNewQFlagsType_spec.itemsize; + newspec->flags = SbkNewQFlagsType_spec.flags; + int idx = -1; +#ifdef IS_PY3K +# define SLOT slot +#else +# define SLOT slot_ +#endif + while (numberMethods[++idx].SLOT) { + assert(SbkNewQFlagsType_slots[idx].SLOT == numberMethods[idx].SLOT); + SbkNewQFlagsType_slots[idx].pfunc = numberMethods[idx].pfunc; + } + newspec->slots = SbkNewQFlagsType_spec.slots; + PyTypeObject *type = (PyTypeObject *)PyType_FromSpec(newspec); + Py_TYPE(type) = &PyType_Type; + + PySideQFlagsType* flagsType = reinterpret_cast(type); + PepType_PFTP(flagsType)->converterPtr = &PepType_PFTP(flagsType)->converter; + + if (PyType_Ready(type) < 0) + return 0; + + return type; + } + + PySideQFlagsObject* newObject(long value, PyTypeObject* type) + { + PySideQFlagsObject* qflags = PyObject_New(PySideQFlagsObject, type); + qflags->ob_value = value; + return qflags; + } + + long getValue(PySideQFlagsObject* self) + { + return self->ob_value; + } +} +} diff --git a/sources/pyside2/libpyside/pysideqflags.h b/sources/pyside2/libpyside/pysideqflags.h new file mode 100644 index 0000000..71f3080 --- /dev/null +++ b/sources/pyside2/libpyside/pysideqflags.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDE_QFLAGS_H +#define PYSIDE_QFLAGS_H + +#include +#include "pysidemacros.h" + + +extern "C" +{ + struct PYSIDE_API PySideQFlagsObject { + PyObject_HEAD + long ob_value; + }; + + PYSIDE_API PyObject* PySideQFlagsNew(PyTypeObject *type, PyObject *args, PyObject *kwds); + PYSIDE_API PyObject* PySideQFlagsRichCompare(PyObject *self, PyObject *other, int op); +} + + +namespace PySide +{ +namespace QFlags +{ + /** + * Creates a new QFlags type. + */ + PYSIDE_API PyTypeObject *create(const char* name, PyType_Slot *numberMethods); + /** + * Creates a new QFlags instance of type \p type and value \p value. + */ + PYSIDE_API PySideQFlagsObject* newObject(long value, PyTypeObject* type); + /** + * Returns the value held by a QFlag. + */ + PYSIDE_API long getValue(PySideQFlagsObject* self); +} +} + +#endif + diff --git a/sources/pyside2/libpyside/pysidesignal.cpp b/sources/pyside2/libpyside/pysidesignal.cpp new file mode 100644 index 0000000..2d423a6 --- /dev/null +++ b/sources/pyside2/libpyside/pysidesignal.cpp @@ -0,0 +1,1057 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "pysidesignal.h" +#include "pysidesignal_p.h" +#include "signalmanager.h" + +#include +#include + +#define SIGNAL_CLASS_NAME "Signal" +#define SIGNAL_INSTANCE_NAME "SignalInstance" +#define QT_SIGNAL_SENTINEL '2' + +namespace PySide { +namespace Signal { + //aux + class SignalSignature { + public: + SignalSignature() : m_attributes(QMetaMethod::Compatibility) {} + SignalSignature(QByteArray parameterTypes) : m_parameterTypes(parameterTypes), + m_attributes(QMetaMethod::Compatibility) {} + SignalSignature(QByteArray parameterTypes, QMetaMethod::Attributes attributes) : + m_parameterTypes(parameterTypes), + m_attributes(attributes) {} + QByteArray m_parameterTypes; + QMetaMethod::Attributes m_attributes; + }; + + static char* buildSignature(const char*, const char*); + static void appendSignature(PySideSignal*, const SignalSignature &); + static void instanceInitialize(PySideSignalInstance*, PyObject*, PySideSignal*, PyObject*, int); + static char* parseSignature(PyObject*); + static PyObject* buildQtCompatible(const char*); +} +} + +extern "C" +{ + +// Signal methods +static int signalTpInit(PyObject*, PyObject*, PyObject*); +static void signalFree(void*); +static void signalInstanceFree(void*); +static PyObject* signalGetItem(PyObject* self, PyObject* key); +static PyObject* signalToString(PyObject* self); + +// Signal Instance methods +static PyObject* signalInstanceConnect(PyObject*, PyObject*, PyObject*); +static PyObject* signalInstanceDisconnect(PyObject*, PyObject*); +static PyObject* signalInstanceEmit(PyObject*, PyObject*); +static PyObject* signalInstanceGetItem(PyObject*, PyObject*); + +static PyObject* signalInstanceCall(PyObject* self, PyObject* args, PyObject* kw); +static PyObject* signalCall(PyObject*, PyObject*, PyObject*); + +static PyObject* metaSignalCheck(PyObject*, PyObject*); + + +static PyMethodDef Signal_methods[] = { + {"__instancecheck__", (PyCFunction)metaSignalCheck, METH_O, NULL}, + {0, 0, 0, 0} +}; + +static PyType_Slot PySideSignalMetaType_slots[] = { + {Py_tp_methods, (void *)Signal_methods}, + {Py_tp_base, (void *)&PyType_Type}, + {Py_tp_free, (void *)PyObject_GC_Del}, + {Py_tp_dealloc, (void *)SbkDummyDealloc}, + {0, 0} +}; +static PyType_Spec PySideSignalMetaType_spec = { + "PySide2.QtCore.MetaSignal", + 0, + // sizeof(PyHeapTypeObject) is filled in by PyType_FromSpecWithBases + // which calls PyType_Ready which calls inherit_special. + 0, + Py_TPFLAGS_DEFAULT, + PySideSignalMetaType_slots, +}; + + +PyTypeObject *PySideSignalMetaTypeF(void) +{ + static PyTypeObject *type = nullptr; + if (!type) { + PyObject *bases = Py_BuildValue("(O)", &PyType_Type); + type = (PyTypeObject *)PyType_FromSpecWithBases(&PySideSignalMetaType_spec, bases); + Py_XDECREF(bases); + } + return type; +} + +static PyType_Slot PySideSignalType_slots[] = { + {Py_mp_subscript, (void *)signalGetItem}, + {Py_tp_call, (void *)signalCall}, + {Py_tp_str, (void *)signalToString}, + {Py_tp_init, (void *)signalTpInit}, + {Py_tp_new, (void *)PyType_GenericNew}, + {Py_tp_free, (void *)signalFree}, + {Py_tp_dealloc, (void *)SbkDummyDealloc}, + {0, 0} +}; +static PyType_Spec PySideSignalType_spec = { + "PySide2.QtCore." SIGNAL_CLASS_NAME, + sizeof(PySideSignal), + 0, + Py_TPFLAGS_DEFAULT, + PySideSignalType_slots, +}; + + +PyTypeObject *PySideSignalTypeF(void) +{ + static PyTypeObject *type = nullptr; + if (!type) { + type = (PyTypeObject *)PyType_FromSpec(&PySideSignalType_spec); + PyTypeObject *hold = Py_TYPE(type); + Py_TYPE(type) = PySideSignalMetaTypeF(); + Py_INCREF(Py_TYPE(type)); + Py_DECREF(hold); + } + return type; +} + +static PyMethodDef SignalInstance_methods[] = { + {"connect", (PyCFunction)signalInstanceConnect, METH_VARARGS|METH_KEYWORDS, 0}, + {"disconnect", signalInstanceDisconnect, METH_VARARGS, 0}, + {"emit", signalInstanceEmit, METH_VARARGS, 0}, + {0, 0, 0, 0} /* Sentinel */ +}; + +static PyType_Slot PySideSignalInstanceType_slots[] = { + //{Py_tp_as_mapping, (void *)&SignalInstance_as_mapping}, + {Py_mp_subscript, (void *)signalInstanceGetItem}, + {Py_tp_call, (void *)signalInstanceCall}, + {Py_tp_methods, (void *)SignalInstance_methods}, + {Py_tp_new, (void *)PyType_GenericNew}, + {Py_tp_free, (void *)signalInstanceFree}, + {Py_tp_dealloc, (void *)SbkDummyDealloc}, + {0, 0} +}; +static PyType_Spec PySideSignalInstanceType_spec = { + "PySide2.QtCore." SIGNAL_INSTANCE_NAME, + sizeof(PySideSignalInstance), + 0, + Py_TPFLAGS_DEFAULT, + PySideSignalInstanceType_slots, +}; + + +PyTypeObject *PySideSignalInstanceTypeF(void) +{ + static PyTypeObject *type = + (PyTypeObject *)PyType_FromSpec(&PySideSignalInstanceType_spec); + return type; +} + +int signalTpInit(PyObject* self, PyObject* args, PyObject* kwds) +{ + static PyObject* emptyTuple = 0; + static const char* kwlist[] = {"name", 0}; + char* argName = 0; + + if (emptyTuple == 0) + emptyTuple = PyTuple_New(0); + + if (!PyArg_ParseTupleAndKeywords(emptyTuple, kwds, + "|s:QtCore." SIGNAL_CLASS_NAME, const_cast(kwlist), &argName)) + return 0; + + bool tupledArgs = false; + PySideSignal* data = reinterpret_cast(self); + if (argName) { + data->signalName = strdup(argName); + } + + for (Py_ssize_t i = 0, i_max = PyTuple_Size(args); i < i_max; i++) { + PyObject* arg = PyTuple_GET_ITEM(args, i); + if (PySequence_Check(arg) && !Shiboken::String::check(arg)) { + tupledArgs = true; + char *sig = PySide::Signal::parseSignature(arg); + PySide::Signal::appendSignature( + data, + PySide::Signal::SignalSignature(sig)); + free(sig); + } + } + + if (!tupledArgs) { + char *sig = PySide::Signal::parseSignature(args); + PySide::Signal::appendSignature( + data, + PySide::Signal::SignalSignature(sig)); + free(sig); + } + + return 1; +} + +void signalFree(void* self) +{ + PyObject* pySelf = reinterpret_cast(self); + PySideSignal* data = reinterpret_cast(self); + + for (int i = 0, i_max = data->signaturesSize; i < i_max; i++) { + if (data->signatures[i]) + free(data->signatures[i]); + } + + free(data->signatures); + free(data->signatureAttributes); + free(data->signalName); + data->initialized = 0; + data->signaturesSize = 0; + Py_XDECREF(data->homonymousMethod); + data->homonymousMethod = 0; + + Py_TYPE(pySelf)->tp_base->tp_free(self); +} + +PyObject* signalGetItem(PyObject* self, PyObject* key) +{ + PySideSignal* data = reinterpret_cast(self); + char* sigKey; + if (key) { + sigKey = PySide::Signal::parseSignature(key); + } else { + if (data->signatures[0]) + sigKey = strdup(data->signatures[0]); + else + sigKey = strdup("void"); + } + char* sig = PySide::Signal::buildSignature(data->signalName, sigKey); + free(sigKey); + PyObject* pySignature = Shiboken::String::fromCString(sig); + free(sig); + return pySignature; +} + + +PyObject* signalToString(PyObject* self) +{ + return signalGetItem(self, 0); +} + +void signalInstanceFree(void* self) +{ + PyObject* pySelf = reinterpret_cast(self); + PySideSignalInstance* data = reinterpret_cast(self); + + PySideSignalInstancePrivate* dataPvt = data->d; + free(dataPvt->signalName); + free(dataPvt->signature); + + Py_XDECREF(dataPvt->homonymousMethod); + + if (dataPvt->next) { + Py_DECREF(dataPvt->next); + dataPvt->next = 0; + } + delete dataPvt; + data->d = 0; + Py_TYPE(pySelf)->tp_base->tp_free(self); +} + +PyObject* signalInstanceConnect(PyObject* self, PyObject* args, PyObject* kwds) +{ + PyObject* slot = 0; + PyObject* type = 0; + static const char* kwlist[] = {"slot", "type", 0}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, + "O|O:" SIGNAL_INSTANCE_NAME, const_cast(kwlist), &slot, &type)) + return 0; + + PySideSignalInstance* source = reinterpret_cast(self); + Shiboken::AutoDecRef pyArgs(PyList_New(0)); + + bool match = false; + if (Py_TYPE(slot) == PySideSignalInstanceTypeF()) { + PySideSignalInstance* sourceWalk = source; + PySideSignalInstance* targetWalk; + + //find best match + while (sourceWalk && !match) { + targetWalk = reinterpret_cast(slot); + while (targetWalk && !match) { + if (QMetaObject::checkConnectArgs(sourceWalk->d->signature, targetWalk->d->signature)) { + PyList_Append(pyArgs, sourceWalk->d->source); + Shiboken::AutoDecRef sourceSignature(PySide::Signal::buildQtCompatible(sourceWalk->d->signature)); + PyList_Append(pyArgs, sourceSignature); + + PyList_Append(pyArgs, targetWalk->d->source); + Shiboken::AutoDecRef targetSignature(PySide::Signal::buildQtCompatible(targetWalk->d->signature)); + PyList_Append(pyArgs, targetSignature); + + match = true; + } + targetWalk = reinterpret_cast(targetWalk->d->next); + } + sourceWalk = reinterpret_cast(sourceWalk->d->next); + } + } else { + // Check signature of the slot (method or function) to match signal + int slotArgs = -1; + bool useSelf = false; + bool isMethod = PyMethod_Check(slot); + bool isFunction = PyFunction_Check(slot); + bool matchedSlot = false; + + QByteArray functionName; + PySideSignalInstance *it = source; + + if (isMethod || isFunction) { + PyObject *function = isMethod ? PyMethod_GET_FUNCTION(slot) : slot; + PyCodeObject *objCode = reinterpret_cast(PyFunction_GET_CODE(function)); + useSelf = isMethod; + slotArgs = PepCode_GET_FLAGS(objCode) & CO_VARARGS ? -1 : PepCode_GET_ARGCOUNT(objCode); + if (useSelf) + slotArgs -= 1; + + // Get signature args + bool isShortCircuit = false; + int signatureArgs = 0; + QStringList argsSignature; + + argsSignature = PySide::Signal::getArgsFromSignature(it->d->signature, + &isShortCircuit); + signatureArgs = argsSignature.length(); + + // Iterate the possible types of connection for this signal and compare + // it with slot arguments + if (signatureArgs != slotArgs) { + while (it->d->next != nullptr) { + it = it->d->next; + argsSignature = PySide::Signal::getArgsFromSignature(it->d->signature, + &isShortCircuit); + signatureArgs = argsSignature.length(); + if (signatureArgs == slotArgs) { + matchedSlot = true; + break; + } + } + } + } + + // Adding references to pyArgs + PyList_Append(pyArgs, source->d->source); + + if (matchedSlot) { + // If a slot matching the same number of arguments was found, + // include signature to the pyArgs + Shiboken::AutoDecRef signature(PySide::Signal::buildQtCompatible(it->d->signature)); + PyList_Append(pyArgs, signature); + } else { + // Try the first by default if the slot was not found + Shiboken::AutoDecRef signature(PySide::Signal::buildQtCompatible(source->d->signature)); + PyList_Append(pyArgs, signature); + } + PyList_Append(pyArgs, slot); + match = true; + } + + if (type) + PyList_Append(pyArgs, type); + + if (match) { + Shiboken::AutoDecRef tupleArgs(PyList_AsTuple(pyArgs)); + Shiboken::AutoDecRef pyMethod(PyObject_GetAttrString(source->d->source, "connect")); + if (pyMethod.isNull()) { // PYSIDE-79: check if pyMethod exists. + PyErr_SetString(PyExc_RuntimeError, "method 'connect' vanished!"); + return 0; + } + PyObject* result = PyObject_CallObject(pyMethod, tupleArgs); + if (result == Py_True || result == Py_False) + return result; + else + Py_XDECREF(result); + } + if (!PyErr_Occurred()) // PYSIDE-79: inverse the logic. A Null return needs an error. + PyErr_Format(PyExc_RuntimeError, "Failed to connect signal %s.", source->d->signature); + return 0; +} + +int argCountInSignature(const char *signature) +{ + return QByteArray(signature).count(",") + 1; +} + +PyObject* signalInstanceEmit(PyObject* self, PyObject* args) +{ + PySideSignalInstance* source = reinterpret_cast(self); + + Shiboken::AutoDecRef pyArgs(PyList_New(0)); + int numArgsGiven = PySequence_Fast_GET_SIZE(args); + int numArgsInSignature = argCountInSignature(source->d->signature); + + // If number of arguments given to emit is smaller than the first source signature expects, + // it is possible it's a case of emitting a signal with default parameters. + // Search through all the overloaded signals with the same name, and try to find a signature + // with the same number of arguments as given to emit, and is also marked as a cloned method + // (which in metaobject parlance means a signal with default parameters). + // @TODO: This should be improved to take into account argument types as well. The current + // assumption is there are no signals which are both overloaded on argument types and happen to + // have signatures with default parameters. + if (numArgsGiven < numArgsInSignature) { + PySideSignalInstance *possibleDefaultInstance = source; + while ((possibleDefaultInstance = possibleDefaultInstance->d->next)) { + if (possibleDefaultInstance->d->attributes & QMetaMethod::Cloned + && argCountInSignature(possibleDefaultInstance->d->signature) == numArgsGiven) { + source = possibleDefaultInstance; + break; + } + } + } + Shiboken::AutoDecRef sourceSignature(PySide::Signal::buildQtCompatible(source->d->signature)); + + PyList_Append(pyArgs, sourceSignature); + for (Py_ssize_t i = 0, max = PyTuple_Size(args); i < max; i++) + PyList_Append(pyArgs, PyTuple_GetItem(args, i)); + + Shiboken::AutoDecRef pyMethod(PyObject_GetAttrString(source->d->source, "emit")); + + Shiboken::AutoDecRef tupleArgs(PyList_AsTuple(pyArgs)); + return PyObject_CallObject(pyMethod, tupleArgs); +} + +PyObject* signalInstanceGetItem(PyObject* self, PyObject* key) +{ + PySideSignalInstance* data = reinterpret_cast(self); + char* sigKey = PySide::Signal::parseSignature(key); + char* sig = PySide::Signal::buildSignature(data->d->signalName, sigKey); + free(sigKey); + const char* sigName = data->d->signalName; + + while (data) { + if (strcmp(data->d->signature, sig) == 0) { + free(sig); + PyObject* result = reinterpret_cast(data); + Py_INCREF(result); + return result; + } + data = reinterpret_cast(data->d->next); + } + + PyErr_Format(PyExc_IndexError, "Signature %s not found for signal: %s", sig, sigName); + free(sig); + return 0; +} + +PyObject* signalInstanceDisconnect(PyObject* self, PyObject* args) +{ + PySideSignalInstance* source = reinterpret_cast(self); + Shiboken::AutoDecRef pyArgs(PyList_New(0)); + + PyObject* slot; + if (PyTuple_Check(args) && PyTuple_GET_SIZE(args)) + slot = PyTuple_GET_ITEM(args, 0); + else + slot = Py_None; + + bool match = false; + if (Py_TYPE(slot) == PySideSignalInstanceTypeF()) { + PySideSignalInstance* target = reinterpret_cast(slot); + if (QMetaObject::checkConnectArgs(source->d->signature, target->d->signature)) { + PyList_Append(pyArgs, source->d->source); + Shiboken::AutoDecRef source_signature(PySide::Signal::buildQtCompatible(source->d->signature)); + PyList_Append(pyArgs, source_signature); + + PyList_Append(pyArgs, target->d->source); + Shiboken::AutoDecRef target_signature(PySide::Signal::buildQtCompatible(target->d->signature)); + PyList_Append(pyArgs, target_signature); + match = true; + } + } else { + //try the first signature + PyList_Append(pyArgs, source->d->source); + Shiboken::AutoDecRef signature(PySide::Signal::buildQtCompatible(source->d->signature)); + PyList_Append(pyArgs, signature); + + // disconnect all, so we need to use the c++ signature disconnect(qobj, signal, 0, 0) + if (slot == Py_None) + PyList_Append(pyArgs, slot); + PyList_Append(pyArgs, slot); + match = true; + } + + if (match) { + Shiboken::AutoDecRef tupleArgs(PyList_AsTuple(pyArgs)); + Shiboken::AutoDecRef pyMethod(PyObject_GetAttrString(source->d->source, "disconnect")); + PyObject* result = PyObject_CallObject(pyMethod, tupleArgs); + if (!result || result == Py_True) + return result; + else + Py_DECREF(result); + } + + PyErr_Format(PyExc_RuntimeError, "Failed to disconnect signal %s.", source->d->signature); + return 0; +} + +PyObject* signalCall(PyObject* self, PyObject* args, PyObject* kw) +{ + PySideSignal* signal = reinterpret_cast(self); + + // Native C++ signals can't be called like functions, thus we throw an exception. + // The only way calling a signal can succeed (the Python equivalent of C++'s operator() ) + // is when a method with the same name as the signal is attached to an object. + // An example is QProcess::error() (don't check the docs, but the source code of qprocess.h). + if (!signal->homonymousMethod) { + PyErr_SetString(PyExc_TypeError, "native Qt signal is not callable"); + return 0; + } + + descrgetfunc getDescriptor = Py_TYPE(signal->homonymousMethod)->tp_descr_get; + + // Check if there exists a method with the same name as the signal, which is also a static + // method in C++ land. + Shiboken::AutoDecRef homonymousMethod(getDescriptor(signal->homonymousMethod, 0, 0)); + if (PyCFunction_Check(homonymousMethod) + && (PyCFunction_GET_FLAGS(homonymousMethod.object()) & METH_STATIC)) { + return PyCFunction_Call(homonymousMethod, args, kw); + } + + // Assumes homonymousMethod is not a static method. + ternaryfunc callFunc = Py_TYPE(signal->homonymousMethod)->tp_call; + return callFunc(homonymousMethod, args, kw); +} + +PyObject* signalInstanceCall(PyObject* self, PyObject* args, PyObject* kw) +{ + PySideSignalInstance* PySideSignal = reinterpret_cast(self); + if (!PySideSignal->d->homonymousMethod) { + PyErr_SetString(PyExc_TypeError, "native Qt signal is not callable"); + return 0; + } + + descrgetfunc getDescriptor = Py_TYPE(PySideSignal->d->homonymousMethod)->tp_descr_get; + Shiboken::AutoDecRef homonymousMethod(getDescriptor(PySideSignal->d->homonymousMethod, PySideSignal->d->source, 0)); + return PyCFunction_Call(homonymousMethod, args, kw); +} + +static PyObject *metaSignalCheck(PyObject * /* klass */, PyObject* args) +{ + if (PyType_IsSubtype(Py_TYPE(args), PySideSignalInstanceTypeF())) + Py_RETURN_TRUE; + else + Py_RETURN_FALSE; +} + +} // extern "C" + +namespace PySide { +namespace Signal { + +void init(PyObject* module) +{ + if (PyType_Ready(PySideSignalMetaTypeF()) < 0) + return; + + if (PyType_Ready(PySideSignalTypeF()) < 0) + return; + + Py_INCREF(PySideSignalTypeF()); + PyModule_AddObject(module, SIGNAL_CLASS_NAME, reinterpret_cast(PySideSignalTypeF())); + + if (PyType_Ready(PySideSignalInstanceTypeF()) < 0) + return; + + Py_INCREF(PySideSignalInstanceTypeF()); +} + +bool checkType(PyObject* pyObj) +{ + if (pyObj) + return PyType_IsSubtype(Py_TYPE(pyObj), PySideSignalTypeF()); + return false; +} + +void updateSourceObject(PyObject* source) +{ + PyTypeObject* objType = reinterpret_cast(PyObject_Type(source)); + + Py_ssize_t pos = 0; + PyObject* value; + PyObject* key; + + while (PyDict_Next(objType->tp_dict, &pos, &key, &value)) { + if (PyObject_TypeCheck(value, PySideSignalTypeF())) { + Shiboken::AutoDecRef signalInstance(reinterpret_cast(PyObject_New(PySideSignalInstance, PySideSignalInstanceTypeF()))); + instanceInitialize(signalInstance.cast(), key, reinterpret_cast(value), source, 0); + PyObject_SetAttr(source, key, signalInstance); + } + } + + Py_XDECREF(objType); +} + +char* getTypeName(PyObject* type) +{ + if (PyType_Check(type)) { + char* typeName = NULL; + if (PyType_IsSubtype(reinterpret_cast(type), + reinterpret_cast(SbkObject_TypeF()))) { + SbkObjectType* objType = reinterpret_cast(type); + typeName = strdup(Shiboken::ObjectType::getOriginalName(objType)); + } else { + // Translate python types to Qt names + PyTypeObject* objType = reinterpret_cast(type); + if (Shiboken::String::checkType(objType)) + typeName = strdup("QString"); + else if (objType == &PyInt_Type) + typeName = strdup("int"); + else if (objType == &PyLong_Type) + typeName = strdup("long"); + else if (objType == &PyFloat_Type) + typeName = strdup("double"); + else if (objType == &PyBool_Type) + typeName = strdup("bool"); + else if (Py_TYPE(objType) == SbkEnumType_TypeF()) + typeName = strdup(Shiboken::Enum::getCppName(objType)); + else + typeName = strdup("PyObject"); + } + return typeName; + } else if (type == Py_None) { // Must be checked before as Shiboken::String::check accepts Py_None + return strdup("void"); + } else if (Shiboken::String::check(type)) { + const char *result = Shiboken::String::toCString(type); + if (!strcmp(result, "qreal")) + result = sizeof(qreal) == sizeof(double) ? "double" : "float"; + return strdup(result); + } + return 0; +} + +char* buildSignature(const char* name, const char* signature) +{ + QByteArray signal(name); + signal += '('; + signal += signature; + signal += ')'; + return strdup(QMetaObject::normalizedSignature(signal)); +} + +char* parseSignature(PyObject* args) +{ + char* signature = 0; + if (args && (Shiboken::String::check(args) || !PySequence_Check(args))) + return getTypeName(args); + + for (Py_ssize_t i = 0, i_max = PySequence_Size(args); i < i_max; i++) { + Shiboken::AutoDecRef arg(PySequence_GetItem(args, i)); + char* typeName = getTypeName(arg); + if (typeName) { + if (signature) { + signature = reinterpret_cast(realloc(signature, (strlen(signature) + 1 + strlen(typeName)) * sizeof(char*))); + signature = strcat(signature, ","); + signature = strcat(signature, typeName); + free(typeName); + } else { + signature = typeName; + } + } + } + return signature; +} + +void appendSignature(PySideSignal* self, const SignalSignature &signature) +{ + self->signaturesSize++; + + if (self->signaturesSize > 1) { + self->signatures = reinterpret_cast(realloc(self->signatures, sizeof(char *) * self->signaturesSize)); + self->signatureAttributes = reinterpret_cast(realloc(self->signatureAttributes, sizeof(int) * self->signaturesSize)); + } else { + self->signatures = reinterpret_cast(malloc(sizeof(char *))); + self->signatureAttributes = reinterpret_cast(malloc(sizeof(int))); + } + self->signatures[self->signaturesSize - 1] = strdup(signature.m_parameterTypes); + self->signatureAttributes[self->signaturesSize - 1] = signature.m_attributes; +} + +PySideSignalInstance* initialize(PySideSignal* self, PyObject* name, PyObject* object) +{ + PySideSignalInstance* instance = PyObject_New(PySideSignalInstance, PySideSignalInstanceTypeF()); + SbkObject* sbkObj = reinterpret_cast(object); + if (!Shiboken::Object::wasCreatedByPython(sbkObj)) + Py_INCREF(object); // PYSIDE-79: this flag was crucial for a wrapper call. + instanceInitialize(instance, name, self, object, 0); + return instance; +} + +void instanceInitialize(PySideSignalInstance* self, PyObject* name, PySideSignal* data, PyObject* source, int index) +{ + self->d = new PySideSignalInstancePrivate; + PySideSignalInstancePrivate* selfPvt = self->d; + selfPvt->next = 0; + if (data->signalName) + selfPvt->signalName = strdup(data->signalName); + else { + selfPvt->signalName = strdup(Shiboken::String::toCString(name)); + data->signalName = strdup(selfPvt->signalName); + } + + selfPvt->source = source; + selfPvt->signature = buildSignature(self->d->signalName, data->signatures[index]); + selfPvt->attributes = data->signatureAttributes[index]; + selfPvt->homonymousMethod = 0; + if (data->homonymousMethod) { + selfPvt->homonymousMethod = data->homonymousMethod; + Py_INCREF(selfPvt->homonymousMethod); + } + index++; + + if (index < data->signaturesSize) { + selfPvt->next = PyObject_New(PySideSignalInstance, PySideSignalInstanceTypeF()); + instanceInitialize(selfPvt->next, name, data, source, index); + } +} + +bool connect(PyObject* source, const char* signal, PyObject* callback) +{ + Shiboken::AutoDecRef pyMethod(PyObject_GetAttrString(source, "connect")); + if (pyMethod.isNull()) + return false; + + Shiboken::AutoDecRef pySignature(Shiboken::String::fromCString(signal)); + Shiboken::AutoDecRef pyArgs(PyTuple_Pack(3, source, pySignature.object(), callback)); + PyObject* result = PyObject_CallObject(pyMethod, pyArgs); + if (result == Py_False) { + PyErr_Format(PyExc_RuntimeError, "Failed to connect signal %s, to python callable object.", signal); + Py_DECREF(result); + result = 0; + } + return result; +} + +PySideSignalInstance* newObjectFromMethod(PyObject* source, const QList& methodList) +{ + PySideSignalInstance* root = 0; + PySideSignalInstance* previous = 0; + foreach (const QMetaMethod &m, methodList) { + PySideSignalInstance* item = PyObject_New(PySideSignalInstance, PySideSignalInstanceTypeF()); + if (!root) + root = item; + + if (previous) + previous->d->next = item; + + item->d = new PySideSignalInstancePrivate; + PySideSignalInstancePrivate* selfPvt = item->d; + selfPvt->source = source; + Py_INCREF(selfPvt->source); // PYSIDE-79: an INCREF is missing. + QByteArray cppName(m.methodSignature()); + cppName.truncate(cppName.indexOf('(')); + // separe SignalName + selfPvt->signalName = strdup(cppName.data()); + selfPvt->signature = strdup(m.methodSignature()); + selfPvt->attributes = m.attributes(); + selfPvt->homonymousMethod = 0; + selfPvt->next = 0; + } + return root; +} + +PySideSignal* newObject(const char* name, ...) +{ + va_list listSignatures; + char* sig = 0; + PySideSignal* self = PyObject_New(PySideSignal, PySideSignalTypeF()); + self->signalName = strdup(name); + self->signaturesSize = 0; + self->signatures = 0; + self->signatureAttributes = 0; + self->initialized = 0; + self->homonymousMethod = 0; + + va_start(listSignatures, name); + sig = va_arg(listSignatures, char*); + + while (sig != NULL) { + if (strcmp(sig, "void") == 0) + appendSignature(self, SignalSignature("")); + else + appendSignature(self, SignalSignature(sig)); + + sig = va_arg(listSignatures, char*); + } + + va_end(listSignatures); + + return self; +} + +template +static typename T::value_type join(T t, const char* sep) +{ + typename T::value_type res; + if (!t.size()) + return res; + + typename T::const_iterator it = t.begin(); + typename T::const_iterator end = t.end(); + res += *it; + ++it; + + while (it != end) { + res += sep; + res += *it; + ++it; + } + return res; +} + +static void _addSignalToWrapper(SbkObjectType* wrapperType, const char* signalName, PySideSignal* signal) +{ + PyObject* typeDict = reinterpret_cast(wrapperType)->tp_dict; + PyObject* homonymousMethod; + if ((homonymousMethod = PyDict_GetItemString(typeDict, signalName))) { + Py_INCREF(homonymousMethod); + signal->homonymousMethod = homonymousMethod; + } + PyDict_SetItemString(typeDict, signalName, reinterpret_cast(signal)); +} + +// This function is used by qStableSort to promote empty signatures +static bool compareSignals(const SignalSignature &sig1, const SignalSignature &) +{ + return sig1.m_parameterTypes.isEmpty(); +} + +void registerSignals(SbkObjectType* pyObj, const QMetaObject* metaObject) +{ + typedef QHash > SignalSigMap; + SignalSigMap signalsFound; + for (int i = metaObject->methodOffset(), max = metaObject->methodCount(); i < max; ++i) { + QMetaMethod method = metaObject->method(i); + + if (method.methodType() == QMetaMethod::Signal) { + QByteArray methodName(method.methodSignature()); + methodName.chop(methodName.size() - methodName.indexOf('(')); + SignalSignature signature; + signature.m_parameterTypes = join(method.parameterTypes(), ","); + if (method.attributes() & QMetaMethod::Cloned) + signature.m_attributes = QMetaMethod::Cloned; + signalsFound[methodName] << signature; + } + } + + SignalSigMap::Iterator it = signalsFound.begin(); + SignalSigMap::Iterator end = signalsFound.end(); + for (; it != end; ++it) { + PySideSignal* self = PyObject_New(PySideSignal, PySideSignalTypeF()); + self->signalName = strdup(it.key().constData()); + self->signaturesSize = 0; + self->signatures = 0; + self->signatureAttributes = 0; + self->initialized = 0; + self->homonymousMethod = 0; + + // Empty signatures comes first! So they will be the default signal signature + qStableSort(it.value().begin(), it.value().end(), &compareSignals); + SignalSigMap::mapped_type::const_iterator j = it.value().begin(); + SignalSigMap::mapped_type::const_iterator endJ = it.value().end(); + for (; j != endJ; ++j) { + const SignalSignature &sig = *j; + appendSignature(self, sig); + } + + _addSignalToWrapper(pyObj, it.key(), self); + Py_DECREF(reinterpret_cast(self)); + } +} + +PyObject* buildQtCompatible(const char* signature) +{ + QByteArray ba; + ba.append(QT_SIGNAL_SENTINEL); + ba.append(signature); + return Shiboken::String::fromStringAndSize(ba, ba.size()); +} + +void addSignalToWrapper(SbkObjectType* wrapperType, const char* signalName, PySideSignal* signal) +{ + _addSignalToWrapper(wrapperType, signalName, signal); +} + +PyObject* getObject(PySideSignalInstance* signal) +{ + return signal->d->source; +} + +const char* getSignature(PySideSignalInstance* signal) +{ + return signal->d->signature; +} + +const char** getSignatures(PyObject* signal, int* size) +{ + PySideSignal* self = reinterpret_cast(signal); + *size = self->signaturesSize; + return const_cast(self->signatures); +} + +QStringList getArgsFromSignature(const char* signature, bool* isShortCircuit) +{ + const QString qsignature = QLatin1String(signature); + QStringList result; + QRegExp splitRegex(QLatin1String("\\s*,\\s*")); + + if (isShortCircuit) + *isShortCircuit = !qsignature.contains(QLatin1Char('(')); + if (qsignature.contains(QLatin1String("()")) || qsignature.contains(QLatin1String("(void)"))) { + return result; + } else if (qsignature.contains(QLatin1Char('('))) { + static QRegExp regex(QLatin1String(".+\\((.*)\\)")); + //get args types + QString types = qsignature; + types.replace(regex, QLatin1String("\\1")); + result = types.split(splitRegex); + } + return result; +} + +QString getCallbackSignature(const char* signal, QObject* receiver, PyObject* callback, bool encodeName) +{ + QByteArray functionName; + int numArgs = -1; + bool useSelf = false; + bool isMethod = PyMethod_Check(callback); + bool isFunction = PyFunction_Check(callback); + + if (isMethod || isFunction) { + PyObject* function = isMethod ? PyMethod_GET_FUNCTION(callback) : callback; + PyCodeObject* objCode = reinterpret_cast(PyFunction_GET_CODE(function)); + functionName = Shiboken::String::toCString(PepFunction_GetName(function)); + useSelf = isMethod; + numArgs = PepCode_GET_FLAGS(objCode) & CO_VARARGS ? -1 : PepCode_GET_ARGCOUNT(objCode); + } else if (PyCFunction_Check(callback)) { + const PyCFunctionObject *funcObj = reinterpret_cast(callback); + functionName = PepCFunction_GET_NAMESTR(funcObj); + useSelf = PyCFunction_GET_SELF(funcObj); + const int flags = PyCFunction_GET_FLAGS(funcObj); + + if (receiver) { + //Search for signature on metaobject + const QMetaObject* mo = receiver->metaObject(); + QByteArray prefix(functionName); + prefix += '('; + for (int i = 0; i < mo->methodCount(); i++) { + QMetaMethod me = mo->method(i); + if ((strncmp(me.methodSignature(), prefix, prefix.size()) == 0) && + QMetaObject::checkConnectArgs(signal, me.methodSignature())) { + numArgs = me.parameterTypes().size() + useSelf; + break; + } + } + } + + if (numArgs == -1) { + if (flags & METH_VARARGS) + numArgs = -1; + else if (flags & METH_NOARGS) + numArgs = 0; + } + } else if (PyCallable_Check(callback)) { + functionName = "__callback" + QByteArray::number((qlonglong)callback); + } + + Q_ASSERT(!functionName.isEmpty()); + + bool isShortCircuit = false; + + const QString functionNameS = QLatin1String(functionName); + QString signature = encodeName ? codeCallbackName(callback, functionNameS) : functionNameS; + QStringList args = getArgsFromSignature(signal, &isShortCircuit); + + if (!isShortCircuit) { + signature.append(QLatin1Char('(')); + if (numArgs == -1) + numArgs = std::numeric_limits::max(); + while (args.count() && (args.count() > (numArgs - useSelf))) { + args.removeLast(); + } + signature.append(args.join(QLatin1Char(','))); + signature.append(QLatin1Char(')')); + } + return signature; +} + +bool isQtSignal(const char* signal) +{ + return (signal && signal[0] == QT_SIGNAL_SENTINEL); +} + +bool checkQtSignal(const char* signal) +{ + if (!isQtSignal(signal)) { + PyErr_SetString(PyExc_TypeError, "Use the function PySide2.QtCore.SIGNAL on signals"); + return false; + } + return true; +} + +QString codeCallbackName(PyObject* callback, const QString& funcName) +{ + if (PyMethod_Check(callback)) { + PyObject* self = PyMethod_GET_SELF(callback); + PyObject* func = PyMethod_GET_FUNCTION(callback); + return funcName + QString::number(quint64(self), 16) + QString::number(quint64(func), 16); + } else { + return funcName + QString::number(quint64(callback), 16); + } +} + +} //namespace Signal +} //namespace PySide + diff --git a/sources/pyside2/libpyside/pysidesignal.h b/sources/pyside2/libpyside/pysidesignal.h new file mode 100644 index 0000000..abbefbb --- /dev/null +++ b/sources/pyside2/libpyside/pysidesignal.h @@ -0,0 +1,173 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDE_SIGNAL_H +#define PYSIDE_SIGNAL_H + +#include +#include +#include + +#include +#include +#include + +extern "C" +{ + extern PYSIDE_API PyTypeObject *PySideSignalTypeF(void); + extern PYSIDE_API PyTypeObject *PySideSignalInstanceTypeF(void); + + // Internal object + struct PYSIDE_API PySideSignal; + + struct PySideSignalInstancePrivate; + struct PYSIDE_API PySideSignalInstance + { + PyObject_HEAD + PySideSignalInstancePrivate* d; + }; +}; // extern "C" + +namespace PySide { +namespace Signal { + +PYSIDE_API bool checkType(PyObject* type); + +/** + * This function creates a Signal object which stays attached to QObject class + * + * @param name of the Signal to be registered on meta object + * @param signatures a list of signatures supported by this signal, ended with a NULL pointer + * @return Return a new reference to PyObject* of type PySideSignal + * @deprecated Use registerSignals + **/ +PYSIDE_DEPRECATED(PYSIDE_API PySideSignal* newObject(const char* name, ...)); + +/** + * Register all C++ signals of a QObject on Python type. + */ +PYSIDE_API void registerSignals(SbkObjectType* pyObj, const QMetaObject* metaObject); + +/** + * This function creates a Signal object which stays attached to QObject class based on a list of QMetaMethods + * + * @param source of the Signal to be registered on meta object + * @param methods a list of QMetaMethod wich contains the supported signature + * @return Return a new reference to PyObject* of type PySideSignal + **/ +PYSIDE_API PySideSignalInstance* newObjectFromMethod(PyObject* source, const QList& methods); + +/** + * This function initializes the Signal object by creating a PySideSignalInstance + * + * @param self a Signal object used as base to PySideSignalInstance + * @param name the name to be used on PySideSignalInstance + * @param object the PyObject where the signal will be attached + * @return Return a new reference to PySideSignalInstance + **/ +PYSIDE_API PySideSignalInstance* initialize(PySideSignal* signal, PyObject* name, PyObject* object); + +/** + * This function is used to retrieve the object in which the signal is attached + * + * @param self The Signal object + * @return Return the internal reference to the parent object of the signal + **/ +PYSIDE_API PyObject* getObject(PySideSignalInstance* signal); + +/** + * This function is used to retrieve the signal signature + * + * @param self The Signal object + * @return Return the signal signature + **/ +PYSIDE_API const char* getSignature(PySideSignalInstance* signal); + +/** + * This function is used to retrieve the signal signature + * + * @param self The Signal object + * @return Return the signal signature + **/ +PYSIDE_API void updateSourceObject(PyObject* source); + +/** + * @deprecated Use registerSignals + **/ +PYSIDE_DEPRECATED(PYSIDE_API void addSignalToWrapper(SbkObjectType* wrapperType, const char* signalName, PySideSignal* signal)); + +/** + * This function verifies if the signature is a QtSignal base on SIGNAL flag + * @param signature The signal signature + * @return Return true if this is a Qt Signal, otherwise return false + **/ +PYSIDE_API bool isQtSignal(const char* signature); + +/** + * This function is similar to isQtSignal, however if it fails, it'll raise a Python error instead. + * + * @param signature The signal signature + * @return Return true if this is a Qt Signal, otherwise return false + **/ +PYSIDE_API bool checkQtSignal(const char* signature); + +/** + * This function is used to retrieve the signature base on Signal and receiver callback + * @param signature The signal signature + * @param receiver The QObject which will receive the signal + * @param callback Callback function which will connect to the signal + * @param encodeName Used to specify if the returned signature will be encoded with Qt signal/slot style + * @return Return the callback signature + **/ +PYSIDE_API QString getCallbackSignature(const char* signal, QObject* receiver, PyObject* callback, bool encodeName); + +/** + * This function parses the signature and then returns a list of argument types. + * + * @param signature The signal signature + * @param isShortCircuit If this is a shortCircuit(python<->python) signal + * @return Return true if this is a Qt Signal, otherwise return false + * @todo replace return type by QList + **/ +QStringList getArgsFromSignature(const char* signature, bool* isShortCircuit = 0); + +} // namespace Signal +} // namespace PySide + +#endif diff --git a/sources/pyside2/libpyside/pysidesignal_p.h b/sources/pyside2/libpyside/pysidesignal_p.h new file mode 100644 index 0000000..24cbde5 --- /dev/null +++ b/sources/pyside2/libpyside/pysidesignal_p.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYSIDE_QSIGNAL_P_H +#define PYSIDE_QSIGNAL_P_H + +#include + +extern "C" +{ + extern PyTypeObject *PySideSignalTypeF(void); + + struct PySideSignal { + PyObject_HEAD + bool initialized; + char* signalName; + char** signatures; + int* signatureAttributes; + int signaturesSize; + PyObject* homonymousMethod; + }; + + struct PySideSignalInstance; + struct PySideSignalInstancePrivate { + char* signalName; + char* signature; + int attributes; + PyObject* source; + PyObject* homonymousMethod; + PySideSignalInstance* next; + }; + + +}; //extern "C" + +namespace PySide { namespace Signal { + + void init(PyObject* module); + bool connect(PyObject* source, const char* signal, PyObject* callback); + char* getTypeName(PyObject*); + const char** getSignatures(PyObject* self, int *size); + QString codeCallbackName(PyObject* callback, const QString& funcName); + +}} //namespace PySide + +#endif diff --git a/sources/pyside2/libpyside/pysideslot.cpp b/sources/pyside2/libpyside/pysideslot.cpp new file mode 100644 index 0000000..fddff54 --- /dev/null +++ b/sources/pyside2/libpyside/pysideslot.cpp @@ -0,0 +1,194 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "dynamicqmetaobject_p.h" +#include "pysidesignal_p.h" +#include "pysideslot_p.h" + +#include +#include +#include + +#define SLOT_DEC_NAME "Slot" + +typedef struct +{ + PyObject_HEAD + char* slotName; + char* args; + char* resultType; +} PySideSlot; + +extern "C" +{ + +static int slotTpInit(PyObject*, PyObject*, PyObject*); +static PyObject* slotCall(PyObject*, PyObject*, PyObject*); + +// Class Definition ----------------------------------------------- +static PyType_Slot PySideSlotType_slots[] = { + {Py_tp_call, (void *)slotCall}, + {Py_tp_init, (void *)slotTpInit}, + {Py_tp_new, (void *)PyType_GenericNew}, + {Py_tp_dealloc, (void *)SbkDummyDealloc}, + {0, 0} +}; +static PyType_Spec PySideSlotType_spec = { + "PySide2.QtCore." SLOT_DEC_NAME, + sizeof(PySideSlot), + 0, + Py_TPFLAGS_DEFAULT, + PySideSlotType_slots, +}; + + +static PyTypeObject *PySideSlotTypeF(void) +{ + static PyTypeObject *type = nullptr; + if (!type) + type = (PyTypeObject *)PyType_FromSpec(&PySideSlotType_spec); + return type; +} + +int slotTpInit(PyObject *self, PyObject *args, PyObject *kw) +{ + static PyObject *emptyTuple = 0; + static const char *kwlist[] = {"name", "result", 0}; + char* argName = 0; + PyObject* argResult = 0; + + if (emptyTuple == 0) + emptyTuple = PyTuple_New(0); + + if (!PyArg_ParseTupleAndKeywords(emptyTuple, kw, "|sO:QtCore." SLOT_DEC_NAME, (char**) kwlist, &argName, &argResult)) + return 0; + + PySideSlot *data = reinterpret_cast(self); + for(Py_ssize_t i = 0, i_max = PyTuple_Size(args); i < i_max; i++) { + PyObject *argType = PyTuple_GET_ITEM(args, i); + char *typeName = PySide::Signal::getTypeName(argType); + if (typeName) { + if (data->args) { + data->args = reinterpret_cast(realloc(data->args, (strlen(data->args) + 1 + strlen(typeName)) * sizeof(char*))); + data->args = strcat(data->args, ","); + data->args = strcat(data->args, typeName); + free(typeName); + } else { + data->args = typeName; + } + } else { + PyErr_Format(PyExc_TypeError, "Unknown signal argument type: %s", Py_TYPE(argType)->tp_name); + return -1; + } + } + + if (argName) + data->slotName = strdup(argName); + + if (argResult) + data->resultType = PySide::Signal::getTypeName(argResult); + else + data->resultType = strdup("void"); + + return 1; +} + +PyObject *slotCall(PyObject *self, PyObject *args, PyObject * /* kw */) +{ + static PyObject* pySlotName = 0; + PyObject* callback; + callback = PyTuple_GetItem(args, 0); + Py_INCREF(callback); + + if (PyFunction_Check(callback)) { + PySideSlot *data = reinterpret_cast(self); + + if (!data->slotName) { + PyObject *funcName = PepFunction_GetName(callback); + data->slotName = strdup(Shiboken::String::toCString(funcName)); + } + + + QByteArray returnType = QMetaObject::normalizedType(data->resultType); + QByteArray signature = QString().sprintf("%s(%s)", data->slotName, data->args).toUtf8(); + signature = returnType + " " + signature; + + if (!pySlotName) + pySlotName = Shiboken::String::fromCString(PYSIDE_SLOT_LIST_ATTR); + + PyObject *pySignature = Shiboken::String::fromCString(signature); + PyObject *signatureList = 0; + if (PyObject_HasAttr(callback, pySlotName)) { + signatureList = PyObject_GetAttr(callback, pySlotName); + } else { + signatureList = PyList_New(0); + PyObject_SetAttr(callback, pySlotName, signatureList); + Py_DECREF(signatureList); + } + + PyList_Append(signatureList, pySignature); + Py_DECREF(pySignature); + + //clear data + free(data->slotName); + data->slotName = 0; + free(data->resultType); + data->resultType = 0; + free(data->args); + data->args = 0; + return callback; + } + return callback; +} + +} // extern "C" + +namespace PySide { namespace Slot { + +void init(PyObject* module) +{ + if (PyType_Ready(PySideSlotTypeF()) < 0) + return; + + Py_INCREF(PySideSlotTypeF()); + PyModule_AddObject(module, SLOT_DEC_NAME, reinterpret_cast(PySideSlotTypeF())); +} + +} // namespace Slot +} // namespace PySide diff --git a/sources/pyside2/libpyside/pysideslot_p.h b/sources/pyside2/libpyside/pysideslot_p.h new file mode 100644 index 0000000..3d98e15 --- /dev/null +++ b/sources/pyside2/libpyside/pysideslot_p.h @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef PYSIDE_SLOT_P_H +#define PYSIDE_SLOT_P_H + +#include +#define PYSIDE_SLOT_LIST_ATTR "_slots" + +namespace PySide { namespace Slot { + void init(PyObject* module); +}} + +#endif diff --git a/sources/pyside2/libpyside/pysideweakref.cpp b/sources/pyside2/libpyside/pysideweakref.cpp new file mode 100644 index 0000000..906aafd --- /dev/null +++ b/sources/pyside2/libpyside/pysideweakref.cpp @@ -0,0 +1,113 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "pysideweakref.h" + +#include +#include + +typedef struct { + PyObject_HEAD + /* Type-specific fields go here. */ + PySideWeakRefFunction weakref_func; + void* user_data; +} PySideCallableObject; + +static PyObject* CallableObject_call(PyObject* callable_object, PyObject* args, PyObject* kw); + +static PyType_Slot PySideCallableObjectType_slots[] = { + {Py_tp_call, (void *)CallableObject_call}, + {Py_tp_dealloc, (void *)SbkDummyDealloc}, + {0, 0} +}; +static PyType_Spec PySideCallableObjectType_spec = { + const_cast("PySide.Callable"), + sizeof(PySideCallableObject), + 0, + Py_TPFLAGS_DEFAULT, + PySideCallableObjectType_slots, +}; + + +static PyTypeObject *PySideCallableObjectTypeF(void) +{ + static PyTypeObject *type = + (PyTypeObject *)PyType_FromSpec(&PySideCallableObjectType_spec); + return type; +} + +static PyObject *CallableObject_call(PyObject *callable_object, PyObject *args, PyObject * /* kw */) +{ + PySideCallableObject* obj = reinterpret_cast(callable_object); + obj->weakref_func(obj->user_data); + + Py_XDECREF(PyTuple_GET_ITEM(args, 0)); //kill weak ref object + Py_RETURN_NONE; +} + +namespace PySide { namespace WeakRef { + +PyObject* create(PyObject* obj, PySideWeakRefFunction func, void* userData) +{ + if (obj == Py_None) + return 0; + + if (Py_TYPE(PySideCallableObjectTypeF()) == 0) + { + Py_TYPE(PySideCallableObjectTypeF()) = &PyType_Type; + PyType_Ready(PySideCallableObjectTypeF()); + } + + PySideCallableObject* callable = PyObject_New(PySideCallableObject, PySideCallableObjectTypeF()); + if (!callable || PyErr_Occurred()) + return 0; + + PyObject* weak = PyWeakref_NewRef(obj, reinterpret_cast(callable)); + if (!weak || PyErr_Occurred()) + return 0; + + callable->weakref_func = func; + callable->user_data = userData; + Py_DECREF(callable); // PYSIDE-79: after decref the callable is undefined (theoretically) + + return reinterpret_cast(weak); +} + +} } //namespace + diff --git a/sources/pyside2/libpyside/pysideweakref.h b/sources/pyside2/libpyside/pysideweakref.h new file mode 100644 index 0000000..628c1ed --- /dev/null +++ b/sources/pyside2/libpyside/pysideweakref.h @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef __PYSIDEWEAKREF__ +#define __PYSIDEWEAKREF__ + +#include +#include + +typedef void (*PySideWeakRefFunction)(void* userData); + +namespace PySide { namespace WeakRef { + +PYSIDE_API PyObject* create(PyObject* ob, PySideWeakRefFunction func, void* userData); + +} //PySide +} //WeakRef + + +#endif diff --git a/sources/pyside2/libpyside/signalmanager.cpp.in b/sources/pyside2/libpyside/signalmanager.cpp.in new file mode 100644 index 0000000..c67bc63 --- /dev/null +++ b/sources/pyside2/libpyside/signalmanager.cpp.in @@ -0,0 +1,692 @@ +// -*- mode: cpp;-*- +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "signalmanager.h" +#include "pysidesignal.h" +#include "pysideproperty.h" +#include "pysideproperty_p.h" +#include "pyside.h" +#include "dynamicqmetaobject.h" +#include "pysidemetafunction_p.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// These private headers are needed to throw JavaScript exceptions +#if @QML_PRIVATE_API_SUPPORT@ + #include + #include + #include +#if QT_VERSION < 0x050700 + #include +#endif +#endif + +#if QSLOT_CODE != 1 || QSIGNAL_CODE != 2 +#error QSLOT_CODE and/or QSIGNAL_CODE changed! change the hardcoded stuff to the correct value! +#endif +#define PYSIDE_SLOT '1' +#define PYSIDE_SIGNAL '2' +#include "globalreceiverv2.h" +#include "globalreceiver.h" + +#define PYTHON_TYPE "PyObject" + +namespace { + static PyObject *metaObjectAttr = 0; + + static int callMethod(QObject* object, int id, void** args); + static PyObject* parseArguments(const QList< QByteArray >& paramTypes, void** args); + static bool emitShortCircuitSignal(QObject* source, int signalIndex, PyObject* args); + +#ifdef IS_PY3K + static void destroyMetaObject(PyObject* obj) + { + void* ptr = PyCapsule_GetPointer(obj, 0); + PySide::DynamicQMetaObject* meta = reinterpret_cast(ptr); + SbkObject* wrapper = Shiboken::BindingManager::instance().retrieveWrapper(meta); + if (wrapper) + Shiboken::BindingManager::instance().releaseWrapper(wrapper); + delete meta; + } + +#else + static void destroyMetaObject(void* obj) + { + PySide::DynamicQMetaObject* meta = reinterpret_cast(obj); + SbkObject* wrapper = Shiboken::BindingManager::instance().retrieveWrapper(meta); + if (wrapper) + Shiboken::BindingManager::instance().releaseWrapper(wrapper); + delete meta; + } +#endif +} + +namespace PySide { + + +PyObjectWrapper::PyObjectWrapper() + :m_me(Py_None) +{ + Py_XINCREF(m_me); +} + +PyObjectWrapper::PyObjectWrapper(PyObject* me) + : m_me(me) +{ + Py_XINCREF(m_me); +} + +PyObjectWrapper::PyObjectWrapper(const PyObjectWrapper &other) + : m_me(other.m_me) +{ + Py_XINCREF(m_me); +} + +PyObjectWrapper::~PyObjectWrapper() +{ + // Check that Python is still initialized as sometimes this is called by a static destructor + // after Python interpeter is shutdown. + if (!Py_IsInitialized()) + return; + + Shiboken::GilState gil; + Py_XDECREF(m_me); +} + +PyObjectWrapper& PyObjectWrapper::operator=(const PySide::PyObjectWrapper& other) +{ + Py_XINCREF(other.m_me); + Py_XDECREF(m_me); + m_me = other.m_me; + return *this; +} + +PyObjectWrapper::operator PyObject*() const +{ + return m_me; +} + +QDataStream &operator<<(QDataStream& out, const PyObjectWrapper& myObj) +{ + if (Py_IsInitialized() == 0) { + qWarning() << "Stream operator for PyObject called without python interpreter."; + return out; + } + + static PyObject *reduce_func = 0; + + Shiboken::GilState gil; + if (!reduce_func) { + Shiboken::AutoDecRef pickleModule(PyImport_ImportModule("pickle")); + reduce_func = PyObject_GetAttrString(pickleModule, "dumps"); + } + Shiboken::AutoDecRef repr(PyObject_CallFunctionObjArgs(reduce_func, (PyObject*)myObj, NULL)); + if (repr.object()) { + const char* buff = 0; + Py_ssize_t size = 0; + if (PyBytes_Check(repr.object())) { + buff = PyBytes_AS_STRING(repr.object()); + size = PyBytes_GET_SIZE(repr.object()); + } else if (Shiboken::String::check(repr.object())) { + buff = Shiboken::String::toCString(repr.object()); + size = Shiboken::String::len(repr.object()); + } + QByteArray data(buff, size); + out << data; + } + return out; +} + +QDataStream &operator>>(QDataStream& in, PyObjectWrapper& myObj) +{ + if (Py_IsInitialized() == 0) { + qWarning() << "Stream operator for PyObject called without python interpreter."; + return in; + } + + static PyObject *eval_func = 0; + + Shiboken::GilState gil; + if (!eval_func) { + Shiboken::AutoDecRef pickleModule(PyImport_ImportModule("pickle")); + eval_func = PyObject_GetAttrString(pickleModule, "loads"); + } + + QByteArray repr; + in >> repr; + Shiboken::AutoDecRef pyCode(PyBytes_FromStringAndSize(repr.data(), repr.size())); + Shiboken::AutoDecRef value(PyObject_CallFunctionObjArgs(eval_func, pyCode.object(), 0)); + if (!value.object()) { + value = Py_None; + } + myObj = PyObjectWrapper(value); + return in; +} + +}; + +using namespace PySide; + +struct SignalManager::SignalManagerPrivate +{ + SharedMap m_globalReceivers; + + //Deprecated + GlobalReceiver m_globalReceiver; + + SignalManagerPrivate() + { + m_globalReceivers = SharedMap( new QMap() ); + } + + ~SignalManagerPrivate() + { + if (!m_globalReceivers.isNull()) { + // Delete receivers by always retrieving the current first element, because deleting a + // receiver can indirectly delete another one, and if we use qDeleteAll, that could + // cause either a double delete, or iterator invalidation, and thus undefined behavior. + while (!m_globalReceivers->isEmpty()) + delete *m_globalReceivers->cbegin(); + Q_ASSERT(m_globalReceivers->isEmpty()); + } + } +}; + +static void clearSignalManager() +{ + PySide::SignalManager::instance().clear(); +} + +static void PyObject_PythonToCpp_PyObject_PTR(PyObject* pyIn, void* cppOut) +{ + *((PyObject**)cppOut) = pyIn; +} +static PythonToCppFunc is_PyObject_PythonToCpp_PyObject_PTR_Convertible(PyObject* pyIn) +{ + return PyObject_PythonToCpp_PyObject_PTR; +} +static PyObject* PyObject_PTR_CppToPython_PyObject(const void* cppIn) +{ + PyObject* pyOut = (PyObject*)cppIn; + if (pyOut) + Py_INCREF(pyOut); + return pyOut; +} + +SignalManager::SignalManager() : m_d(new SignalManagerPrivate) +{ + // Register Qt primitive typedefs used on signals. + using namespace Shiboken; + + // Register PyObject type to use in queued signal and slot connections + qRegisterMetaType(PYTHON_TYPE); + qRegisterMetaTypeStreamOperators(PYTHON_TYPE); + qRegisterMetaTypeStreamOperators("PyObjectWrapper"); + qRegisterMetaTypeStreamOperators("PySide::PyObjectWrapper"); + + SbkConverter* converter = Shiboken::Conversions::createConverter(&PyBaseObject_Type, 0); + Shiboken::Conversions::setCppPointerToPythonFunction(converter, PyObject_PTR_CppToPython_PyObject); + Shiboken::Conversions::setPythonToCppPointerFunctions(converter, PyObject_PythonToCpp_PyObject_PTR, is_PyObject_PythonToCpp_PyObject_PTR_Convertible); + Shiboken::Conversions::registerConverterName(converter, PYTHON_TYPE); + Shiboken::Conversions::registerConverterName(converter, "object"); + Shiboken::Conversions::registerConverterName(converter, "PyObjectWrapper"); + Shiboken::Conversions::registerConverterName(converter, "PySide::PyObjectWrapper"); + + PySide::registerCleanupFunction(clearSignalManager); + + if (!metaObjectAttr) + metaObjectAttr = Shiboken::String::fromCString("__METAOBJECT__"); +} + +void SignalManager::clear() +{ + delete m_d; + m_d = new SignalManagerPrivate(); +} + +SignalManager::~SignalManager() +{ + delete m_d; +} + +SignalManager& SignalManager::instance() +{ + static SignalManager me; + return me; +} + +QObject* SignalManager::globalReceiver() +{ + return &m_d->m_globalReceiver; +} + +void SignalManager::globalReceiverConnectNotify(QObject* source, int slotIndex) +{ + m_d->m_globalReceiver.connectNotify(source, slotIndex); +} + +void SignalManager::globalReceiverDisconnectNotify(QObject* source, int slotIndex) +{ + m_d->m_globalReceiver.disconnectNotify(source, slotIndex); +} + +void SignalManager::addGlobalSlot(const char* slot, PyObject* callback) +{ + addGlobalSlotGetIndex(slot, callback); +} + +int SignalManager::addGlobalSlotGetIndex(const char* slot, PyObject* callback) +{ + return m_d->m_globalReceiver.addSlot(slot, callback); +} + +QObject* SignalManager::globalReceiver(QObject *sender, PyObject *callback) +{ + SharedMap globalReceivers = m_d->m_globalReceivers; + QByteArray hash = GlobalReceiverV2::hash(callback); + GlobalReceiverV2* gr = 0; + if (!globalReceivers->contains(hash)) { + gr = (*globalReceivers)[hash] = new GlobalReceiverV2(callback, globalReceivers); + if (sender) { + gr->incRef(sender); // create a link reference + gr->decRef(); // remove extra reference + } + } else { + gr = (*globalReceivers)[hash]; + if (sender) + gr->incRef(sender); + } + + return reinterpret_cast(gr); +} + +int SignalManager::countConnectionsWith(const QObject *object) +{ + int count = 0; + for (GlobalReceiverV2Map::const_iterator it = m_d->m_globalReceivers->cbegin(), end = m_d->m_globalReceivers->cend(); it != end; ++it) { + if (it.value()->refCount(object)) + count++; + } + return count; +} + +void SignalManager::notifyGlobalReceiver(QObject* receiver) +{ + reinterpret_cast(receiver)->notify(); +} + +void SignalManager::releaseGlobalReceiver(const QObject* source, QObject* receiver) +{ + GlobalReceiverV2* gr = reinterpret_cast(receiver); + gr->decRef(source); +} + +int SignalManager::globalReceiverSlotIndex(QObject* receiver, const char* signature) const +{ + return reinterpret_cast(receiver)->addSlot(signature); +} + +bool SignalManager::emitSignal(QObject* source, const char* signal, PyObject* args) +{ + if (!Signal::checkQtSignal(signal)) + return false; + signal++; + + int signalIndex = source->metaObject()->indexOfSignal(signal); + if (signalIndex != -1) { + // cryptic but works! + // if the signature doesn't have a '(' it's a shor circuited signal, i.e. std::find + // returned the string null terminator. + bool isShortCircuit = !*std::find(signal, signal + std::strlen(signal), '('); + if (isShortCircuit) + return emitShortCircuitSignal(source, signalIndex, args); + else + return MetaFunction::call(source, signalIndex, args); + } + return false; +} + +int SignalManager::qt_metacall(QObject* object, QMetaObject::Call call, int id, void** args) +{ + const QMetaObject* metaObject = object->metaObject(); + PySideProperty* pp = 0; + PyObject* pp_name = 0; + QMetaProperty mp; + PyObject* pySelf = 0; + int methodCount = metaObject->methodCount(); + int propertyCount = metaObject->propertyCount(); + + if (call != QMetaObject::InvokeMetaMethod) { + mp = metaObject->property(id); + if (!mp.isValid()) { + return id - methodCount; + } + + Shiboken::GilState gil; + pySelf = (PyObject*)Shiboken::BindingManager::instance().retrieveWrapper(object); + Q_ASSERT(pySelf); + pp_name = Shiboken::String::fromCString(mp.name()); + pp = Property::getObject(pySelf, pp_name); + if (!pp) { + qWarning("Invalid property: %s.", mp.name()); + Py_XDECREF(pp_name); + return id - methodCount; + } + } + + switch(call) { +#ifndef QT_NO_PROPERTIES + case QMetaObject::ReadProperty: + case QMetaObject::WriteProperty: + case QMetaObject::ResetProperty: + case QMetaObject::QueryPropertyDesignable: + case QMetaObject::QueryPropertyScriptable: + case QMetaObject::QueryPropertyStored: + case QMetaObject::QueryPropertyEditable: + case QMetaObject::QueryPropertyUser: + pp->d->metaCallHandler(pp, pySelf, call, args); + break; +#endif + case QMetaObject::InvokeMetaMethod: + id = callMethod(object, id, args); + break; + + default: + qWarning("Unsupported meta invocation type."); + } + + // WARNING Isn't safe to call any metaObject and/or object methods beyond this point + // because the object can be deleted inside the called slot. + + if (call == QMetaObject::InvokeMetaMethod) { + id = id - methodCount; + } else { + id = id - propertyCount; + } + + if (pp || pp_name) { + Shiboken::GilState gil; + Py_XDECREF(pp); + Py_XDECREF(pp_name); + } + + // Bubbles Python exceptions up to the Javascript engine, if called from one + { + Shiboken::GilState gil; + + if (PyErr_Occurred()) { + +#if @QML_PRIVATE_API_SUPPORT@ + // This JS engine grabber based off of Qt 5.5's `qjsEngine` function + QQmlData *data = QQmlData::get(object, false); + + if (data && !data->jsWrapper.isNullOrUndefined()) { + QV4::ExecutionEngine *engine = data->jsWrapper.engine(); +#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0) + if (engine->currentStackFrame != nullptr) { +#elif QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) + if (engine->currentContext->d() != engine->rootContext()->d()) { +#else + QV4::ExecutionContext *ctx = engine->currentContext(); + if (ctx->type == QV4::Heap::ExecutionContext::Type_CallContext || + ctx->type == QV4::Heap::ExecutionContext::Type_SimpleCallContext) { +#endif + PyObject *errType, *errValue, *errTraceback; + PyErr_Fetch(&errType, &errValue, &errTraceback); + // PYSIDE-464: The error is only valid before PyErr_Restore, + // PYSIDE-464: therefore we take local copies. + Shiboken::AutoDecRef objStr(PyObject_Str(errValue)); + const QString errString = QLatin1String(Shiboken::String::toCString(objStr)); + const bool isSyntaxError = errType == PyExc_SyntaxError; + const bool isTypeError = errType == PyExc_TypeError; + PyErr_Restore(errType, errValue, errTraceback); + + PyErr_Print(); // Note: PyErr_Print clears the error. + +#if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) + if (isSyntaxError) { + return engine->throwSyntaxError(errString); + } else if (isTypeError) { + return engine->throwTypeError(errString); + } else { + return engine->throwError(errString); + } +#else + if (isSyntaxError) { + return ctx->throwSyntaxError(errString); + } else if (isTypeError) { + return ctx->throwTypeError(errString); + } else { + return ctx->throwError(errString); + } +#endif + } + } +#endif + + int reclimit = Py_GetRecursionLimit(); + // Inspired by Python's errors.c: PyErr_GivenExceptionMatches() function. + // Temporarily bump the recursion limit, so that PyErr_Print will not raise a recursion + // error again. Don't do it when the limit is already insanely high, to avoid overflow. + if (reclimit < (1 << 30)) + Py_SetRecursionLimit(reclimit + 5); + PyErr_Print(); + Py_SetRecursionLimit(reclimit); + } + } + + return id; +} + +int SignalManager::callPythonMetaMethod(const QMetaMethod& method, void** args, PyObject* pyMethod, bool isShortCuit) +{ + Q_ASSERT(pyMethod); + + Shiboken::GilState gil; + PyObject* pyArguments = 0; + + if (isShortCuit){ + pyArguments = reinterpret_cast(args[1]); + } else { + pyArguments = parseArguments(method.parameterTypes(), args); + } + + if (pyArguments) { + Shiboken::Conversions::SpecificConverter* retConverter = NULL; + const char* returnType = method.typeName(); + if (returnType && std::strcmp("", returnType) && std::strcmp("void", returnType)) { + retConverter = new Shiboken::Conversions::SpecificConverter(returnType); + if (!retConverter || !*retConverter) { + PyErr_Format(PyExc_RuntimeError, "Can't find converter for '%s' to call Python meta method.", returnType); + return -1; + } + } + + Shiboken::AutoDecRef retval(PyObject_CallObject(pyMethod, pyArguments)); + + if (!isShortCuit && pyArguments){ + Py_DECREF(pyArguments); + } + + if (!retval.isNull() && retval != Py_None && !PyErr_Occurred() && retConverter) { + retConverter->toCpp(retval, args[0]); + } + delete retConverter; + } + + return -1; +} + +bool SignalManager::registerMetaMethod(QObject* source, const char* signature, QMetaMethod::MethodType type) +{ + int ret = registerMetaMethodGetIndex(source, signature, type); + return (ret != -1); +} + +int SignalManager::registerMetaMethodGetIndex(QObject* source, const char* signature, QMetaMethod::MethodType type) +{ + Q_ASSERT(source); + const QMetaObject* metaObject = source->metaObject(); + int methodIndex = metaObject->indexOfMethod(signature); + // Create the dynamic signal is needed + if (methodIndex == -1) { + SbkObject* self = Shiboken::BindingManager::instance().retrieveWrapper(source); + if (!Shiboken::Object::hasCppWrapper(self)) { + qWarning() << "Invalid Signal signature:" << signature; + return -1; + } else { + DynamicQMetaObject *dmo = 0; + PyObject *pySelf = reinterpret_cast(self); + PyObject* dict = self->ob_dict; + + // Create a instance meta object + if (!dict || !PyDict_Contains(dict, metaObjectAttr)) { + dmo = new DynamicQMetaObject(Py_TYPE(pySelf), metaObject); +#ifdef IS_PY3K + PyObject* pyDmo = PyCapsule_New(dmo, 0, destroyMetaObject); +#else + PyObject* pyDmo = PyCObject_FromVoidPtr(dmo, destroyMetaObject); +#endif + + PyObject_SetAttr(pySelf, metaObjectAttr, pyDmo); + Py_DECREF(pyDmo); + } else { + dmo = reinterpret_cast(const_cast(metaObject)); + } + + if (type == QMetaMethod::Signal) + return dmo->addSignal(signature); + else + return dmo->addSlot(signature); + } + } + return methodIndex; +} + +bool SignalManager::hasConnectionWith(const QObject *object) +{ + return m_d->m_globalReceiver.hasConnectionWith(object); +} + +const QMetaObject* SignalManager::retriveMetaObject(PyObject *self) +{ + Shiboken::GilState gil; + DynamicQMetaObject *mo = 0; + Q_ASSERT(self); + + PyObject* dict = reinterpret_cast(self)->ob_dict; + if (dict && PyDict_Contains(dict, metaObjectAttr)) { + PyObject *pyMo = PyDict_GetItem(dict, metaObjectAttr); + +#ifdef IS_PY3K + mo = reinterpret_cast(PyCapsule_GetPointer(pyMo, 0)); +#else + mo = reinterpret_cast(PyCObject_AsVoidPtr(pyMo)); +#endif + } else { + mo = reinterpret_cast(Shiboken::Object::getTypeUserData(reinterpret_cast(self))); + } + + mo->update(); + return mo; +} + +namespace { + +static int callMethod(QObject* object, int id, void** args) +{ + const QMetaObject* metaObject = object->metaObject(); + QMetaMethod method = metaObject->method(id); + + if (method.methodType() == QMetaMethod::Signal) { + // emit python signal + QMetaObject::activate(object, id, args); + } else { + Shiboken::GilState gil; + PyObject* self = (PyObject*)Shiboken::BindingManager::instance().retrieveWrapper(object); + QByteArray methodName = method.methodSignature(); + methodName.truncate(methodName.indexOf('(')); + Shiboken::AutoDecRef pyMethod(PyObject_GetAttrString(self, methodName)); + return SignalManager::callPythonMetaMethod(method, args, pyMethod, false); + } + return -1; +} + + +static PyObject* parseArguments(const QList& paramTypes, void** args) +{ + int argsSize = paramTypes.count(); + PyObject* preparedArgs = PyTuple_New(argsSize); + + for (int i = 0, max = argsSize; i < max; ++i) { + void* data = args[i+1]; + const char* dataType = paramTypes[i].constData(); + Shiboken::Conversions::SpecificConverter converter(dataType); + if (converter) { + PyTuple_SET_ITEM(preparedArgs, i, converter.toPython(data)); + } else { + PyErr_Format(PyExc_TypeError, "Can't call meta function because I have no idea how to handle %s", dataType); + Py_DECREF(preparedArgs); + return 0; + } + } + return preparedArgs; +} + +static bool emitShortCircuitSignal(QObject* source, int signalIndex, PyObject* args) +{ + void* signalArgs[2] = {0, args}; + source->qt_metacall(QMetaObject::InvokeMetaMethod, signalIndex, signalArgs); + return true; +} + +} //namespace diff --git a/sources/pyside2/libpyside/signalmanager.h b/sources/pyside2/libpyside/signalmanager.h new file mode 100644 index 0000000..5948a7d --- /dev/null +++ b/sources/pyside2/libpyside/signalmanager.h @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SIGNALMANAGER_H +#define SIGNALMANAGER_H + +#include "pysidemacros.h" +#include +#include +#include +#include + +namespace PySide +{ + +/// Thin wrapper for PyObject which increases the reference count at the constructor but *NOT* at destructor. +class PYSIDE_API PyObjectWrapper +{ +public: + PyObjectWrapper(); + PyObjectWrapper(PyObject* me); + PyObjectWrapper(const PyObjectWrapper &other); + ~PyObjectWrapper(); + operator PyObject*() const; + PyObjectWrapper& operator=(const PyObjectWrapper &other); +private: + PyObject* m_me; +}; + +PYSIDE_API QDataStream &operator<<(QDataStream& out, const PyObjectWrapper& myObj); +PYSIDE_API QDataStream &operator>>(QDataStream& in, PyObjectWrapper& myObj); + +class PYSIDE_API SignalManager +{ +public: + static SignalManager& instance(); + + QObject* globalReceiver(QObject* sender, PyObject* callback); + void releaseGlobalReceiver(const QObject* sender, QObject* receiver); + int globalReceiverSlotIndex(QObject* sender, const char* slotSignature) const; + void notifyGlobalReceiver(QObject* receiver); + + bool emitSignal(QObject* source, const char* signal, PyObject* args); + static int qt_metacall(QObject* object, QMetaObject::Call call, int id, void** args); + + // Used to register a new signal/slot on QMetaobject of source. + static bool registerMetaMethod(QObject* source, const char* signature, QMetaMethod::MethodType type); + static int registerMetaMethodGetIndex(QObject* source, const char* signature, QMetaMethod::MethodType type); + + // used to discovery metaobject + static const QMetaObject* retriveMetaObject(PyObject* self); + + // Used to discovery if SignalManager was connected with object "destroyed()" signal. + int countConnectionsWith(const QObject *object); + + // Disconnect all signals managed by Globalreceiver + void clear(); + + // Utility function to call a python method usign args received in qt_metacall + static int callPythonMetaMethod(const QMetaMethod& method, void** args, PyObject* obj, bool isShortCuit); + + PYSIDE_DEPRECATED(QObject* globalReceiver()); + PYSIDE_DEPRECATED(void addGlobalSlot(const char* slot, PyObject* callback)); + PYSIDE_DEPRECATED(int addGlobalSlotGetIndex(const char* slot, PyObject* callback)); + + PYSIDE_DEPRECATED(void globalReceiverConnectNotify(QObject *sender, int slotIndex)); + PYSIDE_DEPRECATED(void globalReceiverDisconnectNotify(QObject *sender, int slotIndex)); + PYSIDE_DEPRECATED(bool hasConnectionWith(const QObject *object)); + +private: + struct SignalManagerPrivate; + SignalManagerPrivate* m_d; + + SignalManager(); + ~SignalManager(); + + // disable copy + SignalManager(const SignalManager&); + SignalManager operator=(const SignalManager&); +}; + +} + +Q_DECLARE_METATYPE(PySide::PyObjectWrapper) + +#endif diff --git a/sources/pyside2/plugins/CMakeLists.txt b/sources/pyside2/plugins/CMakeLists.txt new file mode 100644 index 0000000..0933ceb --- /dev/null +++ b/sources/pyside2/plugins/CMakeLists.txt @@ -0,0 +1,36 @@ +project(plugins) + +set(ui_plugin_src + customwidgets.cpp + customwidget.cpp +) + +set(ui_plugin_moc + customwidget.h + customwidgets.h +) + +include_directories(${Qt5Designer_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR}) + +qt5_wrap_cpp(MOC_FILES ${ui_plugin_moc}) +add_library(uiplugin STATIC ${ui_plugin_src} ${MOC_FILES}) +if(CMAKE_HOST_UNIX AND NOT CYGWIN) + add_definitions(-fPIC) +endif() +add_definitions(-DQT_STATICPLUGIN) + +if(Qt5Core_VERSION VERSION_GREATER "5.7.1") + set_property(TARGET uiplugin PROPERTY CXX_STANDARD 11) +endif() + +target_link_libraries(uiplugin + ${Qt5UiTools_LIBRARY} + ${SHIBOKEN_LIBRARY} + ${SHIBOKEN_PYTHON_LIBRARY}) +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(LIBRARY_OUTPUT_SUFFIX ${CMAKE_DEBUG_POSTFIX}) +else() + set(LIBRARY_OUTPUT_SUFFIX ${CMAKE_RELEASE_POSTFIX}) +endif() diff --git a/sources/pyside2/plugins/customwidget.cpp b/sources/pyside2/plugins/customwidget.cpp new file mode 100644 index 0000000..f3ce09b --- /dev/null +++ b/sources/pyside2/plugins/customwidget.cpp @@ -0,0 +1,148 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include "customwidget.h" + + +struct PyCustomWidgetPrivate +{ + PyObject* pyObject; + bool initialized; +}; + +PyCustomWidget::PyCustomWidget(PyObject* objectType) + : m_data(new PyCustomWidgetPrivate()) +{ + m_data->pyObject = objectType; + m_name = QString(reinterpret_cast(objectType)->tp_name); +} + +PyCustomWidget::~PyCustomWidget() +{ + delete m_data; +} + +bool PyCustomWidget::isContainer() const +{ + return false; +} + +bool PyCustomWidget::isInitialized() const +{ + return m_data->initialized; +} + +QIcon PyCustomWidget::icon() const +{ + return QIcon(); +} + +QString PyCustomWidget::domXml() const +{ + return QString(); +} + +QString PyCustomWidget::group() const +{ + return QString(); +} + +QString PyCustomWidget::includeFile() const +{ + return QString(); +} + +QString PyCustomWidget::name() const +{ + return m_name; +} + +QString PyCustomWidget::toolTip() const +{ + return QString(); +} + +QString PyCustomWidget::whatsThis() const +{ + return QString(); +} + +QWidget* PyCustomWidget::createWidget(QWidget* parent) +{ + //Create a python instance and return cpp object + PyObject* pyParent; + bool unkowParent = false; + if (parent) { + pyParent = reinterpret_cast(Shiboken::BindingManager::instance().retrieveWrapper(parent)); + if (pyParent) { + Py_INCREF(pyParent); + } else { + static Shiboken::Conversions::SpecificConverter converter("QWidget*"); + pyParent = converter.toPython(&parent); + unkowParent = true; + } + } else { + Py_INCREF(Py_None); + pyParent = Py_None; + } + + Shiboken::AutoDecRef pyArgs(PyTuple_New(1)); + PyTuple_SET_ITEM(pyArgs, 0, pyParent); //tuple will keep pyParent reference + + //Call python constructor + SbkObject* result = reinterpret_cast(PyObject_CallObject(m_data->pyObject, pyArgs)); + + QWidget* widget = 0; + if (result) { + if (unkowParent) //if parent does not exists in python, transfer the ownership to cpp + Shiboken::Object::releaseOwnership(result); + else + Shiboken::Object::setParent(pyParent, reinterpret_cast(result)); + + widget = reinterpret_cast(Shiboken::Object::cppPointer(result, Py_TYPE(result))); + } + + return widget; +} + +void PyCustomWidget::initialize(QDesignerFormEditorInterface* core) +{ + m_data->initialized = true; +} diff --git a/sources/pyside2/plugins/customwidget.h b/sources/pyside2/plugins/customwidget.h new file mode 100644 index 0000000..fc7d089 --- /dev/null +++ b/sources/pyside2/plugins/customwidget.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef _PY_CUSTOM_WIDGET_H_ +#define _PY_CUSTOM_WIDGET_H_ + +#include + +#include +#if (QT_VERSION < QT_VERSION_CHECK(5, 5, 0)) + #include +#else + #include +#endif + + +struct PyCustomWidgetPrivate; + +class PyCustomWidget: public QObject, public QDesignerCustomWidgetInterface +{ + Q_OBJECT + Q_INTERFACES(QDesignerCustomWidgetInterface) + +public: + PyCustomWidget(PyObject* objectType); + ~PyCustomWidget(); + + bool isContainer() const; + bool isInitialized() const; + QIcon icon() const; + QString domXml() const; + QString group() const; + QString includeFile() const; + QString name() const; + QString toolTip() const; + QString whatsThis() const; + QWidget *createWidget(QWidget *parent); + void initialize(QDesignerFormEditorInterface *core); + +private: + PyCustomWidgetPrivate* m_data; + QString m_name; +}; + +#endif diff --git a/sources/pyside2/plugins/customwidgets.cpp b/sources/pyside2/plugins/customwidgets.cpp new file mode 100644 index 0000000..58d2a51 --- /dev/null +++ b/sources/pyside2/plugins/customwidgets.cpp @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "customwidget.h" +#include "customwidgets.h" + + +struct PyCustomWidgetPrivate +{ + PyObject* pyObject; + bool initialized; +}; + +struct PyCustomWidgetsPrivate +{ + QList widgets; + ~PyCustomWidgetsPrivate(); +}; + + +PyCustomWidgetsPrivate::~PyCustomWidgetsPrivate() +{ + foreach(QDesignerCustomWidgetInterface* iface, widgets) + delete iface; + widgets.clear(); +} + +PyCustomWidgets::PyCustomWidgets(QObject *parent) + : QObject(parent), m_data(new PyCustomWidgetsPrivate) +{ +} + +PyCustomWidgets::~PyCustomWidgets() +{ + delete m_data; +} + +void PyCustomWidgets::registerWidgetType(PyObject* widget) +{ + m_data->widgets.append(new PyCustomWidget(widget)); +} + +QList PyCustomWidgets::customWidgets() const +{ + return m_data->widgets; +} + + diff --git a/sources/pyside2/plugins/customwidgets.h b/sources/pyside2/plugins/customwidgets.h new file mode 100644 index 0000000..5c52d1d --- /dev/null +++ b/sources/pyside2/plugins/customwidgets.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef _PY_CUSTOM_WIDGETS_H_ +#define _PY_CUSTOM_WIDGETS_H_ + +#include + +#include +#if (QT_VERSION < QT_VERSION_CHECK(5, 5, 0)) + #include +#else + #include +#endif + + +struct PyCustomWidgetsPrivate; + +class PyCustomWidgets: public QObject, public QDesignerCustomWidgetCollectionInterface +{ + Q_OBJECT + Q_INTERFACES(QDesignerCustomWidgetCollectionInterface) + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.PySide.PyCustomWidgetsInterface") + +public: + PyCustomWidgets(QObject *parent = 0); + ~PyCustomWidgets(); + virtual QList customWidgets() const; + void registerWidgetType(PyObject* widget); + +private: + PyCustomWidgetsPrivate* m_data; +}; + +#endif diff --git a/sources/pyside2/pyside_version.py b/sources/pyside2/pyside_version.py new file mode 100644 index 0000000..08429ac --- /dev/null +++ b/sources/pyside2/pyside_version.py @@ -0,0 +1,55 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +major_version = "5" +minor_version = "11" +patch_version = "2" + +# For example: "a", "b", "rc" +# (which means "alpha", "beta", "release candidate"). +# An empty string means the generated package will be an official release. +pre_release_version_type = "" + +# For example: "1", "2" (which means "beta1", "beta2", if type is "b"). +pre_release_version = "" + +if __name__ == '__main__': + # Used by CMake. + print('{0};{1};{2};{3};{4}'.format(major_version, minor_version, patch_version, + pre_release_version_type, pre_release_version)) diff --git a/sources/pyside2/tests/CMakeLists.txt b/sources/pyside2/tests/CMakeLists.txt new file mode 100644 index 0000000..2386950 --- /dev/null +++ b/sources/pyside2/tests/CMakeLists.txt @@ -0,0 +1,67 @@ +if(CMAKE_VERSION VERSION_LESS 2.8) + message("CMake version greater than 2.8 necessary to run tests") +else() + if(NOT CTEST_TESTING_TIMEOUT) + set(CTEST_TESTING_TIMEOUT 60) + endif() + + # tests/QtWidgets/qstandarditemmodel_test.py needs shiboken2 + # tests/QtWidgets/qlabel_test.py needs shiboken2 + if(WIN32) + set(TEST_PYTHONPATH "${CMAKE_BINARY_DIR};${CMAKE_SOURCE_DIR}/tests/util;${CMAKE_BINARY_DIR}/tests/pysidetest;${CMAKE_BINARY_DIR}/../shiboken2/shibokenmodule;$ENV{PYTHONPATH}") + set(TEST_LIBRARY_PATH "${libpyside_BINARY_DIR};${pysidetest_BINARY_DIR};${SHIBOKEN_INCLUDE_DIR}/../../bin;$ENV{PATH}") + set(LIBRARY_PATH_VAR "PATH") + string(REPLACE "\\" "/" TEST_PYTHONPATH "${TEST_PYTHONPATH}") + string(REPLACE "\\" "/" TEST_LIBRARY_PATH "${TEST_LIBRARY_PATH}") + + string(REPLACE ";" "\\;" TEST_PYTHONPATH "${TEST_PYTHONPATH}") + string(REPLACE ";" "\\;" TEST_LIBRARY_PATH "${TEST_LIBRARY_PATH}") + else() + set(TEST_PYTHONPATH "${CMAKE_BINARY_DIR}:${CMAKE_SOURCE_DIR}/tests/util:${CMAKE_BINARY_DIR}/tests/pysidetest:${CMAKE_BINARY_DIR}/../shiboken2/shibokenmodule:$ENV{PYTHONPATH}") + set(TEST_LIBRARY_PATH "${libpyside_BINARY_DIR}:${pysidetest_BINARY_DIR}:$ENV{LD_LIBRARY_PATH}") + set(LIBRARY_PATH_VAR "LD_LIBRARY_PATH") + endif() + + + macro(TEST_QT_MODULE var name) + if(NOT DISABLE_${name} AND ${var}) + add_subdirectory(${name}) + endif() + endmacro() + + macro(PYSIDE_TEST) + string(REGEX MATCH "/([^/]+)//?([^/]+)\\.py" foo "${CMAKE_CURRENT_SOURCE_DIR}/${ARGV0}" ) + set(TEST_NAME "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}") + if (${ARGC} EQUAL 1) + set(EXPECT_TO_FAIL 0) + elseif(${ARGC} EQUAL 2) + set(EXPECT_TO_FAIL ${ARGV1}) + else() + message(WARNING "Invalid call of macro PYSIDE_TEST") + endif() + set(TEST_CMD ${XVFB_EXEC} ${SHIBOKEN_PYTHON_INTERPRETER} "${CMAKE_CURRENT_SOURCE_DIR}/${ARGV0}") + add_test(${TEST_NAME} ${TEST_CMD}) + # QT_NO_GLIB=1 is required to avoid crashes on CI RHEL 6.6 machines. + # See QTBUG-64716 for details. + set_tests_properties(${TEST_NAME} PROPERTIES + TIMEOUT ${CTEST_TESTING_TIMEOUT} + WILL_FAIL ${EXPECT_TO_FAIL} + ENVIRONMENT "PYTHONPATH=${TEST_PYTHONPATH};${LIBRARY_PATH_VAR}=${TEST_LIBRARY_PATH};PYSIDE_DISABLE_INTERNAL_QT_CONF=1;QT_NO_GLIB=1") + endmacro() + + if (NOT DISABLE_QtCore AND NOT DISABLE_QtGui AND NOT DISABLE_QtWidgets) + add_subdirectory(pysidetest) + endif() + add_subdirectory(registry) + add_subdirectory(signals) + + foreach(shortname IN LISTS all_module_shortnames) + message(STATUS "preparing tests for module 'Qt${shortname}'") + TEST_QT_MODULE(Qt5${shortname}_FOUND Qt${shortname}) + endforeach() + + #platform specific + if (ENABLE_MAC) + add_subdirectory(mac) + endif () +endif() diff --git a/sources/pyside2/tests/Qt3DAnimation/CMakeLists.txt b/sources/pyside2/tests/Qt3DAnimation/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/Qt3DAnimation/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/Qt3DCore/CMakeLists.txt b/sources/pyside2/tests/Qt3DCore/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/Qt3DCore/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/Qt3DExtras/CMakeLists.txt b/sources/pyside2/tests/Qt3DExtras/CMakeLists.txt new file mode 100644 index 0000000..5f8d2e7 --- /dev/null +++ b/sources/pyside2/tests/Qt3DExtras/CMakeLists.txt @@ -0,0 +1 @@ +PYSIDE_TEST(qt3dextras_test.py) diff --git a/sources/pyside2/tests/Qt3DExtras/qt3dextras_test.py b/sources/pyside2/tests/Qt3DExtras/qt3dextras_test.py new file mode 100644 index 0000000..2c7f84a --- /dev/null +++ b/sources/pyside2/tests/Qt3DExtras/qt3dextras_test.py @@ -0,0 +1,154 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for Q3DExtras''' + +from helper import UsesQGuiApplication +import unittest + +from PySide2.QtCore import(Property, QObject, QPropertyAnimation, QTimer, Signal, Slot) +from PySide2.QtGui import (QGuiApplication, QMatrix4x4, QQuaternion, QVector3D, QWindow) +from PySide2.Qt3DCore import (Qt3DCore) +from PySide2.Qt3DRender import (Qt3DRender) +from PySide2.Qt3DExtras import (Qt3DExtras) + +class OrbitTransformController(QObject): + def __init__(self, parent): + super(OrbitTransformController, self).__init__(parent) + self._target = None + self._matrix = QMatrix4x4() + self._radius = 1 + self._angle = 0 + + def setTarget(self, t): + self._target = t + + def getTarget(self): + return self._target + + def setRadius(self, radius): + if self._radius != radius: + self._radius = radius + self.updateMatrix() + self.radiusChanged.emit() + + def getRadius(self): + return self._radius + + def setAngle(self, angle): + if self._angle != angle: + self._angle = angle + self.updateMatrix() + self.angleChanged.emit() + + def getAngle(self): + return self._angle + + def updateMatrix(self): + self._matrix.setToIdentity(); + self._matrix.rotate(self._angle, QVector3D(0, 1, 0)) + self._matrix.translate(self._radius, 0, 0) + if self._target is not None: + self._target.setMatrix(self._matrix) + + angleChanged = Signal() + radiusChanged = Signal() + angle = Property(float, getAngle, setAngle, notify=angleChanged) + radius = Property(float, getRadius, setRadius, notify=radiusChanged) + +class Window(Qt3DExtras.Qt3DWindow): + def __init__(self): + super(Window, self).__init__() + + # Camera + self.camera().lens().setPerspectiveProjection(45, 16 / 9, 0.1, 1000) + self.camera().setPosition(QVector3D(0, 0, 40)) + self.camera().setViewCenter(QVector3D(0, 0, 0)) + + # For camera controls + self.createScene() + self.camController = Qt3DExtras.QOrbitCameraController(self.rootEntity) + self.camController.setLinearSpeed(50) + self.camController.setLookSpeed(180) + self.camController.setCamera(self.camera()) + + self.setRootEntity(self.rootEntity) + + def createScene(self): + # Root entity + self.rootEntity = Qt3DCore.QEntity() + + # Material + self.material = Qt3DExtras.QPhongMaterial(self.rootEntity) + + # Torus + self.torusEntity = Qt3DCore.QEntity(self.rootEntity) + self.torusMesh = Qt3DExtras.QTorusMesh() + self.torusMesh.setRadius(5) + self.torusMesh.setMinorRadius(1) + self.torusMesh.setRings(100) + self.torusMesh.setSlices(20) + + self.torusTransform = Qt3DCore.QTransform() + self.torusTransform.setScale3D(QVector3D(1.5, 1, 0.5)) + self.torusTransform.setRotation(QQuaternion.fromAxisAndAngle(QVector3D(1, 0, 0), 45)) + + self.torusEntity.addComponent(self.torusMesh) + self.torusEntity.addComponent(self.torusTransform) + self.torusEntity.addComponent(self.material) + + # Sphere + self.sphereEntity = Qt3DCore.QEntity(self.rootEntity) + self.sphereMesh = Qt3DExtras.QSphereMesh() + self.sphereMesh.setRadius(3) + + self.sphereTransform = Qt3DCore.QTransform() + self.controller = OrbitTransformController(self.sphereTransform) + self.controller.setTarget(self.sphereTransform) + self.controller.setRadius(20) + + self.sphereEntity.addComponent(self.sphereMesh) + self.sphereEntity.addComponent(self.sphereTransform) + self.sphereEntity.addComponent(self.material) + +class Qt3DExtrasTestCase(UsesQGuiApplication): + '''Tests related to Q3DExtras''' + + def test3DExtras(self): + + window = Window() + window.show() + while not window.isExposed(): + self.app.processEvents() + QTimer.singleShot(2000, self.app.quit) + self.app.exec_() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/Qt3DInput/CMakeLists.txt b/sources/pyside2/tests/Qt3DInput/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/Qt3DInput/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/Qt3DLogic/CMakeLists.txt b/sources/pyside2/tests/Qt3DLogic/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/Qt3DLogic/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/Qt3DQuick/CMakeLists.txt b/sources/pyside2/tests/Qt3DQuick/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/Qt3DQuick/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/Qt3DRender/CMakeLists.txt b/sources/pyside2/tests/Qt3DRender/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/Qt3DRender/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/QtAxContainer/CMakeLists.txt b/sources/pyside2/tests/QtAxContainer/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/QtAxContainer/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/QtCharts/CMakeLists.txt b/sources/pyside2/tests/QtCharts/CMakeLists.txt new file mode 100644 index 0000000..16e8b4b --- /dev/null +++ b/sources/pyside2/tests/QtCharts/CMakeLists.txt @@ -0,0 +1 @@ +PYSIDE_TEST(qcharts_test.py) diff --git a/sources/pyside2/tests/QtCharts/qcharts_test.py b/sources/pyside2/tests/QtCharts/qcharts_test.py new file mode 100644 index 0000000..b540cf6 --- /dev/null +++ b/sources/pyside2/tests/QtCharts/qcharts_test.py @@ -0,0 +1,63 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QCharts''' + +from helper import UsesQApplication +import unittest + +from PySide2.QtCore import QRect, QSize, QTimer +from PySide2.QtGui import QGuiApplication, QScreen +from PySide2.QtCharts import QtCharts + +class QChartsTestCase(UsesQApplication): + '''Tests related to QCharts''' + + def testCharts(self): + self.series = QtCharts.QPieSeries() + self.series.append("Jane", 1); + self.series.append("Joe", 2); + self.series.append("Andy", 3); + self.series.append("Barbara", 4); + self.series.append("Axel", 5); + slice = self.series.slices()[1] + slice.setExploded(); + slice.setLabelVisible(); + self.chart = QtCharts.QChart() + self.chart.addSeries(self.series); + chartView = QtCharts.QChartView(self.chart) + screenSize = QGuiApplication.primaryScreen().geometry().size() + chartView.resize(screenSize / 2) + chartView.show() + QTimer.singleShot(500, self.app.quit) + self.app.exec_() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtConcurrent/CMakeLists.txt b/sources/pyside2/tests/QtConcurrent/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/QtConcurrent/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/QtCore/CMakeLists.txt b/sources/pyside2/tests/QtCore/CMakeLists.txt new file mode 100644 index 0000000..649e796 --- /dev/null +++ b/sources/pyside2/tests/QtCore/CMakeLists.txt @@ -0,0 +1,133 @@ +PYSIDE_TEST(attr_cache_py3k.py) +PYSIDE_TEST(bug_278_test.py) +PYSIDE_TEST(bug_332.py) +PYSIDE_TEST(bug_408.py) +PYSIDE_TEST(bug_428.py) +PYSIDE_TEST(bug_462.py) +PYSIDE_TEST(bug_505.py) +PYSIDE_TEST(bug_515.py) +PYSIDE_TEST(bug_606.py) +PYSIDE_TEST(bug_656.py) +PYSIDE_TEST(bug_686.py) +PYSIDE_TEST(bug_699.py) +PYSIDE_TEST(bug_706.py) +PYSIDE_TEST(bug_820.py) +PYSIDE_TEST(bug_826.py) +PYSIDE_TEST(bug_829.py) +PYSIDE_TEST(bug_835.py) +PYSIDE_TEST(bug_920.py) +PYSIDE_TEST(bug_927.py) +PYSIDE_TEST(bug_931.py) +PYSIDE_TEST(bug_938.py) +PYSIDE_TEST(bug_953.py) +PYSIDE_TEST(bug_987.py) +PYSIDE_TEST(bug_994.py) +PYSIDE_TEST(bug_1019.py) +PYSIDE_TEST(bug_1031.py) +PYSIDE_TEST(bug_1063.py) +PYSIDE_TEST(bug_1069.py) +PYSIDE_TEST(bug_PYSIDE-42.py) +PYSIDE_TEST(bug_PYSIDE-164.py) +PYSIDE_TEST(blocking_signals_test.py) +PYSIDE_TEST(classinfo_test.py) +PYSIDE_TEST(child_event_test.py) +PYSIDE_TEST(deepcopy_test.py) +PYSIDE_TEST(deletelater_test.py) +PYSIDE_TEST(destroysignal_test.py) +PYSIDE_TEST(duck_punching_test.py) +PYSIDE_TEST(emoji_string_test.py) +PYSIDE_TEST(hash_test.py) +PYSIDE_TEST(inherits_test.py) +PYSIDE_TEST(max_signals.py) +PYSIDE_TEST(missing_symbols_test.py) +PYSIDE_TEST(mockclass_test.py) +PYSIDE_TEST(python_conversion.py) +PYSIDE_TEST(qabs_test.py) +PYSIDE_TEST(qabstractitemmodel_test.py) +PYSIDE_TEST(qabstracttransition_test.py) +PYSIDE_TEST(qanimationgroup_test.py) +PYSIDE_TEST(qbitarray_test.py) +PYSIDE_TEST(qbytearray_buffer_protocol_test.py) +PYSIDE_TEST(qbytearray_concatenation_operator_test.py) +PYSIDE_TEST(qbytearray_operator_iadd_test.py) +PYSIDE_TEST(qbytearray_operator_test.py) +PYSIDE_TEST(qbytearray_test.py) +PYSIDE_TEST(qcollator_test.py) +PYSIDE_TEST(qcommandlineparser_test.py) +PYSIDE_TEST(qcoreapplication_instance_test.py) +PYSIDE_TEST(qcoreapplication_test.py) +PYSIDE_TEST(qdatastream_test.py) +PYSIDE_TEST(qdatetime_test.py) +PYSIDE_TEST(qdate_test.py) +PYSIDE_TEST(qeasingcurve_test.py) +PYSIDE_TEST(qenum_test.py) +PYSIDE_TEST(qevent_test.py) +PYSIDE_TEST(qfileinfo_test.py) +PYSIDE_TEST(qfile_test.py) +PYSIDE_TEST(qfileread_test.py) +PYSIDE_TEST(qflags_test.py) +PYSIDE_TEST(qinstallmsghandler_test.py) +PYSIDE_TEST(qlinef_test.py) +PYSIDE_TEST(qlocale_test.py) +PYSIDE_TEST(qlockfile_test.py) +PYSIDE_TEST(qmessageauthenticationcode_test.py) +PYSIDE_TEST(qmetaobject_test.py) +PYSIDE_TEST(qmimedatabase_test.py) +PYSIDE_TEST(qmodelindex_internalpointer_test.py) +PYSIDE_TEST(qobject_children_segfault_test.py) +PYSIDE_TEST(qobject_connect_notify_test.py) +PYSIDE_TEST(qobject_destructor.py) +PYSIDE_TEST(qobject_event_filter_test.py) +PYSIDE_TEST(qobject_inherits_test.py) +PYSIDE_TEST(qobject_objectproperty_test.py) +PYSIDE_TEST(qobject_parent_test.py) +PYSIDE_TEST(qobject_property_test.py) +PYSIDE_TEST(qobject_protected_methods_test.py) +PYSIDE_TEST(qobject_test.py) +PYSIDE_TEST(qobject_timer_event_test.py) +PYSIDE_TEST(qobject_tr_as_instance_test.py) +PYSIDE_TEST(qoperatingsystemversion_test.py) +PYSIDE_TEST(qpoint_test.py) +PYSIDE_TEST(qprocess_test.py) +PYSIDE_TEST(qproperty_decorator.py) +PYSIDE_TEST(qrect_test.py) +PYSIDE_TEST(qregexp_test.py) +PYSIDE_TEST(qregularexpression_test.py) +PYSIDE_TEST(qresource_test.py) +PYSIDE_TEST(qsize_test.py) +PYSIDE_TEST(qslot_object_test.py) +PYSIDE_TEST(qsocketnotifier_test.py) +PYSIDE_TEST(qsrand_test.py) +PYSIDE_TEST(qstandardpaths_test.py) +PYSIDE_TEST(qstatemachine_test.py) +PYSIDE_TEST(qstate_test.py) +PYSIDE_TEST(qstorageinfo_test.py) +PYSIDE_TEST(qstring_test.py) +PYSIDE_TEST(qsysinfo_test.py) +PYSIDE_TEST(qtext_codec_test.py) +PYSIDE_TEST(qtextstream_test.py) +PYSIDE_TEST(qthread_prod_cons_test.py) +PYSIDE_TEST(qthread_signal_test.py) +PYSIDE_TEST(qthread_test.py) +PYSIDE_TEST(qtimer_singleshot_test.py) +PYSIDE_TEST(qtimer_timeout_test.py) +PYSIDE_TEST(qtimezone_test.py) +PYSIDE_TEST(qtnamespace_test.py) +PYSIDE_TEST(qurl_test.py) +PYSIDE_TEST(qurlquery_test.py) +PYSIDE_TEST(quuid_test.py) +PYSIDE_TEST(qversionnumber_test.py) +PYSIDE_TEST(repr_test.py) +PYSIDE_TEST(setprop_on_ctor_test.py) +PYSIDE_TEST(staticMetaObject_test.py) +PYSIDE_TEST(static_method_test.py) +PYSIDE_TEST(thread_signals_test.py) +PYSIDE_TEST(tr_noop_test.py) +PYSIDE_TEST(translation_test.py) +PYSIDE_TEST(unaryoperator_test.py) +PYSIDE_TEST(unicode_test.py) +PYSIDE_TEST(versioninfo_test.py) + +if(X11) + PYSIDE_TEST(qhandle_test.py) +endif() diff --git a/sources/pyside2/tests/QtCore/attr_cache_py3k.py b/sources/pyside2/tests/QtCore/attr_cache_py3k.py new file mode 100644 index 0000000..ec0575b --- /dev/null +++ b/sources/pyside2/tests/QtCore/attr_cache_py3k.py @@ -0,0 +1,65 @@ +# This Python file uses the following encoding: utf-8 + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' +Unit tests for attribute cache in Python 3 + +This is the original code from the bug report +https://bugreports.qt.io/browse/PYSIDE-60 +''' + +from PySide2.QtCore import QObject + + +class A(QObject): + instance = 1 + + @classmethod + def test(cls): + cls.instance + cls.instance = cls() + assert "<__main__.A object " in repr(cls.__dict__['instance']) + assert "<__main__.A object " in repr(cls.instance) + assert "<__main__.A object " in repr(type.__getattribute__(cls, 'instance')) + + +if __name__ == "__main__": + A.test() diff --git a/sources/pyside2/tests/QtCore/blocking_signals_test.py b/sources/pyside2/tests/QtCore/blocking_signals_test.py new file mode 100644 index 0000000..2f8b95b --- /dev/null +++ b/sources/pyside2/tests/QtCore/blocking_signals_test.py @@ -0,0 +1,143 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test case for QObject.signalsBlocked() and blockSignal()''' + +import unittest +import os +from tempfile import mkstemp + +from PySide2.QtCore import QObject, SIGNAL, QFile, QSignalBlocker + +class TestSignalsBlockedBasic(unittest.TestCase): + '''Basic test case for signalsBlocked''' + + def testBasic(self): + '''QObject.signalsBlocked() and blockSignals() + The signals aren't blocked by default. + blockSignals returns the previous value''' + obj = QObject() + self.assertTrue(not obj.signalsBlocked()) + self.assertTrue(not obj.blockSignals(True)) + self.assertTrue(obj.signalsBlocked()) + self.assertTrue(obj.blockSignals(False)) + blocker = QSignalBlocker(obj) + self.assertTrue(obj.signalsBlocked()) + blocker.unblock() + self.assertTrue(not obj.signalsBlocked()) + blocker.reblock() + self.assertTrue(obj.signalsBlocked()) + del blocker + self.assertTrue(not obj.signalsBlocked()) + + +class TestSignalsBlocked(unittest.TestCase): + '''Test case to check if the signals are really blocked''' + + def setUp(self): + #Set up the basic resources needed + self.obj = QObject() + self.args = tuple() + self.called = False + + def tearDown(self): + #Delete used resources + del self.obj + del self.args + + def callback(self, *args): + #Default callback + if args == self.args: + self.called = True + else: + raise TypeError("Invalid arguments") + + def testShortCircuitSignals(self): + #Blocking of Python short-circuit signals + QObject.connect(self.obj, SIGNAL('mysignal()'), self.callback) + + self.obj.emit(SIGNAL('mysignal()')) + self.assertTrue(self.called) + + self.called = False + self.obj.blockSignals(True) + self.obj.emit(SIGNAL('mysignal()')) + self.assertTrue(not self.called) + + def testPythonSignals(self): + #Blocking of Python typed signals + QObject.connect(self.obj, SIGNAL('mysignal(int,int)'), self.callback) + self.args = (1, 3) + + self.obj.emit(SIGNAL('mysignal(int,int)'), *self.args) + self.assertTrue(self.called) + + self.called = False + self.obj.blockSignals(True) + self.obj.emit(SIGNAL('mysignal(int,int)'), *self.args) + self.assertTrue(not self.called) + +class TestQFileSignalBlocking(unittest.TestCase): + '''Test case for blocking the signal QIODevice.aboutToClose()''' + + def setUp(self): + #Set up the needed resources - A temp file and a QFile + self.called = False + handle, self.filename = mkstemp() + os.close(handle) + + self.qfile = QFile(self.filename) + + def tearDown(self): + #Release acquired resources + os.remove(self.filename) + del self.qfile + + def callback(self): + #Default callback + self.called = True + + def testAboutToCloseBlocking(self): + #QIODevice.aboutToClose() blocking + + QObject.connect(self.qfile, SIGNAL('aboutToClose()'), self.callback) + + self.assertTrue(self.qfile.open(QFile.ReadOnly)) + self.qfile.close() + self.assertTrue(self.called) + + self.called = False + self.qfile.blockSignals(True) + + self.assertTrue(self.qfile.open(QFile.ReadOnly)) + self.qfile.close() + self.assertTrue(not self.called) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_1019.py b/sources/pyside2/tests/QtCore/bug_1019.py new file mode 100644 index 0000000..bc4b9b6 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_1019.py @@ -0,0 +1,60 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import * + +class MyTimer (QTimer): + def __init__(self): + QTimer.__init__(self) + self.startCalled = False + + @Slot() + def slotUsedToIncreaseMethodOffset(self): + pass + +class MyTimer2 (MyTimer): + + @Slot() + def slotUsedToIncreaseMethodOffset2(self): + pass + + def start(self): + self.startCalled = True + QCoreApplication.instance().quit() + +class TestBug1019 (unittest.TestCase): + def testIt(self): + app = QCoreApplication([]) + t = MyTimer2() + QTimer.singleShot(0, t.start) + app.exec_() + self.assertTrue(t.startCalled) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_1031.py b/sources/pyside2/tests/QtCore/bug_1031.py new file mode 100644 index 0000000..1fb0d6e --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_1031.py @@ -0,0 +1,33 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import QStateMachine, QState + +mach = QStateMachine() +state = QState(mach) +print(state.machine()) diff --git a/sources/pyside2/tests/QtCore/bug_1063.py b/sources/pyside2/tests/QtCore/bug_1063.py new file mode 100644 index 0000000..2560448 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_1063.py @@ -0,0 +1,58 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' unit test for BUG #1063 ''' + +import unittest +import tempfile +from PySide2 import QtCore +import os +import py3kcompat as py3k + +class QTextStreamTestCase(unittest.TestCase): + def setUp(self): + self.temp_file = tempfile.NamedTemporaryFile(delete=False) + self.temp_file.close() + self.f = QtCore.QFile(self.temp_file.name) + self.f.open(QtCore.QIODevice.WriteOnly) + self.strings = (py3k.unicode_('foo'), py3k.unicode_('bar')) + self.stream = QtCore.QTextStream(self.f) + + def testIt(self): + for s in self.strings: + self.stream << s + + self.f.close() + + # make sure we didn't get an empty file + self.assertNotEqual(QtCore.QFile(self.temp_file.name).size(), 0) + + os.unlink(self.temp_file.name) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_1069.py b/sources/pyside2/tests/QtCore/bug_1069.py new file mode 100644 index 0000000..d784062 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_1069.py @@ -0,0 +1,50 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' unit test for BUG #1069 ''' + +from PySide2 import QtCore +import unittest + +class QDataStreamOpOverloadTestCase(unittest.TestCase): + def setUp(self): + self.ba = QtCore.QByteArray() + self.stream = QtCore.QDataStream(self.ba, QtCore.QIODevice.WriteOnly) + + def testIt(self): + self.stream << "hello" + ok = False + for c in self.ba: + if c != b'\x00': + ok = True + break + + self.assertEqual(ok, True) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_278_test.py b/sources/pyside2/tests/QtCore/bug_278_test.py new file mode 100644 index 0000000..e0f07d1 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_278_test.py @@ -0,0 +1,52 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2 import QtCore + +def setValue(o): + values = ['Name'] + o.setProperty('test1', values) + +class QQtVersionTest(unittest.TestCase): + '''Tests for QVariant conversion of QStringList''' + + def testGet(self): + o = QtCore.QObject() + setValue(o) + self.assertEqual(o.property('test1'), ['Name']) + + + +if __name__ == '__main__': + unittest.main() + + diff --git a/sources/pyside2/tests/QtCore/bug_332.py b/sources/pyside2/tests/QtCore/bug_332.py new file mode 100644 index 0000000..662a0f6 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_332.py @@ -0,0 +1,46 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2 import QtCore + +class Lock(QtCore.QMutex): + def tryLock(self,timeoutt=10): + return QtCore.QMutex.tryLock(self,timeoutt) + +class TestBug(unittest.TestCase): + + def testCase(self): + l = Lock() + l.tryLock() # this cause a assertion + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_408.py b/sources/pyside2/tests/QtCore/bug_408.py new file mode 100644 index 0000000..b2f97df --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_408.py @@ -0,0 +1,56 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import * + +class MyDevice(QIODevice): + def __init__(self, txt): + QIODevice.__init__(self) + self.txt = txt + self.ptr = 0 + + def readData(self, size): + size = min(len(self.txt) - self.ptr, size) + retval = self.txt[self.ptr:size] + self.ptr += size + return retval + +class QIODeviceTest(unittest.TestCase): + + def testIt(self): + device = MyDevice("hello world\nhello again") + device.open(QIODevice.ReadOnly) + + s = QTextStream(device) + self.assertEqual(s.readLine(), "hello world") + self.assertEqual(s.readLine(), "hello again") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_428.py b/sources/pyside2/tests/QtCore/bug_428.py new file mode 100644 index 0000000..d150487 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_428.py @@ -0,0 +1,46 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QObject + +class MyBaseObject(QObject): + def __init__(self, number): + self.myMember = 'myMember' + number + QObject.__init__(self) + +class QObjectConstructorTest(unittest.TestCase): + def testBug(self): + for i in range(10): + number = str(i) + obj = MyBaseObject(number) + self.assertEqual(obj.myMember, 'myMember' + number) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_462.py b/sources/pyside2/tests/QtCore/bug_462.py new file mode 100644 index 0000000..5186ac7 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_462.py @@ -0,0 +1,74 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sys + +from PySide2.QtCore import QObject, QCoreApplication, QEvent, QThread + +class MyEvent(QEvent): + def __init__(self,i): + print("TYPE:", type(QEvent.User)) + super(MyEvent,self).__init__(QEvent.Type(QEvent.User + 100 )) + self.i = i + +class MyThread (QThread): + def __init__(self,owner): + super(MyThread,self).__init__() + self.owner=owner; + + def run(self): + for i in range(3): + e=MyEvent(i); + QCoreApplication.postEvent(self.owner,e) + +class MyBaseObject(QObject): + def __init__(self): + QObject.__init__(self) + self.events = [] + self.t = MyThread(self) + self.t.start() + + def customEvent(self, event): + self.events.append(event) + if len(self.events) == 3: + self.t.wait() + self.app.quit() + + +class CheckForEventsTypes(unittest.TestCase): + def testTypes(self): + o = MyBaseObject() + o.app = QCoreApplication(sys.argv) + o.app.exec_() + for e in o.events: + self.assertTrue(isinstance(e, MyEvent)) + o.app = None + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_505.py b/sources/pyside2/tests/QtCore/bug_505.py new file mode 100644 index 0000000..c1d434c --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_505.py @@ -0,0 +1,50 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QObject + +class MyBaseObject(QObject): + def __init__(self, parent=None): + QObject.__init__(self, parent) + self.setObjectName("PySide") + + def __del__(self): + if self.objectName() != "PySide": + raise NameError('Fail') + +class CheckForEventsTypes(unittest.TestCase): + def testDelObject(self): + p = MyBaseObject() + o = MyBaseObject(p) + del o + del p + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_515.py b/sources/pyside2/tests/QtCore/bug_515.py new file mode 100644 index 0000000..d4ca3f4 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_515.py @@ -0,0 +1,46 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" Unittest for bug #515 """ +""" http://bugs.openbossa.org/show_bug.cgi?id=515 """ + +from PySide2 import QtCore + +callCleanup = False +def _cleanup(): + global callCleanup + callCleanup = True + +def _checkCleanup(): + global callCleanup + assert(callCleanup) + +app = QtCore.QCoreApplication([]) +QtCore.qAddPostRoutine(_cleanup) +QtCore.qAddPostRoutine(_checkCleanup) +del app diff --git a/sources/pyside2/tests/QtCore/bug_606.py b/sources/pyside2/tests/QtCore/bug_606.py new file mode 100644 index 0000000..44126e9 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_606.py @@ -0,0 +1,62 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +import PySide2 +from PySide2.QtCore import QPoint, QPointF +from PySide2.QtCore import QLine, QLineF +from PySide2.QtCore import QSize, QSizeF + +class testCases(unittest.TestCase): + def testQPointToTuple(self): + p = QPoint(1, 2) + self.assertEqual((1, 2), p.toTuple()) + + def testQPointFToTuple(self): + p = QPointF(1, 2) + self.assertEqual((1, 2), p.toTuple()) + + def testQLineToTuple(self): + l = QLine(1, 2, 3, 4) + self.assertEqual((1, 2, 3, 4), l.toTuple()) + + def testQLineFToTuple(self): + l = QLineF(1, 2, 3, 4) + self.assertEqual((1, 2, 3, 4), l.toTuple()) + + def testQSizeToTuple(self): + s = QSize(1, 2) + self.assertEqual((1, 2), s.toTuple()) + + def testQSizeFToTuple(self): + s = QSizeF(1, 2) + self.assertEqual((1, 2), s.toTuple()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_656.py b/sources/pyside2/tests/QtCore/bug_656.py new file mode 100644 index 0000000..1b9fe6a --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_656.py @@ -0,0 +1,37 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import * + +class CoreApp(QCoreApplication): + def __init__(self,*args): + super(CoreApp,self).__init__(*args) + # It shouldn't crash after the __init__ call + +import sys +app = CoreApp(sys.argv) diff --git a/sources/pyside2/tests/QtCore/bug_686.py b/sources/pyside2/tests/QtCore/bug_686.py new file mode 100644 index 0000000..fa8ad8d --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_686.py @@ -0,0 +1,116 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import with_statement + +import unittest +from PySide2.QtCore import * + +class MyWriteThread(QThread): + def __init__(self, lock): + QThread.__init__(self) + self.lock = lock + self.started = False + self.canQuit = False + + def run(self): + self.started = True + while not self.lock.tryLockForWrite(): + pass + self.canQuit = True + +class MyReadThread(QThread): + def __init__(self, lock): + QThread.__init__(self) + self.lock = lock + self.started = False + self.canQuit = False + + def run(self): + self.started = True + while not self.lock.tryLockForRead(): + pass + self.canQuit = True + +class MyMutexedThread(QThread): + def __init__(self, mutex): + QThread.__init__(self) + self.mutex = mutex + self.started = False + self.canQuit = False + + def run(self): + self.started = True + while not self.mutex.tryLock(): + pass + self.mutex.unlock() + self.canQuit = True + +class TestQMutex (unittest.TestCase): + + def testReadLocker(self): + lock = QReadWriteLock() + thread = MyWriteThread(lock) + + with QReadLocker(lock): + thread.start() + while not thread.started: + pass + self.assertFalse(thread.canQuit) + + thread.wait(2000) + self.assertTrue(thread.canQuit) + + def testWriteLocker(self): + lock = QReadWriteLock() + thread = MyReadThread(lock) + + with QWriteLocker(lock): + thread.start() + while not thread.started: + pass + self.assertFalse(thread.canQuit) + + thread.wait(2000) + self.assertTrue(thread.canQuit) + + def testMutexLocker(self): + mutex = QMutex() + thread = MyMutexedThread(mutex) + + with QMutexLocker(mutex): + thread.start() + while not thread.started: + pass + self.assertFalse(thread.canQuit) + + thread.wait(2000) + self.assertTrue(thread.canQuit) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_699.py b/sources/pyside2/tests/QtCore/bug_699.py new file mode 100644 index 0000000..98340f3 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_699.py @@ -0,0 +1,45 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import * + +class TestBug699 (unittest.TestCase): + + def defClass(self): + class Foo (QObject): + def foo(self): + pass + + prop = Property(foo, foo) + + def testIt(self): + self.assertRaises(TypeError, self.defClass) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_706.py b/sources/pyside2/tests/QtCore/bug_706.py new file mode 100644 index 0000000..1984cff --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_706.py @@ -0,0 +1,55 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import * + +class MyModel (QAbstractListModel): + def rowCount(self, parent = None): + return 3 + +class TestBug706(unittest.TestCase): + + def mySlot(self, idx, start, end): + self.start = start + self.end = end + + def testIt(self): + self.start = None + self.end = None + + app = QCoreApplication([]) + model = MyModel() + model.columnsAboutToBeInserted.connect(self.mySlot) + model.columnsAboutToBeInserted.emit(QModelIndex(), 0, 1) + self.assertEqual(self.start, 0) + self.assertEqual(self.end, 1) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_820.py b/sources/pyside2/tests/QtCore/bug_820.py new file mode 100644 index 0000000..f559542 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_820.py @@ -0,0 +1,97 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import functools +import unittest + +from PySide2.QtCore import QObject, Slot, Signal, SIGNAL + +def log_exception(): + def log_exception_decorator(func): + @functools.wraps(func) + def wrapper(*args, **kwds): + try: + return func(*args, **kwds) + except Exception: + raise + + return wrapper + + return log_exception_decorator + + +def log_exception2(): + def log_exception_decorator(func): + def wrapper(*args, **kwds): + try: + return func(*args, **kwds) + except Exception: + raise + + return wrapper + + return log_exception_decorator + +class MyObject(QObject): + + def __init__(self, parent=None): + QObject.__init__(self, parent) + self._mySlotcalled = False + self._mySlot2called = False + + @Slot() + @log_exception() + def mySlot(self): + self._mySlotcalled = True + + @Slot(name="mySlot2") + @log_exception2() + def mySlot2(self): + self._mySlot2called = True + + def poke(self): + self.events.emit() + + events = Signal() + + +class SlotWithDecoratorTest(unittest.TestCase): + def testSlots(self): + o = MyObject() + self.assertTrue(o.metaObject().indexOfSlot("mySlot()") > 0) + self.assertTrue(o.metaObject().indexOfSlot("mySlot2()") > 0) + + o.events.connect(o.mySlot) + o.events.connect(o.mySlot2) + o.poke() + self.assertTrue(o._mySlotcalled) + self.assertTrue(o._mySlot2called) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/bug_826.py b/sources/pyside2/tests/QtCore/bug_826.py new file mode 100644 index 0000000..5e3a121 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_826.py @@ -0,0 +1,57 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import QEvent, Qt +import PySide2 + +import unittest + +TEST_EVENT_TYPE = QEvent.Type(QEvent.registerEventType()) + +class TestEvent(QEvent): + TestEventType = QEvent.Type(QEvent.registerEventType()) + + def __init__(self, rand=0): + super(TestEvent, self).__init__(TestEvent.TestEventType) + self._rand = rand + + def getRand(self): + return self._rand + + +class TestEnums(unittest.TestCase): + def testUserTypesValues(self): + self.assertTrue(QEvent.User <= int(TestEvent.TestEventType) <= QEvent.MaxUser) + self.assertTrue(QEvent.User <= int(TEST_EVENT_TYPE) <= QEvent.MaxUser) + + def testUserTypesRepr(self): + self.assertEqual(eval(repr(TestEvent.TestEventType)), TestEvent.TestEventType) + self.assertEqual(eval(repr(TEST_EVENT_TYPE)), TEST_EVENT_TYPE) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_829.py b/sources/pyside2/tests/QtCore/bug_829.py new file mode 100644 index 0000000..1384c01 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_829.py @@ -0,0 +1,65 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Copyright (C) 2011 Thomas Perl +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Test case for PySide bug 829 + +import unittest +from PySide2.QtCore import QDir, QSettings, QTemporaryFile +import os + +class QVariantConversions(unittest.TestCase): + + _confFileName = None + + def testDictionary(self): + confFile = QTemporaryFile(QDir.tempPath() + '/pysidebug829_XXXXXX.ini') + confFile.setAutoRemove(False) + self.assertTrue(confFile.open()) + confFile.close() + self._confFileName = confFile.fileName() + del confFile + s = QSettings(self._confFileName, QSettings.IniFormat) + self.assertEqual(s.status(), QSettings.NoError) + # Save value + s.setValue('x', {1: 'a'}) + s.sync() + self.assertEqual(s.status(), QSettings.NoError) + del s + + # Restore value + s = QSettings(self._confFileName, QSettings.IniFormat) + self.assertEqual(s.status(), QSettings.NoError) + self.assertEqual(s.value('x'), {1: 'a'}) + + def __del__(self): + if self._confFileName is not None: + os.unlink(QDir.toNativeSeparators(self._confFileName)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_835.py b/sources/pyside2/tests/QtCore/bug_835.py new file mode 100644 index 0000000..59cb612 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_835.py @@ -0,0 +1,93 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import * + +import unittest + +get_counter = 0 +set_counter = 0 + +class Descriptor(object): + def __get__(self, obj, owner): + global get_counter + + if not obj: + return self + + get_counter += 1 + return obj.var + + def __set__(self, obj, value): + global set_counter + + set_counter += 1 + obj.var = value + +class FooBar(QObject): + test = Descriptor() + var = 0 + +class SetAndGetTestCases(unittest.TestCase): + def setUp(self): + global get_counter + global set_counter + + get_counter = 0 + set_counter = 0 + + def testSetMethod(self): + global get_counter + global set_counter + + f = FooBar() + + f.test = 1 + self.assertEqual(get_counter, 0) + self.assertEqual(set_counter, 1) + + get_counter = 0 + set_counter = 0 + + def testGetMethod(self): + global get_counter + global set_counter + + f = FooBar() + f.test = 1 + set_counter = 0 + + ret = f.test + self.assertEqual(get_counter, 1) + self.assertEqual(set_counter, 0) + + get_counter = 0 + set_counter = 0 + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_920.py b/sources/pyside2/tests/QtCore/bug_920.py new file mode 100644 index 0000000..1967276 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_920.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +import unittest +import PySide2.QtCore as QtCore + +class Signaller(QtCore.QObject): + s1 = QtCore.Signal() + s2 = QtCore.Signal() + +class TestBug920(unittest.TestCase): + + def testIt(self): + s = Signaller() + s.s1.connect(self.onSignal) + s.s2.connect(self.onSignal) + self.assertTrue(s.s1.disconnect(self.onSignal)) + self.assertTrue(s.s2.disconnect(self.onSignal)) + + def onSignal(self): + pass + + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_927.py b/sources/pyside2/tests/QtCore/bug_927.py new file mode 100644 index 0000000..1a5be71 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_927.py @@ -0,0 +1,52 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import time +import unittest + +from PySide2.QtCore import QTime, QRunnable, QThreadPool + +class Task(QRunnable): + def run(self): + t = QTime() + t.start() + time.sleep(2) # Sleep 2 seconds + + +class QThreadPoolTest(unittest.TestCase): + '''This used to cause a segfault due the ownership control on globalInstance function ''' + def testSlowJobs(self): + for i in range(3): + task = Task() + QThreadPool.globalInstance().start(task) + time.sleep(1) # Sleep 1 second + + QThreadPool.globalInstance().waitForDone() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_931.py b/sources/pyside2/tests/QtCore/bug_931.py new file mode 100644 index 0000000..528a084 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_931.py @@ -0,0 +1,49 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QObject, Signal +o = QObject() +class MyObject(QObject): + s = Signal(int) + +class CheckSignalType(unittest.TestCase): + def testSignal(self): + self.assertTrue(isinstance(QObject.destroyed, Signal)) + self.assertEqual(type(QObject.destroyed), Signal) + + self.assertEqual(type(o.destroyed).__name__, "SignalInstance") + self.assertNotEqual(type(o.destroyed), Signal) + + self.assertTrue(isinstance(o.destroyed, Signal)) + self.assertTrue(isinstance(MyObject.s, Signal)) + self.assertFalse(isinstance(int, Signal)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_938.py b/sources/pyside2/tests/QtCore/bug_938.py new file mode 100644 index 0000000..98b8947 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_938.py @@ -0,0 +1,43 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import * +import py3kcompat as py3k + +class TestBug938 (unittest.TestCase): + + def testIt(self): + b = QBuffer() + b.open(QBuffer.WriteOnly) + b.write(py3k.b("\x0023\x005")) + b.close() + self.assertEqual(b.buffer().size(), 5) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_953.py b/sources/pyside2/tests/QtCore/bug_953.py new file mode 100644 index 0000000..2aa2b63 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_953.py @@ -0,0 +1,46 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import * + +class Dispatcher(QObject): + _me = None + + def __init__(self): + super(Dispatcher, self).__init__() + self._me = self + QTimer.singleShot(0, self._finish) + + def _finish(self): + del self._me # It can't crash here! + QTimer.singleShot(10, QCoreApplication.instance().quit) + +if __name__ == '__main__': + app = QCoreApplication([]) + Dispatcher() + app.exec_() diff --git a/sources/pyside2/tests/QtCore/bug_987.py b/sources/pyside2/tests/QtCore/bug_987.py new file mode 100644 index 0000000..e5c7f1b --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_987.py @@ -0,0 +1,43 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import QObject + +import unittest + + +class TestBug987(unittest.TestCase): + def callback(self): + pass + + def testInvalidDisconnection(self): + o = QObject() + self.assertRaises(RuntimeError, o.destroyed.disconnect, self.callback) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_994.py b/sources/pyside2/tests/QtCore/bug_994.py new file mode 100644 index 0000000..3b0ed0f --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_994.py @@ -0,0 +1,54 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import py3kcompat as py3k +from PySide2.QtCore import QIODevice, QTextStream + + +class MyIODevice (QIODevice): + def readData(self, amount): + return py3k.b("\0a" * int(amount/2)) + + def readLineData(self, maxSize): + return py3k.b("\0b" * 4) + + def atEnd(self): + return False + +class TestBug944 (unittest.TestCase): + + def testIt(self): + device = MyIODevice() + device.open(QIODevice.ReadOnly) + s = QTextStream(device) + self.assertEqual(s.read(4), "\0a\0a") + self.assertEqual(device.readLine(), "\0b\0b\0b\0b") + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_PYSIDE-164.py b/sources/pyside2/tests/QtCore/bug_PYSIDE-164.py new file mode 100644 index 0000000..3ed10be --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_PYSIDE-164.py @@ -0,0 +1,69 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import unittest + +from PySide2.QtCore import QCoreApplication, QEventLoop, QObject, Qt, QThread, QTimer, SIGNAL + +class Emitter(QThread): + def __init__(self): + QThread.__init__(self) + + def run(self): + print("Before emit.") + self.emit(SIGNAL("signal(int)"), 0) + print("After emit.") + +class Receiver(QObject): + def __init__(self, eventloop): + QObject.__init__(self) + self.eventloop = eventloop + + def receive(self, number): + print("Received number: %d" % number) + self.eventloop.exit(0) + + +class TestBugPYSIDE164(unittest.TestCase): + + def testBlockingSignal(self): + app = QCoreApplication.instance() or QCoreApplication([]) + eventloop = QEventLoop() + emitter = Emitter() + receiver = Receiver(eventloop) + emitter.connect(emitter, SIGNAL("signal(int)"), + receiver.receive, Qt.BlockingQueuedConnection) + emitter.start() + retval = eventloop.exec_() + emitter.wait(2000) + self.assertEqual(retval, 0) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/bug_PYSIDE-42.py b/sources/pyside2/tests/QtCore/bug_PYSIDE-42.py new file mode 100644 index 0000000..9555bb4 --- /dev/null +++ b/sources/pyside2/tests/QtCore/bug_PYSIDE-42.py @@ -0,0 +1,44 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import * +import unittest + +class TestBugPYSIDE42 (unittest.TestCase): + + def testIt(self): + obj1 = QFile() + obj2 = QObject() + hash1 = hash(obj1) + hash2 = hash(obj2) + + self.assertNotEqual(hash1, hash2) + self.assertEqual(hash1, hash(obj1)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/child_event_test.py b/sources/pyside2/tests/QtCore/child_event_test.py new file mode 100644 index 0000000..d9c92d5 --- /dev/null +++ b/sources/pyside2/tests/QtCore/child_event_test.py @@ -0,0 +1,81 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for QObject.childEvent and QTimer.childEvent overloading''' + +import unittest +from time import sleep +from PySide2.QtCore import QObject, QTimer, QCoreApplication + +from helper import UsesQCoreApplication + +class ExtQObject(QObject): + def __init__(self): + QObject.__init__(self) + self.child_event_received = False + + def childEvent(self, event): + QObject.childEvent(self, event) + self.child_event_received = True + +class ExtQTimer(QTimer): + def __init__(self): + QTimer.__init__(self) + self.child_event_received = False + + def childEvent(self, event): + QTimer.childEvent(self, event) + self.child_event_received = True + + +class TestChildEvent(UsesQCoreApplication): + '''Test case for QObject::childEvent and QTimer::childEvent''' + + def setUp(self): + UsesQCoreApplication.setUp(self) + + def tearDown(self): + UsesQCoreApplication.tearDown(self) + + def testQObject(self): + parent = ExtQObject() + child = QObject() + child.setParent(parent) + self.assertTrue(parent.child_event_received) + + def testQTimer(self): + parent = ExtQTimer() + child = QObject() + child.setParent(parent) + self.assertTrue(parent.child_event_received) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/classinfo_test.py b/sources/pyside2/tests/QtCore/classinfo_test.py new file mode 100644 index 0000000..a1890f9 --- /dev/null +++ b/sources/pyside2/tests/QtCore/classinfo_test.py @@ -0,0 +1,110 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +import unittest + +from PySide2.QtCore import QObject, QCoreApplication, ClassInfo + +class TestClassInfo(unittest.TestCase): + def test_metadata(self): + @ClassInfo(author='pyside', url='http://www.pyside.org') + class MyObject(QObject): + pass + + o = MyObject() + mo = o.metaObject() + self.assertEqual(mo.classInfoCount(), 2) + + ci = mo.classInfo(0) #author + self.assertEqual(ci.name(), 'author') + self.assertEqual(ci.value(), 'pyside') + + ci = mo.classInfo(1) #url + self.assertEqual(ci.name(), 'url') + self.assertEqual(ci.value(), 'http://www.pyside.org') + + def test_verify_metadata_types(self): + valid_dict = { '123': '456' } + + invalid_dict_1 = { '123': 456 } + invalid_dict_2 = { 123: 456 } + invalid_dict_3 = { 123: '456' } + + ClassInfo(**valid_dict) + + self.assertRaises(TypeError, ClassInfo, **invalid_dict_1) + + # assertRaises only allows for string keywords, so a `try` must be used here. + try: + ClassInfo(**invalid_dict_2) + self.fail('ClassInfo() accepted invalid_dict_2!') + except TypeError: + pass + + try: + ClassInfo(**invalid_dict_3) + self.fail('ClassInfo() accepted invalid_dict_3!') + except TypeError: + pass + + def test_can_not_use_instance_twice(self): + decorator = ClassInfo(author='pyside', url='http://www.pyside.org') + + @decorator + class MyObject1(QObject): + pass + + class MyObject2(QObject): + pass + + self.assertRaises(TypeError, decorator, MyObject2) + + def test_can_only_be_used_on_qobjects(self): + def test_function(): pass + self.assertRaises(TypeError, ClassInfo(), test_function) + + class NotAQObject(object): pass + self.assertRaises(TypeError, ClassInfo(), NotAQObject) + + class QObjectSubclass(QObject): pass + ClassInfo()(QObjectSubclass) + + class SubclassOfNativeQObjectSubclass(QCoreApplication): pass + ClassInfo()(SubclassOfNativeQObjectSubclass) + + class SubclassOfPythonQObjectSubclass(QObjectSubclass): pass + ClassInfo()(SubclassOfPythonQObjectSubclass) + +if __name__ == '__main__': + if sys.version_info[0] < 2: + sys.exit(0) + elif (sys.version_info[0] == 2) and (sys.version_info[1] <= 5): + sys.exit(0) + else: + unittest.main() diff --git a/sources/pyside2/tests/QtCore/deepcopy_test.py b/sources/pyside2/tests/QtCore/deepcopy_test.py new file mode 100644 index 0000000..a79ccbe --- /dev/null +++ b/sources/pyside2/tests/QtCore/deepcopy_test.py @@ -0,0 +1,112 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from copy import deepcopy + +from PySide2.QtCore import QByteArray, QDate, QDateTime, QTime, QLine, QLineF +from PySide2.QtCore import Qt, QSize, QSizeF, QRect, QRectF, QDir, QPoint, QPointF +import py3kcompat as py3k +try: + from PySide2.QtCore import QUuid + HAVE_Q = True +except ImportError: + HAVE_Q = False + +class DeepCopyHelper: + def testCopy(self): + copy = deepcopy([self.original])[0] + self.assertTrue(copy is not self.original) + self.assertEqual(copy, self.original) + +class QByteArrayDeepCopy(DeepCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QByteArray(py3k.b('the quick brown fox jumps over the lazy dog')) + + +class QDateDeepCopy(DeepCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QDate(2010, 11, 22) + + +class QTimeDeepCopy(DeepCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QTime(11, 37, 55, 692) + + +class QDateTimeDeepCopy(DeepCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QDateTime(2010, 5, 18, 10, 24, 45, 223, Qt.LocalTime) + + +class QSizeDeepCopy(DeepCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QSize(42, 190) + + +class QSizeFDeepCopy(DeepCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QSizeF(42.7, 190.2) + + +class QRectDeepCopy(DeepCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QRect(100, 200, 300, 400) + + +class QRectFDeepCopy(DeepCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QRectF(100.33, 200.254, 300.321, 400.123) + +class QLineDeepCopy(DeepCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QLine(1, 2, 3, 4) + +class QLineFDeepCopy(DeepCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QLineF(1.1, 2.2, 3.3, 4.4) + +class QPointDeepCopy(DeepCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QPoint(1, 2) + +class QPointFDeepCopy(DeepCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QPointF(1.1, 2.2) + +class QDirDeepCopy(DeepCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QDir("./") + +class QUuiCopy(DeepCopyHelper, unittest.TestCase): + @unittest.skipUnless(HAVE_Q, "QUuid is currently not supported on this platform.") + def setUp(self): + self.original = QUuid("67C8770B-44F1-410A-AB9A-F9B5446F13EE") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/deletelater_test.py b/sources/pyside2/tests/QtCore/deletelater_test.py new file mode 100644 index 0000000..3c4152f --- /dev/null +++ b/sources/pyside2/tests/QtCore/deletelater_test.py @@ -0,0 +1,50 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QTimer.singleShot''' + +import unittest + +from PySide2.QtCore import QObject, QTimer, QCoreApplication, SIGNAL +from helper import UsesQCoreApplication + +class TestDeleteLater(UsesQCoreApplication): + '''Test case for function DeleteLater''' + + def testCase(self): + o = QObject() + o.deleteLater() + del o + QTimer.singleShot(100, self.app.quit) + self.app.exec_() + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/destroysignal_test.py b/sources/pyside2/tests/QtCore/destroysignal_test.py new file mode 100644 index 0000000..37e7820 --- /dev/null +++ b/sources/pyside2/tests/QtCore/destroysignal_test.py @@ -0,0 +1,55 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import QTimer, QObject +import sys +import unittest + +class TestDestroySignal(unittest.TestCase): + def onObjectDestroyed(self, timer): + self.assertTrue(isinstance(timer, QObject)) + self._destroyed = True + + def testSignal(self): + self._destroyed = False + t = QTimer() + t.destroyed[QObject].connect(self.onObjectDestroyed) + del t + self.assertTrue(self._destroyed) + + def testWithParent(self): + self._destroyed = False + p = QTimer() + t = QTimer(p) + t.destroyed[QObject].connect(self.onObjectDestroyed) + del p + self.assertTrue(self._destroyed) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/duck_punching_test.py b/sources/pyside2/tests/QtCore/duck_punching_test.py new file mode 100644 index 0000000..48d8657 --- /dev/null +++ b/sources/pyside2/tests/QtCore/duck_punching_test.py @@ -0,0 +1,102 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for duck punching new implementations of C++ virtual methods into object instances.''' + +import unittest +import types +import sys +from PySide2.QtCore import QObject +from helper import UsesQCoreApplication + +def MethodType(func, instance, instanceType): + if sys.version_info[0] == 3: + return types.MethodType(func, instance) + else: + return types.MethodType(func, instance, instanceType) + +class Duck(QObject): + def __init__(self): + QObject.__init__(self) + def childEvent(self, event): + QObject.childEvent(self, event) + +class TestDuckPunchingOnQObjectInstance(UsesQCoreApplication): + '''Test case for duck punching new implementations of C++ virtual methods into object instances.''' + + def setUp(self): + #Acquire resources + self.duck_childEvent_called = False + UsesQCoreApplication.setUp(self) + + def tearDown(self): + #Release resources + del self.duck_childEvent_called + UsesQCoreApplication.tearDown(self) + + + def testChildEventMonkeyPatch(self): + #Test if the new childEvent injected on QObject instance is called from C++ + parent = QObject() + def childEvent(obj, event): + self.duck_childEvent_called = True + parent.childEvent = MethodType(childEvent, parent, QObject) + child = QObject() + child.setParent(parent) + self.assertTrue(self.duck_childEvent_called) + # This is done to decrease the refcount of the vm object + # allowing the object wrapper to be deleted before the + # BindingManager. This is useful when compiling Shiboken + # for debug, since the BindingManager destructor has an + # assert that checks if the wrapper mapper is empty. + parent.childEvent = None + + def testChildEventMonkeyPatchWithInheritance(self): + #Test if the new childEvent injected on a QObject's extension class instance is called from C++ + parent = Duck() + def childEvent(obj, event): + QObject.childEvent(obj, event) + self.duck_childEvent_called = True + child = QObject() + child.setParent(parent) + parent.childEvent = MethodType(childEvent, parent, QObject) + child = QObject() + child.setParent(parent) + self.assertTrue(self.duck_childEvent_called) + # This is done to decrease the refcount of the vm object + # allowing the object wrapper to be deleted before the + # BindingManager. This is useful when compiling Shiboken + # for debug, since the BindingManager destructor has an + # assert that checks if the wrapper mapper is empty. + parent.childEvent = None + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/emoji_string_test.py b/sources/pyside2/tests/QtCore/emoji_string_test.py new file mode 100644 index 0000000..2e05228 --- /dev/null +++ b/sources/pyside2/tests/QtCore/emoji_string_test.py @@ -0,0 +1,78 @@ +# This Python file uses the following encoding: utf-8 + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" +emoji-string-test.py + +This is the original code from the bug report +https://bugreports.qt.io/browse/PYSIDE-336 + +The only changes are the emoji constant creation which avoids unicode in the +source itself, utf8 encoding in line 1 and a short plausibility test to make +it safely fail. +""" + +import sys +from PySide2 import QtCore + +emoji_str = u'\U0001f632' + u' ' # "😲 " + +class TestStuff(QtCore.QObject): + testsig = QtCore.Signal(str) + + def a_nop(self, sendMeAnEmoji): + print(sendMeAnEmoji) + return + + def __init__(self): + super(TestStuff, self).__init__() + self.testsig.connect(self.a_nop) + self.testsig.emit(emoji_str) + + def plausi(self): + # Python 2 may be built with UCS-2 or UCS-4 support. + # UCS-2 creates 2 surrogate code points. See + # https://stackoverflow.com/questions/30775689/python-length-of-unicode-string-confusion + assert len(emoji_str) == 2 if sys.maxunicode > 0xffff else 3 + +if __name__ == "__main__": + mything = TestStuff() + mything.plausi() diff --git a/sources/pyside2/tests/QtCore/hash_test.py b/sources/pyside2/tests/QtCore/hash_test.py new file mode 100644 index 0000000..6e8a4aa --- /dev/null +++ b/sources/pyside2/tests/QtCore/hash_test.py @@ -0,0 +1,86 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QDate, QDateTime, QTime, QUrl +from PySide2.QtCore import QLine, QPoint, QRect, QSize + +class HashTest(unittest.TestCase): + def testInsert(self): + myHash = {} + qdate = QDate.currentDate() + qdatetime = QDateTime.currentDateTime() + qtime = QTime.currentTime() + qurl = QUrl("http://www.pyside.org") + qpoint = QPoint(12, 42) + + myHash[qdate] = "QDate" + myHash[qdatetime] = "QDateTime" + myHash[qtime] = "QTime" + myHash[qurl] = "QUrl" + myHash[qpoint] = "QPoint" + + self.assertEqual(myHash[qdate], "QDate") + self.assertEqual(myHash[qdatetime], "QDateTime") + self.assertEqual(myHash[qtime], "QTime") + self.assertEqual(myHash[qurl], "QUrl") + self.assertEqual(myHash[qpoint], "QPoint") + + def testQPointHash(self): + p1 = QPoint(12, 34) + p2 = QPoint(12, 34) + self.assertFalse(p1 is p2) + self.assertEqual(p1, p2) + self.assertEqual(hash(p1), hash(p2)) + + def testQSizeHash(self): + s1 = QSize(12, 34) + s2 = QSize(12, 34) + self.assertFalse(s1 is s2) + self.assertEqual(s1, s2) + self.assertEqual(hash(s1), hash(s2)) + + def testQRectHash(self): + r1 = QRect(12, 34, 56, 78) + r2 = QRect(12, 34, 56, 78) + self.assertFalse(r1 is r2) + self.assertEqual(r1, r2) + self.assertEqual(hash(r1), hash(r2)) + + def testQLineHash(self): + l1 = QLine(12, 34, 56, 78) + l2 = QLine(12, 34, 56, 78) + self.assertFalse(l1 is l2) + self.assertEqual(l1, l2) + self.assertEqual(hash(l1), hash(l2)) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/inherits_test.py b/sources/pyside2/tests/QtCore/inherits_test.py new file mode 100644 index 0000000..1f5fa49 --- /dev/null +++ b/sources/pyside2/tests/QtCore/inherits_test.py @@ -0,0 +1,44 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QObject + +class MyObject(QObject): + pass + +class MainTest(unittest.TestCase): + def testInherits(self): + o = MyObject() + mo = o.metaObject() + self.assertEqual(mo.className(), 'MyObject') + self.assertTrue(o.inherits('MyObject')) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/max_signals.py b/sources/pyside2/tests/QtCore/max_signals.py new file mode 100644 index 0000000..1f7e7f8 --- /dev/null +++ b/sources/pyside2/tests/QtCore/max_signals.py @@ -0,0 +1,62 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QObject, SIGNAL + +class MyObject(QObject): + pass + + +class TestSignalLimitless(unittest.TestCase): + SIGNAL_MAX = 100 + def test100DynamicSignals(self): + + self.count = 0 + def onSignal(): + self.count += 1 + + #create 100 dynamic signals + o = MyObject() + for i in range(self.SIGNAL_MAX): + o.connect(SIGNAL('sig%d()'%i), onSignal) + + #chek if the signals are valid + m = o.metaObject() + for i in range(self.SIGNAL_MAX): + self.assertTrue(m.indexOfSignal('sig%d()'%i) > 0) + + #emit all 100 signals + for i in range(self.SIGNAL_MAX): + o.emit(SIGNAL('sig%d()'%i)) + + self.assertEqual(self.count, self.SIGNAL_MAX) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/missing_symbols_test.py b/sources/pyside2/tests/QtCore/missing_symbols_test.py new file mode 100644 index 0000000..ac88280 --- /dev/null +++ b/sources/pyside2/tests/QtCore/missing_symbols_test.py @@ -0,0 +1,43 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''(Very) Simple test case for missing names from QtCore''' + +import unittest +from PySide2 import QtCore + +class MissingClasses(unittest.TestCase): + + def testQSettings(self): # Bug 232 + getattr(QtCore, 'QSettings') + + def testQtTrNoop(self): # Bug 220 + getattr(QtCore, 'QT_TR_NOOP') + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/mockclass_test.py b/sources/pyside2/tests/QtCore/mockclass_test.py new file mode 100644 index 0000000..1b730e7 --- /dev/null +++ b/sources/pyside2/tests/QtCore/mockclass_test.py @@ -0,0 +1,55 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Test case for PySide bug 634 +# http://bugs.pyside.org/show_bug.cgi?id=634 +# Marcus Lindblom ; 2011-02-16 + +import unittest +from PySide2.QtCore import QCoreApplication + +class Mock(object): + def __init__(self): + self.called = False + self.return_value = None + + def __call__(self, *args, **kwargs): + self.called = True + return self.return_value + + +class MockClassTest(unittest.TestCase): + def testMockQCoreApplication(self): + mock = Mock() + setattr(QCoreApplication, 'instance', mock) + QCoreApplication.instance() + self.assertTrue(mock.called) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/python_conversion.py b/sources/pyside2/tests/QtCore/python_conversion.py new file mode 100644 index 0000000..d10ecea --- /dev/null +++ b/sources/pyside2/tests/QtCore/python_conversion.py @@ -0,0 +1,93 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QLineF''' + +import unittest +import datetime + +from PySide2.QtCore import QTime, QDateTime, QDate + +class TestDateTimeConversions (unittest.TestCase): + def testQDate(self): + date = datetime.date(2010, 4, 23) + other = QDate(date) + self.assertEqual(date.year, other.year()) + self.assertEqual(date.month, other.month()) + self.assertEqual(date.day, other.day()) + + self.assertEqual(date, other.toPython()) + + def testQTime(self): + time = datetime.time(11, 14, 0, 1000) + other = QTime(time) + self.assertEqual(time.hour, other.hour()) + self.assertEqual(time.minute, other.minute()) + self.assertEqual(time.second, other.second()) + self.assertEqual(time.microsecond/1000, other.msec()) + + self.assertEqual(time, other.toPython()) + + def testQDateTime(self): + dateTime = datetime.datetime(2010, 4, 23, 11, 14, 0, 1000) + other = QDateTime(dateTime) + + otherDate = other.date() + self.assertEqual(dateTime.year, otherDate.year()) + self.assertEqual(dateTime.month, otherDate.month()) + self.assertEqual(dateTime.day, otherDate.day()) + + otherTime = other.time() + self.assertEqual(dateTime.hour, otherTime.hour()) + self.assertEqual(dateTime.minute, otherTime.minute()) + self.assertEqual(dateTime.second, otherTime.second()) + self.assertEqual(dateTime.microsecond/1000, otherTime.msec()) + + self.assertEqual(dateTime, other.toPython()) + + def testQDateTime6arg(self): + dateTime = datetime.datetime(2010, 4, 23, 11, 14, 7) + other = QDateTime(dateTime) + + otherDate = other.date() + self.assertEqual(dateTime.year, otherDate.year()) + self.assertEqual(dateTime.month, otherDate.month()) + self.assertEqual(dateTime.day, otherDate.day()) + + otherTime = other.time() + self.assertEqual(dateTime.hour, otherTime.hour()) + self.assertEqual(dateTime.minute, otherTime.minute()) + self.assertEqual(dateTime.second, otherTime.second()) + self.assertEqual(dateTime.microsecond/1000, otherTime.msec()) + + self.assertEqual(dateTime, other.toPython()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qabs_test.py b/sources/pyside2/tests/QtCore/qabs_test.py new file mode 100644 index 0000000..bc698d3 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qabs_test.py @@ -0,0 +1,48 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2 import QtCore + + +class QAbsTest(unittest.TestCase): + '''Tests for QtCore.qAbs''' + + def testBasic(self): + def check(x): + self.assertEqual(QtCore.qAbs(x), abs(x)) + + check(0) + check(-10) + check(10) + check(10.5) + check(-10.5) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qabstractitemmodel_test.py b/sources/pyside2/tests/QtCore/qabstractitemmodel_test.py new file mode 100644 index 0000000..70b610c --- /dev/null +++ b/sources/pyside2/tests/QtCore/qabstractitemmodel_test.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import * + +class MyModel (QAbstractListModel): + pass + +class Foo: + pass + +class TestQModelIndexInternalPointer(unittest.TestCase): + + def testInternalPointer(self): + m = MyModel() + foo = Foo() + idx = m.createIndex(0,0, foo) + check = m.checkIndex(idx, QAbstractItemModel.CheckIndexOption.IndexIsValid + | QAbstractItemModel.CheckIndexOption.DoNotUseParent + | QAbstractItemModel.CheckIndexOption.ParentIsInvalid) + self.assertTrue(check) + + def testPassQPersistentModelIndexAsQModelIndex(self): + # Related to bug #716 + m = MyModel() + idx = QPersistentModelIndex() + m.span(idx) + + def testQIdentityProxyModel(self): + sourceModel = QStringListModel(['item1', 'item2']) + sourceIndex = sourceModel.index(0, 0) + sourceData = str(sourceModel.data(sourceIndex, Qt.DisplayRole)) + proxyModel = QIdentityProxyModel() + proxyModel.setSourceModel(sourceModel) + proxyIndex = proxyModel.mapFromSource(sourceIndex) + proxyData = str(proxyModel.data(proxyIndex, Qt.DisplayRole)) + self.assertEqual(sourceData, proxyData) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qabstracttransition_test.py b/sources/pyside2/tests/QtCore/qabstracttransition_test.py new file mode 100644 index 0000000..2479145 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qabstracttransition_test.py @@ -0,0 +1,184 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from sys import getrefcount +from PySide2.QtCore import * + +def addStates(transition): + sx = QState() + sy = QState() + transition.setTargetStates([sx, sy]) + +def addAnimation(transition): + animation = QParallelAnimationGroup() + transition.addAnimation(animation) + +class QAbstractTransitionTest(unittest.TestCase): + + def testBasic(self): + app = QCoreApplication([]) + + o = QObject() + o.setProperty("text", "INdT") + + machine = QStateMachine() + s1 = QState() + s1.assignProperty(o, "text", "Rocks") + + s2 = QFinalState() + t = s1.addTransition(o, SIGNAL("change()"), s2) + + self.assertEqual(t.targetStates(), [s2]) + + addStates(t) + self.assertEqual(len(t.targetStates()), 2) + + animation = QParallelAnimationGroup() + t.addAnimation(animation) + + self.assertEqual(t.animations(), [animation]) + + addAnimation(t) + self.assertEqual(t.animations()[0].parent(), None) + + machine.addState(s1) + machine.addState(s2) + machine.setInitialState(s1) + machine.start() + + QTimer.singleShot(100, app.quit) + app.exec_() + + def testRefCountOfTargetState(self): + transition = QEventTransition() + state1 = QState() + refcount1 = getrefcount(state1) + + transition.setTargetState(state1) + + self.assertEqual(transition.targetState(), state1) + self.assertEqual(getrefcount(transition.targetState()), refcount1 + 1) + + state2 = QState() + refcount2 = getrefcount(state2) + + transition.setTargetState(state2) + + self.assertEqual(transition.targetState(), state2) + self.assertEqual(getrefcount(transition.targetState()), refcount2 + 1) + self.assertEqual(getrefcount(state1), refcount1) + + del transition + + self.assertEqual(getrefcount(state2), refcount2) + + def testRefCountOfTargetStates(self): + transition = QEventTransition() + state1 = QState() + state2 = QState() + states = [state1, state2] + refcount1 = getrefcount(state1) + refcount2 = getrefcount(state2) + + transition.setTargetStates(states) + + self.assertEqual(transition.targetStates(), states) + self.assertEqual(transition.targetState(), state1) + self.assertEqual(getrefcount(transition.targetStates()[0]), refcount1 + 1) + self.assertEqual(getrefcount(transition.targetStates()[1]), refcount2 + 1) + + del states + del transition + + self.assertEqual(getrefcount(state1), refcount1 - 1) + self.assertEqual(getrefcount(state2), refcount2 - 1) + + def testRefCountOfTargetStatesAfterSingleTargetState(self): + transition = QEventTransition() + state0 = QState() + refcount0 = getrefcount(state0) + + transition.setTargetState(state0) + + self.assertEqual(transition.targetState(), state0) + self.assertEqual(getrefcount(transition.targetState()), refcount0 + 1) + + state1 = QState() + state2 = QState() + states = [state1, state2] + refcount1 = getrefcount(state1) + refcount2 = getrefcount(state2) + + transition.setTargetStates(states) + + self.assertEqual(getrefcount(state0), refcount0) + self.assertEqual(transition.targetStates(), states) + self.assertEqual(transition.targetState(), state1) + self.assertEqual(getrefcount(transition.targetStates()[0]), refcount1 + 1) + self.assertEqual(getrefcount(transition.targetStates()[1]), refcount2 + 1) + + del states + del transition + + self.assertEqual(getrefcount(state1), refcount1 - 1) + self.assertEqual(getrefcount(state2), refcount2 - 1) + + def testRefCountOfTargetStatesBeforeSingleTargetState(self): + transition = QEventTransition() + state1 = QState() + state2 = QState() + states = [state1, state2] + refcount1 = getrefcount(state1) + refcount2 = getrefcount(state2) + + transition.setTargetStates(states) + + self.assertEqual(transition.targetStates(), states) + self.assertEqual(transition.targetState(), state1) + self.assertEqual(getrefcount(transition.targetStates()[0]), refcount1 + 1) + self.assertEqual(getrefcount(transition.targetStates()[1]), refcount2 + 1) + + state3 = QState() + refcount3 = getrefcount(state3) + + transition.setTargetState(state3) + + self.assertEqual(transition.targetState(), state3) + self.assertEqual(getrefcount(transition.targetState()), refcount3 + 1) + + del states + + self.assertEqual(getrefcount(state1), refcount1 - 1) + self.assertEqual(getrefcount(state2), refcount2 - 1) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qanimationgroup_test.py b/sources/pyside2/tests/QtCore/qanimationgroup_test.py new file mode 100644 index 0000000..08b410a --- /dev/null +++ b/sources/pyside2/tests/QtCore/qanimationgroup_test.py @@ -0,0 +1,53 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import * + +class QAnimationGroupTest(unittest.TestCase): + + def testBasic(self): + app = QCoreApplication([]) + + panim = QParallelAnimationGroup() + sanim = QSequentialAnimationGroup() + panim.addAnimation(sanim) + + self.assertEqual(sanim.parent(), panim) + + panim.clear() + + self.assertRaises(RuntimeError, lambda :sanim.parent()) + + QTimer.singleShot(100, app.quit) + app.exec_() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qbitarray_test.py b/sources/pyside2/tests/QtCore/qbitarray_test.py new file mode 100644 index 0000000..72117ad --- /dev/null +++ b/sources/pyside2/tests/QtCore/qbitarray_test.py @@ -0,0 +1,148 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests if QBitArray class is iterable and also '~' (__invert__) and bitwise operators''' + +import unittest + +from PySide2.QtCore import QBitArray + +def bool_list_from_qbitarray(qbitarray): + '''This function is used instead of a list comprehension because + the QBitArray is being tested also to check if it is providing + the iterable protocol. + ''' + qbitarray_values = [] + for i in range(qbitarray.size()): + qbitarray_values.append(qbitarray.at(i)) + return qbitarray_values + +class QBitArrayIsIterableTest(unittest.TestCase): + '''Tests if QBitArray class is iterable and also '~' (__invert__) and bitwise operators''' + + def setUp(self): + #Acquire resources + self.qbitarray = QBitArray(3) + self.qbitarray_values = [True, False, False] + # WARNING: do not pythonify the following loop + for i in range(len(self.qbitarray_values)): + self.qbitarray.setBit(i, self.qbitarray_values[i]) + + self.inverted_qbitarray_values = [not bit for bit in self.qbitarray_values] + + self.other_qbitarray = QBitArray(3) + self.other_qbitarray_values = [True, True, False] + # WARNING: do not pythonify the following loop + for i in range(len(self.other_qbitarray_values)): + self.other_qbitarray.setBit(i, self.other_qbitarray_values[i]) + + def tearDown(self): + #Release resources + del self.qbitarray + del self.other_qbitarray + del self.qbitarray_values + del self.other_qbitarray_values + del self.inverted_qbitarray_values + + def testQBitArrayIsIterable(self): + #Tests if QBitArray class is iterable + qbitarray_is_iterable = True + try: + bitarray = [bit for bit in self.qbitarray] + except: + qbitarray_is_iterable = False + self.assertTrue(qbitarray_is_iterable) + + def testQBitArrayInvertOperator(self): + #Tests QBitArray '~' (__invert__) operator + inverted_qbitarray = ~self.qbitarray + # WARNING: do not pythonify the following loop, the + # iterability of QBitArray class is tested in another place + inverted_qbitarray_values = bool_list_from_qbitarray(inverted_qbitarray) + self.assertEqual(self.inverted_qbitarray_values, inverted_qbitarray_values) + + def testQBitArrayOrBitwiseOperator(self): + #Tests QBitArray '|' (or) operator + has_or_bitwise_operator = True + ored_qbitarray, ored_bool_list = None, None + try: + ored_qbitarray = self.qbitarray | self.other_qbitarray + ored_bool_list = [b1 | b2 for b1, b2 in zip(self.qbitarray_values, self.other_qbitarray_values)] + except: + has_or_bitwise_operator = False + self.assertTrue(has_or_bitwise_operator) + self.assertEqual(bool_list_from_qbitarray(ored_qbitarray), ored_bool_list) + + def testQBitArrayAndBitwiseOperator(self): + #Tests QBitArray '&' (and) operator + has_and_bitwise_operator = True + anded_qbitarray, anded_bool_list = None, None + try: + anded_qbitarray = self.qbitarray | self.other_qbitarray + anded_bool_list = [b1 | b2 for b1, b2 in zip(self.qbitarray_values, self.other_qbitarray_values)] + except: + has_and_bitwise_operator = False + self.assertTrue(has_and_bitwise_operator) + self.assertEqual(bool_list_from_qbitarray(anded_qbitarray), anded_bool_list) + + def testQBitArrayXorBitwiseOperator(self): + #Tests QBitArray '^' (xor) operator + has_xor_bitwise_operator = True + xored_qbitarray, xored_bool_list = None, None + try: + xored_qbitarray = self.qbitarray | self.other_qbitarray + xored_bool_list = [b1 | b2 for b1, b2 in zip(self.qbitarray_values, self.other_qbitarray_values)] + except: + has_xor_bitwise_operator = False + self.assertTrue(has_xor_bitwise_operator) + self.assertEqual(bool_list_from_qbitarray(xored_qbitarray), xored_bool_list) + + +class QBitArrayGetItemTest(unittest.TestCase): + '''Test case for []/__getitem__ operator''' + + def create_bitarray(self, values): + '''helper function to create a bit array''' + obj = QBitArray(len(values)) + for i, value in enumerate(values): + obj.setBit(i, value) + return obj + + def testSequenceProtocol(self): + '''QBitArray sequence protocol''' + data = [True, False, True] + obj = self.create_bitarray(data) + for reference, value in zip(data, obj): + self.assertEqual(reference, value) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qbytearray_buffer_protocol_test.py b/sources/pyside2/tests/QtCore/qbytearray_buffer_protocol_test.py new file mode 100644 index 0000000..2ec6938 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qbytearray_buffer_protocol_test.py @@ -0,0 +1,53 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests QByteArray implementation of Python buffer protocol''' + +import unittest +import py3kcompat as py3k + +from os.path import isdir +from PySide2.QtCore import QByteArray + + +class QByteArrayBufferProtocolTest(unittest.TestCase): + '''Tests QByteArray implementation of Python buffer protocol''' + + def testQByteArrayBufferProtocol(self): + if py3k.IS_PY3K: + return + #Tests QByteArray implementation of Python buffer protocol using the os.path.isdir + #function which an unicode object or other object implementing the Python buffer protocol + isdir(QByteArray('/tmp')) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qbytearray_concatenation_operator_test.py b/sources/pyside2/tests/QtCore/qbytearray_concatenation_operator_test.py new file mode 100644 index 0000000..1728c68 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qbytearray_concatenation_operator_test.py @@ -0,0 +1,59 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QByteArray concatenation with '+' operator''' + +import unittest + +from PySide2.QtCore import QByteArray +import py3kcompat as py3k + +class QByteArrayConcatenationOperatorTest(unittest.TestCase): + '''Test cases for QByteArray concatenation with '+' operator''' + + def testConcatQByteArrayAndPythonString(self): + #Test concatenation of a QByteArray with a Python bytes, in this order + qba = QByteArray(py3k.b('foo')) + result = qba + py3k.b('\x00bar') + self.assertEqual(type(result), QByteArray) + self.assertEqual(result, py3k.b('foo\x00bar')) + + def testConcatPythonStringAndQByteArray(self): + #Test concatenation of a Python bytes with a QByteArray, in this order + concat_python_string_add_qbytearray_worked = True + qba = QByteArray(py3k.b('foo')) + result = py3k.b('bar\x00') + qba + self.assertEqual(type(result), QByteArray) + self.assertEqual(result, py3k.b('bar\x00foo')) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qbytearray_operator_iadd_test.py b/sources/pyside2/tests/QtCore/qbytearray_operator_iadd_test.py new file mode 100644 index 0000000..a345db5 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qbytearray_operator_iadd_test.py @@ -0,0 +1,87 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QByteArray +from helper.docmodifier import DocModifier +import py3kcompat as py3k + +class BaseQByteArrayOperatorIAdd(object): + '''Base class for QByteArray += operator tests. + + Implementing classes should inherit from unittest.TestCase and implement + setUp, setting self.obj and self.orig_obj to the target QByteArray and original + one, respectively''' + + __metaclass__ = DocModifier + + def testSingleString(self): + '''QByteArray += bytes of size 1''' + s = py3k.b('0') + self.obj += s + self.assertEqual(self.obj, self.orig_obj + s) + self.assertEqual(self.obj.size(), self.orig_obj.size() + len(s)) + + def testString(self): + '''QByteArray += bytes of size > 1''' + s = bytearray(py3k.b('dummy')) + self.obj += s # XXx iadd support abytearray + self.assertEqual(self.obj, self.orig_obj + s) + self.assertEqual(self.obj.size(), self.orig_obj.size() + len(s)) + + def testQByteArray(self): + '''QByteArray += QByteArray''' + s = QByteArray(py3k.b('array')) + self.obj += s + self.assertEqual(self.obj, self.orig_obj + s) + + +class NullQByteArrayOperatorIAdd(unittest.TestCase, BaseQByteArrayOperatorIAdd): + '''Test case for operator QByteArray += on null QByteArrays''' + + doc_prefix = 'Null object' + doc_filter = lambda x: x.startswith('test') + + def setUp(self): + self.obj = QByteArray() + self.orig_obj = QByteArray() + + +class ValidQByteArrayOperatorIAdd(unittest.TestCase, BaseQByteArrayOperatorIAdd): + '''Test case for operator QByteArray += on valid QByteArrays''' + + doc_prefix = 'Valid object' + doc_filter = lambda x: x.startswith('test') + + def setUp(self): + self.obj = QByteArray(py3k.b('some byte array')) + self.orig_obj = QByteArray(py3k.b('some byte array')) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qbytearray_operator_test.py b/sources/pyside2/tests/QtCore/qbytearray_operator_test.py new file mode 100644 index 0000000..93140d1 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qbytearray_operator_test.py @@ -0,0 +1,111 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QByteArray operators''' + +import unittest +import py3kcompat as py3k + +from PySide2.QtCore import QByteArray + +class QByteArrayOperatorEqual(unittest.TestCase): + '''TestCase for operator QByteArray == QByteArray''' + + def testDefault(self): + #QByteArray() == QByteArray() + obj1 = QByteArray() + obj2 = QByteArray() + self.assertEqual(obj1, obj2) + + def testSimple(self): + #QByteArray(some_string) == QByteArray(some_string) + string = py3k.b('egg snakes') + self.assertEqual(QByteArray(string), QByteArray(string)) + + def testPyString(self): + #QByteArray(string) == string + string = py3k.b('my test string') + self.assertEqual(QByteArray(string), string) + +class QByteArrayOperatorAt(unittest.TestCase): + '''TestCase for operator QByteArray[]''' + + def testInRange(self): + #QByteArray[x] where x is a valid index + string = 'abcdefgh' + obj = QByteArray(py3k.b(string)) + + for i in range(len(string)): + self.assertEqual(obj[i], py3k.b(string[i])) + + def testInRangeReverse(self): + #QByteArray[x] where x is a valid index (reverse order) + string = 'abcdefgh' + obj = QByteArray(py3k.b(string)) + + for i in range(len(string)-1, 0, -1): + self.assertEqual(obj[i], py3k.b(string[i])) + + + def testOutOfRange(self): + #QByteArray[x] where x is out of index + string = py3k.b('1234567') + obj = QByteArray(string) + self.assertRaises(IndexError, lambda :obj[len(string)]) + + def testNullStrings(self): + ba = QByteArray(py3k.b('\x00')) + self.assertEqual(ba.at(0), '\x00') + self.assertEqual(ba[0], py3k.b('\x00')) + +class QByteArrayOperatorLen(unittest.TestCase): + '''Test case for __len__ operator of QByteArray''' + + def testBasic(self): + '''QByteArray __len__''' + self.assertEqual(len(QByteArray()), 0) + self.assertEqual(len(QByteArray(py3k.b(''))), 0) + self.assertEqual(len(QByteArray(py3k.b(' '))), 1) + self.assertEqual(len(QByteArray(py3k.b('yabadaba'))), 8) + + +class QByteArrayOperatorStr(unittest.TestCase): + '''Test case for __str__ operator of QByteArray''' + + def testBasic(self): + '''QByteArray __str__''' + self.assertEqual(QByteArray().__str__(), str(b'')) + self.assertEqual(QByteArray(py3k.b('')).__str__(), str(b'')) + self.assertEqual(QByteArray(py3k.b('aaa')).__str__(), str(b'aaa')) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qbytearray_test.py b/sources/pyside2/tests/QtCore/qbytearray_test.py new file mode 100644 index 0000000..dba9ecf --- /dev/null +++ b/sources/pyside2/tests/QtCore/qbytearray_test.py @@ -0,0 +1,270 @@ +# -*- coding:utf-8 -*- +# !/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QByteArray''' + +import unittest +import ctypes +import pickle +import py3kcompat as py3k + +from PySide2.QtCore import QByteArray, QSettings, QObject, QDataStream, QIODevice + +class QByteArrayTestToNumber(unittest.TestCase): + def testToNumberInt(self): + obj = QByteArray(py3k.b('37')) + self.assertEqual((37, True), obj.toInt()) + + def testToNumberUShort(self): + obj = QByteArray(py3k.b('37')) + self.assertEqual((37, True), obj.toUShort()) + + def testToNumberFloat(self): + obj = QByteArray(py3k.b('37.109')) + self.assertEqual((ctypes.c_float(37.109).value, True), + obj.toFloat()) + + def testToNumberDouble(self): + obj = QByteArray(py3k.b('37.109')) + self.assertEqual((ctypes.c_double(37.109).value, True), + obj.toDouble()) + + def testSetNum(self): + b = QByteArray() + b.setNum(py3k.long(-124124)) + self.assertEqual(b, "-124124") + b = QByteArray() + b.setNum(-124124) + self.assertEqual(b, "-124124") + b = QByteArray() + b.setNum(-0.5) + self.assertEqual(b, "-0.5") + + def testAppend(self): + b = QByteArray() + b.append(py3k.b("A")) + self.assertEqual(b.size(), 1) + b.append(py3k.b("AB")) + self.assertEqual(b.size(), 3) + + +class QByteArraySplit(unittest.TestCase): + '''Test case for QByteArray.split''' + + def testPathSeparator(self): + #QByteArray.split('/') + obj = QByteArray(py3k.b(unittest.__file__)) + self.assertEqual(obj.split('/'), unittest.__file__.split('/')) + +class QByteArrayData(unittest.TestCase): + + '''Test case for QByteArray.data''' + + def testData(self): + url = QByteArray(py3k.b("http://pyside.org")) + self.assertEqual(url.data(), py3k.b("http://pyside.org")) + + def testDataWithZeros(self): + s1 = py3k.b("123\000321") + ba = QByteArray(s1) + s2 = ba.data() + self.assertEqual(py3k.b(s1), s2) + self.assertEqual(s1, ba) + +class QByteArrayOperatorAtSetter(unittest.TestCase): + '''Test case for operator QByteArray[] - __setitem__''' + + def testSetterString(self): + '''QByteArray[x] = pythonstring''' + obj = QByteArray(py3k.b('123456')) + obj[1] = py3k.b('0') + self.assertEqual(obj, QByteArray(py3k.b('103456'))) + +class QByteArrayOnQDataStream(unittest.TestCase): + ''' + Bug PYSIDE-232 + ''' + def testIt(self): + a = QByteArray() + b = QDataStream(a, QIODevice.WriteOnly) + b.writeUInt16(5000) + # The __repr__ not suppose to crash anymore + self.assertNotEqual(repr(b), None) + +class TestBug664(unittest.TestCase): + ''' + QByteArray.data() should return correct data + ''' + def testIt(self): + a = QByteArray(py3k.unicode_('hi 猫').encode('utf-8')) + if py3k.IS_PY3K: + self.assertEqual(repr(a), "PySide2.QtCore.QByteArray(b'hi \\xe7\\x8c\\xab')") + else: + self.assertEqual(repr(a), "PySide2.QtCore.QByteArray('hi \\xe7\\x8c\\xab')") + +class QByteArrayOnQVariant(unittest.TestCase): + def testQByteArrayOnQVariant(self): + a = QSettings().value("some_prop", QByteArray()) + self.assertEqual(type(a), QByteArray) + +class TestBug567(unittest.TestCase): + ''' + QByteArray should support slices + ''' + def testIt(self): + ba = QByteArray(py3k.b('1234567890')) + self.assertEqual(ba[2:4], '34') + self.assertEqual(ba[:4], '1234') + self.assertEqual(ba[4:], '567890') + self.assertEqual(len(ba[4:1]), 0) + self.assertEqual(ba[::-1], '0987654321') + self.assertEqual(ba[::2], '13579') + self.assertEqual(ba[::-2], '08642') + self.assertEqual(ba[2:8:3], '36') + +class QByteArrayBug514(unittest.TestCase): + def testIt(self): + data = py3k.b("foobar") + a = QByteArray.fromRawData(data) + self.assertEqual(type(a), QByteArray) + self.assertEqual(a.data(), data) + +class TestPickler(unittest.TestCase): + def testIt(self): + ba = QByteArray(py3k.b("321\x00123")) + output = pickle.dumps(str(ba)) + ba2 = pickle.loads(output) + self.assertEqual(str(ba), str(ba2)) + +class QByteArrayBug720(unittest.TestCase): + def testIt(self): + ba = QByteArray(py3k.b("32\"1\x00123")) + self.assertEqual(str(ba), str(py3k.b("32\"1\x00123"))) + if py3k.IS_PY3K: + self.assertEqual(repr(ba), "PySide2.QtCore.QByteArray(b'32\"1\\x00123')") + else: + self.assertEqual(repr(ba), "PySide2.QtCore.QByteArray('32\"1\\x00123')") + +class QByteArrayImplicitConvert(unittest.TestCase): + def testString(self): + # No implicit conversions from QByteArray to python string + ba = QByteArray(py3k.b("object name")) + obj = QObject() + self.assertRaises(TypeError, obj.setObjectName, ba) + + +class QByteArraySliceAssignment(unittest.TestCase): + def testIndexAssignment(self): + a = QByteArray(py3k.b('abc')) + a[0] = py3k.b('x') + self.assertEqual(a[0], py3k.b('x')) + + def test_1(): + a[0] = py3k.b('xy') + self.assertRaises(ValueError, test_1) + + def testSliceAssignmentBytes(self): + b = QByteArray(py3k.b('0123456789')) + b[2:8] = py3k.b('abcdef') + self.assertEqual(b[2:8], py3k.b('abcdef')) + # Delete behavior + b[2:8] = None + self.assertEqual(b, py3k.b('0189')) + + # number of slots and number of values doesn't match + def test_2(): + b[2:8:2] = py3k.b('') + self.assertRaises(ValueError, test_2) + b = QByteArray(py3k.b('0123456789')) + # reverse slice + b[5:2:-1] = py3k.b('ABC') + self.assertEqual(b, py3k.b('012CBA6789')) + # step is not 1 + b[2:9:3] = py3k.b('XYZ') + self.assertEqual(b, py3k.b('01XCBY67Z9')) + b = QByteArray(py3k.b('0123456789')) + b[9:2:-3] = py3k.b('XYZ') + self.assertEqual(b, py3k.b('012Z45Y78X')) + + def testSliceAssignmentQByteArray(self): + b = QByteArray(py3k.b('0123456789')) + b[2:8] = QByteArray(py3k.b('abcdef')) + self.assertEqual(b[2:8], py3k.b('abcdef')) + # shrink + b[2:8] = QByteArray(py3k.b('aaa')) + self.assertEqual(b, py3k.b('01aaa89')) + # expanse + b[2:5] = QByteArray(py3k.b('uvwxyz')) + self.assertEqual(b, py3k.b('01uvwxyz89')) + # Delete behavior + b[2:8] = QByteArray() + self.assertEqual(b, py3k.b('0189')) + + b = QByteArray(py3k.b('0123456789')) + # reverse assginment + b[5:2:-1] = QByteArray(py3k.b('ABC')) + self.assertEqual(b, py3k.b('012CBA6789')) + # step is not 1 + b[2:9:3] = QByteArray(py3k.b('XYZ')) + self.assertEqual(b, py3k.b('01XCBY67Z9')) + b = QByteArray(py3k.b('0123456789')) + b[9:2:-3] = QByteArray(py3k.b('XYZ')) + self.assertEqual(b, py3k.b('012Z45Y78X')) + + def testSliceAssignmentByteArray(self): + b = QByteArray(py3k.b('0123456789')) + # replace + b[2:8] = bytearray(py3k.b('abcdef')) + self.assertEqual(b[2:8], py3k.b('abcdef')) + # shrink + b[2:8] = bytearray(py3k.b('aaa')) + self.assertEqual(b, py3k.b('01aaa89')) + # expanse + b[2:5] = bytearray(py3k.b('uvwxyz')) + self.assertEqual(b, py3k.b('01uvwxyz89')) + # Delete behavior + b[2:8] = bytearray(py3k.b('')) + self.assertEqual(b, py3k.b('0189')) + + b = QByteArray(py3k.b('0123456789')) + # reverse assginment + b[5:2:-1] = bytearray(py3k.b('ABC')) + self.assertEqual(b, py3k.b('012CBA6789')) + # step is not 1 + b[2:9:3] = bytearray(py3k.b('XYZ')) + self.assertEqual(b, py3k.b('01XCBY67Z9')) + b = QByteArray(py3k.b('0123456789')) + b[9:2:-3] = bytearray(py3k.b('XYZ')) + self.assertEqual(b, py3k.b('012Z45Y78X')) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qcollator_test.py b/sources/pyside2/tests/QtCore/qcollator_test.py new file mode 100644 index 0000000..231ce5b --- /dev/null +++ b/sources/pyside2/tests/QtCore/qcollator_test.py @@ -0,0 +1,61 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QCollator''' + +import unittest +import ctypes +import sys + +from PySide2.QtCore import * + +class QCollatorTest(unittest.TestCase): + def testState(self): + c = QCollator() + c.setCaseSensitivity(Qt.CaseInsensitive) + c.setLocale(QLocale.German) + + print("compare a and b:", c.compare("a", "b")) + + self.assertEqual(c.caseSensitivity(), Qt.CaseInsensitive) + self.assertEqual(c.locale(), QLocale(QLocale.German)) + + c.setLocale(QLocale.French) + c.setNumericMode(True) + c.setIgnorePunctuation(True) + c.setLocale(QLocale.Norwegian) + + self.assertEqual(c.caseSensitivity(), Qt.CaseInsensitive) + self.assertEqual(c.numericMode(), True) + self.assertEqual(c.ignorePunctuation(), True) + self.assertEqual(c.locale(), QLocale(QLocale.Norwegian)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qcommandlineparser_test.py b/sources/pyside2/tests/QtCore/qcommandlineparser_test.py new file mode 100644 index 0000000..207dbbe --- /dev/null +++ b/sources/pyside2/tests/QtCore/qcommandlineparser_test.py @@ -0,0 +1,56 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QCommandLineParser and QCommandLineOption''' + +import unittest +import ctypes +import sys + +from PySide2.QtCore import * + +class QCommandLineParserTest(unittest.TestCase): + def testParser(self): + app = QCoreApplication([]) + + parser1 = QCommandLineParser() + self.assertEqual(parser1.parse(["QtCore_qcommandlineparser_test", "file.txt"]), True) + self.assertEqual(parser1.positionalArguments(), ["file.txt"]) + + parser2 = QCommandLineParser() + self.assertEqual(parser2.addOption(QCommandLineOption("b")), True) + self.assertEqual(parser2.parse(["QtCore_qcommandlineparser_test", "-b"]), True) + self.assertEqual(parser2.optionNames(), ["b"]) + self.assertEqual(parser2.isSet("b"), True) + self.assertEqual(parser2.values("b"), []) + self.assertEqual(parser2.positionalArguments(), []) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qcoreapplication_instance_test.py b/sources/pyside2/tests/QtCore/qcoreapplication_instance_test.py new file mode 100644 index 0000000..ad1dee0 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qcoreapplication_instance_test.py @@ -0,0 +1,49 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QCoreApplication.instance static method''' + +import unittest + +from PySide2.QtCore import QCoreApplication + +class QCoreApplicationInstanceTest(unittest.TestCase): + '''Test cases for QCoreApplication.instance static method''' + + def testQCoreApplicationInstance(self): + #Tests QCoreApplication.instance() + self.assertEqual(QCoreApplication.instance(), None) + app = QCoreApplication([]) + self.assertEqual(QCoreApplication.instance(), app) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qcoreapplication_test.py b/sources/pyside2/tests/QtCore/qcoreapplication_test.py new file mode 100644 index 0000000..15a9058 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qcoreapplication_test.py @@ -0,0 +1,40 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QCoreApplication + +class TestQCoreApplication(unittest.TestCase): + def testNoArguments(self): + app = QCoreApplication() + self.assertIsInstance(app, QCoreApplication) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qdatastream_test.py b/sources/pyside2/tests/QtCore/qdatastream_test.py new file mode 100644 index 0000000..812c2aa --- /dev/null +++ b/sources/pyside2/tests/QtCore/qdatastream_test.py @@ -0,0 +1,355 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QDataStream''' + +import unittest +import py3kcompat as py3k + +from PySide2.QtCore import QBitArray, QByteArray, QIODevice, QDataStream, QDate, QTime, QDateTime + +def create_bitarray(string): + array = QBitArray(len(string)) + for i, char in enumerate(string): + array.setBit(i, char != '0') + return array + +class QDataStreamWrite(unittest.TestCase): + '''Test case for QDatastream write* functions''' + + def setUp(self): + self.ba = QByteArray() + self.read = QDataStream(self.ba, QIODevice.ReadOnly) + self.write = QDataStream(self.ba, QIODevice.WriteOnly) + + def testWriteUInt8(self): + '''QDataStream.writeUInt8 (accepting str of size 1)''' + x = 0xFF + self.write.writeUInt8(x) + y = self.read.readUInt8() + self.assertEqual(x, y) + + self.assertRaises(TypeError, self.write.writeUInt8, 'aaaaa') + + def testWriteInt8(self): + '''QDataStream.writeInt8 (accepting str of size 1)''' + x = 65 + self.write.writeInt8(chr(x)) + y = self.read.readInt8() + self.assertEqual(x, y) + + self.assertRaises(TypeError, self.write.writeInt8, 'aaaaa') + + def testWriteUInt8Int(self): + '''QDataStream.writeUInt8 (accepting integer)''' + x = 0xFF + self.write.writeUInt8(x) + y = self.read.readUInt8() + self.assertEqual(x, y) + + def testWriteInt8Int(self): + '''QDataStream.writeInt8 (accepting integer)''' + x = 65 + self.write.writeInt8(x) + y = self.read.readInt8() + self.assertEqual(x, y) + + def testWriteUInt16(self): + '''QDataStream.writeUInt16''' + x = 0x4423 + self.write.writeUInt16(x) + y = int(self.read.readUInt16()) + self.assertEqual(x, y) + + def testWriteUInt32(self): + '''QDataStream.writeUInt32''' + x = 0xdeadbeef + self.write.writeUInt32(x) + y = int(self.read.readUInt32()) + self.assertEqual(x, y) + +class QDataStreamShift(unittest.TestCase): + '''Test case for << and >> operators''' + + def setUp(self): + self.ba = QByteArray() + self.stream = QDataStream(self.ba, QIODevice.WriteOnly) + self.read_stream = QDataStream(self.ba, QIODevice.ReadOnly) + + def testQCharValid(self): + '''QDataStream <<>> QChar - valid''' + self.stream.writeQChar(42) + + res = self.read_stream.readQChar() + self.assertEqual(res, py3k.unichr(42)) + + def testQCharNull(self): + '''QDataStream <<>> QChar - null''' + self.stream.writeQChar(None) + + res = self.read_stream.readQChar() + self.assertEqual(res, py3k.unicode_('\x00')) + + def testQByteArrayValid(self): + '''QDataStream <<>> QByteArray - valid''' + self.stream << QByteArray(py3k.b("hello")) + + res = QByteArray() + + self.read_stream >> res + self.assertEqual(res, QByteArray(py3k.b("hello"))) + + def testQByteArrayEmpty(self): + '''QDataStream <<>> QByteArray - empty''' + self.stream << QByteArray(py3k.b("")) + + res = QByteArray() + + self.read_stream >> res + self.assertEqual(res, QByteArray(py3k.b(""))) + self.assertTrue(res.isEmpty()) + self.assertFalse(res.isNull()) + + def testQByteArrayNull(self): + '''QDataStream <<>> QByteArray - null''' + self.stream << QByteArray() + + res = QByteArray() + + self.read_stream >> res + self.assertEqual(res, QByteArray()) + self.assertTrue(res.isEmpty()) + self.assertTrue(res.isNull()) + + def testQStringValid(self): + '''QDataStream <<>> QString - valid''' + self.stream.writeQString('Ka-boom') + + res = self.read_stream.readQString() + self.assertEqual(res, py3k.unicode_('Ka-boom')) + + def testQStringEmpty(self): + '''QDataStream <<>> QString - empty''' + self.stream.writeQString('') + + res = self.read_stream.readQString() + self.assertEqual(res, py3k.unicode_('')) + + def testQStringNull(self): + '''QDataStream <<>> QString - null''' + self.stream.writeQString(None) + + res = self.read_stream.readQString() + self.assertEqual(res, py3k.unicode_('')) + + def testQBitArrayNull(self): + '''QDataStream <<>> QBitArray - null''' + self.stream << QBitArray() + + res = QBitArray() + + self.read_stream >> res + self.assertEqual(res, QBitArray()) + + def testQBitArrayValid(self): + '''QDataStream <<>> QBitArray - valid''' + self.stream << create_bitarray('01010101') + + res = QBitArray() + + self.read_stream >> res + self.assertEqual(res, create_bitarray('01010101')) + + def testQDateNull(self): + '''QDataStream <<>> QDate - null''' + self.stream << QDate() + + res = QDate() + + self.read_stream >> res + self.assertEqual(res, QDate()) + self.assertFalse(res.isValid()) + self.assertTrue(res.isNull()) + + def testQDateValid(self): + '''QDataStream <<>> QDate - valid''' + self.stream << QDate(2012, 12, 21) + + res = QDate() + + self.read_stream >> res + self.assertEqual(res, QDate(2012, 12, 21)) + self.assertTrue(res.isValid()) + self.assertFalse(res.isNull()) + + + def testQTimeNull(self): + '''QDataStream <<>> QTime - null''' + self.stream << QTime() + + res = QTime() + + self.read_stream >> res + self.assertEqual(res, QTime()) + self.assertFalse(res.isValid()) + self.assertTrue(res.isNull()) + + def testQTimeValid(self): + '''QDataStream <<>> QTime - valid''' + self.stream << QTime(12, 12, 21) + + res = QTime() + + self.read_stream >> res + self.assertEqual(res, QTime(12, 12, 21)) + self.assertTrue(res.isValid()) + self.assertFalse(res.isNull()) + + def testQDateTimeNull(self): + '''QDataStream <<>> QDateTime - null''' + + self.stream << QDateTime() + + res = QDateTime() + + self.read_stream >> res + self.assertEqual(res, QDateTime()) + self.assertFalse(res.isValid()) + self.assertTrue(res.isNull()) + + def testQDateTimeValid(self): + '''QDataStream <<>> QDateTime - valid''' + time = QTime(23, 23, 23) + date = QDate(2009, 1, 1) + + self.stream << QDateTime(date, time) + + res = QDateTime() + + self.read_stream >> res + self.assertEqual(res, QDateTime(date, time)) + self.assertTrue(res.isValid()) + self.assertFalse(res.isNull()) + + +class QDataStreamShiftBitArray(unittest.TestCase): + + def _check_bitarray(self, data_set): + '''Check the >> operator for the given data set''' + + for data, expectedStatus, expectedString in data_set: + stream = QDataStream(data, QIODevice.ReadOnly) + string = QBitArray() + stream >> string + + self.assertEqual(stream.status(), expectedStatus) + self.assertEqual(string.size(), expectedString.size()) + self.assertEqual(string, expectedString) + + def testOk(self): + '''QDataStream with valid QBitArray''' + data = [] + + data.append((QByteArray(py3k.b('\x00\x00\x00\x00')), QDataStream.Ok, + QBitArray())) + data.append((QByteArray(py3k.b('\x00\x00\x00\x01\x00')), QDataStream.Ok, + create_bitarray('0'))) + data.append((QByteArray(py3k.b('\x00\x00\x00\x01\x01')), QDataStream.Ok, + create_bitarray('1'))) + data.append((QByteArray(py3k.b('\x00\x00\x00\x02\x03')), QDataStream.Ok, + create_bitarray('11'))) + data.append((QByteArray(py3k.b('\x00\x00\x00\x03\x07')), QDataStream.Ok, + create_bitarray('111'))) + data.append((QByteArray(py3k.b('\x00\x00\x00\x04\x0f')), QDataStream.Ok, + create_bitarray('1111'))) + data.append((QByteArray(py3k.b('\x00\x00\x00\x05\x1f')), QDataStream.Ok, + create_bitarray('11111'))) + data.append((QByteArray(py3k.b('\x00\x00\x00\x06\x3f')), QDataStream.Ok, + create_bitarray('111111'))) + data.append((QByteArray(py3k.b('\x00\x00\x00\x07\x7f')), QDataStream.Ok, + create_bitarray('1111111'))) + data.append((QByteArray(py3k.b('\x00\x00\x00\x07\x7e')), QDataStream.Ok, + create_bitarray('0111111'))) + data.append((QByteArray(py3k.b('\x00\x00\x00\x07\x00')), QDataStream.Ok, + create_bitarray('0000000'))) + data.append((QByteArray(py3k.b('\x00\x00\x00\x07\x39')), QDataStream.Ok, + create_bitarray('1001110'))) + + self._check_bitarray(data) + + def testPastEnd(self): + '''QDataStream >> QBitArray reading past the end of the data''' + data = [] + + data.append((QByteArray(), QDataStream.ReadPastEnd, + QBitArray())) + data.append((QByteArray(py3k.b('\x00')), QDataStream.ReadPastEnd, + QBitArray())) + data.append((QByteArray(py3k.b('\x00\x00')), QDataStream.ReadPastEnd, + QBitArray())) + data.append((QByteArray(py3k.b('\x00\x00\x00')), QDataStream.ReadPastEnd, + QBitArray())) + data.append((QByteArray(py3k.b('\x00\x00\x00\x01')), QDataStream.ReadPastEnd, + QBitArray())) + data.append((QByteArray(py3k.b('\x00\x00\x00\x02')), QDataStream.ReadPastEnd, + QBitArray())) + data.append((QByteArray(py3k.b('\x00\x00\x00\x03')), QDataStream.ReadPastEnd, + QBitArray())) + data.append((QByteArray(py3k.b('\x00\x00\x00\x04')), QDataStream.ReadPastEnd, + QBitArray())) + + self._check_bitarray(data) + + def testCorruptData(self): + '''QDataStream reading corrupt data''' + data = [] + + data.append((QByteArray(py3k.b('\x00\x00\x00\x01\x02')), + QDataStream.ReadCorruptData, + QBitArray())) + + self._check_bitarray(data) + +class QDataStreamRawData(unittest.TestCase): + def testRawData(self): + data = QDataStream() + self.assertEqual(data.readRawData(4), None) + + ba = QByteArray() + data = QDataStream(ba, QIODevice.WriteOnly) + data.writeRawData('AB\x00C') + self.assertEqual(ba.data(), py3k.b('AB\x00C')) + + data = QDataStream(ba) + self.assertEqual(data.readRawData(4), py3k.b('AB\x00C')) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qdate_test.py b/sources/pyside2/tests/QtCore/qdate_test.py new file mode 100644 index 0000000..8c3ddb0 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qdate_test.py @@ -0,0 +1,62 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QDate''' + +import unittest + +from PySide2.QtCore import * + +class TestQDate (unittest.TestCase): + def testGetDate(self): + date = QDate(2009, 22, 9) + tuple_ = date.getDate() + self.assertEqual(tuple, tuple_.__class__) + (y, m, d) = tuple_ + self.assertEqual(date.year(), y) + self.assertEqual(date.month(), m) + self.assertEqual(date.day(), d) + + def testGetWeekNumber(self): + date = QDate(2000, 1, 1) + tuple_ = date.weekNumber() + self.assertEqual(tuple, tuple_.__class__) + (week, yearNumber) = tuple_ + self.assertEqual(week, 52) + self.assertEqual(yearNumber, 1999) + + def testBooleanCast(self): + today = QDate.currentDate() + self.assertTrue(today) + nodate = QDate() + self.assertFalse(nodate) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qdatetime_test.py b/sources/pyside2/tests/QtCore/qdatetime_test.py new file mode 100644 index 0000000..9da5142 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qdatetime_test.py @@ -0,0 +1,51 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import datetime + +from PySide2.QtCore import QDateTime, QDate, QTime + +class TestQDate (unittest.TestCase): + def testDateConversion(self): + dateTime = QDateTime(QDate(2011, 5, 17), QTime(11, 1, 14, 15)) + dateTimePy = QDateTime(datetime.date(2011, 5, 17), datetime.time(11, 1, 14, 15000)) + self.assertEqual(dateTime, dateTimePy) + + def testDateTimeConversion(self): + dateTime = QDateTime(QDate(2011, 5, 17), QTime(11, 1, 14, 15)) + dateTimePy = QDateTime(datetime.datetime(2011, 5, 17, 11, 1, 14, 15000)) + self.assertEqual(dateTime, dateTimePy) + + def testDateTimeNow(self): + py = datetime.datetime.now() + qt = QDateTime(py) + self.assertEqual(qt, py) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qeasingcurve_test.py b/sources/pyside2/tests/QtCore/qeasingcurve_test.py new file mode 100644 index 0000000..3975d1f --- /dev/null +++ b/sources/pyside2/tests/QtCore/qeasingcurve_test.py @@ -0,0 +1,54 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QEasingCurve + +def myFunction(progress): + if progress == 1.0: + return 100.0 + else: + return -100.0 + +class TestQEasingCurve(unittest.TestCase): + def testCustomType(self): + ec = QEasingCurve() + ec.setCustomType(myFunction) + self.assertEqual(ec.valueForProgress(1.0), 100.0) + self.assertEqual(ec.valueForProgress(0.5), -100.0) + + def testObjectCleanup(self): + for i in range(100): + ec = QEasingCurve() + ec.setCustomType(myFunction) + self.assertEqual(ec.valueForProgress(1.0), 100.0) + self.assertEqual(ec.valueForProgress(0.5), -100.0) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qenum_test.py b/sources/pyside2/tests/QtCore/qenum_test.py new file mode 100644 index 0000000..eccbfac --- /dev/null +++ b/sources/pyside2/tests/QtCore/qenum_test.py @@ -0,0 +1,74 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QEnum and QFlags''' + +import unittest + +from PySide2.QtCore import * + +class TestEnum(unittest.TestCase): + + def testToInt(self): + self.assertEqual(QIODevice.NotOpen, 0) + self.assertEqual(QIODevice.ReadOnly, 1) + self.assertEqual(QIODevice.WriteOnly, 2) + self.assertEqual(QIODevice.ReadWrite, 1 | 2) + self.assertEqual(QIODevice.Append, 4) + self.assertEqual(QIODevice.Truncate, 8) + self.assertEqual(QIODevice.Text, 16) + self.assertEqual(QIODevice.Unbuffered, 32) + + def testToIntInFunction(self): + self.assertEqual(str(int(QIODevice.WriteOnly)), "2") + +class TestQFlags(unittest.TestCase): + def testToItn(self): + om = QIODevice.NotOpen + + self.assertEqual(om, QIODevice.NotOpen) + self.assertTrue(om == 0) + + self.assertTrue(om != QIODevice.ReadOnly) + self.assertTrue(om != 1) + + def testToIntInFunction(self): + om = QIODevice.WriteOnly + self.assertEqual(int(om), 2) + + def testNonExtensibleEnums(self): + try: + om = QIODevice.OpenMode(QIODevice.WriteOnly) + self.assertFail() + except: + pass + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qevent_test.py b/sources/pyside2/tests/QtCore/qevent_test.py new file mode 100644 index 0000000..c390c6a --- /dev/null +++ b/sources/pyside2/tests/QtCore/qevent_test.py @@ -0,0 +1,53 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QtCore.QEvent''' + +import unittest + +from PySide2.QtCore import QEvent + +class QEventTypeFlag(unittest.TestCase): + '''Test case for usage of QEvent.Type flags''' + + def testFlagAccess(self): + #QEvent.Type flags usage + + event = QEvent(QEvent.Timer) + self.assertEqual(event.type(), QEvent.Timer) + + event = QEvent(QEvent.Close) + self.assertEqual(event.type(), QEvent.Close) + + event = QEvent(QEvent.IconTextChange) + self.assertEqual(event.type(), QEvent.IconTextChange) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qfile_test.py b/sources/pyside2/tests/QtCore/qfile_test.py new file mode 100644 index 0000000..40f861e --- /dev/null +++ b/sources/pyside2/tests/QtCore/qfile_test.py @@ -0,0 +1,88 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +import os +import tempfile +import sys +import py3kcompat as py3k + +from PySide2.QtCore import QDir, QFile, QIODevice, QSaveFile, QTemporaryDir + +class GetCharTest(unittest.TestCase): + '''Test case for QIODevice.getChar in QFile''' + + def setUp(self): + '''Acquire resources''' + handle, self.filename = tempfile.mkstemp() + os.write(handle, py3k.b('a')) + os.close(handle) + + def tearDown(self): + '''release resources''' + os.remove(self.filename) + + def testBasic(self): + '''QFile.getChar''' + obj = QFile(self.filename) + obj.open(QIODevice.ReadOnly) + try: + self.assertEqual(obj.getChar(), (True, 'a')) + self.assertFalse(obj.getChar()[0]) + finally: + obj.close() + + def testBug721(self): + obj = QFile(self.filename) + obj.open(QIODevice.ReadOnly) + try: + memory = obj.map(0, 1) + self.assertEqual(len(memory), 1) + if sys.version_info[0] >= 3: + self.assertEqual(memory[0], ord('a')) + else: + self.assertEqual(memory[0], py3k.b('a')) + # now memory points to wild bytes... :-) + # uncommenting this must cause a segfault. + # self.assertEqual(memory[0], 'a') + finally: + obj.unmap(memory) + obj.close() + + def testQSaveFile(self): + dir = QTemporaryDir(QDir.tempPath() + "/XXXXXX.dir") + self.assertTrue(dir.isValid()) + saveFile = QSaveFile(dir.path() + "/test.dat") + self.assertTrue(saveFile.open(QIODevice.WriteOnly)) + saveFile.write(py3k.b("Test")) + self.assertTrue(saveFile.commit()) + self.assertTrue(os.path.exists(QDir.toNativeSeparators(saveFile.fileName()))) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qfileinfo_test.py b/sources/pyside2/tests/QtCore/qfileinfo_test.py new file mode 100644 index 0000000..16e606a --- /dev/null +++ b/sources/pyside2/tests/QtCore/qfileinfo_test.py @@ -0,0 +1,44 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +import os +import tempfile + +from PySide2.QtCore import QFile, QFileInfo + +class QFileConstructor(unittest.TestCase): + '''QFileInfo constructor with qfile''' + + def testBasic(self): + '''QFileInfo(QFile)''' + obj = QFileInfo(QFile()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qfileread_test.py b/sources/pyside2/tests/QtCore/qfileread_test.py new file mode 100644 index 0000000..19e1ea3 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qfileread_test.py @@ -0,0 +1,83 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +import os + +from PySide2.QtCore import QIODevice, QTemporaryFile +import py3kcompat as py3k + +class FileChild1(QTemporaryFile): + pass + +class FileChild2(QTemporaryFile): + def readData(self, maxlen): + return super(FileChild2, self).readData(maxlen) + def readLineData(self, maxlen): + return super(FileChild2, self).readLineData(maxlen) + +class readDataTest(unittest.TestCase): + '''Test case for readData and readLineData''' + + def setUp(self): + '''Acquire resources''' + self.filename1 = FileChild1() + self.assertTrue(self.filename1.open()) + self.filename1.write(py3k.b('Test text for testing')) + + self.filename2 = FileChild2() + self.assertTrue(self.filename2.open()) + self.filename2.write(py3k.b('Test text for testing')) + + def tearDown(self): + '''release resources''' + pass + + def testBasic(self): + '''QTemporaryFile.read''' + self.filename1.seek(0) + s1 = self.filename1.read(50) + self.assertEqual(s1, 'Test text for testing') + + + def testBug40(self): + self.filename2.seek(0) + s2 = self.filename2.read(50) + self.assertEqual(s2, 'Test text for testing') + + self.filename2.seek(0) + s2 = self.filename2.readLine(22) + self.assertEqual(s2, 'Test text for testing') + + self.filename1.seek(0) + s1 = self.filename1.read(50) + self.assertEqual(s1, s2) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qflags_test.py b/sources/pyside2/tests/QtCore/qflags_test.py new file mode 100644 index 0000000..7d55842 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qflags_test.py @@ -0,0 +1,121 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QFlags''' + +import unittest +from PySide2.QtCore import Qt, QTemporaryFile, QFile, QIODevice, QObject + +class QFlagTest(unittest.TestCase): + '''Test case for usage of flags''' + + def testCallFunction(self): + f = QTemporaryFile() + self.assertTrue(f.open()) + fileName = f.fileName() + f.close() + + f = QFile(fileName) + self.assertEqual(f.open(QIODevice.Truncate | QIODevice.Text | QIODevice.ReadWrite), True) + om = f.openMode() + self.assertEqual(om & QIODevice.Truncate, QIODevice.Truncate) + self.assertEqual(om & QIODevice.Text, QIODevice.Text) + self.assertEqual(om & QIODevice.ReadWrite, QIODevice.ReadWrite) + self.assertTrue(om == QIODevice.Truncate | QIODevice.Text | QIODevice.ReadWrite) + f.close() + + +class QFlagOperatorTest(unittest.TestCase): + '''Test case for operators in QFlags''' + + def testInvert(self): + '''QFlags ~ (invert) operator''' + self.assertEqual(type(~QIODevice.ReadOnly), QIODevice.OpenMode) + + def testOr(self): + '''QFlags | (or) operator''' + self.assertEqual(type(QIODevice.ReadOnly | QIODevice.WriteOnly), QIODevice.OpenMode) + + def testAnd(self): + '''QFlags & (and) operator''' + self.assertEqual(type(QIODevice.ReadOnly & QIODevice.WriteOnly), QIODevice.OpenMode) + + def testIOr(self): + '''QFlags |= (ior) operator''' + flag = Qt.WindowFlags() + self.assertTrue(Qt.Widget == 0) + self.assertFalse(flag & Qt.Widget) + result = flag & Qt.Widget + self.assertTrue(result == 0) + flag |= Qt.WindowMinimizeButtonHint + self.assertTrue(flag & Qt.WindowMinimizeButtonHint) + + def testInvertOr(self): + '''QFlags ~ (invert) operator over the result of an | (or) operator''' + self.assertEqual(type(~(Qt.ItemIsSelectable | Qt.ItemIsEditable)), Qt.ItemFlags) + + def testEqual(self): + '''QFlags == operator''' + flags = Qt.Window + flags |= Qt.WindowMinimizeButtonHint + flag_type = (flags & Qt.WindowType_Mask) + self.assertEqual(flag_type, Qt.Window) + + self.assertEqual(Qt.KeyboardModifiers(Qt.ControlModifier), Qt.ControlModifier) + + def testOperatorBetweenFlags(self): + '''QFlags & QFlags''' + flags = Qt.NoItemFlags | Qt.ItemIsUserCheckable + newflags = Qt.NoItemFlags | Qt.ItemIsUserCheckable + self.assertTrue(flags & newflags) + + def testOperatorDifferentOrder(self): + '''Different ordering of arguments''' + flags = Qt.NoItemFlags | Qt.ItemIsUserCheckable + self.assertEqual(flags | Qt.ItemIsEnabled, Qt.ItemIsEnabled | flags) + +class QFlagsOnQVariant(unittest.TestCase): + def testQFlagsOnQVariant(self): + o = QObject() + o.setProperty("foo", QIODevice.ReadOnly | QIODevice.WriteOnly) + self.assertEqual(type(o.property("foo")), QIODevice.OpenMode) + +class QFlagsWrongType(unittest.TestCase): + def testWrongType(self): + '''Wrong type passed to QFlags binary operators''' + + self.assertRaises(TypeError, Qt.NoItemFlags | '43') + self.assertRaises(TypeError, Qt.NoItemFlags & '43') + self.assertRaises(TypeError, 'jabba' & Qt.NoItemFlags) + self.assertRaises(TypeError, 'hut' & Qt.NoItemFlags) + self.assertRaises(TypeError, Qt.NoItemFlags & QObject()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qhandle_test.py b/sources/pyside2/tests/QtCore/qhandle_test.py new file mode 100644 index 0000000..db78044 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qhandle_test.py @@ -0,0 +1,45 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QEnum and QFlags''' + +import unittest + +from PySide2.QtCore import QThread, Qt + +class TestHANDLE(unittest.TestCase): + def testIntConversion(self): + i = 0 + h = QThread.currentThreadId() + i = 0 + int(h) + self.assertEqual(i, int(h)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qinstallmsghandler_test.py b/sources/pyside2/tests/QtCore/qinstallmsghandler_test.py new file mode 100644 index 0000000..f14c893 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qinstallmsghandler_test.py @@ -0,0 +1,81 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for qInstallMsgHandler''' + +import unittest +import sys + +from PySide2.QtCore import * + +param = [] + +def handler(msgt, ctx, msg): + global param + param = [msgt, ctx, msg.strip()] + +def handleruseless(msgt, ctx, msg): + pass + +class QInstallMsgHandlerTest(unittest.TestCase): + + def tearDown(self): + # Ensure that next test will have a clear environment + qInstallMessageHandler(None) + + def testNone(self): + ret = qInstallMessageHandler(None) + self.assertEqual(ret, None) + + def testRet(self): + ret = qInstallMessageHandler(None) + self.assertEqual(ret, None) + refcount = sys.getrefcount(handleruseless) + retNone = qInstallMessageHandler(handleruseless) + self.assertEqual(sys.getrefcount(handleruseless), refcount + 1) + rethandler = qInstallMessageHandler(None) + self.assertEqual(rethandler, handleruseless) + del rethandler + self.assertEqual(sys.getrefcount(handleruseless), refcount) + + def testHandler(self): + rethandler = qInstallMessageHandler(handler) + if QLibraryInfo.isDebugBuild(): + qDebug("Test Debug") + self.assertEqual(param[0], QtDebugMsg) + self.assertEqual(param[2], "Test Debug") + qWarning("Test Warning") + self.assertEqual(param[0], QtWarningMsg) + self.assertEqual(param[2], "Test Warning") + qCritical("Test Critical") + self.assertEqual(param[0], QtCriticalMsg) + self.assertEqual(param[2], "Test Critical") + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qlinef_test.py b/sources/pyside2/tests/QtCore/qlinef_test.py new file mode 100644 index 0000000..2261602 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qlinef_test.py @@ -0,0 +1,49 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QLineF''' + +import unittest +import os + +from PySide2.QtCore import * + +class TestQLineF (unittest.TestCase): + def testIntersect(self): + l1 = QLineF(0, 0, 1, 0) + l2 = QLineF(1, -1, 1, 1) + tuple_ = l1.intersect(l2) + self.assertEqual(tuple, tuple_.__class__) + (value, p) = tuple_ + self.assertEqual(QLineF.BoundedIntersection, value) + self.assertEqual(QPointF(1, 0), p) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qlocale_test.py b/sources/pyside2/tests/QtCore/qlocale_test.py new file mode 100644 index 0000000..44374f8 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qlocale_test.py @@ -0,0 +1,69 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QLocale''' + +import unittest +import ctypes +import sys + +from PySide2.QtCore import QLocale + +class QLocaleTestToNumber(unittest.TestCase): + def testToNumberInt(self): + obj = QLocale(QLocale.C) + self.assertEqual((37, True), obj.toInt('37')) + + def testToNumberFloat(self): + obj = QLocale(QLocale.C) + self.assertEqual((ctypes.c_float(37.109).value, True), + obj.toFloat('37.109')) + + def testToNumberDouble(self): + obj = QLocale(QLocale.C) + self.assertEqual((ctypes.c_double(37.109).value, True), + obj.toDouble('37.109')) + + def testToNumberShort(self): + obj = QLocale(QLocale.C) + self.assertEqual((ctypes.c_short(37).value, True), + obj.toShort('37')) + + def testToNumberULongLong(self): + obj = QLocale(QLocale.C) + self.assertEqual((ctypes.c_ulonglong(37).value, True), + obj.toULongLong('37')) + + def testToNumberULongLongNegative(self): + obj = QLocale(QLocale.C) + self.assertTrue(not obj.toULongLong('-37')[1]) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qlockfile_test.py b/sources/pyside2/tests/QtCore/qlockfile_test.py new file mode 100644 index 0000000..e943af2 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qlockfile_test.py @@ -0,0 +1,55 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QLockFile''' + +import os, unittest + +from PySide2.QtCore import QDir, QLockFile, QCoreApplication + +class TestQMessageAuthenticationCode (unittest.TestCase): + + def setUp(self): + pid = QCoreApplication.applicationPid() + self._fileName = "{}/pqlockfiletest{}.tmp".format(QDir.tempPath(), pid) + + def tearDown(self): + if (os.path.exists(self._fileName)): + os.remove(self._fileName) + + def test(self): + # Merely exercise the API, no locking against another processes. + lockFile = QLockFile(self._fileName) + self.assertTrue(lockFile.lock()) + self.assertTrue(lockFile.isLocked()) + lockFile.unlock() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qmessageauthenticationcode_test.py b/sources/pyside2/tests/QtCore/qmessageauthenticationcode_test.py new file mode 100644 index 0000000..867862d --- /dev/null +++ b/sources/pyside2/tests/QtCore/qmessageauthenticationcode_test.py @@ -0,0 +1,46 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QMessageAuthenticationCode''' + +import unittest + +from PySide2.QtCore import QCryptographicHash, QMessageAuthenticationCode +import py3kcompat as py3k + +class TestQMessageAuthenticationCode (unittest.TestCase): + def test(self): + code = QMessageAuthenticationCode(QCryptographicHash.Sha1, py3k.b('bla')) + result = code.result() + self.assertTrue(result.size() > 0) + print(result.toHex()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qmetaobject_test.py b/sources/pyside2/tests/QtCore/qmetaobject_test.py new file mode 100644 index 0000000..12b5312 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qmetaobject_test.py @@ -0,0 +1,84 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests for static methos conflicts with class methods''' + +import unittest + +from PySide2.QtCore import * + +class Foo(QFile): + pass + +class DynObject(QObject): + def slot(self): + pass + +class qmetaobject_test(unittest.TestCase): + """ + def test_QMetaObject(self): + qobj = QObject() + qobj_metaobj = qobj.metaObject() + self.assertEqual(qobj_metaobj.className(), "QObject") + + obj = QFile() + m = obj.metaObject() + self.assertEqual(m.className(), "QFile") + self.assertNotEqual(m.methodCount(), qobj_metaobj.methodCount()) + + obj = Foo() + m = obj.metaObject() + self.assertEqual(m.className(), "Foo") + f = QFile() + fm = f.metaObject() + self.assertEqual(m.methodCount(), fm.methodCount()) + """ + + def test_DynamicSlotSignal(self): + o = DynObject() + o2 = QObject() + + o.connect(o2, SIGNAL("bars()"), o.slot) + self.assertTrue(o2.metaObject().indexOfMethod("bars()") > -1) + #self.assertTrue(o.metaObject().indexOfMethod("bar()") == -1) + #self.assertTrue(o.metaObject().indexOfMethod("slot()") > -1) + + #slot_index = o.metaObject().indexOfMethod("slot()") + + #o.connect(o, SIGNAL("foo()"), o2, SIGNAL("bar()")) + #signal_index = o.metaObject().indexOfMethod("foo()"); + + #self.assertTrue(slot_index != signal_index) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qmimedatabase_test.py b/sources/pyside2/tests/QtCore/qmimedatabase_test.py new file mode 100644 index 0000000..1e4e3b5 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qmimedatabase_test.py @@ -0,0 +1,79 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QMimeDatabase''' + +import unittest +import ctypes +import sys + +from PySide2.QtCore import QMimeDatabase, QLocale + +class QMimeDatabaseTest(unittest.TestCase): + def testMimeTypeForName(self): + db = QMimeDatabase() + + s0 = db.mimeTypeForName("application/x-zerosize") + self.assertTrue(s0.isValid()) + self.assertEqual(s0.name(), "application/x-zerosize") + if "en" in QLocale().name(): + self.assertEqual(s0.comment(), "empty document") + + s0Again = db.mimeTypeForName("application/x-zerosize") + self.assertEqual(s0Again.name(), s0.name()) + + s1 = db.mimeTypeForName("text/plain") + self.assertTrue(s1.isValid()) + self.assertEqual(s1.name(), "text/plain") + + krita = db.mimeTypeForName("application/x-krita") + self.assertTrue(krita.isValid()) + + rdf = db.mimeTypeForName("application/rdf+xml") + self.assertTrue(rdf.isValid()) + self.assertEqual(rdf.name(), "application/rdf+xml") + if "en" in QLocale().name(): + self.assertEqual(rdf.comment(), "RDF file") + + bzip2 = db.mimeTypeForName("application/x-bzip2") + self.assertTrue(bzip2.isValid()) + if "en" in QLocale().name(): + self.assertEqual(bzip2.comment(), "Bzip archive") + + defaultMime = db.mimeTypeForName("application/octet-stream") + self.assertTrue(defaultMime.isValid()) + self.assertEqual(defaultMime.name(), "application/octet-stream") + self.assertTrue(defaultMime.isDefault()) + + doesNotExist = db.mimeTypeForName("foobar/x-doesnot-exist") + self.assertTrue(not doesNotExist.isValid()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qmodelindex_internalpointer_test.py b/sources/pyside2/tests/QtCore/qmodelindex_internalpointer_test.py new file mode 100644 index 0000000..875d207 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qmodelindex_internalpointer_test.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test case for QAbstractListModel.createIndex and QModelIndex.internalPointer''' + +import sys +import unittest +from PySide2.QtCore import * + +class MyModel (QAbstractListModel): + pass + +class TestQModelIndexInternalPointer(unittest.TestCase): + ''' Test case for QAbstractListModel.createIndex and QModelIndex.internalPointer''' + + def setUp(self): + #Acquire resources + self.model = MyModel() + + def tearDown(self): + #Release resources + del self.model + + def testInternalPointer(self): + #Test QAbstractListModel.createIndex and + #QModelIndex.internalPointer with regular + #Python objects + idx = self.model.createIndex(0, 0, "Hello") + self.assertEqual("Hello", idx.internalPointer()) + a = [1, 2, 3] + idx = self.model.createIndex(0, 0, a) + self.assertEqual(a, idx.internalPointer()) + + def testReferenceCounting(self): + #Test reference counting when retrieving data with + #QModelIndex.internalPointer + a = [1, 2, 3] + a_refcnt = sys.getrefcount(a) + idx = self.model.createIndex(0, 0, a) + ptr = idx.internalPointer() + self.assertEqual(sys.getrefcount(a), a_refcnt + 1) + + def testIndexForDefaultDataArg(self): + #Test QAbstractListModel.createIndex with a default + #value for data argument + idx = self.model.createIndex(0, 0) + self.assertEqual(None, idx.internalPointer()) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qobject_children_segfault_test.py b/sources/pyside2/tests/QtCore/qobject_children_segfault_test.py new file mode 100644 index 0000000..2b6218a --- /dev/null +++ b/sources/pyside2/tests/QtCore/qobject_children_segfault_test.py @@ -0,0 +1,56 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for parent-child relationship''' + +import unittest + +from PySide2.QtCore import QObject, QCoreApplication + +class ChildrenCoreApplication(unittest.TestCase): + '''Test case for calling QObject.children after creating a QCoreApp''' + + def testQCoreAppChildren(self): + #QObject.children() after creating a QCoreApplication + # Minimal test: + # 1- Create QCoreApp + # 2- Create parent and childrens + # 3- While keeping the children alive, call parent.children() + # 4- Delete parent + app = QCoreApplication([]) + parent = QObject() + children = [QObject(parent) for x in range(25)] + # Uncomment the lines below to make the test pass + # del children + # del child2 + del parent # XXX Segfaults here + self.assertTrue(True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qobject_connect_notify_test.py b/sources/pyside2/tests/QtCore/qobject_connect_notify_test.py new file mode 100644 index 0000000..68f7916 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qobject_connect_notify_test.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test case for QObject::connectNotify()''' + +import unittest +from PySide2.QtCore import * +from helper import UsesQCoreApplication + +def cute_slot(): + pass + +class Obj(QObject): + def __init__(self): + QObject.__init__(self) + self.con_notified = False + self.dis_notified = False + self.signal = "" + + def connectNotify(self, signal): + self.con_notified = True + self.signal = signal + + def disconnectNotify(self, signal): + self.dis_notified = True + + def reset(self): + self.con_notified = False + self.dis_notified = False + +class TestQObjectConnectNotify(UsesQCoreApplication): + '''Test case for QObject::connectNotify''' + def setUp(self): + UsesQCoreApplication.setUp(self) + self.called = False + + def tearDown(self): + UsesQCoreApplication.tearDown(self) + + def testBasic(self): + sender = Obj() + receiver = QObject() + sender.connect(SIGNAL("destroyed()"), receiver, SLOT("deleteLater()")) + self.assertTrue(sender.con_notified) + # When connecting to a regular slot, and not a python callback function, QObject::connect + # will use the non-cloned method signature, so connecting to destroyed() will actually + # connect to destroyed(QObject*). + self.assertEqual(sender.signal.methodSignature(), "destroyed(QObject*)") + sender.disconnect(SIGNAL("destroyed()"), receiver, SLOT("deleteLater()")) + self.assertTrue(sender.dis_notified) + + def testPySignal(self): + sender = Obj() + receiver = QObject() + sender.connect(SIGNAL("foo()"), receiver, SLOT("deleteLater()")) + self.assertTrue(sender.con_notified) + sender.disconnect(SIGNAL("foo()"), receiver, SLOT("deleteLater()")) + self.assertTrue(sender.dis_notified) + + def testPySlots(self): + sender = Obj() + receiver = QObject() + sender.connect(SIGNAL("destroyed()"), cute_slot) + self.assertTrue(sender.con_notified) + sender.disconnect(SIGNAL("destroyed()"), cute_slot) + self.assertTrue(sender.dis_notified) + + def testpyAll(self): + sender = Obj() + receiver = QObject() + sender.connect(SIGNAL("foo()"), cute_slot) + self.assertTrue(sender.con_notified) + sender.disconnect(SIGNAL("foo()"), cute_slot) + self.assertTrue(sender.dis_notified) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qobject_destructor.py b/sources/pyside2/tests/QtCore/qobject_destructor.py new file mode 100644 index 0000000..ef322cb --- /dev/null +++ b/sources/pyside2/tests/QtCore/qobject_destructor.py @@ -0,0 +1,47 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +import unittest +from PySide2 import QtCore + +class MyObject(QtCore.QObject): + def __init__(self, other=None): + QtCore.QObject.__init__(self, None) + self._o = other + +class TestDestructor(unittest.TestCase): + def testReference(self): + o = QtCore.QObject() + m = MyObject(o) + self.assertEqual(sys.getrefcount(o), 3) + del m + self.assertEqual(sys.getrefcount(o), 2) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qobject_event_filter_test.py b/sources/pyside2/tests/QtCore/qobject_event_filter_test.py new file mode 100644 index 0000000..e65757b --- /dev/null +++ b/sources/pyside2/tests/QtCore/qobject_event_filter_test.py @@ -0,0 +1,143 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QObject.eventFilter''' + +import unittest +import weakref +import sys + +from PySide2.QtCore import QObject, QTimerEvent + +from helper import UsesQCoreApplication + +class FilterObject(QObject): + '''Filter object for the basic test''' + def __init__(self, obj=None, event_type=None, *args): + #Creates a new filter object + QObject.__init__(self, *args) + self.obj = obj + self.event_type = event_type + self.events_handled = 0 + self.events_bypassed = 0 + + def setTargetObject(self, obj): + #Sets the object that will be filtered + self.obj = obj + + def eventFilter(self, obj, event): + '''Just checks if is the correct object and event type + incrementing counter until reaching the limit. After that it + stops filtering the events for the object.''' + if (self.obj == obj): + if isinstance(event, self.event_type) and self.events_handled < 5: + self.events_handled += 1 + return True + else: + self.events_bypassed += 1 + return False + else: + return QObject.eventFilter(self, obj, event) + +class FilteredObject(QObject): + '''Class that will be filtered. Quits the app after 5 timer events''' + def __init__(self, app, *args): + QObject.__init__(self, *args) + self.app = app + self.times_called = 0 + + def timerEvent(self, evt): + #Overriden method + self.times_called += 1 + + if self.times_called == 5: + self.app.quit() + +class TestQObjectEventFilterPython(UsesQCoreApplication): + '''QObject.eventFilter - Reimplemented in python + Filters 5 TimerEvents and then bypasses the other events to the + timerEvent method. After 5 runs, the timerEvent method will ask + the core application to exit''' + def setUp(self): + #Acquire resources + UsesQCoreApplication.setUp(self) + self.obj_filter = FilterObject(event_type=QTimerEvent) + def tearDown(self): + #Release resources + del self.obj_filter + UsesQCoreApplication.tearDown(self) + + def testEventFilter(self): + #QObject.eventFilter reimplemented in python + filtered = FilteredObject(self.app) + filtered.installEventFilter(self.obj_filter) + self.obj_filter.setTargetObject(filtered) + + filtered.startTimer(0) + + self.app.exec_() + + self.assertEqual(filtered.times_called, 5) + self.assertEqual(self.obj_filter.events_handled, 5) + + def testInstallEventFilterRefCountAfterDelete(self): + '''Bug 910 - installEventFilter() increments reference count on target object + http://bugs.pyside.org/show_bug.cgi?id=910''' + obj = QObject() + filt = QObject() + + self.assertEqual(sys.getrefcount(obj), 2) + self.assertEqual(sys.getrefcount(filt), 2) + obj.installEventFilter(filt) + self.assertEqual(sys.getrefcount(obj), 2) + self.assertEqual(sys.getrefcount(filt), 2) + + wref = weakref.ref(obj) + del obj + self.assertEqual(wref(), None) + + def testInstallEventFilterRefCountAfterRemove(self): + # Bug 910 + obj = QObject() + filt = QObject() + + self.assertEqual(sys.getrefcount(obj), 2) + self.assertEqual(sys.getrefcount(filt), 2) + obj.installEventFilter(filt) + self.assertEqual(sys.getrefcount(obj), 2) + self.assertEqual(sys.getrefcount(filt), 2) + obj.removeEventFilter(filt) + self.assertEqual(sys.getrefcount(obj), 2) + self.assertEqual(sys.getrefcount(filt), 2) + + wref = weakref.ref(obj) + del obj + self.assertEqual(wref(), None) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qobject_inherits_test.py b/sources/pyside2/tests/QtCore/qobject_inherits_test.py new file mode 100644 index 0000000..3a87da3 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qobject_inherits_test.py @@ -0,0 +1,126 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QObject methods''' + +import unittest +import sys + +from PySide2.QtCore import QObject, QTimer +from PySide2.QtWidgets import QApplication, QLabel, QVBoxLayout + +is_alive = None + +class InheritsCase(unittest.TestCase): + '''Test case for QObject.inherits''' + + def testCppInheritance(self): + #QObject.inherits() for c++ classes + #An class inherits itself + self.assertTrue(QObject().inherits('QObject')) + + def testPythonInheritance(self): + #QObject.inherits() for python classes + + class Dummy(QObject): + #Dummy class + pass + + self.assertTrue(Dummy().inherits('QObject')) + self.assertTrue(Dummy().inherits('Dummy')) + self.assertTrue(not Dummy().inherits('FooBar')) + + def testPythonMultiInheritance(self): + #QObject.inherits() for multiple inheritance + # QObject.inherits(classname) should fail if classname isn't a + # QObject subclass + + class Parent(object): + #Dummy parent + pass + class Dummy(QObject, Parent): + #Dummy class + pass + + self.assertTrue(Dummy().inherits('QObject')) + self.assertTrue(not Dummy().inherits('Parent')) + + def testSetAttributeBeforeCallingInitOnQObjectDerived(self): + '''Test for bug #428.''' + class DerivedObject(QObject): + def __init__(self): + self.member = 'member' + QObject.__init__(self) + obj0 = DerivedObject() + # The second instantiation of DerivedObject will generate an exception + # that will not come to surface immediately. + obj1 = DerivedObject() + # The mere calling of the object method causes + # the exception to "reach the surface". + obj1.objectName() + + def testMultipleInheritance(self): + def declareClass(): + class Foo(object, QObject): + pass + + self.assertRaises(TypeError, declareClass) + + # PYSIDE-11: + # The takeOwnership() method was relying that the SbkObject + # had a converter, which it's not the case when multiple + # inheritance is used. + # The deleteLater() method uses the takeOwnership() to give + # control of the object to C++, so it can be remove once + # the destructor is called. + # The solution was to add a default case when the object + # is null under the pythonTypeIsValueType() method in shiboken. + def testDeleteMultipleInheritance(self): + app = QApplication(sys.argv) + class DerivedLabel(QLabel, QObject): + def __del__(self): + global is_alive + is_alive = False + + global is_alive + child = DerivedLabel('Hello') + is_alive = True + parent = QVBoxLayout() + parent.addWidget(child) + parent.removeWidget(child) + child.deleteLater() + self.assertTrue(is_alive) + del child + self.assertTrue(is_alive) + QTimer.singleShot(100, app.quit) + app.exec_() + self.assertFalse(is_alive) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qobject_objectproperty_test.py b/sources/pyside2/tests/QtCore/qobject_objectproperty_test.py new file mode 100644 index 0000000..bade8fe --- /dev/null +++ b/sources/pyside2/tests/QtCore/qobject_objectproperty_test.py @@ -0,0 +1,58 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for the bug #378 +http://bugs.openbossa.org/show_bug.cgi?id=378 +''' + +import unittest +from PySide2.QtCore import QObject + +class ExtQObject(QObject): + def __init__(self): + # "foobar" will become a object attribute that will not be + # listed on the among the type attributes. Thus for bug + # condition be correctly triggered the "foobar" attribute + # must not previously exist in the parent class. + self.foobar = None + # The parent __init__ method must be called after the + # definition of "self.foobar". + QObject.__init__(self) + +class TestBug378(unittest.TestCase): + '''Test case for the bug #378''' + + def testBug378(self): + obj = ExtQObject() + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qobject_parent_test.py b/sources/pyside2/tests/QtCore/qobject_parent_test.py new file mode 100644 index 0000000..85b7091 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qobject_parent_test.py @@ -0,0 +1,287 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for parent-child relationship''' + +import unittest +from sys import getrefcount + +from PySide2.QtCore import * + +class ParentRefCountCase(unittest.TestCase): + '''Test case for the refcount changes of setParent''' + + def setUp(self): + #Acquire resources + self.parent = QObject() + self.child = QObject() + + def tearDown(self): + #Release resources + del self.child + del self.parent + + def testSetParent(self): + #QObject.setParent() refcount changes + self.assertEqual(getrefcount(self.child), 2) + self.child.setParent(self.parent) + self.assertEqual(getrefcount(self.child), 3) + + def testSetParentTwice(self): + self.assertEqual(getrefcount(self.child), 2) + self.child.setParent(self.parent) + self.assertEqual(getrefcount(self.child), 3) + self.child.setParent(self.parent) + self.assertEqual(getrefcount(self.child), 3) + + def testConstructor(self): + #QObject(QObject) refcount changes + child = QObject(self.parent) + self.assertEqual(getrefcount(child), 3) + +class ParentCase(unittest.TestCase): + '''Small collection of tests related to parent-child relationship''' + + def testSetParent(self): + #QObject.setParent() + parent = QObject() + child = QObject() + child.setParent(parent) + + self.assertEqual(parent, child.parent()) + + def testParentConstructor(self): + #QObject(parent) + parent = QObject() + child = QObject(parent) + + self.assertEqual(parent, child.parent()) + + orig_repr = repr(child) + del child + self.assertEqual(orig_repr, repr(parent.children()[0])) + + def testChildren(self): + #QObject.children() + parent = QObject() + children = [QObject(parent) for x in range(25)] + + self.assertEqual(parent.children(), children) + + def testFindChild(self): + #QObject.findChild() with all QObject + parent = QObject() + name = 'object%d' + children = [QObject(parent) for i in range(20)] + + for i, child in enumerate(children): + child.setObjectName(name % i) + + for i, child in enumerate(children): + self.assertEqual(child, parent.findChild(QObject, name % i)) + + def testFindChildWithoutName(self): + parent = QObject() + name = 'object%d' + children = [QObject(parent) for i in range(20)] + + for i, child in enumerate(children): + child.setObjectName(name % i) + + child = parent.findChild(QObject) + self.assertTrue(isinstance(child, QObject)) + + def testFindChildren(self): + #QObject.findChildren() with all QObject + parent = QObject() + target_name = 'foo' + children = [QTimer(parent) for i in range(20)] + children.extend([QObject(parent) for i in range(20)]) + + for i, child in enumerate(children): + if i % 5 == 0: + child.setObjectName(target_name) + else: + child.setObjectName(str(i)) + + # Emulates findChildren with the intended outcome + target_children = [x for x in children if x.objectName() == target_name] + test_children = parent.findChildren(QObject, target_name) + self.assertEqual(target_children, test_children) + + # test findChildren default value + res = parent.findChildren(QTimer) + self.assertEqual(len(res), 20) + + # test findChildre with a regex + res = parent.findChildren(QObject, QRegExp("^fo+")) + self.assertEqual(res, test_children) + + + def testParentEquality(self): + #QObject.parent() == parent + parent = QObject() + child = QObject(parent) + self.assertEqual(parent, child.parent()) + + +class TestParentOwnership(unittest.TestCase): + '''Test case for Parent/Child object ownership''' + + def testParentDestructor(self): + parent = QObject() + self.assertEqual(getrefcount(parent), 2) + + child = QObject(parent) + self.assertEqual(getrefcount(child), 3) + self.assertEqual(getrefcount(parent), 2) + + del parent + self.assertEqual(getrefcount(child), 2) + + # this will fail because parent deleted child cpp object + self.assertRaises(RuntimeError, lambda :child.objectName()) + + # test parent with multiples children + def testMultipleChildren(self): + o = QObject() + self.assertEqual(getrefcount(o), 2) + + c = QObject(o) + self.assertEqual(getrefcount(c), 3) + self.assertEqual(getrefcount(o), 2) + + c2 = QObject(o) + self.assertEqual(getrefcount(o), 2) + self.assertEqual(getrefcount(c), 3) + self.assertEqual(getrefcount(c2), 3) + + del o + self.assertEqual(getrefcount(c), 2) + self.assertEqual(getrefcount(c2), 2) + + # this will fail because parent deleted child cpp object + self.assertRaises(RuntimeError, lambda :c.objectName()) + self.assertRaises(RuntimeError, lambda :c2.objectName()) + + # test recursive parent + def testRecursiveParent(self): + o = QObject() + self.assertEqual(getrefcount(o), 2) + + c = QObject(o) + self.assertEqual(getrefcount(c), 3) + self.assertEqual(getrefcount(o), 2) + + c2 = QObject(c) + self.assertEqual(getrefcount(o), 2) + self.assertEqual(getrefcount(c), 3) + self.assertEqual(getrefcount(c2), 3) + + del o + self.assertEqual(getrefcount(c), 2) + self.assertEqual(getrefcount(c2), 2) + + # this will fail because parent deleted child cpp object + self.assertRaises(RuntimeError, lambda :c.objectName()) + self.assertRaises(RuntimeError, lambda :c2.objectName()) + + # test parent transfer + def testParentTransfer(self): + o = QObject() + self.assertEqual(getrefcount(o), 2) + + c = QObject() + self.assertEqual(getrefcount(c), 2) + + c.setParent(o) + self.assertEqual(getrefcount(c), 3) + + c.setParent(None) + self.assertEqual(getrefcount(c), 2) + + del c + del o + + +class ExtQObject(QObject): + def __init__(self): + QObject.__init__(self) + +class ReparentingTest(unittest.TestCase): + '''Test cases for reparenting''' + + def testParentedQObjectIdentity(self): + object_list = [] + parent = QObject() + for i in range(3): + obj = QObject() + object_list.append(obj) + obj.setParent(parent) + for child in parent.children(): + self.assertTrue(child in object_list) + + def testParentedExtQObjectType(self): + object_list = [] + parent = QObject() + for i in range(3): + obj = ExtQObject() + object_list.append(obj) + obj.setParent(parent) + for orig, child in zip(object_list, parent.children()): + self.assertEqual(type(orig), type(child)) + + def testReparentedQObjectIdentity(self): + object_list = [] + old_parent = QObject() + new_parent = QObject() + for i in range(3): + obj = QObject() + object_list.append(obj) + obj.setParent(old_parent) + for obj in object_list: + obj.setParent(new_parent) + for child in new_parent.children(): + self.assertTrue(child in object_list) + + def testReparentedExtQObjectType(self): + object_list = [] + old_parent = QObject() + new_parent = QObject() + for i in range(3): + obj = ExtQObject() + object_list.append(obj) + obj.setParent(old_parent) + for obj in object_list: + obj.setParent(new_parent) + for orig, child in zip(object_list, new_parent.children()): + self.assertEqual(type(orig), type(child)) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qobject_property_test.py b/sources/pyside2/tests/QtCore/qobject_property_test.py new file mode 100644 index 0000000..80d652a --- /dev/null +++ b/sources/pyside2/tests/QtCore/qobject_property_test.py @@ -0,0 +1,69 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QObject property and setProperty''' + +import unittest + +from PySide2.QtCore import QObject, Property, Signal + +class MyObjectWithNotifyProperty(QObject): + def __init__(self, parent=None): + QObject.__init__(self, parent) + self.p = 0 + + def readP(self): + return self.p + + def writeP(self, v): + self.p = v + self.notifyP.emit() + + notifyP = Signal() + myProperty = Property(int, readP, fset=writeP, notify=notifyP) + +class PropertyWithNotify(unittest.TestCase): + def called(self): + self.called_ = True + + def testNotify(self): + self.called_ = False + obj = MyObjectWithNotifyProperty() + obj.notifyP.connect(self.called) + obj.myProperty = 10 + self.assertTrue(self.called_) + + def testHasProperty(self): + o = MyObjectWithNotifyProperty() + o.setProperty("myProperty", 10) + self.assertEqual(o.myProperty, 10) + self.assertEqual(o.property("myProperty"), 10) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qobject_protected_methods_test.py b/sources/pyside2/tests/QtCore/qobject_protected_methods_test.py new file mode 100644 index 0000000..26376e4 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qobject_protected_methods_test.py @@ -0,0 +1,67 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QObject protected methods''' + +import unittest + +from PySide2.QtCore import QObject, QThread, SIGNAL + +class Dummy(QObject): + '''Dummy class''' + pass + +class QObjectReceivers(unittest.TestCase): + '''Test case for QObject.receivers()''' + + def cb(self, *args): + #Dummy callback + pass + + def testQObjectReceiversExtern(self): + #QObject.receivers() - Protected method external access + + obj = Dummy() + self.assertEqual(obj.receivers(SIGNAL("destroyed()")), 0) + + QObject.connect(obj, SIGNAL("destroyed()"), self.cb) + self.assertEqual(obj.receivers(SIGNAL("destroyed()")), 1) + + def testQThreadReceiversExtern(self): + #QThread.receivers() - Inherited protected method + + obj = QThread() + self.assertEqual(obj.receivers(SIGNAL('destroyed()')), 0) + QObject.connect(obj, SIGNAL("destroyed()"), self.cb) + self.assertEqual(obj.receivers(SIGNAL("destroyed()")), 1) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qobject_test.py b/sources/pyside2/tests/QtCore/qobject_test.py new file mode 100644 index 0000000..2dd767c --- /dev/null +++ b/sources/pyside2/tests/QtCore/qobject_test.py @@ -0,0 +1,83 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QObject methods''' + +import unittest +import py3kcompat as py3k + +from PySide2.QtCore import QObject, Signal, Qt + +class Obj(QObject): + signal = Signal() + def empty(self): + pass + +class ObjectNameCase(unittest.TestCase): + '''Tests related to QObject object name''' + + def testSimple(self): + #QObject.objectName(string) + name = 'object1' + obj = QObject() + obj.setObjectName(name) + + self.assertEqual(name, obj.objectName()) + + def testEmpty(self): + #QObject.objectName('') + name = '' + obj = QObject() + obj.setObjectName(name) + + self.assertEqual(name, obj.objectName()) + + def testDefault(self): + #QObject.objectName() default + obj = QObject() + self.assertEqual('', obj.objectName()) + + def testUnicode(self): + name = py3k.unicode_('não') + #FIXME Strange error on upstream when using equal(name, obj) + obj = QObject() + obj.setObjectName(name) + self.assertEqual(obj.objectName(), name) + + def testUniqueConnection(self): + obj = Obj() + # On first connect, UniqueConnection returns True, and on the second + # it must return False, and not a RuntimeError (PYSIDE-34) + self.assertTrue(obj.signal.connect(obj.empty, Qt.UniqueConnection)) + self.assertFalse(obj.signal.connect(obj.empty, Qt.UniqueConnection)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qobject_timer_event_test.py b/sources/pyside2/tests/QtCore/qobject_timer_event_test.py new file mode 100644 index 0000000..3950123 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qobject_timer_event_test.py @@ -0,0 +1,73 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for QObject.timerEvent overloading''' + +import unittest +from time import sleep +from PySide2.QtCore import QObject, QCoreApplication + +from helper import UsesQCoreApplication + +class Dummy(QObject): + + def __init__(self, app): + super(Dummy, self).__init__() + self.times_called = 0 + self.app = app + + def timerEvent(self, event): + QObject.timerEvent(self, event) + event.accept() + self.times_called += 1 + + if self.times_called == 5: + self.app.exit(0) + +class QObjectTimerEvent(UsesQCoreApplication): + + def setUp(self): + #Acquire resources + super(QObjectTimerEvent, self).setUp() + + def tearDown(self): + #Release resources + super(QObjectTimerEvent, self).tearDown() + + def testTimerEvent(self): + #QObject.timerEvent overloading + obj = Dummy(self.app) + timer_id = obj.startTimer(200) + self.app.exec_() + obj.killTimer(timer_id) + self.assertEqual(obj.times_called, 5) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qobject_tr_as_instance_test.py b/sources/pyside2/tests/QtCore/qobject_tr_as_instance_test.py new file mode 100644 index 0000000..420e391 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qobject_tr_as_instance_test.py @@ -0,0 +1,67 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QObject's tr static methods.''' + +import os +import unittest +from PySide2.QtCore import QObject + +#from helper import UsesQCoreApplication + +class QObjectTrTest(unittest.TestCase): + '''Test case to check if QObject tr static methods could be treated as instance methods.''' + + def setUp(self): + self.obj = QObject() + + def tearDown(self): + del self.obj + + def testTrCommonCase(self): + #Test common case for QObject.tr + invar1 = 'test1' + outvar1 = self.obj.tr(invar1) + invar2 = 'test2' + outvar2 = self.obj.tr(invar2, 'test comment') + self.assertEqual((invar1, invar2), (outvar1, outvar2)) + + def testTrAsInstanceMethod(self): + #Test QObject.tr as instance + invar1 = 'test1' + outvar1 = QObject.tr(self.obj, invar1) + invar2 = 'test2' + outvar2 = QObject.tr(self.obj, invar2, 'test comment') + self.assertEqual((invar1, invar2), (outvar1, outvar2)) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qoperatingsystemversion_test.py b/sources/pyside2/tests/QtCore/qoperatingsystemversion_test.py new file mode 100644 index 0000000..82c571d --- /dev/null +++ b/sources/pyside2/tests/QtCore/qoperatingsystemversion_test.py @@ -0,0 +1,40 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QOperatingSystemVersion + +class TestQOperatingSystemVersion(unittest.TestCase): + def test(self): + ov = QOperatingSystemVersion.current() + name = "{} v{}.{}.{}".format(ov.name(), ov.majorVersion(), + ov.minorVersion(), ov.microVersion()) + print(name) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qpoint_test.py b/sources/pyside2/tests/QtCore/qpoint_test.py new file mode 100644 index 0000000..e776627 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qpoint_test.py @@ -0,0 +1,48 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QPoint and QPointF''' + +import unittest + +from PySide2.QtCore import QPoint, QPointF + + +class QPointTest(unittest.TestCase): + + def testQPointCtor(self): + point = QPoint(QPoint(10,20)) + +class QPointFTest(unittest.TestCase): + + def testQPointFCtor(self): + pointf = QPointF(QPoint(10,20)) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qprocess_test.py b/sources/pyside2/tests/QtCore/qprocess_test.py new file mode 100644 index 0000000..23d44a2 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qprocess_test.py @@ -0,0 +1,58 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QProcess''' + +import unittest +import os +import py3kcompat as py3k + +from PySide2.QtCore import * + +class TestQProcess (unittest.TestCase): + def testStartDetached(self): + value, pid = QProcess.startDetached("dir", [], os.getcwd()) + self.assertTrue(isinstance(value, bool)) + self.assertTrue(isinstance(pid, py3k.long)) + + def testPid(self): + p = QProcess() + p.start("dir") + p.waitForStarted() + pid = p.pid() + # We can't test the pid method result because it returns 0 when the + # process isn't running + if p.state() == QProcess.Running: + self.assertNotEqual(pid, 0) + else: + print("PROCESS ALREADY DEAD :-/") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qproperty_decorator.py b/sources/pyside2/tests/QtCore/qproperty_decorator.py new file mode 100644 index 0000000..c6f0d3c --- /dev/null +++ b/sources/pyside2/tests/QtCore/qproperty_decorator.py @@ -0,0 +1,63 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import weakref +import unittest + +from PySide2.QtCore import QObject, Property + +class MyObject(QObject): + def __init__(self): + QObject.__init__(self) + self._value = None + + @Property(int) + def value(self): + return self._value + + @value.setter + def valueSet(self, value): + self._value = value + + +class PropertyTest(unittest.TestCase): + def destroyCB(self, obj): + self._obDestroyed = True + + def testDecorator(self): + self._obDestroyed = False + o = MyObject() + weak = weakref.ref(o, self.destroyCB) + o.value = 10 + self.assertEqual(o._value, 10) + self.assertEqual(o.value, 10) + del o + self.assertTrue(self._obDestroyed) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qrandomgenerator_test.py b/sources/pyside2/tests/QtCore/qrandomgenerator_test.py new file mode 100644 index 0000000..7d80510 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qrandomgenerator_test.py @@ -0,0 +1,49 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of PySide2. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QRandomGenerator, QRandomGenerator64 + +class QRandomGeneratorTest(unittest.TestCase): + '''Test case for QRandomGenerator''' + + def testGenerator(self): + self.assertTrue(QRandomGenerator.system()) + self.assertTrue(QRandomGenerator.global_()) + generator = QRandomGenerator() + r = generator.bounded(10, 20) + self.assertTrue(r >= 10) + self.assertTrue(r <= 20) + + def testGenerator64(self): + generator = QRandomGenerator64() + r = generator.generate() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qrect_test.py b/sources/pyside2/tests/QtCore/qrect_test.py new file mode 100644 index 0000000..bcf9f95 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qrect_test.py @@ -0,0 +1,141 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QRect''' + +import unittest + +from PySide2.QtCore import QPoint, QRect, QRectF + +class RectConstructor(unittest.TestCase): + + def testDefault(self): + #QRect() + obj = QRect() + + self.assertTrue(obj.isNull()) + + def testConstructorQPoint(self): + topLeft = QPoint(3, 0) + bottomRight = QPoint(0, 3) + + rect1 = QRect(topLeft, bottomRight) + rect2 = QRect(topLeft, bottomRight) + + self.assertEqual(rect1, rect2) + +class RectOperator(unittest.TestCase): + '''Test case for QRect operators''' + + def testEqual(self): + '''QRect == QRect + Note: operator == must be working as it's the main check + for correctness''' + rect1 = QRect() + rect2 = QRect() + self.assertEqual(rect1, rect2) + + rect1 = QRect(0, 4, 100, 300) + rect2 = QRect(0, 4, 100, 300) + self.assertEqual(rect1, rect2) + + def testNullRectIntersection(self): + #QRect & QRect for null rects + rect1 = QRect() + rect2 = QRect() + rect3 = rect1 & rect2 + self.assertEqual(rect3, rect1) + self.assertEqual(rect3, rect2) + + def testNoIntersect(self): + '''QRect & QRect for non-intersecting QRects + Non-intersecting QRects return a 'null' QRect for operator &''' + rect1 = QRect(10, 10, 5, 5) + rect2 = QRect(20, 20, 5, 5) + rect3 = rect1 & rect2 + self.assertEqual(rect3, QRect()) + + def testIntersectPartial(self): + #QRect & QRect for partial intersections + rect1 = QRect(10, 10, 10, 10) + rect2 = QRect(15, 15, 10, 10) + rect3 = rect1 & rect2 + self.assertEqual(rect3, QRect(15, 15, 5, 5)) + + def testIntersetEnclosed(self): + #QRect & QRect for a qrect inside another + rect1 = QRect(10, 10, 20, 20) + rect2 = QRect(15, 15, 5, 5) + rect3 = rect1 & rect2 + self.assertEqual(rect3, rect2) + + def testNullRectIntersectBounding(self): + #QRect | QRect for null rects + rect1 = QRect() + rect2 = QRect() + rect3 = rect1 & rect2 + self.assertEqual(rect3, rect1) + self.assertEqual(rect3, rect2) + + def testNoIntersectBounding(self): + '''QRect | QRect for non-intersecting QRects + Non-intersecting QRects return a greater QRect for operator |''' + rect1 = QRect(10, 10, 5, 5) + rect2 = QRect(20, 20, 5, 5) + rect3 = rect1 | rect2 + self.assertEqual(rect3, QRect(10, 10, 15, 15)) + + def testBoundingPartialIntersection(self): + #QRect | QRect for partial intersections + rect1 = QRect(10, 10, 10, 10) + rect2 = QRect(15, 15, 10, 10) + rect3 = rect1 | rect2 + self.assertEqual(rect3, QRect(10, 10, 15, 15)) + + def testBoundingEnclosed(self): + #QRect | QRect for a qrect inside another + rect1 = QRect(10, 10, 20, 20) + rect2 = QRect(15, 15, 5, 5) + rect3 = rect1 | rect2 + self.assertEqual(rect3, rect1) + + def testGetCoordsAndRect(self): + rect1 = QRect(1, 2, 3, 4) + self.assertEqual(rect1.getRect(), (1, 2, 3, 4)) + self.assertEqual(rect1.getCoords(), (1, 2, 3, 5)) + + rect1 = QRectF(1, 2, 3, 4) + self.assertEqual(rect1.getRect(), (1, 2, 3, 4)) + self.assertEqual(rect1.getCoords(), (1, 2, 4, 6)) + + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qregexp_test.py b/sources/pyside2/tests/QtCore/qregexp_test.py new file mode 100644 index 0000000..36d3b07 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qregexp_test.py @@ -0,0 +1,48 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QRegExp + +class QRegExpTest(unittest.TestCase): + + def testReplace1(self): + re = QRegExp('a[mn]') + string = re.replace('Banana', 'ox') + self.assertEqual(string, 'Boxoxa') + + def testReplace2(self): + re = QRegExp('([^<]*)') + string = re.replace('A bon mot.', '\\emph{\\1}') + self.assertEqual(string, 'A \\emph{bon mot}.') + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qregularexpression_test.py b/sources/pyside2/tests/QtCore/qregularexpression_test.py new file mode 100644 index 0000000..cef3ec6 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qregularexpression_test.py @@ -0,0 +1,56 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QRegularExpression''' + +import unittest +from PySide2.QtCore import QRegularExpression, QRegularExpressionMatch, QRegularExpressionMatchIterator + +class QRegularExpressionTest(unittest.TestCase): + + def testMatch(self): + re = QRegularExpression('^.*(word2).*$') + self.assertTrue(re.isValid()) + match = re.match('word1 word2 word3') + self.assertTrue(match.isValid()) + self.assertEqual(match.captured(1), 'word2') + + def testMatchIterator(self): + re = QRegularExpression('(\w+)') + self.assertTrue(re.isValid()) + count = 0 + it = re.globalMatch('word1 word2 word3'); + while it.hasNext(): + it.next() + count = count + 1 + self.assertEqual(count, 3) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qresource_test.py b/sources/pyside2/tests/QtCore/qresource_test.py new file mode 100644 index 0000000..49c4a10 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qresource_test.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QResource usage''' + +import unittest +from helper import adjust_filename +from PySide2.QtCore import QFile, QIODevice +import resources_mc + +class ResourcesUsage(unittest.TestCase): + '''Test case for resources usage''' + + def testPhrase(self): + #Test loading of quote.txt resource + f = open(adjust_filename('quoteEnUS.txt', __file__), "r") + orig = f.read() + f.close() + + f = QFile(':/quote.txt') + f.open(QIODevice.ReadOnly) #|QIODevice.Text) + print("Error:", f.errorString()) + copy = f.readAll() + f.close() + self.assertEqual(orig, copy) + + def testImage(self): + #Test loading of sample.png resource + f = open(adjust_filename('sample.png', __file__), "rb") + orig = f.read() + f.close() + + f = QFile(':/sample.png') + f.open(QIODevice.ReadOnly) + copy = f.readAll() + f.close() + self.assertEqual(len(orig), len(copy)) + self.assertEqual(orig, copy) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qsize_test.py b/sources/pyside2/tests/QtCore/qsize_test.py new file mode 100644 index 0000000..1bc7779 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qsize_test.py @@ -0,0 +1,55 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QSize''' + +import unittest + +from PySide2.QtCore import QSize + +class QSizeOperator(unittest.TestCase): + def testOperatorMultiply(self): + #QSize operator * float + # bug 131 + a = QSize(1, 1) + x = a * 3.4 + self.assertEqual(QSize(3, 3), x) + + def testOperatorRevertedMultiply(self): + #QSize operator * float, reverted + # bug 132 + a = QSize(1, 1) + x = 3.4 * a + self.assertEqual(QSize(3, 3), x) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qslot_object_test.py b/sources/pyside2/tests/QtCore/qslot_object_test.py new file mode 100644 index 0000000..cfb9e78 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qslot_object_test.py @@ -0,0 +1,76 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2 import QtCore + +global qApp + +class objTest(QtCore.QObject): + + def __init__(self, parent=None): + QtCore.QObject.__init__(self, parent) + + self.ok = False + + def slot(self): + global qApp + + self.ok = True + qApp.quit() + + + +class slotTest(unittest.TestCase): + def quit_app(self): + global qApp + + qApp.quit() + + def testBasic(self): + global qApp + timer = QtCore.QTimer() + timer.setInterval(100) + + my_obj = objTest() + my_slot = QtCore.SLOT("slot()") + QtCore.QObject.connect(timer, QtCore.SIGNAL("timeout()"), my_obj, my_slot) + timer.start(100) + + QtCore.QTimer.singleShot(1000, self.quit_app) + qApp.exec_() + + self.assertTrue(my_obj.ok) + + +if __name__ == '__main__': + global qApp + qApp = QtCore.QCoreApplication([]) + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qsocketnotifier_test.py b/sources/pyside2/tests/QtCore/qsocketnotifier_test.py new file mode 100644 index 0000000..0a9b78a --- /dev/null +++ b/sources/pyside2/tests/QtCore/qsocketnotifier_test.py @@ -0,0 +1,59 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QUuid''' + +import unittest + +from PySide2.QtWidgets import QApplication +from PySide2.QtCore import QSocketNotifier +import socket +import sys +import os + +class QSocketNotifierTest(unittest.TestCase): + def testClass(self): + app = QApplication([]) + # socketpair is not available on Windows + if os.name != "nt": + w_sock, r_sock = socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM) + + self.assertIsInstance(r_sock.fileno(), int) + + notifier = QSocketNotifier(r_sock.fileno(), QSocketNotifier.Read) + + self.assertIsNotNone(notifier) + + w_sock.close() + r_sock.close() + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qsrand_test.py b/sources/pyside2/tests/QtCore/qsrand_test.py new file mode 100644 index 0000000..459bfeb --- /dev/null +++ b/sources/pyside2/tests/QtCore/qsrand_test.py @@ -0,0 +1,44 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import gc +import unittest + +from PySide2.QtCore import qsrand + +class OverflowExceptionCollect(unittest.TestCase): + '''Test case for OverflowError exception during garbage collection. See bug #147''' + + def testOverflow(self): + # NOTE: PyQt4 raises TypeError, but boost.python raises OverflowError + self.assertRaises(OverflowError, qsrand, 42415335332353253) + # should not abort if bug #147 is fixed + gc.collect() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qstandardpaths_test.py b/sources/pyside2/tests/QtCore/qstandardpaths_test.py new file mode 100644 index 0000000..957aa4e --- /dev/null +++ b/sources/pyside2/tests/QtCore/qstandardpaths_test.py @@ -0,0 +1,50 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QStandardPaths''' + +import unittest +import ctypes +import sys + +from PySide2.QtCore import QStandardPaths + +class QStandardPathsTest(unittest.TestCase): + def testTestModeEnabled(self): + print("QStandardPaths.isTestModeEnabled:", QStandardPaths.isTestModeEnabled()) + sp = True + QStandardPaths.setTestModeEnabled(sp) + self.assertEqual(QStandardPaths.isTestModeEnabled(), sp) + sp = False + QStandardPaths.setTestModeEnabled(sp) + self.assertEqual(QStandardPaths.isTestModeEnabled(), sp) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qstate_test.py b/sources/pyside2/tests/QtCore/qstate_test.py new file mode 100644 index 0000000..8627f4b --- /dev/null +++ b/sources/pyside2/tests/QtCore/qstate_test.py @@ -0,0 +1,64 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import * + + +class QStateTest(unittest.TestCase): + def testBasic(self): + app = QCoreApplication([]) + + o = QObject() + o.setProperty("text", "INdT") + + machine = QStateMachine() + s1 = QState() + s1.assignProperty(o, "text", "Rocks"); + + s2 = QFinalState() + t = s1.addTransition(o, SIGNAL("change()"), s2); + self.assertTrue(isinstance(t, QSignalTransition)) + + machine.addState(s1) + machine.addState(s2) + machine.setInitialState(s1) + machine.start() + + o.emit(SIGNAL("change()")) + + QTimer.singleShot(100, app.quit) + app.exec_() + + txt = o.property("text") + self.assertTrue(txt, "Rocks") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qstatemachine_test.py b/sources/pyside2/tests/QtCore/qstatemachine_test.py new file mode 100644 index 0000000..34e107e --- /dev/null +++ b/sources/pyside2/tests/QtCore/qstatemachine_test.py @@ -0,0 +1,97 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QObject, QState, QFinalState, SIGNAL +from PySide2.QtCore import QTimer, QStateMachine +from PySide2.QtCore import QParallelAnimationGroup + +from helper import UsesQCoreApplication + + +class StateMachineTest(unittest.TestCase): + '''Check presence of State Machine classes''' + + def testBasic(self): + '''State machine classes''' + import PySide2.QtCore + PySide2.QtCore.QSignalTransition + PySide2.QtCore.QPropertyAnimation + + + +class QStateMachineTest(UsesQCoreApplication): + + def cb(self, *args): + self.assertEqual(self.machine.defaultAnimations(), [self.anim]) + + def testBasic(self): + self.machine = QStateMachine() + s1 = QState() + s2 = QState() + s3 = QFinalState() + + QObject.connect(self.machine, SIGNAL("started()"), self.cb) + + self.anim = QParallelAnimationGroup() + + self.machine.addState(s1) + self.machine.addState(s2) + self.machine.addState(s3) + self.machine.setInitialState(s1) + self.machine.addDefaultAnimation(self.anim) + self.machine.start() + + QTimer.singleShot(100, self.app.quit) + self.app.exec_() + + +class QSetConverterTest(UsesQCoreApplication): + '''Test converter of QSet toPython using QStateAnimation.configuration''' + + def testBasic(self): + '''QStateMachine.configuration converting QSet to python set''' + machine = QStateMachine() + s1 = QState() + machine.addState(s1) + machine.setInitialState(s1) + machine.start() + + QTimer.singleShot(100, self.app.quit) + self.app.exec_() + + configuration = machine.configuration() + + self.assertTrue(isinstance(configuration, set)) + self.assertTrue(s1 in configuration) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qstorageinfo_test.py b/sources/pyside2/tests/QtCore/qstorageinfo_test.py new file mode 100644 index 0000000..783b595 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qstorageinfo_test.py @@ -0,0 +1,43 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QStorageInfo''' + +import unittest + +from PySide2.QtCore import QStorageInfo + +class QandardPathsTest(unittest.TestCase): + def testQStorageInfo(self): + for v in QStorageInfo.mountedVolumes(): + print(v.name(), v.rootPath(), v.device()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qstring_test.py b/sources/pyside2/tests/QtCore/qstring_test.py new file mode 100644 index 0000000..e3ac812 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qstring_test.py @@ -0,0 +1,51 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QString''' + +import unittest +import py3kcompat as py3k +from PySide2.QtCore import QObject + +class QStringConstructor(unittest.TestCase): + '''Test case for QString constructors''' + + def testQStringDefault(self): + obj = QObject() + obj.setObjectName('foo') + self.assertEqual(obj.objectName(), py3k.unicode_('foo')) + obj.setObjectName(py3k.unicode_('áâãà')) + self.assertEqual(obj.objectName(), py3k.unicode_('áâãà')) + obj.setObjectName(None) + self.assertEqual(obj.objectName(), py3k.unicode_('')) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qsysinfo_test.py b/sources/pyside2/tests/QtCore/qsysinfo_test.py new file mode 100644 index 0000000..7e25e4f --- /dev/null +++ b/sources/pyside2/tests/QtCore/qsysinfo_test.py @@ -0,0 +1,42 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QSysInfo + +class TestQSysInfo(unittest.TestCase): + def testEnumEndian(self): + self.assertEqual(QSysInfo.BigEndian, 0) + self.assertEqual(QSysInfo.LittleEndian, 1) + self.assertTrue(QSysInfo.ByteOrder > -1) + + def testEnumSizes(self): + self.assertTrue(QSysInfo.WordSize > 0) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qtext_codec_test.py b/sources/pyside2/tests/QtCore/qtext_codec_test.py new file mode 100644 index 0000000..5506c20 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qtext_codec_test.py @@ -0,0 +1,48 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import gc +import unittest + +from PySide2.QtCore import QTextCodec + +class TestCodecGetters(unittest.TestCase): + + def testCodecsNames(self): + for codec_name in QTextCodec.availableCodecs(): + codec = QTextCodec.codecForName(codec_name) + self.assertTrue(type(codec), QTextCodec) + + def testCodecsMibs(self): + for codec_num in QTextCodec.availableMibs(): + codec = QTextCodec.codecForMib(codec_num) + self.assertTrue(type(codec), QTextCodec) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qtextstream_test.py b/sources/pyside2/tests/QtCore/qtextstream_test.py new file mode 100644 index 0000000..6af7f46 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qtextstream_test.py @@ -0,0 +1,115 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QTextStream''' + +import unittest +import py3kcompat as py3k + +from PySide2.QtCore import QByteArray, QTextStream, QIODevice, QTextCodec, QFile + +class QTextStreamShiftTest(unittest.TestCase): + + def setUp(self): + self.ba = QByteArray() + self.read = QTextStream(self.ba, QIODevice.ReadOnly) + self.write = QTextStream(self.ba, QIODevice.WriteOnly) + + def testNumber(self): + '''QTextStream << number''' + + self.write << '4' + self.write.flush() + res = self.read.readLine() + self.assertTrue(isinstance(res, py3k.unicode)) + self.assertEqual(res, '4') + +class QTextStreamGetSet(unittest.TestCase): + + def setUp(self): + self.obj = QTextStream() + + + def testCodec(self): + '''QTextStream set/get Codec''' + + codec = QTextCodec.codecForName('ISO8859-1') + self.obj.setCodec(codec) + self.assertEqual(codec, self.obj.codec()) + + def testDevice(self): + '''QTextStream get/set Device''' + device = QFile() + self.obj.setDevice(device) + self.assertEqual(device, self.obj.device()) + self.obj.setDevice(None) + self.assertEqual(None, self.obj.device()) + +class QTextStreamInitialization(unittest.TestCase): + + def testConstruction(self): + '''QTextStream construction''' + obj = QTextStream() + + self.assertEqual(obj.codec(), QTextCodec.codecForLocale()) + self.assertEqual(obj.device(), None) + self.assertEqual(obj.string(), None) + + self.assertTrue(obj.atEnd()) + self.assertEqual(obj.readAll(), '') + +class QTextStreamReadLinesFromDevice(unittest.TestCase): + + def _check_data(self, data_set): + + for data, lines in data_set: + stream = QTextStream(data) + + res = [] + while not stream.atEnd(): + res.append(stream.readLine()) + + self.assertEqual(res, lines) + + def testLatin1(self): + '''QTextStream readLine for simple Latin1 strings''' + + data = [] + + data.append((QByteArray(), [])) + data.append((QByteArray(py3k.b('\n')), [''])) + data.append((QByteArray(py3k.b('\r\n')), [''])) + data.append((QByteArray(py3k.b('ole')), ['ole'])) + data.append((QByteArray(py3k.b('ole\n')), ['ole'])) + data.append((QByteArray(py3k.b('ole\r\n')), ['ole'])) + data.append((QByteArray(py3k.b('ole\r\ndole\r\ndoffen')), ['ole', 'dole', 'doffen'])) + + self._check_data(data) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qthread_prod_cons_test.py b/sources/pyside2/tests/QtCore/qthread_prod_cons_test.py new file mode 100644 index 0000000..ee3ed1a --- /dev/null +++ b/sources/pyside2/tests/QtCore/qthread_prod_cons_test.py @@ -0,0 +1,136 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Producer-Consumer test/example with QThread''' + +import unittest +from random import random +import logging + +logging.basicConfig(level=logging.WARNING) + +from PySide2.QtCore import QThread, QCoreApplication, QObject, SIGNAL + +class Bucket(QObject): + '''Dummy class to hold the produced values''' + def __init__(self, max_size=10, *args): + #Constructor which receives the max number of produced items + super(Bucket, self).__init__(*args) + self.data = [] + self.max_size = 10 + + def pop(self): + #Retrieves an item + return self.data.pop(0) + + def push(self, data): + #Pushes an item + self.data.append(data) + +class Producer(QThread): + '''Producer thread''' + + def __init__(self, bucket, *args): + #Constructor. Receives the bucket + super(Producer, self).__init__(*args) + self.runs = 0 + self.bucket = bucket + self.production_list = [] + + def run(self): + #Produces at most bucket.max_size items + while self.runs < self.bucket.max_size: + value = int(random()*10) % 10 + self.bucket.push(value) + self.production_list.append(value) + logging.debug('PRODUCER - pushed %d' % value) + self.runs += 1 + self.msleep(5) + + + +class Consumer(QThread): + '''Consumer thread''' + def __init__(self, bucket, *args): + #Constructor. Receives the bucket + super(Consumer, self).__init__(*args) + self.runs = 0 + self.bucket = bucket + self.consumption_list = [] + + def run(self): + #Consumes at most bucket.max_size items + while self.runs < self.bucket.max_size: + try: + value = self.bucket.pop() + self.consumption_list.append(value) + logging.debug('CONSUMER - got %d' % value) + self.runs += 1 + except IndexError: + logging.debug('CONSUMER - empty bucket') + self.msleep(5) + +class ProducerConsumer(unittest.TestCase): + '''Basic test case for producer-consumer QThread''' + + def setUp(self): + #Create fixtures + self.app = QCoreApplication([]) + + def tearDown(self): + #Destroy fixtures + del self.app + + def finishCb(self): + #Quits the application + self.app.exit(0) + + def testProdCon(self): + #QThread producer-consumer example + bucket = Bucket() + prod = Producer(bucket) + cons = Consumer(bucket) + + prod.start() + cons.start() + + QObject.connect(prod, SIGNAL('finished()'), self.finishCb) + QObject.connect(cons, SIGNAL('finished()'), self.finishCb) + + self.app.exec_() + + prod.wait(50) + cons.wait(50) + + self.assertEqual(prod.production_list, cons.consumption_list) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qthread_signal_test.py b/sources/pyside2/tests/QtCore/qthread_signal_test.py new file mode 100644 index 0000000..31b148a --- /dev/null +++ b/sources/pyside2/tests/QtCore/qthread_signal_test.py @@ -0,0 +1,91 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for connecting signals between threads''' + +import unittest + +from PySide2.QtCore import QThread, QObject, SIGNAL, QCoreApplication + +thread_run = False + +class Source(QObject): + def __init__(self, *args): + QObject.__init__(self, *args) + + def emit_sig(self): + self.emit(SIGNAL('source()')) + +class Target(QObject): + def __init__(self, *args): + QObject.__init__(self, *args) + self.called = False + + def myslot(self): + self.called = True + +class ThreadJustConnects(QThread): + def __init__(self, source, *args): + QThread.__init__(self, *args) + self.source = source + self.target = Target() + + def run(self): + global thread_run + thread_run = True + QObject.connect(self.source, SIGNAL('source()'), self.target.myslot) + + while not self.target.called: + pass + + + +class BasicConnection(unittest.TestCase): + + def testEmitOutsideThread(self): + global thread_run + + app = QCoreApplication([]) + source = Source() + thread = ThreadJustConnects(source) + + QObject.connect(thread, SIGNAL('finished()'), lambda: app.exit(0)) + thread.start() + + while not thread_run: + pass + + source.emit_sig() + + app.exec_() + thread.wait() + + self.assertTrue(thread.target.called) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qthread_test.py b/sources/pyside2/tests/QtCore/qthread_test.py new file mode 100644 index 0000000..1df2c99 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qthread_test.py @@ -0,0 +1,108 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QThread''' + +import unittest +from PySide2.QtCore import QThread, QCoreApplication, QObject, SIGNAL, QMutex, QTimer +from PySide2.QtCore import QEventLoop + +from helper import UsesQCoreApplication + +mutex = QMutex() + +class Dummy(QThread): + '''Dummy thread''' + def __init__(self, *args): + super(Dummy, self).__init__(*args) + self.called = False + + def run(self): + #Start-quit sequence + self.qobj = QObject() + mutex.lock() + self.called = True + mutex.unlock() + +class QThreadSimpleCase(UsesQCoreApplication): + + def setUp(self): + UsesQCoreApplication.setUp(self) + self.called = False + + def tearDown(self): + UsesQCoreApplication.tearDown(self) + + def testThread(self): + #Basic QThread test + obj = Dummy() + obj.start() + self.assertTrue(obj.wait(100)) + + self.assertTrue(obj.called) + + def cb(self, *args): + self.called = True + #self.exit_app_cb() + + def abort_application(self): + if self._thread.isRunning(): + self._thread.terminate() + self.app.quit() + + def testSignalFinished(self): + #QThread.finished() (signal) + obj = Dummy() + QObject.connect(obj, SIGNAL('finished()'), self.cb) + mutex.lock() + obj.start() + mutex.unlock() + + self._thread = obj + QTimer.singleShot(1000, self.abort_application) + self.app.exec_() + + self.assertTrue(self.called) + + def testSignalStarted(self): + #QThread.started() (signal) + obj = Dummy() + QObject.connect(obj, SIGNAL('started()'), self.cb) + obj.start() + + self._thread = obj + QTimer.singleShot(1000, self.abort_application) + self.app.exec_() + + self.assertEqual(obj.qobj.thread(), obj) # test QObject.thread() method + self.assertTrue(self.called) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qtimer_singleshot_test.py b/sources/pyside2/tests/QtCore/qtimer_singleshot_test.py new file mode 100644 index 0000000..e25a97c --- /dev/null +++ b/sources/pyside2/tests/QtCore/qtimer_singleshot_test.py @@ -0,0 +1,106 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QTimer.singleShot''' + +import unittest + +from PySide2.QtCore import QObject, QTimer, QCoreApplication, Signal +from helper import UsesQCoreApplication + +class WatchDog(QObject): + '''Exits the QCoreApplication main loop after sometime.''' + + def __init__(self, watched): + QObject.__init__(self) + self.times_called = 0 + self.watched = watched + + def timerEvent(self, evt): + self.times_called += 1 + if self.times_called == 20: + self.watched.exit_app_cb() + +class TestSingleShot(UsesQCoreApplication): + '''Test case for QTimer.singleShot''' + + def setUp(self): + #Acquire resources + UsesQCoreApplication.setUp(self) + self.watchdog = WatchDog(self) + self.called = False + + def tearDown(self): + #Release resources + del self.watchdog + del self.called + UsesQCoreApplication.tearDown(self) + + def callback(self): + self.called = True + self.app.quit() + + def testSingleShot(self): + QTimer.singleShot(100, self.callback) + self.app.exec_() + self.assertTrue(self.called) + +class SigEmitter(QObject): + + sig1 = Signal() + + +class TestSingleShotSignal(UsesQCoreApplication): + '''Test case for QTimer.singleShot connecting to signals''' + + def setUp(self): + UsesQCoreApplication.setUp(self) + self.watchdog = WatchDog(self) + self.called = False + + def tearDown(self): + del self.watchdog + del self.called + UsesQCoreApplication.tearDown(self) + + def callback(self): + self.called = True + self.app.quit() + + def testSingleShotSignal(self): + emitter = SigEmitter() + emitter.sig1.connect(self.callback) + QTimer.singleShot(100, emitter.sig1) + self.app.exec_() + self.assertTrue(self.called) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qtimer_timeout_test.py b/sources/pyside2/tests/QtCore/qtimer_timeout_test.py new file mode 100644 index 0000000..bb8caf8 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qtimer_timeout_test.py @@ -0,0 +1,87 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for timeout() signals from QTimer object.''' + +import unittest +import os +import sys +from tempfile import mkstemp +from PySide2.QtCore import QObject, QTimer, SIGNAL +from helper import UsesQCoreApplication + +class WatchDog(QObject): + '''Exits the QCoreApplication main loop after sometime.''' + + def __init__(self, watched): + QObject.__init__(self) + self.times_called = 0 + self.watched = watched + + def timerEvent(self, evt): + self.times_called += 1 + if self.times_called == 20: + self.watched.exit_app_cb() + + +class TestTimeoutSignal(UsesQCoreApplication): + '''Test case to check if the signals are really being caught''' + + def setUp(self): + #Acquire resources + UsesQCoreApplication.setUp(self) + self.watchdog = WatchDog(self) + self.timer = QTimer() + self.called = False + + def tearDown(self): + #Release resources + del self.watchdog + del self.timer + del self.called + UsesQCoreApplication.tearDown(self) + + def callback(self, *args): + #Default callback + self.called = True + + def testTimeoutSignal(self): + #Test the QTimer timeout() signal + refCount = sys.getrefcount(self.timer) + QObject.connect(self.timer, SIGNAL('timeout()'), self.callback) + self.timer.start(4) + self.watchdog.startTimer(10) + + self.app.exec_() + + self.assertTrue(self.called) + self.assertEqual(sys.getrefcount(self.timer), refCount) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/qtimezone_test.py b/sources/pyside2/tests/QtCore/qtimezone_test.py new file mode 100644 index 0000000..3d5bd17 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qtimezone_test.py @@ -0,0 +1,44 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QTimeZone +import py3kcompat as py3k + +class TestQTimeZone (unittest.TestCase): + def testTimeZone(self): + id = py3k.b('Europe/Berlin') + timeZone = QTimeZone(id) + self.assertTrue(timeZone.isValid()) + self.assertEqual(timeZone.id(), id) + name = timeZone.displayName(QTimeZone.GenericTime, QTimeZone.DefaultName) + self.assertTrue(name) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qtnamespace_test.py b/sources/pyside2/tests/QtCore/qtnamespace_test.py new file mode 100644 index 0000000..06dece2 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qtnamespace_test.py @@ -0,0 +1,48 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test suite for QtCore.Qt namespace''' + +import unittest + +from PySide2.QtCore import Qt + +class QtNamespace(unittest.TestCase): + '''Test case for accessing attributes from Qt namespace''' + + def testBasic(self): + #Access to Qt namespace + getattr(Qt, 'Horizontal') + getattr(Qt, 'WindowMaximizeButtonHint') + self.assertTrue(True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/quoteEnUS.txt b/sources/pyside2/tests/QtCore/quoteEnUS.txt new file mode 100644 index 0000000..909b4fa --- /dev/null +++ b/sources/pyside2/tests/QtCore/quoteEnUS.txt @@ -0,0 +1 @@ +Fine! Dishonor! Dishonor on you, dishonor on ya cow! diff --git a/sources/pyside2/tests/QtCore/qurl_test.py b/sources/pyside2/tests/QtCore/qurl_test.py new file mode 100644 index 0000000..b0333d5 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qurl_test.py @@ -0,0 +1,163 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test suite for QtCore.QUrl''' + +import unittest + +from PySide2.QtCore import QUrl +from PySide2.QtCore import QUrlQuery + +class QUrlBasicConstructor(unittest.TestCase): + '''Tests the basic constructors''' + + def testBasic(self): + #Default constructor for QUrl + url = QUrl() + self.assertEqual(url.toString(), "") + + def testSetAttributes(self): + #Construct QUrl by set* methods + url = QUrl() + + url.setScheme('ftp') + self.assertEqual(url.toString(), 'ftp:') + + url.setHost('www.google.com') + self.assertEqual(url.toString(), 'ftp://www.google.com') + + url.setPort(8080) + self.assertEqual(url.toString(), 'ftp://www.google.com:8080') + + url.setPath('/mail/view') + self.assertEqual(url.toString(), + 'ftp://www.google.com:8080/mail/view') + + url.setUserName('john') + self.assertEqual(url.toString(), + 'ftp://john@www.google.com:8080/mail/view') + + url.setPassword('abc123') + self.assertEqual(url.toString(), + 'ftp://john:abc123@www.google.com:8080/mail/view') + +class QueryItemsTest(unittest.TestCase): + '''Test query item management''' + + def testQueryItems(self): + url = QUrl('http://www.google.com/search?q=python&hl=en') + valid_data = [(('q'), ('python')), (('hl'), ('en'))] + + self.assertEqual(sorted(QUrlQuery(url.query()).queryItems()), sorted(valid_data)) + + def testEncodedQueryItems(self): + url = QUrl('http://www.google.com/search?q=python&hl=en') + valid_data = [(('q'), ('python')), (('hl'), ('en'))] + + self.assertEqual(sorted(QUrlQuery(url.query()).queryItems()), sorted(valid_data)) + + def testSetQueryItems(self): + urla = QUrl('http://www.google.com/search?q=python&hl=en') + urlb = QUrl('http://www.google.com/search') + + urlb.setQuery(urla.query()) + + self.assertEqual(urla, urlb) + + def testAddQueryItem(self): + url = QUrlQuery() + valid_data = [('hl', 'en'), ('user', 'konqui')] + + url.addQueryItem(*valid_data[0]) + self.assertEqual(url.queryItems()[0], valid_data[0]) + + url.addQueryItem(*valid_data[1]) + self.assertEqual(sorted(url.queryItems()), sorted(valid_data)) + + def testAllQueryItemsValues(self): + url = QUrlQuery() + key = 'key' + valid_data = ['data', 'valid', 'test'] + + for i, data in enumerate(valid_data): + url.addQueryItem(key, data) + self.assertEqual(url.allQueryItemValues(key), + list(valid_data[:i+1])) + + def testPath(self): + url = QUrl("http://qt-project.org/images/ban/pgs_front.jpg") + self.assertEqual(url.path(), "/images/ban/pgs_front.jpg") + +# PYSIDE-345: No bindings for QUrlQuery +class QueryItemsTest(unittest.TestCase): + '''Test query item management''' + + def testQueryItems(self): + url = QUrl('http://www.google.com/search?q=python&hl=en') + valid_data = [(('q'), ('python')), (('hl'), ('en'))] + + self.assertEqual(sorted(QUrlQuery(url.query()).queryItems()), sorted(valid_data)) + + def testEncodedQueryItems(self): + url = QUrl('http://www.google.com/search?q=python&hl=en') + valid_data = [(('q'), ('python')), (('hl'), ('en'))] + + self.assertEqual(sorted(QUrlQuery(url.query()).queryItems()), sorted(valid_data)) + + def testSetQueryItems(self): + urla = QUrl('http://www.google.com/search?q=python&hl=en') + urlb = QUrl('http://www.google.com/search') + + urlb.setQuery(urla.query()) + + self.assertEqual(urla, urlb) + + def testAddQueryItem(self): + url = QUrlQuery() + valid_data = [('hl', 'en'), ('user', 'konqui')] + + url.addQueryItem(*valid_data[0]) + self.assertEqual(url.queryItems()[0], valid_data[0]) + + url.addQueryItem(*valid_data[1]) + self.assertEqual(sorted(url.queryItems()), sorted(valid_data)) + + def testAllQueryItemsValues(self): + url = QUrlQuery() + key = 'key' + valid_data = ['data', 'valid', 'test'] + + for i, data in enumerate(valid_data): + url.addQueryItem(key, data) + self.assertEqual(url.allQueryItemValues(key), + list(valid_data[:i+1])) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qurlquery_test.py b/sources/pyside2/tests/QtCore/qurlquery_test.py new file mode 100644 index 0000000..652a9a8 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qurlquery_test.py @@ -0,0 +1,59 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QUrlQuery''' + +import unittest +import ctypes +import sys + +from PySide2.QtCore import QUrlQuery + +class QUrlQueryTest(unittest.TestCase): + def testConstructing(self): + empty = QUrlQuery() + self.assertTrue(empty.isEmpty()) + self.assertEqual(empty.queryPairDelimiter(), QUrlQuery.defaultQueryPairDelimiter()) + self.assertEqual(empty.queryValueDelimiter(), QUrlQuery.defaultQueryValueDelimiter()) + + empty.clear(); + self.assertTrue(empty.isEmpty()) + + def testAddRemove(self): + query = QUrlQuery() + + query.addQueryItem("a", "b"); + self.assertTrue(not query.isEmpty()) + self.assertTrue(query.hasQueryItem("a")) + self.assertEqual(query.queryItemValue("a"), "b") + self.assertEqual(query.allQueryItemValues("a"), ["b"]) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/quuid_test.py b/sources/pyside2/tests/QtCore/quuid_test.py new file mode 100644 index 0000000..c881383 --- /dev/null +++ b/sources/pyside2/tests/QtCore/quuid_test.py @@ -0,0 +1,45 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QUuid''' + +import unittest + +from PySide2.QtCore import QUuid + +class QUuidTest(unittest.TestCase): + def testFromString(self): + uuidString = '{fc69b59e-cc34-4436-a43c-ee95d128b8c5}' + uuid = QUuid(uuidString) + self.assertTrue(not uuid.isNull()) + self.assertEqual(uuid.toString(), uuidString) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/qversionnumber_test.py b/sources/pyside2/tests/QtCore/qversionnumber_test.py new file mode 100644 index 0000000..d98e320 --- /dev/null +++ b/sources/pyside2/tests/QtCore/qversionnumber_test.py @@ -0,0 +1,48 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QVersionNumber''' + +import unittest + +from PySide2.QtCore import QVersionNumber + +class QVersionNumberTest(unittest.TestCase): + def testFromString(self): + versionString = '5.9.2' + version = QVersionNumber.fromString(versionString) + self.assertTrue(not version.isNull()) + self.assertEqual(version.majorVersion(), 5) + self.assertEqual(version.minorVersion(), 9) + self.assertEqual(version.microVersion(), 2) + self.assertEqual(version.toString(), versionString) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/repr_test.py b/sources/pyside2/tests/QtCore/repr_test.py new file mode 100644 index 0000000..0c20c24 --- /dev/null +++ b/sources/pyside2/tests/QtCore/repr_test.py @@ -0,0 +1,106 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import PySide2 +import unittest + +from PySide2.QtCore import QByteArray, QDate, QDateTime, QTime, QLine, QLineF +from PySide2.QtCore import Qt, QSize, QSizeF, QRect, QRectF, QPoint, QPointF +import py3kcompat as py3k +try: + from PySide2.QtCore import QUuid + HAVE_Q = True +except ImportError: + HAVE_Q = False + +class ReprCopyHelper: + def testCopy(self): + copy = eval(self.original.__repr__()) + self.assertTrue(copy is not self.original) + self.assertEqual(copy, self.original) + +class QByteArrayReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QByteArray(py3k.b('the quick brown fox jumps over the lazy dog')) + + +class QDateReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QDate(2010, 11, 22) + + +class QTimeReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QTime(11, 37, 55, 692) + + +class QDateTimeReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QDateTime(2010, 5, 18, 10, 24, 45, 223, Qt.LocalTime) + + +class QSizeReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QSize(42, 190) + + +class QSizeFReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QSizeF(42.7, 190.2) + +class QRectReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QRect(100, 200, 300, 400) + +class QRectFReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QRectF(100.33, 200.254, 300.321, 400.123) + +class QLineReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QLine(1, 2, 3, 4) + +class QLineFReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QLineF(1.1, 2.2, 3.3, 4.4) + +class QPointReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QPoint(1, 2) + +class QPointFReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QPointF(1.1, 2.2) + +class QUuiCopy(ReprCopyHelper, unittest.TestCase): + @unittest.skipUnless(HAVE_Q, "QUuid is currently not supported on this platform.") + def setUp(self): + self.original = QUuid("67C8770B-44F1-410A-AB9A-F9B5446F13EE") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/resources.qrc b/sources/pyside2/tests/QtCore/resources.qrc new file mode 100644 index 0000000..0a0b03d --- /dev/null +++ b/sources/pyside2/tests/QtCore/resources.qrc @@ -0,0 +1,7 @@ + + + quoteEnUS.txt + sample.png + + + diff --git a/sources/pyside2/tests/QtCore/resources_mc.py b/sources/pyside2/tests/QtCore/resources_mc.py new file mode 100644 index 0000000..4b29523 --- /dev/null +++ b/sources/pyside2/tests/QtCore/resources_mc.py @@ -0,0 +1,3571 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Resource object code +# +# Created: Thu Feb 3 16:09:36 2011 +# by: The Resource Compiler for PySide (Qt v4.6.3) +# +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"""\ +\x00\x00\x00\x35\ +\x46\ +\x69\x6e\x65\x21\x20\x44\x69\x73\x68\x6f\x6e\x6f\x72\x21\x20\x44\ +\x69\x73\x68\x6f\x6e\x6f\x72\x20\x6f\x6e\x20\x79\x6f\x75\x2c\x20\ +\x64\x69\x73\x68\x6f\x6e\x6f\x72\x20\x6f\x6e\x20\x79\x61\x20\x63\ +\x6f\x77\x21\x0a\ +\x00\x00\xda\x88\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\xb1\x00\x00\x00\xd2\x08\x06\x00\x00\x00\x05\x49\x21\x31\ +\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\ +\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\ +\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\ +\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xda\x03\x0a\ +\x0c\x02\x2e\xb0\x96\x99\x74\x00\x00\x00\x19\x74\x45\x58\x74\x43\ +\x6f\x6d\x6d\x65\x6e\x74\x00\x43\x72\x65\x61\x74\x65\x64\x20\x77\ +\x69\x74\x68\x20\x47\x49\x4d\x50\x57\x81\x0e\x17\x00\x00\x20\x00\ +\x49\x44\x41\x54\x78\xda\x94\xbd\xd9\xaf\x24\xd9\x7a\xdd\xf7\x8b\ +\x21\x33\x77\x44\xe4\x9c\xa7\xaa\xcf\xa9\xb1\xab\x87\x6b\xf2\x92\ +\xd4\x15\x49\x0b\x84\x64\xd9\x22\x64\x3f\xd8\x30\x0c\xd8\x8f\x34\ +\xfc\x68\x43\x7f\x8b\xfe\x04\x02\x06\xfc\x64\xbf\xd1\x06\x04\x13\ +\x7a\x30\x65\x59\x04\x4d\x03\xa4\x48\xba\x29\xf9\x72\xb8\xdd\x5d\ +\x55\x5d\xc3\x39\x75\xea\x9c\x9c\x23\xf6\xce\xcc\x18\xfc\xb0\x87\ +\x88\xc8\xcc\x6a\xd9\xd9\x68\x44\xce\x79\x2a\x73\xc5\x8a\xb5\xd7\ +\xb7\xbe\x2f\xbc\xdf\xff\x17\xbf\x57\x09\x00\x15\x82\xc8\x29\x89\ +\xb0\x97\x24\xaa\x90\x52\x51\x12\x91\x44\x95\xb9\x37\x42\x56\x1e\ +\x91\x97\x91\x4a\xcf\x3d\x27\x8a\x04\x12\x1a\xaf\xd6\xcf\x45\x54\ +\xa0\x3c\x7e\xfc\x22\xeb\xe7\x9b\xeb\xfa\xbd\xea\xdb\x08\x01\x4a\ +\x01\x11\x42\x54\x28\xe5\xe9\x2d\x20\xc0\xdd\x6e\x5e\xdc\x7d\x4a\ +\x02\x7d\x2a\xd1\x73\x8f\x79\x6a\x07\xa2\xa0\x22\xd6\xd7\x81\x24\ +\xdb\xe3\x8d\x87\xad\xf7\xc8\xe3\x12\x80\x30\xf3\xc9\xe3\x92\x30\ +\xf3\x09\x63\x81\x22\x43\x10\x03\x99\x79\x66\x6c\xfe\xce\x12\x94\ +\x5f\xbf\xc1\xd1\xed\x38\x28\xf4\xfb\x85\x11\x79\x2e\xf1\x37\x7d\ +\xb6\xb1\xe4\x61\x76\xe0\xf6\xe5\x82\xc3\x04\x46\xe3\x01\x00\x7d\ +\x42\xb6\xe4\x4c\xbd\x31\xd5\x70\xc3\xc6\xef\x33\x28\xb7\x78\xeb\ +\x01\xeb\x47\x01\x09\x3d\x52\x76\x24\xe8\x7f\x57\x90\x29\x3a\x71\ +\x0f\x45\xfd\x7d\x77\x85\x60\xaf\xd4\xc9\x37\x2e\x44\x81\x52\x01\ +\x82\x0a\x85\x87\xcc\x04\xdf\x7e\xbc\x67\x1c\x06\xfa\xfb\x99\x54\ +\xcc\x98\x50\x72\x4f\x12\x27\x88\x69\x42\x99\x15\x27\xef\xe3\xc7\ +\x41\xeb\xfe\xbd\x52\xc8\x4c\x00\x50\x72\x8f\xcf\x8c\x49\x2c\x29\ +\x45\x84\x1f\x07\x54\x9d\x11\xde\x61\xa5\x1f\xcf\x0a\x56\x73\xb8\ +\x5b\xbc\xa4\x5a\xae\x4f\xde\xdb\x1b\x0f\x19\x52\xf1\xd9\xe3\x11\ +\x4c\x1f\x52\x75\x46\x27\xcf\x79\xf4\xe8\x6b\x42\xfd\x63\x07\x20\ +\x72\x50\x01\xb0\xa7\x2b\xba\xec\x91\xec\xa5\x06\x88\xaf\x0e\x48\ +\x72\x03\x18\x0d\xea\x14\x8f\x3d\x12\x64\xc4\x1e\x40\xda\xfb\x61\ +\x8f\x44\x00\x25\x5e\x8d\x4f\xc0\x47\x52\x12\x31\x2c\x3d\xd6\x7e\ +\xe5\x6e\x83\x47\x15\x65\x78\xd2\xc3\x8f\xa0\x94\xfa\x47\x90\x91\ +\xa4\xb4\x3b\x8a\x52\x06\xd2\x12\x94\x05\xa9\xbe\x47\x99\x5d\x47\ +\x35\x76\x16\x0b\x68\x0d\xe4\x08\xa5\x4a\x03\x66\xe8\x09\xfd\xfc\ +\xca\x00\xaf\x12\x3d\xfa\xf3\x0d\x69\xdc\xa5\xf2\xf5\xeb\x06\xa5\ +\xc7\xc6\xaf\x18\x64\x3e\x79\x2c\xd0\x1f\x1a\x93\xc7\x10\x02\x82\ +\xb8\x01\xe4\x06\x58\x9b\x00\x06\x8a\x2a\x26\x40\x11\x67\x92\x2c\ +\x8e\xc8\x8a\x80\xa2\x27\x98\x50\xd6\xc0\xce\x24\x19\x53\x1e\xbe\ +\x80\x2d\x39\x7d\x42\xd4\x7c\x05\xd3\x11\x7d\x42\xf6\xd5\x16\x56\ +\x1e\x83\xd1\x96\xd5\x6a\x44\x39\xd8\x32\xe2\x82\x42\x1c\x10\xf8\ +\xa0\x34\x80\x01\x14\x1e\x5d\x21\xda\x80\xa5\xa2\x14\x91\x03\x73\ +\x57\x08\x94\x52\xee\x7e\x94\xe2\x2f\x6e\x7e\xce\x24\xeb\xc3\x64\ +\x48\x31\x9a\x10\x2c\x16\x94\x13\x0d\xc2\xae\xf8\x34\xfd\x34\x01\ +\x5c\x55\x63\xba\x62\x09\x68\x20\xfb\xcc\xea\xbf\xc9\x3e\x7f\x59\ +\x12\x24\xf5\x0e\xc0\xbc\x60\xbb\x08\x48\x3c\x48\xab\x09\x89\xb7\ +\x00\x20\x8d\xbb\x24\xcb\x35\x98\x1d\x1a\xc0\x3b\xac\x5a\x40\xf6\ +\x0e\x2b\x92\x7e\x07\xfd\x8d\x0b\xf3\x87\x88\x02\x44\x41\xa6\xe6\ +\x35\x9b\x01\x4a\xe4\x1a\xe8\xe6\xf6\x1e\xc9\x1e\x49\xd7\x80\xa7\ +\x4b\x64\x71\x85\xdf\x40\xed\xbe\x71\xbd\x06\x2c\x6c\xfd\xcc\xec\ +\xa9\x91\x7b\xcc\x93\xb1\x7e\x8e\xf4\xf0\x0d\xeb\x5b\x30\xa7\xd2\ +\x03\xa9\xdc\xbb\xc9\x06\x5f\xcb\x16\x9b\xd7\xcf\x50\xca\xd3\x47\ +\x81\x06\xb8\x85\xa8\xe8\x89\x88\x9d\x92\x20\x0a\xc7\xc0\x9e\xda\ +\xe9\x2f\x30\x38\xb8\x77\xdb\xf8\x15\xd1\x11\xb3\xb7\x18\x3a\x53\ +\xa7\x00\xb6\xc0\xed\x09\xb7\x0d\x76\x35\x80\x5b\xaf\xcf\x25\x59\ +\x11\x10\xb3\x26\x9c\x68\x60\x66\x0c\x99\x7a\x63\xba\x5e\x9f\x7c\ +\x9a\x68\x20\x37\x2e\x87\x95\xa7\x9f\x1f\xea\xf7\x4a\xf0\x89\x18\ +\x20\x44\x41\x11\x0b\x3a\x71\xef\x04\xc0\x80\x06\xea\x19\x66\xb6\ +\xc0\x96\x99\xe0\xe3\xdb\x1c\x80\x65\x5e\x10\xac\x34\x90\x3e\x96\ +\x17\x44\xb1\x3a\x01\xeb\xa7\x2e\x41\xb2\xd1\xdf\x7e\x56\xff\x0d\ +\xf6\xf5\x00\x45\x3a\x20\x48\x36\x54\x9d\x11\x65\x56\x50\xa4\x83\ +\xd6\xe3\x16\xc0\xcb\xaa\x20\xc9\xf6\xa4\x71\xb7\xf5\xfe\x16\xc0\ +\x96\xc9\x01\xd2\xed\x01\x3f\x57\x92\x03\x19\x76\xbb\xc9\x4b\x64\ +\xd8\x63\x93\x97\xe4\x4a\xb2\xc9\x4b\x0e\xee\x90\x69\x7e\x33\x15\ +\x9a\x43\xc7\xbe\x05\x5a\x0b\x72\xcb\x5b\xdd\x86\xb8\x28\x3f\x71\ +\xdd\x8f\x2a\x4a\x22\xfd\x3e\x91\xa8\x81\x6c\xbe\x78\xbb\xb5\xaf\ +\x29\xa5\x57\x33\xf5\xb1\xe4\x70\xd7\x23\x07\xe0\x63\x56\xf6\xcc\ +\xbf\x45\x19\x06\x06\xe8\x77\x05\x24\x29\x69\xd1\x31\xcc\x1c\x18\ +\x00\x1b\x90\x92\x91\xc7\x82\x4c\x1f\x73\xb4\x1c\x88\x85\x79\x9f\ +\x8c\xa2\x8a\xdb\x3f\xe6\x4e\x51\xf4\x04\x83\x3c\xa5\x9f\x45\x2d\ +\x70\x0f\x7b\x5d\x27\x27\xe2\xa0\x60\x3b\xd0\xe0\xf7\x37\x7d\xca\ +\xc1\x96\x65\xe5\xc3\xd8\x27\x9c\x8c\xc8\xa7\x89\xf9\xf4\x5a\xe2\ +\x6c\x07\x3e\x49\x6c\x8f\x44\x01\x3e\x29\x25\x09\x82\xaa\x75\x88\ +\xf7\xe3\xa0\x75\x88\x3f\xbe\xde\x7c\x7e\x3e\xd2\xdf\xe7\x22\xde\ +\x32\x0e\x03\x96\xb9\x06\xec\x67\x7e\xc5\xff\x9f\x4b\x91\x0e\xd8\ +\x2b\xd5\x02\xe6\xb9\xbf\xc1\x3b\xac\xf0\xe3\x80\x20\xd9\x38\xc0\ +\xa7\xd5\x84\x65\x55\xb0\xac\x0a\xc6\x5e\xe0\xe4\x5d\x4b\x5e\x18\ +\xf0\x1e\xcb\x0a\x1f\x40\xe5\xe6\x07\x31\xdb\x6a\xb5\x43\x76\x6f\ +\xc9\x52\xc3\x6b\xf7\x1e\x07\xb1\xa9\x59\x57\xe4\x0e\xa0\xea\x88\ +\x71\xbb\x47\xaa\xf8\xdf\x75\xb1\x80\x6c\x5e\xb7\x4c\xec\x47\x15\ +\xa5\x92\x24\x51\x85\x2f\x22\xf7\xce\xb5\x3e\xaf\xb9\x58\xfe\x88\ +\x0e\x3f\xa7\x97\x05\xe0\x91\x51\x88\x94\x8d\x5f\x69\x20\x43\x83\ +\x7d\x63\xc2\x4c\x19\x29\x11\x1b\x19\x12\xb6\x98\x16\xa0\xd3\x9b\ +\x12\xec\x94\xbb\xff\x18\xa8\x00\x59\x1c\x31\xec\x75\xb5\x84\x88\ +\x43\x26\x71\x5b\x72\x0c\x09\xf0\x1f\x7b\x84\x61\x84\xff\xd8\x63\ +\x1d\x7b\x24\x71\xc2\xe8\xf1\x23\xd4\x24\xc1\x9f\x14\x74\x27\x43\ +\xb6\x03\x9f\x69\xd8\x37\x47\x80\x94\xd5\xfa\xee\x93\x8c\xdb\xbc\ +\x58\x76\xb6\x5b\x61\x8e\xbc\x16\x58\xe1\xaa\x82\xcf\x87\x4c\xb2\ +\xbe\x03\x70\x1b\x24\xe9\x89\x0e\x3e\x77\xf1\xbc\x25\x9d\xde\x65\ +\x8b\x89\x9b\x92\xc6\x32\xb5\x05\x61\x91\x1a\xed\x3f\x29\x38\x70\ +\xe7\xc0\x6b\xc1\x9c\xc6\x5d\x56\xc5\x96\xdc\xdf\x9e\x30\xb1\x05\ +\x74\x52\x76\xf1\xe7\xb1\xbe\x21\xc3\x9e\x03\xef\x7d\x25\x51\xe9\ +\x73\x7d\x7f\xf7\x16\x6f\xd4\xc3\x33\xa0\xd8\x23\x41\x05\x7a\x2b\ +\x0a\xba\x44\x8e\x99\xed\xe3\x25\x91\xd6\xd2\x47\x2c\x7d\x0c\xc0\ +\x13\xc9\xd1\x7c\xcc\xcb\x5a\xbb\x43\xa9\x34\xc3\xfa\x51\x85\x3c\ +\x62\xbe\x7a\x39\x69\x24\x85\xf2\xea\x6d\x53\x52\x58\x80\x9a\x6d\ +\x45\x4c\xa0\x12\x06\xa5\xc7\x76\xaf\xa8\x44\x8f\x4c\x2f\x13\x90\ +\x4a\xb2\xf1\xab\xc6\xc2\x0d\x02\xe5\xd3\x31\x12\xa1\x29\x17\x8a\ +\x9e\xd0\x92\xe2\xdc\x4e\x3a\xd8\xd6\x6c\x1c\xd7\xdf\xd3\x64\x3a\ +\xe3\xb3\xe1\x8c\xd1\xf0\x82\x22\x16\x24\xf4\x98\x4d\x05\x13\x31\ +\x62\x22\x46\x88\x69\x42\x57\x08\x92\x38\x21\x89\x93\x13\xb0\x0a\ +\x62\x46\xc3\x36\x68\x7d\x25\x5b\x00\x6b\x5d\x37\x40\x14\x54\x2d\ +\xe9\xd3\x15\x82\x0f\xa5\xc7\x17\xd5\x80\x7c\x90\x30\x79\xe0\x9f\ +\x2c\x00\x7f\x4c\x07\x37\x3f\xa7\xaa\xc6\x1c\x76\x37\x6e\x51\xd7\ +\x94\x16\xcd\x1d\xcc\x02\xd0\x82\x7a\xbb\xa8\xc1\x0b\xb4\x98\xd8\ +\xf3\xe6\x84\x65\x9f\xd2\x5f\xb4\x64\x84\xdd\x01\x52\x7f\x8f\x2f\ +\x3e\xd6\xd4\xac\x1e\xac\x48\x6f\xbb\x04\xc9\x15\x22\x79\xcd\x32\ +\x1e\x9f\xa7\x4f\x51\x20\x54\x48\x97\x48\x83\x56\x74\xcc\xa2\x50\ +\x33\xb1\x05\xaf\x3a\xf3\xd2\x54\x1e\x39\x15\x91\xa8\xb7\x52\xd5\ +\xb7\x81\x2d\x9a\x85\x25\x90\x44\x42\xbb\x22\x44\x2d\x80\x47\x44\ +\x48\x64\x43\x54\x44\x48\x51\x19\x38\x37\x80\x2c\xaa\xda\xc5\x30\ +\x00\x2e\x44\xda\x62\xe2\x41\xe9\xe1\xa9\x82\x98\x2e\x91\xa8\x18\ +\x94\x9e\x63\xe1\x4e\x4f\xd0\x69\x68\x5d\x0b\x5a\xa7\x7f\xab\x98\ +\x49\xec\x33\xa1\x64\x81\xef\xd8\x36\x0c\x23\xfc\x49\xa1\xc1\x48\ +\x8f\x84\x1e\x13\x31\xd2\x32\x40\x44\x74\x85\xa0\x2b\x84\x5e\xfd\ +\xf7\x8b\x5a\x0a\x64\x6b\xf6\x4a\xb1\x5a\xdf\xb1\x79\xa7\x98\xe7\ +\x5b\xfa\x1b\xf3\x99\xf3\xa5\x01\x98\x80\x78\xe8\x40\x74\xcc\xc4\ +\x4d\xb0\xa5\x94\x27\x2e\x85\xd5\xc7\x0f\xfa\x4b\xe7\x4a\xe4\xe5\ +\xd4\x49\x8a\x7d\xfe\xf6\x64\xa1\xfa\x63\x8b\x3b\xcf\x5b\xb6\x34\ +\xbf\xd5\xc4\x4d\xe9\x52\x75\x46\x0e\x80\xe7\xdc\x06\x56\xa1\x03\ +\xf3\xb2\x2a\xa8\xd6\x93\x16\x13\xdb\xc5\x5d\x90\x6c\xdc\xe7\x86\ +\xcb\x78\xcc\xc4\x82\x2e\x7d\xce\xc5\x58\xb2\x38\x40\xb4\x7f\x48\ +\xd4\x91\xb0\x7f\xe8\x98\x7a\x00\xa0\x02\xba\xa2\x8b\x62\x6f\xd8\ +\x2e\xd0\xc7\xe6\xc6\x1e\x5b\x44\x15\x9e\x8c\xe9\x1e\x31\x6e\xd7\ +\x30\x69\x53\x42\x68\x17\x83\x1a\xc0\x66\x5b\x20\xe9\x13\x21\x1d\ +\xb0\x65\xad\x51\xab\x18\xe9\x65\x0e\xc0\xc7\xf6\x5c\xa4\x3c\x63\ +\xc9\x79\x2d\x69\xa1\x0c\x0b\x6b\xdd\x9e\x11\xa8\x84\xc8\x00\xde\ +\x31\xa4\x88\x0c\x30\x05\x01\x0a\xcf\x80\xf4\x90\x78\x3c\xac\x1a\ +\xd2\xa7\xf3\x04\xff\xb0\xa4\xec\x8c\x19\x1c\x24\x9b\x4e\x04\x87\ +\x25\xe5\xe8\x82\x27\x07\x49\xca\x8e\x72\x74\xc1\x2c\xa8\xce\xda\ +\x52\x30\x84\xac\x60\xaf\x94\x61\xbb\x21\x7e\x39\x39\x79\x6e\x18\ +\x46\x0c\x27\xda\x70\xc3\xab\xd9\x7e\xbf\xbd\xa5\xe4\x33\xba\xfd\ +\x05\x6c\x87\xf8\x86\x89\x89\xfb\x2d\x60\xed\x95\xa2\x10\x07\x22\ +\x06\xec\x51\x28\x3c\x07\xaa\xbd\x52\x74\x85\x60\x53\x44\x2c\xf3\ +\x3b\xc2\x4d\x4a\x10\x06\x5c\x4c\xc6\x6c\xbf\xff\x81\xd7\x6f\x97\ +\x84\xbf\x1e\x31\x11\x33\x67\xa5\x1d\x5b\x6a\xcd\x7f\x93\x9a\xa7\ +\xa4\x59\x0a\xa4\x5a\xe3\x4f\xee\x81\xc4\xd9\x6b\x7a\x61\xb7\x72\ +\xee\x84\x5b\xb0\xd2\x90\x45\xa3\xdc\x5d\x1d\x7b\x01\xde\x70\x01\ +\x8c\xf5\x77\x53\xb6\xdd\x89\xaa\x1a\x6b\x77\xe2\x59\xa4\x57\xe8\ +\x83\xd0\x67\xd2\x91\x6e\xdb\xbc\x0c\x42\x9f\x41\xe8\x23\x1a\x4e\ +\x46\x57\x74\xe9\x12\x39\x3b\xae\x7b\xc6\x69\x00\xa8\xa2\x0c\xdf\ +\x3c\xbe\x8f\x2a\xa7\xa1\xfd\xa8\x62\xdf\x94\x0f\x0d\x00\x97\xd2\ +\xd3\x00\x06\x22\xc3\xcc\xa9\xf4\x88\x3c\xfd\xfc\xc8\xab\xb0\x0a\ +\x39\x32\xff\x39\x96\x76\x87\x15\x0f\x41\xa6\xf7\x2f\x7c\xad\x89\ +\x0d\xa0\x2d\x13\xdb\x45\x5e\x24\x2a\x36\x7e\xe5\x3c\xe1\x09\x25\ +\xe3\x64\xc3\x70\xa2\xd9\xf5\x6a\x1a\xf2\xac\x17\x50\x4e\xa1\xec\ +\x8c\x29\xa7\x10\x07\x6b\x84\xf0\x99\x05\x15\x62\x9a\x30\x0b\x2a\ +\x26\x62\xc4\xe0\x20\xcd\xce\x30\xe2\xc1\xc0\x77\xcc\xea\x18\xb6\ +\xaf\xfd\xd0\xd2\x5f\xe0\xc7\x01\x62\x9a\x68\xe7\x27\xab\xef\xd7\ +\xd2\x63\x48\x21\x0e\x24\x71\x42\x11\x0b\xed\x3e\x3c\xaa\xdc\xf5\ +\x45\x19\x10\x64\x8a\xfd\x5d\x17\x5f\x49\x14\x9e\xf6\x87\xb3\xf5\ +\x09\x80\x03\xd5\x69\xb1\x70\xd3\x47\xde\x2b\xc5\xe0\x20\x19\x87\ +\x01\xf9\x20\x61\xbb\xd0\x7f\xc7\xe7\x5f\x3c\xe3\x65\x01\x7f\xfe\ +\xe7\x6f\xb9\xff\x6e\x89\x9a\xa7\xf8\xa4\xa8\x79\x4a\x31\x5f\x3a\ +\xf6\xf7\xe3\x00\x6f\x34\x85\xf9\x56\x1f\x31\x16\x01\xf3\x45\xc0\ +\xd8\x2b\x9d\x0c\xaa\xaa\xb1\x93\x0f\xe7\xd8\xb7\xc3\x05\xdb\xfd\ +\xde\x31\xb1\x05\xf0\xb2\x2a\x60\x51\x51\x6d\x47\x90\xad\x5b\x1e\ +\x33\x80\x3f\xf6\x49\xb7\x07\x2d\x00\xfd\x20\x01\x34\x80\xed\xed\ +\xc4\x93\x66\xd5\x18\x91\xab\x39\x21\x7d\x54\x83\x6d\xad\x96\x3d\ +\x5e\xc8\x95\x44\x54\x51\x46\xe9\x2c\xb3\x18\x90\x1a\xd4\xb2\x21\ +\x1f\xa4\xd2\xaf\x8d\xaa\x1f\x2d\x7f\x58\xa0\xa6\x46\x9c\xe8\x42\ +\xcb\xe9\x6b\x9a\xf7\x09\x7c\x14\x25\x8a\x58\xb3\x8e\x28\x50\xca\ +\xa3\x27\x22\x3c\x91\x39\x00\x6b\x9f\xb8\xf6\x85\x43\x2a\x2d\x13\ +\xa2\x10\xaf\x6a\xc8\x2c\x55\x32\x13\xa1\x96\xc7\xc1\x9a\x84\x29\ +\x25\x05\x1f\x45\x48\xe2\x57\x06\x80\x09\x92\x0d\x01\x7b\x20\xd1\ +\x2c\x87\x70\xee\x81\x64\x43\xc4\x00\x89\x07\x2c\x49\x08\x80\x35\ +\xc4\x43\x0d\xe4\xf9\x2d\xa8\x00\x21\x02\x4a\x0a\xe8\xaf\x09\x54\ +\x97\x94\x1d\x42\xf8\x04\xaa\x83\xa2\xa6\xb0\xd1\xf0\x82\x0e\x15\ +\x05\x70\xc8\x76\x04\x40\x11\x17\x28\x95\x50\x88\x0d\x81\xea\x18\ +\x1d\xdf\x39\xfb\xfd\x5a\x20\xdb\x62\x47\x31\x9a\xc0\xbd\x66\xc4\ +\xe5\xee\x9a\xe2\xb3\x2b\x7e\xf6\x1b\x3f\x43\xbe\x7a\xcd\xdb\xc5\ +\x9a\x3c\x2f\xf8\xea\xc1\x8c\x7c\xb1\xe4\xe5\xab\x1f\xe8\x7c\xbf\ +\xe6\x97\x7f\xf5\x21\x28\x78\x9b\xdd\xb1\xf9\x7e\xc3\xab\x97\xbf\ +\xa0\x3f\xb9\xe0\xf3\x17\xcf\xd9\x8e\xa7\x4c\xd0\x45\x8e\xaa\xaa\ +\xa5\x80\x95\x03\xf6\xfa\x87\xd2\xe3\xc0\x1d\x7d\x19\x43\x37\x87\ +\x51\x4e\x59\x6d\x59\xd2\xaf\x8f\xec\x71\x41\x27\x9e\xb5\x5e\x5b\ +\xa4\x03\x0e\xbb\xf7\x24\xfd\x8e\x06\xb1\x05\xac\x03\xa5\xbd\xad\ +\x02\x12\x21\x41\x44\x40\x61\xa4\x43\xe1\x00\x9c\x56\x8d\xe7\x36\ +\xfd\x60\x0b\xe0\x06\xa0\x01\x3a\x51\xc6\x41\x2a\x84\x01\xb2\x4f\ +\xd5\xf2\x85\x6d\xd5\xcf\x8f\xaa\x96\x71\x26\x91\x24\x51\xf4\x49\ +\x00\x9f\xfe\x40\x65\xcb\x5a\xb3\xd7\x2b\x2b\x29\x94\x44\x08\xed\ +\x4e\x48\x15\x13\x09\xcd\xc2\x21\x10\x1f\x2a\xaa\x78\xd5\x02\x71\ +\xbe\xde\xf0\x61\x0d\xa3\x61\x44\x21\xba\xa4\x99\xd6\x7e\x0f\xc2\ +\x0a\xca\x09\x29\x25\xb0\xb1\x4b\x57\x53\x45\xcb\x59\xd8\x4a\x20\ +\xf7\x28\x42\x02\x14\x59\x67\xc8\xe0\x70\x57\xaf\x17\x94\x22\x25\ +\x04\x42\xc8\x52\x56\x6b\x49\x18\x2a\x12\xa5\xdf\xc7\xee\x44\xed\ +\x23\x70\x0a\x24\x0e\x88\x6b\x34\xb9\x0c\xb3\x80\x22\xfe\x34\x70\ +\x8f\xdd\x82\x26\x98\x3f\xf3\x2b\x82\x30\x60\x39\x48\x58\xbe\x4b\ +\x11\xd3\x25\x0c\xe0\xf1\x6f\xfe\x1a\xf3\xfb\x35\xb3\xd5\x82\xbb\ +\xc5\x92\x8b\xc9\x98\xce\x62\xcd\xdd\x72\xc1\x9b\x77\x05\x30\xe1\ +\xf5\xea\x7b\xaa\x65\xc8\x7e\xf4\x80\x8b\xf1\x98\x8b\xc9\xf8\x93\ +\x8b\xb9\x26\x08\x83\x64\xc3\x67\x7e\x85\xe4\x82\x03\xcb\x9a\x89\ +\x8d\xa3\x58\x56\x5b\xaa\xf1\x8c\x73\xb5\x96\xc3\xee\x86\x34\x4b\ +\x35\x13\x77\x89\xd8\xab\xba\x4a\x67\x81\xbc\x57\xfb\x96\xce\x75\ +\xa5\xca\xc6\xe1\x3f\x91\xf2\x44\xf3\x5a\x3f\x57\xeb\x62\x08\xa4\ +\x47\x69\xc0\xad\x88\xe8\xe2\x81\x94\x4e\x3e\xf8\x8d\x85\x9c\x2b\ +\x63\x9b\xeb\xbe\xb9\x1e\x9d\x61\x5b\x0b\xee\xa8\xe1\x4e\xb4\xca\ +\xd1\xca\xab\x8b\x1c\xf8\xba\xb8\x41\xa6\xe5\x84\xa8\x1c\x1b\x6b\ +\x49\x11\xb9\xd2\x76\x10\x17\x44\xbd\x09\x4a\x95\x08\xa1\x8f\x4c\ +\x01\x11\xc5\xbb\x94\x70\xbc\x45\x70\xe1\x0e\xf7\x6c\xd7\xa4\xe6\ +\xcb\xd7\x40\xcb\x0d\xa0\xd1\xc0\xcc\x72\x88\x43\x03\x52\x48\xb3\ +\x14\x3f\xde\x91\x66\xf5\xe2\x47\xdb\x70\xfa\x79\xc4\x21\xa1\x71\ +\x32\x52\xeb\x6f\x1a\x47\xc3\x02\xda\x28\x65\xc0\xee\x20\x3d\x86\ +\x04\xac\x29\x28\xe2\xc2\x01\xbc\x59\x8e\xfe\x14\x13\x0b\x2a\xc7\ +\xc4\x51\xac\x28\x4a\xcd\xc6\x77\xcb\x05\x17\xff\x46\x4b\x8a\x7e\ +\xfa\x9a\x89\x0f\xc5\x63\xc1\x40\x1b\x7b\xfc\xf2\xaf\x3e\x44\x66\ +\xcf\xf8\x50\xea\xef\x77\xb6\x78\x00\x63\xf8\x7c\x32\x74\x00\x1e\ +\x4d\x6b\xdd\x1a\x24\x1b\x07\xda\xa6\x1c\xd0\xd2\x62\xce\x61\xb5\ +\xd4\x0c\xbc\x5a\x90\x45\x09\xfd\xf5\x18\x46\x39\xb3\xaa\xa0\xda\ +\x54\xe4\xfe\x96\x90\x87\xad\x85\x9d\x98\x42\xa7\x77\x59\x57\xec\ +\xba\xa2\x7b\x22\x0d\x9c\xe6\x6d\xdc\xa7\xce\xf9\xc0\x0d\x10\x36\ +\x75\x70\x20\x3d\x57\xc0\xd8\x9b\x6d\xb7\xc1\xba\xcd\xd7\x36\xfd\ +\x5f\xd9\xb8\x1e\xb5\x96\x6b\x5a\x4a\x70\x24\x33\xb0\x15\x2a\x03\ +\xdc\xf6\x4e\x57\x39\x37\xc5\x82\xba\x09\xe0\x8a\x18\xd1\x5c\xd1\ +\x2b\xc5\x26\x0b\x90\xbb\x05\x42\xf8\xba\x54\xdd\x94\x4a\xeb\x7a\ +\xa5\x9f\x66\x4b\x94\x52\xa8\xf9\x1e\xb9\x5b\x40\x96\xb3\xf5\x52\ +\x16\x59\xa9\xc1\x9b\x99\x05\x8a\xb9\xbe\x96\x5b\x88\x43\xfd\xb8\ +\x2d\xa1\x14\x0d\xbf\x35\xab\x17\x34\xe5\xa2\xed\xc3\xae\xe5\xf6\ +\x47\x59\xd5\x32\x71\x90\x05\x67\x01\x5c\x88\xc3\x89\x2b\x61\x4b\ +\xce\xda\xae\xab\xe8\x0a\xc1\x6c\x02\x83\x99\x96\x03\x87\xd5\x92\ +\x57\xdf\xff\xc0\xab\x05\x6c\x19\x93\xb2\x73\xef\xbb\xe9\xe8\xef\ +\x2c\x58\x2d\x90\xaf\x5e\xeb\x1d\x72\x90\x70\x31\x19\x73\x98\x8c\ +\x98\x4c\xd3\x56\x15\xaf\xcc\x0a\x67\xa7\x59\x67\x22\x48\x36\x94\ +\x4b\xfd\x5d\xac\xaa\x0a\x56\x21\xfe\x48\x2f\x6c\xcb\xa1\x26\x86\ +\x85\xaf\x8f\x86\x61\xd9\x3f\xa9\xd4\x55\x9d\xd1\x91\x26\x6e\x94\ +\x84\x9b\x8b\xb4\x63\x1f\x57\x57\xe2\x74\x2e\x42\x49\x45\x27\xaa\ +\x38\x48\x75\xe4\x4a\x68\xf6\xb5\x4c\x5b\x36\xae\xfb\x4d\x1b\xad\ +\x11\x2c\x6a\x32\x30\x47\xc0\x75\x60\x3d\x62\xe2\xda\x56\x13\x44\ +\x48\x04\xc2\x1d\x25\xd4\xa7\x02\x47\x8e\xa9\x33\x97\x9b\x50\x4a\ +\x22\x44\x44\x98\xf9\x60\x16\x76\x9b\x2c\x00\x16\xa4\x72\x07\xd9\ +\x54\x33\xe6\x7c\xc5\xbb\x65\xc9\x44\x7e\x64\xdb\xbf\x22\x3e\x54\ +\x06\x88\x3b\xf0\x04\x78\x8a\x78\xe5\x43\x08\x6b\x4f\xd5\xb9\x09\ +\x2f\x63\x58\x09\x5d\xd5\xcb\x72\x5b\x5f\xd2\x36\x5c\xaf\xcb\xda\ +\x53\x0c\xa3\x3e\x6b\xb9\x65\x68\xf3\x06\x93\x7b\x67\x51\x85\x59\ +\xc4\x30\xee\xff\x7f\xab\x98\x19\x26\x4e\x8e\xc4\xc7\x39\x79\x61\ +\xf3\x0c\x7a\xc1\xa7\xaf\x0f\x0e\x92\xd0\x17\x7c\x18\x4d\x18\xfe\ +\x6c\xc2\x37\x7f\xfe\x0d\x37\x7f\xfb\x1d\x00\x3f\x7d\xa8\xa9\xf5\ +\x62\x5c\x3b\x28\x77\xcb\x05\xe3\xa7\x4f\x18\xcc\x2e\xf8\xcc\xaf\ +\x0c\xfb\xae\xb4\x55\x58\x6a\x17\xc3\x3a\x1a\x96\x89\x2d\x98\x2d\ +\x90\xef\xbe\x5f\x3a\x57\xa2\x5c\x2d\xe8\xf3\x80\xb2\xb3\x87\x55\ +\x48\x39\x5c\xe2\x8d\x4a\xe0\x49\x4b\x8a\x34\xb5\x71\xd2\xef\x10\ +\x5a\xd0\xee\x39\x95\x06\x4e\x5a\x44\x15\x5d\xa9\x0b\x08\x5d\x0b\ +\x9d\x48\xa0\x9a\xbe\xae\x54\x1c\xa4\x87\x88\x2a\x0d\x77\x03\x52\ +\xcd\xce\xc2\x95\xa3\x6d\x65\x2e\x89\x04\xa9\xac\x8b\x1c\xf2\x18\ +\xbc\x55\x4c\xe4\x65\xad\x4c\x5b\x1b\xc0\xb5\x3f\x8c\x10\x67\x81\ +\xab\x8e\x00\x7c\x2c\x25\xdc\xfb\x29\x0f\xcf\x4f\xe9\x67\x09\x39\ +\x0a\x01\x7c\x54\x7a\xf7\x2e\x59\x72\xd8\xa4\xe0\x57\x78\xc5\x9c\ +\xc5\xed\x94\x22\x54\xed\x32\xbb\xf1\x52\x33\x51\x12\x28\x05\xf8\ +\xae\x10\x82\xd0\x80\x0d\xbc\x8c\x45\x15\x13\xec\x14\x0b\x63\xdb\ +\xad\x3d\x45\x51\xc5\x2c\xb2\x92\xc0\x33\xc0\x8e\x57\x90\xc1\x26\ +\x4c\x18\xe4\x69\xcd\xd2\x8d\x42\x89\x9f\x8d\x28\xe3\x15\x65\x67\ +\x0c\xc6\x0d\x19\x12\xb0\xce\xb4\x1f\x7d\x4e\x4a\x58\x4f\x58\xa7\ +\xd7\x54\xcb\x62\xf3\x95\x34\xe1\x28\x8f\xd1\x14\xba\xac\x51\xaa\ +\xe4\xef\xfc\xa3\x67\x8c\xdf\x3e\x61\xf9\xdd\x5b\xc6\x4f\x1f\x13\ +\x6e\x52\xc7\xba\x83\xd9\x05\x4f\x79\x6e\x4a\xd3\x95\x29\x35\x9b\ +\x85\xec\x76\xa8\x17\xa7\x8d\x94\x9b\x95\x14\x16\xbc\x45\x3a\xc0\ +\x1f\xfb\x5c\x4c\x0a\xde\x7c\xf8\x6b\x58\xc5\x64\x51\x42\x2c\x3f\ +\x92\x1d\x12\xe2\xe1\x12\xd6\x07\x2a\xff\xe2\x93\xba\xba\xea\x8c\ +\x1a\x9a\xb8\x01\xe4\x26\xa0\x1d\x78\xa5\x76\x85\x9b\x55\xb8\x52\ +\x7a\x0e\x94\x0a\x0c\x2b\x7b\x6e\xa1\x56\x1a\x4f\x58\x57\x1d\x6a\ +\xeb\xcc\x8f\x04\xbe\x94\x86\xcf\x9b\xa0\x6e\xfb\xb5\x78\x59\xcb\ +\xa9\x88\x1a\xce\x44\xdb\x1f\xe6\x4c\x04\xf4\x0c\x98\xcf\x00\xb8\ +\xa5\x8b\x55\x00\x5d\x1d\xb9\x54\x71\xd9\x08\xfa\xf8\x78\xc1\x80\ +\x70\xb1\x26\x1f\x02\x83\xda\x73\x0e\x33\x1f\x11\x0b\x17\x02\x2a\ +\xaa\x98\x40\x64\xa0\x34\x68\x8b\x5e\xac\x41\xdd\x03\x94\xcf\x20\ +\x48\xc9\x08\x08\xcc\xbf\xcd\x66\x2e\x26\xb1\xcf\x5a\xd6\xd2\x61\ +\x90\x14\x4c\xd2\x84\xfc\x53\xc5\x05\x53\x65\x1d\x1c\xa4\xa9\x88\ +\xa5\x4e\x52\x68\x4d\x5c\xeb\x68\x0b\x66\x6b\xb1\xd9\x20\x97\x95\ +\x19\x7b\x05\x5d\x11\xe9\x8a\x9e\x0a\xf0\x95\x24\xeb\x0c\x89\xc5\ +\x9a\x9f\x54\x4f\xf9\xc9\x17\x70\xff\xc5\x0b\xd6\xd5\x8a\x7c\xae\ +\x01\x35\x9b\x98\x52\xb5\x75\x4a\xa6\x38\x8a\x2a\x49\xa8\xaa\x31\ +\x9e\xb7\x3c\xf1\x96\xeb\x62\x48\xe0\x40\xf9\xa1\xf4\x28\xb2\x88\ +\x15\x15\x03\x99\x6a\x4d\x2c\x63\x4a\x99\xc2\xb0\x53\x07\xac\xce\ +\x64\x28\xbc\xc3\x4a\x97\x9d\x8f\x59\xb7\xbd\x72\x52\xee\x7e\x6d\ +\x87\x09\x2d\x3b\x4c\x50\xc7\x79\xbb\x86\x85\x5d\xde\xc1\xea\x61\ +\xf3\x7a\x11\x09\x84\x54\xee\xb1\xa8\xa1\xa3\x65\x83\x89\x9d\x94\ +\x30\x3f\xae\xb4\x8c\x6c\x41\xeb\x65\x48\xf3\x9f\xf3\x87\x95\xd2\ +\xc5\x8d\x63\x8b\xae\x51\xe4\xb0\x9f\x96\x37\xdc\x0a\x17\xc3\x24\ +\x76\xd7\x9b\xf9\x61\xfb\x3a\x1b\xf4\xc9\x5f\x0c\xa9\x82\xa9\xcb\ +\x16\xeb\xc7\x1a\x5f\xae\xf2\x5d\x39\xda\x7e\xe9\xc1\x4e\x11\x07\ +\x85\x03\xad\x8d\x61\x1e\x03\x78\x91\x95\x0c\x23\x2d\x19\x86\x95\ +\xc0\xab\x46\x2c\xf0\x5d\xe6\xb8\xa9\x9b\xfd\x6c\x84\x9f\x8d\x5c\ +\x49\x37\x8a\xef\x19\xd2\xd4\xd0\xc9\x09\x80\xcf\xbb\x13\x29\x89\ +\x0a\x11\x54\x8d\x50\x50\x0a\xa2\xe4\xc1\x21\x23\x62\x40\xb0\xbb\ +\x26\xf0\xde\x71\xe1\xad\xf8\x6a\x2f\xf9\xc9\x45\xc5\x2f\xf5\x33\ +\xfd\x78\xac\x18\x4d\x61\x38\x19\x9f\x94\xb6\x03\xef\xdd\x27\x3f\ +\xb7\x29\x2d\x9a\x21\xa3\xd1\x58\xef\x84\xb1\x4c\x29\xf9\x88\x3f\ +\x9a\x90\x1d\xba\xee\xbb\x3d\x97\x66\xab\x3a\x23\x5d\x76\xb6\xcc\ +\xeb\xd8\xf7\x48\x13\x1f\x87\x75\x2c\x38\x8b\x66\xe5\xcd\x80\xb2\ +\x4b\xa4\xb5\xaf\x88\xe8\x97\x71\xeb\xb1\xd2\x80\xce\x37\x1a\x98\ +\x23\x56\x6f\xb1\xaa\x97\x41\x15\x1b\x49\x51\xb5\x64\xc3\x89\x3f\ +\x7c\x9c\x9b\x68\x2c\x00\x2d\x5b\xdb\x05\x5d\xa0\x12\xc7\xc2\xde\ +\x51\x32\x0f\x60\xbb\x57\x28\x25\x1d\x50\x15\x31\x79\xa6\x1c\x90\ +\xbd\xf1\x90\x62\x90\x10\xc6\x25\x79\xe6\xbb\x14\x1b\xa2\xd4\x91\ +\x55\xfb\x85\xdb\x2f\x5d\x94\x64\x9d\xd3\x1d\xac\xa8\x62\x97\x27\ +\x5e\xcb\xad\x2e\x55\x67\xa5\x06\x34\x1a\xd4\xf6\x71\x1b\x22\x22\ +\xcb\xf1\x99\x69\x19\x61\x98\x38\x8a\x95\x73\x3a\x80\x86\x94\xc8\ +\x29\x3b\xe3\x23\x47\xa3\x1d\x06\x82\xd8\x2d\xec\xba\x42\x80\xf2\ +\xb5\x0f\x6d\xfe\x76\x5f\x69\x8f\xd7\x25\xe5\x6c\x9a\xb0\xb1\x18\ +\xf4\x95\x74\x59\x89\xbd\x52\x2d\x96\xf7\x49\x5d\xd1\xc5\xb2\xb1\ +\xbd\x7e\xbc\xc8\x6b\x16\x39\x36\xd5\x85\xbb\x1d\x77\xf6\x3f\x1a\ +\xc5\xb4\xdb\xb3\x9a\xd8\x8f\x2a\x94\x2d\x46\x9c\xa0\x46\xb3\xaf\ +\x27\xe3\xda\x03\x96\xed\x1d\x20\xf1\x32\xd6\xbe\xe7\xec\xb3\xd2\ +\xd9\x65\xed\xbc\xb0\x05\x78\xd3\xb1\x70\x4c\x6c\xca\xca\x2d\xb8\ +\x2a\x79\x26\xf0\x13\x9d\x08\x0a\x0d\x7c\x88\x84\xae\xcd\x09\x17\ +\x00\xca\xe8\xb5\x0a\x1d\x75\x97\x47\xbf\x2b\xd8\xfa\x29\x42\x44\ +\x48\xe5\x11\xc5\x25\x52\x49\xa2\xb8\x22\x37\x07\x68\x9d\x68\xcb\ +\x34\x58\xe3\x92\xdc\xb2\xbc\xf9\xe1\x85\xcd\x15\xdb\xc3\x9f\xbd\ +\xae\x7c\x17\xa0\x1f\xe4\xa9\x76\x25\x4c\xaa\x6d\x51\xc5\x2c\x4c\ +\x95\x70\x2d\x33\x26\x71\xdf\x69\xe0\x45\x56\x32\xc8\x53\x07\xe4\ +\x32\x5e\x39\x3d\xec\x67\x23\xd2\x78\x75\xe4\x1e\xef\xdc\xfd\xfe\ +\x61\x79\x96\x89\xf7\x4a\x91\xb2\x43\x66\x23\xee\xb3\x05\x33\x26\ +\xdc\xb3\x70\x5d\x1c\x92\x99\x0b\xef\x90\x65\xb5\xf7\x9d\xd5\x8c\ +\x5f\x4b\x17\xa3\xf7\x17\xef\xc8\x33\x9f\x65\x3e\x24\xdc\xdc\xd2\ +\x9f\x0c\xf9\xfa\x71\x8f\xa6\xc1\x7b\x5c\xaa\x76\x60\x36\x05\xca\ +\x55\x55\x31\xf0\xa0\x42\x67\xd9\xb7\x51\x46\xbc\x3e\xc0\xf8\x54\ +\x46\x1c\x83\x3a\x3c\xab\x21\x8d\x0c\x38\x66\x65\x5d\xc8\x88\x8c\ +\xcb\x60\x5d\x88\xca\xad\xc6\x6c\xf8\x27\x95\x6d\x5b\x4e\x44\x15\ +\xd8\x16\xa6\x33\x15\xba\xa8\xe1\x0b\x63\x98\x58\x36\x16\x70\xd1\ +\x89\x5f\xd1\xbe\x1e\xa4\x3e\x45\x22\x8d\xe7\x19\x6b\x29\x61\x74\ +\x70\x33\xb5\xe6\x18\x58\x05\xae\x72\x67\x3b\x3b\xb6\x4a\x01\x01\ +\x0a\x49\x64\x81\xec\x5e\x97\x91\xc7\x75\x2b\x92\x75\x34\x5c\x5b\ +\x92\x05\xaa\xf2\x81\x0c\xa1\xe2\x13\x1d\x67\x3b\x41\x28\xe2\xfa\ +\xc7\xdf\x29\xe7\x50\x60\x1d\x0c\xeb\x5c\x64\x39\x13\x80\x30\x3a\ +\xab\x87\xed\xd6\x7a\xc4\xc7\x8f\xdb\xd6\x25\xc7\xe0\x68\xc7\x63\ +\xbd\xe9\xb3\xdd\x5f\xa3\x78\x8b\x48\x07\xcc\x79\xa9\x19\x90\x0d\ +\x07\xee\xe8\x18\x49\x60\xf3\x0c\x1d\x2e\x38\xf0\x9a\x4e\x12\x41\ +\x9a\x40\x92\x9a\x0c\xf6\x15\xd3\x49\xa1\x8f\x18\x93\x0b\xfc\xde\ +\x88\xa7\xb1\x42\x66\x33\x3e\xbe\xfc\x86\x8f\x3c\xe7\xc1\x63\x23\ +\xad\xe2\xe1\x27\x43\xf5\x77\x8b\x25\xdb\xc5\x1d\xfd\xc9\x45\xeb\ +\xfe\xb8\xa9\x89\x8f\xd8\xfc\xb8\xb3\x23\xb4\xc0\xeb\x1c\x81\xd1\ +\x05\x76\x8c\xfd\xe6\xb6\x51\x45\x81\xc4\x23\xa6\x38\xb2\xd8\xdc\ +\x73\x84\x4e\x9a\xa9\xa3\x50\x8f\x05\x6a\xd4\xd0\xbb\x78\x19\x52\ +\x2a\x92\x48\x1c\x89\x04\xd9\x28\x33\x67\xed\x62\x88\x54\xf4\xcb\ +\x98\xad\x9f\xd1\x2f\x63\xca\x6a\x4b\x90\xf6\x51\x49\x0d\x9c\xc8\ +\x84\x7f\x44\xc3\x9d\xe8\x99\x9e\xb8\x4a\xf4\x4e\xe4\xc4\x09\x13\ +\x8b\x0a\xa9\x3c\x2a\x11\xe0\xa9\x82\x48\x64\xda\x86\x03\xfa\x24\ +\x90\x59\xfd\x9c\x81\x8a\x5d\x44\x53\x19\x50\x2b\xe5\x6b\x66\x36\ +\x92\x43\x58\xd6\xb6\x8f\x99\x85\xdf\xda\xfc\xdb\x16\xf8\x47\x6c\ +\x6c\xe4\xc6\x6e\xcf\xb0\xd7\xa5\x4a\xd2\x56\x15\xd1\xcf\x46\x44\ +\xf1\x3d\xeb\x46\x26\xb9\x20\x27\x25\xac\x01\x6c\x5e\x9f\x67\x2f\ +\x5d\x90\x3f\x8c\x25\xcf\x26\x0f\x5d\xae\x61\xd3\x79\xee\x02\x4c\ +\xb3\xe0\x19\x00\xf7\x85\xc7\xe0\xf0\xb0\xf1\xed\x3c\x44\x66\xc2\ +\x85\xe7\xa7\xfe\xe8\x24\x47\x6c\xfe\x71\x74\x7a\x63\xf2\xc5\x73\ +\xfc\xf9\x1b\x0e\xde\x63\x3a\x8f\x22\x5d\x5e\x27\x71\x0b\xbc\x63\ +\x40\xf7\x27\x17\x8e\x81\x87\x5e\xc9\xba\xf2\x09\xe3\x88\x78\x9d\ +\xe2\x0d\xe6\x28\x9e\x20\x3e\x91\x61\x66\xed\x69\x39\x21\x22\xa1\ +\xcb\xc1\x06\xcc\xbe\xd4\xdb\xbd\xd4\x8f\xf9\x52\xb6\xec\xb2\xc0\ +\x64\x1e\x8a\x06\xe0\xad\xee\xf5\x91\x94\x0a\xfc\x48\xcb\x05\xd1\ +\x14\x00\x86\x69\x2d\x18\x71\xcd\xa6\xfa\x59\x41\xea\xb3\xf6\x2b\ +\x92\x48\xd6\xcc\xac\xe6\x48\xd0\x1a\xdb\xd7\x00\x06\xd8\x26\x3a\ +\xb5\x5c\x50\x12\xa4\x7d\xca\x6a\xeb\x52\x6e\x51\x23\xbd\xa6\x0c\ +\x9b\xf6\x88\xd9\x71\x5e\x4e\xd8\x7e\xba\xfe\xa1\x64\x4b\x0d\x60\ +\xbd\x2d\x88\x44\x85\x52\x92\x64\x69\xbe\xfc\x81\x87\x17\x0c\x1a\ +\x7d\x76\x70\xd8\x29\x02\x51\x82\x52\x28\x15\x23\x0c\x58\x01\xa6\ +\x99\x47\x16\x57\x4e\xd3\x17\x76\xe1\xd7\x70\x60\x02\x2f\x63\x6d\ +\x16\x76\x64\xb9\x03\x35\xa2\x24\x3f\x48\xc2\x34\x69\x34\x9a\xe4\ +\x8e\x71\xf5\xdf\xbf\x65\xed\xf7\xcf\xba\x12\xf3\x6c\xce\xe2\xd5\ +\x86\xc9\xe7\xcf\xe8\x67\xe0\x4f\x6c\x61\x44\x7f\x8f\x63\x63\x44\ +\x0e\xe2\x94\x85\x79\xcb\x32\x97\x6c\x36\x7a\xa1\xb9\x04\x86\xcc\ +\x59\xe3\xb1\xfd\x3e\xa0\x3f\xd1\xa5\x66\xfd\x7b\xcf\x09\xe7\x26\ +\xa7\x3c\x1d\xd1\xf5\xfa\xc0\x9c\xed\xcb\x37\x7a\x31\x3c\x5d\xd2\ +\x7f\xb7\x25\xf9\x72\xd6\x62\x53\xbb\xd5\x72\xe0\xde\x01\x18\x60\ +\x5d\xf9\x0c\xbd\x12\x64\xda\x4e\x3a\x9e\x61\xe2\x32\x2b\x60\x58\ +\x11\x0a\xa0\x40\x22\xf0\x50\xc6\x45\x50\x40\xc7\xbe\x58\x7a\x54\ +\x51\x45\x60\x4b\xc5\xad\x36\xa4\x88\x22\xca\x60\x11\x22\xd8\x3a\ +\xf1\xaf\x5b\x8a\x32\x84\x01\x5c\x5c\x94\x64\x52\xe9\x6d\xe0\xeb\ +\xcc\x6f\xa3\xd8\x11\xa4\x3e\x65\xb5\x65\x1b\xf8\x0c\xcb\x98\xad\ +\x94\xe8\x67\xe9\x2c\x85\x8e\x66\xda\xfc\x80\xd0\xaf\x6f\xf8\x19\ +\x9d\x24\xe3\x90\xf6\x29\x1a\xcd\x97\x3d\x62\x76\x22\x73\xad\x52\ +\x4d\x00\x1f\x5f\x36\xbe\xce\x0e\x6f\x8b\x0e\xd1\xe0\xdf\x91\xcd\ +\x30\x00\xae\x8a\x8d\x0d\x91\x1e\xc9\x89\x1a\xc0\x7a\xab\x8b\x09\ +\xb6\x22\x88\x10\x47\xa5\x08\x0d\x5c\x5b\x20\xb1\xa5\xe6\x49\x96\ +\xb3\xf6\x14\xf1\xa1\x22\x0c\xa3\x9a\x89\x1b\x9e\xb1\x2e\x67\xe7\ +\x2c\xca\x80\xa9\x1f\x38\x56\xd6\xe5\x6f\x28\xdf\x55\x75\x45\x6c\ +\xf1\x3d\x0b\x60\xf5\x32\x60\xe0\xdd\x39\xb0\xcc\x06\x3e\x55\x30\ +\x65\x34\x1e\xb0\x5a\x6e\x1a\x7f\xd5\x7d\xbd\xe6\x32\xdb\x47\x93\ +\x81\x03\x6f\xdf\xe4\x3d\x6e\x57\x25\xbb\x72\x41\x6f\x55\x72\x98\ +\x68\x81\x3b\x1b\xe9\x9d\x77\x38\x99\xb2\x5f\xac\x51\x4a\xd1\x15\ +\xc9\x89\xe5\xe6\x9b\x1d\xd1\x63\x4a\xc5\x9c\x75\xe5\xb7\x81\xdc\ +\xac\x14\xf7\xd7\x94\xdb\xe1\x49\xe8\xdf\x55\xec\x02\x22\x8a\x48\ +\xd2\x95\x1e\x45\x54\x21\xa4\x87\x32\x7a\xb7\x59\x81\x73\x8b\x32\ +\x23\x0f\xb4\x5c\x88\x40\x28\x50\x03\x67\xbb\x95\x52\xea\xae\x65\ +\x22\x7c\x35\x27\x03\xf2\x55\x48\x16\xe7\x70\x00\x9f\xd0\x24\xdb\ +\x42\xed\xc2\x89\x9c\xb8\x71\x84\x89\x8c\xf4\x00\xed\x37\x27\x54\ +\xa7\xb5\x3c\x67\xa1\xe9\x18\xa2\xdc\xef\x89\x92\xb0\x4e\xb1\x19\ +\xf3\x5e\x9d\x69\xf6\xac\xce\xb0\xb1\x2d\x4f\xb7\xb5\x70\xa3\x5d\ +\x49\x05\x78\xe3\x1a\x7e\xc5\x20\xa1\xb0\x5a\x57\x65\x74\x7a\x53\ +\x0e\xbb\x66\x79\x25\xa3\xa8\xa6\xa8\xe5\x9a\x55\xb6\x67\xc4\x80\ +\x2c\xae\xc8\xe7\x7b\xe7\x6e\x0c\x07\x1d\xe6\xc5\x0e\x44\x0d\xe4\ +\xb5\xa7\x40\xc2\x10\xe1\xaa\x82\x6b\x4f\x31\x34\x4c\x6c\xf5\x32\ +\x71\xe8\x4a\xd5\xfd\x4d\xc9\x7a\x52\x34\x98\x38\x24\x5f\x6f\x08\ +\x27\x11\x53\x86\xae\x73\xa2\x3f\x29\x98\x4c\xe0\x62\xf2\x33\xf6\ +\x8b\xef\xf1\x99\x32\xf6\x4a\xf6\x95\x6e\x52\x7d\x61\xed\xb2\xb1\ +\x0f\xcb\x52\x6f\x81\x4e\xdc\xe3\x90\x35\x9c\x8e\xc6\x63\x4f\xbc\ +\x3e\xf0\x14\xc6\x3e\x45\x2c\x08\xde\x67\xfc\xdb\xf9\x96\xc3\x6a\ +\xc9\xaf\x98\x58\x67\x90\x05\xf8\x22\xc5\x25\x7b\x4c\xea\x4f\x4b\ +\x1c\xc9\x76\x71\x47\x32\xf1\x9d\x94\x38\x06\xb2\x00\x28\x27\xae\ +\x80\xd2\x64\x65\x9d\x9d\x30\x01\x74\xeb\x36\x78\xb2\xb6\xc6\x02\ +\x63\x7d\x15\x06\xb8\x2e\xd0\xde\xd0\xb9\x42\x2a\x23\x87\xf2\x96\ +\x13\xa1\x6d\x9a\x43\xa3\xb1\x32\x22\xee\xf4\x28\xc5\x54\x5b\x27\ +\x22\x32\x5b\x3d\xeb\xa2\xea\xc7\x44\x91\xa0\x30\xba\x56\xb7\x31\ +\x45\x6e\xdb\xea\xa8\x33\x00\x96\xe6\xf0\x2c\xa5\x32\x76\x4c\x64\ +\x42\xef\x25\x42\x54\x2e\x3b\x21\x1a\x8b\xba\x73\x00\xf6\xc8\xd8\ +\xf8\x15\xc9\xa1\x3c\xe9\x70\x96\xd6\x6b\x1e\xd7\x11\xff\xad\x9f\ +\x36\x58\x22\x43\x08\xdb\xb2\x94\x35\x58\x58\x7f\x6a\x12\x1c\x60\ +\xe0\xb1\xc6\xd3\x95\x3f\x20\xce\xbc\xba\x64\xed\xa4\x9d\x62\x10\ +\x17\x14\x55\xec\x00\x9d\x15\x01\x59\xc7\xd3\xc9\xba\x24\xd5\x76\ +\x5c\xec\xd7\x00\x8e\xdb\xeb\xf2\x66\x79\x24\x0c\x23\x92\x38\x61\ +\x32\x9d\xd5\x8c\x3f\xe8\xf0\xf4\xf1\x15\xc3\xc9\x98\x07\x5f\x7e\ +\xc1\x83\xc7\x3d\x18\xfb\x74\x27\x43\xc6\x13\x03\x5e\x03\x4e\xb7\ +\x35\x51\xcf\x4e\xdc\x70\x3a\xcc\x63\x55\xb9\x6a\xbd\x26\xc8\x14\ +\xc5\xa3\x98\x27\x13\x0d\x56\xdb\xad\xdd\x89\xf5\x71\xb4\xcc\x0a\ +\x17\x4d\xfd\xb1\x4b\x93\x85\x8f\x17\x76\xc7\x76\x5d\xba\x3d\xe0\ +\x97\xd2\xe3\x60\x80\x77\x68\x54\xdb\x9a\x16\x98\x03\x76\xc3\xdb\ +\x15\x0d\xbd\xdb\x64\xd0\x33\xc7\x5f\x10\x11\xd1\x24\x24\x4b\x2e\ +\xf0\x45\x0d\xd8\xaa\x1f\xeb\x34\x5c\x54\x39\x97\x57\x82\x03\x27\ +\xc7\xc5\x68\x0b\xda\xa6\xa1\x26\x74\x01\x46\xcb\x14\x79\xc6\x6a\ +\xf1\x5a\x1d\xd8\xad\x05\x89\xa9\xd6\x09\x11\xe9\xb6\xfd\x8e\xef\ +\x40\x6b\xc1\x7c\x0c\xea\x3c\x2e\xdb\xa1\x21\xd0\x92\x41\x94\xad\ +\x56\x26\x5b\xec\xf0\x2f\x9e\x52\x0c\x1e\x90\xc7\x25\xfe\xc5\x53\ +\xdd\x35\x1d\x47\x84\xd3\xae\x91\x1e\xb5\x2b\xb1\x34\xbe\xe9\x02\ +\xdf\xb1\x70\x7c\xa8\xc8\x3a\x9e\xc9\x73\x68\x3d\xbc\xc8\xca\x16\ +\x13\x77\x46\x55\x43\x5e\x68\x67\xc2\x76\x44\xef\x95\xe2\xd5\xcb\ +\x5f\xe8\xac\xef\xa6\xc4\xdf\x7e\xa0\xb8\xff\x86\xe2\xfb\xb9\x66\ +\x57\x13\xc2\x71\xdb\x26\xdb\x36\xfe\xdf\x6f\x6f\xf5\x76\xb1\x86\ +\x65\x49\x55\xae\x38\xac\x6a\x0f\xbc\x13\xf7\xdc\xc8\x80\xe9\x17\ +\x9f\xb3\xaa\x2a\x3e\x2e\xee\xe9\x4e\x86\x94\x62\xd6\xc8\x9b\x27\ +\xf8\xe8\x80\x7d\xdd\x28\x7a\xe1\xd8\x37\x59\x04\x2d\x36\x06\xc8\ +\xfd\xad\x2b\xa4\x9c\x6b\x52\x0d\xab\x28\x03\xe9\xd5\xe1\x19\x03\ +\x13\x81\x70\x5e\x71\x2d\x13\xbc\x56\x74\xb2\x95\x87\x20\x42\x52\ +\xb5\x53\x6a\x22\xd7\x93\x85\x9a\xa5\xe4\x46\x93\xe7\x71\xb9\xd8\ +\x39\xbe\x4a\x9d\x3c\x2e\xed\x82\xcd\xde\x67\x26\x02\x49\xa0\x5f\ +\x64\x7a\x87\x20\xd2\xbe\xb0\x69\x41\xe2\x4c\x97\x73\x93\x85\x2d\ +\x2b\x4b\xe5\xe1\x99\xd8\xa9\x05\xad\x95\x15\x76\xf2\x8f\x03\xb0\ +\x59\xcc\xe9\x49\x40\xa5\xb3\xd8\x94\x52\x08\x3b\x94\x44\x98\x8a\ +\x5c\x4f\x03\x39\x30\x56\x5c\xd1\xf0\x92\x6d\x89\x7a\x58\xe9\x06\ +\xad\x45\x55\x7b\xc8\x71\x50\xe0\x6f\xfa\xc4\x83\xed\x89\x76\x76\ +\x0b\xbe\x46\x1a\xee\xb0\xf2\xf4\x5a\xcb\xb1\x73\x6a\x5c\x0a\x78\ +\x9b\x49\x7e\xc8\xde\xf1\x2c\x7e\x4c\xc6\x90\xb2\xd4\xef\xe9\x57\ +\x3e\xf1\x62\x8d\x9a\x24\x0c\x97\x25\xeb\x71\x45\xb9\xd0\x7a\xb7\ +\x4e\xc7\x4d\xdd\xa2\x6e\xbc\xd2\x8b\x39\x7f\x92\xa0\xa8\x28\x17\ +\x23\xfc\x49\x41\xb6\x80\xb7\x8b\x35\x89\xb7\xe0\xd9\xaf\x3c\x41\ +\xc4\x7d\x3e\x6e\x34\x03\xaf\x4d\x85\xf3\x84\x55\x0d\x13\xd7\x8d\ +\xa2\x5a\x4e\x00\xdc\x72\xc0\x67\xc1\xc5\xe2\x21\xc1\xf4\x00\xf8\ +\xe4\x65\xff\xbc\x17\x6c\x41\x3c\xdf\x54\x44\xb9\x42\xe6\x25\x22\ +\x54\xd8\xce\xa4\xb2\x55\x46\x8e\xf0\xe5\xf9\x84\x82\x6a\x65\x2a\ +\xda\xc5\x0d\x0d\xe0\xcd\x49\x41\xc2\x5e\xfb\x54\xde\x41\x0a\x41\ +\xa4\x54\xed\x0f\x3b\xc0\x4a\x22\x21\x74\xa9\xb9\x51\xbd\xcb\x02\ +\x9f\x7e\xea\x53\xcc\xaa\xd6\xdf\x64\xab\x68\x9f\x5a\xd0\x35\xdb\ +\x93\xd4\x32\x68\x69\x62\xeb\x50\x0c\x4e\xfe\xbd\xd9\xc9\x6d\xa1\ +\x62\xc7\xc8\x1a\xc8\x3e\x42\x64\xee\xd8\x65\xc3\x40\x81\x97\xb5\ +\x87\xac\x54\x31\x50\xb2\xde\xed\xb5\x5f\x5c\x04\xf4\xb3\x88\x6d\ +\x2c\xc9\x81\x69\xa3\xec\xdc\x04\xb0\x5d\x04\x0e\x2b\x41\xb9\x08\ +\xd8\x0e\xf4\x2a\xc3\xb2\x73\xea\xe4\x46\x8f\x19\x13\x7e\xfa\xf8\ +\x67\x6e\x41\x96\x15\x11\x79\xa6\x18\x32\xe7\x36\x8e\x18\x02\x6f\ +\xa3\x1d\x43\xba\xf8\x93\x02\x1f\x5d\xf2\x1e\x8d\xa6\x4c\x0f\x4b\ +\xfc\xec\x0b\xc6\x23\x8f\xca\xd7\x12\xc1\x5f\xac\x18\x4e\xc6\xdc\ +\x4f\x2a\xfc\xc5\x8a\xf1\x17\x63\xc2\xc5\x92\xbb\xc5\x90\x37\xef\ +\x16\x4c\x33\xd8\xee\x74\xa5\xed\xcb\xa1\x47\xc7\x24\xeb\x9a\x12\ +\xa2\x29\x29\xf2\xec\x3c\x0a\xd2\x49\xe1\xa6\x6d\x08\x30\xc9\xb8\ +\xba\x68\xd2\x64\xe4\x50\x9b\xfd\x15\x03\x7c\x36\xb9\xa0\x13\xe2\ +\x1a\x3a\x05\xc2\xb8\x13\x19\x05\x10\x50\x39\xc6\x16\x26\x5b\x21\ +\x8e\x18\xd9\xea\xd9\x54\x7a\xf4\x3b\x7b\xb2\xc3\x00\xc8\xd9\x02\ +\x81\x54\x10\x9d\xd6\xdb\x4e\x8a\x1f\x8e\x89\x4d\x5a\xcd\x54\xea\ +\x22\x03\xe6\xd6\x7d\x40\x50\xc6\x4e\x4b\xdb\xe6\xd0\xf6\xac\x89\ +\xcc\xfd\x8d\xc7\x9a\xb8\x32\x0b\x33\x08\x8c\x4c\xa8\x5a\x5a\xf8\ +\xf4\x62\xbc\xe6\x62\xe3\x16\x27\xea\xcc\x0e\xa2\x41\xed\x1b\xfb\ +\x6d\x4e\x60\x3e\xaf\xe8\x09\x0d\xe6\xaa\xd6\xc2\xe0\xeb\xad\xd0\ +\x1d\xde\x76\xc1\xb3\xde\xc1\xb0\x17\x01\xca\x01\xbd\xc9\xca\xa0\ +\x47\x02\x9c\xbb\x24\xb1\xa9\xe0\x21\x18\x3f\x7d\x42\xb8\x49\xe9\ +\x4e\x9e\xd1\x05\xa2\x89\x62\xd3\x89\x74\x03\xd0\xea\x8e\x71\xef\ +\x8a\xe5\xee\x9a\x71\xef\x8a\xbb\xc5\x92\xe9\xa4\x60\xfe\xca\x94\ +\xd2\x78\x69\xaa\x6a\x13\x57\xa3\xbb\x5b\x4c\x18\x32\xe7\x8e\x29\ +\x77\x8b\xa5\x71\x78\x34\x83\x87\xbb\x3d\x79\x16\x71\x31\x9e\x50\ +\x4e\x86\x28\x8a\x13\xd9\x69\x01\x6c\x01\xb9\x1b\x97\xb0\x80\x64\ +\xe2\x73\x28\x3e\xf0\x78\xf1\x84\x74\x52\xb0\xae\xec\x20\x2c\xce\ +\x96\xaf\x7d\x52\x5d\xec\x18\x0c\x62\xa7\xe5\x06\xa6\x75\x48\x49\ +\x2d\x27\xea\x92\x70\x44\x61\xb5\x70\x43\x5b\xda\x38\xa6\x38\x93\ +\x03\xf6\x91\x26\xc0\xb1\xa9\xa1\x6a\x16\x91\xcd\x7e\x0c\x3b\x8c\ +\x30\x6a\x15\x94\xdb\xcd\x49\x91\x59\xb0\x49\x03\xee\x08\xd9\xaa\ +\xf4\xcd\x92\x82\xc2\xf6\xcb\xd9\xd6\xfc\xc6\xce\x55\x11\x23\x0c\ +\xd0\x76\xc6\xd7\x3d\x76\x29\x3c\x91\xa1\x96\x7b\x2a\xd1\x6b\x31\ +\xf1\xd6\x46\x34\xe3\xa3\x24\x55\x30\xe0\xb0\xd9\x20\x06\x89\x03\ +\xb6\xb2\xfa\x18\x9c\x57\x8c\x5b\xe4\x95\x2d\x06\x0e\x3c\x3d\x39\ +\x28\x35\x16\x5d\x62\x99\xdc\x56\xf6\x8c\x55\xb7\x46\xdb\x6c\x04\ +\x85\x8b\x74\x5a\x56\x76\x51\xcd\x66\xb0\xde\xb2\x31\x90\xc4\x39\ +\x12\x1d\x74\x0f\xc2\x80\x57\x1f\xfe\x8a\x7e\x57\x10\xee\x04\x79\ +\x76\xad\xa5\x6f\x3e\xe4\x62\x78\xed\x7a\xeb\xc2\x18\xe6\x8b\x88\ +\x3c\x96\x84\x59\x44\x1e\x0b\x53\xc8\x91\x0d\xfa\x92\x6c\x7a\x13\ +\xf2\x9d\x74\x05\x9d\x61\x35\x61\x34\x9a\xea\x46\xd9\x09\xbc\x01\ +\x62\xd6\x08\x1e\xb4\xfe\xed\xad\x30\x90\x92\x2c\xf3\x82\xa9\x17\ +\xba\x8e\x98\x4e\xf0\x19\xe9\xa4\x40\x72\x4f\xd4\x82\xb0\x0d\x18\ +\x0d\x1b\x8b\xbc\xc4\x44\x31\xed\x62\xce\xe8\x5d\xd5\xe8\x81\xb3\ +\xb2\xa0\x38\xb3\x60\xb2\x61\x20\xa1\x6c\x0f\x5e\x0d\x3e\x69\x3d\ +\x61\x36\x8d\xc7\x3e\x7d\xb1\x15\x38\xcb\xa6\x16\xe6\x91\x6d\xbb\ +\x6f\x48\x15\x07\x6f\xc3\xca\x49\x54\x71\x48\x03\x48\x24\xa8\xa8\ +\x9e\x94\x69\x62\x97\x98\xc5\x9b\x05\x74\xaf\x31\xc9\xd2\x02\xd8\ +\xca\x09\x31\xee\x1a\x56\x8e\x1c\x13\x27\x87\x92\x66\x48\x2c\x63\ +\x4f\x6c\xf4\x71\xb0\xd1\x51\xcd\x30\x36\xa0\xb3\x9f\xd3\x00\xad\ +\x6a\xe6\x2b\x44\xc9\x61\x37\x77\xce\xc5\x61\x37\x87\xa8\x24\x69\ +\xac\x13\x6a\x56\xcf\x48\xbd\x92\x40\xfa\xf8\xa2\x44\x1c\x22\x07\ +\xe0\xb5\xa7\x75\xf6\x49\xca\xed\xf8\x90\x4c\x08\xdc\xb3\xb9\x87\ +\x8b\xe1\x9e\x71\x3c\x26\xcf\x14\x0b\x25\x19\x18\xef\xfa\x62\xb8\ +\x67\xdc\xbb\xa2\x8c\x57\xae\x6b\x63\x70\x90\x04\x19\x74\x26\x3d\ +\x14\xa6\x0b\x64\x3a\xf9\xd1\xdf\xd0\xc6\x2f\x2b\xff\xd2\x84\x82\ +\x16\x74\xbd\x91\x2b\xbf\x5b\x09\xe1\xb6\x26\x60\x34\x0e\x77\xbc\ +\x5d\x94\x8e\x8d\xfd\xc9\x82\x74\x31\x21\x99\xcc\x18\x2c\xbe\x85\ +\xe1\x57\xba\x3d\x69\x7b\xa1\x19\xdc\x3a\x1c\x59\xe2\x2c\xb6\xd0\ +\xfa\xbe\x55\x54\x51\xca\xb8\x66\xd7\x48\xb4\x17\x69\xcd\x85\x9f\ +\x54\xf8\x4d\xf7\x41\x6d\x80\x01\xd2\xa6\x39\xc0\xb0\xf0\xce\x59\ +\x74\x41\x43\x38\x14\x48\x02\x3b\x53\xc2\x14\x43\xb6\x41\xe6\xc8\ +\xd7\x8d\x89\x35\xc5\x01\x54\x04\xaa\xd6\xc3\x56\x7f\x46\xa6\xca\ +\xe7\xba\x76\x45\xd5\x72\x20\x9a\x96\x9a\x65\xdf\xe3\xaa\x9d\x6d\ +\x16\xf5\x44\x81\x5a\xee\x9d\x2e\xb2\x4c\x7c\x2a\x26\x72\x0a\x21\ +\x08\x94\xc2\x0b\x29\xf9\xbd\x95\x00\x00\x20\x00\x49\x44\x41\x54\ +\x06\x6c\xf7\x77\x24\x45\x8f\xce\x80\x46\x67\x89\x72\xec\xac\x7d\ +\xe4\x7a\xf8\xa0\x10\x82\xd4\xcb\x48\x2a\xed\x4c\xf8\x55\xc6\x6e\ +\xa7\x0b\x0b\xc1\x46\x5b\xa9\x5f\x4c\x47\x2c\x6d\x2b\x96\xf9\xda\ +\x8a\x95\x2e\x96\xac\x1b\x9e\xf2\x8f\x01\xb8\xd9\xf2\x14\x74\x57\ +\x14\xbd\x09\x4f\xe2\x88\xee\x95\x68\xb5\xf2\xd7\xbf\x6a\xcf\x65\ +\x94\x01\x96\xa3\x89\xbb\xbe\xc8\x22\x4a\x5b\xf2\x68\xb4\x51\x35\ +\x27\x13\x09\xf1\xce\xe8\x7d\xc9\x3a\x8b\x78\x44\x40\x35\xdc\x00\ +\xbd\x96\x23\xe1\xa4\x84\x19\x66\x68\xc7\x66\xf5\x96\x3e\xfe\x64\ +\x41\xb9\x98\xe0\x4f\x16\xc0\x8c\xcd\xe4\x2b\x2e\x4c\x7b\x52\xd9\ +\x2f\xf0\xb7\xfa\xf5\xf6\x3d\xf6\x4a\xe9\xb2\xb3\xed\xc0\x08\xa4\ +\x6c\x31\x5e\x13\xb4\xcd\x7f\x6a\x57\x7a\x0e\xc0\x71\x51\x92\x89\ +\x9c\xb8\xe8\x91\x1d\x36\x2d\x85\xab\x7d\xdb\x1e\x19\xd0\x27\x62\ +\x6b\x80\x6b\x8b\x2b\x4d\x19\xd2\xeb\x47\xf8\x69\x40\x91\xa4\x48\ +\xe9\x1d\x39\x15\x5e\xad\x9e\x8d\x0e\xce\x84\x47\xac\xac\x7f\xbc\ +\xa3\x93\x14\x3a\xb3\xa0\x70\x4c\x6c\x01\xaa\x27\x60\xd6\x32\xa8\ +\xf7\x09\x9f\xd8\x16\x3b\x6c\x76\xc2\x96\xa3\xb7\x45\x87\x04\xad\ +\x7f\xad\x53\xb1\x53\xb9\x63\xe3\x3e\x17\x1a\xc8\xef\x2b\x78\xd4\ +\x6f\x15\x3b\x9a\x3e\xb2\x65\x66\x9f\x0c\x5d\x14\xcc\xb8\x55\x8a\ +\xe2\xed\x82\x0f\xab\x5b\x76\x77\x7b\x3e\x2c\xdf\xf2\x48\xe4\xfc\ +\xd5\x93\x9f\xf0\xd3\xe7\xda\x76\xaa\x06\x53\x3a\x55\xc2\xd5\x64\ +\x4c\xe0\x95\x40\x41\xbe\x92\x70\x26\xe2\xd9\xb4\xdd\xec\xed\xf5\ +\x22\x73\x76\x1f\x71\xa9\x3b\xb0\x33\x93\xcb\xcb\xd2\xd3\xd7\x34\ +\x0f\xdd\x71\x42\x9a\xa5\x5a\x5f\x37\x82\x44\xee\x08\x9a\x09\xfa\ +\x2c\x59\x2e\x20\x98\xe0\xbc\xe4\x92\x7b\x32\x86\x8c\x58\x81\xf2\ +\x4d\xa1\x83\xf6\xe2\x4e\x49\xba\x22\x22\xdc\xdc\x36\xdc\xa9\x19\ +\xcb\xe2\x9a\x31\x57\xa4\x8b\x92\xab\xa9\xfe\x4b\x9a\x4c\xdc\xf2\ +\x8a\x15\xba\xec\x8c\x49\xa4\x45\xd1\x84\x54\xea\x6a\x91\x30\x76\ +\x1a\x26\x81\x56\x18\xe0\xb9\xd2\x85\x19\xc8\x9d\xf5\xe3\xfa\xe7\ +\x92\xbe\x2b\x2b\x47\x91\x60\x7b\x34\x1c\xb0\xa9\x77\xb7\x48\x44\ +\x14\xd5\x95\x3f\x24\x24\x11\x30\xa5\x44\x11\xa4\x1e\x45\x52\x3a\ +\x2d\x8c\x8a\x9c\x6b\x81\x52\xc4\xf4\x88\x84\x44\xa8\x8c\x83\x9e\ +\xd3\xd3\xea\xa1\xeb\x89\xc8\x01\xd3\x5e\xb7\xba\xb8\x82\x93\xf6\ +\x24\x77\x5b\x05\x48\xea\x8a\x5d\x4e\x45\x1f\xc1\x76\x0f\xc9\x26\ +\x85\x60\xe0\xd8\xb8\xe9\x1b\x57\xfe\x0c\xaf\xeb\xa1\x96\x8a\x24\ +\x38\xb8\xb2\xb4\x17\x0c\x34\xd0\xb7\xd7\x6c\xc3\x09\x87\x4d\xca\ +\xdb\xbb\x0f\x6c\xb2\x15\x3f\x7c\xfb\xbd\xfe\x61\xa3\x4b\xd4\xf5\ +\x3b\xae\xf7\x1a\xe4\x7f\x79\xb7\x81\x3f\xff\xd7\xfc\xcb\x8b\x01\ +\x5f\x3e\xec\x90\x2d\x0b\xe2\x71\xc0\xdf\xfb\xfa\x37\x99\x3d\x0b\ +\x18\x8b\x3e\xb3\xcf\x1e\x30\x59\xc3\x75\x67\x8f\x98\x07\x84\x93\ +\x91\x2e\x96\x78\x05\x1e\xc9\x09\x30\x3d\xb5\x23\x4e\xba\x75\x07\ +\x36\xb0\x5e\x64\xc4\x41\x41\xb6\x08\x18\xf6\xba\x8d\xce\x6b\xbd\ +\x28\x94\xd9\x0c\x50\x8e\x6d\x93\x38\x41\x70\x8f\x6a\x4d\xe0\x94\ +\x2c\xb2\x31\xdb\xf8\x9a\x07\xf1\xd8\xb1\xeb\x7a\xb7\xe7\x89\xd7\ +\x83\x46\x50\xc8\x02\xf8\xb8\xd8\x91\x0f\xea\xeb\xe9\xc2\xca\xc9\ +\x7b\x60\xc2\x87\x6a\xc1\x8c\x19\x61\xb7\x51\x59\xb5\xd5\xbe\x6c\ +\x4d\x57\x24\x86\x89\x5b\xae\x6d\xbb\x4d\xc8\xea\x61\xcb\xa0\x96\ +\x4f\x14\x15\x42\x49\x5d\xc9\x33\x00\xb7\x56\x17\x46\x0a\xb8\x09\ +\xf2\x26\xff\x10\x48\x0f\x19\xd1\x7a\x3f\x5b\x1c\xd1\x96\x9a\xfe\ +\x1b\x92\x08\x48\xeb\x50\x7b\xa4\x1a\xf6\x9c\x93\x17\x0a\x44\x84\ +\x42\xb5\x7a\x1a\x6c\x5e\xa2\x6d\xff\x65\x8d\x83\xe5\xa9\x57\xdc\ +\x6a\x4f\x32\x5e\xf1\x71\xe9\x19\xd0\x63\x5f\x8b\x3b\x44\x3c\x3d\ +\x11\x18\x91\xc8\x08\xd1\xab\xfd\x3c\xee\x12\x66\xba\x2c\x1d\x6c\ +\x36\x04\x1b\xf8\xb6\x90\xdc\xbe\x7b\xc5\xab\x77\x19\xea\xfa\x1d\ +\x37\xcb\x37\xf5\x0e\x14\x6b\x6a\x98\x45\x4f\xb9\x97\x6f\x78\xf6\ +\xf4\xa7\x74\x0b\x0d\xea\xef\x6e\x0f\xa4\x77\x1b\x7e\x7a\x7b\xe0\ +\x7f\xf8\x8b\xff\x91\x17\xcf\x03\xa2\xc7\xff\x21\xff\xf1\x3f\xe8\ +\xf1\x60\xf4\x1f\x10\xcb\x15\x74\x21\xcf\xbb\xf8\x1d\x89\x57\x3d\ +\x04\x8e\x3a\xad\x9b\x15\x3c\x7a\x48\x46\x94\xdc\x33\xec\x75\xf5\ +\x00\xed\xd0\xce\x10\x6e\x57\xd1\xce\x8d\x67\x55\xce\x8d\xa9\x07\ +\xaf\x44\xb1\x62\x9f\x17\x7a\x04\x80\x29\xf5\xf7\xb3\xa8\x36\x33\ +\x1a\x91\xd4\x93\xe9\x9a\x4a\x4f\x1e\x7a\x6b\x6f\x4f\x16\x70\x87\ +\x93\x14\x0f\x17\x0b\x18\xce\xc8\xf7\x99\x03\xb2\x93\x23\xb6\x83\ +\xc5\xdf\xb7\x3d\xe4\x61\xe9\xb1\x95\xd2\x68\x52\xa9\x01\x28\x3d\ +\x8a\xc8\x00\xcf\x68\xe1\x75\x2a\x11\x89\x06\xa6\x02\x02\x93\x58\ +\x3b\x8e\xa7\xdb\x02\x48\xab\xf3\xf6\x9c\xa9\xd6\xd0\x9e\xa9\xf4\ +\xf0\xcd\x02\x4f\x2f\xec\xa4\x0b\xfc\x38\x6b\xad\xe1\x11\x97\xd5\ +\x16\x21\xa6\x28\x2a\x76\x66\xae\x84\x05\x72\xd3\x99\x50\x67\x5c\ +\x89\xe3\xdc\xc4\xb1\xfd\x66\xc3\xf1\x22\xee\x12\x66\x3e\xdb\x3d\ +\xa8\xe5\xbe\x55\x82\x6e\xca\x06\xab\x50\x42\x33\x88\xe5\xa6\x08\ +\xd8\xbc\xbb\x65\x79\x77\xcd\xdf\xbc\xc9\x1d\x38\x89\x1f\xb3\xca\ +\xbf\xe6\x8b\x81\xa2\x5b\xbc\x63\x1f\x3c\x6e\x01\x79\x16\x3d\x65\ +\x16\xa1\x1f\x7b\xfa\x53\xb6\xa6\xdf\xf7\x46\xbe\x81\xd7\x6f\xf8\ +\xfd\x6b\x9f\xaf\x2e\xbf\xe3\xf1\xd3\xdf\xe2\xcb\x9f\x8c\x08\x46\ +\xa5\x8e\x86\xae\x37\x8e\x4d\x5d\x51\x84\x7a\x0e\x73\x9a\xa5\x10\ +\xef\x48\x48\x4c\x6b\x93\x32\x91\xcd\x5e\xeb\x76\x42\xaf\x9e\x7b\ +\xd1\x92\x18\x5a\x4e\x94\x8b\x40\xa7\xe1\x0c\x4b\x87\x8d\xcc\xf3\ +\x49\x37\x89\x25\x9e\x13\x97\xc1\xa7\x14\x11\xdb\xc5\xc7\xd3\xcf\ +\x31\xda\xf8\x76\x82\xd3\xc4\xc7\xaf\xb7\x3a\x3b\x29\xbb\xa6\x65\ +\xdf\xf8\xba\xbe\x99\xe0\x6e\x17\x5c\x76\x3b\xd8\x56\x64\x81\x02\ +\x15\xa2\xa8\x78\x38\x6b\x03\xd1\x2d\xd4\x8e\xfc\x5f\xdf\xee\x08\ +\x8d\x12\x36\x47\xbd\x19\xc7\xd5\xbb\x56\xde\xd8\x31\xaf\x74\xa7\ +\x3a\x88\xec\x8e\x61\xc6\xf5\x1f\xbc\x7e\x63\x9a\x4e\xfb\x3c\x1e\ +\x9f\xb2\xd4\xf2\xa3\x56\xa5\x66\xc3\xa8\x75\x2b\x8e\x2b\x76\xeb\ +\xd8\xc7\xf7\x0b\x50\x92\x30\xbb\x38\xb1\xdc\x74\x9c\x32\xa5\xa8\ +\x12\x96\x4a\xb2\x58\x2c\xb9\xfb\xdb\x1f\x78\x69\xe6\x32\xdc\xef\ +\xeb\xe7\xcf\xa2\xa7\x20\x7f\x01\x3c\xe5\xe3\xc3\xe7\x3c\x0d\xcc\ +\x21\xfe\x16\xc2\x27\x2f\xe0\x5e\xdf\xde\x07\x8f\x99\x8f\x5e\x33\ +\x5d\x3d\x77\xe0\xee\x16\xba\x7f\xed\xdb\x1b\x8f\xf7\xea\xcf\xa8\ +\xe6\x13\x2e\xfe\xee\xd7\x8c\x45\x9f\xac\x0f\x76\xc4\xc4\xc4\x00\ +\x2b\xcf\x22\xbc\xfd\x12\x46\x38\x6d\x2b\x19\x99\xd6\x26\xad\x89\ +\xed\x10\x40\xdb\xea\x94\x92\xb7\xe4\x45\x13\xc0\x76\xa4\xc0\xc9\ +\xbf\x3d\x53\x10\xf7\x74\xff\xdf\xe4\x9e\xa6\xa5\xd3\x94\x0f\xee\ +\xfa\x27\x4e\xa1\xd0\x09\x3e\x63\x77\xf7\x81\xf1\x85\x4f\xba\x98\ +\xe8\xcc\xd0\x51\x83\x41\xf3\xfd\x5a\x4c\xec\x37\x42\xf1\x27\x8b\ +\xdc\xc0\x2e\xe5\x36\x08\x11\x35\x3a\x99\x55\x6d\x7c\x35\x1a\x33\ +\xa3\x33\xe0\x94\xb4\xa5\x84\x3c\x03\xe6\xd6\xb4\x9f\x93\xce\x46\ +\xe3\x25\xab\xfa\xb1\x43\x1a\xd0\x49\x0a\x0a\x0b\x76\x3b\x40\x45\ +\x54\x27\x65\x71\x61\x58\x53\xcf\x24\x6e\x3b\x17\x1a\xac\x09\x1b\ +\xbf\x6a\x8d\xb6\x02\x58\xc7\x3e\x9e\xaa\x88\x45\x0e\x22\x22\x38\ +\x94\xdc\xed\xef\xb9\x60\x76\x02\xe4\x55\xe5\x91\x2f\x17\xbc\x7e\ +\xbb\xe0\xf5\x9f\xfd\x6b\xae\xf7\x25\xe9\xdd\x86\xe4\x62\xd0\x06\ +\x30\xf0\xe2\xab\x7f\x00\xc0\x4f\x2e\x66\xfc\x5f\x87\x11\x7f\xbf\ +\xb3\x82\xce\xbd\xae\x52\x3d\x86\x37\xea\x9a\xd1\x7d\xce\x74\xf5\ +\xfc\x84\xa5\x01\xc6\x83\x1b\xb2\x65\xc1\x1f\x2e\xef\x78\x51\x24\ +\x3c\xfb\xf2\x09\x97\xcf\xd7\x04\xa3\xaf\x48\xb3\x1d\xfd\x2a\x6a\ +\x05\xfe\xf3\x5c\x92\x66\x11\xc4\x21\x65\x76\xcf\xf5\x62\x4f\x1c\ +\x14\x84\x59\xc4\x7a\xb7\xa7\x9f\x45\xa6\x62\xa7\xc1\x3a\x1a\x5e\ +\x1c\xfd\x00\xf7\x46\x72\xd4\xd2\xc3\x4e\x0f\xb2\x2d\x4b\x13\x11\ +\x51\x66\xf7\x67\x17\x89\x9f\xac\xd8\x0d\xda\x32\xe6\x50\x7c\xa0\ +\x77\xd1\x65\x79\x77\x4d\xef\xa2\x0b\xcc\x4c\x05\xf4\x47\xca\xce\ +\x0e\x58\x52\x1d\x85\x79\x2a\xa4\xe9\x4c\xde\x22\xf5\x4c\x09\x67\ +\x87\xe1\xba\x3b\xdc\x20\x6d\x75\xe4\x2a\x9c\x01\x63\xd0\x90\x26\ +\x67\x2b\x75\xe7\xcb\x5e\x8d\xec\x84\x6a\x06\x3c\x5a\xfa\x8c\x46\ +\x07\xc7\xb9\x2a\xa2\x6a\x1c\xfe\x43\x51\x11\x9a\x53\x1f\xb8\x8a\ +\x9d\xef\x52\xbf\x8e\x89\x0b\x91\xd2\x27\x66\x2b\xb4\x0f\xac\x94\ +\xa4\x1f\x0c\x10\x9d\x94\x2d\x29\xa2\x39\x1d\x49\x49\x3e\x2e\x56\ +\xfc\xe2\xdf\x7c\xcf\xcb\xd7\x6f\x48\xef\x74\x2e\x20\xb9\x18\x38\ +\x20\xcf\xa2\xa7\x0c\x1f\xc2\xd7\xbf\xf6\x05\x9f\x5d\x3d\xa5\x5c\ +\xf7\x99\x87\x1e\xff\x19\x70\xb3\xdc\x33\x9e\xe9\x21\x21\xcb\xbf\ +\x79\xcb\x53\x71\x05\x8f\x61\xfd\xae\xd6\xcf\x57\x5d\x9f\x3d\x70\ +\x2f\xdf\x00\x4f\xe9\xa2\x59\xf9\xe5\xab\xd7\x04\xea\x15\xd9\xe1\ +\xef\xf1\xc5\x57\xdf\xe2\x75\x9e\x52\x25\x29\xc5\xca\x07\xfa\x6c\ +\xf7\x8a\xe7\xbe\xaf\xa7\xc5\x65\x39\xf9\x62\x45\x8e\x07\x03\xed\ +\x3b\x8d\x7b\x57\x44\x13\x75\x04\xd6\xf3\xce\x73\x21\xba\x04\x6a\ +\x6f\x8a\x32\x5e\xab\x42\xb8\x57\xaa\x76\x30\x1a\x71\xcd\xba\xf1\ +\x34\x69\x6d\x8b\xde\x15\xe1\xe6\x07\x0e\xc5\x07\xc3\xc0\xba\x5c\ +\x5d\x2e\x26\x74\x02\x78\xb8\xf8\x1e\x86\x33\x42\x7f\xeb\x7e\xcd\ +\xe3\x1d\x22\xe9\x77\x08\x0f\x44\x7a\xa2\x62\x54\xb9\xe8\x65\xad\ +\x65\x95\x03\x30\x91\x3e\xac\x67\x87\x2e\x7e\x60\x60\x7a\x34\x57\ +\xa2\x06\xb0\x6c\xed\x00\x7d\xfb\x63\x2b\xb3\xc3\x44\xc7\x13\x7e\ +\x9a\x4c\xac\x1f\xf1\xb6\x15\xbd\x7e\xa4\xb3\xc2\xa2\x6a\xa5\xd6\ +\x38\x3e\xa5\x55\xe3\xf4\x60\x34\x4f\x0b\x66\xde\x51\x1c\x55\x1a\ +\x43\xe5\x9d\x48\x8a\xe6\xc2\x4e\x29\xdd\x67\x97\x31\x44\xa9\x0d\ +\x7d\x11\xbb\xbe\xba\x9c\xd2\x81\x77\x6b\x5e\x9b\x2f\x7d\x16\x8b\ +\x0d\xdf\xfd\xe5\x1f\xf3\xd2\x2c\xc6\x2c\xfb\x5a\x30\x03\x46\x0a\ +\x3c\x06\x15\xf0\xf9\x64\x4c\x32\xd1\xc5\x85\x70\x55\x71\xff\xc5\ +\x0b\xf2\xfb\x35\x9b\xfb\x3b\xe6\xbf\x35\x63\xf9\xdd\x5b\x6e\xee\ +\xee\x19\x3e\x7e\x0a\x87\x37\xac\x6f\x71\xda\xf9\xaa\xeb\x73\xdd\ +\x90\x17\xfb\xe0\x31\xdf\xde\xbc\xe3\x2b\xfe\x94\xb9\xf7\x35\xd3\ +\x2f\xa1\x58\xfd\xc4\xc8\x81\x85\x9e\xb8\xee\x5f\x81\xc9\xe3\x86\ +\x93\x11\xd3\x46\x77\x74\x84\x72\x5d\xd2\x1a\xc0\xe9\x19\x20\x9b\ +\xd0\x8e\xb2\xc3\x0c\xdb\xcf\x49\x33\x5c\x72\x2e\xcf\x25\x8c\xdb\ +\x3a\xb6\x14\x91\x2b\x70\xd8\xad\x67\xe6\xd8\x5d\x97\x57\x3c\x0b\ +\x4a\x7a\x17\x5d\x76\x77\x7b\xc7\xc6\x37\x8b\x2f\xe8\x15\x77\x84\ +\xe5\xdf\x39\x49\xc1\x95\xa6\x33\x3b\xdd\x1e\x08\x3b\x48\x94\xf4\ +\x10\x78\xad\xc6\xce\x52\x7a\xe6\xd4\x5e\x9e\x69\xee\xd4\x95\x39\ +\xa1\xb4\x1f\xdc\xca\x50\x28\xe9\x5c\x09\xfd\xe3\x5a\x45\xa4\x41\ +\x1b\xa4\x3e\x71\xb5\x25\x13\xa7\x5a\xda\xce\x21\xb6\x47\x02\x89\ +\x47\x5c\x94\xb0\x3e\xe8\x25\x42\x3f\x6e\x2f\x10\x8e\x00\x2c\xa8\ +\x58\xd8\x40\x90\xd2\x3e\xb7\x70\x61\x9c\xc8\x01\x59\x1d\xb1\xf2\ +\x49\x2a\xaa\x31\x3c\x51\x88\xc8\x01\xd4\xc7\xd3\x41\xa0\x32\x21\ +\xa7\x64\x4b\x46\x9f\xd8\x9d\x16\x01\xe0\xe3\xe2\x3d\x2f\x7f\x71\ +\x7d\x16\xc0\xcb\x71\xc4\x78\xa9\xbf\x99\xeb\x7d\xc9\x0b\xe0\x90\ +\xbd\xe3\xcf\xfe\x48\x31\x1e\x8f\x78\xfe\xec\x21\xa3\x2f\x86\x8c\ +\x83\x29\xab\xc9\x03\x1e\x3d\x19\x72\x2b\x61\x91\x57\xa8\x59\x84\ +\xb8\x97\xdc\xdc\xc1\xd0\xb0\xf2\xf7\x1b\xc1\x28\xd4\x32\x46\x33\ +\x32\x5c\x75\x35\x23\xa7\x1f\x0a\xbe\x15\x07\xbe\xe2\x9e\xe9\x97\ +\x7f\xcb\x65\xfc\x33\xe6\x0b\x7d\x3a\xad\xfd\x62\x0d\x93\xc4\x65\ +\x90\xdb\xe7\xc0\x4b\x1b\xdf\x48\xda\x62\xde\x20\x0b\x28\xe2\xa2\ +\x35\x1a\xa0\x5c\x28\xfc\x09\x24\x71\x0d\xe4\xa4\xe1\x82\x4d\xfc\ +\xe2\x6c\x89\xb9\x05\xe4\x26\xa3\x1e\xde\x40\xe7\xb1\x63\x62\xc0\ +\x5c\xff\xc0\x20\xb8\x3a\xab\x89\xf5\x18\x81\xa4\x0e\x00\x75\xa2\ +\xca\x00\x19\x57\x72\xb6\x00\x2d\x4c\x76\x42\x33\x99\x86\x42\x3e\ +\x3f\xd0\x79\x6c\xaa\x70\x91\x30\x2c\xae\x4b\xcd\xbe\xd7\x67\xeb\ +\x7b\xa6\x25\xc9\x27\x8a\xa4\xb9\xad\xa5\x88\x46\x79\xe6\xb4\xb6\ +\x34\xef\x19\x45\xc2\x74\x2d\xeb\x56\x26\x26\x3d\x77\x68\xaf\x27\ +\xbf\xab\x23\xde\xd6\x72\xa2\xc9\xd2\x75\x7b\xbe\x0d\xc4\x47\x2e\ +\x5d\x86\x19\x46\x2d\x84\x40\x2d\x7d\x42\x3b\xab\xd8\x9c\x98\xd1\ +\x2e\xf2\xb6\xa4\x84\xca\xa3\x14\x03\x60\xa3\x47\xbf\xa2\x25\x46\ +\x5f\xc4\x6c\xc9\x88\x22\xc1\x66\xe1\xf1\xf1\xfa\x9a\x6f\xfe\xcf\ +\x6b\xfa\xd7\xdf\x90\xe6\x9d\x16\xfb\xf6\xe3\x35\x49\x38\x68\xc1\ +\xc2\x97\x37\xec\xee\x9e\xc0\xc5\x3d\x72\x79\x4f\x59\x6d\xc9\x8a\ +\xc7\xbc\xb8\x0a\x18\xc7\x43\xf0\x21\x61\xc0\x8b\x9f\x7c\xc9\x57\ +\x8b\x19\x1f\x9e\x7b\xf0\xe7\xdf\x38\x56\xfe\xe2\x9d\x96\x12\x16\ +\xc0\x76\xe7\xd0\x54\x1f\xc2\xab\xd7\x04\x4a\xff\xdb\xfb\xbf\x91\ +\x52\x15\x1b\x92\xac\x42\x7d\xf6\xd0\x2d\xec\xdc\x62\xce\x6c\xb5\ +\x17\xbc\x6b\xf9\xc8\x3e\x82\x92\x94\xf5\x4e\xc2\xae\x4e\x9b\x85\ +\xb1\x84\x18\x86\xb4\x4f\xcf\x65\x99\x78\xb9\xbb\x26\xcf\x46\x8c\ +\x9b\x55\x6a\x53\x72\xf7\x4d\xb1\x4a\x6f\x7d\xf6\x96\x5a\x3a\x4f\ +\x39\x14\xd7\x9f\xd4\xbc\xd6\x62\xb3\x16\x5d\xb3\x62\xe7\xe6\x13\ +\x07\x44\x04\x0d\xae\x2a\x90\x46\xdc\x7a\x04\xd2\xd3\x16\x9a\x05\ +\xb8\xd2\xad\x45\xba\x65\xa9\x69\x9b\x29\x67\x79\xc5\x05\x64\x87\ +\x1d\x1c\xc0\x2b\x7a\x70\x50\xd0\xe9\x21\x03\x45\x54\x98\x25\xd6\ +\x61\x07\x41\xd4\x0a\xd2\x17\xcd\x6e\x65\xdb\xd1\xa1\x38\x93\x38\ +\x6e\x6b\x60\x94\x57\x57\xf7\x8e\xc0\x5b\x7f\x91\xb2\x5e\x8c\x58\ +\x50\x5b\xcf\x58\xc4\xad\xa1\x2a\xa1\xb2\xb2\x6a\x4d\x6c\x40\xdb\ +\xa7\x5e\xec\xf5\x89\xd9\xca\x8c\xc5\x62\xc5\xcb\x5f\x5c\xf3\xc3\ +\x9b\x9f\xb3\xd8\x45\x4c\x7a\xa7\x95\xaf\x77\x79\xce\xe3\xc6\xc2\ +\xee\xbb\xdb\x03\xf0\x96\xcf\xcc\x90\xbc\x1f\xee\xde\xf2\xc3\x77\ +\x6f\xf9\xf0\xe5\x13\xaa\xbe\xc7\x2c\x18\x31\x0a\xfa\x84\x93\x11\ +\xb3\x27\x0f\x39\xa4\x7d\x5e\xfc\xe6\x13\xf8\x33\xb8\xb9\xbb\x67\ +\x35\x0b\xc9\xdf\xbe\x3c\xf9\x9c\xab\xae\xcf\xf5\xbe\xe4\xaa\xeb\ +\xf3\xed\x8d\x07\xfc\x82\xdd\xf8\x92\x8b\xb0\xa0\x1a\x4c\x1d\xd0\ +\x5c\x07\x88\xa9\xc6\xd5\xee\x44\x7d\x6e\xbd\x3c\x53\xe4\xf1\x9e\ +\x4e\x4f\x30\x31\x7e\x72\x39\xb1\x33\x2f\xbc\x06\x7b\x9f\xd7\xce\ +\x3a\x59\xd7\x37\x5d\x21\x01\x9d\x66\x17\x58\x63\x36\x47\xb7\xc1\ +\xc4\x9d\xf8\x31\x87\xe2\x43\xcb\xa5\x38\x14\x1f\xd8\x14\x77\xc0\ +\x17\xad\x79\x1e\x2d\xbf\xd9\x16\x3b\x22\x24\xdb\x48\x77\x70\x54\ +\x64\x6e\xe1\x25\x51\x26\xf7\x50\x03\xa6\x14\x1d\xc8\x34\x7f\xb6\ +\x22\x21\x91\xd0\x0c\xbb\x3e\xc0\xb0\x43\x2c\x4d\x3a\x3f\x2b\x08\ +\xed\xa9\x36\x94\x47\x66\x7c\xc4\xb8\xd3\xa3\x3a\xd3\x09\x22\xcf\ +\x74\x88\xd4\x8b\xba\xe8\x14\xcc\x06\xb8\x91\xad\xd8\x99\x57\x58\ +\xfc\x0a\x4e\xf3\x1f\xe2\x68\xa9\x7b\x5c\xbd\x2b\x44\x4a\xa0\xb4\ +\x36\x54\x4a\x12\xe2\xe9\x69\xa0\xa2\xd6\xc2\x1b\xe5\xb1\xbe\x97\ +\xbc\x7c\xfd\x86\xc5\x4e\x1f\x8a\x6f\x97\xb7\x94\xf2\x23\x7e\xf4\ +\xc0\x6d\xbf\x78\xf4\x81\x2a\x7c\xec\x18\x3a\xb9\x18\xf0\xdd\xed\ +\x81\x6c\xf9\x9a\x78\x5c\xdb\x50\xd7\x3f\xcf\xf9\xfc\x71\xcc\x9b\ +\xbb\x37\x8c\x2f\xae\x18\xce\x03\xbe\x79\xf5\x57\xae\xcb\x66\xd0\ +\xdf\x73\x73\x47\xcb\xa9\x68\x5e\x2c\x1b\x37\x81\x5c\x7c\xf3\x06\ +\xef\xc1\x67\xf4\x1e\xed\x18\x35\x2c\xb3\x34\x83\x3c\xbf\xd3\x43\ +\x5c\x76\x4b\x13\x62\x12\x80\xae\xde\xd1\xeb\xba\x41\x29\x7a\x4c\ +\x86\x76\x1c\x44\x7c\xcf\x21\x0b\x28\x9c\x8c\x48\x5d\x37\x89\x1e\ +\x68\x98\xd6\xbe\xb1\x59\xd8\x75\x6c\xf3\xa4\xcd\x93\xd8\x3c\xb5\ +\x6a\x30\xf1\x99\x8b\x05\xf4\x3e\x9b\xd6\x7e\xbc\x8a\x8f\xa4\xc8\ +\xbd\x2e\x3b\x07\x52\xb3\x58\xd0\x58\x5a\x35\xe3\x92\x4d\xc6\x45\ +\xe9\x54\xdb\x7e\xda\x21\x57\xba\xdf\xcd\x49\x04\x57\xb1\x2b\xf5\ +\xe4\x16\x33\xf8\x62\xb8\x3e\x40\xa7\x47\xd5\x8f\x89\xb7\x86\x81\ +\x2d\x78\xb6\x19\x55\xdf\x33\x59\x63\xcf\x2d\x0e\xcf\xf9\xc7\x38\ +\xcd\x6b\xd8\x3f\xf5\xdb\xc5\x12\xd1\x38\xf5\x97\x09\x17\xc5\x8b\ +\x1d\xea\x51\xd7\xc5\x4a\xad\x25\x77\x3e\xfc\xab\x35\x7f\x61\xea\ +\xfc\x96\x91\x9b\x0b\x40\x3b\xe2\x2a\xc7\x63\x7b\x7d\xcd\x87\xf7\ +\xd7\xbc\x7d\x27\x99\xf4\x72\x07\x64\x3f\x7a\xc0\xf5\xf5\x47\x36\ +\xea\x8a\xe7\xd1\x8e\x6f\xe5\x1b\x1e\x4d\x15\xf1\x44\x90\x5c\x3c\ +\x76\x52\xe3\x26\x5e\x53\xed\x1f\xd7\x8b\xb3\x0d\xfc\xf5\xf5\x2f\ +\xf4\x0e\xbe\x7c\x4b\x19\x5d\x72\xd5\x0b\x29\x67\x0f\x88\xbc\x15\ +\xb2\x1a\x11\x5e\x48\x9e\x7f\xff\x96\x25\x97\xe7\xbd\x83\xbb\x0d\ +\x3f\x0d\x0f\xbc\x1e\x4f\xb9\xea\xfa\x7c\x58\xbe\x25\x50\xaf\x78\ +\x11\x7f\x8d\xba\x1c\x73\x55\x14\xbc\x3b\xe4\x2c\x97\x7b\x67\xbd\ +\x0d\x07\x3d\xc2\x49\xd4\xee\xd7\xcb\x72\xa7\x83\x13\xe7\x03\x07\ +\x1c\x8e\x9c\x8a\x66\x55\x70\x8d\x9e\xc8\x39\x5f\xac\xc9\x83\xc2\ +\x2d\xec\x4e\x98\xd8\xc4\x4c\x5b\x4c\xfc\x23\x72\xa2\x1b\xcf\xeb\ +\x1c\xb7\x28\xcd\xe0\x43\x9b\xc7\x30\x51\x4c\x94\xc4\x13\x15\x92\ +\x18\xdb\xbe\x7f\x30\x4c\x17\x34\x2c\x14\x1b\xc7\x3c\x18\x98\xf5\ +\x85\x0e\xe4\xb4\xea\x5e\x07\x74\xf4\xb2\xd3\x00\xb6\xd5\xb6\x96\ +\x43\x27\x13\x5d\x44\x31\xe0\x97\xd2\xa3\x1f\x09\x88\x6c\x20\x3c\ +\x6a\x49\x85\x48\x19\x77\xa2\xb5\xb0\x93\x14\x89\x66\xd9\xa2\xd1\ +\x0e\xef\x6d\xeb\x10\xfc\xa4\x1f\x71\x28\x63\xca\xed\x96\x83\xa7\ +\xc1\xbb\xf5\x33\xfa\x69\x4c\xc7\x10\x71\x2e\x2a\xba\x4a\x39\xb6\ +\x6b\x9e\x1e\xcc\x56\xe2\xb4\xb4\xd0\x05\x92\x91\x57\x91\x4a\x9f\ +\x74\xb1\xe3\xcd\x56\xb2\xbe\xc5\x49\x88\x49\x2f\x87\xde\x43\x16\ +\xbb\x90\xab\x2b\xa8\xf6\x1b\xe6\xf7\x5b\xa6\xab\x29\xef\xf9\x88\ +\x2f\x1f\xf0\x70\x5c\x3b\x15\x6f\x16\x53\x9e\xf2\x8e\xbf\xcc\x73\ +\x1e\x87\x21\x3a\x81\x6b\xa4\xc1\x12\xf6\x1b\xf0\x07\x6f\x29\x77\ +\x39\xbe\xbc\x71\x39\x8b\x57\xfe\x8e\xe9\x27\xd8\x2b\xb9\x18\xf0\ +\xf3\xbb\x0d\x09\x70\xb3\x7c\xc3\x25\x4f\x79\x3f\x0e\x79\x01\xc4\ +\xdb\x15\xeb\x87\x0f\x61\x1e\x33\x1e\x6b\x54\x0d\x7b\xdd\xd3\x00\ +\x90\xb9\x6e\xa5\xc7\xf5\x42\x03\xfe\xb0\xf9\x08\x9b\x0a\x6f\x3c\ +\x64\xca\xd0\x2c\xe4\x12\x88\x77\xad\xd7\x8f\x99\x50\xb2\x3d\x62\ +\xe2\x8c\x7a\x68\x46\xdc\x8a\x6f\xde\x2d\xbf\x39\x2b\x27\x5c\x46\ +\x32\xb8\x38\x91\x21\x7a\xca\xbd\x19\x8a\x68\x27\xc5\x57\x06\xc0\ +\x56\xdf\x76\x8c\xab\x60\x59\xb6\x38\x1a\xb4\x6d\x17\x73\xba\x63\ +\xb9\xa7\x81\x2b\x22\xa2\x89\x7e\x97\x4d\xdf\xa3\xea\xc7\x8d\x22\ +\x89\x65\xdd\xd8\x2d\xe2\xaa\x7e\xec\x1a\x46\x6d\x17\xf3\xf1\x28\ +\x69\xd9\x3c\x81\x62\xc3\x33\xa6\x51\xec\xa8\xdf\xbf\x7e\xde\xcc\ +\x9c\x07\xad\x93\x14\xf8\x9e\x1d\xac\xa2\x8f\x1a\x4d\x26\x0e\x95\ +\x47\x89\x71\x30\x84\xce\x22\xe7\xa2\x72\x6c\x0c\xf5\xf4\xcc\x50\ +\x79\xa4\xd2\xd7\x67\x7f\x52\x7b\xf2\xeb\x65\xeb\x90\xbe\x10\x6b\ +\xed\x4a\x8c\xe6\x3c\x1c\x3f\xe4\xf9\xe8\x4b\xae\xae\x1e\x70\x3f\ +\xdd\x73\x58\x4d\x9d\xdc\xb0\x8c\x3d\xe9\xe5\x6c\xb3\x21\xe3\xa5\ +\x24\xbd\xdb\xf0\x2e\xcf\xf1\xb2\x77\x4e\x12\x74\x8b\x77\x7c\xef\ +\xef\x50\xd7\xef\xf8\xee\xf6\xc0\x72\x73\xc9\xcb\xd7\x6f\xa8\x6e\ +\xfc\x13\x29\x61\x59\xd8\xca\x95\xf4\x6e\xc3\x36\x1b\x72\xbd\x2f\ +\xc9\xff\xf6\x03\xdf\xbe\x3e\xb0\x54\x5b\x86\x1b\x7d\x62\x9d\xe1\ +\x24\x76\x00\xb6\x13\x36\xc9\x72\xd6\x8b\x8c\xf5\x6e\xc9\x7a\xb7\ +\x67\xbd\xdb\xb3\xc0\x67\xd8\xeb\x52\xf4\x04\x9d\xc1\x03\x3a\x8f\ +\x1e\x32\x9d\x0c\x0d\x6b\x1b\x2b\x2e\xcb\x5b\x91\xd0\x6d\xac\x65\ +\x8b\x8e\x61\x6a\x26\x3e\x2e\xd1\x5b\x39\x71\xd8\xdd\xe0\x4d\xf3\ +\x96\x7c\xb8\xde\xb5\xd7\x15\x5a\x13\x5b\x77\xca\x9e\x8b\xa5\x30\ +\x80\x16\x5a\x13\x7b\xe6\x84\x2c\xf6\x47\xde\x34\xaa\x6a\x59\xe0\ +\x9b\xfb\xda\x05\x85\x8e\xed\xac\x88\x74\xf0\xbc\xe5\xf3\x46\xda\ +\x23\x26\xaa\xbd\xe7\x28\xaa\xb4\x53\x71\xb6\x25\xa9\x2e\x26\xe3\ +\x3a\x38\x4c\x00\x47\x79\xad\xb3\x82\xfe\xd8\xa5\xd7\x8f\x38\xa4\ +\x81\x3e\x59\x49\x30\x45\x71\x40\x50\x19\xd0\x6a\xbf\x59\xdb\x75\ +\x95\x63\x61\xbb\x80\x13\xce\x58\x0e\x40\xe4\x46\x0f\x9f\x9f\x9e\ +\x99\x2e\x76\xac\xd3\x2d\x2f\x5f\xbf\xe1\xed\x3b\xa9\x0d\x9e\xd1\ +\x9c\xd9\x4a\x91\xaa\x0d\x4f\x2e\x1e\x33\x7b\xf0\x94\xd1\x2c\x24\ +\x7f\x1b\xd1\x79\x27\x39\x74\xdf\xd7\x3b\x9e\x7c\xcf\x62\x24\x60\ +\x35\x6d\x2d\x04\xc7\x4b\xc9\x96\x21\x64\x1a\x88\xd7\xfb\x12\x6e\ +\x7c\xbe\xbd\x5b\x91\x5c\x0c\xf8\xe1\xcd\xcf\x1d\x40\xcf\x31\x70\ +\x13\xcc\xcd\xeb\x3f\xc4\x92\x70\xf9\x96\xcd\x5d\x87\x95\xe8\x13\ +\xf7\x2e\x59\x54\xfa\x2c\x2a\xc1\x22\x33\x1d\x29\x99\xcb\x3b\xc7\ +\x41\x8f\x4d\xa8\xc9\x68\xc6\x84\x32\x5e\x31\x01\x7c\xae\xf4\x18\ +\xab\xc3\x52\x0f\x67\xc9\x72\x73\xb6\xd3\x94\xb7\x59\xc2\x73\x3c\ +\x37\x11\x6e\xb8\xf4\x60\x3c\x82\x65\x49\xe7\x51\x55\x47\x52\xdd\ +\x11\xae\x66\xe3\xe1\xa2\x03\x9d\xa7\x80\x96\x13\x57\xbd\xb6\xf9\ +\x19\x6f\x1e\x34\x18\xbc\x31\xb0\x51\x94\x28\x15\xe8\xb2\xb3\x88\ +\x22\xbc\x6d\xd9\x0a\xe8\x34\xcb\xc3\x75\xa5\xad\x6a\xb4\x14\xe9\ +\xdb\xce\x0f\x36\x80\x2b\x90\x6c\x81\x81\x99\xf8\x33\x28\x2a\xb2\ +\xc0\x73\x85\x0f\x3b\x7f\x4d\x7a\x99\xfe\x0c\x13\x78\x2f\x0c\x80\ +\xb7\x48\xfa\xca\x7c\x8a\x01\xef\xa7\x7b\xdd\xda\xee\x84\x12\x11\ +\xba\xe6\x56\x72\x6f\xd4\xdb\x71\x35\x4f\x9f\x0e\x2c\x72\xcc\x5a\ +\x11\xb3\xb3\xc3\x01\x8d\x26\xd6\x3a\x58\x5b\x6c\x42\x44\x4e\x07\ +\x5b\xe0\xef\xd5\x9e\x0f\xef\xaf\xf9\xe3\xbf\x0a\x98\xde\xbf\x61\ +\x5e\xcd\x99\xfa\x8a\x1f\x4a\xc1\xd4\x7f\x03\x7f\x03\xcf\x3f\x7f\ +\xca\x17\xc5\xd7\xdc\x5c\x96\x78\x79\x07\x5e\xb5\xff\xe4\x89\x1a\ +\xb2\x30\xec\xdd\x04\xb3\xf5\x94\xdf\xe5\x39\x95\xfa\xc0\x44\x0d\ +\x5b\xc0\xb4\xdb\xc5\x2e\x74\xaf\x59\x88\x35\xdc\x81\xbf\xbb\xe5\ +\xde\xec\x1c\x33\xde\x53\xf6\xf4\x2c\xb5\x67\xfb\x88\x6c\x59\xb0\ +\x7b\xbb\x64\x79\xb1\xa5\xea\xcc\x49\x3f\xe8\xf7\x19\x8f\xc7\xe6\ +\x7b\x89\xdd\xf9\xa8\x75\x37\x5d\x69\xec\xb8\x7b\xb0\x45\x8c\xf8\ +\x9e\x74\x65\xf3\x17\xd6\x17\xd6\x79\x8b\x60\xa7\xa0\x17\x39\x97\ +\x63\x3d\xae\x18\x2e\x4b\xaa\xe1\x86\x43\x36\xa2\x13\x17\x0e\xc0\ +\x3a\xca\x99\x02\x31\x5d\x21\xf4\x74\xa2\xe6\x02\x75\x97\xb7\x80\ +\x9c\x0d\x3e\x12\x96\xbf\xd6\x98\x2e\xea\xb9\x4e\x99\xd5\xfa\x4e\ +\x0f\xd9\xde\x42\x9d\x0b\x3e\xec\x5a\xb3\x82\x2d\x1b\x47\xad\x13\ +\x82\x73\x02\x78\x54\xed\xd5\xf6\x8f\x78\xb6\x5f\xc6\xee\xf5\x11\ +\xb8\xe1\x80\x7d\xd3\x7a\x14\x89\x8a\x3e\x7a\x28\x76\xdf\x76\xd4\ +\x99\xb3\x7c\x5a\xcb\x2c\xfa\x31\x36\x6e\x9e\x3d\xf4\x4c\x1f\xb5\ +\x70\x27\xe5\x3e\x75\x42\x9a\xd5\x3a\x65\xd8\xa1\xc9\xd0\x4d\x00\ +\x2b\xe5\xb1\x59\x6a\x16\x5e\xdf\xc2\xb3\xe1\x96\xde\x65\x40\x35\ +\xeb\x43\xf5\x88\x72\x5b\x70\xb7\xee\x30\x5f\x49\xfe\x8f\x3f\xff\ +\x53\x7e\xef\x5f\xfc\x3e\xdf\xfe\x6f\x7f\x42\xa5\x4e\x75\xde\xed\ +\xf2\x96\x19\xef\x5b\x00\x5e\xec\x42\x57\x14\x99\x7e\x78\x0d\xab\ +\x5a\xf9\xfa\xbb\x5b\x16\x62\xcd\xed\xf2\x16\x7f\x77\x5b\xdf\xb7\ +\x0b\x99\xad\x14\xb7\xcb\x5b\x6e\x24\xb0\x9a\x72\x90\xef\xdd\xe3\ +\x00\x3f\xcf\x3b\x5c\xef\x4b\xde\xa7\x1f\xd9\xdc\x7d\x44\xca\x1d\ +\x62\xdc\x65\x3c\xee\xba\x93\xa9\x0f\x27\x71\x3b\x58\x7f\x54\x81\ +\xb3\xb7\xab\x24\x35\xce\x86\xe4\xcd\xbb\x35\x2b\x33\xde\x3e\x0e\ +\x0a\x37\x99\x33\x37\x33\xde\x18\xfb\x78\x8d\x3c\xf1\x69\x97\x78\ +\x8d\xb3\x66\x69\xfd\x3c\x51\x95\x4e\x4e\x08\x2a\xe7\x13\x87\x61\ +\x04\xc3\x0a\xdf\xe6\x26\xb4\x7e\xd5\xa3\xa8\x2c\x38\x5d\xde\xb7\ +\xd1\x91\x71\x0c\xe0\xbe\x95\x00\x46\xd3\x7a\xdb\x86\x5d\xd5\x8f\ +\x29\x92\xf4\x44\x40\x44\x46\xe3\x44\x06\x84\x5b\x03\x58\xe9\xca\ +\xd3\xf5\x4e\x11\x35\x18\x59\x8a\x7a\x28\x9f\x2e\x8c\xf4\x5c\xce\ +\x58\x77\x36\x47\x35\x3b\x37\xec\x35\x7d\x52\x6e\x79\xb6\xdf\xaf\ +\x9e\x12\xd4\x5c\xc8\xb5\xf5\x70\x6e\xce\x46\xaa\xa4\xe2\xc3\xc7\ +\x90\xbf\xdc\xd4\x3e\xed\xa3\x6e\xc4\x7c\xf6\xcb\x78\xcf\x47\x5c\ +\x0c\x1e\xc0\x60\x82\x2f\xfe\x3e\x9b\xad\xe0\xc3\x12\xb6\xff\x77\ +\xca\xfb\x7d\xdb\xdb\xee\x44\x8f\xda\x00\x6d\x58\x74\x8b\x5d\xa8\ +\x01\x69\x80\x7d\xbb\xbc\xe5\x9e\x47\x1c\x6e\x14\x9d\x4b\xc1\x8d\ +\xd4\x92\xa4\xb9\x75\x55\xae\xf9\x37\xda\xf9\x90\x70\x3f\x12\x0e\ +\xc8\x5e\xf6\x8e\xf7\x66\xfe\xc7\xa3\xd0\x23\x16\x25\xc3\xde\xb8\ +\x35\xe8\xdb\xe9\xda\xc6\x22\x2d\xcd\xf4\x54\xcd\xd5\x5a\xb2\xde\ +\xed\xa9\xde\x0e\x59\xef\xf6\xb0\xd9\x13\xc6\xc2\x9d\xfd\x29\x2b\ +\x02\x86\x04\x24\xb1\x9e\x32\xf4\xe9\x4b\xbd\xb8\x6b\x4e\xa8\x1f\ +\x3e\x3c\xcf\xc2\x1f\x96\x6f\x19\x04\x17\xe4\xfb\xf3\xdd\xe4\x93\ +\xe9\x4c\x4f\x00\xa2\x15\x93\xdc\x9c\xd8\x5b\xda\xf6\x92\xad\x06\ +\xd1\xe3\x92\x71\xe1\x16\x5c\x7a\x12\x4f\x16\xf8\x66\x52\xbc\x96\ +\x17\x52\xaa\x76\x89\xc2\x02\xce\x16\x0f\x84\xce\x58\x34\x83\xe8\ +\xf2\x18\xf6\x8d\x94\x5c\x6d\xb3\xed\x1c\x08\x95\x63\x62\xd9\x38\ +\x97\x88\x57\x6f\x8f\x00\x9c\x37\x66\xac\x7d\xea\x62\x99\x3a\x37\ +\x9f\xbb\xbe\x97\x70\x78\xc3\x78\xa9\x6d\x35\x0b\xc6\xab\xce\xdf\ +\xf2\xa8\x1b\x39\x66\xfe\xc9\x8b\x9c\xe7\x83\xc7\x9a\xa5\xcf\x79\ +\xa0\x0d\xf0\xdd\x48\x98\xf1\x9e\x83\x7c\x4f\x27\x7a\xe4\x98\xf4\ +\x20\xf5\x7d\x97\x11\xf5\x7d\x37\xaa\xf1\x3b\xe8\x1c\xee\xee\xa6\ +\x70\x5b\x3f\x7a\x50\x7f\x86\x79\xae\x05\xf2\x68\xb5\xe3\x4d\xea\ +\xb1\x54\x5b\x53\x23\x50\xba\x7d\xc9\x53\x0c\x2b\x41\xd6\xf1\xf4\ +\x18\xd8\x5c\x32\x5f\xac\xdd\xe2\x2e\x0e\x0a\xe7\x64\x6c\x63\xc9\ +\xb0\xd7\x25\x9c\x8c\x18\x4e\x62\x9e\xf4\xea\xef\x74\x4d\x41\x90\ +\x05\x84\xc3\x01\x43\x82\xda\x1f\x3e\x26\x8d\x46\xa1\x62\xd3\xd1\ +\xad\xfd\xeb\xdb\x1a\xc0\xea\xf5\x77\xad\xc5\x9d\x5b\xd8\x99\x69\ +\xf6\xd6\x27\x46\x94\xae\x62\xd7\x3a\x19\x42\xdc\xe9\x59\x5b\xa0\ +\x96\x0a\x26\x0b\x61\x2f\x76\x8c\x6b\x33\x3f\x1c\xb4\xc6\x4e\xe9\ +\x05\x62\x91\x94\xce\xff\x2d\xa2\xaa\xb5\x23\x1c\x27\x3e\xb7\x4a\ +\xd1\x17\xa2\xa5\x7f\x23\x23\x31\x4e\xcb\xcd\xb4\x2a\x7c\xee\xac\ +\x49\xcd\x8e\x0e\x57\xe9\x10\x66\xc4\x54\xd5\xaa\xda\xb5\x98\x56\ +\x14\xc0\x96\x24\xeb\xb6\xc1\x7d\xec\x94\xd8\xe2\xcd\xad\x66\xc8\ +\xc5\x4e\x2f\xe8\x2e\x23\xe8\x5c\x8a\x16\x33\x03\xdc\x4f\xf7\x0e\ +\xd8\xf6\xbe\x73\x60\xb6\x40\x6e\xde\x6e\x5e\x9a\x4c\x6b\x19\xbd\ +\x94\x1f\xb9\x09\xfa\xad\xfb\x7b\x97\xc1\x09\xe3\xdf\x48\x28\x7b\ +\x0f\xd9\x66\x43\xfe\x62\x71\x8d\xc8\x7f\x41\x55\x4d\x11\x87\xc8\ +\xb5\x28\x59\x40\xeb\xef\xcc\x1c\x8d\x62\x41\x1c\x14\x3a\xaa\x19\ +\x46\xae\x48\x72\x35\xe9\xd6\x7e\x72\x83\xb1\xe3\xa0\xd0\xc5\x8e\ +\xd8\x33\x1e\xb3\xe0\x90\x05\x7a\x56\xdb\x27\xba\x43\x40\x37\xa5\ +\xde\x2d\x17\x6e\x41\x77\xbd\xcb\x59\x5c\x3e\x6f\xb1\xb1\xb3\xd8\ +\xcc\x6f\x6a\x7d\x62\xd7\xd9\xe1\x98\xb8\x59\xac\x50\x52\x83\xb0\ +\xb1\xb8\xeb\x9b\xd6\x9b\xe2\xf8\x7c\x1e\xa2\x72\x9a\xb8\x99\x47\ +\xab\xfa\x5e\xad\x8f\x1b\x92\x44\x36\xb4\xae\x34\xe0\x75\x5a\xf8\ +\xa8\x25\xc8\xb9\x18\x6a\x61\x2a\x72\xf2\x13\xba\xf8\x4c\x19\xda\ +\x4a\x04\x25\x99\x05\x5d\xed\x3e\x28\x69\x16\x7f\x38\x76\xdd\x39\ +\x9d\xd6\x27\x8d\xf7\x27\x72\xa2\x09\xea\x7b\x29\xf9\xf0\xfe\xda\ +\x49\x89\x83\x7c\xcf\xeb\x1f\x16\xbc\x9f\x7f\x6c\x31\x64\x13\xcc\ +\x16\x54\x96\x2d\x8f\x41\x66\x6f\x37\xc1\xb9\xbb\x29\x78\xbf\x97\ +\x6e\x5b\xca\x8f\x6e\x3b\x9b\x77\xdd\x73\xed\xf5\xe6\x4e\x62\x3f\ +\xd3\xb2\xb4\x95\x28\x76\x81\xb7\xbd\xa9\x48\x8b\x1d\xf3\x62\xa7\ +\x4f\x24\x49\xe6\x66\x28\x5b\x67\x22\xeb\x78\x9a\x6d\x2d\x78\xe3\ +\xd0\x69\xe3\x34\xd3\xe0\xb5\xb7\x8b\x58\x83\xb7\x79\x5e\x11\x9d\ +\x5b\x6e\x58\x94\xe5\x4a\x77\xff\x64\x01\x90\x11\x64\xca\x1c\x21\ +\x33\x3a\xbd\xcb\xb3\x0b\xba\x0f\x4b\xdd\xb0\xf4\xd9\xf8\x09\x9b\ +\xe2\xae\xdd\x63\xd7\xc8\x61\x58\xb9\xe8\xdb\x1f\xdc\x95\x7a\x85\ +\x96\x04\xc1\xd1\x02\x6f\x6b\x40\xe9\xce\x9a\x74\xd4\x56\xa4\xdf\ +\xa7\x1d\x75\xdf\x1a\x95\xdb\x5c\x00\xda\xfb\x11\x95\x5b\xdc\x6d\ +\x1b\x8b\xb4\x02\xc9\x20\xfc\x8e\x87\xe1\x77\x5c\xc9\x3f\xe0\xaa\ +\xfa\x23\xbd\x95\x7f\xc0\x17\xf2\x0f\xce\x80\xb6\xbd\x60\xd3\x80\ +\xf5\x98\x65\x26\x8c\x53\xec\x48\xb2\xae\xfe\xe2\xcc\xde\x9c\x8b\ +\x8a\xb0\xb5\x43\xd4\x4c\x7c\x96\x8d\x8f\x80\x6d\x19\xd3\xbb\xdf\ +\x72\x58\x4d\xb9\xbe\xfe\x78\x02\x9e\x26\x2b\xf7\x2e\x83\xd6\x6d\ +\x0b\x44\x0b\xba\x47\xdd\x88\xdd\x4d\xc1\x61\x35\x75\x0c\x0e\x70\ +\x59\x6c\xf1\xa3\x07\xcc\xe6\x5d\x6e\x82\x3e\x9d\xd1\xdc\x5d\xff\ +\x14\xc3\x3f\xea\x46\x2d\x59\x71\x69\x9e\xf2\x43\x57\x7f\xe6\xc7\ +\x77\x5b\xd4\x72\x6e\x16\xad\x71\x6b\x01\x1c\x86\x91\x9b\x2c\xe4\ +\x16\x79\x59\xee\x0a\x1f\x55\x92\xb6\x16\x7b\x36\xe1\x36\x24\x30\ +\x27\x82\x84\xf5\xe6\x70\x32\x4a\x20\xc8\xb4\xbc\x50\x24\x0d\x99\ +\x11\xbb\x93\xd6\x58\x26\x6e\x82\xf7\x7a\x97\x13\xa8\x57\xec\xb3\ +\x69\x5b\x13\x1f\x9f\x17\x05\x08\x2d\x70\x20\x72\xbe\x6e\x3d\x0c\ +\xbb\x06\x68\xdf\x36\x6c\x46\xed\x2f\x4e\xdb\x64\xb5\x08\xd0\x0f\ +\x6b\xef\x37\x10\xc2\xcc\x1f\xae\x08\x54\xd4\x38\xac\xdb\x05\x9d\ +\xb6\xd9\xfa\x4a\x4b\x87\xad\x52\x7c\x5d\xfd\x11\xdf\x7f\xf7\x03\ +\xbf\xc6\x3f\x6f\x7d\xce\xe8\x57\x61\xf5\x6f\xe1\xea\x19\xcc\x57\ +\x5f\xb1\x0f\x3f\xd3\x96\x9a\xeb\xb9\x33\x21\x24\xa1\x13\x77\xf3\ +\xed\x1c\xdf\x4c\x90\xdf\x99\xf3\x8e\x1e\x33\x71\xcb\xff\x8d\xf7\ +\x66\xf4\x95\x70\xe5\x66\xcb\xca\x12\x49\x59\x64\xac\x6f\xe1\x71\ +\x18\xf2\xd6\x68\xd7\x6a\xd6\x67\x7e\x3f\x67\xea\x4d\x99\xdf\xcf\ +\x39\x78\x53\x3a\x68\x20\xdf\x04\xfd\x13\x90\x59\x0d\xfd\x88\xf7\ +\x0e\xcc\xb3\x79\x97\xf7\x53\xc9\xe5\x68\xcb\x4d\xd0\x77\xb7\x67\ +\x68\xb0\x5e\xca\x8f\xdc\x4f\xfb\x06\xf0\x30\x6b\xec\x0c\xcd\xf7\ +\x3d\x27\x45\xac\xa4\x78\x68\x54\xe2\x7b\x15\xf2\x2b\x71\xce\x78\ +\x3c\xd5\xa3\x18\x7a\x42\xcf\x76\x43\xb9\x59\x16\xf1\xa1\x22\x18\ +\x95\x78\x69\x52\x4b\x06\x03\xe6\x7e\x95\xd4\x21\xa2\x58\xe7\x62\ +\xc8\x20\xcf\xb7\x4c\xb3\xbe\xcb\x2b\xbb\x35\x85\x3f\x72\x92\x42\ +\x19\x3d\x6c\x2d\x36\x45\xd2\x38\x93\x93\x61\x62\x03\xde\x0f\xcb\ +\xb7\x5c\x8d\x9f\xf0\x76\xf7\x84\x17\xf1\xfc\x14\xc0\x26\x47\xe1\ +\x02\x41\x91\xd0\x91\xca\xed\x51\x91\xa3\xa5\x1f\x0d\xe0\xa4\x39\ +\x31\xe3\xb1\x47\xdb\x5c\x74\xe9\xbe\xbc\xa8\x15\xce\x29\x8c\x2e\ +\x2d\x94\x02\xe5\x11\x08\xd1\xf0\x89\x8d\x3b\x61\x98\x7e\xfe\xb1\ +\x38\x01\x30\x68\x00\x03\x24\x3f\xfc\x2e\xcb\xd5\xff\x4e\x37\xfb\ +\x43\xae\xaa\x3f\xa2\x77\xfb\xaf\xb8\x92\x7f\xa0\x65\x07\x92\x37\ +\xd7\xd7\x2c\xae\xaf\x5d\xa2\xae\xea\x7b\x2e\x5c\x6f\x83\xf1\x16\ +\xc0\xa1\x68\x9f\x69\x5e\x34\x0a\x21\xb9\xf2\x50\x4a\x91\x1b\xf6\ +\xbe\x5b\xea\x0a\xdd\xbb\x3c\x77\x8b\xba\x47\xdd\x88\xab\xab\x07\ +\x6e\x41\xd7\xbb\x0c\x9c\x56\xfd\x14\xd0\xec\x02\xce\x3e\xc7\x32\ +\xef\x61\xd5\x2e\x26\x77\x46\x73\x2e\x8b\x1a\xd8\x56\x4e\x58\x56\ +\xb7\x2c\xdb\x89\x1e\x69\xbb\xee\x13\x97\xcb\xa8\x5e\xdc\x7d\x36\ +\x7e\x42\x34\x11\xf8\xa2\x64\x1a\xf4\x18\xe4\xa9\x1b\x4e\x68\xe7\ +\x23\x03\x1a\xc0\x86\x79\x01\x2a\x4f\x03\x71\xeb\xa5\xee\xfe\xe6\ +\x49\xd6\xed\xc2\xae\x5e\x8d\xed\x9d\x94\x68\x6e\x15\x89\x91\x13\ +\x89\x73\x27\xe6\xe6\x24\xe7\x96\x89\x7d\x79\xe3\x98\x78\x72\xf3\ +\xba\xd6\xc4\x67\x2a\xb6\xd8\x28\xa6\x34\x4c\x1c\x34\x67\x12\x5b\ +\xa0\xba\xd3\xde\x4a\xe3\xe1\xd2\x6e\xf8\xb4\xaf\x55\xb5\x7b\x10\ +\x99\x96\x7f\xf7\x9e\x06\xb4\xf5\xb6\x7d\x98\x8e\x44\xc5\x42\xbe\ +\xe7\x4a\xea\x39\x0c\xf3\xee\xbf\xc7\xe8\xcb\x1a\xb4\x2d\xcd\xfe\ +\x52\x11\xbf\x10\x7c\xf9\xf2\x7f\x21\x7e\x21\xe0\x07\x13\x50\xf9\ +\x01\xbe\xe2\x77\x79\x13\xfd\xb7\x26\xe0\x08\x1f\xd7\x01\xdd\x87\ +\xbf\xc9\x58\x3c\xaa\xa7\x55\x9e\xe9\xf0\x68\xc6\x32\xed\x8e\x9b\ +\x2b\xcf\x65\x34\x6e\x17\x92\xb7\x77\x8a\x97\x6f\xdb\x83\xfb\x26\ +\xbd\xdc\x55\xde\x00\x9e\x9b\xaf\xef\x37\xa2\xf7\xdc\xf3\xa5\x73\ +\x16\xee\x47\x82\xd9\x4a\x71\x3f\x9a\xf3\xb0\xf7\x90\x85\x58\x73\ +\xb8\x79\xdf\x3a\xfc\xef\x6e\x0a\xee\xa7\x7b\xb7\x20\x9c\xcd\xbb\ +\xdc\x4c\xfb\x78\xf7\x5b\x2e\xc7\x5b\x6e\xa6\x7d\xa0\xcf\xcc\xb0\ +\xf7\x65\xa1\xff\x96\xf7\x12\x6e\x02\x3d\x69\xbd\x33\x14\x1c\x56\ +\x53\x7a\x97\x81\x4b\xd0\xe9\xfc\x59\x0d\xf2\x40\xbd\xc2\xdb\x3e\ +\x61\xb7\x93\x94\xbd\xb8\x35\x03\x19\x30\xed\x4c\x0d\x26\xad\x46\ +\x3a\xee\x64\x40\xdd\xdc\xda\xa2\x87\x1d\x45\x8b\xe9\x14\xc9\x73\ +\x09\x9b\x3d\x6b\x0a\x06\xe8\xb1\xb3\x76\x7e\xb2\x3d\x4f\x88\x6d\ +\x2a\x3d\x89\x70\x46\x97\x4e\x13\x5f\x8d\x9f\xf0\x61\xd4\xab\xa3\ +\x98\x67\x4a\xd7\xee\x77\x44\x08\x02\x75\x6c\x7f\x09\xe7\x32\x64\ +\x52\x21\xa9\x4f\xba\x58\x34\x7c\xe4\xbe\x10\xe6\x40\x6d\x2b\x6b\ +\x5a\x46\x38\x96\xc5\x04\x77\x94\x4e\x95\x79\x32\x23\x2a\x04\x15\ +\x86\x7d\x8d\x84\x78\xd6\x81\xe4\xbb\xdf\xd5\x9f\xf1\xec\x9f\x38\ +\x00\x5b\x09\x61\xc1\x6b\x81\x7c\x0c\x6a\xbb\x7d\x2a\xff\x7b\xf7\ +\xf8\xf2\xc5\x7f\xc5\x68\xf7\x15\x8a\x47\xda\xa5\x68\xe9\x66\xdd\ +\x8a\xe4\xe6\xa6\x19\x0f\xd9\xc9\x0d\xa5\xe8\x89\x29\xd1\xa3\x29\ +\xdd\xf9\x8a\x57\x7f\xfd\x3d\xa3\xfb\x25\xf7\xa6\x3c\xdc\xac\xbc\ +\xd1\xcb\x5d\xe5\xed\x20\xdf\xa3\x55\xde\x7b\xae\xaf\x3f\xf2\x6e\ +\x5b\xe0\xf7\x03\x0e\x57\x0f\xb8\x44\x11\x4f\x60\xd9\xfd\x8c\xce\ +\xe5\x07\x58\x4d\x79\xbd\xfa\xce\xb1\xb1\x5d\xac\x35\x81\xdc\x19\ +\xe3\x98\xb8\x33\x9a\x73\x33\xed\xb7\x00\x0e\x50\x6d\x57\xcc\xfb\ +\x02\x96\x50\xcd\xf6\xcc\x6e\xba\xf4\x2e\x1f\x38\x16\xbe\x91\xef\ +\xb9\xbf\x14\x4e\xfd\xce\xc6\x25\x1d\xff\x0e\x8f\x08\x3d\xc5\x2a\ +\x26\x0c\x23\x27\x25\xf4\x64\x7a\x13\x5e\x7f\xd7\x67\xc9\x9a\xe1\ +\xa0\x43\x18\x46\x0c\xca\x2d\x8b\x55\xc1\x6a\xb9\xe1\xbb\xa5\xc7\ +\x78\x5c\xb1\xac\x0a\xc6\x5e\xe0\xba\xf3\x96\x4b\x8f\x07\x55\xc5\ +\x43\x42\x16\x14\x84\xf3\x94\xce\x68\xe8\xf4\x73\x1d\x28\xcb\x5a\ +\x79\xe4\xeb\xa3\xa0\xd3\xb1\x3b\x51\xf7\x4c\xc6\x6d\x30\xaf\x3d\ +\xfc\x63\x8a\xce\xf0\x35\x90\x27\x3a\x3e\xe9\xca\xcd\x51\xbd\xea\ +\xb7\x20\x95\x8d\xa0\x4e\xd4\x00\x30\xc6\x3b\x8e\x1a\xa7\x24\x00\ +\x5c\x20\x9e\x46\xd8\xa7\x0f\x6c\xf2\x47\xfc\xe9\xb3\x7f\xca\xe8\ +\x57\xe1\xd1\xf0\x77\x4f\x24\x44\x13\xa8\xe7\xc0\xdc\xbc\x6d\x1f\ +\xff\x35\xfe\x39\xd3\xd1\xb7\x34\xcf\x34\xda\x3e\x12\x79\x47\xb7\ +\xdb\xef\xf7\xd3\xab\x47\xfc\xd2\xc3\x2f\xf8\x8d\x5f\xfa\x75\x7e\ +\xe7\x77\xfe\x4b\x56\xb3\x90\x77\x79\x4e\x3f\x5e\xb7\x42\x3f\x00\ +\x4f\x7d\x78\xf2\x38\xe2\xdf\xff\xb5\xdf\xe6\xeb\xdf\xfe\x4f\x98\ +\x7e\xfe\x9f\xf2\x1f\xfd\xce\xef\xf0\xdb\xff\xdd\x7f\xc3\xb3\x2f\ +\x7e\xc6\xdf\xbe\x0c\xf9\xc3\x9f\x87\x7c\xff\x5e\x31\x5e\x4a\x3c\ +\xf1\x59\x4b\x72\x58\x66\xb5\x60\x76\x7a\x36\xe8\x73\x59\x6c\x5d\ +\x88\xc8\x5e\x9f\xcd\xbb\x54\xb3\x3e\x53\x6f\x8a\xdf\xd7\x00\x9a\ +\x7a\xd3\x13\x0f\xf9\x9e\x47\x3c\x1c\x3f\x74\xe5\x6b\xfd\x47\x57\ +\xf4\x47\x5f\xe9\xe7\xa9\xbe\x9e\xef\xb6\x5b\x12\xcf\x77\xac\x37\ +\x07\x0e\x1f\xef\x79\xfd\xc3\x2d\xab\x37\xf7\xbc\x5c\x7c\xcf\x76\ +\x7f\x07\x1b\xed\x1f\x6f\xfc\x3e\x6b\x3c\x96\x4b\x8f\xd2\x68\x7f\ +\x7b\x26\xd0\x65\x55\xb0\x5c\x7a\x1c\xe6\x4b\x3e\x7a\xfa\xbb\x9d\ +\x8c\xf4\xdf\x76\x58\x79\x14\x71\x61\x1c\x8a\x76\xcf\x9e\x23\x84\ +\x9b\xd7\x94\xd1\x25\x65\x74\xc9\xe4\xe6\xb5\xf3\x8a\xad\x4f\x2c\ +\x5a\xf6\x5c\xe6\x16\x8c\x7a\x8c\x55\x53\xdb\x02\x3d\x95\x91\x89\ +\x18\x5f\x35\xa6\xfb\x98\x98\x64\x60\x9e\x13\x08\x71\x54\xf6\xad\ +\x90\xaa\x06\x70\x20\x84\x9b\xa1\x66\x27\xf8\xc4\x45\xd5\x2a\x61\ +\x7b\xdb\x0a\xb6\xd2\x55\xf6\x22\x35\xe1\x3d\xff\x84\x47\xc3\xdf\ +\x75\x0c\x7c\x8e\x71\xdd\xc2\xf9\x08\xcc\xf6\xf6\xf1\xf5\x41\xfe\ +\x3d\x9b\xfc\x57\x8d\x8f\x6c\x22\x97\x94\x27\x76\x9d\x95\x1b\x5b\ +\xb5\x60\xb0\x6d\x3f\xf6\x60\x1c\xf0\x54\x5c\xf1\xea\xc3\xcf\xd9\ +\xf6\x86\x75\xeb\x51\xfc\x18\xfa\x70\xd9\x1d\x21\xfe\x2e\x7c\xfd\ +\xac\x47\x67\xf6\x80\xc7\x0f\xea\x91\xa4\x6f\xff\xf3\xff\x9a\x5f\ +\x7c\xf3\xcf\xf8\x97\xbf\xf7\x27\xfc\x3f\x3f\xbf\xe5\x5d\xfe\x97\ +\x3c\xfe\xfa\x92\x87\xe3\x87\x2c\x46\x82\xc3\x8d\x72\x8b\x40\x2b\ +\x2b\x66\x8b\x3b\xee\xa7\x17\x8e\x75\x67\xf3\x2e\xf7\xd3\x3d\x97\ +\x05\xee\xba\x77\xbf\xe5\x7e\xa6\x65\x86\xd6\xce\x7b\xed\x66\x5c\ +\x3e\x00\x1e\x98\x00\xcf\x7b\x6e\x96\xf0\x70\xfc\x90\xcf\x86\x07\ +\xde\xab\x90\x17\xc5\x1d\xd5\xeb\x19\xde\xf2\x9e\xc5\x66\x06\xa3\ +\x1c\x56\x21\x25\x1f\xb9\x9e\xc3\xd5\x14\xa6\xe3\x0b\x18\x78\x3c\ +\x0f\xc6\x30\xe8\xba\x12\x6f\x9e\x4b\xa6\x93\x21\x17\x93\x17\x6e\ +\x42\xd0\x33\xcb\xf0\xe6\xc4\x8f\xeb\xdd\x03\xe2\x4c\xa2\x26\x5a\ +\x72\x0c\x67\x03\x9d\x68\xdb\x6e\x29\xfa\xfd\x86\xab\xd1\xee\x0c\ +\x59\x5c\x3e\x67\x7d\x0b\xcf\xcb\xd7\xce\x2b\x56\x37\xbb\xb6\x26\ +\x76\x85\x12\x9d\xc3\xe8\xc4\x45\x7d\xf6\x24\x0b\x60\xcb\xb0\xb1\ +\xd2\xfe\x6f\xd1\x00\x6c\xa0\xa2\xf3\xb6\x93\xd5\xc2\x8d\x60\x50\ +\x64\x16\x82\x36\x47\xe1\x6d\x2b\xb2\xc3\x0e\x2f\xa8\xf0\xb6\xc6\ +\x37\x6e\xb4\x2a\x79\xdb\x8c\xbc\x1f\xf1\x0b\xfe\x21\xac\x39\x01\ +\xb2\x05\x65\x13\x9c\x4d\xf0\x66\x2f\x55\x4b\x72\xb8\x7d\xfd\x87\ +\xdf\x65\xfb\xe5\x3f\x25\x1c\x97\xe4\x4b\x0f\xc4\xe9\x79\x3b\x74\ +\xdf\x5d\xec\x5c\x8e\x3e\x11\x1f\x56\xaf\xd8\x7a\xb7\x88\x43\x42\ +\xd5\x19\x51\x36\xce\x67\xb1\x10\x6b\x9e\xfa\x75\x4b\xd0\xcd\x34\ +\x87\xb9\x8f\xff\x2a\x60\xf9\x17\xff\x8a\xde\xd5\x13\x66\x2f\x4a\ +\x61\xbb\xb5\x57\x00\x00\x20\x00\x49\x44\x41\x54\xae\xa2\xa7\x8c\ +\x7e\xeb\xa7\x5c\x7c\xf9\x1d\xbf\xfe\xe2\x1f\xf1\xd5\x97\xff\x90\ +\x3f\xf9\x9f\xff\x57\xfe\xa7\x7f\xf6\x47\xbc\xfb\xc5\x5b\xf8\xfa\ +\xd4\x53\xbe\x1c\x6d\x99\xcd\xa7\x0e\xc0\x96\x99\xf5\x22\xcf\x30\ +\xf3\x68\xce\x6c\x3e\xa5\x33\x06\xcc\xc2\xaf\x66\xf5\x48\xeb\x70\ +\xf4\x22\xf2\x9e\x47\x5c\x46\xef\x29\x81\x9b\xfc\x73\x7e\x63\xb5\ +\xe3\xe3\xea\x5b\xf6\xd9\x94\x0f\xd5\x82\x08\xf8\xdc\x9b\xc2\xb8\ +\xc2\x1b\x7f\xc1\x97\x9f\x4f\xd8\xc6\x92\x7e\x16\xb5\x86\x77\x5b\ +\x00\xd7\xdb\xfb\x56\xe3\x28\xe8\x89\x43\xd5\x62\x0d\x4c\x58\xa3\ +\x98\x02\xfb\xed\x96\x43\xe5\xd1\x5d\x0f\x5c\x34\xd3\xfa\xcb\x82\ +\x98\x45\x26\x98\xfa\x35\x61\x0c\x1f\xc2\x4a\xf6\xb4\xac\xe8\x3d\ +\x61\x75\xa4\x89\x2d\x1b\x37\xab\x7e\x49\xbf\xa3\xe7\x4e\xf4\x1b\ +\x3e\x30\x4a\x9a\x74\x9a\x6e\x51\xda\x2a\xe9\xdc\x04\x17\x8a\x57\ +\xb2\x66\xe3\x46\x7a\x8d\x08\xe7\x74\x1c\x07\x81\xe2\x4e\x0f\x0a\ +\x5c\x27\x47\x9f\x08\x5b\xc7\x8b\x44\x45\xa0\x3c\x54\xf5\xdd\x59\ +\x5b\xed\xac\xd5\xf6\x5f\x88\x13\x90\x1f\x3f\x0f\x20\x5d\x7f\xcf\ +\x46\xfd\x8a\x61\x5a\x6b\xb5\x35\xcf\x2b\x12\x21\x54\x66\x66\xbb\ +\xd5\xc2\x63\xf1\xcd\x77\x4c\xff\xf1\x18\x8a\x05\xf3\x72\xc4\xcb\ +\x6f\xff\x98\xff\x97\xb1\x37\x0b\x92\xe5\xbe\xce\xfc\x7e\xb9\x55\ +\x65\x66\x65\xd6\xd6\xdd\xb7\xb7\xdb\xb7\xef\x0a\x10\x0b\x09\x82\ +\x94\x48\x88\x04\x29\x8a\xa3\x65\x28\x5b\x33\xf6\x84\x2d\xc6\x48\ +\xb2\x3c\x96\x46\xa1\xa7\x79\x72\xf8\xc1\x0f\x8e\x90\xdf\xec\x07\ +\xdb\x31\xe1\x07\x4d\x8c\x6c\x86\x56\xca\xb2\x3d\x5a\x47\xa4\x16\ +\x8b\x82\x28\x40\x24\x38\x20\x81\x0b\x5c\x2c\xbc\x6b\xef\xcb\xed\ +\xee\xda\x32\x2b\x33\xab\x72\xf3\xc3\x3f\xf3\x5f\x59\xdd\x17\xd2\ +\x54\x44\x47\xd6\xd2\x6b\xf5\xc9\x93\xdf\xf9\xce\x77\xbe\xe3\x3f\ +\xda\x65\xe3\x23\xab\x60\x8f\xc8\xed\x75\x8e\xba\x09\xf9\x91\xca\ +\x51\xb0\x4b\xf0\x28\x12\x8d\x8f\x91\x98\xce\x78\xf9\xda\x0a\xcf\ +\xbc\xb7\xcf\xb5\xa7\x6f\xd1\xf8\x44\x9d\x1f\x7b\xe1\xa3\x5c\xb9\ +\xfc\x4f\x68\xae\x6f\xf0\x6f\x7e\xf5\x77\x99\x1c\x4d\x2e\x74\xd9\ +\x54\x6b\x09\x86\xa9\xc8\xac\x5d\x47\x64\xe4\xce\xa2\xe4\x8f\x4b\ +\xb6\x62\xa5\xd5\x93\x70\x43\x7e\x5d\xb5\x4b\x17\xde\x46\xb5\x96\ +\x04\xed\x56\xfc\x1b\x94\x60\x1f\xea\xab\x2c\xb5\x6e\xf2\xfc\xad\ +\x9b\x1c\x6a\x53\x1a\x76\x1d\x2f\xd0\x64\x61\x97\xe1\x63\x43\x61\ +\xa2\xf2\x84\x2e\xa3\xad\xa3\x07\xc5\x4e\xbd\x71\x63\xee\xd8\x19\ +\x37\xd8\x56\x73\x94\xe8\xf0\x9c\xcd\x17\x4c\x73\x9f\x86\xe3\xc8\ +\xa6\x47\x6a\xa7\x44\x04\x58\xb6\x22\xd9\x89\xce\xd1\x36\xc3\x56\ +\x9d\x81\xb7\x42\xf3\x92\x28\xee\x5a\xc3\x59\x26\x8e\x0b\xae\xd9\ +\xac\x64\xe3\x88\x40\xe8\x89\xb5\x50\xc1\x2f\xf8\x61\xdf\x0a\x71\ +\xfd\x1c\x4d\x53\x29\x5d\x1b\x34\x14\x52\x22\xe2\x02\xf5\x36\x8b\ +\xc9\x8f\x38\x12\xba\xe2\x18\x4b\x2c\x65\xac\x32\x18\x73\x10\x25\ +\xac\x74\xf1\x66\xca\x63\xbf\x38\x6a\x58\xf4\xcb\xd5\x04\xe1\x3c\ +\x26\xae\x06\x63\x15\x23\x97\xcf\x3d\x29\xc8\xcf\x7f\xae\x7f\xe3\ +\x7a\xa5\x30\xb0\x3e\x24\x13\x2b\x17\x5c\x95\xde\x1b\x9d\x31\x79\ +\xf3\xeb\xd4\x59\xe6\xbb\x5b\x31\x7b\xfb\xe1\x1c\xbd\x05\xc0\xc3\ +\x43\xc2\x7e\x24\x33\x5f\x3c\xec\x62\xb4\x7a\xc4\xa3\x88\xdf\xfa\ +\xee\x5b\xb4\xde\x7a\xc4\x0f\x5c\x49\x78\xf9\xc5\x4f\x30\xfe\xcc\ +\xdb\x98\x9f\xfb\x29\x9e\xfb\xe2\x02\x3f\xb3\xff\x32\xaf\xfd\xe5\ +\x5f\x31\x39\x4a\x59\x5b\xb1\x24\x5f\x9c\xb5\x04\x27\xac\x9c\xc1\ +\x4a\xdb\x27\xce\xd7\x80\xe9\x5c\x26\x5e\xe8\xd5\xa0\x35\xc3\xcb\ +\x47\x9a\x23\xdb\xd0\x2b\xa9\x5f\xfc\x0e\x48\x86\xa2\xca\x13\xbf\ +\xd9\x3f\xa4\xf1\x7d\x0d\x77\x71\x49\x0e\x8f\xaa\x40\x69\x53\x6c\ +\xc6\x16\x91\x51\xe8\x4f\x8a\xd6\x74\xd9\x8d\xd3\x5a\x19\x8c\x93\ +\x0b\x2c\x45\x79\x1c\x4d\xa6\x24\x67\x03\x0c\x16\xe9\x2e\xa8\xb8\ +\xc5\x82\x1b\x9f\x84\x4e\x4b\x63\xea\xfb\xe0\x38\x73\xf0\xad\xdf\ +\x33\xa9\x0d\x4f\x24\x9c\x10\x93\x21\x47\xb4\x8e\x26\x98\x9b\x37\ +\x38\x66\x4f\x66\xe2\xb2\x59\x22\x5c\x87\x02\x4c\x02\x89\x89\xd5\ +\x52\x2f\x6c\x15\x81\x7c\x5e\x7a\x59\xbe\x1e\x9e\x2b\x8e\xc2\x22\ +\x80\x0d\x42\x01\x43\x42\x85\xf3\xdb\x23\x7c\x19\xac\x52\x0d\x21\ +\x77\x52\x68\xa6\x39\x73\xdb\xac\x60\xf2\x57\xef\x7c\xe9\x43\x39\ +\xcf\x6a\x40\x97\xb7\x77\xf8\xd2\x85\xe7\x5b\xcf\xc3\xf8\xca\x2f\ +\x33\xbe\xf2\xcb\xc4\xfa\x73\xe8\xd2\x15\xe8\x09\x05\x5e\xa1\xa8\ +\x22\x0a\xa5\xb7\x45\x58\xec\x50\xf6\x92\x35\x72\xb7\xcb\xc9\x83\ +\x37\xd9\x1e\x3e\xb8\xd0\x91\xdb\xcd\x90\x6a\xb2\xb9\x6c\x0a\xb4\ +\xda\x57\xe9\xb6\x2c\x1e\x0e\x5d\xde\xf9\x46\xca\x5f\xbc\xb6\xcd\ +\x5f\xfe\xc5\xd7\x98\xf6\xde\xa7\xfb\x42\x1b\xe7\xda\x06\xdb\x61\ +\x9d\x2c\x3c\x91\x05\x5b\xc9\x50\x2c\x17\xac\x44\x2f\xef\xcd\x15\ +\x79\x25\x4b\x51\x16\x79\xe5\x73\xc7\x83\x59\xf7\xf0\xac\x3b\xe5\ +\x78\x30\xfb\x3d\x56\x2c\x81\xdf\xfd\x60\x56\xdc\x79\xa7\x27\x74\ +\xe2\xc2\x6d\xa7\x68\x3b\x97\x41\x0b\xe0\xe4\x5d\x19\xbc\x25\x0f\ +\xac\x8c\x05\x7d\x56\xed\xc6\x95\x8f\x47\x93\x01\x83\xc1\x00\x86\ +\x3a\x6b\x9d\x84\x8e\x9a\x12\x0f\x15\xfa\xc3\x74\xae\xf1\x51\xe5\ +\x93\xcb\x42\x7a\xda\x5a\x92\x9a\x94\xce\xd1\x36\x03\x6f\x85\xfe\ +\xca\x26\x87\x93\x84\xd6\x70\x32\x47\xa7\x09\x8e\x79\xe6\xad\x37\ +\x8f\x89\x0b\x3c\x6b\x59\x39\xfd\x92\x22\x2b\xe9\xb4\xbe\xe8\x82\ +\x35\x11\x6b\xa6\x47\xe7\xa4\x38\x71\xa8\x88\xe5\xe6\x73\x19\x78\ +\x9e\x0f\x08\xe2\x09\x16\xb6\x80\x29\xc5\x66\xa4\xb9\x56\x6e\x81\ +\xa1\xaf\x18\xf0\xf5\xec\xaf\x78\x99\x7f\xf8\x36\xbc\x23\x82\xb5\ +\x6c\x8c\x54\xb3\xf2\x9d\x07\xff\x92\xda\xda\x75\x3c\xbd\xc0\x52\ +\x91\x52\x09\xe0\xb0\xe8\x4f\xce\xae\x0a\x22\x13\xe7\x33\x2f\x37\ +\x60\x6b\x3f\x00\x8e\xf1\x81\x81\xb7\x22\x03\xb4\x64\x27\xf6\xfc\ +\x7d\x16\x86\x11\x47\x15\x46\xc0\x68\xc1\xe4\x68\x86\x69\x8d\xa6\ +\x08\xc2\x3b\x1c\xb0\xb6\xbd\xc4\x35\x1e\x72\x7a\x3b\xe1\x7e\x07\ +\x94\x65\x03\xf7\xe1\x61\x51\xbd\x77\x61\x8e\x27\x16\x8f\x97\xdb\ +\x70\x7c\xe6\x73\xb4\xe0\x54\x20\x46\x54\x14\x76\xb0\xa0\x9e\xd2\ +\xcb\x4d\xd1\x31\xcc\x7b\xb2\xe0\x5b\x6e\xcf\x32\xf1\x59\xcb\x24\ +\x0b\x9a\xf2\xf7\xbe\x7f\xa4\x70\xed\x69\xe8\x3f\x36\x20\x0c\x51\ +\x34\x17\x02\x95\x49\x2a\x7e\x57\x45\x73\x19\xd9\x03\x6c\xad\x2e\ +\xdb\xc8\xfe\xd4\xa3\x11\x4c\xc1\x15\xef\xcd\xd8\x50\x69\xf4\xd2\ +\x42\x6f\xe2\xd0\xd0\x62\x1a\x41\xce\xb8\xd5\xc1\x01\xe2\x61\xb1\ +\x88\xb1\xdb\x90\x0c\xc5\x88\x94\x06\x62\x0f\x75\x56\x19\x44\x2b\ +\x33\x71\x89\x87\xdb\x1c\xc9\xe0\x19\xb6\xea\x4f\x16\x4e\x15\x90\ +\xc4\x84\x8b\x2a\x36\xc5\xcf\xe5\x3e\x66\x67\x2c\xf4\x13\xb6\x51\ +\x87\xa8\xb0\xb2\xc2\x91\x6b\x99\x9a\xb2\x13\x25\x96\x38\x96\x54\ +\xdc\x05\xb9\x64\x45\x83\xe1\x14\xd4\x5b\x58\x48\x2f\x4b\x41\x50\ +\x58\x60\xd4\x07\xe1\xd6\x1c\x14\xf8\x8f\x09\xe4\x5f\xcf\x6a\x73\ +\x30\xe3\x7b\xfc\x32\x93\x4b\x3f\x4c\x9c\x5c\x17\x2e\x99\xf2\xac\ +\xb7\x3e\x54\x0b\x21\x56\x25\x08\x58\x64\x12\x72\x96\x8b\x77\xf1\ +\x83\x37\xee\xf1\xdd\x3f\xf8\x4d\x6e\x9f\x7c\x5b\x34\x1e\x2c\xf0\ +\x83\x26\xbb\x19\xa2\x81\xc1\x9a\x0c\x60\xd5\x5a\x92\xfa\x86\x95\ +\xd4\x07\xe5\x60\x4e\x69\x76\x14\x42\xb2\x13\x71\x90\xee\x90\x1f\ +\xa9\xb4\x07\x21\xf9\x82\x73\x11\xef\x16\x59\xb9\x7c\x9c\x2f\x08\ +\x6c\x7c\x3c\x10\x54\x5c\x2f\xab\x00\x9f\x5c\xfc\xfc\x32\x63\x97\ +\xd4\x5b\xb5\xfb\x57\xd2\x6b\x65\x26\xb6\xdb\x1a\x93\xbd\x01\x4a\ +\xda\x03\x2f\xa7\xdf\xef\xd3\xef\xf7\x19\x8c\x12\x06\xbb\xd0\xef\ +\xf7\x89\x0f\x7c\x74\xdd\x22\x48\x35\xfc\x69\x44\x7c\x10\x33\xc8\ +\x53\xf0\x72\xc6\xa9\x41\xa3\x27\xb2\xa9\x53\x5b\xa4\x11\x4c\x69\ +\x69\x0e\xe3\xbc\x43\x43\xe9\xe3\x17\x06\xe4\xee\xb5\x26\x9d\x96\ +\x86\xa2\xb6\xc8\x2a\x30\xc2\x53\x1d\x49\xb5\x59\x76\x34\x97\x89\ +\xa9\x24\x8c\x92\x2b\x2e\x31\xb1\xea\xfb\x92\x67\xae\xca\x3c\xc7\ +\x7e\x8c\x9a\x5a\xb9\xd8\x5e\x64\x99\x72\xa6\x4e\xeb\x47\xf8\xd3\ +\x33\x88\x74\x31\xed\x61\x76\x65\xb6\x8d\x11\x03\x95\x71\xe1\x0a\ +\xa4\x95\xc7\x50\x91\x4a\xb7\x92\x27\x76\xe6\x66\xd4\xc2\xf9\x76\ +\x74\xa1\x66\x4b\x09\xb1\x22\xf1\xb5\xee\xc1\x16\xf6\xce\x0f\xf3\ +\xeb\x59\xed\x3f\x2a\x88\xcb\xcf\x7b\x07\x01\x41\x0e\x46\xbf\x5c\ +\xd1\x1f\x5b\xf2\xb2\x25\x3a\x72\x33\x71\x92\x98\xdf\x8b\x8a\x20\ +\xcf\x99\xf8\xe1\xac\x03\x54\x14\xac\xa3\xc7\x62\x60\xf3\x78\x64\ +\xcc\x4d\x59\x94\x19\x2d\xab\x5f\x92\x9d\xb0\xd2\x67\x62\xae\xd5\ +\x9c\xaf\x49\x01\x4f\x19\xe8\xdb\xb5\x75\x8e\x47\x86\x1c\x08\x2d\ +\x1b\x1d\x65\x93\x63\x2e\xdb\x14\x3f\x53\x64\x74\x73\xae\x90\x2b\ +\x3f\xbf\x97\xf7\x24\x5f\x5c\x3e\x5e\xe8\x9f\x62\x14\x85\xdf\x8a\ +\x35\xe3\xb2\xd5\xc9\x63\x82\xbe\x48\x50\x8f\x3b\x1d\xf2\x62\x51\ +\x62\x5b\xd1\xe8\x74\x3a\x74\x3a\x1d\x36\xaf\x3a\x6c\x76\xda\x74\ +\xda\x9b\x24\x89\xd0\x0e\x5f\xae\xad\x72\xe3\xc5\x75\xba\xd7\xaf\ +\xd1\x69\x6f\x72\xb9\xb6\x8a\xd2\xde\xa4\xd3\xde\x04\x3a\x28\xed\ +\x4d\x86\x03\x0f\xa7\x93\xa2\xb4\x9b\x05\x9b\x92\xa3\xa8\xad\x82\ +\x57\x2e\xf4\xc8\x85\x29\x84\x9b\xf9\x32\x8b\x7a\x86\xc5\xd1\xe9\ +\xd9\x9c\x30\x5e\xc2\xb2\xa2\xf1\x51\xf2\xc4\xb3\x13\xa1\x51\xd4\ +\x37\x36\x71\xa0\x89\x4c\xac\x99\x33\x0b\x14\xb9\xaa\xb6\xd3\x01\ +\xd3\xc2\x3f\x27\x92\xb7\xca\x9d\x64\x45\x86\x4b\xcb\x59\x8c\x42\ +\xbe\xa9\xf8\x02\x57\xeb\xa1\x28\x10\xc3\x7e\x84\xd5\xd7\x84\x25\ +\x40\x38\x2b\xf2\x6c\x3f\x28\xd8\x8b\x50\x66\x6a\x13\x13\x6f\xed\ +\x2a\x1f\x78\xdf\x62\xe7\xdd\xda\x3f\x98\x8d\x7f\x3d\xab\xb1\xf3\ +\xae\xf8\x90\x75\xd6\xce\x0e\xd1\x9a\x5a\x74\xe8\x66\xab\x74\x4b\ +\x56\x62\x5e\x64\x6f\x8a\x93\x71\xac\x51\x77\x8a\xe9\x90\x73\x3f\ +\x63\x6f\x3f\xe4\xe1\x41\x84\xff\x68\x97\xe5\xf6\x0c\x07\x5f\x76\ +\xd6\x65\x70\x9c\xc7\xc2\x17\x5a\xa9\x45\x96\x5e\x75\x14\xa9\x61\ +\x38\xaf\x3a\x2b\x71\xec\x4a\xea\xcb\x63\x99\x8d\x7b\x79\x8f\x23\ +\x4d\x04\x6a\xd9\xa5\xeb\xe5\x3d\x19\xb8\x0b\xbd\x9a\xcc\xc4\xcb\ +\x6d\x64\xa6\x2e\x8b\xba\x4e\xd4\xe4\xf1\xe0\x31\x07\xbd\x13\x8e\ +\x42\x21\x8e\xbf\xd4\xef\x33\xb6\xa7\x28\xed\x26\x69\x65\xcf\xc8\ +\xa8\xe8\xcc\x96\xf4\x5a\xd2\x1f\xb2\xab\xf6\xd8\x79\x38\xc6\x3b\ +\x3e\x62\x57\xed\xb1\x37\x3d\x04\xfa\x0c\xe8\xa3\xdb\x21\xba\x1d\ +\x62\xac\x5d\xa2\xe9\x1a\xb4\xe9\xa0\x77\x44\xf0\x96\x7a\x89\x86\ +\xcd\x9c\x9f\x5b\xe6\x38\x73\xf4\xdc\x95\xc2\xde\x61\xf4\x58\x64\ +\xe1\xb6\x3b\xeb\xda\x55\x31\x71\xc9\x2f\x6b\x41\xb9\x3b\x31\x10\ +\xdf\x53\xe8\x89\x43\xd1\x55\x3b\x27\x69\xb4\x2c\x53\x8c\xe0\x9b\ +\x16\xb9\x15\x48\xbf\x09\x2a\xd9\x56\x0b\x15\x69\xc4\xcd\x28\x16\ +\xc6\x28\x51\x28\x9c\x7e\xe2\x09\x49\xa0\x73\x9c\xf7\xc9\x23\xa1\ +\x8c\x3b\xe9\x47\xe8\x61\x48\xa0\xa9\x28\x7e\x40\xd8\x37\xb0\xd3\ +\x8c\xb0\x9f\x90\x0f\xb6\xd8\xe8\xc7\x8c\x57\x27\xbc\xf3\x76\xfd\ +\x43\xb3\xf1\xf0\x0e\xfc\xeb\xb7\x45\xf0\xde\xc9\xc6\x8c\x57\x67\ +\x7f\xe8\xf5\x2b\x57\xb0\x8d\xcf\xcc\x4f\x83\x48\x43\xc1\xf0\x82\ +\x88\x24\x8a\x14\x8c\x46\x4a\x3c\xd6\x64\xb3\xa3\xc4\xc4\x67\xe1\ +\x2e\x71\x78\x20\x29\xb0\x12\x5f\x6e\xa8\x82\xae\xea\x44\x4d\x09\ +\x27\x00\x96\xb5\x53\xb2\xf0\x44\x04\xab\xb5\x24\xb3\xe1\x6a\xa1\ +\xad\x56\x6a\x8b\x4f\xfc\x7b\x26\x47\xa9\xec\xd8\x1d\x0f\xb8\x70\ +\x5c\x6e\x8b\xa2\xad\x5a\xe4\x55\x03\xb9\xcc\xc6\x00\xf1\x28\x9a\ +\x3b\x56\x27\x3b\x0e\xf7\x52\xb2\xf0\x84\x61\xab\x4e\xb8\x7e\x95\ +\x89\x1f\x72\x3a\x0d\xd8\x3f\x1c\xd0\xef\xf7\x39\x9d\x06\xf4\xfb\ +\x7d\x0e\xa6\xa2\x73\x27\xd2\x66\x8d\x8e\x69\xd1\x5e\x37\x30\xdb\ +\x35\x3a\xed\x3a\xed\x95\x26\x7a\xb7\x56\x38\x06\x09\x65\x59\xa9\ +\x3f\x56\x3b\xe9\x1c\x6c\x68\xa2\x31\x0e\x98\x19\xb1\x14\x01\xdd\ +\xb0\x0b\x53\xc7\x61\xce\x4e\x2c\x10\x6d\xdb\x3d\xa2\xed\x1e\x49\ +\x38\x71\xfe\x56\x85\x13\x65\x46\x2e\x23\x56\xad\x96\x38\x98\xf9\ +\x6c\x73\x7d\xa9\x03\xb6\x72\x49\xaf\x11\x46\x62\xea\x23\x54\xf0\ +\xfb\x7d\xfc\x52\xe9\x66\x5a\xc2\x24\xa5\xea\x3f\x61\x5a\x34\x5b\ +\x1a\xcb\xad\x4b\xe2\x44\x70\x14\x1c\xd3\x22\x29\xa4\x9c\xbe\xd6\ +\x10\xcb\x6b\x34\x15\xf0\x38\x1d\x2f\xb2\xdb\x31\x78\x66\xe9\x65\ +\x94\xe7\x7b\xec\xbc\x5b\xe3\x5f\xbf\xfd\xe4\x8c\x5c\x06\x30\x80\ +\x77\xf7\xe7\xe4\xf3\xb7\x13\x95\x38\x3f\x38\x27\x96\xaf\xee\xfc\ +\x50\x66\x27\x6b\x41\xeb\xc5\xc5\xd6\xa6\xb2\x5a\x2e\xc7\x9d\x86\ +\xc9\x2d\x0c\x6b\x0d\xe5\xcc\x97\x01\x59\x36\x39\x72\x7b\x9d\x41\ +\x5b\x78\xaf\x95\x7a\xdd\x43\x3f\x67\xd5\x51\x38\x4e\x17\xc9\xc2\ +\x13\x9e\x1f\xac\xc9\x00\x5e\xd6\x4e\x9f\xf8\x8f\x31\xac\x35\xce\ +\xba\xd3\x39\xec\x5c\x66\x54\xe5\xcc\x27\x5f\x70\x64\x40\x57\xdb\ +\xca\x5d\xb5\x08\x52\x65\xa6\x6b\xee\xaa\x11\xbd\xcc\x64\xb9\x8d\ +\x84\x1f\xcb\xda\x29\x47\x61\x31\xba\x94\x8f\x58\xeb\x2e\xb1\xdc\ +\xbe\xcc\xc6\x92\x41\x77\xa3\xcd\x62\xcd\x66\x7d\xb5\x8d\xbe\xd0\ +\xa6\x6e\x5a\x74\x3a\x1d\xb1\xac\xd1\x36\x09\xd2\x59\x72\x68\xd6\ +\x6b\x98\xa6\x49\x33\x17\x1f\x25\xaf\x5c\x15\x0f\x25\x49\x38\xe7\ +\x22\x94\x24\x21\xa9\x9d\x4a\xaa\xad\x2a\x92\x97\x57\x29\x7b\x76\ +\x7f\xe0\xad\xcc\x65\xe2\x12\x4e\xc8\x02\xd0\x71\x64\x46\x8f\x8b\ +\x8c\x1c\x81\x98\x76\x9e\xf7\x98\x9c\x05\x74\x5a\x04\xad\x16\x2a\ +\x18\x84\x58\x15\x16\x42\xaa\x87\x8a\x06\x41\x69\xa6\x52\x7e\x84\ +\x08\xa3\xc0\xa0\x30\x48\x29\x9d\x35\x2d\x2b\x97\xd3\x1e\xaa\x95\ +\x0b\x45\x9c\x65\xe2\x03\xef\xef\xef\xc2\xe3\x1b\xd4\xf2\xa7\x04\ +\xce\x7d\xbb\x3e\x87\x7b\xab\x85\xdc\x9d\x6c\x4c\x7e\x47\xfc\x53\ +\xdd\xa7\x7e\x7b\x16\x14\xfa\x55\x3a\xd6\xf5\x4a\xf0\x7e\x88\x77\ +\xdb\xdc\x88\x53\x5d\x42\x9d\x30\x8a\x20\x8a\x48\x4e\x5d\x5a\xfa\ +\x3d\xe2\xf0\x80\xd5\xd5\x19\xa6\xdd\xcd\x40\x29\x6c\x54\x85\x6b\ +\x8f\xe8\x8e\x3d\x7b\x68\x08\xfb\x2a\x3f\x97\xd9\xf8\x4e\xfb\x80\ +\xc3\xa2\x7d\x7d\x9c\x8a\x2c\x6c\x77\x4c\x59\x18\xaa\x93\xc7\x42\ +\xe9\x96\xfa\x12\x26\xcc\x06\x24\x45\xa0\x56\x9f\xaf\x66\x62\x59\ +\xdc\xe5\x6b\x17\x9e\x2b\x83\x3e\x0b\x4f\xe4\x09\x75\xea\x9d\xd0\ +\x6d\x59\x3c\xff\xe2\x47\xa8\x2f\xd6\x08\xf4\x06\x69\xde\x40\xef\ +\xd6\x30\xb1\xe9\x98\x16\x1d\xd3\x42\xe9\xb4\xe5\x68\x12\xd8\x72\ +\xca\xa3\x9c\xc3\x4b\x92\x90\x91\x12\x09\xf1\x7c\xbd\x26\xc7\xfc\ +\x47\x93\xa9\x18\x1a\x2d\xf4\xc7\x49\x12\xd2\x6a\x5a\x8c\x03\x91\ +\x91\xcb\x2c\x5c\xc2\x09\xd5\xf7\x81\x06\x99\x21\x30\x5a\xb9\xc2\ +\xa1\x74\xbf\x1f\x78\x2b\x73\x22\xa0\xf3\x90\x22\xb5\x53\x89\xab\ +\xc7\xea\x14\x75\x6c\x65\x33\xea\xa9\xf8\x27\xa6\x15\xac\xca\x39\ +\x3a\xad\x54\x13\x39\xa6\x25\x82\xba\x90\x66\x6a\x17\x2c\x51\x28\ +\x3c\xdd\xaa\xcc\x72\xb9\x70\x3c\xaf\x28\xe6\x20\xd4\xeb\xe8\xab\ +\x6d\xe8\x36\x69\xad\xdc\xa2\x3d\xbc\x89\xf2\x7c\x8f\x3f\xfd\x5d\ +\x97\x7f\xa1\x4e\x2f\xe0\x60\x00\xe5\x79\xf1\x4f\xfd\x49\xe5\x27\ +\x79\xf9\xf9\xaf\x73\x37\xfc\x9f\x41\xb9\x01\x91\x52\xe8\x84\x0b\ +\xe1\x4f\x21\xa9\x94\x59\xb8\xa2\x81\x2e\x2d\x60\xc5\x54\x4b\x51\ +\x08\x86\x17\x47\x8d\x54\x6b\x09\xd5\x5a\xa2\x7b\xb2\x47\x3e\x5d\ +\xe7\xc6\x25\x03\x65\x25\x93\xa6\x25\xef\xad\xc6\x73\x83\x9a\x65\ +\xf0\x96\x99\xb9\xcc\xd6\xbb\x99\x28\x0c\x17\x86\x11\x47\x21\x1c\ +\x1e\x9e\xc8\xa0\x2b\x9b\xb7\x17\x02\xf5\xef\xb9\x9d\x87\x18\xcb\ +\x6d\x24\xb4\x50\xad\x25\x26\x47\x29\x87\x7b\x22\x0b\x3f\xf3\xe2\ +\x2d\x96\xdb\x97\x59\x6e\x5d\xa2\xdd\x6e\x63\x4b\x81\x79\x25\x40\ +\x26\xe2\x6f\x0f\x52\x8d\xb4\x2e\x32\x6e\x1f\x95\xa6\x25\xbe\xa7\ +\xa7\x37\xb0\xe3\x9c\xd1\x64\x4a\xaf\x3f\x62\xe7\xf8\x31\x23\x2f\ +\xc6\x09\x2c\x6c\x2d\x95\x1c\xb2\xae\x8b\x00\x2e\xb3\x70\x19\xc0\ +\xe5\x63\x4f\x75\x80\x31\x6a\x2c\xfe\xf8\xd2\x3c\x3c\x18\xa4\x4c\ +\xb5\x75\xda\xee\x11\x6a\x78\xc4\x61\x3e\xcb\xec\xd3\x02\x4e\x94\ +\x90\x42\x0b\x84\x8f\x6b\xc3\x31\x50\x1b\xa1\x2a\x2b\xf5\x52\xd4\ +\x5e\x06\xb0\x9d\x66\xd8\x69\x86\x1e\x9e\xb3\xb1\x2a\xb2\x6f\x19\ +\xb8\x17\xd6\xe6\x16\x81\x20\x97\x2f\x9a\x22\xdb\x96\x46\x85\x69\ +\x71\xa2\x94\x5f\xdb\x75\x15\xae\x2d\x76\xb1\x2d\x8b\x4e\xd6\xe4\ +\x0b\x9f\xff\xe2\x5c\xe0\x96\x90\xa2\x84\x11\x6f\xbf\x29\x84\x07\ +\x1f\xef\xfc\x02\xfb\x0b\x2b\x1c\x8c\x7e\x19\x4f\xbf\x2e\x5c\x3a\ +\x4d\x93\x64\x30\x28\xe8\xb2\x73\x53\xd2\xe7\x94\x6a\xf2\x14\x33\ +\x73\x4c\xd3\x14\xac\x85\x25\x0a\xdd\xf1\xa9\xc7\x61\xfc\xd4\xdc\ +\x3c\xdc\x5b\x7b\x39\xe3\xe3\x3d\x54\xee\xf1\x63\x2f\x3f\xc5\xad\ +\x97\x3e\x8a\xbb\xfc\x31\x39\x82\x54\x06\xf2\xf1\x40\x60\xd0\x9d\ +\xfd\x0e\x59\x78\xc2\x19\x6b\xd8\x1d\x81\xa7\xcb\x06\x49\xb5\x71\ +\xe2\xf9\x95\x69\x72\x3f\xbd\x10\xd4\xe5\x73\xe2\xd8\xff\xd0\xa0\ +\x3e\x1e\xcc\x98\x8b\xc9\x51\x2a\x83\xbc\xdb\xb2\x58\x6e\xc6\xd4\ +\x17\x6b\xac\x6c\x26\x42\x4f\x1c\xa9\xc2\xc2\xb5\xd0\xf8\x96\xbe\ +\x10\xe5\x73\x79\x7f\xc0\xfe\x78\xca\xc9\xf1\x01\xb7\x1f\xee\xf3\ +\xfa\x07\x77\xb9\xfb\xc1\x07\x7c\xf7\xfe\x2e\x0f\x0e\x0f\xd8\x9d\ +\x84\x44\x64\x82\x9e\xa3\x7f\xa1\x39\x32\x0b\xd6\x99\x87\x85\xa7\ +\x8a\x2c\x5c\xfa\xb8\x95\x16\x5a\x67\xe1\xae\x84\x11\x1f\x76\x53\ +\x9b\x22\x70\xcd\x39\x6a\x54\x50\x6c\x7a\x18\xcd\xfb\x12\x6b\x28\ +\x85\x07\xb1\x27\xc9\x31\x3f\x56\x70\x4a\xf1\x4c\x91\x79\x4b\x5d\ +\xb1\x71\xce\xab\xb8\x2c\x0a\xcb\xc5\xe3\x61\x18\x91\x72\xb1\x19\ +\xe2\x54\x2e\xed\x21\x16\x5a\xa7\x58\xb4\x68\xc1\xb5\xe6\x0f\xf0\ +\xf1\x4e\xc2\xd6\xc6\x37\xd9\x79\x77\x02\x1f\x9d\xf2\xea\x9d\x2f\ +\x71\x27\xfb\x33\x00\x3e\xf6\xe2\x3d\xda\xc3\x9b\x5c\x7d\x41\xe7\ +\xd9\xcd\x97\x85\x01\x92\x9c\x30\x89\xf8\xce\x77\x1e\xb1\x5a\xdf\ +\x25\x5b\x58\xc2\x6e\xc0\xae\x1f\xb2\xe1\x58\x2c\x75\x8a\x00\x0d\ +\x23\x82\x7e\x8f\xb8\x63\x16\x89\x7a\x42\x4c\x9f\x28\x99\x51\x71\ +\x83\xb6\x45\xfe\xf8\xb6\xcc\xd0\x0b\xbd\x1a\x3d\xe0\xad\xbd\x1e\ +\x8d\xe5\xcb\xfc\xd0\x0b\x2a\x57\x3e\xf5\x0c\x2b\x1b\x47\xfc\xed\ +\xff\x73\x83\xbf\x7b\x5f\x83\xfc\x35\xba\x47\x45\x3b\xd7\xd1\xa8\ +\xaf\x68\xac\x58\x4b\x64\x85\x41\x8a\x1f\x34\x89\x07\x8f\x99\x1c\ +\xef\xd2\xcb\x4c\x32\x3f\x65\xcc\x14\xd7\xb1\xe8\x67\x03\xf4\xc0\ +\xc4\x75\x34\xa0\x4f\xe6\x37\x51\x9d\x4e\x11\xb4\x85\x13\x10\x53\ +\x5c\x3a\x78\x7e\x88\xeb\x5c\xd4\x36\x2c\xb7\x41\xb5\x34\x0e\xa6\ +\x8e\x5c\xed\xad\xe6\x23\x36\xaf\x3e\x45\xa3\x2b\x4e\xfc\x47\x7b\ +\x09\x56\x3a\x00\x06\xc5\xea\x62\x70\x6a\xe2\xb8\xaf\x0e\x68\x16\ +\x5a\x06\xe1\xe9\x51\x9c\x58\x51\x48\xa7\xd3\xa4\x5e\xd0\x96\x1d\ +\xd3\x22\xad\x17\x54\xe4\xb0\x8f\x47\x4e\xb3\x08\xde\x20\xd5\xb0\ +\x99\xd9\xc8\xba\x99\x2f\x83\x17\xd5\x21\x73\x1c\x86\xa3\x90\xe5\ +\x26\x8c\x6d\x81\xbb\x17\xac\x0d\x06\x1e\xd4\xd8\x97\xc1\x3c\xf0\ +\x56\xe4\x4e\x12\x80\x24\x73\xd0\x64\xe7\xae\xd0\x26\x17\x7c\xb3\ +\xf4\x27\x0e\xb1\xa4\xbd\x2a\x51\x02\x08\x97\xf4\xf3\x2a\xfa\xf2\ +\x72\x6b\x22\x96\xc8\xb4\xc6\x0d\xfc\x62\x75\x58\xc9\x1d\xfb\x85\ +\x49\x77\x79\xa4\x32\x2c\x5a\xf5\xa8\x28\x67\xec\xac\x88\xd9\x65\ +\x1f\x70\x8d\x3a\xff\xd5\x47\x3f\xc2\xee\xf5\x67\x78\xe5\xe1\xfb\ +\xfc\xf4\xed\xaf\xf0\xbc\xfa\xb7\x02\x37\x0d\x6f\xf2\x85\xcf\x7f\ +\x91\xd6\xca\x2d\xd6\xeb\xcb\x72\xd4\xdf\x2a\x0b\x52\x33\xa4\x7e\ +\xf3\x19\x0e\xef\xbf\x0f\x27\x3a\x6b\xdd\x26\xd7\xcc\x70\x6e\xa8\ +\x54\xb5\x72\x74\x4b\x74\x97\xc4\x89\xd9\x21\xf2\x32\xfa\xb1\xc5\ +\x52\x57\xe7\x23\x2f\x75\x69\x3f\x7d\x99\x77\x6e\xff\x07\xb6\x5e\ +\x7f\x0f\xff\xd1\xee\xec\xd2\xed\xc1\xfb\x6f\xde\xe3\x6b\x03\x8f\ +\x1f\xfc\xcf\xee\xf3\xc9\x4f\x7c\x9a\xab\xbf\xf4\x73\xdc\x7a\xe7\ +\x36\x6f\xbc\x7a\x1d\x9f\xf7\x71\x8e\x37\x50\x96\x0d\x89\x9b\xc5\ +\x7f\x77\x24\xfd\x8b\x7b\x99\x89\xe7\x87\xc4\x4e\x0d\xc3\x17\x99\ +\xb8\xe3\xe4\x78\x45\x56\x6e\xd0\x44\x75\x46\x32\x90\xc7\x84\xb8\ +\x95\x2c\xd1\xa0\x46\x8f\x94\x2e\x33\x2d\x71\x95\x1b\x06\x0b\x56\ +\x80\xbb\x22\x6b\x5f\xbf\x76\x8b\x2b\x37\xaf\x73\xe9\xc6\x66\x31\ +\xc2\x50\x38\x3e\x15\xff\x4b\xbd\x48\x4c\x5d\x20\x9d\xb6\xd0\x6a\ +\x43\x3a\x99\x22\x18\x08\x33\x93\xc5\x5b\x75\x25\x18\x64\xf4\x51\ +\x51\xa2\x09\x4e\xcd\x94\x01\x0c\xa0\x7a\x0e\x74\x52\x19\xc0\x79\ +\x63\x8c\x37\x76\xc4\xe3\xc0\x41\xd7\x2d\x22\x1a\xa8\x81\x29\x33\ +\xf1\x8d\x4b\x06\x03\x6f\x1d\x06\xfb\xd8\x6d\xad\xc0\xc7\xf3\x58\ +\x58\x14\x85\xce\xdc\xf0\xa9\xdc\x63\x27\xc5\xec\x16\x28\xa1\x82\ +\x6a\x26\xb3\x82\xc8\x32\x71\xc2\x48\x76\xe4\xe2\x0a\x56\xd6\x42\ +\x05\x5f\x0d\xb0\xac\xfc\x82\x2d\xab\x66\x9a\xa4\x51\x24\x8f\x16\ +\x33\x75\x5c\x5a\xd1\x50\x94\x41\x1d\x86\x0a\x76\x9a\x0b\x89\x26\ +\x26\x53\x7d\x99\xe5\x16\x7c\xe1\x3a\x6c\x7d\xe3\x26\xbf\xf5\x78\ +\x99\x17\x6f\xbd\xc6\x8f\x7e\xe1\x5f\xb1\x79\x6b\x1d\x3b\x2a\xf6\ +\xdd\x45\x9c\x9b\xc1\x52\x58\x30\x15\xb2\x67\xae\x8a\xb3\xbc\x5b\ +\xc7\x2a\xf7\x89\x16\xda\x08\xcb\x34\xcf\x95\x7c\x39\xb0\x80\xdb\ +\x1f\x01\x36\x86\xe2\x89\xa5\x8f\x4f\xe2\x7d\x95\x26\xbd\xe1\x88\ +\x3f\x7e\x4b\x8c\xee\x7b\x67\x47\x18\xcb\x9f\xe3\xc7\xaf\x2d\xf2\ +\x89\x8d\x0e\xdb\x7b\x1d\x8e\x0f\x0e\x51\xc3\x23\x1e\xaa\x22\xd3\ +\xe4\x47\x2a\x0f\x0f\x22\x26\xc7\xbb\x9c\x8e\x0c\xc6\x14\x12\x4b\ +\x5f\x1c\x5d\x27\xc2\x2b\x24\xaa\xe2\x3e\xb8\x88\xe0\x6d\xf8\xb5\ +\x27\x66\xdd\x6e\x65\x4f\x5c\x2f\xef\xb1\x0c\xac\xac\x3e\x87\x6d\ +\x8f\xb8\xb6\xbe\xce\xa3\xfb\x0f\xe8\xf5\x15\xbe\xf8\x99\x0e\x37\ +\x57\x72\xdc\xee\x0a\x0b\x56\x9d\x34\xb7\x30\xea\x1d\xb4\x49\x84\ +\x55\x0c\xd5\x96\x59\x55\x9b\x44\x60\x4e\x49\x8b\xd7\xc5\x7b\xa6\ +\x0a\x0b\x40\x2d\x9d\x33\x53\xa1\x92\xe6\x3c\x35\xa7\x59\xb0\x18\ +\x49\x12\xe2\xdb\x21\x76\x92\xd2\x47\xa3\xab\x6a\xe4\x5e\x8e\xa7\ +\xce\xe0\xc5\xf9\x9b\xcc\xc4\x45\x81\x57\xb2\x14\xab\x4a\x32\x27\ +\xdf\xd4\x82\x96\x1c\x46\x4d\xed\x14\x83\x27\x6c\x14\xbd\x70\xb3\ +\x4c\x39\xae\x54\xbe\x65\x9a\x55\x32\x17\x8a\x1c\xeb\x11\x2e\x98\ +\x79\xa5\xbd\x6c\x49\x09\x67\xd9\x6e\x0e\x0b\xef\x8a\x92\x97\x4e\ +\x2b\x30\x26\x2c\x27\xac\xe3\x09\xf6\x48\x63\x94\xa7\xe8\x76\x82\ +\x6d\xd4\xd9\xcb\x6a\x74\x9e\xdd\x42\x7b\xa8\x70\x9c\xff\x2c\x97\ +\x17\x4d\x16\xc8\xc0\x9c\x59\xbf\x5a\x91\x22\x8a\xd2\xb2\x33\x17\ +\x28\xa8\x5a\x83\xfa\xa4\x47\xd4\x1f\x48\x08\x24\x3b\x75\x4f\x5a\ +\x8a\x16\xf6\x19\x8d\x43\x9a\x45\x76\x4e\xc7\x27\x6c\x6f\xdd\xe3\ +\xdd\xf7\x1e\xe3\x9a\xf3\x05\x54\xb7\x65\xf1\xa8\x77\xc4\x1f\xbf\ +\xf5\x88\x3f\x7e\xeb\x11\x1f\x7f\xe6\x11\xef\xdf\x5a\xe6\xe6\xa6\ +\x8d\xaa\x7d\x9a\xcb\xf9\x1e\xf7\x07\x0a\x0c\x0e\xd9\xcd\x60\xf2\ +\x68\x97\xe3\x01\x78\x7e\x8e\xeb\x8c\xc0\x37\x49\xec\x09\xf9\x28\ +\xc7\xd0\x4d\x19\xc0\x02\x1f\x8b\xfb\xfd\x6c\x40\xc7\x69\x8b\x23\ +\x6d\x09\x21\x24\x04\xa9\x24\x8c\xae\x1a\xf1\xe9\x85\x15\x8c\xb5\ +\x16\x76\xbb\xcb\x83\xc7\x31\x2b\x16\x1c\x76\x72\x1a\xcb\x97\x49\ +\xcd\xab\x74\xac\x19\x3c\x88\x27\x3d\xb4\xca\xb8\xbe\x36\x11\xc2\ +\x1a\x0d\x5b\x14\xee\x93\xf3\xdb\xa9\x32\xce\x39\x6c\x8b\x91\xa6\ +\x89\x38\x09\x95\x68\x02\x8d\x99\x78\x9e\x54\x58\x5d\xe1\xd6\x18\ +\x91\x92\xbb\x0a\xc5\x8c\xa9\xcc\xce\x42\xe0\x3e\x9f\x89\xcb\xcc\ +\x5b\xf2\xc5\x2d\xb6\x67\xed\xe5\x00\x1a\xc5\x74\x88\x9c\x12\x29\ +\x8a\x3c\xdd\x2a\x27\x94\xad\x52\xe7\x10\xce\x63\xe4\x48\xd0\x68\ +\x46\x45\x7d\xe6\x44\x96\x5c\x18\x63\xa7\x19\x9e\xa3\x14\x7b\x3f\ +\x66\x25\x93\x53\x1d\x5f\x2a\xe6\xed\xca\xad\x19\x56\x14\x51\x6e\ +\x75\x88\xc2\x10\x2b\x35\x45\x00\x17\x2e\x3b\x4d\x25\x23\x34\x73\ +\xea\x96\xc5\xb3\x5a\xc4\xfd\xad\x9f\x27\xdf\x3c\xe6\x27\xba\x75\ +\x0c\xb3\x0f\x74\xa4\x5b\x50\xd5\x2e\x36\x2c\x32\x31\x40\x43\x09\ +\xa1\xd3\x91\x85\x80\x45\x58\x08\x93\x8a\x1d\xd1\x61\xb9\xca\x61\ +\x16\x0c\x4a\xab\xce\x58\xab\x95\x12\x3c\xf2\xe3\x18\xd7\x3c\x94\ +\x4d\x85\xf2\x76\x3a\x32\x68\xb5\x5b\xe0\x41\x2f\x85\xbf\xb9\xf3\ +\x88\xb7\xf6\xca\xae\xd9\x43\xd9\x70\xe8\x65\xe1\x5c\x80\xba\xf9\ +\x2c\xe3\xea\x41\x5d\x2e\x2c\x8a\x93\x08\xa3\xb0\x53\x4d\xec\x09\ +\x7a\x50\xa7\xa3\xb6\x0b\x9c\x5c\x27\x23\x95\xb8\xb9\x85\x5b\x64\ +\x66\xf1\x3e\x74\xd5\x08\xa3\x69\xd2\xb0\x2f\x71\x65\x25\x07\x12\ +\x82\x9a\xca\xdf\x85\xd0\x6d\xde\xe0\xc5\xce\x2a\x37\x37\x0d\x1c\ +\x7d\x4c\x4e\x1d\x3d\x50\xd1\xed\x4c\x14\x74\x72\x99\xa4\x2d\xbb\ +\x60\xe7\xe7\xd8\x6c\xad\x4e\x50\xbc\xa7\xd5\x2c\x2c\xda\xd2\x16\ +\x03\x90\x70\xa2\xba\x85\xb4\x67\xe7\x98\x05\x3e\xee\x78\x39\xfd\ +\x4c\xbc\xe6\xa9\x0e\x49\x12\xa2\x05\xb3\xac\x3c\x3e\xf5\x18\x58\ +\xcf\x4a\x0c\x1c\x0c\x52\xda\xed\x23\x0e\x07\x3a\x3f\xa6\x05\x24\ +\x99\xf3\x44\x48\x21\xdb\xce\x8a\x1f\x40\xa4\xe3\xfa\x79\xe1\x9f\ +\x36\x7f\x4b\x09\x65\x03\x40\x2b\x98\x85\x12\x0a\xd8\x46\x5d\xfa\ +\x53\xa4\x17\xa4\x9a\x4f\x30\x9e\xaa\x70\xb4\xae\x9f\xa3\xf8\x39\ +\x56\x6a\x12\x6a\x11\x4a\x49\xbb\x35\x0d\x68\x1a\x58\xa9\xc9\xc4\ +\x0f\x09\xb1\xb9\x7a\x45\xe7\x85\xee\x9f\x8a\x4b\xb0\xb2\x36\xe7\ +\x16\x54\xde\x0f\x2b\x98\x37\x4b\xc7\x60\x89\x25\x07\x96\x69\xd2\ +\x31\x4d\x30\x3b\x73\x3c\x38\x96\x39\xa3\x11\x73\xf1\x77\xbb\xae\ +\x8d\x6a\x07\x9c\x45\x19\xbd\xdb\x03\x76\x46\xce\x05\x2a\x6b\xe0\ +\x88\xa2\xcd\xf3\x4d\x3c\xe3\x59\xba\xed\x0e\x69\x7b\x83\xde\x00\ +\x86\x83\x21\x77\xdf\x7a\xc8\xab\x6f\x3d\xe2\xf5\x87\x87\xf4\x06\ +\x02\x1e\xc8\x2c\xab\xcc\x02\x35\x4e\x22\xe2\x24\x2a\xf8\x6d\x13\ +\x37\x8f\x64\x70\x27\xf6\x44\x64\x60\x35\xc7\x75\x2c\xc6\x4c\xf1\ +\xfc\x90\x56\xe0\x56\x58\x8a\x59\x00\x7f\x7a\xa1\xcd\xf2\x52\x01\ +\xcf\xcc\xab\x92\x27\xde\xbc\xa6\x61\x6e\xde\x90\xfa\xe1\x34\x6f\ +\xa0\xdb\x99\x18\x0e\xb5\x33\xf4\x40\x9d\x9b\x59\x33\x2f\x4c\x14\ +\xdb\x04\xe9\x64\xae\xb9\x71\xfe\x96\x9b\x75\xfc\x69\x34\x37\x01\ +\x22\xdc\x2b\x6d\xec\x20\x2c\xae\x2a\xb3\xf4\xe6\x66\x42\x5c\x94\ +\xda\xb3\x9f\x56\x2e\x65\x2f\xa9\xb6\xea\xed\x30\xb5\xd1\x55\x1f\ +\x37\xf3\x19\x91\x4a\x0d\x45\x49\xb5\x8d\xfd\x18\x5d\xec\xd0\x98\ +\x10\xc4\x00\x13\xd1\x75\x2b\x60\x82\x53\x66\xd1\xca\xf8\x52\x89\ +\x85\xd3\xc2\x38\x5b\xc2\x85\x62\x1c\xdf\x2a\xee\x5b\x55\xc6\xa0\ +\xc2\x4c\xa4\x73\x6b\x09\x98\x1b\x22\x0d\xac\xc9\xec\x22\x37\x8a\ +\x09\x3b\x29\x9d\xa2\xc3\x77\xd4\xff\x4f\xa1\x53\x4a\x39\x43\xc2\ +\xc2\x26\x40\x40\x89\x19\x33\x21\xbc\x36\x8b\x8c\x62\xe6\xf4\xfb\ +\x03\xa9\xb6\xd3\x0a\xcd\x44\x29\x3e\xc2\x2a\x1d\x3d\x33\xc6\xa1\ +\x45\x03\x11\xf0\x47\xe3\x87\xc2\xae\xea\xf4\x8d\x0f\xc5\xa2\xb1\ +\x53\xa3\xcb\x7b\xe2\xf2\xe7\x37\x41\x2f\xd8\x84\x36\xb4\x80\x1e\ +\x29\x86\x3f\xc5\xf3\x9f\xf0\x8f\x2f\x60\x44\x35\x0b\x97\x01\x5e\ +\xc5\xc7\x5e\x91\x0e\x5c\x27\x2a\x8a\xbc\xb2\xd8\xd3\x8a\x4c\x6c\ +\xb1\xd6\x5d\xa2\x61\x77\xa8\xaf\x2e\xc8\xb1\x7c\x50\x58\xeb\x2e\ +\xcd\x35\x37\xce\x27\x94\xa4\x08\xe0\xf3\x9b\x57\xab\x33\x6c\x60\ +\x4b\x49\xe6\x93\x6e\x65\x61\x57\xcd\xce\xba\x6e\x61\xc7\x62\x0d\ +\x46\x99\x8d\xd7\x8d\xa9\xcc\xc0\x9e\xee\xc8\x79\xb9\xb3\x22\x9e\ +\xce\xef\xad\xb6\xdb\x1a\xc1\x20\x65\x55\x49\xa4\x8a\xad\x6c\x63\ +\xa7\xa4\xa8\xbe\x4f\xe6\x38\x32\x90\xd5\xb2\x55\x2c\x47\xd6\xcb\ +\x82\x26\x0a\x45\xa6\x2c\x2d\x58\x4b\x21\xbb\x29\xba\x73\x8e\xa4\ +\xd3\x84\xd9\xb6\x2c\xd0\x2a\x19\xb2\x0c\x5a\x2b\x52\xb0\xa2\x08\ +\xfb\x34\x94\x43\x98\xaa\xe2\x10\x68\x2a\xb9\x23\xcc\xae\xcb\x6c\ +\x1c\xc4\x93\xb9\xe5\x34\x61\x91\x2d\x57\x3a\xff\x9e\xb5\xcd\x87\ +\x52\xca\x59\x9e\x24\xe5\xb6\xd1\xb4\x82\x75\xad\x64\x22\x03\x35\ +\x26\x60\x74\x16\x72\xb6\x17\xe1\xf7\xfb\x78\xfd\x03\xa2\x28\x62\ +\x2f\x88\xe8\x13\x32\xee\x4f\x88\x22\x85\x2c\x1d\x33\x0e\x22\xa2\ +\xfe\x80\x47\x7b\x3e\xf9\x71\x7c\xa1\xdd\x5b\x75\xb9\xec\xa2\x91\ +\xf9\x4d\xf0\x40\x75\x46\xa8\xf9\x88\xcc\x4f\xf1\xfc\x50\x06\x70\ +\x99\x5d\x65\x51\x98\x1c\x3f\x59\x1f\x9b\x44\x17\x30\xb1\xeb\x44\ +\x73\x59\xbc\x2c\x06\xcb\xf0\xe9\xaa\x16\x57\xd6\x2c\x36\x94\x58\ +\x66\xe1\xd5\x8a\x66\xe2\xfa\x35\xd1\xdc\xb8\xb4\xbe\x8c\x65\xd5\ +\x45\x16\x0e\xc4\xba\x86\x24\x88\xd0\x6d\x93\xa4\x92\x8d\xa3\x39\ +\x18\x81\x84\x0f\x65\xfb\x39\x48\x27\x04\x86\x72\xa1\x39\x92\x9b\ +\x75\x9c\xda\xac\x4d\x5d\xe5\x89\xf5\x40\xc5\xd6\x52\x19\xc0\xe5\ +\xd8\x7f\xc9\xb1\x2c\xcc\xef\xdf\x9a\x5d\x07\x06\x22\x38\x0f\x73\ +\x7d\xe6\x8a\x59\xb4\xac\xcb\x2e\xa0\x9c\x76\x06\xd4\xb2\xf5\x8b\ +\x65\x8a\x0e\xdc\x39\x0b\xd4\x28\x0c\xa5\xc8\xa7\x0c\xd4\xb2\x79\ +\x51\xbe\x5e\x85\x1e\x56\xa4\x10\xa0\x16\xde\x6b\xa2\x71\xa2\xf8\ +\x81\xcc\xbe\x0b\xb9\xd8\xa3\x91\x36\xb2\x62\x0b\xa9\x60\x40\x72\ +\x6c\x49\xfd\xc8\x5f\xba\x02\x3f\x9e\x57\x1b\x1c\x6c\x5f\x97\xc1\ +\x29\x57\xe5\x56\x27\xb0\xab\xcd\x8c\x02\x22\xd8\x96\x45\x73\xbd\ +\xc7\x71\xfa\x06\xdf\xf7\xbe\x0a\xfa\x9b\x8c\x03\x85\x86\x2d\x4c\ +\x62\xfa\x39\x78\x9e\x90\x03\xb6\xfa\x23\x46\x67\x21\xc9\xde\x23\ +\xe2\xf0\x00\x2f\x5a\xc5\x68\xf5\x58\x5d\x5d\x92\xed\xe7\xd5\xd5\ +\xa5\x59\x57\xcc\xd1\xc0\xed\xe0\x45\xcf\x92\x29\x4d\x09\x15\x0c\ +\x7f\x2a\x03\x30\x4e\x22\x19\xbc\xaa\xbe\x4c\x9c\x44\x68\x0c\xe7\ +\x82\xb7\xcc\xca\x25\x6e\x4e\xec\x09\x78\x22\xa0\xdd\x3c\x9a\x73\ +\xdc\x15\xc1\xdc\xc1\x68\x9a\x28\xb5\x45\x1a\xf6\x25\xea\xab\x97\ +\x59\x1d\x45\x1c\x36\x4d\xc6\xc7\x29\x76\x5b\xc3\x5c\x5d\x67\xe9\ +\xa9\x45\xec\x92\x7a\x8c\x14\x92\xca\x25\x3c\x2a\x82\xcc\x53\xf3\ +\xb9\xbd\xd7\x65\x20\x27\x81\x3a\x17\xc0\xb6\x56\x97\xef\x6f\x55\ +\x57\x01\xe0\x4f\xa3\xbf\x37\x63\x97\x81\x5d\x16\x75\xe5\xe3\xb3\ +\xa2\x71\x33\x3e\xf5\x64\x16\xae\x76\xf0\xec\xb6\xc6\xaa\x16\xc8\ +\xef\xe1\xa9\x0e\x0d\x5b\x7c\x9f\xaa\x12\x4e\x8f\x8a\x0e\x9b\x9c\ +\xce\xb0\x2a\xc6\x29\x9a\x0a\x56\x77\xbe\x0d\x1d\x4e\x24\x37\x25\ +\x16\xd3\x98\x78\xc5\xc4\x47\xc7\x34\xf1\xa3\x90\x7a\xd1\xcc\xa8\ +\x0f\x8e\x50\x8a\x3d\x64\x81\x95\xa1\x98\x39\x5b\x96\x85\x43\x26\ +\xa8\xae\x28\x92\xd8\x59\x29\xb7\x29\x99\x39\xa3\xde\x08\xa5\xdb\ +\x04\x84\xcb\xbc\xae\x3e\xc7\x78\x75\xc2\x33\x4b\x0f\x81\x2f\x14\ +\xdb\x94\x94\x73\xeb\xc1\x22\x89\xc6\x75\xd3\x82\xa8\x47\xdf\xdc\ +\xe7\xdd\xdd\x3f\x83\xf4\x35\x00\xde\xef\x89\xbf\xf1\xb9\xa5\xcf\ +\x22\xfc\xf5\x2c\x3a\xb6\x49\x98\x5b\xdc\xed\x8f\x21\xab\x73\x7c\ +\xf8\x16\xc3\xe4\x16\xf0\x80\x9b\x2b\x87\xb2\x95\x6c\x58\x6b\xac\ +\x71\x20\x0d\x00\x0f\x8a\x6e\x82\x72\xe6\xd3\x48\xf6\x64\xa6\x2c\ +\x31\x6d\x6f\x00\xdd\x36\x68\x83\x21\x29\x2d\xd2\x4a\xf1\x56\x3e\ +\x2e\x03\xb8\x84\x14\x71\x12\x41\x1b\x0a\xef\x6b\x12\x7b\x82\x17\ +\x08\x26\xa3\x15\xd4\xc8\xfc\x1a\x6e\x3e\xa2\xab\x2a\xac\x3a\x16\ +\xd7\x36\x35\x16\xb4\x36\x93\xc3\x3d\x0e\x57\x2f\xcb\x69\x88\x35\ +\x33\xc1\x59\xde\xc7\xb4\xae\x91\xb2\xc0\x70\xd8\xc2\x69\x0e\xd0\ +\xbc\x13\x52\x77\xe6\xdd\x90\xd8\xe0\x06\x2a\x04\xc5\xff\xd6\x36\ +\x99\xd9\xbb\x22\x03\x53\xf0\xbf\xa9\x74\xcd\xbc\xe4\x19\xf8\xae\ +\xc8\xd4\x83\x82\x27\x16\x81\x6d\xcb\xe2\x2f\x09\x22\x9a\xe4\xc2\ +\x80\xbb\xd0\x58\xf4\x93\x10\x5d\x9d\xf1\xcd\x79\xbf\x28\xc2\x17\ +\x5d\xa6\xda\x3a\x67\xe1\x2e\xab\x35\x75\x2e\xa0\x0f\x53\x9b\x85\ +\x51\xb1\x6a\xb7\xe0\x99\x1b\x8e\x03\xc1\x0c\x17\xab\x06\xa1\x98\ +\xce\xc0\x22\x0e\x15\xfa\x05\x4e\x09\x34\x55\x72\xc3\xe5\xe4\x72\ +\x75\x49\xa2\x16\x2a\xf2\xd2\xaf\x87\x82\x9a\xb2\xa2\x08\xd7\xcf\ +\xd1\xc3\x10\xe5\x60\xca\xe9\x78\x91\xbc\xf7\x50\x16\x81\x66\xa7\ +\x23\x9c\x30\x9f\xd0\x02\x2e\x0b\x44\xd3\xb2\xb8\xb4\x7e\x95\xc4\ +\xb2\xa4\xa6\xe1\xda\xe5\x90\x56\xf0\xf3\x1c\x6c\x5f\x17\x2a\xb5\ +\x48\xe1\x71\xd8\xe3\x9d\xed\xbf\xe4\xfb\x93\x2d\xfc\xa8\x3f\xd7\ +\x8a\xf4\x92\x8c\x1d\xf5\x88\x77\xb7\xfe\x07\xde\x3f\x79\x55\x06\ +\xaf\xbc\x64\x27\x19\x53\x42\x82\xa8\x47\x18\xf6\xa1\xd0\x8f\x1c\ +\x9d\x9e\x31\x7a\x0c\xde\xf1\xdb\x73\x1a\x61\x63\xc5\x94\x73\x74\ +\x6b\x35\x4b\xb6\x8c\x95\x33\x5f\x52\x5e\x73\xf4\x53\x50\xa7\xab\ +\x41\x6f\x20\x02\xf6\x49\xb0\x41\x14\xca\xc3\x39\x66\x42\x69\x2a\ +\xf4\x33\x05\x75\x34\x00\xb7\x60\x30\x98\x1d\xc7\x4c\xe9\xb6\x2c\ +\x8c\xa6\xc9\x95\x7a\x8b\xfa\x69\x93\x83\x74\x47\x66\xe2\xea\x6d\ +\xa9\x75\x93\xd5\x85\x18\x27\xf6\x69\xeb\x23\xb9\xba\xa1\x84\x0f\ +\x26\xd0\x0d\xce\xd9\xd8\x06\x62\x61\xa2\x5d\x3e\xef\x09\x61\x8f\ +\x1d\x84\x22\x48\xbd\x29\x76\x6f\x82\x4f\x82\x3a\x39\x12\xc1\x3d\ +\x6e\x90\xa7\x9e\xc4\xd8\xd5\xa6\xc7\x79\x46\x63\x3e\x33\x8f\x59\ +\xec\xb4\x65\x26\x06\x61\x81\xf0\x24\x58\xa1\x36\x05\x84\x28\x33\ +\xf1\x38\x10\x22\x7b\xd5\xf7\x05\x3b\x11\x63\xc9\x81\x4f\x2c\x93\ +\xe6\x13\xd8\x89\xaa\x07\x9b\x55\xc2\x0f\xc1\x42\x91\x04\x3a\x56\ +\x2a\x2a\xfd\xb0\x1f\x31\x1a\xa6\x58\x7d\x8d\xe3\xbc\x4f\x53\xc9\ +\x88\x6e\x6c\xca\xc5\x8c\x73\xad\x67\x33\x2f\x4c\xb4\xc5\xd1\xb2\ +\x04\xcd\x56\x62\xe0\x52\x34\x5f\x42\x99\xa1\xfd\x9b\x22\x10\xa2\ +\x0e\x29\x21\x5b\x8f\xbf\xcb\x1f\xde\xfe\xb7\x7c\xf3\xce\x7f\xcf\ +\x7b\xdb\xaf\xe2\x85\x33\x06\x21\x1f\x4e\x38\x39\xfe\xd3\xb9\xe0\ +\xad\xde\x37\xf5\x08\xb3\xd3\xc6\xe9\x74\xb0\x3a\xe2\x32\xd9\x31\ +\x42\x76\xa3\x43\xb1\x5e\xab\xd5\x9b\x5b\x49\x50\xfa\x0f\x67\xe1\ +\x89\x14\xed\x94\x01\x3c\xb4\x3d\xdc\x7c\xc6\x34\x94\xc7\x5e\x3a\ +\x1f\xac\x4f\xba\x95\x01\x5e\x32\x15\xf9\x28\xa7\xa3\xe6\xa8\xfa\ +\xf2\x1c\x35\x57\xb6\x8f\xdd\x5c\xb0\x11\x6b\xdd\x25\xce\xda\x2e\ +\x93\xc5\x11\x6b\xda\x15\xc6\xc7\x29\x87\x85\xfc\x32\x18\xa4\xdc\ +\x3b\x78\xc4\x64\x6f\xc0\xe5\xf6\x0d\x6a\xed\x53\xc8\x66\x7c\x6b\ +\x9e\x7a\x12\x2e\x8c\x2a\x7b\x33\x66\xcf\x47\x8c\x50\x64\x20\x27\ +\x41\xc4\x70\xe0\x11\x1f\xf8\x0c\x07\x1e\xc3\x81\xc7\xe8\x6c\x9b\ +\xfe\x63\x83\x24\x88\x38\x53\x4f\x18\x8c\x12\xf2\xc1\xa8\x08\x76\ +\x4d\xb2\x12\x81\x9d\xcf\x69\x2a\x3a\x6a\x3a\x87\x99\x8f\xb3\xf9\ +\x93\x48\xee\xa8\xae\xdc\xaa\x70\xa2\x84\x11\x25\x53\xe1\xa9\x8e\ +\xb0\xb1\x32\x08\xe5\xe8\xbd\xc1\x6c\x4c\x47\x21\x90\x10\x22\xaa\ +\xd0\x66\xe5\x06\x24\x2c\x13\xc7\xb4\xd0\xed\x44\x70\xbc\xe9\xfc\ +\x2f\xe0\xda\x2d\xd4\x56\x87\xdc\x12\x70\x22\xd4\x22\x29\x34\xaa\ +\x1a\x4b\x95\x38\xdb\x27\xc4\x2a\xb4\x0d\x61\x18\x11\x86\x82\x4b\ +\xb6\x2c\x93\x38\x9a\x15\x00\x86\xd9\xe7\xbd\xed\x57\xb9\x7d\xfa\ +\x15\xa1\x05\xd8\x4f\xb8\x7d\xfa\x15\xee\x9e\xfc\x2e\x3b\x93\xad\ +\x42\xfa\xf8\x06\xef\x9f\xbc\xfa\xa1\x18\xcd\x30\xfb\x95\x6a\xdd\ +\x22\xc2\xe2\x74\x30\x60\xc3\x5c\x2d\x34\x9f\x5d\x28\xda\xb8\x07\ +\xd3\x90\x83\x69\xc8\xfe\xbd\x23\xee\xef\x85\x73\xc5\xd5\x98\x29\ +\x7a\x50\xc7\x53\xcc\x19\x1c\x28\x82\x52\x63\x38\x07\x1f\x3e\x2c\ +\x90\x65\xa1\xa8\x21\xb3\x77\x19\xd4\x55\x1a\xae\x6c\xb2\xac\x3a\ +\x0a\x1f\x69\x74\x58\x6e\xc6\xac\x69\x57\xd0\x33\x31\x6c\x3a\x39\ +\xdc\x93\x9f\xf7\x68\x3b\xe5\x7f\xfc\x3f\xfe\x6f\xfe\xe8\xab\xbf\ +\xc3\x5a\x57\x5c\xa5\x9c\xe4\x54\x0c\x85\x7a\x39\x79\xea\x89\x8f\ +\xc1\x48\x7c\xa4\x9e\x78\xbe\x7c\x3c\x18\x31\x4c\x7d\x46\x28\x34\ +\xc9\xe5\xd8\x51\xab\xed\x16\xc5\xee\xa2\xc4\xc2\x6a\x14\x63\xb0\ +\x28\x5f\x8b\xbd\x93\x4a\x16\xae\xcf\x4d\x48\x97\x54\x5b\x19\xd8\ +\xba\x3a\xdf\x44\x3a\x9f\x89\xed\xb6\xc6\x59\xc7\x44\x2f\x78\xe2\ +\xb2\xa0\x2b\x27\xa7\xdd\xcc\x17\x23\xfb\xf1\x39\xf2\x45\x0b\x15\ +\xcc\x62\x3a\xa3\x1c\x10\x35\x08\xe9\x17\xa3\xf9\x17\x6e\xc5\x42\ +\xc6\xc0\xb1\xc5\x0a\xad\xae\x41\xb0\xd6\x82\x4e\x07\xbf\x58\x38\ +\x5e\x2e\x61\xec\x17\xcd\x94\xf4\x1c\xe3\x21\x99\x0d\x98\xe3\xaa\ +\xa5\x9a\xce\xb2\x68\x05\x3f\xcf\xd0\xfe\x4d\x3c\x7f\x55\x06\x6f\ +\x79\x7b\x6f\x38\xe6\xfd\x93\x57\x19\x1e\xdd\x63\x67\xb2\xc5\xd6\ +\x4e\x32\xf7\xfa\x05\x36\x20\xea\xcc\xf1\xca\x7a\xa7\x49\x72\xea\ +\x32\xda\x9f\x59\xb7\x32\xec\x4a\xfb\x56\xe5\xcc\x67\xe0\x88\xe0\ +\xea\x0d\xfa\x92\xa7\x6d\x30\x6b\x09\x97\x4c\x44\x57\x9b\x65\xd9\ +\x38\x89\x18\x28\xf9\x85\x40\x2e\x9f\xab\x06\x70\x2f\x85\x61\x3a\ +\x9c\x2b\xf4\xca\xa3\x9b\x47\x74\x5b\x16\xd7\x5b\x1e\x57\xea\x2d\ +\x26\x8b\x23\x09\x25\x76\x72\xc1\xa2\xd4\x57\x2f\xcf\x7d\xcf\xfb\ +\x5b\x11\xaf\xff\xc6\x9f\xf1\x27\xbf\xfd\x7d\x8c\x56\x46\x9e\x77\ +\xc9\x07\x23\xc6\x76\x0d\xbc\x5c\x7c\x80\x98\x60\xf6\xf2\xd9\x24\ +\xb3\x5d\x34\x7b\x8a\xd7\xcb\x40\x6e\xb5\x5d\x70\x6b\xb4\x36\x16\ +\x38\x53\x33\x5a\x6d\x17\xa7\xb6\x8a\xd5\x71\x49\xdc\x06\x7a\x4f\ +\xb4\xe4\x5a\x9a\x43\x60\x5b\xb3\xc9\x8f\x0f\x29\xf4\xb4\x40\x23\ +\xc9\xba\x12\x13\x97\x38\xb8\x9a\x8d\x83\x41\x4a\xbd\x7f\x89\x44\ +\xf5\xe7\x98\x8d\x5e\x52\xe1\x2d\x47\x0a\xba\x59\x76\xa3\xc3\x88\ +\x18\x05\x2d\x0a\x49\x02\x5d\xb4\x7d\x43\x55\x58\x3f\x15\x7b\xe8\ +\x64\xfe\x54\x02\xc1\x2f\x16\x63\xfd\x3d\xec\x02\x8e\x88\xa0\xec\ +\x17\xcb\x5c\x3a\x45\x9f\x3b\x04\x52\xcb\x22\xe9\x0b\xa1\x91\x63\ +\xe5\x85\x6e\x19\xe9\x3e\x24\x79\x64\xb2\x42\x46\x54\x6a\x76\xcc\ +\xd9\x04\x09\xc2\x27\x78\x6b\x67\x3e\x40\x9f\x6d\x35\x78\x6f\x38\ +\x06\xbe\xc2\x0b\xfc\x02\x5b\x5b\xdf\x84\x96\x08\xf4\x6b\xeb\x17\ +\x3b\xeb\x7b\xa7\x11\x8b\x49\x0f\x55\x6b\xd0\x98\x4c\x79\xe4\x3f\ +\xe4\xd1\xfd\x77\x8a\xe5\x8a\xd0\x67\xb6\xf5\xb3\xf9\xa1\xce\xa2\ +\x00\x00\x20\x00\x49\x44\x41\x54\xcf\x1a\x9b\x3f\xb4\xc9\x95\xe3\ +\x98\x38\x3c\xe0\xee\x23\x9d\x31\xe0\x72\x28\xcd\xfc\x44\x37\x6d\ +\x02\xa3\x7c\x0e\x46\x9c\xc7\xbf\x29\x2d\x06\x4a\x4e\x3b\x9f\xbf\ +\x8c\xf6\xd2\xd9\xeb\x55\x48\x12\x27\x11\x5d\x8d\x82\xf9\x88\x49\ +\x1a\x62\x9a\xf2\x78\x64\xb0\x10\x3c\x46\xc7\xa4\x7e\xda\x84\x65\ +\x18\x1f\xa7\x34\x96\x35\x29\xd4\x87\x7b\xfc\xd1\xde\x19\xfe\xd7\ +\xfe\x98\x6b\x4f\xdf\xc2\x5d\x54\xa1\x09\x8d\x51\x07\x5c\x05\x45\ +\x73\xc9\x53\x4f\x64\xe7\x36\xa2\x08\x5b\xcb\x59\x0b\x14\x46\x45\ +\x07\xae\xcc\xd0\x07\x76\x8d\x86\x16\xe3\x8f\x1d\xdc\x4c\xa1\xd5\ +\x76\x19\xa6\x3e\x8a\xa6\x30\x0e\x23\x16\xac\xc7\x64\xdd\x0d\xa0\ +\xf7\xa1\x38\xb8\xda\xae\x2e\xa7\x3e\xf4\xa0\x27\x31\xf1\x74\xe3\ +\x59\x59\xd8\x55\x6f\x0e\x3b\xc0\x75\x92\x24\x44\xd1\x5b\x24\xc9\ +\x2c\xa0\x3d\xd5\x99\x37\x4f\x31\x81\xa4\xd8\xf3\xac\xdb\x89\x64\ +\x14\x88\xc2\x79\x5f\x89\x73\x78\x19\x20\x33\x67\xff\x94\x7e\x14\ +\x51\x37\x33\xea\xa5\x1d\x7d\x81\x7b\x35\x2c\xb9\x0f\x3a\xec\x47\ +\x72\xa8\xb4\xc4\xbf\x5a\xa8\x08\x0e\x38\x8c\x24\xa4\x98\x1b\xa8\ +\xdc\x7c\x88\x77\xf7\xe7\x48\xb2\x77\x49\x86\xbf\x07\x20\x03\xf4\ +\xd1\x7e\x22\x03\x79\x6b\x27\x61\xd0\xba\x3f\xbb\xb4\x3e\x21\x23\ +\x5f\x5e\x34\x51\xb5\x06\x1d\x05\x46\x63\xbf\x22\xfa\x3f\x60\x7b\ +\xf8\x00\xff\xd1\x2e\xdb\xc3\x07\xbc\xf5\x78\x9b\x38\x3c\x60\x5d\ +\xd7\xf9\xdc\x67\x9e\xe2\xd6\x17\x7e\x94\x9f\xf8\xb1\x4d\x9e\x7b\ +\xf6\xd2\x1c\xd5\x56\x16\x5f\x55\xaa\x4c\x63\xc8\x40\xc9\x59\xc8\ +\x47\x0c\x94\x5c\x06\xe8\xf9\x00\xae\x06\xf8\x93\x20\x47\xa6\x34\ +\x59\x6c\xc6\x5c\x59\x13\x19\x7f\x67\x32\xfb\x9c\xe3\x91\xc1\x64\ +\x71\x84\x9e\x1d\x62\x5f\x3e\x65\x7c\x3c\x0b\x9e\x9b\x9b\xd7\x71\ +\x17\x37\x79\x63\x47\xe7\x95\x3f\xfa\x6d\xe8\x17\xfc\x7d\x77\x8a\ +\xa2\xb9\x24\x76\x86\xa2\xb9\x45\x07\x4f\x64\xdc\x24\x50\x8b\x2c\ +\x9a\xa1\x17\xaf\x1b\x6b\x0e\x4e\xcd\x44\xd1\x5c\x94\x68\x82\x3f\ +\x15\x18\xb9\xa5\x39\x78\x6a\x8e\x1a\xc5\xe4\x66\x9d\x8c\x1e\x81\ +\x9d\x4b\x03\x42\x89\xe5\x3d\xe7\x89\x74\x1b\x34\xe6\xd8\x89\x5a\ +\xba\x7f\x21\x80\x57\x95\x04\xbf\xb3\x39\xd3\x6a\x90\x0a\x96\xa2\ +\x80\x16\x49\x12\x8a\x4c\x5c\x95\x81\x39\x66\xb1\xe3\xc8\x2c\x3a\ +\x5c\x85\xc8\x47\xc3\x22\x0e\x23\x34\xcb\x9a\x2b\xf6\xca\x72\x6d\ +\x12\x05\xa5\x4e\x4c\x14\x86\x51\x50\x74\xc7\x66\x66\x24\x32\x53\ +\x47\xb3\x8e\x1c\x56\x86\x92\xd6\x09\xe2\x44\xb6\x8d\xe4\xe2\x46\ +\x39\x6d\x91\xe3\x14\x13\xd9\x49\xf2\x2a\xf0\x45\xf4\xd6\x97\x09\ +\xe3\x5f\xe5\x51\xc1\xc4\x5c\x5b\xd7\x79\x6f\x38\xe6\xd9\x56\x83\ +\xb7\xf6\xbf\xc2\xdb\x6f\xde\xe2\x63\x2f\xde\x9b\x0b\x74\x39\xab\ +\x95\x3f\x85\xdb\xe9\x60\x91\x11\x46\x0a\x9b\x37\xdb\x6c\xd2\xe6\ +\xf2\xa2\xc9\x4b\x67\x9f\xe2\x2c\x0f\x49\x0e\x07\x72\xed\xed\xf6\ +\xf0\x01\x93\x57\xef\xf2\xe8\xfe\x03\xae\xdd\xbc\xc1\xb5\x4f\xa9\ +\x2c\xbc\xf3\x14\xb7\x4f\x7a\xb0\x53\x71\xc3\x29\x34\x0f\xe5\xed\ +\x4c\x69\xa2\xa4\x1e\x67\x5a\x93\x85\x7c\x34\xc7\x52\x68\x0c\xe9\ +\x65\x0a\x2d\xb5\xf9\xa1\x01\x5c\xc2\x92\x6e\x33\x96\x33\x73\x92\ +\x2b\x3e\xde\x23\xa8\x2d\x62\x03\xb5\xd1\x63\x76\x9a\x97\xb8\xb2\ +\x03\x8d\x55\x0d\x8e\xc4\xc9\x78\xea\x9d\xb0\xe8\x2e\xd1\x1b\x8d\ +\x38\x7a\xbd\xcf\xdb\x1f\xf9\x16\x9f\xfc\xc9\x97\x60\x0c\x89\x9d\ +\x11\x45\x21\x4e\x31\xfe\x1e\x16\xa6\x7e\x4a\x34\xc1\x2c\x82\xda\ +\x84\x4a\x8b\x5a\x50\x72\x6b\xd4\x19\xa1\x90\x07\x53\x86\xa9\x8f\ +\x65\x37\xe8\x99\x06\x6e\xa6\x10\x14\x63\x4d\xea\xe4\x88\xac\x58\ +\x28\xa3\xeb\x16\x49\x31\x39\x5d\x35\xe3\x2e\x19\x6f\xa5\xa3\x5e\ +\xc8\xc4\x55\x6c\x5c\x4e\x76\x64\x23\x31\x0d\x9a\x24\x21\xa5\x53\ +\x4a\x13\x4d\xe4\xfd\x66\x5e\xf0\xc4\x72\x70\x31\x87\x50\x21\xb4\ +\x72\x0c\x59\xd0\x39\x18\x84\x84\x16\x72\x71\xf9\x6c\x1a\x4f\x3c\ +\x6e\x9e\xc3\xca\xa5\xdc\x32\x2e\x9c\x34\x4d\x29\xd5\x01\x8a\xac\ +\x1d\x10\x02\x2e\x81\x96\x60\x39\x3a\x61\x98\x14\x5d\xc0\x59\x6b\ +\x58\x37\x33\x32\x9a\xd4\x8a\xe0\x1b\xb4\x5e\x01\xbe\x48\x32\xfc\ +\x3d\xac\xac\xce\xb5\x75\x9d\x47\xfb\x02\xff\x3e\xbb\x2e\x32\xb1\ +\x45\x5d\x06\xf0\xf9\xdb\x33\x5d\x85\xd6\xca\x2d\x08\x1b\xf4\x95\ +\x00\xc2\x08\x6f\xff\xa8\x70\xfb\x11\x96\xfb\xc9\x24\x81\xe5\x7d\ +\x7e\x64\xfd\x69\xec\x8f\x76\xc9\xc6\xbf\xc4\x07\xdf\x7e\xc8\xdf\ +\xfe\xcd\x5f\xb1\xb7\x1f\xf2\x77\xbf\xe1\xb0\x6a\xbc\x22\xe9\xb6\ +\x83\x05\xc1\x54\xe8\x41\x1d\x37\x8f\x28\x4b\x15\x25\xf5\xc8\x35\ +\xf7\x42\x00\x0b\x38\xd1\xa2\xa5\xc2\x30\x1b\xa1\x07\x36\x0d\xe7\ +\x43\x8a\x3f\xb7\x03\x44\xc4\xa3\x88\xc3\x0a\xc4\x5a\x75\x14\xf2\ +\xe9\x29\x41\x7f\x91\x40\x69\xa2\x37\xcb\xe0\x4e\x4b\x89\xb8\xa0\ +\xfd\xbc\x13\x16\x9b\x37\x78\x5b\x39\xa0\x7b\xf0\x88\x6b\x0f\x6e\ +\xe1\x5c\x5b\x64\x1c\x8a\x55\xc0\x5e\x34\x9b\x7a\x51\x08\xc8\x4d\ +\x9b\x28\x0a\x30\x4d\x8b\x24\x50\x49\xec\x0c\x93\xa0\xa0\xcf\x54\ +\x02\xdb\xa4\x1d\x58\xf4\x19\xd1\xd2\x1c\x46\x41\x97\x66\x31\xf8\ +\x59\x76\xf7\xec\x69\x97\x32\xa3\xc9\xac\xeb\x4d\xb1\xcf\x65\xe8\ +\x71\x00\x49\xd6\x65\xb4\xbf\x3b\x87\x89\xab\xd9\xb8\x2a\xc5\xac\ +\x4e\x8b\xb8\x99\x4f\x2f\xd3\x68\x35\xad\xc2\x64\xbb\x12\xc0\x31\ +\x16\xe1\x79\xdd\xb0\x99\x12\x87\x0a\x56\xa8\x30\x31\x85\x54\x4f\ +\xc3\xfa\x7b\x2b\xed\xf2\xc4\xc8\x4c\x45\x32\x1e\x73\xf2\x4e\x20\ +\xed\x98\x44\x1d\xbd\xe8\xda\x95\x8d\x13\xf1\x7d\xc7\x56\x46\xcd\ +\x74\x51\x69\x52\x37\x67\x99\xb4\x3d\xbc\xc9\xee\xc1\x26\x7a\xeb\ +\xcb\x73\x50\xa1\xcc\xb6\x96\x2f\xde\xbd\xb7\xdf\xbc\x45\xe8\x4c\ +\x2e\xfc\x5e\x35\xf5\xbf\xc1\x9a\x5e\xe2\xc4\x3f\x65\xb4\xd7\x67\ +\x74\x16\xb2\xb5\x1f\xf0\x68\x7b\x97\xec\xf6\x6d\x1e\x6d\x6d\x13\ +\xee\xff\x2d\xea\x96\xc6\xde\xfd\x3f\x67\xe1\x83\xbf\xe3\x73\x37\ +\x1e\xf3\x33\xff\xf2\x13\xfc\xea\x6f\xfd\x77\xfc\x4f\xff\xe6\x7f\ +\xe7\x67\x7f\xea\xd3\x18\xd6\x1a\x77\x1f\xe9\xdc\x7d\xa4\xe3\x6f\ +\x9f\x48\xa1\xba\xa7\x98\x73\x81\xd8\xce\x67\xae\x8f\xe7\xe1\x03\ +\x40\x4b\x6d\x5e\xa0\xdc\x4a\x96\x02\xb7\x33\x9b\x6a\xfe\x30\xf1\ +\xcd\xf4\x94\xb3\xb6\x2b\x70\xf1\x13\x6e\xca\x66\x4b\x4c\x44\xe7\ +\x6b\xd4\x4f\x9b\xec\xe5\x6d\xc2\xa2\x59\x55\xf2\xc6\x4a\x34\x41\ +\x21\xc0\xc9\x1a\x58\xa6\x58\x38\x5f\x72\xc9\x7a\xa0\x4a\xfe\xb7\ +\xec\xf6\x0d\xe8\xa3\xb4\x9b\x45\x21\xd7\xc7\x60\x71\xd6\xd5\x2b\ +\x68\xb9\xf3\x1d\xbd\xf3\x10\x23\x48\xc5\xd8\xbe\x36\xec\xd3\x5c\ +\xdf\x98\xe3\x89\xab\x85\x5d\x75\xc6\xae\x4a\xd1\x8d\x5c\x85\x8e\ +\x2a\x6c\x00\xc6\xea\x14\xed\x17\xff\xeb\x2f\xff\x8a\x0e\xa8\x89\ +\x82\x9e\x24\xd4\x0c\x71\x22\xd5\x12\x05\x3d\x0a\xd1\x93\x04\xc5\ +\xd5\xd1\x0c\xd0\x93\x18\x8d\x84\x29\x86\xa4\xe5\x94\x22\x1b\xab\ +\x18\xe4\x24\x92\xaa\x8b\xb1\xa8\x25\xb3\xcf\x51\x99\x71\xc5\x96\ +\xa1\x93\x62\x54\x8c\xe0\x22\x62\x55\xc1\x30\x74\x30\x4d\x6c\x1d\ +\x14\xea\xd4\x4d\x9d\x20\xb3\xc8\xb5\x3a\x5e\x36\xe2\x71\xfe\xef\ +\xb8\xba\x92\xe0\x0d\x3b\x1c\xbe\xb1\x8d\x72\xa9\x18\x25\xf2\x32\ +\x3a\x4d\x95\xc3\x3c\xc4\x98\xea\x2c\xaf\xf6\x30\xa6\xfa\x1c\x66\ +\xfe\xcc\x8d\xcf\xd3\x5d\x79\x89\xae\xbd\x44\xbd\x6e\x50\x37\x14\ +\xb2\x85\x36\x76\xb6\xc6\x7e\xf2\x01\x77\xb6\x15\x26\x83\x6d\xa6\ +\x6a\x9d\xfe\x60\x80\x91\x65\xec\xbd\x99\xf3\xc6\x5f\xff\x21\x6a\ +\xf8\x3a\x6b\xa9\x4f\x67\xc1\xe3\xb3\x3f\xb4\xc6\x17\xfe\xe9\x97\ +\x59\x79\xee\x29\x06\x93\x6d\x1e\xef\xe8\x4c\xa3\x13\xe2\x72\xb7\ +\x71\x26\x7e\x66\x3a\x56\x09\xf5\x31\x2d\xb5\xc9\xd8\x8f\xa9\xd5\ +\x04\x3e\x48\xfd\x84\x7a\x2d\xc6\xf7\x35\xac\x9a\x2f\x77\xb4\x69\ +\x0c\xd1\xf5\x36\x75\x37\xa1\x6b\x59\x84\xb9\x8e\x55\xc9\x44\xd9\ +\x24\x91\x1f\x43\x2f\xa1\x55\xac\x9f\x5d\x4d\x14\x8c\xc6\x21\x8e\ +\xd9\x64\xd8\xee\xa3\x9b\x8b\xf8\x9e\x4a\xcf\x88\x51\xce\x7c\x2c\ +\x25\xe1\x99\x4f\xac\xb0\x70\xe3\x32\x2d\xd7\x66\xd5\x5d\xa6\x96\ +\xe5\xc4\x9a\x82\x12\x65\xc5\x32\x4a\xa8\xe5\x35\xd4\x58\xa1\x5e\ +\xc1\xec\xbe\x3a\xa6\x96\x8b\x00\xcc\x8c\x29\x09\x31\x6a\xdc\x25\ +\x1f\x3c\xa6\xd6\x71\x38\xeb\xeb\x9c\xa9\x27\xb4\x8c\x04\xd7\x76\ +\x19\x4d\x5b\x44\xe9\x09\x79\x6a\x52\xaf\x6b\x04\xe9\x04\x63\x9c\ +\x41\x79\x5f\x15\xef\x8d\xa1\xe6\xa4\xa9\x81\x5f\x5f\xe0\xcd\x6f\ +\x7e\x93\xe1\xe8\x84\x49\xbd\xc6\xc2\xd9\x19\x43\xd3\xc2\xd5\x14\ +\xf2\xec\x21\x6b\xaa\xcb\xc6\x33\x9b\xb4\xad\x0e\x51\xae\x12\xe5\ +\x85\x47\x45\x9c\xc9\x8c\xfc\x6b\xff\xe7\x1f\xa1\x0b\x6b\x53\x87\ +\x04\x5f\x98\xc1\x61\x61\x11\xcc\x74\x0b\xa6\x45\x1c\xce\xb2\x68\ +\x35\xb3\x96\xc1\x1a\x57\x38\xd7\x27\x57\xe6\xd6\xdc\x72\x9b\xb0\ +\x92\xad\x6b\xa1\x32\x6f\x08\x57\xb9\x1d\x4c\x32\xd6\xcc\x33\x0e\ +\x22\x91\x05\x1a\x87\x75\x0e\x82\xeb\x5c\xbd\xa2\xf3\xe7\xcf\x7d\ +\x89\x65\x7e\x67\xae\x80\x7b\x76\xbd\xc1\x23\x3f\x99\x7b\xee\xda\ +\xba\xce\x4f\x7e\xfc\x0b\x2c\x2d\xff\x27\x5c\xaa\x5f\x2d\x76\x74\ +\x44\xf2\x0a\xd0\x6f\x4c\x66\x45\xdd\x51\x4a\xef\xf6\xdb\x2c\x6f\ +\x74\x08\xba\x4b\x40\x1f\xbb\xb6\xce\x07\xbf\xb7\xc7\xdf\xd5\xff\ +\x3f\xae\x6f\xbe\x0e\xc0\x47\x3e\xb3\xc6\x27\xd7\x6e\xb1\xf1\x8f\ +\x3f\xc3\x6b\xee\x21\xb7\x4f\x74\xde\x7a\x73\x0b\xc3\x9f\xce\xb1\ +\x0f\x25\xe6\x05\x9b\xb1\x1f\x93\xd8\x21\x2d\xa7\x49\x4a\x8b\xa6\ +\x33\x94\x99\x57\x64\xab\x56\xf1\xae\x74\x8a\x63\xff\x43\xdf\xcf\ +\x72\xa2\xba\xf4\xb5\x98\x36\x2f\x09\xaa\xad\x07\x70\x0f\x75\x22\ +\x0c\x59\x0e\xfd\x14\x9a\xb0\xdc\x8c\x59\x6e\x5f\xe6\xc6\x66\xca\ +\x38\x99\x5c\xd0\xc7\x34\xe2\x0c\xb4\xf3\x97\xed\x1c\x37\x6b\xe0\ +\xa9\xb9\x94\xbd\x8a\x0c\xdd\x07\x57\x11\x8d\x92\xc6\x18\xb5\x1f\ +\x33\xb6\x6c\x8c\x54\xa3\x49\x0f\x34\x87\x51\x01\x21\x12\x54\x90\ +\xf3\x95\x36\x78\xa1\xc8\xca\xde\x94\xc6\xba\x45\x6f\x5f\x70\xd8\ +\x49\xfb\x13\xac\xd6\x1e\xb0\xdd\xee\x4a\x38\xa1\xa8\xd7\x39\xcc\ +\x61\xc2\x31\x70\x4d\xb2\x1a\x1d\x35\x95\x7c\x71\x3f\x2b\xd6\x1d\ +\xa4\x1d\x13\xc2\x14\xbd\xf0\xee\x4d\xa2\x10\xaf\xd2\xc9\xd1\x41\ +\x42\x0c\x2b\x8c\x88\x2d\xeb\x42\x73\xc4\xac\x48\xfa\xce\x5f\x00\ +\x8d\x8a\xb2\x38\x0b\x15\x72\x2b\x90\x01\x3f\xb3\x69\x61\x7e\x2b\ +\x53\xc9\x48\x98\x11\x07\x91\xc9\x42\x9e\x31\x6d\x5d\x63\xaf\xbf\ +\xca\x20\xfb\x0a\xbb\xf7\xbf\xc4\xf2\xc2\xd7\xe7\x0a\xb8\xf2\x76\ +\x6d\x5d\xa7\x15\xfc\xfc\x5c\x97\xaf\x96\x3f\xc5\x7a\x7d\x79\x26\ +\x12\x2a\x30\x77\x33\xea\x73\x82\xc9\x60\xef\x69\xe0\x51\x65\x6a\ +\xb8\x4f\x3c\x8a\x88\x2e\xf5\x78\x6a\xba\xce\x71\xba\xc8\x71\x00\ +\x3b\x77\xf7\x50\x6a\x8b\xfc\x7e\xff\x80\x1f\x68\x6f\xd3\xe8\xde\ +\xa2\xd7\x9a\x70\x39\x5c\x27\x5e\x8d\x78\xf7\xf0\x08\x86\xa2\x62\ +\x6e\x34\x0d\x81\xd7\xba\xcb\x6c\x5c\xb6\x8a\x89\x66\x97\x2c\x39\ +\xa6\xa5\xb5\x80\xd6\x6c\xbe\xc7\x2d\x27\x34\x2c\x7a\x59\x9f\x5e\ +\x56\xdc\x1f\x86\xe0\x96\xcf\x9b\x52\xbd\x56\x8a\xee\x71\x2c\x76\ +\x26\x43\xae\xec\xc0\x6e\x6e\x90\x4f\x4f\x39\xf4\x73\x8e\x07\x42\ +\x73\xac\x3a\x1a\xbd\x6c\x84\xa2\x5e\xe7\xd9\x4f\x6a\xb8\x8b\x9f\ +\x20\x88\x54\xc2\x48\xc1\xcd\x14\xbc\x22\x38\x7d\x03\xdc\xac\x0c\ +\xdc\x2e\xd0\x17\x81\x1b\x08\xad\x76\x29\xa4\x8f\x0a\xd5\x9b\xa2\ +\xb9\x15\xe8\x98\x57\xc4\x43\x8a\xa4\xe6\x02\xb7\x81\x4e\x4e\x80\ +\x8d\x4d\x3a\x5f\xd4\xb9\x35\xe1\x0c\xd4\x12\x05\x7b\x4b\xbf\xc7\ +\xe1\x14\x36\x07\x3d\xb6\xdb\x5d\x09\x2d\x56\x95\x84\x3a\xcb\x73\ +\xf8\xba\xaa\x88\x93\x3c\xb1\xc4\xc3\x61\xb9\xdb\xcd\x22\x26\xc0\ +\x28\xd4\xfe\xfd\x0a\xbd\x16\x5a\x79\x91\x27\xac\x8b\x58\xf7\x5c\ +\xe6\x45\x1a\x70\xcf\xa8\x38\xd5\xca\x49\x8b\x6c\x3f\x1b\x37\x14\ +\x5b\x4a\xcb\x5d\xce\x16\x30\x54\x72\x3a\x39\x1c\x44\x26\x6d\xa3\ +\x41\x3f\xde\x23\xed\x9f\xd1\x79\x76\x8b\x6f\xfe\xfb\x5b\xc0\x7d\ +\xd8\xb9\xf5\xa1\x3f\xff\x6a\x7d\x13\x96\xf7\x99\x2a\x2f\x73\xb0\ +\x7d\x9d\xcb\x9b\x2f\x17\xeb\xc8\x84\x6b\x8c\x19\xaa\x58\x56\x46\ +\x88\x45\x3b\xe8\xd3\xd2\xef\xd1\x2b\xc4\xef\xdd\xd6\xec\x77\x0b\ +\x8e\x2c\x76\xd4\x90\x5e\x76\x57\x9c\x14\x2b\x21\xad\x74\x91\xe5\ +\xe9\x1e\xaf\xeb\x21\xda\xc0\xe0\x8a\xb9\xcf\x6e\xb4\x3e\x87\x83\ +\xc7\xea\x94\x06\x06\x5a\x73\x80\x9b\xb7\x00\x4b\x4e\x63\x64\xfe\ +\x06\xe4\x23\x32\xa5\x89\x8a\x06\x6e\x5f\x06\xf0\xe9\xc8\x60\xb1\ +\x09\xbd\x61\x48\xcf\x35\xc1\x0d\x81\x0e\xbd\x61\xbf\xb8\x2f\xfc\ +\x28\x4a\xac\xbc\x73\x10\x62\x34\x4d\x0e\xfd\x81\xb4\xae\x3a\x1d\ +\x19\xa8\xce\xa8\xe0\x89\xfa\xe0\xc1\x83\xef\x7f\x8b\xef\xbf\x96\ +\xb3\xfe\xdc\x2a\xa1\x16\xe1\x45\x0a\x0e\x2e\x69\x60\x11\xdb\x01\ +\x35\xb3\x26\x0b\xd2\x5e\x69\x09\x30\x84\x86\x65\x62\x4e\x8b\xeb\ +\xa4\x9a\x42\xa4\xc9\x29\x0e\x80\x78\x1c\xa2\x07\x11\x8d\xc5\x18\ +\xa8\x31\xa2\x4b\x93\x1e\x8a\xe6\x62\x07\x82\x6e\x0b\x52\xe4\x5e\ +\xbb\x32\x0b\xe3\xd6\x04\xbb\x30\xec\x33\x5c\xd0\x61\x4f\x04\x6d\ +\x99\x89\x6b\x8f\x4f\x99\x5e\x5a\x64\xd8\xaa\xcb\x4c\x0c\x42\x04\ +\xe4\x5d\x18\x58\x05\x3d\x2e\x38\x62\x2a\x05\x9d\x4b\xe1\xda\x13\ +\x2a\xd2\x97\xb8\xea\x00\x64\x86\x11\x69\x31\xce\x54\xce\xdc\x95\ +\xa3\x97\xd5\xcc\x6b\x5e\x10\xd2\x17\x99\xbb\x42\xbd\x95\x59\x58\ +\x2c\x83\x34\x2f\x64\xe2\x49\x98\xd1\xa1\xc5\x59\x32\xa0\x71\x78\ +\x51\xee\x57\x7a\x50\x7c\xec\xc5\x7b\xb3\xe6\xc6\xf2\x3e\xba\xfa\ +\x1c\x64\x70\xf5\x0a\xe8\xfb\xc7\xec\x2c\x42\x27\x6b\x62\x60\x13\ +\x11\x11\x45\x30\x3a\x13\xfb\x9a\xcb\xc2\x62\xb9\x0d\xc7\x03\x53\ +\x8e\xfe\xe0\x85\xf4\xdc\x70\x2e\xa8\x03\xee\x32\x5c\x09\x79\xf6\ +\xbe\xc1\x6e\xbe\x8b\xb8\x0e\xec\x72\xa4\x39\x28\x99\x37\x33\x27\ +\x18\x29\x33\xff\x5b\x99\x41\x2d\x7a\x4e\xa9\x81\x1d\x81\x27\x5a\ +\xc9\xbd\x61\x48\x8f\x10\xd5\x0d\x39\x1d\x35\x51\xdd\x10\xbc\x7e\ +\x91\xa9\xfb\x32\x53\x0b\xa8\xd1\xa7\x97\xcd\x8a\xbe\xe3\x81\x08\ +\xd4\x4c\x69\x16\xe3\xff\x5a\x45\x38\xdf\xa1\xdb\x8a\xd8\x39\x08\ +\xf9\xf3\xbf\xf9\x36\x3f\x6a\x5e\xe5\xfa\x3f\x5a\x27\x39\x55\x21\ +\x4c\x50\xcc\x84\x1a\x35\x99\x60\xb2\x50\x41\x35\x2d\xb2\x28\xa4\ +\x99\x29\xa4\xc0\x59\x18\xd0\xb0\x4c\xb4\xb3\x29\x69\x23\x23\xee\ +\x87\x0c\x06\x43\x74\xdb\x22\x09\x42\x74\x3b\x11\x41\xab\x19\x40\ +\x4f\x76\xf8\x02\x3b\xc7\xf6\xa6\x42\x5e\x6f\xe7\xd8\x81\x22\x8a\ +\x3f\xb7\x2e\xf6\xdc\xad\x2b\x0c\x4e\x12\x5a\x67\x09\x3b\xa7\x1e\ +\x87\x8b\xae\xcc\xc4\xab\x97\x16\x39\x9c\x66\x7c\x62\x28\x32\x71\ +\xd9\xae\xee\x67\x1a\x64\x33\x83\x96\x8e\x9a\x8a\x41\x51\xbd\x17\ +\x93\x48\x6d\xc4\x19\x16\x0b\xf8\x76\x42\xde\x13\x15\xb4\x62\xb7\ +\x30\x80\x04\xd0\x7b\x3a\xd8\x7d\x30\xad\x8a\x34\x33\x42\x43\x41\ +\xa1\x47\x8e\x2d\x7c\x2b\xe4\x88\x87\x78\x2d\xaa\x9c\x24\x5a\xa8\ +\x88\x0d\x9e\xf9\x03\x31\xbb\x67\xad\x41\xa8\x14\x1c\x74\x3e\x6f\ +\xce\x9d\x2e\xa0\xe1\x61\x53\xc3\xd4\x23\xf4\xd6\x97\xf9\xa8\xf1\ +\x87\xbc\xfb\x5e\x4c\x76\x6b\x85\x5b\x9f\xbb\x83\xe5\xd7\x65\x20\ +\x03\x12\x4a\x04\xf9\x1f\xf0\xb5\xdb\xaf\x70\x6d\x5d\xe7\x36\xd0\ +\x7a\xf8\xf3\x5c\xbd\xa2\x73\xeb\xca\x75\xe2\xa8\x83\x12\x29\x1c\ +\x1f\x1c\xb2\x35\xd9\xa6\x3f\xd1\x67\x01\x51\x09\x96\x7e\x43\x81\ +\x0c\xd4\xd1\x80\x56\xbb\x45\x3f\x53\xe8\xa8\x39\xc1\x3d\x8b\xbf\ +\x56\x4c\x5c\x67\xa6\x9e\xf3\xfd\x90\x3c\xc9\x19\xfb\x31\x8d\xac\ +\x86\xd6\x14\x13\x25\xc3\x74\x48\xcb\x6b\x51\xb2\x6c\xc2\x33\xad\ +\xf4\x93\x80\x5e\x16\x16\x41\xda\x11\x01\xab\xcc\x9a\x1c\xaa\x37\ +\x2a\x68\xb6\xd2\x87\xa2\x2f\x7f\xb7\xed\x91\xd0\x1a\x7b\x8a\x09\ +\x0a\xb8\x8e\x46\x5c\x06\xa4\x53\x99\x84\x2e\x9d\x84\x0e\x42\xee\ +\xbe\xf2\x75\x5e\xfc\xe4\x2f\xf2\xec\xb3\x26\x7b\x87\x42\x28\x5f\ +\x62\x5d\x5f\x1d\x93\x9b\xf6\x1c\xb4\xd3\x81\xba\x69\x15\xd0\xc3\ +\x42\x07\x14\x26\xb4\x25\xdd\x53\xa3\xd3\xe9\x08\x3e\xd9\x9b\xca\ +\x00\x1e\xa1\x08\x28\x61\xe7\x42\xce\x99\x4e\x44\x16\x4e\x27\x82\ +\xb9\xb0\x61\x95\x7a\x11\x55\xf3\x98\x18\xa0\xf6\xf8\x14\xda\x5d\ +\x69\xb2\xdd\x51\x53\x19\xc8\xe5\xfd\xea\x94\x88\xf6\x5f\xfc\xf4\ +\x8f\xfc\x4a\x42\x88\x81\x4d\x42\x48\x42\x08\xf1\x04\x8b\x05\x01\ +\x29\x8c\x0c\x35\xd0\x89\xe3\x3e\x06\x36\xaa\x91\xe1\x27\x09\xd3\ +\x24\xa1\x96\x24\x78\x7a\x4c\x8e\x41\x14\x25\x4c\xf4\x98\x29\x31\ +\x71\x94\x00\x06\x89\xfc\x35\x21\x4b\x14\xb2\x44\x41\xb1\x72\x32\ +\x0c\xe2\xe4\x4d\x3e\xd8\xff\x36\x0b\xcd\x65\x74\xe3\x92\x1c\x63\ +\xb2\x30\x88\x8d\x9c\x3a\x53\xb4\x54\xc1\xa6\x46\x6a\x66\x4c\x26\ +\x3e\x63\xe5\x1b\xdc\x7b\xfb\x98\x93\x93\x4c\xec\x55\xde\xb9\x44\ +\xf3\xd6\x21\x9f\xfb\xd8\x98\xab\xfa\xbf\xe0\xa5\xa7\x7f\x90\xcd\ +\xa7\x9f\x26\x0d\x56\x89\xf9\x80\x7b\x47\x5b\x0c\xbc\x8c\xc3\x3c\ +\x64\x2f\x7b\x83\x3b\xfd\xef\xb0\xa8\x83\x37\x9e\xd2\x4e\x1b\x0c\ +\xec\x2d\xfa\xdf\x07\x6d\x1a\x31\x6d\xa7\xc4\x6c\x31\xad\x5f\x47\ +\x09\x85\x88\x3d\x19\x9b\xb4\xea\x09\x66\x6c\xc2\x14\xa6\xd1\x90\ +\x49\x34\x21\x74\x2d\xd2\x30\x91\x8f\x83\xc8\x44\x53\x75\xb2\x2c\ +\x21\x9e\x66\xc4\x4a\x4a\xbd\x36\x2b\x77\x4d\xd5\x24\xac\x25\x58\ +\x8a\x81\xd1\x34\x71\x4c\xa8\x4f\x15\xc2\x5a\x42\x57\xb5\x08\x73\ +\xb7\xc8\xb8\x1d\x16\xcc\x29\xe1\x28\x41\x71\x6d\xb2\xb8\x86\x52\ +\x1b\x02\x1d\xfc\xe9\x84\xfa\x24\xa1\x6f\x4c\x48\xc6\x85\xb6\x42\ +\xb1\xa9\xa1\x11\xda\x01\xc9\x38\x27\xd7\x03\x42\xc5\xc0\x3a\x57\ +\x2a\x8b\xe9\x14\x97\xb7\xb6\x1f\x92\x3c\x7a\xc4\xf2\xd3\x4b\x58\ +\x96\x42\x10\x66\xc4\x7e\xc8\xd4\xc8\x69\xc4\x19\x5a\xc3\xc0\x0c\ +\xc7\xd4\x95\x3a\x53\x45\x4c\x87\x5b\x53\xc1\x17\x5b\x53\x15\xcd\ +\xca\x31\xb3\x4b\x58\x16\x58\x96\x85\x65\x59\x34\xc9\x31\x62\x85\ +\xc0\xce\x71\xe2\x99\xd6\xc2\x88\x15\x62\x03\x8c\x71\x46\x6c\x40\ +\x9c\xa7\xd8\x81\x78\x0e\x6c\x54\x4b\x25\x1f\x2b\xdc\x79\xff\xfb\ +\x78\x8f\xdf\x66\x52\xaf\xb1\x39\xe8\x31\x34\x2d\x86\xa6\xc5\x8a\ +\xbe\xc5\xd2\xd4\x61\xe3\x99\x4d\x14\x12\xf2\x22\x60\xa3\x5c\xa5\ +\xa3\xa6\x44\xb9\x4a\x96\x25\xfc\xd6\x57\xfe\x10\xd5\x62\x01\xd7\ +\x6e\x11\xd9\x09\xae\xdd\x62\x59\xe9\xe0\xda\x2d\x74\x3b\x41\xb7\ +\x13\xc1\x5c\x74\x0d\xc2\x5c\x7c\x0e\xa6\x45\x6e\xe6\x58\x1d\x13\ +\xc5\xcc\x31\x8a\x49\x00\xdd\xb4\x30\xb0\x31\xb0\xd1\xcd\x99\xfa\ +\x21\x89\x42\x4c\xc0\x8c\x42\xcc\x28\x44\x09\xed\x19\x9e\x4e\x5f\ +\xe3\xde\xce\xc3\x62\x0a\x44\x29\x67\x92\x69\x84\x2a\x2a\x4d\x6c\ +\x12\xd2\xa2\x7d\xed\x98\x1d\xf6\x5f\xbf\xc9\xfe\xc1\x4c\x20\x74\ +\xeb\x73\x77\x24\x0b\xf1\xc2\xa7\x9e\xe1\xd6\xe6\x3f\xe1\x52\xfd\ +\x2a\x97\xd5\x29\x07\xdb\xd7\xe7\xba\x75\x96\x5f\xc7\xf2\xeb\x7c\ +\xed\xad\x57\xf8\xc3\xdb\xff\x96\xbb\xe9\x9f\xb2\xb5\x93\x30\x3e\ +\xf5\x78\x3c\x78\xcc\xe9\xe1\xeb\xb4\x94\x17\x58\xab\x59\x2c\xb7\ +\x3b\xe4\x0b\x1b\x73\xe3\x45\xa5\x26\x42\xd5\x97\xe9\x8c\x73\x94\ +\xa6\x42\x4b\x6b\x15\x45\x1a\x9c\xa4\x21\x03\x25\x27\x76\x75\x9a\ +\xce\x6c\xec\xa0\x7c\xfd\x82\x92\xae\x69\xce\x15\x6c\x42\x1f\xd1\ +\xa7\x37\x0c\xe5\x7d\x31\xf2\xd4\x14\xe3\xfa\x45\xd6\xed\x8c\x73\ +\xc9\x4b\xcf\xae\x3e\xae\x3c\xb6\xfd\xf3\x56\x58\x45\x07\xb1\x3b\ +\xa5\xdb\xbc\xc1\xab\x8f\x8e\xf8\xcb\x5f\xfd\x0e\x4d\x7f\x97\x56\ +\xc3\x43\x35\x81\x48\xc3\x37\x1c\xa2\xc1\x94\xb1\xa1\x12\xa8\xa7\ +\xb8\x99\x82\xe6\x09\x51\x8f\xe6\x8d\x69\x92\x17\x8f\xfb\x52\xe9\ +\x56\xc2\x06\x79\xe5\xb4\x73\x9a\xe4\x0c\x0b\xab\x5a\x5b\xab\xcb\ +\x6c\x6c\x07\x8a\xe4\x8b\xed\x20\x84\x20\x61\x90\xcc\xff\x9e\xdb\ +\xed\x2e\x4a\x20\xda\xcf\x47\x89\x18\x78\x9d\x70\x4c\xab\xf4\x7e\ +\xf6\xa6\xe8\xba\x45\x3f\xd3\xe6\x70\xb1\xaa\xdb\x09\x3e\x60\x06\ +\xe2\x1f\xde\xb3\xc4\x6e\x0d\x1f\xc4\x0a\x00\x53\x00\x7a\xbb\x31\ +\x73\xc1\xb4\x2d\x21\xa0\x4f\x2c\x6b\x0e\xc5\x1a\x56\x8e\x61\xe5\ +\x98\xc5\xe5\xc8\xb4\x4c\x9c\x4e\x47\xf8\xfe\x9a\x16\xe0\xa2\x12\ +\x12\x84\x21\x77\xf3\xff\x55\xd0\x43\xca\x5d\xe2\xfc\xa0\x70\xf0\ +\x11\x05\x9e\x6e\xe6\x4c\xa3\x79\x83\xef\x99\xf1\x21\x64\xb7\x56\ +\xf8\xd8\x8b\xf7\x64\x60\x86\xce\x84\xdb\xdf\x79\x9f\xa4\x7f\x80\ +\xe7\x05\x6c\xed\x07\x24\xc3\xdf\xbb\x80\xa1\xab\x0d\x90\xaf\xbd\ +\xf5\x0a\xca\xde\x1b\x38\xcf\x37\xb8\xfe\xf2\x35\x3e\x7e\xeb\x9f\ +\x61\xac\xcc\x3b\xb2\x8b\x4b\x79\x87\x7e\x43\xa1\xad\x37\x51\xf5\ +\x65\x31\xc8\xa9\x98\x74\xd4\x1c\x4f\x99\x0d\x78\xb6\x73\x45\x52\ +\x6b\x23\xdf\x96\xcd\x8b\x52\x99\x86\x27\xa0\x83\xf4\x10\x2e\x9c\ +\xe0\x05\xb6\xed\xc8\x21\xd0\x4c\x69\xa2\xe6\x23\x7a\x03\x71\xe2\ +\xa8\xf9\x88\x38\x11\x3f\xb3\x2a\xcb\x1c\x33\x65\xcc\x14\x35\x1f\ +\x49\x51\x7e\xf5\xb9\x6a\x20\x1b\xad\xde\x9c\x1b\xfd\x9f\xbf\xfb\ +\x36\xbf\xf3\x17\xc7\x4c\xb3\x45\xda\xed\x36\x0d\x2d\x46\x89\x26\ +\xe4\x66\x9d\x1c\x1b\x3b\x5b\xc4\x57\xc7\x28\x9a\x2b\x8f\x23\x14\ +\x52\xb7\x41\x93\x99\xfa\x6d\x54\x42\xc5\x73\xc3\xa7\x33\x9e\x6e\ +\x3a\xd7\xfc\x28\x1b\x22\x81\x7d\x8e\xe2\x5b\x9c\xb1\x1d\x57\xa6\ +\x16\x87\xd3\x4c\x52\x6d\x25\x3b\x51\x16\x86\x25\x4b\x51\x1e\xc7\ +\xea\x14\xd5\x9f\xfb\x25\x74\x12\x7c\x72\x33\x27\xd4\x45\x00\xf8\ +\x51\x48\x82\x2f\x46\x7e\x0a\x86\x22\x0e\x15\x6a\x85\x68\xc7\x8f\ +\x42\x92\xa2\xfb\x53\x32\x1c\x51\x18\x11\x59\xa6\x38\x16\x18\xcb\ +\x04\x22\x33\x11\x8f\xf5\x37\x61\xbf\x25\xb3\x71\x9c\x6c\x31\xee\ +\x4f\xe4\x40\x7d\x52\x14\x7d\x7e\xb9\xfe\xd4\x6e\xa0\x16\x93\xd5\ +\xed\xa5\xcb\x7c\xfe\x7a\x3e\x17\x94\x65\xa7\xee\xfb\xde\x57\x85\ +\xca\x6d\xb2\xcd\x9d\x6c\xcc\x9d\x6c\x4c\xe8\x4c\xe4\xeb\xe5\xb1\ +\xfc\xba\x37\x1b\x62\x82\xe3\xea\x15\x9d\x5b\x2f\x7d\x94\xab\x1f\ +\x79\x99\xeb\x2f\x5f\x63\xf3\x4a\x87\xfe\xd9\x90\x87\xc3\x1e\xbb\ +\x7b\x8f\xd1\x83\x3a\x63\xa6\x85\x7d\x54\x73\x6e\xa0\xb3\x1a\x58\ +\x4f\x52\xa8\xa5\xb4\x64\xa0\xe3\x09\xe6\xe1\x78\xd0\xe7\xd4\x3b\ +\xe1\x74\x64\x14\xde\x14\x21\x78\x30\x48\x46\x0c\x92\x11\x0f\xb3\ +\xfc\xc2\x15\xa0\xbc\x2a\x9c\x0f\xe6\xf3\x8f\xdd\x3c\x92\xc1\x5f\ +\x1a\x15\x1e\x0f\x90\x8b\x69\xc8\xd7\x20\x5f\xe3\x4f\xff\xe0\x2f\ +\xf9\xf6\x6f\xfc\x11\xb6\x3f\xa4\xbe\x64\xe1\xe8\xc7\x4c\x10\xb3\ +\x86\x83\xa4\x89\x93\x35\xf0\xd5\x31\x4e\xd6\x98\x1b\xfc\x2c\xb3\ +\xac\xd0\x2f\xcc\xe4\x9a\xe5\xe3\x11\x0a\x0b\x43\x45\x66\x66\x91\ +\x79\x95\x0b\x5d\xbb\xb9\x04\x55\x14\xd6\xe3\x53\x4f\x66\xe3\xa3\ +\xc1\xae\x7c\x7d\x58\x9a\x2f\x16\x27\x85\xcc\xc2\xde\x54\x2c\x63\ +\x0c\xc6\x88\x2c\x6b\x27\x24\x81\x4e\x30\x86\xa6\x69\x63\x14\x57\ +\xe2\x50\xaf\xe3\xea\x2a\x5e\x92\x15\x60\xdf\x2d\xce\x79\x11\xbc\ +\x66\xa0\x13\xd9\x09\x49\x14\xe2\x98\x56\x31\x32\x1f\xcd\xfc\xa5\ +\x8a\x63\x64\x99\x85\xdc\x33\xb8\xf0\x47\x6c\x1d\x64\x3c\xbb\x19\ +\x10\x16\xd6\x54\x94\x36\x01\x66\x0e\x4a\x80\xe7\x5b\x50\x04\xf1\ +\xe6\x95\x0e\x3f\xf2\x85\x7f\x0e\xc0\x77\x1f\xff\xb7\xf4\xf7\xaf\ +\xd2\x79\x76\x0b\x02\x38\xd8\xbe\xce\xd5\xba\x28\xa8\xfc\x37\x5f\ +\xc2\x79\xf1\xdb\x32\x70\xcb\xe0\x2d\xb3\x77\xf9\x58\xd9\x7b\x03\ +\xae\xbc\xc4\xfd\xad\xdb\x5c\xcf\xea\xa8\xd7\x5f\xe0\xea\x15\x9d\ +\x1f\xf9\xd1\x7f\xcc\x2b\xaf\xbe\xc9\xd6\xdd\x0f\xe8\x9f\x0d\x45\ +\x23\x23\x19\x61\xf8\x17\xf9\xec\xb1\x1f\xd3\x70\x0c\x19\xc0\x0d\ +\xc7\x28\xda\xcd\x23\x5a\x6a\x53\xe8\x90\x2b\x6a\x35\x06\x14\x9c\ +\x0f\xc5\xfd\x99\xe6\xe2\xc3\x4e\x88\x32\x98\xcf\x4f\x90\x9c\x1f\ +\x7d\xea\x8d\x14\x68\x0a\x49\xa8\xa1\x97\xde\x6e\xa5\x21\xcc\x10\ +\x9a\x33\xac\xfe\xd5\x6f\x7c\x93\xb3\xe3\x01\x3f\xfc\x4f\x3b\x74\ +\x9f\xf9\x0c\xab\x78\x0c\xc7\xa0\xd5\xce\xf0\x58\x40\x89\x34\xa8\ +\x95\xfc\xb1\x22\x8e\xb8\xe4\xc5\xef\x2e\x82\x37\x9f\x0d\x96\xda\ +\x19\xcd\x00\xce\x5a\xb9\x54\x8b\x88\x39\xbd\x69\x25\x0b\xe7\xd8\ +\x41\x48\xa2\xa5\xe8\x5e\xc6\x43\xcf\x94\x9d\x5b\xc7\x1e\x41\x30\ +\x62\xa5\xbd\x51\xb4\x9f\x45\xcc\x65\xf5\x15\x49\xcd\x05\xa9\x26\ +\x1c\x86\x0a\x0f\xa3\xb1\x1f\xa3\xdb\x0d\x70\xcd\x9c\xb8\x67\x10\ +\x72\x46\x57\x59\x90\xdf\x34\x02\x5c\xbd\xe8\xa3\xbb\xe5\x1b\xea\ +\x4b\x52\x7b\xd6\x53\xf7\x67\x9a\x89\x32\x78\x2d\xb3\xb0\x29\x2c\ +\xec\x0a\x8b\xe7\x13\xcb\xe2\xe1\xce\x07\x73\x63\x43\xcf\x2c\xdd\ +\x25\x08\x3f\xc9\x25\x6b\x26\xfe\x91\xbb\xed\x2c\x18\x26\x6f\xb1\ +\x3f\xed\xb1\xe7\xef\x73\xd9\x59\xe7\xda\x62\x39\x46\xff\xbf\xc0\ +\x25\x48\xb2\x77\x79\xe5\x9b\xdf\xe0\x70\xfd\x5d\x86\x76\x03\x6f\ +\xef\xe7\xd8\xbc\xd2\xe1\xf4\x4e\x97\xe8\xa5\x43\x09\x39\x9e\x14\ +\xd0\xb1\xfb\x00\x78\x89\x9b\x57\x5f\x20\xc9\xde\x25\xcb\xde\x85\ +\xe3\x75\x92\xe5\x77\x79\xf9\xc6\x35\x2e\x5f\x56\xd9\xbd\x7f\x48\ +\x7c\x24\x9a\x19\x49\xe6\x49\xdf\x88\x93\x34\x04\x05\xda\xce\xfc\ +\xf8\xd5\x30\x1b\xc9\x8e\x9d\x10\xf9\x58\x45\x70\xb7\x24\x7b\x41\ +\xa1\xc0\x2a\x4f\x80\xea\x11\x57\xa7\x9d\x2b\x4f\xcc\xec\xd5\x00\ +\xd7\x18\x72\xa6\x34\xe7\x3f\xa7\x99\xc3\x48\x41\x6b\x0e\x88\x93\ +\x52\x70\x2f\xe6\xf8\x1a\xd4\x0a\x1e\x59\xa3\xab\x46\xdc\xdf\x8a\ +\xe8\x0d\x5f\xe7\xde\x5e\xc2\x33\x5f\xac\xf1\x23\xff\x68\x93\x56\ +\x0b\x86\x63\x17\x8d\x33\x2c\xad\x4e\x62\xd7\xc4\x30\x69\xa1\xb3\ +\xa0\x36\x7f\x12\x6b\xca\x18\xdd\x6e\x08\xc1\x50\xa0\x32\x2c\x34\ +\xc8\xb4\xcb\xc0\x16\x6c\x84\x1d\x08\xf8\xd1\x0c\x20\xb0\x2d\x6c\ +\x52\x12\xb7\xc1\x75\x37\x62\x67\x20\x78\xe2\xfb\xa7\x4d\x21\x06\ +\x7a\x7c\x8a\x52\x0b\x19\x5e\xba\x4a\xdb\x74\x60\x72\x44\xe6\xae\ +\xcc\x0d\xa3\x06\xe9\x84\xc0\xb6\x05\x13\xf4\x4b\x3f\xfb\xcf\x7e\ +\xc5\x1b\x8d\x04\x2b\x01\x18\xd8\x04\xca\x94\x2c\x31\x41\xcf\x25\ +\x84\xb0\x42\x85\x28\xca\x69\x64\x6a\x05\x50\x1b\x98\x7a\x4e\x4d\ +\x37\x98\x26\x09\x59\x92\xa0\xea\x86\x50\xc1\x85\x29\x86\x21\x9a\ +\x22\x13\x1c\x8c\x24\x2e\x06\x46\xa1\x37\x18\x93\xe6\x6f\x89\x81\ +\x46\x4b\x01\xf5\x0a\x0b\x8d\x8f\xa2\x1a\x16\x49\x92\x60\xe8\x3a\ +\x09\x70\x12\xbe\xcb\x69\xff\x5b\xbc\x7b\xff\x1b\x7c\xf0\xad\xaf\ +\xd2\x7f\xb8\x4c\xf7\xd9\x36\x37\x6e\x3c\x83\xe9\x3a\x2c\x2d\x98\ +\xb8\x8d\x26\x23\xcf\xe2\x7b\xfd\xaf\x62\x4c\x75\x06\x5e\x46\x50\ +\x7b\x0b\x3b\xbc\x45\xbd\x13\xe2\x7a\x97\x88\xcc\x99\x96\xa2\xd3\ +\x54\xe9\x34\x55\x96\xcc\x1a\x9d\xa6\xca\xdd\xd1\x84\xa3\xbb\x43\ +\xf2\xbd\x3b\x74\xd3\x4d\x9e\x6e\xe7\x9c\x3a\x1e\x5b\x3b\x09\xc3\ +\xed\xbf\x62\xab\x77\x9f\xcd\xeb\xcf\xd3\x55\x1f\x60\x2d\x5d\xa1\ +\x33\x99\x72\x96\x4d\x38\x8b\x62\xda\xb9\x82\x89\x08\xb6\xd4\x4f\ +\xa4\x3e\xc2\x54\xea\x4c\xf2\x09\x93\x7c\x82\x1e\x58\x24\x76\x88\ +\x1a\x1b\xc4\x85\xb8\x25\x6c\xf8\xa4\x89\x3a\x7b\xac\x8f\x51\x63\ +\x83\x5a\xa4\x13\x34\x0b\x48\xa6\x5c\xd4\x1e\x0f\xb3\x11\xa6\x52\ +\xc7\x44\x61\x98\x8d\xa8\x29\x2d\xf9\xf3\x4d\x14\xc1\x4d\xd7\x41\ +\xab\x0f\x49\x47\x6d\xa8\x43\x98\x8b\x40\x9e\x2a\x3a\x35\x34\xd4\ +\x7c\x04\x75\x8b\x4b\x2f\xbd\xc4\xca\xd2\x06\x7b\x3d\x9b\x93\x41\ +\xcc\x3b\x6f\xbd\xcd\x69\x3f\xc2\xe8\x8f\x68\x99\x1a\x8e\x69\xa0\ +\x28\x21\xea\x74\x04\xf9\x90\x3c\xd3\xa8\xa9\x19\xe4\x53\x5a\xb6\ +\xcb\x24\x9f\x42\x3e\x45\x49\x5c\xb2\x58\x21\x4f\x3d\x0c\xc7\xc0\ +\x4d\xeb\x4c\xa2\x29\x13\x23\x46\x51\xeb\xa8\x46\x2e\x33\xb0\x13\ +\x97\x9c\x71\x82\xde\x70\xe8\x07\xf0\x17\x6f\xec\xa2\x46\x87\x4c\ +\xea\x35\xe2\x60\x4a\x9d\x53\x06\xee\x32\x18\x4d\xae\x25\x09\x4b\ +\xb7\x56\xc9\xda\x4b\xe8\xc3\x9c\xd8\x00\x3b\x48\x08\xf4\x1a\xb6\ +\xa6\x62\xa8\x39\x5f\xf9\x77\xff\x2f\xba\x17\x0c\x99\x9c\x4e\xa5\ +\x97\x6f\x54\x92\x62\x66\x4a\x68\xe5\x24\x5e\x8e\x8e\x82\x97\x64\ +\xb8\xba\x2a\xf1\x6f\x5e\x30\x13\x11\x08\x88\x50\x39\x41\xad\x0a\ +\x87\x1c\xa3\x80\xe5\x63\x58\x14\x13\xd5\x17\x95\x59\xef\x9f\xbc\ +\xca\xd3\xee\xcf\x90\x5a\x42\x5f\x11\x02\x51\xf8\xee\xdc\xb8\xfd\ +\x9d\x2c\xc6\x9f\x86\xdc\xd2\x6f\x48\xfd\x43\x84\x82\x69\x9a\x34\ +\x2e\x4d\xf9\x78\xe7\x17\xf8\x56\xfc\xab\x32\xdb\xa6\xfa\x3d\xb4\ +\xe4\x16\xa9\x2e\xbc\x8c\x3b\xcf\x6e\xc9\x51\xa6\x6a\x46\x6e\x0f\ +\x6f\x72\xe9\x6c\x83\xef\x05\xb7\xf9\x93\xd7\xfe\x84\xf5\xb5\x80\ +\xc5\xd5\x4f\xf3\x03\xed\x98\x23\xfd\x53\x90\xbc\x22\x26\x45\x10\ +\xf2\x82\xfa\xb5\x0d\x9e\xbf\x15\xb1\xf7\x70\x91\xc1\xc9\x9e\xc8\ +\xca\x5e\x42\xec\xea\x0c\xd3\xd1\xb9\xa9\x67\x6b\xee\x98\xd8\x21\ +\x7a\x60\xc9\xc0\xae\xbe\x06\x30\x74\x86\x18\x9e\x55\x29\xde\x90\ +\x5f\xd7\x52\x9b\xe8\x81\xc5\xc0\x15\x42\xfb\x96\x2a\xb2\x3a\x88\ +\x2b\xc1\xd8\x8f\x69\x34\xcb\x8c\xde\x82\x66\x8e\x36\xe8\xd3\x5a\ +\xe8\xe0\x29\xa6\xf0\xc1\xf0\x22\x70\xe1\xb3\x9f\xdc\xe0\xa7\xff\ +\xf9\x17\x59\x59\xb9\xce\xeb\x6f\xbc\xc7\xb7\xbf\xf5\x1d\xd9\xe6\ +\x3d\x8a\x1e\xb1\xb6\xb7\x44\x6d\x51\x9c\x60\xf5\xfe\x25\xbc\xf4\ +\x14\xb7\xd8\x9b\x93\xe7\x5d\x89\x8b\xe7\xa6\x43\x4a\xec\x5b\x8e\ +\x3c\x15\x18\x39\x28\x47\x9c\x02\x24\x7f\xfc\x61\x37\xa7\xd8\x99\ +\xbd\x39\xe8\xb1\x53\x0b\x69\x5c\x11\x23\x57\xb6\x3f\xc4\xb7\x3b\ +\x12\x9a\x88\x4c\x2c\x06\x52\xc7\x7e\x8c\x6e\xb1\x00\x8b\x67\x34\ +\xbb\x39\x61\x41\x97\xc5\x04\x8c\x73\x0b\x95\x00\xdd\x55\xc8\x02\ +\x1b\x57\x9f\x15\x70\x12\x87\x15\xf8\xb6\xa4\xd9\xb0\x4c\xe2\xb0\ +\x87\x81\x2d\xb3\x77\x39\x64\x12\x87\x63\xa9\xac\xb8\xba\xa6\x72\ +\x77\x6f\x5e\xe7\xfb\x68\xf4\x06\xcf\x76\x5e\x16\xd6\x53\x51\x9f\ +\xbd\x9d\x87\x90\xbd\x26\xa7\x94\xf3\x3b\x5d\x1a\xc6\x5d\x36\xb4\ +\x44\x2e\x89\x29\x27\x4a\x26\xd6\x75\xae\x5e\xb9\xc7\x5b\xb7\x67\ +\xc1\x39\x68\xdd\xa7\x3d\x84\x6c\x6f\x83\x61\x7e\x1b\x10\x94\xcd\ +\x0f\x76\x0e\x41\x05\xbd\xf5\x65\x76\xef\x1f\xb2\xbd\xd3\x67\xff\ +\xec\x84\x7c\xe1\x29\xda\x4b\x00\x77\x39\x3d\x7c\x9d\xdf\x7f\xd3\ +\xc2\x5e\xf9\x1e\x4f\xdb\x2f\xf0\x78\x61\x97\x6b\xba\xcd\x23\x66\ +\x3a\x8d\x95\xd4\x47\x51\x73\xfa\x4d\x85\x58\xd1\x31\xbc\x84\xc4\ +\x9e\x0f\xe0\x32\x68\xcf\x07\x75\xf9\x7c\x62\x87\x44\xc9\x18\x33\ +\x98\x15\x4f\xcd\xc4\x67\x54\x70\xa2\x0d\xc7\x60\x98\x8d\xe8\xaa\ +\x39\xbd\x6c\x44\xcb\x69\x42\x2e\xd8\x8f\xc4\x1e\xd1\x75\x72\xc9\ +\x86\x94\x9f\xab\x63\x49\xec\xad\x2e\xae\x42\x51\x10\xf6\x06\x70\ +\xb3\x6b\xb1\x79\x75\x83\x9b\x57\x63\x56\xf3\x57\xb9\xd4\x35\xf9\ +\xe9\xff\xfc\x26\x2f\xbd\x20\xae\x20\x4d\x7f\x97\x83\xf4\x29\x9c\ +\xf8\x21\xf5\x7e\x8d\xc3\xd4\x66\x3a\x7d\x8d\xc9\xe3\x65\x98\x7e\ +\x1f\xd7\xfa\x2c\x63\x77\x42\x23\x10\x70\x28\x77\xbd\xb9\x40\x3e\ +\x98\x9e\xd2\xd0\xea\x2c\x0c\x15\xce\x5a\xa2\xc8\x23\x50\xd0\xed\ +\x8c\x51\xa0\x8a\xc2\x2f\x50\x19\x21\xbc\x90\x75\x6f\x3c\x6f\xc2\ +\x12\x34\x71\xd8\x67\xbb\xbd\x8e\x12\xec\x73\x10\xe9\x7c\xec\x43\ +\x02\xbe\xd4\x62\x34\x1c\x03\x35\xb2\x13\x8c\xee\x0a\x8f\x13\x93\ +\x98\x00\x2f\xc9\x48\x2c\x0b\xd5\x2e\x46\xa5\xbd\x9c\x2c\x1d\x13\ +\x13\x10\xea\x75\xf2\x8a\xb7\x5a\xc9\x0b\xcf\x04\xf5\x91\xdc\x8e\ +\x94\x05\x76\x25\x33\x8f\xe7\xf5\xc4\x8f\x6f\x80\xf6\xd9\x0b\xe3\ +\xf4\x23\x80\xfe\x84\xbd\xca\x34\x73\xa9\x5e\x7b\x27\x5e\x60\x1c\ +\x3f\xc5\xd6\x64\x1b\xf2\x07\x98\xa6\x89\x1a\x99\xc4\xb9\x4b\xbb\ +\xa3\xa3\xab\xcf\xf1\xf1\xce\x2f\xcc\xd1\x68\x83\xd6\x7d\x86\xf9\ +\x6d\xc6\xf1\x53\xf4\x77\x7b\xf4\x77\x7b\xec\xbc\xf3\x29\xf4\xb3\ +\xcf\x03\xf0\xb9\x2f\x6e\xf0\xc3\x3f\xfe\x53\xac\xff\x60\x84\x7f\ +\x75\x11\x7f\xfb\x84\xbd\xa3\x65\xf6\x8e\x96\xc9\x17\x36\x04\xe3\ +\x11\xdc\x26\xb9\x67\xf2\x60\x4b\xb8\xa5\x2c\x1d\x5a\x64\x7b\x1b\ +\xe8\xb7\x4a\xc5\xd9\xec\xb2\x9f\x6b\xae\xcc\xb4\xd5\xa0\x8d\x92\ +\xf1\xdc\xb1\xfa\xba\xa9\x37\xe4\x6b\x7a\x60\xd1\x6b\x6a\x73\x05\ +\x63\xae\xb9\xa4\xb4\xe4\xd7\x48\x35\x9c\xda\x94\x54\x5e\x62\x87\ +\x0c\x33\x51\x44\x36\x1c\x43\xaa\xe3\x4a\xe7\x21\xd7\x89\xf8\xe2\ +\xf3\x5d\xbe\xf0\xc3\x57\xf9\xf1\x1f\xba\xc9\x0f\x3d\xb3\x49\xef\ +\x24\x25\x7a\xf0\x1e\x83\xb7\xbf\x49\xd3\xdf\xa5\xe9\xef\x32\x8a\ +\x0e\x58\x2b\x46\x6f\xce\x3a\x26\xdd\xd6\x7d\xa8\x3d\x4d\xfd\xd2\ +\x31\xd4\x9e\xc6\x4b\x4f\x31\xf4\x87\x28\x69\x4f\x7c\x28\x3d\xf2\ +\xc1\x48\x4e\x4a\x37\x02\x31\x84\x7a\xd6\xca\x65\x26\x16\x0e\x9c\ +\x42\x40\x34\x42\x11\xd6\x59\xc5\xf4\x48\xe2\x36\x68\xe9\x22\x31\ +\x6c\x0e\x7a\x17\x02\xb5\x35\x9c\x08\x4c\x5c\x72\xce\x55\x9d\x72\ +\x51\xe8\x8d\xfd\x18\xbd\x0c\x4a\xc1\x40\x98\xa2\x90\xab\x24\x5c\ +\x8f\x1c\xdd\x55\x30\x42\x9b\x88\x8c\x28\x31\x71\x4d\x55\x36\x32\ +\xf4\x62\x01\x4d\x49\xaf\x59\xc5\x64\x48\x23\x0c\x67\xc5\xdd\xb9\ +\x25\x36\xc9\xfa\x32\xec\xcc\x67\xe2\xa9\x72\x17\x3d\xfc\x24\x5e\ +\x6f\xc4\x54\xb9\x3b\x17\xdc\x7b\xfd\x55\x3e\x6a\x9c\xb1\x7f\x10\ +\xa2\xec\x05\xa0\x7c\x89\x96\xe9\xd2\x32\x61\xdc\x6d\xc0\x3e\x1c\ +\x65\xef\x4a\x1a\xad\x9c\xf8\x00\xe8\x6c\x74\x19\x3f\x2c\xde\x14\ +\xe5\x05\xb2\xf0\x84\x37\xf7\x0f\x60\x1f\x94\x6b\x97\xd9\xfc\x0c\ +\x5c\xbb\xfc\xaf\xf8\x51\xe0\xfe\xf5\x4b\xec\xde\x3f\x64\xe7\xcd\ +\xb7\xe1\x6c\xc4\x78\xa1\xd8\xd9\x61\xde\xc5\x0d\x61\xb8\x2b\xe4\ +\x31\xe3\xb8\x41\x63\xb7\x07\x95\x3d\x76\x73\x7f\x9f\x1d\xd2\x55\ +\xf3\x22\x63\x86\x5c\x1a\xe5\xf4\xec\x10\x33\x68\xcc\x65\xda\xc4\ +\x0e\xe9\x8e\x52\x1e\xa3\xc8\x60\x3e\xff\x7d\x16\xf2\x9c\x5e\xa6\ +\xa0\x33\x9f\xd1\x35\x47\x48\x3c\x7b\x99\x42\xae\xb9\xf2\x44\xea\ +\x6a\x85\xfb\x66\x1e\xd1\x6a\xb7\x58\x6e\x77\xf8\xec\x8b\x2b\x34\ +\xba\xb7\x78\xea\x6a\xca\x92\x95\xb2\x6a\x6d\x30\x71\x84\x19\xcc\ +\x28\x3a\xa0\x69\x8a\xbf\xa3\x3c\xd6\xfd\x35\x70\x1e\x52\xf7\xd7\ +\x84\xef\x83\xb5\x21\x9d\x81\x0e\x0f\x76\x61\x4d\xc0\x0c\x3f\x69\ +\xd0\x70\x15\x5a\x9a\x23\xe6\xee\xda\xae\xec\xd8\x55\xa9\xb8\x79\ +\x88\xa5\x82\x2d\x5c\xe6\xf3\xbd\x5d\x86\xc9\x2d\x74\xbe\x27\x5a\ +\xce\x15\xaa\xcd\xb1\x91\x83\xaf\x92\x9d\xb0\x2b\x22\xa2\x0a\xc5\ +\xa6\x8a\x3d\x15\x02\x1a\xcc\x18\x08\xe1\x92\x13\x13\xa0\x6a\x0d\ +\x12\x2f\x97\xd0\xc1\xd5\x55\x99\xb1\xcb\x13\x20\x0e\x95\x39\xea\ +\xac\x8a\x89\xcf\x07\x30\x61\x84\x85\xc5\xd3\xee\xcf\xcc\x65\x63\ +\xd2\xd7\xe8\xab\x23\xb6\x92\x7b\x17\x3c\x23\x2e\x77\x0e\x19\xc7\ +\x4f\xd1\x51\x73\x6e\xbc\xfc\x8b\xfc\xc0\x0f\x76\x68\x2d\x6f\x62\ +\x77\x5b\x58\xbd\x43\xa2\xc1\xf7\xd9\x3d\xd8\x64\xf7\xfe\x21\xed\ +\xe1\xcd\x0b\x6f\x5c\xb9\xec\xf0\x60\x1a\xe2\x99\x07\xb8\xd1\x1a\ +\x2d\xe5\x05\xee\xbd\x9f\xf1\xf5\xff\xed\x1b\xfc\xd9\xaf\xfd\x1a\ +\xde\x1b\x7f\xc2\xd5\x2b\x3a\x9f\x7b\xee\x25\x3e\xfb\x5f\xfe\x04\ +\xf9\xc2\x06\xca\xd9\x2e\xca\xd9\x2e\xe3\xf8\x29\xa9\xab\x08\x8e\ +\xd6\x68\x18\x77\x09\x8e\xd6\xe8\x67\x83\xf9\x2e\x5c\x81\x8d\xf5\ +\xc0\x92\x59\x12\x90\x41\x0b\xf0\xb8\xca\xec\x8c\x32\x46\xba\x83\ +\xde\x54\x2f\x40\x8e\xf2\x7e\x2f\x53\xe6\xb2\x70\xa3\x60\x42\xce\ +\x14\x91\x75\x5b\x6a\xf3\x42\x01\x58\x8e\xf8\xbf\x78\xfd\x29\x3e\ +\xfb\xe2\x0a\xb7\xd6\xae\xf1\xd9\x67\xa6\x2c\x59\x29\xdd\x25\x4d\ +\x06\xb0\x0c\xd8\x22\x98\xcb\xdb\xc4\x99\x05\x76\xf9\xb9\x87\xe1\ +\x2e\x87\xe1\x2e\xab\xd6\x06\x0b\xfd\x08\x2f\x3d\xc5\xd1\xc7\x84\ +\xc6\x84\x7d\x75\xd6\xfc\x10\x7a\x11\x5f\x36\x48\x12\xe9\x87\x5c\ +\xb0\x5c\xc5\xfd\x0e\x19\xca\xe5\xf5\x0b\x5c\x71\xb5\xf9\x31\x3e\ +\x4e\x19\x44\x3e\xea\xe4\x68\x46\xd7\x79\x53\x02\x7b\xd6\x29\x1c\ +\xfb\xf1\x6c\xb8\xc2\xc0\xc6\x08\x91\x7c\xb0\xa0\x54\x14\x32\x5d\ +\x5c\x02\xa7\xf9\x02\xa6\x7e\x86\x97\x98\x72\x6a\x2e\x4a\x4c\xa6\ +\x9a\x25\x0c\xad\x8b\x13\xc1\xc0\xe6\x1f\xbc\x85\x11\x56\xc7\xa4\ +\x36\x7a\x8a\xa9\x86\x2c\xde\x3e\xd4\xec\xc4\xbb\xc1\xe6\x95\x0e\ +\x5c\xe9\x70\x79\xd1\x64\xf7\x9e\xce\xc3\x83\xef\x72\xf4\x1f\xfe\ +\x8a\x07\x8f\x63\xf6\xfc\x7d\x36\x54\xb1\xae\x76\x3b\xba\x47\xe3\ +\xb0\xce\xb5\xf5\xd9\xf8\x92\x6a\x2d\x41\x3e\xfb\x27\xa9\xd6\x12\ +\xc3\xfc\x36\x2e\x6b\x44\x97\x7a\x18\xd1\x1a\xbf\xff\xd7\xef\x63\ +\xbf\xff\x3d\x99\xbd\xd7\x6a\x1b\x1c\x54\x02\xb9\x0c\x60\xe8\x13\ +\x1c\x95\x26\xd7\x0a\xf9\x28\x97\xd8\x6c\xec\xc7\x18\x9e\xf8\x99\ +\x4d\x27\x98\x0b\x40\x3d\xb0\x04\xfe\xd5\x1b\x02\x3a\x34\x55\x49\ +\x15\x57\x03\xb7\x84\x16\xd5\xcc\xdc\x74\x82\xb9\x93\x22\x76\x05\ +\x06\xa7\x08\xe8\xaa\x3f\x45\xa9\x3f\x7e\xe6\xc5\x5b\xdc\xbc\x1a\ +\xb3\x62\x5e\x43\xff\x84\x06\xfd\x6c\x2e\x70\x27\xce\x81\xc8\xc2\ +\x8b\x6b\x73\xd9\xb8\x7a\xbf\xbe\x08\x9c\x8a\xcf\xbd\xba\xb8\x21\ +\x02\xdd\x87\xe1\x60\x93\xd5\xf6\x36\x67\x1c\x63\x27\xcb\x88\x66\ +\x6f\x5d\x62\xe3\xb2\xd0\x2b\x1f\x57\x03\xb9\x0c\xe6\x91\x12\x31\ +\xd8\x3d\x45\x1f\x7c\x4f\x06\xee\xf8\xd4\x13\x8b\xd4\x03\x91\x89\ +\xcb\xb6\xb3\xaf\x6f\x80\x2e\x54\x71\x12\x13\x17\x8c\x87\xa0\x7f\ +\x8b\x46\x46\x99\x61\xc1\xc4\x4a\x26\xb2\x63\x27\x05\x4b\xca\x19\ +\x06\x36\x53\x4d\xe0\xe5\xc4\xcb\x31\xf5\x08\x88\xf0\x12\x13\x53\ +\x17\x27\x42\x4c\x80\x11\xb9\xc4\xa6\xf7\xa1\x01\x6d\x58\x82\x2e\ +\xbf\xbc\xf9\x32\xde\xe4\x16\x27\x85\xe3\x69\x47\x7d\x30\x37\x2a\ +\xf9\x4c\x57\x61\xe7\xdd\x1a\x37\xd6\x2e\x91\x6f\xc1\xc3\x83\x88\ +\x0f\xfe\xe2\xbb\x7c\xe5\xbd\xff\x8b\xc3\xc3\x13\xb1\xbc\x25\x89\ +\xb8\xd9\xb9\xc1\xee\xc7\x1b\x6c\x04\xfb\x5c\xbd\xfe\x79\x39\xd2\ +\x2f\xab\xfe\x02\x17\x5f\xbe\x7e\xca\xde\xc3\xa7\x68\x15\x34\xed\ +\x91\xe6\x70\x79\xe3\xff\xe7\xec\x4d\x63\x24\x49\xef\x33\xbf\x5f\ +\x44\x46\x1e\x91\x77\x66\xdd\xdd\x55\xdd\x5d\xd5\xdd\xc3\x69\x0e\ +\x39\x33\xa4\x48\x91\xa2\xa4\x15\xe1\x7e\xba\x07\x00\x00\x20\x00\ +\x49\x44\x41\x54\xb5\xdc\x5d\xd0\xdc\xc5\x7a\xd7\xd2\xae\xbd\x6b\ +\x08\x82\x05\x08\x86\x77\x05\xfb\xc3\x2e\x20\xd8\x1f\x6c\xd9\x30\ +\x60\xaf\xe1\x05\x0c\xfb\x83\xf5\xc1\xb2\x56\xb0\x21\xcb\xd6\xb5\ +\xb2\x6e\xea\xe0\x50\x9a\xa1\x66\x28\x72\x86\x33\x54\x4f\xcf\x74\ +\x75\xd7\xdd\x75\x57\x9e\x11\x19\x79\xc4\xe1\x0f\x6f\xbc\x6f\xbe\ +\x11\x99\xd5\x43\x39\x1b\x8d\xc8\x23\x32\x2b\x33\xe2\x79\x9f\x78\ +\xfe\x77\x93\xa3\x9d\x32\xa5\xd5\x63\x06\xa7\x36\xc5\x55\x0f\x7f\ +\xbb\x00\x5c\x50\x2a\x1c\x53\x5b\x7b\x45\xbd\x5f\x82\xb9\x45\x15\ +\x23\xec\x63\xf6\x3a\xaa\xc0\x53\x1a\x57\x92\x1d\x74\x00\x2b\x2d\ +\x5c\x35\x19\xf6\x04\x80\xfd\x5e\x48\xc1\x2a\x31\xa9\x58\x04\xed\ +\x2e\x05\xab\xa4\x0c\xbe\x82\x25\x64\x47\xab\x9a\x11\x6c\x5c\xf4\ +\xb0\xe2\x85\x22\x19\xbf\x54\xce\xce\x74\xd3\x14\xe9\xa4\x0d\x7e\ +\xf4\xae\xc9\xb8\x3a\x61\xa5\x52\xa4\xbc\x60\xb0\xd4\x8e\xdb\xd4\ +\x2e\x65\x68\x5d\x04\x34\x97\x8e\x15\x98\x7b\x1c\x0b\x50\x3b\x24\ +\x18\x5a\x82\x39\xbf\x08\xce\xe5\xe7\xd9\xeb\x5e\x02\xf7\x58\xcb\ +\x0c\xa8\xd5\xf7\xb5\x90\x76\x48\x8d\x3e\x93\xae\x8b\x63\x2d\x02\ +\xd3\x28\x9f\x9e\x3c\xaf\x87\xa4\x1d\xd3\xe5\x56\x54\x25\x73\x23\ +\x8b\x5f\xff\x34\x56\xe7\x6d\xc5\xc4\x72\x00\xbc\x5a\x70\xac\x50\ +\xf6\xdb\x74\xc6\x0b\x74\x03\xd1\x2a\x40\x06\x56\x40\x4c\x14\xb5\ +\x26\x0c\xa8\x58\x45\xc5\xc6\x43\x62\x99\xe0\x8b\x68\x5d\xc1\x1a\ +\x32\xf4\x0b\x62\x3c\x96\x35\xc0\x2c\x46\x0a\xc0\xe3\x68\x81\x9c\ +\x71\xa5\x34\xb3\x64\x6f\x09\xe0\x34\x33\x67\xed\x88\x81\xe7\xb1\ +\xbd\xff\x6d\x95\x37\x91\x8b\x5e\x20\xc7\x0b\x31\xa3\xdc\x01\x76\ +\x78\xd0\x34\x78\xd4\x8a\x78\xd4\x8a\x28\x01\x2b\x95\x22\x4f\x98\ +\x30\x3a\x3b\xe4\x1b\xc0\xc3\xb7\xb6\xa1\x1a\x51\xb7\xaa\x74\x18\ +\xb2\xdf\x7f\x46\xf8\xb5\x33\x0e\xea\x35\xa2\xbd\x36\xeb\x5b\x6b\ +\xd0\x86\xcd\x8f\xef\xd1\xee\x0a\x66\xe5\xf0\x31\x47\x3b\x2f\x50\ +\xca\x3e\xa6\x1b\x09\x7d\x4c\xf6\x5d\xf5\x9c\x3b\x79\x81\xd5\xba\ +\xc3\xe9\x64\x43\x68\xe0\xe1\x0d\xb5\x00\x2a\xc3\x1b\x50\x78\x0c\ +\xab\x82\x8d\x9b\xb4\x69\xf5\xa6\xbd\xd4\x64\xb9\x91\xce\x96\xba\ +\x77\xc2\xaa\x9a\xe2\x31\x9e\x00\x6b\xbc\x95\x80\xcc\x5a\xa5\x19\ +\x46\xee\x59\x65\x2c\x2d\xb8\x29\xd9\xb8\x54\xce\x2a\x30\x27\x00\ +\x5c\x81\x57\xd7\x9b\x94\x56\xd6\xc9\xdf\x99\x70\xab\x52\xa4\xb9\ +\x30\xa6\x6e\x4f\x73\x28\x5a\x17\x81\x02\xef\x89\x77\x48\x73\xe9\ +\x58\xb1\xf2\x0c\x43\xc7\x6c\x5c\xb8\xfb\x71\x88\xee\xb3\xff\xf6\ +\xb7\x79\xfc\xf4\x9b\x9c\x76\x0e\x19\xb4\x87\x7c\xac\x71\xc5\x6a\ +\xed\x26\x0b\x9f\xda\xe0\xb3\x2f\xdc\x60\x52\xfb\x12\x74\x9f\x10\ +\x45\x4d\x9c\xac\x4b\x69\x12\x2a\xcf\x45\x2d\x53\x4e\xf4\x7d\x2b\ +\x87\x25\x7a\xa3\x31\xe1\xd0\x53\x4c\x3c\xe3\xa5\x28\xf6\x54\x2a\ +\xa6\x72\xd7\x55\x4a\xaa\x89\xfd\x90\xb8\x21\x62\x35\xc2\x32\x86\ +\x06\x7d\x2b\xc9\xc4\x12\xcc\xd2\xd8\x93\xcc\x3c\xf4\x45\x88\xd0\ +\xaa\x18\xe0\xc5\x63\x05\x2c\x12\xba\x57\x56\x86\x48\x00\x2b\x57\ +\x9b\x5d\x60\xe2\x0d\xd9\x3b\xff\x36\xe3\xf0\x17\xb5\x06\x7f\xaf\ +\xf3\xa0\x69\x40\xe6\x07\x79\x78\xf8\x98\x17\x6e\xbc\xc8\x6f\xbd\ +\x97\xf4\x25\x1a\x93\x15\x16\x3a\x8f\xc8\xaf\x6c\xc4\x8d\xfe\xb6\ +\xc9\x16\x3e\x8e\xeb\xef\x28\x36\x32\xad\x15\xba\x9d\x33\xc2\xd0\ +\xa0\x73\x01\x0d\x33\xa2\x7d\x58\xa5\x66\x08\x2f\xc3\x0b\x96\xcd\ +\x99\x61\x63\xae\x37\x09\x8f\x36\xe2\x16\xad\xaf\x50\x09\x2e\x98\ +\xb4\x9b\xb0\xfc\x98\x53\xa6\xc3\x17\xa5\x76\x3e\xcd\x94\xa1\xf0\ +\x98\xc1\xa9\x2d\x74\x32\x87\xb4\x43\x03\xa3\x2a\x3a\xbe\x4f\x23\ +\x72\xc5\x84\xac\xd0\xdd\x6b\x7e\x2f\xc4\x7a\xce\x88\x1f\x25\x0f\ +\x9e\x63\x24\xea\x75\x79\x69\xf6\xd5\x01\x7c\xef\x4e\x72\x42\x4c\ +\xc7\x7b\x46\xdd\x4e\x8e\x11\x10\x00\x16\xac\xbc\x66\x13\x6f\x37\ +\x12\x60\xa6\x20\x00\x5c\x28\x2d\x72\xef\xd3\x5b\x6c\x6d\xdd\xe1\ +\xbd\x6f\xdf\xe7\x7f\xfe\x7f\xdf\xe4\xcd\xf7\xff\x98\x3f\x63\x85\ +\xdb\xb6\xcb\xcb\x5f\xfd\x7d\xde\xff\xd4\x67\xf9\x7b\xff\xc9\x6d\ +\x6e\x37\x36\xd9\x6f\xef\x62\x52\x42\xd5\xed\x6b\xb9\x15\x51\xd0\ +\x27\x5b\x29\x31\xe9\xbb\x50\xc8\xa9\x5c\x62\x1d\xc8\x12\xc0\xd2\ +\x3b\x91\xf8\x8c\x81\x41\x2f\xd6\xd5\xd5\x38\x02\xa8\x34\xb1\x94\ +\x14\xb2\x3a\x5e\xea\x62\x09\x6a\x29\x2d\x0a\xd6\x90\xf1\x60\x21\ +\xd6\xc0\x02\xe8\x82\x79\xa7\x80\xb5\x3c\x4f\xb1\xb0\xa7\x97\x36\ +\x69\x33\xed\x66\x82\x1d\xad\x08\x78\x5d\x19\x78\x0f\x9a\x86\x7a\ +\x7e\xf3\xea\x2e\x23\xff\x28\xae\xd1\xbb\x10\x45\xa9\xd5\x08\xfc\ +\x1d\x35\x81\xc8\xa8\x1a\x58\x83\x3c\xa6\xb5\x42\xcd\x14\xe3\x02\ +\xfa\x40\xeb\x03\x78\x56\xdd\xa6\x61\x46\x84\xf5\x06\xf7\x1f\x5c\ +\x11\xad\xff\x0d\xb8\x03\xd9\xd8\x47\x4c\xa6\x4c\x69\x59\x48\x89\ +\xd2\xaa\xf0\x8a\x48\xe9\x50\xa9\x83\x71\x75\xc8\x20\xfe\xe2\xa5\ +\xec\x63\x06\xd8\x58\x83\xbc\xea\xb3\x56\x37\xab\x74\x2a\x11\x46\ +\xd0\x9f\x31\xca\x54\x40\x03\x21\x23\x0a\x83\x52\x02\xdc\xa5\x30\ +\x87\x6b\x8e\xe7\x02\x58\x0f\x8c\xb4\x8a\x1e\xd6\x60\x42\xb5\x3c\ +\x6d\xac\x22\x73\x29\x9a\x35\xd1\x31\xbe\xbc\x61\xb0\x5c\x10\x12\ +\x02\xa0\xb2\xb0\x4a\xeb\xea\x94\xca\xc2\x2a\x10\x70\xe1\x65\x58\ +\x9a\xc3\xca\x12\xd0\x27\x17\x87\xca\x2b\xd5\xf1\xde\xa4\xb5\x9d\ +\xe3\x07\x2f\xa1\xf0\x37\xff\x46\x9c\x45\x18\xf1\xf2\xf7\xbd\xcc\ +\xff\xd0\xa8\xf2\xcb\x2f\x2e\xf1\xf3\xff\xeb\xff\xc5\xbe\x97\xe7\ +\xd2\x2f\xb3\xf8\xf0\x3d\xdc\x7f\x7d\xce\x57\x7e\xf2\xef\x73\xeb\ +\xd3\x9f\x63\x70\x7c\x86\x1b\x64\x21\x18\x52\xce\x25\x03\x22\x7e\ +\x5c\xa3\x57\x8d\x0a\x5c\x5d\x66\xe7\x06\x3c\x9c\x41\x15\x73\x74\ +\x4e\xe9\xc5\x64\xf5\x6a\x14\xf4\x45\x7f\x65\x2d\x4f\xa3\x54\xce\ +\x92\xf9\x07\x3f\xf9\x4f\x7e\x6e\x1c\x46\xd8\xfe\x88\x61\x6c\xb0\ +\x15\xac\x21\x7e\x68\xe1\x87\x96\xba\x0f\x60\x99\x3e\x93\x20\xc2\ +\x34\x3d\x32\x64\x19\x87\x11\x56\xce\xc7\x18\x1a\x04\xd6\x04\xd3\ +\xf7\x15\x98\xf3\x7e\x0e\x3f\x0b\x96\xe7\x31\xb6\x2d\xe5\xb5\xa8\ +\xd6\x8e\xb8\xea\xbd\xc3\xe5\x35\x25\x7a\x97\x9e\x08\x45\x9f\xbc\ +\xf9\x80\xc2\xd5\x12\xd6\x55\x95\x76\x77\xcc\x5b\x57\x1d\x1e\xef\ +\xed\x91\x5d\xbc\x64\xbf\x56\x63\x6b\xa9\x45\xbf\x9f\x05\x31\x72\ +\x84\x30\xf4\xc9\x98\x16\xe3\xf1\x94\xf2\xc2\xd0\x87\x91\x48\x66\ +\x3f\xef\x44\x5c\x5c\x7a\x8c\x8f\x5b\x2c\xe4\x4f\xa8\xde\xf9\x18\ +\xb7\x22\x1f\x7f\x60\x30\xe2\x8c\x71\x7e\x8b\x5c\xe6\x4a\x80\xb9\ +\x26\x1e\x47\xf9\x3d\x26\xce\x32\xd1\xc2\x12\x86\xd7\x63\xe2\x64\ +\x69\x87\x06\x61\x36\x10\xe3\x4d\x62\x26\x68\xe4\x1c\x26\xee\x34\ +\xe0\x60\x8a\xcc\x6f\xc2\xac\x8f\x35\xb0\x19\x7b\x63\xac\xaa\xa9\ +\x1e\x97\xc2\x1c\x13\x23\x60\x62\xcc\xe6\xfd\x56\x7d\x07\xb7\x1c\ +\xf7\xe5\x9d\x64\xa9\x96\x07\x78\x91\x81\x39\xc9\xaa\xf2\x7e\xaf\ +\x6b\xd0\x2c\x4e\x01\xbc\x75\x7f\x85\x92\x55\xe2\xde\xed\xa9\x9c\ +\x19\x7b\x4e\x0c\x60\x38\x3b\x3b\x67\x7d\xc1\xe6\xc2\xcb\x50\xca\ +\x4e\x89\x65\xcd\xde\xc0\xf1\x7b\x78\x83\xe9\x73\x17\x5e\x86\xde\ +\x69\x95\x0f\xbe\x71\xc8\xd7\x7f\xe5\x6b\x5c\xee\x3f\xe1\x85\x4f\ +\xbe\x82\x5d\x76\x70\x4b\x36\x8d\xb5\x25\xb6\xee\x7f\x8c\xbf\xf3\ +\xf2\x8b\x7c\xf5\xe1\x11\x8e\x13\x50\xb7\x8a\xbc\x7d\x70\x89\xfb\ +\xf5\xd7\x29\xdc\xf4\x78\x61\xf5\x2e\x41\xc9\x20\x37\x09\x31\xcc\ +\x3c\xc8\x10\x75\x2c\x2f\x5c\xcb\xc7\xb0\xb3\xf4\x7a\x97\xbc\xf5\ +\xc6\xeb\xd8\xd6\xd4\xe8\x1c\x4f\xf2\x71\xf3\x19\x97\xd5\x5c\x8d\ +\xad\xcf\x6f\x60\x79\x6b\x8c\x30\xc8\x96\xb3\x54\x07\x06\x79\xc0\ +\x9b\x98\xe4\x81\xff\xe5\xdf\xfc\x3f\x64\x7e\xfc\x27\xfe\xf1\xcf\ +\x01\xf8\x71\x4f\x80\x8a\x9f\x25\xf2\x27\x64\xc3\x80\x6c\x18\x30\ +\xa4\x30\x03\xea\xa1\x5f\xc0\x34\x3d\xfc\xd0\x22\x34\x6a\x64\xb2\ +\x82\x89\x87\x51\x15\xc3\xe8\xe1\x4f\x6a\xe4\x0c\x1f\x7c\x8f\x71\ +\xb4\x40\xd6\xef\x91\xf7\x73\xb8\x91\xcd\x64\xb2\x42\x77\x74\xc5\ +\x52\xe1\x90\x25\xdb\x98\x01\xf3\x83\xa6\xc1\x37\x5e\xbf\x4d\xdd\ +\xbf\x03\x41\x95\xcb\xee\x05\xdf\xba\xff\x2d\x46\x2d\x9f\x83\xf3\ +\x90\x8b\x8b\x90\x4f\xfe\xad\x13\x38\xb7\xa9\x56\x26\xf4\x2e\x85\ +\x81\x13\x95\x03\xc2\x6c\x80\x39\x99\x82\xb8\x15\x4d\x28\x60\xe0\ +\x38\x19\x72\xb9\x0c\x97\x97\x13\xba\x83\x31\x4f\x9e\x9c\x72\xbe\ +\x73\x44\xb8\xde\xc3\xa8\xf6\xa8\x2c\xfc\x6d\xca\xb5\x0f\xb8\xba\ +\xda\x80\x62\x8d\x5c\xe6\x8a\x49\xb8\xc0\x24\x5c\xa0\x54\xdb\xc3\ +\xbf\x18\x08\x29\xe1\xf5\xb0\x0d\x18\x46\x06\x5c\x88\x3c\x85\x41\ +\xde\xa4\xc8\x08\xd7\xf2\x29\x18\x79\x02\xd7\xc4\x2f\x7a\x54\x46\ +\x25\x02\x5f\xdc\xcf\x05\x45\xcc\x49\x16\x73\x92\x55\xec\x7b\xdd\ +\x2d\x5f\xf5\x99\xb8\x62\x7f\xbf\xe8\xe1\xc5\xee\xb3\x4a\xbe\xa8\ +\x6a\xf7\x9a\x8d\x88\x95\x8d\x06\xeb\x0b\x59\xb6\xee\xaf\x50\x69\ +\x42\xde\x86\x72\x7e\xca\x6c\x95\x85\x55\x9c\xd3\x88\x5c\xd9\x20\ +\x5f\x2c\x33\xf0\xcd\x04\x13\x03\x38\x7e\x0f\x72\x1f\x83\xe0\x8a\ +\x0b\x2f\xc3\xf9\x91\x41\xfb\x69\xc0\x37\x8f\x8e\x79\xfb\xd1\x01\ +\x6f\x1c\xfa\xbc\xbb\x7f\xc6\xc1\xaf\x7f\x97\x85\xdb\x11\x77\x6e\ +\x3f\x80\x4c\x01\xdf\xce\x71\xab\xb1\xc8\xf7\xdf\x59\xe6\xd9\x38\ +\xc7\xc3\xed\x03\x26\x66\x95\x67\xe3\x21\xce\xce\x77\xa8\xad\x67\ +\x59\xb9\xd1\x24\x18\x16\x71\xfd\x88\xa5\x6c\x71\x9a\x6b\x91\xa9\ +\x90\xf5\x47\x50\x5c\x64\x6f\xcf\xe3\xfd\x47\x0f\x13\x20\x2e\x17\ +\x7b\x8c\x27\x79\x8c\xc0\xe5\xc1\x8b\x8b\x2c\x2d\xdf\xc2\xce\x07\ +\xe4\x02\x9b\xec\xc4\x50\xd2\x42\x26\xe4\xff\xca\x2f\xfe\xb6\x90\ +\x13\x51\x77\x84\x11\x8b\xe8\xbe\x35\x01\xf2\x6a\x78\x8b\x74\xa5\ +\x29\x39\x11\xbb\xda\x86\x7e\x41\x79\x27\x94\x7f\xcf\xf0\x70\x23\ +\x21\x37\xa4\x26\xce\x1a\x9e\xea\x4b\x11\x06\x2e\x05\x6b\x48\x2e\ +\x12\xae\xb5\x79\x3d\x84\xbf\xf1\xfa\x6d\xc2\xa3\x0d\x06\xf6\x90\ +\x62\xa3\xc0\xc5\x5a\x12\xe5\xe1\xfd\x55\xa0\xcf\x77\x27\x0b\x34\ +\x2f\x3c\x8c\xaa\xf2\xc3\x27\x7a\xa1\x4d\xfc\xa1\x9e\x6c\xa7\xf4\ +\xaa\x0c\xd3\xb6\xc2\x1e\xbb\x7f\xd8\xa3\x5e\xaf\xf1\x62\xf3\x5b\ +\x98\xf6\x06\xeb\x5b\x87\x71\x98\x3a\x96\x0e\xa7\x36\x03\x6c\xe5\ +\x33\x16\xc5\x8a\xb1\x5b\xad\x2a\x00\x95\x35\x27\xf4\x28\xd2\x2c\ +\x0f\x68\xc5\x61\x5f\x6b\x60\xcf\x00\x55\xc9\x88\x6a\xa4\xb5\x01\ +\x4d\xbe\x56\xf5\x45\x7b\x26\xb9\x0c\x65\x16\x5c\xcd\xac\xaa\xcc\ +\xb4\x5a\xa3\xc6\xab\x0f\x9a\xb1\x7c\x58\xa6\x12\x27\xf4\x49\x19\ +\x21\x6d\x08\x80\xc6\xea\x21\x76\xff\xd3\xf4\x2a\xd3\xe1\x2d\xa3\ +\xf3\x15\x11\x81\x53\xd4\xf7\x21\x17\x5e\x06\xe7\x34\x62\xfb\x78\ +\x97\x9d\xed\x33\x0e\x8e\x3d\x2e\x7b\x59\xee\xdd\xbe\x01\xc6\x31\ +\xbf\xb1\xf3\x3a\xc1\x7f\xf1\x88\x27\xff\xf1\x84\x1f\xfb\xf7\xff\ +\x19\xf5\xd2\x15\xbd\x46\x9e\x57\xbf\xf4\x2a\x3f\x7b\xe7\x36\xff\ +\x0a\x78\xf3\x6b\x7f\xcc\x62\x65\x89\x6f\x1e\xc2\x8d\x7f\xfb\x3e\ +\x4b\xb5\x7b\x34\xef\x82\xe7\x56\x38\x26\xa0\xcc\xd4\xed\xf6\xbc\ +\x9b\x33\x98\xed\x66\xd4\xce\xe6\x30\xc6\x86\x32\x12\x25\x80\xfd\ +\x81\x29\x3a\x00\xfd\xf8\x4f\xfc\xe3\x9f\x33\x62\x31\x1c\x75\x47\ +\xc8\xfb\xbe\x69\x29\x76\x96\x00\x1e\xfa\x05\xa2\x68\x02\xa5\x2c\ +\xe1\x18\xc5\xce\x7e\x68\x91\x37\xe3\x9e\x5e\x46\x8f\x0c\x59\x06\ +\x7e\x06\xd3\xf4\x18\xf8\x19\x6c\x33\x27\xf4\x75\x29\x4b\xde\xcf\ +\x51\x2d\x2d\xd1\x77\xc7\x34\x4b\x25\x96\x0a\x87\x5c\x7a\x22\x31\ +\xe7\x62\x34\x21\x30\x7b\xd8\x79\x8b\xe5\xaa\x8f\x91\xe9\x53\xae\ +\x1d\x70\x1e\x4d\x30\x96\x3d\xce\x1f\xe6\x31\x5a\x0e\xcb\x2f\x8d\ +\x59\xbe\x82\x9e\xdb\x24\xeb\x1a\x62\x1c\x97\x33\x62\x6c\x58\x62\ +\xd0\x4b\xe8\xc7\xd5\xd6\x86\x0a\x10\x74\x8c\x88\x8a\x65\x13\x86\ +\x22\xdb\xac\x64\x0c\xc9\x19\x35\x32\xa3\x2e\xdb\xad\x2e\xee\xd5\ +\x33\xce\x2e\x2d\x7c\xf7\x8a\x6c\xd9\xc7\x9d\xbc\x40\xa9\x76\xc6\ +\xc4\xc9\xaa\xad\x04\xb0\xcc\x26\x23\x0f\x93\x71\xa8\x3c\x07\x92\ +\x3d\xf5\x6d\x98\xf5\x15\x0b\x03\x2a\x73\x4d\xbf\xc9\xfd\x27\x41\ +\x49\xed\x27\xf7\xad\xe4\x8b\x8a\x7d\x0b\xb5\x02\xaf\xde\x9d\x05\ +\x30\x40\xc5\x5c\x87\x4c\x1c\xde\xcf\xb8\x8c\x3d\x07\xab\x78\x93\ +\x30\xff\x01\x21\x35\xaa\xfd\x45\xda\xe6\x90\x6a\xbd\x9f\x90\x0e\ +\x03\xdf\xe4\xc9\xde\x0e\xad\xf7\x43\x5e\x3f\x18\xd0\x3a\xbd\xa2\ +\xd5\xf5\x58\xa8\xae\xab\x16\x58\x3f\x52\x1e\xf1\xa7\xc3\x32\x7f\ +\xf0\xbb\xbf\x4d\xdd\x3b\xe6\xe3\x4b\x2f\x61\xaf\x2e\xc7\x95\x29\ +\x79\xbe\xf8\xea\x5d\x1e\x9e\x79\x3c\xdc\x3e\xe0\x46\x29\xcf\xdb\ +\x07\x97\x64\x4e\x0f\xd9\xfa\xf4\x3a\xd5\x8a\xc5\xb0\x6f\x32\xca\ +\xda\x4c\x46\x23\xf2\xd9\x12\xae\x1f\x51\xcc\x5a\x3c\x3b\x1f\xcc\ +\x30\xb1\x39\x3a\x27\xb2\x4a\x18\x81\x8b\xbd\xb4\xcc\xbd\xad\x9b\ +\x64\x73\x8b\x94\x27\x50\x30\x73\x74\x03\x87\xb1\x99\x27\x18\x3a\ +\xd4\xcc\x1c\x3f\xff\xcb\xbf\x4e\xe6\x27\xfe\xc9\xbf\xfb\x73\x12\ +\xac\x45\x2b\xc0\x37\x2d\xda\x13\x1b\x3b\x93\x34\x36\xa4\x2e\x2e\ +\x58\x43\xc2\xac\x00\x71\xc1\x1a\x62\x99\x3e\x7e\x68\x61\x9a\x1e\ +\xc3\xa8\x4a\xc1\x98\x66\xbc\x49\xdd\x6c\x9a\x53\x59\x91\x21\x4b\ +\x86\x2c\xc5\xc5\x5b\x58\x85\x1b\x94\x2a\x5f\xa2\x18\x8d\xd8\x3b\ +\x38\x22\x1b\xeb\xd9\xf6\xe2\x09\x95\x9b\x5d\x0a\x57\x4b\x84\xf9\ +\x36\xa5\x1b\x11\xed\xbf\xa8\x13\x3c\x9d\xe0\xe5\x4d\x4e\xc7\xb7\ +\x39\x0f\x8b\x94\x4f\x9e\x61\x98\x65\xaa\xe3\x0c\x8e\x61\x4c\x75\ +\xb0\x96\x77\x5b\x8d\xd3\x23\x87\x06\xe4\xc2\x80\x8e\x11\x31\x34\ +\xc0\x8b\x53\x1a\x23\x0a\x14\x8c\x3c\x8e\x93\x61\xdc\x17\xc3\x4d\ +\xba\x97\x65\x8a\x91\xd0\xc0\xd0\x60\xe2\xf8\xb4\xa8\xd2\x34\x46\ +\x78\x43\x18\x45\x23\x02\xd7\x24\x37\xb4\xf0\x4a\x42\x0f\x57\xcb\ +\x03\x5c\xcb\x57\x46\x9b\x04\xa3\xdc\x4a\x50\xa7\xf5\xef\xc8\xcc\ +\x4d\xf5\x6f\xac\x87\xa5\xec\x98\x18\x01\xb9\x5c\x46\xe9\xdf\x8f\ +\xdd\xac\xf2\xe2\x8a\x41\xa1\x94\x04\xf0\x4a\xa5\x38\x05\xb0\x26\ +\x27\x44\x5f\x0f\x01\x60\xaf\xf2\x36\x0b\x76\x59\x01\x77\xe0\x9b\ +\x38\xa7\x11\xfd\xed\x23\xbe\xf9\xc1\x84\x6f\x6f\x6f\x73\x76\xe2\ +\x31\x18\x65\x58\xa8\xae\xd3\x8a\x5a\x78\x91\x85\x87\x47\x2f\x73\ +\x83\x62\xbe\x44\x60\x65\xf9\xe3\xd7\xdf\xa0\x7f\xf2\x2e\x9f\xa8\ +\xaf\x53\xdc\x68\x60\xe6\xc6\x14\x16\x1a\x7c\xe1\x07\x3e\xc5\x07\ +\x7b\x1d\x25\x2d\xee\xf6\x73\x9c\x1d\x5c\xf0\xb9\x57\x6d\xfc\xea\ +\x3a\x13\xa7\x4f\x29\x63\xe0\xfa\x11\xa5\xcc\x84\x28\x58\xe4\xb8\ +\xf3\x98\xf7\xdf\xdf\x57\x20\x6e\x8f\x2c\x8a\xf4\x15\x88\xef\x17\ +\x2b\x6c\x7d\x7e\x83\x49\x2f\xcb\xd8\xcc\x33\x0c\x1c\x6a\x99\xb2\ +\xda\xf6\x30\xf8\xc5\x5f\xfe\x35\x61\xd8\x29\xa0\xc6\x60\x96\x00\ +\xd6\x99\x39\x01\xe6\xa0\x44\x3e\xd3\x17\x2e\xb7\x18\xc4\x96\xe9\ +\x13\x50\x24\x67\xf8\xca\xf0\x9b\x30\xc0\x36\x73\x84\x4c\x98\x04\ +\x11\x94\xb2\x0c\x87\x11\x79\x53\xe4\x26\x67\x83\x12\x76\x71\x15\ +\xb7\xd3\x66\x64\xbd\xcb\x49\xe4\xf1\xc2\x52\x01\xe7\x4a\xe4\xfc\ +\x0e\x17\x2e\xd8\x6c\xff\x30\xc1\x59\x91\x61\xc5\xa2\x91\x5b\x22\ +\x6b\x44\xac\xd7\x7a\xdc\x9b\x34\x58\xa8\xd7\x69\x56\xb3\x9c\xf5\ +\xc4\x84\x4e\x59\x71\xac\xae\x1e\x31\x13\x0f\xf2\x26\x0b\x51\x8f\ +\x88\x82\xca\xd3\xd5\xf3\x6f\xe9\x19\xe4\x2a\x22\xbf\xd7\xca\x89\ +\x96\x53\x41\x98\xc1\xf7\x0b\xe4\xd6\x1a\x18\x5e\x06\x9b\x2e\xed\ +\xd0\xa0\x33\x8e\xa8\x1b\x05\x26\xe3\x90\x5c\xc5\xa4\x60\xe4\xf1\ +\x2c\x97\x9c\x51\x23\x70\x67\x1b\x72\x55\xcb\x03\x46\xe3\xec\x5c\ +\x30\x4b\x00\xab\x4b\xbd\x99\x13\x00\x2e\x8b\x86\x78\xb9\x5c\x46\ +\x34\x18\xd4\x3c\x10\x3a\x80\x1b\xed\x2c\xb5\xe5\xd9\x4a\x13\x63\ +\xb2\x42\xa9\x7c\x48\x18\xbb\xe3\xc2\xfc\x07\xd4\xed\x9b\x5c\x78\ +\x62\x41\xf7\xaf\x4e\x19\x7b\x0e\x4f\x8e\x2e\xf8\x83\x0f\x26\x5c\ +\x3d\x3b\x54\xc9\xf2\x46\xce\xc4\x75\x1c\x0c\xad\x3b\xa5\x17\xff\ +\x5b\xc8\x2f\x12\x65\x3c\x3e\x3c\xed\x70\xfa\xfa\x1e\x2f\xdd\xbd\ +\xa4\x72\xe7\x53\x90\x29\x50\x2a\x98\xfc\xc8\x8b\x5b\x3c\x3c\xf3\ +\x38\xda\xdb\xe1\x70\x78\xc4\xc3\xc3\x1d\x16\x7d\x9f\x97\x3f\x96\ +\x21\x30\x8a\xb8\x81\x09\x85\x0c\xb9\x30\xc2\x30\x43\x4e\x5b\x59\ +\xde\x7f\xf4\x90\x61\x60\x62\x5b\x21\xc3\xc0\x64\xb1\x31\x51\x9a\ +\xb8\x76\x67\x95\xad\x1b\xeb\x80\x4d\xcd\xcc\x31\xea\x8d\x18\x65\ +\x27\x22\x57\x23\x70\xc8\x96\xb3\xfc\xc2\x2f\xfd\x7a\x72\x40\xb9\ +\x94\x0c\xea\x60\xd4\xe6\xcf\x26\x0b\x03\x57\x19\x7c\x52\x1b\x0f\ +\xfd\x02\x56\x65\x40\xbf\x2f\x06\x9a\xfb\x95\x08\xbf\x5f\x60\x48\ +\xa8\xc2\xd4\xd3\x28\x5f\xec\x53\x5d\x2a\xe1\x5e\xf4\x55\xc6\xda\ +\xc7\x6b\xa5\x44\x97\xcb\xfa\xe3\x8f\x93\x77\xaa\x2c\x2f\xc2\x32\ +\x90\xdf\xa8\x72\x70\xd7\xe3\xd6\xd8\xe6\x20\xe7\x69\x61\xe4\x21\ +\x27\x8f\x1f\xd3\xd2\x0b\x29\xe3\x5c\x5b\xbf\xe8\xb1\x94\x59\x66\ +\xe2\x0b\x40\xd7\xf5\x2a\x0a\x73\x2c\xf4\xa9\x09\xa5\x5e\x4e\xf4\ +\xbe\x95\x2d\xa8\xa4\x5b\x67\xbf\x8b\x51\x16\x85\x9b\xdd\xb0\x8b\ +\x21\x9a\xe3\xa8\x84\x1c\xd7\x99\x40\x11\xd5\x73\x4d\x0f\x4c\xf8\ +\x45\x2f\xf6\xeb\x4e\x34\x1f\x32\x73\xc3\xc9\x7a\x30\x43\xef\x9e\ +\xd9\xac\xad\x6a\x2e\xb4\x24\x03\xe7\xd7\xd6\x39\xed\xef\x26\xf4\ +\x30\x40\x79\xd5\x60\xc2\xad\xb8\xe8\x20\xa0\xe3\x91\x00\xf0\x59\ +\x7f\xc0\x93\xbd\x2c\x8f\xde\xd9\xe3\xb2\x97\x05\xb2\xaa\x57\x85\ +\x6c\x7f\x95\xbe\xb5\x08\x20\x6a\xd1\xac\xde\x05\xe0\x4f\x7a\x0f\ +\x09\x7e\xf6\x11\x3f\xf5\x9f\xdf\xe6\x85\x7f\xef\xd3\x98\x61\x83\ +\xfa\x66\x93\x7f\xf5\x5f\xff\x34\x3f\x1b\x6b\x64\x80\xff\xe9\xb7\ +\xde\xc3\x37\xd7\xf8\x77\xfe\xe9\x4b\x0c\xfc\x88\xc1\xb0\x4d\x29\ +\xae\x00\x3f\xbd\x14\x35\x7d\x8d\xbc\x20\x9e\x05\x8e\x19\xb4\x81\ +\xfc\xac\x2e\xee\x76\x66\xb5\xb4\x3f\x30\x29\x85\x39\xd1\xa0\xa0\ +\x10\x77\x29\xd6\x01\xac\x1b\x76\xe9\x9b\x7c\x4d\xdf\x5f\x82\x74\ +\x26\x6b\x29\x4e\x2a\xd2\xff\x46\xdf\x0f\xb1\x2a\x06\xa3\xa1\xc9\ +\xe9\xa3\xbd\xb9\x9d\x7d\x00\x96\x0b\xcb\xac\x2c\x79\xdc\xc8\xdc\ +\xe2\x96\x91\x65\x61\xa5\xce\xa7\x1a\x6b\x2c\xac\xd4\xd9\xba\x73\ +\x87\xd5\xfa\x06\xab\xf5\x0d\xbe\xf0\xf1\xfb\xdc\x7a\xe5\x8b\x82\ +\x59\x35\x00\xcb\x04\x99\xce\x9c\x03\x40\xcf\x10\xd1\x2f\xad\x54\ +\x48\x2f\xef\x71\x9d\x89\xf0\x05\xb7\xfa\xb4\x3a\x72\x86\xb0\xad\ +\x52\x2e\xf5\x84\x9c\x74\xee\x43\x2b\x34\xd4\xf3\xf2\xbb\xc8\xfd\ +\xf5\x72\x7e\x3d\xc2\x17\x50\x53\x00\xce\xd0\xa5\x99\x81\x17\xee\ +\xdc\xe1\xf6\x9d\x8d\xb9\x00\x06\x88\xb2\x67\x73\x25\x84\x88\xbe\ +\x8a\x34\xc1\x9d\xa3\x0b\x26\xdc\x22\xcb\x01\xce\x69\xc4\xd3\xc3\ +\x55\xde\x7b\x27\xe0\xd1\xdb\xae\x62\x5f\x09\xda\x16\x02\xc0\xb2\ +\x52\x5a\xaf\x98\x96\xe3\x80\xf7\xfb\xcf\x44\xbb\xaf\xea\x5d\x7e\ +\xe3\x38\xe2\x7f\xff\xef\xfe\x4b\xce\xfe\xf4\x37\x09\xcd\x76\x0c\ +\x44\x83\xff\xf4\xef\x7f\x9e\xca\xfa\x16\x93\xf3\x47\xb4\xda\x06\ +\x6f\x7e\xfb\x77\x79\xfb\xe1\x1f\x51\x2b\x89\xf3\x70\x15\x64\x54\ +\x3a\xa6\x32\xde\x46\x56\x3c\xa6\x41\xef\x00\x15\x5f\x55\x75\x5c\ +\xf5\xa7\x19\x72\x55\x22\xd1\x01\x48\x02\x4b\x67\x61\x19\xa1\x93\ +\xcf\xe9\x85\xa2\x05\x6b\x88\x17\xb3\x70\xdb\xec\x61\x8f\x97\x13\ +\xde\x0b\xc1\xc8\x86\xa8\x08\xa9\xcc\xd6\x87\xc9\x7d\xf2\x85\x22\ +\xfb\xdb\x87\xfc\x9f\xbf\xff\xfb\xac\x6f\xad\xd1\x58\xdb\x4b\xec\ +\xf7\x29\xe7\xa7\xb9\x71\xc3\x8f\xe3\xe7\x00\xeb\xe8\x50\x2f\xe1\ +\xc3\x2a\x1c\x0f\x05\x6b\x7f\x76\xb3\xc4\xc3\xf7\xf2\x74\x3a\xfd\ +\x44\x0e\x83\x1e\x45\x2b\x85\x39\x5c\x67\x9c\xa8\x6f\xc3\x8c\xbd\ +\x16\x3d\x43\x31\xb1\x6b\x8e\xd5\x73\x92\xad\xa5\x6b\x4c\xa6\x3d\ +\x76\xe3\x9c\x5e\x09\x4c\x09\x48\xc9\xb6\x2e\x93\x44\xf2\xbb\x04\ +\x7a\xd0\xab\x53\xad\x76\x14\x53\xcb\x1e\xc5\x72\x41\x64\xe8\x52\ +\xb1\x36\x58\x59\xcf\x70\xff\x81\xc9\x72\x21\x43\xa5\xb9\x3c\x73\ +\x1c\x25\xfb\xea\x2c\xdc\x8f\x83\x1b\x62\x2b\x98\xb8\xb9\x30\xa6\ +\x7d\x1a\x71\x3a\xf4\x79\xb2\x77\xc4\xa3\x77\x44\xfe\xee\x65\x3f\ +\xc9\xbe\x9d\x32\xd4\x1d\x68\x95\x83\x69\x87\x1f\x8d\x99\x25\xa0\ +\xc5\xa4\x54\x9b\x56\xd4\xe2\xde\x9d\x02\xaf\x75\x3d\xf8\xd9\x5f\ +\xe0\xbf\xfd\xd5\x2f\x62\xdd\x01\xb3\x7e\x87\x57\xbf\xf4\x2a\xff\ +\xa2\xd5\xe1\x5f\x03\xfd\xa3\x1d\xbe\xfa\xee\x23\xee\x7f\xf5\x92\ +\xad\xa6\xc1\xda\x9d\x09\xed\xab\x01\xbe\x96\x6f\xde\x1e\x59\x2c\ +\x70\xcc\xa9\x07\x61\x7d\x19\x73\x74\xae\xb2\xd8\x64\xa5\x48\xf6\ +\x20\x62\xd2\x98\x56\x8d\xc8\x6c\x39\x71\x25\x4e\xb1\x6a\xd4\x15\ +\x00\xd6\x99\x58\xa6\x69\x56\x2c\x53\x81\x74\x1c\x2d\x60\x8f\x97\ +\x15\x30\xa3\xee\x68\x86\x99\x93\x12\x62\xea\xae\x6b\x56\x0c\xf6\ +\xb7\x9f\xf1\xdb\xff\xe3\xaf\x13\xed\x8b\x94\x9f\xef\x73\xbe\x28\ +\xfc\xc4\x4b\x3f\xc4\x57\x8c\xaf\xb0\x56\x79\xc6\x8d\x92\x68\x9a\ +\x71\xa3\xb4\x44\x94\x3d\x53\x8f\xcb\xab\x86\xda\xae\xd4\xd7\xb9\ +\x51\xf0\x29\xd6\x33\xd3\xaa\xde\xde\xd4\x2b\x21\x80\x3b\x51\xc0\ +\x95\xcc\x3b\xf7\x75\x9d\x91\xe3\x9e\x06\xfa\xf3\x93\x8a\x85\x11\ +\xf4\x71\x9d\x89\x02\xf0\xa4\x62\xcd\x24\xff\xe8\xee\xbc\xaa\x9f\ +\xf4\xa7\xe9\x9f\x59\x33\xab\x6a\x92\x92\x5c\x34\xb5\x7a\x8d\xb5\ +\xf5\x0c\x37\x9a\x4b\x2c\x17\x96\xe7\x5e\xa1\x56\x2a\x45\xce\xfa\ +\x83\x84\x06\x6e\x2e\x8c\x13\x8c\xdc\xbf\x12\xe9\x8b\xad\xab\x1c\ +\xee\x59\xc0\x77\xde\x5f\xe0\xd1\x3b\xdb\x71\x9b\x80\x42\x42\x32\ +\xc8\xfb\x66\x39\x43\x5d\xfb\xba\x66\x39\x33\x33\x68\x32\x74\x92\ +\x97\xfa\x66\xf5\x2e\xbf\x75\x74\xc5\x6f\xff\x57\xff\x0d\x61\x4b\ +\xb0\x71\xd7\xb0\xf8\x3b\x9f\x79\x99\x97\xee\x8b\x31\xc6\xf5\x66\ +\x85\x3f\x7c\xf8\x1e\x7f\xf1\xb5\xd7\x71\xba\x17\x94\x1a\x79\xfc\ +\x14\x13\x5f\xd5\x0a\x2c\xc7\x00\xbe\xe2\x06\xd1\xf8\x52\xe5\x13\ +\x03\xf8\xd5\x56\x82\x8d\x75\xb7\xa9\x39\x88\x8d\xda\x28\x8e\x53\ +\x4b\x1d\x3c\x70\xd1\x7c\xc1\x02\x8c\x6e\x64\x53\xb0\x44\x8e\xb0\ +\xf4\xf9\xca\xa4\x1f\xa3\x26\x80\xef\xe5\xce\x95\xac\x90\x6c\xac\ +\x12\x88\x62\x1d\x7c\x75\x34\xe4\x6b\xbf\xfe\x4d\x9e\xb4\x9f\xd2\ +\x69\xf5\x59\xbe\xda\xa0\xdf\x12\x40\x2e\xec\x3e\xa0\xb2\xb0\xca\ +\xcd\xdc\x27\xe8\x55\x2e\x15\x70\xe5\xa5\xf2\x46\x69\x89\x6a\x7f\ +\x91\xcd\xcd\x90\x6a\x7f\x91\x8d\x8c\x4b\x79\xd5\x60\xd0\xd1\xb4\ +\x9c\x04\xa2\xce\xaa\x12\x60\xf1\x6b\x0a\xcc\xf1\xeb\x6a\xab\x57\ +\x1d\x6b\x60\xd4\x2b\x98\x75\xb0\xa6\x73\x79\x75\x4d\x2b\x2b\x35\ +\xa6\xd5\xce\xb3\x61\xd6\x7a\xd7\x4c\x04\x31\x5e\x5d\x6f\x72\xff\ +\x81\xc9\xe6\xed\x0c\x95\x26\xb3\x5e\x08\xe0\xa4\x7f\x73\x46\x07\ +\xb7\xae\x72\x54\x16\x56\xc9\x72\xa0\x18\xd9\x39\x8d\x78\xb2\x3f\ +\xe0\x57\xbf\xf5\x4d\xde\xfd\xe6\xeb\xb4\xba\xde\x73\xe5\x42\x2b\ +\x6e\x14\x6e\x96\xc5\xfd\xd0\x09\xa8\x94\x6d\xd5\xbf\xc2\x65\x9c\ +\x78\x7f\x2b\x2c\x80\x71\x4c\x60\x36\x79\xeb\xfd\x6d\xfe\xf2\xb7\ +\xbe\x4a\x14\xec\x51\x8b\x7c\x8c\xad\x65\xfe\xd9\x7f\xf8\x25\x2a\ +\xeb\x5b\xb8\xd6\x3a\x4f\xf6\x86\xfc\xd5\x1f\xfc\x11\x1f\xbe\xf1\ +\x94\xc6\x64\x4c\x33\x35\x0b\x7a\xa1\x3b\xe4\xbc\x73\x4e\x98\x9f\ +\x2e\x5c\x79\x95\x15\x12\xae\x89\x5b\x1c\x27\x6a\xf8\xe4\x79\x30\ +\x8b\x5a\x41\x81\x97\x3b\x57\x60\x96\xcf\xeb\x00\x34\x8b\xc9\xac\ +\xb4\xa1\x9f\x4c\xdb\xf4\xac\x7c\x82\x9d\x6d\x7f\x84\xdf\x8f\x30\ +\x33\xe2\xc3\x2a\x95\x22\x97\xdd\x5d\x7e\xed\xd7\xbe\xce\xc3\xf7\ +\xcf\xa9\x5b\x55\x32\xd5\x0e\xc5\x46\x41\x9d\x24\xa5\x83\x62\xa3\ +\x04\xa0\x57\xb9\xa4\xda\x5f\x54\x4e\xfb\xfc\x7a\x5d\x39\xed\xcf\ +\xe3\x01\x8e\x85\xb5\x9b\xac\xad\x2d\x25\x81\xa2\x81\x59\x3d\xdf\ +\x33\x66\x8c\x3f\xfd\x39\xf9\xfc\xa4\x62\x25\xc0\x6b\x0d\x6c\xb2\ +\x7d\x9f\x6e\xd8\x4b\xfc\x0d\xf9\x19\x72\x2b\xf7\x97\x8f\x9b\x66\ +\xa4\x72\x28\xa4\xa1\x29\x35\xb3\x6e\xc0\xdd\xbb\x53\x60\x65\xa3\ +\xa1\xf4\xef\x3c\xe9\x20\xc1\xbb\x56\x79\x36\xa3\x8d\x9b\x0b\x63\ +\x9c\xd3\x48\x19\x74\x4f\xf6\x76\xf8\xea\x5f\x3c\xe1\xb5\xd7\xc6\ +\x9c\x1d\xb6\x55\xa2\x50\xdf\xf1\x12\xcc\x2b\xb5\x70\xe8\x04\x4a\ +\xf7\xca\xfb\x2e\x63\xda\x61\x87\x12\x39\xd1\x71\x33\x1a\x2a\x40\ +\xeb\x40\xae\x37\x2b\xfc\xc6\x71\xc4\xff\xf1\xab\xbf\x40\xe7\xbd\ +\xdf\xc4\x98\x74\x31\x87\x23\x3e\xfd\xc2\xdd\x04\x1b\xbf\xe6\x85\ +\xfc\xe1\xd7\xdf\xe4\x6c\xf8\x94\x61\xd6\xa3\xf7\xec\x50\x8d\x1b\ +\x96\x7a\xd8\x1c\x9d\xb3\xc0\x31\x46\x6e\x91\x1b\x05\x5f\x94\x27\ +\xf5\x23\x8c\xa0\xa5\x6a\xfb\x66\xfc\xec\xad\x62\x97\xa8\x3b\xc2\ +\x5e\x88\xb0\xc7\xcb\x53\x46\xd5\xf2\x89\x65\xef\x89\x84\x11\x61\ +\x99\x4a\x72\xd8\xfe\x28\x21\x19\x6c\x7f\x84\x77\x65\x24\xbc\x19\ +\x56\xa5\x42\xbf\x3f\xe0\x77\x7f\xe3\x21\x6f\xfc\xd9\x1f\xa9\x95\ +\x5d\xab\x0b\x4b\xd5\x30\xb7\x38\xe9\x8b\x6c\x2b\xe7\x34\xa2\x57\ +\xb9\x64\x74\xbe\xa2\x00\x7c\xec\x5e\xe0\x9c\x46\x1c\xbb\x17\xec\ +\x7e\xb8\x4d\xaf\x72\xc9\xee\xae\xc9\x72\x5b\x9c\xa0\xcf\x7d\xfc\ +\x0e\x9b\xf7\xee\xd2\xac\x37\xa6\xa0\x95\xe0\x8c\x8d\xb5\x19\x03\ +\x4e\xb2\x63\x7c\x5f\x02\x50\xa6\x48\xa6\x8b\x3b\xa5\x51\x27\xb3\ +\xd4\xe6\x97\xdf\xd8\x09\xe3\xad\x15\x1a\x34\x7b\x41\x82\xdd\xa5\ +\x61\x28\xd9\x77\xb3\x29\x3c\x10\x42\x03\x2f\xcf\x30\xf0\x59\x7f\ +\x90\x00\xaf\x8c\xc8\x25\x0c\xa3\xd3\x0d\xa2\xec\x19\xce\x69\xc4\ +\x1b\xdf\x9d\xf0\xee\x5b\x67\xfc\xc9\xdb\x8f\x79\xb2\xbf\x23\x7a\ +\xbb\x55\x44\xd7\x22\xa1\x69\x05\x98\x25\x20\xa5\x84\x90\x4c\x2c\ +\x25\x84\x18\x8c\x5e\x51\xdd\x8f\x64\x27\x23\xd9\x3a\x4b\x02\xd9\ +\x2c\x67\xa8\x37\x2b\xfc\xc9\x3b\x7d\x3e\xf8\x9d\xa7\x30\x38\xa5\ +\x6a\x3a\x98\x75\x93\xff\xe0\x27\xff\x96\x62\xe3\x56\xdb\xa0\xbe\ +\xd7\xe1\xc3\x37\x9e\xd2\xe9\x74\xa8\xce\x57\x4b\x4a\x4e\x1c\x0f\ +\x2d\x3a\x43\xf1\xe5\xda\xe6\xfc\x9e\x76\xa5\x30\x87\xd9\x1c\xd4\ +\x12\xac\x0a\xd0\x2a\x26\xa7\xf8\xb8\x91\xad\x80\xac\x8a\x49\x87\ +\x1e\x52\x8a\x78\x56\x1e\x23\x6e\x3d\x65\xfb\x23\xa2\x41\x97\x62\ +\x49\x48\x12\x2f\x77\x2e\x02\x24\x83\x90\xc7\x5f\xdf\xe3\xaf\xbe\ +\xf6\x8c\x52\x39\x4b\xa5\x70\x42\xa5\x2c\x9a\xf7\xad\x54\x27\xdc\ +\x5b\x8d\x30\xb5\x6a\x62\x09\x58\xb9\x55\x49\x2b\x71\x2f\x33\xe7\ +\x34\x22\xca\x9e\xa9\x7d\x72\xfe\x19\x9b\xb7\x37\x58\x5b\x5b\xc2\ +\x35\xc7\xb8\xce\x44\x48\x84\x58\xf3\xea\xf7\x13\x97\x7e\x4d\x3f\ +\x5b\x03\x5b\x31\xb0\xd2\xb4\x31\x20\x25\x98\xf5\x8c\xb3\x52\x59\ +\x44\xda\xe4\x7f\xdd\xeb\x20\xdf\x57\x33\xab\xb4\xaa\x99\xc4\xdf\ +\x95\x8d\x4f\x64\x16\x5a\xb6\x5a\xa0\xbc\xa1\x95\x86\xb5\x66\x59\ +\x58\x6a\xe0\xb3\xfe\x60\xc6\x2b\x21\x2f\xbd\x4f\xf6\x07\x7c\xf5\ +\x2f\x9e\xf0\xe8\x9d\x6d\xfe\xf4\xaf\x5a\xd4\xad\x2a\xcd\x5b\xf5\ +\x18\xb4\x05\x35\xfd\xb4\xef\x78\x54\xca\xb6\x92\x0a\x92\x91\x75\ +\x3d\x1c\x3a\x81\x6a\xdf\x25\x81\xad\xb7\xd2\x2a\x91\xa3\xa3\x8d\ +\xa8\x5b\xac\x2c\x11\x98\x4d\xfe\xed\x6f\xbe\x46\x6b\xe7\xf7\x94\ +\xb7\xe2\x53\x5b\x9b\x8a\x8d\xb3\xcb\x0f\x78\xcd\x0b\xd9\x3e\xde\ +\x65\x10\x57\xac\x67\xed\x1b\xca\xc5\x96\xbe\xe9\x57\xe5\x46\xd8\ +\x15\x72\xa2\x1f\x89\x0c\x39\xcd\xc6\x30\x13\xec\x19\xb3\xaf\x3d\ +\x5e\x4e\x30\x6b\x18\xb8\xaa\x82\x59\x37\xde\x24\x50\x75\x46\xf6\ +\xac\x3c\x5e\x54\x13\x9a\x7a\xa9\x4b\x25\x7f\x17\xdf\xb6\x79\xeb\ +\xdd\x0f\xf9\xed\xaf\xfe\x2a\xf8\x3b\x82\x2d\xe5\x17\x6d\x2e\x61\ +\x98\x5b\x1c\x0f\x2d\x56\x0b\x9b\x73\xf5\x90\xfa\xc2\x67\x01\xdf\ +\xce\x95\x67\x72\x04\xa2\xec\x19\x3b\x3b\xaf\xf3\xe2\xca\x33\x3e\ +\xf3\xc9\x2f\x2a\x00\xea\x5a\x77\x86\x7d\xe3\x4b\x7e\xa7\x16\x26\ +\x58\x52\xa5\x48\xc6\xc0\xd6\xfd\xb8\xe9\x5c\x07\x99\x4b\x9c\x76\ +\xb1\xe9\xef\x93\x0b\x60\x5e\x32\x7b\xf3\x56\xc4\xad\x1b\x36\x9f\ +\x5b\xa8\xb3\x5c\x58\x9e\x61\xe1\x46\x3b\xab\xc0\xbb\x5a\xd8\xe4\ +\xac\x3f\x48\x1c\x23\x63\xb2\xc2\x49\xff\x26\x67\xfd\x01\x3b\x7b\ +\x7b\xec\x6c\x9f\xf1\xed\xf7\x4e\xb9\xec\x65\xb5\x63\xdc\x8e\xbd\ +\x0a\xb6\xca\xfd\x10\x3d\xe5\x82\x84\x34\x90\x60\x95\xc0\x34\xcb\ +\x19\xfc\xe2\x28\xf6\x04\xe5\x14\x78\xf5\x4e\xa1\x4d\x6d\xd0\x47\ +\x2b\x6a\x29\xc9\xf0\x07\xff\xf7\x5b\x0c\xdd\x0f\x31\x26\x5d\x72\ +\x8d\xbc\xd2\xc6\x20\xfa\x2e\x77\xbf\x66\x72\xfe\x6c\xba\x10\xcf\ +\x3b\x42\x42\xcc\xbb\x45\x91\xd0\xc2\x41\xc7\x10\x72\xa2\x62\x50\ +\xca\x4c\x12\xc6\x9d\x39\x70\x85\x31\x37\x70\x3f\xba\x34\x4e\xd6\ +\xd2\xcd\xfc\xa1\x41\x97\x81\x2b\x00\x5d\xe8\x9d\x2b\x03\x51\xea\ +\xe3\xc9\xd1\x90\xdf\xfd\xc5\xd7\x68\x1d\x74\xd4\xc1\x14\xa5\x34\ +\xb0\x79\x3b\x43\xb9\xbe\xc3\x8d\x82\xaf\x80\x7b\x3c\xb4\x58\x68\ +\xef\xf1\xe4\xd4\xe0\x78\x68\xe1\x9e\x05\x9c\x0e\x77\xe9\xd6\xf2\ +\x98\x6c\xe3\x9e\x05\xea\x79\x79\x32\x8d\xc9\x0a\xce\x69\xc4\xc7\ +\x36\x2c\x9a\xf5\x06\x43\xdf\xa5\x63\x44\x09\x46\xcd\xd0\x55\x79\ +\x14\x12\xa4\xd9\xbe\xaf\x3c\x04\x7e\xd1\x23\xdb\xf7\x67\x8c\x3c\ +\xdd\xa7\x2b\x1f\xcb\x82\xd0\x34\x0b\x57\xcb\x83\x19\xd7\x9e\x5c\ +\x00\x19\xba\x6a\x18\x8d\xac\x44\x2e\x6f\x18\xb4\x96\x7b\x09\x16\ +\x96\xff\xdb\x8d\xe9\xc2\x3a\x1d\x8a\xa0\x46\x94\x3d\x53\xc0\x3e\ +\x1e\x5a\x98\x6c\xc7\x81\x8b\x6d\xde\xfe\xc0\x4f\x30\xa9\x04\x6d\ +\xa7\x2c\x1e\xf7\x1d\x8f\x86\x59\xc7\x65\xac\x58\x57\x9e\x0f\x09\ +\x54\xf9\x7c\xdf\xf1\x54\x42\x95\x64\x61\xd9\x9d\x53\x7d\xd7\x94\ +\x3e\x5e\xac\x2c\xd1\x6a\x1b\xbc\xfe\xce\xdb\x0c\x9f\xbe\x4f\x68\ +\xb6\xa9\x45\x7e\x42\x1b\x77\x5a\x7d\xde\x31\x77\x78\xed\x8f\xff\ +\x94\xe1\xc9\xb3\xb9\x78\x6a\xe4\x7d\x4e\x9c\x78\x40\xa4\x21\xb4\ +\x70\xaf\x59\xc5\x08\x5a\x49\x16\x0e\x46\xc2\x3b\x21\x19\xb4\x58\ +\x42\x79\x17\xd2\x99\x6b\xba\xac\xb0\x2a\x15\xac\x8a\x81\x67\x09\ +\xe0\x17\x4b\x60\x23\x7a\x32\xd8\x46\x57\xf4\x31\x5e\xea\xaa\x40\ +\x47\x7f\xf4\x94\x5f\xfb\xb5\xaf\x33\x39\x7f\x44\x76\xf9\xc1\x74\ +\x15\x9b\x43\xc5\xc2\x21\xa2\xd3\xbb\x04\xa8\xdb\xda\xe6\x20\x9a\ +\x10\x85\x3b\xd4\xba\x23\xba\xb5\x7c\x82\x81\xba\xb5\xbc\x7a\x5e\ +\xf7\x27\xde\x28\x2d\x51\x7e\x39\xc3\xad\xad\x57\xf0\x82\x20\x61\ +\x60\x89\xcc\xb5\x38\x49\x29\xe8\xab\xdc\x5f\xf9\x58\x82\x52\x37\ +\xd8\x66\x18\x3a\x7e\x6c\x0d\x6c\x8c\xa0\x9f\xe8\xe2\x23\x75\xae\ +\xac\xbc\xd0\x17\x81\xde\xea\x35\x43\x97\x5a\x46\x00\xf8\xfe\x03\ +\x53\x05\x75\x94\xad\xd1\x64\x46\x13\x57\xba\xb7\x66\xdc\x6a\x67\ +\xfd\x01\x6e\x6b\x9b\xf7\xde\x09\x78\xe3\xdb\xef\xf1\x64\x6f\xa8\ +\x64\x41\xb7\xd8\x57\x8c\x1a\x99\x15\xb2\xce\x58\xe9\x5a\x09\x38\ +\xc9\xbc\xb2\x62\x5b\xea\x5c\xf9\xbc\xde\xff\x58\xb2\xb0\x5e\x4d\ +\xa2\x7f\x9e\x32\x10\xa3\xa7\x64\xaa\x1d\xbe\x75\x60\xf1\xc1\xef\ +\x3c\xc5\x74\x46\xc2\xc8\xd3\xb4\x71\x76\xf9\x01\x97\x3d\xb1\xe8\ +\x5e\xff\xf6\x37\x94\x61\x97\x0e\x7c\xac\x95\x0d\xdc\xb3\x80\xa8\ +\xd2\xc4\x08\x5a\xd0\x8d\x65\x5e\x26\x36\xa4\x8b\x39\x4a\x99\xbc\ +\xf0\x4e\xd8\x46\x97\x68\xd0\x55\x6e\xb5\xc2\x45\x2d\x61\xbc\xc9\ +\x66\x28\x6e\x24\xaa\x9a\xc3\x41\xa8\x5e\x93\x72\xa2\x15\xf9\x71\ +\xe2\xce\x94\x81\xbd\xdc\x39\xfd\xd1\x19\x5f\xff\x8d\x90\x87\xef\ +\x9f\x93\x5d\x7e\x40\xa5\x70\xa2\x19\x3c\xe2\xa0\xe4\xce\x2f\x71\ +\x5b\xdb\x6c\x1f\xef\xd2\x6f\x4d\x07\xf0\x19\xe6\xd6\xf4\x72\x11\ +\x6b\xe5\x5a\x77\x44\xc8\xfd\x84\x76\x06\xd1\x9f\xe0\x46\x69\x89\ +\x5e\xe5\x92\xd5\xae\xc9\x46\xa3\x45\x79\xb1\xa9\xdc\x57\xd2\xa3\ +\x20\x7d\xbb\x72\x4b\xaa\xf8\x72\x52\xb1\xa6\x9a\x38\x96\x14\x92\ +\x45\xab\xbe\x93\x78\x8f\x94\x11\x12\xf8\xf5\xc8\x98\x61\xef\xf4\ +\x63\x05\xe0\x8d\x86\x1a\xdf\x25\x01\x2c\x41\x2b\x59\xb8\xd1\x9e\ +\x32\x4e\x71\xfd\x32\xa1\x89\x85\xf7\x21\xab\xe4\x03\x7d\x61\xfd\ +\xcb\xa0\x85\x6c\xb6\xdd\x29\x43\xd6\x19\x33\x29\xe7\x14\xf0\x74\ +\x90\x96\xc8\x29\xb6\x95\x3a\x57\xbe\x26\x41\x9a\xbe\xf5\x8d\x02\ +\x7e\x71\xa4\x5e\x4b\xba\xec\xaa\x6c\x36\x57\xe9\x5e\xb5\x79\x6b\ +\xcf\x65\xec\xff\x99\xd2\xc6\x77\x63\x6d\x3c\x39\x7f\x84\x6b\xad\ +\x27\x5b\x2a\xd8\x70\x9a\xba\xc8\x1b\xb9\x45\x4a\x2b\x19\x8c\x7e\ +\x8b\x28\xd3\x24\xac\x76\x84\x9b\x2d\x66\xe2\xd2\x60\x3c\xf5\x13\ +\x7b\x51\x2d\xa1\x71\x8b\x25\x91\x18\x5f\xb1\x4c\xdc\xc8\x06\xca\ +\x98\x99\x92\xea\x02\x34\xf5\xaf\x65\x12\x39\x16\xc5\x12\x4a\x3e\ +\xb4\x27\x36\x95\xfc\x0a\xdd\x77\x07\x22\x86\xee\xef\x30\x29\x1c\ +\x29\x57\x4e\x8b\x80\xa6\x39\xe4\xd4\x83\x0f\xdc\x36\x67\xbd\x2c\ +\x67\x3d\xf1\xe5\xa2\x70\x87\xb3\x5e\x56\x0c\xe3\xcb\xdc\x4a\xb0\ +\x70\xb7\x96\xe7\x46\xc1\x27\xe4\x7e\xc2\x11\x0e\x28\xe3\xef\xd0\ +\x35\x58\xad\x6f\x24\x7c\xc0\xf3\xd8\x75\x5e\x70\xc2\x08\xfa\x09\ +\xc3\xad\xea\x3b\x8a\x59\x7b\x56\x99\x52\x39\xab\xc0\xac\x03\x35\ +\xad\x87\x75\x2f\x87\xee\xda\xab\x65\x6a\x34\x6b\x36\x6b\x65\x43\ +\xb9\xd2\xce\x87\xe7\x09\x63\x4e\xb2\xf0\x41\x34\x49\xb0\xae\x2e\ +\x37\x9e\xec\x65\x79\xf2\xf4\x30\x21\x1f\x24\x40\xa5\x1c\x70\x19\ +\x2b\x00\xeb\x06\x9b\x04\xb4\xce\xc6\xe9\xed\xdc\x3a\x40\x5f\x74\ +\xd6\x9c\xf8\x43\xd5\x99\x3e\xbd\x7f\xa7\x4c\x9c\x8b\x01\x27\xef\ +\xfc\x25\x7f\xf5\x97\x21\x70\x85\x31\xe9\x72\xb7\x9e\xe1\xcb\x3f\ +\xf4\x22\xcd\x4f\xff\xdd\xf8\x12\x71\x83\xb3\xb8\x6d\x47\x1a\xc0\ +\x13\xef\x38\xf1\x9c\x11\xb4\x30\x0d\x69\x0b\x39\xb8\x41\x16\xb7\ +\x38\x0d\x6c\x99\x00\x5e\x54\x53\x8d\xb5\x3d\x2b\x8f\x9b\xcf\x29\ +\xc0\xda\x9e\x8b\x59\x14\x4d\x54\xb2\x14\x09\x03\x57\x05\x33\xa4\ +\x9c\x90\x1e\x0a\x29\x45\x1a\x59\x8f\xd3\xc3\x36\x7f\xfe\x8d\xc7\ +\xe0\xef\x80\x15\x5b\xa7\xce\x98\x6e\xb1\x2f\x1c\xeb\x61\x81\x95\ +\xcc\x34\x59\x7b\x83\x67\x9c\xf5\xb2\xe4\x2f\xab\xac\xc4\x3d\x74\ +\x4b\x2b\x99\x84\x85\x7a\xa3\x20\x1a\xde\x01\x8c\x4e\x8e\x66\x13\ +\xaa\x4f\x23\x96\xdb\xed\xc4\x68\xd5\xeb\x8a\x2f\x55\xb2\x79\xec\ +\x41\x90\x2d\xa3\x74\xab\x37\x30\x9b\x33\xb9\x0f\x41\xbd\x81\x5f\ +\xf4\x12\x0b\x62\x52\xb1\x12\xbe\x66\xe9\x86\xd3\x17\x49\xa6\xda\ +\x49\x64\xa3\xe9\xf9\x21\x69\x26\xd6\x1f\xa7\x75\xf2\xee\x7e\xc0\ +\xa3\x77\xb6\x39\x39\x0a\x12\xec\x28\x99\x31\xcd\xb4\x52\x4a\x28\ +\xd7\xa1\x33\x9e\xd9\x6f\xc6\x80\x8e\x35\x70\x1a\xa4\x12\xc8\x66\ +\xd4\x4b\x68\x6f\xa9\xb9\xf5\xc5\xf2\x9a\x17\xf2\xc1\x6b\x5f\xe3\ +\xea\xd1\xd5\x54\xeb\xbe\xf2\xb2\x62\xe3\xcb\xfe\x85\xaa\x9b\xd4\ +\x6f\xa7\x9e\xf0\x58\xe8\xd8\x88\x32\xcd\x79\xe9\xf3\x74\x7a\x3e\ +\x54\x23\x21\x27\x8a\xa5\x64\x32\x4f\x18\xb8\x62\xc8\x4c\x51\x54\ +\x2d\xdb\x9e\x41\xce\xb8\x4a\xf8\x81\x7d\x1c\x8c\x5a\x1e\x8b\xa9\ +\xb7\x40\x32\xf1\x65\xa7\xc3\x77\x7e\xe7\x1b\x3c\x7c\xef\x4d\x4a\ +\xe4\x98\x14\x8e\x14\x2b\x58\x83\x7c\xac\xc3\xda\x53\xf1\x9e\x7b\ +\xc6\x21\xc2\x47\x3c\x5a\x14\xc3\x03\x6f\x64\x6e\xcd\xb8\x90\xdc\ +\xb3\x80\x4a\xf7\x16\x83\x4e\x40\xbb\x31\xa1\xd6\x1d\x71\x3a\xdc\ +\x4d\x78\x32\x0e\x83\x52\xa2\x9b\x4c\x3a\xa0\x21\xc1\xaa\x4b\x0a\ +\xf9\x5a\xda\x7d\xe6\x9a\x63\xaa\xe5\x41\xc2\x78\xd3\xc1\x2e\x19\ +\xb7\x1e\x89\xd2\xf1\x6e\xd8\x4b\x84\x91\x75\xc6\xae\xd5\x6b\x6c\ +\xd5\xfa\x8a\x81\xd3\x01\x0d\xdd\xad\x26\xef\x4b\xe0\x02\x9c\xf5\ +\xb2\xec\xee\x07\xca\xfb\xa0\x03\x71\xe2\xcf\x02\x2e\x0d\x52\xe9\ +\x69\x90\x7e\x62\x5d\x36\xcc\xc4\x00\xa2\xa4\x01\xa7\x37\xf4\x96\ +\xc6\x9d\x94\x1b\x69\xf6\x07\xa8\x2c\xde\xa6\x7b\xd5\xe6\xf5\x77\ +\xde\xc6\x3f\x79\x08\x03\x11\x02\xff\xfc\xed\x1a\xaf\xbe\xb8\x44\ +\x76\xf9\x01\xae\xb5\x4e\x7f\xb8\xc6\xa4\x37\x64\x74\x3a\x5d\x90\ +\x2b\x99\x4b\xa5\x93\xd3\x1e\x2a\x11\xb1\x2b\x53\x1a\x8c\x99\xb8\ +\x19\xea\x55\x2b\xd6\xc4\x2c\x10\x0d\xba\x2a\x60\x21\xdd\x65\x22\ +\xe1\xa7\xac\x65\x45\x15\x15\x3b\x5b\x94\x45\x07\x79\x3f\x1b\x97\ +\x33\x25\xb3\xd6\x76\x8f\x1c\x5e\x7f\xa7\x05\xd6\x56\x22\x46\xdf\ +\x8c\x5b\xde\x34\xcc\x88\x96\xd6\x01\xaa\x79\x3e\x8d\xc7\x4b\x29\ +\x71\x1c\x1c\x70\x3c\xb4\x14\x48\x4d\xb6\x39\x89\x2c\x8e\x83\x03\ +\xa2\x70\x87\x7e\x0b\x8e\x83\x03\x2a\xdd\x5b\xca\x7a\xd7\xeb\xb4\ +\xb2\x7d\x3f\xd9\xc0\x4f\x73\xaf\xc9\xfc\x07\xbd\xe2\xb8\x14\xe6\ +\xe6\x06\x30\xf4\x26\x28\x52\x2f\x4b\xc3\x50\x06\x36\xf4\x90\xb4\ +\x0c\x43\xeb\x4c\xdd\xac\xc3\x67\x1a\x3e\x85\x17\x85\x4b\x50\x4a\ +\x88\xe7\xdd\x74\x50\x9f\xf5\x84\x7c\xf8\xf6\x7b\xa7\x74\xfc\xa4\ +\x01\xe6\x32\x4e\x34\x51\xd1\x8d\x2e\xb9\x9f\xae\x7d\xe7\x01\x3d\ +\xdd\x02\x40\xba\xd2\x74\x96\x96\x7f\x23\x6b\x89\xd7\x24\x53\xeb\ +\xfe\x62\xfd\x6f\x06\x66\x93\x6f\x1d\x58\xec\xbe\xf9\x94\x8b\xc3\ +\x7d\x8c\x89\xb0\xbb\xbe\xf0\x7d\x2f\x2b\x77\x5b\xc9\x3f\x52\xa1\ +\xeb\xd0\xbb\x20\xf4\x2e\x30\x72\x8b\xb3\xdf\x33\x0e\x37\x8b\x88\ +\x9d\x43\x27\x0a\xc8\x96\xa6\xc0\x37\x3b\x97\x27\x4a\x1a\x78\x57\ +\x46\x22\xf9\xc7\xf2\x2e\x54\x98\x59\x6f\x6f\x35\x4d\x49\x9b\xad\ +\xd6\xbd\x68\x89\x1f\x5b\xbe\xd9\x67\x52\x38\xa2\xef\x78\xea\x12\ +\xd6\x8e\xbd\x03\x7d\x47\x4c\xa3\x97\xfd\xcd\x74\x17\x93\x3c\x69\ +\xf9\xcb\x2a\x6e\x6b\x9b\x7e\x4b\x18\x74\xfd\x96\xd0\xcb\x72\xa2\ +\xbc\xdc\x9e\x44\x02\xe0\x12\xcc\x1b\x19\x97\xa8\x78\x53\x01\x4e\ +\xca\x87\xeb\x72\x22\x54\x10\xc4\x1c\xcf\x78\x27\xd2\x59\x68\x3a\ +\x78\x3b\x46\xa4\xb2\xd7\xa6\x33\x9c\x67\x33\xe7\x36\x6a\x59\x56\ +\xea\x0d\xfc\xd2\xb2\x92\x0f\xd7\x25\xf6\x28\xbf\x69\x0c\xf2\xf3\ +\xe1\xb9\x02\xf0\xd9\x61\x5b\x8c\x5b\xb0\x92\xb3\x42\xd2\x63\x0f\ +\xd2\x0c\xab\xdf\xaf\x94\x87\x6a\xd6\xc8\x3c\xcd\xab\xfa\x18\xc7\ +\x21\x6a\x1d\xe4\xb2\x45\x01\x88\x76\x01\x62\xc2\xd3\x73\x16\x45\ +\x4c\x1a\x27\x1f\x3e\xc3\xcd\xf7\x08\xcd\x36\x95\x7c\x86\xc6\x0b\ +\x5b\xca\xdd\xe6\xb4\xe4\x57\x92\x00\x00\x20\x00\x49\x44\x41\x54\ +\x5a\xeb\xca\x28\x3c\xeb\x88\xf6\x62\x69\x7d\x3c\xe2\x4c\x85\x9b\ +\xaf\x8a\x13\x26\x6e\x66\x0a\xe0\x58\xd6\x9a\xe1\xc2\x92\x72\x8f\ +\xd9\x86\x08\x41\xcb\x00\x86\xcc\xfd\x95\x00\x96\x92\x43\xb2\x6f\ +\x1a\xd8\x51\x77\x44\xe0\x4e\x3d\x10\xd9\xe1\xba\xba\x94\x4d\xfc\ +\x61\x82\x0d\x4c\x6b\x05\xfa\x10\x8d\x2f\x71\xcf\x16\x18\xb4\x87\ +\x0c\xda\xe2\x00\x0e\xda\x43\x3e\x70\xdb\xf8\x07\x43\xce\x7a\x59\ +\x8e\x83\x69\x0b\xcd\x83\x9c\xc7\x59\x2f\xcb\x68\xb1\xa7\x0c\xc1\ +\x4a\xf7\x16\xfd\x9a\x60\xee\x5e\xe5\x92\xcd\xdb\x1b\x2c\x65\x92\ +\xbd\x80\x75\x60\xea\x9a\x55\x07\x72\x9a\x89\xd3\x41\x8c\x74\xe2\ +\x8f\x8c\xcc\xb9\xce\x44\x19\x80\xd5\xf2\x80\x6c\xdf\x27\x43\x97\ +\x6a\x79\x30\x63\xc8\xcd\xbb\x55\x9a\x49\xe0\x4a\x83\xcf\x3d\x5b\ +\x50\x00\x16\x33\x38\x0a\x33\xc0\x9b\x07\x64\x1d\x4c\xba\x97\xa1\ +\xef\x14\x94\xbf\xf7\x3a\xa3\x4d\xee\xa3\x0f\xd6\x91\x7f\xb7\x1e\ +\x19\xea\xb1\x7e\x25\xa8\x3b\xd3\xbf\x23\x3f\xbb\x6e\x55\xe9\x06\ +\x5d\x1e\x05\x63\xf2\x7b\x87\xca\xc0\x03\x78\xf5\xc5\xa5\x44\xa4\ +\x4f\xca\xa3\xe3\xb1\xa7\xb4\xf0\x89\x13\x71\xa3\xe0\x33\xf1\xb7\ +\xb8\x8a\x9b\xa9\x64\x5c\x93\x6c\x29\xa0\x34\xc8\x31\x71\x33\x8a\ +\xa1\x55\xc4\xce\x8b\x6a\x78\x51\x0d\xdb\xe8\xce\x00\x73\xc6\x8f\ +\x37\xb1\x67\xb6\x97\x9d\x0e\x57\x91\xc7\xee\x91\xc3\xde\x5b\xef\ +\x63\x5c\x39\x4c\x0a\x47\x31\x18\xf2\xea\x80\xe8\x07\xb0\x1b\x74\ +\x39\x71\xa2\x38\xed\xee\x4a\x01\x58\xe9\xdb\x28\x8b\x91\x7b\xa6\ +\xd8\xf9\xac\x97\xe5\xd6\xd8\xe6\xd6\xd8\x56\xde\x0c\xc3\xdc\xe2\ +\x38\x38\xc0\xe9\x6c\xb1\xd0\xde\xe3\x9d\xb7\x77\x18\x9e\x3c\x53\ +\x56\xb8\x0e\x44\x09\x60\xd1\x10\xdb\x4b\xe4\x44\x74\x6a\xa1\x8a\ +\xac\xcd\xcb\x87\x48\x34\x3d\x29\x67\xc9\x74\xda\xca\x07\xac\xbf\ +\xa7\x15\x1a\xca\x2d\x27\x73\x22\x9e\x07\xe0\xf3\xe1\x79\x42\x3a\ +\xc8\xe7\x9c\xc3\x88\xe3\xd6\x05\x8f\xf7\xf6\x12\x43\x67\xf4\x63\ +\x98\xb5\x0a\x33\xcc\x3c\x4f\xc7\xea\xa0\xee\x1b\x05\x05\x58\xf9\ +\x3f\x6b\x15\x08\xfd\xb3\x29\x90\x8d\xe7\xb3\xfd\x75\x8b\xa6\xe3\ +\xf7\x94\x7d\x61\x46\x3d\xe8\x84\x1c\xb7\xb6\xd9\xdb\x1f\x13\xb6\ +\x62\x9f\xb8\x0d\xab\x8b\x0b\x4a\x52\xe8\x89\x48\x0b\xed\x4b\xce\ +\x02\x21\x27\xa4\x0b\x72\xc8\x10\xc3\x89\x08\x4a\x71\x43\x1f\x37\ +\xa3\xe4\xc4\xc4\xcd\x4c\x2b\x3b\x8e\xc2\x9c\x02\xaf\x04\xb2\x8c\ +\xbe\x19\xb5\xfc\x0c\x90\x0b\xa5\x7d\xe5\x85\xf0\x72\xe7\x34\xb2\ +\x02\x08\x12\xc0\x0f\xdf\x7b\x93\x16\xc2\x5a\xd5\x5d\x3a\xfa\x41\ +\x50\x07\xa8\x37\xe4\xc4\x89\x70\x0e\x93\x55\x21\xd1\x58\xac\xc8\ +\xf5\xb1\x00\xb0\xf4\x58\xe8\x65\x49\x80\x1a\x15\x15\x85\x3b\x7c\ +\xcb\x13\x1e\x8e\xa7\x1f\xfe\x85\x00\x9f\xd6\x32\x55\xca\x00\x1d\ +\xc0\x7a\x80\x43\x1a\x75\xe9\xe0\xc6\x3c\x9d\x2c\xbd\x14\x7a\x25\ +\xb5\x9e\x23\x0c\x62\x08\xa3\x34\xe4\x74\xc6\xfd\x28\xf9\x20\x82\ +\x37\x0b\x7c\xe7\xa8\xc5\xd9\x61\x5b\x31\xbc\xce\xc2\xcf\x03\xae\ +\x0e\xcc\x79\x52\x43\x67\x57\xfd\x33\x03\x6a\xaa\x29\xb7\xfe\x19\ +\xe9\x5b\xa2\x03\xe7\x75\xee\xb8\xd6\x48\xc9\x8d\xc3\x68\x89\x63\ +\xf7\x82\xf6\xd9\xd4\x0b\x51\xbf\xbb\xce\xad\xaa\xa3\xc2\xd5\x7a\ +\xec\x40\xf7\x56\x1c\x0f\x2d\x2a\xd6\x31\xa6\x51\x26\xe3\x9a\x04\ +\xa5\x90\xba\x91\x21\x28\x85\xd3\x8c\xb6\x6a\x24\x40\xbc\x60\xd8\ +\xd0\xac\xce\x0f\x29\xc7\x3d\x29\xa4\xfb\xac\x3d\xb1\x95\x17\x22\ +\xea\x8e\x18\xba\xb7\xb9\xec\x08\x2b\xcd\x3f\xda\x65\xbf\xfb\x14\ +\xac\x2d\x31\x32\xab\x3c\xbb\x72\x3b\x86\x68\x3b\x25\x0f\x5c\xab\ +\x3b\x1d\x50\x28\x81\xab\xdf\x0e\xb9\xc9\x4a\x75\x32\x03\xe4\x85\ +\x4e\x9f\xdd\x7d\x41\x51\xbb\xfb\x01\xbb\xfb\x01\xcd\xf3\x2a\xee\ +\xd9\x11\x7f\xfe\xc1\x00\x3a\xbd\x19\x8d\xab\x1b\x67\x12\xd0\xcf\ +\x73\xc3\xc9\xe8\x9c\x0e\x64\x09\x6c\xf9\x79\x3a\x80\xd3\xfe\xe0\ +\xc2\x8b\x2b\x09\x0d\xac\x33\xee\xf9\xf0\x3c\x61\xe0\x45\xe3\x38\ +\x83\xef\x30\x62\x7f\xef\x50\x69\xcf\xeb\xd8\xef\xa3\x9e\xbf\x8e\ +\x34\xd2\x8b\x20\x0d\xe4\x34\x18\xaf\xfb\x7b\x92\xad\x13\x2e\x3a\ +\x2d\x53\x50\x1a\x77\x67\x87\x6d\xe5\x0e\x0d\xcd\x27\x54\xf2\x19\ +\x6e\xd7\x16\xa8\xac\x88\x41\x06\xd1\x82\x00\x49\x7f\xb8\xa6\x48\ +\x4d\x77\xa9\x4e\xfc\x2d\xea\x46\x3c\xd0\x87\x88\x4e\x14\x90\x71\ +\x4d\xc5\xc6\xae\x33\xc1\x1c\x2e\x75\xb9\x8a\x3c\x91\x37\xbc\x94\ +\x64\x63\x19\x42\x8e\xba\x23\x15\xc9\x2b\x94\xf6\x13\x09\xf4\x6b\ +\x76\x5b\xb1\xf0\xd1\x33\x0f\xe7\x59\x05\xfc\x1d\x2a\x65\x9b\xc6\ +\x42\x8d\x97\xd6\x56\x55\x7a\xa4\xd4\x55\xed\x7e\x98\x90\x14\xad\ +\xae\xa7\xdc\x6d\x3a\x90\xa3\xf1\x25\x46\xee\x19\xfe\xc1\x50\x49\ +\x0a\x29\x39\x0e\xa3\xd8\x30\x3b\x9b\xfa\x8b\x0f\x46\xe2\xfb\x77\ +\x3a\x7d\xae\x3a\x9d\xb9\x27\x54\x7a\x0f\xd2\x0c\xab\x3f\xd6\x19\ +\x3a\x1d\x8e\xd6\x47\x7a\xc9\x5c\x0b\x23\xe8\x8b\xdf\x17\x37\x38\ +\x59\xd9\x68\x70\xfb\xce\xc6\x47\x1a\x6e\xd3\xc4\xa6\x05\x8c\xdc\ +\x33\x9e\xee\x2d\x70\xe2\x44\xec\xb6\x4e\x13\xde\x9b\xff\x3f\xc0\ +\x9d\x07\xc4\xb4\x1c\x79\xee\xe7\xc5\xf3\xf0\x5c\x67\x22\x16\xaa\ +\xe6\x07\xd7\x59\x5e\x77\xf3\x51\x8d\x12\x95\x31\xcd\x46\x44\xf7\ +\xaa\xcd\x69\xf7\x19\xfe\xc9\x43\x25\x29\xac\x85\x29\x61\x3a\xcf\ +\x84\xbb\x52\x46\x73\x2f\x7b\x59\x46\xa7\x41\xc2\x4b\xd1\x89\x02\ +\x25\x25\x80\x84\xb4\x28\x95\xb3\x98\x7a\x98\x59\x32\xac\x04\xb0\ +\xfe\x9c\x64\x63\xf9\x58\x26\xd0\xb7\x4d\x21\xba\xf7\xf7\xb6\x71\ +\x76\x0f\x15\x80\xa3\x85\x32\xb7\x6f\x35\xd8\xbc\x77\x97\x5b\x5b\ +\xaf\xd0\xa9\x85\x73\xfd\xb1\x41\xaf\x1e\x5b\xa7\xc2\x6f\x7c\xe2\ +\x44\x09\x0b\xd5\x39\x8c\x38\x8c\xb2\x0c\xda\x43\xdc\xb3\x23\xdc\ +\xb3\x23\xa2\xf1\xa5\xfa\x2f\xc1\x2e\xef\x97\x56\xd6\xe7\xea\x5a\ +\xbf\xe8\x31\xa9\x58\x89\x82\xcf\x79\x60\xd6\xbf\x9f\x5f\xf4\x04\ +\x40\xb5\x1c\x60\x1d\xc0\x51\xa6\x92\xa8\x93\xcb\x54\x3b\xa2\xbc\ +\xa8\x6c\x50\x5a\xb9\x9a\x09\x64\xe8\x00\x96\xf2\x49\xdf\x9e\x9c\ +\x3c\xe6\xd1\x9e\x90\x10\x59\xab\x90\x60\xf9\xef\xe5\xfe\x5f\x07\ +\xe8\xcf\xf3\x6e\x48\x63\x57\x5e\x6d\x16\xa2\x5e\x02\x9c\xcf\xfb\ +\x6c\x5d\x8e\xf5\x8d\x02\xd4\x4d\x06\x9d\x2a\xef\xb5\x8e\xe3\x64\ +\xad\x2e\xb5\xb0\x97\x30\xee\xd2\x49\x4b\x18\xc7\x1c\xb7\xa6\xb2\ +\x22\x8c\x92\x25\x5e\x19\xad\x35\x82\xeb\x4c\x84\x9c\x58\x37\xc7\ +\x44\xdd\x91\x48\x8e\x37\xba\x1c\xc5\xa5\x3b\x92\x99\xa5\x2e\x96\ +\x00\x1e\x2e\x75\x29\x5c\xd4\x54\x9e\x84\x7f\xd2\x21\x3a\x9b\xb0\ +\xdf\x7f\x06\xd6\x16\x2b\x75\xb8\x91\x13\x27\xdb\x58\x0d\xb9\xf3\ +\xb9\x8f\xb3\x94\x7f\x89\xa3\xc9\xe5\xcc\x6a\xcf\x54\x3b\x62\xfe\ +\x71\x1f\xe5\x72\x5b\xc9\x08\x81\x2f\x45\xbe\x0e\x52\x79\x93\xcc\ +\x9d\xde\xee\x1c\x0f\xa1\x5e\x55\x1d\xd9\x75\x90\xea\x7a\x38\x3d\ +\x1c\x66\x1e\x2b\xeb\xaf\xe9\xc0\x4e\xcb\x11\xd7\x99\x90\x09\x5b\ +\x6c\x36\x57\x79\x75\xbd\xa9\x74\xb0\x1e\x85\x3b\xeb\x65\x95\xc1\ +\x26\x81\xbb\xeb\x0f\xd4\xef\xfb\xce\x51\x04\xfd\x24\xc8\xe4\x40\ +\x46\x79\x05\xd1\xef\xcf\x2b\x8f\x9a\x07\xe8\x4e\x2d\x7c\x2e\xd8\ +\xaf\x03\xa2\xaa\x02\x8f\x8d\xd5\xef\x65\x41\xe8\x59\x83\x7a\x6e\ +\xf5\x71\x4b\xe4\xba\x48\x5d\x1c\x99\xd5\x19\xe3\x4e\x37\xf0\x2e\ +\x7b\x59\x65\xd8\x95\xad\x64\x7a\xa5\x04\xb4\xdc\x2a\xc3\x4e\xca\ +\x07\xc9\xc0\x0b\x86\x9d\xd0\xc4\x51\x77\x34\x95\x1a\xb9\x73\x05\ +\x60\xc9\xc6\xbb\xfb\x87\x7c\x67\x47\xf4\x98\xbd\x6d\x8f\x30\xed\ +\x25\xb2\xab\x05\xd6\xcb\x37\xb9\x73\xcb\xe2\xde\xc7\xee\xf3\x89\ +\x1f\xbd\x49\x79\xb1\xa9\x26\xd1\xab\xd0\x6e\xac\xc3\xe4\x20\x6f\ +\xc9\xc8\xd2\xf9\x2d\xd9\x19\xe0\x2c\x58\x54\xf7\xd3\x80\x9e\xf4\ +\x86\x1c\x1c\x7b\x9c\x9c\x3c\xc6\x08\x45\x86\x59\x7a\x98\x8b\xee\ +\x61\x90\x1e\x04\xbf\xe8\xcd\x14\x73\x4a\xd6\x95\xfb\xcb\x13\xa3\ +\xfb\x8d\xf5\xc7\x55\xdf\xa1\xb6\xd0\x48\x78\x22\x96\x0b\xcb\xf4\ +\x5b\x53\xe6\x35\x72\xcf\x70\x0e\x23\x1e\xfb\xcf\xd4\x6f\xf0\xb7\ +\x0b\x9c\x38\x11\xdf\x39\x6a\xd1\x0e\x3b\x4a\x03\x77\x8c\x68\x2e\ +\xe8\x74\x20\xab\x63\x28\x2f\xf7\xa9\xd7\x75\xf9\xa6\x6f\xbf\x57\ +\x30\xa7\xf3\x4e\xbe\x17\xb6\xd7\x17\x94\x7c\x6d\xe8\xbb\xec\x74\ +\x2b\x38\xa7\x11\x9d\xa1\x43\x68\xb6\x29\xd8\x49\xe3\x4e\xea\x61\ +\x3d\xc3\x4e\x1e\xa3\xab\x8e\x99\x00\xad\x69\x94\x09\x23\x47\xe5\ +\x52\xa8\xa4\x78\xf3\xea\x82\xa3\x30\xc7\xe8\x72\xac\xbc\x14\x57\ +\x91\xa7\x74\xb0\x64\x5c\xc9\xc6\x92\x99\x0b\x17\x35\xae\x22\x8f\ +\xa3\x67\x22\xa0\x51\x29\xdb\x64\x6b\x49\x7f\xd1\xde\x81\x4f\xe0\ +\x9e\xb0\xbe\x6e\x26\x58\x2d\x1d\x7c\xe8\x39\x45\xba\x9d\xee\x8c\ +\xb8\xd7\x81\x2a\x2d\x57\xf9\x03\x0f\x8e\x85\x51\x38\xe9\x0d\x69\ +\x85\x9e\xf8\xdf\x81\x4e\xa7\xab\x66\x64\x5c\xc7\xb4\x3d\xa7\x48\ +\xd5\x77\xc4\x90\x18\x6d\x30\xcc\xdc\xf0\x73\xaa\xbf\x84\xee\x72\ +\xab\x96\x07\x50\x37\x55\x7d\x5c\x22\x68\xb3\x28\x02\x30\x6f\x39\ +\x7b\x42\x2e\x38\x11\x85\x73\x41\xcf\x8f\xfd\x67\x6a\xd1\x02\x6a\ +\xf6\x47\x1a\xb0\x3a\x30\x5d\x67\xa2\x80\x22\xbf\xe3\x44\x1b\xa1\ +\x9b\xb8\x55\x93\x8f\xd3\x2c\x9e\xce\xed\xb8\x8e\x91\xd3\x36\x41\ +\x22\xd3\xac\x6a\x24\x5d\x79\x73\x3e\x6b\x99\x88\x56\xd7\x53\xc6\ +\x9d\xe9\x8c\xa8\xe4\x33\x34\xfd\x48\x19\x77\xa5\xb8\xff\xb4\x64\ +\xe2\x79\x9e\x0f\x09\x5a\x09\x60\x5d\x62\x98\x57\x91\xc7\x45\xb3\ +\xcc\xba\x29\xa6\x8a\x1e\x85\x39\xae\x22\x8f\x75\x73\xcc\x55\xe4\ +\xa9\x5c\x08\xdb\x17\x6c\xdc\x9e\xd8\xca\xb0\x1b\x2e\x75\xf1\x2f\ +\x2b\xec\x77\x9f\x72\x11\x78\x44\x0b\x65\xf2\x9b\x1b\x64\x57\x85\ +\xe5\x6a\x0c\x9e\xc1\xce\x09\x4f\xf6\xde\xe5\xe8\x28\xa4\x5e\xab\ +\xcd\xd5\x4f\x32\xdf\xb6\x15\x1a\x74\x3b\x5d\x76\x5b\xa7\x2a\xc3\ +\x49\x02\xba\x5f\x38\x56\xf7\xd3\xc0\xdd\xef\x45\xf4\x9d\x42\xa2\ +\xc9\x89\x1c\xee\x22\x07\x1e\x02\x34\x7b\x41\x82\x8d\x75\xf0\xce\ +\xd3\xc9\x7a\x7e\xc5\xf3\xea\xea\x36\x9b\xab\x33\xa9\x95\xe7\xc3\ +\x73\x31\xfc\x1c\x31\x10\xf2\xc4\x89\x38\xeb\xb4\x69\x85\x62\xe1\ +\x15\xce\x9b\x9c\x75\xda\xb4\x43\x23\x61\xc4\xe9\x40\xd5\xb7\x7a\ +\xf1\xaa\x7e\x5f\x26\xf5\x1b\x41\x3f\x31\x0b\x5a\xff\xde\xf2\x33\ +\x25\x6b\xcf\x63\x58\xd7\x99\x90\xa1\x9b\xcc\xc0\x0b\x73\x2a\x45\ +\x75\x1e\x80\x75\x03\x7d\x26\x33\xb0\x27\x00\x1e\xd4\x1b\xca\xb8\ +\xeb\x5f\x5e\xe0\x8f\xe3\x29\x5c\x0b\x9a\xe1\xd6\xea\x27\x24\x45\ +\xdf\x28\xa8\x73\xed\xc5\x73\xf5\xc2\xc8\x49\x00\x58\x07\xb2\x59\ +\x5a\x1e\xb3\x58\xaf\x2b\x1d\xbc\x6e\x8e\x59\x30\x6c\x8e\xc2\x9c\ +\x02\xf2\x82\x61\x73\xe8\x08\x66\x96\x3e\x62\x10\xb9\xc7\xd6\x62\ +\x1f\xc3\x78\x85\x7a\x64\x28\x1d\xac\xdc\x63\xa1\xd0\xa8\x3b\xaf\ +\xef\x32\xde\x13\xef\x93\x39\xbe\xe9\x03\x23\x67\xba\x49\x40\x77\ +\x3b\x7b\x89\x93\x2e\x26\x16\x4d\x99\xab\x15\x7a\xf1\x7e\x5d\x11\ +\x12\xed\xf4\x13\x4c\x20\x87\xbb\xe8\x33\x33\xa8\x9b\x33\x2e\xb3\ +\xe7\x69\x61\xfd\xf3\xf4\xf2\x24\x7d\x9f\x5a\xa6\xa6\x1a\x5d\x8b\ +\x61\xe7\xd3\xdb\xae\x3f\xc0\x39\x8c\xe8\x46\xef\x72\xd6\x69\xd3\ +\x34\x6d\xf5\xdd\xe5\x55\xc3\xec\x25\xdd\x10\x93\x8a\x95\x60\x5e\ +\x1d\x20\x69\x2d\xac\x57\x5e\xeb\xad\x04\xe6\x85\xd8\xd3\x9f\x21\ +\x35\xaf\x9e\x52\xaa\xe7\x89\x7c\x94\xa4\x88\x7a\x11\x8d\x8a\x99\ +\x04\x70\x2c\x61\x4a\x61\x4e\x15\xe7\x36\xe3\xd4\x99\x41\xa7\xca\ +\xe8\xa8\xc3\x38\x3f\xf5\xcc\x2c\xdc\x11\x57\x93\xec\xf2\x03\x42\ +\x27\x50\xff\x2b\x91\x20\xa8\xed\xe3\x5d\x6a\xb1\xc7\xc9\x34\xca\ +\x0c\x26\xb9\x19\x4d\x0c\x60\x95\x82\x4d\x42\x5c\x16\xeb\xf5\x38\ +\x42\xb2\x0c\xdd\x11\x8b\xf5\x3a\x5e\x77\xc4\x82\x21\x18\x37\xe3\ +\xde\xc6\xc8\x7a\xb8\xe7\x39\xec\x7a\x9e\xcb\x4e\x87\x05\xc3\x66\ +\xf7\xc8\x81\xcb\x37\x68\xd6\x1b\x64\x57\x0b\x6c\x98\x02\xbc\x93\ +\xd3\x21\xc7\x63\x0f\xe3\x2a\x76\x6a\x13\x40\xa7\x07\x18\xb1\x6b\ +\xca\x9e\xd1\xaa\x3d\x0b\xd5\xa3\xb7\xe6\xd4\x68\x11\x89\xd6\xfe\ +\x15\x0f\xfa\xd0\x8a\xfb\xf1\xb7\xf0\xe8\x06\x5d\x4c\x6b\x85\xe0\ +\x9a\xcb\x98\x35\xb0\xd5\x9c\x0c\xc5\xbc\xf1\x02\xb9\xee\xf2\x38\ +\x0f\xd4\x7a\xe7\x1e\x2b\x6e\x7c\x22\x07\x2a\x6e\xd4\xb2\x09\x19\ +\x71\x73\xf2\x03\x89\x80\xc5\xd2\x38\xe2\xe0\xd8\x63\x10\xda\x89\ +\x85\xd7\x77\xa6\x2e\x2a\x11\xf1\x43\xb1\xa8\x94\x06\x7a\xc7\xa2\ +\x49\xc5\x82\x48\xb8\xf7\x6a\xe5\xaa\x72\xf5\xa9\x2b\x45\x0c\x7c\ +\xc9\x9a\x92\x9d\xb3\xf1\xa2\x70\xfb\xc9\xb4\xd1\x7a\x39\x0b\x44\ +\x33\x75\x85\x35\x6a\x22\x73\x2f\xfe\x7d\x32\x37\xba\x6e\x56\x67\ +\x02\x1e\x13\x7f\x48\xbb\x1f\xb2\x64\xd9\x94\xca\x4c\x7b\x7c\xf4\ +\x72\x64\xc2\x16\x41\x3c\x6d\x55\x04\x3d\xda\x1c\xb7\xb6\x39\x76\ +\x1f\x70\xef\xc0\xa0\xb8\x71\x48\x73\xe1\x06\x1b\x85\x35\x2a\xeb\ +\x5b\xf4\x8f\x76\xa6\x0b\xc7\x5a\x07\x7f\x87\x70\x6f\x9a\xbe\x30\ +\x98\x8c\x80\x1c\xe5\x5c\x0e\x34\xbf\xb4\x33\x8e\x87\x31\xca\x22\ +\xd0\xc4\xa5\x22\x2e\xfb\x31\x6a\x79\x8c\x5a\x9e\x52\xb0\xa9\xa2\ +\x72\xeb\x8b\x05\xa2\x18\xe4\x99\xa6\xd0\x77\x6b\x6b\x4b\xdc\xda\ +\x7a\x85\xf5\xf2\x4d\x8e\x72\x2b\xd0\x15\xcf\x1b\x57\x0e\x2d\x02\ +\x5a\x9d\x36\x74\x7a\xaa\x79\xc9\x3c\x36\x94\x9e\x04\x31\x35\xc8\ +\x26\x13\xb6\xa0\x67\x08\x3f\x72\x47\x38\xfe\xf5\xff\x00\xe1\xe5\ +\xc9\xb5\x9a\x4e\x4a\x88\x19\x63\x44\xbb\x02\xa4\x59\xa6\x66\x56\ +\x67\xa2\x79\x7e\xd1\x13\xf9\x11\x5a\xe7\x9e\x9e\x55\xa6\xea\x3b\ +\x34\x6b\xb6\x2a\x31\x4a\xdf\x8e\x5b\x17\x1c\x1c\x7b\x0a\xb8\xf2\ +\xaa\xd1\xea\x24\x93\x69\xea\xf5\x4a\xe2\x72\x4f\xcf\x50\x60\xec\ +\xd4\x42\xda\xa3\x5e\x3c\x61\xa9\xa0\xd8\x56\xce\x7b\x56\xa0\xbc\ +\xc6\xf7\x7d\x9d\x9f\x3c\x1d\x95\xd4\x0d\x6d\xf9\xfb\x24\x53\xeb\ +\x5d\x8a\xd2\x40\x96\xb9\x14\xfa\x42\x70\xcd\x31\x41\xbd\x41\xa6\ +\xd3\xa6\xd9\x10\x41\x8f\x8b\x74\x2b\xbc\xe1\xec\x31\x53\x7a\xb8\ +\x70\x42\x25\x1a\x52\x5b\x68\x88\x1c\x99\x23\x71\xa5\x2a\x66\xc7\ +\x38\xe3\xb1\x60\xe0\xb8\x54\xa9\x98\x15\x6e\x40\xeb\xf4\xd1\x1e\ +\xd6\x5a\xfd\xda\x1f\xbd\x51\xb6\x19\x65\x4a\x1a\x38\x0a\x88\x41\ +\x19\x60\x37\x61\x73\xbd\x8c\x7f\xef\xae\x72\xa7\xdd\x3c\xb5\xd8\ +\xf5\xf6\x39\x39\xb9\x50\xec\xab\x0e\x76\xcc\x2c\xe9\xc1\xdd\x69\ +\xf0\x15\xac\x52\xac\x57\xc7\xe0\x14\x81\x79\x40\x2d\xe2\x57\x3d\ +\xfc\x9e\xcb\x72\xdd\xe0\xbc\x13\x25\xe6\x24\xa7\x3f\x4f\x2d\xd0\ +\xa0\x0f\xd8\x73\x0d\x11\x31\x89\x47\x78\x23\xdc\xfe\x34\x8b\xed\ +\xaa\x62\x91\xc5\x9f\xeb\x8d\x90\x3a\x58\x67\xe0\xe3\xd6\x85\xd2\ +\xec\xf4\xa7\x9e\x17\x7d\xe6\x5d\x5d\x16\x9c\xfa\x43\xc5\x92\xa3\ +\xb6\xc3\xc6\x9d\x06\x5f\x7a\xe5\x25\x8a\xdf\x27\xaa\x59\x8e\x8e\ +\x42\xf6\xb7\xf3\x1c\x7e\xe7\x37\xa7\xa9\x9d\x65\x31\x2a\xb7\x16\ +\x7f\xcf\x6e\xd1\x83\x38\x47\xba\x1b\xf4\x00\x9b\x7a\xd7\xc4\x35\ +\xe7\x87\xd3\x67\xec\x92\x8a\x35\x3b\x82\xa1\x1a\x7d\xcf\x5e\x09\ +\xd7\x99\x88\x6c\x39\xf9\x19\x3d\x43\x68\xe1\xa0\x4b\x00\x2c\x55\ +\x60\xa7\x5b\xe1\x4b\xf2\x9c\x30\x20\xdb\xee\xb2\xba\xb8\xc0\xad\ +\xaa\xc3\x43\x92\xdd\x88\xfa\x86\xc8\xe5\x70\xcf\x8e\x38\x76\xd7\ +\x69\x70\x87\xc1\x24\x37\x35\xf0\x6a\x3e\x61\xe4\x30\x98\xe4\xc4\ +\x1c\x3b\x00\xff\xa4\x43\xef\x9c\xb9\xcd\x2c\x76\xe9\x70\x18\x5c\ +\xb0\x21\x9b\x6e\x67\x37\xb0\x16\x3d\xe8\x78\x5c\x76\x3a\xec\x1e\ +\x39\x18\xab\x21\xcd\xee\x6d\x5a\xec\xab\x6c\xa4\x76\x0c\x60\x79\ +\x59\xcb\xf6\x7d\xa8\x66\xc1\x99\x3f\x81\x3e\x7d\x19\x97\xc3\x0a\ +\xa5\x81\xa6\xef\x2b\x81\xe9\xf7\x42\xac\xaa\xc9\x79\x27\x54\xc3\ +\x0c\xf5\xf7\xa5\x01\x3c\x2f\x99\x67\x9e\x7c\x90\xd3\xea\x6b\x66\ +\x95\x6e\xb1\x47\xb6\x9f\x7c\x4f\x6d\xa1\x41\xf1\xbe\x37\x53\x62\ +\x24\x3c\x10\x17\x42\xb7\xc7\xe0\xad\xc5\x6d\x4c\x45\xc6\x5b\x72\ +\x68\xa3\x94\x00\x2a\x21\x7c\x73\x8d\x4f\xbd\x7c\x8b\xaf\xfc\xa3\ +\xaf\x50\xfa\xc4\x0b\x5c\x99\xd0\xde\x1e\xf1\x27\xfc\x1e\x3b\x4f\ +\x2d\xba\x81\x90\x13\xad\xd0\x88\x67\x47\xcb\xdc\x0d\x21\x21\xba\ +\x7a\xc6\x5e\x0c\x28\x29\x2f\x66\x7e\x73\xdc\xc2\xb6\x1b\x4e\x7f\ +\x9f\x3c\x76\x69\x43\x4d\x77\x9d\x49\x29\xa1\x8c\xc8\x9e\x41\xb5\ +\x3a\xa0\xe7\xa4\xdc\x73\x64\x45\x20\x4b\xef\x6d\x17\x8f\xb9\x5d\ +\x2a\x14\xe8\x67\x8d\x19\x26\x56\xa5\x6b\xe5\x21\xdd\x8e\xf0\x42\ +\x1d\x0f\x2d\x36\x8d\x0e\x9d\x48\xe4\x87\x86\x91\x83\xd9\xab\x63\ +\xd6\x62\x92\xab\x46\x58\x7f\xfe\xf0\x4d\x8c\xc2\x0a\x37\x2d\x8b\ +\xab\x7d\xc1\xa6\xd1\xa9\x89\xb5\xbe\x49\xe0\x3f\xa5\xd9\xbd\xcd\ +\xed\xca\x11\xa1\x1d\xb7\x0d\x9d\x1c\xb2\x7b\x64\xb1\x91\xf1\x39\ +\x0c\x2c\x02\x5f\x18\x33\xad\xda\x3e\xd1\xa9\xc9\x33\x3f\x3e\x29\ +\x12\xc0\x9a\x2b\xa8\x1b\xf4\xa0\x48\xa2\xc0\x52\x19\x53\xd2\x10\ +\xd3\xb6\x0c\x50\xc3\x0b\x67\x46\xca\x0e\x52\xef\x21\xf6\xe1\x22\ +\x64\x49\x61\x30\x7f\xe0\xb7\xc8\x62\x9b\x0f\xe0\x9a\x53\x4b\x9c\ +\x7c\xb7\x2f\x98\x59\xf7\x0f\x37\x7b\x01\xcd\xda\x0d\x3e\xbe\xb9\ +\x30\x13\x42\x96\xfe\x6a\x9d\x7d\xbb\x41\x37\x1e\x30\x8e\xda\xaa\ +\x4b\x7b\xd7\x84\x6a\x96\x97\x1e\xbc\xc0\xe6\xbd\xbb\xdc\x5d\xce\ +\x72\xeb\xde\x16\xc5\x9b\x2b\x74\xdb\x01\xa7\xef\x74\x78\xfd\x83\ +\x3f\x63\xef\xf1\x07\x64\xfb\x3e\xf5\xfa\x72\x9c\xd2\x6a\x43\x6c\ +\x68\x4a\x26\x15\xfa\xf5\xfa\xe8\xa3\xf4\x77\x2b\xad\x1d\x77\xfb\ +\x94\xbf\x6f\x26\x27\x79\x4e\xee\x35\xc0\x45\xe0\xb1\x64\xd9\xd4\ +\x25\x1b\x57\xa3\x69\x3b\x83\xf8\x73\xab\xe5\x81\xf0\xff\xc7\x00\ +\x0e\xea\x0d\x76\x5b\xa7\x1c\x07\x07\x94\xdb\xfb\x30\xfc\x24\x64\ +\xcb\x2c\xad\x5b\xc2\xcd\xf6\xfe\x1f\xd3\x1f\xae\x51\xe2\x48\x54\ +\x89\x94\x1b\x10\xe7\x9b\xd7\x52\xc9\x67\x83\x49\x8e\x62\xb5\xc3\ +\x60\x3c\x6d\x0c\x69\xad\x97\x6f\x2a\xe0\x3d\xf3\x7d\x38\x82\x68\ +\x78\x02\x1f\x3c\x8b\x13\x70\x4e\xe0\x02\x8c\x82\xf8\xa1\x37\x63\ +\x6b\x69\x37\x96\x0f\x00\xd1\xa9\xd0\x38\x47\xcf\x3c\x26\xde\x31\ +\xce\xb3\x8a\xd0\x4c\xfe\x90\x4e\xcc\x04\xf5\xc8\x48\x8c\xbc\xd5\ +\xe7\xb4\xc9\xc7\x12\xb0\x0a\x9c\x96\x60\xdd\x4c\xa6\x06\x74\xa7\ +\xcc\x1a\x3b\x0a\x74\xd0\x4b\x26\x2e\x0c\x4a\x0c\x7b\x2e\x3e\x42\ +\x52\xe8\x4c\x2c\x80\xd8\x67\xe8\x4f\xf7\x6f\xf6\x02\xa5\xc3\x25\ +\x80\xf5\x74\x4d\x6b\x20\x18\xd9\x65\x42\xd3\x8c\xa8\xdd\x91\x79\ +\x11\x57\x8a\x85\xa5\x0f\x58\x67\xe0\x80\x9a\xca\xb3\xf0\x7d\xf1\ +\x7d\xe4\x1c\x3b\xc8\xaa\xb6\xb2\x9f\xb9\xb3\xcc\xdf\xfc\xa7\xf7\ +\xb9\x63\xdd\xc7\x66\x81\xca\x4d\x8b\x63\xe0\xe8\x9b\xdf\xe5\xe7\ +\xff\xb7\xd7\x79\xba\x2d\x86\xf3\x98\xc5\x08\x3a\x02\x28\xa5\x6a\ +\x36\x31\x9c\xd1\xed\x4f\x70\x99\x02\x52\x1a\x7c\x89\x81\x90\x45\ +\x0f\xd7\x91\xe0\x1c\xcf\x18\xae\x3a\x0b\xeb\x4c\x3d\x4f\x53\x5f\ +\x04\x1e\x75\x8c\x44\x74\xcf\x35\xc7\x6a\xa8\x8e\x34\x56\xe9\x19\ +\x64\x9b\x79\x2a\xd1\x90\xee\x55\x88\x7f\x30\xe4\x24\x28\xb2\x64\ +\x3a\xc0\x22\x8d\xc1\xd4\xc5\x39\x29\x1c\x81\x13\xbb\xd8\x1c\x8f\ +\x5a\xa6\x46\xb7\xd3\xe5\x38\x38\xe0\x13\xbc\x48\x31\x9b\x67\x30\ +\x11\x3a\x58\x4a\x0b\x95\x9d\xa8\x03\x53\x6e\x29\xdf\x9c\x7b\x99\ +\x7f\xe6\xfb\x18\x83\x67\xc2\x78\x03\x38\x12\xef\x79\xe6\xfb\xd4\ +\x3b\x1e\xfb\xdd\xfd\xb8\x55\xeb\x98\x8b\xc0\x03\x63\x3a\x87\x58\ +\x9d\xd0\x39\xab\x3e\x5d\x41\xa1\xef\x53\xb0\x4a\xd0\xf7\x09\xe2\ +\xfb\xf3\xe4\x85\x3c\xf8\xe9\xc9\x9d\x72\x7f\xc9\xf4\x69\x5f\xb0\ +\xf4\x88\xe8\x60\x96\xba\xd9\x2f\x6a\x03\x15\x7b\x39\xaa\xa1\x43\ +\x2d\xd3\x88\x27\x77\x4e\x01\x7c\x30\xbc\xc9\xc8\x39\x54\x00\x6e\ +\xb5\x0d\x5c\x53\xe8\x78\x0b\x9b\xf1\xf8\x04\x62\x83\x4c\xaf\xd3\ +\x93\x03\xcc\xd7\xca\x06\x7b\x07\x3e\x66\xb8\xc3\xa0\xb3\xcd\xe9\ +\x1f\x1f\xf2\x03\xaf\xfe\x10\x00\x9f\xf8\xd1\x9b\xdc\xb6\x3f\x4b\ +\x6b\xe1\x81\xb2\xe0\xcf\xb6\xdf\xa0\x49\x53\x63\xc0\x89\x02\xae\ +\x3c\xc6\x6e\x6c\x43\xc8\xb6\x5c\xfa\xa0\x48\x1d\x74\x7a\xf0\x46\ +\x12\x86\x3c\x4e\x99\xb8\x87\xf2\xdc\x4e\x9e\xb1\x8c\x90\x19\xe9\ +\x72\xf1\xcf\xb8\xf4\xaa\x59\x91\x9f\x1c\x67\xca\x1d\x8c\xba\x30\ +\xfe\x10\xf8\x7e\x16\x32\x11\x7b\x95\x12\x5b\x95\x21\x0f\xd7\xb7\ +\xe8\xef\xed\x28\xcf\x83\xe8\xfb\x86\x60\xe3\x5e\x96\x43\xd7\xa0\ +\x52\x14\x03\x0b\x07\x13\x7d\x5e\x74\x9c\x69\x28\xe5\x43\x7a\x9b\ +\x06\xef\x4d\xcb\xe2\xa6\x65\x11\x59\x37\xb9\xa9\x3d\x0f\x10\x9d\ +\x4d\x78\x77\xe7\x21\x51\xdc\x0e\xe9\x22\xf0\x94\x1f\xd3\x2f\x82\ +\x3b\xe7\xb2\x95\x98\x7d\x9c\x9a\x44\x6f\x61\xce\x68\x59\x09\xc8\ +\xb4\xbc\x60\x30\xdf\xf8\x48\x03\x7e\xd8\x73\xa7\x2e\x37\x8d\xe9\ +\xe5\xdf\xed\x59\x82\xe5\xba\xe5\x6e\xa2\xb3\x8f\x72\xb1\x99\x4d\ +\x56\x36\xea\xca\x9d\x26\x2b\x2f\x46\xad\x29\x80\x0f\xbb\x13\x86\ +\xa1\x0b\xa1\xb6\x80\x62\x00\xcb\xef\x2a\xbd\x1d\x3d\x47\x8c\x0d\ +\x33\x72\x8b\xac\x5c\x1e\xf0\xd4\xbf\xc3\x07\xaf\x3f\x06\xe3\x98\ +\xa8\x78\x93\xfb\x9f\xff\x24\x3f\x76\xe3\x0b\x14\xbf\xfc\x05\x26\ +\x8d\x02\x17\xad\x2f\xf1\xd6\x1f\xee\xf2\x26\x30\x39\x7f\x04\x3d\ +\x03\xbf\xec\xc5\xda\xb8\x88\xcb\xac\xf4\x91\x25\x55\x69\x3b\x20\ +\x13\xb6\xf0\xcb\x99\xc4\x00\xf5\x82\x55\x12\x83\xd1\x7b\x0e\xe7\ +\xb8\xe0\x94\x66\xd2\x2b\xf5\xec\x36\xf5\x58\x6b\x40\x9e\x96\x23\ +\xea\xbd\x71\x0e\x89\xe5\x9e\xb3\xbb\x6b\xb2\xb1\x75\xc1\xc2\xc6\ +\x6d\x2a\x0b\x8b\x74\x17\xe4\x49\xd8\xc2\x2c\x9c\x28\x03\xaf\x44\ +\x8e\x7e\x27\x6e\xec\xee\x6f\x03\x9f\xc1\x1f\x58\x58\xc5\x3e\x50\ +\x49\x78\x44\x4c\x80\xae\x7f\x7f\xea\xc4\x8e\x01\x6c\xac\x86\x82\ +\x79\x57\x43\x6e\x5a\x96\x92\x0e\xfa\x56\x32\xf7\x7e\xf7\x29\xad\ +\x83\x4e\x02\xc0\x1d\x23\xa2\x66\x56\xe7\xb2\xaf\x1e\x54\x48\xaf\ +\x74\x69\xb0\xe9\x46\x9c\x6e\xa4\xe9\xa1\x64\xfd\x73\xd3\x9a\x59\ +\x37\xfe\x74\x50\xfb\xbd\x90\x28\x53\x51\x72\x42\x06\x32\xfc\xa2\ +\x97\x00\x70\xa2\x8a\x23\x14\x5d\xd1\xd7\xca\xd3\x0a\x8d\x83\xe1\ +\x4d\x8e\x5b\xc2\x88\x6b\x75\x62\x00\xfb\xee\xdc\x2b\x80\xba\x52\ +\xc4\x7f\xaf\x15\x0a\x5f\x79\xd0\xab\x73\xdc\xba\xc0\xfe\xf4\x16\ +\x3f\x7c\xcb\xe0\xc1\x8f\xdf\xe3\xc5\x1f\xfc\x22\x9b\xb7\x37\xf0\ +\x4f\x3a\x7c\xeb\xf0\x82\x77\xdf\x38\xe1\xfd\xdf\xd9\x65\xcd\xdb\ +\xe7\x1f\xfc\x0d\x93\x2f\xff\xc4\x06\xd9\xe5\x07\x1c\x4d\x2e\x89\ +\x32\x95\x44\xcf\x37\xfd\x7b\xcf\xdb\xca\xbf\x9f\x0e\xb3\xeb\x84\ +\x71\x8e\x91\x78\xec\x9a\x63\x5c\x73\x3c\x75\xb3\x69\x1d\x46\x13\ +\xb3\x4f\xb4\x9b\x1e\xf5\xd3\x0d\xbb\x9d\xae\x00\xdf\xd9\xf0\x29\ +\xe3\xe1\x15\x99\x6e\x9b\x8d\xc2\x9a\xc8\xa1\xf0\x77\x66\xab\x45\ +\xea\x26\x83\xf6\x90\x6a\x7f\x91\xfe\xa0\x8b\x55\xf4\xf1\x07\x96\ +\x62\x61\x95\x3b\x11\x9d\x9a\xd4\xd7\x3f\x4c\x80\x57\x82\xba\xcc\ +\x83\x19\x46\x4e\x3f\xb6\xd6\x37\xb9\x5d\xbb\x4b\xb6\x99\xe7\x22\ +\xf0\x44\xda\x5e\x2a\x14\x19\x65\x2a\x89\x18\xbc\x7e\x40\xf5\x01\ +\x31\xd7\x01\x53\x02\x21\x0d\x50\xc9\xdc\x12\x2c\x2a\xd4\xdc\x0b\ +\x67\x16\x8d\xee\xa9\xd0\xf5\xae\xcc\xa3\xb8\xce\x53\xe2\x3a\x13\ +\x6a\x77\xa6\xc9\x3d\x52\x03\x37\x2f\x8e\x14\x80\xaf\x3a\x9d\x04\ +\x9b\xe9\xdf\x5b\x7e\x17\x1d\x60\x7a\x7f\x8b\xb3\xc3\x36\x7b\xaf\ +\x1d\x52\x5e\x35\xf8\xe2\x67\x3e\xc7\x8f\xfe\xbd\xcf\xf2\xf2\x27\ +\x57\xb9\x73\xb3\xc8\x46\xc6\xe7\x5b\xdf\x7d\x8d\xdf\xfa\x8d\x5f\ +\xe1\xf7\x7e\xf5\xf7\x38\x0a\x73\xdc\xbb\xf3\x0a\xad\x07\x1b\x34\ +\xf2\xd5\x99\x06\xdf\xd7\x79\x5c\x12\x55\xdf\x73\x8e\xb1\x7e\x7f\ +\x99\x48\x91\x46\x22\x76\x10\xf4\xe7\xba\xe9\xd2\xcf\xa5\xcf\xab\ +\xee\x92\x6b\x75\x3d\xa2\xec\x19\x79\x56\x70\x49\x85\xb2\xad\x64\ +\xb9\x52\x89\x1c\x01\x35\xd1\xe2\xd5\xbd\x60\xa3\x34\xdf\xe5\x57\ +\x2a\x67\xb1\xee\x7f\xfe\x93\xf8\x97\x15\xac\xcf\xf7\x45\xf4\x0d\ +\x78\xf5\xee\x90\xc3\xe0\x2e\x0b\x77\x7c\x02\x1f\x16\xec\x0d\x5a\ +\xec\xc7\xa0\xfe\x50\x31\xf6\xfa\xba\xa8\xe6\x30\x56\xb2\xe2\x4b\ +\x04\x0f\x55\x56\x5a\x3d\x32\xe8\xc4\x91\x26\x79\x49\x13\xee\x9e\ +\xf9\x2e\xae\xb4\x3e\x53\x46\x9a\xef\x42\x0f\x7c\xdc\x84\x11\x37\ +\x57\x0f\xc7\xd2\x41\xee\x3b\xec\xb9\x09\xa3\x45\x07\xb2\x6e\xd0\ +\x28\x3d\x88\xa9\x5c\x4d\xcd\xfa\x40\x15\x82\x16\x57\x93\x25\x56\ +\x8f\xfd\x67\x14\xce\x9b\x74\x3b\x5d\xdc\x98\x09\x75\xf6\x95\x2c\ +\xaf\xff\x16\x7d\xe1\xd6\x23\x43\xc8\x8c\x6a\xc4\xf6\x55\x87\xee\ +\xaf\x7f\x9d\x47\xef\xdc\xa0\xfc\xca\x21\x0b\x5d\xd1\x19\xe9\x0b\ +\x1f\xbf\x4f\xb1\x9e\x61\xf3\xde\x5d\x8e\xc7\x1e\x61\x7e\x19\x3f\ +\x7c\x88\x65\xbe\xc4\x0f\x1b\x23\xde\x90\x2e\xba\x39\x2c\x7c\x5d\ +\xe4\x32\x7d\xac\xf5\xab\x97\xce\xc4\x46\x3f\x22\xdf\x28\xcf\x1c\ +\x2f\x5d\xeb\xea\xe4\x23\xc9\x44\x12\x4b\xda\xd5\x26\xd9\xbf\x06\ +\x8c\x0f\x26\xf0\xfd\x10\x19\x5d\x20\x98\x1b\xf4\x90\x92\xa2\xa9\ +\x35\x79\xba\x74\x45\xae\x85\x55\xf4\x29\x7a\x2e\x7d\x16\x89\x68\ +\x09\x4d\xbc\xba\xb1\x81\xb3\x50\xa6\x5c\x74\x58\xdd\x00\xbf\x2f\ +\xc2\x2b\x2b\xdd\x51\x9c\x00\xf4\x4a\x2c\x6b\xea\xf8\xf9\x0e\xd6\ +\xda\x2b\xec\x5a\x9a\x53\x70\x1d\xd6\xfd\xa7\xec\xaf\x6f\xb1\xfb\ +\xd6\x9f\x53\xcf\x2e\xaa\x4b\x88\x8c\x0e\xd5\xca\xc2\xdf\x0a\x95\ +\x19\x8b\x39\x7d\x5f\xd7\xc9\xc2\xa8\x22\x21\x23\xa4\x0b\x2d\xed\ +\x47\x96\x5e\x09\xaa\xe2\x3d\xfa\xeb\xe9\x13\xb6\x4c\xa4\x2e\x9b\ +\xcb\x44\xf4\x00\x33\xec\x01\x75\xc2\x4e\x87\xe5\x66\x4d\x65\xb9\ +\xd5\xea\x0d\x5e\xb0\xa6\x39\xc2\xdb\x8f\x42\x0a\xbd\x26\xbb\xad\ +\x53\x7a\x4e\x51\x7d\xae\x6e\xc0\x0d\xfd\xa9\x27\xc2\x1a\xd8\x6a\ +\xa1\xc8\xdf\xa4\x8f\xba\x2d\x58\x25\x7a\xc0\x5b\x3b\x27\x98\x4f\ +\x3e\x24\x72\x2b\x2c\x55\x44\x7f\xb2\xf5\x7b\x5f\x64\xf3\xde\x06\ +\x5f\x78\x61\x93\x93\x70\x0d\xcb\x14\x44\xf3\xf0\xfd\xf3\x99\x2b\ +\xca\x75\x41\xa3\x79\x72\x4b\x5e\xb9\xe8\xcd\x46\x36\x0b\x56\x89\ +\x11\xce\xcc\xfe\x05\xab\x94\x18\xb2\xa3\x37\x57\xd4\xf7\xd5\xff\ +\xa6\x0c\x9b\x97\xca\x62\xd0\x7a\x37\x80\x9d\xfd\x3e\x2f\x5e\x5e\ +\xd0\xb8\xb5\xc5\x62\x63\x13\xd8\x4b\xba\xd9\xfc\x23\x05\xe4\xbe\ +\x51\x50\x19\x8b\x1e\x57\x71\xe3\xca\x0a\xbd\xc8\xc3\x2a\x7a\xf8\ +\x72\x1c\xb2\x4d\x0e\x8a\x5a\x32\x45\x25\xbe\xd4\x55\x2a\xac\x02\ +\x36\x01\x1e\x19\xc2\x41\x48\x18\xe7\x57\xc8\x3c\x8b\x28\x06\xfa\ +\xf2\xc2\x57\xc8\x58\x1f\xb2\xf3\xb4\x09\x5d\xe1\x10\x97\xda\x78\ +\x52\xb1\xe8\x10\x51\x37\xab\x74\x88\x34\x46\xf6\x67\xee\xa7\xa5\ +\x86\xce\x64\xf2\x80\x4b\xb6\x4d\xb0\xb5\xe6\x52\x4b\xeb\x69\xdd\ +\x90\x93\x8f\x7b\x56\x19\x7c\x97\xaa\xef\x08\x30\x03\x8b\x66\x85\ +\x16\x90\xcb\xad\xd1\x73\x44\x7e\x44\xed\x4e\x43\x25\xb9\xef\xfa\ +\x03\xc2\xa3\x0d\xfa\x85\x77\x39\xd9\x1b\x27\xb4\xa8\x34\xe0\x74\ +\x06\x4e\xe8\xd3\xd8\xaf\x9d\xce\x8e\x2b\x55\xb3\x4c\x0c\x8b\x7a\ +\xd7\xa4\x64\xe6\xa0\x5e\xa7\xb9\x04\x9f\x7a\xe5\x05\x3e\xf1\xa9\ +\x17\x09\xef\x3c\xc3\xdc\x3b\xe5\x1b\xe7\x13\x16\x6c\x9f\xab\x27\ +\x87\xbc\xf1\xfe\x5f\x31\x39\x3f\x52\x75\xea\xfa\x15\x4e\xff\x3e\ +\xf2\x6f\xa6\x01\xac\xa2\x9a\xbd\x59\x90\x0e\x7d\x97\x51\xdb\x21\ +\xaa\x18\x62\xa1\xa7\x5e\x5b\x26\xa2\xe7\x94\x67\xe4\x42\x9a\xcd\ +\xe5\xdf\xc9\x84\x2d\x4a\xd5\xc6\x34\x5a\xd9\x11\x39\x14\xa3\xa3\ +\x0e\xd1\xfa\x39\xb9\x8d\x06\x37\x3e\x56\xe5\x3b\x1f\xc4\x55\x1c\ +\xbe\xf0\x50\xa8\x4e\x9b\x8e\xc8\x58\x3c\x1e\x5a\xdc\x02\xaa\x46\ +\xc8\x80\x3e\x90\x4c\x1d\xb0\x3c\xc6\xe4\x0b\x21\xa3\xa1\x39\xb3\ +\x55\x65\x4b\xe4\xe2\x39\x83\x7a\xf5\xab\x07\x95\x05\xb2\xb4\xa8\ +\x34\x96\xf9\xdb\x1b\x77\xf9\xb3\x3f\x3a\x10\xe1\x51\x3f\x62\xc9\ +\xb2\x55\x75\x82\x14\xfb\x75\xb3\x4a\x27\x8e\xf5\xcb\xe8\x92\x9e\ +\xb4\xa2\x07\x23\x54\x07\xf6\x5e\x88\x15\x9f\xb1\x82\x55\x52\x5e\ +\x06\xc9\x76\x09\x66\xd1\xa4\x83\x7c\x6f\xda\x9f\x2c\x13\x78\x86\ +\x18\x0a\xcc\xca\xa0\x89\x43\xca\x3d\xab\x4c\x50\x6f\xb0\x12\x37\ +\xaa\xde\xf5\x07\x2c\x9d\xd8\x7c\xe7\xe4\x31\x7d\xa7\x41\xcf\xe9\ +\xcf\x8d\x06\x8e\xc7\x27\xe4\x58\x9b\x0b\x64\xfd\x52\xde\x2d\x8a\ +\xc8\x9b\xeb\x4c\xc8\x02\xae\x29\x82\x2b\x5b\xa6\x41\xf1\xbe\x17\ +\x03\x58\x5c\x52\x9f\x9e\x4f\x78\xfd\xf7\xdf\x10\x9d\x7f\x34\xf7\ +\x98\xee\x49\xd1\x43\xe9\xba\x27\x64\x9e\x4e\x4f\x3f\x97\x5e\xf0\ +\x51\x3c\xd4\xe5\x42\x73\x02\x0c\xf5\x63\x74\x8d\x7c\x49\x2f\x08\ +\x19\xe4\xd0\x23\x7f\xd4\xc5\x39\xea\x55\x2e\x31\x96\x97\xb1\xa9\ +\xf0\xc9\xdb\x9f\xe1\x83\xca\x43\xe1\x75\xf1\x87\x98\x75\x5b\x25\ +\xc8\xcb\x71\x63\x2a\xd0\x61\x87\xf8\x03\x8b\xaa\x11\xd2\x1b\x78\ +\x58\x45\x5b\x34\x14\xb4\xc9\x61\x0e\x23\x6c\x02\xcc\x61\x3c\x93\ +\x21\xde\xe6\x0b\x61\xfc\x21\xde\x14\xb8\x6a\x2b\x9e\xb7\xb1\xf1\ +\xdb\x67\xd8\x35\x9f\x9f\xfa\x99\x2f\x51\x5f\x7c\x85\xa3\xab\x2b\ +\x2e\x02\x4f\x95\x85\x4b\x4f\x85\x9e\xef\x2a\x19\x44\x4f\xc8\x49\ +\x07\x19\x74\x9d\xab\x07\x44\xae\xab\x8f\xd3\x25\x84\xae\x9d\x75\ +\x00\x5b\x55\x53\x49\x89\x79\x9a\xb0\x67\x95\xa9\x96\x07\xdc\x6b\ +\x8a\xa6\x27\x17\x6b\x1e\x4b\x27\x36\x8f\xfd\x67\xa2\x61\x75\x47\ +\x00\xd8\x0c\x7b\x33\x97\xe1\x5c\x6e\x6d\xae\xaf\x3b\xed\x03\xd7\ +\x7f\x8f\xdc\x2f\xdb\xf7\x69\x05\x70\xf6\xa4\xc1\xd7\x77\xf6\xf8\ +\xf3\x3f\x3d\xe4\x4f\x7f\x79\x9b\x3f\xfc\xfd\xaf\xb1\xb3\xbb\xaf\ +\x0a\x5f\xe7\x75\x2c\x92\xbf\x4d\x97\x4e\xba\x36\x9f\xe7\xb9\x19\ +\xfa\xae\xea\xe1\x5c\xb0\x4a\x18\xfd\x88\x65\xa6\xc6\x53\x54\x31\ +\xbe\xa7\xec\x3e\xdd\x08\xd4\x8f\xa5\xde\x6d\xbf\x63\x88\x3e\x75\ +\x74\x42\x0e\x23\x31\xfd\xaa\x7d\xb0\xc3\x78\x78\x45\x34\x39\xa6\ +\x7a\x73\x43\x94\x2a\xf5\x0c\xfa\xc3\x35\xd5\xa4\xb0\xef\x14\x68\ +\x85\x1e\x6e\x5c\xde\x24\x3d\x13\x03\x3b\xc4\x88\xfd\x76\x71\x65\ +\x87\x97\x64\x57\x5d\x64\x0f\x0b\x78\xaa\xf1\xc6\x75\x40\x06\x8f\ +\x0c\xfe\xf1\x29\x9b\xf7\xef\xf3\x77\xff\xa3\x2f\xb2\x79\xf3\x87\ +\x45\x3a\x60\xa7\x4f\xa7\xd3\xa7\x51\x31\x67\xaa\x14\xd2\xae\x35\ +\xc9\xc6\x3a\xa8\x25\xf8\xfc\xa2\x37\xd7\xeb\x20\x73\x85\x75\xb6\ +\x9d\x77\x40\x75\x40\xeb\xde\x82\x74\xd8\xbb\xea\x3b\x54\xcb\x03\ +\x6a\xf5\x1a\xc3\xe5\x16\x17\x6b\x9e\x0a\x27\x9f\x3d\x69\x24\x72\ +\x7f\x43\xb3\x3a\xa3\x27\xa5\x6e\xd7\x7f\x83\xee\x19\xf0\x8b\xc2\ +\xaf\x2b\xaf\x4c\x52\xfb\x27\x4a\x8d\x3a\x7d\xfe\xe4\x37\xff\x8c\ +\xd7\x5e\x7b\x97\x6f\xfe\xe5\x43\x26\xad\x11\xcd\x5a\x93\x4c\xa3\ +\x96\x30\x98\x66\x02\x42\x73\xb4\x70\x9a\x69\xd3\xc7\xd0\xce\x64\ +\xd4\x6b\x51\xc5\x48\x64\x9b\x49\x80\x7b\x41\xa0\xfe\xeb\xbf\x51\ +\xff\xdb\xf3\x58\x58\x5d\x2d\xc2\x1e\xf5\xc8\x20\xca\x54\xb8\x0c\ +\xfb\x42\x1e\xc4\x6d\x78\x33\x83\x0c\x4e\x2f\x69\x34\xcb\x86\x3b\ +\x6a\x94\xc2\x9c\x61\xb0\xfe\xc0\x22\xa2\x05\xf4\xa7\x7e\x62\xfd\ +\x66\x93\xc3\x63\xac\x6d\x03\xf5\x8a\xbe\xd7\x8c\x21\xd1\xee\xe0\ +\x84\x7d\x7e\xe0\x2b\x3f\xcc\x7f\xf6\xdf\xff\x34\x5f\xfe\x47\xff\ +\x82\x8d\x57\xff\x21\xed\x51\x0f\x6b\x90\x57\x6d\xa5\x9e\x5b\xb3\ +\x15\x03\x59\x4f\x85\xd4\x99\x38\x11\x42\xd6\xc0\x9b\x8e\xc8\xa5\ +\xc1\xec\x05\xc1\x5c\xd9\x31\xb3\x30\xea\x26\xb5\x7a\x8d\xe2\xaa\ +\xc7\x0b\xd6\x4d\xda\x87\x2d\xfc\xed\x02\x1f\xb4\x3a\x84\xfe\x19\ +\xe7\x9d\x48\x81\xc4\x0c\x7b\xea\x04\xea\x27\x54\x46\xc8\xa2\x4c\ +\x25\xb9\xc8\xa4\x8f\x36\x9e\x24\xaa\x03\x41\x56\x54\xeb\x9f\xa3\ +\xb2\xcf\xcc\x31\x9d\x5a\x98\x58\xe0\xba\x54\x4a\xbf\x4f\x6f\x18\ +\x93\xf0\xfa\xa4\xae\x46\x33\xe9\xb7\xfd\x28\xc1\xbe\x12\xe0\xe9\ +\xed\xf3\x5c\x74\xf2\xb1\x5e\x64\xaa\x8f\x06\xce\xe5\xd6\xa6\x87\ +\xba\x50\x26\x73\xcb\xa4\xb1\x24\xbe\xcb\xad\xaa\x43\x76\xf9\x81\ +\xea\xdb\xa7\x7c\xce\x41\x57\xb5\x6a\x98\xbd\x55\x24\x13\xdb\x0a\ +\x98\x1e\x19\x60\xda\x0d\x5e\x00\xd8\x4e\x30\xee\x3c\x36\xb6\xc9\ +\xe1\xd9\x25\xec\xf6\x19\xe5\x41\xc8\xe6\xfd\xfb\x7c\xf9\x67\x5e\ +\xe4\x9f\xff\xcb\x1f\xe3\xe5\xcf\xfd\x24\x9d\x4e\x5f\xc9\x0b\x29\ +\x27\xae\x3a\x1d\xd5\xb3\x21\x68\x77\x71\x2e\x5b\x04\xed\x6e\xe2\ +\xc4\xea\x27\xbb\x69\x46\x89\xcb\xa5\x7e\x72\xd2\x60\xd4\x41\xdf\ +\x1e\xf5\x68\x68\x03\xaf\xf5\x13\x19\x76\x3a\x0a\x84\x4d\x33\x4a\ +\x00\xf8\xb1\xff\x8c\xca\xf0\x06\x67\x9d\x36\x51\x6f\x9a\xe4\x22\ +\x59\x47\x67\x62\x9d\x89\xa4\x91\xaa\x03\x53\xff\xbe\xf3\x6a\xd6\ +\x9e\x97\xa4\xaf\x2f\x6c\x3d\x99\x67\x1e\xdb\xa6\x0d\xdb\xb4\x4f\ +\x5d\x2e\x3a\xf9\xf7\x24\xbb\xea\xf2\xc1\x48\xcd\xe7\xf6\x82\x20\ +\x01\x60\x3d\xb2\x9a\x06\xb2\xdc\x66\xc2\x56\x02\xc8\xba\xcd\xd0\ +\x0a\x45\xbd\x5d\x67\xe8\x60\x3a\x19\x36\x1b\x9b\xd4\x3f\xb6\x7e\ +\xed\xef\xaf\x65\x6a\x2c\x74\xfa\x8c\x2e\xc7\xca\xc5\x66\x15\x7d\ +\x15\xf0\x50\x33\x3b\x04\x1c\x05\xeb\xba\x03\x83\x52\x31\x96\x11\ +\xde\x50\x03\xab\x27\x0c\x3c\x6f\xa8\xc0\xec\x69\xd3\x73\x04\x73\ +\x67\x70\x46\x2d\x9c\xab\xef\xb2\x10\xc2\xda\xcd\x02\x3f\xf5\x33\ +\x5f\x62\xe3\xd5\x7f\x48\xb6\xef\xb3\x7b\xf6\x8c\xa3\xab\x2b\x8e\ +\xae\xae\xf0\x82\x80\xd2\xfa\x02\x77\xee\xbf\xc4\xbd\xef\xfb\x24\ +\xeb\x77\x37\x71\xfb\x22\x09\xbc\xdf\x9e\xa8\xd2\x22\x79\x70\x64\ +\xbe\xb0\xae\x8b\xd3\x72\x61\x1e\x2b\xd8\x99\x4c\xe2\x79\x9d\x89\ +\xc3\x38\x09\x5e\x3e\x27\xcb\x87\x54\x75\x75\xa7\x1d\xfb\x82\x27\ +\x73\x3d\x1e\x73\xfd\xd5\x73\xca\xfd\xf5\xe8\xa0\x7e\xa5\xf9\x5e\ +\x92\xf8\xf5\x54\xcd\x79\x85\x04\x69\x37\xe2\x75\x36\x42\x3a\xfa\ +\x79\xdd\x4d\x67\x63\xa3\x1f\xcd\x00\xf8\xba\x9b\xfc\xfd\x32\x17\ +\x5c\x8f\xe2\x49\xe9\x98\xcb\xad\xd1\xed\x74\x39\x88\x26\x71\xbd\ +\xdd\x25\xad\xb0\xcb\x6a\x7d\xda\x11\x68\x5e\x4f\x8b\xc3\x28\xcb\ +\xbd\xdb\x59\x0d\xbc\xe2\xd8\x55\x8d\x30\xce\x01\xf7\xda\x60\x17\ +\x94\x7c\x28\x15\x03\xdc\xc1\x90\x52\xb1\x00\xb6\x94\x14\x36\xee\ +\x60\x88\x59\x1c\x63\xdb\x0d\x6c\xaf\x0d\x76\x43\xe4\x73\xe2\x29\ +\x30\xdb\x71\x02\x87\x07\x74\xdb\x5d\x6c\xc6\xbc\xd0\x28\xf1\xcf\ +\xff\xe5\x8f\xf1\xdd\x77\x6f\x71\xb5\x67\xe1\xf0\x88\x9b\x96\x85\ +\xb5\xbe\xc9\x67\x3f\xb1\x8e\x99\x29\x31\xa0\x8a\x37\xec\xf0\xe4\ +\xc3\x6d\xf6\xf7\xb6\xd9\x7b\xfc\x01\xbb\x3b\x07\xb4\x2f\x5b\x84\ +\x03\x71\x50\x6f\x7d\xf2\x8e\xb8\xbc\x1e\x5d\x25\x4f\x60\x2f\x19\ +\xd8\x90\xec\x5b\x69\x64\x67\x2e\xb9\x72\xff\x74\x35\x87\x9c\x66\ +\x34\x5c\x6e\x51\x19\xde\xa0\x5f\x38\x56\x35\x7d\x22\x78\x33\x99\ +\x3d\x61\xd7\xe4\x6c\xe8\x41\x81\x04\xd8\x52\xa9\xa1\xba\x57\x26\ +\xed\x39\x98\xe7\xf9\x98\x97\x0b\x3d\xcf\x38\xd5\x17\xb8\xf4\x5f\ +\x17\x72\x6b\x33\x57\x8d\x79\x0c\x9b\x96\x14\xcf\x33\xee\xae\x5b\ +\x78\xfa\x77\xd7\x93\xe4\xeb\x55\xa0\x9c\x85\x4e\xc8\xce\xf6\x19\ +\xfc\x28\x84\x3d\xb0\xcc\x88\xe5\xf6\xd4\xc5\x9b\x2d\x7c\x1c\xfc\ +\xa3\x69\x92\x7c\xec\x21\x79\xb2\x3f\x41\x14\x8f\x57\xa8\x1a\x2e\ +\x66\xad\xa1\x65\xb1\xd9\x0d\x3c\xc6\x84\x83\x21\xa5\x62\x14\x33\ +\x71\x14\x3f\x17\x0a\x30\x7b\x6d\x4a\xc5\x06\x78\x6d\x3c\x1b\xc2\ +\xc8\xa6\xa4\x71\xb0\x8d\x87\x3b\x30\xa0\x88\x02\xbd\x40\xf3\x90\ +\xb6\x9d\x61\xed\x66\x85\xd5\xfa\x97\xe1\x8b\x7d\x9a\x93\x2f\xd1\ +\x0f\xce\xc0\x8e\x2d\xea\xa1\x41\x35\x9f\x63\x62\x98\x6c\xae\x7e\ +\x19\x7e\xe4\xcb\x9c\x76\xae\x28\x5c\x79\x9c\x5e\x5e\x71\x38\x14\ +\xb5\x56\x9b\xeb\x65\x7e\xe9\x17\xdf\xe7\xe8\xe9\x2f\x51\x5e\x6c\ +\x52\xe8\x97\x12\x8c\xa3\x4b\x0a\x3b\x93\xc1\xef\x85\xea\x44\xa5\ +\xfd\xc4\x89\xbc\x64\x50\x32\xa2\x70\xde\xa4\xbf\x3c\x05\xf0\xe1\ +\xd1\x64\xd6\xf7\x0a\xd3\x54\xd0\x54\xb4\x4a\x82\x37\x51\xb0\x3a\ +\x27\x62\x26\xdf\x2b\x7d\xbb\xe9\xab\xc8\x3c\x00\x4f\xa5\x85\x3d\ +\x03\xd8\xeb\x8c\xbb\xa1\xef\xce\x05\xf0\xf3\x58\x38\x0d\x64\xf9\ +\xf8\xa3\xde\x3b\x6f\x11\x59\x55\x93\x9a\x53\x9b\xe6\x5b\x68\x79\ +\x14\x17\xdd\x27\x74\xbd\x4d\x8a\x1b\x4d\xce\xdb\x65\x95\xcd\x76\ +\xf8\x9d\xdf\x84\x7a\x45\x25\x01\xb5\x3a\x43\xa2\xf1\x25\x3b\x3b\ +\x5f\xe3\xac\x73\x9f\xd0\x5e\x65\x3d\x3a\x22\xb8\xb8\x43\x36\xb3\ +\x22\x98\x38\xe7\x0d\x71\x23\x62\xe0\x66\x00\xe1\x56\x93\xa0\x06\ +\x31\x39\xc9\x64\x0c\x76\x89\x9a\x17\x32\x2e\x16\x14\x5b\x0b\xd0\ +\xa2\xee\xd7\xbc\x90\x76\x24\x24\x89\x1b\x89\xa1\x20\xfd\xf6\x1e\ +\x50\xc6\x26\x47\xbf\xd0\x87\xe1\x90\xf6\x50\x04\x50\xcc\xa2\x09\ +\x23\xd1\x7f\x78\xc4\x3e\xe5\x7c\x93\xb5\x9b\x05\xa2\x46\x8e\xca\ +\x46\x86\xef\x2f\x2c\xd1\x8b\x2a\x74\xfc\x08\x78\x7f\x06\x54\x32\ +\x32\x96\x0e\x47\x5b\x55\x13\xbb\x97\xd4\x89\xfa\x89\x58\x26\x02\ +\x33\xa2\xa6\x55\x66\x65\xab\x05\x5a\xa7\x36\xa1\x53\xa5\xef\x1f\ +\xe2\x17\x0d\xf5\xb9\x7a\x16\x5a\x9a\x19\x25\xcb\xce\x1b\x1b\x76\ +\x2d\x60\x32\x15\xfc\x62\x7f\xc6\x68\xbd\x8e\x85\x75\x69\x31\x6f\ +\xdf\xeb\xd8\x3c\x0d\x60\xb9\xbd\x4e\x26\xa4\xd9\x57\x02\x7b\x58\ +\x71\x3f\x52\xfa\xa4\x33\xe2\x7c\x3c\x55\x3c\xaa\x1b\xcf\x27\x4e\ +\x84\x73\x1a\xc1\x4b\x50\x2a\xd6\xb9\x5d\x0b\xf9\xa3\x85\xe9\x24\ +\x57\xd5\x7d\xde\x11\x81\xb3\x13\x27\x62\x0b\x18\x74\x02\xe8\x3c\ +\xe3\xcf\xc7\x11\x6b\xb9\x7d\x8a\xf5\xb8\x5f\x45\x5b\x03\xb0\x60\ +\xde\x08\xbc\x36\x66\xd1\x14\xec\x8a\x18\xc2\x68\x93\xc3\xf6\x5c\ +\xc6\x76\x21\x96\x1d\x05\xc5\xd6\x60\x83\xd7\x26\x1c\x84\x8c\xed\ +\x82\x00\xf0\x60\x48\xc3\x40\x19\x89\xe0\xe0\xd1\xa2\xdf\x3e\xe6\ +\x6a\x60\x88\xbf\xa5\x0d\x77\xb4\x3c\x0f\xbf\xdf\xa7\x73\xb9\x4f\ +\xfb\x60\x97\x5e\xfb\x12\x77\x30\xe4\xe0\xa2\x45\xd6\xe8\xd3\xbe\ +\x10\x6e\x99\x46\xbe\x4a\xb6\xef\x27\x12\x80\xfc\x5e\x48\xa6\x51\ +\x4b\xe8\xbd\xb4\x81\x93\x28\x1f\xf3\x1d\xe1\x89\x88\x4b\x87\xa4\ +\x16\x96\xed\x00\x3a\x7e\x8f\x80\x5a\xc2\x80\x92\x4c\x28\x8b\x35\ +\x96\x90\x1f\x66\x00\x00\x19\x9b\x49\x44\x41\x54\xe7\xb9\x08\xe7\ +\x25\xc4\x3c\x4f\xeb\x5e\x67\x20\x3d\xef\x52\x7d\x1d\xeb\x5d\x07\ +\xfc\x8f\x62\xe0\xb4\x21\xa7\x3f\x27\xb7\x12\xd8\xba\xee\x7d\xde\ +\xad\xea\x3b\x33\xae\x38\x55\x84\xea\x14\x55\x4f\x89\xce\xd0\x81\ +\x81\x60\x1a\x99\xcd\xe6\x3a\x13\x5c\x6b\x3d\x31\x7b\x6f\xd2\x1b\ +\xb2\xbb\x1f\xcc\x0c\x14\x1a\x74\x82\x69\x8d\x1d\xde\x90\x30\xb2\ +\x63\xe0\xc6\xa0\x8c\x41\xe6\x61\x12\x46\x36\x0c\x86\x94\x8a\x0d\ +\xdc\x81\xec\x86\x28\xb6\x42\x82\x88\xd7\x4a\x5e\x1b\x77\x20\x58\ +\x19\x40\x2e\x10\x77\x50\xc4\x2c\x9a\x84\x83\x90\x6c\xd1\x66\x3c\ +\x20\x66\xf9\x82\x08\x67\x07\x11\x54\x6c\xcc\x81\x18\x76\x03\x65\ +\x6c\xcf\x8d\x47\x90\x4d\x6f\xfb\x95\x09\x81\x66\xad\xeb\xae\x23\ +\xe9\xd9\x98\x77\xc2\x66\x0c\xbf\x38\x72\xd4\xac\xd9\x0c\x97\x5b\ +\xb4\x4e\x81\xd3\xe9\xd8\x58\x59\xf9\xa0\x97\xb9\x8b\xf1\x60\x36\ +\xa8\xd6\xae\x3c\xb7\x4e\xf0\x3a\x69\x90\x0e\x76\xcc\x2b\xa3\x9a\ +\xc7\xa6\x32\xd7\xa1\xea\x3b\x60\x25\x93\x73\x9e\xc7\xb8\xd7\x45\ +\xe6\xa4\x67\xc2\xae\x64\x66\xa4\x83\x64\xdf\x8f\x5a\x44\xd7\xdd\ +\xf4\x48\x68\x42\x1b\xc7\x00\x6f\x75\xb3\x6c\x1f\xef\xb2\x79\x79\ +\x9f\x71\xe3\x52\xb5\x42\x00\xa8\x2f\xbe\x42\xc9\x3f\xc2\x25\x1e\ +\x96\x33\xc8\x89\xb9\x1e\xbb\x01\xd9\xd6\x9b\xec\xda\xa2\x11\xe1\ +\x51\x3c\x13\xda\x35\xc7\x98\x25\xc3\xc3\xb3\x93\x07\x52\x32\xa4\ +\x1b\xd9\x53\x76\x8e\x3d\x18\xf2\x35\x09\x54\x8f\x0c\x0d\x03\xdc\ +\xc1\x50\x0d\x6c\x74\x07\x43\x4a\x86\x17\x33\xb2\x91\x60\x64\xc9\ +\xee\xf2\x7e\xc3\x40\xcc\xc9\x1b\x08\x17\x56\x38\x28\xe2\xf7\xfb\ +\x49\x00\x7b\x31\xe8\x1e\x1d\x26\x00\x3c\x4f\x1b\xea\x27\x49\xfa\ +\x88\xf5\xe7\x97\xeb\xa2\x7f\xb0\x64\xe1\xc1\xa9\xad\x98\xb8\x1d\ +\x1a\x89\x80\x86\x3e\x3a\x37\xca\x54\x54\x85\x8a\x2c\xed\x7f\x5e\ +\x33\xc2\xeb\x4e\xb6\xfe\x9e\x66\x2f\x98\x49\x50\xba\xee\xf3\xf4\ +\xae\x45\x32\x8f\x61\xde\x71\x78\x1e\x80\x13\xf1\x80\x4c\x86\xe2\ +\xc0\x9c\x6b\xd4\x49\x00\xe7\x1b\xe5\x6b\x3d\x10\xcf\x5b\xb4\x55\ +\xdf\x99\xd9\x47\x36\x9f\x39\xc7\x80\x0a\xdc\xc8\xdc\xe2\xa2\xfb\ +\x84\xbd\xfd\x0e\xbd\x6e\x3c\x7f\x7a\xe5\x65\x2e\x46\x0f\xd5\xb0\ +\xc6\x86\x99\x5c\x48\xa6\x3d\xed\xa4\xe9\xec\x1e\x72\x7a\xf2\x50\ +\x04\x3b\xdc\xc8\xc6\xf6\xc4\x0f\x95\xdb\x34\x03\xba\x03\x43\x4d\ +\x13\x75\x23\x7b\xca\xbe\x31\xa0\xc7\x78\x94\x8a\x51\xac\x83\x05\ +\xa3\x7b\x76\x09\x3c\xf1\xe5\xc6\x76\x21\x01\x7c\x01\x74\x61\x40\ +\xb6\x23\x68\x18\xc9\xc5\x63\x66\x4a\x94\x46\xf1\xb0\x14\x3f\xcb\ +\x85\x35\x4d\xb6\xb9\x6a\xf7\xa7\x8d\xb2\xb5\x88\x5e\xfa\xe0\xea\ +\x4e\xfa\x99\x83\x5f\x11\xff\x5b\xa1\x47\x71\x75\xda\x1b\xc2\xec\ +\x75\x12\x1d\x20\x65\xc8\x54\xef\x9c\x23\x9d\xf7\x69\x00\xeb\x3e\ +\xdc\xeb\xf2\x79\xd3\xcf\x5d\x35\xea\xcf\xcd\x6b\xd0\xfd\xbb\xe9\ +\x08\x9d\x04\xf3\x3c\x59\x91\xce\xd8\xfb\x28\xe0\x49\x00\x4b\xf0\ +\x0e\x8a\x21\x51\xc5\x60\xd4\x76\xe6\x12\xc4\xbc\x85\xa1\x7f\x87\ +\x73\x66\xbd\x1a\x7a\xc2\x14\x7d\x31\xf9\xaa\xda\x5f\xa4\x13\x05\ +\xf8\x57\x1d\x98\x1c\xe2\xf0\x88\xa5\xfc\x4b\x94\xfc\xa3\x78\xe4\ +\x6e\x35\x96\x7b\x43\xd5\xe3\x2f\x6b\xdf\x10\xf2\xe3\xc5\x35\xf2\ +\xcd\x57\x66\x99\x58\x6e\x15\xdb\x1a\x1e\x66\xd1\x14\xa0\x8b\xc1\ +\x39\x05\x60\x41\x81\xdd\x8d\x6c\xc1\xb0\xb1\x96\x0e\x07\x21\x36\ +\x39\xf5\x1e\x25\x41\xe4\x56\xbe\x2f\x66\xe5\x31\xde\xdc\xc5\x03\ +\xe0\xe6\x73\x54\x02\x97\xd1\xbe\x33\x17\x30\xb2\x7a\xe3\x3a\x37\ +\x93\xbc\x2d\x13\xcd\xb4\xa2\x6a\x9a\xb6\xf2\x44\xb4\x3a\x71\xc5\ +\x45\x2f\xbc\x36\x39\x7e\x12\x57\x15\xfb\x45\xef\xb9\x1d\x23\x75\ +\xc0\xe9\x06\x67\xda\xaf\x7d\x9d\x7b\x6d\x1e\xe8\x54\x37\xcf\x54\ +\x07\xcf\xe7\xb1\xb8\xd1\x8f\x54\x15\x87\x7e\x2c\xe6\x49\x85\x74\ +\xb8\x59\x6a\xe1\x51\xdb\xf9\x6b\xc9\xa5\xe7\x2d\x98\x8e\x21\xf2\ +\x33\x64\x14\xee\xbc\xd1\x20\xec\xb6\xe9\x76\x32\xaa\xcc\x2d\x51\ +\xd9\x11\xdf\x5a\x61\x41\xb1\xf0\x02\xc7\x0a\xc8\xf2\x78\x98\xe2\ +\x12\x2e\xf4\x6f\x9a\x89\xa5\x9c\xf0\xec\x52\x82\x89\xcd\xa2\xa9\ +\x58\x56\x86\xa5\x25\xa8\xed\xd4\x84\x4a\x7b\xce\xc4\x4a\x7d\x91\ +\xc8\xbf\xa3\xd8\x38\x66\x60\x37\x9f\x53\xf7\x3d\xc6\xec\xd6\x44\ +\xe6\xff\x42\xa3\x32\xc3\x70\x69\x97\xd9\xbc\xa0\x87\x3c\x99\xb5\ +\x7a\x4d\x3b\x38\x9e\x92\x11\x19\xba\x09\x43\x4e\xea\xe1\x79\x7d\ +\x81\xf5\x46\x83\xf3\x2a\x52\x94\xd7\x42\x0b\x80\xa4\x81\x36\xa9\ +\x58\xcf\xf5\x0f\xa7\x75\x6c\xba\xb4\xe8\xa3\x64\x83\xcc\x87\x98\ +\xb7\x28\x74\x57\x5a\x7a\x2b\xaf\x5e\x12\xcc\xd7\xf9\x8a\xd3\xdf\ +\xf3\xa3\x8c\xd2\xb9\x8d\xcf\x8f\x1e\xd3\x8b\xe2\xcc\x36\xd9\xf9\ +\xc0\xdf\xa1\x53\x4e\x8e\x2e\x6b\x9a\xc3\x04\x0b\x37\xf2\x3e\xed\ +\x91\xc5\x02\xc7\x04\xf5\x86\x90\x13\x20\xc6\x79\xa5\xb5\x31\xa0\ +\x98\x55\xc8\x88\x82\x02\xae\x7c\x2c\xa5\x86\x64\x59\xe1\x53\x2e\ +\xcc\xb0\xaf\xee\x89\x50\xab\x2d\xd6\xd0\xd2\x08\xd4\x6f\xe9\xf6\ +\x5a\xd6\xd9\x1b\x62\xbf\x51\x4f\x85\x6e\xf5\x26\x29\xcf\x0b\xdf\ +\xce\x63\xe1\x04\x43\x74\xba\x2a\xa7\x61\xe8\xbb\xc9\x71\xb7\x1a\ +\xf3\xcb\x06\x7e\xb2\x86\xec\xa3\x52\x2e\xe7\x45\x14\x25\xb8\xf5\ +\xa6\xdd\xd7\xe5\xe3\xea\xb5\x85\xf3\xa2\x92\x69\x00\xeb\x3a\xf9\ +\xa3\x02\x13\x12\x9c\x69\x20\xeb\x00\x46\x15\x0b\x7c\xf4\xe7\xc9\ +\x4c\xb8\xf4\x3e\x7e\xd1\x53\x19\x6d\xd9\xbe\xaf\x16\xa1\x7b\x76\ +\xc4\xf1\xd0\xc2\xe3\x0a\xa7\x7d\x39\x53\xa6\x24\x01\x6c\x96\x7b\ +\x6a\x98\xfd\x02\xc7\x84\xf9\x65\xda\x23\x8b\x46\xde\x27\xcc\x2f\ +\x4f\x3b\xc5\x9b\x45\x13\x33\x33\xdf\xb8\xd3\x5d\x61\x52\x07\xeb\ +\xc0\x35\x8b\xa6\x02\xa3\xbc\xaf\x22\x7e\x29\xb6\xd5\xc1\x3b\x0f\ +\xc8\x92\x81\xa5\x2e\x96\xf7\xfd\x8c\x88\xce\x5c\x8c\x1e\x62\x67\ +\x32\x89\xde\x63\x7a\xd2\xcb\x75\x01\x83\x56\x35\x33\xc3\xc2\xea\ +\xb5\xce\x34\x2f\x43\x26\xec\xa4\xdb\x94\xca\x7e\x65\x52\x0f\xeb\ +\x35\x72\xe9\x44\xfe\x79\x57\x89\x79\x85\xab\xf3\xea\x04\xe7\xb1\ +\x9d\x9e\x4e\xfa\xbc\x80\x48\xc1\x2a\x71\x8e\xf1\x91\x9e\x83\x79\ +\x6e\xb4\xa8\x62\x60\x86\x3d\x06\xc5\x10\x33\xec\x29\x7b\xc2\x0b\ +\x02\x42\xb3\xfa\x91\x52\xc2\xe8\x47\x8a\xf9\xd3\x0b\x2c\x3d\xcd\ +\x55\xbf\xdd\x28\xf8\x6a\xac\x86\xaa\x7a\xf6\x77\xd4\xd4\x2d\x39\ +\x57\x0f\x44\xa5\x4b\x98\x5f\xa6\x5c\xec\x61\xac\x64\x69\x8f\x2c\ +\x95\xf2\x99\x70\xa0\x4a\x0f\x82\xd4\xc0\xf3\x40\xa7\xd8\x3a\x36\ +\xd6\xa4\x04\xf1\xec\xd2\xf4\xfd\xb1\xe1\x97\xd8\xff\x1a\x49\x91\ +\xfe\x7c\x9d\x81\xe5\x7d\xb3\x7f\xc5\xd5\x9e\xa5\x0e\x9c\xbc\xbc\ +\xcf\x6b\xa4\x9d\xbe\xcc\x59\x55\x53\xa5\x3f\xa6\x6f\x7d\xa7\x80\ +\xeb\x4c\x12\x46\x87\x04\x64\xba\x87\x82\x64\x4e\xe9\xad\x78\x9e\ +\xd7\x21\xed\x5f\x4e\x97\x52\xcd\x73\x8b\xa5\xa3\x6f\x33\x69\x94\ +\xa9\x36\x5e\x69\x40\xcb\x1c\xe7\xef\xc5\x90\x9b\xc7\xc8\xa1\x59\ +\xc5\xce\x64\x12\xa0\x95\x60\xfe\x28\x36\x5e\xaa\x3c\x5f\x13\xcf\ +\x1b\x95\x06\x60\xad\xbf\xc0\xa7\x6f\xaf\x50\xb9\x5b\xa7\x76\xe5\ +\x2b\x26\x96\x03\x1e\xd5\x64\xa7\xbe\x90\xae\xe5\x4f\x94\x60\x6b\ +\x8d\xdb\x77\xee\xf3\xd9\xcd\x12\xa5\xc5\xca\xb4\x53\xfc\x34\x20\ +\xc1\xb5\x06\x56\x1a\xe8\xd2\x28\x93\xfb\xea\x9f\xa1\xbb\xd1\xd2\ +\x9f\xad\x33\xf3\x3c\x89\x61\x66\x4a\x53\xf0\x66\x4a\x94\x8a\x05\ +\x5a\x65\xe3\xda\xa4\x98\x8f\xd2\x63\x12\xc0\xf3\x58\x78\xe2\x0f\ +\x67\xda\x01\xe8\x80\xd4\x2b\x7c\xd3\x63\x76\xe7\x31\x70\x5a\x23\ +\x26\x7a\x65\x68\xef\xb9\xce\x00\x4d\x4b\x88\x99\x56\x05\xda\x02\ +\x48\xef\x2f\x13\x6c\xce\x31\x54\xc5\xf2\xf3\x58\x78\x50\x0c\x31\ +\xfa\x11\x46\x3f\xc2\x0b\x82\x84\x14\xf8\xeb\x24\xfe\x48\x9d\x2e\ +\x17\xe2\x75\x6e\x3d\x69\x5f\xe8\xb2\xce\x3f\x7a\x8c\x1b\x8c\x58\ +\x08\x97\xa8\xde\x14\xd3\xa6\x26\xc3\xf7\x13\xb3\x0f\x27\xfe\x90\ +\xee\x55\x9b\x17\x4b\x0d\xbe\xb8\xf5\x80\x2f\x6e\x3d\x60\x73\xbd\ +\x4c\xf9\xd3\x2f\xf1\x23\x0f\x3e\x2f\x70\x62\x16\xcd\x84\xfe\xd5\ +\x19\x30\x6d\x80\x5d\xf7\xdc\x75\x9a\xf7\x3a\xf0\xce\x63\xfb\x34\ +\x90\x81\xff\xaf\xb3\xab\xeb\x71\x1c\x4b\xcb\x8f\x3f\x52\x89\xed\ +\x38\x76\x52\x55\xdd\xd5\xbd\xdd\x3d\x3d\xd5\x3b\x2b\xcd\xdc\xec\ +\x0a\x84\x84\xd0\x08\x81\x10\xdc\x00\x17\x08\xc1\x25\xab\x15\x3f\ +\x8a\x0b\x7e\x01\x3f\x61\xaf\xd1\x0a\xd0\x22\x56\xa3\xd5\xd0\x30\ +\x3d\xd3\xd3\x1f\xc5\x54\x77\x57\x25\x71\xe2\xd8\x49\x2a\x8e\xcd\ +\x85\xfd\x9e\xbc\xe7\xe4\x1c\x27\xbd\x96\x4a\x49\x1c\x97\x93\xd8\ +\x8f\x1f\x3f\xef\x37\xc6\xab\xa6\x4d\xd6\xed\x16\x0b\x3c\x97\xc0\ +\xcb\x0d\x23\xe9\xea\x66\xd1\x39\x77\x60\xd7\x43\x06\x07\xfb\x5d\ +\x3f\x67\x49\xdd\x15\x5d\xe7\x9e\x6a\x9b\xa8\xa4\xba\xd7\xa2\x96\ +\xdb\xad\x64\x74\x2a\xd5\x29\x3a\x26\xd5\xbd\x56\x93\xfb\xdb\x3e\ +\xe7\xee\xee\x1a\xf7\x50\xe1\x26\x05\x4e\xed\x61\xab\x3b\xcd\xcf\ +\x6d\xe1\x4a\xf3\x73\x5b\xf2\x11\xab\xc1\x0e\x93\xa4\x20\x1d\x4c\ +\x1e\x0c\xd3\x9d\x45\x92\x6f\xa5\x05\x34\x4d\x51\xfa\x17\x16\xa6\ +\xd3\x04\x63\xfb\x46\xe4\xc8\x74\x7a\x5f\x88\x9c\xe2\x00\x27\x82\ +\x8d\xdf\x9c\x2c\xf1\x38\xa8\x30\x18\x0d\xf0\x69\xff\x1c\xbf\xef\ +\x04\x88\x7e\x14\x34\x77\x0a\xca\x5f\x60\xac\x49\x20\xca\x2a\x0f\ +\xe5\x36\xd3\x4a\x0b\x0e\x46\x13\x7b\x9b\x24\x03\xdf\x77\xdb\x32\ +\xec\x2c\xd1\xeb\x55\xb0\xe3\x33\xbc\x7e\xd1\x95\xd8\xb0\x93\x16\ +\x72\xbe\xac\x26\x49\x9e\x32\xd4\x86\x1a\x39\xc1\x07\x0f\x9a\xdc\ +\x59\x6d\xc1\x0c\x5d\x7f\x85\xb6\x5c\x02\xae\x89\x75\x40\x36\x25\ +\xd3\xa8\x91\xb9\x36\x6f\x46\x69\x0f\x30\x77\xfb\xe8\x0e\xfb\x18\ +\x97\xd3\x83\x49\x3e\x7e\x6e\x4b\x46\x9c\xc9\xf5\x66\xb3\x8b\x9d\ +\x3f\xae\xa7\x0b\x8c\xa2\x91\xf0\x82\x1c\x23\x61\x22\x7b\x20\x6c\ +\x94\xc5\xbb\x0a\xb1\x95\xe0\xb4\x3c\xc7\xe3\x5e\x9d\x30\x9f\xdc\ +\x7e\xa5\x77\x71\xbe\xbf\xc2\xcd\xec\x5b\x54\x2b\x0b\x3d\x58\xc8\ +\xbd\xa0\x69\xba\x0d\xbd\x9c\x90\x4e\x68\x18\x1e\x05\x4e\x1d\x5b\ +\xb7\xc9\x12\x21\x17\x0c\x0c\x4e\xeb\x57\x2b\x0b\xdd\x55\x61\x4c\ +\x7b\x54\xcb\x8e\xf8\x42\x29\x96\x3a\x16\xe6\xe5\xe6\x87\xa2\x5b\ +\x5c\x4e\xb4\x01\xfc\x90\x05\xaf\xf6\x66\x30\xb5\xa0\x6d\x03\x83\ +\x29\xe0\xc0\xc1\x7c\x48\x4a\x70\x20\x7b\x8e\x23\x5e\xe7\x7e\xa9\ +\xdd\x9e\x17\x00\xf0\x7d\xd3\xc5\x62\xa5\x15\x4e\xed\xa1\xd6\x87\ +\x2d\xce\x67\x79\x02\xcc\x6b\x77\xe5\x68\xbe\xbb\x70\xd6\xf1\x05\ +\x56\x41\x0a\x6c\xde\x8a\xb0\xb3\xd4\xb8\x1b\x27\x98\x0c\x9c\x5d\ +\xd2\x10\x80\xfe\xd2\x97\x71\x74\xe8\x44\x50\x1f\x0a\x2e\x33\x38\ +\x38\xdb\xbc\x0f\x6d\x12\x43\x27\x2f\x74\xeb\x9d\x6e\xff\xa3\x4f\ +\x28\x19\x73\xe5\x20\xde\xab\xd1\x22\x6b\x57\xa7\xa5\xdb\xc0\xc3\ +\x5d\x62\xba\xd0\xb2\x09\x54\x26\x69\xa0\x93\x1c\x3a\x3d\x7d\x28\ +\xc0\x70\xcc\x05\xa8\x33\xe4\x48\x13\xab\x12\x43\xf5\x19\x5b\x41\ +\x6a\xbc\xc0\x28\xa2\x57\x85\x16\xc6\xe5\x54\x44\xea\xb4\x9a\xb8\ +\xe9\x9a\x19\x57\x16\x6e\xcb\x54\x14\x1e\x58\x8b\x0a\xae\x7d\x01\ +\x74\x1e\x0b\x26\x56\x67\x4a\x47\xf6\x00\xef\x93\x29\x7e\x58\xd5\ +\x44\xb2\xf0\x72\xf4\x4f\x4e\x76\xe3\x0e\x4c\x7e\x59\x93\xa1\xc5\ +\xb7\xe5\x52\xc3\xe4\x07\x36\x01\xd8\x24\x47\xf8\x7a\xfa\xbc\xe5\ +\x2a\x41\x55\x7d\x85\xc5\xed\x44\x5b\x11\xa1\xde\xea\x46\x76\x85\ +\x2d\x22\x0c\xed\x4a\xf4\x09\x16\xbf\xb3\x78\x2f\x9a\x9e\x1c\xcb\ +\xa0\x1c\xb8\xbc\x01\xe2\x31\xc1\x0a\x9d\x34\x30\x19\x83\xba\x10\ +\xef\xa1\x7c\x08\xca\x55\x38\xd6\xad\x46\x86\x1c\x01\x3a\x4b\x4b\ +\x01\xdc\x05\xaa\x3d\x4d\xac\x2b\xc3\x22\x29\x41\x5d\x82\xb8\x0c\ +\xe1\x79\x13\xf4\x3b\x85\x6b\x6d\x6e\x69\x35\x76\x95\xbe\x16\x9a\ +\x38\x3e\xfb\xe9\x3e\x81\xb8\x3d\xcc\x5e\x4d\x61\xe3\x05\xfc\xa5\ +\x5d\x8f\x3e\xb0\x73\xb1\x4f\x5b\x07\x56\x93\xa1\xa5\xbe\xe6\x72\ +\xc0\xe4\x6d\x38\xa4\x8f\x4d\x40\x27\xcd\xbc\x5d\xdf\xe0\x7f\x92\ +\x7b\x62\x06\xb0\xc9\x88\x53\xd7\x39\x4d\x37\x64\x92\x13\xb3\x64\ +\x86\x69\x69\xed\x0d\xe1\x3e\x74\xfb\xe7\xc0\x55\xf5\xb0\x4e\x27\ +\x9a\x7c\xb9\x52\x89\x94\xc6\x43\xa1\x0b\x39\x1f\xca\x0f\xa6\x85\ +\x3c\x12\x26\x39\xa2\xa6\x54\xf2\x10\x73\x1f\x96\xa4\x8b\x89\xa1\ +\x4d\x99\x6c\x5c\x4a\x10\x80\xb9\x51\xc8\x7d\xd5\x54\xc9\x2d\xec\ +\x86\x66\x56\x34\xff\xae\xf5\x50\x19\x08\x4d\x4c\x8d\x05\x33\xdc\ +\x21\x73\x1f\x89\x74\xcc\xe8\x74\x88\x45\x72\x89\x13\x7f\x52\xf7\ +\x27\x5e\xb9\x40\xaf\xd8\x97\x13\x2a\x58\x0f\x81\x51\x35\xd0\xd2\ +\xc2\xac\xad\x0f\x19\x7e\xba\x0b\x20\x74\x6d\x2c\xe1\x88\x68\xdd\ +\xa1\x88\x11\xdd\x7a\xa2\x38\x92\xc0\x4b\x60\xb6\xe7\x89\xdc\xb1\ +\x11\xfa\xea\x08\xde\x9c\xf0\x90\xc1\x67\xca\xf1\x35\x05\x2e\x78\ +\xd4\x4e\xa7\xc7\x8f\xc9\x44\xe3\xeb\x88\xf9\x78\xd2\x8d\x29\x3a\ +\xc7\x75\x30\xf9\x81\xe9\xf5\x02\x15\x82\xd0\x86\x9f\xdb\x22\x7b\ +\x4d\x05\x3d\x81\x76\x3d\x5d\xec\x35\x5b\xa1\xe7\x04\x50\x5e\x38\ +\x1b\xf4\x3b\x52\xab\xd7\xb9\xdb\x17\x9d\x7d\xd2\x7c\x86\xc5\xdd\ +\x9d\xd0\xc4\x70\x2f\x77\x43\xd5\x8b\x97\x08\x58\xda\x42\x55\xbe\ +\x44\x52\xc5\x20\x8d\xd8\x2f\xfd\xda\x4f\xcc\xa5\x81\xca\xc4\x3a\ +\x66\xe6\xa0\xa5\xff\x21\x16\xe7\x6c\xae\xfb\x5f\x75\x5d\x1b\x23\ +\x93\xe4\x28\x9c\x21\xc6\xaf\x5c\xdc\xac\xbf\x16\x09\xf1\x04\x34\ +\x35\xb9\x66\xd0\xcf\x05\x03\x73\xf0\x4e\x4b\x0b\xd3\xd2\x92\x58\ +\xd0\x94\xa3\xa0\x1a\x89\x26\xd9\xa1\x36\x25\x31\xe5\x2f\xe8\xa4\ +\x0f\xaf\x34\x69\xd3\xf9\xc7\x48\x14\x62\xbe\x7b\xa8\x8e\xce\x54\ +\xb3\xd2\x4a\xd4\x2e\x02\x40\xd6\x0c\x55\xcc\xd2\x12\xb9\x5f\x4a\ +\x12\x41\x65\xe3\x2a\xb4\xf6\x52\x34\xf9\x42\x17\x13\x97\x4d\x62\ +\x74\xef\xa0\x42\x1c\x87\x75\xdf\x3a\x40\x8c\x32\xd8\xe6\x1e\xe6\ +\x1f\x80\x37\xf3\x7a\xbf\x34\x8f\x5a\x32\xc6\xc7\x53\x56\xba\x5f\ +\xdf\x95\xcb\x6a\xb1\x1f\xb1\xe3\x4c\x5c\x6e\x33\xac\x9c\x07\xe2\ +\x39\x25\xe3\x98\x34\xb3\xee\x71\x2f\xf2\xe6\x1c\x17\x45\x22\x56\ +\x0f\xfc\x1e\xec\x74\xbc\xe7\x21\x20\xa0\xf1\x6e\x36\xc4\x00\x94\ +\x27\xcc\xbd\x12\xd5\xbc\x12\x65\xf7\xc7\x30\x27\x67\x60\xb5\x5a\ +\x58\xcd\xef\xd5\xb9\xcb\xa6\xeb\xb9\x36\x02\xa7\x7e\xd6\xa1\xd4\ +\x46\x1d\x90\x4d\xf2\xa3\x2d\xe4\xcc\x75\x2f\x31\x67\x1f\xb5\x1e\ +\x26\x90\xda\x7e\x65\xcc\xad\x38\x74\x17\x54\x2f\x16\x0a\xb6\xf0\ +\x1e\xcf\xd4\x5d\x7e\x53\xac\x44\xff\x89\x34\x7a\x03\x0f\xa7\x70\ +\x46\x29\x06\xf7\xea\xde\x13\x9b\x0f\xcf\x45\x90\x83\xe7\x50\x44\ +\xa7\x43\x3c\xb9\xf3\x90\xe6\x33\xf8\x4d\x94\x38\xdf\xd4\x43\x1f\ +\x6d\x1d\x5b\x12\x08\x7b\xdb\xeb\xbd\x9c\x86\x43\x40\x56\xf5\xb5\ +\x0a\xe8\x63\x16\xce\xd8\x39\x06\x58\xe0\xf9\x5e\xa4\x8e\x17\x86\ +\xf6\xdc\x40\x54\x6b\x88\x26\xe2\xe9\x8e\x8d\x3f\xc6\x0d\x26\xf9\ +\x9a\x59\x36\x9a\xc8\xd3\x50\xf4\x2c\x15\xa0\xf2\xfc\x8d\x61\x77\ +\xd0\x9a\xa8\xa3\x03\xe4\xb1\x9e\x97\x63\xa2\x94\x7b\xb2\x2d\xb4\ +\xb5\xd9\x6a\x41\x68\x0b\x19\xc1\x81\x6c\x62\x61\xdd\xf7\xe5\x7a\ +\x1a\x00\x46\xd1\x68\x3f\x9f\x98\x9a\x72\x37\x15\x1c\xd4\x7f\x22\ +\x9c\x3d\xc1\x12\xe3\x5a\xdf\x36\xde\x89\xce\xbd\xcf\xb5\x61\xfd\ +\xd9\x76\x86\xbb\x7b\x75\x7b\x57\xca\x7c\x13\x86\x9d\x0a\x3c\xdb\ +\x09\x5a\x59\x15\xa8\x13\xd5\xf9\x63\x9b\xf1\xf7\x31\x80\xe5\xa0\ +\xa7\x7d\x2f\x57\x09\x5e\xbf\xe8\x4a\x4c\xcc\x7b\xad\xf1\xdb\x96\ +\xea\x13\x8e\xe2\x08\xe9\xa2\xb7\x37\xb3\x58\x3d\x31\x6a\x6e\x00\ +\x35\x64\x59\x15\x19\x2a\x27\x6c\xad\x6d\xa3\xfe\x13\x62\xe2\x53\ +\xc3\xc4\xea\xc9\xd5\xb5\x5a\x35\x19\x74\x2a\x60\x8e\xc9\x37\x6e\ +\xf3\x31\x9b\xd2\x2e\xad\xb4\x12\x00\x0f\xac\x4c\xfc\x71\xe3\x8e\ +\xf6\x69\x0a\x65\xf3\xf0\xb4\x95\x56\x7b\x41\x96\x41\xb1\xa8\xbb\ +\xcd\xb3\xa0\x50\x69\x0f\x44\x62\x7c\xe8\x47\xf0\x86\xf5\x7b\xd6\ +\xfd\x8e\xf0\x29\xd3\xa8\x31\x00\xb0\xab\x39\x22\x27\xc2\x03\xab\ +\x80\x87\xd3\xba\x91\x20\x73\xdd\xd9\x6d\x40\xe2\x8f\x92\x5b\xad\ +\x61\xe5\x36\x76\x3e\x96\x85\x4d\xe0\x4f\xdd\xfa\x87\x79\xbd\x58\ +\x62\x61\x5d\x57\x47\xea\xde\x23\x5f\x69\x35\x1b\x17\xfe\x5a\x78\ +\x24\x4c\xc5\x97\xaa\xcb\x27\x9d\xee\x32\xd5\xac\x6d\x6a\x94\x01\ +\xc4\xda\xab\x22\x83\x33\x8c\x04\x83\xf7\xcf\x46\xe2\xe4\xea\x12\ +\x7e\xd4\x0b\xc1\xf4\x5c\x17\xbc\x38\x54\x1c\xba\xd7\xe1\xbd\x69\ +\x98\xcd\x41\x29\xb4\x71\x90\x0a\xb6\xcd\xaa\x00\x0b\x00\x55\x16\ +\x0a\x83\x8f\xef\x53\xf5\x80\x50\x24\xaf\xcd\xfb\xc1\xf3\xb8\xd5\ +\x0c\xb6\x51\x54\x03\x31\xb6\x12\x5c\xc4\x0f\x1b\x89\x53\x4f\x26\ +\xe8\x8c\xba\x3b\xe3\xae\xd1\xc3\x3f\xfb\x7c\x84\xde\x27\xcf\xe4\ +\xa8\x6b\xd3\xe3\xc3\x2e\xb7\x19\xa6\x9b\xa6\xc6\x6c\xe3\xed\x19\ +\x66\x5c\xcf\x92\x4e\x56\x0d\x3b\xf5\xaf\x8d\x6d\xdb\x0c\x3f\x75\ +\x7d\xea\x04\x48\xfe\xf7\x4a\xb0\x9b\xe9\x24\xaa\x00\x9e\x25\x33\ +\x31\x8a\xcb\x9e\x27\xda\x72\xa2\xb6\x25\x1c\x76\x44\xe1\x69\xe5\ +\x84\x98\xae\xe7\xa8\x9c\x50\xea\xe9\xa6\xea\x67\x5e\xa8\xba\xb8\ +\x9d\xec\x49\x13\xf5\xf6\x7f\x6c\x95\xb3\xca\xde\x26\xa3\xd4\xc4\ +\xcc\x54\x9d\x41\xc0\xa5\x3b\xc4\x02\x75\x24\x6e\x01\x26\x2f\xb2\ +\x50\x44\xed\x74\xee\x35\x1e\xcc\xa0\x48\x9e\x49\x37\xab\x44\x43\ +\x4c\xdc\x71\x7b\xe8\xb9\x01\xbe\x7f\xf9\xc3\xee\x77\x01\xf8\x9c\ +\x0d\x02\x4d\x92\x54\xcc\x09\x21\x36\x0e\xee\x3f\x42\xf7\xec\x44\ +\x74\x01\x02\x00\xa7\xc9\x36\xb4\x6d\x27\xc0\x13\xab\x40\xb9\xcd\ +\x30\xec\xd4\x01\x06\x02\x35\x67\x47\x4a\xc6\xf1\x31\x17\x60\xa7\ +\x6d\x49\x82\x70\x29\x62\x02\xb0\xca\xbc\x6d\xbe\xe9\x55\xba\xc1\ +\xdb\xd5\x35\xd2\xab\x97\xc2\x33\xc1\xbd\x02\x34\x89\x48\xa6\xd1\ +\x06\xd4\xe1\x2e\x47\x42\x57\xe7\xd6\x6a\x54\x4e\x37\x12\x38\x3d\ +\xc7\xc1\x76\x3a\x43\xff\x6c\x64\xd4\xcf\x1c\x58\xbc\xf7\x9b\x8e\ +\x41\x75\xfe\xed\x36\xcd\xae\x6e\xdf\x16\x1c\x31\x7d\x2e\x67\xe2\ +\xe5\x76\x0b\xdb\xaf\xa4\x47\x8a\xd6\x95\xb9\xa5\xf5\x13\x93\x57\ +\xc3\xc4\xba\x26\xf0\xaa\x9d\xe3\x37\x93\xb5\x08\xce\x90\xb7\xe1\ +\x7c\xd4\x81\xfb\xf0\x3e\x2e\x43\x16\x6e\xe6\x29\xaf\xb1\x8d\xcb\ +\xa7\x4f\x11\xfa\x35\x59\xd1\xd0\x19\xda\xa7\x5d\x6e\x33\xbc\xa9\ +\x5c\x09\x54\x34\x8c\xdc\xe4\x5d\xa0\xf7\xc7\xab\x12\xa7\x3d\x5b\ +\xcb\xae\xe3\x55\x89\xb0\xe8\x68\xe5\x84\x6e\x7b\x95\xf1\x29\x29\ +\xe9\xd5\x7f\xfc\x37\x92\xdb\xaf\x76\x1d\x21\x99\xf6\x34\xc9\x08\ +\x62\x62\x0a\x7a\xb4\xb1\x30\x6f\x61\x4a\x07\xdc\x73\x1c\x09\xc8\ +\xa2\x69\x34\x63\x5b\x1d\x38\x4d\xef\xa9\xcc\xad\x26\xc6\xb7\xe9\ +\x5a\x3e\x35\x95\xeb\xec\x63\x42\xcd\x94\xac\xce\x41\xe7\x39\x8e\ +\xa4\x63\xcb\x7c\xe7\x27\x26\xaf\x05\x07\x28\xff\xcc\xee\xb0\x2f\ +\x12\xe7\x4d\xe0\x35\x1d\x17\xd2\xaf\x99\x7d\x87\xb9\xdb\xc7\x74\ +\x36\x13\x49\x3d\x6f\x5f\xbe\x07\x92\x7a\x9f\xe1\xa3\xcb\xfa\x5c\ +\xcf\x2d\xc9\x1b\x95\x4d\x5e\x20\xcd\xeb\xe3\xef\xfa\x1e\xb6\x6c\ +\xfc\xaf\x7c\x89\x27\xbb\x94\x45\xce\xc6\xd3\x8d\x27\x01\x97\xc0\ +\x36\xec\x2c\xf7\xf4\xf3\x78\x55\x8a\xf7\x52\x77\x63\xf4\x1f\x9b\ +\xc0\x4d\xfb\x2f\x9c\x21\x7e\xfb\xd5\xaf\xa5\xf9\x14\x1c\xc8\xa6\ +\x89\xf2\xb3\xa4\x4e\xfa\x99\x34\xc7\x7e\x52\xb6\x57\x3b\x70\xc7\ +\x3f\xf5\x28\xa3\x5e\xc0\xe9\x74\x23\xf5\x2e\xd3\x55\x90\xe8\xc0\ +\xcb\x53\x13\xb9\xe1\xa8\x1a\x80\x87\x5c\x6f\x9c\xe9\x8b\x79\xa9\ +\xcd\xf1\x6d\xbb\x68\x54\x23\x8e\x83\x92\xfc\xc4\xc4\xc4\x7d\xec\ +\xb6\x25\xd7\x1b\xe5\x53\xa8\xbf\xab\xca\x42\x2d\x78\x75\xe7\xc4\ +\x24\x73\x86\x51\x84\x37\x3f\x2c\xf1\xcd\x2b\x07\xd3\x69\x82\x22\ +\x5f\x8a\xea\x8e\x7a\x0e\x78\x25\x6a\x1a\x89\xb5\xd7\xb7\x77\x28\ +\x72\x17\x45\xbe\x84\x43\x21\x6d\xf2\x13\x13\x40\xa7\xc1\x4e\x4c\ +\x8b\x75\x0a\x80\x9f\x58\xc5\x4e\x3b\x37\xa0\x27\xe0\x11\x8b\x1b\ +\x83\x26\x49\xbc\x97\x2b\xac\x3e\x17\x92\xe6\xe6\x46\x04\x39\xc8\ +\x33\xc1\xdb\x38\x71\x16\x1e\xd9\x9e\x08\x66\x94\x83\x18\xb3\x64\ +\x06\x07\xcd\x4c\xe5\x23\xb4\x30\xf7\x04\x78\x8e\x83\xc5\xed\x04\ +\x9e\xe3\x48\xae\x32\xea\xef\xa6\x7a\x1b\x54\xef\x01\xe5\x14\xd0\ +\xfe\xee\xee\xae\x85\x5f\xd4\x54\x2f\xf7\x31\x52\x47\xc7\xc2\x6a\ +\x6f\x0d\x2e\x21\xd4\xe8\x1b\x4f\xbf\x24\x16\xa6\x8b\x83\x00\x4c\ +\x2e\xb7\xe5\x76\x2b\x19\x81\x3c\xeb\x4d\x07\x50\xb5\x7b\x3c\xfd\ +\x51\x47\x20\x7e\xec\x6e\xcb\x14\x9d\x41\x0f\x0f\x7b\x05\xfc\x4e\ +\x17\xae\xef\x89\xea\x8e\x4d\xe8\x8a\x2a\x90\x4d\xe8\x8a\xfc\xe3\ +\x9a\x85\x8b\x66\x9e\xdd\x52\x61\xe2\x44\x49\x1a\x67\xaf\x87\x9d\ +\xa5\xc4\xca\xa9\xbb\xc1\x30\xeb\x4a\xa0\xa7\x6d\xc2\xa2\x23\x19\ +\x89\x7c\x5f\xd3\x8d\x07\xc4\x89\x00\x2c\xdf\xaf\x90\x2f\xcd\xb6\ +\x54\x9f\xf7\xf5\x8b\x97\xcd\x60\xee\x70\x2f\x5a\xc6\x17\x5e\xb5\ +\x6c\xcf\x13\x91\x04\xcf\x7b\x1a\xb7\x2d\x9c\x39\x97\xdb\x2d\x86\ +\xdd\x81\x30\xe2\x74\x8d\xab\xd5\xb4\x47\xee\xfe\xe2\x21\x5e\xd5\ +\xc3\xa0\xba\xca\x78\x9e\x6e\x9b\xdc\xd1\x31\x35\xff\x0e\x04\x42\ +\xd5\xe8\x35\x95\xdc\x7b\x8e\x03\xdb\xaf\xa4\x80\x07\xb9\xd5\x82\ +\xd0\x16\xc1\x11\x62\xe1\x2a\xb4\xe0\xa4\xb2\x8c\x30\x75\x16\xd2\ +\x1d\x6f\x6e\x10\xf2\xf7\x29\xf4\x3c\x9f\x6d\xb1\xcd\x3d\x89\x89\ +\xa9\x8e\x52\xf5\x19\xd7\x4c\xec\xa2\xf0\x7b\x58\xa1\xaa\x99\x98\ +\xc0\x35\xdd\x78\x78\x68\x25\xe0\xaf\x09\x58\xc3\xce\x52\x7a\x44\ +\x5c\x77\xc9\x89\xf3\x44\xda\x86\xdc\x62\x61\xd1\xc1\xb0\xb3\xac\ +\x7d\xbd\xcd\xb6\xc4\xb0\x62\x7d\x12\xe3\xb4\x67\xcb\xc0\x0f\xd6\ +\xe2\xf9\xfa\xf5\x02\xe9\xd5\x4b\x6c\x42\xb7\x9e\x13\xcd\x0e\x1e\ +\x6f\x88\x0d\xd4\x15\x0c\x43\xbb\xc2\x30\x6b\xa2\x4f\x4d\x17\x9f\ +\x0f\x49\x75\xf0\xd6\x46\x27\x9b\x9f\x60\x95\xd1\x78\x78\x5b\x6d\ +\x72\xa2\x73\xfc\x4f\xd7\x73\xb1\x4f\x62\x61\x9d\xaf\xf7\xa4\xe9\ +\x58\xa9\xfa\x94\x55\xc0\x91\x67\x86\x03\xfa\x90\x71\xa7\xcb\x6d\ +\xa0\xd7\x64\xc8\x91\x06\xe6\x79\x14\xdc\x77\x4c\xdb\x02\xc0\x26\ +\x8a\x85\x37\x42\x0d\x7a\x98\xc2\xee\xf7\xb0\x33\x04\x79\x5e\x8a\ +\x64\xc0\xe3\x05\x96\x18\xa3\xc2\x04\xd1\xb8\xc0\x93\xc1\x02\x71\ +\x1c\xd6\x4c\x3c\xdf\x7d\xf7\x7c\xba\x82\xb3\x7a\x25\xd8\xb8\xd3\ +\x74\x8c\x92\x34\xf1\xb0\xb3\xc4\x0f\x55\x2c\x58\x31\xce\x77\x80\ +\xae\x57\xb0\xc7\x86\x31\x13\x3f\x16\xeb\x38\xab\xbe\xa9\x5c\x20\ +\x89\x05\xa8\xa7\x1b\x0f\x48\x62\x90\x3b\x2f\xeb\x9e\x88\xfd\xa5\ +\x8b\x40\x7c\xe6\xb0\xb3\xac\x2f\x06\x27\xd8\x95\xab\xa4\x85\xf9\ +\xb6\xfa\x61\x04\x60\x2a\x45\x75\x48\x62\xf0\x4e\x3e\xba\xe2\x51\ +\xf5\x64\xab\xc6\x0a\x9f\x67\xa1\x03\xa0\x3a\x70\x85\x77\xa4\xe7\ +\xda\xd5\x94\x3e\xc9\x3f\xbb\xad\x9e\x8d\xbe\xab\x3b\xb0\xb5\x17\ +\x98\x2e\x24\xdd\xa6\x45\xa9\x7e\x8e\x7a\xae\x99\x32\xdd\x4c\x59\ +\x6c\xc7\x32\x30\x65\xb4\xd1\xfe\x74\xc3\x1a\x01\x20\x9d\x00\xeb\ +\xdb\x3b\x3c\xff\xb0\x5b\x77\xb3\x5d\xd6\xe3\x31\x06\x95\xe8\x38\ +\x5f\xdd\xdd\x4a\x6c\x4c\xe7\x37\x28\x4f\x60\x13\x58\xab\xd9\x5a\ +\x32\xe4\xac\xea\x3e\x86\x9d\x65\xbd\x3e\x89\xa5\x6d\xb8\x8c\xa8\ +\x66\x6b\xa1\x9b\xf9\x73\xa1\xaf\x1b\x96\xe6\xff\x43\x7a\xba\xdc\ +\x66\x98\x06\xeb\x5a\x27\x33\xd9\xb1\x4a\x37\x42\x0f\xab\xbd\x1f\ +\x82\x7e\x47\x00\x75\x75\x6f\xe7\x8f\xa5\x64\x77\x0a\x35\xeb\xe6\ +\x7c\xa8\xc6\x12\x3f\xe0\x6a\xc0\xc3\x04\x5c\x93\x1b\x8c\x33\xa6\ +\xee\x7d\xce\xda\xc7\x74\xb1\xe4\xdf\x55\xd5\xe3\x6d\x81\x91\x43\ +\x2e\xb7\xdc\x2f\xf7\x0a\x43\xb9\xeb\x4d\x8d\xf2\x05\x96\x5c\x37\ +\xa7\x76\xea\xa7\x7e\x77\x6a\xdf\x09\x7e\x81\xa8\x13\xaf\x7a\x6e\ +\x80\xb3\x51\x84\xce\xa0\x07\xcb\xbe\xc4\xf5\xba\x10\x59\x6c\x6f\ +\xe6\x7d\x9c\x3b\x1e\x36\x93\xb5\x48\x8e\x9f\xbb\x7d\x5c\x2f\x2a\ +\x91\x14\x0f\x00\x61\x3f\x93\x99\x78\xd8\x59\x0a\x56\x15\x60\x66\ +\x8c\x8b\x38\x91\xb6\x91\xc0\x1e\x75\x85\xac\x48\xfc\x58\x68\x5d\ +\xa1\x79\xe3\x64\xef\x7f\x54\x23\xb2\xdc\x66\x62\xbb\xd3\x9e\x8d\ +\xe5\x2a\x11\x7a\x58\x5d\x28\x4b\x0d\x80\x68\x41\x35\x2d\x2d\x94\ +\xc5\x7b\x6d\x29\xd2\xa1\x72\x1d\xdd\x49\xe4\x27\xf3\x10\xe0\x38\ +\x33\xf2\x7e\x0d\xa6\x6d\x0f\x75\x83\xd7\x7d\x66\xdb\x76\x1f\xb3\ +\x88\x64\xf8\x06\x98\xdc\x73\x91\xfb\x25\xfc\xdc\xde\x63\xe4\xa1\ +\xfb\xc9\x9e\xf1\xa6\x16\x26\x70\x03\xd8\x14\x45\xa4\xa1\x3c\x6e\ +\xee\xe1\xee\xee\x1a\x5b\x44\x78\x38\xaa\x5b\x53\x3d\xe8\xd6\xb9\ +\x13\xe3\xe5\x5b\x3c\xe8\x7c\x03\xb8\x97\x75\xd4\xae\x09\x74\x6c\ +\xc7\xff\xb7\xb7\x4f\x92\x13\x41\x79\x02\xdb\x8a\xba\x98\x6e\x3c\ +\xc4\x79\xb2\x0f\xe6\x38\x01\xbd\x2f\x69\x60\x0e\x76\x26\x2b\x88\ +\xd5\x25\x0d\xdd\x6c\xab\xfa\x9e\xd5\x85\x1b\x8f\xdb\xec\x7a\xcf\ +\x23\x41\x57\x31\x01\x95\x06\x25\x72\x0d\x4c\x2c\xbc\x45\xf4\xd1\ +\x27\x98\x37\x0d\x51\x83\x15\x6d\xfd\x21\xda\xc0\xac\xbb\x05\x9b\ +\x52\x37\x75\xb9\x16\x6d\x6e\xbc\x63\xbd\x18\x5a\x49\x51\x05\x70\ +\xcb\x99\x30\xe6\x72\x7f\xe7\xbe\xb3\x82\x54\x7c\x9f\x2c\x2d\x31\ +\x99\x4d\x8c\x95\xd3\x04\x4c\x7a\xce\xbd\x32\xfc\x58\xf1\xc1\xf0\ +\x94\x3b\x31\x72\x00\x7f\xd8\x83\x1f\x37\xc7\xaa\x61\xe2\xeb\xcd\ +\x4f\x10\x14\x57\x52\xd8\x79\xd3\x74\x42\x27\xfd\x4c\x72\xd1\xcd\ +\x57\x75\x16\x1b\x81\x31\xf1\x63\x09\x98\x56\xd4\x05\x92\x58\x0b\ +\x56\xf1\x3e\x03\x28\x67\x65\x6e\x1c\x56\xb3\xb5\xb4\x6f\xba\x10\ +\x54\xc6\xa6\xf5\x81\xdf\xc3\x8b\xcd\x4f\x91\x5e\xbd\x14\x09\xd5\ +\xf4\xe3\x79\x13\x14\x6a\x88\x4d\xae\x35\xce\xc2\x6a\x05\xf2\x31\ +\x27\x5f\x95\x13\x3a\xad\xa9\xb2\x3a\x4f\xb9\x34\x4d\x33\x32\x25\ +\xfb\xa8\x6c\x7b\xc8\x07\x7c\x28\xa0\xa2\x3e\xaa\x1d\x83\xd4\x8b\ +\x64\x13\xc5\x52\xa9\x3e\x00\xb8\xe5\x0c\xcf\xce\x9f\xe0\xcf\xfe\ +\xe6\x8f\xf1\x57\x7f\xfe\xb7\x78\xf6\xd9\x97\x58\xa0\xc2\x64\x36\ +\x91\x59\xb0\x39\x2f\x9b\x66\x3a\xec\x26\x74\xb5\xd3\x92\xd4\x7e\ +\x74\x52\x0e\x45\x08\x5c\x3e\x7d\x8a\xfb\x71\x1d\x4e\x06\x80\x59\ +\xf1\x19\x46\xe3\xe7\xc8\x70\x87\xce\xa8\xdb\x64\x10\xb1\xd6\x01\ +\xf8\x0c\x1e\x4e\x51\xf8\x3d\x0c\xed\xb1\x38\xd7\x76\xe2\xc7\x12\ +\xc3\x72\x46\xad\xac\xf7\x42\x22\x70\x30\x73\xff\xb1\xca\xc2\x56\ +\xd4\x15\x4c\xfc\xc4\x2a\x60\x45\x5d\xf1\xa8\x03\x3f\xbf\x28\xaa\ +\xd9\x1a\xa9\x13\xe0\xd3\xd9\x4b\xc1\xc4\xbc\x13\x4f\x14\x47\xa2\ +\x97\x30\x67\x61\xf2\x0d\xeb\x0e\xde\xa1\x5b\xab\x89\x05\x8f\xd1\ +\xc2\xdc\xd0\x3a\xc4\xfc\x87\x7a\x4d\xa8\xdf\xe1\x50\x51\xa9\xe9\ +\xbb\xea\xa6\x37\xa9\xfb\x26\xd9\xc0\x8d\x37\x4a\x8c\xbf\xff\x78\ +\x88\xbf\xff\xbd\x2f\xf1\x77\xff\xf8\x17\xf8\xcb\x5f\xfc\x09\x7e\ +\xf6\xa7\xff\x00\xfb\x49\x2c\x7d\x26\x75\xf3\x21\x37\x58\x5c\xd5\ +\xf3\x38\xa8\x6b\xa8\xea\x37\xe6\xcf\xe9\x7c\xde\x8f\x87\xb0\x51\ +\x4f\x0a\x0d\x47\x17\xf5\x36\xc9\x7f\xe1\xf5\xb2\xbb\xbb\x58\x9a\ +\x69\xb4\x3c\xf1\x68\x89\x31\xdc\x7c\x85\x69\xb9\xcb\x66\xb3\xe3\ +\x3c\x41\xe2\xc7\xd8\x66\xd7\x20\x40\xab\x8f\xfc\x56\xcf\x19\x95\ +\x18\x94\xc0\x4b\x86\xdc\x6d\x92\xe0\xdd\xed\x18\xf3\x6c\x81\xb0\ +\xe8\xe0\xa4\x77\x82\x6a\xb6\xc6\xbb\xe7\xaf\x50\xcd\xd6\x38\xef\ +\x9f\xc1\x19\x8d\xa4\x30\x36\xff\x0c\xee\x99\xa0\x36\xaa\xd6\xc0\ +\x92\x7c\xc2\x94\x27\x51\x0e\x62\xa9\x31\xb6\xea\x4b\xd6\x25\xed\ +\x10\x00\x45\xb7\x74\xc7\x39\xe8\xb3\x35\xe9\x5c\x75\x3d\x1f\x35\ +\xdb\xa6\x5f\x0f\x31\xf1\x31\x3d\x29\xd4\x46\x31\x3c\x22\x48\x39\ +\x17\x6d\xee\x3b\x49\x62\x04\xb5\x3f\xf9\xe1\xe8\x1c\xdd\x2f\xde\ +\x62\xf4\x49\x81\x3f\xf8\xf2\x8f\xf0\xf3\x5f\x7c\x81\xcb\x67\x7f\ +\x2d\xa2\x98\xab\x22\xdb\xeb\x16\x9a\x58\x95\x54\xa1\x4c\x2c\xad\ +\x66\xaf\xd1\x7a\xf2\x04\x95\xf8\xac\x66\xe0\xef\xd6\x78\xbb\x75\ +\x45\x7f\x35\xee\x52\xe5\x7e\x66\x11\x17\xa8\x0a\x8c\xec\x4a\xcc\ +\xb1\x73\x09\xa8\x63\xc3\x8f\x13\xc6\x9a\x06\xe0\xdb\xec\x1a\x56\ +\x1c\x23\x9e\x25\xb8\xad\x96\x38\x8b\x81\x69\x00\xfc\xe7\x2f\x57\ +\xf8\xfa\xdf\xfe\x19\x0f\x1e\xd4\xc2\xbd\x73\xd1\xc3\xe6\xdd\xae\ +\x3d\xe7\xa3\x1f\x79\xf8\xf4\x93\x3a\x09\xda\x7d\x10\xe3\xd3\xfe\ +\x39\x42\xab\x40\x1a\x75\x11\xbb\x8a\x5f\xd3\x09\x81\x0a\xda\x06\ +\x28\xa9\xd5\x83\x3d\x7f\x2f\xaa\x39\x26\xdb\x9d\xe1\xc7\xa7\x27\ +\x1d\x0a\x39\x93\x9c\xd0\x59\xfc\xe4\x3e\x53\xf7\x43\xfb\x56\xd7\ +\x07\x56\x86\x12\x83\xdf\xc9\xe8\x52\x0d\xa4\x43\xcf\x79\xe4\x8f\ +\x86\xb5\x8b\x01\x39\xa0\xca\x8a\x8d\xf4\x7b\xd5\x32\x25\x71\x9c\ +\xb3\x3e\x86\x91\x05\x7f\xd8\x03\x3e\x3c\x83\x5b\x14\xf0\x56\x2f\ +\xf0\xfd\xd5\x02\xb8\xfd\x55\x3d\x30\xb3\xf9\xcd\xab\x22\x03\x16\ +\x01\x3a\x00\xd0\x54\x6d\x6c\x8a\x15\x62\x58\x02\xcc\x71\xb1\xaa\ +\x47\x7e\x35\xc6\x17\xc9\x82\x78\x66\xc3\x19\x45\x78\xd0\xb4\x26\ +\xeb\x3d\x39\x87\x0b\x1f\xd1\xaf\x6a\xc9\x78\xb3\xfe\x5a\x9a\x3e\ +\x1b\x57\x96\x16\x9b\x1b\x3f\x87\x9b\x03\x98\x5b\x70\xd7\xaf\x17\ +\x18\x9f\x2d\x85\x41\x35\x06\x80\x6c\x29\x1e\x01\xe0\xdd\x6d\x08\ +\xf7\xcc\xf0\xde\xb7\x5b\xb8\xcd\xff\xdf\x26\x09\xbe\xbf\xba\xc2\ +\xbf\xfe\xcb\x3f\xc9\x9f\x78\x0d\x54\xa7\x7d\x5c\x6c\x17\x58\x2f\ +\x6f\xf0\xdd\x04\xf8\xee\xb7\xff\x2e\xde\xfe\xf1\xb3\xc7\x78\xfa\ +\xf9\x1f\xe2\xfe\xc3\x07\x58\x84\x13\x49\x73\xf6\xc3\x11\x46\x0d\ +\x4e\x46\xb6\x27\x98\x38\x5d\xf4\x10\x56\x2b\xc0\x89\x30\x99\x5a\ +\x70\x06\x89\x18\x0d\xe9\xe6\x1e\x0a\xec\x2a\x2c\x3e\x66\x0c\x80\ +\xae\x2f\x9a\xee\x42\xe0\x51\x32\xbe\xaf\xf2\x40\x5b\x2b\xb3\xc6\ +\xcd\x8c\xc6\x5c\x5b\x11\x29\x00\x9c\xc6\x31\x12\xab\xc2\x69\x15\ +\x8b\xdb\xfc\xc6\x8a\x80\xb4\x10\xc0\xad\x13\x78\x02\xac\xb1\xd8\ +\xab\x50\xf6\x1c\xa7\xc9\xfa\xab\xf0\xfc\x37\x2f\x90\x4f\x57\x78\ +\xb7\x04\xae\xaf\x6f\x90\x2e\x96\x78\xff\xfd\x35\x2c\x00\xc3\xa1\ +\xdc\x44\xe5\x34\x8e\xa5\xe4\xf5\xd8\x1d\xd4\x53\x8f\x00\xc4\x8b\ +\x7a\x02\x52\xbc\x00\xb2\xd1\x9d\x28\xf8\xcc\x46\x77\x08\xfb\x11\ +\x82\xfb\x8f\x50\x7a\x17\xb8\xd7\xe9\x22\x0f\xa2\xba\x17\xdb\xb7\ +\xdf\xd4\xd2\xc4\xbd\xc4\xa6\x77\x85\x78\x01\xc0\x3d\x81\x13\xcf\ +\xf0\x70\x74\x8e\xd2\xbb\x80\x87\x53\x78\x16\x50\x34\x8c\x8c\x41\ +\x85\xff\x07\x5b\x53\xe4\xea\xf5\xd8\xe3\x94\x00\x00\x00\x00\x49\ +\x45\x4e\x44\xae\x42\x60\x82\ +""" + +qt_resource_name = b"""\ +\x00\x09\ +\x06\xa8\xaa\x74\ +\x00\x71\ +\x00\x75\x00\x6f\x00\x74\x00\x65\x00\x2e\x00\x74\x00\x78\x00\x74\ +\x00\x0a\ +\x07\x2b\x67\xc7\ +\x00\x73\ +\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +""" + +qt_resource_struct = b"""\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\x18\x00\x00\x00\x00\x00\x01\x00\x00\x00\x39\ +""" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/sources/pyside2/tests/QtCore/sample.png b/sources/pyside2/tests/QtCore/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..60450f0dcd89ce5f6ed7c362e76a0703aad7a807 GIT binary patch literal 55944 zcmV)`Kz_f8P)00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igM) z3<55&mYH+_000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}001BWNklwodfoSnAv1SG-xRw+Xw+l0TDt}DCOxbAi&*jUfg|30(~mcbB}py2cn=N*4Kd~+vAOg zt@p^|5`ZxC$>WkR^9f^tB0~@ZnR#Yx{>~DVU%$c8?Kmj(`-KsCF7Y>gwz1@4cHs8q zg2Mzx;{gDDLbl{gy)o5r!^ZD3D7Sd)0qaKr2|ZGFB3RZKtTfC%Nu20_E8xI*$@!8`MOdnEpMkmjC^yq6s{bL6pa!>)V zrz^Vbk?f@gh_4PvaswC*>J*PX5@f_4K-&9Zk3;|^UX4${M^X|oEIrnKtF;#}ER7xB=t_SepO_iYg{R5oeMtj>w9Dq9>S8*1*mr8B-p< zfGs(FLezW((-D0__SF_v9)r=A)oMgJ*fQdRLL3nIpfrF16dqk6+JL2^6p;gSR|u3+ z?tYZwFK&L$B03eOKB+E6J9U8zptXe?!4l9y=2mOr;^M{B6L_wzJHJbrSQX44Hakx?Z1rnrI+5E{Bz;pC9V?O7MvoAVfhC3p#P{1i*j>>KSIXz?PZd|@)7eui-0qdtOL9)@`epdet_VoZoIv_|kRGkrJR#2pa*5eky%c>yB_M~yQ z_5K#XmdOFq?Eybmk^>obyU9yr*khBIz|%J}D&$f~s|h_v4^-h(EsGe11OC-{&IUG7bZlxd!ZKe#QTv zOOX!PE7bz#xxc|XtnlN2AlW#;r`3dIRj{lI#$Mp$T}xgV@E*$wA3){i2Qk}fwL^Aq z$x_2>_Z|nasaaR#4xs9Yal1#V_}_K0fNWm3OzcM$rII93g)bua&b2liUh?I?AX&^&`ePhB*87UDP84|Xb7NFCc66}<_{}`wMSsXF!b+v?uLnd)satsOZ zAA5vhg#XxM9eX5k!sziM)Fi>56m%y;wgaDO*f&Rjl-2s~lZ@NESa!BsVUD~OSmCOI z&xcI1z5{R@BhoW@;N#g^RPo-nZm zbW(Ql=dr#a!=3~0eI-%pbA5mJ7H`zUGoaWbK?Qm%3c5s&neF2xk=D{jEPV{X6Uoth z%*$H4L#Z^w`cZ{EV!nDgX(Wa6>TOd}Sb&;sMNFU)2BpV#uc$Bk~krW zlM}ECVn)L@XniGH0Bc=0KonFh>C+X052eQ!)qs4EFnQpgEC7E@2RA>bs>U34H*Qha zlorh$%mUDYdb_B>3$&Qn^X7zQpVD8nWQ5%TQh$#xKGxK%9;`@jy9CJ$Fbj+eqGqDA)I`h(09yt|}sJBwpw}CC1g(Z+gLc1bFEr3TvNMu7)L`YE? zI5&VSs@lac04_w@V&XyR;i-a{E|I7hl%8YZPEXKjXk80hr+=%MN$fMBWP$J4HVh;D zNuj|=kAxl*G14+XM0ACqD}-MC_lsHzWNY?Hv0C4;d8e4?TlyRGne(Lqn1FcbKy=K+ zO|YeuCoYB6#}E2T=St+|)Jckc{`O>{`eTbb&s(-MztzM|=~8t@4uI#}23Da1^Rg
$$2elp$rRa-JTJs zgvbEiF{FqLFa-e$&w%uhcs#5c(x>wT|FER&j2Rpxn@$9WCFSUXCkIK&j&gLtEU3=f zQZR(9V6T*6yCHr#IeBgvMhqv~aKo$Fe!sn?-{U*N|9Vwz~@C#&z*(ql*=4kU3x z5ew};JgVIFMHvueiv3*|Ur7|6_J_0e34jCDX|ZtAN8T&N;2;@?0r?5f=U+VI zWdVQw=Wn_HZi$+w_@tmy{hs_ynqhqNcFX@PZB%1#rlA1V9lND3wr%4T0(y z9p5?o{aPT~Vn;EWz`bU~cNbBvE=2eALx9)=9ho< zAt-p8-Ld(8!>gCSpg+0b^B2$Aj;Bn}MUJYfrGS+K_WFm?w#8ACURQBGNHS<~TRSp0!?EqyrAS_ayy}2C)UK1EsyK0umuXL_lGrL*W3NR*mO2{a_2=2A}~tQN}?k zgaNWo)$)aH)z6QrmT@MLBvJH90H6LqWy@N#*DEV2ltc*aPDm9K3C+SG5FaY4c+~=N zzTWU*4WnU1A-bfQ)_xDd3d#v7C9tteS5rmHS=dS-_b5UF6j^7;;BZ&37nC9;1VYGC zR%=NZDiWpN$L>V!BX9~N4v1?sxeT*_BK|aRkKKYMm_PF?f-qn?NLap05z{3M;PG$% z8uR-#v(JeudtYC` zM`^&Vi0I;hlukbQjfI>mW1H)~xgMQiTMO=};ZC&5(aNif9QeApL8j$|s2m$>NfEiy zb`Tdty$MQ{2%(Qm0TIQ!lyJO7aN!R3Y}cgb%hy254WQA$%yNiB15!w{6hGdPX7%Dn z+i?1M#37+^GE(br8b`wd+9+kf?jSve1gt42;=%#ES&se`6ALQG#8Ip$O3lW1%LNzz zMoWr*`kILk#bd!h8+-inuRcU(&-hU4?{~I%0Au)kGIRhQO>5m6BpV0XrX0}HV$NZ; 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 -1) + + def testDuplicateSlot(self): + mo = MyObject.staticMetaObject + self.assertEqual(mo.indexOfSignal('destroyed(void)'), -1) + self.assertTrue(mo.indexOfSignal('destroyed()') > -1) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/static_method_test.py b/sources/pyside2/tests/QtCore/static_method_test.py new file mode 100644 index 0000000..28189df --- /dev/null +++ b/sources/pyside2/tests/QtCore/static_method_test.py @@ -0,0 +1,84 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for overloads involving static and non-static versions of a method.''' + +import os +import unittest + +from PySide2.QtCore import QFile + +class StaticNonStaticMethodsTest(unittest.TestCase): + '''Test cases for overloads involving static and non-static versions of a method.''' + + def setUp(self): + filename = 'somefile%d.txt' % os.getpid() + self.existing_filename = os.path.join(os.path.curdir, filename) + self.delete_file = False + if not os.path.exists(self.existing_filename): + f = open(self.existing_filename, 'w') + for line in range(10): + f.write('sbrubbles\n') + f.close() + self.delete_file = True + + self.non_existing_filename = os.path.join(os.path.curdir, 'inexistingfile.txt') + i = 0 + while os.path.exists(self.non_existing_filename): + i += 1 + filename = 'inexistingfile-%d.txt' % i + self.non_existing_filename = os.path.join(os.path.curdir, filename) + + def tearDown(self): + if self.delete_file: + os.remove(self.existing_filename) + + def testCallingStaticMethodWithClass(self): + '''Call static method using class.''' + self.assertTrue(QFile.exists(self.existing_filename)) + self.assertFalse(QFile.exists(self.non_existing_filename)) + + def testCallingStaticMethodWithInstance(self): + '''Call static method using instance of class.''' + f = QFile(self.non_existing_filename) + self.assertTrue(f.exists(self.existing_filename)) + self.assertFalse(f.exists(self.non_existing_filename)) + + def testCallingInstanceMethod(self): + '''Call instance method.''' + f1 = QFile(self.non_existing_filename) + self.assertFalse(f1.exists()) + f2 = QFile(self.existing_filename) + self.assertTrue(f2.exists()) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/thread_signals_test.py b/sources/pyside2/tests/QtCore/thread_signals_test.py new file mode 100644 index 0000000..18e2897 --- /dev/null +++ b/sources/pyside2/tests/QtCore/thread_signals_test.py @@ -0,0 +1,61 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test case for QObject.signalsBlocked() and blockSignal()''' + +import unittest +import os +from tempfile import mkstemp + +from PySide2.QtCore import QObject, SIGNAL, QFile, QThread, QTimer, Qt +from helper import UsesQCoreApplication + +class MyThread(QThread): + + def run(self): + self.emit(SIGNAL("test(const QString&)"), "INdT - PySide"); + +class TestThreadSignal(UsesQCoreApplication): + + __called__ = True + def _callback(self, msg): + self.assertEqual(msg, "INdT - PySide") + self.__called__ = True + self.app.quit() + + def testThread(self): + t = MyThread() + QObject.connect(t, SIGNAL("test(const QString&)"), self._callback); + t.start() + + self.app.exec_() + t.wait() + self.assertTrue(self.__called__); + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtCore/tr_noop_test.py b/sources/pyside2/tests/QtCore/tr_noop_test.py new file mode 100644 index 0000000..42cf4a5 --- /dev/null +++ b/sources/pyside2/tests/QtCore/tr_noop_test.py @@ -0,0 +1,76 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +import sys +from PySide2.QtCore import QT_TR_NOOP, QT_TR_NOOP_UTF8 +from PySide2.QtCore import QT_TRANSLATE_NOOP, QT_TRANSLATE_NOOP3, QT_TRANSLATE_NOOP_UTF8 + +class QtTrNoopTest(unittest.TestCase): + + def setUp(self): + self.txt = 'Cthulhu fhtag!' + + def tearDown(self): + del self.txt + + def testQtTrNoop(self): + refcnt = sys.getrefcount(self.txt) + result = QT_TR_NOOP(self.txt) + self.assertEqual(result, self.txt) + self.assertEqual(sys.getrefcount(result), refcnt + 1) + + def testQtTrNoopUtf8(self): + refcnt = sys.getrefcount(self.txt) + result = QT_TR_NOOP_UTF8(self.txt) + self.assertEqual(result, self.txt) + self.assertEqual(sys.getrefcount(result), refcnt + 1) + + def testQtTranslateNoop(self): + refcnt = sys.getrefcount(self.txt) + result = QT_TRANSLATE_NOOP(None, self.txt) + self.assertEqual(result, self.txt) + self.assertEqual(sys.getrefcount(result), refcnt + 1) + + def testQtTranslateNoopUtf8(self): + refcnt = sys.getrefcount(self.txt) + result = QT_TRANSLATE_NOOP_UTF8(self.txt) + self.assertEqual(result, self.txt) + self.assertEqual(sys.getrefcount(result), refcnt + 1) + + def testQtTranslateNoop3(self): + refcnt = sys.getrefcount(self.txt) + result = QT_TRANSLATE_NOOP3(None, self.txt, None) + self.assertEqual(result, self.txt) + self.assertEqual(sys.getrefcount(result), refcnt + 1) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/translation_test.py b/sources/pyside2/tests/QtCore/translation_test.py new file mode 100644 index 0000000..90eda06 --- /dev/null +++ b/sources/pyside2/tests/QtCore/translation_test.py @@ -0,0 +1,85 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests to test QTranslator and translation in general.''' + +import os +import unittest +import py3kcompat as py3k +from PySide2.QtCore import QObject, QTranslator, QCoreApplication + +from helper import UsesQCoreApplication + +class TranslationTest(UsesQCoreApplication): + '''Test case for Qt translation facilities.''' + + def setUp(self): + super(TranslationTest, self).setUp() + self.trdir = os.path.join(os.path.dirname(__file__), 'translations') + + def testLatin(self): + #Set string value to Latin + translator = QTranslator() + translator.load(os.path.join(self.trdir, 'trans_latin.qm')) + self.app.installTranslator(translator) + + obj = QObject() + obj.setObjectName(obj.tr('Hello World!')) + self.assertEqual(obj.objectName(), py3k.unicode_('Orbis, te saluto!')) + + def testRussian(self): + #Set string value to Russian + translator = QTranslator() + translator.load(os.path.join(self.trdir, 'trans_russian.qm')) + self.app.installTranslator(translator) + + obj = QObject() + obj.setObjectName(obj.tr('Hello World!')) + self.assertEqual(obj.objectName(), py3k.unicode_('привет мир!')) + + def testUtf8(self): + translator = QTranslator() + translator.load(os.path.join(self.trdir, 'trans_russian.qm')) + self.app.installTranslator(translator) + + obj = QObject() + obj.setObjectName(obj.tr('Hello World!')) + self.assertEqual(obj.objectName(), py3k.unicode_('привет мир!')) + + def testTranslateWithNoneDisambiguation(self): + value = 'String here' + obj = QCoreApplication.translate('context', value, None) + self.assertTrue(isinstance(obj, py3k.unicode)) + self.assertEqual(obj, value) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/translations/trans_latin.qm b/sources/pyside2/tests/QtCore/translations/trans_latin.qm new file mode 100644 index 0000000000000000000000000000000000000000..efdbee8c7e97a5f67f6c311e8db83e3e6af41c7e GIT binary patch literal 125 zcmcE7ks@*G{hX<16=n7(EZlq7iGhKEgVF0?A&_Rs1Y$2{Afd$I&rrmW1QaM{&|y$u zC}BtilEn;(3^@#?KwdtBA_qtV8xZq&q~_%0D}?74<)kRG0|nRv{gbj%lS>#oK(d02 Pe>J)POEUb`;SvS_pims1 literal 0 HcmV?d00001 diff --git a/sources/pyside2/tests/QtCore/translations/trans_latin.ts b/sources/pyside2/tests/QtCore/translations/trans_latin.ts new file mode 100644 index 0000000..b9fcf41 --- /dev/null +++ b/sources/pyside2/tests/QtCore/translations/trans_latin.ts @@ -0,0 +1,11 @@ + + + + + QObject + + Hello World! + Orbis, te saluto! + + + diff --git a/sources/pyside2/tests/QtCore/translations/trans_russian.qm b/sources/pyside2/tests/QtCore/translations/trans_russian.qm new file mode 100644 index 0000000000000000000000000000000000000000..5f16552a79158e60f0229d10240d073b745c6be8 GIT binary patch literal 114 zcmcE7ks@*G{hX<16=n7(EZlq7iGhKEgVF0?A&_Rs1Y$d8AR)$L&*H#h!D7T>%HqVJ zz+wYrJ1{76fE2L-F^@-TPENi;cz#h%iXuBufIZMZDJwO(gs}t2;T2^3tI7Rego)*^ H4wo + + + + QObject + + Hello World! + привет мир! + + + diff --git a/sources/pyside2/tests/QtCore/unaryoperator_test.py b/sources/pyside2/tests/QtCore/unaryoperator_test.py new file mode 100644 index 0000000..ea5813a --- /dev/null +++ b/sources/pyside2/tests/QtCore/unaryoperator_test.py @@ -0,0 +1,67 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests the presence of unary operator __neg__ on the QPoint class''' + +import unittest + +from PySide2.QtCore import QPoint + +class NegUnaryOperatorTest(unittest.TestCase): + '''Tests the presence of unary operator __neg__ on the QPoint class''' + + def setUp(self): + #Acquire resources + self.x, self.y = 10, 20 + self.neg_x, self.neg_y = -self.x, -self.y + self.qpoint = QPoint(self.x, self.y) + + def tearDown(self): + #Release resources + del self.qpoint + del self.x + del self.y + del self.neg_x + del self.neg_y + + def testNegUnaryOperator(self): + #Test __neg__ unary operator on QPoint class + __neg__method_exists = True + try: + neg_qpoint = -self.qpoint + except: + __neg__method_exists = False + + self.assertTrue(__neg__method_exists) + self.assertEqual(self.qpoint, -neg_qpoint) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/unicode_test.py b/sources/pyside2/tests/QtCore/unicode_test.py new file mode 100644 index 0000000..6fa169a --- /dev/null +++ b/sources/pyside2/tests/QtCore/unicode_test.py @@ -0,0 +1,63 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QString conversion to/from Python Unicode''' + +import unittest +import py3kcompat as py3k + +from PySide2.QtCore import QObject +from PySide2.QtCore import QByteArray + +class UnicodeConversion(unittest.TestCase): + '''Test case for QString to/from Python Unicode conversion''' + + def setUp(self): + pass + + def tearDown(self): + pass + + def testSetRegularStringRetrieveUnicode(self): + #Set regular Python string retrieve unicode + obj = QObject() + obj.setObjectName('test') + self.assertEqual(obj.objectName(), py3k.unicode_('test')) + + def testSetUnicodeRetrieveUnicode(self): + #Set Python unicode string and retrieve unicode + obj = QObject() + obj.setObjectName(py3k.unicode_('ümlaut')) + self.assertEqual(obj.objectName(), py3k.unicode_('ümlaut')) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtCore/versioninfo_test.py b/sources/pyside2/tests/QtCore/versioninfo_test.py new file mode 100644 index 0000000..6fff971 --- /dev/null +++ b/sources/pyside2/tests/QtCore/versioninfo_test.py @@ -0,0 +1,48 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import PySide2 + +class TestVersionInfo(unittest.TestCase): + def testIt(self): + + v = PySide2.__version_info__ + self.assertEqual(type(v), tuple) + self.assertEqual(len(v), 5) + self.assertEqual(type(v[0]), int) + self.assertEqual(type(v[1]), int) + self.assertEqual(type(v[2]), int) + self.assertEqual(type(v[3]), str) + self.assertEqual(type(v[4]), str) + + self.assertEqual(type(PySide2.__version__), str) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtDataVisualization/CMakeLists.txt b/sources/pyside2/tests/QtDataVisualization/CMakeLists.txt new file mode 100644 index 0000000..61b3472 --- /dev/null +++ b/sources/pyside2/tests/QtDataVisualization/CMakeLists.txt @@ -0,0 +1 @@ +PYSIDE_TEST(datavisualization_test.py) diff --git a/sources/pyside2/tests/QtDataVisualization/datavisualization_test.py b/sources/pyside2/tests/QtDataVisualization/datavisualization_test.py new file mode 100644 index 0000000..baef03f --- /dev/null +++ b/sources/pyside2/tests/QtDataVisualization/datavisualization_test.py @@ -0,0 +1,85 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QtDataVisualization''' + +from helper import UsesQGuiApplication +from PySide2.QtCore import QTimer +from PySide2.QtDataVisualization import QtDataVisualization +import unittest + +def dataToBarDataRow(data): + result = [] + for d in data: + result.append(QtDataVisualization.QBarDataItem(d)) + return result + +def dataToBarDataArray(data): + result = [] + for row in data: + result.append(dataToBarDataRow(row)) + return result + +class QtDataVisualizationTestCase(UsesQGuiApplication): + '''Tests related to QtDataVisualization''' + + def testBars(self): + self.bars = QtDataVisualization.Q3DBars() + self.columnAxis = QtDataVisualization.QCategory3DAxis() + self.columnAxis.setTitle('Columns') + self.columnAxis.setTitleVisible(True) + self.columnAxis.setLabels(['Column1', 'Column2']) + + self.rowAxis = QtDataVisualization.QCategory3DAxis() + self.rowAxis.setTitle('Rows') + self.rowAxis.setTitleVisible(True) + self.rowAxis.setLabels(['Row1', 'Row2']) + + self.valueAxis = QtDataVisualization.QValue3DAxis() + self.valueAxis.setTitle('Values') + self.valueAxis.setTitleVisible(True) + self.valueAxis.setRange(0, 5); + + self.bars.setRowAxis(self.rowAxis) + self.bars.setColumnAxis(self.columnAxis) + self.bars.setValueAxis(self.valueAxis) + + self.series = QtDataVisualization.QBar3DSeries() + self.arrayData = [[1, 2], [3, 4]] + self.series.dataProxy().addRows(dataToBarDataArray(self.arrayData)) + + self.bars.setPrimarySeries(self.series) + + self.bars.show() + QTimer.singleShot(500, self.app.quit) + self.app.exec_() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtDesigner/CMakeLists.txt b/sources/pyside2/tests/QtDesigner/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/QtDesigner/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/QtGui/CMakeLists.txt b/sources/pyside2/tests/QtGui/CMakeLists.txt new file mode 100644 index 0000000..3174765 --- /dev/null +++ b/sources/pyside2/tests/QtGui/CMakeLists.txt @@ -0,0 +1,48 @@ +#Keep this in alphabetical sort + +PYSIDE_TEST(bug_300_test.py) +PYSIDE_TEST(bug_367.py) +PYSIDE_TEST(bug_480.py) +PYSIDE_TEST(bug_606.py) +PYSIDE_TEST(bug_617.py) +PYSIDE_TEST(bug_652.py) +PYSIDE_TEST(bug_660.py) +PYSIDE_TEST(bug_716.py) +PYSIDE_TEST(bug_740.py) +PYSIDE_TEST(bug_743.py) +PYSIDE_TEST(bug_991.py) +PYSIDE_TEST(bug_1091.py) +PYSIDE_TEST(bug_PYSIDE-41.py) +PYSIDE_TEST(bug_PYSIDE-344.py) +PYSIDE_TEST(deepcopy_test.py) +PYSIDE_TEST(float_to_int_implicit_conversion_test.py) +PYSIDE_TEST(pyside_reload_test.py) +PYSIDE_TEST(qcolor_test.py) +PYSIDE_TEST(qcolor_reduce_test.py) +PYSIDE_TEST(qcursor_test.py) +PYSIDE_TEST(qdatastream_gui_operators_test.py) +PYSIDE_TEST(qdesktopservices_test.py) +PYSIDE_TEST(qfontmetrics_test.py) +PYSIDE_TEST(qguiapplication_test.py) +PYSIDE_TEST(qicon_test.py) +PYSIDE_TEST(qitemselection_test.py) +PYSIDE_TEST(qmatrix_test.py) +PYSIDE_TEST(qopenglbuffer_test.py) +PYSIDE_TEST(qpainter_test.py) +PYSIDE_TEST(qpdfwriter_test.py) +PYSIDE_TEST(qpixelformat_test.py) +PYSIDE_TEST(qpixmap_test.py) +PYSIDE_TEST(qpixmapcache_test.py) +PYSIDE_TEST(qpolygonf_test.py) +PYSIDE_TEST(qkeysequence_test.py) +PYSIDE_TEST(qradialgradient_test.py) +PYSIDE_TEST(qrasterwindow_test.py) +PYSIDE_TEST(qopenglwindow_test.py) +PYSIDE_TEST(qregion_test.py) +PYSIDE_TEST(qstylehints_test.py) +PYSIDE_TEST(qtextdocument_undoredo_test.py) +PYSIDE_TEST(qtextdocumentwriter_test.py) +PYSIDE_TEST(qtextline_test.py) +PYSIDE_TEST(qtransform_test.py) +PYSIDE_TEST(repr_test.py) +PYSIDE_TEST(timed_app_test.py) diff --git a/sources/pyside2/tests/QtGui/bug_1091.py b/sources/pyside2/tests/QtGui/bug_1091.py new file mode 100644 index 0000000..28f7d9b --- /dev/null +++ b/sources/pyside2/tests/QtGui/bug_1091.py @@ -0,0 +1,40 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' unit test for BUG #1091 ''' + +import unittest +from PySide2 import QtGui + +class QPainterTestCase(unittest.TestCase): + def testIt(self): + self.assertTrue("PixmapFragment" in dir(QtGui.QPainter)) + self.assertTrue("drawPixmapFragments" in dir(QtGui.QPainter)) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtGui/bug_300_test.py b/sources/pyside2/tests/QtGui/bug_300_test.py new file mode 100644 index 0000000..c2c1bc9 --- /dev/null +++ b/sources/pyside2/tests/QtGui/bug_300_test.py @@ -0,0 +1,44 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import QModelIndex, QStringListModel +import unittest + +class TestQAbstractItemModelSignals(unittest.TestCase): + def sigCallback(self, index, r, c): + self._called = True + + def testSignals(self): + self._called = False + m = QStringListModel() + m.rowsAboutToBeInserted[QModelIndex,int,int].connect(self.sigCallback) + m.insertRows(0, 3) + self.assertTrue(self._called) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/bug_367.py b/sources/pyside2/tests/QtGui/bug_367.py new file mode 100644 index 0000000..8f03d95 --- /dev/null +++ b/sources/pyside2/tests/QtGui/bug_367.py @@ -0,0 +1,50 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test bug 367: http://bugs.openbossa.org/show_bug.cgi?id=367''' + +import sys +import unittest +from helper import UsesQApplication +from PySide2 import QtCore,QtGui + +class BugTest(UsesQApplication): + def testCase(self): + model = QtGui.QStandardItemModel() + parentItem = model.invisibleRootItem() + for i in range(10): + item = QtGui.QStandardItem() + rcount = sys.getrefcount(item) + parentItem.appendRow(item) + self.assertEqual(rcount+1, sys.getrefcount(item)) + parentItem = item + + self.assertTrue(True) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/bug_480.py b/sources/pyside2/tests/QtGui/bug_480.py new file mode 100644 index 0000000..506dbf5 --- /dev/null +++ b/sources/pyside2/tests/QtGui/bug_480.py @@ -0,0 +1,53 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2 import QtWidgets + +class BuggyWidget(QtWidgets.QWidget): + def setup(self): + self.verticalLayout = QtWidgets.QVBoxLayout(self) + self.gridLayout = QtWidgets.QGridLayout() + self.lbl = QtWidgets.QLabel(self) + self.gridLayout.addWidget(self.lbl, 0, 1, 1, 1) + + # this cause a segfault during the ownership transfer + self.verticalLayout.addLayout(self.gridLayout) + +class LayoutTransferOwnerShip(unittest.TestCase): + def testBug(self): + app = QtWidgets.QApplication([]) + w = BuggyWidget() + w.setup() + w.show() + self.assertTrue(True) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtGui/bug_606.py b/sources/pyside2/tests/QtGui/bug_606.py new file mode 100644 index 0000000..6f01b57 --- /dev/null +++ b/sources/pyside2/tests/QtGui/bug_606.py @@ -0,0 +1,54 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +import PySide2 +from PySide2.QtGui import QVector2D, QVector3D, QVector4D +from PySide2.QtGui import QColor + +class testCases(unittest.TestCase): + def testQVector2DToTuple(self): + vec = QVector2D(1, 2) + self.assertEqual((1, 2), vec.toTuple()) + + def testQVector3DToTuple(self): + vec = QVector3D(1, 2, 3) + self.assertEqual((1, 2, 3), vec.toTuple()) + + def testQVector4DToTuple(self): + vec = QVector4D(1, 2, 3, 4) + self.assertEqual((1, 2, 3, 4), vec.toTuple()) + + def testQColorToTuple(self): + c = QColor(0, 0, 255) + c.setRgb(1, 2, 3) + self.assertEqual((1, 2, 3, 255), c.toTuple()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/bug_617.py b/sources/pyside2/tests/QtGui/bug_617.py new file mode 100644 index 0000000..370d646 --- /dev/null +++ b/sources/pyside2/tests/QtGui/bug_617.py @@ -0,0 +1,49 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import QEvent +from PySide2.QtGui import QColor +import unittest + +class MyEvent(QEvent): + def __init__(self): + QEvent.__init__(self, QEvent.Type(999)) + + +class Bug617(unittest.TestCase): + def testRepr(self): + c = QColor.fromRgb(1, 2, 3, 4) + s = c.spec() + self.assertEqual(repr(s), repr(QColor.Rgb)) + + def testOutOfBounds(self): + e = MyEvent() + self.assertEqual(repr(e.type()), 'PySide2.QtCore.QEvent.Type(999)') + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtGui/bug_652.py b/sources/pyside2/tests/QtGui/bug_652.py new file mode 100644 index 0000000..92b2d5a --- /dev/null +++ b/sources/pyside2/tests/QtGui/bug_652.py @@ -0,0 +1,58 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtGui import * + +class MyData(QTextBlockUserData): + def __init__(self, data): + QTextBlockUserData.__init__(self) + self.data = data + + def getMyNiceData(self): + return self.data + +class TestBug652(unittest.TestCase): + """Segfault when using QTextBlock::setUserData due to missing ownership transfer""" + def testIt(self): + td = QTextDocument() + tc = QTextCursor(td) + tc.insertText("Hello world") + heyHo = "hey ho!" + tc.block().setUserData(MyData(heyHo)) + self.assertEqual(type(tc.block().userData()), MyData) + self.assertEqual(tc.block().userData().getMyNiceData(), heyHo) + + del tc + tc = QTextCursor(td) + blk = tc.block() + self.assertEqual(type(blk.userData()), MyData) + self.assertEqual(blk.userData().getMyNiceData(), heyHo) + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/sources/pyside2/tests/QtGui/bug_660.py b/sources/pyside2/tests/QtGui/bug_660.py new file mode 100644 index 0000000..e19835a --- /dev/null +++ b/sources/pyside2/tests/QtGui/bug_660.py @@ -0,0 +1,55 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import py3kcompat as py3k +from PySide2.QtGui import QStandardItemModel, QStandardItem + +class MyItemModel(QStandardItemModel): + def __init__(self,parent=None): + super(MyItemModel,self).__init__(parent) + self.appendRow([QStandardItem('Item 1'),]) + + def mimeTypes(self): + mtypes = super(MyItemModel,self).mimeTypes() + mtypes.append(py3k.unicode_('application/my-form')) + return mtypes + + def mimeData(self,indexes): + self.__mimedata = super(MyItemModel,self).mimeData(indexes) + self.__mimedata.setData(py3k.unicode_('application/my-form'), py3k.b('hi')) + return self.__mimedata + +class TestBug660(unittest.TestCase): + '''QMimeData type deleted prematurely when overriding mime-type in QStandardItemModel drag and drop''' + def testIt(self): + model = MyItemModel() + model.mimeData([model.index(0, 0)]) # if it doesn't raise an exception it's all right! + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/bug_716.py b/sources/pyside2/tests/QtGui/bug_716.py new file mode 100644 index 0000000..f297394 --- /dev/null +++ b/sources/pyside2/tests/QtGui/bug_716.py @@ -0,0 +1,36 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import Qt, QPersistentModelIndex, QStringListModel + +if __name__ == '__main__': + stringListModel = QStringListModel(['one', 'two']) + idx = stringListModel.index(1, 0) + persistentModelIndex = QPersistentModelIndex(idx) + stringListModel.data(persistentModelIndex, Qt.DisplayRole) + diff --git a/sources/pyside2/tests/QtGui/bug_740.py b/sources/pyside2/tests/QtGui/bug_740.py new file mode 100644 index 0000000..5ea45e7 --- /dev/null +++ b/sources/pyside2/tests/QtGui/bug_740.py @@ -0,0 +1,41 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import py3kcompat as py3k +from helper import UsesQApplication +from PySide2.QtCore import QSize +from PySide2.QtGui import QBitmap, QImage + +class TestQBitmap(UsesQApplication): + def testFromDataMethod(self): + dataBits = py3k.b('\x38\x28\x38\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\xfe\xfe\x7c\x7c\x38\x38\x10\x10') + bim = QBitmap.fromData(QSize(8, 48), dataBits, QImage.Format_Mono) # missing function + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/bug_743.py b/sources/pyside2/tests/QtGui/bug_743.py new file mode 100644 index 0000000..75933ae --- /dev/null +++ b/sources/pyside2/tests/QtGui/bug_743.py @@ -0,0 +1,43 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtGui import QMatrix4x4 + +class TestQMatrix(unittest.TestCase): + def testOperator(self): + m = QMatrix4x4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) + v = 1 + for x in range(4): + for y in range(4): + self.assertEqual(m[x,y], v) + v += 1 + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/bug_991.py b/sources/pyside2/tests/QtGui/bug_991.py new file mode 100644 index 0000000..43af083 --- /dev/null +++ b/sources/pyside2/tests/QtGui/bug_991.py @@ -0,0 +1,43 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QObject +from PySide2.QtGui import QPen, QBrush + +class TestBug991 (unittest.TestCase): + def testReprFunction(self): + reprPen = repr(QPen()) + self.assertTrue(reprPen.startswith("> QPixmap''' + + def setUp(self): + super(QPixmapQDatastream, self).setUp() + self.source_pixmap = QPixmap(100, 100) + self.source_pixmap.fill(Qt.red) + self.output_pixmap = QPixmap() + self.buffer = QByteArray() + self.read_stream = QDataStream(self.buffer, QIODevice.ReadOnly) + self.write_stream = QDataStream(self.buffer, QIODevice.WriteOnly) + + def testStream(self): + self.write_stream << self.source_pixmap + + self.read_stream >> self.output_pixmap + + image = self.output_pixmap.toImage() + pixel = image.pixel(10,10) + self.assertEqual(pixel, QColor(Qt.red).rgba()) + self.assertEqual(self.source_pixmap.toImage(), self.output_pixmap.toImage()) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qdesktopservices_test.py b/sources/pyside2/tests/QtGui/qdesktopservices_test.py new file mode 100644 index 0000000..e3c2671 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qdesktopservices_test.py @@ -0,0 +1,43 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QDesktopServices''' + +import unittest + +from PySide2.QtGui import QDesktopServices +from PySide2.QtCore import QUrl + +class QDesktopServicesTest(unittest.TestCase): + def testOpenUrl(self): + # At the bare minimum check that they return false for invalid url's + url = QUrl() + self.assertEqual(QDesktopServices.openUrl(url), False) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qfontmetrics_test.py b/sources/pyside2/tests/QtGui/qfontmetrics_test.py new file mode 100644 index 0000000..4390678 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qfontmetrics_test.py @@ -0,0 +1,226 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests for inject codes and modifications on QFontMetrics + and QFontMetricsF''' + +import unittest +from PySide2.QtGui import QFont, QFontMetrics, QFontMetricsF +from PySide2.QtCore import QRect, QRectF, Qt, QSize, QSizeF +from helper import UsesQApplication + + +class QFontMetricsTest(UsesQApplication): + '''Base class for QFontMetrics tests''' + + def setUp(self): + super(QFontMetricsTest, self).setUp() + self.font = QFont() + self.metrics = QFontMetrics(self.font) + + def tearDown(self): + del self.metrics + del self.font + super(QFontMetricsTest, self).tearDown() + + +class BoundingRectTest(QFontMetricsTest): + '''Tests for QFontMetrics.boundingRect inject code''' + + def testIntDefault(self): + '''QFontMetrics.boundingRect(int, int, int, int, ...) - default args''' + rect = self.metrics.boundingRect(0, 0, 0, 0, + Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT') + self.assertTrue(isinstance(rect, QRect)) + + def testIntWithArg(self): + '''QFontMetrics.boundingRect(int, int, int, int, ...) - single arg''' + rect = self.metrics.boundingRect(0, 0, 0, 0, + Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT', 2) + self.assertTrue(isinstance(rect, QRect)) + + def testIntWithFull(self): + '''QFontMetrics.boundingRect(int, int, int, int, ...) - all argss''' + rect = self.metrics.boundingRect(0, 0, 0, 0, + Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT', 20, [1, 2, 3, 4, 5]) + self.assertTrue(isinstance(rect, QRect)) + + def testIntTypeError(self): + '''QFontMetrics.boundingRect(int, int, int, int, ...) - type error''' + self.assertRaises(TypeError, self.metrics.boundingRect, 0, 0, 0, 0, + Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT', 20, ['aaaa', 'ase']) + + def testQRectDefault(self): + '''QFontMetrics.boundingRect(QRect, ...) - default args''' + arg = QRect(0, 0, 100, 200) + rect = self.metrics.boundingRect(arg, Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT') + self.assertTrue(isinstance(rect, QRect)) + + def testQRectWithArg(self): + '''QFontMetrics.boundingRect(QRect, ...) - only tabstops''' + arg = QRect(0, 0, 100, 200) + rect = self.metrics.boundingRect(arg, Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT', 2) + self.assertTrue(isinstance(rect, QRect)) + + def testQRectWithFull(self): + '''QFontMetrics.boundingRect(QRect, ...) - all arguments''' + arg = QRect(0, 0, 100, 200) + rect = self.metrics.boundingRect(arg, Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT', 20, + [1, 2, 3, 4, 5]) + self.assertTrue(isinstance(rect, QRect)) + + def testQRectTypeError(self): + '''QFontMetrics.boundingRect(QRect, ...) - type error''' + arg = QRect(0, 0, 100, 200) + self.assertRaises(TypeError, self.metrics.boundingRect, arg, + Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT', 20, ['aaaa', 'ase']) + + +class SizeTest(QFontMetricsTest): + '''Tests for QFontMetrics.size inject code''' + + def testDefault(self): + '''QFontMetrics.size - default arguments''' + size = self.metrics.size(Qt.TextExpandTabs | Qt.TextSingleLine, + 'PySide by INdT') + self.assertTrue(isinstance(size, QSize)) + + def testWithTabStops(self): + '''QFontMetrics.size - only tabstops''' + size = self.metrics.size(Qt.TextExpandTabs | Qt.TextSingleLine, + 'PySide by INdT', 2) + self.assertTrue(isinstance(size, QSize)) + + def testFull(self): + '''QFontMetrics.size - all arguments''' + size = self.metrics.size(Qt.TextExpandTabs | Qt.TextSingleLine, + 'PySide by INdT', 2, [1, 2, 3, 4]) + self.assertTrue(isinstance(size, QSize)) + + def testTypeError(self): + '''QFontMetrics.size - type error''' + self.assertRaises(TypeError, self.metrics.size, + Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT', 20, ['aaaa', 'ase']) + + +class QFontMetricsFTest(UsesQApplication): + '''Base class for QFontMetrics tests''' + + def setUp(self): + super(QFontMetricsFTest, self).setUp() + self.font = QFont() + self.metrics = QFontMetricsF(self.font) + + def tearDown(self): + del self.metrics + del self.font + super(QFontMetricsFTest, self).tearDown() + + +class FBoundingRectTest(QFontMetricsFTest): + '''Tests for QFontMetricsF.boundingRect inject code''' + + def testQRectDefault(self): + '''QFontMetricsF.boundingRect(QRectF, ...) - default args''' + arg = QRectF(0, 0, 100, 200) + rect = self.metrics.boundingRect(arg, Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT') + self.assertTrue(isinstance(rect, QRectF)) + + def testQRectWithArg(self): + '''QFontMetricsF.boundingRect(QRectF, ...) - only tabstops''' + arg = QRectF(0, 0, 100, 200) + rect = self.metrics.boundingRect(arg, Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT', 2) + self.assertTrue(isinstance(rect, QRectF)) + + def testQRectWithFull(self): + '''QFontMetricsF.boundingRect(QRectF, ...) - all arguments''' + arg = QRectF(0, 0, 100, 200) + rect = self.metrics.boundingRect(arg, Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT', 20, + [1, 2, 3, 4, 5]) + self.assertTrue(isinstance(rect, QRectF)) + + def testQRectTypeError(self): + '''QFontMetricsF.boundingRect(QRectF, ...) - type error''' + arg = QRectF(0, 0, 100, 200) + self.assertRaises(TypeError, self.metrics.boundingRect, arg, + Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT', 20, ['aaaa', 'ase']) + + +class FSizeTest(QFontMetricsFTest): + '''Tests for QFontMetricsF.size inject code''' + + def testDefault(self): + '''QFontMetricsF.size - default arguments''' + size = self.metrics.size(Qt.TextExpandTabs | Qt.TextSingleLine, + 'PySide by INdT') + self.assertTrue(isinstance(size, QSizeF)) + + def testWithTabStops(self): + '''QFontMetricsF.size - only tabstops''' + size = self.metrics.size(Qt.TextExpandTabs | Qt.TextSingleLine, + 'PySide by INdT', 2) + self.assertTrue(isinstance(size, QSizeF)) + + def testFull(self): + '''QFontMetricsF.size - all arguments''' + size = self.metrics.size(Qt.TextExpandTabs | Qt.TextSingleLine, + 'PySide by INdT', 2, [1, 2, 3, 4]) + self.assertTrue(isinstance(size, QSizeF)) + + def testTypeError(self): + '''QFontMetricsF.size - type error''' + self.assertRaises(TypeError, self.metrics.size, + Qt.TextExpandTabs | Qt.AlignLeft, + 'PySide by INdT', 20, ['aaaa', 'ase']) + + +class QCharTest(QFontMetricsFTest): + + def testBoundingRect(self): + retCh = self.metrics.boundingRectChar('a') + self.assertEqual(type(retCh), QRectF) + + def testWith(self): + retCh = self.metrics.widthChar('a') + self.assertTrue(retCh > 0) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qguiapplication_test.py b/sources/pyside2/tests/QtGui/qguiapplication_test.py new file mode 100644 index 0000000..d1a0446 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qguiapplication_test.py @@ -0,0 +1,40 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtGui import QGuiApplication + +class TestQGuiApplication(unittest.TestCase): + def testNoArguments(self): + app = QGuiApplication() + self.assertIsInstance(app, QGuiApplication) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qicon_test.py b/sources/pyside2/tests/QtGui/qicon_test.py new file mode 100644 index 0000000..3dab7c8 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qicon_test.py @@ -0,0 +1,44 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from helper import TimedQApplication +from PySide2.QtGui import QIcon + + +class QIconCtorWithNoneTest(TimedQApplication): + '''Test made by seblin, see Bug #944: http://bugs.pyside.org/show_bug.cgi?id=944''' + + def testQIconCtorWithNone(self): + icon = QIcon(None) + pixmap = icon.pixmap(48, 48) + self.app.exec_() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qitemselection_test.py b/sources/pyside2/tests/QtGui/qitemselection_test.py new file mode 100644 index 0000000..e77813d --- /dev/null +++ b/sources/pyside2/tests/QtGui/qitemselection_test.py @@ -0,0 +1,47 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from helper import UsesQApplication +from PySide2.QtCore import QItemSelection +from PySide2.QtGui import QStandardItemModel + +class QItemSelectionTest(UsesQApplication): + def testLen(self): + model = QStandardItemModel(2, 2) + model.insertRow(0) + model.insertRow(1) + model.insertColumn(0) + model.insertColumn(1) + selection = QItemSelection(model.index(0,0), model.index(1,1)) + self.assertEqual(len(selection), 1) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtGui/qkeysequence_test.py b/sources/pyside2/tests/QtGui/qkeysequence_test.py new file mode 100644 index 0000000..a1a0d11 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qkeysequence_test.py @@ -0,0 +1,48 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import Qt +from PySide2.QtGui import QKeySequence + +from helper import UsesQApplication + +class QKeySequenceTest(UsesQApplication): + + def testGetItemOperator(self): + # bug #774 + ks = QKeySequence(Qt.SHIFT, Qt.CTRL, Qt.Key_P, Qt.Key_R) + self.assertEqual(ks[0], Qt.SHIFT) + self.assertEqual(ks[1], Qt.CTRL) + self.assertEqual(ks[2], Qt.Key_P) + self.assertEqual(ks[3], Qt.Key_R) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qmatrix_test.py b/sources/pyside2/tests/QtGui/qmatrix_test.py new file mode 100644 index 0000000..cac8a7a --- /dev/null +++ b/sources/pyside2/tests/QtGui/qmatrix_test.py @@ -0,0 +1,86 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QPoint +from PySide2.QtGui import QMatrix, QMatrix4x4 + + +def qpointTimesQMatrix(point, matrix): + '''As seen in "QPoint QMatrix::map(const QPoint &p) const" C++ implementation.''' + return QPoint(matrix.m11() * point.x() + matrix.m21() * point.y() + matrix.dx(), + matrix.m12() * point.x() + matrix.m22() * point.y() + matrix.dy()) + +class QMatrixTest(unittest.TestCase): + + def testMatrix(self): + matrix = QMatrix(11, 12, 21, 22, 100, 200) + point = QPoint(3, 3) + self.assertEqual(point * matrix, qpointTimesQMatrix(point, matrix)) + + def testMatrixWithWrongType(self): + matrix = QMatrix(11, 12, 21, 22, 100, 200) + point = QPoint(3, 3) + self.assertRaises(TypeError, matrix.__mul__, point) + + def testMatrix4x4(self): + self.assertRaises(TypeError, QMatrix4x4, [0.0, 1.0, 2.0, 3.0]) + self.assertRaises(TypeError, QMatrix4x4, [0.0, 1.0, 2.0, 'I', + 4.0, 5.0, 6.0, 7.0, + 8.0, 9.0, 'N', 11.0, + 12.0, 'd', 14.0, 'T']) + + my_data = [0.0, 1.0, 2.0, 3.0, + 4.0, 5.0, 6.0, 7.0, + 8.0, 9.0, 10.0, 11.0, + 12.0, 13.0, 14.0, 15.0] + my_datac = [0.0, 4.0, 8.0, 12.0, + 1.0, 5.0, 9.0, 13.0, + 2.0, 6.0, 10.0, 14.0, + 3.0, 7.0, 11.0, 15.0] + + m = QMatrix4x4(my_data) + d = m.data() + self.assertTrue(my_datac, d) + + d = m.copyDataTo() + self.assertTrue(my_data == list(d)) + + def testMatrixMapping(self): + m = QMatrix(1.0, 2.0, 1.0, 3.0, 100.0, 200.0) + res = m.map(5, 5) + self.assertAlmostEqual(res[0], 5 * 1.0 + 5 * 1.0 + 100.0) + self.assertAlmostEqual(res[1], 5 * 2.0 + 5 * 3.0 + 200.0) + res = m.map(5.0, 5.0) + self.assertAlmostEqual(res[0], 5.0 * 1.0 + 5.0 * 1.0 + 100.0) + self.assertAlmostEqual(res[1], 5.0 * 2.0 + 5.0 * 3.0 + 200.0) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtGui/qopenglbuffer_test.py b/sources/pyside2/tests/QtGui/qopenglbuffer_test.py new file mode 100644 index 0000000..eb11dc0 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qopenglbuffer_test.py @@ -0,0 +1,93 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit tests for QOpenGLBuffer''' + +import unittest +import ctypes +import sys + +from helper import UsesQApplication +from PySide2.QtGui import QOpenGLBuffer +from PySide2 import QtGui + +def createSurface(surfaceClass): + if surfaceClass == QtGui.QSurface.Window: + window = QtGui.QWindow() + window.setSurfaceType(QtGui.QWindow.OpenGLSurface) + window.setGeometry(0, 0, 10, 10) + window.create() + return window + elif surfaceClass == QtGui.QSurface.Offscreen: + # Create a window and get the format from that. For example, if an EGL + # implementation provides 565 and 888 configs for PBUFFER_BIT but only + # 888 for WINDOW_BIT, we may end up with a pbuffer surface that is + # incompatible with the context since it could choose the 565 while the + # window and the context uses a config with 888. + format = QtGui.QSurfaceFormat + if format.redBufferSize() == -1: + window = QtGui.QWindow() + window.setSurfaceType(QtGui.QWindow.OpenGLSurface) + window.setGeometry(0, 0, 10, 10) + window.create() + format = window.format() + offscreenSurface = QtGui.QOffscreenSurface() + offscreenSurface.setFormat(format) + offscreenSurface.create() + return offscreenSurface + return 0 + +class QOpenGLBuffer(UsesQApplication): + def testBufferCreate(self): + surface = createSurface(QtGui.QSurface.Window) + ctx = QtGui.QOpenGLContext() + ctx.create() + ctx.makeCurrent(surface) + + buf = QtGui.QOpenGLBuffer() + + self.assertTrue(not buf.isCreated()) + + self.assertTrue(buf.create()) + self.assertTrue(buf.isCreated()) + + self.assertEqual(buf.type(), QtGui.QOpenGLBuffer.VertexBuffer) + + buf.bind() + buf.allocate(128) + self.assertEqual(buf.size(), 128) + + buf.release() + + buf.destroy() + self.assertTrue(not buf.isCreated()) + + ctx.doneCurrent() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qopenglwindow_test.py b/sources/pyside2/tests/QtGui/qopenglwindow_test.py new file mode 100644 index 0000000..b20db90 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qopenglwindow_test.py @@ -0,0 +1,104 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit test for QOpenGLContext, QOpenGLTexture, QOpenGLWindow and related classes''' + +import sys +import unittest + +from helper import UsesQApplication + +from PySide2.QtCore import QSize, QTimer, Qt +from PySide2.QtGui import (QColor, QGuiApplication, QImage, QOpenGLContext, + QOpenGLTexture, QSurfaceFormat, QOpenGLWindow) + +try: + from OpenGL import GL +except ImportError: + print("Skipping test due to missing OpenGL module") + sys.exit(0) + +class OpenGLWindow(QOpenGLWindow): + def __init__(self): + super(OpenGLWindow, self).__init__() + + self.m_functions = None + self.m_texture = None + self.visibleChanged.connect(self.slotVisibleChanged) + + def slotVisibleChanged(self, visible): + if not visible and self.m_texture is not None and self.context().makeCurrent(self): + self.m_texture = None + self.context().doneCurrent() + + def initializeGL(self): + self.m_functions = self.context().functions() + self.m_functions.initializeOpenGLFunctions() + image = QImage(QSize(200, 200), QImage.Format_RGBA8888) + image.fill(QColor(Qt.red)) + self.m_texture = QOpenGLTexture(image) + + def paintGL(self): + GL.glMatrixMode(GL.GL_MODELVIEW); + GL.glLoadIdentity(); + + GL.glMatrixMode(GL.GL_PROJECTION); + GL.glLoadIdentity(); + GL.glOrtho(0, 1, 1, 0, -1, 1); + + self.m_functions.glClear(GL.GL_COLOR_BUFFER_BIT) + self.m_functions.glEnable(GL.GL_TEXTURE_2D); + self.m_texture.bind() + + d = 0.5 + GL.glBegin(GL.GL_QUADS) + GL.glTexCoord2f(0, 0) + GL.glVertex2f(0, 0) + GL.glTexCoord2f(d, 0) + GL.glVertex2f(d, 0) + GL.glTexCoord2f(d, d) + GL.glVertex2f(d, d) + GL.glTexCoord2f(0, d) + GL.glVertex2f(0, d) + GL.glEnd() + self.m_texture.release() + + def resizeGL(self, w, h): + self.m_functions.glViewport(0, 0, self.width(), self.height()) + +class QOpenGLWindowTest(UsesQApplication): + # On macOS, glClear(), glViewport() are rejected due to GLbitfield/GLint not being resolved properly + def test(self): + openGlWindow = OpenGLWindow() + openGlWindow.resize(640, 480) + openGlWindow.show() + QTimer.singleShot(100, openGlWindow.close) + self.app.exec_() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qpainter_test.py b/sources/pyside2/tests/QtGui/qpainter_test.py new file mode 100644 index 0000000..77cea83 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qpainter_test.py @@ -0,0 +1,111 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtGui import QPainter, QLinearGradient +from PySide2.QtCore import QLine, QLineF, QPoint, QPointF, QRect, QRectF, Qt + +class QPainterDrawText(unittest.TestCase): + + def setUp(self): + self.painter = QPainter() + self.text = 'teste!' + + def tearDown(self): + del self.text + del self.painter + + def testDrawText(self): + # bug #254 + rect = self.painter.drawText(100, 100, 100, 100, + Qt.AlignCenter | Qt.TextWordWrap, + self.text) + self.assertTrue(isinstance(rect, QRect)) + + def testDrawTextWithRect(self): + # bug #225 + rect = QRect(100, 100, 100, 100) + newRect = self.painter.drawText(rect, Qt.AlignCenter | Qt.TextWordWrap, + self.text) + + self.assertTrue(isinstance(newRect, QRect)) + + def testDrawTextWithRectF(self): + '''QPainter.drawText(QRectF, ... ,QRectF*) inject code''' + rect = QRectF(100, 52.3, 100, 100) + newRect = self.painter.drawText(rect, Qt.AlignCenter | Qt.TextWordWrap, + self.text) + + self.assertTrue(isinstance(newRect, QRectF)) + + def testDrawOverloads(self): + '''Calls QPainter.drawLines overloads, if something is + wrong Exception and chaos ensues. Bug #395''' + self.painter.drawLines([QLine(QPoint(0,0), QPoint(1,1))]) + self.painter.drawLines([QPoint(0,0), QPoint(1,1)]) + self.painter.drawLines([QPointF(0,0), QPointF(1,1)]) + self.painter.drawLines([QLineF(QPointF(0,0), QPointF(1,1))]) + self.painter.drawPoints([QPoint(0,0), QPoint(1,1)]) + self.painter.drawPoints([QPointF(0,0), QPointF(1,1)]) + self.painter.drawConvexPolygon([QPointF(10.0, 80.0), + QPointF(20.0, 10.0), + QPointF(80.0, 30.0), + QPointF(90.0, 70.0)]) + self.painter.drawConvexPolygon([QPoint(10.0, 80.0), + QPoint(20.0, 10.0), + QPoint(80.0, 30.0), + QPoint(90.0, 70.0)]) + self.painter.drawPolygon([QPointF(10.0, 80.0), + QPointF(20.0, 10.0), + QPointF(80.0, 30.0), + QPointF(90.0, 70.0)]) + self.painter.drawPolygon([QPoint(10.0, 80.0), + QPoint(20.0, 10.0), + QPoint(80.0, 30.0), + QPoint(90.0, 70.0)]) + self.painter.drawPolyline([QPointF(10.0, 80.0), + QPointF(20.0, 10.0), + QPointF(80.0, 30.0), + QPointF(90.0, 70.0)]) + self.painter.drawPolyline([QPoint(10.0, 80.0), + QPoint(20.0, 10.0), + QPoint(80.0, 30.0), + QPoint(90.0, 70.0)]) + +class SetBrushWithOtherArgs(unittest.TestCase): + '''Using qpainter.setBrush with args other than QBrush''' + + def testSetBrushGradient(self): + painter = QPainter() + gradient = QLinearGradient(0, 0, 0, 0) + painter.setBrush(gradient) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtGui/qpdfwriter_test.py b/sources/pyside2/tests/QtGui/qpdfwriter_test.py new file mode 100644 index 0000000..da00ff0 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qpdfwriter_test.py @@ -0,0 +1,47 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from helper import UsesQApplication +from PySide2.QtGui import QPageLayout, QPageSize, QPdfWriter, QTextDocument +from PySide2.QtCore import QDir, QMarginsF, QTemporaryFile + +class QPdfWriterTest(UsesQApplication): + + def testWrite(self): + temporaryFile = QTemporaryFile(QDir.tempPath() + "/pdfwriter_test_XXXXXX.pdf") + self.assertTrue(temporaryFile.open()) + pdfWriter = QPdfWriter(temporaryFile) + pdfWriter.setPageLayout(QPageLayout(QPageSize(QPageSize.A4), QPageLayout.Portrait, QMarginsF(10, 10, 10, 10))) + doc = QTextDocument("Some text") + doc.print_(pdfWriter) + temporaryFile.close() + self.assertTrue(temporaryFile.size() > 0) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qpixelformat_test.py b/sources/pyside2/tests/QtGui/qpixelformat_test.py new file mode 100644 index 0000000..563f36c --- /dev/null +++ b/sources/pyside2/tests/QtGui/qpixelformat_test.py @@ -0,0 +1,50 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit test for QPixelFormat''' + +import unittest + +from helper import UsesQApplication +from PySide2.QtCore import QSize, Qt +from PySide2.QtGui import QColor, QImage, QPixelFormat + +class QPixelFormatTest(UsesQApplication): + def test(self): + image = QImage(QSize(200, 200), QImage.Format_ARGB32) + image.fill(QColor(Qt.red)) + pixelFormat = image.pixelFormat() + print(pixelFormat.greenSize()) + self.assertEqual(pixelFormat.alphaSize(), 8) + self.assertEqual(pixelFormat.redSize(), 8) + self.assertEqual(pixelFormat.greenSize(), 8) + self.assertEqual(pixelFormat.blueSize(), 8) + self.assertEqual(pixelFormat.bitsPerPixel(), 32) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qpixmap_test.py b/sources/pyside2/tests/QtGui/qpixmap_test.py new file mode 100644 index 0000000..8f853a3 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qpixmap_test.py @@ -0,0 +1,85 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +import os +from helper import UsesQApplication +from PySide2.QtGui import * +from PySide2.QtCore import * + +class QPixmapTest(UsesQApplication): + def testQVariantConstructor(self): + obj = QObject() + pixmap = QPixmap() + obj.setProperty('foo', pixmap) + self.assertEqual(type(obj.property('foo')), QPixmap) + + def testQSizeConstructor(self): + pixmap = QPixmap(QSize(10,20)) + self.assertTrue(pixmap.size().height(), 20) + + def testQStringConstructor(self): + pixmap = QPixmap("Testing!") + + def testQPixmapLoadFromDataWithQFile(self): + f = QFile(os.path.join(os.path.dirname(__file__), 'sample.png')) + self.assertTrue(f.open(QIODevice.ReadOnly)) + data = f.read(f.size()) + f.close() + pixmap = QPixmap() + self.assertTrue(pixmap.loadFromData(data)) + + def testQPixmapLoadFromDataWithPython(self): + data = open(os.path.join(os.path.dirname(__file__),'sample.png'),'rb').read() + pixmap = QPixmap() + self.assertTrue(pixmap.loadFromData(data)) + + +class QPixmapToImage(UsesQApplication): + + def testFilledImage(self): + '''QPixmap.fill + toImage + image.pixel''' + pixmap = QPixmap(100, 200) + pixmap.fill(Qt.red) # Default Qt.white + + self.assertEqual(pixmap.height(), 200) + self.assertEqual(pixmap.width(), 100) + + image = pixmap.toImage() + + self.assertEqual(image.height(), 200) + self.assertEqual(image.width(), 100) + + pixel = image.pixel(10,10) + self.assertEqual(pixel, QColor(Qt.red).rgba()) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtGui/qpixmapcache_test.py b/sources/pyside2/tests/QtGui/qpixmapcache_test.py new file mode 100644 index 0000000..7a2073b --- /dev/null +++ b/sources/pyside2/tests/QtGui/qpixmapcache_test.py @@ -0,0 +1,72 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from helper import UsesQApplication +from PySide2.QtGui import QPixmapCache, QPixmap + + +class QPixmapCacheTest(UsesQApplication): + + def testWithString(self): + pm1 = QPixmap() + ok = QPixmapCache.find('img', pm1) + self.assertFalse(ok) + + self.assertEqual(QPixmapCache.find('img'), None) + + pm2 = QPixmap() + ok = QPixmapCache.insert('img', pm2) + self.assertTrue(ok) + + pm3 = QPixmap() + ok = QPixmapCache.find('img', pm3) + self.assertTrue(ok) + b1 = QPixmapCache.find('img').toImage().bits() + b2 = pm3.toImage().bits() + self.assertEqual(QPixmapCache.find('img').toImage().bits(), pm3.toImage().bits()) + + def testWithKey(self): + pm1 = QPixmap() + ok = QPixmapCache.find(QPixmapCache.Key(), pm1) + self.assertFalse(ok) + + self.assertEqual(QPixmapCache.find(QPixmapCache.Key()), None) + + pm2 = QPixmap() + key = QPixmapCache.insert(pm2) + + pm3 = QPixmap() + ok = QPixmapCache.find(key, pm3) + self.assertTrue(ok) + + self.assertEqual(QPixmapCache.find(key).toImage().bits(), pm3.toImage().bits()) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtGui/qpolygonf_test.py b/sources/pyside2/tests/QtGui/qpolygonf_test.py new file mode 100644 index 0000000..023af53 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qpolygonf_test.py @@ -0,0 +1,55 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import * +from PySide2.QtGui import * + +class QPolygonFNotIterableTest(unittest.TestCase): + """Test if a QPolygonF is iterable""" + def testIt(self): + p = QPolygonF(4) + self.assertEqual(len(p), 4) + + for i in range(0, 4): + p[i] = QPointF(float(i), float(i)) + + i = 0 + for point in p: + self.assertEqual(int(point.x()), i) + self.assertEqual(int(point.y()), i) + i += 1; + + def testPolygonShiftOperators(self): + p = QPolygon() + self.assertEqual(len(p), 0) + p << QPoint(10, 20) << QPoint(20, 30) << [QPoint(20, 30), QPoint(40, 50)] + self.assertEqual(len(p), 4) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qradialgradient_test.py b/sources/pyside2/tests/QtGui/qradialgradient_test.py new file mode 100644 index 0000000..c9f5bd8 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qradialgradient_test.py @@ -0,0 +1,57 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtGui import QRadialGradient +from PySide2.QtCore import QPointF + +class QRadialGradientConstructor(unittest.TestCase): + def _compare(self, qptf, tpl): + self.assertEqual((qptf.x(), qptf.y()), tpl) + + def _assertValues(self, grad): + self._compare(grad.center(), (1.0, 2.0)) + self._compare(grad.focalPoint(), (3.0, 4.0)) + self.assertEqual(grad.radius(), 5.0) + + def testAllInt(self): + grad = QRadialGradient(1, 2, 5, 3, 4) + self._assertValues(grad) + + def testQPointF(self): + grad = QRadialGradient(QPointF(1, 2), 5, QPointF(3, 4)) + self._assertValues(grad) + + def testSetQPointF(self): + grad = QRadialGradient() + grad.setCenter(QPointF(1, 2)) + self._compare(grad.center(), (1.0, 2.0)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qrasterwindow_test.py b/sources/pyside2/tests/QtGui/qrasterwindow_test.py new file mode 100644 index 0000000..8879821 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qrasterwindow_test.py @@ -0,0 +1,86 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit test for QBackingStore, QRasterWindow and QStaticText''' + +import unittest + +from helper import UsesQApplication +from PySide2.QtCore import QEvent, QPoint, QRect, QSize, QTimer, Qt +from PySide2.QtGui import QColor, QBackingStore, QPaintDevice, QPainter, QWindow, QPaintDeviceWindow, QRasterWindow, QRegion, QStaticText + +# QWindow rendering via QBackingStore +class TestBackingStoreWindow(QWindow): + def __init__(self): + super(TestBackingStoreWindow, self).__init__() + self.backingStore = QBackingStore(self) + self.text = QStaticText("BackingStoreWindow") + + def event(self, event): + if event.type() == QEvent.Resize: + self.backingStore.resize(self.size()) + self.render() + elif event.type() == QEvent.UpdateRequest or event.type() == QEvent.Expose: + self.backingStore.flush(QRegion(QRect(QPoint(0, 0), self.size()))) + + return QWindow.event(self, event) + + def render(self): + clientRect = QRect(QPoint(0, 0), self.size()) + painter = QPainter(self.backingStore.paintDevice()) + painter.fillRect(clientRect, QColor(Qt.green)) + painter.drawStaticText(QPoint(10, 10), self.text) + +# Window using convenience class QRasterWindow +class TestRasterWindow(QRasterWindow): + def __init__(self): + super(TestRasterWindow, self).__init__() + self.text = QStaticText("QRasterWindow") + + def paintEvent(self, event): + clientRect = QRect(QPoint(0, 0), self.size()) + painter = QPainter(self) + painter.fillRect(clientRect, QColor(Qt.red)) + painter.drawStaticText(QPoint(10, 10), self.text) + +class QRasterWindowTest(UsesQApplication): + def test(self): + rasterWindow = TestRasterWindow() + rasterWindow.setFramePosition(QPoint(100, 100)) + rasterWindow.resize(QSize(400, 400)) + rasterWindow.show() + backingStoreWindow = TestBackingStoreWindow() + backingStoreWindow.setFramePosition(QPoint(600, 100)) + backingStoreWindow.resize(QSize(400, 400)) + backingStoreWindow.show() + + QTimer.singleShot(100, self.app.quit) + self.app.exec_() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qregion_test.py b/sources/pyside2/tests/QtGui/qregion_test.py new file mode 100644 index 0000000..3d5c17c --- /dev/null +++ b/sources/pyside2/tests/QtGui/qregion_test.py @@ -0,0 +1,49 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sys + +from PySide2.QtGui import QRegion +from PySide2.QtCore import QPoint +from helper import UsesQApplication + +class QRegionTest(UsesQApplication): + + def testFunctionUnit(self): + r = QRegion(0, 0, 10, 10) + r2 = QRegion(5, 5, 10, 10) + + ru = r.united(r2) + self.assertTrue(ru.contains(QPoint(0,0))) + self.assertTrue(ru.contains(QPoint(5,5))) + self.assertTrue(ru.contains(QPoint(10,10))) + self.assertTrue(ru.contains(QPoint(14,14))) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qstylehints_test.py b/sources/pyside2/tests/QtGui/qstylehints_test.py new file mode 100644 index 0000000..1623bf7 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qstylehints_test.py @@ -0,0 +1,42 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit test for QStyleHints''' + +import unittest + +from helper import UsesQApplication +from PySide2.QtGui import QStyleHints + +class QStyleHintsTest(UsesQApplication): + def test(self): + styleHints = self.app.styleHints() + self.assertTrue(styleHints.startDragDistance() > 0) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qtextdocument_undoredo_test.py b/sources/pyside2/tests/QtGui/qtextdocument_undoredo_test.py new file mode 100644 index 0000000..ce5474b --- /dev/null +++ b/sources/pyside2/tests/QtGui/qtextdocument_undoredo_test.py @@ -0,0 +1,58 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtGui import QTextDocument, QTextCursor + +class QTextDocumentTest(unittest.TestCase): + + def testUndoRedo(self): + text = 'foobar' + doc = QTextDocument(text) + + self.assertFalse(doc.isRedoAvailable()) + self.assertTrue(doc.isUndoAvailable()) + self.assertEqual(doc.toPlainText(), text) + + cursor = QTextCursor(doc) + doc.undo(cursor) + + self.assertTrue(doc.isRedoAvailable()) + self.assertFalse(doc.isUndoAvailable()) + self.assertEqual(doc.toPlainText(), '') + + doc.redo(cursor) + + self.assertFalse(doc.isRedoAvailable()) + self.assertTrue(doc.isUndoAvailable()) + self.assertEqual(doc.toPlainText(), text) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtGui/qtextdocumentwriter_test.py b/sources/pyside2/tests/QtGui/qtextdocumentwriter_test.py new file mode 100644 index 0000000..b9d87ff --- /dev/null +++ b/sources/pyside2/tests/QtGui/qtextdocumentwriter_test.py @@ -0,0 +1,48 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtGui import QTextDocumentWriter, QTextDocument +from PySide2.QtCore import QBuffer +import py3kcompat as py3k + +class QTextDocumentWriterTest(unittest.TestCase): + + def testWrite(self): + text = 'foobar' + doc = QTextDocument(text) + b = QBuffer() + b.open(QBuffer.ReadWrite) + writer = QTextDocumentWriter(b, py3k.b("plaintext")); + writer.write(doc); + b.close() + self.assertEqual(b.buffer(), text) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/qtextline_test.py b/sources/pyside2/tests/QtGui/qtextline_test.py new file mode 100644 index 0000000..b7d3088 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qtextline_test.py @@ -0,0 +1,50 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtGui import QTextLayout +from helper import UsesQApplication + +class QTextLineTest(UsesQApplication): + + def testCursorToX(self): + textLayout = QTextLayout() + textLayout.beginLayout() + line = textLayout.createLine() + self.assertTrue(line.isValid()) + x, cursorPos = line.cursorToX(0) + self.assertEqual(type(x), float) + self.assertEqual(type(cursorPos), int) + x, cursorPos = line.cursorToX(1) + self.assertEqual(type(x), float) + self.assertEqual(type(cursorPos), int) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtGui/qtransform_test.py b/sources/pyside2/tests/QtGui/qtransform_test.py new file mode 100644 index 0000000..f121868 --- /dev/null +++ b/sources/pyside2/tests/QtGui/qtransform_test.py @@ -0,0 +1,101 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QPointF +from PySide2.QtGui import QTransform, QPolygonF, QPolygonF + +class QTransformTest(unittest.TestCase): + + def testMap(self): + transform = QTransform() + values = (10.0, 20.0) + tx, ty = transform.map(*values) + self.assertTrue(isinstance(tx, float)) + self.assertTrue(isinstance(ty, float)) + self.assertEqual((tx, ty), values) + + def testquadToQuad(self): + q1 = QPolygonF() + q1.append(QPointF(10.0, 10.0)) + q1.append(QPointF(20.0, 10.0)) + q1.append(QPointF(10.0, -10.0)) + q1.append(QPointF(20.0, -10.0)) + + q2 = QPolygonF() + q2.append(QPointF(20.0, 20.0)) + q2.append(QPointF(30.0, 20.0)) + q2.append(QPointF(20.0, -20.0)) + q2.append(QPointF(30.0, -20.0)) + + t1 = QTransform() + r1 = QTransform.quadToQuad(q1, q2, t1) + r2 = QTransform.quadToQuad(q1, q2) + + self.assertTrue(r1) + self.assertTrue(r2) + + self.assertEqual(t1, r2) + + def testquadToSquare(self): + q1 = QPolygonF() + q1.append(QPointF(10.0, 10.0)) + q1.append(QPointF(20.0, 10.0)) + q1.append(QPointF(10.0, -10.0)) + q1.append(QPointF(20.0, -10.0)) + + t1 = QTransform() + r1 = QTransform.quadToSquare(q1, t1) + r2 = QTransform.quadToSquare(q1) + + self.assertTrue(r1) + self.assertTrue(r2) + + self.assertEqual(t1, r2) + + + def testsquareToQuad(self): + q1 = QPolygonF() + q1.append(QPointF(10.0, 10.0)) + q1.append(QPointF(20.0, 10.0)) + q1.append(QPointF(10.0, -10.0)) + q1.append(QPointF(20.0, -10.0)) + + t1 = QTransform() + r1 = QTransform.squareToQuad(q1, t1) + r2 = QTransform.squareToQuad(q1) + + self.assertTrue(r1) + self.assertTrue(r2) + + self.assertEqual(t1, r2) + + +if __name__ == "__main__": + unittest.main() + diff --git a/sources/pyside2/tests/QtGui/repr_test.py b/sources/pyside2/tests/QtGui/repr_test.py new file mode 100644 index 0000000..bcf2763 --- /dev/null +++ b/sources/pyside2/tests/QtGui/repr_test.py @@ -0,0 +1,117 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +import PySide2 +from PySide2.QtCore import QPoint +from PySide2.QtGui import QMatrix +from PySide2.QtGui import QMatrix2x2, QMatrix2x3, QMatrix2x4 +from PySide2.QtGui import QMatrix3x2, QMatrix3x3, QMatrix3x4 +from PySide2.QtGui import QMatrix4x2, QMatrix4x3, QMatrix4x4 +from PySide2.QtGui import QVector2D, QVector3D, QVector4D +from PySide2.QtGui import QColor, QTransform, QKeySequence, QQuaternion +from PySide2.QtGui import QPolygon + +class ReprCopyHelper: + def testCopy(self): + copy = eval(self.original.__repr__()) + self.assertTrue(copy is not self.original) + self.assertEqual(copy, self.original) + +class QTransformReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QTransform(1, 2, 3, 4, 5, 6, 7, 8) + +class QKeySequenceReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QKeySequence("Ctrl+P") + +class QQuaternionReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QQuaternion(1, 2, 3, 4) + +class QVector2DReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QVector2D(1, 2) + +class QVector3DReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QVector3D(1, 2, 3) + +class QVector4DReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QVector4D(1, 2, 3, 4) + +class QMatrixReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QMatrix(1, 2, 3, 4, 5, 6) + + +# Avoid these tests until get gcc fixed +# Related bug: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43247 +""" +class QMatrix2x2ReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QMatrix2x2([1, 2, 3, 4]) + +class QMatrix2x3ReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QMatrix2x3([1, 2, 3, 4, 5, 6]) + +class QMatrix2x4ReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QMatrix2x4([1, 2, 3, 4, 5, 6, 7, 8]) + +class QMatrix3x2ReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QMatrix3x2([1, 2, 3, 4, 5, 6]) + +class QMatrix3x3ReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QMatrix3x3([1, 2, 3, 4, 5, 6, 7, 8, 9]) + +class QMatrix3x4ReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QMatrix3x4([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) + +class QMatrix4x2ReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QMatrix4x2([1, 2, 3, 4, 5, 6, 7, 8]) + +class QMatrix4x3ReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QMatrix4x3([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) + +class QMatrix4x4ReprCopy(ReprCopyHelper, unittest.TestCase): + def setUp(self): + self.original = QMatrix4x4([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]) +""" + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtGui/sample.png b/sources/pyside2/tests/QtGui/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..60450f0dcd89ce5f6ed7c362e76a0703aad7a807 GIT binary patch literal 55944 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%0Au)kGIRhQO>5m6BpV0XrX0}HV$NZ; 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 +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Test case for PySide bug 814 +# http://bugs.pyside.org/show_bug.cgi?id=814 +# archive: +# https://srinikom.github.io/pyside-bz-archive/814.html +# 2011-04-08 Thomas Perl +# Released under the same terms as PySide itself + +import unittest + +from helper import adjust_filename, TimedQApplication + +from PySide2.QtCore import QUrl, QAbstractListModel, QModelIndex, Qt +from PySide2.QtQuick import QQuickView + +class ListModel(QAbstractListModel): + def __init__(self): + QAbstractListModel.__init__(self) + + def roleNames(self): + return { Qt.DisplayRole: b'pysideModelData' } + + def rowCount(self, parent = QModelIndex()): + return 3 + + def data(self, index, role): + if index.isValid() and role == Qt.DisplayRole: + return 'blubb' + return None + +class TestBug814(TimedQApplication): + def testAbstractItemModelTransferToQML(self): + view = QQuickView() + model = ListModel() + view.rootContext().setContextProperty("pythonModel", model) + view.setSource(QUrl.fromLocalFile(adjust_filename('bug_814.qml', __file__))) + root = view.rootObject() + view.show() + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtQml/bug_814.qml b/sources/pyside2/tests/QtQml/bug_814.qml new file mode 100755 index 0000000..4118967 --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_814.qml @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +ListView { + width: 300; height: 300 + delegate: Text { text: pysideModelData } + model: pythonModel +} + diff --git a/sources/pyside2/tests/QtQml/bug_825.py b/sources/pyside2/tests/QtQml/bug_825.py new file mode 100755 index 0000000..fe67f64 --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_825.py @@ -0,0 +1,82 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from helper import adjust_filename + +from PySide2.QtCore import Qt, QUrl, QTimer +from PySide2.QtGui import QGuiApplication, QPen +from PySide2.QtWidgets import QGraphicsItem +from PySide2.QtQml import qmlRegisterType +from PySide2.QtQuick import QQuickView, QQuickItem, QQuickPaintedItem + +paintCalled = False + +class MetaA(type): + pass + +class A(object): + __metaclass__ = MetaA + +MetaB = type(QQuickPaintedItem) +B = QQuickPaintedItem + +class MetaC(MetaA, MetaB): + pass + +class C(A, B): + __metaclass__ = MetaC + +class Bug825 (C): + def __init__(self, parent = None): + QQuickPaintedItem.__init__(self, parent) + + def paint(self, painter): + global paintCalled + pen = QPen(Qt.black, 2) + painter.setPen(pen); + painter.drawPie(self.boundingRect(), 0, 128); + paintCalled = True + +class TestBug825 (unittest.TestCase): + def testIt(self): + global paintCalled + app = QGuiApplication([]) + qmlRegisterType(Bug825, 'bugs', 1, 0, 'Bug825') + self.assertRaises(TypeError, qmlRegisterType, A, 'bugs', 1, 0, 'A') + + view = QQuickView() + view.setSource(QUrl.fromLocalFile(adjust_filename('bug_825.qml', __file__))) + view.show() + QTimer.singleShot(250, view.close) + app.exec_() + self.assertTrue(paintCalled) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtQml/bug_825.qml b/sources/pyside2/tests/QtQml/bug_825.qml new file mode 100755 index 0000000..6ae06d5 --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_825.qml @@ -0,0 +1,38 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import bugs 1.0 + +Item { + width: 300; height: 200 + + Bug825 { + anchors.fill: parent + } +} diff --git a/sources/pyside2/tests/QtQml/bug_847.py b/sources/pyside2/tests/QtQml/bug_847.py new file mode 100755 index 0000000..c382785 --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_847.py @@ -0,0 +1,86 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Copyright (C) 2011 Thomas Perl +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Testcase for PySide bug 847 +# Released under the same terms as PySide itself +# 2011-05-04 Thomas Perl + +from __future__ import print_function + +import unittest + +from helper import adjust_filename, UsesQApplication + +from PySide2.QtCore import Slot, Signal, QUrl, QTimer, QCoreApplication +from PySide2.QtQuick import QQuickView + +class View(QQuickView): + def __init__(self): + QQuickView.__init__(self) + + called = Signal(int, int) + + @Slot(int, int) + def blubb(self, x, y): + self.called.emit(x, y) + +class TestQML(UsesQApplication): + def done(self, x, y): + self._sucess = True + self.app.quit() + print("done called") + + def testPythonSlot(self): + self._sucess = False + view = View() + + # Connect first, then set the property. + view.called.connect(self.done) + view.setSource(QUrl.fromLocalFile(adjust_filename('bug_847.qml', __file__))) + while view.status() == QQuickView.Loading: + self.app.processEvents() + self.assertEqual(view.status(), QQuickView.Ready) + self.assertTrue(view.rootObject()) + view.rootObject().setProperty('pythonObject', view) + + view.show() + while not view.isExposed(): + self.app.processEvents() + + # Essentially a timeout in case method invocation fails. + QTimer.singleShot(30000, QCoreApplication.instance().quit) + self.app.exec_() + self.assertTrue(self._sucess) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtQml/bug_847.qml b/sources/pyside2/tests/QtQml/bug_847.qml new file mode 100755 index 0000000..3833b16 --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_847.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + width: 500 + height: 500 + color: 'red' + + property variant pythonObject: undefined + + Text { + anchors.centerIn: parent + text: 'click me' + color: 'white' + } + + onPythonObjectChanged: { + if (pythonObject) { + // Delay execution of method invocation, so that the event loop has a chance to start, + // which will subsequently be stopped by the method. + timer.start() + } + } + + Timer { + id: timer + interval: 100; running: false; + onTriggered: { + if (pythonObject) { + pythonObject.blubb(42, 84) + } + } + } +} + diff --git a/sources/pyside2/tests/QtQml/bug_915.py b/sources/pyside2/tests/QtQml/bug_915.py new file mode 100755 index 0000000..b0f231a --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_915.py @@ -0,0 +1,58 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from helper import TimedQApplication + +from PySide2.QtQuick import QQuickView, QQuickItem + +class TestBug915(TimedQApplication): + def testReturnPolicy(self): + view = QQuickView() + + item1 = QQuickItem() + item1.setObjectName("Item1") + item1.setParentItem(view.contentItem()) + self.assertEqual(item1.objectName(), "Item1") # check if the item still valid + + item2 = QQuickItem() + item2.setObjectName("Item2") + item2.setParentItem(view.contentItem()) + item1 = None + self.assertEqual(item2.objectName(), "Item2") # check if the item still valid + + view = None + +if __name__ == '__main__': + unittest.main() + + diff --git a/sources/pyside2/tests/QtQml/bug_926.py b/sources/pyside2/tests/QtQml/bug_926.py new file mode 100755 index 0000000..6eef7b1 --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_926.py @@ -0,0 +1,69 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +import unittest + +from helper import adjust_filename + +from PySide2.QtCore import QUrl, QTimer, QObject, Signal, Property +from PySide2.QtGui import QGuiApplication +from PySide2.QtQml import qmlRegisterType +from PySide2.QtQuick import QQuickView + +class MyClass (QObject): + + def __init__(self): + super(MyClass,self).__init__() + self.__url = QUrl() + + def getUrl(self): + return self.__url + + def setUrl(self,value): + newUrl = QUrl(value) + if (newUrl != self.__url): + self.__url = newUrl + self.urlChanged.emit() + + urlChanged = Signal() + urla = Property(QUrl, getUrl, setUrl, notify = urlChanged) + +class TestBug926 (unittest.TestCase): + def testIt(self): + app = QGuiApplication([]) + qmlRegisterType(MyClass,'Example',1,0,'MyClass') + view = QQuickView() + view.setSource(QUrl.fromLocalFile(adjust_filename('bug_926.qml', __file__))) + self.assertEqual(len(view.errors()), 0) + view.show() + QTimer.singleShot(0, app.quit) + app.exec_() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtQml/bug_926.qml b/sources/pyside2/tests/QtQml/bug_926.qml new file mode 100755 index 0000000..9217403 --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_926.qml @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import Example 1.0 + +Rectangle { + width: 100 + height: 62 + + MyClass { + id: myClass + urla: "http://www.pyside.org" + } + + Text { + id: name + text: myClass.urla + } +} diff --git a/sources/pyside2/tests/QtQml/bug_951.py b/sources/pyside2/tests/QtQml/bug_951.py new file mode 100755 index 0000000..38cf597 --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_951.py @@ -0,0 +1,61 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from helper import adjust_filename, TimedQApplication + +from PySide2.QtCore import QUrl +from PySide2.QtQml import qmlRegisterType +from PySide2.QtQuick import QQuickItem, QQuickView + +class MyItem(QQuickItem): + COMPONENT_COMPLETE_CALLED = False + def __init__(self,parent=None): + super(MyItem, self).__init__(parent) + self.setObjectName("myitem") + + def componentComplete(self): + MyItem.COMPONENT_COMPLETE_CALLED = True + super(MyItem, self).componentComplete() + +class TestRegisterQMLType(TimedQApplication): + def setup(self): + TimedQApplication.setup(self, 100 * 3) # 3s + + def testSignalEmission(self): + qmlRegisterType(MyItem, "my.item", 1, 0, "MyItem") + + view = QQuickView() + view.setSource(QUrl.fromLocalFile(adjust_filename('bug_951.qml', __file__))) + + self.app.exec_() + self.assertTrue(MyItem.COMPONENT_COMPLETE_CALLED) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtQml/bug_951.qml b/sources/pyside2/tests/QtQml/bug_951.qml new file mode 100755 index 0000000..8242223 --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_951.qml @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import my.item 1.0 +Rectangle{ + width:10 + height:10 + MyItem{ } +} diff --git a/sources/pyside2/tests/QtQml/bug_995.py b/sources/pyside2/tests/QtQml/bug_995.py new file mode 100755 index 0000000..7363f0e --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_995.py @@ -0,0 +1,43 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from helper import adjust_filename, UsesQApplication + +from PySide2.QtGui import QGuiApplication +from PySide2.QtQuick import QQuickView + +app = QGuiApplication([]) +view = QQuickView(adjust_filename('bug_995.qml', __file__)) +view.show() +view.resize(200, 200) +contentItem = view.contentItem() +item = contentItem.childAt(100, 100) + +# it CAN NOT crash here +print(item) + diff --git a/sources/pyside2/tests/QtQml/bug_995.qml b/sources/pyside2/tests/QtQml/bug_995.qml new file mode 100755 index 0000000..1369dcc --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_995.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + width: 100 + height: 100 + color: "red" + + Text { + text: "Hello World" + anchors.centerIn: parent + } +} diff --git a/sources/pyside2/tests/QtQml/bug_997.py b/sources/pyside2/tests/QtQml/bug_997.py new file mode 100755 index 0000000..45c777f --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_997.py @@ -0,0 +1,52 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from helper import adjust_filename, UsesQApplication + +from PySide2 import QtCore, QtQml, QtQuick + +class TestBug(UsesQApplication): + def testQMLFunctionCall(self): + ownerData = QtQml.QQmlPropertyMap() + ownerData.insert('name', 'John Smith') + ownerData.insert('phone', '555-5555') + ownerData.insert('newValue', '') + + view = QtQuick.QQuickView() + ctxt = view.rootContext() + ctxt.setContextProperty('owner', ownerData) + view.setSource(QtCore.QUrl.fromLocalFile(adjust_filename('bug_997.qml', __file__))) + view.show() + QtCore.QTimer.singleShot(1000, self.app.quit) + self.app.exec_() + self.assertEqual(ownerData.value('newName'), ownerData.value('name')) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtQml/bug_997.qml b/sources/pyside2/tests/QtQml/bug_997.qml new file mode 100755 index 0000000..7d2b7fc --- /dev/null +++ b/sources/pyside2/tests/QtQml/bug_997.qml @@ -0,0 +1,34 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Text { + text: owner.name + " " + owner.phone + Component.onCompleted: { owner.newName = owner.name } +} diff --git a/sources/pyside2/tests/QtQml/connect_python_qml.py b/sources/pyside2/tests/QtQml/connect_python_qml.py new file mode 100644 index 0000000..e2fedaa --- /dev/null +++ b/sources/pyside2/tests/QtQml/connect_python_qml.py @@ -0,0 +1,65 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' +Test case for bug #442 + +archive: +https://srinikom.github.io/pyside-bz-archive/442.html +''' + +import unittest + +from helper import adjust_filename, TimedQApplication + +from PySide2 import QtCore, QtGui, QtQuick + +class TestConnectionWithInvalidSignature(TimedQApplication): + def onButtonClicked(self): + self.buttonClicked = True + self.app.quit() + + def onButtonFailClicked(self): + pass + + def testFailConnection(self): + self.buttonClicked = False + self.buttonFailClicked = False + view = QtQuick.QQuickView() + view.setSource(QtCore.QUrl.fromLocalFile(adjust_filename('connect_python_qml.qml', __file__))) + root = view.rootObject() + button = root.findChild(QtCore.QObject, "buttonMouseArea") + self.assertRaises(TypeError, QtCore.QObject.connect, [button,QtCore.SIGNAL('entered()'), self.onButtonFailClicked]) + button.entered.connect(self.onButtonClicked) + button.entered.emit() + view.show() + self.app.exec_() + self.assertTrue(self.buttonClicked) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtQml/connect_python_qml.qml b/sources/pyside2/tests/QtQml/connect_python_qml.qml new file mode 100755 index 0000000..249debf --- /dev/null +++ b/sources/pyside2/tests/QtQml/connect_python_qml.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + id: page + width: 500; height: 200 + color: "lightgray" + + Rectangle { + id: button + width: 150; height: 40 + color: "darkgray" + anchors.horizontalCenter: page.horizontalCenter + y: 150 + MouseArea { + id: buttonMouseArea + objectName: "buttonMouseArea" + anchors.fill: parent + } + } +} diff --git a/sources/pyside2/tests/QtQml/hw.qml b/sources/pyside2/tests/QtQml/hw.qml new file mode 100755 index 0000000..8b086f3 --- /dev/null +++ b/sources/pyside2/tests/QtQml/hw.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + id: page + width: 500; height: 200 + color: "lightgray" + + Text { + id: helloText + text: "Hello world!" + y: 30 + anchors.horizontalCenter: page.horizontalCenter + font.pointSize: 24; font.bold: true + } + + Image { + // It's okay for this to fail. + source: "http://localhost/logo.png" + } +} diff --git a/sources/pyside2/tests/QtQml/javascript_exceptions.py b/sources/pyside2/tests/QtQml/javascript_exceptions.py new file mode 100644 index 0000000..3e22a91 --- /dev/null +++ b/sources/pyside2/tests/QtQml/javascript_exceptions.py @@ -0,0 +1,103 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from helper import adjust_filename, UsesQApplication + +from PySide2.QtCore import Slot, Property, Signal, QObject, QUrl +from PySide2.QtQml import QJSEngine, qmlRegisterType +from PySide2.QtQuick import QQuickView + +test_error_message = "This is an error." + +method_test_string = """ +(function (obj) { + obj.methodThrows(); +}) +""" + +property_test_string = """ +(function (obj) { + obj.propertyThrows; +}) +""" + +test_1 = False +test_2 = False + +class TestClass(QObject): + @Slot() + def methodThrows(self): + raise TypeError(test_error_message) + + @Property(str) + def propertyThrows(self): + raise TypeError(test_error_message) + + @Slot(int) + def passTest(self, test): + global test_1, test_2 + + if test == 1: + test_1 = True + else: + test_2 = True + +class JavaScriptExceptionsTest(UsesQApplication): + def test_jsengine(self): + engine = QJSEngine() + test_object = TestClass() + test_value = engine.newQObject(test_object) + + result_1 = engine.evaluate(method_test_string).call([test_value]) + + self.assertTrue(result_1.isError()) + self.assertEqual(result_1.property('message').toString(), test_error_message) + self.assertEqual(result_1.property('name').toString(), 'TypeError') + + result_2 = engine.evaluate(property_test_string).call([test_value]) + + self.assertTrue(result_2.isError()) + self.assertEqual(result_2.property('message').toString(), test_error_message) + self.assertEqual(result_2.property('name').toString(), 'TypeError') + + def test_qml_type(self): + qmlRegisterType(TestClass, 'JavaScriptExceptions', 1, 0, 'JavaScriptExceptions'); + + view = QQuickView() + qml_url = QUrl.fromLocalFile(adjust_filename('javascript_exceptions.qml', __file__)) + + view.setSource(qml_url) + + self.assertTrue(test_1) + self.assertTrue(test_2) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtQml/javascript_exceptions.qml b/sources/pyside2/tests/QtQml/javascript_exceptions.qml new file mode 100644 index 0000000..91cc83e --- /dev/null +++ b/sources/pyside2/tests/QtQml/javascript_exceptions.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Controls 1.0 +import JavaScriptExceptions 1.0 + +Rectangle { + JavaScriptExceptions { + id: obj + } + + Component.onCompleted: { + // Method call test + try { + obj.methodThrows(); + } catch(e) { + obj.passTest(1); + } + + // Property accessor test + try { + obj.propertyThrows; + } catch(e) { + obj.passTest(2); + } + } +} \ No newline at end of file diff --git a/sources/pyside2/tests/QtQml/qqmlincubator_incubateWhile.py b/sources/pyside2/tests/QtQml/qqmlincubator_incubateWhile.py new file mode 100644 index 0000000..08806a4 --- /dev/null +++ b/sources/pyside2/tests/QtQml/qqmlincubator_incubateWhile.py @@ -0,0 +1,96 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sys +from helper import adjust_filename + +from PySide2.QtCore import QObject, QUrl, Slot, QTimer +from PySide2.QtGui import QGuiApplication +from PySide2.QtQml import QQmlIncubationController, VolatileBool +from PySide2.QtQuick import QQuickView + +class CustomIncubationController(QObject, QQmlIncubationController): + def __init__(self, test): + QObject.__init__(self) + QQmlIncubationController.__init__(self) + self.test = test + self.interrupted = False + + # Incubate every 50 milliseconds + self.startTimer(50) + self.incubationShouldContinue = VolatileBool(True) + self.test.assertEqual(self.incubationShouldContinue.get(), True) + + @Slot() + def interrupter(self): + if not self.interrupted: + self.interrupted = True + self.incubationShouldContinue.set(False) + self.test.assertEqual(self.incubationShouldContinue.get(), False) + QTimer.singleShot(0, QGuiApplication.instance().quit) + + def timerEvent(self, ev): + # Incubate items for 2000 milliseconds, or until the volatile bool is set to false. + self.incubateWhile(self.incubationShouldContinue, 2000) + +class TestBug(unittest.TestCase): + def testIncubateWhileCall(self): + app = QGuiApplication(sys.argv) + view = QQuickView() + controller = CustomIncubationController(self) + view.engine().setIncubationController(controller) + view.setResizeMode(QQuickView.SizeRootObjectToView) + view.setSource(QUrl.fromLocalFile(adjust_filename('qqmlincubator_incubateWhile.qml', + __file__))) + view.show() + + root = view.rootObject() + # The QML code will issue an interrupt signal after half of its items are loaded. + root.shouldInterrupt.connect(controller.interrupter) + res = app.exec_() + + itemsToCreate = root.property("itemsToCreate") + loadedItems = root.property("loadedItems") + self.assertEqual(loadedItems, itemsToCreate / 2) + + # Finish incubating the remaining items. + controller.incubateFor(1000) + loadedItems = root.property("loadedItems") + self.assertEqual(loadedItems, itemsToCreate) + + # Deleting the view before it goes out of scope is required to make sure all child QML + # instances are destroyed in the correct order. + del view + del app + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtQml/qqmlincubator_incubateWhile.qml b/sources/pyside2/tests/QtQml/qqmlincubator_incubateWhile.qml new file mode 100644 index 0000000..212166a --- /dev/null +++ b/sources/pyside2/tests/QtQml/qqmlincubator_incubateWhile.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 + + +Rectangle { + id: root + objectName: "theNicestRoot" + width: 400; height: 400 + + signal shouldInterrupt() + property int loadedItems: 0 + property int itemsToCreate: 10 + + Row { + anchors.centerIn: parent + spacing: 20 + + Rectangle { + id: initialRectangle + width: 10; height: 10 + color: "red" + } + + Repeater { + model: itemsToCreate + Loader { + id: loader + asynchronous: true + source: "qqmlincubator_incubateWhile_component.qml" + onLoaded: { + root.loadedItems += 1 + + // Interrupt incubation after half of the items are loaded. + if (root.loadedItems >= (itemsToCreate / 2)) { + root.shouldInterrupt() + } + } + } + } + } +} diff --git a/sources/pyside2/tests/QtQml/qqmlincubator_incubateWhile_component.qml b/sources/pyside2/tests/QtQml/qqmlincubator_incubateWhile_component.qml new file mode 100644 index 0000000..55dbe14 --- /dev/null +++ b/sources/pyside2/tests/QtQml/qqmlincubator_incubateWhile_component.qml @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + id: root + width: 10; height: 10 + color: "yellow" +} diff --git a/sources/pyside2/tests/QtQml/qqmlnetwork_test.py b/sources/pyside2/tests/QtQml/qqmlnetwork_test.py new file mode 100755 index 0000000..3e6d1c2 --- /dev/null +++ b/sources/pyside2/tests/QtQml/qqmlnetwork_test.py @@ -0,0 +1,70 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QQmlNetwork''' + +from __future__ import print_function + +import unittest + +from PySide2.QtCore import QUrl +from PySide2.QtQuick import QQuickView +from PySide2.QtQml import QQmlNetworkAccessManagerFactory +from PySide2.QtNetwork import QNetworkAccessManager + +from helper import adjust_filename, TimedQApplication + +class CustomManager(QNetworkAccessManager): + def createRequest(self, op, req, data = None): + print(">> createRequest ", self, op, req.url(), data) + return QNetworkAccessManager.createRequest(self, op, req, data) + +class CustomFactory(QQmlNetworkAccessManagerFactory): + def create(self, parent = None): + return CustomManager() + +class TestQQmlNetworkFactory(TimedQApplication): + def setUp(self): + TimedQApplication.setUp(self, timeout=1000) + + def testQQuickNetworkFactory(self): + view = QQuickView() + self.factory = CustomFactory() + view.engine().setNetworkAccessManagerFactory(self.factory) + + url = QUrl.fromLocalFile(adjust_filename('hw.qml', __file__)) + + view.setSource(url) + view.show() + + self.assertEqual(view.status(), QQuickView.Ready) + + self.app.exec_() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtQml/qquickitem_grabToImage.py b/sources/pyside2/tests/QtQml/qquickitem_grabToImage.py new file mode 100644 index 0000000..19b982c --- /dev/null +++ b/sources/pyside2/tests/QtQml/qquickitem_grabToImage.py @@ -0,0 +1,79 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from helper import adjust_filename, TimedQApplication +from PySide2 import QtCore, QtGui, QtQuick + +class TestGrabToSharedPointerImage(TimedQApplication): + def setUp(self): + TimedQApplication.setUp(self, 1000) + + def testQQuickItemGrabToImageSharedPointer(self): + view = QtQuick.QQuickView() + view.setSource(QtCore.QUrl.fromLocalFile( + adjust_filename('qquickitem_grabToImage.qml', __file__))) + view.show() + + # Get the QQuickItem objects for the blue Rectangle and the Image item. + root = view.rootObject() + blueRectangle = root.findChild(QtQuick.QQuickItem, "blueRectangle") + imageContainer = root.findChild(QtQuick.QQuickItem, "imageContainer") + + # Start the image grabbing. + grabResultSharedPtr = blueRectangle.grabToImage() + + # Implicit call of operator bool() of the smart pointer, to check that it holds + # a valid pointer. + self.assertTrue(grabResultSharedPtr) + + self.grabbedColor = None + def onGrabReady(): + # Signal early exit. + QtCore.QTimer.singleShot(0, self.app.quit) + + # Show the grabbed image in the QML Image item. + imageContainer.setProperty("source", grabResultSharedPtr.url()) + + # Wait for signal when grabbing is complete. + grabResultSharedPtr.ready.connect(onGrabReady) + self.app.exec_() + + # Get the first pixel color of the grabbed image. + self.image = grabResultSharedPtr.image() + self.assertTrue(self.image) + self.grabbedColor = self.image.pixelColor(0,0) + self.assertTrue(self.grabbedColor.isValid()) + + # Compare the grabbed color with the one we set in the rectangle. + blueColor = QtGui.QColor("blue") + self.assertEqual(self.grabbedColor, blueColor) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtQml/qquickitem_grabToImage.qml b/sources/pyside2/tests/QtQml/qquickitem_grabToImage.qml new file mode 100644 index 0000000..17d0cbd --- /dev/null +++ b/sources/pyside2/tests/QtQml/qquickitem_grabToImage.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + id: root + width: 600 + height: 600 + + Rectangle { + id: blue + objectName: "blueRectangle" + width: 200 + height: 200 + anchors.top: root.top + anchors.horizontalCenter: root.horizontalCenter + color: "blue" + } + + Text { + text: qsTr("Original blue rectangle") + anchors.left: blue.right + anchors.verticalCenter: blue.verticalCenter + } + + Image { + id: imageContainer + objectName: "imageContainer" + width: 200 + height: 200 + anchors.bottom: root.bottom + anchors.horizontalCenter: root.horizontalCenter + } + + Text { + text: qsTr("Image with the source URL set to the result of calling QQuickItem::grabToImage on the rectangle. If you see a second blue rectangle, that means it works.") + anchors.left: imageContainer.right + anchors.verticalCenter: imageContainer.verticalCenter + wrapMode: Text.WrapAtWordBoundaryOrAnywhere + width: 200 + } + +} diff --git a/sources/pyside2/tests/QtQml/qquickview_test.py b/sources/pyside2/tests/QtQml/qquickview_test.py new file mode 100755 index 0000000..1b503fa --- /dev/null +++ b/sources/pyside2/tests/QtQml/qquickview_test.py @@ -0,0 +1,86 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QQuickView''' + +import unittest + +from helper import adjust_filename, TimedQApplication + +from PySide2.QtCore import QUrl, QObject, Property, Slot +from PySide2.QtQuick import QQuickView + +class MyObject(QObject): + def __init__(self, text, parent=None): + QObject.__init__(self, parent) + self._text = text + + def getText(self): + return self._text + + + @Slot(str) + def qmlText(self, text): + self._qmlText = text + + title = Property(str, getText) + + +class TestQQuickView(TimedQApplication): + + def testQQuickViewList(self): + view = QQuickView() + + dataList = ["Item 1", "Item 2", "Item 3", "Item 4"] + + ctxt = view.rootContext() + ctxt.setContextProperty("myModel", dataList) + + url = QUrl.fromLocalFile(adjust_filename('view.qml', __file__)) + view.setSource(url) + view.show() + + self.assertEqual(view.status(), QQuickView.Ready) + + + def testModelExport(self): + view = QQuickView() + dataList = [MyObject("Item 1"), MyObject("Item 2"), MyObject("Item 3"), MyObject("Item 4")] + + ctxt = view.rootContext() + ctxt.setContextProperty("myModel", dataList) + + url = QUrl.fromLocalFile(adjust_filename('viewmodel.qml', __file__)) + view.setSource(url) + view.show() + + self.assertEqual(view.status(), QQuickView.Ready) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtQml/registertype.py b/sources/pyside2/tests/QtQml/registertype.py new file mode 100755 index 0000000..5be65b7 --- /dev/null +++ b/sources/pyside2/tests/QtQml/registertype.py @@ -0,0 +1,118 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +import unittest + +import helper + +from PySide2.QtCore import Property, QTimer, QUrl +from PySide2.QtGui import QGuiApplication, QPen, QColor, QPainter +from PySide2.QtQml import qmlRegisterType, ListProperty +from PySide2.QtQuick import QQuickView, QQuickItem, QQuickPaintedItem + +class PieSlice (QQuickPaintedItem): + def __init__(self, parent = None): + QQuickPaintedItem.__init__(self, parent) + self._color = QColor() + self._fromAngle = 0 + self._angleSpan = 0 + + def getColor(self): + return self._color + + def setColor(self, value): + self._color = value + + def getFromAngle(self): + return self._angle + + def setFromAngle(self, value): + self._fromAngle = value + + def getAngleSpan(self): + return self._angleSpan + + def setAngleSpan(self, value): + self._angleSpan = value + + color = Property(QColor, getColor, setColor) + fromAngle = Property(int, getFromAngle, setFromAngle) + angleSpan = Property(int, getAngleSpan, setAngleSpan) + + def paint(self, painter): + global paintCalled + pen = QPen(self._color, 2) + painter.setPen(pen); + painter.setRenderHints(QPainter.Antialiasing, True); + painter.drawPie(self.boundingRect(), self._fromAngle * 16, self._angleSpan * 16); + paintCalled = True + +class PieChart (QQuickItem): + def __init__(self, parent = None): + QQuickItem.__init__(self, parent) + self._name = '' + self._slices = [] + + def getName(self): + return self._name + + def setName(self, value): + self._name = value + + name = Property(str, getName, setName) + + def appendSlice(self, _slice): + global appendCalled + _slice.setParentItem(self) + self._slices.append(_slice) + appendCalled = True + + slices = ListProperty(PieSlice, append=appendSlice) + +appendCalled = False +paintCalled = False + +class TestQmlSupport(unittest.TestCase): + + def testIt(self): + app = QGuiApplication([]) + + qmlRegisterType(PieChart, 'Charts', 1, 0, 'PieChart'); + qmlRegisterType(PieSlice, "Charts", 1, 0, "PieSlice"); + + view = QQuickView() + view.setSource(QUrl.fromLocalFile(helper.adjust_filename('registertype.qml', __file__))) + view.show() + QTimer.singleShot(250, view.close) + app.exec_() + self.assertTrue(appendCalled) + self.assertTrue(paintCalled) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtQml/registertype.qml b/sources/pyside2/tests/QtQml/registertype.qml new file mode 100755 index 0000000..c412260 --- /dev/null +++ b/sources/pyside2/tests/QtQml/registertype.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import Charts 1.0 + +Item { + width: 300; height: 200 + + PieChart { + anchors.centerIn: parent + width: 100; height: 100 + + slices: [ + PieSlice { + anchors.fill: parent + color: "red" + fromAngle: 0; angleSpan: 110 + }, + PieSlice { + anchors.fill: parent + color: "black" + fromAngle: 110; angleSpan: 50 + }, + PieSlice { + anchors.fill: parent + color: "blue" + fromAngle: 160; angleSpan: 100 + } + ] + } +} diff --git a/sources/pyside2/tests/QtQml/view.qml b/sources/pyside2/tests/QtQml/view.qml new file mode 100755 index 0000000..dcc0076 --- /dev/null +++ b/sources/pyside2/tests/QtQml/view.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +ListView { + width: 100 + height: 100 + anchors.fill: parent + model: myModel + delegate: Component { + Rectangle { + height: 25 + width: 100 + Text { text: modelData } + } + } +} diff --git a/sources/pyside2/tests/QtQml/viewmodel.qml b/sources/pyside2/tests/QtQml/viewmodel.qml new file mode 100755 index 0000000..61366a7 --- /dev/null +++ b/sources/pyside2/tests/QtQml/viewmodel.qml @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +ListView { + width: 100; height: 100 + anchors.fill: parent + + model: myModel + delegate: Rectangle { + height: 25 + width: 100 + Text { text: title } + } +} + diff --git a/sources/pyside2/tests/QtQuick/CMakeLists.txt b/sources/pyside2/tests/QtQuick/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/QtQuick/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/QtQuickWidgets/CMakeLists.txt b/sources/pyside2/tests/QtQuickWidgets/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/QtQuickWidgets/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/QtScript/CMakeLists.txt b/sources/pyside2/tests/QtScript/CMakeLists.txt new file mode 100644 index 0000000..dfea68d --- /dev/null +++ b/sources/pyside2/tests/QtScript/CMakeLists.txt @@ -0,0 +1,5 @@ +PYSIDE_TEST(base_test.py) +PYSIDE_TEST(bug_1022.py) +PYSIDE_TEST(engine_test.py) +PYSIDE_TEST(property_test.py) +PYSIDE_TEST(qscriptvalue_test.py) diff --git a/sources/pyside2/tests/QtScript/base_test.py b/sources/pyside2/tests/QtScript/base_test.py new file mode 100644 index 0000000..4343a6d --- /dev/null +++ b/sources/pyside2/tests/QtScript/base_test.py @@ -0,0 +1,32 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtScript + + +#only test if the module import works fine bug #278 diff --git a/sources/pyside2/tests/QtScript/bug_1022.py b/sources/pyside2/tests/QtScript/bug_1022.py new file mode 100644 index 0000000..d076b23 --- /dev/null +++ b/sources/pyside2/tests/QtScript/bug_1022.py @@ -0,0 +1,41 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import * +from PySide2.QtScript import * + +class QScriptValueTest(unittest.TestCase): + def testQScriptValue(self): + app = QCoreApplication([]) + engine = QScriptEngine() + repr(engine.evaluate('1 + 1')) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtScript/engine_test.py b/sources/pyside2/tests/QtScript/engine_test.py new file mode 100644 index 0000000..2b22828 --- /dev/null +++ b/sources/pyside2/tests/QtScript/engine_test.py @@ -0,0 +1,41 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QObject +from PySide2.QtScript import QScriptEngine + +class QScriptEngineTest(unittest.TestCase): + + def testQScriptEngine(self): + engine = QScriptEngine() + obj = engine.evaluate("({ unitName: 'Celsius', toKelvin: function(x) { return x + 273; } })") + toKelvin = obj.property("toKelvin") + result = toKelvin.call(obj, [100]) + self.assertEqual(result.toNumber(), 373) diff --git a/sources/pyside2/tests/QtScript/property_test.py b/sources/pyside2/tests/QtScript/property_test.py new file mode 100644 index 0000000..a5c9f05 --- /dev/null +++ b/sources/pyside2/tests/QtScript/property_test.py @@ -0,0 +1,90 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QObject, Property, QCoreApplication +from PySide2.QtScript import QScriptEngine + +class MyObject(QObject): + def __init__(self, parent = None): + QObject.__init__(self, parent) + self._p = 100 + + def setX(self, value): + self._p = value + + def getX(self): + return self._p + + def resetX(self): + self._p = 100 + + def delX(self): + self._p = 0 + + x = Property(int, getX, setX, resetX, delX) + + +class QPropertyTest(unittest.TestCase): + + def testSimple(self): + o = MyObject() + self.assertEqual(o.x, 100) + o.x = 42 + self.assertEqual(o.x, 42) + + def testHasProperty(self): + o = MyObject() + o.setProperty("x", 10) + self.assertEqual(o.x, 10) + self.assertEqual(o.property("x"), 10) + + def testMetaProperty(self): + o = MyObject() + m = o.metaObject() + found = False + for i in range(m.propertyCount()): + mp = m.property(i) + if mp.name() == "x": + found = True + break + self.assertTrue(found) + + def testScriptQProperty(self): + qapp = QCoreApplication([]) + myEngine = QScriptEngine() + obj = MyObject() + scriptObj = myEngine.newQObject(obj) + myEngine.globalObject().setProperty("obj", scriptObj) + myEngine.evaluate("obj.x = 42") + self.assertEqual(scriptObj.property("x").toInt32(), 42) + self.assertEqual(obj.property("x"), 42) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtScript/qscriptvalue_test.py b/sources/pyside2/tests/QtScript/qscriptvalue_test.py new file mode 100644 index 0000000..11a763c --- /dev/null +++ b/sources/pyside2/tests/QtScript/qscriptvalue_test.py @@ -0,0 +1,72 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import unittest + +from PySide2.QtScript import * + +# Required for eval() to work +import PySide2.QtScript + +from helper import UsesQApplication + +class TestQScriptValue (UsesQApplication): + + def testOperator(self): + engine = QScriptEngine() + value = engine.evaluate('x = {"a": 1, "b":2}') + self.assertEqual(value['a'], 1) + self.assertRaises(KeyError, value.__getitem__, 'c') + value = engine.evaluate('x = ["x", "y", "z"]') + self.assertEqual(value[2], 'z') + self.assertRaises(IndexError, value.__getitem__, 23) + + def testRepr(self): + value = QScriptValue("somePerson = { firstName: 'John', lastName: 'Doe' }") + print(repr(value)) + value2 = eval(repr(value)) + self.assertEqual(value.toString(), value2.toString()) + self.assertEqual(value.toVariant(), value2.toVariant()) + + def testIteratorProtocol(self): + engine = QScriptEngine() + value = engine.evaluate('x = {"a": 1, "b":2}') + d = {} + for k, v in QScriptValueIterator(value): + d[k] = v + self.assertEqual(d, {'a': 1, 'b': 2}) + + d = {} + for k, v in value: + d[k] = v + self.assertEqual(d, {'a': 1, 'b': 2}) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtScriptTools/CMakeLists.txt b/sources/pyside2/tests/QtScriptTools/CMakeLists.txt new file mode 100644 index 0000000..ee22737 --- /dev/null +++ b/sources/pyside2/tests/QtScriptTools/CMakeLists.txt @@ -0,0 +1 @@ +PYSIDE_TEST(debugger_test.py) diff --git a/sources/pyside2/tests/QtScriptTools/debugger_test.py b/sources/pyside2/tests/QtScriptTools/debugger_test.py new file mode 100644 index 0000000..bcb73c1 --- /dev/null +++ b/sources/pyside2/tests/QtScriptTools/debugger_test.py @@ -0,0 +1,75 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import SIGNAL, QTimer +from PySide2.QtScript import QScriptEngine +from PySide2.QtScriptTools import QScriptEngineDebugger + +from helper import UsesQApplication + +class DebuggerTest(UsesQApplication): + + def setUp(self): + UsesQApplication.setUp(self) + self.engine = QScriptEngine() + self.debugger = QScriptEngineDebugger() + self.has_suspended = 0 + self.has_resumed = 0 + self.count = 3 + + def suspended(self): + self.has_suspended += 1 + # Will emit evaluationResumed until there are more instructions to be run + QTimer.singleShot(100, self.debugger.action(QScriptEngineDebugger.StepIntoAction).trigger) + + def resumed(self): + # Will be called when debugger.state() change from Suspended to Running + # except for the first time. + self.has_resumed += 1 + + def testBasic(self): + '''Interrupt and resume evaluation with QScriptEngineDebugger''' + + self.debugger.attachTo(self.engine) + self.debugger.setAutoShowStandardWindow(False) + self.debugger.connect(SIGNAL('evaluationSuspended()'), self.suspended) + self.debugger.connect(SIGNAL('evaluationResumed()'), self.resumed) + + # For some reason StepIntoAction does not actually continue execution, and thus interrupting + # causes the test to hang. The same behavior is present in a Qt5.6 C++ code equivalent. It + # seems like a bug in QtScript, thus the interruption is commented out for now, which will + # force the test to fail. + #self.debugger.action(QScriptEngineDebugger.InterruptAction).trigger() + self.engine.evaluate("3+4\n2+1\n5+1") + self.assertTrue(self.has_resumed >= 1) + self.assertTrue(self.has_suspended >= 1) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtScxml/CMakeLists.txt b/sources/pyside2/tests/QtScxml/CMakeLists.txt new file mode 100644 index 0000000..dde1866 --- /dev/null +++ b/sources/pyside2/tests/QtScxml/CMakeLists.txt @@ -0,0 +1 @@ +PYSIDE_TEST(test_dynamic.py) diff --git a/sources/pyside2/tests/QtScxml/test_dynamic.py b/sources/pyside2/tests/QtScxml/test_dynamic.py new file mode 100644 index 0000000..1bae534 --- /dev/null +++ b/sources/pyside2/tests/QtScxml/test_dynamic.py @@ -0,0 +1,53 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import os +import unittest + +from helper import TimedQApplication +from PySide2.QtCore import QObject, SIGNAL +from PySide2.QtScxml import QScxmlStateMachine + +class testDynamicStateMachine(TimedQApplication): + def setUp(self): + super(testDynamicStateMachine, self).setUp() + filePath = os.path.join(os.path.dirname(__file__), 'trafficlight.scxml') + self.assertTrue(os.path.exists(filePath)) + self._machine = QScxmlStateMachine.fromFile(filePath) + self._machine.reachedStableState.connect(self._reachedStable()) + self.assertTrue(not self._machine.parseErrors()) + self.assertTrue(self._machine) + + def _reachedStable(self): + self.app.quit() + + def test(self): + self._machine.start() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtScxml/trafficlight.scxml b/sources/pyside2/tests/QtScxml/trafficlight.scxml new file mode 100644 index 0000000..1b0fb6e --- /dev/null +++ b/sources/pyside2/tests/QtScxml/trafficlight.scxml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/tests/QtSensors/CMakeLists.txt b/sources/pyside2/tests/QtSensors/CMakeLists.txt new file mode 100644 index 0000000..87e548f --- /dev/null +++ b/sources/pyside2/tests/QtSensors/CMakeLists.txt @@ -0,0 +1 @@ +PYSIDE_TEST(sensors.py) diff --git a/sources/pyside2/tests/QtSensors/sensors.py b/sources/pyside2/tests/QtSensors/sensors.py new file mode 100644 index 0000000..2f25ade --- /dev/null +++ b/sources/pyside2/tests/QtSensors/sensors.py @@ -0,0 +1,55 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QSensor''' + +from PySide2.QtSensors import QSensor, QSensorReading +import unittest + +class QSensorTest(unittest.TestCase): + def test(self): + for sensorType in QSensor.sensorTypes(): + identifiers = QSensor.sensorsForType(sensorType) + values = [] + usedIdentifier = None + for identifier in identifiers: + sensor = QSensor(sensorType, None); + sensor.setIdentifier(identifier) + if sensor.connectToBackend(): + usedIdentifier = identifier + reading = sensor.reading() + for i in range(0, reading.valueCount()): + values.append(reading.value(i)) + break + if usedIdentifier: + print('Sensor ', sensorType, usedIdentifier, values) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtSql/CMakeLists.txt b/sources/pyside2/tests/QtSql/CMakeLists.txt new file mode 100644 index 0000000..8db3a98 --- /dev/null +++ b/sources/pyside2/tests/QtSql/CMakeLists.txt @@ -0,0 +1,3 @@ +PYSIDE_TEST(bug_1013.py) +PYSIDE_TEST(qsqldatabaseandqueries_test.py) +PYSIDE_TEST(qvarianttype_test.py) diff --git a/sources/pyside2/tests/QtSql/bug_1013.py b/sources/pyside2/tests/QtSql/bug_1013.py new file mode 100644 index 0000000..3b8fb5d --- /dev/null +++ b/sources/pyside2/tests/QtSql/bug_1013.py @@ -0,0 +1,58 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import * +from PySide2.QtSql import * +import unittest + +class TestBug1013 (unittest.TestCase): + + def someSlot(self, row, record): + record.setValue(0, 2) + self._wasCalled = True + + def testIt(self): + app = QCoreApplication([]) + db = QSqlDatabase.addDatabase('QSQLITE') + db.setDatabaseName(':memory:') + db.open() + query = QSqlQuery() + query.exec_('CREATE TABLE "foo" (id INT);') + model = QSqlTableModel() + model.setTable('foo') + + self._wasCalled = False + model.primeInsert.connect(self.someSlot) + model.select() + QTimer.singleShot(0,lambda: model.insertRow(0) and app.quit()) + app.exec_() + self.assertTrue(self._wasCalled) + self.assertEqual(model.data(model.index(0, 0)), 2) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtSql/qsqldatabaseandqueries_test.py b/sources/pyside2/tests/QtSql/qsqldatabaseandqueries_test.py new file mode 100644 index 0000000..5bb034a --- /dev/null +++ b/sources/pyside2/tests/QtSql/qsqldatabaseandqueries_test.py @@ -0,0 +1,99 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QtSql database creation, destruction and queries''' + +import sys +import unittest + +from PySide2 import QtSql +from PySide2.QtCore import * +from PySide2.QtWidgets import * + +class Foo(QWidget): + def __init__(self): + QWidget.__init__(self) + self.model = QtSql.QSqlTableModel() + +class SqlDatabaseCreationDestructionAndQueries(unittest.TestCase): + '''Test cases for QtSql database creation, destruction and queries''' + + def setUp(self): + #Acquire resources + self.assertFalse(not QtSql.QSqlDatabase.drivers(), "installed Qt has no DB drivers") + self.assertTrue("QSQLITE" in QtSql.QSqlDatabase.drivers(), "\"QSQLITE\" driver not available in this Qt version") + self.db = QtSql.QSqlDatabase.addDatabase("QSQLITE") + self.db.setDatabaseName(":memory:") + self.assertTrue(self.db.open()) + + def tearDown(self): + #Release resources + self.db.close() + QtSql.QSqlDatabase.removeDatabase(":memory:") + del self.db + + def testTableCreationAndDestruction(self): + #Test table creation and destruction + query = QtSql.QSqlQuery() + query.exec_("CREATE TABLE dummy(id int primary key, dummyfield varchar(20))") + query.exec_("DROP TABLE dummy") + query.clear() + + def testTableInsertionAndRetrieval(self): + #Test table creation, insertion and retrieval + query = QtSql.QSqlQuery() + query.exec_("CREATE TABLE person(id int primary key, " + "firstname varchar(20), lastname varchar(20))") + query.exec_("INSERT INTO person VALUES(101, 'George', 'Harrison')") + query.prepare("INSERT INTO person (id, firstname, lastname) " + "VALUES (:id, :firstname, :lastname)") + query.bindValue(":id", 102) + query.bindValue(":firstname", "John") + query.bindValue(":lastname", "Lennon") + query.exec_() + + lastname = '' + query.exec_("SELECT lastname FROM person where id=101") + self.assertTrue(query.isActive()) + query.next() + lastname = query.value(0) + self.assertEqual(lastname, 'Harrison') + + def testTableModelDeletion(self): + app = QApplication([]) + + bar = Foo() + model = bar.model + del bar + del app + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtSql/qvarianttype_test.py b/sources/pyside2/tests/QtSql/qvarianttype_test.py new file mode 100644 index 0000000..002b050 --- /dev/null +++ b/sources/pyside2/tests/QtSql/qvarianttype_test.py @@ -0,0 +1,62 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QVariant::Type converter''' +import unittest +import py3kcompat as py3k +from PySide2.QtSql import QSqlField + +class QVariantTypeTest(unittest.TestCase): + def testQVariantType(self): + f = QSqlField("name", str) + self.assertEqual(f.type(), py3k.unicode) + + f = QSqlField("name", "QString") + self.assertEqual(f.type(), py3k.unicode) + + f = QSqlField("name", "double") + self.assertEqual(f.type(), float) + + f = QSqlField("name", float) + self.assertEqual(f.type(), float) + + f = QSqlField("name", int) + self.assertEqual(f.type(), int) + + if not py3k.IS_PY3K: + f = QSqlField("name", long) + self.assertEqual(f.type(), int) # long isn't registered in QVariant:Type, just in QMetaType::Type + + #f = QSqlField("name", QObject) + #self.assertEqual(f.type(), None) + + f = QSqlField("name", None) + self.assertEqual(f.type(), None) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtSvg/CMakeLists.txt b/sources/pyside2/tests/QtSvg/CMakeLists.txt new file mode 100644 index 0000000..4f5e280 --- /dev/null +++ b/sources/pyside2/tests/QtSvg/CMakeLists.txt @@ -0,0 +1,3 @@ +PYSIDE_TEST(qsvggenerator_test.py) +PYSIDE_TEST(qsvgrenderer_test.py) +PYSIDE_TEST(qsvgwidget_test.py) diff --git a/sources/pyside2/tests/QtSvg/qsvggenerator_test.py b/sources/pyside2/tests/QtSvg/qsvggenerator_test.py new file mode 100644 index 0000000..2b3bed7 --- /dev/null +++ b/sources/pyside2/tests/QtSvg/qsvggenerator_test.py @@ -0,0 +1,63 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from sys import getrefcount +from PySide2.QtCore import QBuffer +from PySide2.QtSvg import QSvgGenerator + +class QSvgGeneratorTest(unittest.TestCase): + + def testRefCountOfTOutputDevice(self): + generator = QSvgGenerator() + iodevice1 = QBuffer() + refcount1 = getrefcount(iodevice1) + + generator.setOutputDevice(iodevice1) + + self.assertEqual(generator.outputDevice(), iodevice1) + self.assertEqual(getrefcount(generator.outputDevice()), refcount1 + 1) + + iodevice2 = QBuffer() + refcount2 = getrefcount(iodevice2) + + generator.setOutputDevice(iodevice2) + + self.assertEqual(generator.outputDevice(), iodevice2) + self.assertEqual(getrefcount(generator.outputDevice()), refcount2 + 1) + self.assertEqual(getrefcount(iodevice1), refcount1) + + del generator + + self.assertEqual(getrefcount(iodevice2), refcount2) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtSvg/qsvgrenderer_test.py b/sources/pyside2/tests/QtSvg/qsvgrenderer_test.py new file mode 100644 index 0000000..ee276ae --- /dev/null +++ b/sources/pyside2/tests/QtSvg/qsvgrenderer_test.py @@ -0,0 +1,53 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest, os +from PySide2.QtCore import * +from PySide2.QtWidgets import * +from PySide2.QtSvg import * + +class QSvgRendererTest(unittest.TestCase): + + def testLoad(self): + tigerPath = os.path.join(os.path.dirname(__file__), 'tiger.svg') + app = QApplication([]) + + fromFile = QSvgRenderer(tigerPath) + self.assertTrue(fromFile.isValid()) + + tigerFile = QFile(tigerPath) + tigerFile.open(QFile.ReadOnly) + tigerData = tigerFile.readAll() + fromContents = QSvgRenderer(tigerData) + self.assertTrue(fromContents.isValid()) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtSvg/qsvgwidget_test.py b/sources/pyside2/tests/QtSvg/qsvgwidget_test.py new file mode 100644 index 0000000..59cf35d --- /dev/null +++ b/sources/pyside2/tests/QtSvg/qsvgwidget_test.py @@ -0,0 +1,55 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest, os +from PySide2.QtCore import * +from PySide2.QtWidgets import * +from PySide2.QtSvg import * + +class QSvgWidgetTest(unittest.TestCase): + + def testLoad(self): + tigerPath = os.path.join(os.path.dirname(__file__), 'tiger.svg') + + app = QApplication([]) + fromFile = QSvgWidget() + fromFile.load(tigerPath) + self.assertTrue(fromFile.renderer().isValid()) + + tigerFile = QFile(tigerPath) + tigerFile.open(QFile.ReadOnly) + tigerData = tigerFile.readAll() + fromContents = QSvgWidget() + fromContents.load(tigerData) + self.assertTrue(fromContents.renderer().isValid()) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtSvg/tiger.svg b/sources/pyside2/tests/QtSvg/tiger.svg new file mode 100644 index 0000000..983e570 --- /dev/null +++ b/sources/pyside2/tests/QtSvg/tiger.svg @@ -0,0 +1,730 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/tests/QtTest/CMakeLists.txt b/sources/pyside2/tests/QtTest/CMakeLists.txt new file mode 100644 index 0000000..cf72dfa --- /dev/null +++ b/sources/pyside2/tests/QtTest/CMakeLists.txt @@ -0,0 +1,5 @@ +PYSIDE_TEST(click_test.py) +PYSIDE_TEST(eventfilter_test.py) +# The test is currently permanently broken, needs to be fixed. +#PYSIDE_TEST(touchevent_test.py) +PYSIDE_TEST(qvalidator_test.py) diff --git a/sources/pyside2/tests/QtTest/click_test.py b/sources/pyside2/tests/QtTest/click_test.py new file mode 100644 index 0000000..c03c42d --- /dev/null +++ b/sources/pyside2/tests/QtTest/click_test.py @@ -0,0 +1,55 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''QtTest mouse click functionalities''' + +import unittest + +from PySide2.QtCore import Qt, QObject +from PySide2.QtWidgets import QPushButton, QLineEdit +from PySide2.QtTest import QTest + +from helper import UsesQApplication + +class MouseClickTest(UsesQApplication): + + def testBasic(self): + '''QTest.mouseClick with QCheckBox''' + button = QPushButton() + button.setCheckable(True) + button.setChecked(False) + + QTest.mouseClick(button, Qt.LeftButton) + self.assertTrue(button.isChecked()) + + QTest.mouseClick(button, Qt.LeftButton) + self.assertFalse(button.isChecked()) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtTest/eventfilter_test.py b/sources/pyside2/tests/QtTest/eventfilter_test.py new file mode 100644 index 0000000..f69f85a --- /dev/null +++ b/sources/pyside2/tests/QtTest/eventfilter_test.py @@ -0,0 +1,75 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests for QKeyEvent''' + +import unittest + +from PySide2.QtCore import Qt, QObject, QEvent +from PySide2.QtGui import QKeyEvent +from PySide2.QtWidgets import QLineEdit +from PySide2.QtTest import QTest + +from helper import UsesQApplication + + +class KeyEventFilter(QObject): + + def __init__(self, widget, eventType, key): + QObject.__init__(self) + + self.widget = widget + self.eventType = eventType + self.key = key + + self.processed = False + + def eventFilter(self, obj, event): + if self.widget == obj and event.type() == self.eventType and \ + isinstance(event, QKeyEvent) and event.key() == self.key: + self.processed = True + return True + + return False + +class EventFilterTest(UsesQApplication): + + def testKeyEvent(self): + widget = QLineEdit() + key = Qt.Key_A + eventFilter = KeyEventFilter(widget, QEvent.KeyPress, key) + widget.installEventFilter(eventFilter) + + QTest.keyClick(widget, key) + + self.assertTrue(eventFilter.processed) + + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtTest/qvalidator_test.py b/sources/pyside2/tests/QtTest/qvalidator_test.py new file mode 100644 index 0000000..408f14f --- /dev/null +++ b/sources/pyside2/tests/QtTest/qvalidator_test.py @@ -0,0 +1,133 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import * +from PySide2.QtGui import * +from PySide2.QtWidgets import * +from PySide2.QtTest import * + +import unittest +from helper import UsesQApplication + +class MyValidator1(QValidator): + def fixup(self, input): + return "fixed" + + def validate(self, input, pos): + return (QValidator.Acceptable, "fixed", 1) + +class MyValidator2(QValidator): + def fixup(self, input): + return "fixed" + + def validate(self, input, pos): + return (QValidator.Acceptable, "fixed") + +class MyValidator3(QValidator): + def fixup(self, input): + return "fixed" + + def validate(self, input, pos): + return (QValidator.Acceptable,) + +class MyValidator4(QValidator): + def fixup(self, input): + return "fixed" + + def validate(self, input, pos): + return QValidator.Acceptable + +class MyValidator5(QValidator): + def validate(self, input, pos): + if input.islower(): + return (QValidator.Intermediate, input, pos) + else: + return (QValidator.Acceptable, input, pos) + + def fixup(self, input): + return "22" + +class QValidatorTest(UsesQApplication): + def testValidator1(self): + line = QLineEdit() + line.setValidator(MyValidator1()) + line.show() + line.setText("foo") + + QTimer.singleShot(0, line.close) + self.app.exec_() + + self.assertEqual(line.text(), "fixed") + self.assertEqual(line.cursorPosition(), 1) + + def testValidator2(self): + line = QLineEdit() + line.setValidator(MyValidator2()) + line.show() + line.setText("foo") + + QTimer.singleShot(0, line.close) + self.app.exec_() + + self.assertEqual(line.text(), "fixed") + self.assertEqual(line.cursorPosition(), 3) + + def testValidator3(self): + line = QLineEdit() + line.setValidator(MyValidator3()) + line.show() + line.setText("foo") + + QTimer.singleShot(0, line.close) + self.app.exec_() + + self.assertEqual(line.text(), "foo") + self.assertEqual(line.cursorPosition(), 3) + + def testValidator4(self): + line = QLineEdit() + line.setValidator(MyValidator4()) + line.show() + line.setText("foo") + + QTimer.singleShot(0, line.close) + self.app.exec_() + + self.assertEqual(line.text(), "foo") + self.assertEqual(line.cursorPosition(), 3) + + def testValidator5(self): + line = QLineEdit() + line.show() + line.setValidator(MyValidator5()) + line.setText("foo") + QTest.keyClick(line, Qt.Key_Return) + self.assertEqual(line.text(), "22") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtTest/touchevent_test.py b/sources/pyside2/tests/QtTest/touchevent_test.py new file mode 100644 index 0000000..1fa8adc --- /dev/null +++ b/sources/pyside2/tests/QtTest/touchevent_test.py @@ -0,0 +1,77 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import QWidget +from PySide2.QtCore import QPoint, QTimer, Qt, QEvent +from PySide2.QtGui import QTouchDevice +from PySide2.QtTest import QTest + +import unittest + +from helper import UsesQApplication + +class MyWidget(QWidget): + def __init__(self, parent = None): + QWidget.__init__(self, parent) + self._sequence = [] + # Fixme (Qt 5): The device needs to be registered (using + # QWindowSystemInterface::registerTouchDevice()) for the test to work + self._device = QTouchDevice() + self.setAttribute(Qt.WA_AcceptTouchEvents) + QTimer.singleShot(200, self.generateEvent) + + def event(self, e): + self._sequence.append(e.type()) + return QWidget.event(self, e) + + def generateEvent(self): + o = QTest.touchEvent(self, self._device) + o.press(0, QPoint(10, 10)) + o.commit() + del o + + QTest.touchEvent(self, self._device).press(0, QPoint(10, 10)) + QTest.touchEvent(self, self._device).stationary(0).press(1, QPoint(40, 10)) + QTest.touchEvent(self, self._device).move(0, QPoint(12, 12)).move(1, QPoint(45, 5)) + QTest.touchEvent(self, self._device).release(0, QPoint(12, 12)).release(1, QPoint(45, 5)) + QTimer.singleShot(200, self.deleteLater) + + +class TouchEventTest(UsesQApplication): + def testCreateEvent(self): + w = MyWidget() + w.show() + self.app.exec_() + # same values as C++ + self.assertEqual(w._sequence.count(QEvent.Type.TouchBegin), 2) + self.assertEqual(w._sequence.count(QEvent.Type.TouchUpdate), 2) + self.assertEqual(w._sequence.count(QEvent.Type.TouchEnd), 1) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtTextToSpeech/CMakeLists.txt b/sources/pyside2/tests/QtTextToSpeech/CMakeLists.txt new file mode 100644 index 0000000..6f58515 --- /dev/null +++ b/sources/pyside2/tests/QtTextToSpeech/CMakeLists.txt @@ -0,0 +1 @@ +PYSIDE_TEST(qtexttospeech_test.py) diff --git a/sources/pyside2/tests/QtTextToSpeech/qtexttospeech_test.py b/sources/pyside2/tests/QtTextToSpeech/qtexttospeech_test.py new file mode 100644 index 0000000..69ffed2 --- /dev/null +++ b/sources/pyside2/tests/QtTextToSpeech/qtexttospeech_test.py @@ -0,0 +1,63 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QTextToSpeech methods''' + +from helper import UsesQApplication +import sys +import unittest + +from PySide2.QtCore import QTimer + +try: + from PySide2.QtTextToSpeech import QTextToSpeech, QVoice +except ImportError: + print("Skipping test due to missing QtTextToSpeech module") + sys.exit(0) + +class QTextToSpeechTestCase(UsesQApplication): + '''Tests related to QTextToSpeech''' + def testSay(self): + engines = QTextToSpeech.availableEngines() + if not engines: + print('No QTextToSpeech engines available') + else: + speech = QTextToSpeech(engines[0]) + speech.stateChanged.connect(self._slotStateChanged) + speech.say("Hello, PySide2") + QTimer.singleShot(5000, self.app.quit) + self.app.exec_() + + def _slotStateChanged(self, state): + if (state == QTextToSpeech.State.Ready): + self.app.quit() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtUiTools/CMakeLists.txt b/sources/pyside2/tests/QtUiTools/CMakeLists.txt new file mode 100644 index 0000000..68ed7f1 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/CMakeLists.txt @@ -0,0 +1,13 @@ +PYSIDE_TEST(bug_360.py) +PYSIDE_TEST(bug_376.py) +PYSIDE_TEST(bug_392.py) +PYSIDE_TEST(bug_426.py) +PYSIDE_TEST(bug_552.py) +PYSIDE_TEST(bug_797.py) +PYSIDE_TEST(bug_909.py) +PYSIDE_TEST(bug_913.py) +PYSIDE_TEST(bug_958.py) +PYSIDE_TEST(bug_965.py) +PYSIDE_TEST(bug_1060.py) +PYSIDE_TEST(uiloader_test.py) +PYSIDE_TEST(ui_test.py) diff --git a/sources/pyside2/tests/QtUiTools/action.ui b/sources/pyside2/tests/QtUiTools/action.ui new file mode 100644 index 0000000..9eda559 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/action.ui @@ -0,0 +1,16 @@ + + main_window + + + + + + + foo + + + + + + + diff --git a/sources/pyside2/tests/QtUiTools/bug_1060.py b/sources/pyside2/tests/QtUiTools/bug_1060.py new file mode 100644 index 0000000..94c15b5 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_1060.py @@ -0,0 +1,46 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' unit test for BUG #1060 ''' + +from PySide2.QtWidgets import QApplication +from PySide2.QtUiTools import QUiLoader +from helper import adjust_filename + +class MyQUiLoader(QUiLoader): + def __init__(self): + super(MyQUiLoader, self).__init__() + + def createWidget(self, *args): + return super(MyQUiLoader, self).createWidget(*args) + +if __name__ == "__main__": + app = QApplication([]) + + ui = MyQUiLoader().load(adjust_filename("bug_1060.ui", __file__)) + ui.show() diff --git a/sources/pyside2/tests/QtUiTools/bug_1060.ui b/sources/pyside2/tests/QtUiTools/bug_1060.ui new file mode 100644 index 0000000..f4044a8 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_1060.ui @@ -0,0 +1,19 @@ + + + Dialog + + + + 0 + 0 + 100 + 100 + + + + Dialog + + + + + diff --git a/sources/pyside2/tests/QtUiTools/bug_360.py b/sources/pyside2/tests/QtUiTools/bug_360.py new file mode 100644 index 0000000..345c4f9 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_360.py @@ -0,0 +1,64 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import os +from helper import UsesQApplication + +from PySide2 import QtCore, QtWidgets +from PySide2.QtUiTools import QUiLoader + +class MyQUiLoader(QUiLoader): + def __init__(self, baseinstance): + QUiLoader.__init__(self) + self.baseinstance = baseinstance + self._widgets = [] + + def createWidget(self, className, parent=None, name=""): + widget = QUiLoader.createWidget(self, className, parent, name) + self._widgets.append(widget) + if parent is None: + return self.baseinstance + else: + setattr(self.baseinstance, name, widget) + return widget + +class ButTest(UsesQApplication): + def testCase(self): + w = QtWidgets.QWidget() + loader = MyQUiLoader(w) + + filePath = os.path.join(os.path.dirname(__file__), 'minimal.ui') + ui = loader.load(filePath) + + self.assertEqual(len(loader._widgets), 1) + self.assertEqual(type(loader._widgets[0]), QtWidgets.QFrame) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtUiTools/bug_376.py b/sources/pyside2/tests/QtUiTools/bug_376.py new file mode 100644 index 0000000..f26177a --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_376.py @@ -0,0 +1,47 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import os +from helper import UsesQApplication + +from PySide2 import QtCore, QtWidgets +from PySide2.QtUiTools import QUiLoader + +class BugTest(UsesQApplication): + def testCase(self): + w = QtWidgets.QWidget() + loader = QUiLoader() + + filePath = os.path.join(os.path.dirname(__file__), 'test.ui') + result = loader.load(filePath, w) + self.assertTrue(isinstance(result.child_object, QtWidgets.QFrame)) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtUiTools/bug_392.py b/sources/pyside2/tests/QtUiTools/bug_392.py new file mode 100644 index 0000000..9e86481 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_392.py @@ -0,0 +1,75 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import os +from helper import UsesQApplication + +from PySide2 import QtWidgets +from PySide2.QtUiTools import QUiLoader + +class MyWidget(QtWidgets.QComboBox): + def __init__(self, parent=None): + QtWidgets.QComboBox.__init__(self, parent) + + def isPython(self): + return True + +class BugTest(UsesQApplication): + def testCase(self): + w = QtWidgets.QWidget() + loader = QUiLoader() + + filePath = os.path.join(os.path.dirname(__file__), 'action.ui') + result = loader.load(filePath, w) + self.assertTrue(isinstance(result.actionFoo, QtWidgets.QAction)) + + def testPythonCustomWidgets(self): + w = QtWidgets.QWidget() + loader = QUiLoader() + loader.registerCustomWidget(MyWidget) + + filePath = os.path.join(os.path.dirname(__file__), 'pycustomwidget.ui') + result = loader.load(filePath, w) + self.assertTrue(isinstance(result.custom, MyWidget)) + self.assertTrue(result.custom.isPython()) + + def testPythonCustomWidgetsTwice(self): + w = QtWidgets.QWidget() + loader = QUiLoader() + loader.registerCustomWidget(MyWidget) + + filePath = os.path.join(os.path.dirname(__file__), 'pycustomwidget2.ui') + result = loader.load(filePath, w) + self.assertTrue(isinstance(result.custom, MyWidget)) + self.assertTrue(isinstance(result.custom2, MyWidget)) + self.assertTrue(result.custom.isPython()) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtUiTools/bug_426.py b/sources/pyside2/tests/QtUiTools/bug_426.py new file mode 100644 index 0000000..5b055a4 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_426.py @@ -0,0 +1,46 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +import os +from PySide2 import QtCore, QtWidgets +from PySide2.QtUiTools import QUiLoader + +class Window(object): + def __init__(self): + loader = QUiLoader() + filePath = os.path.join(os.path.dirname(__file__), 'bug_426.ui') + self.widget = loader.load(filePath) + self.group = QtWidgets.QActionGroup(self.widget) + self.widget.show() + QtCore.QTimer.singleShot(0, self.widget.close) + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + win = Window() + sys.exit(app.exec_()) diff --git a/sources/pyside2/tests/QtUiTools/bug_426.ui b/sources/pyside2/tests/QtUiTools/bug_426.ui new file mode 100644 index 0000000..99353cd --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_426.ui @@ -0,0 +1,19 @@ + + + Form + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + diff --git a/sources/pyside2/tests/QtUiTools/bug_552.py b/sources/pyside2/tests/QtUiTools/bug_552.py new file mode 100644 index 0000000..b9d4f75 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_552.py @@ -0,0 +1,49 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from helper import adjust_filename +from PySide2 import QtWidgets, QtCore +from PySide2.QtUiTools import QUiLoader + +class View_1(QtWidgets.QWidget): + + def __init__(self): + QtWidgets.QWidget.__init__(self) + loader = QUiLoader() + widget = loader.load(adjust_filename('bug_552.ui', __file__), self) + self.children = [] + for child in widget.findChildren(QtCore.QObject, None): + self.children.append(child) + self.t = widget.tabWidget + self.t.removeTab(0) + +app = QtWidgets.QApplication([]) +window = View_1() +window.show() + +# If it doesn't crash it works :-) diff --git a/sources/pyside2/tests/QtUiTools/bug_552.ui b/sources/pyside2/tests/QtUiTools/bug_552.ui new file mode 100644 index 0000000..f98da44 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_552.ui @@ -0,0 +1,42 @@ + + + Form + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 130 + 80 + 139 + 80 + + + + 0 + + + + Tab 1 + + + + + Tab 2 + + + + + + + diff --git a/sources/pyside2/tests/QtUiTools/bug_797.py b/sources/pyside2/tests/QtUiTools/bug_797.py new file mode 100644 index 0000000..b1a0e5b --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_797.py @@ -0,0 +1,39 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtUiTools +from PySide2 import QtCore +from PySide2 import QtWidgets +from helper import adjust_filename + +app = QtWidgets.QApplication([]) +loader = QtUiTools.QUiLoader() +file = QtCore.QFile(adjust_filename('bug_552.ui', __file__)) +w = QtWidgets.QWidget() +# An exception can't be thrown +mainWindow = loader.load(file, w) diff --git a/sources/pyside2/tests/QtUiTools/bug_909.py b/sources/pyside2/tests/QtUiTools/bug_909.py new file mode 100644 index 0000000..c4185e1 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_909.py @@ -0,0 +1,52 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +import unittest + +from PySide2.QtCore import QFile +from PySide2.QtWidgets import QTabWidget +from PySide2.QtUiTools import QUiLoader + +from helper import UsesQApplication +from helper import adjust_filename + +class TestDestruction(UsesQApplication): + def testBug909(self): + fileName = QFile(adjust_filename('bug_909.ui', __file__)) + loader = QUiLoader() + main_win = loader.load(fileName) + self.assertEqual(sys.getrefcount(main_win), 2) + fileName.close() + + tw = QTabWidget(main_win) + main_win.setCentralWidget(tw) + main_win.show() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtUiTools/bug_909.ui b/sources/pyside2/tests/QtUiTools/bug_909.ui new file mode 100644 index 0000000..b07f62d --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_909.ui @@ -0,0 +1,31 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + 0 + 0 + 800 + 25 + + + + + + + + diff --git a/sources/pyside2/tests/QtUiTools/bug_913.py b/sources/pyside2/tests/QtUiTools/bug_913.py new file mode 100644 index 0000000..9ace5bb --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_913.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +import unittest +from helper import adjust_filename + +from PySide2.QtCore import * +from PySide2.QtWidgets import * +from PySide2.QtUiTools import * + +class TestBug913 (unittest.TestCase): + + def testIt(self): + app = QApplication([]) + + loader = QUiLoader() + widget = loader.load(adjust_filename('bug_913.ui', __file__)) + widget.tabWidget.currentIndex() # direct child is available as member + widget.le_first.setText('foo') # child of QTabWidget must also be available! + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtUiTools/bug_913.ui b/sources/pyside2/tests/QtUiTools/bug_913.ui new file mode 100644 index 0000000..0fc95fd --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_913.ui @@ -0,0 +1,57 @@ + + + Form + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + + Tab 1 + + + + + + First name: + + + + + + + + + + Last name: + + + + + + + + + + + Tab 2 + + + + + + + + + diff --git a/sources/pyside2/tests/QtUiTools/bug_958.py b/sources/pyside2/tests/QtUiTools/bug_958.py new file mode 100644 index 0000000..5034334 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_958.py @@ -0,0 +1,52 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2 import QtWidgets, QtUiTools +from helper import adjust_filename +from helper import TimedQApplication + +class Gui_Qt(QtWidgets.QMainWindow): + def __init__(self, parent=None): + super(Gui_Qt, self).__init__(parent) + + lLoader = QtUiTools.QUiLoader() + + # this used to cause a segfault because the old inject code used to destroy the parent layout + self._cw = lLoader.load(adjust_filename('bug_958.ui', __file__), self) + + self.setCentralWidget(self._cw) + +class BugTest(TimedQApplication): + def testCase(self): + lMain = Gui_Qt() + lMain.show() + self.app.exec_() + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtUiTools/bug_958.ui b/sources/pyside2/tests/QtUiTools/bug_958.ui new file mode 100644 index 0000000..57cdbdd --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_958.ui @@ -0,0 +1,48 @@ + + + customWidget + + + + 0 + 0 + 626 + 578 + + + + + 500 + 0 + + + + Form + + + + + + + + + 0 + + + + + + + + + &Berechnen + + + + + + + + + + diff --git a/sources/pyside2/tests/QtUiTools/bug_965.py b/sources/pyside2/tests/QtUiTools/bug_965.py new file mode 100644 index 0000000..b0df5fc --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_965.py @@ -0,0 +1,48 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtUiTools import QUiLoader +import unittest + +from helper import UsesQApplication +from helper import adjust_filename + +class MyQUiLoader(QUiLoader): + def __init__(self): + super(MyQUiLoader, self).__init__() + + def createWidget(self, className, parent=None, name=""): + return None + +class BugTest(UsesQApplication): + def testCase(self): + loader = MyQUiLoader() + self.assertRaises(RuntimeError, loader.load, adjust_filename('bug_965.ui', __file__)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtUiTools/bug_965.ui b/sources/pyside2/tests/QtUiTools/bug_965.ui new file mode 100644 index 0000000..e324db8 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/bug_965.ui @@ -0,0 +1,27 @@ + + + + + MainWindow + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + + + diff --git a/sources/pyside2/tests/QtUiTools/minimal.ui b/sources/pyside2/tests/QtUiTools/minimal.ui new file mode 100644 index 0000000..c6bb70c --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/minimal.ui @@ -0,0 +1,6 @@ + + + Form + + + diff --git a/sources/pyside2/tests/QtUiTools/pycustomwidget.ui b/sources/pyside2/tests/QtUiTools/pycustomwidget.ui new file mode 100644 index 0000000..c066153 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/pycustomwidget.ui @@ -0,0 +1,36 @@ + + + qwidget + + + + 0 + 0 + 400 + 300 + + + + + + + + + 10 + 10 + 79 + 23 + + + + + + + MyWidget + QComboBox +
customwidget
+
+
+ + +
diff --git a/sources/pyside2/tests/QtUiTools/pycustomwidget2.ui b/sources/pyside2/tests/QtUiTools/pycustomwidget2.ui new file mode 100644 index 0000000..8826ac1 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/pycustomwidget2.ui @@ -0,0 +1,48 @@ + + + qwidget + + + + 0 + 0 + 400 + 300 + + + + + + + + + + 10 + 10 + 79 + 23 + + + + + + + + 10 + 10 + 79 + 23 + + + + + + + MyWidget + QComboBox +
customwidget
+
+
+ + +
diff --git a/sources/pyside2/tests/QtUiTools/test.ui b/sources/pyside2/tests/QtUiTools/test.ui new file mode 100644 index 0000000..60afe22 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/test.ui @@ -0,0 +1,48 @@ + + + Form + + + + 0 + 0 + 185 + 133 + + + + Form + + + + + 0 + 0 + 181 + 131 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 50 + 60 + 80 + 25 + + + + PushButton + + + + + + + diff --git a/sources/pyside2/tests/QtUiTools/ui_test.py b/sources/pyside2/tests/QtUiTools/ui_test.py new file mode 100644 index 0000000..f84f9c3 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/ui_test.py @@ -0,0 +1,41 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtUiTools import QUiLoader + +from helper import UsesQApplication + +class QUiLoaderCreation(UsesQApplication): + + def testConstructor(self): + loader = QUiLoader() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtUiTools/uiloader_test.py b/sources/pyside2/tests/QtUiTools/uiloader_test.py new file mode 100644 index 0000000..c550b80 --- /dev/null +++ b/sources/pyside2/tests/QtUiTools/uiloader_test.py @@ -0,0 +1,71 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import os +from helper import UsesQApplication + +from PySide2.QtWidgets import QWidget +from PySide2.QtUiTools import QUiLoader + +def get_file_path(): + for path in file_path: + if os.path.exists(path): + return path + return "" + +class QUioaderTeste(UsesQApplication): + def testLoadFile(self): + filePath = os.path.join(os.path.dirname(__file__), 'test.ui') + loader = QUiLoader() + parent = QWidget() + w = loader.load(filePath, parent) + self.assertNotEqual(w, None) + + self.assertEqual(len(parent.children()), 1) + + child = w.findChild(QWidget, "child_object") + self.assertNotEqual(child, None) + self.assertEqual(w.findChild(QWidget, "grandson_object"), child.findChild(QWidget, "grandson_object")) + + def testLoadFileUnicodeFilePath(self): + filePath = str(os.path.join(os.path.dirname(__file__), 'test.ui')) + loader = QUiLoader() + parent = QWidget() + w = loader.load(filePath, parent) + self.assertNotEqual(w, None) + + self.assertEqual(len(parent.children()), 1) + + child = w.findChild(QWidget, "child_object") + self.assertNotEqual(child, None) + self.assertEqual(w.findChild(QWidget, "grandson_object"), child.findChild(QWidget, "grandson_object")) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWebChannel/CMakeLists.txt b/sources/pyside2/tests/QtWebChannel/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/QtWebChannel/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/QtWebEngine/CMakeLists.txt b/sources/pyside2/tests/QtWebEngine/CMakeLists.txt new file mode 100644 index 0000000..0e85a69 --- /dev/null +++ b/sources/pyside2/tests/QtWebEngine/CMakeLists.txt @@ -0,0 +1,29 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +PYSIDE_TEST(web_engine_initialize.py) diff --git a/sources/pyside2/tests/QtWebEngine/web_engine_initialize.py b/sources/pyside2/tests/QtWebEngine/web_engine_initialize.py new file mode 100644 index 0000000..f6abeb9 --- /dev/null +++ b/sources/pyside2/tests/QtWebEngine/web_engine_initialize.py @@ -0,0 +1,46 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import unittest + +from PySide2.QtCore import QTimer +from PySide2.QtWebEngine import QtWebEngine +from PySide2.QtWidgets import QApplication + + +class MainTest(unittest.TestCase): + def test_initializePresent(self): + app = QApplication([]) + QtWebEngine.initialize() + QTimer.singleShot(2000, app.quit) + app.exec_() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWebEngineCore/CMakeLists.txt b/sources/pyside2/tests/QtWebEngineCore/CMakeLists.txt new file mode 100644 index 0000000..06a9e9c --- /dev/null +++ b/sources/pyside2/tests/QtWebEngineCore/CMakeLists.txt @@ -0,0 +1,29 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +PYSIDE_TEST(web_engine_custom_scheme.py) diff --git a/sources/pyside2/tests/QtWebEngineCore/web_engine_custom_scheme.py b/sources/pyside2/tests/QtWebEngineCore/web_engine_custom_scheme.py new file mode 100644 index 0000000..8da2b45 --- /dev/null +++ b/sources/pyside2/tests/QtWebEngineCore/web_engine_custom_scheme.py @@ -0,0 +1,65 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import unittest + +from PySide2.QtCore import QBuffer, QTimer +from PySide2.QtWidgets import QApplication +from PySide2.QtWebEngineWidgets import QWebEngineView, QWebEngineProfile +from PySide2.QtWebEngineCore import QWebEngineUrlSchemeHandler +import py3kcompat as py3k + +class TestSchemeHandler(QWebEngineUrlSchemeHandler): + def requestStarted(self, request): + if request.requestUrl() == "testpy:hello": + request.redirect("testpy:goodbye") + return + + self.buffer = QBuffer() + self.buffer.setData(py3k.b("Really nice goodbye text.")) + self.buffer.aboutToClose.connect(self.buffer.deleteLater) + request.reply(py3k.b("text/plain;charset=utf-8"), self.buffer) + +class MainTest(unittest.TestCase): + def test_SchemeHandlerRedirect(self): + app = QApplication([]) + handler = TestSchemeHandler() + profile = QWebEngineProfile.defaultProfile() + profile.installUrlSchemeHandler(py3k.b("testpy"), handler) + view = QWebEngineView() + view.loadFinished.connect(app.quit) + QTimer.singleShot(5000, app.quit) + view.show() + view.load("testpy:hello") + app.exec_() + self.assertEqual(view.url(), "testpy:goodbye") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWebEngineWidgets/CMakeLists.txt b/sources/pyside2/tests/QtWebEngineWidgets/CMakeLists.txt new file mode 100644 index 0000000..b4afb06 --- /dev/null +++ b/sources/pyside2/tests/QtWebEngineWidgets/CMakeLists.txt @@ -0,0 +1,29 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +PYSIDE_TEST(pyside-474-qtwebengineview.py) diff --git a/sources/pyside2/tests/QtWebEngineWidgets/pyside-474-qtwebengineview.py b/sources/pyside2/tests/QtWebEngineWidgets/pyside-474-qtwebengineview.py new file mode 100644 index 0000000..a56d6d0 --- /dev/null +++ b/sources/pyside2/tests/QtWebEngineWidgets/pyside-474-qtwebengineview.py @@ -0,0 +1,45 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import unittest + +from PySide2 import QtWidgets +from PySide2 import QtWebEngineWidgets + +class MainTest(unittest.TestCase): + + def test_WebEngineView_findText_exists(self): + qApp = (QtWidgets.QApplication.instance() or + QtWidgets.QApplication([])) + view = QtWebEngineWidgets.QWebEngineView() + view.findText("nothing") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWebKit/CMakeLists.txt b/sources/pyside2/tests/QtWebKit/CMakeLists.txt new file mode 100644 index 0000000..7fab647 --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/CMakeLists.txt @@ -0,0 +1,11 @@ +PYSIDE_TEST(bug_448.py) +PYSIDE_TEST(bug_694.py) +PYSIDE_TEST(bug_803.py) +PYSIDE_TEST(bug_899.py) +PYSIDE_TEST(bug_959.py) +PYSIDE_TEST(qvariantlist_property_test.py) +PYSIDE_TEST(qml_plugin_test.py) +PYSIDE_TEST(shouldInterruptjavascript_test.py) +PYSIDE_TEST(webpage_test.py) +PYSIDE_TEST(webview_test.py) +PYSIDE_TEST(webframe_test.py) diff --git a/sources/pyside2/tests/QtWebKit/bug_448.py b/sources/pyside2/tests/QtWebKit/bug_448.py new file mode 100644 index 0000000..c834184 --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/bug_448.py @@ -0,0 +1,47 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for bug: http://bugs.openbossa.org/show_bug.cgi?id=448''' + +import unittest +import sys + +from PySide2.QtWidgets import QApplication +from PySide2.QtWebKit import QWebView + +class Bug448(unittest.TestCase): + def onError(self, erros): + pass + + def testReturnOwnership(self): + app = QApplication(sys.argv) + webview = QWebView() + webview.page().networkAccessManager().sslErrors.connect(self.onError) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWebKit/bug_694.py b/sources/pyside2/tests/QtWebKit/bug_694.py new file mode 100644 index 0000000..60fb37f --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/bug_694.py @@ -0,0 +1,78 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +import unittest +from PySide2.QtCore import * +from PySide2.QtWidgets import * +from PySide2.QtWebKit import * + +class ErrorPage (QWebPage): + + def __init__(self): + QWebPage.__init__(self) + self.rcv_extension = None + self.rcv_url = None + self.rcv_url_copy = None + self.rcv_option_type = None + self.rcv_output_type = None + + + def supportsExtension(self, extension): + return extension == QWebPage.ErrorPageExtension + + def extension(self, extension, option, output): + self.rcv_extension = extension + self.rcv_url = option.url + self.rcv_url_copy = QUrl(option.url) + self.rcv_option_type = type(option) + self.rcv_output_type = type(output) + return True + +class TestWebPageExtension(unittest.TestCase): + def testIt(self): + app = QApplication([]) + ep = ErrorPage() + view = QWebView() + view.setPage(ep) + view.load("foo://bar") # Some malformmed url + view.show() + + # If the timeout is 0 the webpage isn't even loaded on Qt4.6-i386, so we use 100 :-) + QTimer.singleShot(100, app.quit) + app.exec_() + + self.assertEqual(ep.rcv_extension, QWebPage.ErrorPageExtension) + self.assertRaises(RuntimeError, ep.rcv_url.__str__) + + self.assertEqual(ep.rcv_url_copy, "foo://bar") + self.assertEqual(ep.rcv_option_type, QWebPage.ErrorPageExtensionOption) + self.assertEqual(ep.rcv_output_type, QWebPage.ErrorPageExtensionReturn) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWebKit/bug_803.py b/sources/pyside2/tests/QtWebKit/bug_803.py new file mode 100644 index 0000000..ea2b34c --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/bug_803.py @@ -0,0 +1,46 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtWidgets import * +from PySide2.QtWebKit import * + +class TestBug803 (unittest.TestCase): + + def testIt(self): + app = QApplication([]) + page = QWebPage() + frame = page.mainFrame() + frame.setHtml("

1

2

") + elems = frame.findAllElements("p") + self.assertEqual(len(elems), 2) + self.assertEqual(elems[0].toPlainText(), "1") + self.assertEqual(elems[1].toPlainText(), "2") + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtWebKit/bug_899.py b/sources/pyside2/tests/QtWebKit/bug_899.py new file mode 100644 index 0000000..817aeb6 --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/bug_899.py @@ -0,0 +1,64 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import Property, QObject +from PySide2.QtWebKit import QWebView +from helper import TimedQApplication + +class TestLambdaPropery(TimedQApplication): + + def testBug899(self): + html = ''' + + + + ''' + + class Obj(object): + list1 = ['foo', 'bar', 'baz'] + list2 = ['fi', 'fo', 'fum'] + + obj = Obj() + + wrapper_dict = {} + for name in ('list1', 'list2'): + getter = lambda arg=None, name=name: getattr(obj, name) + wrapper_dict[name] = Property('QVariantList', getter) + wrapper = type('PyObj', (QObject,), wrapper_dict) + + view = QWebView() + view.page().mainFrame().addToJavaScriptWindowObject('py_obj', wrapper()) + view.setHtml(html) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWebKit/bug_959.py b/sources/pyside2/tests/QtWebKit/bug_959.py new file mode 100644 index 0000000..2ebfdbe --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/bug_959.py @@ -0,0 +1,128 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import QObject, Slot, QTimer +from PySide2.QtWebKit import QWebView +from PySide2.QtWidgets import QApplication +from PySide2 import QtCore + +import sys +import unittest + +from helper import UsesQApplication + +functionID = -1 +currentWebView = None + +class JSFuncs(QObject): + @Slot(str,result=str) + def slot_str_str(self, x): + global functionID + functionID = 0 + return x.upper() + + @Slot(str,result='QVariant') + def slot_str_list(self, x): + global functionID + functionID = 1 + return [x, x] + + @Slot('QStringList',result=str) + def slot_strlist_str(self, x): + global functionID + functionID = 2 + return x[-1] + + @Slot('QVariant',result=str) + def slot_variant_str(self, x): + global functionID + functionID = 3 + return str(x) + + @Slot('QVariantList',result=str) + def slot_variantlist_str(self, x): + global functionID + functionID = 4 + return str(x[-1]) + + @Slot('QVariantMap',result=str) + def slot_variantmap_str(self, x): + global functionID + functionID = 5 + return str(x["foo"]) + + + +PAGE_DATA = "data:text/html," +FUNCTIONS_LIST = ['jsfuncs.slot_str_str("hello")', + 'jsfuncs.slot_str_list("hello")', + 'jsfuncs.slot_strlist_str(["hello","world"])', + 'jsfuncs.slot_variant_str("hello")', + 'jsfuncs.slot_variantlist_str(["hello","world"])', + 'jsfuncs.slot_variantmap_str({"foo": "bar"})'] + + +def onLoadFinished( result ): + QTimer.singleShot( 100, createNextWebView ) + +def createNextWebView(): + global functionID + + nListCount = len(FUNCTIONS_LIST) - 1 + functionID = functionID + 1 + print functionID + + if functionID < nListCount: + createWebView( functionID ) + else: + QTimer.singleShot(300, QApplication.instance().quit) + + +def createWebView( nIndex ): + global functionID + global currentWebView + + functionID = nIndex + currentWebView = QWebView() + currentWebView._jsfuncs = JSFuncs() + currentWebView.page().mainFrame().addToJavaScriptWindowObject("jsfuncs", currentWebView._jsfuncs) + QObject.connect( currentWebView, QtCore.SIGNAL('loadFinished( bool )'), onLoadFinished ) + currentWebView.load(PAGE_DATA % FUNCTIONS_LIST[ nIndex ]) + currentWebView.show() + +class Bug959(UsesQApplication): + + def testJavaScriptInWebViewForCrash( self ): + # wait for the webview load to be finished before creating the next webview + # don't create the webview inside of onLoadFinished + # also call onLoadFinished with the correct number of variables + createNextWebView() + self.app.exec_() + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtWebKit/fox.html b/sources/pyside2/tests/QtWebKit/fox.html new file mode 100644 index 0000000..da873b1 --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/fox.html @@ -0,0 +1,7 @@ + +Title + + +

The quick brown fox jumps over the lazy dog.

+ + diff --git a/sources/pyside2/tests/QtWebKit/qml_plugin_test.py b/sources/pyside2/tests/QtWebKit/qml_plugin_test.py new file mode 100644 index 0000000..5861854 --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/qml_plugin_test.py @@ -0,0 +1,88 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import os +import sys +import unittest + +from PySide2.QtCore import QUrl, QTimer +from PySide2.QtWidgets import QApplication, QLabel +from PySide2.QtWebKit import QWebPluginFactory, QWebView, QWebSettings + +from helper import UsesQApplication + +class PluginFactory(QWebPluginFactory): + + def plugins(self): + plugins = [] + + mime = self.MimeType() + mime.name = 'DummyFile' + mime.fileExtensions = ['.pys'] + + plugin = self.Plugin() + plugin.name = 'DummyPlugin' + plugin.mimeTypes = [mime] + + plugins.append(plugin) + + return plugins + + def create(self, mimeType, url, argumentNames, argumentValues): + if mimeType != 'application/x-dummy': + return None + + for name, value in zip(argumentNames, argumentValues): + if name == 'text': + text = value + else: + text = "Webkit plugins!" + + widget = QLabel(text) + return widget + +class TestPlugin(UsesQApplication): + + def testPlugin(self): + view = QWebView() + fac = PluginFactory() + view.page().setPluginFactory(fac) + QWebSettings.globalSettings().setAttribute(QWebSettings.PluginsEnabled, True) + + view.load(QUrl(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'qmlplugin', 'index.html'))) + + view.resize(840, 600) + view.show() + + QTimer.singleShot(500, self.app.quit) + + self.app.exec_() + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWebKit/qmlplugin/dummy.pys b/sources/pyside2/tests/QtWebKit/qmlplugin/dummy.pys new file mode 100644 index 0000000..0b7469d --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/qmlplugin/dummy.pys @@ -0,0 +1 @@ +Foobar! diff --git a/sources/pyside2/tests/QtWebKit/qmlplugin/index.html b/sources/pyside2/tests/QtWebKit/qmlplugin/index.html new file mode 100644 index 0000000..db0d6b5 --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/qmlplugin/index.html @@ -0,0 +1,5 @@ + +

Custom Plugin

+ + + diff --git a/sources/pyside2/tests/QtWebKit/qvariantlist_property_test.py b/sources/pyside2/tests/QtWebKit/qvariantlist_property_test.py new file mode 100644 index 0000000..e98de7b --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/qvariantlist_property_test.py @@ -0,0 +1,71 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import Property, QObject +from PySide2.QtWebKit import QWebView +from helper import TimedQApplication + +class TestLoadFinished(TimedQApplication): + + def setUp(self): + TimedQApplication.setUp(self, timeout=1000) + + def tearDown(self): + TimedQApplication.tearDown(self) + + def testQVariantListProperty(self): + class Obj(object): + list = ['foo', 'bar', 'baz'] + + obj = Obj() + + wrapper_dict = {} + for name in ['list']: + getter = lambda arg=None, name=name: getattr(obj, name) + wrapper_dict[name] = Property('QVariantList', getter) + wrapper = type('PyObj', (QObject,), wrapper_dict) + + view = QWebView() + frame = view.page().mainFrame() + frame.addToJavaScriptWindowObject('py_obj', wrapper()) + + html = ''' + + + + ''' + view.setHtml(html) + view.show() + self.app.exec_() + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWebKit/shouldInterruptjavascript_test.py b/sources/pyside2/tests/QtWebKit/shouldInterruptjavascript_test.py new file mode 100644 index 0000000..b49fe13 --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/shouldInterruptjavascript_test.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2 import QtCore, QtWebKit + +from helper import UsesQApplication + +class QWebPageHeadless(QtWebKit.QWebPage): + # FIXME: This is not working, the slot is not overriden! + # http://doc.qt.nokia.com/4.7-snapshot/qwebpage.html#shouldInterruptJavaScript + @QtCore.Slot() + def shouldInterruptJavaScript(self): + self._interrupted = True + QtCore.QTimer.singleShot(300, self._app.quit) + return True + +class TestSlotOverride(UsesQApplication): + def testFunctionCall(self): + page = QWebPageHeadless() + page._interrupted = False + page._app = self.app + page.mainFrame().setHtml('') + self.app.exec_() + self.assertTrue(page._interrupted) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWebKit/webframe_test.py b/sources/pyside2/tests/QtWebKit/webframe_test.py new file mode 100644 index 0000000..4aea670 --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/webframe_test.py @@ -0,0 +1,62 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sys + +from PySide2.QtCore import QObject, SIGNAL, QUrl +from PySide2.QtWebKit import * +from PySide2.QtNetwork import QNetworkRequest + +from helper import adjust_filename, UsesQApplication + + + +class TestWebFrame(UsesQApplication): + def load_finished(self, ok): + self.assertTrue(ok) + page = self.view.page() + self.assertTrue(page) + frame = page.mainFrame() + self.assertTrue(frame) + meta = frame.metaData() + self.assertEqual(meta['description'], ['PySide Test METADATA.']) + self.app.quit() + + def testMetaData(self): + self.view = QWebView() + QObject.connect(self.view, SIGNAL('loadFinished(bool)'), + self.load_finished) + url = QUrl.fromLocalFile(adjust_filename('fox.html', __file__)) + self.view.setUrl(url) + self.app.exec_() + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWebKit/webpage_test.py b/sources/pyside2/tests/QtWebKit/webpage_test.py new file mode 100644 index 0000000..95cd307 --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/webpage_test.py @@ -0,0 +1,88 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QWebPage''' + +import unittest + +from PySide2.QtCore import QObject, SIGNAL, QUrl +from PySide2.QtWebKit import QWebPage +from PySide2.QtNetwork import QNetworkAccessManager + +from helper import adjust_filename, TimedQApplication + +#Define a global timeout because TimedQApplication uses a singleton! +#Use a value big enough to run all the tests. +TIMEOUT = 1000 + +class TestFindText(TimedQApplication): + '''Test cases for finding text''' + + def setUp(self): + TimedQApplication.setUp(self, timeout=TIMEOUT) + self.page = QWebPage() + QObject.connect(self.page, SIGNAL('loadFinished(bool)'), + self.load_finished) + self.called = False + + def tearDown(self): + #Release resources + del self.page + self.called = False + TimedQApplication.tearDown(self) + + def testFindSelectText(self): + url = QUrl.fromLocalFile(adjust_filename('fox.html', __file__)) + self.page.mainFrame().load(url) + self.app.exec_() + self.assertTrue(self.called) + + def load_finished(self, ok): + #Callback to check if load was successful + if ok: + self.called = True + self.assertTrue(self.page.findText('fox')) + self.assertEqual(self.page.selectedText(), 'fox') + self.app.quit() + +class SetNetworkAccessManagerCase(TimedQApplication): + + def setUp(self): + TimedQApplication.setUp(self, timeout=TIMEOUT) + + def testSetNetworkAccessManager(self): + page = QWebPage() + manager = QNetworkAccessManager() + page.setNetworkAccessManager(manager) + + def testNetWorkAccessManager(self): + page = QWebPage() + a = page.networkAccessManager() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWebKit/webview_test.py b/sources/pyside2/tests/QtWebKit/webview_test.py new file mode 100644 index 0000000..ce7a3a7 --- /dev/null +++ b/sources/pyside2/tests/QtWebKit/webview_test.py @@ -0,0 +1,94 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QWebView''' + +import unittest +import py3kcompat as py3k +import sys + +from PySide2.QtCore import QObject, SIGNAL, QUrl +from PySide2.QtWebKit import QWebPage, QWebView +from PySide2.QtNetwork import QNetworkRequest + +from helper import adjust_filename, TimedQApplication + + +class testWebPage(QWebPage): + def sayMyName(self): + return 'testWebPage' + +class TestLoadFinished(TimedQApplication): + '''Test case for signal QWebView.loadFinished(bool)''' + + def setUp(self): + #Acquire resources + TimedQApplication.setUp(self, timeout=1000) + self.view = QWebView() + QObject.connect(self.view, SIGNAL('loadFinished(bool)'), + self.load_finished) + self.called = False + + def tearDown(self): + #Release resources + del self.view + self.called = False + TimedQApplication.tearDown(self) + + def testLoadFinishedFromFile(self): + url = QUrl.fromLocalFile(adjust_filename('fox.html', __file__)) + self.view.setUrl(url) + self.app.exec_() + + self.assertTrue(self.called) + + def testSetPageAndGetPage(self): + twp = testWebPage() + self.view.setPage(twp) + del twp + p = self.view.page() + self.assertEqual(p.sayMyName(), 'testWebPage') + + # Setting the same webpage should not incref the python obj + refCount = sys.getrefcount(p) + self.view.setPage(p) + self.assertEqual(sys.getrefcount(p), refCount) + + # Changing the webpage obj should decref the old one + twp2 = testWebPage() + self.view.setPage(twp2) + self.assertEqual(sys.getrefcount(p), refCount - 1) + + def load_finished(self, ok): + #Callback to check if load was successful + self.app.quit() + if ok: + self.called = True + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWebKitWidgets/CMakeLists.txt b/sources/pyside2/tests/QtWebKitWidgets/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/QtWebKitWidgets/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/QtWebSockets/CMakeLists.txt b/sources/pyside2/tests/QtWebSockets/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/QtWebSockets/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/QtWidgets/CMakeLists.txt b/sources/pyside2/tests/QtWidgets/CMakeLists.txt new file mode 100644 index 0000000..6d86459 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/CMakeLists.txt @@ -0,0 +1,142 @@ +#Keep this in alphabetical sort + +PYSIDE_TEST(action_clear.py) +PYSIDE_TEST(add_action_test.py) +PYSIDE_TEST(api2_test.py) +PYSIDE_TEST(application_test.py) +PYSIDE_TEST(bug_172.py) +PYSIDE_TEST(bug_243.py) +PYSIDE_TEST(bug_307.py) +PYSIDE_TEST(bug_324.py) +PYSIDE_TEST(bug_338.py) +PYSIDE_TEST(bug_363.py) +PYSIDE_TEST(bug_389.py) +PYSIDE_TEST(bug_400.py) +PYSIDE_TEST(bug_416.py) +PYSIDE_TEST(bug_429.py) +PYSIDE_TEST(bug_430.py) +PYSIDE_TEST(bug_433.py) +PYSIDE_TEST(bug_467.py) +PYSIDE_TEST(bug_493.py) +PYSIDE_TEST(bug_512.py) +PYSIDE_TEST(bug_525.py) +PYSIDE_TEST(bug_546.py) +PYSIDE_TEST(bug_547.py) +PYSIDE_TEST(bug_549.py) +PYSIDE_TEST(bug_569.py) +PYSIDE_TEST(bug_575.py) +PYSIDE_TEST(bug_576.py) +PYSIDE_TEST(bug_585.py) +PYSIDE_TEST(bug_589.py) +PYSIDE_TEST(bug_632.py) +PYSIDE_TEST(bug_635.py) +PYSIDE_TEST(bug_640.py) +PYSIDE_TEST(bug_653.py) +PYSIDE_TEST(bug_662.py) +PYSIDE_TEST(bug_667.py) +PYSIDE_TEST(bug_668.py) +PYSIDE_TEST(bug_674.py) +PYSIDE_TEST(bug_675.py) +PYSIDE_TEST(bug_688.py) +PYSIDE_TEST(bug_693.py) +PYSIDE_TEST(bug_696.py) +PYSIDE_TEST(bug_711.py) +PYSIDE_TEST(bug_714.py) +PYSIDE_TEST(bug_722.py) +PYSIDE_TEST(bug_728.py) +PYSIDE_TEST(bug_736.py) +PYSIDE_TEST(bug_750.py) +PYSIDE_TEST(bug_778.py) +PYSIDE_TEST(bug_785.py) +PYSIDE_TEST(bug_793.py) +PYSIDE_TEST(bug_811.py) +PYSIDE_TEST(bug_834.py) +PYSIDE_TEST(bug_836.py) +PYSIDE_TEST(bug_844.py) +PYSIDE_TEST(bug_854.py) +PYSIDE_TEST(bug_860.py) +PYSIDE_TEST(bug_862.py) +PYSIDE_TEST(bug_871.py) +PYSIDE_TEST(bug_879.py) +PYSIDE_TEST(bug_919.py) +PYSIDE_TEST(bug_921.py) +PYSIDE_TEST(bug_941.py) +PYSIDE_TEST(bug_964.py) +PYSIDE_TEST(bug_967.py) +PYSIDE_TEST(bug_972.py) +PYSIDE_TEST(bug_979.py) +PYSIDE_TEST(bug_988.py) +PYSIDE_TEST(bug_998.py) +PYSIDE_TEST(bug_1002.py) +PYSIDE_TEST(bug_1006.py) +PYSIDE_TEST(bug_1048.py) +PYSIDE_TEST(bug_1077.py) +PYSIDE_TEST(customproxywidget_test.py) +PYSIDE_TEST(event_filter_test.py) +PYSIDE_TEST(grandparent_method_test.py) +PYSIDE_TEST(hashabletype_test.py) +PYSIDE_TEST(keep_reference_test.py) +PYSIDE_TEST(missing_symbols_test.py) +PYSIDE_TEST(paint_event_test.py) +PYSIDE_TEST(parent_method_test.py) +PYSIDE_TEST(private_mangle_test.py) +PYSIDE_TEST(python_properties_test.py) +PYSIDE_TEST(qabstracttextdocumentlayout_test.py) +PYSIDE_TEST(qaction_test.py) +PYSIDE_TEST(qapp_issue_585.py) +PYSIDE_TEST(qapp_test.py) +PYSIDE_TEST(qapplication_test.py) +PYSIDE_TEST(qapplication_exit_segfault_test.py) +PYSIDE_TEST(qapplication_singleton_test.py) +PYSIDE_TEST(qbrush_test.py) +PYSIDE_TEST(qdynamic_signal.py) +# TODO: This passes, but requires manual button clicking (at least on mac) +#PYSIDE_TEST(qfontdialog_test.py) +PYSIDE_TEST(qformlayout_test.py) +PYSIDE_TEST(qgraphicsitem_test.py) +PYSIDE_TEST(qgraphicsitem_isblocked_test.py) +PYSIDE_TEST(qgraphicsobjectreimpl_test.py) +PYSIDE_TEST(qgraphicsproxywidget_test.py) +PYSIDE_TEST(qgraphicsscene_test.py) +PYSIDE_TEST(qimage_test.py) +PYSIDE_TEST(qinputdialog_get_test.py) +PYSIDE_TEST(qkeysequenceedit_test.py) +PYSIDE_TEST(qlabel_test.py) +PYSIDE_TEST(qlayout_ref_test.py) +PYSIDE_TEST(qlayout_test.py) +PYSIDE_TEST(qlcdnumber_test.py) +PYSIDE_TEST(qlistwidget_test.py) +PYSIDE_TEST(qlistwidgetitem_test.py) +PYSIDE_TEST(qmainwindow_test.py) +PYSIDE_TEST(qmenu_test.py) +PYSIDE_TEST(qmenuadd_test.py) +PYSIDE_TEST(qobject_mi_test.py) +PYSIDE_TEST(qpen_test.py) +PYSIDE_TEST(qpicture_test.py) +PYSIDE_TEST(qpixmap_constructor.py) +PYSIDE_TEST(qpushbutton_test.py) +PYSIDE_TEST(qshortcut_test.py) +PYSIDE_TEST(qsplitter_test.py) +PYSIDE_TEST(qstandarditemmodel_test.py) +PYSIDE_TEST(qstring_qkeysequence_test.py) +PYSIDE_TEST(qstyle_test.py) +PYSIDE_TEST(qtableview_test.py) +PYSIDE_TEST(qtabwidget_test.py) +PYSIDE_TEST(qtabwidgetclear_test.py) +PYSIDE_TEST(qtextedit_test.py) +PYSIDE_TEST(qtextedit_signal_test.py) +PYSIDE_TEST(qtreeview_test.py) +PYSIDE_TEST(qtreewidget_test.py) +PYSIDE_TEST(qtoolbar_test.py) +PYSIDE_TEST(qtoolbox_test.py) +PYSIDE_TEST(qvariant_test.py) +PYSIDE_TEST(qwidget_setlayout_test.py) +PYSIDE_TEST(qwidget_test.py) +PYSIDE_TEST(qcolormap_test.py) +PYSIDE_TEST(reference_count_test.py) +PYSIDE_TEST(signature_test.py) +PYSIDE_TEST(standardpixmap_test.py) +PYSIDE_TEST(test_module_template.py) +PYSIDE_TEST(virtual_protected_inheritance_test.py) +PYSIDE_TEST(virtual_pure_override_test.py) +PYSIDE_TEST(wrong_return_test.py) diff --git a/sources/pyside2/tests/QtWidgets/action_clear.py b/sources/pyside2/tests/QtWidgets/action_clear.py new file mode 100644 index 0000000..e7bd882 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/action_clear.py @@ -0,0 +1,74 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import QMenu, QWidget, QMenuBar, QToolBar +import weakref + +import unittest +from helper import UsesQApplication + + +class TestQActionLifeCycle(UsesQApplication): + def actionDestroyed(self, act): + self._actionDestroyed = True + + def testMenu(self): + self._actionDestroyed = False + w = QWidget() + menu = QMenu(w) + act = menu.addAction("MENU") + _ref = weakref.ref(act, self.actionDestroyed) + act = None + self.assertFalse(self._actionDestroyed) + menu.clear() + self.assertTrue(self._actionDestroyed) + + def testMenuBar(self): + self._actionDestroyed = False + w = QWidget() + menuBar = QMenuBar(w) + act = menuBar.addAction("MENU") + _ref = weakref.ref(act, self.actionDestroyed) + act = None + self.assertFalse(self._actionDestroyed) + menuBar.clear() + self.assertTrue(self._actionDestroyed) + + def testToolBar(self): + self._actionDestroyed = False + w = QWidget() + toolBar = QToolBar(w) + act = toolBar.addAction("MENU") + _ref = weakref.ref(act, self.actionDestroyed) + act = None + self.assertFalse(self._actionDestroyed) + toolBar.clear() + self.assertTrue(self._actionDestroyed) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/add_action_test.py b/sources/pyside2/tests/QtWidgets/add_action_test.py new file mode 100644 index 0000000..852bcc1 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/add_action_test.py @@ -0,0 +1,71 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests for QMenuBar.addAction(identifier, callback) calls''' + +import unittest + +from PySide2.QtCore import SLOT +from PySide2.QtWidgets import QMenuBar, QAction, QPushButton + +from helper import UsesQApplication + + +class AddActionTest(UsesQApplication): + '''QMenuBar addAction''' + + def tearDown(self): + try: + del self.called + except AttributeError: + pass + super(AddActionTest, self).tearDown() + + def _callback(self): + self.called = True + + def testBasic(self): + '''QMenuBar.addAction(id, callback)''' + menubar = QMenuBar() + action = menubar.addAction("Accounts", self._callback) + action.activate(QAction.Trigger) + self.assertTrue(self.called) + + def testWithCppSlot(self): + '''QMenuBar.addAction(id, object, slot)''' + menubar = QMenuBar() + widget = QPushButton() + widget.setCheckable(True) + widget.setChecked(False) + action = menubar.addAction("Accounts", widget, SLOT("toggle()")) + action.activate(QAction.Trigger) + self.assertTrue(widget.isChecked()) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/api2_test.py b/sources/pyside2/tests/QtWidgets/api2_test.py new file mode 100644 index 0000000..90ad4eb --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/api2_test.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for PySide API2 support''' + + +import unittest +import sys + +from PySide2.QtGui import QIntValidator, QValidator +from PySide2.QtWidgets import QWidget, QSpinBox, QApplication + +from helper import UsesQApplication + +class WidgetValidatorQInt(QWidget, QIntValidator): + def __init__(self, parent=None): + QWidget.__init__(self, parent) + QIntValidator.__init__(self, parent) + +class WidgetValidatorQSpinBox(QSpinBox): + def __init__(self, parent=None): + QSpinBox.__init__(self, parent) + + def fixup(self, text): + print("It was called!") + +class DoubleQObjectInheritanceTest(UsesQApplication): + + def testDouble(self): + '''Double inheritance from QObject classes''' + + obj = WidgetValidatorQInt() + + #QIntValidator methods + state, string, number = obj.validate('Test', 0) + self.assertEqual(state, QValidator.Invalid) + state, string, number = obj.validate('33', 0) + self.assertEqual(state, QValidator.Acceptable) + + def testQSpinBox(self): + obj = WidgetValidatorQSpinBox() + + obj.setRange(1, 10) + obj.setValue(0) + self.assertEqual(obj.value(), 1) + +class QClipboardTest(UsesQApplication): + + def testQClipboard(self): + #skip this test on MacOS because the clipboard is not available during the ssh session + #this cause problems in the buildbot + if sys.platform == 'darwin': + return + clip = QApplication.clipboard() + clip.setText("Testing this thing!") + + text, subtype = clip.text("") + self.assertEqual(subtype, "plain") + self.assertEqual(text, "Testing this thing!") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/application_test.py b/sources/pyside2/tests/QtWidgets/application_test.py new file mode 100644 index 0000000..bd0f941 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/application_test.py @@ -0,0 +1,51 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from testbinding import TestObject +from PySide2.QtWidgets import QApplication + +class QApplicationInstance(unittest.TestCase): + + def appDestroyed(self): + sefl.assertTrue(False) + + def testInstanceObject(self): + TestObject.createApp() + app1 = QApplication.instance() + app2 = QApplication.instance() + app1.setObjectName("MyApp") + self.assertEqual(app1, app2) + self.assertEqual(app2.objectName(), app1.objectName()) + app1.destroyed.connect(self.appDestroyed) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/bug_1002.py b/sources/pyside2/tests/QtWidgets/bug_1002.py new file mode 100644 index 0000000..e4f5bf7 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_1002.py @@ -0,0 +1,47 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sys +from PySide2.QtWidgets import QWidget, QPushButton + +from helper import UsesQApplication + +class TestBug1002 (UsesQApplication): + def testReturnWindow(self): + widget = QWidget() + button = QPushButton(widget) + self.assertEqual(sys.getrefcount(widget), 2) + window = button.window() + self.assertEqual(sys.getrefcount(widget), 3) + self.assertEqual(sys.getrefcount(window), 3) + + del widget + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_1006.py b/sources/pyside2/tests/QtWidgets/bug_1006.py new file mode 100644 index 0000000..49dc22c --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_1006.py @@ -0,0 +1,111 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import weakref +import sys + +from PySide2.QtCore import Qt +from PySide2.QtWidgets import QDialog, QLabel, QGridLayout, QHBoxLayout, QWidget + +from helper import TimedQApplication + +class LabelWindow(QDialog): + def __init__(self, parent): + super(LabelWindow, self).__init__(parent) + + self.test_layout = QGridLayout() + label = QLabel("Label") + self.test_layout.addWidget(label, 0, 0) + self.setLayout(self.test_layout) + self._destroyCalled = False + + + def replace(self, unit): + old_item = self.test_layout.itemAtPosition(0, 0) + old_label = old_item.widget() + ref = weakref.ref(old_item, self._destroyed) + + self.test_layout.removeWidget(old_label) + unit.assertRaises(RuntimeError, old_item.widget) + del old_item + + label = QLabel("Label New") + old_label.deleteLater() + label.setAlignment(Qt.AlignCenter) + self.test_layout.addWidget(label, 0, 0) + + def _destroyed(self, obj): + self._destroyCalled = True + +class TestBug1006 (TimedQApplication): + + def testLayoutItemLifeTime(self): + window = LabelWindow(None) + window.replace(self) + self.assertTrue(window._destroyCalled) + self.app.exec_() + + def testParentLayout(self): + def createLayout(): + label = QLabel() + layout = QHBoxLayout() + layout.addWidget(label) + + widget = QWidget() + widget.setLayout(layout) + return (layout, widget) + (layout, widget) = createLayout() + item = layout.itemAt(0) + self.assertTrue(isinstance(item.widget(), QWidget)) + + def testRemoveOrphanWidget(self): + widget = QLabel() + layout = QHBoxLayout() + layout.addWidget(widget) + self.assertEqual(sys.getrefcount(widget), 3) + + layout.removeWidget(widget) + widget.setObjectName("MyWidget") + self.assertEqual(sys.getrefcount(widget), 2) + + def testRemoveChildWidget(self): + parent = QLabel() + widget = QLabel(parent) + self.assertEqual(sys.getrefcount(widget), 3) + + layout = QHBoxLayout() + layout.addWidget(widget) + self.assertEqual(sys.getrefcount(widget), 3) + + layout.removeWidget(widget) + widget.setObjectName("MyWidget") + self.assertEqual(sys.getrefcount(widget), 3) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_1048.py b/sources/pyside2/tests/QtWidgets/bug_1048.py new file mode 100644 index 0000000..2042a99 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_1048.py @@ -0,0 +1,36 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtWidgets + +a = QtWidgets.QApplication([]) + +w = QtWidgets.QWidget() +l = QtWidgets.QGridLayout(w) + +l.itemAtPosition(0, 0) diff --git a/sources/pyside2/tests/QtWidgets/bug_1077.py b/sources/pyside2/tests/QtWidgets/bug_1077.py new file mode 100644 index 0000000..7943e55 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_1077.py @@ -0,0 +1,45 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' unit test for BUG #1077 ''' + +from PySide2 import QtCore, QtGui, QtWidgets +import time + +class Highlighter(QtGui.QSyntaxHighlighter): + def __init__(self, parent, mode): + QtGui.QSyntaxHighlighter.__init__(self, parent) + self.tstamp = time.time() + +if __name__ == "__main__": + app = QtWidgets.QApplication([]) + python = QtWidgets.QTextEdit() + python.setWindowTitle("python") + hl = Highlighter(python.document(), "python") + python.show() + text = hl.document() diff --git a/sources/pyside2/tests/QtWidgets/bug_172.py b/sources/pyside2/tests/QtWidgets/bug_172.py new file mode 100644 index 0000000..5b08225 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_172.py @@ -0,0 +1,41 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import * + +if __name__ == '__main__': + app = QApplication([]) + + wdg = QWidget() + + hbox = QHBoxLayout() + + vbox = QVBoxLayout() + vbox.addLayout(hbox) + + wdg.setLayout(vbox) diff --git a/sources/pyside2/tests/QtWidgets/bug_243.py b/sources/pyside2/tests/QtWidgets/bug_243.py new file mode 100644 index 0000000..7ce0a46 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_243.py @@ -0,0 +1,45 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test bug 243: http://bugs.openbossa.org/show_bug.cgi?id=243''' + +import unittest +import sys + +from PySide2.QtWidgets import QApplication, QMainWindow, QLayout + +class QAppPresence(unittest.TestCase): + + def testBug(self): + app = QApplication(sys.argv) + window = QMainWindow() + l = window.layout() + self.assertTrue(isinstance(l, QLayout)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_307.py b/sources/pyside2/tests/QtWidgets/bug_307.py new file mode 100644 index 0000000..4e5ecab --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_307.py @@ -0,0 +1,54 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import colorsys + +from PySide2.QtCore import SIGNAL +from PySide2.QtWidgets import QPushButton, QApplication + + +class Test (QApplication) : + def __init__(self, argv) : + super(Test, self).__init__(argv) + self._called = False + + def called(self): + self._called = True + + +class QApplicationSignalsTest(unittest.TestCase): + def testQuit(self): + app = Test([]) + button = QPushButton("BUTTON") + app.connect(button, SIGNAL("clicked()"), app.called) + button.click() + self.assertTrue(app._called) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_324.py b/sources/pyside2/tests/QtWidgets/bug_324.py new file mode 100644 index 0000000..fbaf437 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_324.py @@ -0,0 +1,60 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test bug 324: http://bugs.openbossa.org/show_bug.cgi?id=324''' + +import unittest +import sys +import signal +from PySide2.QtCore import * +from PySide2.QtWidgets import * + +class QBug( QObject ): + def __init__(self, parent = None): + QObject.__init__(self, parent) + + def check(self): + self.done.emit("abc") + + done = Signal(str) + +class Bug324(unittest.TestCase): + + def on_done(self, val): + self.value = val + + def testBug(self): + app = QApplication([]) + bug = QBug() + self.value = '' + bug.done.connect(self.on_done) + bug.check() + self.assertEqual(self.value, 'abc') + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_338.py b/sources/pyside2/tests/QtWidgets/bug_338.py new file mode 100644 index 0000000..27957a0 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_338.py @@ -0,0 +1,55 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test bug 338: http://bugs.openbossa.org/show_bug.cgi?id=338''' + +import sys +import unittest + +from PySide2 import QtCore, QtWidgets + +class DiagramItem(QtWidgets.QGraphicsPolygonItem): + def __init__(self, parent=None, scene=None): + super(DiagramItem, self).__init__(parent, scene) + + def itemChange(self, change, value): + return value + + +class BugTest(unittest.TestCase): + def test(self): + app = QtWidgets.QApplication(sys.argv) + scene = QtWidgets.QGraphicsScene() + item = DiagramItem() + item2 = DiagramItem() + #this cause segfault + scene.addItem(item) + scene.addItem(item2) + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/sources/pyside2/tests/QtWidgets/bug_363.py b/sources/pyside2/tests/QtWidgets/bug_363.py new file mode 100644 index 0000000..642c719 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_363.py @@ -0,0 +1,54 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test bug 363: http://bugs.openbossa.org/show_bug.cgi?id=363''' + +import sys +import unittest + +from helper import UsesQApplication +from PySide2 import QtCore, QtWidgets + +# Check for desktop object lifetime +class BugTest(UsesQApplication): + def mySlot(self): + pass + + # test if it is possible to connect with a desktop object after storing that on an auxiliar variable + def testCase1(self): + desktop = QtWidgets.QApplication.desktop() + desktop.resized[int].connect(self.mySlot) + self.assertTrue(True) + + # test if it is possible to connect with a desktop object without storing that on an auxiliar variable + def testCase2(self): + QtWidgets.QApplication.desktop().resized[int].connect(self.mySlot) + self.assertTrue(True) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_389.py b/sources/pyside2/tests/QtWidgets/bug_389.py new file mode 100644 index 0000000..d29b6d5 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_389.py @@ -0,0 +1,43 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test bug 389: http://bugs.openbossa.org/show_bug.cgi?id=389''' + +import sys +import unittest +from helper import UsesQApplication +from PySide2 import QtCore, QtGui, QtWidgets + +class BugTest(UsesQApplication): + def testCase(self): + s = QtWidgets.QWidget().style() + i = s.standardIcon(QtWidgets.QStyle.SP_TitleBarMinButton) + self.assertEqual(type(i), QtGui.QIcon) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_400.py b/sources/pyside2/tests/QtWidgets/bug_400.py new file mode 100644 index 0000000..64e0231 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_400.py @@ -0,0 +1,54 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test bug 400: http://bugs.openbossa.org/show_bug.cgi?id=400''' + +import unittest +from helper import UsesQApplication +from PySide2.QtWidgets import QTreeWidgetItemIterator, QTreeWidgetItem, QTreeWidget + +class BugTest(UsesQApplication): + def testCase(self): + treeWidget = QTreeWidget() + treeWidget.setColumnCount(1) + items = [] + for i in range(10): + items.append(QTreeWidgetItem(None, ["item: %i" % i])) + + treeWidget.insertTopLevelItems(0, items); + _iter = QTreeWidgetItemIterator(treeWidget) + index = 0 + while(_iter.value()): + item = _iter.value() + self.assertTrue(item is items[index]) + index += 1 + _iter += 1 + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_416.py b/sources/pyside2/tests/QtWidgets/bug_416.py new file mode 100644 index 0000000..ea8a7c1 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_416.py @@ -0,0 +1,71 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from helper import TimedQApplication +from PySide2.QtCore import QSignalTransition, QState, Qt, QStateMachine +from PySide2.QtWidgets import QCheckBox + +class CheckedTransition(QSignalTransition): + def __init__(self, check): + QSignalTransition.__init__(self, check.stateChanged[int]) + self.eventTested = False + + def eventTest(self, event): + self.eventTested = True + if not QSignalTransition.eventTest(self, event): + return False + return event.arguments()[0] == Qt.Checked + +class TestBug(TimedQApplication): + def testCase(self): + check = QCheckBox() + check.setTristate(True) + + s1 = QState() + s2 = QState() + + t1 = CheckedTransition(check) + t1.setTargetState(s2) + s1.addTransition(t1) + + machine = QStateMachine() + machine.addState(s1) + machine.addState(s2) + machine.setInitialState(s1) + machine.start() + + check.stateChanged[int].emit(1) + check.show() + self.app.exec_() + self.assertTrue(t1.eventTested) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_429.py b/sources/pyside2/tests/QtWidgets/bug_429.py new file mode 100644 index 0000000..dea855f --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_429.py @@ -0,0 +1,38 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import * +from PySide2.QtWidgets import * +import sys + +app = QApplication(sys.argv) +scene = QGraphicsScene() +label = QLabel("hello world") +label.show() +QTimer.singleShot(0, label.close) +exit(app.exec_()) diff --git a/sources/pyside2/tests/QtWidgets/bug_430.py b/sources/pyside2/tests/QtWidgets/bug_430.py new file mode 100644 index 0000000..89f6f79 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_430.py @@ -0,0 +1,42 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +from PySide2.QtCore import * +from PySide2.QtWidgets import * + +class ListModel(QAbstractListModel): + def rowCount(self, parent = QModelIndex()): + return 0 + +app = QApplication([]) +model = ListModel() +v = QListView() +v.setModel(model) +QTimer.singleShot(0, v.close) +app.exec_() diff --git a/sources/pyside2/tests/QtWidgets/bug_433.py b/sources/pyside2/tests/QtWidgets/bug_433.py new file mode 100644 index 0000000..a214b2c --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_433.py @@ -0,0 +1,43 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys + +from PySide2 import QtCore, QtWidgets + +class Test(QtWidgets.QGraphicsView): + def __init__(self, parent=None): + super(Test, self).__init__(parent) + self.s = QtWidgets.QGraphicsScene() + self.setScene(self.s) + +a = QtWidgets.QApplication(sys.argv) +t = Test() +t.show() +QtCore.QTimer.singleShot(0, t.close) +sys.exit(a.exec_()) diff --git a/sources/pyside2/tests/QtWidgets/bug_467.py b/sources/pyside2/tests/QtWidgets/bug_467.py new file mode 100644 index 0000000..0a207f1 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_467.py @@ -0,0 +1,47 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test bug 367: http://bugs.openbossa.org/show_bug.cgi?id=467''' + +import unittest +from helper import UsesQApplication +from PySide2.QtWidgets import QMainWindow, QApplication + +class MyWidget(QMainWindow): + def __init__(self, parent = None): + QMainWindow.__init__(self, parent) + + +class BugTest(UsesQApplication): + def testCase(self): + w = MyWidget() + widgets = QApplication.allWidgets() + self.assertTrue(w in widgets) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_493.py b/sources/pyside2/tests/QtWidgets/bug_493.py new file mode 100644 index 0000000..100959f --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_493.py @@ -0,0 +1,51 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import Qt, QEvent +from PySide2.QtGui import QKeyEvent, QKeySequence +from PySide2.QtWidgets import QApplication +import unittest + + +class TestBug569(unittest.TestCase): + + def testIt(self): + # We need a qapp otherwise Qt will crash when trying to detect the + # current platform + app = QApplication([]) + ev1 = QKeyEvent(QEvent.KeyRelease, Qt.Key_Delete, Qt.NoModifier) + ev2 = QKeyEvent(QEvent.KeyRelease, Qt.Key_Copy, Qt.NoModifier) + ks = QKeySequence.Delete + + self.assertEqual(ev1, ks) + self.assertEqual(ks, ev1) + self.assertNotEqual(ev2, ks) + self.assertNotEqual(ks, ev2) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_512.py b/sources/pyside2/tests/QtWidgets/bug_512.py new file mode 100644 index 0000000..4815c2d --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_512.py @@ -0,0 +1,50 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test bug 512: http://bugs.openbossa.org/show_bug.cgi?id=512''' + +import unittest +from helper import UsesQApplication +from PySide2.QtCore import * +from PySide2.QtWidgets import * + +class BugTest(UsesQApplication): + def testCase(self): + w = QWidget(None) + lbl = QLabel("Hello", w); + g = QGridLayout() + g.addWidget(lbl, 0, 0) + w.setLayout(g) + w.show() + + t = g.getItemPosition(0) + self.assertEqual(type(t), tuple) + self.assertEqual(t, (0,0,1,1)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_525.py b/sources/pyside2/tests/QtWidgets/bug_525.py new file mode 100644 index 0000000..842a440 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_525.py @@ -0,0 +1,49 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtWidgets import QApplication +from PySide2.QtWidgets import QMenu + +class M2(QMenu): + def __init__(self,parent=None): + super(M2,self).__init__(parent) + self.setTitle(self.tr("M2")) + +class TestMenuDerivedClass(unittest.TestCase): + def aboutToShowHandler(self): + pass + + def testConnectSignal(self): + app = QApplication([]) + m2 = M2() + # Test if the aboutToShow signal was translated to correct type + m2.aboutToShow.connect(self.aboutToShowHandler) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_546.py b/sources/pyside2/tests/QtWidgets/bug_546.py new file mode 100644 index 0000000..a56406c --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_546.py @@ -0,0 +1,42 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtWidgets import * + +class TestBug546(unittest.TestCase): + + """Test to check a crash at exit""" + def testIt(self): + app = QApplication([]) + textEdit = QPlainTextEdit() + completer = QCompleter(("foo", "bar"), textEdit) + completer.setWidget(textEdit) + +if __name__=='__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_547.py b/sources/pyside2/tests/QtWidgets/bug_547.py new file mode 100644 index 0000000..ac20007 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_547.py @@ -0,0 +1,85 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" Unittest for bug #547 """ +""" http://bugs.openbossa.org/show_bug.cgi?id=547 """ + +import sys +import unittest + +from PySide2 import QtWidgets + +class MyMainWindow(unittest.TestCase): + app = QtWidgets.QApplication(sys.argv) + def testCase1(self): + self._tree = QtWidgets.QTreeWidget() + self._tree.setColumnCount(2) + self._i1 = None + self._i11 = None + + self._updateTree() + self.assertEqual(sys.getrefcount(self._i1), 3) + self.assertEqual(sys.getrefcount(self._i11), 3) + + self._i11.parent().setExpanded(True) + self._i11.setExpanded(True) + + self._updateTree() + self.assertEqual(sys.getrefcount(self._i1), 3) + self.assertEqual(sys.getrefcount(self._i11), 3) + + def testCase2(self): + self._tree = QtWidgets.QTreeWidget() + self._tree.setColumnCount(2) + self._i1 = None + self._i11 = None + + self._updateTree() + self.assertEqual(sys.getrefcount(self._i1), 3) + self.assertEqual(sys.getrefcount(self._i11), 3) + + self._i11.parent().setExpanded(True) + self._i11.setExpanded(True) + + self.assertEqual(sys.getrefcount(self._i1), 3) + self.assertEqual(sys.getrefcount(self._i11), 3) + + def _updateTree(self): + self._tree.clear() + if self._i1 and self._i11: + self.assertEqual(sys.getrefcount(self._i1), 2) + self.assertEqual(sys.getrefcount(self._i11), 2) + + self._i1 = QtWidgets.QTreeWidgetItem(self._tree, ['1', ]) + self.assertEqual(sys.getrefcount(self._i1), 3) + self._i11 = QtWidgets.QTreeWidgetItem(self._i1, ['11', ]) + self.assertEqual(sys.getrefcount(self._i11), 3) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/bug_549.py b/sources/pyside2/tests/QtWidgets/bug_549.py new file mode 100644 index 0000000..0e2afc6 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_549.py @@ -0,0 +1,44 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtWidgets import * + +class TestBug549(unittest.TestCase): + def testBug(self): + app = QApplication([]) + w = QGraphicsWidget() + w.setContentsMargins(1, 2, 3, 4) + self.assertEqual(w.getContentsMargins(), (1, 2, 3, 4)) + w.setWindowFrameMargins(5, 6, 7, 8) + self.assertEqual(w.getWindowFrameMargins(), (5, 6, 7, 8)) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/bug_569.py b/sources/pyside2/tests/QtWidgets/bug_569.py new file mode 100644 index 0000000..4e3d07c --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_569.py @@ -0,0 +1,47 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import * +from PySide2.QtWidgets import * +import unittest + + +class TestBug569(unittest.TestCase): + + def testIt(self): + types = (QTableWidgetItem, QListWidgetItem, QTreeWidgetItem) + for t in types: + a = t() + a.__lt__ = lambda other : True + b = t() + b.__lt__ = lambda other : False + self.assertTrue(a < b) + self.assertFalse(b < a) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_575.py b/sources/pyside2/tests/QtWidgets/bug_575.py new file mode 100644 index 0000000..4996c69 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_575.py @@ -0,0 +1,48 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" Unittest for bug #575 """ +""" http://bugs.openbossa.org/show_bug.cgi?id=575 """ + +from PySide2.QtWidgets import QApplication, QPlainTextEdit, QTextEdit +import sys +import unittest + +class Bug575(unittest.TestCase): + def testPropertyValues(self): + app = QApplication(sys.argv) + textEdit = QPlainTextEdit() + textEdit.insertPlainText("PySide INdT") + selection = QTextEdit.ExtraSelection() + selection.cursor = textEdit.textCursor() + selection.cursor.setPosition(2) + self.assertEqual(selection.cursor.position(), 2) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/bug_576.py b/sources/pyside2/tests/QtWidgets/bug_576.py new file mode 100644 index 0000000..b0b0444 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_576.py @@ -0,0 +1,62 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" Unittest for bug #576 """ +""" http://bugs.openbossa.org/show_bug.cgi?id=576 """ + +import sys +import unittest + +from PySide2 import QtCore, QtWidgets + +class Bug576(unittest.TestCase): + def onButtonDestroyed(self, button): + self._destroyed = True + self.assertTrue(isinstance(button, QtWidgets.QPushButton)) + + def testWidgetParent(self): + self._destroyed = False + app = QtWidgets.QApplication(sys.argv) + w = QtWidgets.QWidget() + + b = QtWidgets.QPushButton("test") + b.destroyed[QtCore.QObject].connect(self.onButtonDestroyed) + self.assertEqual(sys.getrefcount(b), 2) + b.setParent(w) + self.assertEqual(sys.getrefcount(b), 3) + b.parent() + self.assertEqual(sys.getrefcount(b), 3) + b.setParent(None) + self.assertEqual(sys.getrefcount(b), 2) + del b + self.assertTrue(self._destroyed) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/bug_585.py b/sources/pyside2/tests/QtWidgets/bug_585.py new file mode 100644 index 0000000..1c5eb75 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_585.py @@ -0,0 +1,54 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test bug 585: http://bugs.openbossa.org/show_bug.cgi?id=585''' + +import sys +import unittest + +from PySide2 import QtCore, QtWidgets + +class Bug585(unittest.TestCase): + def testCase(self): + app = QtWidgets.QApplication([]) + self._tree = QtWidgets.QTreeWidget() + self._tree.setColumnCount(2) + i1 = QtWidgets.QTreeWidgetItem(self._tree, ['1', ]) + i2 = QtWidgets.QTreeWidgetItem(self._tree, ['2', ]) + refCount = sys.getrefcount(i1) + + # this function return None + # because the topLevelItem does not has a parent item + # but still have a TreeWidget as a parent + self._tree.topLevelItem(0).parent() + + self.assertEqual(refCount, sys.getrefcount(i1)) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/bug_589.py b/sources/pyside2/tests/QtWidgets/bug_589.py new file mode 100644 index 0000000..c75a12f --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_589.py @@ -0,0 +1,47 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +# trimmed down diagramscene.py to demonstrate crash in sizeHint() + +import sys +from PySide2 import QtCore, QtWidgets +import unittest + +class CustomWidget(QtWidgets.QGraphicsProxyWidget): + def itemChange(self, eventType, value): + QtWidgets.QGraphicsProxyWidget.itemChange(self, eventType, value) + +class Bug589(unittest.TestCase): + def testCase(self): + widget = QtWidgets.QGraphicsProxyWidget() + custom = CustomWidget() + custom.setParentItem(widget) + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_632.py b/sources/pyside2/tests/QtWidgets/bug_632.py new file mode 100644 index 0000000..e604161 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_632.py @@ -0,0 +1,48 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +from PySide2.QtWidgets import QLineEdit, QApplication +import unittest + + +class Bug589(unittest.TestCase): + def testWrongSignature(self): + text = QLineEdit("PySide bug 632") + a = b = c = d = 0 + self.assertRaises(TypeError, text.getTextMargins, (a, b, c, d)) + + def testTupleReturn(self): + text = QLineEdit("PySide bug 632") + text.setTextMargins(10, 20, 30, 40) + (a, b, c, d) = text.getTextMargins() + self.assertTrue((a, b, c, d), (10, 20, 30, 40)) + +if __name__ == "__main__": + app = QApplication(sys.argv) + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_635.py b/sources/pyside2/tests/QtWidgets/bug_635.py new file mode 100644 index 0000000..59f27fa --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_635.py @@ -0,0 +1,57 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test bug 635: http://bugs.openbossa.org/show_bug.cgi?id=635''' + +import unittest +from PySide2.QtGui import QIcon +from PySide2.QtWidgets import QApplication, QToolBar +import sys + +class testQToolBar(unittest.TestCase): + def callback(self): + self._called = True + + def testAddAction(self): + bar = QToolBar() + self._called = False + a = bar.addAction("act1", self.callback) + a.trigger() + self.assertTrue(self._called) + + def testAddActionWithIcon(self): + bar = QToolBar() + self._called = False + icon = QIcon() + a = bar.addAction(icon, "act1", self.callback) + a.trigger() + self.assertTrue(self._called) + +if __name__ == '__main__': + app = QApplication(sys.argv) + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_640.py b/sources/pyside2/tests/QtWidgets/bug_640.py new file mode 100644 index 0000000..9e63a1d --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_640.py @@ -0,0 +1,39 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +from PySide2.QtWidgets import * +import unittest + +class Bug640(unittest.TestCase): + def testIt(self): + option = QStyleOptionGraphicsItem() + a = option.state # crash!? + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_653.py b/sources/pyside2/tests/QtWidgets/bug_653.py new file mode 100644 index 0000000..e1b2ed4 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_653.py @@ -0,0 +1,45 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import * +from PySide2.QtWidgets import * + +class TestBug653(unittest.TestCase): + """Crash after calling QWizardPage.wizard()""" + def testIt(self): + app = QApplication([]) + + wizard = QWizard() + page = QWizardPage() + wizard.addPage(page) + page.wizard() # crash here if the bug still exists due to a circular dependency + wizard.show() + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/sources/pyside2/tests/QtWidgets/bug_662.py b/sources/pyside2/tests/QtWidgets/bug_662.py new file mode 100644 index 0000000..a5cc650 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_662.py @@ -0,0 +1,57 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test bug 662: http://bugs.openbossa.org/show_bug.cgi?id=662''' + +import unittest +from PySide2.QtGui import QTextCharFormat +from PySide2.QtWidgets import QTextEdit, QApplication +import sys + +class testQTextBlock(unittest.TestCase): + def tesIterator(self): + edit = QTextEdit() + cursor = edit.textCursor() + fmt = QTextCharFormat() + frags = [] + for i in range(10): + fmt.setFontPointSize(i+10) + frags.append("block%d"%i) + cursor.insertText(frags[i], fmt) + + doc = edit.document() + block = doc.begin() + + index = 0 + for i in block: + self.assertEqual(i.fragment().text(), frags[index]) + index += 1 + +if __name__ == '__main__': + app = QApplication(sys.argv) + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_667.py b/sources/pyside2/tests/QtWidgets/bug_667.py new file mode 100644 index 0000000..e2b4722 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_667.py @@ -0,0 +1,53 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys + +from PySide2.QtCore import QTimer, QPointF +from PySide2.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsEllipseItem + +class Ball(QGraphicsEllipseItem): + def __init__(self, d, parent=None): + super(Ball, self).__init__(0, 0, d, d, parent) + self.vel = QPointF(0,0) #commenting this out prevents the crash + +class Foo(QGraphicsView): + def __init__(self): + super(Foo, self).__init__(None) + self.scene = QGraphicsScene(self.rect()) + self.setScene(self.scene) + self.scene.addItem(Ball(10)) + + +if __name__ == "__main__": + app = QApplication(sys.argv) + w = Foo() + w.show() + w.raise_() + QTimer.singleShot(0, w.close) + sys.exit(app.exec_()) diff --git a/sources/pyside2/tests/QtWidgets/bug_668.py b/sources/pyside2/tests/QtWidgets/bug_668.py new file mode 100644 index 0000000..05cffa3 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_668.py @@ -0,0 +1,52 @@ +# coding: utf-8 + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import * +from PySide2.QtWidgets import * + +import sys + +class A(QMainWindow): + def __init__(self, parent=None): + super(A, self).__init__(parent) + a = QFileSystemModel(self) + a.setRootPath(QDir.homePath()) + + v = QTreeView(self) + v.setModel(a) + self.setCentralWidget(v) + # Test index() method (see PYSIDE-570, PYSIDE-331) + index = a.index(0, 0, QModelIndex()) + +app = QApplication([]) +m = A() +m.show() +QTimer.singleShot(0, m.close) +app.exec_() diff --git a/sources/pyside2/tests/QtWidgets/bug_674.py b/sources/pyside2/tests/QtWidgets/bug_674.py new file mode 100644 index 0000000..40fd192 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_674.py @@ -0,0 +1,51 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import * +from PySide2.QtWidgets import * +import unittest +import sys + +class TestBug679(unittest.TestCase): + '''QGraphicsScene::clear() is missing''' + def testIt(self): + app = QApplication([]) + + scene = QGraphicsScene() + hello = scene.addText("Hello") + scene.addText("World") + + self.assertEqual(sys.getrefcount(hello), 3) + scene.clear() + self.assertEqual(sys.getrefcount(hello), 2) + self.assertEqual(len(scene.items()), 0) + self.assertRaises(RuntimeError, hello.isVisible) # the C++ object was deleted + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/bug_675.py b/sources/pyside2/tests/QtWidgets/bug_675.py new file mode 100644 index 0000000..9348906 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_675.py @@ -0,0 +1,43 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import * +from PySide2.QtWidgets import * + +app = QApplication([]) + +scene = QGraphicsScene() + +# don't segfault due to lack of keepReferenceCall +textEdit = scene.addWidget(QTextEdit()) + +layout = QGraphicsLinearLayout() +layout.addItem(textEdit) + +view = QGraphicsView(scene) +view.show() diff --git a/sources/pyside2/tests/QtWidgets/bug_688.py b/sources/pyside2/tests/QtWidgets/bug_688.py new file mode 100644 index 0000000..716d88d --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_688.py @@ -0,0 +1,116 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test bug 688: http://bugs.openbossa.org/show_bug.cgi?id=688''' + +import unittest +from helper import UsesQApplication +from PySide2.QtGui import QTextFrame, QTextCursor, QTextCharFormat, QFont, QTextFrameFormat +from PySide2.QtWidgets import QTextEdit + +class BugTest(UsesQApplication): + def testCase(self): + editor = QTextEdit() + cursor = QTextCursor(editor.textCursor()) + cursor.movePosition(QTextCursor.Start) + + mainFrame = cursor.currentFrame() + + plainCharFormat = QTextCharFormat() + boldCharFormat = QTextCharFormat() + boldCharFormat.setFontWeight(QFont.Bold); + cursor.insertText(""" + Text documents are represented by the + QTextDocument class, rather than by QString objects. + Each QTextDocument object contains information about + the document's internal representation, its structure, + and keeps track of modifications to provide undo/redo + facilities. This approach allows features such as the + layout management to be delegated to specialized + classes, but also provides a focus for the framework.""", + plainCharFormat) + + frameFormat = QTextFrameFormat() + frameFormat.setMargin(32) + frameFormat.setPadding(8) + frameFormat.setBorder(4) + cursor.insertFrame(frameFormat) + + cursor.insertText(""" + Documents are either converted from external sources + or created from scratch using Qt. The creation process + can done by an editor widget, such as QTextEdit, or by + explicit calls to the Scribe API.""", + boldCharFormat) + + cursor = mainFrame.lastCursorPosition() + cursor.insertText(""" + There are two complementary ways to visualize the + contents of a document: as a linear buffer that is + used by editors to modify the contents, and as an + object hierarchy containing structural information + that is useful to layout engines. In the hierarchical + model, the objects generally correspond to visual + elements such as frames, tables, and lists. At a lower + level, these elements describe properties such as the + style of text used and its alignment. The linear + representation of the document is used for editing and + manipulation of the document's contents.""", + plainCharFormat) + + + frame = cursor.currentFrame() + + items = [] + + #test iterator + for i in frame: + items.append(i) + + #test __iadd__ + b = frame.begin() + i = 0 + while not b.atEnd(): + self.assertEqual(b, items[i]) + self.assertTrue(b.parentFrame(), items[i].parentFrame()) + b.__iadd__(1) + i += 1 + + #test __isub__ + b = frame.end() + i = 0 + while i > 0: + self.assertEqual(b, items[i]) + self.assertTrue(b.parentFrame(), items[i].parentFrame()) + b.__isub__(1) + i -= 1 + + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_693.py b/sources/pyside2/tests/QtWidgets/bug_693.py new file mode 100644 index 0000000..31b0262 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_693.py @@ -0,0 +1,58 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import * +from PySide2.QtWidgets import * +import unittest + +class MyModel (QAbstractListModel): + + stupidLine = QLine(0, 0, 10, 10) + + def rowCount(self, parent): + return 1 + + def data(self, index, role): + return self.stupidLine + +class TestBug693(unittest.TestCase): + def testIt(self): + app = QApplication([]) + model = MyModel() + view = QListView() + view.setModel(model) + view.show() + + # This must NOT throw the exception: + # RuntimeError: Internal C++ object (PySide2.QtCore.QLine) already deleted. + MyModel.stupidLine.isNull() + + + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_696.py b/sources/pyside2/tests/QtWidgets/bug_696.py new file mode 100644 index 0000000..9370375 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_696.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +import unittest + +from helper import UsesQApplication +from PySide2.QtWidgets import QMainWindow, QMenu, QApplication + +class MainWindow(QMainWindow): + def __init__(self, *args): + self._menu = QMenu(self.dontexist) # attribute called with invalid C++ object + +class MainWindow2(QMainWindow): + def __init__(self): + self.show() + +class Bug696(UsesQApplication): + def testContructorInitialization(self): + self.assertRaises(AttributeError, MainWindow) + + def testContructorInitializationAndCPPFunction(self): + self.assertRaises(RuntimeError, MainWindow2) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/bug_711.py b/sources/pyside2/tests/QtWidgets/bug_711.py new file mode 100644 index 0000000..073d4e3 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_711.py @@ -0,0 +1,53 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtWidgets import QToolBar, QApplication, QAction, QToolButton + +try: + xrange +except NameError: + xrange = range # py3k + +class TestLabelPixmap(unittest.TestCase): + def testReference(self): + toolbar = QToolBar() + + for i in xrange(20): + toolbar.addAction(QAction("Action %d" % i, None)) + + buttons = toolbar.findChildren(QToolButton, "") + toolbar.clear() + + for b in buttons: + self.assertRaises(RuntimeError, b.objectName) + +if __name__ == '__main__': + app = QApplication([]) + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/bug_714.py b/sources/pyside2/tests/QtWidgets/bug_714.py new file mode 100644 index 0000000..345207f --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_714.py @@ -0,0 +1,54 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sys +from PySide2.QtGui import QPixmap +from PySide2.QtWidgets import QLabel, QApplication + +class TestLabelPixmap(unittest.TestCase): + def testReference(self): + l = QLabel() + p = QPixmap() + l.setPixmap(p) # doesn't increment pixmap ref because this makes a copy + self.assertEqual(sys.getrefcount(p), 2) + + p = l.pixmap() + # this used to increment the reference because this is + # an internal pointer, but not anymore since we don't create + # a copy + # self.assertEqual(sys.getrefcount(p), 3) + self.assertEqual(sys.getrefcount(p), 2) + + p2 = l.pixmap() + self.assertEqual(p, p2) + +if __name__ == '__main__': + app = QApplication([]) + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/bug_722.py b/sources/pyside2/tests/QtWidgets/bug_722.py new file mode 100644 index 0000000..ddabd4e --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_722.py @@ -0,0 +1,52 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from helper import UsesQApplication + +from PySide2.QtWidgets import QDoubleSpinBox, QGraphicsBlurEffect + +class TestSignalConnection(UsesQApplication): + def testFloatSignal(self): + foo1 = QDoubleSpinBox() + foo2 = QDoubleSpinBox() + foo1.valueChanged[float].connect(foo2.setValue) + foo2.valueChanged[float].connect(foo1.setValue) + foo1.setValue(0.42) + self.assertEqual(foo1.value(), foo2.value()) + + def testQRealSignal(self): + foo1 = QDoubleSpinBox() + effect = QGraphicsBlurEffect() + effect.blurRadiusChanged['qreal'].connect(foo1.setValue) # check if qreal is a valid type + effect.setBlurRadius(0.42) + self.assertAlmostEqual(foo1.value(), effect.blurRadius()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_728.py b/sources/pyside2/tests/QtWidgets/bug_728.py new file mode 100644 index 0000000..59269d7 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_728.py @@ -0,0 +1,51 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import * +from PySide2.QtCore import * + +# Periodically check for the file dialog to appear and close it +dialog = None +def timerHandler(): + global dialog + if dialog is not None: + dialog.reject() + else: + for widget in QApplication.topLevelWidgets(): + if isinstance(widget, QDialog) and widget.isVisible(): + dialog = widget + +app = QApplication([]) +QTimer.singleShot(30000, app.quit) # emergency +timer = QTimer() +timer.setInterval(50) +timer.timeout.connect(timerHandler) +timer.start() + +# This test for a dead lock in QFileDialog.getOpenFileNames, the test fail with a timeout if the dead lock exists. +QFileDialog.getOpenFileNames(None, "caption", QDir.homePath(), None, "", QFileDialog.DontUseNativeDialog) diff --git a/sources/pyside2/tests/QtWidgets/bug_736.py b/sources/pyside2/tests/QtWidgets/bug_736.py new file mode 100644 index 0000000..31ce80e --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_736.py @@ -0,0 +1,47 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import * +from PySide2.QtWidgets import * + +class TestBug736 (unittest.TestCase): + + def testIt(self): + app = QApplication([]) + slider = QSlider(Qt.Horizontal) + slider2 = QSlider(Qt.Horizontal) + + slider2.setMaximum(10) + slider.valueChanged[int].connect(slider2.setMaximum) + slider.valueChanged[int].emit(100) + self.assertEqual(slider2.maximum(), 100) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_750.py b/sources/pyside2/tests/QtWidgets/bug_750.py new file mode 100644 index 0000000..334f11e --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_750.py @@ -0,0 +1,54 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from helper import UsesQApplication + +from PySide2.QtCore import QTimer +from PySide2.QtGui import QPainter, QFont, QFontInfo +from PySide2.QtWidgets import QWidget, qApp + +class MyWidget(QWidget): + def paintEvent(self, e): + p = QPainter(self) + self._info = p.fontInfo() + self._app.quit() + + +class TestQPainter(UsesQApplication): + def testFontInfo(self): + w = MyWidget() + w._app = self.app + w._info = None + QTimer.singleShot(300, w.show) + self.app.exec_() + self.assertTrue(w._info) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_778.py b/sources/pyside2/tests/QtWidgets/bug_778.py new file mode 100644 index 0000000..b03be3c --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_778.py @@ -0,0 +1,50 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from helper import UsesQApplication + +from PySide2.QtWidgets import QTreeWidget, QTreeWidgetItem, QTreeWidgetItemIterator + +class QTreeWidgetItemIteratorTest(UsesQApplication): + def testWidgetIterator(self): + treeWidget = QTreeWidget() + treeWidget.setColumnCount(1) + items = [] + for i in range(10): + items.append(QTreeWidgetItem(None, ['item: %d' % i])) + treeWidget.insertTopLevelItems(0, items) + + index = 0 + for it in QTreeWidgetItemIterator(treeWidget): + self.assertEqual(it.value().text(0), 'item: %d' % index) + index += 1 + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_785.py b/sources/pyside2/tests/QtWidgets/bug_785.py new file mode 100644 index 0000000..312b179 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_785.py @@ -0,0 +1,58 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys + +import unittest +from PySide2.QtCore import QItemSelection +from PySide2.QtGui import QStandardItemModel, QStandardItem +from PySide2.QtWidgets import QApplication +class Bug324(unittest.TestCase): + def testOperators(self): + model = QStandardItemModel() + for i in range(100): + model.appendRow(QStandardItem("Item: %d"%i)) + + first = model.index(0, 0) + second = model.index(10, 0) + third = model.index(20, 0) + fourth = model.index(30, 0) + + sel = QItemSelection(first, second) + sel2 = QItemSelection() + sel2.select(third, fourth) + + sel3 = sel + sel2 #check operator + + self.assertEqual(len(sel3), 2) + sel4 = sel + sel4 += sel2 #check operator += + self.assertEqual(len(sel4), 2) + self.assertEqual(sel4, sel3) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_793.py b/sources/pyside2/tests/QtWidgets/bug_793.py new file mode 100644 index 0000000..3d63cae --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_793.py @@ -0,0 +1,58 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sys +from PySide2.QtCore import QTimer +from PySide2.QtWidgets import QWidget, QApplication + +class TestW1(QWidget): + def __init__(self, parent = None): + super(TestW1, self).__init__(parent) + TestW2(parent, self) + +class TestW2(QWidget): + def __init__(self, ancestor, parent = None): + super(TestW2, self).__init__(parent) + self.ancestor_ref = ancestor + +class Test(QWidget): + def __init__(self): + super(Test, self).__init__() + TestW1(self) + +class TestQApplicationDestrcutor(unittest.TestCase): + def testDestructor(self): + w = Test() + w.show() + QTimer.singleShot(0, w.close) + +if __name__ == '__main__': + app = QApplication(sys.argv) + unittest.main() + sys.exit(app.exec_()) diff --git a/sources/pyside2/tests/QtWidgets/bug_811.py b/sources/pyside2/tests/QtWidgets/bug_811.py new file mode 100644 index 0000000..4715c1a --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_811.py @@ -0,0 +1,61 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sys +import weakref + +from helper import UsesQApplication + +from PySide2.QtGui import QTextBlockUserData, QTextCursor +from PySide2.QtWidgets import QTextEdit + +class TestUserData(QTextBlockUserData): + def __init__(self, data): + super(TestUserData, self).__init__() + self.data = data + +class TestUserDataRefCount(UsesQApplication): + def testRefcount(self): + textedit = QTextEdit() + textedit.setReadOnly(True) + doc = textedit.document() + cursor = QTextCursor(doc) + cursor.insertText("PySide Rocks") + ud = TestUserData({"Life": 42}) + self.assertEqual(sys.getrefcount(ud), 2) + cursor.block().setUserData(ud) + self.assertEqual(sys.getrefcount(ud), 3) + ud2 = cursor.block().userData() + self.assertEqual(sys.getrefcount(ud), 4) + self.udata = weakref.ref(ud, None) + del ud, ud2 + self.assertEqual(sys.getrefcount(self.udata()), 2) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_834.py b/sources/pyside2/tests/QtWidgets/bug_834.py new file mode 100644 index 0000000..129da32 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_834.py @@ -0,0 +1,46 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtWidgets + +class Window(QtWidgets.QMainWindow): + def childEvent(self, event): + super(Window, self).childEvent(event) + +app = QtWidgets.QApplication([]) +window = Window() + +dock1 = QtWidgets.QDockWidget() +dock2 = QtWidgets.QDockWidget() +window.addDockWidget(QtCore.Qt.LeftDockWidgetArea, dock1) +window.addDockWidget(QtCore.Qt.LeftDockWidgetArea, dock2) +window.tabifyDockWidget(dock1, dock2) + +window.show() +QtCore.QTimer.singleShot(0, window.close) +app.exec_() diff --git a/sources/pyside2/tests/QtWidgets/bug_836.py b/sources/pyside2/tests/QtWidgets/bug_836.py new file mode 100644 index 0000000..69e23e2 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_836.py @@ -0,0 +1,56 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import * +from PySide2.QtWidgets import * + +class Mixin1(object): + pass + +class Mixin2(object): + pass + +class Mixin3(object): + pass + +class MainWindow(Mixin1, Mixin2, Mixin3, QFrame): + def __init__(self): + super(MainWindow, self).__init__() + +def main(): + app = QApplication([]) + # if it doesn't crash it should pass + w = MainWindow() + w.show() + QTimer.singleShot(0, w.close) + app.exec_() + +if __name__ == "__main__": + main() + + diff --git a/sources/pyside2/tests/QtWidgets/bug_844.py b/sources/pyside2/tests/QtWidgets/bug_844.py new file mode 100644 index 0000000..8228632 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_844.py @@ -0,0 +1,46 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import * +from PySide2.QtCore import * + +class QtKeyPressListener(QObject): + def __init__(self, obj): + QObject.__init__(self) + obj.installEventFilter(self) + + def eventFilter(self, obj, event): + # This used to crash here due to a misbehaviour of type discovery! + return QObject.eventFilter(self, obj, event) + +app = QApplication([]) +key_listener = QtKeyPressListener(app) +w = QLabel('Hello') +w.show() +QTimer.singleShot(0, w.close) +app.exec_() diff --git a/sources/pyside2/tests/QtWidgets/bug_854.py b/sources/pyside2/tests/QtWidgets/bug_854.py new file mode 100644 index 0000000..080faf3 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_854.py @@ -0,0 +1,68 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtWidgets import QTableView, QVBoxLayout, QApplication +from PySide2.QtCore import QAbstractItemModel + +from helper import UsesQApplication +import unittest + + +class VirtualList(QAbstractItemModel): + def __getitem__(self, index): + self._getItemCalled = True + pass + + def rowCount(self, parent): + return 5000 + + def columnCount(self, parent): + return 3 + + def index(self, row, column, parent): + return self.createIndex(row, column) + + def parent(self, index): + return QModelIndex() + + def data(self, index, role): + return "(%i, %i)" % (index.row(), index.column()) + + +class TestQAbstractItemModel(UsesQApplication): + def testSetModel(self): + model = VirtualList() + model._getItemCalled = False + table = QTableView() + table.setModel(model) + table.show() + self.assertFalse(model._getItemCalled) + +if __name__ == "__main__": + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/bug_860.py b/sources/pyside2/tests/QtWidgets/bug_860.py new file mode 100644 index 0000000..6cacfb2 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_860.py @@ -0,0 +1,63 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +import unittest + +from PySide2.QtCore import QSignalMapper +from PySide2.QtWidgets import QCheckBox + +from helper import UsesQApplication + +class MultipleSlotTest(UsesQApplication): + def cb_changed(self, i): + self._changed = True + + def cb_changedVoid(self): + self._changed = True + + def testSignalMapper(self): + checkboxMapper = QSignalMapper() + box = QCheckBox('check me') + box.stateChanged.connect(checkboxMapper.map) + + checkboxMapper.setMapping(box, box.text()) + checkboxMapper.mapped[str].connect(self.cb_changed) + self._changed = False + box.setChecked(True) + self.assertTrue(self._changed) + + def testSimpleSignal(self): + box = QCheckBox('check me') + box.stateChanged[int].connect(self.cb_changedVoid) + self._changed = False + box.setChecked(True) + self.assertTrue(self._changed) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/bug_862.py b/sources/pyside2/tests/QtWidgets/bug_862.py new file mode 100644 index 0000000..ac03255 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/bug_862.py @@ -0,0 +1,67 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2.QtCore import QObject +from PySide2.QtWidgets import * +import PySide2.QtCore +import unittest + +class MyQObject(QObject): + def __init__(self): + QObject.__init__(self) + +class MyQWidget(QWidget): + def __init__(self): + QWidget.__init__(self) + +class MyQGraphicsObject(QGraphicsObject): + def __init__(self): + QGraphicsObject.__init__(self) + +class MyQGraphicsItem(QGraphicsItem): + def __init__(self): + QGraphicsItem.__init__(self) + +class TestRepr (unittest.TestCase): + + def testIt(self): + + app = QApplication([]) + + self.assertEqual("<__main__.MyQObject object at ", repr(MyQObject())[:30]) + self.assertEqual("<__main__.MyQWidget object at ", repr(MyQWidget())[:30]) + self.assertEqual("<__main__.MyQGraphicsObject(0x", repr(MyQGraphicsObject())[:30]) + self.assertEqual("<__main__.MyQGraphicsItem(0x", repr(MyQGraphicsItem())[:28]) + + self.assertEqual(" c #545454", + ", c #5A5A5A", + "' c #4B4B4B", + ") c #4A4A4A", + "! c #4F4F4F", + "~ c #585858", + "{ c #515151", + "] c #4C4C4C", + "^ c #B1B1B1", + "/ c #FCFCFC", + "( c #FDFDFD", + "_ c #C1C1C1", + ": c #848484", + "< c #616161", + "[ c #5E5E5E", + "} c #CECECE", + "| c #E2E2E2", + "1 c #E4E4E4", + "2 c #DFDFDF", + "3 c #D2D2D2", + "4 c #D8D8D8", + "5 c #D4D4D4", + "6 c #E6E6E6", + "7 c #F1F1F1", + "8 c #838383", + "9 c #8E8E8E", + "0 c #8F8F8F", + "a c #CBCBCB", + "b c #CCCCCC", + "c c #E9E9E9", + "d c #F2F2F2", + "e c #EDEDED", + "f c #B5B5B5", + "g c #A6A6A6", + "h c #ABABAB", + "i c #BBBBBB", + "j c #B0B0B0", + "k c #EAEAEA", + "l c #6C6C6C", + "m c #BCBCBC", + "n c #F5F5F5", + "o c #FAFAFA", + "p c #B6B6B6", + "q c #F3F3F3", + "r c #CFCFCF", + "s c #FBFBFB", + "t c #CDCDCD", + "u c #DDDDDD", + "v c #999999", + "w c #F0F0F0", + "x c #2B2B2B", + "y c #C3C3C3", + "z c #A4A4A4", + "A c #D7D7D7", + "B c #E7E7E7", + "C c #6E6E6E", + "D c #9D9D9D", + "E c #BABABA", + "F c #AEAEAE", + "G c #898989", + "H c #646464", + "I c #BDBDBD", + "J c #CACACA", + "K c #2A2A2A", + "L c #212121", + "M c #B7B7B7", + "N c #F4F4F4", + "O c #737373", + "P c #828282", + "Q c #4D4D4D", + "R c #000000", + "S c #151515", + "T c #B2B2B2", + "U c #D6D6D6", + "V c #D3D3D3", + "W c #2F2F2F", + "X c #636363", + "Y c #A1A1A1", + "Z c #BFBFBF", + "` c #E0E0E0", + " . c #6A6A6A", + ".. c #050505", + "+. c #A3A3A3", + "@. c #202020", + "#. c #5F5F5F", + "$. c #B9B9B9", + "%. c #C7C7C7", + "&. c #D0D0D0", + "*. c #3E3E3E", + "=. c #666666", + "-. c #DBDBDB", + ";. c #424242", + ">. c #C2C2C2", + ",. c #1A1A1A", + "'. c #2C2C2C", + "). c #F6F6F6", + "!. c #AAAAAA", + "~. c #DCDCDC", + "{. c #2D2D2D", + "]. c #2E2E2E", + "^. c #A7A7A7", + "/. c #656565", + "(. c #333333", + "_. c #464646", + ":. c #C4C4C4", + "<. c #B8B8B8", + "[. c #292929", + "}. c #979797", + "|. c #EFEFEF", + "1. c #909090", + "2. c #8A8A8A", + "3. c #575757", + "4. c #676767", + "5. c #C5C5C5", + "6. c #7A7A7A", + "7. c #797979", + "8. c #989898", + "9. c #EEEEEE", + "0. c #707070", + "a. c #C8C8C8", + "b. c #111111", + "c. c #AFAFAF", + "d. c #474747", + "e. c #565656", + "f. c #E3E3E3", + "g. c #494949", + "h. c #5B5B5B", + "i. c #222222", + "j. c #353535", + "k. c #D9D9D9", + "l. c #0A0A0A", + "m. c #858585", + "n. c #E5E5E5", + "o. c #0E0E0E", + "p. c #9A9A9A", + "q. c #6F6F6F", + "r. c #868686", + "s. c #060606", + "t. c #1E1E1E", + "u. c #E8E8E8", + "v. c #A5A5A5", + "w. c #0D0D0D", + "x. c #030303", + "y. c #272727", + "z. c #131313", + "A. c #1F1F1F", + "B. c #757575", + "C. c #F7F7F7", + "D. c #414141", + "E. c #080808", + "F. c #6B6B6B", + "G. c #313131", + "H. c #C0C0C0", + "I. c #C9C9C9", + "J. c #0B0B0B", + "K. c #232323", + "L. c #434343", + "M. c #3D3D3D", + "N. c #282828", + "O. c #7C7C7C", + "P. c #252525", + "Q. c #3A3A3A", + "R. c #F8F8F8", + "S. c #1B1B1B", + "T. c #949494", + "U. c #3B3B3B", + "V. c #242424", + "W. c #383838", + "X. c #6D6D6D", + "Y. c #818181", + "Z. c #939393", + "`. c #9E9E9E", + " + c #929292", + ".+ c #7D7D7D", + "++ c #ADADAD", + "@+ c #DADADA", + "#+ c #919191", + "$+ c #E1E1E1", + "%+ c #BEBEBE", + "&+ c #ACACAC", + "*+ c #9C9C9C", + "=+ c #B3B3B3", + "-+ c #808080", + ";+ c #A8A8A8", + ">+ c #393939", + ",+ c #747474", + "'+ c #7F7F7F", + ")+ c #D1D1D1", + "!+ c #606060", + "~+ c #5C5C5C", + "{+ c #686868", + "]+ c #7E7E7E", + "^+ c #787878", + "/+ c #595959", + ". . . + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / . . + + ", + ". ( + _ : < [ & } | 1 2 $ 3 4 5 3 6 7 + + 8 9 + . + . ", + ". + 0 9 a ( 3 a b c d e c f g h i g j $ k + l m + . + ", + "+ 2 8 n o p | ( q r s . # t + + + u ^ v e w + x + + + ", + "+ y z . @ A k B 7 n + ( s | p 8 C D 2 E 4 + + F G + . ", + "# H I $ J G K L - M N . 2 O P Q R R S T U s s V W j + ", + "X Y Z @ o ` _ g ...+.( 4 @.#.m G $.%.7 &.X *.=.-.;.&.", + "Q >.C ,.'.} e + ).!.k + . + + . ~.{.> ].x f 7 ^./.k (.", + "_.:.4 @ <.[.}.|.1.2.+ + + >.} 4 B + ( @ _ 3.4.5.6.r 7.", + "3.8.9.~ 0.+ a.Q b.+ + c.d.#.=.$ |.b #.e.z ^ ; ^. .f.g.", + "-.h.+ i.S M + # p j.% n 9.5.k.H l.m.V ^.n.o.M + M p.q.", + "7 r.N s.1.R t.<.|.| u.v.~ w.x.E + s y.z.A.B.C.+ 5 D.q ", + ").p.2 E.0.9 F.%.O {._ @.+ + i { [ i.G.H.P I.+ s q.} + ", + ").p.6 J.R b.K.L.M.A.! b.g.K [.R M k + N.I + + >.O.+ . ", + ").8.9.N.P...R R R R E.t.W n.+ Q.R.6 @.| + . + S.+ + . ", + "n }.w T.U.B.<.i.@ Y + + U.+ c u V.= B B 7 u.W.c + . + ", + "N T.# + }.X.Y.,.8.F.8 Z.[.`. +.+}.4 ++@+O.< ~.+ ( . + ", + "d #+1 + _ ~.u.$+b $.y @+| $+%+I.&+k.h W +.9.+ ( . + . ", + "w 0 |.*+. >.<.=+++++p a.p -+;+5.k.>+,+@ + . . + . + + ", + "q '+9.R.^ I.t b %.I.)+4 $+n.I.,+ .|.+ . . . + . + + + ", + ". p !+( + + + + + + E 0. .-+8.f.+ + . . + + . + + + + ", + ". ( A ~+{+]+^+l > /+D f.c q . + . . + + . + + + + + + " +] + +class QImageTest(UsesQApplication): + '''Test case for calling setPixel with float as argument''' + + def testQImageStringBuffer(self): + '''Test if the QImage signatures receiving string buffers exist.''' + img0 = QImage(adjust_filename('sample.png', __file__)) + + # btw let's test the bits() method + img1 = QImage(img0.bits(), img0.width(), img0.height(), img0.format()) + self.assertEqual(img0, img1) + img2 = QImage(img0.bits(), img0.width(), img0.height(), img0.bytesPerLine(), img0.format()) + self.assertEqual(img0, img2) + + ## test scanLine method + data1 = img0.scanLine(0) + data2 = img1.scanLine(0) + self.assertEqual(data1, data2) + + # PySide python 3.x does not support slice yet + if not py3k.IS_PY3K: + buff = py3k.buffer(img0.bits()[:img0.bytesPerLine()]) + self.assertEqual(data1, buff) + self.assertEqual(data2, buff) + + def testEmptyBuffer(self): + img = QImage(py3k.buffer(''), 100, 100, QImage.Format_ARGB32) + + def testEmptyStringAsBuffer(self): + img = QImage(py3k.b(''), 100, 100, QImage.Format_ARGB32) + + def testXpmConstructor(self): + label = QLabel() + img = QImage(xpm) + self.assertFalse(img.isNull()) + self.assertEqual(img.width(), 27) + self.assertEqual(img.height(), 22) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/qinputdialog_get_test.py b/sources/pyside2/tests/QtWidgets/qinputdialog_get_test.py new file mode 100644 index 0000000..2f5dcec --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qinputdialog_get_test.py @@ -0,0 +1,52 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2 import QtCore, QtWidgets +from helper import UsesQApplication, TimedQApplication + +class TestInputDialog(TimedQApplication): + + def testGetDouble(self): + self.assertEqual(QtWidgets.QInputDialog.getDouble(None, "title", "label"), (0.0, False)) + + def testGetInt(self): + self.assertEqual(QtWidgets.QInputDialog.getInt(None, "title", "label"), (0, False)) + + def testGetItem(self): + (item, bool) = QtWidgets.QInputDialog.getItem(None, "title", "label", ["1", "2", "3"]) + self.assertEqual(str(item), "1") + + def testGetText(self): + (text, bool) = QtWidgets.QInputDialog.getText(None, "title", "label") + self.assertEqual(str(text),"") + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/qkeysequenceedit_test.py b/sources/pyside2/tests/QtWidgets/qkeysequenceedit_test.py new file mode 100644 index 0000000..cbfaf9c --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qkeysequenceedit_test.py @@ -0,0 +1,46 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QKeySequenceEdit.''' + +import unittest +from PySide2.QtCore import QTimer +from PySide2.QtWidgets import QKeySequenceEdit + +from helper import UsesQApplication + +class QKeySequenceEditTest(UsesQApplication): + def testKeySequence(self): + keySequenceEdit = QKeySequenceEdit() + keySequenceEdit.show() + QTimer.singleShot(0, keySequenceEdit.close) + self.app.exec_() + print(keySequenceEdit.keySequence()) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qlabel_test.py b/sources/pyside2/tests/QtWidgets/qlabel_test.py new file mode 100644 index 0000000..2c56160 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qlabel_test.py @@ -0,0 +1,89 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QLabel''' + +import unittest + +from PySide2.QtGui import QPixmap +from PySide2.QtWidgets import QLabel +try: + # The normal import statement when PySide2 is installed. + from PySide2 import shiboken2 as shiboken +except ImportError: + # When running make test in shiboken build dir, or when running + # testrunner.py, shiboken2 is not part of the PySide2 module, + # so it needs to be imported as a standalone module. + import shiboken2 as shiboken + +from helper import UsesQApplication + +class QLabelTest(UsesQApplication): + '''Test case for calling QLabel.setPixmap''' + + def setUp(self): + super(QLabelTest, self).setUp() + self.label = QLabel() + + def tearDown(self): + del self.label + super(QLabelTest, self).tearDown() + + def testSetPixmap(self): + + p1 = QPixmap(5, 5) + p2 = QPixmap(10, 10) + + self.label.setPixmap(p1) + self.assertIsNotNone(self.label.pixmap()) + + + # PYSIDE-150: + # When a new QPixmap is assigned to a QLabel, + # the previous one needs to be cleared. + # This means we should not keep a copy of the QPixmap + # on Python-side. + + # Getting pointer to the QPixmap + ret_p = self.label.pixmap() + self.assertIsNot(p1, ret_p) + # Save the address of the pointer + ret_p_addr = shiboken.getCppPointer(ret_p) + # Remove the QPixmap + del ret_p + # Set new QPixmap + self.label.setPixmap(p2) + + # There should be no pointers remaining with the same + # address that our QPixmap p1 because it was deleted + # using `del ret_p` + self.assertTrue(all(shiboken.getCppPointer(o) != ret_p_addr + for o in shiboken.getAllValidWrappers())) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qlayout_ref_test.py b/sources/pyside2/tests/QtWidgets/qlayout_ref_test.py new file mode 100644 index 0000000..ece5626 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qlayout_ref_test.py @@ -0,0 +1,179 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QLayout handling of child widgets references''' + +import unittest +from sys import getrefcount + +from PySide2.QtWidgets import QHBoxLayout, QVBoxLayout, QGridLayout, QWidget +from PySide2.QtWidgets import QStackedLayout, QFormLayout +from PySide2.QtWidgets import QApplication, QPushButton, QLabel + +from helper import UsesQApplication + +class SaveReference(UsesQApplication): + '''Test case to check if QLayout-derived classes increment the refcount + of widgets passed to addWidget()''' + + # Adding here as nose can't see the qapplication attrib we inherit + qapplication = True + + def setUp(self): + #Acquire resources + super(SaveReference, self).setUp() + self.widget1 = QPushButton('click me') + self.widget2 = QLabel('aaa') + + def tearDown(self): + #Release resources + del self.widget2 + del self.widget1 + super(SaveReference, self).tearDown() + + def checkLayoutReference(self, layout): + #Checks the reference cound handling of layout.addWidget + self.assertEqual(getrefcount(self.widget1), 2) + layout.addWidget(self.widget1) + self.assertEqual(getrefcount(self.widget1), 3) + + self.assertEqual(getrefcount(self.widget2), 2) + layout.addWidget(self.widget2) + self.assertEqual(getrefcount(self.widget2), 3) + + # Check if doesn't mess around with previous widget refcount + self.assertEqual(getrefcount(self.widget1), 3) + + def testMoveLayout(self): + l = QHBoxLayout() + self.assertEqual(getrefcount(self.widget1), 2) + l.addWidget(self.widget1) + self.assertEqual(getrefcount(self.widget1), 3) + + w = QWidget() + w.setLayout(l) + self.assertEqual(getrefcount(self.widget1), 3) + + + def testHBoxReference(self): + #QHBoxLayout.addWidget reference count + w = QWidget() + self.checkLayoutReference(QHBoxLayout(w)) + + def testVBoxReference(self): + #QVBoxLayout.addWidget reference count + w = QWidget() + self.checkLayoutReference(QVBoxLayout(w)) + + def testGridReference(self): + #QGridLayout.addWidget reference count + w = QWidget() + self.checkLayoutReference(QGridLayout(w)) + + def testFormReference(self): + #QFormLayout.addWidget reference count + w = QWidget() + self.checkLayoutReference(QFormLayout(w)) + + def testStackedReference(self): + #QStackedLayout.addWidget reference count + w = QWidget() + self.checkLayoutReference(QStackedLayout(w)) + +class MultipleAdd(UsesQApplication): + '''Test case to check if refcount is incremented only once when multiple + calls to addWidget are made with the same widget''' + + qapplication = True + + def setUp(self): + #Acquire resources + super(MultipleAdd, self).setUp() + self.widget = QPushButton('click me') + self.win = QWidget() + self.layout = QHBoxLayout(self.win) + + def tearDown(self): + #Release resources + del self.widget + del self.layout + del self.win + super(MultipleAdd, self).tearDown() + + def testRefCount(self): + #Multiple QLayout.addWidget calls on the same widget + self.assertEqual(getrefcount(self.widget), 2) + self.layout.addWidget(self.widget) + self.assertEqual(getrefcount(self.widget), 3) + self.layout.addWidget(self.widget) + self.assertEqual(getrefcount(self.widget), 3) + self.layout.addWidget(self.widget) + self.assertEqual(getrefcount(self.widget), 3) + +class InternalAdd(UsesQApplication): + def testInternalRef(self): + mw = QWidget() + w = QWidget() + ow = QWidget() + + topLayout = QGridLayout() + + # unique reference + self.assertEqual(getrefcount(w), 2) + self.assertEqual(getrefcount(ow), 2) + + topLayout.addWidget(w, 0, 0) + topLayout.addWidget(ow, 1, 0) + + # layout keep the referemce + self.assertEqual(getrefcount(w), 3) + self.assertEqual(getrefcount(ow), 3) + + mainLayout = QGridLayout() + + mainLayout.addLayout(topLayout, 1, 0, 1, 4) + + # the same reference + self.assertEqual(getrefcount(w), 3) + self.assertEqual(getrefcount(ow), 3) + + mw.setLayout(mainLayout) + + # now trasfer the ownership to mw + self.assertEqual(getrefcount(w), 3) + self.assertEqual(getrefcount(ow), 3) + + del mw + + # remove the ref and invalidate the widget + self.assertEqual(getrefcount(w), 2) + self.assertEqual(getrefcount(ow), 2) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qlayout_test.py b/sources/pyside2/tests/QtWidgets/qlayout_test.py new file mode 100644 index 0000000..09b394a --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qlayout_test.py @@ -0,0 +1,140 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sys + +from helper import UsesQApplication +from PySide2.QtCore import * +from PySide2.QtWidgets import * + +class MyLayout(QLayout): + def __init__(self, parent=None): + QLayout.__init__(self, parent) + self._list = [] + + def addItem(self, item): + self.add(item) + + def addWidget(self, widget): + self.add(QWidgetItem(widget)) + + def itemAt(self, index): + if index < len(self._list): + return self._list[index] + + return None + + def count(self): + return len(self._list) + + def add(self, item): + self._list.append(item) + +class MissingItemAtLayout(QLayout): + def __init__(self, parent=None): + QLayout.__init__(self, parent) + self._list = [] + + def addItem(self, item): + self.add(item) + + def addWidget(self, widget): + self.add(QWidgetItem(widget)) + + def count(self): + return len(self._list) + + def add(self, item): + self._list.append(item) + +#Test if a layout implemented in python, the QWidget.setLayout works +#fine because this implement som layout functions used in glue code of +#QWidget, then in c++ when call a virtual function this need call the QLayout +#function implemented in python + +class QLayoutTest(UsesQApplication): + def testOwnershipTransfer(self): + b = QPushButton("teste") + l = MyLayout() + + l.addWidget(b) + + self.assertEqual(sys.getrefcount(b), 2) + + w = QWidget() + + #transfer ref + w.setLayout(l) + + self.assertEqual(sys.getrefcount(b), 3) + + + def testReferenceTransfer(self): + b = QPushButton("teste") + l = QHBoxLayout() + + # keep ref + l.addWidget(b) + self.assertEqual(sys.getrefcount(b), 3) + + w = QWidget() + + # transfer ref + w.setLayout(l) + + self.assertEqual(sys.getrefcount(b), 3) + + # release ref + del w + + self.assertEqual(sys.getrefcount(b), 2) + + def testMissingFunctions(self): + w = QWidget() + b = QPushButton("test") + l = MissingItemAtLayout() + + l.addWidget(b) + + self.assertRaises(RuntimeError, w.setLayout, l) + + def testQFormLayout(self): + w = QWidget() + formLayout = QFormLayout() + spacer = QSpacerItem(100, 30) + formLayout.setItem(0, QFormLayout.SpanningRole, spacer) + w.setLayout(formLayout) + w.show() + QTimer.singleShot(10, w.close) + self.app.exec_() + del w + self.assertRaises(RuntimeError, spacer.isEmpty) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qlcdnumber_test.py b/sources/pyside2/tests/QtWidgets/qlcdnumber_test.py new file mode 100644 index 0000000..6da0a31 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qlcdnumber_test.py @@ -0,0 +1,44 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtWidgets import QApplication, QLCDNumber + +class QLCDNumberOverflow(unittest.TestCase): + '''Test case for unhandled overflow on QLCDNumber() numDigits argument (see bug #215).''' + + def setUp(self): + self.app = QApplication([]) + + def testnumDigitsOverflow(self): + # NOTE: PyQt4 raises TypeError, but boost.python raises OverflowError + self.assertRaises(OverflowError, QLCDNumber, 840835495615213080) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qlistwidget_test.py b/sources/pyside2/tests/QtWidgets/qlistwidget_test.py new file mode 100644 index 0000000..7e2d351 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qlistwidget_test.py @@ -0,0 +1,89 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +import sys +from PySide2 import QtWidgets, QtCore +from helper import UsesQApplication + +class QListWidgetTest(UsesQApplication): + + def populateList(self, lst): + o = QtCore.QObject() + o.setObjectName("obj") + + item = QtWidgets.QListWidgetItem("item0") + item.setData(QtCore.Qt.UserRole, o) + #item._data = o + self.assertTrue(sys.getrefcount(o), 3) + self.assertTrue(sys.getrefcount(item), 2) + lst.addItem(item) + self.assertTrue(sys.getrefcount(item), 3) + + def checkCurrentItem(self, lst): + item = lst.currentItem() + self.assertTrue(sys.getrefcount(item), 3) + + def checkItemData(self, lst): + item = lst.currentItem() + o = item.data(QtCore.Qt.UserRole) + self.assertTrue(sys.getrefcount(o), 4) + self.assertEqual(o, item._data) + self.assertTrue(sys.getrefcount(o), 2) + + def testConstructorWithParent(self): + lst = QtWidgets.QListWidget() + self.populateList(lst) + self.checkCurrentItem(lst) + i = lst.item(0) + self.assertTrue(sys.getrefcount(i), 3) + + del lst + self.assertTrue(sys.getrefcount(i), 2) + del i + + def testIt(self): + lst = QtWidgets.QListWidget() + lst.show() + slot = lambda : lst.removeItemWidget(lst.currentItem()) + lst.addItem(QtWidgets.QListWidgetItem("foo")) + QtCore.QTimer.singleShot(0, slot) + QtCore.QTimer.singleShot(0, lst.close) + self.app.exec_() + self.assertEqual(lst.count(), 1) + + def testClear(self): + lst = QtWidgets.QListWidget() + lst.addItem("foo") + item = lst.item(0) + self.assertIsNone(lst.clear()) + self.assertRaises(RuntimeError, lambda: item.text()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qlistwidgetitem_test.py b/sources/pyside2/tests/QtWidgets/qlistwidgetitem_test.py new file mode 100644 index 0000000..1bee798 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qlistwidgetitem_test.py @@ -0,0 +1,56 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2 import QtWidgets + +from helper import UsesQApplication + +class QListWidgetItemConstructor(UsesQApplication): + + def setUp(self): + super(QListWidgetItemConstructor, self).setUp() + self.widgetList = QtWidgets.QListWidget() + + def tearDown(self): + del self.widgetList + super(QListWidgetItemConstructor, self).tearDown() + + def testConstructorWithParent(self): + # Bug 235 - QListWidgetItem constructor not saving ownership + QtWidgets.QListWidgetItem(self.widgetList) + item = self.widgetList.item(0) + self.assertEqual(item.listWidget(), self.widgetList) + + def testConstructorWithNone(self): + # Bug 452 - QListWidgetItem() not casting NoneType to null correctly. + item = QtWidgets.QListWidgetItem(None, 123) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qmainwindow_test.py b/sources/pyside2/tests/QtWidgets/qmainwindow_test.py new file mode 100644 index 0000000..a6b4a05 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qmainwindow_test.py @@ -0,0 +1,113 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sys +import weakref + +from PySide2 import QtWidgets +from PySide2 import QtCore + +from helper import UsesQApplication + +class MainWindow(QtWidgets.QMainWindow): + def __init__(self): + QtWidgets.QMainWindow.__init__(self) + + self.createToolbar() + + def createToolbar(self): + pointerButton = QtWidgets.QToolButton() + pointerToolbar = self.addToolBar("Pointer type") + pointerToolbar.addWidget(pointerButton) + +class MyButton(QtWidgets.QPushButton): + def __init__(self, parent=None): + QtWidgets.QPushButton.__init__(self) + self._called = False + + def myCallback(self): + self._called = True + + +class TestMainWindow(UsesQApplication): + + def testCreateToolbar(self): + w = MainWindow() + w.show() + QtCore.QTimer.singleShot(1000, self.app.quit) + self.app.exec_() + + def objDel(self, obj): + self.app.quit() + + def testRefCountToNull(self): + w = QtWidgets.QMainWindow() + c = QtWidgets.QWidget() + self.assertEqual(sys.getrefcount(c), 2) + w.setCentralWidget(c) + self.assertEqual(sys.getrefcount(c), 3) + wr = weakref.ref(c, self.objDel) + w.setCentralWidget(None) + c = None + self.app.exec_() + + def testRefCountToAnother(self): + w = QtWidgets.QMainWindow() + c = QtWidgets.QWidget() + self.assertEqual(sys.getrefcount(c), 2) + w.setCentralWidget(c) + self.assertEqual(sys.getrefcount(c), 3) + + c2 = QtWidgets.QWidget() + w.setCentralWidget(c2) + self.assertEqual(sys.getrefcount(c2), 3) + + wr = weakref.ref(c, self.objDel) + w.setCentralWidget(None) + c = None + + self.app.exec_() + + def testSignalDisconect(self): + w = QtWidgets.QMainWindow() + b = MyButton("button") + b.clicked.connect(b.myCallback) + w.setCentralWidget(b) + + b = MyButton("button") + b.clicked.connect(b.myCallback) + w.setCentralWidget(b) + + b.click() + self.assertEqual(b._called, True) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/qmenu_test.py b/sources/pyside2/tests/QtWidgets/qmenu_test.py new file mode 100644 index 0000000..74a6779 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qmenu_test.py @@ -0,0 +1,86 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtWidgets import QMenu +from PySide2.QtGui import QKeySequence, QIcon +from PySide2.QtCore import SLOT + +from helper import UsesQApplication + +class QMenuAddAction(UsesQApplication): + + def setUp(self): + super(QMenuAddAction, self).setUp() + self.menu = QMenu() + + def tearDown(self): + del self.menu + super(QMenuAddAction, self).tearDown() + + def testAddActionWithoutKeySequenceCallable(self): + # bug #280 + action = self.menu.addAction(self.app.tr('aaa'), lambda : 1) + + def testAddActionKeySequenceCallable(self): + # bug #228 + action = self.menu.addAction(self.app.tr('aaa'), lambda : 1, + QKeySequence(self.app.tr('Ctrl+O'))) + + def testAddActionKeySequenceSlot(self): + action = self.menu.addAction('Quit', self.app, SLOT('quit()'), + QKeySequence('Ctrl+O')) + +class QMenuAddActionWithIcon(UsesQApplication): + + def setUp(self): + super(QMenuAddActionWithIcon, self).setUp() + self.menu = QMenu() + self.icon = QIcon() + + def tearDown(self): + del self.menu + del self.icon + super(QMenuAddActionWithIcon, self).tearDown() + + def testAddActionWithoutKeySequenceCallable(self): + # bug #280 + action = self.menu.addAction(self.icon, self.app.tr('aaa'), lambda : 1) + + def testAddActionKeySequenceCallable(self): + # bug #228 + action = self.menu.addAction(self.icon, self.app.tr('aaa'), lambda : 1, + QKeySequence(self.app.tr('Ctrl+O'))) + + def testAddActionKeySequenceSlot(self): + action = self.menu.addAction(self.icon, 'Quit', self.app, SLOT('quit()'), + QKeySequence('Ctrl+O')) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qmenuadd_test.py b/sources/pyside2/tests/QtWidgets/qmenuadd_test.py new file mode 100644 index 0000000..916b156 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qmenuadd_test.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test the QMenu.addAction() method''' + +import unittest +import sys + +from PySide2 import QtWidgets + +from helper import UsesQApplication + +class QMenuAddAction(UsesQApplication): + + def openFile(self, *args): + self.arg = args + + def testQMenuAddAction(self): + fileMenu = QtWidgets.QMenu("&File") + + addNewAction = fileMenu.addAction("&Open...", self.openFile) + addNewAction.trigger() + self.assertEqual(self.arg, ()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qobject_mi_test.py b/sources/pyside2/tests/QtWidgets/qobject_mi_test.py new file mode 100644 index 0000000..4a7f8b3 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qobject_mi_test.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for multiple inheritance from 2 QObjects''' + +import unittest + +from PySide2.QtCore import QObject +from PySide2.QtGui import * +from PySide2.QtWidgets import * + +from helper import UsesQApplication + +class WidgetValidator(QWidget, QIntValidator): + def __init__(self, parent=None): + QWidget.__init__(self, parent) + QIntValidator.__init__(self, parent) + + +class DoubleQObjectInheritanceTest(UsesQApplication): + + def testDouble(self): + '''Double inheritance from QObject classes''' + + obj = WidgetValidator() + + #QObject methods + obj.setObjectName('aaaa') + self.assertEqual(obj.objectName(), 'aaaa') + + #QWidget methods + obj.setVisible(False) + self.assertFalse(obj.isVisible()) + + #QIntValidator methods + state, string, number = obj.validate('aaaa', 0) + self.assertEqual(state, QValidator.Invalid) + state, string, number = obj.validate('33', 0) + self.assertEqual(state, QValidator.Acceptable) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qpen_test.py b/sources/pyside2/tests/QtWidgets/qpen_test.py new file mode 100644 index 0000000..28efa73 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qpen_test.py @@ -0,0 +1,72 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from helper import UsesQApplication + +from PySide2.QtCore import Qt, QTimer +from PySide2.QtGui import QPen, QPainter +from PySide2.QtWidgets import QWidget + +class Painting(QWidget): + def __init__(self): + QWidget.__init__(self) + self.penFromEnum = None + self.penFromInteger = None + + def paintEvent(self, event): + painter = QPainter(self) + painter.setPen(Qt.NoPen) + self.penFromEnum = painter.pen() + painter.setPen(int(Qt.NoPen)) + self.penFromInteger = painter.pen() + + +class QPenTest(UsesQApplication): + + def testCtorWithCreatedEnums(self): + '''A simple case of QPen creation using created enums.''' + width = 0 + style = Qt.PenStyle(0) + cap = Qt.PenCapStyle(0) + join = Qt.PenJoinStyle(0) + pen = QPen(Qt.blue, width, style, cap, join) + + def testSetPenWithPenStyleEnum(self): + '''Calls QPainter.setPen with both enum and integer. Bug #511.''' + w = Painting() + w.show() + QTimer.singleShot(1000, self.app.quit) + self.app.exec_() + self.assertEqual(w.penFromEnum.style(), Qt.NoPen) + self.assertEqual(w.penFromInteger.style(), Qt.SolidLine) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/qpicture_test.py b/sources/pyside2/tests/QtWidgets/qpicture_test.py new file mode 100644 index 0000000..b5ec577 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qpicture_test.py @@ -0,0 +1,66 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +import os +from helper import UsesQApplication +from PySide2.QtCore import QTimer +from PySide2.QtGui import QPicture, QPainter +from PySide2.QtWidgets import QWidget + +class MyWidget(QWidget): + def paintEvent(self, e): + p = QPainter(self) + p.drawPicture(0, 0, self._picture) + self._app.quit() + +class QPictureTest(UsesQApplication): + def testFromData(self): + picture = QPicture() + painter = QPainter() + painter.begin(picture) + painter.drawEllipse(10,20, 80,70) + painter.end() + + data = picture.data() + picture2 = QPicture() + picture2.setData(data) + + self.assertEqual(picture2.data(), picture.data()) + + w = MyWidget() + w._picture = picture2 + w._app = self.app + + QTimer.singleShot(300, w.show) + self.app.exec_() + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/qpixmap_constructor.py b/sources/pyside2/tests/QtWidgets/qpixmap_constructor.py new file mode 100644 index 0000000..d3748be --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qpixmap_constructor.py @@ -0,0 +1,279 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtGui import QPixmap +from PySide2.QtWidgets import QLabel + +from helper import UsesQApplication + +xpm = [ + "27 22 206 2", + " c None", + ". c #FEFEFE", + "+ c #FFFFFF", + "@ c #F9F9F9", + "# c #ECECEC", + "$ c #D5D5D5", + "% c #A0A0A0", + "& c #767676", + "* c #525252", + "= c #484848", + "- c #4E4E4E", + "; c #555555", + "> c #545454", + ", c #5A5A5A", + "' c #4B4B4B", + ") c #4A4A4A", + "! c #4F4F4F", + "~ c #585858", + "{ c #515151", + "] c #4C4C4C", + "^ c #B1B1B1", + "/ c #FCFCFC", + "( c #FDFDFD", + "_ c #C1C1C1", + ": c #848484", + "< c #616161", + "[ c #5E5E5E", + "} c #CECECE", + "| c #E2E2E2", + "1 c #E4E4E4", + "2 c #DFDFDF", + "3 c #D2D2D2", + "4 c #D8D8D8", + "5 c #D4D4D4", + "6 c #E6E6E6", + "7 c #F1F1F1", + "8 c #838383", + "9 c #8E8E8E", + "0 c #8F8F8F", + "a c #CBCBCB", + "b c #CCCCCC", + "c c #E9E9E9", + "d c #F2F2F2", + "e c #EDEDED", + "f c #B5B5B5", + "g c #A6A6A6", + "h c #ABABAB", + "i c #BBBBBB", + "j c #B0B0B0", + "k c #EAEAEA", + "l c #6C6C6C", + "m c #BCBCBC", + "n c #F5F5F5", + "o c #FAFAFA", + "p c #B6B6B6", + "q c #F3F3F3", + "r c #CFCFCF", + "s c #FBFBFB", + "t c #CDCDCD", + "u c #DDDDDD", + "v c #999999", + "w c #F0F0F0", + "x c #2B2B2B", + "y c #C3C3C3", + "z c #A4A4A4", + "A c #D7D7D7", + "B c #E7E7E7", + "C c #6E6E6E", + "D c #9D9D9D", + "E c #BABABA", + "F c #AEAEAE", + "G c #898989", + "H c #646464", + "I c #BDBDBD", + "J c #CACACA", + "K c #2A2A2A", + "L c #212121", + "M c #B7B7B7", + "N c #F4F4F4", + "O c #737373", + "P c #828282", + "Q c #4D4D4D", + "R c #000000", + "S c #151515", + "T c #B2B2B2", + "U c #D6D6D6", + "V c #D3D3D3", + "W c #2F2F2F", + "X c #636363", + "Y c #A1A1A1", + "Z c #BFBFBF", + "` c #E0E0E0", + " . c #6A6A6A", + ".. c #050505", + "+. c #A3A3A3", + "@. c #202020", + "#. c #5F5F5F", + "$. c #B9B9B9", + "%. c #C7C7C7", + "&. c #D0D0D0", + "*. c #3E3E3E", + "=. c #666666", + "-. c #DBDBDB", + ";. c #424242", + ">. c #C2C2C2", + ",. c #1A1A1A", + "'. c #2C2C2C", + "). c #F6F6F6", + "!. c #AAAAAA", + "~. c #DCDCDC", + "{. c #2D2D2D", + "]. c #2E2E2E", + "^. c #A7A7A7", + "/. c #656565", + "(. c #333333", + "_. c #464646", + ":. c #C4C4C4", + "<. c #B8B8B8", + "[. c #292929", + "}. c #979797", + "|. c #EFEFEF", + "1. c #909090", + "2. c #8A8A8A", + "3. c #575757", + "4. c #676767", + "5. c #C5C5C5", + "6. c #7A7A7A", + "7. c #797979", + "8. c #989898", + "9. c #EEEEEE", + "0. c #707070", + "a. c #C8C8C8", + "b. c #111111", + "c. c #AFAFAF", + "d. c #474747", + "e. c #565656", + "f. c #E3E3E3", + "g. c #494949", + "h. c #5B5B5B", + "i. c #222222", + "j. c #353535", + "k. c #D9D9D9", + "l. c #0A0A0A", + "m. c #858585", + "n. c #E5E5E5", + "o. c #0E0E0E", + "p. c #9A9A9A", + "q. c #6F6F6F", + "r. c #868686", + "s. c #060606", + "t. c #1E1E1E", + "u. c #E8E8E8", + "v. c #A5A5A5", + "w. c #0D0D0D", + "x. c #030303", + "y. c #272727", + "z. c #131313", + "A. c #1F1F1F", + "B. c #757575", + "C. c #F7F7F7", + "D. c #414141", + "E. c #080808", + "F. c #6B6B6B", + "G. c #313131", + "H. c #C0C0C0", + "I. c #C9C9C9", + "J. c #0B0B0B", + "K. c #232323", + "L. c #434343", + "M. c #3D3D3D", + "N. c #282828", + "O. c #7C7C7C", + "P. c #252525", + "Q. c #3A3A3A", + "R. c #F8F8F8", + "S. c #1B1B1B", + "T. c #949494", + "U. c #3B3B3B", + "V. c #242424", + "W. c #383838", + "X. c #6D6D6D", + "Y. c #818181", + "Z. c #939393", + "`. c #9E9E9E", + " + c #929292", + ".+ c #7D7D7D", + "++ c #ADADAD", + "@+ c #DADADA", + "#+ c #919191", + "$+ c #E1E1E1", + "%+ c #BEBEBE", + "&+ c #ACACAC", + "*+ c #9C9C9C", + "=+ c #B3B3B3", + "-+ c #808080", + ";+ c #A8A8A8", + ">+ c #393939", + ",+ c #747474", + "'+ c #7F7F7F", + ")+ c #D1D1D1", + "!+ c #606060", + "~+ c #5C5C5C", + "{+ c #686868", + "]+ c #7E7E7E", + "^+ c #787878", + "/+ c #595959", + ". . . + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / . . + + ", + ". ( + _ : < [ & } | 1 2 $ 3 4 5 3 6 7 + + 8 9 + . + . ", + ". + 0 9 a ( 3 a b c d e c f g h i g j $ k + l m + . + ", + "+ 2 8 n o p | ( q r s . # t + + + u ^ v e w + x + + + ", + "+ y z . @ A k B 7 n + ( s | p 8 C D 2 E 4 + + F G + . ", + "# H I $ J G K L - M N . 2 O P Q R R S T U s s V W j + ", + "X Y Z @ o ` _ g ...+.( 4 @.#.m G $.%.7 &.X *.=.-.;.&.", + "Q >.C ,.'.} e + ).!.k + . + + . ~.{.> ].x f 7 ^./.k (.", + "_.:.4 @ <.[.}.|.1.2.+ + + >.} 4 B + ( @ _ 3.4.5.6.r 7.", + "3.8.9.~ 0.+ a.Q b.+ + c.d.#.=.$ |.b #.e.z ^ ; ^. .f.g.", + "-.h.+ i.S M + # p j.% n 9.5.k.H l.m.V ^.n.o.M + M p.q.", + "7 r.N s.1.R t.<.|.| u.v.~ w.x.E + s y.z.A.B.C.+ 5 D.q ", + ").p.2 E.0.9 F.%.O {._ @.+ + i { [ i.G.H.P I.+ s q.} + ", + ").p.6 J.R b.K.L.M.A.! b.g.K [.R M k + N.I + + >.O.+ . ", + ").8.9.N.P...R R R R E.t.W n.+ Q.R.6 @.| + . + S.+ + . ", + "n }.w T.U.B.<.i.@ Y + + U.+ c u V.= B B 7 u.W.c + . + ", + "N T.# + }.X.Y.,.8.F.8 Z.[.`. +.+}.4 ++@+O.< ~.+ ( . + ", + "d #+1 + _ ~.u.$+b $.y @+| $+%+I.&+k.h W +.9.+ ( . + . ", + "w 0 |.*+. >.<.=+++++p a.p -+;+5.k.>+,+@ + . . + . + + ", + "q '+9.R.^ I.t b %.I.)+4 $+n.I.,+ .|.+ . . . + . + + + ", + ". p !+( + + + + + + E 0. .-+8.f.+ + . . + + . + + + + ", + ". ( A ~+{+]+^+l > /+D f.c q . + . . + + . + + + + + + " +] + +class QStringSequenceTest(UsesQApplication): + def testQPixmapConstructor(self): + label = QLabel() + pixmap1 = QPixmap(xpm) + self.assertFalse(pixmap1.isNull()) + self.assertEqual(pixmap1.width(), 27) + self.assertEqual(pixmap1.height(), 22) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qpushbutton_test.py b/sources/pyside2/tests/QtWidgets/qpushbutton_test.py new file mode 100644 index 0000000..c73d550 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qpushbutton_test.py @@ -0,0 +1,69 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from helper import UsesQApplication +from PySide2.QtWidgets import QPushButton, QMenu, QWidget +from PySide2.QtCore import QTimer + +class MyWidget(QWidget): + def __init__(self): + QWidget.__init__(self) + + m = QMenu(self) + b = QPushButton("Hello", self) + b.setMenu(m) + + +class QPushButtonTest(UsesQApplication): + def createMenu(self, button): + m = QMenu() + button.setMenu(m) + + def testSetMenu(self): + w = MyWidget() + w.show() + + timer = QTimer.singleShot(100, self.app.quit) + self.app.exec_() + + def buttonCb(self, checked): + self._clicked = True + + def testBoolinSignal(self): + b = QPushButton() + b.setCheckable(True) + self._clicked = False + b.toggled[bool].connect(self.buttonCb) + b.toggle() + self.assertTrue(self._clicked) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/qshortcut_test.py b/sources/pyside2/tests/QtWidgets/qshortcut_test.py new file mode 100644 index 0000000..7faaf6f --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qshortcut_test.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test the QShortcut constructor''' + +import unittest +import sys + +from PySide2 import QtCore, QtGui, QtWidgets + +class Foo(QtWidgets.QWidget): + def __init__(self): + QtWidgets.QWidget.__init__(self) + self.ok = False + self.copy = False + + def slot_of_foo(self): + self.ok = True + + def slot_of_copy(self): + self.copy = True + +class MyShortcut(QtWidgets.QShortcut): + def __init__(self, keys, wdg, slot): + QtWidgets.QShortcut.__init__(self, keys, wdg, slot) + + def emit_signal(self): + self.emit(QtCore.SIGNAL("activated()")) + +class QAppPresence(unittest.TestCase): + + def testQShortcut(self): + self.qapp = QtWidgets.QApplication([]) + f = Foo() + + self.sc = MyShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Return), f, f.slot_of_foo) + self.scstd = MyShortcut(QtGui.QKeySequence.Copy, f, f.slot_of_copy) + QtCore.QTimer.singleShot(0, self.init); + self.qapp.exec_() + self.assertEqual(f.ok, True) + self.assertEqual(f.copy, True) + + def init(self): + self.sc.emit_signal(); + self.scstd.emit_signal(); + self.qapp.quit() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qsplitter_test.py b/sources/pyside2/tests/QtWidgets/qsplitter_test.py new file mode 100644 index 0000000..6a6824a --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qsplitter_test.py @@ -0,0 +1,44 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtWidgets import QSplitter + +from helper import UsesQApplication + +class QSplitterTest(UsesQApplication): + + def testGetRange(self): + splitter = QSplitter() + _min, _max = splitter.getRange(0) + self.assertTrue(isinstance(_min, int)) + self.assertTrue(isinstance(_max, int)) + +if __name__ == "__main__": + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/qstandarditemmodel_test.py b/sources/pyside2/tests/QtWidgets/qstandarditemmodel_test.py new file mode 100644 index 0000000..7a34cf2 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qstandarditemmodel_test.py @@ -0,0 +1,108 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sys + +from PySide2.QtGui import QStandardItemModel, QStandardItem +from PySide2.QtWidgets import QWidget +try: + # The normal import statement when PySide2 is installed. + from PySide2 import shiboken2 as shiboken +except ImportError: + # When running make test in shiboken build dir, or when running testrunner.py, + # shiboken2 is not part of the PySide2 module, so it needs to be imported as a standalone + # module. + import shiboken2 as shiboken + +from helper import UsesQApplication + + +class QStandardItemModelTest(UsesQApplication): + + def setUp(self): + super(QStandardItemModelTest, self).setUp() + self.window = QWidget() + self.model = QStandardItemModel(0, 3, self.window) + + def tearDown(self): + del self.window + del self.model + super(QStandardItemModelTest, self).tearDown() + + def testInsertRow(self): + # bug #227 + self.model.insertRow(0) + + def testClear(self): + + model = QStandardItemModel() + root = model.invisibleRootItem() + model.clear() + self.assertFalse(shiboken.isValid(root)) + + +class QStandardItemModelRef(UsesQApplication): + def testRefCount(self): + model = QStandardItemModel(5, 5) + items = [] + for r in range(5): + row = [] + for c in range(5): + row.append(QStandardItem("%d,%d" % (r,c)) ) + self.assertEqual(sys.getrefcount(row[c]), 2) + + model.insertRow(r, row) + + for c in range(5): + ref_after = sys.getrefcount(row[c]) + # check if the ref count was incremented after insertRow + self.assertEqual(ref_after, 3) + + items.append(row) + row = None + + for r in range(3): + my_row = model.takeRow(0) + my_row = None + for c in range(5): + # only rest 1 reference + self.assertEqual(sys.getrefcount(items[r][c]), 2) + + my_i = model.item(0,0) + # ref(my_i) + parent_ref + items list ref + self.assertEqual(sys.getrefcount(my_i), 4) + + model.clear() + # ref(my_i) + self.assertEqual(sys.getrefcount(my_i), 3) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/qstring_qkeysequence_test.py b/sources/pyside2/tests/QtWidgets/qstring_qkeysequence_test.py new file mode 100644 index 0000000..6538607 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qstring_qkeysequence_test.py @@ -0,0 +1,61 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests conversions of QString to and from QKeySequence.''' + +import unittest +import py3kcompat as py3k +from helper import UsesQApplication + +from PySide2.QtGui import QKeySequence +from PySide2.QtWidgets import QAction + +class QStringQKeySequenceTest(UsesQApplication): + '''Tests conversions of QString to and from QKeySequence.''' + + def testQStringFromQKeySequence(self): + '''Creates a QString from a QKeySequence.''' + keyseq = 'Ctrl+A' + a = QKeySequence(keyseq) + self.assertEqual(a, keyseq) + + def testPythonStringAsQKeySequence(self): + '''Passes a Python string to an argument expecting a QKeySequence.''' + keyseq = py3k.unicode_('Ctrl+A') + action = QAction(None) + action.setShortcut(keyseq) + shortcut = action.shortcut() + self.assertTrue(isinstance(shortcut, QKeySequence)) + self.assertEqual(shortcut.toString(), keyseq) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/qstyle_test.py b/sources/pyside2/tests/QtWidgets/qstyle_test.py new file mode 100644 index 0000000..eb2a73d --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qstyle_test.py @@ -0,0 +1,83 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from helper import UsesQApplication + +from PySide2.QtGui import QWindow +from PySide2.QtWidgets import (QApplication, QFontComboBox, QLabel, QProxyStyle, + QStyleFactory, QWidget) + +class ProxyStyle(QProxyStyle): + + def __init__(self, style): + QProxyStyle.__init__(self, style) + self.polished = 0 + + def polish(self, widget): + self.polished = self.polished + 1 + super(ProxyStyle, self).polish(widget) + + +class SetStyleTest(UsesQApplication): + '''Tests setting the same QStyle for all objects in a UI hierarchy.''' + + def testSetStyle(self): + '''All this test have to do is not break with some invalid Python wrapper.''' + + def setStyleHelper(widget, style): + widget.setStyle(style) + widget.setPalette(style.standardPalette()) + for child in widget.children(): + if isinstance(child, QWidget): + setStyleHelper(child, style) + + container = QWidget() + # QFontComboBox is used because it has an QLineEdit created in C++ inside it, + # and if the QWidget.setStyle(style) steals the ownership of the style + # for the C++ originated widget everything will break. + fontComboBox = QFontComboBox(container) + label = QLabel(container) + label.setText('Label') + style = QStyleFactory.create(QStyleFactory.keys()[0]) + setStyleHelper(container, style) + + def testSetProxyStyle(self): + label = QLabel("QtWidgets/ProxyStyle test") + baseStyle = QStyleFactory.create(QApplication.instance().style().objectName()) + self.assertTrue(baseStyle) + proxyStyle = ProxyStyle(baseStyle) + label.setStyle(proxyStyle) + label.show() + while not label.windowHandle().isExposed(): + QApplication.instance().processEvents() + self.assertTrue(proxyStyle.polished > 0) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/qtableview_test.py b/sources/pyside2/tests/QtWidgets/qtableview_test.py new file mode 100644 index 0000000..1f5b52c --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qtableview_test.py @@ -0,0 +1,44 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QAbstractTableModel +from PySide2.QtWidgets import QTableWidget +from helper import UsesQApplication + +class QPenTest(UsesQApplication): + + def testItemModel(self): + tv = QTableWidget() + + self.assertEqual(type(tv.model()), QAbstractTableModel) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/qtabwidget_test.py b/sources/pyside2/tests/QtWidgets/qtabwidget_test.py new file mode 100644 index 0000000..b3ce46d --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qtabwidget_test.py @@ -0,0 +1,56 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtWidgets import * +from helper import TimedQApplication + +def makeBug643(tab): + button = QPushButton('Foo') + tab.insertTab(0, button, 'Foo') + +class RemoveTabMethod(TimedQApplication): + def setUp(self): + TimedQApplication.setUp(self) + self.tab = QTabWidget() + + def tearDown(self): + del self.tab + TimedQApplication.tearDown(self) + + + def testRemoveTabPresence(self): + self.assertTrue(getattr(self.tab, 'removeTab')) + + def testInsertTab(self): + makeBug643(self.tab) + self.assertEqual(self.tab.count(), 1) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qtabwidgetclear_test.py b/sources/pyside2/tests/QtWidgets/qtabwidgetclear_test.py new file mode 100644 index 0000000..c3300fc --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qtabwidgetclear_test.py @@ -0,0 +1,63 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtWidgets import QMainWindow, QTabWidget, QTextEdit, QSplitter +from helper import UsesQApplication + +class TabWidgetClear(QMainWindow): + def __init__(self): + QMainWindow.__init__(self) + self.tabWidget = QTabWidget(self) + self.setCentralWidget(self.tabWidget) + self.editBox = QTextEdit(self) + self.tabWidget.addTab(self.getSplitter(), 'Test') + + def getSplitter(self): + splitter = QSplitter() + splitter.addWidget(self.editBox) + return splitter + + def toggle(self): + self.tabWidget.clear() + self.getSplitter() + +class TestTabWidgetClear(UsesQApplication): + + def testClear(self): + self.window = TabWidgetClear() + self.window.show() + try: + self.window.toggle() + except RuntimeError as e: + # This should never happened, PYSIDE-213 + raise e + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qtextedit_signal_test.py b/sources/pyside2/tests/QtWidgets/qtextedit_signal_test.py new file mode 100644 index 0000000..f6730a2 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qtextedit_signal_test.py @@ -0,0 +1,65 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from PySide2 import QtCore, QtWidgets +from helper import UsesQApplication + +import unittest + +class MyWindow(QtWidgets.QMainWindow): + appendText = QtCore.Signal(str) + + @QtCore.Slot() + def onButtonPressed(self): + self.appendText.emit("PySide") + + def __init__(self, parent=None): + super(MyWindow, self).__init__(parent) + + self.textEdit = QtWidgets.QTextEdit() + self.btn = QtWidgets.QPushButton("ClickMe") + self.btn.clicked.connect(self.onButtonPressed) + self.appendText.connect(self.textEdit.append) + + def start(self): + self.btn.click() + + def text(self): + return self.textEdit.toPlainText() + + +class testSignalWithCPPSlot(UsesQApplication): + + def testEmission(self): + w = MyWindow() + w.start() + self.assertEqual(w.text(), "PySide") + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/qtextedit_test.py b/sources/pyside2/tests/QtWidgets/qtextedit_test.py new file mode 100644 index 0000000..34467dd --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qtextedit_test.py @@ -0,0 +1,60 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QTextEdit and ownership problems.''' + +import unittest +from sys import getrefcount +from PySide2.QtWidgets import QTextEdit + +from helper import UsesQApplication + +class DontTouchReference(UsesQApplication): + '''Check if the QTextTable returned by QTextCursor.insertTable() is not + referenced by the QTextCursor that returns it.''' + + def setUp(self): + super(DontTouchReference, self).setUp() + self.editor = QTextEdit() + self.cursor = self.editor.textCursor() + self.table = self.cursor.insertTable(1, 1) + + def testQTextTable(self): + # methods which return QTextTable should not increment its reference + self.assertEqual(getrefcount(self.table), 2) + f = self.cursor.currentFrame() + del f + self.assertEqual(getrefcount(self.table), 2) + # destroying the cursor should not raise any "RuntimeError: internal + # C++ object already deleted." when accessing the QTextTable + del self.cursor + self.assertEqual(getrefcount(self.table), 2) + cell = self.table.cellAt(0, 0) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qtoolbar_test.py b/sources/pyside2/tests/QtWidgets/qtoolbar_test.py new file mode 100644 index 0000000..24b36e0 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qtoolbar_test.py @@ -0,0 +1,62 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QToolbar''' + +import unittest + +from PySide2.QtWidgets import QToolBar, QMainWindow, QAction + +from helper import UsesQApplication + +class AddActionText(UsesQApplication): + '''Test case for calling QToolbar.addAction passing a text''' + + def setUp(self): + #Acquire resources + super(AddActionText, self).setUp() + self.window = QMainWindow() + self.toolbar = QToolBar() + self.window.addToolBar(self.toolbar) + + def tearDown(self): + #Release resources + super(AddActionText, self).tearDown() + del self.toolbar + del self.window + + def testText(self): + #QToolBar.addAction(text) - add a QToolButton + self.toolbar.addAction('aaaa') + self.assertEqual(len(self.toolbar.actions()), 1) + action = self.toolbar.actions()[0] + self.assertTrue(isinstance(action, QAction)) + self.assertEqual(action.text(), 'aaaa') + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qtoolbox_test.py b/sources/pyside2/tests/QtWidgets/qtoolbox_test.py new file mode 100644 index 0000000..f41933c --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qtoolbox_test.py @@ -0,0 +1,59 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtGui import QIcon +from PySide2.QtWidgets import QToolBox, QWidget + +from helper import UsesQApplication + +class OwnershipControl(UsesQApplication): + + def setUp(self): + super(OwnershipControl, self).setUp() + self.toolbox = QToolBox() + + def tearDown(self): + del self.toolbox + super(OwnershipControl, self).tearDown() + + def testAddItem(self): + # Was losing ownership of the widget. + index = self.toolbox.addItem(QWidget(), 'item') + item = self.toolbox.widget(index) + self.assertTrue(isinstance(item, QWidget)) + + def testAddItemWithIcon(self): + index = self.toolbox.addItem(QWidget(), QIcon(), 'item') + item = self.toolbox.widget(index) + self.assertTrue(isinstance(item, QWidget)) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qtreeview_test.py b/sources/pyside2/tests/QtWidgets/qtreeview_test.py new file mode 100644 index 0000000..a344aef --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qtreeview_test.py @@ -0,0 +1,96 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtGui import QStandardItemModel +from PySide2.QtWidgets import (QWidget, QTreeView, QVBoxLayout, + QStyledItemDelegate, QHeaderView) +from PySide2.QtCore import Qt +from helper import UsesQApplication + +class Widget(QWidget): + def __init__(self, parent=None): + QWidget.__init__(self, parent) + self.treeView = QTreeView(self) + layout = QVBoxLayout() + layout.addWidget(self.treeView) + self.setLayout(layout) + self.treeView.setModel(QStandardItemModel()) + + self.treeView.model().setHorizontalHeaderLabels(('3', '1', '5')) + +class QWidgetTest(UsesQApplication): + + def testDelegates(self): + widget = Widget() + t = widget.treeView + + # When calling setItemDelegateForColumn using a separate variable + # for the second argument (QAbstractItemDelegate), there was no problem + # on keeping the reference to this object, since the variable was kept + # alive (case A) + # Contrary, when instantiating this argument on the function call + # Using QStyledItemDelegate inside the call the reference of the + # object was lost, causing a segfault. (case B) + + # Case A + d = QStyledItemDelegate() + # Using QStyledItemDelegate from a variable so we keep the reference alive + # and we encounter no segfault. + t.setItemDelegateForColumn(0, d) + # This raised the Segmentation Fault too, because manually destroying + # the object caused a missing refrence. + del d + + # Getting the delegates + a = t.itemDelegateForColumn(0) + self.assertIsInstance(a, QStyledItemDelegate) + + # Case B + t.setItemDelegateForColumn(1, QStyledItemDelegate()) + + # Getting the delegates + b = t.itemDelegateForColumn(1) + self.assertIsInstance(b, QStyledItemDelegate) + + # Test for Rows + t.setItemDelegateForRow(0, QStyledItemDelegate()) + self.assertIsInstance(t.itemDelegateForRow(0), QStyledItemDelegate) + + # Test for general delegate + t.setItemDelegate(QStyledItemDelegate()) + self.assertIsInstance(t.itemDelegate(), QStyledItemDelegate) + + def testHeader(self): + tree = QTreeView() + tree.setHeader(QHeaderView(Qt.Horizontal)) + self.assertIsNotNone(tree.header()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qtreewidget_test.py b/sources/pyside2/tests/QtWidgets/qtreewidget_test.py new file mode 100644 index 0000000..4afd069 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qtreewidget_test.py @@ -0,0 +1,64 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtWidgets import QTreeWidget, QTreeWidgetItem, QPushButton +from helper import UsesQApplication + +class QTreeWidgetTest(UsesQApplication): + + # PYSIDE-73: + # There was a problem when adding items to a QTreeWidget + # when the Widget was being build on the method call instead + # of as a separate variable. + # The problem was there was not ownership transfer, so the + # QTreeWidget did not own the QWidget element + def testSetItemWidget(self): + + treeWidget = QTreeWidget() + treeWidget.setColumnCount(2) + + item = QTreeWidgetItem(['text of column 0', '']) + treeWidget.insertTopLevelItem(0, item) + # Adding QPushButton inside the method + treeWidget.setItemWidget(item, 1, + QPushButton('Push button on column 1')) + + # Getting the widget back + w = treeWidget.itemWidget(treeWidget.itemAt(0,1), 1) + self.assertIsInstance(w, QPushButton) + + p = QPushButton('New independent button') + # Adding QPushButton object from variable + treeWidget.setItemWidget(item, 0, p) + w = treeWidget.itemWidget(treeWidget.itemAt(0,0), 0) + self.assertIsInstance(w, QPushButton) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qvariant_test.py b/sources/pyside2/tests/QtWidgets/qvariant_test.py new file mode 100644 index 0000000..907e6d9 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qvariant_test.py @@ -0,0 +1,76 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtWidgets import (QApplication, QComboBox, QGraphicsScene, + QGraphicsRectItem) + +from helper import UsesQApplication + +class MyDiagram(QGraphicsScene): + pass + +class MyItem(QGraphicsRectItem): + def itemChange(self, change, value): + return value; + +class Sequence(object): + # Having the __getitem__ method on a class transform the Python + # type to a PySequence. + # Before the patch: aa75437f9119d997dd290471ac3e2cc88ca88bf1 + # "Fix QVariant conversions when using PySequences" + # one could not use an object from this class, because internally + # we were requiring that the PySequence was finite. + def __getitem__(self, key): + raise IndexError() + +class QGraphicsSceneOnQVariantTest(UsesQApplication): + """Test storage ot QGraphicsScene into QVariants""" + def setUp(self): + super(QGraphicsSceneOnQVariantTest, self).setUp() + self.s = MyDiagram() + self.i = MyItem() + self.combo = QComboBox() + + def tearDown(self): + del self.s + del self.i + del self.combo + super(QGraphicsSceneOnQVariantTest, self).tearDown() + + def testIt(self): + self.s.addItem(self.i) + self.assertEqual(len(self.s.items()), 1) + + def testSequence(self): + # PYSIDE-641 + self.combo.addItem("test", userData=Sequence()) + self.assertTrue(isinstance(self.combo.itemData(0), Sequence)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/qwidget_setlayout_test.py b/sources/pyside2/tests/QtWidgets/qwidget_setlayout_test.py new file mode 100644 index 0000000..7fb17f9 --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qwidget_setlayout_test.py @@ -0,0 +1,61 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtWidgets import QWidget, QVBoxLayout, QPushButton, QApplication, QHBoxLayout +from helper import UsesQApplication + +class QWidgetTest(UsesQApplication): + + def test_setLayout(self): + layout = QVBoxLayout() + btn1 = QPushButton("button_v1") + layout.addWidget(btn1) + + btn2 = QPushButton("button_v2") + layout.addWidget(btn2) + + layout2 = QHBoxLayout() + + btn1 = QPushButton("button_h1") + layout2.addWidget(btn1) + + btn2 = QPushButton("button_h2") + layout2.addWidget(btn2) + + layout.addLayout(layout2) + + widget = QWidget() + widget.setLayout(layout) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/qwidget_test.py b/sources/pyside2/tests/QtWidgets/qwidget_test.py new file mode 100644 index 0000000..1e8387d --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/qwidget_test.py @@ -0,0 +1,55 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtWidgets import QWidget, QMainWindow +from helper import UsesQApplication + +class QWidgetInherit(QMainWindow): + def __init__(self): + QWidget.__init__(self) + +class QWidgetTest(UsesQApplication): + + def testInheritance(self): + self.assertRaises(TypeError, QWidgetInherit) + +class QWidgetVisible(UsesQApplication): + + def testBasic(self): + # Also related to bug #244, on existence of setVisible''' + widget = QWidget() + self.assertTrue(not widget.isVisible()) + widget.setVisible(True) + self.assertTrue(widget.isVisible()) + self.assertTrue(widget.winId() is not 0) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/reference_count_test.py b/sources/pyside2/tests/QtWidgets/reference_count_test.py new file mode 100644 index 0000000..836020a --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/reference_count_test.py @@ -0,0 +1,99 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for Reference count when the object is created in c++ side''' + +import unittest + +import sys +import weakref +import gc + + +from PySide2.QtCore import Qt, QPointF +from PySide2.QtGui import QPolygonF +from PySide2.QtWidgets import QApplication, QGraphicsScene, QGraphicsRectItem, QGraphicsPolygonItem, QGraphicsRectItem + +from helper import UsesQApplication + +destroyedRect = False +destroyedPol = False + +def rect_del(o): + global destroyedRect + destroyedRect = True + +def pol_del(o): + global destroyedPol + destroyedPol = True + +class ReferenceCount(UsesQApplication): + + def setUp(self): + super(ReferenceCount, self).setUp() + self.scene = QGraphicsScene() + + def tearDown(self): + super(ReferenceCount, self).tearDown() + + def beforeTest(self): + points = [QPointF(0, 0), QPointF(100, 100), QPointF(0, 100)] + pol = self.scene.addPolygon(QPolygonF(points)) + self.assertTrue(isinstance(pol, QGraphicsPolygonItem)) + self.wrp = weakref.ref(pol, pol_del) + + #refcount need be 3 because one ref for QGraphicsScene, and one to rect obj + self.assertEqual(sys.getrefcount(pol), 3) + + def testReferenceCount(self): + global destroyedRect + global destroyedPol + + self.beforeTest() + + rect = self.scene.addRect(10.0, 10.0, 10.0, 10.0) + self.assertTrue(isinstance(rect, QGraphicsRectItem)) + + self.wrr = weakref.ref(rect, rect_del) + + #refcount need be 3 because one ref for QGraphicsScene, and one to rect obj + self.assertEqual(sys.getrefcount(rect), 3) + + del rect + #not destroyed because one ref continue in QGraphicsScene + self.assertEqual(destroyedRect, False) + self.assertEqual(destroyedPol, False) + + del self.scene + + #QGraphicsScene was destroyed and this destroy internal ref to rect + self.assertEqual(destroyedRect, True) + self.assertEqual(destroyedPol, True) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWidgets/sample.png b/sources/pyside2/tests/QtWidgets/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..60450f0dcd89ce5f6ed7c362e76a0703aad7a807 GIT binary patch literal 55944 zcmV)`Kz_f8P)00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igM) z3<55&mYH+_000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}001BWNklwodfoSnAv1SG-xRw+Xw+l0TDt}DCOxbAi&*jUfg|30(~mcbB}py2cn=N*4Kd~+vAOg zt@p^|5`ZxC$>WkR^9f^tB0~@ZnR#Yx{>~DVU%$c8?Kmj(`-KsCF7Y>gwz1@4cHs8q zg2Mzx;{gDDLbl{gy)o5r!^ZD3D7Sd)0qaKr2|ZGFB3RZKtTfC%Nu20_E8xI*$@!8`MOdnEpMkmjC^yq6s{bL6pa!>)V zrz^Vbk?f@gh_4PvaswC*>J*PX5@f_4K-&9Zk3;|^UX4${M^X|oEIrnKtF;#}ER7xB=t_SepO_iYg{R5oeMtj>w9Dq9>S8*1*mr8B-p< zfGs(FLezW((-D0__SF_v9)r=A)oMgJ*fQdRLL3nIpfrF16dqk6+JL2^6p;gSR|u3+ z?tYZwFK&L$B03eOKB+E6J9U8zptXe?!4l9y=2mOr;^M{B6L_wzJHJbrSQX44Hakx?Z1rnrI+5E{Bz;pC9V?O7MvoAVfhC3p#P{1i*j>>KSIXz?PZd|@)7eui-0qdtOL9)@`epdet_VoZoIv_|kRGkrJR#2pa*5eky%c>yB_M~yQ z_5K#XmdOFq?Eybmk^>obyU9yr*khBIz|%J}D&$f~s|h_v4^-h(EsGe11OC-{&IUG7bZlxd!ZKe#QTv zOOX!PE7bz#xxc|XtnlN2AlW#;r`3dIRj{lI#$Mp$T}xgV@E*$wA3){i2Qk}fwL^Aq z$x_2>_Z|nasaaR#4xs9Yal1#V_}_K0fNWm3OzcM$rII93g)bua&b2liUh?I?AX&^&`ePhB*87UDP84|Xb7NFCc66}<_{}`wMSsXF!b+v?uLnd)satsOZ zAA5vhg#XxM9eX5k!sziM)Fi>56m%y;wgaDO*f&Rjl-2s~lZ@NESa!BsVUD~OSmCOI z&xcI1z5{R@BhoW@;N#g^RPo-nZm zbW(Ql=dr#a!=3~0eI-%pbA5mJ7H`zUGoaWbK?Qm%3c5s&neF2xk=D{jEPV{X6Uoth z%*$H4L#Z^w`cZ{EV!nDgX(Wa6>TOd}Sb&;sMNFU)2BpV#uc$Bk~krW zlM}ECVn)L@XniGH0Bc=0KonFh>C+X052eQ!)qs4EFnQpgEC7E@2RA>bs>U34H*Qha zlorh$%mUDYdb_B>3$&Qn^X7zQpVD8nWQ5%TQh$#xKGxK%9;`@jy9CJ$Fbj+eqGqDA)I`h(09yt|}sJBwpw}CC1g(Z+gLc1bFEr3TvNMu7)L`YE? zI5&VSs@lac04_w@V&XyR;i-a{E|I7hl%8YZPEXKjXk80hr+=%MN$fMBWP$J4HVh;D zNuj|=kAxl*G14+XM0ACqD}-MC_lsHzWNY?Hv0C4;d8e4?TlyRGne(Lqn1FcbKy=K+ zO|YeuCoYB6#}E2T=St+|)Jckc{`O>{`eTbb&s(-MztzM|=~8t@4uI#}23Da1^Rg
$$2elp$rRa-JTJs zgvbEiF{FqLFa-e$&w%uhcs#5c(x>wT|FER&j2Rpxn@$9WCFSUXCkIK&j&gLtEU3=f zQZR(9V6T*6yCHr#IeBgvMhqv~aKo$Fe!sn?-{U*N|9Vwz~@C#&z*(ql*=4kU3x z5ew};JgVIFMHvueiv3*|Ur7|6_J_0e34jCDX|ZtAN8T&N;2;@?0r?5f=U+VI zWdVQw=Wn_HZi$+w_@tmy{hs_ynqhqNcFX@PZB%1#rlA1V9lND3wr%4T0(y z9p5?o{aPT~Vn;EWz`bU~cNbBvE=2eALx9)=9ho< zAt-p8-Ld(8!>gCSpg+0b^B2$Aj;Bn}MUJYfrGS+K_WFm?w#8ACURQBGNHS<~TRSp0!?EqyrAS_ayy}2C)UK1EsyK0umuXL_lGrL*W3NR*mO2{a_2=2A}~tQN}?k zgaNWo)$)aH)z6QrmT@MLBvJH90H6LqWy@N#*DEV2ltc*aPDm9K3C+SG5FaY4c+~=N zzTWU*4WnU1A-bfQ)_xDd3d#v7C9tteS5rmHS=dS-_b5UF6j^7;;BZ&37nC9;1VYGC zR%=NZDiWpN$L>V!BX9~N4v1?sxeT*_BK|aRkKKYMm_PF?f-qn?NLap05z{3M;PG$% z8uR-#v(JeudtYC` zM`^&Vi0I;hlukbQjfI>mW1H)~xgMQiTMO=};ZC&5(aNif9QeApL8j$|s2m$>NfEiy zb`Tdty$MQ{2%(Qm0TIQ!lyJO7aN!R3Y}cgb%hy254WQA$%yNiB15!w{6hGdPX7%Dn z+i?1M#37+^GE(br8b`wd+9+kf?jSve1gt42;=%#ES&se`6ALQG#8Ip$O3lW1%LNzz zMoWr*`kILk#bd!h8+-inuRcU(&-hU4?{~I%0Au)kGIRhQO>5m6BpV0XrX0}HV$NZ; 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 and quit + super(MySpinButton, self).__init__() + + if app is None: + app = QApplication([]) + + self.app = app + self.max_runs = max_runs + self.runs = 0 + + def timerEvent(self, event): + #Timer event method + self.runs += 1 + + self.setValue(self.runs) + + if self.runs == self.max_runs: + self.app.quit() + + if not isinstance(event, QTimerEvent): + raise TypeError('Invalid event type. Must be TimerEvent') + +class TimerEventTest(UsesQApplication): + '''Test case for running QObject.timerEvent from inherited class''' + + qapplication = True + + def setUp(self): + #Acquire resources + super(TimerEventTest, self).setUp() + self.widget = MySpinButton(app=self.app) + + def tearDown(self): + #Release resources + del self.widget + super(TimerEventTest, self).tearDown() + + def testMethod(self): + #QWidget.timerEvent overrinding (protected inherited) + timer_id = self.widget.startTimer(0) + + self.app.exec_() + + self.widget.killTimer(timer_id) + + self.assertTrue(self.widget.runs >= self.widget.max_runs) + + +if __name__ == '__main__': + unittest.main() + #app = QApplication([]) + #widget = MySpinButton(app=app) + #widget.startTimer(500) + #widget.show() + #app.exec_() + diff --git a/sources/pyside2/tests/QtWidgets/virtual_pure_override_test.py b/sources/pyside2/tests/QtWidgets/virtual_pure_override_test.py new file mode 100644 index 0000000..756915d --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/virtual_pure_override_test.py @@ -0,0 +1,77 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtWidgets import QGraphicsScene, QGraphicsRectItem, QGraphicsView, QApplication +from PySide2.QtGui import QBrush, QColor +from PySide2.QtCore import QTimer +from helper import UsesQApplication + +qgraphics_item_painted = False + +class RoundRectItem(QGraphicsRectItem): + + def __init__(self, x, y, w, h): + QGraphicsRectItem.__init__(self, x, y, w, h) + + def paint(self, painter, qstyleoptiongraphicsitem, qwidget): + global qgraphics_item_painted + qgraphics_item_painted = True + + +class QGraphicsItemTest(UsesQApplication): + + def createRoundRect(self, scene): + item = RoundRectItem(10, 10, 100, 100) + item.setBrush(QBrush(QColor(255, 0, 0))) + scene.addItem(item) + return item + + def quit_app(self): + self.app.quit() + + def test_setParentItem(self): + global qgraphics_item_painted + + scene = QGraphicsScene() + scene.addText("test") + view = QGraphicsView(scene) + + rect = self.createRoundRect(scene) + view.show() + QTimer.singleShot(1000, self.quit_app) + self.app.exec_() + self.assertTrue(qgraphics_item_painted) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtWidgets/wrong_return_test.py b/sources/pyside2/tests/QtWidgets/wrong_return_test.py new file mode 100644 index 0000000..f4f036c --- /dev/null +++ b/sources/pyside2/tests/QtWidgets/wrong_return_test.py @@ -0,0 +1,58 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for Virtual functions with wrong return type''' + +import unittest +import py3kcompat as py3k +from PySide2 import QtWidgets +from helper import UsesQApplication + +import warnings +warnings.simplefilter('error') + + +class MyWidget(QtWidgets.QWidget): + def __init__(self, parent=None): + super(MyWidget, self).__init__(parent) + + def sizeHint(self): + pass + +class testCase(UsesQApplication): + + def testVirtualReturn(self): + w = MyWidget() + if py3k.IS_PY3K: + self.assertWarns(RuntimeWarning, w.show) + else: + self.assertRaises(RuntimeWarning, w.show) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/QtWinExtras/CMakeLists.txt b/sources/pyside2/tests/QtWinExtras/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/QtWinExtras/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/QtX11Extras/CMakeLists.txt b/sources/pyside2/tests/QtX11Extras/CMakeLists.txt new file mode 100644 index 0000000..2f7cb08 --- /dev/null +++ b/sources/pyside2/tests/QtX11Extras/CMakeLists.txt @@ -0,0 +1 @@ +# Please add some tests, here diff --git a/sources/pyside2/tests/QtXml/CMakeLists.txt b/sources/pyside2/tests/QtXml/CMakeLists.txt new file mode 100644 index 0000000..2c21bf8 --- /dev/null +++ b/sources/pyside2/tests/QtXml/CMakeLists.txt @@ -0,0 +1,2 @@ +PYSIDE_TEST(qdomdocument_test.py) +PYSIDE_TEST(qxmlsimplereader_test.py) diff --git a/sources/pyside2/tests/QtXml/qdomdocument_test.py b/sources/pyside2/tests/QtXml/qdomdocument_test.py new file mode 100644 index 0000000..63f9fd4 --- /dev/null +++ b/sources/pyside2/tests/QtXml/qdomdocument_test.py @@ -0,0 +1,98 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QByteArray +from PySide2.QtXml import QDomDocument, QDomElement +import py3kcompat as py3k + +class QDomDocumentTest(unittest.TestCase): + + def setUp(self): + self.dom = QDomDocument() + + self.goodXmlData = QByteArray(py3k.b(''' + + + + + ''')) + + self.badXmlData = QByteArray(py3k.b(''' + + + + ''')) + + def tearDown(self): + del self.dom + del self.goodXmlData + del self.badXmlData + + def testQDomDocumentSetContentWithBadXmlData(self): + '''Sets invalid xml as the QDomDocument contents.''' + ok, errorStr, errorLine, errorColumn = self.dom.setContent(self.badXmlData, True) + self.assertFalse(ok) + self.assertEqual(errorStr, 'tag mismatch') + self.assertEqual(errorLine, 4) + self.assertEqual(errorColumn, 21) + + def testQDomDocumentSetContentWithGoodXmlData(self): + '''Sets valid xml as the QDomDocument contents.''' + ok, errorStr, errorLine, errorColumn = self.dom.setContent(self.goodXmlData, True) + self.assertTrue(ok) + self.assertEqual(errorStr, '') + self.assertEqual(errorLine, 0) + self.assertEqual(errorColumn, 0) + + def testQDomDocumentData(self): + '''Checks the QDomDocument elements for the valid xml contents.''' + + def checkAttribute(element, attribute, value): + self.assertTrue(isinstance(root, QDomElement)) + self.assertFalse(element.isNull()) + self.assertTrue(element.hasAttribute(attribute)) + self.assertEqual(element.attribute(attribute), value) + + ok, errorStr, errorLine, errorColumn = self.dom.setContent(self.goodXmlData, True) + root = self.dom.documentElement() + self.assertEqual(root.tagName(), 'typesystem') + checkAttribute(root, 'package', 'PySide2.QtXml') + + child = root.firstChildElement('value-type') + checkAttribute(child, 'name', 'QDomDocument') + + child = child.nextSiblingElement('value-type') + checkAttribute(child, 'name', 'QDomElement') + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtXml/qxmlsimplereader_test.py b/sources/pyside2/tests/QtXml/qxmlsimplereader_test.py new file mode 100644 index 0000000..7704953 --- /dev/null +++ b/sources/pyside2/tests/QtXml/qxmlsimplereader_test.py @@ -0,0 +1,63 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtXml import QXmlSimpleReader + +class QXmlSimpleReaderTest(unittest.TestCase): + + def testQXmlSimpleReaderInstatiation(self): + '''QXmlSimpleReader must be a concrete class not an abstract one.''' + reader = QXmlSimpleReader() + + def testQXmlSimpleReaderFeatures(self): + '''Calls the QXmlSimpleReader.features method. The features checked + (at least the first two) can be found in the QXmlSimpleReader documentation: + http://qt.nokia.com/doc/4.6/qxmlsimplereader.html#setFeature + ''' + reader = QXmlSimpleReader() + hasFeature, ok = reader.feature('http://xml.org/sax/features/namespaces') + self.assertEqual((hasFeature, ok), (True, True)) + + hasFeature, ok = reader.feature('http://xml.org/sax/features/namespace-prefixes') + self.assertEqual((hasFeature, ok), (False, True)) + + hasFeature, ok = reader.feature('foobar') + self.assertEqual((hasFeature, ok), (False, False)) + + def testQXmlSimpleReaderProperty(self): + '''Tries to get a non existent property.''' + reader = QXmlSimpleReader() + prop, ok = reader.property('foo') + self.assertEqual((prop, ok), (None, False)) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/QtXmlPatterns/CMakeLists.txt b/sources/pyside2/tests/QtXmlPatterns/CMakeLists.txt new file mode 100644 index 0000000..7f570f1 --- /dev/null +++ b/sources/pyside2/tests/QtXmlPatterns/CMakeLists.txt @@ -0,0 +1 @@ +PYSIDE_TEST(import_test.py) diff --git a/sources/pyside2/tests/QtXmlPatterns/import_test.py b/sources/pyside2/tests/QtXmlPatterns/import_test.py new file mode 100644 index 0000000..bbbb7da --- /dev/null +++ b/sources/pyside2/tests/QtXmlPatterns/import_test.py @@ -0,0 +1,59 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import * +from PySide2.QtXmlPatterns import QXmlSchema +from helper import UsesQCoreApplication +import py3kcompat as py3k + +class QXmlPatternsTest(UsesQCoreApplication): + + def testSchema(self): + data = QByteArray(py3k.b(''' + + ''')) + + buf = QBuffer(data) + buf.open(QIODevice.ReadOnly) + + schema = QXmlSchema() + schema.load(buf) + self.assertTrue(schema.isValid()) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/mac/CMakeLists.txt b/sources/pyside2/tests/mac/CMakeLists.txt new file mode 100644 index 0000000..e1eb1a2 --- /dev/null +++ b/sources/pyside2/tests/mac/CMakeLists.txt @@ -0,0 +1 @@ +PYSIDE_TEST(qmacstyle_test.py) diff --git a/sources/pyside2/tests/mac/qmacstyle_test.py b/sources/pyside2/tests/mac/qmacstyle_test.py new file mode 100644 index 0000000..690758f --- /dev/null +++ b/sources/pyside2/tests/mac/qmacstyle_test.py @@ -0,0 +1,47 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Qt5: this is gone: from PySide2.QtGui import QMacStyle +from PySide2.QtWidgets import QApplication, QLabel, QStyleFactory +from PySide2.QtCore import QObject + +import unittest + +from helper import UsesQApplication + +class QMacStyleTest(UsesQApplication): + def setUp(self): + UsesQApplication.setUp(self) + self.QMacStyle = type(QStyleFactory.create('Macintosh')) + + def testWidgetStyle(self): + w = QLabel('Hello') + self.assertTrue(isinstance(w.style(), self.QMacStyle)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/manually/README.txt b/sources/pyside2/tests/manually/README.txt new file mode 100644 index 0000000..da20e38 --- /dev/null +++ b/sources/pyside2/tests/manually/README.txt @@ -0,0 +1,5 @@ +To run these tests is necessary some manuall input (most of then not supported by QTest[1]), +because of that this is not part of automatic test context. + + +[1]http://bugreports.qt.nokia.com/browse/QTBUG-13397 diff --git a/sources/pyside2/tests/manually/bug_841.py b/sources/pyside2/tests/manually/bug_841.py new file mode 100644 index 0000000..6a3af94 --- /dev/null +++ b/sources/pyside2/tests/manually/bug_841.py @@ -0,0 +1,79 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import sys + +from PySide2.QtGui import QStandardItem, QStandardItemModel +from PySide2.QtWidgets import QMainWindow, QTreeView, QAbstractItemView, QApplication, QMessageBox + +class Item(QStandardItem): + def __init__(self, text): + super(Item, self).__init__() + self.setText(text) + self.setDragEnabled(True) + self.setDropEnabled(True) + + def clone(self): + ret = Item(self.text()) + return ret + +class Project(QStandardItemModel): + def __init__(self): + super(Project, self).__init__() + self.setItemPrototype(Item("Prototype")) + # add some items so we have stuff to move around + self.appendRow(Item("ABC")) + self.appendRow(Item("DEF")) + self.appendRow(Item("GHI")) + +class MainWindow(QMainWindow): + def __init__(self): + super(MainWindow, self).__init__() + + self.model = Project() + self.view = QTreeView(self) + self.view.setModel(self.model) + self.view.setDragEnabled(True) + self.view.setDragDropMode(QAbstractItemView.InternalMove) + self.setCentralWidget(self.view) + + def mousePressEvent(self, e): + print(e.x(), e.y()) + return QMainWindow.mousePressEvent(self, e) + +def main(): + app = QApplication(sys.argv) + w = MainWindow() + w.show() + QMessageBox.information(None, "Info", "Just drag and drop the items.") + sys.exit(app.exec_()) + +if __name__ == "__main__": + main() diff --git a/sources/pyside2/tests/pysidetest/CMakeLists.txt b/sources/pyside2/tests/pysidetest/CMakeLists.txt new file mode 100644 index 0000000..c6d3bb1 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/CMakeLists.txt @@ -0,0 +1,144 @@ +project(pysidetest) +project(testbinding) + +cmake_minimum_required(VERSION 3.1) + +# On Windows, don't link to qtmain.lib for executables automatically. +cmake_policy(SET CMP0020 OLD) + +set(QT_USE_QTCORE 1) +# no more supported: include(${QT_USE_FILE}) +add_definitions(${Qt5Core_DEFINITIONS}) +add_definitions(-DQT_SHARED) +add_definitions(-DRXX_ALLOCATOR_INIT_0) + +find_package(Qt5Widgets) + +set(pysidetest_SRC +testobject.cpp +testview.cpp +hiddenobject.cpp +) + +set(pysidetest_MOC_HEADERS +testobject.h +testview.h +hiddenobject.h +) + +qt5_wrap_cpp(pysidetest_MOC_SRC ${pysidetest_MOC_HEADERS}) + +set(testbinding_SRC +${CMAKE_CURRENT_BINARY_DIR}/testbinding/testobject_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/testbinding/intvalue_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/testbinding/pysidecpp_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/testbinding/pysidecpp_testobjectwithnamespace_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/testbinding/pysidecpp2_testobjectwithoutnamespace_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/testbinding/testview_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/testbinding/testbinding_module_wrapper.cpp +) + +# Get per module include dirs. +# There are usually 3 paths there: +# ./qt/include/; ./qt/include/QtCore ; ./qt/mkspecs/linux-g++ +# on framework build they are: +# ./qt/lib/QtCore.framework; ./qt/lib/QtCore.framework/Headers ; ./qt/mkspecs/macx-clang +# Thus we use the second direct path, which contains the actual header files. + +list(GET Qt5Core_INCLUDE_DIRS 1 Qt5Core_DIRECT_INCLUDE_DIR) +list(GET Qt5Gui_INCLUDE_DIRS 1 Qt5Gui_DIRECT_INCLUDE_DIR) +list(GET Qt5Widgets_INCLUDE_DIRS 1 Qt5Widgets_DIRECT_INCLUDE_DIR) + +# Adjust include headers paths for frameworks. +set(shiboken_framework_include_dirs_option "") +if(CMAKE_HOST_APPLE AND QtCore_is_framework) + set(shiboken_framework_include_dirs "${QT_FRAMEWORK_INCLUDE_DIR}") + set(shiboken_framework_include_dirs_option "--framework-include-paths=${shiboken_framework_include_dirs}") +endif() + +make_path(testbinding_include_dirs ${pyside2_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/../../PySide2 + ${CMAKE_CURRENT_SOURCE_DIR}/../../libpyside + ${QT_INCLUDE_DIR} + ${Qt5Core_DIRECT_INCLUDE_DIR} + ${Qt5Gui_DIRECT_INCLUDE_DIR} + ${Qt5Widgets_DIRECT_INCLUDE_DIR} + ) + +make_path(testbinding_typesystem_path ${pyside2_SOURCE_DIR} + ${pyside2_BINARY_DIR}) + +add_custom_command(OUTPUT ${testbinding_SRC} +COMMAND ${SHIBOKEN_BINARY} ${GENERATOR_EXTRA_FLAGS} + ${CMAKE_CURRENT_SOURCE_DIR}/pysidetest_global.h + --include-paths=${testbinding_include_dirs} + ${shiboken_framework_include_dirs_option} + --typesystem-paths=${testbinding_typesystem_path} + --output-directory=${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_pysidetest.xml + --api-version=${SUPPORTED_QT_VERSION} +WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +COMMENT "Running generator for test binding..." +) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Gui_INCLUDE_DIRS} + ${Qt5Widgets_INCLUDE_DIRS} + ${SHIBOKEN_INCLUDE_DIR} + ${pyside2_SOURCE_DIR} + ${QtCore_GEN_DIR} + ${QtGui_GEN_DIR} + ${QtWidgets_GEN_DIR} + ${libpyside_SOURCE_DIR} + ${SHIBOKEN_PYTHON_INCLUDE_DIR}) + +add_library(pysidetest SHARED ${pysidetest_SRC} ${pysidetest_MOC_SRC}) +target_link_libraries(pysidetest + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ) + +add_library(testbinding MODULE ${testbinding_SRC}) +set_property(TARGET testbinding PROPERTY PREFIX "") +set_property(TARGET testbinding PROPERTY OUTPUT_NAME "testbinding${PYTHON_EXTENSION_SUFFIX}") +if(WIN32) + set_property(TARGET testbinding PROPERTY SUFFIX ".pyd") +endif() +target_link_libraries(testbinding + pysidetest + pyside2 + ${PYTHON_LIBRARIES} + ${SHIBOKEN_LIBRARY} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + ${Qt5Widgets_LIBRARIES} + ${SBK_PYTHON_LIBRARIES}) + +add_dependencies(testbinding pyside2 QtCore QtGui QtWidgets pysidetest) + +PYSIDE_TEST(decoratedslot_test.py) +# Will always crash when built against Qt 5.6, no point in running it. +if (Qt5Core_VERSION VERSION_GREATER 5.7.0) + PYSIDE_TEST(delegatecreateseditor_test.py) +endif() +PYSIDE_TEST(enum_test.py) +PYSIDE_TEST(homonymoussignalandmethod_test.py) +PYSIDE_TEST(list_signal_test.py) +PYSIDE_TEST(modelview_test.py) +PYSIDE_TEST(new_inherited_functions_test.py) +PYSIDE_TEST(notify_id.py) +PYSIDE_TEST(qvariant_test.py) +PYSIDE_TEST(signalandnamespace_test.py) +PYSIDE_TEST(signalwithdefaultvalue_test.py) +PYSIDE_TEST(signalemissionfrompython_test.py) +PYSIDE_TEST(version_test.py) +PYSIDE_TEST(typedef_signal_test.py) +PYSIDE_TEST(bug_1016.py) +PYSIDE_TEST(mixin_signal_slots_test.py) +PYSIDE_TEST(signal_slot_warning.py) +PYSIDE_TEST(all_modules_load_test.py) +PYSIDE_TEST(qapp_like_a_macro_test.py) diff --git a/sources/pyside2/tests/pysidetest/all_modules_load_test.py b/sources/pyside2/tests/pysidetest/all_modules_load_test.py new file mode 100644 index 0000000..e802685 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/all_modules_load_test.py @@ -0,0 +1,44 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import PySide2 + +# Note: +# "from PySide2 import *" can only be used at module level. +# It is also really not recommended to use. But for testing, +# the "__all__" variable is a great feature! + +class AllModulesImportTest(unittest.TestCase): + def testAllModulesCanImport(self): + # would also work: exec("from PySide2 import *") + for name in PySide2.__all__: + exec("import PySide2.{}".format(name)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/pysidetest/bug_1016.py b/sources/pyside2/tests/pysidetest/bug_1016.py new file mode 100644 index 0000000..c2b7093 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/bug_1016.py @@ -0,0 +1,40 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from testbinding import * +import unittest + +class TestBug1016 (unittest.TestCase): + + def testIt(self): + obj = getHiddenObject() + self.assertEqual(obj.callMe(), None) + self.assertTrue(obj.wasCalled()) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/pysidetest/curr_errors.txt b/sources/pyside2/tests/pysidetest/curr_errors.txt new file mode 100644 index 0000000..83b6e62 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/curr_errors.txt @@ -0,0 +1,12 @@ +Generating class model... [OK] +Generating enum model... [OK] +Generating namespace model... [OK] +Resolving typedefs... [OK] +Fixing class inheritance... [OK] +Detecting inconsistencies in class model... [OK] +[OK] + type 'QPyTextObject' is specified in typesystem, but not defined. This could potentially lead to compilation errors. + + + +Done, 1 warnings (1051 known issues) diff --git a/sources/pyside2/tests/pysidetest/decoratedslot_test.py b/sources/pyside2/tests/pysidetest/decoratedslot_test.py new file mode 100644 index 0000000..47878ed --- /dev/null +++ b/sources/pyside2/tests/pysidetest/decoratedslot_test.py @@ -0,0 +1,67 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QObject +from testbinding import TestObject + +class Receiver(QObject): + def __init__(self): + QObject.__init__(self) + self.called = False + + def ReceiverDecorator(func): + def decoratedFunction(self, *args, **kw): + func(self, *args, **kw) + return decoratedFunction + + # This method with the same name of the internal decorated function + # is here to test the binding capabilities. + def decoratedFunction(self): + pass + + @ReceiverDecorator + def slot(self): + self.called = True + + +class DecoratedSlotTest(unittest.TestCase): + + def testCallingOfDecoratedSlot(self): + obj = TestObject(0) + receiver = Receiver() + obj.staticMethodDouble.connect(receiver.slot) + obj.emitStaticMethodDoubleSignal() + self.assertTrue(receiver.called) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/pysidetest/delegatecreateseditor_test.py b/sources/pyside2/tests/pysidetest/delegatecreateseditor_test.py new file mode 100644 index 0000000..1d5a591 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/delegatecreateseditor_test.py @@ -0,0 +1,83 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from helper import UsesQApplication + +from testbinding import TestView +from PySide2.QtCore import Qt +from PySide2.QtWidgets import QAbstractItemDelegate, QComboBox + +id_text = 'This is me' + +class DelegateDoesntKeepReferenceToEditor(QAbstractItemDelegate): + def createEditor(self, parent, option, index): + comboBox = QComboBox(parent) + comboBox.addItem(id_text) + return comboBox + + +class DelegateKeepsReferenceToEditor(QAbstractItemDelegate): + def __init__(self, parent=None): + QAbstractItemDelegate.__init__(self, parent) + self.comboBox = QComboBox() + self.comboBox.addItem(id_text) + + def createEditor(self, parent, option, index): + self.comboBox.setParent(parent) + return self.comboBox + + +class EditorCreatedByDelegateTest(UsesQApplication): + + def testDelegateDoesntKeepReferenceToEditor(self): + view = TestView(None) + delegate = DelegateDoesntKeepReferenceToEditor() + view.setItemDelegate(delegate) + editor = view.getEditorWidgetFromItemDelegate() + self.assertEqual(type(editor), QComboBox) + self.assertEqual(editor.count(), 1) + self.assertEqual(editor.itemData(0, Qt.DisplayRole), id_text) + editor.metaObject() + + def testDelegateKeepsReferenceToEditor(self): + view = TestView(None) + delegate = DelegateKeepsReferenceToEditor() + view.setItemDelegate(delegate) + editor = view.getEditorWidgetFromItemDelegate() + self.assertEqual(type(editor), QComboBox) + self.assertEqual(editor.count(), 1) + self.assertEqual(editor.itemData(0, Qt.DisplayRole), id_text) + editor.metaObject() + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/pysidetest/enum_test.py b/sources/pyside2/tests/pysidetest/enum_test.py new file mode 100644 index 0000000..428e087 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/enum_test.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from testbinding import Enum1, TestObjectWithoutNamespace + +class ListConnectionTest(unittest.TestCase): + + def testEnumVisibility(self): + self.assertEqual(Enum1.Option1, 1) + self.assertEqual(Enum1.Option2, 2) + self.assertEqual(TestObjectWithoutNamespace.Enum2.Option3, 3) + self.assertEqual(TestObjectWithoutNamespace.Enum2.Option4, 4) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/pysidetest/hiddenobject.cpp b/sources/pyside2/tests/pysidetest/hiddenobject.cpp new file mode 100644 index 0000000..24ef290 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/hiddenobject.cpp @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "hiddenobject.h" + +void HiddenObject::callMe() +{ + m_called = true; +} + +bool HiddenObject::wasCalled() +{ + return m_called; +} + +QObject* getHiddenObject() +{ + return new HiddenObject(); +} diff --git a/sources/pyside2/tests/pysidetest/hiddenobject.h b/sources/pyside2/tests/pysidetest/hiddenobject.h new file mode 100644 index 0000000..ffa8d61 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/hiddenobject.h @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef HIDDENOBJECT_H +#define HIDDENOBJECT_H + +#ifdef pysidetest_EXPORTS +#define PYSIDE_EXPORTS 1 +#endif +#include "pysidemacros.h" +#include + +// This class shouldn't be exported! +class HiddenObject : public QObject +{ + Q_OBJECT +public: + HiddenObject() : m_called(false) {} + Q_INVOKABLE void callMe(); +public Q_SLOTS: + bool wasCalled(); +private: + bool m_called; +}; + +// Return a instance of HiddenObject +PYSIDE_API QObject* getHiddenObject(); + + +#endif diff --git a/sources/pyside2/tests/pysidetest/homonymoussignalandmethod_test.py b/sources/pyside2/tests/pysidetest/homonymoussignalandmethod_test.py new file mode 100644 index 0000000..906d0dd --- /dev/null +++ b/sources/pyside2/tests/pysidetest/homonymoussignalandmethod_test.py @@ -0,0 +1,81 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from testbinding import TestObject + +'''Tests the behaviour of homonymous signals and slots.''' + +class HomonymousSignalAndMethodTest(unittest.TestCase): + + def setUp(self): + self.value = 123 + self.called = False + self.obj = TestObject(self.value) + + def tearDown(self): + del self.value + del self.called + del self.obj + + def testIdValueSignalEmission(self): + def callback(idValue): + self.assertEqual(idValue, self.value) + self.obj.idValue.connect(callback) + self.obj.emitIdValueSignal() + + def testStaticMethodDoubleSignalEmission(self): + def callback(): + self.called = True + self.obj.staticMethodDouble.connect(callback) + self.obj.emitStaticMethodDoubleSignal() + self.assertTrue(self.called) + + def testSignalNotCallable(self): + self.assertRaises(TypeError, self.obj.justASignal) + + def testCallingInstanceMethodWithArguments(self): + self.assertRaises(TypeError, TestObject.idValue, 1) + + def testCallingInstanceMethodWithoutArguments(self): + self.assertRaises(TypeError, TestObject.idValue) + + def testHomonymousSignalAndMethod(self): + self.assertEqual(self.obj.idValue(), self.value) + + def testHomonymousSignalAndStaticMethod(self): + self.assertEqual(TestObject.staticMethodDouble(3), 6) + + def testHomonymousSignalAndStaticMethodFromInstance(self): + self.assertEqual(self.obj.staticMethodDouble(4), 8) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/pysidetest/list_signal_test.py b/sources/pyside2/tests/pysidetest/list_signal_test.py new file mode 100644 index 0000000..a438f0c --- /dev/null +++ b/sources/pyside2/tests/pysidetest/list_signal_test.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from testbinding import TestObject +from PySide2.QtCore import QObject + +class ListConnectionTest(unittest.TestCase): + + def childrenChanged(self, children): + self._child = children[0] + + def testConnection(self): + o = TestObject(0) + c = QObject() + c.setObjectName("child") + self._child = None + o.childrenChanged.connect(self.childrenChanged) + o.addChild(c) + self.assertEqual(self._child.objectName(), "child") + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/pysidetest/mixin_signal_slots_test.py b/sources/pyside2/tests/pysidetest/mixin_signal_slots_test.py new file mode 100644 index 0000000..44bb33b --- /dev/null +++ b/sources/pyside2/tests/pysidetest/mixin_signal_slots_test.py @@ -0,0 +1,216 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' PYSIDE-315: https://bugreports.qt.io/browse/PYSIDE-315 + Test that all signals and slots of a class (including any mixin classes) + are registered at type parsing time. Also test that the signal and slot + indices do not change after signal connection or emission. ''' + +import unittest +from PySide2 import QtCore + +class Mixin(object): + mixinSignal = QtCore.Signal() + def __init__(self, *args, **kwargs): + super(Mixin,self).__init__(*args, **kwargs) + +class MixinTwo(Mixin): + mixinTwoSignal = QtCore.Signal() + + def __init__(self, *args, **kwargs): + super(MixinTwo,self).__init__(*args, **kwargs) + self.mixinTwoSlotCalled = False + + @QtCore.Slot() + def mixinTwoSlot(self): + self.mixinTwoSlotCalled = True + +class MixinThree(object): + mixinThreeSignal = QtCore.Signal() + + def __init__(self, *args, **kwargs): + super(MixinThree,self).__init__(*args, **kwargs) + self.mixinThreeSlotCalled = False + + @QtCore.Slot() + def mixinThreeSlot(self): + self.mixinThreeSlotCalled = True + +class Derived(Mixin, QtCore.QObject): + derivedSignal = QtCore.Signal(str) + + def __init__(self): + super(Derived,self).__init__() + self.derivedSlotCalled = False + self.derivedSlotString = '' + + @QtCore.Slot(str) + def derivedSlot(self, theString): + self.derivedSlotCalled = True + self.derivedSlotString = theString + +class MultipleDerived(MixinTwo, MixinThree, Mixin, QtCore.QObject): + derivedSignal = QtCore.Signal(str) + + def __init__(self): + super(MultipleDerived,self).__init__() + self.derivedSlotCalled = False + self.derivedSlotString = '' + + @QtCore.Slot(str) + def derivedSlot(self, theString): + self.derivedSlotCalled = True + self.derivedSlotString = theString + + +class MixinTest(unittest.TestCase): + def testMixinSignalSlotRegistration(self): + obj = Derived() + m = obj.metaObject() + + # Should contain 2 signals and 1 slot immediately after type parsing + self.assertEqual(m.methodCount() - m.methodOffset(), 3) + + # Save method indices to check that they do not change + methodIndices = {} + for i in range(m.methodOffset(), m.methodCount()): + signature = m.method(i).methodSignature() + methodIndices[signature] = i + + # Check derivedSignal emission + obj.derivedSignal.connect(obj.derivedSlot) + obj.derivedSignal.emit('emit1') + self.assertTrue(obj.derivedSlotCalled) + obj.derivedSlotCalled = False + + # Check derivedSignal emission after mixingSignal connection + self.outsideSlotCalled = False + @QtCore.Slot() + def outsideSlot(): + self.outsideSlotCalled = True + + obj.mixinSignal.connect(outsideSlot) + obj.derivedSignal.emit('emit2') + self.assertTrue(obj.derivedSlotCalled) + self.assertFalse(self.outsideSlotCalled) + obj.derivedSlotCalled = False + + # Check mixinSignal emission + obj.mixinSignal.emit() + self.assertTrue(self.outsideSlotCalled) + self.assertFalse(obj.derivedSlotCalled) + self.outsideSlotCalled = False + + # Check that method indices haven't changed. + # Make sure to requery for the meta object, to check that a new one was not + # created as a child of the old one. + m = obj.metaObject() + self.assertEqual(m.methodCount() - m.methodOffset(), 3) + for i in range(m.methodOffset(), m.methodCount()): + signature = m.method(i).methodSignature() + self.assertEqual(methodIndices[signature], i) + + + def testMixinSignalSlotRegistrationWithMultipleInheritance(self): + obj = MultipleDerived() + m = obj.metaObject() + + # Should contain 4 signals and 3 slots immediately after type parsing + self.assertEqual(m.methodCount() - m.methodOffset(), 7) + + # Save method indices to check that they do not change + methodIndices = {} + for i in range(m.methodOffset(), m.methodCount()): + signature = m.method(i).methodSignature() + methodIndices[signature] = i + + # Check derivedSignal emission + obj.derivedSignal.connect(obj.derivedSlot) + obj.derivedSignal.emit('emit1') + self.assertTrue(obj.derivedSlotCalled) + self.assertFalse(obj.mixinTwoSlotCalled) + self.assertFalse(obj.mixinThreeSlotCalled) + obj.derivedSlotCalled = False + + # Check derivedSignal emission after mixinThreeSignal connection + self.outsideSlotCalled = False + @QtCore.Slot() + def outsideSlot(): + self.outsideSlotCalled = True + + obj.mixinThreeSignal.connect(obj.mixinThreeSlot) + obj.mixinThreeSignal.connect(outsideSlot) + obj.derivedSignal.emit('emit2') + self.assertTrue(obj.derivedSlotCalled) + self.assertFalse(obj.mixinTwoSlotCalled) + self.assertFalse(obj.mixinThreeSlotCalled) + self.assertFalse(self.outsideSlotCalled) + obj.derivedSlotCalled = False + + # Check mixinThreeSignal emission + obj.mixinThreeSignal.emit() + self.assertTrue(self.outsideSlotCalled) + self.assertTrue(obj.mixinThreeSlotCalled) + self.assertFalse(obj.derivedSlotCalled) + self.assertFalse(obj.mixinTwoSlotCalled) + self.outsideSlotCalled = False + obj.mixinThreeSlotCalled = False + + # Check mixinTwoSignal emission + obj.mixinTwoSignal.connect(obj.mixinTwoSlot) + obj.mixinTwoSignal.emit() + self.assertTrue(obj.mixinTwoSlotCalled) + self.assertFalse(obj.mixinThreeSlotCalled) + self.assertFalse(obj.derivedSlotCalled) + self.assertFalse(self.outsideSlotCalled) + obj.mixinTwoSlotCalled = False + + # Check mixinSignal emission + obj.mixinSignal.connect(outsideSlot) + obj.mixinSignal.emit() + self.assertTrue(self.outsideSlotCalled) + self.assertFalse(obj.mixinTwoSlotCalled) + self.assertFalse(obj.mixinThreeSlotCalled) + self.assertFalse(obj.derivedSlotCalled) + self.outsideSlotCalled = False + + # Check that method indices haven't changed. + # Make sure to requery for the meta object, to check that a new one was not + # created as a child of the old one. + m = obj.metaObject() + self.assertEqual(m.methodCount() - m.methodOffset(), 7) + for i in range(m.methodOffset(), m.methodCount()): + signature = m.method(i).methodSignature() + self.assertEqual(methodIndices[signature], i) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/pysidetest/modelview_test.py b/sources/pyside2/tests/pysidetest/modelview_test.py new file mode 100644 index 0000000..a0f723c --- /dev/null +++ b/sources/pyside2/tests/pysidetest/modelview_test.py @@ -0,0 +1,99 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import py3kcompat as py3k +from testbinding import TestView +from PySide2.QtCore import QAbstractListModel, QObject, QModelIndex + +'''Tests model/view relationship.''' + +object_name = 'test object' + +class MyObject(QObject): + pass + +class ListModelKeepsReference(QAbstractListModel): + def __init__(self, parent=None): + QAbstractListModel.__init__(self, parent) + self.obj = MyObject() + self.obj.setObjectName(object_name) + + def rowCount(self, parent=QModelIndex()): + return 1 + + def data(self, index, role): + return self.obj + +class ListModelDoesntKeepsReference(QAbstractListModel): + def rowCount(self, parent=QModelIndex()): + return 1 + + def data(self, index, role): + obj = MyObject() + obj.setObjectName(object_name) + return obj + +class ListModelThatReturnsString(QAbstractListModel): + def rowCount(self, parent=QModelIndex()): + return 1 + + def data(self, index, role): + self.obj = 'string' + return self.obj + + +class ModelViewTest(unittest.TestCase): + + def testListModelDoesntKeepsReference(self): + model = ListModelDoesntKeepsReference() + view = TestView(model) + obj = view.getData() + self.assertEqual(type(obj), MyObject) + self.assertEqual(obj.objectName(), object_name) + obj.metaObject() + + def testListModelKeepsReference(self): + model = ListModelKeepsReference() + view = TestView(model) + obj = view.getData() + self.assertEqual(type(obj), MyObject) + self.assertEqual(obj.objectName(), object_name) + + def testListModelThatReturnsString(self): + model = ListModelThatReturnsString() + view = TestView(model) + obj = view.getData() + self.assertEqual(type(obj), py3k.unicode) + self.assertEqual(obj, 'string') + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/pysidetest/new_inherited_functions_test.py b/sources/pyside2/tests/pysidetest/new_inherited_functions_test.py new file mode 100644 index 0000000..960f675 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/new_inherited_functions_test.py @@ -0,0 +1,215 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import sys +import os +import unittest + +import PySide2.QtCore + +# This test tests the existence and callability of the newly existing functions, +# after the inheritance was made complete in the course of PYSIDE-331. + +def warn_essential(modname): + print(80 * "*") + print("*** Warning: '{}' is an essential module! Are you sure to skip it?" + .format(modname)) + print(80 * "*") + +new_functions = """ + PySide2.QtCore.QAbstractItemModel().parent() + PySide2.QtCore.QAbstractListModel().parent() + PySide2.QtCore.QAbstractTableModel().parent() + PySide2.QtCore.QFile().resize(qint64) + m = PySide2.QtCore.QMutex(); m.tryLock(); m.unlock() # prevent a message "QMutex: destroying locked mutex" + PySide2.QtCore.QSortFilterProxyModel().parent() + PySide2.QtCore.QTemporaryFile(tfarg).open(openMode) +""" +try: + modname = "PySide2.QtGui" + exec("import " + modname) + new_functions += """ + PySide2.QtGui.QBitmap().transformed(qMatrix,transformationMode) + PySide2.QtGui.QStandardItemModel().insertColumn(int,qModelIndex) + PySide2.QtGui.QStandardItemModel().parent() + # PySide2.QtGui.QTextList(qTextDocument).setFormat(qTextFormat) # Segmentation fault: 11 + # PySide2.QtGui.QTextTable(qTextDocument).setFormat(qTextFormat) # Segmentation fault: 11 + """ +except ImportError: + warn_essential(modname) +try: + modname = "PySide2.QtWidgets" + exec("import " + modname) + new_functions += """ + PySide2.QtWidgets.QAbstractItemView().update() + PySide2.QtWidgets.QApplication.palette() + PySide2.QtWidgets.QApplication.setFont(qFont) + PySide2.QtWidgets.QApplication.setPalette(qPalette) + PySide2.QtWidgets.QBoxLayout(direction).addWidget(qWidget) + PySide2.QtWidgets.QColorDialog().open() + PySide2.QtWidgets.QDirModel().index(int,int,qModelIndex) + PySide2.QtWidgets.QDirModel().parent() + PySide2.QtWidgets.QFileDialog().open() + PySide2.QtWidgets.QFileSystemModel().index(int,int,qModelIndex) + PySide2.QtWidgets.QFileSystemModel().parent() + PySide2.QtWidgets.QFontDialog().open() + PySide2.QtWidgets.QGestureEvent([]).accept() + PySide2.QtWidgets.QGestureEvent([]).ignore() + PySide2.QtWidgets.QGestureEvent([]).isAccepted() + PySide2.QtWidgets.QGestureEvent([]).setAccepted(bool) + # PySide2.QtWidgets.QGraphicsView().render(qPaintDevice,qPoint,qRegion,renderFlags) # QPaintDevice: NotImplementedError + PySide2.QtWidgets.QGridLayout().addWidget(qWidget) + PySide2.QtWidgets.QHeaderView(orientation).initStyleOption(qStyleOptionFrame) + PySide2.QtWidgets.QInputDialog().open() + PySide2.QtWidgets.QLineEdit().addAction(qAction) + PySide2.QtWidgets.QListWidget().closePersistentEditor(qModelIndex) + PySide2.QtWidgets.QListWidget().openPersistentEditor(qModelIndex) + PySide2.QtWidgets.QMessageBox().open() + PySide2.QtWidgets.QPlainTextEdit.find(quintptr) + PySide2.QtWidgets.QProgressDialog().open() + PySide2.QtWidgets.QStackedLayout().widget() + # PySide2.QtWidgets.QStylePainter().begin(qPaintDevice) # QPaintDevice: NotImplementedError + PySide2.QtWidgets.QTableWidget().closePersistentEditor(qModelIndex) + PySide2.QtWidgets.QTableWidget().openPersistentEditor(qModelIndex) + PySide2.QtWidgets.QTextEdit.find(quintptr) + PySide2.QtWidgets.QTreeWidget().closePersistentEditor(qModelIndex) + PySide2.QtWidgets.QTreeWidget().openPersistentEditor(qModelIndex) + """ +except ImportError: + warn_essential(modname) +try: + modname = "PySide2.QtPrintSupport" + exec("import " + modname) + new_functions += """ + # PySide2.QtPrintSupport.QPageSetupDialog().open() # Segmentation fault: 11 + # PySide2.QtPrintSupport.QPrintDialog().open() # opens the dialog, but works + PySide2.QtPrintSupport.QPrintDialog().printer() + PySide2.QtPrintSupport.QPrintPreviewDialog().open() # note: this prints something, but really shouldn't ;-) + """ +except ImportError: + warn_essential(modname) +try: + import PySide2.QtHelp + new_functions += """ + PySide2.QtHelp.QHelpContentModel().parent() + # PySide2.QtHelp.QHelpIndexModel().createIndex(int,int,quintptr) # returned NULL without setting an error + # PySide2.QtHelp.QHelpIndexModel().createIndex(int,int,object()) # returned NULL without setting an error + """ +except ImportError: + pass +try: + import PySide2.QtQuick + new_functions += """ + PySide2.QtQuick.QQuickPaintedItem().update() + """ +except ImportError: + pass + + +class MainTest(unittest.TestCase): + + def testNewInheriedFunctionsExist(self): + """ + Run all new method signarures + """ + for app in "QtWidgets.QApplication", "QtGui.QGuiApplication", "QtCore.QCoreApplication": + try: + exec("qApp = PySide2.{0}([]) or PySide2.{0}.instance()".format(app)) + break + except AttributeError: + continue + bool = True + int = 42 + qint64 = 42 + tfarg = os.path.join(PySide2.QtCore.QDir.tempPath(), "XXXXXX.tmp") + orientation = PySide2.QtCore.Qt.Orientation() + openMode = PySide2.QtCore.QIODevice.OpenMode(PySide2.QtCore.QIODevice.ReadOnly) + qModelIndex = PySide2.QtCore.QModelIndex() + transformationMode = PySide2.QtCore.Qt.TransformationMode() + qObject = PySide2.QtCore.QObject() + qPoint = PySide2.QtCore.QPoint() + try: + PySide2.QtGui + #qPaintDevice = PySide2.QtGui.QPaintDevice() # NotImplementedError + qMatrix = PySide2.QtGui.QMatrix() + qTextDocument = PySide2.QtGui.QTextDocument() + qTextFormat = PySide2.QtGui.QTextFormat() + quintptr = long(42) if sys.version_info[0] < 3 else 42 + qFont = PySide2.QtGui.QFont() + qPalette = PySide2.QtGui.QPalette() + except AttributeError: + pass + try: + PySide2.QtWidgets + direction = PySide2.QtWidgets.QBoxLayout.Direction() + qWidget = PySide2.QtWidgets.QWidget() + qStyleOptionFrame = PySide2.QtWidgets.QStyleOptionFrame() + qAction = PySide2.QtWidgets.QAction(qObject) + renderFlags = PySide2.QtWidgets.QWidget.RenderFlags + except AttributeError: + pass + + for func in new_functions.splitlines(): + func = func.strip() + if func.startswith("#"): + # this is a crashing or otherwise untestable function + print(func) + continue + try: + exec(func) + except NotImplementedError: + print(func, "# raises NotImplementedError") + else: + print(func) + + def testQAppSignatures(self): + """ + Verify that qApp.palette owns three signatures, especially + palette() without argument. + """ + try: + qApp = (PySide2.QtWidgets.QApplication.instance() or + PySide2.QtWidgets.QApplication([])) + except AttributeError: + unittest.TestCase().skipTest("this test makes only sense if QtWidgets is available.") + try: + PySide2.QtWidgets.QApplication.palette(42) # raises + except TypeError as e: + lines = e.args[0].splitlines() + heading_pos = lines.index("Supported signatures:") + lines = lines[heading_pos+1:] + self.assertEqual(len(lines), 3) + txt = '\n'.join(lines) + print("Signatures found:") + print(txt) + self.assertTrue("palette()" in txt) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/pysidetest/notify_id.py b/sources/pyside2/tests/pysidetest/notify_id.py new file mode 100644 index 0000000..d96e8d9 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/notify_id.py @@ -0,0 +1,76 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QObject, Signal, Property, Slot + +'''Tests that the signal notify id of a property is correct, aka corresponds to the initially set +notify method.''' + +class Foo(QObject): + def __init__(self): + QObject.__init__(self) + self._prop = "Empty" + + def getProp(self): + return self._prop + + def setProp(self, value): + if value != self._prop: + self._prop = value + self.propChanged.emit() + + # Inside the dynamic QMetaObject, the methods have to be sorted, so that this slot comes + # after any signals. That means the property notify id has to be updated, to have the correct + # relative method id. + @Slot() + def randomSlot(): + pass + + propChanged = Signal() + prop = Property(str, getProp, setProp, notify=propChanged) + +class NotifyIdSignal(unittest.TestCase): + def setUp(self): + self.obj = Foo() + + def tearDown(self): + del self.obj + + def testSignalEmission(self): + metaObject = self.obj.metaObject() + propertyIndex = metaObject.indexOfProperty("prop") + property = metaObject.property(propertyIndex) + + signalIndex = property.notifySignalIndex() + signal = metaObject.method(signalIndex) + signalName = signal.name() + self.assertEqual(signalName, "propChanged") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/pysidetest/pysidetest_global.h b/sources/pyside2/tests/pysidetest/pysidetest_global.h new file mode 100644 index 0000000..0077ade --- /dev/null +++ b/sources/pyside2/tests/pysidetest/pysidetest_global.h @@ -0,0 +1,34 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// PySide global.h file +#include "pyside2_global.h" +#include "testobject.h" +#include "testview.h" +#define PYSIDE_API +#include "hiddenobject.h" diff --git a/sources/pyside2/tests/pysidetest/qapp_like_a_macro_test.py b/sources/pyside2/tests/pysidetest/qapp_like_a_macro_test.py new file mode 100644 index 0000000..b38cff6 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/qapp_like_a_macro_test.py @@ -0,0 +1,76 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import PySide2 + +# This test tests the new "macro" feature of qApp. +# It also uses the qApp variable to finish the instance and start over. + +class qAppMacroTest(unittest.TestCase): + def test_qApp_is_like_a_macro_and_can_restart(self): + from PySide2 import QtCore + try: + from PySide2 import QtGui, QtWidgets + except ImportError: + QtWidgets = QtGui = QtCore + # qApp is in the builtins + qApp + # and also in certain PySide modules + QtCore.qApp, QtGui.qApp, QtWidgets.qApp + # and they are all the same + self.assertTrue(qApp is QtCore.qApp is QtGui.qApp is QtWidgets.qApp) + # and the type is NoneType, but it is not None (cannot work) + self.assertTrue(type(qApp) is type(None)) + self.assertTrue(qApp is not None) + # now we create an application for all cases + classes = (QtCore.QCoreApplication, + QtGui.QGuiApplication, + QtWidgets.QApplication) + for klass in classes: + print("created", klass([])) + del __builtins__.qApp + print("deleted qApp") + # creating without deletion raises: + QtCore.QCoreApplication([]) + with self.assertRaises(RuntimeError): + QtCore.QCoreApplication([]) + # assigning qApp is obeyed + QtCore.qApp = 42 + del __builtins__.qApp + self.assertEqual(QtCore.qApp, 42) + self.assertNotEqual(__builtins__, 42) + # delete it and it re-appears + del QtCore.qApp + QtCore.QCoreApplication([]) + self.assertEqual(QtCore.QCoreApplication.instance(), QtCore.qApp) + # and they are again all the same + self.assertTrue(qApp is QtCore.qApp is QtGui.qApp is QtWidgets.qApp) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/pysidetest/qvariant_test.py b/sources/pyside2/tests/pysidetest/qvariant_test.py new file mode 100644 index 0000000..ec8343a --- /dev/null +++ b/sources/pyside2/tests/pysidetest/qvariant_test.py @@ -0,0 +1,45 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from testbinding import TestObject +from PySide2.QtCore import Qt +from PySide2.QtGui import QKeySequence + +from helper import UsesQApplication + +class QVariantTest(UsesQApplication): + + def testQKeySequenceQVariantOperator(self): + # bug #775 + ks = QKeySequence(Qt.SHIFT, Qt.CTRL, Qt.Key_P, Qt.Key_R) + self.assertEqual(TestObject.checkType(ks), 75) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/pysidetest/signal_slot_warning.py b/sources/pyside2/tests/pysidetest/signal_slot_warning.py new file mode 100644 index 0000000..84ddc23 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/signal_slot_warning.py @@ -0,0 +1,70 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' PYSIDE-315: https://bugreports.qt.io/browse/PYSIDE-315 + Test that creating a signal in the wrong order triggers a warning. ''' + +from __future__ import print_function + +import unittest +import PySide2.QtCore as QtCore +import sys +import warnings + + +class Whatever(QtCore.QObject): + echoSignal = QtCore.Signal(str) + + def __init__(self): + super(Whatever, self).__init__() + self.echoSignal.connect(self.mySlot) + + def mySlot(self, v): + pass + +class WarningTest(unittest.TestCase): + def testSignalSlotWarning(self): + # we create an object. This gives no warning. + obj = Whatever() + # then we insert a signal after slots have been created. + setattr(Whatever, "foo", QtCore.Signal()) + with warnings.catch_warnings(record=True) as w: + # Cause all warnings to always be triggered. + warnings.simplefilter("always") + # Trigger a warning. + obj.foo.connect(obj.mySlot) + # Verify some things + assert issubclass(w[-1].category, RuntimeWarning) + assert "*** Sort Warning ***" in str(w[-1].message) + # note that this warning cannot be turned into an error (too hard) + + +if __name__ == "__main__": + unittest.main() diff --git a/sources/pyside2/tests/pysidetest/signalandnamespace_test.py b/sources/pyside2/tests/pysidetest/signalandnamespace_test.py new file mode 100644 index 0000000..9bb42ea --- /dev/null +++ b/sources/pyside2/tests/pysidetest/signalandnamespace_test.py @@ -0,0 +1,120 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from testbinding import PySideCPP, TestObjectWithoutNamespace + +class ModelViewTest(unittest.TestCase): + + def callback(self, o): + self._called = o + + def testWithoutNamespace(self): + self._called = None + o = PySideCPP.TestObjectWithNamespace(None) + o.emitSignal.connect(self.callback) + o.emitSignal.emit(o) + self.assertTrue(o == self._called) + + self._called = None + o = PySideCPP.TestObjectWithNamespace(None) + o.emitSignal.connect(self.callback) + o.callSignal(o) + self.assertTrue(o == self._called) + + def testWithNamespace(self): + self._called = None + o = PySideCPP.TestObjectWithNamespace(None) + o.emitSignalWithNamespace.connect(self.callback) + o.emitSignalWithNamespace.emit(o) + self.assertTrue(o == self._called) + + self._called = None + o = PySideCPP.TestObjectWithNamespace(None) + o.emitSignalWithNamespace.connect(self.callback) + o.callSignalWithNamespace(o) + self.assertTrue(o == self._called) + + + def testWithoutNamespace1(self): + self._called = None + o = TestObjectWithoutNamespace(None) + o.emitSignal.connect(self.callback) + o.emitSignal.emit(o) + self.assertTrue(o == self._called) + + self._called = None + o = TestObjectWithoutNamespace(None) + o.emitSignal.connect(self.callback) + o.callSignal(o) + self.assertTrue(o == self._called) + + def testWithNamespace1(self): + self._called = None + o = TestObjectWithoutNamespace(None) + o.emitSignalWithNamespace.connect(self.callback) + o.emitSignalWithNamespace.emit(o) + self.assertTrue(o == self._called) + + self._called = None + o = TestObjectWithoutNamespace(None) + o.emitSignalWithNamespace.connect(self.callback) + o.callSignalWithNamespace(o) + self.assertTrue(o == self._called) + + def testTypedfWithouNamespace(self): + self._called = None + o = PySideCPP.TestObjectWithNamespace(None) + o.emitSignalWithTypedef.connect(self.callback) + o.emitSignalWithTypedef.emit(10) + self.assertEqual(10, self._called) + + self._called = None + o = PySideCPP.TestObjectWithNamespace(None) + o.emitSignalWithTypedef.connect(self.callback) + o.callSignalWithTypedef(10) + self.assertEqual(10, self._called) + + def testTypedefWithNamespace(self): + self._called = None + o = TestObjectWithoutNamespace(None) + o.emitSignalWithTypedef.connect(self.callback) + o.emitSignalWithTypedef.emit(10) + self.assertEqual(10, self._called) + + self._called = None + o = TestObjectWithoutNamespace(None) + o.emitSignalWithTypedef.connect(self.callback) + o.callSignalWithTypedef(10) + self.assertEqual(10, self._called) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/pysidetest/signalemissionfrompython_test.py b/sources/pyside2/tests/pysidetest/signalemissionfrompython_test.py new file mode 100644 index 0000000..43b31f5 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/signalemissionfrompython_test.py @@ -0,0 +1,107 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from testbinding import TestObject +from PySide2.QtCore import QObject, SIGNAL + +'''Tests the behaviour of signals with default values when emitted from Python.''' + +class SignalEmissionFromPython(unittest.TestCase): + + def setUp(self): + self.obj1 = TestObject(0) + self.obj2 = TestObject(0) + self.one_called = 0 + self.two_called = 0 + + def tearDown(self): + del self.obj1 + del self.obj2 + del self.one_called + del self.two_called + + def testConnectNewStyleEmitVoidSignal(self): + def callbackOne(): + self.one_called += 1 + self.obj2.signalWithDefaultValue.emit() + def callbackTwo(): + self.two_called += 1 + self.obj1.signalWithDefaultValue.connect(callbackOne) + self.obj2.signalWithDefaultValue.connect(callbackTwo) + self.obj1.emitSignalWithDefaultValue_void() + self.obj2.emitSignalWithDefaultValue_void() + self.assertEqual(self.one_called, 1) + self.assertEqual(self.two_called, 2) + + def testConnectOldStyleEmitVoidSignal(self): + def callbackOne(): + self.one_called += 1 + self.obj2.signalWithDefaultValue.emit() + def callbackTwo(): + self.two_called += 1 + QObject.connect(self.obj1, SIGNAL('signalWithDefaultValue()'), callbackOne) + QObject.connect(self.obj2, SIGNAL('signalWithDefaultValue()'), callbackTwo) + self.obj1.emitSignalWithDefaultValue_void() + self.obj2.emitSignalWithDefaultValue_void() + self.assertEqual(self.one_called, 1) + self.assertEqual(self.two_called, 2) + + def testConnectNewStyleEmitBoolSignal(self): + def callbackOne(): + self.one_called += 1 + self.obj2.signalWithDefaultValue[bool].emit(True) + def callbackTwo(): + self.two_called += 1 + self.obj1.signalWithDefaultValue.connect(callbackOne) + self.obj2.signalWithDefaultValue.connect(callbackTwo) + self.obj1.emitSignalWithDefaultValue_void() + self.obj2.emitSignalWithDefaultValue_void() + self.assertEqual(self.one_called, 1) + self.assertEqual(self.two_called, 2) + + def testConnectOldStyleEmitBoolSignal(self): + def callbackOne(): + self.one_called += 1 + self.obj2.signalWithDefaultValue[bool].emit(True) + def callbackTwo(): + self.two_called += 1 + QObject.connect(self.obj1, SIGNAL('signalWithDefaultValue()'), callbackOne) + QObject.connect(self.obj2, SIGNAL('signalWithDefaultValue()'), callbackTwo) + self.obj1.emitSignalWithDefaultValue_void() + self.obj2.emitSignalWithDefaultValue_void() + self.assertEqual(self.one_called, 1) + self.assertEqual(self.two_called, 2) + + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/pysidetest/signalwithdefaultvalue_test.py b/sources/pyside2/tests/pysidetest/signalwithdefaultvalue_test.py new file mode 100644 index 0000000..11951fb --- /dev/null +++ b/sources/pyside2/tests/pysidetest/signalwithdefaultvalue_test.py @@ -0,0 +1,95 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from testbinding import TestObject +from PySide2.QtCore import QObject, SIGNAL + +'''Tests the behaviour of signals with default values.''' + +class SignalWithDefaultValueTest(unittest.TestCase): + + def setUp(self): + self.obj = TestObject(0) + self.void_called = False + self.bool_called = False + + def tearDown(self): + del self.obj + del self.void_called + del self.bool_called + + def testConnectNewStyleEmitVoidSignal(self): + def callbackVoid(): + self.void_called = True + def callbackBool(value): + self.bool_called = True + self.obj.signalWithDefaultValue.connect(callbackVoid) + self.obj.signalWithDefaultValue[bool].connect(callbackBool) + self.obj.emitSignalWithDefaultValue_void() + self.assertTrue(self.void_called) + self.assertTrue(self.bool_called) + + def testConnectNewStyleEmitBoolSignal(self): + def callbackVoid(): + self.void_called = True + def callbackBool(value): + self.bool_called = True + self.obj.signalWithDefaultValue.connect(callbackVoid) + self.obj.signalWithDefaultValue[bool].connect(callbackBool) + self.obj.emitSignalWithDefaultValue_bool() + self.assertTrue(self.void_called) + self.assertTrue(self.bool_called) + + def testConnectOldStyleEmitVoidSignal(self): + def callbackVoid(): + self.void_called = True + def callbackBool(value): + self.bool_called = True + QObject.connect(self.obj, SIGNAL('signalWithDefaultValue()'), callbackVoid) + QObject.connect(self.obj, SIGNAL('signalWithDefaultValue(bool)'), callbackBool) + self.obj.emitSignalWithDefaultValue_void() + self.assertTrue(self.void_called) + self.assertTrue(self.bool_called) + + def testConnectOldStyleEmitBoolSignal(self): + def callbackVoid(): + self.void_called = True + def callbackBool(value): + self.bool_called = True + QObject.connect(self.obj, SIGNAL('signalWithDefaultValue()'), callbackVoid) + QObject.connect(self.obj, SIGNAL('signalWithDefaultValue(bool)'), callbackBool) + self.obj.emitSignalWithDefaultValue_bool() + self.assertTrue(self.void_called) + self.assertTrue(self.bool_called) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/pysidetest/symbols.filter b/sources/pyside2/tests/pysidetest/symbols.filter new file mode 100644 index 0000000..af6c744 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/symbols.filter @@ -0,0 +1,7 @@ +{ +local: +_ZSt*; +_ZNSt*; +_ZNSs*; +_ZNKSt*; +}; diff --git a/sources/pyside2/tests/pysidetest/testobject.cpp b/sources/pyside2/tests/pysidetest/testobject.cpp new file mode 100644 index 0000000..03a7a96 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/testobject.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testobject.h" + +void TestObject::emitIdValueSignal() +{ + emit idValue(m_idValue); +} + +void TestObject::emitStaticMethodDoubleSignal() +{ + emit staticMethodDouble(); +} + +void TestObject::emitSignalWithDefaultValue_void() +{ + emit signalWithDefaultValue(); +} + +void TestObject::emitSignalWithDefaultValue_bool() +{ + emit signalWithDefaultValue(true); +} + +void TestObject::emitSignalWithTypedefValue(int value) +{ + emit signalWithTypedefValue(TypedefValue(value)); +} diff --git a/sources/pyside2/tests/pysidetest/testobject.h b/sources/pyside2/tests/pysidetest/testobject.h new file mode 100644 index 0000000..6cfb011 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/testobject.h @@ -0,0 +1,140 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTOBJECT_H +#define TESTOBJECT_H + +#include +#include +#include +#include +#ifdef pysidetest_EXPORTS +#define PYSIDE_EXPORTS 1 +#endif +#include "pysidemacros.h" + +class IntValue +{ +public: + + IntValue(int val): value(val){}; + IntValue() : value(0) {}; + int value; +}; + +typedef IntValue TypedefValue; + +class PYSIDE_API TestObject : public QObject +{ + Q_OBJECT +public: + static void createApp() { int argc=0; new QApplication(argc, 0); }; + static int checkType(const QVariant& var) { return (int)var.type(); } + + TestObject(int idValue, QObject* parent = 0) : QObject(parent), m_idValue(idValue) {} + int idValue() const { return m_idValue; } + static int staticMethodDouble(int value) { return value * 2; } + void addChild(QObject* c) { m_children.append(c); emit childrenChanged(m_children); } + + void emitIdValueSignal(); + void emitStaticMethodDoubleSignal(); + + void emitSignalWithDefaultValue_void(); + void emitSignalWithDefaultValue_bool(); + + void emitSignalWithTypedefValue(int value); + +signals: + void idValue(int newValue); + void justASignal(); + void staticMethodDouble(); + void childrenChanged(const QList&); + void signalWithDefaultValue(bool value = false); + void signalWithTypedefValue(TypedefValue value); + +private: + int m_idValue; + QList m_children; +}; + + +typedef int PySideInt; + + +namespace PySideCPP { + +class PYSIDE_API TestObjectWithNamespace : public QObject +{ + Q_OBJECT +public: + TestObjectWithNamespace(QObject* parent) : QObject(parent) {} + QString name() { return "TestObjectWithNamespace"; } + + void callSignal(TestObjectWithNamespace* obj) { emitSignal(obj); } + void callSignalWithNamespace(TestObjectWithNamespace* obj) { emitSignalWithNamespace(obj); } + void callSignalWithTypedef(int val) { emitSignalWithTypedef(val); } + +signals: + void emitSignal(TestObjectWithNamespace* obj); + void emitSignalWithNamespace(PySideCPP::TestObjectWithNamespace* obj); + void emitSignalWithTypedef(PySideInt val); +}; + + +} // Namespace PySideCPP + +namespace PySideCPP2 { + +enum Enum1 { Option1 = 1, Option2 = 2 }; + + +typedef long PySideLong; + +class PYSIDE_API TestObjectWithoutNamespace : public QObject +{ + Q_OBJECT +public: + enum Enum2 { Option3 = 3, Option4 = 4}; + TestObjectWithoutNamespace(QObject* parent) : QObject(parent) {} + QString name() { return "TestObjectWithoutNamespace"; } + + void callSignal(TestObjectWithoutNamespace* obj) { emitSignal(obj); } + void callSignalWithNamespace(TestObjectWithoutNamespace* obj) { emitSignalWithNamespace(obj); } + void callSignalWithTypedef(long val) { emitSignalWithTypedef(val); } + +signals: + void emitSignal(TestObjectWithoutNamespace* obj); + void emitSignalWithNamespace(PySideCPP2::TestObjectWithoutNamespace* obj); + void emitSignalWithTypedef(PySideLong val); +}; + + +} // Namespace PySideCPP2 + +#endif // TESTOBJECT_H + diff --git a/sources/pyside2/tests/pysidetest/testview.cpp b/sources/pyside2/tests/pysidetest/testview.cpp new file mode 100644 index 0000000..49e3730 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/testview.cpp @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testview.h" + +#include +#include +#include +#include + +QVariant +TestView::getData() +{ + QModelIndex index; + return m_model->data(index); +} + +QWidget* +TestView::getEditorWidgetFromItemDelegate() const +{ + if (!m_delegate) + return 0; + + QModelIndex index; + QStyleOptionViewItem options; + return m_delegate->createEditor(0, options, index); +} diff --git a/sources/pyside2/tests/pysidetest/testview.h b/sources/pyside2/tests/pysidetest/testview.h new file mode 100644 index 0000000..66d0a94 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/testview.h @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTVIEW_H +#define TESTVIEW_H + +#include +#ifdef pysidetest_EXPORTS +#define PYSIDE_EXPORTS 1 +#endif +#include "pysidemacros.h" + +QT_BEGIN_NAMESPACE +class QWidget; +class QAbstractListModel; +class QAbstractItemDelegate; +QT_END_NAMESPACE + +class PYSIDE_API TestView : public QObject +{ + Q_OBJECT +public: + TestView(QAbstractListModel* model, QObject* parent = 0) : QObject(parent), m_model(model) {} + QAbstractListModel* model() { return m_model; } + QVariant getData(); + + void setItemDelegate(QAbstractItemDelegate* delegate) { m_delegate = delegate; } + QWidget* getEditorWidgetFromItemDelegate() const; + +private: + QAbstractListModel* m_model; + QAbstractItemDelegate* m_delegate; +}; + +#endif // TESTVIEW_H + diff --git a/sources/pyside2/tests/pysidetest/typedef_signal_test.py b/sources/pyside2/tests/pysidetest/typedef_signal_test.py new file mode 100644 index 0000000..f7724b6 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/typedef_signal_test.py @@ -0,0 +1,54 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QObject +from testbinding import TestObject + +class Receiver(QObject): + + def __init__(self): + QObject.__init__(self) + self.received = None + + def slot(self, value): + self.received = value + +class TypedefSignal(unittest.TestCase): + + def testTypedef(self): + obj = TestObject(0) + receiver = Receiver() + + obj.signalWithTypedefValue.connect(receiver.slot) + obj.emitSignalWithTypedefValue(2) + self.assertEqual(receiver.received.value, 2) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/pysidetest/typesystem_pysidetest.xml b/sources/pyside2/tests/pysidetest/typesystem_pysidetest.xml new file mode 100644 index 0000000..bf9c293 --- /dev/null +++ b/sources/pyside2/tests/pysidetest/typesystem_pysidetest.xml @@ -0,0 +1,64 @@ + + + + + + + + + return %CONVERTTOPYTHON[IntValue](%in); + + + + IntValue value = %CONVERTTOCPP[IntValue](%in); + %out = %OUTTYPE(value); + + + + + + + + + + + + + + Shiboken::Conversions::registerConverterName(Shiboken::Conversions::PrimitiveTypeConverter<long>(), "PySideLong"); + Shiboken::Conversions::registerConverterName(Shiboken::Conversions::PrimitiveTypeConverter<long>(), "PySideCPP2::PySideLong"); + qRegisterMetaType<PySideInt>("PySideInt"); + qRegisterMetaType<PySideCPP2::PySideLong>("PySideLong"); + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/pyside2/tests/pysidetest/version_test.py b/sources/pyside2/tests/pysidetest/version_test.py new file mode 100644 index 0000000..447fafd --- /dev/null +++ b/sources/pyside2/tests/pysidetest/version_test.py @@ -0,0 +1,47 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2 import __version_info__, __version__, QtCore + +class CheckForVariablesTest(unittest.TestCase): + def testVesions(self): + version_tuple = (__version_info__[0], __version_info__[1], __version_info__[2]) + self.assertTrue(version_tuple >= (1, 0, 0)) + + self.assertTrue(version_tuple < (99, 99, 99)) + self.assertTrue(__version__) + + self.assertTrue(QtCore.__version_info__ >= (4, 5, 0)) + self.assertTrue(QtCore.__version__) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/registry/CMakeLists.txt b/sources/pyside2/tests/registry/CMakeLists.txt new file mode 100644 index 0000000..df50037 --- /dev/null +++ b/sources/pyside2/tests/registry/CMakeLists.txt @@ -0,0 +1,40 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +PYSIDE_TEST(existence_test.py) diff --git a/sources/pyside2/tests/registry/existence_test.py b/sources/pyside2/tests/registry/existence_test.py new file mode 100644 index 0000000..6e87038 --- /dev/null +++ b/sources/pyside2/tests/registry/existence_test.py @@ -0,0 +1,156 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function, absolute_import + +import os +import sys +import unittest +from textwrap import dedent +from init_platform import (enum_all, generate_all, is_ci, + getEffectiveRefPath, getRefPath, qtVersion) +from util import isolate_warnings, check_warnings, suppress_warnings, warn +from PySide2 import * + +refPath = getRefPath() +effectiveRefPath = getEffectiveRefPath() +effectiveRefPathRoot = os.path.splitext(effectiveRefPath)[0] +pyc = effectiveRefPathRoot + ".pyc" +if os.path.exists(pyc) and not os.path.exists(effectiveRefPath): + # on Python2 the pyc file would be imported + os.unlink(pyc) +module = os.path.basename(effectiveRefPathRoot) + +if refPath != effectiveRefPath: + print("*** Falling back to ", effectiveRefPath, " since expected ", + refPath, " does not exist") + +home_dir = effectiveRefPath +for _ in "abcde": + home_dir = os.path.dirname(home_dir) +shortpath = os.path.relpath(effectiveRefPath, home_dir) +try: + exec("import {} as sig_exists".format(module)) + print("found:", shortpath) + have_refmodule = True +except ImportError: + print("*** not found:", shortpath) + have_refmodule = False +except SyntaxError: + print("*** not a python file, removed:", shortpath) + os.unlink(effectiveRefPath) + have_refmodule = False +if have_refmodule and not hasattr(sig_exists, "dict"): + print("*** wrong module without 'dict', removed:", shortpath) + os.unlink(effectiveRefPath) + have_refmodule = False + +def formatSignatures(signatures): + result = '' + for s in signatures: + result += ' ({})'.format(','.join(s)) + return result + +def msgMultiSignatureCount(key, actual, expected): + return "multi-signature count mismatch for '{}'. Actual {} [{}] vs. expected {} [{}]')".format(key, + len(actual), formatSignatures(actual), + len(expected), formatSignatures(expected)) + +@unittest.skipIf(not have_refmodule, + "not activated for this platform or version") +class TestSignaturesExists(unittest.TestCase): + """ + This is the current simple attempt to support a signature self test. + You can activate it for your platform by supplying your own reference + file. Simply run init_platform.py and add the generated file to the + repository. + """ + def test_signatures(self): + found_sigs = enum_all() + with isolate_warnings(): + for key, value in sig_exists.dict.items(): + name = key.rsplit(".", 1)[-1] + if name in ("next", "__next__"): # ignore problematic cases + continue + if key not in found_sigs: + warn("missing key: '{}'".format(key)) + elif isinstance(value, list) and len(value) != len(found_sigs[key]): + warn(msgMultiSignatureCount(key, found_sigs[key], value)) + if is_ci and check_warnings(): + raise RuntimeError("There are errors, see above.") + + def test_error_is_raised(self): + found_sigs = enum_all() + # make sure that errors are actually raised + found_sigs.pop(list(found_sigs.keys())[42]) + with isolate_warnings(), suppress_warnings(): + for key, value in sig_exists.dict.items(): + name = key.rsplit(".", 1)[-1] + if name in ("next", "__next__"): # ignore problematic cases + continue + if key not in found_sigs: + warn("missing key: '{}'".format(key)) + elif isinstance(value, list) and len(value) != len(found_sigs[key]): + warn(msgMultiSignatureCount(key, found_sigs[key], value)) + self.assertTrue(check_warnings()) + +tested_versions = (5, 6), (5, 9), (5, 11) + +if not have_refmodule and is_ci and qtVersion()[:2] in tested_versions: + class TestFor_CI_Init(unittest.TestCase): + """ + This helper class generates the reference file for CI. + It creates an output listing that can be used to check + the result back in. + """ + generate_all() + sys.stderr.flush() + print("BEGIN_FILE", shortpath, file=sys.stderr) + with open(refPath) as f: + print(f.read(), file=sys.stderr) + print("END_FILE", shortpath, file=sys.stderr) + sys.stderr.flush() + raise RuntimeError(dedent(""" + {line} + ** This is the initial call. You should check this file in: + ** {} + **""").format(shortpath, line=79 * "*")) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/registry/exists_darwin_5_11_1_ci.py b/sources/pyside2/tests/registry/exists_darwin_5_11_1_ci.py new file mode 100644 index 0000000..206ddfc --- /dev/null +++ b/sources/pyside2/tests/registry/exists_darwin_5_11_1_ci.py @@ -0,0 +1,18733 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" +This file contains the simplified signatures for all functions in PySide +for module 'exists_darwin_5_11_1_ci'. There are no default values, no variable +names and no self parameter. Only types are present after simplification. +The functions 'next' resp. '__next__' are removed +to make the output identical for Python 2 and 3. +""" + +import sys + +dict = {} + +# Module PySide2.QtCore +if "PySide2.QtCore" in sys.modules: + dict.update({ + + # class PySide2.QtCore.ClassInfo: + + # class PySide2.QtCore.MetaFunction: + + # class PySide2.QtCore.Property: + + # class PySide2.QtCore.QAbstractAnimation: + "QAbstractAnimation.__init__": ('PySide2.QtCore.QObject',), + "QAbstractAnimation.currentLoop": (), + "QAbstractAnimation.currentLoopTime": (), + "QAbstractAnimation.currentTime": (), + "QAbstractAnimation.direction": (), + "QAbstractAnimation.duration": (), + "QAbstractAnimation.event": ('PySide2.QtCore.QEvent',), + "QAbstractAnimation.group": (), + "QAbstractAnimation.loopCount": (), + "QAbstractAnimation.pause": (), + "QAbstractAnimation.resume": (), + "QAbstractAnimation.setCurrentTime": ('int',), + "QAbstractAnimation.setDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.setLoopCount": ('int',), + "QAbstractAnimation.setPaused": ('bool',), + "QAbstractAnimation.start": ('PySide2.QtCore.QAbstractAnimation.DeletionPolicy',), + "QAbstractAnimation.state": (), + "QAbstractAnimation.stop": (), + "QAbstractAnimation.totalDuration": (), + "QAbstractAnimation.updateCurrentTime": ('int',), + "QAbstractAnimation.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QAbstractEventDispatcher: + "QAbstractEventDispatcher.__init__": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.closingDown": (), + "QAbstractEventDispatcher.flush": (), + "QAbstractEventDispatcher.hasPendingEvents": (), + "QAbstractEventDispatcher.instance": ('PySide2.QtCore.QThread',), + "QAbstractEventDispatcher.interrupt": (), + "QAbstractEventDispatcher.processEvents": ('PySide2.libpyside.ProcessEventsFlags',), + "QAbstractEventDispatcher.registerSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.registerTimer": [('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject'), ('int', 'int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QAbstractEventDispatcher.registeredTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.remainingTime": ('int',), + "QAbstractEventDispatcher.startingUp": (), + "QAbstractEventDispatcher.unregisterSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.unregisterTimer": ('int',), + "QAbstractEventDispatcher.unregisterTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.wakeUp": (), + + # class PySide2.QtCore.QAbstractItemModel: + "QAbstractItemModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginMoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginMoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginResetModel": (), + "QAbstractItemModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.changePersistentIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.changePersistentIndexList": ('List[int]', 'List[int]'), + "QAbstractItemModel.checkIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.libpyside.CheckIndexOptions'), + "QAbstractItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object')], + "QAbstractItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.decodeData": ('int', 'int', 'PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.encodeData": ('List[int]', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.endInsertColumns": (), + "QAbstractItemModel.endInsertRows": (), + "QAbstractItemModel.endMoveColumns": (), + "QAbstractItemModel.endMoveRows": (), + "QAbstractItemModel.endRemoveColumns": (), + "QAbstractItemModel.endRemoveRows": (), + "QAbstractItemModel.endResetModel": (), + "QAbstractItemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasIndex": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'PySide2.libpyside.MatchFlags'), + "QAbstractItemModel.mimeData": ('List[int]',), + "QAbstractItemModel.mimeTypes": (), + "QAbstractItemModel.moveColumn": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRow": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemModel.persistentIndexList": (), + "QAbstractItemModel.removeColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.resetInternalData": (), + "QAbstractItemModel.revert": (), + "QAbstractItemModel.roleNames": (), + "QAbstractItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QAbstractItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QAbstractItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractItemModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.submit": (), + "QAbstractItemModel.supportedDragActions": (), + "QAbstractItemModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractListModel: + "QAbstractListModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractListModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractProxyModel: + "QAbstractProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractProxyModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mimeData": ('List[int]',), + "QAbstractProxyModel.mimeTypes": (), + "QAbstractProxyModel.resetInternalData": (), + "QAbstractProxyModel.revert": (), + "QAbstractProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QAbstractProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QAbstractProxyModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractProxyModel.sourceModel": (), + "QAbstractProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.submit": (), + "QAbstractProxyModel.supportedDragActions": (), + "QAbstractProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractState: + "QAbstractState.__init__": ('PySide2.QtCore.QState',), + "QAbstractState.active": (), + "QAbstractState.event": ('PySide2.QtCore.QEvent',), + "QAbstractState.machine": (), + "QAbstractState.onEntry": ('PySide2.QtCore.QEvent',), + "QAbstractState.onExit": ('PySide2.QtCore.QEvent',), + "QAbstractState.parentState": (), + + # class PySide2.QtCore.QAbstractTableModel: + "QAbstractTableModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractTableModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractTableModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractTransition: + "QAbstractTransition.__init__": ('PySide2.QtCore.QState',), + "QAbstractTransition.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.animations": (), + "QAbstractTransition.event": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.machine": (), + "QAbstractTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.setTargetState": ('PySide2.QtCore.QAbstractState',), + "QAbstractTransition.setTargetStates": ('list',), + "QAbstractTransition.setTransitionType": ('PySide2.QtCore.QAbstractTransition.TransitionType',), + "QAbstractTransition.sourceState": (), + "QAbstractTransition.targetState": (), + "QAbstractTransition.targetStates": (), + "QAbstractTransition.transitionType": (), + + # class PySide2.QtCore.QAnimationGroup: + "QAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QAnimationGroup.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.animationAt": ('int',), + "QAnimationGroup.animationCount": (), + "QAnimationGroup.clear": (), + "QAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QAnimationGroup.indexOfAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.insertAnimation": ('int', 'PySide2.QtCore.QAbstractAnimation'), + "QAnimationGroup.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.takeAnimation": ('int',), + + # class PySide2.QtCore.QBasicMutex: + "QBasicMutex.__init__": (), + "QBasicMutex.isRecursive": (), + "QBasicMutex.lock": (), + "QBasicMutex.tryLock": (), + "QBasicMutex.try_lock": (), + "QBasicMutex.unlock": (), + + # class PySide2.QtCore.QBasicTimer: + "QBasicTimer.__init__": [(), ('PySide2.QtCore.QBasicTimer',)], + "QBasicTimer.__copy__": (), + "QBasicTimer.isActive": (), + "QBasicTimer.start": [('int', 'PySide2.QtCore.QObject'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QBasicTimer.stop": (), + "QBasicTimer.timerId": (), + + # class PySide2.QtCore.QBitArray: + "QBitArray.__init__": [(), ('PySide2.QtCore.QBitArray',), ('int', 'bool')], + "QBitArray.__copy__": (), + "QBitArray.at": ('int',), + "QBitArray.bits": (), + "QBitArray.clear": (), + "QBitArray.clearBit": ('int',), + "QBitArray.count": [(), ('bool',)], + "QBitArray.fill": [('bool', 'int'), ('bool', 'int', 'int')], + "QBitArray.isEmpty": (), + "QBitArray.isNull": (), + "QBitArray.resize": ('int',), + "QBitArray.setBit": [('int',), ('int', 'bool')], + "QBitArray.size": (), + "QBitArray.swap": ('PySide2.QtCore.QBitArray',), + "QBitArray.testBit": ('int',), + "QBitArray.toggleBit": ('int',), + "QBitArray.truncate": ('int',), + + # class PySide2.QtCore.QBuffer: + "QBuffer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QBuffer.atEnd": (), + "QBuffer.buffer": (), + "QBuffer.canReadLine": (), + "QBuffer.close": (), + "QBuffer.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.data": (), + "QBuffer.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.open": ('PySide2.libpyside.OpenMode',), + "QBuffer.pos": (), + "QBuffer.readData": ('str', 'int'), + "QBuffer.seek": ('int',), + "QBuffer.setBuffer": ('PySide2.QtCore.QByteArray',), + "QBuffer.setData": ('PySide2.QtCore.QByteArray',), + "QBuffer.size": (), + "QBuffer.writeData": ('str', 'int'), + + # class PySide2.QtCore.QByteArray: + "QByteArray.__init__": [(), ('PySide2.QtCore.QByteArray',), ('bytearray',), ('int', 'Union[str, int]'), ('str',)], + "QByteArray.__copy__": (), + "QByteArray.__reduce__": (), + "QByteArray.append": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',), ('int', 'Union[str, int]')], + "QByteArray.at": ('int',), + "QByteArray.back": (), + "QByteArray.capacity": (), + "QByteArray.cbegin": (), + "QByteArray.cend": (), + "QByteArray.chop": ('int',), + "QByteArray.chopped": ('int',), + "QByteArray.clear": (), + "QByteArray.contains": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.count": [(), ('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.data": (), + "QByteArray.endsWith": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.fill": ('Union[str, int]', 'int'), + "QByteArray.fromBase64": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.libpyside.Base64Options')], + "QByteArray.fromHex": ('PySide2.QtCore.QByteArray',), + "QByteArray.fromPercentEncoding": ('PySide2.QtCore.QByteArray', 'Union[str, int]'), + "QByteArray.fromRawData": ('str', 'int'), + "QByteArray.front": (), + "QByteArray.indexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.insert": [('int', 'PySide2.QtCore.QByteArray'), ('int', 'int', 'Union[str, int]')], + "QByteArray.isEmpty": (), + "QByteArray.isNull": (), + "QByteArray.isSharedWith": ('PySide2.QtCore.QByteArray',), + "QByteArray.lastIndexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.left": ('int',), + "QByteArray.leftJustified": ('int', 'Union[str, int]', 'bool'), + "QByteArray.length": (), + "QByteArray.mid": ('int', 'int'), + "QByteArray.number": [('float', 'Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.prepend": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',), ('int', 'Union[str, int]')], + "QByteArray.remove": ('int', 'int'), + "QByteArray.repeated": ('int',), + "QByteArray.replace": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('Union[str, int]', 'PySide2.QtCore.QByteArray'), ('Union[str, int]', 'Union[str, int]'), ('int', 'int', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QByteArray.reserve": ('int',), + "QByteArray.resize": ('int',), + "QByteArray.right": ('int',), + "QByteArray.rightJustified": ('int', 'Union[str, int]', 'bool'), + "QByteArray.setNum": [('float', 'Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.setRawData": ('str', 'int'), + "QByteArray.shrink_to_fit": (), + "QByteArray.simplified": (), + "QByteArray.size": (), + "QByteArray.split": ('Union[str, int]',), + "QByteArray.squeeze": (), + "QByteArray.startsWith": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.swap": ('PySide2.QtCore.QByteArray',), + "QByteArray.toBase64": [(), ('PySide2.libpyside.Base64Options',)], + "QByteArray.toDouble": ('bool',), + "QByteArray.toFloat": ('bool',), + "QByteArray.toHex": [(), ('Union[str, int]',)], + "QByteArray.toInt": ('bool', 'int'), + "QByteArray.toLong": ('bool', 'int'), + "QByteArray.toLongLong": ('bool', 'int'), + "QByteArray.toLower": (), + "QByteArray.toPercentEncoding": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'Union[str, int]'), + "QByteArray.toShort": ('bool', 'int'), + "QByteArray.toUInt": ('bool', 'int'), + "QByteArray.toULong": ('bool', 'int'), + "QByteArray.toULongLong": ('bool', 'int'), + "QByteArray.toUShort": ('bool', 'int'), + "QByteArray.toUpper": (), + "QByteArray.trimmed": (), + "QByteArray.truncate": ('int',), + + # class PySide2.QtCore.QByteArrayMatcher: + "QByteArrayMatcher.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArrayMatcher',), ('str', 'int')], + "QByteArrayMatcher.__copy__": (), + "QByteArrayMatcher.indexIn": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int', 'int')], + "QByteArrayMatcher.pattern": (), + "QByteArrayMatcher.setPattern": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QChildEvent: + "QChildEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QObject'), + "QChildEvent.added": (), + "QChildEvent.child": (), + "QChildEvent.polished": (), + "QChildEvent.removed": (), + + # class PySide2.QtCore.QCollator: + "QCollator.__init__": [('PySide2.QtCore.QCollator',), ('PySide2.QtCore.QLocale',)], + "QCollator.caseSensitivity": (), + "QCollator.compare": [('Union[str, int]', 'int', 'Union[str, int]', 'int'), ('str', 'str')], + "QCollator.ignorePunctuation": (), + "QCollator.locale": (), + "QCollator.numericMode": (), + "QCollator.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCollator.setIgnorePunctuation": ('bool',), + "QCollator.setLocale": ('PySide2.QtCore.QLocale',), + "QCollator.setNumericMode": ('bool',), + "QCollator.sortKey": ('str',), + "QCollator.swap": ('PySide2.QtCore.QCollator',), + + # class PySide2.QtCore.QCollatorSortKey: + "QCollatorSortKey.__init__": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.compare": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.swap": ('PySide2.QtCore.QCollatorSortKey',), + + # class PySide2.QtCore.QCommandLineOption: + "QCommandLineOption.__init__": [('List[str]',), ('List[str]', 'str', 'str', 'str'), ('PySide2.QtCore.QCommandLineOption',), ('str',), ('str', 'str', 'str', 'str')], + "QCommandLineOption.defaultValues": (), + "QCommandLineOption.description": (), + "QCommandLineOption.flags": (), + "QCommandLineOption.isHidden": (), + "QCommandLineOption.names": (), + "QCommandLineOption.setDefaultValue": ('str',), + "QCommandLineOption.setDefaultValues": ('List[str]',), + "QCommandLineOption.setDescription": ('str',), + "QCommandLineOption.setFlags": ('PySide2.libpyside.Flags',), + "QCommandLineOption.setHidden": ('bool',), + "QCommandLineOption.setValueName": ('str',), + "QCommandLineOption.swap": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineOption.valueName": (), + + # class PySide2.QtCore.QCommandLineParser: + "QCommandLineParser.__init__": (), + "QCommandLineParser.addHelpOption": (), + "QCommandLineParser.addOption": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineParser.addOptions": ('list',), + "QCommandLineParser.addPositionalArgument": ('str', 'str', 'str'), + "QCommandLineParser.addVersionOption": (), + "QCommandLineParser.applicationDescription": (), + "QCommandLineParser.clearPositionalArguments": (), + "QCommandLineParser.errorText": (), + "QCommandLineParser.helpText": (), + "QCommandLineParser.isSet": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.optionNames": (), + "QCommandLineParser.parse": ('List[str]',), + "QCommandLineParser.positionalArguments": (), + "QCommandLineParser.process": [('List[str]',), ('PySide2.QtCore.QCoreApplication',)], + "QCommandLineParser.setApplicationDescription": ('str',), + "QCommandLineParser.setOptionsAfterPositionalArgumentsMode": ('PySide2.QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode',), + "QCommandLineParser.setSingleDashWordOptionMode": ('PySide2.QtCore.QCommandLineParser.SingleDashWordOptionMode',), + "QCommandLineParser.showHelp": ('int',), + "QCommandLineParser.showVersion": (), + "QCommandLineParser.unknownOptionNames": (), + "QCommandLineParser.value": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.values": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + + # class PySide2.QtCore.QCoreApplication: + "QCoreApplication.__init__": [(), ('List[str]',)], + "QCoreApplication.addLibraryPath": ('str',), + "QCoreApplication.applicationDirPath": (), + "QCoreApplication.applicationFilePath": (), + "QCoreApplication.applicationName": (), + "QCoreApplication.applicationPid": (), + "QCoreApplication.applicationVersion": (), + "QCoreApplication.arguments": (), + "QCoreApplication.closingDown": (), + "QCoreApplication.event": ('PySide2.QtCore.QEvent',), + "QCoreApplication.eventDispatcher": (), + "QCoreApplication.exec_": (), + "QCoreApplication.exit": ('int',), + "QCoreApplication.flush": (), + "QCoreApplication.hasPendingEvents": (), + "QCoreApplication.installTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.instance": (), + "QCoreApplication.isQuitLockEnabled": (), + "QCoreApplication.isSetuidAllowed": (), + "QCoreApplication.libraryPaths": (), + "QCoreApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.organizationDomain": (), + "QCoreApplication.organizationName": (), + "QCoreApplication.postEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent', 'int'), + "QCoreApplication.processEvents": [('PySide2.libpyside.ProcessEventsFlags',), ('PySide2.libpyside.ProcessEventsFlags', 'int')], + "QCoreApplication.quit": (), + "QCoreApplication.removeLibraryPath": ('str',), + "QCoreApplication.removePostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.removeTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.sendEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.sendPostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.setApplicationName": ('str',), + "QCoreApplication.setApplicationVersion": ('str',), + "QCoreApplication.setAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute', 'bool'), + "QCoreApplication.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QCoreApplication.setLibraryPaths": ('List[str]',), + "QCoreApplication.setOrganizationDomain": ('str',), + "QCoreApplication.setOrganizationName": ('str',), + "QCoreApplication.setQuitLockEnabled": ('bool',), + "QCoreApplication.setSetuidAllowed": ('bool',), + "QCoreApplication.startingUp": (), + "QCoreApplication.testAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute',), + "QCoreApplication.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QCryptographicHash: + "QCryptographicHash.__init__": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QCryptographicHash.addData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str', 'int')], + "QCryptographicHash.hash": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QCryptographicHash.Algorithm'), + "QCryptographicHash.reset": (), + "QCryptographicHash.result": (), + + # class PySide2.QtCore.QDataStream: + "QDataStream.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.libpyside.OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QDataStream.abortTransaction": (), + "QDataStream.atEnd": (), + "QDataStream.byteOrder": (), + "QDataStream.commitTransaction": (), + "QDataStream.device": (), + "QDataStream.floatingPointPrecision": (), + "QDataStream.readBool": (), + "QDataStream.readDouble": (), + "QDataStream.readFloat": (), + "QDataStream.readInt16": (), + "QDataStream.readInt32": (), + "QDataStream.readInt64": (), + "QDataStream.readInt8": (), + "QDataStream.readQChar": (), + "QDataStream.readQString": (), + "QDataStream.readQStringList": (), + "QDataStream.readQVariant": (), + "QDataStream.readRawData": ('str', 'int'), + "QDataStream.readString": (), + "QDataStream.readUInt16": (), + "QDataStream.readUInt32": (), + "QDataStream.readUInt64": (), + "QDataStream.readUInt8": (), + "QDataStream.resetStatus": (), + "QDataStream.rollbackTransaction": (), + "QDataStream.setByteOrder": ('PySide2.QtCore.QDataStream.ByteOrder',), + "QDataStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QDataStream.setFloatingPointPrecision": ('PySide2.QtCore.QDataStream.FloatingPointPrecision',), + "QDataStream.setStatus": ('PySide2.QtCore.QDataStream.Status',), + "QDataStream.setVersion": ('int',), + "QDataStream.skipRawData": ('int',), + "QDataStream.startTransaction": (), + "QDataStream.status": (), + "QDataStream.unsetDevice": (), + "QDataStream.version": (), + "QDataStream.writeBool": ('bool',), + "QDataStream.writeDouble": ('float',), + "QDataStream.writeFloat": ('float',), + "QDataStream.writeInt16": ('int',), + "QDataStream.writeInt32": ('int',), + "QDataStream.writeInt64": ('int',), + "QDataStream.writeInt8": ('Union[str, int]',), + "QDataStream.writeQChar": ('Union[str, int]',), + "QDataStream.writeQString": ('str',), + "QDataStream.writeQStringList": ('List[str]',), + "QDataStream.writeQVariant": ('Any',), + "QDataStream.writeRawData": ('str', 'int'), + "QDataStream.writeString": ('str',), + "QDataStream.writeUInt16": ('int',), + "QDataStream.writeUInt32": ('int',), + "QDataStream.writeUInt64": ('int',), + "QDataStream.writeUInt8": ('Union[str, int]',), + + # class PySide2.QtCore.QDate: + "QDate.__init__": [(), ('PySide2.QtCore.QDate',), ('int', 'int', 'int')], + "QDate.__copy__": (), + "QDate.__reduce__": (), + "QDate.addDays": ('int',), + "QDate.addMonths": ('int',), + "QDate.addYears": ('int',), + "QDate.currentDate": (), + "QDate.day": (), + "QDate.dayOfWeek": (), + "QDate.dayOfYear": (), + "QDate.daysInMonth": (), + "QDate.daysInYear": (), + "QDate.daysTo": ('PySide2.QtCore.QDate',), + "QDate.fromJulianDay": ('int',), + "QDate.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDate.getDate": ('int', 'int', 'int'), + "QDate.isLeapYear": ('int',), + "QDate.isNull": (), + "QDate.isValid": [(), ('int', 'int', 'int')], + "QDate.longDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.longMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.month": (), + "QDate.setDate": ('int', 'int', 'int'), + "QDate.shortDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.shortMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.toJulianDay": (), + "QDate.toPython": (), + "QDate.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDate.weekNumber": ('int',), + "QDate.year": (), + + # class PySide2.QtCore.QDateTime: + "QDateTime.__init__": [(), ('PySide2.QtCore.QDate',), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.QTimeZone'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec', 'int'), ('PySide2.QtCore.QDateTime',), ('int', 'int', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int')], + "QDateTime.__copy__": (), + "QDateTime.__reduce__": (), + "QDateTime.addDays": ('int',), + "QDateTime.addMSecs": ('int',), + "QDateTime.addMonths": ('int',), + "QDateTime.addSecs": ('int',), + "QDateTime.addYears": ('int',), + "QDateTime.currentDateTime": (), + "QDateTime.currentDateTimeUtc": (), + "QDateTime.currentMSecsSinceEpoch": (), + "QDateTime.currentSecsSinceEpoch": (), + "QDateTime.date": (), + "QDateTime.daysTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.fromMSecsSinceEpoch": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromSecsSinceEpoch": [('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDateTime.fromTime_t": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.isDaylightTime": (), + "QDateTime.isNull": (), + "QDateTime.isValid": (), + "QDateTime.msecsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.offsetFromUtc": (), + "QDateTime.secsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.setDate": ('PySide2.QtCore.QDate',), + "QDateTime.setMSecsSinceEpoch": ('int',), + "QDateTime.setOffsetFromUtc": ('int',), + "QDateTime.setSecsSinceEpoch": ('int',), + "QDateTime.setTime": ('PySide2.QtCore.QTime',), + "QDateTime.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.setTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.setTime_t": ('int',), + "QDateTime.setUtcOffset": ('int',), + "QDateTime.swap": ('PySide2.QtCore.QDateTime',), + "QDateTime.time": (), + "QDateTime.timeSpec": (), + "QDateTime.timeZone": (), + "QDateTime.timeZoneAbbreviation": (), + "QDateTime.toLocalTime": (), + "QDateTime.toMSecsSinceEpoch": (), + "QDateTime.toOffsetFromUtc": ('int',), + "QDateTime.toPython": (), + "QDateTime.toSecsSinceEpoch": (), + "QDateTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDateTime.toTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.toTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.toTime_t": (), + "QDateTime.toUTC": (), + "QDateTime.utcOffset": (), + + # class PySide2.QtCore.QDir: + "QDir.__init__": [('PySide2.QtCore.QDir',), ('str',), ('str', 'str', 'PySide2.libpyside.SortFlags', 'PySide2.libpyside.Filters')], + "QDir.__copy__": (), + "QDir.__reduce__": (), + "QDir.absoluteFilePath": ('str',), + "QDir.absolutePath": (), + "QDir.addResourceSearchPath": ('str',), + "QDir.addSearchPath": ('str', 'str'), + "QDir.canonicalPath": (), + "QDir.cd": ('str',), + "QDir.cdUp": (), + "QDir.cleanPath": ('str',), + "QDir.count": (), + "QDir.current": (), + "QDir.currentPath": (), + "QDir.dirName": (), + "QDir.drives": (), + "QDir.entryInfoList": [('List[str]', 'PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags'), ('PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags')], + "QDir.entryList": [('List[str]', 'PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags'), ('PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags')], + "QDir.exists": [(), ('str',)], + "QDir.filePath": ('str',), + "QDir.filter": (), + "QDir.fromNativeSeparators": ('str',), + "QDir.home": (), + "QDir.homePath": (), + "QDir.isAbsolute": (), + "QDir.isAbsolutePath": ('str',), + "QDir.isEmpty": ('PySide2.libpyside.Filters',), + "QDir.isReadable": (), + "QDir.isRelative": (), + "QDir.isRelativePath": ('str',), + "QDir.isRoot": (), + "QDir.listSeparator": (), + "QDir.makeAbsolute": (), + "QDir.match": [('List[str]', 'str'), ('str', 'str')], + "QDir.mkdir": ('str',), + "QDir.mkpath": ('str',), + "QDir.nameFilters": (), + "QDir.nameFiltersFromString": ('str',), + "QDir.path": (), + "QDir.refresh": (), + "QDir.relativeFilePath": ('str',), + "QDir.remove": ('str',), + "QDir.removeRecursively": (), + "QDir.rename": ('str', 'str'), + "QDir.rmdir": ('str',), + "QDir.rmpath": ('str',), + "QDir.root": (), + "QDir.rootPath": (), + "QDir.searchPaths": ('str',), + "QDir.separator": (), + "QDir.setCurrent": ('str',), + "QDir.setFilter": ('PySide2.libpyside.Filters',), + "QDir.setNameFilters": ('List[str]',), + "QDir.setPath": ('str',), + "QDir.setSearchPaths": ('str', 'List[str]'), + "QDir.setSorting": ('PySide2.libpyside.SortFlags',), + "QDir.sorting": (), + "QDir.swap": ('PySide2.QtCore.QDir',), + "QDir.temp": (), + "QDir.tempPath": (), + "QDir.toNativeSeparators": ('str',), + + # class PySide2.QtCore.QDirIterator: + "QDirIterator.__init__": [('PySide2.QtCore.QDir', 'PySide2.libpyside.IteratorFlags'), ('str', 'List[str]', 'PySide2.libpyside.Filters', 'PySide2.libpyside.IteratorFlags'), ('str', 'PySide2.libpyside.Filters', 'PySide2.libpyside.IteratorFlags'), ('str', 'PySide2.libpyside.IteratorFlags')], + "QDirIterator.fileInfo": (), + "QDirIterator.fileName": (), + "QDirIterator.filePath": (), + "QDirIterator.hasNext": (), + "QDirIterator.path": (), + + # class PySide2.QtCore.QDynamicPropertyChangeEvent: + "QDynamicPropertyChangeEvent.__init__": ('PySide2.QtCore.QByteArray',), + "QDynamicPropertyChangeEvent.propertyName": (), + + # class PySide2.QtCore.QEasingCurve: + "QEasingCurve.__init__": [('PySide2.QtCore.QEasingCurve',), ('PySide2.QtCore.QEasingCurve.Type',)], + "QEasingCurve.__copy__": (), + "QEasingCurve.addCubicBezierSegment": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEasingCurve.addTCBSegment": ('PySide2.QtCore.QPointF', 'float', 'float', 'float'), + "QEasingCurve.amplitude": (), + "QEasingCurve.customType": (), + "QEasingCurve.overshoot": (), + "QEasingCurve.period": (), + "QEasingCurve.setAmplitude": ('float',), + "QEasingCurve.setCustomType": ('object',), + "QEasingCurve.setOvershoot": ('float',), + "QEasingCurve.setPeriod": ('float',), + "QEasingCurve.setType": ('PySide2.QtCore.QEasingCurve.Type',), + "QEasingCurve.swap": ('PySide2.QtCore.QEasingCurve',), + "QEasingCurve.toCubicSpline": (), + "QEasingCurve.type": (), + "QEasingCurve.valueForProgress": ('float',), + + # class PySide2.QtCore.QElapsedTimer: + "QElapsedTimer.__init__": [(), ('PySide2.QtCore.QElapsedTimer',)], + "QElapsedTimer.__copy__": (), + "QElapsedTimer.clockType": (), + "QElapsedTimer.elapsed": (), + "QElapsedTimer.hasExpired": ('int',), + "QElapsedTimer.invalidate": (), + "QElapsedTimer.isMonotonic": (), + "QElapsedTimer.isValid": (), + "QElapsedTimer.msecsSinceReference": (), + "QElapsedTimer.msecsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.nsecsElapsed": (), + "QElapsedTimer.restart": (), + "QElapsedTimer.secsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.start": (), + + # class PySide2.QtCore.QEvent: + "QEvent.__init__": [('PySide2.QtCore.QEvent',), ('PySide2.QtCore.QEvent.Type',)], + "QEvent.accept": (), + "QEvent.ignore": (), + "QEvent.isAccepted": (), + "QEvent.registerEventType": ('int',), + "QEvent.setAccepted": ('bool',), + "QEvent.spontaneous": (), + "QEvent.type": (), + + # class PySide2.QtCore.QEventLoop: + "QEventLoop.__init__": ('PySide2.QtCore.QObject',), + "QEventLoop.event": ('PySide2.QtCore.QEvent',), + "QEventLoop.exec_": ('PySide2.libpyside.ProcessEventsFlags',), + "QEventLoop.exit": ('int',), + "QEventLoop.isRunning": (), + "QEventLoop.processEvents": [('PySide2.libpyside.ProcessEventsFlags',), ('PySide2.libpyside.ProcessEventsFlags', 'int')], + "QEventLoop.quit": (), + "QEventLoop.wakeUp": (), + + # class PySide2.QtCore.QEventTransition: + "QEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QEventTransition.event": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventSource": (), + "QEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventType": (), + "QEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QEventTransition.setEventSource": ('PySide2.QtCore.QObject',), + "QEventTransition.setEventType": ('PySide2.QtCore.QEvent.Type',), + + # class PySide2.QtCore.QFactoryInterface: + "QFactoryInterface.__init__": (), + "QFactoryInterface.keys": (), + + # class PySide2.QtCore.QFile: + "QFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QFile.copy": [('str',), ('str', 'str')], + "QFile.decodeName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QFile.encodeName": ('str',), + "QFile.exists": [(), ('str',)], + "QFile.fileName": (), + "QFile.link": [('str',), ('str', 'str')], + "QFile.open": [('PySide2.libpyside.OpenMode',), ('int', 'PySide2.libpyside.OpenMode', 'PySide2.libpyside.FileHandleFlags')], + "QFile.permissions": [(), ('str',)], + "QFile.readLink": [(), ('str',)], + "QFile.remove": [(), ('str',)], + "QFile.rename": [('str',), ('str', 'str')], + "QFile.resize": [('int',), ('str', 'int')], + "QFile.setFileName": ('str',), + "QFile.setPermissions": [('PySide2.libpyside.Permissions',), ('str', 'PySide2.libpyside.Permissions')], + "QFile.size": (), + "QFile.symLinkTarget": [(), ('str',)], + + # class PySide2.QtCore.QFileDevice: + "QFileDevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QFileDevice.atEnd": (), + "QFileDevice.close": (), + "QFileDevice.error": (), + "QFileDevice.fileName": (), + "QFileDevice.fileTime": ('PySide2.QtCore.QFileDevice.FileTime',), + "QFileDevice.flush": (), + "QFileDevice.handle": (), + "QFileDevice.isSequential": (), + "QFileDevice.map": ('int', 'int', 'PySide2.QtCore.QFileDevice.MemoryMapFlags'), + "QFileDevice.permissions": (), + "QFileDevice.pos": (), + "QFileDevice.readData": ('str', 'int'), + "QFileDevice.readLineData": ('str', 'int'), + "QFileDevice.resize": ('int',), + "QFileDevice.seek": ('int',), + "QFileDevice.setFileTime": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QFileDevice.FileTime'), + "QFileDevice.setPermissions": ('PySide2.libpyside.Permissions',), + "QFileDevice.size": (), + "QFileDevice.unmap": ('Union[str, int]',), + "QFileDevice.unsetError": (), + "QFileDevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QFileInfo: + "QFileInfo.__init__": [(), ('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('PySide2.QtCore.QFileInfo',), ('str',)], + "QFileInfo.__copy__": (), + "QFileInfo.__reduce__": (), + "QFileInfo.absoluteDir": (), + "QFileInfo.absoluteFilePath": (), + "QFileInfo.absolutePath": (), + "QFileInfo.baseName": (), + "QFileInfo.birthTime": (), + "QFileInfo.bundleName": (), + "QFileInfo.caching": (), + "QFileInfo.canonicalFilePath": (), + "QFileInfo.canonicalPath": (), + "QFileInfo.completeBaseName": (), + "QFileInfo.completeSuffix": (), + "QFileInfo.created": (), + "QFileInfo.dir": (), + "QFileInfo.exists": [(), ('str',)], + "QFileInfo.fileName": (), + "QFileInfo.filePath": (), + "QFileInfo.group": (), + "QFileInfo.groupId": (), + "QFileInfo.isAbsolute": (), + "QFileInfo.isBundle": (), + "QFileInfo.isDir": (), + "QFileInfo.isExecutable": (), + "QFileInfo.isFile": (), + "QFileInfo.isHidden": (), + "QFileInfo.isNativePath": (), + "QFileInfo.isReadable": (), + "QFileInfo.isRelative": (), + "QFileInfo.isRoot": (), + "QFileInfo.isSymLink": (), + "QFileInfo.isWritable": (), + "QFileInfo.lastModified": (), + "QFileInfo.lastRead": (), + "QFileInfo.makeAbsolute": (), + "QFileInfo.metadataChangeTime": (), + "QFileInfo.owner": (), + "QFileInfo.ownerId": (), + "QFileInfo.path": (), + "QFileInfo.readLink": (), + "QFileInfo.refresh": (), + "QFileInfo.setCaching": ('bool',), + "QFileInfo.setFile": [('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('str',)], + "QFileInfo.size": (), + "QFileInfo.suffix": (), + "QFileInfo.swap": ('PySide2.QtCore.QFileInfo',), + "QFileInfo.symLinkTarget": (), + + # class PySide2.QtCore.QFileSelector: + "QFileSelector.__init__": ('PySide2.QtCore.QObject',), + "QFileSelector.allSelectors": (), + "QFileSelector.extraSelectors": (), + "QFileSelector.select": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileSelector.setExtraSelectors": ('List[str]',), + + # class PySide2.QtCore.QFileSystemWatcher: + "QFileSystemWatcher.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QFileSystemWatcher.addPath": ('str',), + "QFileSystemWatcher.addPaths": ('List[str]',), + "QFileSystemWatcher.directories": (), + "QFileSystemWatcher.files": (), + "QFileSystemWatcher.removePath": ('str',), + "QFileSystemWatcher.removePaths": ('List[str]',), + + # class PySide2.QtCore.QFinalState: + "QFinalState.__init__": ('PySide2.QtCore.QState',), + "QFinalState.event": ('PySide2.QtCore.QEvent',), + "QFinalState.onEntry": ('PySide2.QtCore.QEvent',), + "QFinalState.onExit": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtCore.QGenericArgument: + "QGenericArgument.__init__": [('PySide2.QtCore.QGenericArgument',), ('str', 'int')], + "QGenericArgument.__copy__": (), + "QGenericArgument.data": (), + "QGenericArgument.name": (), + + # class PySide2.QtCore.QGenericReturnArgument: + "QGenericReturnArgument.__init__": [('PySide2.QtCore.QGenericReturnArgument',), ('str', 'int')], + "QGenericReturnArgument.__copy__": (), + + # class PySide2.QtCore.QHistoryState: + "QHistoryState.__init__": [('PySide2.QtCore.QHistoryState.HistoryType', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QHistoryState.defaultState": (), + "QHistoryState.defaultTransition": (), + "QHistoryState.event": ('PySide2.QtCore.QEvent',), + "QHistoryState.historyType": (), + "QHistoryState.onEntry": ('PySide2.QtCore.QEvent',), + "QHistoryState.onExit": ('PySide2.QtCore.QEvent',), + "QHistoryState.setDefaultState": ('PySide2.QtCore.QAbstractState',), + "QHistoryState.setDefaultTransition": ('PySide2.QtCore.QAbstractTransition',), + "QHistoryState.setHistoryType": ('PySide2.QtCore.QHistoryState.HistoryType',), + + # class PySide2.QtCore.QIODevice: + "QIODevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QIODevice.atEnd": (), + "QIODevice.bytesAvailable": (), + "QIODevice.bytesToWrite": (), + "QIODevice.canReadLine": (), + "QIODevice.close": (), + "QIODevice.commitTransaction": (), + "QIODevice.currentReadChannel": (), + "QIODevice.currentWriteChannel": (), + "QIODevice.errorString": (), + "QIODevice.getChar": ('str',), + "QIODevice.isOpen": (), + "QIODevice.isReadable": (), + "QIODevice.isSequential": (), + "QIODevice.isTextModeEnabled": (), + "QIODevice.isTransactionStarted": (), + "QIODevice.isWritable": (), + "QIODevice.open": ('PySide2.libpyside.OpenMode',), + "QIODevice.openMode": (), + "QIODevice.peek": ('int',), + "QIODevice.pos": (), + "QIODevice.putChar": ('Union[str, int]',), + "QIODevice.read": ('int',), + "QIODevice.readAll": (), + "QIODevice.readChannelCount": (), + "QIODevice.readData": ('str', 'int'), + "QIODevice.readLine": ('int',), + "QIODevice.readLineData": ('str', 'int'), + "QIODevice.reset": (), + "QIODevice.rollbackTransaction": (), + "QIODevice.seek": ('int',), + "QIODevice.setCurrentReadChannel": ('int',), + "QIODevice.setCurrentWriteChannel": ('int',), + "QIODevice.setErrorString": ('str',), + "QIODevice.setOpenMode": ('PySide2.libpyside.OpenMode',), + "QIODevice.setTextModeEnabled": ('bool',), + "QIODevice.size": (), + "QIODevice.skip": ('int',), + "QIODevice.startTransaction": (), + "QIODevice.ungetChar": ('Union[str, int]',), + "QIODevice.waitForBytesWritten": ('int',), + "QIODevice.waitForReadyRead": ('int',), + "QIODevice.write": ('PySide2.QtCore.QByteArray',), + "QIODevice.writeChannelCount": (), + "QIODevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QIdentityProxyModel: + "QIdentityProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QIdentityProxyModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QIdentityProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QIdentityProxyModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QIdentityProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QIdentityProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QIdentityProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QIdentityProxyModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'PySide2.libpyside.MatchFlags'), + "QIdentityProxyModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QIdentityProxyModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QIdentityProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QIdentityProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QItemSelection: + "QItemSelection.__init__": [(), ('PySide2.QtCore.QItemSelection',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelection.__copy__": (), + "QItemSelection.append": [('PySide2.QtCore.QItemSelectionRange',), ('list',)], + "QItemSelection.at": ('int',), + "QItemSelection.back": (), + "QItemSelection.clear": (), + "QItemSelection.constFirst": (), + "QItemSelection.constLast": (), + "QItemSelection.contains": ('PySide2.QtCore.QModelIndex',), + "QItemSelection.count": [(), ('PySide2.QtCore.QItemSelectionRange',)], + "QItemSelection.detachShared": (), + "QItemSelection.empty": (), + "QItemSelection.endsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.first": (), + "QItemSelection.fromSet": ('set',), + "QItemSelection.fromVector": ('list',), + "QItemSelection.front": (), + "QItemSelection.indexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.indexes": (), + "QItemSelection.insert": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.isEmpty": (), + "QItemSelection.isSharedWith": ('list',), + "QItemSelection.last": (), + "QItemSelection.lastIndexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.length": (), + "QItemSelection.merge": ('PySide2.QtCore.QItemSelection', 'PySide2.libpyside.SelectionFlags'), + "QItemSelection.mid": ('int', 'int'), + "QItemSelection.move": ('int', 'int'), + "QItemSelection.pop_back": (), + "QItemSelection.pop_front": (), + "QItemSelection.prepend": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_back": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_front": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAll": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAt": ('int',), + "QItemSelection.removeFirst": (), + "QItemSelection.removeLast": (), + "QItemSelection.removeOne": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.replace": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.reserve": ('int',), + "QItemSelection.select": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QItemSelection.setSharable": ('bool',), + "QItemSelection.size": (), + "QItemSelection.split": ('PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelection'), + "QItemSelection.startsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.swap": [('int', 'int'), ('list',)], + "QItemSelection.takeAt": ('int',), + "QItemSelection.takeFirst": (), + "QItemSelection.takeLast": (), + "QItemSelection.toSet": (), + "QItemSelection.toVector": (), + "QItemSelection.value": [('int',), ('int', 'PySide2.QtCore.QItemSelectionRange')], + + # class PySide2.QtCore.QItemSelectionModel: + "QItemSelectionModel.__init__": [('PySide2.QtCore.QAbstractItemModel',), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject')], + "QItemSelectionModel.clear": (), + "QItemSelectionModel.clearCurrentIndex": (), + "QItemSelectionModel.clearSelection": (), + "QItemSelectionModel.columnIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.currentIndex": (), + "QItemSelectionModel.emitSelectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QItemSelectionModel.hasSelection": (), + "QItemSelectionModel.isColumnSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isRowSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isSelected": ('PySide2.QtCore.QModelIndex',), + "QItemSelectionModel.model": (), + "QItemSelectionModel.reset": (), + "QItemSelectionModel.rowIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.select": [('PySide2.QtCore.QItemSelection', 'PySide2.libpyside.SelectionFlags'), ('PySide2.QtCore.QModelIndex', 'PySide2.libpyside.SelectionFlags')], + "QItemSelectionModel.selectedColumns": ('int',), + "QItemSelectionModel.selectedIndexes": (), + "QItemSelectionModel.selectedRows": ('int',), + "QItemSelectionModel.selection": (), + "QItemSelectionModel.setCurrentIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.libpyside.SelectionFlags'), + "QItemSelectionModel.setModel": ('PySide2.QtCore.QAbstractItemModel',), + + # class PySide2.QtCore.QItemSelectionRange: + "QItemSelectionRange.__init__": [(), ('PySide2.QtCore.QItemSelectionRange',), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.__copy__": (), + "QItemSelectionRange.bottom": (), + "QItemSelectionRange.bottomRight": (), + "QItemSelectionRange.contains": [('PySide2.QtCore.QModelIndex',), ('int', 'int', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.height": (), + "QItemSelectionRange.indexes": (), + "QItemSelectionRange.intersected": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.intersects": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.isEmpty": (), + "QItemSelectionRange.isValid": (), + "QItemSelectionRange.left": (), + "QItemSelectionRange.model": (), + "QItemSelectionRange.parent": (), + "QItemSelectionRange.right": (), + "QItemSelectionRange.swap": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.top": (), + "QItemSelectionRange.topLeft": (), + "QItemSelectionRange.width": (), + + # class PySide2.QtCore.QJsonArray: + "QJsonArray.__init__": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonArray.__copy__": (), + "QJsonArray.append": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.at": ('int',), + "QJsonArray.contains": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.count": (), + "QJsonArray.empty": (), + "QJsonArray.first": (), + "QJsonArray.fromStringList": ('List[str]',), + "QJsonArray.fromVariantList": ('list',), + "QJsonArray.insert": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.isEmpty": (), + "QJsonArray.last": (), + "QJsonArray.pop_back": (), + "QJsonArray.pop_front": (), + "QJsonArray.prepend": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_back": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_front": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.removeAt": ('int',), + "QJsonArray.removeFirst": (), + "QJsonArray.removeLast": (), + "QJsonArray.replace": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.size": (), + "QJsonArray.swap": ('PySide2.QtCore.QJsonArray',), + "QJsonArray.takeAt": ('int',), + "QJsonArray.toVariantList": (), + + # class PySide2.QtCore.QJsonDocument: + "QJsonDocument.__init__": [(), ('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonDocument',), ('dict',)], + "QJsonDocument.__copy__": (), + "QJsonDocument.array": (), + "QJsonDocument.fromBinaryData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromJson": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonParseError'), + "QJsonDocument.fromRawData": ('str', 'int', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromVariant": ('Any',), + "QJsonDocument.isArray": (), + "QJsonDocument.isEmpty": (), + "QJsonDocument.isNull": (), + "QJsonDocument.isObject": (), + "QJsonDocument.object": (), + "QJsonDocument.rawData": ('int',), + "QJsonDocument.setArray": ('PySide2.QtCore.QJsonArray',), + "QJsonDocument.setObject": ('dict',), + "QJsonDocument.swap": ('PySide2.QtCore.QJsonDocument',), + "QJsonDocument.toBinaryData": (), + "QJsonDocument.toJson": [(), ('PySide2.QtCore.QJsonDocument.JsonFormat',)], + "QJsonDocument.toVariant": (), + + # class PySide2.QtCore.QJsonParseError: + "QJsonParseError.__init__": [(), ('PySide2.QtCore.QJsonParseError',)], + "QJsonParseError.__copy__": (), + "QJsonParseError.errorString": (), + + # class PySide2.QtCore.QJsonValue: + "QJsonValue.__init__": [('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonValue',), ('PySide2.QtCore.QJsonValue.Type',), ('bool',), ('dict',), ('float',), ('int',), ('str',)], + "QJsonValue.__copy__": (), + "QJsonValue.fromVariant": ('Any',), + "QJsonValue.isArray": (), + "QJsonValue.isBool": (), + "QJsonValue.isDouble": (), + "QJsonValue.isNull": (), + "QJsonValue.isObject": (), + "QJsonValue.isString": (), + "QJsonValue.isUndefined": (), + "QJsonValue.swap": ('PySide2.QtCore.QJsonValue',), + "QJsonValue.toArray": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonValue.toBool": ('bool',), + "QJsonValue.toDouble": ('float',), + "QJsonValue.toInt": ('int',), + "QJsonValue.toObject": [(), ('dict',)], + "QJsonValue.toString": [(), ('str',)], + "QJsonValue.toVariant": (), + "QJsonValue.type": (), + + # class PySide2.QtCore.QLibraryInfo: + "QLibraryInfo.build": (), + "QLibraryInfo.buildDate": (), + "QLibraryInfo.isDebugBuild": (), + "QLibraryInfo.licensedProducts": (), + "QLibraryInfo.licensee": (), + "QLibraryInfo.location": ('PySide2.QtCore.QLibraryInfo.LibraryLocation',), + "QLibraryInfo.platformPluginArguments": ('str',), + "QLibraryInfo.version": (), + + # class PySide2.QtCore.QLine: + "QLine.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('int', 'int', 'int', 'int')], + "QLine.__copy__": (), + "QLine.__reduce__": (), + "QLine.center": (), + "QLine.dx": (), + "QLine.dy": (), + "QLine.isNull": (), + "QLine.p1": (), + "QLine.p2": (), + "QLine.setLine": ('int', 'int', 'int', 'int'), + "QLine.setP1": ('PySide2.QtCore.QPoint',), + "QLine.setP2": ('PySide2.QtCore.QPoint',), + "QLine.setPoints": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QLine.toTuple": (), + "QLine.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.x1": (), + "QLine.x2": (), + "QLine.y1": (), + "QLine.y2": (), + + # class PySide2.QtCore.QLineF: + "QLineF.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QLineF.__copy__": (), + "QLineF.__reduce__": (), + "QLineF.angle": [(), ('PySide2.QtCore.QLineF',)], + "QLineF.angleTo": ('PySide2.QtCore.QLineF',), + "QLineF.center": (), + "QLineF.dx": (), + "QLineF.dy": (), + "QLineF.fromPolar": ('float', 'float'), + "QLineF.intersect": ('PySide2.QtCore.QLineF', 'PySide2.QtCore.QPointF'), + "QLineF.isNull": (), + "QLineF.length": (), + "QLineF.normalVector": (), + "QLineF.p1": (), + "QLineF.p2": (), + "QLineF.pointAt": ('float',), + "QLineF.setAngle": ('float',), + "QLineF.setLength": ('float',), + "QLineF.setLine": ('float', 'float', 'float', 'float'), + "QLineF.setP1": ('PySide2.QtCore.QPointF',), + "QLineF.setP2": ('PySide2.QtCore.QPointF',), + "QLineF.setPoints": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QLineF.toLine": (), + "QLineF.toTuple": (), + "QLineF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.unitVector": (), + "QLineF.x1": (), + "QLineF.x2": (), + "QLineF.y1": (), + "QLineF.y2": (), + + # class PySide2.QtCore.QLocale: + "QLocale.__init__": [(), ('PySide2.QtCore.QLocale',), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Country'), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), ('str',)], + "QLocale.__copy__": (), + "QLocale.amText": (), + "QLocale.bcp47Name": (), + "QLocale.c": (), + "QLocale.countriesForLanguage": ('PySide2.QtCore.QLocale.Language',), + "QLocale.country": (), + "QLocale.countryToString": ('PySide2.QtCore.QLocale.Country',), + "QLocale.createSeparatedList": ('List[str]',), + "QLocale.currencySymbol": ('PySide2.QtCore.QLocale.CurrencySymbolFormat',), + "QLocale.dateFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dateTimeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.decimalPoint": (), + "QLocale.exponential": (), + "QLocale.firstDayOfWeek": (), + "QLocale.formattedDataSize": ('int', 'int', 'PySide2.libpyside.DataSizeFormats'), + "QLocale.groupSeparator": (), + "QLocale.language": (), + "QLocale.languageToString": ('PySide2.QtCore.QLocale.Language',), + "QLocale.matchingLocales": ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), + "QLocale.measurementSystem": (), + "QLocale.monthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.name": (), + "QLocale.nativeCountryName": (), + "QLocale.nativeLanguageName": (), + "QLocale.negativeSign": (), + "QLocale.numberOptions": (), + "QLocale.percent": (), + "QLocale.pmText": (), + "QLocale.positiveSign": (), + "QLocale.quoteString": ('str', 'PySide2.QtCore.QLocale.QuotationStyle'), + "QLocale.script": (), + "QLocale.scriptToString": ('PySide2.QtCore.QLocale.Script',), + "QLocale.setDefault": ('PySide2.QtCore.QLocale',), + "QLocale.setNumberOptions": ('PySide2.libpyside.NumberOptions',), + "QLocale.standaloneDayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.standaloneMonthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.swap": ('PySide2.QtCore.QLocale',), + "QLocale.system": (), + "QLocale.textDirection": (), + "QLocale.timeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.toCurrencyString": [('float', 'str'), ('float', 'str', 'int'), ('int', 'str')], + "QLocale.toDate": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDateTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDouble": ('str', 'bool'), + "QLocale.toFloat": ('str', 'bool'), + "QLocale.toInt": ('str', 'bool'), + "QLocale.toLongLong": ('str', 'bool'), + "QLocale.toLower": ('str',), + "QLocale.toShort": ('str', 'bool'), + "QLocale.toString": [('PySide2.QtCore.QDate', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDate', 'str'), ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDateTime', 'str'), ('PySide2.QtCore.QTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QTime', 'str'), ('float', 'Union[str, int]', 'int'), ('int',)], + "QLocale.toTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toUInt": ('str', 'bool'), + "QLocale.toULongLong": ('str', 'bool'), + "QLocale.toUShort": ('str', 'bool'), + "QLocale.toUpper": ('str',), + "QLocale.uiLanguages": (), + "QLocale.weekdays": (), + "QLocale.zeroDigit": (), + + # class PySide2.QtCore.QLockFile: + "QLockFile.__init__": ('str',), + "QLockFile.error": (), + "QLockFile.getLockInfo": ('int', 'str', 'str'), + "QLockFile.isLocked": (), + "QLockFile.lock": (), + "QLockFile.removeStaleLockFile": (), + "QLockFile.setStaleLockTime": ('int',), + "QLockFile.staleLockTime": (), + "QLockFile.tryLock": ('int',), + "QLockFile.unlock": (), + + # class PySide2.QtCore.QMargins: + "QMargins.__init__": [(), ('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QMargins.__copy__": (), + "QMargins.bottom": (), + "QMargins.isNull": (), + "QMargins.left": (), + "QMargins.right": (), + "QMargins.setBottom": ('int',), + "QMargins.setLeft": ('int',), + "QMargins.setRight": ('int',), + "QMargins.setTop": ('int',), + "QMargins.top": (), + + # class PySide2.QtCore.QMarginsF: + "QMarginsF.__init__": [(), ('PySide2.QtCore.QMargins',), ('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float')], + "QMarginsF.__copy__": (), + "QMarginsF.bottom": (), + "QMarginsF.isNull": (), + "QMarginsF.left": (), + "QMarginsF.right": (), + "QMarginsF.setBottom": ('float',), + "QMarginsF.setLeft": ('float',), + "QMarginsF.setRight": ('float',), + "QMarginsF.setTop": ('float',), + "QMarginsF.toMargins": (), + "QMarginsF.top": (), + + # class PySide2.QtCore.QMessageAuthenticationCode: + "QMessageAuthenticationCode.__init__": ('PySide2.QtCore.QCryptographicHash.Algorithm', 'PySide2.QtCore.QByteArray'), + "QMessageAuthenticationCode.addData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str', 'int')], + "QMessageAuthenticationCode.hash": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QCryptographicHash.Algorithm'), + "QMessageAuthenticationCode.reset": (), + "QMessageAuthenticationCode.result": (), + "QMessageAuthenticationCode.setKey": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QMessageLogContext: + "QMessageLogContext.__init__": [(), ('str', 'int', 'str', 'str')], + + # class PySide2.QtCore.QMetaClassInfo: + "QMetaClassInfo.__init__": [(), ('PySide2.QtCore.QMetaClassInfo',)], + "QMetaClassInfo.__copy__": (), + "QMetaClassInfo.name": (), + "QMetaClassInfo.value": (), + + # class PySide2.QtCore.QMetaEnum: + "QMetaEnum.__init__": [(), ('PySide2.QtCore.QMetaEnum',)], + "QMetaEnum.__copy__": (), + "QMetaEnum.isFlag": (), + "QMetaEnum.isScoped": (), + "QMetaEnum.isValid": (), + "QMetaEnum.key": ('int',), + "QMetaEnum.keyCount": (), + "QMetaEnum.keyToValue": ('str', 'bool'), + "QMetaEnum.keysToValue": ('str', 'bool'), + "QMetaEnum.name": (), + "QMetaEnum.scope": (), + "QMetaEnum.value": ('int',), + "QMetaEnum.valueToKey": ('int',), + "QMetaEnum.valueToKeys": ('int',), + + # class PySide2.QtCore.QMetaMethod: + "QMetaMethod.__init__": [(), ('PySide2.QtCore.QMetaMethod',)], + "QMetaMethod.__copy__": (), + "QMetaMethod.access": (), + "QMetaMethod.enclosingMetaObject": (), + "QMetaMethod.invoke": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.invokeOnGadget": [('int', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('int', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.isValid": (), + "QMetaMethod.methodIndex": (), + "QMetaMethod.methodSignature": (), + "QMetaMethod.methodType": (), + "QMetaMethod.name": (), + "QMetaMethod.parameterCount": (), + "QMetaMethod.parameterNames": (), + "QMetaMethod.parameterType": ('int',), + "QMetaMethod.parameterTypes": (), + "QMetaMethod.returnType": (), + "QMetaMethod.revision": (), + "QMetaMethod.tag": (), + "QMetaMethod.typeName": (), + + # class PySide2.QtCore.QMetaObject: + "QMetaObject.__init__": (), + "QMetaObject.cast": ('PySide2.QtCore.QObject',), + "QMetaObject.checkConnectArgs": [('PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QMetaMethod'), ('str', 'str')], + "QMetaObject.classInfo": ('int',), + "QMetaObject.classInfoCount": (), + "QMetaObject.classInfoOffset": (), + "QMetaObject.className": (), + "QMetaObject.connectSlotsByName": ('PySide2.QtCore.QObject',), + "QMetaObject.constructor": ('int',), + "QMetaObject.constructorCount": (), + "QMetaObject.disconnect": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.disconnectOne": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.enumerator": ('int',), + "QMetaObject.enumeratorCount": (), + "QMetaObject.enumeratorOffset": (), + "QMetaObject.indexOfClassInfo": ('str',), + "QMetaObject.indexOfConstructor": ('str',), + "QMetaObject.indexOfEnumerator": ('str',), + "QMetaObject.indexOfMethod": ('str',), + "QMetaObject.indexOfProperty": ('str',), + "QMetaObject.indexOfSignal": ('str',), + "QMetaObject.indexOfSlot": ('str',), + "QMetaObject.inherits": ('PySide2.QtCore.QMetaObject',), + "QMetaObject.invokeMethod": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaObject.method": ('int',), + "QMetaObject.methodCount": (), + "QMetaObject.methodOffset": (), + "QMetaObject.newInstance": ('PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), + "QMetaObject.normalizedSignature": ('str',), + "QMetaObject.normalizedType": ('str',), + "QMetaObject.property": ('int',), + "QMetaObject.propertyCount": (), + "QMetaObject.propertyOffset": (), + "QMetaObject.superClass": (), + "QMetaObject.userProperty": (), + + # class PySide2.QtCore.QMetaProperty: + "QMetaProperty.__init__": [(), ('PySide2.QtCore.QMetaProperty',)], + "QMetaProperty.__copy__": (), + "QMetaProperty.enumerator": (), + "QMetaProperty.hasNotifySignal": (), + "QMetaProperty.hasStdCppSet": (), + "QMetaProperty.isConstant": (), + "QMetaProperty.isDesignable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEditable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEnumType": (), + "QMetaProperty.isFinal": (), + "QMetaProperty.isFlagType": (), + "QMetaProperty.isReadable": (), + "QMetaProperty.isResettable": (), + "QMetaProperty.isScriptable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isStored": ('PySide2.QtCore.QObject',), + "QMetaProperty.isUser": ('PySide2.QtCore.QObject',), + "QMetaProperty.isValid": (), + "QMetaProperty.isWritable": (), + "QMetaProperty.name": (), + "QMetaProperty.notifySignal": (), + "QMetaProperty.notifySignalIndex": (), + "QMetaProperty.propertyIndex": (), + "QMetaProperty.read": ('PySide2.QtCore.QObject',), + "QMetaProperty.readOnGadget": ('int',), + "QMetaProperty.reset": ('PySide2.QtCore.QObject',), + "QMetaProperty.resetOnGadget": ('int',), + "QMetaProperty.revision": (), + "QMetaProperty.type": (), + "QMetaProperty.typeName": (), + "QMetaProperty.userType": (), + "QMetaProperty.write": ('PySide2.QtCore.QObject', 'Any'), + "QMetaProperty.writeOnGadget": ('int', 'Any'), + + # class PySide2.QtCore.QMimeData: + "QMimeData.__init__": (), + "QMimeData.clear": (), + "QMimeData.colorData": (), + "QMimeData.data": ('str',), + "QMimeData.formats": (), + "QMimeData.hasColor": (), + "QMimeData.hasFormat": ('str',), + "QMimeData.hasHtml": (), + "QMimeData.hasImage": (), + "QMimeData.hasText": (), + "QMimeData.hasUrls": (), + "QMimeData.html": (), + "QMimeData.imageData": (), + "QMimeData.removeFormat": ('str',), + "QMimeData.retrieveData": ('str', 'type'), + "QMimeData.setColorData": ('Any',), + "QMimeData.setData": ('str', 'PySide2.QtCore.QByteArray'), + "QMimeData.setHtml": ('str',), + "QMimeData.setImageData": ('Any',), + "QMimeData.setText": ('str',), + "QMimeData.setUrls": ('list',), + "QMimeData.text": (), + "QMimeData.urls": (), + + # class PySide2.QtCore.QMimeDatabase: + "QMimeDatabase.__init__": (), + "QMimeDatabase.allMimeTypes": (), + "QMimeDatabase.mimeTypeForData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QMimeDatabase.mimeTypeForFile": [('PySide2.QtCore.QFileInfo', 'PySide2.QtCore.QMimeDatabase.MatchMode'), ('str', 'PySide2.QtCore.QMimeDatabase.MatchMode')], + "QMimeDatabase.mimeTypeForFileNameAndData": [('str', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QIODevice')], + "QMimeDatabase.mimeTypeForName": ('str',), + "QMimeDatabase.mimeTypeForUrl": ('PySide2.QtCore.QUrl',), + "QMimeDatabase.mimeTypesForFileName": ('str',), + "QMimeDatabase.suffixForFileName": ('str',), + + # class PySide2.QtCore.QMimeType: + "QMimeType.__init__": [(), ('PySide2.QtCore.QMimeType',)], + "QMimeType.__copy__": (), + "QMimeType.aliases": (), + "QMimeType.allAncestors": (), + "QMimeType.comment": (), + "QMimeType.filterString": (), + "QMimeType.genericIconName": (), + "QMimeType.globPatterns": (), + "QMimeType.iconName": (), + "QMimeType.inherits": ('str',), + "QMimeType.isDefault": (), + "QMimeType.isValid": (), + "QMimeType.name": (), + "QMimeType.parentMimeTypes": (), + "QMimeType.preferredSuffix": (), + "QMimeType.suffixes": (), + "QMimeType.swap": ('PySide2.QtCore.QMimeType',), + + # class PySide2.QtCore.QModelIndex: + "QModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',)], + "QModelIndex.__copy__": (), + "QModelIndex.child": ('int', 'int'), + "QModelIndex.column": (), + "QModelIndex.data": ('int',), + "QModelIndex.flags": (), + "QModelIndex.internalId": (), + "QModelIndex.internalPointer": (), + "QModelIndex.isValid": (), + "QModelIndex.model": (), + "QModelIndex.parent": (), + "QModelIndex.row": (), + "QModelIndex.sibling": ('int', 'int'), + "QModelIndex.siblingAtColumn": ('int',), + "QModelIndex.siblingAtRow": ('int',), + + # class PySide2.QtCore.QMutex: + "QMutex.__init__": ('PySide2.QtCore.QMutex.RecursionMode',), + "QMutex.isRecursive": (), + "QMutex.lock": (), + "QMutex.tryLock": [(), ('int',)], + "QMutex.try_lock": (), + "QMutex.unlock": (), + + # class PySide2.QtCore.QMutexLocker: + "QMutexLocker.__init__": ('PySide2.QtCore.QBasicMutex',), + "QMutexLocker.__enter__": (), + "QMutexLocker.__exit__": ('object', 'object', 'object'), + "QMutexLocker.mutex": (), + "QMutexLocker.relock": (), + "QMutexLocker.unlock": (), + + # class PySide2.QtCore.QObject: + "QObject.__init__": ('PySide2.QtCore.QObject',), + "QObject.blockSignals": ('bool',), + "QObject.childEvent": ('PySide2.QtCore.QChildEvent',), + "QObject.children": (), + "QObject.connect": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType')], + "QObject.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.customEvent": ('PySide2.QtCore.QEvent',), + "QObject.deleteLater": (), + "QObject.disconnect": [('PySide2.QtCore.QMetaObject.Connection',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'Callable'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str'), ('str', 'Callable'), ('str', 'PySide2.QtCore.QObject', 'str')], + "QObject.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.dumpObjectInfo": (), + "QObject.dumpObjectTree": (), + "QObject.dynamicPropertyNames": (), + "QObject.emit": ('str', '...'), + "QObject.event": ('PySide2.QtCore.QEvent',), + "QObject.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QObject.findChild": ('type', 'str'), + "QObject.findChildren": [('type', 'PySide2.QtCore.QRegExp'), ('type', 'str')], + "QObject.inherits": ('str',), + "QObject.installEventFilter": ('PySide2.QtCore.QObject',), + "QObject.isSignalConnected": ('PySide2.QtCore.QMetaMethod',), + "QObject.isWidgetType": (), + "QObject.isWindowType": (), + "QObject.killTimer": ('int',), + "QObject.metaObject": (), + "QObject.moveToThread": ('PySide2.QtCore.QThread',), + "QObject.objectName": (), + "QObject.parent": (), + "QObject.property": ('str',), + "QObject.receivers": ('str',), + "QObject.registerUserData": (), + "QObject.removeEventFilter": ('PySide2.QtCore.QObject',), + "QObject.sender": (), + "QObject.senderSignalIndex": (), + "QObject.setObjectName": ('str',), + "QObject.setParent": ('PySide2.QtCore.QObject',), + "QObject.setProperty": ('str', 'Any'), + "QObject.signalsBlocked": (), + "QObject.startTimer": ('int', 'PySide2.QtCore.Qt.TimerType'), + "QObject.thread": (), + "QObject.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QObject.tr": ('str', 'str', 'int'), + + # class PySide2.QtCore.QOperatingSystemVersion: + "QOperatingSystemVersion.__init__": [('PySide2.QtCore.QOperatingSystemVersion',), ('PySide2.QtCore.QOperatingSystemVersion.OSType', 'int', 'int', 'int')], + "QOperatingSystemVersion.__copy__": (), + "QOperatingSystemVersion.current": (), + "QOperatingSystemVersion.currentType": (), + "QOperatingSystemVersion.majorVersion": (), + "QOperatingSystemVersion.microVersion": (), + "QOperatingSystemVersion.minorVersion": (), + "QOperatingSystemVersion.name": (), + "QOperatingSystemVersion.segmentCount": (), + "QOperatingSystemVersion.type": (), + + # class PySide2.QtCore.QParallelAnimationGroup: + "QParallelAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QParallelAnimationGroup.duration": (), + "QParallelAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QParallelAnimationGroup.updateCurrentTime": ('int',), + "QParallelAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QParallelAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QPauseAnimation: + "QPauseAnimation.__init__": [('PySide2.QtCore.QObject',), ('int', 'PySide2.QtCore.QObject')], + "QPauseAnimation.duration": (), + "QPauseAnimation.event": ('PySide2.QtCore.QEvent',), + "QPauseAnimation.setDuration": ('int',), + "QPauseAnimation.updateCurrentTime": ('int',), + + # class PySide2.QtCore.QPersistentModelIndex: + "QPersistentModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QPersistentModelIndex',)], + "QPersistentModelIndex.__copy__": (), + "QPersistentModelIndex.child": ('int', 'int'), + "QPersistentModelIndex.column": (), + "QPersistentModelIndex.data": ('int',), + "QPersistentModelIndex.flags": (), + "QPersistentModelIndex.internalId": (), + "QPersistentModelIndex.internalPointer": (), + "QPersistentModelIndex.isValid": (), + "QPersistentModelIndex.model": (), + "QPersistentModelIndex.parent": (), + "QPersistentModelIndex.row": (), + "QPersistentModelIndex.sibling": ('int', 'int'), + "QPersistentModelIndex.swap": ('PySide2.QtCore.QPersistentModelIndex',), + + # class PySide2.QtCore.QPluginLoader: + "QPluginLoader.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QPluginLoader.errorString": (), + "QPluginLoader.fileName": (), + "QPluginLoader.instance": (), + "QPluginLoader.isLoaded": (), + "QPluginLoader.load": (), + "QPluginLoader.metaData": (), + "QPluginLoader.setFileName": ('str',), + "QPluginLoader.staticInstances": (), + "QPluginLoader.unload": (), + + # class PySide2.QtCore.QPoint: + "QPoint.__init__": [(), ('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPoint.__copy__": (), + "QPoint.__reduce__": (), + "QPoint.dotProduct": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QPoint.isNull": (), + "QPoint.manhattanLength": (), + "QPoint.setX": ('int',), + "QPoint.setY": ('int',), + "QPoint.toTuple": (), + "QPoint.x": (), + "QPoint.y": (), + + # class PySide2.QtCore.QPointF: + "QPointF.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPointF.__copy__": (), + "QPointF.__reduce__": (), + "QPointF.dotProduct": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QPointF.isNull": (), + "QPointF.manhattanLength": (), + "QPointF.setX": ('float',), + "QPointF.setY": ('float',), + "QPointF.toPoint": (), + "QPointF.toTuple": (), + "QPointF.x": (), + "QPointF.y": (), + + # class PySide2.QtCore.QProcess: + "QProcess.__init__": ('PySide2.QtCore.QObject',), + "QProcess.arguments": (), + "QProcess.atEnd": (), + "QProcess.bytesAvailable": (), + "QProcess.bytesToWrite": (), + "QProcess.canReadLine": (), + "QProcess.close": (), + "QProcess.closeReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.closeWriteChannel": (), + "QProcess.environment": (), + "QProcess.execute": [('str',), ('str', 'List[str]')], + "QProcess.exitCode": (), + "QProcess.exitStatus": (), + "QProcess.inputChannelMode": (), + "QProcess.isSequential": (), + "QProcess.kill": (), + "QProcess.nullDevice": (), + "QProcess.open": ('PySide2.libpyside.OpenMode',), + "QProcess.pid": (), + "QProcess.processChannelMode": (), + "QProcess.processEnvironment": (), + "QProcess.processId": (), + "QProcess.program": (), + "QProcess.readAllStandardError": (), + "QProcess.readAllStandardOutput": (), + "QProcess.readChannel": (), + "QProcess.readData": ('str', 'int'), + "QProcess.setArguments": ('List[str]',), + "QProcess.setEnvironment": ('List[str]',), + "QProcess.setInputChannelMode": ('PySide2.QtCore.QProcess.InputChannelMode',), + "QProcess.setProcessChannelMode": ('PySide2.QtCore.QProcess.ProcessChannelMode',), + "QProcess.setProcessEnvironment": ('PySide2.QtCore.QProcessEnvironment',), + "QProcess.setProcessState": ('PySide2.QtCore.QProcess.ProcessState',), + "QProcess.setProgram": ('str',), + "QProcess.setReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.setStandardErrorFile": ('str', 'PySide2.libpyside.OpenMode'), + "QProcess.setStandardInputFile": ('str',), + "QProcess.setStandardOutputFile": ('str', 'PySide2.libpyside.OpenMode'), + "QProcess.setStandardOutputProcess": ('PySide2.QtCore.QProcess',), + "QProcess.setWorkingDirectory": ('str',), + "QProcess.setupChildProcess": (), + "QProcess.start": [('PySide2.libpyside.OpenMode',), ('str', 'List[str]', 'PySide2.libpyside.OpenMode'), ('str', 'PySide2.libpyside.OpenMode')], + "QProcess.startDetached": [('int',), ('str',), ('str', 'List[str]'), ('str', 'List[str]', 'str', 'int')], + "QProcess.state": (), + "QProcess.systemEnvironment": (), + "QProcess.terminate": (), + "QProcess.waitForBytesWritten": ('int',), + "QProcess.waitForFinished": ('int',), + "QProcess.waitForReadyRead": ('int',), + "QProcess.waitForStarted": ('int',), + "QProcess.workingDirectory": (), + "QProcess.writeData": ('str', 'int'), + + # class PySide2.QtCore.QProcessEnvironment: + "QProcessEnvironment.__init__": [(), ('PySide2.QtCore.QProcessEnvironment',)], + "QProcessEnvironment.__copy__": (), + "QProcessEnvironment.clear": (), + "QProcessEnvironment.contains": ('str',), + "QProcessEnvironment.insert": [('PySide2.QtCore.QProcessEnvironment',), ('str', 'str')], + "QProcessEnvironment.isEmpty": (), + "QProcessEnvironment.keys": (), + "QProcessEnvironment.remove": ('str',), + "QProcessEnvironment.swap": ('PySide2.QtCore.QProcessEnvironment',), + "QProcessEnvironment.systemEnvironment": (), + "QProcessEnvironment.toStringList": (), + "QProcessEnvironment.value": ('str', 'str'), + + # class PySide2.QtCore.QPropertyAnimation: + "QPropertyAnimation.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QPropertyAnimation.event": ('PySide2.QtCore.QEvent',), + "QPropertyAnimation.propertyName": (), + "QPropertyAnimation.setPropertyName": ('PySide2.QtCore.QByteArray',), + "QPropertyAnimation.setTargetObject": ('PySide2.QtCore.QObject',), + "QPropertyAnimation.targetObject": (), + "QPropertyAnimation.updateCurrentValue": ('Any',), + "QPropertyAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QRandomGenerator: + "QRandomGenerator.__init__": [('PySide2.QtCore.QRandomGenerator',), ('int',), ('int', 'int')], + "QRandomGenerator.bounded": [('float',), ('int',), ('int', 'int')], + "QRandomGenerator.discard": ('int',), + "QRandomGenerator.generate": [(), ('int', 'int')], + "QRandomGenerator.generate64": (), + "QRandomGenerator.generateDouble": (), + "QRandomGenerator.global_": (), + "QRandomGenerator.max": (), + "QRandomGenerator.min": (), + "QRandomGenerator.securelySeeded": (), + "QRandomGenerator.seed": ('int',), + "QRandomGenerator.system": (), + + # class PySide2.QtCore.QRandomGenerator64: + "QRandomGenerator64.__init__": [('PySide2.QtCore.QRandomGenerator',), ('int',), ('int', 'int')], + "QRandomGenerator64.discard": ('int',), + "QRandomGenerator64.generate": (), + "QRandomGenerator64.global_": (), + "QRandomGenerator64.max": (), + "QRandomGenerator64.min": (), + "QRandomGenerator64.securelySeeded": (), + "QRandomGenerator64.system": (), + + # class PySide2.QtCore.QReadLocker: + "QReadLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QReadLocker.__enter__": (), + "QReadLocker.__exit__": ('object', 'object', 'object'), + "QReadLocker.readWriteLock": (), + "QReadLocker.relock": (), + "QReadLocker.unlock": (), + + # class PySide2.QtCore.QReadWriteLock: + "QReadWriteLock.__init__": ('PySide2.QtCore.QReadWriteLock.RecursionMode',), + "QReadWriteLock.lockForRead": (), + "QReadWriteLock.lockForWrite": (), + "QReadWriteLock.tryLockForRead": [(), ('int',)], + "QReadWriteLock.tryLockForWrite": [(), ('int',)], + "QReadWriteLock.unlock": (), + + # class PySide2.QtCore.QRect: + "QRect.__init__": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QSize'), ('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRect.__copy__": (), + "QRect.__reduce__": (), + "QRect.adjust": ('int', 'int', 'int', 'int'), + "QRect.adjusted": ('int', 'int', 'int', 'int'), + "QRect.bottom": (), + "QRect.bottomLeft": (), + "QRect.bottomRight": (), + "QRect.center": (), + "QRect.contains": [('PySide2.QtCore.QPoint', 'bool'), ('PySide2.QtCore.QRect', 'bool'), ('int', 'int'), ('int', 'int', 'bool')], + "QRect.getCoords": ('int', 'int', 'int', 'int'), + "QRect.getRect": ('int', 'int', 'int', 'int'), + "QRect.height": (), + "QRect.intersected": ('PySide2.QtCore.QRect',), + "QRect.intersects": ('PySide2.QtCore.QRect',), + "QRect.isEmpty": (), + "QRect.isNull": (), + "QRect.isValid": (), + "QRect.left": (), + "QRect.marginsAdded": ('PySide2.QtCore.QMargins',), + "QRect.marginsRemoved": ('PySide2.QtCore.QMargins',), + "QRect.moveBottom": ('int',), + "QRect.moveBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.moveCenter": ('PySide2.QtCore.QPoint',), + "QRect.moveLeft": ('int',), + "QRect.moveRight": ('int',), + "QRect.moveTo": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.moveTop": ('int',), + "QRect.moveTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveTopRight": ('PySide2.QtCore.QPoint',), + "QRect.normalized": (), + "QRect.right": (), + "QRect.setBottom": ('int',), + "QRect.setBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.setBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.setCoords": ('int', 'int', 'int', 'int'), + "QRect.setHeight": ('int',), + "QRect.setLeft": ('int',), + "QRect.setRect": ('int', 'int', 'int', 'int'), + "QRect.setRight": ('int',), + "QRect.setSize": ('PySide2.QtCore.QSize',), + "QRect.setTop": ('int',), + "QRect.setTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.setTopRight": ('PySide2.QtCore.QPoint',), + "QRect.setWidth": ('int',), + "QRect.setX": ('int',), + "QRect.setY": ('int',), + "QRect.size": (), + "QRect.top": (), + "QRect.topLeft": (), + "QRect.topRight": (), + "QRect.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.transposed": (), + "QRect.united": ('PySide2.QtCore.QRect',), + "QRect.width": (), + "QRect.x": (), + "QRect.y": (), + + # class PySide2.QtCore.QRectF: + "QRectF.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QSizeF'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QRectF.__copy__": (), + "QRectF.__reduce__": (), + "QRectF.adjust": ('float', 'float', 'float', 'float'), + "QRectF.adjusted": ('float', 'float', 'float', 'float'), + "QRectF.bottom": (), + "QRectF.bottomLeft": (), + "QRectF.bottomRight": (), + "QRectF.center": (), + "QRectF.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('float', 'float')], + "QRectF.getCoords": ('float', 'float', 'float', 'float'), + "QRectF.getRect": ('float', 'float', 'float', 'float'), + "QRectF.height": (), + "QRectF.intersected": ('PySide2.QtCore.QRectF',), + "QRectF.intersects": ('PySide2.QtCore.QRectF',), + "QRectF.isEmpty": (), + "QRectF.isNull": (), + "QRectF.isValid": (), + "QRectF.left": (), + "QRectF.marginsAdded": ('PySide2.QtCore.QMarginsF',), + "QRectF.marginsRemoved": ('PySide2.QtCore.QMarginsF',), + "QRectF.moveBottom": ('float',), + "QRectF.moveBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.moveCenter": ('PySide2.QtCore.QPointF',), + "QRectF.moveLeft": ('float',), + "QRectF.moveRight": ('float',), + "QRectF.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.moveTop": ('float',), + "QRectF.moveTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.normalized": (), + "QRectF.right": (), + "QRectF.setBottom": ('float',), + "QRectF.setBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.setCoords": ('float', 'float', 'float', 'float'), + "QRectF.setHeight": ('float',), + "QRectF.setLeft": ('float',), + "QRectF.setRect": ('float', 'float', 'float', 'float'), + "QRectF.setRight": ('float',), + "QRectF.setSize": ('PySide2.QtCore.QSizeF',), + "QRectF.setTop": ('float',), + "QRectF.setTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.setWidth": ('float',), + "QRectF.setX": ('float',), + "QRectF.setY": ('float',), + "QRectF.size": (), + "QRectF.toAlignedRect": (), + "QRectF.toRect": (), + "QRectF.top": (), + "QRectF.topLeft": (), + "QRectF.topRight": (), + "QRectF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.transposed": (), + "QRectF.united": ('PySide2.QtCore.QRectF',), + "QRectF.width": (), + "QRectF.x": (), + "QRectF.y": (), + + # class PySide2.QtCore.QRegExp: + "QRegExp.__init__": [(), ('PySide2.QtCore.QRegExp',), ('str', 'PySide2.QtCore.Qt.CaseSensitivity', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QRegExp.__copy__": (), + "QRegExp.__reduce__": (), + "QRegExp.cap": ('int',), + "QRegExp.captureCount": (), + "QRegExp.capturedTexts": (), + "QRegExp.caseSensitivity": (), + "QRegExp.errorString": (), + "QRegExp.escape": ('str',), + "QRegExp.exactMatch": ('str',), + "QRegExp.indexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.isEmpty": (), + "QRegExp.isMinimal": (), + "QRegExp.isValid": (), + "QRegExp.lastIndexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.matchedLength": (), + "QRegExp.pattern": (), + "QRegExp.patternSyntax": (), + "QRegExp.pos": ('int',), + "QRegExp.replace": ('str', 'str'), + "QRegExp.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QRegExp.setMinimal": ('bool',), + "QRegExp.setPattern": ('str',), + "QRegExp.setPatternSyntax": ('PySide2.QtCore.QRegExp.PatternSyntax',), + "QRegExp.swap": ('PySide2.QtCore.QRegExp',), + + # class PySide2.QtCore.QRegularExpression: + "QRegularExpression.__init__": [(), ('PySide2.QtCore.QRegularExpression',), ('str', 'PySide2.libpyside.PatternOptions')], + "QRegularExpression.__copy__": (), + "QRegularExpression.captureCount": (), + "QRegularExpression.errorString": (), + "QRegularExpression.escape": ('str',), + "QRegularExpression.globalMatch": ('str', 'int', 'PySide2.QtCore.QRegularExpression.MatchType', 'PySide2.libpyside.MatchOptions'), + "QRegularExpression.isValid": (), + "QRegularExpression.match": ('str', 'int', 'PySide2.QtCore.QRegularExpression.MatchType', 'PySide2.libpyside.MatchOptions'), + "QRegularExpression.namedCaptureGroups": (), + "QRegularExpression.optimize": (), + "QRegularExpression.pattern": (), + "QRegularExpression.patternErrorOffset": (), + "QRegularExpression.patternOptions": (), + "QRegularExpression.setPattern": ('str',), + "QRegularExpression.setPatternOptions": ('PySide2.libpyside.PatternOptions',), + "QRegularExpression.swap": ('PySide2.QtCore.QRegularExpression',), + + # class PySide2.QtCore.QRegularExpressionMatch: + "QRegularExpressionMatch.__init__": [(), ('PySide2.QtCore.QRegularExpressionMatch',)], + "QRegularExpressionMatch.__copy__": (), + "QRegularExpressionMatch.captured": [('int',), ('str',)], + "QRegularExpressionMatch.capturedEnd": [('int',), ('str',)], + "QRegularExpressionMatch.capturedLength": [('int',), ('str',)], + "QRegularExpressionMatch.capturedRef": [('int',), ('str',)], + "QRegularExpressionMatch.capturedStart": [('int',), ('str',)], + "QRegularExpressionMatch.capturedTexts": (), + "QRegularExpressionMatch.hasMatch": (), + "QRegularExpressionMatch.hasPartialMatch": (), + "QRegularExpressionMatch.isValid": (), + "QRegularExpressionMatch.lastCapturedIndex": (), + "QRegularExpressionMatch.matchOptions": (), + "QRegularExpressionMatch.matchType": (), + "QRegularExpressionMatch.regularExpression": (), + "QRegularExpressionMatch.swap": ('PySide2.QtCore.QRegularExpressionMatch',), + + # class PySide2.QtCore.QRegularExpressionMatchIterator: + "QRegularExpressionMatchIterator.__init__": [(), ('PySide2.QtCore.QRegularExpressionMatchIterator',)], + "QRegularExpressionMatchIterator.__copy__": (), + "QRegularExpressionMatchIterator.hasNext": (), + "QRegularExpressionMatchIterator.isValid": (), + "QRegularExpressionMatchIterator.matchOptions": (), + "QRegularExpressionMatchIterator.matchType": (), + "QRegularExpressionMatchIterator.peekNext": (), + "QRegularExpressionMatchIterator.regularExpression": (), + "QRegularExpressionMatchIterator.swap": ('PySide2.QtCore.QRegularExpressionMatchIterator',), + + # class PySide2.QtCore.QResource: + "QResource.__init__": ('str', 'PySide2.QtCore.QLocale'), + "QResource.absoluteFilePath": (), + "QResource.addSearchPath": ('str',), + "QResource.children": (), + "QResource.data": (), + "QResource.fileName": (), + "QResource.isCompressed": (), + "QResource.isDir": (), + "QResource.isFile": (), + "QResource.isValid": (), + "QResource.lastModified": (), + "QResource.locale": (), + "QResource.registerResource": ('str', 'str'), + "QResource.registerResourceData": ('Union[str, int]', 'str'), + "QResource.searchPaths": (), + "QResource.setFileName": ('str',), + "QResource.setLocale": ('PySide2.QtCore.QLocale',), + "QResource.size": (), + "QResource.unregisterResource": ('str', 'str'), + "QResource.unregisterResourceData": ('Union[str, int]', 'str'), + + # class PySide2.QtCore.QRunnable: + "QRunnable.__init__": (), + "QRunnable.autoDelete": (), + "QRunnable.run": (), + "QRunnable.setAutoDelete": ('bool',), + + # class PySide2.QtCore.QSaveFile: + "QSaveFile.__init__": [('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QSaveFile.cancelWriting": (), + "QSaveFile.close": (), + "QSaveFile.commit": (), + "QSaveFile.directWriteFallback": (), + "QSaveFile.fileName": (), + "QSaveFile.open": ('PySide2.libpyside.OpenMode',), + "QSaveFile.setDirectWriteFallback": ('bool',), + "QSaveFile.setFileName": ('str',), + "QSaveFile.writeData": ('str', 'int'), + + # class PySide2.QtCore.QSemaphore: + "QSemaphore.__init__": ('int',), + "QSemaphore.acquire": ('int',), + "QSemaphore.available": (), + "QSemaphore.release": ('int',), + "QSemaphore.tryAcquire": [('int',), ('int', 'int')], + + # class PySide2.QtCore.QSemaphoreReleaser: + "QSemaphoreReleaser.__init__": [(), ('PySide2.QtCore.QSemaphore', 'int')], + "QSemaphoreReleaser.cancel": (), + "QSemaphoreReleaser.semaphore": (), + "QSemaphoreReleaser.swap": ('PySide2.QtCore.QSemaphoreReleaser',), + + # class PySide2.QtCore.QSequentialAnimationGroup: + "QSequentialAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QSequentialAnimationGroup.addPause": ('int',), + "QSequentialAnimationGroup.currentAnimation": (), + "QSequentialAnimationGroup.duration": (), + "QSequentialAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QSequentialAnimationGroup.insertPause": ('int', 'int'), + "QSequentialAnimationGroup.updateCurrentTime": ('int',), + "QSequentialAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QSequentialAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QSettings: + "QSettings.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QObject'), ('str', 'str', 'PySide2.QtCore.QObject')], + "QSettings.allKeys": (), + "QSettings.applicationName": (), + "QSettings.beginGroup": ('str',), + "QSettings.beginReadArray": ('str',), + "QSettings.beginWriteArray": ('str', 'int'), + "QSettings.childGroups": (), + "QSettings.childKeys": (), + "QSettings.clear": (), + "QSettings.contains": ('str',), + "QSettings.defaultFormat": (), + "QSettings.endArray": (), + "QSettings.endGroup": (), + "QSettings.event": ('PySide2.QtCore.QEvent',), + "QSettings.fallbacksEnabled": (), + "QSettings.fileName": (), + "QSettings.format": (), + "QSettings.group": (), + "QSettings.iniCodec": (), + "QSettings.isAtomicSyncRequired": (), + "QSettings.isWritable": (), + "QSettings.organizationName": (), + "QSettings.remove": ('str',), + "QSettings.scope": (), + "QSettings.setArrayIndex": ('int',), + "QSettings.setAtomicSyncRequired": ('bool',), + "QSettings.setDefaultFormat": ('PySide2.QtCore.QSettings.Format',), + "QSettings.setFallbacksEnabled": ('bool',), + "QSettings.setIniCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QSettings.setPath": ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str'), + "QSettings.setValue": ('str', 'Any'), + "QSettings.status": (), + "QSettings.sync": (), + "QSettings.value": ('str', 'Any'), + + # class PySide2.QtCore.QSignalBlocker: + "QSignalBlocker.__init__": ('PySide2.QtCore.QObject',), + "QSignalBlocker.reblock": (), + "QSignalBlocker.unblock": (), + + # class PySide2.QtCore.QSignalMapper: + "QSignalMapper.__init__": ('PySide2.QtCore.QObject',), + "QSignalMapper.map": [(), ('PySide2.QtCore.QObject',)], + "QSignalMapper.mapping": [('PySide2.QtCore.QObject',), ('int',), ('str',)], + "QSignalMapper.removeMappings": ('PySide2.QtCore.QObject',), + "QSignalMapper.setMapping": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + + # class PySide2.QtCore.QSignalTransition: + "QSignalTransition.__init__": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',), ('object', 'PySide2.QtCore.QState')], + "QSignalTransition.event": ('PySide2.QtCore.QEvent',), + "QSignalTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QSignalTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QSignalTransition.senderObject": (), + "QSignalTransition.setSenderObject": ('PySide2.QtCore.QObject',), + "QSignalTransition.setSignal": ('PySide2.QtCore.QByteArray',), + "QSignalTransition.signal": (), + + # class PySide2.QtCore.QSize: + "QSize.__init__": [(), ('PySide2.QtCore.QSize',), ('int', 'int')], + "QSize.__copy__": (), + "QSize.__reduce__": (), + "QSize.boundedTo": ('PySide2.QtCore.QSize',), + "QSize.expandedTo": ('PySide2.QtCore.QSize',), + "QSize.height": (), + "QSize.isEmpty": (), + "QSize.isNull": (), + "QSize.isValid": (), + "QSize.scale": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.setHeight": ('int',), + "QSize.setWidth": ('int',), + "QSize.toTuple": (), + "QSize.transpose": (), + "QSize.transposed": (), + "QSize.width": (), + + # class PySide2.QtCore.QSizeF: + "QSizeF.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QSizeF.__copy__": (), + "QSizeF.__reduce__": (), + "QSizeF.boundedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.expandedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.height": (), + "QSizeF.isEmpty": (), + "QSizeF.isNull": (), + "QSizeF.isValid": (), + "QSizeF.scale": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.scaled": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.setHeight": ('float',), + "QSizeF.setWidth": ('float',), + "QSizeF.toSize": (), + "QSizeF.toTuple": (), + "QSizeF.transpose": (), + "QSizeF.transposed": (), + "QSizeF.width": (), + + # class PySide2.QtCore.QSocketNotifier: + "QSocketNotifier.__init__": [('int', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject'), ('object', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject')], + "QSocketNotifier.event": ('PySide2.QtCore.QEvent',), + "QSocketNotifier.isEnabled": (), + "QSocketNotifier.setEnabled": ('bool',), + "QSocketNotifier.socket": (), + "QSocketNotifier.type": (), + + # class PySide2.QtCore.QSortFilterProxyModel: + "QSortFilterProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QSortFilterProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSortFilterProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.dynamicSortFilter": (), + "QSortFilterProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.filterAcceptsColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterAcceptsRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterCaseSensitivity": (), + "QSortFilterProxyModel.filterKeyColumn": (), + "QSortFilterProxyModel.filterRegExp": (), + "QSortFilterProxyModel.filterRole": (), + "QSortFilterProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSortFilterProxyModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.invalidate": (), + "QSortFilterProxyModel.invalidateFilter": (), + "QSortFilterProxyModel.isRecursiveFilteringEnabled": (), + "QSortFilterProxyModel.isSortLocaleAware": (), + "QSortFilterProxyModel.lessThan": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'PySide2.libpyside.MatchFlags'), + "QSortFilterProxyModel.mimeData": ('List[int]',), + "QSortFilterProxyModel.mimeTypes": (), + "QSortFilterProxyModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QSortFilterProxyModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSortFilterProxyModel.setDynamicSortFilter": ('bool',), + "QSortFilterProxyModel.setFilterCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setFilterFixedString": ('str',), + "QSortFilterProxyModel.setFilterKeyColumn": ('int',), + "QSortFilterProxyModel.setFilterRegExp": [('PySide2.QtCore.QRegExp',), ('str',)], + "QSortFilterProxyModel.setFilterRole": ('int',), + "QSortFilterProxyModel.setFilterWildcard": ('str',), + "QSortFilterProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QSortFilterProxyModel.setRecursiveFilteringEnabled": ('bool',), + "QSortFilterProxyModel.setSortCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setSortLocaleAware": ('bool',), + "QSortFilterProxyModel.setSortRole": ('int',), + "QSortFilterProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QSortFilterProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSortFilterProxyModel.sortCaseSensitivity": (), + "QSortFilterProxyModel.sortColumn": (), + "QSortFilterProxyModel.sortOrder": (), + "QSortFilterProxyModel.sortRole": (), + "QSortFilterProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QStandardPaths: + "QStandardPaths.displayName": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.enableTestMode": ('bool',), + "QStandardPaths.findExecutable": ('str', 'List[str]'), + "QStandardPaths.isTestModeEnabled": (), + "QStandardPaths.locate": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'PySide2.libpyside.LocateOptions'), + "QStandardPaths.locateAll": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'PySide2.libpyside.LocateOptions'), + "QStandardPaths.setTestModeEnabled": ('bool',), + "QStandardPaths.standardLocations": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.writableLocation": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + + # class PySide2.QtCore.QState: + "QState.__init__": [('PySide2.QtCore.QState',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QState')], + "QState.addTransition": [('PySide2.QtCore.QAbstractState',), ('PySide2.QtCore.QAbstractTransition',), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QAbstractState'), ('object', 'PySide2.QtCore.QAbstractState')], + "QState.assignProperty": ('PySide2.QtCore.QObject', 'str', 'Any'), + "QState.childMode": (), + "QState.errorState": (), + "QState.event": ('PySide2.QtCore.QEvent',), + "QState.initialState": (), + "QState.onEntry": ('PySide2.QtCore.QEvent',), + "QState.onExit": ('PySide2.QtCore.QEvent',), + "QState.removeTransition": ('PySide2.QtCore.QAbstractTransition',), + "QState.setChildMode": ('PySide2.QtCore.QState.ChildMode',), + "QState.setErrorState": ('PySide2.QtCore.QAbstractState',), + "QState.setInitialState": ('PySide2.QtCore.QAbstractState',), + "QState.transitions": (), + + # class PySide2.QtCore.QStateMachine: + "QStateMachine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QObject')], + "QStateMachine.addDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.addState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.beginMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.beginSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.cancelDelayedEvent": ('int',), + "QStateMachine.clearError": (), + "QStateMachine.configuration": (), + "QStateMachine.defaultAnimations": (), + "QStateMachine.endMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.endSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.error": (), + "QStateMachine.errorString": (), + "QStateMachine.event": ('PySide2.QtCore.QEvent',), + "QStateMachine.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStateMachine.globalRestorePolicy": (), + "QStateMachine.isAnimated": (), + "QStateMachine.isRunning": (), + "QStateMachine.onEntry": ('PySide2.QtCore.QEvent',), + "QStateMachine.onExit": ('PySide2.QtCore.QEvent',), + "QStateMachine.postDelayedEvent": ('PySide2.QtCore.QEvent', 'int'), + "QStateMachine.postEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QStateMachine.EventPriority'), + "QStateMachine.removeDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.removeState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.setAnimated": ('bool',), + "QStateMachine.setGlobalRestorePolicy": ('PySide2.QtCore.QState.RestorePolicy',), + "QStateMachine.setRunning": ('bool',), + "QStateMachine.start": (), + "QStateMachine.stop": (), + + # class PySide2.QtCore.QStorageInfo: + "QStorageInfo.__init__": [(), ('PySide2.QtCore.QDir',), ('PySide2.QtCore.QStorageInfo',), ('str',)], + "QStorageInfo.__copy__": (), + "QStorageInfo.blockSize": (), + "QStorageInfo.bytesAvailable": (), + "QStorageInfo.bytesFree": (), + "QStorageInfo.bytesTotal": (), + "QStorageInfo.device": (), + "QStorageInfo.displayName": (), + "QStorageInfo.fileSystemType": (), + "QStorageInfo.isReadOnly": (), + "QStorageInfo.isReady": (), + "QStorageInfo.isRoot": (), + "QStorageInfo.isValid": (), + "QStorageInfo.mountedVolumes": (), + "QStorageInfo.name": (), + "QStorageInfo.refresh": (), + "QStorageInfo.root": (), + "QStorageInfo.rootPath": (), + "QStorageInfo.setPath": ('str',), + "QStorageInfo.subvolume": (), + "QStorageInfo.swap": ('PySide2.QtCore.QStorageInfo',), + + # class PySide2.QtCore.QStringListModel: + "QStringListModel.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QStringListModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStringListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QStringListModel.setStringList": ('List[str]',), + "QStringListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStringListModel.stringList": (), + "QStringListModel.supportedDropActions": (), + + # class PySide2.QtCore.QSysInfo: + "QSysInfo.__init__": (), + "QSysInfo.bootUniqueId": (), + "QSysInfo.buildAbi": (), + "QSysInfo.buildCpuArchitecture": (), + "QSysInfo.currentCpuArchitecture": (), + "QSysInfo.kernelType": (), + "QSysInfo.kernelVersion": (), + "QSysInfo.macVersion": (), + "QSysInfo.machineHostName": (), + "QSysInfo.machineUniqueId": (), + "QSysInfo.prettyProductName": (), + "QSysInfo.productType": (), + "QSysInfo.productVersion": (), + + # class PySide2.QtCore.QSystemSemaphore: + "QSystemSemaphore.__init__": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + "QSystemSemaphore.acquire": (), + "QSystemSemaphore.error": (), + "QSystemSemaphore.errorString": (), + "QSystemSemaphore.key": (), + "QSystemSemaphore.release": ('int',), + "QSystemSemaphore.setKey": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + + # class PySide2.QtCore.QTemporaryDir: + "QTemporaryDir.__init__": [(), ('str',)], + "QTemporaryDir.autoRemove": (), + "QTemporaryDir.errorString": (), + "QTemporaryDir.filePath": ('str',), + "QTemporaryDir.isValid": (), + "QTemporaryDir.path": (), + "QTemporaryDir.remove": (), + "QTemporaryDir.setAutoRemove": ('bool',), + + # class PySide2.QtCore.QTemporaryFile: + "QTemporaryFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QTemporaryFile.autoRemove": (), + "QTemporaryFile.createLocalFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.createNativeFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.fileName": (), + "QTemporaryFile.fileTemplate": (), + "QTemporaryFile.open": [(), ('PySide2.libpyside.OpenMode',)], + "QTemporaryFile.rename": ('str',), + "QTemporaryFile.setAutoRemove": ('bool',), + "QTemporaryFile.setFileTemplate": ('str',), + + # class PySide2.QtCore.QTextBoundaryFinder: + "QTextBoundaryFinder.__init__": [(), ('PySide2.QtCore.QTextBoundaryFinder',), ('PySide2.QtCore.QTextBoundaryFinder.BoundaryType', 'str')], + "QTextBoundaryFinder.__copy__": (), + "QTextBoundaryFinder.boundaryReasons": (), + "QTextBoundaryFinder.isAtBoundary": (), + "QTextBoundaryFinder.isValid": (), + "QTextBoundaryFinder.position": (), + "QTextBoundaryFinder.setPosition": ('int',), + "QTextBoundaryFinder.string": (), + "QTextBoundaryFinder.toEnd": (), + "QTextBoundaryFinder.toNextBoundary": (), + "QTextBoundaryFinder.toPreviousBoundary": (), + "QTextBoundaryFinder.toStart": (), + "QTextBoundaryFinder.type": (), + + # class PySide2.QtCore.QTextCodec: + "QTextCodec.__init__": (), + "QTextCodec.aliases": (), + "QTextCodec.availableCodecs": (), + "QTextCodec.availableMibs": (), + "QTextCodec.canEncode": [('Union[str, int]',), ('str',)], + "QTextCodec.codecForHtml": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.codecForLocale": (), + "QTextCodec.codecForMib": ('int',), + "QTextCodec.codecForName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QTextCodec.codecForUtfText": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.convertToUnicode": ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState'), + "QTextCodec.fromUnicode": ('str',), + "QTextCodec.makeDecoder": ('PySide2.libpyside.ConversionFlags',), + "QTextCodec.makeEncoder": ('PySide2.libpyside.ConversionFlags',), + "QTextCodec.mibEnum": (), + "QTextCodec.name": (), + "QTextCodec.setCodecForLocale": ('PySide2.QtCore.QTextCodec',), + "QTextCodec.toUnicode": [('PySide2.QtCore.QByteArray',), ('str',), ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState')], + + # class PySide2.QtCore.QTextDecoder: + "QTextDecoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'PySide2.libpyside.ConversionFlags')], + "QTextDecoder.hasFailure": (), + "QTextDecoder.toUnicode": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QTextEncoder: + "QTextEncoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'PySide2.libpyside.ConversionFlags')], + "QTextEncoder.fromUnicode": ('str',), + "QTextEncoder.hasFailure": (), + + # class PySide2.QtCore.QTextStream: + "QTextStream.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.libpyside.OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QTextStream.atEnd": (), + "QTextStream.autoDetectUnicode": (), + "QTextStream.codec": (), + "QTextStream.device": (), + "QTextStream.fieldAlignment": (), + "QTextStream.fieldWidth": (), + "QTextStream.flush": (), + "QTextStream.generateByteOrderMark": (), + "QTextStream.integerBase": (), + "QTextStream.locale": (), + "QTextStream.numberFlags": (), + "QTextStream.padChar": (), + "QTextStream.pos": (), + "QTextStream.read": ('int',), + "QTextStream.readAll": (), + "QTextStream.readLine": ('int',), + "QTextStream.realNumberNotation": (), + "QTextStream.realNumberPrecision": (), + "QTextStream.reset": (), + "QTextStream.resetStatus": (), + "QTextStream.seek": ('int',), + "QTextStream.setAutoDetectUnicode": ('bool',), + "QTextStream.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QTextStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextStream.setFieldAlignment": ('PySide2.QtCore.QTextStream.FieldAlignment',), + "QTextStream.setFieldWidth": ('int',), + "QTextStream.setGenerateByteOrderMark": ('bool',), + "QTextStream.setIntegerBase": ('int',), + "QTextStream.setLocale": ('PySide2.QtCore.QLocale',), + "QTextStream.setNumberFlags": ('PySide2.libpyside.NumberFlags',), + "QTextStream.setPadChar": ('Union[str, int]',), + "QTextStream.setRealNumberNotation": ('PySide2.QtCore.QTextStream.RealNumberNotation',), + "QTextStream.setRealNumberPrecision": ('int',), + "QTextStream.setStatus": ('PySide2.QtCore.QTextStream.Status',), + "QTextStream.skipWhiteSpace": (), + "QTextStream.status": (), + "QTextStream.string": (), + + # class PySide2.QtCore.QTextStreamManipulator: + "QTextStreamManipulator.__copy__": (), + "QTextStreamManipulator.exec_": ('PySide2.QtCore.QTextStream',), + + # class PySide2.QtCore.QThread: + "QThread.__init__": ('PySide2.QtCore.QObject',), + "QThread.currentThread": (), + "QThread.event": ('PySide2.QtCore.QEvent',), + "QThread.eventDispatcher": (), + "QThread.exec_": (), + "QThread.exit": ('int',), + "QThread.idealThreadCount": (), + "QThread.isFinished": (), + "QThread.isInterruptionRequested": (), + "QThread.isRunning": (), + "QThread.loopLevel": (), + "QThread.msleep": ('int',), + "QThread.priority": (), + "QThread.quit": (), + "QThread.requestInterruption": (), + "QThread.run": (), + "QThread.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QThread.setPriority": ('PySide2.QtCore.QThread.Priority',), + "QThread.setStackSize": ('int',), + "QThread.setTerminationEnabled": ('bool',), + "QThread.sleep": ('int',), + "QThread.stackSize": (), + "QThread.start": ('PySide2.QtCore.QThread.Priority',), + "QThread.terminate": (), + "QThread.usleep": ('int',), + "QThread.wait": ('int',), + "QThread.yieldCurrentThread": (), + + # class PySide2.QtCore.QThreadPool: + "QThreadPool.__init__": ('PySide2.QtCore.QObject',), + "QThreadPool.activeThreadCount": (), + "QThreadPool.cancel": ('PySide2.QtCore.QRunnable',), + "QThreadPool.clear": (), + "QThreadPool.expiryTimeout": (), + "QThreadPool.globalInstance": (), + "QThreadPool.maxThreadCount": (), + "QThreadPool.releaseThread": (), + "QThreadPool.reserveThread": (), + "QThreadPool.setExpiryTimeout": ('int',), + "QThreadPool.setMaxThreadCount": ('int',), + "QThreadPool.setStackSize": ('int',), + "QThreadPool.stackSize": (), + "QThreadPool.start": ('PySide2.QtCore.QRunnable', 'int'), + "QThreadPool.tryStart": ('PySide2.QtCore.QRunnable',), + "QThreadPool.tryTake": ('PySide2.QtCore.QRunnable',), + "QThreadPool.waitForDone": ('int',), + + # class PySide2.QtCore.QTime: + "QTime.__init__": [(), ('PySide2.QtCore.QTime',), ('int', 'int', 'int', 'int')], + "QTime.__copy__": (), + "QTime.__reduce__": (), + "QTime.addMSecs": ('int',), + "QTime.addSecs": ('int',), + "QTime.currentTime": (), + "QTime.elapsed": (), + "QTime.fromMSecsSinceStartOfDay": ('int',), + "QTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QTime.hour": (), + "QTime.isNull": (), + "QTime.isValid": [(), ('int', 'int', 'int', 'int')], + "QTime.minute": (), + "QTime.msec": (), + "QTime.msecsSinceStartOfDay": (), + "QTime.msecsTo": ('PySide2.QtCore.QTime',), + "QTime.restart": (), + "QTime.second": (), + "QTime.secsTo": ('PySide2.QtCore.QTime',), + "QTime.setHMS": ('int', 'int', 'int', 'int'), + "QTime.start": (), + "QTime.toPython": (), + "QTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + + # class PySide2.QtCore.QTimeLine: + "QTimeLine.__init__": ('int', 'PySide2.QtCore.QObject'), + "QTimeLine.currentFrame": (), + "QTimeLine.currentTime": (), + "QTimeLine.currentValue": (), + "QTimeLine.curveShape": (), + "QTimeLine.direction": (), + "QTimeLine.duration": (), + "QTimeLine.easingCurve": (), + "QTimeLine.endFrame": (), + "QTimeLine.frameForTime": ('int',), + "QTimeLine.loopCount": (), + "QTimeLine.resume": (), + "QTimeLine.setCurrentTime": ('int',), + "QTimeLine.setCurveShape": ('PySide2.QtCore.QTimeLine.CurveShape',), + "QTimeLine.setDirection": ('PySide2.QtCore.QTimeLine.Direction',), + "QTimeLine.setDuration": ('int',), + "QTimeLine.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QTimeLine.setEndFrame": ('int',), + "QTimeLine.setFrameRange": ('int', 'int'), + "QTimeLine.setLoopCount": ('int',), + "QTimeLine.setPaused": ('bool',), + "QTimeLine.setStartFrame": ('int',), + "QTimeLine.setUpdateInterval": ('int',), + "QTimeLine.start": (), + "QTimeLine.startFrame": (), + "QTimeLine.state": (), + "QTimeLine.stop": (), + "QTimeLine.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimeLine.toggleDirection": (), + "QTimeLine.updateInterval": (), + "QTimeLine.valueForTime": ('int',), + + # class PySide2.QtCore.QTimeZone: + "QTimeZone.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'int', 'str', 'str', 'PySide2.QtCore.QLocale.Country', 'str'), ('PySide2.QtCore.QTimeZone',), ('int',)], + "QTimeZone.__copy__": (), + "QTimeZone.abbreviation": ('PySide2.QtCore.QDateTime',), + "QTimeZone.availableTimeZoneIds": [(), ('PySide2.QtCore.QLocale.Country',), ('int',)], + "QTimeZone.comment": (), + "QTimeZone.country": (), + "QTimeZone.daylightTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.displayName": [('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale'), ('PySide2.QtCore.QTimeZone.TimeType', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale')], + "QTimeZone.hasDaylightTime": (), + "QTimeZone.hasTransitions": (), + "QTimeZone.ianaIdToWindowsId": ('PySide2.QtCore.QByteArray',), + "QTimeZone.id": (), + "QTimeZone.isDaylightTime": ('PySide2.QtCore.QDateTime',), + "QTimeZone.isTimeZoneIdAvailable": ('PySide2.QtCore.QByteArray',), + "QTimeZone.isValid": (), + "QTimeZone.nextTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetData": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetFromUtc": ('PySide2.QtCore.QDateTime',), + "QTimeZone.previousTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.standardTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.swap": ('PySide2.QtCore.QTimeZone',), + "QTimeZone.systemTimeZone": (), + "QTimeZone.systemTimeZoneId": (), + "QTimeZone.transitions": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QTimeZone.utc": (), + "QTimeZone.windowsIdToDefaultIanaId": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + "QTimeZone.windowsIdToIanaIds": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + + # class PySide2.QtCore.QTimer: + "QTimer.__init__": ('PySide2.QtCore.QObject',), + "QTimer.interval": (), + "QTimer.isActive": (), + "QTimer.isSingleShot": (), + "QTimer.killTimer": ('int',), + "QTimer.remainingTime": (), + "QTimer.setInterval": ('int',), + "QTimer.setSingleShot": ('bool',), + "QTimer.setTimerType": ('PySide2.QtCore.Qt.TimerType',), + "QTimer.singleShot": [('int', 'Callable'), ('int', 'PySide2.QtCore.QObject', 'str'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject', 'str')], + "QTimer.start": [(), ('int',)], + "QTimer.stop": (), + "QTimer.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimer.timerId": (), + "QTimer.timerType": (), + + # class PySide2.QtCore.QTimerEvent: + "QTimerEvent.__init__": ('int',), + "QTimerEvent.timerId": (), + + # class PySide2.QtCore.QTranslator: + "QTranslator.__init__": ('PySide2.QtCore.QObject',), + "QTranslator.isEmpty": (), + "QTranslator.load": [('PySide2.QtCore.QLocale', 'str', 'str', 'str', 'str'), ('Union[str, int]', 'int', 'str'), ('str', 'str', 'str', 'str')], + "QTranslator.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QUrl: + "QUrl.__init__": [(), ('PySide2.QtCore.QUrl',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.__copy__": (), + "QUrl.__reduce__": (), + "QUrl.adjusted": ('PySide2.libpyside.FormattingOptions',), + "QUrl.authority": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.clear": (), + "QUrl.errorString": (), + "QUrl.fileName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fragment": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fromAce": ('PySide2.QtCore.QByteArray',), + "QUrl.fromEncoded": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromLocalFile": ('str',), + "QUrl.fromPercentEncoding": ('PySide2.QtCore.QByteArray',), + "QUrl.fromStringList": ('List[str]', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromUserInput": [('str',), ('str', 'str', 'PySide2.libpyside.UserInputResolutionOptions')], + "QUrl.hasFragment": (), + "QUrl.hasQuery": (), + "QUrl.host": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.idnWhitelist": (), + "QUrl.isEmpty": (), + "QUrl.isLocalFile": (), + "QUrl.isParentOf": ('PySide2.QtCore.QUrl',), + "QUrl.isRelative": (), + "QUrl.isValid": (), + "QUrl.matches": ('PySide2.QtCore.QUrl', 'PySide2.libpyside.FormattingOptions'), + "QUrl.password": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.path": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.port": ('int',), + "QUrl.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.resolved": ('PySide2.QtCore.QUrl',), + "QUrl.scheme": (), + "QUrl.setAuthority": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setFragment": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setHost": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setIdnWhitelist": ('List[str]',), + "QUrl.setPassword": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPath": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPort": ('int',), + "QUrl.setQuery": [('PySide2.QtCore.QUrlQuery',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.setScheme": ('str',), + "QUrl.setUrl": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserInfo": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserName": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.swap": ('PySide2.QtCore.QUrl',), + "QUrl.toAce": ('str',), + "QUrl.toDisplayString": ('PySide2.libpyside.FormattingOptions',), + "QUrl.toEncoded": ('PySide2.libpyside.FormattingOptions',), + "QUrl.toLocalFile": (), + "QUrl.toPercentEncoding": ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QUrl.toString": ('PySide2.libpyside.FormattingOptions',), + "QUrl.toStringList": ('list', 'PySide2.libpyside.FormattingOptions'), + "QUrl.topLevelDomain": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.url": ('PySide2.libpyside.FormattingOptions',), + "QUrl.userInfo": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.userName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QUrlQuery: + "QUrlQuery.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrlQuery',), ('str',)], + "QUrlQuery.__copy__": (), + "QUrlQuery.addQueryItem": ('str', 'str'), + "QUrlQuery.allQueryItemValues": ('str', 'PySide2.QtCore.QUrl.ComponentFormattingOption'), + "QUrlQuery.clear": (), + "QUrlQuery.defaultQueryPairDelimiter": (), + "QUrlQuery.defaultQueryValueDelimiter": (), + "QUrlQuery.hasQueryItem": ('str',), + "QUrlQuery.isEmpty": (), + "QUrlQuery.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrlQuery.queryItemValue": ('str', 'PySide2.QtCore.QUrl.ComponentFormattingOption'), + "QUrlQuery.queryItems": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrlQuery.queryPairDelimiter": (), + "QUrlQuery.queryValueDelimiter": (), + "QUrlQuery.removeAllQueryItems": ('str',), + "QUrlQuery.removeQueryItem": ('str',), + "QUrlQuery.setQuery": ('str',), + "QUrlQuery.setQueryDelimiters": ('Union[str, int]', 'Union[str, int]'), + "QUrlQuery.setQueryItems": ('list',), + "QUrlQuery.swap": ('PySide2.QtCore.QUrlQuery',), + "QUrlQuery.toString": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QUuid: + "QUuid.__init__": [(), ('PySide2.QtCore.QByteArray',), ('int', 'int', 'int', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), ('str',)], + "QUuid.__copy__": (), + "QUuid.__reduce__": (), + "QUuid.createUuid": (), + "QUuid.createUuidV3": [('PySide2.QtCore.QUuid', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QUuid', 'str')], + "QUuid.createUuidV5": [('PySide2.QtCore.QUuid', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QUuid', 'str')], + "QUuid.fromRfc4122": ('PySide2.QtCore.QByteArray',), + "QUuid.isNull": (), + "QUuid.toByteArray": [(), ('PySide2.QtCore.QUuid.StringFormat',)], + "QUuid.toRfc4122": (), + "QUuid.toString": [(), ('PySide2.QtCore.QUuid.StringFormat',)], + "QUuid.variant": (), + "QUuid.version": (), + + # class PySide2.QtCore.QVariantAnimation: + "QVariantAnimation.__init__": ('PySide2.QtCore.QObject',), + "QVariantAnimation.currentValue": (), + "QVariantAnimation.duration": (), + "QVariantAnimation.easingCurve": (), + "QVariantAnimation.endValue": (), + "QVariantAnimation.event": ('PySide2.QtCore.QEvent',), + "QVariantAnimation.interpolated": ('Any', 'Any', 'float'), + "QVariantAnimation.keyValueAt": ('float',), + "QVariantAnimation.keyValues": (), + "QVariantAnimation.setDuration": ('int',), + "QVariantAnimation.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QVariantAnimation.setEndValue": ('Any',), + "QVariantAnimation.setKeyValueAt": ('float', 'Any'), + "QVariantAnimation.setKeyValues": ('list',), + "QVariantAnimation.setStartValue": ('Any',), + "QVariantAnimation.startValue": (), + "QVariantAnimation.updateCurrentTime": ('int',), + "QVariantAnimation.updateCurrentValue": ('Any',), + "QVariantAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QVersionNumber: + "QVersionNumber.__init__": [(), ('int',), ('int', 'int'), ('int', 'int', 'int'), ('list',)], + "QVersionNumber.__copy__": (), + "QVersionNumber.commonPrefix": ('PySide2.QtCore.QVersionNumber', 'PySide2.QtCore.QVersionNumber'), + "QVersionNumber.compare": ('PySide2.QtCore.QVersionNumber', 'PySide2.QtCore.QVersionNumber'), + "QVersionNumber.fromString": ('str', 'int'), + "QVersionNumber.isNormalized": (), + "QVersionNumber.isNull": (), + "QVersionNumber.isPrefixOf": ('PySide2.QtCore.QVersionNumber',), + "QVersionNumber.majorVersion": (), + "QVersionNumber.microVersion": (), + "QVersionNumber.minorVersion": (), + "QVersionNumber.normalized": (), + "QVersionNumber.segmentAt": ('int',), + "QVersionNumber.segmentCount": (), + "QVersionNumber.segments": (), + "QVersionNumber.toString": (), + + # class PySide2.QtCore.QWaitCondition: + "QWaitCondition.__init__": (), + "QWaitCondition.notify_all": (), + "QWaitCondition.notify_one": (), + "QWaitCondition.wait": [('PySide2.QtCore.QMutex', 'int'), ('PySide2.QtCore.QReadWriteLock', 'int')], + "QWaitCondition.wakeAll": (), + "QWaitCondition.wakeOne": (), + + # class PySide2.QtCore.QWriteLocker: + "QWriteLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QWriteLocker.__enter__": (), + "QWriteLocker.__exit__": ('object', 'object', 'object'), + "QWriteLocker.readWriteLock": (), + "QWriteLocker.relock": (), + "QWriteLocker.unlock": (), + + # class PySide2.QtCore.QXmlStreamAttribute: + "QXmlStreamAttribute.__init__": [(), ('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttribute.__copy__": (), + "QXmlStreamAttribute.isDefault": (), + "QXmlStreamAttribute.name": (), + "QXmlStreamAttribute.namespaceUri": (), + "QXmlStreamAttribute.prefix": (), + "QXmlStreamAttribute.qualifiedName": (), + "QXmlStreamAttribute.value": (), + + # class PySide2.QtCore.QXmlStreamAttributes: + "QXmlStreamAttributes.__init__": [(), ('PySide2.QtCore.QXmlStreamAttributes',)], + "QXmlStreamAttributes.__copy__": (), + "QXmlStreamAttributes.append": [('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttributes.at": ('int',), + "QXmlStreamAttributes.back": (), + "QXmlStreamAttributes.capacity": (), + "QXmlStreamAttributes.clear": (), + "QXmlStreamAttributes.constData": (), + "QXmlStreamAttributes.constFirst": (), + "QXmlStreamAttributes.constLast": (), + "QXmlStreamAttributes.contains": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.count": [(), ('PySide2.QtCore.QXmlStreamAttribute',)], + "QXmlStreamAttributes.data": (), + "QXmlStreamAttributes.empty": (), + "QXmlStreamAttributes.endsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.fill": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.first": (), + "QXmlStreamAttributes.front": (), + "QXmlStreamAttributes.hasAttribute": [('str',), ('str', 'str')], + "QXmlStreamAttributes.indexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.insert": [('int', 'PySide2.QtCore.QXmlStreamAttribute'), ('int', 'int', 'PySide2.QtCore.QXmlStreamAttribute')], + "QXmlStreamAttributes.isEmpty": (), + "QXmlStreamAttributes.isSharedWith": ('list',), + "QXmlStreamAttributes.last": (), + "QXmlStreamAttributes.lastIndexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.length": (), + "QXmlStreamAttributes.mid": ('int', 'int'), + "QXmlStreamAttributes.move": ('int', 'int'), + "QXmlStreamAttributes.prepend": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.remove": [('int',), ('int', 'int')], + "QXmlStreamAttributes.removeAll": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.removeAt": ('int',), + "QXmlStreamAttributes.removeFirst": (), + "QXmlStreamAttributes.removeLast": (), + "QXmlStreamAttributes.removeOne": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.replace": ('int', 'PySide2.QtCore.QXmlStreamAttribute'), + "QXmlStreamAttributes.reserve": ('int',), + "QXmlStreamAttributes.resize": ('int',), + "QXmlStreamAttributes.setSharable": ('bool',), + "QXmlStreamAttributes.shrink_to_fit": (), + "QXmlStreamAttributes.size": (), + "QXmlStreamAttributes.squeeze": (), + "QXmlStreamAttributes.startsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.swap": ('list',), + "QXmlStreamAttributes.takeAt": ('int',), + "QXmlStreamAttributes.takeFirst": (), + "QXmlStreamAttributes.takeLast": (), + "QXmlStreamAttributes.value": [('str',), ('str', 'str')], + + # class PySide2.QtCore.QXmlStreamEntityDeclaration: + "QXmlStreamEntityDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamEntityDeclaration',)], + "QXmlStreamEntityDeclaration.__copy__": (), + "QXmlStreamEntityDeclaration.name": (), + "QXmlStreamEntityDeclaration.notationName": (), + "QXmlStreamEntityDeclaration.publicId": (), + "QXmlStreamEntityDeclaration.systemId": (), + "QXmlStreamEntityDeclaration.value": (), + + # class PySide2.QtCore.QXmlStreamEntityResolver: + "QXmlStreamEntityResolver.__init__": (), + "QXmlStreamEntityResolver.resolveEntity": ('str', 'str'), + "QXmlStreamEntityResolver.resolveUndeclaredEntity": ('str',), + + # class PySide2.QtCore.QXmlStreamNamespaceDeclaration: + "QXmlStreamNamespaceDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), ('str', 'str')], + "QXmlStreamNamespaceDeclaration.__copy__": (), + "QXmlStreamNamespaceDeclaration.namespaceUri": (), + "QXmlStreamNamespaceDeclaration.prefix": (), + + # class PySide2.QtCore.QXmlStreamNotationDeclaration: + "QXmlStreamNotationDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNotationDeclaration',)], + "QXmlStreamNotationDeclaration.__copy__": (), + "QXmlStreamNotationDeclaration.name": (), + "QXmlStreamNotationDeclaration.publicId": (), + "QXmlStreamNotationDeclaration.systemId": (), + + # class PySide2.QtCore.QXmlStreamReader: + "QXmlStreamReader.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str',)], + "QXmlStreamReader.addData": [('PySide2.QtCore.QByteArray',), ('str',)], + "QXmlStreamReader.addExtraNamespaceDeclaration": ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), + "QXmlStreamReader.addExtraNamespaceDeclarations": ('list',), + "QXmlStreamReader.atEnd": (), + "QXmlStreamReader.attributes": (), + "QXmlStreamReader.characterOffset": (), + "QXmlStreamReader.clear": (), + "QXmlStreamReader.columnNumber": (), + "QXmlStreamReader.device": (), + "QXmlStreamReader.documentEncoding": (), + "QXmlStreamReader.documentVersion": (), + "QXmlStreamReader.dtdName": (), + "QXmlStreamReader.dtdPublicId": (), + "QXmlStreamReader.dtdSystemId": (), + "QXmlStreamReader.entityDeclarations": (), + "QXmlStreamReader.entityResolver": (), + "QXmlStreamReader.error": (), + "QXmlStreamReader.errorString": (), + "QXmlStreamReader.hasError": (), + "QXmlStreamReader.isCDATA": (), + "QXmlStreamReader.isCharacters": (), + "QXmlStreamReader.isComment": (), + "QXmlStreamReader.isDTD": (), + "QXmlStreamReader.isEndDocument": (), + "QXmlStreamReader.isEndElement": (), + "QXmlStreamReader.isEntityReference": (), + "QXmlStreamReader.isProcessingInstruction": (), + "QXmlStreamReader.isStandaloneDocument": (), + "QXmlStreamReader.isStartDocument": (), + "QXmlStreamReader.isStartElement": (), + "QXmlStreamReader.isWhitespace": (), + "QXmlStreamReader.lineNumber": (), + "QXmlStreamReader.name": (), + "QXmlStreamReader.namespaceDeclarations": (), + "QXmlStreamReader.namespaceProcessing": (), + "QXmlStreamReader.namespaceUri": (), + "QXmlStreamReader.notationDeclarations": (), + "QXmlStreamReader.prefix": (), + "QXmlStreamReader.processingInstructionData": (), + "QXmlStreamReader.processingInstructionTarget": (), + "QXmlStreamReader.qualifiedName": (), + "QXmlStreamReader.raiseError": ('str',), + "QXmlStreamReader.readElementText": ('PySide2.QtCore.QXmlStreamReader.ReadElementTextBehaviour',), + "QXmlStreamReader.readNext": (), + "QXmlStreamReader.readNextStartElement": (), + "QXmlStreamReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamReader.setEntityResolver": ('PySide2.QtCore.QXmlStreamEntityResolver',), + "QXmlStreamReader.setNamespaceProcessing": ('bool',), + "QXmlStreamReader.skipCurrentElement": (), + "QXmlStreamReader.text": (), + "QXmlStreamReader.tokenString": (), + "QXmlStreamReader.tokenType": (), + + # class PySide2.QtCore.QXmlStreamWriter: + "QXmlStreamWriter.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QXmlStreamWriter.autoFormatting": (), + "QXmlStreamWriter.autoFormattingIndent": (), + "QXmlStreamWriter.codec": (), + "QXmlStreamWriter.device": (), + "QXmlStreamWriter.hasError": (), + "QXmlStreamWriter.setAutoFormatting": ('bool',), + "QXmlStreamWriter.setAutoFormattingIndent": ('int',), + "QXmlStreamWriter.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QXmlStreamWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamWriter.writeAttribute": [('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamWriter.writeAttributes": ('PySide2.QtCore.QXmlStreamAttributes',), + "QXmlStreamWriter.writeCDATA": ('str',), + "QXmlStreamWriter.writeCharacters": ('str',), + "QXmlStreamWriter.writeComment": ('str',), + "QXmlStreamWriter.writeCurrentToken": ('PySide2.QtCore.QXmlStreamReader',), + "QXmlStreamWriter.writeDTD": ('str',), + "QXmlStreamWriter.writeDefaultNamespace": ('str',), + "QXmlStreamWriter.writeEmptyElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeEndDocument": (), + "QXmlStreamWriter.writeEndElement": (), + "QXmlStreamWriter.writeEntityReference": ('str',), + "QXmlStreamWriter.writeNamespace": ('str', 'str'), + "QXmlStreamWriter.writeProcessingInstruction": ('str', 'str'), + "QXmlStreamWriter.writeStartDocument": [(), ('str',), ('str', 'bool')], + "QXmlStreamWriter.writeStartElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeTextElement": [('str', 'str'), ('str', 'str', 'str')], + + # class PySide2.QtCore.Qt: + + # class PySide2.QtCore.QtMsgType: + + # class PySide2.QtCore.Signal: + + # class PySide2.QtCore.Slot: + }) + +# Module PySide2.QtGui +if "PySide2.QtGui" in sys.modules: + dict.update({ + + # class PySide2.QtGui.QAbstractOpenGLFunctions: + "QAbstractOpenGLFunctions.__init__": (), + "QAbstractOpenGLFunctions.initializeOpenGLFunctions": (), + "QAbstractOpenGLFunctions.isInitialized": (), + "QAbstractOpenGLFunctions.owningContext": (), + "QAbstractOpenGLFunctions.setOwningContext": ('PySide2.QtGui.QOpenGLContext',), + + # class PySide2.QtGui.QAbstractTextDocumentLayout: + "QAbstractTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QAbstractTextDocumentLayout.anchorAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QAbstractTextDocumentLayout.document": (), + "QAbstractTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QAbstractTextDocumentLayout.documentSize": (), + "QAbstractTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QAbstractTextDocumentLayout.drawInlineObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.format": ('int',), + "QAbstractTextDocumentLayout.formatAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.formatIndex": ('int',), + "QAbstractTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QAbstractTextDocumentLayout.handlerForObject": ('int',), + "QAbstractTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QAbstractTextDocumentLayout.imageAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.pageCount": (), + "QAbstractTextDocumentLayout.paintDevice": (), + "QAbstractTextDocumentLayout.positionInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.registerHandler": ('int', 'PySide2.QtCore.QObject'), + "QAbstractTextDocumentLayout.resizeInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.setPaintDevice": ('PySide2.QtGui.QPaintDevice',), + "QAbstractTextDocumentLayout.unregisterHandler": ('int', 'PySide2.QtCore.QObject'), + + # class PySide2.QtGui.QAccessible: + "QAccessible.__copy__": (), + "QAccessible.accessibleInterface": ('int',), + "QAccessible.cleanup": (), + "QAccessible.deleteAccessibleInterface": ('int',), + "QAccessible.isActive": (), + "QAccessible.qAccessibleTextBoundaryHelper": ('PySide2.QtGui.QTextCursor', 'PySide2.QtGui.QAccessible.TextBoundaryType'), + "QAccessible.queryAccessibleInterface": ('PySide2.QtCore.QObject',), + "QAccessible.registerAccessibleInterface": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessible.setActive": ('bool',), + "QAccessible.setRootObject": ('PySide2.QtCore.QObject',), + "QAccessible.uniqueId": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessible.updateAccessibility": ('PySide2.QtGui.QAccessibleEvent',), + + # class PySide2.QtGui.QAccessibleEditableTextInterface: + "QAccessibleEditableTextInterface.__init__": (), + "QAccessibleEditableTextInterface.deleteText": ('int', 'int'), + "QAccessibleEditableTextInterface.insertText": ('int', 'str'), + "QAccessibleEditableTextInterface.replaceText": ('int', 'int', 'str'), + + # class PySide2.QtGui.QAccessibleEvent: + "QAccessibleEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessible.Event'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessible.Event')], + "QAccessibleEvent.accessibleInterface": (), + "QAccessibleEvent.child": (), + "QAccessibleEvent.object": (), + "QAccessibleEvent.setChild": ('int',), + "QAccessibleEvent.type": (), + "QAccessibleEvent.uniqueId": (), + + # class PySide2.QtGui.QAccessibleInterface: + "QAccessibleInterface.__init__": (), + "QAccessibleInterface.backgroundColor": (), + "QAccessibleInterface.child": ('int',), + "QAccessibleInterface.childAt": ('int', 'int'), + "QAccessibleInterface.childCount": (), + "QAccessibleInterface.editableTextInterface": (), + "QAccessibleInterface.focusChild": (), + "QAccessibleInterface.foregroundColor": (), + "QAccessibleInterface.indexOfChild": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessibleInterface.interface_cast": ('PySide2.QtGui.QAccessible.InterfaceType',), + "QAccessibleInterface.isValid": (), + "QAccessibleInterface.object": (), + "QAccessibleInterface.parent": (), + "QAccessibleInterface.rect": (), + "QAccessibleInterface.relations": ('PySide2.libpyside.Relation',), + "QAccessibleInterface.role": (), + "QAccessibleInterface.setText": ('PySide2.QtGui.QAccessible.Text', 'str'), + "QAccessibleInterface.state": (), + "QAccessibleInterface.tableCellInterface": (), + "QAccessibleInterface.text": ('PySide2.QtGui.QAccessible.Text',), + "QAccessibleInterface.textInterface": (), + "QAccessibleInterface.valueInterface": (), + "QAccessibleInterface.virtual_hook": ('int', 'int'), + "QAccessibleInterface.window": (), + + # class PySide2.QtGui.QAccessibleObject: + "QAccessibleObject.__init__": ('PySide2.QtCore.QObject',), + "QAccessibleObject.childAt": ('int', 'int'), + "QAccessibleObject.isValid": (), + "QAccessibleObject.object": (), + "QAccessibleObject.rect": (), + "QAccessibleObject.setText": ('PySide2.QtGui.QAccessible.Text', 'str'), + + # class PySide2.QtGui.QAccessibleStateChangeEvent: + "QAccessibleStateChangeEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessible.State'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessible.State')], + "QAccessibleStateChangeEvent.changedStates": (), + + # class PySide2.QtGui.QAccessibleTableCellInterface: + "QAccessibleTableCellInterface.__init__": (), + "QAccessibleTableCellInterface.columnExtent": (), + "QAccessibleTableCellInterface.columnHeaderCells": (), + "QAccessibleTableCellInterface.columnIndex": (), + "QAccessibleTableCellInterface.isSelected": (), + "QAccessibleTableCellInterface.rowExtent": (), + "QAccessibleTableCellInterface.rowHeaderCells": (), + "QAccessibleTableCellInterface.rowIndex": (), + "QAccessibleTableCellInterface.table": (), + + # class PySide2.QtGui.QAccessibleTableModelChangeEvent: + "QAccessibleTableModelChangeEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessibleTableModelChangeEvent.ModelChangeType'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessibleTableModelChangeEvent.ModelChangeType')], + "QAccessibleTableModelChangeEvent.firstColumn": (), + "QAccessibleTableModelChangeEvent.firstRow": (), + "QAccessibleTableModelChangeEvent.lastColumn": (), + "QAccessibleTableModelChangeEvent.lastRow": (), + "QAccessibleTableModelChangeEvent.modelChangeType": (), + "QAccessibleTableModelChangeEvent.setFirstColumn": ('int',), + "QAccessibleTableModelChangeEvent.setFirstRow": ('int',), + "QAccessibleTableModelChangeEvent.setLastColumn": ('int',), + "QAccessibleTableModelChangeEvent.setLastRow": ('int',), + "QAccessibleTableModelChangeEvent.setModelChangeType": ('PySide2.QtGui.QAccessibleTableModelChangeEvent.ModelChangeType',), + + # class PySide2.QtGui.QAccessibleTextCursorEvent: + "QAccessibleTextCursorEvent.__init__": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtGui.QAccessibleInterface', 'int')], + "QAccessibleTextCursorEvent.cursorPosition": (), + "QAccessibleTextCursorEvent.setCursorPosition": ('int',), + + # class PySide2.QtGui.QAccessibleTextInsertEvent: + "QAccessibleTextInsertEvent.__init__": [('PySide2.QtCore.QObject', 'int', 'str'), ('PySide2.QtGui.QAccessibleInterface', 'int', 'str')], + "QAccessibleTextInsertEvent.changePosition": (), + "QAccessibleTextInsertEvent.textInserted": (), + + # class PySide2.QtGui.QAccessibleTextInterface: + "QAccessibleTextInterface.__init__": (), + "QAccessibleTextInterface.addSelection": ('int', 'int'), + "QAccessibleTextInterface.attributes": ('int', 'int', 'int'), + "QAccessibleTextInterface.characterCount": (), + "QAccessibleTextInterface.characterRect": ('int',), + "QAccessibleTextInterface.cursorPosition": (), + "QAccessibleTextInterface.offsetAtPoint": ('PySide2.QtCore.QPoint',), + "QAccessibleTextInterface.removeSelection": ('int',), + "QAccessibleTextInterface.scrollToSubstring": ('int', 'int'), + "QAccessibleTextInterface.selection": ('int', 'int', 'int'), + "QAccessibleTextInterface.selectionCount": (), + "QAccessibleTextInterface.setCursorPosition": ('int',), + "QAccessibleTextInterface.setSelection": ('int', 'int', 'int'), + "QAccessibleTextInterface.text": ('int', 'int'), + "QAccessibleTextInterface.textAfterOffset": ('int', 'PySide2.QtGui.QAccessible.TextBoundaryType', 'int', 'int'), + "QAccessibleTextInterface.textAtOffset": ('int', 'PySide2.QtGui.QAccessible.TextBoundaryType', 'int', 'int'), + "QAccessibleTextInterface.textBeforeOffset": ('int', 'PySide2.QtGui.QAccessible.TextBoundaryType', 'int', 'int'), + + # class PySide2.QtGui.QAccessibleTextRemoveEvent: + "QAccessibleTextRemoveEvent.__init__": [('PySide2.QtCore.QObject', 'int', 'str'), ('PySide2.QtGui.QAccessibleInterface', 'int', 'str')], + "QAccessibleTextRemoveEvent.changePosition": (), + "QAccessibleTextRemoveEvent.textRemoved": (), + + # class PySide2.QtGui.QAccessibleTextSelectionEvent: + "QAccessibleTextSelectionEvent.__init__": [('PySide2.QtCore.QObject', 'int', 'int'), ('PySide2.QtGui.QAccessibleInterface', 'int', 'int')], + "QAccessibleTextSelectionEvent.selectionEnd": (), + "QAccessibleTextSelectionEvent.selectionStart": (), + "QAccessibleTextSelectionEvent.setSelection": ('int', 'int'), + + # class PySide2.QtGui.QAccessibleTextUpdateEvent: + "QAccessibleTextUpdateEvent.__init__": [('PySide2.QtCore.QObject', 'int', 'str', 'str'), ('PySide2.QtGui.QAccessibleInterface', 'int', 'str', 'str')], + "QAccessibleTextUpdateEvent.changePosition": (), + "QAccessibleTextUpdateEvent.textInserted": (), + "QAccessibleTextUpdateEvent.textRemoved": (), + + # class PySide2.QtGui.QAccessibleValueChangeEvent: + "QAccessibleValueChangeEvent.__init__": [('PySide2.QtCore.QObject', 'Any'), ('PySide2.QtGui.QAccessibleInterface', 'Any')], + "QAccessibleValueChangeEvent.setValue": ('Any',), + "QAccessibleValueChangeEvent.value": (), + + # class PySide2.QtGui.QAccessibleValueInterface: + "QAccessibleValueInterface.__init__": (), + "QAccessibleValueInterface.currentValue": (), + "QAccessibleValueInterface.maximumValue": (), + "QAccessibleValueInterface.minimumStepSize": (), + "QAccessibleValueInterface.minimumValue": (), + "QAccessibleValueInterface.setCurrentValue": ('Any',), + + # class PySide2.QtGui.QActionEvent: + + # class PySide2.QtGui.QBackingStore: + "QBackingStore.__init__": ('PySide2.QtGui.QWindow',), + "QBackingStore.beginPaint": ('PySide2.QtGui.QRegion',), + "QBackingStore.endPaint": (), + "QBackingStore.flush": ('PySide2.QtGui.QRegion', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint'), + "QBackingStore.hasStaticContents": (), + "QBackingStore.paintDevice": (), + "QBackingStore.resize": ('PySide2.QtCore.QSize',), + "QBackingStore.scroll": ('PySide2.QtGui.QRegion', 'int', 'int'), + "QBackingStore.setStaticContents": ('PySide2.QtGui.QRegion',), + "QBackingStore.size": (), + "QBackingStore.staticContents": (), + "QBackingStore.window": (), + + # class PySide2.QtGui.QBitmap: + "QBitmap.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str')], + "QBitmap.__copy__": (), + "QBitmap.clear": (), + "QBitmap.fromData": ('PySide2.QtCore.QSize', 'Union[str, int]', 'PySide2.QtGui.QImage.Format'), + "QBitmap.fromImage": ('PySide2.QtGui.QImage', 'PySide2.libpyside.ImageConversionFlags'), + "QBitmap.swap": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',)], + "QBitmap.transformed": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform',)], + + # class PySide2.QtGui.QBrush: + "QBrush.__init__": [(), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QBrush',), ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QGradient',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',)], + "QBrush.__copy__": (), + "QBrush.color": (), + "QBrush.gradient": (), + "QBrush.isOpaque": (), + "QBrush.matrix": (), + "QBrush.setColor": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',)], + "QBrush.setMatrix": ('PySide2.QtGui.QMatrix',), + "QBrush.setStyle": ('PySide2.QtCore.Qt.BrushStyle',), + "QBrush.setTexture": ('PySide2.QtGui.QPixmap',), + "QBrush.setTextureImage": ('PySide2.QtGui.QImage',), + "QBrush.setTransform": ('PySide2.QtGui.QTransform',), + "QBrush.style": (), + "QBrush.swap": ('PySide2.QtGui.QBrush',), + "QBrush.texture": (), + "QBrush.textureImage": (), + "QBrush.transform": (), + + # class PySide2.QtGui.QClipboard: + "QClipboard.clear": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.image": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.mimeData": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.ownsClipboard": (), + "QClipboard.ownsFindBuffer": (), + "QClipboard.ownsSelection": (), + "QClipboard.pixmap": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.setImage": ('PySide2.QtGui.QImage', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setText": ('str', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.supportsFindBuffer": (), + "QClipboard.supportsSelection": (), + "QClipboard.text": [('PySide2.QtGui.QClipboard.Mode',), ('str', 'PySide2.QtGui.QClipboard.Mode')], + + # class PySide2.QtGui.QCloseEvent: + "QCloseEvent.__init__": (), + + # class PySide2.QtGui.QColor: + "QColor.__init__": [(), ('Any',), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',), ('int', 'int', 'int', 'int'), ('str',)], + "QColor.__copy__": (), + "QColor.__reduce__": (), + "QColor.__setstate__": ('object',), + "QColor.alpha": (), + "QColor.alphaF": (), + "QColor.black": (), + "QColor.blackF": (), + "QColor.blue": (), + "QColor.blueF": (), + "QColor.colorNames": (), + "QColor.convertTo": ('PySide2.QtGui.QColor.Spec',), + "QColor.cyan": (), + "QColor.cyanF": (), + "QColor.dark": ('int',), + "QColor.darker": ('int',), + "QColor.fromCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.fromCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.fromHsl": ('int', 'int', 'int', 'int'), + "QColor.fromHslF": ('float', 'float', 'float', 'float'), + "QColor.fromHsv": ('int', 'int', 'int', 'int'), + "QColor.fromHsvF": ('float', 'float', 'float', 'float'), + "QColor.fromRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.fromRgbF": ('float', 'float', 'float', 'float'), + "QColor.fromRgba": ('int',), + "QColor.fromRgba64": ('int', 'int', 'int', 'int'), + "QColor.getCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.getCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.getHsl": ('int', 'int', 'int', 'int'), + "QColor.getHslF": ('float', 'float', 'float', 'float'), + "QColor.getHsv": ('int', 'int', 'int', 'int'), + "QColor.getHsvF": ('float', 'float', 'float', 'float'), + "QColor.getRgb": ('int', 'int', 'int', 'int'), + "QColor.getRgbF": ('float', 'float', 'float', 'float'), + "QColor.green": (), + "QColor.greenF": (), + "QColor.hslHue": (), + "QColor.hslHueF": (), + "QColor.hslSaturation": (), + "QColor.hslSaturationF": (), + "QColor.hsvHue": (), + "QColor.hsvHueF": (), + "QColor.hsvSaturation": (), + "QColor.hsvSaturationF": (), + "QColor.hue": (), + "QColor.hueF": (), + "QColor.isValid": (), + "QColor.isValidColor": ('str',), + "QColor.light": ('int',), + "QColor.lighter": ('int',), + "QColor.lightness": (), + "QColor.lightnessF": (), + "QColor.magenta": (), + "QColor.magentaF": (), + "QColor.name": [(), ('PySide2.QtGui.QColor.NameFormat',)], + "QColor.red": (), + "QColor.redF": (), + "QColor.rgb": (), + "QColor.rgba": (), + "QColor.saturation": (), + "QColor.saturationF": (), + "QColor.setAlpha": ('int',), + "QColor.setAlphaF": ('float',), + "QColor.setBlue": ('int',), + "QColor.setBlueF": ('float',), + "QColor.setCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.setCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.setGreen": ('int',), + "QColor.setGreenF": ('float',), + "QColor.setHsl": ('int', 'int', 'int', 'int'), + "QColor.setHslF": ('float', 'float', 'float', 'float'), + "QColor.setHsv": ('int', 'int', 'int', 'int'), + "QColor.setHsvF": ('float', 'float', 'float', 'float'), + "QColor.setNamedColor": ('str',), + "QColor.setRed": ('int',), + "QColor.setRedF": ('float',), + "QColor.setRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.setRgbF": ('float', 'float', 'float', 'float'), + "QColor.setRgba": ('int',), + "QColor.spec": (), + "QColor.toCmyk": (), + "QColor.toHsl": (), + "QColor.toHsv": (), + "QColor.toRgb": (), + "QColor.toTuple": (), + "QColor.value": (), + "QColor.valueF": (), + "QColor.yellow": (), + "QColor.yellowF": (), + + # class PySide2.QtGui.QConicalGradient: + "QConicalGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QConicalGradient',), ('float', 'float', 'float')], + "QConicalGradient.__copy__": (), + "QConicalGradient.angle": (), + "QConicalGradient.center": (), + "QConicalGradient.setAngle": ('float',), + "QConicalGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + + # class PySide2.QtGui.QContextMenuEvent: + "QContextMenuEvent.__init__": [('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'PySide2.libpyside.KeyboardModifiers')], + "QContextMenuEvent.globalPos": (), + "QContextMenuEvent.globalX": (), + "QContextMenuEvent.global""Y": (), + "QContextMenuEvent.pos": (), + "QContextMenuEvent.reason": (), + "QContextMenuEvent.x": (), + "QContextMenuEvent.y": (), + + # class PySide2.QtGui.QCursor: + "QCursor.__init__": [(), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtGui.QBitmap', 'PySide2.QtGui.QBitmap', 'int', 'int'), ('PySide2.QtGui.QCursor',), ('PySide2.QtGui.QPixmap', 'int', 'int')], + "QCursor.__copy__": (), + "QCursor.bitmap": (), + "QCursor.hotSpot": (), + "QCursor.mask": (), + "QCursor.pixmap": (), + "QCursor.pos": [(), ('PySide2.QtGui.QScreen',)], + "QCursor.setPos": [('PySide2.QtCore.QPoint',), ('PySide2.QtGui.QScreen', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QScreen', 'int', 'int'), ('int', 'int')], + "QCursor.setShape": ('PySide2.QtCore.Qt.CursorShape',), + "QCursor.shape": (), + "QCursor.swap": ('PySide2.QtGui.QCursor',), + + # class PySide2.QtGui.QDesktopServices: + "QDesktopServices.__init__": (), + "QDesktopServices.openUrl": ('PySide2.QtCore.QUrl',), + "QDesktopServices.setUrlHandler": ('str', 'PySide2.QtCore.QObject', 'str'), + "QDesktopServices.unsetUrlHandler": ('str',), + + # class PySide2.QtGui.QDoubleValidator: + "QDoubleValidator.__init__": [('PySide2.QtCore.QObject',), ('float', 'float', 'int', 'PySide2.QtCore.QObject')], + "QDoubleValidator.bottom": (), + "QDoubleValidator.decimals": (), + "QDoubleValidator.notation": (), + "QDoubleValidator.setBottom": ('float',), + "QDoubleValidator.setDecimals": ('int',), + "QDoubleValidator.setNotation": ('PySide2.QtGui.QDoubleValidator.Notation',), + "QDoubleValidator.setRange": ('float', 'float', 'int'), + "QDoubleValidator.setTop": ('float',), + "QDoubleValidator.top": (), + "QDoubleValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QDrag: + "QDrag.__init__": ('PySide2.QtCore.QObject',), + "QDrag.cancel": (), + "QDrag.defaultAction": (), + "QDrag.dragCursor": ('PySide2.QtCore.Qt.DropAction',), + "QDrag.exec_": [('PySide2.libpyside.DropActions',), ('PySide2.libpyside.DropActions', 'PySide2.QtCore.Qt.DropAction')], + "QDrag.hotSpot": (), + "QDrag.mimeData": (), + "QDrag.pixmap": (), + "QDrag.setDragCursor": ('PySide2.QtGui.QPixmap', 'PySide2.QtCore.Qt.DropAction'), + "QDrag.setHotSpot": ('PySide2.QtCore.QPoint',), + "QDrag.setMimeData": ('PySide2.QtCore.QMimeData',), + "QDrag.setPixmap": ('PySide2.QtGui.QPixmap',), + "QDrag.source": (), + "QDrag.start": ('PySide2.libpyside.DropActions',), + "QDrag.supportedActions": (), + "QDrag.target": (), + + # class PySide2.QtGui.QDragEnterEvent: + "QDragEnterEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.libpyside.DropActions', 'PySide2.QtCore.QMimeData', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), + + # class PySide2.QtGui.QDragLeaveEvent: + "QDragLeaveEvent.__init__": (), + + # class PySide2.QtGui.QDragMoveEvent: + "QDragMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.libpyside.DropActions', 'PySide2.QtCore.QMimeData', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDragMoveEvent.accept": [(), ('PySide2.QtCore.QRect',)], + "QDragMoveEvent.answerRect": (), + "QDragMoveEvent.ignore": [(), ('PySide2.QtCore.QRect',)], + + # class PySide2.QtGui.QDropEvent: + "QDropEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.libpyside.DropActions', 'PySide2.QtCore.QMimeData', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDropEvent.acceptProposedAction": (), + "QDropEvent.dropAction": (), + "QDropEvent.keyboardModifiers": (), + "QDropEvent.mimeData": (), + "QDropEvent.mouseButtons": (), + "QDropEvent.pos": (), + "QDropEvent.posF": (), + "QDropEvent.possibleActions": (), + "QDropEvent.proposedAction": (), + "QDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QDropEvent.source": (), + + # class PySide2.QtGui.QEnterEvent: + "QEnterEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEnterEvent.globalPos": (), + "QEnterEvent.globalX": (), + "QEnterEvent.global""Y": (), + "QEnterEvent.localPos": (), + "QEnterEvent.pos": (), + "QEnterEvent.screenPos": (), + "QEnterEvent.windowPos": (), + "QEnterEvent.x": (), + "QEnterEvent.y": (), + + # class PySide2.QtGui.QExposeEvent: + "QExposeEvent.__init__": ('PySide2.QtGui.QRegion',), + "QExposeEvent.region": (), + + # class PySide2.QtGui.QFileOpenEvent: + "QFileOpenEvent.__init__": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileOpenEvent.file": (), + "QFileOpenEvent.openFile": ('PySide2.QtCore.QFile', 'PySide2.libpyside.OpenMode'), + "QFileOpenEvent.url": (), + + # class PySide2.QtGui.QFocusEvent: + "QFocusEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.FocusReason'), + "QFocusEvent.gotFocus": (), + "QFocusEvent.lostFocus": (), + "QFocusEvent.reason": (), + + # class PySide2.QtGui.QFont: + "QFont.__init__": [(), ('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('str', 'int', 'int', 'bool')], + "QFont.__copy__": (), + "QFont.bold": (), + "QFont.cacheStatistics": (), + "QFont.capitalization": (), + "QFont.cleanup": (), + "QFont.defaultFamily": (), + "QFont.exactMatch": (), + "QFont.family": (), + "QFont.fixedPitch": (), + "QFont.fromString": ('str',), + "QFont.hintingPreference": (), + "QFont.initialize": (), + "QFont.insertSubstitution": ('str', 'str'), + "QFont.insertSubstitutions": ('str', 'List[str]'), + "QFont.isCopyOf": ('PySide2.QtGui.QFont',), + "QFont.italic": (), + "QFont.kerning": (), + "QFont.key": (), + "QFont.lastResortFamily": (), + "QFont.lastResortFont": (), + "QFont.letterSpacing": (), + "QFont.letterSpacingType": (), + "QFont.overline": (), + "QFont.pixelSize": (), + "QFont.pointSize": (), + "QFont.pointSizeF": (), + "QFont.rawMode": (), + "QFont.rawName": (), + "QFont.removeSubstitutions": ('str',), + "QFont.resolve": [(), ('PySide2.QtGui.QFont',), ('int',)], + "QFont.setBold": ('bool',), + "QFont.setCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QFont.setFamily": ('str',), + "QFont.setFixedPitch": ('bool',), + "QFont.setHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QFont.setItalic": ('bool',), + "QFont.setKerning": ('bool',), + "QFont.setLetterSpacing": ('PySide2.QtGui.QFont.SpacingType', 'float'), + "QFont.setOverline": ('bool',), + "QFont.setPixelSize": ('int',), + "QFont.setPointSize": ('int',), + "QFont.setPointSizeF": ('float',), + "QFont.setRawMode": ('bool',), + "QFont.setRawName": ('str',), + "QFont.setStretch": ('int',), + "QFont.setStrikeOut": ('bool',), + "QFont.setStyle": ('PySide2.QtGui.QFont.Style',), + "QFont.setStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QFont.setStyleName": ('str',), + "QFont.setStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QFont.setUnderline": ('bool',), + "QFont.setWeight": ('int',), + "QFont.setWordSpacing": ('float',), + "QFont.stretch": (), + "QFont.strikeOut": (), + "QFont.style": (), + "QFont.styleHint": (), + "QFont.styleName": (), + "QFont.styleStrategy": (), + "QFont.substitute": ('str',), + "QFont.substitutes": ('str',), + "QFont.substitutions": (), + "QFont.swap": ('PySide2.QtGui.QFont',), + "QFont.toString": (), + "QFont.underline": (), + "QFont.weight": (), + "QFont.wordSpacing": (), + + # class PySide2.QtGui.QFontDatabase: + "QFontDatabase.__init__": [(), ('PySide2.QtGui.QFontDatabase',)], + "QFontDatabase.__copy__": (), + "QFontDatabase.addApplicationFont": ('str',), + "QFontDatabase.addApplicationFontFromData": ('PySide2.QtCore.QByteArray',), + "QFontDatabase.applicationFontFamilies": ('int',), + "QFontDatabase.bold": ('str', 'str'), + "QFontDatabase.families": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.font": ('str', 'str', 'int'), + "QFontDatabase.hasFamily": ('str',), + "QFontDatabase.isBitmapScalable": ('str', 'str'), + "QFontDatabase.isFixedPitch": ('str', 'str'), + "QFontDatabase.isPrivateFamily": ('str',), + "QFontDatabase.isScalable": ('str', 'str'), + "QFontDatabase.isSmoothlyScalable": ('str', 'str'), + "QFontDatabase.italic": ('str', 'str'), + "QFontDatabase.pointSizes": ('str', 'str'), + "QFontDatabase.removeAllApplicationFonts": (), + "QFontDatabase.removeApplicationFont": ('int',), + "QFontDatabase.smoothSizes": ('str', 'str'), + "QFontDatabase.standardSizes": (), + "QFontDatabase.styleString": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontDatabase.styles": ('str',), + "QFontDatabase.supportsThreadedFontRendering": (), + "QFontDatabase.systemFont": ('PySide2.QtGui.QFontDatabase.SystemFont',), + "QFontDatabase.weight": ('str', 'str'), + "QFontDatabase.writingSystemName": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystemSample": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystems": [(), ('str',)], + + # class PySide2.QtGui.QFontInfo: + "QFontInfo.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontInfo.__copy__": (), + "QFontInfo.bold": (), + "QFontInfo.exactMatch": (), + "QFontInfo.family": (), + "QFontInfo.fixedPitch": (), + "QFontInfo.italic": (), + "QFontInfo.overline": (), + "QFontInfo.pixelSize": (), + "QFontInfo.pointSize": (), + "QFontInfo.pointSizeF": (), + "QFontInfo.rawMode": (), + "QFontInfo.strikeOut": (), + "QFontInfo.style": (), + "QFontInfo.styleHint": (), + "QFontInfo.styleName": (), + "QFontInfo.swap": ('PySide2.QtGui.QFontInfo',), + "QFontInfo.underline": (), + "QFontInfo.weight": (), + + # class PySide2.QtGui.QFontMetrics: + "QFontMetrics.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',)], + "QFontMetrics.__copy__": (), + "QFontMetrics.ascent": (), + "QFontMetrics.averageCharWidth": (), + "QFontMetrics.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetrics.boundingRectChar": ('Union[str, int]',), + "QFontMetrics.capHeight": (), + "QFontMetrics.charWidth": ('str', 'int'), + "QFontMetrics.descent": (), + "QFontMetrics.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'int', 'int'), + "QFontMetrics.height": (), + "QFontMetrics.horizontalAdvance": [('Union[str, int]',), ('str', 'int')], + "QFontMetrics.inFont": ('Union[str, int]',), + "QFontMetrics.inFontUcs4": ('int',), + "QFontMetrics.leading": (), + "QFontMetrics.leftBearing": ('Union[str, int]',), + "QFontMetrics.lineSpacing": (), + "QFontMetrics.lineWidth": (), + "QFontMetrics.maxWidth": (), + "QFontMetrics.minLeftBearing": (), + "QFontMetrics.minRightBearing": (), + "QFontMetrics.overlinePos": (), + "QFontMetrics.rightBearing": ('Union[str, int]',), + "QFontMetrics.size": ('int', 'str', 'int', 'int'), + "QFontMetrics.strikeOutPos": (), + "QFontMetrics.swap": ('PySide2.QtGui.QFontMetrics',), + "QFontMetrics.tightBoundingRect": ('str',), + "QFontMetrics.underlinePos": (), + "QFontMetrics.width": [('str', 'int'), ('str', 'int', 'int')], + "QFontMetrics.widthChar": ('Union[str, int]',), + "QFontMetrics.xHeight": (), + + # class PySide2.QtGui.QFontMetricsF: + "QFontMetricsF.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',), ('PySide2.QtGui.QFontMetricsF',)], + "QFontMetricsF.__copy__": (), + "QFontMetricsF.ascent": (), + "QFontMetricsF.averageCharWidth": (), + "QFontMetricsF.boundingRect": [('PySide2.QtCore.QRectF', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetricsF.boundingRectChar": ('Union[str, int]',), + "QFontMetricsF.capHeight": (), + "QFontMetricsF.descent": (), + "QFontMetricsF.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'float', 'int'), + "QFontMetricsF.height": (), + "QFontMetricsF.horizontalAdvance": [('Union[str, int]',), ('str', 'int')], + "QFontMetricsF.inFont": ('Union[str, int]',), + "QFontMetricsF.inFontUcs4": ('int',), + "QFontMetricsF.leading": (), + "QFontMetricsF.leftBearing": ('Union[str, int]',), + "QFontMetricsF.lineSpacing": (), + "QFontMetricsF.lineWidth": (), + "QFontMetricsF.maxWidth": (), + "QFontMetricsF.minLeftBearing": (), + "QFontMetricsF.minRightBearing": (), + "QFontMetricsF.overlinePos": (), + "QFontMetricsF.rightBearing": ('Union[str, int]',), + "QFontMetricsF.size": ('int', 'str', 'int', 'int'), + "QFontMetricsF.strikeOutPos": (), + "QFontMetricsF.swap": ('PySide2.QtGui.QFontMetricsF',), + "QFontMetricsF.tightBoundingRect": ('str',), + "QFontMetricsF.underlinePos": (), + "QFontMetricsF.width": ('str',), + "QFontMetricsF.widthChar": ('Union[str, int]',), + "QFontMetricsF.xHeight": (), + + # class PySide2.QtGui.QGradient: + "QGradient.__init__": [(), ('PySide2.QtGui.QGradient',)], + "QGradient.__copy__": (), + "QGradient.coordinateMode": (), + "QGradient.interpolationMode": (), + "QGradient.setColorAt": ('float', 'PySide2.QtGui.QColor'), + "QGradient.setCoordinateMode": ('PySide2.QtGui.QGradient.CoordinateMode',), + "QGradient.setInterpolationMode": ('PySide2.QtGui.QGradient.InterpolationMode',), + "QGradient.setSpread": ('PySide2.QtGui.QGradient.Spread',), + "QGradient.setStops": ('list',), + "QGradient.spread": (), + "QGradient.stops": (), + "QGradient.type": (), + + # class PySide2.QtGui.QGuiApplication: + "QGuiApplication.__init__": [(), ('List[str]',)], + "QGuiApplication.allWindows": (), + "QGuiApplication.applicationDisplayName": (), + "QGuiApplication.applicationState": (), + "QGuiApplication.changeOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.clipboard": (), + "QGuiApplication.desktopFileName": (), + "QGuiApplication.desktopSettingsAware": (), + "QGuiApplication.devicePixelRatio": (), + "QGuiApplication.event": ('PySide2.QtCore.QEvent',), + "QGuiApplication.exec_": (), + "QGuiApplication.focusObject": (), + "QGuiApplication.focusWindow": (), + "QGuiApplication.font": (), + "QGuiApplication.inputMethod": (), + "QGuiApplication.isFallbackSessionManagementEnabled": (), + "QGuiApplication.isLeftToRight": (), + "QGuiApplication.isRightToLeft": (), + "QGuiApplication.isSavingSession": (), + "QGuiApplication.isSessionRestored": (), + "QGuiApplication.keyboardModifiers": (), + "QGuiApplication.layoutDirection": (), + "QGuiApplication.modalWindow": (), + "QGuiApplication.mouseButtons": (), + "QGuiApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGuiApplication.overrideCursor": (), + "QGuiApplication.palette": (), + "QGuiApplication.platformName": (), + "QGuiApplication.primaryScreen": (), + "QGuiApplication.queryKeyboardModifiers": (), + "QGuiApplication.quitOnLastWindowClosed": (), + "QGuiApplication.restoreOverrideCursor": (), + "QGuiApplication.screenAt": ('PySide2.QtCore.QPoint',), + "QGuiApplication.screens": (), + "QGuiApplication.sessionId": (), + "QGuiApplication.sessionKey": (), + "QGuiApplication.setApplicationDisplayName": ('str',), + "QGuiApplication.setDesktopFileName": ('str',), + "QGuiApplication.setDesktopSettingsAware": ('bool',), + "QGuiApplication.setFallbackSessionManagementEnabled": ('bool',), + "QGuiApplication.setFont": ('PySide2.QtGui.QFont',), + "QGuiApplication.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGuiApplication.setOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.setPalette": ('PySide2.QtGui.QPalette',), + "QGuiApplication.setQuitOnLastWindowClosed": ('bool',), + "QGuiApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QGuiApplication.styleHints": (), + "QGuiApplication.sync": (), + "QGuiApplication.topLevelAt": ('PySide2.QtCore.QPoint',), + "QGuiApplication.topLevelWindows": (), + "QGuiApplication.windowIcon": (), + + # class PySide2.QtGui.QHelpEvent: + "QHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QHelpEvent.globalPos": (), + "QHelpEvent.globalX": (), + "QHelpEvent.global""Y": (), + "QHelpEvent.pos": (), + "QHelpEvent.x": (), + "QHelpEvent.y": (), + + # class PySide2.QtGui.QHideEvent: + "QHideEvent.__init__": (), + + # class PySide2.QtGui.QHoverEvent: + "QHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.libpyside.KeyboardModifiers'), + "QHoverEvent.oldPos": (), + "QHoverEvent.oldPosF": (), + "QHoverEvent.pos": (), + "QHoverEvent.posF": (), + + # class PySide2.QtGui.QIcon: + "QIcon.__init__": [(), ('PySide2.QtGui.QIcon',), ('PySide2.QtGui.QIconEngine',), ('PySide2.QtGui.QPixmap',), ('str',)], + "QIcon.__copy__": (), + "QIcon.actualSize": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.cacheKey": (), + "QIcon.fallbackSearchPaths": (), + "QIcon.fromTheme": [('str',), ('str', 'PySide2.QtGui.QIcon')], + "QIcon.hasThemeIcon": ('str',), + "QIcon.isMask": (), + "QIcon.isNull": (), + "QIcon.name": (), + "QIcon.paint": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.libpyside.Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QPainter', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.pixmap": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.setFallbackSearchPaths": ('List[str]',), + "QIcon.setIsMask": ('bool',), + "QIcon.setThemeName": ('str',), + "QIcon.setThemeSearchPaths": ('List[str]',), + "QIcon.swap": ('PySide2.QtGui.QIcon',), + "QIcon.themeName": (), + "QIcon.themeSearchPaths": (), + + # class PySide2.QtGui.QIconDragEvent: + "QIconDragEvent.__init__": (), + + # class PySide2.QtGui.QIconEngine: + "QIconEngine.__init__": [(), ('PySide2.QtGui.QIconEngine',)], + "QIconEngine.actualSize": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.clone": (), + "QIconEngine.iconName": (), + "QIconEngine.isNull": (), + "QIconEngine.key": (), + "QIconEngine.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.pixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.read": ('PySide2.QtCore.QDataStream',), + "QIconEngine.scaledPixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State', 'float'), + "QIconEngine.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QImage: + "QImage.__init__": [(), ('List[str]',), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QImage.Format'), ('PySide2.QtGui.QImage',), ('Union[str, int]', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'Callable', 'int'), ('Union[str, int]', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'Callable', 'int'), ('int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'str')], + "QImage.__copy__": (), + "QImage.allGray": (), + "QImage.alphaChannel": (), + "QImage.bitPlaneCount": (), + "QImage.bits": (), + "QImage.byteCount": (), + "QImage.bytesPerLine": (), + "QImage.cacheKey": (), + "QImage.color": ('int',), + "QImage.colorCount": (), + "QImage.colorTable": (), + "QImage.constBits": (), + "QImage.constScanLine": ('int',), + "QImage.convertToFormat": [('PySide2.QtGui.QImage.Format', 'PySide2.libpyside.ImageConversionFlags'), ('PySide2.QtGui.QImage.Format', 'list', 'PySide2.libpyside.ImageConversionFlags')], + "QImage.convertToFormat_helper": ('PySide2.QtGui.QImage.Format', 'PySide2.libpyside.ImageConversionFlags'), + "QImage.convertToFormat_inplace": ('PySide2.QtGui.QImage.Format', 'PySide2.libpyside.ImageConversionFlags'), + "QImage.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QImage.createAlphaMask": ('PySide2.libpyside.ImageConversionFlags',), + "QImage.createHeuristicMask": ('bool',), + "QImage.createMaskFromColor": ('int', 'PySide2.QtCore.Qt.MaskMode'), + "QImage.depth": (), + "QImage.devType": (), + "QImage.devicePixelRatio": (), + "QImage.dotsPerMeterX": (), + "QImage.dotsPerMeterY": (), + "QImage.fill": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',)], + "QImage.format": (), + "QImage.fromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.hasAlphaChannel": (), + "QImage.height": (), + "QImage.invertPixels": ('PySide2.QtGui.QImage.InvertMode',), + "QImage.isGrayscale": (), + "QImage.isNull": (), + "QImage.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QImage.loadFromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QImage.mirrored": ('bool', 'bool'), + "QImage.mirrored_helper": ('bool', 'bool'), + "QImage.mirrored_inplace": ('bool', 'bool'), + "QImage.offset": (), + "QImage.paintEngine": (), + "QImage.pixel": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelColor": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelFormat": (), + "QImage.pixelIndex": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.rect": (), + "QImage.reinterpretAsFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.rgbSwapped": (), + "QImage.rgbSwapped_helper": (), + "QImage.rgbSwapped_inplace": (), + "QImage.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QImage.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scanLine": ('int',), + "QImage.setAlphaChannel": ('PySide2.QtGui.QImage',), + "QImage.setColor": ('int', 'int'), + "QImage.setColorCount": ('int',), + "QImage.setColorTable": ('list',), + "QImage.setDevicePixelRatio": ('float',), + "QImage.setDotsPerMeterX": ('int',), + "QImage.setDotsPerMeterY": ('int',), + "QImage.setOffset": ('PySide2.QtCore.QPoint',), + "QImage.setPixel": [('PySide2.QtCore.QPoint', 'int'), ('int', 'int', 'int')], + "QImage.setPixelColor": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QColor')], + "QImage.setText": ('str', 'str'), + "QImage.size": (), + "QImage.smoothScaled": ('int', 'int'), + "QImage.swap": ('PySide2.QtGui.QImage',), + "QImage.text": ('str',), + "QImage.textKeys": (), + "QImage.toImageFormat": ('PySide2.QtGui.QPixelFormat',), + "QImage.toPixelFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QImage.valid": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.width": (), + + # class PySide2.QtGui.QImageIOHandler: + "QImageIOHandler.__init__": (), + "QImageIOHandler.canRead": (), + "QImageIOHandler.currentImageNumber": (), + "QImageIOHandler.currentImageRect": (), + "QImageIOHandler.device": (), + "QImageIOHandler.format": (), + "QImageIOHandler.imageCount": (), + "QImageIOHandler.jumpToImage": ('int',), + "QImageIOHandler.jumpToNextImage": (), + "QImageIOHandler.loopCount": (), + "QImageIOHandler.name": (), + "QImageIOHandler.nextImageDelay": (), + "QImageIOHandler.option": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.read": ('PySide2.QtGui.QImage',), + "QImageIOHandler.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageIOHandler.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageIOHandler.setOption": ('PySide2.QtGui.QImageIOHandler.ImageOption', 'Any'), + "QImageIOHandler.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QImageReader: + "QImageReader.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageReader.autoDetectImageFormat": (), + "QImageReader.autoTransform": (), + "QImageReader.backgroundColor": (), + "QImageReader.canRead": (), + "QImageReader.clipRect": (), + "QImageReader.currentImageNumber": (), + "QImageReader.currentImageRect": (), + "QImageReader.decideFormatFromContent": (), + "QImageReader.device": (), + "QImageReader.error": (), + "QImageReader.errorString": (), + "QImageReader.fileName": (), + "QImageReader.format": (), + "QImageReader.gamma": (), + "QImageReader.imageCount": (), + "QImageReader.imageFormat": [(), ('PySide2.QtCore.QIODevice',), ('str',)], + "QImageReader.jumpToImage": ('int',), + "QImageReader.jumpToNextImage": (), + "QImageReader.loopCount": (), + "QImageReader.nextImageDelay": (), + "QImageReader.quality": (), + "QImageReader.read": (), + "QImageReader.scaledClipRect": (), + "QImageReader.scaledSize": (), + "QImageReader.setAutoDetectImageFormat": ('bool',), + "QImageReader.setAutoTransform": ('bool',), + "QImageReader.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QImageReader.setClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setDecideFormatFromContent": ('bool',), + "QImageReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageReader.setFileName": ('str',), + "QImageReader.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageReader.setGamma": ('float',), + "QImageReader.setQuality": ('int',), + "QImageReader.setScaledClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setScaledSize": ('PySide2.QtCore.QSize',), + "QImageReader.size": (), + "QImageReader.subType": (), + "QImageReader.supportedImageFormats": (), + "QImageReader.supportedMimeTypes": (), + "QImageReader.supportedSubTypes": (), + "QImageReader.supportsAnimation": (), + "QImageReader.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageReader.text": ('str',), + "QImageReader.textKeys": (), + "QImageReader.transformation": (), + + # class PySide2.QtGui.QImageWriter: + "QImageWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageWriter.canWrite": (), + "QImageWriter.compression": (), + "QImageWriter.description": (), + "QImageWriter.device": (), + "QImageWriter.error": (), + "QImageWriter.errorString": (), + "QImageWriter.fileName": (), + "QImageWriter.format": (), + "QImageWriter.gamma": (), + "QImageWriter.optimizedWrite": (), + "QImageWriter.progressiveScanWrite": (), + "QImageWriter.quality": (), + "QImageWriter.setCompression": ('int',), + "QImageWriter.setDescription": ('str',), + "QImageWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageWriter.setFileName": ('str',), + "QImageWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setGamma": ('float',), + "QImageWriter.setOptimizedWrite": ('bool',), + "QImageWriter.setProgressiveScanWrite": ('bool',), + "QImageWriter.setQuality": ('int',), + "QImageWriter.setSubType": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setText": ('str', 'str'), + "QImageWriter.setTransformation": ('PySide2.libpyside.Transformations',), + "QImageWriter.subType": (), + "QImageWriter.supportedImageFormats": (), + "QImageWriter.supportedMimeTypes": (), + "QImageWriter.supportedSubTypes": (), + "QImageWriter.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageWriter.transformation": (), + "QImageWriter.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QInputEvent: + "QInputEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.libpyside.KeyboardModifiers'), + "QInputEvent.modifiers": (), + "QInputEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QInputEvent.setTimestamp": ('int',), + "QInputEvent.timestamp": (), + + # class PySide2.QtGui.QInputMethod: + "QInputMethod.anchorRectangle": (), + "QInputMethod.commit": (), + "QInputMethod.cursorRectangle": (), + "QInputMethod.hide": (), + "QInputMethod.inputDirection": (), + "QInputMethod.inputItemClipRectangle": (), + "QInputMethod.inputItemRectangle": (), + "QInputMethod.inputItemTransform": (), + "QInputMethod.invokeAction": ('PySide2.QtGui.QInputMethod.Action', 'int'), + "QInputMethod.isAnimating": (), + "QInputMethod.isVisible": (), + "QInputMethod.keyboardRectangle": (), + "QInputMethod.locale": (), + "QInputMethod.queryFocusObject": ('PySide2.QtCore.Qt.InputMethodQuery', 'Any'), + "QInputMethod.reset": (), + "QInputMethod.setInputItemRectangle": ('PySide2.QtCore.QRectF',), + "QInputMethod.setInputItemTransform": ('PySide2.QtGui.QTransform',), + "QInputMethod.setVisible": ('bool',), + "QInputMethod.show": (), + "QInputMethod.update": ('PySide2.libpyside.InputMethodQueries',), + + # class PySide2.QtGui.QInputMethodEvent: + "QInputMethodEvent.__init__": [(), ('PySide2.QtGui.QInputMethodEvent',), ('str', 'list')], + "QInputMethodEvent.attributes": (), + "QInputMethodEvent.commitString": (), + "QInputMethodEvent.preeditString": (), + "QInputMethodEvent.replacementLength": (), + "QInputMethodEvent.replacementStart": (), + "QInputMethodEvent.setCommitString": ('str', 'int', 'int'), + + # class PySide2.QtGui.QInputMethodQueryEvent: + "QInputMethodQueryEvent.__init__": ('PySide2.libpyside.InputMethodQueries',), + "QInputMethodQueryEvent.queries": (), + "QInputMethodQueryEvent.setValue": ('PySide2.QtCore.Qt.InputMethodQuery', 'Any'), + "QInputMethodQueryEvent.value": ('PySide2.QtCore.Qt.InputMethodQuery',), + + # class PySide2.QtGui.QIntValidator: + "QIntValidator.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QIntValidator.bottom": (), + "QIntValidator.fixup": ('str',), + "QIntValidator.setBottom": ('int',), + "QIntValidator.setRange": ('int', 'int'), + "QIntValidator.setTop": ('int',), + "QIntValidator.top": (), + "QIntValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QKeyEvent: + "QKeyEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'int', 'PySide2.libpyside.KeyboardModifiers', 'int', 'int', 'int', 'str', 'bool', 'int'), ('PySide2.QtCore.QEvent.Type', 'int', 'PySide2.libpyside.KeyboardModifiers', 'str', 'bool', 'int')], + "QKeyEvent.count": (), + "QKeyEvent.isAutoRepeat": (), + "QKeyEvent.key": (), + "QKeyEvent.matches": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeyEvent.modifiers": (), + "QKeyEvent.nativeModifiers": (), + "QKeyEvent.nativeScanCode": (), + "QKeyEvent.nativeVirtualKey": (), + "QKeyEvent.text": (), + + # class PySide2.QtGui.QKeySequence: + "QKeySequence.__init__": [(), ('PySide2.QtGui.QKeySequence',), ('PySide2.QtGui.QKeySequence.StandardKey',), ('int', 'int', 'int', 'int'), ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat')], + "QKeySequence.__copy__": (), + "QKeySequence.__reduce__": (), + "QKeySequence.count": (), + "QKeySequence.fromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.isEmpty": (), + "QKeySequence.keyBindings": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeySequence.listFromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.listToString": ('list', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.matches": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.mnemonic": ('str',), + "QKeySequence.swap": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.toString": ('PySide2.QtGui.QKeySequence.SequenceFormat',), + + # class PySide2.QtGui.QLinearGradient: + "QLinearGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtGui.QLinearGradient',), ('float', 'float', 'float', 'float')], + "QLinearGradient.__copy__": (), + "QLinearGradient.finalStop": (), + "QLinearGradient.setFinalStop": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.setStart": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.start": (), + + # class PySide2.QtGui.QMatrix: + "QMatrix.__init__": [(), ('PySide2.QtGui.QMatrix',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix.__copy__": (), + "QMatrix.__reduce__": (), + "QMatrix.determinant": (), + "QMatrix.dx": (), + "QMatrix.dy": (), + "QMatrix.inverted": ('bool',), + "QMatrix.isIdentity": (), + "QMatrix.isInvertible": (), + "QMatrix.m11": (), + "QMatrix.m12": (), + "QMatrix.m21": (), + "QMatrix.m22": (), + "QMatrix.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QMatrix.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix.mapToPolygon": ('PySide2.QtCore.QRect',), + "QMatrix.reset": (), + "QMatrix.rotate": ('float',), + "QMatrix.scale": ('float', 'float'), + "QMatrix.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix.shear": ('float', 'float'), + "QMatrix.translate": ('float', 'float'), + + # class PySide2.QtGui.QMatrix2x2: + "QMatrix2x2.__init__": [('PySide2.QtGui.QMatrix2x2',), ('Sequence',)], + "QMatrix2x2.__copy__": (), + "QMatrix2x2.__reduce__": (), + "QMatrix2x2.data": (), + "QMatrix2x2.fill": ('object',), + "QMatrix2x2.transposed": (), + + # class PySide2.QtGui.QMatrix2x3: + "QMatrix2x3.__init__": [('PySide2.QtGui.QMatrix2x3',), ('Sequence',)], + "QMatrix2x3.__copy__": (), + "QMatrix2x3.__reduce__": (), + "QMatrix2x3.data": (), + "QMatrix2x3.fill": ('object',), + "QMatrix2x3.transposed": (), + + # class PySide2.QtGui.QMatrix2x4: + "QMatrix2x4.__init__": [('PySide2.QtGui.QMatrix2x4',), ('Sequence',)], + "QMatrix2x4.__copy__": (), + "QMatrix2x4.__reduce__": (), + "QMatrix2x4.data": (), + "QMatrix2x4.fill": ('object',), + "QMatrix2x4.transposed": (), + + # class PySide2.QtGui.QMatrix3x2: + "QMatrix3x2.__init__": [('PySide2.QtGui.QMatrix3x2',), ('Sequence',)], + "QMatrix3x2.__copy__": (), + "QMatrix3x2.__reduce__": (), + "QMatrix3x2.data": (), + "QMatrix3x2.fill": ('object',), + "QMatrix3x2.transposed": (), + + # class PySide2.QtGui.QMatrix3x3: + "QMatrix3x3.__init__": [('PySide2.QtGui.QMatrix3x3',), ('Sequence',)], + "QMatrix3x3.__copy__": (), + "QMatrix3x3.__reduce__": (), + "QMatrix3x3.data": (), + "QMatrix3x3.fill": ('object',), + "QMatrix3x3.transposed": (), + + # class PySide2.QtGui.QMatrix3x4: + "QMatrix3x4.__init__": [('PySide2.QtGui.QMatrix3x4',), ('Sequence',)], + "QMatrix3x4.__copy__": (), + "QMatrix3x4.__reduce__": (), + "QMatrix3x4.data": (), + "QMatrix3x4.fill": ('object',), + "QMatrix3x4.transposed": (), + + # class PySide2.QtGui.QMatrix4x2: + "QMatrix4x2.__init__": [('PySide2.QtGui.QMatrix4x2',), ('Sequence',)], + "QMatrix4x2.__copy__": (), + "QMatrix4x2.__reduce__": (), + "QMatrix4x2.data": (), + "QMatrix4x2.fill": ('object',), + "QMatrix4x2.transposed": (), + + # class PySide2.QtGui.QMatrix4x3: + "QMatrix4x3.__init__": [('PySide2.QtGui.QMatrix4x3',), ('Sequence',)], + "QMatrix4x3.__copy__": (), + "QMatrix4x3.__reduce__": (), + "QMatrix4x3.data": (), + "QMatrix4x3.fill": ('object',), + "QMatrix4x3.transposed": (), + + # class PySide2.QtGui.QMatrix4x4: + "QMatrix4x4.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float',), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.__copy__": (), + "QMatrix4x4.__reduce__": (), + "QMatrix4x4.column": ('int',), + "QMatrix4x4.copyDataTo": ('float',), + "QMatrix4x4.data": (), + "QMatrix4x4.determinant": (), + "QMatrix4x4.fill": ('float',), + "QMatrix4x4.flipCoordinates": (), + "QMatrix4x4.frustum": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix4x4.inverted": ('bool',), + "QMatrix4x4.isAffine": (), + "QMatrix4x4.isIdentity": (), + "QMatrix4x4.lookAt": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QMatrix4x4.map": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',)], + "QMatrix4x4.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix4x4.mapVector": ('PySide2.QtGui.QVector3D',), + "QMatrix4x4.normalMatrix": (), + "QMatrix4x4.optimize": (), + "QMatrix4x4.ortho": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.perspective": ('float', 'float', 'float', 'float'), + "QMatrix4x4.rotate": [('PySide2.QtGui.QQuaternion',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QMatrix4x4.row": ('int',), + "QMatrix4x4.scale": [('PySide2.QtGui.QVector3D',), ('float',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.setColumn": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setRow": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setToIdentity": (), + "QMatrix4x4.toAffine": (), + "QMatrix4x4.toTransform": [(), ('float',)], + "QMatrix4x4.translate": [('PySide2.QtGui.QVector3D',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.transposed": (), + "QMatrix4x4.viewport": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + + # class PySide2.QtGui.QMouseEvent: + "QMouseEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers')], + "QMouseEvent.button": (), + "QMouseEvent.buttons": (), + "QMouseEvent.flags": (), + "QMouseEvent.globalPos": (), + "QMouseEvent.globalX": (), + "QMouseEvent.global""Y": (), + "QMouseEvent.localPos": (), + "QMouseEvent.pos": (), + "QMouseEvent.screenPos": (), + "QMouseEvent.setLocalPos": ('PySide2.QtCore.QPointF',), + "QMouseEvent.source": (), + "QMouseEvent.windowPos": (), + "QMouseEvent.x": (), + "QMouseEvent.y": (), + + # class PySide2.QtGui.QMoveEvent: + "QMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QMoveEvent.oldPos": (), + "QMoveEvent.pos": (), + + # class PySide2.QtGui.QMovie: + "QMovie.__init__": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QMovie.backgroundColor": (), + "QMovie.cacheMode": (), + "QMovie.currentFrameNumber": (), + "QMovie.currentImage": (), + "QMovie.currentPixmap": (), + "QMovie.device": (), + "QMovie.fileName": (), + "QMovie.format": (), + "QMovie.frameCount": (), + "QMovie.frameRect": (), + "QMovie.isValid": (), + "QMovie.jumpToFrame": ('int',), + "QMovie.jumpToNextFrame": (), + "QMovie.lastError": (), + "QMovie.lastErrorString": (), + "QMovie.loopCount": (), + "QMovie.nextFrameDelay": (), + "QMovie.scaledSize": (), + "QMovie.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QMovie.setCacheMode": ('PySide2.QtGui.QMovie.CacheMode',), + "QMovie.setDevice": ('PySide2.QtCore.QIODevice',), + "QMovie.setFileName": ('str',), + "QMovie.setFormat": ('PySide2.QtCore.QByteArray',), + "QMovie.setPaused": ('bool',), + "QMovie.setScaledSize": ('PySide2.QtCore.QSize',), + "QMovie.setSpeed": ('int',), + "QMovie.speed": (), + "QMovie.start": (), + "QMovie.state": (), + "QMovie.stop": (), + "QMovie.supportedFormats": (), + + # class PySide2.QtGui.QNativeGestureEvent: + "QNativeGestureEvent.__init__": [('PySide2.QtCore.Qt.NativeGestureType', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'float', 'int', 'int'), ('PySide2.QtCore.Qt.NativeGestureType', 'PySide2.QtGui.QTouchDevice', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'float', 'int', 'int')], + "QNativeGestureEvent.device": (), + "QNativeGestureEvent.gestureType": (), + "QNativeGestureEvent.globalPos": (), + "QNativeGestureEvent.localPos": (), + "QNativeGestureEvent.pos": (), + "QNativeGestureEvent.screenPos": (), + "QNativeGestureEvent.value": (), + "QNativeGestureEvent.windowPos": (), + + # class PySide2.QtGui.QOffscreenSurface: + "QOffscreenSurface.__init__": [('PySide2.QtGui.QScreen',), ('PySide2.QtGui.QScreen', 'PySide2.QtCore.QObject')], + "QOffscreenSurface.create": (), + "QOffscreenSurface.destroy": (), + "QOffscreenSurface.format": (), + "QOffscreenSurface.isValid": (), + "QOffscreenSurface.nativeHandle": (), + "QOffscreenSurface.requestedFormat": (), + "QOffscreenSurface.screen": (), + "QOffscreenSurface.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOffscreenSurface.setNativeHandle": ('int',), + "QOffscreenSurface.setScreen": ('PySide2.QtGui.QScreen',), + "QOffscreenSurface.size": (), + "QOffscreenSurface.surfaceHandle": (), + "QOffscreenSurface.surfaceType": (), + + # class PySide2.QtGui.QOpenGLBuffer: + "QOpenGLBuffer.__init__": [(), ('PySide2.QtGui.QOpenGLBuffer',), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.allocate": [('int',), ('int', 'int')], + "QOpenGLBuffer.bind": (), + "QOpenGLBuffer.bufferId": (), + "QOpenGLBuffer.create": (), + "QOpenGLBuffer.destroy": (), + "QOpenGLBuffer.isCreated": (), + "QOpenGLBuffer.map": ('PySide2.QtGui.QOpenGLBuffer.Access',), + "QOpenGLBuffer.mapRange": ('int', 'int', 'PySide2.libpyside.RangeAccessFlags'), + "QOpenGLBuffer.read": ('int', 'int', 'int'), + "QOpenGLBuffer.release": [(), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.setUsagePattern": ('PySide2.QtGui.QOpenGLBuffer.UsagePattern',), + "QOpenGLBuffer.size": (), + "QOpenGLBuffer.type": (), + "QOpenGLBuffer.unmap": (), + "QOpenGLBuffer.usagePattern": (), + "QOpenGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtGui.QOpenGLContext: + "QOpenGLContext.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLContext.areSharing": ('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLContext.create": (), + "QOpenGLContext.currentContext": (), + "QOpenGLContext.defaultFramebufferObject": (), + "QOpenGLContext.doneCurrent": (), + "QOpenGLContext.extensions": (), + "QOpenGLContext.extraFunctions": (), + "QOpenGLContext.format": (), + "QOpenGLContext.functions": (), + "QOpenGLContext.globalShareContext": (), + "QOpenGLContext.hasExtension": ('PySide2.QtCore.QByteArray',), + "QOpenGLContext.isOpenGLES": (), + "QOpenGLContext.isValid": (), + "QOpenGLContext.makeCurrent": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.nativeHandle": (), + "QOpenGLContext.openGLModuleHandle": (), + "QOpenGLContext.openGLModuleType": (), + "QOpenGLContext.screen": (), + "QOpenGLContext.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLContext.setNativeHandle": ('Any',), + "QOpenGLContext.setScreen": ('PySide2.QtGui.QScreen',), + "QOpenGLContext.setShareContext": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLContext.shareContext": (), + "QOpenGLContext.shareGroup": (), + "QOpenGLContext.supportsThreadedOpenGL": (), + "QOpenGLContext.surface": (), + "QOpenGLContext.swapBuffers": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.versionFunctions": ('PySide2.QtGui.QOpenGLVersionProfile',), + + # class PySide2.QtGui.QOpenGLContextGroup: + "QOpenGLContextGroup.currentContextGroup": (), + "QOpenGLContextGroup.shares": (), + + # class PySide2.QtGui.QOpenGLDebugLogger: + "QOpenGLDebugLogger.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLDebugLogger.disableMessages": [('PySide2.libpyside.Sources', 'PySide2.libpyside.Types', 'PySide2.libpyside.Severities'), ('list', 'PySide2.libpyside.Sources', 'PySide2.libpyside.Types')], + "QOpenGLDebugLogger.enableMessages": [('PySide2.libpyside.Sources', 'PySide2.libpyside.Types', 'PySide2.libpyside.Severities'), ('list', 'PySide2.libpyside.Sources', 'PySide2.libpyside.Types')], + "QOpenGLDebugLogger.initialize": (), + "QOpenGLDebugLogger.isLogging": (), + "QOpenGLDebugLogger.logMessage": ('PySide2.QtGui.QOpenGLDebugMessage',), + "QOpenGLDebugLogger.loggedMessages": (), + "QOpenGLDebugLogger.loggingMode": (), + "QOpenGLDebugLogger.maximumMessageLength": (), + "QOpenGLDebugLogger.popGroup": (), + "QOpenGLDebugLogger.pushGroup": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Source'), + "QOpenGLDebugLogger.startLogging": ('PySide2.QtGui.QOpenGLDebugLogger.LoggingMode',), + "QOpenGLDebugLogger.stopLogging": (), + + # class PySide2.QtGui.QOpenGLDebugMessage: + "QOpenGLDebugMessage.__init__": [(), ('PySide2.QtGui.QOpenGLDebugMessage',)], + "QOpenGLDebugMessage.__copy__": (), + "QOpenGLDebugMessage.createApplicationMessage": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Severity', 'PySide2.QtGui.QOpenGLDebugMessage.Type'), + "QOpenGLDebugMessage.createThirdPartyMessage": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Severity', 'PySide2.QtGui.QOpenGLDebugMessage.Type'), + "QOpenGLDebugMessage.id": (), + "QOpenGLDebugMessage.message": (), + "QOpenGLDebugMessage.severity": (), + "QOpenGLDebugMessage.source": (), + "QOpenGLDebugMessage.swap": ('PySide2.QtGui.QOpenGLDebugMessage',), + "QOpenGLDebugMessage.type": (), + + # class PySide2.QtGui.QOpenGLExtraFunctions: + "QOpenGLExtraFunctions.__init__": [(), ('PySide2.QtGui.QOpenGLContext',)], + "QOpenGLExtraFunctions.glActiveShaderProgram": ('int', 'int'), + "QOpenGLExtraFunctions.glBeginQuery": ('int', 'int'), + "QOpenGLExtraFunctions.glBeginTransformFeedback": ('int',), + "QOpenGLExtraFunctions.glBindBufferBase": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glBindImageTexture": ('int', 'int', 'int', 'Union[str, int]', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glBindProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glBindSampler": ('int', 'int'), + "QOpenGLExtraFunctions.glBindTransformFeedback": ('int', 'int'), + "QOpenGLExtraFunctions.glBindVertexArray": ('int',), + "QOpenGLExtraFunctions.glBlendBarrier": (), + "QOpenGLExtraFunctions.glBlendEquationSeparatei": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glBlendEquationi": ('int', 'int'), + "QOpenGLExtraFunctions.glBlendFuncSeparatei": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glBlendFunci": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glBlitFramebuffer": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glClearBufferfi": ('int', 'int', 'float', 'int'), + "QOpenGLExtraFunctions.glClearBufferfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glClearBufferiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glClearBufferuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glColorMaski": ('int', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), + "QOpenGLExtraFunctions.glCompressedTexImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCompressedTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCopyImageSubData": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCopyTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDebugMessageControl": ('int', 'int', 'int', 'int', 'int', 'Union[str, int]'), + "QOpenGLExtraFunctions.glDebugMessageInsert": ('int', 'int', 'int', 'int', 'int', 'str'), + "QOpenGLExtraFunctions.glDeleteProgramPipelines": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteQueries": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteSamplers": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteTransformFeedbacks": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteVertexArrays": ('int', 'int'), + "QOpenGLExtraFunctions.glDisablei": ('int', 'int'), + "QOpenGLExtraFunctions.glDispatchCompute": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawArraysIndirect": ('int', 'int'), + "QOpenGLExtraFunctions.glDrawArraysInstanced": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawBuffers": ('int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsBaseVertex": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsIndirect": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsInstanced": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsInstancedBaseVertex": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawRangeElements": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawRangeElementsBaseVertex": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glEnablei": ('int', 'int'), + "QOpenGLExtraFunctions.glEndQuery": ('int',), + "QOpenGLExtraFunctions.glFramebufferParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glFramebufferTexture": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glFramebufferTextureLayer": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGenProgramPipelines": ('int', 'int'), + "QOpenGLExtraFunctions.glGenQueries": ('int', 'int'), + "QOpenGLExtraFunctions.glGenSamplers": ('int', 'int'), + "QOpenGLExtraFunctions.glGenTransformFeedbacks": ('int', 'int'), + "QOpenGLExtraFunctions.glGenVertexArrays": ('int', 'int'), + "QOpenGLExtraFunctions.glGetActiveUniformBlockiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetActiveUniformsiv": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetBufferParameteri64v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetFragDataLocation": ('int', 'str'), + "QOpenGLExtraFunctions.glGetFramebufferParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetGraphicsResetStatus": (), + "QOpenGLExtraFunctions.glGetInteger64i_v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInteger64v": ('int', 'int'), + "QOpenGLExtraFunctions.glGetIntegeri_v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInternalformativ": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetMultisamplefv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetProgramBinary": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramInterfaceiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramPipelineiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramResourceIndex": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glGetProgramResourceLocation": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glGetProgramResourceiv": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetQueryObjectuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetQueryiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetSamplerParameterIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetSamplerParameterIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetSamplerParameterfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetSamplerParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetStringi": ('int', 'int'), + "QOpenGLExtraFunctions.glGetTexLevelParameterfv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetTexLevelParameteriv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetTexParameterIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetTexParameterIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetUniformBlockIndex": ('int', 'str'), + "QOpenGLExtraFunctions.glGetUniformuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetVertexAttribIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetVertexAttribIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetnUniformfv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetnUniformiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetnUniformuiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glInvalidateFramebuffer": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glInvalidateSubFramebuffer": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glIsEnabledi": ('int', 'int'), + "QOpenGLExtraFunctions.glIsProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glIsQuery": ('int',), + "QOpenGLExtraFunctions.glIsSampler": ('int',), + "QOpenGLExtraFunctions.glIsTransformFeedback": ('int',), + "QOpenGLExtraFunctions.glIsVertexArray": ('int',), + "QOpenGLExtraFunctions.glMemoryBarrier": ('int',), + "QOpenGLExtraFunctions.glMemoryBarrierByRegion": ('int',), + "QOpenGLExtraFunctions.glMinSampleShading": ('float',), + "QOpenGLExtraFunctions.glObjectLabel": ('int', 'int', 'int', 'str'), + "QOpenGLExtraFunctions.glObjectPtrLabel": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glPatchParameteri": ('int', 'int'), + "QOpenGLExtraFunctions.glPopDebugGroup": (), + "QOpenGLExtraFunctions.glPrimitiveBoundingBox": ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramBinary": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1f": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform1fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform1i": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1ui": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2f": ('int', 'int', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform2fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform2i": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2ui": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3f": ('int', 'int', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform3fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform3i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4f": ('int', 'int', 'float', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform4fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform4i": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4ui": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2x3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2x4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3x2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3x4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4x2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4x3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glPushDebugGroup": ('int', 'int', 'int', 'str'), + "QOpenGLExtraFunctions.glReadBuffer": ('int',), + "QOpenGLExtraFunctions.glReadnPixels": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glRenderbufferStorageMultisample": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glSampleMaski": ('int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameterIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameterIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameterf": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glSamplerParameterfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glSamplerParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexBuffer": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexParameterIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexParameterIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage2D": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage2DMultisample": ('int', 'int', 'int', 'int', 'int', 'Union[str, int]'), + "QOpenGLExtraFunctions.glTexStorage3D": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage3DMultisample": ('int', 'int', 'int', 'int', 'int', 'int', 'Union[str, int]'), + "QOpenGLExtraFunctions.glTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform1ui": ('int', 'int'), + "QOpenGLExtraFunctions.glUniform1uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform2ui": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform2uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform3ui": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform3uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform4ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform4uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniformBlockBinding": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniformMatrix2x3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix2x4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix3x2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix3x4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix4x2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix4x3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUnmapBuffer": ('int',), + "QOpenGLExtraFunctions.glUseProgramStages": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glValidateProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glVertexAttribBinding": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribDivisor": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribFormat": ('int', 'int', 'int', 'Union[str, int]', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4iv": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4uiv": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribIFormat": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribIPointer": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexBindingDivisor": ('int', 'int'), + + # class PySide2.QtGui.QOpenGLFramebufferObject: + "QOpenGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.addColorAttachment": [('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.attachment": (), + "QOpenGLFramebufferObject.bind": (), + "QOpenGLFramebufferObject.bindDefault": (), + "QOpenGLFramebufferObject.blitFramebuffer": [('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.FramebufferRestorePolicy'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtGui.QOpenGLFramebufferObject', 'int', 'int')], + "QOpenGLFramebufferObject.format": (), + "QOpenGLFramebufferObject.handle": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QOpenGLFramebufferObject.height": (), + "QOpenGLFramebufferObject.isBound": (), + "QOpenGLFramebufferObject.isValid": (), + "QOpenGLFramebufferObject.release": (), + "QOpenGLFramebufferObject.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObject.size": (), + "QOpenGLFramebufferObject.sizes": (), + "QOpenGLFramebufferObject.takeTexture": [(), ('int',)], + "QOpenGLFramebufferObject.texture": (), + "QOpenGLFramebufferObject.textures": (), + "QOpenGLFramebufferObject.toImage": [(), ('bool',), ('bool', 'int')], + "QOpenGLFramebufferObject.width": (), + + # class PySide2.QtGui.QOpenGLFramebufferObjectFormat: + "QOpenGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtGui.QOpenGLFramebufferObjectFormat',)], + "QOpenGLFramebufferObjectFormat.__copy__": (), + "QOpenGLFramebufferObjectFormat.attachment": (), + "QOpenGLFramebufferObjectFormat.internalTextureFormat": (), + "QOpenGLFramebufferObjectFormat.mipmap": (), + "QOpenGLFramebufferObjectFormat.samples": (), + "QOpenGLFramebufferObjectFormat.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QOpenGLFramebufferObjectFormat.setMipmap": ('bool',), + "QOpenGLFramebufferObjectFormat.setSamples": ('int',), + "QOpenGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QOpenGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtGui.QOpenGLFunctions: + "QOpenGLFunctions.__init__": [(), ('PySide2.QtGui.QOpenGLContext',)], + "QOpenGLFunctions.glActiveTexture": ('int',), + "QOpenGLFunctions.glAttachShader": ('int', 'int'), + "QOpenGLFunctions.glBindAttribLocation": ('int', 'int', 'str'), + "QOpenGLFunctions.glBindBuffer": ('int', 'int'), + "QOpenGLFunctions.glBindFramebuffer": ('int', 'int'), + "QOpenGLFunctions.glBindRenderbuffer": ('int', 'int'), + "QOpenGLFunctions.glBindTexture": ('int', 'int'), + "QOpenGLFunctions.glBlendColor": ('float', 'float', 'float', 'float'), + "QOpenGLFunctions.glBlendEquation": ('int',), + "QOpenGLFunctions.glBlendEquationSeparate": ('int', 'int'), + "QOpenGLFunctions.glBlendFunc": ('int', 'int'), + "QOpenGLFunctions.glBlendFuncSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCheckFramebufferStatus": ('int',), + "QOpenGLFunctions.glClear": ('int',), + "QOpenGLFunctions.glClearColor": ('float', 'float', 'float', 'float'), + "QOpenGLFunctions.glClearDepthf": ('float',), + "QOpenGLFunctions.glClearStencil": ('int',), + "QOpenGLFunctions.glColorMask": ('Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), + "QOpenGLFunctions.glCompileShader": ('int',), + "QOpenGLFunctions.glCompressedTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCompressedTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCopyTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCopyTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCreateProgram": (), + "QOpenGLFunctions.glCreateShader": ('int',), + "QOpenGLFunctions.glCullFace": ('int',), + "QOpenGLFunctions.glDeleteBuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteFramebuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteProgram": ('int',), + "QOpenGLFunctions.glDeleteRenderbuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteShader": ('int',), + "QOpenGLFunctions.glDeleteTextures": ('int', 'int'), + "QOpenGLFunctions.glDepthFunc": ('int',), + "QOpenGLFunctions.glDepthMask": ('Union[str, int]',), + "QOpenGLFunctions.glDepthRangef": ('float', 'float'), + "QOpenGLFunctions.glDetachShader": ('int', 'int'), + "QOpenGLFunctions.glDisable": ('int',), + "QOpenGLFunctions.glDisableVertexAttribArray": ('int',), + "QOpenGLFunctions.glDrawArrays": ('int', 'int', 'int'), + "QOpenGLFunctions.glDrawElements": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glEnable": ('int',), + "QOpenGLFunctions.glEnableVertexAttribArray": ('int',), + "QOpenGLFunctions.glFinish": (), + "QOpenGLFunctions.glFlush": (), + "QOpenGLFunctions.glFramebufferRenderbuffer": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glFramebufferTexture2D": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glFrontFace": ('int',), + "QOpenGLFunctions.glGenBuffers": ('int', 'int'), + "QOpenGLFunctions.glGenFramebuffers": ('int', 'int'), + "QOpenGLFunctions.glGenRenderbuffers": ('int', 'int'), + "QOpenGLFunctions.glGenTextures": ('int', 'int'), + "QOpenGLFunctions.glGenerateMipmap": ('int',), + "QOpenGLFunctions.glGetAttachedShaders": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetAttribLocation": ('int', 'str'), + "QOpenGLFunctions.glGetBufferParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetError": (), + "QOpenGLFunctions.glGetFloatv": ('int', 'float'), + "QOpenGLFunctions.glGetFramebufferAttachmentParameteriv": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetIntegerv": ('int', 'int'), + "QOpenGLFunctions.glGetProgramiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetRenderbufferParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetShaderPrecisionFormat": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetShaderiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetString": ('int',), + "QOpenGLFunctions.glGetTexParameterfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetTexParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetUniformLocation": ('int', 'str'), + "QOpenGLFunctions.glGetUniformfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetUniformiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetVertexAttribfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetVertexAttribiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glHint": ('int', 'int'), + "QOpenGLFunctions.glIsBuffer": ('int',), + "QOpenGLFunctions.glIsEnabled": ('int',), + "QOpenGLFunctions.glIsFramebuffer": ('int',), + "QOpenGLFunctions.glIsProgram": ('int',), + "QOpenGLFunctions.glIsRenderbuffer": ('int',), + "QOpenGLFunctions.glIsShader": ('int',), + "QOpenGLFunctions.glIsTexture": ('int',), + "QOpenGLFunctions.glLineWidth": ('float',), + "QOpenGLFunctions.glLinkProgram": ('int',), + "QOpenGLFunctions.glPixelStorei": ('int', 'int'), + "QOpenGLFunctions.glPolygonOffset": ('float', 'float'), + "QOpenGLFunctions.glReadPixels": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glReleaseShaderCompiler": (), + "QOpenGLFunctions.glRenderbufferStorage": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glSampleCoverage": ('float', 'Union[str, int]'), + "QOpenGLFunctions.glScissor": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glShaderBinary": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glStencilFunc": ('int', 'int', 'int'), + "QOpenGLFunctions.glStencilFuncSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glStencilMask": ('int',), + "QOpenGLFunctions.glStencilMaskSeparate": ('int', 'int'), + "QOpenGLFunctions.glStencilOp": ('int', 'int', 'int'), + "QOpenGLFunctions.glStencilOpSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glTexParameterf": ('int', 'int', 'float'), + "QOpenGLFunctions.glTexParameterfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glTexParameteri": ('int', 'int', 'int'), + "QOpenGLFunctions.glTexParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform1f": ('int', 'float'), + "QOpenGLFunctions.glUniform1fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform1i": ('int', 'int'), + "QOpenGLFunctions.glUniform1iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform2f": ('int', 'float', 'float'), + "QOpenGLFunctions.glUniform2fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform2i": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform2iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform3f": ('int', 'float', 'float', 'float'), + "QOpenGLFunctions.glUniform3fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform3i": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform3iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform4f": ('int', 'float', 'float', 'float', 'float'), + "QOpenGLFunctions.glUniform4fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform4i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform4iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniformMatrix2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUniformMatrix3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUniformMatrix4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUseProgram": ('int',), + "QOpenGLFunctions.glValidateProgram": ('int',), + "QOpenGLFunctions.glVertexAttrib1f": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib1fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib2f": ('int', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib2fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib3f": ('int', 'float', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib3fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib4f": ('int', 'float', 'float', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib4fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttribPointer": ('int', 'int', 'int', 'Union[str, int]', 'int', 'int'), + "QOpenGLFunctions.glViewport": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.hasOpenGLFeature": ('PySide2.QtGui.QOpenGLFunctions.OpenGLFeature',), + "QOpenGLFunctions.initializeOpenGLFunctions": (), + "QOpenGLFunctions.openGLFeatures": (), + + # class PySide2.QtGui.QOpenGLPixelTransferOptions: + "QOpenGLPixelTransferOptions.__init__": [(), ('PySide2.QtGui.QOpenGLPixelTransferOptions',)], + "QOpenGLPixelTransferOptions.__copy__": (), + "QOpenGLPixelTransferOptions.alignment": (), + "QOpenGLPixelTransferOptions.imageHeight": (), + "QOpenGLPixelTransferOptions.isLeastSignificantBitFirst": (), + "QOpenGLPixelTransferOptions.isSwapBytesEnabled": (), + "QOpenGLPixelTransferOptions.rowLength": (), + "QOpenGLPixelTransferOptions.setAlignment": ('int',), + "QOpenGLPixelTransferOptions.setImageHeight": ('int',), + "QOpenGLPixelTransferOptions.setLeastSignificantByteFirst": ('bool',), + "QOpenGLPixelTransferOptions.setRowLength": ('int',), + "QOpenGLPixelTransferOptions.setSkipImages": ('int',), + "QOpenGLPixelTransferOptions.setSkipPixels": ('int',), + "QOpenGLPixelTransferOptions.setSkipRows": ('int',), + "QOpenGLPixelTransferOptions.setSwapBytesEnabled": ('bool',), + "QOpenGLPixelTransferOptions.skipImages": (), + "QOpenGLPixelTransferOptions.skipPixels": (), + "QOpenGLPixelTransferOptions.skipRows": (), + "QOpenGLPixelTransferOptions.swap": ('PySide2.QtGui.QOpenGLPixelTransferOptions',), + + # class PySide2.QtGui.QOpenGLShader: + "QOpenGLShader.__init__": ('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QObject'), + "QOpenGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShader.compileSourceFile": ('str',), + "QOpenGLShader.hasOpenGLShaders": ('PySide2.libpyside.ShaderType', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLShader.isCompiled": (), + "QOpenGLShader.log": (), + "QOpenGLShader.shaderId": (), + "QOpenGLShader.shaderType": (), + "QOpenGLShader.sourceCode": (), + + # class PySide2.QtGui.QOpenGLShaderProgram: + "QOpenGLShaderProgram.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLShaderProgram.addCacheableShaderFromSourceCode": [('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QByteArray'), ('PySide2.libpyside.ShaderType', 'str')], + "QOpenGLShaderProgram.addCacheableShaderFromSourceFile": ('PySide2.libpyside.ShaderType', 'str'), + "QOpenGLShaderProgram.addShader": ('PySide2.QtGui.QOpenGLShader',), + "QOpenGLShaderProgram.addShaderFromSourceCode": [('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QByteArray'), ('PySide2.libpyside.ShaderType', 'str')], + "QOpenGLShaderProgram.addShaderFromSourceFile": ('PySide2.libpyside.ShaderType', 'str'), + "QOpenGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShaderProgram.bind": (), + "QOpenGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QOpenGLShaderProgram.create": (), + "QOpenGLShaderProgram.defaultInnerTessellationLevels": (), + "QOpenGLShaderProgram.defaultOuterTessellationLevels": (), + "QOpenGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QOpenGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QOpenGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLShaderProgram.isLinked": (), + "QOpenGLShaderProgram.link": (), + "QOpenGLShaderProgram.log": (), + "QOpenGLShaderProgram.maxGeometryOutputVertices": (), + "QOpenGLShaderProgram.patchVertexCount": (), + "QOpenGLShaderProgram.programId": (), + "QOpenGLShaderProgram.release": (), + "QOpenGLShaderProgram.removeAllShaders": (), + "QOpenGLShaderProgram.removeShader": ('PySide2.QtGui.QOpenGLShader',), + "QOpenGLShaderProgram.setAttributeArray": [('int', 'float', 'int', 'int'), ('int', 'int', 'int', 'int', 'int'), ('str', 'float', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QOpenGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QOpenGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'float', 'int', 'int'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'float', 'int', 'int')], + "QOpenGLShaderProgram.setDefaultInnerTessellationLevels": ('list',), + "QOpenGLShaderProgram.setDefaultOuterTessellationLevels": ('list',), + "QOpenGLShaderProgram.setPatchVertexCount": ('int',), + "QOpenGLShaderProgram.setUniformValue": [('int', 'List[List[float]]'), ('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'List[List[float]]'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QOpenGLShaderProgram.setUniformValueArray": [('int', 'float', 'int', 'int'), ('int', 'int', 'int'), ('str', 'float', 'int', 'int'), ('str', 'int', 'int')], + "QOpenGLShaderProgram.shaders": (), + "QOpenGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtGui.QOpenGLTexture: + "QOpenGLTexture.__init__": [('PySide2.QtGui.QImage', 'PySide2.QtGui.QOpenGLTexture.MipMapGeneration'), ('PySide2.QtGui.QOpenGLTexture.Target',)], + "QOpenGLTexture.allocateStorage": [(), ('PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType')], + "QOpenGLTexture.bind": [(), ('int', 'PySide2.QtGui.QOpenGLTexture.TextureUnitReset')], + "QOpenGLTexture.borderColor": (), + "QOpenGLTexture.boundTextureId": [('PySide2.QtGui.QOpenGLTexture.BindingTarget',), ('int', 'PySide2.QtGui.QOpenGLTexture.BindingTarget')], + "QOpenGLTexture.comparisonFunction": (), + "QOpenGLTexture.comparisonMode": (), + "QOpenGLTexture.create": (), + "QOpenGLTexture.createTextureView": ('PySide2.QtGui.QOpenGLTexture.Target', 'PySide2.QtGui.QOpenGLTexture.TextureFormat', 'int', 'int', 'int', 'int'), + "QOpenGLTexture.depth": (), + "QOpenGLTexture.depthStencilMode": (), + "QOpenGLTexture.destroy": (), + "QOpenGLTexture.faces": (), + "QOpenGLTexture.format": (), + "QOpenGLTexture.generateMipMaps": [(), ('int', 'bool')], + "QOpenGLTexture.hasFeature": ('PySide2.QtGui.QOpenGLTexture.Feature',), + "QOpenGLTexture.height": (), + "QOpenGLTexture.isAutoMipMapGenerationEnabled": (), + "QOpenGLTexture.isBound": [(), ('int',)], + "QOpenGLTexture.isCreated": (), + "QOpenGLTexture.isFixedSamplePositions": (), + "QOpenGLTexture.isStorageAllocated": (), + "QOpenGLTexture.isTextureView": (), + "QOpenGLTexture.layers": (), + "QOpenGLTexture.levelOfDetailRange": (), + "QOpenGLTexture.levelofDetailBias": (), + "QOpenGLTexture.magnificationFilter": (), + "QOpenGLTexture.maximumAnisotropy": (), + "QOpenGLTexture.maximumLevelOfDetail": (), + "QOpenGLTexture.maximumMipLevels": (), + "QOpenGLTexture.minMagFilters": (), + "QOpenGLTexture.minificationFilter": (), + "QOpenGLTexture.minimumLevelOfDetail": (), + "QOpenGLTexture.mipBaseLevel": (), + "QOpenGLTexture.mipLevelRange": (), + "QOpenGLTexture.mipLevels": (), + "QOpenGLTexture.mipMaxLevel": (), + "QOpenGLTexture.release": [(), ('int', 'PySide2.QtGui.QOpenGLTexture.TextureUnitReset')], + "QOpenGLTexture.samples": (), + "QOpenGLTexture.setAutoMipMapGenerationEnabled": ('bool',), + "QOpenGLTexture.setBorderColor": [('PySide2.QtGui.QColor',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QOpenGLTexture.setComparisonFunction": ('PySide2.QtGui.QOpenGLTexture.ComparisonFunction',), + "QOpenGLTexture.setComparisonMode": ('PySide2.QtGui.QOpenGLTexture.ComparisonMode',), + "QOpenGLTexture.setCompressedData": [('int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions')], + "QOpenGLTexture.setData": [('PySide2.QtGui.QImage', 'PySide2.QtGui.QOpenGLTexture.MipMapGeneration'), ('PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions')], + "QOpenGLTexture.setDepthStencilMode": ('PySide2.QtGui.QOpenGLTexture.DepthStencilMode',), + "QOpenGLTexture.setFixedSamplePositions": ('bool',), + "QOpenGLTexture.setFormat": ('PySide2.QtGui.QOpenGLTexture.TextureFormat',), + "QOpenGLTexture.setLayers": ('int',), + "QOpenGLTexture.setLevelOfDetailRange": ('float', 'float'), + "QOpenGLTexture.setLevelofDetailBias": ('float',), + "QOpenGLTexture.setMagnificationFilter": ('PySide2.QtGui.QOpenGLTexture.Filter',), + "QOpenGLTexture.setMaximumAnisotropy": ('float',), + "QOpenGLTexture.setMaximumLevelOfDetail": ('float',), + "QOpenGLTexture.setMinMagFilters": ('PySide2.QtGui.QOpenGLTexture.Filter', 'PySide2.QtGui.QOpenGLTexture.Filter'), + "QOpenGLTexture.setMinificationFilter": ('PySide2.QtGui.QOpenGLTexture.Filter',), + "QOpenGLTexture.setMinimumLevelOfDetail": ('float',), + "QOpenGLTexture.setMipBaseLevel": ('int',), + "QOpenGLTexture.setMipLevelRange": ('int', 'int'), + "QOpenGLTexture.setMipLevels": ('int',), + "QOpenGLTexture.setMipMaxLevel": ('int',), + "QOpenGLTexture.setSamples": ('int',), + "QOpenGLTexture.setSize": ('int', 'int', 'int'), + "QOpenGLTexture.setSwizzleMask": [('PySide2.QtGui.QOpenGLTexture.SwizzleComponent', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue'), ('PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue')], + "QOpenGLTexture.setWrapMode": [('PySide2.QtGui.QOpenGLTexture.CoordinateDirection', 'PySide2.QtGui.QOpenGLTexture.WrapMode'), ('PySide2.QtGui.QOpenGLTexture.WrapMode',)], + "QOpenGLTexture.swizzleMask": ('PySide2.QtGui.QOpenGLTexture.SwizzleComponent',), + "QOpenGLTexture.target": (), + "QOpenGLTexture.textureId": (), + "QOpenGLTexture.width": (), + "QOpenGLTexture.wrapMode": ('PySide2.QtGui.QOpenGLTexture.CoordinateDirection',), + + # class PySide2.QtGui.QOpenGLTextureBlitter: + "QOpenGLTextureBlitter.__init__": (), + "QOpenGLTextureBlitter.bind": ('int',), + "QOpenGLTextureBlitter.blit": ('int', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix3x3'), + "QOpenGLTextureBlitter.create": (), + "QOpenGLTextureBlitter.destroy": (), + "QOpenGLTextureBlitter.isCreated": (), + "QOpenGLTextureBlitter.release": (), + "QOpenGLTextureBlitter.setOpacity": ('float',), + "QOpenGLTextureBlitter.setRedBlueSwizzle": ('bool',), + "QOpenGLTextureBlitter.supportsExternalOESTarget": (), + "QOpenGLTextureBlitter.targetTransform": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRect'), + + # class PySide2.QtGui.QOpenGLTimeMonitor: + "QOpenGLTimeMonitor.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLTimeMonitor.create": (), + "QOpenGLTimeMonitor.destroy": (), + "QOpenGLTimeMonitor.isCreated": (), + "QOpenGLTimeMonitor.isResultAvailable": (), + "QOpenGLTimeMonitor.objectIds": (), + "QOpenGLTimeMonitor.recordSample": (), + "QOpenGLTimeMonitor.reset": (), + "QOpenGLTimeMonitor.sampleCount": (), + "QOpenGLTimeMonitor.setSampleCount": ('int',), + "QOpenGLTimeMonitor.waitForIntervals": (), + "QOpenGLTimeMonitor.waitForSamples": (), + + # class PySide2.QtGui.QOpenGLTimerQuery: + "QOpenGLTimerQuery.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLTimerQuery.begin": (), + "QOpenGLTimerQuery.create": (), + "QOpenGLTimerQuery.destroy": (), + "QOpenGLTimerQuery.end": (), + "QOpenGLTimerQuery.isCreated": (), + "QOpenGLTimerQuery.isResultAvailable": (), + "QOpenGLTimerQuery.objectId": (), + "QOpenGLTimerQuery.recordTimestamp": (), + "QOpenGLTimerQuery.waitForResult": (), + "QOpenGLTimerQuery.waitForTimestamp": (), + + # class PySide2.QtGui.QOpenGLVersionProfile: + "QOpenGLVersionProfile.__init__": [(), ('PySide2.QtGui.QOpenGLVersionProfile',), ('PySide2.QtGui.QSurfaceFormat',)], + "QOpenGLVersionProfile.__copy__": (), + "QOpenGLVersionProfile.hasProfiles": (), + "QOpenGLVersionProfile.isLegacyVersion": (), + "QOpenGLVersionProfile.isValid": (), + "QOpenGLVersionProfile.profile": (), + "QOpenGLVersionProfile.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QOpenGLVersionProfile.setVersion": ('int', 'int'), + "QOpenGLVersionProfile.version": (), + + # class PySide2.QtGui.QOpenGLVertexArrayObject: + "QOpenGLVertexArrayObject.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLVertexArrayObject.bind": (), + "QOpenGLVertexArrayObject.create": (), + "QOpenGLVertexArrayObject.destroy": (), + "QOpenGLVertexArrayObject.isCreated": (), + "QOpenGLVertexArrayObject.objectId": (), + "QOpenGLVertexArrayObject.release": (), + + # class PySide2.QtGui.QOpenGLWindow: + "QOpenGLWindow.__init__": [('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLWindow.UpdateBehavior', 'PySide2.QtGui.QWindow'), ('PySide2.QtGui.QOpenGLWindow.UpdateBehavior', 'PySide2.QtGui.QWindow')], + "QOpenGLWindow.context": (), + "QOpenGLWindow.defaultFramebufferObject": (), + "QOpenGLWindow.doneCurrent": (), + "QOpenGLWindow.grabFramebuffer": (), + "QOpenGLWindow.initializeGL": (), + "QOpenGLWindow.isValid": (), + "QOpenGLWindow.makeCurrent": (), + "QOpenGLWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWindow.paintGL": (), + "QOpenGLWindow.paintOverGL": (), + "QOpenGLWindow.paintUnderGL": (), + "QOpenGLWindow.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWindow.resizeGL": ('int', 'int'), + "QOpenGLWindow.shareContext": (), + "QOpenGLWindow.updateBehavior": (), + + # class PySide2.QtGui.QPageLayout: + "QPageLayout.__init__": [(), ('PySide2.QtGui.QPageLayout',), ('PySide2.QtGui.QPageSize', 'PySide2.QtGui.QPageLayout.Orientation', 'PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit', 'PySide2.QtCore.QMarginsF')], + "QPageLayout.__copy__": (), + "QPageLayout.fullRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.fullRectPixels": ('int',), + "QPageLayout.fullRectPoints": (), + "QPageLayout.isEquivalentTo": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.isValid": (), + "QPageLayout.margins": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.marginsPixels": ('int',), + "QPageLayout.marginsPoints": (), + "QPageLayout.maximumMargins": (), + "QPageLayout.minimumMargins": (), + "QPageLayout.mode": (), + "QPageLayout.orientation": (), + "QPageLayout.pageSize": (), + "QPageLayout.paintRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.paintRectPixels": ('int',), + "QPageLayout.paintRectPoints": (), + "QPageLayout.setBottomMargin": ('float',), + "QPageLayout.setLeftMargin": ('float',), + "QPageLayout.setMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMinimumMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMode": ('PySide2.QtGui.QPageLayout.Mode',), + "QPageLayout.setOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPageLayout.setPageSize": ('PySide2.QtGui.QPageSize', 'PySide2.QtCore.QMarginsF'), + "QPageLayout.setRightMargin": ('float',), + "QPageLayout.setTopMargin": ('float',), + "QPageLayout.setUnits": ('PySide2.QtGui.QPageLayout.Unit',), + "QPageLayout.swap": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.units": (), + + # class PySide2.QtGui.QPageSize: + "QPageSize.__init__": [(), ('PySide2.QtCore.QSize', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.__copy__": (), + "QPageSize.definitionSize": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.definitionUnits": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.id": [(), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('int',)], + "QPageSize.isEquivalentTo": ('PySide2.QtGui.QPageSize',), + "QPageSize.isValid": (), + "QPageSize.key": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.name": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.rect": ('PySide2.QtGui.QPageSize.Unit',), + "QPageSize.rectPixels": ('int',), + "QPageSize.rectPoints": (), + "QPageSize.size": [('PySide2.QtGui.QPageSize.PageSizeId', 'PySide2.QtGui.QPageSize.Unit'), ('PySide2.QtGui.QPageSize.Unit',)], + "QPageSize.sizePixels": [('PySide2.QtGui.QPageSize.PageSizeId', 'int'), ('int',)], + "QPageSize.sizePoints": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.swap": ('PySide2.QtGui.QPageSize',), + "QPageSize.windowsId": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + + # class PySide2.QtGui.QPagedPaintDevice: + "QPagedPaintDevice.__init__": (), + "QPagedPaintDevice.devicePageLayout": (), + "QPagedPaintDevice.margins": (), + "QPagedPaintDevice.newPage": (), + "QPagedPaintDevice.pageLayout": (), + "QPagedPaintDevice.pageSize": (), + "QPagedPaintDevice.pageSizeMM": (), + "QPagedPaintDevice.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPagedPaintDevice.setPageLayout": ('PySide2.QtGui.QPageLayout',), + "QPagedPaintDevice.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit')], + "QPagedPaintDevice.setPageOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPagedPaintDevice.setPageSize": [('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPagedPaintDevice.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtGui.QPaintDevice: + "QPaintDevice.__init__": (), + "QPaintDevice.colorCount": (), + "QPaintDevice.depth": (), + "QPaintDevice.devType": (), + "QPaintDevice.devicePixelRatio": (), + "QPaintDevice.devicePixelRatioF": (), + "QPaintDevice.devicePixelRatioFScale": (), + "QPaintDevice.height": (), + "QPaintDevice.heightMM": (), + "QPaintDevice.initPainter": ('PySide2.QtGui.QPainter',), + "QPaintDevice.logicalDpiX": (), + "QPaintDevice.logicalDpiY": (), + "QPaintDevice.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDevice.paintEngine": (), + "QPaintDevice.paintingActive": (), + "QPaintDevice.physicalDpiX": (), + "QPaintDevice.physicalDpiY": (), + "QPaintDevice.redirected": ('PySide2.QtCore.QPoint',), + "QPaintDevice.sharedPainter": (), + "QPaintDevice.width": (), + "QPaintDevice.widthMM": (), + + # class PySide2.QtGui.QPaintDeviceWindow: + "QPaintDeviceWindow.event": ('PySide2.QtCore.QEvent',), + "QPaintDeviceWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QPaintDeviceWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDeviceWindow.paintEngine": (), + "QPaintDeviceWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPaintDeviceWindow.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + + # class PySide2.QtGui.QPaintEngine: + "QPaintEngine.__init__": ('PySide2.libpyside.PaintEngineFeatures',), + "QPaintEngine.begin": ('PySide2.QtGui.QPaintDevice',), + "QPaintEngine.clearDirty": ('PySide2.libpyside.DirtyFlags',), + "QPaintEngine.coordinateOffset": (), + "QPaintEngine.drawEllipse": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QPaintEngine.drawImage": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'PySide2.libpyside.ImageConversionFlags'), + "QPaintEngine.drawLines": [('PySide2.QtCore.QLine', 'int'), ('PySide2.QtCore.QLineF', 'int')], + "QPaintEngine.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPaintEngine.drawPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), + "QPaintEngine.drawPoints": [('PySide2.QtCore.QPoint', 'int'), ('PySide2.QtCore.QPointF', 'int')], + "QPaintEngine.drawPolygon": [('PySide2.QtCore.QPoint', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode')], + "QPaintEngine.drawRects": [('PySide2.QtCore.QRect', 'int'), ('PySide2.QtCore.QRectF', 'int')], + "QPaintEngine.drawTextItem": ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), + "QPaintEngine.drawTiledPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), + "QPaintEngine.end": (), + "QPaintEngine.hasFeature": ('PySide2.libpyside.PaintEngineFeatures',), + "QPaintEngine.isActive": (), + "QPaintEngine.isExtended": (), + "QPaintEngine.paintDevice": (), + "QPaintEngine.painter": (), + "QPaintEngine.setActive": ('bool',), + "QPaintEngine.setDirty": ('PySide2.libpyside.DirtyFlags',), + "QPaintEngine.setSystemClip": ('PySide2.QtGui.QRegion',), + "QPaintEngine.setSystemRect": ('PySide2.QtCore.QRect',), + "QPaintEngine.syncState": (), + "QPaintEngine.systemClip": (), + "QPaintEngine.systemRect": (), + "QPaintEngine.testDirty": ('PySide2.libpyside.DirtyFlags',), + "QPaintEngine.type": (), + "QPaintEngine.updateState": ('PySide2.QtGui.QPaintEngineState',), + + # class PySide2.QtGui.QPaintEngineState: + "QPaintEngineState.__init__": (), + "QPaintEngineState.backgroundBrush": (), + "QPaintEngineState.backgroundMode": (), + "QPaintEngineState.brush": (), + "QPaintEngineState.brushNeedsResolving": (), + "QPaintEngineState.brushOrigin": (), + "QPaintEngineState.clipOperation": (), + "QPaintEngineState.clipPath": (), + "QPaintEngineState.clipRegion": (), + "QPaintEngineState.compositionMode": (), + "QPaintEngineState.font": (), + "QPaintEngineState.isClipEnabled": (), + "QPaintEngineState.matrix": (), + "QPaintEngineState.opacity": (), + "QPaintEngineState.painter": (), + "QPaintEngineState.pen": (), + "QPaintEngineState.penNeedsResolving": (), + "QPaintEngineState.renderHints": (), + "QPaintEngineState.state": (), + "QPaintEngineState.transform": (), + + # class PySide2.QtGui.QPaintEvent: + "QPaintEvent.__init__": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QPaintEvent.rect": (), + "QPaintEvent.region": (), + + # class PySide2.QtGui.QPainter: + "QPainter.__init__": [(), ('PySide2.QtGui.QPaintDevice',)], + "QPainter.background": (), + "QPainter.backgroundMode": (), + "QPainter.begin": ('PySide2.QtGui.QPaintDevice',), + "QPainter.beginNativePainting": (), + "QPainter.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str'), ('PySide2.QtCore.QRectF', 'int', 'str'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str')], + "QPainter.brush": (), + "QPainter.brushOrigin": (), + "QPainter.clipBoundingRect": (), + "QPainter.clipPath": (), + "QPainter.clipRegion": (), + "QPainter.combinedMatrix": (), + "QPainter.combinedTransform": (), + "QPainter.compositionMode": (), + "QPainter.device": (), + "QPainter.deviceMatrix": (), + "QPainter.deviceTransform": (), + "QPainter.drawArc": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawChord": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawConvexPolygon": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawEllipse": [('PySide2.QtCore.QPoint', 'int', 'int'), ('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawImage": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'PySide2.libpyside.ImageConversionFlags'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'PySide2.libpyside.ImageConversionFlags'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'PySide2.libpyside.ImageConversionFlags'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'PySide2.libpyside.ImageConversionFlags'), ('int', 'int', 'PySide2.QtGui.QImage', 'int', 'int', 'int', 'int', 'PySide2.libpyside.ImageConversionFlags')], + "QPainter.drawLine": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int')], + "QPainter.drawLines": ('list',), + "QPainter.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPainter.drawPicture": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPicture'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPicture'), ('int', 'int', 'PySide2.QtGui.QPicture')], + "QPainter.drawPie": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmap": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmapFragments": ('PySide2.QtGui.QPainter.PixmapFragment', 'int', 'PySide2.QtGui.QPixmap', 'PySide2.libpyside.PixmapFragmentHints'), + "QPainter.drawPoint": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.drawPoints": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawPolygon": [('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.FillRule'), ('list', 'PySide2.QtCore.Qt.FillRule')], + "QPainter.drawPolyline": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawRects": ('list',), + "QPainter.drawRoundRect": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawRoundedRect": [('PySide2.QtCore.QRect', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('int', 'int', 'int', 'int', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainter.drawStaticText": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QStaticText'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QStaticText'), ('int', 'int', 'PySide2.QtGui.QStaticText')], + "QPainter.drawText": [('PySide2.QtCore.QPoint', 'str'), ('PySide2.QtCore.QPointF', 'str'), ('PySide2.QtCore.QRect', 'int', 'str', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'int', 'str', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str', 'PySide2.QtCore.QRect'), ('int', 'int', 'str')], + "QPainter.drawTextItem": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QTextItem'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), ('int', 'int', 'PySide2.QtGui.QTextItem')], + "QPainter.drawTiledPixmap": [('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int')], + "QPainter.end": (), + "QPainter.endNativePainting": (), + "QPainter.eraseRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.fillPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QBrush'), + "QPainter.fillRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.BrushStyle'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.GlobalColor'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QBrush'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QColor')], + "QPainter.font": (), + "QPainter.fontInfo": (), + "QPainter.fontMetrics": (), + "QPainter.hasClipping": (), + "QPainter.initFrom": ('PySide2.QtGui.QPaintDevice',), + "QPainter.isActive": (), + "QPainter.layoutDirection": (), + "QPainter.matrix": (), + "QPainter.matrixEnabled": (), + "QPainter.opacity": (), + "QPainter.paintEngine": (), + "QPainter.pen": (), + "QPainter.redirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.renderHints": (), + "QPainter.resetMatrix": (), + "QPainter.resetTransform": (), + "QPainter.restore": (), + "QPainter.restoreRedirected": ('PySide2.QtGui.QPaintDevice',), + "QPainter.rotate": ('float',), + "QPainter.save": (), + "QPainter.scale": ('float', 'float'), + "QPainter.setBackground": ('PySide2.QtGui.QBrush',), + "QPainter.setBackgroundMode": ('PySide2.QtCore.Qt.BGMode',), + "QPainter.setBrush": [('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtGui.QBrush',)], + "QPainter.setBrushOrigin": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.setClipPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ClipOperation'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ClipOperation'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ClipOperation')], + "QPainter.setClipRegion": ('PySide2.QtGui.QRegion', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipping": ('bool',), + "QPainter.setCompositionMode": ('PySide2.QtGui.QPainter.CompositionMode',), + "QPainter.setFont": ('PySide2.QtGui.QFont',), + "QPainter.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QPainter.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setMatrixEnabled": ('bool',), + "QPainter.setOpacity": ('float',), + "QPainter.setPen": [('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPainter.setRedirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QPainter.setRenderHints": ('PySide2.libpyside.RenderHints', 'bool'), + "QPainter.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.setViewTransformEnabled": ('bool',), + "QPainter.setViewport": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWindow": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWorldMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setWorldMatrixEnabled": ('bool',), + "QPainter.setWorldTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.shear": ('float', 'float'), + "QPainter.strokePath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen'), + "QPainter.testRenderHint": ('PySide2.QtGui.QPainter.RenderHint',), + "QPainter.transform": (), + "QPainter.translate": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainter.viewTransformEnabled": (), + "QPainter.viewport": (), + "QPainter.window": (), + "QPainter.worldMatrix": (), + "QPainter.worldMatrixEnabled": (), + "QPainter.worldTransform": (), + + # class PySide2.QtGui.QPainterPath: + "QPainterPath.__init__": [(), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.__copy__": (), + "QPainterPath.addEllipse": [('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.addPolygon": ('PySide2.QtGui.QPolygonF',), + "QPainterPath.addRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addRegion": ('PySide2.QtGui.QRegion',), + "QPainterPath.addRoundRect": [('PySide2.QtCore.QRectF', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QPainterPath.addRoundedRect": [('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('float', 'float', 'float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainterPath.addText": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QFont', 'str'), ('float', 'float', 'PySide2.QtGui.QFont', 'str')], + "QPainterPath.angleAtPercent": ('float',), + "QPainterPath.arcMoveTo": [('PySide2.QtCore.QRectF', 'float'), ('float', 'float', 'float', 'float', 'float')], + "QPainterPath.arcTo": [('PySide2.QtCore.QRectF', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.boundingRect": (), + "QPainterPath.closeSubpath": (), + "QPainterPath.connectPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.controlPointRect": (), + "QPainterPath.cubicTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.currentPosition": (), + "QPainterPath.elementAt": ('int',), + "QPainterPath.elementCount": (), + "QPainterPath.fillRule": (), + "QPainterPath.intersected": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.intersects": [('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.isEmpty": (), + "QPainterPath.length": (), + "QPainterPath.lineTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.percentAtLength": ('float',), + "QPainterPath.pointAtPercent": ('float',), + "QPainterPath.quadTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QPainterPath.setElementPositionAt": ('int', 'float', 'float'), + "QPainterPath.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QPainterPath.simplified": (), + "QPainterPath.slopeAtPercent": ('float',), + "QPainterPath.subtracted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.subtractedInverted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.swap": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.toFillPolygon": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toFillPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toReversed": (), + "QPainterPath.toSubpathPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.united": ('PySide2.QtGui.QPainterPath',), + + # class PySide2.QtGui.QPainterPathStroker: + "QPainterPathStroker.__init__": [(), ('PySide2.QtGui.QPen',)], + "QPainterPathStroker.capStyle": (), + "QPainterPathStroker.createStroke": ('PySide2.QtGui.QPainterPath',), + "QPainterPathStroker.curveThreshold": (), + "QPainterPathStroker.dashOffset": (), + "QPainterPathStroker.dashPattern": (), + "QPainterPathStroker.joinStyle": (), + "QPainterPathStroker.miterLimit": (), + "QPainterPathStroker.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPainterPathStroker.setCurveThreshold": ('float',), + "QPainterPathStroker.setDashOffset": ('float',), + "QPainterPathStroker.setDashPattern": [('PySide2.QtCore.Qt.PenStyle',), ('list',)], + "QPainterPathStroker.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPainterPathStroker.setMiterLimit": ('float',), + "QPainterPathStroker.setWidth": ('float',), + "QPainterPathStroker.width": (), + + # class PySide2.QtGui.QPalette: + "QPalette.__init__": [(), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette',)], + "QPalette.__copy__": (), + "QPalette.alternateBase": (), + "QPalette.background": (), + "QPalette.base": (), + "QPalette.brightText": (), + "QPalette.brush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.button": (), + "QPalette.buttonText": (), + "QPalette.cacheKey": (), + "QPalette.color": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.currentColorGroup": (), + "QPalette.dark": (), + "QPalette.foreground": (), + "QPalette.highlight": (), + "QPalette.highlightedText": (), + "QPalette.isBrushSet": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), + "QPalette.isCopyOf": ('PySide2.QtGui.QPalette',), + "QPalette.isEqual": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorGroup'), + "QPalette.light": (), + "QPalette.link": (), + "QPalette.linkVisited": (), + "QPalette.mid": (), + "QPalette.midlight": (), + "QPalette.resolve": [(), ('PySide2.QtGui.QPalette',), ('int',)], + "QPalette.setBrush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush')], + "QPalette.setColor": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor')], + "QPalette.setColorGroup": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), + "QPalette.setCurrentColorGroup": ('PySide2.QtGui.QPalette.ColorGroup',), + "QPalette.shadow": (), + "QPalette.swap": ('PySide2.QtGui.QPalette',), + "QPalette.text": (), + "QPalette.toolTipBase": (), + "QPalette.toolTipText": (), + "QPalette.window": (), + "QPalette.windowText": (), + + # class PySide2.QtGui.QPdfWriter: + "QPdfWriter.__init__": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPdfWriter.creator": (), + "QPdfWriter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPdfWriter.newPage": (), + "QPdfWriter.paintEngine": (), + "QPdfWriter.pdfVersion": (), + "QPdfWriter.resolution": (), + "QPdfWriter.setCreator": ('str',), + "QPdfWriter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPdfWriter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPdfWriter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPdfWriter.setPdfVersion": ('PySide2.QtGui.QPagedPaintDevice.PdfVersion',), + "QPdfWriter.setResolution": ('int',), + "QPdfWriter.setTitle": ('str',), + "QPdfWriter.title": (), + + # class PySide2.QtGui.QPen: + "QPen.__init__": [(), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QBrush', 'float', 'PySide2.QtCore.Qt.PenStyle', 'PySide2.QtCore.Qt.PenCapStyle', 'PySide2.QtCore.Qt.PenJoinStyle'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPen.__copy__": (), + "QPen.brush": (), + "QPen.capStyle": (), + "QPen.color": (), + "QPen.dashOffset": (), + "QPen.dashPattern": (), + "QPen.isCosmetic": (), + "QPen.isSolid": (), + "QPen.joinStyle": (), + "QPen.miterLimit": (), + "QPen.setBrush": ('PySide2.QtGui.QBrush',), + "QPen.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPen.setColor": ('PySide2.QtGui.QColor',), + "QPen.setCosmetic": ('bool',), + "QPen.setDashOffset": ('float',), + "QPen.setDashPattern": ('list',), + "QPen.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPen.setMiterLimit": ('float',), + "QPen.setStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QPen.setWidth": ('int',), + "QPen.setWidthF": ('float',), + "QPen.style": (), + "QPen.swap": ('PySide2.QtGui.QPen',), + "QPen.width": (), + "QPen.widthF": (), + + # class PySide2.QtGui.QPicture: + "QPicture.__init__": [('PySide2.QtGui.QPicture',), ('int',)], + "QPicture.__copy__": (), + "QPicture.boundingRect": (), + "QPicture.data": (), + "QPicture.devType": (), + "QPicture.inputFormatList": (), + "QPicture.inputFormats": (), + "QPicture.isNull": (), + "QPicture.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPicture.outputFormatList": (), + "QPicture.outputFormats": (), + "QPicture.paintEngine": (), + "QPicture.pictureFormat": ('str',), + "QPicture.play": ('PySide2.QtGui.QPainter',), + "QPicture.save": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.setBoundingRect": ('PySide2.QtCore.QRect',), + "QPicture.setData": ('str', 'int'), + "QPicture.size": (), + "QPicture.swap": ('PySide2.QtGui.QPicture',), + + # class PySide2.QtGui.QPictureIO: + "QPictureIO.__init__": [(), ('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPictureIO.description": (), + "QPictureIO.fileName": (), + "QPictureIO.format": (), + "QPictureIO.gamma": (), + "QPictureIO.inputFormats": (), + "QPictureIO.ioDevice": (), + "QPictureIO.outputFormats": (), + "QPictureIO.parameters": (), + "QPictureIO.picture": (), + "QPictureIO.pictureFormat": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPictureIO.quality": (), + "QPictureIO.read": (), + "QPictureIO.setDescription": ('str',), + "QPictureIO.setFileName": ('str',), + "QPictureIO.setFormat": ('str',), + "QPictureIO.setGamma": ('float',), + "QPictureIO.setIODevice": ('PySide2.QtCore.QIODevice',), + "QPictureIO.setParameters": ('str',), + "QPictureIO.setPicture": ('PySide2.QtGui.QPicture',), + "QPictureIO.setQuality": ('int',), + "QPictureIO.setStatus": ('int',), + "QPictureIO.status": (), + "QPictureIO.write": (), + + # class PySide2.QtGui.QPixelFormat: + "QPixelFormat.__init__": [(), ('PySide2.QtGui.QPixelFormat',), ('PySide2.QtGui.QPixelFormat.ColorModel', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'PySide2.QtGui.QPixelFormat.AlphaUsage', 'PySide2.QtGui.QPixelFormat.AlphaPosition', 'PySide2.QtGui.QPixelFormat.AlphaPremultiplied', 'PySide2.QtGui.QPixelFormat.TypeInterpretation', 'PySide2.QtGui.QPixelFormat.ByteOrder', 'Union[str, int]')], + "QPixelFormat.__copy__": (), + "QPixelFormat.alphaPosition": (), + "QPixelFormat.alphaSize": (), + "QPixelFormat.alphaUsage": (), + "QPixelFormat.bitsPerPixel": (), + "QPixelFormat.blackSize": (), + "QPixelFormat.blueSize": (), + "QPixelFormat.brightnessSize": (), + "QPixelFormat.byteOrder": (), + "QPixelFormat.channelCount": (), + "QPixelFormat.colorModel": (), + "QPixelFormat.cyanSize": (), + "QPixelFormat.greenSize": (), + "QPixelFormat.hueSize": (), + "QPixelFormat.lightnessSize": (), + "QPixelFormat.magentaSize": (), + "QPixelFormat.premultiplied": (), + "QPixelFormat.redSize": (), + "QPixelFormat.saturationSize": (), + "QPixelFormat.subEnum": (), + "QPixelFormat.typeInterpretation": (), + "QPixelFormat.yellowSize": (), + "QPixelFormat.yuvLayout": (), + + # class PySide2.QtGui.QPixmap: + "QPixmap.__init__": [(), ('List[str]',), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str', 'PySide2.libpyside.ImageConversionFlags')], + "QPixmap.__copy__": (), + "QPixmap.cacheKey": (), + "QPixmap.convertFromImage": ('PySide2.QtGui.QImage', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPixmap.createHeuristicMask": ('bool',), + "QPixmap.createMaskFromColor": ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.MaskMode'), + "QPixmap.defaultDepth": (), + "QPixmap.depth": (), + "QPixmap.devType": (), + "QPixmap.devicePixelRatio": (), + "QPixmap.fill": [('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QPaintDevice', 'int', 'int')], + "QPixmap.fromImage": ('PySide2.QtGui.QImage', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.fromImageInPlace": ('PySide2.QtGui.QImage', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.fromImageReader": ('PySide2.QtGui.QImageReader', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.grabWidget": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QObject', 'int', 'int', 'int', 'int')], + "QPixmap.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QPixmap.hasAlpha": (), + "QPixmap.hasAlphaChannel": (), + "QPixmap.height": (), + "QPixmap.isNull": (), + "QPixmap.isQBitmap": (), + "QPixmap.load": ('str', 'str', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.loadFromData": [('PySide2.QtCore.QByteArray', 'str', 'PySide2.libpyside.ImageConversionFlags'), ('Union[str, int]', 'int', 'str', 'PySide2.libpyside.ImageConversionFlags')], + "QPixmap.mask": (), + "QPixmap.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPixmap.paintEngine": (), + "QPixmap.rect": (), + "QPixmap.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QPixmap.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scroll": [('int', 'int', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion'), ('int', 'int', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion')], + "QPixmap.setDevicePixelRatio": ('float',), + "QPixmap.setMask": ('PySide2.QtGui.QBitmap',), + "QPixmap.size": (), + "QPixmap.swap": ('PySide2.QtGui.QPixmap',), + "QPixmap.toImage": (), + "QPixmap.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QPixmap.width": (), + + # class PySide2.QtGui.QPixmapCache: + "QPixmapCache.__init__": (), + "QPixmapCache.cacheLimit": (), + "QPixmapCache.clear": (), + "QPixmapCache.find": [('PySide2.QtGui.QPixmapCache.Key',), ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), ('str',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.insert": [('PySide2.QtGui.QPixmap',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.remove": [('PySide2.QtGui.QPixmapCache.Key',), ('str',)], + "QPixmapCache.replace": ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), + "QPixmapCache.setCacheLimit": ('int',), + + # class PySide2.QtGui.QPointingDeviceUniqueId: + "QPointingDeviceUniqueId.__init__": [(), ('PySide2.QtGui.QPointingDeviceUniqueId',)], + "QPointingDeviceUniqueId.__copy__": (), + "QPointingDeviceUniqueId.fromNumericId": ('int',), + "QPointingDeviceUniqueId.isValid": (), + "QPointingDeviceUniqueId.numericId": (), + + # class PySide2.QtGui.QPolygon: + "QPolygon.__init__": [(), ('PySide2.QtCore.QRect', 'bool'), ('PySide2.QtGui.QPolygon',), ('int',), ('list',)], + "QPolygon.__copy__": (), + "QPolygon.__reduce__": (), + "QPolygon.append": [('PySide2.QtCore.QPoint',), ('list',)], + "QPolygon.at": ('int',), + "QPolygon.back": (), + "QPolygon.boundingRect": (), + "QPolygon.capacity": (), + "QPolygon.clear": (), + "QPolygon.constData": (), + "QPolygon.constFirst": (), + "QPolygon.constLast": (), + "QPolygon.contains": ('PySide2.QtCore.QPoint',), + "QPolygon.containsPoint": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.Qt.FillRule'), + "QPolygon.count": [(), ('PySide2.QtCore.QPoint',)], + "QPolygon.data": (), + "QPolygon.empty": (), + "QPolygon.endsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.fill": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.first": (), + "QPolygon.fromList": ('list',), + "QPolygon.front": (), + "QPolygon.indexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.insert": [('int', 'PySide2.QtCore.QPoint'), ('int', 'int', 'PySide2.QtCore.QPoint')], + "QPolygon.intersected": ('PySide2.QtGui.QPolygon',), + "QPolygon.intersects": ('PySide2.QtGui.QPolygon',), + "QPolygon.isEmpty": (), + "QPolygon.isSharedWith": ('list',), + "QPolygon.last": (), + "QPolygon.lastIndexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.length": (), + "QPolygon.mid": ('int', 'int'), + "QPolygon.move": ('int', 'int'), + "QPolygon.pop_back": (), + "QPolygon.pop_front": (), + "QPolygon.prepend": ('PySide2.QtCore.QPoint',), + "QPolygon.push_back": ('PySide2.QtCore.QPoint',), + "QPolygon.push_front": ('PySide2.QtCore.QPoint',), + "QPolygon.remove": [('int',), ('int', 'int')], + "QPolygon.removeAll": ('PySide2.QtCore.QPoint',), + "QPolygon.removeAt": ('int',), + "QPolygon.removeFirst": (), + "QPolygon.removeLast": (), + "QPolygon.removeOne": ('PySide2.QtCore.QPoint',), + "QPolygon.replace": ('int', 'PySide2.QtCore.QPoint'), + "QPolygon.reserve": ('int',), + "QPolygon.resize": ('int',), + "QPolygon.setSharable": ('bool',), + "QPolygon.shrink_to_fit": (), + "QPolygon.size": (), + "QPolygon.squeeze": (), + "QPolygon.startsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.subtracted": ('PySide2.QtGui.QPolygon',), + "QPolygon.swap": ('PySide2.QtGui.QPolygon',), + "QPolygon.takeAt": ('int',), + "QPolygon.takeFirst": (), + "QPolygon.takeLast": (), + "QPolygon.toList": (), + "QPolygon.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.united": ('PySide2.QtGui.QPolygon',), + "QPolygon.value": [('int',), ('int', 'PySide2.QtCore.QPoint')], + + # class PySide2.QtGui.QPolygonF: + "QPolygonF.__init__": [(), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('int',), ('list',)], + "QPolygonF.__copy__": (), + "QPolygonF.append": [('PySide2.QtCore.QPointF',), ('list',)], + "QPolygonF.at": ('int',), + "QPolygonF.back": (), + "QPolygonF.boundingRect": (), + "QPolygonF.capacity": (), + "QPolygonF.clear": (), + "QPolygonF.constData": (), + "QPolygonF.constFirst": (), + "QPolygonF.constLast": (), + "QPolygonF.contains": ('PySide2.QtCore.QPointF',), + "QPolygonF.containsPoint": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.FillRule'), + "QPolygonF.count": [(), ('PySide2.QtCore.QPointF',)], + "QPolygonF.data": (), + "QPolygonF.empty": (), + "QPolygonF.endsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.fill": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.first": (), + "QPolygonF.fromList": ('list',), + "QPolygonF.front": (), + "QPolygonF.indexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.insert": [('int', 'PySide2.QtCore.QPointF'), ('int', 'int', 'PySide2.QtCore.QPointF')], + "QPolygonF.intersected": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.intersects": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.isClosed": (), + "QPolygonF.isEmpty": (), + "QPolygonF.isSharedWith": ('list',), + "QPolygonF.last": (), + "QPolygonF.lastIndexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.length": (), + "QPolygonF.mid": ('int', 'int'), + "QPolygonF.move": ('int', 'int'), + "QPolygonF.pop_back": (), + "QPolygonF.pop_front": (), + "QPolygonF.prepend": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_back": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_front": ('PySide2.QtCore.QPointF',), + "QPolygonF.remove": [('int',), ('int', 'int')], + "QPolygonF.removeAll": ('PySide2.QtCore.QPointF',), + "QPolygonF.removeAt": ('int',), + "QPolygonF.removeFirst": (), + "QPolygonF.removeLast": (), + "QPolygonF.removeOne": ('PySide2.QtCore.QPointF',), + "QPolygonF.replace": ('int', 'PySide2.QtCore.QPointF'), + "QPolygonF.reserve": ('int',), + "QPolygonF.resize": ('int',), + "QPolygonF.setSharable": ('bool',), + "QPolygonF.shrink_to_fit": (), + "QPolygonF.size": (), + "QPolygonF.squeeze": (), + "QPolygonF.startsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.subtracted": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.swap": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.takeAt": ('int',), + "QPolygonF.takeFirst": (), + "QPolygonF.takeLast": (), + "QPolygonF.toList": (), + "QPolygonF.toPolygon": (), + "QPolygonF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.united": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.value": [('int',), ('int', 'PySide2.QtCore.QPointF')], + + # class PySide2.QtGui.QPyTextObject: + "QPyTextObject.__init__": ('PySide2.QtCore.QObject',), + "QPyTextObject.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QPyTextObject.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QQuaternion: + "QQuaternion.__init__": [(), ('PySide2.QtGui.QVector4D',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QQuaternion.__copy__": (), + "QQuaternion.__reduce__": (), + "QQuaternion.conjugate": (), + "QQuaternion.conjugated": (), + "QQuaternion.dotProduct": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion'), + "QQuaternion.fromAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromAxisAndAngle": [('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QQuaternion.fromDirection": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromEulerAngles": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.fromRotationMatrix": ('PySide2.QtGui.QMatrix3x3',), + "QQuaternion.getAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.inverted": (), + "QQuaternion.isIdentity": (), + "QQuaternion.isNull": (), + "QQuaternion.length": (), + "QQuaternion.lengthSquared": (), + "QQuaternion.nlerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.normalize": (), + "QQuaternion.normalized": (), + "QQuaternion.rotatedVector": ('PySide2.QtGui.QVector3D',), + "QQuaternion.rotationTo": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.scalar": (), + "QQuaternion.setScalar": ('float',), + "QQuaternion.setVector": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.setX": ('float',), + "QQuaternion.setY": ('float',), + "QQuaternion.setZ": ('float',), + "QQuaternion.slerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.toEulerAngles": (), + "QQuaternion.toRotationMatrix": (), + "QQuaternion.toVector4D": (), + "QQuaternion.vector": (), + "QQuaternion.x": (), + "QQuaternion.y": (), + "QQuaternion.z": (), + + # class PySide2.QtGui.QRadialGradient: + "QRadialGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QRadialGradient',), ('float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QRadialGradient.__copy__": (), + "QRadialGradient.center": (), + "QRadialGradient.centerRadius": (), + "QRadialGradient.focalPoint": (), + "QRadialGradient.focalRadius": (), + "QRadialGradient.radius": (), + "QRadialGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setCenterRadius": ('float',), + "QRadialGradient.setFocalPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setFocalRadius": ('float',), + "QRadialGradient.setRadius": ('float',), + + # class PySide2.QtGui.QRasterWindow: + "QRasterWindow.__init__": ('PySide2.QtGui.QWindow',), + "QRasterWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QRasterWindow.redirected": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtGui.QRawFont: + "QRawFont.__init__": [(), ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), ('PySide2.QtGui.QRawFont',), ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference')], + "QRawFont.__copy__": (), + "QRawFont.advancesForGlyphIndexes": [('list',), ('list', 'PySide2.libpyside.LayoutFlags')], + "QRawFont.alphaMapForGlyph": ('int', 'PySide2.QtGui.QRawFont.AntialiasingType', 'PySide2.QtGui.QTransform'), + "QRawFont.ascent": (), + "QRawFont.averageCharWidth": (), + "QRawFont.boundingRect": ('int',), + "QRawFont.capHeight": (), + "QRawFont.descent": (), + "QRawFont.familyName": (), + "QRawFont.fontTable": ('str',), + "QRawFont.fromFont": ('PySide2.QtGui.QFont', 'PySide2.QtGui.QFontDatabase.WritingSystem'), + "QRawFont.glyphIndexesForString": ('str',), + "QRawFont.hintingPreference": (), + "QRawFont.isValid": (), + "QRawFont.leading": (), + "QRawFont.lineThickness": (), + "QRawFont.loadFromData": ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.loadFromFile": ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.maxCharWidth": (), + "QRawFont.pathForGlyph": ('int',), + "QRawFont.pixelSize": (), + "QRawFont.setPixelSize": ('float',), + "QRawFont.style": (), + "QRawFont.styleName": (), + "QRawFont.supportedWritingSystems": (), + "QRawFont.supportsCharacter": [('Union[str, int]',), ('int',)], + "QRawFont.swap": ('PySide2.QtGui.QRawFont',), + "QRawFont.underlinePosition": (), + "QRawFont.unitsPerEm": (), + "QRawFont.weight": (), + "QRawFont.xHeight": (), + + # class PySide2.QtGui.QRegExpValidator: + "QRegExpValidator.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRegExp', 'PySide2.QtCore.QObject')], + "QRegExpValidator.regExp": (), + "QRegExpValidator.setRegExp": ('PySide2.QtCore.QRegExp',), + "QRegExpValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QRegion: + "QRegion.__init__": [(), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion.RegionType'), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion.RegionType')], + "QRegion.__copy__": (), + "QRegion.begin": (), + "QRegion.boundingRect": (), + "QRegion.cbegin": (), + "QRegion.cend": (), + "QRegion.contains": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',)], + "QRegion.end": (), + "QRegion.intersected": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.intersects": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.isEmpty": (), + "QRegion.isNull": (), + "QRegion.rectCount": (), + "QRegion.rects": (), + "QRegion.setRects": ('PySide2.QtCore.QRect', 'int'), + "QRegion.subtracted": ('PySide2.QtGui.QRegion',), + "QRegion.swap": ('PySide2.QtGui.QRegion',), + "QRegion.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.united": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.xored": ('PySide2.QtGui.QRegion',), + + # class PySide2.QtGui.QResizeEvent: + "QResizeEvent.__init__": ('PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QResizeEvent.oldSize": (), + "QResizeEvent.size": (), + + # class PySide2.QtGui.QScreen: + "QScreen.angleBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation'), + "QScreen.availableGeometry": (), + "QScreen.availableSize": (), + "QScreen.availableVirtualGeometry": (), + "QScreen.availableVirtualSize": (), + "QScreen.depth": (), + "QScreen.devicePixelRatio": (), + "QScreen.geometry": (), + "QScreen.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QScreen.isLandscape": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.isPortrait": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.logicalDotsPerInch": (), + "QScreen.logicalDotsPerInchX": (), + "QScreen.logicalDotsPerInchY": (), + "QScreen.manufacturer": (), + "QScreen.mapBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.model": (), + "QScreen.name": (), + "QScreen.nativeOrientation": (), + "QScreen.orientation": (), + "QScreen.orientationUpdateMask": (), + "QScreen.physicalDotsPerInch": (), + "QScreen.physicalDotsPerInchX": (), + "QScreen.physicalDotsPerInchY": (), + "QScreen.physicalSize": (), + "QScreen.primaryOrientation": (), + "QScreen.refreshRate": (), + "QScreen.serialNumber": (), + "QScreen.setOrientationUpdateMask": ('PySide2.libpyside.ScreenOrientations',), + "QScreen.size": (), + "QScreen.transformBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.virtualGeometry": (), + "QScreen.virtualSiblings": (), + "QScreen.virtualSize": (), + + # class PySide2.QtGui.QScrollEvent: + "QScrollEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtGui.QScrollEvent.ScrollState'), + "QScrollEvent.contentPos": (), + "QScrollEvent.overshootDistance": (), + "QScrollEvent.scrollState": (), + + # class PySide2.QtGui.QScrollPrepareEvent: + "QScrollPrepareEvent.__init__": ('PySide2.QtCore.QPointF',), + "QScrollPrepareEvent.contentPos": (), + "QScrollPrepareEvent.contentPosRange": (), + "QScrollPrepareEvent.setContentPos": ('PySide2.QtCore.QPointF',), + "QScrollPrepareEvent.setContentPosRange": ('PySide2.QtCore.QRectF',), + "QScrollPrepareEvent.setViewportSize": ('PySide2.QtCore.QSizeF',), + "QScrollPrepareEvent.startPos": (), + "QScrollPrepareEvent.viewportSize": (), + + # class PySide2.QtGui.QSessionManager: + "QSessionManager.allowsErrorInteraction": (), + "QSessionManager.allowsInteraction": (), + "QSessionManager.cancel": (), + "QSessionManager.discardCommand": (), + "QSessionManager.isPhase2": (), + "QSessionManager.release": (), + "QSessionManager.requestPhase2": (), + "QSessionManager.restartCommand": (), + "QSessionManager.restartHint": (), + "QSessionManager.sessionId": (), + "QSessionManager.sessionKey": (), + "QSessionManager.setDiscardCommand": ('List[str]',), + "QSessionManager.setManagerProperty": [('str', 'List[str]'), ('str', 'str')], + "QSessionManager.setRestartCommand": ('List[str]',), + "QSessionManager.setRestartHint": ('PySide2.QtGui.QSessionManager.RestartHint',), + + # class PySide2.QtGui.QShortcutEvent: + "QShortcutEvent.__init__": ('PySide2.QtGui.QKeySequence', 'int', 'bool'), + "QShortcutEvent.isAmbiguous": (), + "QShortcutEvent.key": (), + "QShortcutEvent.shortcutId": (), + + # class PySide2.QtGui.QShowEvent: + "QShowEvent.__init__": (), + + # class PySide2.QtGui.QStandardItem: + "QStandardItem.__init__": [(), ('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QStandardItem',), ('int', 'int'), ('str',)], + "QStandardItem.accessibleDescription": (), + "QStandardItem.accessibleText": (), + "QStandardItem.appendColumn": ('list',), + "QStandardItem.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItem.appendRows": ('list',), + "QStandardItem.background": (), + "QStandardItem.checkState": (), + "QStandardItem.child": ('int', 'int'), + "QStandardItem.clone": (), + "QStandardItem.column": (), + "QStandardItem.columnCount": (), + "QStandardItem.data": ('int',), + "QStandardItem.emitDataChanged": (), + "QStandardItem.flags": (), + "QStandardItem.font": (), + "QStandardItem.foreground": (), + "QStandardItem.hasChildren": (), + "QStandardItem.icon": (), + "QStandardItem.index": (), + "QStandardItem.insertColumn": ('int', 'list'), + "QStandardItem.insertColumns": ('int', 'int'), + "QStandardItem.insertRow": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItem.insertRows": [('int', 'int'), ('int', 'list')], + "QStandardItem.isAutoTristate": (), + "QStandardItem.isCheckable": (), + "QStandardItem.isDragEnabled": (), + "QStandardItem.isDropEnabled": (), + "QStandardItem.isEditable": (), + "QStandardItem.isEnabled": (), + "QStandardItem.isSelectable": (), + "QStandardItem.isTristate": (), + "QStandardItem.isUserTristate": (), + "QStandardItem.model": (), + "QStandardItem.parent": (), + "QStandardItem.read": ('PySide2.QtCore.QDataStream',), + "QStandardItem.removeColumn": ('int',), + "QStandardItem.removeColumns": ('int', 'int'), + "QStandardItem.removeRow": ('int',), + "QStandardItem.removeRows": ('int', 'int'), + "QStandardItem.row": (), + "QStandardItem.rowCount": (), + "QStandardItem.setAccessibleDescription": ('str',), + "QStandardItem.setAccessibleText": ('str',), + "QStandardItem.setAutoTristate": ('bool',), + "QStandardItem.setBackground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QStandardItem.setCheckable": ('bool',), + "QStandardItem.setChild": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItem.setColumnCount": ('int',), + "QStandardItem.setData": ('Any', 'int'), + "QStandardItem.setDragEnabled": ('bool',), + "QStandardItem.setDropEnabled": ('bool',), + "QStandardItem.setEditable": ('bool',), + "QStandardItem.setEnabled": ('bool',), + "QStandardItem.setFlags": ('PySide2.libpyside.ItemFlags',), + "QStandardItem.setFont": ('PySide2.QtGui.QFont',), + "QStandardItem.setForeground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setIcon": ('PySide2.QtGui.QIcon',), + "QStandardItem.setRowCount": ('int',), + "QStandardItem.setSelectable": ('bool',), + "QStandardItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QStandardItem.setStatusTip": ('str',), + "QStandardItem.setText": ('str',), + "QStandardItem.setTextAlignment": ('PySide2.libpyside.Alignment',), + "QStandardItem.setToolTip": ('str',), + "QStandardItem.setTristate": ('bool',), + "QStandardItem.setUserTristate": ('bool',), + "QStandardItem.setWhatsThis": ('str',), + "QStandardItem.sizeHint": (), + "QStandardItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItem.statusTip": (), + "QStandardItem.takeChild": ('int', 'int'), + "QStandardItem.takeColumn": ('int',), + "QStandardItem.takeRow": ('int',), + "QStandardItem.text": (), + "QStandardItem.textAlignment": (), + "QStandardItem.toolTip": (), + "QStandardItem.type": (), + "QStandardItem.whatsThis": (), + "QStandardItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QStandardItemModel: + "QStandardItemModel.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QStandardItemModel.appendColumn": ('list',), + "QStandardItemModel.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItemModel.clear": (), + "QStandardItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStandardItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.findItems": ('str', 'PySide2.libpyside.MatchFlags', 'int'), + "QStandardItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QStandardItemModel.horizontalHeaderItem": ('int',), + "QStandardItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.indexFromItem": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.insertColumn": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'list')], + "QStandardItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.insertRow": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.invisibleRootItem": (), + "QStandardItemModel.item": ('int', 'int'), + "QStandardItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemPrototype": (), + "QStandardItemModel.mimeData": ('List[int]',), + "QStandardItemModel.mimeTypes": (), + "QStandardItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QStandardItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.setColumnCount": ('int',), + "QStandardItemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QStandardItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QStandardItemModel.setHorizontalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setHorizontalHeaderLabels": ('List[str]',), + "QStandardItemModel.setItem": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QStandardItemModel.setItemPrototype": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.setItemRoleNames": ('dict',), + "QStandardItemModel.setRowCount": ('int',), + "QStandardItemModel.setSortRole": ('int',), + "QStandardItemModel.setVerticalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setVerticalHeaderLabels": ('List[str]',), + "QStandardItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItemModel.sortRole": (), + "QStandardItemModel.supportedDropActions": (), + "QStandardItemModel.takeColumn": ('int',), + "QStandardItemModel.takeHorizontalHeaderItem": ('int',), + "QStandardItemModel.takeItem": ('int', 'int'), + "QStandardItemModel.takeRow": ('int',), + "QStandardItemModel.takeVerticalHeaderItem": ('int',), + "QStandardItemModel.verticalHeaderItem": ('int',), + + # class PySide2.QtGui.QStaticText: + "QStaticText.__init__": [(), ('PySide2.QtGui.QStaticText',), ('str',)], + "QStaticText.__copy__": (), + "QStaticText.performanceHint": (), + "QStaticText.prepare": ('PySide2.QtGui.QTransform', 'PySide2.QtGui.QFont'), + "QStaticText.setPerformanceHint": ('PySide2.QtGui.QStaticText.PerformanceHint',), + "QStaticText.setText": ('str',), + "QStaticText.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QStaticText.setTextOption": ('PySide2.QtGui.QTextOption',), + "QStaticText.setTextWidth": ('float',), + "QStaticText.size": (), + "QStaticText.swap": ('PySide2.QtGui.QStaticText',), + "QStaticText.text": (), + "QStaticText.textFormat": (), + "QStaticText.textOption": (), + "QStaticText.textWidth": (), + + # class PySide2.QtGui.QStatusTipEvent: + "QStatusTipEvent.__init__": ('str',), + "QStatusTipEvent.tip": (), + + # class PySide2.QtGui.QStyleHints: + "QStyleHints.cursorFlashTime": (), + "QStyleHints.fontSmoothingGamma": (), + "QStyleHints.keyboardAutoRepeatRate": (), + "QStyleHints.keyboardInputInterval": (), + "QStyleHints.mouseDoubleClickInterval": (), + "QStyleHints.mousePressAndHoldInterval": (), + "QStyleHints.mouseQuickSelectionThreshold": (), + "QStyleHints.passwordMaskCharacter": (), + "QStyleHints.passwordMaskDelay": (), + "QStyleHints.setCursorFlashTime": ('int',), + "QStyleHints.setFocusOnTouchRelease": (), + "QStyleHints.setKeyboardInputInterval": ('int',), + "QStyleHints.setMouseDoubleClickInterval": ('int',), + "QStyleHints.setMousePressAndHoldInterval": ('int',), + "QStyleHints.setMouseQuickSelectionThreshold": ('int',), + "QStyleHints.setStartDragDistance": ('int',), + "QStyleHints.setStartDragTime": ('int',), + "QStyleHints.setTabFocusBehavior": ('PySide2.QtCore.Qt.TabFocusBehavior',), + "QStyleHints.setUseHoverEffects": ('bool',), + "QStyleHints.setWheelScrollLines": ('int',), + "QStyleHints.showIsFullScreen": (), + "QStyleHints.showIsMaximized": (), + "QStyleHints.showShortcutsInContextMenus": (), + "QStyleHints.singleClickActivation": (), + "QStyleHints.startDragDistance": (), + "QStyleHints.startDragTime": (), + "QStyleHints.startDragVelocity": (), + "QStyleHints.tabFocusBehavior": (), + "QStyleHints.useHoverEffects": (), + "QStyleHints.useRtlExtensions": (), + "QStyleHints.wheelScrollLines": (), + + # class PySide2.QtGui.QSurface: + "QSurface.__init__": ('PySide2.QtGui.QSurface.SurfaceClass',), + "QSurface.format": (), + "QSurface.size": (), + "QSurface.supportsOpenGL": (), + "QSurface.surfaceClass": (), + "QSurface.surfaceHandle": (), + "QSurface.surfaceType": (), + + # class PySide2.QtGui.QSurfaceFormat: + "QSurfaceFormat.__init__": [(), ('PySide2.QtGui.QSurfaceFormat',), ('PySide2.libpyside.FormatOptions',)], + "QSurfaceFormat.__copy__": (), + "QSurfaceFormat.alphaBufferSize": (), + "QSurfaceFormat.blueBufferSize": (), + "QSurfaceFormat.colorSpace": (), + "QSurfaceFormat.defaultFormat": (), + "QSurfaceFormat.depthBufferSize": (), + "QSurfaceFormat.greenBufferSize": (), + "QSurfaceFormat.hasAlpha": (), + "QSurfaceFormat.majorVersion": (), + "QSurfaceFormat.minorVersion": (), + "QSurfaceFormat.options": (), + "QSurfaceFormat.profile": (), + "QSurfaceFormat.redBufferSize": (), + "QSurfaceFormat.renderableType": (), + "QSurfaceFormat.samples": (), + "QSurfaceFormat.setAlphaBufferSize": ('int',), + "QSurfaceFormat.setBlueBufferSize": ('int',), + "QSurfaceFormat.setColorSpace": ('PySide2.QtGui.QSurfaceFormat.ColorSpace',), + "QSurfaceFormat.setDefaultFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QSurfaceFormat.setDepthBufferSize": ('int',), + "QSurfaceFormat.setGreenBufferSize": ('int',), + "QSurfaceFormat.setMajorVersion": ('int',), + "QSurfaceFormat.setMinorVersion": ('int',), + "QSurfaceFormat.setOption": [('PySide2.QtGui.QSurfaceFormat.FormatOption', 'bool'), ('PySide2.libpyside.FormatOptions',)], + "QSurfaceFormat.setOptions": ('PySide2.libpyside.FormatOptions',), + "QSurfaceFormat.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QSurfaceFormat.setRedBufferSize": ('int',), + "QSurfaceFormat.setRenderableType": ('PySide2.QtGui.QSurfaceFormat.RenderableType',), + "QSurfaceFormat.setSamples": ('int',), + "QSurfaceFormat.setStencilBufferSize": ('int',), + "QSurfaceFormat.setStereo": ('bool',), + "QSurfaceFormat.setSwapBehavior": ('PySide2.QtGui.QSurfaceFormat.SwapBehavior',), + "QSurfaceFormat.setSwapInterval": ('int',), + "QSurfaceFormat.setVersion": ('int', 'int'), + "QSurfaceFormat.stencilBufferSize": (), + "QSurfaceFormat.stereo": (), + "QSurfaceFormat.swapBehavior": (), + "QSurfaceFormat.swapInterval": (), + "QSurfaceFormat.testOption": [('PySide2.QtGui.QSurfaceFormat.FormatOption',), ('PySide2.libpyside.FormatOptions',)], + "QSurfaceFormat.version": (), + + # class PySide2.QtGui.QSyntaxHighlighter: + "QSyntaxHighlighter.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QTextDocument',)], + "QSyntaxHighlighter.currentBlock": (), + "QSyntaxHighlighter.currentBlockState": (), + "QSyntaxHighlighter.currentBlockUserData": (), + "QSyntaxHighlighter.document": (), + "QSyntaxHighlighter.format": ('int',), + "QSyntaxHighlighter.highlightBlock": ('str',), + "QSyntaxHighlighter.previousBlockState": (), + "QSyntaxHighlighter.rehighlight": (), + "QSyntaxHighlighter.rehighlightBlock": ('PySide2.QtGui.QTextBlock',), + "QSyntaxHighlighter.setCurrentBlockState": ('int',), + "QSyntaxHighlighter.setCurrentBlockUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QSyntaxHighlighter.setDocument": ('PySide2.QtGui.QTextDocument',), + "QSyntaxHighlighter.setFormat": [('int', 'int', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QFont'), ('int', 'int', 'PySide2.QtGui.QTextCharFormat')], + + # class PySide2.QtGui.QTabletEvent: + "QTabletEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'PySide2.libpyside.KeyboardModifiers', 'int', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons')], + "QTabletEvent.button": (), + "QTabletEvent.buttons": (), + "QTabletEvent.device": (), + "QTabletEvent.globalPos": (), + "QTabletEvent.globalPosF": (), + "QTabletEvent.globalX": (), + "QTabletEvent.global""Y": (), + "QTabletEvent.hiResGlobalX": (), + "QTabletEvent.hiResGlobal""Y": (), + "QTabletEvent.pointerType": (), + "QTabletEvent.pos": (), + "QTabletEvent.posF": (), + "QTabletEvent.pressure": (), + "QTabletEvent.rotation": (), + "QTabletEvent.tangentialPressure": (), + "QTabletEvent.uniqueId": (), + "QTabletEvent.x": (), + "QTabletEvent.xTilt": (), + "QTabletEvent.y": (), + "QTabletEvent.yTilt": (), + "QTabletEvent.z": (), + + # class PySide2.QtGui.QTextBlock: + "QTextBlock.__init__": [(), ('PySide2.QtGui.QTextBlock',)], + "QTextBlock.__copy__": (), + "QTextBlock.begin": (), + "QTextBlock.blockFormat": (), + "QTextBlock.blockFormatIndex": (), + "QTextBlock.blockNumber": (), + "QTextBlock.charFormat": (), + "QTextBlock.charFormatIndex": (), + "QTextBlock.clearLayout": (), + "QTextBlock.contains": ('int',), + "QTextBlock.document": (), + "QTextBlock.end": (), + "QTextBlock.firstLineNumber": (), + "QTextBlock.fragmentIndex": (), + "QTextBlock.isValid": (), + "QTextBlock.isVisible": (), + "QTextBlock.layout": (), + "QTextBlock.length": (), + "QTextBlock.lineCount": (), + "QTextBlock.position": (), + "QTextBlock.previous": (), + "QTextBlock.revision": (), + "QTextBlock.setLineCount": ('int',), + "QTextBlock.setRevision": ('int',), + "QTextBlock.setUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QTextBlock.setUserState": ('int',), + "QTextBlock.setVisible": ('bool',), + "QTextBlock.text": (), + "QTextBlock.textDirection": (), + "QTextBlock.textFormats": (), + "QTextBlock.textList": (), + "QTextBlock.userData": (), + "QTextBlock.userState": (), + + # class PySide2.QtGui.QTextBlockFormat: + "QTextBlockFormat.__init__": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextBlockFormat.__copy__": (), + "QTextBlockFormat.alignment": (), + "QTextBlockFormat.bottomMargin": (), + "QTextBlockFormat.indent": (), + "QTextBlockFormat.isValid": (), + "QTextBlockFormat.leftMargin": (), + "QTextBlockFormat.lineHeight": [(), ('float', 'float')], + "QTextBlockFormat.lineHeightType": (), + "QTextBlockFormat.nonBreakableLines": (), + "QTextBlockFormat.pageBreakPolicy": (), + "QTextBlockFormat.rightMargin": (), + "QTextBlockFormat.setAlignment": ('PySide2.libpyside.Alignment',), + "QTextBlockFormat.setBottomMargin": ('float',), + "QTextBlockFormat.setIndent": ('int',), + "QTextBlockFormat.setLeftMargin": ('float',), + "QTextBlockFormat.setLineHeight": ('float', 'int'), + "QTextBlockFormat.setNonBreakableLines": ('bool',), + "QTextBlockFormat.setPageBreakPolicy": ('PySide2.libpyside.PageBreakFlags',), + "QTextBlockFormat.setRightMargin": ('float',), + "QTextBlockFormat.setTabPositions": ('list',), + "QTextBlockFormat.setTextIndent": ('float',), + "QTextBlockFormat.setTopMargin": ('float',), + "QTextBlockFormat.tabPositions": (), + "QTextBlockFormat.textIndent": (), + "QTextBlockFormat.topMargin": (), + + # class PySide2.QtGui.QTextBlockGroup: + "QTextBlockGroup.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextBlockGroup.blockFormatChanged": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockInserted": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockList": (), + "QTextBlockGroup.blockRemoved": ('PySide2.QtGui.QTextBlock',), + + # class PySide2.QtGui.QTextBlockUserData: + "QTextBlockUserData.__init__": (), + + # class PySide2.QtGui.QTextCharFormat: + "QTextCharFormat.__init__": [(), ('PySide2.QtGui.QTextCharFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextCharFormat.__copy__": (), + "QTextCharFormat.anchorHref": (), + "QTextCharFormat.anchorName": (), + "QTextCharFormat.anchorNames": (), + "QTextCharFormat.font": (), + "QTextCharFormat.fontCapitalization": (), + "QTextCharFormat.fontFamily": (), + "QTextCharFormat.fontFixedPitch": (), + "QTextCharFormat.fontHintingPreference": (), + "QTextCharFormat.fontItalic": (), + "QTextCharFormat.fontKerning": (), + "QTextCharFormat.fontLetterSpacing": (), + "QTextCharFormat.fontLetterSpacingType": (), + "QTextCharFormat.fontOverline": (), + "QTextCharFormat.fontPointSize": (), + "QTextCharFormat.fontStretch": (), + "QTextCharFormat.fontStrikeOut": (), + "QTextCharFormat.fontStyleHint": (), + "QTextCharFormat.fontStyleStrategy": (), + "QTextCharFormat.fontUnderline": (), + "QTextCharFormat.fontWeight": (), + "QTextCharFormat.fontWordSpacing": (), + "QTextCharFormat.isAnchor": (), + "QTextCharFormat.isValid": (), + "QTextCharFormat.setAnchor": ('bool',), + "QTextCharFormat.setAnchorHref": ('str',), + "QTextCharFormat.setAnchorName": ('str',), + "QTextCharFormat.setAnchorNames": ('List[str]',), + "QTextCharFormat.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior')], + "QTextCharFormat.setFontCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QTextCharFormat.setFontFamily": ('str',), + "QTextCharFormat.setFontFixedPitch": ('bool',), + "QTextCharFormat.setFontHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QTextCharFormat.setFontItalic": ('bool',), + "QTextCharFormat.setFontKerning": ('bool',), + "QTextCharFormat.setFontLetterSpacing": ('float',), + "QTextCharFormat.setFontLetterSpacingType": ('PySide2.QtGui.QFont.SpacingType',), + "QTextCharFormat.setFontOverline": ('bool',), + "QTextCharFormat.setFontPointSize": ('float',), + "QTextCharFormat.setFontStretch": ('int',), + "QTextCharFormat.setFontStrikeOut": ('bool',), + "QTextCharFormat.setFontStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QTextCharFormat.setFontStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QTextCharFormat.setFontUnderline": ('bool',), + "QTextCharFormat.setFontWeight": ('int',), + "QTextCharFormat.setFontWordSpacing": ('float',), + "QTextCharFormat.setTableCellColumnSpan": ('int',), + "QTextCharFormat.setTableCellRowSpan": ('int',), + "QTextCharFormat.setTextOutline": ('PySide2.QtGui.QPen',), + "QTextCharFormat.setToolTip": ('str',), + "QTextCharFormat.setUnderlineColor": ('PySide2.QtGui.QColor',), + "QTextCharFormat.setUnderlineStyle": ('PySide2.QtGui.QTextCharFormat.UnderlineStyle',), + "QTextCharFormat.setVerticalAlignment": ('PySide2.QtGui.QTextCharFormat.VerticalAlignment',), + "QTextCharFormat.tableCellColumnSpan": (), + "QTextCharFormat.tableCellRowSpan": (), + "QTextCharFormat.textOutline": (), + "QTextCharFormat.toolTip": (), + "QTextCharFormat.underlineColor": (), + "QTextCharFormat.underlineStyle": (), + "QTextCharFormat.verticalAlignment": (), + + # class PySide2.QtGui.QTextCursor: + "QTextCursor.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextFrame',)], + "QTextCursor.__copy__": (), + "QTextCursor.anchor": (), + "QTextCursor.atBlockEnd": (), + "QTextCursor.atBlockStart": (), + "QTextCursor.atEnd": (), + "QTextCursor.atStart": (), + "QTextCursor.beginEditBlock": (), + "QTextCursor.block": (), + "QTextCursor.blockCharFormat": (), + "QTextCursor.blockFormat": (), + "QTextCursor.blockNumber": (), + "QTextCursor.charFormat": (), + "QTextCursor.clearSelection": (), + "QTextCursor.columnNumber": (), + "QTextCursor.createList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.currentFrame": (), + "QTextCursor.currentList": (), + "QTextCursor.currentTable": (), + "QTextCursor.deleteChar": (), + "QTextCursor.deletePreviousChar": (), + "QTextCursor.document": (), + "QTextCursor.endEditBlock": (), + "QTextCursor.hasComplexSelection": (), + "QTextCursor.hasSelection": (), + "QTextCursor.insertBlock": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextBlockFormat', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.insertFragment": ('PySide2.QtGui.QTextDocumentFragment',), + "QTextCursor.insertFrame": ('PySide2.QtGui.QTextFrameFormat',), + "QTextCursor.insertHtml": ('str',), + "QTextCursor.insertImage": [('PySide2.QtGui.QImage', 'str'), ('PySide2.QtGui.QTextImageFormat',), ('PySide2.QtGui.QTextImageFormat', 'PySide2.QtGui.QTextFrameFormat.Position'), ('str',)], + "QTextCursor.insertList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.insertTable": [('int', 'int'), ('int', 'int', 'PySide2.QtGui.QTextTableFormat')], + "QTextCursor.insertText": [('str',), ('str', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.isCopyOf": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.isNull": (), + "QTextCursor.joinPreviousEditBlock": (), + "QTextCursor.keepPositionOnInsert": (), + "QTextCursor.mergeBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.mergeBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.mergeCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.movePosition": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode', 'int'), + "QTextCursor.position": (), + "QTextCursor.positionInBlock": (), + "QTextCursor.removeSelectedText": (), + "QTextCursor.select": ('PySide2.QtGui.QTextCursor.SelectionType',), + "QTextCursor.selectedTableCells": ('int', 'int', 'int', 'int'), + "QTextCursor.selectedText": (), + "QTextCursor.selection": (), + "QTextCursor.selectionEnd": (), + "QTextCursor.selectionStart": (), + "QTextCursor.setBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.setCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setKeepPositionOnInsert": ('bool',), + "QTextCursor.setPosition": ('int', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextCursor.setVerticalMovementX": ('int',), + "QTextCursor.setVisualNavigation": ('bool',), + "QTextCursor.swap": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.verticalMovementX": (), + "QTextCursor.visualNavigation": (), + + # class PySide2.QtGui.QTextDocument: + "QTextDocument.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextDocument.addResource": ('int', 'PySide2.QtCore.QUrl', 'Any'), + "QTextDocument.adjustSize": (), + "QTextDocument.allFormats": (), + "QTextDocument.availableRedoSteps": (), + "QTextDocument.availableUndoSteps": (), + "QTextDocument.baseUrl": (), + "QTextDocument.begin": (), + "QTextDocument.blockCount": (), + "QTextDocument.characterAt": ('int',), + "QTextDocument.characterCount": (), + "QTextDocument.clear": (), + "QTextDocument.clearUndoRedoStacks": ('PySide2.QtGui.QTextDocument.Stacks',), + "QTextDocument.clone": ('PySide2.QtCore.QObject',), + "QTextDocument.createObject": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.defaultCursorMoveStyle": (), + "QTextDocument.defaultFont": (), + "QTextDocument.defaultStyleSheet": (), + "QTextDocument.defaultTextOption": (), + "QTextDocument.documentLayout": (), + "QTextDocument.documentMargin": (), + "QTextDocument.drawContents": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QTextDocument.end": (), + "QTextDocument.find": [('PySide2.QtCore.QRegExp', 'PySide2.QtGui.QTextCursor', 'PySide2.libpyside.FindFlags'), ('PySide2.QtCore.QRegExp', 'int', 'PySide2.libpyside.FindFlags'), ('PySide2.QtCore.QRegularExpression', 'PySide2.QtGui.QTextCursor', 'PySide2.libpyside.FindFlags'), ('PySide2.QtCore.QRegularExpression', 'int', 'PySide2.libpyside.FindFlags'), ('str', 'PySide2.QtGui.QTextCursor', 'PySide2.libpyside.FindFlags'), ('str', 'int', 'PySide2.libpyside.FindFlags')], + "QTextDocument.findBlock": ('int',), + "QTextDocument.findBlockByLineNumber": ('int',), + "QTextDocument.findBlockByNumber": ('int',), + "QTextDocument.firstBlock": (), + "QTextDocument.frameAt": ('int',), + "QTextDocument.idealWidth": (), + "QTextDocument.indentWidth": (), + "QTextDocument.isEmpty": (), + "QTextDocument.isModified": (), + "QTextDocument.isRedoAvailable": (), + "QTextDocument.isUndoAvailable": (), + "QTextDocument.isUndoRedoEnabled": (), + "QTextDocument.lastBlock": (), + "QTextDocument.lineCount": (), + "QTextDocument.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.markContentsDirty": ('int', 'int'), + "QTextDocument.maximumBlockCount": (), + "QTextDocument.metaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation',), + "QTextDocument.object": ('int',), + "QTextDocument.objectForFormat": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.pageCount": (), + "QTextDocument.pageSize": (), + "QTextDocument.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextDocument.redo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.resource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.revision": (), + "QTextDocument.rootFrame": (), + "QTextDocument.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QTextDocument.setDefaultCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextDocument.setDefaultFont": ('PySide2.QtGui.QFont',), + "QTextDocument.setDefaultStyleSheet": ('str',), + "QTextDocument.setDefaultTextOption": ('PySide2.QtGui.QTextOption',), + "QTextDocument.setDocumentLayout": ('PySide2.QtGui.QAbstractTextDocumentLayout',), + "QTextDocument.setDocumentMargin": ('float',), + "QTextDocument.setHtml": ('str',), + "QTextDocument.setIndentWidth": ('float',), + "QTextDocument.setMaximumBlockCount": ('int',), + "QTextDocument.setMetaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation', 'str'), + "QTextDocument.setModified": ('bool',), + "QTextDocument.setPageSize": ('PySide2.QtCore.QSizeF',), + "QTextDocument.setPlainText": ('str',), + "QTextDocument.setTextWidth": ('float',), + "QTextDocument.setUndoRedoEnabled": ('bool',), + "QTextDocument.setUseDesignMetrics": ('bool',), + "QTextDocument.size": (), + "QTextDocument.textWidth": (), + "QTextDocument.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocument.toPlainText": (), + "QTextDocument.toRawText": (), + "QTextDocument.undo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.useDesignMetrics": (), + + # class PySide2.QtGui.QTextDocumentFragment: + "QTextDocumentFragment.__init__": [(), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + "QTextDocumentFragment.__copy__": (), + "QTextDocumentFragment.fromHtml": [('str',), ('str', 'PySide2.QtGui.QTextDocument')], + "QTextDocumentFragment.fromPlainText": ('str',), + "QTextDocumentFragment.isEmpty": (), + "QTextDocumentFragment.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocumentFragment.toPlainText": (), + + # class PySide2.QtGui.QTextDocumentWriter: + "QTextDocumentWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QTextDocumentWriter.codec": (), + "QTextDocumentWriter.device": (), + "QTextDocumentWriter.fileName": (), + "QTextDocumentWriter.format": (), + "QTextDocumentWriter.setCodec": ('PySide2.QtCore.QTextCodec',), + "QTextDocumentWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextDocumentWriter.setFileName": ('str',), + "QTextDocumentWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QTextDocumentWriter.supportedDocumentFormats": (), + "QTextDocumentWriter.write": [('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + + # class PySide2.QtGui.QTextFormat: + "QTextFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('int',)], + "QTextFormat.__copy__": (), + "QTextFormat.background": (), + "QTextFormat.boolProperty": ('int',), + "QTextFormat.brushProperty": ('int',), + "QTextFormat.clearBackground": (), + "QTextFormat.clearForeground": (), + "QTextFormat.clearProperty": ('int',), + "QTextFormat.colorProperty": ('int',), + "QTextFormat.doubleProperty": ('int',), + "QTextFormat.foreground": (), + "QTextFormat.hasProperty": ('int',), + "QTextFormat.intProperty": ('int',), + "QTextFormat.isBlockFormat": (), + "QTextFormat.isCharFormat": (), + "QTextFormat.isEmpty": (), + "QTextFormat.isFrameFormat": (), + "QTextFormat.isImageFormat": (), + "QTextFormat.isListFormat": (), + "QTextFormat.isTableCellFormat": (), + "QTextFormat.isTableFormat": (), + "QTextFormat.isValid": (), + "QTextFormat.layoutDirection": (), + "QTextFormat.lengthProperty": ('int',), + "QTextFormat.lengthVectorProperty": ('int',), + "QTextFormat.merge": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.objectIndex": (), + "QTextFormat.objectType": (), + "QTextFormat.penProperty": ('int',), + "QTextFormat.properties": (), + "QTextFormat.property": ('int',), + "QTextFormat.propertyCount": (), + "QTextFormat.setBackground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setForeground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextFormat.setObjectIndex": ('int',), + "QTextFormat.setObjectType": ('int',), + "QTextFormat.setProperty": [('int', 'Any'), ('int', 'list')], + "QTextFormat.stringProperty": ('int',), + "QTextFormat.swap": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.toBlockFormat": (), + "QTextFormat.toCharFormat": (), + "QTextFormat.toFrameFormat": (), + "QTextFormat.toImageFormat": (), + "QTextFormat.toListFormat": (), + "QTextFormat.toTableCellFormat": (), + "QTextFormat.toTableFormat": (), + "QTextFormat.type": (), + + # class PySide2.QtGui.QTextFragment: + "QTextFragment.__init__": [(), ('PySide2.QtGui.QTextFragment',)], + "QTextFragment.__copy__": (), + "QTextFragment.charFormat": (), + "QTextFragment.charFormatIndex": (), + "QTextFragment.contains": ('int',), + "QTextFragment.isValid": (), + "QTextFragment.length": (), + "QTextFragment.position": (), + "QTextFragment.text": (), + + # class PySide2.QtGui.QTextFrame: + "QTextFrame.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextFrame.begin": (), + "QTextFrame.childFrames": (), + "QTextFrame.end": (), + "QTextFrame.firstCursorPosition": (), + "QTextFrame.firstPosition": (), + "QTextFrame.frameFormat": (), + "QTextFrame.lastCursorPosition": (), + "QTextFrame.lastPosition": (), + "QTextFrame.parentFrame": (), + "QTextFrame.setFrameFormat": ('PySide2.QtGui.QTextFrameFormat',), + + # class PySide2.QtGui.QTextFrameFormat: + "QTextFrameFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextFrameFormat',)], + "QTextFrameFormat.__copy__": (), + "QTextFrameFormat.border": (), + "QTextFrameFormat.borderBrush": (), + "QTextFrameFormat.borderStyle": (), + "QTextFrameFormat.bottomMargin": (), + "QTextFrameFormat.height": (), + "QTextFrameFormat.isValid": (), + "QTextFrameFormat.leftMargin": (), + "QTextFrameFormat.margin": (), + "QTextFrameFormat.padding": (), + "QTextFrameFormat.pageBreakPolicy": (), + "QTextFrameFormat.position": (), + "QTextFrameFormat.rightMargin": (), + "QTextFrameFormat.setBorder": ('float',), + "QTextFrameFormat.setBorderBrush": ('PySide2.QtGui.QBrush',), + "QTextFrameFormat.setBorderStyle": ('PySide2.QtGui.QTextFrameFormat.BorderStyle',), + "QTextFrameFormat.setBottomMargin": ('float',), + "QTextFrameFormat.setHeight": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.setLeftMargin": ('float',), + "QTextFrameFormat.setMargin": ('float',), + "QTextFrameFormat.setPadding": ('float',), + "QTextFrameFormat.setPageBreakPolicy": ('PySide2.libpyside.PageBreakFlags',), + "QTextFrameFormat.setPosition": ('PySide2.QtGui.QTextFrameFormat.Position',), + "QTextFrameFormat.setRightMargin": ('float',), + "QTextFrameFormat.setTopMargin": ('float',), + "QTextFrameFormat.setWidth": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.topMargin": (), + "QTextFrameFormat.width": (), + + # class PySide2.QtGui.QTextImageFormat: + "QTextImageFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextImageFormat',)], + "QTextImageFormat.__copy__": (), + "QTextImageFormat.height": (), + "QTextImageFormat.isValid": (), + "QTextImageFormat.name": (), + "QTextImageFormat.setHeight": ('float',), + "QTextImageFormat.setName": ('str',), + "QTextImageFormat.setWidth": ('float',), + "QTextImageFormat.width": (), + + # class PySide2.QtGui.QTextInlineObject: + "QTextInlineObject.__init__": (), + "QTextInlineObject.__copy__": (), + "QTextInlineObject.ascent": (), + "QTextInlineObject.descent": (), + "QTextInlineObject.format": (), + "QTextInlineObject.formatIndex": (), + "QTextInlineObject.height": (), + "QTextInlineObject.isValid": (), + "QTextInlineObject.rect": (), + "QTextInlineObject.setAscent": ('float',), + "QTextInlineObject.setDescent": ('float',), + "QTextInlineObject.setWidth": ('float',), + "QTextInlineObject.textDirection": (), + "QTextInlineObject.textPosition": (), + "QTextInlineObject.width": (), + + # class PySide2.QtGui.QTextItem: + "QTextItem.__init__": (), + "QTextItem.ascent": (), + "QTextItem.descent": (), + "QTextItem.font": (), + "QTextItem.renderFlags": (), + "QTextItem.text": (), + "QTextItem.width": (), + + # class PySide2.QtGui.QTextLayout: + "QTextLayout.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('str',), ('str', 'PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice')], + "QTextLayout.additionalFormats": (), + "QTextLayout.beginLayout": (), + "QTextLayout.boundingRect": (), + "QTextLayout.cacheEnabled": (), + "QTextLayout.clearAdditionalFormats": (), + "QTextLayout.clearFormats": (), + "QTextLayout.clearLayout": (), + "QTextLayout.createLine": (), + "QTextLayout.cursorMoveStyle": (), + "QTextLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'list', 'PySide2.QtCore.QRectF'), + "QTextLayout.drawCursor": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int', 'int')], + "QTextLayout.endLayout": (), + "QTextLayout.font": (), + "QTextLayout.formats": (), + "QTextLayout.isValidCursorPosition": ('int',), + "QTextLayout.leftCursorPosition": ('int',), + "QTextLayout.lineAt": ('int',), + "QTextLayout.lineCount": (), + "QTextLayout.lineForTextPosition": ('int',), + "QTextLayout.maximumWidth": (), + "QTextLayout.minimumWidth": (), + "QTextLayout.nextCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.position": (), + "QTextLayout.preeditAreaPosition": (), + "QTextLayout.preeditAreaText": (), + "QTextLayout.previousCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.rightCursorPosition": ('int',), + "QTextLayout.setAdditionalFormats": ('list',), + "QTextLayout.setCacheEnabled": ('bool',), + "QTextLayout.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextLayout.setFlags": ('int',), + "QTextLayout.setFont": ('PySide2.QtGui.QFont',), + "QTextLayout.setFormats": ('list',), + "QTextLayout.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLayout.setPreeditArea": ('int', 'str'), + "QTextLayout.setRawFont": ('PySide2.QtGui.QRawFont',), + "QTextLayout.setText": ('str',), + "QTextLayout.setTextOption": ('PySide2.QtGui.QTextOption',), + "QTextLayout.text": (), + "QTextLayout.textOption": (), + + # class PySide2.QtGui.QTextLength: + "QTextLength.__init__": [(), ('PySide2.QtGui.QTextLength',), ('PySide2.QtGui.QTextLength.Type', 'float')], + "QTextLength.__copy__": (), + "QTextLength.rawValue": (), + "QTextLength.type": (), + "QTextLength.value": ('float',), + + # class PySide2.QtGui.QTextLine: + "QTextLine.__init__": (), + "QTextLine.__copy__": (), + "QTextLine.ascent": (), + "QTextLine.cursorToX": ('int', 'PySide2.QtGui.QTextLine.Edge'), + "QTextLine.descent": (), + "QTextLine.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextLayout.FormatRange'), + "QTextLine.height": (), + "QTextLine.horizontalAdvance": (), + "QTextLine.isValid": (), + "QTextLine.leading": (), + "QTextLine.leadingIncluded": (), + "QTextLine.lineNumber": (), + "QTextLine.naturalTextRect": (), + "QTextLine.naturalTextWidth": (), + "QTextLine.position": (), + "QTextLine.rect": (), + "QTextLine.setLeadingIncluded": ('bool',), + "QTextLine.setLineWidth": ('float',), + "QTextLine.setNumColumns": [('int',), ('int', 'float')], + "QTextLine.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLine.textLength": (), + "QTextLine.textStart": (), + "QTextLine.width": (), + "QTextLine.x": (), + "QTextLine.xToCursor": ('float', 'PySide2.QtGui.QTextLine.CursorPosition'), + "QTextLine.y": (), + + # class PySide2.QtGui.QTextList: + "QTextList.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextList.add": ('PySide2.QtGui.QTextBlock',), + "QTextList.count": (), + "QTextList.format": (), + "QTextList.item": ('int',), + "QTextList.itemNumber": ('PySide2.QtGui.QTextBlock',), + "QTextList.itemText": ('PySide2.QtGui.QTextBlock',), + "QTextList.remove": ('PySide2.QtGui.QTextBlock',), + "QTextList.removeItem": ('int',), + "QTextList.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + + # class PySide2.QtGui.QTextListFormat: + "QTextListFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + "QTextListFormat.__copy__": (), + "QTextListFormat.indent": (), + "QTextListFormat.isValid": (), + "QTextListFormat.numberPrefix": (), + "QTextListFormat.numberSuffix": (), + "QTextListFormat.setIndent": ('int',), + "QTextListFormat.setNumberPrefix": ('str',), + "QTextListFormat.setNumberSuffix": ('str',), + "QTextListFormat.setStyle": ('PySide2.QtGui.QTextListFormat.Style',), + "QTextListFormat.style": (), + + # class PySide2.QtGui.QTextObject: + "QTextObject.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextObject.document": (), + "QTextObject.format": (), + "QTextObject.formatIndex": (), + "QTextObject.objectIndex": (), + "QTextObject.setFormat": ('PySide2.QtGui.QTextFormat',), + + # class PySide2.QtGui.QTextObjectInterface: + "QTextObjectInterface.__init__": (), + "QTextObjectInterface.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QTextObjectInterface.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QTextOption: + "QTextOption.__init__": [(), ('PySide2.QtGui.QTextOption',), ('PySide2.libpyside.Alignment',)], + "QTextOption.__copy__": (), + "QTextOption.alignment": (), + "QTextOption.flags": (), + "QTextOption.setAlignment": ('PySide2.libpyside.Alignment',), + "QTextOption.setFlags": ('PySide2.libpyside.Flags',), + "QTextOption.setTabArray": ('list',), + "QTextOption.setTabStop": ('float',), + "QTextOption.setTabStopDistance": ('float',), + "QTextOption.setTabs": ('list',), + "QTextOption.setTextDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextOption.setUseDesignMetrics": ('bool',), + "QTextOption.setWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextOption.tabArray": (), + "QTextOption.tabStop": (), + "QTextOption.tabStopDistance": (), + "QTextOption.tabs": (), + "QTextOption.textDirection": (), + "QTextOption.useDesignMetrics": (), + "QTextOption.wrapMode": (), + + # class PySide2.QtGui.QTextTable: + "QTextTable.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextTable.appendColumns": ('int',), + "QTextTable.appendRows": ('int',), + "QTextTable.cellAt": [('PySide2.QtGui.QTextCursor',), ('int',), ('int', 'int')], + "QTextTable.columns": (), + "QTextTable.format": (), + "QTextTable.insertColumns": ('int', 'int'), + "QTextTable.insertRows": ('int', 'int'), + "QTextTable.mergeCells": [('PySide2.QtGui.QTextCursor',), ('int', 'int', 'int', 'int')], + "QTextTable.removeColumns": ('int', 'int'), + "QTextTable.removeRows": ('int', 'int'), + "QTextTable.resize": ('int', 'int'), + "QTextTable.rowEnd": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rowStart": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rows": (), + "QTextTable.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTable.splitCell": ('int', 'int', 'int', 'int'), + + # class PySide2.QtGui.QTextTableCell: + "QTextTableCell.__init__": [(), ('PySide2.QtGui.QTextTableCell',)], + "QTextTableCell.__copy__": (), + "QTextTableCell.begin": (), + "QTextTableCell.column": (), + "QTextTableCell.columnSpan": (), + "QTextTableCell.end": (), + "QTextTableCell.firstCursorPosition": (), + "QTextTableCell.firstPosition": (), + "QTextTableCell.format": (), + "QTextTableCell.isValid": (), + "QTextTableCell.lastCursorPosition": (), + "QTextTableCell.lastPosition": (), + "QTextTableCell.row": (), + "QTextTableCell.rowSpan": (), + "QTextTableCell.setFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextTableCell.tableCellFormatIndex": (), + + # class PySide2.QtGui.QTextTableCellFormat: + "QTextTableCellFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableCellFormat',)], + "QTextTableCellFormat.__copy__": (), + "QTextTableCellFormat.bottomPadding": (), + "QTextTableCellFormat.isValid": (), + "QTextTableCellFormat.leftPadding": (), + "QTextTableCellFormat.rightPadding": (), + "QTextTableCellFormat.setBottomPadding": ('float',), + "QTextTableCellFormat.setLeftPadding": ('float',), + "QTextTableCellFormat.setPadding": ('float',), + "QTextTableCellFormat.setRightPadding": ('float',), + "QTextTableCellFormat.setTopPadding": ('float',), + "QTextTableCellFormat.topPadding": (), + + # class PySide2.QtGui.QTextTableFormat: + "QTextTableFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTableFormat.__copy__": (), + "QTextTableFormat.alignment": (), + "QTextTableFormat.cellPadding": (), + "QTextTableFormat.cellSpacing": (), + "QTextTableFormat.clearColumnWidthConstraints": (), + "QTextTableFormat.columnWidthConstraints": (), + "QTextTableFormat.columns": (), + "QTextTableFormat.headerRowCount": (), + "QTextTableFormat.isValid": (), + "QTextTableFormat.setAlignment": ('PySide2.libpyside.Alignment',), + "QTextTableFormat.setCellPadding": ('float',), + "QTextTableFormat.setCellSpacing": ('float',), + "QTextTableFormat.setColumnWidthConstraints": ('list',), + "QTextTableFormat.setColumns": ('int',), + "QTextTableFormat.setHeaderRowCount": ('int',), + + # class PySide2.QtGui.QToolBarChangeEvent: + "QToolBarChangeEvent.__init__": ('bool',), + "QToolBarChangeEvent.toggle": (), + + # class PySide2.QtGui.QTouchDevice: + "QTouchDevice.__init__": (), + "QTouchDevice.capabilities": (), + "QTouchDevice.devices": (), + "QTouchDevice.maximumTouchPoints": (), + "QTouchDevice.name": (), + "QTouchDevice.setCapabilities": ('PySide2.libpyside.Capabilities',), + "QTouchDevice.setMaximumTouchPoints": ('int',), + "QTouchDevice.setName": ('str',), + "QTouchDevice.setType": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTouchDevice.type": (), + + # class PySide2.QtGui.QTouchEvent: + "QTouchEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtGui.QTouchDevice', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.libpyside.TouchPointStates', 'list'), + "QTouchEvent.device": (), + "QTouchEvent.setDevice": ('PySide2.QtGui.QTouchDevice',), + "QTouchEvent.setTarget": ('PySide2.QtCore.QObject',), + "QTouchEvent.setTouchPointStates": ('PySide2.libpyside.TouchPointStates',), + "QTouchEvent.setTouchPoints": ('list',), + "QTouchEvent.setWindow": ('PySide2.QtGui.QWindow',), + "QTouchEvent.target": (), + "QTouchEvent.touchPointStates": (), + "QTouchEvent.touchPoints": (), + "QTouchEvent.window": (), + + # class PySide2.QtGui.QTransform: + "QTransform.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float', 'float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QTransform.__copy__": (), + "QTransform.__reduce__": (), + "QTransform.adjoint": (), + "QTransform.det": (), + "QTransform.determinant": (), + "QTransform.dx": (), + "QTransform.dy": (), + "QTransform.fromScale": ('float', 'float'), + "QTransform.fromTranslate": ('float', 'float'), + "QTransform.inverted": ('bool',), + "QTransform.isAffine": (), + "QTransform.isIdentity": (), + "QTransform.isInvertible": (), + "QTransform.isRotating": (), + "QTransform.isScaling": (), + "QTransform.isTranslating": (), + "QTransform.m11": (), + "QTransform.m12": (), + "QTransform.m13": (), + "QTransform.m21": (), + "QTransform.m22": (), + "QTransform.m23": (), + "QTransform.m31": (), + "QTransform.m32": (), + "QTransform.m33": (), + "QTransform.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float')], + "QTransform.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QTransform.mapToPolygon": ('PySide2.QtCore.QRect',), + "QTransform.quadToQuad": [('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.quadToSquare": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.reset": (), + "QTransform.rotate": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.rotateRadians": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.scale": ('float', 'float'), + "QTransform.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float'), + "QTransform.shear": ('float', 'float'), + "QTransform.squareToQuad": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.toAffine": (), + "QTransform.translate": ('float', 'float'), + "QTransform.transposed": (), + "QTransform.type": (), + + # class PySide2.QtGui.QValidator: + "QValidator.__init__": ('PySide2.QtCore.QObject',), + "QValidator.fixup": ('str',), + "QValidator.locale": (), + "QValidator.setLocale": ('PySide2.QtCore.QLocale',), + "QValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QVector2D: + "QVector2D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',), ('float', 'float')], + "QVector2D.__copy__": (), + "QVector2D.__reduce__": (), + "QVector2D.distanceToLine": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.distanceToPoint": ('PySide2.QtGui.QVector2D',), + "QVector2D.dotProduct": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.isNull": (), + "QVector2D.length": (), + "QVector2D.lengthSquared": (), + "QVector2D.normalize": (), + "QVector2D.normalized": (), + "QVector2D.setX": ('float',), + "QVector2D.setY": ('float',), + "QVector2D.toPoint": (), + "QVector2D.toPointF": (), + "QVector2D.toTuple": (), + "QVector2D.toVector3D": (), + "QVector2D.toVector4D": (), + "QVector2D.x": (), + "QVector2D.y": (), + + # class PySide2.QtGui.QVector3D: + "QVector3D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float'), ('PySide2.QtGui.QVector4D',), ('float', 'float', 'float')], + "QVector3D.__copy__": (), + "QVector3D.__reduce__": (), + "QVector3D.crossProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToLine": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToPlane": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.distanceToPoint": ('PySide2.QtGui.QVector3D',), + "QVector3D.dotProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.isNull": (), + "QVector3D.length": (), + "QVector3D.lengthSquared": (), + "QVector3D.normal": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.normalize": (), + "QVector3D.normalized": (), + "QVector3D.project": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.setX": ('float',), + "QVector3D.setY": ('float',), + "QVector3D.setZ": ('float',), + "QVector3D.toPoint": (), + "QVector3D.toPointF": (), + "QVector3D.toTuple": (), + "QVector3D.toVector2D": (), + "QVector3D.toVector4D": (), + "QVector3D.unproject": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.x": (), + "QVector3D.y": (), + "QVector3D.z": (), + + # class PySide2.QtGui.QVector4D: + "QVector4D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float', 'float'), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QVector4D.__copy__": (), + "QVector4D.__reduce__": (), + "QVector4D.dotProduct": ('PySide2.QtGui.QVector4D', 'PySide2.QtGui.QVector4D'), + "QVector4D.isNull": (), + "QVector4D.length": (), + "QVector4D.lengthSquared": (), + "QVector4D.normalize": (), + "QVector4D.normalized": (), + "QVector4D.setW": ('float',), + "QVector4D.setX": ('float',), + "QVector4D.setY": ('float',), + "QVector4D.setZ": ('float',), + "QVector4D.toPoint": (), + "QVector4D.toPointF": (), + "QVector4D.toTuple": (), + "QVector4D.toVector2D": (), + "QVector4D.toVector2DAffine": (), + "QVector4D.toVector3D": (), + "QVector4D.toVector3DAffine": (), + "QVector4D.w": (), + "QVector4D.x": (), + "QVector4D.y": (), + "QVector4D.z": (), + + # class PySide2.QtGui.QWhatsThisClickedEvent: + "QWhatsThisClickedEvent.__init__": ('str',), + "QWhatsThisClickedEvent.href": (), + + # class PySide2.QtGui.QWheelEvent: + "QWheelEvent.__init__": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource', 'bool'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation')], + "QWheelEvent.angleDelta": (), + "QWheelEvent.buttons": (), + "QWheelEvent.delta": (), + "QWheelEvent.globalPos": (), + "QWheelEvent.globalPosF": (), + "QWheelEvent.globalX": (), + "QWheelEvent.global""Y": (), + "QWheelEvent.inverted": (), + "QWheelEvent.orientation": (), + "QWheelEvent.phase": (), + "QWheelEvent.pixelDelta": (), + "QWheelEvent.pos": (), + "QWheelEvent.posF": (), + "QWheelEvent.source": (), + "QWheelEvent.x": (), + "QWheelEvent.y": (), + + # class PySide2.QtGui.QWindow: + "QWindow.__init__": [('PySide2.QtGui.QScreen',), ('PySide2.QtGui.QWindow',)], + "QWindow.accessibleRoot": (), + "QWindow.alert": ('int',), + "QWindow.baseSize": (), + "QWindow.close": (), + "QWindow.contentOrientation": (), + "QWindow.create": (), + "QWindow.cursor": (), + "QWindow.destroy": (), + "QWindow.devicePixelRatio": (), + "QWindow.event": ('PySide2.QtCore.QEvent',), + "QWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QWindow.filePath": (), + "QWindow.flags": (), + "QWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.focusObject": (), + "QWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.format": (), + "QWindow.frameGeometry": (), + "QWindow.frameMargins": (), + "QWindow.framePosition": (), + "QWindow.fromWinId": ('int',), + "QWindow.geometry": (), + "QWindow.height": (), + "QWindow.hide": (), + "QWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWindow.icon": (), + "QWindow.isActive": (), + "QWindow.isAncestorOf": ('PySide2.QtGui.QWindow', 'PySide2.QtGui.QWindow.AncestorMode'), + "QWindow.isExposed": (), + "QWindow.isModal": (), + "QWindow.isTopLevel": (), + "QWindow.isVisible": (), + "QWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.lower": (), + "QWindow.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mask": (), + "QWindow.maximumHeight": (), + "QWindow.maximumSize": (), + "QWindow.maximumWidth": (), + "QWindow.minimumHeight": (), + "QWindow.minimumSize": (), + "QWindow.minimumWidth": (), + "QWindow.modality": (), + "QWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWindow.opacity": (), + "QWindow.parent": [(), ('PySide2.QtGui.QWindow.AncestorMode',)], + "QWindow.position": (), + "QWindow.raise": (), + "QWindow.reportContentOrientationChange": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QWindow.requestActivate": (), + "QWindow.requestUpdate": (), + "QWindow.requestedFormat": (), + "QWindow.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWindow.screen": (), + "QWindow.setBaseSize": ('PySide2.QtCore.QSize',), + "QWindow.setCursor": ('PySide2.QtGui.QCursor',), + "QWindow.setFilePath": ('str',), + "QWindow.setFlag": ('PySide2.QtCore.Qt.WindowType', 'bool'), + "QWindow.setFlags": ('PySide2.libpyside.WindowFlags',), + "QWindow.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QWindow.setFramePosition": ('PySide2.QtCore.QPoint',), + "QWindow.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWindow.setHeight": ('int',), + "QWindow.setIcon": ('PySide2.QtGui.QIcon',), + "QWindow.setKeyboardGrabEnabled": ('bool',), + "QWindow.setMask": ('PySide2.QtGui.QRegion',), + "QWindow.setMaximumHeight": ('int',), + "QWindow.setMaximumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMaximumWidth": ('int',), + "QWindow.setMinimumHeight": ('int',), + "QWindow.setMinimumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMinimumWidth": ('int',), + "QWindow.setModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWindow.setMouseGrabEnabled": ('bool',), + "QWindow.setOpacity": ('float',), + "QWindow.setParent": ('PySide2.QtGui.QWindow',), + "QWindow.setPosition": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWindow.setScreen": ('PySide2.QtGui.QScreen',), + "QWindow.setSizeIncrement": ('PySide2.QtCore.QSize',), + "QWindow.setSurfaceType": ('PySide2.QtGui.QSurface.SurfaceType',), + "QWindow.setTitle": ('str',), + "QWindow.setTransientParent": ('PySide2.QtGui.QWindow',), + "QWindow.setVisibility": ('PySide2.QtGui.QWindow.Visibility',), + "QWindow.setVisible": ('bool',), + "QWindow.setWidth": ('int',), + "QWindow.setWindowState": ('PySide2.QtCore.Qt.WindowState',), + "QWindow.setWindowStates": ('PySide2.libpyside.WindowStates',), + "QWindow.setX": ('int',), + "QWindow.setY": ('int',), + "QWindow.show": (), + "QWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWindow.showFullScreen": (), + "QWindow.showMaximized": (), + "QWindow.showMinimized": (), + "QWindow.showNormal": (), + "QWindow.size": (), + "QWindow.sizeIncrement": (), + "QWindow.surfaceHandle": (), + "QWindow.surfaceType": (), + "QWindow.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWindow.title": (), + "QWindow.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QWindow.transientParent": (), + "QWindow.type": (), + "QWindow.unsetCursor": (), + "QWindow.visibility": (), + "QWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWindow.width": (), + "QWindow.winId": (), + "QWindow.windowState": (), + "QWindow.windowStates": (), + "QWindow.x": (), + "QWindow.y": (), + + # class PySide2.QtGui.QWindowStateChangeEvent: + "QWindowStateChangeEvent.__init__": ('PySide2.libpyside.WindowStates', 'bool'), + "QWindowStateChangeEvent.isOverride": (), + "QWindowStateChangeEvent.oldState": (), + }) + +# Module PySide2.QtWidgets +if "PySide2.QtWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWidgets.QAbstractButton: + "QAbstractButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractButton.animateClick": ('int',), + "QAbstractButton.autoExclusive": (), + "QAbstractButton.autoRepeat": (), + "QAbstractButton.autoRepeatDelay": (), + "QAbstractButton.autoRepeatInterval": (), + "QAbstractButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractButton.checkStateSet": (), + "QAbstractButton.click": (), + "QAbstractButton.event": ('PySide2.QtCore.QEvent',), + "QAbstractButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.group": (), + "QAbstractButton.hitButton": ('PySide2.QtCore.QPoint',), + "QAbstractButton.icon": (), + "QAbstractButton.iconSize": (), + "QAbstractButton.isCheckable": (), + "QAbstractButton.isChecked": (), + "QAbstractButton.isDown": (), + "QAbstractButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.nextCheckState": (), + "QAbstractButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractButton.setAutoExclusive": ('bool',), + "QAbstractButton.setAutoRepeat": ('bool',), + "QAbstractButton.setAutoRepeatDelay": ('int',), + "QAbstractButton.setAutoRepeatInterval": ('int',), + "QAbstractButton.setCheckable": ('bool',), + "QAbstractButton.setChecked": ('bool',), + "QAbstractButton.setDown": ('bool',), + "QAbstractButton.setIcon": ('PySide2.QtGui.QIcon',), + "QAbstractButton.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractButton.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAbstractButton.setText": ('str',), + "QAbstractButton.shortcut": (), + "QAbstractButton.text": (), + "QAbstractButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractButton.toggle": (), + + # class PySide2.QtWidgets.QAbstractGraphicsShapeItem: + "QAbstractGraphicsShapeItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.brush": (), + "QAbstractGraphicsShapeItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.opaqueArea": (), + "QAbstractGraphicsShapeItem.pen": (), + "QAbstractGraphicsShapeItem.setBrush": ('PySide2.QtGui.QBrush',), + "QAbstractGraphicsShapeItem.setPen": ('PySide2.QtGui.QPen',), + + # class PySide2.QtWidgets.QAbstractItemDelegate: + "QAbstractItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.destroyEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.elidedText": ('PySide2.QtGui.QFontMetrics', 'int', 'PySide2.QtCore.Qt.TextElideMode', 'str'), + "QAbstractItemDelegate.helpEvent": ('PySide2.QtGui.QHelpEvent', 'PySide2.QtWidgets.QAbstractItemView', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paintingRoles": (), + "QAbstractItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QAbstractItemView: + "QAbstractItemView.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.alternatingRowColors": (), + "QAbstractItemView.autoScrollMargin": (), + "QAbstractItemView.clearSelection": (), + "QAbstractItemView.closeEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QAbstractItemDelegate.EndEditHint'), + "QAbstractItemView.closePersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.commitData": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemView.currentIndex": (), + "QAbstractItemView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QAbstractItemView.defaultDropAction": (), + "QAbstractItemView.dirtyRegionOffset": (), + "QAbstractItemView.doAutoScroll": (), + "QAbstractItemView.doItemsLayout": (), + "QAbstractItemView.dragDropMode": (), + "QAbstractItemView.dragDropOverwriteMode": (), + "QAbstractItemView.dragEnabled": (), + "QAbstractItemView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractItemView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractItemView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractItemView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractItemView.dropIndicatorPosition": (), + "QAbstractItemView.edit": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.EditTrigger', 'PySide2.QtCore.QEvent')], + "QAbstractItemView.editTriggers": (), + "QAbstractItemView.editorDestroyed": ('PySide2.QtCore.QObject',), + "QAbstractItemView.event": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QAbstractItemView.executeDelayedItemsLayout": (), + "QAbstractItemView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.focusNextPrevChild": ('bool',), + "QAbstractItemView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.hasAutoScroll": (), + "QAbstractItemView.horizontalOffset": (), + "QAbstractItemView.horizontalScrollMode": (), + "QAbstractItemView.horizontalScrollbarAction": ('int',), + "QAbstractItemView.horizontalScrollbarValueChanged": ('int',), + "QAbstractItemView.horizontalStepsPerItem": (), + "QAbstractItemView.iconSize": (), + "QAbstractItemView.indexAt": ('PySide2.QtCore.QPoint',), + "QAbstractItemView.indexWidget": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QAbstractItemView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractItemView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.isPersistentEditorOpen": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.itemDelegate": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.itemDelegateForColumn": ('int',), + "QAbstractItemView.itemDelegateForRow": ('int',), + "QAbstractItemView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractItemView.keyboardSearch": ('str',), + "QAbstractItemView.model": (), + "QAbstractItemView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QAbstractItemView.openPersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.reset": (), + "QAbstractItemView.resetHorizontalScrollMode": (), + "QAbstractItemView.resetVerticalScrollMode": (), + "QAbstractItemView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractItemView.rootIndex": (), + "QAbstractItemView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.scheduleDelayedItemsLayout": (), + "QAbstractItemView.scrollDirtyRegion": ('int', 'int'), + "QAbstractItemView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QAbstractItemView.scrollToBottom": (), + "QAbstractItemView.scrollToTop": (), + "QAbstractItemView.selectAll": (), + "QAbstractItemView.selectedIndexes": (), + "QAbstractItemView.selectionBehavior": (), + "QAbstractItemView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QAbstractItemView.selectionCommand": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QEvent'), + "QAbstractItemView.selectionMode": (), + "QAbstractItemView.selectionModel": (), + "QAbstractItemView.setAlternatingRowColors": ('bool',), + "QAbstractItemView.setAutoScroll": ('bool',), + "QAbstractItemView.setAutoScrollMargin": ('int',), + "QAbstractItemView.setCurrentIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setDefaultDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QAbstractItemView.setDirtyRegion": ('PySide2.QtGui.QRegion',), + "QAbstractItemView.setDragDropMode": ('PySide2.QtWidgets.QAbstractItemView.DragDropMode',), + "QAbstractItemView.setDragDropOverwriteMode": ('bool',), + "QAbstractItemView.setDragEnabled": ('bool',), + "QAbstractItemView.setDropIndicatorShown": ('bool',), + "QAbstractItemView.setEditTriggers": ('PySide2.libpyside.EditTriggers',), + "QAbstractItemView.setHorizontalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setHorizontalStepsPerItem": ('int',), + "QAbstractItemView.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractItemView.setIndexWidget": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QWidget'), + "QAbstractItemView.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QAbstractItemView.setItemDelegateForColumn": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setItemDelegateForRow": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractItemView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QAbstractItemView.setSelectionBehavior": ('PySide2.QtWidgets.QAbstractItemView.SelectionBehavior',), + "QAbstractItemView.setSelectionMode": ('PySide2.QtWidgets.QAbstractItemView.SelectionMode',), + "QAbstractItemView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QAbstractItemView.setState": ('PySide2.QtWidgets.QAbstractItemView.State',), + "QAbstractItemView.setTabKeyNavigation": ('bool',), + "QAbstractItemView.setTextElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QAbstractItemView.setVerticalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setVerticalStepsPerItem": ('int',), + "QAbstractItemView.showDropIndicator": (), + "QAbstractItemView.sizeHintForColumn": ('int',), + "QAbstractItemView.sizeHintForIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.sizeHintForRow": ('int',), + "QAbstractItemView.startAutoScroll": (), + "QAbstractItemView.startDrag": ('PySide2.libpyside.DropActions',), + "QAbstractItemView.state": (), + "QAbstractItemView.stopAutoScroll": (), + "QAbstractItemView.tabKeyNavigation": (), + "QAbstractItemView.textElideMode": (), + "QAbstractItemView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractItemView.update": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.updateEditorData": (), + "QAbstractItemView.updateEditorGeometries": (), + "QAbstractItemView.updateGeometries": (), + "QAbstractItemView.verticalOffset": (), + "QAbstractItemView.verticalScrollMode": (), + "QAbstractItemView.verticalScrollbarAction": ('int',), + "QAbstractItemView.verticalScrollbarValueChanged": ('int',), + "QAbstractItemView.verticalStepsPerItem": (), + "QAbstractItemView.viewOptions": (), + "QAbstractItemView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.viewportSizeHint": (), + "QAbstractItemView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QAbstractScrollArea: + "QAbstractScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.addScrollBarWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.Alignment'), + "QAbstractScrollArea.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractScrollArea.cornerWidget": (), + "QAbstractScrollArea.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractScrollArea.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractScrollArea.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractScrollArea.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractScrollArea.event": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QAbstractScrollArea.horizontalScrollBar": (), + "QAbstractScrollArea.horizontalScrollBarPolicy": (), + "QAbstractScrollArea.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractScrollArea.maximumViewportSize": (), + "QAbstractScrollArea.minimumSizeHint": (), + "QAbstractScrollArea.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractScrollArea.scrollBarWidgets": ('PySide2.libpyside.Alignment',), + "QAbstractScrollArea.scrollContentsBy": ('int', 'int'), + "QAbstractScrollArea.setCornerWidget": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setHorizontalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setHorizontalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setSizeAdjustPolicy": ('PySide2.QtWidgets.QAbstractScrollArea.SizeAdjustPolicy',), + "QAbstractScrollArea.setVerticalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setVerticalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setViewportMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QAbstractScrollArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.sizeAdjustPolicy": (), + "QAbstractScrollArea.sizeHint": (), + "QAbstractScrollArea.verticalScrollBar": (), + "QAbstractScrollArea.verticalScrollBarPolicy": (), + "QAbstractScrollArea.viewport": (), + "QAbstractScrollArea.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.viewportMargins": (), + "QAbstractScrollArea.viewportSizeHint": (), + "QAbstractScrollArea.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSlider: + "QAbstractSlider.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSlider.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.event": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.hasTracking": (), + "QAbstractSlider.invertedAppearance": (), + "QAbstractSlider.invertedControls": (), + "QAbstractSlider.isSliderDown": (), + "QAbstractSlider.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSlider.maximum": (), + "QAbstractSlider.minimum": (), + "QAbstractSlider.orientation": (), + "QAbstractSlider.pageStep": (), + "QAbstractSlider.repeatAction": (), + "QAbstractSlider.setInvertedAppearance": ('bool',), + "QAbstractSlider.setInvertedControls": ('bool',), + "QAbstractSlider.setMaximum": ('int',), + "QAbstractSlider.setMinimum": ('int',), + "QAbstractSlider.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QAbstractSlider.setPageStep": ('int',), + "QAbstractSlider.setRange": ('int', 'int'), + "QAbstractSlider.setRepeatAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction', 'int', 'int'), + "QAbstractSlider.setSingleStep": ('int',), + "QAbstractSlider.setSliderDown": ('bool',), + "QAbstractSlider.setSliderPosition": ('int',), + "QAbstractSlider.setTracking": ('bool',), + "QAbstractSlider.setValue": ('int',), + "QAbstractSlider.singleStep": (), + "QAbstractSlider.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QAbstractSlider.sliderPosition": (), + "QAbstractSlider.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSlider.triggerAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction',), + "QAbstractSlider.value": (), + "QAbstractSlider.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSpinBox: + "QAbstractSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSpinBox.alignment": (), + "QAbstractSpinBox.buttonSymbols": (), + "QAbstractSpinBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.clear": (), + "QAbstractSpinBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QAbstractSpinBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractSpinBox.correctionMode": (), + "QAbstractSpinBox.event": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.fixup": ('str',), + "QAbstractSpinBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.hasAcceptableInput": (), + "QAbstractSpinBox.hasFrame": (), + "QAbstractSpinBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QAbstractSpinBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QAbstractSpinBox.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractSpinBox.interpretText": (), + "QAbstractSpinBox.isAccelerated": (), + "QAbstractSpinBox.isGroupSeparatorShown": (), + "QAbstractSpinBox.isReadOnly": (), + "QAbstractSpinBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyboardTracking": (), + "QAbstractSpinBox.lineEdit": (), + "QAbstractSpinBox.minimumSizeHint": (), + "QAbstractSpinBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractSpinBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractSpinBox.selectAll": (), + "QAbstractSpinBox.setAccelerated": ('bool',), + "QAbstractSpinBox.setAlignment": ('PySide2.libpyside.Alignment',), + "QAbstractSpinBox.setButtonSymbols": ('PySide2.QtWidgets.QAbstractSpinBox.ButtonSymbols',), + "QAbstractSpinBox.setCorrectionMode": ('PySide2.QtWidgets.QAbstractSpinBox.CorrectionMode',), + "QAbstractSpinBox.setFrame": ('bool',), + "QAbstractSpinBox.setGroupSeparatorShown": ('bool',), + "QAbstractSpinBox.setKeyboardTracking": ('bool',), + "QAbstractSpinBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QAbstractSpinBox.setReadOnly": ('bool',), + "QAbstractSpinBox.setSpecialValueText": ('str',), + "QAbstractSpinBox.setWrapping": ('bool',), + "QAbstractSpinBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QAbstractSpinBox.sizeHint": (), + "QAbstractSpinBox.specialValueText": (), + "QAbstractSpinBox.stepBy": ('int',), + "QAbstractSpinBox.stepDown": (), + "QAbstractSpinBox.stepEnabled": (), + "QAbstractSpinBox.stepUp": (), + "QAbstractSpinBox.text": (), + "QAbstractSpinBox.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSpinBox.validate": ('str', 'int'), + "QAbstractSpinBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QAbstractSpinBox.wrapping": (), + + # class PySide2.QtWidgets.QAccessibleWidget: + "QAccessibleWidget.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QAccessible.Role', 'str'), + "QAccessibleWidget.actionNames": (), + "QAccessibleWidget.addControllingSignal": ('str',), + "QAccessibleWidget.backgroundColor": (), + "QAccessibleWidget.child": ('int',), + "QAccessibleWidget.childCount": (), + "QAccessibleWidget.doAction": ('str',), + "QAccessibleWidget.focusChild": (), + "QAccessibleWidget.foregroundColor": (), + "QAccessibleWidget.indexOfChild": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessibleWidget.interface_cast": ('PySide2.QtGui.QAccessible.InterfaceType',), + "QAccessibleWidget.isValid": (), + "QAccessibleWidget.keyBindingsForAction": ('str',), + "QAccessibleWidget.parent": (), + "QAccessibleWidget.parentObject": (), + "QAccessibleWidget.rect": (), + "QAccessibleWidget.relations": ('PySide2.libpyside.Relation',), + "QAccessibleWidget.role": (), + "QAccessibleWidget.state": (), + "QAccessibleWidget.text": ('PySide2.QtGui.QAccessible.Text',), + "QAccessibleWidget.widget": (), + "QAccessibleWidget.window": (), + + # class PySide2.QtWidgets.QAction: + "QAction.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QAction.actionGroup": (), + "QAction.activate": ('PySide2.QtWidgets.QAction.ActionEvent',), + "QAction.associatedGraphicsWidgets": (), + "QAction.associatedWidgets": (), + "QAction.autoRepeat": (), + "QAction.data": (), + "QAction.event": ('PySide2.QtCore.QEvent',), + "QAction.font": (), + "QAction.hover": (), + "QAction.icon": (), + "QAction.iconText": (), + "QAction.isCheckable": (), + "QAction.isChecked": (), + "QAction.isEnabled": (), + "QAction.isIconVisibleInMenu": (), + "QAction.isSeparator": (), + "QAction.isShortcutVisibleInContextMenu": (), + "QAction.isVisible": (), + "QAction.menu": (), + "QAction.menuRole": (), + "QAction.parentWidget": (), + "QAction.priority": (), + "QAction.setActionGroup": ('PySide2.QtWidgets.QActionGroup',), + "QAction.setAutoRepeat": ('bool',), + "QAction.setCheckable": ('bool',), + "QAction.setChecked": ('bool',), + "QAction.setData": ('Any',), + "QAction.setDisabled": ('bool',), + "QAction.setEnabled": ('bool',), + "QAction.setFont": ('PySide2.QtGui.QFont',), + "QAction.setIcon": ('PySide2.QtGui.QIcon',), + "QAction.setIconText": ('str',), + "QAction.setIconVisibleInMenu": ('bool',), + "QAction.setMenu": ('PySide2.QtWidgets.QMenu',), + "QAction.setMenuRole": ('PySide2.QtWidgets.QAction.MenuRole',), + "QAction.setPriority": ('PySide2.QtWidgets.QAction.Priority',), + "QAction.setSeparator": ('bool',), + "QAction.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAction.setShortcutContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QAction.setShortcutVisibleInContextMenu": ('bool',), + "QAction.setShortcuts": [('PySide2.QtGui.QKeySequence.StandardKey',), ('list',)], + "QAction.setStatusTip": ('str',), + "QAction.setText": ('str',), + "QAction.setToolTip": ('str',), + "QAction.setVisible": ('bool',), + "QAction.setWhatsThis": ('str',), + "QAction.shortcut": (), + "QAction.shortcutContext": (), + "QAction.shortcuts": (), + "QAction.showStatusText": ('PySide2.QtWidgets.QWidget',), + "QAction.statusTip": (), + "QAction.text": (), + "QAction.toggle": (), + "QAction.toolTip": (), + "QAction.trigger": (), + "QAction.whatsThis": (), + + # class PySide2.QtWidgets.QActionGroup: + "QActionGroup.__init__": ('PySide2.QtCore.QObject',), + "QActionGroup.actions": (), + "QActionGroup.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction',), ('str',)], + "QActionGroup.checkedAction": (), + "QActionGroup.isEnabled": (), + "QActionGroup.isExclusive": (), + "QActionGroup.isVisible": (), + "QActionGroup.removeAction": ('PySide2.QtWidgets.QAction',), + "QActionGroup.setDisabled": ('bool',), + "QActionGroup.setEnabled": ('bool',), + "QActionGroup.setExclusive": ('bool',), + "QActionGroup.setVisible": ('bool',), + + # class PySide2.QtWidgets.QApplication: + "QApplication.__init__": [(), ('List[str]',)], + "QApplication.aboutQt": (), + "QApplication.activeModalWidget": (), + "QApplication.activePopupWidget": (), + "QApplication.activeWindow": (), + "QApplication.alert": ('PySide2.QtWidgets.QWidget', 'int'), + "QApplication.allWidgets": (), + "QApplication.autoSipEnabled": (), + "QApplication.beep": (), + "QApplication.closeAllWindows": (), + "QApplication.colorSpec": (), + "QApplication.cursorFlashTime": (), + "QApplication.desktop": (), + "QApplication.doubleClickInterval": (), + "QApplication.event": ('PySide2.QtCore.QEvent',), + "QApplication.exec_": (), + "QApplication.focusWidget": (), + "QApplication.font": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.fontMetrics": (), + "QApplication.globalStrut": (), + "QApplication.isEffectEnabled": ('PySide2.QtCore.Qt.UIEffect',), + "QApplication.keyboardInputInterval": (), + "QApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QApplication.palette": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.setActiveWindow": ('PySide2.QtWidgets.QWidget',), + "QApplication.setAutoSipEnabled": ('bool',), + "QApplication.setColorSpec": ('int',), + "QApplication.setCursorFlashTime": ('int',), + "QApplication.setDoubleClickInterval": ('int',), + "QApplication.setEffectEnabled": ('PySide2.QtCore.Qt.UIEffect', 'bool'), + "QApplication.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'str')], + "QApplication.setGlobalStrut": ('PySide2.QtCore.QSize',), + "QApplication.setKeyboardInputInterval": ('int',), + "QApplication.setPalette": [('PySide2.QtGui.QPalette',), ('PySide2.QtGui.QPalette', 'str')], + "QApplication.setStartDragDistance": ('int',), + "QApplication.setStartDragTime": ('int',), + "QApplication.setStyle": [('PySide2.QtWidgets.QStyle',), ('str',)], + "QApplication.setStyleSheet": ('str',), + "QApplication.setWheelScrollLines": ('int',), + "QApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QApplication.startDragDistance": (), + "QApplication.startDragTime": (), + "QApplication.style": (), + "QApplication.styleSheet": (), + "QApplication.topLevelAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.topLevelWidgets": (), + "QApplication.wheelScrollLines": (), + "QApplication.widgetAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.windowIcon": (), + + # class PySide2.QtWidgets.QBoxLayout: + "QBoxLayout.__init__": ('PySide2.QtWidgets.QBoxLayout.Direction', 'PySide2.QtWidgets.QWidget'), + "QBoxLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QBoxLayout.addLayout": ('PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.addSpacerItem": ('PySide2.QtWidgets.QSpacerItem',), + "QBoxLayout.addSpacing": ('int',), + "QBoxLayout.addStretch": ('int',), + "QBoxLayout.addStrut": ('int',), + "QBoxLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.libpyside.Alignment')], + "QBoxLayout.count": (), + "QBoxLayout.direction": (), + "QBoxLayout.expandingDirections": (), + "QBoxLayout.hasHeightForWidth": (), + "QBoxLayout.heightForWidth": ('int',), + "QBoxLayout.insertItem": ('int', 'PySide2.QtWidgets.QLayoutItem'), + "QBoxLayout.insertLayout": ('int', 'PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.insertSpacerItem": ('int', 'PySide2.QtWidgets.QSpacerItem'), + "QBoxLayout.insertSpacing": ('int', 'int'), + "QBoxLayout.insertStretch": ('int', 'int'), + "QBoxLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int', 'PySide2.libpyside.Alignment'), + "QBoxLayout.invalidate": (), + "QBoxLayout.itemAt": ('int',), + "QBoxLayout.maximumSize": (), + "QBoxLayout.minimumHeightForWidth": ('int',), + "QBoxLayout.minimumSize": (), + "QBoxLayout.setDirection": ('PySide2.QtWidgets.QBoxLayout.Direction',), + "QBoxLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QBoxLayout.setSpacing": ('int',), + "QBoxLayout.setStretch": ('int', 'int'), + "QBoxLayout.setStretchFactor": [('PySide2.QtWidgets.QLayout', 'int'), ('PySide2.QtWidgets.QWidget', 'int')], + "QBoxLayout.sizeHint": (), + "QBoxLayout.spacing": (), + "QBoxLayout.stretch": ('int',), + "QBoxLayout.takeAt": ('int',), + + # class PySide2.QtWidgets.QButtonGroup: + "QButtonGroup.__init__": ('PySide2.QtCore.QObject',), + "QButtonGroup.addButton": ('PySide2.QtWidgets.QAbstractButton', 'int'), + "QButtonGroup.button": ('int',), + "QButtonGroup.buttons": (), + "QButtonGroup.checkedButton": (), + "QButtonGroup.checkedId": (), + "QButtonGroup.exclusive": (), + "QButtonGroup.id": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.setExclusive": ('bool',), + "QButtonGroup.setId": ('PySide2.QtWidgets.QAbstractButton', 'int'), + + # class PySide2.QtWidgets.QCalendarWidget: + "QCalendarWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QCalendarWidget.dateEditAcceptDelay": (), + "QCalendarWidget.dateTextFormat": [(), ('PySide2.QtCore.QDate',)], + "QCalendarWidget.event": ('PySide2.QtCore.QEvent',), + "QCalendarWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCalendarWidget.firstDayOfWeek": (), + "QCalendarWidget.headerTextFormat": (), + "QCalendarWidget.horizontalHeaderFormat": (), + "QCalendarWidget.isDateEditEnabled": (), + "QCalendarWidget.isGridVisible": (), + "QCalendarWidget.isNavigationBarVisible": (), + "QCalendarWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QCalendarWidget.maximumDate": (), + "QCalendarWidget.minimumDate": (), + "QCalendarWidget.minimumSizeHint": (), + "QCalendarWidget.monthShown": (), + "QCalendarWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QCalendarWidget.paintCell": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QDate'), + "QCalendarWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QCalendarWidget.selectedDate": (), + "QCalendarWidget.selectionMode": (), + "QCalendarWidget.setCurrentPage": ('int', 'int'), + "QCalendarWidget.setDateEditAcceptDelay": ('int',), + "QCalendarWidget.setDateEditEnabled": ('bool',), + "QCalendarWidget.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QCalendarWidget.setDateTextFormat": ('PySide2.QtCore.QDate', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.setFirstDayOfWeek": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.setGridVisible": ('bool',), + "QCalendarWidget.setHeaderTextFormat": ('PySide2.QtGui.QTextCharFormat',), + "QCalendarWidget.setHorizontalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.HorizontalHeaderFormat',), + "QCalendarWidget.setMaximumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setMinimumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setNavigationBarVisible": ('bool',), + "QCalendarWidget.setSelectedDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setSelectionMode": ('PySide2.QtWidgets.QCalendarWidget.SelectionMode',), + "QCalendarWidget.setVerticalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.VerticalHeaderFormat',), + "QCalendarWidget.setWeekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.showNextMonth": (), + "QCalendarWidget.showNextYear": (), + "QCalendarWidget.showPreviousMonth": (), + "QCalendarWidget.showPreviousYear": (), + "QCalendarWidget.showSelectedDate": (), + "QCalendarWidget.showToday": (), + "QCalendarWidget.sizeHint": (), + "QCalendarWidget.updateCell": ('PySide2.QtCore.QDate',), + "QCalendarWidget.updateCells": (), + "QCalendarWidget.verticalHeaderFormat": (), + "QCalendarWidget.weekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.yearShown": (), + + # class PySide2.QtWidgets.QCheckBox: + "QCheckBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QCheckBox.checkState": (), + "QCheckBox.checkStateSet": (), + "QCheckBox.event": ('PySide2.QtCore.QEvent',), + "QCheckBox.hitButton": ('PySide2.QtCore.QPoint',), + "QCheckBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QCheckBox.isTristate": (), + "QCheckBox.minimumSizeHint": (), + "QCheckBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QCheckBox.nextCheckState": (), + "QCheckBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCheckBox.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QCheckBox.setTristate": ('bool',), + "QCheckBox.sizeHint": (), + + # class PySide2.QtWidgets.QColorDialog: + "QColorDialog.__init__": [('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QColorDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QColorDialog.currentColor": (), + "QColorDialog.customColor": ('int',), + "QColorDialog.customCount": (), + "QColorDialog.done": ('int',), + "QColorDialog.getColor": ('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget', 'str', 'PySide2.libpyside.ColorDialogOptions'), + "QColorDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QColorDialog.options": (), + "QColorDialog.selectedColor": (), + "QColorDialog.setCurrentColor": ('PySide2.QtGui.QColor',), + "QColorDialog.setCustomColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption', 'bool'), + "QColorDialog.setOptions": ('PySide2.libpyside.ColorDialogOptions',), + "QColorDialog.setStandardColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setVisible": ('bool',), + "QColorDialog.standardColor": ('int',), + "QColorDialog.testOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption',), + + # class PySide2.QtWidgets.QColormap: + "QColormap.__init__": ('PySide2.QtWidgets.QColormap',), + "QColormap.__copy__": (), + "QColormap.cleanup": (), + "QColormap.colorAt": ('int',), + "QColormap.colormap": (), + "QColormap.depth": (), + "QColormap.initialize": (), + "QColormap.instance": ('int',), + "QColormap.mode": (), + "QColormap.pixel": ('PySide2.QtGui.QColor',), + "QColormap.size": (), + + # class PySide2.QtWidgets.QColumnView: + "QColumnView.__init__": ('PySide2.QtWidgets.QWidget',), + "QColumnView.columnWidths": (), + "QColumnView.createColumn": ('PySide2.QtCore.QModelIndex',), + "QColumnView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QColumnView.horizontalOffset": (), + "QColumnView.indexAt": ('PySide2.QtCore.QPoint',), + "QColumnView.initializeColumn": ('PySide2.QtWidgets.QAbstractItemView',), + "QColumnView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QColumnView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QColumnView.previewWidget": (), + "QColumnView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QColumnView.resizeGripsVisible": (), + "QColumnView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QColumnView.scrollContentsBy": ('int', 'int'), + "QColumnView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QColumnView.selectAll": (), + "QColumnView.setColumnWidths": ('list',), + "QColumnView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QColumnView.setPreviewWidget": ('PySide2.QtWidgets.QWidget',), + "QColumnView.setResizeGripsVisible": ('bool',), + "QColumnView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QColumnView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QColumnView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QColumnView.sizeHint": (), + "QColumnView.verticalOffset": (), + "QColumnView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QColumnView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QComboBox: + "QComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QComboBox.addItem": [('PySide2.QtGui.QIcon', 'str', 'Any'), ('str', 'Any')], + "QComboBox.addItems": ('List[str]',), + "QComboBox.autoCompletion": (), + "QComboBox.autoCompletionCaseSensitivity": (), + "QComboBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QComboBox.clear": (), + "QComboBox.clearEditText": (), + "QComboBox.completer": (), + "QComboBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QComboBox.count": (), + "QComboBox.currentData": ('int',), + "QComboBox.currentIndex": (), + "QComboBox.currentText": (), + "QComboBox.duplicatesEnabled": (), + "QComboBox.event": ('PySide2.QtCore.QEvent',), + "QComboBox.findData": ('Any', 'int', 'PySide2.libpyside.MatchFlags'), + "QComboBox.findText": ('str', 'PySide2.libpyside.MatchFlags'), + "QComboBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.hasFrame": (), + "QComboBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QComboBox.hidePopup": (), + "QComboBox.iconSize": (), + "QComboBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionComboBox',), + "QComboBox.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QComboBox.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QComboBox.insertItem": [('int', 'PySide2.QtGui.QIcon', 'str', 'Any'), ('int', 'str', 'Any')], + "QComboBox.insertItems": ('int', 'List[str]'), + "QComboBox.insertPolicy": (), + "QComboBox.insertSeparator": ('int',), + "QComboBox.isEditable": (), + "QComboBox.itemData": ('int', 'int'), + "QComboBox.itemDelegate": (), + "QComboBox.itemIcon": ('int',), + "QComboBox.itemText": ('int',), + "QComboBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.lineEdit": (), + "QComboBox.maxCount": (), + "QComboBox.maxVisibleItems": (), + "QComboBox.minimumContentsLength": (), + "QComboBox.minimumSizeHint": (), + "QComboBox.model": (), + "QComboBox.modelColumn": (), + "QComboBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QComboBox.removeItem": ('int',), + "QComboBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QComboBox.rootModelIndex": (), + "QComboBox.setAutoCompletion": ('bool',), + "QComboBox.setAutoCompletionCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QComboBox.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QComboBox.setCurrentIndex": ('int',), + "QComboBox.setCurrentText": ('str',), + "QComboBox.setDuplicatesEnabled": ('bool',), + "QComboBox.setEditText": ('str',), + "QComboBox.setEditable": ('bool',), + "QComboBox.setFrame": ('bool',), + "QComboBox.setIconSize": ('PySide2.QtCore.QSize',), + "QComboBox.setInsertPolicy": ('PySide2.QtWidgets.QComboBox.InsertPolicy',), + "QComboBox.setItemData": ('int', 'Any', 'int'), + "QComboBox.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QComboBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QComboBox.setItemText": ('int', 'str'), + "QComboBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QComboBox.setMaxCount": ('int',), + "QComboBox.setMaxVisibleItems": ('int',), + "QComboBox.setMinimumContentsLength": ('int',), + "QComboBox.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QComboBox.setModelColumn": ('int',), + "QComboBox.setRootModelIndex": ('PySide2.QtCore.QModelIndex',), + "QComboBox.setSizeAdjustPolicy": ('PySide2.QtWidgets.QComboBox.SizeAdjustPolicy',), + "QComboBox.setValidator": ('PySide2.QtGui.QValidator',), + "QComboBox.setView": ('PySide2.QtWidgets.QAbstractItemView',), + "QComboBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QComboBox.showPopup": (), + "QComboBox.sizeAdjustPolicy": (), + "QComboBox.sizeHint": (), + "QComboBox.validator": (), + "QComboBox.view": (), + "QComboBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QCommandLinkButton: + "QCommandLinkButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget'), ('str', 'str', 'PySide2.QtWidgets.QWidget')], + "QCommandLinkButton.description": (), + "QCommandLinkButton.event": ('PySide2.QtCore.QEvent',), + "QCommandLinkButton.heightForWidth": ('int',), + "QCommandLinkButton.minimumSizeHint": (), + "QCommandLinkButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCommandLinkButton.setDescription": ('str',), + "QCommandLinkButton.sizeHint": (), + + # class PySide2.QtWidgets.QCommonStyle: + "QCommonStyle.__init__": (), + "QCommonStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QCommonStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QCommonStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QCommonStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QCompleter: + "QCompleter.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QCompleter.caseSensitivity": (), + "QCompleter.complete": ('PySide2.QtCore.QRect',), + "QCompleter.completionColumn": (), + "QCompleter.completionCount": (), + "QCompleter.completionMode": (), + "QCompleter.completionModel": (), + "QCompleter.completionPrefix": (), + "QCompleter.completionRole": (), + "QCompleter.currentCompletion": (), + "QCompleter.currentIndex": (), + "QCompleter.currentRow": (), + "QCompleter.event": ('PySide2.QtCore.QEvent',), + "QCompleter.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCompleter.filterMode": (), + "QCompleter.maxVisibleItems": (), + "QCompleter.model": (), + "QCompleter.modelSorting": (), + "QCompleter.pathFromIndex": ('PySide2.QtCore.QModelIndex',), + "QCompleter.popup": (), + "QCompleter.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCompleter.setCompletionColumn": ('int',), + "QCompleter.setCompletionMode": ('PySide2.QtWidgets.QCompleter.CompletionMode',), + "QCompleter.setCompletionPrefix": ('str',), + "QCompleter.setCompletionRole": ('int',), + "QCompleter.setCurrentRow": ('int',), + "QCompleter.setFilterMode": ('PySide2.libpyside.MatchFlags',), + "QCompleter.setMaxVisibleItems": ('int',), + "QCompleter.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QCompleter.setModelSorting": ('PySide2.QtWidgets.QCompleter.ModelSorting',), + "QCompleter.setPopup": ('PySide2.QtWidgets.QAbstractItemView',), + "QCompleter.setWidget": ('PySide2.QtWidgets.QWidget',), + "QCompleter.setWrapAround": ('bool',), + "QCompleter.splitPath": ('str',), + "QCompleter.widget": (), + "QCompleter.wrapAround": (), + + # class PySide2.QtWidgets.QDataWidgetMapper: + "QDataWidgetMapper.__init__": ('PySide2.QtCore.QObject',), + "QDataWidgetMapper.addMapping": [('PySide2.QtWidgets.QWidget', 'int'), ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtCore.QByteArray')], + "QDataWidgetMapper.clearMapping": (), + "QDataWidgetMapper.currentIndex": (), + "QDataWidgetMapper.itemDelegate": (), + "QDataWidgetMapper.mappedPropertyName": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedSection": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedWidgetAt": ('int',), + "QDataWidgetMapper.model": (), + "QDataWidgetMapper.orientation": (), + "QDataWidgetMapper.removeMapping": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.revert": (), + "QDataWidgetMapper.rootIndex": (), + "QDataWidgetMapper.setCurrentIndex": ('int',), + "QDataWidgetMapper.setCurrentModelIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QDataWidgetMapper.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QDataWidgetMapper.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDataWidgetMapper.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setSubmitPolicy": ('PySide2.QtWidgets.QDataWidgetMapper.SubmitPolicy',), + "QDataWidgetMapper.submit": (), + "QDataWidgetMapper.submitPolicy": (), + "QDataWidgetMapper.toFirst": (), + "QDataWidgetMapper.toLast": (), + "QDataWidgetMapper.toNext": (), + "QDataWidgetMapper.toPrevious": (), + + # class PySide2.QtWidgets.QDateEdit: + "QDateEdit.__init__": [('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDateTimeEdit: + "QDateTimeEdit.__init__": [('Any', 'type', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDateTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QDateTimeEdit.calendarPopup": (), + "QDateTimeEdit.calendarWidget": (), + "QDateTimeEdit.clear": (), + "QDateTimeEdit.clearMaximumDate": (), + "QDateTimeEdit.clearMaximumDateTime": (), + "QDateTimeEdit.clearMaximumTime": (), + "QDateTimeEdit.clearMinimumDate": (), + "QDateTimeEdit.clearMinimumDateTime": (), + "QDateTimeEdit.clearMinimumTime": (), + "QDateTimeEdit.currentSection": (), + "QDateTimeEdit.currentSectionIndex": (), + "QDateTimeEdit.date": (), + "QDateTimeEdit.dateTime": (), + "QDateTimeEdit.dateTimeFromText": ('str',), + "QDateTimeEdit.displayFormat": (), + "QDateTimeEdit.displayedSections": (), + "QDateTimeEdit.event": ('PySide2.QtCore.QEvent',), + "QDateTimeEdit.fixup": ('str',), + "QDateTimeEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QDateTimeEdit.focusNextPrevChild": ('bool',), + "QDateTimeEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QDateTimeEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDateTimeEdit.maximumDate": (), + "QDateTimeEdit.maximumDateTime": (), + "QDateTimeEdit.maximumTime": (), + "QDateTimeEdit.minimumDate": (), + "QDateTimeEdit.minimumDateTime": (), + "QDateTimeEdit.minimumTime": (), + "QDateTimeEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDateTimeEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDateTimeEdit.sectionAt": ('int',), + "QDateTimeEdit.sectionCount": (), + "QDateTimeEdit.sectionText": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCalendarPopup": ('bool',), + "QDateTimeEdit.setCalendarWidget": ('PySide2.QtWidgets.QCalendarWidget',), + "QDateTimeEdit.setCurrentSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCurrentSectionIndex": ('int',), + "QDateTimeEdit.setDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QDateTimeEdit.setDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setDateTimeRange": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QDateTimeEdit.setDisplayFormat": ('str',), + "QDateTimeEdit.setMaximumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMaximumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMaximumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setMinimumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMinimumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMinimumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setSelectedSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setTimeRange": ('PySide2.QtCore.QTime', 'PySide2.QtCore.QTime'), + "QDateTimeEdit.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTimeEdit.sizeHint": (), + "QDateTimeEdit.stepBy": ('int',), + "QDateTimeEdit.stepEnabled": (), + "QDateTimeEdit.textFromDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.time": (), + "QDateTimeEdit.timeSpec": (), + "QDateTimeEdit.validate": ('str', 'int'), + "QDateTimeEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QDesktopWidget: + "QDesktopWidget.__init__": (), + "QDesktopWidget.availableGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.isVirtualDesktop": (), + "QDesktopWidget.numScreens": (), + "QDesktopWidget.primaryScreen": (), + "QDesktopWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDesktopWidget.screen": ('int',), + "QDesktopWidget.screenCount": (), + "QDesktopWidget.screenGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.screenNumber": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDial: + "QDial.__init__": ('PySide2.QtWidgets.QWidget',), + "QDial.event": ('PySide2.QtCore.QEvent',), + "QDial.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QDial.minimumSizeHint": (), + "QDial.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.notchSize": (), + "QDial.notchTarget": (), + "QDial.notchesVisible": (), + "QDial.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDial.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDial.setNotchTarget": ('float',), + "QDial.setNotchesVisible": ('bool',), + "QDial.setWrapping": ('bool',), + "QDial.sizeHint": (), + "QDial.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QDial.wrapping": (), + + # class PySide2.QtWidgets.QDialog: + "QDialog.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QDialog.accept": (), + "QDialog.adjustPosition": ('PySide2.QtWidgets.QWidget',), + "QDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDialog.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QDialog.done": ('int',), + "QDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QDialog.exec_": (), + "QDialog.extension": (), + "QDialog.isSizeGripEnabled": (), + "QDialog.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDialog.minimumSizeHint": (), + "QDialog.open": (), + "QDialog.orientation": (), + "QDialog.reject": (), + "QDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDialog.result": (), + "QDialog.setExtension": ('PySide2.QtWidgets.QWidget',), + "QDialog.setModal": ('bool',), + "QDialog.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialog.setResult": ('int',), + "QDialog.setSizeGripEnabled": ('bool',), + "QDialog.setVisible": ('bool',), + "QDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QDialog.showExtension": ('bool',), + "QDialog.sizeHint": (), + + # class PySide2.QtWidgets.QDialogButtonBox: + "QDialogButtonBox.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('PySide2.libpyside.StandardButtons', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QWidget')], + "QDialogButtonBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole'), ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), ('str', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole')], + "QDialogButtonBox.button": ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), + "QDialogButtonBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.buttons": (), + "QDialogButtonBox.centerButtons": (), + "QDialogButtonBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.clear": (), + "QDialogButtonBox.event": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.orientation": (), + "QDialogButtonBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.setCenterButtons": ('bool',), + "QDialogButtonBox.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialogButtonBox.setStandardButtons": ('PySide2.libpyside.StandardButtons',), + "QDialogButtonBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.standardButtons": (), + + # class PySide2.QtWidgets.QDirModel: + "QDirModel.__init__": [('List[str]', 'PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QDirModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QDirModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QDirModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filter": (), + "QDirModel.flags": ('PySide2.QtCore.QModelIndex',), + "QDirModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QDirModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QDirModel.iconProvider": (), + "QDirModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QDirModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.isReadOnly": (), + "QDirModel.lazyChildCount": (), + "QDirModel.mimeData": ('List[int]',), + "QDirModel.mimeTypes": (), + "QDirModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QDirModel.nameFilters": (), + "QDirModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QDirModel.refresh": ('PySide2.QtCore.QModelIndex',), + "QDirModel.remove": ('PySide2.QtCore.QModelIndex',), + "QDirModel.resolveSymlinks": (), + "QDirModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QDirModel.setFilter": ('PySide2.libpyside.Filters',), + "QDirModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QDirModel.setLazyChildCount": ('bool',), + "QDirModel.setNameFilters": ('List[str]',), + "QDirModel.setReadOnly": ('bool',), + "QDirModel.setResolveSymlinks": ('bool',), + "QDirModel.setSorting": ('PySide2.libpyside.SortFlags',), + "QDirModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QDirModel.sorting": (), + "QDirModel.supportedDropActions": (), + + # class PySide2.QtWidgets.QDockWidget: + "QDockWidget.__init__": [('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QDockWidget.allowedAreas": (), + "QDockWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QDockWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDockWidget.event": ('PySide2.QtCore.QEvent',), + "QDockWidget.features": (), + "QDockWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionDockWidget',), + "QDockWidget.isAreaAllowed": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QDockWidget.isFloating": (), + "QDockWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDockWidget.setAllowedAreas": ('PySide2.libpyside.DockWidgetAreas',), + "QDockWidget.setFeatures": ('PySide2.libpyside.DockWidgetFeatures',), + "QDockWidget.setFloating": ('bool',), + "QDockWidget.setTitleBarWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.titleBarWidget": (), + "QDockWidget.toggleViewAction": (), + "QDockWidget.widget": (), + + # class PySide2.QtWidgets.QDoubleSpinBox: + "QDoubleSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QDoubleSpinBox.cleanText": (), + "QDoubleSpinBox.decimals": (), + "QDoubleSpinBox.fixup": ('str',), + "QDoubleSpinBox.maximum": (), + "QDoubleSpinBox.minimum": (), + "QDoubleSpinBox.prefix": (), + "QDoubleSpinBox.setDecimals": ('int',), + "QDoubleSpinBox.setMaximum": ('float',), + "QDoubleSpinBox.setMinimum": ('float',), + "QDoubleSpinBox.setPrefix": ('str',), + "QDoubleSpinBox.setRange": ('float', 'float'), + "QDoubleSpinBox.setSingleStep": ('float',), + "QDoubleSpinBox.setSuffix": ('str',), + "QDoubleSpinBox.setValue": ('float',), + "QDoubleSpinBox.singleStep": (), + "QDoubleSpinBox.suffix": (), + "QDoubleSpinBox.textFromValue": ('float',), + "QDoubleSpinBox.validate": ('str', 'int'), + "QDoubleSpinBox.value": (), + "QDoubleSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QErrorMessage: + "QErrorMessage.__init__": ('PySide2.QtWidgets.QWidget',), + "QErrorMessage.changeEvent": ('PySide2.QtCore.QEvent',), + "QErrorMessage.done": ('int',), + "QErrorMessage.qtHandler": (), + "QErrorMessage.showMessage": [('str',), ('str', 'str')], + + # class PySide2.QtWidgets.QFileDialog: + "QFileDialog.__init__": [('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str')], + "QFileDialog.accept": (), + "QFileDialog.acceptMode": (), + "QFileDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFileDialog.confirmOverwrite": (), + "QFileDialog.defaultSuffix": (), + "QFileDialog.directory": (), + "QFileDialog.directoryUrl": (), + "QFileDialog.done": ('int',), + "QFileDialog.fileMode": (), + "QFileDialog.filter": (), + "QFileDialog.getExistingDirectory": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.Options'), + "QFileDialog.getExistingDirectoryUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'PySide2.libpyside.Options', 'List[str]'), + "QFileDialog.getOpenFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'PySide2.libpyside.Options'), + "QFileDialog.getOpenFileNames": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'PySide2.libpyside.Options'), + "QFileDialog.getOpenFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'PySide2.libpyside.Options', 'List[str]'), + "QFileDialog.getOpenFileUrls": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'PySide2.libpyside.Options', 'List[str]'), + "QFileDialog.getSaveFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'PySide2.libpyside.Options'), + "QFileDialog.getSaveFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'PySide2.libpyside.Options', 'List[str]'), + "QFileDialog.history": (), + "QFileDialog.iconProvider": (), + "QFileDialog.isNameFilterDetailsVisible": (), + "QFileDialog.isReadOnly": (), + "QFileDialog.itemDelegate": (), + "QFileDialog.labelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel',), + "QFileDialog.mimeTypeFilters": (), + "QFileDialog.nameFilters": (), + "QFileDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFileDialog.options": (), + "QFileDialog.proxyModel": (), + "QFileDialog.resolveSymlinks": (), + "QFileDialog.restoreState": ('PySide2.QtCore.QByteArray',), + "QFileDialog.saveState": (), + "QFileDialog.selectFile": ('str',), + "QFileDialog.selectMimeTypeFilter": ('str',), + "QFileDialog.selectNameFilter": ('str',), + "QFileDialog.selectUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.selectedFiles": (), + "QFileDialog.selectedMimeTypeFilter": (), + "QFileDialog.selectedNameFilter": (), + "QFileDialog.selectedUrls": (), + "QFileDialog.setAcceptMode": ('PySide2.QtWidgets.QFileDialog.AcceptMode',), + "QFileDialog.setConfirmOverwrite": ('bool',), + "QFileDialog.setDefaultSuffix": ('str',), + "QFileDialog.setDirectory": [('PySide2.QtCore.QDir',), ('str',)], + "QFileDialog.setDirectoryUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.setFileMode": ('PySide2.QtWidgets.QFileDialog.FileMode',), + "QFileDialog.setFilter": ('PySide2.libpyside.Filters',), + "QFileDialog.setHistory": ('List[str]',), + "QFileDialog.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileDialog.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QFileDialog.setLabelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel', 'str'), + "QFileDialog.setMimeTypeFilters": ('List[str]',), + "QFileDialog.setNameFilter": ('str',), + "QFileDialog.setNameFilterDetailsVisible": ('bool',), + "QFileDialog.setNameFilters": ('List[str]',), + "QFileDialog.setOption": ('PySide2.QtWidgets.QFileDialog.Option', 'bool'), + "QFileDialog.setOptions": ('PySide2.libpyside.Options',), + "QFileDialog.setProxyModel": ('PySide2.QtCore.QAbstractProxyModel',), + "QFileDialog.setReadOnly": ('bool',), + "QFileDialog.setResolveSymlinks": ('bool',), + "QFileDialog.setSidebarUrls": ('list',), + "QFileDialog.setSupportedSchemes": ('List[str]',), + "QFileDialog.setViewMode": ('PySide2.QtWidgets.QFileDialog.ViewMode',), + "QFileDialog.setVisible": ('bool',), + "QFileDialog.sidebarUrls": (), + "QFileDialog.supportedSchemes": (), + "QFileDialog.testOption": ('PySide2.QtWidgets.QFileDialog.Option',), + "QFileDialog.viewMode": (), + + # class PySide2.QtWidgets.QFileIconProvider: + "QFileIconProvider.__init__": (), + "QFileIconProvider.icon": [('PySide2.QtCore.QFileInfo',), ('PySide2.QtWidgets.QFileIconProvider.IconType',)], + "QFileIconProvider.options": (), + "QFileIconProvider.setOptions": ('PySide2.libpyside.Options',), + "QFileIconProvider.type": ('PySide2.QtCore.QFileInfo',), + + # class PySide2.QtWidgets.QFileSystemModel: + "QFileSystemModel.__init__": ('PySide2.QtCore.QObject',), + "QFileSystemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QFileSystemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.event": ('PySide2.QtCore.QEvent',), + "QFileSystemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filter": (), + "QFileSystemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QFileSystemModel.iconProvider": (), + "QFileSystemModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QFileSystemModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.isReadOnly": (), + "QFileSystemModel.lastModified": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.mimeData": ('List[int]',), + "QFileSystemModel.mimeTypes": (), + "QFileSystemModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QFileSystemModel.myComputer": ('int',), + "QFileSystemModel.nameFilterDisables": (), + "QFileSystemModel.nameFilters": (), + "QFileSystemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QFileSystemModel.remove": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.resolveSymlinks": (), + "QFileSystemModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.rootDirectory": (), + "QFileSystemModel.rootPath": (), + "QFileSystemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QFileSystemModel.setFilter": ('PySide2.libpyside.Filters',), + "QFileSystemModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileSystemModel.setNameFilterDisables": ('bool',), + "QFileSystemModel.setNameFilters": ('List[str]',), + "QFileSystemModel.setReadOnly": ('bool',), + "QFileSystemModel.setResolveSymlinks": ('bool',), + "QFileSystemModel.setRootPath": ('str',), + "QFileSystemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.size": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QFileSystemModel.supportedDropActions": (), + "QFileSystemModel.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QFileSystemModel.type": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtWidgets.QFocusFrame: + "QFocusFrame.__init__": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.event": ('PySide2.QtCore.QEvent',), + "QFocusFrame.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFocusFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QFocusFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFocusFrame.setWidget": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.widget": (), + + # class PySide2.QtWidgets.QFontComboBox: + "QFontComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QFontComboBox.currentFont": (), + "QFontComboBox.event": ('PySide2.QtCore.QEvent',), + "QFontComboBox.fontFilters": (), + "QFontComboBox.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontComboBox.setFontFilters": ('PySide2.libpyside.FontFilters',), + "QFontComboBox.setWritingSystem": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontComboBox.sizeHint": (), + "QFontComboBox.writingSystem": (), + + # class PySide2.QtWidgets.QFontDialog: + "QFontDialog.__init__": [('PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QFontDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFontDialog.currentFont": (), + "QFontDialog.done": ('int',), + "QFontDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFontDialog.getFont": [('bool', 'PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget', 'str', 'PySide2.libpyside.FontDialogOptions'), ('bool', 'PySide2.QtWidgets.QWidget')], + "QFontDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFontDialog.options": (), + "QFontDialog.selectedFont": (), + "QFontDialog.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontDialog.setOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption', 'bool'), + "QFontDialog.setOptions": ('PySide2.libpyside.FontDialogOptions',), + "QFontDialog.setVisible": ('bool',), + "QFontDialog.testOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption',), + + # class PySide2.QtWidgets.QFormLayout: + "QFormLayout.__init__": ('PySide2.QtWidgets.QWidget',), + "QFormLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QFormLayout.addRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QLayout'), ('str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.count": (), + "QFormLayout.expandingDirections": (), + "QFormLayout.fieldGrowthPolicy": (), + "QFormLayout.formAlignment": (), + "QFormLayout.getItemPosition": ('int', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getLayoutPosition": ('PySide2.QtWidgets.QLayout', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getWidgetPosition": ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.hasHeightForWidth": (), + "QFormLayout.heightForWidth": ('int',), + "QFormLayout.horizontalSpacing": (), + "QFormLayout.insertRow": [('int', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('int', 'str', 'PySide2.QtWidgets.QLayout'), ('int', 'str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.invalidate": (), + "QFormLayout.itemAt": [('int',), ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole')], + "QFormLayout.labelAlignment": (), + "QFormLayout.labelForField": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QFormLayout.minimumSize": (), + "QFormLayout.removeRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QFormLayout.rowCount": (), + "QFormLayout.rowWrapPolicy": (), + "QFormLayout.setFieldGrowthPolicy": ('PySide2.QtWidgets.QFormLayout.FieldGrowthPolicy',), + "QFormLayout.setFormAlignment": ('PySide2.libpyside.Alignment',), + "QFormLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QFormLayout.setHorizontalSpacing": ('int',), + "QFormLayout.setItem": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayoutItem'), + "QFormLayout.setLabelAlignment": ('PySide2.libpyside.Alignment',), + "QFormLayout.setLayout": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayout'), + "QFormLayout.setRowWrapPolicy": ('PySide2.QtWidgets.QFormLayout.RowWrapPolicy',), + "QFormLayout.setSpacing": ('int',), + "QFormLayout.setVerticalSpacing": ('int',), + "QFormLayout.setWidget": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QWidget'), + "QFormLayout.sizeHint": (), + "QFormLayout.spacing": (), + "QFormLayout.takeAt": ('int',), + "QFormLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QFrame: + "QFrame.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QFrame.changeEvent": ('PySide2.QtCore.QEvent',), + "QFrame.drawFrame": ('PySide2.QtGui.QPainter',), + "QFrame.event": ('PySide2.QtCore.QEvent',), + "QFrame.frameRect": (), + "QFrame.frameShadow": (), + "QFrame.frameShape": (), + "QFrame.frameStyle": (), + "QFrame.frameWidth": (), + "QFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QFrame.lineWidth": (), + "QFrame.midLineWidth": (), + "QFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFrame.setFrameRect": ('PySide2.QtCore.QRect',), + "QFrame.setFrameShadow": ('PySide2.QtWidgets.QFrame.Shadow',), + "QFrame.setFrameShape": ('PySide2.QtWidgets.QFrame.Shape',), + "QFrame.setFrameStyle": ('int',), + "QFrame.setLineWidth": ('int',), + "QFrame.setMidLineWidth": ('int',), + "QFrame.sizeHint": (), + + # class PySide2.QtWidgets.QGesture: + "QGesture.__init__": ('PySide2.QtCore.QObject',), + "QGesture.gestureCancelPolicy": (), + "QGesture.gestureType": (), + "QGesture.hasHotSpot": (), + "QGesture.hotSpot": (), + "QGesture.setGestureCancelPolicy": ('PySide2.QtWidgets.QGesture.GestureCancelPolicy',), + "QGesture.setHotSpot": ('PySide2.QtCore.QPointF',), + "QGesture.state": (), + "QGesture.unsetHotSpot": (), + + # class PySide2.QtWidgets.QGestureEvent: + "QGestureEvent.__init__": ('list',), + "QGestureEvent.accept": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.activeGestures": (), + "QGestureEvent.canceledGestures": (), + "QGestureEvent.gesture": ('PySide2.QtCore.Qt.GestureType',), + "QGestureEvent.gestures": (), + "QGestureEvent.ignore": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.isAccepted": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.mapToGraphicsScene": ('PySide2.QtCore.QPointF',), + "QGestureEvent.setAccepted": [('PySide2.QtCore.Qt.GestureType', 'bool'), ('PySide2.QtWidgets.QGesture', 'bool'), ('bool',)], + "QGestureEvent.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGestureEvent.widget": (), + + # class PySide2.QtWidgets.QGestureRecognizer: + "QGestureRecognizer.__init__": (), + "QGestureRecognizer.create": ('PySide2.QtCore.QObject',), + "QGestureRecognizer.recognize": ('PySide2.QtWidgets.QGesture', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGestureRecognizer.registerRecognizer": ('PySide2.QtWidgets.QGestureRecognizer',), + "QGestureRecognizer.reset": ('PySide2.QtWidgets.QGesture',), + "QGestureRecognizer.unregisterRecognizer": ('PySide2.QtCore.Qt.GestureType',), + + # class PySide2.QtWidgets.QGraphicsAnchor: + "QGraphicsAnchor.setSizePolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QGraphicsAnchor.setSpacing": ('float',), + "QGraphicsAnchor.sizePolicy": (), + "QGraphicsAnchor.spacing": (), + "QGraphicsAnchor.unsetSpacing": (), + + # class PySide2.QtWidgets.QGraphicsAnchorLayout: + "QGraphicsAnchorLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsAnchorLayout.addAnchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.addAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.libpyside.Orientations'), + "QGraphicsAnchorLayout.addCornerAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner'), + "QGraphicsAnchorLayout.anchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.count": (), + "QGraphicsAnchorLayout.horizontalSpacing": (), + "QGraphicsAnchorLayout.invalidate": (), + "QGraphicsAnchorLayout.itemAt": ('int',), + "QGraphicsAnchorLayout.removeAt": ('int',), + "QGraphicsAnchorLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsAnchorLayout.setHorizontalSpacing": ('float',), + "QGraphicsAnchorLayout.setSpacing": ('float',), + "QGraphicsAnchorLayout.setVerticalSpacing": ('float',), + "QGraphicsAnchorLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsAnchorLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsBlurEffect: + "QGraphicsBlurEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsBlurEffect.blurHints": (), + "QGraphicsBlurEffect.blurRadius": (), + "QGraphicsBlurEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsBlurEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsBlurEffect.setBlurHints": ('PySide2.libpyside.BlurHints',), + "QGraphicsBlurEffect.setBlurRadius": ('float',), + + # class PySide2.QtWidgets.QGraphicsColorizeEffect: + "QGraphicsColorizeEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsColorizeEffect.color": (), + "QGraphicsColorizeEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsColorizeEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsColorizeEffect.setStrength": ('float',), + "QGraphicsColorizeEffect.strength": (), + + # class PySide2.QtWidgets.QGraphicsDropShadowEffect: + "QGraphicsDropShadowEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsDropShadowEffect.blurRadius": (), + "QGraphicsDropShadowEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsDropShadowEffect.color": (), + "QGraphicsDropShadowEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsDropShadowEffect.offset": (), + "QGraphicsDropShadowEffect.setBlurRadius": ('float',), + "QGraphicsDropShadowEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsDropShadowEffect.setOffset": [('PySide2.QtCore.QPointF',), ('float',), ('float', 'float')], + "QGraphicsDropShadowEffect.setXOffset": ('float',), + "QGraphicsDropShadowEffect.setYOffset": ('float',), + "QGraphicsDropShadowEffect.xOffset": (), + "QGraphicsDropShadowEffect.yOffset": (), + + # class PySide2.QtWidgets.QGraphicsEffect: + "QGraphicsEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsEffect.boundingRect": (), + "QGraphicsEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.drawSource": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.isEnabled": (), + "QGraphicsEffect.setEnabled": ('bool',), + "QGraphicsEffect.sourceBoundingRect": ('PySide2.QtCore.Qt.CoordinateSystem',), + "QGraphicsEffect.sourceChanged": ('PySide2.libpyside.ChangeFlags',), + "QGraphicsEffect.sourceIsPixmap": (), + "QGraphicsEffect.sourcePixmap": ('PySide2.QtCore.Qt.CoordinateSystem', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QGraphicsEffect.PixmapPadMode'), + "QGraphicsEffect.update": (), + "QGraphicsEffect.updateBoundingRect": (), + + # class PySide2.QtWidgets.QGraphicsEllipseItem: + "QGraphicsEllipseItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsEllipseItem.boundingRect": (), + "QGraphicsEllipseItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsEllipseItem.extension": ('Any',), + "QGraphicsEllipseItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsEllipseItem.opaqueArea": (), + "QGraphicsEllipseItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsEllipseItem.rect": (), + "QGraphicsEllipseItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsEllipseItem.setSpanAngle": ('int',), + "QGraphicsEllipseItem.setStartAngle": ('int',), + "QGraphicsEllipseItem.shape": (), + "QGraphicsEllipseItem.spanAngle": (), + "QGraphicsEllipseItem.startAngle": (), + "QGraphicsEllipseItem.type": (), + + # class PySide2.QtWidgets.QGraphicsGridLayout: + "QGraphicsGridLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.addItem": [('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'PySide2.libpyside.Alignment'), ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment')], + "QGraphicsGridLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.columnAlignment": ('int',), + "QGraphicsGridLayout.columnCount": (), + "QGraphicsGridLayout.columnMaximumWidth": ('int',), + "QGraphicsGridLayout.columnMinimumWidth": ('int',), + "QGraphicsGridLayout.columnPreferredWidth": ('int',), + "QGraphicsGridLayout.columnSpacing": ('int',), + "QGraphicsGridLayout.columnStretchFactor": ('int',), + "QGraphicsGridLayout.count": (), + "QGraphicsGridLayout.horizontalSpacing": (), + "QGraphicsGridLayout.invalidate": (), + "QGraphicsGridLayout.itemAt": [('int',), ('int', 'int')], + "QGraphicsGridLayout.removeAt": ('int',), + "QGraphicsGridLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.rowAlignment": ('int',), + "QGraphicsGridLayout.rowCount": (), + "QGraphicsGridLayout.rowMaximumHeight": ('int',), + "QGraphicsGridLayout.rowMinimumHeight": ('int',), + "QGraphicsGridLayout.rowPreferredHeight": ('int',), + "QGraphicsGridLayout.rowSpacing": ('int',), + "QGraphicsGridLayout.rowStretchFactor": ('int',), + "QGraphicsGridLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.libpyside.Alignment'), + "QGraphicsGridLayout.setColumnAlignment": ('int', 'PySide2.libpyside.Alignment'), + "QGraphicsGridLayout.setColumnFixedWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMaximumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMinimumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnPreferredWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnSpacing": ('int', 'float'), + "QGraphicsGridLayout.setColumnStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsGridLayout.setHorizontalSpacing": ('float',), + "QGraphicsGridLayout.setRowAlignment": ('int', 'PySide2.libpyside.Alignment'), + "QGraphicsGridLayout.setRowFixedHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMaximumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMinimumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowPreferredHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowSpacing": ('int', 'float'), + "QGraphicsGridLayout.setRowStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setSpacing": ('float',), + "QGraphicsGridLayout.setVerticalSpacing": ('float',), + "QGraphicsGridLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsItem: + "QGraphicsItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.acceptDrops": (), + "QGraphicsItem.acceptHoverEvents": (), + "QGraphicsItem.acceptTouchEvents": (), + "QGraphicsItem.acceptedMouseButtons": (), + "QGraphicsItem.addToIndex": (), + "QGraphicsItem.advance": ('int',), + "QGraphicsItem.boundingRect": (), + "QGraphicsItem.boundingRegion": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.boundingRegionGranularity": (), + "QGraphicsItem.cacheMode": (), + "QGraphicsItem.childItems": (), + "QGraphicsItem.childrenBoundingRect": (), + "QGraphicsItem.clearFocus": (), + "QGraphicsItem.clipPath": (), + "QGraphicsItem.collidesWithItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidesWithPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidingItems": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsItem.commonAncestorItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsItem.cursor": (), + "QGraphicsItem.data": ('int',), + "QGraphicsItem.deviceTransform": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.effectiveOpacity": (), + "QGraphicsItem.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsItem.extension": ('Any',), + "QGraphicsItem.filtersChildEvents": (), + "QGraphicsItem.flags": (), + "QGraphicsItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusItem": (), + "QGraphicsItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusProxy": (), + "QGraphicsItem.focusScopeItem": (), + "QGraphicsItem.grabKeyboard": (), + "QGraphicsItem.grabMouse": (), + "QGraphicsItem.graphicsEffect": (), + "QGraphicsItem.group": (), + "QGraphicsItem.handlesChildEvents": (), + "QGraphicsItem.hasCursor": (), + "QGraphicsItem.hasFocus": (), + "QGraphicsItem.hide": (), + "QGraphicsItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsItem.inputMethodHints": (), + "QGraphicsItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsItem.installSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isActive": (), + "QGraphicsItem.isAncestorOf": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isBlockedByModalPanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isClipped": (), + "QGraphicsItem.isEnabled": (), + "QGraphicsItem.isObscured": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isPanel": (), + "QGraphicsItem.isSelected": (), + "QGraphicsItem.isUnderMouse": (), + "QGraphicsItem.isVisible": (), + "QGraphicsItem.isVisibleTo": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isWidget": (), + "QGraphicsItem.isWindow": (), + "QGraphicsItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsItem.itemTransform": ('PySide2.QtWidgets.QGraphicsItem', 'bool'), + "QGraphicsItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.mapFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapToParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.matrix": (), + "QGraphicsItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.moveBy": ('float', 'float'), + "QGraphicsItem.opacity": (), + "QGraphicsItem.opaqueArea": (), + "QGraphicsItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItem.panel": (), + "QGraphicsItem.panelModality": (), + "QGraphicsItem.parentItem": (), + "QGraphicsItem.parentObject": (), + "QGraphicsItem.parentWidget": (), + "QGraphicsItem.pos": (), + "QGraphicsItem.prepareGeometryChange": (), + "QGraphicsItem.removeFromIndex": (), + "QGraphicsItem.removeSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.resetMatrix": (), + "QGraphicsItem.resetTransform": (), + "QGraphicsItem.rotation": (), + "QGraphicsItem.scale": (), + "QGraphicsItem.scene": (), + "QGraphicsItem.sceneBoundingRect": (), + "QGraphicsItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsItem.sceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsItem.sceneMatrix": (), + "QGraphicsItem.scenePos": (), + "QGraphicsItem.sceneTransform": (), + "QGraphicsItem.scroll": ('float', 'float', 'PySide2.QtCore.QRectF'), + "QGraphicsItem.setAcceptDrops": ('bool',), + "QGraphicsItem.setAcceptHoverEvents": ('bool',), + "QGraphicsItem.setAcceptTouchEvents": ('bool',), + "QGraphicsItem.setAcceptedMouseButtons": ('PySide2.libpyside.MouseButtons',), + "QGraphicsItem.setActive": ('bool',), + "QGraphicsItem.setBoundingRegionGranularity": ('float',), + "QGraphicsItem.setCacheMode": ('PySide2.QtWidgets.QGraphicsItem.CacheMode', 'PySide2.QtCore.QSize'), + "QGraphicsItem.setCursor": ('PySide2.QtGui.QCursor',), + "QGraphicsItem.setData": ('int', 'Any'), + "QGraphicsItem.setEnabled": ('bool',), + "QGraphicsItem.setFiltersChildEvents": ('bool',), + "QGraphicsItem.setFlag": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemFlag', 'bool'), + "QGraphicsItem.setFlags": ('PySide2.libpyside.GraphicsItemFlags',), + "QGraphicsItem.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsItem.setFocusProxy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QGraphicsItem.setGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsItem.setHandlesChildEvents": ('bool',), + "QGraphicsItem.setInputMethodHints": ('PySide2.libpyside.InputMethodHints',), + "QGraphicsItem.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsItem.setOpacity": ('float',), + "QGraphicsItem.setPanelModality": ('PySide2.QtWidgets.QGraphicsItem.PanelModality',), + "QGraphicsItem.setParentItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setPos": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setRotation": ('float',), + "QGraphicsItem.setScale": ('float',), + "QGraphicsItem.setSelected": ('bool',), + "QGraphicsItem.setToolTip": ('str',), + "QGraphicsItem.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsItem.setTransformOriginPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setTransformations": ('list',), + "QGraphicsItem.setVisible": ('bool',), + "QGraphicsItem.setX": ('float',), + "QGraphicsItem.setY": ('float',), + "QGraphicsItem.setZValue": ('float',), + "QGraphicsItem.shape": (), + "QGraphicsItem.show": (), + "QGraphicsItem.stackBefore": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.toGraphicsObject": (), + "QGraphicsItem.toolTip": (), + "QGraphicsItem.topLevelItem": (), + "QGraphicsItem.topLevelWidget": (), + "QGraphicsItem.transform": (), + "QGraphicsItem.transformOriginPoint": (), + "QGraphicsItem.transformations": (), + "QGraphicsItem.type": (), + "QGraphicsItem.ungrabKeyboard": (), + "QGraphicsItem.ungrabMouse": (), + "QGraphicsItem.unsetCursor": (), + "QGraphicsItem.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.updateMicroFocus": (), + "QGraphicsItem.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsItem.window": (), + "QGraphicsItem.x": (), + "QGraphicsItem.y": (), + "QGraphicsItem.zValue": (), + + # class PySide2.QtWidgets.QGraphicsItemAnimation: + "QGraphicsItemAnimation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsItemAnimation.afterAnimationStep": ('float',), + "QGraphicsItemAnimation.beforeAnimationStep": ('float',), + "QGraphicsItemAnimation.clear": (), + "QGraphicsItemAnimation.horizontalScaleAt": ('float',), + "QGraphicsItemAnimation.horizontalShearAt": ('float',), + "QGraphicsItemAnimation.item": (), + "QGraphicsItemAnimation.matrixAt": ('float',), + "QGraphicsItemAnimation.posAt": ('float',), + "QGraphicsItemAnimation.posList": (), + "QGraphicsItemAnimation.reset": (), + "QGraphicsItemAnimation.rotationAt": ('float',), + "QGraphicsItemAnimation.rotationList": (), + "QGraphicsItemAnimation.scaleList": (), + "QGraphicsItemAnimation.setItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemAnimation.setPosAt": ('float', 'PySide2.QtCore.QPointF'), + "QGraphicsItemAnimation.setRotationAt": ('float', 'float'), + "QGraphicsItemAnimation.setScaleAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setShearAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setStep": ('float',), + "QGraphicsItemAnimation.setTimeLine": ('PySide2.QtCore.QTimeLine',), + "QGraphicsItemAnimation.setTranslationAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.shearList": (), + "QGraphicsItemAnimation.timeLine": (), + "QGraphicsItemAnimation.translationList": (), + "QGraphicsItemAnimation.verticalScaleAt": ('float',), + "QGraphicsItemAnimation.verticalShearAt": ('float',), + "QGraphicsItemAnimation.xTranslationAt": ('float',), + "QGraphicsItemAnimation.yTranslationAt": ('float',), + + # class PySide2.QtWidgets.QGraphicsItemGroup: + "QGraphicsItemGroup.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.addToGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.boundingRect": (), + "QGraphicsItemGroup.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.opaqueArea": (), + "QGraphicsItemGroup.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItemGroup.removeFromGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.type": (), + + # class PySide2.QtWidgets.QGraphicsLayout: + "QGraphicsLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.activate": (), + "QGraphicsLayout.addChildLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.count": (), + "QGraphicsLayout.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.instantInvalidatePropagation": (), + "QGraphicsLayout.invalidate": (), + "QGraphicsLayout.isActivated": (), + "QGraphicsLayout.itemAt": ('int',), + "QGraphicsLayout.removeAt": ('int',), + "QGraphicsLayout.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.setInstantInvalidatePropagation": ('bool',), + "QGraphicsLayout.updateGeometry": (), + "QGraphicsLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QGraphicsLayoutItem: + "QGraphicsLayoutItem.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'bool'), + "QGraphicsLayoutItem.contentsRect": (), + "QGraphicsLayoutItem.effectiveSizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.geometry": (), + "QGraphicsLayoutItem.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayoutItem.graphicsItem": (), + "QGraphicsLayoutItem.isLayout": (), + "QGraphicsLayoutItem.maximumHeight": (), + "QGraphicsLayoutItem.maximumSize": (), + "QGraphicsLayoutItem.maximumWidth": (), + "QGraphicsLayoutItem.minimumHeight": (), + "QGraphicsLayoutItem.minimumSize": (), + "QGraphicsLayoutItem.minimumWidth": (), + "QGraphicsLayoutItem.ownedByLayout": (), + "QGraphicsLayoutItem.parentLayoutItem": (), + "QGraphicsLayoutItem.preferredHeight": (), + "QGraphicsLayoutItem.preferredSize": (), + "QGraphicsLayoutItem.preferredWidth": (), + "QGraphicsLayoutItem.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLayoutItem.setGraphicsItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLayoutItem.setMaximumHeight": ('float',), + "QGraphicsLayoutItem.setMaximumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMaximumWidth": ('float',), + "QGraphicsLayoutItem.setMinimumHeight": ('float',), + "QGraphicsLayoutItem.setMinimumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMinimumWidth": ('float',), + "QGraphicsLayoutItem.setOwnedByLayout": ('bool',), + "QGraphicsLayoutItem.setParentLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayoutItem.setPreferredHeight": ('float',), + "QGraphicsLayoutItem.setPreferredSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setPreferredWidth": ('float',), + "QGraphicsLayoutItem.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QGraphicsLayoutItem.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.sizePolicy": (), + "QGraphicsLayoutItem.updateGeometry": (), + + # class PySide2.QtWidgets.QGraphicsLineItem: + "QGraphicsLineItem.__init__": [('PySide2.QtCore.QLineF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsLineItem.boundingRect": (), + "QGraphicsLineItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsLineItem.extension": ('Any',), + "QGraphicsLineItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLineItem.line": (), + "QGraphicsLineItem.opaqueArea": (), + "QGraphicsLineItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsLineItem.pen": (), + "QGraphicsLineItem.setLine": [('PySide2.QtCore.QLineF',), ('float', 'float', 'float', 'float')], + "QGraphicsLineItem.setPen": ('PySide2.QtGui.QPen',), + "QGraphicsLineItem.shape": (), + "QGraphicsLineItem.type": (), + + # class PySide2.QtWidgets.QGraphicsLinearLayout: + "QGraphicsLinearLayout.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QGraphicsLayoutItem'), ('PySide2.QtWidgets.QGraphicsLayoutItem',)], + "QGraphicsLinearLayout.addItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.addStretch": ('int',), + "QGraphicsLinearLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.count": (), + "QGraphicsLinearLayout.dump": ('int',), + "QGraphicsLinearLayout.insertItem": ('int', 'PySide2.QtWidgets.QGraphicsLayoutItem'), + "QGraphicsLinearLayout.insertStretch": ('int', 'int'), + "QGraphicsLinearLayout.invalidate": (), + "QGraphicsLinearLayout.itemAt": ('int',), + "QGraphicsLinearLayout.itemSpacing": ('int',), + "QGraphicsLinearLayout.orientation": (), + "QGraphicsLinearLayout.removeAt": ('int',), + "QGraphicsLinearLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.libpyside.Alignment'), + "QGraphicsLinearLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLinearLayout.setItemSpacing": ('int', 'float'), + "QGraphicsLinearLayout.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsLinearLayout.setSpacing": ('float',), + "QGraphicsLinearLayout.setStretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int'), + "QGraphicsLinearLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLinearLayout.spacing": (), + "QGraphicsLinearLayout.stretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + + # class PySide2.QtWidgets.QGraphicsObject: + "QGraphicsObject.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsObject.event": ('PySide2.QtCore.QEvent',), + "QGraphicsObject.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'PySide2.libpyside.GestureFlags'), + "QGraphicsObject.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QGraphicsObject.updateMicroFocus": (), + + # class PySide2.QtWidgets.QGraphicsOpacityEffect: + "QGraphicsOpacityEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsOpacityEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsOpacityEffect.opacity": (), + "QGraphicsOpacityEffect.opacityMask": (), + "QGraphicsOpacityEffect.setOpacity": ('float',), + "QGraphicsOpacityEffect.setOpacityMask": ('PySide2.QtGui.QBrush',), + + # class PySide2.QtWidgets.QGraphicsPathItem: + "QGraphicsPathItem.__init__": [('PySide2.QtGui.QPainterPath', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPathItem.boundingRect": (), + "QGraphicsPathItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPathItem.extension": ('Any',), + "QGraphicsPathItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPathItem.opaqueArea": (), + "QGraphicsPathItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPathItem.path": (), + "QGraphicsPathItem.setPath": ('PySide2.QtGui.QPainterPath',), + "QGraphicsPathItem.shape": (), + "QGraphicsPathItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPixmapItem: + "QGraphicsPixmapItem.__init__": [('PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPixmapItem.boundingRect": (), + "QGraphicsPixmapItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPixmapItem.extension": ('Any',), + "QGraphicsPixmapItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPixmapItem.offset": (), + "QGraphicsPixmapItem.opaqueArea": (), + "QGraphicsPixmapItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPixmapItem.pixmap": (), + "QGraphicsPixmapItem.setOffset": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsPixmapItem.setPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsPixmapItem.setShapeMode": ('PySide2.QtWidgets.QGraphicsPixmapItem.ShapeMode',), + "QGraphicsPixmapItem.setTransformationMode": ('PySide2.QtCore.Qt.TransformationMode',), + "QGraphicsPixmapItem.shape": (), + "QGraphicsPixmapItem.shapeMode": (), + "QGraphicsPixmapItem.transformationMode": (), + "QGraphicsPixmapItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPolygonItem: + "QGraphicsPolygonItem.__init__": [('PySide2.QtGui.QPolygonF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPolygonItem.boundingRect": (), + "QGraphicsPolygonItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPolygonItem.extension": ('Any',), + "QGraphicsPolygonItem.fillRule": (), + "QGraphicsPolygonItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPolygonItem.opaqueArea": (), + "QGraphicsPolygonItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPolygonItem.polygon": (), + "QGraphicsPolygonItem.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QGraphicsPolygonItem.setPolygon": ('PySide2.QtGui.QPolygonF',), + "QGraphicsPolygonItem.shape": (), + "QGraphicsPolygonItem.type": (), + + # class PySide2.QtWidgets.QGraphicsProxyWidget: + "QGraphicsProxyWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.libpyside.WindowFlags'), + "QGraphicsProxyWidget.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsProxyWidget.createProxyForChildWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsProxyWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.focusNextPrevChild": ('bool',), + "QGraphicsProxyWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsProxyWidget.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsProxyWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsProxyWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsProxyWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.newProxyWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsProxyWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsProxyWidget.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsProxyWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsProxyWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsProxyWidget.subWidgetRect": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.type": (), + "QGraphicsProxyWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsProxyWidget.widget": (), + + # class PySide2.QtWidgets.QGraphicsRectItem: + "QGraphicsRectItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsRectItem.boundingRect": (), + "QGraphicsRectItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsRectItem.extension": ('Any',), + "QGraphicsRectItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsRectItem.opaqueArea": (), + "QGraphicsRectItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsRectItem.rect": (), + "QGraphicsRectItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsRectItem.shape": (), + "QGraphicsRectItem.type": (), + + # class PySide2.QtWidgets.QGraphicsRotation: + "QGraphicsRotation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsRotation.angle": (), + "QGraphicsRotation.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsRotation.axis": (), + "QGraphicsRotation.origin": (), + "QGraphicsRotation.setAngle": ('float',), + "QGraphicsRotation.setAxis": [('PySide2.QtCore.Qt.Axis',), ('PySide2.QtGui.QVector3D',)], + "QGraphicsRotation.setOrigin": ('PySide2.QtGui.QVector3D',), + + # class PySide2.QtWidgets.QGraphicsScale: + "QGraphicsScale.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsScale.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsScale.origin": (), + "QGraphicsScale.setOrigin": ('PySide2.QtGui.QVector3D',), + "QGraphicsScale.setXScale": ('float',), + "QGraphicsScale.setYScale": ('float',), + "QGraphicsScale.setZScale": ('float',), + "QGraphicsScale.xScale": (), + "QGraphicsScale.yScale": (), + "QGraphicsScale.zScale": (), + + # class PySide2.QtWidgets.QGraphicsScene: + "QGraphicsScene.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QObject'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.QObject')], + "QGraphicsScene.activePanel": (), + "QGraphicsScene.activeWindow": (), + "QGraphicsScene.addEllipse": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.addLine": [('PySide2.QtCore.QLineF', 'PySide2.QtGui.QPen'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen')], + "QGraphicsScene.addPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsScene.addPolygon": ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addRect": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addSimpleText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QGraphicsScene.advance": (), + "QGraphicsScene.backgroundBrush": (), + "QGraphicsScene.bspTreeDepth": (), + "QGraphicsScene.clear": (), + "QGraphicsScene.clearFocus": (), + "QGraphicsScene.clearSelection": (), + "QGraphicsScene.collidingItems": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsScene.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsScene.createItemGroup": ('list',), + "QGraphicsScene.destroyItemGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsScene.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.event": ('PySide2.QtCore.QEvent',), + "QGraphicsScene.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.focusItem": (), + "QGraphicsScene.focusNextPrevChild": ('bool',), + "QGraphicsScene.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.font": (), + "QGraphicsScene.foregroundBrush": (), + "QGraphicsScene.hasFocus": (), + "QGraphicsScene.height": (), + "QGraphicsScene.helpEvent": ('PySide2.QtWidgets.QGraphicsSceneHelpEvent',), + "QGraphicsScene.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsScene.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsScene.invalidate": [('PySide2.QtCore.QRectF', 'PySide2.libpyside.SceneLayers'), ('float', 'float', 'float', 'float', 'PySide2.libpyside.SceneLayers')], + "QGraphicsScene.isActive": (), + "QGraphicsScene.isSortCacheEnabled": (), + "QGraphicsScene.itemAt": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTransform'), ('float', 'float', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemIndexMethod": (), + "QGraphicsScene.items": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemsBoundingRect": (), + "QGraphicsScene.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.minimumRenderSize": (), + "QGraphicsScene.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseGrabberItem": (), + "QGraphicsScene.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.palette": (), + "QGraphicsScene.removeItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.render": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), + "QGraphicsScene.sceneRect": (), + "QGraphicsScene.selectedItems": (), + "QGraphicsScene.selectionArea": (), + "QGraphicsScene.sendEvent": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.setActivePanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.setActiveWindow": ('PySide2.QtWidgets.QGraphicsWidget',), + "QGraphicsScene.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setBspTreeDepth": ('int',), + "QGraphicsScene.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsScene.setFocusItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.FocusReason'), + "QGraphicsScene.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsScene.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setItemIndexMethod": ('PySide2.QtWidgets.QGraphicsScene.ItemIndexMethod',), + "QGraphicsScene.setMinimumRenderSize": ('float',), + "QGraphicsScene.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsScene.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.setSelectionArea": [('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionOperation', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.setSortCacheEnabled": ('bool',), + "QGraphicsScene.setStickyFocus": ('bool',), + "QGraphicsScene.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsScene.stickyFocus": (), + "QGraphicsScene.style": (), + "QGraphicsScene.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.views": (), + "QGraphicsScene.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsScene.width": (), + + # class PySide2.QtWidgets.QGraphicsSceneContextMenuEvent: + "QGraphicsSceneContextMenuEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneContextMenuEvent.modifiers": (), + "QGraphicsSceneContextMenuEvent.pos": (), + "QGraphicsSceneContextMenuEvent.reason": (), + "QGraphicsSceneContextMenuEvent.scenePos": (), + "QGraphicsSceneContextMenuEvent.screenPos": (), + "QGraphicsSceneContextMenuEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneContextMenuEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setReason": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent.Reason',), + "QGraphicsSceneContextMenuEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneDragDropEvent: + "QGraphicsSceneDragDropEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneDragDropEvent.acceptProposedAction": (), + "QGraphicsSceneDragDropEvent.buttons": (), + "QGraphicsSceneDragDropEvent.dropAction": (), + "QGraphicsSceneDragDropEvent.mimeData": (), + "QGraphicsSceneDragDropEvent.modifiers": (), + "QGraphicsSceneDragDropEvent.pos": (), + "QGraphicsSceneDragDropEvent.possibleActions": (), + "QGraphicsSceneDragDropEvent.proposedAction": (), + "QGraphicsSceneDragDropEvent.scenePos": (), + "QGraphicsSceneDragDropEvent.screenPos": (), + "QGraphicsSceneDragDropEvent.setButtons": ('PySide2.libpyside.MouseButtons',), + "QGraphicsSceneDragDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneDragDropEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setPossibleActions": ('PySide2.libpyside.DropActions',), + "QGraphicsSceneDragDropEvent.setProposedAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneDragDropEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneEvent: + "QGraphicsSceneEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneEvent.widget": (), + + # class PySide2.QtWidgets.QGraphicsSceneHelpEvent: + "QGraphicsSceneHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHelpEvent.scenePos": (), + "QGraphicsSceneHelpEvent.screenPos": (), + "QGraphicsSceneHelpEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHelpEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneHoverEvent: + "QGraphicsSceneHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHoverEvent.lastPos": (), + "QGraphicsSceneHoverEvent.lastScenePos": (), + "QGraphicsSceneHoverEvent.lastScreenPos": (), + "QGraphicsSceneHoverEvent.modifiers": (), + "QGraphicsSceneHoverEvent.pos": (), + "QGraphicsSceneHoverEvent.scenePos": (), + "QGraphicsSceneHoverEvent.screenPos": (), + "QGraphicsSceneHoverEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneHoverEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneHoverEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneMouseEvent: + "QGraphicsSceneMouseEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneMouseEvent.button": (), + "QGraphicsSceneMouseEvent.buttonDownPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScenePos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttons": (), + "QGraphicsSceneMouseEvent.flags": (), + "QGraphicsSceneMouseEvent.lastPos": (), + "QGraphicsSceneMouseEvent.lastScenePos": (), + "QGraphicsSceneMouseEvent.lastScreenPos": (), + "QGraphicsSceneMouseEvent.modifiers": (), + "QGraphicsSceneMouseEvent.pos": (), + "QGraphicsSceneMouseEvent.scenePos": (), + "QGraphicsSceneMouseEvent.screenPos": (), + "QGraphicsSceneMouseEvent.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.setButtonDownPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScenePos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPoint'), + "QGraphicsSceneMouseEvent.setButtons": ('PySide2.libpyside.MouseButtons',), + "QGraphicsSceneMouseEvent.setFlags": ('PySide2.libpyside.MouseEventFlags',), + "QGraphicsSceneMouseEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneMouseEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setSource": ('PySide2.QtCore.Qt.MouseEventSource',), + "QGraphicsSceneMouseEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneMoveEvent: + "QGraphicsSceneMoveEvent.__init__": (), + "QGraphicsSceneMoveEvent.newPos": (), + "QGraphicsSceneMoveEvent.oldPos": (), + "QGraphicsSceneMoveEvent.setNewPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMoveEvent.setOldPos": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QGraphicsSceneResizeEvent: + "QGraphicsSceneResizeEvent.__init__": (), + "QGraphicsSceneResizeEvent.newSize": (), + "QGraphicsSceneResizeEvent.oldSize": (), + "QGraphicsSceneResizeEvent.setNewSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsSceneResizeEvent.setOldSize": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtWidgets.QGraphicsSceneWheelEvent: + "QGraphicsSceneWheelEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneWheelEvent.buttons": (), + "QGraphicsSceneWheelEvent.delta": (), + "QGraphicsSceneWheelEvent.modifiers": (), + "QGraphicsSceneWheelEvent.orientation": (), + "QGraphicsSceneWheelEvent.pos": (), + "QGraphicsSceneWheelEvent.scenePos": (), + "QGraphicsSceneWheelEvent.screenPos": (), + "QGraphicsSceneWheelEvent.setButtons": ('PySide2.libpyside.MouseButtons',), + "QGraphicsSceneWheelEvent.setDelta": ('int',), + "QGraphicsSceneWheelEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneWheelEvent.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsSceneWheelEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSimpleTextItem: + "QGraphicsSimpleTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSimpleTextItem.boundingRect": (), + "QGraphicsSimpleTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsSimpleTextItem.extension": ('Any',), + "QGraphicsSimpleTextItem.font": (), + "QGraphicsSimpleTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsSimpleTextItem.opaqueArea": (), + "QGraphicsSimpleTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSimpleTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsSimpleTextItem.setText": ('str',), + "QGraphicsSimpleTextItem.shape": (), + "QGraphicsSimpleTextItem.text": (), + "QGraphicsSimpleTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTextItem: + "QGraphicsTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsTextItem.adjustSize": (), + "QGraphicsTextItem.boundingRect": (), + "QGraphicsTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsTextItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsTextItem.defaultTextColor": (), + "QGraphicsTextItem.document": (), + "QGraphicsTextItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.extension": ('Any',), + "QGraphicsTextItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.font": (), + "QGraphicsTextItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsTextItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsTextItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.opaqueArea": (), + "QGraphicsTextItem.openExternalLinks": (), + "QGraphicsTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsTextItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsTextItem.setDefaultTextColor": ('PySide2.QtGui.QColor',), + "QGraphicsTextItem.setDocument": ('PySide2.QtGui.QTextDocument',), + "QGraphicsTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsTextItem.setHtml": ('str',), + "QGraphicsTextItem.setOpenExternalLinks": ('bool',), + "QGraphicsTextItem.setPlainText": ('str',), + "QGraphicsTextItem.setTabChangesFocus": ('bool',), + "QGraphicsTextItem.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QGraphicsTextItem.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QGraphicsTextItem.setTextWidth": ('float',), + "QGraphicsTextItem.shape": (), + "QGraphicsTextItem.tabChangesFocus": (), + "QGraphicsTextItem.textCursor": (), + "QGraphicsTextItem.textInteractionFlags": (), + "QGraphicsTextItem.textWidth": (), + "QGraphicsTextItem.toHtml": (), + "QGraphicsTextItem.toPlainText": (), + "QGraphicsTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTransform: + "QGraphicsTransform.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsTransform.update": (), + + # class PySide2.QtWidgets.QGraphicsView: + "QGraphicsView.__init__": [('PySide2.QtWidgets.QGraphicsScene', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QGraphicsView.alignment": (), + "QGraphicsView.backgroundBrush": (), + "QGraphicsView.cacheMode": (), + "QGraphicsView.centerOn": [('PySide2.QtCore.QPointF',), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float')], + "QGraphicsView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QGraphicsView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QGraphicsView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QGraphicsView.dragMode": (), + "QGraphicsView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QGraphicsView.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawItems": ('PySide2.QtGui.QPainter', 'int', 'List[PySide2.QtWidgets.QGraphicsItem]', 'List[PySide2.QtWidgets.QStyleOptionGraphicsItem]'), + "QGraphicsView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QGraphicsView.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('PySide2.QtWidgets.QGraphicsItem', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsView.event": ('PySide2.QtCore.QEvent',), + "QGraphicsView.fitInView": [('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.focusNextPrevChild": ('bool',), + "QGraphicsView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.foregroundBrush": (), + "QGraphicsView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsView.invalidateScene": ('PySide2.QtCore.QRectF', 'PySide2.libpyside.SceneLayers'), + "QGraphicsView.isInteractive": (), + "QGraphicsView.isTransformed": (), + "QGraphicsView.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QGraphicsView.items": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ItemSelectionMode')], + "QGraphicsView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsView.mapToScene": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('int', 'int'), ('int', 'int', 'int', 'int')], + "QGraphicsView.matrix": (), + "QGraphicsView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.optimizationFlags": (), + "QGraphicsView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGraphicsView.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'PySide2.libpyside.RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.renderHints": (), + "QGraphicsView.resetCachedContent": (), + "QGraphicsView.resetMatrix": (), + "QGraphicsView.resetTransform": (), + "QGraphicsView.resizeAnchor": (), + "QGraphicsView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGraphicsView.rotate": ('float',), + "QGraphicsView.rubberBandRect": (), + "QGraphicsView.rubberBandSelectionMode": (), + "QGraphicsView.scale": ('float', 'float'), + "QGraphicsView.scene": (), + "QGraphicsView.sceneRect": (), + "QGraphicsView.scrollContentsBy": ('int', 'int'), + "QGraphicsView.setAlignment": ('PySide2.libpyside.Alignment',), + "QGraphicsView.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setCacheMode": ('PySide2.libpyside.CacheMode',), + "QGraphicsView.setDragMode": ('PySide2.QtWidgets.QGraphicsView.DragMode',), + "QGraphicsView.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setInteractive": ('bool',), + "QGraphicsView.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsView.setOptimizationFlag": ('PySide2.QtWidgets.QGraphicsView.OptimizationFlag', 'bool'), + "QGraphicsView.setOptimizationFlags": ('PySide2.libpyside.OptimizationFlags',), + "QGraphicsView.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QGraphicsView.setRenderHints": ('PySide2.libpyside.RenderHints',), + "QGraphicsView.setResizeAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setRubberBandSelectionMode": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsView.setScene": ('PySide2.QtWidgets.QGraphicsScene',), + "QGraphicsView.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsView.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsView.setTransformationAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setViewportUpdateMode": ('PySide2.QtWidgets.QGraphicsView.ViewportUpdateMode',), + "QGraphicsView.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QGraphicsView.shear": ('float', 'float'), + "QGraphicsView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsView.sizeHint": (), + "QGraphicsView.transform": (), + "QGraphicsView.transformationAnchor": (), + "QGraphicsView.translate": ('float', 'float'), + "QGraphicsView.updateScene": ('list',), + "QGraphicsView.updateSceneRect": ('PySide2.QtCore.QRectF',), + "QGraphicsView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsView.viewportTransform": (), + "QGraphicsView.viewportUpdateMode": (), + "QGraphicsView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QGraphicsWidget: + "QGraphicsWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.libpyside.WindowFlags'), + "QGraphicsWidget.actions": (), + "QGraphicsWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.addActions": ('list',), + "QGraphicsWidget.adjustSize": (), + "QGraphicsWidget.autoFillBackground": (), + "QGraphicsWidget.boundingRect": (), + "QGraphicsWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.close": (), + "QGraphicsWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QGraphicsWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusNextPrevChild": ('bool',), + "QGraphicsWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusPolicy": (), + "QGraphicsWidget.focusWidget": (), + "QGraphicsWidget.font": (), + "QGraphicsWidget.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.getWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.grabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QGraphicsWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QGraphicsWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QGraphicsWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QGraphicsWidget.isActiveWindow": (), + "QGraphicsWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsWidget.layout": (), + "QGraphicsWidget.layoutDirection": (), + "QGraphicsWidget.moveEvent": ('PySide2.QtWidgets.QGraphicsSceneMoveEvent',), + "QGraphicsWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.paintWindowFrame": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.palette": (), + "QGraphicsWidget.polishEvent": (), + "QGraphicsWidget.propertyChange": ('str', 'Any'), + "QGraphicsWidget.rect": (), + "QGraphicsWidget.releaseShortcut": ('int',), + "QGraphicsWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.resize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsWidget.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QGraphicsWidget.setAutoFillBackground": ('bool',), + "QGraphicsWidget.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QGraphicsWidget.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsWidget.setGeometry": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsWidget.setLayout": ('PySide2.QtWidgets.QGraphicsLayout',), + "QGraphicsWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGraphicsWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QGraphicsWidget.setShortcutEnabled": ('int', 'bool'), + "QGraphicsWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsWidget.setTabOrder": ('PySide2.QtWidgets.QGraphicsWidget', 'PySide2.QtWidgets.QGraphicsWidget'), + "QGraphicsWidget.setWindowFlags": ('PySide2.libpyside.WindowFlags',), + "QGraphicsWidget.setWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setWindowTitle": ('str',), + "QGraphicsWidget.shape": (), + "QGraphicsWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsWidget.size": (), + "QGraphicsWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsWidget.style": (), + "QGraphicsWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QGraphicsWidget.type": (), + "QGraphicsWidget.ungrabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.unsetLayoutDirection": (), + "QGraphicsWidget.unsetWindowFrameMargins": (), + "QGraphicsWidget.updateGeometry": (), + "QGraphicsWidget.windowFlags": (), + "QGraphicsWidget.windowFrameEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.windowFrameGeometry": (), + "QGraphicsWidget.windowFrameRect": (), + "QGraphicsWidget.windowFrameSectionAt": ('PySide2.QtCore.QPointF',), + "QGraphicsWidget.windowTitle": (), + "QGraphicsWidget.windowType": (), + + # class PySide2.QtWidgets.QGridLayout: + "QGridLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QGridLayout.addItem": [('PySide2.QtWidgets.QLayoutItem',), ('PySide2.QtWidgets.QLayoutItem', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment')], + "QGridLayout.addLayout": [('PySide2.QtWidgets.QLayout', 'int', 'int', 'PySide2.libpyside.Alignment'), ('PySide2.QtWidgets.QLayout', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment')], + "QGridLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'PySide2.libpyside.Alignment'), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment')], + "QGridLayout.cellRect": ('int', 'int'), + "QGridLayout.columnCount": (), + "QGridLayout.columnMinimumWidth": ('int',), + "QGridLayout.columnStretch": ('int',), + "QGridLayout.count": (), + "QGridLayout.expandingDirections": (), + "QGridLayout.getItemPosition": ('int', 'int', 'int', 'int', 'int'), + "QGridLayout.hasHeightForWidth": (), + "QGridLayout.heightForWidth": ('int',), + "QGridLayout.horizontalSpacing": (), + "QGridLayout.invalidate": (), + "QGridLayout.itemAt": ('int',), + "QGridLayout.itemAtPosition": ('int', 'int'), + "QGridLayout.maximumSize": (), + "QGridLayout.minimumHeightForWidth": ('int',), + "QGridLayout.minimumSize": (), + "QGridLayout.originCorner": (), + "QGridLayout.rowCount": (), + "QGridLayout.rowMinimumHeight": ('int',), + "QGridLayout.rowStretch": ('int',), + "QGridLayout.setColumnMinimumWidth": ('int', 'int'), + "QGridLayout.setColumnStretch": ('int', 'int'), + "QGridLayout.setDefaultPositioning": ('int', 'PySide2.QtCore.Qt.Orientation'), + "QGridLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QGridLayout.setHorizontalSpacing": ('int',), + "QGridLayout.setOriginCorner": ('PySide2.QtCore.Qt.Corner',), + "QGridLayout.setRowMinimumHeight": ('int', 'int'), + "QGridLayout.setRowStretch": ('int', 'int'), + "QGridLayout.setSpacing": ('int',), + "QGridLayout.setVerticalSpacing": ('int',), + "QGridLayout.sizeHint": (), + "QGridLayout.spacing": (), + "QGridLayout.takeAt": ('int',), + "QGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGroupBox: + "QGroupBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QGroupBox.alignment": (), + "QGroupBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QGroupBox.childEvent": ('PySide2.QtCore.QChildEvent',), + "QGroupBox.event": ('PySide2.QtCore.QEvent',), + "QGroupBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGroupBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionGroupBox',), + "QGroupBox.isCheckable": (), + "QGroupBox.isChecked": (), + "QGroupBox.isFlat": (), + "QGroupBox.minimumSizeHint": (), + "QGroupBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGroupBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGroupBox.setAlignment": ('int',), + "QGroupBox.setCheckable": ('bool',), + "QGroupBox.setChecked": ('bool',), + "QGroupBox.setFlat": ('bool',), + "QGroupBox.setTitle": ('str',), + "QGroupBox.title": (), + + # class PySide2.QtWidgets.QHBoxLayout: + "QHBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QHeaderView: + "QHeaderView.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), + "QHeaderView.cascadingSectionResizes": (), + "QHeaderView.count": (), + "QHeaderView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QHeaderView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QHeaderView.defaultAlignment": (), + "QHeaderView.defaultSectionSize": (), + "QHeaderView.doItemsLayout": (), + "QHeaderView.event": ('PySide2.QtCore.QEvent',), + "QHeaderView.headerDataChanged": ('PySide2.QtCore.Qt.Orientation', 'int', 'int'), + "QHeaderView.hiddenSectionCount": (), + "QHeaderView.hideSection": ('int',), + "QHeaderView.highlightSections": (), + "QHeaderView.horizontalOffset": (), + "QHeaderView.indexAt": ('PySide2.QtCore.QPoint',), + "QHeaderView.initStyleOption": [('PySide2.QtWidgets.QStyleOptionFrame',), ('PySide2.QtWidgets.QStyleOptionHeader',)], + "QHeaderView.initialize": (), + "QHeaderView.initializeSections": [(), ('int', 'int')], + "QHeaderView.isFirstSectionMovable": (), + "QHeaderView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.isSectionHidden": ('int',), + "QHeaderView.isSortIndicatorShown": (), + "QHeaderView.length": (), + "QHeaderView.logicalIndex": ('int',), + "QHeaderView.logicalIndexAt": [('PySide2.QtCore.QPoint',), ('int',), ('int', 'int')], + "QHeaderView.maximumSectionSize": (), + "QHeaderView.minimumSectionSize": (), + "QHeaderView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QHeaderView.moveSection": ('int', 'int'), + "QHeaderView.offset": (), + "QHeaderView.orientation": (), + "QHeaderView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QHeaderView.paintSection": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int'), + "QHeaderView.reset": (), + "QHeaderView.resetDefaultSectionSize": (), + "QHeaderView.resizeContentsPrecision": (), + "QHeaderView.resizeSection": ('int', 'int'), + "QHeaderView.resizeSections": [(), ('PySide2.QtWidgets.QHeaderView.ResizeMode',)], + "QHeaderView.restoreState": ('PySide2.QtCore.QByteArray',), + "QHeaderView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.saveState": (), + "QHeaderView.scrollContentsBy": ('int', 'int'), + "QHeaderView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QHeaderView.sectionPosition": ('int',), + "QHeaderView.sectionResizeMode": ('int',), + "QHeaderView.sectionSize": ('int',), + "QHeaderView.sectionSizeFromContents": ('int',), + "QHeaderView.sectionSizeHint": ('int',), + "QHeaderView.sectionViewportPosition": ('int',), + "QHeaderView.sectionsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsClickable": (), + "QHeaderView.sectionsHidden": (), + "QHeaderView.sectionsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsMovable": (), + "QHeaderView.sectionsMoved": (), + "QHeaderView.setCascadingSectionResizes": ('bool',), + "QHeaderView.setDefaultAlignment": ('PySide2.libpyside.Alignment',), + "QHeaderView.setDefaultSectionSize": ('int',), + "QHeaderView.setFirstSectionMovable": ('bool',), + "QHeaderView.setHighlightSections": ('bool',), + "QHeaderView.setMaximumSectionSize": ('int',), + "QHeaderView.setMinimumSectionSize": ('int',), + "QHeaderView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QHeaderView.setOffset": ('int',), + "QHeaderView.setOffsetToLastSection": (), + "QHeaderView.setOffsetToSectionPosition": ('int',), + "QHeaderView.setResizeContentsPrecision": ('int',), + "QHeaderView.setSectionHidden": ('int', 'bool'), + "QHeaderView.setSectionResizeMode": [('PySide2.QtWidgets.QHeaderView.ResizeMode',), ('int', 'PySide2.QtWidgets.QHeaderView.ResizeMode')], + "QHeaderView.setSectionsClickable": ('bool',), + "QHeaderView.setSectionsMovable": ('bool',), + "QHeaderView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QHeaderView.setSortIndicator": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QHeaderView.setSortIndicatorShown": ('bool',), + "QHeaderView.setStretchLastSection": ('bool',), + "QHeaderView.setVisible": ('bool',), + "QHeaderView.showSection": ('int',), + "QHeaderView.sizeHint": (), + "QHeaderView.sortIndicatorOrder": (), + "QHeaderView.sortIndicatorSection": (), + "QHeaderView.stretchLastSection": (), + "QHeaderView.stretchSectionCount": (), + "QHeaderView.swapSections": ('int', 'int'), + "QHeaderView.updateGeometries": (), + "QHeaderView.updateSection": ('int',), + "QHeaderView.verticalOffset": (), + "QHeaderView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QHeaderView.visualIndex": ('int',), + "QHeaderView.visualIndexAt": ('int',), + "QHeaderView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QInputDialog: + "QInputDialog.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QInputDialog.cancelButtonText": (), + "QInputDialog.comboBoxItems": (), + "QInputDialog.done": ('int',), + "QInputDialog.doubleDecimals": (), + "QInputDialog.doubleMaximum": (), + "QInputDialog.doubleMinimum": (), + "QInputDialog.doubleStep": (), + "QInputDialog.doubleValue": (), + "QInputDialog.getDouble": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'float', 'float', 'float', 'int', 'bool', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'float', 'float', 'float', 'int', 'bool', 'PySide2.libpyside.WindowFlags', 'float')], + "QInputDialog.getInt": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'int', 'int', 'int', 'int', 'bool', 'PySide2.libpyside.WindowFlags'), + "QInputDialog.getItem": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'List[str]', 'int', 'bool', 'bool', 'PySide2.libpyside.WindowFlags', 'PySide2.libpyside.InputMethodHints'), + "QInputDialog.getMultiLineText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'bool', 'PySide2.libpyside.WindowFlags', 'PySide2.libpyside.InputMethodHints'), + "QInputDialog.getText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QLineEdit.EchoMode', 'str', 'bool', 'PySide2.libpyside.WindowFlags', 'PySide2.libpyside.InputMethodHints'), + "QInputDialog.inputMode": (), + "QInputDialog.intMaximum": (), + "QInputDialog.intMinimum": (), + "QInputDialog.intStep": (), + "QInputDialog.intValue": (), + "QInputDialog.isComboBoxEditable": (), + "QInputDialog.labelText": (), + "QInputDialog.minimumSizeHint": (), + "QInputDialog.okButtonText": (), + "QInputDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QInputDialog.setCancelButtonText": ('str',), + "QInputDialog.setComboBoxEditable": ('bool',), + "QInputDialog.setComboBoxItems": ('List[str]',), + "QInputDialog.setDoubleDecimals": ('int',), + "QInputDialog.setDoubleMaximum": ('float',), + "QInputDialog.setDoubleMinimum": ('float',), + "QInputDialog.setDoubleRange": ('float', 'float'), + "QInputDialog.setDoubleStep": ('float',), + "QInputDialog.setDoubleValue": ('float',), + "QInputDialog.setInputMode": ('PySide2.QtWidgets.QInputDialog.InputMode',), + "QInputDialog.setIntMaximum": ('int',), + "QInputDialog.setIntMinimum": ('int',), + "QInputDialog.setIntRange": ('int', 'int'), + "QInputDialog.setIntStep": ('int',), + "QInputDialog.setIntValue": ('int',), + "QInputDialog.setLabelText": ('str',), + "QInputDialog.setOkButtonText": ('str',), + "QInputDialog.setOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption', 'bool'), + "QInputDialog.setTextEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QInputDialog.setTextValue": ('str',), + "QInputDialog.setVisible": ('bool',), + "QInputDialog.sizeHint": (), + "QInputDialog.testOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption',), + "QInputDialog.textEchoMode": (), + "QInputDialog.textValue": (), + + # class PySide2.QtWidgets.QItemDelegate: + "QItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.decoration": ('PySide2.QtWidgets.QStyleOptionViewItem', 'Any'), + "QItemDelegate.doCheck": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'Any'), + "QItemDelegate.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.drawCheck": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.CheckState'), + "QItemDelegate.drawDecoration": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), + "QItemDelegate.drawDisplay": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'str'), + "QItemDelegate.drawFocus": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect'), + "QItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QItemDelegate.hasClipping": (), + "QItemDelegate.itemEditorFactory": (), + "QItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.rect": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex', 'int'), + "QItemDelegate.setClipping": ('bool',), + "QItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setOptions": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QStyleOptionViewItem'), + "QItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.textRectangle": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QFont', 'str'), + "QItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QItemEditorCreatorBase: + "QItemEditorCreatorBase.__init__": (), + "QItemEditorCreatorBase.createWidget": ('PySide2.QtWidgets.QWidget',), + "QItemEditorCreatorBase.valuePropertyName": (), + + # class PySide2.QtWidgets.QItemEditorFactory: + "QItemEditorFactory.__init__": (), + "QItemEditorFactory.createEditor": ('int', 'PySide2.QtWidgets.QWidget'), + "QItemEditorFactory.defaultFactory": (), + "QItemEditorFactory.registerEditor": ('int', 'PySide2.QtWidgets.QItemEditorCreatorBase'), + "QItemEditorFactory.setDefaultFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemEditorFactory.valuePropertyName": ('int',), + + # class PySide2.QtWidgets.QKeyEventTransition: + "QKeyEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'int', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QKeyEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.key": (), + "QKeyEventTransition.modifierMask": (), + "QKeyEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.setKey": ('int',), + "QKeyEventTransition.setModifierMask": ('PySide2.libpyside.KeyboardModifiers',), + + # class PySide2.QtWidgets.QKeySequenceEdit: + "QKeySequenceEdit.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QKeySequenceEdit.clear": (), + "QKeySequenceEdit.event": ('PySide2.QtCore.QEvent',), + "QKeySequenceEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keySequence": (), + "QKeySequenceEdit.setKeySequence": ('PySide2.QtGui.QKeySequence',), + "QKeySequenceEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QLCDNumber: + "QLCDNumber.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'PySide2.QtWidgets.QWidget')], + "QLCDNumber.checkOverflow": [('float',), ('int',)], + "QLCDNumber.digitCount": (), + "QLCDNumber.display": [('float',), ('int',), ('str',)], + "QLCDNumber.event": ('PySide2.QtCore.QEvent',), + "QLCDNumber.intValue": (), + "QLCDNumber.mode": (), + "QLCDNumber.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLCDNumber.segmentStyle": (), + "QLCDNumber.setBinMode": (), + "QLCDNumber.setDecMode": (), + "QLCDNumber.setDigitCount": ('int',), + "QLCDNumber.setHexMode": (), + "QLCDNumber.setMode": ('PySide2.QtWidgets.QLCDNumber.Mode',), + "QLCDNumber.setOctMode": (), + "QLCDNumber.setSegmentStyle": ('PySide2.QtWidgets.QLCDNumber.SegmentStyle',), + "QLCDNumber.setSmallDecimalPoint": ('bool',), + "QLCDNumber.sizeHint": (), + "QLCDNumber.smallDecimalPoint": (), + "QLCDNumber.value": (), + + # class PySide2.QtWidgets.QLabel: + "QLabel.__init__": [('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QLabel.alignment": (), + "QLabel.buddy": (), + "QLabel.changeEvent": ('PySide2.QtCore.QEvent',), + "QLabel.clear": (), + "QLabel.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLabel.event": ('PySide2.QtCore.QEvent',), + "QLabel.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.focusNextPrevChild": ('bool',), + "QLabel.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.hasScaledContents": (), + "QLabel.hasSelectedText": (), + "QLabel.heightForWidth": ('int',), + "QLabel.indent": (), + "QLabel.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLabel.margin": (), + "QLabel.minimumSizeHint": (), + "QLabel.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.movie": (), + "QLabel.openExternalLinks": (), + "QLabel.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLabel.picture": (), + "QLabel.pixmap": (), + "QLabel.selectedText": (), + "QLabel.selectionStart": (), + "QLabel.setAlignment": ('PySide2.libpyside.Alignment',), + "QLabel.setBuddy": ('PySide2.QtWidgets.QWidget',), + "QLabel.setIndent": ('int',), + "QLabel.setMargin": ('int',), + "QLabel.setMovie": ('PySide2.QtGui.QMovie',), + "QLabel.setNum": [('float',), ('int',)], + "QLabel.setOpenExternalLinks": ('bool',), + "QLabel.setPicture": ('PySide2.QtGui.QPicture',), + "QLabel.setPixmap": ('PySide2.QtGui.QPixmap',), + "QLabel.setScaledContents": ('bool',), + "QLabel.setSelection": ('int', 'int'), + "QLabel.setText": ('str',), + "QLabel.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QLabel.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QLabel.setWordWrap": ('bool',), + "QLabel.sizeHint": (), + "QLabel.text": (), + "QLabel.textFormat": (), + "QLabel.textInteractionFlags": (), + "QLabel.wordWrap": (), + + # class PySide2.QtWidgets.QLayout: + "QLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QLayout.activate": (), + "QLayout.addChildLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.addChildWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.adoptLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.alignmentRect": ('PySide2.QtCore.QRect',), + "QLayout.childEvent": ('PySide2.QtCore.QChildEvent',), + "QLayout.closestAcceptableSize": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QSize'), + "QLayout.contentsMargins": (), + "QLayout.contentsRect": (), + "QLayout.controlTypes": (), + "QLayout.count": (), + "QLayout.expandingDirections": (), + "QLayout.geometry": (), + "QLayout.getContentsMargins": ('int', 'int', 'int', 'int'), + "QLayout.indexOf": ('PySide2.QtWidgets.QWidget',), + "QLayout.invalidate": (), + "QLayout.isEmpty": (), + "QLayout.isEnabled": (), + "QLayout.itemAt": ('int',), + "QLayout.layout": (), + "QLayout.margin": (), + "QLayout.maximumSize": (), + "QLayout.menuBar": (), + "QLayout.minimumSize": (), + "QLayout.parentWidget": (), + "QLayout.removeItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.replaceWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.FindChildOptions'), + "QLayout.setAlignment": [('PySide2.QtWidgets.QLayout', 'PySide2.libpyside.Alignment'), ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.Alignment'), ('PySide2.libpyside.Alignment',)], + "QLayout.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLayout.setEnabled": ('bool',), + "QLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QLayout.setMargin": ('int',), + "QLayout.setMenuBar": ('PySide2.QtWidgets.QWidget',), + "QLayout.setSizeConstraint": ('PySide2.QtWidgets.QLayout.SizeConstraint',), + "QLayout.setSpacing": ('int',), + "QLayout.sizeConstraint": (), + "QLayout.spacing": (), + "QLayout.takeAt": ('int',), + "QLayout.totalHeightForWidth": ('int',), + "QLayout.totalMaximumSize": (), + "QLayout.totalMinimumSize": (), + "QLayout.totalSizeHint": (), + "QLayout.update": (), + "QLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QLayoutItem: + "QLayoutItem.__init__": ('PySide2.libpyside.Alignment',), + "QLayoutItem.alignment": (), + "QLayoutItem.controlTypes": (), + "QLayoutItem.expandingDirections": (), + "QLayoutItem.geometry": (), + "QLayoutItem.hasHeightForWidth": (), + "QLayoutItem.heightForWidth": ('int',), + "QLayoutItem.invalidate": (), + "QLayoutItem.isEmpty": (), + "QLayoutItem.layout": (), + "QLayoutItem.maximumSize": (), + "QLayoutItem.minimumHeightForWidth": ('int',), + "QLayoutItem.minimumSize": (), + "QLayoutItem.setAlignment": ('PySide2.libpyside.Alignment',), + "QLayoutItem.setGeometry": ('PySide2.QtCore.QRect',), + "QLayoutItem.sizeHint": (), + "QLayoutItem.spacerItem": (), + "QLayoutItem.widget": (), + + # class PySide2.QtWidgets.QLineEdit: + "QLineEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QLineEdit.addAction": [('PySide2.QtGui.QIcon', 'PySide2.QtWidgets.QLineEdit.ActionPosition'), ('PySide2.QtWidgets.QAction',), ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QLineEdit.ActionPosition')], + "QLineEdit.alignment": (), + "QLineEdit.backspace": (), + "QLineEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QLineEdit.clear": (), + "QLineEdit.completer": (), + "QLineEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLineEdit.copy": (), + "QLineEdit.createStandardContextMenu": (), + "QLineEdit.cursorBackward": ('bool', 'int'), + "QLineEdit.cursorForward": ('bool', 'int'), + "QLineEdit.cursorMoveStyle": (), + "QLineEdit.cursorPosition": (), + "QLineEdit.cursorPositionAt": ('PySide2.QtCore.QPoint',), + "QLineEdit.cursorRect": (), + "QLineEdit.cursorWordBackward": ('bool',), + "QLineEdit.cursorWordForward": ('bool',), + "QLineEdit.cut": (), + "QLineEdit.del_": (), + "QLineEdit.deselect": (), + "QLineEdit.displayText": (), + "QLineEdit.dragEnabled": (), + "QLineEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QLineEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QLineEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QLineEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QLineEdit.echoMode": (), + "QLineEdit.end": ('bool',), + "QLineEdit.event": ('PySide2.QtCore.QEvent',), + "QLineEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.getTextMargins": ('int', 'int', 'int', 'int'), + "QLineEdit.hasAcceptableInput": (), + "QLineEdit.hasFrame": (), + "QLineEdit.hasSelectedText": (), + "QLineEdit.home": ('bool',), + "QLineEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QLineEdit.inputMask": (), + "QLineEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QLineEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QLineEdit.insert": ('str',), + "QLineEdit.isClearButtonEnabled": (), + "QLineEdit.isModified": (), + "QLineEdit.isReadOnly": (), + "QLineEdit.isRedoAvailable": (), + "QLineEdit.isUndoAvailable": (), + "QLineEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLineEdit.maxLength": (), + "QLineEdit.minimumSizeHint": (), + "QLineEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLineEdit.paste": (), + "QLineEdit.placeholderText": (), + "QLineEdit.redo": (), + "QLineEdit.selectAll": (), + "QLineEdit.selectedText": (), + "QLineEdit.selectionEnd": (), + "QLineEdit.selectionLength": (), + "QLineEdit.selectionStart": (), + "QLineEdit.setAlignment": ('PySide2.libpyside.Alignment',), + "QLineEdit.setClearButtonEnabled": ('bool',), + "QLineEdit.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QLineEdit.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QLineEdit.setCursorPosition": ('int',), + "QLineEdit.setDragEnabled": ('bool',), + "QLineEdit.setEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QLineEdit.setFrame": ('bool',), + "QLineEdit.setInputMask": ('str',), + "QLineEdit.setMaxLength": ('int',), + "QLineEdit.setModified": ('bool',), + "QLineEdit.setPlaceholderText": ('str',), + "QLineEdit.setReadOnly": ('bool',), + "QLineEdit.setSelection": ('int', 'int'), + "QLineEdit.setText": ('str',), + "QLineEdit.setTextMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLineEdit.setValidator": ('PySide2.QtGui.QValidator',), + "QLineEdit.sizeHint": (), + "QLineEdit.text": (), + "QLineEdit.textMargins": (), + "QLineEdit.undo": (), + "QLineEdit.validator": (), + + # class PySide2.QtWidgets.QListView: + "QListView.__init__": ('PySide2.QtWidgets.QWidget',), + "QListView.batchSize": (), + "QListView.clearPropertyFlags": (), + "QListView.contentsSize": (), + "QListView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QListView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QListView.doItemsLayout": (), + "QListView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QListView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QListView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListView.event": ('PySide2.QtCore.QEvent',), + "QListView.flow": (), + "QListView.gridSize": (), + "QListView.horizontalOffset": (), + "QListView.indexAt": ('PySide2.QtCore.QPoint',), + "QListView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QListView.isRowHidden": ('int',), + "QListView.isSelectionRectVisible": (), + "QListView.isWrapping": (), + "QListView.layoutMode": (), + "QListView.modelColumn": (), + "QListView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QListView.movement": (), + "QListView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QListView.rectForIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.reset": (), + "QListView.resizeContents": ('int', 'int'), + "QListView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QListView.resizeMode": (), + "QListView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.scrollContentsBy": ('int', 'int'), + "QListView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListView.selectedIndexes": (), + "QListView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QListView.setBatchSize": ('int',), + "QListView.setFlow": ('PySide2.QtWidgets.QListView.Flow',), + "QListView.setGridSize": ('PySide2.QtCore.QSize',), + "QListView.setLayoutMode": ('PySide2.QtWidgets.QListView.LayoutMode',), + "QListView.setModelColumn": ('int',), + "QListView.setMovement": ('PySide2.QtWidgets.QListView.Movement',), + "QListView.setPositionForIndex": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QModelIndex'), + "QListView.setResizeMode": ('PySide2.QtWidgets.QListView.ResizeMode',), + "QListView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.setRowHidden": ('int', 'bool'), + "QListView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QListView.setSelectionRectVisible": ('bool',), + "QListView.setSpacing": ('int',), + "QListView.setUniformItemSizes": ('bool',), + "QListView.setViewMode": ('PySide2.QtWidgets.QListView.ViewMode',), + "QListView.setWordWrap": ('bool',), + "QListView.setWrapping": ('bool',), + "QListView.spacing": (), + "QListView.startDrag": ('PySide2.libpyside.DropActions',), + "QListView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QListView.uniformItemSizes": (), + "QListView.updateGeometries": (), + "QListView.verticalOffset": (), + "QListView.viewMode": (), + "QListView.viewOptions": (), + "QListView.viewportSizeHint": (), + "QListView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QListView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QListView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QListView.wordWrap": (), + + # class PySide2.QtWidgets.QListWidget: + "QListWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QListWidget.addItem": [('PySide2.QtWidgets.QListWidgetItem',), ('str',)], + "QListWidget.addItems": ('List[str]',), + "QListWidget.clear": (), + "QListWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.count": (), + "QListWidget.currentItem": (), + "QListWidget.currentRow": (), + "QListWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListWidget.dropMimeData": ('int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QListWidget.editItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.event": ('PySide2.QtCore.QEvent',), + "QListWidget.findItems": ('str', 'PySide2.libpyside.MatchFlags'), + "QListWidget.indexFromItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.insertItem": [('int', 'PySide2.QtWidgets.QListWidgetItem'), ('int', 'str')], + "QListWidget.insertItems": ('int', 'List[str]'), + "QListWidget.isItemHidden": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isItemSelected": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isPersistentEditorOpen": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.isSortingEnabled": (), + "QListWidget.item": ('int',), + "QListWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QListWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QListWidget.itemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.items": ('PySide2.QtCore.QMimeData',), + "QListWidget.mimeData": ('list',), + "QListWidget.mimeTypes": (), + "QListWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.removeItemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.row": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.scrollToItem": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListWidget.selectedItems": (), + "QListWidget.setCurrentItem": [('PySide2.QtWidgets.QListWidgetItem',), ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.libpyside.SelectionFlags')], + "QListWidget.setCurrentRow": [('int',), ('int', 'PySide2.libpyside.SelectionFlags')], + "QListWidget.setItemHidden": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemSelected": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemWidget": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QWidget'), + "QListWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QListWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QListWidget.setSortingEnabled": ('bool',), + "QListWidget.sortItems": ('PySide2.QtCore.Qt.SortOrder',), + "QListWidget.supportedDropActions": (), + "QListWidget.takeItem": ('int',), + "QListWidget.visualItemRect": ('PySide2.QtWidgets.QListWidgetItem',), + + # class PySide2.QtWidgets.QListWidgetItem: + "QListWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidgetItem',), ('str', 'PySide2.QtWidgets.QListWidget', 'int')], + "QListWidgetItem.background": (), + "QListWidgetItem.backgroundColor": (), + "QListWidgetItem.checkState": (), + "QListWidgetItem.clone": (), + "QListWidgetItem.data": ('int',), + "QListWidgetItem.flags": (), + "QListWidgetItem.font": (), + "QListWidgetItem.foreground": (), + "QListWidgetItem.icon": (), + "QListWidgetItem.isHidden": (), + "QListWidgetItem.isSelected": (), + "QListWidgetItem.listWidget": (), + "QListWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QListWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QListWidgetItem.setData": ('int', 'Any'), + "QListWidgetItem.setFlags": ('PySide2.libpyside.ItemFlags',), + "QListWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QListWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setHidden": ('bool',), + "QListWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QListWidgetItem.setSelected": ('bool',), + "QListWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QListWidgetItem.setStatusTip": ('str',), + "QListWidgetItem.setText": ('str',), + "QListWidgetItem.setTextAlignment": ('int',), + "QListWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setToolTip": ('str',), + "QListWidgetItem.setWhatsThis": ('str',), + "QListWidgetItem.sizeHint": (), + "QListWidgetItem.statusTip": (), + "QListWidgetItem.text": (), + "QListWidgetItem.textAlignment": (), + "QListWidgetItem.textColor": (), + "QListWidgetItem.toolTip": (), + "QListWidgetItem.type": (), + "QListWidgetItem.whatsThis": (), + "QListWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QMainWindow: + "QMainWindow.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QMainWindow.addDockWidget": [('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget'), ('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation')], + "QMainWindow.addToolBar": [('PySide2.QtCore.Qt.ToolBarArea', 'PySide2.QtWidgets.QToolBar'), ('PySide2.QtWidgets.QToolBar',), ('str',)], + "QMainWindow.addToolBarBreak": ('PySide2.QtCore.Qt.ToolBarArea',), + "QMainWindow.centralWidget": (), + "QMainWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMainWindow.corner": ('PySide2.QtCore.Qt.Corner',), + "QMainWindow.createPopupMenu": (), + "QMainWindow.dockOptions": (), + "QMainWindow.dockWidgetArea": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.documentMode": (), + "QMainWindow.event": ('PySide2.QtCore.QEvent',), + "QMainWindow.iconSize": (), + "QMainWindow.insertToolBar": ('PySide2.QtWidgets.QToolBar', 'PySide2.QtWidgets.QToolBar'), + "QMainWindow.insertToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.isAnimated": (), + "QMainWindow.isDockNestingEnabled": (), + "QMainWindow.isSeparator": ('PySide2.QtCore.QPoint',), + "QMainWindow.menuBar": (), + "QMainWindow.menuWidget": (), + "QMainWindow.removeDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.removeToolBar": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.removeToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.resizeDocks": ('list', 'list', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.restoreDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.restoreState": ('PySide2.QtCore.QByteArray', 'int'), + "QMainWindow.saveState": ('int',), + "QMainWindow.setAnimated": ('bool',), + "QMainWindow.setCentralWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setCorner": ('PySide2.QtCore.Qt.Corner', 'PySide2.QtCore.Qt.DockWidgetArea'), + "QMainWindow.setDockNestingEnabled": ('bool',), + "QMainWindow.setDockOptions": ('PySide2.libpyside.DockOptions',), + "QMainWindow.setDocumentMode": ('bool',), + "QMainWindow.setIconSize": ('PySide2.QtCore.QSize',), + "QMainWindow.setMenuBar": ('PySide2.QtWidgets.QMenuBar',), + "QMainWindow.setMenuWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setStatusBar": ('PySide2.QtWidgets.QStatusBar',), + "QMainWindow.setTabPosition": ('PySide2.libpyside.DockWidgetAreas', 'PySide2.QtWidgets.QTabWidget.TabPosition'), + "QMainWindow.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMainWindow.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QMainWindow.setUnifiedTitleAndToolBarOnMac": ('bool',), + "QMainWindow.splitDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.statusBar": (), + "QMainWindow.tabPosition": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QMainWindow.tabShape": (), + "QMainWindow.tabifiedDockWidgets": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.tabifyDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget'), + "QMainWindow.takeCentralWidget": (), + "QMainWindow.toolBarArea": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolButtonStyle": (), + "QMainWindow.unifiedTitleAndToolBarOnMac": (), + + # class PySide2.QtWidgets.QMdiArea: + "QMdiArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.activateNextSubWindow": (), + "QMdiArea.activatePreviousSubWindow": (), + "QMdiArea.activationOrder": (), + "QMdiArea.activeSubWindow": (), + "QMdiArea.addSubWindow": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QMdiArea.background": (), + "QMdiArea.cascadeSubWindows": (), + "QMdiArea.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiArea.closeActiveSubWindow": (), + "QMdiArea.closeAllSubWindows": (), + "QMdiArea.currentSubWindow": (), + "QMdiArea.documentMode": (), + "QMdiArea.event": ('PySide2.QtCore.QEvent',), + "QMdiArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiArea.minimumSizeHint": (), + "QMdiArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiArea.removeSubWindow": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiArea.scrollContentsBy": ('int', 'int'), + "QMdiArea.setActivationOrder": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.setActiveSubWindow": ('PySide2.QtWidgets.QMdiSubWindow',), + "QMdiArea.setBackground": ('PySide2.QtGui.QBrush',), + "QMdiArea.setDocumentMode": ('bool',), + "QMdiArea.setOption": ('PySide2.QtWidgets.QMdiArea.AreaOption', 'bool'), + "QMdiArea.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QMdiArea.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMdiArea.setTabsClosable": ('bool',), + "QMdiArea.setTabsMovable": ('bool',), + "QMdiArea.setViewMode": ('PySide2.QtWidgets.QMdiArea.ViewMode',), + "QMdiArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiArea.sizeHint": (), + "QMdiArea.subWindowList": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.tabPosition": (), + "QMdiArea.tabShape": (), + "QMdiArea.tabsClosable": (), + "QMdiArea.tabsMovable": (), + "QMdiArea.testOption": ('PySide2.QtWidgets.QMdiArea.AreaOption',), + "QMdiArea.tileSubWindows": (), + "QMdiArea.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiArea.viewMode": (), + "QMdiArea.viewportEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QMdiSubWindow: + "QMdiSubWindow.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QMdiSubWindow.changeEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiSubWindow.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMdiSubWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMdiSubWindow.event": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiSubWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMdiSubWindow.isShaded": (), + "QMdiSubWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMdiSubWindow.keyboardPageStep": (), + "QMdiSubWindow.keyboardSingleStep": (), + "QMdiSubWindow.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.maximizedButtonsWidget": (), + "QMdiSubWindow.maximizedSystemMenuIconWidget": (), + "QMdiSubWindow.mdiArea": (), + "QMdiSubWindow.minimumSizeHint": (), + "QMdiSubWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QMdiSubWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiSubWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiSubWindow.setKeyboardPageStep": ('int',), + "QMdiSubWindow.setKeyboardSingleStep": ('int',), + "QMdiSubWindow.setOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption', 'bool'), + "QMdiSubWindow.setSystemMenu": ('PySide2.QtWidgets.QMenu',), + "QMdiSubWindow.setWidget": ('PySide2.QtWidgets.QWidget',), + "QMdiSubWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiSubWindow.showShaded": (), + "QMdiSubWindow.showSystemMenu": (), + "QMdiSubWindow.sizeHint": (), + "QMdiSubWindow.systemMenu": (), + "QMdiSubWindow.testOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption',), + "QMdiSubWindow.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiSubWindow.widget": (), + + # class PySide2.QtWidgets.QMenu: + "QMenu.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QMenu.actionAt": ('PySide2.QtCore.QPoint',), + "QMenu.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenu.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenu.activeAction": (), + "QMenu.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtGui.QIcon', 'str', 'object', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('str', 'object', 'PySide2.QtGui.QKeySequence')], + "QMenu.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenu.addSection": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QMenu.addSeparator": (), + "QMenu.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenu.clear": (), + "QMenu.columnCount": (), + "QMenu.defaultAction": (), + "QMenu.enterEvent": ('PySide2.QtCore.QEvent',), + "QMenu.event": ('PySide2.QtCore.QEvent',), + "QMenu.exec_": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), ('list', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget')], + "QMenu.focusNextPrevChild": ('bool',), + "QMenu.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMenu.hideTearOffMenu": (), + "QMenu.icon": (), + "QMenu.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenu.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenu.insertSection": [('PySide2.QtWidgets.QAction', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction', 'str')], + "QMenu.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenu.isEmpty": (), + "QMenu.isTearOffEnabled": (), + "QMenu.isTearOffMenuVisible": (), + "QMenu.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenu.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenu.menuAction": (), + "QMenu.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenu.popup": ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), + "QMenu.separatorsCollapsible": (), + "QMenu.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setAsDockMenu": (), + "QMenu.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setIcon": ('PySide2.QtGui.QIcon',), + "QMenu.setSeparatorsCollapsible": ('bool',), + "QMenu.setTearOffEnabled": ('bool',), + "QMenu.setTitle": ('str',), + "QMenu.setToolTipsVisible": ('bool',), + "QMenu.showTearOffMenu": [(), ('PySide2.QtCore.QPoint',)], + "QMenu.sizeHint": (), + "QMenu.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMenu.title": (), + "QMenu.toolTipsVisible": (), + "QMenu.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QMenuBar: + "QMenuBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QMenuBar.actionAt": ('PySide2.QtCore.QPoint',), + "QMenuBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenuBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenuBar.activeAction": (), + "QMenuBar.addAction": [('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str'), ('str', 'object')], + "QMenuBar.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenuBar.addSeparator": (), + "QMenuBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.clear": (), + "QMenuBar.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QMenuBar.event": ('PySide2.QtCore.QEvent',), + "QMenuBar.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMenuBar.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.heightForWidth": ('int',), + "QMenuBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenuBar.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenuBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenuBar.isDefaultUp": (), + "QMenuBar.isNativeMenuBar": (), + "QMenuBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenuBar.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.minimumSizeHint": (), + "QMenuBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenuBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMenuBar.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenuBar.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QMenuBar.setDefaultUp": ('bool',), + "QMenuBar.setNativeMenuBar": ('bool',), + "QMenuBar.setVisible": ('bool',), + "QMenuBar.sizeHint": (), + "QMenuBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QMessageBox: + "QMessageBox.__init__": [('PySide2.QtWidgets.QMessageBox.Icon', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget',)], + "QMessageBox.about": ('PySide2.QtWidgets.QWidget', 'str', 'str'), + "QMessageBox.aboutQt": ('PySide2.QtWidgets.QWidget', 'str'), + "QMessageBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QMessageBox.ButtonRole'), ('PySide2.QtWidgets.QMessageBox.StandardButton',), ('str', 'PySide2.QtWidgets.QMessageBox.ButtonRole')], + "QMessageBox.button": ('PySide2.QtWidgets.QMessageBox.StandardButton',), + "QMessageBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.buttonText": ('int',), + "QMessageBox.buttons": (), + "QMessageBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QMessageBox.checkBox": (), + "QMessageBox.clickedButton": (), + "QMessageBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMessageBox.critical": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.defaultButton": (), + "QMessageBox.detailedText": (), + "QMessageBox.escapeButton": (), + "QMessageBox.event": ('PySide2.QtCore.QEvent',), + "QMessageBox.icon": (), + "QMessageBox.iconPixmap": (), + "QMessageBox.information": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.informativeText": (), + "QMessageBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMessageBox.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QMessageBox.question": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMessageBox.setButtonText": ('int', 'str'), + "QMessageBox.setCheckBox": ('PySide2.QtWidgets.QCheckBox',), + "QMessageBox.setDefaultButton": [('PySide2.QtWidgets.QMessageBox.StandardButton',), ('PySide2.QtWidgets.QPushButton',)], + "QMessageBox.setDetailedText": ('str',), + "QMessageBox.setEscapeButton": [('PySide2.QtWidgets.QAbstractButton',), ('PySide2.QtWidgets.QMessageBox.StandardButton',)], + "QMessageBox.setIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.setIconPixmap": ('PySide2.QtGui.QPixmap',), + "QMessageBox.setInformativeText": ('str',), + "QMessageBox.setStandardButtons": ('PySide2.libpyside.StandardButtons',), + "QMessageBox.setText": ('str',), + "QMessageBox.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QMessageBox.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QMessageBox.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QMessageBox.setWindowTitle": ('str',), + "QMessageBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMessageBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.standardButtons": (), + "QMessageBox.standardIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.text": (), + "QMessageBox.textFormat": (), + "QMessageBox.textInteractionFlags": (), + "QMessageBox.warning": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + + # class PySide2.QtWidgets.QMouseEventTransition: + "QMouseEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QMouseEventTransition.button": (), + "QMouseEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.hitTestPath": (), + "QMouseEventTransition.modifierMask": (), + "QMouseEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QMouseEventTransition.setHitTestPath": ('PySide2.QtGui.QPainterPath',), + "QMouseEventTransition.setModifierMask": ('PySide2.libpyside.KeyboardModifiers',), + + # class PySide2.QtWidgets.QOpenGLWidget: + "QOpenGLWidget.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QOpenGLWidget.context": (), + "QOpenGLWidget.defaultFramebufferObject": (), + "QOpenGLWidget.doneCurrent": (), + "QOpenGLWidget.event": ('PySide2.QtCore.QEvent',), + "QOpenGLWidget.format": (), + "QOpenGLWidget.grabFramebuffer": (), + "QOpenGLWidget.initializeGL": (), + "QOpenGLWidget.isValid": (), + "QOpenGLWidget.makeCurrent": (), + "QOpenGLWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWidget.paintEngine": (), + "QOpenGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWidget.paintGL": (), + "QOpenGLWidget.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWidget.resizeGL": ('int', 'int'), + "QOpenGLWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLWidget.setTextureFormat": ('int',), + "QOpenGLWidget.setUpdateBehavior": ('PySide2.QtWidgets.QOpenGLWidget.UpdateBehavior',), + "QOpenGLWidget.textureFormat": (), + "QOpenGLWidget.updateBehavior": (), + + # class PySide2.QtWidgets.QPanGesture: + "QPanGesture.__init__": ('PySide2.QtCore.QObject',), + "QPanGesture.acceleration": (), + "QPanGesture.delta": (), + "QPanGesture.lastOffset": (), + "QPanGesture.offset": (), + "QPanGesture.setAcceleration": ('float',), + "QPanGesture.setLastOffset": ('PySide2.QtCore.QPointF',), + "QPanGesture.setOffset": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QPinchGesture: + "QPinchGesture.__init__": ('PySide2.QtCore.QObject',), + "QPinchGesture.centerPoint": (), + "QPinchGesture.changeFlags": (), + "QPinchGesture.lastCenterPoint": (), + "QPinchGesture.lastRotationAngle": (), + "QPinchGesture.lastScaleFactor": (), + "QPinchGesture.rotationAngle": (), + "QPinchGesture.scaleFactor": (), + "QPinchGesture.setCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setChangeFlags": ('PySide2.libpyside.ChangeFlags',), + "QPinchGesture.setLastCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setLastRotationAngle": ('float',), + "QPinchGesture.setLastScaleFactor": ('float',), + "QPinchGesture.setRotationAngle": ('float',), + "QPinchGesture.setScaleFactor": ('float',), + "QPinchGesture.setStartCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setTotalChangeFlags": ('PySide2.libpyside.ChangeFlags',), + "QPinchGesture.setTotalRotationAngle": ('float',), + "QPinchGesture.setTotalScaleFactor": ('float',), + "QPinchGesture.startCenterPoint": (), + "QPinchGesture.totalChangeFlags": (), + "QPinchGesture.totalRotationAngle": (), + "QPinchGesture.totalScaleFactor": (), + + # class PySide2.QtWidgets.QPlainTextDocumentLayout: + "QPlainTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QPlainTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.cursorWidth": (), + "QPlainTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QPlainTextDocumentLayout.documentSize": (), + "QPlainTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QPlainTextDocumentLayout.ensureBlockLayout": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QPlainTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QPlainTextDocumentLayout.pageCount": (), + "QPlainTextDocumentLayout.requestUpdate": (), + "QPlainTextDocumentLayout.setCursorWidth": ('int',), + + # class PySide2.QtWidgets.QPlainTextEdit: + "QPlainTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPlainTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.appendHtml": ('str',), + "QPlainTextEdit.appendPlainText": ('str',), + "QPlainTextEdit.backgroundVisible": (), + "QPlainTextEdit.blockBoundingGeometry": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockCount": (), + "QPlainTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.canPaste": (), + "QPlainTextEdit.centerCursor": (), + "QPlainTextEdit.centerOnScroll": (), + "QPlainTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.clear": (), + "QPlainTextEdit.contentOffset": (), + "QPlainTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QPlainTextEdit.copy": (), + "QPlainTextEdit.createMimeDataFromSelection": (), + "QPlainTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QPlainTextEdit.currentCharFormat": (), + "QPlainTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QPlainTextEdit.cursorWidth": (), + "QPlainTextEdit.cut": (), + "QPlainTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.document": (), + "QPlainTextEdit.documentTitle": (), + "QPlainTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QPlainTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QPlainTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QPlainTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QPlainTextEdit.ensureCursorVisible": (), + "QPlainTextEdit.event": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.extraSelections": (), + "QPlainTextEdit.find": [('PySide2.QtCore.QRegExp', 'PySide2.libpyside.FindFlags'), ('int',), ('str', 'PySide2.libpyside.FindFlags')], + "QPlainTextEdit.firstVisibleBlock": (), + "QPlainTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.focusNextPrevChild": ('bool',), + "QPlainTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.getPaintContext": (), + "QPlainTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QPlainTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QPlainTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.insertPlainText": ('str',), + "QPlainTextEdit.isReadOnly": (), + "QPlainTextEdit.isUndoRedoEnabled": (), + "QPlainTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.lineWrapMode": (), + "QPlainTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QPlainTextEdit.maximumBlockCount": (), + "QPlainTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QPlainTextEdit.overwriteMode": (), + "QPlainTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPlainTextEdit.paste": (), + "QPlainTextEdit.placeholderText": (), + "QPlainTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QPlainTextEdit.redo": (), + "QPlainTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QPlainTextEdit.scrollContentsBy": ('int', 'int'), + "QPlainTextEdit.selectAll": (), + "QPlainTextEdit.setBackgroundVisible": ('bool',), + "QPlainTextEdit.setCenterOnScroll": ('bool',), + "QPlainTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.setCursorWidth": ('int',), + "QPlainTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QPlainTextEdit.setDocumentTitle": ('str',), + "QPlainTextEdit.setExtraSelections": ('list',), + "QPlainTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QPlainTextEdit.LineWrapMode',), + "QPlainTextEdit.setMaximumBlockCount": ('int',), + "QPlainTextEdit.setOverwriteMode": ('bool',), + "QPlainTextEdit.setPlaceholderText": ('str',), + "QPlainTextEdit.setPlainText": ('str',), + "QPlainTextEdit.setReadOnly": ('bool',), + "QPlainTextEdit.setTabChangesFocus": ('bool',), + "QPlainTextEdit.setTabStopDistance": ('float',), + "QPlainTextEdit.setTabStopWidth": ('int',), + "QPlainTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QPlainTextEdit.setUndoRedoEnabled": ('bool',), + "QPlainTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QPlainTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QPlainTextEdit.tabChangesFocus": (), + "QPlainTextEdit.tabStopDistance": (), + "QPlainTextEdit.tabStopWidth": (), + "QPlainTextEdit.textCursor": (), + "QPlainTextEdit.textInteractionFlags": (), + "QPlainTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QPlainTextEdit.toPlainText": (), + "QPlainTextEdit.undo": (), + "QPlainTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QPlainTextEdit.wordWrapMode": (), + "QPlainTextEdit.zoomIn": ('int',), + "QPlainTextEdit.zoomInF": ('float',), + "QPlainTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QProgressBar: + "QProgressBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QProgressBar.alignment": (), + "QProgressBar.event": ('PySide2.QtCore.QEvent',), + "QProgressBar.format": (), + "QProgressBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionProgressBar',), + "QProgressBar.invertedAppearance": (), + "QProgressBar.isTextVisible": (), + "QProgressBar.maximum": (), + "QProgressBar.minimum": (), + "QProgressBar.minimumSizeHint": (), + "QProgressBar.orientation": (), + "QProgressBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QProgressBar.reset": (), + "QProgressBar.resetFormat": (), + "QProgressBar.setAlignment": ('PySide2.libpyside.Alignment',), + "QProgressBar.setFormat": ('str',), + "QProgressBar.setInvertedAppearance": ('bool',), + "QProgressBar.setMaximum": ('int',), + "QProgressBar.setMinimum": ('int',), + "QProgressBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QProgressBar.setRange": ('int', 'int'), + "QProgressBar.setTextDirection": ('PySide2.QtWidgets.QProgressBar.Direction',), + "QProgressBar.setTextVisible": ('bool',), + "QProgressBar.setValue": ('int',), + "QProgressBar.sizeHint": (), + "QProgressBar.text": (), + "QProgressBar.textDirection": (), + "QProgressBar.value": (), + + # class PySide2.QtWidgets.QProgressDialog: + "QProgressDialog.__init__": [('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('str', 'str', 'int', 'int', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QProgressDialog.autoClose": (), + "QProgressDialog.autoReset": (), + "QProgressDialog.cancel": (), + "QProgressDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QProgressDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QProgressDialog.forceShow": (), + "QProgressDialog.labelText": (), + "QProgressDialog.maximum": (), + "QProgressDialog.minimum": (), + "QProgressDialog.minimumDuration": (), + "QProgressDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QProgressDialog.reset": (), + "QProgressDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QProgressDialog.setAutoClose": ('bool',), + "QProgressDialog.setAutoReset": ('bool',), + "QProgressDialog.setBar": ('PySide2.QtWidgets.QProgressBar',), + "QProgressDialog.setCancelButton": ('PySide2.QtWidgets.QPushButton',), + "QProgressDialog.setCancelButtonText": ('str',), + "QProgressDialog.setLabel": ('PySide2.QtWidgets.QLabel',), + "QProgressDialog.setLabelText": ('str',), + "QProgressDialog.setMaximum": ('int',), + "QProgressDialog.setMinimum": ('int',), + "QProgressDialog.setMinimumDuration": ('int',), + "QProgressDialog.setRange": ('int', 'int'), + "QProgressDialog.setValue": ('int',), + "QProgressDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QProgressDialog.sizeHint": (), + "QProgressDialog.value": (), + "QProgressDialog.wasCanceled": (), + + # class PySide2.QtWidgets.QProxyStyle: + "QProxyStyle.__init__": [('PySide2.QtWidgets.QStyle',), ('str',)], + "QProxyStyle.baseStyle": (), + "QProxyStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.drawItemPixmap": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QProxyStyle.drawItemText": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QProxyStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.event": ('PySide2.QtCore.QEvent',), + "QProxyStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QProxyStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.itemPixmapRect": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QProxyStyle.itemTextRect": ('PySide2.QtGui.QFontMetrics', 'PySide2.QtCore.QRect', 'int', 'bool', 'str'), + "QProxyStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QProxyStyle.setBaseStyle": ('PySide2.QtWidgets.QStyle',), + "QProxyStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.standardPalette": (), + "QProxyStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QProxyStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QPushButton: + "QPushButton.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPushButton.autoDefault": (), + "QPushButton.event": ('PySide2.QtCore.QEvent',), + "QPushButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QPushButton.isDefault": (), + "QPushButton.isFlat": (), + "QPushButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPushButton.menu": (), + "QPushButton.minimumSizeHint": (), + "QPushButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPushButton.setAutoDefault": ('bool',), + "QPushButton.setDefault": ('bool',), + "QPushButton.setFlat": ('bool',), + "QPushButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QPushButton.showMenu": (), + "QPushButton.sizeHint": (), + + # class PySide2.QtWidgets.QRadioButton: + "QRadioButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QRadioButton.event": ('PySide2.QtCore.QEvent',), + "QRadioButton.hitButton": ('PySide2.QtCore.QPoint',), + "QRadioButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QRadioButton.minimumSizeHint": (), + "QRadioButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QRadioButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRadioButton.sizeHint": (), + + # class PySide2.QtWidgets.QRubberBand: + "QRubberBand.__init__": ('PySide2.QtWidgets.QRubberBand.Shape', 'PySide2.QtWidgets.QWidget'), + "QRubberBand.changeEvent": ('PySide2.QtCore.QEvent',), + "QRubberBand.event": ('PySide2.QtCore.QEvent',), + "QRubberBand.initStyleOption": ('PySide2.QtWidgets.QStyleOptionRubberBand',), + "QRubberBand.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRubberBand.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QRubberBand.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRubberBand.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QRubberBand.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QRubberBand.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRubberBand.shape": (), + "QRubberBand.showEvent": ('PySide2.QtGui.QShowEvent',), + + # class PySide2.QtWidgets.QScrollArea: + "QScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.alignment": (), + "QScrollArea.ensureVisible": ('int', 'int', 'int', 'int'), + "QScrollArea.ensureWidgetVisible": ('PySide2.QtWidgets.QWidget', 'int', 'int'), + "QScrollArea.event": ('PySide2.QtCore.QEvent',), + "QScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QScrollArea.focusNextPrevChild": ('bool',), + "QScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QScrollArea.scrollContentsBy": ('int', 'int'), + "QScrollArea.setAlignment": ('PySide2.libpyside.Alignment',), + "QScrollArea.setWidget": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.setWidgetResizable": ('bool',), + "QScrollArea.sizeHint": (), + "QScrollArea.takeWidget": (), + "QScrollArea.viewportSizeHint": (), + "QScrollArea.widget": (), + "QScrollArea.widgetResizable": (), + + # class PySide2.QtWidgets.QScrollBar: + "QScrollBar.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QScrollBar.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QScrollBar.event": ('PySide2.QtCore.QEvent',), + "QScrollBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QScrollBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QScrollBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QScrollBar.sizeHint": (), + "QScrollBar.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QScrollBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QScroller: + "QScroller.activeScrollers": (), + "QScroller.ensureVisible": [('PySide2.QtCore.QRectF', 'float', 'float'), ('PySide2.QtCore.QRectF', 'float', 'float', 'int')], + "QScroller.finalPosition": (), + "QScroller.grabGesture": ('PySide2.QtCore.QObject', 'PySide2.QtWidgets.QScroller.ScrollerGestureType'), + "QScroller.grabbedGesture": ('PySide2.QtCore.QObject',), + "QScroller.handleInput": ('PySide2.QtWidgets.QScroller.Input', 'PySide2.QtCore.QPointF', 'int'), + "QScroller.hasScroller": ('PySide2.QtCore.QObject',), + "QScroller.pixelPerMeter": (), + "QScroller.resendPrepareEvent": (), + "QScroller.scrollTo": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QPointF', 'int')], + "QScroller.scroller": ('PySide2.QtCore.QObject',), + "QScroller.scrollerProperties": (), + "QScroller.setScrollerProperties": ('PySide2.QtWidgets.QScrollerProperties',), + "QScroller.setSnapPositionsX": [('float', 'float'), ('list',)], + "QScroller.setSnapPositionsY": [('float', 'float'), ('list',)], + "QScroller.state": (), + "QScroller.stop": (), + "QScroller.target": (), + "QScroller.ungrabGesture": ('PySide2.QtCore.QObject',), + "QScroller.velocity": (), + + # class PySide2.QtWidgets.QScrollerProperties: + "QScrollerProperties.__init__": [(), ('PySide2.QtWidgets.QScrollerProperties',)], + "QScrollerProperties.__copy__": (), + "QScrollerProperties.scrollMetric": ('PySide2.QtWidgets.QScrollerProperties.ScrollMetric',), + "QScrollerProperties.setDefaultScrollerProperties": ('PySide2.QtWidgets.QScrollerProperties',), + "QScrollerProperties.setScrollMetric": ('PySide2.QtWidgets.QScrollerProperties.ScrollMetric', 'Any'), + "QScrollerProperties.unsetDefaultScrollerProperties": (), + + # class PySide2.QtWidgets.QShortcut: + "QShortcut.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'Callable', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtWidgets.QWidget',)], + "QShortcut.autoRepeat": (), + "QShortcut.context": (), + "QShortcut.event": ('PySide2.QtCore.QEvent',), + "QShortcut.id": (), + "QShortcut.isEnabled": (), + "QShortcut.key": (), + "QShortcut.parentWidget": (), + "QShortcut.setAutoRepeat": ('bool',), + "QShortcut.setContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QShortcut.setEnabled": ('bool',), + "QShortcut.setKey": ('PySide2.QtGui.QKeySequence',), + "QShortcut.setWhatsThis": ('str',), + "QShortcut.whatsThis": (), + + # class PySide2.QtWidgets.QSizeGrip: + "QSizeGrip.__init__": ('PySide2.QtWidgets.QWidget',), + "QSizeGrip.event": ('PySide2.QtCore.QEvent',), + "QSizeGrip.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QSizeGrip.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QSizeGrip.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QSizeGrip.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSizeGrip.setVisible": ('bool',), + "QSizeGrip.showEvent": ('PySide2.QtGui.QShowEvent',), + "QSizeGrip.sizeHint": (), + + # class PySide2.QtWidgets.QSizePolicy: + "QSizePolicy.__init__": [(), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QSizePolicy.__copy__": (), + "QSizePolicy.controlType": (), + "QSizePolicy.expandingDirections": (), + "QSizePolicy.hasHeightForWidth": (), + "QSizePolicy.hasWidthForHeight": (), + "QSizePolicy.horizontalPolicy": (), + "QSizePolicy.horizontalStretch": (), + "QSizePolicy.retainSizeWhenHidden": (), + "QSizePolicy.setControlType": ('PySide2.QtWidgets.QSizePolicy.ControlType',), + "QSizePolicy.setHeightForWidth": ('bool',), + "QSizePolicy.setHorizontalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setHorizontalStretch": ('int',), + "QSizePolicy.setRetainSizeWhenHidden": ('bool',), + "QSizePolicy.setVerticalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setVerticalStretch": ('int',), + "QSizePolicy.setWidthForHeight": ('bool',), + "QSizePolicy.transpose": (), + "QSizePolicy.transposed": (), + "QSizePolicy.verticalPolicy": (), + "QSizePolicy.verticalStretch": (), + + # class PySide2.QtWidgets.QSlider: + "QSlider.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSlider.event": ('PySide2.QtCore.QEvent',), + "QSlider.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QSlider.minimumSizeHint": (), + "QSlider.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSlider.setTickInterval": ('int',), + "QSlider.setTickPosition": ('PySide2.QtWidgets.QSlider.TickPosition',), + "QSlider.sizeHint": (), + "QSlider.tickInterval": (), + "QSlider.tickPosition": (), + + # class PySide2.QtWidgets.QSpacerItem: + "QSpacerItem.__init__": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.changeSize": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.expandingDirections": (), + "QSpacerItem.geometry": (), + "QSpacerItem.isEmpty": (), + "QSpacerItem.maximumSize": (), + "QSpacerItem.minimumSize": (), + "QSpacerItem.setGeometry": ('PySide2.QtCore.QRect',), + "QSpacerItem.sizeHint": (), + "QSpacerItem.sizePolicy": (), + "QSpacerItem.spacerItem": (), + + # class PySide2.QtWidgets.QSpinBox: + "QSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QSpinBox.cleanText": (), + "QSpinBox.displayIntegerBase": (), + "QSpinBox.event": ('PySide2.QtCore.QEvent',), + "QSpinBox.fixup": ('str',), + "QSpinBox.maximum": (), + "QSpinBox.minimum": (), + "QSpinBox.prefix": (), + "QSpinBox.setDisplayIntegerBase": ('int',), + "QSpinBox.setMaximum": ('int',), + "QSpinBox.setMinimum": ('int',), + "QSpinBox.setPrefix": ('str',), + "QSpinBox.setRange": ('int', 'int'), + "QSpinBox.setSingleStep": ('int',), + "QSpinBox.setSuffix": ('str',), + "QSpinBox.setValue": ('int',), + "QSpinBox.singleStep": (), + "QSpinBox.suffix": (), + "QSpinBox.textFromValue": ('int',), + "QSpinBox.validate": ('str', 'int'), + "QSpinBox.value": (), + "QSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QSplashScreen: + "QSplashScreen.__init__": [('PySide2.QtGui.QPixmap', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QPixmap', 'PySide2.libpyside.WindowFlags')], + "QSplashScreen.clearMessage": (), + "QSplashScreen.drawContents": ('PySide2.QtGui.QPainter',), + "QSplashScreen.event": ('PySide2.QtCore.QEvent',), + "QSplashScreen.finish": ('PySide2.QtWidgets.QWidget',), + "QSplashScreen.message": (), + "QSplashScreen.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplashScreen.pixmap": (), + "QSplashScreen.setPixmap": ('PySide2.QtGui.QPixmap',), + "QSplashScreen.showMessage": ('str', 'int', 'PySide2.QtGui.QColor'), + + # class PySide2.QtWidgets.QSplitter: + "QSplitter.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSplitter.addWidget": ('PySide2.QtWidgets.QWidget',), + "QSplitter.changeEvent": ('PySide2.QtCore.QEvent',), + "QSplitter.childEvent": ('PySide2.QtCore.QChildEvent',), + "QSplitter.childrenCollapsible": (), + "QSplitter.closestLegalPosition": ('int', 'int'), + "QSplitter.count": (), + "QSplitter.createHandle": (), + "QSplitter.event": ('PySide2.QtCore.QEvent',), + "QSplitter.getRange": ('int', 'int', 'int'), + "QSplitter.handle": ('int',), + "QSplitter.handleWidth": (), + "QSplitter.indexOf": ('PySide2.QtWidgets.QWidget',), + "QSplitter.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.isCollapsible": ('int',), + "QSplitter.minimumSizeHint": (), + "QSplitter.moveSplitter": ('int', 'int'), + "QSplitter.opaqueResize": (), + "QSplitter.orientation": (), + "QSplitter.refresh": (), + "QSplitter.replaceWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitter.restoreState": ('PySide2.QtCore.QByteArray',), + "QSplitter.saveState": (), + "QSplitter.setChildrenCollapsible": ('bool',), + "QSplitter.setCollapsible": ('int', 'bool'), + "QSplitter.setHandleWidth": ('int',), + "QSplitter.setOpaqueResize": ('bool',), + "QSplitter.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitter.setRubberBand": ('int',), + "QSplitter.setSizes": ('list',), + "QSplitter.setStretchFactor": ('int', 'int'), + "QSplitter.sizeHint": (), + "QSplitter.sizes": (), + "QSplitter.widget": ('int',), + + # class PySide2.QtWidgets.QSplitterHandle: + "QSplitterHandle.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QSplitter'), + "QSplitterHandle.closestLegalPosition": ('int',), + "QSplitterHandle.event": ('PySide2.QtCore.QEvent',), + "QSplitterHandle.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.moveSplitter": ('int',), + "QSplitterHandle.opaqueResize": (), + "QSplitterHandle.orientation": (), + "QSplitterHandle.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSplitterHandle.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitterHandle.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitterHandle.sizeHint": (), + "QSplitterHandle.splitter": (), + + # class PySide2.QtWidgets.QStackedLayout: + "QStackedLayout.__init__": [(), ('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QStackedLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QStackedLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.count": (), + "QStackedLayout.currentIndex": (), + "QStackedLayout.currentWidget": (), + "QStackedLayout.hasHeightForWidth": (), + "QStackedLayout.heightForWidth": ('int',), + "QStackedLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedLayout.itemAt": ('int',), + "QStackedLayout.minimumSize": (), + "QStackedLayout.setCurrentIndex": ('int',), + "QStackedLayout.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QStackedLayout.setStackingMode": ('PySide2.QtWidgets.QStackedLayout.StackingMode',), + "QStackedLayout.sizeHint": (), + "QStackedLayout.stackingMode": (), + "QStackedLayout.takeAt": ('int',), + "QStackedLayout.widget": [(), ('int',)], + + # class PySide2.QtWidgets.QStackedWidget: + "QStackedWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.count": (), + "QStackedWidget.currentIndex": (), + "QStackedWidget.currentWidget": (), + "QStackedWidget.event": ('PySide2.QtCore.QEvent',), + "QStackedWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedWidget.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.setCurrentIndex": ('int',), + "QStackedWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.widget": ('int',), + + # class PySide2.QtWidgets.QStatusBar: + "QStatusBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.addPermanentWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.addWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.clearMessage": (), + "QStatusBar.currentMessage": (), + "QStatusBar.event": ('PySide2.QtCore.QEvent',), + "QStatusBar.hideOrShow": (), + "QStatusBar.insertPermanentWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.isSizeGripEnabled": (), + "QStatusBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QStatusBar.reformat": (), + "QStatusBar.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QStatusBar.setSizeGripEnabled": ('bool',), + "QStatusBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QStatusBar.showMessage": ('str', 'int'), + + # class PySide2.QtWidgets.QStyle: + "QStyle.__init__": (), + "QStyle.alignedRect": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.libpyside.Alignment', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QRect'), + "QStyle.combinedLayoutSpacing": ('PySide2.libpyside.ControlTypes', 'PySide2.libpyside.ControlTypes', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawItemPixmap": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.drawItemText": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QStyle.itemPixmapRect": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.itemTextRect": ('PySide2.QtGui.QFontMetrics', 'PySide2.QtCore.QRect', 'int', 'bool', 'str'), + "QStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.proxy": (), + "QStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QStyle.sliderPositionFromValue": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.sliderValueFromPosition": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.standardPalette": (), + "QStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.visualAlignment": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.libpyside.Alignment'), + "QStyle.visualPos": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QPoint'), + "QStyle.visualRect": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QRect'), + + # class PySide2.QtWidgets.QStyleFactory: + "QStyleFactory.__init__": (), + "QStyleFactory.create": ('str',), + "QStyleFactory.keys": (), + + # class PySide2.QtWidgets.QStyleHintReturn: + "QStyleHintReturn.__init__": ('int', 'int'), + + # class PySide2.QtWidgets.QStyleHintReturnMask: + "QStyleHintReturnMask.__init__": (), + + # class PySide2.QtWidgets.QStyleHintReturnVariant: + "QStyleHintReturnVariant.__init__": (), + + # class PySide2.QtWidgets.QStyleOption: + "QStyleOption.__init__": [('PySide2.QtWidgets.QStyleOption',), ('int', 'int')], + "QStyleOption.init": ('PySide2.QtWidgets.QWidget',), + "QStyleOption.initFrom": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QStyleOptionButton: + "QStyleOptionButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComboBox: + "QStyleOptionComboBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionComboBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComplex: + "QStyleOptionComplex.__init__": [('PySide2.QtWidgets.QStyleOptionComplex',), ('int', 'int')], + + # class PySide2.QtWidgets.QStyleOptionDockWidget: + "QStyleOptionDockWidget.__init__": [(), ('PySide2.QtWidgets.QStyleOptionDockWidget',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFocusRect: + "QStyleOptionFocusRect.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFocusRect',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFrame: + "QStyleOptionFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionGraphicsItem: + "QStyleOptionGraphicsItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGraphicsItem',), ('int',)], + "QStyleOptionGraphicsItem.levelOfDetailFromTransform": ('PySide2.QtGui.QTransform',), + + # class PySide2.QtWidgets.QStyleOptionGroupBox: + "QStyleOptionGroupBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGroupBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionHeader: + "QStyleOptionHeader.__init__": [(), ('PySide2.QtWidgets.QStyleOptionHeader',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionMenuItem: + "QStyleOptionMenuItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionMenuItem',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionProgressBar: + "QStyleOptionProgressBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionProgressBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionRubberBand: + "QStyleOptionRubberBand.__init__": [(), ('PySide2.QtWidgets.QStyleOptionRubberBand',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSizeGrip: + "QStyleOptionSizeGrip.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSizeGrip',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSlider: + "QStyleOptionSlider.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSlider',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSpinBox: + "QStyleOptionSpinBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSpinBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTab: + "QStyleOptionTab.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTab',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabBarBase: + "QStyleOptionTabBarBase.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabBarBase',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabWidgetFrame: + "QStyleOptionTabWidgetFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTitleBar: + "QStyleOptionTitleBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTitleBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBar: + "QStyleOptionToolBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBox: + "QStyleOptionToolBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolButton: + "QStyleOptionToolButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionViewItem: + "QStyleOptionViewItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionViewItem',), ('int',)], + "QStyleOptionViewItem.__copy__": (), + + # class PySide2.QtWidgets.QStylePainter: + "QStylePainter.__init__": [(), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.begin": [('PySide2.QtGui.QPaintDevice',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex'), + "QStylePainter.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.drawItemPixmap": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStylePainter.drawItemText": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStylePainter.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.style": (), + + # class PySide2.QtWidgets.QStyledItemDelegate: + "QStyledItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QStyledItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.displayText": ('Any', 'PySide2.QtCore.QLocale'), + "QStyledItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStyledItemDelegate.initStyleOption": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.itemEditorFactory": (), + "QStyledItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QStyledItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QSwipeGesture: + "QSwipeGesture.__init__": ('PySide2.QtCore.QObject',), + "QSwipeGesture.horizontalDirection": (), + "QSwipeGesture.setSwipeAngle": ('float',), + "QSwipeGesture.swipeAngle": (), + "QSwipeGesture.verticalDirection": (), + + # class PySide2.QtWidgets.QSystemTrayIcon: + "QSystemTrayIcon.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'PySide2.QtCore.QObject')], + "QSystemTrayIcon.contextMenu": (), + "QSystemTrayIcon.event": ('PySide2.QtCore.QEvent',), + "QSystemTrayIcon.geometry": (), + "QSystemTrayIcon.hide": (), + "QSystemTrayIcon.icon": (), + "QSystemTrayIcon.isSystemTrayAvailable": (), + "QSystemTrayIcon.isVisible": (), + "QSystemTrayIcon.setContextMenu": ('PySide2.QtWidgets.QMenu',), + "QSystemTrayIcon.setIcon": ('PySide2.QtGui.QIcon',), + "QSystemTrayIcon.setToolTip": ('str',), + "QSystemTrayIcon.setVisible": ('bool',), + "QSystemTrayIcon.show": (), + "QSystemTrayIcon.showMessage": [('str', 'str', 'PySide2.QtGui.QIcon', 'int'), ('str', 'str', 'PySide2.QtWidgets.QSystemTrayIcon.MessageIcon', 'int')], + "QSystemTrayIcon.supportsMessages": (), + "QSystemTrayIcon.toolTip": (), + + # class PySide2.QtWidgets.QTabBar: + "QTabBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabBar.accessibleTabName": ('int',), + "QTabBar.addTab": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QTabBar.autoHide": (), + "QTabBar.changeCurrentOnDrag": (), + "QTabBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabBar.count": (), + "QTabBar.currentIndex": (), + "QTabBar.documentMode": (), + "QTabBar.drawBase": (), + "QTabBar.elideMode": (), + "QTabBar.event": ('PySide2.QtCore.QEvent',), + "QTabBar.expanding": (), + "QTabBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QTabBar.iconSize": (), + "QTabBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTab', 'int'), + "QTabBar.insertTab": [('int', 'PySide2.QtGui.QIcon', 'str'), ('int', 'str')], + "QTabBar.isMovable": (), + "QTabBar.isTabEnabled": ('int',), + "QTabBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabBar.minimumSizeHint": (), + "QTabBar.minimumTabSizeHint": ('int',), + "QTabBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.moveTab": ('int', 'int'), + "QTabBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabBar.removeTab": ('int',), + "QTabBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabBar.selectionBehaviorOnRemove": (), + "QTabBar.setAccessibleTabName": ('int', 'str'), + "QTabBar.setAutoHide": ('bool',), + "QTabBar.setChangeCurrentOnDrag": ('bool',), + "QTabBar.setCurrentIndex": ('int',), + "QTabBar.setDocumentMode": ('bool',), + "QTabBar.setDrawBase": ('bool',), + "QTabBar.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabBar.setExpanding": ('bool',), + "QTabBar.setIconSize": ('PySide2.QtCore.QSize',), + "QTabBar.setMovable": ('bool',), + "QTabBar.setSelectionBehaviorOnRemove": ('PySide2.QtWidgets.QTabBar.SelectionBehavior',), + "QTabBar.setShape": ('PySide2.QtWidgets.QTabBar.Shape',), + "QTabBar.setTabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition', 'PySide2.QtWidgets.QWidget'), + "QTabBar.setTabData": ('int', 'Any'), + "QTabBar.setTabEnabled": ('int', 'bool'), + "QTabBar.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabBar.setTabText": ('int', 'str'), + "QTabBar.setTabTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTabBar.setTabToolTip": ('int', 'str'), + "QTabBar.setTabWhatsThis": ('int', 'str'), + "QTabBar.setTabsClosable": ('bool',), + "QTabBar.setUsesScrollButtons": ('bool',), + "QTabBar.shape": (), + "QTabBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabBar.sizeHint": (), + "QTabBar.tabAt": ('PySide2.QtCore.QPoint',), + "QTabBar.tabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition'), + "QTabBar.tabData": ('int',), + "QTabBar.tabIcon": ('int',), + "QTabBar.tabInserted": ('int',), + "QTabBar.tabLayoutChange": (), + "QTabBar.tabRect": ('int',), + "QTabBar.tabRemoved": ('int',), + "QTabBar.tabSizeHint": ('int',), + "QTabBar.tabText": ('int',), + "QTabBar.tabTextColor": ('int',), + "QTabBar.tabToolTip": ('int',), + "QTabBar.tabWhatsThis": ('int',), + "QTabBar.tabsClosable": (), + "QTabBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTabBar.usesScrollButtons": (), + "QTabBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QTabWidget: + "QTabWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.addTab": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabWidget.clear": (), + "QTabWidget.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QTabWidget.count": (), + "QTabWidget.currentIndex": (), + "QTabWidget.currentWidget": (), + "QTabWidget.documentMode": (), + "QTabWidget.elideMode": (), + "QTabWidget.event": ('PySide2.QtCore.QEvent',), + "QTabWidget.hasHeightForWidth": (), + "QTabWidget.heightForWidth": ('int',), + "QTabWidget.iconSize": (), + "QTabWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), + "QTabWidget.insertTab": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.isMovable": (), + "QTabWidget.isTabEnabled": ('int',), + "QTabWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabWidget.minimumSizeHint": (), + "QTabWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabWidget.removeTab": ('int',), + "QTabWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabWidget.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QTabWidget.setCurrentIndex": ('int',), + "QTabWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.setDocumentMode": ('bool',), + "QTabWidget.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabWidget.setIconSize": ('PySide2.QtCore.QSize',), + "QTabWidget.setMovable": ('bool',), + "QTabWidget.setTabBar": ('PySide2.QtWidgets.QTabBar',), + "QTabWidget.setTabBarAutoHide": ('bool',), + "QTabWidget.setTabEnabled": ('int', 'bool'), + "QTabWidget.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabWidget.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QTabWidget.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QTabWidget.setTabText": ('int', 'str'), + "QTabWidget.setTabToolTip": ('int', 'str'), + "QTabWidget.setTabWhatsThis": ('int', 'str'), + "QTabWidget.setTabsClosable": ('bool',), + "QTabWidget.setUsesScrollButtons": ('bool',), + "QTabWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabWidget.sizeHint": (), + "QTabWidget.tabBar": (), + "QTabWidget.tabBarAutoHide": (), + "QTabWidget.tabIcon": ('int',), + "QTabWidget.tabInserted": ('int',), + "QTabWidget.tabPosition": (), + "QTabWidget.tabRemoved": ('int',), + "QTabWidget.tabShape": (), + "QTabWidget.tabText": ('int',), + "QTabWidget.tabToolTip": ('int',), + "QTabWidget.tabWhatsThis": ('int',), + "QTabWidget.tabsClosable": (), + "QTabWidget.usesScrollButtons": (), + "QTabWidget.widget": ('int',), + + # class PySide2.QtWidgets.QTableView: + "QTableView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTableView.clearSpans": (), + "QTableView.columnAt": ('int',), + "QTableView.columnCountChanged": ('int', 'int'), + "QTableView.columnMoved": ('int', 'int', 'int'), + "QTableView.columnResized": ('int', 'int', 'int'), + "QTableView.columnSpan": ('int', 'int'), + "QTableView.columnViewportPosition": ('int',), + "QTableView.columnWidth": ('int',), + "QTableView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTableView.doItemsLayout": (), + "QTableView.gridStyle": (), + "QTableView.hideColumn": ('int',), + "QTableView.hideRow": ('int',), + "QTableView.horizontalHeader": (), + "QTableView.horizontalOffset": (), + "QTableView.horizontalScrollbarAction": ('int',), + "QTableView.indexAt": ('PySide2.QtCore.QPoint',), + "QTableView.isColumnHidden": ('int',), + "QTableView.isCornerButtonEnabled": (), + "QTableView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTableView.isRowHidden": ('int',), + "QTableView.isSortingEnabled": (), + "QTableView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QTableView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTableView.resizeColumnToContents": ('int',), + "QTableView.resizeColumnsToContents": (), + "QTableView.resizeRowToContents": ('int',), + "QTableView.resizeRowsToContents": (), + "QTableView.rowAt": ('int',), + "QTableView.rowCountChanged": ('int', 'int'), + "QTableView.rowHeight": ('int',), + "QTableView.rowMoved": ('int', 'int', 'int'), + "QTableView.rowResized": ('int', 'int', 'int'), + "QTableView.rowSpan": ('int', 'int'), + "QTableView.rowViewportPosition": ('int',), + "QTableView.scrollContentsBy": ('int', 'int'), + "QTableView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableView.selectColumn": ('int',), + "QTableView.selectRow": ('int',), + "QTableView.selectedIndexes": (), + "QTableView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTableView.setColumnHidden": ('int', 'bool'), + "QTableView.setColumnWidth": ('int', 'int'), + "QTableView.setCornerButtonEnabled": ('bool',), + "QTableView.setGridStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QTableView.setHorizontalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTableView.setRowHeight": ('int', 'int'), + "QTableView.setRowHidden": ('int', 'bool'), + "QTableView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QTableView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTableView.setShowGrid": ('bool',), + "QTableView.setSortingEnabled": ('bool',), + "QTableView.setSpan": ('int', 'int', 'int', 'int'), + "QTableView.setVerticalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setWordWrap": ('bool',), + "QTableView.showColumn": ('int',), + "QTableView.showGrid": (), + "QTableView.showRow": ('int',), + "QTableView.sizeHintForColumn": ('int',), + "QTableView.sizeHintForRow": ('int',), + "QTableView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTableView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTableView.updateGeometries": (), + "QTableView.verticalHeader": (), + "QTableView.verticalOffset": (), + "QTableView.verticalScrollbarAction": ('int',), + "QTableView.viewOptions": (), + "QTableView.viewportSizeHint": (), + "QTableView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTableView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTableView.wordWrap": (), + + # class PySide2.QtWidgets.QTableWidget: + "QTableWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'int', 'PySide2.QtWidgets.QWidget')], + "QTableWidget.cellWidget": ('int', 'int'), + "QTableWidget.clear": (), + "QTableWidget.clearContents": (), + "QTableWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.column": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.columnCount": (), + "QTableWidget.currentColumn": (), + "QTableWidget.currentItem": (), + "QTableWidget.currentRow": (), + "QTableWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTableWidget.dropMimeData": ('int', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTableWidget.editItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.event": ('PySide2.QtCore.QEvent',), + "QTableWidget.findItems": ('str', 'PySide2.libpyside.MatchFlags'), + "QTableWidget.horizontalHeaderItem": ('int',), + "QTableWidget.indexFromItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.insertColumn": ('int',), + "QTableWidget.insertRow": ('int',), + "QTableWidget.isItemSelected": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.isPersistentEditorOpen": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.isSortingEnabled": (), + "QTableWidget.item": ('int', 'int'), + "QTableWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTableWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTableWidget.itemPrototype": (), + "QTableWidget.items": ('PySide2.QtCore.QMimeData',), + "QTableWidget.mimeData": ('list',), + "QTableWidget.mimeTypes": (), + "QTableWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.removeCellWidget": ('int', 'int'), + "QTableWidget.removeColumn": ('int',), + "QTableWidget.removeRow": ('int',), + "QTableWidget.row": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.rowCount": (), + "QTableWidget.scrollToItem": ('PySide2.QtWidgets.QTableWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableWidget.selectedItems": (), + "QTableWidget.selectedRanges": (), + "QTableWidget.setCellWidget": ('int', 'int', 'PySide2.QtWidgets.QWidget'), + "QTableWidget.setColumnCount": ('int',), + "QTableWidget.setCurrentCell": [('int', 'int'), ('int', 'int', 'PySide2.libpyside.SelectionFlags')], + "QTableWidget.setCurrentItem": [('PySide2.QtWidgets.QTableWidgetItem',), ('PySide2.QtWidgets.QTableWidgetItem', 'PySide2.libpyside.SelectionFlags')], + "QTableWidget.setHorizontalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setHorizontalHeaderLabels": ('List[str]',), + "QTableWidget.setItem": ('int', 'int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setItemPrototype": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.setItemSelected": ('PySide2.QtWidgets.QTableWidgetItem', 'bool'), + "QTableWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableWidget.setRangeSelected": ('PySide2.QtWidgets.QTableWidgetSelectionRange', 'bool'), + "QTableWidget.setRowCount": ('int',), + "QTableWidget.setSortingEnabled": ('bool',), + "QTableWidget.setVerticalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setVerticalHeaderLabels": ('List[str]',), + "QTableWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTableWidget.supportedDropActions": (), + "QTableWidget.takeHorizontalHeaderItem": ('int',), + "QTableWidget.takeItem": ('int', 'int'), + "QTableWidget.takeVerticalHeaderItem": ('int',), + "QTableWidget.verticalHeaderItem": ('int',), + "QTableWidget.visualColumn": ('int',), + "QTableWidget.visualItemRect": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.visualRow": ('int',), + + # class PySide2.QtWidgets.QTableWidgetItem: + "QTableWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'int'), ('PySide2.QtWidgets.QTableWidgetItem',), ('int',), ('str', 'int')], + "QTableWidgetItem.background": (), + "QTableWidgetItem.backgroundColor": (), + "QTableWidgetItem.checkState": (), + "QTableWidgetItem.clone": (), + "QTableWidgetItem.column": (), + "QTableWidgetItem.data": ('int',), + "QTableWidgetItem.flags": (), + "QTableWidgetItem.font": (), + "QTableWidgetItem.foreground": (), + "QTableWidgetItem.icon": (), + "QTableWidgetItem.isSelected": (), + "QTableWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTableWidgetItem.row": (), + "QTableWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QTableWidgetItem.setData": ('int', 'Any'), + "QTableWidgetItem.setFlags": ('PySide2.libpyside.ItemFlags',), + "QTableWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QTableWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QTableWidgetItem.setSelected": ('bool',), + "QTableWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QTableWidgetItem.setStatusTip": ('str',), + "QTableWidgetItem.setText": ('str',), + "QTableWidgetItem.setTextAlignment": ('int',), + "QTableWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setToolTip": ('str',), + "QTableWidgetItem.setWhatsThis": ('str',), + "QTableWidgetItem.sizeHint": (), + "QTableWidgetItem.statusTip": (), + "QTableWidgetItem.tableWidget": (), + "QTableWidgetItem.text": (), + "QTableWidgetItem.textAlignment": (), + "QTableWidgetItem.textColor": (), + "QTableWidgetItem.toolTip": (), + "QTableWidgetItem.type": (), + "QTableWidgetItem.whatsThis": (), + "QTableWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTableWidgetSelectionRange: + "QTableWidgetSelectionRange.__init__": [(), ('PySide2.QtWidgets.QTableWidgetSelectionRange',), ('int', 'int', 'int', 'int')], + "QTableWidgetSelectionRange.__copy__": (), + "QTableWidgetSelectionRange.bottomRow": (), + "QTableWidgetSelectionRange.columnCount": (), + "QTableWidgetSelectionRange.leftColumn": (), + "QTableWidgetSelectionRange.rightColumn": (), + "QTableWidgetSelectionRange.rowCount": (), + "QTableWidgetSelectionRange.topRow": (), + + # class PySide2.QtWidgets.QTapAndHoldGesture: + "QTapAndHoldGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapAndHoldGesture.position": (), + "QTapAndHoldGesture.setPosition": ('PySide2.QtCore.QPointF',), + "QTapAndHoldGesture.setTimeout": ('int',), + "QTapAndHoldGesture.timeout": (), + + # class PySide2.QtWidgets.QTapGesture: + "QTapGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapGesture.position": (), + "QTapGesture.setPosition": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QTextBrowser: + "QTextBrowser.__init__": ('PySide2.QtWidgets.QWidget',), + "QTextBrowser.backward": (), + "QTextBrowser.backwardHistoryCount": (), + "QTextBrowser.clearHistory": (), + "QTextBrowser.event": ('PySide2.QtCore.QEvent',), + "QTextBrowser.focusNextPrevChild": ('bool',), + "QTextBrowser.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextBrowser.forward": (), + "QTextBrowser.forwardHistoryCount": (), + "QTextBrowser.historyTitle": ('int',), + "QTextBrowser.historyUrl": ('int',), + "QTextBrowser.home": (), + "QTextBrowser.isBackwardAvailable": (), + "QTextBrowser.isForwardAvailable": (), + "QTextBrowser.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextBrowser.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextBrowser.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.openExternalLinks": (), + "QTextBrowser.openLinks": (), + "QTextBrowser.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextBrowser.reload": (), + "QTextBrowser.searchPaths": (), + "QTextBrowser.setOpenExternalLinks": ('bool',), + "QTextBrowser.setOpenLinks": ('bool',), + "QTextBrowser.setSearchPaths": ('List[str]',), + "QTextBrowser.setSource": ('PySide2.QtCore.QUrl',), + "QTextBrowser.source": (), + + # class PySide2.QtWidgets.QTextEdit: + "QTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QTextEdit.acceptRichText": (), + "QTextEdit.alignment": (), + "QTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QTextEdit.append": ('str',), + "QTextEdit.autoFormatting": (), + "QTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.canPaste": (), + "QTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QTextEdit.clear": (), + "QTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QTextEdit.copy": (), + "QTextEdit.createMimeDataFromSelection": (), + "QTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QTextEdit.currentCharFormat": (), + "QTextEdit.currentFont": (), + "QTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextEdit.cursorWidth": (), + "QTextEdit.cut": (), + "QTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.document": (), + "QTextEdit.documentTitle": (), + "QTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTextEdit.ensureCursorVisible": (), + "QTextEdit.event": ('PySide2.QtCore.QEvent',), + "QTextEdit.extraSelections": (), + "QTextEdit.find": [('PySide2.QtCore.QRegExp', 'PySide2.libpyside.FindFlags'), ('int',), ('str', 'PySide2.libpyside.FindFlags')], + "QTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.focusNextPrevChild": ('bool',), + "QTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.fontFamily": (), + "QTextEdit.fontItalic": (), + "QTextEdit.fontPointSize": (), + "QTextEdit.fontUnderline": (), + "QTextEdit.fontWeight": (), + "QTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.insertHtml": ('str',), + "QTextEdit.insertPlainText": ('str',), + "QTextEdit.isReadOnly": (), + "QTextEdit.isUndoRedoEnabled": (), + "QTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.lineWrapColumnOrWidth": (), + "QTextEdit.lineWrapMode": (), + "QTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextEdit.overwriteMode": (), + "QTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextEdit.paste": (), + "QTextEdit.placeholderText": (), + "QTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextEdit.redo": (), + "QTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTextEdit.scrollContentsBy": ('int', 'int'), + "QTextEdit.scrollToAnchor": ('str',), + "QTextEdit.selectAll": (), + "QTextEdit.setAcceptRichText": ('bool',), + "QTextEdit.setAlignment": ('PySide2.libpyside.Alignment',), + "QTextEdit.setAutoFormatting": ('PySide2.libpyside.AutoFormatting',), + "QTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.setCurrentFont": ('PySide2.QtGui.QFont',), + "QTextEdit.setCursorWidth": ('int',), + "QTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QTextEdit.setDocumentTitle": ('str',), + "QTextEdit.setExtraSelections": ('list',), + "QTextEdit.setFontFamily": ('str',), + "QTextEdit.setFontItalic": ('bool',), + "QTextEdit.setFontPointSize": ('float',), + "QTextEdit.setFontUnderline": ('bool',), + "QTextEdit.setFontWeight": ('int',), + "QTextEdit.setHtml": ('str',), + "QTextEdit.setLineWrapColumnOrWidth": ('int',), + "QTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QTextEdit.LineWrapMode',), + "QTextEdit.setOverwriteMode": ('bool',), + "QTextEdit.setPlaceholderText": ('str',), + "QTextEdit.setPlainText": ('str',), + "QTextEdit.setReadOnly": ('bool',), + "QTextEdit.setTabChangesFocus": ('bool',), + "QTextEdit.setTabStopDistance": ('float',), + "QTextEdit.setTabStopWidth": ('int',), + "QTextEdit.setText": ('str',), + "QTextEdit.setTextBackgroundColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QTextEdit.setUndoRedoEnabled": ('bool',), + "QTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTextEdit.tabChangesFocus": (), + "QTextEdit.tabStopDistance": (), + "QTextEdit.tabStopWidth": (), + "QTextEdit.textBackgroundColor": (), + "QTextEdit.textColor": (), + "QTextEdit.textCursor": (), + "QTextEdit.textInteractionFlags": (), + "QTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTextEdit.toHtml": (), + "QTextEdit.toPlainText": (), + "QTextEdit.undo": (), + "QTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QTextEdit.wordWrapMode": (), + "QTextEdit.zoomIn": ('int',), + "QTextEdit.zoomInF": ('float',), + "QTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QTileRules: + "QTileRules.__init__": [('PySide2.QtCore.Qt.TileRule',), ('PySide2.QtCore.Qt.TileRule', 'PySide2.QtCore.Qt.TileRule'), ('PySide2.QtWidgets.QTileRules',)], + "QTileRules.__copy__": (), + + # class PySide2.QtWidgets.QTimeEdit: + "QTimeEdit.__init__": [('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QToolBar: + "QToolBar.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QToolBar.actionAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QToolBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QToolBar.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str')], + "QToolBar.addSeparator": (), + "QToolBar.addWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBar.allowedAreas": (), + "QToolBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBar.clear": (), + "QToolBar.event": ('PySide2.QtCore.QEvent',), + "QToolBar.iconSize": (), + "QToolBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolBar',), + "QToolBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QToolBar.insertWidget": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget'), + "QToolBar.isAreaAllowed": ('PySide2.QtCore.Qt.ToolBarArea',), + "QToolBar.isFloatable": (), + "QToolBar.isFloating": (), + "QToolBar.isMovable": (), + "QToolBar.orientation": (), + "QToolBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolBar.setAllowedAreas": ('PySide2.libpyside.ToolBarAreas',), + "QToolBar.setFloatable": ('bool',), + "QToolBar.setIconSize": ('PySide2.QtCore.QSize',), + "QToolBar.setMovable": ('bool',), + "QToolBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QToolBar.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolBar.toggleViewAction": (), + "QToolBar.toolButtonStyle": (), + "QToolBar.widgetForAction": ('PySide2.QtWidgets.QAction',), + + # class PySide2.QtWidgets.QToolBox: + "QToolBox.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QToolBox.addItem": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBox.count": (), + "QToolBox.currentIndex": (), + "QToolBox.currentWidget": (), + "QToolBox.event": ('PySide2.QtCore.QEvent',), + "QToolBox.indexOf": ('PySide2.QtWidgets.QWidget',), + "QToolBox.insertItem": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.isItemEnabled": ('int',), + "QToolBox.itemIcon": ('int',), + "QToolBox.itemInserted": ('int',), + "QToolBox.itemRemoved": ('int',), + "QToolBox.itemText": ('int',), + "QToolBox.itemToolTip": ('int',), + "QToolBox.removeItem": ('int',), + "QToolBox.setCurrentIndex": ('int',), + "QToolBox.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBox.setItemEnabled": ('int', 'bool'), + "QToolBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QToolBox.setItemText": ('int', 'str'), + "QToolBox.setItemToolTip": ('int', 'str'), + "QToolBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QToolBox.widget": ('int',), + + # class PySide2.QtWidgets.QToolButton: + "QToolButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QToolButton.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolButton.arrowType": (), + "QToolButton.autoRaise": (), + "QToolButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.defaultAction": (), + "QToolButton.enterEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.event": ('PySide2.QtCore.QEvent',), + "QToolButton.hitButton": ('PySide2.QtCore.QPoint',), + "QToolButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolButton',), + "QToolButton.leaveEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.menu": (), + "QToolButton.minimumSizeHint": (), + "QToolButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.nextCheckState": (), + "QToolButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolButton.popupMode": (), + "QToolButton.setArrowType": ('PySide2.QtCore.Qt.ArrowType',), + "QToolButton.setAutoRaise": ('bool',), + "QToolButton.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QToolButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QToolButton.setPopupMode": ('PySide2.QtWidgets.QToolButton.ToolButtonPopupMode',), + "QToolButton.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolButton.showMenu": (), + "QToolButton.sizeHint": (), + "QToolButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QToolButton.toolButtonStyle": (), + + # class PySide2.QtWidgets.QToolTip: + "QToolTip.font": (), + "QToolTip.hideText": (), + "QToolTip.isVisible": (), + "QToolTip.palette": (), + "QToolTip.setFont": ('PySide2.QtGui.QFont',), + "QToolTip.setPalette": ('PySide2.QtGui.QPalette',), + "QToolTip.showText": [('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect', 'int')], + "QToolTip.text": (), + + # class PySide2.QtWidgets.QTreeView: + "QTreeView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeView.allColumnsShowFocus": (), + "QTreeView.autoExpandDelay": (), + "QTreeView.collapse": ('PySide2.QtCore.QModelIndex',), + "QTreeView.collapseAll": (), + "QTreeView.columnAt": ('int',), + "QTreeView.columnCountChanged": ('int', 'int'), + "QTreeView.columnMoved": (), + "QTreeView.columnResized": ('int', 'int', 'int'), + "QTreeView.columnViewportPosition": ('int',), + "QTreeView.columnWidth": ('int',), + "QTreeView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTreeView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QTreeView.doItemsLayout": (), + "QTreeView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTreeView.drawBranches": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawRow": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawTree": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QRegion'), + "QTreeView.expand": ('PySide2.QtCore.QModelIndex',), + "QTreeView.expandAll": (), + "QTreeView.expandToDepth": ('int',), + "QTreeView.expandsOnDoubleClick": (), + "QTreeView.header": (), + "QTreeView.hideColumn": ('int',), + "QTreeView.horizontalOffset": (), + "QTreeView.horizontalScrollbarAction": ('int',), + "QTreeView.indentation": (), + "QTreeView.indexAbove": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexAt": ('PySide2.QtCore.QPoint',), + "QTreeView.indexBelow": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexRowSizeHint": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isAnimated": (), + "QTreeView.isColumnHidden": ('int',), + "QTreeView.isExpanded": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isHeaderHidden": (), + "QTreeView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isRowHidden": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isSortingEnabled": (), + "QTreeView.itemsExpandable": (), + "QTreeView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTreeView.keyboardSearch": ('str',), + "QTreeView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QTreeView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTreeView.reexpand": (), + "QTreeView.reset": (), + "QTreeView.resetIndentation": (), + "QTreeView.resizeColumnToContents": ('int',), + "QTreeView.rootIsDecorated": (), + "QTreeView.rowHeight": ('PySide2.QtCore.QModelIndex',), + "QTreeView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.scrollContentsBy": ('int', 'int'), + "QTreeView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeView.selectAll": (), + "QTreeView.selectedIndexes": (), + "QTreeView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTreeView.setAllColumnsShowFocus": ('bool',), + "QTreeView.setAnimated": ('bool',), + "QTreeView.setAutoExpandDelay": ('int',), + "QTreeView.setColumnHidden": ('int', 'bool'), + "QTreeView.setColumnWidth": ('int', 'int'), + "QTreeView.setExpanded": ('PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setExpandsOnDoubleClick": ('bool',), + "QTreeView.setFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTreeView.setHeaderHidden": ('bool',), + "QTreeView.setIndentation": ('int',), + "QTreeView.setItemsExpandable": ('bool',), + "QTreeView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeView.setRootIsDecorated": ('bool',), + "QTreeView.setRowHidden": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QTreeView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeView.setSortingEnabled": ('bool',), + "QTreeView.setTreePosition": ('int',), + "QTreeView.setUniformRowHeights": ('bool',), + "QTreeView.setWordWrap": ('bool',), + "QTreeView.showColumn": ('int',), + "QTreeView.sizeHintForColumn": ('int',), + "QTreeView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTreeView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTreeView.treePosition": (), + "QTreeView.uniformRowHeights": (), + "QTreeView.updateGeometries": (), + "QTreeView.verticalOffset": (), + "QTreeView.verticalScrollbarValueChanged": ('int',), + "QTreeView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QTreeView.viewportSizeHint": (), + "QTreeView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTreeView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTreeView.wordWrap": (), + + # class PySide2.QtWidgets.QTreeWidget: + "QTreeWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeWidget.addTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.addTopLevelItems": ('list',), + "QTreeWidget.clear": (), + "QTreeWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.collapseItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.columnCount": (), + "QTreeWidget.currentColumn": (), + "QTreeWidget.currentItem": (), + "QTreeWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTreeWidget.dropMimeData": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTreeWidget.editItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.event": ('PySide2.QtCore.QEvent',), + "QTreeWidget.expandItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.findItems": ('str', 'PySide2.libpyside.MatchFlags', 'int'), + "QTreeWidget.headerItem": (), + "QTreeWidget.indexFromItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.indexOfTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.insertTopLevelItem": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidget.insertTopLevelItems": ('int', 'list'), + "QTreeWidget.invisibleRootItem": (), + "QTreeWidget.isFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isPersistentEditorOpen": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.itemAbove": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTreeWidget.itemBelow": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeWidget.itemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.items": ('PySide2.QtCore.QMimeData',), + "QTreeWidget.mimeData": ('list',), + "QTreeWidget.mimeTypes": (), + "QTreeWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.removeItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.scrollToItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeWidget.selectedItems": (), + "QTreeWidget.setColumnCount": ('int',), + "QTreeWidget.setCurrentItem": [('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.libpyside.SelectionFlags')], + "QTreeWidget.setFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setHeaderItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.setHeaderLabel": ('str',), + "QTreeWidget.setHeaderLabels": ('List[str]',), + "QTreeWidget.setItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtWidgets.QWidget'), + "QTreeWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeWidget.sortColumn": (), + "QTreeWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidget.supportedDropActions": (), + "QTreeWidget.takeTopLevelItem": ('int',), + "QTreeWidget.topLevelItem": ('int',), + "QTreeWidget.topLevelItemCount": (), + "QTreeWidget.visualItemRect": ('PySide2.QtWidgets.QTreeWidgetItem',), + + # class PySide2.QtWidgets.QTreeWidgetItem: + "QTreeWidgetItem.__init__": [('List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('int',)], + "QTreeWidgetItem.addChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.addChildren": ('list',), + "QTreeWidgetItem.background": ('int',), + "QTreeWidgetItem.backgroundColor": ('int',), + "QTreeWidgetItem.checkState": ('int',), + "QTreeWidgetItem.child": ('int',), + "QTreeWidgetItem.childCount": (), + "QTreeWidgetItem.childIndicatorPolicy": (), + "QTreeWidgetItem.clone": (), + "QTreeWidgetItem.columnCount": (), + "QTreeWidgetItem.data": ('int', 'int'), + "QTreeWidgetItem.emitDataChanged": (), + "QTreeWidgetItem.flags": (), + "QTreeWidgetItem.font": ('int',), + "QTreeWidgetItem.foreground": ('int',), + "QTreeWidgetItem.icon": ('int',), + "QTreeWidgetItem.indexOfChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.insertChild": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidgetItem.insertChildren": ('int', 'list'), + "QTreeWidgetItem.isDisabled": (), + "QTreeWidgetItem.isExpanded": (), + "QTreeWidgetItem.isFirstColumnSpanned": (), + "QTreeWidgetItem.isHidden": (), + "QTreeWidgetItem.isSelected": (), + "QTreeWidgetItem.parent": (), + "QTreeWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTreeWidgetItem.removeChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.setBackground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setBackgroundColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setCheckState": ('int', 'PySide2.QtCore.Qt.CheckState'), + "QTreeWidgetItem.setChildIndicatorPolicy": ('PySide2.QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy',), + "QTreeWidgetItem.setData": ('int', 'int', 'Any'), + "QTreeWidgetItem.setDisabled": ('bool',), + "QTreeWidgetItem.setExpanded": ('bool',), + "QTreeWidgetItem.setFirstColumnSpanned": ('bool',), + "QTreeWidgetItem.setFlags": ('PySide2.libpyside.ItemFlags',), + "QTreeWidgetItem.setFont": ('int', 'PySide2.QtGui.QFont'), + "QTreeWidgetItem.setForeground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setHidden": ('bool',), + "QTreeWidgetItem.setIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTreeWidgetItem.setSelected": ('bool',), + "QTreeWidgetItem.setSizeHint": ('int', 'PySide2.QtCore.QSize'), + "QTreeWidgetItem.setStatusTip": ('int', 'str'), + "QTreeWidgetItem.setText": ('int', 'str'), + "QTreeWidgetItem.setTextAlignment": ('int', 'int'), + "QTreeWidgetItem.setTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setToolTip": ('int', 'str'), + "QTreeWidgetItem.setWhatsThis": ('int', 'str'), + "QTreeWidgetItem.sizeHint": ('int',), + "QTreeWidgetItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidgetItem.statusTip": ('int',), + "QTreeWidgetItem.takeChild": ('int',), + "QTreeWidgetItem.takeChildren": (), + "QTreeWidgetItem.text": ('int',), + "QTreeWidgetItem.textAlignment": ('int',), + "QTreeWidgetItem.textColor": ('int',), + "QTreeWidgetItem.toolTip": ('int',), + "QTreeWidgetItem.treeWidget": (), + "QTreeWidgetItem.type": (), + "QTreeWidgetItem.whatsThis": ('int',), + "QTreeWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTreeWidgetItemIterator: + "QTreeWidgetItemIterator.__init__": [('PySide2.QtWidgets.QTreeWidget', 'PySide2.libpyside.IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.libpyside.IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItemIterator',)], + "QTreeWidgetItemIterator.__copy__": (), + "QTreeWidgetItemIterator.value": (), + + # class PySide2.QtWidgets.QUndoCommand: + "QUndoCommand.__init__": [('PySide2.QtWidgets.QUndoCommand',), ('str', 'PySide2.QtWidgets.QUndoCommand')], + "QUndoCommand.actionText": (), + "QUndoCommand.child": ('int',), + "QUndoCommand.childCount": (), + "QUndoCommand.id": (), + "QUndoCommand.isObsolete": (), + "QUndoCommand.mergeWith": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoCommand.redo": (), + "QUndoCommand.setObsolete": ('bool',), + "QUndoCommand.setText": ('str',), + "QUndoCommand.text": (), + "QUndoCommand.undo": (), + + # class PySide2.QtWidgets.QUndoGroup: + "QUndoGroup.__init__": ('PySide2.QtCore.QObject',), + "QUndoGroup.activeStack": (), + "QUndoGroup.addStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.canRedo": (), + "QUndoGroup.canUndo": (), + "QUndoGroup.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.isClean": (), + "QUndoGroup.redo": (), + "QUndoGroup.redoText": (), + "QUndoGroup.removeStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.setActiveStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.stacks": (), + "QUndoGroup.undo": (), + "QUndoGroup.undoText": (), + + # class PySide2.QtWidgets.QUndoStack: + "QUndoStack.__init__": ('PySide2.QtCore.QObject',), + "QUndoStack.beginMacro": ('str',), + "QUndoStack.canRedo": (), + "QUndoStack.canUndo": (), + "QUndoStack.cleanIndex": (), + "QUndoStack.clear": (), + "QUndoStack.command": ('int',), + "QUndoStack.count": (), + "QUndoStack.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.endMacro": (), + "QUndoStack.index": (), + "QUndoStack.isActive": (), + "QUndoStack.isClean": (), + "QUndoStack.push": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoStack.redo": (), + "QUndoStack.redoText": (), + "QUndoStack.resetClean": (), + "QUndoStack.setActive": ('bool',), + "QUndoStack.setClean": (), + "QUndoStack.setIndex": ('int',), + "QUndoStack.setUndoLimit": ('int',), + "QUndoStack.text": ('int',), + "QUndoStack.undo": (), + "QUndoStack.undoLimit": (), + "QUndoStack.undoText": (), + + # class PySide2.QtWidgets.QUndoView: + "QUndoView.__init__": [('PySide2.QtWidgets.QUndoGroup', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QUndoStack', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QUndoView.cleanIcon": (), + "QUndoView.emptyLabel": (), + "QUndoView.group": (), + "QUndoView.setCleanIcon": ('PySide2.QtGui.QIcon',), + "QUndoView.setEmptyLabel": ('str',), + "QUndoView.setGroup": ('PySide2.QtWidgets.QUndoGroup',), + "QUndoView.setStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoView.stack": (), + + # class PySide2.QtWidgets.QVBoxLayout: + "QVBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QWhatsThis: + "QWhatsThis.createAction": ('PySide2.QtCore.QObject',), + "QWhatsThis.enterWhatsThisMode": (), + "QWhatsThis.hideText": (), + "QWhatsThis.inWhatsThisMode": (), + "QWhatsThis.leaveWhatsThisMode": (), + "QWhatsThis.showText": ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), + + # class PySide2.QtWidgets.QWidget: + "QWidget.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QWidget.acceptDrops": (), + "QWidget.accessibleDescription": (), + "QWidget.accessibleName": (), + "QWidget.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QWidget.actions": (), + "QWidget.activateWindow": (), + "QWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QWidget.addActions": ('list',), + "QWidget.adjustSize": (), + "QWidget.autoFillBackground": (), + "QWidget.backgroundRole": (), + "QWidget.backingStore": (), + "QWidget.baseSize": (), + "QWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QWidget.childAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.childrenRect": (), + "QWidget.childrenRegion": (), + "QWidget.clearFocus": (), + "QWidget.clearMask": (), + "QWidget.close": (), + "QWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QWidget.contentsMargins": (), + "QWidget.contentsRect": (), + "QWidget.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWidget.contextMenuPolicy": (), + "QWidget.create": ('int', 'bool', 'bool'), + "QWidget.createWinId": (), + "QWidget.createWindowContainer": ('PySide2.QtGui.QWindow', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QWidget.cursor": (), + "QWidget.destroy": ('bool', 'bool'), + "QWidget.devType": (), + "QWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWidget.effectiveWinId": (), + "QWidget.ensurePolished": (), + "QWidget.enterEvent": ('PySide2.QtCore.QEvent',), + "QWidget.event": ('PySide2.QtCore.QEvent',), + "QWidget.find": ('int',), + "QWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusNextChild": (), + "QWidget.focusNextPrevChild": ('bool',), + "QWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusPolicy": (), + "QWidget.focusPreviousChild": (), + "QWidget.focusProxy": (), + "QWidget.focusWidget": (), + "QWidget.font": (), + "QWidget.fontInfo": (), + "QWidget.fontMetrics": (), + "QWidget.foregroundRole": (), + "QWidget.frameGeometry": (), + "QWidget.frameSize": (), + "QWidget.geometry": (), + "QWidget.getContentsMargins": ('int', 'int', 'int', 'int'), + "QWidget.grab": ('PySide2.QtCore.QRect',), + "QWidget.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'PySide2.libpyside.GestureFlags'), + "QWidget.grabKeyboard": (), + "QWidget.grabMouse": [(), ('PySide2.QtGui.QCursor',)], + "QWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QWidget.graphicsEffect": (), + "QWidget.graphicsProxyWidget": (), + "QWidget.hasFocus": (), + "QWidget.hasHeightForWidth": (), + "QWidget.hasMouseTracking": (), + "QWidget.hasTabletTracking": (), + "QWidget.height": (), + "QWidget.heightForWidth": ('int',), + "QWidget.hide": (), + "QWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWidget.initPainter": ('PySide2.QtGui.QPainter',), + "QWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QWidget.inputMethodHints": (), + "QWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QWidget.internalWinId": (), + "QWidget.isActiveWindow": (), + "QWidget.isAncestorOf": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabled": (), + "QWidget.isEnabledTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabledToTLW": (), + "QWidget.isFullScreen": (), + "QWidget.isHidden": (), + "QWidget.isLeftToRight": (), + "QWidget.isMaximized": (), + "QWidget.isMinimized": (), + "QWidget.isModal": (), + "QWidget.isRightToLeft": (), + "QWidget.isTopLevel": (), + "QWidget.isVisible": (), + "QWidget.isVisibleTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isWindow": (), + "QWidget.isWindowModified": (), + "QWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyboardGrabber": (), + "QWidget.layout": (), + "QWidget.layoutDirection": (), + "QWidget.leaveEvent": ('PySide2.QtCore.QEvent',), + "QWidget.locale": (), + "QWidget.lower": (), + "QWidget.mapFrom": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapFromParent": ('PySide2.QtCore.QPoint',), + "QWidget.mapTo": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapToParent": ('PySide2.QtCore.QPoint',), + "QWidget.mask": (), + "QWidget.maximumHeight": (), + "QWidget.maximumSize": (), + "QWidget.maximumWidth": (), + "QWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QWidget.minimumHeight": (), + "QWidget.minimumSize": (), + "QWidget.minimumSizeHint": (), + "QWidget.minimumWidth": (), + "QWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseGrabber": (), + "QWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWidget.nativeParentWidget": (), + "QWidget.nextInFocusChain": (), + "QWidget.normalGeometry": (), + "QWidget.overrideWindowFlags": ('PySide2.libpyside.WindowFlags',), + "QWidget.overrideWindowState": ('PySide2.libpyside.WindowStates',), + "QWidget.paintEngine": (), + "QWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWidget.palette": (), + "QWidget.parentWidget": (), + "QWidget.pos": (), + "QWidget.previousInFocusChain": (), + "QWidget.raise_": (), + "QWidget.rect": (), + "QWidget.redirected": ('PySide2.QtCore.QPoint',), + "QWidget.releaseKeyboard": (), + "QWidget.releaseMouse": (), + "QWidget.releaseShortcut": ('int',), + "QWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QWidget.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'PySide2.libpyside.RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'PySide2.libpyside.RenderFlags')], + "QWidget.repaint": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWidget.restoreGeometry": ('PySide2.QtCore.QByteArray',), + "QWidget.saveGeometry": (), + "QWidget.scroll": [('int', 'int'), ('int', 'int', 'PySide2.QtCore.QRect')], + "QWidget.setAcceptDrops": ('bool',), + "QWidget.setAccessibleDescription": ('str',), + "QWidget.setAccessibleName": ('str',), + "QWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QWidget.setAutoFillBackground": ('bool',), + "QWidget.setBackgroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setBaseSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QWidget.setContextMenuPolicy": ('PySide2.QtCore.Qt.ContextMenuPolicy',), + "QWidget.setCursor": ('PySide2.QtGui.QCursor',), + "QWidget.setDisabled": ('bool',), + "QWidget.setEnabled": ('bool',), + "QWidget.setFixedHeight": ('int',), + "QWidget.setFixedSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setFixedWidth": ('int',), + "QWidget.setFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QWidget.setFocusProxy": ('PySide2.QtWidgets.QWidget',), + "QWidget.setFont": ('PySide2.QtGui.QFont',), + "QWidget.setForegroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWidget.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QWidget.setHidden": ('bool',), + "QWidget.setInputMethodHints": ('PySide2.libpyside.InputMethodHints',), + "QWidget.setLayout": ('PySide2.QtWidgets.QLayout',), + "QWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QWidget.setLocale": ('PySide2.QtCore.QLocale',), + "QWidget.setMask": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QRegion',)], + "QWidget.setMaximumHeight": ('int',), + "QWidget.setMaximumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMaximumWidth": ('int',), + "QWidget.setMinimumHeight": ('int',), + "QWidget.setMinimumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMinimumWidth": ('int',), + "QWidget.setMouseTracking": ('bool',), + "QWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QWidget.setParent": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QWidget.setShortcutEnabled": ('int', 'bool'), + "QWidget.setSizeIncrement": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy')], + "QWidget.setStatusTip": ('str',), + "QWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QWidget.setStyleSheet": ('str',), + "QWidget.setTabOrder": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), + "QWidget.setTabletTracking": ('bool',), + "QWidget.setToolTip": ('str',), + "QWidget.setToolTipDuration": ('int',), + "QWidget.setUpdatesEnabled": ('bool',), + "QWidget.setVisible": ('bool',), + "QWidget.setWhatsThis": ('str',), + "QWidget.setWindowFilePath": ('str',), + "QWidget.setWindowFlag": ('PySide2.QtCore.Qt.WindowType', 'bool'), + "QWidget.setWindowFlags": ('PySide2.libpyside.WindowFlags',), + "QWidget.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QWidget.setWindowIconText": ('str',), + "QWidget.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWidget.setWindowModified": ('bool',), + "QWidget.setWindowOpacity": ('float',), + "QWidget.setWindowRole": ('str',), + "QWidget.setWindowState": ('PySide2.libpyside.WindowStates',), + "QWidget.setWindowTitle": ('str',), + "QWidget.sharedPainter": (), + "QWidget.show": (), + "QWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWidget.showFullScreen": (), + "QWidget.showMaximized": (), + "QWidget.showMinimized": (), + "QWidget.showNormal": (), + "QWidget.size": (), + "QWidget.sizeHint": (), + "QWidget.sizeIncrement": (), + "QWidget.sizePolicy": (), + "QWidget.stackUnder": ('PySide2.QtWidgets.QWidget',), + "QWidget.statusTip": (), + "QWidget.style": (), + "QWidget.styleSheet": (), + "QWidget.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QWidget.toolTip": (), + "QWidget.toolTipDuration": (), + "QWidget.topLevelWidget": (), + "QWidget.underMouse": (), + "QWidget.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QWidget.unsetCursor": (), + "QWidget.unsetLayoutDirection": (), + "QWidget.unsetLocale": (), + "QWidget.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.updateGeometry": (), + "QWidget.updateMicroFocus": (), + "QWidget.updatesEnabled": (), + "QWidget.visibleRegion": (), + "QWidget.whatsThis": (), + "QWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWidget.width": (), + "QWidget.winId": (), + "QWidget.window": (), + "QWidget.windowFilePath": (), + "QWidget.windowFlags": (), + "QWidget.windowHandle": (), + "QWidget.windowIcon": (), + "QWidget.windowIconText": (), + "QWidget.windowModality": (), + "QWidget.windowOpacity": (), + "QWidget.windowRole": (), + "QWidget.windowState": (), + "QWidget.windowTitle": (), + "QWidget.windowType": (), + "QWidget.x": (), + "QWidget.y": (), + + # class PySide2.QtWidgets.QWidgetAction: + "QWidgetAction.__init__": ('PySide2.QtCore.QObject',), + "QWidgetAction.createWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.createdWidgets": (), + "QWidgetAction.defaultWidget": (), + "QWidgetAction.deleteWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.event": ('PySide2.QtCore.QEvent',), + "QWidgetAction.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QWidgetAction.releaseWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.requestWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.setDefaultWidget": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QWidgetItem: + "QWidgetItem.__init__": ('PySide2.QtWidgets.QWidget',), + "QWidgetItem.controlTypes": (), + "QWidgetItem.expandingDirections": (), + "QWidgetItem.geometry": (), + "QWidgetItem.hasHeightForWidth": (), + "QWidgetItem.heightForWidth": ('int',), + "QWidgetItem.isEmpty": (), + "QWidgetItem.maximumSize": (), + "QWidgetItem.minimumSize": (), + "QWidgetItem.setGeometry": ('PySide2.QtCore.QRect',), + "QWidgetItem.sizeHint": (), + "QWidgetItem.widget": (), + + # class PySide2.QtWidgets.QWizard: + "QWizard.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QWizard.addPage": ('PySide2.QtWidgets.QWizardPage',), + "QWizard.back": (), + "QWizard.button": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.cleanupPage": ('int',), + "QWizard.currentId": (), + "QWizard.currentPage": (), + "QWizard.done": ('int',), + "QWizard.event": ('PySide2.QtCore.QEvent',), + "QWizard.field": ('str',), + "QWizard.hasVisitedPage": ('int',), + "QWizard.initializePage": ('int',), + "QWizard.nextId": (), + "QWizard.options": (), + "QWizard.page": ('int',), + "QWizard.pageIds": (), + "QWizard.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWizard.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizard.removePage": ('int',), + "QWizard.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWizard.restart": (), + "QWizard.setButton": ('PySide2.QtWidgets.QWizard.WizardButton', 'PySide2.QtWidgets.QAbstractButton'), + "QWizard.setButtonLayout": ('list',), + "QWizard.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizard.setDefaultProperty": ('str', 'str', 'str'), + "QWizard.setField": ('str', 'Any'), + "QWizard.setOption": ('PySide2.QtWidgets.QWizard.WizardOption', 'bool'), + "QWizard.setOptions": ('PySide2.libpyside.WizardOptions',), + "QWizard.setPage": ('int', 'PySide2.QtWidgets.QWizardPage'), + "QWizard.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizard.setSideWidget": ('PySide2.QtWidgets.QWidget',), + "QWizard.setStartId": ('int',), + "QWizard.setSubTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setVisible": ('bool',), + "QWizard.setWizardStyle": ('PySide2.QtWidgets.QWizard.WizardStyle',), + "QWizard.sideWidget": (), + "QWizard.sizeHint": (), + "QWizard.startId": (), + "QWizard.subTitleFormat": (), + "QWizard.testOption": ('PySide2.QtWidgets.QWizard.WizardOption',), + "QWizard.titleFormat": (), + "QWizard.validateCurrentPage": (), + "QWizard.visitedPages": (), + "QWizard.wizardStyle": (), + + # class PySide2.QtWidgets.QWizardPage: + "QWizardPage.__init__": ('PySide2.QtWidgets.QWidget',), + "QWizardPage.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizardPage.cleanupPage": (), + "QWizardPage.field": ('str',), + "QWizardPage.initializePage": (), + "QWizardPage.isCommitPage": (), + "QWizardPage.isComplete": (), + "QWizardPage.isFinalPage": (), + "QWizardPage.nextId": (), + "QWizardPage.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizardPage.registerField": ('str', 'PySide2.QtWidgets.QWidget', 'str', 'str'), + "QWizardPage.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizardPage.setCommitPage": ('bool',), + "QWizardPage.setField": ('str', 'Any'), + "QWizardPage.setFinalPage": ('bool',), + "QWizardPage.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizardPage.setSubTitle": ('str',), + "QWizardPage.setTitle": ('str',), + "QWizardPage.subTitle": (), + "QWizardPage.title": (), + "QWizardPage.validatePage": (), + "QWizardPage.wizard": (), + }) + +# Module PySide2.QtPrintSupport +if "PySide2.QtPrintSupport" in sys.modules: + dict.update({ + + # class PySide2.QtPrintSupport.QAbstractPrintDialog: + "QAbstractPrintDialog.__init__": ('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), + "QAbstractPrintDialog.addEnabledOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.enabledOptions": (), + "QAbstractPrintDialog.exec_": (), + "QAbstractPrintDialog.fromPage": (), + "QAbstractPrintDialog.isOptionEnabled": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.maxPage": (), + "QAbstractPrintDialog.minPage": (), + "QAbstractPrintDialog.printRange": (), + "QAbstractPrintDialog.printer": (), + "QAbstractPrintDialog.setEnabledOptions": ('PySide2.libpyside.PrintDialogOptions',), + "QAbstractPrintDialog.setFromTo": ('int', 'int'), + "QAbstractPrintDialog.setMinMax": ('int', 'int'), + "QAbstractPrintDialog.setOptionTabs": ('list',), + "QAbstractPrintDialog.setPrintRange": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintRange',), + "QAbstractPrintDialog.toPage": (), + + # class PySide2.QtPrintSupport.QPageSetupDialog: + "QPageSetupDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPageSetupDialog.done": ('int',), + "QPageSetupDialog.exec_": (), + "QPageSetupDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPageSetupDialog.printer": (), + "QPageSetupDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintDialog: + "QPrintDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPrintDialog.done": ('int',), + "QPrintDialog.exec_": (), + "QPrintDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintDialog.options": (), + "QPrintDialog.setOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption', 'bool'), + "QPrintDialog.setOptions": ('PySide2.libpyside.PrintDialogOptions',), + "QPrintDialog.setVisible": ('bool',), + "QPrintDialog.testOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + + # class PySide2.QtPrintSupport.QPrintEngine: + "QPrintEngine.__init__": (), + "QPrintEngine.abort": (), + "QPrintEngine.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrintEngine.newPage": (), + "QPrintEngine.printerState": (), + "QPrintEngine.property": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey',), + "QPrintEngine.setProperty": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey', 'Any'), + + # class PySide2.QtPrintSupport.QPrintPreviewDialog: + "QPrintPreviewDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QPrintPreviewDialog.done": ('int',), + "QPrintPreviewDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintPreviewDialog.printer": (), + "QPrintPreviewDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintPreviewWidget: + "QPrintPreviewWidget.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QPrintPreviewWidget.currentPage": (), + "QPrintPreviewWidget.fitInView": (), + "QPrintPreviewWidget.fitToWidth": (), + "QPrintPreviewWidget.orientation": (), + "QPrintPreviewWidget.pageCount": (), + "QPrintPreviewWidget.print_": (), + "QPrintPreviewWidget.setAllPagesViewMode": (), + "QPrintPreviewWidget.setCurrentPage": ('int',), + "QPrintPreviewWidget.setFacingPagesViewMode": (), + "QPrintPreviewWidget.setLandscapeOrientation": (), + "QPrintPreviewWidget.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrintPreviewWidget.setPortraitOrientation": (), + "QPrintPreviewWidget.setSinglePageViewMode": (), + "QPrintPreviewWidget.setViewMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ViewMode',), + "QPrintPreviewWidget.setVisible": ('bool',), + "QPrintPreviewWidget.setZoomFactor": ('float',), + "QPrintPreviewWidget.setZoomMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ZoomMode',), + "QPrintPreviewWidget.updatePreview": (), + "QPrintPreviewWidget.viewMode": (), + "QPrintPreviewWidget.zoomFactor": (), + "QPrintPreviewWidget.zoomIn": ('float',), + "QPrintPreviewWidget.zoomMode": (), + "QPrintPreviewWidget.zoomOut": ('float',), + + # class PySide2.QtPrintSupport.QPrinter: + "QPrinter.__init__": [('PySide2.QtPrintSupport.QPrinter.PrinterMode',), ('PySide2.QtPrintSupport.QPrinterInfo', 'PySide2.QtPrintSupport.QPrinter.PrinterMode')], + "QPrinter.abort": (), + "QPrinter.actualNumCopies": (), + "QPrinter.collateCopies": (), + "QPrinter.colorMode": (), + "QPrinter.copyCount": (), + "QPrinter.creator": (), + "QPrinter.devType": (), + "QPrinter.docName": (), + "QPrinter.doubleSidedPrinting": (), + "QPrinter.duplex": (), + "QPrinter.fontEmbeddingEnabled": (), + "QPrinter.fromPage": (), + "QPrinter.fullPage": (), + "QPrinter.getPageMargins": ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit'), + "QPrinter.isValid": (), + "QPrinter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrinter.newPage": (), + "QPrinter.numCopies": (), + "QPrinter.orientation": (), + "QPrinter.outputFileName": (), + "QPrinter.outputFormat": (), + "QPrinter.pageOrder": (), + "QPrinter.pageRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.pageSize": (), + "QPrinter.paintEngine": (), + "QPrinter.paperName": (), + "QPrinter.paperRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSize": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSource": (), + "QPrinter.pdfVersion": (), + "QPrinter.printEngine": (), + "QPrinter.printProgram": (), + "QPrinter.printRange": (), + "QPrinter.printerName": (), + "QPrinter.printerState": (), + "QPrinter.resolution": (), + "QPrinter.setCollateCopies": ('bool',), + "QPrinter.setColorMode": ('PySide2.QtPrintSupport.QPrinter.ColorMode',), + "QPrinter.setCopyCount": ('int',), + "QPrinter.setCreator": ('str',), + "QPrinter.setDocName": ('str',), + "QPrinter.setDoubleSidedPrinting": ('bool',), + "QPrinter.setDuplex": ('PySide2.QtPrintSupport.QPrinter.DuplexMode',), + "QPrinter.setEngines": ('PySide2.QtPrintSupport.QPrintEngine', 'PySide2.QtGui.QPaintEngine'), + "QPrinter.setFontEmbeddingEnabled": ('bool',), + "QPrinter.setFromTo": ('int', 'int'), + "QPrinter.setFullPage": ('bool',), + "QPrinter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPrinter.setNumCopies": ('int',), + "QPrinter.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrinter.setOutputFileName": ('str',), + "QPrinter.setOutputFormat": ('PySide2.QtPrintSupport.QPrinter.OutputFormat',), + "QPrinter.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit')], + "QPrinter.setPageOrder": ('PySide2.QtPrintSupport.QPrinter.PageOrder',), + "QPrinter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPrinter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPrinter.setPaperName": ('str',), + "QPrinter.setPaperSize": [('PySide2.QtCore.QSizeF', 'PySide2.QtPrintSupport.QPrinter.Unit'), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPrinter.setPaperSource": ('PySide2.QtPrintSupport.QPrinter.PaperSource',), + "QPrinter.setPdfVersion": ('PySide2.QtGui.QPagedPaintDevice.PdfVersion',), + "QPrinter.setPrintProgram": ('str',), + "QPrinter.setPrintRange": ('PySide2.QtPrintSupport.QPrinter.PrintRange',), + "QPrinter.setPrinterName": ('str',), + "QPrinter.setResolution": ('int',), + "QPrinter.setWinPageSize": ('int',), + "QPrinter.supportedResolutions": (), + "QPrinter.supportsMultipleCopies": (), + "QPrinter.toPage": (), + "QPrinter.winPageSize": (), + + # class PySide2.QtPrintSupport.QPrinterInfo: + "QPrinterInfo.__init__": [(), ('PySide2.QtPrintSupport.QPrinter',), ('PySide2.QtPrintSupport.QPrinterInfo',)], + "QPrinterInfo.__copy__": (), + "QPrinterInfo.availablePrinterNames": (), + "QPrinterInfo.availablePrinters": (), + "QPrinterInfo.defaultDuplexMode": (), + "QPrinterInfo.defaultPageSize": (), + "QPrinterInfo.defaultPrinter": (), + "QPrinterInfo.defaultPrinterName": (), + "QPrinterInfo.description": (), + "QPrinterInfo.isDefault": (), + "QPrinterInfo.isNull": (), + "QPrinterInfo.isRemote": (), + "QPrinterInfo.location": (), + "QPrinterInfo.makeAndModel": (), + "QPrinterInfo.maximumPhysicalPageSize": (), + "QPrinterInfo.minimumPhysicalPageSize": (), + "QPrinterInfo.printerInfo": ('str',), + "QPrinterInfo.printerName": (), + "QPrinterInfo.state": (), + "QPrinterInfo.supportedDuplexModes": (), + "QPrinterInfo.supportedPageSizes": (), + "QPrinterInfo.supportedPaperSizes": (), + "QPrinterInfo.supportedResolutions": (), + "QPrinterInfo.supportedSizesWithNames": (), + "QPrinterInfo.supportsCustomPageSizes": (), + }) + +# Module PySide2.QtSql +if "PySide2.QtSql" in sys.modules: + dict.update({ + + # class PySide2.QtSql.QSql: + + # class PySide2.QtSql.QSqlDatabase: + "QSqlDatabase.__init__": [(), ('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlDriver',), ('str',)], + "QSqlDatabase.__copy__": (), + "QSqlDatabase.addDatabase": [('PySide2.QtSql.QSqlDriver', 'str'), ('str', 'str')], + "QSqlDatabase.cloneDatabase": ('PySide2.QtSql.QSqlDatabase', 'str'), + "QSqlDatabase.close": (), + "QSqlDatabase.commit": (), + "QSqlDatabase.connectOptions": (), + "QSqlDatabase.connectionName": (), + "QSqlDatabase.connectionNames": (), + "QSqlDatabase.contains": ('str',), + "QSqlDatabase.database": ('str', 'bool'), + "QSqlDatabase.databaseName": (), + "QSqlDatabase.driver": (), + "QSqlDatabase.driverName": (), + "QSqlDatabase.drivers": (), + "QSqlDatabase.exec_": ('str',), + "QSqlDatabase.hostName": (), + "QSqlDatabase.isDriverAvailable": ('str',), + "QSqlDatabase.isOpen": (), + "QSqlDatabase.isOpenError": (), + "QSqlDatabase.isValid": (), + "QSqlDatabase.lastError": (), + "QSqlDatabase.numericalPrecisionPolicy": (), + "QSqlDatabase.open": [(), ('str', 'str')], + "QSqlDatabase.password": (), + "QSqlDatabase.port": (), + "QSqlDatabase.primaryIndex": ('str',), + "QSqlDatabase.record": ('str',), + "QSqlDatabase.registerSqlDriver": ('str', 'PySide2.QtSql.QSqlDriverCreatorBase'), + "QSqlDatabase.removeDatabase": ('str',), + "QSqlDatabase.rollback": (), + "QSqlDatabase.setConnectOptions": ('str',), + "QSqlDatabase.setDatabaseName": ('str',), + "QSqlDatabase.setHostName": ('str',), + "QSqlDatabase.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDatabase.setPassword": ('str',), + "QSqlDatabase.setPort": ('int',), + "QSqlDatabase.setUserName": ('str',), + "QSqlDatabase.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDatabase.transaction": (), + "QSqlDatabase.userName": (), + + # class PySide2.QtSql.QSqlDriver: + "QSqlDriver.__init__": ('PySide2.QtCore.QObject',), + "QSqlDriver.beginTransaction": (), + "QSqlDriver.cancelQuery": (), + "QSqlDriver.close": (), + "QSqlDriver.commitTransaction": (), + "QSqlDriver.createResult": (), + "QSqlDriver.dbmsType": (), + "QSqlDriver.escapeIdentifier": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.formatValue": ('PySide2.QtSql.QSqlField', 'bool'), + "QSqlDriver.hasFeature": ('PySide2.QtSql.QSqlDriver.DriverFeature',), + "QSqlDriver.isIdentifierEscaped": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.isOpen": (), + "QSqlDriver.isOpenError": (), + "QSqlDriver.lastError": (), + "QSqlDriver.numericalPrecisionPolicy": (), + "QSqlDriver.open": ('str', 'str', 'str', 'str', 'int', 'str'), + "QSqlDriver.primaryIndex": ('str',), + "QSqlDriver.record": ('str',), + "QSqlDriver.rollbackTransaction": (), + "QSqlDriver.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlDriver.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDriver.setOpen": ('bool',), + "QSqlDriver.setOpenError": ('bool',), + "QSqlDriver.sqlStatement": ('PySide2.QtSql.QSqlDriver.StatementType', 'str', 'PySide2.QtSql.QSqlRecord', 'bool'), + "QSqlDriver.stripDelimiters": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.subscribeToNotification": ('str',), + "QSqlDriver.subscribedToNotifications": (), + "QSqlDriver.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDriver.unsubscribeFromNotification": ('str',), + + # class PySide2.QtSql.QSqlDriverCreatorBase: + "QSqlDriverCreatorBase.__init__": (), + "QSqlDriverCreatorBase.createObject": (), + + # class PySide2.QtSql.QSqlError: + "QSqlError.__init__": [('PySide2.QtSql.QSqlError',), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'int'), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'str')], + "QSqlError.__copy__": (), + "QSqlError.databaseText": (), + "QSqlError.driverText": (), + "QSqlError.isValid": (), + "QSqlError.nativeErrorCode": (), + "QSqlError.number": (), + "QSqlError.setDatabaseText": ('str',), + "QSqlError.setDriverText": ('str',), + "QSqlError.setNumber": ('int',), + "QSqlError.setType": ('PySide2.QtSql.QSqlError.ErrorType',), + "QSqlError.swap": ('PySide2.QtSql.QSqlError',), + "QSqlError.text": (), + "QSqlError.type": (), + + # class PySide2.QtSql.QSqlField: + "QSqlField.__init__": [('PySide2.QtSql.QSqlField',), ('str', 'type'), ('str', 'type', 'str')], + "QSqlField.__copy__": (), + "QSqlField.clear": (), + "QSqlField.defaultValue": (), + "QSqlField.isAutoValue": (), + "QSqlField.isGenerated": (), + "QSqlField.isNull": (), + "QSqlField.isReadOnly": (), + "QSqlField.isValid": (), + "QSqlField.length": (), + "QSqlField.name": (), + "QSqlField.precision": (), + "QSqlField.requiredStatus": (), + "QSqlField.setAutoValue": ('bool',), + "QSqlField.setDefaultValue": ('Any',), + "QSqlField.setGenerated": ('bool',), + "QSqlField.setLength": ('int',), + "QSqlField.setName": ('str',), + "QSqlField.setPrecision": ('int',), + "QSqlField.setReadOnly": ('bool',), + "QSqlField.setRequired": ('bool',), + "QSqlField.setRequiredStatus": ('PySide2.QtSql.QSqlField.RequiredStatus',), + "QSqlField.setSqlType": ('int',), + "QSqlField.setTableName": ('str',), + "QSqlField.setType": ('type',), + "QSqlField.setValue": ('Any',), + "QSqlField.tableName": (), + "QSqlField.type": (), + "QSqlField.typeID": (), + "QSqlField.value": (), + + # class PySide2.QtSql.QSqlIndex: + "QSqlIndex.__init__": [('PySide2.QtSql.QSqlIndex',), ('str', 'str')], + "QSqlIndex.__copy__": (), + "QSqlIndex.append": [('PySide2.QtSql.QSqlField',), ('PySide2.QtSql.QSqlField', 'bool')], + "QSqlIndex.cursorName": (), + "QSqlIndex.isDescending": ('int',), + "QSqlIndex.name": (), + "QSqlIndex.setCursorName": ('str',), + "QSqlIndex.setDescending": ('int', 'bool'), + "QSqlIndex.setName": ('str',), + + # class PySide2.QtSql.QSqlQuery: + "QSqlQuery.__init__": [('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlQuery',), ('PySide2.QtSql.QSqlResult',), ('str', 'PySide2.QtSql.QSqlDatabase')], + "QSqlQuery.__copy__": (), + "QSqlQuery.addBindValue": ('Any', 'PySide2.libpyside.ParamType'), + "QSqlQuery.at": (), + "QSqlQuery.bindValue": [('int', 'Any', 'PySide2.libpyside.ParamType'), ('str', 'Any', 'PySide2.libpyside.ParamType')], + "QSqlQuery.boundValue": [('int',), ('str',)], + "QSqlQuery.boundValues": (), + "QSqlQuery.clear": (), + "QSqlQuery.driver": (), + "QSqlQuery.execBatch": ('PySide2.QtSql.QSqlQuery.BatchExecutionMode',), + "QSqlQuery.exec_": [(), ('str',)], + "QSqlQuery.executedQuery": (), + "QSqlQuery.finish": (), + "QSqlQuery.first": (), + "QSqlQuery.isActive": (), + "QSqlQuery.isForwardOnly": (), + "QSqlQuery.isNull": [('int',), ('str',)], + "QSqlQuery.isSelect": (), + "QSqlQuery.isValid": (), + "QSqlQuery.last": (), + "QSqlQuery.lastError": (), + "QSqlQuery.lastInsertId": (), + "QSqlQuery.lastQuery": (), + "QSqlQuery.nextResult": (), + "QSqlQuery.numRowsAffected": (), + "QSqlQuery.numericalPrecisionPolicy": (), + "QSqlQuery.prepare": ('str',), + "QSqlQuery.previous": (), + "QSqlQuery.record": (), + "QSqlQuery.result": (), + "QSqlQuery.seek": ('int', 'bool'), + "QSqlQuery.setForwardOnly": ('bool',), + "QSqlQuery.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlQuery.size": (), + "QSqlQuery.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlQueryModel: + "QSqlQueryModel.__init__": ('PySide2.QtCore.QObject',), + "QSqlQueryModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginResetModel": (), + "QSqlQueryModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.clear": (), + "QSqlQueryModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlQueryModel.endInsertColumns": (), + "QSqlQueryModel.endInsertRows": (), + "QSqlQueryModel.endRemoveColumns": (), + "QSqlQueryModel.endRemoveRows": (), + "QSqlQueryModel.endResetModel": (), + "QSqlQueryModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlQueryModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.lastError": (), + "QSqlQueryModel.query": (), + "QSqlQueryModel.queryChange": (), + "QSqlQueryModel.record": [(), ('int',)], + "QSqlQueryModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.roleNames": (), + "QSqlQueryModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QSqlQueryModel.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlQueryModel.setQuery": [('PySide2.QtSql.QSqlQuery',), ('str', 'PySide2.QtSql.QSqlDatabase')], + + # class PySide2.QtSql.QSqlRecord: + "QSqlRecord.__init__": [(), ('PySide2.QtSql.QSqlRecord',)], + "QSqlRecord.__copy__": (), + "QSqlRecord.append": ('PySide2.QtSql.QSqlField',), + "QSqlRecord.clear": (), + "QSqlRecord.clearValues": (), + "QSqlRecord.contains": ('str',), + "QSqlRecord.count": (), + "QSqlRecord.field": [('int',), ('str',)], + "QSqlRecord.fieldName": ('int',), + "QSqlRecord.indexOf": ('str',), + "QSqlRecord.insert": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.isEmpty": (), + "QSqlRecord.isGenerated": [('int',), ('str',)], + "QSqlRecord.isNull": [('int',), ('str',)], + "QSqlRecord.keyValues": ('PySide2.QtSql.QSqlRecord',), + "QSqlRecord.remove": ('int',), + "QSqlRecord.replace": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.setGenerated": [('int', 'bool'), ('str', 'bool')], + "QSqlRecord.setNull": [('int',), ('str',)], + "QSqlRecord.setValue": [('int', 'Any'), ('str', 'Any')], + "QSqlRecord.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlRelation: + "QSqlRelation.__init__": [(), ('PySide2.QtSql.QSqlRelation',), ('str', 'str', 'str')], + "QSqlRelation.__copy__": (), + "QSqlRelation.displayColumn": (), + "QSqlRelation.indexColumn": (), + "QSqlRelation.isValid": (), + "QSqlRelation.swap": ('PySide2.QtSql.QSqlRelation',), + "QSqlRelation.tableName": (), + + # class PySide2.QtSql.QSqlRelationalDelegate: + "QSqlRelationalDelegate.__init__": ('PySide2.QtCore.QObject',), + "QSqlRelationalDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtSql.QSqlRelationalTableModel: + "QSqlRelationalTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlRelationalTableModel.clear": (), + "QSqlRelationalTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlRelationalTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlRelationalTableModel.orderByClause": (), + "QSqlRelationalTableModel.relation": ('int',), + "QSqlRelationalTableModel.relationModel": ('int',), + "QSqlRelationalTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalTableModel.revertRow": ('int',), + "QSqlRelationalTableModel.select": (), + "QSqlRelationalTableModel.selectStatement": (), + "QSqlRelationalTableModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSqlRelationalTableModel.setJoinMode": ('PySide2.QtSql.QSqlRelationalTableModel.JoinMode',), + "QSqlRelationalTableModel.setRelation": ('int', 'PySide2.QtSql.QSqlRelation'), + "QSqlRelationalTableModel.setTable": ('str',), + "QSqlRelationalTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + + # class PySide2.QtSql.QSqlResult: + "QSqlResult.__init__": ('PySide2.QtSql.QSqlDriver',), + "QSqlResult.addBindValue": ('Any', 'PySide2.libpyside.ParamType'), + "QSqlResult.at": (), + "QSqlResult.bindValue": [('int', 'Any', 'PySide2.libpyside.ParamType'), ('str', 'Any', 'PySide2.libpyside.ParamType')], + "QSqlResult.bindValueType": [('int',), ('str',)], + "QSqlResult.bindingSyntax": (), + "QSqlResult.boundValue": [('int',), ('str',)], + "QSqlResult.boundValueCount": (), + "QSqlResult.boundValueName": ('int',), + "QSqlResult.boundValues": (), + "QSqlResult.clear": (), + "QSqlResult.data": ('int',), + "QSqlResult.detachFromResultSet": (), + "QSqlResult.driver": (), + "QSqlResult.execBatch": ('bool',), + "QSqlResult.exec_": (), + "QSqlResult.executedQuery": (), + "QSqlResult.fetch": ('int',), + "QSqlResult.fetchFirst": (), + "QSqlResult.fetchLast": (), + "QSqlResult.fetchNext": (), + "QSqlResult.fetchPrevious": (), + "QSqlResult.handle": (), + "QSqlResult.hasOutValues": (), + "QSqlResult.isActive": (), + "QSqlResult.isForwardOnly": (), + "QSqlResult.isNull": ('int',), + "QSqlResult.isSelect": (), + "QSqlResult.isValid": (), + "QSqlResult.lastError": (), + "QSqlResult.lastInsertId": (), + "QSqlResult.lastQuery": (), + "QSqlResult.nextResult": (), + "QSqlResult.numRowsAffected": (), + "QSqlResult.numericalPrecisionPolicy": (), + "QSqlResult.prepare": ('str',), + "QSqlResult.record": (), + "QSqlResult.reset": ('str',), + "QSqlResult.resetBindCount": (), + "QSqlResult.savePrepare": ('str',), + "QSqlResult.setActive": ('bool',), + "QSqlResult.setAt": ('int',), + "QSqlResult.setForwardOnly": ('bool',), + "QSqlResult.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlResult.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlResult.setQuery": ('str',), + "QSqlResult.setSelect": ('bool',), + "QSqlResult.size": (), + + # class PySide2.QtSql.QSqlTableModel: + "QSqlTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlTableModel.clear": (), + "QSqlTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlTableModel.database": (), + "QSqlTableModel.deleteRowFromTable": ('int',), + "QSqlTableModel.editStrategy": (), + "QSqlTableModel.fieldIndex": ('str',), + "QSqlTableModel.filter": (), + "QSqlTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlTableModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.insertRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlTableModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.isDirty": [(), ('PySide2.QtCore.QModelIndex',)], + "QSqlTableModel.orderByClause": (), + "QSqlTableModel.primaryKey": (), + "QSqlTableModel.primaryValues": ('int',), + "QSqlTableModel.record": [(), ('int',)], + "QSqlTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.revert": (), + "QSqlTableModel.revertAll": (), + "QSqlTableModel.revertRow": ('int',), + "QSqlTableModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.select": (), + "QSqlTableModel.selectRow": ('int',), + "QSqlTableModel.selectStatement": (), + "QSqlTableModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSqlTableModel.setEditStrategy": ('PySide2.QtSql.QSqlTableModel.EditStrategy',), + "QSqlTableModel.setFilter": ('str',), + "QSqlTableModel.setPrimaryKey": ('PySide2.QtSql.QSqlIndex',), + "QSqlTableModel.setQuery": ('PySide2.QtSql.QSqlQuery',), + "QSqlTableModel.setRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.setSort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.setTable": ('str',), + "QSqlTableModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.submit": (), + "QSqlTableModel.submitAll": (), + "QSqlTableModel.tableName": (), + "QSqlTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + }) + +# Module PySide2.QtNetwork +if "PySide2.QtNetwork" in sys.modules: + dict.update({ + + # class PySide2.QtNetwork.QAbstractNetworkCache: + "QAbstractNetworkCache.__init__": ('PySide2.QtCore.QObject',), + "QAbstractNetworkCache.cacheSize": (), + "QAbstractNetworkCache.clear": (), + "QAbstractNetworkCache.data": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.insert": ('PySide2.QtCore.QIODevice',), + "QAbstractNetworkCache.metaData": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QAbstractNetworkCache.remove": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QAbstractSocket: + "QAbstractSocket.__init__": ('PySide2.QtNetwork.QAbstractSocket.SocketType', 'PySide2.QtCore.QObject'), + "QAbstractSocket.abort": (), + "QAbstractSocket.atEnd": (), + "QAbstractSocket.bind": [('PySide2.QtNetwork.QHostAddress', 'int', 'PySide2.libpyside.BindMode'), ('int', 'PySide2.libpyside.BindMode')], + "QAbstractSocket.bytesAvailable": (), + "QAbstractSocket.bytesToWrite": (), + "QAbstractSocket.canReadLine": (), + "QAbstractSocket.close": (), + "QAbstractSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'PySide2.libpyside.OpenMode'), ('str', 'int', 'PySide2.libpyside.OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QAbstractSocket.disconnectFromHost": (), + "QAbstractSocket.flush": (), + "QAbstractSocket.isSequential": (), + "QAbstractSocket.isValid": (), + "QAbstractSocket.localAddress": (), + "QAbstractSocket.localPort": (), + "QAbstractSocket.pauseMode": (), + "QAbstractSocket.peerAddress": (), + "QAbstractSocket.peerName": (), + "QAbstractSocket.peerPort": (), + "QAbstractSocket.proxy": (), + "QAbstractSocket.readBufferSize": (), + "QAbstractSocket.readData": ('str', 'int'), + "QAbstractSocket.readLineData": ('str', 'int'), + "QAbstractSocket.resume": (), + "QAbstractSocket.setLocalAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setLocalPort": ('int',), + "QAbstractSocket.setPauseMode": ('PySide2.libpyside.PauseModes',), + "QAbstractSocket.setPeerAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setPeerName": ('str',), + "QAbstractSocket.setPeerPort": ('int',), + "QAbstractSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QAbstractSocket.setReadBufferSize": ('int',), + "QAbstractSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'PySide2.libpyside.OpenMode'), + "QAbstractSocket.setSocketError": ('PySide2.QtNetwork.QAbstractSocket.SocketError',), + "QAbstractSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'Any'), + "QAbstractSocket.setSocketState": ('PySide2.QtNetwork.QAbstractSocket.SocketState',), + "QAbstractSocket.socketDescriptor": (), + "QAbstractSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QAbstractSocket.socketType": (), + "QAbstractSocket.state": (), + "QAbstractSocket.waitForBytesWritten": ('int',), + "QAbstractSocket.waitForConnected": ('int',), + "QAbstractSocket.waitForDisconnected": ('int',), + "QAbstractSocket.waitForReadyRead": ('int',), + "QAbstractSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QAuthenticator: + "QAuthenticator.__init__": [(), ('PySide2.QtNetwork.QAuthenticator',)], + "QAuthenticator.__copy__": (), + "QAuthenticator.isNull": (), + "QAuthenticator.option": ('str',), + "QAuthenticator.options": (), + "QAuthenticator.password": (), + "QAuthenticator.realm": (), + "QAuthenticator.setOption": ('str', 'Any'), + "QAuthenticator.setPassword": ('str',), + "QAuthenticator.setRealm": ('str',), + "QAuthenticator.setUser": ('str',), + "QAuthenticator.user": (), + + # class PySide2.QtNetwork.QDnsDomainNameRecord: + "QDnsDomainNameRecord.__init__": [(), ('PySide2.QtNetwork.QDnsDomainNameRecord',)], + "QDnsDomainNameRecord.__copy__": (), + "QDnsDomainNameRecord.name": (), + "QDnsDomainNameRecord.swap": ('PySide2.QtNetwork.QDnsDomainNameRecord',), + "QDnsDomainNameRecord.timeToLive": (), + "QDnsDomainNameRecord.value": (), + + # class PySide2.QtNetwork.QDnsHostAddressRecord: + "QDnsHostAddressRecord.__init__": [(), ('PySide2.QtNetwork.QDnsHostAddressRecord',)], + "QDnsHostAddressRecord.__copy__": (), + "QDnsHostAddressRecord.name": (), + "QDnsHostAddressRecord.swap": ('PySide2.QtNetwork.QDnsHostAddressRecord',), + "QDnsHostAddressRecord.timeToLive": (), + "QDnsHostAddressRecord.value": (), + + # class PySide2.QtNetwork.QDnsLookup: + "QDnsLookup.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtNetwork.QDnsLookup.Type', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtNetwork.QDnsLookup.Type', 'str', 'PySide2.QtNetwork.QHostAddress', 'PySide2.QtCore.QObject')], + "QDnsLookup.abort": (), + "QDnsLookup.canonicalNameRecords": (), + "QDnsLookup.error": (), + "QDnsLookup.errorString": (), + "QDnsLookup.hostAddressRecords": (), + "QDnsLookup.isFinished": (), + "QDnsLookup.lookup": (), + "QDnsLookup.mailExchangeRecords": (), + "QDnsLookup.name": (), + "QDnsLookup.nameServerRecords": (), + "QDnsLookup.nameserver": (), + "QDnsLookup.pointerRecords": (), + "QDnsLookup.serviceRecords": (), + "QDnsLookup.setName": ('str',), + "QDnsLookup.setNameserver": ('PySide2.QtNetwork.QHostAddress',), + "QDnsLookup.setType": ('PySide2.QtNetwork.QDnsLookup.Type',), + "QDnsLookup.textRecords": (), + "QDnsLookup.type": (), + + # class PySide2.QtNetwork.QDnsMailExchangeRecord: + "QDnsMailExchangeRecord.__init__": [(), ('PySide2.QtNetwork.QDnsMailExchangeRecord',)], + "QDnsMailExchangeRecord.__copy__": (), + "QDnsMailExchangeRecord.exchange": (), + "QDnsMailExchangeRecord.name": (), + "QDnsMailExchangeRecord.preference": (), + "QDnsMailExchangeRecord.swap": ('PySide2.QtNetwork.QDnsMailExchangeRecord',), + "QDnsMailExchangeRecord.timeToLive": (), + + # class PySide2.QtNetwork.QDnsServiceRecord: + "QDnsServiceRecord.__init__": [(), ('PySide2.QtNetwork.QDnsServiceRecord',)], + "QDnsServiceRecord.__copy__": (), + "QDnsServiceRecord.name": (), + "QDnsServiceRecord.port": (), + "QDnsServiceRecord.priority": (), + "QDnsServiceRecord.swap": ('PySide2.QtNetwork.QDnsServiceRecord',), + "QDnsServiceRecord.target": (), + "QDnsServiceRecord.timeToLive": (), + "QDnsServiceRecord.weight": (), + + # class PySide2.QtNetwork.QDnsTextRecord: + "QDnsTextRecord.__init__": [(), ('PySide2.QtNetwork.QDnsTextRecord',)], + "QDnsTextRecord.__copy__": (), + "QDnsTextRecord.name": (), + "QDnsTextRecord.swap": ('PySide2.QtNetwork.QDnsTextRecord',), + "QDnsTextRecord.timeToLive": (), + "QDnsTextRecord.values": (), + + # class PySide2.QtNetwork.QHostAddress: + "QHostAddress.__init__": [(), ('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.__copy__": (), + "QHostAddress.clear": (), + "QHostAddress.isBroadcast": (), + "QHostAddress.isEqual": ('PySide2.QtNetwork.QHostAddress', 'PySide2.libpyside.ConversionMode'), + "QHostAddress.isGlobal": (), + "QHostAddress.isInSubnet": [('PySide2.QtNetwork.QHostAddress', 'int'), ('Tuple[Any, Any]',)], + "QHostAddress.isLinkLocal": (), + "QHostAddress.isLoopback": (), + "QHostAddress.isMulticast": (), + "QHostAddress.isNull": (), + "QHostAddress.isSiteLocal": (), + "QHostAddress.isUniqueLocalUnicast": (), + "QHostAddress.parseSubnet": ('str',), + "QHostAddress.protocol": (), + "QHostAddress.scopeId": (), + "QHostAddress.setAddress": [('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.setScopeId": ('str',), + "QHostAddress.swap": ('PySide2.QtNetwork.QHostAddress',), + "QHostAddress.toIPv4Address": [(), ('bool',)], + "QHostAddress.toIPv6Address": (), + "QHostAddress.toString": (), + + # class PySide2.QtNetwork.QHostInfo: + "QHostInfo.__init__": [('PySide2.QtNetwork.QHostInfo',), ('int',)], + "QHostInfo.__copy__": (), + "QHostInfo.abortHostLookup": ('int',), + "QHostInfo.addresses": (), + "QHostInfo.error": (), + "QHostInfo.errorString": (), + "QHostInfo.fromName": ('str',), + "QHostInfo.hostName": (), + "QHostInfo.localDomainName": (), + "QHostInfo.localHostName": (), + "QHostInfo.lookupId": (), + "QHostInfo.setAddresses": ('list',), + "QHostInfo.setError": ('PySide2.QtNetwork.QHostInfo.HostInfoError',), + "QHostInfo.setErrorString": ('str',), + "QHostInfo.setHostName": ('str',), + "QHostInfo.setLookupId": ('int',), + "QHostInfo.swap": ('PySide2.QtNetwork.QHostInfo',), + + # class PySide2.QtNetwork.QHstsPolicy: + "QHstsPolicy.__init__": [(), ('PySide2.QtCore.QDateTime', 'PySide2.libpyside.PolicyFlags', 'str', 'PySide2.QtCore.QUrl.ParsingMode'), ('PySide2.QtNetwork.QHstsPolicy',)], + "QHstsPolicy.__copy__": (), + "QHstsPolicy.expiry": (), + "QHstsPolicy.host": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QHstsPolicy.includesSubDomains": (), + "QHstsPolicy.isExpired": (), + "QHstsPolicy.setExpiry": ('PySide2.QtCore.QDateTime',), + "QHstsPolicy.setHost": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QHstsPolicy.setIncludesSubDomains": ('bool',), + "QHstsPolicy.swap": ('PySide2.QtNetwork.QHstsPolicy',), + + # class PySide2.QtNetwork.QHttpMultiPart: + "QHttpMultiPart.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtNetwork.QHttpMultiPart.ContentType', 'PySide2.QtCore.QObject')], + "QHttpMultiPart.append": ('PySide2.QtNetwork.QHttpPart',), + "QHttpMultiPart.boundary": (), + "QHttpMultiPart.setBoundary": ('PySide2.QtCore.QByteArray',), + "QHttpMultiPart.setContentType": ('PySide2.QtNetwork.QHttpMultiPart.ContentType',), + + # class PySide2.QtNetwork.QHttpPart: + "QHttpPart.__init__": [(), ('PySide2.QtNetwork.QHttpPart',)], + "QHttpPart.__copy__": (), + "QHttpPart.setBody": ('PySide2.QtCore.QByteArray',), + "QHttpPart.setBodyDevice": ('PySide2.QtCore.QIODevice',), + "QHttpPart.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QHttpPart.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QHttpPart.swap": ('PySide2.QtNetwork.QHttpPart',), + + # class PySide2.QtNetwork.QIPv6Address: + "QIPv6Address.__init__": [(), ('PySide2.QtNetwork.QIPv6Address',)], + "QIPv6Address.__copy__": (), + + # class PySide2.QtNetwork.QLocalServer: + "QLocalServer.__init__": ('PySide2.QtCore.QObject',), + "QLocalServer.close": (), + "QLocalServer.errorString": (), + "QLocalServer.fullServerName": (), + "QLocalServer.hasPendingConnections": (), + "QLocalServer.incomingConnection": ('int',), + "QLocalServer.isListening": (), + "QLocalServer.listen": [('int',), ('str',)], + "QLocalServer.maxPendingConnections": (), + "QLocalServer.nextPendingConnection": (), + "QLocalServer.removeServer": ('str',), + "QLocalServer.serverError": (), + "QLocalServer.serverName": (), + "QLocalServer.setMaxPendingConnections": ('int',), + "QLocalServer.setSocketOptions": ('PySide2.libpyside.SocketOptions',), + "QLocalServer.socketDescriptor": (), + "QLocalServer.socketOptions": (), + "QLocalServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QLocalSocket: + "QLocalSocket.__init__": ('PySide2.QtCore.QObject',), + "QLocalSocket.abort": (), + "QLocalSocket.bytesAvailable": (), + "QLocalSocket.bytesToWrite": (), + "QLocalSocket.canReadLine": (), + "QLocalSocket.close": (), + "QLocalSocket.connectToServer": [('PySide2.libpyside.OpenMode',), ('str', 'PySide2.libpyside.OpenMode')], + "QLocalSocket.disconnectFromServer": (), + "QLocalSocket.flush": (), + "QLocalSocket.fullServerName": (), + "QLocalSocket.isSequential": (), + "QLocalSocket.isValid": (), + "QLocalSocket.open": ('PySide2.libpyside.OpenMode',), + "QLocalSocket.readBufferSize": (), + "QLocalSocket.readData": ('str', 'int'), + "QLocalSocket.serverName": (), + "QLocalSocket.setReadBufferSize": ('int',), + "QLocalSocket.setServerName": ('str',), + "QLocalSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QLocalSocket.LocalSocketState', 'PySide2.libpyside.OpenMode'), + "QLocalSocket.socketDescriptor": (), + "QLocalSocket.state": (), + "QLocalSocket.waitForBytesWritten": ('int',), + "QLocalSocket.waitForConnected": ('int',), + "QLocalSocket.waitForDisconnected": ('int',), + "QLocalSocket.waitForReadyRead": ('int',), + "QLocalSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkAccessManager: + "QNetworkAccessManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkAccessManager.activeConfiguration": (), + "QNetworkAccessManager.addStrictTransportSecurityHosts": ('list',), + "QNetworkAccessManager.cache": (), + "QNetworkAccessManager.clearAccessCache": (), + "QNetworkAccessManager.clearConnectionCache": (), + "QNetworkAccessManager.configuration": (), + "QNetworkAccessManager.connectToHost": ('str', 'int'), + "QNetworkAccessManager.connectToHostEncrypted": ('str', 'int', 'PySide2.QtNetwork.QSslConfiguration'), + "QNetworkAccessManager.cookieJar": (), + "QNetworkAccessManager.createRequest": ('PySide2.QtNetwork.QNetworkAccessManager.Operation', 'PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), + "QNetworkAccessManager.deleteResource": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.enableStrictTransportSecurityStore": ('bool', 'str'), + "QNetworkAccessManager.get": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.head": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.isStrictTransportSecurityEnabled": (), + "QNetworkAccessManager.isStrictTransportSecurityStoreEnabled": (), + "QNetworkAccessManager.networkAccessible": (), + "QNetworkAccessManager.post": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.proxy": (), + "QNetworkAccessManager.proxyFactory": (), + "QNetworkAccessManager.put": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.redirectPolicy": (), + "QNetworkAccessManager.sendCustomRequest": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.setCache": ('PySide2.QtNetwork.QAbstractNetworkCache',), + "QNetworkAccessManager.setConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkAccessManager.setCookieJar": ('PySide2.QtNetwork.QNetworkCookieJar',), + "QNetworkAccessManager.setNetworkAccessible": ('PySide2.QtNetwork.QNetworkAccessManager.NetworkAccessibility',), + "QNetworkAccessManager.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkAccessManager.setProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkAccessManager.setRedirectPolicy": ('PySide2.QtNetwork.QNetworkRequest.RedirectPolicy',), + "QNetworkAccessManager.setStrictTransportSecurityEnabled": ('bool',), + "QNetworkAccessManager.strictTransportSecurityHosts": (), + "QNetworkAccessManager.supportedSchemes": (), + "QNetworkAccessManager.supportedSchemesImplementation": (), + + # class PySide2.QtNetwork.QNetworkAddressEntry: + "QNetworkAddressEntry.__init__": [(), ('PySide2.QtNetwork.QNetworkAddressEntry',)], + "QNetworkAddressEntry.__copy__": (), + "QNetworkAddressEntry.broadcast": (), + "QNetworkAddressEntry.clearAddressLifetime": (), + "QNetworkAddressEntry.dnsEligibility": (), + "QNetworkAddressEntry.ip": (), + "QNetworkAddressEntry.isLifetimeKnown": (), + "QNetworkAddressEntry.isPermanent": (), + "QNetworkAddressEntry.isTemporary": (), + "QNetworkAddressEntry.netmask": (), + "QNetworkAddressEntry.prefixLength": (), + "QNetworkAddressEntry.setBroadcast": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setDnsEligibility": ('PySide2.QtNetwork.QNetworkAddressEntry.DnsEligibilityStatus',), + "QNetworkAddressEntry.setIp": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setNetmask": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setPrefixLength": ('int',), + "QNetworkAddressEntry.swap": ('PySide2.QtNetwork.QNetworkAddressEntry',), + + # class PySide2.QtNetwork.QNetworkCacheMetaData: + "QNetworkCacheMetaData.__init__": [(), ('PySide2.QtNetwork.QNetworkCacheMetaData',)], + "QNetworkCacheMetaData.__copy__": (), + "QNetworkCacheMetaData.attributes": (), + "QNetworkCacheMetaData.expirationDate": (), + "QNetworkCacheMetaData.isValid": (), + "QNetworkCacheMetaData.lastModified": (), + "QNetworkCacheMetaData.rawHeaders": (), + "QNetworkCacheMetaData.saveToDisk": (), + "QNetworkCacheMetaData.setAttributes": ('dict',), + "QNetworkCacheMetaData.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setLastModified": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setRawHeaders": ('list',), + "QNetworkCacheMetaData.setSaveToDisk": ('bool',), + "QNetworkCacheMetaData.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCacheMetaData.swap": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkCacheMetaData.url": (), + + # class PySide2.QtNetwork.QNetworkConfiguration: + "QNetworkConfiguration.__init__": [(), ('PySide2.QtNetwork.QNetworkConfiguration',)], + "QNetworkConfiguration.__copy__": (), + "QNetworkConfiguration.bearerType": (), + "QNetworkConfiguration.bearerTypeFamily": (), + "QNetworkConfiguration.bearerTypeName": (), + "QNetworkConfiguration.children": (), + "QNetworkConfiguration.connectTimeout": (), + "QNetworkConfiguration.identifier": (), + "QNetworkConfiguration.isRoamingAvailable": (), + "QNetworkConfiguration.isValid": (), + "QNetworkConfiguration.name": (), + "QNetworkConfiguration.purpose": (), + "QNetworkConfiguration.setConnectTimeout": ('int',), + "QNetworkConfiguration.state": (), + "QNetworkConfiguration.swap": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkConfiguration.type": (), + + # class PySide2.QtNetwork.QNetworkConfigurationManager: + "QNetworkConfigurationManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkConfigurationManager.allConfigurations": ('PySide2.libpyside.StateFlags',), + "QNetworkConfigurationManager.capabilities": (), + "QNetworkConfigurationManager.configurationFromIdentifier": ('str',), + "QNetworkConfigurationManager.defaultConfiguration": (), + "QNetworkConfigurationManager.isOnline": (), + "QNetworkConfigurationManager.updateConfigurations": (), + + # class PySide2.QtNetwork.QNetworkCookie: + "QNetworkCookie.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkCookie',)], + "QNetworkCookie.__copy__": (), + "QNetworkCookie.domain": (), + "QNetworkCookie.expirationDate": (), + "QNetworkCookie.hasSameIdentifier": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.isHttpOnly": (), + "QNetworkCookie.isSecure": (), + "QNetworkCookie.isSessionCookie": (), + "QNetworkCookie.name": (), + "QNetworkCookie.normalize": ('PySide2.QtCore.QUrl',), + "QNetworkCookie.parseCookies": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.path": (), + "QNetworkCookie.setDomain": ('str',), + "QNetworkCookie.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCookie.setHttpOnly": ('bool',), + "QNetworkCookie.setName": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.setPath": ('str',), + "QNetworkCookie.setSecure": ('bool',), + "QNetworkCookie.setValue": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.swap": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.toRawForm": ('PySide2.QtNetwork.QNetworkCookie.RawForm',), + "QNetworkCookie.value": (), + + # class PySide2.QtNetwork.QNetworkCookieJar: + "QNetworkCookieJar.__init__": ('PySide2.QtCore.QObject',), + "QNetworkCookieJar.allCookies": (), + "QNetworkCookieJar.cookiesForUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCookieJar.deleteCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.insertCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.setAllCookies": ('list',), + "QNetworkCookieJar.setCookiesFromUrl": ('list', 'PySide2.QtCore.QUrl'), + "QNetworkCookieJar.updateCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.validateCookie": ('PySide2.QtNetwork.QNetworkCookie', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtNetwork.QNetworkDatagram: + "QNetworkDatagram.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHostAddress', 'int'), ('PySide2.QtNetwork.QNetworkDatagram',)], + "QNetworkDatagram.__copy__": (), + "QNetworkDatagram.clear": (), + "QNetworkDatagram.data": (), + "QNetworkDatagram.destinationAddress": (), + "QNetworkDatagram.destinationPort": (), + "QNetworkDatagram.hopLimit": (), + "QNetworkDatagram.interfaceIndex": (), + "QNetworkDatagram.isNull": (), + "QNetworkDatagram.isValid": (), + "QNetworkDatagram.makeReply": ('PySide2.QtCore.QByteArray',), + "QNetworkDatagram.senderAddress": (), + "QNetworkDatagram.senderPort": (), + "QNetworkDatagram.setData": ('PySide2.QtCore.QByteArray',), + "QNetworkDatagram.setDestination": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QNetworkDatagram.setHopLimit": ('int',), + "QNetworkDatagram.setInterfaceIndex": ('int',), + "QNetworkDatagram.setSender": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QNetworkDatagram.swap": ('PySide2.QtNetwork.QNetworkDatagram',), + + # class PySide2.QtNetwork.QNetworkDiskCache: + "QNetworkDiskCache.__init__": ('PySide2.QtCore.QObject',), + "QNetworkDiskCache.cacheDirectory": (), + "QNetworkDiskCache.cacheSize": (), + "QNetworkDiskCache.clear": (), + "QNetworkDiskCache.data": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.expire": (), + "QNetworkDiskCache.fileMetaData": ('str',), + "QNetworkDiskCache.insert": ('PySide2.QtCore.QIODevice',), + "QNetworkDiskCache.maximumCacheSize": (), + "QNetworkDiskCache.metaData": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkDiskCache.remove": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.setCacheDirectory": ('str',), + "QNetworkDiskCache.setMaximumCacheSize": ('int',), + "QNetworkDiskCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QNetworkInterface: + "QNetworkInterface.__init__": [(), ('PySide2.QtNetwork.QNetworkInterface',)], + "QNetworkInterface.__copy__": (), + "QNetworkInterface.addressEntries": (), + "QNetworkInterface.allAddresses": (), + "QNetworkInterface.allInterfaces": (), + "QNetworkInterface.flags": (), + "QNetworkInterface.hardwareAddress": (), + "QNetworkInterface.humanReadableName": (), + "QNetworkInterface.index": (), + "QNetworkInterface.interfaceFromIndex": ('int',), + "QNetworkInterface.interfaceFromName": ('str',), + "QNetworkInterface.interfaceIndexFromName": ('str',), + "QNetworkInterface.interfaceNameFromIndex": ('int',), + "QNetworkInterface.isValid": (), + "QNetworkInterface.maximumTransmissionUnit": (), + "QNetworkInterface.name": (), + "QNetworkInterface.swap": ('PySide2.QtNetwork.QNetworkInterface',), + "QNetworkInterface.type": (), + + # class PySide2.QtNetwork.QNetworkProxy: + "QNetworkProxy.__init__": [(), ('PySide2.QtNetwork.QNetworkProxy',), ('PySide2.QtNetwork.QNetworkProxy.ProxyType', 'str', 'int', 'str', 'str')], + "QNetworkProxy.__copy__": (), + "QNetworkProxy.applicationProxy": (), + "QNetworkProxy.capabilities": (), + "QNetworkProxy.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkProxy.hostName": (), + "QNetworkProxy.isCachingProxy": (), + "QNetworkProxy.isTransparentProxy": (), + "QNetworkProxy.password": (), + "QNetworkProxy.port": (), + "QNetworkProxy.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.rawHeaderList": (), + "QNetworkProxy.setApplicationProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.setCapabilities": ('PySide2.libpyside.Capabilities',), + "QNetworkProxy.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkProxy.setHostName": ('str',), + "QNetworkProxy.setPassword": ('str',), + "QNetworkProxy.setPort": ('int',), + "QNetworkProxy.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkProxy.setType": ('PySide2.QtNetwork.QNetworkProxy.ProxyType',), + "QNetworkProxy.setUser": ('str',), + "QNetworkProxy.swap": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.type": (), + "QNetworkProxy.user": (), + + # class PySide2.QtNetwork.QNetworkProxyFactory: + "QNetworkProxyFactory.__init__": (), + "QNetworkProxyFactory.proxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.queryProxy": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.setApplicationProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkProxyFactory.setUseSystemConfiguration": ('bool',), + "QNetworkProxyFactory.systemProxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.usesSystemConfiguration": (), + + # class PySide2.QtNetwork.QNetworkProxyQuery: + "QNetworkProxyQuery.__init__": [(), ('PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkProxyQuery',), ('int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType')], + "QNetworkProxyQuery.__copy__": (), + "QNetworkProxyQuery.localPort": (), + "QNetworkProxyQuery.networkConfiguration": (), + "QNetworkProxyQuery.peerHostName": (), + "QNetworkProxyQuery.peerPort": (), + "QNetworkProxyQuery.protocolTag": (), + "QNetworkProxyQuery.queryType": (), + "QNetworkProxyQuery.setLocalPort": ('int',), + "QNetworkProxyQuery.setNetworkConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkProxyQuery.setPeerHostName": ('str',), + "QNetworkProxyQuery.setPeerPort": ('int',), + "QNetworkProxyQuery.setProtocolTag": ('str',), + "QNetworkProxyQuery.setQueryType": ('PySide2.QtNetwork.QNetworkProxyQuery.QueryType',), + "QNetworkProxyQuery.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkProxyQuery.swap": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyQuery.url": (), + + # class PySide2.QtNetwork.QNetworkReply: + "QNetworkReply.__init__": ('PySide2.QtCore.QObject',), + "QNetworkReply.abort": (), + "QNetworkReply.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute',), + "QNetworkReply.close": (), + "QNetworkReply.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkReply.ignoreSslErrors": [(), ('list',)], + "QNetworkReply.ignoreSslErrorsImplementation": ('list',), + "QNetworkReply.isFinished": (), + "QNetworkReply.isRunning": (), + "QNetworkReply.isSequential": (), + "QNetworkReply.manager": (), + "QNetworkReply.operation": (), + "QNetworkReply.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.rawHeaderList": (), + "QNetworkReply.rawHeaderPairs": (), + "QNetworkReply.readBufferSize": (), + "QNetworkReply.request": (), + "QNetworkReply.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkReply.setError": ('PySide2.QtNetwork.QNetworkReply.NetworkError', 'str'), + "QNetworkReply.setFinished": ('bool',), + "QNetworkReply.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkReply.setOperation": ('PySide2.QtNetwork.QNetworkAccessManager.Operation',), + "QNetworkReply.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkReply.setReadBufferSize": ('int',), + "QNetworkReply.setRequest": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkReply.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setSslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkReply.sslConfiguration": (), + "QNetworkReply.sslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.url": (), + "QNetworkReply.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkRequest: + "QNetworkRequest.__init__": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QNetworkRequest.__copy__": (), + "QNetworkRequest.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkRequest.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkRequest.maximumRedirectsAllowed": (), + "QNetworkRequest.originatingObject": (), + "QNetworkRequest.priority": (), + "QNetworkRequest.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.rawHeaderList": (), + "QNetworkRequest.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkRequest.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkRequest.setMaximumRedirectsAllowed": ('int',), + "QNetworkRequest.setOriginatingObject": ('PySide2.QtCore.QObject',), + "QNetworkRequest.setPriority": ('PySide2.QtNetwork.QNetworkRequest.Priority',), + "QNetworkRequest.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkRequest.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkRequest.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkRequest.sslConfiguration": (), + "QNetworkRequest.swap": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkRequest.url": (), + + # class PySide2.QtNetwork.QNetworkSession: + "QNetworkSession.__init__": ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QObject'), + "QNetworkSession.accept": (), + "QNetworkSession.activeTime": (), + "QNetworkSession.bytesReceived": (), + "QNetworkSession.bytesWritten": (), + "QNetworkSession.close": (), + "QNetworkSession.configuration": (), + "QNetworkSession.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.errorString": (), + "QNetworkSession.ignore": (), + "QNetworkSession.interface": (), + "QNetworkSession.isOpen": (), + "QNetworkSession.migrate": (), + "QNetworkSession.open": (), + "QNetworkSession.reject": (), + "QNetworkSession.sessionProperty": ('str',), + "QNetworkSession.setSessionProperty": ('str', 'Any'), + "QNetworkSession.state": (), + "QNetworkSession.stop": (), + "QNetworkSession.usagePolicies": (), + "QNetworkSession.waitForOpened": ('int',), + + # class PySide2.QtNetwork.QSsl: + + # class PySide2.QtNetwork.QSslCertificate: + "QSslCertificate.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtNetwork.QSslCertificate',)], + "QSslCertificate.__copy__": (), + "QSslCertificate.clear": (), + "QSslCertificate.digest": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QSslCertificate.effectiveDate": (), + "QSslCertificate.expiryDate": (), + "QSslCertificate.extensions": (), + "QSslCertificate.fromData": ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromDevice": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromPath": ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax'), + "QSslCertificate.handle": (), + "QSslCertificate.importPkcs12": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSslKey', 'PySide2.QtNetwork.QSslCertificate', 'list', 'PySide2.QtCore.QByteArray'), + "QSslCertificate.isBlacklisted": (), + "QSslCertificate.isNull": (), + "QSslCertificate.isSelfSigned": (), + "QSslCertificate.issuerInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.issuerInfoAttributes": (), + "QSslCertificate.publicKey": (), + "QSslCertificate.serialNumber": (), + "QSslCertificate.subjectAlternativeNames": (), + "QSslCertificate.subjectInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.subjectInfoAttributes": (), + "QSslCertificate.swap": ('PySide2.QtNetwork.QSslCertificate',), + "QSslCertificate.toDer": (), + "QSslCertificate.toPem": (), + "QSslCertificate.toText": (), + "QSslCertificate.verify": ('list', 'str'), + "QSslCertificate.version": (), + + # class PySide2.QtNetwork.QSslCertificateExtension: + "QSslCertificateExtension.__init__": [(), ('PySide2.QtNetwork.QSslCertificateExtension',)], + "QSslCertificateExtension.__copy__": (), + "QSslCertificateExtension.isCritical": (), + "QSslCertificateExtension.isSupported": (), + "QSslCertificateExtension.name": (), + "QSslCertificateExtension.oid": (), + "QSslCertificateExtension.swap": ('PySide2.QtNetwork.QSslCertificateExtension',), + "QSslCertificateExtension.value": (), + + # class PySide2.QtNetwork.QSslCipher: + "QSslCipher.__init__": [(), ('PySide2.QtNetwork.QSslCipher',), ('str',), ('str', 'PySide2.QtNetwork.QSsl.SslProtocol')], + "QSslCipher.__copy__": (), + "QSslCipher.authenticationMethod": (), + "QSslCipher.encryptionMethod": (), + "QSslCipher.isNull": (), + "QSslCipher.keyExchangeMethod": (), + "QSslCipher.name": (), + "QSslCipher.protocol": (), + "QSslCipher.protocolString": (), + "QSslCipher.supportedBits": (), + "QSslCipher.swap": ('PySide2.QtNetwork.QSslCipher',), + "QSslCipher.usedBits": (), + + # class PySide2.QtNetwork.QSslConfiguration: + "QSslConfiguration.__init__": [(), ('PySide2.QtNetwork.QSslConfiguration',)], + "QSslConfiguration.__copy__": (), + "QSslConfiguration.allowedNextProtocols": (), + "QSslConfiguration.backendConfiguration": (), + "QSslConfiguration.caCertificates": (), + "QSslConfiguration.ciphers": (), + "QSslConfiguration.defaultConfiguration": (), + "QSslConfiguration.diffieHellmanParameters": (), + "QSslConfiguration.ephemeralServerKey": (), + "QSslConfiguration.isNull": (), + "QSslConfiguration.localCertificate": (), + "QSslConfiguration.localCertificateChain": (), + "QSslConfiguration.nextNegotiatedProtocol": (), + "QSslConfiguration.nextProtocolNegotiationStatus": (), + "QSslConfiguration.peerCertificate": (), + "QSslConfiguration.peerCertificateChain": (), + "QSslConfiguration.peerVerifyDepth": (), + "QSslConfiguration.peerVerifyMode": (), + "QSslConfiguration.preSharedKeyIdentityHint": (), + "QSslConfiguration.privateKey": (), + "QSslConfiguration.protocol": (), + "QSslConfiguration.sessionCipher": (), + "QSslConfiguration.sessionProtocol": (), + "QSslConfiguration.sessionTicket": (), + "QSslConfiguration.sessionTicketLifeTimeHint": (), + "QSslConfiguration.setAllowedNextProtocols": ('list',), + "QSslConfiguration.setBackendConfiguration": ('dict',), + "QSslConfiguration.setBackendConfigurationOption": ('PySide2.QtCore.QByteArray', 'Any'), + "QSslConfiguration.setCaCertificates": ('list',), + "QSslConfiguration.setCiphers": ('list',), + "QSslConfiguration.setDefaultConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.setDiffieHellmanParameters": ('PySide2.QtNetwork.QSslDiffieHellmanParameters',), + "QSslConfiguration.setLocalCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslConfiguration.setLocalCertificateChain": ('list',), + "QSslConfiguration.setPeerVerifyDepth": ('int',), + "QSslConfiguration.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslConfiguration.setPreSharedKeyIdentityHint": ('PySide2.QtCore.QByteArray',), + "QSslConfiguration.setPrivateKey": ('PySide2.QtNetwork.QSslKey',), + "QSslConfiguration.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslConfiguration.setSessionTicket": ('PySide2.QtCore.QByteArray',), + "QSslConfiguration.setSslOption": ('PySide2.QtNetwork.QSsl.SslOption', 'bool'), + "QSslConfiguration.supportedCiphers": (), + "QSslConfiguration.swap": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.systemCaCertificates": (), + "QSslConfiguration.testSslOption": ('PySide2.QtNetwork.QSsl.SslOption',), + + # class PySide2.QtNetwork.QSslDiffieHellmanParameters: + "QSslDiffieHellmanParameters.__init__": [(), ('PySide2.QtNetwork.QSslDiffieHellmanParameters',)], + "QSslDiffieHellmanParameters.__copy__": (), + "QSslDiffieHellmanParameters.defaultParameters": (), + "QSslDiffieHellmanParameters.error": (), + "QSslDiffieHellmanParameters.errorString": (), + "QSslDiffieHellmanParameters.fromEncoded": [('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat')], + "QSslDiffieHellmanParameters.isEmpty": (), + "QSslDiffieHellmanParameters.isValid": (), + "QSslDiffieHellmanParameters.swap": ('PySide2.QtNetwork.QSslDiffieHellmanParameters',), + + # class PySide2.QtNetwork.QSslError: + "QSslError.__init__": [(), ('PySide2.QtNetwork.QSslError',), ('PySide2.QtNetwork.QSslError.SslError',), ('PySide2.QtNetwork.QSslError.SslError', 'PySide2.QtNetwork.QSslCertificate')], + "QSslError.__copy__": (), + "QSslError.certificate": (), + "QSslError.error": (), + "QSslError.errorString": (), + "QSslError.swap": ('PySide2.QtNetwork.QSslError',), + + # class PySide2.QtNetwork.QSslKey: + "QSslKey.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QSslKey',), ('int', 'PySide2.QtNetwork.QSsl.KeyType')], + "QSslKey.__copy__": (), + "QSslKey.algorithm": (), + "QSslKey.clear": (), + "QSslKey.handle": (), + "QSslKey.isNull": (), + "QSslKey.length": (), + "QSslKey.swap": ('PySide2.QtNetwork.QSslKey',), + "QSslKey.toDer": ('PySide2.QtCore.QByteArray',), + "QSslKey.toPem": ('PySide2.QtCore.QByteArray',), + "QSslKey.type": (), + + # class PySide2.QtNetwork.QSslPreSharedKeyAuthenticator: + "QSslPreSharedKeyAuthenticator.__init__": [(), ('PySide2.QtNetwork.QSslPreSharedKeyAuthenticator',)], + "QSslPreSharedKeyAuthenticator.__copy__": (), + "QSslPreSharedKeyAuthenticator.identity": (), + "QSslPreSharedKeyAuthenticator.identityHint": (), + "QSslPreSharedKeyAuthenticator.maximumIdentityLength": (), + "QSslPreSharedKeyAuthenticator.maximumPreSharedKeyLength": (), + "QSslPreSharedKeyAuthenticator.preSharedKey": (), + "QSslPreSharedKeyAuthenticator.setIdentity": ('PySide2.QtCore.QByteArray',), + "QSslPreSharedKeyAuthenticator.setPreSharedKey": ('PySide2.QtCore.QByteArray',), + "QSslPreSharedKeyAuthenticator.swap": ('PySide2.QtNetwork.QSslPreSharedKeyAuthenticator',), + + # class PySide2.QtNetwork.QSslSocket: + "QSslSocket.__init__": ('PySide2.QtCore.QObject',), + "QSslSocket.abort": (), + "QSslSocket.addCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.addDefaultCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addDefaultCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.atEnd": (), + "QSslSocket.bytesAvailable": (), + "QSslSocket.bytesToWrite": (), + "QSslSocket.caCertificates": (), + "QSslSocket.canReadLine": (), + "QSslSocket.ciphers": (), + "QSslSocket.close": (), + "QSslSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'PySide2.libpyside.OpenMode'), ('str', 'int', 'PySide2.libpyside.OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.connectToHostEncrypted": [('str', 'int', 'PySide2.libpyside.OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol'), ('str', 'int', 'str', 'PySide2.libpyside.OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.defaultCaCertificates": (), + "QSslSocket.defaultCiphers": (), + "QSslSocket.disconnectFromHost": (), + "QSslSocket.encryptedBytesAvailable": (), + "QSslSocket.encryptedBytesToWrite": (), + "QSslSocket.flush": (), + "QSslSocket.ignoreSslErrors": [(), ('list',)], + "QSslSocket.isEncrypted": (), + "QSslSocket.localCertificate": (), + "QSslSocket.localCertificateChain": (), + "QSslSocket.mode": (), + "QSslSocket.peerCertificate": (), + "QSslSocket.peerCertificateChain": (), + "QSslSocket.peerVerifyDepth": (), + "QSslSocket.peerVerifyMode": (), + "QSslSocket.peerVerifyName": (), + "QSslSocket.privateKey": (), + "QSslSocket.protocol": (), + "QSslSocket.readData": ('str', 'int'), + "QSslSocket.resume": (), + "QSslSocket.sessionCipher": (), + "QSslSocket.sessionProtocol": (), + "QSslSocket.setCaCertificates": ('list',), + "QSslSocket.setCiphers": [('list',), ('str',)], + "QSslSocket.setDefaultCaCertificates": ('list',), + "QSslSocket.setDefaultCiphers": ('list',), + "QSslSocket.setLocalCertificate": [('PySide2.QtNetwork.QSslCertificate',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat')], + "QSslSocket.setLocalCertificateChain": ('list',), + "QSslSocket.setPeerVerifyDepth": ('int',), + "QSslSocket.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslSocket.setPeerVerifyName": ('str',), + "QSslSocket.setPrivateKey": [('PySide2.QtNetwork.QSslKey',), ('str', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QByteArray')], + "QSslSocket.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslSocket.setReadBufferSize": ('int',), + "QSslSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'PySide2.libpyside.OpenMode'), + "QSslSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'Any'), + "QSslSocket.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QSslSocket.sslConfiguration": (), + "QSslSocket.sslLibraryBuildVersionNumber": (), + "QSslSocket.sslLibraryBuildVersionString": (), + "QSslSocket.sslLibraryVersionNumber": (), + "QSslSocket.sslLibraryVersionString": (), + "QSslSocket.startClientEncryption": (), + "QSslSocket.startServerEncryption": (), + "QSslSocket.supportedCiphers": (), + "QSslSocket.supportsSsl": (), + "QSslSocket.systemCaCertificates": (), + "QSslSocket.waitForBytesWritten": ('int',), + "QSslSocket.waitForConnected": ('int',), + "QSslSocket.waitForDisconnected": ('int',), + "QSslSocket.waitForEncrypted": ('int',), + "QSslSocket.waitForReadyRead": ('int',), + "QSslSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QTcpServer: + "QTcpServer.__init__": ('PySide2.QtCore.QObject',), + "QTcpServer.addPendingConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QTcpServer.close": (), + "QTcpServer.errorString": (), + "QTcpServer.hasPendingConnections": (), + "QTcpServer.incomingConnection": ('int',), + "QTcpServer.isListening": (), + "QTcpServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QTcpServer.maxPendingConnections": (), + "QTcpServer.nextPendingConnection": (), + "QTcpServer.pauseAccepting": (), + "QTcpServer.proxy": (), + "QTcpServer.resumeAccepting": (), + "QTcpServer.serverAddress": (), + "QTcpServer.serverError": (), + "QTcpServer.serverPort": (), + "QTcpServer.setMaxPendingConnections": ('int',), + "QTcpServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QTcpServer.setSocketDescriptor": ('int',), + "QTcpServer.socketDescriptor": (), + "QTcpServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QTcpSocket: + "QTcpSocket.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtNetwork.QUdpSocket: + "QUdpSocket.__init__": ('PySide2.QtCore.QObject',), + "QUdpSocket.hasPendingDatagrams": (), + "QUdpSocket.joinMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.leaveMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.multicastInterface": (), + "QUdpSocket.pendingDatagramSize": (), + "QUdpSocket.readDatagram": ('str', 'int', 'PySide2.QtNetwork.QHostAddress', 'int'), + "QUdpSocket.receiveDatagram": ('int',), + "QUdpSocket.setMulticastInterface": ('PySide2.QtNetwork.QNetworkInterface',), + "QUdpSocket.writeDatagram": [('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHostAddress', 'int'), ('PySide2.QtNetwork.QNetworkDatagram',)], + }) + +# Module PySide2.QtTest +if "PySide2.QtTest" in sys.modules: + dict.update({ + + # class PySide2.QtTest.QTest: + "QTest.addColumnInternal": ('int', 'str'), + "QTest.asciiToKey": ('Union[str, int]',), + "QTest.compare_string_helper": ('str', 'str', 'str', 'str', 'str', 'int'), + "QTest.createTouchDevice": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTest.currentAppName": (), + "QTest.currentDataTag": (), + "QTest.currentTestFailed": (), + "QTest.currentTestFunction": (), + "QTest.ignoreMessage": [('PySide2.QtCore.QtMsgType', 'PySide2.QtCore.QRegularExpression'), ('PySide2.QtCore.QtMsgType', 'str')], + "QTest.keyClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.keyClicks": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.libpyside.KeyboardModifiers', 'int'), + "QTest.keyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.keyPress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.keyRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.keySequence": [('PySide2.QtGui.QWindow', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QKeySequence')], + "QTest.keyToAscii": ('PySide2.QtCore.Qt.Key',), + "QTest.mouseClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseDClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseEvent": [('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseMove": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mousePress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.qCleanup": (), + "QTest.qElementData": ('str', 'int'), + "QTest.qExpectFail": ('str', 'str', 'PySide2.QtTest.QTest.TestFailMode', 'str', 'int'), + "QTest.qFindTestData": ('str', 'str', 'int', 'str'), + "QTest.qGlobalData": ('str', 'int'), + "QTest.qRun": (), + "QTest.qSkip": ('str', 'str', 'int'), + "QTest.qWaitForWindowActive": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.qWaitForWindowExposed": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.sendKeyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'str', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'str', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.setBenchmarkResult": ('float', 'PySide2.QtTest.QTest.QBenchmarkMetric'), + "QTest.setMainSourcePath": ('str', 'str'), + "QTest.simulateEvent": [('PySide2.QtGui.QWindow', 'bool', 'int', 'PySide2.libpyside.KeyboardModifiers', 'str', 'bool', 'int'), ('PySide2.QtWidgets.QWidget', 'bool', 'int', 'PySide2.libpyside.KeyboardModifiers', 'str', 'bool', 'int')], + "QTest.testObject": (), + "QTest.toPrettyCString": ('str', 'int'), + "QTest.touchEvent": [('PySide2.QtGui.QWindow', 'PySide2.QtGui.QTouchDevice', 'bool'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QTouchDevice', 'bool')], + }) + +# Module PySide2.QtConcurrent +if "PySide2.QtConcurrent" in sys.modules: + dict.update({ + + # class PySide2.QtConcurrent.QtConcurrent: + }) + +# Module PySide2.QtMacExtras +if "PySide2.QtMacExtras" in sys.modules: + dict.update({ + + # class PySide2.QtMacExtras.QMacPasteboardMime: + "QMacPasteboardMime.__init__": ('Union[str, int]',), + "QMacPasteboardMime.canConvert": ('str', 'str'), + "QMacPasteboardMime.convertFromMime": ('str', 'Any', 'str'), + "QMacPasteboardMime.convertToMime": ('str', 'list', 'str'), + "QMacPasteboardMime.convertorName": (), + "QMacPasteboardMime.count": ('PySide2.QtCore.QMimeData',), + "QMacPasteboardMime.flavorFor": ('str',), + "QMacPasteboardMime.mimeFor": ('str',), + + # class PySide2.QtMacExtras.QMacToolBar: + "QMacToolBar.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QMacToolBar.addAllowedItem": ('PySide2.QtGui.QIcon', 'str'), + "QMacToolBar.addAllowedStandardItem": ('PySide2.QtMacExtras.QMacToolBarItem.StandardItem',), + "QMacToolBar.addItem": ('PySide2.QtGui.QIcon', 'str'), + "QMacToolBar.addSeparator": (), + "QMacToolBar.addStandardItem": ('PySide2.QtMacExtras.QMacToolBarItem.StandardItem',), + "QMacToolBar.allowedItems": (), + "QMacToolBar.attachToWindow": ('PySide2.QtGui.QWindow',), + "QMacToolBar.detachFromWindow": (), + "QMacToolBar.items": (), + "QMacToolBar.setAllowedItems": ('list',), + "QMacToolBar.setItems": ('list',), + + # class PySide2.QtMacExtras.QMacToolBarItem: + "QMacToolBarItem.__init__": ('PySide2.QtCore.QObject',), + "QMacToolBarItem.icon": (), + "QMacToolBarItem.selectable": (), + "QMacToolBarItem.setIcon": ('PySide2.QtGui.QIcon',), + "QMacToolBarItem.setSelectable": ('bool',), + "QMacToolBarItem.setStandardItem": ('PySide2.QtMacExtras.QMacToolBarItem.StandardItem',), + "QMacToolBarItem.setText": ('str',), + "QMacToolBarItem.standardItem": (), + "QMacToolBarItem.text": (), + }) + +# Module PySide2.QtXml +if "PySide2.QtXml" in sys.modules: + dict.update({ + + # class PySide2.QtXml.QDomAttr: + "QDomAttr.__init__": [(), ('PySide2.QtXml.QDomAttr',)], + "QDomAttr.__copy__": (), + "QDomAttr.name": (), + "QDomAttr.nodeType": (), + "QDomAttr.ownerElement": (), + "QDomAttr.setValue": ('str',), + "QDomAttr.specified": (), + "QDomAttr.value": (), + + # class PySide2.QtXml.QDomCDATASection: + "QDomCDATASection.__init__": [(), ('PySide2.QtXml.QDomCDATASection',)], + "QDomCDATASection.__copy__": (), + "QDomCDATASection.nodeType": (), + + # class PySide2.QtXml.QDomCharacterData: + "QDomCharacterData.__init__": [(), ('PySide2.QtXml.QDomCharacterData',)], + "QDomCharacterData.__copy__": (), + "QDomCharacterData.appendData": ('str',), + "QDomCharacterData.data": (), + "QDomCharacterData.deleteData": ('int', 'int'), + "QDomCharacterData.insertData": ('int', 'str'), + "QDomCharacterData.length": (), + "QDomCharacterData.nodeType": (), + "QDomCharacterData.replaceData": ('int', 'int', 'str'), + "QDomCharacterData.setData": ('str',), + "QDomCharacterData.substringData": ('int', 'int'), + + # class PySide2.QtXml.QDomComment: + "QDomComment.__init__": [(), ('PySide2.QtXml.QDomComment',)], + "QDomComment.__copy__": (), + "QDomComment.nodeType": (), + + # class PySide2.QtXml.QDomDocument: + "QDomDocument.__init__": [(), ('PySide2.QtXml.QDomDocument',), ('PySide2.QtXml.QDomDocumentType',), ('str',)], + "QDomDocument.__copy__": (), + "QDomDocument.createAttribute": ('str',), + "QDomDocument.createAttributeNS": ('str', 'str'), + "QDomDocument.createCDATASection": ('str',), + "QDomDocument.createComment": ('str',), + "QDomDocument.createDocumentFragment": (), + "QDomDocument.createElement": ('str',), + "QDomDocument.createElementNS": ('str', 'str'), + "QDomDocument.createEntityReference": ('str',), + "QDomDocument.createProcessingInstruction": ('str', 'str'), + "QDomDocument.createTextNode": ('str',), + "QDomDocument.doctype": (), + "QDomDocument.documentElement": (), + "QDomDocument.elementById": ('str',), + "QDomDocument.elementsByTagName": ('str',), + "QDomDocument.elementsByTagNameNS": ('str', 'str'), + "QDomDocument.implementation": (), + "QDomDocument.importNode": ('PySide2.QtXml.QDomNode', 'bool'), + "QDomDocument.nodeType": (), + "QDomDocument.setContent": [('PySide2.QtCore.QByteArray', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QByteArray', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'PySide2.QtXml.QXmlReader', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'bool', 'str', 'int', 'int'), ('str', 'bool', 'str', 'int', 'int'), ('str', 'str', 'int', 'int')], + "QDomDocument.toByteArray": ('int',), + "QDomDocument.toString": ('int',), + + # class PySide2.QtXml.QDomDocumentFragment: + "QDomDocumentFragment.__init__": [(), ('PySide2.QtXml.QDomDocumentFragment',)], + "QDomDocumentFragment.__copy__": (), + "QDomDocumentFragment.nodeType": (), + + # class PySide2.QtXml.QDomDocumentType: + "QDomDocumentType.__init__": [(), ('PySide2.QtXml.QDomDocumentType',)], + "QDomDocumentType.__copy__": (), + "QDomDocumentType.entities": (), + "QDomDocumentType.internalSubset": (), + "QDomDocumentType.name": (), + "QDomDocumentType.nodeType": (), + "QDomDocumentType.notations": (), + "QDomDocumentType.publicId": (), + "QDomDocumentType.systemId": (), + + # class PySide2.QtXml.QDomElement: + "QDomElement.__init__": [(), ('PySide2.QtXml.QDomElement',)], + "QDomElement.__copy__": (), + "QDomElement.attribute": ('str', 'str'), + "QDomElement.attributeNS": ('str', 'str', 'str'), + "QDomElement.attributeNode": ('str',), + "QDomElement.attributeNodeNS": ('str', 'str'), + "QDomElement.attributes": (), + "QDomElement.elementsByTagName": ('str',), + "QDomElement.elementsByTagNameNS": ('str', 'str'), + "QDomElement.hasAttribute": ('str',), + "QDomElement.hasAttributeNS": ('str', 'str'), + "QDomElement.nodeType": (), + "QDomElement.removeAttribute": ('str',), + "QDomElement.removeAttributeNS": ('str', 'str'), + "QDomElement.removeAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttribute": [('str', 'float'), ('str', 'int'), ('str', 'str')], + "QDomElement.setAttributeNS": [('str', 'str', 'float'), ('str', 'str', 'int'), ('str', 'str', 'str')], + "QDomElement.setAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttributeNodeNS": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setTagName": ('str',), + "QDomElement.tagName": (), + "QDomElement.text": (), + + # class PySide2.QtXml.QDomEntity: + "QDomEntity.__init__": [(), ('PySide2.QtXml.QDomEntity',)], + "QDomEntity.__copy__": (), + "QDomEntity.nodeType": (), + "QDomEntity.notationName": (), + "QDomEntity.publicId": (), + "QDomEntity.systemId": (), + + # class PySide2.QtXml.QDomEntityReference: + "QDomEntityReference.__init__": [(), ('PySide2.QtXml.QDomEntityReference',)], + "QDomEntityReference.__copy__": (), + "QDomEntityReference.nodeType": (), + + # class PySide2.QtXml.QDomImplementation: + "QDomImplementation.__init__": [(), ('PySide2.QtXml.QDomImplementation',)], + "QDomImplementation.__copy__": (), + "QDomImplementation.createDocument": ('str', 'str', 'PySide2.QtXml.QDomDocumentType'), + "QDomImplementation.createDocumentType": ('str', 'str', 'str'), + "QDomImplementation.hasFeature": ('str', 'str'), + "QDomImplementation.invalidDataPolicy": (), + "QDomImplementation.isNull": (), + "QDomImplementation.setInvalidDataPolicy": ('PySide2.QtXml.QDomImplementation.InvalidDataPolicy',), + + # class PySide2.QtXml.QDomNamedNodeMap: + "QDomNamedNodeMap.__init__": [(), ('PySide2.QtXml.QDomNamedNodeMap',)], + "QDomNamedNodeMap.__copy__": (), + "QDomNamedNodeMap.contains": ('str',), + "QDomNamedNodeMap.count": (), + "QDomNamedNodeMap.isEmpty": (), + "QDomNamedNodeMap.item": ('int',), + "QDomNamedNodeMap.length": (), + "QDomNamedNodeMap.namedItem": ('str',), + "QDomNamedNodeMap.namedItemNS": ('str', 'str'), + "QDomNamedNodeMap.removeNamedItem": ('str',), + "QDomNamedNodeMap.removeNamedItemNS": ('str', 'str'), + "QDomNamedNodeMap.setNamedItem": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.setNamedItemNS": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.size": (), + + # class PySide2.QtXml.QDomNode: + "QDomNode.__init__": [(), ('PySide2.QtXml.QDomNode',)], + "QDomNode.__copy__": (), + "QDomNode.appendChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.attributes": (), + "QDomNode.childNodes": (), + "QDomNode.clear": (), + "QDomNode.cloneNode": ('bool',), + "QDomNode.columnNumber": (), + "QDomNode.firstChild": (), + "QDomNode.firstChildElement": ('str',), + "QDomNode.hasAttributes": (), + "QDomNode.hasChildNodes": (), + "QDomNode.insertAfter": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.insertBefore": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.isAttr": (), + "QDomNode.isCDATASection": (), + "QDomNode.isCharacterData": (), + "QDomNode.isComment": (), + "QDomNode.isDocument": (), + "QDomNode.isDocumentFragment": (), + "QDomNode.isDocumentType": (), + "QDomNode.isElement": (), + "QDomNode.isEntity": (), + "QDomNode.isEntityReference": (), + "QDomNode.isNotation": (), + "QDomNode.isNull": (), + "QDomNode.isProcessingInstruction": (), + "QDomNode.isSupported": ('str', 'str'), + "QDomNode.isText": (), + "QDomNode.lastChild": (), + "QDomNode.lastChildElement": ('str',), + "QDomNode.lineNumber": (), + "QDomNode.localName": (), + "QDomNode.namedItem": ('str',), + "QDomNode.namespaceURI": (), + "QDomNode.nextSibling": (), + "QDomNode.nextSiblingElement": ('str',), + "QDomNode.nodeName": (), + "QDomNode.nodeType": (), + "QDomNode.nodeValue": (), + "QDomNode.normalize": (), + "QDomNode.ownerDocument": (), + "QDomNode.parentNode": (), + "QDomNode.prefix": (), + "QDomNode.previousSibling": (), + "QDomNode.previousSiblingElement": ('str',), + "QDomNode.removeChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.replaceChild": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.save": ('PySide2.QtCore.QTextStream', 'int', 'PySide2.QtXml.QDomNode.EncodingPolicy'), + "QDomNode.setNodeValue": ('str',), + "QDomNode.setPrefix": ('str',), + "QDomNode.toAttr": (), + "QDomNode.toCDATASection": (), + "QDomNode.toCharacterData": (), + "QDomNode.toComment": (), + "QDomNode.toDocument": (), + "QDomNode.toDocumentFragment": (), + "QDomNode.toDocumentType": (), + "QDomNode.toElement": (), + "QDomNode.toEntity": (), + "QDomNode.toEntityReference": (), + "QDomNode.toNotation": (), + "QDomNode.toProcessingInstruction": (), + "QDomNode.toText": (), + + # class PySide2.QtXml.QDomNodeList: + "QDomNodeList.__init__": [(), ('PySide2.QtXml.QDomNodeList',)], + "QDomNodeList.__copy__": (), + "QDomNodeList.at": ('int',), + "QDomNodeList.count": (), + "QDomNodeList.isEmpty": (), + "QDomNodeList.item": ('int',), + "QDomNodeList.length": (), + "QDomNodeList.size": (), + + # class PySide2.QtXml.QDomNotation: + "QDomNotation.__init__": [(), ('PySide2.QtXml.QDomNotation',)], + "QDomNotation.__copy__": (), + "QDomNotation.nodeType": (), + "QDomNotation.publicId": (), + "QDomNotation.systemId": (), + + # class PySide2.QtXml.QDomProcessingInstruction: + "QDomProcessingInstruction.__init__": [(), ('PySide2.QtXml.QDomProcessingInstruction',)], + "QDomProcessingInstruction.__copy__": (), + "QDomProcessingInstruction.data": (), + "QDomProcessingInstruction.nodeType": (), + "QDomProcessingInstruction.setData": ('str',), + "QDomProcessingInstruction.target": (), + + # class PySide2.QtXml.QDomText: + "QDomText.__init__": [(), ('PySide2.QtXml.QDomText',)], + "QDomText.__copy__": (), + "QDomText.nodeType": (), + "QDomText.splitText": ('int',), + + # class PySide2.QtXml.QXmlAttributes: + "QXmlAttributes.__init__": [(), ('PySide2.QtXml.QXmlAttributes',)], + "QXmlAttributes.__copy__": (), + "QXmlAttributes.append": ('str', 'str', 'str', 'str'), + "QXmlAttributes.clear": (), + "QXmlAttributes.count": (), + "QXmlAttributes.index": [('str',), ('str', 'str')], + "QXmlAttributes.length": (), + "QXmlAttributes.localName": ('int',), + "QXmlAttributes.qName": ('int',), + "QXmlAttributes.swap": ('PySide2.QtXml.QXmlAttributes',), + "QXmlAttributes.type": [('int',), ('str',), ('str', 'str')], + "QXmlAttributes.uri": ('int',), + "QXmlAttributes.value": [('int',), ('str',), ('str', 'str')], + + # class PySide2.QtXml.QXmlContentHandler: + "QXmlContentHandler.__init__": (), + "QXmlContentHandler.characters": ('str',), + "QXmlContentHandler.endDocument": (), + "QXmlContentHandler.endElement": ('str', 'str', 'str'), + "QXmlContentHandler.endPrefixMapping": ('str',), + "QXmlContentHandler.errorString": (), + "QXmlContentHandler.ignorableWhitespace": ('str',), + "QXmlContentHandler.processingInstruction": ('str', 'str'), + "QXmlContentHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlContentHandler.skippedEntity": ('str',), + "QXmlContentHandler.startDocument": (), + "QXmlContentHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlContentHandler.startPrefixMapping": ('str', 'str'), + + # class PySide2.QtXml.QXmlDTDHandler: + "QXmlDTDHandler.__init__": (), + "QXmlDTDHandler.errorString": (), + "QXmlDTDHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDTDHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + + # class PySide2.QtXml.QXmlDeclHandler: + "QXmlDeclHandler.__init__": (), + "QXmlDeclHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDeclHandler.errorString": (), + "QXmlDeclHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDeclHandler.internalEntityDecl": ('str', 'str'), + + # class PySide2.QtXml.QXmlDefaultHandler: + "QXmlDefaultHandler.__init__": (), + "QXmlDefaultHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDefaultHandler.characters": ('str',), + "QXmlDefaultHandler.comment": ('str',), + "QXmlDefaultHandler.endCDATA": (), + "QXmlDefaultHandler.endDTD": (), + "QXmlDefaultHandler.endDocument": (), + "QXmlDefaultHandler.endElement": ('str', 'str', 'str'), + "QXmlDefaultHandler.endEntity": ('str',), + "QXmlDefaultHandler.endPrefixMapping": ('str',), + "QXmlDefaultHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.errorString": (), + "QXmlDefaultHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.ignorableWhitespace": ('str',), + "QXmlDefaultHandler.internalEntityDecl": ('str', 'str'), + "QXmlDefaultHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.processingInstruction": ('str', 'str'), + "QXmlDefaultHandler.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + "QXmlDefaultHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlDefaultHandler.skippedEntity": ('str',), + "QXmlDefaultHandler.startCDATA": (), + "QXmlDefaultHandler.startDTD": ('str', 'str', 'str'), + "QXmlDefaultHandler.startDocument": (), + "QXmlDefaultHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlDefaultHandler.startEntity": ('str',), + "QXmlDefaultHandler.startPrefixMapping": ('str', 'str'), + "QXmlDefaultHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + "QXmlDefaultHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlEntityResolver: + "QXmlEntityResolver.__init__": (), + "QXmlEntityResolver.errorString": (), + "QXmlEntityResolver.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + + # class PySide2.QtXml.QXmlErrorHandler: + "QXmlErrorHandler.__init__": (), + "QXmlErrorHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.errorString": (), + "QXmlErrorHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlInputSource: + "QXmlInputSource.__init__": [(), ('PySide2.QtCore.QIODevice',)], + "QXmlInputSource.data": (), + "QXmlInputSource.fetchData": (), + "QXmlInputSource.fromRawData": ('PySide2.QtCore.QByteArray', 'bool'), + "QXmlInputSource.reset": (), + "QXmlInputSource.setData": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtXml.QXmlLexicalHandler: + "QXmlLexicalHandler.__init__": (), + "QXmlLexicalHandler.comment": ('str',), + "QXmlLexicalHandler.endCDATA": (), + "QXmlLexicalHandler.endDTD": (), + "QXmlLexicalHandler.endEntity": ('str',), + "QXmlLexicalHandler.errorString": (), + "QXmlLexicalHandler.startCDATA": (), + "QXmlLexicalHandler.startDTD": ('str', 'str', 'str'), + "QXmlLexicalHandler.startEntity": ('str',), + + # class PySide2.QtXml.QXmlLocator: + "QXmlLocator.__init__": (), + "QXmlLocator.columnNumber": (), + "QXmlLocator.lineNumber": (), + + # class PySide2.QtXml.QXmlNamespaceSupport: + "QXmlNamespaceSupport.__init__": (), + "QXmlNamespaceSupport.popContext": (), + "QXmlNamespaceSupport.prefix": ('str',), + "QXmlNamespaceSupport.prefixes": [(), ('str',)], + "QXmlNamespaceSupport.processName": ('str', 'bool', 'str', 'str'), + "QXmlNamespaceSupport.pushContext": (), + "QXmlNamespaceSupport.reset": (), + "QXmlNamespaceSupport.setPrefix": ('str', 'str'), + "QXmlNamespaceSupport.splitName": ('str', 'str', 'str'), + "QXmlNamespaceSupport.uri": ('str',), + + # class PySide2.QtXml.QXmlParseException: + "QXmlParseException.__init__": [('PySide2.QtXml.QXmlParseException',), ('str', 'int', 'int', 'str', 'str')], + "QXmlParseException.columnNumber": (), + "QXmlParseException.lineNumber": (), + "QXmlParseException.message": (), + "QXmlParseException.publicId": (), + "QXmlParseException.systemId": (), + + # class PySide2.QtXml.QXmlReader: + "QXmlReader.__init__": (), + "QXmlReader.DTDHandler": (), + "QXmlReader.contentHandler": (), + "QXmlReader.declHandler": (), + "QXmlReader.entityResolver": (), + "QXmlReader.errorHandler": (), + "QXmlReader.feature": ('str', 'bool'), + "QXmlReader.hasFeature": ('str',), + "QXmlReader.hasProperty": ('str',), + "QXmlReader.lexicalHandler": (), + "QXmlReader.parse": ('PySide2.QtXml.QXmlInputSource',), + "QXmlReader.property": ('str', 'bool'), + "QXmlReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlReader.setFeature": ('str', 'bool'), + "QXmlReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlReader.setProperty": ('str', 'int'), + + # class PySide2.QtXml.QXmlSimpleReader: + "QXmlSimpleReader.__init__": (), + "QXmlSimpleReader.DTDHandler": (), + "QXmlSimpleReader.contentHandler": (), + "QXmlSimpleReader.declHandler": (), + "QXmlSimpleReader.entityResolver": (), + "QXmlSimpleReader.errorHandler": (), + "QXmlSimpleReader.feature": ('str', 'bool'), + "QXmlSimpleReader.hasFeature": ('str',), + "QXmlSimpleReader.hasProperty": ('str',), + "QXmlSimpleReader.lexicalHandler": (), + "QXmlSimpleReader.parse": [('PySide2.QtXml.QXmlInputSource',), ('PySide2.QtXml.QXmlInputSource', 'bool')], + "QXmlSimpleReader.parseContinue": (), + "QXmlSimpleReader.property": ('str', 'bool'), + "QXmlSimpleReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlSimpleReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlSimpleReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlSimpleReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlSimpleReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlSimpleReader.setFeature": ('str', 'bool'), + "QXmlSimpleReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlSimpleReader.setProperty": ('str', 'int'), + }) + +# Module PySide2.QtXmlPatterns +if "PySide2.QtXmlPatterns" in sys.modules: + dict.update({ + + # class PySide2.QtXmlPatterns.QAbstractMessageHandler: + "QAbstractMessageHandler.__init__": ('PySide2.QtCore.QObject',), + "QAbstractMessageHandler.handleMessage": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + "QAbstractMessageHandler.message": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + + # class PySide2.QtXmlPatterns.QAbstractUriResolver: + "QAbstractUriResolver.__init__": ('PySide2.QtCore.QObject',), + "QAbstractUriResolver.resolve": ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtXmlPatterns.QAbstractXmlNodeModel: + "QAbstractXmlNodeModel.__init__": (), + "QAbstractXmlNodeModel.attributes": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.baseUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.compareOrder": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.createIndex": [('int',), ('int', 'int')], + "QAbstractXmlNodeModel.documentUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.elementById": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.isDeepEqual": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.kind": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.name": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceBindings": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceForPrefix": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'Missing(PySide2.QtXmlPatterns.QXmlName.PrefixCode)'), + "QAbstractXmlNodeModel.nextFromSimpleAxis": ('PySide2.QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.nodesByIdref": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.root": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.sendNamespaces": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QAbstractXmlReceiver'), + "QAbstractXmlNodeModel.sourceLocation": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.stringValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.typedValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + + # class PySide2.QtXmlPatterns.QAbstractXmlReceiver: + "QAbstractXmlReceiver.__init__": (), + "QAbstractXmlReceiver.atomicValue": ('Any',), + "QAbstractXmlReceiver.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.characters": ('str',), + "QAbstractXmlReceiver.comment": ('str',), + "QAbstractXmlReceiver.endDocument": (), + "QAbstractXmlReceiver.endElement": (), + "QAbstractXmlReceiver.endOfSequence": (), + "QAbstractXmlReceiver.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.startDocument": (), + "QAbstractXmlReceiver.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.startOfSequence": (), + "QAbstractXmlReceiver.whitespaceOnly": ('str',), + + # class PySide2.QtXmlPatterns.QSourceLocation: + "QSourceLocation.__init__": [(), ('PySide2.QtCore.QUrl', 'int', 'int'), ('PySide2.QtXmlPatterns.QSourceLocation',)], + "QSourceLocation.__copy__": (), + "QSourceLocation.column": (), + "QSourceLocation.isNull": (), + "QSourceLocation.line": (), + "QSourceLocation.setColumn": ('int',), + "QSourceLocation.setLine": ('int',), + "QSourceLocation.setUri": ('PySide2.QtCore.QUrl',), + "QSourceLocation.uri": (), + + # class PySide2.QtXmlPatterns.QXmlFormatter: + "QXmlFormatter.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlFormatter.atomicValue": ('Any',), + "QXmlFormatter.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.characters": ('str',), + "QXmlFormatter.comment": ('str',), + "QXmlFormatter.endDocument": (), + "QXmlFormatter.endElement": (), + "QXmlFormatter.endOfSequence": (), + "QXmlFormatter.indentationDepth": (), + "QXmlFormatter.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.setIndentationDepth": ('int',), + "QXmlFormatter.startDocument": (), + "QXmlFormatter.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlFormatter.startOfSequence": (), + + # class PySide2.QtXmlPatterns.QXmlItem: + "QXmlItem.__init__": [(), ('Any',), ('PySide2.QtXmlPatterns.QXmlItem',), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlItem.__copy__": (), + "QXmlItem.isAtomicValue": (), + "QXmlItem.isNode": (), + "QXmlItem.isNull": (), + "QXmlItem.toAtomicValue": (), + "QXmlItem.toNodeModelIndex": (), + + # class PySide2.QtXmlPatterns.QXmlName: + "QXmlName.__init__": [(), ('PySide2.QtXmlPatterns.QXmlName',), ('PySide2.QtXmlPatterns.QXmlNamePool', 'str', 'str', 'str')], + "QXmlName.__copy__": (), + "QXmlName.fromClarkName": ('str', 'PySide2.QtXmlPatterns.QXmlNamePool'), + "QXmlName.isNCName": ('str',), + "QXmlName.isNull": (), + "QXmlName.localName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.namespaceUri": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.prefix": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.toClarkName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + + # class PySide2.QtXmlPatterns.QXmlNamePool: + "QXmlNamePool.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',)], + "QXmlNamePool.__copy__": (), + + # class PySide2.QtXmlPatterns.QXmlNodeModelIndex: + "QXmlNodeModelIndex.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlNodeModelIndex.__copy__": (), + "QXmlNodeModelIndex.additionalData": (), + "QXmlNodeModelIndex.data": (), + "QXmlNodeModelIndex.internalPointer": (), + "QXmlNodeModelIndex.isNull": (), + "QXmlNodeModelIndex.model": (), + + # class PySide2.QtXmlPatterns.QXmlQuery: + "QXmlQuery.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',), ('PySide2.QtXmlPatterns.QXmlQuery',), ('PySide2.QtXmlPatterns.QXmlQuery.QueryLanguage', 'PySide2.QtXmlPatterns.QXmlNamePool')], + "QXmlQuery.__copy__": (), + "QXmlQuery.bindVariable": [('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtCore.QIODevice'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlItem'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlQuery'), ('str', 'PySide2.QtCore.QIODevice'), ('str', 'PySide2.QtXmlPatterns.QXmlItem'), ('str', 'PySide2.QtXmlPatterns.QXmlQuery')], + "QXmlQuery.evaluateTo": [('PySide2.QtCore.QIODevice',), ('PySide2.QtXmlPatterns.QAbstractXmlReceiver',), ('PySide2.QtXmlPatterns.QXmlResultItems',)], + "QXmlQuery.initialTemplateName": (), + "QXmlQuery.isValid": (), + "QXmlQuery.messageHandler": (), + "QXmlQuery.namePool": (), + "QXmlQuery.queryLanguage": (), + "QXmlQuery.setFocus": [('PySide2.QtCore.QIODevice',), ('PySide2.QtCore.QUrl',), ('PySide2.QtXmlPatterns.QXmlItem',), ('str',)], + "QXmlQuery.setInitialTemplateName": [('PySide2.QtXmlPatterns.QXmlName',), ('str',)], + "QXmlQuery.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlQuery.setQuery": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), ('str', 'PySide2.QtCore.QUrl')], + "QXmlQuery.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlQuery.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlResultItems: + "QXmlResultItems.__init__": (), + "QXmlResultItems.current": (), + "QXmlResultItems.hasError": (), + + # class PySide2.QtXmlPatterns.QXmlSchema: + "QXmlSchema.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchema.documentUri": (), + "QXmlSchema.isValid": (), + "QXmlSchema.load": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + "QXmlSchema.messageHandler": (), + "QXmlSchema.namePool": (), + "QXmlSchema.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchema.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchema.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlSchemaValidator: + "QXmlSchemaValidator.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchemaValidator.messageHandler": (), + "QXmlSchemaValidator.namePool": (), + "QXmlSchemaValidator.schema": (), + "QXmlSchemaValidator.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchemaValidator.setSchema": ('PySide2.QtXmlPatterns.QXmlSchema',), + "QXmlSchemaValidator.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchemaValidator.uriResolver": (), + "QXmlSchemaValidator.validate": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + + # class PySide2.QtXmlPatterns.QXmlSerializer: + "QXmlSerializer.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlSerializer.atomicValue": ('Any',), + "QXmlSerializer.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.characters": ('str',), + "QXmlSerializer.codec": (), + "QXmlSerializer.comment": ('str',), + "QXmlSerializer.endDocument": (), + "QXmlSerializer.endElement": (), + "QXmlSerializer.endOfSequence": (), + "QXmlSerializer.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.outputDevice": (), + "QXmlSerializer.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.setCodec": ('PySide2.QtCore.QTextCodec',), + "QXmlSerializer.startDocument": (), + "QXmlSerializer.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.startOfSequence": (), + }) + +# Module PySide2.QtHelp +if "PySide2.QtHelp" in sys.modules: + dict.update({ + + # class PySide2.QtHelp.QHelpContentItem: + "QHelpContentItem.__copy__": (), + "QHelpContentItem.child": ('int',), + "QHelpContentItem.childCount": (), + "QHelpContentItem.childPosition": ('PySide2.QtHelp.QHelpContentItem',), + "QHelpContentItem.parent": (), + "QHelpContentItem.row": (), + "QHelpContentItem.title": (), + "QHelpContentItem.url": (), + + # class PySide2.QtHelp.QHelpContentModel: + "QHelpContentModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.contentItemAt": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.createContents": ('str',), + "QHelpContentModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QHelpContentModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QHelpContentModel.isCreatingContents": (), + "QHelpContentModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QHelpContentModel.rowCount": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtHelp.QHelpContentWidget: + "QHelpContentWidget.indexOf": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtHelp.QHelpEngine: + "QHelpEngine.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngine.contentModel": (), + "QHelpEngine.contentWidget": (), + "QHelpEngine.indexModel": (), + "QHelpEngine.indexWidget": (), + "QHelpEngine.searchEngine": (), + + # class PySide2.QtHelp.QHelpEngineCore: + "QHelpEngineCore.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngineCore.addCustomFilter": ('str', 'List[str]'), + "QHelpEngineCore.autoSaveFilter": (), + "QHelpEngineCore.collectionFile": (), + "QHelpEngineCore.copyCollectionFile": ('str',), + "QHelpEngineCore.currentFilter": (), + "QHelpEngineCore.customFilters": (), + "QHelpEngineCore.customValue": ('str', 'Any'), + "QHelpEngineCore.documentationFileName": ('str',), + "QHelpEngineCore.error": (), + "QHelpEngineCore.fileData": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.files": ('str', 'List[str]', 'str'), + "QHelpEngineCore.filterAttributeSets": ('str',), + "QHelpEngineCore.filterAttributes": [(), ('str',)], + "QHelpEngineCore.findFile": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.linksForIdentifier": ('str',), + "QHelpEngineCore.linksForKeyword": ('str',), + "QHelpEngineCore.metaData": ('str', 'str'), + "QHelpEngineCore.namespaceName": ('str',), + "QHelpEngineCore.registerDocumentation": ('str',), + "QHelpEngineCore.registeredDocumentations": (), + "QHelpEngineCore.removeCustomFilter": ('str',), + "QHelpEngineCore.removeCustomValue": ('str',), + "QHelpEngineCore.setAutoSaveFilter": ('bool',), + "QHelpEngineCore.setCollectionFile": ('str',), + "QHelpEngineCore.setCurrentFilter": ('str',), + "QHelpEngineCore.setCustomValue": ('str', 'Any'), + "QHelpEngineCore.setupData": (), + "QHelpEngineCore.unregisterDocumentation": ('str',), + + # class PySide2.QtHelp.QHelpIndexModel: + "QHelpIndexModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object'), ('str',)], + "QHelpIndexModel.filter": ('str', 'str'), + "QHelpIndexModel.isCreatingIndex": (), + "QHelpIndexModel.linksForKeyword": ('str',), + + # class PySide2.QtHelp.QHelpIndexWidget: + "QHelpIndexWidget.activateCurrentItem": (), + "QHelpIndexWidget.filterIndices": ('str', 'str'), + + # class PySide2.QtHelp.QHelpSearchEngine: + "QHelpSearchEngine.__init__": ('PySide2.QtHelp.QHelpEngineCore', 'PySide2.QtCore.QObject'), + "QHelpSearchEngine.cancelIndexing": (), + "QHelpSearchEngine.cancelSearching": (), + "QHelpSearchEngine.hitCount": (), + "QHelpSearchEngine.hits": ('int', 'int'), + "QHelpSearchEngine.hitsCount": (), + "QHelpSearchEngine.query": (), + "QHelpSearchEngine.queryWidget": (), + "QHelpSearchEngine.reindexDocumentation": (), + "QHelpSearchEngine.resultWidget": (), + "QHelpSearchEngine.scheduleIndexDocumentation": (), + "QHelpSearchEngine.search": [('list',), ('str',)], + "QHelpSearchEngine.searchInput": (), + "QHelpSearchEngine.searchResultCount": (), + "QHelpSearchEngine.searchResults": ('int', 'int'), + + # class PySide2.QtHelp.QHelpSearchQuery: + "QHelpSearchQuery.__init__": [(), ('PySide2.QtHelp.QHelpSearchQuery',), ('PySide2.QtHelp.QHelpSearchQuery.FieldName', 'List[str]')], + "QHelpSearchQuery.__copy__": (), + + # class PySide2.QtHelp.QHelpSearchQueryWidget: + "QHelpSearchQueryWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QHelpSearchQueryWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchQueryWidget.collapseExtendedSearch": (), + "QHelpSearchQueryWidget.expandExtendedSearch": (), + "QHelpSearchQueryWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QHelpSearchQueryWidget.isCompactMode": (), + "QHelpSearchQueryWidget.query": (), + "QHelpSearchQueryWidget.searchInput": (), + "QHelpSearchQueryWidget.setCompactMode": ('bool',), + "QHelpSearchQueryWidget.setQuery": ('list',), + "QHelpSearchQueryWidget.setSearchInput": ('str',), + + # class PySide2.QtHelp.QHelpSearchResult: + "QHelpSearchResult.__init__": [(), ('PySide2.QtCore.QUrl', 'str', 'str'), ('PySide2.QtHelp.QHelpSearchResult',)], + "QHelpSearchResult.snippet": (), + "QHelpSearchResult.title": (), + "QHelpSearchResult.url": (), + + # class PySide2.QtHelp.QHelpSearchResultWidget: + "QHelpSearchResultWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchResultWidget.linkAt": ('PySide2.QtCore.QPoint',), + }) + +# Module PySide2.QtMultimedia +if "PySide2.QtMultimedia" in sys.modules: + dict.update({ + + # class PySide2.QtMultimedia.QAbstractAudioDeviceInfo: + "QAbstractAudioDeviceInfo.__init__": (), + "QAbstractAudioDeviceInfo.deviceName": (), + "QAbstractAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioDeviceInfo.preferredFormat": (), + "QAbstractAudioDeviceInfo.supportedByteOrders": (), + "QAbstractAudioDeviceInfo.supportedChannelCounts": (), + "QAbstractAudioDeviceInfo.supportedCodecs": (), + "QAbstractAudioDeviceInfo.supportedSampleRates": (), + "QAbstractAudioDeviceInfo.supportedSampleSizes": (), + "QAbstractAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAbstractAudioInput: + "QAbstractAudioInput.__init__": (), + "QAbstractAudioInput.bufferSize": (), + "QAbstractAudioInput.bytesReady": (), + "QAbstractAudioInput.elapsedUSecs": (), + "QAbstractAudioInput.error": (), + "QAbstractAudioInput.format": (), + "QAbstractAudioInput.notifyInterval": (), + "QAbstractAudioInput.periodSize": (), + "QAbstractAudioInput.processedUSecs": (), + "QAbstractAudioInput.reset": (), + "QAbstractAudioInput.resume": (), + "QAbstractAudioInput.setBufferSize": ('int',), + "QAbstractAudioInput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioInput.setNotifyInterval": ('int',), + "QAbstractAudioInput.setVolume": ('float',), + "QAbstractAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioInput.state": (), + "QAbstractAudioInput.stop": (), + "QAbstractAudioInput.suspend": (), + "QAbstractAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAbstractAudioOutput: + "QAbstractAudioOutput.__init__": (), + "QAbstractAudioOutput.bufferSize": (), + "QAbstractAudioOutput.bytesFree": (), + "QAbstractAudioOutput.category": (), + "QAbstractAudioOutput.elapsedUSecs": (), + "QAbstractAudioOutput.error": (), + "QAbstractAudioOutput.format": (), + "QAbstractAudioOutput.notifyInterval": (), + "QAbstractAudioOutput.periodSize": (), + "QAbstractAudioOutput.processedUSecs": (), + "QAbstractAudioOutput.reset": (), + "QAbstractAudioOutput.resume": (), + "QAbstractAudioOutput.setBufferSize": ('int',), + "QAbstractAudioOutput.setCategory": ('str',), + "QAbstractAudioOutput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioOutput.setNotifyInterval": ('int',), + "QAbstractAudioOutput.setVolume": ('float',), + "QAbstractAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioOutput.state": (), + "QAbstractAudioOutput.stop": (), + "QAbstractAudioOutput.suspend": (), + "QAbstractAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAbstractVideoBuffer: + "QAbstractVideoBuffer.__init__": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoBuffer.handle": (), + "QAbstractVideoBuffer.handleType": (), + "QAbstractVideoBuffer.mapMode": (), + "QAbstractVideoBuffer.release": (), + "QAbstractVideoBuffer.unmap": (), + + # class PySide2.QtMultimedia.QAbstractVideoFilter: + "QAbstractVideoFilter.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoFilter.createFilterRunnable": (), + "QAbstractVideoFilter.isActive": (), + "QAbstractVideoFilter.setActive": ('bool',), + + # class PySide2.QtMultimedia.QAbstractVideoSurface: + "QAbstractVideoSurface.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoSurface.error": (), + "QAbstractVideoSurface.isActive": (), + "QAbstractVideoSurface.isFormatSupported": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.nativeResolution": (), + "QAbstractVideoSurface.nearestFormat": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.present": ('PySide2.QtMultimedia.QVideoFrame',), + "QAbstractVideoSurface.setError": ('PySide2.QtMultimedia.QAbstractVideoSurface.Error',), + "QAbstractVideoSurface.setNativeResolution": ('PySide2.QtCore.QSize',), + "QAbstractVideoSurface.start": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.stop": (), + "QAbstractVideoSurface.supportedPixelFormats": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoSurface.surfaceFormat": (), + + # class PySide2.QtMultimedia.QAudio: + "QAudio.convertVolume": ('float', 'PySide2.QtMultimedia.QAudio.VolumeScale', 'PySide2.QtMultimedia.QAudio.VolumeScale'), + + # class PySide2.QtMultimedia.QAudioBuffer: + "QAudioBuffer.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtMultimedia.QAudioFormat', 'int'), ('PySide2.QtMultimedia.QAudioBuffer',), ('int', 'PySide2.QtMultimedia.QAudioFormat', 'int')], + "QAudioBuffer.__copy__": (), + "QAudioBuffer.byteCount": (), + "QAudioBuffer.constData": (), + "QAudioBuffer.data": (), + "QAudioBuffer.duration": (), + "QAudioBuffer.format": (), + "QAudioBuffer.frameCount": (), + "QAudioBuffer.isValid": (), + "QAudioBuffer.sampleCount": (), + "QAudioBuffer.startTime": (), + + # class PySide2.QtMultimedia.QAudioDecoder: + "QAudioDecoder.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoder.audioFormat": (), + "QAudioDecoder.bind": ('PySide2.QtCore.QObject',), + "QAudioDecoder.bufferAvailable": (), + "QAudioDecoder.duration": (), + "QAudioDecoder.errorString": (), + "QAudioDecoder.hasSupport": ('str', 'List[str]'), + "QAudioDecoder.position": (), + "QAudioDecoder.read": (), + "QAudioDecoder.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoder.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoder.setSourceFilename": ('str',), + "QAudioDecoder.sourceDevice": (), + "QAudioDecoder.sourceFilename": (), + "QAudioDecoder.start": (), + "QAudioDecoder.state": (), + "QAudioDecoder.stop": (), + "QAudioDecoder.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QAudioDecoderControl: + "QAudioDecoderControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoderControl.audioFormat": (), + "QAudioDecoderControl.bufferAvailable": (), + "QAudioDecoderControl.duration": (), + "QAudioDecoderControl.position": (), + "QAudioDecoderControl.read": (), + "QAudioDecoderControl.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoderControl.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoderControl.setSourceFilename": ('str',), + "QAudioDecoderControl.sourceDevice": (), + "QAudioDecoderControl.sourceFilename": (), + "QAudioDecoderControl.start": (), + "QAudioDecoderControl.state": (), + "QAudioDecoderControl.stop": (), + + # class PySide2.QtMultimedia.QAudioDeviceInfo: + "QAudioDeviceInfo.__init__": [(), ('PySide2.QtMultimedia.QAudioDeviceInfo',)], + "QAudioDeviceInfo.__copy__": (), + "QAudioDeviceInfo.availableDevices": ('PySide2.QtMultimedia.QAudio.Mode',), + "QAudioDeviceInfo.defaultInputDevice": (), + "QAudioDeviceInfo.defaultOutputDevice": (), + "QAudioDeviceInfo.deviceName": (), + "QAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.isNull": (), + "QAudioDeviceInfo.nearestFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.preferredFormat": (), + "QAudioDeviceInfo.supportedByteOrders": (), + "QAudioDeviceInfo.supportedChannelCounts": (), + "QAudioDeviceInfo.supportedCodecs": (), + "QAudioDeviceInfo.supportedSampleRates": (), + "QAudioDeviceInfo.supportedSampleSizes": (), + "QAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAudioEncoderSettings: + "QAudioEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QAudioEncoderSettings',)], + "QAudioEncoderSettings.__copy__": (), + "QAudioEncoderSettings.bitRate": (), + "QAudioEncoderSettings.channelCount": (), + "QAudioEncoderSettings.codec": (), + "QAudioEncoderSettings.encodingMode": (), + "QAudioEncoderSettings.encodingOption": ('str',), + "QAudioEncoderSettings.encodingOptions": (), + "QAudioEncoderSettings.isNull": (), + "QAudioEncoderSettings.quality": (), + "QAudioEncoderSettings.sampleRate": (), + "QAudioEncoderSettings.setBitRate": ('int',), + "QAudioEncoderSettings.setChannelCount": ('int',), + "QAudioEncoderSettings.setCodec": ('str',), + "QAudioEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QAudioEncoderSettings.setEncodingOption": ('str', 'Any'), + "QAudioEncoderSettings.setEncodingOptions": ('dict',), + "QAudioEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QAudioEncoderSettings.setSampleRate": ('int',), + + # class PySide2.QtMultimedia.QAudioEncoderSettingsControl: + "QAudioEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioEncoderSettingsControl.audioSettings": (), + "QAudioEncoderSettingsControl.codecDescription": ('str',), + "QAudioEncoderSettingsControl.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QAudioEncoderSettingsControl.supportedAudioCodecs": (), + + # class PySide2.QtMultimedia.QAudioFormat: + "QAudioFormat.__init__": [(), ('PySide2.QtMultimedia.QAudioFormat',)], + "QAudioFormat.__copy__": (), + "QAudioFormat.byteOrder": (), + "QAudioFormat.bytesForDuration": ('int',), + "QAudioFormat.bytesForFrames": ('int',), + "QAudioFormat.bytesPerFrame": (), + "QAudioFormat.channelCount": (), + "QAudioFormat.codec": (), + "QAudioFormat.durationForBytes": ('int',), + "QAudioFormat.durationForFrames": ('int',), + "QAudioFormat.framesForBytes": ('int',), + "QAudioFormat.framesForDuration": ('int',), + "QAudioFormat.isValid": (), + "QAudioFormat.sampleRate": (), + "QAudioFormat.sampleSize": (), + "QAudioFormat.sampleType": (), + "QAudioFormat.setByteOrder": ('PySide2.QtMultimedia.QAudioFormat.Endian',), + "QAudioFormat.setChannelCount": ('int',), + "QAudioFormat.setCodec": ('str',), + "QAudioFormat.setSampleRate": ('int',), + "QAudioFormat.setSampleSize": ('int',), + "QAudioFormat.setSampleType": ('PySide2.QtMultimedia.QAudioFormat.SampleType',), + + # class PySide2.QtMultimedia.QAudioInput: + "QAudioInput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioInput.bufferSize": (), + "QAudioInput.bytesReady": (), + "QAudioInput.elapsedUSecs": (), + "QAudioInput.error": (), + "QAudioInput.format": (), + "QAudioInput.notifyInterval": (), + "QAudioInput.periodSize": (), + "QAudioInput.processedUSecs": (), + "QAudioInput.reset": (), + "QAudioInput.resume": (), + "QAudioInput.setBufferSize": ('int',), + "QAudioInput.setNotifyInterval": ('int',), + "QAudioInput.setVolume": ('float',), + "QAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioInput.state": (), + "QAudioInput.stop": (), + "QAudioInput.suspend": (), + "QAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAudioInputSelectorControl: + "QAudioInputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioInputSelectorControl.activeInput": (), + "QAudioInputSelectorControl.availableInputs": (), + "QAudioInputSelectorControl.defaultInput": (), + "QAudioInputSelectorControl.inputDescription": ('str',), + "QAudioInputSelectorControl.setActiveInput": ('str',), + + # class PySide2.QtMultimedia.QAudioOutput: + "QAudioOutput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioOutput.bufferSize": (), + "QAudioOutput.bytesFree": (), + "QAudioOutput.category": (), + "QAudioOutput.elapsedUSecs": (), + "QAudioOutput.error": (), + "QAudioOutput.format": (), + "QAudioOutput.notifyInterval": (), + "QAudioOutput.periodSize": (), + "QAudioOutput.processedUSecs": (), + "QAudioOutput.reset": (), + "QAudioOutput.resume": (), + "QAudioOutput.setBufferSize": ('int',), + "QAudioOutput.setCategory": ('str',), + "QAudioOutput.setNotifyInterval": ('int',), + "QAudioOutput.setVolume": ('float',), + "QAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioOutput.state": (), + "QAudioOutput.stop": (), + "QAudioOutput.suspend": (), + "QAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAudioOutputSelectorControl: + "QAudioOutputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioOutputSelectorControl.activeOutput": (), + "QAudioOutputSelectorControl.availableOutputs": (), + "QAudioOutputSelectorControl.defaultOutput": (), + "QAudioOutputSelectorControl.outputDescription": ('str',), + "QAudioOutputSelectorControl.setActiveOutput": ('str',), + + # class PySide2.QtMultimedia.QAudioProbe: + "QAudioProbe.__init__": ('PySide2.QtCore.QObject',), + "QAudioProbe.isActive": (), + "QAudioProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QAudioRecorder: + "QAudioRecorder.__init__": ('PySide2.QtCore.QObject',), + "QAudioRecorder.audioInput": (), + "QAudioRecorder.audioInputDescription": ('str',), + "QAudioRecorder.audioInputs": (), + "QAudioRecorder.defaultAudioInput": (), + "QAudioRecorder.setAudioInput": ('str',), + + # class PySide2.QtMultimedia.QAudioRoleControl: + "QAudioRoleControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioRoleControl.audioRole": (), + "QAudioRoleControl.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QAudioRoleControl.supportedAudioRoles": (), + + # class PySide2.QtMultimedia.QCamera: + "QCamera.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtMultimedia.QCamera.Position', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QCameraInfo', 'PySide2.QtCore.QObject')], + "QCamera.availability": (), + "QCamera.availableDevices": (), + "QCamera.captureMode": (), + "QCamera.deviceDescription": ('PySide2.QtCore.QByteArray',), + "QCamera.errorString": (), + "QCamera.isCaptureModeSupported": ('PySide2.libpyside.CaptureModes',), + "QCamera.load": (), + "QCamera.lockStatus": [(), ('PySide2.QtMultimedia.QCamera.LockType',)], + "QCamera.requestedLocks": (), + "QCamera.searchAndLock": [(), ('PySide2.libpyside.LockTypes',)], + "QCamera.setCaptureMode": ('PySide2.libpyside.CaptureModes',), + "QCamera.setViewfinder": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QCamera.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.start": (), + "QCamera.state": (), + "QCamera.status": (), + "QCamera.stop": (), + "QCamera.supportedLocks": (), + "QCamera.supportedViewfinderFrameRateRanges": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderPixelFormats": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderResolutions": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.unload": (), + "QCamera.unlock": [(), ('PySide2.libpyside.LockTypes',)], + "QCamera.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraCaptureBufferFormatControl: + "QCameraCaptureBufferFormatControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureBufferFormatControl.bufferFormat": (), + "QCameraCaptureBufferFormatControl.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraCaptureBufferFormatControl.supportedBufferFormats": (), + + # class PySide2.QtMultimedia.QCameraCaptureDestinationControl: + "QCameraCaptureDestinationControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureDestinationControl.captureDestination": (), + "QCameraCaptureDestinationControl.isCaptureDestinationSupported": ('PySide2.libpyside.CaptureDestinations',), + "QCameraCaptureDestinationControl.setCaptureDestination": ('PySide2.libpyside.CaptureDestinations',), + + # class PySide2.QtMultimedia.QCameraControl: + "QCameraControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraControl.canChangeProperty": ('PySide2.QtMultimedia.QCameraControl.PropertyChangeType', 'PySide2.QtMultimedia.QCamera.Status'), + "QCameraControl.captureMode": (), + "QCameraControl.isCaptureModeSupported": ('PySide2.libpyside.CaptureModes',), + "QCameraControl.setCaptureMode": ('PySide2.libpyside.CaptureModes',), + "QCameraControl.setState": ('PySide2.QtMultimedia.QCamera.State',), + "QCameraControl.state": (), + "QCameraControl.status": (), + + # class PySide2.QtMultimedia.QCameraExposureControl: + "QCameraExposureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraExposureControl.actualValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.requestedValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.setValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter', 'Any'), + + # class PySide2.QtMultimedia.QCameraFeedbackControl: + "QCameraFeedbackControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraFeedbackControl.isEventFeedbackEnabled": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType',), + "QCameraFeedbackControl.isEventFeedbackLocked": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType',), + "QCameraFeedbackControl.resetEventFeedback": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType',), + "QCameraFeedbackControl.setEventFeedbackEnabled": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType', 'bool'), + "QCameraFeedbackControl.setEventFeedbackSound": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType', 'str'), + + # class PySide2.QtMultimedia.QCameraFocusZone: + "QCameraFocusZone.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus'), ('PySide2.QtMultimedia.QCameraFocusZone',)], + "QCameraFocusZone.__copy__": (), + "QCameraFocusZone.area": (), + "QCameraFocusZone.isValid": (), + "QCameraFocusZone.setStatus": ('PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus',), + "QCameraFocusZone.status": (), + + # class PySide2.QtMultimedia.QCameraImageCapture: + "QCameraImageCapture.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QCameraImageCapture.availability": (), + "QCameraImageCapture.bufferFormat": (), + "QCameraImageCapture.cancelCapture": (), + "QCameraImageCapture.capture": ('str',), + "QCameraImageCapture.captureDestination": (), + "QCameraImageCapture.encodingSettings": (), + "QCameraImageCapture.errorString": (), + "QCameraImageCapture.imageCodecDescription": ('str',), + "QCameraImageCapture.isAvailable": (), + "QCameraImageCapture.isCaptureDestinationSupported": ('PySide2.libpyside.CaptureDestinations',), + "QCameraImageCapture.isReadyForCapture": (), + "QCameraImageCapture.mediaObject": (), + "QCameraImageCapture.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraImageCapture.setCaptureDestination": ('PySide2.libpyside.CaptureDestinations',), + "QCameraImageCapture.setEncodingSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QCameraImageCapture.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QCameraImageCapture.supportedBufferFormats": (), + "QCameraImageCapture.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QCameraImageCaptureControl: + "QCameraImageCaptureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageCaptureControl.cancelCapture": (), + "QCameraImageCaptureControl.capture": ('str',), + "QCameraImageCaptureControl.driveMode": (), + "QCameraImageCaptureControl.isReadyForCapture": (), + "QCameraImageCaptureControl.setDriveMode": ('PySide2.QtMultimedia.QCameraImageCapture.DriveMode',), + + # class PySide2.QtMultimedia.QCameraImageProcessingControl: + "QCameraImageProcessingControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageProcessingControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.isParameterValueSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'Any'), + "QCameraImageProcessingControl.parameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.setParameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'Any'), + + # class PySide2.QtMultimedia.QCameraInfo: + "QCameraInfo.__init__": [('PySide2.QtCore.QByteArray',), ('PySide2.QtMultimedia.QCamera',), ('PySide2.QtMultimedia.QCameraInfo',)], + "QCameraInfo.__copy__": (), + "QCameraInfo.availableCameras": ('PySide2.QtMultimedia.QCamera.Position',), + "QCameraInfo.defaultCamera": (), + "QCameraInfo.description": (), + "QCameraInfo.deviceName": (), + "QCameraInfo.isNull": (), + "QCameraInfo.orientation": (), + "QCameraInfo.position": (), + + # class PySide2.QtMultimedia.QCameraInfoControl: + "QCameraInfoControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraInfoControl.cameraOrientation": ('str',), + "QCameraInfoControl.cameraPosition": ('str',), + + # class PySide2.QtMultimedia.QCameraLocksControl: + "QCameraLocksControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraLocksControl.lockStatus": ('PySide2.QtMultimedia.QCamera.LockType',), + "QCameraLocksControl.searchAndLock": ('PySide2.libpyside.LockTypes',), + "QCameraLocksControl.supportedLocks": (), + "QCameraLocksControl.unlock": ('PySide2.libpyside.LockTypes',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettings: + "QCameraViewfinderSettings.__init__": [(), ('PySide2.QtMultimedia.QCameraViewfinderSettings',)], + "QCameraViewfinderSettings.__copy__": (), + "QCameraViewfinderSettings.isNull": (), + "QCameraViewfinderSettings.maximumFrameRate": (), + "QCameraViewfinderSettings.minimumFrameRate": (), + "QCameraViewfinderSettings.pixelAspectRatio": (), + "QCameraViewfinderSettings.pixelFormat": (), + "QCameraViewfinderSettings.resolution": (), + "QCameraViewfinderSettings.setMaximumFrameRate": ('float',), + "QCameraViewfinderSettings.setMinimumFrameRate": ('float',), + "QCameraViewfinderSettings.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.setPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraViewfinderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.swap": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl: + "QCameraViewfinderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl.isViewfinderParameterSupported": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + "QCameraViewfinderSettingsControl.setViewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter', 'Any'), + "QCameraViewfinderSettingsControl.viewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl2: + "QCameraViewfinderSettingsControl2.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl2.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCameraViewfinderSettingsControl2.supportedViewfinderSettings": (), + "QCameraViewfinderSettingsControl2.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraZoomControl: + "QCameraZoomControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraZoomControl.currentDigitalZoom": (), + "QCameraZoomControl.currentOpticalZoom": (), + "QCameraZoomControl.maximumDigitalZoom": (), + "QCameraZoomControl.maximumOpticalZoom": (), + "QCameraZoomControl.requestedDigitalZoom": (), + "QCameraZoomControl.requestedOpticalZoom": (), + "QCameraZoomControl.zoomTo": ('float', 'float'), + + # class PySide2.QtMultimedia.QCustomAudioRoleControl: + "QCustomAudioRoleControl.__init__": ('PySide2.QtCore.QObject',), + "QCustomAudioRoleControl.customAudioRole": (), + "QCustomAudioRoleControl.setCustomAudioRole": ('str',), + "QCustomAudioRoleControl.supportedCustomAudioRoles": (), + + # class PySide2.QtMultimedia.QImageEncoderControl: + "QImageEncoderControl.__init__": ('PySide2.QtCore.QObject',), + "QImageEncoderControl.imageCodecDescription": ('str',), + "QImageEncoderControl.imageSettings": (), + "QImageEncoderControl.setImageSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QImageEncoderControl.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QImageEncoderSettings: + "QImageEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QImageEncoderSettings',)], + "QImageEncoderSettings.__copy__": (), + "QImageEncoderSettings.codec": (), + "QImageEncoderSettings.encodingOption": ('str',), + "QImageEncoderSettings.encodingOptions": (), + "QImageEncoderSettings.isNull": (), + "QImageEncoderSettings.quality": (), + "QImageEncoderSettings.resolution": (), + "QImageEncoderSettings.setCodec": ('str',), + "QImageEncoderSettings.setEncodingOption": ('str', 'Any'), + "QImageEncoderSettings.setEncodingOptions": ('dict',), + "QImageEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QImageEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QMediaAudioProbeControl: + "QMediaAudioProbeControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaAvailabilityControl: + "QMediaAvailabilityControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaAvailabilityControl.availability": (), + + # class PySide2.QtMultimedia.QMediaBindableInterface: + "QMediaBindableInterface.__init__": (), + "QMediaBindableInterface.mediaObject": (), + "QMediaBindableInterface.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimedia.QMediaContainerControl: + "QMediaContainerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaContainerControl.containerDescription": ('str',), + "QMediaContainerControl.containerFormat": (), + "QMediaContainerControl.setContainerFormat": ('str',), + "QMediaContainerControl.supportedContainers": (), + + # class PySide2.QtMultimedia.QMediaContent: + "QMediaContent.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtMultimedia.QMediaContent',), ('PySide2.QtMultimedia.QMediaPlaylist', 'PySide2.QtCore.QUrl', 'bool'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest',), ('list',)], + "QMediaContent.__copy__": (), + "QMediaContent.canonicalRequest": (), + "QMediaContent.canonicalResource": (), + "QMediaContent.canonicalUrl": (), + "QMediaContent.isNull": (), + "QMediaContent.playlist": (), + "QMediaContent.resources": (), + + # class PySide2.QtMultimedia.QMediaControl: + "QMediaControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaGaplessPlaybackControl: + "QMediaGaplessPlaybackControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaGaplessPlaybackControl.crossfadeTime": (), + "QMediaGaplessPlaybackControl.isCrossfadeSupported": (), + "QMediaGaplessPlaybackControl.nextMedia": (), + "QMediaGaplessPlaybackControl.setCrossfadeTime": ('float',), + "QMediaGaplessPlaybackControl.setNextMedia": ('PySide2.QtMultimedia.QMediaContent',), + + # class PySide2.QtMultimedia.QMediaNetworkAccessControl: + "QMediaNetworkAccessControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaNetworkAccessControl.currentConfiguration": (), + "QMediaNetworkAccessControl.setConfigurations": ('list',), + + # class PySide2.QtMultimedia.QMediaObject: + "QMediaObject.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtMultimedia.QMediaService'), + "QMediaObject.addPropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.availability": (), + "QMediaObject.availableMetaData": (), + "QMediaObject.bind": ('PySide2.QtCore.QObject',), + "QMediaObject.isAvailable": (), + "QMediaObject.isMetaDataAvailable": (), + "QMediaObject.metaData": ('str',), + "QMediaObject.notifyInterval": (), + "QMediaObject.removePropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.service": (), + "QMediaObject.setNotifyInterval": ('int',), + "QMediaObject.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaPlayer: + "QMediaPlayer.__init__": ('PySide2.QtCore.QObject', 'PySide2.libpyside.Flags'), + "QMediaPlayer.audioRole": (), + "QMediaPlayer.availability": (), + "QMediaPlayer.bind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.bufferStatus": (), + "QMediaPlayer.currentMedia": (), + "QMediaPlayer.currentNetworkConfiguration": (), + "QMediaPlayer.customAudioRole": (), + "QMediaPlayer.duration": (), + "QMediaPlayer.errorString": (), + "QMediaPlayer.hasSupport": ('str', 'List[str]', 'PySide2.libpyside.Flags'), + "QMediaPlayer.isAudioAvailable": (), + "QMediaPlayer.isMuted": (), + "QMediaPlayer.isSeekable": (), + "QMediaPlayer.isVideoAvailable": (), + "QMediaPlayer.media": (), + "QMediaPlayer.mediaStatus": (), + "QMediaPlayer.mediaStream": (), + "QMediaPlayer.pause": (), + "QMediaPlayer.play": (), + "QMediaPlayer.playbackRate": (), + "QMediaPlayer.playlist": (), + "QMediaPlayer.position": (), + "QMediaPlayer.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QMediaPlayer.setCustomAudioRole": ('str',), + "QMediaPlayer.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayer.setMuted": ('bool',), + "QMediaPlayer.setNetworkConfigurations": ('list',), + "QMediaPlayer.setPlaybackRate": ('float',), + "QMediaPlayer.setPlaylist": ('PySide2.QtMultimedia.QMediaPlaylist',), + "QMediaPlayer.setPosition": ('int',), + "QMediaPlayer.setVideoOutput": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QMediaPlayer.setVolume": ('int',), + "QMediaPlayer.state": (), + "QMediaPlayer.stop": (), + "QMediaPlayer.supportedAudioRoles": (), + "QMediaPlayer.supportedCustomAudioRoles": (), + "QMediaPlayer.supportedMimeTypes": ('PySide2.libpyside.Flags',), + "QMediaPlayer.unbind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.volume": (), + + # class PySide2.QtMultimedia.QMediaPlayerControl: + "QMediaPlayerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlayerControl.availablePlaybackRanges": (), + "QMediaPlayerControl.bufferStatus": (), + "QMediaPlayerControl.duration": (), + "QMediaPlayerControl.isAudioAvailable": (), + "QMediaPlayerControl.isMuted": (), + "QMediaPlayerControl.isSeekable": (), + "QMediaPlayerControl.isVideoAvailable": (), + "QMediaPlayerControl.media": (), + "QMediaPlayerControl.mediaStatus": (), + "QMediaPlayerControl.mediaStream": (), + "QMediaPlayerControl.pause": (), + "QMediaPlayerControl.play": (), + "QMediaPlayerControl.playbackRate": (), + "QMediaPlayerControl.position": (), + "QMediaPlayerControl.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayerControl.setMuted": ('bool',), + "QMediaPlayerControl.setPlaybackRate": ('float',), + "QMediaPlayerControl.setPosition": ('int',), + "QMediaPlayerControl.setVolume": ('int',), + "QMediaPlayerControl.state": (), + "QMediaPlayerControl.stop": (), + "QMediaPlayerControl.volume": (), + + # class PySide2.QtMultimedia.QMediaPlaylist: + "QMediaPlaylist.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlaylist.addMedia": [('PySide2.QtMultimedia.QMediaContent',), ('list',)], + "QMediaPlaylist.clear": (), + "QMediaPlaylist.currentIndex": (), + "QMediaPlaylist.currentMedia": (), + "QMediaPlaylist.error": (), + "QMediaPlaylist.errorString": (), + "QMediaPlaylist.insertMedia": [('int', 'PySide2.QtMultimedia.QMediaContent'), ('int', 'list')], + "QMediaPlaylist.isEmpty": (), + "QMediaPlaylist.isReadOnly": (), + "QMediaPlaylist.load": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaPlaylist.media": ('int',), + "QMediaPlaylist.mediaCount": (), + "QMediaPlaylist.mediaObject": (), + "QMediaPlaylist.moveMedia": ('int', 'int'), + "QMediaPlaylist.nextIndex": ('int',), + "QMediaPlaylist.playbackMode": (), + "QMediaPlaylist.previous": (), + "QMediaPlaylist.previousIndex": ('int',), + "QMediaPlaylist.removeMedia": [('int',), ('int', 'int')], + "QMediaPlaylist.save": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str')], + "QMediaPlaylist.setCurrentIndex": ('int',), + "QMediaPlaylist.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaPlaylist.setPlaybackMode": ('PySide2.QtMultimedia.QMediaPlaylist.PlaybackMode',), + "QMediaPlaylist.shuffle": (), + + # class PySide2.QtMultimedia.QMediaRecorder: + "QMediaRecorder.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QMediaRecorder.actualLocation": (), + "QMediaRecorder.audioCodecDescription": ('str',), + "QMediaRecorder.audioSettings": (), + "QMediaRecorder.availability": (), + "QMediaRecorder.availableMetaData": (), + "QMediaRecorder.containerDescription": ('str',), + "QMediaRecorder.containerFormat": (), + "QMediaRecorder.duration": (), + "QMediaRecorder.errorString": (), + "QMediaRecorder.isAvailable": (), + "QMediaRecorder.isMetaDataAvailable": (), + "QMediaRecorder.isMetaDataWritable": (), + "QMediaRecorder.isMuted": (), + "QMediaRecorder.mediaObject": (), + "QMediaRecorder.metaData": ('str',), + "QMediaRecorder.outputLocation": (), + "QMediaRecorder.pause": (), + "QMediaRecorder.record": (), + "QMediaRecorder.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QMediaRecorder.setContainerFormat": ('str',), + "QMediaRecorder.setEncodingSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings', 'PySide2.QtMultimedia.QVideoEncoderSettings', 'str'), + "QMediaRecorder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaRecorder.setMetaData": ('str', 'Any'), + "QMediaRecorder.setMuted": ('bool',), + "QMediaRecorder.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorder.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QMediaRecorder.setVolume": ('float',), + "QMediaRecorder.state": (), + "QMediaRecorder.status": (), + "QMediaRecorder.stop": (), + "QMediaRecorder.supportedAudioCodecs": (), + "QMediaRecorder.supportedContainers": (), + "QMediaRecorder.supportedVideoCodecs": (), + "QMediaRecorder.videoCodecDescription": ('str',), + "QMediaRecorder.videoSettings": (), + "QMediaRecorder.volume": (), + + # class PySide2.QtMultimedia.QMediaRecorderControl: + "QMediaRecorderControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaRecorderControl.applySettings": (), + "QMediaRecorderControl.duration": (), + "QMediaRecorderControl.isMuted": (), + "QMediaRecorderControl.outputLocation": (), + "QMediaRecorderControl.setMuted": ('bool',), + "QMediaRecorderControl.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorderControl.setState": ('PySide2.QtMultimedia.QMediaRecorder.State',), + "QMediaRecorderControl.setVolume": ('float',), + "QMediaRecorderControl.state": (), + "QMediaRecorderControl.status": (), + "QMediaRecorderControl.volume": (), + + # class PySide2.QtMultimedia.QMediaResource: + "QMediaResource.__init__": [(), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaResource.__copy__": (), + "QMediaResource.audioBitRate": (), + "QMediaResource.audioCodec": (), + "QMediaResource.channelCount": (), + "QMediaResource.dataSize": (), + "QMediaResource.isNull": (), + "QMediaResource.language": (), + "QMediaResource.mimeType": (), + "QMediaResource.request": (), + "QMediaResource.resolution": (), + "QMediaResource.sampleRate": (), + "QMediaResource.setAudioBitRate": ('int',), + "QMediaResource.setAudioCodec": ('str',), + "QMediaResource.setChannelCount": ('int',), + "QMediaResource.setDataSize": ('int',), + "QMediaResource.setLanguage": ('str',), + "QMediaResource.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QMediaResource.setSampleRate": ('int',), + "QMediaResource.setVideoBitRate": ('int',), + "QMediaResource.setVideoCodec": ('str',), + "QMediaResource.url": (), + "QMediaResource.videoBitRate": (), + "QMediaResource.videoCodec": (), + + # class PySide2.QtMultimedia.QMediaService: + "QMediaService.__init__": ('PySide2.QtCore.QObject',), + "QMediaService.releaseControl": ('PySide2.QtMultimedia.QMediaControl',), + "QMediaService.requestControl": ('str',), + + # class PySide2.QtMultimedia.QMediaServiceCameraInfoInterface: + "QMediaServiceCameraInfoInterface.__init__": (), + "QMediaServiceCameraInfoInterface.cameraOrientation": ('PySide2.QtCore.QByteArray',), + "QMediaServiceCameraInfoInterface.cameraPosition": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtMultimedia.QMediaServiceDefaultDeviceInterface: + "QMediaServiceDefaultDeviceInterface.__init__": (), + "QMediaServiceDefaultDeviceInterface.defaultDevice": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtMultimedia.QMediaServiceFeaturesInterface: + "QMediaServiceFeaturesInterface.__init__": (), + "QMediaServiceFeaturesInterface.supportedFeatures": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtMultimedia.QMediaServiceProviderHint: + "QMediaServiceProviderHint.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtMultimedia.QCamera.Position',), ('PySide2.QtMultimedia.QMediaServiceProviderHint',), ('PySide2.libpyside.Features',), ('str', 'List[str]')], + "QMediaServiceProviderHint.__copy__": (), + "QMediaServiceProviderHint.cameraPosition": (), + "QMediaServiceProviderHint.codecs": (), + "QMediaServiceProviderHint.device": (), + "QMediaServiceProviderHint.features": (), + "QMediaServiceProviderHint.isNull": (), + "QMediaServiceProviderHint.mimeType": (), + "QMediaServiceProviderHint.type": (), + + # class PySide2.QtMultimedia.QMediaServiceSupportedDevicesInterface: + "QMediaServiceSupportedDevicesInterface.__init__": (), + "QMediaServiceSupportedDevicesInterface.deviceDescription": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QMediaServiceSupportedDevicesInterface.devices": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtMultimedia.QMediaServiceSupportedFormatsInterface: + "QMediaServiceSupportedFormatsInterface.__init__": (), + "QMediaServiceSupportedFormatsInterface.hasSupport": ('str', 'List[str]'), + "QMediaServiceSupportedFormatsInterface.supportedMimeTypes": (), + + # class PySide2.QtMultimedia.QMediaStreamsControl: + "QMediaStreamsControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaStreamsControl.isActive": ('int',), + "QMediaStreamsControl.metaData": ('int', 'str'), + "QMediaStreamsControl.setActive": ('int', 'bool'), + "QMediaStreamsControl.streamCount": (), + "QMediaStreamsControl.streamType": ('int',), + + # class PySide2.QtMultimedia.QMediaTimeInterval: + "QMediaTimeInterval.__init__": [(), ('PySide2.QtMultimedia.QMediaTimeInterval',), ('int', 'int')], + "QMediaTimeInterval.__copy__": (), + "QMediaTimeInterval.contains": ('int',), + "QMediaTimeInterval.end": (), + "QMediaTimeInterval.isNormal": (), + "QMediaTimeInterval.normalized": (), + "QMediaTimeInterval.start": (), + "QMediaTimeInterval.translated": ('int',), + + # class PySide2.QtMultimedia.QMediaTimeRange: + "QMediaTimeRange.__init__": [(), ('PySide2.QtMultimedia.QMediaTimeInterval',), ('PySide2.QtMultimedia.QMediaTimeRange',), ('int', 'int')], + "QMediaTimeRange.__copy__": (), + "QMediaTimeRange.addInterval": [('PySide2.QtMultimedia.QMediaTimeInterval',), ('int', 'int')], + "QMediaTimeRange.addTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + "QMediaTimeRange.clear": (), + "QMediaTimeRange.contains": ('int',), + "QMediaTimeRange.earliestTime": (), + "QMediaTimeRange.intervals": (), + "QMediaTimeRange.isContinuous": (), + "QMediaTimeRange.isEmpty": (), + "QMediaTimeRange.latestTime": (), + "QMediaTimeRange.removeInterval": [('PySide2.QtMultimedia.QMediaTimeInterval',), ('int', 'int')], + "QMediaTimeRange.removeTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + + # class PySide2.QtMultimedia.QMediaVideoProbeControl: + "QMediaVideoProbeControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMetaDataReaderControl: + "QMetaDataReaderControl.__init__": ('PySide2.QtCore.QObject',), + "QMetaDataReaderControl.availableMetaData": (), + "QMetaDataReaderControl.isMetaDataAvailable": (), + "QMetaDataReaderControl.metaData": ('str',), + + # class PySide2.QtMultimedia.QMetaDataWriterControl: + "QMetaDataWriterControl.__init__": ('PySide2.QtCore.QObject',), + "QMetaDataWriterControl.availableMetaData": (), + "QMetaDataWriterControl.isMetaDataAvailable": (), + "QMetaDataWriterControl.isWritable": (), + "QMetaDataWriterControl.metaData": ('str',), + "QMetaDataWriterControl.setMetaData": ('str', 'Any'), + + # class PySide2.QtMultimedia.QMultimedia: + + # class PySide2.QtMultimedia.QRadioData: + "QRadioData.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QRadioData.availability": (), + "QRadioData.errorString": (), + "QRadioData.isAlternativeFrequenciesEnabled": (), + "QRadioData.mediaObject": (), + "QRadioData.programType": (), + "QRadioData.programTypeName": (), + "QRadioData.radioText": (), + "QRadioData.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioData.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QRadioData.stationId": (), + "QRadioData.stationName": (), + + # class PySide2.QtMultimedia.QRadioDataControl: + "QRadioDataControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioDataControl.errorString": (), + "QRadioDataControl.isAlternativeFrequenciesEnabled": (), + "QRadioDataControl.programType": (), + "QRadioDataControl.programTypeName": (), + "QRadioDataControl.radioText": (), + "QRadioDataControl.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioDataControl.stationId": (), + "QRadioDataControl.stationName": (), + + # class PySide2.QtMultimedia.QRadioTuner: + "QRadioTuner.__init__": ('PySide2.QtCore.QObject',), + "QRadioTuner.availability": (), + "QRadioTuner.band": (), + "QRadioTuner.cancelSearch": (), + "QRadioTuner.errorString": (), + "QRadioTuner.frequency": (), + "QRadioTuner.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isAntennaConnected": (), + "QRadioTuner.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isMuted": (), + "QRadioTuner.isSearching": (), + "QRadioTuner.isStereo": (), + "QRadioTuner.radioData": (), + "QRadioTuner.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTuner.searchBackward": (), + "QRadioTuner.searchForward": (), + "QRadioTuner.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.setFrequency": ('int',), + "QRadioTuner.setMuted": ('bool',), + "QRadioTuner.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTuner.setVolume": ('int',), + "QRadioTuner.signalStrength": (), + "QRadioTuner.start": (), + "QRadioTuner.state": (), + "QRadioTuner.stereoMode": (), + "QRadioTuner.stop": (), + "QRadioTuner.volume": (), + + # class PySide2.QtMultimedia.QRadioTunerControl: + "QRadioTunerControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioTunerControl.band": (), + "QRadioTunerControl.cancelSearch": (), + "QRadioTunerControl.errorString": (), + "QRadioTunerControl.frequency": (), + "QRadioTunerControl.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isAntennaConnected": (), + "QRadioTunerControl.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isMuted": (), + "QRadioTunerControl.isSearching": (), + "QRadioTunerControl.isStereo": (), + "QRadioTunerControl.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTunerControl.searchBackward": (), + "QRadioTunerControl.searchForward": (), + "QRadioTunerControl.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.setFrequency": ('int',), + "QRadioTunerControl.setMuted": ('bool',), + "QRadioTunerControl.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTunerControl.setVolume": ('int',), + "QRadioTunerControl.signalStrength": (), + "QRadioTunerControl.start": (), + "QRadioTunerControl.state": (), + "QRadioTunerControl.stereoMode": (), + "QRadioTunerControl.stop": (), + "QRadioTunerControl.volume": (), + + # class PySide2.QtMultimedia.QSound: + "QSound.__init__": ('str', 'PySide2.QtCore.QObject'), + "QSound.fileName": (), + "QSound.isFinished": (), + "QSound.loops": (), + "QSound.loopsRemaining": (), + "QSound.play": [(), ('str',)], + "QSound.setLoops": ('int',), + "QSound.stop": (), + + # class PySide2.QtMultimedia.QSoundEffect: + "QSoundEffect.__init__": ('PySide2.QtCore.QObject',), + "QSoundEffect.category": (), + "QSoundEffect.isLoaded": (), + "QSoundEffect.isMuted": (), + "QSoundEffect.isPlaying": (), + "QSoundEffect.loopCount": (), + "QSoundEffect.loopsRemaining": (), + "QSoundEffect.play": (), + "QSoundEffect.setCategory": ('str',), + "QSoundEffect.setLoopCount": ('int',), + "QSoundEffect.setMuted": ('bool',), + "QSoundEffect.setSource": ('PySide2.QtCore.QUrl',), + "QSoundEffect.setVolume": ('float',), + "QSoundEffect.source": (), + "QSoundEffect.status": (), + "QSoundEffect.stop": (), + "QSoundEffect.supportedMimeTypes": (), + "QSoundEffect.volume": (), + + # class PySide2.QtMultimedia.QVideoDeviceSelectorControl: + "QVideoDeviceSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoDeviceSelectorControl.defaultDevice": (), + "QVideoDeviceSelectorControl.deviceCount": (), + "QVideoDeviceSelectorControl.deviceDescription": ('int',), + "QVideoDeviceSelectorControl.deviceName": ('int',), + "QVideoDeviceSelectorControl.selectedDevice": (), + "QVideoDeviceSelectorControl.setSelectedDevice": ('int',), + + # class PySide2.QtMultimedia.QVideoEncoderSettings: + "QVideoEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QVideoEncoderSettings',)], + "QVideoEncoderSettings.__copy__": (), + "QVideoEncoderSettings.bitRate": (), + "QVideoEncoderSettings.codec": (), + "QVideoEncoderSettings.encodingMode": (), + "QVideoEncoderSettings.encodingOption": ('str',), + "QVideoEncoderSettings.encodingOptions": (), + "QVideoEncoderSettings.frameRate": (), + "QVideoEncoderSettings.isNull": (), + "QVideoEncoderSettings.quality": (), + "QVideoEncoderSettings.resolution": (), + "QVideoEncoderSettings.setBitRate": ('int',), + "QVideoEncoderSettings.setCodec": ('str',), + "QVideoEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QVideoEncoderSettings.setEncodingOption": ('str', 'Any'), + "QVideoEncoderSettings.setEncodingOptions": ('dict',), + "QVideoEncoderSettings.setFrameRate": ('float',), + "QVideoEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QVideoEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QVideoEncoderSettingsControl: + "QVideoEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoEncoderSettingsControl.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QVideoEncoderSettingsControl.supportedVideoCodecs": (), + "QVideoEncoderSettingsControl.videoCodecDescription": ('str',), + "QVideoEncoderSettingsControl.videoSettings": (), + + # class PySide2.QtMultimedia.QVideoFilterRunnable: + "QVideoFilterRunnable.__init__": (), + "QVideoFilterRunnable.run": ('PySide2.QtMultimedia.QVideoFrame', 'PySide2.QtMultimedia.QVideoSurfaceFormat', 'PySide2.libpyside.RunFlags'), + + # class PySide2.QtMultimedia.QVideoFrame: + "QVideoFrame.__init__": [(), ('PySide2.QtGui.QImage',), ('PySide2.QtMultimedia.QAbstractVideoBuffer', 'PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat'), ('PySide2.QtMultimedia.QVideoFrame',), ('int', 'PySide2.QtCore.QSize', 'int', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat')], + "QVideoFrame.__copy__": (), + "QVideoFrame.availableMetaData": (), + "QVideoFrame.bits": (), + "QVideoFrame.bytesPerLine": [(), ('int',)], + "QVideoFrame.endTime": (), + "QVideoFrame.fieldType": (), + "QVideoFrame.handle": (), + "QVideoFrame.handleType": (), + "QVideoFrame.height": (), + "QVideoFrame.imageFormatFromPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QVideoFrame.isMapped": (), + "QVideoFrame.isReadable": (), + "QVideoFrame.isValid": (), + "QVideoFrame.isWritable": (), + "QVideoFrame.map": ('PySide2.QtMultimedia.QAbstractVideoBuffer.MapMode',), + "QVideoFrame.mapMode": (), + "QVideoFrame.mappedBytes": (), + "QVideoFrame.metaData": ('str',), + "QVideoFrame.pixelFormat": (), + "QVideoFrame.pixelFormatFromImageFormat": ('PySide2.QtGui.QImage.Format',), + "QVideoFrame.planeCount": (), + "QVideoFrame.setEndTime": ('int',), + "QVideoFrame.setFieldType": ('PySide2.QtMultimedia.QVideoFrame.FieldType',), + "QVideoFrame.setMetaData": ('str', 'Any'), + "QVideoFrame.setStartTime": ('int',), + "QVideoFrame.size": (), + "QVideoFrame.startTime": (), + "QVideoFrame.unmap": (), + "QVideoFrame.width": (), + + # class PySide2.QtMultimedia.QVideoProbe: + "QVideoProbe.__init__": ('PySide2.QtCore.QObject',), + "QVideoProbe.isActive": (), + "QVideoProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QVideoRendererControl: + "QVideoRendererControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoRendererControl.setSurface": ('PySide2.QtMultimedia.QAbstractVideoSurface',), + "QVideoRendererControl.surface": (), + + # class PySide2.QtMultimedia.QVideoSurfaceFormat: + "QVideoSurfaceFormat.__init__": [(), ('PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat', 'PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType'), ('PySide2.QtMultimedia.QVideoSurfaceFormat',)], + "QVideoSurfaceFormat.__copy__": (), + "QVideoSurfaceFormat.frameHeight": (), + "QVideoSurfaceFormat.frameRate": (), + "QVideoSurfaceFormat.frameSize": (), + "QVideoSurfaceFormat.frameWidth": (), + "QVideoSurfaceFormat.handleType": (), + "QVideoSurfaceFormat.isMirrored": (), + "QVideoSurfaceFormat.isValid": (), + "QVideoSurfaceFormat.pixelAspectRatio": (), + "QVideoSurfaceFormat.pixelFormat": (), + "QVideoSurfaceFormat.property": ('str',), + "QVideoSurfaceFormat.propertyNames": (), + "QVideoSurfaceFormat.scanLineDirection": (), + "QVideoSurfaceFormat.setFrameRate": ('float',), + "QVideoSurfaceFormat.setFrameSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setMirrored": ('bool',), + "QVideoSurfaceFormat.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setProperty": ('str', 'Any'), + "QVideoSurfaceFormat.setScanLineDirection": ('PySide2.QtMultimedia.QVideoSurfaceFormat.Direction',), + "QVideoSurfaceFormat.setViewport": ('PySide2.QtCore.QRect',), + "QVideoSurfaceFormat.setYCbCrColorSpace": ('PySide2.QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace',), + "QVideoSurfaceFormat.sizeHint": (), + "QVideoSurfaceFormat.viewport": (), + "QVideoSurfaceFormat.yCbCrColorSpace": (), + + # class PySide2.QtMultimedia.QVideoWindowControl: + "QVideoWindowControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWindowControl.aspectRatioMode": (), + "QVideoWindowControl.brightness": (), + "QVideoWindowControl.contrast": (), + "QVideoWindowControl.displayRect": (), + "QVideoWindowControl.hue": (), + "QVideoWindowControl.isFullScreen": (), + "QVideoWindowControl.nativeSize": (), + "QVideoWindowControl.repaint": (), + "QVideoWindowControl.saturation": (), + "QVideoWindowControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWindowControl.setBrightness": ('int',), + "QVideoWindowControl.setContrast": ('int',), + "QVideoWindowControl.setDisplayRect": ('PySide2.QtCore.QRect',), + "QVideoWindowControl.setFullScreen": ('bool',), + "QVideoWindowControl.setHue": ('int',), + "QVideoWindowControl.setSaturation": ('int',), + "QVideoWindowControl.setWinId": ('int',), + "QVideoWindowControl.winId": (), + }) + +# Module PySide2.QtMultimediaWidgets +if "PySide2.QtMultimediaWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtMultimediaWidgets.QCameraViewfinder: + "QCameraViewfinder.__init__": ('PySide2.QtWidgets.QWidget',), + "QCameraViewfinder.mediaObject": (), + "QCameraViewfinder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimediaWidgets.QGraphicsVideoItem: + "QGraphicsVideoItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsVideoItem.aspectRatioMode": (), + "QGraphicsVideoItem.boundingRect": (), + "QGraphicsVideoItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsVideoItem.mediaObject": (), + "QGraphicsVideoItem.nativeSize": (), + "QGraphicsVideoItem.offset": (), + "QGraphicsVideoItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsVideoItem.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QGraphicsVideoItem.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QGraphicsVideoItem.setOffset": ('PySide2.QtCore.QPointF',), + "QGraphicsVideoItem.setSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsVideoItem.size": (), + "QGraphicsVideoItem.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtMultimediaWidgets.QVideoWidget: + "QVideoWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QVideoWidget.aspectRatioMode": (), + "QVideoWidget.brightness": (), + "QVideoWidget.contrast": (), + "QVideoWidget.event": ('PySide2.QtCore.QEvent',), + "QVideoWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QVideoWidget.hue": (), + "QVideoWidget.mediaObject": (), + "QVideoWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QVideoWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QVideoWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QVideoWidget.saturation": (), + "QVideoWidget.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidget.setBrightness": ('int',), + "QVideoWidget.setContrast": ('int',), + "QVideoWidget.setFullScreen": ('bool',), + "QVideoWidget.setHue": ('int',), + "QVideoWidget.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QVideoWidget.setSaturation": ('int',), + "QVideoWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QVideoWidget.sizeHint": (), + + # class PySide2.QtMultimediaWidgets.QVideoWidgetControl: + "QVideoWidgetControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWidgetControl.aspectRatioMode": (), + "QVideoWidgetControl.brightness": (), + "QVideoWidgetControl.contrast": (), + "QVideoWidgetControl.hue": (), + "QVideoWidgetControl.isFullScreen": (), + "QVideoWidgetControl.saturation": (), + "QVideoWidgetControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidgetControl.setBrightness": ('int',), + "QVideoWidgetControl.setContrast": ('int',), + "QVideoWidgetControl.setFullScreen": ('bool',), + "QVideoWidgetControl.setHue": ('int',), + "QVideoWidgetControl.setSaturation": ('int',), + "QVideoWidgetControl.videoWidget": (), + }) + +# Module PySide2.QtOpenGL +if "PySide2.QtOpenGL" in sys.modules: + dict.update({ + + # class PySide2.QtOpenGL.QGL: + + # class PySide2.QtOpenGL.QGLBuffer: + "QGLBuffer.__init__": [(), ('PySide2.QtOpenGL.QGLBuffer',), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.allocate": [('int',), ('int', 'int')], + "QGLBuffer.bind": (), + "QGLBuffer.bufferId": (), + "QGLBuffer.create": (), + "QGLBuffer.destroy": (), + "QGLBuffer.isCreated": (), + "QGLBuffer.map": ('PySide2.QtOpenGL.QGLBuffer.Access',), + "QGLBuffer.read": ('int', 'int', 'int'), + "QGLBuffer.release": [(), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.setUsagePattern": ('PySide2.QtOpenGL.QGLBuffer.UsagePattern',), + "QGLBuffer.size": (), + "QGLBuffer.type": (), + "QGLBuffer.unmap": (), + "QGLBuffer.usagePattern": (), + "QGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtOpenGL.QGLColormap: + "QGLColormap.__init__": [(), ('PySide2.QtOpenGL.QGLColormap',)], + "QGLColormap.__copy__": (), + "QGLColormap.entryColor": ('int',), + "QGLColormap.entryRgb": ('int',), + "QGLColormap.find": ('int',), + "QGLColormap.findNearest": ('int',), + "QGLColormap.handle": (), + "QGLColormap.isEmpty": (), + "QGLColormap.setEntry": [('int', 'PySide2.QtGui.QColor'), ('int', 'int')], + "QGLColormap.setHandle": ('int',), + "QGLColormap.size": (), + + # class PySide2.QtOpenGL.QGLContext: + "QGLContext.__init__": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.areSharing": ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtOpenGL.QGLContext'), + "QGLContext.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'PySide2.libpyside.BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'PySide2.libpyside.BindOptions'), ('str',)], + "QGLContext.chooseContext": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.colorIndex": ('PySide2.QtGui.QColor',), + "QGLContext.contextHandle": (), + "QGLContext.create": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.currentContext": (), + "QGLContext.deleteTexture": ('int',), + "QGLContext.device": (), + "QGLContext.deviceIsPixmap": (), + "QGLContext.doneCurrent": (), + "QGLContext.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLContext.format": (), + "QGLContext.fromOpenGLContext": ('PySide2.QtGui.QOpenGLContext',), + "QGLContext.initialized": (), + "QGLContext.isSharing": (), + "QGLContext.isValid": (), + "QGLContext.makeCurrent": (), + "QGLContext.moveToThread": ('PySide2.QtCore.QThread',), + "QGLContext.overlayTransparentColor": (), + "QGLContext.requestedFormat": (), + "QGLContext.reset": (), + "QGLContext.setDevice": ('PySide2.QtGui.QPaintDevice',), + "QGLContext.setFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.setInitialized": ('bool',), + "QGLContext.setTextureCacheLimit": ('int',), + "QGLContext.setValid": ('bool',), + "QGLContext.setWindowCreated": ('bool',), + "QGLContext.swapBuffers": (), + "QGLContext.textureCacheLimit": (), + "QGLContext.windowCreated": (), + + # class PySide2.QtOpenGL.QGLFormat: + "QGLFormat.__init__": [(), ('PySide2.QtOpenGL.QGLFormat',), ('PySide2.libpyside.FormatOptions', 'int')], + "QGLFormat.__copy__": (), + "QGLFormat.accum": (), + "QGLFormat.accumBufferSize": (), + "QGLFormat.alpha": (), + "QGLFormat.alphaBufferSize": (), + "QGLFormat.blueBufferSize": (), + "QGLFormat.defaultFormat": (), + "QGLFormat.defaultOverlayFormat": (), + "QGLFormat.depth": (), + "QGLFormat.depthBufferSize": (), + "QGLFormat.directRendering": (), + "QGLFormat.doubleBuffer": (), + "QGLFormat.fromSurfaceFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QGLFormat.greenBufferSize": (), + "QGLFormat.hasOpenGL": (), + "QGLFormat.hasOpenGLOverlays": (), + "QGLFormat.hasOverlay": (), + "QGLFormat.majorVersion": (), + "QGLFormat.minorVersion": (), + "QGLFormat.openGLVersionFlags": (), + "QGLFormat.plane": (), + "QGLFormat.profile": (), + "QGLFormat.redBufferSize": (), + "QGLFormat.rgba": (), + "QGLFormat.sampleBuffers": (), + "QGLFormat.samples": (), + "QGLFormat.setAccum": ('bool',), + "QGLFormat.setAccumBufferSize": ('int',), + "QGLFormat.setAlpha": ('bool',), + "QGLFormat.setAlphaBufferSize": ('int',), + "QGLFormat.setBlueBufferSize": ('int',), + "QGLFormat.setDefaultFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDefaultOverlayFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDepth": ('bool',), + "QGLFormat.setDepthBufferSize": ('int',), + "QGLFormat.setDirectRendering": ('bool',), + "QGLFormat.setDoubleBuffer": ('bool',), + "QGLFormat.setGreenBufferSize": ('int',), + "QGLFormat.setOption": ('PySide2.libpyside.FormatOptions',), + "QGLFormat.setOverlay": ('bool',), + "QGLFormat.setPlane": ('int',), + "QGLFormat.setProfile": ('PySide2.QtOpenGL.QGLFormat.OpenGLContextProfile',), + "QGLFormat.setRedBufferSize": ('int',), + "QGLFormat.setRgba": ('bool',), + "QGLFormat.setSampleBuffers": ('bool',), + "QGLFormat.setSamples": ('int',), + "QGLFormat.setStencil": ('bool',), + "QGLFormat.setStencilBufferSize": ('int',), + "QGLFormat.setStereo": ('bool',), + "QGLFormat.setSwapInterval": ('int',), + "QGLFormat.setVersion": ('int', 'int'), + "QGLFormat.stencil": (), + "QGLFormat.stencilBufferSize": (), + "QGLFormat.stereo": (), + "QGLFormat.swapInterval": (), + "QGLFormat.testOption": ('PySide2.libpyside.FormatOptions',), + "QGLFormat.toSurfaceFormat": ('PySide2.QtOpenGL.QGLFormat',), + + # class PySide2.QtOpenGL.QGLFramebufferObject: + "QGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QGLFramebufferObject.attachment": (), + "QGLFramebufferObject.bind": (), + "QGLFramebufferObject.bindDefault": (), + "QGLFramebufferObject.blitFramebuffer": ('PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), + "QGLFramebufferObject.devType": (), + "QGLFramebufferObject.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLFramebufferObject.format": (), + "QGLFramebufferObject.handle": (), + "QGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QGLFramebufferObject.isBound": (), + "QGLFramebufferObject.isValid": (), + "QGLFramebufferObject.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLFramebufferObject.paintEngine": (), + "QGLFramebufferObject.release": (), + "QGLFramebufferObject.size": (), + "QGLFramebufferObject.texture": (), + "QGLFramebufferObject.toImage": (), + + # class PySide2.QtOpenGL.QGLFramebufferObjectFormat: + "QGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtOpenGL.QGLFramebufferObjectFormat',)], + "QGLFramebufferObjectFormat.__copy__": (), + "QGLFramebufferObjectFormat.attachment": (), + "QGLFramebufferObjectFormat.internalTextureFormat": (), + "QGLFramebufferObjectFormat.mipmap": (), + "QGLFramebufferObjectFormat.samples": (), + "QGLFramebufferObjectFormat.setAttachment": ('PySide2.QtOpenGL.QGLFramebufferObject.Attachment',), + "QGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QGLFramebufferObjectFormat.setMipmap": ('bool',), + "QGLFramebufferObjectFormat.setSamples": ('int',), + "QGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtOpenGL.QGLPixelBuffer: + "QGLPixelBuffer.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget'), ('int', 'int', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget')], + "QGLPixelBuffer.bindTexture": [('PySide2.QtGui.QImage', 'int'), ('PySide2.QtGui.QPixmap', 'int'), ('str',)], + "QGLPixelBuffer.bindToDynamicTexture": ('int',), + "QGLPixelBuffer.context": (), + "QGLPixelBuffer.deleteTexture": ('int',), + "QGLPixelBuffer.devType": (), + "QGLPixelBuffer.doneCurrent": (), + "QGLPixelBuffer.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLPixelBuffer.format": (), + "QGLPixelBuffer.generateDynamicTexture": (), + "QGLPixelBuffer.handle": (), + "QGLPixelBuffer.hasOpenGLPbuffers": (), + "QGLPixelBuffer.isValid": (), + "QGLPixelBuffer.makeCurrent": (), + "QGLPixelBuffer.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLPixelBuffer.paintEngine": (), + "QGLPixelBuffer.releaseFromDynamicTexture": (), + "QGLPixelBuffer.size": (), + "QGLPixelBuffer.toImage": (), + "QGLPixelBuffer.updateDynamicTexture": ('int',), + + # class PySide2.QtOpenGL.QGLShader: + "QGLShader.__init__": [('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QObject'), ('PySide2.libpyside.ShaderType', 'PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShader.compileSourceFile": ('str',), + "QGLShader.hasOpenGLShaders": ('PySide2.libpyside.ShaderType', 'PySide2.QtOpenGL.QGLContext'), + "QGLShader.isCompiled": (), + "QGLShader.log": (), + "QGLShader.shaderId": (), + "QGLShader.shaderType": (), + "QGLShader.sourceCode": (), + + # class PySide2.QtOpenGL.QGLShaderProgram: + "QGLShaderProgram.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShaderProgram.addShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.addShaderFromSourceCode": [('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QByteArray'), ('PySide2.libpyside.ShaderType', 'str')], + "QGLShaderProgram.addShaderFromSourceFile": ('PySide2.libpyside.ShaderType', 'str'), + "QGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShaderProgram.bind": (), + "QGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.geometryInputType": (), + "QGLShaderProgram.geometryOutputType": (), + "QGLShaderProgram.geometryOutputVertexCount": (), + "QGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtOpenGL.QGLContext',), + "QGLShaderProgram.isLinked": (), + "QGLShaderProgram.link": (), + "QGLShaderProgram.log": (), + "QGLShaderProgram.maxGeometryOutputVertices": (), + "QGLShaderProgram.programId": (), + "QGLShaderProgram.release": (), + "QGLShaderProgram.removeAllShaders": (), + "QGLShaderProgram.removeShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.setAttributeArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setAttributeArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setAttributeArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float')], + "QGLShaderProgram.setGeometryInputType": ('int',), + "QGLShaderProgram.setGeometryOutputType": ('int',), + "QGLShaderProgram.setGeometryOutputVertexCount": ('int',), + "QGLShaderProgram.setUniformValue": [('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QGLShaderProgram.setUniformValueArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setUniformValueArray2x2": [('int', 'PySide2.QtGui.QMatrix2x2', 'int'), ('str', 'PySide2.QtGui.QMatrix2x2', 'int')], + "QGLShaderProgram.setUniformValueArray2x3": [('int', 'PySide2.QtGui.QMatrix2x3', 'int'), ('str', 'PySide2.QtGui.QMatrix2x3', 'int')], + "QGLShaderProgram.setUniformValueArray2x4": [('int', 'PySide2.QtGui.QMatrix2x4', 'int'), ('str', 'PySide2.QtGui.QMatrix2x4', 'int')], + "QGLShaderProgram.setUniformValueArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setUniformValueArray3x2": [('int', 'PySide2.QtGui.QMatrix3x2', 'int'), ('str', 'PySide2.QtGui.QMatrix3x2', 'int')], + "QGLShaderProgram.setUniformValueArray3x3": [('int', 'PySide2.QtGui.QMatrix3x3', 'int'), ('str', 'PySide2.QtGui.QMatrix3x3', 'int')], + "QGLShaderProgram.setUniformValueArray3x4": [('int', 'PySide2.QtGui.QMatrix3x4', 'int'), ('str', 'PySide2.QtGui.QMatrix3x4', 'int')], + "QGLShaderProgram.setUniformValueArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setUniformValueArray4x2": [('int', 'PySide2.QtGui.QMatrix4x2', 'int'), ('str', 'PySide2.QtGui.QMatrix4x2', 'int')], + "QGLShaderProgram.setUniformValueArray4x3": [('int', 'PySide2.QtGui.QMatrix4x3', 'int'), ('str', 'PySide2.QtGui.QMatrix4x3', 'int')], + "QGLShaderProgram.setUniformValueArray4x4": [('int', 'PySide2.QtGui.QMatrix4x4', 'int'), ('str', 'PySide2.QtGui.QMatrix4x4', 'int')], + "QGLShaderProgram.setUniformValueArrayInt": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.setUniformValueArrayUint": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.shaders": (), + "QGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtOpenGL.QGLWidget: + "QGLWidget.__init__": [('PySide2.QtOpenGL.QGLContext', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtOpenGL.QGLFormat', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'PySide2.libpyside.WindowFlags')], + "QGLWidget.autoBufferSwap": (), + "QGLWidget.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'PySide2.libpyside.BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'PySide2.libpyside.BindOptions'), ('str',)], + "QGLWidget.colormap": (), + "QGLWidget.context": (), + "QGLWidget.convertToGLFormat": ('PySide2.QtGui.QImage',), + "QGLWidget.deleteTexture": ('int',), + "QGLWidget.doneCurrent": (), + "QGLWidget.doubleBuffer": (), + "QGLWidget.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLWidget.event": ('PySide2.QtCore.QEvent',), + "QGLWidget.format": (), + "QGLWidget.glDraw": (), + "QGLWidget.glInit": (), + "QGLWidget.grabFrameBuffer": ('bool',), + "QGLWidget.initializeGL": (), + "QGLWidget.initializeOverlayGL": (), + "QGLWidget.isSharing": (), + "QGLWidget.isValid": (), + "QGLWidget.makeCurrent": (), + "QGLWidget.makeOverlayCurrent": (), + "QGLWidget.overlayContext": (), + "QGLWidget.paintEngine": (), + "QGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGLWidget.paintGL": (), + "QGLWidget.paintOverlayGL": (), + "QGLWidget.qglClearColor": ('PySide2.QtGui.QColor',), + "QGLWidget.qglColor": ('PySide2.QtGui.QColor',), + "QGLWidget.renderPixmap": ('int', 'int', 'bool'), + "QGLWidget.renderText": [('float', 'float', 'float', 'str', 'PySide2.QtGui.QFont'), ('int', 'int', 'str', 'PySide2.QtGui.QFont')], + "QGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGLWidget.resizeGL": ('int', 'int'), + "QGLWidget.resizeOverlayGL": ('int', 'int'), + "QGLWidget.setAutoBufferSwap": ('bool',), + "QGLWidget.setColormap": ('PySide2.QtOpenGL.QGLColormap',), + "QGLWidget.swapBuffers": (), + "QGLWidget.updateGL": (), + "QGLWidget.updateOverlayGL": (), + }) + +# Module PySide2.QtPositioning +if "PySide2.QtPositioning" in sys.modules: + dict.update({ + + # class PySide2.QtPositioning.QGeoAddress: + "QGeoAddress.__init__": [(), ('PySide2.QtPositioning.QGeoAddress',)], + "QGeoAddress.__copy__": (), + "QGeoAddress.city": (), + "QGeoAddress.clear": (), + "QGeoAddress.country": (), + "QGeoAddress.countryCode": (), + "QGeoAddress.county": (), + "QGeoAddress.district": (), + "QGeoAddress.isEmpty": (), + "QGeoAddress.isTextGenerated": (), + "QGeoAddress.postalCode": (), + "QGeoAddress.setCity": ('str',), + "QGeoAddress.setCountry": ('str',), + "QGeoAddress.setCountryCode": ('str',), + "QGeoAddress.setCounty": ('str',), + "QGeoAddress.setDistrict": ('str',), + "QGeoAddress.setPostalCode": ('str',), + "QGeoAddress.setState": ('str',), + "QGeoAddress.setStreet": ('str',), + "QGeoAddress.setText": ('str',), + "QGeoAddress.state": (), + "QGeoAddress.street": (), + "QGeoAddress.text": (), + + # class PySide2.QtPositioning.QGeoAreaMonitorInfo: + "QGeoAreaMonitorInfo.__init__": [('PySide2.QtPositioning.QGeoAreaMonitorInfo',), ('str',)], + "QGeoAreaMonitorInfo.__copy__": (), + "QGeoAreaMonitorInfo.area": (), + "QGeoAreaMonitorInfo.expiration": (), + "QGeoAreaMonitorInfo.identifier": (), + "QGeoAreaMonitorInfo.isPersistent": (), + "QGeoAreaMonitorInfo.isValid": (), + "QGeoAreaMonitorInfo.name": (), + "QGeoAreaMonitorInfo.notificationParameters": (), + "QGeoAreaMonitorInfo.setArea": ('PySide2.QtPositioning.QGeoShape',), + "QGeoAreaMonitorInfo.setExpiration": ('PySide2.QtCore.QDateTime',), + "QGeoAreaMonitorInfo.setName": ('str',), + "QGeoAreaMonitorInfo.setNotificationParameters": ('dict',), + "QGeoAreaMonitorInfo.setPersistent": ('bool',), + + # class PySide2.QtPositioning.QGeoAreaMonitorSource: + "QGeoAreaMonitorSource.__init__": ('PySide2.QtCore.QObject',), + "QGeoAreaMonitorSource.activeMonitors": [(), ('PySide2.QtPositioning.QGeoShape',)], + "QGeoAreaMonitorSource.availableSources": (), + "QGeoAreaMonitorSource.createDefaultSource": ('PySide2.QtCore.QObject',), + "QGeoAreaMonitorSource.createSource": ('str', 'PySide2.QtCore.QObject'), + "QGeoAreaMonitorSource.positionInfoSource": (), + "QGeoAreaMonitorSource.requestUpdate": ('PySide2.QtPositioning.QGeoAreaMonitorInfo', 'str'), + "QGeoAreaMonitorSource.setPositionInfoSource": ('PySide2.QtPositioning.QGeoPositionInfoSource',), + "QGeoAreaMonitorSource.sourceName": (), + "QGeoAreaMonitorSource.startMonitoring": ('PySide2.QtPositioning.QGeoAreaMonitorInfo',), + "QGeoAreaMonitorSource.stopMonitoring": ('PySide2.QtPositioning.QGeoAreaMonitorInfo',), + "QGeoAreaMonitorSource.supportedAreaMonitorFeatures": (), + + # class PySide2.QtPositioning.QGeoCircle: + "QGeoCircle.__init__": [(), ('PySide2.QtPositioning.QGeoCircle',), ('PySide2.QtPositioning.QGeoCoordinate', 'float'), ('PySide2.QtPositioning.QGeoShape',)], + "QGeoCircle.__copy__": (), + "QGeoCircle.center": (), + "QGeoCircle.extendCircle": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoCircle.radius": (), + "QGeoCircle.setCenter": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoCircle.setRadius": ('float',), + "QGeoCircle.toString": (), + "QGeoCircle.translate": ('float', 'float'), + "QGeoCircle.translated": ('float', 'float'), + + # class PySide2.QtPositioning.QGeoCoordinate: + "QGeoCoordinate.__init__": [(), ('PySide2.QtPositioning.QGeoCoordinate',), ('float', 'float'), ('float', 'float', 'float')], + "QGeoCoordinate.__copy__": (), + "QGeoCoordinate.altitude": (), + "QGeoCoordinate.atDistanceAndAzimuth": ('float', 'float', 'float'), + "QGeoCoordinate.azimuthTo": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoCoordinate.distanceTo": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoCoordinate.isValid": (), + "QGeoCoordinate.latitude": (), + "QGeoCoordinate.longitude": (), + "QGeoCoordinate.setAltitude": ('float',), + "QGeoCoordinate.setLatitude": ('float',), + "QGeoCoordinate.setLongitude": ('float',), + "QGeoCoordinate.toString": ('PySide2.QtPositioning.QGeoCoordinate.CoordinateFormat',), + "QGeoCoordinate.type": (), + + # class PySide2.QtPositioning.QGeoLocation: + "QGeoLocation.__init__": [(), ('PySide2.QtPositioning.QGeoLocation',)], + "QGeoLocation.__copy__": (), + "QGeoLocation.address": (), + "QGeoLocation.boundingBox": (), + "QGeoLocation.coordinate": (), + "QGeoLocation.isEmpty": (), + "QGeoLocation.setAddress": ('PySide2.QtPositioning.QGeoAddress',), + "QGeoLocation.setBoundingBox": ('PySide2.QtPositioning.QGeoRectangle',), + "QGeoLocation.setCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + + # class PySide2.QtPositioning.QGeoPath: + "QGeoPath.__init__": [(), ('PySide2.QtPositioning.QGeoPath',), ('PySide2.QtPositioning.QGeoShape',), ('list', 'float')], + "QGeoPath.__copy__": (), + "QGeoPath.addCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPath.containsCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPath.coordinateAt": ('int',), + "QGeoPath.insertCoordinate": ('int', 'PySide2.QtPositioning.QGeoCoordinate'), + "QGeoPath.length": ('int', 'int'), + "QGeoPath.path": (), + "QGeoPath.removeCoordinate": [('PySide2.QtPositioning.QGeoCoordinate',), ('int',)], + "QGeoPath.replaceCoordinate": ('int', 'PySide2.QtPositioning.QGeoCoordinate'), + "QGeoPath.setPath": ('list',), + "QGeoPath.setVariantPath": ('list',), + "QGeoPath.setWidth": ('float',), + "QGeoPath.size": (), + "QGeoPath.toString": (), + "QGeoPath.translate": ('float', 'float'), + "QGeoPath.translated": ('float', 'float'), + "QGeoPath.variantPath": (), + "QGeoPath.width": (), + + # class PySide2.QtPositioning.QGeoPolygon: + "QGeoPolygon.__init__": [(), ('PySide2.QtPositioning.QGeoPolygon',), ('PySide2.QtPositioning.QGeoShape',), ('list',)], + "QGeoPolygon.__copy__": (), + "QGeoPolygon.addCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPolygon.containsCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPolygon.coordinateAt": ('int',), + "QGeoPolygon.insertCoordinate": ('int', 'PySide2.QtPositioning.QGeoCoordinate'), + "QGeoPolygon.length": ('int', 'int'), + "QGeoPolygon.path": (), + "QGeoPolygon.removeCoordinate": [('PySide2.QtPositioning.QGeoCoordinate',), ('int',)], + "QGeoPolygon.replaceCoordinate": ('int', 'PySide2.QtPositioning.QGeoCoordinate'), + "QGeoPolygon.setPath": ('list',), + "QGeoPolygon.size": (), + "QGeoPolygon.toString": (), + "QGeoPolygon.translate": ('float', 'float'), + "QGeoPolygon.translated": ('float', 'float'), + + # class PySide2.QtPositioning.QGeoPositionInfo: + "QGeoPositionInfo.__init__": [(), ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtCore.QDateTime'), ('PySide2.QtPositioning.QGeoPositionInfo',)], + "QGeoPositionInfo.__copy__": (), + "QGeoPositionInfo.attribute": ('PySide2.QtPositioning.QGeoPositionInfo.Attribute',), + "QGeoPositionInfo.coordinate": (), + "QGeoPositionInfo.hasAttribute": ('PySide2.QtPositioning.QGeoPositionInfo.Attribute',), + "QGeoPositionInfo.isValid": (), + "QGeoPositionInfo.removeAttribute": ('PySide2.QtPositioning.QGeoPositionInfo.Attribute',), + "QGeoPositionInfo.setAttribute": ('PySide2.QtPositioning.QGeoPositionInfo.Attribute', 'float'), + "QGeoPositionInfo.setCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPositionInfo.setTimestamp": ('PySide2.QtCore.QDateTime',), + "QGeoPositionInfo.timestamp": (), + + # class PySide2.QtPositioning.QGeoPositionInfoSource: + "QGeoPositionInfoSource.__init__": ('PySide2.QtCore.QObject',), + "QGeoPositionInfoSource.availableSources": (), + "QGeoPositionInfoSource.createDefaultSource": ('PySide2.QtCore.QObject',), + "QGeoPositionInfoSource.createSource": ('str', 'PySide2.QtCore.QObject'), + "QGeoPositionInfoSource.lastKnownPosition": ('bool',), + "QGeoPositionInfoSource.minimumUpdateInterval": (), + "QGeoPositionInfoSource.preferredPositioningMethods": (), + "QGeoPositionInfoSource.requestUpdate": ('int',), + "QGeoPositionInfoSource.setPreferredPositioningMethods": ('PySide2.libpyside.PositioningMethods',), + "QGeoPositionInfoSource.setUpdateInterval": ('int',), + "QGeoPositionInfoSource.sourceName": (), + "QGeoPositionInfoSource.startUpdates": (), + "QGeoPositionInfoSource.stopUpdates": (), + "QGeoPositionInfoSource.supportedPositioningMethods": (), + "QGeoPositionInfoSource.updateInterval": (), + + # class PySide2.QtPositioning.QGeoPositionInfoSourceFactory: + "QGeoPositionInfoSourceFactory.__init__": (), + "QGeoPositionInfoSourceFactory.areaMonitor": ('PySide2.QtCore.QObject',), + "QGeoPositionInfoSourceFactory.positionInfoSource": ('PySide2.QtCore.QObject',), + "QGeoPositionInfoSourceFactory.satelliteInfoSource": ('PySide2.QtCore.QObject',), + + # class PySide2.QtPositioning.QGeoRectangle: + "QGeoRectangle.__init__": [(), ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtPositioning.QGeoCoordinate'), ('PySide2.QtPositioning.QGeoCoordinate', 'float', 'float'), ('PySide2.QtPositioning.QGeoRectangle',), ('PySide2.QtPositioning.QGeoShape',), ('list',)], + "QGeoRectangle.__copy__": (), + "QGeoRectangle.bottomLeft": (), + "QGeoRectangle.bottomRight": (), + "QGeoRectangle.center": (), + "QGeoRectangle.contains": [('PySide2.QtPositioning.QGeoCoordinate',), ('PySide2.QtPositioning.QGeoRectangle',)], + "QGeoRectangle.extendRectangle": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.height": (), + "QGeoRectangle.intersects": ('PySide2.QtPositioning.QGeoRectangle',), + "QGeoRectangle.setBottomLeft": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setBottomRight": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setCenter": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setHeight": ('float',), + "QGeoRectangle.setTopLeft": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setTopRight": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setWidth": ('float',), + "QGeoRectangle.toString": (), + "QGeoRectangle.topLeft": (), + "QGeoRectangle.topRight": (), + "QGeoRectangle.translate": ('float', 'float'), + "QGeoRectangle.translated": ('float', 'float'), + "QGeoRectangle.united": ('PySide2.QtPositioning.QGeoRectangle',), + "QGeoRectangle.width": (), + + # class PySide2.QtPositioning.QGeoSatelliteInfo: + "QGeoSatelliteInfo.__init__": [(), ('PySide2.QtPositioning.QGeoSatelliteInfo',)], + "QGeoSatelliteInfo.__copy__": (), + "QGeoSatelliteInfo.attribute": ('PySide2.QtPositioning.QGeoSatelliteInfo.Attribute',), + "QGeoSatelliteInfo.hasAttribute": ('PySide2.QtPositioning.QGeoSatelliteInfo.Attribute',), + "QGeoSatelliteInfo.removeAttribute": ('PySide2.QtPositioning.QGeoSatelliteInfo.Attribute',), + "QGeoSatelliteInfo.satelliteIdentifier": (), + "QGeoSatelliteInfo.satelliteSystem": (), + "QGeoSatelliteInfo.setAttribute": ('PySide2.QtPositioning.QGeoSatelliteInfo.Attribute', 'float'), + "QGeoSatelliteInfo.setSatelliteIdentifier": ('int',), + "QGeoSatelliteInfo.setSatelliteSystem": ('PySide2.QtPositioning.QGeoSatelliteInfo.SatelliteSystem',), + "QGeoSatelliteInfo.setSignalStrength": ('int',), + "QGeoSatelliteInfo.signalStrength": (), + + # class PySide2.QtPositioning.QGeoSatelliteInfoSource: + "QGeoSatelliteInfoSource.__init__": ('PySide2.QtCore.QObject',), + "QGeoSatelliteInfoSource.availableSources": (), + "QGeoSatelliteInfoSource.createDefaultSource": ('PySide2.QtCore.QObject',), + "QGeoSatelliteInfoSource.createSource": ('str', 'PySide2.QtCore.QObject'), + "QGeoSatelliteInfoSource.minimumUpdateInterval": (), + "QGeoSatelliteInfoSource.requestUpdate": ('int',), + "QGeoSatelliteInfoSource.setUpdateInterval": ('int',), + "QGeoSatelliteInfoSource.sourceName": (), + "QGeoSatelliteInfoSource.startUpdates": (), + "QGeoSatelliteInfoSource.stopUpdates": (), + "QGeoSatelliteInfoSource.updateInterval": (), + + # class PySide2.QtPositioning.QGeoShape: + "QGeoShape.__init__": [(), ('PySide2.QtPositioning.QGeoShape',)], + "QGeoShape.__copy__": (), + "QGeoShape.boundingGeoRectangle": (), + "QGeoShape.center": (), + "QGeoShape.contains": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoShape.extendShape": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoShape.isEmpty": (), + "QGeoShape.isValid": (), + "QGeoShape.toString": (), + "QGeoShape.type": (), + + # class PySide2.QtPositioning.QNmeaPositionInfoSource: + "QNmeaPositionInfoSource.__init__": ('PySide2.QtPositioning.QNmeaPositionInfoSource.UpdateMode', 'PySide2.QtCore.QObject'), + "QNmeaPositionInfoSource.device": (), + "QNmeaPositionInfoSource.error": (), + "QNmeaPositionInfoSource.lastKnownPosition": ('bool',), + "QNmeaPositionInfoSource.minimumUpdateInterval": (), + "QNmeaPositionInfoSource.parsePosInfoFromNmeaData": ('str', 'int', 'PySide2.QtPositioning.QGeoPositionInfo', 'bool'), + "QNmeaPositionInfoSource.requestUpdate": ('int',), + "QNmeaPositionInfoSource.setDevice": ('PySide2.QtCore.QIODevice',), + "QNmeaPositionInfoSource.setUpdateInterval": ('int',), + "QNmeaPositionInfoSource.setUserEquivalentRangeError": ('float',), + "QNmeaPositionInfoSource.startUpdates": (), + "QNmeaPositionInfoSource.stopUpdates": (), + "QNmeaPositionInfoSource.supportedPositioningMethods": (), + "QNmeaPositionInfoSource.updateMode": (), + "QNmeaPositionInfoSource.userEquivalentRangeError": (), + }) + +# Module PySide2.QtLocation +if "PySide2.QtLocation" in sys.modules: + dict.update({ + + # class PySide2.QtLocation.QGeoCodeReply: + "QGeoCodeReply.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtLocation.QGeoCodeReply.Error', 'str', 'PySide2.QtCore.QObject')], + "QGeoCodeReply.abort": (), + "QGeoCodeReply.addLocation": ('PySide2.QtPositioning.QGeoLocation',), + "QGeoCodeReply.errorString": (), + "QGeoCodeReply.isFinished": (), + "QGeoCodeReply.limit": (), + "QGeoCodeReply.locations": (), + "QGeoCodeReply.offset": (), + "QGeoCodeReply.setError": ('PySide2.QtLocation.QGeoCodeReply.Error', 'str'), + "QGeoCodeReply.setFinished": ('bool',), + "QGeoCodeReply.setLimit": ('int',), + "QGeoCodeReply.setLocations": ('list',), + "QGeoCodeReply.setOffset": ('int',), + "QGeoCodeReply.setViewport": ('PySide2.QtPositioning.QGeoShape',), + "QGeoCodeReply.viewport": (), + + # class PySide2.QtLocation.QGeoCodingManager: + "QGeoCodingManager.geocode": [('PySide2.QtPositioning.QGeoAddress', 'PySide2.QtPositioning.QGeoShape'), ('str', 'int', 'int', 'PySide2.QtPositioning.QGeoShape')], + "QGeoCodingManager.locale": (), + "QGeoCodingManager.managerName": (), + "QGeoCodingManager.managerVersion": (), + "QGeoCodingManager.reverseGeocode": ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtPositioning.QGeoShape'), + "QGeoCodingManager.setLocale": ('PySide2.QtCore.QLocale',), + + # class PySide2.QtLocation.QGeoCodingManagerEngine: + "QGeoCodingManagerEngine.__init__": ('dict', 'PySide2.QtCore.QObject'), + "QGeoCodingManagerEngine.geocode": [('PySide2.QtPositioning.QGeoAddress', 'PySide2.QtPositioning.QGeoShape'), ('str', 'int', 'int', 'PySide2.QtPositioning.QGeoShape')], + "QGeoCodingManagerEngine.locale": (), + "QGeoCodingManagerEngine.managerName": (), + "QGeoCodingManagerEngine.managerVersion": (), + "QGeoCodingManagerEngine.reverseGeocode": ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtPositioning.QGeoShape'), + "QGeoCodingManagerEngine.setLocale": ('PySide2.QtCore.QLocale',), + + # class PySide2.QtLocation.QGeoManeuver: + "QGeoManeuver.__init__": [(), ('PySide2.QtLocation.QGeoManeuver',)], + "QGeoManeuver.__copy__": (), + "QGeoManeuver.direction": (), + "QGeoManeuver.distanceToNextInstruction": (), + "QGeoManeuver.extendedAttributes": (), + "QGeoManeuver.instructionText": (), + "QGeoManeuver.isValid": (), + "QGeoManeuver.position": (), + "QGeoManeuver.setDirection": ('PySide2.QtLocation.QGeoManeuver.InstructionDirection',), + "QGeoManeuver.setDistanceToNextInstruction": ('float',), + "QGeoManeuver.setExtendedAttributes": ('dict',), + "QGeoManeuver.setInstructionText": ('str',), + "QGeoManeuver.setPosition": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoManeuver.setTimeToNextInstruction": ('int',), + "QGeoManeuver.setWaypoint": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoManeuver.timeToNextInstruction": (), + "QGeoManeuver.waypoint": (), + + # class PySide2.QtLocation.QGeoRoute: + "QGeoRoute.__init__": [(), ('PySide2.QtLocation.QGeoRoute',)], + "QGeoRoute.__copy__": (), + "QGeoRoute.bounds": (), + "QGeoRoute.distance": (), + "QGeoRoute.firstRouteSegment": (), + "QGeoRoute.path": (), + "QGeoRoute.request": (), + "QGeoRoute.routeId": (), + "QGeoRoute.setBounds": ('PySide2.QtPositioning.QGeoRectangle',), + "QGeoRoute.setDistance": ('float',), + "QGeoRoute.setFirstRouteSegment": ('PySide2.QtLocation.QGeoRouteSegment',), + "QGeoRoute.setPath": ('list',), + "QGeoRoute.setRequest": ('PySide2.QtLocation.QGeoRouteRequest',), + "QGeoRoute.setRouteId": ('str',), + "QGeoRoute.setTravelMode": ('PySide2.QtLocation.QGeoRouteRequest.TravelMode',), + "QGeoRoute.setTravelTime": ('int',), + "QGeoRoute.travelMode": (), + "QGeoRoute.travelTime": (), + + # class PySide2.QtLocation.QGeoRouteReply: + "QGeoRouteReply.__init__": [('PySide2.QtLocation.QGeoRouteReply.Error', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtLocation.QGeoRouteRequest', 'PySide2.QtCore.QObject')], + "QGeoRouteReply.abort": (), + "QGeoRouteReply.addRoutes": ('list',), + "QGeoRouteReply.errorString": (), + "QGeoRouteReply.isFinished": (), + "QGeoRouteReply.request": (), + "QGeoRouteReply.routes": (), + "QGeoRouteReply.setError": ('PySide2.QtLocation.QGeoRouteReply.Error', 'str'), + "QGeoRouteReply.setFinished": ('bool',), + "QGeoRouteReply.setRoutes": ('list',), + + # class PySide2.QtLocation.QGeoRouteRequest: + "QGeoRouteRequest.__init__": [('PySide2.QtLocation.QGeoRouteRequest',), ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtPositioning.QGeoCoordinate'), ('list',)], + "QGeoRouteRequest.excludeAreas": (), + "QGeoRouteRequest.extraParameters": (), + "QGeoRouteRequest.featureTypes": (), + "QGeoRouteRequest.featureWeight": ('PySide2.QtLocation.QGeoRouteRequest.FeatureType',), + "QGeoRouteRequest.maneuverDetail": (), + "QGeoRouteRequest.numberAlternativeRoutes": (), + "QGeoRouteRequest.routeOptimization": (), + "QGeoRouteRequest.segmentDetail": (), + "QGeoRouteRequest.setExcludeAreas": ('list',), + "QGeoRouteRequest.setExtraParameters": ('dict',), + "QGeoRouteRequest.setFeatureWeight": ('PySide2.QtLocation.QGeoRouteRequest.FeatureType', 'PySide2.QtLocation.QGeoRouteRequest.FeatureWeight'), + "QGeoRouteRequest.setManeuverDetail": ('PySide2.QtLocation.QGeoRouteRequest.ManeuverDetail',), + "QGeoRouteRequest.setNumberAlternativeRoutes": ('int',), + "QGeoRouteRequest.setRouteOptimization": ('PySide2.libpyside.RouteOptimizations',), + "QGeoRouteRequest.setSegmentDetail": ('PySide2.QtLocation.QGeoRouteRequest.SegmentDetail',), + "QGeoRouteRequest.setTravelModes": ('PySide2.libpyside.TravelModes',), + "QGeoRouteRequest.setWaypoints": ('list',), + "QGeoRouteRequest.setWaypointsMetadata": ('list',), + "QGeoRouteRequest.travelModes": (), + "QGeoRouteRequest.waypoints": (), + "QGeoRouteRequest.waypointsMetadata": (), + + # class PySide2.QtLocation.QGeoRouteSegment: + "QGeoRouteSegment.__init__": [(), ('PySide2.QtLocation.QGeoRouteSegment',)], + "QGeoRouteSegment.__copy__": (), + "QGeoRouteSegment.distance": (), + "QGeoRouteSegment.isValid": (), + "QGeoRouteSegment.maneuver": (), + "QGeoRouteSegment.nextRouteSegment": (), + "QGeoRouteSegment.path": (), + "QGeoRouteSegment.setDistance": ('float',), + "QGeoRouteSegment.setManeuver": ('PySide2.QtLocation.QGeoManeuver',), + "QGeoRouteSegment.setNextRouteSegment": ('PySide2.QtLocation.QGeoRouteSegment',), + "QGeoRouteSegment.setPath": ('list',), + "QGeoRouteSegment.setTravelTime": ('int',), + "QGeoRouteSegment.travelTime": (), + + # class PySide2.QtLocation.QGeoRoutingManager: + "QGeoRoutingManager.calculateRoute": ('PySide2.QtLocation.QGeoRouteRequest',), + "QGeoRoutingManager.locale": (), + "QGeoRoutingManager.managerName": (), + "QGeoRoutingManager.managerVersion": (), + "QGeoRoutingManager.measurementSystem": (), + "QGeoRoutingManager.setLocale": ('PySide2.QtCore.QLocale',), + "QGeoRoutingManager.setMeasurementSystem": ('PySide2.QtCore.QLocale.MeasurementSystem',), + "QGeoRoutingManager.supportedFeatureTypes": (), + "QGeoRoutingManager.supportedFeatureWeights": (), + "QGeoRoutingManager.supportedManeuverDetails": (), + "QGeoRoutingManager.supportedRouteOptimizations": (), + "QGeoRoutingManager.supportedSegmentDetails": (), + "QGeoRoutingManager.supportedTravelModes": (), + "QGeoRoutingManager.updateRoute": ('PySide2.QtLocation.QGeoRoute', 'PySide2.QtPositioning.QGeoCoordinate'), + + # class PySide2.QtLocation.QGeoRoutingManagerEngine: + "QGeoRoutingManagerEngine.__init__": ('dict', 'PySide2.QtCore.QObject'), + "QGeoRoutingManagerEngine.calculateRoute": ('PySide2.QtLocation.QGeoRouteRequest',), + "QGeoRoutingManagerEngine.locale": (), + "QGeoRoutingManagerEngine.managerName": (), + "QGeoRoutingManagerEngine.managerVersion": (), + "QGeoRoutingManagerEngine.measurementSystem": (), + "QGeoRoutingManagerEngine.setLocale": ('PySide2.QtCore.QLocale',), + "QGeoRoutingManagerEngine.setMeasurementSystem": ('PySide2.QtCore.QLocale.MeasurementSystem',), + "QGeoRoutingManagerEngine.setSupportedFeatureTypes": ('PySide2.libpyside.FeatureTypes',), + "QGeoRoutingManagerEngine.setSupportedFeatureWeights": ('PySide2.libpyside.FeatureWeights',), + "QGeoRoutingManagerEngine.setSupportedManeuverDetails": ('PySide2.libpyside.ManeuverDetails',), + "QGeoRoutingManagerEngine.setSupportedRouteOptimizations": ('PySide2.libpyside.RouteOptimizations',), + "QGeoRoutingManagerEngine.setSupportedSegmentDetails": ('PySide2.libpyside.SegmentDetails',), + "QGeoRoutingManagerEngine.setSupportedTravelModes": ('PySide2.libpyside.TravelModes',), + "QGeoRoutingManagerEngine.supportedFeatureTypes": (), + "QGeoRoutingManagerEngine.supportedFeatureWeights": (), + "QGeoRoutingManagerEngine.supportedManeuverDetails": (), + "QGeoRoutingManagerEngine.supportedRouteOptimizations": (), + "QGeoRoutingManagerEngine.supportedSegmentDetails": (), + "QGeoRoutingManagerEngine.supportedTravelModes": (), + "QGeoRoutingManagerEngine.updateRoute": ('PySide2.QtLocation.QGeoRoute', 'PySide2.QtPositioning.QGeoCoordinate'), + + # class PySide2.QtLocation.QGeoServiceProvider: + "QGeoServiceProvider.__init__": ('str', 'dict', 'bool'), + "QGeoServiceProvider.availableServiceProviders": (), + "QGeoServiceProvider.error": (), + "QGeoServiceProvider.errorString": (), + "QGeoServiceProvider.geocodingFeatures": (), + "QGeoServiceProvider.geocodingManager": (), + "QGeoServiceProvider.mappingFeatures": (), + "QGeoServiceProvider.navigationFeatures": (), + "QGeoServiceProvider.placeManager": (), + "QGeoServiceProvider.placesFeatures": (), + "QGeoServiceProvider.routingFeatures": (), + "QGeoServiceProvider.routingManager": (), + "QGeoServiceProvider.setAllowExperimental": ('bool',), + "QGeoServiceProvider.setLocale": ('PySide2.QtCore.QLocale',), + "QGeoServiceProvider.setParameters": ('dict',), + + # class PySide2.QtLocation.QGeoServiceProviderFactory: + "QGeoServiceProviderFactory.__init__": (), + "QGeoServiceProviderFactory.createGeocodingManagerEngine": ('dict', 'PySide2.QtLocation.QGeoServiceProvider.Error', 'str'), + "QGeoServiceProviderFactory.createPlaceManagerEngine": ('dict', 'PySide2.QtLocation.QGeoServiceProvider.Error', 'str'), + "QGeoServiceProviderFactory.createRoutingManagerEngine": ('dict', 'PySide2.QtLocation.QGeoServiceProvider.Error', 'str'), + + # class PySide2.QtLocation.QGeoServiceProviderFactoryV2: + "QGeoServiceProviderFactoryV2.__init__": (), + + # class PySide2.QtLocation.QPlace: + "QPlace.__init__": [(), ('PySide2.QtLocation.QPlace',)], + "QPlace.__copy__": (), + "QPlace.appendContactDetail": ('str', 'PySide2.QtLocation.QPlaceContactDetail'), + "QPlace.attribution": (), + "QPlace.categories": (), + "QPlace.contactDetails": ('str',), + "QPlace.contactTypes": (), + "QPlace.detailsFetched": (), + "QPlace.extendedAttribute": ('str',), + "QPlace.extendedAttributeTypes": (), + "QPlace.icon": (), + "QPlace.isEmpty": (), + "QPlace.location": (), + "QPlace.name": (), + "QPlace.placeId": (), + "QPlace.primaryEmail": (), + "QPlace.primaryFax": (), + "QPlace.primaryPhone": (), + "QPlace.primaryWebsite": (), + "QPlace.ratings": (), + "QPlace.removeContactDetails": ('str',), + "QPlace.removeExtendedAttribute": ('str',), + "QPlace.setAttribution": ('str',), + "QPlace.setCategories": ('list',), + "QPlace.setCategory": ('PySide2.QtLocation.QPlaceCategory',), + "QPlace.setContactDetails": ('str', 'list'), + "QPlace.setDetailsFetched": ('bool',), + "QPlace.setExtendedAttribute": ('str', 'PySide2.QtLocation.QPlaceAttribute'), + "QPlace.setIcon": ('PySide2.QtLocation.QPlaceIcon',), + "QPlace.setLocation": ('PySide2.QtPositioning.QGeoLocation',), + "QPlace.setName": ('str',), + "QPlace.setPlaceId": ('str',), + "QPlace.setRatings": ('PySide2.QtLocation.QPlaceRatings',), + "QPlace.setSupplier": ('PySide2.QtLocation.QPlaceSupplier',), + "QPlace.supplier": (), + + # class PySide2.QtLocation.QPlaceAttribute: + "QPlaceAttribute.__init__": [(), ('PySide2.QtLocation.QPlaceAttribute',)], + "QPlaceAttribute.__copy__": (), + "QPlaceAttribute.isEmpty": (), + "QPlaceAttribute.label": (), + "QPlaceAttribute.setLabel": ('str',), + "QPlaceAttribute.setText": ('str',), + "QPlaceAttribute.text": (), + + # class PySide2.QtLocation.QPlaceCategory: + "QPlaceCategory.__init__": [(), ('PySide2.QtLocation.QPlaceCategory',)], + "QPlaceCategory.__copy__": (), + "QPlaceCategory.categoryId": (), + "QPlaceCategory.icon": (), + "QPlaceCategory.isEmpty": (), + "QPlaceCategory.name": (), + "QPlaceCategory.setCategoryId": ('str',), + "QPlaceCategory.setIcon": ('PySide2.QtLocation.QPlaceIcon',), + "QPlaceCategory.setName": ('str',), + + # class PySide2.QtLocation.QPlaceContactDetail: + "QPlaceContactDetail.__init__": [(), ('PySide2.QtLocation.QPlaceContactDetail',)], + "QPlaceContactDetail.__copy__": (), + "QPlaceContactDetail.clear": (), + "QPlaceContactDetail.label": (), + "QPlaceContactDetail.setLabel": ('str',), + "QPlaceContactDetail.setValue": ('str',), + "QPlaceContactDetail.value": (), + + # class PySide2.QtLocation.QPlaceContent: + "QPlaceContent.__init__": [(), ('PySide2.QtLocation.QPlaceContent',)], + "QPlaceContent.__copy__": (), + "QPlaceContent.attribution": (), + "QPlaceContent.setAttribution": ('str',), + "QPlaceContent.setSupplier": ('PySide2.QtLocation.QPlaceSupplier',), + "QPlaceContent.setUser": ('PySide2.QtLocation.QPlaceUser',), + "QPlaceContent.supplier": (), + "QPlaceContent.user": (), + + # class PySide2.QtLocation.QPlaceContentReply: + "QPlaceContentReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceContentReply.content": (), + "QPlaceContentReply.nextPageRequest": (), + "QPlaceContentReply.previousPageRequest": (), + "QPlaceContentReply.request": (), + "QPlaceContentReply.setContent": ('dict',), + "QPlaceContentReply.setNextPageRequest": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceContentReply.setPreviousPageRequest": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceContentReply.setRequest": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceContentReply.setTotalCount": ('int',), + "QPlaceContentReply.totalCount": (), + "QPlaceContentReply.type": (), + + # class PySide2.QtLocation.QPlaceContentRequest: + "QPlaceContentRequest.__init__": [(), ('PySide2.QtLocation.QPlaceContentRequest',)], + "QPlaceContentRequest.__copy__": (), + "QPlaceContentRequest.clear": (), + "QPlaceContentRequest.contentContext": (), + "QPlaceContentRequest.limit": (), + "QPlaceContentRequest.placeId": (), + "QPlaceContentRequest.setContentContext": ('Any',), + "QPlaceContentRequest.setLimit": ('int',), + "QPlaceContentRequest.setPlaceId": ('str',), + + # class PySide2.QtLocation.QPlaceDetailsReply: + "QPlaceDetailsReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceDetailsReply.place": (), + "QPlaceDetailsReply.setPlace": ('PySide2.QtLocation.QPlace',), + "QPlaceDetailsReply.type": (), + + # class PySide2.QtLocation.QPlaceEditorial: + "QPlaceEditorial.__init__": [(), ('PySide2.QtLocation.QPlaceContent',)], + "QPlaceEditorial.language": (), + "QPlaceEditorial.setLanguage": ('str',), + "QPlaceEditorial.setText": ('str',), + "QPlaceEditorial.setTitle": ('str',), + "QPlaceEditorial.text": (), + "QPlaceEditorial.title": (), + + # class PySide2.QtLocation.QPlaceIcon: + "QPlaceIcon.__init__": [(), ('PySide2.QtLocation.QPlaceIcon',)], + "QPlaceIcon.__copy__": (), + "QPlaceIcon.isEmpty": (), + "QPlaceIcon.manager": (), + "QPlaceIcon.parameters": (), + "QPlaceIcon.setManager": ('PySide2.QtLocation.QPlaceManager',), + "QPlaceIcon.setParameters": ('dict',), + "QPlaceIcon.url": ('PySide2.QtCore.QSize',), + + # class PySide2.QtLocation.QPlaceIdReply: + "QPlaceIdReply.__init__": ('PySide2.QtLocation.QPlaceIdReply.OperationType', 'PySide2.QtCore.QObject'), + "QPlaceIdReply.id": (), + "QPlaceIdReply.operationType": (), + "QPlaceIdReply.setId": ('str',), + "QPlaceIdReply.type": (), + + # class PySide2.QtLocation.QPlaceImage: + "QPlaceImage.__init__": [(), ('PySide2.QtLocation.QPlaceContent',)], + "QPlaceImage.imageId": (), + "QPlaceImage.mimeType": (), + "QPlaceImage.setImageId": ('str',), + "QPlaceImage.setMimeType": ('str',), + "QPlaceImage.setUrl": ('PySide2.QtCore.QUrl',), + "QPlaceImage.url": (), + + # class PySide2.QtLocation.QPlaceManager: + "QPlaceManager.category": ('str',), + "QPlaceManager.childCategories": ('str',), + "QPlaceManager.childCategoryIds": ('str',), + "QPlaceManager.compatiblePlace": ('PySide2.QtLocation.QPlace',), + "QPlaceManager.getPlaceContent": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceManager.getPlaceDetails": ('str',), + "QPlaceManager.initializeCategories": (), + "QPlaceManager.locales": (), + "QPlaceManager.managerName": (), + "QPlaceManager.managerVersion": (), + "QPlaceManager.matchingPlaces": ('PySide2.QtLocation.QPlaceMatchRequest',), + "QPlaceManager.parentCategoryId": ('str',), + "QPlaceManager.removeCategory": ('str',), + "QPlaceManager.removePlace": ('str',), + "QPlaceManager.saveCategory": ('PySide2.QtLocation.QPlaceCategory', 'str'), + "QPlaceManager.savePlace": ('PySide2.QtLocation.QPlace',), + "QPlaceManager.search": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceManager.searchSuggestions": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceManager.setLocale": ('PySide2.QtCore.QLocale',), + "QPlaceManager.setLocales": ('list',), + + # class PySide2.QtLocation.QPlaceManagerEngine: + "QPlaceManagerEngine.__init__": ('dict', 'PySide2.QtCore.QObject'), + "QPlaceManagerEngine.category": ('str',), + "QPlaceManagerEngine.childCategories": ('str',), + "QPlaceManagerEngine.childCategoryIds": ('str',), + "QPlaceManagerEngine.compatiblePlace": ('PySide2.QtLocation.QPlace',), + "QPlaceManagerEngine.constructIconUrl": ('PySide2.QtLocation.QPlaceIcon', 'PySide2.QtCore.QSize'), + "QPlaceManagerEngine.getPlaceContent": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceManagerEngine.getPlaceDetails": ('str',), + "QPlaceManagerEngine.initializeCategories": (), + "QPlaceManagerEngine.locales": (), + "QPlaceManagerEngine.manager": (), + "QPlaceManagerEngine.managerName": (), + "QPlaceManagerEngine.managerVersion": (), + "QPlaceManagerEngine.matchingPlaces": ('PySide2.QtLocation.QPlaceMatchRequest',), + "QPlaceManagerEngine.parentCategoryId": ('str',), + "QPlaceManagerEngine.removeCategory": ('str',), + "QPlaceManagerEngine.removePlace": ('str',), + "QPlaceManagerEngine.saveCategory": ('PySide2.QtLocation.QPlaceCategory', 'str'), + "QPlaceManagerEngine.savePlace": ('PySide2.QtLocation.QPlace',), + "QPlaceManagerEngine.search": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceManagerEngine.searchSuggestions": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceManagerEngine.setLocales": ('list',), + + # class PySide2.QtLocation.QPlaceMatchReply: + "QPlaceMatchReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceMatchReply.places": (), + "QPlaceMatchReply.request": (), + "QPlaceMatchReply.setPlaces": ('list',), + "QPlaceMatchReply.setRequest": ('PySide2.QtLocation.QPlaceMatchRequest',), + "QPlaceMatchReply.type": (), + + # class PySide2.QtLocation.QPlaceMatchRequest: + "QPlaceMatchRequest.__init__": [(), ('PySide2.QtLocation.QPlaceMatchRequest',)], + "QPlaceMatchRequest.__copy__": (), + "QPlaceMatchRequest.clear": (), + "QPlaceMatchRequest.parameters": (), + "QPlaceMatchRequest.places": (), + "QPlaceMatchRequest.setParameters": ('dict',), + "QPlaceMatchRequest.setPlaces": ('list',), + "QPlaceMatchRequest.setResults": ('list',), + + # class PySide2.QtLocation.QPlaceProposedSearchResult: + "QPlaceProposedSearchResult.__init__": [(), ('PySide2.QtLocation.QPlaceSearchResult',)], + "QPlaceProposedSearchResult.searchRequest": (), + "QPlaceProposedSearchResult.setSearchRequest": ('PySide2.QtLocation.QPlaceSearchRequest',), + + # class PySide2.QtLocation.QPlaceRatings: + "QPlaceRatings.__init__": [(), ('PySide2.QtLocation.QPlaceRatings',)], + "QPlaceRatings.__copy__": (), + "QPlaceRatings.average": (), + "QPlaceRatings.count": (), + "QPlaceRatings.isEmpty": (), + "QPlaceRatings.maximum": (), + "QPlaceRatings.setAverage": ('float',), + "QPlaceRatings.setCount": ('int',), + "QPlaceRatings.setMaximum": ('float',), + + # class PySide2.QtLocation.QPlaceReply: + "QPlaceReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceReply.abort": (), + "QPlaceReply.errorString": (), + "QPlaceReply.isFinished": (), + "QPlaceReply.setError": ('PySide2.QtLocation.QPlaceReply.Error', 'str'), + "QPlaceReply.setFinished": ('bool',), + "QPlaceReply.type": (), + + # class PySide2.QtLocation.QPlaceResult: + "QPlaceResult.__init__": [(), ('PySide2.QtLocation.QPlaceSearchResult',)], + "QPlaceResult.distance": (), + "QPlaceResult.isSponsored": (), + "QPlaceResult.place": (), + "QPlaceResult.setDistance": ('float',), + "QPlaceResult.setPlace": ('PySide2.QtLocation.QPlace',), + "QPlaceResult.setSponsored": ('bool',), + + # class PySide2.QtLocation.QPlaceReview: + "QPlaceReview.__init__": [(), ('PySide2.QtLocation.QPlaceContent',)], + "QPlaceReview.dateTime": (), + "QPlaceReview.language": (), + "QPlaceReview.rating": (), + "QPlaceReview.reviewId": (), + "QPlaceReview.setDateTime": ('PySide2.QtCore.QDateTime',), + "QPlaceReview.setLanguage": ('str',), + "QPlaceReview.setRating": ('float',), + "QPlaceReview.setReviewId": ('str',), + "QPlaceReview.setText": ('str',), + "QPlaceReview.setTitle": ('str',), + "QPlaceReview.text": (), + "QPlaceReview.title": (), + + # class PySide2.QtLocation.QPlaceSearchReply: + "QPlaceSearchReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceSearchReply.nextPageRequest": (), + "QPlaceSearchReply.previousPageRequest": (), + "QPlaceSearchReply.request": (), + "QPlaceSearchReply.results": (), + "QPlaceSearchReply.setNextPageRequest": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceSearchReply.setPreviousPageRequest": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceSearchReply.setRequest": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceSearchReply.setResults": ('list',), + "QPlaceSearchReply.type": (), + + # class PySide2.QtLocation.QPlaceSearchRequest: + "QPlaceSearchRequest.__init__": [(), ('PySide2.QtLocation.QPlaceSearchRequest',)], + "QPlaceSearchRequest.categories": (), + "QPlaceSearchRequest.clear": (), + "QPlaceSearchRequest.limit": (), + "QPlaceSearchRequest.recommendationId": (), + "QPlaceSearchRequest.relevanceHint": (), + "QPlaceSearchRequest.searchArea": (), + "QPlaceSearchRequest.searchContext": (), + "QPlaceSearchRequest.searchTerm": (), + "QPlaceSearchRequest.setCategories": ('list',), + "QPlaceSearchRequest.setCategory": ('PySide2.QtLocation.QPlaceCategory',), + "QPlaceSearchRequest.setLimit": ('int',), + "QPlaceSearchRequest.setRecommendationId": ('str',), + "QPlaceSearchRequest.setRelevanceHint": ('PySide2.QtLocation.QPlaceSearchRequest.RelevanceHint',), + "QPlaceSearchRequest.setSearchArea": ('PySide2.QtPositioning.QGeoShape',), + "QPlaceSearchRequest.setSearchContext": ('Any',), + "QPlaceSearchRequest.setSearchTerm": ('str',), + + # class PySide2.QtLocation.QPlaceSearchResult: + "QPlaceSearchResult.__init__": [(), ('PySide2.QtLocation.QPlaceSearchResult',)], + "QPlaceSearchResult.icon": (), + "QPlaceSearchResult.setIcon": ('PySide2.QtLocation.QPlaceIcon',), + "QPlaceSearchResult.setTitle": ('str',), + "QPlaceSearchResult.title": (), + + # class PySide2.QtLocation.QPlaceSearchSuggestionReply: + "QPlaceSearchSuggestionReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceSearchSuggestionReply.setSuggestions": ('List[str]',), + "QPlaceSearchSuggestionReply.suggestions": (), + "QPlaceSearchSuggestionReply.type": (), + + # class PySide2.QtLocation.QPlaceSupplier: + "QPlaceSupplier.__init__": [(), ('PySide2.QtLocation.QPlaceSupplier',)], + "QPlaceSupplier.__copy__": (), + "QPlaceSupplier.icon": (), + "QPlaceSupplier.isEmpty": (), + "QPlaceSupplier.name": (), + "QPlaceSupplier.setIcon": ('PySide2.QtLocation.QPlaceIcon',), + "QPlaceSupplier.setName": ('str',), + "QPlaceSupplier.setSupplierId": ('str',), + "QPlaceSupplier.setUrl": ('PySide2.QtCore.QUrl',), + "QPlaceSupplier.supplierId": (), + "QPlaceSupplier.url": (), + + # class PySide2.QtLocation.QPlaceUser: + "QPlaceUser.__init__": [(), ('PySide2.QtLocation.QPlaceUser',)], + "QPlaceUser.__copy__": (), + "QPlaceUser.name": (), + "QPlaceUser.setName": ('str',), + "QPlaceUser.setUserId": ('str',), + "QPlaceUser.userId": (), + }) + +# Module PySide2.QtQml +if "PySide2.QtQml" in sys.modules: + dict.update({ + + # class PySide2.QtQml.ListProperty: + + # class PySide2.QtQml.QJSEngine: + "QJSEngine.__init__": [(), ('PySide2.QtCore.QObject',)], + "QJSEngine.collectGarbage": (), + "QJSEngine.evaluate": ('str', 'str', 'int'), + "QJSEngine.globalObject": (), + "QJSEngine.installExtensions": ('PySide2.libpyside.Extensions', 'PySide2.QtQml.QJSValue'), + "QJSEngine.installTranslatorFunctions": ('PySide2.QtQml.QJSValue',), + "QJSEngine.newArray": ('int',), + "QJSEngine.newObject": (), + "QJSEngine.newQMetaObject": ('PySide2.QtCore.QMetaObject',), + "QJSEngine.newQObject": ('PySide2.QtCore.QObject',), + "QJSEngine.toScriptValue": ('Any',), + + # class PySide2.QtQml.QJSValue: + "QJSValue.__init__": [('PySide2.QtQml.QJSValue',), ('PySide2.QtQml.QJSValue.SpecialValue',), ('bool',), ('float',), ('int',), ('str',)], + "QJSValue.__copy__": (), + "QJSValue.call": ('list',), + "QJSValue.callAsConstructor": ('list',), + "QJSValue.callWithInstance": ('PySide2.QtQml.QJSValue', 'list'), + "QJSValue.deleteProperty": ('str',), + "QJSValue.engine": (), + "QJSValue.equals": ('PySide2.QtQml.QJSValue',), + "QJSValue.hasOwnProperty": ('str',), + "QJSValue.hasProperty": ('str',), + "QJSValue.isArray": (), + "QJSValue.isBool": (), + "QJSValue.isCallable": (), + "QJSValue.isDate": (), + "QJSValue.isError": (), + "QJSValue.isNull": (), + "QJSValue.isNumber": (), + "QJSValue.isObject": (), + "QJSValue.isQMetaObject": (), + "QJSValue.isQObject": (), + "QJSValue.isRegExp": (), + "QJSValue.isString": (), + "QJSValue.isUndefined": (), + "QJSValue.isVariant": (), + "QJSValue.property": [('int',), ('str',)], + "QJSValue.prototype": (), + "QJSValue.setProperty": [('int', 'PySide2.QtQml.QJSValue'), ('str', 'PySide2.QtQml.QJSValue')], + "QJSValue.setPrototype": ('PySide2.QtQml.QJSValue',), + "QJSValue.strictlyEquals": ('PySide2.QtQml.QJSValue',), + "QJSValue.toBool": (), + "QJSValue.toDateTime": (), + "QJSValue.toInt": (), + "QJSValue.toNumber": (), + "QJSValue.toQMetaObject": (), + "QJSValue.toQObject": (), + "QJSValue.toString": (), + "QJSValue.toUInt": (), + "QJSValue.toVariant": (), + + # class PySide2.QtQml.QJSValueIterator: + "QJSValueIterator.__init__": ('PySide2.QtQml.QJSValue',), + "QJSValueIterator.hasNext": (), + "QJSValueIterator.name": (), + "QJSValueIterator.value": (), + + # class PySide2.QtQml.QQmlAbstractUrlInterceptor: + "QQmlAbstractUrlInterceptor.__init__": (), + "QQmlAbstractUrlInterceptor.intercept": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlAbstractUrlInterceptor.DataType'), + + # class PySide2.QtQml.QQmlApplicationEngine: + "QQmlApplicationEngine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QQmlApplicationEngine.load": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlApplicationEngine.loadData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlApplicationEngine.rootObjects": (), + + # class PySide2.QtQml.QQmlComponent: + "QQmlComponent.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject')], + "QQmlComponent.beginCreate": ('PySide2.QtQml.QQmlContext',), + "QQmlComponent.completeCreate": (), + "QQmlComponent.create": [('PySide2.QtQml.QQmlContext',), ('PySide2.QtQml.QQmlIncubator', 'PySide2.QtQml.QQmlContext', 'PySide2.QtQml.QQmlContext')], + "QQmlComponent.creationContext": (), + "QQmlComponent.errorString": (), + "QQmlComponent.errors": (), + "QQmlComponent.isError": (), + "QQmlComponent.isLoading": (), + "QQmlComponent.isNull": (), + "QQmlComponent.isReady": (), + "QQmlComponent.loadUrl": [('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode')], + "QQmlComponent.progress": (), + "QQmlComponent.setData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlComponent.status": (), + "QQmlComponent.url": (), + + # class PySide2.QtQml.QQmlContext: + "QQmlContext.__init__": [('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject')], + "QQmlContext.baseUrl": (), + "QQmlContext.contextObject": (), + "QQmlContext.contextProperty": ('str',), + "QQmlContext.engine": (), + "QQmlContext.isValid": (), + "QQmlContext.nameForObject": ('PySide2.QtCore.QObject',), + "QQmlContext.parentContext": (), + "QQmlContext.resolvedUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setContextObject": ('PySide2.QtCore.QObject',), + "QQmlContext.setContextProperty": [('str', 'Any'), ('str', 'PySide2.QtCore.QObject')], + + # class PySide2.QtQml.QQmlDebuggingEnabler: + "QQmlDebuggingEnabler.__init__": ('bool',), + "QQmlDebuggingEnabler.connectToLocalDebugger": ('str', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode'), + "QQmlDebuggingEnabler.debuggerServices": (), + "QQmlDebuggingEnabler.inspectorServices": (), + "QQmlDebuggingEnabler.nativeDebuggerServices": (), + "QQmlDebuggingEnabler.profilerServices": (), + "QQmlDebuggingEnabler.setServices": ('List[str]',), + "QQmlDebuggingEnabler.startDebugConnector": ('str', 'dict'), + "QQmlDebuggingEnabler.startTcpDebugServer": ('int', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode', 'str'), + + # class PySide2.QtQml.QQmlEngine: + "QQmlEngine.__init__": ('PySide2.QtCore.QObject',), + "QQmlEngine.addImageProvider": ('str', 'PySide2.QtQml.QQmlImageProviderBase'), + "QQmlEngine.addImportPath": ('str',), + "QQmlEngine.addNamedBundle": ('str', 'str'), + "QQmlEngine.addPluginPath": ('str',), + "QQmlEngine.baseUrl": (), + "QQmlEngine.clearComponentCache": (), + "QQmlEngine.contextForObject": ('PySide2.QtCore.QObject',), + "QQmlEngine.event": ('PySide2.QtCore.QEvent',), + "QQmlEngine.imageProvider": ('str',), + "QQmlEngine.importPathList": (), + "QQmlEngine.importPlugin": ('str', 'str', 'list'), + "QQmlEngine.incubationController": (), + "QQmlEngine.networkAccessManager": (), + "QQmlEngine.networkAccessManagerFactory": (), + "QQmlEngine.objectOwnership": ('PySide2.QtCore.QObject',), + "QQmlEngine.offlineStorageDatabaseFilePath": ('str',), + "QQmlEngine.offlineStoragePath": (), + "QQmlEngine.outputWarningsToStandardError": (), + "QQmlEngine.pluginPathList": (), + "QQmlEngine.removeImageProvider": ('str',), + "QQmlEngine.retranslate": (), + "QQmlEngine.rootContext": (), + "QQmlEngine.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlEngine.setContextForObject": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), + "QQmlEngine.setImportPathList": ('List[str]',), + "QQmlEngine.setIncubationController": ('PySide2.QtQml.QQmlIncubationController',), + "QQmlEngine.setNetworkAccessManagerFactory": ('PySide2.QtQml.QQmlNetworkAccessManagerFactory',), + "QQmlEngine.setObjectOwnership": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine.ObjectOwnership'), + "QQmlEngine.setOfflineStoragePath": ('str',), + "QQmlEngine.setOutputWarningsToStandardError": ('bool',), + "QQmlEngine.setPluginPathList": ('List[str]',), + "QQmlEngine.setUrlInterceptor": ('PySide2.QtQml.QQmlAbstractUrlInterceptor',), + "QQmlEngine.trimComponentCache": (), + "QQmlEngine.urlInterceptor": (), + + # class PySide2.QtQml.QQmlError: + "QQmlError.__init__": [(), ('PySide2.QtQml.QQmlError',)], + "QQmlError.__copy__": (), + "QQmlError.column": (), + "QQmlError.description": (), + "QQmlError.isValid": (), + "QQmlError.line": (), + "QQmlError.messageType": (), + "QQmlError.object": (), + "QQmlError.setColumn": ('int',), + "QQmlError.setDescription": ('str',), + "QQmlError.setLine": ('int',), + "QQmlError.setMessageType": ('PySide2.QtCore.QtMsgType',), + "QQmlError.setObject": ('PySide2.QtCore.QObject',), + "QQmlError.setUrl": ('PySide2.QtCore.QUrl',), + "QQmlError.toString": (), + "QQmlError.url": (), + + # class PySide2.QtQml.QQmlExpression: + "QQmlExpression.__init__": [(), ('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlScriptString', 'PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QObject')], + "QQmlExpression.clearError": (), + "QQmlExpression.columnNumber": (), + "QQmlExpression.context": (), + "QQmlExpression.engine": (), + "QQmlExpression.error": (), + "QQmlExpression.evaluate": ('bool',), + "QQmlExpression.expression": (), + "QQmlExpression.hasError": (), + "QQmlExpression.lineNumber": (), + "QQmlExpression.notifyOnValueChanged": (), + "QQmlExpression.scopeObject": (), + "QQmlExpression.setExpression": ('str',), + "QQmlExpression.setNotifyOnValueChanged": ('bool',), + "QQmlExpression.setSourceLocation": ('str', 'int', 'int'), + "QQmlExpression.sourceFile": (), + + # class PySide2.QtQml.QQmlExtensionInterface: + "QQmlExtensionInterface.__init__": (), + "QQmlExtensionInterface.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + + # class PySide2.QtQml.QQmlExtensionPlugin: + "QQmlExtensionPlugin.__init__": ('PySide2.QtCore.QObject',), + "QQmlExtensionPlugin.baseUrl": (), + "QQmlExtensionPlugin.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + "QQmlExtensionPlugin.registerTypes": ('str',), + + # class PySide2.QtQml.QQmlFile: + "QQmlFile.__init__": [(), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.clear": [(), ('PySide2.QtCore.QObject',)], + "QQmlFile.connectDownloadProgress": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.connectFinished": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.data": (), + "QQmlFile.dataByteArray": (), + "QQmlFile.error": (), + "QQmlFile.isError": (), + "QQmlFile.isLoading": (), + "QQmlFile.isLocalFile": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.isNull": (), + "QQmlFile.isReady": (), + "QQmlFile.isSynchronous": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.load": [('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.size": (), + "QQmlFile.status": (), + "QQmlFile.url": (), + "QQmlFile.urlToLocalFileOrQrc": [('PySide2.QtCore.QUrl',), ('str',)], + + # class PySide2.QtQml.QQmlFileSelector: + "QQmlFileSelector.__init__": ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), + "QQmlFileSelector.get": ('PySide2.QtQml.QQmlEngine',), + "QQmlFileSelector.selector": (), + "QQmlFileSelector.setExtraSelectors": ('List[str]',), + "QQmlFileSelector.setSelector": ('PySide2.QtCore.QFileSelector',), + + # class PySide2.QtQml.QQmlImageProviderBase: + "QQmlImageProviderBase.flags": (), + "QQmlImageProviderBase.imageType": (), + + # class PySide2.QtQml.QQmlIncubationController: + "QQmlIncubationController.__init__": (), + "QQmlIncubationController.engine": (), + "QQmlIncubationController.incubateFor": ('int',), + "QQmlIncubationController.incubateWhile": ('bool', 'int'), + "QQmlIncubationController.incubatingObjectCount": (), + "QQmlIncubationController.incubatingObjectCountChanged": ('int',), + + # class PySide2.QtQml.QQmlIncubator: + "QQmlIncubator.__init__": ('PySide2.QtQml.QQmlIncubator.IncubationMode',), + "QQmlIncubator.clear": (), + "QQmlIncubator.errors": (), + "QQmlIncubator.forceCompletion": (), + "QQmlIncubator.incubationMode": (), + "QQmlIncubator.isError": (), + "QQmlIncubator.isLoading": (), + "QQmlIncubator.isNull": (), + "QQmlIncubator.isReady": (), + "QQmlIncubator.object": (), + "QQmlIncubator.setInitialState": ('PySide2.QtCore.QObject',), + "QQmlIncubator.status": (), + "QQmlIncubator.statusChanged": ('PySide2.QtQml.QQmlIncubator.Status',), + + # class PySide2.QtQml.QQmlListReference: + "QQmlListReference.__init__": [(), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlListReference',)], + "QQmlListReference.__copy__": (), + "QQmlListReference.append": ('PySide2.QtCore.QObject',), + "QQmlListReference.at": ('int',), + "QQmlListReference.canAppend": (), + "QQmlListReference.canAt": (), + "QQmlListReference.canClear": (), + "QQmlListReference.canCount": (), + "QQmlListReference.clear": (), + "QQmlListReference.count": (), + "QQmlListReference.isManipulable": (), + "QQmlListReference.isReadable": (), + "QQmlListReference.isValid": (), + "QQmlListReference.listElementType": (), + "QQmlListReference.object": (), + + # class PySide2.QtQml.QQmlNetworkAccessManagerFactory: + "QQmlNetworkAccessManagerFactory.__init__": (), + "QQmlNetworkAccessManagerFactory.create": ('PySide2.QtCore.QObject',), + + # class PySide2.QtQml.QQmlParserStatus: + "QQmlParserStatus.__init__": (), + "QQmlParserStatus.classBegin": (), + "QQmlParserStatus.componentComplete": (), + + # class PySide2.QtQml.QQmlProperty: + "QQmlProperty.__init__": [(), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlProperty',)], + "QQmlProperty.__copy__": (), + "QQmlProperty.connectNotifySignal": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlProperty.hasNotifySignal": (), + "QQmlProperty.index": (), + "QQmlProperty.isDesignable": (), + "QQmlProperty.isProperty": (), + "QQmlProperty.isResettable": (), + "QQmlProperty.isSignalProperty": (), + "QQmlProperty.isValid": (), + "QQmlProperty.isWritable": (), + "QQmlProperty.method": (), + "QQmlProperty.name": (), + "QQmlProperty.needsNotifySignal": (), + "QQmlProperty.object": (), + "QQmlProperty.property": (), + "QQmlProperty.propertyType": (), + "QQmlProperty.propertyTypeCategory": (), + "QQmlProperty.propertyTypeName": (), + "QQmlProperty.read": [(), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine')], + "QQmlProperty.reset": (), + "QQmlProperty.type": (), + "QQmlProperty.write": [('Any',), ('PySide2.QtCore.QObject', 'str', 'Any'), ('PySide2.QtCore.QObject', 'str', 'Any', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'Any', 'PySide2.QtQml.QQmlEngine')], + + # class PySide2.QtQml.QQmlPropertyMap: + "QQmlPropertyMap.__init__": ('PySide2.QtCore.QObject',), + "QQmlPropertyMap.clear": ('str',), + "QQmlPropertyMap.contains": ('str',), + "QQmlPropertyMap.count": (), + "QQmlPropertyMap.insert": ('str', 'Any'), + "QQmlPropertyMap.isEmpty": (), + "QQmlPropertyMap.keys": (), + "QQmlPropertyMap.size": (), + "QQmlPropertyMap.updateValue": ('str', 'Any'), + "QQmlPropertyMap.value": ('str',), + + # class PySide2.QtQml.QQmlPropertyValueSource: + "QQmlPropertyValueSource.__init__": (), + "QQmlPropertyValueSource.setTarget": ('PySide2.QtQml.QQmlProperty',), + + # class PySide2.QtQml.QQmlScriptString: + "QQmlScriptString.__init__": [(), ('PySide2.QtQml.QQmlScriptString',)], + "QQmlScriptString.__copy__": (), + "QQmlScriptString.booleanLiteral": ('bool',), + "QQmlScriptString.isEmpty": (), + "QQmlScriptString.isNullLiteral": (), + "QQmlScriptString.isUndefinedLiteral": (), + "QQmlScriptString.numberLiteral": ('bool',), + "QQmlScriptString.stringLiteral": (), + + # class PySide2.QtQml.QQmlTypesExtensionInterface: + "QQmlTypesExtensionInterface.__init__": (), + "QQmlTypesExtensionInterface.registerTypes": ('str',), + + # class PySide2.QtQml.VolatileBool: + }) + +# Module PySide2.QtQuick +if "PySide2.QtQuick" in sys.modules: + dict.update({ + + # class PySide2.QtQuick.QQuickAsyncImageProvider: + "QQuickAsyncImageProvider.__init__": (), + "QQuickAsyncImageProvider.requestImageResponse": ('str', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickFramebufferObject: + "QQuickFramebufferObject.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickFramebufferObject.createRenderer": (), + "QQuickFramebufferObject.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickFramebufferObject.isTextureProvider": (), + "QQuickFramebufferObject.mirrorVertically": (), + "QQuickFramebufferObject.releaseResources": (), + "QQuickFramebufferObject.setMirrorVertically": ('bool',), + "QQuickFramebufferObject.setTextureFollowsItemSize": ('bool',), + "QQuickFramebufferObject.textureFollowsItemSize": (), + "QQuickFramebufferObject.textureProvider": (), + "QQuickFramebufferObject.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickImageProvider: + "QQuickImageProvider.__init__": ('PySide2.QtQml.QQmlImageProviderBase.ImageType', 'PySide2.libpyside.Flags'), + "QQuickImageProvider.flags": (), + "QQuickImageProvider.imageType": (), + "QQuickImageProvider.requestImage": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestPixmap": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestTexture": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickImageResponse: + "QQuickImageResponse.__init__": (), + "QQuickImageResponse.cancel": (), + "QQuickImageResponse.errorString": (), + "QQuickImageResponse.textureFactory": (), + + # class PySide2.QtQuick.QQuickItem: + "QQuickItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.acceptHoverEvents": (), + "QQuickItem.acceptTouchEvents": (), + "QQuickItem.acceptedMouseButtons": (), + "QQuickItem.activeFocusOnTab": (), + "QQuickItem.antialiasing": (), + "QQuickItem.baselineOffset": (), + "QQuickItem.boundingRect": (), + "QQuickItem.childAt": ('float', 'float'), + "QQuickItem.childItems": (), + "QQuickItem.childMouseEventFilter": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickItem.childrenRect": (), + "QQuickItem.classBegin": (), + "QQuickItem.clip": (), + "QQuickItem.clipRect": (), + "QQuickItem.componentComplete": (), + "QQuickItem.containmentMask": (), + "QQuickItem.contains": ('PySide2.QtCore.QPointF',), + "QQuickItem.cursor": (), + "QQuickItem.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickItem.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickItem.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickItem.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickItem.event": ('PySide2.QtCore.QEvent',), + "QQuickItem.filtersChildMouseEvents": (), + "QQuickItem.flags": (), + "QQuickItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.forceActiveFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QQuickItem.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickItem.grabMouse": (), + "QQuickItem.grabToImage": [('PySide2.QtCore.QSize',), ('PySide2.QtQml.QJSValue', 'PySide2.QtCore.QSize')], + "QQuickItem.grabTouchPoints": ('list',), + "QQuickItem.hasActiveFocus": (), + "QQuickItem.hasFocus": (), + "QQuickItem.height": (), + "QQuickItem.heightValid": (), + "QQuickItem.hoverEnterEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverLeaveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverMoveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.implicitHeight": (), + "QQuickItem.implicitWidth": (), + "QQuickItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QQuickItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QQuickItem.isAncestorOf": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.isComponentComplete": (), + "QQuickItem.isEnabled": (), + "QQuickItem.isFocusScope": (), + "QQuickItem.isTextureProvider": (), + "QQuickItem.isUnderMouse": (), + "QQuickItem.isVisible": (), + "QQuickItem.itemTransform": ('PySide2.QtQuick.QQuickItem', 'bool'), + "QQuickItem.keepMouseGrab": (), + "QQuickItem.keepTouchGrab": (), + "QQuickItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.mapFromGlobal": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapFromScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapRectFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectFromScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapRectToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectToScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapToGlobal": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapToScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseUngrabEvent": (), + "QQuickItem.nextItemInFocusChain": ('bool',), + "QQuickItem.opacity": (), + "QQuickItem.parentItem": (), + "QQuickItem.polish": (), + "QQuickItem.position": (), + "QQuickItem.releaseResources": (), + "QQuickItem.resetAntialiasing": (), + "QQuickItem.resetHeight": (), + "QQuickItem.resetWidth": (), + "QQuickItem.rotation": (), + "QQuickItem.scale": (), + "QQuickItem.scopedFocusItem": (), + "QQuickItem.setAcceptHoverEvents": ('bool',), + "QQuickItem.setAcceptTouchEvents": ('bool',), + "QQuickItem.setAcceptedMouseButtons": ('PySide2.libpyside.MouseButtons',), + "QQuickItem.setActiveFocusOnTab": ('bool',), + "QQuickItem.setAntialiasing": ('bool',), + "QQuickItem.setBaselineOffset": ('float',), + "QQuickItem.setClip": ('bool',), + "QQuickItem.setContainmentMask": ('PySide2.QtCore.QObject',), + "QQuickItem.setCursor": ('PySide2.QtGui.QCursor',), + "QQuickItem.setEnabled": ('bool',), + "QQuickItem.setFiltersChildMouseEvents": ('bool',), + "QQuickItem.setFlag": ('PySide2.QtQuick.QQuickItem.Flag', 'bool'), + "QQuickItem.setFlags": ('PySide2.libpyside.Flags',), + "QQuickItem.setFocus": [('bool',), ('bool', 'PySide2.QtCore.Qt.FocusReason')], + "QQuickItem.setHeight": ('float',), + "QQuickItem.setImplicitHeight": ('float',), + "QQuickItem.setImplicitSize": ('float', 'float'), + "QQuickItem.setImplicitWidth": ('float',), + "QQuickItem.setKeepMouseGrab": ('bool',), + "QQuickItem.setKeepTouchGrab": ('bool',), + "QQuickItem.setOpacity": ('float',), + "QQuickItem.setParentItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.setPosition": ('PySide2.QtCore.QPointF',), + "QQuickItem.setRotation": ('float',), + "QQuickItem.setScale": ('float',), + "QQuickItem.setSize": ('PySide2.QtCore.QSizeF',), + "QQuickItem.setSmooth": ('bool',), + "QQuickItem.setState": ('str',), + "QQuickItem.setTransformOrigin": ('PySide2.QtQuick.QQuickItem.TransformOrigin',), + "QQuickItem.setTransformOriginPoint": ('PySide2.QtCore.QPointF',), + "QQuickItem.setVisible": ('bool',), + "QQuickItem.setWidth": ('float',), + "QQuickItem.setX": ('float',), + "QQuickItem.setY": ('float',), + "QQuickItem.setZ": ('float',), + "QQuickItem.size": (), + "QQuickItem.smooth": (), + "QQuickItem.stackAfter": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.stackBefore": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.state": (), + "QQuickItem.textureProvider": (), + "QQuickItem.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QQuickItem.touchUngrabEvent": (), + "QQuickItem.transformOrigin": (), + "QQuickItem.transformOriginPoint": (), + "QQuickItem.ungrabMouse": (), + "QQuickItem.ungrabTouchPoints": (), + "QQuickItem.unsetCursor": (), + "QQuickItem.update": (), + "QQuickItem.updateInputMethod": ('PySide2.libpyside.InputMethodQueries',), + "QQuickItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + "QQuickItem.updatePolish": (), + "QQuickItem.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QQuickItem.width": (), + "QQuickItem.widthValid": (), + "QQuickItem.window": (), + "QQuickItem.windowDeactivateEvent": (), + "QQuickItem.x": (), + "QQuickItem.y": (), + "QQuickItem.z": (), + + # class PySide2.QtQuick.QQuickItemGrabResult: + "QQuickItemGrabResult.event": ('PySide2.QtCore.QEvent',), + "QQuickItemGrabResult.image": (), + "QQuickItemGrabResult.saveToFile": ('str',), + "QQuickItemGrabResult.url": (), + + # class PySide2.QtQuick.QQuickPaintedItem: + "QQuickPaintedItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickPaintedItem.antialiasing": (), + "QQuickPaintedItem.contentsBoundingRect": (), + "QQuickPaintedItem.contentsScale": (), + "QQuickPaintedItem.contentsSize": (), + "QQuickPaintedItem.fillColor": (), + "QQuickPaintedItem.isTextureProvider": (), + "QQuickPaintedItem.mipmap": (), + "QQuickPaintedItem.opaquePainting": (), + "QQuickPaintedItem.paint": ('PySide2.QtGui.QPainter',), + "QQuickPaintedItem.performanceHints": (), + "QQuickPaintedItem.releaseResources": (), + "QQuickPaintedItem.renderTarget": (), + "QQuickPaintedItem.resetContentsSize": (), + "QQuickPaintedItem.setAntialiasing": ('bool',), + "QQuickPaintedItem.setContentsScale": ('float',), + "QQuickPaintedItem.setContentsSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.setFillColor": ('PySide2.QtGui.QColor',), + "QQuickPaintedItem.setMipmap": ('bool',), + "QQuickPaintedItem.setOpaquePainting": ('bool',), + "QQuickPaintedItem.setPerformanceHint": ('PySide2.QtQuick.QQuickPaintedItem.PerformanceHint', 'bool'), + "QQuickPaintedItem.setPerformanceHints": ('PySide2.libpyside.PerformanceHints',), + "QQuickPaintedItem.setRenderTarget": ('PySide2.QtQuick.QQuickPaintedItem.RenderTarget',), + "QQuickPaintedItem.setTextureSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.textureProvider": (), + "QQuickPaintedItem.textureSize": (), + "QQuickPaintedItem.update": [(), ('PySide2.QtCore.QRect',)], + "QQuickPaintedItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickRenderControl: + "QQuickRenderControl.__init__": ('PySide2.QtCore.QObject',), + "QQuickRenderControl.grab": (), + "QQuickRenderControl.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QQuickRenderControl.invalidate": (), + "QQuickRenderControl.polishItems": (), + "QQuickRenderControl.prepareThread": ('PySide2.QtCore.QThread',), + "QQuickRenderControl.render": (), + "QQuickRenderControl.renderWindow": ('PySide2.QtCore.QPoint',), + "QQuickRenderControl.renderWindowFor": ('PySide2.QtQuick.QQuickWindow', 'PySide2.QtCore.QPoint'), + "QQuickRenderControl.sync": (), + + # class PySide2.QtQuick.QQuickTextDocument: + "QQuickTextDocument.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickTextDocument.textDocument": (), + + # class PySide2.QtQuick.QQuickTextureFactory: + "QQuickTextureFactory.__init__": (), + "QQuickTextureFactory.createTexture": ('PySide2.QtQuick.QQuickWindow',), + "QQuickTextureFactory.image": (), + "QQuickTextureFactory.textureByteCount": (), + "QQuickTextureFactory.textureFactoryForImage": ('PySide2.QtGui.QImage',), + "QQuickTextureFactory.textureSize": (), + + # class PySide2.QtQuick.QQuickTransform: + "QQuickTransform.__init__": ('PySide2.QtCore.QObject',), + "QQuickTransform.appendToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QQuickTransform.prependToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.update": (), + + # class PySide2.QtQuick.QQuickView: + "QQuickView.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtGui.QWindow'), ('PySide2.QtCore.QUrl', 'PySide2.QtQuick.QQuickRenderControl'), ('PySide2.QtGui.QWindow',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtGui.QWindow')], + "QQuickView.engine": (), + "QQuickView.errors": (), + "QQuickView.initialSize": (), + "QQuickView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickView.resizeMode": (), + "QQuickView.rootContext": (), + "QQuickView.rootObject": (), + "QQuickView.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickView.setResizeMode": ('PySide2.QtQuick.QQuickView.ResizeMode',), + "QQuickView.setSource": ('PySide2.QtCore.QUrl',), + "QQuickView.sizeHint": (), + "QQuickView.source": (), + "QQuickView.status": (), + "QQuickView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtQuick.QQuickWindow: + "QQuickWindow.__init__": [('PySide2.QtGui.QWindow',), ('PySide2.QtQuick.QQuickRenderControl',)], + "QQuickWindow.accessibleRoot": (), + "QQuickWindow.activeFocusItem": (), + "QQuickWindow.clearBeforeRendering": (), + "QQuickWindow.color": (), + "QQuickWindow.contentItem": (), + "QQuickWindow.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'PySide2.libpyside.CreateTextureOptions'), + "QQuickWindow.createTextureFromImage": [('PySide2.QtGui.QImage',), ('PySide2.QtGui.QImage', 'PySide2.libpyside.CreateTextureOptions')], + "QQuickWindow.effectiveDevicePixelRatio": (), + "QQuickWindow.event": ('PySide2.QtCore.QEvent',), + "QQuickWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QQuickWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.focusObject": (), + "QQuickWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.grabWindow": (), + "QQuickWindow.hasDefaultAlphaBuffer": (), + "QQuickWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWindow.incubationController": (), + "QQuickWindow.isPersistentOpenGLContext": (), + "QQuickWindow.isPersistentSceneGraph": (), + "QQuickWindow.isSceneGraphInitialized": (), + "QQuickWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseGrabberItem": (), + "QQuickWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.openglContext": (), + "QQuickWindow.releaseResources": (), + "QQuickWindow.renderTarget": (), + "QQuickWindow.renderTargetId": (), + "QQuickWindow.renderTargetSize": (), + "QQuickWindow.resetOpenGLState": (), + "QQuickWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWindow.sceneGraphBackend": (), + "QQuickWindow.scheduleRenderJob": ('PySide2.QtCore.QRunnable', 'PySide2.QtQuick.QQuickWindow.RenderStage'), + "QQuickWindow.sendEvent": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickWindow.setClearBeforeRendering": ('bool',), + "QQuickWindow.setColor": ('PySide2.QtGui.QColor',), + "QQuickWindow.setDefaultAlphaBuffer": ('bool',), + "QQuickWindow.setPersistentOpenGLContext": ('bool',), + "QQuickWindow.setPersistentSceneGraph": ('bool',), + "QQuickWindow.setRenderTarget": [('PySide2.QtGui.QOpenGLFramebufferObject',), ('int', 'PySide2.QtCore.QSize')], + "QQuickWindow.setSceneGraphBackend": ('str',), + "QQuickWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWindow.update": (), + "QQuickWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtQuick.QSGAbstractRenderer: + "QSGAbstractRenderer.__init__": ('PySide2.QtCore.QObject',), + "QSGAbstractRenderer.clearColor": (), + "QSGAbstractRenderer.clearMode": (), + "QSGAbstractRenderer.deviceRect": (), + "QSGAbstractRenderer.nodeChanged": ('PySide2.QtQuick.QSGNode', 'PySide2.libpyside.DirtyState'), + "QSGAbstractRenderer.projectionMatrix": (), + "QSGAbstractRenderer.renderScene": ('int',), + "QSGAbstractRenderer.setClearColor": ('PySide2.QtGui.QColor',), + "QSGAbstractRenderer.setClearMode": ('PySide2.libpyside.ClearMode',), + "QSGAbstractRenderer.setDeviceRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.setProjectionMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGAbstractRenderer.setProjectionMatrixToRect": ('PySide2.QtCore.QRectF',), + "QSGAbstractRenderer.setViewportRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.viewportRect": (), + + # class PySide2.QtQuick.QSGBasicGeometryNode: + "QSGBasicGeometryNode.__init__": ('PySide2.QtQuick.QSGNode.NodeType',), + "QSGBasicGeometryNode.clipList": (), + "QSGBasicGeometryNode.geometry": (), + "QSGBasicGeometryNode.matrix": (), + "QSGBasicGeometryNode.setGeometry": ('PySide2.QtQuick.QSGGeometry',), + "QSGBasicGeometryNode.setRendererClipList": ('PySide2.QtQuick.QSGClipNode',), + "QSGBasicGeometryNode.setRendererMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSGClipNode: + "QSGClipNode.__init__": (), + "QSGClipNode.clipRect": (), + "QSGClipNode.isRectangular": (), + "QSGClipNode.setClipRect": ('PySide2.QtCore.QRectF',), + "QSGClipNode.setIsRectangular": ('bool',), + + # class PySide2.QtQuick.QSGDynamicTexture: + "QSGDynamicTexture.__init__": (), + "QSGDynamicTexture.updateTexture": (), + + # class PySide2.QtQuick.QSGEngine: + "QSGEngine.__init__": ('PySide2.QtCore.QObject',), + "QSGEngine.createRenderer": (), + "QSGEngine.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'PySide2.libpyside.CreateTextureOptions'), + "QSGEngine.createTextureFromImage": ('PySide2.QtGui.QImage', 'PySide2.libpyside.CreateTextureOptions'), + "QSGEngine.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QSGEngine.invalidate": (), + + # class PySide2.QtQuick.QSGGeometry: + "QSGGeometry.__init__": ('PySide2.QtQuick.QSGGeometry.AttributeSet', 'int', 'int', 'int'), + "QSGGeometry.allocate": ('int', 'int'), + "QSGGeometry.attributeCount": (), + "QSGGeometry.attributes": (), + "QSGGeometry.defaultAttributes_ColoredPoint2D": (), + "QSGGeometry.defaultAttributes_Point2D": (), + "QSGGeometry.defaultAttributes_TexturedPoint2D": (), + "QSGGeometry.drawingMode": (), + "QSGGeometry.indexCount": (), + "QSGGeometry.indexData": (), + "QSGGeometry.indexDataAsUInt": (), + "QSGGeometry.indexDataAsUShort": (), + "QSGGeometry.indexDataPattern": (), + "QSGGeometry.indexType": (), + "QSGGeometry.lineWidth": (), + "QSGGeometry.markIndexDataDirty": (), + "QSGGeometry.markVertexDataDirty": (), + "QSGGeometry.setDrawingMode": ('int',), + "QSGGeometry.setIndexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.setLineWidth": ('float',), + "QSGGeometry.setVertexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.sizeOfIndex": (), + "QSGGeometry.sizeOfVertex": (), + "QSGGeometry.updateColoredRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateTexturedRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QSGGeometry.vertexCount": (), + "QSGGeometry.vertexData": (), + "QSGGeometry.vertexDataAsColoredPoint2D": (), + "QSGGeometry.vertexDataAsPoint2D": (), + "QSGGeometry.vertexDataAsTexturedPoint2D": (), + "QSGGeometry.vertexDataPattern": (), + + # class PySide2.QtQuick.QSGGeometryNode: + "QSGGeometryNode.__init__": (), + "QSGGeometryNode.inheritedOpacity": (), + "QSGGeometryNode.renderOrder": (), + "QSGGeometryNode.setInheritedOpacity": ('float',), + "QSGGeometryNode.setRenderOrder": ('int',), + + # class PySide2.QtQuick.QSGMaterialType: + "QSGMaterialType.__init__": (), + + # class PySide2.QtQuick.QSGNode: + "QSGNode.__init__": [(), ('PySide2.QtQuick.QSGNode.NodeType',)], + "QSGNode.appendChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.childAtIndex": ('int',), + "QSGNode.childCount": (), + "QSGNode.clearDirty": (), + "QSGNode.dirtyState": (), + "QSGNode.firstChild": (), + "QSGNode.flags": (), + "QSGNode.insertChildNodeAfter": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.insertChildNodeBefore": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.isSubtreeBlocked": (), + "QSGNode.lastChild": (), + "QSGNode.markDirty": ('PySide2.libpyside.DirtyState',), + "QSGNode.nextSibling": (), + "QSGNode.parent": (), + "QSGNode.prependChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.preprocess": (), + "QSGNode.previousSibling": (), + "QSGNode.removeAllChildNodes": (), + "QSGNode.removeChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.reparentChildNodesTo": ('PySide2.QtQuick.QSGNode',), + "QSGNode.setFlag": ('PySide2.QtQuick.QSGNode.Flag', 'bool'), + "QSGNode.setFlags": ('PySide2.libpyside.Flags', 'bool'), + "QSGNode.type": (), + + # class PySide2.QtQuick.QSGOpacityNode: + "QSGOpacityNode.__init__": (), + "QSGOpacityNode.combinedOpacity": (), + "QSGOpacityNode.isSubtreeBlocked": (), + "QSGOpacityNode.opacity": (), + "QSGOpacityNode.setCombinedOpacity": ('float',), + "QSGOpacityNode.setOpacity": ('float',), + + # class PySide2.QtQuick.QSGSimpleRectNode: + "QSGSimpleRectNode.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor')], + "QSGSimpleRectNode.color": (), + "QSGSimpleRectNode.rect": (), + "QSGSimpleRectNode.setColor": ('PySide2.QtGui.QColor',), + "QSGSimpleRectNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + + # class PySide2.QtQuick.QSGSimpleTextureNode: + "QSGSimpleTextureNode.__init__": (), + "QSGSimpleTextureNode.filtering": (), + "QSGSimpleTextureNode.ownsTexture": (), + "QSGSimpleTextureNode.rect": (), + "QSGSimpleTextureNode.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGSimpleTextureNode.setOwnsTexture": ('bool',), + "QSGSimpleTextureNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setSourceRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setTexture": ('PySide2.QtQuick.QSGTexture',), + "QSGSimpleTextureNode.setTextureCoordinatesTransform": ('PySide2.libpyside.TextureCoordinatesTransformMode',), + "QSGSimpleTextureNode.sourceRect": (), + "QSGSimpleTextureNode.texture": (), + "QSGSimpleTextureNode.textureCoordinatesTransform": (), + + # class PySide2.QtQuick.QSGTexture: + "QSGTexture.__init__": (), + "QSGTexture.anisotropyLevel": (), + "QSGTexture.bind": (), + "QSGTexture.convertToNormalizedSourceRect": ('PySide2.QtCore.QRectF',), + "QSGTexture.filtering": (), + "QSGTexture.hasAlphaChannel": (), + "QSGTexture.hasMipmaps": (), + "QSGTexture.horizontalWrapMode": (), + "QSGTexture.isAtlasTexture": (), + "QSGTexture.mipmapFiltering": (), + "QSGTexture.normalizedTextureSubRect": (), + "QSGTexture.removedFromAtlas": (), + "QSGTexture.setAnisotropyLevel": ('PySide2.QtQuick.QSGTexture.AnisotropyLevel',), + "QSGTexture.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setHorizontalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.setMipmapFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setVerticalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.textureId": (), + "QSGTexture.textureSize": (), + "QSGTexture.updateBindOptions": ('bool',), + "QSGTexture.verticalWrapMode": (), + + # class PySide2.QtQuick.QSGTextureProvider: + "QSGTextureProvider.__init__": (), + "QSGTextureProvider.texture": (), + + # class PySide2.QtQuick.QSGTransformNode: + "QSGTransformNode.__init__": (), + "QSGTransformNode.combinedMatrix": (), + "QSGTransformNode.matrix": (), + "QSGTransformNode.setCombinedMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGTransformNode.setMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSharedPointer: + "QSharedPointer.__copy__": (), + "QSharedPointer.data": (), + }) + +# Module PySide2.QtQuickWidgets +if "PySide2.QtQuickWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtQuickWidgets.QQuickWidget: + "QQuickWidget.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QQuickWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickWidget.engine": (), + "QQuickWidget.errors": (), + "QQuickWidget.event": ('PySide2.QtCore.QEvent',), + "QQuickWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.focusNextPrevChild": ('bool',), + "QQuickWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.format": (), + "QQuickWidget.grabFramebuffer": (), + "QQuickWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWidget.initialSize": (), + "QQuickWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QQuickWidget.quickWindow": (), + "QQuickWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWidget.resizeMode": (), + "QQuickWidget.rootContext": (), + "QQuickWidget.rootObject": (), + "QQuickWidget.setClearColor": ('PySide2.QtGui.QColor',), + "QQuickWidget.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QQuickWidget.setResizeMode": ('PySide2.QtQuickWidgets.QQuickWidget.ResizeMode',), + "QQuickWidget.setSource": ('PySide2.QtCore.QUrl',), + "QQuickWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWidget.sizeHint": (), + "QQuickWidget.source": (), + "QQuickWidget.status": (), + "QQuickWidget.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QQuickWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + }) + +# Module PySide2.QtScxml +if "PySide2.QtScxml" in sys.modules: + dict.update({ + + # class PySide2.QtScxml.QScxmlCompiler: + "QScxmlCompiler.__init__": ('PySide2.QtCore.QXmlStreamReader',), + "QScxmlCompiler.compile": (), + "QScxmlCompiler.errors": (), + "QScxmlCompiler.fileName": (), + "QScxmlCompiler.loader": (), + "QScxmlCompiler.setFileName": ('str',), + "QScxmlCompiler.setLoader": ('PySide2.QtScxml.QScxmlCompiler.Loader',), + + # class PySide2.QtScxml.QScxmlDynamicScxmlServiceFactory: + "QScxmlDynamicScxmlServiceFactory.__init__": ('PySide2.QtScxml.QScxmlExecutableContent.InvokeInfo', 'list', 'list', 'PySide2.QtCore.QObject'), + "QScxmlDynamicScxmlServiceFactory.invoke": ('PySide2.QtScxml.QScxmlStateMachine',), + + # class PySide2.QtScxml.QScxmlError: + "QScxmlError.__init__": [(), ('PySide2.QtScxml.QScxmlError',), ('str', 'int', 'int', 'str')], + "QScxmlError.__copy__": (), + "QScxmlError.column": (), + "QScxmlError.description": (), + "QScxmlError.fileName": (), + "QScxmlError.isValid": (), + "QScxmlError.line": (), + "QScxmlError.toString": (), + + # class PySide2.QtScxml.QScxmlEvent: + "QScxmlEvent.__init__": [(), ('PySide2.QtScxml.QScxmlEvent',)], + "QScxmlEvent.clear": (), + "QScxmlEvent.data": (), + "QScxmlEvent.delay": (), + "QScxmlEvent.errorMessage": (), + "QScxmlEvent.eventType": (), + "QScxmlEvent.invokeId": (), + "QScxmlEvent.isErrorEvent": (), + "QScxmlEvent.name": (), + "QScxmlEvent.origin": (), + "QScxmlEvent.originType": (), + "QScxmlEvent.scxmlType": (), + "QScxmlEvent.sendId": (), + "QScxmlEvent.setData": ('Any',), + "QScxmlEvent.setDelay": ('int',), + "QScxmlEvent.setErrorMessage": ('str',), + "QScxmlEvent.setEventType": ('PySide2.QtScxml.QScxmlEvent.EventType',), + "QScxmlEvent.setInvokeId": ('str',), + "QScxmlEvent.setName": ('str',), + "QScxmlEvent.setOrigin": ('str',), + "QScxmlEvent.setOriginType": ('str',), + "QScxmlEvent.setSendId": ('str',), + + # class PySide2.QtScxml.QScxmlExecutableContent: + + # class PySide2.QtScxml.QScxmlInvokableService: + "QScxmlInvokableService.__init__": ('PySide2.QtScxml.QScxmlStateMachine', 'PySide2.QtScxml.QScxmlInvokableServiceFactory'), + "QScxmlInvokableService.id": (), + "QScxmlInvokableService.name": (), + "QScxmlInvokableService.parentStateMachine": (), + "QScxmlInvokableService.postEvent": ('PySide2.QtScxml.QScxmlEvent',), + "QScxmlInvokableService.start": (), + + # class PySide2.QtScxml.QScxmlInvokableServiceFactory: + "QScxmlInvokableServiceFactory.__init__": ('PySide2.QtScxml.QScxmlExecutableContent.InvokeInfo', 'list', 'list', 'PySide2.QtCore.QObject'), + "QScxmlInvokableServiceFactory.invoke": ('PySide2.QtScxml.QScxmlStateMachine',), + "QScxmlInvokableServiceFactory.invokeInfo": (), + "QScxmlInvokableServiceFactory.names": (), + "QScxmlInvokableServiceFactory.parameters": (), + + # class PySide2.QtScxml.QScxmlStateMachine: + "QScxmlStateMachine.__init__": ('PySide2.QtCore.QMetaObject', 'PySide2.QtCore.QObject'), + "QScxmlStateMachine.activeStateNames": ('bool',), + "QScxmlStateMachine.cancelDelayedEvent": ('str',), + "QScxmlStateMachine.connectToEvent": ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), + "QScxmlStateMachine.connectToState": ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), + "QScxmlStateMachine.fromData": ('PySide2.QtCore.QIODevice', 'str'), + "QScxmlStateMachine.fromFile": ('str',), + "QScxmlStateMachine.init": (), + "QScxmlStateMachine.initialValues": (), + "QScxmlStateMachine.invokedServices": (), + "QScxmlStateMachine.isActive": [('int',), ('str',)], + "QScxmlStateMachine.isDispatchableTarget": ('str',), + "QScxmlStateMachine.isInitialized": (), + "QScxmlStateMachine.isInvoked": (), + "QScxmlStateMachine.isRunning": (), + "QScxmlStateMachine.loader": (), + "QScxmlStateMachine.name": (), + "QScxmlStateMachine.parseErrors": (), + "QScxmlStateMachine.sessionId": (), + "QScxmlStateMachine.setInitialValues": ('dict',), + "QScxmlStateMachine.setLoader": ('PySide2.QtScxml.QScxmlCompiler.Loader',), + "QScxmlStateMachine.setRunning": ('bool',), + "QScxmlStateMachine.setTableData": ('PySide2.QtScxml.QScxmlTableData',), + "QScxmlStateMachine.start": (), + "QScxmlStateMachine.stateNames": ('bool',), + "QScxmlStateMachine.stop": (), + "QScxmlStateMachine.submitEvent": [('PySide2.QtScxml.QScxmlEvent',), ('str',), ('str', 'Any')], + "QScxmlStateMachine.tableData": (), + + # class PySide2.QtScxml.QScxmlStaticScxmlServiceFactory: + "QScxmlStaticScxmlServiceFactory.__init__": ('PySide2.QtCore.QMetaObject', 'PySide2.QtScxml.QScxmlExecutableContent.InvokeInfo', 'list', 'list', 'PySide2.QtCore.QObject'), + "QScxmlStaticScxmlServiceFactory.invoke": ('PySide2.QtScxml.QScxmlStateMachine',), + + # class PySide2.QtScxml.QScxmlTableData: + "QScxmlTableData.__init__": (), + "QScxmlTableData.assignmentInfo": ('int',), + "QScxmlTableData.dataNames": ('int',), + "QScxmlTableData.evaluatorInfo": ('int',), + "QScxmlTableData.foreachInfo": ('int',), + "QScxmlTableData.initialSetup": (), + "QScxmlTableData.instructions": (), + "QScxmlTableData.name": (), + "QScxmlTableData.serviceFactory": ('int',), + "QScxmlTableData.stateMachineTable": (), + "QScxmlTableData.string": ('int',), + }) + +# Module PySide2.QtSensors +if "PySide2.QtSensors" in sys.modules: + dict.update({ + + # class PySide2.QtSensors.QAccelerometer: + "QAccelerometer.__init__": ('PySide2.QtCore.QObject',), + "QAccelerometer.accelerationMode": (), + "QAccelerometer.reading": (), + "QAccelerometer.setAccelerationMode": ('PySide2.QtSensors.QAccelerometer.AccelerationMode',), + + # class PySide2.QtSensors.QAccelerometerFilter: + "QAccelerometerFilter.__init__": (), + "QAccelerometerFilter.filter": [('PySide2.QtSensors.QAccelerometerReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QAccelerometerReading: + "QAccelerometerReading.__init__": ('PySide2.QtCore.QObject',), + "QAccelerometerReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QAccelerometerReading.setX": ('float',), + "QAccelerometerReading.setY": ('float',), + "QAccelerometerReading.setZ": ('float',), + "QAccelerometerReading.x": (), + "QAccelerometerReading.y": (), + "QAccelerometerReading.z": (), + + # class PySide2.QtSensors.QAltimeter: + "QAltimeter.__init__": ('PySide2.QtCore.QObject',), + "QAltimeter.reading": (), + + # class PySide2.QtSensors.QAltimeterFilter: + "QAltimeterFilter.__init__": (), + "QAltimeterFilter.filter": [('PySide2.QtSensors.QAltimeterReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QAltimeterReading: + "QAltimeterReading.__init__": ('PySide2.QtCore.QObject',), + "QAltimeterReading.altitude": (), + "QAltimeterReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QAltimeterReading.setAltitude": ('float',), + + # class PySide2.QtSensors.QAmbientLightFilter: + "QAmbientLightFilter.__init__": (), + "QAmbientLightFilter.filter": [('PySide2.QtSensors.QAmbientLightReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QAmbientLightReading: + "QAmbientLightReading.__init__": ('PySide2.QtCore.QObject',), + "QAmbientLightReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QAmbientLightReading.lightLevel": (), + "QAmbientLightReading.setLightLevel": ('PySide2.QtSensors.QAmbientLightReading.LightLevel',), + + # class PySide2.QtSensors.QAmbientLightSensor: + "QAmbientLightSensor.__init__": ('PySide2.QtCore.QObject',), + "QAmbientLightSensor.reading": (), + + # class PySide2.QtSensors.QAmbientTemperatureFilter: + "QAmbientTemperatureFilter.__init__": (), + "QAmbientTemperatureFilter.filter": [('PySide2.QtSensors.QAmbientTemperatureReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QAmbientTemperatureReading: + "QAmbientTemperatureReading.__init__": ('PySide2.QtCore.QObject',), + "QAmbientTemperatureReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QAmbientTemperatureReading.setTemperature": ('float',), + "QAmbientTemperatureReading.temperature": (), + + # class PySide2.QtSensors.QAmbientTemperatureSensor: + "QAmbientTemperatureSensor.__init__": ('PySide2.QtCore.QObject',), + "QAmbientTemperatureSensor.reading": (), + + # class PySide2.QtSensors.QCompass: + "QCompass.__init__": ('PySide2.QtCore.QObject',), + "QCompass.reading": (), + + # class PySide2.QtSensors.QCompassFilter: + "QCompassFilter.__init__": (), + "QCompassFilter.filter": [('PySide2.QtSensors.QCompassReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QCompassReading: + "QCompassReading.__init__": ('PySide2.QtCore.QObject',), + "QCompassReading.azimuth": (), + "QCompassReading.calibrationLevel": (), + "QCompassReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QCompassReading.setAzimuth": ('float',), + "QCompassReading.setCalibrationLevel": ('float',), + + # class PySide2.QtSensors.QDistanceFilter: + "QDistanceFilter.__init__": (), + "QDistanceFilter.filter": [('PySide2.QtSensors.QDistanceReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QDistanceReading: + "QDistanceReading.__init__": ('PySide2.QtCore.QObject',), + "QDistanceReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QDistanceReading.distance": (), + "QDistanceReading.setDistance": ('float',), + + # class PySide2.QtSensors.QDistanceSensor: + "QDistanceSensor.__init__": ('PySide2.QtCore.QObject',), + "QDistanceSensor.reading": (), + + # class PySide2.QtSensors.QGyroscope: + "QGyroscope.__init__": ('PySide2.QtCore.QObject',), + "QGyroscope.reading": (), + + # class PySide2.QtSensors.QGyroscopeFilter: + "QGyroscopeFilter.__init__": (), + "QGyroscopeFilter.filter": [('PySide2.QtSensors.QGyroscopeReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QGyroscopeReading: + "QGyroscopeReading.__init__": ('PySide2.QtCore.QObject',), + "QGyroscopeReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QGyroscopeReading.setX": ('float',), + "QGyroscopeReading.setY": ('float',), + "QGyroscopeReading.setZ": ('float',), + "QGyroscopeReading.x": (), + "QGyroscopeReading.y": (), + "QGyroscopeReading.z": (), + + # class PySide2.QtSensors.QHolsterFilter: + "QHolsterFilter.__init__": (), + "QHolsterFilter.filter": [('PySide2.QtSensors.QHolsterReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QHolsterReading: + "QHolsterReading.__init__": ('PySide2.QtCore.QObject',), + "QHolsterReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QHolsterReading.holstered": (), + "QHolsterReading.setHolstered": ('bool',), + + # class PySide2.QtSensors.QHolsterSensor: + "QHolsterSensor.__init__": ('PySide2.QtCore.QObject',), + "QHolsterSensor.reading": (), + + # class PySide2.QtSensors.QHumidityFilter: + "QHumidityFilter.__init__": (), + "QHumidityFilter.filter": [('PySide2.QtSensors.QHumidityReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QHumidityReading: + "QHumidityReading.__init__": ('PySide2.QtCore.QObject',), + "QHumidityReading.absoluteHumidity": (), + "QHumidityReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QHumidityReading.relativeHumidity": (), + "QHumidityReading.setAbsoluteHumidity": ('float',), + "QHumidityReading.setRelativeHumidity": ('float',), + + # class PySide2.QtSensors.QHumiditySensor: + "QHumiditySensor.__init__": ('PySide2.QtCore.QObject',), + "QHumiditySensor.reading": (), + + # class PySide2.QtSensors.QIRProximityFilter: + "QIRProximityFilter.__init__": (), + "QIRProximityFilter.filter": [('PySide2.QtSensors.QIRProximityReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QIRProximityReading: + "QIRProximityReading.__init__": ('PySide2.QtCore.QObject',), + "QIRProximityReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QIRProximityReading.reflectance": (), + "QIRProximityReading.setReflectance": ('float',), + + # class PySide2.QtSensors.QIRProximitySensor: + "QIRProximitySensor.__init__": ('PySide2.QtCore.QObject',), + "QIRProximitySensor.reading": (), + + # class PySide2.QtSensors.QLidFilter: + "QLidFilter.__init__": (), + "QLidFilter.filter": [('PySide2.QtSensors.QLidReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QLidReading: + "QLidReading.__init__": ('PySide2.QtCore.QObject',), + "QLidReading.backLidClosed": (), + "QLidReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QLidReading.frontLidClosed": (), + "QLidReading.setBackLidClosed": ('bool',), + "QLidReading.setFrontLidClosed": ('bool',), + + # class PySide2.QtSensors.QLidSensor: + "QLidSensor.__init__": ('PySide2.QtCore.QObject',), + "QLidSensor.reading": (), + + # class PySide2.QtSensors.QLightFilter: + "QLightFilter.__init__": (), + "QLightFilter.filter": [('PySide2.QtSensors.QLightReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QLightReading: + "QLightReading.__init__": ('PySide2.QtCore.QObject',), + "QLightReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QLightReading.lux": (), + "QLightReading.setLux": ('float',), + + # class PySide2.QtSensors.QLightSensor: + "QLightSensor.__init__": ('PySide2.QtCore.QObject',), + "QLightSensor.fieldOfView": (), + "QLightSensor.reading": (), + "QLightSensor.setFieldOfView": ('float',), + + # class PySide2.QtSensors.QMagnetometer: + "QMagnetometer.__init__": ('PySide2.QtCore.QObject',), + "QMagnetometer.reading": (), + "QMagnetometer.returnGeoValues": (), + "QMagnetometer.setReturnGeoValues": ('bool',), + + # class PySide2.QtSensors.QMagnetometerFilter: + "QMagnetometerFilter.__init__": (), + "QMagnetometerFilter.filter": [('PySide2.QtSensors.QMagnetometerReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QMagnetometerReading: + "QMagnetometerReading.__init__": ('PySide2.QtCore.QObject',), + "QMagnetometerReading.calibrationLevel": (), + "QMagnetometerReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QMagnetometerReading.setCalibrationLevel": ('float',), + "QMagnetometerReading.setX": ('float',), + "QMagnetometerReading.setY": ('float',), + "QMagnetometerReading.setZ": ('float',), + "QMagnetometerReading.x": (), + "QMagnetometerReading.y": (), + "QMagnetometerReading.z": (), + + # class PySide2.QtSensors.QOrientationFilter: + "QOrientationFilter.__init__": (), + "QOrientationFilter.filter": [('PySide2.QtSensors.QOrientationReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QOrientationReading: + "QOrientationReading.__init__": ('PySide2.QtCore.QObject',), + "QOrientationReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QOrientationReading.orientation": (), + "QOrientationReading.setOrientation": ('PySide2.QtSensors.QOrientationReading.Orientation',), + + # class PySide2.QtSensors.QOrientationSensor: + "QOrientationSensor.__init__": ('PySide2.QtCore.QObject',), + "QOrientationSensor.reading": (), + + # class PySide2.QtSensors.QPressureFilter: + "QPressureFilter.__init__": (), + "QPressureFilter.filter": [('PySide2.QtSensors.QPressureReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QPressureReading: + "QPressureReading.__init__": ('PySide2.QtCore.QObject',), + "QPressureReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QPressureReading.pressure": (), + "QPressureReading.setPressure": ('float',), + "QPressureReading.setTemperature": ('float',), + "QPressureReading.temperature": (), + + # class PySide2.QtSensors.QPressureSensor: + "QPressureSensor.__init__": ('PySide2.QtCore.QObject',), + "QPressureSensor.reading": (), + + # class PySide2.QtSensors.QProximityFilter: + "QProximityFilter.__init__": (), + "QProximityFilter.filter": [('PySide2.QtSensors.QProximityReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QProximityReading: + "QProximityReading.__init__": ('PySide2.QtCore.QObject',), + "QProximityReading.close": (), + "QProximityReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QProximityReading.setClose": ('bool',), + + # class PySide2.QtSensors.QProximitySensor: + "QProximitySensor.__init__": ('PySide2.QtCore.QObject',), + "QProximitySensor.reading": (), + + # class PySide2.QtSensors.QRotationFilter: + "QRotationFilter.__init__": (), + "QRotationFilter.filter": [('PySide2.QtSensors.QRotationReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QRotationReading: + "QRotationReading.__init__": ('PySide2.QtCore.QObject',), + "QRotationReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QRotationReading.setFromEuler": ('float', 'float', 'float'), + "QRotationReading.x": (), + "QRotationReading.y": (), + "QRotationReading.z": (), + + # class PySide2.QtSensors.QRotationSensor: + "QRotationSensor.__init__": ('PySide2.QtCore.QObject',), + "QRotationSensor.hasZ": (), + "QRotationSensor.reading": (), + "QRotationSensor.setHasZ": ('bool',), + + # class PySide2.QtSensors.QSensor: + "QSensor.__init__": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), + "QSensor.addFilter": ('PySide2.QtSensors.QSensorFilter',), + "QSensor.availableDataRates": (), + "QSensor.axesOrientationMode": (), + "QSensor.backend": (), + "QSensor.bufferSize": (), + "QSensor.connectToBackend": (), + "QSensor.currentOrientation": (), + "QSensor.dataRate": (), + "QSensor.defaultSensorForType": ('PySide2.QtCore.QByteArray',), + "QSensor.description": (), + "QSensor.efficientBufferSize": (), + "QSensor.error": (), + "QSensor.filters": (), + "QSensor.identifier": (), + "QSensor.isActive": (), + "QSensor.isAlwaysOn": (), + "QSensor.isBusy": (), + "QSensor.isConnectedToBackend": (), + "QSensor.isFeatureSupported": ('PySide2.QtSensors.QSensor.Feature',), + "QSensor.maxBufferSize": (), + "QSensor.outputRange": (), + "QSensor.outputRanges": (), + "QSensor.reading": (), + "QSensor.removeFilter": ('PySide2.QtSensors.QSensorFilter',), + "QSensor.sensorTypes": (), + "QSensor.sensorsForType": ('PySide2.QtCore.QByteArray',), + "QSensor.setActive": ('bool',), + "QSensor.setAlwaysOn": ('bool',), + "QSensor.setAxesOrientationMode": ('PySide2.QtSensors.QSensor.AxesOrientationMode',), + "QSensor.setBufferSize": ('int',), + "QSensor.setCurrentOrientation": ('int',), + "QSensor.setDataRate": ('int',), + "QSensor.setEfficientBufferSize": ('int',), + "QSensor.setIdentifier": ('PySide2.QtCore.QByteArray',), + "QSensor.setMaxBufferSize": ('int',), + "QSensor.setOutputRange": ('int',), + "QSensor.setSkipDuplicates": ('bool',), + "QSensor.setUserOrientation": ('int',), + "QSensor.skipDuplicates": (), + "QSensor.start": (), + "QSensor.stop": (), + "QSensor.type": (), + "QSensor.userOrientation": (), + + # class PySide2.QtSensors.QSensorBackend: + "QSensorBackend.__init__": ('PySide2.QtSensors.QSensor', 'PySide2.QtCore.QObject'), + "QSensorBackend.addDataRate": ('float', 'float'), + "QSensorBackend.addOutputRange": ('float', 'float', 'float'), + "QSensorBackend.isFeatureSupported": ('PySide2.QtSensors.QSensor.Feature',), + "QSensorBackend.newReadingAvailable": (), + "QSensorBackend.reading": (), + "QSensorBackend.sensor": (), + "QSensorBackend.sensorBusy": (), + "QSensorBackend.sensorError": ('int',), + "QSensorBackend.sensorStopped": (), + "QSensorBackend.setDataRates": ('PySide2.QtSensors.QSensor',), + "QSensorBackend.setDescription": ('str',), + "QSensorBackend.start": (), + "QSensorBackend.stop": (), + + # class PySide2.QtSensors.QSensorBackendFactory: + "QSensorBackendFactory.__init__": (), + "QSensorBackendFactory.createBackend": ('PySide2.QtSensors.QSensor',), + + # class PySide2.QtSensors.QSensorChangesInterface: + "QSensorChangesInterface.__init__": (), + "QSensorChangesInterface.sensorsChanged": (), + + # class PySide2.QtSensors.QSensorFilter: + "QSensorFilter.__init__": (), + "QSensorFilter.filter": ('PySide2.QtSensors.QSensorReading',), + "QSensorFilter.setSensor": ('PySide2.QtSensors.QSensor',), + + # class PySide2.QtSensors.QSensorGestureManager: + "QSensorGestureManager.__init__": ('PySide2.QtCore.QObject',), + "QSensorGestureManager.gestureIds": (), + "QSensorGestureManager.recognizerSignals": ('str',), + "QSensorGestureManager.registerSensorGestureRecognizer": ('PySide2.QtSensors.QSensorGestureRecognizer',), + "QSensorGestureManager.sensorGestureRecognizer": ('str',), + + # class PySide2.QtSensors.QSensorGesturePluginInterface: + "QSensorGesturePluginInterface.__init__": (), + "QSensorGesturePluginInterface.createRecognizers": (), + "QSensorGesturePluginInterface.name": (), + "QSensorGesturePluginInterface.supportedIds": (), + + # class PySide2.QtSensors.QSensorGestureRecognizer: + "QSensorGestureRecognizer.__init__": ('PySide2.QtCore.QObject',), + "QSensorGestureRecognizer.create": (), + "QSensorGestureRecognizer.createBackend": (), + "QSensorGestureRecognizer.gestureSignals": (), + "QSensorGestureRecognizer.id": (), + "QSensorGestureRecognizer.isActive": (), + "QSensorGestureRecognizer.start": (), + "QSensorGestureRecognizer.startBackend": (), + "QSensorGestureRecognizer.stop": (), + "QSensorGestureRecognizer.stopBackend": (), + + # class PySide2.QtSensors.QSensorManager: + "QSensorManager.__init__": (), + "QSensorManager.createBackend": ('PySide2.QtSensors.QSensor',), + "QSensorManager.isBackendRegistered": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QSensorManager.registerBackend": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'PySide2.QtSensors.QSensorBackendFactory'), + "QSensorManager.setDefaultBackend": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QSensorManager.unregisterBackend": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + + # class PySide2.QtSensors.QSensorPluginInterface: + "QSensorPluginInterface.__init__": (), + "QSensorPluginInterface.registerSensors": (), + + # class PySide2.QtSensors.QSensorReading: + "QSensorReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QSensorReading.setTimestamp": ('int',), + "QSensorReading.timestamp": (), + "QSensorReading.value": ('int',), + "QSensorReading.valueCount": (), + + # class PySide2.QtSensors.QTapFilter: + "QTapFilter.__init__": (), + "QTapFilter.filter": [('PySide2.QtSensors.QSensorReading',), ('PySide2.QtSensors.QTapReading',)], + + # class PySide2.QtSensors.QTapReading: + "QTapReading.__init__": ('PySide2.QtCore.QObject',), + "QTapReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QTapReading.isDoubleTap": (), + "QTapReading.setDoubleTap": ('bool',), + "QTapReading.setTapDirection": ('PySide2.QtSensors.QTapReading.TapDirection',), + "QTapReading.tapDirection": (), + + # class PySide2.QtSensors.QTapSensor: + "QTapSensor.__init__": ('PySide2.QtCore.QObject',), + "QTapSensor.reading": (), + "QTapSensor.returnDoubleTapEvents": (), + "QTapSensor.setReturnDoubleTapEvents": ('bool',), + + # class PySide2.QtSensors.QTiltFilter: + "QTiltFilter.__init__": (), + "QTiltFilter.filter": [('PySide2.QtSensors.QSensorReading',), ('PySide2.QtSensors.QTiltReading',)], + + # class PySide2.QtSensors.QTiltReading: + "QTiltReading.__init__": ('PySide2.QtCore.QObject',), + "QTiltReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QTiltReading.setXRotation": ('float',), + "QTiltReading.setYRotation": ('float',), + "QTiltReading.xRotation": (), + "QTiltReading.yRotation": (), + + # class PySide2.QtSensors.QTiltSensor: + "QTiltSensor.__init__": ('PySide2.QtCore.QObject',), + "QTiltSensor.calibrate": (), + "QTiltSensor.reading": (), + + # class PySide2.QtSensors.qoutputrange: + "qoutputrange.__init__": [(), ('PySide2.QtSensors.qoutputrange',)], + "qoutputrange.__copy__": (), + }) + +# Module PySide2.QtTextToSpeech +if "PySide2.QtTextToSpeech" in sys.modules: + dict.update({ + + # class PySide2.QtTextToSpeech.QTextToSpeech: + "QTextToSpeech.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextToSpeech.availableEngines": (), + "QTextToSpeech.availableLocales": (), + "QTextToSpeech.availableVoices": (), + "QTextToSpeech.locale": (), + "QTextToSpeech.pause": (), + "QTextToSpeech.pitch": (), + "QTextToSpeech.rate": (), + "QTextToSpeech.resume": (), + "QTextToSpeech.say": ('str',), + "QTextToSpeech.setLocale": ('PySide2.QtCore.QLocale',), + "QTextToSpeech.setPitch": ('float',), + "QTextToSpeech.setRate": ('float',), + "QTextToSpeech.setVoice": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeech.setVolume": ('float',), + "QTextToSpeech.state": (), + "QTextToSpeech.stop": (), + "QTextToSpeech.voice": (), + "QTextToSpeech.volume": (), + + # class PySide2.QtTextToSpeech.QTextToSpeechEngine: + "QTextToSpeechEngine.__init__": ('PySide2.QtCore.QObject',), + "QTextToSpeechEngine.availableLocales": (), + "QTextToSpeechEngine.availableVoices": (), + "QTextToSpeechEngine.createVoice": ('str', 'PySide2.QtTextToSpeech.QVoice.Gender', 'PySide2.QtTextToSpeech.QVoice.Age', 'Any'), + "QTextToSpeechEngine.locale": (), + "QTextToSpeechEngine.pause": (), + "QTextToSpeechEngine.pitch": (), + "QTextToSpeechEngine.rate": (), + "QTextToSpeechEngine.resume": (), + "QTextToSpeechEngine.say": ('str',), + "QTextToSpeechEngine.setLocale": ('PySide2.QtCore.QLocale',), + "QTextToSpeechEngine.setPitch": ('float',), + "QTextToSpeechEngine.setRate": ('float',), + "QTextToSpeechEngine.setVoice": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeechEngine.setVolume": ('float',), + "QTextToSpeechEngine.state": (), + "QTextToSpeechEngine.stop": (), + "QTextToSpeechEngine.voice": (), + "QTextToSpeechEngine.voiceData": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeechEngine.volume": (), + + # class PySide2.QtTextToSpeech.QVoice: + "QVoice.__init__": [(), ('PySide2.QtTextToSpeech.QVoice',)], + "QVoice.__copy__": (), + "QVoice.age": (), + "QVoice.ageName": ('PySide2.QtTextToSpeech.QVoice.Age',), + "QVoice.gender": (), + "QVoice.genderName": ('PySide2.QtTextToSpeech.QVoice.Gender',), + "QVoice.name": (), + }) + +# Module PySide2.QtCharts +if "PySide2.QtCharts" in sys.modules: + dict.update({ + + # class PySide2.QtCharts.QtCharts: + }) + +# Module PySide2.QtSvg +if "PySide2.QtSvg" in sys.modules: + dict.update({ + + # class PySide2.QtSvg.QGraphicsSvgItem: + "QGraphicsSvgItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSvgItem.boundingRect": (), + "QGraphicsSvgItem.elementId": (), + "QGraphicsSvgItem.isCachingEnabled": (), + "QGraphicsSvgItem.maximumCacheSize": (), + "QGraphicsSvgItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSvgItem.renderer": (), + "QGraphicsSvgItem.setCachingEnabled": ('bool',), + "QGraphicsSvgItem.setElementId": ('str',), + "QGraphicsSvgItem.setMaximumCacheSize": ('PySide2.QtCore.QSize',), + "QGraphicsSvgItem.setSharedRenderer": ('PySide2.QtSvg.QSvgRenderer',), + "QGraphicsSvgItem.type": (), + + # class PySide2.QtSvg.QSvgGenerator: + "QSvgGenerator.__init__": (), + "QSvgGenerator.description": (), + "QSvgGenerator.fileName": (), + "QSvgGenerator.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QSvgGenerator.outputDevice": (), + "QSvgGenerator.paintEngine": (), + "QSvgGenerator.resolution": (), + "QSvgGenerator.setDescription": ('str',), + "QSvgGenerator.setFileName": ('str',), + "QSvgGenerator.setOutputDevice": ('PySide2.QtCore.QIODevice',), + "QSvgGenerator.setResolution": ('int',), + "QSvgGenerator.setSize": ('PySide2.QtCore.QSize',), + "QSvgGenerator.setTitle": ('str',), + "QSvgGenerator.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgGenerator.size": (), + "QSvgGenerator.title": (), + "QSvgGenerator.viewBox": (), + "QSvgGenerator.viewBoxF": (), + + # class PySide2.QtSvg.QSvgRenderer: + "QSvgRenderer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QXmlStreamReader', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QSvgRenderer.animated": (), + "QSvgRenderer.animationDuration": (), + "QSvgRenderer.boundsOnElement": ('str',), + "QSvgRenderer.currentFrame": (), + "QSvgRenderer.defaultSize": (), + "QSvgRenderer.elementExists": ('str',), + "QSvgRenderer.framesPerSecond": (), + "QSvgRenderer.isValid": (), + "QSvgRenderer.load": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QXmlStreamReader',), ('str',)], + "QSvgRenderer.matrixForElement": ('str',), + "QSvgRenderer.render": [('PySide2.QtGui.QPainter',), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), ('PySide2.QtGui.QPainter', 'str', 'PySide2.QtCore.QRectF')], + "QSvgRenderer.setCurrentFrame": ('int',), + "QSvgRenderer.setFramesPerSecond": ('int',), + "QSvgRenderer.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgRenderer.viewBox": (), + "QSvgRenderer.viewBoxF": (), + + # class PySide2.QtSvg.QSvgWidget: + "QSvgWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QSvgWidget.load": [('PySide2.QtCore.QByteArray',), ('str',)], + "QSvgWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSvgWidget.renderer": (), + "QSvgWidget.sizeHint": (), + }) + +# Module PySide2.QtDataVisualization +if "PySide2.QtDataVisualization" in sys.modules: + dict.update({ + + # class PySide2.QtDataVisualization.QtDataVisualization: + "QtDataVisualization.qDefaultSurfaceFormat": ('bool',), + }) + +# Module PySide2.QtUiTools +if "PySide2.QtUiTools" in sys.modules: + dict.update({ + + # class PySide2.QtUiTools.QUiLoader: + "QUiLoader.__init__": ('PySide2.QtCore.QObject',), + "QUiLoader.addPluginPath": ('str',), + "QUiLoader.availableLayouts": (), + "QUiLoader.availableWidgets": (), + "QUiLoader.clearPluginPaths": (), + "QUiLoader.createAction": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createActionGroup": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createLayout": ('str', 'PySide2.QtCore.QObject', 'str'), + "QUiLoader.createWidget": ('str', 'PySide2.QtWidgets.QWidget', 'str'), + "QUiLoader.errorString": (), + "QUiLoader.isLanguageChangeEnabled": (), + "QUiLoader.isTranslationEnabled": (), + "QUiLoader.load": [('PySide2.QtCore.QIODevice', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QWidget')], + "QUiLoader.pluginPaths": (), + "QUiLoader.registerCustomWidget": ('object',), + "QUiLoader.setLanguageChangeEnabled": ('bool',), + "QUiLoader.setTranslationEnabled": ('bool',), + "QUiLoader.setWorkingDirectory": ('PySide2.QtCore.QDir',), + "QUiLoader.workingDirectory": (), + }) + +# Module PySide2.QtWebChannel +if "PySide2.QtWebChannel" in sys.modules: + dict.update({ + + # class PySide2.QtWebChannel.QWebChannel: + "QWebChannel.__init__": ('PySide2.QtCore.QObject',), + "QWebChannel.blockUpdates": (), + "QWebChannel.connectTo": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.deregisterObject": ('PySide2.QtCore.QObject',), + "QWebChannel.disconnectFrom": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.registerObject": ('str', 'PySide2.QtCore.QObject'), + "QWebChannel.registerObjects": ('dict',), + "QWebChannel.registeredObjects": (), + "QWebChannel.setBlockUpdates": ('bool',), + + # class PySide2.QtWebChannel.QWebChannelAbstractTransport: + "QWebChannelAbstractTransport.__init__": ('PySide2.QtCore.QObject',), + "QWebChannelAbstractTransport.sendMessage": ('dict',), + }) + +# Module PySide2.QtWebEngineCore +if "PySide2.QtWebEngineCore" in sys.modules: + dict.update({ + + # class PySide2.QtWebEngineCore.QWebEngineCookieStore: + "QWebEngineCookieStore.deleteAllCookies": (), + "QWebEngineCookieStore.deleteSessionCookies": (), + "QWebEngineCookieStore.loadAllCookies": (), + + # class PySide2.QtWebEngineCore.QWebEngineHttpRequest: + "QWebEngineHttpRequest.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtWebEngineCore.QWebEngineHttpRequest.Method'), ('PySide2.QtWebEngineCore.QWebEngineHttpRequest',)], + "QWebEngineHttpRequest.hasHeader": ('PySide2.QtCore.QByteArray',), + "QWebEngineHttpRequest.header": ('PySide2.QtCore.QByteArray',), + "QWebEngineHttpRequest.headers": (), + "QWebEngineHttpRequest.method": (), + "QWebEngineHttpRequest.postData": (), + "QWebEngineHttpRequest.postRequest": ('PySide2.QtCore.QUrl', 'dict'), + "QWebEngineHttpRequest.setHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QWebEngineHttpRequest.setMethod": ('PySide2.QtWebEngineCore.QWebEngineHttpRequest.Method',), + "QWebEngineHttpRequest.setPostData": ('PySide2.QtCore.QByteArray',), + "QWebEngineHttpRequest.setUrl": ('PySide2.QtCore.QUrl',), + "QWebEngineHttpRequest.swap": ('PySide2.QtWebEngineCore.QWebEngineHttpRequest',), + "QWebEngineHttpRequest.unsetHeader": ('PySide2.QtCore.QByteArray',), + "QWebEngineHttpRequest.url": (), + + # class PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo: + "QWebEngineUrlRequestInfo.block": ('bool',), + "QWebEngineUrlRequestInfo.changed": (), + "QWebEngineUrlRequestInfo.firstPartyUrl": (), + "QWebEngineUrlRequestInfo.navigationType": (), + "QWebEngineUrlRequestInfo.redirect": ('PySide2.QtCore.QUrl',), + "QWebEngineUrlRequestInfo.requestMethod": (), + "QWebEngineUrlRequestInfo.requestUrl": (), + "QWebEngineUrlRequestInfo.resourceType": (), + "QWebEngineUrlRequestInfo.setHttpHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + + # class PySide2.QtWebEngineCore.QWebEngineUrlRequestInterceptor: + "QWebEngineUrlRequestInterceptor.__init__": ('PySide2.QtCore.QObject',), + "QWebEngineUrlRequestInterceptor.interceptRequest": ('PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo',), + + # class PySide2.QtWebEngineCore.QWebEngineUrlRequestJob: + "QWebEngineUrlRequestJob.fail": ('PySide2.QtWebEngineCore.QWebEngineUrlRequestJob.Error',), + "QWebEngineUrlRequestJob.initiator": (), + "QWebEngineUrlRequestJob.redirect": ('PySide2.QtCore.QUrl',), + "QWebEngineUrlRequestJob.reply": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QIODevice'), + "QWebEngineUrlRequestJob.requestMethod": (), + "QWebEngineUrlRequestJob.requestUrl": (), + + # class PySide2.QtWebEngineCore.QWebEngineUrlSchemeHandler: + "QWebEngineUrlSchemeHandler.__init__": ('PySide2.QtCore.QObject',), + "QWebEngineUrlSchemeHandler.requestStarted": ('PySide2.QtWebEngineCore.QWebEngineUrlRequestJob',), + }) + +# Module PySide2.QtWebEngine +if "PySide2.QtWebEngine" in sys.modules: + dict.update({ + + # class PySide2.QtWebEngine.QtWebEngine: + "QtWebEngine.initialize": (), + }) + +# Module PySide2.QtWebEngineWidgets +if "PySide2.QtWebEngineWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWebEngineWidgets.QWebEngineCertificateError: + "QWebEngineCertificateError.__init__": ('int', 'PySide2.QtCore.QUrl', 'bool', 'str'), + "QWebEngineCertificateError.error": (), + "QWebEngineCertificateError.errorDescription": (), + "QWebEngineCertificateError.isOverridable": (), + "QWebEngineCertificateError.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineContextMenuData: + "QWebEngineContextMenuData.__init__": [(), ('PySide2.QtWebEngineWidgets.QWebEngineContextMenuData',)], + "QWebEngineContextMenuData.__copy__": (), + "QWebEngineContextMenuData.editFlags": (), + "QWebEngineContextMenuData.isContentEditable": (), + "QWebEngineContextMenuData.isValid": (), + "QWebEngineContextMenuData.linkText": (), + "QWebEngineContextMenuData.linkUrl": (), + "QWebEngineContextMenuData.mediaFlags": (), + "QWebEngineContextMenuData.mediaType": (), + "QWebEngineContextMenuData.mediaUrl": (), + "QWebEngineContextMenuData.misspelledWord": (), + "QWebEngineContextMenuData.position": (), + "QWebEngineContextMenuData.selectedText": (), + "QWebEngineContextMenuData.spellCheckerSuggestions": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineDownloadItem: + "QWebEngineDownloadItem.accept": (), + "QWebEngineDownloadItem.cancel": (), + "QWebEngineDownloadItem.id": (), + "QWebEngineDownloadItem.interruptReason": (), + "QWebEngineDownloadItem.interruptReasonString": (), + "QWebEngineDownloadItem.isFinished": (), + "QWebEngineDownloadItem.isPaused": (), + "QWebEngineDownloadItem.isSavePageDownload": (), + "QWebEngineDownloadItem.mimeType": (), + "QWebEngineDownloadItem.path": (), + "QWebEngineDownloadItem.pause": (), + "QWebEngineDownloadItem.receivedBytes": (), + "QWebEngineDownloadItem.resume": (), + "QWebEngineDownloadItem.savePageFormat": (), + "QWebEngineDownloadItem.setPath": ('str',), + "QWebEngineDownloadItem.setSavePageFormat": ('PySide2.QtWebEngineWidgets.QWebEngineDownloadItem.SavePageFormat',), + "QWebEngineDownloadItem.state": (), + "QWebEngineDownloadItem.totalBytes": (), + "QWebEngineDownloadItem.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineFullScreenRequest: + "QWebEngineFullScreenRequest.accept": (), + "QWebEngineFullScreenRequest.origin": (), + "QWebEngineFullScreenRequest.reject": (), + "QWebEngineFullScreenRequest.toggleOn": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineHistoryItem: + "QWebEngineHistoryItem.__init__": ('PySide2.QtWebEngineWidgets.QWebEngineHistoryItem',), + "QWebEngineHistoryItem.iconUrl": (), + "QWebEngineHistoryItem.isValid": (), + "QWebEngineHistoryItem.lastVisited": (), + "QWebEngineHistoryItem.originalUrl": (), + "QWebEngineHistoryItem.swap": ('PySide2.QtWebEngineWidgets.QWebEngineHistoryItem',), + "QWebEngineHistoryItem.title": (), + "QWebEngineHistoryItem.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEnginePage: + "QWebEnginePage.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtWebEngineWidgets.QWebEngineProfile', 'PySide2.QtCore.QObject')], + "QWebEnginePage.acceptNavigationRequest": ('PySide2.QtCore.QUrl', 'PySide2.QtWebEngineWidgets.QWebEnginePage.NavigationType', 'bool'), + "QWebEnginePage.action": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction',), + "QWebEnginePage.backgroundColor": (), + "QWebEnginePage.certificateError": ('PySide2.QtWebEngineWidgets.QWebEngineCertificateError',), + "QWebEnginePage.chooseFiles": ('PySide2.QtWebEngineWidgets.QWebEnginePage.FileSelectionMode', 'List[str]', 'List[str]'), + "QWebEnginePage.contentsSize": (), + "QWebEnginePage.contextMenuData": (), + "QWebEnginePage.createStandardContextMenu": (), + "QWebEnginePage.createWindow": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebWindowType',), + "QWebEnginePage.devToolsPage": (), + "QWebEnginePage.download": ('PySide2.QtCore.QUrl', 'str'), + "QWebEnginePage.event": ('PySide2.QtCore.QEvent',), + "QWebEnginePage.findText": ('str', 'PySide2.libpyside.FindFlags'), + "QWebEnginePage.hasSelection": (), + "QWebEnginePage.icon": (), + "QWebEnginePage.iconUrl": (), + "QWebEnginePage.inspectedPage": (), + "QWebEnginePage.isAudioMuted": (), + "QWebEnginePage.javaScriptAlert": ('PySide2.QtCore.QUrl', 'str'), + "QWebEnginePage.javaScriptConfirm": ('PySide2.QtCore.QUrl', 'str'), + "QWebEnginePage.javaScriptConsoleMessage": ('PySide2.QtWebEngineWidgets.QWebEnginePage.JavaScriptConsoleMessageLevel', 'str', 'int', 'str'), + "QWebEnginePage.javaScriptPrompt": ('PySide2.QtCore.QUrl', 'str', 'str', 'str'), + "QWebEnginePage.load": [('PySide2.QtCore.QUrl',), ('PySide2.QtWebEngineCore.QWebEngineHttpRequest',)], + "QWebEnginePage.printToPdf": ('str', 'PySide2.QtGui.QPageLayout'), + "QWebEnginePage.profile": (), + "QWebEnginePage.recentlyAudible": (), + "QWebEnginePage.replaceMisspelledWord": ('str',), + "QWebEnginePage.requestedUrl": (), + "QWebEnginePage.runJavaScript": [('str',), ('str', 'int')], + "QWebEnginePage.save": ('str', 'PySide2.QtWebEngineWidgets.QWebEngineDownloadItem.SavePageFormat'), + "QWebEnginePage.scripts": (), + "QWebEnginePage.scrollPosition": (), + "QWebEnginePage.selectedText": (), + "QWebEnginePage.setAudioMuted": ('bool',), + "QWebEnginePage.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QWebEnginePage.setContent": ('PySide2.QtCore.QByteArray', 'str', 'PySide2.QtCore.QUrl'), + "QWebEnginePage.setDevToolsPage": ('PySide2.QtWebEngineWidgets.QWebEnginePage',), + "QWebEnginePage.setFeaturePermission": ('PySide2.QtCore.QUrl', 'PySide2.QtWebEngineWidgets.QWebEnginePage.Feature', 'PySide2.QtWebEngineWidgets.QWebEnginePage.PermissionPolicy'), + "QWebEnginePage.setHtml": ('str', 'PySide2.QtCore.QUrl'), + "QWebEnginePage.setInspectedPage": ('PySide2.QtWebEngineWidgets.QWebEnginePage',), + "QWebEnginePage.setUrl": ('PySide2.QtCore.QUrl',), + "QWebEnginePage.setView": ('PySide2.QtWidgets.QWidget',), + "QWebEnginePage.setWebChannel": [('PySide2.QtWebChannel.QWebChannel',), ('PySide2.QtWebChannel.QWebChannel', 'int')], + "QWebEnginePage.setZoomFactor": ('float',), + "QWebEnginePage.settings": (), + "QWebEnginePage.title": (), + "QWebEnginePage.triggerAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction', 'bool'), + "QWebEnginePage.url": (), + "QWebEnginePage.view": (), + "QWebEnginePage.webChannel": (), + "QWebEnginePage.zoomFactor": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineProfile: + "QWebEngineProfile.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QWebEngineProfile.cachePath": (), + "QWebEngineProfile.clearAllVisitedLinks": (), + "QWebEngineProfile.clearHttpCache": (), + "QWebEngineProfile.clearVisitedLinks": ('list',), + "QWebEngineProfile.cookieStore": (), + "QWebEngineProfile.defaultProfile": (), + "QWebEngineProfile.httpAcceptLanguage": (), + "QWebEngineProfile.httpCacheMaximumSize": (), + "QWebEngineProfile.httpCacheType": (), + "QWebEngineProfile.httpUserAgent": (), + "QWebEngineProfile.installUrlSchemeHandler": ('PySide2.QtCore.QByteArray', 'PySide2.QtWebEngineCore.QWebEngineUrlSchemeHandler'), + "QWebEngineProfile.isOffTheRecord": (), + "QWebEngineProfile.isSpellCheckEnabled": (), + "QWebEngineProfile.persistentCookiesPolicy": (), + "QWebEngineProfile.persistentStoragePath": (), + "QWebEngineProfile.removeAllUrlSchemeHandlers": (), + "QWebEngineProfile.removeUrlScheme": ('PySide2.QtCore.QByteArray',), + "QWebEngineProfile.removeUrlSchemeHandler": ('PySide2.QtWebEngineCore.QWebEngineUrlSchemeHandler',), + "QWebEngineProfile.scripts": (), + "QWebEngineProfile.setCachePath": ('str',), + "QWebEngineProfile.setHttpAcceptLanguage": ('str',), + "QWebEngineProfile.setHttpCacheMaximumSize": ('int',), + "QWebEngineProfile.setHttpCacheType": ('PySide2.QtWebEngineWidgets.QWebEngineProfile.HttpCacheType',), + "QWebEngineProfile.setHttpUserAgent": ('str',), + "QWebEngineProfile.setPersistentCookiesPolicy": ('PySide2.QtWebEngineWidgets.QWebEngineProfile.PersistentCookiesPolicy',), + "QWebEngineProfile.setPersistentStoragePath": ('str',), + "QWebEngineProfile.setRequestInterceptor": ('PySide2.QtWebEngineCore.QWebEngineUrlRequestInterceptor',), + "QWebEngineProfile.setSpellCheckEnabled": ('bool',), + "QWebEngineProfile.setSpellCheckLanguages": ('List[str]',), + "QWebEngineProfile.settings": (), + "QWebEngineProfile.spellCheckLanguages": (), + "QWebEngineProfile.storageName": (), + "QWebEngineProfile.urlSchemeHandler": ('PySide2.QtCore.QByteArray',), + "QWebEngineProfile.visitedLinksContainsUrl": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtWebEngineWidgets.QWebEngineScript: + "QWebEngineScript.__init__": [(), ('PySide2.QtWebEngineWidgets.QWebEngineScript',)], + "QWebEngineScript.__copy__": (), + "QWebEngineScript.injectionPoint": (), + "QWebEngineScript.isNull": (), + "QWebEngineScript.name": (), + "QWebEngineScript.runsOnSubFrames": (), + "QWebEngineScript.setInjectionPoint": ('PySide2.QtWebEngineWidgets.QWebEngineScript.InjectionPoint',), + "QWebEngineScript.setName": ('str',), + "QWebEngineScript.setRunsOnSubFrames": ('bool',), + "QWebEngineScript.setSourceCode": ('str',), + "QWebEngineScript.setWorldId": ('int',), + "QWebEngineScript.sourceCode": (), + "QWebEngineScript.swap": ('PySide2.QtWebEngineWidgets.QWebEngineScript',), + "QWebEngineScript.worldId": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineScriptCollection: + "QWebEngineScriptCollection.clear": (), + "QWebEngineScriptCollection.contains": ('PySide2.QtWebEngineWidgets.QWebEngineScript',), + "QWebEngineScriptCollection.count": (), + "QWebEngineScriptCollection.findScript": ('str',), + "QWebEngineScriptCollection.findScripts": ('str',), + "QWebEngineScriptCollection.insert": [('PySide2.QtWebEngineWidgets.QWebEngineScript',), ('list',)], + "QWebEngineScriptCollection.isEmpty": (), + "QWebEngineScriptCollection.remove": ('PySide2.QtWebEngineWidgets.QWebEngineScript',), + "QWebEngineScriptCollection.size": (), + "QWebEngineScriptCollection.toList": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineSettings: + "QWebEngineSettings.defaultSettings": (), + "QWebEngineSettings.defaultTextEncoding": (), + "QWebEngineSettings.fontFamily": ('PySide2.QtWebEngineWidgets.QWebEngineSettings.FontFamily',), + "QWebEngineSettings.fontSize": ('PySide2.QtWebEngineWidgets.QWebEngineSettings.FontSize',), + "QWebEngineSettings.globalSettings": (), + "QWebEngineSettings.resetAttribute": ('PySide2.QtWebEngineWidgets.QWebEngineSettings.WebAttribute',), + "QWebEngineSettings.resetFontFamily": ('PySide2.QtWebEngineWidgets.QWebEngineSettings.FontFamily',), + "QWebEngineSettings.resetFontSize": ('PySide2.QtWebEngineWidgets.QWebEngineSettings.FontSize',), + "QWebEngineSettings.resetUnknownUrlSchemePolicy": (), + "QWebEngineSettings.setAttribute": ('PySide2.QtWebEngineWidgets.QWebEngineSettings.WebAttribute', 'bool'), + "QWebEngineSettings.setDefaultTextEncoding": ('str',), + "QWebEngineSettings.setFontFamily": ('PySide2.QtWebEngineWidgets.QWebEngineSettings.FontFamily', 'str'), + "QWebEngineSettings.setFontSize": ('PySide2.QtWebEngineWidgets.QWebEngineSettings.FontSize', 'int'), + "QWebEngineSettings.setUnknownUrlSchemePolicy": ('PySide2.QtWebEngineWidgets.QWebEngineSettings.UnknownUrlSchemePolicy',), + "QWebEngineSettings.testAttribute": ('PySide2.QtWebEngineWidgets.QWebEngineSettings.WebAttribute',), + "QWebEngineSettings.unknownUrlSchemePolicy": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineView: + "QWebEngineView.__init__": ('PySide2.QtWidgets.QWidget',), + "QWebEngineView.back": (), + "QWebEngineView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWebEngineView.createWindow": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebWindowType',), + "QWebEngineView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWebEngineView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWebEngineView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWebEngineView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWebEngineView.event": ('PySide2.QtCore.QEvent',), + "QWebEngineView.findText": ('str', 'PySide2.libpyside.FindFlags'), + "QWebEngineView.forward": (), + "QWebEngineView.hasSelection": (), + "QWebEngineView.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWebEngineView.icon": (), + "QWebEngineView.iconUrl": (), + "QWebEngineView.load": [('PySide2.QtCore.QUrl',), ('PySide2.QtWebEngineCore.QWebEngineHttpRequest',)], + "QWebEngineView.page": (), + "QWebEngineView.pageAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction',), + "QWebEngineView.reload": (), + "QWebEngineView.selectedText": (), + "QWebEngineView.setContent": ('PySide2.QtCore.QByteArray', 'str', 'PySide2.QtCore.QUrl'), + "QWebEngineView.setHtml": ('str', 'PySide2.QtCore.QUrl'), + "QWebEngineView.setPage": ('PySide2.QtWebEngineWidgets.QWebEnginePage',), + "QWebEngineView.setUrl": ('PySide2.QtCore.QUrl',), + "QWebEngineView.setZoomFactor": ('float',), + "QWebEngineView.settings": (), + "QWebEngineView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWebEngineView.sizeHint": (), + "QWebEngineView.stop": (), + "QWebEngineView.title": (), + "QWebEngineView.triggerPageAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction', 'bool'), + "QWebEngineView.url": (), + "QWebEngineView.zoomFactor": (), + }) + +# Module PySide2.QtWebSockets +if "PySide2.QtWebSockets" in sys.modules: + dict.update({ + + # class PySide2.QtWebSockets.QMaskGenerator: + "QMaskGenerator.__init__": ('PySide2.QtCore.QObject',), + "QMaskGenerator.nextMask": (), + "QMaskGenerator.seed": (), + + # class PySide2.QtWebSockets.QWebSocket: + "QWebSocket.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketProtocol.Version', 'PySide2.QtCore.QObject'), + "QWebSocket.abort": (), + "QWebSocket.close": ('PySide2.QtWebSockets.QWebSocketProtocol.CloseCode', 'str'), + "QWebSocket.closeCode": (), + "QWebSocket.closeReason": (), + "QWebSocket.errorString": (), + "QWebSocket.flush": (), + "QWebSocket.isValid": (), + "QWebSocket.localAddress": (), + "QWebSocket.localPort": (), + "QWebSocket.maskGenerator": (), + "QWebSocket.open": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QWebSocket.origin": (), + "QWebSocket.pauseMode": (), + "QWebSocket.peerAddress": (), + "QWebSocket.peerName": (), + "QWebSocket.peerPort": (), + "QWebSocket.ping": ('PySide2.QtCore.QByteArray',), + "QWebSocket.proxy": (), + "QWebSocket.readBufferSize": (), + "QWebSocket.request": (), + "QWebSocket.requestUrl": (), + "QWebSocket.resourceName": (), + "QWebSocket.resume": (), + "QWebSocket.sendBinaryMessage": ('PySide2.QtCore.QByteArray',), + "QWebSocket.sendTextMessage": ('str',), + "QWebSocket.setMaskGenerator": ('PySide2.QtWebSockets.QMaskGenerator',), + "QWebSocket.setPauseMode": ('PySide2.libpyside.PauseModes',), + "QWebSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocket.setReadBufferSize": ('int',), + "QWebSocket.state": (), + "QWebSocket.version": (), + + # class PySide2.QtWebSockets.QWebSocketCorsAuthenticator: + "QWebSocketCorsAuthenticator.__init__": [('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), ('str',)], + "QWebSocketCorsAuthenticator.allowed": (), + "QWebSocketCorsAuthenticator.origin": (), + "QWebSocketCorsAuthenticator.setAllowed": ('bool',), + "QWebSocketCorsAuthenticator.swap": ('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), + + # class PySide2.QtWebSockets.QWebSocketProtocol: + + # class PySide2.QtWebSockets.QWebSocketServer: + "QWebSocketServer.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketServer.SslMode', 'PySide2.QtCore.QObject'), + "QWebSocketServer.close": (), + "QWebSocketServer.error": (), + "QWebSocketServer.errorString": (), + "QWebSocketServer.handleConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QWebSocketServer.hasPendingConnections": (), + "QWebSocketServer.isListening": (), + "QWebSocketServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QWebSocketServer.maxPendingConnections": (), + "QWebSocketServer.nextPendingConnection": (), + "QWebSocketServer.pauseAccepting": (), + "QWebSocketServer.proxy": (), + "QWebSocketServer.resumeAccepting": (), + "QWebSocketServer.secureMode": (), + "QWebSocketServer.serverAddress": (), + "QWebSocketServer.serverName": (), + "QWebSocketServer.serverPort": (), + "QWebSocketServer.serverUrl": (), + "QWebSocketServer.setMaxPendingConnections": ('int',), + "QWebSocketServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocketServer.setServerName": ('str',), + "QWebSocketServer.setSocketDescriptor": ('int',), + "QWebSocketServer.socketDescriptor": (), + "QWebSocketServer.supportedVersions": (), + }) + +# Module PySide2.Qt3DCore +if "PySide2.Qt3DCore" in sys.modules: + dict.update({ + + # class PySide2.Qt3DCore.Qt3DCore: + "Qt3DCore.QTransform": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float', 'float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "Qt3DCore.qHash": ('PySide2.Qt3DCore.Qt3DCore.QNodeId', 'int'), + "Qt3DCore.qIdForNode": ('PySide2.Qt3DCore.Qt3DCore.QNode',), + }) + +# Module PySide2.Qt3DRender +if "PySide2.Qt3DRender" in sys.modules: + dict.update({ + + # class PySide2.Qt3DRender.Qt3DRender: + "Qt3DRender.QBuffer": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "Qt3DRender.QCamera": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtMultimedia.QCamera.Position', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QCameraInfo', 'PySide2.QtCore.QObject')], + "Qt3DRender.QProximityFilter": (), + }) + +# Module PySide2.Qt3DInput +if "PySide2.Qt3DInput" in sys.modules: + dict.update({ + + # class PySide2.Qt3DInput.Qt3DInput: + "Qt3DInput.QAction": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "Qt3DInput.QKeyEvent": [('PySide2.QtCore.QEvent.Type', 'int', 'PySide2.libpyside.KeyboardModifiers', 'int', 'int', 'int', 'str', 'bool', 'int'), ('PySide2.QtCore.QEvent.Type', 'int', 'PySide2.libpyside.KeyboardModifiers', 'str', 'bool', 'int')], + "Qt3DInput.QMouseEvent": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers')], + "Qt3DInput.QWheelEvent": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource', 'bool'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation')], + }) + +# Module PySide2.Qt3DLogic +if "PySide2.Qt3DLogic" in sys.modules: + dict.update({ + + # class PySide2.Qt3DLogic.Qt3DLogic: + }) + +# Module PySide2.Qt3DAnimation +if "PySide2.Qt3DAnimation" in sys.modules: + dict.update({ + + # class PySide2.Qt3DAnimation.Qt3DAnimation: + "Qt3DAnimation.QAbstractAnimation": ('PySide2.QtCore.QObject',), + "Qt3DAnimation.QAnimationGroup": ('PySide2.QtCore.QObject',), + }) + +# Module PySide2.Qt3DExtras +if "PySide2.Qt3DExtras" in sys.modules: + dict.update({ + + # class PySide2.Qt3DExtras.Qt3DExtras: + }) +# eof diff --git a/sources/pyside2/tests/registry/exists_darwin_5_6_4_ci.py b/sources/pyside2/tests/registry/exists_darwin_5_6_4_ci.py new file mode 100644 index 0000000..a43dc38 --- /dev/null +++ b/sources/pyside2/tests/registry/exists_darwin_5_6_4_ci.py @@ -0,0 +1,15435 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys + +dict = {} + +# Module PySide2.QtCore +if "PySide2.QtCore" in sys.modules: + dict.update({ + + # class PySide2.QtCore.ClassInfo: + + # class PySide2.QtCore.Connection: + "Connection.__init__": [(), ('PySide2.QtCore.Connection',)], + + # class PySide2.QtCore.MetaFunction: + + # class PySide2.QtCore.Property: + + # class PySide2.QtCore.QAbstractAnimation: + "QAbstractAnimation.__init__": ('PySide2.QtCore.QObject',), + "QAbstractAnimation.currentLoop": (), + "QAbstractAnimation.currentLoopTime": (), + "QAbstractAnimation.currentTime": (), + "QAbstractAnimation.direction": (), + "QAbstractAnimation.duration": (), + "QAbstractAnimation.event": ('PySide2.QtCore.QEvent',), + "QAbstractAnimation.group": (), + "QAbstractAnimation.loopCount": (), + "QAbstractAnimation.pause": (), + "QAbstractAnimation.resume": (), + "QAbstractAnimation.setCurrentTime": ('int',), + "QAbstractAnimation.setDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.setLoopCount": ('int',), + "QAbstractAnimation.setPaused": ('bool',), + "QAbstractAnimation.start": ('PySide2.QtCore.QAbstractAnimation.DeletionPolicy',), + "QAbstractAnimation.state": (), + "QAbstractAnimation.stop": (), + "QAbstractAnimation.totalDuration": (), + "QAbstractAnimation.updateCurrentTime": ('int',), + "QAbstractAnimation.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QAbstractEventDispatcher: + "QAbstractEventDispatcher.__init__": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.closingDown": (), + "QAbstractEventDispatcher.flush": (), + "QAbstractEventDispatcher.hasPendingEvents": (), + "QAbstractEventDispatcher.instance": ('PySide2.QtCore.QThread',), + "QAbstractEventDispatcher.interrupt": (), + "QAbstractEventDispatcher.processEvents": ('ProcessEventsFlags',), + "QAbstractEventDispatcher.registerSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.registerTimer": [('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject'), ('int', 'int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QAbstractEventDispatcher.registeredTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.remainingTime": ('int',), + "QAbstractEventDispatcher.startingUp": (), + "QAbstractEventDispatcher.unregisterSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.unregisterTimer": ('int',), + "QAbstractEventDispatcher.unregisterTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.wakeUp": (), + + # class PySide2.QtCore.QAbstractItemModel: + "QAbstractItemModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginMoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginMoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginResetModel": (), + "QAbstractItemModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.changePersistentIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.changePersistentIndexList": ('PySide2.support.signature.typing.List', 'PySide2.support.signature.typing.List'), + "QAbstractItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object')], + "QAbstractItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.decodeData": ('int', 'int', 'PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.encodeData": ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.endInsertColumns": (), + "QAbstractItemModel.endInsertRows": (), + "QAbstractItemModel.endMoveColumns": (), + "QAbstractItemModel.endMoveRows": (), + "QAbstractItemModel.endRemoveColumns": (), + "QAbstractItemModel.endRemoveRows": (), + "QAbstractItemModel.endResetModel": (), + "QAbstractItemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasIndex": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.support.signature.typing.Any', 'int', 'MatchFlags'), + "QAbstractItemModel.mimeData": ('PySide2.support.signature.typing.List',), + "QAbstractItemModel.mimeTypes": (), + "QAbstractItemModel.moveColumn": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRow": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemModel.persistentIndexList": (), + "QAbstractItemModel.removeColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.resetInternalData": (), + "QAbstractItemModel.revert": (), + "QAbstractItemModel.roleNames": (), + "QAbstractItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QAbstractItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QAbstractItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractItemModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.submit": (), + "QAbstractItemModel.supportedDragActions": (), + "QAbstractItemModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractListModel: + "QAbstractListModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractListModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractProxyModel: + "QAbstractProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractProxyModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mimeData": ('PySide2.support.signature.typing.List',), + "QAbstractProxyModel.mimeTypes": (), + "QAbstractProxyModel.resetInternalData": (), + "QAbstractProxyModel.revert": (), + "QAbstractProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QAbstractProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QAbstractProxyModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractProxyModel.sourceModel": (), + "QAbstractProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.submit": (), + "QAbstractProxyModel.supportedDragActions": (), + "QAbstractProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractState: + "QAbstractState.__init__": ('PySide2.QtCore.QState',), + "QAbstractState.active": (), + "QAbstractState.event": ('PySide2.QtCore.QEvent',), + "QAbstractState.machine": (), + "QAbstractState.onEntry": ('PySide2.QtCore.QEvent',), + "QAbstractState.onExit": ('PySide2.QtCore.QEvent',), + "QAbstractState.parentState": (), + + # class PySide2.QtCore.QAbstractTableModel: + "QAbstractTableModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractTableModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractTableModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractTransition: + "QAbstractTransition.__init__": ('PySide2.QtCore.QState',), + "QAbstractTransition.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.animations": (), + "QAbstractTransition.event": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.machine": (), + "QAbstractTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.setTargetState": ('PySide2.QtCore.QAbstractState',), + "QAbstractTransition.setTargetStates": ('list',), + "QAbstractTransition.setTransitionType": ('PySide2.QtCore.QAbstractTransition.TransitionType',), + "QAbstractTransition.sourceState": (), + "QAbstractTransition.targetState": (), + "QAbstractTransition.targetStates": (), + "QAbstractTransition.transitionType": (), + + # class PySide2.QtCore.QAnimationGroup: + "QAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QAnimationGroup.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.animationAt": ('int',), + "QAnimationGroup.animationCount": (), + "QAnimationGroup.clear": (), + "QAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QAnimationGroup.indexOfAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.insertAnimation": ('int', 'PySide2.QtCore.QAbstractAnimation'), + "QAnimationGroup.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.takeAnimation": ('int',), + + # class PySide2.QtCore.QBasicMutex: + "QBasicMutex.__init__": (), + "QBasicMutex.isRecursive": (), + "QBasicMutex.lock": (), + "QBasicMutex.tryLock": (), + "QBasicMutex.unlock": (), + + # class PySide2.QtCore.QBasicTimer: + "QBasicTimer.__init__": [(), ('PySide2.QtCore.QBasicTimer',)], + "QBasicTimer.__copy__": (), + "QBasicTimer.isActive": (), + "QBasicTimer.start": [('int', 'PySide2.QtCore.QObject'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QBasicTimer.stop": (), + "QBasicTimer.timerId": (), + + # class PySide2.QtCore.QBitArray: + "QBitArray.__init__": [(), ('PySide2.QtCore.QBitArray',), ('int', 'bool')], + "QBitArray.__copy__": (), + "QBitArray.at": ('int',), + "QBitArray.clear": (), + "QBitArray.clearBit": ('int',), + "QBitArray.count": [(), ('bool',)], + "QBitArray.fill": [('bool', 'int'), ('bool', 'int', 'int')], + "QBitArray.isEmpty": (), + "QBitArray.isNull": (), + "QBitArray.resize": ('int',), + "QBitArray.setBit": [('int',), ('int', 'bool')], + "QBitArray.size": (), + "QBitArray.swap": ('PySide2.QtCore.QBitArray',), + "QBitArray.testBit": ('int',), + "QBitArray.toggleBit": ('int',), + "QBitArray.truncate": ('int',), + + # class PySide2.QtCore.QBuffer: + "QBuffer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QBuffer.atEnd": (), + "QBuffer.buffer": [], + "QBuffer.canReadLine": (), + "QBuffer.close": (), + "QBuffer.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.data": (), + "QBuffer.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.open": ('OpenMode',), + "QBuffer.pos": (), + "QBuffer.readData": ('str', 'int'), + "QBuffer.seek": ('int',), + "QBuffer.setBuffer": ('PySide2.QtCore.QByteArray',), + "QBuffer.setData": ('PySide2.QtCore.QByteArray',), + "QBuffer.size": (), + "QBuffer.writeData": ('str', 'int'), + + # class PySide2.QtCore.QByteArray: + "QByteArray.__init__": [(), ('PySide2.QtCore.QByteArray',), ('int', 'PySide2.support.signature.typing.Union[str, int]'), ('bytes',), ('bytearray',)], + "QByteArray.__copy__": (), + "QByteArray.__reduce__": (), + "QByteArray.append": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.at": ('int',), + "QByteArray.capacity": (), + "QByteArray.cbegin": (), + "QByteArray.cend": (), + "QByteArray.chop": ('int',), + "QByteArray.clear": (), + "QByteArray.contains": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.count": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.data": [], + "QByteArray.endsWith": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.fill": ('PySide2.support.signature.typing.Union[str, int]', 'int'), + "QByteArray.fromBase64": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'Base64Options')], + "QByteArray.fromHex": ('PySide2.QtCore.QByteArray',), + "QByteArray.fromPercentEncoding": ('PySide2.QtCore.QByteArray', 'PySide2.support.signature.typing.Union[str, int]'), + "QByteArray.fromRawData": ('str', 'int'), + "QByteArray.indexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.insert": ('int', 'PySide2.QtCore.QByteArray'), + "QByteArray.isEmpty": (), + "QByteArray.isNull": (), + "QByteArray.isSharedWith": ('PySide2.QtCore.QByteArray',), + "QByteArray.lastIndexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.left": ('int',), + "QByteArray.leftJustified": ('int', 'PySide2.support.signature.typing.Union[str, int]', 'bool'), + "QByteArray.length": (), + "QByteArray.mid": ('int', 'int'), + "QByteArray.number": [('float', 'PySide2.support.signature.typing.Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.prepend": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.remove": ('int', 'int'), + "QByteArray.repeated": ('int',), + "QByteArray.replace": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.support.signature.typing.Union[str, int]', 'PySide2.QtCore.QByteArray'), ('PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]'), ('int', 'int', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QByteArray.reserve": ('int',), + "QByteArray.resize": ('int',), + "QByteArray.right": ('int',), + "QByteArray.rightJustified": ('int', 'PySide2.support.signature.typing.Union[str, int]', 'bool'), + "QByteArray.setNum": [('float', 'PySide2.support.signature.typing.Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.setRawData": ('str', 'int'), + "QByteArray.simplified": (), + "QByteArray.size": (), + "QByteArray.split": ('PySide2.support.signature.typing.Union[str, int]',), + "QByteArray.squeeze": (), + "QByteArray.startsWith": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.swap": ('PySide2.QtCore.QByteArray',), + "QByteArray.toBase64": [(), ('Base64Options',)], + "QByteArray.toDouble": ('bool',), + "QByteArray.toFloat": ('bool',), + "QByteArray.toHex": (), + "QByteArray.toInt": ('bool', 'int'), + "QByteArray.toLong": ('bool', 'int'), + "QByteArray.toLongLong": ('bool', 'int'), + "QByteArray.toLower": (), + "QByteArray.toPercentEncoding": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'PySide2.support.signature.typing.Union[str, int]'), + "QByteArray.toShort": ('bool', 'int'), + "QByteArray.toUInt": ('bool', 'int'), + "QByteArray.toULong": ('bool', 'int'), + "QByteArray.toULongLong": ('bool', 'int'), + "QByteArray.toUShort": ('bool', 'int'), + "QByteArray.toUpper": (), + "QByteArray.trimmed": (), + "QByteArray.truncate": ('int',), + + # class PySide2.QtCore.QByteArrayMatcher: + "QByteArrayMatcher.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArrayMatcher',), ('str', 'int')], + "QByteArrayMatcher.__copy__": (), + "QByteArrayMatcher.indexIn": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int', 'int')], + "QByteArrayMatcher.pattern": (), + "QByteArrayMatcher.setPattern": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QChildEvent: + "QChildEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QObject'), + "QChildEvent.added": (), + "QChildEvent.child": (), + "QChildEvent.polished": (), + "QChildEvent.removed": (), + + # class PySide2.QtCore.QCollator: + "QCollator.__init__": [('PySide2.QtCore.QCollator',), ('PySide2.QtCore.QLocale',)], + "QCollator.caseSensitivity": (), + "QCollator.compare": [('PySide2.support.signature.typing.Union[str, int]', 'int', 'PySide2.support.signature.typing.Union[str, int]', 'int'), ('str', 'str')], + "QCollator.ignorePunctuation": (), + "QCollator.locale": (), + "QCollator.numericMode": (), + "QCollator.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCollator.setIgnorePunctuation": ('bool',), + "QCollator.setLocale": ('PySide2.QtCore.QLocale',), + "QCollator.setNumericMode": ('bool',), + "QCollator.sortKey": ('str',), + "QCollator.swap": ('PySide2.QtCore.QCollator',), + + # class PySide2.QtCore.QCollatorSortKey: + "QCollatorSortKey.__init__": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.compare": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.swap": ('PySide2.QtCore.QCollatorSortKey',), + + # class PySide2.QtCore.QCommandLineOption: + "QCommandLineOption.__init__": [('PySide2.QtCore.QCommandLineOption',), ('PySide2.support.signature.typing.List',), ('PySide2.support.signature.typing.List', 'str', 'str', 'str'), ('str',), ('str', 'str', 'str', 'str')], + "QCommandLineOption.defaultValues": (), + "QCommandLineOption.description": (), + "QCommandLineOption.isHidden": (), + "QCommandLineOption.names": (), + "QCommandLineOption.setDefaultValue": ('str',), + "QCommandLineOption.setDefaultValues": ('PySide2.support.signature.typing.List',), + "QCommandLineOption.setDescription": ('str',), + "QCommandLineOption.setHidden": ('bool',), + "QCommandLineOption.setValueName": ('str',), + "QCommandLineOption.swap": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineOption.valueName": (), + + # class PySide2.QtCore.QCommandLineParser: + "QCommandLineParser.__init__": (), + "QCommandLineParser.addHelpOption": (), + "QCommandLineParser.addOption": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineParser.addOptions": ('list',), + "QCommandLineParser.addPositionalArgument": ('str', 'str', 'str'), + "QCommandLineParser.addVersionOption": (), + "QCommandLineParser.applicationDescription": (), + "QCommandLineParser.clearPositionalArguments": (), + "QCommandLineParser.errorText": (), + "QCommandLineParser.helpText": (), + "QCommandLineParser.isSet": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.optionNames": (), + "QCommandLineParser.parse": ('PySide2.support.signature.typing.List',), + "QCommandLineParser.positionalArguments": (), + "QCommandLineParser.process": [('PySide2.QtCore.QCoreApplication',), ('PySide2.support.signature.typing.List',)], + "QCommandLineParser.setApplicationDescription": ('str',), + "QCommandLineParser.setOptionsAfterPositionalArgumentsMode": ('PySide2.QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode',), + "QCommandLineParser.setSingleDashWordOptionMode": ('PySide2.QtCore.QCommandLineParser.SingleDashWordOptionMode',), + "QCommandLineParser.showHelp": ('int',), + "QCommandLineParser.showVersion": (), + "QCommandLineParser.unknownOptionNames": (), + "QCommandLineParser.value": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.values": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + + # class PySide2.QtCore.QCoreApplication: + "QCoreApplication.__init__": ('PySide2.support.signature.typing.List',), + "QCoreApplication.addLibraryPath": ('str',), + "QCoreApplication.applicationDirPath": (), + "QCoreApplication.applicationFilePath": (), + "QCoreApplication.applicationName": (), + "QCoreApplication.applicationPid": (), + "QCoreApplication.applicationVersion": (), + "QCoreApplication.arguments": (), + "QCoreApplication.closingDown": (), + "QCoreApplication.event": ('PySide2.QtCore.QEvent',), + "QCoreApplication.eventDispatcher": (), + "QCoreApplication.exec_": (), + "QCoreApplication.exit": ('int',), + "QCoreApplication.flush": (), + "QCoreApplication.hasPendingEvents": (), + "QCoreApplication.installTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.instance": (), + "QCoreApplication.isQuitLockEnabled": (), + "QCoreApplication.isSetuidAllowed": (), + "QCoreApplication.libraryPaths": (), + "QCoreApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.organizationDomain": (), + "QCoreApplication.organizationName": (), + "QCoreApplication.postEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent', 'int'), + "QCoreApplication.processEvents": [('ProcessEventsFlags',), ('ProcessEventsFlags', 'int')], + "QCoreApplication.quit": (), + "QCoreApplication.removeLibraryPath": ('str',), + "QCoreApplication.removePostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.removeTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.sendEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.sendPostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.setApplicationName": ('str',), + "QCoreApplication.setApplicationVersion": ('str',), + "QCoreApplication.setAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute', 'bool'), + "QCoreApplication.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QCoreApplication.setLibraryPaths": ('PySide2.support.signature.typing.List',), + "QCoreApplication.setOrganizationDomain": ('str',), + "QCoreApplication.setOrganizationName": ('str',), + "QCoreApplication.setQuitLockEnabled": ('bool',), + "QCoreApplication.setSetuidAllowed": ('bool',), + "QCoreApplication.startingUp": (), + "QCoreApplication.testAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute',), + "QCoreApplication.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QCryptographicHash: + "QCryptographicHash.__init__": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QCryptographicHash.addData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str', 'int')], + "QCryptographicHash.hash": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QCryptographicHash.Algorithm'), + "QCryptographicHash.reset": (), + "QCryptographicHash.result": (), + + # class PySide2.QtCore.QDataStream: + "QDataStream.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QDataStream.atEnd": (), + "QDataStream.byteOrder": (), + "QDataStream.device": (), + "QDataStream.floatingPointPrecision": (), + "QDataStream.readBool": (), + "QDataStream.readDouble": (), + "QDataStream.readFloat": (), + "QDataStream.readInt16": (), + "QDataStream.readInt32": (), + "QDataStream.readInt64": (), + "QDataStream.readInt8": (), + "QDataStream.readQChar": (), + "QDataStream.readQString": (), + "QDataStream.readQStringList": (), + "QDataStream.readQVariant": (), + "QDataStream.readRawData": ('str', 'int'), + "QDataStream.readString": (), + "QDataStream.readUInt16": (), + "QDataStream.readUInt32": (), + "QDataStream.readUInt64": (), + "QDataStream.readUInt8": (), + "QDataStream.resetStatus": (), + "QDataStream.setByteOrder": ('PySide2.QtCore.QDataStream.ByteOrder',), + "QDataStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QDataStream.setFloatingPointPrecision": ('PySide2.QtCore.QDataStream.FloatingPointPrecision',), + "QDataStream.setStatus": ('PySide2.QtCore.QDataStream.Status',), + "QDataStream.setVersion": ('int',), + "QDataStream.skipRawData": ('int',), + "QDataStream.status": (), + "QDataStream.unsetDevice": (), + "QDataStream.version": (), + "QDataStream.writeBool": ('bool',), + "QDataStream.writeDouble": ('float',), + "QDataStream.writeFloat": ('float',), + "QDataStream.writeInt16": ('int',), + "QDataStream.writeInt32": ('int',), + "QDataStream.writeInt64": ('int',), + "QDataStream.writeInt8": ('PySide2.support.signature.typing.Union[str, int]',), + "QDataStream.writeQChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QDataStream.writeQString": ('str',), + "QDataStream.writeQStringList": ('PySide2.support.signature.typing.List',), + "QDataStream.writeQVariant": ('PySide2.support.signature.typing.Any',), + "QDataStream.writeRawData": ('str', 'int'), + "QDataStream.writeString": ('str',), + "QDataStream.writeUInt16": ('int',), + "QDataStream.writeUInt32": ('int',), + "QDataStream.writeUInt64": ('int',), + "QDataStream.writeUInt8": ('PySide2.support.signature.typing.Union[str, int]',), + + # class PySide2.QtCore.QDate: + "QDate.__init__": [(), ('PySide2.QtCore.QDate',), ('int', 'int', 'int')], + "QDate.__copy__": (), + "QDate.__reduce__": (), + "QDate.addDays": ('int',), + "QDate.addMonths": ('int',), + "QDate.addYears": ('int',), + "QDate.currentDate": (), + "QDate.day": (), + "QDate.dayOfWeek": (), + "QDate.dayOfYear": (), + "QDate.daysInMonth": (), + "QDate.daysInYear": (), + "QDate.daysTo": ('PySide2.QtCore.QDate',), + "QDate.fromJulianDay": ('int',), + "QDate.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDate.getDate": ('int', 'int', 'int'), + "QDate.isLeapYear": ('int',), + "QDate.isNull": (), + "QDate.isValid": [(), ('int', 'int', 'int')], + "QDate.longDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.longMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.month": (), + "QDate.setDate": ('int', 'int', 'int'), + "QDate.shortDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.shortMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.toJulianDay": (), + "QDate.toPython": (), + "QDate.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDate.weekNumber": ('int',), + "QDate.year": (), + + # class PySide2.QtCore.QDateTime: + "QDateTime.__init__": [(), ('PySide2.QtCore.QDate',), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.QTimeZone'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec', 'int'), ('PySide2.QtCore.QDateTime',), ('int', 'int', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int')], + "QDateTime.__copy__": (), + "QDateTime.__reduce__": (), + "QDateTime.addDays": ('int',), + "QDateTime.addMSecs": ('int',), + "QDateTime.addMonths": ('int',), + "QDateTime.addSecs": ('int',), + "QDateTime.addYears": ('int',), + "QDateTime.currentDateTime": (), + "QDateTime.currentDateTimeUtc": (), + "QDateTime.currentMSecsSinceEpoch": (), + "QDateTime.date": (), + "QDateTime.daysTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.fromMSecsSinceEpoch": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDateTime.fromTime_t": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.isDaylightTime": (), + "QDateTime.isNull": (), + "QDateTime.isValid": (), + "QDateTime.msecsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.offsetFromUtc": (), + "QDateTime.secsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.setDate": ('PySide2.QtCore.QDate',), + "QDateTime.setMSecsSinceEpoch": ('int',), + "QDateTime.setOffsetFromUtc": ('int',), + "QDateTime.setTime": ('PySide2.QtCore.QTime',), + "QDateTime.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.setTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.setTime_t": ('int',), + "QDateTime.setUtcOffset": ('int',), + "QDateTime.swap": ('PySide2.QtCore.QDateTime',), + "QDateTime.time": (), + "QDateTime.timeSpec": (), + "QDateTime.timeZone": (), + "QDateTime.timeZoneAbbreviation": (), + "QDateTime.toLocalTime": (), + "QDateTime.toMSecsSinceEpoch": (), + "QDateTime.toOffsetFromUtc": ('int',), + "QDateTime.toPython": (), + "QDateTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDateTime.toTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.toTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.toTime_t": (), + "QDateTime.toUTC": (), + "QDateTime.utcOffset": (), + + # class PySide2.QtCore.QDir: + "QDir.__init__": [('PySide2.QtCore.QDir',), ('str',), ('str', 'str', 'SortFlags', 'Filters')], + "QDir.__copy__": (), + "QDir.__reduce__": (), + "QDir.absoluteFilePath": ('str',), + "QDir.absolutePath": (), + "QDir.addResourceSearchPath": ('str',), + "QDir.addSearchPath": ('str', 'str'), + "QDir.canonicalPath": (), + "QDir.cd": ('str',), + "QDir.cdUp": (), + "QDir.cleanPath": ('str',), + "QDir.count": (), + "QDir.current": (), + "QDir.currentPath": (), + "QDir.dirName": (), + "QDir.drives": (), + "QDir.entryInfoList": [('Filters', 'SortFlags'), ('PySide2.support.signature.typing.List', 'Filters', 'SortFlags')], + "QDir.entryList": [('Filters', 'SortFlags'), ('PySide2.support.signature.typing.List', 'Filters', 'SortFlags')], + "QDir.exists": [(), ('str',)], + "QDir.filePath": ('str',), + "QDir.filter": (), + "QDir.fromNativeSeparators": ('str',), + "QDir.home": (), + "QDir.homePath": (), + "QDir.isAbsolute": (), + "QDir.isAbsolutePath": ('str',), + "QDir.isReadable": (), + "QDir.isRelative": (), + "QDir.isRelativePath": ('str',), + "QDir.isRoot": (), + "QDir.listSeparator": (), + "QDir.makeAbsolute": (), + "QDir.match": [('PySide2.support.signature.typing.List', 'str'), ('str', 'str')], + "QDir.mkdir": ('str',), + "QDir.mkpath": ('str',), + "QDir.nameFilters": (), + "QDir.nameFiltersFromString": ('str',), + "QDir.path": (), + "QDir.refresh": (), + "QDir.relativeFilePath": ('str',), + "QDir.remove": ('str',), + "QDir.removeRecursively": (), + "QDir.rename": ('str', 'str'), + "QDir.rmdir": ('str',), + "QDir.rmpath": ('str',), + "QDir.root": (), + "QDir.rootPath": (), + "QDir.searchPaths": ('str',), + "QDir.separator": (), + "QDir.setCurrent": ('str',), + "QDir.setFilter": ('Filters',), + "QDir.setNameFilters": ('PySide2.support.signature.typing.List',), + "QDir.setPath": ('str',), + "QDir.setSearchPaths": ('str', 'PySide2.support.signature.typing.List'), + "QDir.setSorting": ('SortFlags',), + "QDir.sorting": (), + "QDir.swap": ('PySide2.QtCore.QDir',), + "QDir.temp": (), + "QDir.tempPath": (), + "QDir.toNativeSeparators": ('str',), + + # class PySide2.QtCore.QDirIterator: + "QDirIterator.__init__": [('PySide2.QtCore.QDir', 'IteratorFlags'), ('str', 'Filters', 'IteratorFlags'), ('str', 'IteratorFlags'), ('str', 'PySide2.support.signature.typing.List', 'Filters', 'IteratorFlags')], + "QDirIterator.fileInfo": (), + "QDirIterator.fileName": (), + "QDirIterator.filePath": (), + "QDirIterator.hasNext": (), + "QDirIterator.next": (), + "QDirIterator.path": (), + + # class PySide2.QtCore.QDynamicPropertyChangeEvent: + "QDynamicPropertyChangeEvent.__init__": ('PySide2.QtCore.QByteArray',), + "QDynamicPropertyChangeEvent.propertyName": (), + + # class PySide2.QtCore.QEasingCurve: + "QEasingCurve.__init__": [('PySide2.QtCore.QEasingCurve',), ('PySide2.QtCore.QEasingCurve.Type',)], + "QEasingCurve.__copy__": (), + "QEasingCurve.addCubicBezierSegment": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEasingCurve.addTCBSegment": ('PySide2.QtCore.QPointF', 'float', 'float', 'float'), + "QEasingCurve.amplitude": (), + "QEasingCurve.customType": (), + "QEasingCurve.overshoot": (), + "QEasingCurve.period": (), + "QEasingCurve.setAmplitude": ('float',), + "QEasingCurve.setCustomType": ('object',), + "QEasingCurve.setOvershoot": ('float',), + "QEasingCurve.setPeriod": ('float',), + "QEasingCurve.setType": ('PySide2.QtCore.QEasingCurve.Type',), + "QEasingCurve.swap": ('PySide2.QtCore.QEasingCurve',), + "QEasingCurve.toCubicSpline": (), + "QEasingCurve.type": (), + "QEasingCurve.valueForProgress": ('float',), + + # class PySide2.QtCore.QElapsedTimer: + "QElapsedTimer.__init__": [(), ('PySide2.QtCore.QElapsedTimer',)], + "QElapsedTimer.__copy__": (), + "QElapsedTimer.clockType": (), + "QElapsedTimer.elapsed": (), + "QElapsedTimer.hasExpired": ('int',), + "QElapsedTimer.invalidate": (), + "QElapsedTimer.isMonotonic": (), + "QElapsedTimer.isValid": (), + "QElapsedTimer.msecsSinceReference": (), + "QElapsedTimer.msecsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.nsecsElapsed": (), + "QElapsedTimer.restart": (), + "QElapsedTimer.secsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.start": (), + + # class PySide2.QtCore.QEvent: + "QEvent.__init__": [('PySide2.QtCore.QEvent',), ('PySide2.QtCore.QEvent.Type',)], + "QEvent.accept": (), + "QEvent.ignore": (), + "QEvent.isAccepted": (), + "QEvent.registerEventType": ('int',), + "QEvent.setAccepted": ('bool',), + "QEvent.spontaneous": (), + "QEvent.type": (), + + # class PySide2.QtCore.QEventLoop: + "QEventLoop.__init__": ('PySide2.QtCore.QObject',), + "QEventLoop.event": ('PySide2.QtCore.QEvent',), + "QEventLoop.exec_": ('ProcessEventsFlags',), + "QEventLoop.exit": ('int',), + "QEventLoop.isRunning": (), + "QEventLoop.processEvents": [('ProcessEventsFlags',), ('ProcessEventsFlags', 'int')], + "QEventLoop.quit": (), + "QEventLoop.wakeUp": (), + + # class PySide2.QtCore.QEventTransition: + "QEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QEventTransition.event": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventSource": (), + "QEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventType": (), + "QEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QEventTransition.setEventSource": ('PySide2.QtCore.QObject',), + "QEventTransition.setEventType": ('PySide2.QtCore.QEvent.Type',), + + # class PySide2.QtCore.QFactoryInterface: + "QFactoryInterface.__init__": (), + "QFactoryInterface.keys": (), + + # class PySide2.QtCore.QFile: + "QFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QFile.copy": [('str',), ('str', 'str')], + "QFile.decodeName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QFile.encodeName": ('str',), + "QFile.exists": [(), ('str',)], + "QFile.fileName": (), + "QFile.link": [('str',), ('str', 'str')], + "QFile.open": [('OpenMode',), ('int', 'OpenMode', 'FileHandleFlags')], + "QFile.permissions": [(), ('str',)], + "QFile.readLink": [(), ('str',)], + "QFile.remove": [(), ('str',)], + "QFile.rename": [('str',), ('str', 'str')], + "QFile.resize": [('int',), ('str', 'int')], + "QFile.setFileName": ('str',), + "QFile.setPermissions": [('Permissions',), ('str', 'Permissions')], + "QFile.size": (), + "QFile.symLinkTarget": [(), ('str',)], + + # class PySide2.QtCore.QFileDevice: + "QFileDevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QFileDevice.atEnd": (), + "QFileDevice.close": (), + "QFileDevice.error": (), + "QFileDevice.fileName": (), + "QFileDevice.flush": (), + "QFileDevice.handle": (), + "QFileDevice.isSequential": (), + "QFileDevice.map": ('int', 'int', 'PySide2.QtCore.QFileDevice.MemoryMapFlags'), + "QFileDevice.permissions": (), + "QFileDevice.pos": (), + "QFileDevice.readData": ('str', 'int'), + "QFileDevice.readLineData": ('str', 'int'), + "QFileDevice.resize": ('int',), + "QFileDevice.seek": ('int',), + "QFileDevice.setPermissions": ('Permissions',), + "QFileDevice.size": (), + "QFileDevice.unmap": ('PySide2.support.signature.typing.Union[str, int]',), + "QFileDevice.unsetError": (), + "QFileDevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QFileInfo: + "QFileInfo.__init__": [(), ('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('PySide2.QtCore.QFileInfo',), ('str',)], + "QFileInfo.__copy__": (), + "QFileInfo.__reduce__": (), + "QFileInfo.absoluteDir": (), + "QFileInfo.absoluteFilePath": (), + "QFileInfo.absolutePath": (), + "QFileInfo.baseName": (), + "QFileInfo.bundleName": (), + "QFileInfo.caching": (), + "QFileInfo.canonicalFilePath": (), + "QFileInfo.canonicalPath": (), + "QFileInfo.completeBaseName": (), + "QFileInfo.completeSuffix": (), + "QFileInfo.created": (), + "QFileInfo.dir": (), + "QFileInfo.exists": [(), ('str',)], + "QFileInfo.fileName": (), + "QFileInfo.filePath": (), + "QFileInfo.group": (), + "QFileInfo.groupId": (), + "QFileInfo.isAbsolute": (), + "QFileInfo.isBundle": (), + "QFileInfo.isDir": (), + "QFileInfo.isExecutable": (), + "QFileInfo.isFile": (), + "QFileInfo.isHidden": (), + "QFileInfo.isNativePath": (), + "QFileInfo.isReadable": (), + "QFileInfo.isRelative": (), + "QFileInfo.isRoot": (), + "QFileInfo.isSymLink": (), + "QFileInfo.isWritable": (), + "QFileInfo.lastModified": (), + "QFileInfo.lastRead": (), + "QFileInfo.makeAbsolute": (), + "QFileInfo.owner": (), + "QFileInfo.ownerId": (), + "QFileInfo.path": (), + "QFileInfo.readLink": (), + "QFileInfo.refresh": (), + "QFileInfo.setCaching": ('bool',), + "QFileInfo.setFile": [('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('str',)], + "QFileInfo.size": (), + "QFileInfo.suffix": (), + "QFileInfo.swap": ('PySide2.QtCore.QFileInfo',), + "QFileInfo.symLinkTarget": (), + + # class PySide2.QtCore.QFileSelector: + "QFileSelector.__init__": ('PySide2.QtCore.QObject',), + "QFileSelector.allSelectors": (), + "QFileSelector.extraSelectors": (), + "QFileSelector.select": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileSelector.setExtraSelectors": ('PySide2.support.signature.typing.List',), + + # class PySide2.QtCore.QFileSystemWatcher: + "QFileSystemWatcher.__init__": [('PySide2.QtCore.QObject',), ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QObject')], + "QFileSystemWatcher.addPath": ('str',), + "QFileSystemWatcher.addPaths": ('PySide2.support.signature.typing.List',), + "QFileSystemWatcher.directories": (), + "QFileSystemWatcher.files": (), + "QFileSystemWatcher.removePath": ('str',), + "QFileSystemWatcher.removePaths": ('PySide2.support.signature.typing.List',), + + # class PySide2.QtCore.QFinalState: + "QFinalState.__init__": ('PySide2.QtCore.QState',), + "QFinalState.event": ('PySide2.QtCore.QEvent',), + "QFinalState.onEntry": ('PySide2.QtCore.QEvent',), + "QFinalState.onExit": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtCore.QGenericArgument: + "QGenericArgument.__init__": [('PySide2.QtCore.QGenericArgument',), ('str', 'int')], + "QGenericArgument.__copy__": (), + "QGenericArgument.data": (), + "QGenericArgument.name": (), + + # class PySide2.QtCore.QGenericReturnArgument: + "QGenericReturnArgument.__init__": [('PySide2.QtCore.QGenericReturnArgument',), ('str', 'int')], + "QGenericReturnArgument.__copy__": (), + + # class PySide2.QtCore.QHistoryState: + "QHistoryState.__init__": [('PySide2.QtCore.QHistoryState.HistoryType', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QHistoryState.defaultState": (), + "QHistoryState.defaultTransition": (), + "QHistoryState.event": ('PySide2.QtCore.QEvent',), + "QHistoryState.historyType": (), + "QHistoryState.onEntry": ('PySide2.QtCore.QEvent',), + "QHistoryState.onExit": ('PySide2.QtCore.QEvent',), + "QHistoryState.setDefaultState": ('PySide2.QtCore.QAbstractState',), + "QHistoryState.setDefaultTransition": ('PySide2.QtCore.QAbstractTransition',), + "QHistoryState.setHistoryType": ('PySide2.QtCore.QHistoryState.HistoryType',), + + # class PySide2.QtCore.QIODevice: + "QIODevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QIODevice.atEnd": (), + "QIODevice.bytesAvailable": (), + "QIODevice.bytesToWrite": (), + "QIODevice.canReadLine": (), + "QIODevice.close": (), + "QIODevice.errorString": (), + "QIODevice.getChar": ('str',), + "QIODevice.isOpen": (), + "QIODevice.isReadable": (), + "QIODevice.isSequential": (), + "QIODevice.isTextModeEnabled": (), + "QIODevice.isWritable": (), + "QIODevice.open": ('OpenMode',), + "QIODevice.openMode": (), + "QIODevice.peek": ('int',), + "QIODevice.pos": (), + "QIODevice.putChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QIODevice.read": ('int',), + "QIODevice.readAll": (), + "QIODevice.readData": ('str', 'int'), + "QIODevice.readLine": ('int',), + "QIODevice.readLineData": ('str', 'int'), + "QIODevice.reset": (), + "QIODevice.seek": ('int',), + "QIODevice.setErrorString": ('str',), + "QIODevice.setOpenMode": ('OpenMode',), + "QIODevice.setTextModeEnabled": ('bool',), + "QIODevice.size": (), + "QIODevice.ungetChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QIODevice.waitForBytesWritten": ('int',), + "QIODevice.waitForReadyRead": ('int',), + "QIODevice.write": ('PySide2.QtCore.QByteArray',), + "QIODevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QItemSelection: + "QItemSelection.__init__": [(), ('PySide2.QtCore.QItemSelection',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelection.__copy__": (), + "QItemSelection.append": [('PySide2.QtCore.QItemSelectionRange',), ('list',)], + "QItemSelection.at": ('int',), + "QItemSelection.back": [], + "QItemSelection.clear": (), + "QItemSelection.constFirst": (), + "QItemSelection.constLast": (), + "QItemSelection.contains": ('PySide2.QtCore.QModelIndex',), + "QItemSelection.count": [(), ('PySide2.QtCore.QItemSelectionRange',)], + "QItemSelection.detachShared": (), + "QItemSelection.empty": (), + "QItemSelection.endsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.first": [], + "QItemSelection.fromSet": ('set',), + "QItemSelection.fromVector": ('list',), + "QItemSelection.front": [], + "QItemSelection.indexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.indexes": (), + "QItemSelection.insert": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.isEmpty": (), + "QItemSelection.isSharedWith": ('list',), + "QItemSelection.last": [], + "QItemSelection.lastIndexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.length": (), + "QItemSelection.merge": ('PySide2.QtCore.QItemSelection', 'SelectionFlags'), + "QItemSelection.mid": ('int', 'int'), + "QItemSelection.move": ('int', 'int'), + "QItemSelection.pop_back": (), + "QItemSelection.pop_front": (), + "QItemSelection.prepend": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_back": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_front": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAll": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAt": ('int',), + "QItemSelection.removeFirst": (), + "QItemSelection.removeLast": (), + "QItemSelection.removeOne": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.replace": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.reserve": ('int',), + "QItemSelection.select": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QItemSelection.setSharable": ('bool',), + "QItemSelection.size": (), + "QItemSelection.split": ('PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelection'), + "QItemSelection.startsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.swap": [('int', 'int'), ('list',)], + "QItemSelection.takeAt": ('int',), + "QItemSelection.takeFirst": (), + "QItemSelection.takeLast": (), + "QItemSelection.toSet": (), + "QItemSelection.toVector": (), + "QItemSelection.value": [('int',), ('int', 'PySide2.QtCore.QItemSelectionRange')], + + # class PySide2.QtCore.QItemSelectionModel: + "QItemSelectionModel.__init__": [('PySide2.QtCore.QAbstractItemModel',), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject')], + "QItemSelectionModel.clear": (), + "QItemSelectionModel.clearCurrentIndex": (), + "QItemSelectionModel.clearSelection": (), + "QItemSelectionModel.columnIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.currentIndex": (), + "QItemSelectionModel.emitSelectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QItemSelectionModel.hasSelection": (), + "QItemSelectionModel.isColumnSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isRowSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isSelected": ('PySide2.QtCore.QModelIndex',), + "QItemSelectionModel.model": [], + "QItemSelectionModel.reset": (), + "QItemSelectionModel.rowIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.select": [('PySide2.QtCore.QItemSelection', 'SelectionFlags'), ('PySide2.QtCore.QModelIndex', 'SelectionFlags')], + "QItemSelectionModel.selectedColumns": ('int',), + "QItemSelectionModel.selectedIndexes": (), + "QItemSelectionModel.selectedRows": ('int',), + "QItemSelectionModel.selection": (), + "QItemSelectionModel.setCurrentIndex": ('PySide2.QtCore.QModelIndex', 'SelectionFlags'), + "QItemSelectionModel.setModel": ('PySide2.QtCore.QAbstractItemModel',), + + # class PySide2.QtCore.QItemSelectionRange: + "QItemSelectionRange.__init__": [(), ('PySide2.QtCore.QItemSelectionRange',), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.__copy__": (), + "QItemSelectionRange.bottom": (), + "QItemSelectionRange.bottomRight": (), + "QItemSelectionRange.contains": [('PySide2.QtCore.QModelIndex',), ('int', 'int', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.height": (), + "QItemSelectionRange.indexes": (), + "QItemSelectionRange.intersected": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.intersects": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.isEmpty": (), + "QItemSelectionRange.isValid": (), + "QItemSelectionRange.left": (), + "QItemSelectionRange.model": (), + "QItemSelectionRange.parent": (), + "QItemSelectionRange.right": (), + "QItemSelectionRange.swap": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.top": (), + "QItemSelectionRange.topLeft": (), + "QItemSelectionRange.width": (), + + # class PySide2.QtCore.QJsonArray: + "QJsonArray.__init__": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonArray.__copy__": (), + "QJsonArray.append": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.at": ('int',), + "QJsonArray.contains": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.count": (), + "QJsonArray.empty": (), + "QJsonArray.first": (), + "QJsonArray.fromStringList": ('PySide2.support.signature.typing.List',), + "QJsonArray.fromVariantList": ('list',), + "QJsonArray.insert": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.isEmpty": (), + "QJsonArray.last": (), + "QJsonArray.pop_back": (), + "QJsonArray.pop_front": (), + "QJsonArray.prepend": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_back": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_front": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.removeAt": ('int',), + "QJsonArray.removeFirst": (), + "QJsonArray.removeLast": (), + "QJsonArray.replace": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.size": (), + "QJsonArray.takeAt": ('int',), + "QJsonArray.toVariantList": (), + + # class PySide2.QtCore.QJsonDocument: + "QJsonDocument.__init__": [(), ('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonDocument',), ('dict',)], + "QJsonDocument.__copy__": (), + "QJsonDocument.array": (), + "QJsonDocument.fromBinaryData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromJson": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonParseError'), + "QJsonDocument.fromRawData": ('str', 'int', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromVariant": ('PySide2.support.signature.typing.Any',), + "QJsonDocument.isArray": (), + "QJsonDocument.isEmpty": (), + "QJsonDocument.isNull": (), + "QJsonDocument.isObject": (), + "QJsonDocument.object": (), + "QJsonDocument.rawData": ('int',), + "QJsonDocument.setArray": ('PySide2.QtCore.QJsonArray',), + "QJsonDocument.setObject": ('dict',), + "QJsonDocument.toBinaryData": (), + "QJsonDocument.toJson": ('PySide2.QtCore.QJsonDocument.JsonFormat',), + "QJsonDocument.toVariant": (), + + # class PySide2.QtCore.QJsonParseError: + "QJsonParseError.__init__": [(), ('PySide2.QtCore.QJsonParseError',)], + "QJsonParseError.__copy__": (), + "QJsonParseError.errorString": (), + + # class PySide2.QtCore.QJsonValue: + "QJsonValue.__init__": [('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonValue',), ('PySide2.QtCore.QJsonValue.Type',), ('bool',), ('dict',), ('float',), ('int',), ('str',)], + "QJsonValue.__copy__": (), + "QJsonValue.fromVariant": ('PySide2.support.signature.typing.Any',), + "QJsonValue.isArray": (), + "QJsonValue.isBool": (), + "QJsonValue.isDouble": (), + "QJsonValue.isNull": (), + "QJsonValue.isObject": (), + "QJsonValue.isString": (), + "QJsonValue.isUndefined": (), + "QJsonValue.toArray": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonValue.toBool": ('bool',), + "QJsonValue.toDouble": ('float',), + "QJsonValue.toInt": ('int',), + "QJsonValue.toObject": [(), ('dict',)], + "QJsonValue.toString": ('str',), + "QJsonValue.toVariant": (), + "QJsonValue.type": (), + + # class PySide2.QtCore.QLibraryInfo: + "QLibraryInfo.buildDate": (), + "QLibraryInfo.build": (), + "QLibraryInfo.isDebugBuild": (), + "QLibraryInfo.licensedProducts": (), + "QLibraryInfo.licensee": (), + "QLibraryInfo.location": ('PySide2.QtCore.QLibraryInfo.LibraryLocation',), + "QLibraryInfo.platformPluginArguments": ('str',), + + # class PySide2.QtCore.QLine: + "QLine.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('int', 'int', 'int', 'int')], + "QLine.__copy__": (), + "QLine.__reduce__": (), + "QLine.dx": (), + "QLine.dy": (), + "QLine.isNull": (), + "QLine.p1": (), + "QLine.p2": (), + "QLine.setLine": ('int', 'int', 'int', 'int'), + "QLine.setP1": ('PySide2.QtCore.QPoint',), + "QLine.setP2": ('PySide2.QtCore.QPoint',), + "QLine.setPoints": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QLine.toTuple": (), + "QLine.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.x1": (), + "QLine.x2": (), + "QLine.y1": (), + "QLine.y2": (), + + # class PySide2.QtCore.QLineF: + "QLineF.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QLineF.__copy__": (), + "QLineF.__reduce__": (), + "QLineF.angle": [(), ('PySide2.QtCore.QLineF',)], + "QLineF.angleTo": ('PySide2.QtCore.QLineF',), + "QLineF.dx": (), + "QLineF.dy": (), + "QLineF.fromPolar": ('float', 'float'), + "QLineF.intersect": ('PySide2.QtCore.QLineF', 'PySide2.QtCore.QPointF'), + "QLineF.isNull": (), + "QLineF.length": (), + "QLineF.normalVector": (), + "QLineF.p1": (), + "QLineF.p2": (), + "QLineF.pointAt": ('float',), + "QLineF.setAngle": ('float',), + "QLineF.setLength": ('float',), + "QLineF.setLine": ('float', 'float', 'float', 'float'), + "QLineF.setP1": ('PySide2.QtCore.QPointF',), + "QLineF.setP2": ('PySide2.QtCore.QPointF',), + "QLineF.setPoints": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QLineF.toLine": (), + "QLineF.toTuple": (), + "QLineF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.unitVector": (), + "QLineF.x1": (), + "QLineF.x2": (), + "QLineF.y1": (), + "QLineF.y2": (), + + # class PySide2.QtCore.QLocale: + "QLocale.__init__": [(), ('PySide2.QtCore.QLocale',), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Country'), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), ('str',)], + "QLocale.__copy__": (), + "QLocale.amText": (), + "QLocale.bcp47Name": (), + "QLocale.c": (), + "QLocale.countriesForLanguage": ('PySide2.QtCore.QLocale.Language',), + "QLocale.country": (), + "QLocale.countryToString": ('PySide2.QtCore.QLocale.Country',), + "QLocale.createSeparatedList": ('PySide2.support.signature.typing.List',), + "QLocale.currencySymbol": ('PySide2.QtCore.QLocale.CurrencySymbolFormat',), + "QLocale.dateFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dateTimeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.decimalPoint": (), + "QLocale.exponential": (), + "QLocale.firstDayOfWeek": (), + "QLocale.groupSeparator": (), + "QLocale.language": (), + "QLocale.languageToString": ('PySide2.QtCore.QLocale.Language',), + "QLocale.matchingLocales": ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), + "QLocale.measurementSystem": (), + "QLocale.monthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.name": (), + "QLocale.nativeCountryName": (), + "QLocale.nativeLanguageName": (), + "QLocale.negativeSign": (), + "QLocale.numberOptions": (), + "QLocale.percent": (), + "QLocale.pmText": (), + "QLocale.positiveSign": (), + "QLocale.quoteString": ['PySide2.QtCore.QLocale.QuotationStyle', 'str'], + "QLocale.script": (), + "QLocale.scriptToString": ('PySide2.QtCore.QLocale.Script',), + "QLocale.setDefault": ('PySide2.QtCore.QLocale',), + "QLocale.setNumberOptions": ('NumberOptions',), + "QLocale.standaloneDayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.standaloneMonthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.system": (), + "QLocale.textDirection": (), + "QLocale.timeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.toCurrencyString": [('float', 'str'), ('int', 'str')], + "QLocale.toDate": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDateTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDouble": ('str', 'bool'), + "QLocale.toFloat": ('str', 'bool'), + "QLocale.toInt": ('str', 'bool'), + "QLocale.toLongLong": ('str', 'bool'), + "QLocale.toLower": ('str',), + "QLocale.toShort": ('str', 'bool'), + "QLocale.toString": [('PySide2.QtCore.QDate', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDate', 'str'), ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDateTime', 'str'), ('PySide2.QtCore.QTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QTime', 'str'), ('float', 'PySide2.support.signature.typing.Union[str, int]', 'int'), ('int',)], + "QLocale.toTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toUInt": ('str', 'bool'), + "QLocale.toULongLong": ('str', 'bool'), + "QLocale.toUShort": ('str', 'bool'), + "QLocale.toUpper": ('str',), + "QLocale.uiLanguages": (), + "QLocale.weekdays": (), + "QLocale.zeroDigit": (), + + # class PySide2.QtCore.QMargins: + "QMargins.__init__": [(), ('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QMargins.__copy__": (), + "QMargins.bottom": (), + "QMargins.isNull": (), + "QMargins.left": (), + "QMargins.right": (), + "QMargins.setBottom": ('int',), + "QMargins.setLeft": ('int',), + "QMargins.setRight": ('int',), + "QMargins.setTop": ('int',), + "QMargins.top": (), + + # class PySide2.QtCore.QMarginsF: + "QMarginsF.__init__": [(), ('PySide2.QtCore.QMargins',), ('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float')], + "QMarginsF.__copy__": (), + "QMarginsF.bottom": (), + "QMarginsF.isNull": (), + "QMarginsF.left": (), + "QMarginsF.right": (), + "QMarginsF.setBottom": ('float',), + "QMarginsF.setLeft": ('float',), + "QMarginsF.setRight": ('float',), + "QMarginsF.setTop": ('float',), + "QMarginsF.toMargins": (), + "QMarginsF.top": (), + + # class PySide2.QtCore.QMessageLogContext: + "QMessageLogContext.__init__": [(), ('str', 'int', 'str', 'str')], + + # class PySide2.QtCore.QMetaClassInfo: + "QMetaClassInfo.__init__": [(), ('PySide2.QtCore.QMetaClassInfo',)], + "QMetaClassInfo.__copy__": (), + "QMetaClassInfo.name": (), + "QMetaClassInfo.value": (), + + # class PySide2.QtCore.QMetaEnum: + "QMetaEnum.__init__": [(), ('PySide2.QtCore.QMetaEnum',)], + "QMetaEnum.__copy__": (), + "QMetaEnum.isFlag": (), + "QMetaEnum.isValid": (), + "QMetaEnum.key": ('int',), + "QMetaEnum.keyCount": (), + "QMetaEnum.keyToValue": ('str', 'bool'), + "QMetaEnum.keysToValue": ('str', 'bool'), + "QMetaEnum.name": (), + "QMetaEnum.scope": (), + "QMetaEnum.value": ('int',), + "QMetaEnum.valueToKey": ('int',), + "QMetaEnum.valueToKeys": ('int',), + + # class PySide2.QtCore.QMetaMethod: + "QMetaMethod.__init__": [(), ('PySide2.QtCore.QMetaMethod',)], + "QMetaMethod.__copy__": (), + "QMetaMethod.access": (), + "QMetaMethod.enclosingMetaObject": (), + "QMetaMethod.invoke": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.invokeOnGadget": [('int', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('int', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.isValid": (), + "QMetaMethod.methodIndex": (), + "QMetaMethod.methodSignature": (), + "QMetaMethod.methodType": (), + "QMetaMethod.name": (), + "QMetaMethod.parameterCount": (), + "QMetaMethod.parameterNames": (), + "QMetaMethod.parameterType": ('int',), + "QMetaMethod.parameterTypes": (), + "QMetaMethod.returnType": (), + "QMetaMethod.revision": (), + "QMetaMethod.tag": (), + "QMetaMethod.typeName": (), + + # class PySide2.QtCore.QMetaObject: + "QMetaObject.__init__": (), + "QMetaObject.cast": ['PySide2.QtCore.QObject'], + "QMetaObject.checkConnectArgs": [('PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QMetaMethod'), ('str', 'str')], + "QMetaObject.classInfo": ('int',), + "QMetaObject.classInfoCount": (), + "QMetaObject.classInfoOffset": (), + "QMetaObject.className": (), + "QMetaObject.connectSlotsByName": ('PySide2.QtCore.QObject',), + "QMetaObject.constructor": ('int',), + "QMetaObject.constructorCount": (), + "QMetaObject.disconnect": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.disconnectOne": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.enumerator": ('int',), + "QMetaObject.enumeratorCount": (), + "QMetaObject.enumeratorOffset": (), + "QMetaObject.indexOfClassInfo": ('str',), + "QMetaObject.indexOfConstructor": ('str',), + "QMetaObject.indexOfEnumerator": ('str',), + "QMetaObject.indexOfMethod": ('str',), + "QMetaObject.indexOfProperty": ('str',), + "QMetaObject.indexOfSignal": ('str',), + "QMetaObject.indexOfSlot": ('str',), + "QMetaObject.invokeMethod": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaObject.method": ('int',), + "QMetaObject.methodCount": (), + "QMetaObject.methodOffset": (), + "QMetaObject.newInstance": ('PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), + "QMetaObject.normalizedSignature": ('str',), + "QMetaObject.normalizedType": ('str',), + "QMetaObject.property": ('int',), + "QMetaObject.propertyCount": (), + "QMetaObject.propertyOffset": (), + "QMetaObject.superClass": (), + "QMetaObject.userProperty": (), + + # class PySide2.QtCore.QMetaProperty: + "QMetaProperty.__init__": [(), ('PySide2.QtCore.QMetaProperty',)], + "QMetaProperty.__copy__": (), + "QMetaProperty.enumerator": (), + "QMetaProperty.hasNotifySignal": (), + "QMetaProperty.hasStdCppSet": (), + "QMetaProperty.isConstant": (), + "QMetaProperty.isDesignable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEditable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEnumType": (), + "QMetaProperty.isFinal": (), + "QMetaProperty.isFlagType": (), + "QMetaProperty.isReadable": (), + "QMetaProperty.isResettable": (), + "QMetaProperty.isScriptable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isStored": ('PySide2.QtCore.QObject',), + "QMetaProperty.isUser": ('PySide2.QtCore.QObject',), + "QMetaProperty.isValid": (), + "QMetaProperty.isWritable": (), + "QMetaProperty.name": (), + "QMetaProperty.notifySignal": (), + "QMetaProperty.notifySignalIndex": (), + "QMetaProperty.propertyIndex": (), + "QMetaProperty.read": ('PySide2.QtCore.QObject',), + "QMetaProperty.readOnGadget": ('int',), + "QMetaProperty.reset": ('PySide2.QtCore.QObject',), + "QMetaProperty.resetOnGadget": ('int',), + "QMetaProperty.revision": (), + "QMetaProperty.type": (), + "QMetaProperty.typeName": (), + "QMetaProperty.userType": (), + "QMetaProperty.write": ('PySide2.QtCore.QObject', 'PySide2.support.signature.typing.Any'), + "QMetaProperty.writeOnGadget": ('int', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtCore.QMimeData: + "QMimeData.__init__": (), + "QMimeData.clear": (), + "QMimeData.colorData": (), + "QMimeData.data": ('str',), + "QMimeData.formats": (), + "QMimeData.hasColor": (), + "QMimeData.hasFormat": ('str',), + "QMimeData.hasHtml": (), + "QMimeData.hasImage": (), + "QMimeData.hasText": (), + "QMimeData.hasUrls": (), + "QMimeData.html": (), + "QMimeData.imageData": (), + "QMimeData.removeFormat": ('str',), + "QMimeData.retrieveData": ('str', 'type'), + "QMimeData.setColorData": ('PySide2.support.signature.typing.Any',), + "QMimeData.setData": ('str', 'PySide2.QtCore.QByteArray'), + "QMimeData.setHtml": ('str',), + "QMimeData.setImageData": ('PySide2.support.signature.typing.Any',), + "QMimeData.setText": ('str',), + "QMimeData.setUrls": ('list',), + "QMimeData.text": (), + "QMimeData.urls": (), + + # class PySide2.QtCore.QMimeDatabase: + "QMimeDatabase.__init__": (), + "QMimeDatabase.allMimeTypes": (), + "QMimeDatabase.mimeTypeForData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QMimeDatabase.mimeTypeForFile": [('PySide2.QtCore.QFileInfo', 'PySide2.QtCore.QMimeDatabase.MatchMode'), ('str', 'PySide2.QtCore.QMimeDatabase.MatchMode')], + "QMimeDatabase.mimeTypeForFileNameAndData": [('str', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QIODevice')], + "QMimeDatabase.mimeTypeForName": ('str',), + "QMimeDatabase.mimeTypeForUrl": ('PySide2.QtCore.QUrl',), + "QMimeDatabase.mimeTypesForFileName": ('str',), + "QMimeDatabase.suffixForFileName": ('str',), + + # class PySide2.QtCore.QMimeType: + "QMimeType.__init__": [(), ('PySide2.QtCore.QMimeType',)], + "QMimeType.__copy__": (), + "QMimeType.aliases": (), + "QMimeType.allAncestors": (), + "QMimeType.comment": (), + "QMimeType.filterString": (), + "QMimeType.genericIconName": (), + "QMimeType.globPatterns": (), + "QMimeType.iconName": (), + "QMimeType.inherits": ('str',), + "QMimeType.isDefault": (), + "QMimeType.isValid": (), + "QMimeType.name": (), + "QMimeType.parentMimeTypes": (), + "QMimeType.preferredSuffix": (), + "QMimeType.suffixes": (), + "QMimeType.swap": ('PySide2.QtCore.QMimeType',), + + # class PySide2.QtCore.QModelIndex: + "QModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',)], + "QModelIndex.__copy__": (), + "QModelIndex.child": ('int', 'int'), + "QModelIndex.column": (), + "QModelIndex.data": ('int',), + "QModelIndex.flags": (), + "QModelIndex.internalId": (), + "QModelIndex.internalPointer": (), + "QModelIndex.isValid": (), + "QModelIndex.model": (), + "QModelIndex.parent": (), + "QModelIndex.row": (), + "QModelIndex.sibling": ('int', 'int'), + + # class PySide2.QtCore.QMutex: + "QMutex.__init__": ('PySide2.QtCore.QMutex.RecursionMode',), + "QMutex.lock": (), + "QMutex.tryLock": [(), ('int',)], + "QMutex.unlock": (), + + # class PySide2.QtCore.QMutexLocker: + "QMutexLocker.__init__": ('PySide2.QtCore.QBasicMutex',), + "QMutexLocker.__enter__": (), + "QMutexLocker.__exit__": ('object', 'object', 'object'), + "QMutexLocker.mutex": (), + "QMutexLocker.relock": (), + "QMutexLocker.unlock": (), + + # class PySide2.QtCore.QObject: + "QObject.__init__": ('PySide2.QtCore.QObject',), + "QObject.blockSignals": ('bool',), + "QObject.childEvent": ('PySide2.QtCore.QChildEvent',), + "QObject.children": (), + "QObject.connect": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'PySide2.support.signature.typing.Callable', 'PySide2.QtCore.Qt.ConnectionType')], + "QObject.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.customEvent": ('PySide2.QtCore.QEvent',), + "QObject.deleteLater": (), + "QObject.disconnect": [('PySide2.QtCore.Connection',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Callable'), ('str', 'PySide2.QtCore.QObject', 'str'), ('str', 'PySide2.support.signature.typing.Callable')], + "QObject.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.dumpObjectInfo": (), + "QObject.dumpObjectTree": (), + "QObject.dynamicPropertyNames": (), + "QObject.emit": ('str', '...'), + "QObject.event": ('PySide2.QtCore.QEvent',), + "QObject.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QObject.findChild": ('type', 'str'), + "QObject.findChildren": [('type', 'PySide2.QtCore.QRegExp'), ('type', 'str')], + "QObject.inherits": ('str',), + "QObject.installEventFilter": ('PySide2.QtCore.QObject',), + "QObject.isSignalConnected": ('PySide2.QtCore.QMetaMethod',), + "QObject.isWidgetType": (), + "QObject.isWindowType": (), + "QObject.killTimer": ('int',), + "QObject.metaObject": (), + "QObject.moveToThread": ('PySide2.QtCore.QThread',), + "QObject.objectName": (), + "QObject.parent": (), + "QObject.property": ('str',), + "QObject.receivers": ('str',), + "QObject.registerUserData": (), + "QObject.removeEventFilter": ('PySide2.QtCore.QObject',), + "QObject.sender": (), + "QObject.senderSignalIndex": (), + "QObject.setObjectName": ('str',), + "QObject.setParent": ('PySide2.QtCore.QObject',), + "QObject.setProperty": ('str', 'PySide2.support.signature.typing.Any'), + "QObject.signalsBlocked": (), + "QObject.startTimer": ('int', 'PySide2.QtCore.Qt.TimerType'), + "QObject.thread": (), + "QObject.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QObject.tr": ('str', 'str', 'int'), + + # class PySide2.QtCore.QParallelAnimationGroup: + "QParallelAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QParallelAnimationGroup.duration": (), + "QParallelAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QParallelAnimationGroup.updateCurrentTime": ('int',), + "QParallelAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QParallelAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QPauseAnimation: + "QPauseAnimation.__init__": [('PySide2.QtCore.QObject',), ('int', 'PySide2.QtCore.QObject')], + "QPauseAnimation.duration": (), + "QPauseAnimation.event": ('PySide2.QtCore.QEvent',), + "QPauseAnimation.setDuration": ('int',), + "QPauseAnimation.updateCurrentTime": ('int',), + + # class PySide2.QtCore.QPersistentModelIndex: + "QPersistentModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QPersistentModelIndex',)], + "QPersistentModelIndex.__copy__": (), + "QPersistentModelIndex.child": ('int', 'int'), + "QPersistentModelIndex.column": (), + "QPersistentModelIndex.data": ('int',), + "QPersistentModelIndex.flags": (), + "QPersistentModelIndex.internalId": (), + "QPersistentModelIndex.internalPointer": (), + "QPersistentModelIndex.isValid": (), + "QPersistentModelIndex.model": (), + "QPersistentModelIndex.parent": (), + "QPersistentModelIndex.row": (), + "QPersistentModelIndex.sibling": ('int', 'int'), + "QPersistentModelIndex.swap": ('PySide2.QtCore.QPersistentModelIndex',), + + # class PySide2.QtCore.QPluginLoader: + "QPluginLoader.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QPluginLoader.errorString": (), + "QPluginLoader.fileName": (), + "QPluginLoader.instance": (), + "QPluginLoader.isLoaded": (), + "QPluginLoader.load": (), + "QPluginLoader.metaData": (), + "QPluginLoader.setFileName": ('str',), + "QPluginLoader.staticInstances": (), + "QPluginLoader.unload": (), + + # class PySide2.QtCore.QPoint: + "QPoint.__init__": [(), ('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPoint.__copy__": (), + "QPoint.__reduce__": (), + "QPoint.dotProduct": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QPoint.isNull": (), + "QPoint.manhattanLength": (), + "QPoint.setX": ('int',), + "QPoint.setY": ('int',), + "QPoint.toTuple": (), + "QPoint.x": (), + "QPoint.y": (), + + # class PySide2.QtCore.QPointF: + "QPointF.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPointF.__copy__": (), + "QPointF.__reduce__": (), + "QPointF.dotProduct": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QPointF.isNull": (), + "QPointF.manhattanLength": (), + "QPointF.setX": ('float',), + "QPointF.setY": ('float',), + "QPointF.toPoint": (), + "QPointF.toTuple": (), + "QPointF.x": (), + "QPointF.y": (), + + # class PySide2.QtCore.QProcess: + "QProcess.__init__": ('PySide2.QtCore.QObject',), + "QProcess.arguments": (), + "QProcess.atEnd": (), + "QProcess.bytesAvailable": (), + "QProcess.bytesToWrite": (), + "QProcess.canReadLine": (), + "QProcess.close": (), + "QProcess.closeReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.closeWriteChannel": (), + "QProcess.environment": (), + "QProcess.execute": [('str',), ('str', 'PySide2.support.signature.typing.List')], + "QProcess.exitCode": (), + "QProcess.exitStatus": (), + "QProcess.inputChannelMode": (), + "QProcess.isSequential": (), + "QProcess.kill": (), + "QProcess.nullDevice": (), + "QProcess.open": ('OpenMode',), + "QProcess.pid": (), + "QProcess.processChannelMode": (), + "QProcess.processEnvironment": (), + "QProcess.processId": (), + "QProcess.program": (), + "QProcess.readAllStandardError": (), + "QProcess.readAllStandardOutput": (), + "QProcess.readChannel": (), + "QProcess.readData": ('str', 'int'), + "QProcess.setArguments": ('PySide2.support.signature.typing.List',), + "QProcess.setEnvironment": ('PySide2.support.signature.typing.List',), + "QProcess.setInputChannelMode": ('PySide2.QtCore.QProcess.InputChannelMode',), + "QProcess.setProcessChannelMode": ('PySide2.QtCore.QProcess.ProcessChannelMode',), + "QProcess.setProcessEnvironment": ('PySide2.QtCore.QProcessEnvironment',), + "QProcess.setProcessState": ('PySide2.QtCore.QProcess.ProcessState',), + "QProcess.setProgram": ('str',), + "QProcess.setReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.setStandardErrorFile": ('str', 'OpenMode'), + "QProcess.setStandardInputFile": ('str',), + "QProcess.setStandardOutputFile": ('str', 'OpenMode'), + "QProcess.setStandardOutputProcess": ('PySide2.QtCore.QProcess',), + "QProcess.setWorkingDirectory": ('str',), + "QProcess.setupChildProcess": (), + "QProcess.start": [('OpenMode',), ('str', 'OpenMode'), ('str', 'PySide2.support.signature.typing.List', 'OpenMode')], + "QProcess.startDetached": [('str',), ('str', 'PySide2.support.signature.typing.List', 'str', 'int')], + "QProcess.state": (), + "QProcess.systemEnvironment": (), + "QProcess.terminate": (), + "QProcess.waitForBytesWritten": ('int',), + "QProcess.waitForFinished": ('int',), + "QProcess.waitForReadyRead": ('int',), + "QProcess.waitForStarted": ('int',), + "QProcess.workingDirectory": (), + "QProcess.writeData": ('str', 'int'), + + # class PySide2.QtCore.QProcessEnvironment: + "QProcessEnvironment.__init__": [(), ('PySide2.QtCore.QProcessEnvironment',)], + "QProcessEnvironment.__copy__": (), + "QProcessEnvironment.clear": (), + "QProcessEnvironment.contains": ('str',), + "QProcessEnvironment.insert": [('PySide2.QtCore.QProcessEnvironment',), ('str', 'str')], + "QProcessEnvironment.isEmpty": (), + "QProcessEnvironment.keys": (), + "QProcessEnvironment.remove": ('str',), + "QProcessEnvironment.swap": ('PySide2.QtCore.QProcessEnvironment',), + "QProcessEnvironment.systemEnvironment": (), + "QProcessEnvironment.toStringList": (), + "QProcessEnvironment.value": ('str', 'str'), + + # class PySide2.QtCore.QPropertyAnimation: + "QPropertyAnimation.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QPropertyAnimation.event": ('PySide2.QtCore.QEvent',), + "QPropertyAnimation.propertyName": (), + "QPropertyAnimation.setPropertyName": ('PySide2.QtCore.QByteArray',), + "QPropertyAnimation.setTargetObject": ('PySide2.QtCore.QObject',), + "QPropertyAnimation.targetObject": (), + "QPropertyAnimation.updateCurrentValue": ('PySide2.support.signature.typing.Any',), + "QPropertyAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QReadLocker: + "QReadLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QReadLocker.__enter__": (), + "QReadLocker.__exit__": ('object', 'object', 'object'), + "QReadLocker.readWriteLock": (), + "QReadLocker.relock": (), + "QReadLocker.unlock": (), + + # class PySide2.QtCore.QReadWriteLock: + "QReadWriteLock.__init__": ('PySide2.QtCore.QReadWriteLock.RecursionMode',), + "QReadWriteLock.lockForRead": (), + "QReadWriteLock.lockForWrite": (), + "QReadWriteLock.tryLockForRead": [(), ('int',)], + "QReadWriteLock.tryLockForWrite": [(), ('int',)], + "QReadWriteLock.unlock": (), + + # class PySide2.QtCore.QRect: + "QRect.__init__": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QSize'), ('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRect.__copy__": (), + "QRect.__reduce__": (), + "QRect.adjust": ('int', 'int', 'int', 'int'), + "QRect.adjusted": ('int', 'int', 'int', 'int'), + "QRect.bottom": (), + "QRect.bottomLeft": (), + "QRect.bottomRight": (), + "QRect.center": (), + "QRect.contains": [('PySide2.QtCore.QPoint', 'bool'), ('PySide2.QtCore.QRect', 'bool'), ('int', 'int'), ('int', 'int', 'bool')], + "QRect.getCoords": ('int', 'int', 'int', 'int'), + "QRect.getRect": ('int', 'int', 'int', 'int'), + "QRect.height": (), + "QRect.intersected": ('PySide2.QtCore.QRect',), + "QRect.intersects": ('PySide2.QtCore.QRect',), + "QRect.isEmpty": (), + "QRect.isNull": (), + "QRect.isValid": (), + "QRect.left": (), + "QRect.marginsAdded": ('PySide2.QtCore.QMargins',), + "QRect.marginsRemoved": ('PySide2.QtCore.QMargins',), + "QRect.moveBottom": ('int',), + "QRect.moveBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.moveCenter": ('PySide2.QtCore.QPoint',), + "QRect.moveLeft": ('int',), + "QRect.moveRight": ('int',), + "QRect.moveTo": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.moveTop": ('int',), + "QRect.moveTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveTopRight": ('PySide2.QtCore.QPoint',), + "QRect.normalized": (), + "QRect.right": (), + "QRect.setBottom": ('int',), + "QRect.setBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.setBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.setCoords": ('int', 'int', 'int', 'int'), + "QRect.setHeight": ('int',), + "QRect.setLeft": ('int',), + "QRect.setRect": ('int', 'int', 'int', 'int'), + "QRect.setRight": ('int',), + "QRect.setSize": ('PySide2.QtCore.QSize',), + "QRect.setTop": ('int',), + "QRect.setTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.setTopRight": ('PySide2.QtCore.QPoint',), + "QRect.setWidth": ('int',), + "QRect.setX": ('int',), + "QRect.setY": ('int',), + "QRect.size": (), + "QRect.top": (), + "QRect.topLeft": (), + "QRect.topRight": (), + "QRect.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.united": ('PySide2.QtCore.QRect',), + "QRect.width": (), + "QRect.x": (), + "QRect.y": (), + + # class PySide2.QtCore.QRectF: + "QRectF.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QSizeF'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QRectF.__copy__": (), + "QRectF.__reduce__": (), + "QRectF.adjust": ('float', 'float', 'float', 'float'), + "QRectF.adjusted": ('float', 'float', 'float', 'float'), + "QRectF.bottom": (), + "QRectF.bottomLeft": (), + "QRectF.bottomRight": (), + "QRectF.center": (), + "QRectF.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('float', 'float')], + "QRectF.getCoords": ('float', 'float', 'float', 'float'), + "QRectF.getRect": ('float', 'float', 'float', 'float'), + "QRectF.height": (), + "QRectF.intersected": ('PySide2.QtCore.QRectF',), + "QRectF.intersects": ('PySide2.QtCore.QRectF',), + "QRectF.isEmpty": (), + "QRectF.isNull": (), + "QRectF.isValid": (), + "QRectF.left": (), + "QRectF.marginsAdded": ('PySide2.QtCore.QMarginsF',), + "QRectF.marginsRemoved": ('PySide2.QtCore.QMarginsF',), + "QRectF.moveBottom": ('float',), + "QRectF.moveBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.moveCenter": ('PySide2.QtCore.QPointF',), + "QRectF.moveLeft": ('float',), + "QRectF.moveRight": ('float',), + "QRectF.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.moveTop": ('float',), + "QRectF.moveTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.normalized": (), + "QRectF.right": (), + "QRectF.setBottom": ('float',), + "QRectF.setBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.setCoords": ('float', 'float', 'float', 'float'), + "QRectF.setHeight": ('float',), + "QRectF.setLeft": ('float',), + "QRectF.setRect": ('float', 'float', 'float', 'float'), + "QRectF.setRight": ('float',), + "QRectF.setSize": ('PySide2.QtCore.QSizeF',), + "QRectF.setTop": ('float',), + "QRectF.setTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.setWidth": ('float',), + "QRectF.setX": ('float',), + "QRectF.setY": ('float',), + "QRectF.size": (), + "QRectF.toAlignedRect": (), + "QRectF.toRect": (), + "QRectF.top": (), + "QRectF.topLeft": (), + "QRectF.topRight": (), + "QRectF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.united": ('PySide2.QtCore.QRectF',), + "QRectF.width": (), + "QRectF.x": (), + "QRectF.y": (), + + # class PySide2.QtCore.QRegExp: + "QRegExp.__init__": [(), ('PySide2.QtCore.QRegExp',), ('str', 'PySide2.QtCore.Qt.CaseSensitivity', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QRegExp.__copy__": (), + "QRegExp.__reduce__": (), + "QRegExp.cap": ['int'], + "QRegExp.captureCount": (), + "QRegExp.capturedTexts": [], + "QRegExp.caseSensitivity": (), + "QRegExp.errorString": [], + "QRegExp.escape": ('str',), + "QRegExp.exactMatch": ('str',), + "QRegExp.indexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.isEmpty": (), + "QRegExp.isMinimal": (), + "QRegExp.isValid": (), + "QRegExp.lastIndexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.matchedLength": (), + "QRegExp.pattern": (), + "QRegExp.patternSyntax": (), + "QRegExp.pos": ['int'], + "QRegExp.replace": ('str', 'str'), + "QRegExp.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QRegExp.setMinimal": ('bool',), + "QRegExp.setPattern": ('str',), + "QRegExp.setPatternSyntax": ('PySide2.QtCore.QRegExp.PatternSyntax',), + "QRegExp.swap": ('PySide2.QtCore.QRegExp',), + + # class PySide2.QtCore.QResource: + "QResource.__init__": ('str', 'PySide2.QtCore.QLocale'), + "QResource.absoluteFilePath": (), + "QResource.addSearchPath": ('str',), + "QResource.children": (), + "QResource.data": (), + "QResource.fileName": (), + "QResource.isCompressed": (), + "QResource.isDir": (), + "QResource.isFile": (), + "QResource.isValid": (), + "QResource.locale": (), + "QResource.registerResource": ('str', 'str'), + "QResource.registerResourceData": ('PySide2.support.signature.typing.Union[str, int]', 'str'), + "QResource.searchPaths": (), + "QResource.setFileName": ('str',), + "QResource.setLocale": ('PySide2.QtCore.QLocale',), + "QResource.size": (), + "QResource.unregisterResource": ('str', 'str'), + "QResource.unregisterResourceData": ('PySide2.support.signature.typing.Union[str, int]', 'str'), + + # class PySide2.QtCore.QRunnable: + "QRunnable.__init__": (), + "QRunnable.autoDelete": (), + "QRunnable.run": (), + "QRunnable.setAutoDelete": ('bool',), + + # class PySide2.QtCore.QSaveFile: + "QSaveFile.__init__": [('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QSaveFile.cancelWriting": (), + "QSaveFile.close": (), + "QSaveFile.commit": (), + "QSaveFile.directWriteFallback": (), + "QSaveFile.fileName": (), + "QSaveFile.open": ('OpenMode',), + "QSaveFile.setDirectWriteFallback": ('bool',), + "QSaveFile.setFileName": ('str',), + "QSaveFile.writeData": ('str', 'int'), + + # class PySide2.QtCore.QSemaphore: + "QSemaphore.__init__": ('int',), + "QSemaphore.acquire": ('int',), + "QSemaphore.available": (), + "QSemaphore.release": ('int',), + "QSemaphore.tryAcquire": [('int',), ('int', 'int')], + + # class PySide2.QtCore.QSequentialAnimationGroup: + "QSequentialAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QSequentialAnimationGroup.addPause": ('int',), + "QSequentialAnimationGroup.currentAnimation": (), + "QSequentialAnimationGroup.duration": (), + "QSequentialAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QSequentialAnimationGroup.insertPause": ('int', 'int'), + "QSequentialAnimationGroup.updateCurrentTime": ('int',), + "QSequentialAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QSequentialAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QSettings: + "QSettings.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QObject'), ('str', 'str', 'PySide2.QtCore.QObject')], + "QSettings.allKeys": (), + "QSettings.applicationName": (), + "QSettings.beginGroup": ('str',), + "QSettings.beginReadArray": ('str',), + "QSettings.beginWriteArray": ('str', 'int'), + "QSettings.childGroups": (), + "QSettings.childKeys": (), + "QSettings.clear": (), + "QSettings.contains": ('str',), + "QSettings.defaultFormat": (), + "QSettings.endArray": (), + "QSettings.endGroup": (), + "QSettings.event": ('PySide2.QtCore.QEvent',), + "QSettings.fallbacksEnabled": (), + "QSettings.fileName": (), + "QSettings.format": (), + "QSettings.group": (), + "QSettings.iniCodec": (), + "QSettings.isWritable": (), + "QSettings.organizationName": (), + "QSettings.remove": ('str',), + "QSettings.scope": (), + "QSettings.setArrayIndex": ('int',), + "QSettings.setDefaultFormat": ('PySide2.QtCore.QSettings.Format',), + "QSettings.setFallbacksEnabled": ('bool',), + "QSettings.setIniCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QSettings.setPath": ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str'), + "QSettings.setValue": ('str', 'PySide2.support.signature.typing.Any'), + "QSettings.status": (), + "QSettings.sync": (), + "QSettings.value": ('str', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtCore.QSignalMapper: + "QSignalMapper.__init__": ('PySide2.QtCore.QObject',), + "QSignalMapper.map": [(), ('PySide2.QtCore.QObject',)], + "QSignalMapper.mapping": [('PySide2.QtCore.QObject',), ('int',), ('str',)], + "QSignalMapper.removeMappings": ('PySide2.QtCore.QObject',), + "QSignalMapper.setMapping": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + + # class PySide2.QtCore.QSignalTransition: + "QSignalTransition.__init__": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',), ('object', 'PySide2.QtCore.QState')], + "QSignalTransition.event": ('PySide2.QtCore.QEvent',), + "QSignalTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QSignalTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QSignalTransition.senderObject": (), + "QSignalTransition.setSenderObject": ('PySide2.QtCore.QObject',), + "QSignalTransition.setSignal": ('PySide2.QtCore.QByteArray',), + "QSignalTransition.signal": (), + + # class PySide2.QtCore.QSize: + "QSize.__init__": [(), ('PySide2.QtCore.QSize',), ('int', 'int')], + "QSize.__copy__": (), + "QSize.__reduce__": (), + "QSize.boundedTo": ('PySide2.QtCore.QSize',), + "QSize.expandedTo": ('PySide2.QtCore.QSize',), + "QSize.height": (), + "QSize.isEmpty": (), + "QSize.isNull": (), + "QSize.isValid": (), + "QSize.scale": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.setHeight": ('int',), + "QSize.setWidth": ('int',), + "QSize.toTuple": (), + "QSize.transpose": (), + "QSize.transposed": (), + "QSize.width": (), + + # class PySide2.QtCore.QSizeF: + "QSizeF.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QSizeF.__copy__": (), + "QSizeF.__reduce__": (), + "QSizeF.boundedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.expandedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.height": (), + "QSizeF.isEmpty": (), + "QSizeF.isNull": (), + "QSizeF.isValid": (), + "QSizeF.scale": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.scaled": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.setHeight": ('float',), + "QSizeF.setWidth": ('float',), + "QSizeF.toSize": (), + "QSizeF.toTuple": (), + "QSizeF.transpose": (), + "QSizeF.transposed": (), + "QSizeF.width": (), + + # class PySide2.QtCore.QSocketNotifier: + "QSocketNotifier.__init__": [('int', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject'), ('object', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject')], + "QSocketNotifier.event": ('PySide2.QtCore.QEvent',), + "QSocketNotifier.isEnabled": (), + "QSocketNotifier.setEnabled": ('bool',), + "QSocketNotifier.socket": (), + "QSocketNotifier.type": (), + + # class PySide2.QtCore.QSortFilterProxyModel: + "QSortFilterProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QSortFilterProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSortFilterProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.dynamicSortFilter": (), + "QSortFilterProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.filterAcceptsColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterAcceptsRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterCaseSensitivity": (), + "QSortFilterProxyModel.filterKeyColumn": (), + "QSortFilterProxyModel.filterRegExp": (), + "QSortFilterProxyModel.filterRole": (), + "QSortFilterProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSortFilterProxyModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.invalidate": (), + "QSortFilterProxyModel.invalidateFilter": (), + "QSortFilterProxyModel.isSortLocaleAware": (), + "QSortFilterProxyModel.lessThan": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.support.signature.typing.Any', 'int', 'MatchFlags'), + "QSortFilterProxyModel.mimeData": ('PySide2.support.signature.typing.List',), + "QSortFilterProxyModel.mimeTypes": (), + "QSortFilterProxyModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QSortFilterProxyModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QSortFilterProxyModel.setDynamicSortFilter": ('bool',), + "QSortFilterProxyModel.setFilterCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setFilterFixedString": ('str',), + "QSortFilterProxyModel.setFilterKeyColumn": ('int',), + "QSortFilterProxyModel.setFilterRegExp": [('PySide2.QtCore.QRegExp',), ('str',)], + "QSortFilterProxyModel.setFilterRole": ('int',), + "QSortFilterProxyModel.setFilterWildcard": ('str',), + "QSortFilterProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QSortFilterProxyModel.setSortCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setSortLocaleAware": ('bool',), + "QSortFilterProxyModel.setSortRole": ('int',), + "QSortFilterProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QSortFilterProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSortFilterProxyModel.sortCaseSensitivity": (), + "QSortFilterProxyModel.sortColumn": (), + "QSortFilterProxyModel.sortOrder": (), + "QSortFilterProxyModel.sortRole": (), + "QSortFilterProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QStandardPaths: + "QStandardPaths.writableLocation": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.displayName": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.enableTestMode": ('bool',), + "QStandardPaths.findExecutable": ('str', 'PySide2.support.signature.typing.List'), + "QStandardPaths.isTestModeEnabled": (), + "QStandardPaths.locate": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'LocateOptions'), + "QStandardPaths.locateAll": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'LocateOptions'), + "QStandardPaths.setTestModeEnabled": ('bool',), + "QStandardPaths.standardLocations": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + + # class PySide2.QtCore.QState: + "QState.__init__": [('PySide2.QtCore.QState',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QState')], + "QState.addTransition": [('PySide2.QtCore.QAbstractState',), ('PySide2.QtCore.QAbstractTransition',), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QAbstractState'), ('object', 'PySide2.QtCore.QAbstractState')], + "QState.assignProperty": ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Any'), + "QState.childMode": (), + "QState.errorState": (), + "QState.event": ('PySide2.QtCore.QEvent',), + "QState.initialState": (), + "QState.onEntry": ('PySide2.QtCore.QEvent',), + "QState.onExit": ('PySide2.QtCore.QEvent',), + "QState.removeTransition": ('PySide2.QtCore.QAbstractTransition',), + "QState.setChildMode": ('PySide2.QtCore.QState.ChildMode',), + "QState.setErrorState": ('PySide2.QtCore.QAbstractState',), + "QState.setInitialState": ('PySide2.QtCore.QAbstractState',), + "QState.transitions": (), + + # class PySide2.QtCore.QStateMachine: + "QStateMachine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QObject')], + "QStateMachine.addDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.addState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.beginMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.beginSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.cancelDelayedEvent": ('int',), + "QStateMachine.clearError": (), + "QStateMachine.configuration": [], + "QStateMachine.defaultAnimations": (), + "QStateMachine.endMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.endSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.error": (), + "QStateMachine.errorString": (), + "QStateMachine.event": ('PySide2.QtCore.QEvent',), + "QStateMachine.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStateMachine.globalRestorePolicy": (), + "QStateMachine.isAnimated": (), + "QStateMachine.isRunning": (), + "QStateMachine.onEntry": ('PySide2.QtCore.QEvent',), + "QStateMachine.onExit": ('PySide2.QtCore.QEvent',), + "QStateMachine.postDelayedEvent": ('PySide2.QtCore.QEvent', 'int'), + "QStateMachine.postEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QStateMachine.EventPriority'), + "QStateMachine.removeDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.removeState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.setAnimated": ('bool',), + "QStateMachine.setGlobalRestorePolicy": ('PySide2.QtCore.QState.RestorePolicy',), + "QStateMachine.setRunning": ('bool',), + "QStateMachine.start": (), + "QStateMachine.stop": (), + + # class PySide2.QtCore.QStorageInfo: + "QStorageInfo.__init__": [(), ('PySide2.QtCore.QDir',), ('PySide2.QtCore.QStorageInfo',), ('str',)], + "QStorageInfo.__copy__": (), + "QStorageInfo.blockSize": (), + "QStorageInfo.bytesAvailable": (), + "QStorageInfo.bytesFree": (), + "QStorageInfo.bytesTotal": (), + "QStorageInfo.device": (), + "QStorageInfo.displayName": (), + "QStorageInfo.fileSystemType": (), + "QStorageInfo.isReadOnly": (), + "QStorageInfo.isReady": (), + "QStorageInfo.isRoot": (), + "QStorageInfo.isValid": (), + "QStorageInfo.mountedVolumes": (), + "QStorageInfo.name": (), + "QStorageInfo.refresh": (), + "QStorageInfo.root": (), + "QStorageInfo.rootPath": (), + "QStorageInfo.setPath": ('str',), + "QStorageInfo.swap": ('PySide2.QtCore.QStorageInfo',), + + # class PySide2.QtCore.QSysInfo: + "QSysInfo.__init__": (), + "QSysInfo.buildAbi": (), + "QSysInfo.buildCpuArchitecture": (), + "QSysInfo.currentCpuArchitecture": (), + "QSysInfo.kernelType": (), + "QSysInfo.kernelVersion": (), + "QSysInfo.macVersion": (), + "QSysInfo.machineHostName": (), + "QSysInfo.prettyProductName": (), + "QSysInfo.productType": (), + "QSysInfo.productVersion": (), + + # class PySide2.QtCore.QSystemSemaphore: + "QSystemSemaphore.__init__": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + "QSystemSemaphore.acquire": (), + "QSystemSemaphore.error": (), + "QSystemSemaphore.errorString": (), + "QSystemSemaphore.key": (), + "QSystemSemaphore.release": ('int',), + "QSystemSemaphore.setKey": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + + # class PySide2.QtCore.QTemporaryDir: + "QTemporaryDir.__init__": [(), ('str',)], + "QTemporaryDir.autoRemove": (), + "QTemporaryDir.errorString": (), + "QTemporaryDir.isValid": (), + "QTemporaryDir.path": (), + "QTemporaryDir.remove": (), + "QTemporaryDir.setAutoRemove": ('bool',), + + # class PySide2.QtCore.QTemporaryFile: + "QTemporaryFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QTemporaryFile.autoRemove": (), + "QTemporaryFile.createLocalFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.createNativeFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.fileName": (), + "QTemporaryFile.fileTemplate": (), + "QTemporaryFile.open": [(), ('OpenMode',)], + "QTemporaryFile.setAutoRemove": ('bool',), + "QTemporaryFile.setFileTemplate": ('str',), + + # class PySide2.QtCore.QTextBoundaryFinder: + "QTextBoundaryFinder.__init__": [(), ('PySide2.QtCore.QTextBoundaryFinder',), ('PySide2.QtCore.QTextBoundaryFinder.BoundaryType', 'str')], + "QTextBoundaryFinder.__copy__": (), + "QTextBoundaryFinder.boundaryReasons": (), + "QTextBoundaryFinder.isAtBoundary": (), + "QTextBoundaryFinder.isValid": (), + "QTextBoundaryFinder.position": (), + "QTextBoundaryFinder.setPosition": ('int',), + "QTextBoundaryFinder.string": (), + "QTextBoundaryFinder.toEnd": (), + "QTextBoundaryFinder.toNextBoundary": (), + "QTextBoundaryFinder.toPreviousBoundary": (), + "QTextBoundaryFinder.toStart": (), + "QTextBoundaryFinder.type": (), + + # class PySide2.QtCore.QTextCodec: + "QTextCodec.__init__": (), + "QTextCodec.aliases": (), + "QTextCodec.availableCodecs": (), + "QTextCodec.availableMibs": (), + "QTextCodec.canEncode": [('PySide2.support.signature.typing.Union[str, int]',), ('str',)], + "QTextCodec.codecForHtml": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.codecForLocale": (), + "QTextCodec.codecForMib": ('int',), + "QTextCodec.codecForName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QTextCodec.codecForUtfText": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.convertToUnicode": ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState'), + "QTextCodec.fromUnicode": ('str',), + "QTextCodec.makeDecoder": ('ConversionFlags',), + "QTextCodec.makeEncoder": ('ConversionFlags',), + "QTextCodec.mibEnum": (), + "QTextCodec.name": (), + "QTextCodec.setCodecForLocale": ('PySide2.QtCore.QTextCodec',), + "QTextCodec.toUnicode": [('PySide2.QtCore.QByteArray',), ('str',), ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState')], + + # class PySide2.QtCore.QTextDecoder: + "QTextDecoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'ConversionFlags')], + "QTextDecoder.hasFailure": (), + "QTextDecoder.toUnicode": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QTextEncoder: + "QTextEncoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'ConversionFlags')], + "QTextEncoder.fromUnicode": ('str',), + "QTextEncoder.hasFailure": (), + + # class PySide2.QtCore.QTextStream: + "QTextStream.__init__": [(), ('PySide2.QtCore.QByteArray', 'OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QTextStream.atEnd": (), + "QTextStream.autoDetectUnicode": (), + "QTextStream.codec": (), + "QTextStream.device": (), + "QTextStream.fieldAlignment": (), + "QTextStream.fieldWidth": (), + "QTextStream.flush": (), + "QTextStream.generateByteOrderMark": (), + "QTextStream.integerBase": (), + "QTextStream.locale": (), + "QTextStream.numberFlags": (), + "QTextStream.padChar": (), + "QTextStream.pos": (), + "QTextStream.read": ('int',), + "QTextStream.readAll": (), + "QTextStream.readLine": ('int',), + "QTextStream.realNumberNotation": (), + "QTextStream.realNumberPrecision": (), + "QTextStream.reset": (), + "QTextStream.resetStatus": (), + "QTextStream.seek": ('int',), + "QTextStream.setAutoDetectUnicode": ('bool',), + "QTextStream.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QTextStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextStream.setFieldAlignment": ('PySide2.QtCore.QTextStream.FieldAlignment',), + "QTextStream.setFieldWidth": ('int',), + "QTextStream.setGenerateByteOrderMark": ('bool',), + "QTextStream.setIntegerBase": ('int',), + "QTextStream.setLocale": ('PySide2.QtCore.QLocale',), + "QTextStream.setNumberFlags": ('NumberFlags',), + "QTextStream.setPadChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QTextStream.setRealNumberNotation": ('PySide2.QtCore.QTextStream.RealNumberNotation',), + "QTextStream.setRealNumberPrecision": ('int',), + "QTextStream.setStatus": ('PySide2.QtCore.QTextStream.Status',), + "QTextStream.skipWhiteSpace": (), + "QTextStream.status": (), + "QTextStream.string": (), + + # class PySide2.QtCore.QTextStreamManipulator: + "QTextStreamManipulator.exec_": ('PySide2.QtCore.QTextStream',), + "QTextStreamManipulator.__copy__": (), + + # class PySide2.QtCore.QThread: + "QThread.__init__": ('PySide2.QtCore.QObject',), + "QThread.currentThread": (), + "QThread.event": ('PySide2.QtCore.QEvent',), + "QThread.eventDispatcher": (), + "QThread.exec_": (), + "QThread.exit": ('int',), + "QThread.idealThreadCount": (), + "QThread.isFinished": (), + "QThread.isInterruptionRequested": (), + "QThread.isRunning": (), + "QThread.loopLevel": (), + "QThread.msleep": ('int',), + "QThread.priority": (), + "QThread.quit": (), + "QThread.requestInterruption": (), + "QThread.run": (), + "QThread.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QThread.setPriority": ('PySide2.QtCore.QThread.Priority',), + "QThread.setStackSize": ('int',), + "QThread.setTerminationEnabled": ('bool',), + "QThread.sleep": ('int',), + "QThread.stackSize": (), + "QThread.start": ('PySide2.QtCore.QThread.Priority',), + "QThread.terminate": (), + "QThread.usleep": ('int',), + "QThread.wait": ('int',), + "QThread.yieldCurrentThread": (), + + # class PySide2.QtCore.QThreadPool: + "QThreadPool.__init__": ('PySide2.QtCore.QObject',), + "QThreadPool.activeThreadCount": (), + "QThreadPool.cancel": ('PySide2.QtCore.QRunnable',), + "QThreadPool.clear": (), + "QThreadPool.expiryTimeout": (), + "QThreadPool.globalInstance": (), + "QThreadPool.maxThreadCount": (), + "QThreadPool.releaseThread": (), + "QThreadPool.reserveThread": (), + "QThreadPool.setExpiryTimeout": ('int',), + "QThreadPool.setMaxThreadCount": ('int',), + "QThreadPool.start": ('PySide2.QtCore.QRunnable', 'int'), + "QThreadPool.tryStart": ('PySide2.QtCore.QRunnable',), + "QThreadPool.waitForDone": ('int',), + + # class PySide2.QtCore.QTime: + "QTime.__init__": [(), ('PySide2.QtCore.QTime',), ('int', 'int', 'int', 'int')], + "QTime.__copy__": (), + "QTime.__reduce__": (), + "QTime.addMSecs": ('int',), + "QTime.addSecs": ('int',), + "QTime.currentTime": (), + "QTime.elapsed": (), + "QTime.fromMSecsSinceStartOfDay": ('int',), + "QTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QTime.hour": (), + "QTime.isNull": (), + "QTime.isValid": [(), ('int', 'int', 'int', 'int')], + "QTime.minute": (), + "QTime.msec": (), + "QTime.msecsSinceStartOfDay": (), + "QTime.msecsTo": ('PySide2.QtCore.QTime',), + "QTime.restart": (), + "QTime.second": (), + "QTime.secsTo": ('PySide2.QtCore.QTime',), + "QTime.setHMS": ('int', 'int', 'int', 'int'), + "QTime.start": (), + "QTime.toPython": (), + "QTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + + # class PySide2.QtCore.QTimeLine: + "QTimeLine.__init__": ('int', 'PySide2.QtCore.QObject'), + "QTimeLine.currentFrame": (), + "QTimeLine.currentTime": (), + "QTimeLine.currentValue": (), + "QTimeLine.curveShape": (), + "QTimeLine.direction": (), + "QTimeLine.duration": (), + "QTimeLine.easingCurve": (), + "QTimeLine.endFrame": (), + "QTimeLine.frameForTime": ('int',), + "QTimeLine.loopCount": (), + "QTimeLine.resume": (), + "QTimeLine.setCurrentTime": ('int',), + "QTimeLine.setCurveShape": ('PySide2.QtCore.QTimeLine.CurveShape',), + "QTimeLine.setDirection": ('PySide2.QtCore.QTimeLine.Direction',), + "QTimeLine.setDuration": ('int',), + "QTimeLine.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QTimeLine.setEndFrame": ('int',), + "QTimeLine.setFrameRange": ('int', 'int'), + "QTimeLine.setLoopCount": ('int',), + "QTimeLine.setPaused": ('bool',), + "QTimeLine.setStartFrame": ('int',), + "QTimeLine.setUpdateInterval": ('int',), + "QTimeLine.start": (), + "QTimeLine.startFrame": (), + "QTimeLine.state": (), + "QTimeLine.stop": (), + "QTimeLine.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimeLine.toggleDirection": (), + "QTimeLine.updateInterval": (), + "QTimeLine.valueForTime": ('int',), + + # class PySide2.QtCore.QTimeZone: + "QTimeZone.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'int', 'str', 'str', 'PySide2.QtCore.QLocale.Country', 'str'), ('PySide2.QtCore.QTimeZone',), ('int',)], + "QTimeZone.__copy__": (), + "QTimeZone.abbreviation": ('PySide2.QtCore.QDateTime',), + "QTimeZone.availableTimeZoneIds": [(), ('PySide2.QtCore.QLocale.Country',), ('int',)], + "QTimeZone.comment": (), + "QTimeZone.country": (), + "QTimeZone.daylightTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.displayName": [('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale'), ('PySide2.QtCore.QTimeZone.TimeType', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale')], + "QTimeZone.hasDaylightTime": (), + "QTimeZone.hasTransitions": (), + "QTimeZone.ianaIdToWindowsId": ('PySide2.QtCore.QByteArray',), + "QTimeZone.id": (), + "QTimeZone.isDaylightTime": ('PySide2.QtCore.QDateTime',), + "QTimeZone.isTimeZoneIdAvailable": ('PySide2.QtCore.QByteArray',), + "QTimeZone.isValid": (), + "QTimeZone.nextTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetData": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetFromUtc": ('PySide2.QtCore.QDateTime',), + "QTimeZone.previousTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.standardTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.swap": ('PySide2.QtCore.QTimeZone',), + "QTimeZone.systemTimeZone": (), + "QTimeZone.systemTimeZoneId": (), + "QTimeZone.transitions": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QTimeZone.utc": (), + "QTimeZone.windowsIdToDefaultIanaId": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + "QTimeZone.windowsIdToIanaIds": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + + # class PySide2.QtCore.QTimer: + "QTimer.__init__": ('PySide2.QtCore.QObject',), + "QTimer.interval": (), + "QTimer.isActive": (), + "QTimer.isSingleShot": (), + "QTimer.killTimer": ('int',), + "QTimer.remainingTime": (), + "QTimer.setInterval": ('int',), + "QTimer.setSingleShot": ('bool',), + "QTimer.setTimerType": ('PySide2.QtCore.Qt.TimerType',), + "QTimer.singleShot": [('int', 'PySide2.QtCore.QObject', 'str'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject', 'str'), ('int', 'PySide2.support.signature.typing.Callable')], + "QTimer.start": [(), ('int',)], + "QTimer.stop": (), + "QTimer.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimer.timerId": (), + "QTimer.timerType": (), + + # class PySide2.QtCore.QTimerEvent: + "QTimerEvent.__init__": ('int',), + "QTimerEvent.timerId": (), + + # class PySide2.QtCore.QTranslator: + "QTranslator.__init__": ('PySide2.QtCore.QObject',), + "QTranslator.isEmpty": (), + "QTranslator.load": [('PySide2.QtCore.QLocale', 'str', 'str', 'str', 'str'), ('PySide2.support.signature.typing.Union[str, int]', 'int', 'str'), ('str', 'str', 'str', 'str')], + "QTranslator.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QUrl: + "QUrl.__init__": [(), ('PySide2.QtCore.QUrl',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.__copy__": (), + "QUrl.__reduce__": (), + "QUrl.adjusted": ('FormattingOptions',), + "QUrl.authority": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.clear": (), + "QUrl.errorString": (), + "QUrl.fileName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fragment": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fromAce": ('PySide2.QtCore.QByteArray',), + "QUrl.fromEncoded": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromLocalFile": ('str',), + "QUrl.fromPercentEncoding": ('PySide2.QtCore.QByteArray',), + "QUrl.fromStringList": ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromUserInput": [('str',), ('str', 'str', 'UserInputResolutionOptions')], + "QUrl.hasFragment": (), + "QUrl.hasQuery": (), + "QUrl.host": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.idnWhitelist": (), + "QUrl.isEmpty": (), + "QUrl.isLocalFile": (), + "QUrl.isParentOf": ('PySide2.QtCore.QUrl',), + "QUrl.isRelative": (), + "QUrl.isValid": (), + "QUrl.matches": ('PySide2.QtCore.QUrl', 'FormattingOptions'), + "QUrl.password": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.path": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.port": ('int',), + "QUrl.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.resolved": ('PySide2.QtCore.QUrl',), + "QUrl.scheme": (), + "QUrl.setAuthority": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setFragment": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setHost": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setIdnWhitelist": ('PySide2.support.signature.typing.List',), + "QUrl.setPassword": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPath": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPort": ('int',), + "QUrl.setQuery": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setScheme": ('str',), + "QUrl.setUrl": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserInfo": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserName": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.swap": ('PySide2.QtCore.QUrl',), + "QUrl.toAce": ('str',), + "QUrl.toDisplayString": ('FormattingOptions',), + "QUrl.toEncoded": ('FormattingOptions',), + "QUrl.toLocalFile": (), + "QUrl.toPercentEncoding": ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QUrl.toString": ('FormattingOptions',), + "QUrl.toStringList": ('list', 'FormattingOptions'), + "QUrl.topLevelDomain": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.url": ('FormattingOptions',), + "QUrl.userInfo": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.userName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QVariantAnimation: + "QVariantAnimation.__init__": ('PySide2.QtCore.QObject',), + "QVariantAnimation.currentValue": (), + "QVariantAnimation.duration": (), + "QVariantAnimation.easingCurve": (), + "QVariantAnimation.endValue": (), + "QVariantAnimation.event": ('PySide2.QtCore.QEvent',), + "QVariantAnimation.interpolated": ('PySide2.support.signature.typing.Any', 'PySide2.support.signature.typing.Any', 'float'), + "QVariantAnimation.keyValueAt": ('float',), + "QVariantAnimation.keyValues": (), + "QVariantAnimation.setDuration": ('int',), + "QVariantAnimation.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QVariantAnimation.setEndValue": ('PySide2.support.signature.typing.Any',), + "QVariantAnimation.setKeyValueAt": ('float', 'PySide2.support.signature.typing.Any'), + "QVariantAnimation.setKeyValues": ('list',), + "QVariantAnimation.setStartValue": ('PySide2.support.signature.typing.Any',), + "QVariantAnimation.startValue": (), + "QVariantAnimation.updateCurrentTime": ('int',), + "QVariantAnimation.updateCurrentValue": ('PySide2.support.signature.typing.Any',), + "QVariantAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QWaitCondition: + "QWaitCondition.__init__": (), + "QWaitCondition.wait": [('PySide2.QtCore.QMutex', 'int'), ('PySide2.QtCore.QReadWriteLock', 'int')], + "QWaitCondition.wakeAll": (), + "QWaitCondition.wakeOne": (), + + # class PySide2.QtCore.QWriteLocker: + "QWriteLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QWriteLocker.__enter__": (), + "QWriteLocker.__exit__": ('object', 'object', 'object'), + "QWriteLocker.readWriteLock": (), + "QWriteLocker.relock": (), + "QWriteLocker.unlock": (), + + # class PySide2.QtCore.QXmlStreamAttribute: + "QXmlStreamAttribute.__init__": [(), ('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttribute.__copy__": (), + "QXmlStreamAttribute.isDefault": (), + "QXmlStreamAttribute.name": (), + "QXmlStreamAttribute.namespaceUri": (), + "QXmlStreamAttribute.prefix": (), + "QXmlStreamAttribute.qualifiedName": (), + "QXmlStreamAttribute.value": (), + + # class PySide2.QtCore.QXmlStreamAttributes: + "QXmlStreamAttributes.__init__": [(), ('PySide2.QtCore.QXmlStreamAttributes',)], + "QXmlStreamAttributes.__copy__": (), + "QXmlStreamAttributes.append": [('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttributes.at": ('int',), + "QXmlStreamAttributes.capacity": (), + "QXmlStreamAttributes.clear": (), + "QXmlStreamAttributes.constData": (), + "QXmlStreamAttributes.constFirst": (), + "QXmlStreamAttributes.constLast": (), + "QXmlStreamAttributes.contains": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.count": [(), ('PySide2.QtCore.QXmlStreamAttribute',)], + "QXmlStreamAttributes.data": [], + "QXmlStreamAttributes.empty": (), + "QXmlStreamAttributes.endsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.fill": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.first": [], + "QXmlStreamAttributes.front": (), + "QXmlStreamAttributes.hasAttribute": [('str',), ('str', 'str')], + "QXmlStreamAttributes.indexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.insert": [('int', 'PySide2.QtCore.QXmlStreamAttribute'), ('int', 'int', 'PySide2.QtCore.QXmlStreamAttribute')], + "QXmlStreamAttributes.isEmpty": (), + "QXmlStreamAttributes.isSharedWith": ('list',), + "QXmlStreamAttributes.last": [], + "QXmlStreamAttributes.lastIndexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.length": (), + "QXmlStreamAttributes.mid": ('int', 'int'), + "QXmlStreamAttributes.move": ('int', 'int'), + "QXmlStreamAttributes.prepend": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.remove": [('int',), ('int', 'int')], + "QXmlStreamAttributes.removeAll": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.removeAt": ('int',), + "QXmlStreamAttributes.removeFirst": (), + "QXmlStreamAttributes.removeLast": (), + "QXmlStreamAttributes.removeOne": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.replace": ('int', 'PySide2.QtCore.QXmlStreamAttribute'), + "QXmlStreamAttributes.reserve": ('int',), + "QXmlStreamAttributes.resize": ('int',), + "QXmlStreamAttributes.setSharable": ('bool',), + "QXmlStreamAttributes.size": (), + "QXmlStreamAttributes.squeeze": (), + "QXmlStreamAttributes.startsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.swap": ('list',), + "QXmlStreamAttributes.takeAt": ('int',), + "QXmlStreamAttributes.takeFirst": (), + "QXmlStreamAttributes.takeLast": (), + "QXmlStreamAttributes.value": [('str',), ('str', 'str')], + + # class PySide2.QtCore.QXmlStreamEntityDeclaration: + "QXmlStreamEntityDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamEntityDeclaration',)], + "QXmlStreamEntityDeclaration.__copy__": (), + "QXmlStreamEntityDeclaration.name": (), + "QXmlStreamEntityDeclaration.notationName": (), + "QXmlStreamEntityDeclaration.publicId": (), + "QXmlStreamEntityDeclaration.systemId": (), + "QXmlStreamEntityDeclaration.value": (), + + # class PySide2.QtCore.QXmlStreamEntityResolver: + "QXmlStreamEntityResolver.__init__": (), + "QXmlStreamEntityResolver.resolveEntity": ('str', 'str'), + "QXmlStreamEntityResolver.resolveUndeclaredEntity": ('str',), + + # class PySide2.QtCore.QXmlStreamNamespaceDeclaration: + "QXmlStreamNamespaceDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), ('str', 'str')], + "QXmlStreamNamespaceDeclaration.__copy__": (), + "QXmlStreamNamespaceDeclaration.namespaceUri": (), + "QXmlStreamNamespaceDeclaration.prefix": (), + + # class PySide2.QtCore.QXmlStreamNotationDeclaration: + "QXmlStreamNotationDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNotationDeclaration',)], + "QXmlStreamNotationDeclaration.__copy__": (), + "QXmlStreamNotationDeclaration.name": (), + "QXmlStreamNotationDeclaration.publicId": (), + "QXmlStreamNotationDeclaration.systemId": (), + + # class PySide2.QtCore.QXmlStreamReader: + "QXmlStreamReader.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str',)], + "QXmlStreamReader.addData": [('PySide2.QtCore.QByteArray',), ('str',)], + "QXmlStreamReader.addExtraNamespaceDeclaration": ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), + "QXmlStreamReader.addExtraNamespaceDeclarations": ('list',), + "QXmlStreamReader.atEnd": (), + "QXmlStreamReader.attributes": (), + "QXmlStreamReader.characterOffset": (), + "QXmlStreamReader.clear": (), + "QXmlStreamReader.columnNumber": (), + "QXmlStreamReader.device": (), + "QXmlStreamReader.documentEncoding": (), + "QXmlStreamReader.documentVersion": (), + "QXmlStreamReader.dtdName": (), + "QXmlStreamReader.dtdPublicId": (), + "QXmlStreamReader.dtdSystemId": (), + "QXmlStreamReader.entityDeclarations": (), + "QXmlStreamReader.entityResolver": (), + "QXmlStreamReader.error": (), + "QXmlStreamReader.errorString": (), + "QXmlStreamReader.hasError": (), + "QXmlStreamReader.isCDATA": (), + "QXmlStreamReader.isCharacters": (), + "QXmlStreamReader.isComment": (), + "QXmlStreamReader.isDTD": (), + "QXmlStreamReader.isEndDocument": (), + "QXmlStreamReader.isEndElement": (), + "QXmlStreamReader.isEntityReference": (), + "QXmlStreamReader.isProcessingInstruction": (), + "QXmlStreamReader.isStandaloneDocument": (), + "QXmlStreamReader.isStartDocument": (), + "QXmlStreamReader.isStartElement": (), + "QXmlStreamReader.isWhitespace": (), + "QXmlStreamReader.lineNumber": (), + "QXmlStreamReader.name": (), + "QXmlStreamReader.namespaceDeclarations": (), + "QXmlStreamReader.namespaceProcessing": (), + "QXmlStreamReader.namespaceUri": (), + "QXmlStreamReader.notationDeclarations": (), + "QXmlStreamReader.prefix": (), + "QXmlStreamReader.processingInstructionData": (), + "QXmlStreamReader.processingInstructionTarget": (), + "QXmlStreamReader.qualifiedName": (), + "QXmlStreamReader.raiseError": ('str',), + "QXmlStreamReader.readElementText": ('PySide2.QtCore.QXmlStreamReader.ReadElementTextBehaviour',), + "QXmlStreamReader.readNext": (), + "QXmlStreamReader.readNextStartElement": (), + "QXmlStreamReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamReader.setEntityResolver": ('PySide2.QtCore.QXmlStreamEntityResolver',), + "QXmlStreamReader.setNamespaceProcessing": ('bool',), + "QXmlStreamReader.skipCurrentElement": (), + "QXmlStreamReader.text": (), + "QXmlStreamReader.tokenString": (), + "QXmlStreamReader.tokenType": (), + + # class PySide2.QtCore.QXmlStreamWriter: + "QXmlStreamWriter.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QXmlStreamWriter.autoFormatting": (), + "QXmlStreamWriter.autoFormattingIndent": (), + "QXmlStreamWriter.codec": (), + "QXmlStreamWriter.device": (), + "QXmlStreamWriter.hasError": (), + "QXmlStreamWriter.setAutoFormatting": ('bool',), + "QXmlStreamWriter.setAutoFormattingIndent": ('int',), + "QXmlStreamWriter.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QXmlStreamWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamWriter.writeAttribute": [('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamWriter.writeAttributes": ('PySide2.QtCore.QXmlStreamAttributes',), + "QXmlStreamWriter.writeCDATA": ('str',), + "QXmlStreamWriter.writeCharacters": ('str',), + "QXmlStreamWriter.writeComment": ('str',), + "QXmlStreamWriter.writeCurrentToken": ('PySide2.QtCore.QXmlStreamReader',), + "QXmlStreamWriter.writeDTD": ('str',), + "QXmlStreamWriter.writeDefaultNamespace": ('str',), + "QXmlStreamWriter.writeEmptyElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeEndDocument": (), + "QXmlStreamWriter.writeEndElement": (), + "QXmlStreamWriter.writeEntityReference": ('str',), + "QXmlStreamWriter.writeNamespace": ('str', 'str'), + "QXmlStreamWriter.writeProcessingInstruction": ('str', 'str'), + "QXmlStreamWriter.writeStartDocument": [(), ('str',), ('str', 'bool')], + "QXmlStreamWriter.writeStartElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeTextElement": [('str', 'str'), ('str', 'str', 'str')], + + # class PySide2.QtCore.Qt: + "Qt.qt_getEnumName": [('Alignment',), ('DockWidgetAreas',), ('DropActions',), ('Edges',), ('ImageConversionFlags',), ('InputMethodHints',), ('InputMethodQueries',), ('ItemFlags',), ('KeyboardModifiers',), ('MatchFlags',), ('MouseButtons',), ('Orientations',), ('PySide2.QtCore.Qt.ApplicationAttribute',), ('PySide2.QtCore.Qt.ApplicationState',), ('PySide2.QtCore.Qt.ArrowType',), ('PySide2.QtCore.Qt.AspectRatioMode',), ('PySide2.QtCore.Qt.Axis',), ('PySide2.QtCore.Qt.BGMode',), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.CaseSensitivity',), ('PySide2.QtCore.Qt.CheckState',), ('PySide2.QtCore.Qt.ClipOperation',), ('PySide2.QtCore.Qt.ConnectionType',), ('PySide2.QtCore.Qt.ContextMenuPolicy',), ('PySide2.QtCore.Qt.Corner',), ('PySide2.QtCore.Qt.CursorMoveStyle',), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtCore.Qt.DateFormat',), ('PySide2.QtCore.Qt.DayOfWeek',), ('PySide2.QtCore.Qt.DockWidgetArea',), ('PySide2.QtCore.Qt.DropAction',), ('PySide2.QtCore.Qt.Edge',), ('PySide2.QtCore.Qt.EnterKeyType',), ('PySide2.QtCore.Qt.FillRule',), ('PySide2.QtCore.Qt.FocusPolicy',), ('PySide2.QtCore.Qt.FocusReason',), ('PySide2.QtCore.Qt.GestureState',), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtCore.Qt.InputMethodHint',), ('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.ItemDataRole',), ('PySide2.QtCore.Qt.ItemSelectionMode',), ('PySide2.QtCore.Qt.ItemSelectionOperation',), ('PySide2.QtCore.Qt.Key',), ('PySide2.QtCore.Qt.LayoutDirection',), ('PySide2.QtCore.Qt.MaskMode',), ('PySide2.QtCore.Qt.MouseEventFlag',), ('PySide2.QtCore.Qt.MouseEventSource',), ('PySide2.QtCore.Qt.NativeGestureType',), ('PySide2.QtCore.Qt.Orientation',), ('PySide2.QtCore.Qt.PenCapStyle',), ('PySide2.QtCore.Qt.PenJoinStyle',), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtCore.Qt.ScreenOrientation',), ('PySide2.QtCore.Qt.ScrollBarPolicy',), ('PySide2.QtCore.Qt.ScrollPhase',), ('PySide2.QtCore.Qt.ShortcutContext',), ('PySide2.QtCore.Qt.SizeHint',), ('PySide2.QtCore.Qt.SizeMode',), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtCore.Qt.TabFocusBehavior',), ('PySide2.QtCore.Qt.TextElideMode',), ('PySide2.QtCore.Qt.TextFormat',), ('PySide2.QtCore.Qt.TextInteractionFlag',), ('PySide2.QtCore.Qt.TimeSpec',), ('PySide2.QtCore.Qt.TimerType',), ('PySide2.QtCore.Qt.ToolBarArea',), ('PySide2.QtCore.Qt.ToolButtonStyle',), ('PySide2.QtCore.Qt.TransformationMode',), ('PySide2.QtCore.Qt.WidgetAttribute',), ('PySide2.QtCore.Qt.WindowModality',), ('PySide2.QtCore.Qt.WindowState',), ('PySide2.QtCore.Qt.WindowType',), ('ScreenOrientations',), ('TextInteractionFlags',), ('ToolBarAreas',), ('TouchPointStates',), ('WindowFlags',), ('WindowStates',)], + "Qt.qt_getEnumMetaObject": [('Alignment',), ('DockWidgetAreas',), ('DropActions',), ('Edges',), ('ImageConversionFlags',), ('InputMethodHints',), ('InputMethodQueries',), ('ItemFlags',), ('KeyboardModifiers',), ('MatchFlags',), ('MouseButtons',), ('Orientations',), ('PySide2.QtCore.Qt.ApplicationAttribute',), ('PySide2.QtCore.Qt.ApplicationState',), ('PySide2.QtCore.Qt.ArrowType',), ('PySide2.QtCore.Qt.AspectRatioMode',), ('PySide2.QtCore.Qt.Axis',), ('PySide2.QtCore.Qt.BGMode',), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.CaseSensitivity',), ('PySide2.QtCore.Qt.CheckState',), ('PySide2.QtCore.Qt.ClipOperation',), ('PySide2.QtCore.Qt.ConnectionType',), ('PySide2.QtCore.Qt.ContextMenuPolicy',), ('PySide2.QtCore.Qt.Corner',), ('PySide2.QtCore.Qt.CursorMoveStyle',), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtCore.Qt.DateFormat',), ('PySide2.QtCore.Qt.DayOfWeek',), ('PySide2.QtCore.Qt.DockWidgetArea',), ('PySide2.QtCore.Qt.DropAction',), ('PySide2.QtCore.Qt.Edge',), ('PySide2.QtCore.Qt.EnterKeyType',), ('PySide2.QtCore.Qt.FillRule',), ('PySide2.QtCore.Qt.FocusPolicy',), ('PySide2.QtCore.Qt.FocusReason',), ('PySide2.QtCore.Qt.GestureState',), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtCore.Qt.InputMethodHint',), ('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.ItemDataRole',), ('PySide2.QtCore.Qt.ItemSelectionMode',), ('PySide2.QtCore.Qt.ItemSelectionOperation',), ('PySide2.QtCore.Qt.Key',), ('PySide2.QtCore.Qt.LayoutDirection',), ('PySide2.QtCore.Qt.MaskMode',), ('PySide2.QtCore.Qt.MouseEventFlag',), ('PySide2.QtCore.Qt.MouseEventSource',), ('PySide2.QtCore.Qt.NativeGestureType',), ('PySide2.QtCore.Qt.Orientation',), ('PySide2.QtCore.Qt.PenCapStyle',), ('PySide2.QtCore.Qt.PenJoinStyle',), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtCore.Qt.ScreenOrientation',), ('PySide2.QtCore.Qt.ScrollBarPolicy',), ('PySide2.QtCore.Qt.ScrollPhase',), ('PySide2.QtCore.Qt.ShortcutContext',), ('PySide2.QtCore.Qt.SizeHint',), ('PySide2.QtCore.Qt.SizeMode',), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtCore.Qt.TabFocusBehavior',), ('PySide2.QtCore.Qt.TextElideMode',), ('PySide2.QtCore.Qt.TextFormat',), ('PySide2.QtCore.Qt.TextInteractionFlag',), ('PySide2.QtCore.Qt.TimeSpec',), ('PySide2.QtCore.Qt.TimerType',), ('PySide2.QtCore.Qt.ToolBarArea',), ('PySide2.QtCore.Qt.ToolButtonStyle',), ('PySide2.QtCore.Qt.TransformationMode',), ('PySide2.QtCore.Qt.WidgetAttribute',), ('PySide2.QtCore.Qt.WindowModality',), ('PySide2.QtCore.Qt.WindowState',), ('PySide2.QtCore.Qt.WindowType',), ('ScreenOrientations',), ('TextInteractionFlags',), ('ToolBarAreas',), ('TouchPointStates',), ('WindowFlags',), ('WindowStates',)], + + # class PySide2.QtCore.QtMsgType: + + # class PySide2.QtCore.Signal: + + # class PySide2.QtCore.Slot: + }) + +# Module PySide2.QtGui +if "PySide2.QtGui" in sys.modules: + dict.update({ + + # class PySide2.QtGui.QAbstractTextDocumentLayout: + "QAbstractTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QAbstractTextDocumentLayout.anchorAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QAbstractTextDocumentLayout.document": (), + "QAbstractTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QAbstractTextDocumentLayout.documentSize": (), + "QAbstractTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QAbstractTextDocumentLayout.drawInlineObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.format": ('int',), + "QAbstractTextDocumentLayout.formatIndex": ('int',), + "QAbstractTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QAbstractTextDocumentLayout.handlerForObject": ('int',), + "QAbstractTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QAbstractTextDocumentLayout.pageCount": (), + "QAbstractTextDocumentLayout.paintDevice": (), + "QAbstractTextDocumentLayout.positionInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.registerHandler": ('int', 'PySide2.QtCore.QObject'), + "QAbstractTextDocumentLayout.resizeInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.setPaintDevice": ('PySide2.QtGui.QPaintDevice',), + "QAbstractTextDocumentLayout.unregisterHandler": ('int', 'PySide2.QtCore.QObject'), + + # class PySide2.QtGui.QAccessible: + "QAccessible.queryAccessibleInterface": ('PySide2.QtCore.QObject',), + "QAccessible.__copy__": (), + "QAccessible.cleanup": (), + "QAccessible.isActive": (), + "QAccessible.qAccessibleTextBoundaryHelper": ('PySide2.QtGui.QTextCursor', 'PySide2.QtGui.QAccessible.TextBoundaryType'), + "QAccessible.setActive": ('bool',), + "QAccessible.setRootObject": ('PySide2.QtCore.QObject',), + "QAccessible.updateAccessibility": ('PySide2.QtGui.QAccessibleEvent',), + + # class PySide2.QtGui.QAccessibleEvent: + "QAccessibleEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessible.Event'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessible.Event')], + "QAccessibleEvent.accessibleInterface": (), + "QAccessibleEvent.child": (), + "QAccessibleEvent.object": (), + "QAccessibleEvent.setChild": ('int',), + "QAccessibleEvent.type": (), + + # class PySide2.QtGui.QAccessibleInterface: + "QAccessibleInterface.__init__": (), + "QAccessibleInterface.backgroundColor": (), + "QAccessibleInterface.child": ('int',), + "QAccessibleInterface.childAt": ('int', 'int'), + "QAccessibleInterface.childCount": (), + "QAccessibleInterface.focusChild": (), + "QAccessibleInterface.foregroundColor": (), + "QAccessibleInterface.indexOfChild": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessibleInterface.interface_cast": ('PySide2.QtGui.QAccessible.InterfaceType',), + "QAccessibleInterface.isValid": (), + "QAccessibleInterface.object": (), + "QAccessibleInterface.parent": (), + "QAccessibleInterface.rect": (), + "QAccessibleInterface.role": (), + "QAccessibleInterface.setText": ('PySide2.QtGui.QAccessible.Text', 'str'), + "QAccessibleInterface.state": (), + "QAccessibleInterface.text": ('PySide2.QtGui.QAccessible.Text',), + "QAccessibleInterface.virtual_hook": ('int', 'int'), + "QAccessibleInterface.window": (), + + # class PySide2.QtGui.QActionEvent: + + # class PySide2.QtGui.QBackingStore: + "QBackingStore.__init__": ('PySide2.QtGui.QWindow',), + "QBackingStore.beginPaint": ('PySide2.QtGui.QRegion',), + "QBackingStore.endPaint": (), + "QBackingStore.flush": ('PySide2.QtGui.QRegion', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint'), + "QBackingStore.hasStaticContents": (), + "QBackingStore.paintDevice": (), + "QBackingStore.resize": ('PySide2.QtCore.QSize',), + "QBackingStore.scroll": ('PySide2.QtGui.QRegion', 'int', 'int'), + "QBackingStore.setStaticContents": ('PySide2.QtGui.QRegion',), + "QBackingStore.size": (), + "QBackingStore.staticContents": (), + "QBackingStore.window": (), + + # class PySide2.QtGui.QBitmap: + "QBitmap.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str')], + "QBitmap.__copy__": (), + "QBitmap.clear": (), + "QBitmap.fromData": ('PySide2.QtCore.QSize', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.QtGui.QImage.Format'), + "QBitmap.fromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QBitmap.swap": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',)], + "QBitmap.transformed": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform',)], + + # class PySide2.QtGui.QBrush: + "QBrush.__init__": [(), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QBrush',), ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QGradient',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',)], + "QBrush.__copy__": (), + "QBrush.color": (), + "QBrush.gradient": (), + "QBrush.isOpaque": (), + "QBrush.matrix": (), + "QBrush.setColor": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',)], + "QBrush.setMatrix": ('PySide2.QtGui.QMatrix',), + "QBrush.setStyle": ('PySide2.QtCore.Qt.BrushStyle',), + "QBrush.setTexture": ('PySide2.QtGui.QPixmap',), + "QBrush.setTextureImage": ('PySide2.QtGui.QImage',), + "QBrush.setTransform": ('PySide2.QtGui.QTransform',), + "QBrush.style": (), + "QBrush.swap": ('PySide2.QtGui.QBrush',), + "QBrush.texture": (), + "QBrush.textureImage": (), + "QBrush.transform": (), + + # class PySide2.QtGui.QClipboard: + "QClipboard.setMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.clear": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.image": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.mimeData": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.ownsClipboard": (), + "QClipboard.ownsFindBuffer": (), + "QClipboard.ownsSelection": (), + "QClipboard.pixmap": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.setImage": ('PySide2.QtGui.QImage', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setText": ('str', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.supportsFindBuffer": (), + "QClipboard.supportsSelection": (), + "QClipboard.text": [('PySide2.QtGui.QClipboard.Mode',), ('str', 'PySide2.QtGui.QClipboard.Mode')], + + # class PySide2.QtGui.QCloseEvent: + "QCloseEvent.__init__": (), + + # class PySide2.QtGui.QColor: + "QColor.__init__": [(), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('PySide2.support.signature.typing.Any',), ('int',), ('int', 'int', 'int', 'int'), ('str',)], + "QColor.__copy__": (), + "QColor.__reduce__": (), + "QColor.__setstate__": ('object',), + "QColor.alpha": (), + "QColor.alphaF": (), + "QColor.black": (), + "QColor.blackF": (), + "QColor.blue": (), + "QColor.blueF": (), + "QColor.colorNames": (), + "QColor.convertTo": ('PySide2.QtGui.QColor.Spec',), + "QColor.cyan": (), + "QColor.cyanF": (), + "QColor.dark": ('int',), + "QColor.darker": ('int',), + "QColor.fromCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.fromCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.fromHsl": ('int', 'int', 'int', 'int'), + "QColor.fromHslF": ('float', 'float', 'float', 'float'), + "QColor.fromHsv": ('int', 'int', 'int', 'int'), + "QColor.fromHsvF": ('float', 'float', 'float', 'float'), + "QColor.fromRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.fromRgbF": ('float', 'float', 'float', 'float'), + "QColor.fromRgba": ('int',), + "QColor.fromRgba64": ('int', 'int', 'int', 'int'), + "QColor.getCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.getCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.getHsl": ('int', 'int', 'int', 'int'), + "QColor.getHslF": ('float', 'float', 'float', 'float'), + "QColor.getHsv": ('int', 'int', 'int', 'int'), + "QColor.getHsvF": ('float', 'float', 'float', 'float'), + "QColor.getRgb": ('int', 'int', 'int', 'int'), + "QColor.getRgbF": ('float', 'float', 'float', 'float'), + "QColor.green": (), + "QColor.greenF": (), + "QColor.hslHue": (), + "QColor.hslHueF": (), + "QColor.hslSaturation": (), + "QColor.hslSaturationF": (), + "QColor.hsvHue": (), + "QColor.hsvHueF": (), + "QColor.hsvSaturation": (), + "QColor.hsvSaturationF": (), + "QColor.hue": (), + "QColor.hueF": (), + "QColor.isValid": (), + "QColor.isValidColor": ('str',), + "QColor.light": ('int',), + "QColor.lighter": ('int',), + "QColor.lightness": (), + "QColor.lightnessF": (), + "QColor.magenta": (), + "QColor.magentaF": (), + "QColor.name": [(), ('PySide2.QtGui.QColor.NameFormat',)], + "QColor.red": (), + "QColor.redF": (), + "QColor.rgb": (), + "QColor.rgba": (), + "QColor.saturation": (), + "QColor.saturationF": (), + "QColor.setAlpha": ('int',), + "QColor.setAlphaF": ('float',), + "QColor.setBlue": ('int',), + "QColor.setBlueF": ('float',), + "QColor.setCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.setCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.setGreen": ('int',), + "QColor.setGreenF": ('float',), + "QColor.setHsl": ('int', 'int', 'int', 'int'), + "QColor.setHslF": ('float', 'float', 'float', 'float'), + "QColor.setHsv": ('int', 'int', 'int', 'int'), + "QColor.setHsvF": ('float', 'float', 'float', 'float'), + "QColor.setNamedColor": ('str',), + "QColor.setRed": ('int',), + "QColor.setRedF": ('float',), + "QColor.setRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.setRgbF": ('float', 'float', 'float', 'float'), + "QColor.setRgba": ('int',), + "QColor.spec": (), + "QColor.toCmyk": (), + "QColor.toHsl": (), + "QColor.toHsv": (), + "QColor.toRgb": (), + "QColor.toTuple": (), + "QColor.value": (), + "QColor.valueF": (), + "QColor.yellow": (), + "QColor.yellowF": (), + + # class PySide2.QtGui.QConicalGradient: + "QConicalGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QConicalGradient',), ('float', 'float', 'float')], + "QConicalGradient.__copy__": (), + "QConicalGradient.angle": (), + "QConicalGradient.center": (), + "QConicalGradient.setAngle": ('float',), + "QConicalGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + + # class PySide2.QtGui.QContextMenuEvent: + "QContextMenuEvent.__init__": [('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'KeyboardModifiers')], + "QContextMenuEvent.global"+"Y": (), + "QContextMenuEvent.globalPos": (), + "QContextMenuEvent.globalX": (), + "QContextMenuEvent.pos": (), + "QContextMenuEvent.reason": (), + "QContextMenuEvent.x": (), + "QContextMenuEvent.y": (), + + # class PySide2.QtGui.QCursor: + "QCursor.__init__": [(), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtGui.QBitmap', 'PySide2.QtGui.QBitmap', 'int', 'int'), ('PySide2.QtGui.QCursor',), ('PySide2.QtGui.QPixmap', 'int', 'int')], + "QCursor.__copy__": (), + "QCursor.bitmap": (), + "QCursor.hotSpot": (), + "QCursor.mask": (), + "QCursor.pixmap": (), + "QCursor.pos": [(), ('PySide2.QtGui.QScreen',)], + "QCursor.setPos": [('PySide2.QtCore.QPoint',), ('PySide2.QtGui.QScreen', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QScreen', 'int', 'int'), ('int', 'int')], + "QCursor.setShape": ('PySide2.QtCore.Qt.CursorShape',), + "QCursor.shape": (), + + # class PySide2.QtGui.QDesktopServices: + "QDesktopServices.__init__": (), + "QDesktopServices.openUrl": ('PySide2.QtCore.QUrl',), + "QDesktopServices.setUrlHandler": ('str', 'PySide2.QtCore.QObject', 'str'), + "QDesktopServices.unsetUrlHandler": ('str',), + + # class PySide2.QtGui.QDoubleValidator: + "QDoubleValidator.__init__": [('PySide2.QtCore.QObject',), ('float', 'float', 'int', 'PySide2.QtCore.QObject')], + "QDoubleValidator.bottom": (), + "QDoubleValidator.decimals": (), + "QDoubleValidator.notation": (), + "QDoubleValidator.setBottom": ('float',), + "QDoubleValidator.setDecimals": ('int',), + "QDoubleValidator.setNotation": ('PySide2.QtGui.QDoubleValidator.Notation',), + "QDoubleValidator.setRange": ('float', 'float', 'int'), + "QDoubleValidator.setTop": ('float',), + "QDoubleValidator.top": (), + "QDoubleValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QDrag: + "QDrag.__init__": ('PySide2.QtCore.QObject',), + "QDrag.defaultAction": (), + "QDrag.dragCursor": ('PySide2.QtCore.Qt.DropAction',), + "QDrag.exec_": [('DropActions',), ('DropActions', 'PySide2.QtCore.Qt.DropAction')], + "QDrag.hotSpot": (), + "QDrag.mimeData": (), + "QDrag.pixmap": (), + "QDrag.setDragCursor": ('PySide2.QtGui.QPixmap', 'PySide2.QtCore.Qt.DropAction'), + "QDrag.setHotSpot": ('PySide2.QtCore.QPoint',), + "QDrag.setMimeData": ('PySide2.QtCore.QMimeData',), + "QDrag.setPixmap": ('PySide2.QtGui.QPixmap',), + "QDrag.source": (), + "QDrag.start": ('DropActions',), + "QDrag.supportedActions": (), + "QDrag.target": (), + + # class PySide2.QtGui.QDragEnterEvent: + "QDragEnterEvent.__init__": ('PySide2.QtCore.QPoint', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers'), + + # class PySide2.QtGui.QDragLeaveEvent: + "QDragLeaveEvent.__init__": (), + + # class PySide2.QtGui.QDragMoveEvent: + "QDragMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDragMoveEvent.accept": [(), ('PySide2.QtCore.QRect',)], + "QDragMoveEvent.answerRect": (), + "QDragMoveEvent.ignore": [(), ('PySide2.QtCore.QRect',)], + + # class PySide2.QtGui.QDropEvent: + "QDropEvent.__init__": ('PySide2.QtCore.QPointF', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDropEvent.acceptProposedAction": (), + "QDropEvent.dropAction": (), + "QDropEvent.keyboardModifiers": (), + "QDropEvent.mimeData": (), + "QDropEvent.mouseButtons": (), + "QDropEvent.pos": (), + "QDropEvent.posF": (), + "QDropEvent.possibleActions": (), + "QDropEvent.proposedAction": (), + "QDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QDropEvent.source": (), + + # class PySide2.QtGui.QEnterEvent: + "QEnterEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEnterEvent.global"+"Y": (), + "QEnterEvent.globalPos": (), + "QEnterEvent.globalX": (), + "QEnterEvent.localPos": (), + "QEnterEvent.pos": (), + "QEnterEvent.screenPos": (), + "QEnterEvent.windowPos": (), + "QEnterEvent.x": (), + "QEnterEvent.y": (), + + # class PySide2.QtGui.QExposeEvent: + "QExposeEvent.__init__": ('PySide2.QtGui.QRegion',), + "QExposeEvent.region": (), + + # class PySide2.QtGui.QFileOpenEvent: + "QFileOpenEvent.__init__": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileOpenEvent.file": (), + "QFileOpenEvent.openFile": ('PySide2.QtCore.QFile', 'OpenMode'), + "QFileOpenEvent.url": (), + + # class PySide2.QtGui.QFocusEvent: + "QFocusEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.FocusReason'), + "QFocusEvent.gotFocus": (), + "QFocusEvent.lostFocus": (), + "QFocusEvent.reason": (), + + # class PySide2.QtGui.QFont: + "QFont.__init__": [(), ('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('str', 'int', 'int', 'bool')], + "QFont.__copy__": (), + "QFont.bold": (), + "QFont.cacheStatistics": (), + "QFont.capitalization": (), + "QFont.cleanup": (), + "QFont.defaultFamily": (), + "QFont.exactMatch": (), + "QFont.family": (), + "QFont.fixedPitch": (), + "QFont.fromString": ('str',), + "QFont.hintingPreference": (), + "QFont.initialize": (), + "QFont.insertSubstitution": ('str', 'str'), + "QFont.insertSubstitutions": ('str', 'PySide2.support.signature.typing.List'), + "QFont.isCopyOf": ('PySide2.QtGui.QFont',), + "QFont.italic": (), + "QFont.kerning": (), + "QFont.key": (), + "QFont.lastResortFamily": (), + "QFont.lastResortFont": (), + "QFont.letterSpacing": (), + "QFont.letterSpacingType": (), + "QFont.overline": (), + "QFont.pixelSize": (), + "QFont.pointSize": (), + "QFont.pointSizeF": (), + "QFont.rawMode": (), + "QFont.rawName": (), + "QFont.removeSubstitutions": ('str',), + "QFont.resolve": [(), ('PySide2.QtGui.QFont',), ('int',)], + "QFont.setBold": ('bool',), + "QFont.setCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QFont.setFamily": ('str',), + "QFont.setFixedPitch": ('bool',), + "QFont.setHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QFont.setItalic": ('bool',), + "QFont.setKerning": ('bool',), + "QFont.setLetterSpacing": ('PySide2.QtGui.QFont.SpacingType', 'float'), + "QFont.setOverline": ('bool',), + "QFont.setPixelSize": ('int',), + "QFont.setPointSize": ('int',), + "QFont.setPointSizeF": ('float',), + "QFont.setRawMode": ('bool',), + "QFont.setRawName": ('str',), + "QFont.setStretch": ('int',), + "QFont.setStrikeOut": ('bool',), + "QFont.setStyle": ('PySide2.QtGui.QFont.Style',), + "QFont.setStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QFont.setStyleName": ('str',), + "QFont.setStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QFont.setUnderline": ('bool',), + "QFont.setWeight": ('int',), + "QFont.setWordSpacing": ('float',), + "QFont.stretch": (), + "QFont.strikeOut": (), + "QFont.style": (), + "QFont.styleHint": (), + "QFont.styleName": (), + "QFont.styleStrategy": (), + "QFont.substitute": ('str',), + "QFont.substitutes": ('str',), + "QFont.substitutions": (), + "QFont.swap": ('PySide2.QtGui.QFont',), + "QFont.toString": (), + "QFont.underline": (), + "QFont.weight": (), + "QFont.wordSpacing": (), + + # class PySide2.QtGui.QFontDatabase: + "QFontDatabase.__init__": [(), ('PySide2.QtGui.QFontDatabase',)], + "QFontDatabase.__copy__": (), + "QFontDatabase.addApplicationFont": ('str',), + "QFontDatabase.addApplicationFontFromData": ('PySide2.QtCore.QByteArray',), + "QFontDatabase.applicationFontFamilies": ('int',), + "QFontDatabase.bold": ('str', 'str'), + "QFontDatabase.families": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.font": ('str', 'str', 'int'), + "QFontDatabase.hasFamily": ('str',), + "QFontDatabase.isBitmapScalable": ('str', 'str'), + "QFontDatabase.isFixedPitch": ('str', 'str'), + "QFontDatabase.isPrivateFamily": ('str',), + "QFontDatabase.isScalable": ('str', 'str'), + "QFontDatabase.isSmoothlyScalable": ('str', 'str'), + "QFontDatabase.italic": ('str', 'str'), + "QFontDatabase.pointSizes": ('str', 'str'), + "QFontDatabase.removeAllApplicationFonts": (), + "QFontDatabase.removeApplicationFont": ('int',), + "QFontDatabase.smoothSizes": ('str', 'str'), + "QFontDatabase.standardSizes": (), + "QFontDatabase.styleString": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontDatabase.styles": ('str',), + "QFontDatabase.supportsThreadedFontRendering": (), + "QFontDatabase.systemFont": ('PySide2.QtGui.QFontDatabase.SystemFont',), + "QFontDatabase.weight": ('str', 'str'), + "QFontDatabase.writingSystemName": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystemSample": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystems": [(), ('str',)], + + # class PySide2.QtGui.QFontInfo: + "QFontInfo.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontInfo.__copy__": (), + "QFontInfo.bold": (), + "QFontInfo.exactMatch": (), + "QFontInfo.family": (), + "QFontInfo.fixedPitch": (), + "QFontInfo.italic": (), + "QFontInfo.overline": (), + "QFontInfo.pixelSize": (), + "QFontInfo.pointSize": (), + "QFontInfo.pointSizeF": (), + "QFontInfo.rawMode": (), + "QFontInfo.strikeOut": (), + "QFontInfo.style": (), + "QFontInfo.styleHint": (), + "QFontInfo.styleName": (), + "QFontInfo.swap": ('PySide2.QtGui.QFontInfo',), + "QFontInfo.underline": (), + "QFontInfo.weight": (), + + # class PySide2.QtGui.QFontMetrics: + "QFontMetrics.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',)], + "QFontMetrics.__copy__": (), + "QFontMetrics.ascent": (), + "QFontMetrics.averageCharWidth": (), + "QFontMetrics.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetrics.boundingRectChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.charWidth": ('str', 'int'), + "QFontMetrics.descent": (), + "QFontMetrics.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'int', 'int'), + "QFontMetrics.height": (), + "QFontMetrics.inFont": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.inFontUcs4": ('int',), + "QFontMetrics.leading": (), + "QFontMetrics.leftBearing": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.lineSpacing": (), + "QFontMetrics.lineWidth": (), + "QFontMetrics.maxWidth": (), + "QFontMetrics.minLeftBearing": (), + "QFontMetrics.minRightBearing": (), + "QFontMetrics.overlinePos": (), + "QFontMetrics.rightBearing": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.size": ('int', 'str', 'int', 'int'), + "QFontMetrics.strikeOutPos": (), + "QFontMetrics.swap": ('PySide2.QtGui.QFontMetrics',), + "QFontMetrics.tightBoundingRect": ('str',), + "QFontMetrics.underlinePos": (), + "QFontMetrics.width": [('str', 'int'), ('str', 'int', 'int')], + "QFontMetrics.widthChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.xHeight": (), + + # class PySide2.QtGui.QFontMetricsF: + "QFontMetricsF.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',), ('PySide2.QtGui.QFontMetricsF',)], + "QFontMetricsF.__copy__": (), + "QFontMetricsF.ascent": (), + "QFontMetricsF.averageCharWidth": (), + "QFontMetricsF.boundingRect": [('PySide2.QtCore.QRectF', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetricsF.boundingRectChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.descent": (), + "QFontMetricsF.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'float', 'int'), + "QFontMetricsF.height": (), + "QFontMetricsF.inFont": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.inFontUcs4": ('int',), + "QFontMetricsF.leading": (), + "QFontMetricsF.leftBearing": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.lineSpacing": (), + "QFontMetricsF.lineWidth": (), + "QFontMetricsF.maxWidth": (), + "QFontMetricsF.minLeftBearing": (), + "QFontMetricsF.minRightBearing": (), + "QFontMetricsF.overlinePos": (), + "QFontMetricsF.rightBearing": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.size": ('int', 'str', 'int', 'int'), + "QFontMetricsF.strikeOutPos": (), + "QFontMetricsF.swap": ('PySide2.QtGui.QFontMetricsF',), + "QFontMetricsF.tightBoundingRect": ('str',), + "QFontMetricsF.underlinePos": (), + "QFontMetricsF.width": ('str',), + "QFontMetricsF.widthChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.xHeight": (), + + # class PySide2.QtGui.QGradient: + "QGradient.__init__": [(), ('PySide2.QtGui.QGradient',)], + "QGradient.__copy__": (), + "QGradient.coordinateMode": (), + "QGradient.interpolationMode": (), + "QGradient.setColorAt": ('float', 'PySide2.QtGui.QColor'), + "QGradient.setCoordinateMode": ('PySide2.QtGui.QGradient.CoordinateMode',), + "QGradient.setInterpolationMode": ('PySide2.QtGui.QGradient.InterpolationMode',), + "QGradient.setSpread": ('PySide2.QtGui.QGradient.Spread',), + "QGradient.setStops": ('list',), + "QGradient.spread": (), + "QGradient.stops": (), + "QGradient.type": (), + + # class PySide2.QtGui.QGuiApplication: + "QGuiApplication.__init__": ('PySide2.support.signature.typing.List',), + "QGuiApplication.allWindows": (), + "QGuiApplication.applicationDisplayName": (), + "QGuiApplication.applicationState": (), + "QGuiApplication.changeOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.clipboard": (), + "QGuiApplication.desktopSettingsAware": (), + "QGuiApplication.devicePixelRatio": (), + "QGuiApplication.event": ('PySide2.QtCore.QEvent',), + "QGuiApplication.exec_": (), + "QGuiApplication.focusObject": (), + "QGuiApplication.focusWindow": (), + "QGuiApplication.font": (), + "QGuiApplication.isFallbackSessionManagementEnabled": (), + "QGuiApplication.isLeftToRight": (), + "QGuiApplication.isRightToLeft": (), + "QGuiApplication.isSavingSession": (), + "QGuiApplication.isSessionRestored": (), + "QGuiApplication.keyboardModifiers": (), + "QGuiApplication.layoutDirection": (), + "QGuiApplication.modalWindow": (), + "QGuiApplication.mouseButtons": (), + "QGuiApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGuiApplication.overrideCursor": (), + "QGuiApplication.palette": (), + "QGuiApplication.platformName": (), + "QGuiApplication.primaryScreen": (), + "QGuiApplication.queryKeyboardModifiers": (), + "QGuiApplication.quitOnLastWindowClosed": (), + "QGuiApplication.restoreOverrideCursor": (), + "QGuiApplication.screens": (), + "QGuiApplication.sessionId": (), + "QGuiApplication.sessionKey": (), + "QGuiApplication.setApplicationDisplayName": ('str',), + "QGuiApplication.setDesktopSettingsAware": ('bool',), + "QGuiApplication.setFallbackSessionManagementEnabled": ('bool',), + "QGuiApplication.setFont": ('PySide2.QtGui.QFont',), + "QGuiApplication.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGuiApplication.setOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.setPalette": ('PySide2.QtGui.QPalette',), + "QGuiApplication.setQuitOnLastWindowClosed": ('bool',), + "QGuiApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QGuiApplication.styleHints": (), + "QGuiApplication.sync": (), + "QGuiApplication.topLevelAt": ('PySide2.QtCore.QPoint',), + "QGuiApplication.topLevelWindows": (), + "QGuiApplication.windowIcon": (), + + # class PySide2.QtGui.QHelpEvent: + "QHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QHelpEvent.global"+"Y": (), + "QHelpEvent.globalPos": (), + "QHelpEvent.globalX": (), + "QHelpEvent.pos": (), + "QHelpEvent.x": (), + "QHelpEvent.y": (), + + # class PySide2.QtGui.QHideEvent: + "QHideEvent.__init__": (), + + # class PySide2.QtGui.QHoverEvent: + "QHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'KeyboardModifiers'), + "QHoverEvent.oldPos": (), + "QHoverEvent.oldPosF": (), + "QHoverEvent.pos": (), + "QHoverEvent.posF": (), + + # class PySide2.QtGui.QIcon: + "QIcon.__init__": [(), ('PySide2.QtGui.QIcon',), ('PySide2.QtGui.QIconEngine',), ('PySide2.QtGui.QPixmap',), ('str',)], + "QIcon.__copy__": (), + "QIcon.actualSize": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.cacheKey": (), + "QIcon.fromTheme": ('str', 'PySide2.QtGui.QIcon'), + "QIcon.hasThemeIcon": ('str',), + "QIcon.isMask": (), + "QIcon.isNull": (), + "QIcon.name": (), + "QIcon.paint": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QPainter', 'int', 'int', 'int', 'int', 'Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.pixmap": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.setIsMask": ('bool',), + "QIcon.setThemeName": ('str',), + "QIcon.setThemeSearchPaths": ('PySide2.support.signature.typing.List',), + "QIcon.swap": ('PySide2.QtGui.QIcon',), + "QIcon.themeName": (), + "QIcon.themeSearchPaths": (), + + # class PySide2.QtGui.QIconDragEvent: + "QIconDragEvent.__init__": (), + + # class PySide2.QtGui.QIconEngine: + "QIconEngine.__init__": (), + "QIconEngine.actualSize": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.clone": (), + "QIconEngine.iconName": (), + "QIconEngine.key": (), + "QIconEngine.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.pixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.read": ('PySide2.QtCore.QDataStream',), + "QIconEngine.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QImage: + "QImage.__init__": [(), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QImage.Format'), ('PySide2.QtGui.QImage',), ('PySide2.support.signature.typing.List',), ('PySide2.support.signature.typing.Union[str, int]', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'PySide2.support.signature.typing.Callable', 'int'), ('PySide2.support.signature.typing.Union[str, int]', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'PySide2.support.signature.typing.Callable', 'int'), ('int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'str')], + "QImage.__copy__": (), + "QImage.allGray": (), + "QImage.alphaChannel": (), + "QImage.bitPlaneCount": (), + "QImage.bits": (), + "QImage.byteCount": (), + "QImage.bytesPerLine": (), + "QImage.cacheKey": (), + "QImage.color": ('int',), + "QImage.colorCount": (), + "QImage.colorTable": (), + "QImage.constBits": (), + "QImage.constScanLine": ('int',), + "QImage.convertToFormat": [('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), ('PySide2.QtGui.QImage.Format', 'list', 'ImageConversionFlags')], + "QImage.convertToFormat_helper": ('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), + "QImage.convertToFormat_inplace": ('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), + "QImage.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QImage.createAlphaMask": ('ImageConversionFlags',), + "QImage.createHeuristicMask": ('bool',), + "QImage.createMaskFromColor": ('int', 'PySide2.QtCore.Qt.MaskMode'), + "QImage.depth": (), + "QImage.devType": (), + "QImage.devicePixelRatio": (), + "QImage.dotsPerMeterX": (), + "QImage.dotsPerMeterY": (), + "QImage.fill": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',)], + "QImage.format": (), + "QImage.fromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.hasAlphaChannel": (), + "QImage.height": (), + "QImage.invertPixels": ('PySide2.QtGui.QImage.InvertMode',), + "QImage.isGrayscale": (), + "QImage.isNull": (), + "QImage.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QImage.loadFromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QImage.mirrored": ('bool', 'bool'), + "QImage.mirrored_helper": ('bool', 'bool'), + "QImage.mirrored_inplace": ('bool', 'bool'), + "QImage.offset": (), + "QImage.paintEngine": (), + "QImage.pixel": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelColor": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelFormat": (), + "QImage.pixelIndex": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.rect": (), + "QImage.rgbSwapped": (), + "QImage.rgbSwapped_helper": (), + "QImage.rgbSwapped_inplace": (), + "QImage.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QImage.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scanLine": ('int',), + "QImage.setAlphaChannel": ('PySide2.QtGui.QImage',), + "QImage.setColor": ('int', 'int'), + "QImage.setColorCount": ('int',), + "QImage.setColorTable": ('list',), + "QImage.setDevicePixelRatio": ('float',), + "QImage.setDotsPerMeterX": ('int',), + "QImage.setDotsPerMeterY": ('int',), + "QImage.setOffset": ('PySide2.QtCore.QPoint',), + "QImage.setPixel": [('PySide2.QtCore.QPoint', 'int'), ('int', 'int', 'int')], + "QImage.setPixelColor": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QColor')], + "QImage.setText": ('str', 'str'), + "QImage.size": (), + "QImage.smoothScaled": ('int', 'int'), + "QImage.swap": ('PySide2.QtGui.QImage',), + "QImage.text": ('str',), + "QImage.textKeys": (), + "QImage.toImageFormat": ('PySide2.QtGui.QPixelFormat',), + "QImage.toPixelFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QImage.valid": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.width": (), + + # class PySide2.QtGui.QImageIOHandler: + "QImageIOHandler.__init__": (), + "QImageIOHandler.canRead": (), + "QImageIOHandler.currentImageNumber": (), + "QImageIOHandler.currentImageRect": (), + "QImageIOHandler.device": (), + "QImageIOHandler.format": (), + "QImageIOHandler.imageCount": (), + "QImageIOHandler.jumpToImage": ('int',), + "QImageIOHandler.jumpToNextImage": (), + "QImageIOHandler.loopCount": (), + "QImageIOHandler.name": (), + "QImageIOHandler.nextImageDelay": (), + "QImageIOHandler.option": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.read": ('PySide2.QtGui.QImage',), + "QImageIOHandler.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageIOHandler.setFormat": ['PySide2.QtCore.QByteArray'], + "QImageIOHandler.setOption": ('PySide2.QtGui.QImageIOHandler.ImageOption', 'PySide2.support.signature.typing.Any'), + "QImageIOHandler.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QImageReader: + "QImageReader.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageReader.autoDetectImageFormat": (), + "QImageReader.autoTransform": (), + "QImageReader.backgroundColor": (), + "QImageReader.canRead": (), + "QImageReader.clipRect": (), + "QImageReader.currentImageNumber": (), + "QImageReader.currentImageRect": (), + "QImageReader.decideFormatFromContent": (), + "QImageReader.device": (), + "QImageReader.error": (), + "QImageReader.errorString": (), + "QImageReader.fileName": (), + "QImageReader.format": (), + "QImageReader.gamma": (), + "QImageReader.imageCount": (), + "QImageReader.imageFormat": [(), ('PySide2.QtCore.QIODevice',), ('str',)], + "QImageReader.jumpToImage": ('int',), + "QImageReader.jumpToNextImage": (), + "QImageReader.loopCount": (), + "QImageReader.nextImageDelay": (), + "QImageReader.quality": (), + "QImageReader.read": (), + "QImageReader.scaledClipRect": (), + "QImageReader.scaledSize": (), + "QImageReader.setAutoDetectImageFormat": ('bool',), + "QImageReader.setAutoTransform": ('bool',), + "QImageReader.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QImageReader.setClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setDecideFormatFromContent": ('bool',), + "QImageReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageReader.setFileName": ('str',), + "QImageReader.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageReader.setGamma": ('float',), + "QImageReader.setQuality": ('int',), + "QImageReader.setScaledClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setScaledSize": ('PySide2.QtCore.QSize',), + "QImageReader.size": (), + "QImageReader.subType": (), + "QImageReader.supportedImageFormats": (), + "QImageReader.supportedMimeTypes": (), + "QImageReader.supportedSubTypes": (), + "QImageReader.supportsAnimation": (), + "QImageReader.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageReader.text": ('str',), + "QImageReader.textKeys": (), + "QImageReader.transformation": (), + + # class PySide2.QtGui.QImageWriter: + "QImageWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageWriter.canWrite": (), + "QImageWriter.compression": (), + "QImageWriter.description": (), + "QImageWriter.device": (), + "QImageWriter.error": (), + "QImageWriter.errorString": (), + "QImageWriter.fileName": (), + "QImageWriter.format": (), + "QImageWriter.gamma": (), + "QImageWriter.optimizedWrite": (), + "QImageWriter.progressiveScanWrite": (), + "QImageWriter.quality": (), + "QImageWriter.setCompression": ('int',), + "QImageWriter.setDescription": ('str',), + "QImageWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageWriter.setFileName": ('str',), + "QImageWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setGamma": ('float',), + "QImageWriter.setOptimizedWrite": ('bool',), + "QImageWriter.setProgressiveScanWrite": ('bool',), + "QImageWriter.setQuality": ('int',), + "QImageWriter.setSubType": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setText": ('str', 'str'), + "QImageWriter.setTransformation": ('Transformations',), + "QImageWriter.subType": (), + "QImageWriter.supportedImageFormats": (), + "QImageWriter.supportedMimeTypes": (), + "QImageWriter.supportedSubTypes": (), + "QImageWriter.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageWriter.transformation": (), + "QImageWriter.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QInputEvent: + "QInputEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'KeyboardModifiers'), + "QInputEvent.modifiers": (), + "QInputEvent.setModifiers": ('KeyboardModifiers',), + "QInputEvent.setTimestamp": ('int',), + "QInputEvent.timestamp": (), + + # class PySide2.QtGui.QInputMethodEvent: + "QInputMethodEvent.__init__": [(), ('PySide2.QtGui.QInputMethodEvent',), ('str', 'list')], + "QInputMethodEvent.attributes": (), + "QInputMethodEvent.commitString": (), + "QInputMethodEvent.preeditString": (), + "QInputMethodEvent.replacementLength": (), + "QInputMethodEvent.replacementStart": (), + "QInputMethodEvent.setCommitString": ('str', 'int', 'int'), + + # class PySide2.QtGui.QIntValidator: + "QIntValidator.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QIntValidator.bottom": (), + "QIntValidator.fixup": ('str',), + "QIntValidator.setBottom": ('int',), + "QIntValidator.setRange": ('int', 'int'), + "QIntValidator.setTop": ('int',), + "QIntValidator.top": (), + "QIntValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QKeyEvent: + "QKeyEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'int', 'KeyboardModifiers', 'int', 'int', 'int', 'str', 'bool', 'int'), ('PySide2.QtCore.QEvent.Type', 'int', 'KeyboardModifiers', 'str', 'bool', 'int')], + "QKeyEvent.count": (), + "QKeyEvent.isAutoRepeat": (), + "QKeyEvent.key": (), + "QKeyEvent.matches": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeyEvent.modifiers": (), + "QKeyEvent.nativeModifiers": (), + "QKeyEvent.nativeScanCode": (), + "QKeyEvent.nativeVirtualKey": (), + "QKeyEvent.text": (), + + # class PySide2.QtGui.QKeySequence: + "QKeySequence.__init__": [(), ('PySide2.QtGui.QKeySequence',), ('PySide2.QtGui.QKeySequence.StandardKey',), ('int', 'int', 'int', 'int'), ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat')], + "QKeySequence.__copy__": (), + "QKeySequence.__reduce__": (), + "QKeySequence.count": (), + "QKeySequence.fromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.isEmpty": (), + "QKeySequence.keyBindings": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeySequence.listFromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.listToString": ('list', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.matches": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.mnemonic": ('str',), + "QKeySequence.swap": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.toString": ('PySide2.QtGui.QKeySequence.SequenceFormat',), + + # class PySide2.QtGui.QLinearGradient: + "QLinearGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtGui.QLinearGradient',), ('float', 'float', 'float', 'float')], + "QLinearGradient.__copy__": (), + "QLinearGradient.finalStop": (), + "QLinearGradient.setFinalStop": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.setStart": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.start": (), + + # class PySide2.QtGui.QMatrix: + "QMatrix.__init__": [(), ('PySide2.QtGui.QMatrix',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix.__copy__": (), + "QMatrix.__reduce__": (), + "QMatrix.determinant": (), + "QMatrix.dx": (), + "QMatrix.dy": (), + "QMatrix.inverted": ('bool',), + "QMatrix.isIdentity": (), + "QMatrix.isInvertible": (), + "QMatrix.m11": (), + "QMatrix.m12": (), + "QMatrix.m21": (), + "QMatrix.m22": (), + "QMatrix.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QMatrix.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix.mapToPolygon": ('PySide2.QtCore.QRect',), + "QMatrix.reset": (), + "QMatrix.rotate": ('float',), + "QMatrix.scale": ('float', 'float'), + "QMatrix.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix.shear": ('float', 'float'), + "QMatrix.translate": ('float', 'float'), + + # class PySide2.QtGui.QMatrix2x2: + "QMatrix2x2.__init__": [('PySide2.QtGui.QMatrix2x2',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix2x2.__copy__": (), + "QMatrix2x2.__reduce__": (), + "QMatrix2x2.data": (), + "QMatrix2x2.fill": ('object',), + "QMatrix2x2.transposed": (), + + # class PySide2.QtGui.QMatrix2x3: + "QMatrix2x3.__init__": [('PySide2.QtGui.QMatrix2x3',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix2x3.__copy__": (), + "QMatrix2x3.__reduce__": (), + "QMatrix2x3.data": (), + "QMatrix2x3.fill": ('object',), + "QMatrix2x3.transposed": (), + + # class PySide2.QtGui.QMatrix2x4: + "QMatrix2x4.__init__": [('PySide2.QtGui.QMatrix2x4',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix2x4.__copy__": (), + "QMatrix2x4.__reduce__": (), + "QMatrix2x4.data": (), + "QMatrix2x4.fill": ('object',), + "QMatrix2x4.transposed": (), + + # class PySide2.QtGui.QMatrix3x2: + "QMatrix3x2.__init__": [('PySide2.QtGui.QMatrix3x2',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix3x2.__copy__": (), + "QMatrix3x2.__reduce__": (), + "QMatrix3x2.data": (), + "QMatrix3x2.fill": ('object',), + "QMatrix3x2.transposed": (), + + # class PySide2.QtGui.QMatrix3x3: + "QMatrix3x3.__init__": [('PySide2.QtGui.QMatrix3x3',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix3x3.__copy__": (), + "QMatrix3x3.__reduce__": (), + "QMatrix3x3.data": (), + "QMatrix3x3.fill": ('object',), + "QMatrix3x3.transposed": (), + + # class PySide2.QtGui.QMatrix3x4: + "QMatrix3x4.__init__": [('PySide2.QtGui.QMatrix3x4',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix3x4.__copy__": (), + "QMatrix3x4.__reduce__": (), + "QMatrix3x4.data": (), + "QMatrix3x4.fill": ('object',), + "QMatrix3x4.transposed": (), + + # class PySide2.QtGui.QMatrix4x2: + "QMatrix4x2.__init__": [('PySide2.QtGui.QMatrix4x2',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix4x2.__copy__": (), + "QMatrix4x2.__reduce__": (), + "QMatrix4x2.data": (), + "QMatrix4x2.fill": ('object',), + "QMatrix4x2.transposed": (), + + # class PySide2.QtGui.QMatrix4x3: + "QMatrix4x3.__init__": [('PySide2.QtGui.QMatrix4x3',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix4x3.__copy__": (), + "QMatrix4x3.__reduce__": (), + "QMatrix4x3.data": (), + "QMatrix4x3.fill": ('object',), + "QMatrix4x3.transposed": (), + + # class PySide2.QtGui.QMatrix4x4: + "QMatrix4x4.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QMatrix4x4',), ('PySide2.QtGui.QTransform',), ('float',), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.__copy__": (), + "QMatrix4x4.__reduce__": (), + "QMatrix4x4.column": ('int',), + "QMatrix4x4.copyDataTo": ('float',), + "QMatrix4x4.data": (), + "QMatrix4x4.determinant": (), + "QMatrix4x4.fill": ('float',), + "QMatrix4x4.flipCoordinates": (), + "QMatrix4x4.frustum": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix4x4.inverted": ('bool',), + "QMatrix4x4.isAffine": (), + "QMatrix4x4.isIdentity": (), + "QMatrix4x4.lookAt": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QMatrix4x4.map": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',)], + "QMatrix4x4.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix4x4.mapVector": ('PySide2.QtGui.QVector3D',), + "QMatrix4x4.normalMatrix": (), + "QMatrix4x4.optimize": (), + "QMatrix4x4.ortho": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.perspective": ('float', 'float', 'float', 'float'), + "QMatrix4x4.rotate": [('PySide2.QtGui.QQuaternion',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QMatrix4x4.row": ('int',), + "QMatrix4x4.scale": [('PySide2.QtGui.QVector3D',), ('float',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.setColumn": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setRow": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setToIdentity": (), + "QMatrix4x4.toAffine": (), + "QMatrix4x4.toTransform": [(), ('float',)], + "QMatrix4x4.translate": [('PySide2.QtGui.QVector3D',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.transposed": (), + "QMatrix4x4.viewport": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + + # class PySide2.QtGui.QMouseEvent: + "QMouseEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers')], + "QMouseEvent.button": (), + "QMouseEvent.buttons": (), + "QMouseEvent.flags": (), + "QMouseEvent.global"+"Y": (), + "QMouseEvent.globalPos": (), + "QMouseEvent.globalX": (), + "QMouseEvent.localPos": (), + "QMouseEvent.pos": (), + "QMouseEvent.screenPos": (), + "QMouseEvent.source": (), + "QMouseEvent.windowPos": (), + "QMouseEvent.x": (), + "QMouseEvent.y": (), + + # class PySide2.QtGui.QMoveEvent: + "QMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QMoveEvent.oldPos": (), + "QMoveEvent.pos": (), + + # class PySide2.QtGui.QMovie: + "QMovie.__init__": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QMovie.backgroundColor": (), + "QMovie.cacheMode": (), + "QMovie.currentFrameNumber": (), + "QMovie.currentImage": (), + "QMovie.currentPixmap": (), + "QMovie.device": (), + "QMovie.fileName": (), + "QMovie.format": (), + "QMovie.frameCount": (), + "QMovie.frameRect": (), + "QMovie.isValid": (), + "QMovie.jumpToFrame": ('int',), + "QMovie.jumpToNextFrame": (), + "QMovie.loopCount": (), + "QMovie.nextFrameDelay": (), + "QMovie.scaledSize": (), + "QMovie.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QMovie.setCacheMode": ('PySide2.QtGui.QMovie.CacheMode',), + "QMovie.setDevice": ('PySide2.QtCore.QIODevice',), + "QMovie.setFileName": ('str',), + "QMovie.setFormat": ('PySide2.QtCore.QByteArray',), + "QMovie.setPaused": ('bool',), + "QMovie.setScaledSize": ('PySide2.QtCore.QSize',), + "QMovie.setSpeed": ('int',), + "QMovie.speed": (), + "QMovie.start": (), + "QMovie.state": (), + "QMovie.stop": (), + "QMovie.supportedFormats": (), + + # class PySide2.QtGui.QOpenGLBuffer: + "QOpenGLBuffer.__init__": [(), ('PySide2.QtGui.QOpenGLBuffer',), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.allocate": [('int',), ('int', 'int')], + "QOpenGLBuffer.bind": (), + "QOpenGLBuffer.bufferId": (), + "QOpenGLBuffer.create": (), + "QOpenGLBuffer.destroy": (), + "QOpenGLBuffer.isCreated": (), + "QOpenGLBuffer.map": ('PySide2.QtGui.QOpenGLBuffer.Access',), + "QOpenGLBuffer.mapRange": ('int', 'int', 'RangeAccessFlags'), + "QOpenGLBuffer.read": ('int', 'int', 'int'), + "QOpenGLBuffer.release": [(), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.setUsagePattern": ('PySide2.QtGui.QOpenGLBuffer.UsagePattern',), + "QOpenGLBuffer.size": (), + "QOpenGLBuffer.type": (), + "QOpenGLBuffer.unmap": (), + "QOpenGLBuffer.usagePattern": (), + "QOpenGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtGui.QOpenGLContext: + "QOpenGLContext.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLContext.areSharing": ('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLContext.create": (), + "QOpenGLContext.currentContext": (), + "QOpenGLContext.defaultFramebufferObject": (), + "QOpenGLContext.doneCurrent": (), + "QOpenGLContext.extensions": (), + "QOpenGLContext.format": (), + "QOpenGLContext.globalShareContext": (), + "QOpenGLContext.hasExtension": ('PySide2.QtCore.QByteArray',), + "QOpenGLContext.isOpenGLES": (), + "QOpenGLContext.isValid": (), + "QOpenGLContext.makeCurrent": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.nativeHandle": (), + "QOpenGLContext.openGLModuleHandle": (), + "QOpenGLContext.openGLModuleType": (), + "QOpenGLContext.screen": (), + "QOpenGLContext.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLContext.setNativeHandle": ('PySide2.support.signature.typing.Any',), + "QOpenGLContext.setScreen": ('PySide2.QtGui.QScreen',), + "QOpenGLContext.setShareContext": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLContext.shareContext": (), + "QOpenGLContext.supportsThreadedOpenGL": (), + "QOpenGLContext.surface": (), + "QOpenGLContext.swapBuffers": ('PySide2.QtGui.QSurface',), + + # class PySide2.QtGui.QOpenGLFramebufferObject: + "QOpenGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.addColorAttachment": [('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.attachment": (), + "QOpenGLFramebufferObject.bind": (), + "QOpenGLFramebufferObject.bindDefault": (), + "QOpenGLFramebufferObject.blitFramebuffer": [('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtGui.QOpenGLFramebufferObject', 'int', 'int')], + "QOpenGLFramebufferObject.handle": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QOpenGLFramebufferObject.height": (), + "QOpenGLFramebufferObject.isBound": (), + "QOpenGLFramebufferObject.isValid": (), + "QOpenGLFramebufferObject.release": (), + "QOpenGLFramebufferObject.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObject.size": (), + "QOpenGLFramebufferObject.sizes": (), + "QOpenGLFramebufferObject.takeTexture": [(), ('int',)], + "QOpenGLFramebufferObject.texture": (), + "QOpenGLFramebufferObject.textures": (), + "QOpenGLFramebufferObject.toImage": [(), ('bool',), ('bool', 'int')], + "QOpenGLFramebufferObject.width": (), + + # class PySide2.QtGui.QOpenGLShader: + "QOpenGLShader.__init__": ('ShaderType', 'PySide2.QtCore.QObject'), + "QOpenGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShader.compileSourceFile": ('str',), + "QOpenGLShader.hasOpenGLShaders": ('ShaderType', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLShader.isCompiled": (), + "QOpenGLShader.log": (), + "QOpenGLShader.shaderId": (), + "QOpenGLShader.shaderType": (), + "QOpenGLShader.sourceCode": (), + + # class PySide2.QtGui.QPageLayout: + "QPageLayout.__init__": [(), ('PySide2.QtGui.QPageLayout',), ('PySide2.QtGui.QPageSize', 'PySide2.QtGui.QPageLayout.Orientation', 'PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit', 'PySide2.QtCore.QMarginsF')], + "QPageLayout.__copy__": (), + "QPageLayout.fullRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.fullRectPixels": ('int',), + "QPageLayout.fullRectPoints": (), + "QPageLayout.isEquivalentTo": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.isValid": (), + "QPageLayout.margins": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.marginsPixels": ('int',), + "QPageLayout.marginsPoints": (), + "QPageLayout.maximumMargins": (), + "QPageLayout.minimumMargins": (), + "QPageLayout.mode": (), + "QPageLayout.orientation": (), + "QPageLayout.pageSize": (), + "QPageLayout.paintRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.paintRectPixels": ('int',), + "QPageLayout.paintRectPoints": (), + "QPageLayout.setBottomMargin": ('float',), + "QPageLayout.setLeftMargin": ('float',), + "QPageLayout.setMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMinimumMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMode": ('PySide2.QtGui.QPageLayout.Mode',), + "QPageLayout.setOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPageLayout.setPageSize": ('PySide2.QtGui.QPageSize', 'PySide2.QtCore.QMarginsF'), + "QPageLayout.setRightMargin": ('float',), + "QPageLayout.setTopMargin": ('float',), + "QPageLayout.setUnits": ('PySide2.QtGui.QPageLayout.Unit',), + "QPageLayout.swap": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.units": (), + + # class PySide2.QtGui.QPageSize: + "QPageSize.__init__": [(), ('PySide2.QtCore.QSize', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.__copy__": (), + "QPageSize.definitionSize": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.definitionUnits": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.id": [(), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('int',)], + "QPageSize.isEquivalentTo": ('PySide2.QtGui.QPageSize',), + "QPageSize.isValid": (), + "QPageSize.key": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.name": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.rect": ('PySide2.QtGui.QPageSize.Unit',), + "QPageSize.rectPixels": ('int',), + "QPageSize.rectPoints": (), + "QPageSize.size": [('PySide2.QtGui.QPageSize.PageSizeId', 'PySide2.QtGui.QPageSize.Unit'), ('PySide2.QtGui.QPageSize.Unit',)], + "QPageSize.sizePixels": [('PySide2.QtGui.QPageSize.PageSizeId', 'int'), ('int',)], + "QPageSize.sizePoints": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.swap": ('PySide2.QtGui.QPageSize',), + "QPageSize.windowsId": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + + # class PySide2.QtGui.QPagedPaintDevice: + "QPagedPaintDevice.__init__": (), + "QPagedPaintDevice.devicePageLayout": [], + "QPagedPaintDevice.margins": (), + "QPagedPaintDevice.newPage": (), + "QPagedPaintDevice.pageLayout": (), + "QPagedPaintDevice.pageSize": (), + "QPagedPaintDevice.pageSizeMM": (), + "QPagedPaintDevice.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPagedPaintDevice.setPageLayout": ('PySide2.QtGui.QPageLayout',), + "QPagedPaintDevice.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit')], + "QPagedPaintDevice.setPageOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPagedPaintDevice.setPageSize": [('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPagedPaintDevice.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtGui.QPaintDevice: + "QPaintDevice.__init__": (), + "QPaintDevice.colorCount": (), + "QPaintDevice.depth": (), + "QPaintDevice.devType": (), + "QPaintDevice.devicePixelRatio": (), + "QPaintDevice.devicePixelRatioF": (), + "QPaintDevice.devicePixelRatioFScale": (), + "QPaintDevice.height": (), + "QPaintDevice.heightMM": (), + "QPaintDevice.initPainter": ('PySide2.QtGui.QPainter',), + "QPaintDevice.logicalDpiX": (), + "QPaintDevice.logicalDpiY": (), + "QPaintDevice.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDevice.paintEngine": (), + "QPaintDevice.paintingActive": (), + "QPaintDevice.physicalDpiX": (), + "QPaintDevice.physicalDpiY": (), + "QPaintDevice.redirected": ('PySide2.QtCore.QPoint',), + "QPaintDevice.sharedPainter": (), + "QPaintDevice.width": (), + "QPaintDevice.widthMM": (), + + # class PySide2.QtGui.QPaintDeviceWindow: + "QPaintDeviceWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDeviceWindow.event": ('PySide2.QtCore.QEvent',), + "QPaintDeviceWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QPaintDeviceWindow.paintEngine": (), + "QPaintDeviceWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPaintDeviceWindow.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + + # class PySide2.QtGui.QPaintEngine: + "QPaintEngine.__init__": ('PaintEngineFeatures',), + "QPaintEngine.begin": ('PySide2.QtGui.QPaintDevice',), + "QPaintEngine.clearDirty": ('DirtyFlags',), + "QPaintEngine.coordinateOffset": (), + "QPaintEngine.drawEllipse": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QPaintEngine.drawImage": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), + "QPaintEngine.drawLines": [('PySide2.QtCore.QLine', 'int'), ('PySide2.QtCore.QLineF', 'int')], + "QPaintEngine.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPaintEngine.drawPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), + "QPaintEngine.drawPoints": [('PySide2.QtCore.QPoint', 'int'), ('PySide2.QtCore.QPointF', 'int')], + "QPaintEngine.drawPolygon": [('PySide2.QtCore.QPoint', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode')], + "QPaintEngine.drawRects": [('PySide2.QtCore.QRect', 'int'), ('PySide2.QtCore.QRectF', 'int')], + "QPaintEngine.drawTextItem": ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), + "QPaintEngine.drawTiledPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), + "QPaintEngine.end": (), + "QPaintEngine.hasFeature": ('PaintEngineFeatures',), + "QPaintEngine.isActive": (), + "QPaintEngine.isExtended": (), + "QPaintEngine.paintDevice": (), + "QPaintEngine.painter": (), + "QPaintEngine.setActive": ('bool',), + "QPaintEngine.setDirty": ('DirtyFlags',), + "QPaintEngine.setSystemClip": ('PySide2.QtGui.QRegion',), + "QPaintEngine.setSystemRect": ('PySide2.QtCore.QRect',), + "QPaintEngine.syncState": (), + "QPaintEngine.systemClip": (), + "QPaintEngine.systemRect": (), + "QPaintEngine.testDirty": ('DirtyFlags',), + "QPaintEngine.type": (), + "QPaintEngine.updateState": ('PySide2.QtGui.QPaintEngineState',), + + # class PySide2.QtGui.QPaintEngineState: + "QPaintEngineState.__init__": (), + "QPaintEngineState.backgroundBrush": (), + "QPaintEngineState.backgroundMode": (), + "QPaintEngineState.brush": (), + "QPaintEngineState.brushNeedsResolving": (), + "QPaintEngineState.brushOrigin": (), + "QPaintEngineState.clipOperation": (), + "QPaintEngineState.clipPath": (), + "QPaintEngineState.clipRegion": (), + "QPaintEngineState.compositionMode": (), + "QPaintEngineState.font": (), + "QPaintEngineState.isClipEnabled": (), + "QPaintEngineState.matrix": (), + "QPaintEngineState.opacity": (), + "QPaintEngineState.painter": (), + "QPaintEngineState.pen": (), + "QPaintEngineState.penNeedsResolving": (), + "QPaintEngineState.renderHints": (), + "QPaintEngineState.state": (), + "QPaintEngineState.transform": (), + + # class PySide2.QtGui.QPaintEvent: + "QPaintEvent.__init__": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QPaintEvent.rect": (), + "QPaintEvent.region": (), + + # class PySide2.QtGui.QPainter: + "QPainter.__init__": [(), ('PySide2.QtGui.QPaintDevice',)], + "QPainter.background": (), + "QPainter.backgroundMode": (), + "QPainter.begin": ('PySide2.QtGui.QPaintDevice',), + "QPainter.beginNativePainting": (), + "QPainter.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str'), ('PySide2.QtCore.QRectF', 'int', 'str'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str')], + "QPainter.brush": (), + "QPainter.brushOrigin": (), + "QPainter.clipBoundingRect": (), + "QPainter.clipPath": (), + "QPainter.clipRegion": (), + "QPainter.combinedMatrix": (), + "QPainter.combinedTransform": (), + "QPainter.compositionMode": (), + "QPainter.device": (), + "QPainter.deviceMatrix": (), + "QPainter.deviceTransform": (), + "QPainter.drawArc": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawChord": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawConvexPolygon": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawEllipse": [('PySide2.QtCore.QPoint', 'int', 'int'), ('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawImage": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'ImageConversionFlags'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'ImageConversionFlags'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), ('int', 'int', 'PySide2.QtGui.QImage', 'int', 'int', 'int', 'int', 'ImageConversionFlags')], + "QPainter.drawLine": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int')], + "QPainter.drawLines": ['list'], + "QPainter.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPainter.drawPicture": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPicture'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPicture'), ('int', 'int', 'PySide2.QtGui.QPicture')], + "QPainter.drawPie": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmap": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmapFragments": ('PySide2.QtGui.QPainter.PixmapFragment', 'int', 'PySide2.QtGui.QPixmap', 'PixmapFragmentHints'), + "QPainter.drawPoint": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.drawPoints": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawPolygon": [('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.FillRule'), ('list', 'PySide2.QtCore.Qt.FillRule')], + "QPainter.drawPolyline": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawRects": ['list'], + "QPainter.drawRoundRect": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawRoundedRect": [('PySide2.QtCore.QRect', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('int', 'int', 'int', 'int', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainter.drawStaticText": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QStaticText'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QStaticText'), ('int', 'int', 'PySide2.QtGui.QStaticText')], + "QPainter.drawText": [('PySide2.QtCore.QPoint', 'str'), ('PySide2.QtCore.QPointF', 'str'), ('PySide2.QtCore.QRect', 'int', 'str', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'int', 'str', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str', 'PySide2.QtCore.QRect'), ('int', 'int', 'str')], + "QPainter.drawTextItem": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QTextItem'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), ('int', 'int', 'PySide2.QtGui.QTextItem')], + "QPainter.drawTiledPixmap": [('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int')], + "QPainter.end": (), + "QPainter.endNativePainting": (), + "QPainter.eraseRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.fillPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QBrush'), + "QPainter.fillRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.BrushStyle'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.GlobalColor'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QBrush'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QColor')], + "QPainter.font": (), + "QPainter.fontInfo": (), + "QPainter.fontMetrics": (), + "QPainter.hasClipping": (), + "QPainter.initFrom": ('PySide2.QtGui.QPaintDevice',), + "QPainter.isActive": (), + "QPainter.layoutDirection": (), + "QPainter.matrix": (), + "QPainter.matrixEnabled": (), + "QPainter.opacity": (), + "QPainter.paintEngine": (), + "QPainter.pen": (), + "QPainter.redirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.renderHints": (), + "QPainter.resetMatrix": (), + "QPainter.resetTransform": (), + "QPainter.restore": (), + "QPainter.restoreRedirected": ('PySide2.QtGui.QPaintDevice',), + "QPainter.rotate": ('float',), + "QPainter.save": (), + "QPainter.scale": ('float', 'float'), + "QPainter.setBackground": ('PySide2.QtGui.QBrush',), + "QPainter.setBackgroundMode": ('PySide2.QtCore.Qt.BGMode',), + "QPainter.setBrush": [('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtGui.QBrush',)], + "QPainter.setBrushOrigin": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.setClipPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ClipOperation'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ClipOperation'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ClipOperation')], + "QPainter.setClipRegion": ('PySide2.QtGui.QRegion', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipping": ('bool',), + "QPainter.setCompositionMode": ('PySide2.QtGui.QPainter.CompositionMode',), + "QPainter.setFont": ('PySide2.QtGui.QFont',), + "QPainter.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QPainter.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setMatrixEnabled": ('bool',), + "QPainter.setOpacity": ('float',), + "QPainter.setPen": [('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPainter.setRedirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QPainter.setRenderHints": ('RenderHints', 'bool'), + "QPainter.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.setViewTransformEnabled": ('bool',), + "QPainter.setViewport": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWindow": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWorldMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setWorldMatrixEnabled": ('bool',), + "QPainter.setWorldTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.shear": ('float', 'float'), + "QPainter.strokePath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen'), + "QPainter.testRenderHint": ('PySide2.QtGui.QPainter.RenderHint',), + "QPainter.transform": (), + "QPainter.translate": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainter.viewTransformEnabled": (), + "QPainter.viewport": (), + "QPainter.window": (), + "QPainter.worldMatrix": (), + "QPainter.worldMatrixEnabled": (), + "QPainter.worldTransform": (), + + # class PySide2.QtGui.QPainterPath: + "QPainterPath.__init__": [(), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.__copy__": (), + "QPainterPath.addEllipse": [('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.addPolygon": ('PySide2.QtGui.QPolygonF',), + "QPainterPath.addRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addRegion": ('PySide2.QtGui.QRegion',), + "QPainterPath.addRoundRect": [('PySide2.QtCore.QRectF', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QPainterPath.addRoundedRect": [('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('float', 'float', 'float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainterPath.addText": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QFont', 'str'), ('float', 'float', 'PySide2.QtGui.QFont', 'str')], + "QPainterPath.angleAtPercent": ('float',), + "QPainterPath.arcMoveTo": [('PySide2.QtCore.QRectF', 'float'), ('float', 'float', 'float', 'float', 'float')], + "QPainterPath.arcTo": [('PySide2.QtCore.QRectF', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.boundingRect": (), + "QPainterPath.closeSubpath": (), + "QPainterPath.connectPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.controlPointRect": (), + "QPainterPath.cubicTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.currentPosition": (), + "QPainterPath.elementAt": ('int',), + "QPainterPath.elementCount": (), + "QPainterPath.fillRule": (), + "QPainterPath.intersected": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.intersects": [('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.isEmpty": (), + "QPainterPath.length": (), + "QPainterPath.lineTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.percentAtLength": ('float',), + "QPainterPath.pointAtPercent": ('float',), + "QPainterPath.quadTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QPainterPath.setElementPositionAt": ('int', 'float', 'float'), + "QPainterPath.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QPainterPath.simplified": (), + "QPainterPath.slopeAtPercent": ('float',), + "QPainterPath.subtracted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.subtractedInverted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.swap": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.toFillPolygon": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toFillPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toReversed": (), + "QPainterPath.toSubpathPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.united": ('PySide2.QtGui.QPainterPath',), + + # class PySide2.QtGui.QPainterPathStroker: + "QPainterPathStroker.__init__": [(), ('PySide2.QtGui.QPen',)], + "QPainterPathStroker.capStyle": (), + "QPainterPathStroker.createStroke": ('PySide2.QtGui.QPainterPath',), + "QPainterPathStroker.curveThreshold": (), + "QPainterPathStroker.dashOffset": (), + "QPainterPathStroker.dashPattern": (), + "QPainterPathStroker.joinStyle": (), + "QPainterPathStroker.miterLimit": (), + "QPainterPathStroker.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPainterPathStroker.setCurveThreshold": ('float',), + "QPainterPathStroker.setDashOffset": ('float',), + "QPainterPathStroker.setDashPattern": [('PySide2.QtCore.Qt.PenStyle',), ('list',)], + "QPainterPathStroker.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPainterPathStroker.setMiterLimit": ('float',), + "QPainterPathStroker.setWidth": ('float',), + "QPainterPathStroker.width": (), + + # class PySide2.QtGui.QPalette: + "QPalette.__init__": [(), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette',)], + "QPalette.__copy__": (), + "QPalette.alternateBase": (), + "QPalette.background": (), + "QPalette.base": (), + "QPalette.brightText": (), + "QPalette.brush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.button": (), + "QPalette.buttonText": (), + "QPalette.cacheKey": (), + "QPalette.color": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.currentColorGroup": (), + "QPalette.dark": (), + "QPalette.foreground": (), + "QPalette.highlight": (), + "QPalette.highlightedText": (), + "QPalette.isBrushSet": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), + "QPalette.isCopyOf": ('PySide2.QtGui.QPalette',), + "QPalette.isEqual": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorGroup'), + "QPalette.light": (), + "QPalette.link": (), + "QPalette.linkVisited": (), + "QPalette.mid": (), + "QPalette.midlight": (), + "QPalette.resolve": [(), ('PySide2.QtGui.QPalette',), ('int',)], + "QPalette.setBrush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush')], + "QPalette.setColor": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor')], + "QPalette.setColorGroup": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), + "QPalette.setCurrentColorGroup": ('PySide2.QtGui.QPalette.ColorGroup',), + "QPalette.shadow": (), + "QPalette.swap": ('PySide2.QtGui.QPalette',), + "QPalette.text": (), + "QPalette.toolTipBase": (), + "QPalette.toolTipText": (), + "QPalette.window": (), + "QPalette.windowText": (), + + # class PySide2.QtGui.QPdfWriter: + "QPdfWriter.__init__": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPdfWriter.creator": (), + "QPdfWriter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPdfWriter.newPage": (), + "QPdfWriter.paintEngine": (), + "QPdfWriter.resolution": (), + "QPdfWriter.setCreator": ('str',), + "QPdfWriter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPdfWriter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPdfWriter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPdfWriter.setResolution": ('int',), + "QPdfWriter.setTitle": ('str',), + "QPdfWriter.title": (), + + # class PySide2.QtGui.QPen: + "QPen.__init__": [(), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QBrush', 'float', 'PySide2.QtCore.Qt.PenStyle', 'PySide2.QtCore.Qt.PenCapStyle', 'PySide2.QtCore.Qt.PenJoinStyle'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPen.__copy__": (), + "QPen.brush": (), + "QPen.capStyle": (), + "QPen.color": (), + "QPen.dashOffset": (), + "QPen.dashPattern": (), + "QPen.isCosmetic": (), + "QPen.isSolid": (), + "QPen.joinStyle": (), + "QPen.miterLimit": (), + "QPen.setBrush": ('PySide2.QtGui.QBrush',), + "QPen.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPen.setColor": ('PySide2.QtGui.QColor',), + "QPen.setCosmetic": ('bool',), + "QPen.setDashOffset": ('float',), + "QPen.setDashPattern": ('list',), + "QPen.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPen.setMiterLimit": ('float',), + "QPen.setStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QPen.setWidth": ('int',), + "QPen.setWidthF": ('float',), + "QPen.style": (), + "QPen.swap": ('PySide2.QtGui.QPen',), + "QPen.width": (), + "QPen.widthF": (), + + # class PySide2.QtGui.QPicture: + "QPicture.__init__": [('PySide2.QtGui.QPicture',), ('int',)], + "QPicture.__copy__": (), + "QPicture.boundingRect": (), + "QPicture.data": (), + "QPicture.devType": (), + "QPicture.inputFormatList": (), + "QPicture.inputFormats": (), + "QPicture.isNull": (), + "QPicture.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPicture.outputFormatList": (), + "QPicture.outputFormats": (), + "QPicture.paintEngine": (), + "QPicture.pictureFormat": ('str',), + "QPicture.play": ('PySide2.QtGui.QPainter',), + "QPicture.save": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.setBoundingRect": ('PySide2.QtCore.QRect',), + "QPicture.setData": ('str', 'int'), + "QPicture.size": (), + "QPicture.swap": ('PySide2.QtGui.QPicture',), + + # class PySide2.QtGui.QPictureIO: + "QPictureIO.__init__": [(), ('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPictureIO.description": (), + "QPictureIO.fileName": (), + "QPictureIO.format": (), + "QPictureIO.gamma": (), + "QPictureIO.inputFormats": (), + "QPictureIO.ioDevice": (), + "QPictureIO.outputFormats": (), + "QPictureIO.parameters": (), + "QPictureIO.picture": (), + "QPictureIO.pictureFormat": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPictureIO.quality": (), + "QPictureIO.read": (), + "QPictureIO.setDescription": ('str',), + "QPictureIO.setFileName": ('str',), + "QPictureIO.setFormat": ('str',), + "QPictureIO.setGamma": ('float',), + "QPictureIO.setIODevice": ('PySide2.QtCore.QIODevice',), + "QPictureIO.setParameters": ('str',), + "QPictureIO.setPicture": ('PySide2.QtGui.QPicture',), + "QPictureIO.setQuality": ('int',), + "QPictureIO.setStatus": ('int',), + "QPictureIO.status": (), + "QPictureIO.write": (), + + # class PySide2.QtGui.QPixelFormat: + "QPixelFormat.__init__": [(), ('PySide2.QtGui.QPixelFormat',), ('PySide2.QtGui.QPixelFormat.ColorModel', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.QtGui.QPixelFormat.AlphaUsage', 'PySide2.QtGui.QPixelFormat.AlphaPosition', 'PySide2.QtGui.QPixelFormat.AlphaPremultiplied', 'PySide2.QtGui.QPixelFormat.TypeInterpretation', 'PySide2.QtGui.QPixelFormat.ByteOrder', 'PySide2.support.signature.typing.Union[str, int]')], + "QPixelFormat.__copy__": (), + "QPixelFormat.alphaPosition": (), + "QPixelFormat.alphaSize": (), + "QPixelFormat.alphaUsage": (), + "QPixelFormat.bitsPerPixel": (), + "QPixelFormat.blackSize": (), + "QPixelFormat.blueSize": (), + "QPixelFormat.brightnessSize": (), + "QPixelFormat.byteOrder": (), + "QPixelFormat.channelCount": (), + "QPixelFormat.colorModel": (), + "QPixelFormat.cyanSize": (), + "QPixelFormat.greenSize": (), + "QPixelFormat.hueSize": (), + "QPixelFormat.lightnessSize": (), + "QPixelFormat.magentaSize": (), + "QPixelFormat.premultiplied": (), + "QPixelFormat.redSize": (), + "QPixelFormat.saturationSize": (), + "QPixelFormat.subEnum": (), + "QPixelFormat.typeInterpretation": (), + "QPixelFormat.yellowSize": (), + "QPixelFormat.yuvLayout": (), + + # class PySide2.QtGui.QPixmap: + "QPixmap.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',), ('PySide2.support.signature.typing.List',), ('int', 'int'), ('str', 'str', 'ImageConversionFlags')], + "QPixmap.__copy__": (), + "QPixmap.cacheKey": (), + "QPixmap.convertFromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPixmap.createHeuristicMask": ('bool',), + "QPixmap.createMaskFromColor": ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.MaskMode'), + "QPixmap.defaultDepth": (), + "QPixmap.depth": (), + "QPixmap.devType": (), + "QPixmap.devicePixelRatio": (), + "QPixmap.fill": [('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QPaintDevice', 'int', 'int')], + "QPixmap.fromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.fromImageInPlace": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.fromImageReader": ('PySide2.QtGui.QImageReader', 'ImageConversionFlags'), + "QPixmap.grabWidget": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QObject', 'int', 'int', 'int', 'int')], + "QPixmap.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QPixmap.hasAlpha": (), + "QPixmap.hasAlphaChannel": (), + "QPixmap.height": (), + "QPixmap.isNull": (), + "QPixmap.isQBitmap": (), + "QPixmap.load": ('str', 'str', 'ImageConversionFlags'), + "QPixmap.loadFromData": [('PySide2.QtCore.QByteArray', 'str', 'ImageConversionFlags'), ('PySide2.support.signature.typing.Union[str, int]', 'int', 'str', 'ImageConversionFlags')], + "QPixmap.mask": (), + "QPixmap.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPixmap.paintEngine": (), + "QPixmap.rect": (), + "QPixmap.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QPixmap.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scroll": [('int', 'int', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion'), ('int', 'int', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion')], + "QPixmap.setDevicePixelRatio": ('float',), + "QPixmap.setMask": ('PySide2.QtGui.QBitmap',), + "QPixmap.size": (), + "QPixmap.swap": ('PySide2.QtGui.QPixmap',), + "QPixmap.toImage": (), + "QPixmap.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QPixmap.width": (), + + # class PySide2.QtGui.QPixmapCache: + "QPixmapCache.__init__": (), + "QPixmapCache.cacheLimit": (), + "QPixmapCache.clear": (), + "QPixmapCache.find": [('PySide2.QtGui.QPixmapCache.Key',), ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), ('str',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.insert": [('PySide2.QtGui.QPixmap',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.remove": [('PySide2.QtGui.QPixmapCache.Key',), ('str',)], + "QPixmapCache.replace": ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), + "QPixmapCache.setCacheLimit": ('int',), + + # class PySide2.QtGui.QPolygon: + "QPolygon.__init__": [(), ('PySide2.QtCore.QRect', 'bool'), ('PySide2.QtGui.QPolygon',), ('int',), ('list',)], + "QPolygon.__copy__": (), + "QPolygon.__reduce__": (), + "QPolygon.append": [('PySide2.QtCore.QPoint',), ('list',)], + "QPolygon.at": ('int',), + "QPolygon.boundingRect": (), + "QPolygon.capacity": (), + "QPolygon.clear": (), + "QPolygon.constData": (), + "QPolygon.constFirst": (), + "QPolygon.constLast": (), + "QPolygon.contains": ('PySide2.QtCore.QPoint',), + "QPolygon.containsPoint": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.Qt.FillRule'), + "QPolygon.count": [(), ('PySide2.QtCore.QPoint',)], + "QPolygon.data": [], + "QPolygon.empty": (), + "QPolygon.endsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.fill": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.first": [], + "QPolygon.fromList": ('list',), + "QPolygon.front": (), + "QPolygon.indexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.insert": [('int', 'PySide2.QtCore.QPoint'), ('int', 'int', 'PySide2.QtCore.QPoint')], + "QPolygon.intersected": ('PySide2.QtGui.QPolygon',), + "QPolygon.isEmpty": (), + "QPolygon.isSharedWith": ('list',), + "QPolygon.last": [], + "QPolygon.lastIndexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.length": (), + "QPolygon.mid": ('int', 'int'), + "QPolygon.move": ('int', 'int'), + "QPolygon.pop_back": (), + "QPolygon.pop_front": (), + "QPolygon.prepend": ('PySide2.QtCore.QPoint',), + "QPolygon.push_back": ('PySide2.QtCore.QPoint',), + "QPolygon.push_front": ('PySide2.QtCore.QPoint',), + "QPolygon.remove": [('int',), ('int', 'int')], + "QPolygon.removeAll": ('PySide2.QtCore.QPoint',), + "QPolygon.removeAt": ('int',), + "QPolygon.removeFirst": (), + "QPolygon.removeLast": (), + "QPolygon.removeOne": ('PySide2.QtCore.QPoint',), + "QPolygon.replace": ('int', 'PySide2.QtCore.QPoint'), + "QPolygon.reserve": ('int',), + "QPolygon.resize": ('int',), + "QPolygon.setSharable": ('bool',), + "QPolygon.size": (), + "QPolygon.squeeze": (), + "QPolygon.startsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.subtracted": ('PySide2.QtGui.QPolygon',), + "QPolygon.swap": ('PySide2.QtGui.QPolygon',), + "QPolygon.takeAt": ('int',), + "QPolygon.takeFirst": (), + "QPolygon.takeLast": (), + "QPolygon.toList": (), + "QPolygon.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.united": ('PySide2.QtGui.QPolygon',), + "QPolygon.value": [('int',), ('int', 'PySide2.QtCore.QPoint')], + + # class PySide2.QtGui.QPolygonF: + "QPolygonF.__init__": [(), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('int',), ('list',)], + "QPolygonF.__copy__": (), + "QPolygonF.append": [('PySide2.QtCore.QPointF',), ('list',)], + "QPolygonF.at": ('int',), + "QPolygonF.boundingRect": (), + "QPolygonF.capacity": (), + "QPolygonF.clear": (), + "QPolygonF.constData": (), + "QPolygonF.constFirst": (), + "QPolygonF.constLast": (), + "QPolygonF.contains": ('PySide2.QtCore.QPointF',), + "QPolygonF.containsPoint": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.FillRule'), + "QPolygonF.count": [(), ('PySide2.QtCore.QPointF',)], + "QPolygonF.data": [], + "QPolygonF.empty": (), + "QPolygonF.endsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.fill": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.first": [], + "QPolygonF.fromList": ('list',), + "QPolygonF.front": (), + "QPolygonF.indexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.insert": [('int', 'PySide2.QtCore.QPointF'), ('int', 'int', 'PySide2.QtCore.QPointF')], + "QPolygonF.intersected": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.isClosed": (), + "QPolygonF.isEmpty": (), + "QPolygonF.isSharedWith": ('list',), + "QPolygonF.last": [], + "QPolygonF.lastIndexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.length": (), + "QPolygonF.mid": ('int', 'int'), + "QPolygonF.move": ('int', 'int'), + "QPolygonF.pop_back": (), + "QPolygonF.pop_front": (), + "QPolygonF.prepend": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_back": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_front": ('PySide2.QtCore.QPointF',), + "QPolygonF.remove": [('int',), ('int', 'int')], + "QPolygonF.removeAll": ('PySide2.QtCore.QPointF',), + "QPolygonF.removeAt": ('int',), + "QPolygonF.removeFirst": (), + "QPolygonF.removeLast": (), + "QPolygonF.removeOne": ('PySide2.QtCore.QPointF',), + "QPolygonF.replace": ('int', 'PySide2.QtCore.QPointF'), + "QPolygonF.reserve": ('int',), + "QPolygonF.resize": ('int',), + "QPolygonF.setSharable": ('bool',), + "QPolygonF.size": (), + "QPolygonF.squeeze": (), + "QPolygonF.startsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.subtracted": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.swap": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.takeAt": ('int',), + "QPolygonF.takeFirst": (), + "QPolygonF.takeLast": (), + "QPolygonF.toList": (), + "QPolygonF.toPolygon": (), + "QPolygonF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.united": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.value": [('int',), ('int', 'PySide2.QtCore.QPointF')], + + # class PySide2.QtGui.QPyTextObject: + "QPyTextObject.__init__": ('PySide2.QtCore.QObject',), + "QPyTextObject.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QPyTextObject.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QQuaternion: + "QQuaternion.__init__": [(), ('PySide2.QtGui.QQuaternion',), ('PySide2.QtGui.QVector4D',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QQuaternion.__copy__": (), + "QQuaternion.__reduce__": (), + "QQuaternion.conjugate": (), + "QQuaternion.conjugated": (), + "QQuaternion.dotProduct": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion'), + "QQuaternion.fromAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromAxisAndAngle": [('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QQuaternion.fromDirection": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromEulerAngles": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.fromRotationMatrix": ('PySide2.QtGui.QMatrix3x3',), + "QQuaternion.getAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.inverted": (), + "QQuaternion.isIdentity": (), + "QQuaternion.isNull": (), + "QQuaternion.length": (), + "QQuaternion.lengthSquared": (), + "QQuaternion.nlerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.normalize": (), + "QQuaternion.normalized": (), + "QQuaternion.rotatedVector": ('PySide2.QtGui.QVector3D',), + "QQuaternion.rotationTo": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.scalar": (), + "QQuaternion.setScalar": ('float',), + "QQuaternion.setVector": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.setX": ('float',), + "QQuaternion.setY": ('float',), + "QQuaternion.setZ": ('float',), + "QQuaternion.slerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.toEulerAngles": (), + "QQuaternion.toRotationMatrix": (), + "QQuaternion.toVector4D": (), + "QQuaternion.vector": (), + "QQuaternion.x": (), + "QQuaternion.y": (), + "QQuaternion.z": (), + + # class PySide2.QtGui.QRadialGradient: + "QRadialGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QRadialGradient',), ('float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QRadialGradient.__copy__": (), + "QRadialGradient.center": (), + "QRadialGradient.centerRadius": (), + "QRadialGradient.focalPoint": (), + "QRadialGradient.focalRadius": (), + "QRadialGradient.radius": (), + "QRadialGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setCenterRadius": ('float',), + "QRadialGradient.setFocalPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setFocalRadius": ('float',), + "QRadialGradient.setRadius": ('float',), + + # class PySide2.QtGui.QRasterWindow: + "QRasterWindow.__init__": ('PySide2.QtGui.QWindow',), + "QRasterWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QRasterWindow.redirected": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtGui.QRawFont: + "QRawFont.__init__": [(), ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), ('PySide2.QtGui.QRawFont',), ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference')], + "QRawFont.__copy__": (), + "QRawFont.advancesForGlyphIndexes": [('list',), ('list', 'LayoutFlags')], + "QRawFont.alphaMapForGlyph": ('int', 'PySide2.QtGui.QRawFont.AntialiasingType', 'PySide2.QtGui.QTransform'), + "QRawFont.ascent": (), + "QRawFont.averageCharWidth": (), + "QRawFont.boundingRect": ('int',), + "QRawFont.descent": (), + "QRawFont.familyName": (), + "QRawFont.fontTable": ('str',), + "QRawFont.fromFont": ('PySide2.QtGui.QFont', 'PySide2.QtGui.QFontDatabase.WritingSystem'), + "QRawFont.glyphIndexesForString": ('str',), + "QRawFont.hintingPreference": (), + "QRawFont.isValid": (), + "QRawFont.leading": (), + "QRawFont.lineThickness": (), + "QRawFont.loadFromData": ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.loadFromFile": ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.maxCharWidth": (), + "QRawFont.pathForGlyph": ('int',), + "QRawFont.pixelSize": (), + "QRawFont.setPixelSize": ('float',), + "QRawFont.style": (), + "QRawFont.styleName": (), + "QRawFont.supportedWritingSystems": (), + "QRawFont.supportsCharacter": [('PySide2.support.signature.typing.Union[str, int]',), ('int',)], + "QRawFont.swap": ('PySide2.QtGui.QRawFont',), + "QRawFont.underlinePosition": (), + "QRawFont.unitsPerEm": (), + "QRawFont.weight": (), + "QRawFont.xHeight": (), + + # class PySide2.QtGui.QRegExpValidator: + "QRegExpValidator.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRegExp', 'PySide2.QtCore.QObject')], + "QRegExpValidator.regExp": (), + "QRegExpValidator.setRegExp": ('PySide2.QtCore.QRegExp',), + "QRegExpValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QRegion: + "QRegion.__init__": [(), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion.RegionType'), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion.RegionType')], + "QRegion.__copy__": (), + "QRegion.boundingRect": (), + "QRegion.contains": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',)], + "QRegion.intersected": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.intersects": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.isEmpty": (), + "QRegion.isNull": (), + "QRegion.rectCount": (), + "QRegion.rects": (), + "QRegion.setRects": ('PySide2.QtCore.QRect', 'int'), + "QRegion.subtracted": ('PySide2.QtGui.QRegion',), + "QRegion.swap": ('PySide2.QtGui.QRegion',), + "QRegion.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.united": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.xored": ('PySide2.QtGui.QRegion',), + + # class PySide2.QtGui.QResizeEvent: + "QResizeEvent.__init__": ('PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QResizeEvent.oldSize": (), + "QResizeEvent.size": (), + + # class PySide2.QtGui.QScreen: + "QScreen.physicalDotsPerInchX": (), + "QScreen.angleBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation'), + "QScreen.availableGeometry": (), + "QScreen.availableSize": (), + "QScreen.availableVirtualGeometry": (), + "QScreen.availableVirtualSize": (), + "QScreen.depth": (), + "QScreen.devicePixelRatio": (), + "QScreen.geometry": (), + "QScreen.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QScreen.isLandscape": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.isPortrait": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.logicalDotsPerInch": (), + "QScreen.logicalDotsPerInchX": (), + "QScreen.logicalDotsPerInchY": (), + "QScreen.mapBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.name": (), + "QScreen.nativeOrientation": (), + "QScreen.orientation": (), + "QScreen.orientationUpdateMask": (), + "QScreen.physicalDotsPerInch": (), + "QScreen.physicalDotsPerInchY": (), + "QScreen.physicalSize": (), + "QScreen.primaryOrientation": (), + "QScreen.refreshRate": (), + "QScreen.setOrientationUpdateMask": ('ScreenOrientations',), + "QScreen.size": (), + "QScreen.transformBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.virtualGeometry": (), + "QScreen.virtualSiblings": (), + "QScreen.virtualSize": (), + + # class PySide2.QtGui.QSessionManager: + "QSessionManager.cancel": (), + "QSessionManager.allowsErrorInteraction": (), + "QSessionManager.allowsInteraction": (), + "QSessionManager.discardCommand": (), + "QSessionManager.isPhase2": (), + "QSessionManager.release": (), + "QSessionManager.requestPhase2": (), + "QSessionManager.restartCommand": (), + "QSessionManager.restartHint": (), + "QSessionManager.sessionId": (), + "QSessionManager.sessionKey": (), + "QSessionManager.setDiscardCommand": ('PySide2.support.signature.typing.List',), + "QSessionManager.setManagerProperty": [('str', 'PySide2.support.signature.typing.List'), ('str', 'str')], + "QSessionManager.setRestartCommand": ('PySide2.support.signature.typing.List',), + "QSessionManager.setRestartHint": ('PySide2.QtGui.QSessionManager.RestartHint',), + + # class PySide2.QtGui.QShortcutEvent: + "QShortcutEvent.__init__": ('PySide2.QtGui.QKeySequence', 'int', 'bool'), + + # class PySide2.QtGui.QShowEvent: + "QShowEvent.__init__": (), + + # class PySide2.QtGui.QStandardItem: + "QStandardItem.__init__": [(), ('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QStandardItem',), ('int', 'int'), ('str',)], + "QStandardItem.accessibleDescription": (), + "QStandardItem.accessibleText": (), + "QStandardItem.appendColumn": ('list',), + "QStandardItem.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItem.appendRows": ('list',), + "QStandardItem.background": (), + "QStandardItem.checkState": (), + "QStandardItem.child": ('int', 'int'), + "QStandardItem.clone": (), + "QStandardItem.column": (), + "QStandardItem.columnCount": (), + "QStandardItem.data": ('int',), + "QStandardItem.emitDataChanged": (), + "QStandardItem.flags": (), + "QStandardItem.font": (), + "QStandardItem.foreground": (), + "QStandardItem.hasChildren": (), + "QStandardItem.icon": (), + "QStandardItem.index": (), + "QStandardItem.insertColumn": ('int', 'list'), + "QStandardItem.insertColumns": ('int', 'int'), + "QStandardItem.insertRow": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItem.insertRows": [('int', 'int'), ('int', 'list')], + "QStandardItem.isAutoTristate": (), + "QStandardItem.isCheckable": (), + "QStandardItem.isDragEnabled": (), + "QStandardItem.isDropEnabled": (), + "QStandardItem.isEditable": (), + "QStandardItem.isEnabled": (), + "QStandardItem.isSelectable": (), + "QStandardItem.isTristate": (), + "QStandardItem.isUserTristate": (), + "QStandardItem.model": (), + "QStandardItem.parent": (), + "QStandardItem.read": ('PySide2.QtCore.QDataStream',), + "QStandardItem.removeColumn": ('int',), + "QStandardItem.removeColumns": ('int', 'int'), + "QStandardItem.removeRow": ('int',), + "QStandardItem.removeRows": ('int', 'int'), + "QStandardItem.row": (), + "QStandardItem.rowCount": (), + "QStandardItem.setAccessibleDescription": ('str',), + "QStandardItem.setAccessibleText": ('str',), + "QStandardItem.setAutoTristate": ('bool',), + "QStandardItem.setBackground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QStandardItem.setCheckable": ('bool',), + "QStandardItem.setChild": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItem.setColumnCount": ('int',), + "QStandardItem.setData": ('PySide2.support.signature.typing.Any', 'int'), + "QStandardItem.setDragEnabled": ('bool',), + "QStandardItem.setDropEnabled": ('bool',), + "QStandardItem.setEditable": ('bool',), + "QStandardItem.setEnabled": ('bool',), + "QStandardItem.setFlags": ('ItemFlags',), + "QStandardItem.setFont": ('PySide2.QtGui.QFont',), + "QStandardItem.setForeground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setIcon": ('PySide2.QtGui.QIcon',), + "QStandardItem.setRowCount": ('int',), + "QStandardItem.setSelectable": ('bool',), + "QStandardItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QStandardItem.setStatusTip": ('str',), + "QStandardItem.setText": ('str',), + "QStandardItem.setTextAlignment": ('Alignment',), + "QStandardItem.setToolTip": ('str',), + "QStandardItem.setTristate": ('bool',), + "QStandardItem.setUserTristate": ('bool',), + "QStandardItem.setWhatsThis": ('str',), + "QStandardItem.sizeHint": (), + "QStandardItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItem.statusTip": (), + "QStandardItem.takeChild": ('int', 'int'), + "QStandardItem.takeColumn": ('int',), + "QStandardItem.takeRow": ('int',), + "QStandardItem.text": (), + "QStandardItem.textAlignment": (), + "QStandardItem.toolTip": (), + "QStandardItem.type": (), + "QStandardItem.whatsThis": (), + "QStandardItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QStandardItemModel: + "QStandardItemModel.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QStandardItemModel.appendColumn": ('list',), + "QStandardItemModel.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItemModel.clear": (), + "QStandardItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStandardItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.findItems": ('str', 'MatchFlags', 'int'), + "QStandardItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QStandardItemModel.horizontalHeaderItem": ('int',), + "QStandardItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.indexFromItem": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.insertColumn": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'list')], + "QStandardItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.insertRow": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.invisibleRootItem": (), + "QStandardItemModel.item": ('int', 'int'), + "QStandardItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemPrototype": (), + "QStandardItemModel.mimeData": ('PySide2.support.signature.typing.List',), + "QStandardItemModel.mimeTypes": (), + "QStandardItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QStandardItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.setColumnCount": ('int',), + "QStandardItemModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QStandardItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QStandardItemModel.setHorizontalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setHorizontalHeaderLabels": ('PySide2.support.signature.typing.List',), + "QStandardItemModel.setItem": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QStandardItemModel.setItemPrototype": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.setItemRoleNames": ('dict',), + "QStandardItemModel.setRowCount": ('int',), + "QStandardItemModel.setSortRole": ('int',), + "QStandardItemModel.setVerticalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setVerticalHeaderLabels": ('PySide2.support.signature.typing.List',), + "QStandardItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItemModel.sortRole": (), + "QStandardItemModel.supportedDropActions": (), + "QStandardItemModel.takeColumn": ('int',), + "QStandardItemModel.takeHorizontalHeaderItem": ('int',), + "QStandardItemModel.takeItem": ('int', 'int'), + "QStandardItemModel.takeRow": ('int',), + "QStandardItemModel.takeVerticalHeaderItem": ('int',), + "QStandardItemModel.verticalHeaderItem": ('int',), + + # class PySide2.QtGui.QStaticText: + "QStaticText.__init__": [(), ('PySide2.QtGui.QStaticText',), ('str',)], + "QStaticText.__copy__": (), + "QStaticText.performanceHint": (), + "QStaticText.prepare": ('PySide2.QtGui.QTransform', 'PySide2.QtGui.QFont'), + "QStaticText.setPerformanceHint": ('PySide2.QtGui.QStaticText.PerformanceHint',), + "QStaticText.setText": ('str',), + "QStaticText.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QStaticText.setTextOption": ('PySide2.QtGui.QTextOption',), + "QStaticText.setTextWidth": ('float',), + "QStaticText.size": (), + "QStaticText.swap": ('PySide2.QtGui.QStaticText',), + "QStaticText.text": (), + "QStaticText.textFormat": (), + "QStaticText.textOption": (), + "QStaticText.textWidth": (), + + # class PySide2.QtGui.QStatusTipEvent: + "QStatusTipEvent.__init__": ('str',), + "QStatusTipEvent.tip": (), + + # class PySide2.QtGui.QStringListModel: + "QStringListModel.__init__": [('PySide2.QtCore.QObject',), ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QObject')], + "QStringListModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStringListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QStringListModel.setStringList": ('PySide2.support.signature.typing.List',), + "QStringListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStringListModel.stringList": (), + "QStringListModel.supportedDropActions": (), + + # class PySide2.QtGui.QStyleHints: + "QStyleHints.setFocusOnTouchRelease": (), + "QStyleHints.cursorFlashTime": (), + "QStyleHints.fontSmoothingGamma": (), + "QStyleHints.keyboardAutoRepeatRate": (), + "QStyleHints.keyboardInputInterval": (), + "QStyleHints.mouseDoubleClickInterval": (), + "QStyleHints.mousePressAndHoldInterval": (), + "QStyleHints.passwordMaskCharacter": (), + "QStyleHints.passwordMaskDelay": (), + "QStyleHints.setCursorFlashTime": ('int',), + "QStyleHints.setKeyboardInputInterval": ('int',), + "QStyleHints.setMouseDoubleClickInterval": ('int',), + "QStyleHints.setStartDragDistance": ('int',), + "QStyleHints.setStartDragTime": ('int',), + "QStyleHints.showIsFullScreen": (), + "QStyleHints.showIsMaximized": (), + "QStyleHints.singleClickActivation": (), + "QStyleHints.startDragDistance": (), + "QStyleHints.startDragTime": (), + "QStyleHints.startDragVelocity": (), + "QStyleHints.tabFocusBehavior": (), + "QStyleHints.useRtlExtensions": (), + + # class PySide2.QtGui.QSurface: + "QSurface.__init__": ('PySide2.QtGui.QSurface.SurfaceClass',), + "QSurface.format": (), + "QSurface.size": (), + "QSurface.supportsOpenGL": (), + "QSurface.surfaceClass": (), + "QSurface.surfaceHandle": (), + "QSurface.surfaceType": (), + + # class PySide2.QtGui.QSurfaceFormat: + "QSurfaceFormat.__init__": [(), ('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat',)], + "QSurfaceFormat.__copy__": (), + "QSurfaceFormat.alphaBufferSize": (), + "QSurfaceFormat.blueBufferSize": (), + "QSurfaceFormat.defaultFormat": (), + "QSurfaceFormat.depthBufferSize": (), + "QSurfaceFormat.greenBufferSize": (), + "QSurfaceFormat.hasAlpha": (), + "QSurfaceFormat.majorVersion": (), + "QSurfaceFormat.minorVersion": (), + "QSurfaceFormat.options": (), + "QSurfaceFormat.profile": (), + "QSurfaceFormat.redBufferSize": (), + "QSurfaceFormat.renderableType": (), + "QSurfaceFormat.samples": (), + "QSurfaceFormat.setAlphaBufferSize": ('int',), + "QSurfaceFormat.setBlueBufferSize": ('int',), + "QSurfaceFormat.setDefaultFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QSurfaceFormat.setDepthBufferSize": ('int',), + "QSurfaceFormat.setGreenBufferSize": ('int',), + "QSurfaceFormat.setMajorVersion": ('int',), + "QSurfaceFormat.setMinorVersion": ('int',), + "QSurfaceFormat.setOption": [('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat.FormatOption', 'bool')], + "QSurfaceFormat.setOptions": ('FormatOptions',), + "QSurfaceFormat.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QSurfaceFormat.setRedBufferSize": ('int',), + "QSurfaceFormat.setRenderableType": ('PySide2.QtGui.QSurfaceFormat.RenderableType',), + "QSurfaceFormat.setSamples": ('int',), + "QSurfaceFormat.setStencilBufferSize": ('int',), + "QSurfaceFormat.setStereo": ('bool',), + "QSurfaceFormat.setSwapBehavior": ('PySide2.QtGui.QSurfaceFormat.SwapBehavior',), + "QSurfaceFormat.setSwapInterval": ('int',), + "QSurfaceFormat.setVersion": ('int', 'int'), + "QSurfaceFormat.stencilBufferSize": (), + "QSurfaceFormat.stereo": (), + "QSurfaceFormat.swapBehavior": (), + "QSurfaceFormat.swapInterval": (), + "QSurfaceFormat.testOption": [('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat.FormatOption',)], + "QSurfaceFormat.version": (), + + # class PySide2.QtGui.QSyntaxHighlighter: + "QSyntaxHighlighter.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QTextDocument',)], + "QSyntaxHighlighter.currentBlock": (), + "QSyntaxHighlighter.currentBlockState": (), + "QSyntaxHighlighter.currentBlockUserData": (), + "QSyntaxHighlighter.document": (), + "QSyntaxHighlighter.format": ('int',), + "QSyntaxHighlighter.highlightBlock": ('str',), + "QSyntaxHighlighter.previousBlockState": (), + "QSyntaxHighlighter.rehighlight": (), + "QSyntaxHighlighter.rehighlightBlock": ('PySide2.QtGui.QTextBlock',), + "QSyntaxHighlighter.setCurrentBlockState": ('int',), + "QSyntaxHighlighter.setCurrentBlockUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QSyntaxHighlighter.setDocument": ('PySide2.QtGui.QTextDocument',), + "QSyntaxHighlighter.setFormat": [('int', 'int', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QFont'), ('int', 'int', 'PySide2.QtGui.QTextCharFormat')], + + # class PySide2.QtGui.QTabletEvent: + "QTabletEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'KeyboardModifiers', 'int'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'KeyboardModifiers', 'int', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons')], + "QTabletEvent.button": (), + "QTabletEvent.buttons": (), + "QTabletEvent.device": (), + "QTabletEvent.global"+"Y": (), + "QTabletEvent.globalPos": (), + "QTabletEvent.globalPosF": (), + "QTabletEvent.globalX": (), + "QTabletEvent.hiResGlobal"+"Y": (), + "QTabletEvent.hiResGlobalX": (), + "QTabletEvent.pointerType": (), + "QTabletEvent.pos": (), + "QTabletEvent.posF": (), + "QTabletEvent.pressure": (), + "QTabletEvent.rotation": (), + "QTabletEvent.tangentialPressure": (), + "QTabletEvent.uniqueId": (), + "QTabletEvent.x": (), + "QTabletEvent.xTilt": (), + "QTabletEvent.y": (), + "QTabletEvent.yTilt": (), + "QTabletEvent.z": (), + + # class PySide2.QtGui.QTextBlock: + "QTextBlock.__init__": [(), ('PySide2.QtGui.QTextBlock',)], + "QTextBlock.__copy__": (), + "QTextBlock.begin": (), + "QTextBlock.blockFormat": (), + "QTextBlock.blockFormatIndex": (), + "QTextBlock.blockNumber": (), + "QTextBlock.charFormat": (), + "QTextBlock.charFormatIndex": (), + "QTextBlock.clearLayout": (), + "QTextBlock.contains": ('int',), + "QTextBlock.document": (), + "QTextBlock.end": (), + "QTextBlock.firstLineNumber": (), + "QTextBlock.fragmentIndex": (), + "QTextBlock.isValid": (), + "QTextBlock.isVisible": (), + "QTextBlock.layout": (), + "QTextBlock.length": (), + "QTextBlock.lineCount": (), + "QTextBlock.next": (), + "QTextBlock.position": (), + "QTextBlock.previous": (), + "QTextBlock.revision": (), + "QTextBlock.setLineCount": ('int',), + "QTextBlock.setRevision": ('int',), + "QTextBlock.setUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QTextBlock.setUserState": ('int',), + "QTextBlock.setVisible": ('bool',), + "QTextBlock.text": (), + "QTextBlock.textDirection": (), + "QTextBlock.textFormats": (), + "QTextBlock.textList": (), + "QTextBlock.userData": (), + "QTextBlock.userState": (), + + # class PySide2.QtGui.QTextBlockFormat: + "QTextBlockFormat.__init__": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextBlockFormat.__copy__": (), + "QTextBlockFormat.alignment": (), + "QTextBlockFormat.bottomMargin": (), + "QTextBlockFormat.indent": (), + "QTextBlockFormat.isValid": (), + "QTextBlockFormat.leftMargin": (), + "QTextBlockFormat.lineHeight": [(), ('float', 'float')], + "QTextBlockFormat.lineHeightType": (), + "QTextBlockFormat.nonBreakableLines": (), + "QTextBlockFormat.pageBreakPolicy": (), + "QTextBlockFormat.rightMargin": (), + "QTextBlockFormat.setAlignment": ('Alignment',), + "QTextBlockFormat.setBottomMargin": ('float',), + "QTextBlockFormat.setIndent": ('int',), + "QTextBlockFormat.setLeftMargin": ('float',), + "QTextBlockFormat.setLineHeight": ('float', 'int'), + "QTextBlockFormat.setNonBreakableLines": ('bool',), + "QTextBlockFormat.setPageBreakPolicy": ('PageBreakFlags',), + "QTextBlockFormat.setRightMargin": ('float',), + "QTextBlockFormat.setTabPositions": ('list',), + "QTextBlockFormat.setTextIndent": ('float',), + "QTextBlockFormat.setTopMargin": ('float',), + "QTextBlockFormat.tabPositions": (), + "QTextBlockFormat.textIndent": (), + "QTextBlockFormat.topMargin": (), + + # class PySide2.QtGui.QTextBlockGroup: + "QTextBlockGroup.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextBlockGroup.blockFormatChanged": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockInserted": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockList": (), + "QTextBlockGroup.blockRemoved": ('PySide2.QtGui.QTextBlock',), + + # class PySide2.QtGui.QTextBlockUserData: + "QTextBlockUserData.__init__": (), + + # class PySide2.QtGui.QTextCharFormat: + "QTextCharFormat.__init__": [(), ('PySide2.QtGui.QTextCharFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextCharFormat.__copy__": (), + "QTextCharFormat.anchorHref": (), + "QTextCharFormat.anchorName": (), + "QTextCharFormat.anchorNames": (), + "QTextCharFormat.font": (), + "QTextCharFormat.fontCapitalization": (), + "QTextCharFormat.fontFamily": (), + "QTextCharFormat.fontFixedPitch": (), + "QTextCharFormat.fontHintingPreference": (), + "QTextCharFormat.fontItalic": (), + "QTextCharFormat.fontKerning": (), + "QTextCharFormat.fontLetterSpacing": (), + "QTextCharFormat.fontLetterSpacingType": (), + "QTextCharFormat.fontOverline": (), + "QTextCharFormat.fontPointSize": (), + "QTextCharFormat.fontStretch": (), + "QTextCharFormat.fontStrikeOut": (), + "QTextCharFormat.fontStyleHint": (), + "QTextCharFormat.fontStyleStrategy": (), + "QTextCharFormat.fontUnderline": (), + "QTextCharFormat.fontWeight": (), + "QTextCharFormat.fontWordSpacing": (), + "QTextCharFormat.isAnchor": (), + "QTextCharFormat.isValid": (), + "QTextCharFormat.setAnchor": ('bool',), + "QTextCharFormat.setAnchorHref": ('str',), + "QTextCharFormat.setAnchorName": ('str',), + "QTextCharFormat.setAnchorNames": ('PySide2.support.signature.typing.List',), + "QTextCharFormat.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior')], + "QTextCharFormat.setFontCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QTextCharFormat.setFontFamily": ('str',), + "QTextCharFormat.setFontFixedPitch": ('bool',), + "QTextCharFormat.setFontHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QTextCharFormat.setFontItalic": ('bool',), + "QTextCharFormat.setFontKerning": ('bool',), + "QTextCharFormat.setFontLetterSpacing": ('float',), + "QTextCharFormat.setFontLetterSpacingType": ('PySide2.QtGui.QFont.SpacingType',), + "QTextCharFormat.setFontOverline": ('bool',), + "QTextCharFormat.setFontPointSize": ('float',), + "QTextCharFormat.setFontStretch": ('int',), + "QTextCharFormat.setFontStrikeOut": ('bool',), + "QTextCharFormat.setFontStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QTextCharFormat.setFontStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QTextCharFormat.setFontUnderline": ('bool',), + "QTextCharFormat.setFontWeight": ('int',), + "QTextCharFormat.setFontWordSpacing": ('float',), + "QTextCharFormat.setTableCellColumnSpan": ('int',), + "QTextCharFormat.setTableCellRowSpan": ('int',), + "QTextCharFormat.setTextOutline": ('PySide2.QtGui.QPen',), + "QTextCharFormat.setToolTip": ('str',), + "QTextCharFormat.setUnderlineColor": ('PySide2.QtGui.QColor',), + "QTextCharFormat.setUnderlineStyle": ('PySide2.QtGui.QTextCharFormat.UnderlineStyle',), + "QTextCharFormat.setVerticalAlignment": ('PySide2.QtGui.QTextCharFormat.VerticalAlignment',), + "QTextCharFormat.tableCellColumnSpan": (), + "QTextCharFormat.tableCellRowSpan": (), + "QTextCharFormat.textOutline": (), + "QTextCharFormat.toolTip": (), + "QTextCharFormat.underlineColor": (), + "QTextCharFormat.underlineStyle": (), + "QTextCharFormat.verticalAlignment": (), + + # class PySide2.QtGui.QTextCursor: + "QTextCursor.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextFrame',)], + "QTextCursor.__copy__": (), + "QTextCursor.anchor": (), + "QTextCursor.atBlockEnd": (), + "QTextCursor.atBlockStart": (), + "QTextCursor.atEnd": (), + "QTextCursor.atStart": (), + "QTextCursor.beginEditBlock": (), + "QTextCursor.block": (), + "QTextCursor.blockCharFormat": (), + "QTextCursor.blockFormat": (), + "QTextCursor.blockNumber": (), + "QTextCursor.charFormat": (), + "QTextCursor.clearSelection": (), + "QTextCursor.columnNumber": (), + "QTextCursor.createList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.currentFrame": (), + "QTextCursor.currentList": (), + "QTextCursor.currentTable": (), + "QTextCursor.deleteChar": (), + "QTextCursor.deletePreviousChar": (), + "QTextCursor.document": (), + "QTextCursor.endEditBlock": (), + "QTextCursor.hasComplexSelection": (), + "QTextCursor.hasSelection": (), + "QTextCursor.insertBlock": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextBlockFormat', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.insertFragment": ('PySide2.QtGui.QTextDocumentFragment',), + "QTextCursor.insertFrame": ('PySide2.QtGui.QTextFrameFormat',), + "QTextCursor.insertHtml": ('str',), + "QTextCursor.insertImage": [('PySide2.QtGui.QImage', 'str'), ('PySide2.QtGui.QTextImageFormat',), ('PySide2.QtGui.QTextImageFormat', 'PySide2.QtGui.QTextFrameFormat.Position'), ('str',)], + "QTextCursor.insertList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.insertTable": [('int', 'int'), ('int', 'int', 'PySide2.QtGui.QTextTableFormat')], + "QTextCursor.insertText": [('str',), ('str', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.isCopyOf": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.isNull": (), + "QTextCursor.joinPreviousEditBlock": (), + "QTextCursor.keepPositionOnInsert": (), + "QTextCursor.mergeBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.mergeBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.mergeCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.movePosition": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode', 'int'), + "QTextCursor.position": (), + "QTextCursor.positionInBlock": (), + "QTextCursor.removeSelectedText": (), + "QTextCursor.select": ('PySide2.QtGui.QTextCursor.SelectionType',), + "QTextCursor.selectedTableCells": ('int', 'int', 'int', 'int'), + "QTextCursor.selectedText": (), + "QTextCursor.selection": (), + "QTextCursor.selectionEnd": (), + "QTextCursor.selectionStart": (), + "QTextCursor.setBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.setCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setKeepPositionOnInsert": ('bool',), + "QTextCursor.setPosition": ('int', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextCursor.setVerticalMovementX": ('int',), + "QTextCursor.setVisualNavigation": ('bool',), + "QTextCursor.swap": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.verticalMovementX": (), + "QTextCursor.visualNavigation": (), + + # class PySide2.QtGui.QTextDocument: + "QTextDocument.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextDocument.addResource": ('int', 'PySide2.QtCore.QUrl', 'PySide2.support.signature.typing.Any'), + "QTextDocument.adjustSize": (), + "QTextDocument.allFormats": (), + "QTextDocument.availableRedoSteps": (), + "QTextDocument.availableUndoSteps": (), + "QTextDocument.baseUrl": (), + "QTextDocument.begin": (), + "QTextDocument.blockCount": (), + "QTextDocument.characterAt": ('int',), + "QTextDocument.characterCount": (), + "QTextDocument.clear": (), + "QTextDocument.clearUndoRedoStacks": ('PySide2.QtGui.QTextDocument.Stacks',), + "QTextDocument.clone": ('PySide2.QtCore.QObject',), + "QTextDocument.createObject": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.defaultCursorMoveStyle": (), + "QTextDocument.defaultFont": (), + "QTextDocument.defaultStyleSheet": (), + "QTextDocument.defaultTextOption": (), + "QTextDocument.documentLayout": (), + "QTextDocument.documentMargin": (), + "QTextDocument.drawContents": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QTextDocument.end": (), + "QTextDocument.find": [('PySide2.QtCore.QRegExp', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('PySide2.QtCore.QRegExp', 'int', 'FindFlags'), ('str', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('str', 'int', 'FindFlags')], + "QTextDocument.findBlock": ('int',), + "QTextDocument.findBlockByLineNumber": ('int',), + "QTextDocument.findBlockByNumber": ('int',), + "QTextDocument.firstBlock": (), + "QTextDocument.frameAt": ('int',), + "QTextDocument.idealWidth": (), + "QTextDocument.indentWidth": (), + "QTextDocument.isEmpty": (), + "QTextDocument.isModified": (), + "QTextDocument.isRedoAvailable": (), + "QTextDocument.isUndoAvailable": (), + "QTextDocument.isUndoRedoEnabled": (), + "QTextDocument.lastBlock": (), + "QTextDocument.lineCount": (), + "QTextDocument.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.markContentsDirty": ('int', 'int'), + "QTextDocument.maximumBlockCount": (), + "QTextDocument.metaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation',), + "QTextDocument.object": ('int',), + "QTextDocument.objectForFormat": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.pageCount": (), + "QTextDocument.pageSize": (), + "QTextDocument.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextDocument.redo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.resource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.revision": (), + "QTextDocument.rootFrame": (), + "QTextDocument.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QTextDocument.setDefaultCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextDocument.setDefaultFont": ('PySide2.QtGui.QFont',), + "QTextDocument.setDefaultStyleSheet": ('str',), + "QTextDocument.setDefaultTextOption": ('PySide2.QtGui.QTextOption',), + "QTextDocument.setDocumentLayout": ('PySide2.QtGui.QAbstractTextDocumentLayout',), + "QTextDocument.setDocumentMargin": ('float',), + "QTextDocument.setHtml": ('str',), + "QTextDocument.setIndentWidth": ('float',), + "QTextDocument.setMaximumBlockCount": ('int',), + "QTextDocument.setMetaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation', 'str'), + "QTextDocument.setModified": ('bool',), + "QTextDocument.setPageSize": ('PySide2.QtCore.QSizeF',), + "QTextDocument.setPlainText": ('str',), + "QTextDocument.setTextWidth": ('float',), + "QTextDocument.setUndoRedoEnabled": ('bool',), + "QTextDocument.setUseDesignMetrics": ('bool',), + "QTextDocument.size": (), + "QTextDocument.textWidth": (), + "QTextDocument.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocument.toPlainText": (), + "QTextDocument.undo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.useDesignMetrics": (), + + # class PySide2.QtGui.QTextDocumentFragment: + "QTextDocumentFragment.__init__": [(), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + "QTextDocumentFragment.__copy__": (), + "QTextDocumentFragment.fromHtml": [('str',), ('str', 'PySide2.QtGui.QTextDocument')], + "QTextDocumentFragment.fromPlainText": ('str',), + "QTextDocumentFragment.isEmpty": (), + "QTextDocumentFragment.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocumentFragment.toPlainText": (), + + # class PySide2.QtGui.QTextDocumentWriter: + "QTextDocumentWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QTextDocumentWriter.codec": (), + "QTextDocumentWriter.device": (), + "QTextDocumentWriter.fileName": (), + "QTextDocumentWriter.format": (), + "QTextDocumentWriter.setCodec": ('PySide2.QtCore.QTextCodec',), + "QTextDocumentWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextDocumentWriter.setFileName": ('str',), + "QTextDocumentWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QTextDocumentWriter.supportedDocumentFormats": (), + "QTextDocumentWriter.write": [('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + + # class PySide2.QtGui.QTextFormat: + "QTextFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('int',)], + "QTextFormat.__copy__": (), + "QTextFormat.background": (), + "QTextFormat.boolProperty": ('int',), + "QTextFormat.brushProperty": ('int',), + "QTextFormat.clearBackground": (), + "QTextFormat.clearForeground": (), + "QTextFormat.clearProperty": ('int',), + "QTextFormat.colorProperty": ('int',), + "QTextFormat.doubleProperty": ('int',), + "QTextFormat.foreground": (), + "QTextFormat.hasProperty": ('int',), + "QTextFormat.intProperty": ('int',), + "QTextFormat.isBlockFormat": (), + "QTextFormat.isCharFormat": (), + "QTextFormat.isEmpty": (), + "QTextFormat.isFrameFormat": (), + "QTextFormat.isImageFormat": (), + "QTextFormat.isListFormat": (), + "QTextFormat.isTableCellFormat": (), + "QTextFormat.isTableFormat": (), + "QTextFormat.isValid": (), + "QTextFormat.layoutDirection": (), + "QTextFormat.lengthProperty": ('int',), + "QTextFormat.lengthVectorProperty": ('int',), + "QTextFormat.merge": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.objectIndex": (), + "QTextFormat.objectType": (), + "QTextFormat.penProperty": ('int',), + "QTextFormat.properties": (), + "QTextFormat.property": ('int',), + "QTextFormat.propertyCount": (), + "QTextFormat.setBackground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setForeground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextFormat.setObjectIndex": ('int',), + "QTextFormat.setObjectType": ('int',), + "QTextFormat.setProperty": [('int', 'PySide2.support.signature.typing.Any'), ('int', 'list')], + "QTextFormat.stringProperty": ('int',), + "QTextFormat.swap": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.toBlockFormat": (), + "QTextFormat.toCharFormat": (), + "QTextFormat.toFrameFormat": (), + "QTextFormat.toImageFormat": (), + "QTextFormat.toListFormat": (), + "QTextFormat.toTableCellFormat": (), + "QTextFormat.toTableFormat": (), + "QTextFormat.type": (), + + # class PySide2.QtGui.QTextFragment: + "QTextFragment.__init__": [(), ('PySide2.QtGui.QTextFragment',)], + "QTextFragment.__copy__": (), + "QTextFragment.charFormat": (), + "QTextFragment.charFormatIndex": (), + "QTextFragment.contains": ('int',), + "QTextFragment.isValid": (), + "QTextFragment.length": (), + "QTextFragment.position": (), + "QTextFragment.text": (), + + # class PySide2.QtGui.QTextFrame: + "QTextFrame.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextFrame.begin": (), + "QTextFrame.childFrames": (), + "QTextFrame.end": (), + "QTextFrame.firstCursorPosition": (), + "QTextFrame.firstPosition": (), + "QTextFrame.frameFormat": (), + "QTextFrame.lastCursorPosition": (), + "QTextFrame.lastPosition": (), + "QTextFrame.parentFrame": (), + "QTextFrame.setFrameFormat": ('PySide2.QtGui.QTextFrameFormat',), + + # class PySide2.QtGui.QTextFrameFormat: + "QTextFrameFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextFrameFormat',)], + "QTextFrameFormat.__copy__": (), + "QTextFrameFormat.border": (), + "QTextFrameFormat.borderBrush": (), + "QTextFrameFormat.borderStyle": (), + "QTextFrameFormat.bottomMargin": (), + "QTextFrameFormat.height": (), + "QTextFrameFormat.isValid": (), + "QTextFrameFormat.leftMargin": (), + "QTextFrameFormat.margin": (), + "QTextFrameFormat.padding": (), + "QTextFrameFormat.pageBreakPolicy": (), + "QTextFrameFormat.position": (), + "QTextFrameFormat.rightMargin": (), + "QTextFrameFormat.setBorder": ('float',), + "QTextFrameFormat.setBorderBrush": ('PySide2.QtGui.QBrush',), + "QTextFrameFormat.setBorderStyle": ('PySide2.QtGui.QTextFrameFormat.BorderStyle',), + "QTextFrameFormat.setBottomMargin": ('float',), + "QTextFrameFormat.setHeight": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.setLeftMargin": ('float',), + "QTextFrameFormat.setMargin": ('float',), + "QTextFrameFormat.setPadding": ('float',), + "QTextFrameFormat.setPageBreakPolicy": ('PageBreakFlags',), + "QTextFrameFormat.setPosition": ('PySide2.QtGui.QTextFrameFormat.Position',), + "QTextFrameFormat.setRightMargin": ('float',), + "QTextFrameFormat.setTopMargin": ('float',), + "QTextFrameFormat.setWidth": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.topMargin": (), + "QTextFrameFormat.width": (), + + # class PySide2.QtGui.QTextImageFormat: + "QTextImageFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextImageFormat',)], + "QTextImageFormat.__copy__": (), + "QTextImageFormat.height": (), + "QTextImageFormat.isValid": (), + "QTextImageFormat.name": (), + "QTextImageFormat.setHeight": ('float',), + "QTextImageFormat.setName": ('str',), + "QTextImageFormat.setWidth": ('float',), + "QTextImageFormat.width": (), + + # class PySide2.QtGui.QTextInlineObject: + "QTextInlineObject.__init__": [(), ('PySide2.QtGui.QTextInlineObject',)], + "QTextInlineObject.__copy__": (), + "QTextInlineObject.ascent": (), + "QTextInlineObject.descent": (), + "QTextInlineObject.format": (), + "QTextInlineObject.formatIndex": (), + "QTextInlineObject.height": (), + "QTextInlineObject.isValid": (), + "QTextInlineObject.rect": (), + "QTextInlineObject.setAscent": ('float',), + "QTextInlineObject.setDescent": ('float',), + "QTextInlineObject.setWidth": ('float',), + "QTextInlineObject.textDirection": (), + "QTextInlineObject.textPosition": (), + "QTextInlineObject.width": (), + + # class PySide2.QtGui.QTextItem: + "QTextItem.__init__": (), + "QTextItem.ascent": (), + "QTextItem.descent": (), + "QTextItem.font": (), + "QTextItem.renderFlags": (), + "QTextItem.text": (), + "QTextItem.width": (), + + # class PySide2.QtGui.QTextLayout: + "QTextLayout.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('str',), ('str', 'PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice')], + "QTextLayout.additionalFormats": (), + "QTextLayout.beginLayout": (), + "QTextLayout.boundingRect": (), + "QTextLayout.cacheEnabled": (), + "QTextLayout.clearAdditionalFormats": (), + "QTextLayout.clearFormats": (), + "QTextLayout.clearLayout": (), + "QTextLayout.createLine": (), + "QTextLayout.cursorMoveStyle": (), + "QTextLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'list', 'PySide2.QtCore.QRectF'), + "QTextLayout.drawCursor": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int', 'int')], + "QTextLayout.endLayout": (), + "QTextLayout.font": (), + "QTextLayout.formats": (), + "QTextLayout.isValidCursorPosition": ('int',), + "QTextLayout.leftCursorPosition": ('int',), + "QTextLayout.lineAt": ('int',), + "QTextLayout.lineCount": (), + "QTextLayout.lineForTextPosition": ('int',), + "QTextLayout.maximumWidth": (), + "QTextLayout.minimumWidth": (), + "QTextLayout.nextCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.position": (), + "QTextLayout.preeditAreaPosition": (), + "QTextLayout.preeditAreaText": (), + "QTextLayout.previousCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.rightCursorPosition": ('int',), + "QTextLayout.setAdditionalFormats": ('list',), + "QTextLayout.setCacheEnabled": ('bool',), + "QTextLayout.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextLayout.setFlags": ('int',), + "QTextLayout.setFont": ('PySide2.QtGui.QFont',), + "QTextLayout.setFormats": ('list',), + "QTextLayout.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLayout.setPreeditArea": ('int', 'str'), + "QTextLayout.setRawFont": ('PySide2.QtGui.QRawFont',), + "QTextLayout.setText": ('str',), + "QTextLayout.setTextOption": ('PySide2.QtGui.QTextOption',), + "QTextLayout.text": (), + "QTextLayout.textOption": (), + + # class PySide2.QtGui.QTextLength: + "QTextLength.__init__": [(), ('PySide2.QtGui.QTextLength',), ('PySide2.QtGui.QTextLength.Type', 'float')], + "QTextLength.__copy__": (), + "QTextLength.rawValue": (), + "QTextLength.type": (), + "QTextLength.value": ('float',), + + # class PySide2.QtGui.QTextLine: + "QTextLine.__init__": [(), ('PySide2.QtGui.QTextLine',)], + "QTextLine.__copy__": (), + "QTextLine.ascent": (), + "QTextLine.cursorToX": ('int', 'PySide2.QtGui.QTextLine.Edge'), + "QTextLine.descent": (), + "QTextLine.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextLayout.FormatRange'), + "QTextLine.height": (), + "QTextLine.horizontalAdvance": (), + "QTextLine.isValid": (), + "QTextLine.leading": (), + "QTextLine.leadingIncluded": (), + "QTextLine.lineNumber": (), + "QTextLine.naturalTextRect": (), + "QTextLine.naturalTextWidth": (), + "QTextLine.position": (), + "QTextLine.rect": (), + "QTextLine.setLeadingIncluded": ('bool',), + "QTextLine.setLineWidth": ('float',), + "QTextLine.setNumColumns": [('int',), ('int', 'float')], + "QTextLine.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLine.textLength": (), + "QTextLine.textStart": (), + "QTextLine.width": (), + "QTextLine.x": (), + "QTextLine.xToCursor": ('float', 'PySide2.QtGui.QTextLine.CursorPosition'), + "QTextLine.y": (), + + # class PySide2.QtGui.QTextList: + "QTextList.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextList.add": ('PySide2.QtGui.QTextBlock',), + "QTextList.count": (), + "QTextList.format": (), + "QTextList.item": ('int',), + "QTextList.itemNumber": ('PySide2.QtGui.QTextBlock',), + "QTextList.itemText": ('PySide2.QtGui.QTextBlock',), + "QTextList.remove": ('PySide2.QtGui.QTextBlock',), + "QTextList.removeItem": ('int',), + "QTextList.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + + # class PySide2.QtGui.QTextListFormat: + "QTextListFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + "QTextListFormat.__copy__": (), + "QTextListFormat.indent": (), + "QTextListFormat.isValid": (), + "QTextListFormat.numberPrefix": (), + "QTextListFormat.numberSuffix": (), + "QTextListFormat.setIndent": ('int',), + "QTextListFormat.setNumberPrefix": ('str',), + "QTextListFormat.setNumberSuffix": ('str',), + "QTextListFormat.setStyle": ('PySide2.QtGui.QTextListFormat.Style',), + "QTextListFormat.style": (), + + # class PySide2.QtGui.QTextObject: + "QTextObject.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextObject.document": (), + "QTextObject.format": (), + "QTextObject.formatIndex": (), + "QTextObject.objectIndex": (), + "QTextObject.setFormat": ('PySide2.QtGui.QTextFormat',), + + # class PySide2.QtGui.QTextObjectInterface: + "QTextObjectInterface.__init__": (), + "QTextObjectInterface.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QTextObjectInterface.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QTextOption: + "QTextOption.__init__": [(), ('Alignment',), ('PySide2.QtGui.QTextOption',)], + "QTextOption.__copy__": (), + "QTextOption.alignment": (), + "QTextOption.flags": (), + "QTextOption.setAlignment": ('Alignment',), + "QTextOption.setFlags": ('Flags',), + "QTextOption.setTabArray": ('list',), + "QTextOption.setTabStop": ('float',), + "QTextOption.setTabs": ('list',), + "QTextOption.setTextDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextOption.setUseDesignMetrics": ('bool',), + "QTextOption.setWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextOption.tabArray": (), + "QTextOption.tabStop": (), + "QTextOption.tabs": (), + "QTextOption.textDirection": (), + "QTextOption.useDesignMetrics": (), + "QTextOption.wrapMode": (), + + # class PySide2.QtGui.QTextTable: + "QTextTable.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextTable.appendColumns": ('int',), + "QTextTable.appendRows": ('int',), + "QTextTable.cellAt": [('PySide2.QtGui.QTextCursor',), ('int',), ('int', 'int')], + "QTextTable.columns": (), + "QTextTable.format": (), + "QTextTable.insertColumns": ('int', 'int'), + "QTextTable.insertRows": ('int', 'int'), + "QTextTable.mergeCells": [('PySide2.QtGui.QTextCursor',), ('int', 'int', 'int', 'int')], + "QTextTable.removeColumns": ('int', 'int'), + "QTextTable.removeRows": ('int', 'int'), + "QTextTable.resize": ('int', 'int'), + "QTextTable.rowEnd": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rowStart": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rows": (), + "QTextTable.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTable.splitCell": ('int', 'int', 'int', 'int'), + + # class PySide2.QtGui.QTextTableCell: + "QTextTableCell.__init__": [(), ('PySide2.QtGui.QTextTableCell',)], + "QTextTableCell.__copy__": (), + "QTextTableCell.begin": (), + "QTextTableCell.column": (), + "QTextTableCell.columnSpan": (), + "QTextTableCell.end": (), + "QTextTableCell.firstCursorPosition": (), + "QTextTableCell.firstPosition": (), + "QTextTableCell.format": (), + "QTextTableCell.isValid": (), + "QTextTableCell.lastCursorPosition": (), + "QTextTableCell.lastPosition": (), + "QTextTableCell.row": (), + "QTextTableCell.rowSpan": (), + "QTextTableCell.setFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextTableCell.tableCellFormatIndex": (), + + # class PySide2.QtGui.QTextTableCellFormat: + "QTextTableCellFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableCellFormat',)], + "QTextTableCellFormat.__copy__": (), + "QTextTableCellFormat.bottomPadding": (), + "QTextTableCellFormat.isValid": (), + "QTextTableCellFormat.leftPadding": (), + "QTextTableCellFormat.rightPadding": (), + "QTextTableCellFormat.setBottomPadding": ('float',), + "QTextTableCellFormat.setLeftPadding": ('float',), + "QTextTableCellFormat.setPadding": ('float',), + "QTextTableCellFormat.setRightPadding": ('float',), + "QTextTableCellFormat.setTopPadding": ('float',), + "QTextTableCellFormat.topPadding": (), + + # class PySide2.QtGui.QTextTableFormat: + "QTextTableFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTableFormat.__copy__": (), + "QTextTableFormat.alignment": (), + "QTextTableFormat.cellPadding": (), + "QTextTableFormat.cellSpacing": (), + "QTextTableFormat.clearColumnWidthConstraints": (), + "QTextTableFormat.columnWidthConstraints": (), + "QTextTableFormat.columns": (), + "QTextTableFormat.headerRowCount": (), + "QTextTableFormat.isValid": (), + "QTextTableFormat.setAlignment": ('Alignment',), + "QTextTableFormat.setCellPadding": ('float',), + "QTextTableFormat.setCellSpacing": ('float',), + "QTextTableFormat.setColumnWidthConstraints": ('list',), + "QTextTableFormat.setColumns": ('int',), + "QTextTableFormat.setHeaderRowCount": ('int',), + + # class PySide2.QtGui.QToolBarChangeEvent: + "QToolBarChangeEvent.__init__": ('bool',), + "QToolBarChangeEvent.toggle": (), + + # class PySide2.QtGui.QTouchDevice: + "QTouchDevice.__init__": (), + "QTouchDevice.capabilities": (), + "QTouchDevice.devices": (), + "QTouchDevice.maximumTouchPoints": (), + "QTouchDevice.name": (), + "QTouchDevice.setCapabilities": ('Capabilities',), + "QTouchDevice.setMaximumTouchPoints": ('int',), + "QTouchDevice.setName": ('str',), + "QTouchDevice.setType": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTouchDevice.type": (), + + # class PySide2.QtGui.QTouchEvent: + "QTouchEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtGui.QTouchDevice', 'KeyboardModifiers', 'TouchPointStates', 'list'), + "QTouchEvent.device": (), + "QTouchEvent.setDevice": ('PySide2.QtGui.QTouchDevice',), + "QTouchEvent.setTarget": ('PySide2.QtCore.QObject',), + "QTouchEvent.setTouchPointStates": ('TouchPointStates',), + "QTouchEvent.setTouchPoints": ('list',), + "QTouchEvent.setWindow": ('PySide2.QtGui.QWindow',), + "QTouchEvent.target": (), + "QTouchEvent.touchPointStates": (), + "QTouchEvent.touchPoints": (), + "QTouchEvent.window": (), + + # class PySide2.QtGui.QTransform: + "QTransform.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float', 'float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QTransform.__copy__": (), + "QTransform.__reduce__": (), + "QTransform.adjoint": (), + "QTransform.det": (), + "QTransform.determinant": (), + "QTransform.dx": (), + "QTransform.dy": (), + "QTransform.fromScale": ('float', 'float'), + "QTransform.fromTranslate": ('float', 'float'), + "QTransform.inverted": ('bool',), + "QTransform.isAffine": (), + "QTransform.isIdentity": (), + "QTransform.isInvertible": (), + "QTransform.isRotating": (), + "QTransform.isScaling": (), + "QTransform.isTranslating": (), + "QTransform.m11": (), + "QTransform.m12": (), + "QTransform.m13": (), + "QTransform.m21": (), + "QTransform.m22": (), + "QTransform.m23": (), + "QTransform.m31": (), + "QTransform.m32": (), + "QTransform.m33": (), + "QTransform.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float')], + "QTransform.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QTransform.mapToPolygon": ('PySide2.QtCore.QRect',), + "QTransform.quadToQuad": [('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.quadToSquare": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.reset": (), + "QTransform.rotate": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.rotateRadians": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.scale": ('float', 'float'), + "QTransform.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float'), + "QTransform.shear": ('float', 'float'), + "QTransform.squareToQuad": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.toAffine": (), + "QTransform.translate": ('float', 'float'), + "QTransform.transposed": (), + "QTransform.type": (), + + # class PySide2.QtGui.QValidator: + "QValidator.__init__": ('PySide2.QtCore.QObject',), + "QValidator.fixup": ('str',), + "QValidator.locale": (), + "QValidator.setLocale": ('PySide2.QtCore.QLocale',), + "QValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QVector2D: + "QVector2D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',), ('float', 'float')], + "QVector2D.__copy__": (), + "QVector2D.__reduce__": (), + "QVector2D.distanceToLine": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.distanceToPoint": ('PySide2.QtGui.QVector2D',), + "QVector2D.dotProduct": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.isNull": (), + "QVector2D.length": (), + "QVector2D.lengthSquared": (), + "QVector2D.normalize": (), + "QVector2D.normalized": (), + "QVector2D.setX": ('float',), + "QVector2D.setY": ('float',), + "QVector2D.toPoint": (), + "QVector2D.toPointF": (), + "QVector2D.toTuple": (), + "QVector2D.toVector3D": (), + "QVector2D.toVector4D": (), + "QVector2D.x": (), + "QVector2D.y": (), + + # class PySide2.QtGui.QVector3D: + "QVector3D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float'), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',), ('float', 'float', 'float')], + "QVector3D.__copy__": (), + "QVector3D.__reduce__": (), + "QVector3D.crossProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToLine": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToPlane": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.distanceToPoint": ('PySide2.QtGui.QVector3D',), + "QVector3D.dotProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.isNull": (), + "QVector3D.length": (), + "QVector3D.lengthSquared": (), + "QVector3D.normal": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.normalize": (), + "QVector3D.normalized": (), + "QVector3D.project": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.setX": ('float',), + "QVector3D.setY": ('float',), + "QVector3D.setZ": ('float',), + "QVector3D.toPoint": (), + "QVector3D.toPointF": (), + "QVector3D.toTuple": (), + "QVector3D.toVector2D": (), + "QVector3D.toVector4D": (), + "QVector3D.unproject": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.x": (), + "QVector3D.y": (), + "QVector3D.z": (), + + # class PySide2.QtGui.QVector4D: + "QVector4D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float', 'float'), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector3D', 'float'), ('PySide2.QtGui.QVector4D',), ('float', 'float', 'float', 'float')], + "QVector4D.__copy__": (), + "QVector4D.__reduce__": (), + "QVector4D.dotProduct": ('PySide2.QtGui.QVector4D', 'PySide2.QtGui.QVector4D'), + "QVector4D.isNull": (), + "QVector4D.length": (), + "QVector4D.lengthSquared": (), + "QVector4D.normalize": (), + "QVector4D.normalized": (), + "QVector4D.setW": ('float',), + "QVector4D.setX": ('float',), + "QVector4D.setY": ('float',), + "QVector4D.setZ": ('float',), + "QVector4D.toPoint": (), + "QVector4D.toPointF": (), + "QVector4D.toTuple": (), + "QVector4D.toVector2D": (), + "QVector4D.toVector2DAffine": (), + "QVector4D.toVector3D": (), + "QVector4D.toVector3DAffine": (), + "QVector4D.w": (), + "QVector4D.x": (), + "QVector4D.y": (), + "QVector4D.z": (), + + # class PySide2.QtGui.QWhatsThisClickedEvent: + "QWhatsThisClickedEvent.__init__": ('str',), + "QWhatsThisClickedEvent.href": (), + + # class PySide2.QtGui.QWheelEvent: + "QWheelEvent.__init__": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation'), ('PySide2.QtCore.QPointF', 'int', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation')], + "QWheelEvent.angleDelta": (), + "QWheelEvent.buttons": (), + "QWheelEvent.delta": (), + "QWheelEvent.global"+"Y": (), + "QWheelEvent.globalPos": (), + "QWheelEvent.globalPosF": (), + "QWheelEvent.globalX": (), + "QWheelEvent.orientation": (), + "QWheelEvent.phase": (), + "QWheelEvent.pixelDelta": (), + "QWheelEvent.pos": (), + "QWheelEvent.posF": (), + "QWheelEvent.source": (), + "QWheelEvent.x": (), + "QWheelEvent.y": (), + + # class PySide2.QtGui.QWindow: + "QWindow.__init__": [('PySide2.QtGui.QScreen',), ('PySide2.QtGui.QWindow',)], + "QWindow.accessibleRoot": (), + "QWindow.alert": ('int',), + "QWindow.baseSize": (), + "QWindow.close": (), + "QWindow.contentOrientation": (), + "QWindow.create": (), + "QWindow.cursor": (), + "QWindow.destroy": (), + "QWindow.devicePixelRatio": (), + "QWindow.event": ('PySide2.QtCore.QEvent',), + "QWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QWindow.filePath": (), + "QWindow.flags": (), + "QWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.focusObject": (), + "QWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.format": (), + "QWindow.frameGeometry": (), + "QWindow.frameMargins": (), + "QWindow.framePosition": (), + "QWindow.fromWinId": ('int',), + "QWindow.geometry": (), + "QWindow.height": (), + "QWindow.hide": (), + "QWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWindow.icon": (), + "QWindow.isActive": (), + "QWindow.isAncestorOf": ('PySide2.QtGui.QWindow', 'PySide2.QtGui.QWindow.AncestorMode'), + "QWindow.isExposed": (), + "QWindow.isModal": (), + "QWindow.isTopLevel": (), + "QWindow.isVisible": (), + "QWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.lower": (), + "QWindow.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mask": (), + "QWindow.maximumHeight": (), + "QWindow.maximumSize": (), + "QWindow.maximumWidth": (), + "QWindow.minimumHeight": (), + "QWindow.minimumSize": (), + "QWindow.minimumWidth": (), + "QWindow.modality": (), + "QWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWindow.opacity": (), + "QWindow.parent": (), + "QWindow.position": (), + "QWindow.raise": (), + "QWindow.reportContentOrientationChange": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QWindow.requestActivate": (), + "QWindow.requestUpdate": (), + "QWindow.requestedFormat": (), + "QWindow.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWindow.screen": (), + "QWindow.setBaseSize": ('PySide2.QtCore.QSize',), + "QWindow.setCursor": ('PySide2.QtGui.QCursor',), + "QWindow.setFilePath": ('str',), + "QWindow.setFlags": ('WindowFlags',), + "QWindow.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QWindow.setFramePosition": ('PySide2.QtCore.QPoint',), + "QWindow.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWindow.setHeight": ('int',), + "QWindow.setIcon": ('PySide2.QtGui.QIcon',), + "QWindow.setKeyboardGrabEnabled": ('bool',), + "QWindow.setMask": ('PySide2.QtGui.QRegion',), + "QWindow.setMaximumHeight": ('int',), + "QWindow.setMaximumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMaximumWidth": ('int',), + "QWindow.setMinimumHeight": ('int',), + "QWindow.setMinimumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMinimumWidth": ('int',), + "QWindow.setModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWindow.setMouseGrabEnabled": ('bool',), + "QWindow.setOpacity": ('float',), + "QWindow.setParent": ('PySide2.QtGui.QWindow',), + "QWindow.setPosition": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWindow.setScreen": ('PySide2.QtGui.QScreen',), + "QWindow.setSizeIncrement": ('PySide2.QtCore.QSize',), + "QWindow.setSurfaceType": ('PySide2.QtGui.QSurface.SurfaceType',), + "QWindow.setTitle": ('str',), + "QWindow.setTransientParent": ('PySide2.QtGui.QWindow',), + "QWindow.setVisibility": ('PySide2.QtGui.QWindow.Visibility',), + "QWindow.setVisible": ('bool',), + "QWindow.setWidth": ('int',), + "QWindow.setWindowState": ('PySide2.QtCore.Qt.WindowState',), + "QWindow.setX": ('int',), + "QWindow.setY": ('int',), + "QWindow.show": (), + "QWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWindow.showFullScreen": (), + "QWindow.showMaximized": (), + "QWindow.showMinimized": (), + "QWindow.showNormal": (), + "QWindow.size": (), + "QWindow.sizeIncrement": (), + "QWindow.surfaceHandle": (), + "QWindow.surfaceType": (), + "QWindow.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWindow.title": (), + "QWindow.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QWindow.transientParent": (), + "QWindow.type": (), + "QWindow.unsetCursor": (), + "QWindow.visibility": (), + "QWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWindow.width": (), + "QWindow.winId": (), + "QWindow.windowState": (), + "QWindow.x": (), + "QWindow.y": (), + + # class PySide2.QtGui.QWindowStateChangeEvent: + "QWindowStateChangeEvent.__init__": ('WindowStates', 'bool'), + "QWindowStateChangeEvent.isOverride": (), + "QWindowStateChangeEvent.oldState": (), + }) + +# Module PySide2.QtWidgets +if "PySide2.QtWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWidgets.QAbstractButton: + "QAbstractButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractButton.animateClick": ('int',), + "QAbstractButton.autoExclusive": (), + "QAbstractButton.autoRepeat": (), + "QAbstractButton.autoRepeatDelay": (), + "QAbstractButton.autoRepeatInterval": (), + "QAbstractButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractButton.checkStateSet": (), + "QAbstractButton.click": (), + "QAbstractButton.event": ('PySide2.QtCore.QEvent',), + "QAbstractButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.group": (), + "QAbstractButton.hitButton": ('PySide2.QtCore.QPoint',), + "QAbstractButton.icon": (), + "QAbstractButton.iconSize": (), + "QAbstractButton.isCheckable": (), + "QAbstractButton.isChecked": (), + "QAbstractButton.isDown": (), + "QAbstractButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.nextCheckState": (), + "QAbstractButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractButton.setAutoExclusive": ('bool',), + "QAbstractButton.setAutoRepeat": ('bool',), + "QAbstractButton.setAutoRepeatDelay": ('int',), + "QAbstractButton.setAutoRepeatInterval": ('int',), + "QAbstractButton.setCheckable": ('bool',), + "QAbstractButton.setChecked": ('bool',), + "QAbstractButton.setDown": ('bool',), + "QAbstractButton.setIcon": ('PySide2.QtGui.QIcon',), + "QAbstractButton.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractButton.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAbstractButton.setText": ('str',), + "QAbstractButton.shortcut": (), + "QAbstractButton.text": (), + "QAbstractButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractButton.toggle": (), + + # class PySide2.QtWidgets.QAbstractGraphicsShapeItem: + "QAbstractGraphicsShapeItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.brush": (), + "QAbstractGraphicsShapeItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.opaqueArea": (), + "QAbstractGraphicsShapeItem.pen": (), + "QAbstractGraphicsShapeItem.setBrush": ('PySide2.QtGui.QBrush',), + "QAbstractGraphicsShapeItem.setPen": ('PySide2.QtGui.QPen',), + + # class PySide2.QtWidgets.QAbstractItemDelegate: + "QAbstractItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.destroyEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.elidedText": ('PySide2.QtGui.QFontMetrics', 'int', 'PySide2.QtCore.Qt.TextElideMode', 'str'), + "QAbstractItemDelegate.helpEvent": ('PySide2.QtGui.QHelpEvent', 'PySide2.QtWidgets.QAbstractItemView', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paintingRoles": (), + "QAbstractItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QAbstractItemView: + "QAbstractItemView.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.alternatingRowColors": (), + "QAbstractItemView.autoScrollMargin": (), + "QAbstractItemView.clearSelection": (), + "QAbstractItemView.closeEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QAbstractItemDelegate.EndEditHint'), + "QAbstractItemView.closePersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.commitData": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemView.currentIndex": (), + "QAbstractItemView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QAbstractItemView.defaultDropAction": (), + "QAbstractItemView.dirtyRegionOffset": (), + "QAbstractItemView.doAutoScroll": (), + "QAbstractItemView.doItemsLayout": (), + "QAbstractItemView.dragDropMode": (), + "QAbstractItemView.dragDropOverwriteMode": (), + "QAbstractItemView.dragEnabled": (), + "QAbstractItemView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractItemView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractItemView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractItemView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractItemView.dropIndicatorPosition": (), + "QAbstractItemView.edit": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.EditTrigger', 'PySide2.QtCore.QEvent')], + "QAbstractItemView.editTriggers": (), + "QAbstractItemView.editorDestroyed": ('PySide2.QtCore.QObject',), + "QAbstractItemView.event": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.executeDelayedItemsLayout": (), + "QAbstractItemView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.focusNextPrevChild": ('bool',), + "QAbstractItemView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.hasAutoScroll": (), + "QAbstractItemView.horizontalOffset": (), + "QAbstractItemView.horizontalScrollMode": (), + "QAbstractItemView.horizontalScrollbarAction": ('int',), + "QAbstractItemView.horizontalScrollbarValueChanged": ('int',), + "QAbstractItemView.horizontalStepsPerItem": (), + "QAbstractItemView.iconSize": (), + "QAbstractItemView.indexAt": ('PySide2.QtCore.QPoint',), + "QAbstractItemView.indexWidget": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QAbstractItemView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractItemView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.itemDelegate": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.itemDelegateForColumn": ('int',), + "QAbstractItemView.itemDelegateForRow": ('int',), + "QAbstractItemView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractItemView.keyboardSearch": ('str',), + "QAbstractItemView.model": (), + "QAbstractItemView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QAbstractItemView.openPersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.reset": (), + "QAbstractItemView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractItemView.rootIndex": (), + "QAbstractItemView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.scheduleDelayedItemsLayout": (), + "QAbstractItemView.scrollDirtyRegion": ('int', 'int'), + "QAbstractItemView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QAbstractItemView.scrollToBottom": (), + "QAbstractItemView.scrollToTop": (), + "QAbstractItemView.selectAll": (), + "QAbstractItemView.selectedIndexes": (), + "QAbstractItemView.selectionBehavior": (), + "QAbstractItemView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QAbstractItemView.selectionCommand": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QEvent'), + "QAbstractItemView.selectionMode": (), + "QAbstractItemView.selectionModel": (), + "QAbstractItemView.setAlternatingRowColors": ('bool',), + "QAbstractItemView.setAutoScroll": ('bool',), + "QAbstractItemView.setAutoScrollMargin": ('int',), + "QAbstractItemView.setCurrentIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setDefaultDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QAbstractItemView.setDirtyRegion": ('PySide2.QtGui.QRegion',), + "QAbstractItemView.setDragDropMode": ('PySide2.QtWidgets.QAbstractItemView.DragDropMode',), + "QAbstractItemView.setDragDropOverwriteMode": ('bool',), + "QAbstractItemView.setDragEnabled": ('bool',), + "QAbstractItemView.setDropIndicatorShown": ('bool',), + "QAbstractItemView.setEditTriggers": ('EditTriggers',), + "QAbstractItemView.setHorizontalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setHorizontalStepsPerItem": ('int',), + "QAbstractItemView.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractItemView.setIndexWidget": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QWidget'), + "QAbstractItemView.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QAbstractItemView.setItemDelegateForColumn": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setItemDelegateForRow": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractItemView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QAbstractItemView.setSelectionBehavior": ('PySide2.QtWidgets.QAbstractItemView.SelectionBehavior',), + "QAbstractItemView.setSelectionMode": ('PySide2.QtWidgets.QAbstractItemView.SelectionMode',), + "QAbstractItemView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QAbstractItemView.setState": ('PySide2.QtWidgets.QAbstractItemView.State',), + "QAbstractItemView.setTabKeyNavigation": ('bool',), + "QAbstractItemView.setTextElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QAbstractItemView.setVerticalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setVerticalStepsPerItem": ('int',), + "QAbstractItemView.showDropIndicator": (), + "QAbstractItemView.sizeHintForColumn": ('int',), + "QAbstractItemView.sizeHintForIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.sizeHintForRow": ('int',), + "QAbstractItemView.startAutoScroll": (), + "QAbstractItemView.startDrag": ('DropActions',), + "QAbstractItemView.state": (), + "QAbstractItemView.stopAutoScroll": (), + "QAbstractItemView.tabKeyNavigation": (), + "QAbstractItemView.textElideMode": (), + "QAbstractItemView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractItemView.update": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.updateEditorData": (), + "QAbstractItemView.updateEditorGeometries": (), + "QAbstractItemView.updateGeometries": (), + "QAbstractItemView.verticalOffset": (), + "QAbstractItemView.verticalScrollMode": (), + "QAbstractItemView.verticalScrollbarAction": ('int',), + "QAbstractItemView.verticalScrollbarValueChanged": ('int',), + "QAbstractItemView.verticalStepsPerItem": (), + "QAbstractItemView.viewOptions": (), + "QAbstractItemView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.viewportSizeHint": (), + "QAbstractItemView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QAbstractScrollArea: + "QAbstractScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.addScrollBarWidget": ('PySide2.QtWidgets.QWidget', 'Alignment'), + "QAbstractScrollArea.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractScrollArea.cornerWidget": (), + "QAbstractScrollArea.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractScrollArea.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractScrollArea.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractScrollArea.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractScrollArea.event": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QAbstractScrollArea.horizontalScrollBar": (), + "QAbstractScrollArea.horizontalScrollBarPolicy": (), + "QAbstractScrollArea.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractScrollArea.maximumViewportSize": (), + "QAbstractScrollArea.minimumSizeHint": (), + "QAbstractScrollArea.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractScrollArea.scrollBarWidgets": ('Alignment',), + "QAbstractScrollArea.scrollContentsBy": ('int', 'int'), + "QAbstractScrollArea.setCornerWidget": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setHorizontalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setHorizontalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setSizeAdjustPolicy": ('PySide2.QtWidgets.QAbstractScrollArea.SizeAdjustPolicy',), + "QAbstractScrollArea.setVerticalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setVerticalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setViewportMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QAbstractScrollArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.sizeAdjustPolicy": (), + "QAbstractScrollArea.sizeHint": (), + "QAbstractScrollArea.verticalScrollBar": (), + "QAbstractScrollArea.verticalScrollBarPolicy": (), + "QAbstractScrollArea.viewport": (), + "QAbstractScrollArea.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.viewportMargins": (), + "QAbstractScrollArea.viewportSizeHint": (), + "QAbstractScrollArea.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSlider: + "QAbstractSlider.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSlider.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.event": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.hasTracking": (), + "QAbstractSlider.invertedAppearance": (), + "QAbstractSlider.invertedControls": (), + "QAbstractSlider.isSliderDown": (), + "QAbstractSlider.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSlider.maximum": (), + "QAbstractSlider.minimum": (), + "QAbstractSlider.orientation": (), + "QAbstractSlider.pageStep": (), + "QAbstractSlider.repeatAction": (), + "QAbstractSlider.setInvertedAppearance": ('bool',), + "QAbstractSlider.setInvertedControls": ('bool',), + "QAbstractSlider.setMaximum": ('int',), + "QAbstractSlider.setMinimum": ('int',), + "QAbstractSlider.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QAbstractSlider.setPageStep": ('int',), + "QAbstractSlider.setRange": ('int', 'int'), + "QAbstractSlider.setRepeatAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction', 'int', 'int'), + "QAbstractSlider.setSingleStep": ('int',), + "QAbstractSlider.setSliderDown": ('bool',), + "QAbstractSlider.setSliderPosition": ('int',), + "QAbstractSlider.setTracking": ('bool',), + "QAbstractSlider.setValue": ('int',), + "QAbstractSlider.singleStep": (), + "QAbstractSlider.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QAbstractSlider.sliderPosition": (), + "QAbstractSlider.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSlider.triggerAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction',), + "QAbstractSlider.value": (), + "QAbstractSlider.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSpinBox: + "QAbstractSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSpinBox.alignment": (), + "QAbstractSpinBox.buttonSymbols": (), + "QAbstractSpinBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.clear": (), + "QAbstractSpinBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QAbstractSpinBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractSpinBox.correctionMode": (), + "QAbstractSpinBox.event": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.fixup": ('str',), + "QAbstractSpinBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.hasAcceptableInput": (), + "QAbstractSpinBox.hasFrame": (), + "QAbstractSpinBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QAbstractSpinBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QAbstractSpinBox.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractSpinBox.interpretText": (), + "QAbstractSpinBox.isAccelerated": (), + "QAbstractSpinBox.isGroupSeparatorShown": (), + "QAbstractSpinBox.isReadOnly": (), + "QAbstractSpinBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyboardTracking": (), + "QAbstractSpinBox.lineEdit": (), + "QAbstractSpinBox.minimumSizeHint": (), + "QAbstractSpinBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractSpinBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractSpinBox.selectAll": (), + "QAbstractSpinBox.setAccelerated": ('bool',), + "QAbstractSpinBox.setAlignment": ('Alignment',), + "QAbstractSpinBox.setButtonSymbols": ('PySide2.QtWidgets.QAbstractSpinBox.ButtonSymbols',), + "QAbstractSpinBox.setCorrectionMode": ('PySide2.QtWidgets.QAbstractSpinBox.CorrectionMode',), + "QAbstractSpinBox.setFrame": ('bool',), + "QAbstractSpinBox.setGroupSeparatorShown": ('bool',), + "QAbstractSpinBox.setKeyboardTracking": ('bool',), + "QAbstractSpinBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QAbstractSpinBox.setReadOnly": ('bool',), + "QAbstractSpinBox.setSpecialValueText": ('str',), + "QAbstractSpinBox.setWrapping": ('bool',), + "QAbstractSpinBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QAbstractSpinBox.sizeHint": (), + "QAbstractSpinBox.specialValueText": (), + "QAbstractSpinBox.stepBy": ('int',), + "QAbstractSpinBox.stepDown": (), + "QAbstractSpinBox.stepEnabled": (), + "QAbstractSpinBox.stepUp": (), + "QAbstractSpinBox.text": (), + "QAbstractSpinBox.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSpinBox.validate": ('str', 'int'), + "QAbstractSpinBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QAbstractSpinBox.wrapping": (), + + # class PySide2.QtWidgets.QAction: + "QAction.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QAction.actionGroup": (), + "QAction.activate": ('PySide2.QtWidgets.QAction.ActionEvent',), + "QAction.associatedGraphicsWidgets": (), + "QAction.associatedWidgets": (), + "QAction.autoRepeat": (), + "QAction.data": (), + "QAction.event": ('PySide2.QtCore.QEvent',), + "QAction.font": (), + "QAction.hover": (), + "QAction.icon": (), + "QAction.iconText": (), + "QAction.isCheckable": (), + "QAction.isChecked": (), + "QAction.isEnabled": (), + "QAction.isIconVisibleInMenu": (), + "QAction.isSeparator": (), + "QAction.isVisible": (), + "QAction.menu": (), + "QAction.menuRole": (), + "QAction.parentWidget": (), + "QAction.priority": (), + "QAction.setActionGroup": ('PySide2.QtWidgets.QActionGroup',), + "QAction.setAutoRepeat": ('bool',), + "QAction.setCheckable": ('bool',), + "QAction.setChecked": ('bool',), + "QAction.setData": ('PySide2.support.signature.typing.Any',), + "QAction.setDisabled": ('bool',), + "QAction.setEnabled": ('bool',), + "QAction.setFont": ('PySide2.QtGui.QFont',), + "QAction.setIcon": ('PySide2.QtGui.QIcon',), + "QAction.setIconText": ('str',), + "QAction.setIconVisibleInMenu": ('bool',), + "QAction.setMenu": ('PySide2.QtWidgets.QMenu',), + "QAction.setMenuRole": ('PySide2.QtWidgets.QAction.MenuRole',), + "QAction.setPriority": ('PySide2.QtWidgets.QAction.Priority',), + "QAction.setSeparator": ('bool',), + "QAction.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAction.setShortcutContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QAction.setShortcuts": [('PySide2.QtGui.QKeySequence.StandardKey',), ('list',)], + "QAction.setStatusTip": ('str',), + "QAction.setText": ('str',), + "QAction.setToolTip": ('str',), + "QAction.setVisible": ('bool',), + "QAction.setWhatsThis": ('str',), + "QAction.shortcut": (), + "QAction.shortcutContext": (), + "QAction.shortcuts": (), + "QAction.showStatusText": ('PySide2.QtWidgets.QWidget',), + "QAction.statusTip": (), + "QAction.text": (), + "QAction.toggle": (), + "QAction.toolTip": (), + "QAction.trigger": (), + "QAction.whatsThis": (), + + # class PySide2.QtWidgets.QActionGroup: + "QActionGroup.__init__": ('PySide2.QtCore.QObject',), + "QActionGroup.actions": (), + "QActionGroup.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction',), ('str',)], + "QActionGroup.checkedAction": (), + "QActionGroup.isEnabled": (), + "QActionGroup.isExclusive": (), + "QActionGroup.isVisible": (), + "QActionGroup.removeAction": ('PySide2.QtWidgets.QAction',), + "QActionGroup.setDisabled": ('bool',), + "QActionGroup.setEnabled": ('bool',), + "QActionGroup.setExclusive": ('bool',), + "QActionGroup.setVisible": ('bool',), + + # class PySide2.QtWidgets.QApplication: + "QApplication.__init__": ('PySide2.support.signature.typing.List',), + "QApplication.aboutQt": (), + "QApplication.activeModalWidget": (), + "QApplication.activePopupWidget": (), + "QApplication.activeWindow": (), + "QApplication.alert": ('PySide2.QtWidgets.QWidget', 'int'), + "QApplication.allWidgets": (), + "QApplication.autoSipEnabled": (), + "QApplication.beep": (), + "QApplication.closeAllWindows": (), + "QApplication.colorSpec": (), + "QApplication.cursorFlashTime": (), + "QApplication.desktop": (), + "QApplication.doubleClickInterval": (), + "QApplication.event": ('PySide2.QtCore.QEvent',), + "QApplication.exec_": (), + "QApplication.focusWidget": (), + "QApplication.font": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.fontMetrics": (), + "QApplication.globalStrut": (), + "QApplication.isEffectEnabled": ('PySide2.QtCore.Qt.UIEffect',), + "QApplication.keyboardInputInterval": (), + "QApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QApplication.palette": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.setActiveWindow": ('PySide2.QtWidgets.QWidget',), + "QApplication.setAutoSipEnabled": ('bool',), + "QApplication.setColorSpec": ('int',), + "QApplication.setCursorFlashTime": ('int',), + "QApplication.setDoubleClickInterval": ('int',), + "QApplication.setEffectEnabled": ('PySide2.QtCore.Qt.UIEffect', 'bool'), + "QApplication.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'str')], + "QApplication.setGlobalStrut": ('PySide2.QtCore.QSize',), + "QApplication.setKeyboardInputInterval": ('int',), + "QApplication.setPalette": [('PySide2.QtGui.QPalette',), ('PySide2.QtGui.QPalette', 'str')], + "QApplication.setStartDragDistance": ('int',), + "QApplication.setStartDragTime": ('int',), + "QApplication.setStyle": [('PySide2.QtWidgets.QStyle',), ('str',)], + "QApplication.setStyleSheet": ('str',), + "QApplication.setWheelScrollLines": ('int',), + "QApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QApplication.startDragDistance": (), + "QApplication.startDragTime": (), + "QApplication.style": (), + "QApplication.styleSheet": (), + "QApplication.topLevelAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.topLevelWidgets": (), + "QApplication.wheelScrollLines": (), + "QApplication.widgetAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.windowIcon": (), + + # class PySide2.QtWidgets.QBoxLayout: + "QBoxLayout.__init__": ('PySide2.QtWidgets.QBoxLayout.Direction', 'PySide2.QtWidgets.QWidget'), + "QBoxLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QBoxLayout.addLayout": ('PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.addSpacerItem": ('PySide2.QtWidgets.QSpacerItem',), + "QBoxLayout.addSpacing": ('int',), + "QBoxLayout.addStretch": ('int',), + "QBoxLayout.addStrut": ('int',), + "QBoxLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'Alignment')], + "QBoxLayout.count": (), + "QBoxLayout.direction": (), + "QBoxLayout.expandingDirections": (), + "QBoxLayout.hasHeightForWidth": (), + "QBoxLayout.heightForWidth": ('int',), + "QBoxLayout.insertItem": ('int', 'PySide2.QtWidgets.QLayoutItem'), + "QBoxLayout.insertLayout": ('int', 'PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.insertSpacerItem": ('int', 'PySide2.QtWidgets.QSpacerItem'), + "QBoxLayout.insertSpacing": ('int', 'int'), + "QBoxLayout.insertStretch": ('int', 'int'), + "QBoxLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int', 'Alignment'), + "QBoxLayout.invalidate": (), + "QBoxLayout.itemAt": ('int',), + "QBoxLayout.maximumSize": (), + "QBoxLayout.minimumHeightForWidth": ('int',), + "QBoxLayout.minimumSize": (), + "QBoxLayout.setDirection": ('PySide2.QtWidgets.QBoxLayout.Direction',), + "QBoxLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QBoxLayout.setSpacing": ('int',), + "QBoxLayout.setStretch": ('int', 'int'), + "QBoxLayout.setStretchFactor": [('PySide2.QtWidgets.QLayout', 'int'), ('PySide2.QtWidgets.QWidget', 'int')], + "QBoxLayout.sizeHint": (), + "QBoxLayout.spacing": (), + "QBoxLayout.stretch": ('int',), + "QBoxLayout.takeAt": ('int',), + + # class PySide2.QtWidgets.QButtonGroup: + "QButtonGroup.__init__": ('PySide2.QtCore.QObject',), + "QButtonGroup.addButton": ('PySide2.QtWidgets.QAbstractButton', 'int'), + "QButtonGroup.button": ('int',), + "QButtonGroup.buttons": (), + "QButtonGroup.checkedButton": (), + "QButtonGroup.checkedId": (), + "QButtonGroup.exclusive": (), + "QButtonGroup.id": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.setExclusive": ('bool',), + "QButtonGroup.setId": ('PySide2.QtWidgets.QAbstractButton', 'int'), + + # class PySide2.QtWidgets.QCalendarWidget: + "QCalendarWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QCalendarWidget.dateEditAcceptDelay": (), + "QCalendarWidget.dateTextFormat": [(), ('PySide2.QtCore.QDate',)], + "QCalendarWidget.event": ('PySide2.QtCore.QEvent',), + "QCalendarWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCalendarWidget.firstDayOfWeek": (), + "QCalendarWidget.headerTextFormat": (), + "QCalendarWidget.horizontalHeaderFormat": (), + "QCalendarWidget.isDateEditEnabled": (), + "QCalendarWidget.isGridVisible": (), + "QCalendarWidget.isNavigationBarVisible": (), + "QCalendarWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QCalendarWidget.maximumDate": (), + "QCalendarWidget.minimumDate": (), + "QCalendarWidget.minimumSizeHint": (), + "QCalendarWidget.monthShown": (), + "QCalendarWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QCalendarWidget.paintCell": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QDate'), + "QCalendarWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QCalendarWidget.selectedDate": (), + "QCalendarWidget.selectionMode": (), + "QCalendarWidget.setCurrentPage": ('int', 'int'), + "QCalendarWidget.setDateEditAcceptDelay": ('int',), + "QCalendarWidget.setDateEditEnabled": ('bool',), + "QCalendarWidget.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QCalendarWidget.setDateTextFormat": ('PySide2.QtCore.QDate', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.setFirstDayOfWeek": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.setGridVisible": ('bool',), + "QCalendarWidget.setHeaderTextFormat": ('PySide2.QtGui.QTextCharFormat',), + "QCalendarWidget.setHorizontalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.HorizontalHeaderFormat',), + "QCalendarWidget.setMaximumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setMinimumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setNavigationBarVisible": ('bool',), + "QCalendarWidget.setSelectedDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setSelectionMode": ('PySide2.QtWidgets.QCalendarWidget.SelectionMode',), + "QCalendarWidget.setVerticalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.VerticalHeaderFormat',), + "QCalendarWidget.setWeekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.showNextMonth": (), + "QCalendarWidget.showNextYear": (), + "QCalendarWidget.showPreviousMonth": (), + "QCalendarWidget.showPreviousYear": (), + "QCalendarWidget.showSelectedDate": (), + "QCalendarWidget.showToday": (), + "QCalendarWidget.sizeHint": (), + "QCalendarWidget.updateCell": ('PySide2.QtCore.QDate',), + "QCalendarWidget.updateCells": (), + "QCalendarWidget.verticalHeaderFormat": (), + "QCalendarWidget.weekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.yearShown": (), + + # class PySide2.QtWidgets.QCheckBox: + "QCheckBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QCheckBox.checkState": (), + "QCheckBox.checkStateSet": (), + "QCheckBox.event": ('PySide2.QtCore.QEvent',), + "QCheckBox.hitButton": ('PySide2.QtCore.QPoint',), + "QCheckBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QCheckBox.isTristate": (), + "QCheckBox.minimumSizeHint": (), + "QCheckBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QCheckBox.nextCheckState": (), + "QCheckBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCheckBox.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QCheckBox.setTristate": ('bool',), + "QCheckBox.sizeHint": (), + + # class PySide2.QtWidgets.QColorDialog: + "QColorDialog.__init__": [('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QColorDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QColorDialog.currentColor": (), + "QColorDialog.customColor": ('int',), + "QColorDialog.customCount": (), + "QColorDialog.done": ('int',), + "QColorDialog.getColor": ('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget', 'str', 'ColorDialogOptions'), + "QColorDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QColorDialog.options": (), + "QColorDialog.selectedColor": (), + "QColorDialog.setCurrentColor": ('PySide2.QtGui.QColor',), + "QColorDialog.setCustomColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption', 'bool'), + "QColorDialog.setOptions": ('ColorDialogOptions',), + "QColorDialog.setStandardColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setVisible": ('bool',), + "QColorDialog.standardColor": ('int',), + "QColorDialog.testOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption',), + + # class PySide2.QtWidgets.QColumnView: + "QColumnView.__init__": ('PySide2.QtWidgets.QWidget',), + "QColumnView.columnWidths": (), + "QColumnView.createColumn": ('PySide2.QtCore.QModelIndex',), + "QColumnView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QColumnView.horizontalOffset": (), + "QColumnView.indexAt": ('PySide2.QtCore.QPoint',), + "QColumnView.initializeColumn": ('PySide2.QtWidgets.QAbstractItemView',), + "QColumnView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QColumnView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QColumnView.previewWidget": (), + "QColumnView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QColumnView.resizeGripsVisible": (), + "QColumnView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QColumnView.scrollContentsBy": ('int', 'int'), + "QColumnView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QColumnView.selectAll": (), + "QColumnView.setColumnWidths": ('list',), + "QColumnView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QColumnView.setPreviewWidget": ('PySide2.QtWidgets.QWidget',), + "QColumnView.setResizeGripsVisible": ('bool',), + "QColumnView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QColumnView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QColumnView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QColumnView.sizeHint": (), + "QColumnView.verticalOffset": (), + "QColumnView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QColumnView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QComboBox: + "QComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QComboBox.addItem": [('PySide2.QtGui.QIcon', 'str', 'PySide2.support.signature.typing.Any'), ('str', 'PySide2.support.signature.typing.Any')], + "QComboBox.addItems": ('PySide2.support.signature.typing.List',), + "QComboBox.autoCompletion": (), + "QComboBox.autoCompletionCaseSensitivity": (), + "QComboBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QComboBox.clear": (), + "QComboBox.clearEditText": (), + "QComboBox.completer": (), + "QComboBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QComboBox.count": (), + "QComboBox.currentData": ('int',), + "QComboBox.currentIndex": (), + "QComboBox.currentText": (), + "QComboBox.duplicatesEnabled": (), + "QComboBox.event": ('PySide2.QtCore.QEvent',), + "QComboBox.findData": ('PySide2.support.signature.typing.Any', 'int', 'MatchFlags'), + "QComboBox.findText": ('str', 'MatchFlags'), + "QComboBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.hasFrame": (), + "QComboBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QComboBox.hidePopup": (), + "QComboBox.iconSize": (), + "QComboBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionComboBox',), + "QComboBox.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QComboBox.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QComboBox.insertItem": [('int', 'PySide2.QtGui.QIcon', 'str', 'PySide2.support.signature.typing.Any'), ('int', 'str', 'PySide2.support.signature.typing.Any')], + "QComboBox.insertItems": ('int', 'PySide2.support.signature.typing.List'), + "QComboBox.insertPolicy": (), + "QComboBox.insertSeparator": ('int',), + "QComboBox.isEditable": (), + "QComboBox.itemData": ('int', 'int'), + "QComboBox.itemDelegate": (), + "QComboBox.itemIcon": ('int',), + "QComboBox.itemText": ('int',), + "QComboBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.lineEdit": (), + "QComboBox.maxCount": (), + "QComboBox.maxVisibleItems": (), + "QComboBox.minimumContentsLength": (), + "QComboBox.minimumSizeHint": (), + "QComboBox.model": (), + "QComboBox.modelColumn": (), + "QComboBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QComboBox.removeItem": ('int',), + "QComboBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QComboBox.rootModelIndex": (), + "QComboBox.setAutoCompletion": ('bool',), + "QComboBox.setAutoCompletionCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QComboBox.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QComboBox.setCurrentIndex": ('int',), + "QComboBox.setCurrentText": ('str',), + "QComboBox.setDuplicatesEnabled": ('bool',), + "QComboBox.setEditText": ('str',), + "QComboBox.setEditable": ('bool',), + "QComboBox.setFrame": ('bool',), + "QComboBox.setIconSize": ('PySide2.QtCore.QSize',), + "QComboBox.setInsertPolicy": ('PySide2.QtWidgets.QComboBox.InsertPolicy',), + "QComboBox.setItemData": ('int', 'PySide2.support.signature.typing.Any', 'int'), + "QComboBox.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QComboBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QComboBox.setItemText": ('int', 'str'), + "QComboBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QComboBox.setMaxCount": ('int',), + "QComboBox.setMaxVisibleItems": ('int',), + "QComboBox.setMinimumContentsLength": ('int',), + "QComboBox.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QComboBox.setModelColumn": ('int',), + "QComboBox.setRootModelIndex": ('PySide2.QtCore.QModelIndex',), + "QComboBox.setSizeAdjustPolicy": ('PySide2.QtWidgets.QComboBox.SizeAdjustPolicy',), + "QComboBox.setValidator": ('PySide2.QtGui.QValidator',), + "QComboBox.setView": ('PySide2.QtWidgets.QAbstractItemView',), + "QComboBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QComboBox.showPopup": (), + "QComboBox.sizeAdjustPolicy": (), + "QComboBox.sizeHint": (), + "QComboBox.validator": (), + "QComboBox.view": (), + "QComboBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QCommandLinkButton: + "QCommandLinkButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget'), ('str', 'str', 'PySide2.QtWidgets.QWidget')], + "QCommandLinkButton.description": (), + "QCommandLinkButton.event": ('PySide2.QtCore.QEvent',), + "QCommandLinkButton.heightForWidth": ('int',), + "QCommandLinkButton.minimumSizeHint": (), + "QCommandLinkButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCommandLinkButton.setDescription": ('str',), + "QCommandLinkButton.sizeHint": (), + + # class PySide2.QtWidgets.QCommonStyle: + "QCommonStyle.__init__": (), + "QCommonStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QCommonStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QCommonStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QCommonStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QCompleter: + "QCompleter.__init__": [('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QObject')], + "QCompleter.caseSensitivity": (), + "QCompleter.complete": ('PySide2.QtCore.QRect',), + "QCompleter.completionColumn": (), + "QCompleter.completionCount": (), + "QCompleter.completionMode": (), + "QCompleter.completionModel": (), + "QCompleter.completionPrefix": (), + "QCompleter.completionRole": (), + "QCompleter.currentCompletion": (), + "QCompleter.currentIndex": (), + "QCompleter.currentRow": (), + "QCompleter.event": ('PySide2.QtCore.QEvent',), + "QCompleter.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCompleter.filterMode": (), + "QCompleter.maxVisibleItems": (), + "QCompleter.model": (), + "QCompleter.modelSorting": (), + "QCompleter.pathFromIndex": ('PySide2.QtCore.QModelIndex',), + "QCompleter.popup": (), + "QCompleter.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCompleter.setCompletionColumn": ('int',), + "QCompleter.setCompletionMode": ('PySide2.QtWidgets.QCompleter.CompletionMode',), + "QCompleter.setCompletionPrefix": ('str',), + "QCompleter.setCompletionRole": ('int',), + "QCompleter.setCurrentRow": ('int',), + "QCompleter.setFilterMode": ('MatchFlags',), + "QCompleter.setMaxVisibleItems": ('int',), + "QCompleter.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QCompleter.setModelSorting": ('PySide2.QtWidgets.QCompleter.ModelSorting',), + "QCompleter.setPopup": ('PySide2.QtWidgets.QAbstractItemView',), + "QCompleter.setWidget": ('PySide2.QtWidgets.QWidget',), + "QCompleter.setWrapAround": ('bool',), + "QCompleter.splitPath": ('str',), + "QCompleter.widget": (), + "QCompleter.wrapAround": (), + + # class PySide2.QtWidgets.QDataWidgetMapper: + "QDataWidgetMapper.__init__": ('PySide2.QtCore.QObject',), + "QDataWidgetMapper.addMapping": [('PySide2.QtWidgets.QWidget', 'int'), ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtCore.QByteArray')], + "QDataWidgetMapper.clearMapping": (), + "QDataWidgetMapper.currentIndex": (), + "QDataWidgetMapper.itemDelegate": (), + "QDataWidgetMapper.mappedPropertyName": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedSection": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedWidgetAt": ('int',), + "QDataWidgetMapper.model": (), + "QDataWidgetMapper.orientation": (), + "QDataWidgetMapper.removeMapping": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.revert": (), + "QDataWidgetMapper.rootIndex": (), + "QDataWidgetMapper.setCurrentIndex": ('int',), + "QDataWidgetMapper.setCurrentModelIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QDataWidgetMapper.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QDataWidgetMapper.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDataWidgetMapper.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setSubmitPolicy": ('PySide2.QtWidgets.QDataWidgetMapper.SubmitPolicy',), + "QDataWidgetMapper.submit": (), + "QDataWidgetMapper.submitPolicy": (), + "QDataWidgetMapper.toFirst": (), + "QDataWidgetMapper.toLast": (), + "QDataWidgetMapper.toNext": (), + "QDataWidgetMapper.toPrevious": (), + + # class PySide2.QtWidgets.QDateEdit: + "QDateEdit.__init__": [('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDateTimeEdit: + "QDateTimeEdit.__init__": [('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDateTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('PySide2.support.signature.typing.Any', 'type', 'PySide2.QtWidgets.QWidget')], + "QDateTimeEdit.calendarPopup": (), + "QDateTimeEdit.calendarWidget": (), + "QDateTimeEdit.clear": (), + "QDateTimeEdit.clearMaximumDate": (), + "QDateTimeEdit.clearMaximumDateTime": (), + "QDateTimeEdit.clearMaximumTime": (), + "QDateTimeEdit.clearMinimumDate": (), + "QDateTimeEdit.clearMinimumDateTime": (), + "QDateTimeEdit.clearMinimumTime": (), + "QDateTimeEdit.currentSection": (), + "QDateTimeEdit.currentSectionIndex": (), + "QDateTimeEdit.date": (), + "QDateTimeEdit.dateTime": (), + "QDateTimeEdit.dateTimeFromText": ('str',), + "QDateTimeEdit.displayFormat": (), + "QDateTimeEdit.displayedSections": (), + "QDateTimeEdit.event": ('PySide2.QtCore.QEvent',), + "QDateTimeEdit.fixup": ('str',), + "QDateTimeEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QDateTimeEdit.focusNextPrevChild": ('bool',), + "QDateTimeEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QDateTimeEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDateTimeEdit.maximumDate": (), + "QDateTimeEdit.maximumDateTime": (), + "QDateTimeEdit.maximumTime": (), + "QDateTimeEdit.minimumDate": (), + "QDateTimeEdit.minimumDateTime": (), + "QDateTimeEdit.minimumTime": (), + "QDateTimeEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDateTimeEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDateTimeEdit.sectionAt": ('int',), + "QDateTimeEdit.sectionCount": (), + "QDateTimeEdit.sectionText": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCalendarPopup": ('bool',), + "QDateTimeEdit.setCalendarWidget": ('PySide2.QtWidgets.QCalendarWidget',), + "QDateTimeEdit.setCurrentSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCurrentSectionIndex": ('int',), + "QDateTimeEdit.setDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QDateTimeEdit.setDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setDateTimeRange": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QDateTimeEdit.setDisplayFormat": ('str',), + "QDateTimeEdit.setMaximumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMaximumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMaximumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setMinimumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMinimumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMinimumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setSelectedSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setTimeRange": ('PySide2.QtCore.QTime', 'PySide2.QtCore.QTime'), + "QDateTimeEdit.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTimeEdit.sizeHint": (), + "QDateTimeEdit.stepBy": ('int',), + "QDateTimeEdit.stepEnabled": (), + "QDateTimeEdit.textFromDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.time": (), + "QDateTimeEdit.timeSpec": (), + "QDateTimeEdit.validate": ('str', 'int'), + "QDateTimeEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QDesktopWidget: + "QDesktopWidget.__init__": (), + "QDesktopWidget.availableGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.isVirtualDesktop": (), + "QDesktopWidget.numScreens": (), + "QDesktopWidget.primaryScreen": (), + "QDesktopWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDesktopWidget.screen": ('int',), + "QDesktopWidget.screenCount": (), + "QDesktopWidget.screenGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.screenNumber": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDial: + "QDial.__init__": ('PySide2.QtWidgets.QWidget',), + "QDial.event": ('PySide2.QtCore.QEvent',), + "QDial.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QDial.minimumSizeHint": (), + "QDial.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.notchSize": (), + "QDial.notchTarget": (), + "QDial.notchesVisible": (), + "QDial.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDial.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDial.setNotchTarget": ('float',), + "QDial.setNotchesVisible": ('bool',), + "QDial.setWrapping": ('bool',), + "QDial.sizeHint": (), + "QDial.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QDial.wrapping": (), + + # class PySide2.QtWidgets.QDialog: + "QDialog.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QDialog.accept": (), + "QDialog.adjustPosition": ('PySide2.QtWidgets.QWidget',), + "QDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDialog.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QDialog.done": ('int',), + "QDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QDialog.exec_": (), + "QDialog.extension": (), + "QDialog.isSizeGripEnabled": (), + "QDialog.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDialog.minimumSizeHint": (), + "QDialog.open": (), + "QDialog.orientation": (), + "QDialog.reject": (), + "QDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDialog.result": (), + "QDialog.setExtension": ('PySide2.QtWidgets.QWidget',), + "QDialog.setModal": ('bool',), + "QDialog.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialog.setResult": ('int',), + "QDialog.setSizeGripEnabled": ('bool',), + "QDialog.setVisible": ('bool',), + "QDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QDialog.showExtension": ('bool',), + "QDialog.sizeHint": (), + + # class PySide2.QtWidgets.QDialogButtonBox: + "QDialogButtonBox.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('StandardButtons', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('StandardButtons', 'PySide2.QtWidgets.QWidget')], + "QDialogButtonBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole'), ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), ('str', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole')], + "QDialogButtonBox.button": ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), + "QDialogButtonBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.buttons": (), + "QDialogButtonBox.centerButtons": (), + "QDialogButtonBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.clear": (), + "QDialogButtonBox.event": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.orientation": (), + "QDialogButtonBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.setCenterButtons": ('bool',), + "QDialogButtonBox.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialogButtonBox.setStandardButtons": ('StandardButtons',), + "QDialogButtonBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.standardButtons": (), + + # class PySide2.QtWidgets.QDirModel: + "QDirModel.__init__": [('PySide2.QtCore.QObject',), ('PySide2.support.signature.typing.List', 'Filters', 'SortFlags', 'PySide2.QtCore.QObject')], + "QDirModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QDirModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QDirModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filter": (), + "QDirModel.flags": ('PySide2.QtCore.QModelIndex',), + "QDirModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QDirModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QDirModel.iconProvider": (), + "QDirModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QDirModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.isReadOnly": (), + "QDirModel.lazyChildCount": (), + "QDirModel.mimeData": ('PySide2.support.signature.typing.List',), + "QDirModel.mimeTypes": (), + "QDirModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QDirModel.nameFilters": (), + "QDirModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QDirModel.refresh": ('PySide2.QtCore.QModelIndex',), + "QDirModel.remove": ('PySide2.QtCore.QModelIndex',), + "QDirModel.resolveSymlinks": (), + "QDirModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QDirModel.setFilter": ('Filters',), + "QDirModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QDirModel.setLazyChildCount": ('bool',), + "QDirModel.setNameFilters": ('PySide2.support.signature.typing.List',), + "QDirModel.setReadOnly": ('bool',), + "QDirModel.setResolveSymlinks": ('bool',), + "QDirModel.setSorting": ('SortFlags',), + "QDirModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QDirModel.sorting": (), + "QDirModel.supportedDropActions": (), + + # class PySide2.QtWidgets.QDockWidget: + "QDockWidget.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QDockWidget.allowedAreas": (), + "QDockWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QDockWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDockWidget.event": ('PySide2.QtCore.QEvent',), + "QDockWidget.features": (), + "QDockWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionDockWidget',), + "QDockWidget.isAreaAllowed": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QDockWidget.isFloating": (), + "QDockWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDockWidget.setAllowedAreas": ('DockWidgetAreas',), + "QDockWidget.setFeatures": ('DockWidgetFeatures',), + "QDockWidget.setFloating": ('bool',), + "QDockWidget.setTitleBarWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.titleBarWidget": (), + "QDockWidget.toggleViewAction": (), + "QDockWidget.widget": (), + + # class PySide2.QtWidgets.QDoubleSpinBox: + "QDoubleSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QDoubleSpinBox.cleanText": (), + "QDoubleSpinBox.decimals": (), + "QDoubleSpinBox.fixup": ('str',), + "QDoubleSpinBox.maximum": (), + "QDoubleSpinBox.minimum": (), + "QDoubleSpinBox.prefix": (), + "QDoubleSpinBox.setDecimals": ('int',), + "QDoubleSpinBox.setMaximum": ('float',), + "QDoubleSpinBox.setMinimum": ('float',), + "QDoubleSpinBox.setPrefix": ('str',), + "QDoubleSpinBox.setRange": ('float', 'float'), + "QDoubleSpinBox.setSingleStep": ('float',), + "QDoubleSpinBox.setSuffix": ('str',), + "QDoubleSpinBox.setValue": ('float',), + "QDoubleSpinBox.singleStep": (), + "QDoubleSpinBox.suffix": (), + "QDoubleSpinBox.textFromValue": ('float',), + "QDoubleSpinBox.validate": ('str', 'int'), + "QDoubleSpinBox.value": (), + "QDoubleSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QErrorMessage: + "QErrorMessage.__init__": ('PySide2.QtWidgets.QWidget',), + "QErrorMessage.changeEvent": ('PySide2.QtCore.QEvent',), + "QErrorMessage.done": ('int',), + "QErrorMessage.qtHandler": (), + "QErrorMessage.showMessage": [('str',), ('str', 'str')], + + # class PySide2.QtWidgets.QFileDialog: + "QFileDialog.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str')], + "QFileDialog.accept": (), + "QFileDialog.acceptMode": (), + "QFileDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFileDialog.confirmOverwrite": (), + "QFileDialog.defaultSuffix": (), + "QFileDialog.directory": (), + "QFileDialog.directoryUrl": (), + "QFileDialog.done": ('int',), + "QFileDialog.fileMode": (), + "QFileDialog.filter": (), + "QFileDialog.getExistingDirectory": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'Options'), + "QFileDialog.getExistingDirectoryUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'Options', 'PySide2.support.signature.typing.List'), + "QFileDialog.getOpenFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getOpenFileNames": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getOpenFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'PySide2.support.signature.typing.List'), + "QFileDialog.getOpenFileUrls": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'PySide2.support.signature.typing.List'), + "QFileDialog.getSaveFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getSaveFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'PySide2.support.signature.typing.List'), + "QFileDialog.history": (), + "QFileDialog.iconProvider": (), + "QFileDialog.isNameFilterDetailsVisible": (), + "QFileDialog.isReadOnly": (), + "QFileDialog.itemDelegate": (), + "QFileDialog.labelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel',), + "QFileDialog.mimeTypeFilters": (), + "QFileDialog.nameFilters": (), + "QFileDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFileDialog.options": (), + "QFileDialog.proxyModel": (), + "QFileDialog.resolveSymlinks": (), + "QFileDialog.restoreState": ('PySide2.QtCore.QByteArray',), + "QFileDialog.saveState": (), + "QFileDialog.selectFile": ('str',), + "QFileDialog.selectMimeTypeFilter": ('str',), + "QFileDialog.selectNameFilter": ('str',), + "QFileDialog.selectUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.selectedFiles": (), + "QFileDialog.selectedNameFilter": (), + "QFileDialog.selectedUrls": (), + "QFileDialog.setAcceptMode": ('PySide2.QtWidgets.QFileDialog.AcceptMode',), + "QFileDialog.setConfirmOverwrite": ('bool',), + "QFileDialog.setDefaultSuffix": ('str',), + "QFileDialog.setDirectory": [('PySide2.QtCore.QDir',), ('str',)], + "QFileDialog.setDirectoryUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.setFileMode": ('PySide2.QtWidgets.QFileDialog.FileMode',), + "QFileDialog.setFilter": ('Filters',), + "QFileDialog.setHistory": ('PySide2.support.signature.typing.List',), + "QFileDialog.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileDialog.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QFileDialog.setLabelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel', 'str'), + "QFileDialog.setMimeTypeFilters": ('PySide2.support.signature.typing.List',), + "QFileDialog.setNameFilter": ('str',), + "QFileDialog.setNameFilterDetailsVisible": ('bool',), + "QFileDialog.setNameFilters": ('PySide2.support.signature.typing.List',), + "QFileDialog.setOption": ('PySide2.QtWidgets.QFileDialog.Option', 'bool'), + "QFileDialog.setOptions": ('Options',), + "QFileDialog.setProxyModel": ('PySide2.QtCore.QAbstractProxyModel',), + "QFileDialog.setReadOnly": ('bool',), + "QFileDialog.setResolveSymlinks": ('bool',), + "QFileDialog.setSidebarUrls": ('list',), + "QFileDialog.setSupportedSchemes": ('PySide2.support.signature.typing.List',), + "QFileDialog.setViewMode": ('PySide2.QtWidgets.QFileDialog.ViewMode',), + "QFileDialog.setVisible": ('bool',), + "QFileDialog.sidebarUrls": (), + "QFileDialog.supportedSchemes": (), + "QFileDialog.testOption": ('PySide2.QtWidgets.QFileDialog.Option',), + "QFileDialog.viewMode": (), + + # class PySide2.QtWidgets.QFileIconProvider: + "QFileIconProvider.__init__": (), + "QFileIconProvider.icon": [('PySide2.QtCore.QFileInfo',), ('PySide2.QtWidgets.QFileIconProvider.IconType',)], + "QFileIconProvider.options": (), + "QFileIconProvider.setOptions": ('Options',), + "QFileIconProvider.type": ('PySide2.QtCore.QFileInfo',), + + # class PySide2.QtWidgets.QFileSystemModel: + "QFileSystemModel.__init__": ('PySide2.QtCore.QObject',), + "QFileSystemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QFileSystemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.event": ('PySide2.QtCore.QEvent',), + "QFileSystemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filter": (), + "QFileSystemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QFileSystemModel.iconProvider": (), + "QFileSystemModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QFileSystemModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.isReadOnly": (), + "QFileSystemModel.lastModified": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.mimeData": ('PySide2.support.signature.typing.List',), + "QFileSystemModel.mimeTypes": (), + "QFileSystemModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QFileSystemModel.myComputer": ('int',), + "QFileSystemModel.nameFilterDisables": (), + "QFileSystemModel.nameFilters": (), + "QFileSystemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QFileSystemModel.remove": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.resolveSymlinks": (), + "QFileSystemModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.rootDirectory": (), + "QFileSystemModel.rootPath": (), + "QFileSystemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QFileSystemModel.setFilter": ('Filters',), + "QFileSystemModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileSystemModel.setNameFilterDisables": ('bool',), + "QFileSystemModel.setNameFilters": ('PySide2.support.signature.typing.List',), + "QFileSystemModel.setReadOnly": ('bool',), + "QFileSystemModel.setResolveSymlinks": ('bool',), + "QFileSystemModel.setRootPath": ('str',), + "QFileSystemModel.size": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QFileSystemModel.supportedDropActions": (), + "QFileSystemModel.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QFileSystemModel.type": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtWidgets.QFocusFrame: + "QFocusFrame.__init__": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.event": ('PySide2.QtCore.QEvent',), + "QFocusFrame.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFocusFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QFocusFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFocusFrame.setWidget": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.widget": (), + + # class PySide2.QtWidgets.QFontComboBox: + "QFontComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QFontComboBox.currentFont": (), + "QFontComboBox.event": ('PySide2.QtCore.QEvent',), + "QFontComboBox.fontFilters": (), + "QFontComboBox.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontComboBox.setFontFilters": ('FontFilters',), + "QFontComboBox.setWritingSystem": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontComboBox.sizeHint": (), + "QFontComboBox.writingSystem": (), + + # class PySide2.QtWidgets.QFontDialog: + "QFontDialog.__init__": [('PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QFontDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFontDialog.currentFont": (), + "QFontDialog.done": ('int',), + "QFontDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFontDialog.getFont": [('bool', 'PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget', 'str', 'FontDialogOptions'), ('bool', 'PySide2.QtWidgets.QWidget')], + "QFontDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFontDialog.options": (), + "QFontDialog.selectedFont": (), + "QFontDialog.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontDialog.setOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption', 'bool'), + "QFontDialog.setOptions": ('FontDialogOptions',), + "QFontDialog.setVisible": ('bool',), + "QFontDialog.testOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption',), + + # class PySide2.QtWidgets.QFormLayout: + "QFormLayout.__init__": ('PySide2.QtWidgets.QWidget',), + "QFormLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QFormLayout.addRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QLayout'), ('str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.count": (), + "QFormLayout.expandingDirections": (), + "QFormLayout.fieldGrowthPolicy": (), + "QFormLayout.formAlignment": (), + "QFormLayout.getItemPosition": ('int', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getLayoutPosition": ('PySide2.QtWidgets.QLayout', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getWidgetPosition": ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.hasHeightForWidth": (), + "QFormLayout.heightForWidth": ('int',), + "QFormLayout.horizontalSpacing": (), + "QFormLayout.insertRow": [('int', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('int', 'str', 'PySide2.QtWidgets.QLayout'), ('int', 'str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.invalidate": (), + "QFormLayout.itemAt": [('int',), ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole')], + "QFormLayout.labelAlignment": (), + "QFormLayout.labelForField": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QFormLayout.minimumSize": (), + "QFormLayout.rowCount": (), + "QFormLayout.rowWrapPolicy": (), + "QFormLayout.setFieldGrowthPolicy": ('PySide2.QtWidgets.QFormLayout.FieldGrowthPolicy',), + "QFormLayout.setFormAlignment": ('Alignment',), + "QFormLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QFormLayout.setHorizontalSpacing": ('int',), + "QFormLayout.setItem": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayoutItem'), + "QFormLayout.setLabelAlignment": ('Alignment',), + "QFormLayout.setLayout": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayout'), + "QFormLayout.setRowWrapPolicy": ('PySide2.QtWidgets.QFormLayout.RowWrapPolicy',), + "QFormLayout.setSpacing": ('int',), + "QFormLayout.setVerticalSpacing": ('int',), + "QFormLayout.setWidget": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QWidget'), + "QFormLayout.sizeHint": (), + "QFormLayout.spacing": (), + "QFormLayout.takeAt": ('int',), + "QFormLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QFrame: + "QFrame.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QFrame.changeEvent": ('PySide2.QtCore.QEvent',), + "QFrame.drawFrame": ('PySide2.QtGui.QPainter',), + "QFrame.event": ('PySide2.QtCore.QEvent',), + "QFrame.frameRect": (), + "QFrame.frameShadow": (), + "QFrame.frameShape": (), + "QFrame.frameStyle": (), + "QFrame.frameWidth": (), + "QFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QFrame.lineWidth": (), + "QFrame.midLineWidth": (), + "QFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFrame.setFrameRect": ('PySide2.QtCore.QRect',), + "QFrame.setFrameShadow": ('PySide2.QtWidgets.QFrame.Shadow',), + "QFrame.setFrameShape": ('PySide2.QtWidgets.QFrame.Shape',), + "QFrame.setFrameStyle": ('int',), + "QFrame.setLineWidth": ('int',), + "QFrame.setMidLineWidth": ('int',), + "QFrame.sizeHint": (), + + # class PySide2.QtWidgets.QGesture: + "QGesture.__init__": ('PySide2.QtCore.QObject',), + "QGesture.gestureCancelPolicy": (), + "QGesture.gestureType": (), + "QGesture.hasHotSpot": (), + "QGesture.hotSpot": (), + "QGesture.setGestureCancelPolicy": ('PySide2.QtWidgets.QGesture.GestureCancelPolicy',), + "QGesture.setHotSpot": ('PySide2.QtCore.QPointF',), + "QGesture.state": (), + "QGesture.unsetHotSpot": (), + + # class PySide2.QtWidgets.QGestureEvent: + "QGestureEvent.__init__": ('list',), + "QGestureEvent.accept": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.activeGestures": (), + "QGestureEvent.canceledGestures": (), + "QGestureEvent.gesture": ('PySide2.QtCore.Qt.GestureType',), + "QGestureEvent.gestures": (), + "QGestureEvent.ignore": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.isAccepted": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.mapToGraphicsScene": ('PySide2.QtCore.QPointF',), + "QGestureEvent.setAccepted": [('PySide2.QtCore.Qt.GestureType', 'bool'), ('PySide2.QtWidgets.QGesture', 'bool'), ('bool',)], + "QGestureEvent.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGestureEvent.widget": (), + + # class PySide2.QtWidgets.QGestureRecognizer: + "QGestureRecognizer.__init__": (), + "QGestureRecognizer.create": ('PySide2.QtCore.QObject',), + "QGestureRecognizer.recognize": ('PySide2.QtWidgets.QGesture', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGestureRecognizer.registerRecognizer": ('PySide2.QtWidgets.QGestureRecognizer',), + "QGestureRecognizer.reset": ('PySide2.QtWidgets.QGesture',), + "QGestureRecognizer.unregisterRecognizer": ('PySide2.QtCore.Qt.GestureType',), + + # class PySide2.QtWidgets.QGraphicsAnchor: + "QGraphicsAnchor.setSpacing": ('float',), + "QGraphicsAnchor.setSizePolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QGraphicsAnchor.sizePolicy": (), + "QGraphicsAnchor.spacing": (), + "QGraphicsAnchor.unsetSpacing": (), + + # class PySide2.QtWidgets.QGraphicsAnchorLayout: + "QGraphicsAnchorLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsAnchorLayout.addAnchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.addAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'Orientations'), + "QGraphicsAnchorLayout.addCornerAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner'), + "QGraphicsAnchorLayout.anchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.count": (), + "QGraphicsAnchorLayout.horizontalSpacing": (), + "QGraphicsAnchorLayout.invalidate": (), + "QGraphicsAnchorLayout.itemAt": ('int',), + "QGraphicsAnchorLayout.removeAt": ('int',), + "QGraphicsAnchorLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsAnchorLayout.setHorizontalSpacing": ('float',), + "QGraphicsAnchorLayout.setSpacing": ('float',), + "QGraphicsAnchorLayout.setVerticalSpacing": ('float',), + "QGraphicsAnchorLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsAnchorLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsBlurEffect: + "QGraphicsBlurEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsBlurEffect.blurHints": (), + "QGraphicsBlurEffect.blurRadius": (), + "QGraphicsBlurEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsBlurEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsBlurEffect.setBlurHints": ('BlurHints',), + "QGraphicsBlurEffect.setBlurRadius": ('float',), + + # class PySide2.QtWidgets.QGraphicsColorizeEffect: + "QGraphicsColorizeEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsColorizeEffect.color": (), + "QGraphicsColorizeEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsColorizeEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsColorizeEffect.setStrength": ('float',), + "QGraphicsColorizeEffect.strength": (), + + # class PySide2.QtWidgets.QGraphicsDropShadowEffect: + "QGraphicsDropShadowEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsDropShadowEffect.blurRadius": (), + "QGraphicsDropShadowEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsDropShadowEffect.color": (), + "QGraphicsDropShadowEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsDropShadowEffect.offset": (), + "QGraphicsDropShadowEffect.setBlurRadius": ('float',), + "QGraphicsDropShadowEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsDropShadowEffect.setOffset": [('PySide2.QtCore.QPointF',), ('float',), ('float', 'float')], + "QGraphicsDropShadowEffect.setXOffset": ('float',), + "QGraphicsDropShadowEffect.setYOffset": ('float',), + "QGraphicsDropShadowEffect.xOffset": (), + "QGraphicsDropShadowEffect.yOffset": (), + + # class PySide2.QtWidgets.QGraphicsEffect: + "QGraphicsEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsEffect.boundingRect": (), + "QGraphicsEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.drawSource": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.isEnabled": (), + "QGraphicsEffect.setEnabled": ('bool',), + "QGraphicsEffect.sourceBoundingRect": ('PySide2.QtCore.Qt.CoordinateSystem',), + "QGraphicsEffect.sourceChanged": ('ChangeFlags',), + "QGraphicsEffect.sourceIsPixmap": (), + "QGraphicsEffect.sourcePixmap": ('PySide2.QtCore.Qt.CoordinateSystem', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QGraphicsEffect.PixmapPadMode'), + "QGraphicsEffect.update": (), + "QGraphicsEffect.updateBoundingRect": (), + + # class PySide2.QtWidgets.QGraphicsEllipseItem: + "QGraphicsEllipseItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsEllipseItem.boundingRect": (), + "QGraphicsEllipseItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsEllipseItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsEllipseItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsEllipseItem.opaqueArea": (), + "QGraphicsEllipseItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsEllipseItem.rect": (), + "QGraphicsEllipseItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsEllipseItem.setSpanAngle": ('int',), + "QGraphicsEllipseItem.setStartAngle": ('int',), + "QGraphicsEllipseItem.shape": (), + "QGraphicsEllipseItem.spanAngle": (), + "QGraphicsEllipseItem.startAngle": (), + "QGraphicsEllipseItem.type": (), + + # class PySide2.QtWidgets.QGraphicsGridLayout: + "QGraphicsGridLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.addItem": [('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'int', 'int', 'Alignment')], + "QGraphicsGridLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.columnAlignment": ('int',), + "QGraphicsGridLayout.columnCount": (), + "QGraphicsGridLayout.columnMaximumWidth": ('int',), + "QGraphicsGridLayout.columnMinimumWidth": ('int',), + "QGraphicsGridLayout.columnPreferredWidth": ('int',), + "QGraphicsGridLayout.columnSpacing": ('int',), + "QGraphicsGridLayout.columnStretchFactor": ('int',), + "QGraphicsGridLayout.count": (), + "QGraphicsGridLayout.horizontalSpacing": (), + "QGraphicsGridLayout.invalidate": (), + "QGraphicsGridLayout.itemAt": [('int',), ('int', 'int')], + "QGraphicsGridLayout.removeAt": ('int',), + "QGraphicsGridLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.rowAlignment": ('int',), + "QGraphicsGridLayout.rowCount": (), + "QGraphicsGridLayout.rowMaximumHeight": ('int',), + "QGraphicsGridLayout.rowMinimumHeight": ('int',), + "QGraphicsGridLayout.rowPreferredHeight": ('int',), + "QGraphicsGridLayout.rowSpacing": ('int',), + "QGraphicsGridLayout.rowStretchFactor": ('int',), + "QGraphicsGridLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'Alignment'), + "QGraphicsGridLayout.setColumnAlignment": ('int', 'Alignment'), + "QGraphicsGridLayout.setColumnFixedWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMaximumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMinimumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnPreferredWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnSpacing": ('int', 'float'), + "QGraphicsGridLayout.setColumnStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsGridLayout.setHorizontalSpacing": ('float',), + "QGraphicsGridLayout.setRowAlignment": ('int', 'Alignment'), + "QGraphicsGridLayout.setRowFixedHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMaximumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMinimumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowPreferredHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowSpacing": ('int', 'float'), + "QGraphicsGridLayout.setRowStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setSpacing": ('float',), + "QGraphicsGridLayout.setVerticalSpacing": ('float',), + "QGraphicsGridLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsItem: + "QGraphicsItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.acceptDrops": (), + "QGraphicsItem.acceptHoverEvents": (), + "QGraphicsItem.acceptTouchEvents": (), + "QGraphicsItem.acceptedMouseButtons": (), + "QGraphicsItem.addToIndex": (), + "QGraphicsItem.advance": ('int',), + "QGraphicsItem.boundingRect": (), + "QGraphicsItem.boundingRegion": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.boundingRegionGranularity": (), + "QGraphicsItem.cacheMode": (), + "QGraphicsItem.childItems": (), + "QGraphicsItem.childrenBoundingRect": (), + "QGraphicsItem.clearFocus": (), + "QGraphicsItem.clipPath": (), + "QGraphicsItem.collidesWithItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidesWithPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidingItems": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsItem.commonAncestorItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsItem.cursor": (), + "QGraphicsItem.data": ('int',), + "QGraphicsItem.deviceTransform": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.effectiveOpacity": (), + "QGraphicsItem.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsItem.filtersChildEvents": (), + "QGraphicsItem.flags": (), + "QGraphicsItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusItem": (), + "QGraphicsItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusProxy": (), + "QGraphicsItem.focusScopeItem": (), + "QGraphicsItem.grabKeyboard": (), + "QGraphicsItem.grabMouse": (), + "QGraphicsItem.graphicsEffect": (), + "QGraphicsItem.group": (), + "QGraphicsItem.handlesChildEvents": (), + "QGraphicsItem.hasCursor": (), + "QGraphicsItem.hasFocus": (), + "QGraphicsItem.hide": (), + "QGraphicsItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsItem.inputMethodHints": (), + "QGraphicsItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsItem.installSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isActive": (), + "QGraphicsItem.isAncestorOf": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isBlockedByModalPanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isClipped": (), + "QGraphicsItem.isEnabled": (), + "QGraphicsItem.isObscured": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isPanel": (), + "QGraphicsItem.isSelected": (), + "QGraphicsItem.isUnderMouse": (), + "QGraphicsItem.isVisible": (), + "QGraphicsItem.isVisibleTo": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isWidget": (), + "QGraphicsItem.isWindow": (), + "QGraphicsItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'PySide2.support.signature.typing.Any'), + "QGraphicsItem.itemTransform": ('PySide2.QtWidgets.QGraphicsItem', 'bool'), + "QGraphicsItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.mapFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapToParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.matrix": (), + "QGraphicsItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.moveBy": ('float', 'float'), + "QGraphicsItem.opacity": (), + "QGraphicsItem.opaqueArea": (), + "QGraphicsItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItem.panel": (), + "QGraphicsItem.panelModality": (), + "QGraphicsItem.parentItem": (), + "QGraphicsItem.parentObject": (), + "QGraphicsItem.parentWidget": (), + "QGraphicsItem.pos": (), + "QGraphicsItem.prepareGeometryChange": (), + "QGraphicsItem.removeFromIndex": (), + "QGraphicsItem.removeSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.resetMatrix": (), + "QGraphicsItem.resetTransform": (), + "QGraphicsItem.rotation": (), + "QGraphicsItem.scale": (), + "QGraphicsItem.scene": (), + "QGraphicsItem.sceneBoundingRect": (), + "QGraphicsItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsItem.sceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsItem.sceneMatrix": (), + "QGraphicsItem.scenePos": (), + "QGraphicsItem.sceneTransform": (), + "QGraphicsItem.scroll": ('float', 'float', 'PySide2.QtCore.QRectF'), + "QGraphicsItem.setAcceptDrops": ('bool',), + "QGraphicsItem.setAcceptHoverEvents": ('bool',), + "QGraphicsItem.setAcceptTouchEvents": ('bool',), + "QGraphicsItem.setAcceptedMouseButtons": ('MouseButtons',), + "QGraphicsItem.setActive": ('bool',), + "QGraphicsItem.setBoundingRegionGranularity": ('float',), + "QGraphicsItem.setCacheMode": ('PySide2.QtWidgets.QGraphicsItem.CacheMode', 'PySide2.QtCore.QSize'), + "QGraphicsItem.setCursor": ('PySide2.QtGui.QCursor',), + "QGraphicsItem.setData": ('int', 'PySide2.support.signature.typing.Any'), + "QGraphicsItem.setEnabled": ('bool',), + "QGraphicsItem.setFiltersChildEvents": ('bool',), + "QGraphicsItem.setFlag": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemFlag', 'bool'), + "QGraphicsItem.setFlags": ('GraphicsItemFlags',), + "QGraphicsItem.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsItem.setFocusProxy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QGraphicsItem.setGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsItem.setHandlesChildEvents": ('bool',), + "QGraphicsItem.setInputMethodHints": ('InputMethodHints',), + "QGraphicsItem.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsItem.setOpacity": ('float',), + "QGraphicsItem.setPanelModality": ('PySide2.QtWidgets.QGraphicsItem.PanelModality',), + "QGraphicsItem.setParentItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setPos": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setRotation": ('float',), + "QGraphicsItem.setScale": ('float',), + "QGraphicsItem.setSelected": ('bool',), + "QGraphicsItem.setToolTip": ('str',), + "QGraphicsItem.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsItem.setTransformOriginPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setTransformations": ('list',), + "QGraphicsItem.setVisible": ('bool',), + "QGraphicsItem.setX": ('float',), + "QGraphicsItem.setY": ('float',), + "QGraphicsItem.setZValue": ('float',), + "QGraphicsItem.shape": (), + "QGraphicsItem.show": (), + "QGraphicsItem.stackBefore": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.toGraphicsObject": [], + "QGraphicsItem.toolTip": (), + "QGraphicsItem.topLevelItem": (), + "QGraphicsItem.topLevelWidget": (), + "QGraphicsItem.transform": (), + "QGraphicsItem.transformOriginPoint": (), + "QGraphicsItem.transformations": (), + "QGraphicsItem.type": (), + "QGraphicsItem.ungrabKeyboard": (), + "QGraphicsItem.ungrabMouse": (), + "QGraphicsItem.unsetCursor": (), + "QGraphicsItem.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.updateMicroFocus": (), + "QGraphicsItem.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsItem.window": (), + "QGraphicsItem.x": (), + "QGraphicsItem.y": (), + "QGraphicsItem.zValue": (), + + # class PySide2.QtWidgets.QGraphicsItemAnimation: + "QGraphicsItemAnimation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsItemAnimation.afterAnimationStep": ('float',), + "QGraphicsItemAnimation.beforeAnimationStep": ('float',), + "QGraphicsItemAnimation.clear": (), + "QGraphicsItemAnimation.horizontalScaleAt": ('float',), + "QGraphicsItemAnimation.horizontalShearAt": ('float',), + "QGraphicsItemAnimation.item": (), + "QGraphicsItemAnimation.matrixAt": ('float',), + "QGraphicsItemAnimation.posAt": ('float',), + "QGraphicsItemAnimation.posList": (), + "QGraphicsItemAnimation.reset": (), + "QGraphicsItemAnimation.rotationAt": ('float',), + "QGraphicsItemAnimation.rotationList": (), + "QGraphicsItemAnimation.scaleList": (), + "QGraphicsItemAnimation.setItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemAnimation.setPosAt": ('float', 'PySide2.QtCore.QPointF'), + "QGraphicsItemAnimation.setRotationAt": ('float', 'float'), + "QGraphicsItemAnimation.setScaleAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setShearAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setStep": ('float',), + "QGraphicsItemAnimation.setTimeLine": ('PySide2.QtCore.QTimeLine',), + "QGraphicsItemAnimation.setTranslationAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.shearList": (), + "QGraphicsItemAnimation.timeLine": (), + "QGraphicsItemAnimation.translationList": (), + "QGraphicsItemAnimation.verticalScaleAt": ('float',), + "QGraphicsItemAnimation.verticalShearAt": ('float',), + "QGraphicsItemAnimation.xTranslationAt": ('float',), + "QGraphicsItemAnimation.yTranslationAt": ('float',), + + # class PySide2.QtWidgets.QGraphicsItemGroup: + "QGraphicsItemGroup.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.addToGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.boundingRect": (), + "QGraphicsItemGroup.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.opaqueArea": (), + "QGraphicsItemGroup.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItemGroup.removeFromGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.type": (), + + # class PySide2.QtWidgets.QGraphicsLayout: + "QGraphicsLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.activate": (), + "QGraphicsLayout.addChildLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.count": (), + "QGraphicsLayout.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.instantInvalidatePropagation": (), + "QGraphicsLayout.invalidate": (), + "QGraphicsLayout.isActivated": (), + "QGraphicsLayout.itemAt": ('int',), + "QGraphicsLayout.removeAt": ('int',), + "QGraphicsLayout.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.setInstantInvalidatePropagation": ('bool',), + "QGraphicsLayout.updateGeometry": (), + "QGraphicsLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QGraphicsLayoutItem: + "QGraphicsLayoutItem.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'bool'), + "QGraphicsLayoutItem.contentsRect": (), + "QGraphicsLayoutItem.effectiveSizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.geometry": (), + "QGraphicsLayoutItem.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayoutItem.graphicsItem": (), + "QGraphicsLayoutItem.isLayout": (), + "QGraphicsLayoutItem.maximumHeight": (), + "QGraphicsLayoutItem.maximumSize": (), + "QGraphicsLayoutItem.maximumWidth": (), + "QGraphicsLayoutItem.minimumHeight": (), + "QGraphicsLayoutItem.minimumSize": (), + "QGraphicsLayoutItem.minimumWidth": (), + "QGraphicsLayoutItem.ownedByLayout": (), + "QGraphicsLayoutItem.parentLayoutItem": (), + "QGraphicsLayoutItem.preferredHeight": (), + "QGraphicsLayoutItem.preferredSize": (), + "QGraphicsLayoutItem.preferredWidth": (), + "QGraphicsLayoutItem.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLayoutItem.setGraphicsItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLayoutItem.setMaximumHeight": ('float',), + "QGraphicsLayoutItem.setMaximumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMaximumWidth": ('float',), + "QGraphicsLayoutItem.setMinimumHeight": ('float',), + "QGraphicsLayoutItem.setMinimumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMinimumWidth": ('float',), + "QGraphicsLayoutItem.setOwnedByLayout": ('bool',), + "QGraphicsLayoutItem.setParentLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayoutItem.setPreferredHeight": ('float',), + "QGraphicsLayoutItem.setPreferredSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setPreferredWidth": ('float',), + "QGraphicsLayoutItem.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QGraphicsLayoutItem.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.sizePolicy": (), + "QGraphicsLayoutItem.updateGeometry": (), + + # class PySide2.QtWidgets.QGraphicsLineItem: + "QGraphicsLineItem.__init__": [('PySide2.QtCore.QLineF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsLineItem.boundingRect": (), + "QGraphicsLineItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsLineItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsLineItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLineItem.line": (), + "QGraphicsLineItem.opaqueArea": (), + "QGraphicsLineItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsLineItem.pen": (), + "QGraphicsLineItem.setLine": [('PySide2.QtCore.QLineF',), ('float', 'float', 'float', 'float')], + "QGraphicsLineItem.setPen": ('PySide2.QtGui.QPen',), + "QGraphicsLineItem.shape": (), + "QGraphicsLineItem.type": (), + + # class PySide2.QtWidgets.QGraphicsLinearLayout: + "QGraphicsLinearLayout.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QGraphicsLayoutItem'), ('PySide2.QtWidgets.QGraphicsLayoutItem',)], + "QGraphicsLinearLayout.addItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.addStretch": ('int',), + "QGraphicsLinearLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.count": (), + "QGraphicsLinearLayout.dump": ('int',), + "QGraphicsLinearLayout.insertItem": ('int', 'PySide2.QtWidgets.QGraphicsLayoutItem'), + "QGraphicsLinearLayout.insertStretch": ('int', 'int'), + "QGraphicsLinearLayout.invalidate": (), + "QGraphicsLinearLayout.itemAt": ('int',), + "QGraphicsLinearLayout.itemSpacing": ('int',), + "QGraphicsLinearLayout.orientation": (), + "QGraphicsLinearLayout.removeAt": ('int',), + "QGraphicsLinearLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'Alignment'), + "QGraphicsLinearLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLinearLayout.setItemSpacing": ('int', 'float'), + "QGraphicsLinearLayout.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsLinearLayout.setSpacing": ('float',), + "QGraphicsLinearLayout.setStretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int'), + "QGraphicsLinearLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLinearLayout.spacing": (), + "QGraphicsLinearLayout.stretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + + # class PySide2.QtWidgets.QGraphicsObject: + "QGraphicsObject.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsObject.event": ('PySide2.QtCore.QEvent',), + "QGraphicsObject.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'GestureFlags'), + "QGraphicsObject.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QGraphicsObject.updateMicroFocus": (), + + # class PySide2.QtWidgets.QGraphicsOpacityEffect: + "QGraphicsOpacityEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsOpacityEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsOpacityEffect.opacity": (), + "QGraphicsOpacityEffect.opacityMask": (), + "QGraphicsOpacityEffect.setOpacity": ('float',), + "QGraphicsOpacityEffect.setOpacityMask": ('PySide2.QtGui.QBrush',), + + # class PySide2.QtWidgets.QGraphicsPathItem: + "QGraphicsPathItem.__init__": [('PySide2.QtGui.QPainterPath', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPathItem.boundingRect": (), + "QGraphicsPathItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPathItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsPathItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPathItem.opaqueArea": (), + "QGraphicsPathItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPathItem.path": (), + "QGraphicsPathItem.setPath": ('PySide2.QtGui.QPainterPath',), + "QGraphicsPathItem.shape": (), + "QGraphicsPathItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPixmapItem: + "QGraphicsPixmapItem.__init__": [('PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPixmapItem.boundingRect": (), + "QGraphicsPixmapItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPixmapItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsPixmapItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPixmapItem.offset": (), + "QGraphicsPixmapItem.opaqueArea": (), + "QGraphicsPixmapItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPixmapItem.pixmap": (), + "QGraphicsPixmapItem.setOffset": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsPixmapItem.setPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsPixmapItem.setShapeMode": ('PySide2.QtWidgets.QGraphicsPixmapItem.ShapeMode',), + "QGraphicsPixmapItem.setTransformationMode": ('PySide2.QtCore.Qt.TransformationMode',), + "QGraphicsPixmapItem.shape": (), + "QGraphicsPixmapItem.shapeMode": (), + "QGraphicsPixmapItem.transformationMode": (), + "QGraphicsPixmapItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPolygonItem: + "QGraphicsPolygonItem.__init__": [('PySide2.QtGui.QPolygonF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPolygonItem.boundingRect": (), + "QGraphicsPolygonItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPolygonItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsPolygonItem.fillRule": (), + "QGraphicsPolygonItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPolygonItem.opaqueArea": (), + "QGraphicsPolygonItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPolygonItem.polygon": (), + "QGraphicsPolygonItem.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QGraphicsPolygonItem.setPolygon": ('PySide2.QtGui.QPolygonF',), + "QGraphicsPolygonItem.shape": (), + "QGraphicsPolygonItem.type": (), + + # class PySide2.QtWidgets.QGraphicsProxyWidget: + "QGraphicsProxyWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'WindowFlags'), + "QGraphicsProxyWidget.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsProxyWidget.createProxyForChildWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsProxyWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.focusNextPrevChild": ('bool',), + "QGraphicsProxyWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsProxyWidget.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsProxyWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsProxyWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'PySide2.support.signature.typing.Any'), + "QGraphicsProxyWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.newProxyWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsProxyWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsProxyWidget.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsProxyWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsProxyWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsProxyWidget.subWidgetRect": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.type": (), + "QGraphicsProxyWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsProxyWidget.widget": (), + + # class PySide2.QtWidgets.QGraphicsRectItem: + "QGraphicsRectItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsRectItem.boundingRect": (), + "QGraphicsRectItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsRectItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsRectItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsRectItem.opaqueArea": (), + "QGraphicsRectItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsRectItem.rect": (), + "QGraphicsRectItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsRectItem.shape": (), + "QGraphicsRectItem.type": (), + + # class PySide2.QtWidgets.QGraphicsRotation: + "QGraphicsRotation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsRotation.angle": (), + "QGraphicsRotation.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsRotation.axis": (), + "QGraphicsRotation.origin": (), + "QGraphicsRotation.setAngle": ('float',), + "QGraphicsRotation.setAxis": [('PySide2.QtCore.Qt.Axis',), ('PySide2.QtGui.QVector3D',)], + "QGraphicsRotation.setOrigin": ('PySide2.QtGui.QVector3D',), + + # class PySide2.QtWidgets.QGraphicsScale: + "QGraphicsScale.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsScale.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsScale.origin": (), + "QGraphicsScale.setOrigin": ('PySide2.QtGui.QVector3D',), + "QGraphicsScale.setXScale": ('float',), + "QGraphicsScale.setYScale": ('float',), + "QGraphicsScale.setZScale": ('float',), + "QGraphicsScale.xScale": (), + "QGraphicsScale.yScale": (), + "QGraphicsScale.zScale": (), + + # class PySide2.QtWidgets.QGraphicsScene: + "QGraphicsScene.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QObject'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.QObject')], + "QGraphicsScene.activePanel": (), + "QGraphicsScene.activeWindow": (), + "QGraphicsScene.addEllipse": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.addLine": [('PySide2.QtCore.QLineF', 'PySide2.QtGui.QPen'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen')], + "QGraphicsScene.addPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsScene.addPolygon": ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addRect": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addSimpleText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addWidget": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QGraphicsScene.advance": (), + "QGraphicsScene.backgroundBrush": (), + "QGraphicsScene.bspTreeDepth": (), + "QGraphicsScene.clear": (), + "QGraphicsScene.clearFocus": (), + "QGraphicsScene.clearSelection": (), + "QGraphicsScene.collidingItems": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsScene.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsScene.createItemGroup": ('list',), + "QGraphicsScene.destroyItemGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsScene.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.event": ('PySide2.QtCore.QEvent',), + "QGraphicsScene.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.focusItem": (), + "QGraphicsScene.focusNextPrevChild": ('bool',), + "QGraphicsScene.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.font": (), + "QGraphicsScene.foregroundBrush": (), + "QGraphicsScene.hasFocus": (), + "QGraphicsScene.height": (), + "QGraphicsScene.helpEvent": ('PySide2.QtWidgets.QGraphicsSceneHelpEvent',), + "QGraphicsScene.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsScene.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsScene.invalidate": [('PySide2.QtCore.QRectF', 'SceneLayers'), ('float', 'float', 'float', 'float', 'SceneLayers')], + "QGraphicsScene.isActive": (), + "QGraphicsScene.isSortCacheEnabled": (), + "QGraphicsScene.itemAt": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTransform'), ('float', 'float', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemIndexMethod": (), + "QGraphicsScene.items": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemsBoundingRect": (), + "QGraphicsScene.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.minimumRenderSize": (), + "QGraphicsScene.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseGrabberItem": (), + "QGraphicsScene.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.palette": (), + "QGraphicsScene.removeItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.render": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), + "QGraphicsScene.sceneRect": (), + "QGraphicsScene.selectedItems": (), + "QGraphicsScene.selectionArea": (), + "QGraphicsScene.sendEvent": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.setActivePanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.setActiveWindow": ('PySide2.QtWidgets.QGraphicsWidget',), + "QGraphicsScene.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setBspTreeDepth": ('int',), + "QGraphicsScene.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsScene.setFocusItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.FocusReason'), + "QGraphicsScene.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsScene.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setItemIndexMethod": ('PySide2.QtWidgets.QGraphicsScene.ItemIndexMethod',), + "QGraphicsScene.setMinimumRenderSize": ('float',), + "QGraphicsScene.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsScene.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.setSelectionArea": [('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionOperation', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.setSortCacheEnabled": ('bool',), + "QGraphicsScene.setStickyFocus": ('bool',), + "QGraphicsScene.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsScene.stickyFocus": (), + "QGraphicsScene.style": (), + "QGraphicsScene.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.views": (), + "QGraphicsScene.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsScene.width": (), + + # class PySide2.QtWidgets.QGraphicsSceneContextMenuEvent: + "QGraphicsSceneContextMenuEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneContextMenuEvent.modifiers": (), + "QGraphicsSceneContextMenuEvent.pos": (), + "QGraphicsSceneContextMenuEvent.reason": (), + "QGraphicsSceneContextMenuEvent.scenePos": (), + "QGraphicsSceneContextMenuEvent.screenPos": (), + "QGraphicsSceneContextMenuEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneContextMenuEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setReason": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent.Reason',), + "QGraphicsSceneContextMenuEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneDragDropEvent: + "QGraphicsSceneDragDropEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneDragDropEvent.acceptProposedAction": (), + "QGraphicsSceneDragDropEvent.buttons": (), + "QGraphicsSceneDragDropEvent.dropAction": (), + "QGraphicsSceneDragDropEvent.mimeData": (), + "QGraphicsSceneDragDropEvent.modifiers": (), + "QGraphicsSceneDragDropEvent.pos": (), + "QGraphicsSceneDragDropEvent.possibleActions": (), + "QGraphicsSceneDragDropEvent.proposedAction": (), + "QGraphicsSceneDragDropEvent.scenePos": (), + "QGraphicsSceneDragDropEvent.screenPos": (), + "QGraphicsSceneDragDropEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneDragDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneDragDropEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setPossibleActions": ('DropActions',), + "QGraphicsSceneDragDropEvent.setProposedAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneDragDropEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneEvent: + "QGraphicsSceneEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneEvent.widget": (), + + # class PySide2.QtWidgets.QGraphicsSceneHelpEvent: + "QGraphicsSceneHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHelpEvent.scenePos": (), + "QGraphicsSceneHelpEvent.screenPos": (), + "QGraphicsSceneHelpEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHelpEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneHoverEvent: + "QGraphicsSceneHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHoverEvent.lastPos": (), + "QGraphicsSceneHoverEvent.lastScenePos": (), + "QGraphicsSceneHoverEvent.lastScreenPos": (), + "QGraphicsSceneHoverEvent.modifiers": (), + "QGraphicsSceneHoverEvent.pos": (), + "QGraphicsSceneHoverEvent.scenePos": (), + "QGraphicsSceneHoverEvent.screenPos": (), + "QGraphicsSceneHoverEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneHoverEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneHoverEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneMouseEvent: + "QGraphicsSceneMouseEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneMouseEvent.button": (), + "QGraphicsSceneMouseEvent.buttonDownPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScenePos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttons": (), + "QGraphicsSceneMouseEvent.flags": (), + "QGraphicsSceneMouseEvent.lastPos": (), + "QGraphicsSceneMouseEvent.lastScenePos": (), + "QGraphicsSceneMouseEvent.lastScreenPos": (), + "QGraphicsSceneMouseEvent.modifiers": (), + "QGraphicsSceneMouseEvent.pos": (), + "QGraphicsSceneMouseEvent.scenePos": (), + "QGraphicsSceneMouseEvent.screenPos": (), + "QGraphicsSceneMouseEvent.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.setButtonDownPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScenePos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPoint'), + "QGraphicsSceneMouseEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneMouseEvent.setFlags": ('MouseEventFlags',), + "QGraphicsSceneMouseEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneMouseEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setSource": ('PySide2.QtCore.Qt.MouseEventSource',), + "QGraphicsSceneMouseEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneMoveEvent: + "QGraphicsSceneMoveEvent.__init__": (), + "QGraphicsSceneMoveEvent.newPos": (), + "QGraphicsSceneMoveEvent.oldPos": (), + "QGraphicsSceneMoveEvent.setNewPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMoveEvent.setOldPos": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QGraphicsSceneResizeEvent: + "QGraphicsSceneResizeEvent.__init__": (), + "QGraphicsSceneResizeEvent.newSize": (), + "QGraphicsSceneResizeEvent.oldSize": (), + "QGraphicsSceneResizeEvent.setNewSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsSceneResizeEvent.setOldSize": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtWidgets.QGraphicsSceneWheelEvent: + "QGraphicsSceneWheelEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneWheelEvent.buttons": (), + "QGraphicsSceneWheelEvent.delta": (), + "QGraphicsSceneWheelEvent.modifiers": (), + "QGraphicsSceneWheelEvent.orientation": (), + "QGraphicsSceneWheelEvent.pos": (), + "QGraphicsSceneWheelEvent.scenePos": (), + "QGraphicsSceneWheelEvent.screenPos": (), + "QGraphicsSceneWheelEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneWheelEvent.setDelta": ('int',), + "QGraphicsSceneWheelEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneWheelEvent.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsSceneWheelEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSimpleTextItem: + "QGraphicsSimpleTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSimpleTextItem.boundingRect": (), + "QGraphicsSimpleTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsSimpleTextItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsSimpleTextItem.font": (), + "QGraphicsSimpleTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsSimpleTextItem.opaqueArea": (), + "QGraphicsSimpleTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSimpleTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsSimpleTextItem.setText": ('str',), + "QGraphicsSimpleTextItem.shape": (), + "QGraphicsSimpleTextItem.text": (), + "QGraphicsSimpleTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTextItem: + "QGraphicsTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsTextItem.adjustSize": (), + "QGraphicsTextItem.boundingRect": (), + "QGraphicsTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsTextItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsTextItem.defaultTextColor": (), + "QGraphicsTextItem.document": (), + "QGraphicsTextItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsTextItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.font": (), + "QGraphicsTextItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsTextItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsTextItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.opaqueArea": (), + "QGraphicsTextItem.openExternalLinks": (), + "QGraphicsTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsTextItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsTextItem.setDefaultTextColor": ('PySide2.QtGui.QColor',), + "QGraphicsTextItem.setDocument": ('PySide2.QtGui.QTextDocument',), + "QGraphicsTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsTextItem.setHtml": ('str',), + "QGraphicsTextItem.setOpenExternalLinks": ('bool',), + "QGraphicsTextItem.setPlainText": ('str',), + "QGraphicsTextItem.setTabChangesFocus": ('bool',), + "QGraphicsTextItem.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QGraphicsTextItem.setTextInteractionFlags": ('TextInteractionFlags',), + "QGraphicsTextItem.setTextWidth": ('float',), + "QGraphicsTextItem.shape": (), + "QGraphicsTextItem.tabChangesFocus": (), + "QGraphicsTextItem.textCursor": (), + "QGraphicsTextItem.textInteractionFlags": (), + "QGraphicsTextItem.textWidth": (), + "QGraphicsTextItem.toHtml": (), + "QGraphicsTextItem.toPlainText": (), + "QGraphicsTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTransform: + "QGraphicsTransform.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsTransform.update": (), + + # class PySide2.QtWidgets.QGraphicsView: + "QGraphicsView.__init__": [('PySide2.QtWidgets.QGraphicsScene', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QGraphicsView.alignment": (), + "QGraphicsView.backgroundBrush": (), + "QGraphicsView.cacheMode": (), + "QGraphicsView.centerOn": [('PySide2.QtCore.QPointF',), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float')], + "QGraphicsView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QGraphicsView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QGraphicsView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QGraphicsView.dragMode": (), + "QGraphicsView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QGraphicsView.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawItems": ('PySide2.QtGui.QPainter', 'int', 'PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtWidgets.QStyleOptionGraphicsItem'), + "QGraphicsView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QGraphicsView.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('PySide2.QtWidgets.QGraphicsItem', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsView.event": ('PySide2.QtCore.QEvent',), + "QGraphicsView.fitInView": [('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.focusNextPrevChild": ('bool',), + "QGraphicsView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.foregroundBrush": (), + "QGraphicsView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsView.invalidateScene": ('PySide2.QtCore.QRectF', 'SceneLayers'), + "QGraphicsView.isInteractive": (), + "QGraphicsView.isTransformed": (), + "QGraphicsView.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QGraphicsView.items": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ItemSelectionMode')], + "QGraphicsView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsView.mapToScene": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('int', 'int'), ('int', 'int', 'int', 'int')], + "QGraphicsView.matrix": (), + "QGraphicsView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.optimizationFlags": (), + "QGraphicsView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGraphicsView.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.renderHints": (), + "QGraphicsView.resetCachedContent": (), + "QGraphicsView.resetMatrix": (), + "QGraphicsView.resetTransform": (), + "QGraphicsView.resizeAnchor": (), + "QGraphicsView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGraphicsView.rotate": ('float',), + "QGraphicsView.rubberBandRect": (), + "QGraphicsView.rubberBandSelectionMode": (), + "QGraphicsView.scale": ('float', 'float'), + "QGraphicsView.scene": (), + "QGraphicsView.sceneRect": (), + "QGraphicsView.scrollContentsBy": ('int', 'int'), + "QGraphicsView.setAlignment": ('Alignment',), + "QGraphicsView.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setCacheMode": ('CacheMode',), + "QGraphicsView.setDragMode": ('PySide2.QtWidgets.QGraphicsView.DragMode',), + "QGraphicsView.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setInteractive": ('bool',), + "QGraphicsView.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsView.setOptimizationFlag": ('PySide2.QtWidgets.QGraphicsView.OptimizationFlag', 'bool'), + "QGraphicsView.setOptimizationFlags": ('OptimizationFlags',), + "QGraphicsView.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QGraphicsView.setRenderHints": ('RenderHints',), + "QGraphicsView.setResizeAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setRubberBandSelectionMode": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsView.setScene": ('PySide2.QtWidgets.QGraphicsScene',), + "QGraphicsView.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsView.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsView.setTransformationAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setViewportUpdateMode": ('PySide2.QtWidgets.QGraphicsView.ViewportUpdateMode',), + "QGraphicsView.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QGraphicsView.shear": ('float', 'float'), + "QGraphicsView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsView.sizeHint": (), + "QGraphicsView.transform": (), + "QGraphicsView.transformationAnchor": (), + "QGraphicsView.translate": ('float', 'float'), + "QGraphicsView.updateScene": ('list',), + "QGraphicsView.updateSceneRect": ('PySide2.QtCore.QRectF',), + "QGraphicsView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsView.viewportTransform": (), + "QGraphicsView.viewportUpdateMode": (), + "QGraphicsView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QGraphicsWidget: + "QGraphicsWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'WindowFlags'), + "QGraphicsWidget.actions": (), + "QGraphicsWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.addActions": ('list',), + "QGraphicsWidget.adjustSize": (), + "QGraphicsWidget.autoFillBackground": (), + "QGraphicsWidget.boundingRect": (), + "QGraphicsWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.close": (), + "QGraphicsWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QGraphicsWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusNextPrevChild": ('bool',), + "QGraphicsWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusPolicy": (), + "QGraphicsWidget.focusWidget": (), + "QGraphicsWidget.font": (), + "QGraphicsWidget.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.getWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.grabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QGraphicsWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QGraphicsWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QGraphicsWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QGraphicsWidget.isActiveWindow": (), + "QGraphicsWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'PySide2.support.signature.typing.Any'), + "QGraphicsWidget.layout": (), + "QGraphicsWidget.layoutDirection": (), + "QGraphicsWidget.moveEvent": ('PySide2.QtWidgets.QGraphicsSceneMoveEvent',), + "QGraphicsWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.paintWindowFrame": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.palette": (), + "QGraphicsWidget.polishEvent": (), + "QGraphicsWidget.propertyChange": ('str', 'PySide2.support.signature.typing.Any'), + "QGraphicsWidget.rect": (), + "QGraphicsWidget.releaseShortcut": ('int',), + "QGraphicsWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.resize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsWidget.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QGraphicsWidget.setAutoFillBackground": ('bool',), + "QGraphicsWidget.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QGraphicsWidget.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsWidget.setGeometry": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsWidget.setLayout": ('PySide2.QtWidgets.QGraphicsLayout',), + "QGraphicsWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGraphicsWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QGraphicsWidget.setShortcutEnabled": ('int', 'bool'), + "QGraphicsWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsWidget.setTabOrder": ('PySide2.QtWidgets.QGraphicsWidget', 'PySide2.QtWidgets.QGraphicsWidget'), + "QGraphicsWidget.setWindowFlags": ('WindowFlags',), + "QGraphicsWidget.setWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setWindowTitle": ('str',), + "QGraphicsWidget.shape": (), + "QGraphicsWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsWidget.size": (), + "QGraphicsWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsWidget.style": (), + "QGraphicsWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QGraphicsWidget.type": (), + "QGraphicsWidget.ungrabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.unsetLayoutDirection": (), + "QGraphicsWidget.unsetWindowFrameMargins": (), + "QGraphicsWidget.updateGeometry": (), + "QGraphicsWidget.windowFlags": (), + "QGraphicsWidget.windowFrameEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.windowFrameGeometry": (), + "QGraphicsWidget.windowFrameRect": (), + "QGraphicsWidget.windowFrameSectionAt": ('PySide2.QtCore.QPointF',), + "QGraphicsWidget.windowTitle": (), + "QGraphicsWidget.windowType": (), + + # class PySide2.QtWidgets.QGridLayout: + "QGridLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QGridLayout.addItem": [('PySide2.QtWidgets.QLayoutItem',), ('PySide2.QtWidgets.QLayoutItem', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.addLayout": [('PySide2.QtWidgets.QLayout', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QLayout', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.cellRect": ('int', 'int'), + "QGridLayout.columnCount": (), + "QGridLayout.columnMinimumWidth": ('int',), + "QGridLayout.columnStretch": ('int',), + "QGridLayout.count": (), + "QGridLayout.expandingDirections": (), + "QGridLayout.getItemPosition": ('int', 'int', 'int', 'int', 'int'), + "QGridLayout.hasHeightForWidth": (), + "QGridLayout.heightForWidth": ('int',), + "QGridLayout.horizontalSpacing": (), + "QGridLayout.invalidate": (), + "QGridLayout.itemAt": ('int',), + "QGridLayout.itemAtPosition": ('int', 'int'), + "QGridLayout.maximumSize": (), + "QGridLayout.minimumHeightForWidth": ('int',), + "QGridLayout.minimumSize": (), + "QGridLayout.originCorner": (), + "QGridLayout.rowCount": (), + "QGridLayout.rowMinimumHeight": ('int',), + "QGridLayout.rowStretch": ('int',), + "QGridLayout.setColumnMinimumWidth": ('int', 'int'), + "QGridLayout.setColumnStretch": ('int', 'int'), + "QGridLayout.setDefaultPositioning": ('int', 'PySide2.QtCore.Qt.Orientation'), + "QGridLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QGridLayout.setHorizontalSpacing": ('int',), + "QGridLayout.setOriginCorner": ('PySide2.QtCore.Qt.Corner',), + "QGridLayout.setRowMinimumHeight": ('int', 'int'), + "QGridLayout.setRowStretch": ('int', 'int'), + "QGridLayout.setSpacing": ('int',), + "QGridLayout.setVerticalSpacing": ('int',), + "QGridLayout.sizeHint": (), + "QGridLayout.spacing": (), + "QGridLayout.takeAt": ('int',), + "QGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGroupBox: + "QGroupBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QGroupBox.alignment": (), + "QGroupBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QGroupBox.childEvent": ('PySide2.QtCore.QChildEvent',), + "QGroupBox.event": ('PySide2.QtCore.QEvent',), + "QGroupBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGroupBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionGroupBox',), + "QGroupBox.isCheckable": (), + "QGroupBox.isChecked": (), + "QGroupBox.isFlat": (), + "QGroupBox.minimumSizeHint": (), + "QGroupBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGroupBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGroupBox.setAlignment": ('int',), + "QGroupBox.setCheckable": ('bool',), + "QGroupBox.setChecked": ('bool',), + "QGroupBox.setFlat": ('bool',), + "QGroupBox.setTitle": ('str',), + "QGroupBox.title": (), + + # class PySide2.QtWidgets.QHBoxLayout: + "QHBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QHeaderView: + "QHeaderView.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), + "QHeaderView.cascadingSectionResizes": (), + "QHeaderView.count": (), + "QHeaderView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QHeaderView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QHeaderView.defaultAlignment": (), + "QHeaderView.defaultSectionSize": (), + "QHeaderView.doItemsLayout": (), + "QHeaderView.event": ('PySide2.QtCore.QEvent',), + "QHeaderView.headerDataChanged": ('PySide2.QtCore.Qt.Orientation', 'int', 'int'), + "QHeaderView.hiddenSectionCount": (), + "QHeaderView.hideSection": ('int',), + "QHeaderView.highlightSections": (), + "QHeaderView.horizontalOffset": (), + "QHeaderView.indexAt": ('PySide2.QtCore.QPoint',), + "QHeaderView.initStyleOption": [('PySide2.QtWidgets.QStyleOptionFrame',), ('PySide2.QtWidgets.QStyleOptionHeader',)], + "QHeaderView.initialize": (), + "QHeaderView.initializeSections": [(), ('int', 'int')], + "QHeaderView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.isSectionHidden": ('int',), + "QHeaderView.isSortIndicatorShown": (), + "QHeaderView.length": (), + "QHeaderView.logicalIndex": ('int',), + "QHeaderView.logicalIndexAt": [('PySide2.QtCore.QPoint',), ('int',), ('int', 'int')], + "QHeaderView.maximumSectionSize": (), + "QHeaderView.minimumSectionSize": (), + "QHeaderView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QHeaderView.moveSection": ('int', 'int'), + "QHeaderView.offset": (), + "QHeaderView.orientation": (), + "QHeaderView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QHeaderView.paintSection": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int'), + "QHeaderView.reset": (), + "QHeaderView.resetDefaultSectionSize": (), + "QHeaderView.resizeContentsPrecision": (), + "QHeaderView.resizeSection": ('int', 'int'), + "QHeaderView.resizeSections": [(), ('PySide2.QtWidgets.QHeaderView.ResizeMode',)], + "QHeaderView.restoreState": ('PySide2.QtCore.QByteArray',), + "QHeaderView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.saveState": (), + "QHeaderView.scrollContentsBy": ('int', 'int'), + "QHeaderView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QHeaderView.sectionPosition": ('int',), + "QHeaderView.sectionResizeMode": ('int',), + "QHeaderView.sectionSize": ('int',), + "QHeaderView.sectionSizeFromContents": ('int',), + "QHeaderView.sectionSizeHint": ('int',), + "QHeaderView.sectionViewportPosition": ('int',), + "QHeaderView.sectionsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsClickable": (), + "QHeaderView.sectionsHidden": (), + "QHeaderView.sectionsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsMovable": (), + "QHeaderView.sectionsMoved": (), + "QHeaderView.setCascadingSectionResizes": ('bool',), + "QHeaderView.setDefaultAlignment": ('Alignment',), + "QHeaderView.setDefaultSectionSize": ('int',), + "QHeaderView.setHighlightSections": ('bool',), + "QHeaderView.setMaximumSectionSize": ('int',), + "QHeaderView.setMinimumSectionSize": ('int',), + "QHeaderView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QHeaderView.setOffset": ('int',), + "QHeaderView.setOffsetToLastSection": (), + "QHeaderView.setOffsetToSectionPosition": ('int',), + "QHeaderView.setResizeContentsPrecision": ('int',), + "QHeaderView.setSectionHidden": ('int', 'bool'), + "QHeaderView.setSectionResizeMode": [('PySide2.QtWidgets.QHeaderView.ResizeMode',), ('int', 'PySide2.QtWidgets.QHeaderView.ResizeMode')], + "QHeaderView.setSectionsClickable": ('bool',), + "QHeaderView.setSectionsMovable": ('bool',), + "QHeaderView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QHeaderView.setSortIndicator": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QHeaderView.setSortIndicatorShown": ('bool',), + "QHeaderView.setStretchLastSection": ('bool',), + "QHeaderView.setVisible": ('bool',), + "QHeaderView.showSection": ('int',), + "QHeaderView.sizeHint": (), + "QHeaderView.sortIndicatorOrder": (), + "QHeaderView.sortIndicatorSection": (), + "QHeaderView.stretchLastSection": (), + "QHeaderView.stretchSectionCount": (), + "QHeaderView.swapSections": ('int', 'int'), + "QHeaderView.updateGeometries": (), + "QHeaderView.updateSection": ('int',), + "QHeaderView.verticalOffset": (), + "QHeaderView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QHeaderView.visualIndex": ('int',), + "QHeaderView.visualIndexAt": ('int',), + "QHeaderView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QInputDialog: + "QInputDialog.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QInputDialog.cancelButtonText": (), + "QInputDialog.comboBoxItems": (), + "QInputDialog.done": ('int',), + "QInputDialog.doubleDecimals": (), + "QInputDialog.doubleMaximum": (), + "QInputDialog.doubleMinimum": (), + "QInputDialog.doubleValue": (), + "QInputDialog.getDouble": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'float', 'float', 'float', 'int', 'bool', 'WindowFlags'), + "QInputDialog.getInt": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'int', 'int', 'int', 'int', 'bool', 'WindowFlags'), + "QInputDialog.getItem": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.support.signature.typing.List', 'int', 'bool', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.getMultiLineText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.getText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QLineEdit.EchoMode', 'str', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.inputMode": (), + "QInputDialog.intMaximum": (), + "QInputDialog.intMinimum": (), + "QInputDialog.intStep": (), + "QInputDialog.intValue": (), + "QInputDialog.isComboBoxEditable": (), + "QInputDialog.labelText": (), + "QInputDialog.minimumSizeHint": (), + "QInputDialog.okButtonText": (), + "QInputDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QInputDialog.setCancelButtonText": ('str',), + "QInputDialog.setComboBoxEditable": ('bool',), + "QInputDialog.setComboBoxItems": ('PySide2.support.signature.typing.List',), + "QInputDialog.setDoubleDecimals": ('int',), + "QInputDialog.setDoubleMaximum": ('float',), + "QInputDialog.setDoubleMinimum": ('float',), + "QInputDialog.setDoubleRange": ('float', 'float'), + "QInputDialog.setDoubleValue": ('float',), + "QInputDialog.setInputMode": ('PySide2.QtWidgets.QInputDialog.InputMode',), + "QInputDialog.setIntMaximum": ('int',), + "QInputDialog.setIntMinimum": ('int',), + "QInputDialog.setIntRange": ('int', 'int'), + "QInputDialog.setIntStep": ('int',), + "QInputDialog.setIntValue": ('int',), + "QInputDialog.setLabelText": ('str',), + "QInputDialog.setOkButtonText": ('str',), + "QInputDialog.setOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption', 'bool'), + "QInputDialog.setTextEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QInputDialog.setTextValue": ('str',), + "QInputDialog.setVisible": ('bool',), + "QInputDialog.sizeHint": (), + "QInputDialog.testOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption',), + "QInputDialog.textEchoMode": (), + "QInputDialog.textValue": (), + + # class PySide2.QtWidgets.QItemDelegate: + "QItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.decoration": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.support.signature.typing.Any'), + "QItemDelegate.doCheck": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.support.signature.typing.Any'), + "QItemDelegate.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.drawCheck": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.CheckState'), + "QItemDelegate.drawDecoration": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), + "QItemDelegate.drawDisplay": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'str'), + "QItemDelegate.drawFocus": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect'), + "QItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QItemDelegate.hasClipping": (), + "QItemDelegate.itemEditorFactory": (), + "QItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.rect": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex', 'int'), + "QItemDelegate.setClipping": ('bool',), + "QItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setOptions": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QStyleOptionViewItem'), + "QItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.textRectangle": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QFont', 'str'), + "QItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QItemEditorCreatorBase: + "QItemEditorCreatorBase.__init__": (), + "QItemEditorCreatorBase.createWidget": ('PySide2.QtWidgets.QWidget',), + "QItemEditorCreatorBase.valuePropertyName": (), + + # class PySide2.QtWidgets.QItemEditorFactory: + "QItemEditorFactory.__init__": (), + "QItemEditorFactory.createEditor": ('int', 'PySide2.QtWidgets.QWidget'), + "QItemEditorFactory.defaultFactory": (), + "QItemEditorFactory.registerEditor": ('int', 'PySide2.QtWidgets.QItemEditorCreatorBase'), + "QItemEditorFactory.setDefaultFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemEditorFactory.valuePropertyName": ('int',), + + # class PySide2.QtWidgets.QKeyEventTransition: + "QKeyEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'int', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QKeyEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.key": (), + "QKeyEventTransition.modifierMask": (), + "QKeyEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.setKey": ('int',), + "QKeyEventTransition.setModifierMask": ('KeyboardModifiers',), + + # class PySide2.QtWidgets.QKeySequenceEdit: + "QKeySequenceEdit.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QKeySequenceEdit.clear": (), + "QKeySequenceEdit.event": ('PySide2.QtCore.QEvent',), + "QKeySequenceEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keySequence": (), + "QKeySequenceEdit.setKeySequence": ('PySide2.QtGui.QKeySequence',), + "QKeySequenceEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QLCDNumber: + "QLCDNumber.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'PySide2.QtWidgets.QWidget')], + "QLCDNumber.checkOverflow": [('float',), ('int',)], + "QLCDNumber.digitCount": (), + "QLCDNumber.display": [('float',), ('int',), ('str',)], + "QLCDNumber.event": ('PySide2.QtCore.QEvent',), + "QLCDNumber.intValue": (), + "QLCDNumber.mode": (), + "QLCDNumber.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLCDNumber.segmentStyle": (), + "QLCDNumber.setBinMode": (), + "QLCDNumber.setDecMode": (), + "QLCDNumber.setDigitCount": ('int',), + "QLCDNumber.setHexMode": (), + "QLCDNumber.setMode": ('PySide2.QtWidgets.QLCDNumber.Mode',), + "QLCDNumber.setOctMode": (), + "QLCDNumber.setSegmentStyle": ('PySide2.QtWidgets.QLCDNumber.SegmentStyle',), + "QLCDNumber.setSmallDecimalPoint": ('bool',), + "QLCDNumber.sizeHint": (), + "QLCDNumber.smallDecimalPoint": (), + "QLCDNumber.value": (), + + # class PySide2.QtWidgets.QLabel: + "QLabel.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QLabel.alignment": (), + "QLabel.buddy": (), + "QLabel.changeEvent": ('PySide2.QtCore.QEvent',), + "QLabel.clear": (), + "QLabel.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLabel.event": ('PySide2.QtCore.QEvent',), + "QLabel.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.focusNextPrevChild": ('bool',), + "QLabel.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.hasScaledContents": (), + "QLabel.hasSelectedText": (), + "QLabel.heightForWidth": ('int',), + "QLabel.indent": (), + "QLabel.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLabel.margin": (), + "QLabel.minimumSizeHint": (), + "QLabel.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.movie": (), + "QLabel.openExternalLinks": (), + "QLabel.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLabel.picture": (), + "QLabel.pixmap": (), + "QLabel.selectedText": (), + "QLabel.selectionStart": (), + "QLabel.setAlignment": ('Alignment',), + "QLabel.setBuddy": ('PySide2.QtWidgets.QWidget',), + "QLabel.setIndent": ('int',), + "QLabel.setMargin": ('int',), + "QLabel.setMovie": ('PySide2.QtGui.QMovie',), + "QLabel.setNum": [('float',), ('int',)], + "QLabel.setOpenExternalLinks": ('bool',), + "QLabel.setPicture": ('PySide2.QtGui.QPicture',), + "QLabel.setPixmap": ('PySide2.QtGui.QPixmap',), + "QLabel.setScaledContents": ('bool',), + "QLabel.setSelection": ('int', 'int'), + "QLabel.setText": ('str',), + "QLabel.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QLabel.setTextInteractionFlags": ('TextInteractionFlags',), + "QLabel.setWordWrap": ('bool',), + "QLabel.sizeHint": (), + "QLabel.text": (), + "QLabel.textFormat": (), + "QLabel.textInteractionFlags": (), + "QLabel.wordWrap": (), + + # class PySide2.QtWidgets.QLayout: + "QLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QLayout.activate": (), + "QLayout.addChildLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.addChildWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.adoptLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.alignmentRect": ('PySide2.QtCore.QRect',), + "QLayout.childEvent": ('PySide2.QtCore.QChildEvent',), + "QLayout.closestAcceptableSize": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QSize'), + "QLayout.contentsMargins": (), + "QLayout.contentsRect": (), + "QLayout.controlTypes": (), + "QLayout.count": (), + "QLayout.expandingDirections": (), + "QLayout.geometry": (), + "QLayout.getContentsMargins": ('int', 'int', 'int', 'int'), + "QLayout.indexOf": ('PySide2.QtWidgets.QWidget',), + "QLayout.invalidate": (), + "QLayout.isEmpty": (), + "QLayout.isEnabled": (), + "QLayout.itemAt": ('int',), + "QLayout.layout": (), + "QLayout.margin": (), + "QLayout.maximumSize": (), + "QLayout.menuBar": (), + "QLayout.minimumSize": (), + "QLayout.parentWidget": (), + "QLayout.removeItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.replaceWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget', 'FindChildOptions'), + "QLayout.setAlignment": [('Alignment',), ('PySide2.QtWidgets.QLayout', 'Alignment'), ('PySide2.QtWidgets.QWidget', 'Alignment')], + "QLayout.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLayout.setEnabled": ('bool',), + "QLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QLayout.setMargin": ('int',), + "QLayout.setMenuBar": ('PySide2.QtWidgets.QWidget',), + "QLayout.setSizeConstraint": ('PySide2.QtWidgets.QLayout.SizeConstraint',), + "QLayout.setSpacing": ('int',), + "QLayout.sizeConstraint": (), + "QLayout.spacing": (), + "QLayout.takeAt": ('int',), + "QLayout.totalHeightForWidth": ('int',), + "QLayout.totalMaximumSize": (), + "QLayout.totalMinimumSize": (), + "QLayout.totalSizeHint": (), + "QLayout.update": (), + "QLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QLayoutItem: + "QLayoutItem.__init__": ('Alignment',), + "QLayoutItem.alignment": (), + "QLayoutItem.controlTypes": (), + "QLayoutItem.expandingDirections": (), + "QLayoutItem.geometry": (), + "QLayoutItem.hasHeightForWidth": (), + "QLayoutItem.heightForWidth": ('int',), + "QLayoutItem.invalidate": (), + "QLayoutItem.isEmpty": (), + "QLayoutItem.layout": (), + "QLayoutItem.maximumSize": (), + "QLayoutItem.minimumHeightForWidth": ('int',), + "QLayoutItem.minimumSize": (), + "QLayoutItem.setAlignment": ('Alignment',), + "QLayoutItem.setGeometry": ('PySide2.QtCore.QRect',), + "QLayoutItem.sizeHint": (), + "QLayoutItem.spacerItem": (), + "QLayoutItem.widget": (), + + # class PySide2.QtWidgets.QLineEdit: + "QLineEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QLineEdit.addAction": [('PySide2.QtGui.QIcon', 'PySide2.QtWidgets.QLineEdit.ActionPosition'), ('PySide2.QtWidgets.QAction',), ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QLineEdit.ActionPosition')], + "QLineEdit.alignment": (), + "QLineEdit.backspace": (), + "QLineEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QLineEdit.clear": (), + "QLineEdit.completer": (), + "QLineEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLineEdit.copy": (), + "QLineEdit.createStandardContextMenu": (), + "QLineEdit.cursorBackward": ('bool', 'int'), + "QLineEdit.cursorForward": ('bool', 'int'), + "QLineEdit.cursorMoveStyle": (), + "QLineEdit.cursorPosition": (), + "QLineEdit.cursorPositionAt": ('PySide2.QtCore.QPoint',), + "QLineEdit.cursorRect": (), + "QLineEdit.cursorWordBackward": ('bool',), + "QLineEdit.cursorWordForward": ('bool',), + "QLineEdit.cut": (), + "QLineEdit.del_": (), + "QLineEdit.deselect": (), + "QLineEdit.displayText": (), + "QLineEdit.dragEnabled": (), + "QLineEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QLineEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QLineEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QLineEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QLineEdit.echoMode": (), + "QLineEdit.end": ('bool',), + "QLineEdit.event": ('PySide2.QtCore.QEvent',), + "QLineEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.getTextMargins": ('int', 'int', 'int', 'int'), + "QLineEdit.hasAcceptableInput": (), + "QLineEdit.hasFrame": (), + "QLineEdit.hasSelectedText": (), + "QLineEdit.home": ('bool',), + "QLineEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QLineEdit.inputMask": (), + "QLineEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QLineEdit.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QLineEdit.insert": ('str',), + "QLineEdit.isClearButtonEnabled": (), + "QLineEdit.isModified": (), + "QLineEdit.isReadOnly": (), + "QLineEdit.isRedoAvailable": (), + "QLineEdit.isUndoAvailable": (), + "QLineEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLineEdit.maxLength": (), + "QLineEdit.minimumSizeHint": (), + "QLineEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLineEdit.paste": (), + "QLineEdit.placeholderText": (), + "QLineEdit.redo": (), + "QLineEdit.selectAll": (), + "QLineEdit.selectedText": (), + "QLineEdit.selectionStart": (), + "QLineEdit.setAlignment": ('Alignment',), + "QLineEdit.setClearButtonEnabled": ('bool',), + "QLineEdit.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QLineEdit.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QLineEdit.setCursorPosition": ('int',), + "QLineEdit.setDragEnabled": ('bool',), + "QLineEdit.setEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QLineEdit.setFrame": ('bool',), + "QLineEdit.setInputMask": ('str',), + "QLineEdit.setMaxLength": ('int',), + "QLineEdit.setModified": ('bool',), + "QLineEdit.setPlaceholderText": ('str',), + "QLineEdit.setReadOnly": ('bool',), + "QLineEdit.setSelection": ('int', 'int'), + "QLineEdit.setText": ('str',), + "QLineEdit.setTextMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLineEdit.setValidator": ('PySide2.QtGui.QValidator',), + "QLineEdit.sizeHint": (), + "QLineEdit.text": (), + "QLineEdit.textMargins": (), + "QLineEdit.undo": (), + "QLineEdit.validator": (), + + # class PySide2.QtWidgets.QListView: + "QListView.__init__": ('PySide2.QtWidgets.QWidget',), + "QListView.batchSize": (), + "QListView.clearPropertyFlags": (), + "QListView.contentsSize": (), + "QListView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QListView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QListView.doItemsLayout": (), + "QListView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QListView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QListView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListView.event": ('PySide2.QtCore.QEvent',), + "QListView.flow": (), + "QListView.gridSize": (), + "QListView.horizontalOffset": (), + "QListView.indexAt": ('PySide2.QtCore.QPoint',), + "QListView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QListView.isRowHidden": ('int',), + "QListView.isSelectionRectVisible": (), + "QListView.isWrapping": (), + "QListView.layoutMode": (), + "QListView.modelColumn": (), + "QListView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QListView.movement": (), + "QListView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QListView.rectForIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.reset": (), + "QListView.resizeContents": ('int', 'int'), + "QListView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QListView.resizeMode": (), + "QListView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.scrollContentsBy": ('int', 'int'), + "QListView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListView.selectedIndexes": (), + "QListView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QListView.setBatchSize": ('int',), + "QListView.setFlow": ('PySide2.QtWidgets.QListView.Flow',), + "QListView.setGridSize": ('PySide2.QtCore.QSize',), + "QListView.setLayoutMode": ('PySide2.QtWidgets.QListView.LayoutMode',), + "QListView.setModelColumn": ('int',), + "QListView.setMovement": ('PySide2.QtWidgets.QListView.Movement',), + "QListView.setPositionForIndex": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QModelIndex'), + "QListView.setResizeMode": ('PySide2.QtWidgets.QListView.ResizeMode',), + "QListView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.setRowHidden": ('int', 'bool'), + "QListView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QListView.setSelectionRectVisible": ('bool',), + "QListView.setSpacing": ('int',), + "QListView.setUniformItemSizes": ('bool',), + "QListView.setViewMode": ('PySide2.QtWidgets.QListView.ViewMode',), + "QListView.setWordWrap": ('bool',), + "QListView.setWrapping": ('bool',), + "QListView.spacing": (), + "QListView.startDrag": ('DropActions',), + "QListView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QListView.uniformItemSizes": (), + "QListView.updateGeometries": (), + "QListView.verticalOffset": (), + "QListView.viewMode": (), + "QListView.viewOptions": (), + "QListView.viewportSizeHint": (), + "QListView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QListView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QListView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QListView.wordWrap": (), + + # class PySide2.QtWidgets.QListWidget: + "QListWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QListWidget.addItem": [('PySide2.QtWidgets.QListWidgetItem',), ('str',)], + "QListWidget.addItems": ('PySide2.support.signature.typing.List',), + "QListWidget.clear": (), + "QListWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.count": (), + "QListWidget.currentItem": (), + "QListWidget.currentRow": (), + "QListWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListWidget.dropMimeData": ('int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QListWidget.editItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.event": ('PySide2.QtCore.QEvent',), + "QListWidget.findItems": ('str', 'MatchFlags'), + "QListWidget.indexFromItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.insertItem": [('int', 'PySide2.QtWidgets.QListWidgetItem'), ('int', 'str')], + "QListWidget.insertItems": ('int', 'PySide2.support.signature.typing.List'), + "QListWidget.isItemHidden": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isItemSelected": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isSortingEnabled": (), + "QListWidget.item": ('int',), + "QListWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QListWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QListWidget.itemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.items": ('PySide2.QtCore.QMimeData',), + "QListWidget.mimeData": ('list',), + "QListWidget.mimeTypes": (), + "QListWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.removeItemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.row": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.scrollToItem": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListWidget.selectedItems": (), + "QListWidget.setCurrentItem": [('PySide2.QtWidgets.QListWidgetItem',), ('PySide2.QtWidgets.QListWidgetItem', 'SelectionFlags')], + "QListWidget.setCurrentRow": [('int',), ('int', 'SelectionFlags')], + "QListWidget.setItemHidden": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemSelected": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemWidget": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QWidget'), + "QListWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QListWidget.setSortingEnabled": ('bool',), + "QListWidget.sortItems": ('PySide2.QtCore.Qt.SortOrder',), + "QListWidget.supportedDropActions": (), + "QListWidget.takeItem": ('int',), + "QListWidget.visualItemRect": ('PySide2.QtWidgets.QListWidgetItem',), + + # class PySide2.QtWidgets.QListWidgetItem: + "QListWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidgetItem',), ('str', 'PySide2.QtWidgets.QListWidget', 'int')], + "QListWidgetItem.background": (), + "QListWidgetItem.backgroundColor": (), + "QListWidgetItem.checkState": (), + "QListWidgetItem.clone": (), + "QListWidgetItem.data": ('int',), + "QListWidgetItem.flags": (), + "QListWidgetItem.font": (), + "QListWidgetItem.foreground": (), + "QListWidgetItem.icon": (), + "QListWidgetItem.isHidden": (), + "QListWidgetItem.isSelected": (), + "QListWidgetItem.listWidget": (), + "QListWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QListWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QListWidgetItem.setData": ('int', 'PySide2.support.signature.typing.Any'), + "QListWidgetItem.setFlags": ('ItemFlags',), + "QListWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QListWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setHidden": ('bool',), + "QListWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QListWidgetItem.setSelected": ('bool',), + "QListWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QListWidgetItem.setStatusTip": ('str',), + "QListWidgetItem.setText": ('str',), + "QListWidgetItem.setTextAlignment": ('int',), + "QListWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setToolTip": ('str',), + "QListWidgetItem.setWhatsThis": ('str',), + "QListWidgetItem.sizeHint": (), + "QListWidgetItem.statusTip": (), + "QListWidgetItem.text": (), + "QListWidgetItem.textAlignment": (), + "QListWidgetItem.textColor": (), + "QListWidgetItem.toolTip": (), + "QListWidgetItem.type": (), + "QListWidgetItem.whatsThis": (), + "QListWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QMainWindow: + "QMainWindow.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMainWindow.addDockWidget": [('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget'), ('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation')], + "QMainWindow.addToolBar": [('PySide2.QtCore.Qt.ToolBarArea', 'PySide2.QtWidgets.QToolBar'), ('PySide2.QtWidgets.QToolBar',), ('str',)], + "QMainWindow.addToolBarBreak": ('PySide2.QtCore.Qt.ToolBarArea',), + "QMainWindow.centralWidget": (), + "QMainWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMainWindow.corner": ('PySide2.QtCore.Qt.Corner',), + "QMainWindow.createPopupMenu": (), + "QMainWindow.dockOptions": (), + "QMainWindow.dockWidgetArea": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.documentMode": (), + "QMainWindow.event": ('PySide2.QtCore.QEvent',), + "QMainWindow.iconSize": (), + "QMainWindow.insertToolBar": ('PySide2.QtWidgets.QToolBar', 'PySide2.QtWidgets.QToolBar'), + "QMainWindow.insertToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.isAnimated": (), + "QMainWindow.isDockNestingEnabled": (), + "QMainWindow.isSeparator": ('PySide2.QtCore.QPoint',), + "QMainWindow.menuBar": (), + "QMainWindow.menuWidget": (), + "QMainWindow.removeDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.removeToolBar": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.removeToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.resizeDocks": ('list', 'list', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.restoreDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.restoreState": ('PySide2.QtCore.QByteArray', 'int'), + "QMainWindow.saveState": ('int',), + "QMainWindow.setAnimated": ('bool',), + "QMainWindow.setCentralWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setCorner": ('PySide2.QtCore.Qt.Corner', 'PySide2.QtCore.Qt.DockWidgetArea'), + "QMainWindow.setDockNestingEnabled": ('bool',), + "QMainWindow.setDockOptions": ('DockOptions',), + "QMainWindow.setDocumentMode": ('bool',), + "QMainWindow.setIconSize": ('PySide2.QtCore.QSize',), + "QMainWindow.setMenuBar": ('PySide2.QtWidgets.QMenuBar',), + "QMainWindow.setMenuWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setStatusBar": ('PySide2.QtWidgets.QStatusBar',), + "QMainWindow.setTabPosition": ('DockWidgetAreas', 'PySide2.QtWidgets.QTabWidget.TabPosition'), + "QMainWindow.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMainWindow.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QMainWindow.setUnifiedTitleAndToolBarOnMac": ('bool',), + "QMainWindow.splitDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.statusBar": (), + "QMainWindow.tabPosition": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QMainWindow.tabShape": (), + "QMainWindow.tabifiedDockWidgets": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.tabifyDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget'), + "QMainWindow.takeCentralWidget": (), + "QMainWindow.toolBarArea": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolButtonStyle": (), + "QMainWindow.unifiedTitleAndToolBarOnMac": (), + + # class PySide2.QtWidgets.QMdiArea: + "QMdiArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.activateNextSubWindow": (), + "QMdiArea.activatePreviousSubWindow": (), + "QMdiArea.activationOrder": (), + "QMdiArea.activeSubWindow": (), + "QMdiArea.addSubWindow": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMdiArea.background": (), + "QMdiArea.cascadeSubWindows": (), + "QMdiArea.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiArea.closeActiveSubWindow": (), + "QMdiArea.closeAllSubWindows": (), + "QMdiArea.currentSubWindow": (), + "QMdiArea.documentMode": (), + "QMdiArea.event": ('PySide2.QtCore.QEvent',), + "QMdiArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiArea.minimumSizeHint": (), + "QMdiArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiArea.removeSubWindow": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiArea.scrollContentsBy": ('int', 'int'), + "QMdiArea.setActivationOrder": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.setActiveSubWindow": ('PySide2.QtWidgets.QMdiSubWindow',), + "QMdiArea.setBackground": ('PySide2.QtGui.QBrush',), + "QMdiArea.setDocumentMode": ('bool',), + "QMdiArea.setOption": ('PySide2.QtWidgets.QMdiArea.AreaOption', 'bool'), + "QMdiArea.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QMdiArea.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMdiArea.setTabsClosable": ('bool',), + "QMdiArea.setTabsMovable": ('bool',), + "QMdiArea.setViewMode": ('PySide2.QtWidgets.QMdiArea.ViewMode',), + "QMdiArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiArea.sizeHint": (), + "QMdiArea.subWindowList": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.tabPosition": (), + "QMdiArea.tabShape": (), + "QMdiArea.tabsClosable": (), + "QMdiArea.tabsMovable": (), + "QMdiArea.testOption": ('PySide2.QtWidgets.QMdiArea.AreaOption',), + "QMdiArea.tileSubWindows": (), + "QMdiArea.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiArea.viewMode": (), + "QMdiArea.viewportEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QMdiSubWindow: + "QMdiSubWindow.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMdiSubWindow.changeEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiSubWindow.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMdiSubWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMdiSubWindow.event": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiSubWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMdiSubWindow.isShaded": (), + "QMdiSubWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMdiSubWindow.keyboardPageStep": (), + "QMdiSubWindow.keyboardSingleStep": (), + "QMdiSubWindow.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.maximizedButtonsWidget": (), + "QMdiSubWindow.maximizedSystemMenuIconWidget": (), + "QMdiSubWindow.mdiArea": (), + "QMdiSubWindow.minimumSizeHint": (), + "QMdiSubWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QMdiSubWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiSubWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiSubWindow.setKeyboardPageStep": ('int',), + "QMdiSubWindow.setKeyboardSingleStep": ('int',), + "QMdiSubWindow.setOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption', 'bool'), + "QMdiSubWindow.setSystemMenu": ('PySide2.QtWidgets.QMenu',), + "QMdiSubWindow.setWidget": ('PySide2.QtWidgets.QWidget',), + "QMdiSubWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiSubWindow.showShaded": (), + "QMdiSubWindow.showSystemMenu": (), + "QMdiSubWindow.sizeHint": (), + "QMdiSubWindow.systemMenu": (), + "QMdiSubWindow.testOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption',), + "QMdiSubWindow.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiSubWindow.widget": (), + + # class PySide2.QtWidgets.QMenu: + "QMenu.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QMenu.actionAt": ('PySide2.QtCore.QPoint',), + "QMenu.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenu.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenu.activeAction": (), + "QMenu.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtGui.QIcon', 'str', 'object', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('str', 'object', 'PySide2.QtGui.QKeySequence')], + "QMenu.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenu.addSection": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QMenu.addSeparator": (), + "QMenu.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenu.clear": (), + "QMenu.columnCount": (), + "QMenu.defaultAction": (), + "QMenu.enterEvent": ('PySide2.QtCore.QEvent',), + "QMenu.event": ('PySide2.QtCore.QEvent',), + "QMenu.exec_": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), ('list', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget')], + "QMenu.focusNextPrevChild": ('bool',), + "QMenu.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMenu.hideTearOffMenu": (), + "QMenu.icon": (), + "QMenu.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenu.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenu.insertSection": [('PySide2.QtWidgets.QAction', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction', 'str')], + "QMenu.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenu.isEmpty": (), + "QMenu.isTearOffEnabled": (), + "QMenu.isTearOffMenuVisible": (), + "QMenu.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenu.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenu.menuAction": (), + "QMenu.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenu.popup": ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), + "QMenu.separatorsCollapsible": (), + "QMenu.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setIcon": ('PySide2.QtGui.QIcon',), + "QMenu.setSeparatorsCollapsible": ('bool',), + "QMenu.setTearOffEnabled": ('bool',), + "QMenu.setTitle": ('str',), + "QMenu.setToolTipsVisible": ('bool',), + "QMenu.sizeHint": (), + "QMenu.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMenu.title": (), + "QMenu.toolTipsVisible": (), + "QMenu.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QMenuBar: + "QMenuBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QMenuBar.actionAt": ('PySide2.QtCore.QPoint',), + "QMenuBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenuBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenuBar.activeAction": (), + "QMenuBar.addAction": [('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str'), ('str', 'object')], + "QMenuBar.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenuBar.addSeparator": (), + "QMenuBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.clear": (), + "QMenuBar.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QMenuBar.event": ('PySide2.QtCore.QEvent',), + "QMenuBar.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMenuBar.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.heightForWidth": ('int',), + "QMenuBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenuBar.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenuBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenuBar.isDefaultUp": (), + "QMenuBar.isNativeMenuBar": (), + "QMenuBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenuBar.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.minimumSizeHint": (), + "QMenuBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenuBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMenuBar.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenuBar.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QMenuBar.setDefaultUp": ('bool',), + "QMenuBar.setNativeMenuBar": ('bool',), + "QMenuBar.setVisible": ('bool',), + "QMenuBar.sizeHint": (), + "QMenuBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QMessageBox: + "QMessageBox.__init__": [('PySide2.QtWidgets.QMessageBox.Icon', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget',)], + "QMessageBox.about": ('PySide2.QtWidgets.QWidget', 'str', 'str'), + "QMessageBox.aboutQt": ('PySide2.QtWidgets.QWidget', 'str'), + "QMessageBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QMessageBox.ButtonRole'), ('PySide2.QtWidgets.QMessageBox.StandardButton',), ('str', 'PySide2.QtWidgets.QMessageBox.ButtonRole')], + "QMessageBox.button": ('PySide2.QtWidgets.QMessageBox.StandardButton',), + "QMessageBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.buttonText": ('int',), + "QMessageBox.buttons": (), + "QMessageBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QMessageBox.checkBox": (), + "QMessageBox.clickedButton": (), + "QMessageBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMessageBox.critical": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.defaultButton": (), + "QMessageBox.detailedText": (), + "QMessageBox.escapeButton": (), + "QMessageBox.event": ('PySide2.QtCore.QEvent',), + "QMessageBox.icon": (), + "QMessageBox.iconPixmap": (), + "QMessageBox.information": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.informativeText": (), + "QMessageBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMessageBox.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QMessageBox.question": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMessageBox.setButtonText": ('int', 'str'), + "QMessageBox.setCheckBox": ('PySide2.QtWidgets.QCheckBox',), + "QMessageBox.setDefaultButton": [('PySide2.QtWidgets.QMessageBox.StandardButton',), ('PySide2.QtWidgets.QPushButton',)], + "QMessageBox.setDetailedText": ('str',), + "QMessageBox.setEscapeButton": [('PySide2.QtWidgets.QAbstractButton',), ('PySide2.QtWidgets.QMessageBox.StandardButton',)], + "QMessageBox.setIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.setIconPixmap": ('PySide2.QtGui.QPixmap',), + "QMessageBox.setInformativeText": ('str',), + "QMessageBox.setStandardButtons": ('StandardButtons',), + "QMessageBox.setText": ('str',), + "QMessageBox.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QMessageBox.setTextInteractionFlags": ('TextInteractionFlags',), + "QMessageBox.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QMessageBox.setWindowTitle": ('str',), + "QMessageBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMessageBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.standardButtons": (), + "QMessageBox.standardIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.text": (), + "QMessageBox.textFormat": (), + "QMessageBox.textInteractionFlags": (), + "QMessageBox.warning": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + + # class PySide2.QtWidgets.QMouseEventTransition: + "QMouseEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QMouseEventTransition.button": (), + "QMouseEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.hitTestPath": (), + "QMouseEventTransition.modifierMask": (), + "QMouseEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QMouseEventTransition.setHitTestPath": ('PySide2.QtGui.QPainterPath',), + "QMouseEventTransition.setModifierMask": ('KeyboardModifiers',), + + # class PySide2.QtWidgets.QOpenGLWidget: + "QOpenGLWidget.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QOpenGLWidget.context": (), + "QOpenGLWidget.defaultFramebufferObject": (), + "QOpenGLWidget.doneCurrent": (), + "QOpenGLWidget.event": ('PySide2.QtCore.QEvent',), + "QOpenGLWidget.format": (), + "QOpenGLWidget.grabFramebuffer": (), + "QOpenGLWidget.initializeGL": (), + "QOpenGLWidget.isValid": (), + "QOpenGLWidget.makeCurrent": (), + "QOpenGLWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWidget.paintEngine": (), + "QOpenGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWidget.paintGL": (), + "QOpenGLWidget.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWidget.resizeGL": ('int', 'int'), + "QOpenGLWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLWidget.setUpdateBehavior": ('PySide2.QtWidgets.QOpenGLWidget.UpdateBehavior',), + "QOpenGLWidget.updateBehavior": (), + + # class PySide2.QtWidgets.QPanGesture: + "QPanGesture.__init__": ('PySide2.QtCore.QObject',), + "QPanGesture.acceleration": (), + "QPanGesture.delta": (), + "QPanGesture.lastOffset": (), + "QPanGesture.offset": (), + "QPanGesture.setAcceleration": ('float',), + "QPanGesture.setLastOffset": ('PySide2.QtCore.QPointF',), + "QPanGesture.setOffset": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QPinchGesture: + "QPinchGesture.__init__": ('PySide2.QtCore.QObject',), + "QPinchGesture.centerPoint": (), + "QPinchGesture.changeFlags": (), + "QPinchGesture.lastCenterPoint": (), + "QPinchGesture.lastRotationAngle": (), + "QPinchGesture.lastScaleFactor": (), + "QPinchGesture.rotationAngle": (), + "QPinchGesture.scaleFactor": (), + "QPinchGesture.setCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setChangeFlags": ('ChangeFlags',), + "QPinchGesture.setLastCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setLastRotationAngle": ('float',), + "QPinchGesture.setLastScaleFactor": ('float',), + "QPinchGesture.setRotationAngle": ('float',), + "QPinchGesture.setScaleFactor": ('float',), + "QPinchGesture.setStartCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setTotalChangeFlags": ('ChangeFlags',), + "QPinchGesture.setTotalRotationAngle": ('float',), + "QPinchGesture.setTotalScaleFactor": ('float',), + "QPinchGesture.startCenterPoint": (), + "QPinchGesture.totalChangeFlags": (), + "QPinchGesture.totalRotationAngle": (), + "QPinchGesture.totalScaleFactor": (), + + # class PySide2.QtWidgets.QPlainTextDocumentLayout: + "QPlainTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QPlainTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.cursorWidth": (), + "QPlainTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QPlainTextDocumentLayout.documentSize": (), + "QPlainTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QPlainTextDocumentLayout.ensureBlockLayout": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QPlainTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QPlainTextDocumentLayout.pageCount": (), + "QPlainTextDocumentLayout.requestUpdate": (), + "QPlainTextDocumentLayout.setCursorWidth": ('int',), + + # class PySide2.QtWidgets.QPlainTextEdit: + "QPlainTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPlainTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.appendHtml": ('str',), + "QPlainTextEdit.appendPlainText": ('str',), + "QPlainTextEdit.backgroundVisible": (), + "QPlainTextEdit.blockBoundingGeometry": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockCount": (), + "QPlainTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.canPaste": (), + "QPlainTextEdit.centerCursor": (), + "QPlainTextEdit.centerOnScroll": (), + "QPlainTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.clear": (), + "QPlainTextEdit.contentOffset": (), + "QPlainTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QPlainTextEdit.copy": (), + "QPlainTextEdit.createMimeDataFromSelection": (), + "QPlainTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QPlainTextEdit.currentCharFormat": (), + "QPlainTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QPlainTextEdit.cursorWidth": (), + "QPlainTextEdit.cut": (), + "QPlainTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.document": (), + "QPlainTextEdit.documentTitle": (), + "QPlainTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QPlainTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QPlainTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QPlainTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QPlainTextEdit.ensureCursorVisible": (), + "QPlainTextEdit.event": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.extraSelections": (), + "QPlainTextEdit.find": [('PySide2.QtCore.QRegExp', 'FindFlags'), ('int',), ('str', 'FindFlags')], + "QPlainTextEdit.firstVisibleBlock": (), + "QPlainTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.focusNextPrevChild": ('bool',), + "QPlainTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.getPaintContext": (), + "QPlainTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QPlainTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'PySide2.support.signature.typing.Any')], + "QPlainTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.insertPlainText": ('str',), + "QPlainTextEdit.isReadOnly": (), + "QPlainTextEdit.isUndoRedoEnabled": (), + "QPlainTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.lineWrapMode": (), + "QPlainTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QPlainTextEdit.maximumBlockCount": (), + "QPlainTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QPlainTextEdit.overwriteMode": (), + "QPlainTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPlainTextEdit.paste": (), + "QPlainTextEdit.placeholderText": (), + "QPlainTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QPlainTextEdit.redo": (), + "QPlainTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QPlainTextEdit.scrollContentsBy": ('int', 'int'), + "QPlainTextEdit.selectAll": (), + "QPlainTextEdit.setBackgroundVisible": ('bool',), + "QPlainTextEdit.setCenterOnScroll": ('bool',), + "QPlainTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.setCursorWidth": ('int',), + "QPlainTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QPlainTextEdit.setDocumentTitle": ('str',), + "QPlainTextEdit.setExtraSelections": ('list',), + "QPlainTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QPlainTextEdit.LineWrapMode',), + "QPlainTextEdit.setMaximumBlockCount": ('int',), + "QPlainTextEdit.setOverwriteMode": ('bool',), + "QPlainTextEdit.setPlaceholderText": ('str',), + "QPlainTextEdit.setPlainText": ('str',), + "QPlainTextEdit.setReadOnly": ('bool',), + "QPlainTextEdit.setTabChangesFocus": ('bool',), + "QPlainTextEdit.setTabStopWidth": ('int',), + "QPlainTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.setTextInteractionFlags": ('TextInteractionFlags',), + "QPlainTextEdit.setUndoRedoEnabled": ('bool',), + "QPlainTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QPlainTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QPlainTextEdit.tabChangesFocus": (), + "QPlainTextEdit.tabStopWidth": (), + "QPlainTextEdit.textCursor": (), + "QPlainTextEdit.textInteractionFlags": (), + "QPlainTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QPlainTextEdit.toPlainText": (), + "QPlainTextEdit.undo": (), + "QPlainTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QPlainTextEdit.wordWrapMode": (), + "QPlainTextEdit.zoomIn": ('int',), + "QPlainTextEdit.zoomInF": ('float',), + "QPlainTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QProgressBar: + "QProgressBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QProgressBar.alignment": (), + "QProgressBar.event": ('PySide2.QtCore.QEvent',), + "QProgressBar.format": (), + "QProgressBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionProgressBar',), + "QProgressBar.invertedAppearance": (), + "QProgressBar.isTextVisible": (), + "QProgressBar.maximum": (), + "QProgressBar.minimum": (), + "QProgressBar.minimumSizeHint": (), + "QProgressBar.orientation": (), + "QProgressBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QProgressBar.reset": (), + "QProgressBar.resetFormat": (), + "QProgressBar.setAlignment": ('Alignment',), + "QProgressBar.setFormat": ('str',), + "QProgressBar.setInvertedAppearance": ('bool',), + "QProgressBar.setMaximum": ('int',), + "QProgressBar.setMinimum": ('int',), + "QProgressBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QProgressBar.setRange": ('int', 'int'), + "QProgressBar.setTextDirection": ('PySide2.QtWidgets.QProgressBar.Direction',), + "QProgressBar.setTextVisible": ('bool',), + "QProgressBar.setValue": ('int',), + "QProgressBar.sizeHint": (), + "QProgressBar.text": (), + "QProgressBar.textDirection": (), + "QProgressBar.value": (), + + # class PySide2.QtWidgets.QProgressDialog: + "QProgressDialog.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'str', 'int', 'int', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QProgressDialog.autoClose": (), + "QProgressDialog.autoReset": (), + "QProgressDialog.cancel": (), + "QProgressDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QProgressDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QProgressDialog.forceShow": (), + "QProgressDialog.labelText": (), + "QProgressDialog.maximum": (), + "QProgressDialog.minimum": (), + "QProgressDialog.minimumDuration": (), + "QProgressDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QProgressDialog.reset": (), + "QProgressDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QProgressDialog.setAutoClose": ('bool',), + "QProgressDialog.setAutoReset": ('bool',), + "QProgressDialog.setBar": ('PySide2.QtWidgets.QProgressBar',), + "QProgressDialog.setCancelButton": ('PySide2.QtWidgets.QPushButton',), + "QProgressDialog.setCancelButtonText": ('str',), + "QProgressDialog.setLabel": ('PySide2.QtWidgets.QLabel',), + "QProgressDialog.setLabelText": ('str',), + "QProgressDialog.setMaximum": ('int',), + "QProgressDialog.setMinimum": ('int',), + "QProgressDialog.setMinimumDuration": ('int',), + "QProgressDialog.setRange": ('int', 'int'), + "QProgressDialog.setValue": ('int',), + "QProgressDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QProgressDialog.sizeHint": (), + "QProgressDialog.value": (), + "QProgressDialog.wasCanceled": (), + + # class PySide2.QtWidgets.QPushButton: + "QPushButton.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPushButton.autoDefault": (), + "QPushButton.event": ('PySide2.QtCore.QEvent',), + "QPushButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QPushButton.isDefault": (), + "QPushButton.isFlat": (), + "QPushButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPushButton.menu": (), + "QPushButton.minimumSizeHint": (), + "QPushButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPushButton.setAutoDefault": ('bool',), + "QPushButton.setDefault": ('bool',), + "QPushButton.setFlat": ('bool',), + "QPushButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QPushButton.showMenu": (), + "QPushButton.sizeHint": (), + + # class PySide2.QtWidgets.QRadioButton: + "QRadioButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QRadioButton.event": ('PySide2.QtCore.QEvent',), + "QRadioButton.hitButton": ('PySide2.QtCore.QPoint',), + "QRadioButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QRadioButton.minimumSizeHint": (), + "QRadioButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QRadioButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRadioButton.sizeHint": (), + + # class PySide2.QtWidgets.QRubberBand: + "QRubberBand.__init__": ('PySide2.QtWidgets.QRubberBand.Shape', 'PySide2.QtWidgets.QWidget'), + "QRubberBand.changeEvent": ('PySide2.QtCore.QEvent',), + "QRubberBand.event": ('PySide2.QtCore.QEvent',), + "QRubberBand.initStyleOption": ('PySide2.QtWidgets.QStyleOptionRubberBand',), + "QRubberBand.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRubberBand.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QRubberBand.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRubberBand.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QRubberBand.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QRubberBand.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRubberBand.shape": (), + "QRubberBand.showEvent": ('PySide2.QtGui.QShowEvent',), + + # class PySide2.QtWidgets.QScrollArea: + "QScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.alignment": (), + "QScrollArea.ensureVisible": ('int', 'int', 'int', 'int'), + "QScrollArea.ensureWidgetVisible": ('PySide2.QtWidgets.QWidget', 'int', 'int'), + "QScrollArea.event": ('PySide2.QtCore.QEvent',), + "QScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QScrollArea.focusNextPrevChild": ('bool',), + "QScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QScrollArea.scrollContentsBy": ('int', 'int'), + "QScrollArea.setAlignment": ('Alignment',), + "QScrollArea.setWidget": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.setWidgetResizable": ('bool',), + "QScrollArea.sizeHint": (), + "QScrollArea.takeWidget": (), + "QScrollArea.viewportSizeHint": (), + "QScrollArea.widget": (), + "QScrollArea.widgetResizable": (), + + # class PySide2.QtWidgets.QScrollBar: + "QScrollBar.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QScrollBar.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QScrollBar.event": ('PySide2.QtCore.QEvent',), + "QScrollBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QScrollBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QScrollBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QScrollBar.sizeHint": (), + "QScrollBar.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QScrollBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QShortcut: + "QShortcut.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Callable', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtWidgets.QWidget',)], + "QShortcut.autoRepeat": (), + "QShortcut.context": (), + "QShortcut.event": ('PySide2.QtCore.QEvent',), + "QShortcut.id": (), + "QShortcut.isEnabled": (), + "QShortcut.key": (), + "QShortcut.parentWidget": (), + "QShortcut.setAutoRepeat": ('bool',), + "QShortcut.setContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QShortcut.setEnabled": ('bool',), + "QShortcut.setKey": ('PySide2.QtGui.QKeySequence',), + "QShortcut.setWhatsThis": ('str',), + "QShortcut.whatsThis": (), + + # class PySide2.QtWidgets.QSizeGrip: + "QSizeGrip.__init__": ('PySide2.QtWidgets.QWidget',), + "QSizeGrip.event": ('PySide2.QtCore.QEvent',), + "QSizeGrip.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QSizeGrip.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QSizeGrip.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QSizeGrip.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSizeGrip.setVisible": ('bool',), + "QSizeGrip.showEvent": ('PySide2.QtGui.QShowEvent',), + "QSizeGrip.sizeHint": (), + + # class PySide2.QtWidgets.QSizePolicy: + "QSizePolicy.__init__": [(), ('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QSizePolicy.__copy__": (), + "QSizePolicy.controlType": (), + "QSizePolicy.expandingDirections": (), + "QSizePolicy.hasHeightForWidth": (), + "QSizePolicy.hasWidthForHeight": (), + "QSizePolicy.horizontalPolicy": (), + "QSizePolicy.horizontalStretch": (), + "QSizePolicy.retainSizeWhenHidden": (), + "QSizePolicy.setControlType": ('PySide2.QtWidgets.QSizePolicy.ControlType',), + "QSizePolicy.setHeightForWidth": ('bool',), + "QSizePolicy.setHorizontalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setHorizontalStretch": ('int',), + "QSizePolicy.setRetainSizeWhenHidden": ('bool',), + "QSizePolicy.setVerticalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setVerticalStretch": ('int',), + "QSizePolicy.setWidthForHeight": ('bool',), + "QSizePolicy.transpose": (), + "QSizePolicy.verticalPolicy": (), + "QSizePolicy.verticalStretch": (), + + # class PySide2.QtWidgets.QSlider: + "QSlider.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSlider.event": ('PySide2.QtCore.QEvent',), + "QSlider.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QSlider.minimumSizeHint": (), + "QSlider.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSlider.setTickInterval": ('int',), + "QSlider.setTickPosition": ('PySide2.QtWidgets.QSlider.TickPosition',), + "QSlider.sizeHint": (), + "QSlider.tickInterval": (), + "QSlider.tickPosition": (), + + # class PySide2.QtWidgets.QSpacerItem: + "QSpacerItem.__init__": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.changeSize": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.expandingDirections": (), + "QSpacerItem.geometry": (), + "QSpacerItem.isEmpty": (), + "QSpacerItem.maximumSize": (), + "QSpacerItem.minimumSize": (), + "QSpacerItem.setGeometry": ('PySide2.QtCore.QRect',), + "QSpacerItem.sizeHint": (), + "QSpacerItem.sizePolicy": (), + "QSpacerItem.spacerItem": (), + + # class PySide2.QtWidgets.QSpinBox: + "QSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QSpinBox.cleanText": (), + "QSpinBox.displayIntegerBase": (), + "QSpinBox.event": ('PySide2.QtCore.QEvent',), + "QSpinBox.fixup": ('str',), + "QSpinBox.maximum": (), + "QSpinBox.minimum": (), + "QSpinBox.prefix": (), + "QSpinBox.setDisplayIntegerBase": ('int',), + "QSpinBox.setMaximum": ('int',), + "QSpinBox.setMinimum": ('int',), + "QSpinBox.setPrefix": ('str',), + "QSpinBox.setRange": ('int', 'int'), + "QSpinBox.setSingleStep": ('int',), + "QSpinBox.setSuffix": ('str',), + "QSpinBox.setValue": ('int',), + "QSpinBox.singleStep": (), + "QSpinBox.suffix": (), + "QSpinBox.textFromValue": ('int',), + "QSpinBox.validate": ('str', 'int'), + "QSpinBox.value": (), + "QSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QSplashScreen: + "QSplashScreen.__init__": [('PySide2.QtGui.QPixmap', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QPixmap', 'WindowFlags')], + "QSplashScreen.clearMessage": (), + "QSplashScreen.drawContents": ('PySide2.QtGui.QPainter',), + "QSplashScreen.event": ('PySide2.QtCore.QEvent',), + "QSplashScreen.finish": ('PySide2.QtWidgets.QWidget',), + "QSplashScreen.message": (), + "QSplashScreen.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplashScreen.pixmap": (), + "QSplashScreen.setPixmap": ('PySide2.QtGui.QPixmap',), + "QSplashScreen.showMessage": ('str', 'int', 'PySide2.QtGui.QColor'), + + # class PySide2.QtWidgets.QSplitter: + "QSplitter.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSplitter.addWidget": ('PySide2.QtWidgets.QWidget',), + "QSplitter.changeEvent": ('PySide2.QtCore.QEvent',), + "QSplitter.childEvent": ('PySide2.QtCore.QChildEvent',), + "QSplitter.childrenCollapsible": (), + "QSplitter.closestLegalPosition": ('int', 'int'), + "QSplitter.count": (), + "QSplitter.createHandle": (), + "QSplitter.event": ('PySide2.QtCore.QEvent',), + "QSplitter.getRange": ('int', 'int', 'int'), + "QSplitter.handle": ('int',), + "QSplitter.handleWidth": (), + "QSplitter.indexOf": ('PySide2.QtWidgets.QWidget',), + "QSplitter.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.isCollapsible": ('int',), + "QSplitter.minimumSizeHint": (), + "QSplitter.moveSplitter": ('int', 'int'), + "QSplitter.opaqueResize": (), + "QSplitter.orientation": (), + "QSplitter.refresh": (), + "QSplitter.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitter.restoreState": ('PySide2.QtCore.QByteArray',), + "QSplitter.saveState": (), + "QSplitter.setChildrenCollapsible": ('bool',), + "QSplitter.setCollapsible": ('int', 'bool'), + "QSplitter.setHandleWidth": ('int',), + "QSplitter.setOpaqueResize": ('bool',), + "QSplitter.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitter.setRubberBand": ('int',), + "QSplitter.setSizes": ('list',), + "QSplitter.setStretchFactor": ('int', 'int'), + "QSplitter.sizeHint": (), + "QSplitter.sizes": (), + "QSplitter.widget": ('int',), + + # class PySide2.QtWidgets.QSplitterHandle: + "QSplitterHandle.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QSplitter'), + "QSplitterHandle.closestLegalPosition": ('int',), + "QSplitterHandle.event": ('PySide2.QtCore.QEvent',), + "QSplitterHandle.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.moveSplitter": ('int',), + "QSplitterHandle.opaqueResize": (), + "QSplitterHandle.orientation": (), + "QSplitterHandle.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSplitterHandle.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitterHandle.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitterHandle.sizeHint": (), + "QSplitterHandle.splitter": (), + + # class PySide2.QtWidgets.QStackedLayout: + "QStackedLayout.__init__": [(), ('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QStackedLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QStackedLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.count": (), + "QStackedLayout.currentIndex": (), + "QStackedLayout.currentWidget": (), + "QStackedLayout.hasHeightForWidth": (), + "QStackedLayout.heightForWidth": ('int',), + "QStackedLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedLayout.itemAt": ('int',), + "QStackedLayout.minimumSize": (), + "QStackedLayout.setCurrentIndex": ('int',), + "QStackedLayout.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QStackedLayout.setStackingMode": ('PySide2.QtWidgets.QStackedLayout.StackingMode',), + "QStackedLayout.sizeHint": (), + "QStackedLayout.stackingMode": (), + "QStackedLayout.takeAt": ('int',), + "QStackedLayout.widget": [(), ('int',)], + + # class PySide2.QtWidgets.QStackedWidget: + "QStackedWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.count": (), + "QStackedWidget.currentIndex": (), + "QStackedWidget.currentWidget": (), + "QStackedWidget.event": ('PySide2.QtCore.QEvent',), + "QStackedWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedWidget.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.setCurrentIndex": ('int',), + "QStackedWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.widget": ('int',), + + # class PySide2.QtWidgets.QStatusBar: + "QStatusBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.addPermanentWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.addWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.clearMessage": (), + "QStatusBar.currentMessage": (), + "QStatusBar.event": ('PySide2.QtCore.QEvent',), + "QStatusBar.hideOrShow": (), + "QStatusBar.insertPermanentWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.isSizeGripEnabled": (), + "QStatusBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QStatusBar.reformat": (), + "QStatusBar.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QStatusBar.setSizeGripEnabled": ('bool',), + "QStatusBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QStatusBar.showMessage": ('str', 'int'), + + # class PySide2.QtWidgets.QStyle: + "QStyle.__init__": (), + "QStyle.alignedRect": ('PySide2.QtCore.Qt.LayoutDirection', 'Alignment', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QRect'), + "QStyle.combinedLayoutSpacing": ('ControlTypes', 'ControlTypes', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawItemPixmap": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.drawItemText": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QStyle.itemPixmapRect": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.itemTextRect": ('PySide2.QtGui.QFontMetrics', 'PySide2.QtCore.QRect', 'int', 'bool', 'str'), + "QStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.proxy": (), + "QStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QStyle.sliderPositionFromValue": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.sliderValueFromPosition": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.standardPalette": (), + "QStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.visualAlignment": ('PySide2.QtCore.Qt.LayoutDirection', 'Alignment'), + "QStyle.visualPos": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QPoint'), + "QStyle.visualRect": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QRect'), + + # class PySide2.QtWidgets.QStyleFactory: + "QStyleFactory.__init__": (), + "QStyleFactory.create": ('str',), + "QStyleFactory.keys": (), + + # class PySide2.QtWidgets.QStyleHintReturn: + "QStyleHintReturn.__init__": ('int', 'int'), + + # class PySide2.QtWidgets.QStyleHintReturnMask: + "QStyleHintReturnMask.__init__": (), + + # class PySide2.QtWidgets.QStyleHintReturnVariant: + "QStyleHintReturnVariant.__init__": (), + + # class PySide2.QtWidgets.QStyleOption: + "QStyleOption.__init__": [('PySide2.QtWidgets.QStyleOption',), ('int', 'int')], + "QStyleOption.init": ('PySide2.QtWidgets.QWidget',), + "QStyleOption.initFrom": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QStyleOptionButton: + "QStyleOptionButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComboBox: + "QStyleOptionComboBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionComboBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComplex: + "QStyleOptionComplex.__init__": [('PySide2.QtWidgets.QStyleOptionComplex',), ('int', 'int')], + + # class PySide2.QtWidgets.QStyleOptionDockWidget: + "QStyleOptionDockWidget.__init__": [(), ('PySide2.QtWidgets.QStyleOptionDockWidget',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFocusRect: + "QStyleOptionFocusRect.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFocusRect',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFrame: + "QStyleOptionFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionGraphicsItem: + "QStyleOptionGraphicsItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGraphicsItem',), ('int',)], + "QStyleOptionGraphicsItem.levelOfDetailFromTransform": ('PySide2.QtGui.QTransform',), + + # class PySide2.QtWidgets.QStyleOptionGroupBox: + "QStyleOptionGroupBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGroupBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionHeader: + "QStyleOptionHeader.__init__": [(), ('PySide2.QtWidgets.QStyleOptionHeader',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionMenuItem: + "QStyleOptionMenuItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionMenuItem',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionProgressBar: + "QStyleOptionProgressBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionProgressBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionRubberBand: + "QStyleOptionRubberBand.__init__": [(), ('PySide2.QtWidgets.QStyleOptionRubberBand',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSizeGrip: + "QStyleOptionSizeGrip.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSizeGrip',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSlider: + "QStyleOptionSlider.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSlider',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSpinBox: + "QStyleOptionSpinBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSpinBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTab: + "QStyleOptionTab.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTab',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabBarBase: + "QStyleOptionTabBarBase.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabBarBase',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabWidgetFrame: + "QStyleOptionTabWidgetFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTitleBar: + "QStyleOptionTitleBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTitleBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBar: + "QStyleOptionToolBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBox: + "QStyleOptionToolBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolButton: + "QStyleOptionToolButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionViewItem: + "QStyleOptionViewItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionViewItem',), ('int',)], + "QStyleOptionViewItem.__copy__": (), + + # class PySide2.QtWidgets.QStylePainter: + "QStylePainter.__init__": [(), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.begin": [('PySide2.QtGui.QPaintDevice',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex'), + "QStylePainter.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.drawItemPixmap": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStylePainter.drawItemText": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStylePainter.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.style": (), + + # class PySide2.QtWidgets.QStyledItemDelegate: + "QStyledItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QStyledItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.displayText": ('PySide2.support.signature.typing.Any', 'PySide2.QtCore.QLocale'), + "QStyledItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStyledItemDelegate.initStyleOption": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.itemEditorFactory": (), + "QStyledItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QStyledItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QSwipeGesture: + "QSwipeGesture.__init__": ('PySide2.QtCore.QObject',), + "QSwipeGesture.horizontalDirection": (), + "QSwipeGesture.setSwipeAngle": ('float',), + "QSwipeGesture.swipeAngle": (), + "QSwipeGesture.verticalDirection": (), + + # class PySide2.QtWidgets.QSystemTrayIcon: + "QSystemTrayIcon.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'PySide2.QtCore.QObject')], + "QSystemTrayIcon.contextMenu": (), + "QSystemTrayIcon.event": ('PySide2.QtCore.QEvent',), + "QSystemTrayIcon.geometry": (), + "QSystemTrayIcon.hide": (), + "QSystemTrayIcon.icon": (), + "QSystemTrayIcon.isSystemTrayAvailable": (), + "QSystemTrayIcon.isVisible": (), + "QSystemTrayIcon.setContextMenu": ('PySide2.QtWidgets.QMenu',), + "QSystemTrayIcon.setIcon": ('PySide2.QtGui.QIcon',), + "QSystemTrayIcon.setToolTip": ('str',), + "QSystemTrayIcon.setVisible": ('bool',), + "QSystemTrayIcon.show": (), + "QSystemTrayIcon.showMessage": ('str', 'str', 'PySide2.QtWidgets.QSystemTrayIcon.MessageIcon', 'int'), + "QSystemTrayIcon.supportsMessages": (), + "QSystemTrayIcon.toolTip": (), + + # class PySide2.QtWidgets.QTabBar: + "QTabBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabBar.addTab": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QTabBar.autoHide": (), + "QTabBar.changeCurrentOnDrag": (), + "QTabBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabBar.count": (), + "QTabBar.currentIndex": (), + "QTabBar.documentMode": (), + "QTabBar.drawBase": (), + "QTabBar.elideMode": (), + "QTabBar.event": ('PySide2.QtCore.QEvent',), + "QTabBar.expanding": (), + "QTabBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QTabBar.iconSize": (), + "QTabBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTab', 'int'), + "QTabBar.insertTab": [('int', 'PySide2.QtGui.QIcon', 'str'), ('int', 'str')], + "QTabBar.isMovable": (), + "QTabBar.isTabEnabled": ('int',), + "QTabBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabBar.minimumSizeHint": (), + "QTabBar.minimumTabSizeHint": ('int',), + "QTabBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.moveTab": ('int', 'int'), + "QTabBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabBar.removeTab": ('int',), + "QTabBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabBar.selectionBehaviorOnRemove": (), + "QTabBar.setAutoHide": ('bool',), + "QTabBar.setChangeCurrentOnDrag": ('bool',), + "QTabBar.setCurrentIndex": ('int',), + "QTabBar.setDocumentMode": ('bool',), + "QTabBar.setDrawBase": ('bool',), + "QTabBar.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabBar.setExpanding": ('bool',), + "QTabBar.setIconSize": ('PySide2.QtCore.QSize',), + "QTabBar.setMovable": ('bool',), + "QTabBar.setSelectionBehaviorOnRemove": ('PySide2.QtWidgets.QTabBar.SelectionBehavior',), + "QTabBar.setShape": ('PySide2.QtWidgets.QTabBar.Shape',), + "QTabBar.setTabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition', 'PySide2.QtWidgets.QWidget'), + "QTabBar.setTabData": ('int', 'PySide2.support.signature.typing.Any'), + "QTabBar.setTabEnabled": ('int', 'bool'), + "QTabBar.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabBar.setTabText": ('int', 'str'), + "QTabBar.setTabTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTabBar.setTabToolTip": ('int', 'str'), + "QTabBar.setTabWhatsThis": ('int', 'str'), + "QTabBar.setTabsClosable": ('bool',), + "QTabBar.setUsesScrollButtons": ('bool',), + "QTabBar.shape": (), + "QTabBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabBar.sizeHint": (), + "QTabBar.tabAt": ('PySide2.QtCore.QPoint',), + "QTabBar.tabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition'), + "QTabBar.tabData": ('int',), + "QTabBar.tabIcon": ('int',), + "QTabBar.tabInserted": ('int',), + "QTabBar.tabLayoutChange": (), + "QTabBar.tabRect": ('int',), + "QTabBar.tabRemoved": ('int',), + "QTabBar.tabSizeHint": ('int',), + "QTabBar.tabText": ('int',), + "QTabBar.tabTextColor": ('int',), + "QTabBar.tabToolTip": ('int',), + "QTabBar.tabWhatsThis": ('int',), + "QTabBar.tabsClosable": (), + "QTabBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTabBar.usesScrollButtons": (), + "QTabBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QTabWidget: + "QTabWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.addTab": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabWidget.clear": (), + "QTabWidget.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QTabWidget.count": (), + "QTabWidget.currentIndex": (), + "QTabWidget.currentWidget": (), + "QTabWidget.documentMode": (), + "QTabWidget.elideMode": (), + "QTabWidget.event": ('PySide2.QtCore.QEvent',), + "QTabWidget.hasHeightForWidth": (), + "QTabWidget.heightForWidth": ('int',), + "QTabWidget.iconSize": (), + "QTabWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), + "QTabWidget.insertTab": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.isMovable": (), + "QTabWidget.isTabEnabled": ('int',), + "QTabWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabWidget.minimumSizeHint": (), + "QTabWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabWidget.removeTab": ('int',), + "QTabWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabWidget.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QTabWidget.setCurrentIndex": ('int',), + "QTabWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.setDocumentMode": ('bool',), + "QTabWidget.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabWidget.setIconSize": ('PySide2.QtCore.QSize',), + "QTabWidget.setMovable": ('bool',), + "QTabWidget.setTabBar": ('PySide2.QtWidgets.QTabBar',), + "QTabWidget.setTabBarAutoHide": ('bool',), + "QTabWidget.setTabEnabled": ('int', 'bool'), + "QTabWidget.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabWidget.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QTabWidget.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QTabWidget.setTabText": ('int', 'str'), + "QTabWidget.setTabToolTip": ('int', 'str'), + "QTabWidget.setTabWhatsThis": ('int', 'str'), + "QTabWidget.setTabsClosable": ('bool',), + "QTabWidget.setUsesScrollButtons": ('bool',), + "QTabWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabWidget.sizeHint": (), + "QTabWidget.tabBar": (), + "QTabWidget.tabBarAutoHide": (), + "QTabWidget.tabIcon": ('int',), + "QTabWidget.tabInserted": ('int',), + "QTabWidget.tabPosition": (), + "QTabWidget.tabRemoved": ('int',), + "QTabWidget.tabShape": (), + "QTabWidget.tabText": ('int',), + "QTabWidget.tabToolTip": ('int',), + "QTabWidget.tabWhatsThis": ('int',), + "QTabWidget.tabsClosable": (), + "QTabWidget.usesScrollButtons": (), + "QTabWidget.widget": ('int',), + + # class PySide2.QtWidgets.QTableView: + "QTableView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTableView.clearSpans": (), + "QTableView.columnAt": ('int',), + "QTableView.columnCountChanged": ('int', 'int'), + "QTableView.columnMoved": ('int', 'int', 'int'), + "QTableView.columnResized": ('int', 'int', 'int'), + "QTableView.columnSpan": ('int', 'int'), + "QTableView.columnViewportPosition": ('int',), + "QTableView.columnWidth": ('int',), + "QTableView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTableView.doItemsLayout": (), + "QTableView.gridStyle": (), + "QTableView.hideColumn": ('int',), + "QTableView.hideRow": ('int',), + "QTableView.horizontalHeader": (), + "QTableView.horizontalOffset": (), + "QTableView.horizontalScrollbarAction": ('int',), + "QTableView.indexAt": ('PySide2.QtCore.QPoint',), + "QTableView.isColumnHidden": ('int',), + "QTableView.isCornerButtonEnabled": (), + "QTableView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTableView.isRowHidden": ('int',), + "QTableView.isSortingEnabled": (), + "QTableView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QTableView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTableView.resizeColumnToContents": ('int',), + "QTableView.resizeColumnsToContents": (), + "QTableView.resizeRowToContents": ('int',), + "QTableView.resizeRowsToContents": (), + "QTableView.rowAt": ('int',), + "QTableView.rowCountChanged": ('int', 'int'), + "QTableView.rowHeight": ('int',), + "QTableView.rowMoved": ('int', 'int', 'int'), + "QTableView.rowResized": ('int', 'int', 'int'), + "QTableView.rowSpan": ('int', 'int'), + "QTableView.rowViewportPosition": ('int',), + "QTableView.scrollContentsBy": ('int', 'int'), + "QTableView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableView.selectColumn": ('int',), + "QTableView.selectRow": ('int',), + "QTableView.selectedIndexes": (), + "QTableView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTableView.setColumnHidden": ('int', 'bool'), + "QTableView.setColumnWidth": ('int', 'int'), + "QTableView.setCornerButtonEnabled": ('bool',), + "QTableView.setGridStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QTableView.setHorizontalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTableView.setRowHeight": ('int', 'int'), + "QTableView.setRowHidden": ('int', 'bool'), + "QTableView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QTableView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTableView.setShowGrid": ('bool',), + "QTableView.setSortingEnabled": ('bool',), + "QTableView.setSpan": ('int', 'int', 'int', 'int'), + "QTableView.setVerticalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setWordWrap": ('bool',), + "QTableView.showColumn": ('int',), + "QTableView.showGrid": (), + "QTableView.showRow": ('int',), + "QTableView.sizeHintForColumn": ('int',), + "QTableView.sizeHintForRow": ('int',), + "QTableView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTableView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTableView.updateGeometries": (), + "QTableView.verticalHeader": (), + "QTableView.verticalOffset": (), + "QTableView.verticalScrollbarAction": ('int',), + "QTableView.viewOptions": (), + "QTableView.viewportSizeHint": (), + "QTableView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTableView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTableView.wordWrap": (), + + # class PySide2.QtWidgets.QTableWidget: + "QTableWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'int', 'PySide2.QtWidgets.QWidget')], + "QTableWidget.cellWidget": ('int', 'int'), + "QTableWidget.clear": (), + "QTableWidget.clearContents": (), + "QTableWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.column": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.columnCount": (), + "QTableWidget.currentColumn": (), + "QTableWidget.currentItem": (), + "QTableWidget.currentRow": (), + "QTableWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTableWidget.dropMimeData": ('int', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTableWidget.editItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.event": ('PySide2.QtCore.QEvent',), + "QTableWidget.findItems": ('str', 'MatchFlags'), + "QTableWidget.horizontalHeaderItem": ('int',), + "QTableWidget.indexFromItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.insertColumn": ('int',), + "QTableWidget.insertRow": ('int',), + "QTableWidget.isItemSelected": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.isSortingEnabled": (), + "QTableWidget.item": ('int', 'int'), + "QTableWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTableWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTableWidget.itemPrototype": (), + "QTableWidget.items": ('PySide2.QtCore.QMimeData',), + "QTableWidget.mimeData": ('list',), + "QTableWidget.mimeTypes": (), + "QTableWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.removeCellWidget": ('int', 'int'), + "QTableWidget.removeColumn": ('int',), + "QTableWidget.removeRow": ('int',), + "QTableWidget.row": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.rowCount": (), + "QTableWidget.scrollToItem": ('PySide2.QtWidgets.QTableWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableWidget.selectedItems": (), + "QTableWidget.selectedRanges": (), + "QTableWidget.setCellWidget": ('int', 'int', 'PySide2.QtWidgets.QWidget'), + "QTableWidget.setColumnCount": ('int',), + "QTableWidget.setCurrentCell": [('int', 'int'), ('int', 'int', 'SelectionFlags')], + "QTableWidget.setCurrentItem": [('PySide2.QtWidgets.QTableWidgetItem',), ('PySide2.QtWidgets.QTableWidgetItem', 'SelectionFlags')], + "QTableWidget.setHorizontalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setHorizontalHeaderLabels": ('PySide2.support.signature.typing.List',), + "QTableWidget.setItem": ('int', 'int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setItemPrototype": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.setItemSelected": ('PySide2.QtWidgets.QTableWidgetItem', 'bool'), + "QTableWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableWidget.setRangeSelected": ('PySide2.QtWidgets.QTableWidgetSelectionRange', 'bool'), + "QTableWidget.setRowCount": ('int',), + "QTableWidget.setSortingEnabled": ('bool',), + "QTableWidget.setVerticalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setVerticalHeaderLabels": ('PySide2.support.signature.typing.List',), + "QTableWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTableWidget.supportedDropActions": (), + "QTableWidget.takeHorizontalHeaderItem": ('int',), + "QTableWidget.takeItem": ('int', 'int'), + "QTableWidget.takeVerticalHeaderItem": ('int',), + "QTableWidget.verticalHeaderItem": ('int',), + "QTableWidget.visualColumn": ('int',), + "QTableWidget.visualItemRect": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.visualRow": ('int',), + + # class PySide2.QtWidgets.QTableWidgetItem: + "QTableWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'int'), ('PySide2.QtWidgets.QTableWidgetItem',), ('int',), ('str', 'int')], + "QTableWidgetItem.background": (), + "QTableWidgetItem.backgroundColor": (), + "QTableWidgetItem.checkState": (), + "QTableWidgetItem.clone": (), + "QTableWidgetItem.column": (), + "QTableWidgetItem.data": ('int',), + "QTableWidgetItem.flags": (), + "QTableWidgetItem.font": (), + "QTableWidgetItem.foreground": (), + "QTableWidgetItem.icon": (), + "QTableWidgetItem.isSelected": (), + "QTableWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTableWidgetItem.row": (), + "QTableWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QTableWidgetItem.setData": ('int', 'PySide2.support.signature.typing.Any'), + "QTableWidgetItem.setFlags": ('ItemFlags',), + "QTableWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QTableWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QTableWidgetItem.setSelected": ('bool',), + "QTableWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QTableWidgetItem.setStatusTip": ('str',), + "QTableWidgetItem.setText": ('str',), + "QTableWidgetItem.setTextAlignment": ('int',), + "QTableWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setToolTip": ('str',), + "QTableWidgetItem.setWhatsThis": ('str',), + "QTableWidgetItem.sizeHint": (), + "QTableWidgetItem.statusTip": (), + "QTableWidgetItem.tableWidget": (), + "QTableWidgetItem.text": (), + "QTableWidgetItem.textAlignment": (), + "QTableWidgetItem.textColor": (), + "QTableWidgetItem.toolTip": (), + "QTableWidgetItem.type": (), + "QTableWidgetItem.whatsThis": (), + "QTableWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTableWidgetSelectionRange: + "QTableWidgetSelectionRange.__init__": [(), ('PySide2.QtWidgets.QTableWidgetSelectionRange',), ('int', 'int', 'int', 'int')], + "QTableWidgetSelectionRange.__copy__": (), + "QTableWidgetSelectionRange.bottomRow": (), + "QTableWidgetSelectionRange.columnCount": (), + "QTableWidgetSelectionRange.leftColumn": (), + "QTableWidgetSelectionRange.rightColumn": (), + "QTableWidgetSelectionRange.rowCount": (), + "QTableWidgetSelectionRange.topRow": (), + + # class PySide2.QtWidgets.QTapAndHoldGesture: + "QTapAndHoldGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapAndHoldGesture.position": (), + "QTapAndHoldGesture.setPosition": ('PySide2.QtCore.QPointF',), + "QTapAndHoldGesture.setTimeout": ('int',), + "QTapAndHoldGesture.timeout": (), + + # class PySide2.QtWidgets.QTapGesture: + "QTapGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapGesture.position": (), + "QTapGesture.setPosition": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QTextBrowser: + "QTextBrowser.__init__": ('PySide2.QtWidgets.QWidget',), + "QTextBrowser.backward": (), + "QTextBrowser.backwardHistoryCount": (), + "QTextBrowser.clearHistory": (), + "QTextBrowser.event": ('PySide2.QtCore.QEvent',), + "QTextBrowser.focusNextPrevChild": ('bool',), + "QTextBrowser.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextBrowser.forward": (), + "QTextBrowser.forwardHistoryCount": (), + "QTextBrowser.historyTitle": ('int',), + "QTextBrowser.historyUrl": ('int',), + "QTextBrowser.home": (), + "QTextBrowser.isBackwardAvailable": (), + "QTextBrowser.isForwardAvailable": (), + "QTextBrowser.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextBrowser.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextBrowser.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.openExternalLinks": (), + "QTextBrowser.openLinks": (), + "QTextBrowser.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextBrowser.reload": (), + "QTextBrowser.searchPaths": (), + "QTextBrowser.setOpenExternalLinks": ('bool',), + "QTextBrowser.setOpenLinks": ('bool',), + "QTextBrowser.setSearchPaths": ('PySide2.support.signature.typing.List',), + "QTextBrowser.setSource": ('PySide2.QtCore.QUrl',), + "QTextBrowser.source": (), + + # class PySide2.QtWidgets.QTextEdit: + "QTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QTextEdit.acceptRichText": (), + "QTextEdit.alignment": (), + "QTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QTextEdit.append": ('str',), + "QTextEdit.autoFormatting": (), + "QTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.canPaste": (), + "QTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QTextEdit.clear": (), + "QTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QTextEdit.copy": (), + "QTextEdit.createMimeDataFromSelection": (), + "QTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QTextEdit.currentCharFormat": (), + "QTextEdit.currentFont": (), + "QTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextEdit.cursorWidth": (), + "QTextEdit.cut": (), + "QTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.document": (), + "QTextEdit.documentTitle": (), + "QTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTextEdit.ensureCursorVisible": (), + "QTextEdit.event": ('PySide2.QtCore.QEvent',), + "QTextEdit.extraSelections": (), + "QTextEdit.find": [('PySide2.QtCore.QRegExp', 'FindFlags'), ('int',), ('str', 'FindFlags')], + "QTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.focusNextPrevChild": ('bool',), + "QTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.fontFamily": (), + "QTextEdit.fontItalic": (), + "QTextEdit.fontPointSize": (), + "QTextEdit.fontUnderline": (), + "QTextEdit.fontWeight": (), + "QTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'PySide2.support.signature.typing.Any')], + "QTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.insertHtml": ('str',), + "QTextEdit.insertPlainText": ('str',), + "QTextEdit.isReadOnly": (), + "QTextEdit.isUndoRedoEnabled": (), + "QTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.lineWrapColumnOrWidth": (), + "QTextEdit.lineWrapMode": (), + "QTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextEdit.overwriteMode": (), + "QTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextEdit.paste": (), + "QTextEdit.placeholderText": (), + "QTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextEdit.redo": (), + "QTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTextEdit.scrollContentsBy": ('int', 'int'), + "QTextEdit.scrollToAnchor": ('str',), + "QTextEdit.selectAll": (), + "QTextEdit.setAcceptRichText": ('bool',), + "QTextEdit.setAlignment": ('Alignment',), + "QTextEdit.setAutoFormatting": ('AutoFormatting',), + "QTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.setCurrentFont": ('PySide2.QtGui.QFont',), + "QTextEdit.setCursorWidth": ('int',), + "QTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QTextEdit.setDocumentTitle": ('str',), + "QTextEdit.setExtraSelections": ('list',), + "QTextEdit.setFontFamily": ('str',), + "QTextEdit.setFontItalic": ('bool',), + "QTextEdit.setFontPointSize": ('float',), + "QTextEdit.setFontUnderline": ('bool',), + "QTextEdit.setFontWeight": ('int',), + "QTextEdit.setHtml": ('str',), + "QTextEdit.setLineWrapColumnOrWidth": ('int',), + "QTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QTextEdit.LineWrapMode',), + "QTextEdit.setOverwriteMode": ('bool',), + "QTextEdit.setPlaceholderText": ('str',), + "QTextEdit.setPlainText": ('str',), + "QTextEdit.setReadOnly": ('bool',), + "QTextEdit.setTabChangesFocus": ('bool',), + "QTextEdit.setTabStopWidth": ('int',), + "QTextEdit.setText": ('str',), + "QTextEdit.setTextBackgroundColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.setTextInteractionFlags": ('TextInteractionFlags',), + "QTextEdit.setUndoRedoEnabled": ('bool',), + "QTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTextEdit.tabChangesFocus": (), + "QTextEdit.tabStopWidth": (), + "QTextEdit.textBackgroundColor": (), + "QTextEdit.textColor": (), + "QTextEdit.textCursor": (), + "QTextEdit.textInteractionFlags": (), + "QTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTextEdit.toHtml": (), + "QTextEdit.toPlainText": (), + "QTextEdit.undo": (), + "QTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QTextEdit.wordWrapMode": (), + "QTextEdit.zoomIn": ('int',), + "QTextEdit.zoomInF": ('float',), + "QTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QTileRules: + "QTileRules.__init__": [('PySide2.QtCore.Qt.TileRule',), ('PySide2.QtCore.Qt.TileRule', 'PySide2.QtCore.Qt.TileRule'), ('PySide2.QtWidgets.QTileRules',)], + "QTileRules.__copy__": (), + + # class PySide2.QtWidgets.QTimeEdit: + "QTimeEdit.__init__": [('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QToolBar: + "QToolBar.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QToolBar.actionAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QToolBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QToolBar.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str')], + "QToolBar.addSeparator": (), + "QToolBar.addWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBar.allowedAreas": (), + "QToolBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBar.clear": (), + "QToolBar.event": ('PySide2.QtCore.QEvent',), + "QToolBar.iconSize": (), + "QToolBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolBar',), + "QToolBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QToolBar.insertWidget": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget'), + "QToolBar.isAreaAllowed": ('PySide2.QtCore.Qt.ToolBarArea',), + "QToolBar.isFloatable": (), + "QToolBar.isFloating": (), + "QToolBar.isMovable": (), + "QToolBar.orientation": (), + "QToolBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolBar.setAllowedAreas": ('ToolBarAreas',), + "QToolBar.setFloatable": ('bool',), + "QToolBar.setIconSize": ('PySide2.QtCore.QSize',), + "QToolBar.setMovable": ('bool',), + "QToolBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QToolBar.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolBar.toggleViewAction": (), + "QToolBar.toolButtonStyle": (), + "QToolBar.widgetForAction": ('PySide2.QtWidgets.QAction',), + + # class PySide2.QtWidgets.QToolBox: + "QToolBox.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QToolBox.addItem": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBox.count": (), + "QToolBox.currentIndex": (), + "QToolBox.currentWidget": (), + "QToolBox.event": ('PySide2.QtCore.QEvent',), + "QToolBox.indexOf": ('PySide2.QtWidgets.QWidget',), + "QToolBox.insertItem": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.isItemEnabled": ('int',), + "QToolBox.itemIcon": ('int',), + "QToolBox.itemInserted": ('int',), + "QToolBox.itemRemoved": ('int',), + "QToolBox.itemText": ('int',), + "QToolBox.itemToolTip": ('int',), + "QToolBox.removeItem": ('int',), + "QToolBox.setCurrentIndex": ('int',), + "QToolBox.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBox.setItemEnabled": ('int', 'bool'), + "QToolBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QToolBox.setItemText": ('int', 'str'), + "QToolBox.setItemToolTip": ('int', 'str'), + "QToolBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QToolBox.widget": ('int',), + + # class PySide2.QtWidgets.QToolButton: + "QToolButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QToolButton.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolButton.arrowType": (), + "QToolButton.autoRaise": (), + "QToolButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.defaultAction": (), + "QToolButton.enterEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.event": ('PySide2.QtCore.QEvent',), + "QToolButton.hitButton": ('PySide2.QtCore.QPoint',), + "QToolButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolButton',), + "QToolButton.leaveEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.menu": (), + "QToolButton.minimumSizeHint": (), + "QToolButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.nextCheckState": (), + "QToolButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolButton.popupMode": (), + "QToolButton.setArrowType": ('PySide2.QtCore.Qt.ArrowType',), + "QToolButton.setAutoRaise": ('bool',), + "QToolButton.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QToolButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QToolButton.setPopupMode": ('PySide2.QtWidgets.QToolButton.ToolButtonPopupMode',), + "QToolButton.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolButton.showMenu": (), + "QToolButton.sizeHint": (), + "QToolButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QToolButton.toolButtonStyle": (), + + # class PySide2.QtWidgets.QToolTip: + "QToolTip.palette": (), + "QToolTip.font": (), + "QToolTip.hideText": (), + "QToolTip.isVisible": (), + "QToolTip.setFont": ('PySide2.QtGui.QFont',), + "QToolTip.setPalette": ('PySide2.QtGui.QPalette',), + "QToolTip.showText": [('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect', 'int')], + "QToolTip.text": (), + + # class PySide2.QtWidgets.QTreeView: + "QTreeView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeView.allColumnsShowFocus": (), + "QTreeView.autoExpandDelay": (), + "QTreeView.collapse": ('PySide2.QtCore.QModelIndex',), + "QTreeView.collapseAll": (), + "QTreeView.columnAt": ('int',), + "QTreeView.columnCountChanged": ('int', 'int'), + "QTreeView.columnMoved": (), + "QTreeView.columnResized": ('int', 'int', 'int'), + "QTreeView.columnViewportPosition": ('int',), + "QTreeView.columnWidth": ('int',), + "QTreeView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTreeView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QTreeView.doItemsLayout": (), + "QTreeView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTreeView.drawBranches": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawRow": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawTree": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QRegion'), + "QTreeView.expand": ('PySide2.QtCore.QModelIndex',), + "QTreeView.expandAll": (), + "QTreeView.expandToDepth": ('int',), + "QTreeView.expandsOnDoubleClick": (), + "QTreeView.header": (), + "QTreeView.hideColumn": ('int',), + "QTreeView.horizontalOffset": (), + "QTreeView.horizontalScrollbarAction": ('int',), + "QTreeView.indentation": (), + "QTreeView.indexAbove": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexAt": ('PySide2.QtCore.QPoint',), + "QTreeView.indexBelow": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexRowSizeHint": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isAnimated": (), + "QTreeView.isColumnHidden": ('int',), + "QTreeView.isExpanded": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isHeaderHidden": (), + "QTreeView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isRowHidden": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isSortingEnabled": (), + "QTreeView.itemsExpandable": (), + "QTreeView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTreeView.keyboardSearch": ('str',), + "QTreeView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QTreeView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTreeView.reexpand": (), + "QTreeView.reset": (), + "QTreeView.resetIndentation": (), + "QTreeView.resizeColumnToContents": ('int',), + "QTreeView.rootIsDecorated": (), + "QTreeView.rowHeight": ('PySide2.QtCore.QModelIndex',), + "QTreeView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.scrollContentsBy": ('int', 'int'), + "QTreeView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeView.selectAll": (), + "QTreeView.selectedIndexes": (), + "QTreeView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTreeView.setAllColumnsShowFocus": ('bool',), + "QTreeView.setAnimated": ('bool',), + "QTreeView.setAutoExpandDelay": ('int',), + "QTreeView.setColumnHidden": ('int', 'bool'), + "QTreeView.setColumnWidth": ('int', 'int'), + "QTreeView.setExpanded": ('PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setExpandsOnDoubleClick": ('bool',), + "QTreeView.setFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTreeView.setHeaderHidden": ('bool',), + "QTreeView.setIndentation": ('int',), + "QTreeView.setItemsExpandable": ('bool',), + "QTreeView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeView.setRootIsDecorated": ('bool',), + "QTreeView.setRowHidden": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QTreeView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeView.setSortingEnabled": ('bool',), + "QTreeView.setTreePosition": ('int',), + "QTreeView.setUniformRowHeights": ('bool',), + "QTreeView.setWordWrap": ('bool',), + "QTreeView.showColumn": ('int',), + "QTreeView.sizeHintForColumn": ('int',), + "QTreeView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTreeView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTreeView.treePosition": (), + "QTreeView.uniformRowHeights": (), + "QTreeView.updateGeometries": (), + "QTreeView.verticalOffset": (), + "QTreeView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QTreeView.viewportSizeHint": (), + "QTreeView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTreeView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTreeView.wordWrap": (), + + # class PySide2.QtWidgets.QTreeWidget: + "QTreeWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeWidget.addTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.addTopLevelItems": ('list',), + "QTreeWidget.clear": (), + "QTreeWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.collapseItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.columnCount": (), + "QTreeWidget.currentColumn": (), + "QTreeWidget.currentItem": (), + "QTreeWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTreeWidget.dropMimeData": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTreeWidget.editItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.event": ('PySide2.QtCore.QEvent',), + "QTreeWidget.expandItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.findItems": ('str', 'MatchFlags', 'int'), + "QTreeWidget.headerItem": (), + "QTreeWidget.indexFromItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.indexOfTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.insertTopLevelItem": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidget.insertTopLevelItems": ('int', 'list'), + "QTreeWidget.invisibleRootItem": (), + "QTreeWidget.isFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAbove": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTreeWidget.itemBelow": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeWidget.itemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.items": ('PySide2.QtCore.QMimeData',), + "QTreeWidget.mimeData": ('list',), + "QTreeWidget.mimeTypes": (), + "QTreeWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.removeItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.scrollToItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeWidget.selectedItems": (), + "QTreeWidget.setColumnCount": ('int',), + "QTreeWidget.setCurrentItem": [('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'SelectionFlags')], + "QTreeWidget.setFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setHeaderItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.setHeaderLabel": ('str',), + "QTreeWidget.setHeaderLabels": ('PySide2.support.signature.typing.List',), + "QTreeWidget.setItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtWidgets.QWidget'), + "QTreeWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeWidget.sortColumn": (), + "QTreeWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidget.supportedDropActions": (), + "QTreeWidget.takeTopLevelItem": ('int',), + "QTreeWidget.topLevelItem": ('int',), + "QTreeWidget.topLevelItemCount": (), + "QTreeWidget.visualItemRect": ('PySide2.QtWidgets.QTreeWidgetItem',), + + # class PySide2.QtWidgets.QTreeWidgetItem: + "QTreeWidgetItem.__init__": [('PySide2.QtWidgets.QTreeWidget', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'PySide2.support.signature.typing.List', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.support.signature.typing.List', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.support.signature.typing.List', 'int'), ('int',)], + "QTreeWidgetItem.addChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.addChildren": ('list',), + "QTreeWidgetItem.background": ('int',), + "QTreeWidgetItem.backgroundColor": ('int',), + "QTreeWidgetItem.checkState": ('int',), + "QTreeWidgetItem.child": ('int',), + "QTreeWidgetItem.childCount": (), + "QTreeWidgetItem.childIndicatorPolicy": (), + "QTreeWidgetItem.clone": (), + "QTreeWidgetItem.columnCount": (), + "QTreeWidgetItem.data": ('int', 'int'), + "QTreeWidgetItem.emitDataChanged": (), + "QTreeWidgetItem.flags": (), + "QTreeWidgetItem.font": ('int',), + "QTreeWidgetItem.foreground": ('int',), + "QTreeWidgetItem.icon": ('int',), + "QTreeWidgetItem.indexOfChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.insertChild": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidgetItem.insertChildren": ('int', 'list'), + "QTreeWidgetItem.isDisabled": (), + "QTreeWidgetItem.isExpanded": (), + "QTreeWidgetItem.isFirstColumnSpanned": (), + "QTreeWidgetItem.isHidden": (), + "QTreeWidgetItem.isSelected": (), + "QTreeWidgetItem.parent": (), + "QTreeWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTreeWidgetItem.removeChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.setBackground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setBackgroundColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setCheckState": ('int', 'PySide2.QtCore.Qt.CheckState'), + "QTreeWidgetItem.setChildIndicatorPolicy": ('PySide2.QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy',), + "QTreeWidgetItem.setData": ('int', 'int', 'PySide2.support.signature.typing.Any'), + "QTreeWidgetItem.setDisabled": ('bool',), + "QTreeWidgetItem.setExpanded": ('bool',), + "QTreeWidgetItem.setFirstColumnSpanned": ('bool',), + "QTreeWidgetItem.setFlags": ('ItemFlags',), + "QTreeWidgetItem.setFont": ('int', 'PySide2.QtGui.QFont'), + "QTreeWidgetItem.setForeground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setHidden": ('bool',), + "QTreeWidgetItem.setIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTreeWidgetItem.setSelected": ('bool',), + "QTreeWidgetItem.setSizeHint": ('int', 'PySide2.QtCore.QSize'), + "QTreeWidgetItem.setStatusTip": ('int', 'str'), + "QTreeWidgetItem.setText": ('int', 'str'), + "QTreeWidgetItem.setTextAlignment": ('int', 'int'), + "QTreeWidgetItem.setTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setToolTip": ('int', 'str'), + "QTreeWidgetItem.setWhatsThis": ('int', 'str'), + "QTreeWidgetItem.sizeHint": ('int',), + "QTreeWidgetItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidgetItem.statusTip": ('int',), + "QTreeWidgetItem.takeChild": ('int',), + "QTreeWidgetItem.takeChildren": (), + "QTreeWidgetItem.text": ('int',), + "QTreeWidgetItem.textAlignment": ('int',), + "QTreeWidgetItem.textColor": ('int',), + "QTreeWidgetItem.toolTip": ('int',), + "QTreeWidgetItem.treeWidget": (), + "QTreeWidgetItem.type": (), + "QTreeWidgetItem.whatsThis": ('int',), + "QTreeWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTreeWidgetItemIterator: + "QTreeWidgetItemIterator.__init__": [('PySide2.QtWidgets.QTreeWidget', 'IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItem', 'IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItemIterator',)], + "QTreeWidgetItemIterator.__copy__": (), + "QTreeWidgetItemIterator.value": (), + + # class PySide2.QtWidgets.QUndoCommand: + "QUndoCommand.__init__": [('PySide2.QtWidgets.QUndoCommand',), ('str', 'PySide2.QtWidgets.QUndoCommand')], + "QUndoCommand.actionText": (), + "QUndoCommand.child": ('int',), + "QUndoCommand.childCount": (), + "QUndoCommand.id": (), + "QUndoCommand.mergeWith": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoCommand.redo": (), + "QUndoCommand.setText": ('str',), + "QUndoCommand.text": (), + "QUndoCommand.undo": (), + + # class PySide2.QtWidgets.QUndoGroup: + "QUndoGroup.__init__": ('PySide2.QtCore.QObject',), + "QUndoGroup.activeStack": (), + "QUndoGroup.addStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.canRedo": (), + "QUndoGroup.canUndo": (), + "QUndoGroup.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.isClean": (), + "QUndoGroup.redo": (), + "QUndoGroup.redoText": (), + "QUndoGroup.removeStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.setActiveStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.stacks": (), + "QUndoGroup.undo": (), + "QUndoGroup.undoText": (), + + # class PySide2.QtWidgets.QUndoStack: + "QUndoStack.__init__": ('PySide2.QtCore.QObject',), + "QUndoStack.beginMacro": ('str',), + "QUndoStack.canRedo": (), + "QUndoStack.canUndo": (), + "QUndoStack.cleanIndex": (), + "QUndoStack.clear": (), + "QUndoStack.command": ('int',), + "QUndoStack.count": (), + "QUndoStack.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.endMacro": (), + "QUndoStack.index": (), + "QUndoStack.isActive": (), + "QUndoStack.isClean": (), + "QUndoStack.push": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoStack.redo": (), + "QUndoStack.redoText": (), + "QUndoStack.setActive": ('bool',), + "QUndoStack.setClean": (), + "QUndoStack.setIndex": ('int',), + "QUndoStack.setUndoLimit": ('int',), + "QUndoStack.text": ('int',), + "QUndoStack.undo": (), + "QUndoStack.undoLimit": (), + "QUndoStack.undoText": (), + + # class PySide2.QtWidgets.QUndoView: + "QUndoView.__init__": [('PySide2.QtWidgets.QUndoGroup', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QUndoStack', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QUndoView.cleanIcon": (), + "QUndoView.emptyLabel": (), + "QUndoView.group": (), + "QUndoView.setCleanIcon": ('PySide2.QtGui.QIcon',), + "QUndoView.setEmptyLabel": ('str',), + "QUndoView.setGroup": ('PySide2.QtWidgets.QUndoGroup',), + "QUndoView.setStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoView.stack": (), + + # class PySide2.QtWidgets.QVBoxLayout: + "QVBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QWhatsThis: + "QWhatsThis.enterWhatsThisMode": (), + "QWhatsThis.createAction": ('PySide2.QtCore.QObject',), + "QWhatsThis.hideText": (), + "QWhatsThis.inWhatsThisMode": (), + "QWhatsThis.leaveWhatsThisMode": (), + "QWhatsThis.showText": ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), + + # class PySide2.QtWidgets.QWidget: + "QWidget.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWidget.acceptDrops": (), + "QWidget.accessibleDescription": (), + "QWidget.accessibleName": (), + "QWidget.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QWidget.actions": (), + "QWidget.activateWindow": (), + "QWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QWidget.addActions": ('list',), + "QWidget.adjustSize": (), + "QWidget.autoFillBackground": (), + "QWidget.backgroundRole": (), + "QWidget.backingStore": (), + "QWidget.baseSize": (), + "QWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QWidget.childAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.childrenRect": (), + "QWidget.childrenRegion": (), + "QWidget.clearFocus": (), + "QWidget.clearMask": (), + "QWidget.close": (), + "QWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QWidget.contentsMargins": (), + "QWidget.contentsRect": (), + "QWidget.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWidget.contextMenuPolicy": (), + "QWidget.create": ('int', 'bool', 'bool'), + "QWidget.createWinId": (), + "QWidget.createWindowContainer": ('PySide2.QtGui.QWindow', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWidget.cursor": (), + "QWidget.destroy": ('bool', 'bool'), + "QWidget.devType": (), + "QWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWidget.effectiveWinId": (), + "QWidget.ensurePolished": (), + "QWidget.enterEvent": ('PySide2.QtCore.QEvent',), + "QWidget.event": ('PySide2.QtCore.QEvent',), + "QWidget.find": ('int',), + "QWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusNextChild": (), + "QWidget.focusNextPrevChild": ('bool',), + "QWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusPolicy": (), + "QWidget.focusPreviousChild": (), + "QWidget.focusProxy": (), + "QWidget.focusWidget": (), + "QWidget.font": (), + "QWidget.fontInfo": (), + "QWidget.fontMetrics": (), + "QWidget.foregroundRole": (), + "QWidget.frameGeometry": (), + "QWidget.frameSize": (), + "QWidget.geometry": (), + "QWidget.getContentsMargins": ('int', 'int', 'int', 'int'), + "QWidget.grab": ('PySide2.QtCore.QRect',), + "QWidget.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'GestureFlags'), + "QWidget.grabKeyboard": (), + "QWidget.grabMouse": [(), ('PySide2.QtGui.QCursor',)], + "QWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QWidget.graphicsEffect": (), + "QWidget.graphicsProxyWidget": (), + "QWidget.hasFocus": (), + "QWidget.hasHeightForWidth": (), + "QWidget.hasMouseTracking": (), + "QWidget.height": (), + "QWidget.heightForWidth": ('int',), + "QWidget.hide": (), + "QWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWidget.initPainter": ('PySide2.QtGui.QPainter',), + "QWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QWidget.inputMethodHints": (), + "QWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QWidget.internalWinId": (), + "QWidget.isActiveWindow": (), + "QWidget.isAncestorOf": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabled": (), + "QWidget.isEnabledTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabledToTLW": (), + "QWidget.isFullScreen": (), + "QWidget.isHidden": (), + "QWidget.isLeftToRight": (), + "QWidget.isMaximized": (), + "QWidget.isMinimized": (), + "QWidget.isModal": (), + "QWidget.isRightToLeft": (), + "QWidget.isTopLevel": (), + "QWidget.isVisible": (), + "QWidget.isVisibleTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isWindow": (), + "QWidget.isWindowModified": (), + "QWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyboardGrabber": (), + "QWidget.layout": (), + "QWidget.layoutDirection": (), + "QWidget.leaveEvent": ('PySide2.QtCore.QEvent',), + "QWidget.locale": (), + "QWidget.lower": (), + "QWidget.mapFrom": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapFromParent": ('PySide2.QtCore.QPoint',), + "QWidget.mapTo": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapToParent": ('PySide2.QtCore.QPoint',), + "QWidget.mask": (), + "QWidget.maximumHeight": (), + "QWidget.maximumSize": (), + "QWidget.maximumWidth": (), + "QWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QWidget.minimumHeight": (), + "QWidget.minimumSize": (), + "QWidget.minimumSizeHint": (), + "QWidget.minimumWidth": (), + "QWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseGrabber": (), + "QWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWidget.nativeParentWidget": (), + "QWidget.nextInFocusChain": (), + "QWidget.normalGeometry": (), + "QWidget.overrideWindowFlags": ('WindowFlags',), + "QWidget.overrideWindowState": ('WindowStates',), + "QWidget.paintEngine": (), + "QWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWidget.palette": (), + "QWidget.parentWidget": (), + "QWidget.pos": (), + "QWidget.previousInFocusChain": (), + "QWidget.raise_": (), + "QWidget.rect": (), + "QWidget.redirected": ('PySide2.QtCore.QPoint',), + "QWidget.releaseKeyboard": (), + "QWidget.releaseMouse": (), + "QWidget.releaseShortcut": ('int',), + "QWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QWidget.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags')], + "QWidget.repaint": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWidget.restoreGeometry": ('PySide2.QtCore.QByteArray',), + "QWidget.saveGeometry": (), + "QWidget.scroll": [('int', 'int'), ('int', 'int', 'PySide2.QtCore.QRect')], + "QWidget.setAcceptDrops": ('bool',), + "QWidget.setAccessibleDescription": ('str',), + "QWidget.setAccessibleName": ('str',), + "QWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QWidget.setAutoFillBackground": ('bool',), + "QWidget.setBackgroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setBaseSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QWidget.setContextMenuPolicy": ('PySide2.QtCore.Qt.ContextMenuPolicy',), + "QWidget.setCursor": ('PySide2.QtGui.QCursor',), + "QWidget.setDisabled": ('bool',), + "QWidget.setEnabled": ('bool',), + "QWidget.setFixedHeight": ('int',), + "QWidget.setFixedSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setFixedWidth": ('int',), + "QWidget.setFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QWidget.setFocusProxy": ('PySide2.QtWidgets.QWidget',), + "QWidget.setFont": ('PySide2.QtGui.QFont',), + "QWidget.setForegroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWidget.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QWidget.setHidden": ('bool',), + "QWidget.setInputMethodHints": ('InputMethodHints',), + "QWidget.setLayout": ('PySide2.QtWidgets.QLayout',), + "QWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QWidget.setLocale": ('PySide2.QtCore.QLocale',), + "QWidget.setMask": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QRegion',)], + "QWidget.setMaximumHeight": ('int',), + "QWidget.setMaximumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMaximumWidth": ('int',), + "QWidget.setMinimumHeight": ('int',), + "QWidget.setMinimumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMinimumWidth": ('int',), + "QWidget.setMouseTracking": ('bool',), + "QWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QWidget.setParent": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QWidget.setShortcutEnabled": ('int', 'bool'), + "QWidget.setSizeIncrement": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy')], + "QWidget.setStatusTip": ('str',), + "QWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QWidget.setStyleSheet": ('str',), + "QWidget.setTabOrder": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), + "QWidget.setToolTip": ('str',), + "QWidget.setToolTipDuration": ('int',), + "QWidget.setUpdatesEnabled": ('bool',), + "QWidget.setVisible": ('bool',), + "QWidget.setWhatsThis": ('str',), + "QWidget.setWindowFilePath": ('str',), + "QWidget.setWindowFlags": ('WindowFlags',), + "QWidget.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QWidget.setWindowIconText": ('str',), + "QWidget.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWidget.setWindowModified": ('bool',), + "QWidget.setWindowOpacity": ('float',), + "QWidget.setWindowRole": ('str',), + "QWidget.setWindowState": ('WindowStates',), + "QWidget.setWindowTitle": ('str',), + "QWidget.sharedPainter": (), + "QWidget.show": (), + "QWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWidget.showFullScreen": (), + "QWidget.showMaximized": (), + "QWidget.showMinimized": (), + "QWidget.showNormal": (), + "QWidget.size": (), + "QWidget.sizeHint": (), + "QWidget.sizeIncrement": (), + "QWidget.sizePolicy": (), + "QWidget.stackUnder": ('PySide2.QtWidgets.QWidget',), + "QWidget.statusTip": (), + "QWidget.style": (), + "QWidget.styleSheet": (), + "QWidget.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QWidget.toolTip": (), + "QWidget.toolTipDuration": (), + "QWidget.topLevelWidget": (), + "QWidget.underMouse": (), + "QWidget.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QWidget.unsetCursor": (), + "QWidget.unsetLayoutDirection": (), + "QWidget.unsetLocale": (), + "QWidget.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.updateGeometry": (), + "QWidget.updateMicroFocus": (), + "QWidget.updatesEnabled": (), + "QWidget.visibleRegion": (), + "QWidget.whatsThis": (), + "QWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWidget.width": (), + "QWidget.winId": (), + "QWidget.window": (), + "QWidget.windowFilePath": (), + "QWidget.windowFlags": (), + "QWidget.windowHandle": (), + "QWidget.windowIcon": (), + "QWidget.windowIconText": (), + "QWidget.windowModality": (), + "QWidget.windowOpacity": (), + "QWidget.windowRole": (), + "QWidget.windowState": (), + "QWidget.windowTitle": (), + "QWidget.windowType": (), + "QWidget.x": (), + "QWidget.y": (), + + # class PySide2.QtWidgets.QWidgetAction: + "QWidgetAction.__init__": ('PySide2.QtCore.QObject',), + "QWidgetAction.createWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.createdWidgets": (), + "QWidgetAction.defaultWidget": (), + "QWidgetAction.deleteWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.event": ('PySide2.QtCore.QEvent',), + "QWidgetAction.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QWidgetAction.releaseWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.requestWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.setDefaultWidget": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QWidgetItem: + "QWidgetItem.__init__": ('PySide2.QtWidgets.QWidget',), + "QWidgetItem.controlTypes": (), + "QWidgetItem.expandingDirections": (), + "QWidgetItem.geometry": (), + "QWidgetItem.hasHeightForWidth": (), + "QWidgetItem.heightForWidth": ('int',), + "QWidgetItem.isEmpty": (), + "QWidgetItem.maximumSize": (), + "QWidgetItem.minimumSize": (), + "QWidgetItem.setGeometry": ('PySide2.QtCore.QRect',), + "QWidgetItem.sizeHint": (), + "QWidgetItem.widget": (), + + # class PySide2.QtWidgets.QWizard: + "QWizard.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWizard.addPage": ('PySide2.QtWidgets.QWizardPage',), + "QWizard.back": (), + "QWizard.button": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.cleanupPage": ('int',), + "QWizard.currentId": (), + "QWizard.currentPage": (), + "QWizard.done": ('int',), + "QWizard.event": ('PySide2.QtCore.QEvent',), + "QWizard.field": ('str',), + "QWizard.hasVisitedPage": ('int',), + "QWizard.initializePage": ('int',), + "QWizard.next": (), + "QWizard.nextId": (), + "QWizard.options": (), + "QWizard.page": ('int',), + "QWizard.pageIds": (), + "QWizard.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWizard.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizard.removePage": ('int',), + "QWizard.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWizard.restart": (), + "QWizard.setButton": ('PySide2.QtWidgets.QWizard.WizardButton', 'PySide2.QtWidgets.QAbstractButton'), + "QWizard.setButtonLayout": ('list',), + "QWizard.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizard.setDefaultProperty": ('str', 'str', 'str'), + "QWizard.setField": ('str', 'PySide2.support.signature.typing.Any'), + "QWizard.setOption": ('PySide2.QtWidgets.QWizard.WizardOption', 'bool'), + "QWizard.setOptions": ('WizardOptions',), + "QWizard.setPage": ('int', 'PySide2.QtWidgets.QWizardPage'), + "QWizard.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizard.setSideWidget": ('PySide2.QtWidgets.QWidget',), + "QWizard.setStartId": ('int',), + "QWizard.setSubTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setVisible": ('bool',), + "QWizard.setWizardStyle": ('PySide2.QtWidgets.QWizard.WizardStyle',), + "QWizard.sideWidget": (), + "QWizard.sizeHint": (), + "QWizard.startId": (), + "QWizard.subTitleFormat": (), + "QWizard.testOption": ('PySide2.QtWidgets.QWizard.WizardOption',), + "QWizard.titleFormat": (), + "QWizard.validateCurrentPage": (), + "QWizard.visitedPages": (), + "QWizard.wizardStyle": (), + + # class PySide2.QtWidgets.QWizardPage: + "QWizardPage.__init__": ('PySide2.QtWidgets.QWidget',), + "QWizardPage.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizardPage.cleanupPage": (), + "QWizardPage.field": ('str',), + "QWizardPage.initializePage": (), + "QWizardPage.isCommitPage": (), + "QWizardPage.isComplete": (), + "QWizardPage.isFinalPage": (), + "QWizardPage.nextId": (), + "QWizardPage.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizardPage.registerField": ('str', 'PySide2.QtWidgets.QWidget', 'str', 'str'), + "QWizardPage.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizardPage.setCommitPage": ('bool',), + "QWizardPage.setField": ('str', 'PySide2.support.signature.typing.Any'), + "QWizardPage.setFinalPage": ('bool',), + "QWizardPage.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizardPage.setSubTitle": ('str',), + "QWizardPage.setTitle": ('str',), + "QWizardPage.subTitle": (), + "QWizardPage.title": (), + "QWizardPage.validatePage": (), + "QWizardPage.wizard": (), + }) + +# Module PySide2.QtPrintSupport +if "PySide2.QtPrintSupport" in sys.modules: + dict.update({ + + # class PySide2.QtPrintSupport.QAbstractPrintDialog: + "QAbstractPrintDialog.__init__": ('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), + "QAbstractPrintDialog.addEnabledOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.enabledOptions": (), + "QAbstractPrintDialog.exec_": (), + "QAbstractPrintDialog.fromPage": (), + "QAbstractPrintDialog.isOptionEnabled": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.maxPage": (), + "QAbstractPrintDialog.minPage": (), + "QAbstractPrintDialog.printRange": (), + "QAbstractPrintDialog.printer": (), + "QAbstractPrintDialog.setEnabledOptions": ('PrintDialogOptions',), + "QAbstractPrintDialog.setFromTo": ('int', 'int'), + "QAbstractPrintDialog.setMinMax": ('int', 'int'), + "QAbstractPrintDialog.setOptionTabs": ('list',), + "QAbstractPrintDialog.setPrintRange": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintRange',), + "QAbstractPrintDialog.toPage": (), + + # class PySide2.QtPrintSupport.QPageSetupDialog: + "QPageSetupDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPageSetupDialog.done": ('int',), + "QPageSetupDialog.exec_": (), + "QPageSetupDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPageSetupDialog.printer": (), + "QPageSetupDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintDialog: + "QPrintDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPrintDialog.done": ('int',), + "QPrintDialog.exec_": (), + "QPrintDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintDialog.options": (), + "QPrintDialog.printer": [], + "QPrintDialog.setOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption', 'bool'), + "QPrintDialog.setOptions": ('PrintDialogOptions',), + "QPrintDialog.setVisible": ('bool',), + "QPrintDialog.testOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + + # class PySide2.QtPrintSupport.QPrintEngine: + "QPrintEngine.__init__": (), + "QPrintEngine.abort": (), + "QPrintEngine.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrintEngine.newPage": (), + "QPrintEngine.printerState": (), + "QPrintEngine.property": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey',), + "QPrintEngine.setProperty": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtPrintSupport.QPrintPreviewDialog: + "QPrintPreviewDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QPrintPreviewDialog.done": ('int',), + "QPrintPreviewDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintPreviewDialog.printer": (), + "QPrintPreviewDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintPreviewWidget: + "QPrintPreviewWidget.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QPrintPreviewWidget.currentPage": (), + "QPrintPreviewWidget.fitInView": (), + "QPrintPreviewWidget.fitToWidth": (), + "QPrintPreviewWidget.orientation": (), + "QPrintPreviewWidget.pageCount": (), + "QPrintPreviewWidget.print_": (), + "QPrintPreviewWidget.setAllPagesViewMode": (), + "QPrintPreviewWidget.setCurrentPage": ('int',), + "QPrintPreviewWidget.setFacingPagesViewMode": (), + "QPrintPreviewWidget.setLandscapeOrientation": (), + "QPrintPreviewWidget.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrintPreviewWidget.setPortraitOrientation": (), + "QPrintPreviewWidget.setSinglePageViewMode": (), + "QPrintPreviewWidget.setViewMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ViewMode',), + "QPrintPreviewWidget.setVisible": ('bool',), + "QPrintPreviewWidget.setZoomFactor": ('float',), + "QPrintPreviewWidget.setZoomMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ZoomMode',), + "QPrintPreviewWidget.updatePreview": (), + "QPrintPreviewWidget.viewMode": (), + "QPrintPreviewWidget.zoomFactor": (), + "QPrintPreviewWidget.zoomIn": ('float',), + "QPrintPreviewWidget.zoomMode": (), + "QPrintPreviewWidget.zoomOut": ('float',), + + # class PySide2.QtPrintSupport.QPrinter: + "QPrinter.__init__": [('PySide2.QtPrintSupport.QPrinter.PrinterMode',), ('PySide2.QtPrintSupport.QPrinterInfo', 'PySide2.QtPrintSupport.QPrinter.PrinterMode')], + "QPrinter.abort": (), + "QPrinter.actualNumCopies": (), + "QPrinter.collateCopies": (), + "QPrinter.colorMode": (), + "QPrinter.copyCount": (), + "QPrinter.creator": (), + "QPrinter.devType": (), + "QPrinter.docName": (), + "QPrinter.doubleSidedPrinting": (), + "QPrinter.duplex": (), + "QPrinter.fontEmbeddingEnabled": (), + "QPrinter.fromPage": (), + "QPrinter.fullPage": (), + "QPrinter.getPageMargins": ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit'), + "QPrinter.isValid": (), + "QPrinter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrinter.newPage": (), + "QPrinter.numCopies": (), + "QPrinter.orientation": (), + "QPrinter.outputFileName": (), + "QPrinter.outputFormat": (), + "QPrinter.pageLayout": (), + "QPrinter.pageOrder": (), + "QPrinter.pageRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.pageSize": (), + "QPrinter.paintEngine": (), + "QPrinter.paperName": (), + "QPrinter.paperRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSize": ('PySide2.QtPrintSupport.QPrinter.Unit',), + "QPrinter.paperSource": (), + "QPrinter.printEngine": (), + "QPrinter.printProgram": (), + "QPrinter.printRange": (), + "QPrinter.printerName": (), + "QPrinter.printerState": (), + "QPrinter.resolution": (), + "QPrinter.setCollateCopies": ('bool',), + "QPrinter.setColorMode": ('PySide2.QtPrintSupport.QPrinter.ColorMode',), + "QPrinter.setCopyCount": ('int',), + "QPrinter.setCreator": ('str',), + "QPrinter.setDocName": ('str',), + "QPrinter.setDoubleSidedPrinting": ('bool',), + "QPrinter.setDuplex": ('PySide2.QtPrintSupport.QPrinter.DuplexMode',), + "QPrinter.setEngines": ('PySide2.QtPrintSupport.QPrintEngine', 'PySide2.QtGui.QPaintEngine'), + "QPrinter.setFontEmbeddingEnabled": ('bool',), + "QPrinter.setFromTo": ('int', 'int'), + "QPrinter.setFullPage": ('bool',), + "QPrinter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPrinter.setNumCopies": ('int',), + "QPrinter.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrinter.setOutputFileName": ('str',), + "QPrinter.setOutputFormat": ('PySide2.QtPrintSupport.QPrinter.OutputFormat',), + "QPrinter.setPageLayout": ('PySide2.QtGui.QPageLayout',), + "QPrinter.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit'), ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit')], + "QPrinter.setPageOrder": ('PySide2.QtPrintSupport.QPrinter.PageOrder',), + "QPrinter.setPageOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPrinter.setPageSize": [('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPrinter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPrinter.setPaperName": ('str',), + "QPrinter.setPaperSize": ('PySide2.QtCore.QSizeF', 'PySide2.QtPrintSupport.QPrinter.Unit'), + "QPrinter.setPaperSource": ('PySide2.QtPrintSupport.QPrinter.PaperSource',), + "QPrinter.setPrintProgram": ('str',), + "QPrinter.setPrintRange": ('PySide2.QtPrintSupport.QPrinter.PrintRange',), + "QPrinter.setPrinterName": ('str',), + "QPrinter.setResolution": ('int',), + "QPrinter.setWinPageSize": ('int',), + "QPrinter.supportedResolutions": (), + "QPrinter.supportsMultipleCopies": (), + "QPrinter.toPage": (), + "QPrinter.winPageSize": (), + + # class PySide2.QtPrintSupport.QPrinterInfo: + "QPrinterInfo.__init__": [(), ('PySide2.QtPrintSupport.QPrinter',), ('PySide2.QtPrintSupport.QPrinterInfo',)], + "QPrinterInfo.__copy__": (), + "QPrinterInfo.availablePrinterNames": (), + "QPrinterInfo.availablePrinters": (), + "QPrinterInfo.defaultDuplexMode": (), + "QPrinterInfo.defaultPageSize": (), + "QPrinterInfo.defaultPrinter": (), + "QPrinterInfo.defaultPrinterName": (), + "QPrinterInfo.description": (), + "QPrinterInfo.isDefault": (), + "QPrinterInfo.isNull": (), + "QPrinterInfo.isRemote": (), + "QPrinterInfo.location": (), + "QPrinterInfo.makeAndModel": (), + "QPrinterInfo.maximumPhysicalPageSize": (), + "QPrinterInfo.minimumPhysicalPageSize": (), + "QPrinterInfo.printerInfo": ('str',), + "QPrinterInfo.printerName": (), + "QPrinterInfo.state": (), + "QPrinterInfo.supportedDuplexModes": (), + "QPrinterInfo.supportedPageSizes": (), + "QPrinterInfo.supportedResolutions": (), + "QPrinterInfo.supportedSizesWithNames": (), + "QPrinterInfo.supportsCustomPageSizes": (), + }) + +# Module PySide2.QtSql +if "PySide2.QtSql" in sys.modules: + dict.update({ + + # class PySide2.QtSql.QSql: + + # class PySide2.QtSql.QSqlDatabase: + "QSqlDatabase.__init__": [(), ('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlDriver',), ('str',)], + "QSqlDatabase.__copy__": (), + "QSqlDatabase.addDatabase": [('PySide2.QtSql.QSqlDriver', 'str'), ('str', 'str')], + "QSqlDatabase.cloneDatabase": ('PySide2.QtSql.QSqlDatabase', 'str'), + "QSqlDatabase.close": (), + "QSqlDatabase.commit": (), + "QSqlDatabase.connectOptions": (), + "QSqlDatabase.connectionName": (), + "QSqlDatabase.connectionNames": (), + "QSqlDatabase.contains": ('str',), + "QSqlDatabase.database": ('str', 'bool'), + "QSqlDatabase.databaseName": (), + "QSqlDatabase.driver": (), + "QSqlDatabase.driverName": (), + "QSqlDatabase.drivers": (), + "QSqlDatabase.exec_": ('str',), + "QSqlDatabase.hostName": (), + "QSqlDatabase.isDriverAvailable": ('str',), + "QSqlDatabase.isOpen": (), + "QSqlDatabase.isOpenError": (), + "QSqlDatabase.isValid": (), + "QSqlDatabase.lastError": (), + "QSqlDatabase.numericalPrecisionPolicy": (), + "QSqlDatabase.open": [(), ('str', 'str')], + "QSqlDatabase.password": (), + "QSqlDatabase.port": (), + "QSqlDatabase.primaryIndex": ('str',), + "QSqlDatabase.record": ('str',), + "QSqlDatabase.registerSqlDriver": ('str', 'PySide2.QtSql.QSqlDriverCreatorBase'), + "QSqlDatabase.removeDatabase": ('str',), + "QSqlDatabase.rollback": (), + "QSqlDatabase.setConnectOptions": ('str',), + "QSqlDatabase.setDatabaseName": ('str',), + "QSqlDatabase.setHostName": ('str',), + "QSqlDatabase.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDatabase.setPassword": ('str',), + "QSqlDatabase.setPort": ('int',), + "QSqlDatabase.setUserName": ('str',), + "QSqlDatabase.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDatabase.transaction": (), + "QSqlDatabase.userName": (), + + # class PySide2.QtSql.QSqlDriver: + "QSqlDriver.__init__": ('PySide2.QtCore.QObject',), + "QSqlDriver.beginTransaction": (), + "QSqlDriver.cancelQuery": (), + "QSqlDriver.close": (), + "QSqlDriver.commitTransaction": (), + "QSqlDriver.createResult": (), + "QSqlDriver.dbmsType": (), + "QSqlDriver.escapeIdentifier": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.formatValue": ('PySide2.QtSql.QSqlField', 'bool'), + "QSqlDriver.hasFeature": ('PySide2.QtSql.QSqlDriver.DriverFeature',), + "QSqlDriver.isIdentifierEscaped": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.isOpen": (), + "QSqlDriver.isOpenError": (), + "QSqlDriver.lastError": (), + "QSqlDriver.numericalPrecisionPolicy": (), + "QSqlDriver.open": ('str', 'str', 'str', 'str', 'int', 'str'), + "QSqlDriver.primaryIndex": ('str',), + "QSqlDriver.record": ('str',), + "QSqlDriver.rollbackTransaction": (), + "QSqlDriver.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlDriver.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDriver.setOpen": ('bool',), + "QSqlDriver.setOpenError": ('bool',), + "QSqlDriver.sqlStatement": ('PySide2.QtSql.QSqlDriver.StatementType', 'str', 'PySide2.QtSql.QSqlRecord', 'bool'), + "QSqlDriver.stripDelimiters": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.subscribeToNotification": ('str',), + "QSqlDriver.subscribedToNotifications": (), + "QSqlDriver.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDriver.unsubscribeFromNotification": ('str',), + + # class PySide2.QtSql.QSqlDriverCreatorBase: + "QSqlDriverCreatorBase.__init__": (), + "QSqlDriverCreatorBase.createObject": (), + + # class PySide2.QtSql.QSqlError: + "QSqlError.__init__": [('PySide2.QtSql.QSqlError',), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'int'), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'str')], + "QSqlError.__copy__": (), + "QSqlError.databaseText": (), + "QSqlError.driverText": (), + "QSqlError.isValid": (), + "QSqlError.nativeErrorCode": (), + "QSqlError.number": (), + "QSqlError.setDatabaseText": ('str',), + "QSqlError.setDriverText": ('str',), + "QSqlError.setNumber": ('int',), + "QSqlError.setType": ('PySide2.QtSql.QSqlError.ErrorType',), + "QSqlError.text": (), + "QSqlError.type": (), + + # class PySide2.QtSql.QSqlField: + "QSqlField.__init__": [('PySide2.QtSql.QSqlField',), ('str', 'type')], + "QSqlField.__copy__": (), + "QSqlField.clear": (), + "QSqlField.defaultValue": (), + "QSqlField.isAutoValue": (), + "QSqlField.isGenerated": (), + "QSqlField.isNull": (), + "QSqlField.isReadOnly": (), + "QSqlField.isValid": (), + "QSqlField.length": (), + "QSqlField.name": (), + "QSqlField.precision": (), + "QSqlField.requiredStatus": (), + "QSqlField.setAutoValue": ('bool',), + "QSqlField.setDefaultValue": ('PySide2.support.signature.typing.Any',), + "QSqlField.setGenerated": ('bool',), + "QSqlField.setLength": ('int',), + "QSqlField.setName": ('str',), + "QSqlField.setPrecision": ('int',), + "QSqlField.setReadOnly": ('bool',), + "QSqlField.setRequired": ('bool',), + "QSqlField.setRequiredStatus": ('PySide2.QtSql.QSqlField.RequiredStatus',), + "QSqlField.setSqlType": ('int',), + "QSqlField.setType": ('type',), + "QSqlField.setValue": ('PySide2.support.signature.typing.Any',), + "QSqlField.type": (), + "QSqlField.typeID": (), + "QSqlField.value": (), + + # class PySide2.QtSql.QSqlIndex: + "QSqlIndex.__init__": [('PySide2.QtSql.QSqlIndex',), ('str', 'str')], + "QSqlIndex.__copy__": (), + "QSqlIndex.append": [('PySide2.QtSql.QSqlField',), ('PySide2.QtSql.QSqlField', 'bool')], + "QSqlIndex.cursorName": (), + "QSqlIndex.isDescending": ('int',), + "QSqlIndex.name": (), + "QSqlIndex.setCursorName": ('str',), + "QSqlIndex.setDescending": ('int', 'bool'), + "QSqlIndex.setName": ('str',), + + # class PySide2.QtSql.QSqlQuery: + "QSqlQuery.__init__": [('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlQuery',), ('PySide2.QtSql.QSqlResult',), ('str', 'PySide2.QtSql.QSqlDatabase')], + "QSqlQuery.__copy__": (), + "QSqlQuery.addBindValue": ('PySide2.support.signature.typing.Any', 'ParamType'), + "QSqlQuery.at": (), + "QSqlQuery.bindValue": [('int', 'PySide2.support.signature.typing.Any', 'ParamType'), ('str', 'PySide2.support.signature.typing.Any', 'ParamType')], + "QSqlQuery.boundValue": [('int',), ('str',)], + "QSqlQuery.boundValues": (), + "QSqlQuery.clear": (), + "QSqlQuery.driver": (), + "QSqlQuery.execBatch": ('PySide2.QtSql.QSqlQuery.BatchExecutionMode',), + "QSqlQuery.exec_": [(), ('str',)], + "QSqlQuery.executedQuery": (), + "QSqlQuery.finish": (), + "QSqlQuery.first": (), + "QSqlQuery.isActive": (), + "QSqlQuery.isForwardOnly": (), + "QSqlQuery.isNull": [('int',), ('str',)], + "QSqlQuery.isSelect": (), + "QSqlQuery.isValid": (), + "QSqlQuery.last": (), + "QSqlQuery.lastError": (), + "QSqlQuery.lastInsertId": (), + "QSqlQuery.lastQuery": (), + "QSqlQuery.next": (), + "QSqlQuery.nextResult": (), + "QSqlQuery.numRowsAffected": (), + "QSqlQuery.numericalPrecisionPolicy": (), + "QSqlQuery.prepare": ('str',), + "QSqlQuery.previous": (), + "QSqlQuery.record": (), + "QSqlQuery.result": (), + "QSqlQuery.seek": ('int', 'bool'), + "QSqlQuery.setForwardOnly": ('bool',), + "QSqlQuery.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlQuery.size": (), + "QSqlQuery.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlQueryModel: + "QSqlQueryModel.__init__": ('PySide2.QtCore.QObject',), + "QSqlQueryModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginResetModel": (), + "QSqlQueryModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.clear": (), + "QSqlQueryModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlQueryModel.endInsertColumns": (), + "QSqlQueryModel.endInsertRows": (), + "QSqlQueryModel.endRemoveColumns": (), + "QSqlQueryModel.endRemoveRows": (), + "QSqlQueryModel.endResetModel": (), + "QSqlQueryModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlQueryModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.lastError": (), + "QSqlQueryModel.query": (), + "QSqlQueryModel.queryChange": (), + "QSqlQueryModel.record": [(), ('int',)], + "QSqlQueryModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QSqlQueryModel.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlQueryModel.setQuery": [('PySide2.QtSql.QSqlQuery',), ('str', 'PySide2.QtSql.QSqlDatabase')], + + # class PySide2.QtSql.QSqlRecord: + "QSqlRecord.__init__": [(), ('PySide2.QtSql.QSqlRecord',)], + "QSqlRecord.__copy__": (), + "QSqlRecord.append": ('PySide2.QtSql.QSqlField',), + "QSqlRecord.clear": (), + "QSqlRecord.clearValues": (), + "QSqlRecord.contains": ('str',), + "QSqlRecord.count": (), + "QSqlRecord.field": [('int',), ('str',)], + "QSqlRecord.fieldName": ('int',), + "QSqlRecord.indexOf": ('str',), + "QSqlRecord.insert": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.isEmpty": (), + "QSqlRecord.isGenerated": [('int',), ('str',)], + "QSqlRecord.isNull": [('int',), ('str',)], + "QSqlRecord.keyValues": ('PySide2.QtSql.QSqlRecord',), + "QSqlRecord.remove": ('int',), + "QSqlRecord.replace": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.setGenerated": [('int', 'bool'), ('str', 'bool')], + "QSqlRecord.setNull": [('int',), ('str',)], + "QSqlRecord.setValue": [('int', 'PySide2.support.signature.typing.Any'), ('str', 'PySide2.support.signature.typing.Any')], + "QSqlRecord.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlRelation: + "QSqlRelation.__init__": [(), ('PySide2.QtSql.QSqlRelation',), ('str', 'str', 'str')], + "QSqlRelation.__copy__": (), + "QSqlRelation.displayColumn": (), + "QSqlRelation.indexColumn": (), + "QSqlRelation.isValid": (), + "QSqlRelation.tableName": (), + + # class PySide2.QtSql.QSqlRelationalDelegate: + "QSqlRelationalDelegate.__init__": ('PySide2.QtCore.QObject',), + "QSqlRelationalDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtSql.QSqlRelationalTableModel: + "QSqlRelationalTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlRelationalTableModel.clear": (), + "QSqlRelationalTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlRelationalTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlRelationalTableModel.orderByClause": (), + "QSqlRelationalTableModel.relation": ('int',), + "QSqlRelationalTableModel.relationModel": ('int',), + "QSqlRelationalTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalTableModel.revertRow": ('int',), + "QSqlRelationalTableModel.select": (), + "QSqlRelationalTableModel.selectStatement": (), + "QSqlRelationalTableModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QSqlRelationalTableModel.setJoinMode": ('PySide2.QtSql.QSqlRelationalTableModel.JoinMode',), + "QSqlRelationalTableModel.setRelation": ('int', 'PySide2.QtSql.QSqlRelation'), + "QSqlRelationalTableModel.setTable": ('str',), + "QSqlRelationalTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + + # class PySide2.QtSql.QSqlResult: + "QSqlResult.__init__": ('PySide2.QtSql.QSqlDriver',), + "QSqlResult.addBindValue": ('PySide2.support.signature.typing.Any', 'ParamType'), + "QSqlResult.at": (), + "QSqlResult.bindValue": [('int', 'PySide2.support.signature.typing.Any', 'ParamType'), ('str', 'PySide2.support.signature.typing.Any', 'ParamType')], + "QSqlResult.bindValueType": [('int',), ('str',)], + "QSqlResult.bindingSyntax": (), + "QSqlResult.boundValue": [('int',), ('str',)], + "QSqlResult.boundValueCount": (), + "QSqlResult.boundValueName": ('int',), + "QSqlResult.boundValues": (), + "QSqlResult.clear": (), + "QSqlResult.data": ('int',), + "QSqlResult.detachFromResultSet": (), + "QSqlResult.driver": (), + "QSqlResult.execBatch": ('bool',), + "QSqlResult.exec_": (), + "QSqlResult.executedQuery": (), + "QSqlResult.fetch": ('int',), + "QSqlResult.fetchFirst": (), + "QSqlResult.fetchLast": (), + "QSqlResult.fetchNext": (), + "QSqlResult.fetchPrevious": (), + "QSqlResult.handle": (), + "QSqlResult.hasOutValues": (), + "QSqlResult.isActive": (), + "QSqlResult.isForwardOnly": (), + "QSqlResult.isNull": ('int',), + "QSqlResult.isSelect": (), + "QSqlResult.isValid": (), + "QSqlResult.lastError": (), + "QSqlResult.lastInsertId": (), + "QSqlResult.lastQuery": (), + "QSqlResult.nextResult": (), + "QSqlResult.numRowsAffected": (), + "QSqlResult.numericalPrecisionPolicy": (), + "QSqlResult.prepare": ('str',), + "QSqlResult.record": (), + "QSqlResult.reset": ('str',), + "QSqlResult.resetBindCount": (), + "QSqlResult.savePrepare": ('str',), + "QSqlResult.setActive": ('bool',), + "QSqlResult.setAt": ('int',), + "QSqlResult.setForwardOnly": ('bool',), + "QSqlResult.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlResult.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlResult.setQuery": ('str',), + "QSqlResult.setSelect": ('bool',), + "QSqlResult.size": (), + + # class PySide2.QtSql.QSqlTableModel: + "QSqlTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlTableModel.clear": (), + "QSqlTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlTableModel.database": (), + "QSqlTableModel.deleteRowFromTable": ('int',), + "QSqlTableModel.editStrategy": (), + "QSqlTableModel.fieldIndex": ('str',), + "QSqlTableModel.filter": (), + "QSqlTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlTableModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.insertRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlTableModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.isDirty": [(), ('PySide2.QtCore.QModelIndex',)], + "QSqlTableModel.orderByClause": (), + "QSqlTableModel.primaryKey": (), + "QSqlTableModel.primaryValues": ('int',), + "QSqlTableModel.record": [(), ('int',)], + "QSqlTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.revert": (), + "QSqlTableModel.revertAll": (), + "QSqlTableModel.revertRow": ('int',), + "QSqlTableModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.select": (), + "QSqlTableModel.selectRow": ('int',), + "QSqlTableModel.selectStatement": (), + "QSqlTableModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QSqlTableModel.setEditStrategy": ('PySide2.QtSql.QSqlTableModel.EditStrategy',), + "QSqlTableModel.setFilter": ('str',), + "QSqlTableModel.setPrimaryKey": ('PySide2.QtSql.QSqlIndex',), + "QSqlTableModel.setQuery": ('PySide2.QtSql.QSqlQuery',), + "QSqlTableModel.setRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.setSort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.setTable": ('str',), + "QSqlTableModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.submit": (), + "QSqlTableModel.submitAll": (), + "QSqlTableModel.tableName": (), + "QSqlTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + }) + +# Module PySide2.QtNetwork +if "PySide2.QtNetwork" in sys.modules: + dict.update({ + + # class PySide2.QtNetwork.QAbstractNetworkCache: + "QAbstractNetworkCache.__init__": ('PySide2.QtCore.QObject',), + "QAbstractNetworkCache.cacheSize": (), + "QAbstractNetworkCache.clear": (), + "QAbstractNetworkCache.data": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.insert": ('PySide2.QtCore.QIODevice',), + "QAbstractNetworkCache.metaData": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QAbstractNetworkCache.remove": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QAbstractSocket: + "QAbstractSocket.__init__": ('PySide2.QtNetwork.QAbstractSocket.SocketType', 'PySide2.QtCore.QObject'), + "QAbstractSocket.abort": (), + "QAbstractSocket.atEnd": (), + "QAbstractSocket.bind": [('PySide2.QtNetwork.QHostAddress', 'int', 'BindMode'), ('int', 'BindMode')], + "QAbstractSocket.bytesAvailable": (), + "QAbstractSocket.bytesToWrite": (), + "QAbstractSocket.canReadLine": (), + "QAbstractSocket.close": (), + "QAbstractSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'OpenMode'), ('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QAbstractSocket.disconnectFromHost": (), + "QAbstractSocket.flush": (), + "QAbstractSocket.isSequential": (), + "QAbstractSocket.isValid": (), + "QAbstractSocket.localAddress": (), + "QAbstractSocket.localPort": (), + "QAbstractSocket.pauseMode": (), + "QAbstractSocket.peerAddress": (), + "QAbstractSocket.peerName": (), + "QAbstractSocket.peerPort": (), + "QAbstractSocket.proxy": (), + "QAbstractSocket.readBufferSize": (), + "QAbstractSocket.readData": ('str', 'int'), + "QAbstractSocket.readLineData": ('str', 'int'), + "QAbstractSocket.resume": (), + "QAbstractSocket.setLocalAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setLocalPort": ('int',), + "QAbstractSocket.setPauseMode": ('PauseModes',), + "QAbstractSocket.setPeerAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setPeerName": ('str',), + "QAbstractSocket.setPeerPort": ('int',), + "QAbstractSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QAbstractSocket.setReadBufferSize": ('int',), + "QAbstractSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'OpenMode'), + "QAbstractSocket.setSocketError": ('PySide2.QtNetwork.QAbstractSocket.SocketError',), + "QAbstractSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'PySide2.support.signature.typing.Any'), + "QAbstractSocket.setSocketState": ('PySide2.QtNetwork.QAbstractSocket.SocketState',), + "QAbstractSocket.socketDescriptor": (), + "QAbstractSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QAbstractSocket.socketType": (), + "QAbstractSocket.state": (), + "QAbstractSocket.waitForBytesWritten": ('int',), + "QAbstractSocket.waitForConnected": ('int',), + "QAbstractSocket.waitForDisconnected": ('int',), + "QAbstractSocket.waitForReadyRead": ('int',), + "QAbstractSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QAuthenticator: + "QAuthenticator.__init__": [(), ('PySide2.QtNetwork.QAuthenticator',)], + "QAuthenticator.__copy__": (), + "QAuthenticator.isNull": (), + "QAuthenticator.option": ('str',), + "QAuthenticator.options": (), + "QAuthenticator.password": (), + "QAuthenticator.realm": (), + "QAuthenticator.setOption": ('str', 'PySide2.support.signature.typing.Any'), + "QAuthenticator.setPassword": ('str',), + "QAuthenticator.setRealm": ('str',), + "QAuthenticator.setUser": ('str',), + "QAuthenticator.user": (), + + # class PySide2.QtNetwork.QHostAddress: + "QHostAddress.__init__": [(), ('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.__copy__": (), + "QHostAddress.clear": (), + "QHostAddress.isInSubnet": [('PySide2.QtNetwork.QHostAddress', 'int'), ('PySide2.support.signature.typing.Tuple',)], + "QHostAddress.isLoopback": (), + "QHostAddress.isMulticast": (), + "QHostAddress.isNull": (), + "QHostAddress.parseSubnet": ('str',), + "QHostAddress.protocol": (), + "QHostAddress.scopeId": (), + "QHostAddress.setAddress": [('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.setScopeId": ('str',), + "QHostAddress.swap": ('PySide2.QtNetwork.QHostAddress',), + "QHostAddress.toIPv4Address": [(), ('bool',)], + "QHostAddress.toIPv6Address": (), + "QHostAddress.toString": (), + + # class PySide2.QtNetwork.QHostInfo: + "QHostInfo.__init__": [('PySide2.QtNetwork.QHostInfo',), ('int',)], + "QHostInfo.__copy__": (), + "QHostInfo.abortHostLookup": ('int',), + "QHostInfo.addresses": (), + "QHostInfo.error": (), + "QHostInfo.errorString": (), + "QHostInfo.fromName": ('str',), + "QHostInfo.hostName": (), + "QHostInfo.localDomainName": (), + "QHostInfo.localHostName": (), + "QHostInfo.lookupId": (), + "QHostInfo.setAddresses": ('list',), + "QHostInfo.setError": ('PySide2.QtNetwork.QHostInfo.HostInfoError',), + "QHostInfo.setErrorString": ('str',), + "QHostInfo.setHostName": ('str',), + "QHostInfo.setLookupId": ('int',), + + # class PySide2.QtNetwork.QIPv6Address: + "QIPv6Address.__init__": [(), ('PySide2.QtNetwork.QIPv6Address',)], + "QIPv6Address.__copy__": (), + + # class PySide2.QtNetwork.QLocalServer: + "QLocalServer.__init__": ('PySide2.QtCore.QObject',), + "QLocalServer.close": (), + "QLocalServer.errorString": (), + "QLocalServer.fullServerName": (), + "QLocalServer.hasPendingConnections": (), + "QLocalServer.incomingConnection": ('int',), + "QLocalServer.isListening": (), + "QLocalServer.listen": [('int',), ('str',)], + "QLocalServer.maxPendingConnections": (), + "QLocalServer.nextPendingConnection": (), + "QLocalServer.removeServer": ('str',), + "QLocalServer.serverError": (), + "QLocalServer.serverName": (), + "QLocalServer.setMaxPendingConnections": ('int',), + "QLocalServer.setSocketOptions": ('SocketOptions',), + "QLocalServer.socketOptions": (), + "QLocalServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QLocalSocket: + "QLocalSocket.__init__": ('PySide2.QtCore.QObject',), + "QLocalSocket.abort": (), + "QLocalSocket.bytesAvailable": (), + "QLocalSocket.bytesToWrite": (), + "QLocalSocket.canReadLine": (), + "QLocalSocket.close": (), + "QLocalSocket.connectToServer": [('OpenMode',), ('str', 'OpenMode')], + "QLocalSocket.disconnectFromServer": (), + "QLocalSocket.flush": (), + "QLocalSocket.fullServerName": (), + "QLocalSocket.isSequential": (), + "QLocalSocket.isValid": (), + "QLocalSocket.open": ('OpenMode',), + "QLocalSocket.readBufferSize": (), + "QLocalSocket.readData": ('str', 'int'), + "QLocalSocket.serverName": (), + "QLocalSocket.setReadBufferSize": ('int',), + "QLocalSocket.setServerName": ('str',), + "QLocalSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QLocalSocket.LocalSocketState', 'OpenMode'), + "QLocalSocket.socketDescriptor": (), + "QLocalSocket.state": (), + "QLocalSocket.waitForBytesWritten": ('int',), + "QLocalSocket.waitForConnected": ('int',), + "QLocalSocket.waitForDisconnected": ('int',), + "QLocalSocket.waitForReadyRead": ('int',), + "QLocalSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkAccessManager: + "QNetworkAccessManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkAccessManager.activeConfiguration": (), + "QNetworkAccessManager.cache": (), + "QNetworkAccessManager.clearAccessCache": (), + "QNetworkAccessManager.configuration": (), + "QNetworkAccessManager.connectToHost": ('str', 'int'), + "QNetworkAccessManager.connectToHostEncrypted": ('str', 'int', 'PySide2.QtNetwork.QSslConfiguration'), + "QNetworkAccessManager.cookieJar": (), + "QNetworkAccessManager.createRequest": ('PySide2.QtNetwork.QNetworkAccessManager.Operation', 'PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), + "QNetworkAccessManager.deleteResource": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.get": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.head": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.networkAccessible": (), + "QNetworkAccessManager.post": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice')], + "QNetworkAccessManager.proxy": (), + "QNetworkAccessManager.proxyFactory": (), + "QNetworkAccessManager.put": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice')], + "QNetworkAccessManager.sendCustomRequest": ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QIODevice'), + "QNetworkAccessManager.setCache": ('PySide2.QtNetwork.QAbstractNetworkCache',), + "QNetworkAccessManager.setConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkAccessManager.setCookieJar": ('PySide2.QtNetwork.QNetworkCookieJar',), + "QNetworkAccessManager.setNetworkAccessible": ('PySide2.QtNetwork.QNetworkAccessManager.NetworkAccessibility',), + "QNetworkAccessManager.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkAccessManager.setProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkAccessManager.supportedSchemes": (), + "QNetworkAccessManager.supportedSchemesImplementation": (), + + # class PySide2.QtNetwork.QNetworkAddressEntry: + "QNetworkAddressEntry.__init__": [(), ('PySide2.QtNetwork.QNetworkAddressEntry',)], + "QNetworkAddressEntry.__copy__": (), + "QNetworkAddressEntry.broadcast": (), + "QNetworkAddressEntry.ip": (), + "QNetworkAddressEntry.netmask": (), + "QNetworkAddressEntry.prefixLength": (), + "QNetworkAddressEntry.setBroadcast": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setIp": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setNetmask": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setPrefixLength": ('int',), + "QNetworkAddressEntry.swap": ('PySide2.QtNetwork.QNetworkAddressEntry',), + + # class PySide2.QtNetwork.QNetworkCacheMetaData: + "QNetworkCacheMetaData.__init__": [(), ('PySide2.QtNetwork.QNetworkCacheMetaData',)], + "QNetworkCacheMetaData.__copy__": (), + "QNetworkCacheMetaData.attributes": (), + "QNetworkCacheMetaData.expirationDate": (), + "QNetworkCacheMetaData.isValid": (), + "QNetworkCacheMetaData.lastModified": (), + "QNetworkCacheMetaData.rawHeaders": (), + "QNetworkCacheMetaData.saveToDisk": (), + "QNetworkCacheMetaData.setAttributes": ('dict',), + "QNetworkCacheMetaData.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setLastModified": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setRawHeaders": ('list',), + "QNetworkCacheMetaData.setSaveToDisk": ('bool',), + "QNetworkCacheMetaData.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCacheMetaData.swap": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkCacheMetaData.url": (), + + # class PySide2.QtNetwork.QNetworkConfiguration: + "QNetworkConfiguration.__init__": [(), ('PySide2.QtNetwork.QNetworkConfiguration',)], + "QNetworkConfiguration.__copy__": (), + "QNetworkConfiguration.bearerType": (), + "QNetworkConfiguration.bearerTypeFamily": (), + "QNetworkConfiguration.bearerTypeName": (), + "QNetworkConfiguration.children": (), + "QNetworkConfiguration.identifier": (), + "QNetworkConfiguration.isRoamingAvailable": (), + "QNetworkConfiguration.isValid": (), + "QNetworkConfiguration.name": (), + "QNetworkConfiguration.purpose": (), + "QNetworkConfiguration.state": (), + "QNetworkConfiguration.swap": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkConfiguration.type": (), + + # class PySide2.QtNetwork.QNetworkConfigurationManager: + "QNetworkConfigurationManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkConfigurationManager.allConfigurations": ('StateFlags',), + "QNetworkConfigurationManager.capabilities": (), + "QNetworkConfigurationManager.configurationFromIdentifier": ('str',), + "QNetworkConfigurationManager.defaultConfiguration": (), + "QNetworkConfigurationManager.isOnline": (), + "QNetworkConfigurationManager.updateConfigurations": (), + + # class PySide2.QtNetwork.QNetworkCookie: + "QNetworkCookie.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkCookie',)], + "QNetworkCookie.__copy__": (), + "QNetworkCookie.domain": (), + "QNetworkCookie.expirationDate": (), + "QNetworkCookie.hasSameIdentifier": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.isHttpOnly": (), + "QNetworkCookie.isSecure": (), + "QNetworkCookie.isSessionCookie": (), + "QNetworkCookie.name": (), + "QNetworkCookie.normalize": ('PySide2.QtCore.QUrl',), + "QNetworkCookie.parseCookies": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.path": (), + "QNetworkCookie.setDomain": ('str',), + "QNetworkCookie.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCookie.setHttpOnly": ('bool',), + "QNetworkCookie.setName": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.setPath": ('str',), + "QNetworkCookie.setSecure": ('bool',), + "QNetworkCookie.setValue": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.swap": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.toRawForm": ('PySide2.QtNetwork.QNetworkCookie.RawForm',), + "QNetworkCookie.value": (), + + # class PySide2.QtNetwork.QNetworkCookieJar: + "QNetworkCookieJar.__init__": ('PySide2.QtCore.QObject',), + "QNetworkCookieJar.allCookies": (), + "QNetworkCookieJar.cookiesForUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCookieJar.deleteCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.insertCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.setAllCookies": ('list',), + "QNetworkCookieJar.setCookiesFromUrl": ('list', 'PySide2.QtCore.QUrl'), + "QNetworkCookieJar.updateCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.validateCookie": ('PySide2.QtNetwork.QNetworkCookie', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtNetwork.QNetworkDiskCache: + "QNetworkDiskCache.__init__": ('PySide2.QtCore.QObject',), + "QNetworkDiskCache.cacheDirectory": (), + "QNetworkDiskCache.cacheSize": (), + "QNetworkDiskCache.clear": (), + "QNetworkDiskCache.data": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.expire": (), + "QNetworkDiskCache.fileMetaData": ('str',), + "QNetworkDiskCache.insert": ('PySide2.QtCore.QIODevice',), + "QNetworkDiskCache.maximumCacheSize": (), + "QNetworkDiskCache.metaData": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkDiskCache.remove": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.setCacheDirectory": ('str',), + "QNetworkDiskCache.setMaximumCacheSize": ('int',), + "QNetworkDiskCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QNetworkInterface: + "QNetworkInterface.__init__": [(), ('PySide2.QtNetwork.QNetworkInterface',)], + "QNetworkInterface.__copy__": (), + "QNetworkInterface.addressEntries": (), + "QNetworkInterface.allAddresses": (), + "QNetworkInterface.allInterfaces": (), + "QNetworkInterface.flags": (), + "QNetworkInterface.hardwareAddress": (), + "QNetworkInterface.humanReadableName": (), + "QNetworkInterface.index": (), + "QNetworkInterface.interfaceFromIndex": ('int',), + "QNetworkInterface.interfaceFromName": ('str',), + "QNetworkInterface.isValid": (), + "QNetworkInterface.name": (), + "QNetworkInterface.swap": ('PySide2.QtNetwork.QNetworkInterface',), + + # class PySide2.QtNetwork.QNetworkProxy: + "QNetworkProxy.__init__": [(), ('PySide2.QtNetwork.QNetworkProxy',), ('PySide2.QtNetwork.QNetworkProxy.ProxyType', 'str', 'int', 'str', 'str')], + "QNetworkProxy.__copy__": (), + "QNetworkProxy.applicationProxy": (), + "QNetworkProxy.capabilities": (), + "QNetworkProxy.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkProxy.hostName": (), + "QNetworkProxy.isCachingProxy": (), + "QNetworkProxy.isTransparentProxy": (), + "QNetworkProxy.password": (), + "QNetworkProxy.port": (), + "QNetworkProxy.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.rawHeaderList": (), + "QNetworkProxy.setApplicationProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.setCapabilities": ('Capabilities',), + "QNetworkProxy.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'PySide2.support.signature.typing.Any'), + "QNetworkProxy.setHostName": ('str',), + "QNetworkProxy.setPassword": ('str',), + "QNetworkProxy.setPort": ('int',), + "QNetworkProxy.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkProxy.setType": ('PySide2.QtNetwork.QNetworkProxy.ProxyType',), + "QNetworkProxy.setUser": ('str',), + "QNetworkProxy.swap": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.type": (), + "QNetworkProxy.user": (), + + # class PySide2.QtNetwork.QNetworkProxyFactory: + "QNetworkProxyFactory.__init__": (), + "QNetworkProxyFactory.proxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.queryProxy": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.setApplicationProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkProxyFactory.setUseSystemConfiguration": ('bool',), + "QNetworkProxyFactory.systemProxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + + # class PySide2.QtNetwork.QNetworkProxyQuery: + "QNetworkProxyQuery.__init__": [(), ('PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkProxyQuery',), ('int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType')], + "QNetworkProxyQuery.__copy__": (), + "QNetworkProxyQuery.localPort": (), + "QNetworkProxyQuery.networkConfiguration": (), + "QNetworkProxyQuery.peerHostName": (), + "QNetworkProxyQuery.peerPort": (), + "QNetworkProxyQuery.protocolTag": (), + "QNetworkProxyQuery.queryType": (), + "QNetworkProxyQuery.setLocalPort": ('int',), + "QNetworkProxyQuery.setNetworkConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkProxyQuery.setPeerHostName": ('str',), + "QNetworkProxyQuery.setPeerPort": ('int',), + "QNetworkProxyQuery.setProtocolTag": ('str',), + "QNetworkProxyQuery.setQueryType": ('PySide2.QtNetwork.QNetworkProxyQuery.QueryType',), + "QNetworkProxyQuery.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkProxyQuery.swap": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyQuery.url": (), + + # class PySide2.QtNetwork.QNetworkReply: + "QNetworkReply.__init__": ('PySide2.QtCore.QObject',), + "QNetworkReply.abort": (), + "QNetworkReply.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute',), + "QNetworkReply.close": (), + "QNetworkReply.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkReply.ignoreSslErrors": [(), ('list',)], + "QNetworkReply.ignoreSslErrorsImplementation": ('list',), + "QNetworkReply.isFinished": (), + "QNetworkReply.isRunning": (), + "QNetworkReply.isSequential": (), + "QNetworkReply.manager": (), + "QNetworkReply.operation": (), + "QNetworkReply.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.rawHeaderList": (), + "QNetworkReply.rawHeaderPairs": (), + "QNetworkReply.readBufferSize": (), + "QNetworkReply.request": (), + "QNetworkReply.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'PySide2.support.signature.typing.Any'), + "QNetworkReply.setError": ('PySide2.QtNetwork.QNetworkReply.NetworkError', 'str'), + "QNetworkReply.setFinished": ('bool',), + "QNetworkReply.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'PySide2.support.signature.typing.Any'), + "QNetworkReply.setOperation": ('PySide2.QtNetwork.QNetworkAccessManager.Operation',), + "QNetworkReply.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkReply.setReadBufferSize": ('int',), + "QNetworkReply.setRequest": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkReply.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setSslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkReply.sslConfiguration": (), + "QNetworkReply.sslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.url": (), + "QNetworkReply.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkRequest: + "QNetworkRequest.__init__": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QNetworkRequest.__copy__": (), + "QNetworkRequest.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'PySide2.support.signature.typing.Any'), + "QNetworkRequest.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkRequest.maximumRedirectsAllowed": (), + "QNetworkRequest.originatingObject": (), + "QNetworkRequest.priority": (), + "QNetworkRequest.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.rawHeaderList": (), + "QNetworkRequest.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'PySide2.support.signature.typing.Any'), + "QNetworkRequest.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'PySide2.support.signature.typing.Any'), + "QNetworkRequest.setMaximumRedirectsAllowed": ('int',), + "QNetworkRequest.setOriginatingObject": ('PySide2.QtCore.QObject',), + "QNetworkRequest.setPriority": ('PySide2.QtNetwork.QNetworkRequest.Priority',), + "QNetworkRequest.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkRequest.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkRequest.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkRequest.sslConfiguration": (), + "QNetworkRequest.swap": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkRequest.url": (), + + # class PySide2.QtNetwork.QNetworkSession: + "QNetworkSession.__init__": ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QObject'), + "QNetworkSession.accept": (), + "QNetworkSession.activeTime": (), + "QNetworkSession.bytesReceived": (), + "QNetworkSession.bytesWritten": (), + "QNetworkSession.close": (), + "QNetworkSession.configuration": (), + "QNetworkSession.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.errorString": (), + "QNetworkSession.ignore": (), + "QNetworkSession.interface": (), + "QNetworkSession.isOpen": (), + "QNetworkSession.migrate": (), + "QNetworkSession.open": (), + "QNetworkSession.reject": (), + "QNetworkSession.sessionProperty": ('str',), + "QNetworkSession.setSessionProperty": ('str', 'PySide2.support.signature.typing.Any'), + "QNetworkSession.state": (), + "QNetworkSession.stop": (), + "QNetworkSession.usagePolicies": (), + "QNetworkSession.waitForOpened": ('int',), + + # class PySide2.QtNetwork.QSsl: + + # class PySide2.QtNetwork.QSslCertificate: + "QSslCertificate.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtNetwork.QSslCertificate',)], + "QSslCertificate.__copy__": (), + "QSslCertificate.clear": (), + "QSslCertificate.digest": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QSslCertificate.effectiveDate": (), + "QSslCertificate.expiryDate": (), + "QSslCertificate.fromData": ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromDevice": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromPath": ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax'), + "QSslCertificate.handle": (), + "QSslCertificate.importPkcs12": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSslKey', 'PySide2.QtNetwork.QSslCertificate', 'list', 'PySide2.QtCore.QByteArray'), + "QSslCertificate.isBlacklisted": (), + "QSslCertificate.isNull": (), + "QSslCertificate.isSelfSigned": (), + "QSslCertificate.issuerInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.issuerInfoAttributes": (), + "QSslCertificate.publicKey": (), + "QSslCertificate.serialNumber": (), + "QSslCertificate.subjectAlternativeNames": (), + "QSslCertificate.subjectInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.subjectInfoAttributes": (), + "QSslCertificate.swap": ('PySide2.QtNetwork.QSslCertificate',), + "QSslCertificate.toDer": (), + "QSslCertificate.toPem": (), + "QSslCertificate.toText": (), + "QSslCertificate.verify": ('list', 'str'), + "QSslCertificate.version": (), + + # class PySide2.QtNetwork.QSslCipher: + "QSslCipher.__init__": [(), ('PySide2.QtNetwork.QSslCipher',), ('str',), ('str', 'PySide2.QtNetwork.QSsl.SslProtocol')], + "QSslCipher.__copy__": (), + "QSslCipher.authenticationMethod": (), + "QSslCipher.encryptionMethod": (), + "QSslCipher.isNull": (), + "QSslCipher.keyExchangeMethod": (), + "QSslCipher.name": (), + "QSslCipher.protocol": (), + "QSslCipher.protocolString": (), + "QSslCipher.supportedBits": (), + "QSslCipher.swap": ('PySide2.QtNetwork.QSslCipher',), + "QSslCipher.usedBits": (), + + # class PySide2.QtNetwork.QSslConfiguration: + "QSslConfiguration.__init__": [(), ('PySide2.QtNetwork.QSslConfiguration',)], + "QSslConfiguration.__copy__": (), + "QSslConfiguration.allowedNextProtocols": (), + "QSslConfiguration.caCertificates": (), + "QSslConfiguration.ciphers": (), + "QSslConfiguration.defaultConfiguration": (), + "QSslConfiguration.isNull": (), + "QSslConfiguration.localCertificate": (), + "QSslConfiguration.localCertificateChain": (), + "QSslConfiguration.nextNegotiatedProtocol": (), + "QSslConfiguration.nextProtocolNegotiationStatus": (), + "QSslConfiguration.peerCertificate": (), + "QSslConfiguration.peerCertificateChain": (), + "QSslConfiguration.peerVerifyDepth": (), + "QSslConfiguration.peerVerifyMode": (), + "QSslConfiguration.privateKey": (), + "QSslConfiguration.protocol": (), + "QSslConfiguration.sessionCipher": (), + "QSslConfiguration.sessionProtocol": (), + "QSslConfiguration.sessionTicket": (), + "QSslConfiguration.sessionTicketLifeTimeHint": (), + "QSslConfiguration.setAllowedNextProtocols": ('list',), + "QSslConfiguration.setCaCertificates": ('list',), + "QSslConfiguration.setCiphers": ('list',), + "QSslConfiguration.setDefaultConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.setLocalCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslConfiguration.setLocalCertificateChain": ('list',), + "QSslConfiguration.setPeerVerifyDepth": ('int',), + "QSslConfiguration.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslConfiguration.setPrivateKey": ('PySide2.QtNetwork.QSslKey',), + "QSslConfiguration.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslConfiguration.setSessionTicket": ('PySide2.QtCore.QByteArray',), + "QSslConfiguration.setSslOption": ('PySide2.QtNetwork.QSsl.SslOption', 'bool'), + "QSslConfiguration.supportedCiphers": (), + "QSslConfiguration.swap": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.systemCaCertificates": (), + "QSslConfiguration.testSslOption": ('PySide2.QtNetwork.QSsl.SslOption',), + + # class PySide2.QtNetwork.QSslError: + "QSslError.__init__": [(), ('PySide2.QtNetwork.QSslError',), ('PySide2.QtNetwork.QSslError.SslError',), ('PySide2.QtNetwork.QSslError.SslError', 'PySide2.QtNetwork.QSslCertificate')], + "QSslError.__copy__": (), + "QSslError.certificate": (), + "QSslError.error": (), + "QSslError.errorString": (), + "QSslError.swap": ('PySide2.QtNetwork.QSslError',), + + # class PySide2.QtNetwork.QSslKey: + "QSslKey.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QSslKey',), ('int', 'PySide2.QtNetwork.QSsl.KeyType')], + "QSslKey.__copy__": (), + "QSslKey.algorithm": (), + "QSslKey.clear": (), + "QSslKey.handle": (), + "QSslKey.isNull": (), + "QSslKey.length": (), + "QSslKey.swap": ('PySide2.QtNetwork.QSslKey',), + "QSslKey.toDer": ('PySide2.QtCore.QByteArray',), + "QSslKey.toPem": ('PySide2.QtCore.QByteArray',), + "QSslKey.type": (), + + # class PySide2.QtNetwork.QSslSocket: + "QSslSocket.__init__": ('PySide2.QtCore.QObject',), + "QSslSocket.abort": (), + "QSslSocket.addCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.addDefaultCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addDefaultCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.atEnd": (), + "QSslSocket.bytesAvailable": (), + "QSslSocket.bytesToWrite": (), + "QSslSocket.caCertificates": (), + "QSslSocket.canReadLine": (), + "QSslSocket.ciphers": (), + "QSslSocket.close": (), + "QSslSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'OpenMode'), ('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.connectToHostEncrypted": [('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol'), ('str', 'int', 'str', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.defaultCaCertificates": (), + "QSslSocket.defaultCiphers": (), + "QSslSocket.disconnectFromHost": (), + "QSslSocket.encryptedBytesAvailable": (), + "QSslSocket.encryptedBytesToWrite": (), + "QSslSocket.flush": (), + "QSslSocket.ignoreSslErrors": [(), ('list',)], + "QSslSocket.isEncrypted": (), + "QSslSocket.localCertificate": (), + "QSslSocket.localCertificateChain": (), + "QSslSocket.mode": (), + "QSslSocket.peerCertificate": (), + "QSslSocket.peerCertificateChain": (), + "QSslSocket.peerVerifyDepth": (), + "QSslSocket.peerVerifyMode": (), + "QSslSocket.peerVerifyName": (), + "QSslSocket.privateKey": (), + "QSslSocket.protocol": (), + "QSslSocket.readData": ('str', 'int'), + "QSslSocket.resume": (), + "QSslSocket.sessionCipher": (), + "QSslSocket.sessionProtocol": (), + "QSslSocket.setCaCertificates": ('list',), + "QSslSocket.setCiphers": [('list',), ('str',)], + "QSslSocket.setDefaultCaCertificates": ('list',), + "QSslSocket.setDefaultCiphers": ('list',), + "QSslSocket.setLocalCertificate": [('PySide2.QtNetwork.QSslCertificate',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat')], + "QSslSocket.setLocalCertificateChain": ('list',), + "QSslSocket.setPeerVerifyDepth": ('int',), + "QSslSocket.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslSocket.setPeerVerifyName": ('str',), + "QSslSocket.setPrivateKey": [('PySide2.QtNetwork.QSslKey',), ('str', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QByteArray')], + "QSslSocket.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslSocket.setReadBufferSize": ('int',), + "QSslSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'OpenMode'), + "QSslSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'PySide2.support.signature.typing.Any'), + "QSslSocket.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QSslSocket.sslConfiguration": (), + "QSslSocket.sslLibraryBuildVersionNumber": (), + "QSslSocket.sslLibraryBuildVersionString": (), + "QSslSocket.sslLibraryVersionNumber": (), + "QSslSocket.sslLibraryVersionString": (), + "QSslSocket.startClientEncryption": (), + "QSslSocket.startServerEncryption": (), + "QSslSocket.supportedCiphers": (), + "QSslSocket.supportsSsl": (), + "QSslSocket.systemCaCertificates": (), + "QSslSocket.waitForBytesWritten": ('int',), + "QSslSocket.waitForConnected": ('int',), + "QSslSocket.waitForDisconnected": ('int',), + "QSslSocket.waitForEncrypted": ('int',), + "QSslSocket.waitForReadyRead": ('int',), + "QSslSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QTcpServer: + "QTcpServer.__init__": ('PySide2.QtCore.QObject',), + "QTcpServer.addPendingConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QTcpServer.close": (), + "QTcpServer.errorString": (), + "QTcpServer.hasPendingConnections": (), + "QTcpServer.incomingConnection": ('int',), + "QTcpServer.isListening": (), + "QTcpServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QTcpServer.maxPendingConnections": (), + "QTcpServer.nextPendingConnection": (), + "QTcpServer.pauseAccepting": (), + "QTcpServer.proxy": (), + "QTcpServer.resumeAccepting": (), + "QTcpServer.serverAddress": (), + "QTcpServer.serverError": (), + "QTcpServer.serverPort": (), + "QTcpServer.setMaxPendingConnections": ('int',), + "QTcpServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QTcpServer.setSocketDescriptor": ('int',), + "QTcpServer.socketDescriptor": (), + "QTcpServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QTcpSocket: + "QTcpSocket.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtNetwork.QUdpSocket: + "QUdpSocket.__init__": ('PySide2.QtCore.QObject',), + "QUdpSocket.hasPendingDatagrams": (), + "QUdpSocket.joinMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.leaveMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.multicastInterface": (), + "QUdpSocket.pendingDatagramSize": (), + "QUdpSocket.readDatagram": ('str', 'int', 'PySide2.QtNetwork.QHostAddress', 'int'), + "QUdpSocket.setMulticastInterface": ('PySide2.QtNetwork.QNetworkInterface',), + "QUdpSocket.writeDatagram": ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHostAddress', 'int'), + }) + +# Module PySide2.QtTest +if "PySide2.QtTest" in sys.modules: + dict.update({ + + # class PySide2.QtTest.QTest: + "QTest.waitForEvents": (), + "QTest.addColumnInternal": ('int', 'str'), + "QTest.asciiToKey": ('PySide2.support.signature.typing.Union[str, int]',), + "QTest.compare_ptr_helper": ('int', 'int', 'str', 'str', 'str', 'int'), + "QTest.compare_string_helper": ('str', 'str', 'str', 'str', 'str', 'int'), + "QTest.currentAppName": (), + "QTest.currentDataTag": (), + "QTest.currentTestFailed": (), + "QTest.currentTestFunction": (), + "QTest.ignoreMessage": ('PySide2.QtCore.QtMsgType', 'str'), + "QTest.keyClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyClicks": ('PySide2.QtWidgets.QWidget', 'str', 'KeyboardModifiers', 'int'), + "QTest.keyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyPress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyToAscii": ('PySide2.QtCore.Qt.Key',), + "QTest.mouseClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseDClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseEvent": [('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseMove": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mousePress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.qElementData": ('str', 'int'), + "QTest.qExpectFail": ('str', 'str', 'PySide2.QtTest.QTest.TestFailMode', 'str', 'int'), + "QTest.qFindTestData": ['int', 'str', 'str', 'str'], + "QTest.qGlobalData": ('str', 'int'), + "QTest.qSkip": ('str', 'str', 'int'), + "QTest.qWaitForWindowActive": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.qWaitForWindowExposed": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.sendKeyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'str', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'str', 'KeyboardModifiers', 'int')], + "QTest.setBenchmarkResult": ('float', 'PySide2.QtTest.QTest.QBenchmarkMetric'), + "QTest.setMainSourcePath": ('str', 'str'), + "QTest.simulateEvent": [('PySide2.QtGui.QWindow', 'bool', 'int', 'KeyboardModifiers', 'str', 'bool', 'int'), ('PySide2.QtWidgets.QWidget', 'bool', 'int', 'KeyboardModifiers', 'str', 'bool', 'int')], + "QTest.testObject": (), + "QTest.toPrettyCString": ('str', 'int'), + "QTest.touchEvent": [('PySide2.QtGui.QWindow', 'PySide2.QtGui.QTouchDevice', 'bool'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QTouchDevice', 'bool')], + }) + +# Module PySide2.QtConcurrent +if "PySide2.QtConcurrent" in sys.modules: + dict.update({ + + # class PySide2.QtConcurrent.QtConcurrent: + }) + +# Module PySide2.QtMacExtras +if "PySide2.QtMacExtras" in sys.modules: + dict.update({ + + # class PySide2.QtMacExtras.QMacPasteboardMime: + "QMacPasteboardMime.__init__": ('PySide2.support.signature.typing.Union[str, int]',), + "QMacPasteboardMime.canConvert": ('str', 'str'), + "QMacPasteboardMime.convertFromMime": ('str', 'PySide2.support.signature.typing.Any', 'str'), + "QMacPasteboardMime.convertToMime": ('str', 'list', 'str'), + "QMacPasteboardMime.convertorName": (), + "QMacPasteboardMime.count": ('PySide2.QtCore.QMimeData',), + "QMacPasteboardMime.flavorFor": ('str',), + "QMacPasteboardMime.mimeFor": ('str',), + + # class PySide2.QtMacExtras.QMacToolBar: + "QMacToolBar.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QMacToolBar.addAllowedItem": ('PySide2.QtGui.QIcon', 'str'), + "QMacToolBar.addAllowedStandardItem": ('PySide2.QtMacExtras.QMacToolBarItem.StandardItem',), + "QMacToolBar.addItem": ('PySide2.QtGui.QIcon', 'str'), + "QMacToolBar.addSeparator": (), + "QMacToolBar.addStandardItem": ('PySide2.QtMacExtras.QMacToolBarItem.StandardItem',), + "QMacToolBar.allowedItems": (), + "QMacToolBar.attachToWindow": ('PySide2.QtGui.QWindow',), + "QMacToolBar.detachFromWindow": (), + "QMacToolBar.items": (), + "QMacToolBar.setAllowedItems": ('list',), + "QMacToolBar.setItems": ('list',), + + # class PySide2.QtMacExtras.QMacToolBarItem: + "QMacToolBarItem.__init__": ('PySide2.QtCore.QObject',), + "QMacToolBarItem.icon": (), + "QMacToolBarItem.selectable": (), + "QMacToolBarItem.setIcon": ('PySide2.QtGui.QIcon',), + "QMacToolBarItem.setSelectable": ('bool',), + "QMacToolBarItem.setStandardItem": ('PySide2.QtMacExtras.QMacToolBarItem.StandardItem',), + "QMacToolBarItem.setText": ('str',), + "QMacToolBarItem.standardItem": (), + "QMacToolBarItem.text": (), + }) + +# Module PySide2.QtXml +if "PySide2.QtXml" in sys.modules: + dict.update({ + + # class PySide2.QtXml.QDomAttr: + "QDomAttr.__init__": [(), ('PySide2.QtXml.QDomAttr',)], + "QDomAttr.__copy__": (), + "QDomAttr.name": (), + "QDomAttr.nodeType": (), + "QDomAttr.ownerElement": (), + "QDomAttr.setValue": ('str',), + "QDomAttr.specified": (), + "QDomAttr.value": (), + + # class PySide2.QtXml.QDomCDATASection: + "QDomCDATASection.__init__": [(), ('PySide2.QtXml.QDomCDATASection',)], + "QDomCDATASection.__copy__": (), + "QDomCDATASection.nodeType": (), + + # class PySide2.QtXml.QDomCharacterData: + "QDomCharacterData.__init__": [(), ('PySide2.QtXml.QDomCharacterData',)], + "QDomCharacterData.__copy__": (), + "QDomCharacterData.appendData": ('str',), + "QDomCharacterData.data": (), + "QDomCharacterData.deleteData": ('int', 'int'), + "QDomCharacterData.insertData": ('int', 'str'), + "QDomCharacterData.length": (), + "QDomCharacterData.nodeType": (), + "QDomCharacterData.replaceData": ('int', 'int', 'str'), + "QDomCharacterData.setData": ('str',), + "QDomCharacterData.substringData": ('int', 'int'), + + # class PySide2.QtXml.QDomComment: + "QDomComment.__init__": [(), ('PySide2.QtXml.QDomComment',)], + "QDomComment.__copy__": (), + "QDomComment.nodeType": (), + + # class PySide2.QtXml.QDomDocument: + "QDomDocument.__init__": [(), ('PySide2.QtXml.QDomDocument',), ('PySide2.QtXml.QDomDocumentType',), ('str',)], + "QDomDocument.__copy__": (), + "QDomDocument.createAttribute": ('str',), + "QDomDocument.createAttributeNS": ('str', 'str'), + "QDomDocument.createCDATASection": ('str',), + "QDomDocument.createComment": ('str',), + "QDomDocument.createDocumentFragment": (), + "QDomDocument.createElement": ('str',), + "QDomDocument.createElementNS": ('str', 'str'), + "QDomDocument.createEntityReference": ('str',), + "QDomDocument.createProcessingInstruction": ('str', 'str'), + "QDomDocument.createTextNode": ('str',), + "QDomDocument.doctype": (), + "QDomDocument.documentElement": (), + "QDomDocument.elementById": ('str',), + "QDomDocument.elementsByTagName": ('str',), + "QDomDocument.elementsByTagNameNS": ('str', 'str'), + "QDomDocument.implementation": (), + "QDomDocument.importNode": ('PySide2.QtXml.QDomNode', 'bool'), + "QDomDocument.nodeType": (), + "QDomDocument.setContent": [('PySide2.QtCore.QByteArray', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QByteArray', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'PySide2.QtXml.QXmlReader', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'bool', 'str', 'int', 'int'), ('str', 'bool', 'str', 'int', 'int'), ('str', 'str', 'int', 'int')], + "QDomDocument.toByteArray": ('int',), + "QDomDocument.toString": ('int',), + + # class PySide2.QtXml.QDomDocumentFragment: + "QDomDocumentFragment.__init__": [(), ('PySide2.QtXml.QDomDocumentFragment',)], + "QDomDocumentFragment.__copy__": (), + "QDomDocumentFragment.nodeType": (), + + # class PySide2.QtXml.QDomDocumentType: + "QDomDocumentType.__init__": [(), ('PySide2.QtXml.QDomDocumentType',)], + "QDomDocumentType.__copy__": (), + "QDomDocumentType.entities": (), + "QDomDocumentType.internalSubset": (), + "QDomDocumentType.name": (), + "QDomDocumentType.nodeType": (), + "QDomDocumentType.notations": (), + "QDomDocumentType.publicId": (), + "QDomDocumentType.systemId": (), + + # class PySide2.QtXml.QDomElement: + "QDomElement.__init__": [(), ('PySide2.QtXml.QDomElement',)], + "QDomElement.__copy__": (), + "QDomElement.attribute": ('str', 'str'), + "QDomElement.attributeNS": ('str', 'str', 'str'), + "QDomElement.attributeNode": ('str',), + "QDomElement.attributeNodeNS": ('str', 'str'), + "QDomElement.attributes": (), + "QDomElement.elementsByTagName": ('str',), + "QDomElement.elementsByTagNameNS": ('str', 'str'), + "QDomElement.hasAttribute": ('str',), + "QDomElement.hasAttributeNS": ('str', 'str'), + "QDomElement.nodeType": (), + "QDomElement.removeAttribute": ('str',), + "QDomElement.removeAttributeNS": ('str', 'str'), + "QDomElement.removeAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttribute": [('str', 'float'), ('str', 'int'), ('str', 'str')], + "QDomElement.setAttributeNS": [('str', 'str', 'float'), ('str', 'str', 'int'), ('str', 'str', 'str')], + "QDomElement.setAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttributeNodeNS": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setTagName": ('str',), + "QDomElement.tagName": (), + "QDomElement.text": (), + + # class PySide2.QtXml.QDomEntity: + "QDomEntity.__init__": [(), ('PySide2.QtXml.QDomEntity',)], + "QDomEntity.__copy__": (), + "QDomEntity.nodeType": (), + "QDomEntity.notationName": (), + "QDomEntity.publicId": (), + "QDomEntity.systemId": (), + + # class PySide2.QtXml.QDomEntityReference: + "QDomEntityReference.__init__": [(), ('PySide2.QtXml.QDomEntityReference',)], + "QDomEntityReference.__copy__": (), + "QDomEntityReference.nodeType": (), + + # class PySide2.QtXml.QDomImplementation: + "QDomImplementation.__init__": [(), ('PySide2.QtXml.QDomImplementation',)], + "QDomImplementation.__copy__": (), + "QDomImplementation.createDocument": ('str', 'str', 'PySide2.QtXml.QDomDocumentType'), + "QDomImplementation.createDocumentType": ('str', 'str', 'str'), + "QDomImplementation.hasFeature": ('str', 'str'), + "QDomImplementation.invalidDataPolicy": (), + "QDomImplementation.isNull": (), + "QDomImplementation.setInvalidDataPolicy": ('PySide2.QtXml.QDomImplementation.InvalidDataPolicy',), + + # class PySide2.QtXml.QDomNamedNodeMap: + "QDomNamedNodeMap.__init__": [(), ('PySide2.QtXml.QDomNamedNodeMap',)], + "QDomNamedNodeMap.__copy__": (), + "QDomNamedNodeMap.contains": ('str',), + "QDomNamedNodeMap.count": (), + "QDomNamedNodeMap.isEmpty": (), + "QDomNamedNodeMap.item": ('int',), + "QDomNamedNodeMap.length": (), + "QDomNamedNodeMap.namedItem": ('str',), + "QDomNamedNodeMap.namedItemNS": ('str', 'str'), + "QDomNamedNodeMap.removeNamedItem": ('str',), + "QDomNamedNodeMap.removeNamedItemNS": ('str', 'str'), + "QDomNamedNodeMap.setNamedItem": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.setNamedItemNS": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.size": (), + + # class PySide2.QtXml.QDomNode: + "QDomNode.__init__": [(), ('PySide2.QtXml.QDomNode',)], + "QDomNode.__copy__": (), + "QDomNode.appendChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.attributes": (), + "QDomNode.childNodes": (), + "QDomNode.clear": (), + "QDomNode.cloneNode": ('bool',), + "QDomNode.columnNumber": (), + "QDomNode.firstChild": (), + "QDomNode.firstChildElement": ('str',), + "QDomNode.hasAttributes": (), + "QDomNode.hasChildNodes": (), + "QDomNode.insertAfter": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.insertBefore": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.isAttr": (), + "QDomNode.isCDATASection": (), + "QDomNode.isCharacterData": (), + "QDomNode.isComment": (), + "QDomNode.isDocument": (), + "QDomNode.isDocumentFragment": (), + "QDomNode.isDocumentType": (), + "QDomNode.isElement": (), + "QDomNode.isEntity": (), + "QDomNode.isEntityReference": (), + "QDomNode.isNotation": (), + "QDomNode.isNull": (), + "QDomNode.isProcessingInstruction": (), + "QDomNode.isSupported": ('str', 'str'), + "QDomNode.isText": (), + "QDomNode.lastChild": (), + "QDomNode.lastChildElement": ('str',), + "QDomNode.lineNumber": (), + "QDomNode.localName": (), + "QDomNode.namedItem": ('str',), + "QDomNode.namespaceURI": (), + "QDomNode.nextSibling": (), + "QDomNode.nextSiblingElement": ('str',), + "QDomNode.nodeName": (), + "QDomNode.nodeType": (), + "QDomNode.nodeValue": (), + "QDomNode.normalize": (), + "QDomNode.ownerDocument": (), + "QDomNode.parentNode": (), + "QDomNode.prefix": (), + "QDomNode.previousSibling": (), + "QDomNode.previousSiblingElement": ('str',), + "QDomNode.removeChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.replaceChild": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.save": ('PySide2.QtCore.QTextStream', 'int', 'PySide2.QtXml.QDomNode.EncodingPolicy'), + "QDomNode.setNodeValue": ('str',), + "QDomNode.setPrefix": ('str',), + "QDomNode.toAttr": (), + "QDomNode.toCDATASection": (), + "QDomNode.toCharacterData": (), + "QDomNode.toComment": (), + "QDomNode.toDocument": (), + "QDomNode.toDocumentFragment": (), + "QDomNode.toDocumentType": (), + "QDomNode.toElement": (), + "QDomNode.toEntity": (), + "QDomNode.toEntityReference": (), + "QDomNode.toNotation": (), + "QDomNode.toProcessingInstruction": (), + "QDomNode.toText": (), + + # class PySide2.QtXml.QDomNodeList: + "QDomNodeList.__init__": [(), ('PySide2.QtXml.QDomNodeList',)], + "QDomNodeList.__copy__": (), + "QDomNodeList.at": ('int',), + "QDomNodeList.count": (), + "QDomNodeList.isEmpty": (), + "QDomNodeList.item": ('int',), + "QDomNodeList.length": (), + "QDomNodeList.size": (), + + # class PySide2.QtXml.QDomNotation: + "QDomNotation.__init__": [(), ('PySide2.QtXml.QDomNotation',)], + "QDomNotation.__copy__": (), + "QDomNotation.nodeType": (), + "QDomNotation.publicId": (), + "QDomNotation.systemId": (), + + # class PySide2.QtXml.QDomProcessingInstruction: + "QDomProcessingInstruction.__init__": [(), ('PySide2.QtXml.QDomProcessingInstruction',)], + "QDomProcessingInstruction.__copy__": (), + "QDomProcessingInstruction.data": (), + "QDomProcessingInstruction.nodeType": (), + "QDomProcessingInstruction.setData": ('str',), + "QDomProcessingInstruction.target": (), + + # class PySide2.QtXml.QDomText: + "QDomText.__init__": [(), ('PySide2.QtXml.QDomText',)], + "QDomText.__copy__": (), + "QDomText.nodeType": (), + "QDomText.splitText": ('int',), + + # class PySide2.QtXml.QXmlAttributes: + "QXmlAttributes.__init__": [(), ('PySide2.QtXml.QXmlAttributes',)], + "QXmlAttributes.__copy__": (), + "QXmlAttributes.append": ('str', 'str', 'str', 'str'), + "QXmlAttributes.clear": (), + "QXmlAttributes.count": (), + "QXmlAttributes.index": [('str',), ('str', 'str')], + "QXmlAttributes.length": (), + "QXmlAttributes.localName": ('int',), + "QXmlAttributes.qName": ('int',), + "QXmlAttributes.type": [('int',), ('str',), ('str', 'str')], + "QXmlAttributes.uri": ('int',), + "QXmlAttributes.value": [('int',), ('str',), ('str', 'str')], + + # class PySide2.QtXml.QXmlContentHandler: + "QXmlContentHandler.__init__": (), + "QXmlContentHandler.characters": ('str',), + "QXmlContentHandler.endDocument": (), + "QXmlContentHandler.endElement": ('str', 'str', 'str'), + "QXmlContentHandler.endPrefixMapping": ('str',), + "QXmlContentHandler.errorString": (), + "QXmlContentHandler.ignorableWhitespace": ('str',), + "QXmlContentHandler.processingInstruction": ('str', 'str'), + "QXmlContentHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlContentHandler.skippedEntity": ('str',), + "QXmlContentHandler.startDocument": (), + "QXmlContentHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlContentHandler.startPrefixMapping": ('str', 'str'), + + # class PySide2.QtXml.QXmlDTDHandler: + "QXmlDTDHandler.__init__": (), + "QXmlDTDHandler.errorString": (), + "QXmlDTDHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDTDHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + + # class PySide2.QtXml.QXmlDeclHandler: + "QXmlDeclHandler.__init__": (), + "QXmlDeclHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDeclHandler.errorString": (), + "QXmlDeclHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDeclHandler.internalEntityDecl": ('str', 'str'), + + # class PySide2.QtXml.QXmlDefaultHandler: + "QXmlDefaultHandler.__init__": (), + "QXmlDefaultHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDefaultHandler.characters": ('str',), + "QXmlDefaultHandler.comment": ('str',), + "QXmlDefaultHandler.endCDATA": (), + "QXmlDefaultHandler.endDTD": (), + "QXmlDefaultHandler.endDocument": (), + "QXmlDefaultHandler.endElement": ('str', 'str', 'str'), + "QXmlDefaultHandler.endEntity": ('str',), + "QXmlDefaultHandler.endPrefixMapping": ('str',), + "QXmlDefaultHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.errorString": (), + "QXmlDefaultHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.ignorableWhitespace": ('str',), + "QXmlDefaultHandler.internalEntityDecl": ('str', 'str'), + "QXmlDefaultHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.processingInstruction": ('str', 'str'), + "QXmlDefaultHandler.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + "QXmlDefaultHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlDefaultHandler.skippedEntity": ('str',), + "QXmlDefaultHandler.startCDATA": (), + "QXmlDefaultHandler.startDTD": ('str', 'str', 'str'), + "QXmlDefaultHandler.startDocument": (), + "QXmlDefaultHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlDefaultHandler.startEntity": ('str',), + "QXmlDefaultHandler.startPrefixMapping": ('str', 'str'), + "QXmlDefaultHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + "QXmlDefaultHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlEntityResolver: + "QXmlEntityResolver.__init__": (), + "QXmlEntityResolver.errorString": (), + "QXmlEntityResolver.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + + # class PySide2.QtXml.QXmlErrorHandler: + "QXmlErrorHandler.__init__": (), + "QXmlErrorHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.errorString": (), + "QXmlErrorHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlInputSource: + "QXmlInputSource.__init__": [(), ('PySide2.QtCore.QIODevice',)], + "QXmlInputSource.data": (), + "QXmlInputSource.fetchData": (), + "QXmlInputSource.fromRawData": ('PySide2.QtCore.QByteArray', 'bool'), + "QXmlInputSource.next": (), + "QXmlInputSource.reset": (), + "QXmlInputSource.setData": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtXml.QXmlLexicalHandler: + "QXmlLexicalHandler.__init__": (), + "QXmlLexicalHandler.comment": ('str',), + "QXmlLexicalHandler.endCDATA": (), + "QXmlLexicalHandler.endDTD": (), + "QXmlLexicalHandler.endEntity": ('str',), + "QXmlLexicalHandler.errorString": (), + "QXmlLexicalHandler.startCDATA": (), + "QXmlLexicalHandler.startDTD": ('str', 'str', 'str'), + "QXmlLexicalHandler.startEntity": ('str',), + + # class PySide2.QtXml.QXmlLocator: + "QXmlLocator.__init__": (), + "QXmlLocator.columnNumber": (), + "QXmlLocator.lineNumber": (), + + # class PySide2.QtXml.QXmlNamespaceSupport: + "QXmlNamespaceSupport.__init__": (), + "QXmlNamespaceSupport.popContext": (), + "QXmlNamespaceSupport.prefix": ('str',), + "QXmlNamespaceSupport.prefixes": [(), ('str',)], + "QXmlNamespaceSupport.processName": ('str', 'bool', 'str', 'str'), + "QXmlNamespaceSupport.pushContext": (), + "QXmlNamespaceSupport.reset": (), + "QXmlNamespaceSupport.setPrefix": ('str', 'str'), + "QXmlNamespaceSupport.splitName": ('str', 'str', 'str'), + "QXmlNamespaceSupport.uri": ('str',), + + # class PySide2.QtXml.QXmlParseException: + "QXmlParseException.__init__": [('PySide2.QtXml.QXmlParseException',), ('str', 'int', 'int', 'str', 'str')], + "QXmlParseException.columnNumber": (), + "QXmlParseException.lineNumber": (), + "QXmlParseException.message": (), + "QXmlParseException.publicId": (), + "QXmlParseException.systemId": (), + + # class PySide2.QtXml.QXmlReader: + "QXmlReader.__init__": (), + "QXmlReader.DTDHandler": (), + "QXmlReader.contentHandler": (), + "QXmlReader.declHandler": (), + "QXmlReader.entityResolver": (), + "QXmlReader.errorHandler": (), + "QXmlReader.feature": ('str', 'bool'), + "QXmlReader.hasFeature": ('str',), + "QXmlReader.hasProperty": ('str',), + "QXmlReader.lexicalHandler": (), + "QXmlReader.parse": ['PySide2.QtXml.QXmlInputSource'], + "QXmlReader.property": ('str', 'bool'), + "QXmlReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlReader.setFeature": ('str', 'bool'), + "QXmlReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlReader.setProperty": ('str', 'int'), + + # class PySide2.QtXml.QXmlSimpleReader: + "QXmlSimpleReader.__init__": (), + "QXmlSimpleReader.DTDHandler": (), + "QXmlSimpleReader.contentHandler": (), + "QXmlSimpleReader.declHandler": (), + "QXmlSimpleReader.entityResolver": (), + "QXmlSimpleReader.errorHandler": (), + "QXmlSimpleReader.feature": ('str', 'bool'), + "QXmlSimpleReader.hasFeature": ('str',), + "QXmlSimpleReader.hasProperty": ('str',), + "QXmlSimpleReader.lexicalHandler": (), + "QXmlSimpleReader.parse": [('PySide2.QtXml.QXmlInputSource',), ('PySide2.QtXml.QXmlInputSource', 'bool')], + "QXmlSimpleReader.parseContinue": (), + "QXmlSimpleReader.property": ('str', 'bool'), + "QXmlSimpleReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlSimpleReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlSimpleReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlSimpleReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlSimpleReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlSimpleReader.setFeature": ('str', 'bool'), + "QXmlSimpleReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlSimpleReader.setProperty": ('str', 'int'), + }) + +# Module PySide2.QtXmlPatterns +if "PySide2.QtXmlPatterns" in sys.modules: + dict.update({ + + # class PySide2.QtXmlPatterns.QAbstractMessageHandler: + "QAbstractMessageHandler.__init__": ('PySide2.QtCore.QObject',), + "QAbstractMessageHandler.handleMessage": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + "QAbstractMessageHandler.message": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + + # class PySide2.QtXmlPatterns.QAbstractUriResolver: + "QAbstractUriResolver.__init__": ('PySide2.QtCore.QObject',), + "QAbstractUriResolver.resolve": ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtXmlPatterns.QAbstractXmlNodeModel: + "QAbstractXmlNodeModel.__init__": (), + "QAbstractXmlNodeModel.attributes": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.baseUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.compareOrder": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.createIndex": [('int',), ('int', 'int')], + "QAbstractXmlNodeModel.documentUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.elementById": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.isDeepEqual": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.kind": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.name": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceBindings": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceForPrefix": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'Missing(PySide2.QtXmlPatterns.QXmlName.PrefixCode)'), + "QAbstractXmlNodeModel.nextFromSimpleAxis": ('PySide2.QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.nodesByIdref": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.root": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.sendNamespaces": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QAbstractXmlReceiver'), + "QAbstractXmlNodeModel.sourceLocation": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.stringValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.typedValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + + # class PySide2.QtXmlPatterns.QAbstractXmlReceiver: + "QAbstractXmlReceiver.__init__": (), + "QAbstractXmlReceiver.atomicValue": ('PySide2.support.signature.typing.Any',), + "QAbstractXmlReceiver.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.characters": ('str',), + "QAbstractXmlReceiver.comment": ('str',), + "QAbstractXmlReceiver.endDocument": (), + "QAbstractXmlReceiver.endElement": (), + "QAbstractXmlReceiver.endOfSequence": (), + "QAbstractXmlReceiver.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.startDocument": (), + "QAbstractXmlReceiver.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.startOfSequence": (), + "QAbstractXmlReceiver.whitespaceOnly": ('str',), + + # class PySide2.QtXmlPatterns.QSourceLocation: + "QSourceLocation.__init__": [(), ('PySide2.QtCore.QUrl', 'int', 'int'), ('PySide2.QtXmlPatterns.QSourceLocation',)], + "QSourceLocation.__copy__": (), + "QSourceLocation.column": (), + "QSourceLocation.isNull": (), + "QSourceLocation.line": (), + "QSourceLocation.setColumn": ('int',), + "QSourceLocation.setLine": ('int',), + "QSourceLocation.setUri": ('PySide2.QtCore.QUrl',), + "QSourceLocation.uri": (), + + # class PySide2.QtXmlPatterns.QXmlFormatter: + "QXmlFormatter.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlFormatter.atomicValue": ('PySide2.support.signature.typing.Any',), + "QXmlFormatter.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.characters": ('str',), + "QXmlFormatter.comment": ('str',), + "QXmlFormatter.endDocument": (), + "QXmlFormatter.endElement": (), + "QXmlFormatter.endOfSequence": (), + "QXmlFormatter.indentationDepth": (), + "QXmlFormatter.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.setIndentationDepth": ('int',), + "QXmlFormatter.startDocument": (), + "QXmlFormatter.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlFormatter.startOfSequence": (), + + # class PySide2.QtXmlPatterns.QXmlItem: + "QXmlItem.__init__": [(), ('PySide2.QtXmlPatterns.QXmlItem',), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), ('PySide2.support.signature.typing.Any',)], + "QXmlItem.__copy__": (), + "QXmlItem.isAtomicValue": (), + "QXmlItem.isNode": (), + "QXmlItem.isNull": (), + "QXmlItem.toAtomicValue": (), + "QXmlItem.toNodeModelIndex": (), + + # class PySide2.QtXmlPatterns.QXmlName: + "QXmlName.__init__": [(), ('PySide2.QtXmlPatterns.QXmlName',), ('PySide2.QtXmlPatterns.QXmlNamePool', 'str', 'str', 'str')], + "QXmlName.__copy__": (), + "QXmlName.fromClarkName": ('str', 'PySide2.QtXmlPatterns.QXmlNamePool'), + "QXmlName.isNCName": ('str',), + "QXmlName.isNull": (), + "QXmlName.localName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.namespaceUri": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.prefix": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.toClarkName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + + # class PySide2.QtXmlPatterns.QXmlNamePool: + "QXmlNamePool.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',)], + "QXmlNamePool.__copy__": (), + + # class PySide2.QtXmlPatterns.QXmlNodeModelIndex: + "QXmlNodeModelIndex.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlNodeModelIndex.__copy__": (), + "QXmlNodeModelIndex.additionalData": (), + "QXmlNodeModelIndex.data": (), + "QXmlNodeModelIndex.internalPointer": (), + "QXmlNodeModelIndex.isNull": (), + "QXmlNodeModelIndex.model": (), + + # class PySide2.QtXmlPatterns.QXmlQuery: + "QXmlQuery.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',), ('PySide2.QtXmlPatterns.QXmlQuery',), ('PySide2.QtXmlPatterns.QXmlQuery.QueryLanguage', 'PySide2.QtXmlPatterns.QXmlNamePool')], + "QXmlQuery.__copy__": (), + "QXmlQuery.bindVariable": [('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtCore.QIODevice'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlItem'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlQuery'), ('str', 'PySide2.QtCore.QIODevice'), ('str', 'PySide2.QtXmlPatterns.QXmlItem'), ('str', 'PySide2.QtXmlPatterns.QXmlQuery')], + "QXmlQuery.evaluateTo": [('PySide2.QtCore.QIODevice',), ('PySide2.QtXmlPatterns.QAbstractXmlReceiver',), ('PySide2.QtXmlPatterns.QXmlResultItems',)], + "QXmlQuery.initialTemplateName": (), + "QXmlQuery.isValid": (), + "QXmlQuery.messageHandler": (), + "QXmlQuery.namePool": (), + "QXmlQuery.queryLanguage": (), + "QXmlQuery.setFocus": [('PySide2.QtCore.QIODevice',), ('PySide2.QtCore.QUrl',), ('PySide2.QtXmlPatterns.QXmlItem',), ('str',)], + "QXmlQuery.setInitialTemplateName": [('PySide2.QtXmlPatterns.QXmlName',), ('str',)], + "QXmlQuery.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlQuery.setQuery": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), ('str', 'PySide2.QtCore.QUrl')], + "QXmlQuery.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlQuery.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlResultItems: + "QXmlResultItems.__init__": (), + "QXmlResultItems.current": (), + "QXmlResultItems.hasError": (), + "QXmlResultItems.next": (), + + # class PySide2.QtXmlPatterns.QXmlSchema: + "QXmlSchema.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchema.documentUri": (), + "QXmlSchema.isValid": (), + "QXmlSchema.load": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + "QXmlSchema.messageHandler": (), + "QXmlSchema.namePool": (), + "QXmlSchema.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchema.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchema.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlSchemaValidator: + "QXmlSchemaValidator.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchemaValidator.messageHandler": (), + "QXmlSchemaValidator.namePool": (), + "QXmlSchemaValidator.schema": (), + "QXmlSchemaValidator.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchemaValidator.setSchema": ('PySide2.QtXmlPatterns.QXmlSchema',), + "QXmlSchemaValidator.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchemaValidator.uriResolver": (), + "QXmlSchemaValidator.validate": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + + # class PySide2.QtXmlPatterns.QXmlSerializer: + "QXmlSerializer.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlSerializer.atomicValue": ('PySide2.support.signature.typing.Any',), + "QXmlSerializer.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.characters": ('str',), + "QXmlSerializer.codec": (), + "QXmlSerializer.comment": ('str',), + "QXmlSerializer.endDocument": (), + "QXmlSerializer.endElement": (), + "QXmlSerializer.endOfSequence": (), + "QXmlSerializer.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.outputDevice": (), + "QXmlSerializer.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.setCodec": ('PySide2.QtCore.QTextCodec',), + "QXmlSerializer.startDocument": (), + "QXmlSerializer.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.startOfSequence": (), + }) + +# Module PySide2.QtHelp +if "PySide2.QtHelp" in sys.modules: + dict.update({ + + # class PySide2.QtHelp.QHelpContentItem: + "QHelpContentItem.parent": (), + "QHelpContentItem.__copy__": (), + "QHelpContentItem.child": ('int',), + "QHelpContentItem.childCount": (), + "QHelpContentItem.childPosition": ('PySide2.QtHelp.QHelpContentItem',), + "QHelpContentItem.row": (), + "QHelpContentItem.title": (), + "QHelpContentItem.url": (), + + # class PySide2.QtHelp.QHelpContentModel: + "QHelpContentModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.contentItemAt": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.createContents": ('str',), + "QHelpContentModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QHelpContentModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QHelpContentModel.isCreatingContents": (), + "QHelpContentModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QHelpContentModel.rowCount": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtHelp.QHelpContentWidget: + "QHelpContentWidget.indexOf": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtHelp.QHelpEngine: + "QHelpEngine.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngine.contentModel": (), + "QHelpEngine.contentWidget": (), + "QHelpEngine.indexModel": (), + "QHelpEngine.indexWidget": (), + "QHelpEngine.searchEngine": (), + + # class PySide2.QtHelp.QHelpEngineCore: + "QHelpEngineCore.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngineCore.addCustomFilter": ('str', 'PySide2.support.signature.typing.List'), + "QHelpEngineCore.autoSaveFilter": (), + "QHelpEngineCore.collectionFile": (), + "QHelpEngineCore.copyCollectionFile": ('str',), + "QHelpEngineCore.currentFilter": (), + "QHelpEngineCore.customFilters": (), + "QHelpEngineCore.customValue": ('str', 'PySide2.support.signature.typing.Any'), + "QHelpEngineCore.documentationFileName": ('str',), + "QHelpEngineCore.error": (), + "QHelpEngineCore.fileData": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.files": ('str', 'PySide2.support.signature.typing.List', 'str'), + "QHelpEngineCore.filterAttributeSets": ('str',), + "QHelpEngineCore.filterAttributes": [(), ('str',)], + "QHelpEngineCore.findFile": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.linksForIdentifier": ('str',), + "QHelpEngineCore.metaData": ('str', 'str'), + "QHelpEngineCore.namespaceName": ('str',), + "QHelpEngineCore.registerDocumentation": ('str',), + "QHelpEngineCore.registeredDocumentations": (), + "QHelpEngineCore.removeCustomFilter": ('str',), + "QHelpEngineCore.removeCustomValue": ('str',), + "QHelpEngineCore.setAutoSaveFilter": ('bool',), + "QHelpEngineCore.setCollectionFile": ('str',), + "QHelpEngineCore.setCurrentFilter": ('str',), + "QHelpEngineCore.setCustomValue": ('str', 'PySide2.support.signature.typing.Any'), + "QHelpEngineCore.setupData": (), + "QHelpEngineCore.unregisterDocumentation": ('str',), + + # class PySide2.QtHelp.QHelpIndexModel: + "QHelpIndexModel.linksForKeyword": ('str',), + "QHelpIndexModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object'), ('str',)], + "QHelpIndexModel.filter": ('str', 'str'), + "QHelpIndexModel.isCreatingIndex": (), + + # class PySide2.QtHelp.QHelpIndexWidget: + "QHelpIndexWidget.activateCurrentItem": (), + "QHelpIndexWidget.filterIndices": ('str', 'str'), + + # class PySide2.QtHelp.QHelpSearchEngine: + "QHelpSearchEngine.__init__": ('PySide2.QtHelp.QHelpEngineCore', 'PySide2.QtCore.QObject'), + "QHelpSearchEngine.cancelIndexing": (), + "QHelpSearchEngine.cancelSearching": (), + "QHelpSearchEngine.hitCount": (), + "QHelpSearchEngine.hits": ('int', 'int'), + "QHelpSearchEngine.hitsCount": (), + "QHelpSearchEngine.query": (), + "QHelpSearchEngine.queryWidget": (), + "QHelpSearchEngine.reindexDocumentation": (), + "QHelpSearchEngine.resultWidget": (), + "QHelpSearchEngine.search": ('list',), + + # class PySide2.QtHelp.QHelpSearchQuery: + "QHelpSearchQuery.__init__": [(), ('PySide2.QtHelp.QHelpSearchQuery',), ('PySide2.QtHelp.QHelpSearchQuery.FieldName', 'PySide2.support.signature.typing.List')], + "QHelpSearchQuery.__copy__": (), + + # class PySide2.QtHelp.QHelpSearchQueryWidget: + "QHelpSearchQueryWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QHelpSearchQueryWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchQueryWidget.collapseExtendedSearch": (), + "QHelpSearchQueryWidget.expandExtendedSearch": (), + "QHelpSearchQueryWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QHelpSearchQueryWidget.isCompactMode": (), + "QHelpSearchQueryWidget.query": (), + "QHelpSearchQueryWidget.setCompactMode": ('bool',), + "QHelpSearchQueryWidget.setQuery": ('list',), + + # class PySide2.QtHelp.QHelpSearchResultWidget: + "QHelpSearchResultWidget.linkAt": ('PySide2.QtCore.QPoint',), + "QHelpSearchResultWidget.changeEvent": ('PySide2.QtCore.QEvent',), + }) + +# Module PySide2.QtMultimedia +if "PySide2.QtMultimedia" in sys.modules: + dict.update({ + + # class PySide2.QtMultimedia.QAbstractAudioDeviceInfo: + "QAbstractAudioDeviceInfo.__init__": (), + "QAbstractAudioDeviceInfo.deviceName": (), + "QAbstractAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioDeviceInfo.preferredFormat": (), + "QAbstractAudioDeviceInfo.supportedByteOrders": (), + "QAbstractAudioDeviceInfo.supportedChannelCounts": (), + "QAbstractAudioDeviceInfo.supportedCodecs": (), + "QAbstractAudioDeviceInfo.supportedSampleRates": (), + "QAbstractAudioDeviceInfo.supportedSampleSizes": (), + "QAbstractAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAbstractAudioInput: + "QAbstractAudioInput.__init__": (), + "QAbstractAudioInput.bufferSize": (), + "QAbstractAudioInput.bytesReady": (), + "QAbstractAudioInput.elapsedUSecs": (), + "QAbstractAudioInput.error": (), + "QAbstractAudioInput.format": (), + "QAbstractAudioInput.notifyInterval": (), + "QAbstractAudioInput.periodSize": (), + "QAbstractAudioInput.processedUSecs": (), + "QAbstractAudioInput.reset": (), + "QAbstractAudioInput.resume": (), + "QAbstractAudioInput.setBufferSize": ('int',), + "QAbstractAudioInput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioInput.setNotifyInterval": ('int',), + "QAbstractAudioInput.setVolume": ('float',), + "QAbstractAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioInput.state": (), + "QAbstractAudioInput.stop": (), + "QAbstractAudioInput.suspend": (), + "QAbstractAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAbstractAudioOutput: + "QAbstractAudioOutput.__init__": (), + "QAbstractAudioOutput.bufferSize": (), + "QAbstractAudioOutput.bytesFree": (), + "QAbstractAudioOutput.category": (), + "QAbstractAudioOutput.elapsedUSecs": (), + "QAbstractAudioOutput.error": (), + "QAbstractAudioOutput.format": (), + "QAbstractAudioOutput.notifyInterval": (), + "QAbstractAudioOutput.periodSize": (), + "QAbstractAudioOutput.processedUSecs": (), + "QAbstractAudioOutput.reset": (), + "QAbstractAudioOutput.resume": (), + "QAbstractAudioOutput.setBufferSize": ('int',), + "QAbstractAudioOutput.setCategory": ('str',), + "QAbstractAudioOutput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioOutput.setNotifyInterval": ('int',), + "QAbstractAudioOutput.setVolume": ('float',), + "QAbstractAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioOutput.state": (), + "QAbstractAudioOutput.stop": (), + "QAbstractAudioOutput.suspend": (), + "QAbstractAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAbstractVideoBuffer: + "QAbstractVideoBuffer.__init__": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoBuffer.handle": (), + "QAbstractVideoBuffer.handleType": (), + "QAbstractVideoBuffer.mapMode": (), + "QAbstractVideoBuffer.release": (), + "QAbstractVideoBuffer.unmap": (), + + # class PySide2.QtMultimedia.QAbstractVideoFilter: + "QAbstractVideoFilter.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoFilter.createFilterRunnable": (), + "QAbstractVideoFilter.isActive": (), + "QAbstractVideoFilter.setActive": ('bool',), + + # class PySide2.QtMultimedia.QAbstractVideoSurface: + "QAbstractVideoSurface.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoSurface.error": (), + "QAbstractVideoSurface.isActive": (), + "QAbstractVideoSurface.isFormatSupported": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.nativeResolution": (), + "QAbstractVideoSurface.nearestFormat": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.present": ('PySide2.QtMultimedia.QVideoFrame',), + "QAbstractVideoSurface.setError": ('PySide2.QtMultimedia.QAbstractVideoSurface.Error',), + "QAbstractVideoSurface.setNativeResolution": ('PySide2.QtCore.QSize',), + "QAbstractVideoSurface.start": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.stop": (), + "QAbstractVideoSurface.supportedPixelFormats": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoSurface.surfaceFormat": (), + + # class PySide2.QtMultimedia.QAudio: + + # class PySide2.QtMultimedia.QAudioBuffer: + "QAudioBuffer.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtMultimedia.QAudioFormat', 'int'), ('PySide2.QtMultimedia.QAudioBuffer',), ('int', 'PySide2.QtMultimedia.QAudioFormat', 'int')], + "QAudioBuffer.__copy__": (), + "QAudioBuffer.byteCount": (), + "QAudioBuffer.constData": (), + "QAudioBuffer.data": [], + "QAudioBuffer.duration": (), + "QAudioBuffer.format": (), + "QAudioBuffer.frameCount": (), + "QAudioBuffer.isValid": (), + "QAudioBuffer.sampleCount": (), + "QAudioBuffer.startTime": (), + + # class PySide2.QtMultimedia.QAudioDecoder: + "QAudioDecoder.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoder.audioFormat": (), + "QAudioDecoder.bind": ('PySide2.QtCore.QObject',), + "QAudioDecoder.bufferAvailable": (), + "QAudioDecoder.duration": (), + "QAudioDecoder.errorString": (), + "QAudioDecoder.hasSupport": ('str', 'PySide2.support.signature.typing.List'), + "QAudioDecoder.position": (), + "QAudioDecoder.read": (), + "QAudioDecoder.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoder.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoder.setSourceFilename": ('str',), + "QAudioDecoder.sourceDevice": (), + "QAudioDecoder.sourceFilename": (), + "QAudioDecoder.start": (), + "QAudioDecoder.state": (), + "QAudioDecoder.stop": (), + "QAudioDecoder.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QAudioDecoderControl: + "QAudioDecoderControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoderControl.audioFormat": (), + "QAudioDecoderControl.bufferAvailable": (), + "QAudioDecoderControl.duration": (), + "QAudioDecoderControl.position": (), + "QAudioDecoderControl.read": (), + "QAudioDecoderControl.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoderControl.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoderControl.setSourceFilename": ('str',), + "QAudioDecoderControl.sourceDevice": (), + "QAudioDecoderControl.sourceFilename": (), + "QAudioDecoderControl.start": (), + "QAudioDecoderControl.state": (), + "QAudioDecoderControl.stop": (), + + # class PySide2.QtMultimedia.QAudioDeviceInfo: + "QAudioDeviceInfo.__init__": [(), ('PySide2.QtMultimedia.QAudioDeviceInfo',)], + "QAudioDeviceInfo.__copy__": (), + "QAudioDeviceInfo.availableDevices": ('PySide2.QtMultimedia.QAudio.Mode',), + "QAudioDeviceInfo.defaultInputDevice": (), + "QAudioDeviceInfo.defaultOutputDevice": (), + "QAudioDeviceInfo.deviceName": (), + "QAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.isNull": (), + "QAudioDeviceInfo.nearestFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.preferredFormat": (), + "QAudioDeviceInfo.supportedByteOrders": (), + "QAudioDeviceInfo.supportedChannelCounts": (), + "QAudioDeviceInfo.supportedCodecs": (), + "QAudioDeviceInfo.supportedSampleRates": (), + "QAudioDeviceInfo.supportedSampleSizes": (), + "QAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAudioEncoderSettings: + "QAudioEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QAudioEncoderSettings',)], + "QAudioEncoderSettings.__copy__": (), + "QAudioEncoderSettings.bitRate": (), + "QAudioEncoderSettings.channelCount": (), + "QAudioEncoderSettings.codec": (), + "QAudioEncoderSettings.encodingMode": (), + "QAudioEncoderSettings.encodingOption": ('str',), + "QAudioEncoderSettings.encodingOptions": (), + "QAudioEncoderSettings.isNull": (), + "QAudioEncoderSettings.quality": (), + "QAudioEncoderSettings.sampleRate": (), + "QAudioEncoderSettings.setBitRate": ('int',), + "QAudioEncoderSettings.setChannelCount": ('int',), + "QAudioEncoderSettings.setCodec": ('str',), + "QAudioEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QAudioEncoderSettings.setEncodingOption": ('str', 'PySide2.support.signature.typing.Any'), + "QAudioEncoderSettings.setEncodingOptions": ('dict',), + "QAudioEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QAudioEncoderSettings.setSampleRate": ('int',), + + # class PySide2.QtMultimedia.QAudioEncoderSettingsControl: + "QAudioEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioEncoderSettingsControl.audioSettings": (), + "QAudioEncoderSettingsControl.codecDescription": ('str',), + "QAudioEncoderSettingsControl.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QAudioEncoderSettingsControl.supportedAudioCodecs": (), + + # class PySide2.QtMultimedia.QAudioFormat: + "QAudioFormat.__init__": [(), ('PySide2.QtMultimedia.QAudioFormat',)], + "QAudioFormat.__copy__": (), + "QAudioFormat.byteOrder": (), + "QAudioFormat.bytesForDuration": ('int',), + "QAudioFormat.bytesForFrames": ('int',), + "QAudioFormat.bytesPerFrame": (), + "QAudioFormat.channelCount": (), + "QAudioFormat.codec": (), + "QAudioFormat.durationForBytes": ('int',), + "QAudioFormat.durationForFrames": ('int',), + "QAudioFormat.framesForBytes": ('int',), + "QAudioFormat.framesForDuration": ('int',), + "QAudioFormat.isValid": (), + "QAudioFormat.sampleRate": (), + "QAudioFormat.sampleSize": (), + "QAudioFormat.sampleType": (), + "QAudioFormat.setByteOrder": ('PySide2.QtMultimedia.QAudioFormat.Endian',), + "QAudioFormat.setChannelCount": ('int',), + "QAudioFormat.setCodec": ('str',), + "QAudioFormat.setSampleRate": ('int',), + "QAudioFormat.setSampleSize": ('int',), + "QAudioFormat.setSampleType": ('PySide2.QtMultimedia.QAudioFormat.SampleType',), + + # class PySide2.QtMultimedia.QAudioInput: + "QAudioInput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioInput.bufferSize": (), + "QAudioInput.bytesReady": (), + "QAudioInput.elapsedUSecs": (), + "QAudioInput.error": (), + "QAudioInput.format": (), + "QAudioInput.notifyInterval": (), + "QAudioInput.periodSize": (), + "QAudioInput.processedUSecs": (), + "QAudioInput.reset": (), + "QAudioInput.resume": (), + "QAudioInput.setBufferSize": ('int',), + "QAudioInput.setNotifyInterval": ('int',), + "QAudioInput.setVolume": ('float',), + "QAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioInput.state": (), + "QAudioInput.stop": (), + "QAudioInput.suspend": (), + "QAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAudioInputSelectorControl: + "QAudioInputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioInputSelectorControl.activeInput": (), + "QAudioInputSelectorControl.availableInputs": (), + "QAudioInputSelectorControl.defaultInput": (), + "QAudioInputSelectorControl.inputDescription": ('str',), + "QAudioInputSelectorControl.setActiveInput": ('str',), + + # class PySide2.QtMultimedia.QAudioOutput: + "QAudioOutput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioOutput.bufferSize": (), + "QAudioOutput.bytesFree": (), + "QAudioOutput.category": (), + "QAudioOutput.elapsedUSecs": (), + "QAudioOutput.error": (), + "QAudioOutput.format": (), + "QAudioOutput.notifyInterval": (), + "QAudioOutput.periodSize": (), + "QAudioOutput.processedUSecs": (), + "QAudioOutput.reset": (), + "QAudioOutput.resume": (), + "QAudioOutput.setBufferSize": ('int',), + "QAudioOutput.setCategory": ('str',), + "QAudioOutput.setNotifyInterval": ('int',), + "QAudioOutput.setVolume": ('float',), + "QAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioOutput.state": (), + "QAudioOutput.stop": (), + "QAudioOutput.suspend": (), + "QAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAudioOutputSelectorControl: + "QAudioOutputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioOutputSelectorControl.activeOutput": (), + "QAudioOutputSelectorControl.availableOutputs": (), + "QAudioOutputSelectorControl.defaultOutput": (), + "QAudioOutputSelectorControl.outputDescription": ('str',), + "QAudioOutputSelectorControl.setActiveOutput": ('str',), + + # class PySide2.QtMultimedia.QAudioProbe: + "QAudioProbe.__init__": ('PySide2.QtCore.QObject',), + "QAudioProbe.isActive": (), + "QAudioProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QAudioRecorder: + "QAudioRecorder.__init__": ('PySide2.QtCore.QObject',), + "QAudioRecorder.audioInput": (), + "QAudioRecorder.audioInputDescription": ('str',), + "QAudioRecorder.audioInputs": (), + "QAudioRecorder.defaultAudioInput": (), + "QAudioRecorder.setAudioInput": ('str',), + + # class PySide2.QtMultimedia.QAudioRoleControl: + "QAudioRoleControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioRoleControl.audioRole": (), + "QAudioRoleControl.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QAudioRoleControl.supportedAudioRoles": (), + + # class PySide2.QtMultimedia.QCamera: + "QCamera.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtMultimedia.QCamera.Position', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QCameraInfo', 'PySide2.QtCore.QObject')], + "QCamera.availability": (), + "QCamera.availableDevices": (), + "QCamera.captureMode": (), + "QCamera.deviceDescription": ('PySide2.QtCore.QByteArray',), + "QCamera.errorString": (), + "QCamera.isCaptureModeSupported": ('CaptureModes',), + "QCamera.load": (), + "QCamera.lockStatus": [(), ('PySide2.QtMultimedia.QCamera.LockType',)], + "QCamera.requestedLocks": (), + "QCamera.searchAndLock": [(), ('LockTypes',)], + "QCamera.setCaptureMode": ('CaptureModes',), + "QCamera.setViewfinder": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QCamera.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.start": (), + "QCamera.state": (), + "QCamera.status": (), + "QCamera.stop": (), + "QCamera.supportedLocks": (), + "QCamera.supportedViewfinderFrameRateRanges": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderPixelFormats": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderResolutions": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.unload": (), + "QCamera.unlock": [(), ('LockTypes',)], + "QCamera.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraCaptureBufferFormatControl: + "QCameraCaptureBufferFormatControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureBufferFormatControl.bufferFormat": (), + "QCameraCaptureBufferFormatControl.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraCaptureBufferFormatControl.supportedBufferFormats": (), + + # class PySide2.QtMultimedia.QCameraCaptureDestinationControl: + "QCameraCaptureDestinationControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureDestinationControl.captureDestination": (), + "QCameraCaptureDestinationControl.isCaptureDestinationSupported": ('CaptureDestinations',), + "QCameraCaptureDestinationControl.setCaptureDestination": ('CaptureDestinations',), + + # class PySide2.QtMultimedia.QCameraControl: + "QCameraControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraControl.canChangeProperty": ('PySide2.QtMultimedia.QCameraControl.PropertyChangeType', 'PySide2.QtMultimedia.QCamera.Status'), + "QCameraControl.captureMode": (), + "QCameraControl.isCaptureModeSupported": ('CaptureModes',), + "QCameraControl.setCaptureMode": ('CaptureModes',), + "QCameraControl.setState": ('PySide2.QtMultimedia.QCamera.State',), + "QCameraControl.state": (), + "QCameraControl.status": (), + + # class PySide2.QtMultimedia.QCameraExposureControl: + "QCameraExposureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraExposureControl.actualValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.requestedValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.setValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtMultimedia.QCameraFocusZone: + "QCameraFocusZone.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus'), ('PySide2.QtMultimedia.QCameraFocusZone',)], + "QCameraFocusZone.__copy__": (), + "QCameraFocusZone.area": (), + "QCameraFocusZone.isValid": (), + "QCameraFocusZone.setStatus": ('PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus',), + "QCameraFocusZone.status": (), + + # class PySide2.QtMultimedia.QCameraImageCapture: + "QCameraImageCapture.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QCameraImageCapture.availability": (), + "QCameraImageCapture.bufferFormat": (), + "QCameraImageCapture.cancelCapture": (), + "QCameraImageCapture.capture": ('str',), + "QCameraImageCapture.captureDestination": (), + "QCameraImageCapture.encodingSettings": (), + "QCameraImageCapture.errorString": (), + "QCameraImageCapture.imageCodecDescription": ('str',), + "QCameraImageCapture.isAvailable": (), + "QCameraImageCapture.isCaptureDestinationSupported": ('CaptureDestinations',), + "QCameraImageCapture.isReadyForCapture": (), + "QCameraImageCapture.mediaObject": (), + "QCameraImageCapture.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraImageCapture.setCaptureDestination": ('CaptureDestinations',), + "QCameraImageCapture.setEncodingSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QCameraImageCapture.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QCameraImageCapture.supportedBufferFormats": (), + "QCameraImageCapture.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QCameraImageCaptureControl: + "QCameraImageCaptureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageCaptureControl.cancelCapture": (), + "QCameraImageCaptureControl.capture": ('str',), + "QCameraImageCaptureControl.driveMode": (), + "QCameraImageCaptureControl.isReadyForCapture": (), + "QCameraImageCaptureControl.setDriveMode": ('PySide2.QtMultimedia.QCameraImageCapture.DriveMode',), + + # class PySide2.QtMultimedia.QCameraImageProcessingControl: + "QCameraImageProcessingControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageProcessingControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.isParameterValueSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'PySide2.support.signature.typing.Any'), + "QCameraImageProcessingControl.parameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.setParameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtMultimedia.QCameraInfo: + "QCameraInfo.__init__": [('PySide2.QtCore.QByteArray',), ('PySide2.QtMultimedia.QCamera',), ('PySide2.QtMultimedia.QCameraInfo',)], + "QCameraInfo.__copy__": (), + "QCameraInfo.availableCameras": ('PySide2.QtMultimedia.QCamera.Position',), + "QCameraInfo.defaultCamera": (), + "QCameraInfo.description": (), + "QCameraInfo.deviceName": (), + "QCameraInfo.isNull": (), + "QCameraInfo.orientation": (), + "QCameraInfo.position": (), + + # class PySide2.QtMultimedia.QCameraInfoControl: + "QCameraInfoControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraInfoControl.cameraOrientation": ('str',), + "QCameraInfoControl.cameraPosition": ('str',), + + # class PySide2.QtMultimedia.QCameraLocksControl: + "QCameraLocksControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraLocksControl.lockStatus": ('PySide2.QtMultimedia.QCamera.LockType',), + "QCameraLocksControl.searchAndLock": ('LockTypes',), + "QCameraLocksControl.supportedLocks": (), + "QCameraLocksControl.unlock": ('LockTypes',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettings: + "QCameraViewfinderSettings.__init__": [(), ('PySide2.QtMultimedia.QCameraViewfinderSettings',)], + "QCameraViewfinderSettings.__copy__": (), + "QCameraViewfinderSettings.isNull": (), + "QCameraViewfinderSettings.maximumFrameRate": (), + "QCameraViewfinderSettings.minimumFrameRate": (), + "QCameraViewfinderSettings.pixelAspectRatio": (), + "QCameraViewfinderSettings.pixelFormat": (), + "QCameraViewfinderSettings.resolution": (), + "QCameraViewfinderSettings.setMaximumFrameRate": ('float',), + "QCameraViewfinderSettings.setMinimumFrameRate": ('float',), + "QCameraViewfinderSettings.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.setPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraViewfinderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.swap": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl: + "QCameraViewfinderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl.isViewfinderParameterSupported": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + "QCameraViewfinderSettingsControl.setViewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter', 'PySide2.support.signature.typing.Any'), + "QCameraViewfinderSettingsControl.viewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl2: + "QCameraViewfinderSettingsControl2.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl2.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCameraViewfinderSettingsControl2.supportedViewfinderSettings": (), + "QCameraViewfinderSettingsControl2.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraZoomControl: + "QCameraZoomControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraZoomControl.currentDigitalZoom": (), + "QCameraZoomControl.currentOpticalZoom": (), + "QCameraZoomControl.maximumDigitalZoom": (), + "QCameraZoomControl.maximumOpticalZoom": (), + "QCameraZoomControl.requestedDigitalZoom": (), + "QCameraZoomControl.requestedOpticalZoom": (), + "QCameraZoomControl.zoomTo": ('float', 'float'), + + # class PySide2.QtMultimedia.QImageEncoderControl: + "QImageEncoderControl.__init__": ('PySide2.QtCore.QObject',), + "QImageEncoderControl.imageCodecDescription": ('str',), + "QImageEncoderControl.imageSettings": (), + "QImageEncoderControl.setImageSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QImageEncoderControl.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QImageEncoderSettings: + "QImageEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QImageEncoderSettings',)], + "QImageEncoderSettings.__copy__": (), + "QImageEncoderSettings.codec": (), + "QImageEncoderSettings.encodingOption": ('str',), + "QImageEncoderSettings.encodingOptions": (), + "QImageEncoderSettings.isNull": (), + "QImageEncoderSettings.quality": (), + "QImageEncoderSettings.resolution": (), + "QImageEncoderSettings.setCodec": ('str',), + "QImageEncoderSettings.setEncodingOption": ('str', 'PySide2.support.signature.typing.Any'), + "QImageEncoderSettings.setEncodingOptions": ('dict',), + "QImageEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QImageEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QMediaAudioProbeControl: + "QMediaAudioProbeControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaAvailabilityControl: + "QMediaAvailabilityControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaAvailabilityControl.availability": (), + + # class PySide2.QtMultimedia.QMediaBindableInterface: + "QMediaBindableInterface.__init__": (), + "QMediaBindableInterface.mediaObject": (), + "QMediaBindableInterface.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimedia.QMediaContainerControl: + "QMediaContainerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaContainerControl.containerDescription": ('str',), + "QMediaContainerControl.containerFormat": (), + "QMediaContainerControl.setContainerFormat": ('str',), + "QMediaContainerControl.supportedContainers": (), + + # class PySide2.QtMultimedia.QMediaContent: + "QMediaContent.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtMultimedia.QMediaContent',), ('PySide2.QtMultimedia.QMediaPlaylist', 'PySide2.QtCore.QUrl', 'bool'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest',), ('list',)], + "QMediaContent.__copy__": (), + "QMediaContent.canonicalRequest": (), + "QMediaContent.canonicalResource": (), + "QMediaContent.canonicalUrl": (), + "QMediaContent.isNull": (), + "QMediaContent.playlist": (), + "QMediaContent.resources": (), + + # class PySide2.QtMultimedia.QMediaControl: + "QMediaControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaGaplessPlaybackControl: + "QMediaGaplessPlaybackControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaGaplessPlaybackControl.crossfadeTime": (), + "QMediaGaplessPlaybackControl.isCrossfadeSupported": (), + "QMediaGaplessPlaybackControl.nextMedia": (), + "QMediaGaplessPlaybackControl.setCrossfadeTime": ('float',), + "QMediaGaplessPlaybackControl.setNextMedia": ('PySide2.QtMultimedia.QMediaContent',), + + # class PySide2.QtMultimedia.QMediaNetworkAccessControl: + "QMediaNetworkAccessControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaNetworkAccessControl.currentConfiguration": (), + "QMediaNetworkAccessControl.setConfigurations": ('list',), + + # class PySide2.QtMultimedia.QMediaObject: + "QMediaObject.notifyInterval": (), + "QMediaObject.addPropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.availability": (), + "QMediaObject.availableMetaData": (), + "QMediaObject.bind": ('PySide2.QtCore.QObject',), + "QMediaObject.isAvailable": (), + "QMediaObject.isMetaDataAvailable": (), + "QMediaObject.metaData": ('str',), + "QMediaObject.removePropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.setNotifyInterval": ('int',), + "QMediaObject.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaPlayer: + "QMediaPlayer.__init__": ('PySide2.QtCore.QObject', 'Flags'), + "QMediaPlayer.audioRole": (), + "QMediaPlayer.availability": (), + "QMediaPlayer.bind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.bufferStatus": (), + "QMediaPlayer.currentMedia": (), + "QMediaPlayer.currentNetworkConfiguration": (), + "QMediaPlayer.duration": (), + "QMediaPlayer.errorString": (), + "QMediaPlayer.hasSupport": ('str', 'PySide2.support.signature.typing.List', 'Flags'), + "QMediaPlayer.isAudioAvailable": (), + "QMediaPlayer.isMuted": (), + "QMediaPlayer.isSeekable": (), + "QMediaPlayer.isVideoAvailable": (), + "QMediaPlayer.media": (), + "QMediaPlayer.mediaStatus": (), + "QMediaPlayer.mediaStream": (), + "QMediaPlayer.pause": (), + "QMediaPlayer.play": (), + "QMediaPlayer.playbackRate": (), + "QMediaPlayer.playlist": (), + "QMediaPlayer.position": (), + "QMediaPlayer.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QMediaPlayer.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayer.setMuted": ('bool',), + "QMediaPlayer.setNetworkConfigurations": ('list',), + "QMediaPlayer.setPlaybackRate": ('float',), + "QMediaPlayer.setPlaylist": ('PySide2.QtMultimedia.QMediaPlaylist',), + "QMediaPlayer.setPosition": ('int',), + "QMediaPlayer.setVideoOutput": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QMediaPlayer.setVolume": ('int',), + "QMediaPlayer.state": (), + "QMediaPlayer.stop": (), + "QMediaPlayer.supportedAudioRoles": (), + "QMediaPlayer.supportedMimeTypes": ('Flags',), + "QMediaPlayer.unbind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.volume": (), + + # class PySide2.QtMultimedia.QMediaPlayerControl: + "QMediaPlayerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlayerControl.availablePlaybackRanges": (), + "QMediaPlayerControl.bufferStatus": (), + "QMediaPlayerControl.duration": (), + "QMediaPlayerControl.isAudioAvailable": (), + "QMediaPlayerControl.isMuted": (), + "QMediaPlayerControl.isSeekable": (), + "QMediaPlayerControl.isVideoAvailable": (), + "QMediaPlayerControl.media": (), + "QMediaPlayerControl.mediaStatus": (), + "QMediaPlayerControl.mediaStream": (), + "QMediaPlayerControl.pause": (), + "QMediaPlayerControl.play": (), + "QMediaPlayerControl.playbackRate": (), + "QMediaPlayerControl.position": (), + "QMediaPlayerControl.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayerControl.setMuted": ('bool',), + "QMediaPlayerControl.setPlaybackRate": ('float',), + "QMediaPlayerControl.setPosition": ('int',), + "QMediaPlayerControl.setVolume": ('int',), + "QMediaPlayerControl.state": (), + "QMediaPlayerControl.stop": (), + "QMediaPlayerControl.volume": (), + + # class PySide2.QtMultimedia.QMediaPlaylist: + "QMediaPlaylist.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlaylist.addMedia": [('PySide2.QtMultimedia.QMediaContent',), ('list',)], + "QMediaPlaylist.clear": (), + "QMediaPlaylist.currentIndex": (), + "QMediaPlaylist.currentMedia": (), + "QMediaPlaylist.error": (), + "QMediaPlaylist.errorString": (), + "QMediaPlaylist.insertMedia": [('int', 'PySide2.QtMultimedia.QMediaContent'), ('int', 'list')], + "QMediaPlaylist.isEmpty": (), + "QMediaPlaylist.isReadOnly": (), + "QMediaPlaylist.load": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaPlaylist.media": ('int',), + "QMediaPlaylist.mediaCount": (), + "QMediaPlaylist.mediaObject": (), + "QMediaPlaylist.next": (), + "QMediaPlaylist.nextIndex": ('int',), + "QMediaPlaylist.playbackMode": (), + "QMediaPlaylist.previous": (), + "QMediaPlaylist.previousIndex": ('int',), + "QMediaPlaylist.removeMedia": [('int',), ('int', 'int')], + "QMediaPlaylist.save": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str')], + "QMediaPlaylist.setCurrentIndex": ('int',), + "QMediaPlaylist.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaPlaylist.setPlaybackMode": ('PySide2.QtMultimedia.QMediaPlaylist.PlaybackMode',), + "QMediaPlaylist.shuffle": (), + + # class PySide2.QtMultimedia.QMediaRecorder: + "QMediaRecorder.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QMediaRecorder.actualLocation": (), + "QMediaRecorder.audioCodecDescription": ('str',), + "QMediaRecorder.audioSettings": (), + "QMediaRecorder.availability": (), + "QMediaRecorder.availableMetaData": (), + "QMediaRecorder.containerDescription": ('str',), + "QMediaRecorder.containerFormat": (), + "QMediaRecorder.duration": (), + "QMediaRecorder.errorString": (), + "QMediaRecorder.isAvailable": (), + "QMediaRecorder.isMetaDataAvailable": (), + "QMediaRecorder.isMetaDataWritable": (), + "QMediaRecorder.isMuted": (), + "QMediaRecorder.mediaObject": (), + "QMediaRecorder.metaData": ('str',), + "QMediaRecorder.outputLocation": (), + "QMediaRecorder.pause": (), + "QMediaRecorder.record": (), + "QMediaRecorder.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QMediaRecorder.setContainerFormat": ('str',), + "QMediaRecorder.setEncodingSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings', 'PySide2.QtMultimedia.QVideoEncoderSettings', 'str'), + "QMediaRecorder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaRecorder.setMetaData": ('str', 'PySide2.support.signature.typing.Any'), + "QMediaRecorder.setMuted": ('bool',), + "QMediaRecorder.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorder.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QMediaRecorder.setVolume": ('float',), + "QMediaRecorder.state": (), + "QMediaRecorder.status": (), + "QMediaRecorder.stop": (), + "QMediaRecorder.supportedAudioCodecs": (), + "QMediaRecorder.supportedContainers": (), + "QMediaRecorder.supportedVideoCodecs": (), + "QMediaRecorder.videoCodecDescription": ('str',), + "QMediaRecorder.videoSettings": (), + "QMediaRecorder.volume": (), + + # class PySide2.QtMultimedia.QMediaRecorderControl: + "QMediaRecorderControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaRecorderControl.applySettings": (), + "QMediaRecorderControl.duration": (), + "QMediaRecorderControl.isMuted": (), + "QMediaRecorderControl.outputLocation": (), + "QMediaRecorderControl.setMuted": ('bool',), + "QMediaRecorderControl.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorderControl.setState": ('PySide2.QtMultimedia.QMediaRecorder.State',), + "QMediaRecorderControl.setVolume": ('float',), + "QMediaRecorderControl.state": (), + "QMediaRecorderControl.status": (), + "QMediaRecorderControl.volume": (), + + # class PySide2.QtMultimedia.QMediaResource: + "QMediaResource.__init__": [(), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaResource.__copy__": (), + "QMediaResource.audioBitRate": (), + "QMediaResource.audioCodec": (), + "QMediaResource.channelCount": (), + "QMediaResource.dataSize": (), + "QMediaResource.isNull": (), + "QMediaResource.language": (), + "QMediaResource.mimeType": (), + "QMediaResource.request": (), + "QMediaResource.resolution": (), + "QMediaResource.sampleRate": (), + "QMediaResource.setAudioBitRate": ('int',), + "QMediaResource.setAudioCodec": ('str',), + "QMediaResource.setChannelCount": ('int',), + "QMediaResource.setDataSize": ('int',), + "QMediaResource.setLanguage": ('str',), + "QMediaResource.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QMediaResource.setSampleRate": ('int',), + "QMediaResource.setVideoBitRate": ('int',), + "QMediaResource.setVideoCodec": ('str',), + "QMediaResource.url": (), + "QMediaResource.videoBitRate": (), + "QMediaResource.videoCodec": (), + + # class PySide2.QtMultimedia.QMediaTimeRange: + "QMediaTimeRange.__init__": [(), ('PySide2.QtMultimedia.QMediaTimeRange',), ('int', 'int')], + "QMediaTimeRange.__copy__": (), + "QMediaTimeRange.addInterval": ('int', 'int'), + "QMediaTimeRange.addTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + "QMediaTimeRange.clear": (), + "QMediaTimeRange.contains": ('int',), + "QMediaTimeRange.earliestTime": (), + "QMediaTimeRange.isContinuous": (), + "QMediaTimeRange.isEmpty": (), + "QMediaTimeRange.latestTime": (), + "QMediaTimeRange.removeInterval": ('int', 'int'), + "QMediaTimeRange.removeTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + + # class PySide2.QtMultimedia.QMultimedia: + + # class PySide2.QtMultimedia.QRadioData: + "QRadioData.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QRadioData.availability": (), + "QRadioData.errorString": (), + "QRadioData.isAlternativeFrequenciesEnabled": (), + "QRadioData.mediaObject": (), + "QRadioData.programType": (), + "QRadioData.programTypeName": (), + "QRadioData.radioText": (), + "QRadioData.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioData.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QRadioData.stationId": (), + "QRadioData.stationName": (), + + # class PySide2.QtMultimedia.QRadioDataControl: + "QRadioDataControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioDataControl.errorString": (), + "QRadioDataControl.isAlternativeFrequenciesEnabled": (), + "QRadioDataControl.programType": (), + "QRadioDataControl.programTypeName": (), + "QRadioDataControl.radioText": (), + "QRadioDataControl.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioDataControl.stationId": (), + "QRadioDataControl.stationName": (), + + # class PySide2.QtMultimedia.QRadioTuner: + "QRadioTuner.__init__": ('PySide2.QtCore.QObject',), + "QRadioTuner.availability": (), + "QRadioTuner.band": (), + "QRadioTuner.cancelSearch": (), + "QRadioTuner.errorString": (), + "QRadioTuner.frequency": (), + "QRadioTuner.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isAntennaConnected": (), + "QRadioTuner.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isMuted": (), + "QRadioTuner.isSearching": (), + "QRadioTuner.isStereo": (), + "QRadioTuner.radioData": (), + "QRadioTuner.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTuner.searchBackward": (), + "QRadioTuner.searchForward": (), + "QRadioTuner.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.setFrequency": ('int',), + "QRadioTuner.setMuted": ('bool',), + "QRadioTuner.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTuner.setVolume": ('int',), + "QRadioTuner.signalStrength": (), + "QRadioTuner.start": (), + "QRadioTuner.state": (), + "QRadioTuner.stereoMode": (), + "QRadioTuner.stop": (), + "QRadioTuner.volume": (), + + # class PySide2.QtMultimedia.QRadioTunerControl: + "QRadioTunerControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioTunerControl.band": (), + "QRadioTunerControl.cancelSearch": (), + "QRadioTunerControl.errorString": (), + "QRadioTunerControl.frequency": (), + "QRadioTunerControl.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isAntennaConnected": (), + "QRadioTunerControl.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isMuted": (), + "QRadioTunerControl.isSearching": (), + "QRadioTunerControl.isStereo": (), + "QRadioTunerControl.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTunerControl.searchBackward": (), + "QRadioTunerControl.searchForward": (), + "QRadioTunerControl.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.setFrequency": ('int',), + "QRadioTunerControl.setMuted": ('bool',), + "QRadioTunerControl.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTunerControl.setVolume": ('int',), + "QRadioTunerControl.signalStrength": (), + "QRadioTunerControl.start": (), + "QRadioTunerControl.state": (), + "QRadioTunerControl.stereoMode": (), + "QRadioTunerControl.stop": (), + "QRadioTunerControl.volume": (), + + # class PySide2.QtMultimedia.QSound: + "QSound.__init__": ('str', 'PySide2.QtCore.QObject'), + "QSound.fileName": (), + "QSound.isFinished": (), + "QSound.loops": (), + "QSound.loopsRemaining": (), + "QSound.play": [(), ('str',)], + "QSound.setLoops": ('int',), + "QSound.stop": (), + + # class PySide2.QtMultimedia.QSoundEffect: + "QSoundEffect.__init__": ('PySide2.QtCore.QObject',), + "QSoundEffect.category": (), + "QSoundEffect.isLoaded": (), + "QSoundEffect.isMuted": (), + "QSoundEffect.isPlaying": (), + "QSoundEffect.loopCount": (), + "QSoundEffect.loopsRemaining": (), + "QSoundEffect.play": (), + "QSoundEffect.setCategory": ('str',), + "QSoundEffect.setLoopCount": ('int',), + "QSoundEffect.setMuted": ('bool',), + "QSoundEffect.setSource": ('PySide2.QtCore.QUrl',), + "QSoundEffect.setVolume": ('float',), + "QSoundEffect.source": (), + "QSoundEffect.status": (), + "QSoundEffect.stop": (), + "QSoundEffect.supportedMimeTypes": (), + "QSoundEffect.volume": (), + + # class PySide2.QtMultimedia.QVideoDeviceSelectorControl: + "QVideoDeviceSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoDeviceSelectorControl.defaultDevice": (), + "QVideoDeviceSelectorControl.deviceCount": (), + "QVideoDeviceSelectorControl.deviceDescription": ('int',), + "QVideoDeviceSelectorControl.deviceName": ('int',), + "QVideoDeviceSelectorControl.selectedDevice": (), + "QVideoDeviceSelectorControl.setSelectedDevice": ('int',), + + # class PySide2.QtMultimedia.QVideoEncoderSettings: + "QVideoEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QVideoEncoderSettings',)], + "QVideoEncoderSettings.__copy__": (), + "QVideoEncoderSettings.bitRate": (), + "QVideoEncoderSettings.codec": (), + "QVideoEncoderSettings.encodingMode": (), + "QVideoEncoderSettings.encodingOption": ('str',), + "QVideoEncoderSettings.encodingOptions": (), + "QVideoEncoderSettings.frameRate": (), + "QVideoEncoderSettings.isNull": (), + "QVideoEncoderSettings.quality": (), + "QVideoEncoderSettings.resolution": (), + "QVideoEncoderSettings.setBitRate": ('int',), + "QVideoEncoderSettings.setCodec": ('str',), + "QVideoEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QVideoEncoderSettings.setEncodingOption": ('str', 'PySide2.support.signature.typing.Any'), + "QVideoEncoderSettings.setEncodingOptions": ('dict',), + "QVideoEncoderSettings.setFrameRate": ('float',), + "QVideoEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QVideoEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QVideoEncoderSettingsControl: + "QVideoEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoEncoderSettingsControl.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QVideoEncoderSettingsControl.supportedVideoCodecs": (), + "QVideoEncoderSettingsControl.videoCodecDescription": ('str',), + "QVideoEncoderSettingsControl.videoSettings": (), + + # class PySide2.QtMultimedia.QVideoFilterRunnable: + "QVideoFilterRunnable.__init__": (), + "QVideoFilterRunnable.run": ('PySide2.QtMultimedia.QVideoFrame', 'PySide2.QtMultimedia.QVideoSurfaceFormat', 'RunFlags'), + + # class PySide2.QtMultimedia.QVideoFrame: + "QVideoFrame.__init__": [(), ('PySide2.QtGui.QImage',), ('PySide2.QtMultimedia.QAbstractVideoBuffer', 'PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat'), ('PySide2.QtMultimedia.QVideoFrame',), ('int', 'PySide2.QtCore.QSize', 'int', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat')], + "QVideoFrame.__copy__": (), + "QVideoFrame.availableMetaData": (), + "QVideoFrame.bits": [], + "QVideoFrame.bytesPerLine": [(), ('int',)], + "QVideoFrame.endTime": (), + "QVideoFrame.fieldType": (), + "QVideoFrame.handle": (), + "QVideoFrame.handleType": (), + "QVideoFrame.height": (), + "QVideoFrame.imageFormatFromPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QVideoFrame.isMapped": (), + "QVideoFrame.isReadable": (), + "QVideoFrame.isValid": (), + "QVideoFrame.isWritable": (), + "QVideoFrame.map": ('PySide2.QtMultimedia.QAbstractVideoBuffer.MapMode',), + "QVideoFrame.mapMode": (), + "QVideoFrame.mappedBytes": (), + "QVideoFrame.metaData": ('str',), + "QVideoFrame.pixelFormat": (), + "QVideoFrame.pixelFormatFromImageFormat": ('PySide2.QtGui.QImage.Format',), + "QVideoFrame.planeCount": (), + "QVideoFrame.setEndTime": ('int',), + "QVideoFrame.setFieldType": ('PySide2.QtMultimedia.QVideoFrame.FieldType',), + "QVideoFrame.setMetaData": ('str', 'PySide2.support.signature.typing.Any'), + "QVideoFrame.setStartTime": ('int',), + "QVideoFrame.size": (), + "QVideoFrame.startTime": (), + "QVideoFrame.unmap": (), + "QVideoFrame.width": (), + + # class PySide2.QtMultimedia.QVideoProbe: + "QVideoProbe.__init__": ('PySide2.QtCore.QObject',), + "QVideoProbe.isActive": (), + "QVideoProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QVideoRendererControl: + "QVideoRendererControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoRendererControl.setSurface": ('PySide2.QtMultimedia.QAbstractVideoSurface',), + "QVideoRendererControl.surface": (), + + # class PySide2.QtMultimedia.QVideoSurfaceFormat: + "QVideoSurfaceFormat.__init__": [(), ('PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat', 'PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType'), ('PySide2.QtMultimedia.QVideoSurfaceFormat',)], + "QVideoSurfaceFormat.__copy__": (), + "QVideoSurfaceFormat.frameHeight": (), + "QVideoSurfaceFormat.frameRate": (), + "QVideoSurfaceFormat.frameSize": (), + "QVideoSurfaceFormat.frameWidth": (), + "QVideoSurfaceFormat.handleType": (), + "QVideoSurfaceFormat.isValid": (), + "QVideoSurfaceFormat.pixelAspectRatio": (), + "QVideoSurfaceFormat.pixelFormat": (), + "QVideoSurfaceFormat.property": ('str',), + "QVideoSurfaceFormat.propertyNames": (), + "QVideoSurfaceFormat.scanLineDirection": (), + "QVideoSurfaceFormat.setFrameRate": ('float',), + "QVideoSurfaceFormat.setFrameSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setProperty": ('str', 'PySide2.support.signature.typing.Any'), + "QVideoSurfaceFormat.setScanLineDirection": ('PySide2.QtMultimedia.QVideoSurfaceFormat.Direction',), + "QVideoSurfaceFormat.setViewport": ('PySide2.QtCore.QRect',), + "QVideoSurfaceFormat.setYCbCrColorSpace": ('PySide2.QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace',), + "QVideoSurfaceFormat.sizeHint": (), + "QVideoSurfaceFormat.viewport": (), + "QVideoSurfaceFormat.yCbCrColorSpace": (), + + # class PySide2.QtMultimedia.QVideoWindowControl: + "QVideoWindowControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWindowControl.aspectRatioMode": (), + "QVideoWindowControl.brightness": (), + "QVideoWindowControl.contrast": (), + "QVideoWindowControl.displayRect": (), + "QVideoWindowControl.hue": (), + "QVideoWindowControl.isFullScreen": (), + "QVideoWindowControl.nativeSize": (), + "QVideoWindowControl.repaint": (), + "QVideoWindowControl.saturation": (), + "QVideoWindowControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWindowControl.setBrightness": ('int',), + "QVideoWindowControl.setContrast": ('int',), + "QVideoWindowControl.setDisplayRect": ('PySide2.QtCore.QRect',), + "QVideoWindowControl.setFullScreen": ('bool',), + "QVideoWindowControl.setHue": ('int',), + "QVideoWindowControl.setSaturation": ('int',), + "QVideoWindowControl.setWinId": ('int',), + "QVideoWindowControl.winId": (), + }) + +# Module PySide2.QtMultimediaWidgets +if "PySide2.QtMultimediaWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtMultimediaWidgets.QCameraViewfinder: + "QCameraViewfinder.__init__": ('PySide2.QtWidgets.QWidget',), + "QCameraViewfinder.mediaObject": (), + "QCameraViewfinder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimediaWidgets.QGraphicsVideoItem: + "QGraphicsVideoItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsVideoItem.aspectRatioMode": (), + "QGraphicsVideoItem.boundingRect": (), + "QGraphicsVideoItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'PySide2.support.signature.typing.Any'), + "QGraphicsVideoItem.mediaObject": (), + "QGraphicsVideoItem.nativeSize": (), + "QGraphicsVideoItem.offset": (), + "QGraphicsVideoItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsVideoItem.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QGraphicsVideoItem.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QGraphicsVideoItem.setOffset": ('PySide2.QtCore.QPointF',), + "QGraphicsVideoItem.setSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsVideoItem.size": (), + "QGraphicsVideoItem.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtMultimediaWidgets.QVideoWidget: + "QVideoWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QVideoWidget.aspectRatioMode": (), + "QVideoWidget.brightness": (), + "QVideoWidget.contrast": (), + "QVideoWidget.event": ('PySide2.QtCore.QEvent',), + "QVideoWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QVideoWidget.hue": (), + "QVideoWidget.isFullScreen": (), + "QVideoWidget.mediaObject": (), + "QVideoWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QVideoWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QVideoWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QVideoWidget.saturation": (), + "QVideoWidget.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidget.setBrightness": ('int',), + "QVideoWidget.setContrast": ('int',), + "QVideoWidget.setFullScreen": ('bool',), + "QVideoWidget.setHue": ('int',), + "QVideoWidget.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QVideoWidget.setSaturation": ('int',), + "QVideoWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QVideoWidget.sizeHint": (), + + # class PySide2.QtMultimediaWidgets.QVideoWidgetControl: + "QVideoWidgetControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWidgetControl.aspectRatioMode": (), + "QVideoWidgetControl.brightness": (), + "QVideoWidgetControl.contrast": (), + "QVideoWidgetControl.hue": (), + "QVideoWidgetControl.isFullScreen": (), + "QVideoWidgetControl.saturation": (), + "QVideoWidgetControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidgetControl.setBrightness": ('int',), + "QVideoWidgetControl.setContrast": ('int',), + "QVideoWidgetControl.setFullScreen": ('bool',), + "QVideoWidgetControl.setHue": ('int',), + "QVideoWidgetControl.setSaturation": ('int',), + "QVideoWidgetControl.videoWidget": (), + }) + +# Module PySide2.QtOpenGL +if "PySide2.QtOpenGL" in sys.modules: + dict.update({ + + # class PySide2.QtOpenGL.QGL: + + # class PySide2.QtOpenGL.QGLBuffer: + "QGLBuffer.__init__": [(), ('PySide2.QtOpenGL.QGLBuffer',), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.allocate": [('int',), ('int', 'int')], + "QGLBuffer.bind": (), + "QGLBuffer.bufferId": (), + "QGLBuffer.create": (), + "QGLBuffer.destroy": (), + "QGLBuffer.isCreated": (), + "QGLBuffer.map": ('PySide2.QtOpenGL.QGLBuffer.Access',), + "QGLBuffer.read": ('int', 'int', 'int'), + "QGLBuffer.release": [(), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.setUsagePattern": ('PySide2.QtOpenGL.QGLBuffer.UsagePattern',), + "QGLBuffer.size": (), + "QGLBuffer.type": (), + "QGLBuffer.unmap": (), + "QGLBuffer.usagePattern": (), + "QGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtOpenGL.QGLColormap: + "QGLColormap.__init__": [(), ('PySide2.QtOpenGL.QGLColormap',)], + "QGLColormap.__copy__": (), + "QGLColormap.entryColor": ('int',), + "QGLColormap.entryRgb": ('int',), + "QGLColormap.find": ('int',), + "QGLColormap.findNearest": ('int',), + "QGLColormap.handle": (), + "QGLColormap.isEmpty": (), + "QGLColormap.setEntry": [('int', 'PySide2.QtGui.QColor'), ('int', 'int')], + "QGLColormap.setHandle": ('int',), + "QGLColormap.size": (), + + # class PySide2.QtOpenGL.QGLContext: + "QGLContext.__init__": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.areSharing": ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtOpenGL.QGLContext'), + "QGLContext.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'BindOptions'), ('str',)], + "QGLContext.chooseContext": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.colorIndex": ('PySide2.QtGui.QColor',), + "QGLContext.contextHandle": (), + "QGLContext.create": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.currentContext": (), + "QGLContext.deleteTexture": ('int',), + "QGLContext.device": (), + "QGLContext.deviceIsPixmap": (), + "QGLContext.doneCurrent": (), + "QGLContext.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLContext.format": (), + "QGLContext.fromOpenGLContext": ('PySide2.QtGui.QOpenGLContext',), + "QGLContext.initialized": (), + "QGLContext.isSharing": (), + "QGLContext.isValid": (), + "QGLContext.makeCurrent": (), + "QGLContext.moveToThread": ('PySide2.QtCore.QThread',), + "QGLContext.overlayTransparentColor": (), + "QGLContext.requestedFormat": (), + "QGLContext.reset": (), + "QGLContext.setDevice": ('PySide2.QtGui.QPaintDevice',), + "QGLContext.setFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.setInitialized": ('bool',), + "QGLContext.setTextureCacheLimit": ('int',), + "QGLContext.setValid": ('bool',), + "QGLContext.setWindowCreated": ('bool',), + "QGLContext.swapBuffers": (), + "QGLContext.textureCacheLimit": (), + "QGLContext.windowCreated": (), + + # class PySide2.QtOpenGL.QGLFormat: + "QGLFormat.__init__": [(), ('FormatOptions', 'int'), ('PySide2.QtOpenGL.QGLFormat',)], + "QGLFormat.__copy__": (), + "QGLFormat.accum": (), + "QGLFormat.accumBufferSize": (), + "QGLFormat.alpha": (), + "QGLFormat.alphaBufferSize": (), + "QGLFormat.blueBufferSize": (), + "QGLFormat.defaultFormat": (), + "QGLFormat.defaultOverlayFormat": (), + "QGLFormat.depth": (), + "QGLFormat.depthBufferSize": (), + "QGLFormat.directRendering": (), + "QGLFormat.doubleBuffer": (), + "QGLFormat.fromSurfaceFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QGLFormat.greenBufferSize": (), + "QGLFormat.hasOpenGL": (), + "QGLFormat.hasOpenGLOverlays": (), + "QGLFormat.hasOverlay": (), + "QGLFormat.majorVersion": (), + "QGLFormat.minorVersion": (), + "QGLFormat.openGLVersionFlags": (), + "QGLFormat.plane": (), + "QGLFormat.profile": (), + "QGLFormat.redBufferSize": (), + "QGLFormat.rgba": (), + "QGLFormat.sampleBuffers": (), + "QGLFormat.samples": (), + "QGLFormat.setAccum": ('bool',), + "QGLFormat.setAccumBufferSize": ('int',), + "QGLFormat.setAlpha": ('bool',), + "QGLFormat.setAlphaBufferSize": ('int',), + "QGLFormat.setBlueBufferSize": ('int',), + "QGLFormat.setDefaultFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDefaultOverlayFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDepth": ('bool',), + "QGLFormat.setDepthBufferSize": ('int',), + "QGLFormat.setDirectRendering": ('bool',), + "QGLFormat.setDoubleBuffer": ('bool',), + "QGLFormat.setGreenBufferSize": ('int',), + "QGLFormat.setOption": ('FormatOptions',), + "QGLFormat.setOverlay": ('bool',), + "QGLFormat.setPlane": ('int',), + "QGLFormat.setProfile": ('PySide2.QtOpenGL.QGLFormat.OpenGLContextProfile',), + "QGLFormat.setRedBufferSize": ('int',), + "QGLFormat.setRgba": ('bool',), + "QGLFormat.setSampleBuffers": ('bool',), + "QGLFormat.setSamples": ('int',), + "QGLFormat.setStencil": ('bool',), + "QGLFormat.setStencilBufferSize": ('int',), + "QGLFormat.setStereo": ('bool',), + "QGLFormat.setSwapInterval": ('int',), + "QGLFormat.setVersion": ('int', 'int'), + "QGLFormat.stencil": (), + "QGLFormat.stencilBufferSize": (), + "QGLFormat.stereo": (), + "QGLFormat.swapInterval": (), + "QGLFormat.testOption": ('FormatOptions',), + "QGLFormat.toSurfaceFormat": ('PySide2.QtOpenGL.QGLFormat',), + + # class PySide2.QtOpenGL.QGLFramebufferObject: + "QGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QGLFramebufferObject.attachment": (), + "QGLFramebufferObject.bind": (), + "QGLFramebufferObject.bindDefault": (), + "QGLFramebufferObject.blitFramebuffer": ('PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), + "QGLFramebufferObject.devType": (), + "QGLFramebufferObject.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLFramebufferObject.format": (), + "QGLFramebufferObject.handle": (), + "QGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QGLFramebufferObject.isBound": (), + "QGLFramebufferObject.isValid": (), + "QGLFramebufferObject.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLFramebufferObject.paintEngine": (), + "QGLFramebufferObject.release": (), + "QGLFramebufferObject.size": (), + "QGLFramebufferObject.texture": (), + "QGLFramebufferObject.toImage": (), + + # class PySide2.QtOpenGL.QGLFramebufferObjectFormat: + "QGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtOpenGL.QGLFramebufferObjectFormat',)], + "QGLFramebufferObjectFormat.__copy__": (), + "QGLFramebufferObjectFormat.attachment": (), + "QGLFramebufferObjectFormat.internalTextureFormat": (), + "QGLFramebufferObjectFormat.mipmap": (), + "QGLFramebufferObjectFormat.samples": (), + "QGLFramebufferObjectFormat.setAttachment": ('PySide2.QtOpenGL.QGLFramebufferObject.Attachment',), + "QGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QGLFramebufferObjectFormat.setMipmap": ('bool',), + "QGLFramebufferObjectFormat.setSamples": ('int',), + "QGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtOpenGL.QGLPixelBuffer: + "QGLPixelBuffer.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget'), ('int', 'int', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget')], + "QGLPixelBuffer.bindTexture": [('PySide2.QtGui.QImage', 'int'), ('PySide2.QtGui.QPixmap', 'int'), ('str',)], + "QGLPixelBuffer.bindToDynamicTexture": ('int',), + "QGLPixelBuffer.context": (), + "QGLPixelBuffer.deleteTexture": ('int',), + "QGLPixelBuffer.devType": (), + "QGLPixelBuffer.doneCurrent": (), + "QGLPixelBuffer.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLPixelBuffer.format": (), + "QGLPixelBuffer.generateDynamicTexture": (), + "QGLPixelBuffer.handle": (), + "QGLPixelBuffer.hasOpenGLPbuffers": (), + "QGLPixelBuffer.isValid": (), + "QGLPixelBuffer.makeCurrent": (), + "QGLPixelBuffer.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLPixelBuffer.paintEngine": (), + "QGLPixelBuffer.releaseFromDynamicTexture": (), + "QGLPixelBuffer.size": (), + "QGLPixelBuffer.toImage": (), + "QGLPixelBuffer.updateDynamicTexture": ('int',), + + # class PySide2.QtOpenGL.QGLShader: + "QGLShader.__init__": [('ShaderType', 'PySide2.QtCore.QObject'), ('ShaderType', 'PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShader.compileSourceFile": ('str',), + "QGLShader.hasOpenGLShaders": ('ShaderType', 'PySide2.QtOpenGL.QGLContext'), + "QGLShader.isCompiled": (), + "QGLShader.log": (), + "QGLShader.shaderId": (), + "QGLShader.shaderType": (), + "QGLShader.sourceCode": (), + + # class PySide2.QtOpenGL.QGLShaderProgram: + "QGLShaderProgram.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShaderProgram.addShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.addShaderFromSourceCode": [('ShaderType', 'PySide2.QtCore.QByteArray'), ('ShaderType', 'str')], + "QGLShaderProgram.addShaderFromSourceFile": ('ShaderType', 'str'), + "QGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShaderProgram.bind": (), + "QGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.geometryInputType": (), + "QGLShaderProgram.geometryOutputType": (), + "QGLShaderProgram.geometryOutputVertexCount": (), + "QGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtOpenGL.QGLContext',), + "QGLShaderProgram.isLinked": (), + "QGLShaderProgram.link": (), + "QGLShaderProgram.log": (), + "QGLShaderProgram.maxGeometryOutputVertices": (), + "QGLShaderProgram.programId": (), + "QGLShaderProgram.release": (), + "QGLShaderProgram.removeAllShaders": (), + "QGLShaderProgram.removeShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.setAttributeArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setAttributeArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setAttributeArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float')], + "QGLShaderProgram.setGeometryInputType": ('int',), + "QGLShaderProgram.setGeometryOutputType": ('int',), + "QGLShaderProgram.setGeometryOutputVertexCount": ('int',), + "QGLShaderProgram.setUniformValue": [('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QGLShaderProgram.setUniformValueArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setUniformValueArray2x2": [('int', 'PySide2.QtGui.QMatrix2x2', 'int'), ('str', 'PySide2.QtGui.QMatrix2x2', 'int')], + "QGLShaderProgram.setUniformValueArray2x3": [('int', 'PySide2.QtGui.QMatrix2x3', 'int'), ('str', 'PySide2.QtGui.QMatrix2x3', 'int')], + "QGLShaderProgram.setUniformValueArray2x4": [('int', 'PySide2.QtGui.QMatrix2x4', 'int'), ('str', 'PySide2.QtGui.QMatrix2x4', 'int')], + "QGLShaderProgram.setUniformValueArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setUniformValueArray3x2": [('int', 'PySide2.QtGui.QMatrix3x2', 'int'), ('str', 'PySide2.QtGui.QMatrix3x2', 'int')], + "QGLShaderProgram.setUniformValueArray3x3": [('int', 'PySide2.QtGui.QMatrix3x3', 'int'), ('str', 'PySide2.QtGui.QMatrix3x3', 'int')], + "QGLShaderProgram.setUniformValueArray3x4": [('int', 'PySide2.QtGui.QMatrix3x4', 'int'), ('str', 'PySide2.QtGui.QMatrix3x4', 'int')], + "QGLShaderProgram.setUniformValueArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setUniformValueArray4x2": [('int', 'PySide2.QtGui.QMatrix4x2', 'int'), ('str', 'PySide2.QtGui.QMatrix4x2', 'int')], + "QGLShaderProgram.setUniformValueArray4x3": [('int', 'PySide2.QtGui.QMatrix4x3', 'int'), ('str', 'PySide2.QtGui.QMatrix4x3', 'int')], + "QGLShaderProgram.setUniformValueArray4x4": [('int', 'PySide2.QtGui.QMatrix4x4', 'int'), ('str', 'PySide2.QtGui.QMatrix4x4', 'int')], + "QGLShaderProgram.setUniformValueArrayInt": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.setUniformValueArrayUint": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.shaders": (), + "QGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtOpenGL.QGLWidget: + "QGLWidget.__init__": [('PySide2.QtOpenGL.QGLContext', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags'), ('PySide2.QtOpenGL.QGLFormat', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags')], + "QGLWidget.autoBufferSwap": (), + "QGLWidget.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'BindOptions'), ('str',)], + "QGLWidget.colormap": (), + "QGLWidget.context": (), + "QGLWidget.convertToGLFormat": ('PySide2.QtGui.QImage',), + "QGLWidget.deleteTexture": ('int',), + "QGLWidget.doneCurrent": (), + "QGLWidget.doubleBuffer": (), + "QGLWidget.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLWidget.event": ('PySide2.QtCore.QEvent',), + "QGLWidget.format": (), + "QGLWidget.glDraw": (), + "QGLWidget.glInit": (), + "QGLWidget.grabFrameBuffer": ('bool',), + "QGLWidget.initializeGL": (), + "QGLWidget.initializeOverlayGL": (), + "QGLWidget.isSharing": (), + "QGLWidget.isValid": (), + "QGLWidget.makeCurrent": (), + "QGLWidget.makeOverlayCurrent": (), + "QGLWidget.overlayContext": (), + "QGLWidget.paintEngine": (), + "QGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGLWidget.paintGL": (), + "QGLWidget.paintOverlayGL": (), + "QGLWidget.qglClearColor": ('PySide2.QtGui.QColor',), + "QGLWidget.qglColor": ('PySide2.QtGui.QColor',), + "QGLWidget.renderPixmap": ('int', 'int', 'bool'), + "QGLWidget.renderText": [('float', 'float', 'float', 'str', 'PySide2.QtGui.QFont'), ('int', 'int', 'str', 'PySide2.QtGui.QFont')], + "QGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGLWidget.resizeGL": ('int', 'int'), + "QGLWidget.resizeOverlayGL": ('int', 'int'), + "QGLWidget.setAutoBufferSwap": ('bool',), + "QGLWidget.setColormap": ('PySide2.QtOpenGL.QGLColormap',), + "QGLWidget.swapBuffers": (), + "QGLWidget.updateGL": (), + "QGLWidget.updateOverlayGL": (), + }) + +# Module PySide2.QtQml +if "PySide2.QtQml" in sys.modules: + dict.update({ + + # class PySide2.QtQml.ListProperty: + + # class PySide2.QtQml.QJSEngine: + "QJSEngine.__init__": [(), ('PySide2.QtCore.QObject',)], + "QJSEngine.collectGarbage": (), + "QJSEngine.evaluate": ('str', 'str', 'int'), + "QJSEngine.globalObject": (), + "QJSEngine.installExtensions": ('Extensions', 'PySide2.QtQml.QJSValue'), + "QJSEngine.installTranslatorFunctions": ('PySide2.QtQml.QJSValue',), + "QJSEngine.newArray": ('int',), + "QJSEngine.newObject": (), + "QJSEngine.newQObject": ('PySide2.QtCore.QObject',), + "QJSEngine.toScriptValue": ('PySide2.support.signature.typing.Any',), + + # class PySide2.QtQml.QJSValue: + "QJSValue.__init__": [('PySide2.QtQml.QJSValue',), ('PySide2.QtQml.QJSValue.SpecialValue',), ('bool',), ('float',), ('int',), ('str',)], + "QJSValue.__copy__": (), + "QJSValue.call": ('list',), + "QJSValue.callAsConstructor": ('list',), + "QJSValue.callWithInstance": ('PySide2.QtQml.QJSValue', 'list'), + "QJSValue.deleteProperty": ('str',), + "QJSValue.engine": (), + "QJSValue.equals": ('PySide2.QtQml.QJSValue',), + "QJSValue.hasOwnProperty": ('str',), + "QJSValue.hasProperty": ('str',), + "QJSValue.isArray": (), + "QJSValue.isBool": (), + "QJSValue.isCallable": (), + "QJSValue.isDate": (), + "QJSValue.isError": (), + "QJSValue.isNull": (), + "QJSValue.isNumber": (), + "QJSValue.isObject": (), + "QJSValue.isQObject": (), + "QJSValue.isRegExp": (), + "QJSValue.isString": (), + "QJSValue.isUndefined": (), + "QJSValue.isVariant": (), + "QJSValue.property": [('int',), ('str',)], + "QJSValue.prototype": (), + "QJSValue.setProperty": [('int', 'PySide2.QtQml.QJSValue'), ('str', 'PySide2.QtQml.QJSValue')], + "QJSValue.setPrototype": ('PySide2.QtQml.QJSValue',), + "QJSValue.strictlyEquals": ('PySide2.QtQml.QJSValue',), + "QJSValue.toBool": (), + "QJSValue.toDateTime": (), + "QJSValue.toInt": (), + "QJSValue.toNumber": (), + "QJSValue.toQObject": (), + "QJSValue.toString": (), + "QJSValue.toUInt": (), + "QJSValue.toVariant": (), + + # class PySide2.QtQml.QJSValueIterator: + "QJSValueIterator.__init__": ('PySide2.QtQml.QJSValue',), + "QJSValueIterator.hasNext": (), + "QJSValueIterator.name": (), + "QJSValueIterator.next": (), + "QJSValueIterator.value": (), + + # class PySide2.QtQml.QQmlAbstractUrlInterceptor: + "QQmlAbstractUrlInterceptor.__init__": (), + "QQmlAbstractUrlInterceptor.intercept": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlAbstractUrlInterceptor.DataType'), + + # class PySide2.QtQml.QQmlApplicationEngine: + "QQmlApplicationEngine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QQmlApplicationEngine.load": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlApplicationEngine.loadData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlApplicationEngine.rootObjects": (), + + # class PySide2.QtQml.QQmlComponent: + "QQmlComponent.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject')], + "QQmlComponent.beginCreate": ('PySide2.QtQml.QQmlContext',), + "QQmlComponent.completeCreate": (), + "QQmlComponent.create": [('PySide2.QtQml.QQmlContext',), ('PySide2.QtQml.QQmlIncubator', 'PySide2.QtQml.QQmlContext', 'PySide2.QtQml.QQmlContext')], + "QQmlComponent.creationContext": (), + "QQmlComponent.errorString": (), + "QQmlComponent.errors": (), + "QQmlComponent.isError": (), + "QQmlComponent.isLoading": (), + "QQmlComponent.isNull": (), + "QQmlComponent.isReady": (), + "QQmlComponent.loadUrl": [('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode')], + "QQmlComponent.progress": (), + "QQmlComponent.setData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlComponent.status": (), + "QQmlComponent.url": (), + + # class PySide2.QtQml.QQmlContext: + "QQmlContext.__init__": [('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject')], + "QQmlContext.baseUrl": (), + "QQmlContext.contextObject": (), + "QQmlContext.contextProperty": ('str',), + "QQmlContext.engine": (), + "QQmlContext.isValid": (), + "QQmlContext.nameForObject": ('PySide2.QtCore.QObject',), + "QQmlContext.parentContext": (), + "QQmlContext.resolvedUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setContextObject": ('PySide2.QtCore.QObject',), + "QQmlContext.setContextProperty": [('str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.support.signature.typing.Any')], + + # class PySide2.QtQml.QQmlDebuggingEnabler: + "QQmlDebuggingEnabler.__init__": ('bool',), + "QQmlDebuggingEnabler.connectToLocalDebugger": ('str', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode'), + "QQmlDebuggingEnabler.startTcpDebugServer": ('int', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode', 'str'), + + # class PySide2.QtQml.QQmlEngine: + "QQmlEngine.__init__": ('PySide2.QtCore.QObject',), + "QQmlEngine.addImageProvider": ('str', 'PySide2.QtQml.QQmlImageProviderBase'), + "QQmlEngine.addImportPath": ('str',), + "QQmlEngine.addNamedBundle": ('str', 'str'), + "QQmlEngine.addPluginPath": ('str',), + "QQmlEngine.baseUrl": (), + "QQmlEngine.clearComponentCache": (), + "QQmlEngine.contextForObject": ('PySide2.QtCore.QObject',), + "QQmlEngine.event": ('PySide2.QtCore.QEvent',), + "QQmlEngine.imageProvider": ('str',), + "QQmlEngine.importPathList": (), + "QQmlEngine.importPlugin": ('str', 'str', 'list'), + "QQmlEngine.incubationController": (), + "QQmlEngine.networkAccessManager": (), + "QQmlEngine.networkAccessManagerFactory": (), + "QQmlEngine.objectOwnership": ('PySide2.QtCore.QObject',), + "QQmlEngine.offlineStoragePath": (), + "QQmlEngine.outputWarningsToStandardError": (), + "QQmlEngine.pluginPathList": (), + "QQmlEngine.removeImageProvider": ('str',), + "QQmlEngine.rootContext": (), + "QQmlEngine.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlEngine.setContextForObject": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), + "QQmlEngine.setImportPathList": ('PySide2.support.signature.typing.List',), + "QQmlEngine.setIncubationController": ('PySide2.QtQml.QQmlIncubationController',), + "QQmlEngine.setNetworkAccessManagerFactory": ('PySide2.QtQml.QQmlNetworkAccessManagerFactory',), + "QQmlEngine.setObjectOwnership": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine.ObjectOwnership'), + "QQmlEngine.setOfflineStoragePath": ('str',), + "QQmlEngine.setOutputWarningsToStandardError": ('bool',), + "QQmlEngine.setPluginPathList": ('PySide2.support.signature.typing.List',), + "QQmlEngine.setUrlInterceptor": ('PySide2.QtQml.QQmlAbstractUrlInterceptor',), + "QQmlEngine.trimComponentCache": (), + "QQmlEngine.urlInterceptor": (), + + # class PySide2.QtQml.QQmlError: + "QQmlError.__init__": [(), ('PySide2.QtQml.QQmlError',)], + "QQmlError.__copy__": (), + "QQmlError.column": (), + "QQmlError.description": (), + "QQmlError.isValid": (), + "QQmlError.line": (), + "QQmlError.object": (), + "QQmlError.setColumn": ('int',), + "QQmlError.setDescription": ('str',), + "QQmlError.setLine": ('int',), + "QQmlError.setObject": ('PySide2.QtCore.QObject',), + "QQmlError.setUrl": ('PySide2.QtCore.QUrl',), + "QQmlError.toString": (), + "QQmlError.url": (), + + # class PySide2.QtQml.QQmlExpression: + "QQmlExpression.__init__": [(), ('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlScriptString', 'PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QObject')], + "QQmlExpression.clearError": (), + "QQmlExpression.columnNumber": (), + "QQmlExpression.context": (), + "QQmlExpression.engine": (), + "QQmlExpression.error": (), + "QQmlExpression.evaluate": ('bool',), + "QQmlExpression.expression": (), + "QQmlExpression.hasError": (), + "QQmlExpression.lineNumber": (), + "QQmlExpression.notifyOnValueChanged": (), + "QQmlExpression.scopeObject": (), + "QQmlExpression.setExpression": ('str',), + "QQmlExpression.setNotifyOnValueChanged": ('bool',), + "QQmlExpression.setSourceLocation": ('str', 'int', 'int'), + "QQmlExpression.sourceFile": (), + + # class PySide2.QtQml.QQmlExtensionInterface: + "QQmlExtensionInterface.__init__": (), + "QQmlExtensionInterface.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + + # class PySide2.QtQml.QQmlExtensionPlugin: + "QQmlExtensionPlugin.__init__": ('PySide2.QtCore.QObject',), + "QQmlExtensionPlugin.baseUrl": (), + "QQmlExtensionPlugin.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + "QQmlExtensionPlugin.registerTypes": ('str',), + + # class PySide2.QtQml.QQmlFile: + "QQmlFile.__init__": [(), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.clear": [(), ('PySide2.QtCore.QObject',)], + "QQmlFile.connectDownloadProgress": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.connectFinished": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.data": (), + "QQmlFile.dataByteArray": (), + "QQmlFile.error": (), + "QQmlFile.isError": (), + "QQmlFile.isLoading": (), + "QQmlFile.isLocalFile": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.isNull": (), + "QQmlFile.isReady": (), + "QQmlFile.isSynchronous": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.load": [('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.size": (), + "QQmlFile.status": (), + "QQmlFile.url": (), + "QQmlFile.urlToLocalFileOrQrc": [('PySide2.QtCore.QUrl',), ('str',)], + + # class PySide2.QtQml.QQmlFileSelector: + "QQmlFileSelector.__init__": ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), + "QQmlFileSelector.get": ('PySide2.QtQml.QQmlEngine',), + "QQmlFileSelector.setExtraSelectors": ['PySide2.support.signature.typing.List'], + "QQmlFileSelector.setSelector": ('PySide2.QtCore.QFileSelector',), + + # class PySide2.QtQml.QQmlImageProviderBase: + "QQmlImageProviderBase.flags": (), + "QQmlImageProviderBase.imageType": (), + + # class PySide2.QtQml.QQmlIncubationController: + "QQmlIncubationController.__init__": (), + "QQmlIncubationController.engine": (), + "QQmlIncubationController.incubateFor": ('int',), + "QQmlIncubationController.incubateWhile": ('bool', 'int'), + "QQmlIncubationController.incubatingObjectCount": (), + "QQmlIncubationController.incubatingObjectCountChanged": ('int',), + + # class PySide2.QtQml.QQmlIncubator: + "QQmlIncubator.__init__": ('PySide2.QtQml.QQmlIncubator.IncubationMode',), + "QQmlIncubator.clear": (), + "QQmlIncubator.errors": (), + "QQmlIncubator.forceCompletion": (), + "QQmlIncubator.incubationMode": (), + "QQmlIncubator.isError": (), + "QQmlIncubator.isLoading": (), + "QQmlIncubator.isNull": (), + "QQmlIncubator.isReady": (), + "QQmlIncubator.object": (), + "QQmlIncubator.setInitialState": ('PySide2.QtCore.QObject',), + "QQmlIncubator.status": (), + "QQmlIncubator.statusChanged": ('PySide2.QtQml.QQmlIncubator.Status',), + + # class PySide2.QtQml.QQmlListReference: + "QQmlListReference.__init__": [(), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlListReference',)], + "QQmlListReference.__copy__": (), + "QQmlListReference.append": ('PySide2.QtCore.QObject',), + "QQmlListReference.at": ('int',), + "QQmlListReference.canAppend": (), + "QQmlListReference.canAt": (), + "QQmlListReference.canClear": (), + "QQmlListReference.canCount": (), + "QQmlListReference.clear": (), + "QQmlListReference.count": (), + "QQmlListReference.isManipulable": (), + "QQmlListReference.isReadable": (), + "QQmlListReference.isValid": (), + "QQmlListReference.listElementType": (), + "QQmlListReference.object": (), + + # class PySide2.QtQml.QQmlNetworkAccessManagerFactory: + "QQmlNetworkAccessManagerFactory.__init__": (), + "QQmlNetworkAccessManagerFactory.create": ('PySide2.QtCore.QObject',), + + # class PySide2.QtQml.QQmlParserStatus: + "QQmlParserStatus.__init__": (), + "QQmlParserStatus.classBegin": (), + "QQmlParserStatus.componentComplete": (), + + # class PySide2.QtQml.QQmlProperty: + "QQmlProperty.__init__": [(), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlProperty',)], + "QQmlProperty.__copy__": (), + "QQmlProperty.connectNotifySignal": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlProperty.hasNotifySignal": (), + "QQmlProperty.index": (), + "QQmlProperty.isDesignable": (), + "QQmlProperty.isProperty": (), + "QQmlProperty.isResettable": (), + "QQmlProperty.isSignalProperty": (), + "QQmlProperty.isValid": (), + "QQmlProperty.isWritable": (), + "QQmlProperty.method": (), + "QQmlProperty.name": (), + "QQmlProperty.needsNotifySignal": (), + "QQmlProperty.object": (), + "QQmlProperty.property": (), + "QQmlProperty.propertyType": (), + "QQmlProperty.propertyTypeCategory": (), + "QQmlProperty.propertyTypeName": (), + "QQmlProperty.read": [(), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine')], + "QQmlProperty.reset": (), + "QQmlProperty.type": (), + "QQmlProperty.write": [('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Any'), ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Any', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Any', 'PySide2.QtQml.QQmlEngine'), ('PySide2.support.signature.typing.Any',)], + + # class PySide2.QtQml.QQmlPropertyMap: + "QQmlPropertyMap.__init__": ('PySide2.QtCore.QObject',), + "QQmlPropertyMap.clear": ('str',), + "QQmlPropertyMap.contains": ('str',), + "QQmlPropertyMap.count": (), + "QQmlPropertyMap.insert": ('str', 'PySide2.support.signature.typing.Any'), + "QQmlPropertyMap.isEmpty": (), + "QQmlPropertyMap.keys": (), + "QQmlPropertyMap.size": (), + "QQmlPropertyMap.updateValue": ('str', 'PySide2.support.signature.typing.Any'), + "QQmlPropertyMap.value": ('str',), + + # class PySide2.QtQml.QQmlPropertyValueSource: + "QQmlPropertyValueSource.__init__": (), + "QQmlPropertyValueSource.setTarget": ('PySide2.QtQml.QQmlProperty',), + + # class PySide2.QtQml.QQmlScriptString: + "QQmlScriptString.__init__": [(), ('PySide2.QtQml.QQmlScriptString',)], + "QQmlScriptString.__copy__": (), + "QQmlScriptString.booleanLiteral": ('bool',), + "QQmlScriptString.isEmpty": (), + "QQmlScriptString.isNullLiteral": (), + "QQmlScriptString.isUndefinedLiteral": (), + "QQmlScriptString.numberLiteral": ('bool',), + "QQmlScriptString.stringLiteral": (), + + # class PySide2.QtQml.QQmlTypesExtensionInterface: + "QQmlTypesExtensionInterface.__init__": (), + "QQmlTypesExtensionInterface.registerTypes": ('str',), + + # class PySide2.QtQml.VolatileBool: + }) + +# Module PySide2.QtQuick +if "PySide2.QtQuick" in sys.modules: + dict.update({ + + # class PySide2.QtQuick.QQuickAsyncImageProvider: + "QQuickAsyncImageProvider.__init__": (), + "QQuickAsyncImageProvider.requestImageResponse": ('str', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickFramebufferObject: + "QQuickFramebufferObject.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickFramebufferObject.createRenderer": (), + "QQuickFramebufferObject.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickFramebufferObject.isTextureProvider": (), + "QQuickFramebufferObject.mirrorVertically": (), + "QQuickFramebufferObject.releaseResources": (), + "QQuickFramebufferObject.setMirrorVertically": ('bool',), + "QQuickFramebufferObject.setTextureFollowsItemSize": ('bool',), + "QQuickFramebufferObject.textureFollowsItemSize": (), + "QQuickFramebufferObject.textureProvider": (), + "QQuickFramebufferObject.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickImageProvider: + "QQuickImageProvider.__init__": ('PySide2.QtQml.QQmlImageProviderBase.ImageType', 'Flags'), + "QQuickImageProvider.flags": (), + "QQuickImageProvider.imageType": (), + "QQuickImageProvider.requestImage": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestPixmap": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestTexture": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickImageResponse: + "QQuickImageResponse.__init__": (), + "QQuickImageResponse.cancel": (), + "QQuickImageResponse.errorString": (), + "QQuickImageResponse.textureFactory": (), + + # class PySide2.QtQuick.QQuickItem: + "QQuickItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.acceptHoverEvents": (), + "QQuickItem.acceptedMouseButtons": (), + "QQuickItem.activeFocusOnTab": (), + "QQuickItem.antialiasing": (), + "QQuickItem.baselineOffset": (), + "QQuickItem.boundingRect": (), + "QQuickItem.childAt": ('float', 'float'), + "QQuickItem.childItems": (), + "QQuickItem.childMouseEventFilter": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickItem.childrenRect": (), + "QQuickItem.classBegin": (), + "QQuickItem.clip": (), + "QQuickItem.clipRect": (), + "QQuickItem.componentComplete": (), + "QQuickItem.contains": ('PySide2.QtCore.QPointF',), + "QQuickItem.cursor": (), + "QQuickItem.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickItem.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickItem.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickItem.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickItem.event": ('PySide2.QtCore.QEvent',), + "QQuickItem.filtersChildMouseEvents": (), + "QQuickItem.flags": (), + "QQuickItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.forceActiveFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QQuickItem.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickItem.grabMouse": (), + "QQuickItem.grabToImage": [('PySide2.QtCore.QSize',), ('PySide2.QtQml.QJSValue', 'PySide2.QtCore.QSize')], + "QQuickItem.grabTouchPoints": ('list',), + "QQuickItem.hasActiveFocus": (), + "QQuickItem.hasFocus": (), + "QQuickItem.height": (), + "QQuickItem.heightValid": (), + "QQuickItem.hoverEnterEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverLeaveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverMoveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.implicitHeight": (), + "QQuickItem.implicitWidth": (), + "QQuickItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QQuickItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QQuickItem.isComponentComplete": (), + "QQuickItem.isEnabled": (), + "QQuickItem.isFocusScope": (), + "QQuickItem.isTextureProvider": (), + "QQuickItem.isUnderMouse": (), + "QQuickItem.isVisible": (), + "QQuickItem.itemTransform": ('PySide2.QtQuick.QQuickItem', 'bool'), + "QQuickItem.keepMouseGrab": (), + "QQuickItem.keepTouchGrab": (), + "QQuickItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.mapFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapFromScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapRectFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectFromScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapRectToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectToScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapToScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseUngrabEvent": (), + "QQuickItem.nextItemInFocusChain": ('bool',), + "QQuickItem.opacity": (), + "QQuickItem.parentItem": (), + "QQuickItem.polish": (), + "QQuickItem.position": (), + "QQuickItem.releaseResources": (), + "QQuickItem.resetAntialiasing": (), + "QQuickItem.resetHeight": (), + "QQuickItem.resetWidth": (), + "QQuickItem.rotation": (), + "QQuickItem.scale": (), + "QQuickItem.scopedFocusItem": (), + "QQuickItem.setAcceptHoverEvents": ('bool',), + "QQuickItem.setAcceptedMouseButtons": ('MouseButtons',), + "QQuickItem.setActiveFocusOnTab": ('bool',), + "QQuickItem.setAntialiasing": ('bool',), + "QQuickItem.setBaselineOffset": ('float',), + "QQuickItem.setClip": ('bool',), + "QQuickItem.setCursor": ('PySide2.QtGui.QCursor',), + "QQuickItem.setEnabled": ('bool',), + "QQuickItem.setFiltersChildMouseEvents": ('bool',), + "QQuickItem.setFlag": ('PySide2.QtQuick.QQuickItem.Flag', 'bool'), + "QQuickItem.setFlags": ('Flags',), + "QQuickItem.setFocus": [('bool',), ('bool', 'PySide2.QtCore.Qt.FocusReason')], + "QQuickItem.setHeight": ('float',), + "QQuickItem.setImplicitHeight": ('float',), + "QQuickItem.setImplicitSize": ('float', 'float'), + "QQuickItem.setImplicitWidth": ('float',), + "QQuickItem.setKeepMouseGrab": ('bool',), + "QQuickItem.setKeepTouchGrab": ('bool',), + "QQuickItem.setOpacity": ('float',), + "QQuickItem.setParentItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.setPosition": ('PySide2.QtCore.QPointF',), + "QQuickItem.setRotation": ('float',), + "QQuickItem.setScale": ('float',), + "QQuickItem.setSize": ('PySide2.QtCore.QSizeF',), + "QQuickItem.setSmooth": ('bool',), + "QQuickItem.setState": ('str',), + "QQuickItem.setTransformOrigin": ('PySide2.QtQuick.QQuickItem.TransformOrigin',), + "QQuickItem.setTransformOriginPoint": ('PySide2.QtCore.QPointF',), + "QQuickItem.setVisible": ('bool',), + "QQuickItem.setWidth": ('float',), + "QQuickItem.setX": ('float',), + "QQuickItem.setY": ('float',), + "QQuickItem.setZ": ('float',), + "QQuickItem.smooth": (), + "QQuickItem.stackAfter": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.stackBefore": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.state": (), + "QQuickItem.textureProvider": (), + "QQuickItem.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QQuickItem.touchUngrabEvent": (), + "QQuickItem.transformOrigin": (), + "QQuickItem.transformOriginPoint": (), + "QQuickItem.ungrabMouse": (), + "QQuickItem.ungrabTouchPoints": (), + "QQuickItem.unsetCursor": (), + "QQuickItem.update": (), + "QQuickItem.updateInputMethod": ('InputMethodQueries',), + "QQuickItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + "QQuickItem.updatePolish": (), + "QQuickItem.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QQuickItem.width": (), + "QQuickItem.widthValid": (), + "QQuickItem.window": (), + "QQuickItem.windowDeactivateEvent": (), + "QQuickItem.x": (), + "QQuickItem.y": (), + "QQuickItem.z": (), + + # class PySide2.QtQuick.QQuickItemGrabResult: + "QQuickItemGrabResult.saveToFile": ('str',), + "QQuickItemGrabResult.event": ('PySide2.QtCore.QEvent',), + "QQuickItemGrabResult.image": (), + "QQuickItemGrabResult.url": (), + + # class PySide2.QtQuick.QQuickPaintedItem: + "QQuickPaintedItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickPaintedItem.antialiasing": (), + "QQuickPaintedItem.contentsBoundingRect": (), + "QQuickPaintedItem.contentsScale": (), + "QQuickPaintedItem.contentsSize": (), + "QQuickPaintedItem.fillColor": (), + "QQuickPaintedItem.isTextureProvider": (), + "QQuickPaintedItem.mipmap": (), + "QQuickPaintedItem.opaquePainting": (), + "QQuickPaintedItem.paint": ('PySide2.QtGui.QPainter',), + "QQuickPaintedItem.performanceHints": (), + "QQuickPaintedItem.releaseResources": (), + "QQuickPaintedItem.renderTarget": (), + "QQuickPaintedItem.resetContentsSize": (), + "QQuickPaintedItem.setAntialiasing": ('bool',), + "QQuickPaintedItem.setContentsScale": ('float',), + "QQuickPaintedItem.setContentsSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.setFillColor": ('PySide2.QtGui.QColor',), + "QQuickPaintedItem.setMipmap": ('bool',), + "QQuickPaintedItem.setOpaquePainting": ('bool',), + "QQuickPaintedItem.setPerformanceHint": ('PySide2.QtQuick.QQuickPaintedItem.PerformanceHint', 'bool'), + "QQuickPaintedItem.setPerformanceHints": ('PerformanceHints',), + "QQuickPaintedItem.setRenderTarget": ('PySide2.QtQuick.QQuickPaintedItem.RenderTarget',), + "QQuickPaintedItem.setTextureSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.textureProvider": (), + "QQuickPaintedItem.textureSize": (), + "QQuickPaintedItem.update": [(), ('PySide2.QtCore.QRect',)], + "QQuickPaintedItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickRenderControl: + "QQuickRenderControl.__init__": ('PySide2.QtCore.QObject',), + "QQuickRenderControl.grab": (), + "QQuickRenderControl.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QQuickRenderControl.invalidate": (), + "QQuickRenderControl.polishItems": (), + "QQuickRenderControl.prepareThread": ('PySide2.QtCore.QThread',), + "QQuickRenderControl.render": (), + "QQuickRenderControl.renderWindow": ('PySide2.QtCore.QPoint',), + "QQuickRenderControl.renderWindowFor": ('PySide2.QtQuick.QQuickWindow', 'PySide2.QtCore.QPoint'), + "QQuickRenderControl.sync": (), + + # class PySide2.QtQuick.QQuickTextDocument: + "QQuickTextDocument.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickTextDocument.textDocument": (), + + # class PySide2.QtQuick.QQuickTextureFactory: + "QQuickTextureFactory.__init__": (), + "QQuickTextureFactory.createTexture": ('PySide2.QtQuick.QQuickWindow',), + "QQuickTextureFactory.image": (), + "QQuickTextureFactory.textureByteCount": (), + "QQuickTextureFactory.textureFactoryForImage": ('PySide2.QtGui.QImage',), + "QQuickTextureFactory.textureSize": (), + + # class PySide2.QtQuick.QQuickTransform: + "QQuickTransform.__init__": ('PySide2.QtCore.QObject',), + "QQuickTransform.appendToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QQuickTransform.prependToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.update": (), + + # class PySide2.QtQuick.QQuickView: + "QQuickView.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtGui.QWindow'), ('PySide2.QtGui.QWindow',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtGui.QWindow')], + "QQuickView.engine": (), + "QQuickView.errors": (), + "QQuickView.initialSize": (), + "QQuickView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickView.resizeMode": (), + "QQuickView.rootContext": (), + "QQuickView.rootObject": (), + "QQuickView.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickView.setResizeMode": ('PySide2.QtQuick.QQuickView.ResizeMode',), + "QQuickView.setSource": ('PySide2.QtCore.QUrl',), + "QQuickView.sizeHint": (), + "QQuickView.source": (), + "QQuickView.status": (), + "QQuickView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtQuick.QQuickWindow: + "QQuickWindow.__init__": [('PySide2.QtGui.QWindow',), ('PySide2.QtQuick.QQuickRenderControl',)], + "QQuickWindow.accessibleRoot": (), + "QQuickWindow.activeFocusItem": (), + "QQuickWindow.clearBeforeRendering": (), + "QQuickWindow.color": (), + "QQuickWindow.contentItem": (), + "QQuickWindow.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'CreateTextureOptions'), + "QQuickWindow.createTextureFromImage": [('PySide2.QtGui.QImage',), ('PySide2.QtGui.QImage', 'CreateTextureOptions')], + "QQuickWindow.effectiveDevicePixelRatio": (), + "QQuickWindow.event": ('PySide2.QtCore.QEvent',), + "QQuickWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QQuickWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.focusObject": (), + "QQuickWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.grabWindow": (), + "QQuickWindow.hasDefaultAlphaBuffer": (), + "QQuickWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWindow.incubationController": (), + "QQuickWindow.isPersistentOpenGLContext": (), + "QQuickWindow.isPersistentSceneGraph": (), + "QQuickWindow.isSceneGraphInitialized": (), + "QQuickWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseGrabberItem": (), + "QQuickWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.openglContext": (), + "QQuickWindow.releaseResources": (), + "QQuickWindow.renderTarget": (), + "QQuickWindow.renderTargetId": (), + "QQuickWindow.renderTargetSize": (), + "QQuickWindow.resetOpenGLState": (), + "QQuickWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWindow.scheduleRenderJob": ('PySide2.QtCore.QRunnable', 'PySide2.QtQuick.QQuickWindow.RenderStage'), + "QQuickWindow.sendEvent": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickWindow.setClearBeforeRendering": ('bool',), + "QQuickWindow.setColor": ('PySide2.QtGui.QColor',), + "QQuickWindow.setDefaultAlphaBuffer": ('bool',), + "QQuickWindow.setPersistentOpenGLContext": ('bool',), + "QQuickWindow.setPersistentSceneGraph": ('bool',), + "QQuickWindow.setRenderTarget": [('PySide2.QtGui.QOpenGLFramebufferObject',), ('int', 'PySide2.QtCore.QSize')], + "QQuickWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWindow.update": (), + "QQuickWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtQuick.QSGAbstractRenderer: + "QSGAbstractRenderer.__init__": ('PySide2.QtCore.QObject',), + "QSGAbstractRenderer.clearColor": (), + "QSGAbstractRenderer.clearMode": (), + "QSGAbstractRenderer.deviceRect": (), + "QSGAbstractRenderer.nodeChanged": ('PySide2.QtQuick.QSGNode', 'DirtyState'), + "QSGAbstractRenderer.projectionMatrix": (), + "QSGAbstractRenderer.renderScene": ('int',), + "QSGAbstractRenderer.setClearColor": ('PySide2.QtGui.QColor',), + "QSGAbstractRenderer.setClearMode": ('ClearMode',), + "QSGAbstractRenderer.setDeviceRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.setProjectionMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGAbstractRenderer.setProjectionMatrixToRect": ('PySide2.QtCore.QRectF',), + "QSGAbstractRenderer.setViewportRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.viewportRect": (), + + # class PySide2.QtQuick.QSGBasicGeometryNode: + "QSGBasicGeometryNode.__init__": ('PySide2.QtQuick.QSGNode.NodeType',), + "QSGBasicGeometryNode.clipList": (), + "QSGBasicGeometryNode.geometry": [], + "QSGBasicGeometryNode.matrix": (), + "QSGBasicGeometryNode.setGeometry": ('PySide2.QtQuick.QSGGeometry',), + + # class PySide2.QtQuick.QSGClipNode: + "QSGClipNode.__init__": (), + "QSGClipNode.clipRect": (), + "QSGClipNode.isRectangular": (), + "QSGClipNode.setClipRect": ('PySide2.QtCore.QRectF',), + "QSGClipNode.setIsRectangular": ('bool',), + + # class PySide2.QtQuick.QSGDynamicTexture: + "QSGDynamicTexture.__init__": (), + "QSGDynamicTexture.updateTexture": (), + + # class PySide2.QtQuick.QSGEngine: + "QSGEngine.__init__": ('PySide2.QtCore.QObject',), + "QSGEngine.createRenderer": (), + "QSGEngine.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'CreateTextureOptions'), + "QSGEngine.createTextureFromImage": ('PySide2.QtGui.QImage', 'CreateTextureOptions'), + "QSGEngine.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QSGEngine.invalidate": (), + + # class PySide2.QtQuick.QSGGeometry: + "QSGGeometry.__init__": ('PySide2.QtQuick.QSGGeometry.AttributeSet', 'int', 'int', 'int'), + "QSGGeometry.allocate": ('int', 'int'), + "QSGGeometry.attributeCount": (), + "QSGGeometry.attributes": (), + "QSGGeometry.defaultAttributes_ColoredPoint2D": (), + "QSGGeometry.defaultAttributes_Point2D": (), + "QSGGeometry.defaultAttributes_TexturedPoint2D": (), + "QSGGeometry.drawingMode": (), + "QSGGeometry.indexCount": (), + "QSGGeometry.indexData": [], + "QSGGeometry.indexDataAsUInt": [], + "QSGGeometry.indexDataAsUShort": [], + "QSGGeometry.indexDataPattern": (), + "QSGGeometry.indexType": (), + "QSGGeometry.lineWidth": (), + "QSGGeometry.markIndexDataDirty": (), + "QSGGeometry.markVertexDataDirty": (), + "QSGGeometry.setDrawingMode": ('int',), + "QSGGeometry.setIndexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.setLineWidth": ('float',), + "QSGGeometry.setVertexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.sizeOfIndex": (), + "QSGGeometry.sizeOfVertex": (), + "QSGGeometry.updateRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateTexturedRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QSGGeometry.vertexCount": (), + "QSGGeometry.vertexData": [], + "QSGGeometry.vertexDataAsColoredPoint2D": [], + "QSGGeometry.vertexDataAsPoint2D": [], + "QSGGeometry.vertexDataAsTexturedPoint2D": [], + "QSGGeometry.vertexDataPattern": (), + + # class PySide2.QtQuick.QSGGeometryNode: + "QSGGeometryNode.__init__": (), + "QSGGeometryNode.inheritedOpacity": (), + "QSGGeometryNode.renderOrder": (), + "QSGGeometryNode.setInheritedOpacity": ('float',), + "QSGGeometryNode.setRenderOrder": ('int',), + + # class PySide2.QtQuick.QSGMaterialType: + "QSGMaterialType.__init__": (), + + # class PySide2.QtQuick.QSGNode: + "QSGNode.__init__": [(), ('PySide2.QtQuick.QSGNode.NodeType',)], + "QSGNode.appendChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.childAtIndex": ('int',), + "QSGNode.childCount": (), + "QSGNode.clearDirty": (), + "QSGNode.dirtyState": (), + "QSGNode.firstChild": (), + "QSGNode.flags": (), + "QSGNode.insertChildNodeAfter": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.insertChildNodeBefore": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.isSubtreeBlocked": (), + "QSGNode.lastChild": (), + "QSGNode.markDirty": ('DirtyState',), + "QSGNode.nextSibling": (), + "QSGNode.parent": (), + "QSGNode.prependChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.preprocess": (), + "QSGNode.previousSibling": (), + "QSGNode.removeAllChildNodes": (), + "QSGNode.removeChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.reparentChildNodesTo": ('PySide2.QtQuick.QSGNode',), + "QSGNode.setFlag": ('PySide2.QtQuick.QSGNode.Flag', 'bool'), + "QSGNode.setFlags": ('Flags', 'bool'), + "QSGNode.type": (), + + # class PySide2.QtQuick.QSGOpacityNode: + "QSGOpacityNode.__init__": (), + "QSGOpacityNode.combinedOpacity": (), + "QSGOpacityNode.isSubtreeBlocked": (), + "QSGOpacityNode.opacity": (), + "QSGOpacityNode.setCombinedOpacity": ('float',), + "QSGOpacityNode.setOpacity": ('float',), + + # class PySide2.QtQuick.QSGSimpleRectNode: + "QSGSimpleRectNode.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor')], + "QSGSimpleRectNode.color": (), + "QSGSimpleRectNode.rect": (), + "QSGSimpleRectNode.setColor": ('PySide2.QtGui.QColor',), + "QSGSimpleRectNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + + # class PySide2.QtQuick.QSGSimpleTextureNode: + "QSGSimpleTextureNode.__init__": (), + "QSGSimpleTextureNode.filtering": (), + "QSGSimpleTextureNode.ownsTexture": (), + "QSGSimpleTextureNode.rect": (), + "QSGSimpleTextureNode.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGSimpleTextureNode.setOwnsTexture": ('bool',), + "QSGSimpleTextureNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setSourceRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setTexture": ('PySide2.QtQuick.QSGTexture',), + "QSGSimpleTextureNode.setTextureCoordinatesTransform": ('TextureCoordinatesTransformMode',), + "QSGSimpleTextureNode.sourceRect": (), + "QSGSimpleTextureNode.texture": (), + "QSGSimpleTextureNode.textureCoordinatesTransform": (), + + # class PySide2.QtQuick.QSGTexture: + "QSGTexture.__init__": (), + "QSGTexture.bind": (), + "QSGTexture.convertToNormalizedSourceRect": ('PySide2.QtCore.QRectF',), + "QSGTexture.filtering": (), + "QSGTexture.hasAlphaChannel": (), + "QSGTexture.hasMipmaps": (), + "QSGTexture.horizontalWrapMode": (), + "QSGTexture.isAtlasTexture": (), + "QSGTexture.mipmapFiltering": (), + "QSGTexture.normalizedTextureSubRect": (), + "QSGTexture.removedFromAtlas": (), + "QSGTexture.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setHorizontalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.setMipmapFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setVerticalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.textureId": (), + "QSGTexture.textureSize": (), + "QSGTexture.updateBindOptions": ('bool',), + "QSGTexture.verticalWrapMode": (), + + # class PySide2.QtQuick.QSGTextureProvider: + "QSGTextureProvider.__init__": (), + "QSGTextureProvider.texture": (), + + # class PySide2.QtQuick.QSGTransformNode: + "QSGTransformNode.__init__": (), + "QSGTransformNode.combinedMatrix": (), + "QSGTransformNode.matrix": (), + "QSGTransformNode.setCombinedMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGTransformNode.setMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSharedPointer: + "QSharedPointer.__copy__": (), + "QSharedPointer.data": (), + }) + +# Module PySide2.QtQuickWidgets +if "PySide2.QtQuickWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtQuickWidgets.QQuickWidget: + "QQuickWidget.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QQuickWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickWidget.engine": (), + "QQuickWidget.errors": (), + "QQuickWidget.event": ('PySide2.QtCore.QEvent',), + "QQuickWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.format": (), + "QQuickWidget.grabFramebuffer": (), + "QQuickWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWidget.initialSize": (), + "QQuickWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.quickWindow": (), + "QQuickWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWidget.resizeMode": (), + "QQuickWidget.rootContext": (), + "QQuickWidget.rootObject": (), + "QQuickWidget.setClearColor": ('PySide2.QtGui.QColor',), + "QQuickWidget.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QQuickWidget.setResizeMode": ('PySide2.QtQuickWidgets.QQuickWidget.ResizeMode',), + "QQuickWidget.setSource": ('PySide2.QtCore.QUrl',), + "QQuickWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWidget.sizeHint": (), + "QQuickWidget.source": (), + "QQuickWidget.status": (), + "QQuickWidget.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QQuickWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + }) + +# Module PySide2.QtSvg +if "PySide2.QtSvg" in sys.modules: + dict.update({ + + # class PySide2.QtSvg.QGraphicsSvgItem: + "QGraphicsSvgItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSvgItem.boundingRect": (), + "QGraphicsSvgItem.elementId": (), + "QGraphicsSvgItem.isCachingEnabled": (), + "QGraphicsSvgItem.maximumCacheSize": (), + "QGraphicsSvgItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSvgItem.renderer": (), + "QGraphicsSvgItem.setCachingEnabled": ('bool',), + "QGraphicsSvgItem.setElementId": ('str',), + "QGraphicsSvgItem.setMaximumCacheSize": ('PySide2.QtCore.QSize',), + "QGraphicsSvgItem.setSharedRenderer": ('PySide2.QtSvg.QSvgRenderer',), + "QGraphicsSvgItem.type": (), + + # class PySide2.QtSvg.QSvgGenerator: + "QSvgGenerator.__init__": (), + "QSvgGenerator.description": (), + "QSvgGenerator.fileName": (), + "QSvgGenerator.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QSvgGenerator.outputDevice": (), + "QSvgGenerator.paintEngine": (), + "QSvgGenerator.resolution": (), + "QSvgGenerator.setDescription": ('str',), + "QSvgGenerator.setFileName": ('str',), + "QSvgGenerator.setOutputDevice": ('PySide2.QtCore.QIODevice',), + "QSvgGenerator.setResolution": ('int',), + "QSvgGenerator.setSize": ('PySide2.QtCore.QSize',), + "QSvgGenerator.setTitle": ('str',), + "QSvgGenerator.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgGenerator.size": (), + "QSvgGenerator.title": (), + "QSvgGenerator.viewBox": (), + "QSvgGenerator.viewBoxF": (), + + # class PySide2.QtSvg.QSvgRenderer: + "QSvgRenderer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QXmlStreamReader', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QSvgRenderer.animated": (), + "QSvgRenderer.animationDuration": (), + "QSvgRenderer.boundsOnElement": ('str',), + "QSvgRenderer.currentFrame": (), + "QSvgRenderer.defaultSize": (), + "QSvgRenderer.elementExists": ('str',), + "QSvgRenderer.framesPerSecond": (), + "QSvgRenderer.isValid": (), + "QSvgRenderer.load": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QXmlStreamReader',), ('str',)], + "QSvgRenderer.matrixForElement": ('str',), + "QSvgRenderer.render": [('PySide2.QtGui.QPainter',), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), ('PySide2.QtGui.QPainter', 'str', 'PySide2.QtCore.QRectF')], + "QSvgRenderer.setCurrentFrame": ('int',), + "QSvgRenderer.setFramesPerSecond": ('int',), + "QSvgRenderer.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgRenderer.viewBox": (), + "QSvgRenderer.viewBoxF": (), + + # class PySide2.QtSvg.QSvgWidget: + "QSvgWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QSvgWidget.load": [('PySide2.QtCore.QByteArray',), ('str',)], + "QSvgWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSvgWidget.renderer": (), + "QSvgWidget.sizeHint": (), + }) + +# Module PySide2.QtUiTools +if "PySide2.QtUiTools" in sys.modules: + dict.update({ + + # class PySide2.QtUiTools.QUiLoader: + "QUiLoader.__init__": ('PySide2.QtCore.QObject',), + "QUiLoader.addPluginPath": ('str',), + "QUiLoader.availableLayouts": (), + "QUiLoader.availableWidgets": (), + "QUiLoader.clearPluginPaths": (), + "QUiLoader.createAction": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createActionGroup": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createLayout": ('str', 'PySide2.QtCore.QObject', 'str'), + "QUiLoader.createWidget": ('str', 'PySide2.QtWidgets.QWidget', 'str'), + "QUiLoader.errorString": (), + "QUiLoader.isLanguageChangeEnabled": (), + "QUiLoader.isTranslationEnabled": (), + "QUiLoader.load": [('PySide2.QtCore.QIODevice', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QWidget')], + "QUiLoader.pluginPaths": (), + "QUiLoader.registerCustomWidget": ('object',), + "QUiLoader.setLanguageChangeEnabled": ('bool',), + "QUiLoader.setTranslationEnabled": ('bool',), + "QUiLoader.setWorkingDirectory": ('PySide2.QtCore.QDir',), + "QUiLoader.workingDirectory": (), + }) + +# Module PySide2.QtWebChannel +if "PySide2.QtWebChannel" in sys.modules: + dict.update({ + + # class PySide2.QtWebChannel.QWebChannel: + "QWebChannel.__init__": ('PySide2.QtCore.QObject',), + "QWebChannel.blockUpdates": (), + "QWebChannel.connectTo": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.deregisterObject": ('PySide2.QtCore.QObject',), + "QWebChannel.disconnectFrom": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.registerObject": ('str', 'PySide2.QtCore.QObject'), + "QWebChannel.registerObjects": ('dict',), + "QWebChannel.registeredObjects": (), + "QWebChannel.setBlockUpdates": ('bool',), + + # class PySide2.QtWebChannel.QWebChannelAbstractTransport: + "QWebChannelAbstractTransport.__init__": ('PySide2.QtCore.QObject',), + "QWebChannelAbstractTransport.sendMessage": ('dict',), + }) + +# Module PySide2.QtWebSockets +if "PySide2.QtWebSockets" in sys.modules: + dict.update({ + + # class PySide2.QtWebSockets.QMaskGenerator: + "QMaskGenerator.__init__": ('PySide2.QtCore.QObject',), + "QMaskGenerator.nextMask": (), + "QMaskGenerator.seed": (), + + # class PySide2.QtWebSockets.QWebSocket: + "QWebSocket.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketProtocol.Version', 'PySide2.QtCore.QObject'), + "QWebSocket.abort": (), + "QWebSocket.close": ('PySide2.QtWebSockets.QWebSocketProtocol.CloseCode', 'str'), + "QWebSocket.closeCode": (), + "QWebSocket.closeReason": (), + "QWebSocket.errorString": (), + "QWebSocket.flush": (), + "QWebSocket.isValid": (), + "QWebSocket.localAddress": (), + "QWebSocket.localPort": (), + "QWebSocket.maskGenerator": (), + "QWebSocket.open": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QWebSocket.origin": (), + "QWebSocket.pauseMode": (), + "QWebSocket.peerAddress": (), + "QWebSocket.peerName": (), + "QWebSocket.peerPort": (), + "QWebSocket.ping": ('PySide2.QtCore.QByteArray',), + "QWebSocket.proxy": (), + "QWebSocket.readBufferSize": (), + "QWebSocket.request": (), + "QWebSocket.requestUrl": (), + "QWebSocket.resourceName": (), + "QWebSocket.resume": (), + "QWebSocket.sendBinaryMessage": ('PySide2.QtCore.QByteArray',), + "QWebSocket.sendTextMessage": ('str',), + "QWebSocket.setMaskGenerator": ('PySide2.QtWebSockets.QMaskGenerator',), + "QWebSocket.setPauseMode": ('PauseModes',), + "QWebSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocket.setReadBufferSize": ('int',), + "QWebSocket.state": (), + "QWebSocket.version": (), + + # class PySide2.QtWebSockets.QWebSocketCorsAuthenticator: + "QWebSocketCorsAuthenticator.__init__": [('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), ('str',)], + "QWebSocketCorsAuthenticator.allowed": (), + "QWebSocketCorsAuthenticator.origin": (), + "QWebSocketCorsAuthenticator.setAllowed": ('bool',), + "QWebSocketCorsAuthenticator.swap": ('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), + + # class PySide2.QtWebSockets.QWebSocketProtocol: + + # class PySide2.QtWebSockets.QWebSocketServer: + "QWebSocketServer.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketServer.SslMode', 'PySide2.QtCore.QObject'), + "QWebSocketServer.close": (), + "QWebSocketServer.error": (), + "QWebSocketServer.errorString": (), + "QWebSocketServer.hasPendingConnections": (), + "QWebSocketServer.isListening": (), + "QWebSocketServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QWebSocketServer.maxPendingConnections": (), + "QWebSocketServer.nextPendingConnection": (), + "QWebSocketServer.pauseAccepting": (), + "QWebSocketServer.proxy": (), + "QWebSocketServer.resumeAccepting": (), + "QWebSocketServer.secureMode": (), + "QWebSocketServer.serverAddress": (), + "QWebSocketServer.serverName": (), + "QWebSocketServer.serverPort": (), + "QWebSocketServer.serverUrl": (), + "QWebSocketServer.setMaxPendingConnections": ('int',), + "QWebSocketServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocketServer.setServerName": ('str',), + "QWebSocketServer.setSocketDescriptor": ('int',), + "QWebSocketServer.socketDescriptor": (), + "QWebSocketServer.supportedVersions": (), + }) +# eof diff --git a/sources/pyside2/tests/registry/exists_darwin_5_9_4_ci.py b/sources/pyside2/tests/registry/exists_darwin_5_9_4_ci.py new file mode 100644 index 0000000..45bee79 --- /dev/null +++ b/sources/pyside2/tests/registry/exists_darwin_5_9_4_ci.py @@ -0,0 +1,16469 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" +This file contains the simplified signatures for all functions in PySide +for module 'exists_darwin_5_9_4_ci'. There are no default values, no variable +names and no self parameter. Only types are present after simplification. +The functions 'next' resp. '__next__' are removed +to make the output identical for Python 2 and 3. +""" + +import sys + +dict = {} + +# Module PySide2.QtCore +if "PySide2.QtCore" in sys.modules: + dict.update({ + + # class PySide2.QtCore.ClassInfo: + + # class PySide2.QtCore.MetaFunction: + + # class PySide2.QtCore.Property: + + # class PySide2.QtCore.QAbstractAnimation: + "QAbstractAnimation.__init__": ('PySide2.QtCore.QObject',), + "QAbstractAnimation.currentLoop": (), + "QAbstractAnimation.currentLoopTime": (), + "QAbstractAnimation.currentTime": (), + "QAbstractAnimation.direction": (), + "QAbstractAnimation.duration": (), + "QAbstractAnimation.event": ('PySide2.QtCore.QEvent',), + "QAbstractAnimation.group": (), + "QAbstractAnimation.loopCount": (), + "QAbstractAnimation.pause": (), + "QAbstractAnimation.resume": (), + "QAbstractAnimation.setCurrentTime": ('int',), + "QAbstractAnimation.setDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.setLoopCount": ('int',), + "QAbstractAnimation.setPaused": ('bool',), + "QAbstractAnimation.start": ('PySide2.QtCore.QAbstractAnimation.DeletionPolicy',), + "QAbstractAnimation.state": (), + "QAbstractAnimation.stop": (), + "QAbstractAnimation.totalDuration": (), + "QAbstractAnimation.updateCurrentTime": ('int',), + "QAbstractAnimation.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QAbstractEventDispatcher: + "QAbstractEventDispatcher.__init__": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.closingDown": (), + "QAbstractEventDispatcher.flush": (), + "QAbstractEventDispatcher.hasPendingEvents": (), + "QAbstractEventDispatcher.instance": ('PySide2.QtCore.QThread',), + "QAbstractEventDispatcher.interrupt": (), + "QAbstractEventDispatcher.processEvents": ('ProcessEventsFlags',), + "QAbstractEventDispatcher.registerSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.registerTimer": [('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject'), ('int', 'int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QAbstractEventDispatcher.registeredTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.remainingTime": ('int',), + "QAbstractEventDispatcher.startingUp": (), + "QAbstractEventDispatcher.unregisterSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.unregisterTimer": ('int',), + "QAbstractEventDispatcher.unregisterTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.wakeUp": (), + + # class PySide2.QtCore.QAbstractItemModel: + "QAbstractItemModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginMoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginMoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginResetModel": (), + "QAbstractItemModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.changePersistentIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.changePersistentIndexList": ('List[int]', 'List[int]'), + "QAbstractItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object')], + "QAbstractItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.decodeData": ('int', 'int', 'PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.encodeData": ('List[int]', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.endInsertColumns": (), + "QAbstractItemModel.endInsertRows": (), + "QAbstractItemModel.endMoveColumns": (), + "QAbstractItemModel.endMoveRows": (), + "QAbstractItemModel.endRemoveColumns": (), + "QAbstractItemModel.endRemoveRows": (), + "QAbstractItemModel.endResetModel": (), + "QAbstractItemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasIndex": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'MatchFlags'), + "QAbstractItemModel.mimeData": ('List[int]',), + "QAbstractItemModel.mimeTypes": (), + "QAbstractItemModel.moveColumn": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRow": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemModel.persistentIndexList": (), + "QAbstractItemModel.removeColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.resetInternalData": (), + "QAbstractItemModel.revert": (), + "QAbstractItemModel.roleNames": (), + "QAbstractItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QAbstractItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QAbstractItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractItemModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.submit": (), + "QAbstractItemModel.supportedDragActions": (), + "QAbstractItemModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractListModel: + "QAbstractListModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractListModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractProxyModel: + "QAbstractProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractProxyModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mimeData": ('List[int]',), + "QAbstractProxyModel.mimeTypes": (), + "QAbstractProxyModel.resetInternalData": (), + "QAbstractProxyModel.revert": (), + "QAbstractProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QAbstractProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QAbstractProxyModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractProxyModel.sourceModel": (), + "QAbstractProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.submit": (), + "QAbstractProxyModel.supportedDragActions": (), + "QAbstractProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractState: + "QAbstractState.__init__": ('PySide2.QtCore.QState',), + "QAbstractState.active": (), + "QAbstractState.event": ('PySide2.QtCore.QEvent',), + "QAbstractState.machine": (), + "QAbstractState.onEntry": ('PySide2.QtCore.QEvent',), + "QAbstractState.onExit": ('PySide2.QtCore.QEvent',), + "QAbstractState.parentState": (), + + # class PySide2.QtCore.QAbstractTableModel: + "QAbstractTableModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractTableModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractTableModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractTransition: + "QAbstractTransition.__init__": ('PySide2.QtCore.QState',), + "QAbstractTransition.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.animations": (), + "QAbstractTransition.event": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.machine": (), + "QAbstractTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.setTargetState": ('PySide2.QtCore.QAbstractState',), + "QAbstractTransition.setTargetStates": ('list',), + "QAbstractTransition.setTransitionType": ('PySide2.QtCore.QAbstractTransition.TransitionType',), + "QAbstractTransition.sourceState": (), + "QAbstractTransition.targetState": (), + "QAbstractTransition.targetStates": (), + "QAbstractTransition.transitionType": (), + + # class PySide2.QtCore.QAnimationGroup: + "QAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QAnimationGroup.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.animationAt": ('int',), + "QAnimationGroup.animationCount": (), + "QAnimationGroup.clear": (), + "QAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QAnimationGroup.indexOfAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.insertAnimation": ('int', 'PySide2.QtCore.QAbstractAnimation'), + "QAnimationGroup.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.takeAnimation": ('int',), + + # class PySide2.QtCore.QBasicMutex: + "QBasicMutex.__init__": (), + "QBasicMutex.isRecursive": (), + "QBasicMutex.lock": (), + "QBasicMutex.tryLock": (), + "QBasicMutex.try_lock": (), + "QBasicMutex.unlock": (), + + # class PySide2.QtCore.QBasicTimer: + "QBasicTimer.__init__": [(), ('PySide2.QtCore.QBasicTimer',)], + "QBasicTimer.__copy__": (), + "QBasicTimer.isActive": (), + "QBasicTimer.start": [('int', 'PySide2.QtCore.QObject'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QBasicTimer.stop": (), + "QBasicTimer.timerId": (), + + # class PySide2.QtCore.QBitArray: + "QBitArray.__init__": [(), ('PySide2.QtCore.QBitArray',), ('int', 'bool')], + "QBitArray.__copy__": (), + "QBitArray.at": ('int',), + "QBitArray.clear": (), + "QBitArray.clearBit": ('int',), + "QBitArray.count": [(), ('bool',)], + "QBitArray.fill": [('bool', 'int'), ('bool', 'int', 'int')], + "QBitArray.isEmpty": (), + "QBitArray.isNull": (), + "QBitArray.resize": ('int',), + "QBitArray.setBit": [('int',), ('int', 'bool')], + "QBitArray.size": (), + "QBitArray.swap": ('PySide2.QtCore.QBitArray',), + "QBitArray.testBit": ('int',), + "QBitArray.toggleBit": ('int',), + "QBitArray.truncate": ('int',), + + # class PySide2.QtCore.QBuffer: + "QBuffer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QBuffer.atEnd": (), + "QBuffer.buffer": (), + "QBuffer.canReadLine": (), + "QBuffer.close": (), + "QBuffer.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.data": (), + "QBuffer.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.open": ('OpenMode',), + "QBuffer.pos": (), + "QBuffer.readData": ('str', 'int'), + "QBuffer.seek": ('int',), + "QBuffer.setBuffer": ('PySide2.QtCore.QByteArray',), + "QBuffer.setData": ('PySide2.QtCore.QByteArray',), + "QBuffer.size": (), + "QBuffer.writeData": ('str', 'int'), + + # class PySide2.QtCore.QByteArray: + "QByteArray.__init__": [(), ('PySide2.QtCore.QByteArray',), ('int', 'Union[str, int]'), ('bytes',), ('bytearray',)], + "QByteArray.__copy__": (), + "QByteArray.__reduce__": (), + "QByteArray.append": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',), ('int', 'Union[str, int]')], + "QByteArray.at": ('int',), + "QByteArray.capacity": (), + "QByteArray.cbegin": (), + "QByteArray.cend": (), + "QByteArray.chop": ('int',), + "QByteArray.clear": (), + "QByteArray.contains": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.count": [(), ('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.data": (), + "QByteArray.endsWith": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.fill": ('Union[str, int]', 'int'), + "QByteArray.fromBase64": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'Base64Options')], + "QByteArray.fromHex": ('PySide2.QtCore.QByteArray',), + "QByteArray.fromPercentEncoding": ('PySide2.QtCore.QByteArray', 'Union[str, int]'), + "QByteArray.fromRawData": ('str', 'int'), + "QByteArray.indexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.insert": [('int', 'PySide2.QtCore.QByteArray'), ('int', 'int', 'Union[str, int]')], + "QByteArray.isEmpty": (), + "QByteArray.isNull": (), + "QByteArray.isSharedWith": ('PySide2.QtCore.QByteArray',), + "QByteArray.lastIndexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.left": ('int',), + "QByteArray.leftJustified": ('int', 'Union[str, int]', 'bool'), + "QByteArray.length": (), + "QByteArray.mid": ('int', 'int'), + "QByteArray.number": [('float', 'Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.prepend": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',), ('int', 'Union[str, int]')], + "QByteArray.remove": ('int', 'int'), + "QByteArray.repeated": ('int',), + "QByteArray.replace": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('Union[str, int]', 'PySide2.QtCore.QByteArray'), ('Union[str, int]', 'Union[str, int]'), ('int', 'int', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QByteArray.reserve": ('int',), + "QByteArray.resize": ('int',), + "QByteArray.right": ('int',), + "QByteArray.rightJustified": ('int', 'Union[str, int]', 'bool'), + "QByteArray.setNum": [('float', 'Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.setRawData": ('str', 'int'), + "QByteArray.simplified": (), + "QByteArray.size": (), + "QByteArray.split": ('Union[str, int]',), + "QByteArray.squeeze": (), + "QByteArray.startsWith": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.swap": ('PySide2.QtCore.QByteArray',), + "QByteArray.toBase64": [(), ('Base64Options',)], + "QByteArray.toDouble": ('bool',), + "QByteArray.toFloat": ('bool',), + "QByteArray.toHex": [(), ('Union[str, int]',)], + "QByteArray.toInt": ('bool', 'int'), + "QByteArray.toLong": ('bool', 'int'), + "QByteArray.toLongLong": ('bool', 'int'), + "QByteArray.toLower": (), + "QByteArray.toPercentEncoding": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'Union[str, int]'), + "QByteArray.toShort": ('bool', 'int'), + "QByteArray.toUInt": ('bool', 'int'), + "QByteArray.toULong": ('bool', 'int'), + "QByteArray.toULongLong": ('bool', 'int'), + "QByteArray.toUShort": ('bool', 'int'), + "QByteArray.toUpper": (), + "QByteArray.trimmed": (), + "QByteArray.truncate": ('int',), + + # class PySide2.QtCore.QByteArrayMatcher: + "QByteArrayMatcher.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArrayMatcher',), ('str', 'int')], + "QByteArrayMatcher.__copy__": (), + "QByteArrayMatcher.indexIn": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int', 'int')], + "QByteArrayMatcher.pattern": (), + "QByteArrayMatcher.setPattern": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QChildEvent: + "QChildEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QObject'), + "QChildEvent.added": (), + "QChildEvent.child": (), + "QChildEvent.polished": (), + "QChildEvent.removed": (), + + # class PySide2.QtCore.QCollator: + "QCollator.__init__": [('PySide2.QtCore.QCollator',), ('PySide2.QtCore.QLocale',)], + "QCollator.caseSensitivity": (), + "QCollator.compare": [('Union[str, int]', 'int', 'Union[str, int]', 'int'), ('str', 'str')], + "QCollator.ignorePunctuation": (), + "QCollator.locale": (), + "QCollator.numericMode": (), + "QCollator.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCollator.setIgnorePunctuation": ('bool',), + "QCollator.setLocale": ('PySide2.QtCore.QLocale',), + "QCollator.setNumericMode": ('bool',), + "QCollator.sortKey": ('str',), + "QCollator.swap": ('PySide2.QtCore.QCollator',), + + # class PySide2.QtCore.QCollatorSortKey: + "QCollatorSortKey.__init__": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.compare": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.swap": ('PySide2.QtCore.QCollatorSortKey',), + + # class PySide2.QtCore.QCommandLineOption: + "QCommandLineOption.__init__": [('List[str]',), ('List[str]', 'str', 'str', 'str'), ('PySide2.QtCore.QCommandLineOption',), ('str',), ('str', 'str', 'str', 'str')], + "QCommandLineOption.defaultValues": (), + "QCommandLineOption.description": (), + "QCommandLineOption.flags": (), + "QCommandLineOption.isHidden": (), + "QCommandLineOption.names": (), + "QCommandLineOption.setDefaultValue": ('str',), + "QCommandLineOption.setDefaultValues": ('List[str]',), + "QCommandLineOption.setDescription": ('str',), + "QCommandLineOption.setFlags": ('Flags',), + "QCommandLineOption.setHidden": ('bool',), + "QCommandLineOption.setValueName": ('str',), + "QCommandLineOption.swap": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineOption.valueName": (), + + # class PySide2.QtCore.QCommandLineParser: + "QCommandLineParser.__init__": (), + "QCommandLineParser.addHelpOption": (), + "QCommandLineParser.addOption": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineParser.addOptions": ('list',), + "QCommandLineParser.addPositionalArgument": ('str', 'str', 'str'), + "QCommandLineParser.addVersionOption": (), + "QCommandLineParser.applicationDescription": (), + "QCommandLineParser.clearPositionalArguments": (), + "QCommandLineParser.errorText": (), + "QCommandLineParser.helpText": (), + "QCommandLineParser.isSet": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.optionNames": (), + "QCommandLineParser.parse": ('List[str]',), + "QCommandLineParser.positionalArguments": (), + "QCommandLineParser.process": [('List[str]',), ('PySide2.QtCore.QCoreApplication',)], + "QCommandLineParser.setApplicationDescription": ('str',), + "QCommandLineParser.setOptionsAfterPositionalArgumentsMode": ('PySide2.QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode',), + "QCommandLineParser.setSingleDashWordOptionMode": ('PySide2.QtCore.QCommandLineParser.SingleDashWordOptionMode',), + "QCommandLineParser.showHelp": ('int',), + "QCommandLineParser.showVersion": (), + "QCommandLineParser.unknownOptionNames": (), + "QCommandLineParser.value": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.values": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + + # class PySide2.QtCore.QCoreApplication: + "QCoreApplication.__init__": ('List[str]',), + "QCoreApplication.addLibraryPath": ('str',), + "QCoreApplication.applicationDirPath": (), + "QCoreApplication.applicationFilePath": (), + "QCoreApplication.applicationName": (), + "QCoreApplication.applicationPid": (), + "QCoreApplication.applicationVersion": (), + "QCoreApplication.arguments": (), + "QCoreApplication.closingDown": (), + "QCoreApplication.event": ('PySide2.QtCore.QEvent',), + "QCoreApplication.eventDispatcher": (), + "QCoreApplication.exec_": (), + "QCoreApplication.exit": ('int',), + "QCoreApplication.flush": (), + "QCoreApplication.hasPendingEvents": (), + "QCoreApplication.installTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.instance": (), + "QCoreApplication.isQuitLockEnabled": (), + "QCoreApplication.isSetuidAllowed": (), + "QCoreApplication.libraryPaths": (), + "QCoreApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.organizationDomain": (), + "QCoreApplication.organizationName": (), + "QCoreApplication.postEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent', 'int'), + "QCoreApplication.processEvents": [('ProcessEventsFlags',), ('ProcessEventsFlags', 'int')], + "QCoreApplication.quit": (), + "QCoreApplication.removeLibraryPath": ('str',), + "QCoreApplication.removePostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.removeTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.sendEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.sendPostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.setApplicationName": ('str',), + "QCoreApplication.setApplicationVersion": ('str',), + "QCoreApplication.setAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute', 'bool'), + "QCoreApplication.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QCoreApplication.setLibraryPaths": ('List[str]',), + "QCoreApplication.setOrganizationDomain": ('str',), + "QCoreApplication.setOrganizationName": ('str',), + "QCoreApplication.setQuitLockEnabled": ('bool',), + "QCoreApplication.setSetuidAllowed": ('bool',), + "QCoreApplication.startingUp": (), + "QCoreApplication.testAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute',), + "QCoreApplication.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QCryptographicHash: + "QCryptographicHash.__init__": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QCryptographicHash.addData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str', 'int')], + "QCryptographicHash.hash": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QCryptographicHash.Algorithm'), + "QCryptographicHash.reset": (), + "QCryptographicHash.result": (), + + # class PySide2.QtCore.QDataStream: + "QDataStream.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QDataStream.abortTransaction": (), + "QDataStream.atEnd": (), + "QDataStream.byteOrder": (), + "QDataStream.commitTransaction": (), + "QDataStream.device": (), + "QDataStream.floatingPointPrecision": (), + "QDataStream.readBool": (), + "QDataStream.readDouble": (), + "QDataStream.readFloat": (), + "QDataStream.readInt16": (), + "QDataStream.readInt32": (), + "QDataStream.readInt64": (), + "QDataStream.readInt8": (), + "QDataStream.readQChar": (), + "QDataStream.readQString": (), + "QDataStream.readQStringList": (), + "QDataStream.readQVariant": (), + "QDataStream.readRawData": ('str', 'int'), + "QDataStream.readString": (), + "QDataStream.readUInt16": (), + "QDataStream.readUInt32": (), + "QDataStream.readUInt64": (), + "QDataStream.readUInt8": (), + "QDataStream.resetStatus": (), + "QDataStream.rollbackTransaction": (), + "QDataStream.setByteOrder": ('PySide2.QtCore.QDataStream.ByteOrder',), + "QDataStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QDataStream.setFloatingPointPrecision": ('PySide2.QtCore.QDataStream.FloatingPointPrecision',), + "QDataStream.setStatus": ('PySide2.QtCore.QDataStream.Status',), + "QDataStream.setVersion": ('int',), + "QDataStream.skipRawData": ('int',), + "QDataStream.startTransaction": (), + "QDataStream.status": (), + "QDataStream.unsetDevice": (), + "QDataStream.version": (), + "QDataStream.writeBool": ('bool',), + "QDataStream.writeDouble": ('float',), + "QDataStream.writeFloat": ('float',), + "QDataStream.writeInt16": ('int',), + "QDataStream.writeInt32": ('int',), + "QDataStream.writeInt64": ('int',), + "QDataStream.writeInt8": ('Union[str, int]',), + "QDataStream.writeQChar": ('Union[str, int]',), + "QDataStream.writeQString": ('str',), + "QDataStream.writeQStringList": ('List[str]',), + "QDataStream.writeQVariant": ('Any',), + "QDataStream.writeRawData": ('str', 'int'), + "QDataStream.writeString": ('str',), + "QDataStream.writeUInt16": ('int',), + "QDataStream.writeUInt32": ('int',), + "QDataStream.writeUInt64": ('int',), + "QDataStream.writeUInt8": ('Union[str, int]',), + + # class PySide2.QtCore.QDate: + "QDate.__init__": [(), ('PySide2.QtCore.QDate',), ('int', 'int', 'int')], + "QDate.__copy__": (), + "QDate.__reduce__": (), + "QDate.addDays": ('int',), + "QDate.addMonths": ('int',), + "QDate.addYears": ('int',), + "QDate.currentDate": (), + "QDate.day": (), + "QDate.dayOfWeek": (), + "QDate.dayOfYear": (), + "QDate.daysInMonth": (), + "QDate.daysInYear": (), + "QDate.daysTo": ('PySide2.QtCore.QDate',), + "QDate.fromJulianDay": ('int',), + "QDate.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDate.getDate": ('int', 'int', 'int'), + "QDate.isLeapYear": ('int',), + "QDate.isNull": (), + "QDate.isValid": [(), ('int', 'int', 'int')], + "QDate.longDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.longMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.month": (), + "QDate.setDate": ('int', 'int', 'int'), + "QDate.shortDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.shortMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.toJulianDay": (), + "QDate.toPython": (), + "QDate.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDate.weekNumber": ('int',), + "QDate.year": (), + + # class PySide2.QtCore.QDateTime: + "QDateTime.__init__": [(), ('PySide2.QtCore.QDate',), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.QTimeZone'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec', 'int'), ('PySide2.QtCore.QDateTime',), ('int', 'int', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int')], + "QDateTime.__copy__": (), + "QDateTime.__reduce__": (), + "QDateTime.addDays": ('int',), + "QDateTime.addMSecs": ('int',), + "QDateTime.addMonths": ('int',), + "QDateTime.addSecs": ('int',), + "QDateTime.addYears": ('int',), + "QDateTime.currentDateTime": (), + "QDateTime.currentDateTimeUtc": (), + "QDateTime.currentMSecsSinceEpoch": (), + "QDateTime.currentSecsSinceEpoch": (), + "QDateTime.date": (), + "QDateTime.daysTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.fromMSecsSinceEpoch": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromSecsSinceEpoch": [('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDateTime.fromTime_t": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.isDaylightTime": (), + "QDateTime.isNull": (), + "QDateTime.isValid": (), + "QDateTime.msecsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.offsetFromUtc": (), + "QDateTime.secsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.setDate": ('PySide2.QtCore.QDate',), + "QDateTime.setMSecsSinceEpoch": ('int',), + "QDateTime.setOffsetFromUtc": ('int',), + "QDateTime.setSecsSinceEpoch": ('int',), + "QDateTime.setTime": ('PySide2.QtCore.QTime',), + "QDateTime.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.setTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.setTime_t": ('int',), + "QDateTime.setUtcOffset": ('int',), + "QDateTime.swap": ('PySide2.QtCore.QDateTime',), + "QDateTime.time": (), + "QDateTime.timeSpec": (), + "QDateTime.timeZone": (), + "QDateTime.timeZoneAbbreviation": (), + "QDateTime.toLocalTime": (), + "QDateTime.toMSecsSinceEpoch": (), + "QDateTime.toOffsetFromUtc": ('int',), + "QDateTime.toPython": (), + "QDateTime.toSecsSinceEpoch": (), + "QDateTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDateTime.toTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.toTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.toTime_t": (), + "QDateTime.toUTC": (), + "QDateTime.utcOffset": (), + + # class PySide2.QtCore.QDir: + "QDir.__init__": [('PySide2.QtCore.QDir',), ('str',), ('str', 'str', 'SortFlags', 'Filters')], + "QDir.__copy__": (), + "QDir.__reduce__": (), + "QDir.absoluteFilePath": ('str',), + "QDir.absolutePath": (), + "QDir.addResourceSearchPath": ('str',), + "QDir.addSearchPath": ('str', 'str'), + "QDir.canonicalPath": (), + "QDir.cd": ('str',), + "QDir.cdUp": (), + "QDir.cleanPath": ('str',), + "QDir.count": (), + "QDir.current": (), + "QDir.currentPath": (), + "QDir.dirName": (), + "QDir.drives": (), + "QDir.entryInfoList": [('Filters', 'SortFlags'), ('List[str]', 'Filters', 'SortFlags')], + "QDir.entryList": [('Filters', 'SortFlags'), ('List[str]', 'Filters', 'SortFlags')], + "QDir.exists": [(), ('str',)], + "QDir.filePath": ('str',), + "QDir.filter": (), + "QDir.fromNativeSeparators": ('str',), + "QDir.home": (), + "QDir.homePath": (), + "QDir.isAbsolute": (), + "QDir.isAbsolutePath": ('str',), + "QDir.isEmpty": ('Filters',), + "QDir.isReadable": (), + "QDir.isRelative": (), + "QDir.isRelativePath": ('str',), + "QDir.isRoot": (), + "QDir.listSeparator": (), + "QDir.makeAbsolute": (), + "QDir.match": [('List[str]', 'str'), ('str', 'str')], + "QDir.mkdir": ('str',), + "QDir.mkpath": ('str',), + "QDir.nameFilters": (), + "QDir.nameFiltersFromString": ('str',), + "QDir.path": (), + "QDir.refresh": (), + "QDir.relativeFilePath": ('str',), + "QDir.remove": ('str',), + "QDir.removeRecursively": (), + "QDir.rename": ('str', 'str'), + "QDir.rmdir": ('str',), + "QDir.rmpath": ('str',), + "QDir.root": (), + "QDir.rootPath": (), + "QDir.searchPaths": ('str',), + "QDir.separator": (), + "QDir.setCurrent": ('str',), + "QDir.setFilter": ('Filters',), + "QDir.setNameFilters": ('List[str]',), + "QDir.setPath": ('str',), + "QDir.setSearchPaths": ('str', 'List[str]'), + "QDir.setSorting": ('SortFlags',), + "QDir.sorting": (), + "QDir.swap": ('PySide2.QtCore.QDir',), + "QDir.temp": (), + "QDir.tempPath": (), + "QDir.toNativeSeparators": ('str',), + + # class PySide2.QtCore.QDirIterator: + "QDirIterator.__init__": [('PySide2.QtCore.QDir', 'IteratorFlags'), ('str', 'Filters', 'IteratorFlags'), ('str', 'IteratorFlags'), ('str', 'List[str]', 'Filters', 'IteratorFlags')], + "QDirIterator.fileInfo": (), + "QDirIterator.fileName": (), + "QDirIterator.filePath": (), + "QDirIterator.hasNext": (), + "QDirIterator.path": (), + + # class PySide2.QtCore.QDynamicPropertyChangeEvent: + "QDynamicPropertyChangeEvent.__init__": ('PySide2.QtCore.QByteArray',), + "QDynamicPropertyChangeEvent.propertyName": (), + + # class PySide2.QtCore.QEasingCurve: + "QEasingCurve.__init__": [('PySide2.QtCore.QEasingCurve',), ('PySide2.QtCore.QEasingCurve.Type',)], + "QEasingCurve.__copy__": (), + "QEasingCurve.addCubicBezierSegment": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEasingCurve.addTCBSegment": ('PySide2.QtCore.QPointF', 'float', 'float', 'float'), + "QEasingCurve.amplitude": (), + "QEasingCurve.customType": (), + "QEasingCurve.overshoot": (), + "QEasingCurve.period": (), + "QEasingCurve.setAmplitude": ('float',), + "QEasingCurve.setCustomType": ('object',), + "QEasingCurve.setOvershoot": ('float',), + "QEasingCurve.setPeriod": ('float',), + "QEasingCurve.setType": ('PySide2.QtCore.QEasingCurve.Type',), + "QEasingCurve.swap": ('PySide2.QtCore.QEasingCurve',), + "QEasingCurve.toCubicSpline": (), + "QEasingCurve.type": (), + "QEasingCurve.valueForProgress": ('float',), + + # class PySide2.QtCore.QElapsedTimer: + "QElapsedTimer.__init__": [(), ('PySide2.QtCore.QElapsedTimer',)], + "QElapsedTimer.__copy__": (), + "QElapsedTimer.clockType": (), + "QElapsedTimer.elapsed": (), + "QElapsedTimer.hasExpired": ('int',), + "QElapsedTimer.invalidate": (), + "QElapsedTimer.isMonotonic": (), + "QElapsedTimer.isValid": (), + "QElapsedTimer.msecsSinceReference": (), + "QElapsedTimer.msecsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.nsecsElapsed": (), + "QElapsedTimer.restart": (), + "QElapsedTimer.secsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.start": (), + + # class PySide2.QtCore.QEvent: + "QEvent.__init__": [('PySide2.QtCore.QEvent',), ('PySide2.QtCore.QEvent.Type',)], + "QEvent.accept": (), + "QEvent.ignore": (), + "QEvent.isAccepted": (), + "QEvent.registerEventType": ('int',), + "QEvent.setAccepted": ('bool',), + "QEvent.spontaneous": (), + "QEvent.type": (), + + # class PySide2.QtCore.QEventLoop: + "QEventLoop.__init__": ('PySide2.QtCore.QObject',), + "QEventLoop.event": ('PySide2.QtCore.QEvent',), + "QEventLoop.exec_": ('ProcessEventsFlags',), + "QEventLoop.exit": ('int',), + "QEventLoop.isRunning": (), + "QEventLoop.processEvents": [('ProcessEventsFlags',), ('ProcessEventsFlags', 'int')], + "QEventLoop.quit": (), + "QEventLoop.wakeUp": (), + + # class PySide2.QtCore.QEventTransition: + "QEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QEventTransition.event": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventSource": (), + "QEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventType": (), + "QEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QEventTransition.setEventSource": ('PySide2.QtCore.QObject',), + "QEventTransition.setEventType": ('PySide2.QtCore.QEvent.Type',), + + # class PySide2.QtCore.QFactoryInterface: + "QFactoryInterface.__init__": (), + "QFactoryInterface.keys": (), + + # class PySide2.QtCore.QFile: + "QFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QFile.copy": [('str',), ('str', 'str')], + "QFile.decodeName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QFile.encodeName": ('str',), + "QFile.exists": [(), ('str',)], + "QFile.fileName": (), + "QFile.link": [('str',), ('str', 'str')], + "QFile.open": [('OpenMode',), ('int', 'OpenMode', 'FileHandleFlags')], + "QFile.permissions": [(), ('str',)], + "QFile.readLink": [(), ('str',)], + "QFile.remove": [(), ('str',)], + "QFile.rename": [('str',), ('str', 'str')], + "QFile.resize": [('int',), ('str', 'int')], + "QFile.setFileName": ('str',), + "QFile.setPermissions": [('Permissions',), ('str', 'Permissions')], + "QFile.size": (), + "QFile.symLinkTarget": [(), ('str',)], + + # class PySide2.QtCore.QFileDevice: + "QFileDevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QFileDevice.atEnd": (), + "QFileDevice.close": (), + "QFileDevice.error": (), + "QFileDevice.fileName": (), + "QFileDevice.flush": (), + "QFileDevice.handle": (), + "QFileDevice.isSequential": (), + "QFileDevice.map": ('int', 'int', 'PySide2.QtCore.QFileDevice.MemoryMapFlags'), + "QFileDevice.permissions": (), + "QFileDevice.pos": (), + "QFileDevice.readData": ('str', 'int'), + "QFileDevice.readLineData": ('str', 'int'), + "QFileDevice.resize": ('int',), + "QFileDevice.seek": ('int',), + "QFileDevice.setPermissions": ('Permissions',), + "QFileDevice.size": (), + "QFileDevice.unmap": ('Union[str, int]',), + "QFileDevice.unsetError": (), + "QFileDevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QFileInfo: + "QFileInfo.__init__": [(), ('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('PySide2.QtCore.QFileInfo',), ('str',)], + "QFileInfo.__copy__": (), + "QFileInfo.__reduce__": (), + "QFileInfo.absoluteDir": (), + "QFileInfo.absoluteFilePath": (), + "QFileInfo.absolutePath": (), + "QFileInfo.baseName": (), + "QFileInfo.bundleName": (), + "QFileInfo.caching": (), + "QFileInfo.canonicalFilePath": (), + "QFileInfo.canonicalPath": (), + "QFileInfo.completeBaseName": (), + "QFileInfo.completeSuffix": (), + "QFileInfo.created": (), + "QFileInfo.dir": (), + "QFileInfo.exists": [(), ('str',)], + "QFileInfo.fileName": (), + "QFileInfo.filePath": (), + "QFileInfo.group": (), + "QFileInfo.groupId": (), + "QFileInfo.isAbsolute": (), + "QFileInfo.isBundle": (), + "QFileInfo.isDir": (), + "QFileInfo.isExecutable": (), + "QFileInfo.isFile": (), + "QFileInfo.isHidden": (), + "QFileInfo.isNativePath": (), + "QFileInfo.isReadable": (), + "QFileInfo.isRelative": (), + "QFileInfo.isRoot": (), + "QFileInfo.isSymLink": (), + "QFileInfo.isWritable": (), + "QFileInfo.lastModified": (), + "QFileInfo.lastRead": (), + "QFileInfo.makeAbsolute": (), + "QFileInfo.owner": (), + "QFileInfo.ownerId": (), + "QFileInfo.path": (), + "QFileInfo.readLink": (), + "QFileInfo.refresh": (), + "QFileInfo.setCaching": ('bool',), + "QFileInfo.setFile": [('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('str',)], + "QFileInfo.size": (), + "QFileInfo.suffix": (), + "QFileInfo.swap": ('PySide2.QtCore.QFileInfo',), + "QFileInfo.symLinkTarget": (), + + # class PySide2.QtCore.QFileSelector: + "QFileSelector.__init__": ('PySide2.QtCore.QObject',), + "QFileSelector.allSelectors": (), + "QFileSelector.extraSelectors": (), + "QFileSelector.select": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileSelector.setExtraSelectors": ('List[str]',), + + # class PySide2.QtCore.QFileSystemWatcher: + "QFileSystemWatcher.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QFileSystemWatcher.addPath": ('str',), + "QFileSystemWatcher.addPaths": ('List[str]',), + "QFileSystemWatcher.directories": (), + "QFileSystemWatcher.files": (), + "QFileSystemWatcher.removePath": ('str',), + "QFileSystemWatcher.removePaths": ('List[str]',), + + # class PySide2.QtCore.QFinalState: + "QFinalState.__init__": ('PySide2.QtCore.QState',), + "QFinalState.event": ('PySide2.QtCore.QEvent',), + "QFinalState.onEntry": ('PySide2.QtCore.QEvent',), + "QFinalState.onExit": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtCore.QGenericArgument: + "QGenericArgument.__init__": [('PySide2.QtCore.QGenericArgument',), ('str', 'int')], + "QGenericArgument.__copy__": (), + "QGenericArgument.data": (), + "QGenericArgument.name": (), + + # class PySide2.QtCore.QGenericReturnArgument: + "QGenericReturnArgument.__init__": [('PySide2.QtCore.QGenericReturnArgument',), ('str', 'int')], + "QGenericReturnArgument.__copy__": (), + + # class PySide2.QtCore.QHistoryState: + "QHistoryState.__init__": [('PySide2.QtCore.QHistoryState.HistoryType', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QHistoryState.defaultState": (), + "QHistoryState.defaultTransition": (), + "QHistoryState.event": ('PySide2.QtCore.QEvent',), + "QHistoryState.historyType": (), + "QHistoryState.onEntry": ('PySide2.QtCore.QEvent',), + "QHistoryState.onExit": ('PySide2.QtCore.QEvent',), + "QHistoryState.setDefaultState": ('PySide2.QtCore.QAbstractState',), + "QHistoryState.setDefaultTransition": ('PySide2.QtCore.QAbstractTransition',), + "QHistoryState.setHistoryType": ('PySide2.QtCore.QHistoryState.HistoryType',), + + # class PySide2.QtCore.QIODevice: + "QIODevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QIODevice.atEnd": (), + "QIODevice.bytesAvailable": (), + "QIODevice.bytesToWrite": (), + "QIODevice.canReadLine": (), + "QIODevice.close": (), + "QIODevice.commitTransaction": (), + "QIODevice.currentReadChannel": (), + "QIODevice.currentWriteChannel": (), + "QIODevice.errorString": (), + "QIODevice.getChar": ('str',), + "QIODevice.isOpen": (), + "QIODevice.isReadable": (), + "QIODevice.isSequential": (), + "QIODevice.isTextModeEnabled": (), + "QIODevice.isTransactionStarted": (), + "QIODevice.isWritable": (), + "QIODevice.open": ('OpenMode',), + "QIODevice.openMode": (), + "QIODevice.peek": ('int',), + "QIODevice.pos": (), + "QIODevice.putChar": ('Union[str, int]',), + "QIODevice.read": ('int',), + "QIODevice.readAll": (), + "QIODevice.readChannelCount": (), + "QIODevice.readData": ('str', 'int'), + "QIODevice.readLine": ('int',), + "QIODevice.readLineData": ('str', 'int'), + "QIODevice.reset": (), + "QIODevice.rollbackTransaction": (), + "QIODevice.seek": ('int',), + "QIODevice.setCurrentReadChannel": ('int',), + "QIODevice.setCurrentWriteChannel": ('int',), + "QIODevice.setErrorString": ('str',), + "QIODevice.setOpenMode": ('OpenMode',), + "QIODevice.setTextModeEnabled": ('bool',), + "QIODevice.size": (), + "QIODevice.startTransaction": (), + "QIODevice.ungetChar": ('Union[str, int]',), + "QIODevice.waitForBytesWritten": ('int',), + "QIODevice.waitForReadyRead": ('int',), + "QIODevice.write": ('PySide2.QtCore.QByteArray',), + "QIODevice.writeChannelCount": (), + "QIODevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QItemSelection: + "QItemSelection.__init__": [(), ('PySide2.QtCore.QItemSelection',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelection.__copy__": (), + "QItemSelection.append": [('PySide2.QtCore.QItemSelectionRange',), ('list',)], + "QItemSelection.at": ('int',), + "QItemSelection.back": (), + "QItemSelection.clear": (), + "QItemSelection.constFirst": (), + "QItemSelection.constLast": (), + "QItemSelection.contains": ('PySide2.QtCore.QModelIndex',), + "QItemSelection.count": [(), ('PySide2.QtCore.QItemSelectionRange',)], + "QItemSelection.detachShared": (), + "QItemSelection.empty": (), + "QItemSelection.endsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.first": (), + "QItemSelection.fromSet": ('set',), + "QItemSelection.fromVector": ('list',), + "QItemSelection.front": (), + "QItemSelection.indexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.indexes": (), + "QItemSelection.insert": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.isEmpty": (), + "QItemSelection.isSharedWith": ('list',), + "QItemSelection.last": (), + "QItemSelection.lastIndexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.length": (), + "QItemSelection.merge": ('PySide2.QtCore.QItemSelection', 'SelectionFlags'), + "QItemSelection.mid": ('int', 'int'), + "QItemSelection.move": ('int', 'int'), + "QItemSelection.pop_back": (), + "QItemSelection.pop_front": (), + "QItemSelection.prepend": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_back": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_front": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAll": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAt": ('int',), + "QItemSelection.removeFirst": (), + "QItemSelection.removeLast": (), + "QItemSelection.removeOne": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.replace": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.reserve": ('int',), + "QItemSelection.select": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QItemSelection.setSharable": ('bool',), + "QItemSelection.size": (), + "QItemSelection.split": ('PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelection'), + "QItemSelection.startsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.swap": [('int', 'int'), ('list',)], + "QItemSelection.takeAt": ('int',), + "QItemSelection.takeFirst": (), + "QItemSelection.takeLast": (), + "QItemSelection.toSet": (), + "QItemSelection.toVector": (), + "QItemSelection.value": [('int',), ('int', 'PySide2.QtCore.QItemSelectionRange')], + + # class PySide2.QtCore.QItemSelectionModel: + "QItemSelectionModel.__init__": [('PySide2.QtCore.QAbstractItemModel',), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject')], + "QItemSelectionModel.clear": (), + "QItemSelectionModel.clearCurrentIndex": (), + "QItemSelectionModel.clearSelection": (), + "QItemSelectionModel.columnIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.currentIndex": (), + "QItemSelectionModel.emitSelectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QItemSelectionModel.hasSelection": (), + "QItemSelectionModel.isColumnSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isRowSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isSelected": ('PySide2.QtCore.QModelIndex',), + "QItemSelectionModel.model": (), + "QItemSelectionModel.reset": (), + "QItemSelectionModel.rowIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.select": [('PySide2.QtCore.QItemSelection', 'SelectionFlags'), ('PySide2.QtCore.QModelIndex', 'SelectionFlags')], + "QItemSelectionModel.selectedColumns": ('int',), + "QItemSelectionModel.selectedIndexes": (), + "QItemSelectionModel.selectedRows": ('int',), + "QItemSelectionModel.selection": (), + "QItemSelectionModel.setCurrentIndex": ('PySide2.QtCore.QModelIndex', 'SelectionFlags'), + "QItemSelectionModel.setModel": ('PySide2.QtCore.QAbstractItemModel',), + + # class PySide2.QtCore.QItemSelectionRange: + "QItemSelectionRange.__init__": [(), ('PySide2.QtCore.QItemSelectionRange',), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.__copy__": (), + "QItemSelectionRange.bottom": (), + "QItemSelectionRange.bottomRight": (), + "QItemSelectionRange.contains": [('PySide2.QtCore.QModelIndex',), ('int', 'int', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.height": (), + "QItemSelectionRange.indexes": (), + "QItemSelectionRange.intersected": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.intersects": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.isEmpty": (), + "QItemSelectionRange.isValid": (), + "QItemSelectionRange.left": (), + "QItemSelectionRange.model": (), + "QItemSelectionRange.parent": (), + "QItemSelectionRange.right": (), + "QItemSelectionRange.swap": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.top": (), + "QItemSelectionRange.topLeft": (), + "QItemSelectionRange.width": (), + + # class PySide2.QtCore.QJsonArray: + "QJsonArray.__init__": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonArray.__copy__": (), + "QJsonArray.append": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.at": ('int',), + "QJsonArray.contains": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.count": (), + "QJsonArray.empty": (), + "QJsonArray.first": (), + "QJsonArray.fromStringList": ('List[str]',), + "QJsonArray.fromVariantList": ('list',), + "QJsonArray.insert": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.isEmpty": (), + "QJsonArray.last": (), + "QJsonArray.pop_back": (), + "QJsonArray.pop_front": (), + "QJsonArray.prepend": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_back": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_front": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.removeAt": ('int',), + "QJsonArray.removeFirst": (), + "QJsonArray.removeLast": (), + "QJsonArray.replace": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.size": (), + "QJsonArray.takeAt": ('int',), + "QJsonArray.toVariantList": (), + + # class PySide2.QtCore.QJsonDocument: + "QJsonDocument.__init__": [(), ('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonDocument',), ('dict',)], + "QJsonDocument.__copy__": (), + "QJsonDocument.array": (), + "QJsonDocument.fromBinaryData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromJson": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonParseError'), + "QJsonDocument.fromRawData": ('str', 'int', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromVariant": ('Any',), + "QJsonDocument.isArray": (), + "QJsonDocument.isEmpty": (), + "QJsonDocument.isNull": (), + "QJsonDocument.isObject": (), + "QJsonDocument.object": (), + "QJsonDocument.rawData": ('int',), + "QJsonDocument.setArray": ('PySide2.QtCore.QJsonArray',), + "QJsonDocument.setObject": ('dict',), + "QJsonDocument.toBinaryData": (), + "QJsonDocument.toJson": [(), ('PySide2.QtCore.QJsonDocument.JsonFormat',)], + "QJsonDocument.toVariant": (), + + # class PySide2.QtCore.QJsonParseError: + "QJsonParseError.__init__": [(), ('PySide2.QtCore.QJsonParseError',)], + "QJsonParseError.__copy__": (), + "QJsonParseError.errorString": (), + + # class PySide2.QtCore.QJsonValue: + "QJsonValue.__init__": [('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonValue',), ('PySide2.QtCore.QJsonValue.Type',), ('bool',), ('dict',), ('float',), ('int',), ('str',)], + "QJsonValue.__copy__": (), + "QJsonValue.fromVariant": ('Any',), + "QJsonValue.isArray": (), + "QJsonValue.isBool": (), + "QJsonValue.isDouble": (), + "QJsonValue.isNull": (), + "QJsonValue.isObject": (), + "QJsonValue.isString": (), + "QJsonValue.isUndefined": (), + "QJsonValue.toArray": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonValue.toBool": ('bool',), + "QJsonValue.toDouble": ('float',), + "QJsonValue.toInt": ('int',), + "QJsonValue.toObject": [(), ('dict',)], + "QJsonValue.toString": [(), ('str',)], + "QJsonValue.toVariant": (), + "QJsonValue.type": (), + + # class PySide2.QtCore.QLibraryInfo: + "QLibraryInfo.build": (), + "QLibraryInfo.buildDate": (), + "QLibraryInfo.isDebugBuild": (), + "QLibraryInfo.licensedProducts": (), + "QLibraryInfo.licensee": (), + "QLibraryInfo.location": ('PySide2.QtCore.QLibraryInfo.LibraryLocation',), + "QLibraryInfo.platformPluginArguments": ('str',), + "QLibraryInfo.version": (), + + # class PySide2.QtCore.QLine: + "QLine.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('int', 'int', 'int', 'int')], + "QLine.__copy__": (), + "QLine.__reduce__": (), + "QLine.center": (), + "QLine.dx": (), + "QLine.dy": (), + "QLine.isNull": (), + "QLine.p1": (), + "QLine.p2": (), + "QLine.setLine": ('int', 'int', 'int', 'int'), + "QLine.setP1": ('PySide2.QtCore.QPoint',), + "QLine.setP2": ('PySide2.QtCore.QPoint',), + "QLine.setPoints": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QLine.toTuple": (), + "QLine.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.x1": (), + "QLine.x2": (), + "QLine.y1": (), + "QLine.y2": (), + + # class PySide2.QtCore.QLineF: + "QLineF.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QLineF.__copy__": (), + "QLineF.__reduce__": (), + "QLineF.angle": [(), ('PySide2.QtCore.QLineF',)], + "QLineF.angleTo": ('PySide2.QtCore.QLineF',), + "QLineF.center": (), + "QLineF.dx": (), + "QLineF.dy": (), + "QLineF.fromPolar": ('float', 'float'), + "QLineF.intersect": ('PySide2.QtCore.QLineF', 'PySide2.QtCore.QPointF'), + "QLineF.isNull": (), + "QLineF.length": (), + "QLineF.normalVector": (), + "QLineF.p1": (), + "QLineF.p2": (), + "QLineF.pointAt": ('float',), + "QLineF.setAngle": ('float',), + "QLineF.setLength": ('float',), + "QLineF.setLine": ('float', 'float', 'float', 'float'), + "QLineF.setP1": ('PySide2.QtCore.QPointF',), + "QLineF.setP2": ('PySide2.QtCore.QPointF',), + "QLineF.setPoints": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QLineF.toLine": (), + "QLineF.toTuple": (), + "QLineF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.unitVector": (), + "QLineF.x1": (), + "QLineF.x2": (), + "QLineF.y1": (), + "QLineF.y2": (), + + # class PySide2.QtCore.QLocale: + "QLocale.__init__": [(), ('PySide2.QtCore.QLocale',), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Country'), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), ('str',)], + "QLocale.__copy__": (), + "QLocale.amText": (), + "QLocale.bcp47Name": (), + "QLocale.c": (), + "QLocale.countriesForLanguage": ('PySide2.QtCore.QLocale.Language',), + "QLocale.country": (), + "QLocale.countryToString": ('PySide2.QtCore.QLocale.Country',), + "QLocale.createSeparatedList": ('List[str]',), + "QLocale.currencySymbol": ('PySide2.QtCore.QLocale.CurrencySymbolFormat',), + "QLocale.dateFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dateTimeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.decimalPoint": (), + "QLocale.exponential": (), + "QLocale.firstDayOfWeek": (), + "QLocale.groupSeparator": (), + "QLocale.language": (), + "QLocale.languageToString": ('PySide2.QtCore.QLocale.Language',), + "QLocale.matchingLocales": ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), + "QLocale.measurementSystem": (), + "QLocale.monthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.name": (), + "QLocale.nativeCountryName": (), + "QLocale.nativeLanguageName": (), + "QLocale.negativeSign": (), + "QLocale.numberOptions": (), + "QLocale.percent": (), + "QLocale.pmText": (), + "QLocale.positiveSign": (), + "QLocale.quoteString": ('str', 'PySide2.QtCore.QLocale.QuotationStyle'), + "QLocale.script": (), + "QLocale.scriptToString": ('PySide2.QtCore.QLocale.Script',), + "QLocale.setDefault": ('PySide2.QtCore.QLocale',), + "QLocale.setNumberOptions": ('NumberOptions',), + "QLocale.standaloneDayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.standaloneMonthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.swap": ('PySide2.QtCore.QLocale',), + "QLocale.system": (), + "QLocale.textDirection": (), + "QLocale.timeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.toCurrencyString": [('float', 'str'), ('float', 'str', 'int'), ('int', 'str')], + "QLocale.toDate": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDateTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDouble": ('str', 'bool'), + "QLocale.toFloat": ('str', 'bool'), + "QLocale.toInt": ('str', 'bool'), + "QLocale.toLongLong": ('str', 'bool'), + "QLocale.toLower": ('str',), + "QLocale.toShort": ('str', 'bool'), + "QLocale.toString": [('PySide2.QtCore.QDate', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDate', 'str'), ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDateTime', 'str'), ('PySide2.QtCore.QTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QTime', 'str'), ('float', 'Union[str, int]', 'int'), ('int',)], + "QLocale.toTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toUInt": ('str', 'bool'), + "QLocale.toULongLong": ('str', 'bool'), + "QLocale.toUShort": ('str', 'bool'), + "QLocale.toUpper": ('str',), + "QLocale.uiLanguages": (), + "QLocale.weekdays": (), + "QLocale.zeroDigit": (), + + # class PySide2.QtCore.QMargins: + "QMargins.__init__": [(), ('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QMargins.__copy__": (), + "QMargins.bottom": (), + "QMargins.isNull": (), + "QMargins.left": (), + "QMargins.right": (), + "QMargins.setBottom": ('int',), + "QMargins.setLeft": ('int',), + "QMargins.setRight": ('int',), + "QMargins.setTop": ('int',), + "QMargins.top": (), + + # class PySide2.QtCore.QMarginsF: + "QMarginsF.__init__": [(), ('PySide2.QtCore.QMargins',), ('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float')], + "QMarginsF.__copy__": (), + "QMarginsF.bottom": (), + "QMarginsF.isNull": (), + "QMarginsF.left": (), + "QMarginsF.right": (), + "QMarginsF.setBottom": ('float',), + "QMarginsF.setLeft": ('float',), + "QMarginsF.setRight": ('float',), + "QMarginsF.setTop": ('float',), + "QMarginsF.toMargins": (), + "QMarginsF.top": (), + + # class PySide2.QtCore.QMessageLogContext: + "QMessageLogContext.__init__": [(), ('str', 'int', 'str', 'str')], + + # class PySide2.QtCore.QMetaClassInfo: + "QMetaClassInfo.__init__": [(), ('PySide2.QtCore.QMetaClassInfo',)], + "QMetaClassInfo.__copy__": (), + "QMetaClassInfo.name": (), + "QMetaClassInfo.value": (), + + # class PySide2.QtCore.QMetaEnum: + "QMetaEnum.__init__": [(), ('PySide2.QtCore.QMetaEnum',)], + "QMetaEnum.__copy__": (), + "QMetaEnum.isFlag": (), + "QMetaEnum.isScoped": (), + "QMetaEnum.isValid": (), + "QMetaEnum.key": ('int',), + "QMetaEnum.keyCount": (), + "QMetaEnum.keyToValue": ('str', 'bool'), + "QMetaEnum.keysToValue": ('str', 'bool'), + "QMetaEnum.name": (), + "QMetaEnum.scope": (), + "QMetaEnum.value": ('int',), + "QMetaEnum.valueToKey": ('int',), + "QMetaEnum.valueToKeys": ('int',), + + # class PySide2.QtCore.QMetaMethod: + "QMetaMethod.__init__": [(), ('PySide2.QtCore.QMetaMethod',)], + "QMetaMethod.__copy__": (), + "QMetaMethod.access": (), + "QMetaMethod.enclosingMetaObject": (), + "QMetaMethod.invoke": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.invokeOnGadget": [('int', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('int', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.isValid": (), + "QMetaMethod.methodIndex": (), + "QMetaMethod.methodSignature": (), + "QMetaMethod.methodType": (), + "QMetaMethod.name": (), + "QMetaMethod.parameterCount": (), + "QMetaMethod.parameterNames": (), + "QMetaMethod.parameterType": ('int',), + "QMetaMethod.parameterTypes": (), + "QMetaMethod.returnType": (), + "QMetaMethod.revision": (), + "QMetaMethod.tag": (), + "QMetaMethod.typeName": (), + + # class PySide2.QtCore.QMetaObject: + "QMetaObject.__init__": (), + "QMetaObject.cast": ('PySide2.QtCore.QObject',), + "QMetaObject.checkConnectArgs": [('PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QMetaMethod'), ('str', 'str')], + "QMetaObject.classInfo": ('int',), + "QMetaObject.classInfoCount": (), + "QMetaObject.classInfoOffset": (), + "QMetaObject.className": (), + "QMetaObject.connectSlotsByName": ('PySide2.QtCore.QObject',), + "QMetaObject.constructor": ('int',), + "QMetaObject.constructorCount": (), + "QMetaObject.disconnect": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.disconnectOne": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.enumerator": ('int',), + "QMetaObject.enumeratorCount": (), + "QMetaObject.enumeratorOffset": (), + "QMetaObject.indexOfClassInfo": ('str',), + "QMetaObject.indexOfConstructor": ('str',), + "QMetaObject.indexOfEnumerator": ('str',), + "QMetaObject.indexOfMethod": ('str',), + "QMetaObject.indexOfProperty": ('str',), + "QMetaObject.indexOfSignal": ('str',), + "QMetaObject.indexOfSlot": ('str',), + "QMetaObject.inherits": ('PySide2.QtCore.QMetaObject',), + "QMetaObject.invokeMethod": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaObject.method": ('int',), + "QMetaObject.methodCount": (), + "QMetaObject.methodOffset": (), + "QMetaObject.newInstance": ('PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), + "QMetaObject.normalizedSignature": ('str',), + "QMetaObject.normalizedType": ('str',), + "QMetaObject.property": ('int',), + "QMetaObject.propertyCount": (), + "QMetaObject.propertyOffset": (), + "QMetaObject.superClass": (), + "QMetaObject.userProperty": (), + + # class PySide2.QtCore.QMetaProperty: + "QMetaProperty.__init__": [(), ('PySide2.QtCore.QMetaProperty',)], + "QMetaProperty.__copy__": (), + "QMetaProperty.enumerator": (), + "QMetaProperty.hasNotifySignal": (), + "QMetaProperty.hasStdCppSet": (), + "QMetaProperty.isConstant": (), + "QMetaProperty.isDesignable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEditable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEnumType": (), + "QMetaProperty.isFinal": (), + "QMetaProperty.isFlagType": (), + "QMetaProperty.isReadable": (), + "QMetaProperty.isResettable": (), + "QMetaProperty.isScriptable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isStored": ('PySide2.QtCore.QObject',), + "QMetaProperty.isUser": ('PySide2.QtCore.QObject',), + "QMetaProperty.isValid": (), + "QMetaProperty.isWritable": (), + "QMetaProperty.name": (), + "QMetaProperty.notifySignal": (), + "QMetaProperty.notifySignalIndex": (), + "QMetaProperty.propertyIndex": (), + "QMetaProperty.read": ('PySide2.QtCore.QObject',), + "QMetaProperty.readOnGadget": ('int',), + "QMetaProperty.reset": ('PySide2.QtCore.QObject',), + "QMetaProperty.resetOnGadget": ('int',), + "QMetaProperty.revision": (), + "QMetaProperty.type": (), + "QMetaProperty.typeName": (), + "QMetaProperty.userType": (), + "QMetaProperty.write": ('PySide2.QtCore.QObject', 'Any'), + "QMetaProperty.writeOnGadget": ('int', 'Any'), + + # class PySide2.QtCore.QMimeData: + "QMimeData.__init__": (), + "QMimeData.clear": (), + "QMimeData.colorData": (), + "QMimeData.data": ('str',), + "QMimeData.formats": (), + "QMimeData.hasColor": (), + "QMimeData.hasFormat": ('str',), + "QMimeData.hasHtml": (), + "QMimeData.hasImage": (), + "QMimeData.hasText": (), + "QMimeData.hasUrls": (), + "QMimeData.html": (), + "QMimeData.imageData": (), + "QMimeData.removeFormat": ('str',), + "QMimeData.retrieveData": ('str', 'type'), + "QMimeData.setColorData": ('Any',), + "QMimeData.setData": ('str', 'PySide2.QtCore.QByteArray'), + "QMimeData.setHtml": ('str',), + "QMimeData.setImageData": ('Any',), + "QMimeData.setText": ('str',), + "QMimeData.setUrls": ('list',), + "QMimeData.text": (), + "QMimeData.urls": (), + + # class PySide2.QtCore.QMimeDatabase: + "QMimeDatabase.__init__": (), + "QMimeDatabase.allMimeTypes": (), + "QMimeDatabase.mimeTypeForData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QMimeDatabase.mimeTypeForFile": [('PySide2.QtCore.QFileInfo', 'PySide2.QtCore.QMimeDatabase.MatchMode'), ('str', 'PySide2.QtCore.QMimeDatabase.MatchMode')], + "QMimeDatabase.mimeTypeForFileNameAndData": [('str', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QIODevice')], + "QMimeDatabase.mimeTypeForName": ('str',), + "QMimeDatabase.mimeTypeForUrl": ('PySide2.QtCore.QUrl',), + "QMimeDatabase.mimeTypesForFileName": ('str',), + "QMimeDatabase.suffixForFileName": ('str',), + + # class PySide2.QtCore.QMimeType: + "QMimeType.__init__": [(), ('PySide2.QtCore.QMimeType',)], + "QMimeType.__copy__": (), + "QMimeType.aliases": (), + "QMimeType.allAncestors": (), + "QMimeType.comment": (), + "QMimeType.filterString": (), + "QMimeType.genericIconName": (), + "QMimeType.globPatterns": (), + "QMimeType.iconName": (), + "QMimeType.inherits": ('str',), + "QMimeType.isDefault": (), + "QMimeType.isValid": (), + "QMimeType.name": (), + "QMimeType.parentMimeTypes": (), + "QMimeType.preferredSuffix": (), + "QMimeType.suffixes": (), + "QMimeType.swap": ('PySide2.QtCore.QMimeType',), + + # class PySide2.QtCore.QModelIndex: + "QModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',)], + "QModelIndex.__copy__": (), + "QModelIndex.child": ('int', 'int'), + "QModelIndex.column": (), + "QModelIndex.data": ('int',), + "QModelIndex.flags": (), + "QModelIndex.internalId": (), + "QModelIndex.internalPointer": (), + "QModelIndex.isValid": (), + "QModelIndex.model": (), + "QModelIndex.parent": (), + "QModelIndex.row": (), + "QModelIndex.sibling": ('int', 'int'), + + # class PySide2.QtCore.QMutex: + "QMutex.__init__": ('PySide2.QtCore.QMutex.RecursionMode',), + "QMutex.isRecursive": (), + "QMutex.lock": (), + "QMutex.tryLock": [(), ('int',)], + "QMutex.try_lock": (), + "QMutex.unlock": (), + + # class PySide2.QtCore.QMutexLocker: + "QMutexLocker.__init__": ('PySide2.QtCore.QBasicMutex',), + "QMutexLocker.__enter__": (), + "QMutexLocker.__exit__": ('object', 'object', 'object'), + "QMutexLocker.mutex": (), + "QMutexLocker.relock": (), + "QMutexLocker.unlock": (), + + # class PySide2.QtCore.QObject: + "QObject.__init__": ('PySide2.QtCore.QObject',), + "QObject.blockSignals": ('bool',), + "QObject.childEvent": ('PySide2.QtCore.QChildEvent',), + "QObject.children": (), + "QObject.connect": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType')], + "QObject.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.customEvent": ('PySide2.QtCore.QEvent',), + "QObject.deleteLater": (), + "QObject.disconnect": [('PySide2.QtCore.QMetaObject.Connection',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'Callable'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str'), ('str', 'Callable'), ('str', 'PySide2.QtCore.QObject', 'str')], + "QObject.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.dumpObjectInfo": (), + "QObject.dumpObjectTree": (), + "QObject.dynamicPropertyNames": (), + "QObject.emit": ('str', '...'), + "QObject.event": ('PySide2.QtCore.QEvent',), + "QObject.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QObject.findChild": ('type', 'str'), + "QObject.findChildren": [('type', 'PySide2.QtCore.QRegExp'), ('type', 'str')], + "QObject.inherits": ('str',), + "QObject.installEventFilter": ('PySide2.QtCore.QObject',), + "QObject.isSignalConnected": ('PySide2.QtCore.QMetaMethod',), + "QObject.isWidgetType": (), + "QObject.isWindowType": (), + "QObject.killTimer": ('int',), + "QObject.metaObject": (), + "QObject.moveToThread": ('PySide2.QtCore.QThread',), + "QObject.objectName": (), + "QObject.parent": (), + "QObject.property": ('str',), + "QObject.receivers": ('str',), + "QObject.registerUserData": (), + "QObject.removeEventFilter": ('PySide2.QtCore.QObject',), + "QObject.sender": (), + "QObject.senderSignalIndex": (), + "QObject.setObjectName": ('str',), + "QObject.setParent": ('PySide2.QtCore.QObject',), + "QObject.setProperty": ('str', 'Any'), + "QObject.signalsBlocked": (), + "QObject.startTimer": ('int', 'PySide2.QtCore.Qt.TimerType'), + "QObject.thread": (), + "QObject.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QObject.tr": ('str', 'str', 'int'), + + # class PySide2.QtCore.QParallelAnimationGroup: + "QParallelAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QParallelAnimationGroup.duration": (), + "QParallelAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QParallelAnimationGroup.updateCurrentTime": ('int',), + "QParallelAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QParallelAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QPauseAnimation: + "QPauseAnimation.__init__": [('PySide2.QtCore.QObject',), ('int', 'PySide2.QtCore.QObject')], + "QPauseAnimation.duration": (), + "QPauseAnimation.event": ('PySide2.QtCore.QEvent',), + "QPauseAnimation.setDuration": ('int',), + "QPauseAnimation.updateCurrentTime": ('int',), + + # class PySide2.QtCore.QPersistentModelIndex: + "QPersistentModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QPersistentModelIndex',)], + "QPersistentModelIndex.__copy__": (), + "QPersistentModelIndex.child": ('int', 'int'), + "QPersistentModelIndex.column": (), + "QPersistentModelIndex.data": ('int',), + "QPersistentModelIndex.flags": (), + "QPersistentModelIndex.internalId": (), + "QPersistentModelIndex.internalPointer": (), + "QPersistentModelIndex.isValid": (), + "QPersistentModelIndex.model": (), + "QPersistentModelIndex.parent": (), + "QPersistentModelIndex.row": (), + "QPersistentModelIndex.sibling": ('int', 'int'), + "QPersistentModelIndex.swap": ('PySide2.QtCore.QPersistentModelIndex',), + + # class PySide2.QtCore.QPluginLoader: + "QPluginLoader.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QPluginLoader.errorString": (), + "QPluginLoader.fileName": (), + "QPluginLoader.instance": (), + "QPluginLoader.isLoaded": (), + "QPluginLoader.load": (), + "QPluginLoader.metaData": (), + "QPluginLoader.setFileName": ('str',), + "QPluginLoader.staticInstances": (), + "QPluginLoader.unload": (), + + # class PySide2.QtCore.QPoint: + "QPoint.__init__": [(), ('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPoint.__copy__": (), + "QPoint.__reduce__": (), + "QPoint.dotProduct": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QPoint.isNull": (), + "QPoint.manhattanLength": (), + "QPoint.setX": ('int',), + "QPoint.setY": ('int',), + "QPoint.toTuple": (), + "QPoint.x": (), + "QPoint.y": (), + + # class PySide2.QtCore.QPointF: + "QPointF.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPointF.__copy__": (), + "QPointF.__reduce__": (), + "QPointF.dotProduct": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QPointF.isNull": (), + "QPointF.manhattanLength": (), + "QPointF.setX": ('float',), + "QPointF.setY": ('float',), + "QPointF.toPoint": (), + "QPointF.toTuple": (), + "QPointF.x": (), + "QPointF.y": (), + + # class PySide2.QtCore.QProcess: + "QProcess.__init__": ('PySide2.QtCore.QObject',), + "QProcess.arguments": (), + "QProcess.atEnd": (), + "QProcess.bytesAvailable": (), + "QProcess.bytesToWrite": (), + "QProcess.canReadLine": (), + "QProcess.close": (), + "QProcess.closeReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.closeWriteChannel": (), + "QProcess.environment": (), + "QProcess.execute": [('str',), ('str', 'List[str]')], + "QProcess.exitCode": (), + "QProcess.exitStatus": (), + "QProcess.inputChannelMode": (), + "QProcess.isSequential": (), + "QProcess.kill": (), + "QProcess.nullDevice": (), + "QProcess.open": ('OpenMode',), + "QProcess.pid": (), + "QProcess.processChannelMode": (), + "QProcess.processEnvironment": (), + "QProcess.processId": (), + "QProcess.program": (), + "QProcess.readAllStandardError": (), + "QProcess.readAllStandardOutput": (), + "QProcess.readChannel": (), + "QProcess.readData": ('str', 'int'), + "QProcess.setArguments": ('List[str]',), + "QProcess.setEnvironment": ('List[str]',), + "QProcess.setInputChannelMode": ('PySide2.QtCore.QProcess.InputChannelMode',), + "QProcess.setProcessChannelMode": ('PySide2.QtCore.QProcess.ProcessChannelMode',), + "QProcess.setProcessEnvironment": ('PySide2.QtCore.QProcessEnvironment',), + "QProcess.setProcessState": ('PySide2.QtCore.QProcess.ProcessState',), + "QProcess.setProgram": ('str',), + "QProcess.setReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.setStandardErrorFile": ('str', 'OpenMode'), + "QProcess.setStandardInputFile": ('str',), + "QProcess.setStandardOutputFile": ('str', 'OpenMode'), + "QProcess.setStandardOutputProcess": ('PySide2.QtCore.QProcess',), + "QProcess.setWorkingDirectory": ('str',), + "QProcess.setupChildProcess": (), + "QProcess.start": [('OpenMode',), ('str', 'List[str]', 'OpenMode'), ('str', 'OpenMode')], + "QProcess.startDetached": [('str',), ('str', 'List[str]'), ('str', 'List[str]', 'str', 'int')], + "QProcess.state": (), + "QProcess.systemEnvironment": (), + "QProcess.terminate": (), + "QProcess.waitForBytesWritten": ('int',), + "QProcess.waitForFinished": ('int',), + "QProcess.waitForReadyRead": ('int',), + "QProcess.waitForStarted": ('int',), + "QProcess.workingDirectory": (), + "QProcess.writeData": ('str', 'int'), + + # class PySide2.QtCore.QProcessEnvironment: + "QProcessEnvironment.__init__": [(), ('PySide2.QtCore.QProcessEnvironment',)], + "QProcessEnvironment.__copy__": (), + "QProcessEnvironment.clear": (), + "QProcessEnvironment.contains": ('str',), + "QProcessEnvironment.insert": [('PySide2.QtCore.QProcessEnvironment',), ('str', 'str')], + "QProcessEnvironment.isEmpty": (), + "QProcessEnvironment.keys": (), + "QProcessEnvironment.remove": ('str',), + "QProcessEnvironment.swap": ('PySide2.QtCore.QProcessEnvironment',), + "QProcessEnvironment.systemEnvironment": (), + "QProcessEnvironment.toStringList": (), + "QProcessEnvironment.value": ('str', 'str'), + + # class PySide2.QtCore.QPropertyAnimation: + "QPropertyAnimation.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QPropertyAnimation.event": ('PySide2.QtCore.QEvent',), + "QPropertyAnimation.propertyName": (), + "QPropertyAnimation.setPropertyName": ('PySide2.QtCore.QByteArray',), + "QPropertyAnimation.setTargetObject": ('PySide2.QtCore.QObject',), + "QPropertyAnimation.targetObject": (), + "QPropertyAnimation.updateCurrentValue": ('Any',), + "QPropertyAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QReadLocker: + "QReadLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QReadLocker.__enter__": (), + "QReadLocker.__exit__": ('object', 'object', 'object'), + "QReadLocker.readWriteLock": (), + "QReadLocker.relock": (), + "QReadLocker.unlock": (), + + # class PySide2.QtCore.QReadWriteLock: + "QReadWriteLock.__init__": ('PySide2.QtCore.QReadWriteLock.RecursionMode',), + "QReadWriteLock.lockForRead": (), + "QReadWriteLock.lockForWrite": (), + "QReadWriteLock.tryLockForRead": [(), ('int',)], + "QReadWriteLock.tryLockForWrite": [(), ('int',)], + "QReadWriteLock.unlock": (), + + # class PySide2.QtCore.QRect: + "QRect.__init__": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QSize'), ('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRect.__copy__": (), + "QRect.__reduce__": (), + "QRect.adjust": ('int', 'int', 'int', 'int'), + "QRect.adjusted": ('int', 'int', 'int', 'int'), + "QRect.bottom": (), + "QRect.bottomLeft": (), + "QRect.bottomRight": (), + "QRect.center": (), + "QRect.contains": [('PySide2.QtCore.QPoint', 'bool'), ('PySide2.QtCore.QRect', 'bool'), ('int', 'int'), ('int', 'int', 'bool')], + "QRect.getCoords": ('int', 'int', 'int', 'int'), + "QRect.getRect": ('int', 'int', 'int', 'int'), + "QRect.height": (), + "QRect.intersected": ('PySide2.QtCore.QRect',), + "QRect.intersects": ('PySide2.QtCore.QRect',), + "QRect.isEmpty": (), + "QRect.isNull": (), + "QRect.isValid": (), + "QRect.left": (), + "QRect.marginsAdded": ('PySide2.QtCore.QMargins',), + "QRect.marginsRemoved": ('PySide2.QtCore.QMargins',), + "QRect.moveBottom": ('int',), + "QRect.moveBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.moveCenter": ('PySide2.QtCore.QPoint',), + "QRect.moveLeft": ('int',), + "QRect.moveRight": ('int',), + "QRect.moveTo": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.moveTop": ('int',), + "QRect.moveTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveTopRight": ('PySide2.QtCore.QPoint',), + "QRect.normalized": (), + "QRect.right": (), + "QRect.setBottom": ('int',), + "QRect.setBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.setBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.setCoords": ('int', 'int', 'int', 'int'), + "QRect.setHeight": ('int',), + "QRect.setLeft": ('int',), + "QRect.setRect": ('int', 'int', 'int', 'int'), + "QRect.setRight": ('int',), + "QRect.setSize": ('PySide2.QtCore.QSize',), + "QRect.setTop": ('int',), + "QRect.setTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.setTopRight": ('PySide2.QtCore.QPoint',), + "QRect.setWidth": ('int',), + "QRect.setX": ('int',), + "QRect.setY": ('int',), + "QRect.size": (), + "QRect.top": (), + "QRect.topLeft": (), + "QRect.topRight": (), + "QRect.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.transposed": (), + "QRect.united": ('PySide2.QtCore.QRect',), + "QRect.width": (), + "QRect.x": (), + "QRect.y": (), + + # class PySide2.QtCore.QRectF: + "QRectF.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QSizeF'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QRectF.__copy__": (), + "QRectF.__reduce__": (), + "QRectF.adjust": ('float', 'float', 'float', 'float'), + "QRectF.adjusted": ('float', 'float', 'float', 'float'), + "QRectF.bottom": (), + "QRectF.bottomLeft": (), + "QRectF.bottomRight": (), + "QRectF.center": (), + "QRectF.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('float', 'float')], + "QRectF.getCoords": ('float', 'float', 'float', 'float'), + "QRectF.getRect": ('float', 'float', 'float', 'float'), + "QRectF.height": (), + "QRectF.intersected": ('PySide2.QtCore.QRectF',), + "QRectF.intersects": ('PySide2.QtCore.QRectF',), + "QRectF.isEmpty": (), + "QRectF.isNull": (), + "QRectF.isValid": (), + "QRectF.left": (), + "QRectF.marginsAdded": ('PySide2.QtCore.QMarginsF',), + "QRectF.marginsRemoved": ('PySide2.QtCore.QMarginsF',), + "QRectF.moveBottom": ('float',), + "QRectF.moveBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.moveCenter": ('PySide2.QtCore.QPointF',), + "QRectF.moveLeft": ('float',), + "QRectF.moveRight": ('float',), + "QRectF.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.moveTop": ('float',), + "QRectF.moveTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.normalized": (), + "QRectF.right": (), + "QRectF.setBottom": ('float',), + "QRectF.setBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.setCoords": ('float', 'float', 'float', 'float'), + "QRectF.setHeight": ('float',), + "QRectF.setLeft": ('float',), + "QRectF.setRect": ('float', 'float', 'float', 'float'), + "QRectF.setRight": ('float',), + "QRectF.setSize": ('PySide2.QtCore.QSizeF',), + "QRectF.setTop": ('float',), + "QRectF.setTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.setWidth": ('float',), + "QRectF.setX": ('float',), + "QRectF.setY": ('float',), + "QRectF.size": (), + "QRectF.toAlignedRect": (), + "QRectF.toRect": (), + "QRectF.top": (), + "QRectF.topLeft": (), + "QRectF.topRight": (), + "QRectF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.transposed": (), + "QRectF.united": ('PySide2.QtCore.QRectF',), + "QRectF.width": (), + "QRectF.x": (), + "QRectF.y": (), + + # class PySide2.QtCore.QRegExp: + "QRegExp.__init__": [(), ('PySide2.QtCore.QRegExp',), ('str', 'PySide2.QtCore.Qt.CaseSensitivity', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QRegExp.__copy__": (), + "QRegExp.__reduce__": (), + "QRegExp.cap": ('int',), + "QRegExp.captureCount": (), + "QRegExp.capturedTexts": (), + "QRegExp.caseSensitivity": (), + "QRegExp.errorString": (), + "QRegExp.escape": ('str',), + "QRegExp.exactMatch": ('str',), + "QRegExp.indexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.isEmpty": (), + "QRegExp.isMinimal": (), + "QRegExp.isValid": (), + "QRegExp.lastIndexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.matchedLength": (), + "QRegExp.pattern": (), + "QRegExp.patternSyntax": (), + "QRegExp.pos": ('int',), + "QRegExp.replace": ('str', 'str'), + "QRegExp.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QRegExp.setMinimal": ('bool',), + "QRegExp.setPattern": ('str',), + "QRegExp.setPatternSyntax": ('PySide2.QtCore.QRegExp.PatternSyntax',), + "QRegExp.swap": ('PySide2.QtCore.QRegExp',), + + # class PySide2.QtCore.QRegularExpression: + "QRegularExpression.__init__": [(), ('PySide2.QtCore.QRegularExpression',), ('str', 'PatternOptions')], + "QRegularExpression.__copy__": (), + "QRegularExpression.captureCount": (), + "QRegularExpression.errorString": (), + "QRegularExpression.escape": ('str',), + "QRegularExpression.globalMatch": ('str', 'int', 'PySide2.QtCore.QRegularExpression.MatchType', 'MatchOptions'), + "QRegularExpression.isValid": (), + "QRegularExpression.match": ('str', 'int', 'PySide2.QtCore.QRegularExpression.MatchType', 'MatchOptions'), + "QRegularExpression.namedCaptureGroups": (), + "QRegularExpression.optimize": (), + "QRegularExpression.pattern": (), + "QRegularExpression.patternErrorOffset": (), + "QRegularExpression.patternOptions": (), + "QRegularExpression.setPattern": ('str',), + "QRegularExpression.setPatternOptions": ('PatternOptions',), + "QRegularExpression.swap": ('PySide2.QtCore.QRegularExpression',), + + # class PySide2.QtCore.QRegularExpressionMatch: + "QRegularExpressionMatch.__init__": [(), ('PySide2.QtCore.QRegularExpressionMatch',)], + "QRegularExpressionMatch.__copy__": (), + "QRegularExpressionMatch.captured": [('int',), ('str',)], + "QRegularExpressionMatch.capturedEnd": [('int',), ('str',)], + "QRegularExpressionMatch.capturedLength": [('int',), ('str',)], + "QRegularExpressionMatch.capturedRef": [('int',), ('str',)], + "QRegularExpressionMatch.capturedStart": [('int',), ('str',)], + "QRegularExpressionMatch.capturedTexts": (), + "QRegularExpressionMatch.hasMatch": (), + "QRegularExpressionMatch.hasPartialMatch": (), + "QRegularExpressionMatch.isValid": (), + "QRegularExpressionMatch.lastCapturedIndex": (), + "QRegularExpressionMatch.matchOptions": (), + "QRegularExpressionMatch.matchType": (), + "QRegularExpressionMatch.regularExpression": (), + "QRegularExpressionMatch.swap": ('PySide2.QtCore.QRegularExpressionMatch',), + + # class PySide2.QtCore.QRegularExpressionMatchIterator: + "QRegularExpressionMatchIterator.__init__": [(), ('PySide2.QtCore.QRegularExpressionMatchIterator',)], + "QRegularExpressionMatchIterator.__copy__": (), + "QRegularExpressionMatchIterator.hasNext": (), + "QRegularExpressionMatchIterator.isValid": (), + "QRegularExpressionMatchIterator.matchOptions": (), + "QRegularExpressionMatchIterator.matchType": (), + "QRegularExpressionMatchIterator.peekNext": (), + "QRegularExpressionMatchIterator.regularExpression": (), + "QRegularExpressionMatchIterator.swap": ('PySide2.QtCore.QRegularExpressionMatchIterator',), + + # class PySide2.QtCore.QResource: + "QResource.__init__": ('str', 'PySide2.QtCore.QLocale'), + "QResource.absoluteFilePath": (), + "QResource.addSearchPath": ('str',), + "QResource.children": (), + "QResource.data": (), + "QResource.fileName": (), + "QResource.isCompressed": (), + "QResource.isDir": (), + "QResource.isFile": (), + "QResource.isValid": (), + "QResource.lastModified": (), + "QResource.locale": (), + "QResource.registerResource": ('str', 'str'), + "QResource.registerResourceData": ('Union[str, int]', 'str'), + "QResource.searchPaths": (), + "QResource.setFileName": ('str',), + "QResource.setLocale": ('PySide2.QtCore.QLocale',), + "QResource.size": (), + "QResource.unregisterResource": ('str', 'str'), + "QResource.unregisterResourceData": ('Union[str, int]', 'str'), + + # class PySide2.QtCore.QRunnable: + "QRunnable.__init__": (), + "QRunnable.autoDelete": (), + "QRunnable.run": (), + "QRunnable.setAutoDelete": ('bool',), + + # class PySide2.QtCore.QSaveFile: + "QSaveFile.__init__": [('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QSaveFile.cancelWriting": (), + "QSaveFile.close": (), + "QSaveFile.commit": (), + "QSaveFile.directWriteFallback": (), + "QSaveFile.fileName": (), + "QSaveFile.open": ('OpenMode',), + "QSaveFile.setDirectWriteFallback": ('bool',), + "QSaveFile.setFileName": ('str',), + "QSaveFile.writeData": ('str', 'int'), + + # class PySide2.QtCore.QSemaphore: + "QSemaphore.__init__": ('int',), + "QSemaphore.acquire": ('int',), + "QSemaphore.available": (), + "QSemaphore.release": ('int',), + "QSemaphore.tryAcquire": [('int',), ('int', 'int')], + + # class PySide2.QtCore.QSequentialAnimationGroup: + "QSequentialAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QSequentialAnimationGroup.addPause": ('int',), + "QSequentialAnimationGroup.currentAnimation": (), + "QSequentialAnimationGroup.duration": (), + "QSequentialAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QSequentialAnimationGroup.insertPause": ('int', 'int'), + "QSequentialAnimationGroup.updateCurrentTime": ('int',), + "QSequentialAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QSequentialAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QSettings: + "QSettings.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QObject'), ('str', 'str', 'PySide2.QtCore.QObject')], + "QSettings.allKeys": (), + "QSettings.applicationName": (), + "QSettings.beginGroup": ('str',), + "QSettings.beginReadArray": ('str',), + "QSettings.beginWriteArray": ('str', 'int'), + "QSettings.childGroups": (), + "QSettings.childKeys": (), + "QSettings.clear": (), + "QSettings.contains": ('str',), + "QSettings.defaultFormat": (), + "QSettings.endArray": (), + "QSettings.endGroup": (), + "QSettings.event": ('PySide2.QtCore.QEvent',), + "QSettings.fallbacksEnabled": (), + "QSettings.fileName": (), + "QSettings.format": (), + "QSettings.group": (), + "QSettings.iniCodec": (), + "QSettings.isWritable": (), + "QSettings.organizationName": (), + "QSettings.remove": ('str',), + "QSettings.scope": (), + "QSettings.setArrayIndex": ('int',), + "QSettings.setDefaultFormat": ('PySide2.QtCore.QSettings.Format',), + "QSettings.setFallbacksEnabled": ('bool',), + "QSettings.setIniCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QSettings.setPath": ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str'), + "QSettings.setValue": ('str', 'Any'), + "QSettings.status": (), + "QSettings.sync": (), + "QSettings.value": ('str', 'Any'), + + # class PySide2.QtCore.QSignalMapper: + "QSignalMapper.__init__": ('PySide2.QtCore.QObject',), + "QSignalMapper.map": [(), ('PySide2.QtCore.QObject',)], + "QSignalMapper.mapping": [('PySide2.QtCore.QObject',), ('int',), ('str',)], + "QSignalMapper.removeMappings": ('PySide2.QtCore.QObject',), + "QSignalMapper.setMapping": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + + # class PySide2.QtCore.QSignalTransition: + "QSignalTransition.__init__": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',), ('object', 'PySide2.QtCore.QState')], + "QSignalTransition.event": ('PySide2.QtCore.QEvent',), + "QSignalTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QSignalTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QSignalTransition.senderObject": (), + "QSignalTransition.setSenderObject": ('PySide2.QtCore.QObject',), + "QSignalTransition.setSignal": ('PySide2.QtCore.QByteArray',), + "QSignalTransition.signal": (), + + # class PySide2.QtCore.QSize: + "QSize.__init__": [(), ('PySide2.QtCore.QSize',), ('int', 'int')], + "QSize.__copy__": (), + "QSize.__reduce__": (), + "QSize.boundedTo": ('PySide2.QtCore.QSize',), + "QSize.expandedTo": ('PySide2.QtCore.QSize',), + "QSize.height": (), + "QSize.isEmpty": (), + "QSize.isNull": (), + "QSize.isValid": (), + "QSize.scale": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.setHeight": ('int',), + "QSize.setWidth": ('int',), + "QSize.toTuple": (), + "QSize.transpose": (), + "QSize.transposed": (), + "QSize.width": (), + + # class PySide2.QtCore.QSizeF: + "QSizeF.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QSizeF.__copy__": (), + "QSizeF.__reduce__": (), + "QSizeF.boundedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.expandedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.height": (), + "QSizeF.isEmpty": (), + "QSizeF.isNull": (), + "QSizeF.isValid": (), + "QSizeF.scale": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.scaled": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.setHeight": ('float',), + "QSizeF.setWidth": ('float',), + "QSizeF.toSize": (), + "QSizeF.toTuple": (), + "QSizeF.transpose": (), + "QSizeF.transposed": (), + "QSizeF.width": (), + + # class PySide2.QtCore.QSocketNotifier: + "QSocketNotifier.__init__": [('int', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject'), ('object', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject')], + "QSocketNotifier.event": ('PySide2.QtCore.QEvent',), + "QSocketNotifier.isEnabled": (), + "QSocketNotifier.setEnabled": ('bool',), + "QSocketNotifier.socket": (), + "QSocketNotifier.type": (), + + # class PySide2.QtCore.QSortFilterProxyModel: + "QSortFilterProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QSortFilterProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSortFilterProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.dynamicSortFilter": (), + "QSortFilterProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.filterAcceptsColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterAcceptsRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterCaseSensitivity": (), + "QSortFilterProxyModel.filterKeyColumn": (), + "QSortFilterProxyModel.filterRegExp": (), + "QSortFilterProxyModel.filterRole": (), + "QSortFilterProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSortFilterProxyModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.invalidate": (), + "QSortFilterProxyModel.invalidateFilter": (), + "QSortFilterProxyModel.isSortLocaleAware": (), + "QSortFilterProxyModel.lessThan": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'MatchFlags'), + "QSortFilterProxyModel.mimeData": ('List[int]',), + "QSortFilterProxyModel.mimeTypes": (), + "QSortFilterProxyModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QSortFilterProxyModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSortFilterProxyModel.setDynamicSortFilter": ('bool',), + "QSortFilterProxyModel.setFilterCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setFilterFixedString": ('str',), + "QSortFilterProxyModel.setFilterKeyColumn": ('int',), + "QSortFilterProxyModel.setFilterRegExp": [('PySide2.QtCore.QRegExp',), ('str',)], + "QSortFilterProxyModel.setFilterRole": ('int',), + "QSortFilterProxyModel.setFilterWildcard": ('str',), + "QSortFilterProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QSortFilterProxyModel.setSortCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setSortLocaleAware": ('bool',), + "QSortFilterProxyModel.setSortRole": ('int',), + "QSortFilterProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QSortFilterProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSortFilterProxyModel.sortCaseSensitivity": (), + "QSortFilterProxyModel.sortColumn": (), + "QSortFilterProxyModel.sortOrder": (), + "QSortFilterProxyModel.sortRole": (), + "QSortFilterProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QStandardPaths: + "QStandardPaths.displayName": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.enableTestMode": ('bool',), + "QStandardPaths.findExecutable": ('str', 'List[str]'), + "QStandardPaths.isTestModeEnabled": (), + "QStandardPaths.locate": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'LocateOptions'), + "QStandardPaths.locateAll": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'LocateOptions'), + "QStandardPaths.setTestModeEnabled": ('bool',), + "QStandardPaths.standardLocations": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.writableLocation": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + + # class PySide2.QtCore.QState: + "QState.__init__": [('PySide2.QtCore.QState',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QState')], + "QState.addTransition": [('PySide2.QtCore.QAbstractState',), ('PySide2.QtCore.QAbstractTransition',), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QAbstractState'), ('object', 'PySide2.QtCore.QAbstractState')], + "QState.assignProperty": ('PySide2.QtCore.QObject', 'str', 'Any'), + "QState.childMode": (), + "QState.errorState": (), + "QState.event": ('PySide2.QtCore.QEvent',), + "QState.initialState": (), + "QState.onEntry": ('PySide2.QtCore.QEvent',), + "QState.onExit": ('PySide2.QtCore.QEvent',), + "QState.removeTransition": ('PySide2.QtCore.QAbstractTransition',), + "QState.setChildMode": ('PySide2.QtCore.QState.ChildMode',), + "QState.setErrorState": ('PySide2.QtCore.QAbstractState',), + "QState.setInitialState": ('PySide2.QtCore.QAbstractState',), + "QState.transitions": (), + + # class PySide2.QtCore.QStateMachine: + "QStateMachine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QObject')], + "QStateMachine.addDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.addState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.beginMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.beginSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.cancelDelayedEvent": ('int',), + "QStateMachine.clearError": (), + "QStateMachine.configuration": (), + "QStateMachine.defaultAnimations": (), + "QStateMachine.endMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.endSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.error": (), + "QStateMachine.errorString": (), + "QStateMachine.event": ('PySide2.QtCore.QEvent',), + "QStateMachine.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStateMachine.globalRestorePolicy": (), + "QStateMachine.isAnimated": (), + "QStateMachine.isRunning": (), + "QStateMachine.onEntry": ('PySide2.QtCore.QEvent',), + "QStateMachine.onExit": ('PySide2.QtCore.QEvent',), + "QStateMachine.postDelayedEvent": ('PySide2.QtCore.QEvent', 'int'), + "QStateMachine.postEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QStateMachine.EventPriority'), + "QStateMachine.removeDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.removeState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.setAnimated": ('bool',), + "QStateMachine.setGlobalRestorePolicy": ('PySide2.QtCore.QState.RestorePolicy',), + "QStateMachine.setRunning": ('bool',), + "QStateMachine.start": (), + "QStateMachine.stop": (), + + # class PySide2.QtCore.QStorageInfo: + "QStorageInfo.__init__": [(), ('PySide2.QtCore.QDir',), ('PySide2.QtCore.QStorageInfo',), ('str',)], + "QStorageInfo.__copy__": (), + "QStorageInfo.blockSize": (), + "QStorageInfo.bytesAvailable": (), + "QStorageInfo.bytesFree": (), + "QStorageInfo.bytesTotal": (), + "QStorageInfo.device": (), + "QStorageInfo.displayName": (), + "QStorageInfo.fileSystemType": (), + "QStorageInfo.isReadOnly": (), + "QStorageInfo.isReady": (), + "QStorageInfo.isRoot": (), + "QStorageInfo.isValid": (), + "QStorageInfo.mountedVolumes": (), + "QStorageInfo.name": (), + "QStorageInfo.refresh": (), + "QStorageInfo.root": (), + "QStorageInfo.rootPath": (), + "QStorageInfo.setPath": ('str',), + "QStorageInfo.subvolume": (), + "QStorageInfo.swap": ('PySide2.QtCore.QStorageInfo',), + + # class PySide2.QtCore.QSysInfo: + "QSysInfo.__init__": (), + "QSysInfo.buildAbi": (), + "QSysInfo.buildCpuArchitecture": (), + "QSysInfo.currentCpuArchitecture": (), + "QSysInfo.kernelType": (), + "QSysInfo.kernelVersion": (), + "QSysInfo.macVersion": (), + "QSysInfo.machineHostName": (), + "QSysInfo.prettyProductName": (), + "QSysInfo.productType": (), + "QSysInfo.productVersion": (), + + # class PySide2.QtCore.QSystemSemaphore: + "QSystemSemaphore.__init__": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + "QSystemSemaphore.acquire": (), + "QSystemSemaphore.error": (), + "QSystemSemaphore.errorString": (), + "QSystemSemaphore.key": (), + "QSystemSemaphore.release": ('int',), + "QSystemSemaphore.setKey": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + + # class PySide2.QtCore.QTemporaryDir: + "QTemporaryDir.__init__": [(), ('str',)], + "QTemporaryDir.autoRemove": (), + "QTemporaryDir.errorString": (), + "QTemporaryDir.filePath": ('str',), + "QTemporaryDir.isValid": (), + "QTemporaryDir.path": (), + "QTemporaryDir.remove": (), + "QTemporaryDir.setAutoRemove": ('bool',), + + # class PySide2.QtCore.QTemporaryFile: + "QTemporaryFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QTemporaryFile.autoRemove": (), + "QTemporaryFile.createLocalFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.createNativeFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.fileName": (), + "QTemporaryFile.fileTemplate": (), + "QTemporaryFile.open": [(), ('OpenMode',)], + "QTemporaryFile.setAutoRemove": ('bool',), + "QTemporaryFile.setFileTemplate": ('str',), + + # class PySide2.QtCore.QTextBoundaryFinder: + "QTextBoundaryFinder.__init__": [(), ('PySide2.QtCore.QTextBoundaryFinder',), ('PySide2.QtCore.QTextBoundaryFinder.BoundaryType', 'str')], + "QTextBoundaryFinder.__copy__": (), + "QTextBoundaryFinder.boundaryReasons": (), + "QTextBoundaryFinder.isAtBoundary": (), + "QTextBoundaryFinder.isValid": (), + "QTextBoundaryFinder.position": (), + "QTextBoundaryFinder.setPosition": ('int',), + "QTextBoundaryFinder.string": (), + "QTextBoundaryFinder.toEnd": (), + "QTextBoundaryFinder.toNextBoundary": (), + "QTextBoundaryFinder.toPreviousBoundary": (), + "QTextBoundaryFinder.toStart": (), + "QTextBoundaryFinder.type": (), + + # class PySide2.QtCore.QTextCodec: + "QTextCodec.__init__": (), + "QTextCodec.aliases": (), + "QTextCodec.availableCodecs": (), + "QTextCodec.availableMibs": (), + "QTextCodec.canEncode": [('Union[str, int]',), ('str',)], + "QTextCodec.codecForHtml": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.codecForLocale": (), + "QTextCodec.codecForMib": ('int',), + "QTextCodec.codecForName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QTextCodec.codecForUtfText": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.convertToUnicode": ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState'), + "QTextCodec.fromUnicode": ('str',), + "QTextCodec.makeDecoder": ('ConversionFlags',), + "QTextCodec.makeEncoder": ('ConversionFlags',), + "QTextCodec.mibEnum": (), + "QTextCodec.name": (), + "QTextCodec.setCodecForLocale": ('PySide2.QtCore.QTextCodec',), + "QTextCodec.toUnicode": [('PySide2.QtCore.QByteArray',), ('str',), ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState')], + + # class PySide2.QtCore.QTextDecoder: + "QTextDecoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'ConversionFlags')], + "QTextDecoder.hasFailure": (), + "QTextDecoder.toUnicode": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QTextEncoder: + "QTextEncoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'ConversionFlags')], + "QTextEncoder.fromUnicode": ('str',), + "QTextEncoder.hasFailure": (), + + # class PySide2.QtCore.QTextStream: + "QTextStream.__init__": [(), ('PySide2.QtCore.QByteArray', 'OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QTextStream.atEnd": (), + "QTextStream.autoDetectUnicode": (), + "QTextStream.codec": (), + "QTextStream.device": (), + "QTextStream.fieldAlignment": (), + "QTextStream.fieldWidth": (), + "QTextStream.flush": (), + "QTextStream.generateByteOrderMark": (), + "QTextStream.integerBase": (), + "QTextStream.locale": (), + "QTextStream.numberFlags": (), + "QTextStream.padChar": (), + "QTextStream.pos": (), + "QTextStream.read": ('int',), + "QTextStream.readAll": (), + "QTextStream.readLine": ('int',), + "QTextStream.realNumberNotation": (), + "QTextStream.realNumberPrecision": (), + "QTextStream.reset": (), + "QTextStream.resetStatus": (), + "QTextStream.seek": ('int',), + "QTextStream.setAutoDetectUnicode": ('bool',), + "QTextStream.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QTextStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextStream.setFieldAlignment": ('PySide2.QtCore.QTextStream.FieldAlignment',), + "QTextStream.setFieldWidth": ('int',), + "QTextStream.setGenerateByteOrderMark": ('bool',), + "QTextStream.setIntegerBase": ('int',), + "QTextStream.setLocale": ('PySide2.QtCore.QLocale',), + "QTextStream.setNumberFlags": ('NumberFlags',), + "QTextStream.setPadChar": ('Union[str, int]',), + "QTextStream.setRealNumberNotation": ('PySide2.QtCore.QTextStream.RealNumberNotation',), + "QTextStream.setRealNumberPrecision": ('int',), + "QTextStream.setStatus": ('PySide2.QtCore.QTextStream.Status',), + "QTextStream.skipWhiteSpace": (), + "QTextStream.status": (), + "QTextStream.string": (), + + # class PySide2.QtCore.QTextStreamManipulator: + "QTextStreamManipulator.__copy__": (), + "QTextStreamManipulator.exec_": ('PySide2.QtCore.QTextStream',), + + # class PySide2.QtCore.QThread: + "QThread.__init__": ('PySide2.QtCore.QObject',), + "QThread.currentThread": (), + "QThread.event": ('PySide2.QtCore.QEvent',), + "QThread.eventDispatcher": (), + "QThread.exec_": (), + "QThread.exit": ('int',), + "QThread.idealThreadCount": (), + "QThread.isFinished": (), + "QThread.isInterruptionRequested": (), + "QThread.isRunning": (), + "QThread.loopLevel": (), + "QThread.msleep": ('int',), + "QThread.priority": (), + "QThread.quit": (), + "QThread.requestInterruption": (), + "QThread.run": (), + "QThread.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QThread.setPriority": ('PySide2.QtCore.QThread.Priority',), + "QThread.setStackSize": ('int',), + "QThread.setTerminationEnabled": ('bool',), + "QThread.sleep": ('int',), + "QThread.stackSize": (), + "QThread.start": ('PySide2.QtCore.QThread.Priority',), + "QThread.terminate": (), + "QThread.usleep": ('int',), + "QThread.wait": ('int',), + "QThread.yieldCurrentThread": (), + + # class PySide2.QtCore.QThreadPool: + "QThreadPool.__init__": ('PySide2.QtCore.QObject',), + "QThreadPool.activeThreadCount": (), + "QThreadPool.cancel": ('PySide2.QtCore.QRunnable',), + "QThreadPool.clear": (), + "QThreadPool.expiryTimeout": (), + "QThreadPool.globalInstance": (), + "QThreadPool.maxThreadCount": (), + "QThreadPool.releaseThread": (), + "QThreadPool.reserveThread": (), + "QThreadPool.setExpiryTimeout": ('int',), + "QThreadPool.setMaxThreadCount": ('int',), + "QThreadPool.start": ('PySide2.QtCore.QRunnable', 'int'), + "QThreadPool.tryStart": ('PySide2.QtCore.QRunnable',), + "QThreadPool.tryTake": ('PySide2.QtCore.QRunnable',), + "QThreadPool.waitForDone": ('int',), + + # class PySide2.QtCore.QTime: + "QTime.__init__": [(), ('PySide2.QtCore.QTime',), ('int', 'int', 'int', 'int')], + "QTime.__copy__": (), + "QTime.__reduce__": (), + "QTime.addMSecs": ('int',), + "QTime.addSecs": ('int',), + "QTime.currentTime": (), + "QTime.elapsed": (), + "QTime.fromMSecsSinceStartOfDay": ('int',), + "QTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QTime.hour": (), + "QTime.isNull": (), + "QTime.isValid": [(), ('int', 'int', 'int', 'int')], + "QTime.minute": (), + "QTime.msec": (), + "QTime.msecsSinceStartOfDay": (), + "QTime.msecsTo": ('PySide2.QtCore.QTime',), + "QTime.restart": (), + "QTime.second": (), + "QTime.secsTo": ('PySide2.QtCore.QTime',), + "QTime.setHMS": ('int', 'int', 'int', 'int'), + "QTime.start": (), + "QTime.toPython": (), + "QTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + + # class PySide2.QtCore.QTimeLine: + "QTimeLine.__init__": ('int', 'PySide2.QtCore.QObject'), + "QTimeLine.currentFrame": (), + "QTimeLine.currentTime": (), + "QTimeLine.currentValue": (), + "QTimeLine.curveShape": (), + "QTimeLine.direction": (), + "QTimeLine.duration": (), + "QTimeLine.easingCurve": (), + "QTimeLine.endFrame": (), + "QTimeLine.frameForTime": ('int',), + "QTimeLine.loopCount": (), + "QTimeLine.resume": (), + "QTimeLine.setCurrentTime": ('int',), + "QTimeLine.setCurveShape": ('PySide2.QtCore.QTimeLine.CurveShape',), + "QTimeLine.setDirection": ('PySide2.QtCore.QTimeLine.Direction',), + "QTimeLine.setDuration": ('int',), + "QTimeLine.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QTimeLine.setEndFrame": ('int',), + "QTimeLine.setFrameRange": ('int', 'int'), + "QTimeLine.setLoopCount": ('int',), + "QTimeLine.setPaused": ('bool',), + "QTimeLine.setStartFrame": ('int',), + "QTimeLine.setUpdateInterval": ('int',), + "QTimeLine.start": (), + "QTimeLine.startFrame": (), + "QTimeLine.state": (), + "QTimeLine.stop": (), + "QTimeLine.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimeLine.toggleDirection": (), + "QTimeLine.updateInterval": (), + "QTimeLine.valueForTime": ('int',), + + # class PySide2.QtCore.QTimeZone: + "QTimeZone.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'int', 'str', 'str', 'PySide2.QtCore.QLocale.Country', 'str'), ('PySide2.QtCore.QTimeZone',), ('int',)], + "QTimeZone.__copy__": (), + "QTimeZone.abbreviation": ('PySide2.QtCore.QDateTime',), + "QTimeZone.availableTimeZoneIds": [(), ('PySide2.QtCore.QLocale.Country',), ('int',)], + "QTimeZone.comment": (), + "QTimeZone.country": (), + "QTimeZone.daylightTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.displayName": [('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale'), ('PySide2.QtCore.QTimeZone.TimeType', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale')], + "QTimeZone.hasDaylightTime": (), + "QTimeZone.hasTransitions": (), + "QTimeZone.ianaIdToWindowsId": ('PySide2.QtCore.QByteArray',), + "QTimeZone.id": (), + "QTimeZone.isDaylightTime": ('PySide2.QtCore.QDateTime',), + "QTimeZone.isTimeZoneIdAvailable": ('PySide2.QtCore.QByteArray',), + "QTimeZone.isValid": (), + "QTimeZone.nextTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetData": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetFromUtc": ('PySide2.QtCore.QDateTime',), + "QTimeZone.previousTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.standardTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.swap": ('PySide2.QtCore.QTimeZone',), + "QTimeZone.systemTimeZone": (), + "QTimeZone.systemTimeZoneId": (), + "QTimeZone.transitions": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QTimeZone.utc": (), + "QTimeZone.windowsIdToDefaultIanaId": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + "QTimeZone.windowsIdToIanaIds": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + + # class PySide2.QtCore.QTimer: + "QTimer.__init__": ('PySide2.QtCore.QObject',), + "QTimer.interval": (), + "QTimer.isActive": (), + "QTimer.isSingleShot": (), + "QTimer.killTimer": ('int',), + "QTimer.remainingTime": (), + "QTimer.setInterval": ('int',), + "QTimer.setSingleShot": ('bool',), + "QTimer.setTimerType": ('PySide2.QtCore.Qt.TimerType',), + "QTimer.singleShot": [('int', 'Callable'), ('int', 'PySide2.QtCore.QObject', 'str'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject', 'str')], + "QTimer.start": [(), ('int',)], + "QTimer.stop": (), + "QTimer.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimer.timerId": (), + "QTimer.timerType": (), + + # class PySide2.QtCore.QTimerEvent: + "QTimerEvent.__init__": ('int',), + "QTimerEvent.timerId": (), + + # class PySide2.QtCore.QTranslator: + "QTranslator.__init__": ('PySide2.QtCore.QObject',), + "QTranslator.isEmpty": (), + "QTranslator.load": [('PySide2.QtCore.QLocale', 'str', 'str', 'str', 'str'), ('Union[str, int]', 'int', 'str'), ('str', 'str', 'str', 'str')], + "QTranslator.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QUrl: + "QUrl.__init__": [(), ('PySide2.QtCore.QUrl',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.__copy__": (), + "QUrl.__reduce__": (), + "QUrl.adjusted": ('FormattingOptions',), + "QUrl.authority": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.clear": (), + "QUrl.errorString": (), + "QUrl.fileName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fragment": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fromAce": ('PySide2.QtCore.QByteArray',), + "QUrl.fromEncoded": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromLocalFile": ('str',), + "QUrl.fromPercentEncoding": ('PySide2.QtCore.QByteArray',), + "QUrl.fromStringList": ('List[str]', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromUserInput": [('str',), ('str', 'str', 'UserInputResolutionOptions')], + "QUrl.hasFragment": (), + "QUrl.hasQuery": (), + "QUrl.host": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.idnWhitelist": (), + "QUrl.isEmpty": (), + "QUrl.isLocalFile": (), + "QUrl.isParentOf": ('PySide2.QtCore.QUrl',), + "QUrl.isRelative": (), + "QUrl.isValid": (), + "QUrl.matches": ('PySide2.QtCore.QUrl', 'FormattingOptions'), + "QUrl.password": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.path": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.port": ('int',), + "QUrl.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.resolved": ('PySide2.QtCore.QUrl',), + "QUrl.scheme": (), + "QUrl.setAuthority": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setFragment": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setHost": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setIdnWhitelist": ('List[str]',), + "QUrl.setPassword": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPath": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPort": ('int',), + "QUrl.setQuery": [('PySide2.QtCore.QUrlQuery',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.setScheme": ('str',), + "QUrl.setUrl": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserInfo": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserName": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.swap": ('PySide2.QtCore.QUrl',), + "QUrl.toAce": ('str',), + "QUrl.toDisplayString": ('FormattingOptions',), + "QUrl.toEncoded": ('FormattingOptions',), + "QUrl.toLocalFile": (), + "QUrl.toPercentEncoding": ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QUrl.toString": ('FormattingOptions',), + "QUrl.toStringList": ('list', 'FormattingOptions'), + "QUrl.topLevelDomain": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.url": ('FormattingOptions',), + "QUrl.userInfo": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.userName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QUrlQuery: + "QUrlQuery.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrlQuery',), ('str',)], + "QUrlQuery.__copy__": (), + "QUrlQuery.addQueryItem": ('str', 'str'), + "QUrlQuery.allQueryItemValues": ('str', 'PySide2.QtCore.QUrl.ComponentFormattingOption'), + "QUrlQuery.clear": (), + "QUrlQuery.defaultQueryPairDelimiter": (), + "QUrlQuery.defaultQueryValueDelimiter": (), + "QUrlQuery.hasQueryItem": ('str',), + "QUrlQuery.isEmpty": (), + "QUrlQuery.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrlQuery.queryItemValue": ('str', 'PySide2.QtCore.QUrl.ComponentFormattingOption'), + "QUrlQuery.queryItems": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrlQuery.queryPairDelimiter": (), + "QUrlQuery.queryValueDelimiter": (), + "QUrlQuery.removeAllQueryItems": ('str',), + "QUrlQuery.removeQueryItem": ('str',), + "QUrlQuery.setQuery": ('str',), + "QUrlQuery.setQueryDelimiters": ('Union[str, int]', 'Union[str, int]'), + "QUrlQuery.setQueryItems": ('list',), + "QUrlQuery.swap": ('PySide2.QtCore.QUrlQuery',), + "QUrlQuery.toString": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QUuid: + "QUuid.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QUuid',), ('int', 'int', 'int', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), ('str',)], + "QUuid.__copy__": (), + "QUuid.__reduce__": (), + "QUuid.createUuid": (), + "QUuid.createUuidV3": [('PySide2.QtCore.QUuid', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QUuid', 'str')], + "QUuid.createUuidV5": [('PySide2.QtCore.QUuid', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QUuid', 'str')], + "QUuid.fromRfc4122": ('PySide2.QtCore.QByteArray',), + "QUuid.isNull": (), + "QUuid.toByteArray": (), + "QUuid.toRfc4122": (), + "QUuid.toString": (), + "QUuid.variant": (), + "QUuid.version": (), + + # class PySide2.QtCore.QVariantAnimation: + "QVariantAnimation.__init__": ('PySide2.QtCore.QObject',), + "QVariantAnimation.currentValue": (), + "QVariantAnimation.duration": (), + "QVariantAnimation.easingCurve": (), + "QVariantAnimation.endValue": (), + "QVariantAnimation.event": ('PySide2.QtCore.QEvent',), + "QVariantAnimation.interpolated": ('Any', 'Any', 'float'), + "QVariantAnimation.keyValueAt": ('float',), + "QVariantAnimation.setDuration": ('int',), + "QVariantAnimation.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QVariantAnimation.setEndValue": ('Any',), + "QVariantAnimation.setKeyValueAt": ('float', 'Any'), + "QVariantAnimation.setStartValue": ('Any',), + "QVariantAnimation.startValue": (), + "QVariantAnimation.updateCurrentTime": ('int',), + "QVariantAnimation.updateCurrentValue": ('Any',), + "QVariantAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QVersionNumber: + "QVersionNumber.__init__": [(), ('int',), ('int', 'int'), ('int', 'int', 'int'), ('list',)], + "QVersionNumber.__copy__": (), + "QVersionNumber.commonPrefix": ('PySide2.QtCore.QVersionNumber', 'PySide2.QtCore.QVersionNumber'), + "QVersionNumber.compare": ('PySide2.QtCore.QVersionNumber', 'PySide2.QtCore.QVersionNumber'), + "QVersionNumber.fromString": ('str', 'int'), + "QVersionNumber.isNormalized": (), + "QVersionNumber.isNull": (), + "QVersionNumber.isPrefixOf": ('PySide2.QtCore.QVersionNumber',), + "QVersionNumber.majorVersion": (), + "QVersionNumber.microVersion": (), + "QVersionNumber.minorVersion": (), + "QVersionNumber.normalized": (), + "QVersionNumber.segmentAt": ('int',), + "QVersionNumber.segmentCount": (), + "QVersionNumber.segments": (), + "QVersionNumber.toString": (), + + # class PySide2.QtCore.QWaitCondition: + "QWaitCondition.__init__": (), + "QWaitCondition.notify_all": (), + "QWaitCondition.notify_one": (), + "QWaitCondition.wait": [('PySide2.QtCore.QMutex', 'int'), ('PySide2.QtCore.QReadWriteLock', 'int')], + "QWaitCondition.wakeAll": (), + "QWaitCondition.wakeOne": (), + + # class PySide2.QtCore.QWriteLocker: + "QWriteLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QWriteLocker.__enter__": (), + "QWriteLocker.__exit__": ('object', 'object', 'object'), + "QWriteLocker.readWriteLock": (), + "QWriteLocker.relock": (), + "QWriteLocker.unlock": (), + + # class PySide2.QtCore.QXmlStreamAttribute: + "QXmlStreamAttribute.__init__": [(), ('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttribute.__copy__": (), + "QXmlStreamAttribute.isDefault": (), + "QXmlStreamAttribute.name": (), + "QXmlStreamAttribute.namespaceUri": (), + "QXmlStreamAttribute.prefix": (), + "QXmlStreamAttribute.qualifiedName": (), + "QXmlStreamAttribute.value": (), + + # class PySide2.QtCore.QXmlStreamAttributes: + "QXmlStreamAttributes.__init__": [(), ('PySide2.QtCore.QXmlStreamAttributes',)], + "QXmlStreamAttributes.__copy__": (), + "QXmlStreamAttributes.append": [('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttributes.at": ('int',), + "QXmlStreamAttributes.capacity": (), + "QXmlStreamAttributes.clear": (), + "QXmlStreamAttributes.constData": (), + "QXmlStreamAttributes.constFirst": (), + "QXmlStreamAttributes.constLast": (), + "QXmlStreamAttributes.contains": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.count": [(), ('PySide2.QtCore.QXmlStreamAttribute',)], + "QXmlStreamAttributes.data": (), + "QXmlStreamAttributes.empty": (), + "QXmlStreamAttributes.endsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.fill": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.first": (), + "QXmlStreamAttributes.front": (), + "QXmlStreamAttributes.hasAttribute": [('str',), ('str', 'str')], + "QXmlStreamAttributes.indexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.insert": [('int', 'PySide2.QtCore.QXmlStreamAttribute'), ('int', 'int', 'PySide2.QtCore.QXmlStreamAttribute')], + "QXmlStreamAttributes.isEmpty": (), + "QXmlStreamAttributes.isSharedWith": ('list',), + "QXmlStreamAttributes.last": (), + "QXmlStreamAttributes.lastIndexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.length": (), + "QXmlStreamAttributes.mid": ('int', 'int'), + "QXmlStreamAttributes.move": ('int', 'int'), + "QXmlStreamAttributes.prepend": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.remove": [('int',), ('int', 'int')], + "QXmlStreamAttributes.removeAll": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.removeAt": ('int',), + "QXmlStreamAttributes.removeFirst": (), + "QXmlStreamAttributes.removeLast": (), + "QXmlStreamAttributes.removeOne": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.replace": ('int', 'PySide2.QtCore.QXmlStreamAttribute'), + "QXmlStreamAttributes.reserve": ('int',), + "QXmlStreamAttributes.resize": ('int',), + "QXmlStreamAttributes.setSharable": ('bool',), + "QXmlStreamAttributes.size": (), + "QXmlStreamAttributes.squeeze": (), + "QXmlStreamAttributes.startsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.swap": ('list',), + "QXmlStreamAttributes.takeAt": ('int',), + "QXmlStreamAttributes.takeFirst": (), + "QXmlStreamAttributes.takeLast": (), + "QXmlStreamAttributes.value": [('str',), ('str', 'str')], + + # class PySide2.QtCore.QXmlStreamEntityDeclaration: + "QXmlStreamEntityDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamEntityDeclaration',)], + "QXmlStreamEntityDeclaration.__copy__": (), + "QXmlStreamEntityDeclaration.name": (), + "QXmlStreamEntityDeclaration.notationName": (), + "QXmlStreamEntityDeclaration.publicId": (), + "QXmlStreamEntityDeclaration.systemId": (), + "QXmlStreamEntityDeclaration.value": (), + + # class PySide2.QtCore.QXmlStreamEntityResolver: + "QXmlStreamEntityResolver.__init__": (), + "QXmlStreamEntityResolver.resolveEntity": ('str', 'str'), + "QXmlStreamEntityResolver.resolveUndeclaredEntity": ('str',), + + # class PySide2.QtCore.QXmlStreamNamespaceDeclaration: + "QXmlStreamNamespaceDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), ('str', 'str')], + "QXmlStreamNamespaceDeclaration.__copy__": (), + "QXmlStreamNamespaceDeclaration.namespaceUri": (), + "QXmlStreamNamespaceDeclaration.prefix": (), + + # class PySide2.QtCore.QXmlStreamNotationDeclaration: + "QXmlStreamNotationDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNotationDeclaration',)], + "QXmlStreamNotationDeclaration.__copy__": (), + "QXmlStreamNotationDeclaration.name": (), + "QXmlStreamNotationDeclaration.publicId": (), + "QXmlStreamNotationDeclaration.systemId": (), + + # class PySide2.QtCore.QXmlStreamReader: + "QXmlStreamReader.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str',)], + "QXmlStreamReader.addData": [('PySide2.QtCore.QByteArray',), ('str',)], + "QXmlStreamReader.addExtraNamespaceDeclaration": ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), + "QXmlStreamReader.addExtraNamespaceDeclarations": ('list',), + "QXmlStreamReader.atEnd": (), + "QXmlStreamReader.attributes": (), + "QXmlStreamReader.characterOffset": (), + "QXmlStreamReader.clear": (), + "QXmlStreamReader.columnNumber": (), + "QXmlStreamReader.device": (), + "QXmlStreamReader.documentEncoding": (), + "QXmlStreamReader.documentVersion": (), + "QXmlStreamReader.dtdName": (), + "QXmlStreamReader.dtdPublicId": (), + "QXmlStreamReader.dtdSystemId": (), + "QXmlStreamReader.entityDeclarations": (), + "QXmlStreamReader.entityResolver": (), + "QXmlStreamReader.error": (), + "QXmlStreamReader.errorString": (), + "QXmlStreamReader.hasError": (), + "QXmlStreamReader.isCDATA": (), + "QXmlStreamReader.isCharacters": (), + "QXmlStreamReader.isComment": (), + "QXmlStreamReader.isDTD": (), + "QXmlStreamReader.isEndDocument": (), + "QXmlStreamReader.isEndElement": (), + "QXmlStreamReader.isEntityReference": (), + "QXmlStreamReader.isProcessingInstruction": (), + "QXmlStreamReader.isStandaloneDocument": (), + "QXmlStreamReader.isStartDocument": (), + "QXmlStreamReader.isStartElement": (), + "QXmlStreamReader.isWhitespace": (), + "QXmlStreamReader.lineNumber": (), + "QXmlStreamReader.name": (), + "QXmlStreamReader.namespaceDeclarations": (), + "QXmlStreamReader.namespaceProcessing": (), + "QXmlStreamReader.namespaceUri": (), + "QXmlStreamReader.notationDeclarations": (), + "QXmlStreamReader.prefix": (), + "QXmlStreamReader.processingInstructionData": (), + "QXmlStreamReader.processingInstructionTarget": (), + "QXmlStreamReader.qualifiedName": (), + "QXmlStreamReader.raiseError": ('str',), + "QXmlStreamReader.readElementText": ('PySide2.QtCore.QXmlStreamReader.ReadElementTextBehaviour',), + "QXmlStreamReader.readNext": (), + "QXmlStreamReader.readNextStartElement": (), + "QXmlStreamReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamReader.setEntityResolver": ('PySide2.QtCore.QXmlStreamEntityResolver',), + "QXmlStreamReader.setNamespaceProcessing": ('bool',), + "QXmlStreamReader.skipCurrentElement": (), + "QXmlStreamReader.text": (), + "QXmlStreamReader.tokenString": (), + "QXmlStreamReader.tokenType": (), + + # class PySide2.QtCore.QXmlStreamWriter: + "QXmlStreamWriter.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QXmlStreamWriter.autoFormatting": (), + "QXmlStreamWriter.autoFormattingIndent": (), + "QXmlStreamWriter.codec": (), + "QXmlStreamWriter.device": (), + "QXmlStreamWriter.hasError": (), + "QXmlStreamWriter.setAutoFormatting": ('bool',), + "QXmlStreamWriter.setAutoFormattingIndent": ('int',), + "QXmlStreamWriter.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QXmlStreamWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamWriter.writeAttribute": [('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamWriter.writeAttributes": ('PySide2.QtCore.QXmlStreamAttributes',), + "QXmlStreamWriter.writeCDATA": ('str',), + "QXmlStreamWriter.writeCharacters": ('str',), + "QXmlStreamWriter.writeComment": ('str',), + "QXmlStreamWriter.writeCurrentToken": ('PySide2.QtCore.QXmlStreamReader',), + "QXmlStreamWriter.writeDTD": ('str',), + "QXmlStreamWriter.writeDefaultNamespace": ('str',), + "QXmlStreamWriter.writeEmptyElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeEndDocument": (), + "QXmlStreamWriter.writeEndElement": (), + "QXmlStreamWriter.writeEntityReference": ('str',), + "QXmlStreamWriter.writeNamespace": ('str', 'str'), + "QXmlStreamWriter.writeProcessingInstruction": ('str', 'str'), + "QXmlStreamWriter.writeStartDocument": [(), ('str',), ('str', 'bool')], + "QXmlStreamWriter.writeStartElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeTextElement": [('str', 'str'), ('str', 'str', 'str')], + + # class PySide2.QtCore.QtMsgType: + + # class PySide2.QtCore.Signal: + + # class PySide2.QtCore.Slot: + }) + +# Module PySide2.QtGui +if "PySide2.QtGui" in sys.modules: + dict.update({ + + # class PySide2.QtGui.QAbstractOpenGLFunctions: + "QAbstractOpenGLFunctions.__init__": (), + "QAbstractOpenGLFunctions.initializeOpenGLFunctions": (), + "QAbstractOpenGLFunctions.isInitialized": (), + "QAbstractOpenGLFunctions.owningContext": (), + "QAbstractOpenGLFunctions.setOwningContext": ('PySide2.QtGui.QOpenGLContext',), + + # class PySide2.QtGui.QAbstractTextDocumentLayout: + "QAbstractTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QAbstractTextDocumentLayout.anchorAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QAbstractTextDocumentLayout.document": (), + "QAbstractTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QAbstractTextDocumentLayout.documentSize": (), + "QAbstractTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QAbstractTextDocumentLayout.drawInlineObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.format": ('int',), + "QAbstractTextDocumentLayout.formatAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.formatIndex": ('int',), + "QAbstractTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QAbstractTextDocumentLayout.handlerForObject": ('int',), + "QAbstractTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QAbstractTextDocumentLayout.imageAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.pageCount": (), + "QAbstractTextDocumentLayout.paintDevice": (), + "QAbstractTextDocumentLayout.positionInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.registerHandler": ('int', 'PySide2.QtCore.QObject'), + "QAbstractTextDocumentLayout.resizeInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.setPaintDevice": ('PySide2.QtGui.QPaintDevice',), + "QAbstractTextDocumentLayout.unregisterHandler": ('int', 'PySide2.QtCore.QObject'), + + # class PySide2.QtGui.QAccessible: + "QAccessible.__copy__": (), + "QAccessible.accessibleInterface": ('int',), + "QAccessible.cleanup": (), + "QAccessible.deleteAccessibleInterface": ('int',), + "QAccessible.isActive": (), + "QAccessible.qAccessibleTextBoundaryHelper": ('PySide2.QtGui.QTextCursor', 'PySide2.QtGui.QAccessible.TextBoundaryType'), + "QAccessible.queryAccessibleInterface": ('PySide2.QtCore.QObject',), + "QAccessible.registerAccessibleInterface": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessible.setActive": ('bool',), + "QAccessible.setRootObject": ('PySide2.QtCore.QObject',), + "QAccessible.uniqueId": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessible.updateAccessibility": ('PySide2.QtGui.QAccessibleEvent',), + + # class PySide2.QtGui.QAccessibleEvent: + "QAccessibleEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessible.Event'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessible.Event')], + "QAccessibleEvent.accessibleInterface": (), + "QAccessibleEvent.child": (), + "QAccessibleEvent.object": (), + "QAccessibleEvent.setChild": ('int',), + "QAccessibleEvent.type": (), + "QAccessibleEvent.uniqueId": (), + + # class PySide2.QtGui.QAccessibleInterface: + "QAccessibleInterface.__init__": (), + "QAccessibleInterface.backgroundColor": (), + "QAccessibleInterface.child": ('int',), + "QAccessibleInterface.childAt": ('int', 'int'), + "QAccessibleInterface.childCount": (), + "QAccessibleInterface.focusChild": (), + "QAccessibleInterface.foregroundColor": (), + "QAccessibleInterface.indexOfChild": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessibleInterface.interface_cast": ('PySide2.QtGui.QAccessible.InterfaceType',), + "QAccessibleInterface.isValid": (), + "QAccessibleInterface.object": (), + "QAccessibleInterface.parent": (), + "QAccessibleInterface.rect": (), + "QAccessibleInterface.role": (), + "QAccessibleInterface.setText": ('PySide2.QtGui.QAccessible.Text', 'str'), + "QAccessibleInterface.state": (), + "QAccessibleInterface.text": ('PySide2.QtGui.QAccessible.Text',), + "QAccessibleInterface.virtual_hook": ('int', 'int'), + "QAccessibleInterface.window": (), + + # class PySide2.QtGui.QActionEvent: + + # class PySide2.QtGui.QBackingStore: + "QBackingStore.__init__": ('PySide2.QtGui.QWindow',), + "QBackingStore.beginPaint": ('PySide2.QtGui.QRegion',), + "QBackingStore.endPaint": (), + "QBackingStore.flush": ('PySide2.QtGui.QRegion', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint'), + "QBackingStore.hasStaticContents": (), + "QBackingStore.paintDevice": (), + "QBackingStore.resize": ('PySide2.QtCore.QSize',), + "QBackingStore.scroll": ('PySide2.QtGui.QRegion', 'int', 'int'), + "QBackingStore.setStaticContents": ('PySide2.QtGui.QRegion',), + "QBackingStore.size": (), + "QBackingStore.staticContents": (), + "QBackingStore.window": (), + + # class PySide2.QtGui.QBitmap: + "QBitmap.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str')], + "QBitmap.__copy__": (), + "QBitmap.clear": (), + "QBitmap.fromData": ('PySide2.QtCore.QSize', 'Union[str, int]', 'PySide2.QtGui.QImage.Format'), + "QBitmap.fromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QBitmap.swap": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',)], + "QBitmap.transformed": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform',)], + + # class PySide2.QtGui.QBrush: + "QBrush.__init__": [(), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QBrush',), ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QGradient',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',)], + "QBrush.__copy__": (), + "QBrush.color": (), + "QBrush.gradient": (), + "QBrush.isOpaque": (), + "QBrush.matrix": (), + "QBrush.setColor": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',)], + "QBrush.setMatrix": ('PySide2.QtGui.QMatrix',), + "QBrush.setStyle": ('PySide2.QtCore.Qt.BrushStyle',), + "QBrush.setTexture": ('PySide2.QtGui.QPixmap',), + "QBrush.setTextureImage": ('PySide2.QtGui.QImage',), + "QBrush.setTransform": ('PySide2.QtGui.QTransform',), + "QBrush.style": (), + "QBrush.swap": ('PySide2.QtGui.QBrush',), + "QBrush.texture": (), + "QBrush.textureImage": (), + "QBrush.transform": (), + + # class PySide2.QtGui.QClipboard: + "QClipboard.clear": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.image": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.mimeData": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.ownsClipboard": (), + "QClipboard.ownsFindBuffer": (), + "QClipboard.ownsSelection": (), + "QClipboard.pixmap": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.setImage": ('PySide2.QtGui.QImage', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setText": ('str', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.supportsFindBuffer": (), + "QClipboard.supportsSelection": (), + "QClipboard.text": [('PySide2.QtGui.QClipboard.Mode',), ('str', 'PySide2.QtGui.QClipboard.Mode')], + + # class PySide2.QtGui.QCloseEvent: + "QCloseEvent.__init__": (), + + # class PySide2.QtGui.QColor: + "QColor.__init__": [(), ('Any',), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',), ('int', 'int', 'int', 'int'), ('str',)], + "QColor.__copy__": (), + "QColor.__reduce__": (), + "QColor.__setstate__": ('object',), + "QColor.alpha": (), + "QColor.alphaF": (), + "QColor.black": (), + "QColor.blackF": (), + "QColor.blue": (), + "QColor.blueF": (), + "QColor.colorNames": (), + "QColor.convertTo": ('PySide2.QtGui.QColor.Spec',), + "QColor.cyan": (), + "QColor.cyanF": (), + "QColor.dark": ('int',), + "QColor.darker": ('int',), + "QColor.fromCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.fromCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.fromHsl": ('int', 'int', 'int', 'int'), + "QColor.fromHslF": ('float', 'float', 'float', 'float'), + "QColor.fromHsv": ('int', 'int', 'int', 'int'), + "QColor.fromHsvF": ('float', 'float', 'float', 'float'), + "QColor.fromRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.fromRgbF": ('float', 'float', 'float', 'float'), + "QColor.fromRgba": ('int',), + "QColor.fromRgba64": ('int', 'int', 'int', 'int'), + "QColor.getCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.getCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.getHsl": ('int', 'int', 'int', 'int'), + "QColor.getHslF": ('float', 'float', 'float', 'float'), + "QColor.getHsv": ('int', 'int', 'int', 'int'), + "QColor.getHsvF": ('float', 'float', 'float', 'float'), + "QColor.getRgb": ('int', 'int', 'int', 'int'), + "QColor.getRgbF": ('float', 'float', 'float', 'float'), + "QColor.green": (), + "QColor.greenF": (), + "QColor.hslHue": (), + "QColor.hslHueF": (), + "QColor.hslSaturation": (), + "QColor.hslSaturationF": (), + "QColor.hsvHue": (), + "QColor.hsvHueF": (), + "QColor.hsvSaturation": (), + "QColor.hsvSaturationF": (), + "QColor.hue": (), + "QColor.hueF": (), + "QColor.isValid": (), + "QColor.isValidColor": ('str',), + "QColor.light": ('int',), + "QColor.lighter": ('int',), + "QColor.lightness": (), + "QColor.lightnessF": (), + "QColor.magenta": (), + "QColor.magentaF": (), + "QColor.name": [(), ('PySide2.QtGui.QColor.NameFormat',)], + "QColor.red": (), + "QColor.redF": (), + "QColor.rgb": (), + "QColor.rgba": (), + "QColor.saturation": (), + "QColor.saturationF": (), + "QColor.setAlpha": ('int',), + "QColor.setAlphaF": ('float',), + "QColor.setBlue": ('int',), + "QColor.setBlueF": ('float',), + "QColor.setCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.setCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.setGreen": ('int',), + "QColor.setGreenF": ('float',), + "QColor.setHsl": ('int', 'int', 'int', 'int'), + "QColor.setHslF": ('float', 'float', 'float', 'float'), + "QColor.setHsv": ('int', 'int', 'int', 'int'), + "QColor.setHsvF": ('float', 'float', 'float', 'float'), + "QColor.setNamedColor": ('str',), + "QColor.setRed": ('int',), + "QColor.setRedF": ('float',), + "QColor.setRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.setRgbF": ('float', 'float', 'float', 'float'), + "QColor.setRgba": ('int',), + "QColor.spec": (), + "QColor.toCmyk": (), + "QColor.toHsl": (), + "QColor.toHsv": (), + "QColor.toRgb": (), + "QColor.toTuple": (), + "QColor.value": (), + "QColor.valueF": (), + "QColor.yellow": (), + "QColor.yellowF": (), + + # class PySide2.QtGui.QConicalGradient: + "QConicalGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QConicalGradient',), ('float', 'float', 'float')], + "QConicalGradient.__copy__": (), + "QConicalGradient.angle": (), + "QConicalGradient.center": (), + "QConicalGradient.setAngle": ('float',), + "QConicalGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + + # class PySide2.QtGui.QContextMenuEvent: + "QContextMenuEvent.__init__": [('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'KeyboardModifiers')], + "QContextMenuEvent.globalPos": (), + "QContextMenuEvent.globalX": (), + "QContextMenuEvent.global""Y": (), + "QContextMenuEvent.pos": (), + "QContextMenuEvent.reason": (), + "QContextMenuEvent.x": (), + "QContextMenuEvent.y": (), + + # class PySide2.QtGui.QCursor: + "QCursor.__init__": [(), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtGui.QBitmap', 'PySide2.QtGui.QBitmap', 'int', 'int'), ('PySide2.QtGui.QCursor',), ('PySide2.QtGui.QPixmap', 'int', 'int')], + "QCursor.__copy__": (), + "QCursor.bitmap": (), + "QCursor.hotSpot": (), + "QCursor.mask": (), + "QCursor.pixmap": (), + "QCursor.pos": [(), ('PySide2.QtGui.QScreen',)], + "QCursor.setPos": [('PySide2.QtCore.QPoint',), ('PySide2.QtGui.QScreen', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QScreen', 'int', 'int'), ('int', 'int')], + "QCursor.setShape": ('PySide2.QtCore.Qt.CursorShape',), + "QCursor.shape": (), + "QCursor.swap": ('PySide2.QtGui.QCursor',), + + # class PySide2.QtGui.QDesktopServices: + "QDesktopServices.__init__": (), + "QDesktopServices.openUrl": ('PySide2.QtCore.QUrl',), + "QDesktopServices.setUrlHandler": ('str', 'PySide2.QtCore.QObject', 'str'), + "QDesktopServices.unsetUrlHandler": ('str',), + + # class PySide2.QtGui.QDoubleValidator: + "QDoubleValidator.__init__": [('PySide2.QtCore.QObject',), ('float', 'float', 'int', 'PySide2.QtCore.QObject')], + "QDoubleValidator.bottom": (), + "QDoubleValidator.decimals": (), + "QDoubleValidator.notation": (), + "QDoubleValidator.setBottom": ('float',), + "QDoubleValidator.setDecimals": ('int',), + "QDoubleValidator.setNotation": ('PySide2.QtGui.QDoubleValidator.Notation',), + "QDoubleValidator.setRange": ('float', 'float', 'int'), + "QDoubleValidator.setTop": ('float',), + "QDoubleValidator.top": (), + "QDoubleValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QDrag: + "QDrag.__init__": ('PySide2.QtCore.QObject',), + "QDrag.cancel": (), + "QDrag.defaultAction": (), + "QDrag.dragCursor": ('PySide2.QtCore.Qt.DropAction',), + "QDrag.exec_": [('DropActions',), ('DropActions', 'PySide2.QtCore.Qt.DropAction')], + "QDrag.hotSpot": (), + "QDrag.mimeData": (), + "QDrag.pixmap": (), + "QDrag.setDragCursor": ('PySide2.QtGui.QPixmap', 'PySide2.QtCore.Qt.DropAction'), + "QDrag.setHotSpot": ('PySide2.QtCore.QPoint',), + "QDrag.setMimeData": ('PySide2.QtCore.QMimeData',), + "QDrag.setPixmap": ('PySide2.QtGui.QPixmap',), + "QDrag.source": (), + "QDrag.start": ('DropActions',), + "QDrag.supportedActions": (), + "QDrag.target": (), + + # class PySide2.QtGui.QDragEnterEvent: + "QDragEnterEvent.__init__": ('PySide2.QtCore.QPoint', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers'), + + # class PySide2.QtGui.QDragLeaveEvent: + "QDragLeaveEvent.__init__": (), + + # class PySide2.QtGui.QDragMoveEvent: + "QDragMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDragMoveEvent.accept": [(), ('PySide2.QtCore.QRect',)], + "QDragMoveEvent.answerRect": (), + "QDragMoveEvent.ignore": [(), ('PySide2.QtCore.QRect',)], + + # class PySide2.QtGui.QDropEvent: + "QDropEvent.__init__": ('PySide2.QtCore.QPointF', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDropEvent.acceptProposedAction": (), + "QDropEvent.dropAction": (), + "QDropEvent.keyboardModifiers": (), + "QDropEvent.mimeData": (), + "QDropEvent.mouseButtons": (), + "QDropEvent.pos": (), + "QDropEvent.posF": (), + "QDropEvent.possibleActions": (), + "QDropEvent.proposedAction": (), + "QDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QDropEvent.source": (), + + # class PySide2.QtGui.QEnterEvent: + "QEnterEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEnterEvent.globalPos": (), + "QEnterEvent.globalX": (), + "QEnterEvent.global""Y": (), + "QEnterEvent.localPos": (), + "QEnterEvent.pos": (), + "QEnterEvent.screenPos": (), + "QEnterEvent.windowPos": (), + "QEnterEvent.x": (), + "QEnterEvent.y": (), + + # class PySide2.QtGui.QExposeEvent: + "QExposeEvent.__init__": ('PySide2.QtGui.QRegion',), + "QExposeEvent.region": (), + + # class PySide2.QtGui.QFileOpenEvent: + "QFileOpenEvent.__init__": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileOpenEvent.file": (), + "QFileOpenEvent.openFile": ('PySide2.QtCore.QFile', 'OpenMode'), + "QFileOpenEvent.url": (), + + # class PySide2.QtGui.QFocusEvent: + "QFocusEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.FocusReason'), + "QFocusEvent.gotFocus": (), + "QFocusEvent.lostFocus": (), + "QFocusEvent.reason": (), + + # class PySide2.QtGui.QFont: + "QFont.__init__": [(), ('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('str', 'int', 'int', 'bool')], + "QFont.__copy__": (), + "QFont.bold": (), + "QFont.cacheStatistics": (), + "QFont.capitalization": (), + "QFont.cleanup": (), + "QFont.defaultFamily": (), + "QFont.exactMatch": (), + "QFont.family": (), + "QFont.fixedPitch": (), + "QFont.fromString": ('str',), + "QFont.hintingPreference": (), + "QFont.initialize": (), + "QFont.insertSubstitution": ('str', 'str'), + "QFont.insertSubstitutions": ('str', 'List[str]'), + "QFont.isCopyOf": ('PySide2.QtGui.QFont',), + "QFont.italic": (), + "QFont.kerning": (), + "QFont.key": (), + "QFont.lastResortFamily": (), + "QFont.lastResortFont": (), + "QFont.letterSpacing": (), + "QFont.letterSpacingType": (), + "QFont.overline": (), + "QFont.pixelSize": (), + "QFont.pointSize": (), + "QFont.pointSizeF": (), + "QFont.rawMode": (), + "QFont.rawName": (), + "QFont.removeSubstitutions": ('str',), + "QFont.resolve": [(), ('PySide2.QtGui.QFont',), ('int',)], + "QFont.setBold": ('bool',), + "QFont.setCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QFont.setFamily": ('str',), + "QFont.setFixedPitch": ('bool',), + "QFont.setHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QFont.setItalic": ('bool',), + "QFont.setKerning": ('bool',), + "QFont.setLetterSpacing": ('PySide2.QtGui.QFont.SpacingType', 'float'), + "QFont.setOverline": ('bool',), + "QFont.setPixelSize": ('int',), + "QFont.setPointSize": ('int',), + "QFont.setPointSizeF": ('float',), + "QFont.setRawMode": ('bool',), + "QFont.setRawName": ('str',), + "QFont.setStretch": ('int',), + "QFont.setStrikeOut": ('bool',), + "QFont.setStyle": ('PySide2.QtGui.QFont.Style',), + "QFont.setStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QFont.setStyleName": ('str',), + "QFont.setStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QFont.setUnderline": ('bool',), + "QFont.setWeight": ('int',), + "QFont.setWordSpacing": ('float',), + "QFont.stretch": (), + "QFont.strikeOut": (), + "QFont.style": (), + "QFont.styleHint": (), + "QFont.styleName": (), + "QFont.styleStrategy": (), + "QFont.substitute": ('str',), + "QFont.substitutes": ('str',), + "QFont.substitutions": (), + "QFont.swap": ('PySide2.QtGui.QFont',), + "QFont.toString": (), + "QFont.underline": (), + "QFont.weight": (), + "QFont.wordSpacing": (), + + # class PySide2.QtGui.QFontDatabase: + "QFontDatabase.__init__": [(), ('PySide2.QtGui.QFontDatabase',)], + "QFontDatabase.__copy__": (), + "QFontDatabase.addApplicationFont": ('str',), + "QFontDatabase.addApplicationFontFromData": ('PySide2.QtCore.QByteArray',), + "QFontDatabase.applicationFontFamilies": ('int',), + "QFontDatabase.bold": ('str', 'str'), + "QFontDatabase.families": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.font": ('str', 'str', 'int'), + "QFontDatabase.hasFamily": ('str',), + "QFontDatabase.isBitmapScalable": ('str', 'str'), + "QFontDatabase.isFixedPitch": ('str', 'str'), + "QFontDatabase.isPrivateFamily": ('str',), + "QFontDatabase.isScalable": ('str', 'str'), + "QFontDatabase.isSmoothlyScalable": ('str', 'str'), + "QFontDatabase.italic": ('str', 'str'), + "QFontDatabase.pointSizes": ('str', 'str'), + "QFontDatabase.removeAllApplicationFonts": (), + "QFontDatabase.removeApplicationFont": ('int',), + "QFontDatabase.smoothSizes": ('str', 'str'), + "QFontDatabase.standardSizes": (), + "QFontDatabase.styleString": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontDatabase.styles": ('str',), + "QFontDatabase.supportsThreadedFontRendering": (), + "QFontDatabase.systemFont": ('PySide2.QtGui.QFontDatabase.SystemFont',), + "QFontDatabase.weight": ('str', 'str'), + "QFontDatabase.writingSystemName": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystemSample": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystems": [(), ('str',)], + + # class PySide2.QtGui.QFontInfo: + "QFontInfo.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontInfo.__copy__": (), + "QFontInfo.bold": (), + "QFontInfo.exactMatch": (), + "QFontInfo.family": (), + "QFontInfo.fixedPitch": (), + "QFontInfo.italic": (), + "QFontInfo.overline": (), + "QFontInfo.pixelSize": (), + "QFontInfo.pointSize": (), + "QFontInfo.pointSizeF": (), + "QFontInfo.rawMode": (), + "QFontInfo.strikeOut": (), + "QFontInfo.style": (), + "QFontInfo.styleHint": (), + "QFontInfo.styleName": (), + "QFontInfo.swap": ('PySide2.QtGui.QFontInfo',), + "QFontInfo.underline": (), + "QFontInfo.weight": (), + + # class PySide2.QtGui.QFontMetrics: + "QFontMetrics.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',)], + "QFontMetrics.__copy__": (), + "QFontMetrics.ascent": (), + "QFontMetrics.averageCharWidth": (), + "QFontMetrics.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetrics.boundingRectChar": ('Union[str, int]',), + "QFontMetrics.capHeight": (), + "QFontMetrics.charWidth": ('str', 'int'), + "QFontMetrics.descent": (), + "QFontMetrics.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'int', 'int'), + "QFontMetrics.height": (), + "QFontMetrics.inFont": ('Union[str, int]',), + "QFontMetrics.inFontUcs4": ('int',), + "QFontMetrics.leading": (), + "QFontMetrics.leftBearing": ('Union[str, int]',), + "QFontMetrics.lineSpacing": (), + "QFontMetrics.lineWidth": (), + "QFontMetrics.maxWidth": (), + "QFontMetrics.minLeftBearing": (), + "QFontMetrics.minRightBearing": (), + "QFontMetrics.overlinePos": (), + "QFontMetrics.rightBearing": ('Union[str, int]',), + "QFontMetrics.size": ('int', 'str', 'int', 'int'), + "QFontMetrics.strikeOutPos": (), + "QFontMetrics.swap": ('PySide2.QtGui.QFontMetrics',), + "QFontMetrics.tightBoundingRect": ('str',), + "QFontMetrics.underlinePos": (), + "QFontMetrics.width": [('str', 'int'), ('str', 'int', 'int')], + "QFontMetrics.widthChar": ('Union[str, int]',), + "QFontMetrics.xHeight": (), + + # class PySide2.QtGui.QFontMetricsF: + "QFontMetricsF.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',), ('PySide2.QtGui.QFontMetricsF',)], + "QFontMetricsF.__copy__": (), + "QFontMetricsF.ascent": (), + "QFontMetricsF.averageCharWidth": (), + "QFontMetricsF.boundingRect": [('PySide2.QtCore.QRectF', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetricsF.boundingRectChar": ('Union[str, int]',), + "QFontMetricsF.capHeight": (), + "QFontMetricsF.descent": (), + "QFontMetricsF.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'float', 'int'), + "QFontMetricsF.height": (), + "QFontMetricsF.inFont": ('Union[str, int]',), + "QFontMetricsF.inFontUcs4": ('int',), + "QFontMetricsF.leading": (), + "QFontMetricsF.leftBearing": ('Union[str, int]',), + "QFontMetricsF.lineSpacing": (), + "QFontMetricsF.lineWidth": (), + "QFontMetricsF.maxWidth": (), + "QFontMetricsF.minLeftBearing": (), + "QFontMetricsF.minRightBearing": (), + "QFontMetricsF.overlinePos": (), + "QFontMetricsF.rightBearing": ('Union[str, int]',), + "QFontMetricsF.size": ('int', 'str', 'int', 'int'), + "QFontMetricsF.strikeOutPos": (), + "QFontMetricsF.swap": ('PySide2.QtGui.QFontMetricsF',), + "QFontMetricsF.tightBoundingRect": ('str',), + "QFontMetricsF.underlinePos": (), + "QFontMetricsF.width": ('str',), + "QFontMetricsF.widthChar": ('Union[str, int]',), + "QFontMetricsF.xHeight": (), + + # class PySide2.QtGui.QGradient: + "QGradient.__init__": [(), ('PySide2.QtGui.QGradient',)], + "QGradient.__copy__": (), + "QGradient.coordinateMode": (), + "QGradient.interpolationMode": (), + "QGradient.setColorAt": ('float', 'PySide2.QtGui.QColor'), + "QGradient.setCoordinateMode": ('PySide2.QtGui.QGradient.CoordinateMode',), + "QGradient.setInterpolationMode": ('PySide2.QtGui.QGradient.InterpolationMode',), + "QGradient.setSpread": ('PySide2.QtGui.QGradient.Spread',), + "QGradient.setStops": ('list',), + "QGradient.spread": (), + "QGradient.stops": (), + "QGradient.type": (), + + # class PySide2.QtGui.QGuiApplication: + "QGuiApplication.__init__": ('List[str]',), + "QGuiApplication.allWindows": (), + "QGuiApplication.applicationDisplayName": (), + "QGuiApplication.applicationState": (), + "QGuiApplication.changeOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.clipboard": (), + "QGuiApplication.desktopFileName": (), + "QGuiApplication.desktopSettingsAware": (), + "QGuiApplication.devicePixelRatio": (), + "QGuiApplication.event": ('PySide2.QtCore.QEvent',), + "QGuiApplication.exec_": (), + "QGuiApplication.focusObject": (), + "QGuiApplication.focusWindow": (), + "QGuiApplication.font": (), + "QGuiApplication.isFallbackSessionManagementEnabled": (), + "QGuiApplication.isLeftToRight": (), + "QGuiApplication.isRightToLeft": (), + "QGuiApplication.isSavingSession": (), + "QGuiApplication.isSessionRestored": (), + "QGuiApplication.keyboardModifiers": (), + "QGuiApplication.layoutDirection": (), + "QGuiApplication.modalWindow": (), + "QGuiApplication.mouseButtons": (), + "QGuiApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGuiApplication.overrideCursor": (), + "QGuiApplication.palette": (), + "QGuiApplication.platformName": (), + "QGuiApplication.primaryScreen": (), + "QGuiApplication.queryKeyboardModifiers": (), + "QGuiApplication.quitOnLastWindowClosed": (), + "QGuiApplication.restoreOverrideCursor": (), + "QGuiApplication.screens": (), + "QGuiApplication.sessionId": (), + "QGuiApplication.sessionKey": (), + "QGuiApplication.setApplicationDisplayName": ('str',), + "QGuiApplication.setDesktopFileName": ('str',), + "QGuiApplication.setDesktopSettingsAware": ('bool',), + "QGuiApplication.setFallbackSessionManagementEnabled": ('bool',), + "QGuiApplication.setFont": ('PySide2.QtGui.QFont',), + "QGuiApplication.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGuiApplication.setOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.setPalette": ('PySide2.QtGui.QPalette',), + "QGuiApplication.setQuitOnLastWindowClosed": ('bool',), + "QGuiApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QGuiApplication.styleHints": (), + "QGuiApplication.sync": (), + "QGuiApplication.topLevelAt": ('PySide2.QtCore.QPoint',), + "QGuiApplication.topLevelWindows": (), + "QGuiApplication.windowIcon": (), + + # class PySide2.QtGui.QHelpEvent: + "QHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QHelpEvent.globalPos": (), + "QHelpEvent.globalX": (), + "QHelpEvent.global""Y": (), + "QHelpEvent.pos": (), + "QHelpEvent.x": (), + "QHelpEvent.y": (), + + # class PySide2.QtGui.QHideEvent: + "QHideEvent.__init__": (), + + # class PySide2.QtGui.QHoverEvent: + "QHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'KeyboardModifiers'), + "QHoverEvent.oldPos": (), + "QHoverEvent.oldPosF": (), + "QHoverEvent.pos": (), + "QHoverEvent.posF": (), + + # class PySide2.QtGui.QIcon: + "QIcon.__init__": [(), ('PySide2.QtGui.QIcon',), ('PySide2.QtGui.QIconEngine',), ('PySide2.QtGui.QPixmap',), ('str',)], + "QIcon.__copy__": (), + "QIcon.actualSize": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.cacheKey": (), + "QIcon.fromTheme": [('str',), ('str', 'PySide2.QtGui.QIcon')], + "QIcon.hasThemeIcon": ('str',), + "QIcon.isMask": (), + "QIcon.isNull": (), + "QIcon.name": (), + "QIcon.paint": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QPainter', 'int', 'int', 'int', 'int', 'Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.pixmap": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.setIsMask": ('bool',), + "QIcon.setThemeName": ('str',), + "QIcon.setThemeSearchPaths": ('List[str]',), + "QIcon.swap": ('PySide2.QtGui.QIcon',), + "QIcon.themeName": (), + "QIcon.themeSearchPaths": (), + + # class PySide2.QtGui.QIconDragEvent: + "QIconDragEvent.__init__": (), + + # class PySide2.QtGui.QIconEngine: + "QIconEngine.__init__": [(), ('PySide2.QtGui.QIconEngine',)], + "QIconEngine.actualSize": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.clone": (), + "QIconEngine.iconName": (), + "QIconEngine.isNull": (), + "QIconEngine.key": (), + "QIconEngine.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.pixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.read": ('PySide2.QtCore.QDataStream',), + "QIconEngine.scaledPixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State', 'float'), + "QIconEngine.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QImage: + "QImage.__init__": [(), ('List[str]',), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QImage.Format'), ('PySide2.QtGui.QImage',), ('Union[str, int]', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'Callable', 'int'), ('Union[str, int]', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'Callable', 'int'), ('int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'str')], + "QImage.__copy__": (), + "QImage.allGray": (), + "QImage.alphaChannel": (), + "QImage.bitPlaneCount": (), + "QImage.bits": (), + "QImage.byteCount": (), + "QImage.bytesPerLine": (), + "QImage.cacheKey": (), + "QImage.color": ('int',), + "QImage.colorCount": (), + "QImage.colorTable": (), + "QImage.constBits": (), + "QImage.constScanLine": ('int',), + "QImage.convertToFormat": [('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), ('PySide2.QtGui.QImage.Format', 'list', 'ImageConversionFlags')], + "QImage.convertToFormat_helper": ('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), + "QImage.convertToFormat_inplace": ('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), + "QImage.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QImage.createAlphaMask": ('ImageConversionFlags',), + "QImage.createHeuristicMask": ('bool',), + "QImage.createMaskFromColor": ('int', 'PySide2.QtCore.Qt.MaskMode'), + "QImage.depth": (), + "QImage.devType": (), + "QImage.devicePixelRatio": (), + "QImage.dotsPerMeterX": (), + "QImage.dotsPerMeterY": (), + "QImage.fill": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',)], + "QImage.format": (), + "QImage.fromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.hasAlphaChannel": (), + "QImage.height": (), + "QImage.invertPixels": ('PySide2.QtGui.QImage.InvertMode',), + "QImage.isGrayscale": (), + "QImage.isNull": (), + "QImage.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QImage.loadFromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QImage.mirrored": ('bool', 'bool'), + "QImage.mirrored_helper": ('bool', 'bool'), + "QImage.mirrored_inplace": ('bool', 'bool'), + "QImage.offset": (), + "QImage.paintEngine": (), + "QImage.pixel": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelColor": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelFormat": (), + "QImage.pixelIndex": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.rect": (), + "QImage.reinterpretAsFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.rgbSwapped": (), + "QImage.rgbSwapped_helper": (), + "QImage.rgbSwapped_inplace": (), + "QImage.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QImage.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scanLine": ('int',), + "QImage.setAlphaChannel": ('PySide2.QtGui.QImage',), + "QImage.setColor": ('int', 'int'), + "QImage.setColorCount": ('int',), + "QImage.setColorTable": ('list',), + "QImage.setDevicePixelRatio": ('float',), + "QImage.setDotsPerMeterX": ('int',), + "QImage.setDotsPerMeterY": ('int',), + "QImage.setOffset": ('PySide2.QtCore.QPoint',), + "QImage.setPixel": [('PySide2.QtCore.QPoint', 'int'), ('int', 'int', 'int')], + "QImage.setPixelColor": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QColor')], + "QImage.setText": ('str', 'str'), + "QImage.size": (), + "QImage.smoothScaled": ('int', 'int'), + "QImage.swap": ('PySide2.QtGui.QImage',), + "QImage.text": ('str',), + "QImage.textKeys": (), + "QImage.toImageFormat": ('PySide2.QtGui.QPixelFormat',), + "QImage.toPixelFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QImage.valid": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.width": (), + + # class PySide2.QtGui.QImageIOHandler: + "QImageIOHandler.__init__": (), + "QImageIOHandler.canRead": (), + "QImageIOHandler.currentImageNumber": (), + "QImageIOHandler.currentImageRect": (), + "QImageIOHandler.device": (), + "QImageIOHandler.format": (), + "QImageIOHandler.imageCount": (), + "QImageIOHandler.jumpToImage": ('int',), + "QImageIOHandler.jumpToNextImage": (), + "QImageIOHandler.loopCount": (), + "QImageIOHandler.name": (), + "QImageIOHandler.nextImageDelay": (), + "QImageIOHandler.option": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.read": ('PySide2.QtGui.QImage',), + "QImageIOHandler.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageIOHandler.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageIOHandler.setOption": ('PySide2.QtGui.QImageIOHandler.ImageOption', 'Any'), + "QImageIOHandler.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QImageReader: + "QImageReader.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageReader.autoDetectImageFormat": (), + "QImageReader.autoTransform": (), + "QImageReader.backgroundColor": (), + "QImageReader.canRead": (), + "QImageReader.clipRect": (), + "QImageReader.currentImageNumber": (), + "QImageReader.currentImageRect": (), + "QImageReader.decideFormatFromContent": (), + "QImageReader.device": (), + "QImageReader.error": (), + "QImageReader.errorString": (), + "QImageReader.fileName": (), + "QImageReader.format": (), + "QImageReader.gamma": (), + "QImageReader.imageCount": (), + "QImageReader.imageFormat": [(), ('PySide2.QtCore.QIODevice',), ('str',)], + "QImageReader.jumpToImage": ('int',), + "QImageReader.jumpToNextImage": (), + "QImageReader.loopCount": (), + "QImageReader.nextImageDelay": (), + "QImageReader.quality": (), + "QImageReader.read": (), + "QImageReader.scaledClipRect": (), + "QImageReader.scaledSize": (), + "QImageReader.setAutoDetectImageFormat": ('bool',), + "QImageReader.setAutoTransform": ('bool',), + "QImageReader.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QImageReader.setClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setDecideFormatFromContent": ('bool',), + "QImageReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageReader.setFileName": ('str',), + "QImageReader.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageReader.setGamma": ('float',), + "QImageReader.setQuality": ('int',), + "QImageReader.setScaledClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setScaledSize": ('PySide2.QtCore.QSize',), + "QImageReader.size": (), + "QImageReader.subType": (), + "QImageReader.supportedImageFormats": (), + "QImageReader.supportedMimeTypes": (), + "QImageReader.supportedSubTypes": (), + "QImageReader.supportsAnimation": (), + "QImageReader.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageReader.text": ('str',), + "QImageReader.textKeys": (), + "QImageReader.transformation": (), + + # class PySide2.QtGui.QImageWriter: + "QImageWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageWriter.canWrite": (), + "QImageWriter.compression": (), + "QImageWriter.description": (), + "QImageWriter.device": (), + "QImageWriter.error": (), + "QImageWriter.errorString": (), + "QImageWriter.fileName": (), + "QImageWriter.format": (), + "QImageWriter.gamma": (), + "QImageWriter.optimizedWrite": (), + "QImageWriter.progressiveScanWrite": (), + "QImageWriter.quality": (), + "QImageWriter.setCompression": ('int',), + "QImageWriter.setDescription": ('str',), + "QImageWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageWriter.setFileName": ('str',), + "QImageWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setGamma": ('float',), + "QImageWriter.setOptimizedWrite": ('bool',), + "QImageWriter.setProgressiveScanWrite": ('bool',), + "QImageWriter.setQuality": ('int',), + "QImageWriter.setSubType": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setText": ('str', 'str'), + "QImageWriter.setTransformation": ('Transformations',), + "QImageWriter.subType": (), + "QImageWriter.supportedImageFormats": (), + "QImageWriter.supportedMimeTypes": (), + "QImageWriter.supportedSubTypes": (), + "QImageWriter.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageWriter.transformation": (), + "QImageWriter.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QInputEvent: + "QInputEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'KeyboardModifiers'), + "QInputEvent.modifiers": (), + "QInputEvent.setModifiers": ('KeyboardModifiers',), + "QInputEvent.setTimestamp": ('int',), + "QInputEvent.timestamp": (), + + # class PySide2.QtGui.QInputMethodEvent: + "QInputMethodEvent.__init__": [(), ('PySide2.QtGui.QInputMethodEvent',), ('str', 'list')], + "QInputMethodEvent.attributes": (), + "QInputMethodEvent.commitString": (), + "QInputMethodEvent.preeditString": (), + "QInputMethodEvent.replacementLength": (), + "QInputMethodEvent.replacementStart": (), + "QInputMethodEvent.setCommitString": ('str', 'int', 'int'), + + # class PySide2.QtGui.QIntValidator: + "QIntValidator.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QIntValidator.bottom": (), + "QIntValidator.fixup": ('str',), + "QIntValidator.setBottom": ('int',), + "QIntValidator.setRange": ('int', 'int'), + "QIntValidator.setTop": ('int',), + "QIntValidator.top": (), + "QIntValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QKeyEvent: + "QKeyEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'int', 'KeyboardModifiers', 'int', 'int', 'int', 'str', 'bool', 'int'), ('PySide2.QtCore.QEvent.Type', 'int', 'KeyboardModifiers', 'str', 'bool', 'int')], + "QKeyEvent.count": (), + "QKeyEvent.isAutoRepeat": (), + "QKeyEvent.key": (), + "QKeyEvent.matches": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeyEvent.modifiers": (), + "QKeyEvent.nativeModifiers": (), + "QKeyEvent.nativeScanCode": (), + "QKeyEvent.nativeVirtualKey": (), + "QKeyEvent.text": (), + + # class PySide2.QtGui.QKeySequence: + "QKeySequence.__init__": [(), ('PySide2.QtGui.QKeySequence',), ('PySide2.QtGui.QKeySequence.StandardKey',), ('int', 'int', 'int', 'int'), ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat')], + "QKeySequence.__copy__": (), + "QKeySequence.__reduce__": (), + "QKeySequence.count": (), + "QKeySequence.fromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.isEmpty": (), + "QKeySequence.keyBindings": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeySequence.listFromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.listToString": ('list', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.matches": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.mnemonic": ('str',), + "QKeySequence.swap": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.toString": ('PySide2.QtGui.QKeySequence.SequenceFormat',), + + # class PySide2.QtGui.QLinearGradient: + "QLinearGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtGui.QLinearGradient',), ('float', 'float', 'float', 'float')], + "QLinearGradient.__copy__": (), + "QLinearGradient.finalStop": (), + "QLinearGradient.setFinalStop": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.setStart": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.start": (), + + # class PySide2.QtGui.QMatrix: + "QMatrix.__init__": [(), ('PySide2.QtGui.QMatrix',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix.__copy__": (), + "QMatrix.__reduce__": (), + "QMatrix.determinant": (), + "QMatrix.dx": (), + "QMatrix.dy": (), + "QMatrix.inverted": ('bool',), + "QMatrix.isIdentity": (), + "QMatrix.isInvertible": (), + "QMatrix.m11": (), + "QMatrix.m12": (), + "QMatrix.m21": (), + "QMatrix.m22": (), + "QMatrix.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QMatrix.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix.mapToPolygon": ('PySide2.QtCore.QRect',), + "QMatrix.reset": (), + "QMatrix.rotate": ('float',), + "QMatrix.scale": ('float', 'float'), + "QMatrix.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix.shear": ('float', 'float'), + "QMatrix.translate": ('float', 'float'), + + # class PySide2.QtGui.QMatrix2x2: + "QMatrix2x2.__init__": [('PySide2.QtGui.QMatrix2x2',), ('Sequence',)], + "QMatrix2x2.__copy__": (), + "QMatrix2x2.__reduce__": (), + "QMatrix2x2.data": (), + "QMatrix2x2.fill": ('object',), + "QMatrix2x2.transposed": (), + + # class PySide2.QtGui.QMatrix2x3: + "QMatrix2x3.__init__": [('PySide2.QtGui.QMatrix2x3',), ('Sequence',)], + "QMatrix2x3.__copy__": (), + "QMatrix2x3.__reduce__": (), + "QMatrix2x3.data": (), + "QMatrix2x3.fill": ('object',), + "QMatrix2x3.transposed": (), + + # class PySide2.QtGui.QMatrix2x4: + "QMatrix2x4.__init__": [('PySide2.QtGui.QMatrix2x4',), ('Sequence',)], + "QMatrix2x4.__copy__": (), + "QMatrix2x4.__reduce__": (), + "QMatrix2x4.data": (), + "QMatrix2x4.fill": ('object',), + "QMatrix2x4.transposed": (), + + # class PySide2.QtGui.QMatrix3x2: + "QMatrix3x2.__init__": [('PySide2.QtGui.QMatrix3x2',), ('Sequence',)], + "QMatrix3x2.__copy__": (), + "QMatrix3x2.__reduce__": (), + "QMatrix3x2.data": (), + "QMatrix3x2.fill": ('object',), + "QMatrix3x2.transposed": (), + + # class PySide2.QtGui.QMatrix3x3: + "QMatrix3x3.__init__": [('PySide2.QtGui.QMatrix3x3',), ('Sequence',)], + "QMatrix3x3.__copy__": (), + "QMatrix3x3.__reduce__": (), + "QMatrix3x3.data": (), + "QMatrix3x3.fill": ('object',), + "QMatrix3x3.transposed": (), + + # class PySide2.QtGui.QMatrix3x4: + "QMatrix3x4.__init__": [('PySide2.QtGui.QMatrix3x4',), ('Sequence',)], + "QMatrix3x4.__copy__": (), + "QMatrix3x4.__reduce__": (), + "QMatrix3x4.data": (), + "QMatrix3x4.fill": ('object',), + "QMatrix3x4.transposed": (), + + # class PySide2.QtGui.QMatrix4x2: + "QMatrix4x2.__init__": [('PySide2.QtGui.QMatrix4x2',), ('Sequence',)], + "QMatrix4x2.__copy__": (), + "QMatrix4x2.__reduce__": (), + "QMatrix4x2.data": (), + "QMatrix4x2.fill": ('object',), + "QMatrix4x2.transposed": (), + + # class PySide2.QtGui.QMatrix4x3: + "QMatrix4x3.__init__": [('PySide2.QtGui.QMatrix4x3',), ('Sequence',)], + "QMatrix4x3.__copy__": (), + "QMatrix4x3.__reduce__": (), + "QMatrix4x3.data": (), + "QMatrix4x3.fill": ('object',), + "QMatrix4x3.transposed": (), + + # class PySide2.QtGui.QMatrix4x4: + "QMatrix4x4.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float',), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.__copy__": (), + "QMatrix4x4.__reduce__": (), + "QMatrix4x4.column": ('int',), + "QMatrix4x4.copyDataTo": ('float',), + "QMatrix4x4.data": (), + "QMatrix4x4.determinant": (), + "QMatrix4x4.fill": ('float',), + "QMatrix4x4.flipCoordinates": (), + "QMatrix4x4.frustum": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix4x4.inverted": ('bool',), + "QMatrix4x4.isAffine": (), + "QMatrix4x4.isIdentity": (), + "QMatrix4x4.lookAt": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QMatrix4x4.map": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',)], + "QMatrix4x4.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix4x4.mapVector": ('PySide2.QtGui.QVector3D',), + "QMatrix4x4.normalMatrix": (), + "QMatrix4x4.optimize": (), + "QMatrix4x4.ortho": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.perspective": ('float', 'float', 'float', 'float'), + "QMatrix4x4.rotate": [('PySide2.QtGui.QQuaternion',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QMatrix4x4.row": ('int',), + "QMatrix4x4.scale": [('PySide2.QtGui.QVector3D',), ('float',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.setColumn": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setRow": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setToIdentity": (), + "QMatrix4x4.toAffine": (), + "QMatrix4x4.toTransform": [(), ('float',)], + "QMatrix4x4.translate": [('PySide2.QtGui.QVector3D',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.transposed": (), + "QMatrix4x4.viewport": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + + # class PySide2.QtGui.QMouseEvent: + "QMouseEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers')], + "QMouseEvent.button": (), + "QMouseEvent.buttons": (), + "QMouseEvent.flags": (), + "QMouseEvent.globalPos": (), + "QMouseEvent.globalX": (), + "QMouseEvent.global""Y": (), + "QMouseEvent.localPos": (), + "QMouseEvent.pos": (), + "QMouseEvent.screenPos": (), + "QMouseEvent.setLocalPos": ('PySide2.QtCore.QPointF',), + "QMouseEvent.source": (), + "QMouseEvent.windowPos": (), + "QMouseEvent.x": (), + "QMouseEvent.y": (), + + # class PySide2.QtGui.QMoveEvent: + "QMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QMoveEvent.oldPos": (), + "QMoveEvent.pos": (), + + # class PySide2.QtGui.QMovie: + "QMovie.__init__": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QMovie.backgroundColor": (), + "QMovie.cacheMode": (), + "QMovie.currentFrameNumber": (), + "QMovie.currentImage": (), + "QMovie.currentPixmap": (), + "QMovie.device": (), + "QMovie.fileName": (), + "QMovie.format": (), + "QMovie.frameCount": (), + "QMovie.frameRect": (), + "QMovie.isValid": (), + "QMovie.jumpToFrame": ('int',), + "QMovie.jumpToNextFrame": (), + "QMovie.loopCount": (), + "QMovie.nextFrameDelay": (), + "QMovie.scaledSize": (), + "QMovie.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QMovie.setCacheMode": ('PySide2.QtGui.QMovie.CacheMode',), + "QMovie.setDevice": ('PySide2.QtCore.QIODevice',), + "QMovie.setFileName": ('str',), + "QMovie.setFormat": ('PySide2.QtCore.QByteArray',), + "QMovie.setPaused": ('bool',), + "QMovie.setScaledSize": ('PySide2.QtCore.QSize',), + "QMovie.setSpeed": ('int',), + "QMovie.speed": (), + "QMovie.start": (), + "QMovie.state": (), + "QMovie.stop": (), + "QMovie.supportedFormats": (), + + # class PySide2.QtGui.QOffscreenSurface: + "QOffscreenSurface.__init__": ('PySide2.QtGui.QScreen',), + "QOffscreenSurface.create": (), + "QOffscreenSurface.destroy": (), + "QOffscreenSurface.format": (), + "QOffscreenSurface.isValid": (), + "QOffscreenSurface.nativeHandle": (), + "QOffscreenSurface.requestedFormat": (), + "QOffscreenSurface.screen": (), + "QOffscreenSurface.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOffscreenSurface.setNativeHandle": ('int',), + "QOffscreenSurface.setScreen": ('PySide2.QtGui.QScreen',), + "QOffscreenSurface.size": (), + "QOffscreenSurface.surfaceHandle": (), + "QOffscreenSurface.surfaceType": (), + + # class PySide2.QtGui.QOpenGLBuffer: + "QOpenGLBuffer.__init__": [(), ('PySide2.QtGui.QOpenGLBuffer',), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.allocate": [('int',), ('int', 'int')], + "QOpenGLBuffer.bind": (), + "QOpenGLBuffer.bufferId": (), + "QOpenGLBuffer.create": (), + "QOpenGLBuffer.destroy": (), + "QOpenGLBuffer.isCreated": (), + "QOpenGLBuffer.map": ('PySide2.QtGui.QOpenGLBuffer.Access',), + "QOpenGLBuffer.mapRange": ('int', 'int', 'RangeAccessFlags'), + "QOpenGLBuffer.read": ('int', 'int', 'int'), + "QOpenGLBuffer.release": [(), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.setUsagePattern": ('PySide2.QtGui.QOpenGLBuffer.UsagePattern',), + "QOpenGLBuffer.size": (), + "QOpenGLBuffer.type": (), + "QOpenGLBuffer.unmap": (), + "QOpenGLBuffer.usagePattern": (), + "QOpenGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtGui.QOpenGLContext: + "QOpenGLContext.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLContext.areSharing": ('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLContext.create": (), + "QOpenGLContext.currentContext": (), + "QOpenGLContext.defaultFramebufferObject": (), + "QOpenGLContext.doneCurrent": (), + "QOpenGLContext.extensions": (), + "QOpenGLContext.extraFunctions": (), + "QOpenGLContext.format": (), + "QOpenGLContext.functions": (), + "QOpenGLContext.globalShareContext": (), + "QOpenGLContext.hasExtension": ('PySide2.QtCore.QByteArray',), + "QOpenGLContext.isOpenGLES": (), + "QOpenGLContext.isValid": (), + "QOpenGLContext.makeCurrent": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.nativeHandle": (), + "QOpenGLContext.openGLModuleHandle": (), + "QOpenGLContext.openGLModuleType": (), + "QOpenGLContext.screen": (), + "QOpenGLContext.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLContext.setNativeHandle": ('Any',), + "QOpenGLContext.setScreen": ('PySide2.QtGui.QScreen',), + "QOpenGLContext.setShareContext": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLContext.shareContext": (), + "QOpenGLContext.shareGroup": (), + "QOpenGLContext.supportsThreadedOpenGL": (), + "QOpenGLContext.surface": (), + "QOpenGLContext.swapBuffers": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.versionFunctions": ('PySide2.QtGui.QOpenGLVersionProfile',), + + # class PySide2.QtGui.QOpenGLContextGroup: + "QOpenGLContextGroup.currentContextGroup": (), + "QOpenGLContextGroup.shares": (), + + # class PySide2.QtGui.QOpenGLDebugLogger: + "QOpenGLDebugLogger.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLDebugLogger.disableMessages": [('Sources', 'Types', 'Severities'), ('list', 'Sources', 'Types')], + "QOpenGLDebugLogger.enableMessages": [('Sources', 'Types', 'Severities'), ('list', 'Sources', 'Types')], + "QOpenGLDebugLogger.initialize": (), + "QOpenGLDebugLogger.isLogging": (), + "QOpenGLDebugLogger.logMessage": ('PySide2.QtGui.QOpenGLDebugMessage',), + "QOpenGLDebugLogger.loggedMessages": (), + "QOpenGLDebugLogger.loggingMode": (), + "QOpenGLDebugLogger.maximumMessageLength": (), + "QOpenGLDebugLogger.popGroup": (), + "QOpenGLDebugLogger.pushGroup": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Source'), + "QOpenGLDebugLogger.startLogging": ('PySide2.QtGui.QOpenGLDebugLogger.LoggingMode',), + "QOpenGLDebugLogger.stopLogging": (), + + # class PySide2.QtGui.QOpenGLDebugMessage: + "QOpenGLDebugMessage.__init__": [(), ('PySide2.QtGui.QOpenGLDebugMessage',)], + "QOpenGLDebugMessage.__copy__": (), + "QOpenGLDebugMessage.createApplicationMessage": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Severity', 'PySide2.QtGui.QOpenGLDebugMessage.Type'), + "QOpenGLDebugMessage.createThirdPartyMessage": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Severity', 'PySide2.QtGui.QOpenGLDebugMessage.Type'), + "QOpenGLDebugMessage.id": (), + "QOpenGLDebugMessage.message": (), + "QOpenGLDebugMessage.severity": (), + "QOpenGLDebugMessage.source": (), + "QOpenGLDebugMessage.swap": ('PySide2.QtGui.QOpenGLDebugMessage',), + "QOpenGLDebugMessage.type": (), + + # class PySide2.QtGui.QOpenGLExtraFunctions: + "QOpenGLExtraFunctions.__init__": [(), ('PySide2.QtGui.QOpenGLContext',)], + "QOpenGLExtraFunctions.glActiveShaderProgram": ('int', 'int'), + "QOpenGLExtraFunctions.glBeginQuery": ('int', 'int'), + "QOpenGLExtraFunctions.glBeginTransformFeedback": ('int',), + "QOpenGLExtraFunctions.glBindBufferBase": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glBindImageTexture": ('int', 'int', 'int', 'Union[str, int]', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glBindProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glBindSampler": ('int', 'int'), + "QOpenGLExtraFunctions.glBindTransformFeedback": ('int', 'int'), + "QOpenGLExtraFunctions.glBindVertexArray": ('int',), + "QOpenGLExtraFunctions.glBlitFramebuffer": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glClearBufferfi": ('int', 'int', 'float', 'int'), + "QOpenGLExtraFunctions.glClearBufferfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glClearBufferiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glClearBufferuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glCompressedTexImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCompressedTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCopyTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDeleteProgramPipelines": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteQueries": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteSamplers": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteTransformFeedbacks": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteVertexArrays": ('int', 'int'), + "QOpenGLExtraFunctions.glDispatchCompute": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawArraysIndirect": ('int', 'int'), + "QOpenGLExtraFunctions.glDrawArraysInstanced": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawBuffers": ('int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsIndirect": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsInstanced": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawRangeElements": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glEndQuery": ('int',), + "QOpenGLExtraFunctions.glFramebufferParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glFramebufferTextureLayer": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGenProgramPipelines": ('int', 'int'), + "QOpenGLExtraFunctions.glGenQueries": ('int', 'int'), + "QOpenGLExtraFunctions.glGenSamplers": ('int', 'int'), + "QOpenGLExtraFunctions.glGenTransformFeedbacks": ('int', 'int'), + "QOpenGLExtraFunctions.glGenVertexArrays": ('int', 'int'), + "QOpenGLExtraFunctions.glGetActiveUniformBlockiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetActiveUniformsiv": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetBufferParameteri64v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetFragDataLocation": ('int', 'str'), + "QOpenGLExtraFunctions.glGetFramebufferParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInteger64i_v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInteger64v": ('int', 'int'), + "QOpenGLExtraFunctions.glGetIntegeri_v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInternalformativ": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetMultisamplefv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetProgramBinary": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramInterfaceiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramPipelineiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramResourceIndex": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glGetProgramResourceLocation": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glGetProgramResourceiv": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetQueryObjectuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetQueryiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetSamplerParameterfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetSamplerParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetStringi": ('int', 'int'), + "QOpenGLExtraFunctions.glGetTexLevelParameterfv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetTexLevelParameteriv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetUniformBlockIndex": ('int', 'str'), + "QOpenGLExtraFunctions.glGetUniformuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetVertexAttribIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetVertexAttribIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glInvalidateFramebuffer": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glInvalidateSubFramebuffer": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glIsProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glIsQuery": ('int',), + "QOpenGLExtraFunctions.glIsSampler": ('int',), + "QOpenGLExtraFunctions.glIsTransformFeedback": ('int',), + "QOpenGLExtraFunctions.glIsVertexArray": ('int',), + "QOpenGLExtraFunctions.glMemoryBarrier": ('int',), + "QOpenGLExtraFunctions.glMemoryBarrierByRegion": ('int',), + "QOpenGLExtraFunctions.glProgramBinary": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1f": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform1fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform1i": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1ui": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2f": ('int', 'int', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform2fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform2i": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2ui": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3f": ('int', 'int', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform3fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform3i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4f": ('int', 'int', 'float', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform4fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform4i": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4ui": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2x3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2x4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3x2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3x4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4x2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4x3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glReadBuffer": ('int',), + "QOpenGLExtraFunctions.glRenderbufferStorageMultisample": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glSampleMaski": ('int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameterf": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glSamplerParameterfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glSamplerParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage2D": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage2DMultisample": ('int', 'int', 'int', 'int', 'int', 'Union[str, int]'), + "QOpenGLExtraFunctions.glTexStorage3D": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform1ui": ('int', 'int'), + "QOpenGLExtraFunctions.glUniform1uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform2ui": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform2uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform3ui": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform3uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform4ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform4uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniformBlockBinding": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniformMatrix2x3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix2x4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix3x2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix3x4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix4x2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix4x3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUnmapBuffer": ('int',), + "QOpenGLExtraFunctions.glUseProgramStages": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glValidateProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glVertexAttribBinding": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribDivisor": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribFormat": ('int', 'int', 'int', 'Union[str, int]', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4iv": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4uiv": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribIFormat": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribIPointer": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexBindingDivisor": ('int', 'int'), + + # class PySide2.QtGui.QOpenGLFramebufferObject: + "QOpenGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.addColorAttachment": [('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.attachment": (), + "QOpenGLFramebufferObject.bind": (), + "QOpenGLFramebufferObject.bindDefault": (), + "QOpenGLFramebufferObject.blitFramebuffer": [('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.FramebufferRestorePolicy'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtGui.QOpenGLFramebufferObject', 'int', 'int')], + "QOpenGLFramebufferObject.format": (), + "QOpenGLFramebufferObject.handle": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QOpenGLFramebufferObject.height": (), + "QOpenGLFramebufferObject.isBound": (), + "QOpenGLFramebufferObject.isValid": (), + "QOpenGLFramebufferObject.release": (), + "QOpenGLFramebufferObject.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObject.size": (), + "QOpenGLFramebufferObject.sizes": (), + "QOpenGLFramebufferObject.takeTexture": [(), ('int',)], + "QOpenGLFramebufferObject.texture": (), + "QOpenGLFramebufferObject.textures": (), + "QOpenGLFramebufferObject.toImage": [(), ('bool',), ('bool', 'int')], + "QOpenGLFramebufferObject.width": (), + + # class PySide2.QtGui.QOpenGLFramebufferObjectFormat: + "QOpenGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtGui.QOpenGLFramebufferObjectFormat',)], + "QOpenGLFramebufferObjectFormat.__copy__": (), + "QOpenGLFramebufferObjectFormat.attachment": (), + "QOpenGLFramebufferObjectFormat.internalTextureFormat": (), + "QOpenGLFramebufferObjectFormat.mipmap": (), + "QOpenGLFramebufferObjectFormat.samples": (), + "QOpenGLFramebufferObjectFormat.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QOpenGLFramebufferObjectFormat.setMipmap": ('bool',), + "QOpenGLFramebufferObjectFormat.setSamples": ('int',), + "QOpenGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QOpenGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtGui.QOpenGLFunctions: + "QOpenGLFunctions.__init__": [(), ('PySide2.QtGui.QOpenGLContext',)], + "QOpenGLFunctions.glActiveTexture": ('int',), + "QOpenGLFunctions.glAttachShader": ('int', 'int'), + "QOpenGLFunctions.glBindAttribLocation": ('int', 'int', 'str'), + "QOpenGLFunctions.glBindBuffer": ('int', 'int'), + "QOpenGLFunctions.glBindFramebuffer": ('int', 'int'), + "QOpenGLFunctions.glBindRenderbuffer": ('int', 'int'), + "QOpenGLFunctions.glBindTexture": ('int', 'int'), + "QOpenGLFunctions.glBlendColor": ('float', 'float', 'float', 'float'), + "QOpenGLFunctions.glBlendEquation": ('int',), + "QOpenGLFunctions.glBlendEquationSeparate": ('int', 'int'), + "QOpenGLFunctions.glBlendFunc": ('int', 'int'), + "QOpenGLFunctions.glBlendFuncSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCheckFramebufferStatus": ('int',), + "QOpenGLFunctions.glClear": ('int',), + "QOpenGLFunctions.glClearColor": ('float', 'float', 'float', 'float'), + "QOpenGLFunctions.glClearDepthf": ('float',), + "QOpenGLFunctions.glClearStencil": ('int',), + "QOpenGLFunctions.glColorMask": ('Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), + "QOpenGLFunctions.glCompileShader": ('int',), + "QOpenGLFunctions.glCompressedTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCompressedTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCopyTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCopyTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCreateProgram": (), + "QOpenGLFunctions.glCreateShader": ('int',), + "QOpenGLFunctions.glCullFace": ('int',), + "QOpenGLFunctions.glDeleteBuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteFramebuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteProgram": ('int',), + "QOpenGLFunctions.glDeleteRenderbuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteShader": ('int',), + "QOpenGLFunctions.glDeleteTextures": ('int', 'int'), + "QOpenGLFunctions.glDepthFunc": ('int',), + "QOpenGLFunctions.glDepthMask": ('Union[str, int]',), + "QOpenGLFunctions.glDepthRangef": ('float', 'float'), + "QOpenGLFunctions.glDetachShader": ('int', 'int'), + "QOpenGLFunctions.glDisable": ('int',), + "QOpenGLFunctions.glDisableVertexAttribArray": ('int',), + "QOpenGLFunctions.glDrawArrays": ('int', 'int', 'int'), + "QOpenGLFunctions.glDrawElements": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glEnable": ('int',), + "QOpenGLFunctions.glEnableVertexAttribArray": ('int',), + "QOpenGLFunctions.glFinish": (), + "QOpenGLFunctions.glFlush": (), + "QOpenGLFunctions.glFramebufferRenderbuffer": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glFramebufferTexture2D": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glFrontFace": ('int',), + "QOpenGLFunctions.glGenBuffers": ('int', 'int'), + "QOpenGLFunctions.glGenFramebuffers": ('int', 'int'), + "QOpenGLFunctions.glGenRenderbuffers": ('int', 'int'), + "QOpenGLFunctions.glGenTextures": ('int', 'int'), + "QOpenGLFunctions.glGenerateMipmap": ('int',), + "QOpenGLFunctions.glGetAttachedShaders": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetAttribLocation": ('int', 'str'), + "QOpenGLFunctions.glGetBufferParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetError": (), + "QOpenGLFunctions.glGetFloatv": ('int', 'float'), + "QOpenGLFunctions.glGetFramebufferAttachmentParameteriv": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetIntegerv": ('int', 'int'), + "QOpenGLFunctions.glGetProgramiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetRenderbufferParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetShaderPrecisionFormat": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetShaderiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetString": ('int',), + "QOpenGLFunctions.glGetTexParameterfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetTexParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetUniformLocation": ('int', 'str'), + "QOpenGLFunctions.glGetUniformfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetUniformiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetVertexAttribfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetVertexAttribiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glHint": ('int', 'int'), + "QOpenGLFunctions.glIsBuffer": ('int',), + "QOpenGLFunctions.glIsEnabled": ('int',), + "QOpenGLFunctions.glIsFramebuffer": ('int',), + "QOpenGLFunctions.glIsProgram": ('int',), + "QOpenGLFunctions.glIsRenderbuffer": ('int',), + "QOpenGLFunctions.glIsShader": ('int',), + "QOpenGLFunctions.glIsTexture": ('int',), + "QOpenGLFunctions.glLineWidth": ('float',), + "QOpenGLFunctions.glLinkProgram": ('int',), + "QOpenGLFunctions.glPixelStorei": ('int', 'int'), + "QOpenGLFunctions.glPolygonOffset": ('float', 'float'), + "QOpenGLFunctions.glReadPixels": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glReleaseShaderCompiler": (), + "QOpenGLFunctions.glRenderbufferStorage": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glSampleCoverage": ('float', 'Union[str, int]'), + "QOpenGLFunctions.glScissor": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glShaderBinary": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glStencilFunc": ('int', 'int', 'int'), + "QOpenGLFunctions.glStencilFuncSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glStencilMask": ('int',), + "QOpenGLFunctions.glStencilMaskSeparate": ('int', 'int'), + "QOpenGLFunctions.glStencilOp": ('int', 'int', 'int'), + "QOpenGLFunctions.glStencilOpSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glTexParameterf": ('int', 'int', 'float'), + "QOpenGLFunctions.glTexParameterfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glTexParameteri": ('int', 'int', 'int'), + "QOpenGLFunctions.glTexParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform1f": ('int', 'float'), + "QOpenGLFunctions.glUniform1fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform1i": ('int', 'int'), + "QOpenGLFunctions.glUniform1iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform2f": ('int', 'float', 'float'), + "QOpenGLFunctions.glUniform2fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform2i": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform2iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform3f": ('int', 'float', 'float', 'float'), + "QOpenGLFunctions.glUniform3fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform3i": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform3iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform4f": ('int', 'float', 'float', 'float', 'float'), + "QOpenGLFunctions.glUniform4fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform4i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform4iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniformMatrix2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUniformMatrix3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUniformMatrix4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUseProgram": ('int',), + "QOpenGLFunctions.glValidateProgram": ('int',), + "QOpenGLFunctions.glVertexAttrib1f": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib1fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib2f": ('int', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib2fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib3f": ('int', 'float', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib3fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib4f": ('int', 'float', 'float', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib4fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttribPointer": ('int', 'int', 'int', 'Union[str, int]', 'int', 'int'), + "QOpenGLFunctions.glViewport": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.hasOpenGLFeature": ('PySide2.QtGui.QOpenGLFunctions.OpenGLFeature',), + "QOpenGLFunctions.initializeOpenGLFunctions": (), + "QOpenGLFunctions.openGLFeatures": (), + + # class PySide2.QtGui.QOpenGLPixelTransferOptions: + "QOpenGLPixelTransferOptions.__init__": [(), ('PySide2.QtGui.QOpenGLPixelTransferOptions',)], + "QOpenGLPixelTransferOptions.__copy__": (), + "QOpenGLPixelTransferOptions.alignment": (), + "QOpenGLPixelTransferOptions.imageHeight": (), + "QOpenGLPixelTransferOptions.isLeastSignificantBitFirst": (), + "QOpenGLPixelTransferOptions.isSwapBytesEnabled": (), + "QOpenGLPixelTransferOptions.rowLength": (), + "QOpenGLPixelTransferOptions.setAlignment": ('int',), + "QOpenGLPixelTransferOptions.setImageHeight": ('int',), + "QOpenGLPixelTransferOptions.setLeastSignificantByteFirst": ('bool',), + "QOpenGLPixelTransferOptions.setRowLength": ('int',), + "QOpenGLPixelTransferOptions.setSkipImages": ('int',), + "QOpenGLPixelTransferOptions.setSkipPixels": ('int',), + "QOpenGLPixelTransferOptions.setSkipRows": ('int',), + "QOpenGLPixelTransferOptions.setSwapBytesEnabled": ('bool',), + "QOpenGLPixelTransferOptions.skipImages": (), + "QOpenGLPixelTransferOptions.skipPixels": (), + "QOpenGLPixelTransferOptions.skipRows": (), + "QOpenGLPixelTransferOptions.swap": ('PySide2.QtGui.QOpenGLPixelTransferOptions',), + + # class PySide2.QtGui.QOpenGLShader: + "QOpenGLShader.__init__": ('ShaderType', 'PySide2.QtCore.QObject'), + "QOpenGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShader.compileSourceFile": ('str',), + "QOpenGLShader.hasOpenGLShaders": ('ShaderType', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLShader.isCompiled": (), + "QOpenGLShader.log": (), + "QOpenGLShader.shaderId": (), + "QOpenGLShader.shaderType": (), + "QOpenGLShader.sourceCode": (), + + # class PySide2.QtGui.QOpenGLShaderProgram: + "QOpenGLShaderProgram.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLShaderProgram.addCacheableShaderFromSourceCode": [('ShaderType', 'PySide2.QtCore.QByteArray'), ('ShaderType', 'str')], + "QOpenGLShaderProgram.addCacheableShaderFromSourceFile": ('ShaderType', 'str'), + "QOpenGLShaderProgram.addShader": ('PySide2.QtGui.QOpenGLShader',), + "QOpenGLShaderProgram.addShaderFromSourceCode": [('ShaderType', 'PySide2.QtCore.QByteArray'), ('ShaderType', 'str')], + "QOpenGLShaderProgram.addShaderFromSourceFile": ('ShaderType', 'str'), + "QOpenGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShaderProgram.bind": (), + "QOpenGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QOpenGLShaderProgram.create": (), + "QOpenGLShaderProgram.defaultInnerTessellationLevels": (), + "QOpenGLShaderProgram.defaultOuterTessellationLevels": (), + "QOpenGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QOpenGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QOpenGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLShaderProgram.isLinked": (), + "QOpenGLShaderProgram.link": (), + "QOpenGLShaderProgram.log": (), + "QOpenGLShaderProgram.maxGeometryOutputVertices": (), + "QOpenGLShaderProgram.patchVertexCount": (), + "QOpenGLShaderProgram.programId": (), + "QOpenGLShaderProgram.release": (), + "QOpenGLShaderProgram.removeAllShaders": (), + "QOpenGLShaderProgram.removeShader": ('PySide2.QtGui.QOpenGLShader',), + "QOpenGLShaderProgram.setAttributeArray": [('int', 'float', 'int', 'int'), ('int', 'int', 'int', 'int', 'int'), ('str', 'float', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QOpenGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QOpenGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'float', 'int', 'int'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'float', 'int', 'int')], + "QOpenGLShaderProgram.setDefaultInnerTessellationLevels": ('list',), + "QOpenGLShaderProgram.setDefaultOuterTessellationLevels": ('list',), + "QOpenGLShaderProgram.setPatchVertexCount": ('int',), + "QOpenGLShaderProgram.setUniformValue": [('int', 'List[List[float]]'), ('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'List[List[float]]'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QOpenGLShaderProgram.setUniformValueArray": [('int', 'float', 'int', 'int'), ('int', 'int', 'int'), ('str', 'float', 'int', 'int'), ('str', 'int', 'int')], + "QOpenGLShaderProgram.shaders": (), + "QOpenGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtGui.QOpenGLTexture: + "QOpenGLTexture.__init__": [('PySide2.QtGui.QImage', 'PySide2.QtGui.QOpenGLTexture.MipMapGeneration'), ('PySide2.QtGui.QOpenGLTexture.Target',)], + "QOpenGLTexture.allocateStorage": [(), ('PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType')], + "QOpenGLTexture.bind": [(), ('int', 'PySide2.QtGui.QOpenGLTexture.TextureUnitReset')], + "QOpenGLTexture.borderColor": (), + "QOpenGLTexture.boundTextureId": [('PySide2.QtGui.QOpenGLTexture.BindingTarget',), ('int', 'PySide2.QtGui.QOpenGLTexture.BindingTarget')], + "QOpenGLTexture.comparisonFunction": (), + "QOpenGLTexture.comparisonMode": (), + "QOpenGLTexture.create": (), + "QOpenGLTexture.createTextureView": ('PySide2.QtGui.QOpenGLTexture.Target', 'PySide2.QtGui.QOpenGLTexture.TextureFormat', 'int', 'int', 'int', 'int'), + "QOpenGLTexture.depth": (), + "QOpenGLTexture.depthStencilMode": (), + "QOpenGLTexture.destroy": (), + "QOpenGLTexture.faces": (), + "QOpenGLTexture.format": (), + "QOpenGLTexture.generateMipMaps": [(), ('int', 'bool')], + "QOpenGLTexture.hasFeature": ('PySide2.QtGui.QOpenGLTexture.Feature',), + "QOpenGLTexture.height": (), + "QOpenGLTexture.isAutoMipMapGenerationEnabled": (), + "QOpenGLTexture.isBound": [(), ('int',)], + "QOpenGLTexture.isCreated": (), + "QOpenGLTexture.isFixedSamplePositions": (), + "QOpenGLTexture.isStorageAllocated": (), + "QOpenGLTexture.isTextureView": (), + "QOpenGLTexture.layers": (), + "QOpenGLTexture.levelOfDetailRange": (), + "QOpenGLTexture.levelofDetailBias": (), + "QOpenGLTexture.magnificationFilter": (), + "QOpenGLTexture.maximumAnisotropy": (), + "QOpenGLTexture.maximumLevelOfDetail": (), + "QOpenGLTexture.maximumMipLevels": (), + "QOpenGLTexture.minMagFilters": (), + "QOpenGLTexture.minificationFilter": (), + "QOpenGLTexture.minimumLevelOfDetail": (), + "QOpenGLTexture.mipBaseLevel": (), + "QOpenGLTexture.mipLevelRange": (), + "QOpenGLTexture.mipLevels": (), + "QOpenGLTexture.mipMaxLevel": (), + "QOpenGLTexture.release": [(), ('int', 'PySide2.QtGui.QOpenGLTexture.TextureUnitReset')], + "QOpenGLTexture.samples": (), + "QOpenGLTexture.setAutoMipMapGenerationEnabled": ('bool',), + "QOpenGLTexture.setBorderColor": [('PySide2.QtGui.QColor',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QOpenGLTexture.setComparisonFunction": ('PySide2.QtGui.QOpenGLTexture.ComparisonFunction',), + "QOpenGLTexture.setComparisonMode": ('PySide2.QtGui.QOpenGLTexture.ComparisonMode',), + "QOpenGLTexture.setCompressedData": [('int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions')], + "QOpenGLTexture.setData": [('PySide2.QtGui.QImage', 'PySide2.QtGui.QOpenGLTexture.MipMapGeneration'), ('PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions')], + "QOpenGLTexture.setDepthStencilMode": ('PySide2.QtGui.QOpenGLTexture.DepthStencilMode',), + "QOpenGLTexture.setFixedSamplePositions": ('bool',), + "QOpenGLTexture.setFormat": ('PySide2.QtGui.QOpenGLTexture.TextureFormat',), + "QOpenGLTexture.setLayers": ('int',), + "QOpenGLTexture.setLevelOfDetailRange": ('float', 'float'), + "QOpenGLTexture.setLevelofDetailBias": ('float',), + "QOpenGLTexture.setMagnificationFilter": ('PySide2.QtGui.QOpenGLTexture.Filter',), + "QOpenGLTexture.setMaximumAnisotropy": ('float',), + "QOpenGLTexture.setMaximumLevelOfDetail": ('float',), + "QOpenGLTexture.setMinMagFilters": ('PySide2.QtGui.QOpenGLTexture.Filter', 'PySide2.QtGui.QOpenGLTexture.Filter'), + "QOpenGLTexture.setMinificationFilter": ('PySide2.QtGui.QOpenGLTexture.Filter',), + "QOpenGLTexture.setMinimumLevelOfDetail": ('float',), + "QOpenGLTexture.setMipBaseLevel": ('int',), + "QOpenGLTexture.setMipLevelRange": ('int', 'int'), + "QOpenGLTexture.setMipLevels": ('int',), + "QOpenGLTexture.setMipMaxLevel": ('int',), + "QOpenGLTexture.setSamples": ('int',), + "QOpenGLTexture.setSize": ('int', 'int', 'int'), + "QOpenGLTexture.setSwizzleMask": [('PySide2.QtGui.QOpenGLTexture.SwizzleComponent', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue'), ('PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue')], + "QOpenGLTexture.setWrapMode": [('PySide2.QtGui.QOpenGLTexture.CoordinateDirection', 'PySide2.QtGui.QOpenGLTexture.WrapMode'), ('PySide2.QtGui.QOpenGLTexture.WrapMode',)], + "QOpenGLTexture.swizzleMask": ('PySide2.QtGui.QOpenGLTexture.SwizzleComponent',), + "QOpenGLTexture.target": (), + "QOpenGLTexture.textureId": (), + "QOpenGLTexture.width": (), + "QOpenGLTexture.wrapMode": ('PySide2.QtGui.QOpenGLTexture.CoordinateDirection',), + + # class PySide2.QtGui.QOpenGLTimeMonitor: + "QOpenGLTimeMonitor.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLTimeMonitor.create": (), + "QOpenGLTimeMonitor.destroy": (), + "QOpenGLTimeMonitor.isCreated": (), + "QOpenGLTimeMonitor.isResultAvailable": (), + "QOpenGLTimeMonitor.objectIds": (), + "QOpenGLTimeMonitor.recordSample": (), + "QOpenGLTimeMonitor.reset": (), + "QOpenGLTimeMonitor.sampleCount": (), + "QOpenGLTimeMonitor.setSampleCount": ('int',), + "QOpenGLTimeMonitor.waitForIntervals": (), + "QOpenGLTimeMonitor.waitForSamples": (), + + # class PySide2.QtGui.QOpenGLTimerQuery: + "QOpenGLTimerQuery.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLTimerQuery.begin": (), + "QOpenGLTimerQuery.create": (), + "QOpenGLTimerQuery.destroy": (), + "QOpenGLTimerQuery.end": (), + "QOpenGLTimerQuery.isCreated": (), + "QOpenGLTimerQuery.isResultAvailable": (), + "QOpenGLTimerQuery.objectId": (), + "QOpenGLTimerQuery.recordTimestamp": (), + "QOpenGLTimerQuery.waitForResult": (), + "QOpenGLTimerQuery.waitForTimestamp": (), + + # class PySide2.QtGui.QOpenGLVersionProfile: + "QOpenGLVersionProfile.__init__": [(), ('PySide2.QtGui.QOpenGLVersionProfile',), ('PySide2.QtGui.QSurfaceFormat',)], + "QOpenGLVersionProfile.__copy__": (), + "QOpenGLVersionProfile.hasProfiles": (), + "QOpenGLVersionProfile.isLegacyVersion": (), + "QOpenGLVersionProfile.isValid": (), + "QOpenGLVersionProfile.profile": (), + "QOpenGLVersionProfile.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QOpenGLVersionProfile.setVersion": ('int', 'int'), + "QOpenGLVersionProfile.version": (), + + # class PySide2.QtGui.QOpenGLVertexArrayObject: + "QOpenGLVertexArrayObject.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLVertexArrayObject.bind": (), + "QOpenGLVertexArrayObject.create": (), + "QOpenGLVertexArrayObject.destroy": (), + "QOpenGLVertexArrayObject.isCreated": (), + "QOpenGLVertexArrayObject.objectId": (), + "QOpenGLVertexArrayObject.release": (), + + # class PySide2.QtGui.QOpenGLWindow: + "QOpenGLWindow.__init__": [('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLWindow.UpdateBehavior', 'PySide2.QtGui.QWindow'), ('PySide2.QtGui.QOpenGLWindow.UpdateBehavior', 'PySide2.QtGui.QWindow')], + "QOpenGLWindow.context": (), + "QOpenGLWindow.defaultFramebufferObject": (), + "QOpenGLWindow.doneCurrent": (), + "QOpenGLWindow.grabFramebuffer": (), + "QOpenGLWindow.initializeGL": (), + "QOpenGLWindow.isValid": (), + "QOpenGLWindow.makeCurrent": (), + "QOpenGLWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWindow.paintGL": (), + "QOpenGLWindow.paintOverGL": (), + "QOpenGLWindow.paintUnderGL": (), + "QOpenGLWindow.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWindow.resizeGL": ('int', 'int'), + "QOpenGLWindow.shareContext": (), + "QOpenGLWindow.updateBehavior": (), + + # class PySide2.QtGui.QPageLayout: + "QPageLayout.__init__": [(), ('PySide2.QtGui.QPageLayout',), ('PySide2.QtGui.QPageSize', 'PySide2.QtGui.QPageLayout.Orientation', 'PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit', 'PySide2.QtCore.QMarginsF')], + "QPageLayout.__copy__": (), + "QPageLayout.fullRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.fullRectPixels": ('int',), + "QPageLayout.fullRectPoints": (), + "QPageLayout.isEquivalentTo": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.isValid": (), + "QPageLayout.margins": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.marginsPixels": ('int',), + "QPageLayout.marginsPoints": (), + "QPageLayout.maximumMargins": (), + "QPageLayout.minimumMargins": (), + "QPageLayout.mode": (), + "QPageLayout.orientation": (), + "QPageLayout.pageSize": (), + "QPageLayout.paintRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.paintRectPixels": ('int',), + "QPageLayout.paintRectPoints": (), + "QPageLayout.setBottomMargin": ('float',), + "QPageLayout.setLeftMargin": ('float',), + "QPageLayout.setMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMinimumMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMode": ('PySide2.QtGui.QPageLayout.Mode',), + "QPageLayout.setOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPageLayout.setPageSize": ('PySide2.QtGui.QPageSize', 'PySide2.QtCore.QMarginsF'), + "QPageLayout.setRightMargin": ('float',), + "QPageLayout.setTopMargin": ('float',), + "QPageLayout.setUnits": ('PySide2.QtGui.QPageLayout.Unit',), + "QPageLayout.swap": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.units": (), + + # class PySide2.QtGui.QPageSize: + "QPageSize.__init__": [(), ('PySide2.QtCore.QSize', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.__copy__": (), + "QPageSize.definitionSize": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.definitionUnits": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.id": [(), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('int',)], + "QPageSize.isEquivalentTo": ('PySide2.QtGui.QPageSize',), + "QPageSize.isValid": (), + "QPageSize.key": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.name": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.rect": ('PySide2.QtGui.QPageSize.Unit',), + "QPageSize.rectPixels": ('int',), + "QPageSize.rectPoints": (), + "QPageSize.size": [('PySide2.QtGui.QPageSize.PageSizeId', 'PySide2.QtGui.QPageSize.Unit'), ('PySide2.QtGui.QPageSize.Unit',)], + "QPageSize.sizePixels": [('PySide2.QtGui.QPageSize.PageSizeId', 'int'), ('int',)], + "QPageSize.sizePoints": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.swap": ('PySide2.QtGui.QPageSize',), + "QPageSize.windowsId": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + + # class PySide2.QtGui.QPagedPaintDevice: + "QPagedPaintDevice.__init__": (), + "QPagedPaintDevice.devicePageLayout": (), + "QPagedPaintDevice.margins": (), + "QPagedPaintDevice.newPage": (), + "QPagedPaintDevice.pageLayout": (), + "QPagedPaintDevice.pageSize": (), + "QPagedPaintDevice.pageSizeMM": (), + "QPagedPaintDevice.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPagedPaintDevice.setPageLayout": ('PySide2.QtGui.QPageLayout',), + "QPagedPaintDevice.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit')], + "QPagedPaintDevice.setPageOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPagedPaintDevice.setPageSize": [('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPagedPaintDevice.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtGui.QPaintDevice: + "QPaintDevice.__init__": (), + "QPaintDevice.colorCount": (), + "QPaintDevice.depth": (), + "QPaintDevice.devType": (), + "QPaintDevice.devicePixelRatio": (), + "QPaintDevice.devicePixelRatioF": (), + "QPaintDevice.devicePixelRatioFScale": (), + "QPaintDevice.height": (), + "QPaintDevice.heightMM": (), + "QPaintDevice.initPainter": ('PySide2.QtGui.QPainter',), + "QPaintDevice.logicalDpiX": (), + "QPaintDevice.logicalDpiY": (), + "QPaintDevice.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDevice.paintEngine": (), + "QPaintDevice.paintingActive": (), + "QPaintDevice.physicalDpiX": (), + "QPaintDevice.physicalDpiY": (), + "QPaintDevice.redirected": ('PySide2.QtCore.QPoint',), + "QPaintDevice.sharedPainter": (), + "QPaintDevice.width": (), + "QPaintDevice.widthMM": (), + + # class PySide2.QtGui.QPaintDeviceWindow: + "QPaintDeviceWindow.event": ('PySide2.QtCore.QEvent',), + "QPaintDeviceWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QPaintDeviceWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDeviceWindow.paintEngine": (), + "QPaintDeviceWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPaintDeviceWindow.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + + # class PySide2.QtGui.QPaintEngine: + "QPaintEngine.__init__": ('PaintEngineFeatures',), + "QPaintEngine.begin": ('PySide2.QtGui.QPaintDevice',), + "QPaintEngine.clearDirty": ('DirtyFlags',), + "QPaintEngine.coordinateOffset": (), + "QPaintEngine.drawEllipse": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QPaintEngine.drawImage": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), + "QPaintEngine.drawLines": [('PySide2.QtCore.QLine', 'int'), ('PySide2.QtCore.QLineF', 'int')], + "QPaintEngine.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPaintEngine.drawPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), + "QPaintEngine.drawPoints": [('PySide2.QtCore.QPoint', 'int'), ('PySide2.QtCore.QPointF', 'int')], + "QPaintEngine.drawPolygon": [('PySide2.QtCore.QPoint', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode')], + "QPaintEngine.drawRects": [('PySide2.QtCore.QRect', 'int'), ('PySide2.QtCore.QRectF', 'int')], + "QPaintEngine.drawTextItem": ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), + "QPaintEngine.drawTiledPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), + "QPaintEngine.end": (), + "QPaintEngine.hasFeature": ('PaintEngineFeatures',), + "QPaintEngine.isActive": (), + "QPaintEngine.isExtended": (), + "QPaintEngine.paintDevice": (), + "QPaintEngine.painter": (), + "QPaintEngine.setActive": ('bool',), + "QPaintEngine.setDirty": ('DirtyFlags',), + "QPaintEngine.setSystemClip": ('PySide2.QtGui.QRegion',), + "QPaintEngine.setSystemRect": ('PySide2.QtCore.QRect',), + "QPaintEngine.syncState": (), + "QPaintEngine.systemClip": (), + "QPaintEngine.systemRect": (), + "QPaintEngine.testDirty": ('DirtyFlags',), + "QPaintEngine.type": (), + "QPaintEngine.updateState": ('PySide2.QtGui.QPaintEngineState',), + + # class PySide2.QtGui.QPaintEngineState: + "QPaintEngineState.__init__": (), + "QPaintEngineState.backgroundBrush": (), + "QPaintEngineState.backgroundMode": (), + "QPaintEngineState.brush": (), + "QPaintEngineState.brushNeedsResolving": (), + "QPaintEngineState.brushOrigin": (), + "QPaintEngineState.clipOperation": (), + "QPaintEngineState.clipPath": (), + "QPaintEngineState.clipRegion": (), + "QPaintEngineState.compositionMode": (), + "QPaintEngineState.font": (), + "QPaintEngineState.isClipEnabled": (), + "QPaintEngineState.matrix": (), + "QPaintEngineState.opacity": (), + "QPaintEngineState.painter": (), + "QPaintEngineState.pen": (), + "QPaintEngineState.penNeedsResolving": (), + "QPaintEngineState.renderHints": (), + "QPaintEngineState.state": (), + "QPaintEngineState.transform": (), + + # class PySide2.QtGui.QPaintEvent: + "QPaintEvent.__init__": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QPaintEvent.rect": (), + "QPaintEvent.region": (), + + # class PySide2.QtGui.QPainter: + "QPainter.__init__": [(), ('PySide2.QtGui.QPaintDevice',)], + "QPainter.background": (), + "QPainter.backgroundMode": (), + "QPainter.begin": ('PySide2.QtGui.QPaintDevice',), + "QPainter.beginNativePainting": (), + "QPainter.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str'), ('PySide2.QtCore.QRectF', 'int', 'str'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str')], + "QPainter.brush": (), + "QPainter.brushOrigin": (), + "QPainter.clipBoundingRect": (), + "QPainter.clipPath": (), + "QPainter.clipRegion": (), + "QPainter.combinedMatrix": (), + "QPainter.combinedTransform": (), + "QPainter.compositionMode": (), + "QPainter.device": (), + "QPainter.deviceMatrix": (), + "QPainter.deviceTransform": (), + "QPainter.drawArc": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawChord": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawConvexPolygon": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawEllipse": [('PySide2.QtCore.QPoint', 'int', 'int'), ('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawImage": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'ImageConversionFlags'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'ImageConversionFlags'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), ('int', 'int', 'PySide2.QtGui.QImage', 'int', 'int', 'int', 'int', 'ImageConversionFlags')], + "QPainter.drawLine": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int')], + "QPainter.drawLines": ('list',), + "QPainter.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPainter.drawPicture": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPicture'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPicture'), ('int', 'int', 'PySide2.QtGui.QPicture')], + "QPainter.drawPie": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmap": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmapFragments": ('PySide2.QtGui.QPainter.PixmapFragment', 'int', 'PySide2.QtGui.QPixmap', 'PixmapFragmentHints'), + "QPainter.drawPoint": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.drawPoints": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawPolygon": [('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.FillRule'), ('list', 'PySide2.QtCore.Qt.FillRule')], + "QPainter.drawPolyline": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawRects": ('list',), + "QPainter.drawRoundRect": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawRoundedRect": [('PySide2.QtCore.QRect', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('int', 'int', 'int', 'int', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainter.drawStaticText": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QStaticText'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QStaticText'), ('int', 'int', 'PySide2.QtGui.QStaticText')], + "QPainter.drawText": [('PySide2.QtCore.QPoint', 'str'), ('PySide2.QtCore.QPointF', 'str'), ('PySide2.QtCore.QRect', 'int', 'str', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'int', 'str', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str', 'PySide2.QtCore.QRect'), ('int', 'int', 'str')], + "QPainter.drawTextItem": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QTextItem'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), ('int', 'int', 'PySide2.QtGui.QTextItem')], + "QPainter.drawTiledPixmap": [('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int')], + "QPainter.end": (), + "QPainter.endNativePainting": (), + "QPainter.eraseRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.fillPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QBrush'), + "QPainter.fillRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.BrushStyle'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.GlobalColor'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QBrush'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QColor')], + "QPainter.font": (), + "QPainter.fontInfo": (), + "QPainter.fontMetrics": (), + "QPainter.hasClipping": (), + "QPainter.initFrom": ('PySide2.QtGui.QPaintDevice',), + "QPainter.isActive": (), + "QPainter.layoutDirection": (), + "QPainter.matrix": (), + "QPainter.matrixEnabled": (), + "QPainter.opacity": (), + "QPainter.paintEngine": (), + "QPainter.pen": (), + "QPainter.redirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.renderHints": (), + "QPainter.resetMatrix": (), + "QPainter.resetTransform": (), + "QPainter.restore": (), + "QPainter.restoreRedirected": ('PySide2.QtGui.QPaintDevice',), + "QPainter.rotate": ('float',), + "QPainter.save": (), + "QPainter.scale": ('float', 'float'), + "QPainter.setBackground": ('PySide2.QtGui.QBrush',), + "QPainter.setBackgroundMode": ('PySide2.QtCore.Qt.BGMode',), + "QPainter.setBrush": [('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtGui.QBrush',)], + "QPainter.setBrushOrigin": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.setClipPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ClipOperation'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ClipOperation'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ClipOperation')], + "QPainter.setClipRegion": ('PySide2.QtGui.QRegion', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipping": ('bool',), + "QPainter.setCompositionMode": ('PySide2.QtGui.QPainter.CompositionMode',), + "QPainter.setFont": ('PySide2.QtGui.QFont',), + "QPainter.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QPainter.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setMatrixEnabled": ('bool',), + "QPainter.setOpacity": ('float',), + "QPainter.setPen": [('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPainter.setRedirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QPainter.setRenderHints": ('RenderHints', 'bool'), + "QPainter.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.setViewTransformEnabled": ('bool',), + "QPainter.setViewport": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWindow": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWorldMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setWorldMatrixEnabled": ('bool',), + "QPainter.setWorldTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.shear": ('float', 'float'), + "QPainter.strokePath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen'), + "QPainter.testRenderHint": ('PySide2.QtGui.QPainter.RenderHint',), + "QPainter.transform": (), + "QPainter.translate": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainter.viewTransformEnabled": (), + "QPainter.viewport": (), + "QPainter.window": (), + "QPainter.worldMatrix": (), + "QPainter.worldMatrixEnabled": (), + "QPainter.worldTransform": (), + + # class PySide2.QtGui.QPainterPath: + "QPainterPath.__init__": [(), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.__copy__": (), + "QPainterPath.addEllipse": [('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.addPolygon": ('PySide2.QtGui.QPolygonF',), + "QPainterPath.addRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addRegion": ('PySide2.QtGui.QRegion',), + "QPainterPath.addRoundRect": [('PySide2.QtCore.QRectF', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QPainterPath.addRoundedRect": [('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('float', 'float', 'float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainterPath.addText": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QFont', 'str'), ('float', 'float', 'PySide2.QtGui.QFont', 'str')], + "QPainterPath.angleAtPercent": ('float',), + "QPainterPath.arcMoveTo": [('PySide2.QtCore.QRectF', 'float'), ('float', 'float', 'float', 'float', 'float')], + "QPainterPath.arcTo": [('PySide2.QtCore.QRectF', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.boundingRect": (), + "QPainterPath.closeSubpath": (), + "QPainterPath.connectPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.controlPointRect": (), + "QPainterPath.cubicTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.currentPosition": (), + "QPainterPath.elementAt": ('int',), + "QPainterPath.elementCount": (), + "QPainterPath.fillRule": (), + "QPainterPath.intersected": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.intersects": [('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.isEmpty": (), + "QPainterPath.length": (), + "QPainterPath.lineTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.percentAtLength": ('float',), + "QPainterPath.pointAtPercent": ('float',), + "QPainterPath.quadTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QPainterPath.setElementPositionAt": ('int', 'float', 'float'), + "QPainterPath.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QPainterPath.simplified": (), + "QPainterPath.slopeAtPercent": ('float',), + "QPainterPath.subtracted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.subtractedInverted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.swap": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.toFillPolygon": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toFillPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toReversed": (), + "QPainterPath.toSubpathPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.united": ('PySide2.QtGui.QPainterPath',), + + # class PySide2.QtGui.QPainterPathStroker: + "QPainterPathStroker.__init__": [(), ('PySide2.QtGui.QPen',)], + "QPainterPathStroker.capStyle": (), + "QPainterPathStroker.createStroke": ('PySide2.QtGui.QPainterPath',), + "QPainterPathStroker.curveThreshold": (), + "QPainterPathStroker.dashOffset": (), + "QPainterPathStroker.dashPattern": (), + "QPainterPathStroker.joinStyle": (), + "QPainterPathStroker.miterLimit": (), + "QPainterPathStroker.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPainterPathStroker.setCurveThreshold": ('float',), + "QPainterPathStroker.setDashOffset": ('float',), + "QPainterPathStroker.setDashPattern": [('PySide2.QtCore.Qt.PenStyle',), ('list',)], + "QPainterPathStroker.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPainterPathStroker.setMiterLimit": ('float',), + "QPainterPathStroker.setWidth": ('float',), + "QPainterPathStroker.width": (), + + # class PySide2.QtGui.QPalette: + "QPalette.__init__": [(), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette',)], + "QPalette.__copy__": (), + "QPalette.alternateBase": (), + "QPalette.background": (), + "QPalette.base": (), + "QPalette.brightText": (), + "QPalette.brush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.button": (), + "QPalette.buttonText": (), + "QPalette.cacheKey": (), + "QPalette.color": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.currentColorGroup": (), + "QPalette.dark": (), + "QPalette.foreground": (), + "QPalette.highlight": (), + "QPalette.highlightedText": (), + "QPalette.isBrushSet": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), + "QPalette.isCopyOf": ('PySide2.QtGui.QPalette',), + "QPalette.isEqual": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorGroup'), + "QPalette.light": (), + "QPalette.link": (), + "QPalette.linkVisited": (), + "QPalette.mid": (), + "QPalette.midlight": (), + "QPalette.resolve": [(), ('PySide2.QtGui.QPalette',), ('int',)], + "QPalette.setBrush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush')], + "QPalette.setColor": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor')], + "QPalette.setColorGroup": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), + "QPalette.setCurrentColorGroup": ('PySide2.QtGui.QPalette.ColorGroup',), + "QPalette.shadow": (), + "QPalette.swap": ('PySide2.QtGui.QPalette',), + "QPalette.text": (), + "QPalette.toolTipBase": (), + "QPalette.toolTipText": (), + "QPalette.window": (), + "QPalette.windowText": (), + + # class PySide2.QtGui.QPdfWriter: + "QPdfWriter.__init__": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPdfWriter.creator": (), + "QPdfWriter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPdfWriter.newPage": (), + "QPdfWriter.paintEngine": (), + "QPdfWriter.resolution": (), + "QPdfWriter.setCreator": ('str',), + "QPdfWriter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPdfWriter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPdfWriter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPdfWriter.setResolution": ('int',), + "QPdfWriter.setTitle": ('str',), + "QPdfWriter.title": (), + + # class PySide2.QtGui.QPen: + "QPen.__init__": [(), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QBrush', 'float', 'PySide2.QtCore.Qt.PenStyle', 'PySide2.QtCore.Qt.PenCapStyle', 'PySide2.QtCore.Qt.PenJoinStyle'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPen.__copy__": (), + "QPen.brush": (), + "QPen.capStyle": (), + "QPen.color": (), + "QPen.dashOffset": (), + "QPen.dashPattern": (), + "QPen.isCosmetic": (), + "QPen.isSolid": (), + "QPen.joinStyle": (), + "QPen.miterLimit": (), + "QPen.setBrush": ('PySide2.QtGui.QBrush',), + "QPen.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPen.setColor": ('PySide2.QtGui.QColor',), + "QPen.setCosmetic": ('bool',), + "QPen.setDashOffset": ('float',), + "QPen.setDashPattern": ('list',), + "QPen.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPen.setMiterLimit": ('float',), + "QPen.setStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QPen.setWidth": ('int',), + "QPen.setWidthF": ('float',), + "QPen.style": (), + "QPen.swap": ('PySide2.QtGui.QPen',), + "QPen.width": (), + "QPen.widthF": (), + + # class PySide2.QtGui.QPicture: + "QPicture.__init__": [('PySide2.QtGui.QPicture',), ('int',)], + "QPicture.__copy__": (), + "QPicture.boundingRect": (), + "QPicture.data": (), + "QPicture.devType": (), + "QPicture.inputFormatList": (), + "QPicture.inputFormats": (), + "QPicture.isNull": (), + "QPicture.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPicture.outputFormatList": (), + "QPicture.outputFormats": (), + "QPicture.paintEngine": (), + "QPicture.pictureFormat": ('str',), + "QPicture.play": ('PySide2.QtGui.QPainter',), + "QPicture.save": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.setBoundingRect": ('PySide2.QtCore.QRect',), + "QPicture.setData": ('str', 'int'), + "QPicture.size": (), + "QPicture.swap": ('PySide2.QtGui.QPicture',), + + # class PySide2.QtGui.QPictureIO: + "QPictureIO.__init__": [(), ('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPictureIO.description": (), + "QPictureIO.fileName": (), + "QPictureIO.format": (), + "QPictureIO.gamma": (), + "QPictureIO.inputFormats": (), + "QPictureIO.ioDevice": (), + "QPictureIO.outputFormats": (), + "QPictureIO.parameters": (), + "QPictureIO.picture": (), + "QPictureIO.pictureFormat": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPictureIO.quality": (), + "QPictureIO.read": (), + "QPictureIO.setDescription": ('str',), + "QPictureIO.setFileName": ('str',), + "QPictureIO.setFormat": ('str',), + "QPictureIO.setGamma": ('float',), + "QPictureIO.setIODevice": ('PySide2.QtCore.QIODevice',), + "QPictureIO.setParameters": ('str',), + "QPictureIO.setPicture": ('PySide2.QtGui.QPicture',), + "QPictureIO.setQuality": ('int',), + "QPictureIO.setStatus": ('int',), + "QPictureIO.status": (), + "QPictureIO.write": (), + + # class PySide2.QtGui.QPixelFormat: + "QPixelFormat.__init__": [(), ('PySide2.QtGui.QPixelFormat',), ('PySide2.QtGui.QPixelFormat.ColorModel', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'PySide2.QtGui.QPixelFormat.AlphaUsage', 'PySide2.QtGui.QPixelFormat.AlphaPosition', 'PySide2.QtGui.QPixelFormat.AlphaPremultiplied', 'PySide2.QtGui.QPixelFormat.TypeInterpretation', 'PySide2.QtGui.QPixelFormat.ByteOrder', 'Union[str, int]')], + "QPixelFormat.__copy__": (), + "QPixelFormat.alphaPosition": (), + "QPixelFormat.alphaSize": (), + "QPixelFormat.alphaUsage": (), + "QPixelFormat.bitsPerPixel": (), + "QPixelFormat.blackSize": (), + "QPixelFormat.blueSize": (), + "QPixelFormat.brightnessSize": (), + "QPixelFormat.byteOrder": (), + "QPixelFormat.channelCount": (), + "QPixelFormat.colorModel": (), + "QPixelFormat.cyanSize": (), + "QPixelFormat.greenSize": (), + "QPixelFormat.hueSize": (), + "QPixelFormat.lightnessSize": (), + "QPixelFormat.magentaSize": (), + "QPixelFormat.premultiplied": (), + "QPixelFormat.redSize": (), + "QPixelFormat.saturationSize": (), + "QPixelFormat.subEnum": (), + "QPixelFormat.typeInterpretation": (), + "QPixelFormat.yellowSize": (), + "QPixelFormat.yuvLayout": (), + + # class PySide2.QtGui.QPixmap: + "QPixmap.__init__": [(), ('List[str]',), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str', 'ImageConversionFlags')], + "QPixmap.__copy__": (), + "QPixmap.cacheKey": (), + "QPixmap.convertFromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPixmap.createHeuristicMask": ('bool',), + "QPixmap.createMaskFromColor": ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.MaskMode'), + "QPixmap.defaultDepth": (), + "QPixmap.depth": (), + "QPixmap.devType": (), + "QPixmap.devicePixelRatio": (), + "QPixmap.fill": [('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QPaintDevice', 'int', 'int')], + "QPixmap.fromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.fromImageInPlace": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.fromImageReader": ('PySide2.QtGui.QImageReader', 'ImageConversionFlags'), + "QPixmap.grabWidget": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QObject', 'int', 'int', 'int', 'int')], + "QPixmap.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QPixmap.hasAlpha": (), + "QPixmap.hasAlphaChannel": (), + "QPixmap.height": (), + "QPixmap.isNull": (), + "QPixmap.isQBitmap": (), + "QPixmap.load": ('str', 'str', 'ImageConversionFlags'), + "QPixmap.loadFromData": [('PySide2.QtCore.QByteArray', 'str', 'ImageConversionFlags'), ('Union[str, int]', 'int', 'str', 'ImageConversionFlags')], + "QPixmap.mask": (), + "QPixmap.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPixmap.paintEngine": (), + "QPixmap.rect": (), + "QPixmap.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QPixmap.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scroll": [('int', 'int', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion'), ('int', 'int', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion')], + "QPixmap.setDevicePixelRatio": ('float',), + "QPixmap.setMask": ('PySide2.QtGui.QBitmap',), + "QPixmap.size": (), + "QPixmap.swap": ('PySide2.QtGui.QPixmap',), + "QPixmap.toImage": (), + "QPixmap.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QPixmap.width": (), + + # class PySide2.QtGui.QPixmapCache: + "QPixmapCache.__init__": (), + "QPixmapCache.cacheLimit": (), + "QPixmapCache.clear": (), + "QPixmapCache.find": [('PySide2.QtGui.QPixmapCache.Key',), ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), ('str',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.insert": [('PySide2.QtGui.QPixmap',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.remove": [('PySide2.QtGui.QPixmapCache.Key',), ('str',)], + "QPixmapCache.replace": ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), + "QPixmapCache.setCacheLimit": ('int',), + + # class PySide2.QtGui.QPolygon: + "QPolygon.__init__": [(), ('PySide2.QtCore.QRect', 'bool'), ('PySide2.QtGui.QPolygon',), ('int',), ('list',)], + "QPolygon.__copy__": (), + "QPolygon.__reduce__": (), + "QPolygon.append": [('PySide2.QtCore.QPoint',), ('list',)], + "QPolygon.at": ('int',), + "QPolygon.boundingRect": (), + "QPolygon.capacity": (), + "QPolygon.clear": (), + "QPolygon.constData": (), + "QPolygon.constFirst": (), + "QPolygon.constLast": (), + "QPolygon.contains": ('PySide2.QtCore.QPoint',), + "QPolygon.containsPoint": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.Qt.FillRule'), + "QPolygon.count": [(), ('PySide2.QtCore.QPoint',)], + "QPolygon.data": (), + "QPolygon.empty": (), + "QPolygon.endsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.fill": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.first": (), + "QPolygon.fromList": ('list',), + "QPolygon.front": (), + "QPolygon.indexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.insert": [('int', 'PySide2.QtCore.QPoint'), ('int', 'int', 'PySide2.QtCore.QPoint')], + "QPolygon.intersected": ('PySide2.QtGui.QPolygon',), + "QPolygon.isEmpty": (), + "QPolygon.isSharedWith": ('list',), + "QPolygon.last": (), + "QPolygon.lastIndexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.length": (), + "QPolygon.mid": ('int', 'int'), + "QPolygon.move": ('int', 'int'), + "QPolygon.pop_back": (), + "QPolygon.pop_front": (), + "QPolygon.prepend": ('PySide2.QtCore.QPoint',), + "QPolygon.push_back": ('PySide2.QtCore.QPoint',), + "QPolygon.push_front": ('PySide2.QtCore.QPoint',), + "QPolygon.remove": [('int',), ('int', 'int')], + "QPolygon.removeAll": ('PySide2.QtCore.QPoint',), + "QPolygon.removeAt": ('int',), + "QPolygon.removeFirst": (), + "QPolygon.removeLast": (), + "QPolygon.removeOne": ('PySide2.QtCore.QPoint',), + "QPolygon.replace": ('int', 'PySide2.QtCore.QPoint'), + "QPolygon.reserve": ('int',), + "QPolygon.resize": ('int',), + "QPolygon.setSharable": ('bool',), + "QPolygon.size": (), + "QPolygon.squeeze": (), + "QPolygon.startsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.subtracted": ('PySide2.QtGui.QPolygon',), + "QPolygon.swap": ('PySide2.QtGui.QPolygon',), + "QPolygon.takeAt": ('int',), + "QPolygon.takeFirst": (), + "QPolygon.takeLast": (), + "QPolygon.toList": (), + "QPolygon.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.united": ('PySide2.QtGui.QPolygon',), + "QPolygon.value": [('int',), ('int', 'PySide2.QtCore.QPoint')], + + # class PySide2.QtGui.QPolygonF: + "QPolygonF.__init__": [(), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('int',), ('list',)], + "QPolygonF.__copy__": (), + "QPolygonF.append": [('PySide2.QtCore.QPointF',), ('list',)], + "QPolygonF.at": ('int',), + "QPolygonF.boundingRect": (), + "QPolygonF.capacity": (), + "QPolygonF.clear": (), + "QPolygonF.constData": (), + "QPolygonF.constFirst": (), + "QPolygonF.constLast": (), + "QPolygonF.contains": ('PySide2.QtCore.QPointF',), + "QPolygonF.containsPoint": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.FillRule'), + "QPolygonF.count": [(), ('PySide2.QtCore.QPointF',)], + "QPolygonF.data": (), + "QPolygonF.empty": (), + "QPolygonF.endsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.fill": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.first": (), + "QPolygonF.fromList": ('list',), + "QPolygonF.front": (), + "QPolygonF.indexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.insert": [('int', 'PySide2.QtCore.QPointF'), ('int', 'int', 'PySide2.QtCore.QPointF')], + "QPolygonF.intersected": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.isClosed": (), + "QPolygonF.isEmpty": (), + "QPolygonF.isSharedWith": ('list',), + "QPolygonF.last": (), + "QPolygonF.lastIndexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.length": (), + "QPolygonF.mid": ('int', 'int'), + "QPolygonF.move": ('int', 'int'), + "QPolygonF.pop_back": (), + "QPolygonF.pop_front": (), + "QPolygonF.prepend": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_back": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_front": ('PySide2.QtCore.QPointF',), + "QPolygonF.remove": [('int',), ('int', 'int')], + "QPolygonF.removeAll": ('PySide2.QtCore.QPointF',), + "QPolygonF.removeAt": ('int',), + "QPolygonF.removeFirst": (), + "QPolygonF.removeLast": (), + "QPolygonF.removeOne": ('PySide2.QtCore.QPointF',), + "QPolygonF.replace": ('int', 'PySide2.QtCore.QPointF'), + "QPolygonF.reserve": ('int',), + "QPolygonF.resize": ('int',), + "QPolygonF.setSharable": ('bool',), + "QPolygonF.size": (), + "QPolygonF.squeeze": (), + "QPolygonF.startsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.subtracted": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.swap": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.takeAt": ('int',), + "QPolygonF.takeFirst": (), + "QPolygonF.takeLast": (), + "QPolygonF.toList": (), + "QPolygonF.toPolygon": (), + "QPolygonF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.united": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.value": [('int',), ('int', 'PySide2.QtCore.QPointF')], + + # class PySide2.QtGui.QPyTextObject: + "QPyTextObject.__init__": ('PySide2.QtCore.QObject',), + "QPyTextObject.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QPyTextObject.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QQuaternion: + "QQuaternion.__init__": [(), ('PySide2.QtGui.QVector4D',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QQuaternion.__copy__": (), + "QQuaternion.__reduce__": (), + "QQuaternion.conjugate": (), + "QQuaternion.conjugated": (), + "QQuaternion.dotProduct": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion'), + "QQuaternion.fromAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromAxisAndAngle": [('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QQuaternion.fromDirection": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromEulerAngles": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.fromRotationMatrix": ('PySide2.QtGui.QMatrix3x3',), + "QQuaternion.getAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.inverted": (), + "QQuaternion.isIdentity": (), + "QQuaternion.isNull": (), + "QQuaternion.length": (), + "QQuaternion.lengthSquared": (), + "QQuaternion.nlerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.normalize": (), + "QQuaternion.normalized": (), + "QQuaternion.rotatedVector": ('PySide2.QtGui.QVector3D',), + "QQuaternion.rotationTo": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.scalar": (), + "QQuaternion.setScalar": ('float',), + "QQuaternion.setVector": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.setX": ('float',), + "QQuaternion.setY": ('float',), + "QQuaternion.setZ": ('float',), + "QQuaternion.slerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.toEulerAngles": (), + "QQuaternion.toRotationMatrix": (), + "QQuaternion.toVector4D": (), + "QQuaternion.vector": (), + "QQuaternion.x": (), + "QQuaternion.y": (), + "QQuaternion.z": (), + + # class PySide2.QtGui.QRadialGradient: + "QRadialGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QRadialGradient',), ('float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QRadialGradient.__copy__": (), + "QRadialGradient.center": (), + "QRadialGradient.centerRadius": (), + "QRadialGradient.focalPoint": (), + "QRadialGradient.focalRadius": (), + "QRadialGradient.radius": (), + "QRadialGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setCenterRadius": ('float',), + "QRadialGradient.setFocalPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setFocalRadius": ('float',), + "QRadialGradient.setRadius": ('float',), + + # class PySide2.QtGui.QRasterWindow: + "QRasterWindow.__init__": ('PySide2.QtGui.QWindow',), + "QRasterWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QRasterWindow.redirected": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtGui.QRawFont: + "QRawFont.__init__": [(), ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), ('PySide2.QtGui.QRawFont',), ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference')], + "QRawFont.__copy__": (), + "QRawFont.advancesForGlyphIndexes": [('list',), ('list', 'LayoutFlags')], + "QRawFont.alphaMapForGlyph": ('int', 'PySide2.QtGui.QRawFont.AntialiasingType', 'PySide2.QtGui.QTransform'), + "QRawFont.ascent": (), + "QRawFont.averageCharWidth": (), + "QRawFont.boundingRect": ('int',), + "QRawFont.capHeight": (), + "QRawFont.descent": (), + "QRawFont.familyName": (), + "QRawFont.fontTable": ('str',), + "QRawFont.fromFont": ('PySide2.QtGui.QFont', 'PySide2.QtGui.QFontDatabase.WritingSystem'), + "QRawFont.glyphIndexesForString": ('str',), + "QRawFont.hintingPreference": (), + "QRawFont.isValid": (), + "QRawFont.leading": (), + "QRawFont.lineThickness": (), + "QRawFont.loadFromData": ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.loadFromFile": ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.maxCharWidth": (), + "QRawFont.pathForGlyph": ('int',), + "QRawFont.pixelSize": (), + "QRawFont.setPixelSize": ('float',), + "QRawFont.style": (), + "QRawFont.styleName": (), + "QRawFont.supportedWritingSystems": (), + "QRawFont.supportsCharacter": [('Union[str, int]',), ('int',)], + "QRawFont.swap": ('PySide2.QtGui.QRawFont',), + "QRawFont.underlinePosition": (), + "QRawFont.unitsPerEm": (), + "QRawFont.weight": (), + "QRawFont.xHeight": (), + + # class PySide2.QtGui.QRegExpValidator: + "QRegExpValidator.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRegExp', 'PySide2.QtCore.QObject')], + "QRegExpValidator.regExp": (), + "QRegExpValidator.setRegExp": ('PySide2.QtCore.QRegExp',), + "QRegExpValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QRegion: + "QRegion.__init__": [(), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion.RegionType'), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion.RegionType')], + "QRegion.__copy__": (), + "QRegion.begin": (), + "QRegion.boundingRect": (), + "QRegion.cbegin": (), + "QRegion.cend": (), + "QRegion.contains": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',)], + "QRegion.end": (), + "QRegion.intersected": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.intersects": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.isEmpty": (), + "QRegion.isNull": (), + "QRegion.rectCount": (), + "QRegion.rects": (), + "QRegion.setRects": ('PySide2.QtCore.QRect', 'int'), + "QRegion.subtracted": ('PySide2.QtGui.QRegion',), + "QRegion.swap": ('PySide2.QtGui.QRegion',), + "QRegion.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.united": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.xored": ('PySide2.QtGui.QRegion',), + + # class PySide2.QtGui.QResizeEvent: + "QResizeEvent.__init__": ('PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QResizeEvent.oldSize": (), + "QResizeEvent.size": (), + + # class PySide2.QtGui.QScreen: + "QScreen.angleBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation'), + "QScreen.availableGeometry": (), + "QScreen.availableSize": (), + "QScreen.availableVirtualGeometry": (), + "QScreen.availableVirtualSize": (), + "QScreen.depth": (), + "QScreen.devicePixelRatio": (), + "QScreen.geometry": (), + "QScreen.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QScreen.isLandscape": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.isPortrait": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.logicalDotsPerInch": (), + "QScreen.logicalDotsPerInchX": (), + "QScreen.logicalDotsPerInchY": (), + "QScreen.manufacturer": (), + "QScreen.mapBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.model": (), + "QScreen.name": (), + "QScreen.nativeOrientation": (), + "QScreen.orientation": (), + "QScreen.orientationUpdateMask": (), + "QScreen.physicalDotsPerInch": (), + "QScreen.physicalDotsPerInchX": (), + "QScreen.physicalDotsPerInchY": (), + "QScreen.physicalSize": (), + "QScreen.primaryOrientation": (), + "QScreen.refreshRate": (), + "QScreen.serialNumber": (), + "QScreen.setOrientationUpdateMask": ('ScreenOrientations',), + "QScreen.size": (), + "QScreen.transformBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.virtualGeometry": (), + "QScreen.virtualSiblings": (), + "QScreen.virtualSize": (), + + # class PySide2.QtGui.QSessionManager: + "QSessionManager.allowsErrorInteraction": (), + "QSessionManager.allowsInteraction": (), + "QSessionManager.cancel": (), + "QSessionManager.discardCommand": (), + "QSessionManager.isPhase2": (), + "QSessionManager.release": (), + "QSessionManager.requestPhase2": (), + "QSessionManager.restartCommand": (), + "QSessionManager.restartHint": (), + "QSessionManager.sessionId": (), + "QSessionManager.sessionKey": (), + "QSessionManager.setDiscardCommand": ('List[str]',), + "QSessionManager.setManagerProperty": [('str', 'List[str]'), ('str', 'str')], + "QSessionManager.setRestartCommand": ('List[str]',), + "QSessionManager.setRestartHint": ('PySide2.QtGui.QSessionManager.RestartHint',), + + # class PySide2.QtGui.QShortcutEvent: + "QShortcutEvent.__init__": ('PySide2.QtGui.QKeySequence', 'int', 'bool'), + + # class PySide2.QtGui.QShowEvent: + "QShowEvent.__init__": (), + + # class PySide2.QtGui.QStandardItem: + "QStandardItem.__init__": [(), ('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QStandardItem',), ('int', 'int'), ('str',)], + "QStandardItem.accessibleDescription": (), + "QStandardItem.accessibleText": (), + "QStandardItem.appendColumn": ('list',), + "QStandardItem.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItem.appendRows": ('list',), + "QStandardItem.background": (), + "QStandardItem.checkState": (), + "QStandardItem.child": ('int', 'int'), + "QStandardItem.clone": (), + "QStandardItem.column": (), + "QStandardItem.columnCount": (), + "QStandardItem.data": ('int',), + "QStandardItem.emitDataChanged": (), + "QStandardItem.flags": (), + "QStandardItem.font": (), + "QStandardItem.foreground": (), + "QStandardItem.hasChildren": (), + "QStandardItem.icon": (), + "QStandardItem.index": (), + "QStandardItem.insertColumn": ('int', 'list'), + "QStandardItem.insertColumns": ('int', 'int'), + "QStandardItem.insertRow": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItem.insertRows": [('int', 'int'), ('int', 'list')], + "QStandardItem.isAutoTristate": (), + "QStandardItem.isCheckable": (), + "QStandardItem.isDragEnabled": (), + "QStandardItem.isDropEnabled": (), + "QStandardItem.isEditable": (), + "QStandardItem.isEnabled": (), + "QStandardItem.isSelectable": (), + "QStandardItem.isTristate": (), + "QStandardItem.isUserTristate": (), + "QStandardItem.model": (), + "QStandardItem.parent": (), + "QStandardItem.read": ('PySide2.QtCore.QDataStream',), + "QStandardItem.removeColumn": ('int',), + "QStandardItem.removeColumns": ('int', 'int'), + "QStandardItem.removeRow": ('int',), + "QStandardItem.removeRows": ('int', 'int'), + "QStandardItem.row": (), + "QStandardItem.rowCount": (), + "QStandardItem.setAccessibleDescription": ('str',), + "QStandardItem.setAccessibleText": ('str',), + "QStandardItem.setAutoTristate": ('bool',), + "QStandardItem.setBackground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QStandardItem.setCheckable": ('bool',), + "QStandardItem.setChild": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItem.setColumnCount": ('int',), + "QStandardItem.setData": ('Any', 'int'), + "QStandardItem.setDragEnabled": ('bool',), + "QStandardItem.setDropEnabled": ('bool',), + "QStandardItem.setEditable": ('bool',), + "QStandardItem.setEnabled": ('bool',), + "QStandardItem.setFlags": ('ItemFlags',), + "QStandardItem.setFont": ('PySide2.QtGui.QFont',), + "QStandardItem.setForeground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setIcon": ('PySide2.QtGui.QIcon',), + "QStandardItem.setRowCount": ('int',), + "QStandardItem.setSelectable": ('bool',), + "QStandardItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QStandardItem.setStatusTip": ('str',), + "QStandardItem.setText": ('str',), + "QStandardItem.setTextAlignment": ('Alignment',), + "QStandardItem.setToolTip": ('str',), + "QStandardItem.setTristate": ('bool',), + "QStandardItem.setUserTristate": ('bool',), + "QStandardItem.setWhatsThis": ('str',), + "QStandardItem.sizeHint": (), + "QStandardItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItem.statusTip": (), + "QStandardItem.takeChild": ('int', 'int'), + "QStandardItem.takeColumn": ('int',), + "QStandardItem.takeRow": ('int',), + "QStandardItem.text": (), + "QStandardItem.textAlignment": (), + "QStandardItem.toolTip": (), + "QStandardItem.type": (), + "QStandardItem.whatsThis": (), + "QStandardItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QStandardItemModel: + "QStandardItemModel.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QStandardItemModel.appendColumn": ('list',), + "QStandardItemModel.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItemModel.clear": (), + "QStandardItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStandardItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.findItems": ('str', 'MatchFlags', 'int'), + "QStandardItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QStandardItemModel.horizontalHeaderItem": ('int',), + "QStandardItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.indexFromItem": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.insertColumn": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'list')], + "QStandardItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.insertRow": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.invisibleRootItem": (), + "QStandardItemModel.item": ('int', 'int'), + "QStandardItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemPrototype": (), + "QStandardItemModel.mimeData": ('List[int]',), + "QStandardItemModel.mimeTypes": (), + "QStandardItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QStandardItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.setColumnCount": ('int',), + "QStandardItemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QStandardItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QStandardItemModel.setHorizontalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setHorizontalHeaderLabels": ('List[str]',), + "QStandardItemModel.setItem": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QStandardItemModel.setItemPrototype": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.setItemRoleNames": ('dict',), + "QStandardItemModel.setRowCount": ('int',), + "QStandardItemModel.setSortRole": ('int',), + "QStandardItemModel.setVerticalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setVerticalHeaderLabels": ('List[str]',), + "QStandardItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItemModel.sortRole": (), + "QStandardItemModel.supportedDropActions": (), + "QStandardItemModel.takeColumn": ('int',), + "QStandardItemModel.takeHorizontalHeaderItem": ('int',), + "QStandardItemModel.takeItem": ('int', 'int'), + "QStandardItemModel.takeRow": ('int',), + "QStandardItemModel.takeVerticalHeaderItem": ('int',), + "QStandardItemModel.verticalHeaderItem": ('int',), + + # class PySide2.QtGui.QStaticText: + "QStaticText.__init__": [(), ('PySide2.QtGui.QStaticText',), ('str',)], + "QStaticText.__copy__": (), + "QStaticText.performanceHint": (), + "QStaticText.prepare": ('PySide2.QtGui.QTransform', 'PySide2.QtGui.QFont'), + "QStaticText.setPerformanceHint": ('PySide2.QtGui.QStaticText.PerformanceHint',), + "QStaticText.setText": ('str',), + "QStaticText.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QStaticText.setTextOption": ('PySide2.QtGui.QTextOption',), + "QStaticText.setTextWidth": ('float',), + "QStaticText.size": (), + "QStaticText.swap": ('PySide2.QtGui.QStaticText',), + "QStaticText.text": (), + "QStaticText.textFormat": (), + "QStaticText.textOption": (), + "QStaticText.textWidth": (), + + # class PySide2.QtGui.QStatusTipEvent: + "QStatusTipEvent.__init__": ('str',), + "QStatusTipEvent.tip": (), + + # class PySide2.QtGui.QStringListModel: + "QStringListModel.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QStringListModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStringListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QStringListModel.setStringList": ('List[str]',), + "QStringListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStringListModel.stringList": (), + "QStringListModel.supportedDropActions": (), + + # class PySide2.QtGui.QStyleHints: + "QStyleHints.cursorFlashTime": (), + "QStyleHints.fontSmoothingGamma": (), + "QStyleHints.keyboardAutoRepeatRate": (), + "QStyleHints.keyboardInputInterval": (), + "QStyleHints.mouseDoubleClickInterval": (), + "QStyleHints.mousePressAndHoldInterval": (), + "QStyleHints.passwordMaskCharacter": (), + "QStyleHints.passwordMaskDelay": (), + "QStyleHints.setCursorFlashTime": ('int',), + "QStyleHints.setFocusOnTouchRelease": (), + "QStyleHints.setKeyboardInputInterval": ('int',), + "QStyleHints.setMouseDoubleClickInterval": ('int',), + "QStyleHints.setMousePressAndHoldInterval": ('int',), + "QStyleHints.setStartDragDistance": ('int',), + "QStyleHints.setStartDragTime": ('int',), + "QStyleHints.setTabFocusBehavior": ('PySide2.QtCore.Qt.TabFocusBehavior',), + "QStyleHints.setUseHoverEffects": ('bool',), + "QStyleHints.setWheelScrollLines": ('int',), + "QStyleHints.showIsFullScreen": (), + "QStyleHints.showIsMaximized": (), + "QStyleHints.singleClickActivation": (), + "QStyleHints.startDragDistance": (), + "QStyleHints.startDragTime": (), + "QStyleHints.startDragVelocity": (), + "QStyleHints.tabFocusBehavior": (), + "QStyleHints.useHoverEffects": (), + "QStyleHints.useRtlExtensions": (), + "QStyleHints.wheelScrollLines": (), + + # class PySide2.QtGui.QSurface: + "QSurface.__init__": ('PySide2.QtGui.QSurface.SurfaceClass',), + "QSurface.format": (), + "QSurface.size": (), + "QSurface.supportsOpenGL": (), + "QSurface.surfaceClass": (), + "QSurface.surfaceHandle": (), + "QSurface.surfaceType": (), + + # class PySide2.QtGui.QSurfaceFormat: + "QSurfaceFormat.__init__": [(), ('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat',)], + "QSurfaceFormat.__copy__": (), + "QSurfaceFormat.alphaBufferSize": (), + "QSurfaceFormat.blueBufferSize": (), + "QSurfaceFormat.defaultFormat": (), + "QSurfaceFormat.depthBufferSize": (), + "QSurfaceFormat.greenBufferSize": (), + "QSurfaceFormat.hasAlpha": (), + "QSurfaceFormat.majorVersion": (), + "QSurfaceFormat.minorVersion": (), + "QSurfaceFormat.options": (), + "QSurfaceFormat.profile": (), + "QSurfaceFormat.redBufferSize": (), + "QSurfaceFormat.renderableType": (), + "QSurfaceFormat.samples": (), + "QSurfaceFormat.setAlphaBufferSize": ('int',), + "QSurfaceFormat.setBlueBufferSize": ('int',), + "QSurfaceFormat.setDefaultFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QSurfaceFormat.setDepthBufferSize": ('int',), + "QSurfaceFormat.setGreenBufferSize": ('int',), + "QSurfaceFormat.setMajorVersion": ('int',), + "QSurfaceFormat.setMinorVersion": ('int',), + "QSurfaceFormat.setOption": [('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat.FormatOption', 'bool')], + "QSurfaceFormat.setOptions": ('FormatOptions',), + "QSurfaceFormat.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QSurfaceFormat.setRedBufferSize": ('int',), + "QSurfaceFormat.setRenderableType": ('PySide2.QtGui.QSurfaceFormat.RenderableType',), + "QSurfaceFormat.setSamples": ('int',), + "QSurfaceFormat.setStencilBufferSize": ('int',), + "QSurfaceFormat.setStereo": ('bool',), + "QSurfaceFormat.setSwapBehavior": ('PySide2.QtGui.QSurfaceFormat.SwapBehavior',), + "QSurfaceFormat.setSwapInterval": ('int',), + "QSurfaceFormat.setVersion": ('int', 'int'), + "QSurfaceFormat.stencilBufferSize": (), + "QSurfaceFormat.stereo": (), + "QSurfaceFormat.swapBehavior": (), + "QSurfaceFormat.swapInterval": (), + "QSurfaceFormat.testOption": [('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat.FormatOption',)], + "QSurfaceFormat.version": (), + + # class PySide2.QtGui.QSyntaxHighlighter: + "QSyntaxHighlighter.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QTextDocument',)], + "QSyntaxHighlighter.currentBlock": (), + "QSyntaxHighlighter.currentBlockState": (), + "QSyntaxHighlighter.currentBlockUserData": (), + "QSyntaxHighlighter.document": (), + "QSyntaxHighlighter.format": ('int',), + "QSyntaxHighlighter.highlightBlock": ('str',), + "QSyntaxHighlighter.previousBlockState": (), + "QSyntaxHighlighter.rehighlight": (), + "QSyntaxHighlighter.rehighlightBlock": ('PySide2.QtGui.QTextBlock',), + "QSyntaxHighlighter.setCurrentBlockState": ('int',), + "QSyntaxHighlighter.setCurrentBlockUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QSyntaxHighlighter.setDocument": ('PySide2.QtGui.QTextDocument',), + "QSyntaxHighlighter.setFormat": [('int', 'int', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QFont'), ('int', 'int', 'PySide2.QtGui.QTextCharFormat')], + + # class PySide2.QtGui.QTabletEvent: + "QTabletEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'KeyboardModifiers', 'int'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'KeyboardModifiers', 'int', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons')], + "QTabletEvent.button": (), + "QTabletEvent.buttons": (), + "QTabletEvent.device": (), + "QTabletEvent.globalPos": (), + "QTabletEvent.globalPosF": (), + "QTabletEvent.globalX": (), + "QTabletEvent.global""Y": (), + "QTabletEvent.hiResGlobalX": (), + "QTabletEvent.hiResGlobal""Y": (), + "QTabletEvent.pointerType": (), + "QTabletEvent.pos": (), + "QTabletEvent.posF": (), + "QTabletEvent.pressure": (), + "QTabletEvent.rotation": (), + "QTabletEvent.tangentialPressure": (), + "QTabletEvent.uniqueId": (), + "QTabletEvent.x": (), + "QTabletEvent.xTilt": (), + "QTabletEvent.y": (), + "QTabletEvent.yTilt": (), + "QTabletEvent.z": (), + + # class PySide2.QtGui.QTextBlock: + "QTextBlock.__init__": [(), ('PySide2.QtGui.QTextBlock',)], + "QTextBlock.__copy__": (), + "QTextBlock.begin": (), + "QTextBlock.blockFormat": (), + "QTextBlock.blockFormatIndex": (), + "QTextBlock.blockNumber": (), + "QTextBlock.charFormat": (), + "QTextBlock.charFormatIndex": (), + "QTextBlock.clearLayout": (), + "QTextBlock.contains": ('int',), + "QTextBlock.document": (), + "QTextBlock.end": (), + "QTextBlock.firstLineNumber": (), + "QTextBlock.fragmentIndex": (), + "QTextBlock.isValid": (), + "QTextBlock.isVisible": (), + "QTextBlock.layout": (), + "QTextBlock.length": (), + "QTextBlock.lineCount": (), + "QTextBlock.position": (), + "QTextBlock.previous": (), + "QTextBlock.revision": (), + "QTextBlock.setLineCount": ('int',), + "QTextBlock.setRevision": ('int',), + "QTextBlock.setUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QTextBlock.setUserState": ('int',), + "QTextBlock.setVisible": ('bool',), + "QTextBlock.text": (), + "QTextBlock.textDirection": (), + "QTextBlock.textFormats": (), + "QTextBlock.textList": (), + "QTextBlock.userData": (), + "QTextBlock.userState": (), + + # class PySide2.QtGui.QTextBlockFormat: + "QTextBlockFormat.__init__": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextBlockFormat.__copy__": (), + "QTextBlockFormat.alignment": (), + "QTextBlockFormat.bottomMargin": (), + "QTextBlockFormat.indent": (), + "QTextBlockFormat.isValid": (), + "QTextBlockFormat.leftMargin": (), + "QTextBlockFormat.lineHeight": [(), ('float', 'float')], + "QTextBlockFormat.lineHeightType": (), + "QTextBlockFormat.nonBreakableLines": (), + "QTextBlockFormat.pageBreakPolicy": (), + "QTextBlockFormat.rightMargin": (), + "QTextBlockFormat.setAlignment": ('Alignment',), + "QTextBlockFormat.setBottomMargin": ('float',), + "QTextBlockFormat.setIndent": ('int',), + "QTextBlockFormat.setLeftMargin": ('float',), + "QTextBlockFormat.setLineHeight": ('float', 'int'), + "QTextBlockFormat.setNonBreakableLines": ('bool',), + "QTextBlockFormat.setPageBreakPolicy": ('PageBreakFlags',), + "QTextBlockFormat.setRightMargin": ('float',), + "QTextBlockFormat.setTabPositions": ('list',), + "QTextBlockFormat.setTextIndent": ('float',), + "QTextBlockFormat.setTopMargin": ('float',), + "QTextBlockFormat.tabPositions": (), + "QTextBlockFormat.textIndent": (), + "QTextBlockFormat.topMargin": (), + + # class PySide2.QtGui.QTextBlockGroup: + "QTextBlockGroup.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextBlockGroup.blockFormatChanged": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockInserted": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockList": (), + "QTextBlockGroup.blockRemoved": ('PySide2.QtGui.QTextBlock',), + + # class PySide2.QtGui.QTextBlockUserData: + "QTextBlockUserData.__init__": (), + + # class PySide2.QtGui.QTextCharFormat: + "QTextCharFormat.__init__": [(), ('PySide2.QtGui.QTextCharFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextCharFormat.__copy__": (), + "QTextCharFormat.anchorHref": (), + "QTextCharFormat.anchorName": (), + "QTextCharFormat.anchorNames": (), + "QTextCharFormat.font": (), + "QTextCharFormat.fontCapitalization": (), + "QTextCharFormat.fontFamily": (), + "QTextCharFormat.fontFixedPitch": (), + "QTextCharFormat.fontHintingPreference": (), + "QTextCharFormat.fontItalic": (), + "QTextCharFormat.fontKerning": (), + "QTextCharFormat.fontLetterSpacing": (), + "QTextCharFormat.fontLetterSpacingType": (), + "QTextCharFormat.fontOverline": (), + "QTextCharFormat.fontPointSize": (), + "QTextCharFormat.fontStretch": (), + "QTextCharFormat.fontStrikeOut": (), + "QTextCharFormat.fontStyleHint": (), + "QTextCharFormat.fontStyleStrategy": (), + "QTextCharFormat.fontUnderline": (), + "QTextCharFormat.fontWeight": (), + "QTextCharFormat.fontWordSpacing": (), + "QTextCharFormat.isAnchor": (), + "QTextCharFormat.isValid": (), + "QTextCharFormat.setAnchor": ('bool',), + "QTextCharFormat.setAnchorHref": ('str',), + "QTextCharFormat.setAnchorName": ('str',), + "QTextCharFormat.setAnchorNames": ('List[str]',), + "QTextCharFormat.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior')], + "QTextCharFormat.setFontCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QTextCharFormat.setFontFamily": ('str',), + "QTextCharFormat.setFontFixedPitch": ('bool',), + "QTextCharFormat.setFontHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QTextCharFormat.setFontItalic": ('bool',), + "QTextCharFormat.setFontKerning": ('bool',), + "QTextCharFormat.setFontLetterSpacing": ('float',), + "QTextCharFormat.setFontLetterSpacingType": ('PySide2.QtGui.QFont.SpacingType',), + "QTextCharFormat.setFontOverline": ('bool',), + "QTextCharFormat.setFontPointSize": ('float',), + "QTextCharFormat.setFontStretch": ('int',), + "QTextCharFormat.setFontStrikeOut": ('bool',), + "QTextCharFormat.setFontStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QTextCharFormat.setFontStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QTextCharFormat.setFontUnderline": ('bool',), + "QTextCharFormat.setFontWeight": ('int',), + "QTextCharFormat.setFontWordSpacing": ('float',), + "QTextCharFormat.setTableCellColumnSpan": ('int',), + "QTextCharFormat.setTableCellRowSpan": ('int',), + "QTextCharFormat.setTextOutline": ('PySide2.QtGui.QPen',), + "QTextCharFormat.setToolTip": ('str',), + "QTextCharFormat.setUnderlineColor": ('PySide2.QtGui.QColor',), + "QTextCharFormat.setUnderlineStyle": ('PySide2.QtGui.QTextCharFormat.UnderlineStyle',), + "QTextCharFormat.setVerticalAlignment": ('PySide2.QtGui.QTextCharFormat.VerticalAlignment',), + "QTextCharFormat.tableCellColumnSpan": (), + "QTextCharFormat.tableCellRowSpan": (), + "QTextCharFormat.textOutline": (), + "QTextCharFormat.toolTip": (), + "QTextCharFormat.underlineColor": (), + "QTextCharFormat.underlineStyle": (), + "QTextCharFormat.verticalAlignment": (), + + # class PySide2.QtGui.QTextCursor: + "QTextCursor.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextFrame',)], + "QTextCursor.__copy__": (), + "QTextCursor.anchor": (), + "QTextCursor.atBlockEnd": (), + "QTextCursor.atBlockStart": (), + "QTextCursor.atEnd": (), + "QTextCursor.atStart": (), + "QTextCursor.beginEditBlock": (), + "QTextCursor.block": (), + "QTextCursor.blockCharFormat": (), + "QTextCursor.blockFormat": (), + "QTextCursor.blockNumber": (), + "QTextCursor.charFormat": (), + "QTextCursor.clearSelection": (), + "QTextCursor.columnNumber": (), + "QTextCursor.createList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.currentFrame": (), + "QTextCursor.currentList": (), + "QTextCursor.currentTable": (), + "QTextCursor.deleteChar": (), + "QTextCursor.deletePreviousChar": (), + "QTextCursor.document": (), + "QTextCursor.endEditBlock": (), + "QTextCursor.hasComplexSelection": (), + "QTextCursor.hasSelection": (), + "QTextCursor.insertBlock": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextBlockFormat', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.insertFragment": ('PySide2.QtGui.QTextDocumentFragment',), + "QTextCursor.insertFrame": ('PySide2.QtGui.QTextFrameFormat',), + "QTextCursor.insertHtml": ('str',), + "QTextCursor.insertImage": [('PySide2.QtGui.QImage', 'str'), ('PySide2.QtGui.QTextImageFormat',), ('PySide2.QtGui.QTextImageFormat', 'PySide2.QtGui.QTextFrameFormat.Position'), ('str',)], + "QTextCursor.insertList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.insertTable": [('int', 'int'), ('int', 'int', 'PySide2.QtGui.QTextTableFormat')], + "QTextCursor.insertText": [('str',), ('str', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.isCopyOf": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.isNull": (), + "QTextCursor.joinPreviousEditBlock": (), + "QTextCursor.keepPositionOnInsert": (), + "QTextCursor.mergeBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.mergeBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.mergeCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.movePosition": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode', 'int'), + "QTextCursor.position": (), + "QTextCursor.positionInBlock": (), + "QTextCursor.removeSelectedText": (), + "QTextCursor.select": ('PySide2.QtGui.QTextCursor.SelectionType',), + "QTextCursor.selectedTableCells": ('int', 'int', 'int', 'int'), + "QTextCursor.selectedText": (), + "QTextCursor.selection": (), + "QTextCursor.selectionEnd": (), + "QTextCursor.selectionStart": (), + "QTextCursor.setBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.setCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setKeepPositionOnInsert": ('bool',), + "QTextCursor.setPosition": ('int', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextCursor.setVerticalMovementX": ('int',), + "QTextCursor.setVisualNavigation": ('bool',), + "QTextCursor.swap": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.verticalMovementX": (), + "QTextCursor.visualNavigation": (), + + # class PySide2.QtGui.QTextDocument: + "QTextDocument.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextDocument.addResource": ('int', 'PySide2.QtCore.QUrl', 'Any'), + "QTextDocument.adjustSize": (), + "QTextDocument.allFormats": (), + "QTextDocument.availableRedoSteps": (), + "QTextDocument.availableUndoSteps": (), + "QTextDocument.baseUrl": (), + "QTextDocument.begin": (), + "QTextDocument.blockCount": (), + "QTextDocument.characterAt": ('int',), + "QTextDocument.characterCount": (), + "QTextDocument.clear": (), + "QTextDocument.clearUndoRedoStacks": ('PySide2.QtGui.QTextDocument.Stacks',), + "QTextDocument.clone": ('PySide2.QtCore.QObject',), + "QTextDocument.createObject": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.defaultCursorMoveStyle": (), + "QTextDocument.defaultFont": (), + "QTextDocument.defaultStyleSheet": (), + "QTextDocument.defaultTextOption": (), + "QTextDocument.documentLayout": (), + "QTextDocument.documentMargin": (), + "QTextDocument.drawContents": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QTextDocument.end": (), + "QTextDocument.find": [('PySide2.QtCore.QRegExp', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('PySide2.QtCore.QRegExp', 'int', 'FindFlags'), ('PySide2.QtCore.QRegularExpression', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('PySide2.QtCore.QRegularExpression', 'int', 'FindFlags'), ('str', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('str', 'int', 'FindFlags')], + "QTextDocument.findBlock": ('int',), + "QTextDocument.findBlockByLineNumber": ('int',), + "QTextDocument.findBlockByNumber": ('int',), + "QTextDocument.firstBlock": (), + "QTextDocument.frameAt": ('int',), + "QTextDocument.idealWidth": (), + "QTextDocument.indentWidth": (), + "QTextDocument.isEmpty": (), + "QTextDocument.isModified": (), + "QTextDocument.isRedoAvailable": (), + "QTextDocument.isUndoAvailable": (), + "QTextDocument.isUndoRedoEnabled": (), + "QTextDocument.lastBlock": (), + "QTextDocument.lineCount": (), + "QTextDocument.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.markContentsDirty": ('int', 'int'), + "QTextDocument.maximumBlockCount": (), + "QTextDocument.metaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation',), + "QTextDocument.object": ('int',), + "QTextDocument.objectForFormat": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.pageCount": (), + "QTextDocument.pageSize": (), + "QTextDocument.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextDocument.redo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.resource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.revision": (), + "QTextDocument.rootFrame": (), + "QTextDocument.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QTextDocument.setDefaultCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextDocument.setDefaultFont": ('PySide2.QtGui.QFont',), + "QTextDocument.setDefaultStyleSheet": ('str',), + "QTextDocument.setDefaultTextOption": ('PySide2.QtGui.QTextOption',), + "QTextDocument.setDocumentLayout": ('PySide2.QtGui.QAbstractTextDocumentLayout',), + "QTextDocument.setDocumentMargin": ('float',), + "QTextDocument.setHtml": ('str',), + "QTextDocument.setIndentWidth": ('float',), + "QTextDocument.setMaximumBlockCount": ('int',), + "QTextDocument.setMetaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation', 'str'), + "QTextDocument.setModified": ('bool',), + "QTextDocument.setPageSize": ('PySide2.QtCore.QSizeF',), + "QTextDocument.setPlainText": ('str',), + "QTextDocument.setTextWidth": ('float',), + "QTextDocument.setUndoRedoEnabled": ('bool',), + "QTextDocument.setUseDesignMetrics": ('bool',), + "QTextDocument.size": (), + "QTextDocument.textWidth": (), + "QTextDocument.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocument.toPlainText": (), + "QTextDocument.toRawText": (), + "QTextDocument.undo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.useDesignMetrics": (), + + # class PySide2.QtGui.QTextDocumentFragment: + "QTextDocumentFragment.__init__": [(), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + "QTextDocumentFragment.__copy__": (), + "QTextDocumentFragment.fromHtml": [('str',), ('str', 'PySide2.QtGui.QTextDocument')], + "QTextDocumentFragment.fromPlainText": ('str',), + "QTextDocumentFragment.isEmpty": (), + "QTextDocumentFragment.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocumentFragment.toPlainText": (), + + # class PySide2.QtGui.QTextDocumentWriter: + "QTextDocumentWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QTextDocumentWriter.codec": (), + "QTextDocumentWriter.device": (), + "QTextDocumentWriter.fileName": (), + "QTextDocumentWriter.format": (), + "QTextDocumentWriter.setCodec": ('PySide2.QtCore.QTextCodec',), + "QTextDocumentWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextDocumentWriter.setFileName": ('str',), + "QTextDocumentWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QTextDocumentWriter.supportedDocumentFormats": (), + "QTextDocumentWriter.write": [('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + + # class PySide2.QtGui.QTextFormat: + "QTextFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('int',)], + "QTextFormat.__copy__": (), + "QTextFormat.background": (), + "QTextFormat.boolProperty": ('int',), + "QTextFormat.brushProperty": ('int',), + "QTextFormat.clearBackground": (), + "QTextFormat.clearForeground": (), + "QTextFormat.clearProperty": ('int',), + "QTextFormat.colorProperty": ('int',), + "QTextFormat.doubleProperty": ('int',), + "QTextFormat.foreground": (), + "QTextFormat.hasProperty": ('int',), + "QTextFormat.intProperty": ('int',), + "QTextFormat.isBlockFormat": (), + "QTextFormat.isCharFormat": (), + "QTextFormat.isEmpty": (), + "QTextFormat.isFrameFormat": (), + "QTextFormat.isImageFormat": (), + "QTextFormat.isListFormat": (), + "QTextFormat.isTableCellFormat": (), + "QTextFormat.isTableFormat": (), + "QTextFormat.isValid": (), + "QTextFormat.layoutDirection": (), + "QTextFormat.lengthProperty": ('int',), + "QTextFormat.lengthVectorProperty": ('int',), + "QTextFormat.merge": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.objectIndex": (), + "QTextFormat.objectType": (), + "QTextFormat.penProperty": ('int',), + "QTextFormat.properties": (), + "QTextFormat.property": ('int',), + "QTextFormat.propertyCount": (), + "QTextFormat.setBackground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setForeground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextFormat.setObjectIndex": ('int',), + "QTextFormat.setObjectType": ('int',), + "QTextFormat.setProperty": [('int', 'Any'), ('int', 'list')], + "QTextFormat.stringProperty": ('int',), + "QTextFormat.swap": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.toBlockFormat": (), + "QTextFormat.toCharFormat": (), + "QTextFormat.toFrameFormat": (), + "QTextFormat.toImageFormat": (), + "QTextFormat.toListFormat": (), + "QTextFormat.toTableCellFormat": (), + "QTextFormat.toTableFormat": (), + "QTextFormat.type": (), + + # class PySide2.QtGui.QTextFragment: + "QTextFragment.__init__": [(), ('PySide2.QtGui.QTextFragment',)], + "QTextFragment.__copy__": (), + "QTextFragment.charFormat": (), + "QTextFragment.charFormatIndex": (), + "QTextFragment.contains": ('int',), + "QTextFragment.isValid": (), + "QTextFragment.length": (), + "QTextFragment.position": (), + "QTextFragment.text": (), + + # class PySide2.QtGui.QTextFrame: + "QTextFrame.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextFrame.begin": (), + "QTextFrame.childFrames": (), + "QTextFrame.end": (), + "QTextFrame.firstCursorPosition": (), + "QTextFrame.firstPosition": (), + "QTextFrame.frameFormat": (), + "QTextFrame.lastCursorPosition": (), + "QTextFrame.lastPosition": (), + "QTextFrame.parentFrame": (), + "QTextFrame.setFrameFormat": ('PySide2.QtGui.QTextFrameFormat',), + + # class PySide2.QtGui.QTextFrameFormat: + "QTextFrameFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextFrameFormat',)], + "QTextFrameFormat.__copy__": (), + "QTextFrameFormat.border": (), + "QTextFrameFormat.borderBrush": (), + "QTextFrameFormat.borderStyle": (), + "QTextFrameFormat.bottomMargin": (), + "QTextFrameFormat.height": (), + "QTextFrameFormat.isValid": (), + "QTextFrameFormat.leftMargin": (), + "QTextFrameFormat.margin": (), + "QTextFrameFormat.padding": (), + "QTextFrameFormat.pageBreakPolicy": (), + "QTextFrameFormat.position": (), + "QTextFrameFormat.rightMargin": (), + "QTextFrameFormat.setBorder": ('float',), + "QTextFrameFormat.setBorderBrush": ('PySide2.QtGui.QBrush',), + "QTextFrameFormat.setBorderStyle": ('PySide2.QtGui.QTextFrameFormat.BorderStyle',), + "QTextFrameFormat.setBottomMargin": ('float',), + "QTextFrameFormat.setHeight": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.setLeftMargin": ('float',), + "QTextFrameFormat.setMargin": ('float',), + "QTextFrameFormat.setPadding": ('float',), + "QTextFrameFormat.setPageBreakPolicy": ('PageBreakFlags',), + "QTextFrameFormat.setPosition": ('PySide2.QtGui.QTextFrameFormat.Position',), + "QTextFrameFormat.setRightMargin": ('float',), + "QTextFrameFormat.setTopMargin": ('float',), + "QTextFrameFormat.setWidth": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.topMargin": (), + "QTextFrameFormat.width": (), + + # class PySide2.QtGui.QTextImageFormat: + "QTextImageFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextImageFormat',)], + "QTextImageFormat.__copy__": (), + "QTextImageFormat.height": (), + "QTextImageFormat.isValid": (), + "QTextImageFormat.name": (), + "QTextImageFormat.setHeight": ('float',), + "QTextImageFormat.setName": ('str',), + "QTextImageFormat.setWidth": ('float',), + "QTextImageFormat.width": (), + + # class PySide2.QtGui.QTextInlineObject: + "QTextInlineObject.__init__": (), + "QTextInlineObject.__copy__": (), + "QTextInlineObject.ascent": (), + "QTextInlineObject.descent": (), + "QTextInlineObject.format": (), + "QTextInlineObject.formatIndex": (), + "QTextInlineObject.height": (), + "QTextInlineObject.isValid": (), + "QTextInlineObject.rect": (), + "QTextInlineObject.setAscent": ('float',), + "QTextInlineObject.setDescent": ('float',), + "QTextInlineObject.setWidth": ('float',), + "QTextInlineObject.textDirection": (), + "QTextInlineObject.textPosition": (), + "QTextInlineObject.width": (), + + # class PySide2.QtGui.QTextItem: + "QTextItem.__init__": (), + "QTextItem.ascent": (), + "QTextItem.descent": (), + "QTextItem.font": (), + "QTextItem.renderFlags": (), + "QTextItem.text": (), + "QTextItem.width": (), + + # class PySide2.QtGui.QTextLayout: + "QTextLayout.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('str',), ('str', 'PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice')], + "QTextLayout.additionalFormats": (), + "QTextLayout.beginLayout": (), + "QTextLayout.boundingRect": (), + "QTextLayout.cacheEnabled": (), + "QTextLayout.clearAdditionalFormats": (), + "QTextLayout.clearFormats": (), + "QTextLayout.clearLayout": (), + "QTextLayout.createLine": (), + "QTextLayout.cursorMoveStyle": (), + "QTextLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'list', 'PySide2.QtCore.QRectF'), + "QTextLayout.drawCursor": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int', 'int')], + "QTextLayout.endLayout": (), + "QTextLayout.font": (), + "QTextLayout.formats": (), + "QTextLayout.isValidCursorPosition": ('int',), + "QTextLayout.leftCursorPosition": ('int',), + "QTextLayout.lineAt": ('int',), + "QTextLayout.lineCount": (), + "QTextLayout.lineForTextPosition": ('int',), + "QTextLayout.maximumWidth": (), + "QTextLayout.minimumWidth": (), + "QTextLayout.nextCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.position": (), + "QTextLayout.preeditAreaPosition": (), + "QTextLayout.preeditAreaText": (), + "QTextLayout.previousCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.rightCursorPosition": ('int',), + "QTextLayout.setAdditionalFormats": ('list',), + "QTextLayout.setCacheEnabled": ('bool',), + "QTextLayout.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextLayout.setFlags": ('int',), + "QTextLayout.setFont": ('PySide2.QtGui.QFont',), + "QTextLayout.setFormats": ('list',), + "QTextLayout.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLayout.setPreeditArea": ('int', 'str'), + "QTextLayout.setRawFont": ('PySide2.QtGui.QRawFont',), + "QTextLayout.setText": ('str',), + "QTextLayout.setTextOption": ('PySide2.QtGui.QTextOption',), + "QTextLayout.text": (), + "QTextLayout.textOption": (), + + # class PySide2.QtGui.QTextLength: + "QTextLength.__init__": [(), ('PySide2.QtGui.QTextLength',), ('PySide2.QtGui.QTextLength.Type', 'float')], + "QTextLength.__copy__": (), + "QTextLength.rawValue": (), + "QTextLength.type": (), + "QTextLength.value": ('float',), + + # class PySide2.QtGui.QTextLine: + "QTextLine.__init__": (), + "QTextLine.__copy__": (), + "QTextLine.ascent": (), + "QTextLine.cursorToX": ('int', 'PySide2.QtGui.QTextLine.Edge'), + "QTextLine.descent": (), + "QTextLine.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextLayout.FormatRange'), + "QTextLine.height": (), + "QTextLine.horizontalAdvance": (), + "QTextLine.isValid": (), + "QTextLine.leading": (), + "QTextLine.leadingIncluded": (), + "QTextLine.lineNumber": (), + "QTextLine.naturalTextRect": (), + "QTextLine.naturalTextWidth": (), + "QTextLine.position": (), + "QTextLine.rect": (), + "QTextLine.setLeadingIncluded": ('bool',), + "QTextLine.setLineWidth": ('float',), + "QTextLine.setNumColumns": [('int',), ('int', 'float')], + "QTextLine.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLine.textLength": (), + "QTextLine.textStart": (), + "QTextLine.width": (), + "QTextLine.x": (), + "QTextLine.xToCursor": ('float', 'PySide2.QtGui.QTextLine.CursorPosition'), + "QTextLine.y": (), + + # class PySide2.QtGui.QTextList: + "QTextList.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextList.add": ('PySide2.QtGui.QTextBlock',), + "QTextList.count": (), + "QTextList.format": (), + "QTextList.item": ('int',), + "QTextList.itemNumber": ('PySide2.QtGui.QTextBlock',), + "QTextList.itemText": ('PySide2.QtGui.QTextBlock',), + "QTextList.remove": ('PySide2.QtGui.QTextBlock',), + "QTextList.removeItem": ('int',), + "QTextList.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + + # class PySide2.QtGui.QTextListFormat: + "QTextListFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + "QTextListFormat.__copy__": (), + "QTextListFormat.indent": (), + "QTextListFormat.isValid": (), + "QTextListFormat.numberPrefix": (), + "QTextListFormat.numberSuffix": (), + "QTextListFormat.setIndent": ('int',), + "QTextListFormat.setNumberPrefix": ('str',), + "QTextListFormat.setNumberSuffix": ('str',), + "QTextListFormat.setStyle": ('PySide2.QtGui.QTextListFormat.Style',), + "QTextListFormat.style": (), + + # class PySide2.QtGui.QTextObject: + "QTextObject.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextObject.document": (), + "QTextObject.format": (), + "QTextObject.formatIndex": (), + "QTextObject.objectIndex": (), + "QTextObject.setFormat": ('PySide2.QtGui.QTextFormat',), + + # class PySide2.QtGui.QTextObjectInterface: + "QTextObjectInterface.__init__": (), + "QTextObjectInterface.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QTextObjectInterface.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QTextOption: + "QTextOption.__init__": [(), ('Alignment',), ('PySide2.QtGui.QTextOption',)], + "QTextOption.__copy__": (), + "QTextOption.alignment": (), + "QTextOption.flags": (), + "QTextOption.setAlignment": ('Alignment',), + "QTextOption.setFlags": ('Flags',), + "QTextOption.setTabArray": ('list',), + "QTextOption.setTabStop": ('float',), + "QTextOption.setTabs": ('list',), + "QTextOption.setTextDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextOption.setUseDesignMetrics": ('bool',), + "QTextOption.setWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextOption.tabArray": (), + "QTextOption.tabStop": (), + "QTextOption.tabs": (), + "QTextOption.textDirection": (), + "QTextOption.useDesignMetrics": (), + "QTextOption.wrapMode": (), + + # class PySide2.QtGui.QTextTable: + "QTextTable.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextTable.appendColumns": ('int',), + "QTextTable.appendRows": ('int',), + "QTextTable.cellAt": [('PySide2.QtGui.QTextCursor',), ('int',), ('int', 'int')], + "QTextTable.columns": (), + "QTextTable.format": (), + "QTextTable.insertColumns": ('int', 'int'), + "QTextTable.insertRows": ('int', 'int'), + "QTextTable.mergeCells": [('PySide2.QtGui.QTextCursor',), ('int', 'int', 'int', 'int')], + "QTextTable.removeColumns": ('int', 'int'), + "QTextTable.removeRows": ('int', 'int'), + "QTextTable.resize": ('int', 'int'), + "QTextTable.rowEnd": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rowStart": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rows": (), + "QTextTable.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTable.splitCell": ('int', 'int', 'int', 'int'), + + # class PySide2.QtGui.QTextTableCell: + "QTextTableCell.__init__": [(), ('PySide2.QtGui.QTextTableCell',)], + "QTextTableCell.__copy__": (), + "QTextTableCell.begin": (), + "QTextTableCell.column": (), + "QTextTableCell.columnSpan": (), + "QTextTableCell.end": (), + "QTextTableCell.firstCursorPosition": (), + "QTextTableCell.firstPosition": (), + "QTextTableCell.format": (), + "QTextTableCell.isValid": (), + "QTextTableCell.lastCursorPosition": (), + "QTextTableCell.lastPosition": (), + "QTextTableCell.row": (), + "QTextTableCell.rowSpan": (), + "QTextTableCell.setFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextTableCell.tableCellFormatIndex": (), + + # class PySide2.QtGui.QTextTableCellFormat: + "QTextTableCellFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableCellFormat',)], + "QTextTableCellFormat.__copy__": (), + "QTextTableCellFormat.bottomPadding": (), + "QTextTableCellFormat.isValid": (), + "QTextTableCellFormat.leftPadding": (), + "QTextTableCellFormat.rightPadding": (), + "QTextTableCellFormat.setBottomPadding": ('float',), + "QTextTableCellFormat.setLeftPadding": ('float',), + "QTextTableCellFormat.setPadding": ('float',), + "QTextTableCellFormat.setRightPadding": ('float',), + "QTextTableCellFormat.setTopPadding": ('float',), + "QTextTableCellFormat.topPadding": (), + + # class PySide2.QtGui.QTextTableFormat: + "QTextTableFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTableFormat.__copy__": (), + "QTextTableFormat.alignment": (), + "QTextTableFormat.cellPadding": (), + "QTextTableFormat.cellSpacing": (), + "QTextTableFormat.clearColumnWidthConstraints": (), + "QTextTableFormat.columnWidthConstraints": (), + "QTextTableFormat.columns": (), + "QTextTableFormat.headerRowCount": (), + "QTextTableFormat.isValid": (), + "QTextTableFormat.setAlignment": ('Alignment',), + "QTextTableFormat.setCellPadding": ('float',), + "QTextTableFormat.setCellSpacing": ('float',), + "QTextTableFormat.setColumnWidthConstraints": ('list',), + "QTextTableFormat.setColumns": ('int',), + "QTextTableFormat.setHeaderRowCount": ('int',), + + # class PySide2.QtGui.QToolBarChangeEvent: + "QToolBarChangeEvent.__init__": ('bool',), + "QToolBarChangeEvent.toggle": (), + + # class PySide2.QtGui.QTouchDevice: + "QTouchDevice.__init__": (), + "QTouchDevice.capabilities": (), + "QTouchDevice.devices": (), + "QTouchDevice.maximumTouchPoints": (), + "QTouchDevice.name": (), + "QTouchDevice.setCapabilities": ('Capabilities',), + "QTouchDevice.setMaximumTouchPoints": ('int',), + "QTouchDevice.setName": ('str',), + "QTouchDevice.setType": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTouchDevice.type": (), + + # class PySide2.QtGui.QTouchEvent: + "QTouchEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtGui.QTouchDevice', 'KeyboardModifiers', 'TouchPointStates', 'list'), + "QTouchEvent.device": (), + "QTouchEvent.setDevice": ('PySide2.QtGui.QTouchDevice',), + "QTouchEvent.setTarget": ('PySide2.QtCore.QObject',), + "QTouchEvent.setTouchPointStates": ('TouchPointStates',), + "QTouchEvent.setTouchPoints": ('list',), + "QTouchEvent.setWindow": ('PySide2.QtGui.QWindow',), + "QTouchEvent.target": (), + "QTouchEvent.touchPointStates": (), + "QTouchEvent.touchPoints": (), + "QTouchEvent.window": (), + + # class PySide2.QtGui.QTransform: + "QTransform.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float', 'float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QTransform.__copy__": (), + "QTransform.__reduce__": (), + "QTransform.adjoint": (), + "QTransform.det": (), + "QTransform.determinant": (), + "QTransform.dx": (), + "QTransform.dy": (), + "QTransform.fromScale": ('float', 'float'), + "QTransform.fromTranslate": ('float', 'float'), + "QTransform.inverted": ('bool',), + "QTransform.isAffine": (), + "QTransform.isIdentity": (), + "QTransform.isInvertible": (), + "QTransform.isRotating": (), + "QTransform.isScaling": (), + "QTransform.isTranslating": (), + "QTransform.m11": (), + "QTransform.m12": (), + "QTransform.m13": (), + "QTransform.m21": (), + "QTransform.m22": (), + "QTransform.m23": (), + "QTransform.m31": (), + "QTransform.m32": (), + "QTransform.m33": (), + "QTransform.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float')], + "QTransform.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QTransform.mapToPolygon": ('PySide2.QtCore.QRect',), + "QTransform.quadToQuad": [('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.quadToSquare": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.reset": (), + "QTransform.rotate": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.rotateRadians": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.scale": ('float', 'float'), + "QTransform.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float'), + "QTransform.shear": ('float', 'float'), + "QTransform.squareToQuad": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.toAffine": (), + "QTransform.translate": ('float', 'float'), + "QTransform.transposed": (), + "QTransform.type": (), + + # class PySide2.QtGui.QValidator: + "QValidator.__init__": ('PySide2.QtCore.QObject',), + "QValidator.fixup": ('str',), + "QValidator.locale": (), + "QValidator.setLocale": ('PySide2.QtCore.QLocale',), + "QValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QVector2D: + "QVector2D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',), ('float', 'float')], + "QVector2D.__copy__": (), + "QVector2D.__reduce__": (), + "QVector2D.distanceToLine": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.distanceToPoint": ('PySide2.QtGui.QVector2D',), + "QVector2D.dotProduct": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.isNull": (), + "QVector2D.length": (), + "QVector2D.lengthSquared": (), + "QVector2D.normalize": (), + "QVector2D.normalized": (), + "QVector2D.setX": ('float',), + "QVector2D.setY": ('float',), + "QVector2D.toPoint": (), + "QVector2D.toPointF": (), + "QVector2D.toTuple": (), + "QVector2D.toVector3D": (), + "QVector2D.toVector4D": (), + "QVector2D.x": (), + "QVector2D.y": (), + + # class PySide2.QtGui.QVector3D: + "QVector3D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float'), ('PySide2.QtGui.QVector4D',), ('float', 'float', 'float')], + "QVector3D.__copy__": (), + "QVector3D.__reduce__": (), + "QVector3D.crossProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToLine": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToPlane": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.distanceToPoint": ('PySide2.QtGui.QVector3D',), + "QVector3D.dotProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.isNull": (), + "QVector3D.length": (), + "QVector3D.lengthSquared": (), + "QVector3D.normal": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.normalize": (), + "QVector3D.normalized": (), + "QVector3D.project": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.setX": ('float',), + "QVector3D.setY": ('float',), + "QVector3D.setZ": ('float',), + "QVector3D.toPoint": (), + "QVector3D.toPointF": (), + "QVector3D.toTuple": (), + "QVector3D.toVector2D": (), + "QVector3D.toVector4D": (), + "QVector3D.unproject": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.x": (), + "QVector3D.y": (), + "QVector3D.z": (), + + # class PySide2.QtGui.QVector4D: + "QVector4D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float', 'float'), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QVector4D.__copy__": (), + "QVector4D.__reduce__": (), + "QVector4D.dotProduct": ('PySide2.QtGui.QVector4D', 'PySide2.QtGui.QVector4D'), + "QVector4D.isNull": (), + "QVector4D.length": (), + "QVector4D.lengthSquared": (), + "QVector4D.normalize": (), + "QVector4D.normalized": (), + "QVector4D.setW": ('float',), + "QVector4D.setX": ('float',), + "QVector4D.setY": ('float',), + "QVector4D.setZ": ('float',), + "QVector4D.toPoint": (), + "QVector4D.toPointF": (), + "QVector4D.toTuple": (), + "QVector4D.toVector2D": (), + "QVector4D.toVector2DAffine": (), + "QVector4D.toVector3D": (), + "QVector4D.toVector3DAffine": (), + "QVector4D.w": (), + "QVector4D.x": (), + "QVector4D.y": (), + "QVector4D.z": (), + + # class PySide2.QtGui.QWhatsThisClickedEvent: + "QWhatsThisClickedEvent.__init__": ('str',), + "QWhatsThisClickedEvent.href": (), + + # class PySide2.QtGui.QWheelEvent: + "QWheelEvent.__init__": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource', 'bool'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation'), ('PySide2.QtCore.QPointF', 'int', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation')], + "QWheelEvent.angleDelta": (), + "QWheelEvent.buttons": (), + "QWheelEvent.delta": (), + "QWheelEvent.globalPos": (), + "QWheelEvent.globalPosF": (), + "QWheelEvent.globalX": (), + "QWheelEvent.global""Y": (), + "QWheelEvent.inverted": (), + "QWheelEvent.orientation": (), + "QWheelEvent.phase": (), + "QWheelEvent.pixelDelta": (), + "QWheelEvent.pos": (), + "QWheelEvent.posF": (), + "QWheelEvent.source": (), + "QWheelEvent.x": (), + "QWheelEvent.y": (), + + # class PySide2.QtGui.QWindow: + "QWindow.__init__": [('PySide2.QtGui.QScreen',), ('PySide2.QtGui.QWindow',)], + "QWindow.accessibleRoot": (), + "QWindow.alert": ('int',), + "QWindow.baseSize": (), + "QWindow.close": (), + "QWindow.contentOrientation": (), + "QWindow.create": (), + "QWindow.cursor": (), + "QWindow.destroy": (), + "QWindow.devicePixelRatio": (), + "QWindow.event": ('PySide2.QtCore.QEvent',), + "QWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QWindow.filePath": (), + "QWindow.flags": (), + "QWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.focusObject": (), + "QWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.format": (), + "QWindow.frameGeometry": (), + "QWindow.frameMargins": (), + "QWindow.framePosition": (), + "QWindow.fromWinId": ('int',), + "QWindow.geometry": (), + "QWindow.height": (), + "QWindow.hide": (), + "QWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWindow.icon": (), + "QWindow.isActive": (), + "QWindow.isAncestorOf": ('PySide2.QtGui.QWindow', 'PySide2.QtGui.QWindow.AncestorMode'), + "QWindow.isExposed": (), + "QWindow.isModal": (), + "QWindow.isTopLevel": (), + "QWindow.isVisible": (), + "QWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.lower": (), + "QWindow.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mask": (), + "QWindow.maximumHeight": (), + "QWindow.maximumSize": (), + "QWindow.maximumWidth": (), + "QWindow.minimumHeight": (), + "QWindow.minimumSize": (), + "QWindow.minimumWidth": (), + "QWindow.modality": (), + "QWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWindow.opacity": (), + "QWindow.parent": [(), ('PySide2.QtGui.QWindow.AncestorMode',)], + "QWindow.position": (), + "QWindow.raise": (), + "QWindow.reportContentOrientationChange": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QWindow.requestActivate": (), + "QWindow.requestUpdate": (), + "QWindow.requestedFormat": (), + "QWindow.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWindow.screen": (), + "QWindow.setBaseSize": ('PySide2.QtCore.QSize',), + "QWindow.setCursor": ('PySide2.QtGui.QCursor',), + "QWindow.setFilePath": ('str',), + "QWindow.setFlag": ('PySide2.QtCore.Qt.WindowType', 'bool'), + "QWindow.setFlags": ('WindowFlags',), + "QWindow.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QWindow.setFramePosition": ('PySide2.QtCore.QPoint',), + "QWindow.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWindow.setHeight": ('int',), + "QWindow.setIcon": ('PySide2.QtGui.QIcon',), + "QWindow.setKeyboardGrabEnabled": ('bool',), + "QWindow.setMask": ('PySide2.QtGui.QRegion',), + "QWindow.setMaximumHeight": ('int',), + "QWindow.setMaximumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMaximumWidth": ('int',), + "QWindow.setMinimumHeight": ('int',), + "QWindow.setMinimumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMinimumWidth": ('int',), + "QWindow.setModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWindow.setMouseGrabEnabled": ('bool',), + "QWindow.setOpacity": ('float',), + "QWindow.setParent": ('PySide2.QtGui.QWindow',), + "QWindow.setPosition": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWindow.setScreen": ('PySide2.QtGui.QScreen',), + "QWindow.setSizeIncrement": ('PySide2.QtCore.QSize',), + "QWindow.setSurfaceType": ('PySide2.QtGui.QSurface.SurfaceType',), + "QWindow.setTitle": ('str',), + "QWindow.setTransientParent": ('PySide2.QtGui.QWindow',), + "QWindow.setVisibility": ('PySide2.QtGui.QWindow.Visibility',), + "QWindow.setVisible": ('bool',), + "QWindow.setWidth": ('int',), + "QWindow.setWindowState": ('PySide2.QtCore.Qt.WindowState',), + "QWindow.setX": ('int',), + "QWindow.setY": ('int',), + "QWindow.show": (), + "QWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWindow.showFullScreen": (), + "QWindow.showMaximized": (), + "QWindow.showMinimized": (), + "QWindow.showNormal": (), + "QWindow.size": (), + "QWindow.sizeIncrement": (), + "QWindow.surfaceHandle": (), + "QWindow.surfaceType": (), + "QWindow.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWindow.title": (), + "QWindow.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QWindow.transientParent": (), + "QWindow.type": (), + "QWindow.unsetCursor": (), + "QWindow.visibility": (), + "QWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWindow.width": (), + "QWindow.winId": (), + "QWindow.windowState": (), + "QWindow.x": (), + "QWindow.y": (), + + # class PySide2.QtGui.QWindowStateChangeEvent: + "QWindowStateChangeEvent.__init__": ('WindowStates', 'bool'), + "QWindowStateChangeEvent.isOverride": (), + "QWindowStateChangeEvent.oldState": (), + }) + +# Module PySide2.QtWidgets +if "PySide2.QtWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWidgets.QAbstractButton: + "QAbstractButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractButton.animateClick": ('int',), + "QAbstractButton.autoExclusive": (), + "QAbstractButton.autoRepeat": (), + "QAbstractButton.autoRepeatDelay": (), + "QAbstractButton.autoRepeatInterval": (), + "QAbstractButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractButton.checkStateSet": (), + "QAbstractButton.click": (), + "QAbstractButton.event": ('PySide2.QtCore.QEvent',), + "QAbstractButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.group": (), + "QAbstractButton.hitButton": ('PySide2.QtCore.QPoint',), + "QAbstractButton.icon": (), + "QAbstractButton.iconSize": (), + "QAbstractButton.isCheckable": (), + "QAbstractButton.isChecked": (), + "QAbstractButton.isDown": (), + "QAbstractButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.nextCheckState": (), + "QAbstractButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractButton.setAutoExclusive": ('bool',), + "QAbstractButton.setAutoRepeat": ('bool',), + "QAbstractButton.setAutoRepeatDelay": ('int',), + "QAbstractButton.setAutoRepeatInterval": ('int',), + "QAbstractButton.setCheckable": ('bool',), + "QAbstractButton.setChecked": ('bool',), + "QAbstractButton.setDown": ('bool',), + "QAbstractButton.setIcon": ('PySide2.QtGui.QIcon',), + "QAbstractButton.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractButton.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAbstractButton.setText": ('str',), + "QAbstractButton.shortcut": (), + "QAbstractButton.text": (), + "QAbstractButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractButton.toggle": (), + + # class PySide2.QtWidgets.QAbstractGraphicsShapeItem: + "QAbstractGraphicsShapeItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.brush": (), + "QAbstractGraphicsShapeItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.opaqueArea": (), + "QAbstractGraphicsShapeItem.pen": (), + "QAbstractGraphicsShapeItem.setBrush": ('PySide2.QtGui.QBrush',), + "QAbstractGraphicsShapeItem.setPen": ('PySide2.QtGui.QPen',), + + # class PySide2.QtWidgets.QAbstractItemDelegate: + "QAbstractItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.destroyEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.elidedText": ('PySide2.QtGui.QFontMetrics', 'int', 'PySide2.QtCore.Qt.TextElideMode', 'str'), + "QAbstractItemDelegate.helpEvent": ('PySide2.QtGui.QHelpEvent', 'PySide2.QtWidgets.QAbstractItemView', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paintingRoles": (), + "QAbstractItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QAbstractItemView: + "QAbstractItemView.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.alternatingRowColors": (), + "QAbstractItemView.autoScrollMargin": (), + "QAbstractItemView.clearSelection": (), + "QAbstractItemView.closeEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QAbstractItemDelegate.EndEditHint'), + "QAbstractItemView.closePersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.commitData": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemView.currentIndex": (), + "QAbstractItemView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QAbstractItemView.defaultDropAction": (), + "QAbstractItemView.dirtyRegionOffset": (), + "QAbstractItemView.doAutoScroll": (), + "QAbstractItemView.doItemsLayout": (), + "QAbstractItemView.dragDropMode": (), + "QAbstractItemView.dragDropOverwriteMode": (), + "QAbstractItemView.dragEnabled": (), + "QAbstractItemView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractItemView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractItemView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractItemView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractItemView.dropIndicatorPosition": (), + "QAbstractItemView.edit": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.EditTrigger', 'PySide2.QtCore.QEvent')], + "QAbstractItemView.editTriggers": (), + "QAbstractItemView.editorDestroyed": ('PySide2.QtCore.QObject',), + "QAbstractItemView.event": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.executeDelayedItemsLayout": (), + "QAbstractItemView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.focusNextPrevChild": ('bool',), + "QAbstractItemView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.hasAutoScroll": (), + "QAbstractItemView.horizontalOffset": (), + "QAbstractItemView.horizontalScrollMode": (), + "QAbstractItemView.horizontalScrollbarAction": ('int',), + "QAbstractItemView.horizontalScrollbarValueChanged": ('int',), + "QAbstractItemView.horizontalStepsPerItem": (), + "QAbstractItemView.iconSize": (), + "QAbstractItemView.indexAt": ('PySide2.QtCore.QPoint',), + "QAbstractItemView.indexWidget": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QAbstractItemView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractItemView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.itemDelegate": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.itemDelegateForColumn": ('int',), + "QAbstractItemView.itemDelegateForRow": ('int',), + "QAbstractItemView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractItemView.keyboardSearch": ('str',), + "QAbstractItemView.model": (), + "QAbstractItemView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QAbstractItemView.openPersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.reset": (), + "QAbstractItemView.resetHorizontalScrollMode": (), + "QAbstractItemView.resetVerticalScrollMode": (), + "QAbstractItemView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractItemView.rootIndex": (), + "QAbstractItemView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.scheduleDelayedItemsLayout": (), + "QAbstractItemView.scrollDirtyRegion": ('int', 'int'), + "QAbstractItemView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QAbstractItemView.scrollToBottom": (), + "QAbstractItemView.scrollToTop": (), + "QAbstractItemView.selectAll": (), + "QAbstractItemView.selectedIndexes": (), + "QAbstractItemView.selectionBehavior": (), + "QAbstractItemView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QAbstractItemView.selectionCommand": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QEvent'), + "QAbstractItemView.selectionMode": (), + "QAbstractItemView.selectionModel": (), + "QAbstractItemView.setAlternatingRowColors": ('bool',), + "QAbstractItemView.setAutoScroll": ('bool',), + "QAbstractItemView.setAutoScrollMargin": ('int',), + "QAbstractItemView.setCurrentIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setDefaultDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QAbstractItemView.setDirtyRegion": ('PySide2.QtGui.QRegion',), + "QAbstractItemView.setDragDropMode": ('PySide2.QtWidgets.QAbstractItemView.DragDropMode',), + "QAbstractItemView.setDragDropOverwriteMode": ('bool',), + "QAbstractItemView.setDragEnabled": ('bool',), + "QAbstractItemView.setDropIndicatorShown": ('bool',), + "QAbstractItemView.setEditTriggers": ('EditTriggers',), + "QAbstractItemView.setHorizontalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setHorizontalStepsPerItem": ('int',), + "QAbstractItemView.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractItemView.setIndexWidget": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QWidget'), + "QAbstractItemView.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QAbstractItemView.setItemDelegateForColumn": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setItemDelegateForRow": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractItemView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QAbstractItemView.setSelectionBehavior": ('PySide2.QtWidgets.QAbstractItemView.SelectionBehavior',), + "QAbstractItemView.setSelectionMode": ('PySide2.QtWidgets.QAbstractItemView.SelectionMode',), + "QAbstractItemView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QAbstractItemView.setState": ('PySide2.QtWidgets.QAbstractItemView.State',), + "QAbstractItemView.setTabKeyNavigation": ('bool',), + "QAbstractItemView.setTextElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QAbstractItemView.setVerticalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setVerticalStepsPerItem": ('int',), + "QAbstractItemView.showDropIndicator": (), + "QAbstractItemView.sizeHintForColumn": ('int',), + "QAbstractItemView.sizeHintForIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.sizeHintForRow": ('int',), + "QAbstractItemView.startAutoScroll": (), + "QAbstractItemView.startDrag": ('DropActions',), + "QAbstractItemView.state": (), + "QAbstractItemView.stopAutoScroll": (), + "QAbstractItemView.tabKeyNavigation": (), + "QAbstractItemView.textElideMode": (), + "QAbstractItemView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractItemView.update": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.updateEditorData": (), + "QAbstractItemView.updateEditorGeometries": (), + "QAbstractItemView.updateGeometries": (), + "QAbstractItemView.verticalOffset": (), + "QAbstractItemView.verticalScrollMode": (), + "QAbstractItemView.verticalScrollbarAction": ('int',), + "QAbstractItemView.verticalScrollbarValueChanged": ('int',), + "QAbstractItemView.verticalStepsPerItem": (), + "QAbstractItemView.viewOptions": (), + "QAbstractItemView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.viewportSizeHint": (), + "QAbstractItemView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QAbstractScrollArea: + "QAbstractScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.addScrollBarWidget": ('PySide2.QtWidgets.QWidget', 'Alignment'), + "QAbstractScrollArea.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractScrollArea.cornerWidget": (), + "QAbstractScrollArea.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractScrollArea.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractScrollArea.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractScrollArea.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractScrollArea.event": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QAbstractScrollArea.horizontalScrollBar": (), + "QAbstractScrollArea.horizontalScrollBarPolicy": (), + "QAbstractScrollArea.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractScrollArea.maximumViewportSize": (), + "QAbstractScrollArea.minimumSizeHint": (), + "QAbstractScrollArea.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractScrollArea.scrollBarWidgets": ('Alignment',), + "QAbstractScrollArea.scrollContentsBy": ('int', 'int'), + "QAbstractScrollArea.setCornerWidget": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setHorizontalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setHorizontalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setSizeAdjustPolicy": ('PySide2.QtWidgets.QAbstractScrollArea.SizeAdjustPolicy',), + "QAbstractScrollArea.setVerticalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setVerticalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setViewportMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QAbstractScrollArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.sizeAdjustPolicy": (), + "QAbstractScrollArea.sizeHint": (), + "QAbstractScrollArea.verticalScrollBar": (), + "QAbstractScrollArea.verticalScrollBarPolicy": (), + "QAbstractScrollArea.viewport": (), + "QAbstractScrollArea.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.viewportMargins": (), + "QAbstractScrollArea.viewportSizeHint": (), + "QAbstractScrollArea.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSlider: + "QAbstractSlider.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSlider.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.event": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.hasTracking": (), + "QAbstractSlider.invertedAppearance": (), + "QAbstractSlider.invertedControls": (), + "QAbstractSlider.isSliderDown": (), + "QAbstractSlider.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSlider.maximum": (), + "QAbstractSlider.minimum": (), + "QAbstractSlider.orientation": (), + "QAbstractSlider.pageStep": (), + "QAbstractSlider.repeatAction": (), + "QAbstractSlider.setInvertedAppearance": ('bool',), + "QAbstractSlider.setInvertedControls": ('bool',), + "QAbstractSlider.setMaximum": ('int',), + "QAbstractSlider.setMinimum": ('int',), + "QAbstractSlider.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QAbstractSlider.setPageStep": ('int',), + "QAbstractSlider.setRange": ('int', 'int'), + "QAbstractSlider.setRepeatAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction', 'int', 'int'), + "QAbstractSlider.setSingleStep": ('int',), + "QAbstractSlider.setSliderDown": ('bool',), + "QAbstractSlider.setSliderPosition": ('int',), + "QAbstractSlider.setTracking": ('bool',), + "QAbstractSlider.setValue": ('int',), + "QAbstractSlider.singleStep": (), + "QAbstractSlider.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QAbstractSlider.sliderPosition": (), + "QAbstractSlider.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSlider.triggerAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction',), + "QAbstractSlider.value": (), + "QAbstractSlider.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSpinBox: + "QAbstractSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSpinBox.alignment": (), + "QAbstractSpinBox.buttonSymbols": (), + "QAbstractSpinBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.clear": (), + "QAbstractSpinBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QAbstractSpinBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractSpinBox.correctionMode": (), + "QAbstractSpinBox.event": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.fixup": ('str',), + "QAbstractSpinBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.hasAcceptableInput": (), + "QAbstractSpinBox.hasFrame": (), + "QAbstractSpinBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QAbstractSpinBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QAbstractSpinBox.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractSpinBox.interpretText": (), + "QAbstractSpinBox.isAccelerated": (), + "QAbstractSpinBox.isGroupSeparatorShown": (), + "QAbstractSpinBox.isReadOnly": (), + "QAbstractSpinBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyboardTracking": (), + "QAbstractSpinBox.lineEdit": (), + "QAbstractSpinBox.minimumSizeHint": (), + "QAbstractSpinBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractSpinBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractSpinBox.selectAll": (), + "QAbstractSpinBox.setAccelerated": ('bool',), + "QAbstractSpinBox.setAlignment": ('Alignment',), + "QAbstractSpinBox.setButtonSymbols": ('PySide2.QtWidgets.QAbstractSpinBox.ButtonSymbols',), + "QAbstractSpinBox.setCorrectionMode": ('PySide2.QtWidgets.QAbstractSpinBox.CorrectionMode',), + "QAbstractSpinBox.setFrame": ('bool',), + "QAbstractSpinBox.setGroupSeparatorShown": ('bool',), + "QAbstractSpinBox.setKeyboardTracking": ('bool',), + "QAbstractSpinBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QAbstractSpinBox.setReadOnly": ('bool',), + "QAbstractSpinBox.setSpecialValueText": ('str',), + "QAbstractSpinBox.setWrapping": ('bool',), + "QAbstractSpinBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QAbstractSpinBox.sizeHint": (), + "QAbstractSpinBox.specialValueText": (), + "QAbstractSpinBox.stepBy": ('int',), + "QAbstractSpinBox.stepDown": (), + "QAbstractSpinBox.stepEnabled": (), + "QAbstractSpinBox.stepUp": (), + "QAbstractSpinBox.text": (), + "QAbstractSpinBox.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSpinBox.validate": ('str', 'int'), + "QAbstractSpinBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QAbstractSpinBox.wrapping": (), + + # class PySide2.QtWidgets.QAction: + "QAction.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QAction.actionGroup": (), + "QAction.activate": ('PySide2.QtWidgets.QAction.ActionEvent',), + "QAction.associatedGraphicsWidgets": (), + "QAction.associatedWidgets": (), + "QAction.autoRepeat": (), + "QAction.data": (), + "QAction.event": ('PySide2.QtCore.QEvent',), + "QAction.font": (), + "QAction.hover": (), + "QAction.icon": (), + "QAction.iconText": (), + "QAction.isCheckable": (), + "QAction.isChecked": (), + "QAction.isEnabled": (), + "QAction.isIconVisibleInMenu": (), + "QAction.isSeparator": (), + "QAction.isVisible": (), + "QAction.menu": (), + "QAction.menuRole": (), + "QAction.parentWidget": (), + "QAction.priority": (), + "QAction.setActionGroup": ('PySide2.QtWidgets.QActionGroup',), + "QAction.setAutoRepeat": ('bool',), + "QAction.setCheckable": ('bool',), + "QAction.setChecked": ('bool',), + "QAction.setData": ('Any',), + "QAction.setDisabled": ('bool',), + "QAction.setEnabled": ('bool',), + "QAction.setFont": ('PySide2.QtGui.QFont',), + "QAction.setIcon": ('PySide2.QtGui.QIcon',), + "QAction.setIconText": ('str',), + "QAction.setIconVisibleInMenu": ('bool',), + "QAction.setMenu": ('PySide2.QtWidgets.QMenu',), + "QAction.setMenuRole": ('PySide2.QtWidgets.QAction.MenuRole',), + "QAction.setPriority": ('PySide2.QtWidgets.QAction.Priority',), + "QAction.setSeparator": ('bool',), + "QAction.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAction.setShortcutContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QAction.setShortcuts": [('PySide2.QtGui.QKeySequence.StandardKey',), ('list',)], + "QAction.setStatusTip": ('str',), + "QAction.setText": ('str',), + "QAction.setToolTip": ('str',), + "QAction.setVisible": ('bool',), + "QAction.setWhatsThis": ('str',), + "QAction.shortcut": (), + "QAction.shortcutContext": (), + "QAction.shortcuts": (), + "QAction.showStatusText": ('PySide2.QtWidgets.QWidget',), + "QAction.statusTip": (), + "QAction.text": (), + "QAction.toggle": (), + "QAction.toolTip": (), + "QAction.trigger": (), + "QAction.whatsThis": (), + + # class PySide2.QtWidgets.QActionGroup: + "QActionGroup.__init__": ('PySide2.QtCore.QObject',), + "QActionGroup.actions": (), + "QActionGroup.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction',), ('str',)], + "QActionGroup.checkedAction": (), + "QActionGroup.isEnabled": (), + "QActionGroup.isExclusive": (), + "QActionGroup.isVisible": (), + "QActionGroup.removeAction": ('PySide2.QtWidgets.QAction',), + "QActionGroup.setDisabled": ('bool',), + "QActionGroup.setEnabled": ('bool',), + "QActionGroup.setExclusive": ('bool',), + "QActionGroup.setVisible": ('bool',), + + # class PySide2.QtWidgets.QApplication: + "QApplication.__init__": ('List[str]',), + "QApplication.aboutQt": (), + "QApplication.activeModalWidget": (), + "QApplication.activePopupWidget": (), + "QApplication.activeWindow": (), + "QApplication.alert": ('PySide2.QtWidgets.QWidget', 'int'), + "QApplication.allWidgets": (), + "QApplication.autoSipEnabled": (), + "QApplication.beep": (), + "QApplication.closeAllWindows": (), + "QApplication.colorSpec": (), + "QApplication.cursorFlashTime": (), + "QApplication.desktop": (), + "QApplication.doubleClickInterval": (), + "QApplication.event": ('PySide2.QtCore.QEvent',), + "QApplication.exec_": (), + "QApplication.focusWidget": (), + "QApplication.font": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.fontMetrics": (), + "QApplication.globalStrut": (), + "QApplication.isEffectEnabled": ('PySide2.QtCore.Qt.UIEffect',), + "QApplication.keyboardInputInterval": (), + "QApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QApplication.palette": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.setActiveWindow": ('PySide2.QtWidgets.QWidget',), + "QApplication.setAutoSipEnabled": ('bool',), + "QApplication.setColorSpec": ('int',), + "QApplication.setCursorFlashTime": ('int',), + "QApplication.setDoubleClickInterval": ('int',), + "QApplication.setEffectEnabled": ('PySide2.QtCore.Qt.UIEffect', 'bool'), + "QApplication.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'str')], + "QApplication.setGlobalStrut": ('PySide2.QtCore.QSize',), + "QApplication.setKeyboardInputInterval": ('int',), + "QApplication.setPalette": [('PySide2.QtGui.QPalette',), ('PySide2.QtGui.QPalette', 'str')], + "QApplication.setStartDragDistance": ('int',), + "QApplication.setStartDragTime": ('int',), + "QApplication.setStyle": [('PySide2.QtWidgets.QStyle',), ('str',)], + "QApplication.setStyleSheet": ('str',), + "QApplication.setWheelScrollLines": ('int',), + "QApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QApplication.startDragDistance": (), + "QApplication.startDragTime": (), + "QApplication.style": (), + "QApplication.styleSheet": (), + "QApplication.topLevelAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.topLevelWidgets": (), + "QApplication.wheelScrollLines": (), + "QApplication.widgetAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.windowIcon": (), + + # class PySide2.QtWidgets.QBoxLayout: + "QBoxLayout.__init__": ('PySide2.QtWidgets.QBoxLayout.Direction', 'PySide2.QtWidgets.QWidget'), + "QBoxLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QBoxLayout.addLayout": ('PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.addSpacerItem": ('PySide2.QtWidgets.QSpacerItem',), + "QBoxLayout.addSpacing": ('int',), + "QBoxLayout.addStretch": ('int',), + "QBoxLayout.addStrut": ('int',), + "QBoxLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'Alignment')], + "QBoxLayout.count": (), + "QBoxLayout.direction": (), + "QBoxLayout.expandingDirections": (), + "QBoxLayout.hasHeightForWidth": (), + "QBoxLayout.heightForWidth": ('int',), + "QBoxLayout.insertItem": ('int', 'PySide2.QtWidgets.QLayoutItem'), + "QBoxLayout.insertLayout": ('int', 'PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.insertSpacerItem": ('int', 'PySide2.QtWidgets.QSpacerItem'), + "QBoxLayout.insertSpacing": ('int', 'int'), + "QBoxLayout.insertStretch": ('int', 'int'), + "QBoxLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int', 'Alignment'), + "QBoxLayout.invalidate": (), + "QBoxLayout.itemAt": ('int',), + "QBoxLayout.maximumSize": (), + "QBoxLayout.minimumHeightForWidth": ('int',), + "QBoxLayout.minimumSize": (), + "QBoxLayout.setDirection": ('PySide2.QtWidgets.QBoxLayout.Direction',), + "QBoxLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QBoxLayout.setSpacing": ('int',), + "QBoxLayout.setStretch": ('int', 'int'), + "QBoxLayout.setStretchFactor": [('PySide2.QtWidgets.QLayout', 'int'), ('PySide2.QtWidgets.QWidget', 'int')], + "QBoxLayout.sizeHint": (), + "QBoxLayout.spacing": (), + "QBoxLayout.stretch": ('int',), + "QBoxLayout.takeAt": ('int',), + + # class PySide2.QtWidgets.QButtonGroup: + "QButtonGroup.__init__": ('PySide2.QtCore.QObject',), + "QButtonGroup.addButton": ('PySide2.QtWidgets.QAbstractButton', 'int'), + "QButtonGroup.button": ('int',), + "QButtonGroup.buttons": (), + "QButtonGroup.checkedButton": (), + "QButtonGroup.checkedId": (), + "QButtonGroup.exclusive": (), + "QButtonGroup.id": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.setExclusive": ('bool',), + "QButtonGroup.setId": ('PySide2.QtWidgets.QAbstractButton', 'int'), + + # class PySide2.QtWidgets.QCalendarWidget: + "QCalendarWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QCalendarWidget.dateEditAcceptDelay": (), + "QCalendarWidget.dateTextFormat": [(), ('PySide2.QtCore.QDate',)], + "QCalendarWidget.event": ('PySide2.QtCore.QEvent',), + "QCalendarWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCalendarWidget.firstDayOfWeek": (), + "QCalendarWidget.headerTextFormat": (), + "QCalendarWidget.horizontalHeaderFormat": (), + "QCalendarWidget.isDateEditEnabled": (), + "QCalendarWidget.isGridVisible": (), + "QCalendarWidget.isNavigationBarVisible": (), + "QCalendarWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QCalendarWidget.maximumDate": (), + "QCalendarWidget.minimumDate": (), + "QCalendarWidget.minimumSizeHint": (), + "QCalendarWidget.monthShown": (), + "QCalendarWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QCalendarWidget.paintCell": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QDate'), + "QCalendarWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QCalendarWidget.selectedDate": (), + "QCalendarWidget.selectionMode": (), + "QCalendarWidget.setCurrentPage": ('int', 'int'), + "QCalendarWidget.setDateEditAcceptDelay": ('int',), + "QCalendarWidget.setDateEditEnabled": ('bool',), + "QCalendarWidget.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QCalendarWidget.setDateTextFormat": ('PySide2.QtCore.QDate', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.setFirstDayOfWeek": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.setGridVisible": ('bool',), + "QCalendarWidget.setHeaderTextFormat": ('PySide2.QtGui.QTextCharFormat',), + "QCalendarWidget.setHorizontalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.HorizontalHeaderFormat',), + "QCalendarWidget.setMaximumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setMinimumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setNavigationBarVisible": ('bool',), + "QCalendarWidget.setSelectedDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setSelectionMode": ('PySide2.QtWidgets.QCalendarWidget.SelectionMode',), + "QCalendarWidget.setVerticalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.VerticalHeaderFormat',), + "QCalendarWidget.setWeekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.showNextMonth": (), + "QCalendarWidget.showNextYear": (), + "QCalendarWidget.showPreviousMonth": (), + "QCalendarWidget.showPreviousYear": (), + "QCalendarWidget.showSelectedDate": (), + "QCalendarWidget.showToday": (), + "QCalendarWidget.sizeHint": (), + "QCalendarWidget.updateCell": ('PySide2.QtCore.QDate',), + "QCalendarWidget.updateCells": (), + "QCalendarWidget.verticalHeaderFormat": (), + "QCalendarWidget.weekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.yearShown": (), + + # class PySide2.QtWidgets.QCheckBox: + "QCheckBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QCheckBox.checkState": (), + "QCheckBox.checkStateSet": (), + "QCheckBox.event": ('PySide2.QtCore.QEvent',), + "QCheckBox.hitButton": ('PySide2.QtCore.QPoint',), + "QCheckBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QCheckBox.isTristate": (), + "QCheckBox.minimumSizeHint": (), + "QCheckBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QCheckBox.nextCheckState": (), + "QCheckBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCheckBox.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QCheckBox.setTristate": ('bool',), + "QCheckBox.sizeHint": (), + + # class PySide2.QtWidgets.QColorDialog: + "QColorDialog.__init__": [('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QColorDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QColorDialog.currentColor": (), + "QColorDialog.customColor": ('int',), + "QColorDialog.customCount": (), + "QColorDialog.done": ('int',), + "QColorDialog.getColor": ('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget', 'str', 'ColorDialogOptions'), + "QColorDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QColorDialog.options": (), + "QColorDialog.selectedColor": (), + "QColorDialog.setCurrentColor": ('PySide2.QtGui.QColor',), + "QColorDialog.setCustomColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption', 'bool'), + "QColorDialog.setOptions": ('ColorDialogOptions',), + "QColorDialog.setStandardColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setVisible": ('bool',), + "QColorDialog.standardColor": ('int',), + "QColorDialog.testOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption',), + + # class PySide2.QtWidgets.QColormap: + "QColormap.__init__": ('PySide2.QtWidgets.QColormap',), + "QColormap.__copy__": (), + "QColormap.cleanup": (), + "QColormap.colorAt": ('int',), + "QColormap.colormap": (), + "QColormap.depth": (), + "QColormap.initialize": (), + "QColormap.instance": ('int',), + "QColormap.mode": (), + "QColormap.pixel": ('PySide2.QtGui.QColor',), + "QColormap.size": (), + + # class PySide2.QtWidgets.QColumnView: + "QColumnView.__init__": ('PySide2.QtWidgets.QWidget',), + "QColumnView.columnWidths": (), + "QColumnView.createColumn": ('PySide2.QtCore.QModelIndex',), + "QColumnView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QColumnView.horizontalOffset": (), + "QColumnView.indexAt": ('PySide2.QtCore.QPoint',), + "QColumnView.initializeColumn": ('PySide2.QtWidgets.QAbstractItemView',), + "QColumnView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QColumnView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QColumnView.previewWidget": (), + "QColumnView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QColumnView.resizeGripsVisible": (), + "QColumnView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QColumnView.scrollContentsBy": ('int', 'int'), + "QColumnView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QColumnView.selectAll": (), + "QColumnView.setColumnWidths": ('list',), + "QColumnView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QColumnView.setPreviewWidget": ('PySide2.QtWidgets.QWidget',), + "QColumnView.setResizeGripsVisible": ('bool',), + "QColumnView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QColumnView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QColumnView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QColumnView.sizeHint": (), + "QColumnView.verticalOffset": (), + "QColumnView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QColumnView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QComboBox: + "QComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QComboBox.addItem": [('PySide2.QtGui.QIcon', 'str', 'Any'), ('str', 'Any')], + "QComboBox.addItems": ('List[str]',), + "QComboBox.autoCompletion": (), + "QComboBox.autoCompletionCaseSensitivity": (), + "QComboBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QComboBox.clear": (), + "QComboBox.clearEditText": (), + "QComboBox.completer": (), + "QComboBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QComboBox.count": (), + "QComboBox.currentData": ('int',), + "QComboBox.currentIndex": (), + "QComboBox.currentText": (), + "QComboBox.duplicatesEnabled": (), + "QComboBox.event": ('PySide2.QtCore.QEvent',), + "QComboBox.findData": ('Any', 'int', 'MatchFlags'), + "QComboBox.findText": ('str', 'MatchFlags'), + "QComboBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.hasFrame": (), + "QComboBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QComboBox.hidePopup": (), + "QComboBox.iconSize": (), + "QComboBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionComboBox',), + "QComboBox.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QComboBox.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QComboBox.insertItem": [('int', 'PySide2.QtGui.QIcon', 'str', 'Any'), ('int', 'str', 'Any')], + "QComboBox.insertItems": ('int', 'List[str]'), + "QComboBox.insertPolicy": (), + "QComboBox.insertSeparator": ('int',), + "QComboBox.isEditable": (), + "QComboBox.itemData": ('int', 'int'), + "QComboBox.itemDelegate": (), + "QComboBox.itemIcon": ('int',), + "QComboBox.itemText": ('int',), + "QComboBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.lineEdit": (), + "QComboBox.maxCount": (), + "QComboBox.maxVisibleItems": (), + "QComboBox.minimumContentsLength": (), + "QComboBox.minimumSizeHint": (), + "QComboBox.model": (), + "QComboBox.modelColumn": (), + "QComboBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QComboBox.removeItem": ('int',), + "QComboBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QComboBox.rootModelIndex": (), + "QComboBox.setAutoCompletion": ('bool',), + "QComboBox.setAutoCompletionCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QComboBox.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QComboBox.setCurrentIndex": ('int',), + "QComboBox.setCurrentText": ('str',), + "QComboBox.setDuplicatesEnabled": ('bool',), + "QComboBox.setEditText": ('str',), + "QComboBox.setEditable": ('bool',), + "QComboBox.setFrame": ('bool',), + "QComboBox.setIconSize": ('PySide2.QtCore.QSize',), + "QComboBox.setInsertPolicy": ('PySide2.QtWidgets.QComboBox.InsertPolicy',), + "QComboBox.setItemData": ('int', 'Any', 'int'), + "QComboBox.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QComboBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QComboBox.setItemText": ('int', 'str'), + "QComboBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QComboBox.setMaxCount": ('int',), + "QComboBox.setMaxVisibleItems": ('int',), + "QComboBox.setMinimumContentsLength": ('int',), + "QComboBox.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QComboBox.setModelColumn": ('int',), + "QComboBox.setRootModelIndex": ('PySide2.QtCore.QModelIndex',), + "QComboBox.setSizeAdjustPolicy": ('PySide2.QtWidgets.QComboBox.SizeAdjustPolicy',), + "QComboBox.setValidator": ('PySide2.QtGui.QValidator',), + "QComboBox.setView": ('PySide2.QtWidgets.QAbstractItemView',), + "QComboBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QComboBox.showPopup": (), + "QComboBox.sizeAdjustPolicy": (), + "QComboBox.sizeHint": (), + "QComboBox.validator": (), + "QComboBox.view": (), + "QComboBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QCommandLinkButton: + "QCommandLinkButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget'), ('str', 'str', 'PySide2.QtWidgets.QWidget')], + "QCommandLinkButton.description": (), + "QCommandLinkButton.event": ('PySide2.QtCore.QEvent',), + "QCommandLinkButton.heightForWidth": ('int',), + "QCommandLinkButton.minimumSizeHint": (), + "QCommandLinkButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCommandLinkButton.setDescription": ('str',), + "QCommandLinkButton.sizeHint": (), + + # class PySide2.QtWidgets.QCommonStyle: + "QCommonStyle.__init__": (), + "QCommonStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QCommonStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QCommonStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QCommonStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QCompleter: + "QCompleter.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QCompleter.caseSensitivity": (), + "QCompleter.complete": ('PySide2.QtCore.QRect',), + "QCompleter.completionColumn": (), + "QCompleter.completionCount": (), + "QCompleter.completionMode": (), + "QCompleter.completionModel": (), + "QCompleter.completionPrefix": (), + "QCompleter.completionRole": (), + "QCompleter.currentCompletion": (), + "QCompleter.currentIndex": (), + "QCompleter.currentRow": (), + "QCompleter.event": ('PySide2.QtCore.QEvent',), + "QCompleter.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCompleter.filterMode": (), + "QCompleter.maxVisibleItems": (), + "QCompleter.model": (), + "QCompleter.modelSorting": (), + "QCompleter.pathFromIndex": ('PySide2.QtCore.QModelIndex',), + "QCompleter.popup": (), + "QCompleter.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCompleter.setCompletionColumn": ('int',), + "QCompleter.setCompletionMode": ('PySide2.QtWidgets.QCompleter.CompletionMode',), + "QCompleter.setCompletionPrefix": ('str',), + "QCompleter.setCompletionRole": ('int',), + "QCompleter.setCurrentRow": ('int',), + "QCompleter.setFilterMode": ('MatchFlags',), + "QCompleter.setMaxVisibleItems": ('int',), + "QCompleter.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QCompleter.setModelSorting": ('PySide2.QtWidgets.QCompleter.ModelSorting',), + "QCompleter.setPopup": ('PySide2.QtWidgets.QAbstractItemView',), + "QCompleter.setWidget": ('PySide2.QtWidgets.QWidget',), + "QCompleter.setWrapAround": ('bool',), + "QCompleter.splitPath": ('str',), + "QCompleter.widget": (), + "QCompleter.wrapAround": (), + + # class PySide2.QtWidgets.QDataWidgetMapper: + "QDataWidgetMapper.__init__": ('PySide2.QtCore.QObject',), + "QDataWidgetMapper.addMapping": [('PySide2.QtWidgets.QWidget', 'int'), ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtCore.QByteArray')], + "QDataWidgetMapper.clearMapping": (), + "QDataWidgetMapper.currentIndex": (), + "QDataWidgetMapper.itemDelegate": (), + "QDataWidgetMapper.mappedPropertyName": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedSection": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedWidgetAt": ('int',), + "QDataWidgetMapper.model": (), + "QDataWidgetMapper.orientation": (), + "QDataWidgetMapper.removeMapping": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.revert": (), + "QDataWidgetMapper.rootIndex": (), + "QDataWidgetMapper.setCurrentIndex": ('int',), + "QDataWidgetMapper.setCurrentModelIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QDataWidgetMapper.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QDataWidgetMapper.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDataWidgetMapper.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setSubmitPolicy": ('PySide2.QtWidgets.QDataWidgetMapper.SubmitPolicy',), + "QDataWidgetMapper.submit": (), + "QDataWidgetMapper.submitPolicy": (), + "QDataWidgetMapper.toFirst": (), + "QDataWidgetMapper.toLast": (), + "QDataWidgetMapper.toNext": (), + "QDataWidgetMapper.toPrevious": (), + + # class PySide2.QtWidgets.QDateEdit: + "QDateEdit.__init__": [('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDateTimeEdit: + "QDateTimeEdit.__init__": [('Any', 'type', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDateTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QDateTimeEdit.calendarPopup": (), + "QDateTimeEdit.calendarWidget": (), + "QDateTimeEdit.clear": (), + "QDateTimeEdit.clearMaximumDate": (), + "QDateTimeEdit.clearMaximumDateTime": (), + "QDateTimeEdit.clearMaximumTime": (), + "QDateTimeEdit.clearMinimumDate": (), + "QDateTimeEdit.clearMinimumDateTime": (), + "QDateTimeEdit.clearMinimumTime": (), + "QDateTimeEdit.currentSection": (), + "QDateTimeEdit.currentSectionIndex": (), + "QDateTimeEdit.date": (), + "QDateTimeEdit.dateTime": (), + "QDateTimeEdit.dateTimeFromText": ('str',), + "QDateTimeEdit.displayFormat": (), + "QDateTimeEdit.displayedSections": (), + "QDateTimeEdit.event": ('PySide2.QtCore.QEvent',), + "QDateTimeEdit.fixup": ('str',), + "QDateTimeEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QDateTimeEdit.focusNextPrevChild": ('bool',), + "QDateTimeEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QDateTimeEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDateTimeEdit.maximumDate": (), + "QDateTimeEdit.maximumDateTime": (), + "QDateTimeEdit.maximumTime": (), + "QDateTimeEdit.minimumDate": (), + "QDateTimeEdit.minimumDateTime": (), + "QDateTimeEdit.minimumTime": (), + "QDateTimeEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDateTimeEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDateTimeEdit.sectionAt": ('int',), + "QDateTimeEdit.sectionCount": (), + "QDateTimeEdit.sectionText": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCalendarPopup": ('bool',), + "QDateTimeEdit.setCalendarWidget": ('PySide2.QtWidgets.QCalendarWidget',), + "QDateTimeEdit.setCurrentSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCurrentSectionIndex": ('int',), + "QDateTimeEdit.setDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QDateTimeEdit.setDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setDateTimeRange": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QDateTimeEdit.setDisplayFormat": ('str',), + "QDateTimeEdit.setMaximumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMaximumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMaximumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setMinimumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMinimumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMinimumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setSelectedSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setTimeRange": ('PySide2.QtCore.QTime', 'PySide2.QtCore.QTime'), + "QDateTimeEdit.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTimeEdit.sizeHint": (), + "QDateTimeEdit.stepBy": ('int',), + "QDateTimeEdit.stepEnabled": (), + "QDateTimeEdit.textFromDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.time": (), + "QDateTimeEdit.timeSpec": (), + "QDateTimeEdit.validate": ('str', 'int'), + "QDateTimeEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QDesktopWidget: + "QDesktopWidget.__init__": (), + "QDesktopWidget.availableGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.isVirtualDesktop": (), + "QDesktopWidget.numScreens": (), + "QDesktopWidget.primaryScreen": (), + "QDesktopWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDesktopWidget.screen": ('int',), + "QDesktopWidget.screenCount": (), + "QDesktopWidget.screenGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.screenNumber": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDial: + "QDial.__init__": ('PySide2.QtWidgets.QWidget',), + "QDial.event": ('PySide2.QtCore.QEvent',), + "QDial.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QDial.minimumSizeHint": (), + "QDial.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.notchSize": (), + "QDial.notchTarget": (), + "QDial.notchesVisible": (), + "QDial.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDial.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDial.setNotchTarget": ('float',), + "QDial.setNotchesVisible": ('bool',), + "QDial.setWrapping": ('bool',), + "QDial.sizeHint": (), + "QDial.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QDial.wrapping": (), + + # class PySide2.QtWidgets.QDialog: + "QDialog.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QDialog.accept": (), + "QDialog.adjustPosition": ('PySide2.QtWidgets.QWidget',), + "QDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDialog.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QDialog.done": ('int',), + "QDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QDialog.exec_": (), + "QDialog.extension": (), + "QDialog.isSizeGripEnabled": (), + "QDialog.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDialog.minimumSizeHint": (), + "QDialog.open": (), + "QDialog.orientation": (), + "QDialog.reject": (), + "QDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDialog.result": (), + "QDialog.setExtension": ('PySide2.QtWidgets.QWidget',), + "QDialog.setModal": ('bool',), + "QDialog.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialog.setResult": ('int',), + "QDialog.setSizeGripEnabled": ('bool',), + "QDialog.setVisible": ('bool',), + "QDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QDialog.showExtension": ('bool',), + "QDialog.sizeHint": (), + + # class PySide2.QtWidgets.QDialogButtonBox: + "QDialogButtonBox.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('StandardButtons', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('StandardButtons', 'PySide2.QtWidgets.QWidget')], + "QDialogButtonBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole'), ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), ('str', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole')], + "QDialogButtonBox.button": ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), + "QDialogButtonBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.buttons": (), + "QDialogButtonBox.centerButtons": (), + "QDialogButtonBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.clear": (), + "QDialogButtonBox.event": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.orientation": (), + "QDialogButtonBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.setCenterButtons": ('bool',), + "QDialogButtonBox.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialogButtonBox.setStandardButtons": ('StandardButtons',), + "QDialogButtonBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.standardButtons": (), + + # class PySide2.QtWidgets.QDirModel: + "QDirModel.__init__": [('List[str]', 'Filters', 'SortFlags', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QDirModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QDirModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QDirModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filter": (), + "QDirModel.flags": ('PySide2.QtCore.QModelIndex',), + "QDirModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QDirModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QDirModel.iconProvider": (), + "QDirModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QDirModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.isReadOnly": (), + "QDirModel.lazyChildCount": (), + "QDirModel.mimeData": ('List[int]',), + "QDirModel.mimeTypes": (), + "QDirModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QDirModel.nameFilters": (), + "QDirModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QDirModel.refresh": ('PySide2.QtCore.QModelIndex',), + "QDirModel.remove": ('PySide2.QtCore.QModelIndex',), + "QDirModel.resolveSymlinks": (), + "QDirModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QDirModel.setFilter": ('Filters',), + "QDirModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QDirModel.setLazyChildCount": ('bool',), + "QDirModel.setNameFilters": ('List[str]',), + "QDirModel.setReadOnly": ('bool',), + "QDirModel.setResolveSymlinks": ('bool',), + "QDirModel.setSorting": ('SortFlags',), + "QDirModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QDirModel.sorting": (), + "QDirModel.supportedDropActions": (), + + # class PySide2.QtWidgets.QDockWidget: + "QDockWidget.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QDockWidget.allowedAreas": (), + "QDockWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QDockWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDockWidget.event": ('PySide2.QtCore.QEvent',), + "QDockWidget.features": (), + "QDockWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionDockWidget',), + "QDockWidget.isAreaAllowed": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QDockWidget.isFloating": (), + "QDockWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDockWidget.setAllowedAreas": ('DockWidgetAreas',), + "QDockWidget.setFeatures": ('DockWidgetFeatures',), + "QDockWidget.setFloating": ('bool',), + "QDockWidget.setTitleBarWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.titleBarWidget": (), + "QDockWidget.toggleViewAction": (), + "QDockWidget.widget": (), + + # class PySide2.QtWidgets.QDoubleSpinBox: + "QDoubleSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QDoubleSpinBox.cleanText": (), + "QDoubleSpinBox.decimals": (), + "QDoubleSpinBox.fixup": ('str',), + "QDoubleSpinBox.maximum": (), + "QDoubleSpinBox.minimum": (), + "QDoubleSpinBox.prefix": (), + "QDoubleSpinBox.setDecimals": ('int',), + "QDoubleSpinBox.setMaximum": ('float',), + "QDoubleSpinBox.setMinimum": ('float',), + "QDoubleSpinBox.setPrefix": ('str',), + "QDoubleSpinBox.setRange": ('float', 'float'), + "QDoubleSpinBox.setSingleStep": ('float',), + "QDoubleSpinBox.setSuffix": ('str',), + "QDoubleSpinBox.setValue": ('float',), + "QDoubleSpinBox.singleStep": (), + "QDoubleSpinBox.suffix": (), + "QDoubleSpinBox.textFromValue": ('float',), + "QDoubleSpinBox.validate": ('str', 'int'), + "QDoubleSpinBox.value": (), + "QDoubleSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QErrorMessage: + "QErrorMessage.__init__": ('PySide2.QtWidgets.QWidget',), + "QErrorMessage.changeEvent": ('PySide2.QtCore.QEvent',), + "QErrorMessage.done": ('int',), + "QErrorMessage.qtHandler": (), + "QErrorMessage.showMessage": [('str',), ('str', 'str')], + + # class PySide2.QtWidgets.QFileDialog: + "QFileDialog.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str')], + "QFileDialog.accept": (), + "QFileDialog.acceptMode": (), + "QFileDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFileDialog.confirmOverwrite": (), + "QFileDialog.defaultSuffix": (), + "QFileDialog.directory": (), + "QFileDialog.directoryUrl": (), + "QFileDialog.done": ('int',), + "QFileDialog.fileMode": (), + "QFileDialog.filter": (), + "QFileDialog.getExistingDirectory": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'Options'), + "QFileDialog.getExistingDirectoryUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'Options', 'List[str]'), + "QFileDialog.getOpenFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getOpenFileNames": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getOpenFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'List[str]'), + "QFileDialog.getOpenFileUrls": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'List[str]'), + "QFileDialog.getSaveFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getSaveFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'List[str]'), + "QFileDialog.history": (), + "QFileDialog.iconProvider": (), + "QFileDialog.isNameFilterDetailsVisible": (), + "QFileDialog.isReadOnly": (), + "QFileDialog.itemDelegate": (), + "QFileDialog.labelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel',), + "QFileDialog.mimeTypeFilters": (), + "QFileDialog.nameFilters": (), + "QFileDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFileDialog.options": (), + "QFileDialog.proxyModel": (), + "QFileDialog.resolveSymlinks": (), + "QFileDialog.restoreState": ('PySide2.QtCore.QByteArray',), + "QFileDialog.saveState": (), + "QFileDialog.selectFile": ('str',), + "QFileDialog.selectMimeTypeFilter": ('str',), + "QFileDialog.selectNameFilter": ('str',), + "QFileDialog.selectUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.selectedFiles": (), + "QFileDialog.selectedMimeTypeFilter": (), + "QFileDialog.selectedNameFilter": (), + "QFileDialog.selectedUrls": (), + "QFileDialog.setAcceptMode": ('PySide2.QtWidgets.QFileDialog.AcceptMode',), + "QFileDialog.setConfirmOverwrite": ('bool',), + "QFileDialog.setDefaultSuffix": ('str',), + "QFileDialog.setDirectory": [('PySide2.QtCore.QDir',), ('str',)], + "QFileDialog.setDirectoryUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.setFileMode": ('PySide2.QtWidgets.QFileDialog.FileMode',), + "QFileDialog.setFilter": ('Filters',), + "QFileDialog.setHistory": ('List[str]',), + "QFileDialog.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileDialog.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QFileDialog.setLabelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel', 'str'), + "QFileDialog.setMimeTypeFilters": ('List[str]',), + "QFileDialog.setNameFilter": ('str',), + "QFileDialog.setNameFilterDetailsVisible": ('bool',), + "QFileDialog.setNameFilters": ('List[str]',), + "QFileDialog.setOption": ('PySide2.QtWidgets.QFileDialog.Option', 'bool'), + "QFileDialog.setOptions": ('Options',), + "QFileDialog.setProxyModel": ('PySide2.QtCore.QAbstractProxyModel',), + "QFileDialog.setReadOnly": ('bool',), + "QFileDialog.setResolveSymlinks": ('bool',), + "QFileDialog.setSidebarUrls": ('list',), + "QFileDialog.setSupportedSchemes": ('List[str]',), + "QFileDialog.setViewMode": ('PySide2.QtWidgets.QFileDialog.ViewMode',), + "QFileDialog.setVisible": ('bool',), + "QFileDialog.sidebarUrls": (), + "QFileDialog.supportedSchemes": (), + "QFileDialog.testOption": ('PySide2.QtWidgets.QFileDialog.Option',), + "QFileDialog.viewMode": (), + + # class PySide2.QtWidgets.QFileIconProvider: + "QFileIconProvider.__init__": (), + "QFileIconProvider.icon": [('PySide2.QtCore.QFileInfo',), ('PySide2.QtWidgets.QFileIconProvider.IconType',)], + "QFileIconProvider.options": (), + "QFileIconProvider.setOptions": ('Options',), + "QFileIconProvider.type": ('PySide2.QtCore.QFileInfo',), + + # class PySide2.QtWidgets.QFileSystemModel: + "QFileSystemModel.__init__": ('PySide2.QtCore.QObject',), + "QFileSystemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QFileSystemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.event": ('PySide2.QtCore.QEvent',), + "QFileSystemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filter": (), + "QFileSystemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QFileSystemModel.iconProvider": (), + "QFileSystemModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QFileSystemModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.isReadOnly": (), + "QFileSystemModel.lastModified": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.mimeData": ('List[int]',), + "QFileSystemModel.mimeTypes": (), + "QFileSystemModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QFileSystemModel.myComputer": ('int',), + "QFileSystemModel.nameFilterDisables": (), + "QFileSystemModel.nameFilters": (), + "QFileSystemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QFileSystemModel.remove": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.resolveSymlinks": (), + "QFileSystemModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.rootDirectory": (), + "QFileSystemModel.rootPath": (), + "QFileSystemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QFileSystemModel.setFilter": ('Filters',), + "QFileSystemModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileSystemModel.setNameFilterDisables": ('bool',), + "QFileSystemModel.setNameFilters": ('List[str]',), + "QFileSystemModel.setReadOnly": ('bool',), + "QFileSystemModel.setResolveSymlinks": ('bool',), + "QFileSystemModel.setRootPath": ('str',), + "QFileSystemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.size": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QFileSystemModel.supportedDropActions": (), + "QFileSystemModel.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QFileSystemModel.type": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtWidgets.QFocusFrame: + "QFocusFrame.__init__": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.event": ('PySide2.QtCore.QEvent',), + "QFocusFrame.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFocusFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QFocusFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFocusFrame.setWidget": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.widget": (), + + # class PySide2.QtWidgets.QFontComboBox: + "QFontComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QFontComboBox.currentFont": (), + "QFontComboBox.event": ('PySide2.QtCore.QEvent',), + "QFontComboBox.fontFilters": (), + "QFontComboBox.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontComboBox.setFontFilters": ('FontFilters',), + "QFontComboBox.setWritingSystem": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontComboBox.sizeHint": (), + "QFontComboBox.writingSystem": (), + + # class PySide2.QtWidgets.QFontDialog: + "QFontDialog.__init__": [('PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QFontDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFontDialog.currentFont": (), + "QFontDialog.done": ('int',), + "QFontDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFontDialog.getFont": [('bool', 'PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget', 'str', 'FontDialogOptions'), ('bool', 'PySide2.QtWidgets.QWidget')], + "QFontDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFontDialog.options": (), + "QFontDialog.selectedFont": (), + "QFontDialog.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontDialog.setOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption', 'bool'), + "QFontDialog.setOptions": ('FontDialogOptions',), + "QFontDialog.setVisible": ('bool',), + "QFontDialog.testOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption',), + + # class PySide2.QtWidgets.QFormLayout: + "QFormLayout.__init__": ('PySide2.QtWidgets.QWidget',), + "QFormLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QFormLayout.addRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QLayout'), ('str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.count": (), + "QFormLayout.expandingDirections": (), + "QFormLayout.fieldGrowthPolicy": (), + "QFormLayout.formAlignment": (), + "QFormLayout.getItemPosition": ('int', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getLayoutPosition": ('PySide2.QtWidgets.QLayout', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getWidgetPosition": ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.hasHeightForWidth": (), + "QFormLayout.heightForWidth": ('int',), + "QFormLayout.horizontalSpacing": (), + "QFormLayout.insertRow": [('int', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('int', 'str', 'PySide2.QtWidgets.QLayout'), ('int', 'str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.invalidate": (), + "QFormLayout.itemAt": [('int',), ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole')], + "QFormLayout.labelAlignment": (), + "QFormLayout.labelForField": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QFormLayout.minimumSize": (), + "QFormLayout.removeRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QFormLayout.rowCount": (), + "QFormLayout.rowWrapPolicy": (), + "QFormLayout.setFieldGrowthPolicy": ('PySide2.QtWidgets.QFormLayout.FieldGrowthPolicy',), + "QFormLayout.setFormAlignment": ('Alignment',), + "QFormLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QFormLayout.setHorizontalSpacing": ('int',), + "QFormLayout.setItem": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayoutItem'), + "QFormLayout.setLabelAlignment": ('Alignment',), + "QFormLayout.setLayout": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayout'), + "QFormLayout.setRowWrapPolicy": ('PySide2.QtWidgets.QFormLayout.RowWrapPolicy',), + "QFormLayout.setSpacing": ('int',), + "QFormLayout.setVerticalSpacing": ('int',), + "QFormLayout.setWidget": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QWidget'), + "QFormLayout.sizeHint": (), + "QFormLayout.spacing": (), + "QFormLayout.takeAt": ('int',), + "QFormLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QFrame: + "QFrame.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QFrame.changeEvent": ('PySide2.QtCore.QEvent',), + "QFrame.drawFrame": ('PySide2.QtGui.QPainter',), + "QFrame.event": ('PySide2.QtCore.QEvent',), + "QFrame.frameRect": (), + "QFrame.frameShadow": (), + "QFrame.frameShape": (), + "QFrame.frameStyle": (), + "QFrame.frameWidth": (), + "QFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QFrame.lineWidth": (), + "QFrame.midLineWidth": (), + "QFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFrame.setFrameRect": ('PySide2.QtCore.QRect',), + "QFrame.setFrameShadow": ('PySide2.QtWidgets.QFrame.Shadow',), + "QFrame.setFrameShape": ('PySide2.QtWidgets.QFrame.Shape',), + "QFrame.setFrameStyle": ('int',), + "QFrame.setLineWidth": ('int',), + "QFrame.setMidLineWidth": ('int',), + "QFrame.sizeHint": (), + + # class PySide2.QtWidgets.QGesture: + "QGesture.__init__": ('PySide2.QtCore.QObject',), + "QGesture.gestureCancelPolicy": (), + "QGesture.gestureType": (), + "QGesture.hasHotSpot": (), + "QGesture.hotSpot": (), + "QGesture.setGestureCancelPolicy": ('PySide2.QtWidgets.QGesture.GestureCancelPolicy',), + "QGesture.setHotSpot": ('PySide2.QtCore.QPointF',), + "QGesture.state": (), + "QGesture.unsetHotSpot": (), + + # class PySide2.QtWidgets.QGestureEvent: + "QGestureEvent.__init__": ('list',), + "QGestureEvent.accept": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.activeGestures": (), + "QGestureEvent.canceledGestures": (), + "QGestureEvent.gesture": ('PySide2.QtCore.Qt.GestureType',), + "QGestureEvent.gestures": (), + "QGestureEvent.ignore": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.isAccepted": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.mapToGraphicsScene": ('PySide2.QtCore.QPointF',), + "QGestureEvent.setAccepted": [('PySide2.QtCore.Qt.GestureType', 'bool'), ('PySide2.QtWidgets.QGesture', 'bool'), ('bool',)], + "QGestureEvent.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGestureEvent.widget": (), + + # class PySide2.QtWidgets.QGestureRecognizer: + "QGestureRecognizer.__init__": (), + "QGestureRecognizer.create": ('PySide2.QtCore.QObject',), + "QGestureRecognizer.recognize": ('PySide2.QtWidgets.QGesture', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGestureRecognizer.registerRecognizer": ('PySide2.QtWidgets.QGestureRecognizer',), + "QGestureRecognizer.reset": ('PySide2.QtWidgets.QGesture',), + "QGestureRecognizer.unregisterRecognizer": ('PySide2.QtCore.Qt.GestureType',), + + # class PySide2.QtWidgets.QGraphicsAnchor: + "QGraphicsAnchor.setSizePolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QGraphicsAnchor.setSpacing": ('float',), + "QGraphicsAnchor.sizePolicy": (), + "QGraphicsAnchor.spacing": (), + "QGraphicsAnchor.unsetSpacing": (), + + # class PySide2.QtWidgets.QGraphicsAnchorLayout: + "QGraphicsAnchorLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsAnchorLayout.addAnchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.addAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'Orientations'), + "QGraphicsAnchorLayout.addCornerAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner'), + "QGraphicsAnchorLayout.anchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.count": (), + "QGraphicsAnchorLayout.horizontalSpacing": (), + "QGraphicsAnchorLayout.invalidate": (), + "QGraphicsAnchorLayout.itemAt": ('int',), + "QGraphicsAnchorLayout.removeAt": ('int',), + "QGraphicsAnchorLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsAnchorLayout.setHorizontalSpacing": ('float',), + "QGraphicsAnchorLayout.setSpacing": ('float',), + "QGraphicsAnchorLayout.setVerticalSpacing": ('float',), + "QGraphicsAnchorLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsAnchorLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsBlurEffect: + "QGraphicsBlurEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsBlurEffect.blurHints": (), + "QGraphicsBlurEffect.blurRadius": (), + "QGraphicsBlurEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsBlurEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsBlurEffect.setBlurHints": ('BlurHints',), + "QGraphicsBlurEffect.setBlurRadius": ('float',), + + # class PySide2.QtWidgets.QGraphicsColorizeEffect: + "QGraphicsColorizeEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsColorizeEffect.color": (), + "QGraphicsColorizeEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsColorizeEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsColorizeEffect.setStrength": ('float',), + "QGraphicsColorizeEffect.strength": (), + + # class PySide2.QtWidgets.QGraphicsDropShadowEffect: + "QGraphicsDropShadowEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsDropShadowEffect.blurRadius": (), + "QGraphicsDropShadowEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsDropShadowEffect.color": (), + "QGraphicsDropShadowEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsDropShadowEffect.offset": (), + "QGraphicsDropShadowEffect.setBlurRadius": ('float',), + "QGraphicsDropShadowEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsDropShadowEffect.setOffset": [('PySide2.QtCore.QPointF',), ('float',), ('float', 'float')], + "QGraphicsDropShadowEffect.setXOffset": ('float',), + "QGraphicsDropShadowEffect.setYOffset": ('float',), + "QGraphicsDropShadowEffect.xOffset": (), + "QGraphicsDropShadowEffect.yOffset": (), + + # class PySide2.QtWidgets.QGraphicsEffect: + "QGraphicsEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsEffect.boundingRect": (), + "QGraphicsEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.drawSource": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.isEnabled": (), + "QGraphicsEffect.setEnabled": ('bool',), + "QGraphicsEffect.sourceBoundingRect": ('PySide2.QtCore.Qt.CoordinateSystem',), + "QGraphicsEffect.sourceChanged": ('ChangeFlags',), + "QGraphicsEffect.sourceIsPixmap": (), + "QGraphicsEffect.sourcePixmap": ('PySide2.QtCore.Qt.CoordinateSystem', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QGraphicsEffect.PixmapPadMode'), + "QGraphicsEffect.update": (), + "QGraphicsEffect.updateBoundingRect": (), + + # class PySide2.QtWidgets.QGraphicsEllipseItem: + "QGraphicsEllipseItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsEllipseItem.boundingRect": (), + "QGraphicsEllipseItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsEllipseItem.extension": ('Any',), + "QGraphicsEllipseItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsEllipseItem.opaqueArea": (), + "QGraphicsEllipseItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsEllipseItem.rect": (), + "QGraphicsEllipseItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsEllipseItem.setSpanAngle": ('int',), + "QGraphicsEllipseItem.setStartAngle": ('int',), + "QGraphicsEllipseItem.shape": (), + "QGraphicsEllipseItem.spanAngle": (), + "QGraphicsEllipseItem.startAngle": (), + "QGraphicsEllipseItem.type": (), + + # class PySide2.QtWidgets.QGraphicsGridLayout: + "QGraphicsGridLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.addItem": [('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'int', 'int', 'Alignment')], + "QGraphicsGridLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.columnAlignment": ('int',), + "QGraphicsGridLayout.columnCount": (), + "QGraphicsGridLayout.columnMaximumWidth": ('int',), + "QGraphicsGridLayout.columnMinimumWidth": ('int',), + "QGraphicsGridLayout.columnPreferredWidth": ('int',), + "QGraphicsGridLayout.columnSpacing": ('int',), + "QGraphicsGridLayout.columnStretchFactor": ('int',), + "QGraphicsGridLayout.count": (), + "QGraphicsGridLayout.horizontalSpacing": (), + "QGraphicsGridLayout.invalidate": (), + "QGraphicsGridLayout.itemAt": [('int',), ('int', 'int')], + "QGraphicsGridLayout.removeAt": ('int',), + "QGraphicsGridLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.rowAlignment": ('int',), + "QGraphicsGridLayout.rowCount": (), + "QGraphicsGridLayout.rowMaximumHeight": ('int',), + "QGraphicsGridLayout.rowMinimumHeight": ('int',), + "QGraphicsGridLayout.rowPreferredHeight": ('int',), + "QGraphicsGridLayout.rowSpacing": ('int',), + "QGraphicsGridLayout.rowStretchFactor": ('int',), + "QGraphicsGridLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'Alignment'), + "QGraphicsGridLayout.setColumnAlignment": ('int', 'Alignment'), + "QGraphicsGridLayout.setColumnFixedWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMaximumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMinimumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnPreferredWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnSpacing": ('int', 'float'), + "QGraphicsGridLayout.setColumnStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsGridLayout.setHorizontalSpacing": ('float',), + "QGraphicsGridLayout.setRowAlignment": ('int', 'Alignment'), + "QGraphicsGridLayout.setRowFixedHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMaximumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMinimumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowPreferredHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowSpacing": ('int', 'float'), + "QGraphicsGridLayout.setRowStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setSpacing": ('float',), + "QGraphicsGridLayout.setVerticalSpacing": ('float',), + "QGraphicsGridLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsItem: + "QGraphicsItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.acceptDrops": (), + "QGraphicsItem.acceptHoverEvents": (), + "QGraphicsItem.acceptTouchEvents": (), + "QGraphicsItem.acceptedMouseButtons": (), + "QGraphicsItem.addToIndex": (), + "QGraphicsItem.advance": ('int',), + "QGraphicsItem.boundingRect": (), + "QGraphicsItem.boundingRegion": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.boundingRegionGranularity": (), + "QGraphicsItem.cacheMode": (), + "QGraphicsItem.childItems": (), + "QGraphicsItem.childrenBoundingRect": (), + "QGraphicsItem.clearFocus": (), + "QGraphicsItem.clipPath": (), + "QGraphicsItem.collidesWithItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidesWithPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidingItems": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsItem.commonAncestorItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsItem.cursor": (), + "QGraphicsItem.data": ('int',), + "QGraphicsItem.deviceTransform": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.effectiveOpacity": (), + "QGraphicsItem.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsItem.extension": ('Any',), + "QGraphicsItem.filtersChildEvents": (), + "QGraphicsItem.flags": (), + "QGraphicsItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusItem": (), + "QGraphicsItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusProxy": (), + "QGraphicsItem.focusScopeItem": (), + "QGraphicsItem.grabKeyboard": (), + "QGraphicsItem.grabMouse": (), + "QGraphicsItem.graphicsEffect": (), + "QGraphicsItem.group": (), + "QGraphicsItem.handlesChildEvents": (), + "QGraphicsItem.hasCursor": (), + "QGraphicsItem.hasFocus": (), + "QGraphicsItem.hide": (), + "QGraphicsItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsItem.inputMethodHints": (), + "QGraphicsItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsItem.installSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isActive": (), + "QGraphicsItem.isAncestorOf": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isBlockedByModalPanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isClipped": (), + "QGraphicsItem.isEnabled": (), + "QGraphicsItem.isObscured": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isPanel": (), + "QGraphicsItem.isSelected": (), + "QGraphicsItem.isUnderMouse": (), + "QGraphicsItem.isVisible": (), + "QGraphicsItem.isVisibleTo": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isWidget": (), + "QGraphicsItem.isWindow": (), + "QGraphicsItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsItem.itemTransform": ('PySide2.QtWidgets.QGraphicsItem', 'bool'), + "QGraphicsItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.mapFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapToParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.matrix": (), + "QGraphicsItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.moveBy": ('float', 'float'), + "QGraphicsItem.opacity": (), + "QGraphicsItem.opaqueArea": (), + "QGraphicsItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItem.panel": (), + "QGraphicsItem.panelModality": (), + "QGraphicsItem.parentItem": (), + "QGraphicsItem.parentObject": (), + "QGraphicsItem.parentWidget": (), + "QGraphicsItem.pos": (), + "QGraphicsItem.prepareGeometryChange": (), + "QGraphicsItem.removeFromIndex": (), + "QGraphicsItem.removeSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.resetMatrix": (), + "QGraphicsItem.resetTransform": (), + "QGraphicsItem.rotation": (), + "QGraphicsItem.scale": (), + "QGraphicsItem.scene": (), + "QGraphicsItem.sceneBoundingRect": (), + "QGraphicsItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsItem.sceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsItem.sceneMatrix": (), + "QGraphicsItem.scenePos": (), + "QGraphicsItem.sceneTransform": (), + "QGraphicsItem.scroll": ('float', 'float', 'PySide2.QtCore.QRectF'), + "QGraphicsItem.setAcceptDrops": ('bool',), + "QGraphicsItem.setAcceptHoverEvents": ('bool',), + "QGraphicsItem.setAcceptTouchEvents": ('bool',), + "QGraphicsItem.setAcceptedMouseButtons": ('MouseButtons',), + "QGraphicsItem.setActive": ('bool',), + "QGraphicsItem.setBoundingRegionGranularity": ('float',), + "QGraphicsItem.setCacheMode": ('PySide2.QtWidgets.QGraphicsItem.CacheMode', 'PySide2.QtCore.QSize'), + "QGraphicsItem.setCursor": ('PySide2.QtGui.QCursor',), + "QGraphicsItem.setData": ('int', 'Any'), + "QGraphicsItem.setEnabled": ('bool',), + "QGraphicsItem.setFiltersChildEvents": ('bool',), + "QGraphicsItem.setFlag": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemFlag', 'bool'), + "QGraphicsItem.setFlags": ('GraphicsItemFlags',), + "QGraphicsItem.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsItem.setFocusProxy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QGraphicsItem.setGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsItem.setHandlesChildEvents": ('bool',), + "QGraphicsItem.setInputMethodHints": ('InputMethodHints',), + "QGraphicsItem.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsItem.setOpacity": ('float',), + "QGraphicsItem.setPanelModality": ('PySide2.QtWidgets.QGraphicsItem.PanelModality',), + "QGraphicsItem.setParentItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setPos": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setRotation": ('float',), + "QGraphicsItem.setScale": ('float',), + "QGraphicsItem.setSelected": ('bool',), + "QGraphicsItem.setToolTip": ('str',), + "QGraphicsItem.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsItem.setTransformOriginPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setTransformations": ('list',), + "QGraphicsItem.setVisible": ('bool',), + "QGraphicsItem.setX": ('float',), + "QGraphicsItem.setY": ('float',), + "QGraphicsItem.setZValue": ('float',), + "QGraphicsItem.shape": (), + "QGraphicsItem.show": (), + "QGraphicsItem.stackBefore": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.toGraphicsObject": (), + "QGraphicsItem.toolTip": (), + "QGraphicsItem.topLevelItem": (), + "QGraphicsItem.topLevelWidget": (), + "QGraphicsItem.transform": (), + "QGraphicsItem.transformOriginPoint": (), + "QGraphicsItem.transformations": (), + "QGraphicsItem.type": (), + "QGraphicsItem.ungrabKeyboard": (), + "QGraphicsItem.ungrabMouse": (), + "QGraphicsItem.unsetCursor": (), + "QGraphicsItem.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.updateMicroFocus": (), + "QGraphicsItem.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsItem.window": (), + "QGraphicsItem.x": (), + "QGraphicsItem.y": (), + "QGraphicsItem.zValue": (), + + # class PySide2.QtWidgets.QGraphicsItemAnimation: + "QGraphicsItemAnimation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsItemAnimation.afterAnimationStep": ('float',), + "QGraphicsItemAnimation.beforeAnimationStep": ('float',), + "QGraphicsItemAnimation.clear": (), + "QGraphicsItemAnimation.horizontalScaleAt": ('float',), + "QGraphicsItemAnimation.horizontalShearAt": ('float',), + "QGraphicsItemAnimation.item": (), + "QGraphicsItemAnimation.matrixAt": ('float',), + "QGraphicsItemAnimation.posAt": ('float',), + "QGraphicsItemAnimation.posList": (), + "QGraphicsItemAnimation.reset": (), + "QGraphicsItemAnimation.rotationAt": ('float',), + "QGraphicsItemAnimation.rotationList": (), + "QGraphicsItemAnimation.scaleList": (), + "QGraphicsItemAnimation.setItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemAnimation.setPosAt": ('float', 'PySide2.QtCore.QPointF'), + "QGraphicsItemAnimation.setRotationAt": ('float', 'float'), + "QGraphicsItemAnimation.setScaleAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setShearAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setStep": ('float',), + "QGraphicsItemAnimation.setTimeLine": ('PySide2.QtCore.QTimeLine',), + "QGraphicsItemAnimation.setTranslationAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.shearList": (), + "QGraphicsItemAnimation.timeLine": (), + "QGraphicsItemAnimation.translationList": (), + "QGraphicsItemAnimation.verticalScaleAt": ('float',), + "QGraphicsItemAnimation.verticalShearAt": ('float',), + "QGraphicsItemAnimation.xTranslationAt": ('float',), + "QGraphicsItemAnimation.yTranslationAt": ('float',), + + # class PySide2.QtWidgets.QGraphicsItemGroup: + "QGraphicsItemGroup.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.addToGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.boundingRect": (), + "QGraphicsItemGroup.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.opaqueArea": (), + "QGraphicsItemGroup.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItemGroup.removeFromGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.type": (), + + # class PySide2.QtWidgets.QGraphicsLayout: + "QGraphicsLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.activate": (), + "QGraphicsLayout.addChildLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.count": (), + "QGraphicsLayout.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.instantInvalidatePropagation": (), + "QGraphicsLayout.invalidate": (), + "QGraphicsLayout.isActivated": (), + "QGraphicsLayout.itemAt": ('int',), + "QGraphicsLayout.removeAt": ('int',), + "QGraphicsLayout.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.setInstantInvalidatePropagation": ('bool',), + "QGraphicsLayout.updateGeometry": (), + "QGraphicsLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QGraphicsLayoutItem: + "QGraphicsLayoutItem.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'bool'), + "QGraphicsLayoutItem.contentsRect": (), + "QGraphicsLayoutItem.effectiveSizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.geometry": (), + "QGraphicsLayoutItem.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayoutItem.graphicsItem": (), + "QGraphicsLayoutItem.isLayout": (), + "QGraphicsLayoutItem.maximumHeight": (), + "QGraphicsLayoutItem.maximumSize": (), + "QGraphicsLayoutItem.maximumWidth": (), + "QGraphicsLayoutItem.minimumHeight": (), + "QGraphicsLayoutItem.minimumSize": (), + "QGraphicsLayoutItem.minimumWidth": (), + "QGraphicsLayoutItem.ownedByLayout": (), + "QGraphicsLayoutItem.parentLayoutItem": (), + "QGraphicsLayoutItem.preferredHeight": (), + "QGraphicsLayoutItem.preferredSize": (), + "QGraphicsLayoutItem.preferredWidth": (), + "QGraphicsLayoutItem.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLayoutItem.setGraphicsItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLayoutItem.setMaximumHeight": ('float',), + "QGraphicsLayoutItem.setMaximumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMaximumWidth": ('float',), + "QGraphicsLayoutItem.setMinimumHeight": ('float',), + "QGraphicsLayoutItem.setMinimumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMinimumWidth": ('float',), + "QGraphicsLayoutItem.setOwnedByLayout": ('bool',), + "QGraphicsLayoutItem.setParentLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayoutItem.setPreferredHeight": ('float',), + "QGraphicsLayoutItem.setPreferredSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setPreferredWidth": ('float',), + "QGraphicsLayoutItem.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QGraphicsLayoutItem.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.sizePolicy": (), + "QGraphicsLayoutItem.updateGeometry": (), + + # class PySide2.QtWidgets.QGraphicsLineItem: + "QGraphicsLineItem.__init__": [('PySide2.QtCore.QLineF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsLineItem.boundingRect": (), + "QGraphicsLineItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsLineItem.extension": ('Any',), + "QGraphicsLineItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLineItem.line": (), + "QGraphicsLineItem.opaqueArea": (), + "QGraphicsLineItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsLineItem.pen": (), + "QGraphicsLineItem.setLine": [('PySide2.QtCore.QLineF',), ('float', 'float', 'float', 'float')], + "QGraphicsLineItem.setPen": ('PySide2.QtGui.QPen',), + "QGraphicsLineItem.shape": (), + "QGraphicsLineItem.type": (), + + # class PySide2.QtWidgets.QGraphicsLinearLayout: + "QGraphicsLinearLayout.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QGraphicsLayoutItem'), ('PySide2.QtWidgets.QGraphicsLayoutItem',)], + "QGraphicsLinearLayout.addItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.addStretch": ('int',), + "QGraphicsLinearLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.count": (), + "QGraphicsLinearLayout.dump": ('int',), + "QGraphicsLinearLayout.insertItem": ('int', 'PySide2.QtWidgets.QGraphicsLayoutItem'), + "QGraphicsLinearLayout.insertStretch": ('int', 'int'), + "QGraphicsLinearLayout.invalidate": (), + "QGraphicsLinearLayout.itemAt": ('int',), + "QGraphicsLinearLayout.itemSpacing": ('int',), + "QGraphicsLinearLayout.orientation": (), + "QGraphicsLinearLayout.removeAt": ('int',), + "QGraphicsLinearLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'Alignment'), + "QGraphicsLinearLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLinearLayout.setItemSpacing": ('int', 'float'), + "QGraphicsLinearLayout.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsLinearLayout.setSpacing": ('float',), + "QGraphicsLinearLayout.setStretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int'), + "QGraphicsLinearLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLinearLayout.spacing": (), + "QGraphicsLinearLayout.stretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + + # class PySide2.QtWidgets.QGraphicsObject: + "QGraphicsObject.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsObject.event": ('PySide2.QtCore.QEvent',), + "QGraphicsObject.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'GestureFlags'), + "QGraphicsObject.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QGraphicsObject.updateMicroFocus": (), + + # class PySide2.QtWidgets.QGraphicsOpacityEffect: + "QGraphicsOpacityEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsOpacityEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsOpacityEffect.opacity": (), + "QGraphicsOpacityEffect.opacityMask": (), + "QGraphicsOpacityEffect.setOpacity": ('float',), + "QGraphicsOpacityEffect.setOpacityMask": ('PySide2.QtGui.QBrush',), + + # class PySide2.QtWidgets.QGraphicsPathItem: + "QGraphicsPathItem.__init__": [('PySide2.QtGui.QPainterPath', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPathItem.boundingRect": (), + "QGraphicsPathItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPathItem.extension": ('Any',), + "QGraphicsPathItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPathItem.opaqueArea": (), + "QGraphicsPathItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPathItem.path": (), + "QGraphicsPathItem.setPath": ('PySide2.QtGui.QPainterPath',), + "QGraphicsPathItem.shape": (), + "QGraphicsPathItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPixmapItem: + "QGraphicsPixmapItem.__init__": [('PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPixmapItem.boundingRect": (), + "QGraphicsPixmapItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPixmapItem.extension": ('Any',), + "QGraphicsPixmapItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPixmapItem.offset": (), + "QGraphicsPixmapItem.opaqueArea": (), + "QGraphicsPixmapItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPixmapItem.pixmap": (), + "QGraphicsPixmapItem.setOffset": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsPixmapItem.setPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsPixmapItem.setShapeMode": ('PySide2.QtWidgets.QGraphicsPixmapItem.ShapeMode',), + "QGraphicsPixmapItem.setTransformationMode": ('PySide2.QtCore.Qt.TransformationMode',), + "QGraphicsPixmapItem.shape": (), + "QGraphicsPixmapItem.shapeMode": (), + "QGraphicsPixmapItem.transformationMode": (), + "QGraphicsPixmapItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPolygonItem: + "QGraphicsPolygonItem.__init__": [('PySide2.QtGui.QPolygonF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPolygonItem.boundingRect": (), + "QGraphicsPolygonItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPolygonItem.extension": ('Any',), + "QGraphicsPolygonItem.fillRule": (), + "QGraphicsPolygonItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPolygonItem.opaqueArea": (), + "QGraphicsPolygonItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPolygonItem.polygon": (), + "QGraphicsPolygonItem.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QGraphicsPolygonItem.setPolygon": ('PySide2.QtGui.QPolygonF',), + "QGraphicsPolygonItem.shape": (), + "QGraphicsPolygonItem.type": (), + + # class PySide2.QtWidgets.QGraphicsProxyWidget: + "QGraphicsProxyWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'WindowFlags'), + "QGraphicsProxyWidget.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsProxyWidget.createProxyForChildWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsProxyWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.focusNextPrevChild": ('bool',), + "QGraphicsProxyWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsProxyWidget.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsProxyWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsProxyWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsProxyWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.newProxyWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsProxyWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsProxyWidget.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsProxyWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsProxyWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsProxyWidget.subWidgetRect": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.type": (), + "QGraphicsProxyWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsProxyWidget.widget": (), + + # class PySide2.QtWidgets.QGraphicsRectItem: + "QGraphicsRectItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsRectItem.boundingRect": (), + "QGraphicsRectItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsRectItem.extension": ('Any',), + "QGraphicsRectItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsRectItem.opaqueArea": (), + "QGraphicsRectItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsRectItem.rect": (), + "QGraphicsRectItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsRectItem.shape": (), + "QGraphicsRectItem.type": (), + + # class PySide2.QtWidgets.QGraphicsRotation: + "QGraphicsRotation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsRotation.angle": (), + "QGraphicsRotation.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsRotation.axis": (), + "QGraphicsRotation.origin": (), + "QGraphicsRotation.setAngle": ('float',), + "QGraphicsRotation.setAxis": [('PySide2.QtCore.Qt.Axis',), ('PySide2.QtGui.QVector3D',)], + "QGraphicsRotation.setOrigin": ('PySide2.QtGui.QVector3D',), + + # class PySide2.QtWidgets.QGraphicsScale: + "QGraphicsScale.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsScale.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsScale.origin": (), + "QGraphicsScale.setOrigin": ('PySide2.QtGui.QVector3D',), + "QGraphicsScale.setXScale": ('float',), + "QGraphicsScale.setYScale": ('float',), + "QGraphicsScale.setZScale": ('float',), + "QGraphicsScale.xScale": (), + "QGraphicsScale.yScale": (), + "QGraphicsScale.zScale": (), + + # class PySide2.QtWidgets.QGraphicsScene: + "QGraphicsScene.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QObject'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.QObject')], + "QGraphicsScene.activePanel": (), + "QGraphicsScene.activeWindow": (), + "QGraphicsScene.addEllipse": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.addLine": [('PySide2.QtCore.QLineF', 'PySide2.QtGui.QPen'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen')], + "QGraphicsScene.addPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsScene.addPolygon": ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addRect": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addSimpleText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addWidget": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QGraphicsScene.advance": (), + "QGraphicsScene.backgroundBrush": (), + "QGraphicsScene.bspTreeDepth": (), + "QGraphicsScene.clear": (), + "QGraphicsScene.clearFocus": (), + "QGraphicsScene.clearSelection": (), + "QGraphicsScene.collidingItems": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsScene.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsScene.createItemGroup": ('list',), + "QGraphicsScene.destroyItemGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsScene.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.event": ('PySide2.QtCore.QEvent',), + "QGraphicsScene.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.focusItem": (), + "QGraphicsScene.focusNextPrevChild": ('bool',), + "QGraphicsScene.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.font": (), + "QGraphicsScene.foregroundBrush": (), + "QGraphicsScene.hasFocus": (), + "QGraphicsScene.height": (), + "QGraphicsScene.helpEvent": ('PySide2.QtWidgets.QGraphicsSceneHelpEvent',), + "QGraphicsScene.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsScene.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsScene.invalidate": [('PySide2.QtCore.QRectF', 'SceneLayers'), ('float', 'float', 'float', 'float', 'SceneLayers')], + "QGraphicsScene.isActive": (), + "QGraphicsScene.isSortCacheEnabled": (), + "QGraphicsScene.itemAt": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTransform'), ('float', 'float', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemIndexMethod": (), + "QGraphicsScene.items": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemsBoundingRect": (), + "QGraphicsScene.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.minimumRenderSize": (), + "QGraphicsScene.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseGrabberItem": (), + "QGraphicsScene.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.palette": (), + "QGraphicsScene.removeItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.render": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), + "QGraphicsScene.sceneRect": (), + "QGraphicsScene.selectedItems": (), + "QGraphicsScene.selectionArea": (), + "QGraphicsScene.sendEvent": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.setActivePanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.setActiveWindow": ('PySide2.QtWidgets.QGraphicsWidget',), + "QGraphicsScene.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setBspTreeDepth": ('int',), + "QGraphicsScene.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsScene.setFocusItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.FocusReason'), + "QGraphicsScene.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsScene.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setItemIndexMethod": ('PySide2.QtWidgets.QGraphicsScene.ItemIndexMethod',), + "QGraphicsScene.setMinimumRenderSize": ('float',), + "QGraphicsScene.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsScene.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.setSelectionArea": [('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionOperation', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.setSortCacheEnabled": ('bool',), + "QGraphicsScene.setStickyFocus": ('bool',), + "QGraphicsScene.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsScene.stickyFocus": (), + "QGraphicsScene.style": (), + "QGraphicsScene.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.views": (), + "QGraphicsScene.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsScene.width": (), + + # class PySide2.QtWidgets.QGraphicsSceneContextMenuEvent: + "QGraphicsSceneContextMenuEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneContextMenuEvent.modifiers": (), + "QGraphicsSceneContextMenuEvent.pos": (), + "QGraphicsSceneContextMenuEvent.reason": (), + "QGraphicsSceneContextMenuEvent.scenePos": (), + "QGraphicsSceneContextMenuEvent.screenPos": (), + "QGraphicsSceneContextMenuEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneContextMenuEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setReason": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent.Reason',), + "QGraphicsSceneContextMenuEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneDragDropEvent: + "QGraphicsSceneDragDropEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneDragDropEvent.acceptProposedAction": (), + "QGraphicsSceneDragDropEvent.buttons": (), + "QGraphicsSceneDragDropEvent.dropAction": (), + "QGraphicsSceneDragDropEvent.mimeData": (), + "QGraphicsSceneDragDropEvent.modifiers": (), + "QGraphicsSceneDragDropEvent.pos": (), + "QGraphicsSceneDragDropEvent.possibleActions": (), + "QGraphicsSceneDragDropEvent.proposedAction": (), + "QGraphicsSceneDragDropEvent.scenePos": (), + "QGraphicsSceneDragDropEvent.screenPos": (), + "QGraphicsSceneDragDropEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneDragDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneDragDropEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setPossibleActions": ('DropActions',), + "QGraphicsSceneDragDropEvent.setProposedAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneDragDropEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneEvent: + "QGraphicsSceneEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneEvent.widget": (), + + # class PySide2.QtWidgets.QGraphicsSceneHelpEvent: + "QGraphicsSceneHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHelpEvent.scenePos": (), + "QGraphicsSceneHelpEvent.screenPos": (), + "QGraphicsSceneHelpEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHelpEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneHoverEvent: + "QGraphicsSceneHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHoverEvent.lastPos": (), + "QGraphicsSceneHoverEvent.lastScenePos": (), + "QGraphicsSceneHoverEvent.lastScreenPos": (), + "QGraphicsSceneHoverEvent.modifiers": (), + "QGraphicsSceneHoverEvent.pos": (), + "QGraphicsSceneHoverEvent.scenePos": (), + "QGraphicsSceneHoverEvent.screenPos": (), + "QGraphicsSceneHoverEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneHoverEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneHoverEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneMouseEvent: + "QGraphicsSceneMouseEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneMouseEvent.button": (), + "QGraphicsSceneMouseEvent.buttonDownPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScenePos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttons": (), + "QGraphicsSceneMouseEvent.flags": (), + "QGraphicsSceneMouseEvent.lastPos": (), + "QGraphicsSceneMouseEvent.lastScenePos": (), + "QGraphicsSceneMouseEvent.lastScreenPos": (), + "QGraphicsSceneMouseEvent.modifiers": (), + "QGraphicsSceneMouseEvent.pos": (), + "QGraphicsSceneMouseEvent.scenePos": (), + "QGraphicsSceneMouseEvent.screenPos": (), + "QGraphicsSceneMouseEvent.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.setButtonDownPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScenePos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPoint'), + "QGraphicsSceneMouseEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneMouseEvent.setFlags": ('MouseEventFlags',), + "QGraphicsSceneMouseEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneMouseEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setSource": ('PySide2.QtCore.Qt.MouseEventSource',), + "QGraphicsSceneMouseEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneMoveEvent: + "QGraphicsSceneMoveEvent.__init__": (), + "QGraphicsSceneMoveEvent.newPos": (), + "QGraphicsSceneMoveEvent.oldPos": (), + "QGraphicsSceneMoveEvent.setNewPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMoveEvent.setOldPos": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QGraphicsSceneResizeEvent: + "QGraphicsSceneResizeEvent.__init__": (), + "QGraphicsSceneResizeEvent.newSize": (), + "QGraphicsSceneResizeEvent.oldSize": (), + "QGraphicsSceneResizeEvent.setNewSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsSceneResizeEvent.setOldSize": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtWidgets.QGraphicsSceneWheelEvent: + "QGraphicsSceneWheelEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneWheelEvent.buttons": (), + "QGraphicsSceneWheelEvent.delta": (), + "QGraphicsSceneWheelEvent.modifiers": (), + "QGraphicsSceneWheelEvent.orientation": (), + "QGraphicsSceneWheelEvent.pos": (), + "QGraphicsSceneWheelEvent.scenePos": (), + "QGraphicsSceneWheelEvent.screenPos": (), + "QGraphicsSceneWheelEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneWheelEvent.setDelta": ('int',), + "QGraphicsSceneWheelEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneWheelEvent.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsSceneWheelEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSimpleTextItem: + "QGraphicsSimpleTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSimpleTextItem.boundingRect": (), + "QGraphicsSimpleTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsSimpleTextItem.extension": ('Any',), + "QGraphicsSimpleTextItem.font": (), + "QGraphicsSimpleTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsSimpleTextItem.opaqueArea": (), + "QGraphicsSimpleTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSimpleTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsSimpleTextItem.setText": ('str',), + "QGraphicsSimpleTextItem.shape": (), + "QGraphicsSimpleTextItem.text": (), + "QGraphicsSimpleTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTextItem: + "QGraphicsTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsTextItem.adjustSize": (), + "QGraphicsTextItem.boundingRect": (), + "QGraphicsTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsTextItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsTextItem.defaultTextColor": (), + "QGraphicsTextItem.document": (), + "QGraphicsTextItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.extension": ('Any',), + "QGraphicsTextItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.font": (), + "QGraphicsTextItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsTextItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsTextItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.opaqueArea": (), + "QGraphicsTextItem.openExternalLinks": (), + "QGraphicsTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsTextItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsTextItem.setDefaultTextColor": ('PySide2.QtGui.QColor',), + "QGraphicsTextItem.setDocument": ('PySide2.QtGui.QTextDocument',), + "QGraphicsTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsTextItem.setHtml": ('str',), + "QGraphicsTextItem.setOpenExternalLinks": ('bool',), + "QGraphicsTextItem.setPlainText": ('str',), + "QGraphicsTextItem.setTabChangesFocus": ('bool',), + "QGraphicsTextItem.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QGraphicsTextItem.setTextInteractionFlags": ('TextInteractionFlags',), + "QGraphicsTextItem.setTextWidth": ('float',), + "QGraphicsTextItem.shape": (), + "QGraphicsTextItem.tabChangesFocus": (), + "QGraphicsTextItem.textCursor": (), + "QGraphicsTextItem.textInteractionFlags": (), + "QGraphicsTextItem.textWidth": (), + "QGraphicsTextItem.toHtml": (), + "QGraphicsTextItem.toPlainText": (), + "QGraphicsTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTransform: + "QGraphicsTransform.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsTransform.update": (), + + # class PySide2.QtWidgets.QGraphicsView: + "QGraphicsView.__init__": [('PySide2.QtWidgets.QGraphicsScene', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QGraphicsView.alignment": (), + "QGraphicsView.backgroundBrush": (), + "QGraphicsView.cacheMode": (), + "QGraphicsView.centerOn": [('PySide2.QtCore.QPointF',), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float')], + "QGraphicsView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QGraphicsView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QGraphicsView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QGraphicsView.dragMode": (), + "QGraphicsView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QGraphicsView.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawItems": ('PySide2.QtGui.QPainter', 'int', 'List[PySide2.QtWidgets.QGraphicsItem]', 'List[PySide2.QtWidgets.QStyleOptionGraphicsItem]'), + "QGraphicsView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QGraphicsView.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('PySide2.QtWidgets.QGraphicsItem', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsView.event": ('PySide2.QtCore.QEvent',), + "QGraphicsView.fitInView": [('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.focusNextPrevChild": ('bool',), + "QGraphicsView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.foregroundBrush": (), + "QGraphicsView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsView.invalidateScene": ('PySide2.QtCore.QRectF', 'SceneLayers'), + "QGraphicsView.isInteractive": (), + "QGraphicsView.isTransformed": (), + "QGraphicsView.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QGraphicsView.items": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ItemSelectionMode')], + "QGraphicsView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsView.mapToScene": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('int', 'int'), ('int', 'int', 'int', 'int')], + "QGraphicsView.matrix": (), + "QGraphicsView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.optimizationFlags": (), + "QGraphicsView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGraphicsView.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.renderHints": (), + "QGraphicsView.resetCachedContent": (), + "QGraphicsView.resetMatrix": (), + "QGraphicsView.resetTransform": (), + "QGraphicsView.resizeAnchor": (), + "QGraphicsView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGraphicsView.rotate": ('float',), + "QGraphicsView.rubberBandRect": (), + "QGraphicsView.rubberBandSelectionMode": (), + "QGraphicsView.scale": ('float', 'float'), + "QGraphicsView.scene": (), + "QGraphicsView.sceneRect": (), + "QGraphicsView.scrollContentsBy": ('int', 'int'), + "QGraphicsView.setAlignment": ('Alignment',), + "QGraphicsView.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setCacheMode": ('CacheMode',), + "QGraphicsView.setDragMode": ('PySide2.QtWidgets.QGraphicsView.DragMode',), + "QGraphicsView.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setInteractive": ('bool',), + "QGraphicsView.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsView.setOptimizationFlag": ('PySide2.QtWidgets.QGraphicsView.OptimizationFlag', 'bool'), + "QGraphicsView.setOptimizationFlags": ('OptimizationFlags',), + "QGraphicsView.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QGraphicsView.setRenderHints": ('RenderHints',), + "QGraphicsView.setResizeAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setRubberBandSelectionMode": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsView.setScene": ('PySide2.QtWidgets.QGraphicsScene',), + "QGraphicsView.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsView.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsView.setTransformationAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setViewportUpdateMode": ('PySide2.QtWidgets.QGraphicsView.ViewportUpdateMode',), + "QGraphicsView.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QGraphicsView.shear": ('float', 'float'), + "QGraphicsView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsView.sizeHint": (), + "QGraphicsView.transform": (), + "QGraphicsView.transformationAnchor": (), + "QGraphicsView.translate": ('float', 'float'), + "QGraphicsView.updateScene": ('list',), + "QGraphicsView.updateSceneRect": ('PySide2.QtCore.QRectF',), + "QGraphicsView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsView.viewportTransform": (), + "QGraphicsView.viewportUpdateMode": (), + "QGraphicsView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QGraphicsWidget: + "QGraphicsWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'WindowFlags'), + "QGraphicsWidget.actions": (), + "QGraphicsWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.addActions": ('list',), + "QGraphicsWidget.adjustSize": (), + "QGraphicsWidget.autoFillBackground": (), + "QGraphicsWidget.boundingRect": (), + "QGraphicsWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.close": (), + "QGraphicsWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QGraphicsWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusNextPrevChild": ('bool',), + "QGraphicsWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusPolicy": (), + "QGraphicsWidget.focusWidget": (), + "QGraphicsWidget.font": (), + "QGraphicsWidget.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.getWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.grabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QGraphicsWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QGraphicsWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QGraphicsWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QGraphicsWidget.isActiveWindow": (), + "QGraphicsWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsWidget.layout": (), + "QGraphicsWidget.layoutDirection": (), + "QGraphicsWidget.moveEvent": ('PySide2.QtWidgets.QGraphicsSceneMoveEvent',), + "QGraphicsWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.paintWindowFrame": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.palette": (), + "QGraphicsWidget.polishEvent": (), + "QGraphicsWidget.propertyChange": ('str', 'Any'), + "QGraphicsWidget.rect": (), + "QGraphicsWidget.releaseShortcut": ('int',), + "QGraphicsWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.resize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsWidget.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QGraphicsWidget.setAutoFillBackground": ('bool',), + "QGraphicsWidget.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QGraphicsWidget.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsWidget.setGeometry": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsWidget.setLayout": ('PySide2.QtWidgets.QGraphicsLayout',), + "QGraphicsWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGraphicsWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QGraphicsWidget.setShortcutEnabled": ('int', 'bool'), + "QGraphicsWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsWidget.setTabOrder": ('PySide2.QtWidgets.QGraphicsWidget', 'PySide2.QtWidgets.QGraphicsWidget'), + "QGraphicsWidget.setWindowFlags": ('WindowFlags',), + "QGraphicsWidget.setWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setWindowTitle": ('str',), + "QGraphicsWidget.shape": (), + "QGraphicsWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsWidget.size": (), + "QGraphicsWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsWidget.style": (), + "QGraphicsWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QGraphicsWidget.type": (), + "QGraphicsWidget.ungrabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.unsetLayoutDirection": (), + "QGraphicsWidget.unsetWindowFrameMargins": (), + "QGraphicsWidget.updateGeometry": (), + "QGraphicsWidget.windowFlags": (), + "QGraphicsWidget.windowFrameEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.windowFrameGeometry": (), + "QGraphicsWidget.windowFrameRect": (), + "QGraphicsWidget.windowFrameSectionAt": ('PySide2.QtCore.QPointF',), + "QGraphicsWidget.windowTitle": (), + "QGraphicsWidget.windowType": (), + + # class PySide2.QtWidgets.QGridLayout: + "QGridLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QGridLayout.addItem": [('PySide2.QtWidgets.QLayoutItem',), ('PySide2.QtWidgets.QLayoutItem', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.addLayout": [('PySide2.QtWidgets.QLayout', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QLayout', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.cellRect": ('int', 'int'), + "QGridLayout.columnCount": (), + "QGridLayout.columnMinimumWidth": ('int',), + "QGridLayout.columnStretch": ('int',), + "QGridLayout.count": (), + "QGridLayout.expandingDirections": (), + "QGridLayout.getItemPosition": ('int', 'int', 'int', 'int', 'int'), + "QGridLayout.hasHeightForWidth": (), + "QGridLayout.heightForWidth": ('int',), + "QGridLayout.horizontalSpacing": (), + "QGridLayout.invalidate": (), + "QGridLayout.itemAt": ('int',), + "QGridLayout.itemAtPosition": ('int', 'int'), + "QGridLayout.maximumSize": (), + "QGridLayout.minimumHeightForWidth": ('int',), + "QGridLayout.minimumSize": (), + "QGridLayout.originCorner": (), + "QGridLayout.rowCount": (), + "QGridLayout.rowMinimumHeight": ('int',), + "QGridLayout.rowStretch": ('int',), + "QGridLayout.setColumnMinimumWidth": ('int', 'int'), + "QGridLayout.setColumnStretch": ('int', 'int'), + "QGridLayout.setDefaultPositioning": ('int', 'PySide2.QtCore.Qt.Orientation'), + "QGridLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QGridLayout.setHorizontalSpacing": ('int',), + "QGridLayout.setOriginCorner": ('PySide2.QtCore.Qt.Corner',), + "QGridLayout.setRowMinimumHeight": ('int', 'int'), + "QGridLayout.setRowStretch": ('int', 'int'), + "QGridLayout.setSpacing": ('int',), + "QGridLayout.setVerticalSpacing": ('int',), + "QGridLayout.sizeHint": (), + "QGridLayout.spacing": (), + "QGridLayout.takeAt": ('int',), + "QGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGroupBox: + "QGroupBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QGroupBox.alignment": (), + "QGroupBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QGroupBox.childEvent": ('PySide2.QtCore.QChildEvent',), + "QGroupBox.event": ('PySide2.QtCore.QEvent',), + "QGroupBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGroupBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionGroupBox',), + "QGroupBox.isCheckable": (), + "QGroupBox.isChecked": (), + "QGroupBox.isFlat": (), + "QGroupBox.minimumSizeHint": (), + "QGroupBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGroupBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGroupBox.setAlignment": ('int',), + "QGroupBox.setCheckable": ('bool',), + "QGroupBox.setChecked": ('bool',), + "QGroupBox.setFlat": ('bool',), + "QGroupBox.setTitle": ('str',), + "QGroupBox.title": (), + + # class PySide2.QtWidgets.QHBoxLayout: + "QHBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QHeaderView: + "QHeaderView.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), + "QHeaderView.cascadingSectionResizes": (), + "QHeaderView.count": (), + "QHeaderView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QHeaderView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QHeaderView.defaultAlignment": (), + "QHeaderView.defaultSectionSize": (), + "QHeaderView.doItemsLayout": (), + "QHeaderView.event": ('PySide2.QtCore.QEvent',), + "QHeaderView.headerDataChanged": ('PySide2.QtCore.Qt.Orientation', 'int', 'int'), + "QHeaderView.hiddenSectionCount": (), + "QHeaderView.hideSection": ('int',), + "QHeaderView.highlightSections": (), + "QHeaderView.horizontalOffset": (), + "QHeaderView.indexAt": ('PySide2.QtCore.QPoint',), + "QHeaderView.initStyleOption": [('PySide2.QtWidgets.QStyleOptionFrame',), ('PySide2.QtWidgets.QStyleOptionHeader',)], + "QHeaderView.initialize": (), + "QHeaderView.initializeSections": [(), ('int', 'int')], + "QHeaderView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.isSectionHidden": ('int',), + "QHeaderView.isSortIndicatorShown": (), + "QHeaderView.length": (), + "QHeaderView.logicalIndex": ('int',), + "QHeaderView.logicalIndexAt": [('PySide2.QtCore.QPoint',), ('int',), ('int', 'int')], + "QHeaderView.maximumSectionSize": (), + "QHeaderView.minimumSectionSize": (), + "QHeaderView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QHeaderView.moveSection": ('int', 'int'), + "QHeaderView.offset": (), + "QHeaderView.orientation": (), + "QHeaderView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QHeaderView.paintSection": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int'), + "QHeaderView.reset": (), + "QHeaderView.resetDefaultSectionSize": (), + "QHeaderView.resizeContentsPrecision": (), + "QHeaderView.resizeSection": ('int', 'int'), + "QHeaderView.resizeSections": [(), ('PySide2.QtWidgets.QHeaderView.ResizeMode',)], + "QHeaderView.restoreState": ('PySide2.QtCore.QByteArray',), + "QHeaderView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.saveState": (), + "QHeaderView.scrollContentsBy": ('int', 'int'), + "QHeaderView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QHeaderView.sectionPosition": ('int',), + "QHeaderView.sectionResizeMode": ('int',), + "QHeaderView.sectionSize": ('int',), + "QHeaderView.sectionSizeFromContents": ('int',), + "QHeaderView.sectionSizeHint": ('int',), + "QHeaderView.sectionViewportPosition": ('int',), + "QHeaderView.sectionsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsClickable": (), + "QHeaderView.sectionsHidden": (), + "QHeaderView.sectionsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsMovable": (), + "QHeaderView.sectionsMoved": (), + "QHeaderView.setCascadingSectionResizes": ('bool',), + "QHeaderView.setDefaultAlignment": ('Alignment',), + "QHeaderView.setDefaultSectionSize": ('int',), + "QHeaderView.setHighlightSections": ('bool',), + "QHeaderView.setMaximumSectionSize": ('int',), + "QHeaderView.setMinimumSectionSize": ('int',), + "QHeaderView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QHeaderView.setOffset": ('int',), + "QHeaderView.setOffsetToLastSection": (), + "QHeaderView.setOffsetToSectionPosition": ('int',), + "QHeaderView.setResizeContentsPrecision": ('int',), + "QHeaderView.setSectionHidden": ('int', 'bool'), + "QHeaderView.setSectionResizeMode": [('PySide2.QtWidgets.QHeaderView.ResizeMode',), ('int', 'PySide2.QtWidgets.QHeaderView.ResizeMode')], + "QHeaderView.setSectionsClickable": ('bool',), + "QHeaderView.setSectionsMovable": ('bool',), + "QHeaderView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QHeaderView.setSortIndicator": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QHeaderView.setSortIndicatorShown": ('bool',), + "QHeaderView.setStretchLastSection": ('bool',), + "QHeaderView.setVisible": ('bool',), + "QHeaderView.showSection": ('int',), + "QHeaderView.sizeHint": (), + "QHeaderView.sortIndicatorOrder": (), + "QHeaderView.sortIndicatorSection": (), + "QHeaderView.stretchLastSection": (), + "QHeaderView.stretchSectionCount": (), + "QHeaderView.swapSections": ('int', 'int'), + "QHeaderView.updateGeometries": (), + "QHeaderView.updateSection": ('int',), + "QHeaderView.verticalOffset": (), + "QHeaderView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QHeaderView.visualIndex": ('int',), + "QHeaderView.visualIndexAt": ('int',), + "QHeaderView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QInputDialog: + "QInputDialog.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QInputDialog.cancelButtonText": (), + "QInputDialog.comboBoxItems": (), + "QInputDialog.done": ('int',), + "QInputDialog.doubleDecimals": (), + "QInputDialog.doubleMaximum": (), + "QInputDialog.doubleMinimum": (), + "QInputDialog.doubleValue": (), + "QInputDialog.getDouble": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'float', 'float', 'float', 'int', 'bool', 'WindowFlags'), + "QInputDialog.getInt": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'int', 'int', 'int', 'int', 'bool', 'WindowFlags'), + "QInputDialog.getItem": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'List[str]', 'int', 'bool', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.getMultiLineText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.getText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QLineEdit.EchoMode', 'str', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.inputMode": (), + "QInputDialog.intMaximum": (), + "QInputDialog.intMinimum": (), + "QInputDialog.intStep": (), + "QInputDialog.intValue": (), + "QInputDialog.isComboBoxEditable": (), + "QInputDialog.labelText": (), + "QInputDialog.minimumSizeHint": (), + "QInputDialog.okButtonText": (), + "QInputDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QInputDialog.setCancelButtonText": ('str',), + "QInputDialog.setComboBoxEditable": ('bool',), + "QInputDialog.setComboBoxItems": ('List[str]',), + "QInputDialog.setDoubleDecimals": ('int',), + "QInputDialog.setDoubleMaximum": ('float',), + "QInputDialog.setDoubleMinimum": ('float',), + "QInputDialog.setDoubleRange": ('float', 'float'), + "QInputDialog.setDoubleValue": ('float',), + "QInputDialog.setInputMode": ('PySide2.QtWidgets.QInputDialog.InputMode',), + "QInputDialog.setIntMaximum": ('int',), + "QInputDialog.setIntMinimum": ('int',), + "QInputDialog.setIntRange": ('int', 'int'), + "QInputDialog.setIntStep": ('int',), + "QInputDialog.setIntValue": ('int',), + "QInputDialog.setLabelText": ('str',), + "QInputDialog.setOkButtonText": ('str',), + "QInputDialog.setOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption', 'bool'), + "QInputDialog.setTextEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QInputDialog.setTextValue": ('str',), + "QInputDialog.setVisible": ('bool',), + "QInputDialog.sizeHint": (), + "QInputDialog.testOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption',), + "QInputDialog.textEchoMode": (), + "QInputDialog.textValue": (), + + # class PySide2.QtWidgets.QItemDelegate: + "QItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.decoration": ('PySide2.QtWidgets.QStyleOptionViewItem', 'Any'), + "QItemDelegate.doCheck": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'Any'), + "QItemDelegate.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.drawCheck": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.CheckState'), + "QItemDelegate.drawDecoration": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), + "QItemDelegate.drawDisplay": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'str'), + "QItemDelegate.drawFocus": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect'), + "QItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QItemDelegate.hasClipping": (), + "QItemDelegate.itemEditorFactory": (), + "QItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.rect": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex', 'int'), + "QItemDelegate.setClipping": ('bool',), + "QItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setOptions": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QStyleOptionViewItem'), + "QItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.textRectangle": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QFont', 'str'), + "QItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QItemEditorCreatorBase: + "QItemEditorCreatorBase.__init__": (), + "QItemEditorCreatorBase.createWidget": ('PySide2.QtWidgets.QWidget',), + "QItemEditorCreatorBase.valuePropertyName": (), + + # class PySide2.QtWidgets.QItemEditorFactory: + "QItemEditorFactory.__init__": (), + "QItemEditorFactory.createEditor": ('int', 'PySide2.QtWidgets.QWidget'), + "QItemEditorFactory.defaultFactory": (), + "QItemEditorFactory.registerEditor": ('int', 'PySide2.QtWidgets.QItemEditorCreatorBase'), + "QItemEditorFactory.setDefaultFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemEditorFactory.valuePropertyName": ('int',), + + # class PySide2.QtWidgets.QKeyEventTransition: + "QKeyEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'int', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QKeyEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.key": (), + "QKeyEventTransition.modifierMask": (), + "QKeyEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.setKey": ('int',), + "QKeyEventTransition.setModifierMask": ('KeyboardModifiers',), + + # class PySide2.QtWidgets.QKeySequenceEdit: + "QKeySequenceEdit.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QKeySequenceEdit.clear": (), + "QKeySequenceEdit.event": ('PySide2.QtCore.QEvent',), + "QKeySequenceEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keySequence": (), + "QKeySequenceEdit.setKeySequence": ('PySide2.QtGui.QKeySequence',), + "QKeySequenceEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QLCDNumber: + "QLCDNumber.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'PySide2.QtWidgets.QWidget')], + "QLCDNumber.checkOverflow": [('float',), ('int',)], + "QLCDNumber.digitCount": (), + "QLCDNumber.display": [('float',), ('int',), ('str',)], + "QLCDNumber.event": ('PySide2.QtCore.QEvent',), + "QLCDNumber.intValue": (), + "QLCDNumber.mode": (), + "QLCDNumber.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLCDNumber.segmentStyle": (), + "QLCDNumber.setBinMode": (), + "QLCDNumber.setDecMode": (), + "QLCDNumber.setDigitCount": ('int',), + "QLCDNumber.setHexMode": (), + "QLCDNumber.setMode": ('PySide2.QtWidgets.QLCDNumber.Mode',), + "QLCDNumber.setOctMode": (), + "QLCDNumber.setSegmentStyle": ('PySide2.QtWidgets.QLCDNumber.SegmentStyle',), + "QLCDNumber.setSmallDecimalPoint": ('bool',), + "QLCDNumber.sizeHint": (), + "QLCDNumber.smallDecimalPoint": (), + "QLCDNumber.value": (), + + # class PySide2.QtWidgets.QLabel: + "QLabel.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QLabel.alignment": (), + "QLabel.buddy": (), + "QLabel.changeEvent": ('PySide2.QtCore.QEvent',), + "QLabel.clear": (), + "QLabel.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLabel.event": ('PySide2.QtCore.QEvent',), + "QLabel.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.focusNextPrevChild": ('bool',), + "QLabel.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.hasScaledContents": (), + "QLabel.hasSelectedText": (), + "QLabel.heightForWidth": ('int',), + "QLabel.indent": (), + "QLabel.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLabel.margin": (), + "QLabel.minimumSizeHint": (), + "QLabel.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.movie": (), + "QLabel.openExternalLinks": (), + "QLabel.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLabel.picture": (), + "QLabel.pixmap": (), + "QLabel.selectedText": (), + "QLabel.selectionStart": (), + "QLabel.setAlignment": ('Alignment',), + "QLabel.setBuddy": ('PySide2.QtWidgets.QWidget',), + "QLabel.setIndent": ('int',), + "QLabel.setMargin": ('int',), + "QLabel.setMovie": ('PySide2.QtGui.QMovie',), + "QLabel.setNum": [('float',), ('int',)], + "QLabel.setOpenExternalLinks": ('bool',), + "QLabel.setPicture": ('PySide2.QtGui.QPicture',), + "QLabel.setPixmap": ('PySide2.QtGui.QPixmap',), + "QLabel.setScaledContents": ('bool',), + "QLabel.setSelection": ('int', 'int'), + "QLabel.setText": ('str',), + "QLabel.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QLabel.setTextInteractionFlags": ('TextInteractionFlags',), + "QLabel.setWordWrap": ('bool',), + "QLabel.sizeHint": (), + "QLabel.text": (), + "QLabel.textFormat": (), + "QLabel.textInteractionFlags": (), + "QLabel.wordWrap": (), + + # class PySide2.QtWidgets.QLayout: + "QLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QLayout.activate": (), + "QLayout.addChildLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.addChildWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.adoptLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.alignmentRect": ('PySide2.QtCore.QRect',), + "QLayout.childEvent": ('PySide2.QtCore.QChildEvent',), + "QLayout.closestAcceptableSize": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QSize'), + "QLayout.contentsMargins": (), + "QLayout.contentsRect": (), + "QLayout.controlTypes": (), + "QLayout.count": (), + "QLayout.expandingDirections": (), + "QLayout.geometry": (), + "QLayout.getContentsMargins": ('int', 'int', 'int', 'int'), + "QLayout.indexOf": ('PySide2.QtWidgets.QWidget',), + "QLayout.invalidate": (), + "QLayout.isEmpty": (), + "QLayout.isEnabled": (), + "QLayout.itemAt": ('int',), + "QLayout.layout": (), + "QLayout.margin": (), + "QLayout.maximumSize": (), + "QLayout.menuBar": (), + "QLayout.minimumSize": (), + "QLayout.parentWidget": (), + "QLayout.removeItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.replaceWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget', 'FindChildOptions'), + "QLayout.setAlignment": [('Alignment',), ('PySide2.QtWidgets.QLayout', 'Alignment'), ('PySide2.QtWidgets.QWidget', 'Alignment')], + "QLayout.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLayout.setEnabled": ('bool',), + "QLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QLayout.setMargin": ('int',), + "QLayout.setMenuBar": ('PySide2.QtWidgets.QWidget',), + "QLayout.setSizeConstraint": ('PySide2.QtWidgets.QLayout.SizeConstraint',), + "QLayout.setSpacing": ('int',), + "QLayout.sizeConstraint": (), + "QLayout.spacing": (), + "QLayout.takeAt": ('int',), + "QLayout.totalHeightForWidth": ('int',), + "QLayout.totalMaximumSize": (), + "QLayout.totalMinimumSize": (), + "QLayout.totalSizeHint": (), + "QLayout.update": (), + "QLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QLayoutItem: + "QLayoutItem.__init__": ('Alignment',), + "QLayoutItem.alignment": (), + "QLayoutItem.controlTypes": (), + "QLayoutItem.expandingDirections": (), + "QLayoutItem.geometry": (), + "QLayoutItem.hasHeightForWidth": (), + "QLayoutItem.heightForWidth": ('int',), + "QLayoutItem.invalidate": (), + "QLayoutItem.isEmpty": (), + "QLayoutItem.layout": (), + "QLayoutItem.maximumSize": (), + "QLayoutItem.minimumHeightForWidth": ('int',), + "QLayoutItem.minimumSize": (), + "QLayoutItem.setAlignment": ('Alignment',), + "QLayoutItem.setGeometry": ('PySide2.QtCore.QRect',), + "QLayoutItem.sizeHint": (), + "QLayoutItem.spacerItem": (), + "QLayoutItem.widget": (), + + # class PySide2.QtWidgets.QLineEdit: + "QLineEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QLineEdit.addAction": [('PySide2.QtGui.QIcon', 'PySide2.QtWidgets.QLineEdit.ActionPosition'), ('PySide2.QtWidgets.QAction',), ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QLineEdit.ActionPosition')], + "QLineEdit.alignment": (), + "QLineEdit.backspace": (), + "QLineEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QLineEdit.clear": (), + "QLineEdit.completer": (), + "QLineEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLineEdit.copy": (), + "QLineEdit.createStandardContextMenu": (), + "QLineEdit.cursorBackward": ('bool', 'int'), + "QLineEdit.cursorForward": ('bool', 'int'), + "QLineEdit.cursorMoveStyle": (), + "QLineEdit.cursorPosition": (), + "QLineEdit.cursorPositionAt": ('PySide2.QtCore.QPoint',), + "QLineEdit.cursorRect": (), + "QLineEdit.cursorWordBackward": ('bool',), + "QLineEdit.cursorWordForward": ('bool',), + "QLineEdit.cut": (), + "QLineEdit.del_": (), + "QLineEdit.deselect": (), + "QLineEdit.displayText": (), + "QLineEdit.dragEnabled": (), + "QLineEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QLineEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QLineEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QLineEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QLineEdit.echoMode": (), + "QLineEdit.end": ('bool',), + "QLineEdit.event": ('PySide2.QtCore.QEvent',), + "QLineEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.getTextMargins": ('int', 'int', 'int', 'int'), + "QLineEdit.hasAcceptableInput": (), + "QLineEdit.hasFrame": (), + "QLineEdit.hasSelectedText": (), + "QLineEdit.home": ('bool',), + "QLineEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QLineEdit.inputMask": (), + "QLineEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QLineEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QLineEdit.insert": ('str',), + "QLineEdit.isClearButtonEnabled": (), + "QLineEdit.isModified": (), + "QLineEdit.isReadOnly": (), + "QLineEdit.isRedoAvailable": (), + "QLineEdit.isUndoAvailable": (), + "QLineEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLineEdit.maxLength": (), + "QLineEdit.minimumSizeHint": (), + "QLineEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLineEdit.paste": (), + "QLineEdit.placeholderText": (), + "QLineEdit.redo": (), + "QLineEdit.selectAll": (), + "QLineEdit.selectedText": (), + "QLineEdit.selectionStart": (), + "QLineEdit.setAlignment": ('Alignment',), + "QLineEdit.setClearButtonEnabled": ('bool',), + "QLineEdit.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QLineEdit.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QLineEdit.setCursorPosition": ('int',), + "QLineEdit.setDragEnabled": ('bool',), + "QLineEdit.setEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QLineEdit.setFrame": ('bool',), + "QLineEdit.setInputMask": ('str',), + "QLineEdit.setMaxLength": ('int',), + "QLineEdit.setModified": ('bool',), + "QLineEdit.setPlaceholderText": ('str',), + "QLineEdit.setReadOnly": ('bool',), + "QLineEdit.setSelection": ('int', 'int'), + "QLineEdit.setText": ('str',), + "QLineEdit.setTextMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLineEdit.setValidator": ('PySide2.QtGui.QValidator',), + "QLineEdit.sizeHint": (), + "QLineEdit.text": (), + "QLineEdit.textMargins": (), + "QLineEdit.undo": (), + "QLineEdit.validator": (), + + # class PySide2.QtWidgets.QListView: + "QListView.__init__": ('PySide2.QtWidgets.QWidget',), + "QListView.batchSize": (), + "QListView.clearPropertyFlags": (), + "QListView.contentsSize": (), + "QListView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QListView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QListView.doItemsLayout": (), + "QListView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QListView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QListView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListView.event": ('PySide2.QtCore.QEvent',), + "QListView.flow": (), + "QListView.gridSize": (), + "QListView.horizontalOffset": (), + "QListView.indexAt": ('PySide2.QtCore.QPoint',), + "QListView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QListView.isRowHidden": ('int',), + "QListView.isSelectionRectVisible": (), + "QListView.isWrapping": (), + "QListView.layoutMode": (), + "QListView.modelColumn": (), + "QListView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QListView.movement": (), + "QListView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QListView.rectForIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.reset": (), + "QListView.resizeContents": ('int', 'int'), + "QListView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QListView.resizeMode": (), + "QListView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.scrollContentsBy": ('int', 'int'), + "QListView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListView.selectedIndexes": (), + "QListView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QListView.setBatchSize": ('int',), + "QListView.setFlow": ('PySide2.QtWidgets.QListView.Flow',), + "QListView.setGridSize": ('PySide2.QtCore.QSize',), + "QListView.setLayoutMode": ('PySide2.QtWidgets.QListView.LayoutMode',), + "QListView.setModelColumn": ('int',), + "QListView.setMovement": ('PySide2.QtWidgets.QListView.Movement',), + "QListView.setPositionForIndex": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QModelIndex'), + "QListView.setResizeMode": ('PySide2.QtWidgets.QListView.ResizeMode',), + "QListView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.setRowHidden": ('int', 'bool'), + "QListView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QListView.setSelectionRectVisible": ('bool',), + "QListView.setSpacing": ('int',), + "QListView.setUniformItemSizes": ('bool',), + "QListView.setViewMode": ('PySide2.QtWidgets.QListView.ViewMode',), + "QListView.setWordWrap": ('bool',), + "QListView.setWrapping": ('bool',), + "QListView.spacing": (), + "QListView.startDrag": ('DropActions',), + "QListView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QListView.uniformItemSizes": (), + "QListView.updateGeometries": (), + "QListView.verticalOffset": (), + "QListView.viewMode": (), + "QListView.viewOptions": (), + "QListView.viewportSizeHint": (), + "QListView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QListView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QListView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QListView.wordWrap": (), + + # class PySide2.QtWidgets.QListWidget: + "QListWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QListWidget.addItem": [('PySide2.QtWidgets.QListWidgetItem',), ('str',)], + "QListWidget.addItems": ('List[str]',), + "QListWidget.clear": (), + "QListWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.count": (), + "QListWidget.currentItem": (), + "QListWidget.currentRow": (), + "QListWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListWidget.dropMimeData": ('int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QListWidget.editItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.event": ('PySide2.QtCore.QEvent',), + "QListWidget.findItems": ('str', 'MatchFlags'), + "QListWidget.indexFromItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.insertItem": [('int', 'PySide2.QtWidgets.QListWidgetItem'), ('int', 'str')], + "QListWidget.insertItems": ('int', 'List[str]'), + "QListWidget.isItemHidden": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isItemSelected": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isSortingEnabled": (), + "QListWidget.item": ('int',), + "QListWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QListWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QListWidget.itemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.items": ('PySide2.QtCore.QMimeData',), + "QListWidget.mimeData": ('list',), + "QListWidget.mimeTypes": (), + "QListWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.removeItemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.row": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.scrollToItem": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListWidget.selectedItems": (), + "QListWidget.setCurrentItem": [('PySide2.QtWidgets.QListWidgetItem',), ('PySide2.QtWidgets.QListWidgetItem', 'SelectionFlags')], + "QListWidget.setCurrentRow": [('int',), ('int', 'SelectionFlags')], + "QListWidget.setItemHidden": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemSelected": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemWidget": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QWidget'), + "QListWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QListWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QListWidget.setSortingEnabled": ('bool',), + "QListWidget.sortItems": ('PySide2.QtCore.Qt.SortOrder',), + "QListWidget.supportedDropActions": (), + "QListWidget.takeItem": ('int',), + "QListWidget.visualItemRect": ('PySide2.QtWidgets.QListWidgetItem',), + + # class PySide2.QtWidgets.QListWidgetItem: + "QListWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidgetItem',), ('str', 'PySide2.QtWidgets.QListWidget', 'int')], + "QListWidgetItem.background": (), + "QListWidgetItem.backgroundColor": (), + "QListWidgetItem.checkState": (), + "QListWidgetItem.clone": (), + "QListWidgetItem.data": ('int',), + "QListWidgetItem.flags": (), + "QListWidgetItem.font": (), + "QListWidgetItem.foreground": (), + "QListWidgetItem.icon": (), + "QListWidgetItem.isHidden": (), + "QListWidgetItem.isSelected": (), + "QListWidgetItem.listWidget": (), + "QListWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QListWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QListWidgetItem.setData": ('int', 'Any'), + "QListWidgetItem.setFlags": ('ItemFlags',), + "QListWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QListWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setHidden": ('bool',), + "QListWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QListWidgetItem.setSelected": ('bool',), + "QListWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QListWidgetItem.setStatusTip": ('str',), + "QListWidgetItem.setText": ('str',), + "QListWidgetItem.setTextAlignment": ('int',), + "QListWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setToolTip": ('str',), + "QListWidgetItem.setWhatsThis": ('str',), + "QListWidgetItem.sizeHint": (), + "QListWidgetItem.statusTip": (), + "QListWidgetItem.text": (), + "QListWidgetItem.textAlignment": (), + "QListWidgetItem.textColor": (), + "QListWidgetItem.toolTip": (), + "QListWidgetItem.type": (), + "QListWidgetItem.whatsThis": (), + "QListWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QMainWindow: + "QMainWindow.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMainWindow.addDockWidget": [('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget'), ('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation')], + "QMainWindow.addToolBar": [('PySide2.QtCore.Qt.ToolBarArea', 'PySide2.QtWidgets.QToolBar'), ('PySide2.QtWidgets.QToolBar',), ('str',)], + "QMainWindow.addToolBarBreak": ('PySide2.QtCore.Qt.ToolBarArea',), + "QMainWindow.centralWidget": (), + "QMainWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMainWindow.corner": ('PySide2.QtCore.Qt.Corner',), + "QMainWindow.createPopupMenu": (), + "QMainWindow.dockOptions": (), + "QMainWindow.dockWidgetArea": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.documentMode": (), + "QMainWindow.event": ('PySide2.QtCore.QEvent',), + "QMainWindow.iconSize": (), + "QMainWindow.insertToolBar": ('PySide2.QtWidgets.QToolBar', 'PySide2.QtWidgets.QToolBar'), + "QMainWindow.insertToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.isAnimated": (), + "QMainWindow.isDockNestingEnabled": (), + "QMainWindow.isSeparator": ('PySide2.QtCore.QPoint',), + "QMainWindow.menuBar": (), + "QMainWindow.menuWidget": (), + "QMainWindow.removeDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.removeToolBar": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.removeToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.resizeDocks": ('list', 'list', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.restoreDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.restoreState": ('PySide2.QtCore.QByteArray', 'int'), + "QMainWindow.saveState": ('int',), + "QMainWindow.setAnimated": ('bool',), + "QMainWindow.setCentralWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setCorner": ('PySide2.QtCore.Qt.Corner', 'PySide2.QtCore.Qt.DockWidgetArea'), + "QMainWindow.setDockNestingEnabled": ('bool',), + "QMainWindow.setDockOptions": ('DockOptions',), + "QMainWindow.setDocumentMode": ('bool',), + "QMainWindow.setIconSize": ('PySide2.QtCore.QSize',), + "QMainWindow.setMenuBar": ('PySide2.QtWidgets.QMenuBar',), + "QMainWindow.setMenuWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setStatusBar": ('PySide2.QtWidgets.QStatusBar',), + "QMainWindow.setTabPosition": ('DockWidgetAreas', 'PySide2.QtWidgets.QTabWidget.TabPosition'), + "QMainWindow.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMainWindow.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QMainWindow.setUnifiedTitleAndToolBarOnMac": ('bool',), + "QMainWindow.splitDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.statusBar": (), + "QMainWindow.tabPosition": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QMainWindow.tabShape": (), + "QMainWindow.tabifiedDockWidgets": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.tabifyDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget'), + "QMainWindow.takeCentralWidget": (), + "QMainWindow.toolBarArea": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolButtonStyle": (), + "QMainWindow.unifiedTitleAndToolBarOnMac": (), + + # class PySide2.QtWidgets.QMdiArea: + "QMdiArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.activateNextSubWindow": (), + "QMdiArea.activatePreviousSubWindow": (), + "QMdiArea.activationOrder": (), + "QMdiArea.activeSubWindow": (), + "QMdiArea.addSubWindow": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMdiArea.background": (), + "QMdiArea.cascadeSubWindows": (), + "QMdiArea.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiArea.closeActiveSubWindow": (), + "QMdiArea.closeAllSubWindows": (), + "QMdiArea.currentSubWindow": (), + "QMdiArea.documentMode": (), + "QMdiArea.event": ('PySide2.QtCore.QEvent',), + "QMdiArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiArea.minimumSizeHint": (), + "QMdiArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiArea.removeSubWindow": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiArea.scrollContentsBy": ('int', 'int'), + "QMdiArea.setActivationOrder": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.setActiveSubWindow": ('PySide2.QtWidgets.QMdiSubWindow',), + "QMdiArea.setBackground": ('PySide2.QtGui.QBrush',), + "QMdiArea.setDocumentMode": ('bool',), + "QMdiArea.setOption": ('PySide2.QtWidgets.QMdiArea.AreaOption', 'bool'), + "QMdiArea.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QMdiArea.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMdiArea.setTabsClosable": ('bool',), + "QMdiArea.setTabsMovable": ('bool',), + "QMdiArea.setViewMode": ('PySide2.QtWidgets.QMdiArea.ViewMode',), + "QMdiArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiArea.sizeHint": (), + "QMdiArea.subWindowList": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.tabPosition": (), + "QMdiArea.tabShape": (), + "QMdiArea.tabsClosable": (), + "QMdiArea.tabsMovable": (), + "QMdiArea.testOption": ('PySide2.QtWidgets.QMdiArea.AreaOption',), + "QMdiArea.tileSubWindows": (), + "QMdiArea.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiArea.viewMode": (), + "QMdiArea.viewportEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QMdiSubWindow: + "QMdiSubWindow.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMdiSubWindow.changeEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiSubWindow.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMdiSubWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMdiSubWindow.event": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiSubWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMdiSubWindow.isShaded": (), + "QMdiSubWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMdiSubWindow.keyboardPageStep": (), + "QMdiSubWindow.keyboardSingleStep": (), + "QMdiSubWindow.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.maximizedButtonsWidget": (), + "QMdiSubWindow.maximizedSystemMenuIconWidget": (), + "QMdiSubWindow.mdiArea": (), + "QMdiSubWindow.minimumSizeHint": (), + "QMdiSubWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QMdiSubWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiSubWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiSubWindow.setKeyboardPageStep": ('int',), + "QMdiSubWindow.setKeyboardSingleStep": ('int',), + "QMdiSubWindow.setOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption', 'bool'), + "QMdiSubWindow.setSystemMenu": ('PySide2.QtWidgets.QMenu',), + "QMdiSubWindow.setWidget": ('PySide2.QtWidgets.QWidget',), + "QMdiSubWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiSubWindow.showShaded": (), + "QMdiSubWindow.showSystemMenu": (), + "QMdiSubWindow.sizeHint": (), + "QMdiSubWindow.systemMenu": (), + "QMdiSubWindow.testOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption',), + "QMdiSubWindow.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiSubWindow.widget": (), + + # class PySide2.QtWidgets.QMenu: + "QMenu.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QMenu.actionAt": ('PySide2.QtCore.QPoint',), + "QMenu.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenu.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenu.activeAction": (), + "QMenu.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtGui.QIcon', 'str', 'object', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('str', 'object', 'PySide2.QtGui.QKeySequence')], + "QMenu.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenu.addSection": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QMenu.addSeparator": (), + "QMenu.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenu.clear": (), + "QMenu.columnCount": (), + "QMenu.defaultAction": (), + "QMenu.enterEvent": ('PySide2.QtCore.QEvent',), + "QMenu.event": ('PySide2.QtCore.QEvent',), + "QMenu.exec_": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), ('list', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget')], + "QMenu.focusNextPrevChild": ('bool',), + "QMenu.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMenu.hideTearOffMenu": (), + "QMenu.icon": (), + "QMenu.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenu.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenu.insertSection": [('PySide2.QtWidgets.QAction', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction', 'str')], + "QMenu.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenu.isEmpty": (), + "QMenu.isTearOffEnabled": (), + "QMenu.isTearOffMenuVisible": (), + "QMenu.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenu.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenu.menuAction": (), + "QMenu.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenu.popup": ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), + "QMenu.separatorsCollapsible": (), + "QMenu.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setAsDockMenu": (), + "QMenu.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setIcon": ('PySide2.QtGui.QIcon',), + "QMenu.setSeparatorsCollapsible": ('bool',), + "QMenu.setTearOffEnabled": ('bool',), + "QMenu.setTitle": ('str',), + "QMenu.setToolTipsVisible": ('bool',), + "QMenu.showTearOffMenu": [(), ('PySide2.QtCore.QPoint',)], + "QMenu.sizeHint": (), + "QMenu.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMenu.title": (), + "QMenu.toolTipsVisible": (), + "QMenu.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QMenuBar: + "QMenuBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QMenuBar.actionAt": ('PySide2.QtCore.QPoint',), + "QMenuBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenuBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenuBar.activeAction": (), + "QMenuBar.addAction": [('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str'), ('str', 'object')], + "QMenuBar.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenuBar.addSeparator": (), + "QMenuBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.clear": (), + "QMenuBar.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QMenuBar.event": ('PySide2.QtCore.QEvent',), + "QMenuBar.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMenuBar.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.heightForWidth": ('int',), + "QMenuBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenuBar.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenuBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenuBar.isDefaultUp": (), + "QMenuBar.isNativeMenuBar": (), + "QMenuBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenuBar.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.minimumSizeHint": (), + "QMenuBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenuBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMenuBar.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenuBar.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QMenuBar.setDefaultUp": ('bool',), + "QMenuBar.setNativeMenuBar": ('bool',), + "QMenuBar.setVisible": ('bool',), + "QMenuBar.sizeHint": (), + "QMenuBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QMessageBox: + "QMessageBox.__init__": [('PySide2.QtWidgets.QMessageBox.Icon', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget',)], + "QMessageBox.about": ('PySide2.QtWidgets.QWidget', 'str', 'str'), + "QMessageBox.aboutQt": ('PySide2.QtWidgets.QWidget', 'str'), + "QMessageBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QMessageBox.ButtonRole'), ('PySide2.QtWidgets.QMessageBox.StandardButton',), ('str', 'PySide2.QtWidgets.QMessageBox.ButtonRole')], + "QMessageBox.button": ('PySide2.QtWidgets.QMessageBox.StandardButton',), + "QMessageBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.buttonText": ('int',), + "QMessageBox.buttons": (), + "QMessageBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QMessageBox.checkBox": (), + "QMessageBox.clickedButton": (), + "QMessageBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMessageBox.critical": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.defaultButton": (), + "QMessageBox.detailedText": (), + "QMessageBox.escapeButton": (), + "QMessageBox.event": ('PySide2.QtCore.QEvent',), + "QMessageBox.icon": (), + "QMessageBox.iconPixmap": (), + "QMessageBox.information": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.informativeText": (), + "QMessageBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMessageBox.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QMessageBox.question": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMessageBox.setButtonText": ('int', 'str'), + "QMessageBox.setCheckBox": ('PySide2.QtWidgets.QCheckBox',), + "QMessageBox.setDefaultButton": [('PySide2.QtWidgets.QMessageBox.StandardButton',), ('PySide2.QtWidgets.QPushButton',)], + "QMessageBox.setDetailedText": ('str',), + "QMessageBox.setEscapeButton": [('PySide2.QtWidgets.QAbstractButton',), ('PySide2.QtWidgets.QMessageBox.StandardButton',)], + "QMessageBox.setIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.setIconPixmap": ('PySide2.QtGui.QPixmap',), + "QMessageBox.setInformativeText": ('str',), + "QMessageBox.setStandardButtons": ('StandardButtons',), + "QMessageBox.setText": ('str',), + "QMessageBox.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QMessageBox.setTextInteractionFlags": ('TextInteractionFlags',), + "QMessageBox.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QMessageBox.setWindowTitle": ('str',), + "QMessageBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMessageBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.standardButtons": (), + "QMessageBox.standardIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.text": (), + "QMessageBox.textFormat": (), + "QMessageBox.textInteractionFlags": (), + "QMessageBox.warning": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + + # class PySide2.QtWidgets.QMouseEventTransition: + "QMouseEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QMouseEventTransition.button": (), + "QMouseEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.hitTestPath": (), + "QMouseEventTransition.modifierMask": (), + "QMouseEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QMouseEventTransition.setHitTestPath": ('PySide2.QtGui.QPainterPath',), + "QMouseEventTransition.setModifierMask": ('KeyboardModifiers',), + + # class PySide2.QtWidgets.QOpenGLWidget: + "QOpenGLWidget.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QOpenGLWidget.context": (), + "QOpenGLWidget.defaultFramebufferObject": (), + "QOpenGLWidget.doneCurrent": (), + "QOpenGLWidget.event": ('PySide2.QtCore.QEvent',), + "QOpenGLWidget.format": (), + "QOpenGLWidget.grabFramebuffer": (), + "QOpenGLWidget.initializeGL": (), + "QOpenGLWidget.isValid": (), + "QOpenGLWidget.makeCurrent": (), + "QOpenGLWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWidget.paintEngine": (), + "QOpenGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWidget.paintGL": (), + "QOpenGLWidget.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWidget.resizeGL": ('int', 'int'), + "QOpenGLWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLWidget.setUpdateBehavior": ('PySide2.QtWidgets.QOpenGLWidget.UpdateBehavior',), + "QOpenGLWidget.updateBehavior": (), + + # class PySide2.QtWidgets.QPanGesture: + "QPanGesture.__init__": ('PySide2.QtCore.QObject',), + "QPanGesture.acceleration": (), + "QPanGesture.delta": (), + "QPanGesture.lastOffset": (), + "QPanGesture.offset": (), + "QPanGesture.setAcceleration": ('float',), + "QPanGesture.setLastOffset": ('PySide2.QtCore.QPointF',), + "QPanGesture.setOffset": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QPinchGesture: + "QPinchGesture.__init__": ('PySide2.QtCore.QObject',), + "QPinchGesture.centerPoint": (), + "QPinchGesture.changeFlags": (), + "QPinchGesture.lastCenterPoint": (), + "QPinchGesture.lastRotationAngle": (), + "QPinchGesture.lastScaleFactor": (), + "QPinchGesture.rotationAngle": (), + "QPinchGesture.scaleFactor": (), + "QPinchGesture.setCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setChangeFlags": ('ChangeFlags',), + "QPinchGesture.setLastCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setLastRotationAngle": ('float',), + "QPinchGesture.setLastScaleFactor": ('float',), + "QPinchGesture.setRotationAngle": ('float',), + "QPinchGesture.setScaleFactor": ('float',), + "QPinchGesture.setStartCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setTotalChangeFlags": ('ChangeFlags',), + "QPinchGesture.setTotalRotationAngle": ('float',), + "QPinchGesture.setTotalScaleFactor": ('float',), + "QPinchGesture.startCenterPoint": (), + "QPinchGesture.totalChangeFlags": (), + "QPinchGesture.totalRotationAngle": (), + "QPinchGesture.totalScaleFactor": (), + + # class PySide2.QtWidgets.QPlainTextDocumentLayout: + "QPlainTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QPlainTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.cursorWidth": (), + "QPlainTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QPlainTextDocumentLayout.documentSize": (), + "QPlainTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QPlainTextDocumentLayout.ensureBlockLayout": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QPlainTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QPlainTextDocumentLayout.pageCount": (), + "QPlainTextDocumentLayout.requestUpdate": (), + "QPlainTextDocumentLayout.setCursorWidth": ('int',), + + # class PySide2.QtWidgets.QPlainTextEdit: + "QPlainTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPlainTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.appendHtml": ('str',), + "QPlainTextEdit.appendPlainText": ('str',), + "QPlainTextEdit.backgroundVisible": (), + "QPlainTextEdit.blockBoundingGeometry": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockCount": (), + "QPlainTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.canPaste": (), + "QPlainTextEdit.centerCursor": (), + "QPlainTextEdit.centerOnScroll": (), + "QPlainTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.clear": (), + "QPlainTextEdit.contentOffset": (), + "QPlainTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QPlainTextEdit.copy": (), + "QPlainTextEdit.createMimeDataFromSelection": (), + "QPlainTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QPlainTextEdit.currentCharFormat": (), + "QPlainTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QPlainTextEdit.cursorWidth": (), + "QPlainTextEdit.cut": (), + "QPlainTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.document": (), + "QPlainTextEdit.documentTitle": (), + "QPlainTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QPlainTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QPlainTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QPlainTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QPlainTextEdit.ensureCursorVisible": (), + "QPlainTextEdit.event": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.extraSelections": (), + "QPlainTextEdit.find": [('PySide2.QtCore.QRegExp', 'FindFlags'), ('int',), ('str', 'FindFlags')], + "QPlainTextEdit.firstVisibleBlock": (), + "QPlainTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.focusNextPrevChild": ('bool',), + "QPlainTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.getPaintContext": (), + "QPlainTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QPlainTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QPlainTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.insertPlainText": ('str',), + "QPlainTextEdit.isReadOnly": (), + "QPlainTextEdit.isUndoRedoEnabled": (), + "QPlainTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.lineWrapMode": (), + "QPlainTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QPlainTextEdit.maximumBlockCount": (), + "QPlainTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QPlainTextEdit.overwriteMode": (), + "QPlainTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPlainTextEdit.paste": (), + "QPlainTextEdit.placeholderText": (), + "QPlainTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QPlainTextEdit.redo": (), + "QPlainTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QPlainTextEdit.scrollContentsBy": ('int', 'int'), + "QPlainTextEdit.selectAll": (), + "QPlainTextEdit.setBackgroundVisible": ('bool',), + "QPlainTextEdit.setCenterOnScroll": ('bool',), + "QPlainTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.setCursorWidth": ('int',), + "QPlainTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QPlainTextEdit.setDocumentTitle": ('str',), + "QPlainTextEdit.setExtraSelections": ('list',), + "QPlainTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QPlainTextEdit.LineWrapMode',), + "QPlainTextEdit.setMaximumBlockCount": ('int',), + "QPlainTextEdit.setOverwriteMode": ('bool',), + "QPlainTextEdit.setPlaceholderText": ('str',), + "QPlainTextEdit.setPlainText": ('str',), + "QPlainTextEdit.setReadOnly": ('bool',), + "QPlainTextEdit.setTabChangesFocus": ('bool',), + "QPlainTextEdit.setTabStopWidth": ('int',), + "QPlainTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.setTextInteractionFlags": ('TextInteractionFlags',), + "QPlainTextEdit.setUndoRedoEnabled": ('bool',), + "QPlainTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QPlainTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QPlainTextEdit.tabChangesFocus": (), + "QPlainTextEdit.tabStopWidth": (), + "QPlainTextEdit.textCursor": (), + "QPlainTextEdit.textInteractionFlags": (), + "QPlainTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QPlainTextEdit.toPlainText": (), + "QPlainTextEdit.undo": (), + "QPlainTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QPlainTextEdit.wordWrapMode": (), + "QPlainTextEdit.zoomIn": ('int',), + "QPlainTextEdit.zoomInF": ('float',), + "QPlainTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QProgressBar: + "QProgressBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QProgressBar.alignment": (), + "QProgressBar.event": ('PySide2.QtCore.QEvent',), + "QProgressBar.format": (), + "QProgressBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionProgressBar',), + "QProgressBar.invertedAppearance": (), + "QProgressBar.isTextVisible": (), + "QProgressBar.maximum": (), + "QProgressBar.minimum": (), + "QProgressBar.minimumSizeHint": (), + "QProgressBar.orientation": (), + "QProgressBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QProgressBar.reset": (), + "QProgressBar.resetFormat": (), + "QProgressBar.setAlignment": ('Alignment',), + "QProgressBar.setFormat": ('str',), + "QProgressBar.setInvertedAppearance": ('bool',), + "QProgressBar.setMaximum": ('int',), + "QProgressBar.setMinimum": ('int',), + "QProgressBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QProgressBar.setRange": ('int', 'int'), + "QProgressBar.setTextDirection": ('PySide2.QtWidgets.QProgressBar.Direction',), + "QProgressBar.setTextVisible": ('bool',), + "QProgressBar.setValue": ('int',), + "QProgressBar.sizeHint": (), + "QProgressBar.text": (), + "QProgressBar.textDirection": (), + "QProgressBar.value": (), + + # class PySide2.QtWidgets.QProgressDialog: + "QProgressDialog.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'str', 'int', 'int', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QProgressDialog.autoClose": (), + "QProgressDialog.autoReset": (), + "QProgressDialog.cancel": (), + "QProgressDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QProgressDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QProgressDialog.forceShow": (), + "QProgressDialog.labelText": (), + "QProgressDialog.maximum": (), + "QProgressDialog.minimum": (), + "QProgressDialog.minimumDuration": (), + "QProgressDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QProgressDialog.reset": (), + "QProgressDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QProgressDialog.setAutoClose": ('bool',), + "QProgressDialog.setAutoReset": ('bool',), + "QProgressDialog.setBar": ('PySide2.QtWidgets.QProgressBar',), + "QProgressDialog.setCancelButton": ('PySide2.QtWidgets.QPushButton',), + "QProgressDialog.setCancelButtonText": ('str',), + "QProgressDialog.setLabel": ('PySide2.QtWidgets.QLabel',), + "QProgressDialog.setLabelText": ('str',), + "QProgressDialog.setMaximum": ('int',), + "QProgressDialog.setMinimum": ('int',), + "QProgressDialog.setMinimumDuration": ('int',), + "QProgressDialog.setRange": ('int', 'int'), + "QProgressDialog.setValue": ('int',), + "QProgressDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QProgressDialog.sizeHint": (), + "QProgressDialog.value": (), + "QProgressDialog.wasCanceled": (), + + # class PySide2.QtWidgets.QPushButton: + "QPushButton.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPushButton.autoDefault": (), + "QPushButton.event": ('PySide2.QtCore.QEvent',), + "QPushButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QPushButton.isDefault": (), + "QPushButton.isFlat": (), + "QPushButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPushButton.menu": (), + "QPushButton.minimumSizeHint": (), + "QPushButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPushButton.setAutoDefault": ('bool',), + "QPushButton.setDefault": ('bool',), + "QPushButton.setFlat": ('bool',), + "QPushButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QPushButton.showMenu": (), + "QPushButton.sizeHint": (), + + # class PySide2.QtWidgets.QRadioButton: + "QRadioButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QRadioButton.event": ('PySide2.QtCore.QEvent',), + "QRadioButton.hitButton": ('PySide2.QtCore.QPoint',), + "QRadioButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QRadioButton.minimumSizeHint": (), + "QRadioButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QRadioButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRadioButton.sizeHint": (), + + # class PySide2.QtWidgets.QRubberBand: + "QRubberBand.__init__": ('PySide2.QtWidgets.QRubberBand.Shape', 'PySide2.QtWidgets.QWidget'), + "QRubberBand.changeEvent": ('PySide2.QtCore.QEvent',), + "QRubberBand.event": ('PySide2.QtCore.QEvent',), + "QRubberBand.initStyleOption": ('PySide2.QtWidgets.QStyleOptionRubberBand',), + "QRubberBand.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRubberBand.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QRubberBand.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRubberBand.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QRubberBand.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QRubberBand.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRubberBand.shape": (), + "QRubberBand.showEvent": ('PySide2.QtGui.QShowEvent',), + + # class PySide2.QtWidgets.QScrollArea: + "QScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.alignment": (), + "QScrollArea.ensureVisible": ('int', 'int', 'int', 'int'), + "QScrollArea.ensureWidgetVisible": ('PySide2.QtWidgets.QWidget', 'int', 'int'), + "QScrollArea.event": ('PySide2.QtCore.QEvent',), + "QScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QScrollArea.focusNextPrevChild": ('bool',), + "QScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QScrollArea.scrollContentsBy": ('int', 'int'), + "QScrollArea.setAlignment": ('Alignment',), + "QScrollArea.setWidget": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.setWidgetResizable": ('bool',), + "QScrollArea.sizeHint": (), + "QScrollArea.takeWidget": (), + "QScrollArea.viewportSizeHint": (), + "QScrollArea.widget": (), + "QScrollArea.widgetResizable": (), + + # class PySide2.QtWidgets.QScrollBar: + "QScrollBar.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QScrollBar.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QScrollBar.event": ('PySide2.QtCore.QEvent',), + "QScrollBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QScrollBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QScrollBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QScrollBar.sizeHint": (), + "QScrollBar.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QScrollBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QShortcut: + "QShortcut.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'Callable', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtWidgets.QWidget',)], + "QShortcut.autoRepeat": (), + "QShortcut.context": (), + "QShortcut.event": ('PySide2.QtCore.QEvent',), + "QShortcut.id": (), + "QShortcut.isEnabled": (), + "QShortcut.key": (), + "QShortcut.parentWidget": (), + "QShortcut.setAutoRepeat": ('bool',), + "QShortcut.setContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QShortcut.setEnabled": ('bool',), + "QShortcut.setKey": ('PySide2.QtGui.QKeySequence',), + "QShortcut.setWhatsThis": ('str',), + "QShortcut.whatsThis": (), + + # class PySide2.QtWidgets.QSizeGrip: + "QSizeGrip.__init__": ('PySide2.QtWidgets.QWidget',), + "QSizeGrip.event": ('PySide2.QtCore.QEvent',), + "QSizeGrip.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QSizeGrip.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QSizeGrip.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QSizeGrip.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSizeGrip.setVisible": ('bool',), + "QSizeGrip.showEvent": ('PySide2.QtGui.QShowEvent',), + "QSizeGrip.sizeHint": (), + + # class PySide2.QtWidgets.QSizePolicy: + "QSizePolicy.__init__": [(), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QSizePolicy.__copy__": (), + "QSizePolicy.controlType": (), + "QSizePolicy.expandingDirections": (), + "QSizePolicy.hasHeightForWidth": (), + "QSizePolicy.hasWidthForHeight": (), + "QSizePolicy.horizontalPolicy": (), + "QSizePolicy.horizontalStretch": (), + "QSizePolicy.retainSizeWhenHidden": (), + "QSizePolicy.setControlType": ('PySide2.QtWidgets.QSizePolicy.ControlType',), + "QSizePolicy.setHeightForWidth": ('bool',), + "QSizePolicy.setHorizontalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setHorizontalStretch": ('int',), + "QSizePolicy.setRetainSizeWhenHidden": ('bool',), + "QSizePolicy.setVerticalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setVerticalStretch": ('int',), + "QSizePolicy.setWidthForHeight": ('bool',), + "QSizePolicy.transpose": (), + "QSizePolicy.transposed": (), + "QSizePolicy.verticalPolicy": (), + "QSizePolicy.verticalStretch": (), + + # class PySide2.QtWidgets.QSlider: + "QSlider.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSlider.event": ('PySide2.QtCore.QEvent',), + "QSlider.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QSlider.minimumSizeHint": (), + "QSlider.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSlider.setTickInterval": ('int',), + "QSlider.setTickPosition": ('PySide2.QtWidgets.QSlider.TickPosition',), + "QSlider.sizeHint": (), + "QSlider.tickInterval": (), + "QSlider.tickPosition": (), + + # class PySide2.QtWidgets.QSpacerItem: + "QSpacerItem.__init__": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.changeSize": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.expandingDirections": (), + "QSpacerItem.geometry": (), + "QSpacerItem.isEmpty": (), + "QSpacerItem.maximumSize": (), + "QSpacerItem.minimumSize": (), + "QSpacerItem.setGeometry": ('PySide2.QtCore.QRect',), + "QSpacerItem.sizeHint": (), + "QSpacerItem.sizePolicy": (), + "QSpacerItem.spacerItem": (), + + # class PySide2.QtWidgets.QSpinBox: + "QSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QSpinBox.cleanText": (), + "QSpinBox.displayIntegerBase": (), + "QSpinBox.event": ('PySide2.QtCore.QEvent',), + "QSpinBox.fixup": ('str',), + "QSpinBox.maximum": (), + "QSpinBox.minimum": (), + "QSpinBox.prefix": (), + "QSpinBox.setDisplayIntegerBase": ('int',), + "QSpinBox.setMaximum": ('int',), + "QSpinBox.setMinimum": ('int',), + "QSpinBox.setPrefix": ('str',), + "QSpinBox.setRange": ('int', 'int'), + "QSpinBox.setSingleStep": ('int',), + "QSpinBox.setSuffix": ('str',), + "QSpinBox.setValue": ('int',), + "QSpinBox.singleStep": (), + "QSpinBox.suffix": (), + "QSpinBox.textFromValue": ('int',), + "QSpinBox.validate": ('str', 'int'), + "QSpinBox.value": (), + "QSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QSplashScreen: + "QSplashScreen.__init__": [('PySide2.QtGui.QPixmap', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QPixmap', 'WindowFlags')], + "QSplashScreen.clearMessage": (), + "QSplashScreen.drawContents": ('PySide2.QtGui.QPainter',), + "QSplashScreen.event": ('PySide2.QtCore.QEvent',), + "QSplashScreen.finish": ('PySide2.QtWidgets.QWidget',), + "QSplashScreen.message": (), + "QSplashScreen.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplashScreen.pixmap": (), + "QSplashScreen.setPixmap": ('PySide2.QtGui.QPixmap',), + "QSplashScreen.showMessage": ('str', 'int', 'PySide2.QtGui.QColor'), + + # class PySide2.QtWidgets.QSplitter: + "QSplitter.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSplitter.addWidget": ('PySide2.QtWidgets.QWidget',), + "QSplitter.changeEvent": ('PySide2.QtCore.QEvent',), + "QSplitter.childEvent": ('PySide2.QtCore.QChildEvent',), + "QSplitter.childrenCollapsible": (), + "QSplitter.closestLegalPosition": ('int', 'int'), + "QSplitter.count": (), + "QSplitter.createHandle": (), + "QSplitter.event": ('PySide2.QtCore.QEvent',), + "QSplitter.getRange": ('int', 'int', 'int'), + "QSplitter.handle": ('int',), + "QSplitter.handleWidth": (), + "QSplitter.indexOf": ('PySide2.QtWidgets.QWidget',), + "QSplitter.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.isCollapsible": ('int',), + "QSplitter.minimumSizeHint": (), + "QSplitter.moveSplitter": ('int', 'int'), + "QSplitter.opaqueResize": (), + "QSplitter.orientation": (), + "QSplitter.refresh": (), + "QSplitter.replaceWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitter.restoreState": ('PySide2.QtCore.QByteArray',), + "QSplitter.saveState": (), + "QSplitter.setChildrenCollapsible": ('bool',), + "QSplitter.setCollapsible": ('int', 'bool'), + "QSplitter.setHandleWidth": ('int',), + "QSplitter.setOpaqueResize": ('bool',), + "QSplitter.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitter.setRubberBand": ('int',), + "QSplitter.setSizes": ('list',), + "QSplitter.setStretchFactor": ('int', 'int'), + "QSplitter.sizeHint": (), + "QSplitter.sizes": (), + "QSplitter.widget": ('int',), + + # class PySide2.QtWidgets.QSplitterHandle: + "QSplitterHandle.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QSplitter'), + "QSplitterHandle.closestLegalPosition": ('int',), + "QSplitterHandle.event": ('PySide2.QtCore.QEvent',), + "QSplitterHandle.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.moveSplitter": ('int',), + "QSplitterHandle.opaqueResize": (), + "QSplitterHandle.orientation": (), + "QSplitterHandle.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSplitterHandle.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitterHandle.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitterHandle.sizeHint": (), + "QSplitterHandle.splitter": (), + + # class PySide2.QtWidgets.QStackedLayout: + "QStackedLayout.__init__": [(), ('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QStackedLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QStackedLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.count": (), + "QStackedLayout.currentIndex": (), + "QStackedLayout.currentWidget": (), + "QStackedLayout.hasHeightForWidth": (), + "QStackedLayout.heightForWidth": ('int',), + "QStackedLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedLayout.itemAt": ('int',), + "QStackedLayout.minimumSize": (), + "QStackedLayout.setCurrentIndex": ('int',), + "QStackedLayout.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QStackedLayout.setStackingMode": ('PySide2.QtWidgets.QStackedLayout.StackingMode',), + "QStackedLayout.sizeHint": (), + "QStackedLayout.stackingMode": (), + "QStackedLayout.takeAt": ('int',), + "QStackedLayout.widget": [(), ('int',)], + + # class PySide2.QtWidgets.QStackedWidget: + "QStackedWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.count": (), + "QStackedWidget.currentIndex": (), + "QStackedWidget.currentWidget": (), + "QStackedWidget.event": ('PySide2.QtCore.QEvent',), + "QStackedWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedWidget.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.setCurrentIndex": ('int',), + "QStackedWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.widget": ('int',), + + # class PySide2.QtWidgets.QStatusBar: + "QStatusBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.addPermanentWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.addWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.clearMessage": (), + "QStatusBar.currentMessage": (), + "QStatusBar.event": ('PySide2.QtCore.QEvent',), + "QStatusBar.hideOrShow": (), + "QStatusBar.insertPermanentWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.isSizeGripEnabled": (), + "QStatusBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QStatusBar.reformat": (), + "QStatusBar.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QStatusBar.setSizeGripEnabled": ('bool',), + "QStatusBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QStatusBar.showMessage": ('str', 'int'), + + # class PySide2.QtWidgets.QStyle: + "QStyle.__init__": (), + "QStyle.alignedRect": ('PySide2.QtCore.Qt.LayoutDirection', 'Alignment', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QRect'), + "QStyle.combinedLayoutSpacing": ('ControlTypes', 'ControlTypes', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawItemPixmap": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.drawItemText": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QStyle.itemPixmapRect": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.itemTextRect": ('PySide2.QtGui.QFontMetrics', 'PySide2.QtCore.QRect', 'int', 'bool', 'str'), + "QStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.proxy": (), + "QStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QStyle.sliderPositionFromValue": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.sliderValueFromPosition": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.standardPalette": (), + "QStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.visualAlignment": ('PySide2.QtCore.Qt.LayoutDirection', 'Alignment'), + "QStyle.visualPos": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QPoint'), + "QStyle.visualRect": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QRect'), + + # class PySide2.QtWidgets.QStyleFactory: + "QStyleFactory.__init__": (), + "QStyleFactory.create": ('str',), + "QStyleFactory.keys": (), + + # class PySide2.QtWidgets.QStyleHintReturn: + "QStyleHintReturn.__init__": ('int', 'int'), + + # class PySide2.QtWidgets.QStyleHintReturnMask: + "QStyleHintReturnMask.__init__": (), + + # class PySide2.QtWidgets.QStyleHintReturnVariant: + "QStyleHintReturnVariant.__init__": (), + + # class PySide2.QtWidgets.QStyleOption: + "QStyleOption.__init__": [('PySide2.QtWidgets.QStyleOption',), ('int', 'int')], + "QStyleOption.init": ('PySide2.QtWidgets.QWidget',), + "QStyleOption.initFrom": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QStyleOptionButton: + "QStyleOptionButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComboBox: + "QStyleOptionComboBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionComboBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComplex: + "QStyleOptionComplex.__init__": [('PySide2.QtWidgets.QStyleOptionComplex',), ('int', 'int')], + + # class PySide2.QtWidgets.QStyleOptionDockWidget: + "QStyleOptionDockWidget.__init__": [(), ('PySide2.QtWidgets.QStyleOptionDockWidget',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFocusRect: + "QStyleOptionFocusRect.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFocusRect',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFrame: + "QStyleOptionFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionGraphicsItem: + "QStyleOptionGraphicsItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGraphicsItem',), ('int',)], + "QStyleOptionGraphicsItem.levelOfDetailFromTransform": ('PySide2.QtGui.QTransform',), + + # class PySide2.QtWidgets.QStyleOptionGroupBox: + "QStyleOptionGroupBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGroupBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionHeader: + "QStyleOptionHeader.__init__": [(), ('PySide2.QtWidgets.QStyleOptionHeader',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionMenuItem: + "QStyleOptionMenuItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionMenuItem',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionProgressBar: + "QStyleOptionProgressBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionProgressBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionRubberBand: + "QStyleOptionRubberBand.__init__": [(), ('PySide2.QtWidgets.QStyleOptionRubberBand',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSizeGrip: + "QStyleOptionSizeGrip.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSizeGrip',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSlider: + "QStyleOptionSlider.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSlider',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSpinBox: + "QStyleOptionSpinBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSpinBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTab: + "QStyleOptionTab.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTab',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabBarBase: + "QStyleOptionTabBarBase.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabBarBase',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabWidgetFrame: + "QStyleOptionTabWidgetFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTitleBar: + "QStyleOptionTitleBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTitleBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBar: + "QStyleOptionToolBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBox: + "QStyleOptionToolBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolButton: + "QStyleOptionToolButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionViewItem: + "QStyleOptionViewItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionViewItem',), ('int',)], + "QStyleOptionViewItem.__copy__": (), + + # class PySide2.QtWidgets.QStylePainter: + "QStylePainter.__init__": [(), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.begin": [('PySide2.QtGui.QPaintDevice',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex'), + "QStylePainter.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.drawItemPixmap": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStylePainter.drawItemText": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStylePainter.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.style": (), + + # class PySide2.QtWidgets.QStyledItemDelegate: + "QStyledItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QStyledItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.displayText": ('Any', 'PySide2.QtCore.QLocale'), + "QStyledItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStyledItemDelegate.initStyleOption": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.itemEditorFactory": (), + "QStyledItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QStyledItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QSwipeGesture: + "QSwipeGesture.__init__": ('PySide2.QtCore.QObject',), + "QSwipeGesture.horizontalDirection": (), + "QSwipeGesture.setSwipeAngle": ('float',), + "QSwipeGesture.swipeAngle": (), + "QSwipeGesture.verticalDirection": (), + + # class PySide2.QtWidgets.QSystemTrayIcon: + "QSystemTrayIcon.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'PySide2.QtCore.QObject')], + "QSystemTrayIcon.contextMenu": (), + "QSystemTrayIcon.event": ('PySide2.QtCore.QEvent',), + "QSystemTrayIcon.geometry": (), + "QSystemTrayIcon.hide": (), + "QSystemTrayIcon.icon": (), + "QSystemTrayIcon.isSystemTrayAvailable": (), + "QSystemTrayIcon.isVisible": (), + "QSystemTrayIcon.setContextMenu": ('PySide2.QtWidgets.QMenu',), + "QSystemTrayIcon.setIcon": ('PySide2.QtGui.QIcon',), + "QSystemTrayIcon.setToolTip": ('str',), + "QSystemTrayIcon.setVisible": ('bool',), + "QSystemTrayIcon.show": (), + "QSystemTrayIcon.showMessage": [('str', 'str', 'PySide2.QtGui.QIcon', 'int'), ('str', 'str', 'PySide2.QtWidgets.QSystemTrayIcon.MessageIcon', 'int')], + "QSystemTrayIcon.supportsMessages": (), + "QSystemTrayIcon.toolTip": (), + + # class PySide2.QtWidgets.QTabBar: + "QTabBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabBar.accessibleTabName": ('int',), + "QTabBar.addTab": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QTabBar.autoHide": (), + "QTabBar.changeCurrentOnDrag": (), + "QTabBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabBar.count": (), + "QTabBar.currentIndex": (), + "QTabBar.documentMode": (), + "QTabBar.drawBase": (), + "QTabBar.elideMode": (), + "QTabBar.event": ('PySide2.QtCore.QEvent',), + "QTabBar.expanding": (), + "QTabBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QTabBar.iconSize": (), + "QTabBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTab', 'int'), + "QTabBar.insertTab": [('int', 'PySide2.QtGui.QIcon', 'str'), ('int', 'str')], + "QTabBar.isMovable": (), + "QTabBar.isTabEnabled": ('int',), + "QTabBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabBar.minimumSizeHint": (), + "QTabBar.minimumTabSizeHint": ('int',), + "QTabBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.moveTab": ('int', 'int'), + "QTabBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabBar.removeTab": ('int',), + "QTabBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabBar.selectionBehaviorOnRemove": (), + "QTabBar.setAccessibleTabName": ('int', 'str'), + "QTabBar.setAutoHide": ('bool',), + "QTabBar.setChangeCurrentOnDrag": ('bool',), + "QTabBar.setCurrentIndex": ('int',), + "QTabBar.setDocumentMode": ('bool',), + "QTabBar.setDrawBase": ('bool',), + "QTabBar.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabBar.setExpanding": ('bool',), + "QTabBar.setIconSize": ('PySide2.QtCore.QSize',), + "QTabBar.setMovable": ('bool',), + "QTabBar.setSelectionBehaviorOnRemove": ('PySide2.QtWidgets.QTabBar.SelectionBehavior',), + "QTabBar.setShape": ('PySide2.QtWidgets.QTabBar.Shape',), + "QTabBar.setTabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition', 'PySide2.QtWidgets.QWidget'), + "QTabBar.setTabData": ('int', 'Any'), + "QTabBar.setTabEnabled": ('int', 'bool'), + "QTabBar.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabBar.setTabText": ('int', 'str'), + "QTabBar.setTabTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTabBar.setTabToolTip": ('int', 'str'), + "QTabBar.setTabWhatsThis": ('int', 'str'), + "QTabBar.setTabsClosable": ('bool',), + "QTabBar.setUsesScrollButtons": ('bool',), + "QTabBar.shape": (), + "QTabBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabBar.sizeHint": (), + "QTabBar.tabAt": ('PySide2.QtCore.QPoint',), + "QTabBar.tabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition'), + "QTabBar.tabData": ('int',), + "QTabBar.tabIcon": ('int',), + "QTabBar.tabInserted": ('int',), + "QTabBar.tabLayoutChange": (), + "QTabBar.tabRect": ('int',), + "QTabBar.tabRemoved": ('int',), + "QTabBar.tabSizeHint": ('int',), + "QTabBar.tabText": ('int',), + "QTabBar.tabTextColor": ('int',), + "QTabBar.tabToolTip": ('int',), + "QTabBar.tabWhatsThis": ('int',), + "QTabBar.tabsClosable": (), + "QTabBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTabBar.usesScrollButtons": (), + "QTabBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QTabWidget: + "QTabWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.addTab": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabWidget.clear": (), + "QTabWidget.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QTabWidget.count": (), + "QTabWidget.currentIndex": (), + "QTabWidget.currentWidget": (), + "QTabWidget.documentMode": (), + "QTabWidget.elideMode": (), + "QTabWidget.event": ('PySide2.QtCore.QEvent',), + "QTabWidget.hasHeightForWidth": (), + "QTabWidget.heightForWidth": ('int',), + "QTabWidget.iconSize": (), + "QTabWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), + "QTabWidget.insertTab": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.isMovable": (), + "QTabWidget.isTabEnabled": ('int',), + "QTabWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabWidget.minimumSizeHint": (), + "QTabWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabWidget.removeTab": ('int',), + "QTabWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabWidget.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QTabWidget.setCurrentIndex": ('int',), + "QTabWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.setDocumentMode": ('bool',), + "QTabWidget.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabWidget.setIconSize": ('PySide2.QtCore.QSize',), + "QTabWidget.setMovable": ('bool',), + "QTabWidget.setTabBar": ('PySide2.QtWidgets.QTabBar',), + "QTabWidget.setTabBarAutoHide": ('bool',), + "QTabWidget.setTabEnabled": ('int', 'bool'), + "QTabWidget.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabWidget.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QTabWidget.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QTabWidget.setTabText": ('int', 'str'), + "QTabWidget.setTabToolTip": ('int', 'str'), + "QTabWidget.setTabWhatsThis": ('int', 'str'), + "QTabWidget.setTabsClosable": ('bool',), + "QTabWidget.setUsesScrollButtons": ('bool',), + "QTabWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabWidget.sizeHint": (), + "QTabWidget.tabBar": (), + "QTabWidget.tabBarAutoHide": (), + "QTabWidget.tabIcon": ('int',), + "QTabWidget.tabInserted": ('int',), + "QTabWidget.tabPosition": (), + "QTabWidget.tabRemoved": ('int',), + "QTabWidget.tabShape": (), + "QTabWidget.tabText": ('int',), + "QTabWidget.tabToolTip": ('int',), + "QTabWidget.tabWhatsThis": ('int',), + "QTabWidget.tabsClosable": (), + "QTabWidget.usesScrollButtons": (), + "QTabWidget.widget": ('int',), + + # class PySide2.QtWidgets.QTableView: + "QTableView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTableView.clearSpans": (), + "QTableView.columnAt": ('int',), + "QTableView.columnCountChanged": ('int', 'int'), + "QTableView.columnMoved": ('int', 'int', 'int'), + "QTableView.columnResized": ('int', 'int', 'int'), + "QTableView.columnSpan": ('int', 'int'), + "QTableView.columnViewportPosition": ('int',), + "QTableView.columnWidth": ('int',), + "QTableView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTableView.doItemsLayout": (), + "QTableView.gridStyle": (), + "QTableView.hideColumn": ('int',), + "QTableView.hideRow": ('int',), + "QTableView.horizontalHeader": (), + "QTableView.horizontalOffset": (), + "QTableView.horizontalScrollbarAction": ('int',), + "QTableView.indexAt": ('PySide2.QtCore.QPoint',), + "QTableView.isColumnHidden": ('int',), + "QTableView.isCornerButtonEnabled": (), + "QTableView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTableView.isRowHidden": ('int',), + "QTableView.isSortingEnabled": (), + "QTableView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QTableView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTableView.resizeColumnToContents": ('int',), + "QTableView.resizeColumnsToContents": (), + "QTableView.resizeRowToContents": ('int',), + "QTableView.resizeRowsToContents": (), + "QTableView.rowAt": ('int',), + "QTableView.rowCountChanged": ('int', 'int'), + "QTableView.rowHeight": ('int',), + "QTableView.rowMoved": ('int', 'int', 'int'), + "QTableView.rowResized": ('int', 'int', 'int'), + "QTableView.rowSpan": ('int', 'int'), + "QTableView.rowViewportPosition": ('int',), + "QTableView.scrollContentsBy": ('int', 'int'), + "QTableView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableView.selectColumn": ('int',), + "QTableView.selectRow": ('int',), + "QTableView.selectedIndexes": (), + "QTableView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTableView.setColumnHidden": ('int', 'bool'), + "QTableView.setColumnWidth": ('int', 'int'), + "QTableView.setCornerButtonEnabled": ('bool',), + "QTableView.setGridStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QTableView.setHorizontalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTableView.setRowHeight": ('int', 'int'), + "QTableView.setRowHidden": ('int', 'bool'), + "QTableView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QTableView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTableView.setShowGrid": ('bool',), + "QTableView.setSortingEnabled": ('bool',), + "QTableView.setSpan": ('int', 'int', 'int', 'int'), + "QTableView.setVerticalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setWordWrap": ('bool',), + "QTableView.showColumn": ('int',), + "QTableView.showGrid": (), + "QTableView.showRow": ('int',), + "QTableView.sizeHintForColumn": ('int',), + "QTableView.sizeHintForRow": ('int',), + "QTableView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTableView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTableView.updateGeometries": (), + "QTableView.verticalHeader": (), + "QTableView.verticalOffset": (), + "QTableView.verticalScrollbarAction": ('int',), + "QTableView.viewOptions": (), + "QTableView.viewportSizeHint": (), + "QTableView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTableView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTableView.wordWrap": (), + + # class PySide2.QtWidgets.QTableWidget: + "QTableWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'int', 'PySide2.QtWidgets.QWidget')], + "QTableWidget.cellWidget": ('int', 'int'), + "QTableWidget.clear": (), + "QTableWidget.clearContents": (), + "QTableWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.column": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.columnCount": (), + "QTableWidget.currentColumn": (), + "QTableWidget.currentItem": (), + "QTableWidget.currentRow": (), + "QTableWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTableWidget.dropMimeData": ('int', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTableWidget.editItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.event": ('PySide2.QtCore.QEvent',), + "QTableWidget.findItems": ('str', 'MatchFlags'), + "QTableWidget.horizontalHeaderItem": ('int',), + "QTableWidget.indexFromItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.insertColumn": ('int',), + "QTableWidget.insertRow": ('int',), + "QTableWidget.isItemSelected": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.isSortingEnabled": (), + "QTableWidget.item": ('int', 'int'), + "QTableWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTableWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTableWidget.itemPrototype": (), + "QTableWidget.items": ('PySide2.QtCore.QMimeData',), + "QTableWidget.mimeData": ('list',), + "QTableWidget.mimeTypes": (), + "QTableWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.removeCellWidget": ('int', 'int'), + "QTableWidget.removeColumn": ('int',), + "QTableWidget.removeRow": ('int',), + "QTableWidget.row": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.rowCount": (), + "QTableWidget.scrollToItem": ('PySide2.QtWidgets.QTableWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableWidget.selectedItems": (), + "QTableWidget.selectedRanges": (), + "QTableWidget.setCellWidget": ('int', 'int', 'PySide2.QtWidgets.QWidget'), + "QTableWidget.setColumnCount": ('int',), + "QTableWidget.setCurrentCell": [('int', 'int'), ('int', 'int', 'SelectionFlags')], + "QTableWidget.setCurrentItem": [('PySide2.QtWidgets.QTableWidgetItem',), ('PySide2.QtWidgets.QTableWidgetItem', 'SelectionFlags')], + "QTableWidget.setHorizontalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setHorizontalHeaderLabels": ('List[str]',), + "QTableWidget.setItem": ('int', 'int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setItemPrototype": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.setItemSelected": ('PySide2.QtWidgets.QTableWidgetItem', 'bool'), + "QTableWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableWidget.setRangeSelected": ('PySide2.QtWidgets.QTableWidgetSelectionRange', 'bool'), + "QTableWidget.setRowCount": ('int',), + "QTableWidget.setSortingEnabled": ('bool',), + "QTableWidget.setVerticalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setVerticalHeaderLabels": ('List[str]',), + "QTableWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTableWidget.supportedDropActions": (), + "QTableWidget.takeHorizontalHeaderItem": ('int',), + "QTableWidget.takeItem": ('int', 'int'), + "QTableWidget.takeVerticalHeaderItem": ('int',), + "QTableWidget.verticalHeaderItem": ('int',), + "QTableWidget.visualColumn": ('int',), + "QTableWidget.visualItemRect": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.visualRow": ('int',), + + # class PySide2.QtWidgets.QTableWidgetItem: + "QTableWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'int'), ('PySide2.QtWidgets.QTableWidgetItem',), ('int',), ('str', 'int')], + "QTableWidgetItem.background": (), + "QTableWidgetItem.backgroundColor": (), + "QTableWidgetItem.checkState": (), + "QTableWidgetItem.clone": (), + "QTableWidgetItem.column": (), + "QTableWidgetItem.data": ('int',), + "QTableWidgetItem.flags": (), + "QTableWidgetItem.font": (), + "QTableWidgetItem.foreground": (), + "QTableWidgetItem.icon": (), + "QTableWidgetItem.isSelected": (), + "QTableWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTableWidgetItem.row": (), + "QTableWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QTableWidgetItem.setData": ('int', 'Any'), + "QTableWidgetItem.setFlags": ('ItemFlags',), + "QTableWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QTableWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QTableWidgetItem.setSelected": ('bool',), + "QTableWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QTableWidgetItem.setStatusTip": ('str',), + "QTableWidgetItem.setText": ('str',), + "QTableWidgetItem.setTextAlignment": ('int',), + "QTableWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setToolTip": ('str',), + "QTableWidgetItem.setWhatsThis": ('str',), + "QTableWidgetItem.sizeHint": (), + "QTableWidgetItem.statusTip": (), + "QTableWidgetItem.tableWidget": (), + "QTableWidgetItem.text": (), + "QTableWidgetItem.textAlignment": (), + "QTableWidgetItem.textColor": (), + "QTableWidgetItem.toolTip": (), + "QTableWidgetItem.type": (), + "QTableWidgetItem.whatsThis": (), + "QTableWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTableWidgetSelectionRange: + "QTableWidgetSelectionRange.__init__": [(), ('PySide2.QtWidgets.QTableWidgetSelectionRange',), ('int', 'int', 'int', 'int')], + "QTableWidgetSelectionRange.__copy__": (), + "QTableWidgetSelectionRange.bottomRow": (), + "QTableWidgetSelectionRange.columnCount": (), + "QTableWidgetSelectionRange.leftColumn": (), + "QTableWidgetSelectionRange.rightColumn": (), + "QTableWidgetSelectionRange.rowCount": (), + "QTableWidgetSelectionRange.topRow": (), + + # class PySide2.QtWidgets.QTapAndHoldGesture: + "QTapAndHoldGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapAndHoldGesture.position": (), + "QTapAndHoldGesture.setPosition": ('PySide2.QtCore.QPointF',), + "QTapAndHoldGesture.setTimeout": ('int',), + "QTapAndHoldGesture.timeout": (), + + # class PySide2.QtWidgets.QTapGesture: + "QTapGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapGesture.position": (), + "QTapGesture.setPosition": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QTextBrowser: + "QTextBrowser.__init__": ('PySide2.QtWidgets.QWidget',), + "QTextBrowser.backward": (), + "QTextBrowser.backwardHistoryCount": (), + "QTextBrowser.clearHistory": (), + "QTextBrowser.event": ('PySide2.QtCore.QEvent',), + "QTextBrowser.focusNextPrevChild": ('bool',), + "QTextBrowser.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextBrowser.forward": (), + "QTextBrowser.forwardHistoryCount": (), + "QTextBrowser.historyTitle": ('int',), + "QTextBrowser.historyUrl": ('int',), + "QTextBrowser.home": (), + "QTextBrowser.isBackwardAvailable": (), + "QTextBrowser.isForwardAvailable": (), + "QTextBrowser.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextBrowser.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextBrowser.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.openExternalLinks": (), + "QTextBrowser.openLinks": (), + "QTextBrowser.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextBrowser.reload": (), + "QTextBrowser.searchPaths": (), + "QTextBrowser.setOpenExternalLinks": ('bool',), + "QTextBrowser.setOpenLinks": ('bool',), + "QTextBrowser.setSearchPaths": ('List[str]',), + "QTextBrowser.setSource": ('PySide2.QtCore.QUrl',), + "QTextBrowser.source": (), + + # class PySide2.QtWidgets.QTextEdit: + "QTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QTextEdit.acceptRichText": (), + "QTextEdit.alignment": (), + "QTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QTextEdit.append": ('str',), + "QTextEdit.autoFormatting": (), + "QTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.canPaste": (), + "QTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QTextEdit.clear": (), + "QTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QTextEdit.copy": (), + "QTextEdit.createMimeDataFromSelection": (), + "QTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QTextEdit.currentCharFormat": (), + "QTextEdit.currentFont": (), + "QTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextEdit.cursorWidth": (), + "QTextEdit.cut": (), + "QTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.document": (), + "QTextEdit.documentTitle": (), + "QTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTextEdit.ensureCursorVisible": (), + "QTextEdit.event": ('PySide2.QtCore.QEvent',), + "QTextEdit.extraSelections": (), + "QTextEdit.find": [('PySide2.QtCore.QRegExp', 'FindFlags'), ('int',), ('str', 'FindFlags')], + "QTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.focusNextPrevChild": ('bool',), + "QTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.fontFamily": (), + "QTextEdit.fontItalic": (), + "QTextEdit.fontPointSize": (), + "QTextEdit.fontUnderline": (), + "QTextEdit.fontWeight": (), + "QTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.insertHtml": ('str',), + "QTextEdit.insertPlainText": ('str',), + "QTextEdit.isReadOnly": (), + "QTextEdit.isUndoRedoEnabled": (), + "QTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.lineWrapColumnOrWidth": (), + "QTextEdit.lineWrapMode": (), + "QTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextEdit.overwriteMode": (), + "QTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextEdit.paste": (), + "QTextEdit.placeholderText": (), + "QTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextEdit.redo": (), + "QTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTextEdit.scrollContentsBy": ('int', 'int'), + "QTextEdit.scrollToAnchor": ('str',), + "QTextEdit.selectAll": (), + "QTextEdit.setAcceptRichText": ('bool',), + "QTextEdit.setAlignment": ('Alignment',), + "QTextEdit.setAutoFormatting": ('AutoFormatting',), + "QTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.setCurrentFont": ('PySide2.QtGui.QFont',), + "QTextEdit.setCursorWidth": ('int',), + "QTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QTextEdit.setDocumentTitle": ('str',), + "QTextEdit.setExtraSelections": ('list',), + "QTextEdit.setFontFamily": ('str',), + "QTextEdit.setFontItalic": ('bool',), + "QTextEdit.setFontPointSize": ('float',), + "QTextEdit.setFontUnderline": ('bool',), + "QTextEdit.setFontWeight": ('int',), + "QTextEdit.setHtml": ('str',), + "QTextEdit.setLineWrapColumnOrWidth": ('int',), + "QTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QTextEdit.LineWrapMode',), + "QTextEdit.setOverwriteMode": ('bool',), + "QTextEdit.setPlaceholderText": ('str',), + "QTextEdit.setPlainText": ('str',), + "QTextEdit.setReadOnly": ('bool',), + "QTextEdit.setTabChangesFocus": ('bool',), + "QTextEdit.setTabStopWidth": ('int',), + "QTextEdit.setText": ('str',), + "QTextEdit.setTextBackgroundColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.setTextInteractionFlags": ('TextInteractionFlags',), + "QTextEdit.setUndoRedoEnabled": ('bool',), + "QTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTextEdit.tabChangesFocus": (), + "QTextEdit.tabStopWidth": (), + "QTextEdit.textBackgroundColor": (), + "QTextEdit.textColor": (), + "QTextEdit.textCursor": (), + "QTextEdit.textInteractionFlags": (), + "QTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTextEdit.toHtml": (), + "QTextEdit.toPlainText": (), + "QTextEdit.undo": (), + "QTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QTextEdit.wordWrapMode": (), + "QTextEdit.zoomIn": ('int',), + "QTextEdit.zoomInF": ('float',), + "QTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QTileRules: + "QTileRules.__init__": [('PySide2.QtCore.Qt.TileRule',), ('PySide2.QtCore.Qt.TileRule', 'PySide2.QtCore.Qt.TileRule'), ('PySide2.QtWidgets.QTileRules',)], + "QTileRules.__copy__": (), + + # class PySide2.QtWidgets.QTimeEdit: + "QTimeEdit.__init__": [('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QToolBar: + "QToolBar.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QToolBar.actionAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QToolBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QToolBar.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str')], + "QToolBar.addSeparator": (), + "QToolBar.addWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBar.allowedAreas": (), + "QToolBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBar.clear": (), + "QToolBar.event": ('PySide2.QtCore.QEvent',), + "QToolBar.iconSize": (), + "QToolBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolBar',), + "QToolBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QToolBar.insertWidget": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget'), + "QToolBar.isAreaAllowed": ('PySide2.QtCore.Qt.ToolBarArea',), + "QToolBar.isFloatable": (), + "QToolBar.isFloating": (), + "QToolBar.isMovable": (), + "QToolBar.orientation": (), + "QToolBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolBar.setAllowedAreas": ('ToolBarAreas',), + "QToolBar.setFloatable": ('bool',), + "QToolBar.setIconSize": ('PySide2.QtCore.QSize',), + "QToolBar.setMovable": ('bool',), + "QToolBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QToolBar.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolBar.toggleViewAction": (), + "QToolBar.toolButtonStyle": (), + "QToolBar.widgetForAction": ('PySide2.QtWidgets.QAction',), + + # class PySide2.QtWidgets.QToolBox: + "QToolBox.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QToolBox.addItem": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBox.count": (), + "QToolBox.currentIndex": (), + "QToolBox.currentWidget": (), + "QToolBox.event": ('PySide2.QtCore.QEvent',), + "QToolBox.indexOf": ('PySide2.QtWidgets.QWidget',), + "QToolBox.insertItem": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.isItemEnabled": ('int',), + "QToolBox.itemIcon": ('int',), + "QToolBox.itemInserted": ('int',), + "QToolBox.itemRemoved": ('int',), + "QToolBox.itemText": ('int',), + "QToolBox.itemToolTip": ('int',), + "QToolBox.removeItem": ('int',), + "QToolBox.setCurrentIndex": ('int',), + "QToolBox.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBox.setItemEnabled": ('int', 'bool'), + "QToolBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QToolBox.setItemText": ('int', 'str'), + "QToolBox.setItemToolTip": ('int', 'str'), + "QToolBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QToolBox.widget": ('int',), + + # class PySide2.QtWidgets.QToolButton: + "QToolButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QToolButton.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolButton.arrowType": (), + "QToolButton.autoRaise": (), + "QToolButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.defaultAction": (), + "QToolButton.enterEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.event": ('PySide2.QtCore.QEvent',), + "QToolButton.hitButton": ('PySide2.QtCore.QPoint',), + "QToolButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolButton',), + "QToolButton.leaveEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.menu": (), + "QToolButton.minimumSizeHint": (), + "QToolButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.nextCheckState": (), + "QToolButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolButton.popupMode": (), + "QToolButton.setArrowType": ('PySide2.QtCore.Qt.ArrowType',), + "QToolButton.setAutoRaise": ('bool',), + "QToolButton.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QToolButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QToolButton.setPopupMode": ('PySide2.QtWidgets.QToolButton.ToolButtonPopupMode',), + "QToolButton.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolButton.showMenu": (), + "QToolButton.sizeHint": (), + "QToolButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QToolButton.toolButtonStyle": (), + + # class PySide2.QtWidgets.QToolTip: + "QToolTip.font": (), + "QToolTip.hideText": (), + "QToolTip.isVisible": (), + "QToolTip.palette": (), + "QToolTip.setFont": ('PySide2.QtGui.QFont',), + "QToolTip.setPalette": ('PySide2.QtGui.QPalette',), + "QToolTip.showText": [('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect', 'int')], + "QToolTip.text": (), + + # class PySide2.QtWidgets.QTreeView: + "QTreeView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeView.allColumnsShowFocus": (), + "QTreeView.autoExpandDelay": (), + "QTreeView.collapse": ('PySide2.QtCore.QModelIndex',), + "QTreeView.collapseAll": (), + "QTreeView.columnAt": ('int',), + "QTreeView.columnCountChanged": ('int', 'int'), + "QTreeView.columnMoved": (), + "QTreeView.columnResized": ('int', 'int', 'int'), + "QTreeView.columnViewportPosition": ('int',), + "QTreeView.columnWidth": ('int',), + "QTreeView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTreeView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QTreeView.doItemsLayout": (), + "QTreeView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTreeView.drawBranches": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawRow": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawTree": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QRegion'), + "QTreeView.expand": ('PySide2.QtCore.QModelIndex',), + "QTreeView.expandAll": (), + "QTreeView.expandToDepth": ('int',), + "QTreeView.expandsOnDoubleClick": (), + "QTreeView.header": (), + "QTreeView.hideColumn": ('int',), + "QTreeView.horizontalOffset": (), + "QTreeView.horizontalScrollbarAction": ('int',), + "QTreeView.indentation": (), + "QTreeView.indexAbove": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexAt": ('PySide2.QtCore.QPoint',), + "QTreeView.indexBelow": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexRowSizeHint": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isAnimated": (), + "QTreeView.isColumnHidden": ('int',), + "QTreeView.isExpanded": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isHeaderHidden": (), + "QTreeView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isRowHidden": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isSortingEnabled": (), + "QTreeView.itemsExpandable": (), + "QTreeView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTreeView.keyboardSearch": ('str',), + "QTreeView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QTreeView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTreeView.reexpand": (), + "QTreeView.reset": (), + "QTreeView.resetIndentation": (), + "QTreeView.resizeColumnToContents": ('int',), + "QTreeView.rootIsDecorated": (), + "QTreeView.rowHeight": ('PySide2.QtCore.QModelIndex',), + "QTreeView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.scrollContentsBy": ('int', 'int'), + "QTreeView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeView.selectAll": (), + "QTreeView.selectedIndexes": (), + "QTreeView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTreeView.setAllColumnsShowFocus": ('bool',), + "QTreeView.setAnimated": ('bool',), + "QTreeView.setAutoExpandDelay": ('int',), + "QTreeView.setColumnHidden": ('int', 'bool'), + "QTreeView.setColumnWidth": ('int', 'int'), + "QTreeView.setExpanded": ('PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setExpandsOnDoubleClick": ('bool',), + "QTreeView.setFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTreeView.setHeaderHidden": ('bool',), + "QTreeView.setIndentation": ('int',), + "QTreeView.setItemsExpandable": ('bool',), + "QTreeView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeView.setRootIsDecorated": ('bool',), + "QTreeView.setRowHidden": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QTreeView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeView.setSortingEnabled": ('bool',), + "QTreeView.setTreePosition": ('int',), + "QTreeView.setUniformRowHeights": ('bool',), + "QTreeView.setWordWrap": ('bool',), + "QTreeView.showColumn": ('int',), + "QTreeView.sizeHintForColumn": ('int',), + "QTreeView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTreeView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTreeView.treePosition": (), + "QTreeView.uniformRowHeights": (), + "QTreeView.updateGeometries": (), + "QTreeView.verticalOffset": (), + "QTreeView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QTreeView.viewportSizeHint": (), + "QTreeView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTreeView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTreeView.wordWrap": (), + + # class PySide2.QtWidgets.QTreeWidget: + "QTreeWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeWidget.addTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.addTopLevelItems": ('list',), + "QTreeWidget.clear": (), + "QTreeWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.collapseItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.columnCount": (), + "QTreeWidget.currentColumn": (), + "QTreeWidget.currentItem": (), + "QTreeWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTreeWidget.dropMimeData": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTreeWidget.editItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.event": ('PySide2.QtCore.QEvent',), + "QTreeWidget.expandItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.findItems": ('str', 'MatchFlags', 'int'), + "QTreeWidget.headerItem": (), + "QTreeWidget.indexFromItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.indexOfTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.insertTopLevelItem": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidget.insertTopLevelItems": ('int', 'list'), + "QTreeWidget.invisibleRootItem": (), + "QTreeWidget.isFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAbove": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTreeWidget.itemBelow": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeWidget.itemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.items": ('PySide2.QtCore.QMimeData',), + "QTreeWidget.mimeData": ('list',), + "QTreeWidget.mimeTypes": (), + "QTreeWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.removeItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.scrollToItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeWidget.selectedItems": (), + "QTreeWidget.setColumnCount": ('int',), + "QTreeWidget.setCurrentItem": [('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'SelectionFlags')], + "QTreeWidget.setFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setHeaderItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.setHeaderLabel": ('str',), + "QTreeWidget.setHeaderLabels": ('List[str]',), + "QTreeWidget.setItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtWidgets.QWidget'), + "QTreeWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeWidget.sortColumn": (), + "QTreeWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidget.supportedDropActions": (), + "QTreeWidget.takeTopLevelItem": ('int',), + "QTreeWidget.topLevelItem": ('int',), + "QTreeWidget.topLevelItemCount": (), + "QTreeWidget.visualItemRect": ('PySide2.QtWidgets.QTreeWidgetItem',), + + # class PySide2.QtWidgets.QTreeWidgetItem: + "QTreeWidgetItem.__init__": [('List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('int',)], + "QTreeWidgetItem.addChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.addChildren": ('list',), + "QTreeWidgetItem.background": ('int',), + "QTreeWidgetItem.backgroundColor": ('int',), + "QTreeWidgetItem.checkState": ('int',), + "QTreeWidgetItem.child": ('int',), + "QTreeWidgetItem.childCount": (), + "QTreeWidgetItem.childIndicatorPolicy": (), + "QTreeWidgetItem.clone": (), + "QTreeWidgetItem.columnCount": (), + "QTreeWidgetItem.data": ('int', 'int'), + "QTreeWidgetItem.emitDataChanged": (), + "QTreeWidgetItem.flags": (), + "QTreeWidgetItem.font": ('int',), + "QTreeWidgetItem.foreground": ('int',), + "QTreeWidgetItem.icon": ('int',), + "QTreeWidgetItem.indexOfChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.insertChild": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidgetItem.insertChildren": ('int', 'list'), + "QTreeWidgetItem.isDisabled": (), + "QTreeWidgetItem.isExpanded": (), + "QTreeWidgetItem.isFirstColumnSpanned": (), + "QTreeWidgetItem.isHidden": (), + "QTreeWidgetItem.isSelected": (), + "QTreeWidgetItem.parent": (), + "QTreeWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTreeWidgetItem.removeChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.setBackground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setBackgroundColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setCheckState": ('int', 'PySide2.QtCore.Qt.CheckState'), + "QTreeWidgetItem.setChildIndicatorPolicy": ('PySide2.QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy',), + "QTreeWidgetItem.setData": ('int', 'int', 'Any'), + "QTreeWidgetItem.setDisabled": ('bool',), + "QTreeWidgetItem.setExpanded": ('bool',), + "QTreeWidgetItem.setFirstColumnSpanned": ('bool',), + "QTreeWidgetItem.setFlags": ('ItemFlags',), + "QTreeWidgetItem.setFont": ('int', 'PySide2.QtGui.QFont'), + "QTreeWidgetItem.setForeground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setHidden": ('bool',), + "QTreeWidgetItem.setIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTreeWidgetItem.setSelected": ('bool',), + "QTreeWidgetItem.setSizeHint": ('int', 'PySide2.QtCore.QSize'), + "QTreeWidgetItem.setStatusTip": ('int', 'str'), + "QTreeWidgetItem.setText": ('int', 'str'), + "QTreeWidgetItem.setTextAlignment": ('int', 'int'), + "QTreeWidgetItem.setTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setToolTip": ('int', 'str'), + "QTreeWidgetItem.setWhatsThis": ('int', 'str'), + "QTreeWidgetItem.sizeHint": ('int',), + "QTreeWidgetItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidgetItem.statusTip": ('int',), + "QTreeWidgetItem.takeChild": ('int',), + "QTreeWidgetItem.takeChildren": (), + "QTreeWidgetItem.text": ('int',), + "QTreeWidgetItem.textAlignment": ('int',), + "QTreeWidgetItem.textColor": ('int',), + "QTreeWidgetItem.toolTip": ('int',), + "QTreeWidgetItem.treeWidget": (), + "QTreeWidgetItem.type": (), + "QTreeWidgetItem.whatsThis": ('int',), + "QTreeWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTreeWidgetItemIterator: + "QTreeWidgetItemIterator.__init__": [('PySide2.QtWidgets.QTreeWidget', 'IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItem', 'IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItemIterator',)], + "QTreeWidgetItemIterator.__copy__": (), + "QTreeWidgetItemIterator.value": (), + + # class PySide2.QtWidgets.QUndoCommand: + "QUndoCommand.__init__": [('PySide2.QtWidgets.QUndoCommand',), ('str', 'PySide2.QtWidgets.QUndoCommand')], + "QUndoCommand.actionText": (), + "QUndoCommand.child": ('int',), + "QUndoCommand.childCount": (), + "QUndoCommand.id": (), + "QUndoCommand.isObsolete": (), + "QUndoCommand.mergeWith": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoCommand.redo": (), + "QUndoCommand.setObsolete": ('bool',), + "QUndoCommand.setText": ('str',), + "QUndoCommand.text": (), + "QUndoCommand.undo": (), + + # class PySide2.QtWidgets.QUndoGroup: + "QUndoGroup.__init__": ('PySide2.QtCore.QObject',), + "QUndoGroup.activeStack": (), + "QUndoGroup.addStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.canRedo": (), + "QUndoGroup.canUndo": (), + "QUndoGroup.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.isClean": (), + "QUndoGroup.redo": (), + "QUndoGroup.redoText": (), + "QUndoGroup.removeStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.setActiveStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.stacks": (), + "QUndoGroup.undo": (), + "QUndoGroup.undoText": (), + + # class PySide2.QtWidgets.QUndoStack: + "QUndoStack.__init__": ('PySide2.QtCore.QObject',), + "QUndoStack.beginMacro": ('str',), + "QUndoStack.canRedo": (), + "QUndoStack.canUndo": (), + "QUndoStack.cleanIndex": (), + "QUndoStack.clear": (), + "QUndoStack.command": ('int',), + "QUndoStack.count": (), + "QUndoStack.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.endMacro": (), + "QUndoStack.index": (), + "QUndoStack.isActive": (), + "QUndoStack.isClean": (), + "QUndoStack.push": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoStack.redo": (), + "QUndoStack.redoText": (), + "QUndoStack.resetClean": (), + "QUndoStack.setActive": ('bool',), + "QUndoStack.setClean": (), + "QUndoStack.setIndex": ('int',), + "QUndoStack.setUndoLimit": ('int',), + "QUndoStack.text": ('int',), + "QUndoStack.undo": (), + "QUndoStack.undoLimit": (), + "QUndoStack.undoText": (), + + # class PySide2.QtWidgets.QUndoView: + "QUndoView.__init__": [('PySide2.QtWidgets.QUndoGroup', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QUndoStack', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QUndoView.cleanIcon": (), + "QUndoView.emptyLabel": (), + "QUndoView.group": (), + "QUndoView.setCleanIcon": ('PySide2.QtGui.QIcon',), + "QUndoView.setEmptyLabel": ('str',), + "QUndoView.setGroup": ('PySide2.QtWidgets.QUndoGroup',), + "QUndoView.setStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoView.stack": (), + + # class PySide2.QtWidgets.QVBoxLayout: + "QVBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QWhatsThis: + "QWhatsThis.createAction": ('PySide2.QtCore.QObject',), + "QWhatsThis.enterWhatsThisMode": (), + "QWhatsThis.hideText": (), + "QWhatsThis.inWhatsThisMode": (), + "QWhatsThis.leaveWhatsThisMode": (), + "QWhatsThis.showText": ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), + + # class PySide2.QtWidgets.QWidget: + "QWidget.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWidget.acceptDrops": (), + "QWidget.accessibleDescription": (), + "QWidget.accessibleName": (), + "QWidget.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QWidget.actions": (), + "QWidget.activateWindow": (), + "QWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QWidget.addActions": ('list',), + "QWidget.adjustSize": (), + "QWidget.autoFillBackground": (), + "QWidget.backgroundRole": (), + "QWidget.backingStore": (), + "QWidget.baseSize": (), + "QWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QWidget.childAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.childrenRect": (), + "QWidget.childrenRegion": (), + "QWidget.clearFocus": (), + "QWidget.clearMask": (), + "QWidget.close": (), + "QWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QWidget.contentsMargins": (), + "QWidget.contentsRect": (), + "QWidget.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWidget.contextMenuPolicy": (), + "QWidget.create": ('int', 'bool', 'bool'), + "QWidget.createWinId": (), + "QWidget.createWindowContainer": ('PySide2.QtGui.QWindow', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWidget.cursor": (), + "QWidget.destroy": ('bool', 'bool'), + "QWidget.devType": (), + "QWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWidget.effectiveWinId": (), + "QWidget.ensurePolished": (), + "QWidget.enterEvent": ('PySide2.QtCore.QEvent',), + "QWidget.event": ('PySide2.QtCore.QEvent',), + "QWidget.find": ('int',), + "QWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusNextChild": (), + "QWidget.focusNextPrevChild": ('bool',), + "QWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusPolicy": (), + "QWidget.focusPreviousChild": (), + "QWidget.focusProxy": (), + "QWidget.focusWidget": (), + "QWidget.font": (), + "QWidget.fontInfo": (), + "QWidget.fontMetrics": (), + "QWidget.foregroundRole": (), + "QWidget.frameGeometry": (), + "QWidget.frameSize": (), + "QWidget.geometry": (), + "QWidget.getContentsMargins": ('int', 'int', 'int', 'int'), + "QWidget.grab": ('PySide2.QtCore.QRect',), + "QWidget.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'GestureFlags'), + "QWidget.grabKeyboard": (), + "QWidget.grabMouse": [(), ('PySide2.QtGui.QCursor',)], + "QWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QWidget.graphicsEffect": (), + "QWidget.graphicsProxyWidget": (), + "QWidget.hasFocus": (), + "QWidget.hasHeightForWidth": (), + "QWidget.hasMouseTracking": (), + "QWidget.hasTabletTracking": (), + "QWidget.height": (), + "QWidget.heightForWidth": ('int',), + "QWidget.hide": (), + "QWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWidget.initPainter": ('PySide2.QtGui.QPainter',), + "QWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QWidget.inputMethodHints": (), + "QWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QWidget.internalWinId": (), + "QWidget.isActiveWindow": (), + "QWidget.isAncestorOf": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabled": (), + "QWidget.isEnabledTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabledToTLW": (), + "QWidget.isFullScreen": (), + "QWidget.isHidden": (), + "QWidget.isLeftToRight": (), + "QWidget.isMaximized": (), + "QWidget.isMinimized": (), + "QWidget.isModal": (), + "QWidget.isRightToLeft": (), + "QWidget.isTopLevel": (), + "QWidget.isVisible": (), + "QWidget.isVisibleTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isWindow": (), + "QWidget.isWindowModified": (), + "QWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyboardGrabber": (), + "QWidget.layout": (), + "QWidget.layoutDirection": (), + "QWidget.leaveEvent": ('PySide2.QtCore.QEvent',), + "QWidget.locale": (), + "QWidget.lower": (), + "QWidget.mapFrom": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapFromParent": ('PySide2.QtCore.QPoint',), + "QWidget.mapTo": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapToParent": ('PySide2.QtCore.QPoint',), + "QWidget.mask": (), + "QWidget.maximumHeight": (), + "QWidget.maximumSize": (), + "QWidget.maximumWidth": (), + "QWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QWidget.minimumHeight": (), + "QWidget.minimumSize": (), + "QWidget.minimumSizeHint": (), + "QWidget.minimumWidth": (), + "QWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseGrabber": (), + "QWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWidget.nativeParentWidget": (), + "QWidget.nextInFocusChain": (), + "QWidget.normalGeometry": (), + "QWidget.overrideWindowFlags": ('WindowFlags',), + "QWidget.overrideWindowState": ('WindowStates',), + "QWidget.paintEngine": (), + "QWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWidget.palette": (), + "QWidget.parentWidget": (), + "QWidget.pos": (), + "QWidget.previousInFocusChain": (), + "QWidget.raise_": (), + "QWidget.rect": (), + "QWidget.redirected": ('PySide2.QtCore.QPoint',), + "QWidget.releaseKeyboard": (), + "QWidget.releaseMouse": (), + "QWidget.releaseShortcut": ('int',), + "QWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QWidget.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags')], + "QWidget.repaint": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWidget.restoreGeometry": ('PySide2.QtCore.QByteArray',), + "QWidget.saveGeometry": (), + "QWidget.scroll": [('int', 'int'), ('int', 'int', 'PySide2.QtCore.QRect')], + "QWidget.setAcceptDrops": ('bool',), + "QWidget.setAccessibleDescription": ('str',), + "QWidget.setAccessibleName": ('str',), + "QWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QWidget.setAutoFillBackground": ('bool',), + "QWidget.setBackgroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setBaseSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QWidget.setContextMenuPolicy": ('PySide2.QtCore.Qt.ContextMenuPolicy',), + "QWidget.setCursor": ('PySide2.QtGui.QCursor',), + "QWidget.setDisabled": ('bool',), + "QWidget.setEnabled": ('bool',), + "QWidget.setFixedHeight": ('int',), + "QWidget.setFixedSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setFixedWidth": ('int',), + "QWidget.setFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QWidget.setFocusProxy": ('PySide2.QtWidgets.QWidget',), + "QWidget.setFont": ('PySide2.QtGui.QFont',), + "QWidget.setForegroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWidget.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QWidget.setHidden": ('bool',), + "QWidget.setInputMethodHints": ('InputMethodHints',), + "QWidget.setLayout": ('PySide2.QtWidgets.QLayout',), + "QWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QWidget.setLocale": ('PySide2.QtCore.QLocale',), + "QWidget.setMask": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QRegion',)], + "QWidget.setMaximumHeight": ('int',), + "QWidget.setMaximumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMaximumWidth": ('int',), + "QWidget.setMinimumHeight": ('int',), + "QWidget.setMinimumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMinimumWidth": ('int',), + "QWidget.setMouseTracking": ('bool',), + "QWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QWidget.setParent": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QWidget.setShortcutEnabled": ('int', 'bool'), + "QWidget.setSizeIncrement": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy')], + "QWidget.setStatusTip": ('str',), + "QWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QWidget.setStyleSheet": ('str',), + "QWidget.setTabOrder": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), + "QWidget.setTabletTracking": ('bool',), + "QWidget.setToolTip": ('str',), + "QWidget.setToolTipDuration": ('int',), + "QWidget.setUpdatesEnabled": ('bool',), + "QWidget.setVisible": ('bool',), + "QWidget.setWhatsThis": ('str',), + "QWidget.setWindowFilePath": ('str',), + "QWidget.setWindowFlag": ('PySide2.QtCore.Qt.WindowType', 'bool'), + "QWidget.setWindowFlags": ('WindowFlags',), + "QWidget.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QWidget.setWindowIconText": ('str',), + "QWidget.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWidget.setWindowModified": ('bool',), + "QWidget.setWindowOpacity": ('float',), + "QWidget.setWindowRole": ('str',), + "QWidget.setWindowState": ('WindowStates',), + "QWidget.setWindowTitle": ('str',), + "QWidget.sharedPainter": (), + "QWidget.show": (), + "QWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWidget.showFullScreen": (), + "QWidget.showMaximized": (), + "QWidget.showMinimized": (), + "QWidget.showNormal": (), + "QWidget.size": (), + "QWidget.sizeHint": (), + "QWidget.sizeIncrement": (), + "QWidget.sizePolicy": (), + "QWidget.stackUnder": ('PySide2.QtWidgets.QWidget',), + "QWidget.statusTip": (), + "QWidget.style": (), + "QWidget.styleSheet": (), + "QWidget.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QWidget.toolTip": (), + "QWidget.toolTipDuration": (), + "QWidget.topLevelWidget": (), + "QWidget.underMouse": (), + "QWidget.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QWidget.unsetCursor": (), + "QWidget.unsetLayoutDirection": (), + "QWidget.unsetLocale": (), + "QWidget.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.updateGeometry": (), + "QWidget.updateMicroFocus": (), + "QWidget.updatesEnabled": (), + "QWidget.visibleRegion": (), + "QWidget.whatsThis": (), + "QWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWidget.width": (), + "QWidget.winId": (), + "QWidget.window": (), + "QWidget.windowFilePath": (), + "QWidget.windowFlags": (), + "QWidget.windowHandle": (), + "QWidget.windowIcon": (), + "QWidget.windowIconText": (), + "QWidget.windowModality": (), + "QWidget.windowOpacity": (), + "QWidget.windowRole": (), + "QWidget.windowState": (), + "QWidget.windowTitle": (), + "QWidget.windowType": (), + "QWidget.x": (), + "QWidget.y": (), + + # class PySide2.QtWidgets.QWidgetAction: + "QWidgetAction.__init__": ('PySide2.QtCore.QObject',), + "QWidgetAction.createWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.createdWidgets": (), + "QWidgetAction.defaultWidget": (), + "QWidgetAction.deleteWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.event": ('PySide2.QtCore.QEvent',), + "QWidgetAction.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QWidgetAction.releaseWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.requestWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.setDefaultWidget": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QWidgetItem: + "QWidgetItem.__init__": ('PySide2.QtWidgets.QWidget',), + "QWidgetItem.controlTypes": (), + "QWidgetItem.expandingDirections": (), + "QWidgetItem.geometry": (), + "QWidgetItem.hasHeightForWidth": (), + "QWidgetItem.heightForWidth": ('int',), + "QWidgetItem.isEmpty": (), + "QWidgetItem.maximumSize": (), + "QWidgetItem.minimumSize": (), + "QWidgetItem.setGeometry": ('PySide2.QtCore.QRect',), + "QWidgetItem.sizeHint": (), + "QWidgetItem.widget": (), + + # class PySide2.QtWidgets.QWizard: + "QWizard.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWizard.addPage": ('PySide2.QtWidgets.QWizardPage',), + "QWizard.back": (), + "QWizard.button": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.cleanupPage": ('int',), + "QWizard.currentId": (), + "QWizard.currentPage": (), + "QWizard.done": ('int',), + "QWizard.event": ('PySide2.QtCore.QEvent',), + "QWizard.field": ('str',), + "QWizard.hasVisitedPage": ('int',), + "QWizard.initializePage": ('int',), + "QWizard.nextId": (), + "QWizard.options": (), + "QWizard.page": ('int',), + "QWizard.pageIds": (), + "QWizard.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWizard.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizard.removePage": ('int',), + "QWizard.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWizard.restart": (), + "QWizard.setButton": ('PySide2.QtWidgets.QWizard.WizardButton', 'PySide2.QtWidgets.QAbstractButton'), + "QWizard.setButtonLayout": ('list',), + "QWizard.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizard.setDefaultProperty": ('str', 'str', 'str'), + "QWizard.setField": ('str', 'Any'), + "QWizard.setOption": ('PySide2.QtWidgets.QWizard.WizardOption', 'bool'), + "QWizard.setOptions": ('WizardOptions',), + "QWizard.setPage": ('int', 'PySide2.QtWidgets.QWizardPage'), + "QWizard.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizard.setSideWidget": ('PySide2.QtWidgets.QWidget',), + "QWizard.setStartId": ('int',), + "QWizard.setSubTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setVisible": ('bool',), + "QWizard.setWizardStyle": ('PySide2.QtWidgets.QWizard.WizardStyle',), + "QWizard.sideWidget": (), + "QWizard.sizeHint": (), + "QWizard.startId": (), + "QWizard.subTitleFormat": (), + "QWizard.testOption": ('PySide2.QtWidgets.QWizard.WizardOption',), + "QWizard.titleFormat": (), + "QWizard.validateCurrentPage": (), + "QWizard.visitedPages": (), + "QWizard.wizardStyle": (), + + # class PySide2.QtWidgets.QWizardPage: + "QWizardPage.__init__": ('PySide2.QtWidgets.QWidget',), + "QWizardPage.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizardPage.cleanupPage": (), + "QWizardPage.field": ('str',), + "QWizardPage.initializePage": (), + "QWizardPage.isCommitPage": (), + "QWizardPage.isComplete": (), + "QWizardPage.isFinalPage": (), + "QWizardPage.nextId": (), + "QWizardPage.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizardPage.registerField": ('str', 'PySide2.QtWidgets.QWidget', 'str', 'str'), + "QWizardPage.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizardPage.setCommitPage": ('bool',), + "QWizardPage.setField": ('str', 'Any'), + "QWizardPage.setFinalPage": ('bool',), + "QWizardPage.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizardPage.setSubTitle": ('str',), + "QWizardPage.setTitle": ('str',), + "QWizardPage.subTitle": (), + "QWizardPage.title": (), + "QWizardPage.validatePage": (), + "QWizardPage.wizard": (), + }) + +# Module PySide2.QtPrintSupport +if "PySide2.QtPrintSupport" in sys.modules: + dict.update({ + + # class PySide2.QtPrintSupport.QAbstractPrintDialog: + "QAbstractPrintDialog.__init__": ('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), + "QAbstractPrintDialog.addEnabledOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.enabledOptions": (), + "QAbstractPrintDialog.exec_": (), + "QAbstractPrintDialog.fromPage": (), + "QAbstractPrintDialog.isOptionEnabled": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.maxPage": (), + "QAbstractPrintDialog.minPage": (), + "QAbstractPrintDialog.printRange": (), + "QAbstractPrintDialog.printer": (), + "QAbstractPrintDialog.setEnabledOptions": ('PrintDialogOptions',), + "QAbstractPrintDialog.setFromTo": ('int', 'int'), + "QAbstractPrintDialog.setMinMax": ('int', 'int'), + "QAbstractPrintDialog.setOptionTabs": ('list',), + "QAbstractPrintDialog.setPrintRange": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintRange',), + "QAbstractPrintDialog.toPage": (), + + # class PySide2.QtPrintSupport.QPageSetupDialog: + "QPageSetupDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPageSetupDialog.done": ('int',), + "QPageSetupDialog.exec_": (), + "QPageSetupDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPageSetupDialog.printer": (), + "QPageSetupDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintDialog: + "QPrintDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPrintDialog.done": ('int',), + "QPrintDialog.exec_": (), + "QPrintDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintDialog.options": (), + "QPrintDialog.setOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption', 'bool'), + "QPrintDialog.setOptions": ('PrintDialogOptions',), + "QPrintDialog.setVisible": ('bool',), + "QPrintDialog.testOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + + # class PySide2.QtPrintSupport.QPrintEngine: + "QPrintEngine.__init__": (), + "QPrintEngine.abort": (), + "QPrintEngine.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrintEngine.newPage": (), + "QPrintEngine.printerState": (), + "QPrintEngine.property": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey',), + "QPrintEngine.setProperty": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey', 'Any'), + + # class PySide2.QtPrintSupport.QPrintPreviewDialog: + "QPrintPreviewDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QPrintPreviewDialog.done": ('int',), + "QPrintPreviewDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintPreviewDialog.printer": (), + "QPrintPreviewDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintPreviewWidget: + "QPrintPreviewWidget.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QPrintPreviewWidget.currentPage": (), + "QPrintPreviewWidget.fitInView": (), + "QPrintPreviewWidget.fitToWidth": (), + "QPrintPreviewWidget.orientation": (), + "QPrintPreviewWidget.pageCount": (), + "QPrintPreviewWidget.print_": (), + "QPrintPreviewWidget.setAllPagesViewMode": (), + "QPrintPreviewWidget.setCurrentPage": ('int',), + "QPrintPreviewWidget.setFacingPagesViewMode": (), + "QPrintPreviewWidget.setLandscapeOrientation": (), + "QPrintPreviewWidget.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrintPreviewWidget.setPortraitOrientation": (), + "QPrintPreviewWidget.setSinglePageViewMode": (), + "QPrintPreviewWidget.setViewMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ViewMode',), + "QPrintPreviewWidget.setVisible": ('bool',), + "QPrintPreviewWidget.setZoomFactor": ('float',), + "QPrintPreviewWidget.setZoomMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ZoomMode',), + "QPrintPreviewWidget.updatePreview": (), + "QPrintPreviewWidget.viewMode": (), + "QPrintPreviewWidget.zoomFactor": (), + "QPrintPreviewWidget.zoomIn": ('float',), + "QPrintPreviewWidget.zoomMode": (), + "QPrintPreviewWidget.zoomOut": ('float',), + + # class PySide2.QtPrintSupport.QPrinter: + "QPrinter.__init__": [('PySide2.QtPrintSupport.QPrinter.PrinterMode',), ('PySide2.QtPrintSupport.QPrinterInfo', 'PySide2.QtPrintSupport.QPrinter.PrinterMode')], + "QPrinter.abort": (), + "QPrinter.actualNumCopies": (), + "QPrinter.collateCopies": (), + "QPrinter.colorMode": (), + "QPrinter.copyCount": (), + "QPrinter.creator": (), + "QPrinter.devType": (), + "QPrinter.docName": (), + "QPrinter.doubleSidedPrinting": (), + "QPrinter.duplex": (), + "QPrinter.fontEmbeddingEnabled": (), + "QPrinter.fromPage": (), + "QPrinter.fullPage": (), + "QPrinter.getPageMargins": ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit'), + "QPrinter.isValid": (), + "QPrinter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrinter.newPage": (), + "QPrinter.numCopies": (), + "QPrinter.orientation": (), + "QPrinter.outputFileName": (), + "QPrinter.outputFormat": (), + "QPrinter.pageOrder": (), + "QPrinter.pageRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.pageSize": (), + "QPrinter.paintEngine": (), + "QPrinter.paperName": (), + "QPrinter.paperRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSize": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSource": (), + "QPrinter.printEngine": (), + "QPrinter.printProgram": (), + "QPrinter.printRange": (), + "QPrinter.printerName": (), + "QPrinter.printerState": (), + "QPrinter.resolution": (), + "QPrinter.setCollateCopies": ('bool',), + "QPrinter.setColorMode": ('PySide2.QtPrintSupport.QPrinter.ColorMode',), + "QPrinter.setCopyCount": ('int',), + "QPrinter.setCreator": ('str',), + "QPrinter.setDocName": ('str',), + "QPrinter.setDoubleSidedPrinting": ('bool',), + "QPrinter.setDuplex": ('PySide2.QtPrintSupport.QPrinter.DuplexMode',), + "QPrinter.setEngines": ('PySide2.QtPrintSupport.QPrintEngine', 'PySide2.QtGui.QPaintEngine'), + "QPrinter.setFontEmbeddingEnabled": ('bool',), + "QPrinter.setFromTo": ('int', 'int'), + "QPrinter.setFullPage": ('bool',), + "QPrinter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPrinter.setNumCopies": ('int',), + "QPrinter.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrinter.setOutputFileName": ('str',), + "QPrinter.setOutputFormat": ('PySide2.QtPrintSupport.QPrinter.OutputFormat',), + "QPrinter.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit')], + "QPrinter.setPageOrder": ('PySide2.QtPrintSupport.QPrinter.PageOrder',), + "QPrinter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPrinter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPrinter.setPaperName": ('str',), + "QPrinter.setPaperSize": [('PySide2.QtCore.QSizeF', 'PySide2.QtPrintSupport.QPrinter.Unit'), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPrinter.setPaperSource": ('PySide2.QtPrintSupport.QPrinter.PaperSource',), + "QPrinter.setPrintProgram": ('str',), + "QPrinter.setPrintRange": ('PySide2.QtPrintSupport.QPrinter.PrintRange',), + "QPrinter.setPrinterName": ('str',), + "QPrinter.setResolution": ('int',), + "QPrinter.setWinPageSize": ('int',), + "QPrinter.supportedResolutions": (), + "QPrinter.supportsMultipleCopies": (), + "QPrinter.toPage": (), + "QPrinter.winPageSize": (), + + # class PySide2.QtPrintSupport.QPrinterInfo: + "QPrinterInfo.__init__": [(), ('PySide2.QtPrintSupport.QPrinter',), ('PySide2.QtPrintSupport.QPrinterInfo',)], + "QPrinterInfo.__copy__": (), + "QPrinterInfo.availablePrinterNames": (), + "QPrinterInfo.availablePrinters": (), + "QPrinterInfo.defaultDuplexMode": (), + "QPrinterInfo.defaultPageSize": (), + "QPrinterInfo.defaultPrinter": (), + "QPrinterInfo.defaultPrinterName": (), + "QPrinterInfo.description": (), + "QPrinterInfo.isDefault": (), + "QPrinterInfo.isNull": (), + "QPrinterInfo.isRemote": (), + "QPrinterInfo.location": (), + "QPrinterInfo.makeAndModel": (), + "QPrinterInfo.maximumPhysicalPageSize": (), + "QPrinterInfo.minimumPhysicalPageSize": (), + "QPrinterInfo.printerInfo": ('str',), + "QPrinterInfo.printerName": (), + "QPrinterInfo.state": (), + "QPrinterInfo.supportedDuplexModes": (), + "QPrinterInfo.supportedPageSizes": (), + "QPrinterInfo.supportedPaperSizes": (), + "QPrinterInfo.supportedResolutions": (), + "QPrinterInfo.supportedSizesWithNames": (), + "QPrinterInfo.supportsCustomPageSizes": (), + }) + +# Module PySide2.QtSql +if "PySide2.QtSql" in sys.modules: + dict.update({ + + # class PySide2.QtSql.QSql: + + # class PySide2.QtSql.QSqlDatabase: + "QSqlDatabase.__init__": [(), ('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlDriver',), ('str',)], + "QSqlDatabase.__copy__": (), + "QSqlDatabase.addDatabase": [('PySide2.QtSql.QSqlDriver', 'str'), ('str', 'str')], + "QSqlDatabase.cloneDatabase": ('PySide2.QtSql.QSqlDatabase', 'str'), + "QSqlDatabase.close": (), + "QSqlDatabase.commit": (), + "QSqlDatabase.connectOptions": (), + "QSqlDatabase.connectionName": (), + "QSqlDatabase.connectionNames": (), + "QSqlDatabase.contains": ('str',), + "QSqlDatabase.database": ('str', 'bool'), + "QSqlDatabase.databaseName": (), + "QSqlDatabase.driver": (), + "QSqlDatabase.driverName": (), + "QSqlDatabase.drivers": (), + "QSqlDatabase.exec_": ('str',), + "QSqlDatabase.hostName": (), + "QSqlDatabase.isDriverAvailable": ('str',), + "QSqlDatabase.isOpen": (), + "QSqlDatabase.isOpenError": (), + "QSqlDatabase.isValid": (), + "QSqlDatabase.lastError": (), + "QSqlDatabase.numericalPrecisionPolicy": (), + "QSqlDatabase.open": [(), ('str', 'str')], + "QSqlDatabase.password": (), + "QSqlDatabase.port": (), + "QSqlDatabase.primaryIndex": ('str',), + "QSqlDatabase.record": ('str',), + "QSqlDatabase.registerSqlDriver": ('str', 'PySide2.QtSql.QSqlDriverCreatorBase'), + "QSqlDatabase.removeDatabase": ('str',), + "QSqlDatabase.rollback": (), + "QSqlDatabase.setConnectOptions": ('str',), + "QSqlDatabase.setDatabaseName": ('str',), + "QSqlDatabase.setHostName": ('str',), + "QSqlDatabase.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDatabase.setPassword": ('str',), + "QSqlDatabase.setPort": ('int',), + "QSqlDatabase.setUserName": ('str',), + "QSqlDatabase.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDatabase.transaction": (), + "QSqlDatabase.userName": (), + + # class PySide2.QtSql.QSqlDriver: + "QSqlDriver.__init__": ('PySide2.QtCore.QObject',), + "QSqlDriver.beginTransaction": (), + "QSqlDriver.cancelQuery": (), + "QSqlDriver.close": (), + "QSqlDriver.commitTransaction": (), + "QSqlDriver.createResult": (), + "QSqlDriver.dbmsType": (), + "QSqlDriver.escapeIdentifier": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.formatValue": ('PySide2.QtSql.QSqlField', 'bool'), + "QSqlDriver.hasFeature": ('PySide2.QtSql.QSqlDriver.DriverFeature',), + "QSqlDriver.isIdentifierEscaped": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.isOpen": (), + "QSqlDriver.isOpenError": (), + "QSqlDriver.lastError": (), + "QSqlDriver.numericalPrecisionPolicy": (), + "QSqlDriver.open": ('str', 'str', 'str', 'str', 'int', 'str'), + "QSqlDriver.primaryIndex": ('str',), + "QSqlDriver.record": ('str',), + "QSqlDriver.rollbackTransaction": (), + "QSqlDriver.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlDriver.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDriver.setOpen": ('bool',), + "QSqlDriver.setOpenError": ('bool',), + "QSqlDriver.sqlStatement": ('PySide2.QtSql.QSqlDriver.StatementType', 'str', 'PySide2.QtSql.QSqlRecord', 'bool'), + "QSqlDriver.stripDelimiters": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.subscribeToNotification": ('str',), + "QSqlDriver.subscribedToNotifications": (), + "QSqlDriver.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDriver.unsubscribeFromNotification": ('str',), + + # class PySide2.QtSql.QSqlDriverCreatorBase: + "QSqlDriverCreatorBase.__init__": (), + "QSqlDriverCreatorBase.createObject": (), + + # class PySide2.QtSql.QSqlError: + "QSqlError.__init__": [('PySide2.QtSql.QSqlError',), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'int'), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'str')], + "QSqlError.__copy__": (), + "QSqlError.databaseText": (), + "QSqlError.driverText": (), + "QSqlError.isValid": (), + "QSqlError.nativeErrorCode": (), + "QSqlError.number": (), + "QSqlError.setDatabaseText": ('str',), + "QSqlError.setDriverText": ('str',), + "QSqlError.setNumber": ('int',), + "QSqlError.setType": ('PySide2.QtSql.QSqlError.ErrorType',), + "QSqlError.text": (), + "QSqlError.type": (), + + # class PySide2.QtSql.QSqlField: + "QSqlField.__init__": [('PySide2.QtSql.QSqlField',), ('str', 'type')], + "QSqlField.__copy__": (), + "QSqlField.clear": (), + "QSqlField.defaultValue": (), + "QSqlField.isAutoValue": (), + "QSqlField.isGenerated": (), + "QSqlField.isNull": (), + "QSqlField.isReadOnly": (), + "QSqlField.isValid": (), + "QSqlField.length": (), + "QSqlField.name": (), + "QSqlField.precision": (), + "QSqlField.requiredStatus": (), + "QSqlField.setAutoValue": ('bool',), + "QSqlField.setDefaultValue": ('Any',), + "QSqlField.setGenerated": ('bool',), + "QSqlField.setLength": ('int',), + "QSqlField.setName": ('str',), + "QSqlField.setPrecision": ('int',), + "QSqlField.setReadOnly": ('bool',), + "QSqlField.setRequired": ('bool',), + "QSqlField.setRequiredStatus": ('PySide2.QtSql.QSqlField.RequiredStatus',), + "QSqlField.setSqlType": ('int',), + "QSqlField.setType": ('type',), + "QSqlField.setValue": ('Any',), + "QSqlField.type": (), + "QSqlField.typeID": (), + "QSqlField.value": (), + + # class PySide2.QtSql.QSqlIndex: + "QSqlIndex.__init__": [('PySide2.QtSql.QSqlIndex',), ('str', 'str')], + "QSqlIndex.__copy__": (), + "QSqlIndex.append": [('PySide2.QtSql.QSqlField',), ('PySide2.QtSql.QSqlField', 'bool')], + "QSqlIndex.cursorName": (), + "QSqlIndex.isDescending": ('int',), + "QSqlIndex.name": (), + "QSqlIndex.setCursorName": ('str',), + "QSqlIndex.setDescending": ('int', 'bool'), + "QSqlIndex.setName": ('str',), + + # class PySide2.QtSql.QSqlQuery: + "QSqlQuery.__init__": [('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlQuery',), ('PySide2.QtSql.QSqlResult',), ('str', 'PySide2.QtSql.QSqlDatabase')], + "QSqlQuery.__copy__": (), + "QSqlQuery.addBindValue": ('Any', 'ParamType'), + "QSqlQuery.at": (), + "QSqlQuery.bindValue": [('int', 'Any', 'ParamType'), ('str', 'Any', 'ParamType')], + "QSqlQuery.boundValue": [('int',), ('str',)], + "QSqlQuery.boundValues": (), + "QSqlQuery.clear": (), + "QSqlQuery.driver": (), + "QSqlQuery.execBatch": ('PySide2.QtSql.QSqlQuery.BatchExecutionMode',), + "QSqlQuery.exec_": [(), ('str',)], + "QSqlQuery.executedQuery": (), + "QSqlQuery.finish": (), + "QSqlQuery.first": (), + "QSqlQuery.isActive": (), + "QSqlQuery.isForwardOnly": (), + "QSqlQuery.isNull": [('int',), ('str',)], + "QSqlQuery.isSelect": (), + "QSqlQuery.isValid": (), + "QSqlQuery.last": (), + "QSqlQuery.lastError": (), + "QSqlQuery.lastInsertId": (), + "QSqlQuery.lastQuery": (), + "QSqlQuery.nextResult": (), + "QSqlQuery.numRowsAffected": (), + "QSqlQuery.numericalPrecisionPolicy": (), + "QSqlQuery.prepare": ('str',), + "QSqlQuery.previous": (), + "QSqlQuery.record": (), + "QSqlQuery.result": (), + "QSqlQuery.seek": ('int', 'bool'), + "QSqlQuery.setForwardOnly": ('bool',), + "QSqlQuery.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlQuery.size": (), + "QSqlQuery.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlQueryModel: + "QSqlQueryModel.__init__": ('PySide2.QtCore.QObject',), + "QSqlQueryModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginResetModel": (), + "QSqlQueryModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.clear": (), + "QSqlQueryModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlQueryModel.endInsertColumns": (), + "QSqlQueryModel.endInsertRows": (), + "QSqlQueryModel.endRemoveColumns": (), + "QSqlQueryModel.endRemoveRows": (), + "QSqlQueryModel.endResetModel": (), + "QSqlQueryModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlQueryModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.lastError": (), + "QSqlQueryModel.query": (), + "QSqlQueryModel.queryChange": (), + "QSqlQueryModel.record": [(), ('int',)], + "QSqlQueryModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QSqlQueryModel.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlQueryModel.setQuery": [('PySide2.QtSql.QSqlQuery',), ('str', 'PySide2.QtSql.QSqlDatabase')], + + # class PySide2.QtSql.QSqlRecord: + "QSqlRecord.__init__": [(), ('PySide2.QtSql.QSqlRecord',)], + "QSqlRecord.__copy__": (), + "QSqlRecord.append": ('PySide2.QtSql.QSqlField',), + "QSqlRecord.clear": (), + "QSqlRecord.clearValues": (), + "QSqlRecord.contains": ('str',), + "QSqlRecord.count": (), + "QSqlRecord.field": [('int',), ('str',)], + "QSqlRecord.fieldName": ('int',), + "QSqlRecord.indexOf": ('str',), + "QSqlRecord.insert": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.isEmpty": (), + "QSqlRecord.isGenerated": [('int',), ('str',)], + "QSqlRecord.isNull": [('int',), ('str',)], + "QSqlRecord.keyValues": ('PySide2.QtSql.QSqlRecord',), + "QSqlRecord.remove": ('int',), + "QSqlRecord.replace": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.setGenerated": [('int', 'bool'), ('str', 'bool')], + "QSqlRecord.setNull": [('int',), ('str',)], + "QSqlRecord.setValue": [('int', 'Any'), ('str', 'Any')], + "QSqlRecord.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlRelation: + "QSqlRelation.__init__": [(), ('PySide2.QtSql.QSqlRelation',), ('str', 'str', 'str')], + "QSqlRelation.__copy__": (), + "QSqlRelation.displayColumn": (), + "QSqlRelation.indexColumn": (), + "QSqlRelation.isValid": (), + "QSqlRelation.swap": ('PySide2.QtSql.QSqlRelation',), + "QSqlRelation.tableName": (), + + # class PySide2.QtSql.QSqlRelationalDelegate: + "QSqlRelationalDelegate.__init__": ('PySide2.QtCore.QObject',), + "QSqlRelationalDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtSql.QSqlRelationalTableModel: + "QSqlRelationalTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlRelationalTableModel.clear": (), + "QSqlRelationalTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlRelationalTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlRelationalTableModel.orderByClause": (), + "QSqlRelationalTableModel.relation": ('int',), + "QSqlRelationalTableModel.relationModel": ('int',), + "QSqlRelationalTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalTableModel.revertRow": ('int',), + "QSqlRelationalTableModel.select": (), + "QSqlRelationalTableModel.selectStatement": (), + "QSqlRelationalTableModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSqlRelationalTableModel.setJoinMode": ('PySide2.QtSql.QSqlRelationalTableModel.JoinMode',), + "QSqlRelationalTableModel.setRelation": ('int', 'PySide2.QtSql.QSqlRelation'), + "QSqlRelationalTableModel.setTable": ('str',), + "QSqlRelationalTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + + # class PySide2.QtSql.QSqlResult: + "QSqlResult.__init__": ('PySide2.QtSql.QSqlDriver',), + "QSqlResult.addBindValue": ('Any', 'ParamType'), + "QSqlResult.at": (), + "QSqlResult.bindValue": [('int', 'Any', 'ParamType'), ('str', 'Any', 'ParamType')], + "QSqlResult.bindValueType": [('int',), ('str',)], + "QSqlResult.bindingSyntax": (), + "QSqlResult.boundValue": [('int',), ('str',)], + "QSqlResult.boundValueCount": (), + "QSqlResult.boundValueName": ('int',), + "QSqlResult.boundValues": (), + "QSqlResult.clear": (), + "QSqlResult.data": ('int',), + "QSqlResult.detachFromResultSet": (), + "QSqlResult.driver": (), + "QSqlResult.execBatch": ('bool',), + "QSqlResult.exec_": (), + "QSqlResult.executedQuery": (), + "QSqlResult.fetch": ('int',), + "QSqlResult.fetchFirst": (), + "QSqlResult.fetchLast": (), + "QSqlResult.fetchNext": (), + "QSqlResult.fetchPrevious": (), + "QSqlResult.handle": (), + "QSqlResult.hasOutValues": (), + "QSqlResult.isActive": (), + "QSqlResult.isForwardOnly": (), + "QSqlResult.isNull": ('int',), + "QSqlResult.isSelect": (), + "QSqlResult.isValid": (), + "QSqlResult.lastError": (), + "QSqlResult.lastInsertId": (), + "QSqlResult.lastQuery": (), + "QSqlResult.nextResult": (), + "QSqlResult.numRowsAffected": (), + "QSqlResult.numericalPrecisionPolicy": (), + "QSqlResult.prepare": ('str',), + "QSqlResult.record": (), + "QSqlResult.reset": ('str',), + "QSqlResult.resetBindCount": (), + "QSqlResult.savePrepare": ('str',), + "QSqlResult.setActive": ('bool',), + "QSqlResult.setAt": ('int',), + "QSqlResult.setForwardOnly": ('bool',), + "QSqlResult.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlResult.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlResult.setQuery": ('str',), + "QSqlResult.setSelect": ('bool',), + "QSqlResult.size": (), + + # class PySide2.QtSql.QSqlTableModel: + "QSqlTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlTableModel.clear": (), + "QSqlTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlTableModel.database": (), + "QSqlTableModel.deleteRowFromTable": ('int',), + "QSqlTableModel.editStrategy": (), + "QSqlTableModel.fieldIndex": ('str',), + "QSqlTableModel.filter": (), + "QSqlTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlTableModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.insertRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlTableModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.isDirty": [(), ('PySide2.QtCore.QModelIndex',)], + "QSqlTableModel.orderByClause": (), + "QSqlTableModel.primaryKey": (), + "QSqlTableModel.primaryValues": ('int',), + "QSqlTableModel.record": [(), ('int',)], + "QSqlTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.revert": (), + "QSqlTableModel.revertAll": (), + "QSqlTableModel.revertRow": ('int',), + "QSqlTableModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.select": (), + "QSqlTableModel.selectRow": ('int',), + "QSqlTableModel.selectStatement": (), + "QSqlTableModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSqlTableModel.setEditStrategy": ('PySide2.QtSql.QSqlTableModel.EditStrategy',), + "QSqlTableModel.setFilter": ('str',), + "QSqlTableModel.setPrimaryKey": ('PySide2.QtSql.QSqlIndex',), + "QSqlTableModel.setQuery": ('PySide2.QtSql.QSqlQuery',), + "QSqlTableModel.setRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.setSort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.setTable": ('str',), + "QSqlTableModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.submit": (), + "QSqlTableModel.submitAll": (), + "QSqlTableModel.tableName": (), + "QSqlTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + }) + +# Module PySide2.QtNetwork +if "PySide2.QtNetwork" in sys.modules: + dict.update({ + + # class PySide2.QtNetwork.QAbstractNetworkCache: + "QAbstractNetworkCache.__init__": ('PySide2.QtCore.QObject',), + "QAbstractNetworkCache.cacheSize": (), + "QAbstractNetworkCache.clear": (), + "QAbstractNetworkCache.data": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.insert": ('PySide2.QtCore.QIODevice',), + "QAbstractNetworkCache.metaData": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QAbstractNetworkCache.remove": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QAbstractSocket: + "QAbstractSocket.__init__": ('PySide2.QtNetwork.QAbstractSocket.SocketType', 'PySide2.QtCore.QObject'), + "QAbstractSocket.abort": (), + "QAbstractSocket.atEnd": (), + "QAbstractSocket.bind": [('PySide2.QtNetwork.QHostAddress', 'int', 'BindMode'), ('int', 'BindMode')], + "QAbstractSocket.bytesAvailable": (), + "QAbstractSocket.bytesToWrite": (), + "QAbstractSocket.canReadLine": (), + "QAbstractSocket.close": (), + "QAbstractSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'OpenMode'), ('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QAbstractSocket.disconnectFromHost": (), + "QAbstractSocket.flush": (), + "QAbstractSocket.isSequential": (), + "QAbstractSocket.isValid": (), + "QAbstractSocket.localAddress": (), + "QAbstractSocket.localPort": (), + "QAbstractSocket.pauseMode": (), + "QAbstractSocket.peerAddress": (), + "QAbstractSocket.peerName": (), + "QAbstractSocket.peerPort": (), + "QAbstractSocket.proxy": (), + "QAbstractSocket.readBufferSize": (), + "QAbstractSocket.readData": ('str', 'int'), + "QAbstractSocket.readLineData": ('str', 'int'), + "QAbstractSocket.resume": (), + "QAbstractSocket.setLocalAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setLocalPort": ('int',), + "QAbstractSocket.setPauseMode": ('PauseModes',), + "QAbstractSocket.setPeerAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setPeerName": ('str',), + "QAbstractSocket.setPeerPort": ('int',), + "QAbstractSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QAbstractSocket.setReadBufferSize": ('int',), + "QAbstractSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'OpenMode'), + "QAbstractSocket.setSocketError": ('PySide2.QtNetwork.QAbstractSocket.SocketError',), + "QAbstractSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'Any'), + "QAbstractSocket.setSocketState": ('PySide2.QtNetwork.QAbstractSocket.SocketState',), + "QAbstractSocket.socketDescriptor": (), + "QAbstractSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QAbstractSocket.socketType": (), + "QAbstractSocket.state": (), + "QAbstractSocket.waitForBytesWritten": ('int',), + "QAbstractSocket.waitForConnected": ('int',), + "QAbstractSocket.waitForDisconnected": ('int',), + "QAbstractSocket.waitForReadyRead": ('int',), + "QAbstractSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QAuthenticator: + "QAuthenticator.__init__": [(), ('PySide2.QtNetwork.QAuthenticator',)], + "QAuthenticator.__copy__": (), + "QAuthenticator.isNull": (), + "QAuthenticator.option": ('str',), + "QAuthenticator.options": (), + "QAuthenticator.password": (), + "QAuthenticator.realm": (), + "QAuthenticator.setOption": ('str', 'Any'), + "QAuthenticator.setPassword": ('str',), + "QAuthenticator.setRealm": ('str',), + "QAuthenticator.setUser": ('str',), + "QAuthenticator.user": (), + + # class PySide2.QtNetwork.QHostAddress: + "QHostAddress.__init__": [(), ('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.__copy__": (), + "QHostAddress.clear": (), + "QHostAddress.isEqual": ('PySide2.QtNetwork.QHostAddress', 'ConversionMode'), + "QHostAddress.isInSubnet": [('PySide2.QtNetwork.QHostAddress', 'int'), ('Tuple[Any, Any]',)], + "QHostAddress.isLoopback": (), + "QHostAddress.isMulticast": (), + "QHostAddress.isNull": (), + "QHostAddress.parseSubnet": ('str',), + "QHostAddress.protocol": (), + "QHostAddress.scopeId": (), + "QHostAddress.setAddress": [('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.setScopeId": ('str',), + "QHostAddress.swap": ('PySide2.QtNetwork.QHostAddress',), + "QHostAddress.toIPv4Address": [(), ('bool',)], + "QHostAddress.toIPv6Address": (), + "QHostAddress.toString": (), + + # class PySide2.QtNetwork.QHostInfo: + "QHostInfo.__init__": [('PySide2.QtNetwork.QHostInfo',), ('int',)], + "QHostInfo.__copy__": (), + "QHostInfo.abortHostLookup": ('int',), + "QHostInfo.addresses": (), + "QHostInfo.error": (), + "QHostInfo.errorString": (), + "QHostInfo.fromName": ('str',), + "QHostInfo.hostName": (), + "QHostInfo.localDomainName": (), + "QHostInfo.localHostName": (), + "QHostInfo.lookupId": (), + "QHostInfo.setAddresses": ('list',), + "QHostInfo.setError": ('PySide2.QtNetwork.QHostInfo.HostInfoError',), + "QHostInfo.setErrorString": ('str',), + "QHostInfo.setHostName": ('str',), + "QHostInfo.setLookupId": ('int',), + + # class PySide2.QtNetwork.QIPv6Address: + "QIPv6Address.__init__": [(), ('PySide2.QtNetwork.QIPv6Address',)], + "QIPv6Address.__copy__": (), + + # class PySide2.QtNetwork.QLocalServer: + "QLocalServer.__init__": ('PySide2.QtCore.QObject',), + "QLocalServer.close": (), + "QLocalServer.errorString": (), + "QLocalServer.fullServerName": (), + "QLocalServer.hasPendingConnections": (), + "QLocalServer.incomingConnection": ('int',), + "QLocalServer.isListening": (), + "QLocalServer.listen": [('int',), ('str',)], + "QLocalServer.maxPendingConnections": (), + "QLocalServer.nextPendingConnection": (), + "QLocalServer.removeServer": ('str',), + "QLocalServer.serverError": (), + "QLocalServer.serverName": (), + "QLocalServer.setMaxPendingConnections": ('int',), + "QLocalServer.setSocketOptions": ('SocketOptions',), + "QLocalServer.socketOptions": (), + "QLocalServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QLocalSocket: + "QLocalSocket.__init__": ('PySide2.QtCore.QObject',), + "QLocalSocket.abort": (), + "QLocalSocket.bytesAvailable": (), + "QLocalSocket.bytesToWrite": (), + "QLocalSocket.canReadLine": (), + "QLocalSocket.close": (), + "QLocalSocket.connectToServer": [('OpenMode',), ('str', 'OpenMode')], + "QLocalSocket.disconnectFromServer": (), + "QLocalSocket.flush": (), + "QLocalSocket.fullServerName": (), + "QLocalSocket.isSequential": (), + "QLocalSocket.isValid": (), + "QLocalSocket.open": ('OpenMode',), + "QLocalSocket.readBufferSize": (), + "QLocalSocket.readData": ('str', 'int'), + "QLocalSocket.serverName": (), + "QLocalSocket.setReadBufferSize": ('int',), + "QLocalSocket.setServerName": ('str',), + "QLocalSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QLocalSocket.LocalSocketState', 'OpenMode'), + "QLocalSocket.socketDescriptor": (), + "QLocalSocket.state": (), + "QLocalSocket.waitForBytesWritten": ('int',), + "QLocalSocket.waitForConnected": ('int',), + "QLocalSocket.waitForDisconnected": ('int',), + "QLocalSocket.waitForReadyRead": ('int',), + "QLocalSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkAccessManager: + "QNetworkAccessManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkAccessManager.activeConfiguration": (), + "QNetworkAccessManager.cache": (), + "QNetworkAccessManager.clearAccessCache": (), + "QNetworkAccessManager.clearConnectionCache": (), + "QNetworkAccessManager.configuration": (), + "QNetworkAccessManager.connectToHost": ('str', 'int'), + "QNetworkAccessManager.connectToHostEncrypted": ('str', 'int', 'PySide2.QtNetwork.QSslConfiguration'), + "QNetworkAccessManager.cookieJar": (), + "QNetworkAccessManager.createRequest": ('PySide2.QtNetwork.QNetworkAccessManager.Operation', 'PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), + "QNetworkAccessManager.deleteResource": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.get": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.head": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.isStrictTransportSecurityEnabled": (), + "QNetworkAccessManager.networkAccessible": (), + "QNetworkAccessManager.post": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.proxy": (), + "QNetworkAccessManager.proxyFactory": (), + "QNetworkAccessManager.put": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.redirectPolicy": (), + "QNetworkAccessManager.sendCustomRequest": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.setCache": ('PySide2.QtNetwork.QAbstractNetworkCache',), + "QNetworkAccessManager.setConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkAccessManager.setCookieJar": ('PySide2.QtNetwork.QNetworkCookieJar',), + "QNetworkAccessManager.setNetworkAccessible": ('PySide2.QtNetwork.QNetworkAccessManager.NetworkAccessibility',), + "QNetworkAccessManager.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkAccessManager.setProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkAccessManager.setRedirectPolicy": ('PySide2.QtNetwork.QNetworkRequest.RedirectPolicy',), + "QNetworkAccessManager.setStrictTransportSecurityEnabled": ('bool',), + "QNetworkAccessManager.supportedSchemes": (), + "QNetworkAccessManager.supportedSchemesImplementation": (), + + # class PySide2.QtNetwork.QNetworkAddressEntry: + "QNetworkAddressEntry.__init__": [(), ('PySide2.QtNetwork.QNetworkAddressEntry',)], + "QNetworkAddressEntry.__copy__": (), + "QNetworkAddressEntry.broadcast": (), + "QNetworkAddressEntry.ip": (), + "QNetworkAddressEntry.netmask": (), + "QNetworkAddressEntry.prefixLength": (), + "QNetworkAddressEntry.setBroadcast": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setIp": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setNetmask": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setPrefixLength": ('int',), + "QNetworkAddressEntry.swap": ('PySide2.QtNetwork.QNetworkAddressEntry',), + + # class PySide2.QtNetwork.QNetworkCacheMetaData: + "QNetworkCacheMetaData.__init__": [(), ('PySide2.QtNetwork.QNetworkCacheMetaData',)], + "QNetworkCacheMetaData.__copy__": (), + "QNetworkCacheMetaData.attributes": (), + "QNetworkCacheMetaData.expirationDate": (), + "QNetworkCacheMetaData.isValid": (), + "QNetworkCacheMetaData.lastModified": (), + "QNetworkCacheMetaData.saveToDisk": (), + "QNetworkCacheMetaData.setAttributes": ('dict',), + "QNetworkCacheMetaData.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setLastModified": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setSaveToDisk": ('bool',), + "QNetworkCacheMetaData.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCacheMetaData.swap": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkCacheMetaData.url": (), + + # class PySide2.QtNetwork.QNetworkConfiguration: + "QNetworkConfiguration.__init__": [(), ('PySide2.QtNetwork.QNetworkConfiguration',)], + "QNetworkConfiguration.__copy__": (), + "QNetworkConfiguration.bearerType": (), + "QNetworkConfiguration.bearerTypeFamily": (), + "QNetworkConfiguration.bearerTypeName": (), + "QNetworkConfiguration.children": (), + "QNetworkConfiguration.connectTimeout": (), + "QNetworkConfiguration.identifier": (), + "QNetworkConfiguration.isRoamingAvailable": (), + "QNetworkConfiguration.isValid": (), + "QNetworkConfiguration.name": (), + "QNetworkConfiguration.purpose": (), + "QNetworkConfiguration.setConnectTimeout": ('int',), + "QNetworkConfiguration.state": (), + "QNetworkConfiguration.swap": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkConfiguration.type": (), + + # class PySide2.QtNetwork.QNetworkConfigurationManager: + "QNetworkConfigurationManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkConfigurationManager.allConfigurations": ('StateFlags',), + "QNetworkConfigurationManager.capabilities": (), + "QNetworkConfigurationManager.configurationFromIdentifier": ('str',), + "QNetworkConfigurationManager.defaultConfiguration": (), + "QNetworkConfigurationManager.isOnline": (), + "QNetworkConfigurationManager.updateConfigurations": (), + + # class PySide2.QtNetwork.QNetworkCookie: + "QNetworkCookie.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkCookie',)], + "QNetworkCookie.__copy__": (), + "QNetworkCookie.domain": (), + "QNetworkCookie.expirationDate": (), + "QNetworkCookie.hasSameIdentifier": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.isHttpOnly": (), + "QNetworkCookie.isSecure": (), + "QNetworkCookie.isSessionCookie": (), + "QNetworkCookie.name": (), + "QNetworkCookie.normalize": ('PySide2.QtCore.QUrl',), + "QNetworkCookie.parseCookies": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.path": (), + "QNetworkCookie.setDomain": ('str',), + "QNetworkCookie.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCookie.setHttpOnly": ('bool',), + "QNetworkCookie.setName": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.setPath": ('str',), + "QNetworkCookie.setSecure": ('bool',), + "QNetworkCookie.setValue": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.swap": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.toRawForm": ('PySide2.QtNetwork.QNetworkCookie.RawForm',), + "QNetworkCookie.value": (), + + # class PySide2.QtNetwork.QNetworkCookieJar: + "QNetworkCookieJar.__init__": ('PySide2.QtCore.QObject',), + "QNetworkCookieJar.allCookies": (), + "QNetworkCookieJar.cookiesForUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCookieJar.deleteCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.insertCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.setAllCookies": ('list',), + "QNetworkCookieJar.setCookiesFromUrl": ('list', 'PySide2.QtCore.QUrl'), + "QNetworkCookieJar.updateCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.validateCookie": ('PySide2.QtNetwork.QNetworkCookie', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtNetwork.QNetworkDiskCache: + "QNetworkDiskCache.__init__": ('PySide2.QtCore.QObject',), + "QNetworkDiskCache.cacheDirectory": (), + "QNetworkDiskCache.cacheSize": (), + "QNetworkDiskCache.clear": (), + "QNetworkDiskCache.data": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.expire": (), + "QNetworkDiskCache.fileMetaData": ('str',), + "QNetworkDiskCache.insert": ('PySide2.QtCore.QIODevice',), + "QNetworkDiskCache.maximumCacheSize": (), + "QNetworkDiskCache.metaData": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkDiskCache.remove": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.setCacheDirectory": ('str',), + "QNetworkDiskCache.setMaximumCacheSize": ('int',), + "QNetworkDiskCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QNetworkInterface: + "QNetworkInterface.__init__": [(), ('PySide2.QtNetwork.QNetworkInterface',)], + "QNetworkInterface.__copy__": (), + "QNetworkInterface.addressEntries": (), + "QNetworkInterface.allAddresses": (), + "QNetworkInterface.allInterfaces": (), + "QNetworkInterface.flags": (), + "QNetworkInterface.hardwareAddress": (), + "QNetworkInterface.humanReadableName": (), + "QNetworkInterface.index": (), + "QNetworkInterface.interfaceFromIndex": ('int',), + "QNetworkInterface.interfaceFromName": ('str',), + "QNetworkInterface.interfaceIndexFromName": ('str',), + "QNetworkInterface.interfaceNameFromIndex": ('int',), + "QNetworkInterface.isValid": (), + "QNetworkInterface.name": (), + "QNetworkInterface.swap": ('PySide2.QtNetwork.QNetworkInterface',), + + # class PySide2.QtNetwork.QNetworkProxy: + "QNetworkProxy.__init__": [(), ('PySide2.QtNetwork.QNetworkProxy',), ('PySide2.QtNetwork.QNetworkProxy.ProxyType', 'str', 'int', 'str', 'str')], + "QNetworkProxy.__copy__": (), + "QNetworkProxy.applicationProxy": (), + "QNetworkProxy.capabilities": (), + "QNetworkProxy.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkProxy.hostName": (), + "QNetworkProxy.isCachingProxy": (), + "QNetworkProxy.isTransparentProxy": (), + "QNetworkProxy.password": (), + "QNetworkProxy.port": (), + "QNetworkProxy.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.rawHeaderList": (), + "QNetworkProxy.setApplicationProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.setCapabilities": ('Capabilities',), + "QNetworkProxy.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkProxy.setHostName": ('str',), + "QNetworkProxy.setPassword": ('str',), + "QNetworkProxy.setPort": ('int',), + "QNetworkProxy.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkProxy.setType": ('PySide2.QtNetwork.QNetworkProxy.ProxyType',), + "QNetworkProxy.setUser": ('str',), + "QNetworkProxy.swap": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.type": (), + "QNetworkProxy.user": (), + + # class PySide2.QtNetwork.QNetworkProxyFactory: + "QNetworkProxyFactory.__init__": (), + "QNetworkProxyFactory.proxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.queryProxy": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.setApplicationProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkProxyFactory.setUseSystemConfiguration": ('bool',), + "QNetworkProxyFactory.systemProxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.usesSystemConfiguration": (), + + # class PySide2.QtNetwork.QNetworkProxyQuery: + "QNetworkProxyQuery.__init__": [(), ('PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkProxyQuery',), ('int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType')], + "QNetworkProxyQuery.__copy__": (), + "QNetworkProxyQuery.localPort": (), + "QNetworkProxyQuery.networkConfiguration": (), + "QNetworkProxyQuery.peerHostName": (), + "QNetworkProxyQuery.peerPort": (), + "QNetworkProxyQuery.protocolTag": (), + "QNetworkProxyQuery.queryType": (), + "QNetworkProxyQuery.setLocalPort": ('int',), + "QNetworkProxyQuery.setNetworkConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkProxyQuery.setPeerHostName": ('str',), + "QNetworkProxyQuery.setPeerPort": ('int',), + "QNetworkProxyQuery.setProtocolTag": ('str',), + "QNetworkProxyQuery.setQueryType": ('PySide2.QtNetwork.QNetworkProxyQuery.QueryType',), + "QNetworkProxyQuery.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkProxyQuery.swap": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyQuery.url": (), + + # class PySide2.QtNetwork.QNetworkReply: + "QNetworkReply.__init__": ('PySide2.QtCore.QObject',), + "QNetworkReply.abort": (), + "QNetworkReply.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute',), + "QNetworkReply.close": (), + "QNetworkReply.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkReply.ignoreSslErrors": [(), ('list',)], + "QNetworkReply.ignoreSslErrorsImplementation": ('list',), + "QNetworkReply.isFinished": (), + "QNetworkReply.isRunning": (), + "QNetworkReply.isSequential": (), + "QNetworkReply.manager": (), + "QNetworkReply.operation": (), + "QNetworkReply.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.rawHeaderList": (), + "QNetworkReply.readBufferSize": (), + "QNetworkReply.request": (), + "QNetworkReply.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkReply.setError": ('PySide2.QtNetwork.QNetworkReply.NetworkError', 'str'), + "QNetworkReply.setFinished": ('bool',), + "QNetworkReply.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkReply.setOperation": ('PySide2.QtNetwork.QNetworkAccessManager.Operation',), + "QNetworkReply.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkReply.setReadBufferSize": ('int',), + "QNetworkReply.setRequest": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkReply.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setSslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkReply.sslConfiguration": (), + "QNetworkReply.sslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.url": (), + "QNetworkReply.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkRequest: + "QNetworkRequest.__init__": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QNetworkRequest.__copy__": (), + "QNetworkRequest.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkRequest.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkRequest.maximumRedirectsAllowed": (), + "QNetworkRequest.originatingObject": (), + "QNetworkRequest.priority": (), + "QNetworkRequest.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.rawHeaderList": (), + "QNetworkRequest.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkRequest.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkRequest.setMaximumRedirectsAllowed": ('int',), + "QNetworkRequest.setOriginatingObject": ('PySide2.QtCore.QObject',), + "QNetworkRequest.setPriority": ('PySide2.QtNetwork.QNetworkRequest.Priority',), + "QNetworkRequest.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkRequest.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkRequest.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkRequest.sslConfiguration": (), + "QNetworkRequest.swap": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkRequest.url": (), + + # class PySide2.QtNetwork.QNetworkSession: + "QNetworkSession.__init__": ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QObject'), + "QNetworkSession.accept": (), + "QNetworkSession.activeTime": (), + "QNetworkSession.bytesReceived": (), + "QNetworkSession.bytesWritten": (), + "QNetworkSession.close": (), + "QNetworkSession.configuration": (), + "QNetworkSession.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.errorString": (), + "QNetworkSession.ignore": (), + "QNetworkSession.interface": (), + "QNetworkSession.isOpen": (), + "QNetworkSession.migrate": (), + "QNetworkSession.open": (), + "QNetworkSession.reject": (), + "QNetworkSession.sessionProperty": ('str',), + "QNetworkSession.setSessionProperty": ('str', 'Any'), + "QNetworkSession.state": (), + "QNetworkSession.stop": (), + "QNetworkSession.usagePolicies": (), + "QNetworkSession.waitForOpened": ('int',), + + # class PySide2.QtNetwork.QSsl: + + # class PySide2.QtNetwork.QSslCertificate: + "QSslCertificate.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtNetwork.QSslCertificate',)], + "QSslCertificate.__copy__": (), + "QSslCertificate.clear": (), + "QSslCertificate.digest": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QSslCertificate.effectiveDate": (), + "QSslCertificate.expiryDate": (), + "QSslCertificate.fromData": ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromDevice": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromPath": ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax'), + "QSslCertificate.handle": (), + "QSslCertificate.importPkcs12": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSslKey', 'PySide2.QtNetwork.QSslCertificate', 'list', 'PySide2.QtCore.QByteArray'), + "QSslCertificate.isBlacklisted": (), + "QSslCertificate.isNull": (), + "QSslCertificate.isSelfSigned": (), + "QSslCertificate.issuerInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.issuerInfoAttributes": (), + "QSslCertificate.publicKey": (), + "QSslCertificate.serialNumber": (), + "QSslCertificate.subjectAlternativeNames": (), + "QSslCertificate.subjectInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.subjectInfoAttributes": (), + "QSslCertificate.swap": ('PySide2.QtNetwork.QSslCertificate',), + "QSslCertificate.toDer": (), + "QSslCertificate.toPem": (), + "QSslCertificate.toText": (), + "QSslCertificate.verify": ('list', 'str'), + "QSslCertificate.version": (), + + # class PySide2.QtNetwork.QSslCipher: + "QSslCipher.__init__": [(), ('PySide2.QtNetwork.QSslCipher',), ('str',), ('str', 'PySide2.QtNetwork.QSsl.SslProtocol')], + "QSslCipher.__copy__": (), + "QSslCipher.authenticationMethod": (), + "QSslCipher.encryptionMethod": (), + "QSslCipher.isNull": (), + "QSslCipher.keyExchangeMethod": (), + "QSslCipher.name": (), + "QSslCipher.protocol": (), + "QSslCipher.protocolString": (), + "QSslCipher.supportedBits": (), + "QSslCipher.swap": ('PySide2.QtNetwork.QSslCipher',), + "QSslCipher.usedBits": (), + + # class PySide2.QtNetwork.QSslConfiguration: + "QSslConfiguration.__init__": [(), ('PySide2.QtNetwork.QSslConfiguration',)], + "QSslConfiguration.__copy__": (), + "QSslConfiguration.allowedNextProtocols": (), + "QSslConfiguration.caCertificates": (), + "QSslConfiguration.ciphers": (), + "QSslConfiguration.defaultConfiguration": (), + "QSslConfiguration.ephemeralServerKey": (), + "QSslConfiguration.isNull": (), + "QSslConfiguration.localCertificate": (), + "QSslConfiguration.localCertificateChain": (), + "QSslConfiguration.nextNegotiatedProtocol": (), + "QSslConfiguration.nextProtocolNegotiationStatus": (), + "QSslConfiguration.peerCertificate": (), + "QSslConfiguration.peerCertificateChain": (), + "QSslConfiguration.peerVerifyDepth": (), + "QSslConfiguration.peerVerifyMode": (), + "QSslConfiguration.preSharedKeyIdentityHint": (), + "QSslConfiguration.privateKey": (), + "QSslConfiguration.protocol": (), + "QSslConfiguration.sessionCipher": (), + "QSslConfiguration.sessionProtocol": (), + "QSslConfiguration.sessionTicket": (), + "QSslConfiguration.sessionTicketLifeTimeHint": (), + "QSslConfiguration.setAllowedNextProtocols": ('list',), + "QSslConfiguration.setCaCertificates": ('list',), + "QSslConfiguration.setCiphers": ('list',), + "QSslConfiguration.setDefaultConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.setLocalCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslConfiguration.setLocalCertificateChain": ('list',), + "QSslConfiguration.setPeerVerifyDepth": ('int',), + "QSslConfiguration.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslConfiguration.setPreSharedKeyIdentityHint": ('PySide2.QtCore.QByteArray',), + "QSslConfiguration.setPrivateKey": ('PySide2.QtNetwork.QSslKey',), + "QSslConfiguration.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslConfiguration.setSessionTicket": ('PySide2.QtCore.QByteArray',), + "QSslConfiguration.setSslOption": ('PySide2.QtNetwork.QSsl.SslOption', 'bool'), + "QSslConfiguration.supportedCiphers": (), + "QSslConfiguration.swap": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.systemCaCertificates": (), + "QSslConfiguration.testSslOption": ('PySide2.QtNetwork.QSsl.SslOption',), + + # class PySide2.QtNetwork.QSslError: + "QSslError.__init__": [(), ('PySide2.QtNetwork.QSslError',), ('PySide2.QtNetwork.QSslError.SslError',), ('PySide2.QtNetwork.QSslError.SslError', 'PySide2.QtNetwork.QSslCertificate')], + "QSslError.__copy__": (), + "QSslError.certificate": (), + "QSslError.error": (), + "QSslError.errorString": (), + "QSslError.swap": ('PySide2.QtNetwork.QSslError',), + + # class PySide2.QtNetwork.QSslKey: + "QSslKey.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QSslKey',), ('int', 'PySide2.QtNetwork.QSsl.KeyType')], + "QSslKey.__copy__": (), + "QSslKey.algorithm": (), + "QSslKey.clear": (), + "QSslKey.handle": (), + "QSslKey.isNull": (), + "QSslKey.length": (), + "QSslKey.swap": ('PySide2.QtNetwork.QSslKey',), + "QSslKey.toDer": ('PySide2.QtCore.QByteArray',), + "QSslKey.toPem": ('PySide2.QtCore.QByteArray',), + "QSslKey.type": (), + + # class PySide2.QtNetwork.QSslSocket: + "QSslSocket.__init__": ('PySide2.QtCore.QObject',), + "QSslSocket.abort": (), + "QSslSocket.addCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.addDefaultCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addDefaultCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.atEnd": (), + "QSslSocket.bytesAvailable": (), + "QSslSocket.bytesToWrite": (), + "QSslSocket.caCertificates": (), + "QSslSocket.canReadLine": (), + "QSslSocket.ciphers": (), + "QSslSocket.close": (), + "QSslSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'OpenMode'), ('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.connectToHostEncrypted": [('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol'), ('str', 'int', 'str', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.defaultCaCertificates": (), + "QSslSocket.defaultCiphers": (), + "QSslSocket.disconnectFromHost": (), + "QSslSocket.encryptedBytesAvailable": (), + "QSslSocket.encryptedBytesToWrite": (), + "QSslSocket.flush": (), + "QSslSocket.ignoreSslErrors": [(), ('list',)], + "QSslSocket.isEncrypted": (), + "QSslSocket.localCertificate": (), + "QSslSocket.localCertificateChain": (), + "QSslSocket.mode": (), + "QSslSocket.peerCertificate": (), + "QSslSocket.peerCertificateChain": (), + "QSslSocket.peerVerifyDepth": (), + "QSslSocket.peerVerifyMode": (), + "QSslSocket.peerVerifyName": (), + "QSslSocket.privateKey": (), + "QSslSocket.protocol": (), + "QSslSocket.readData": ('str', 'int'), + "QSslSocket.resume": (), + "QSslSocket.sessionCipher": (), + "QSslSocket.sessionProtocol": (), + "QSslSocket.setCaCertificates": ('list',), + "QSslSocket.setCiphers": [('list',), ('str',)], + "QSslSocket.setDefaultCaCertificates": ('list',), + "QSslSocket.setDefaultCiphers": ('list',), + "QSslSocket.setLocalCertificate": [('PySide2.QtNetwork.QSslCertificate',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat')], + "QSslSocket.setLocalCertificateChain": ('list',), + "QSslSocket.setPeerVerifyDepth": ('int',), + "QSslSocket.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslSocket.setPeerVerifyName": ('str',), + "QSslSocket.setPrivateKey": [('PySide2.QtNetwork.QSslKey',), ('str', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QByteArray')], + "QSslSocket.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslSocket.setReadBufferSize": ('int',), + "QSslSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'OpenMode'), + "QSslSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'Any'), + "QSslSocket.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QSslSocket.sslConfiguration": (), + "QSslSocket.sslLibraryBuildVersionNumber": (), + "QSslSocket.sslLibraryBuildVersionString": (), + "QSslSocket.sslLibraryVersionNumber": (), + "QSslSocket.sslLibraryVersionString": (), + "QSslSocket.startClientEncryption": (), + "QSslSocket.startServerEncryption": (), + "QSslSocket.supportedCiphers": (), + "QSslSocket.supportsSsl": (), + "QSslSocket.systemCaCertificates": (), + "QSslSocket.waitForBytesWritten": ('int',), + "QSslSocket.waitForConnected": ('int',), + "QSslSocket.waitForDisconnected": ('int',), + "QSslSocket.waitForEncrypted": ('int',), + "QSslSocket.waitForReadyRead": ('int',), + "QSslSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QTcpServer: + "QTcpServer.__init__": ('PySide2.QtCore.QObject',), + "QTcpServer.addPendingConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QTcpServer.close": (), + "QTcpServer.errorString": (), + "QTcpServer.hasPendingConnections": (), + "QTcpServer.incomingConnection": ('int',), + "QTcpServer.isListening": (), + "QTcpServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QTcpServer.maxPendingConnections": (), + "QTcpServer.nextPendingConnection": (), + "QTcpServer.pauseAccepting": (), + "QTcpServer.proxy": (), + "QTcpServer.resumeAccepting": (), + "QTcpServer.serverAddress": (), + "QTcpServer.serverError": (), + "QTcpServer.serverPort": (), + "QTcpServer.setMaxPendingConnections": ('int',), + "QTcpServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QTcpServer.setSocketDescriptor": ('int',), + "QTcpServer.socketDescriptor": (), + "QTcpServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QTcpSocket: + "QTcpSocket.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtNetwork.QUdpSocket: + "QUdpSocket.__init__": ('PySide2.QtCore.QObject',), + "QUdpSocket.hasPendingDatagrams": (), + "QUdpSocket.joinMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.leaveMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.multicastInterface": (), + "QUdpSocket.pendingDatagramSize": (), + "QUdpSocket.readDatagram": ('str', 'int', 'PySide2.QtNetwork.QHostAddress', 'int'), + "QUdpSocket.setMulticastInterface": ('PySide2.QtNetwork.QNetworkInterface',), + "QUdpSocket.writeDatagram": ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHostAddress', 'int'), + }) + +# Module PySide2.QtTest +if "PySide2.QtTest" in sys.modules: + dict.update({ + + # class PySide2.QtTest.QTest: + "QTest.addColumnInternal": ('int', 'str'), + "QTest.asciiToKey": ('Union[str, int]',), + "QTest.compare_string_helper": ('str', 'str', 'str', 'str', 'str', 'int'), + "QTest.createTouchDevice": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTest.currentAppName": (), + "QTest.currentDataTag": (), + "QTest.currentTestFailed": (), + "QTest.currentTestFunction": (), + "QTest.ignoreMessage": [('PySide2.QtCore.QtMsgType', 'PySide2.QtCore.QRegularExpression'), ('PySide2.QtCore.QtMsgType', 'str')], + "QTest.keyClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyClicks": ('PySide2.QtWidgets.QWidget', 'str', 'KeyboardModifiers', 'int'), + "QTest.keyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyPress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyToAscii": ('PySide2.QtCore.Qt.Key',), + "QTest.mouseClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseDClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseEvent": [('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseMove": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mousePress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.qElementData": ('str', 'int'), + "QTest.qExpectFail": ('str', 'str', 'PySide2.QtTest.QTest.TestFailMode', 'str', 'int'), + "QTest.qFindTestData": ('str', 'str', 'int', 'str'), + "QTest.qGlobalData": ('str', 'int'), + "QTest.qSkip": ('str', 'str', 'int'), + "QTest.qWaitForWindowActive": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.qWaitForWindowExposed": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.sendKeyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'str', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'str', 'KeyboardModifiers', 'int')], + "QTest.setBenchmarkResult": ('float', 'PySide2.QtTest.QTest.QBenchmarkMetric'), + "QTest.setMainSourcePath": ('str', 'str'), + "QTest.simulateEvent": [('PySide2.QtGui.QWindow', 'bool', 'int', 'KeyboardModifiers', 'str', 'bool', 'int'), ('PySide2.QtWidgets.QWidget', 'bool', 'int', 'KeyboardModifiers', 'str', 'bool', 'int')], + "QTest.testObject": (), + "QTest.toPrettyCString": ('str', 'int'), + "QTest.touchEvent": [('PySide2.QtGui.QWindow', 'PySide2.QtGui.QTouchDevice', 'bool'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QTouchDevice', 'bool')], + "QTest.waitForEvents": (), + }) + +# Module PySide2.QtConcurrent +if "PySide2.QtConcurrent" in sys.modules: + dict.update({ + + # class PySide2.QtConcurrent.QtConcurrent: + }) + +# Module PySide2.QtMacExtras +if "PySide2.QtMacExtras" in sys.modules: + dict.update({ + + # class PySide2.QtMacExtras.QMacPasteboardMime: + "QMacPasteboardMime.__init__": ('Union[str, int]',), + "QMacPasteboardMime.canConvert": ('str', 'str'), + "QMacPasteboardMime.convertFromMime": ('str', 'Any', 'str'), + "QMacPasteboardMime.convertToMime": ('str', 'list', 'str'), + "QMacPasteboardMime.convertorName": (), + "QMacPasteboardMime.count": ('PySide2.QtCore.QMimeData',), + "QMacPasteboardMime.flavorFor": ('str',), + "QMacPasteboardMime.mimeFor": ('str',), + + # class PySide2.QtMacExtras.QMacToolBar: + "QMacToolBar.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QMacToolBar.addAllowedItem": ('PySide2.QtGui.QIcon', 'str'), + "QMacToolBar.addAllowedStandardItem": ('PySide2.QtMacExtras.QMacToolBarItem.StandardItem',), + "QMacToolBar.addItem": ('PySide2.QtGui.QIcon', 'str'), + "QMacToolBar.addSeparator": (), + "QMacToolBar.addStandardItem": ('PySide2.QtMacExtras.QMacToolBarItem.StandardItem',), + "QMacToolBar.allowedItems": (), + "QMacToolBar.attachToWindow": ('PySide2.QtGui.QWindow',), + "QMacToolBar.detachFromWindow": (), + "QMacToolBar.items": (), + "QMacToolBar.setAllowedItems": ('list',), + "QMacToolBar.setItems": ('list',), + + # class PySide2.QtMacExtras.QMacToolBarItem: + "QMacToolBarItem.__init__": ('PySide2.QtCore.QObject',), + "QMacToolBarItem.icon": (), + "QMacToolBarItem.selectable": (), + "QMacToolBarItem.setIcon": ('PySide2.QtGui.QIcon',), + "QMacToolBarItem.setSelectable": ('bool',), + "QMacToolBarItem.setStandardItem": ('PySide2.QtMacExtras.QMacToolBarItem.StandardItem',), + "QMacToolBarItem.setText": ('str',), + "QMacToolBarItem.standardItem": (), + "QMacToolBarItem.text": (), + }) + +# Module PySide2.QtXml +if "PySide2.QtXml" in sys.modules: + dict.update({ + + # class PySide2.QtXml.QDomAttr: + "QDomAttr.__init__": [(), ('PySide2.QtXml.QDomAttr',)], + "QDomAttr.__copy__": (), + "QDomAttr.name": (), + "QDomAttr.nodeType": (), + "QDomAttr.ownerElement": (), + "QDomAttr.setValue": ('str',), + "QDomAttr.specified": (), + "QDomAttr.value": (), + + # class PySide2.QtXml.QDomCDATASection: + "QDomCDATASection.__init__": [(), ('PySide2.QtXml.QDomCDATASection',)], + "QDomCDATASection.__copy__": (), + "QDomCDATASection.nodeType": (), + + # class PySide2.QtXml.QDomCharacterData: + "QDomCharacterData.__init__": [(), ('PySide2.QtXml.QDomCharacterData',)], + "QDomCharacterData.__copy__": (), + "QDomCharacterData.appendData": ('str',), + "QDomCharacterData.data": (), + "QDomCharacterData.deleteData": ('int', 'int'), + "QDomCharacterData.insertData": ('int', 'str'), + "QDomCharacterData.length": (), + "QDomCharacterData.nodeType": (), + "QDomCharacterData.replaceData": ('int', 'int', 'str'), + "QDomCharacterData.setData": ('str',), + "QDomCharacterData.substringData": ('int', 'int'), + + # class PySide2.QtXml.QDomComment: + "QDomComment.__init__": [(), ('PySide2.QtXml.QDomComment',)], + "QDomComment.__copy__": (), + "QDomComment.nodeType": (), + + # class PySide2.QtXml.QDomDocument: + "QDomDocument.__init__": [(), ('PySide2.QtXml.QDomDocument',), ('PySide2.QtXml.QDomDocumentType',), ('str',)], + "QDomDocument.__copy__": (), + "QDomDocument.createAttribute": ('str',), + "QDomDocument.createAttributeNS": ('str', 'str'), + "QDomDocument.createCDATASection": ('str',), + "QDomDocument.createComment": ('str',), + "QDomDocument.createDocumentFragment": (), + "QDomDocument.createElement": ('str',), + "QDomDocument.createElementNS": ('str', 'str'), + "QDomDocument.createEntityReference": ('str',), + "QDomDocument.createProcessingInstruction": ('str', 'str'), + "QDomDocument.createTextNode": ('str',), + "QDomDocument.doctype": (), + "QDomDocument.documentElement": (), + "QDomDocument.elementById": ('str',), + "QDomDocument.elementsByTagName": ('str',), + "QDomDocument.elementsByTagNameNS": ('str', 'str'), + "QDomDocument.implementation": (), + "QDomDocument.importNode": ('PySide2.QtXml.QDomNode', 'bool'), + "QDomDocument.nodeType": (), + "QDomDocument.setContent": [('PySide2.QtCore.QByteArray', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QByteArray', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'PySide2.QtXml.QXmlReader', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'bool', 'str', 'int', 'int'), ('str', 'bool', 'str', 'int', 'int'), ('str', 'str', 'int', 'int')], + "QDomDocument.toByteArray": ('int',), + "QDomDocument.toString": ('int',), + + # class PySide2.QtXml.QDomDocumentFragment: + "QDomDocumentFragment.__init__": [(), ('PySide2.QtXml.QDomDocumentFragment',)], + "QDomDocumentFragment.__copy__": (), + "QDomDocumentFragment.nodeType": (), + + # class PySide2.QtXml.QDomDocumentType: + "QDomDocumentType.__init__": [(), ('PySide2.QtXml.QDomDocumentType',)], + "QDomDocumentType.__copy__": (), + "QDomDocumentType.entities": (), + "QDomDocumentType.internalSubset": (), + "QDomDocumentType.name": (), + "QDomDocumentType.nodeType": (), + "QDomDocumentType.notations": (), + "QDomDocumentType.publicId": (), + "QDomDocumentType.systemId": (), + + # class PySide2.QtXml.QDomElement: + "QDomElement.__init__": [(), ('PySide2.QtXml.QDomElement',)], + "QDomElement.__copy__": (), + "QDomElement.attribute": ('str', 'str'), + "QDomElement.attributeNS": ('str', 'str', 'str'), + "QDomElement.attributeNode": ('str',), + "QDomElement.attributeNodeNS": ('str', 'str'), + "QDomElement.attributes": (), + "QDomElement.elementsByTagName": ('str',), + "QDomElement.elementsByTagNameNS": ('str', 'str'), + "QDomElement.hasAttribute": ('str',), + "QDomElement.hasAttributeNS": ('str', 'str'), + "QDomElement.nodeType": (), + "QDomElement.removeAttribute": ('str',), + "QDomElement.removeAttributeNS": ('str', 'str'), + "QDomElement.removeAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttribute": [('str', 'float'), ('str', 'int'), ('str', 'str')], + "QDomElement.setAttributeNS": [('str', 'str', 'float'), ('str', 'str', 'int'), ('str', 'str', 'str')], + "QDomElement.setAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttributeNodeNS": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setTagName": ('str',), + "QDomElement.tagName": (), + "QDomElement.text": (), + + # class PySide2.QtXml.QDomEntity: + "QDomEntity.__init__": [(), ('PySide2.QtXml.QDomEntity',)], + "QDomEntity.__copy__": (), + "QDomEntity.nodeType": (), + "QDomEntity.notationName": (), + "QDomEntity.publicId": (), + "QDomEntity.systemId": (), + + # class PySide2.QtXml.QDomEntityReference: + "QDomEntityReference.__init__": [(), ('PySide2.QtXml.QDomEntityReference',)], + "QDomEntityReference.__copy__": (), + "QDomEntityReference.nodeType": (), + + # class PySide2.QtXml.QDomImplementation: + "QDomImplementation.__init__": [(), ('PySide2.QtXml.QDomImplementation',)], + "QDomImplementation.__copy__": (), + "QDomImplementation.createDocument": ('str', 'str', 'PySide2.QtXml.QDomDocumentType'), + "QDomImplementation.createDocumentType": ('str', 'str', 'str'), + "QDomImplementation.hasFeature": ('str', 'str'), + "QDomImplementation.invalidDataPolicy": (), + "QDomImplementation.isNull": (), + "QDomImplementation.setInvalidDataPolicy": ('PySide2.QtXml.QDomImplementation.InvalidDataPolicy',), + + # class PySide2.QtXml.QDomNamedNodeMap: + "QDomNamedNodeMap.__init__": [(), ('PySide2.QtXml.QDomNamedNodeMap',)], + "QDomNamedNodeMap.__copy__": (), + "QDomNamedNodeMap.contains": ('str',), + "QDomNamedNodeMap.count": (), + "QDomNamedNodeMap.isEmpty": (), + "QDomNamedNodeMap.item": ('int',), + "QDomNamedNodeMap.length": (), + "QDomNamedNodeMap.namedItem": ('str',), + "QDomNamedNodeMap.namedItemNS": ('str', 'str'), + "QDomNamedNodeMap.removeNamedItem": ('str',), + "QDomNamedNodeMap.removeNamedItemNS": ('str', 'str'), + "QDomNamedNodeMap.setNamedItem": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.setNamedItemNS": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.size": (), + + # class PySide2.QtXml.QDomNode: + "QDomNode.__init__": [(), ('PySide2.QtXml.QDomNode',)], + "QDomNode.__copy__": (), + "QDomNode.appendChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.attributes": (), + "QDomNode.childNodes": (), + "QDomNode.clear": (), + "QDomNode.cloneNode": ('bool',), + "QDomNode.columnNumber": (), + "QDomNode.firstChild": (), + "QDomNode.firstChildElement": ('str',), + "QDomNode.hasAttributes": (), + "QDomNode.hasChildNodes": (), + "QDomNode.insertAfter": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.insertBefore": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.isAttr": (), + "QDomNode.isCDATASection": (), + "QDomNode.isCharacterData": (), + "QDomNode.isComment": (), + "QDomNode.isDocument": (), + "QDomNode.isDocumentFragment": (), + "QDomNode.isDocumentType": (), + "QDomNode.isElement": (), + "QDomNode.isEntity": (), + "QDomNode.isEntityReference": (), + "QDomNode.isNotation": (), + "QDomNode.isNull": (), + "QDomNode.isProcessingInstruction": (), + "QDomNode.isSupported": ('str', 'str'), + "QDomNode.isText": (), + "QDomNode.lastChild": (), + "QDomNode.lastChildElement": ('str',), + "QDomNode.lineNumber": (), + "QDomNode.localName": (), + "QDomNode.namedItem": ('str',), + "QDomNode.namespaceURI": (), + "QDomNode.nextSibling": (), + "QDomNode.nextSiblingElement": ('str',), + "QDomNode.nodeName": (), + "QDomNode.nodeType": (), + "QDomNode.nodeValue": (), + "QDomNode.normalize": (), + "QDomNode.ownerDocument": (), + "QDomNode.parentNode": (), + "QDomNode.prefix": (), + "QDomNode.previousSibling": (), + "QDomNode.previousSiblingElement": ('str',), + "QDomNode.removeChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.replaceChild": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.save": ('PySide2.QtCore.QTextStream', 'int', 'PySide2.QtXml.QDomNode.EncodingPolicy'), + "QDomNode.setNodeValue": ('str',), + "QDomNode.setPrefix": ('str',), + "QDomNode.toAttr": (), + "QDomNode.toCDATASection": (), + "QDomNode.toCharacterData": (), + "QDomNode.toComment": (), + "QDomNode.toDocument": (), + "QDomNode.toDocumentFragment": (), + "QDomNode.toDocumentType": (), + "QDomNode.toElement": (), + "QDomNode.toEntity": (), + "QDomNode.toEntityReference": (), + "QDomNode.toNotation": (), + "QDomNode.toProcessingInstruction": (), + "QDomNode.toText": (), + + # class PySide2.QtXml.QDomNodeList: + "QDomNodeList.__init__": [(), ('PySide2.QtXml.QDomNodeList',)], + "QDomNodeList.__copy__": (), + "QDomNodeList.at": ('int',), + "QDomNodeList.count": (), + "QDomNodeList.isEmpty": (), + "QDomNodeList.item": ('int',), + "QDomNodeList.length": (), + "QDomNodeList.size": (), + + # class PySide2.QtXml.QDomNotation: + "QDomNotation.__init__": [(), ('PySide2.QtXml.QDomNotation',)], + "QDomNotation.__copy__": (), + "QDomNotation.nodeType": (), + "QDomNotation.publicId": (), + "QDomNotation.systemId": (), + + # class PySide2.QtXml.QDomProcessingInstruction: + "QDomProcessingInstruction.__init__": [(), ('PySide2.QtXml.QDomProcessingInstruction',)], + "QDomProcessingInstruction.__copy__": (), + "QDomProcessingInstruction.data": (), + "QDomProcessingInstruction.nodeType": (), + "QDomProcessingInstruction.setData": ('str',), + "QDomProcessingInstruction.target": (), + + # class PySide2.QtXml.QDomText: + "QDomText.__init__": [(), ('PySide2.QtXml.QDomText',)], + "QDomText.__copy__": (), + "QDomText.nodeType": (), + "QDomText.splitText": ('int',), + + # class PySide2.QtXml.QXmlAttributes: + "QXmlAttributes.__init__": [(), ('PySide2.QtXml.QXmlAttributes',)], + "QXmlAttributes.__copy__": (), + "QXmlAttributes.append": ('str', 'str', 'str', 'str'), + "QXmlAttributes.clear": (), + "QXmlAttributes.count": (), + "QXmlAttributes.index": [('str',), ('str', 'str')], + "QXmlAttributes.length": (), + "QXmlAttributes.localName": ('int',), + "QXmlAttributes.qName": ('int',), + "QXmlAttributes.swap": ('PySide2.QtXml.QXmlAttributes',), + "QXmlAttributes.type": [('int',), ('str',), ('str', 'str')], + "QXmlAttributes.uri": ('int',), + "QXmlAttributes.value": [('int',), ('str',), ('str', 'str')], + + # class PySide2.QtXml.QXmlContentHandler: + "QXmlContentHandler.__init__": (), + "QXmlContentHandler.characters": ('str',), + "QXmlContentHandler.endDocument": (), + "QXmlContentHandler.endElement": ('str', 'str', 'str'), + "QXmlContentHandler.endPrefixMapping": ('str',), + "QXmlContentHandler.errorString": (), + "QXmlContentHandler.ignorableWhitespace": ('str',), + "QXmlContentHandler.processingInstruction": ('str', 'str'), + "QXmlContentHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlContentHandler.skippedEntity": ('str',), + "QXmlContentHandler.startDocument": (), + "QXmlContentHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlContentHandler.startPrefixMapping": ('str', 'str'), + + # class PySide2.QtXml.QXmlDTDHandler: + "QXmlDTDHandler.__init__": (), + "QXmlDTDHandler.errorString": (), + "QXmlDTDHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDTDHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + + # class PySide2.QtXml.QXmlDeclHandler: + "QXmlDeclHandler.__init__": (), + "QXmlDeclHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDeclHandler.errorString": (), + "QXmlDeclHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDeclHandler.internalEntityDecl": ('str', 'str'), + + # class PySide2.QtXml.QXmlDefaultHandler: + "QXmlDefaultHandler.__init__": (), + "QXmlDefaultHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDefaultHandler.characters": ('str',), + "QXmlDefaultHandler.comment": ('str',), + "QXmlDefaultHandler.endCDATA": (), + "QXmlDefaultHandler.endDTD": (), + "QXmlDefaultHandler.endDocument": (), + "QXmlDefaultHandler.endElement": ('str', 'str', 'str'), + "QXmlDefaultHandler.endEntity": ('str',), + "QXmlDefaultHandler.endPrefixMapping": ('str',), + "QXmlDefaultHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.errorString": (), + "QXmlDefaultHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.ignorableWhitespace": ('str',), + "QXmlDefaultHandler.internalEntityDecl": ('str', 'str'), + "QXmlDefaultHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.processingInstruction": ('str', 'str'), + "QXmlDefaultHandler.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + "QXmlDefaultHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlDefaultHandler.skippedEntity": ('str',), + "QXmlDefaultHandler.startCDATA": (), + "QXmlDefaultHandler.startDTD": ('str', 'str', 'str'), + "QXmlDefaultHandler.startDocument": (), + "QXmlDefaultHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlDefaultHandler.startEntity": ('str',), + "QXmlDefaultHandler.startPrefixMapping": ('str', 'str'), + "QXmlDefaultHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + "QXmlDefaultHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlEntityResolver: + "QXmlEntityResolver.__init__": (), + "QXmlEntityResolver.errorString": (), + "QXmlEntityResolver.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + + # class PySide2.QtXml.QXmlErrorHandler: + "QXmlErrorHandler.__init__": (), + "QXmlErrorHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.errorString": (), + "QXmlErrorHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlInputSource: + "QXmlInputSource.__init__": [(), ('PySide2.QtCore.QIODevice',)], + "QXmlInputSource.data": (), + "QXmlInputSource.fetchData": (), + "QXmlInputSource.fromRawData": ('PySide2.QtCore.QByteArray', 'bool'), + "QXmlInputSource.reset": (), + "QXmlInputSource.setData": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtXml.QXmlLexicalHandler: + "QXmlLexicalHandler.__init__": (), + "QXmlLexicalHandler.comment": ('str',), + "QXmlLexicalHandler.endCDATA": (), + "QXmlLexicalHandler.endDTD": (), + "QXmlLexicalHandler.endEntity": ('str',), + "QXmlLexicalHandler.errorString": (), + "QXmlLexicalHandler.startCDATA": (), + "QXmlLexicalHandler.startDTD": ('str', 'str', 'str'), + "QXmlLexicalHandler.startEntity": ('str',), + + # class PySide2.QtXml.QXmlLocator: + "QXmlLocator.__init__": (), + "QXmlLocator.columnNumber": (), + "QXmlLocator.lineNumber": (), + + # class PySide2.QtXml.QXmlNamespaceSupport: + "QXmlNamespaceSupport.__init__": (), + "QXmlNamespaceSupport.popContext": (), + "QXmlNamespaceSupport.prefix": ('str',), + "QXmlNamespaceSupport.prefixes": [(), ('str',)], + "QXmlNamespaceSupport.processName": ('str', 'bool', 'str', 'str'), + "QXmlNamespaceSupport.pushContext": (), + "QXmlNamespaceSupport.reset": (), + "QXmlNamespaceSupport.setPrefix": ('str', 'str'), + "QXmlNamespaceSupport.splitName": ('str', 'str', 'str'), + "QXmlNamespaceSupport.uri": ('str',), + + # class PySide2.QtXml.QXmlParseException: + "QXmlParseException.__init__": [('PySide2.QtXml.QXmlParseException',), ('str', 'int', 'int', 'str', 'str')], + "QXmlParseException.columnNumber": (), + "QXmlParseException.lineNumber": (), + "QXmlParseException.message": (), + "QXmlParseException.publicId": (), + "QXmlParseException.systemId": (), + + # class PySide2.QtXml.QXmlReader: + "QXmlReader.__init__": (), + "QXmlReader.DTDHandler": (), + "QXmlReader.contentHandler": (), + "QXmlReader.declHandler": (), + "QXmlReader.entityResolver": (), + "QXmlReader.errorHandler": (), + "QXmlReader.feature": ('str', 'bool'), + "QXmlReader.hasFeature": ('str',), + "QXmlReader.hasProperty": ('str',), + "QXmlReader.lexicalHandler": (), + "QXmlReader.parse": ('PySide2.QtXml.QXmlInputSource',), + "QXmlReader.property": ('str', 'bool'), + "QXmlReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlReader.setFeature": ('str', 'bool'), + "QXmlReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlReader.setProperty": ('str', 'int'), + + # class PySide2.QtXml.QXmlSimpleReader: + "QXmlSimpleReader.__init__": (), + "QXmlSimpleReader.DTDHandler": (), + "QXmlSimpleReader.contentHandler": (), + "QXmlSimpleReader.declHandler": (), + "QXmlSimpleReader.entityResolver": (), + "QXmlSimpleReader.errorHandler": (), + "QXmlSimpleReader.feature": ('str', 'bool'), + "QXmlSimpleReader.hasFeature": ('str',), + "QXmlSimpleReader.hasProperty": ('str',), + "QXmlSimpleReader.lexicalHandler": (), + "QXmlSimpleReader.parse": [('PySide2.QtXml.QXmlInputSource',), ('PySide2.QtXml.QXmlInputSource', 'bool')], + "QXmlSimpleReader.parseContinue": (), + "QXmlSimpleReader.property": ('str', 'bool'), + "QXmlSimpleReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlSimpleReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlSimpleReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlSimpleReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlSimpleReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlSimpleReader.setFeature": ('str', 'bool'), + "QXmlSimpleReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlSimpleReader.setProperty": ('str', 'int'), + }) + +# Module PySide2.QtXmlPatterns +if "PySide2.QtXmlPatterns" in sys.modules: + dict.update({ + + # class PySide2.QtXmlPatterns.QAbstractMessageHandler: + "QAbstractMessageHandler.__init__": ('PySide2.QtCore.QObject',), + "QAbstractMessageHandler.handleMessage": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + "QAbstractMessageHandler.message": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + + # class PySide2.QtXmlPatterns.QAbstractUriResolver: + "QAbstractUriResolver.__init__": ('PySide2.QtCore.QObject',), + "QAbstractUriResolver.resolve": ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtXmlPatterns.QAbstractXmlNodeModel: + "QAbstractXmlNodeModel.__init__": (), + "QAbstractXmlNodeModel.attributes": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.baseUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.compareOrder": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.createIndex": [('int',), ('int', 'int')], + "QAbstractXmlNodeModel.documentUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.elementById": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.isDeepEqual": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.kind": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.name": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceBindings": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceForPrefix": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'Missing(PySide2.QtXmlPatterns.QXmlName.PrefixCode)'), + "QAbstractXmlNodeModel.nextFromSimpleAxis": ('PySide2.QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.nodesByIdref": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.root": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.sendNamespaces": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QAbstractXmlReceiver'), + "QAbstractXmlNodeModel.sourceLocation": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.stringValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.typedValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + + # class PySide2.QtXmlPatterns.QAbstractXmlReceiver: + "QAbstractXmlReceiver.__init__": (), + "QAbstractXmlReceiver.atomicValue": ('Any',), + "QAbstractXmlReceiver.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.characters": ('str',), + "QAbstractXmlReceiver.comment": ('str',), + "QAbstractXmlReceiver.endDocument": (), + "QAbstractXmlReceiver.endElement": (), + "QAbstractXmlReceiver.endOfSequence": (), + "QAbstractXmlReceiver.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.startDocument": (), + "QAbstractXmlReceiver.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.startOfSequence": (), + "QAbstractXmlReceiver.whitespaceOnly": ('str',), + + # class PySide2.QtXmlPatterns.QSourceLocation: + "QSourceLocation.__init__": [(), ('PySide2.QtCore.QUrl', 'int', 'int'), ('PySide2.QtXmlPatterns.QSourceLocation',)], + "QSourceLocation.__copy__": (), + "QSourceLocation.column": (), + "QSourceLocation.isNull": (), + "QSourceLocation.line": (), + "QSourceLocation.setColumn": ('int',), + "QSourceLocation.setLine": ('int',), + "QSourceLocation.setUri": ('PySide2.QtCore.QUrl',), + "QSourceLocation.uri": (), + + # class PySide2.QtXmlPatterns.QXmlFormatter: + "QXmlFormatter.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlFormatter.atomicValue": ('Any',), + "QXmlFormatter.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.characters": ('str',), + "QXmlFormatter.comment": ('str',), + "QXmlFormatter.endDocument": (), + "QXmlFormatter.endElement": (), + "QXmlFormatter.endOfSequence": (), + "QXmlFormatter.indentationDepth": (), + "QXmlFormatter.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.setIndentationDepth": ('int',), + "QXmlFormatter.startDocument": (), + "QXmlFormatter.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlFormatter.startOfSequence": (), + + # class PySide2.QtXmlPatterns.QXmlItem: + "QXmlItem.__init__": [(), ('Any',), ('PySide2.QtXmlPatterns.QXmlItem',), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlItem.__copy__": (), + "QXmlItem.isAtomicValue": (), + "QXmlItem.isNode": (), + "QXmlItem.isNull": (), + "QXmlItem.toAtomicValue": (), + "QXmlItem.toNodeModelIndex": (), + + # class PySide2.QtXmlPatterns.QXmlName: + "QXmlName.__init__": [(), ('PySide2.QtXmlPatterns.QXmlName',), ('PySide2.QtXmlPatterns.QXmlNamePool', 'str', 'str', 'str')], + "QXmlName.__copy__": (), + "QXmlName.fromClarkName": ('str', 'PySide2.QtXmlPatterns.QXmlNamePool'), + "QXmlName.isNCName": ('str',), + "QXmlName.isNull": (), + "QXmlName.localName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.namespaceUri": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.prefix": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.toClarkName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + + # class PySide2.QtXmlPatterns.QXmlNamePool: + "QXmlNamePool.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',)], + "QXmlNamePool.__copy__": (), + + # class PySide2.QtXmlPatterns.QXmlNodeModelIndex: + "QXmlNodeModelIndex.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlNodeModelIndex.__copy__": (), + "QXmlNodeModelIndex.additionalData": (), + "QXmlNodeModelIndex.data": (), + "QXmlNodeModelIndex.internalPointer": (), + "QXmlNodeModelIndex.isNull": (), + "QXmlNodeModelIndex.model": (), + + # class PySide2.QtXmlPatterns.QXmlQuery: + "QXmlQuery.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',), ('PySide2.QtXmlPatterns.QXmlQuery',), ('PySide2.QtXmlPatterns.QXmlQuery.QueryLanguage', 'PySide2.QtXmlPatterns.QXmlNamePool')], + "QXmlQuery.__copy__": (), + "QXmlQuery.bindVariable": [('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtCore.QIODevice'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlItem'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlQuery'), ('str', 'PySide2.QtCore.QIODevice'), ('str', 'PySide2.QtXmlPatterns.QXmlItem'), ('str', 'PySide2.QtXmlPatterns.QXmlQuery')], + "QXmlQuery.evaluateTo": [('PySide2.QtCore.QIODevice',), ('PySide2.QtXmlPatterns.QAbstractXmlReceiver',), ('PySide2.QtXmlPatterns.QXmlResultItems',)], + "QXmlQuery.initialTemplateName": (), + "QXmlQuery.isValid": (), + "QXmlQuery.messageHandler": (), + "QXmlQuery.namePool": (), + "QXmlQuery.queryLanguage": (), + "QXmlQuery.setFocus": [('PySide2.QtCore.QIODevice',), ('PySide2.QtCore.QUrl',), ('PySide2.QtXmlPatterns.QXmlItem',), ('str',)], + "QXmlQuery.setInitialTemplateName": [('PySide2.QtXmlPatterns.QXmlName',), ('str',)], + "QXmlQuery.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlQuery.setQuery": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), ('str', 'PySide2.QtCore.QUrl')], + "QXmlQuery.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlQuery.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlResultItems: + "QXmlResultItems.__init__": (), + "QXmlResultItems.current": (), + "QXmlResultItems.hasError": (), + + # class PySide2.QtXmlPatterns.QXmlSchema: + "QXmlSchema.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchema.documentUri": (), + "QXmlSchema.isValid": (), + "QXmlSchema.load": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + "QXmlSchema.messageHandler": (), + "QXmlSchema.namePool": (), + "QXmlSchema.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchema.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchema.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlSchemaValidator: + "QXmlSchemaValidator.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchemaValidator.messageHandler": (), + "QXmlSchemaValidator.namePool": (), + "QXmlSchemaValidator.schema": (), + "QXmlSchemaValidator.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchemaValidator.setSchema": ('PySide2.QtXmlPatterns.QXmlSchema',), + "QXmlSchemaValidator.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchemaValidator.uriResolver": (), + "QXmlSchemaValidator.validate": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + + # class PySide2.QtXmlPatterns.QXmlSerializer: + "QXmlSerializer.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlSerializer.atomicValue": ('Any',), + "QXmlSerializer.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.characters": ('str',), + "QXmlSerializer.codec": (), + "QXmlSerializer.comment": ('str',), + "QXmlSerializer.endDocument": (), + "QXmlSerializer.endElement": (), + "QXmlSerializer.endOfSequence": (), + "QXmlSerializer.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.outputDevice": (), + "QXmlSerializer.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.setCodec": ('PySide2.QtCore.QTextCodec',), + "QXmlSerializer.startDocument": (), + "QXmlSerializer.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.startOfSequence": (), + }) + +# Module PySide2.QtHelp +if "PySide2.QtHelp" in sys.modules: + dict.update({ + + # class PySide2.QtHelp.QHelpContentItem: + "QHelpContentItem.__copy__": (), + "QHelpContentItem.child": ('int',), + "QHelpContentItem.childCount": (), + "QHelpContentItem.childPosition": ('PySide2.QtHelp.QHelpContentItem',), + "QHelpContentItem.parent": (), + "QHelpContentItem.row": (), + "QHelpContentItem.title": (), + "QHelpContentItem.url": (), + + # class PySide2.QtHelp.QHelpContentModel: + "QHelpContentModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.contentItemAt": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.createContents": ('str',), + "QHelpContentModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QHelpContentModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QHelpContentModel.isCreatingContents": (), + "QHelpContentModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QHelpContentModel.rowCount": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtHelp.QHelpContentWidget: + "QHelpContentWidget.indexOf": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtHelp.QHelpEngine: + "QHelpEngine.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngine.contentModel": (), + "QHelpEngine.contentWidget": (), + "QHelpEngine.indexModel": (), + "QHelpEngine.indexWidget": (), + "QHelpEngine.searchEngine": (), + + # class PySide2.QtHelp.QHelpEngineCore: + "QHelpEngineCore.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngineCore.addCustomFilter": ('str', 'List[str]'), + "QHelpEngineCore.autoSaveFilter": (), + "QHelpEngineCore.collectionFile": (), + "QHelpEngineCore.copyCollectionFile": ('str',), + "QHelpEngineCore.currentFilter": (), + "QHelpEngineCore.customFilters": (), + "QHelpEngineCore.customValue": ('str', 'Any'), + "QHelpEngineCore.documentationFileName": ('str',), + "QHelpEngineCore.error": (), + "QHelpEngineCore.fileData": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.files": ('str', 'List[str]', 'str'), + "QHelpEngineCore.filterAttributeSets": ('str',), + "QHelpEngineCore.filterAttributes": [(), ('str',)], + "QHelpEngineCore.findFile": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.linksForIdentifier": ('str',), + "QHelpEngineCore.linksForKeyword": ('str',), + "QHelpEngineCore.metaData": ('str', 'str'), + "QHelpEngineCore.namespaceName": ('str',), + "QHelpEngineCore.registerDocumentation": ('str',), + "QHelpEngineCore.registeredDocumentations": (), + "QHelpEngineCore.removeCustomFilter": ('str',), + "QHelpEngineCore.removeCustomValue": ('str',), + "QHelpEngineCore.setAutoSaveFilter": ('bool',), + "QHelpEngineCore.setCollectionFile": ('str',), + "QHelpEngineCore.setCurrentFilter": ('str',), + "QHelpEngineCore.setCustomValue": ('str', 'Any'), + "QHelpEngineCore.setupData": (), + "QHelpEngineCore.unregisterDocumentation": ('str',), + + # class PySide2.QtHelp.QHelpIndexModel: + "QHelpIndexModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object'), ('str',)], + "QHelpIndexModel.filter": ('str', 'str'), + "QHelpIndexModel.isCreatingIndex": (), + "QHelpIndexModel.linksForKeyword": ('str',), + + # class PySide2.QtHelp.QHelpIndexWidget: + "QHelpIndexWidget.activateCurrentItem": (), + "QHelpIndexWidget.filterIndices": ('str', 'str'), + + # class PySide2.QtHelp.QHelpSearchEngine: + "QHelpSearchEngine.__init__": ('PySide2.QtHelp.QHelpEngineCore', 'PySide2.QtCore.QObject'), + "QHelpSearchEngine.cancelIndexing": (), + "QHelpSearchEngine.cancelSearching": (), + "QHelpSearchEngine.hitCount": (), + "QHelpSearchEngine.hitsCount": (), + "QHelpSearchEngine.query": (), + "QHelpSearchEngine.queryWidget": (), + "QHelpSearchEngine.reindexDocumentation": (), + "QHelpSearchEngine.resultWidget": (), + "QHelpSearchEngine.scheduleIndexDocumentation": (), + "QHelpSearchEngine.search": [('list',), ('str',)], + "QHelpSearchEngine.searchInput": (), + "QHelpSearchEngine.searchResultCount": (), + "QHelpSearchEngine.searchResults": ('int', 'int'), + + # class PySide2.QtHelp.QHelpSearchQuery: + "QHelpSearchQuery.__init__": [(), ('PySide2.QtHelp.QHelpSearchQuery',), ('PySide2.QtHelp.QHelpSearchQuery.FieldName', 'List[str]')], + "QHelpSearchQuery.__copy__": (), + + # class PySide2.QtHelp.QHelpSearchQueryWidget: + "QHelpSearchQueryWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QHelpSearchQueryWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchQueryWidget.collapseExtendedSearch": (), + "QHelpSearchQueryWidget.expandExtendedSearch": (), + "QHelpSearchQueryWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QHelpSearchQueryWidget.isCompactMode": (), + "QHelpSearchQueryWidget.query": (), + "QHelpSearchQueryWidget.searchInput": (), + "QHelpSearchQueryWidget.setCompactMode": ('bool',), + "QHelpSearchQueryWidget.setQuery": ('list',), + "QHelpSearchQueryWidget.setSearchInput": ('str',), + + # class PySide2.QtHelp.QHelpSearchResult: + "QHelpSearchResult.__init__": [(), ('PySide2.QtCore.QUrl', 'str', 'str'), ('PySide2.QtHelp.QHelpSearchResult',)], + "QHelpSearchResult.snippet": (), + "QHelpSearchResult.title": (), + "QHelpSearchResult.url": (), + + # class PySide2.QtHelp.QHelpSearchResultWidget: + "QHelpSearchResultWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchResultWidget.linkAt": ('PySide2.QtCore.QPoint',), + }) + +# Module PySide2.QtMultimedia +if "PySide2.QtMultimedia" in sys.modules: + dict.update({ + + # class PySide2.QtMultimedia.QAbstractAudioDeviceInfo: + "QAbstractAudioDeviceInfo.__init__": (), + "QAbstractAudioDeviceInfo.deviceName": (), + "QAbstractAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioDeviceInfo.preferredFormat": (), + "QAbstractAudioDeviceInfo.supportedByteOrders": (), + "QAbstractAudioDeviceInfo.supportedChannelCounts": (), + "QAbstractAudioDeviceInfo.supportedCodecs": (), + "QAbstractAudioDeviceInfo.supportedSampleRates": (), + "QAbstractAudioDeviceInfo.supportedSampleSizes": (), + "QAbstractAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAbstractAudioInput: + "QAbstractAudioInput.__init__": (), + "QAbstractAudioInput.bufferSize": (), + "QAbstractAudioInput.bytesReady": (), + "QAbstractAudioInput.elapsedUSecs": (), + "QAbstractAudioInput.error": (), + "QAbstractAudioInput.format": (), + "QAbstractAudioInput.notifyInterval": (), + "QAbstractAudioInput.periodSize": (), + "QAbstractAudioInput.processedUSecs": (), + "QAbstractAudioInput.reset": (), + "QAbstractAudioInput.resume": (), + "QAbstractAudioInput.setBufferSize": ('int',), + "QAbstractAudioInput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioInput.setNotifyInterval": ('int',), + "QAbstractAudioInput.setVolume": ('float',), + "QAbstractAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioInput.state": (), + "QAbstractAudioInput.stop": (), + "QAbstractAudioInput.suspend": (), + "QAbstractAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAbstractAudioOutput: + "QAbstractAudioOutput.__init__": (), + "QAbstractAudioOutput.bufferSize": (), + "QAbstractAudioOutput.bytesFree": (), + "QAbstractAudioOutput.category": (), + "QAbstractAudioOutput.elapsedUSecs": (), + "QAbstractAudioOutput.error": (), + "QAbstractAudioOutput.format": (), + "QAbstractAudioOutput.notifyInterval": (), + "QAbstractAudioOutput.periodSize": (), + "QAbstractAudioOutput.processedUSecs": (), + "QAbstractAudioOutput.reset": (), + "QAbstractAudioOutput.resume": (), + "QAbstractAudioOutput.setBufferSize": ('int',), + "QAbstractAudioOutput.setCategory": ('str',), + "QAbstractAudioOutput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioOutput.setNotifyInterval": ('int',), + "QAbstractAudioOutput.setVolume": ('float',), + "QAbstractAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioOutput.state": (), + "QAbstractAudioOutput.stop": (), + "QAbstractAudioOutput.suspend": (), + "QAbstractAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAbstractVideoBuffer: + "QAbstractVideoBuffer.__init__": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoBuffer.handle": (), + "QAbstractVideoBuffer.handleType": (), + "QAbstractVideoBuffer.mapMode": (), + "QAbstractVideoBuffer.release": (), + "QAbstractVideoBuffer.unmap": (), + + # class PySide2.QtMultimedia.QAbstractVideoFilter: + "QAbstractVideoFilter.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoFilter.createFilterRunnable": (), + "QAbstractVideoFilter.isActive": (), + "QAbstractVideoFilter.setActive": ('bool',), + + # class PySide2.QtMultimedia.QAbstractVideoSurface: + "QAbstractVideoSurface.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoSurface.error": (), + "QAbstractVideoSurface.isActive": (), + "QAbstractVideoSurface.isFormatSupported": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.nativeResolution": (), + "QAbstractVideoSurface.nearestFormat": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.present": ('PySide2.QtMultimedia.QVideoFrame',), + "QAbstractVideoSurface.setError": ('PySide2.QtMultimedia.QAbstractVideoSurface.Error',), + "QAbstractVideoSurface.setNativeResolution": ('PySide2.QtCore.QSize',), + "QAbstractVideoSurface.start": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.stop": (), + "QAbstractVideoSurface.supportedPixelFormats": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoSurface.surfaceFormat": (), + + # class PySide2.QtMultimedia.QAudio: + "QAudio.convertVolume": ('float', 'PySide2.QtMultimedia.QAudio.VolumeScale', 'PySide2.QtMultimedia.QAudio.VolumeScale'), + + # class PySide2.QtMultimedia.QAudioBuffer: + "QAudioBuffer.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtMultimedia.QAudioFormat', 'int'), ('PySide2.QtMultimedia.QAudioBuffer',), ('int', 'PySide2.QtMultimedia.QAudioFormat', 'int')], + "QAudioBuffer.__copy__": (), + "QAudioBuffer.byteCount": (), + "QAudioBuffer.constData": (), + "QAudioBuffer.data": (), + "QAudioBuffer.duration": (), + "QAudioBuffer.format": (), + "QAudioBuffer.frameCount": (), + "QAudioBuffer.isValid": (), + "QAudioBuffer.sampleCount": (), + "QAudioBuffer.startTime": (), + + # class PySide2.QtMultimedia.QAudioDecoder: + "QAudioDecoder.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoder.audioFormat": (), + "QAudioDecoder.bind": ('PySide2.QtCore.QObject',), + "QAudioDecoder.bufferAvailable": (), + "QAudioDecoder.duration": (), + "QAudioDecoder.errorString": (), + "QAudioDecoder.hasSupport": ('str', 'List[str]'), + "QAudioDecoder.position": (), + "QAudioDecoder.read": (), + "QAudioDecoder.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoder.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoder.setSourceFilename": ('str',), + "QAudioDecoder.sourceDevice": (), + "QAudioDecoder.sourceFilename": (), + "QAudioDecoder.start": (), + "QAudioDecoder.state": (), + "QAudioDecoder.stop": (), + "QAudioDecoder.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QAudioDecoderControl: + "QAudioDecoderControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoderControl.audioFormat": (), + "QAudioDecoderControl.bufferAvailable": (), + "QAudioDecoderControl.duration": (), + "QAudioDecoderControl.position": (), + "QAudioDecoderControl.read": (), + "QAudioDecoderControl.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoderControl.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoderControl.setSourceFilename": ('str',), + "QAudioDecoderControl.sourceDevice": (), + "QAudioDecoderControl.sourceFilename": (), + "QAudioDecoderControl.start": (), + "QAudioDecoderControl.state": (), + "QAudioDecoderControl.stop": (), + + # class PySide2.QtMultimedia.QAudioDeviceInfo: + "QAudioDeviceInfo.__init__": [(), ('PySide2.QtMultimedia.QAudioDeviceInfo',)], + "QAudioDeviceInfo.__copy__": (), + "QAudioDeviceInfo.availableDevices": ('PySide2.QtMultimedia.QAudio.Mode',), + "QAudioDeviceInfo.defaultInputDevice": (), + "QAudioDeviceInfo.defaultOutputDevice": (), + "QAudioDeviceInfo.deviceName": (), + "QAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.isNull": (), + "QAudioDeviceInfo.nearestFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.preferredFormat": (), + "QAudioDeviceInfo.supportedByteOrders": (), + "QAudioDeviceInfo.supportedChannelCounts": (), + "QAudioDeviceInfo.supportedCodecs": (), + "QAudioDeviceInfo.supportedSampleRates": (), + "QAudioDeviceInfo.supportedSampleSizes": (), + "QAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAudioEncoderSettings: + "QAudioEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QAudioEncoderSettings',)], + "QAudioEncoderSettings.__copy__": (), + "QAudioEncoderSettings.bitRate": (), + "QAudioEncoderSettings.channelCount": (), + "QAudioEncoderSettings.codec": (), + "QAudioEncoderSettings.encodingMode": (), + "QAudioEncoderSettings.encodingOption": ('str',), + "QAudioEncoderSettings.encodingOptions": (), + "QAudioEncoderSettings.isNull": (), + "QAudioEncoderSettings.quality": (), + "QAudioEncoderSettings.sampleRate": (), + "QAudioEncoderSettings.setBitRate": ('int',), + "QAudioEncoderSettings.setChannelCount": ('int',), + "QAudioEncoderSettings.setCodec": ('str',), + "QAudioEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QAudioEncoderSettings.setEncodingOption": ('str', 'Any'), + "QAudioEncoderSettings.setEncodingOptions": ('dict',), + "QAudioEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QAudioEncoderSettings.setSampleRate": ('int',), + + # class PySide2.QtMultimedia.QAudioEncoderSettingsControl: + "QAudioEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioEncoderSettingsControl.audioSettings": (), + "QAudioEncoderSettingsControl.codecDescription": ('str',), + "QAudioEncoderSettingsControl.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QAudioEncoderSettingsControl.supportedAudioCodecs": (), + + # class PySide2.QtMultimedia.QAudioFormat: + "QAudioFormat.__init__": [(), ('PySide2.QtMultimedia.QAudioFormat',)], + "QAudioFormat.__copy__": (), + "QAudioFormat.byteOrder": (), + "QAudioFormat.bytesForDuration": ('int',), + "QAudioFormat.bytesForFrames": ('int',), + "QAudioFormat.bytesPerFrame": (), + "QAudioFormat.channelCount": (), + "QAudioFormat.codec": (), + "QAudioFormat.durationForBytes": ('int',), + "QAudioFormat.durationForFrames": ('int',), + "QAudioFormat.framesForBytes": ('int',), + "QAudioFormat.framesForDuration": ('int',), + "QAudioFormat.isValid": (), + "QAudioFormat.sampleRate": (), + "QAudioFormat.sampleSize": (), + "QAudioFormat.sampleType": (), + "QAudioFormat.setByteOrder": ('PySide2.QtMultimedia.QAudioFormat.Endian',), + "QAudioFormat.setChannelCount": ('int',), + "QAudioFormat.setCodec": ('str',), + "QAudioFormat.setSampleRate": ('int',), + "QAudioFormat.setSampleSize": ('int',), + "QAudioFormat.setSampleType": ('PySide2.QtMultimedia.QAudioFormat.SampleType',), + + # class PySide2.QtMultimedia.QAudioInput: + "QAudioInput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioInput.bufferSize": (), + "QAudioInput.bytesReady": (), + "QAudioInput.elapsedUSecs": (), + "QAudioInput.error": (), + "QAudioInput.format": (), + "QAudioInput.notifyInterval": (), + "QAudioInput.periodSize": (), + "QAudioInput.processedUSecs": (), + "QAudioInput.reset": (), + "QAudioInput.resume": (), + "QAudioInput.setBufferSize": ('int',), + "QAudioInput.setNotifyInterval": ('int',), + "QAudioInput.setVolume": ('float',), + "QAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioInput.state": (), + "QAudioInput.stop": (), + "QAudioInput.suspend": (), + "QAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAudioInputSelectorControl: + "QAudioInputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioInputSelectorControl.activeInput": (), + "QAudioInputSelectorControl.availableInputs": (), + "QAudioInputSelectorControl.defaultInput": (), + "QAudioInputSelectorControl.inputDescription": ('str',), + "QAudioInputSelectorControl.setActiveInput": ('str',), + + # class PySide2.QtMultimedia.QAudioOutput: + "QAudioOutput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioOutput.bufferSize": (), + "QAudioOutput.bytesFree": (), + "QAudioOutput.category": (), + "QAudioOutput.elapsedUSecs": (), + "QAudioOutput.error": (), + "QAudioOutput.format": (), + "QAudioOutput.notifyInterval": (), + "QAudioOutput.periodSize": (), + "QAudioOutput.processedUSecs": (), + "QAudioOutput.reset": (), + "QAudioOutput.resume": (), + "QAudioOutput.setBufferSize": ('int',), + "QAudioOutput.setCategory": ('str',), + "QAudioOutput.setNotifyInterval": ('int',), + "QAudioOutput.setVolume": ('float',), + "QAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioOutput.state": (), + "QAudioOutput.stop": (), + "QAudioOutput.suspend": (), + "QAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAudioOutputSelectorControl: + "QAudioOutputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioOutputSelectorControl.activeOutput": (), + "QAudioOutputSelectorControl.availableOutputs": (), + "QAudioOutputSelectorControl.defaultOutput": (), + "QAudioOutputSelectorControl.outputDescription": ('str',), + "QAudioOutputSelectorControl.setActiveOutput": ('str',), + + # class PySide2.QtMultimedia.QAudioProbe: + "QAudioProbe.__init__": ('PySide2.QtCore.QObject',), + "QAudioProbe.isActive": (), + "QAudioProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QAudioRecorder: + "QAudioRecorder.__init__": ('PySide2.QtCore.QObject',), + "QAudioRecorder.audioInput": (), + "QAudioRecorder.audioInputDescription": ('str',), + "QAudioRecorder.audioInputs": (), + "QAudioRecorder.defaultAudioInput": (), + "QAudioRecorder.setAudioInput": ('str',), + + # class PySide2.QtMultimedia.QAudioRoleControl: + "QAudioRoleControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioRoleControl.audioRole": (), + "QAudioRoleControl.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QAudioRoleControl.supportedAudioRoles": (), + + # class PySide2.QtMultimedia.QCamera: + "QCamera.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtMultimedia.QCamera.Position', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QCameraInfo', 'PySide2.QtCore.QObject')], + "QCamera.availability": (), + "QCamera.availableDevices": (), + "QCamera.captureMode": (), + "QCamera.deviceDescription": ('PySide2.QtCore.QByteArray',), + "QCamera.errorString": (), + "QCamera.isCaptureModeSupported": ('CaptureModes',), + "QCamera.load": (), + "QCamera.lockStatus": [(), ('PySide2.QtMultimedia.QCamera.LockType',)], + "QCamera.requestedLocks": (), + "QCamera.searchAndLock": [(), ('LockTypes',)], + "QCamera.setCaptureMode": ('CaptureModes',), + "QCamera.setViewfinder": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QCamera.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.start": (), + "QCamera.state": (), + "QCamera.status": (), + "QCamera.stop": (), + "QCamera.supportedLocks": (), + "QCamera.supportedViewfinderFrameRateRanges": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderPixelFormats": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderResolutions": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.unload": (), + "QCamera.unlock": [(), ('LockTypes',)], + "QCamera.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraCaptureBufferFormatControl: + "QCameraCaptureBufferFormatControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureBufferFormatControl.bufferFormat": (), + "QCameraCaptureBufferFormatControl.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraCaptureBufferFormatControl.supportedBufferFormats": (), + + # class PySide2.QtMultimedia.QCameraCaptureDestinationControl: + "QCameraCaptureDestinationControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureDestinationControl.captureDestination": (), + "QCameraCaptureDestinationControl.isCaptureDestinationSupported": ('CaptureDestinations',), + "QCameraCaptureDestinationControl.setCaptureDestination": ('CaptureDestinations',), + + # class PySide2.QtMultimedia.QCameraControl: + "QCameraControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraControl.canChangeProperty": ('PySide2.QtMultimedia.QCameraControl.PropertyChangeType', 'PySide2.QtMultimedia.QCamera.Status'), + "QCameraControl.captureMode": (), + "QCameraControl.isCaptureModeSupported": ('CaptureModes',), + "QCameraControl.setCaptureMode": ('CaptureModes',), + "QCameraControl.setState": ('PySide2.QtMultimedia.QCamera.State',), + "QCameraControl.state": (), + "QCameraControl.status": (), + + # class PySide2.QtMultimedia.QCameraExposureControl: + "QCameraExposureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraExposureControl.actualValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.requestedValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.setValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter', 'Any'), + + # class PySide2.QtMultimedia.QCameraFocusZone: + "QCameraFocusZone.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus'), ('PySide2.QtMultimedia.QCameraFocusZone',)], + "QCameraFocusZone.__copy__": (), + "QCameraFocusZone.area": (), + "QCameraFocusZone.isValid": (), + "QCameraFocusZone.setStatus": ('PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus',), + "QCameraFocusZone.status": (), + + # class PySide2.QtMultimedia.QCameraImageCapture: + "QCameraImageCapture.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QCameraImageCapture.availability": (), + "QCameraImageCapture.bufferFormat": (), + "QCameraImageCapture.cancelCapture": (), + "QCameraImageCapture.capture": ('str',), + "QCameraImageCapture.captureDestination": (), + "QCameraImageCapture.encodingSettings": (), + "QCameraImageCapture.errorString": (), + "QCameraImageCapture.imageCodecDescription": ('str',), + "QCameraImageCapture.isAvailable": (), + "QCameraImageCapture.isCaptureDestinationSupported": ('CaptureDestinations',), + "QCameraImageCapture.isReadyForCapture": (), + "QCameraImageCapture.mediaObject": (), + "QCameraImageCapture.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraImageCapture.setCaptureDestination": ('CaptureDestinations',), + "QCameraImageCapture.setEncodingSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QCameraImageCapture.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QCameraImageCapture.supportedBufferFormats": (), + "QCameraImageCapture.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QCameraImageCaptureControl: + "QCameraImageCaptureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageCaptureControl.cancelCapture": (), + "QCameraImageCaptureControl.capture": ('str',), + "QCameraImageCaptureControl.driveMode": (), + "QCameraImageCaptureControl.isReadyForCapture": (), + "QCameraImageCaptureControl.setDriveMode": ('PySide2.QtMultimedia.QCameraImageCapture.DriveMode',), + + # class PySide2.QtMultimedia.QCameraImageProcessingControl: + "QCameraImageProcessingControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageProcessingControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.isParameterValueSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'Any'), + "QCameraImageProcessingControl.parameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.setParameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'Any'), + + # class PySide2.QtMultimedia.QCameraInfo: + "QCameraInfo.__init__": [('PySide2.QtCore.QByteArray',), ('PySide2.QtMultimedia.QCamera',), ('PySide2.QtMultimedia.QCameraInfo',)], + "QCameraInfo.__copy__": (), + "QCameraInfo.availableCameras": ('PySide2.QtMultimedia.QCamera.Position',), + "QCameraInfo.defaultCamera": (), + "QCameraInfo.description": (), + "QCameraInfo.deviceName": (), + "QCameraInfo.isNull": (), + "QCameraInfo.orientation": (), + "QCameraInfo.position": (), + + # class PySide2.QtMultimedia.QCameraInfoControl: + "QCameraInfoControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraInfoControl.cameraOrientation": ('str',), + "QCameraInfoControl.cameraPosition": ('str',), + + # class PySide2.QtMultimedia.QCameraLocksControl: + "QCameraLocksControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraLocksControl.lockStatus": ('PySide2.QtMultimedia.QCamera.LockType',), + "QCameraLocksControl.searchAndLock": ('LockTypes',), + "QCameraLocksControl.supportedLocks": (), + "QCameraLocksControl.unlock": ('LockTypes',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettings: + "QCameraViewfinderSettings.__init__": [(), ('PySide2.QtMultimedia.QCameraViewfinderSettings',)], + "QCameraViewfinderSettings.__copy__": (), + "QCameraViewfinderSettings.isNull": (), + "QCameraViewfinderSettings.maximumFrameRate": (), + "QCameraViewfinderSettings.minimumFrameRate": (), + "QCameraViewfinderSettings.pixelAspectRatio": (), + "QCameraViewfinderSettings.pixelFormat": (), + "QCameraViewfinderSettings.resolution": (), + "QCameraViewfinderSettings.setMaximumFrameRate": ('float',), + "QCameraViewfinderSettings.setMinimumFrameRate": ('float',), + "QCameraViewfinderSettings.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.setPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraViewfinderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.swap": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl: + "QCameraViewfinderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl.isViewfinderParameterSupported": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + "QCameraViewfinderSettingsControl.setViewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter', 'Any'), + "QCameraViewfinderSettingsControl.viewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl2: + "QCameraViewfinderSettingsControl2.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl2.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCameraViewfinderSettingsControl2.supportedViewfinderSettings": (), + "QCameraViewfinderSettingsControl2.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraZoomControl: + "QCameraZoomControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraZoomControl.currentDigitalZoom": (), + "QCameraZoomControl.currentOpticalZoom": (), + "QCameraZoomControl.maximumDigitalZoom": (), + "QCameraZoomControl.maximumOpticalZoom": (), + "QCameraZoomControl.requestedDigitalZoom": (), + "QCameraZoomControl.requestedOpticalZoom": (), + "QCameraZoomControl.zoomTo": ('float', 'float'), + + # class PySide2.QtMultimedia.QImageEncoderControl: + "QImageEncoderControl.__init__": ('PySide2.QtCore.QObject',), + "QImageEncoderControl.imageCodecDescription": ('str',), + "QImageEncoderControl.imageSettings": (), + "QImageEncoderControl.setImageSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QImageEncoderControl.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QImageEncoderSettings: + "QImageEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QImageEncoderSettings',)], + "QImageEncoderSettings.__copy__": (), + "QImageEncoderSettings.codec": (), + "QImageEncoderSettings.encodingOption": ('str',), + "QImageEncoderSettings.encodingOptions": (), + "QImageEncoderSettings.isNull": (), + "QImageEncoderSettings.quality": (), + "QImageEncoderSettings.resolution": (), + "QImageEncoderSettings.setCodec": ('str',), + "QImageEncoderSettings.setEncodingOption": ('str', 'Any'), + "QImageEncoderSettings.setEncodingOptions": ('dict',), + "QImageEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QImageEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QMediaAudioProbeControl: + "QMediaAudioProbeControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaAvailabilityControl: + "QMediaAvailabilityControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaAvailabilityControl.availability": (), + + # class PySide2.QtMultimedia.QMediaBindableInterface: + "QMediaBindableInterface.__init__": (), + "QMediaBindableInterface.mediaObject": (), + "QMediaBindableInterface.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimedia.QMediaContainerControl: + "QMediaContainerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaContainerControl.containerDescription": ('str',), + "QMediaContainerControl.containerFormat": (), + "QMediaContainerControl.setContainerFormat": ('str',), + "QMediaContainerControl.supportedContainers": (), + + # class PySide2.QtMultimedia.QMediaContent: + "QMediaContent.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtMultimedia.QMediaContent',), ('PySide2.QtMultimedia.QMediaPlaylist', 'PySide2.QtCore.QUrl', 'bool'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest',), ('list',)], + "QMediaContent.__copy__": (), + "QMediaContent.canonicalRequest": (), + "QMediaContent.canonicalResource": (), + "QMediaContent.canonicalUrl": (), + "QMediaContent.isNull": (), + "QMediaContent.playlist": (), + "QMediaContent.resources": (), + + # class PySide2.QtMultimedia.QMediaControl: + "QMediaControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaGaplessPlaybackControl: + "QMediaGaplessPlaybackControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaGaplessPlaybackControl.crossfadeTime": (), + "QMediaGaplessPlaybackControl.isCrossfadeSupported": (), + "QMediaGaplessPlaybackControl.nextMedia": (), + "QMediaGaplessPlaybackControl.setCrossfadeTime": ('float',), + "QMediaGaplessPlaybackControl.setNextMedia": ('PySide2.QtMultimedia.QMediaContent',), + + # class PySide2.QtMultimedia.QMediaNetworkAccessControl: + "QMediaNetworkAccessControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaNetworkAccessControl.currentConfiguration": (), + "QMediaNetworkAccessControl.setConfigurations": ('list',), + + # class PySide2.QtMultimedia.QMediaObject: + "QMediaObject.addPropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.availability": (), + "QMediaObject.availableMetaData": (), + "QMediaObject.bind": ('PySide2.QtCore.QObject',), + "QMediaObject.isAvailable": (), + "QMediaObject.isMetaDataAvailable": (), + "QMediaObject.metaData": ('str',), + "QMediaObject.notifyInterval": (), + "QMediaObject.removePropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.setNotifyInterval": ('int',), + "QMediaObject.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaPlayer: + "QMediaPlayer.__init__": ('PySide2.QtCore.QObject', 'Flags'), + "QMediaPlayer.audioRole": (), + "QMediaPlayer.availability": (), + "QMediaPlayer.bind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.bufferStatus": (), + "QMediaPlayer.currentMedia": (), + "QMediaPlayer.currentNetworkConfiguration": (), + "QMediaPlayer.duration": (), + "QMediaPlayer.errorString": (), + "QMediaPlayer.hasSupport": ('str', 'List[str]', 'Flags'), + "QMediaPlayer.isAudioAvailable": (), + "QMediaPlayer.isMuted": (), + "QMediaPlayer.isSeekable": (), + "QMediaPlayer.isVideoAvailable": (), + "QMediaPlayer.media": (), + "QMediaPlayer.mediaStatus": (), + "QMediaPlayer.mediaStream": (), + "QMediaPlayer.pause": (), + "QMediaPlayer.play": (), + "QMediaPlayer.playbackRate": (), + "QMediaPlayer.playlist": (), + "QMediaPlayer.position": (), + "QMediaPlayer.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QMediaPlayer.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayer.setMuted": ('bool',), + "QMediaPlayer.setNetworkConfigurations": ('list',), + "QMediaPlayer.setPlaybackRate": ('float',), + "QMediaPlayer.setPlaylist": ('PySide2.QtMultimedia.QMediaPlaylist',), + "QMediaPlayer.setPosition": ('int',), + "QMediaPlayer.setVideoOutput": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QMediaPlayer.setVolume": ('int',), + "QMediaPlayer.state": (), + "QMediaPlayer.stop": (), + "QMediaPlayer.supportedAudioRoles": (), + "QMediaPlayer.supportedMimeTypes": ('Flags',), + "QMediaPlayer.unbind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.volume": (), + + # class PySide2.QtMultimedia.QMediaPlayerControl: + "QMediaPlayerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlayerControl.availablePlaybackRanges": (), + "QMediaPlayerControl.bufferStatus": (), + "QMediaPlayerControl.duration": (), + "QMediaPlayerControl.isAudioAvailable": (), + "QMediaPlayerControl.isMuted": (), + "QMediaPlayerControl.isSeekable": (), + "QMediaPlayerControl.isVideoAvailable": (), + "QMediaPlayerControl.media": (), + "QMediaPlayerControl.mediaStatus": (), + "QMediaPlayerControl.mediaStream": (), + "QMediaPlayerControl.pause": (), + "QMediaPlayerControl.play": (), + "QMediaPlayerControl.playbackRate": (), + "QMediaPlayerControl.position": (), + "QMediaPlayerControl.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayerControl.setMuted": ('bool',), + "QMediaPlayerControl.setPlaybackRate": ('float',), + "QMediaPlayerControl.setPosition": ('int',), + "QMediaPlayerControl.setVolume": ('int',), + "QMediaPlayerControl.state": (), + "QMediaPlayerControl.stop": (), + "QMediaPlayerControl.volume": (), + + # class PySide2.QtMultimedia.QMediaPlaylist: + "QMediaPlaylist.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlaylist.addMedia": [('PySide2.QtMultimedia.QMediaContent',), ('list',)], + "QMediaPlaylist.clear": (), + "QMediaPlaylist.currentIndex": (), + "QMediaPlaylist.currentMedia": (), + "QMediaPlaylist.error": (), + "QMediaPlaylist.errorString": (), + "QMediaPlaylist.insertMedia": [('int', 'PySide2.QtMultimedia.QMediaContent'), ('int', 'list')], + "QMediaPlaylist.isEmpty": (), + "QMediaPlaylist.isReadOnly": (), + "QMediaPlaylist.load": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaPlaylist.media": ('int',), + "QMediaPlaylist.mediaCount": (), + "QMediaPlaylist.mediaObject": (), + "QMediaPlaylist.moveMedia": ('int', 'int'), + "QMediaPlaylist.nextIndex": ('int',), + "QMediaPlaylist.playbackMode": (), + "QMediaPlaylist.previous": (), + "QMediaPlaylist.previousIndex": ('int',), + "QMediaPlaylist.removeMedia": [('int',), ('int', 'int')], + "QMediaPlaylist.save": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str')], + "QMediaPlaylist.setCurrentIndex": ('int',), + "QMediaPlaylist.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaPlaylist.setPlaybackMode": ('PySide2.QtMultimedia.QMediaPlaylist.PlaybackMode',), + "QMediaPlaylist.shuffle": (), + + # class PySide2.QtMultimedia.QMediaRecorder: + "QMediaRecorder.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QMediaRecorder.actualLocation": (), + "QMediaRecorder.audioCodecDescription": ('str',), + "QMediaRecorder.audioSettings": (), + "QMediaRecorder.availability": (), + "QMediaRecorder.availableMetaData": (), + "QMediaRecorder.containerDescription": ('str',), + "QMediaRecorder.containerFormat": (), + "QMediaRecorder.duration": (), + "QMediaRecorder.errorString": (), + "QMediaRecorder.isAvailable": (), + "QMediaRecorder.isMetaDataAvailable": (), + "QMediaRecorder.isMetaDataWritable": (), + "QMediaRecorder.isMuted": (), + "QMediaRecorder.mediaObject": (), + "QMediaRecorder.metaData": ('str',), + "QMediaRecorder.outputLocation": (), + "QMediaRecorder.pause": (), + "QMediaRecorder.record": (), + "QMediaRecorder.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QMediaRecorder.setContainerFormat": ('str',), + "QMediaRecorder.setEncodingSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings', 'PySide2.QtMultimedia.QVideoEncoderSettings', 'str'), + "QMediaRecorder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaRecorder.setMetaData": ('str', 'Any'), + "QMediaRecorder.setMuted": ('bool',), + "QMediaRecorder.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorder.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QMediaRecorder.setVolume": ('float',), + "QMediaRecorder.state": (), + "QMediaRecorder.status": (), + "QMediaRecorder.stop": (), + "QMediaRecorder.supportedAudioCodecs": (), + "QMediaRecorder.supportedContainers": (), + "QMediaRecorder.supportedVideoCodecs": (), + "QMediaRecorder.videoCodecDescription": ('str',), + "QMediaRecorder.videoSettings": (), + "QMediaRecorder.volume": (), + + # class PySide2.QtMultimedia.QMediaRecorderControl: + "QMediaRecorderControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaRecorderControl.applySettings": (), + "QMediaRecorderControl.duration": (), + "QMediaRecorderControl.isMuted": (), + "QMediaRecorderControl.outputLocation": (), + "QMediaRecorderControl.setMuted": ('bool',), + "QMediaRecorderControl.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorderControl.setState": ('PySide2.QtMultimedia.QMediaRecorder.State',), + "QMediaRecorderControl.setVolume": ('float',), + "QMediaRecorderControl.state": (), + "QMediaRecorderControl.status": (), + "QMediaRecorderControl.volume": (), + + # class PySide2.QtMultimedia.QMediaResource: + "QMediaResource.__init__": [(), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaResource.__copy__": (), + "QMediaResource.audioBitRate": (), + "QMediaResource.audioCodec": (), + "QMediaResource.channelCount": (), + "QMediaResource.dataSize": (), + "QMediaResource.isNull": (), + "QMediaResource.language": (), + "QMediaResource.mimeType": (), + "QMediaResource.request": (), + "QMediaResource.resolution": (), + "QMediaResource.sampleRate": (), + "QMediaResource.setAudioBitRate": ('int',), + "QMediaResource.setAudioCodec": ('str',), + "QMediaResource.setChannelCount": ('int',), + "QMediaResource.setDataSize": ('int',), + "QMediaResource.setLanguage": ('str',), + "QMediaResource.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QMediaResource.setSampleRate": ('int',), + "QMediaResource.setVideoBitRate": ('int',), + "QMediaResource.setVideoCodec": ('str',), + "QMediaResource.url": (), + "QMediaResource.videoBitRate": (), + "QMediaResource.videoCodec": (), + + # class PySide2.QtMultimedia.QMediaTimeRange: + "QMediaTimeRange.__init__": [(), ('PySide2.QtMultimedia.QMediaTimeInterval',), ('PySide2.QtMultimedia.QMediaTimeRange',), ('int', 'int')], + "QMediaTimeRange.__copy__": (), + "QMediaTimeRange.addInterval": ('int', 'int'), + "QMediaTimeRange.addTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + "QMediaTimeRange.clear": (), + "QMediaTimeRange.contains": ('int',), + "QMediaTimeRange.earliestTime": (), + "QMediaTimeRange.isContinuous": (), + "QMediaTimeRange.isEmpty": (), + "QMediaTimeRange.latestTime": (), + "QMediaTimeRange.removeInterval": ('int', 'int'), + "QMediaTimeRange.removeTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + + # class PySide2.QtMultimedia.QMultimedia: + + # class PySide2.QtMultimedia.QRadioData: + "QRadioData.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QRadioData.availability": (), + "QRadioData.errorString": (), + "QRadioData.isAlternativeFrequenciesEnabled": (), + "QRadioData.mediaObject": (), + "QRadioData.programType": (), + "QRadioData.programTypeName": (), + "QRadioData.radioText": (), + "QRadioData.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioData.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QRadioData.stationId": (), + "QRadioData.stationName": (), + + # class PySide2.QtMultimedia.QRadioDataControl: + "QRadioDataControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioDataControl.errorString": (), + "QRadioDataControl.isAlternativeFrequenciesEnabled": (), + "QRadioDataControl.programType": (), + "QRadioDataControl.programTypeName": (), + "QRadioDataControl.radioText": (), + "QRadioDataControl.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioDataControl.stationId": (), + "QRadioDataControl.stationName": (), + + # class PySide2.QtMultimedia.QRadioTuner: + "QRadioTuner.__init__": ('PySide2.QtCore.QObject',), + "QRadioTuner.availability": (), + "QRadioTuner.band": (), + "QRadioTuner.cancelSearch": (), + "QRadioTuner.errorString": (), + "QRadioTuner.frequency": (), + "QRadioTuner.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isAntennaConnected": (), + "QRadioTuner.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isMuted": (), + "QRadioTuner.isSearching": (), + "QRadioTuner.isStereo": (), + "QRadioTuner.radioData": (), + "QRadioTuner.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTuner.searchBackward": (), + "QRadioTuner.searchForward": (), + "QRadioTuner.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.setFrequency": ('int',), + "QRadioTuner.setMuted": ('bool',), + "QRadioTuner.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTuner.setVolume": ('int',), + "QRadioTuner.signalStrength": (), + "QRadioTuner.start": (), + "QRadioTuner.state": (), + "QRadioTuner.stereoMode": (), + "QRadioTuner.stop": (), + "QRadioTuner.volume": (), + + # class PySide2.QtMultimedia.QRadioTunerControl: + "QRadioTunerControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioTunerControl.band": (), + "QRadioTunerControl.cancelSearch": (), + "QRadioTunerControl.errorString": (), + "QRadioTunerControl.frequency": (), + "QRadioTunerControl.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isAntennaConnected": (), + "QRadioTunerControl.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isMuted": (), + "QRadioTunerControl.isSearching": (), + "QRadioTunerControl.isStereo": (), + "QRadioTunerControl.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTunerControl.searchBackward": (), + "QRadioTunerControl.searchForward": (), + "QRadioTunerControl.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.setFrequency": ('int',), + "QRadioTunerControl.setMuted": ('bool',), + "QRadioTunerControl.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTunerControl.setVolume": ('int',), + "QRadioTunerControl.signalStrength": (), + "QRadioTunerControl.start": (), + "QRadioTunerControl.state": (), + "QRadioTunerControl.stereoMode": (), + "QRadioTunerControl.stop": (), + "QRadioTunerControl.volume": (), + + # class PySide2.QtMultimedia.QSound: + "QSound.__init__": ('str', 'PySide2.QtCore.QObject'), + "QSound.fileName": (), + "QSound.isFinished": (), + "QSound.loops": (), + "QSound.loopsRemaining": (), + "QSound.play": [(), ('str',)], + "QSound.setLoops": ('int',), + "QSound.stop": (), + + # class PySide2.QtMultimedia.QSoundEffect: + "QSoundEffect.__init__": ('PySide2.QtCore.QObject',), + "QSoundEffect.category": (), + "QSoundEffect.isLoaded": (), + "QSoundEffect.isMuted": (), + "QSoundEffect.isPlaying": (), + "QSoundEffect.loopCount": (), + "QSoundEffect.loopsRemaining": (), + "QSoundEffect.play": (), + "QSoundEffect.setCategory": ('str',), + "QSoundEffect.setLoopCount": ('int',), + "QSoundEffect.setMuted": ('bool',), + "QSoundEffect.setSource": ('PySide2.QtCore.QUrl',), + "QSoundEffect.setVolume": ('float',), + "QSoundEffect.source": (), + "QSoundEffect.status": (), + "QSoundEffect.stop": (), + "QSoundEffect.supportedMimeTypes": (), + "QSoundEffect.volume": (), + + # class PySide2.QtMultimedia.QVideoDeviceSelectorControl: + "QVideoDeviceSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoDeviceSelectorControl.defaultDevice": (), + "QVideoDeviceSelectorControl.deviceCount": (), + "QVideoDeviceSelectorControl.deviceDescription": ('int',), + "QVideoDeviceSelectorControl.deviceName": ('int',), + "QVideoDeviceSelectorControl.selectedDevice": (), + "QVideoDeviceSelectorControl.setSelectedDevice": ('int',), + + # class PySide2.QtMultimedia.QVideoEncoderSettings: + "QVideoEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QVideoEncoderSettings',)], + "QVideoEncoderSettings.__copy__": (), + "QVideoEncoderSettings.bitRate": (), + "QVideoEncoderSettings.codec": (), + "QVideoEncoderSettings.encodingMode": (), + "QVideoEncoderSettings.encodingOption": ('str',), + "QVideoEncoderSettings.encodingOptions": (), + "QVideoEncoderSettings.frameRate": (), + "QVideoEncoderSettings.isNull": (), + "QVideoEncoderSettings.quality": (), + "QVideoEncoderSettings.resolution": (), + "QVideoEncoderSettings.setBitRate": ('int',), + "QVideoEncoderSettings.setCodec": ('str',), + "QVideoEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QVideoEncoderSettings.setEncodingOption": ('str', 'Any'), + "QVideoEncoderSettings.setEncodingOptions": ('dict',), + "QVideoEncoderSettings.setFrameRate": ('float',), + "QVideoEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QVideoEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QVideoEncoderSettingsControl: + "QVideoEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoEncoderSettingsControl.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QVideoEncoderSettingsControl.supportedVideoCodecs": (), + "QVideoEncoderSettingsControl.videoCodecDescription": ('str',), + "QVideoEncoderSettingsControl.videoSettings": (), + + # class PySide2.QtMultimedia.QVideoFilterRunnable: + "QVideoFilterRunnable.__init__": (), + "QVideoFilterRunnable.run": ('PySide2.QtMultimedia.QVideoFrame', 'PySide2.QtMultimedia.QVideoSurfaceFormat', 'RunFlags'), + + # class PySide2.QtMultimedia.QVideoFrame: + "QVideoFrame.__init__": [(), ('PySide2.QtGui.QImage',), ('PySide2.QtMultimedia.QAbstractVideoBuffer', 'PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat'), ('PySide2.QtMultimedia.QVideoFrame',), ('int', 'PySide2.QtCore.QSize', 'int', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat')], + "QVideoFrame.__copy__": (), + "QVideoFrame.availableMetaData": (), + "QVideoFrame.bits": (), + "QVideoFrame.bytesPerLine": [(), ('int',)], + "QVideoFrame.endTime": (), + "QVideoFrame.fieldType": (), + "QVideoFrame.handle": (), + "QVideoFrame.handleType": (), + "QVideoFrame.height": (), + "QVideoFrame.imageFormatFromPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QVideoFrame.isMapped": (), + "QVideoFrame.isReadable": (), + "QVideoFrame.isValid": (), + "QVideoFrame.isWritable": (), + "QVideoFrame.map": ('PySide2.QtMultimedia.QAbstractVideoBuffer.MapMode',), + "QVideoFrame.mapMode": (), + "QVideoFrame.mappedBytes": (), + "QVideoFrame.metaData": ('str',), + "QVideoFrame.pixelFormat": (), + "QVideoFrame.pixelFormatFromImageFormat": ('PySide2.QtGui.QImage.Format',), + "QVideoFrame.planeCount": (), + "QVideoFrame.setEndTime": ('int',), + "QVideoFrame.setFieldType": ('PySide2.QtMultimedia.QVideoFrame.FieldType',), + "QVideoFrame.setMetaData": ('str', 'Any'), + "QVideoFrame.setStartTime": ('int',), + "QVideoFrame.size": (), + "QVideoFrame.startTime": (), + "QVideoFrame.unmap": (), + "QVideoFrame.width": (), + + # class PySide2.QtMultimedia.QVideoProbe: + "QVideoProbe.__init__": ('PySide2.QtCore.QObject',), + "QVideoProbe.isActive": (), + "QVideoProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QVideoRendererControl: + "QVideoRendererControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoRendererControl.setSurface": ('PySide2.QtMultimedia.QAbstractVideoSurface',), + "QVideoRendererControl.surface": (), + + # class PySide2.QtMultimedia.QVideoSurfaceFormat: + "QVideoSurfaceFormat.__init__": [(), ('PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat', 'PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType'), ('PySide2.QtMultimedia.QVideoSurfaceFormat',)], + "QVideoSurfaceFormat.__copy__": (), + "QVideoSurfaceFormat.frameHeight": (), + "QVideoSurfaceFormat.frameRate": (), + "QVideoSurfaceFormat.frameSize": (), + "QVideoSurfaceFormat.frameWidth": (), + "QVideoSurfaceFormat.handleType": (), + "QVideoSurfaceFormat.isValid": (), + "QVideoSurfaceFormat.pixelAspectRatio": (), + "QVideoSurfaceFormat.pixelFormat": (), + "QVideoSurfaceFormat.property": ('str',), + "QVideoSurfaceFormat.propertyNames": (), + "QVideoSurfaceFormat.scanLineDirection": (), + "QVideoSurfaceFormat.setFrameRate": ('float',), + "QVideoSurfaceFormat.setFrameSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setProperty": ('str', 'Any'), + "QVideoSurfaceFormat.setScanLineDirection": ('PySide2.QtMultimedia.QVideoSurfaceFormat.Direction',), + "QVideoSurfaceFormat.setViewport": ('PySide2.QtCore.QRect',), + "QVideoSurfaceFormat.setYCbCrColorSpace": ('PySide2.QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace',), + "QVideoSurfaceFormat.sizeHint": (), + "QVideoSurfaceFormat.viewport": (), + "QVideoSurfaceFormat.yCbCrColorSpace": (), + + # class PySide2.QtMultimedia.QVideoWindowControl: + "QVideoWindowControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWindowControl.aspectRatioMode": (), + "QVideoWindowControl.brightness": (), + "QVideoWindowControl.contrast": (), + "QVideoWindowControl.displayRect": (), + "QVideoWindowControl.hue": (), + "QVideoWindowControl.isFullScreen": (), + "QVideoWindowControl.nativeSize": (), + "QVideoWindowControl.repaint": (), + "QVideoWindowControl.saturation": (), + "QVideoWindowControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWindowControl.setBrightness": ('int',), + "QVideoWindowControl.setContrast": ('int',), + "QVideoWindowControl.setDisplayRect": ('PySide2.QtCore.QRect',), + "QVideoWindowControl.setFullScreen": ('bool',), + "QVideoWindowControl.setHue": ('int',), + "QVideoWindowControl.setSaturation": ('int',), + "QVideoWindowControl.setWinId": ('int',), + "QVideoWindowControl.winId": (), + }) + +# Module PySide2.QtMultimediaWidgets +if "PySide2.QtMultimediaWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtMultimediaWidgets.QCameraViewfinder: + "QCameraViewfinder.__init__": ('PySide2.QtWidgets.QWidget',), + "QCameraViewfinder.mediaObject": (), + "QCameraViewfinder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimediaWidgets.QGraphicsVideoItem: + "QGraphicsVideoItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsVideoItem.aspectRatioMode": (), + "QGraphicsVideoItem.boundingRect": (), + "QGraphicsVideoItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsVideoItem.mediaObject": (), + "QGraphicsVideoItem.nativeSize": (), + "QGraphicsVideoItem.offset": (), + "QGraphicsVideoItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsVideoItem.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QGraphicsVideoItem.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QGraphicsVideoItem.setOffset": ('PySide2.QtCore.QPointF',), + "QGraphicsVideoItem.setSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsVideoItem.size": (), + "QGraphicsVideoItem.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtMultimediaWidgets.QVideoWidget: + "QVideoWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QVideoWidget.aspectRatioMode": (), + "QVideoWidget.brightness": (), + "QVideoWidget.contrast": (), + "QVideoWidget.event": ('PySide2.QtCore.QEvent',), + "QVideoWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QVideoWidget.hue": (), + "QVideoWidget.mediaObject": (), + "QVideoWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QVideoWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QVideoWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QVideoWidget.saturation": (), + "QVideoWidget.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidget.setBrightness": ('int',), + "QVideoWidget.setContrast": ('int',), + "QVideoWidget.setFullScreen": ('bool',), + "QVideoWidget.setHue": ('int',), + "QVideoWidget.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QVideoWidget.setSaturation": ('int',), + "QVideoWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QVideoWidget.sizeHint": (), + + # class PySide2.QtMultimediaWidgets.QVideoWidgetControl: + "QVideoWidgetControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWidgetControl.aspectRatioMode": (), + "QVideoWidgetControl.brightness": (), + "QVideoWidgetControl.contrast": (), + "QVideoWidgetControl.hue": (), + "QVideoWidgetControl.isFullScreen": (), + "QVideoWidgetControl.saturation": (), + "QVideoWidgetControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidgetControl.setBrightness": ('int',), + "QVideoWidgetControl.setContrast": ('int',), + "QVideoWidgetControl.setFullScreen": ('bool',), + "QVideoWidgetControl.setHue": ('int',), + "QVideoWidgetControl.setSaturation": ('int',), + "QVideoWidgetControl.videoWidget": (), + }) + +# Module PySide2.QtOpenGL +if "PySide2.QtOpenGL" in sys.modules: + dict.update({ + + # class PySide2.QtOpenGL.QGL: + + # class PySide2.QtOpenGL.QGLBuffer: + "QGLBuffer.__init__": [(), ('PySide2.QtOpenGL.QGLBuffer',), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.allocate": [('int',), ('int', 'int')], + "QGLBuffer.bind": (), + "QGLBuffer.bufferId": (), + "QGLBuffer.create": (), + "QGLBuffer.destroy": (), + "QGLBuffer.isCreated": (), + "QGLBuffer.map": ('PySide2.QtOpenGL.QGLBuffer.Access',), + "QGLBuffer.read": ('int', 'int', 'int'), + "QGLBuffer.release": [(), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.setUsagePattern": ('PySide2.QtOpenGL.QGLBuffer.UsagePattern',), + "QGLBuffer.size": (), + "QGLBuffer.type": (), + "QGLBuffer.unmap": (), + "QGLBuffer.usagePattern": (), + "QGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtOpenGL.QGLColormap: + "QGLColormap.__init__": [(), ('PySide2.QtOpenGL.QGLColormap',)], + "QGLColormap.__copy__": (), + "QGLColormap.entryColor": ('int',), + "QGLColormap.entryRgb": ('int',), + "QGLColormap.find": ('int',), + "QGLColormap.findNearest": ('int',), + "QGLColormap.handle": (), + "QGLColormap.isEmpty": (), + "QGLColormap.setEntry": [('int', 'PySide2.QtGui.QColor'), ('int', 'int')], + "QGLColormap.setHandle": ('int',), + "QGLColormap.size": (), + + # class PySide2.QtOpenGL.QGLContext: + "QGLContext.__init__": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.areSharing": ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtOpenGL.QGLContext'), + "QGLContext.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'BindOptions'), ('str',)], + "QGLContext.chooseContext": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.colorIndex": ('PySide2.QtGui.QColor',), + "QGLContext.contextHandle": (), + "QGLContext.create": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.currentContext": (), + "QGLContext.deleteTexture": ('int',), + "QGLContext.device": (), + "QGLContext.deviceIsPixmap": (), + "QGLContext.doneCurrent": (), + "QGLContext.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLContext.format": (), + "QGLContext.fromOpenGLContext": ('PySide2.QtGui.QOpenGLContext',), + "QGLContext.initialized": (), + "QGLContext.isSharing": (), + "QGLContext.isValid": (), + "QGLContext.makeCurrent": (), + "QGLContext.moveToThread": ('PySide2.QtCore.QThread',), + "QGLContext.overlayTransparentColor": (), + "QGLContext.requestedFormat": (), + "QGLContext.reset": (), + "QGLContext.setDevice": ('PySide2.QtGui.QPaintDevice',), + "QGLContext.setFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.setInitialized": ('bool',), + "QGLContext.setTextureCacheLimit": ('int',), + "QGLContext.setValid": ('bool',), + "QGLContext.setWindowCreated": ('bool',), + "QGLContext.swapBuffers": (), + "QGLContext.textureCacheLimit": (), + "QGLContext.windowCreated": (), + + # class PySide2.QtOpenGL.QGLFormat: + "QGLFormat.__init__": [(), ('FormatOptions', 'int'), ('PySide2.QtOpenGL.QGLFormat',)], + "QGLFormat.__copy__": (), + "QGLFormat.accum": (), + "QGLFormat.accumBufferSize": (), + "QGLFormat.alpha": (), + "QGLFormat.alphaBufferSize": (), + "QGLFormat.blueBufferSize": (), + "QGLFormat.defaultFormat": (), + "QGLFormat.defaultOverlayFormat": (), + "QGLFormat.depth": (), + "QGLFormat.depthBufferSize": (), + "QGLFormat.directRendering": (), + "QGLFormat.doubleBuffer": (), + "QGLFormat.fromSurfaceFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QGLFormat.greenBufferSize": (), + "QGLFormat.hasOpenGL": (), + "QGLFormat.hasOpenGLOverlays": (), + "QGLFormat.hasOverlay": (), + "QGLFormat.majorVersion": (), + "QGLFormat.minorVersion": (), + "QGLFormat.openGLVersionFlags": (), + "QGLFormat.plane": (), + "QGLFormat.profile": (), + "QGLFormat.redBufferSize": (), + "QGLFormat.rgba": (), + "QGLFormat.sampleBuffers": (), + "QGLFormat.samples": (), + "QGLFormat.setAccum": ('bool',), + "QGLFormat.setAccumBufferSize": ('int',), + "QGLFormat.setAlpha": ('bool',), + "QGLFormat.setAlphaBufferSize": ('int',), + "QGLFormat.setBlueBufferSize": ('int',), + "QGLFormat.setDefaultFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDefaultOverlayFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDepth": ('bool',), + "QGLFormat.setDepthBufferSize": ('int',), + "QGLFormat.setDirectRendering": ('bool',), + "QGLFormat.setDoubleBuffer": ('bool',), + "QGLFormat.setGreenBufferSize": ('int',), + "QGLFormat.setOption": ('FormatOptions',), + "QGLFormat.setOverlay": ('bool',), + "QGLFormat.setPlane": ('int',), + "QGLFormat.setProfile": ('PySide2.QtOpenGL.QGLFormat.OpenGLContextProfile',), + "QGLFormat.setRedBufferSize": ('int',), + "QGLFormat.setRgba": ('bool',), + "QGLFormat.setSampleBuffers": ('bool',), + "QGLFormat.setSamples": ('int',), + "QGLFormat.setStencil": ('bool',), + "QGLFormat.setStencilBufferSize": ('int',), + "QGLFormat.setStereo": ('bool',), + "QGLFormat.setSwapInterval": ('int',), + "QGLFormat.setVersion": ('int', 'int'), + "QGLFormat.stencil": (), + "QGLFormat.stencilBufferSize": (), + "QGLFormat.stereo": (), + "QGLFormat.swapInterval": (), + "QGLFormat.testOption": ('FormatOptions',), + "QGLFormat.toSurfaceFormat": ('PySide2.QtOpenGL.QGLFormat',), + + # class PySide2.QtOpenGL.QGLFramebufferObject: + "QGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QGLFramebufferObject.attachment": (), + "QGLFramebufferObject.bind": (), + "QGLFramebufferObject.bindDefault": (), + "QGLFramebufferObject.blitFramebuffer": ('PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), + "QGLFramebufferObject.devType": (), + "QGLFramebufferObject.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLFramebufferObject.format": (), + "QGLFramebufferObject.handle": (), + "QGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QGLFramebufferObject.isBound": (), + "QGLFramebufferObject.isValid": (), + "QGLFramebufferObject.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLFramebufferObject.paintEngine": (), + "QGLFramebufferObject.release": (), + "QGLFramebufferObject.size": (), + "QGLFramebufferObject.texture": (), + "QGLFramebufferObject.toImage": (), + + # class PySide2.QtOpenGL.QGLFramebufferObjectFormat: + "QGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtOpenGL.QGLFramebufferObjectFormat',)], + "QGLFramebufferObjectFormat.__copy__": (), + "QGLFramebufferObjectFormat.attachment": (), + "QGLFramebufferObjectFormat.internalTextureFormat": (), + "QGLFramebufferObjectFormat.mipmap": (), + "QGLFramebufferObjectFormat.samples": (), + "QGLFramebufferObjectFormat.setAttachment": ('PySide2.QtOpenGL.QGLFramebufferObject.Attachment',), + "QGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QGLFramebufferObjectFormat.setMipmap": ('bool',), + "QGLFramebufferObjectFormat.setSamples": ('int',), + "QGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtOpenGL.QGLPixelBuffer: + "QGLPixelBuffer.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget'), ('int', 'int', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget')], + "QGLPixelBuffer.bindTexture": [('PySide2.QtGui.QImage', 'int'), ('PySide2.QtGui.QPixmap', 'int'), ('str',)], + "QGLPixelBuffer.bindToDynamicTexture": ('int',), + "QGLPixelBuffer.context": (), + "QGLPixelBuffer.deleteTexture": ('int',), + "QGLPixelBuffer.devType": (), + "QGLPixelBuffer.doneCurrent": (), + "QGLPixelBuffer.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLPixelBuffer.format": (), + "QGLPixelBuffer.generateDynamicTexture": (), + "QGLPixelBuffer.handle": (), + "QGLPixelBuffer.hasOpenGLPbuffers": (), + "QGLPixelBuffer.isValid": (), + "QGLPixelBuffer.makeCurrent": (), + "QGLPixelBuffer.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLPixelBuffer.paintEngine": (), + "QGLPixelBuffer.releaseFromDynamicTexture": (), + "QGLPixelBuffer.size": (), + "QGLPixelBuffer.toImage": (), + "QGLPixelBuffer.updateDynamicTexture": ('int',), + + # class PySide2.QtOpenGL.QGLShader: + "QGLShader.__init__": [('ShaderType', 'PySide2.QtCore.QObject'), ('ShaderType', 'PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShader.compileSourceFile": ('str',), + "QGLShader.hasOpenGLShaders": ('ShaderType', 'PySide2.QtOpenGL.QGLContext'), + "QGLShader.isCompiled": (), + "QGLShader.log": (), + "QGLShader.shaderId": (), + "QGLShader.shaderType": (), + "QGLShader.sourceCode": (), + + # class PySide2.QtOpenGL.QGLShaderProgram: + "QGLShaderProgram.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShaderProgram.addShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.addShaderFromSourceCode": [('ShaderType', 'PySide2.QtCore.QByteArray'), ('ShaderType', 'str')], + "QGLShaderProgram.addShaderFromSourceFile": ('ShaderType', 'str'), + "QGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShaderProgram.bind": (), + "QGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.geometryInputType": (), + "QGLShaderProgram.geometryOutputType": (), + "QGLShaderProgram.geometryOutputVertexCount": (), + "QGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtOpenGL.QGLContext',), + "QGLShaderProgram.isLinked": (), + "QGLShaderProgram.link": (), + "QGLShaderProgram.log": (), + "QGLShaderProgram.maxGeometryOutputVertices": (), + "QGLShaderProgram.programId": (), + "QGLShaderProgram.release": (), + "QGLShaderProgram.removeAllShaders": (), + "QGLShaderProgram.removeShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.setAttributeArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setAttributeArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setAttributeArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float')], + "QGLShaderProgram.setGeometryInputType": ('int',), + "QGLShaderProgram.setGeometryOutputType": ('int',), + "QGLShaderProgram.setGeometryOutputVertexCount": ('int',), + "QGLShaderProgram.setUniformValue": [('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QGLShaderProgram.setUniformValueArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setUniformValueArray2x2": [('int', 'PySide2.QtGui.QMatrix2x2', 'int'), ('str', 'PySide2.QtGui.QMatrix2x2', 'int')], + "QGLShaderProgram.setUniformValueArray2x3": [('int', 'PySide2.QtGui.QMatrix2x3', 'int'), ('str', 'PySide2.QtGui.QMatrix2x3', 'int')], + "QGLShaderProgram.setUniformValueArray2x4": [('int', 'PySide2.QtGui.QMatrix2x4', 'int'), ('str', 'PySide2.QtGui.QMatrix2x4', 'int')], + "QGLShaderProgram.setUniformValueArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setUniformValueArray3x2": [('int', 'PySide2.QtGui.QMatrix3x2', 'int'), ('str', 'PySide2.QtGui.QMatrix3x2', 'int')], + "QGLShaderProgram.setUniformValueArray3x3": [('int', 'PySide2.QtGui.QMatrix3x3', 'int'), ('str', 'PySide2.QtGui.QMatrix3x3', 'int')], + "QGLShaderProgram.setUniformValueArray3x4": [('int', 'PySide2.QtGui.QMatrix3x4', 'int'), ('str', 'PySide2.QtGui.QMatrix3x4', 'int')], + "QGLShaderProgram.setUniformValueArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setUniformValueArray4x2": [('int', 'PySide2.QtGui.QMatrix4x2', 'int'), ('str', 'PySide2.QtGui.QMatrix4x2', 'int')], + "QGLShaderProgram.setUniformValueArray4x3": [('int', 'PySide2.QtGui.QMatrix4x3', 'int'), ('str', 'PySide2.QtGui.QMatrix4x3', 'int')], + "QGLShaderProgram.setUniformValueArray4x4": [('int', 'PySide2.QtGui.QMatrix4x4', 'int'), ('str', 'PySide2.QtGui.QMatrix4x4', 'int')], + "QGLShaderProgram.setUniformValueArrayInt": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.setUniformValueArrayUint": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.shaders": (), + "QGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtOpenGL.QGLWidget: + "QGLWidget.__init__": [('PySide2.QtOpenGL.QGLContext', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags'), ('PySide2.QtOpenGL.QGLFormat', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags')], + "QGLWidget.autoBufferSwap": (), + "QGLWidget.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'BindOptions'), ('str',)], + "QGLWidget.colormap": (), + "QGLWidget.context": (), + "QGLWidget.convertToGLFormat": ('PySide2.QtGui.QImage',), + "QGLWidget.deleteTexture": ('int',), + "QGLWidget.doneCurrent": (), + "QGLWidget.doubleBuffer": (), + "QGLWidget.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLWidget.event": ('PySide2.QtCore.QEvent',), + "QGLWidget.format": (), + "QGLWidget.glDraw": (), + "QGLWidget.glInit": (), + "QGLWidget.grabFrameBuffer": ('bool',), + "QGLWidget.initializeGL": (), + "QGLWidget.initializeOverlayGL": (), + "QGLWidget.isSharing": (), + "QGLWidget.isValid": (), + "QGLWidget.makeCurrent": (), + "QGLWidget.makeOverlayCurrent": (), + "QGLWidget.overlayContext": (), + "QGLWidget.paintEngine": (), + "QGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGLWidget.paintGL": (), + "QGLWidget.paintOverlayGL": (), + "QGLWidget.qglClearColor": ('PySide2.QtGui.QColor',), + "QGLWidget.qglColor": ('PySide2.QtGui.QColor',), + "QGLWidget.renderPixmap": ('int', 'int', 'bool'), + "QGLWidget.renderText": [('float', 'float', 'float', 'str', 'PySide2.QtGui.QFont'), ('int', 'int', 'str', 'PySide2.QtGui.QFont')], + "QGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGLWidget.resizeGL": ('int', 'int'), + "QGLWidget.resizeOverlayGL": ('int', 'int'), + "QGLWidget.setAutoBufferSwap": ('bool',), + "QGLWidget.setColormap": ('PySide2.QtOpenGL.QGLColormap',), + "QGLWidget.swapBuffers": (), + "QGLWidget.updateGL": (), + "QGLWidget.updateOverlayGL": (), + }) + +# Module PySide2.QtQml +if "PySide2.QtQml" in sys.modules: + dict.update({ + + # class PySide2.QtQml.ListProperty: + + # class PySide2.QtQml.QJSEngine: + "QJSEngine.__init__": [(), ('PySide2.QtCore.QObject',)], + "QJSEngine.collectGarbage": (), + "QJSEngine.evaluate": ('str', 'str', 'int'), + "QJSEngine.globalObject": (), + "QJSEngine.installExtensions": ('Extensions', 'PySide2.QtQml.QJSValue'), + "QJSEngine.installTranslatorFunctions": ('PySide2.QtQml.QJSValue',), + "QJSEngine.newArray": ('int',), + "QJSEngine.newObject": (), + "QJSEngine.newQMetaObject": ('PySide2.QtCore.QMetaObject',), + "QJSEngine.newQObject": ('PySide2.QtCore.QObject',), + "QJSEngine.toScriptValue": ('Any',), + + # class PySide2.QtQml.QJSValue: + "QJSValue.__init__": [('PySide2.QtQml.QJSValue',), ('PySide2.QtQml.QJSValue.SpecialValue',), ('bool',), ('float',), ('int',), ('str',)], + "QJSValue.__copy__": (), + "QJSValue.call": ('list',), + "QJSValue.callAsConstructor": ('list',), + "QJSValue.callWithInstance": ('PySide2.QtQml.QJSValue', 'list'), + "QJSValue.deleteProperty": ('str',), + "QJSValue.engine": (), + "QJSValue.equals": ('PySide2.QtQml.QJSValue',), + "QJSValue.hasOwnProperty": ('str',), + "QJSValue.hasProperty": ('str',), + "QJSValue.isArray": (), + "QJSValue.isBool": (), + "QJSValue.isCallable": (), + "QJSValue.isDate": (), + "QJSValue.isError": (), + "QJSValue.isNull": (), + "QJSValue.isNumber": (), + "QJSValue.isObject": (), + "QJSValue.isQMetaObject": (), + "QJSValue.isQObject": (), + "QJSValue.isRegExp": (), + "QJSValue.isString": (), + "QJSValue.isUndefined": (), + "QJSValue.isVariant": (), + "QJSValue.property": [('int',), ('str',)], + "QJSValue.prototype": (), + "QJSValue.setProperty": [('int', 'PySide2.QtQml.QJSValue'), ('str', 'PySide2.QtQml.QJSValue')], + "QJSValue.setPrototype": ('PySide2.QtQml.QJSValue',), + "QJSValue.strictlyEquals": ('PySide2.QtQml.QJSValue',), + "QJSValue.toBool": (), + "QJSValue.toDateTime": (), + "QJSValue.toInt": (), + "QJSValue.toNumber": (), + "QJSValue.toQMetaObject": (), + "QJSValue.toQObject": (), + "QJSValue.toString": (), + "QJSValue.toUInt": (), + "QJSValue.toVariant": (), + + # class PySide2.QtQml.QJSValueIterator: + "QJSValueIterator.__init__": ('PySide2.QtQml.QJSValue',), + "QJSValueIterator.hasNext": (), + "QJSValueIterator.name": (), + "QJSValueIterator.value": (), + + # class PySide2.QtQml.QQmlAbstractUrlInterceptor: + "QQmlAbstractUrlInterceptor.__init__": (), + "QQmlAbstractUrlInterceptor.intercept": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlAbstractUrlInterceptor.DataType'), + + # class PySide2.QtQml.QQmlApplicationEngine: + "QQmlApplicationEngine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QQmlApplicationEngine.load": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlApplicationEngine.loadData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlApplicationEngine.rootObjects": (), + + # class PySide2.QtQml.QQmlComponent: + "QQmlComponent.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject')], + "QQmlComponent.beginCreate": ('PySide2.QtQml.QQmlContext',), + "QQmlComponent.completeCreate": (), + "QQmlComponent.create": [('PySide2.QtQml.QQmlContext',), ('PySide2.QtQml.QQmlIncubator', 'PySide2.QtQml.QQmlContext', 'PySide2.QtQml.QQmlContext')], + "QQmlComponent.creationContext": (), + "QQmlComponent.errorString": (), + "QQmlComponent.errors": (), + "QQmlComponent.isError": (), + "QQmlComponent.isLoading": (), + "QQmlComponent.isNull": (), + "QQmlComponent.isReady": (), + "QQmlComponent.loadUrl": [('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode')], + "QQmlComponent.progress": (), + "QQmlComponent.setData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlComponent.status": (), + "QQmlComponent.url": (), + + # class PySide2.QtQml.QQmlContext: + "QQmlContext.__init__": [('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject')], + "QQmlContext.baseUrl": (), + "QQmlContext.contextObject": (), + "QQmlContext.contextProperty": ('str',), + "QQmlContext.engine": (), + "QQmlContext.isValid": (), + "QQmlContext.nameForObject": ('PySide2.QtCore.QObject',), + "QQmlContext.parentContext": (), + "QQmlContext.resolvedUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setContextObject": ('PySide2.QtCore.QObject',), + "QQmlContext.setContextProperty": [('str', 'Any'), ('str', 'PySide2.QtCore.QObject')], + + # class PySide2.QtQml.QQmlDebuggingEnabler: + "QQmlDebuggingEnabler.__init__": ('bool',), + "QQmlDebuggingEnabler.connectToLocalDebugger": ('str', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode'), + "QQmlDebuggingEnabler.debuggerServices": (), + "QQmlDebuggingEnabler.inspectorServices": (), + "QQmlDebuggingEnabler.nativeDebuggerServices": (), + "QQmlDebuggingEnabler.profilerServices": (), + "QQmlDebuggingEnabler.setServices": ('List[str]',), + "QQmlDebuggingEnabler.startDebugConnector": ('str', 'dict'), + "QQmlDebuggingEnabler.startTcpDebugServer": ('int', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode', 'str'), + + # class PySide2.QtQml.QQmlEngine: + "QQmlEngine.__init__": ('PySide2.QtCore.QObject',), + "QQmlEngine.addImageProvider": ('str', 'PySide2.QtQml.QQmlImageProviderBase'), + "QQmlEngine.addImportPath": ('str',), + "QQmlEngine.addNamedBundle": ('str', 'str'), + "QQmlEngine.addPluginPath": ('str',), + "QQmlEngine.baseUrl": (), + "QQmlEngine.clearComponentCache": (), + "QQmlEngine.contextForObject": ('PySide2.QtCore.QObject',), + "QQmlEngine.event": ('PySide2.QtCore.QEvent',), + "QQmlEngine.imageProvider": ('str',), + "QQmlEngine.importPathList": (), + "QQmlEngine.importPlugin": ('str', 'str', 'list'), + "QQmlEngine.incubationController": (), + "QQmlEngine.networkAccessManager": (), + "QQmlEngine.networkAccessManagerFactory": (), + "QQmlEngine.objectOwnership": ('PySide2.QtCore.QObject',), + "QQmlEngine.offlineStorageDatabaseFilePath": ('str',), + "QQmlEngine.offlineStoragePath": (), + "QQmlEngine.outputWarningsToStandardError": (), + "QQmlEngine.pluginPathList": (), + "QQmlEngine.removeImageProvider": ('str',), + "QQmlEngine.rootContext": (), + "QQmlEngine.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlEngine.setContextForObject": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), + "QQmlEngine.setImportPathList": ('List[str]',), + "QQmlEngine.setIncubationController": ('PySide2.QtQml.QQmlIncubationController',), + "QQmlEngine.setNetworkAccessManagerFactory": ('PySide2.QtQml.QQmlNetworkAccessManagerFactory',), + "QQmlEngine.setObjectOwnership": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine.ObjectOwnership'), + "QQmlEngine.setOfflineStoragePath": ('str',), + "QQmlEngine.setOutputWarningsToStandardError": ('bool',), + "QQmlEngine.setPluginPathList": ('List[str]',), + "QQmlEngine.setUrlInterceptor": ('PySide2.QtQml.QQmlAbstractUrlInterceptor',), + "QQmlEngine.trimComponentCache": (), + "QQmlEngine.urlInterceptor": (), + + # class PySide2.QtQml.QQmlError: + "QQmlError.__init__": [(), ('PySide2.QtQml.QQmlError',)], + "QQmlError.__copy__": (), + "QQmlError.column": (), + "QQmlError.description": (), + "QQmlError.isValid": (), + "QQmlError.line": (), + "QQmlError.messageType": (), + "QQmlError.object": (), + "QQmlError.setColumn": ('int',), + "QQmlError.setDescription": ('str',), + "QQmlError.setLine": ('int',), + "QQmlError.setMessageType": ('PySide2.QtCore.QtMsgType',), + "QQmlError.setObject": ('PySide2.QtCore.QObject',), + "QQmlError.setUrl": ('PySide2.QtCore.QUrl',), + "QQmlError.toString": (), + "QQmlError.url": (), + + # class PySide2.QtQml.QQmlExpression: + "QQmlExpression.__init__": [(), ('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlScriptString', 'PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QObject')], + "QQmlExpression.clearError": (), + "QQmlExpression.columnNumber": (), + "QQmlExpression.context": (), + "QQmlExpression.engine": (), + "QQmlExpression.error": (), + "QQmlExpression.evaluate": ('bool',), + "QQmlExpression.expression": (), + "QQmlExpression.hasError": (), + "QQmlExpression.lineNumber": (), + "QQmlExpression.notifyOnValueChanged": (), + "QQmlExpression.scopeObject": (), + "QQmlExpression.setExpression": ('str',), + "QQmlExpression.setNotifyOnValueChanged": ('bool',), + "QQmlExpression.setSourceLocation": ('str', 'int', 'int'), + "QQmlExpression.sourceFile": (), + + # class PySide2.QtQml.QQmlExtensionInterface: + "QQmlExtensionInterface.__init__": (), + "QQmlExtensionInterface.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + + # class PySide2.QtQml.QQmlExtensionPlugin: + "QQmlExtensionPlugin.__init__": ('PySide2.QtCore.QObject',), + "QQmlExtensionPlugin.baseUrl": (), + "QQmlExtensionPlugin.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + "QQmlExtensionPlugin.registerTypes": ('str',), + + # class PySide2.QtQml.QQmlFile: + "QQmlFile.__init__": [(), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.clear": [(), ('PySide2.QtCore.QObject',)], + "QQmlFile.connectDownloadProgress": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.connectFinished": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.data": (), + "QQmlFile.dataByteArray": (), + "QQmlFile.error": (), + "QQmlFile.isError": (), + "QQmlFile.isLoading": (), + "QQmlFile.isLocalFile": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.isNull": (), + "QQmlFile.isReady": (), + "QQmlFile.isSynchronous": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.load": [('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.size": (), + "QQmlFile.status": (), + "QQmlFile.url": (), + "QQmlFile.urlToLocalFileOrQrc": [('PySide2.QtCore.QUrl',), ('str',)], + + # class PySide2.QtQml.QQmlFileSelector: + "QQmlFileSelector.__init__": ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), + "QQmlFileSelector.get": ('PySide2.QtQml.QQmlEngine',), + "QQmlFileSelector.selector": (), + "QQmlFileSelector.setExtraSelectors": ('List[str]',), + "QQmlFileSelector.setSelector": ('PySide2.QtCore.QFileSelector',), + + # class PySide2.QtQml.QQmlImageProviderBase: + "QQmlImageProviderBase.flags": (), + "QQmlImageProviderBase.imageType": (), + + # class PySide2.QtQml.QQmlIncubationController: + "QQmlIncubationController.__init__": (), + "QQmlIncubationController.engine": (), + "QQmlIncubationController.incubateFor": ('int',), + "QQmlIncubationController.incubateWhile": ('bool', 'int'), + "QQmlIncubationController.incubatingObjectCount": (), + "QQmlIncubationController.incubatingObjectCountChanged": ('int',), + + # class PySide2.QtQml.QQmlIncubator: + "QQmlIncubator.__init__": ('PySide2.QtQml.QQmlIncubator.IncubationMode',), + "QQmlIncubator.clear": (), + "QQmlIncubator.errors": (), + "QQmlIncubator.forceCompletion": (), + "QQmlIncubator.incubationMode": (), + "QQmlIncubator.isError": (), + "QQmlIncubator.isLoading": (), + "QQmlIncubator.isNull": (), + "QQmlIncubator.isReady": (), + "QQmlIncubator.object": (), + "QQmlIncubator.setInitialState": ('PySide2.QtCore.QObject',), + "QQmlIncubator.status": (), + "QQmlIncubator.statusChanged": ('PySide2.QtQml.QQmlIncubator.Status',), + + # class PySide2.QtQml.QQmlListReference: + "QQmlListReference.__init__": [(), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlListReference',)], + "QQmlListReference.__copy__": (), + "QQmlListReference.append": ('PySide2.QtCore.QObject',), + "QQmlListReference.at": ('int',), + "QQmlListReference.canAppend": (), + "QQmlListReference.canAt": (), + "QQmlListReference.canClear": (), + "QQmlListReference.canCount": (), + "QQmlListReference.clear": (), + "QQmlListReference.count": (), + "QQmlListReference.isManipulable": (), + "QQmlListReference.isReadable": (), + "QQmlListReference.isValid": (), + "QQmlListReference.listElementType": (), + "QQmlListReference.object": (), + + # class PySide2.QtQml.QQmlNetworkAccessManagerFactory: + "QQmlNetworkAccessManagerFactory.__init__": (), + "QQmlNetworkAccessManagerFactory.create": ('PySide2.QtCore.QObject',), + + # class PySide2.QtQml.QQmlParserStatus: + "QQmlParserStatus.__init__": (), + "QQmlParserStatus.classBegin": (), + "QQmlParserStatus.componentComplete": (), + + # class PySide2.QtQml.QQmlProperty: + "QQmlProperty.__init__": [(), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlProperty',)], + "QQmlProperty.__copy__": (), + "QQmlProperty.connectNotifySignal": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlProperty.hasNotifySignal": (), + "QQmlProperty.index": (), + "QQmlProperty.isDesignable": (), + "QQmlProperty.isProperty": (), + "QQmlProperty.isResettable": (), + "QQmlProperty.isSignalProperty": (), + "QQmlProperty.isValid": (), + "QQmlProperty.isWritable": (), + "QQmlProperty.method": (), + "QQmlProperty.name": (), + "QQmlProperty.needsNotifySignal": (), + "QQmlProperty.object": (), + "QQmlProperty.property": (), + "QQmlProperty.propertyType": (), + "QQmlProperty.propertyTypeCategory": (), + "QQmlProperty.propertyTypeName": (), + "QQmlProperty.read": [(), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine')], + "QQmlProperty.reset": (), + "QQmlProperty.type": (), + "QQmlProperty.write": [('Any',), ('PySide2.QtCore.QObject', 'str', 'Any'), ('PySide2.QtCore.QObject', 'str', 'Any', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'Any', 'PySide2.QtQml.QQmlEngine')], + + # class PySide2.QtQml.QQmlPropertyMap: + "QQmlPropertyMap.__init__": ('PySide2.QtCore.QObject',), + "QQmlPropertyMap.clear": ('str',), + "QQmlPropertyMap.contains": ('str',), + "QQmlPropertyMap.count": (), + "QQmlPropertyMap.insert": ('str', 'Any'), + "QQmlPropertyMap.isEmpty": (), + "QQmlPropertyMap.keys": (), + "QQmlPropertyMap.size": (), + "QQmlPropertyMap.updateValue": ('str', 'Any'), + "QQmlPropertyMap.value": ('str',), + + # class PySide2.QtQml.QQmlPropertyValueSource: + "QQmlPropertyValueSource.__init__": (), + "QQmlPropertyValueSource.setTarget": ('PySide2.QtQml.QQmlProperty',), + + # class PySide2.QtQml.QQmlScriptString: + "QQmlScriptString.__init__": [(), ('PySide2.QtQml.QQmlScriptString',)], + "QQmlScriptString.__copy__": (), + "QQmlScriptString.booleanLiteral": ('bool',), + "QQmlScriptString.isEmpty": (), + "QQmlScriptString.isNullLiteral": (), + "QQmlScriptString.isUndefinedLiteral": (), + "QQmlScriptString.numberLiteral": ('bool',), + "QQmlScriptString.stringLiteral": (), + + # class PySide2.QtQml.QQmlTypesExtensionInterface: + "QQmlTypesExtensionInterface.__init__": (), + "QQmlTypesExtensionInterface.registerTypes": ('str',), + + # class PySide2.QtQml.VolatileBool: + }) + +# Module PySide2.QtQuick +if "PySide2.QtQuick" in sys.modules: + dict.update({ + + # class PySide2.QtQuick.QQuickAsyncImageProvider: + "QQuickAsyncImageProvider.__init__": (), + "QQuickAsyncImageProvider.requestImageResponse": ('str', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickFramebufferObject: + "QQuickFramebufferObject.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickFramebufferObject.createRenderer": (), + "QQuickFramebufferObject.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickFramebufferObject.isTextureProvider": (), + "QQuickFramebufferObject.mirrorVertically": (), + "QQuickFramebufferObject.releaseResources": (), + "QQuickFramebufferObject.setMirrorVertically": ('bool',), + "QQuickFramebufferObject.setTextureFollowsItemSize": ('bool',), + "QQuickFramebufferObject.textureFollowsItemSize": (), + "QQuickFramebufferObject.textureProvider": (), + "QQuickFramebufferObject.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickImageProvider: + "QQuickImageProvider.__init__": ('PySide2.QtQml.QQmlImageProviderBase.ImageType', 'Flags'), + "QQuickImageProvider.flags": (), + "QQuickImageProvider.imageType": (), + "QQuickImageProvider.requestImage": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestPixmap": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestTexture": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickImageResponse: + "QQuickImageResponse.__init__": (), + "QQuickImageResponse.cancel": (), + "QQuickImageResponse.errorString": (), + "QQuickImageResponse.textureFactory": (), + + # class PySide2.QtQuick.QQuickItem: + "QQuickItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.acceptHoverEvents": (), + "QQuickItem.acceptedMouseButtons": (), + "QQuickItem.activeFocusOnTab": (), + "QQuickItem.antialiasing": (), + "QQuickItem.baselineOffset": (), + "QQuickItem.boundingRect": (), + "QQuickItem.childAt": ('float', 'float'), + "QQuickItem.childItems": (), + "QQuickItem.childMouseEventFilter": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickItem.childrenRect": (), + "QQuickItem.classBegin": (), + "QQuickItem.clip": (), + "QQuickItem.clipRect": (), + "QQuickItem.componentComplete": (), + "QQuickItem.contains": ('PySide2.QtCore.QPointF',), + "QQuickItem.cursor": (), + "QQuickItem.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickItem.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickItem.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickItem.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickItem.event": ('PySide2.QtCore.QEvent',), + "QQuickItem.filtersChildMouseEvents": (), + "QQuickItem.flags": (), + "QQuickItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.forceActiveFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QQuickItem.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickItem.grabMouse": (), + "QQuickItem.grabToImage": [('PySide2.QtCore.QSize',), ('PySide2.QtQml.QJSValue', 'PySide2.QtCore.QSize')], + "QQuickItem.grabTouchPoints": ('list',), + "QQuickItem.hasActiveFocus": (), + "QQuickItem.hasFocus": (), + "QQuickItem.height": (), + "QQuickItem.heightValid": (), + "QQuickItem.hoverEnterEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverLeaveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverMoveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.implicitHeight": (), + "QQuickItem.implicitWidth": (), + "QQuickItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QQuickItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QQuickItem.isAncestorOf": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.isComponentComplete": (), + "QQuickItem.isEnabled": (), + "QQuickItem.isFocusScope": (), + "QQuickItem.isTextureProvider": (), + "QQuickItem.isUnderMouse": (), + "QQuickItem.isVisible": (), + "QQuickItem.itemTransform": ('PySide2.QtQuick.QQuickItem', 'bool'), + "QQuickItem.keepMouseGrab": (), + "QQuickItem.keepTouchGrab": (), + "QQuickItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.mapFromGlobal": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapFromScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapRectFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectFromScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapRectToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectToScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapToGlobal": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapToScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseUngrabEvent": (), + "QQuickItem.nextItemInFocusChain": ('bool',), + "QQuickItem.opacity": (), + "QQuickItem.parentItem": (), + "QQuickItem.polish": (), + "QQuickItem.position": (), + "QQuickItem.releaseResources": (), + "QQuickItem.resetAntialiasing": (), + "QQuickItem.resetHeight": (), + "QQuickItem.resetWidth": (), + "QQuickItem.rotation": (), + "QQuickItem.scale": (), + "QQuickItem.scopedFocusItem": (), + "QQuickItem.setAcceptHoverEvents": ('bool',), + "QQuickItem.setAcceptedMouseButtons": ('MouseButtons',), + "QQuickItem.setActiveFocusOnTab": ('bool',), + "QQuickItem.setAntialiasing": ('bool',), + "QQuickItem.setBaselineOffset": ('float',), + "QQuickItem.setClip": ('bool',), + "QQuickItem.setCursor": ('PySide2.QtGui.QCursor',), + "QQuickItem.setEnabled": ('bool',), + "QQuickItem.setFiltersChildMouseEvents": ('bool',), + "QQuickItem.setFlag": ('PySide2.QtQuick.QQuickItem.Flag', 'bool'), + "QQuickItem.setFlags": ('Flags',), + "QQuickItem.setFocus": [('bool',), ('bool', 'PySide2.QtCore.Qt.FocusReason')], + "QQuickItem.setHeight": ('float',), + "QQuickItem.setImplicitHeight": ('float',), + "QQuickItem.setImplicitSize": ('float', 'float'), + "QQuickItem.setImplicitWidth": ('float',), + "QQuickItem.setKeepMouseGrab": ('bool',), + "QQuickItem.setKeepTouchGrab": ('bool',), + "QQuickItem.setOpacity": ('float',), + "QQuickItem.setParentItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.setPosition": ('PySide2.QtCore.QPointF',), + "QQuickItem.setRotation": ('float',), + "QQuickItem.setScale": ('float',), + "QQuickItem.setSize": ('PySide2.QtCore.QSizeF',), + "QQuickItem.setSmooth": ('bool',), + "QQuickItem.setState": ('str',), + "QQuickItem.setTransformOrigin": ('PySide2.QtQuick.QQuickItem.TransformOrigin',), + "QQuickItem.setTransformOriginPoint": ('PySide2.QtCore.QPointF',), + "QQuickItem.setVisible": ('bool',), + "QQuickItem.setWidth": ('float',), + "QQuickItem.setX": ('float',), + "QQuickItem.setY": ('float',), + "QQuickItem.setZ": ('float',), + "QQuickItem.smooth": (), + "QQuickItem.stackAfter": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.stackBefore": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.state": (), + "QQuickItem.textureProvider": (), + "QQuickItem.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QQuickItem.touchUngrabEvent": (), + "QQuickItem.transformOrigin": (), + "QQuickItem.transformOriginPoint": (), + "QQuickItem.ungrabMouse": (), + "QQuickItem.ungrabTouchPoints": (), + "QQuickItem.unsetCursor": (), + "QQuickItem.update": (), + "QQuickItem.updateInputMethod": ('InputMethodQueries',), + "QQuickItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + "QQuickItem.updatePolish": (), + "QQuickItem.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QQuickItem.width": (), + "QQuickItem.widthValid": (), + "QQuickItem.window": (), + "QQuickItem.windowDeactivateEvent": (), + "QQuickItem.x": (), + "QQuickItem.y": (), + "QQuickItem.z": (), + + # class PySide2.QtQuick.QQuickItemGrabResult: + "QQuickItemGrabResult.event": ('PySide2.QtCore.QEvent',), + "QQuickItemGrabResult.image": (), + "QQuickItemGrabResult.saveToFile": ('str',), + "QQuickItemGrabResult.url": (), + + # class PySide2.QtQuick.QQuickPaintedItem: + "QQuickPaintedItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickPaintedItem.antialiasing": (), + "QQuickPaintedItem.contentsBoundingRect": (), + "QQuickPaintedItem.contentsScale": (), + "QQuickPaintedItem.contentsSize": (), + "QQuickPaintedItem.fillColor": (), + "QQuickPaintedItem.isTextureProvider": (), + "QQuickPaintedItem.mipmap": (), + "QQuickPaintedItem.opaquePainting": (), + "QQuickPaintedItem.paint": ('PySide2.QtGui.QPainter',), + "QQuickPaintedItem.performanceHints": (), + "QQuickPaintedItem.releaseResources": (), + "QQuickPaintedItem.renderTarget": (), + "QQuickPaintedItem.resetContentsSize": (), + "QQuickPaintedItem.setAntialiasing": ('bool',), + "QQuickPaintedItem.setContentsScale": ('float',), + "QQuickPaintedItem.setContentsSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.setFillColor": ('PySide2.QtGui.QColor',), + "QQuickPaintedItem.setMipmap": ('bool',), + "QQuickPaintedItem.setOpaquePainting": ('bool',), + "QQuickPaintedItem.setPerformanceHint": ('PySide2.QtQuick.QQuickPaintedItem.PerformanceHint', 'bool'), + "QQuickPaintedItem.setPerformanceHints": ('PerformanceHints',), + "QQuickPaintedItem.setRenderTarget": ('PySide2.QtQuick.QQuickPaintedItem.RenderTarget',), + "QQuickPaintedItem.setTextureSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.textureProvider": (), + "QQuickPaintedItem.textureSize": (), + "QQuickPaintedItem.update": [(), ('PySide2.QtCore.QRect',)], + "QQuickPaintedItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickRenderControl: + "QQuickRenderControl.__init__": ('PySide2.QtCore.QObject',), + "QQuickRenderControl.grab": (), + "QQuickRenderControl.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QQuickRenderControl.invalidate": (), + "QQuickRenderControl.polishItems": (), + "QQuickRenderControl.prepareThread": ('PySide2.QtCore.QThread',), + "QQuickRenderControl.render": (), + "QQuickRenderControl.renderWindow": ('PySide2.QtCore.QPoint',), + "QQuickRenderControl.renderWindowFor": ('PySide2.QtQuick.QQuickWindow', 'PySide2.QtCore.QPoint'), + "QQuickRenderControl.sync": (), + + # class PySide2.QtQuick.QQuickTextDocument: + "QQuickTextDocument.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickTextDocument.textDocument": (), + + # class PySide2.QtQuick.QQuickTextureFactory: + "QQuickTextureFactory.__init__": (), + "QQuickTextureFactory.createTexture": ('PySide2.QtQuick.QQuickWindow',), + "QQuickTextureFactory.image": (), + "QQuickTextureFactory.textureByteCount": (), + "QQuickTextureFactory.textureFactoryForImage": ('PySide2.QtGui.QImage',), + "QQuickTextureFactory.textureSize": (), + + # class PySide2.QtQuick.QQuickTransform: + "QQuickTransform.__init__": ('PySide2.QtCore.QObject',), + "QQuickTransform.appendToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QQuickTransform.prependToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.update": (), + + # class PySide2.QtQuick.QQuickView: + "QQuickView.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtGui.QWindow'), ('PySide2.QtGui.QWindow',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtGui.QWindow')], + "QQuickView.engine": (), + "QQuickView.errors": (), + "QQuickView.initialSize": (), + "QQuickView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickView.resizeMode": (), + "QQuickView.rootContext": (), + "QQuickView.rootObject": (), + "QQuickView.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickView.setResizeMode": ('PySide2.QtQuick.QQuickView.ResizeMode',), + "QQuickView.setSource": ('PySide2.QtCore.QUrl',), + "QQuickView.sizeHint": (), + "QQuickView.source": (), + "QQuickView.status": (), + "QQuickView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtQuick.QQuickWindow: + "QQuickWindow.__init__": [('PySide2.QtGui.QWindow',), ('PySide2.QtQuick.QQuickRenderControl',)], + "QQuickWindow.accessibleRoot": (), + "QQuickWindow.activeFocusItem": (), + "QQuickWindow.clearBeforeRendering": (), + "QQuickWindow.color": (), + "QQuickWindow.contentItem": (), + "QQuickWindow.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'CreateTextureOptions'), + "QQuickWindow.createTextureFromImage": [('PySide2.QtGui.QImage',), ('PySide2.QtGui.QImage', 'CreateTextureOptions')], + "QQuickWindow.effectiveDevicePixelRatio": (), + "QQuickWindow.event": ('PySide2.QtCore.QEvent',), + "QQuickWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QQuickWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.focusObject": (), + "QQuickWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.grabWindow": (), + "QQuickWindow.hasDefaultAlphaBuffer": (), + "QQuickWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWindow.incubationController": (), + "QQuickWindow.isPersistentOpenGLContext": (), + "QQuickWindow.isPersistentSceneGraph": (), + "QQuickWindow.isSceneGraphInitialized": (), + "QQuickWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseGrabberItem": (), + "QQuickWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.openglContext": (), + "QQuickWindow.releaseResources": (), + "QQuickWindow.renderTarget": (), + "QQuickWindow.renderTargetId": (), + "QQuickWindow.renderTargetSize": (), + "QQuickWindow.resetOpenGLState": (), + "QQuickWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWindow.sceneGraphBackend": (), + "QQuickWindow.scheduleRenderJob": ('PySide2.QtCore.QRunnable', 'PySide2.QtQuick.QQuickWindow.RenderStage'), + "QQuickWindow.sendEvent": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickWindow.setClearBeforeRendering": ('bool',), + "QQuickWindow.setColor": ('PySide2.QtGui.QColor',), + "QQuickWindow.setDefaultAlphaBuffer": ('bool',), + "QQuickWindow.setPersistentOpenGLContext": ('bool',), + "QQuickWindow.setPersistentSceneGraph": ('bool',), + "QQuickWindow.setRenderTarget": [('PySide2.QtGui.QOpenGLFramebufferObject',), ('int', 'PySide2.QtCore.QSize')], + "QQuickWindow.setSceneGraphBackend": ('str',), + "QQuickWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWindow.update": (), + "QQuickWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtQuick.QSGAbstractRenderer: + "QSGAbstractRenderer.__init__": ('PySide2.QtCore.QObject',), + "QSGAbstractRenderer.clearColor": (), + "QSGAbstractRenderer.clearMode": (), + "QSGAbstractRenderer.deviceRect": (), + "QSGAbstractRenderer.nodeChanged": ('PySide2.QtQuick.QSGNode', 'DirtyState'), + "QSGAbstractRenderer.projectionMatrix": (), + "QSGAbstractRenderer.renderScene": ('int',), + "QSGAbstractRenderer.setClearColor": ('PySide2.QtGui.QColor',), + "QSGAbstractRenderer.setClearMode": ('ClearMode',), + "QSGAbstractRenderer.setDeviceRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.setProjectionMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGAbstractRenderer.setProjectionMatrixToRect": ('PySide2.QtCore.QRectF',), + "QSGAbstractRenderer.setViewportRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.viewportRect": (), + + # class PySide2.QtQuick.QSGBasicGeometryNode: + "QSGBasicGeometryNode.__init__": ('PySide2.QtQuick.QSGNode.NodeType',), + "QSGBasicGeometryNode.clipList": (), + "QSGBasicGeometryNode.geometry": (), + "QSGBasicGeometryNode.matrix": (), + "QSGBasicGeometryNode.setGeometry": ('PySide2.QtQuick.QSGGeometry',), + "QSGBasicGeometryNode.setRendererClipList": ('PySide2.QtQuick.QSGClipNode',), + "QSGBasicGeometryNode.setRendererMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSGClipNode: + "QSGClipNode.__init__": (), + "QSGClipNode.clipRect": (), + "QSGClipNode.isRectangular": (), + "QSGClipNode.setClipRect": ('PySide2.QtCore.QRectF',), + "QSGClipNode.setIsRectangular": ('bool',), + + # class PySide2.QtQuick.QSGDynamicTexture: + "QSGDynamicTexture.__init__": (), + "QSGDynamicTexture.updateTexture": (), + + # class PySide2.QtQuick.QSGEngine: + "QSGEngine.__init__": ('PySide2.QtCore.QObject',), + "QSGEngine.createRenderer": (), + "QSGEngine.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'CreateTextureOptions'), + "QSGEngine.createTextureFromImage": ('PySide2.QtGui.QImage', 'CreateTextureOptions'), + "QSGEngine.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QSGEngine.invalidate": (), + + # class PySide2.QtQuick.QSGGeometry: + "QSGGeometry.__init__": ('PySide2.QtQuick.QSGGeometry.AttributeSet', 'int', 'int', 'int'), + "QSGGeometry.allocate": ('int', 'int'), + "QSGGeometry.attributeCount": (), + "QSGGeometry.attributes": (), + "QSGGeometry.defaultAttributes_ColoredPoint2D": (), + "QSGGeometry.defaultAttributes_Point2D": (), + "QSGGeometry.defaultAttributes_TexturedPoint2D": (), + "QSGGeometry.drawingMode": (), + "QSGGeometry.indexCount": (), + "QSGGeometry.indexData": (), + "QSGGeometry.indexDataAsUInt": (), + "QSGGeometry.indexDataAsUShort": (), + "QSGGeometry.indexDataPattern": (), + "QSGGeometry.indexType": (), + "QSGGeometry.lineWidth": (), + "QSGGeometry.markIndexDataDirty": (), + "QSGGeometry.markVertexDataDirty": (), + "QSGGeometry.setDrawingMode": ('int',), + "QSGGeometry.setIndexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.setLineWidth": ('float',), + "QSGGeometry.setVertexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.sizeOfIndex": (), + "QSGGeometry.sizeOfVertex": (), + "QSGGeometry.updateColoredRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateTexturedRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QSGGeometry.vertexCount": (), + "QSGGeometry.vertexData": (), + "QSGGeometry.vertexDataAsColoredPoint2D": (), + "QSGGeometry.vertexDataAsPoint2D": (), + "QSGGeometry.vertexDataAsTexturedPoint2D": (), + "QSGGeometry.vertexDataPattern": (), + + # class PySide2.QtQuick.QSGGeometryNode: + "QSGGeometryNode.__init__": (), + "QSGGeometryNode.inheritedOpacity": (), + "QSGGeometryNode.renderOrder": (), + "QSGGeometryNode.setInheritedOpacity": ('float',), + "QSGGeometryNode.setRenderOrder": ('int',), + + # class PySide2.QtQuick.QSGMaterialType: + "QSGMaterialType.__init__": (), + + # class PySide2.QtQuick.QSGNode: + "QSGNode.__init__": [(), ('PySide2.QtQuick.QSGNode.NodeType',)], + "QSGNode.appendChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.childAtIndex": ('int',), + "QSGNode.childCount": (), + "QSGNode.clearDirty": (), + "QSGNode.dirtyState": (), + "QSGNode.firstChild": (), + "QSGNode.flags": (), + "QSGNode.insertChildNodeAfter": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.insertChildNodeBefore": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.isSubtreeBlocked": (), + "QSGNode.lastChild": (), + "QSGNode.markDirty": ('DirtyState',), + "QSGNode.nextSibling": (), + "QSGNode.parent": (), + "QSGNode.prependChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.preprocess": (), + "QSGNode.previousSibling": (), + "QSGNode.removeAllChildNodes": (), + "QSGNode.removeChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.reparentChildNodesTo": ('PySide2.QtQuick.QSGNode',), + "QSGNode.setFlag": ('PySide2.QtQuick.QSGNode.Flag', 'bool'), + "QSGNode.setFlags": ('Flags', 'bool'), + "QSGNode.type": (), + + # class PySide2.QtQuick.QSGOpacityNode: + "QSGOpacityNode.__init__": (), + "QSGOpacityNode.combinedOpacity": (), + "QSGOpacityNode.isSubtreeBlocked": (), + "QSGOpacityNode.opacity": (), + "QSGOpacityNode.setCombinedOpacity": ('float',), + "QSGOpacityNode.setOpacity": ('float',), + + # class PySide2.QtQuick.QSGSimpleRectNode: + "QSGSimpleRectNode.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor')], + "QSGSimpleRectNode.color": (), + "QSGSimpleRectNode.rect": (), + "QSGSimpleRectNode.setColor": ('PySide2.QtGui.QColor',), + "QSGSimpleRectNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + + # class PySide2.QtQuick.QSGSimpleTextureNode: + "QSGSimpleTextureNode.__init__": (), + "QSGSimpleTextureNode.filtering": (), + "QSGSimpleTextureNode.ownsTexture": (), + "QSGSimpleTextureNode.rect": (), + "QSGSimpleTextureNode.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGSimpleTextureNode.setOwnsTexture": ('bool',), + "QSGSimpleTextureNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setSourceRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setTexture": ('PySide2.QtQuick.QSGTexture',), + "QSGSimpleTextureNode.setTextureCoordinatesTransform": ('TextureCoordinatesTransformMode',), + "QSGSimpleTextureNode.sourceRect": (), + "QSGSimpleTextureNode.texture": (), + "QSGSimpleTextureNode.textureCoordinatesTransform": (), + + # class PySide2.QtQuick.QSGTexture: + "QSGTexture.__init__": (), + "QSGTexture.anisotropyLevel": (), + "QSGTexture.bind": (), + "QSGTexture.convertToNormalizedSourceRect": ('PySide2.QtCore.QRectF',), + "QSGTexture.filtering": (), + "QSGTexture.hasAlphaChannel": (), + "QSGTexture.hasMipmaps": (), + "QSGTexture.horizontalWrapMode": (), + "QSGTexture.isAtlasTexture": (), + "QSGTexture.mipmapFiltering": (), + "QSGTexture.normalizedTextureSubRect": (), + "QSGTexture.removedFromAtlas": (), + "QSGTexture.setAnisotropyLevel": ('PySide2.QtQuick.QSGTexture.AnisotropyLevel',), + "QSGTexture.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setHorizontalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.setMipmapFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setVerticalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.textureId": (), + "QSGTexture.textureSize": (), + "QSGTexture.updateBindOptions": ('bool',), + "QSGTexture.verticalWrapMode": (), + + # class PySide2.QtQuick.QSGTextureProvider: + "QSGTextureProvider.__init__": (), + "QSGTextureProvider.texture": (), + + # class PySide2.QtQuick.QSGTransformNode: + "QSGTransformNode.__init__": (), + "QSGTransformNode.combinedMatrix": (), + "QSGTransformNode.matrix": (), + "QSGTransformNode.setCombinedMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGTransformNode.setMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSharedPointer: + "QSharedPointer.__copy__": (), + "QSharedPointer.data": (), + }) + +# Module PySide2.QtQuickWidgets +if "PySide2.QtQuickWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtQuickWidgets.QQuickWidget: + "QQuickWidget.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QQuickWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickWidget.engine": (), + "QQuickWidget.errors": (), + "QQuickWidget.event": ('PySide2.QtCore.QEvent',), + "QQuickWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.format": (), + "QQuickWidget.grabFramebuffer": (), + "QQuickWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWidget.initialSize": (), + "QQuickWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QQuickWidget.quickWindow": (), + "QQuickWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWidget.resizeMode": (), + "QQuickWidget.rootContext": (), + "QQuickWidget.rootObject": (), + "QQuickWidget.setClearColor": ('PySide2.QtGui.QColor',), + "QQuickWidget.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QQuickWidget.setResizeMode": ('PySide2.QtQuickWidgets.QQuickWidget.ResizeMode',), + "QQuickWidget.setSource": ('PySide2.QtCore.QUrl',), + "QQuickWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWidget.sizeHint": (), + "QQuickWidget.source": (), + "QQuickWidget.status": (), + "QQuickWidget.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QQuickWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + }) + +# Module PySide2.QtTextToSpeech +if "PySide2.QtTextToSpeech" in sys.modules: + dict.update({ + + # class PySide2.QtTextToSpeech.QTextToSpeech: + "QTextToSpeech.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextToSpeech.availableEngines": (), + "QTextToSpeech.availableLocales": (), + "QTextToSpeech.availableVoices": (), + "QTextToSpeech.locale": (), + "QTextToSpeech.pause": (), + "QTextToSpeech.pitch": (), + "QTextToSpeech.rate": (), + "QTextToSpeech.resume": (), + "QTextToSpeech.say": ('str',), + "QTextToSpeech.setLocale": ('PySide2.QtCore.QLocale',), + "QTextToSpeech.setPitch": ('float',), + "QTextToSpeech.setRate": ('float',), + "QTextToSpeech.setVoice": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeech.setVolume": ('float',), + "QTextToSpeech.state": (), + "QTextToSpeech.stop": (), + "QTextToSpeech.voice": (), + "QTextToSpeech.volume": (), + + # class PySide2.QtTextToSpeech.QTextToSpeechEngine: + "QTextToSpeechEngine.__init__": ('PySide2.QtCore.QObject',), + "QTextToSpeechEngine.availableLocales": (), + "QTextToSpeechEngine.availableVoices": (), + "QTextToSpeechEngine.createVoice": ('str', 'PySide2.QtTextToSpeech.QVoice.Gender', 'PySide2.QtTextToSpeech.QVoice.Age', 'Any'), + "QTextToSpeechEngine.locale": (), + "QTextToSpeechEngine.pause": (), + "QTextToSpeechEngine.pitch": (), + "QTextToSpeechEngine.rate": (), + "QTextToSpeechEngine.resume": (), + "QTextToSpeechEngine.say": ('str',), + "QTextToSpeechEngine.setLocale": ('PySide2.QtCore.QLocale',), + "QTextToSpeechEngine.setPitch": ('float',), + "QTextToSpeechEngine.setRate": ('float',), + "QTextToSpeechEngine.setVoice": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeechEngine.setVolume": ('float',), + "QTextToSpeechEngine.state": (), + "QTextToSpeechEngine.stop": (), + "QTextToSpeechEngine.voice": (), + "QTextToSpeechEngine.voiceData": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeechEngine.volume": (), + + # class PySide2.QtTextToSpeech.QVoice: + "QVoice.__init__": [(), ('PySide2.QtTextToSpeech.QVoice',)], + "QVoice.__copy__": (), + "QVoice.age": (), + "QVoice.ageName": ('PySide2.QtTextToSpeech.QVoice.Age',), + "QVoice.gender": (), + "QVoice.genderName": ('PySide2.QtTextToSpeech.QVoice.Gender',), + "QVoice.name": (), + }) + +# Module PySide2.QtCharts +if "PySide2.QtCharts" in sys.modules: + dict.update({ + + # class PySide2.QtCharts.QtCharts: + }) + +# Module PySide2.QtSvg +if "PySide2.QtSvg" in sys.modules: + dict.update({ + + # class PySide2.QtSvg.QGraphicsSvgItem: + "QGraphicsSvgItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSvgItem.boundingRect": (), + "QGraphicsSvgItem.elementId": (), + "QGraphicsSvgItem.isCachingEnabled": (), + "QGraphicsSvgItem.maximumCacheSize": (), + "QGraphicsSvgItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSvgItem.renderer": (), + "QGraphicsSvgItem.setCachingEnabled": ('bool',), + "QGraphicsSvgItem.setElementId": ('str',), + "QGraphicsSvgItem.setMaximumCacheSize": ('PySide2.QtCore.QSize',), + "QGraphicsSvgItem.setSharedRenderer": ('PySide2.QtSvg.QSvgRenderer',), + "QGraphicsSvgItem.type": (), + + # class PySide2.QtSvg.QSvgGenerator: + "QSvgGenerator.__init__": (), + "QSvgGenerator.description": (), + "QSvgGenerator.fileName": (), + "QSvgGenerator.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QSvgGenerator.outputDevice": (), + "QSvgGenerator.paintEngine": (), + "QSvgGenerator.resolution": (), + "QSvgGenerator.setDescription": ('str',), + "QSvgGenerator.setFileName": ('str',), + "QSvgGenerator.setOutputDevice": ('PySide2.QtCore.QIODevice',), + "QSvgGenerator.setResolution": ('int',), + "QSvgGenerator.setSize": ('PySide2.QtCore.QSize',), + "QSvgGenerator.setTitle": ('str',), + "QSvgGenerator.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgGenerator.size": (), + "QSvgGenerator.title": (), + "QSvgGenerator.viewBox": (), + "QSvgGenerator.viewBoxF": (), + + # class PySide2.QtSvg.QSvgRenderer: + "QSvgRenderer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QXmlStreamReader', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QSvgRenderer.animated": (), + "QSvgRenderer.animationDuration": (), + "QSvgRenderer.boundsOnElement": ('str',), + "QSvgRenderer.currentFrame": (), + "QSvgRenderer.defaultSize": (), + "QSvgRenderer.elementExists": ('str',), + "QSvgRenderer.framesPerSecond": (), + "QSvgRenderer.isValid": (), + "QSvgRenderer.load": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QXmlStreamReader',), ('str',)], + "QSvgRenderer.matrixForElement": ('str',), + "QSvgRenderer.render": [('PySide2.QtGui.QPainter',), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), ('PySide2.QtGui.QPainter', 'str', 'PySide2.QtCore.QRectF')], + "QSvgRenderer.setCurrentFrame": ('int',), + "QSvgRenderer.setFramesPerSecond": ('int',), + "QSvgRenderer.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgRenderer.viewBox": (), + "QSvgRenderer.viewBoxF": (), + + # class PySide2.QtSvg.QSvgWidget: + "QSvgWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QSvgWidget.load": [('PySide2.QtCore.QByteArray',), ('str',)], + "QSvgWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSvgWidget.renderer": (), + "QSvgWidget.sizeHint": (), + }) + +# Module PySide2.QtDataVisualization +if "PySide2.QtDataVisualization" in sys.modules: + dict.update({ + + # class PySide2.QtDataVisualization.QtDataVisualization: + "QtDataVisualization.qDefaultSurfaceFormat": ('bool',), + }) + +# Module PySide2.QtUiTools +if "PySide2.QtUiTools" in sys.modules: + dict.update({ + + # class PySide2.QtUiTools.QUiLoader: + "QUiLoader.__init__": ('PySide2.QtCore.QObject',), + "QUiLoader.addPluginPath": ('str',), + "QUiLoader.availableLayouts": (), + "QUiLoader.availableWidgets": (), + "QUiLoader.clearPluginPaths": (), + "QUiLoader.createAction": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createActionGroup": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createLayout": ('str', 'PySide2.QtCore.QObject', 'str'), + "QUiLoader.createWidget": ('str', 'PySide2.QtWidgets.QWidget', 'str'), + "QUiLoader.errorString": (), + "QUiLoader.isLanguageChangeEnabled": (), + "QUiLoader.isTranslationEnabled": (), + "QUiLoader.load": [('PySide2.QtCore.QIODevice', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QWidget')], + "QUiLoader.pluginPaths": (), + "QUiLoader.registerCustomWidget": ('object',), + "QUiLoader.setLanguageChangeEnabled": ('bool',), + "QUiLoader.setTranslationEnabled": ('bool',), + "QUiLoader.setWorkingDirectory": ('PySide2.QtCore.QDir',), + "QUiLoader.workingDirectory": (), + }) + +# Module PySide2.QtWebChannel +if "PySide2.QtWebChannel" in sys.modules: + dict.update({ + + # class PySide2.QtWebChannel.QWebChannel: + "QWebChannel.__init__": ('PySide2.QtCore.QObject',), + "QWebChannel.blockUpdates": (), + "QWebChannel.connectTo": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.deregisterObject": ('PySide2.QtCore.QObject',), + "QWebChannel.disconnectFrom": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.registerObject": ('str', 'PySide2.QtCore.QObject'), + "QWebChannel.registerObjects": ('dict',), + "QWebChannel.registeredObjects": (), + "QWebChannel.setBlockUpdates": ('bool',), + + # class PySide2.QtWebChannel.QWebChannelAbstractTransport: + "QWebChannelAbstractTransport.__init__": ('PySide2.QtCore.QObject',), + "QWebChannelAbstractTransport.sendMessage": ('dict',), + }) + +# Module PySide2.QtWebEngineWidgets +if "PySide2.QtWebEngineWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWebEngineWidgets.QWebEngineCertificateError: + "QWebEngineCertificateError.__init__": ('int', 'PySide2.QtCore.QUrl', 'bool', 'str'), + "QWebEngineCertificateError.error": (), + "QWebEngineCertificateError.errorDescription": (), + "QWebEngineCertificateError.isOverridable": (), + "QWebEngineCertificateError.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineDownloadItem: + "QWebEngineDownloadItem.accept": (), + "QWebEngineDownloadItem.cancel": (), + "QWebEngineDownloadItem.id": (), + "QWebEngineDownloadItem.interruptReasonString": (), + "QWebEngineDownloadItem.isFinished": (), + "QWebEngineDownloadItem.mimeType": (), + "QWebEngineDownloadItem.path": (), + "QWebEngineDownloadItem.receivedBytes": (), + "QWebEngineDownloadItem.setPath": ('str',), + "QWebEngineDownloadItem.state": (), + "QWebEngineDownloadItem.totalBytes": (), + "QWebEngineDownloadItem.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineHistoryItem: + "QWebEngineHistoryItem.__init__": ('PySide2.QtWebEngineWidgets.QWebEngineHistoryItem',), + "QWebEngineHistoryItem.iconUrl": (), + "QWebEngineHistoryItem.isValid": (), + "QWebEngineHistoryItem.lastVisited": (), + "QWebEngineHistoryItem.originalUrl": (), + "QWebEngineHistoryItem.swap": ('PySide2.QtWebEngineWidgets.QWebEngineHistoryItem',), + "QWebEngineHistoryItem.title": (), + "QWebEngineHistoryItem.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEnginePage: + "QWebEnginePage.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtWebEngineWidgets.QWebEngineProfile', 'PySide2.QtCore.QObject')], + "QWebEnginePage.acceptNavigationRequest": ('PySide2.QtCore.QUrl', 'PySide2.QtWebEngineWidgets.QWebEnginePage.NavigationType', 'bool'), + "QWebEnginePage.action": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction',), + "QWebEnginePage.backgroundColor": (), + "QWebEnginePage.certificateError": ('PySide2.QtWebEngineWidgets.QWebEngineCertificateError',), + "QWebEnginePage.chooseFiles": ('PySide2.QtWebEngineWidgets.QWebEnginePage.FileSelectionMode', 'List[str]', 'List[str]'), + "QWebEnginePage.contentsSize": (), + "QWebEnginePage.createStandardContextMenu": (), + "QWebEnginePage.createWindow": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebWindowType',), + "QWebEnginePage.event": ('PySide2.QtCore.QEvent',), + "QWebEnginePage.hasSelection": (), + "QWebEnginePage.icon": (), + "QWebEnginePage.iconUrl": (), + "QWebEnginePage.isAudioMuted": (), + "QWebEnginePage.javaScriptAlert": ('PySide2.QtCore.QUrl', 'str'), + "QWebEnginePage.javaScriptConfirm": ('PySide2.QtCore.QUrl', 'str'), + "QWebEnginePage.javaScriptConsoleMessage": ('PySide2.QtWebEngineWidgets.QWebEnginePage.JavaScriptConsoleMessageLevel', 'str', 'int', 'str'), + "QWebEnginePage.javaScriptPrompt": ('PySide2.QtCore.QUrl', 'str', 'str', 'str'), + "QWebEnginePage.load": ('PySide2.QtCore.QUrl',), + "QWebEnginePage.printToPdf": ('str', 'PySide2.QtGui.QPageLayout'), + "QWebEnginePage.profile": (), + "QWebEnginePage.recentlyAudible": (), + "QWebEnginePage.replaceMisspelledWord": ('str',), + "QWebEnginePage.requestedUrl": (), + "QWebEnginePage.runJavaScript": [('str',), ('str', 'int')], + "QWebEnginePage.scrollPosition": (), + "QWebEnginePage.selectedText": (), + "QWebEnginePage.setAudioMuted": ('bool',), + "QWebEnginePage.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QWebEnginePage.setContent": ('PySide2.QtCore.QByteArray', 'str', 'PySide2.QtCore.QUrl'), + "QWebEnginePage.setFeaturePermission": ('PySide2.QtCore.QUrl', 'PySide2.QtWebEngineWidgets.QWebEnginePage.Feature', 'PySide2.QtWebEngineWidgets.QWebEnginePage.PermissionPolicy'), + "QWebEnginePage.setHtml": ('str', 'PySide2.QtCore.QUrl'), + "QWebEnginePage.setUrl": ('PySide2.QtCore.QUrl',), + "QWebEnginePage.setView": ('PySide2.QtWidgets.QWidget',), + "QWebEnginePage.setWebChannel": [('PySide2.QtWebChannel.QWebChannel',), ('PySide2.QtWebChannel.QWebChannel', 'int')], + "QWebEnginePage.setZoomFactor": ('float',), + "QWebEnginePage.title": (), + "QWebEnginePage.triggerAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction', 'bool'), + "QWebEnginePage.url": (), + "QWebEnginePage.view": (), + "QWebEnginePage.webChannel": (), + "QWebEnginePage.zoomFactor": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineProfile: + "QWebEngineProfile.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QWebEngineProfile.cachePath": (), + "QWebEngineProfile.clearAllVisitedLinks": (), + "QWebEngineProfile.clearHttpCache": (), + "QWebEngineProfile.clearVisitedLinks": ('list',), + "QWebEngineProfile.defaultProfile": (), + "QWebEngineProfile.httpAcceptLanguage": (), + "QWebEngineProfile.httpCacheMaximumSize": (), + "QWebEngineProfile.httpCacheType": (), + "QWebEngineProfile.httpUserAgent": (), + "QWebEngineProfile.isOffTheRecord": (), + "QWebEngineProfile.isSpellCheckEnabled": (), + "QWebEngineProfile.persistentCookiesPolicy": (), + "QWebEngineProfile.persistentStoragePath": (), + "QWebEngineProfile.removeAllUrlSchemeHandlers": (), + "QWebEngineProfile.removeUrlScheme": ('PySide2.QtCore.QByteArray',), + "QWebEngineProfile.setCachePath": ('str',), + "QWebEngineProfile.setHttpAcceptLanguage": ('str',), + "QWebEngineProfile.setHttpCacheMaximumSize": ('int',), + "QWebEngineProfile.setHttpCacheType": ('PySide2.QtWebEngineWidgets.QWebEngineProfile.HttpCacheType',), + "QWebEngineProfile.setHttpUserAgent": ('str',), + "QWebEngineProfile.setPersistentCookiesPolicy": ('PySide2.QtWebEngineWidgets.QWebEngineProfile.PersistentCookiesPolicy',), + "QWebEngineProfile.setPersistentStoragePath": ('str',), + "QWebEngineProfile.setSpellCheckEnabled": ('bool',), + "QWebEngineProfile.setSpellCheckLanguages": ('List[str]',), + "QWebEngineProfile.spellCheckLanguages": (), + "QWebEngineProfile.storageName": (), + "QWebEngineProfile.visitedLinksContainsUrl": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtWebEngineWidgets.QWebEngineScript: + "QWebEngineScript.__init__": [(), ('PySide2.QtWebEngineWidgets.QWebEngineScript',)], + "QWebEngineScript.__copy__": (), + "QWebEngineScript.injectionPoint": (), + "QWebEngineScript.isNull": (), + "QWebEngineScript.name": (), + "QWebEngineScript.runsOnSubFrames": (), + "QWebEngineScript.setInjectionPoint": ('PySide2.QtWebEngineWidgets.QWebEngineScript.InjectionPoint',), + "QWebEngineScript.setName": ('str',), + "QWebEngineScript.setRunsOnSubFrames": ('bool',), + "QWebEngineScript.setSourceCode": ('str',), + "QWebEngineScript.setWorldId": ('int',), + "QWebEngineScript.sourceCode": (), + "QWebEngineScript.swap": ('PySide2.QtWebEngineWidgets.QWebEngineScript',), + "QWebEngineScript.worldId": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineView: + "QWebEngineView.__init__": ('PySide2.QtWidgets.QWidget',), + "QWebEngineView.back": (), + "QWebEngineView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWebEngineView.createWindow": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebWindowType',), + "QWebEngineView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWebEngineView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWebEngineView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWebEngineView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWebEngineView.event": ('PySide2.QtCore.QEvent',), + "QWebEngineView.forward": (), + "QWebEngineView.hasSelection": (), + "QWebEngineView.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWebEngineView.icon": (), + "QWebEngineView.iconUrl": (), + "QWebEngineView.load": ('PySide2.QtCore.QUrl',), + "QWebEngineView.page": (), + "QWebEngineView.pageAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction',), + "QWebEngineView.reload": (), + "QWebEngineView.selectedText": (), + "QWebEngineView.setContent": ('PySide2.QtCore.QByteArray', 'str', 'PySide2.QtCore.QUrl'), + "QWebEngineView.setHtml": ('str', 'PySide2.QtCore.QUrl'), + "QWebEngineView.setPage": ('PySide2.QtWebEngineWidgets.QWebEnginePage',), + "QWebEngineView.setUrl": ('PySide2.QtCore.QUrl',), + "QWebEngineView.setZoomFactor": ('float',), + "QWebEngineView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWebEngineView.sizeHint": (), + "QWebEngineView.stop": (), + "QWebEngineView.title": (), + "QWebEngineView.triggerPageAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction', 'bool'), + "QWebEngineView.url": (), + "QWebEngineView.zoomFactor": (), + }) + +# Module PySide2.QtWebSockets +if "PySide2.QtWebSockets" in sys.modules: + dict.update({ + + # class PySide2.QtWebSockets.QMaskGenerator: + "QMaskGenerator.__init__": ('PySide2.QtCore.QObject',), + "QMaskGenerator.nextMask": (), + "QMaskGenerator.seed": (), + + # class PySide2.QtWebSockets.QWebSocket: + "QWebSocket.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketProtocol.Version', 'PySide2.QtCore.QObject'), + "QWebSocket.abort": (), + "QWebSocket.close": ('PySide2.QtWebSockets.QWebSocketProtocol.CloseCode', 'str'), + "QWebSocket.closeCode": (), + "QWebSocket.closeReason": (), + "QWebSocket.errorString": (), + "QWebSocket.flush": (), + "QWebSocket.isValid": (), + "QWebSocket.localAddress": (), + "QWebSocket.localPort": (), + "QWebSocket.maskGenerator": (), + "QWebSocket.open": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QWebSocket.origin": (), + "QWebSocket.pauseMode": (), + "QWebSocket.peerAddress": (), + "QWebSocket.peerName": (), + "QWebSocket.peerPort": (), + "QWebSocket.ping": ('PySide2.QtCore.QByteArray',), + "QWebSocket.proxy": (), + "QWebSocket.readBufferSize": (), + "QWebSocket.request": (), + "QWebSocket.requestUrl": (), + "QWebSocket.resourceName": (), + "QWebSocket.resume": (), + "QWebSocket.sendBinaryMessage": ('PySide2.QtCore.QByteArray',), + "QWebSocket.sendTextMessage": ('str',), + "QWebSocket.setMaskGenerator": ('PySide2.QtWebSockets.QMaskGenerator',), + "QWebSocket.setPauseMode": ('PauseModes',), + "QWebSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocket.setReadBufferSize": ('int',), + "QWebSocket.state": (), + "QWebSocket.version": (), + + # class PySide2.QtWebSockets.QWebSocketCorsAuthenticator: + "QWebSocketCorsAuthenticator.__init__": [('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), ('str',)], + "QWebSocketCorsAuthenticator.allowed": (), + "QWebSocketCorsAuthenticator.origin": (), + "QWebSocketCorsAuthenticator.setAllowed": ('bool',), + "QWebSocketCorsAuthenticator.swap": ('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), + + # class PySide2.QtWebSockets.QWebSocketProtocol: + + # class PySide2.QtWebSockets.QWebSocketServer: + "QWebSocketServer.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketServer.SslMode', 'PySide2.QtCore.QObject'), + "QWebSocketServer.close": (), + "QWebSocketServer.error": (), + "QWebSocketServer.errorString": (), + "QWebSocketServer.handleConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QWebSocketServer.hasPendingConnections": (), + "QWebSocketServer.isListening": (), + "QWebSocketServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QWebSocketServer.maxPendingConnections": (), + "QWebSocketServer.nextPendingConnection": (), + "QWebSocketServer.pauseAccepting": (), + "QWebSocketServer.proxy": (), + "QWebSocketServer.resumeAccepting": (), + "QWebSocketServer.secureMode": (), + "QWebSocketServer.serverAddress": (), + "QWebSocketServer.serverName": (), + "QWebSocketServer.serverPort": (), + "QWebSocketServer.serverUrl": (), + "QWebSocketServer.setMaxPendingConnections": ('int',), + "QWebSocketServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocketServer.setServerName": ('str',), + "QWebSocketServer.setSocketDescriptor": ('int',), + "QWebSocketServer.socketDescriptor": (), + "QWebSocketServer.supportedVersions": (), + }) +# eof diff --git a/sources/pyside2/tests/registry/exists_linux_5_11_1_ci.py b/sources/pyside2/tests/registry/exists_linux_5_11_1_ci.py new file mode 100644 index 0000000..95c4576 --- /dev/null +++ b/sources/pyside2/tests/registry/exists_linux_5_11_1_ci.py @@ -0,0 +1,18408 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" +This file contains the simplified signatures for all functions in PySide +for module 'exists_linux_5_11_1_ci'. There are no default values, no variable +names and no self parameter. Only types are present after simplification. +The functions 'next' resp. '__next__' are removed +to make the output identical for Python 2 and 3. +""" + +import sys + +dict = {} + +# Module PySide2.QtCore +if "PySide2.QtCore" in sys.modules: + dict.update({ + + # class PySide2.QtCore.ClassInfo: + + # class PySide2.QtCore.MetaFunction: + + # class PySide2.QtCore.Property: + + # class PySide2.QtCore.QAbstractAnimation: + "QAbstractAnimation.__init__": ('PySide2.QtCore.QObject',), + "QAbstractAnimation.currentLoop": (), + "QAbstractAnimation.currentLoopTime": (), + "QAbstractAnimation.currentTime": (), + "QAbstractAnimation.direction": (), + "QAbstractAnimation.duration": (), + "QAbstractAnimation.event": ('PySide2.QtCore.QEvent',), + "QAbstractAnimation.group": (), + "QAbstractAnimation.loopCount": (), + "QAbstractAnimation.pause": (), + "QAbstractAnimation.resume": (), + "QAbstractAnimation.setCurrentTime": ('int',), + "QAbstractAnimation.setDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.setLoopCount": ('int',), + "QAbstractAnimation.setPaused": ('bool',), + "QAbstractAnimation.start": ('PySide2.QtCore.QAbstractAnimation.DeletionPolicy',), + "QAbstractAnimation.state": (), + "QAbstractAnimation.stop": (), + "QAbstractAnimation.totalDuration": (), + "QAbstractAnimation.updateCurrentTime": ('int',), + "QAbstractAnimation.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QAbstractEventDispatcher: + "QAbstractEventDispatcher.__init__": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.closingDown": (), + "QAbstractEventDispatcher.flush": (), + "QAbstractEventDispatcher.hasPendingEvents": (), + "QAbstractEventDispatcher.instance": ('PySide2.QtCore.QThread',), + "QAbstractEventDispatcher.interrupt": (), + "QAbstractEventDispatcher.processEvents": ('PySide2.libpyside.ProcessEventsFlags',), + "QAbstractEventDispatcher.registerSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.registerTimer": [('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject'), ('int', 'int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QAbstractEventDispatcher.registeredTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.remainingTime": ('int',), + "QAbstractEventDispatcher.startingUp": (), + "QAbstractEventDispatcher.unregisterSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.unregisterTimer": ('int',), + "QAbstractEventDispatcher.unregisterTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.wakeUp": (), + + # class PySide2.QtCore.QAbstractItemModel: + "QAbstractItemModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginMoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginMoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginResetModel": (), + "QAbstractItemModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.changePersistentIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.changePersistentIndexList": ('List[int]', 'List[int]'), + "QAbstractItemModel.checkIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.libpyside.CheckIndexOptions'), + "QAbstractItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object')], + "QAbstractItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.decodeData": ('int', 'int', 'PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.encodeData": ('List[int]', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.endInsertColumns": (), + "QAbstractItemModel.endInsertRows": (), + "QAbstractItemModel.endMoveColumns": (), + "QAbstractItemModel.endMoveRows": (), + "QAbstractItemModel.endRemoveColumns": (), + "QAbstractItemModel.endRemoveRows": (), + "QAbstractItemModel.endResetModel": (), + "QAbstractItemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasIndex": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'PySide2.libpyside.MatchFlags'), + "QAbstractItemModel.mimeData": ('List[int]',), + "QAbstractItemModel.mimeTypes": (), + "QAbstractItemModel.moveColumn": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRow": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemModel.persistentIndexList": (), + "QAbstractItemModel.removeColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.resetInternalData": (), + "QAbstractItemModel.revert": (), + "QAbstractItemModel.roleNames": (), + "QAbstractItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QAbstractItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QAbstractItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractItemModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.submit": (), + "QAbstractItemModel.supportedDragActions": (), + "QAbstractItemModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractListModel: + "QAbstractListModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractListModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractProxyModel: + "QAbstractProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractProxyModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mimeData": ('List[int]',), + "QAbstractProxyModel.mimeTypes": (), + "QAbstractProxyModel.resetInternalData": (), + "QAbstractProxyModel.revert": (), + "QAbstractProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QAbstractProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QAbstractProxyModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractProxyModel.sourceModel": (), + "QAbstractProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.submit": (), + "QAbstractProxyModel.supportedDragActions": (), + "QAbstractProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractState: + "QAbstractState.__init__": ('PySide2.QtCore.QState',), + "QAbstractState.active": (), + "QAbstractState.event": ('PySide2.QtCore.QEvent',), + "QAbstractState.machine": (), + "QAbstractState.onEntry": ('PySide2.QtCore.QEvent',), + "QAbstractState.onExit": ('PySide2.QtCore.QEvent',), + "QAbstractState.parentState": (), + + # class PySide2.QtCore.QAbstractTableModel: + "QAbstractTableModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractTableModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractTableModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractTransition: + "QAbstractTransition.__init__": ('PySide2.QtCore.QState',), + "QAbstractTransition.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.animations": (), + "QAbstractTransition.event": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.machine": (), + "QAbstractTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.setTargetState": ('PySide2.QtCore.QAbstractState',), + "QAbstractTransition.setTargetStates": ('list',), + "QAbstractTransition.setTransitionType": ('PySide2.QtCore.QAbstractTransition.TransitionType',), + "QAbstractTransition.sourceState": (), + "QAbstractTransition.targetState": (), + "QAbstractTransition.targetStates": (), + "QAbstractTransition.transitionType": (), + + # class PySide2.QtCore.QAnimationGroup: + "QAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QAnimationGroup.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.animationAt": ('int',), + "QAnimationGroup.animationCount": (), + "QAnimationGroup.clear": (), + "QAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QAnimationGroup.indexOfAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.insertAnimation": ('int', 'PySide2.QtCore.QAbstractAnimation'), + "QAnimationGroup.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.takeAnimation": ('int',), + + # class PySide2.QtCore.QBasicMutex: + "QBasicMutex.__init__": (), + "QBasicMutex.isRecursive": (), + "QBasicMutex.lock": (), + "QBasicMutex.tryLock": (), + "QBasicMutex.try_lock": (), + "QBasicMutex.unlock": (), + + # class PySide2.QtCore.QBasicTimer: + "QBasicTimer.__init__": [(), ('PySide2.QtCore.QBasicTimer',)], + "QBasicTimer.__copy__": (), + "QBasicTimer.isActive": (), + "QBasicTimer.start": [('int', 'PySide2.QtCore.QObject'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QBasicTimer.stop": (), + "QBasicTimer.timerId": (), + + # class PySide2.QtCore.QBitArray: + "QBitArray.__init__": [(), ('PySide2.QtCore.QBitArray',), ('int', 'bool')], + "QBitArray.__copy__": (), + "QBitArray.at": ('int',), + "QBitArray.bits": (), + "QBitArray.clear": (), + "QBitArray.clearBit": ('int',), + "QBitArray.count": [(), ('bool',)], + "QBitArray.fill": [('bool', 'int'), ('bool', 'int', 'int')], + "QBitArray.isEmpty": (), + "QBitArray.isNull": (), + "QBitArray.resize": ('int',), + "QBitArray.setBit": [('int',), ('int', 'bool')], + "QBitArray.size": (), + "QBitArray.swap": ('PySide2.QtCore.QBitArray',), + "QBitArray.testBit": ('int',), + "QBitArray.toggleBit": ('int',), + "QBitArray.truncate": ('int',), + + # class PySide2.QtCore.QBuffer: + "QBuffer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QBuffer.atEnd": (), + "QBuffer.buffer": (), + "QBuffer.canReadLine": (), + "QBuffer.close": (), + "QBuffer.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.data": (), + "QBuffer.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.open": ('PySide2.libpyside.OpenMode',), + "QBuffer.pos": (), + "QBuffer.readData": ('str', 'int'), + "QBuffer.seek": ('int',), + "QBuffer.setBuffer": ('PySide2.QtCore.QByteArray',), + "QBuffer.setData": ('PySide2.QtCore.QByteArray',), + "QBuffer.size": (), + "QBuffer.writeData": ('str', 'int'), + + # class PySide2.QtCore.QByteArray: + "QByteArray.__init__": [(), ('PySide2.QtCore.QByteArray',), ('bytearray',), ('int', 'Union[str, int]'), ('str',)], + "QByteArray.__copy__": (), + "QByteArray.__reduce__": (), + "QByteArray.append": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',), ('int', 'Union[str, int]')], + "QByteArray.at": ('int',), + "QByteArray.back": (), + "QByteArray.capacity": (), + "QByteArray.cbegin": (), + "QByteArray.cend": (), + "QByteArray.chop": ('int',), + "QByteArray.chopped": ('int',), + "QByteArray.clear": (), + "QByteArray.contains": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.count": [(), ('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.data": (), + "QByteArray.endsWith": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.fill": ('Union[str, int]', 'int'), + "QByteArray.fromBase64": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.libpyside.Base64Options')], + "QByteArray.fromHex": ('PySide2.QtCore.QByteArray',), + "QByteArray.fromPercentEncoding": ('PySide2.QtCore.QByteArray', 'Union[str, int]'), + "QByteArray.fromRawData": ('str', 'int'), + "QByteArray.front": (), + "QByteArray.indexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.insert": [('int', 'PySide2.QtCore.QByteArray'), ('int', 'int', 'Union[str, int]')], + "QByteArray.isEmpty": (), + "QByteArray.isNull": (), + "QByteArray.isSharedWith": ('PySide2.QtCore.QByteArray',), + "QByteArray.lastIndexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.left": ('int',), + "QByteArray.leftJustified": ('int', 'Union[str, int]', 'bool'), + "QByteArray.length": (), + "QByteArray.mid": ('int', 'int'), + "QByteArray.number": [('float', 'Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.prepend": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',), ('int', 'Union[str, int]')], + "QByteArray.remove": ('int', 'int'), + "QByteArray.repeated": ('int',), + "QByteArray.replace": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('Union[str, int]', 'PySide2.QtCore.QByteArray'), ('Union[str, int]', 'Union[str, int]'), ('int', 'int', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QByteArray.reserve": ('int',), + "QByteArray.resize": ('int',), + "QByteArray.right": ('int',), + "QByteArray.rightJustified": ('int', 'Union[str, int]', 'bool'), + "QByteArray.setNum": [('float', 'Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.setRawData": ('str', 'int'), + "QByteArray.shrink_to_fit": (), + "QByteArray.simplified": (), + "QByteArray.size": (), + "QByteArray.split": ('Union[str, int]',), + "QByteArray.squeeze": (), + "QByteArray.startsWith": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.swap": ('PySide2.QtCore.QByteArray',), + "QByteArray.toBase64": [(), ('PySide2.libpyside.Base64Options',)], + "QByteArray.toDouble": ('bool',), + "QByteArray.toFloat": ('bool',), + "QByteArray.toHex": [(), ('Union[str, int]',)], + "QByteArray.toInt": ('bool', 'int'), + "QByteArray.toLong": ('bool', 'int'), + "QByteArray.toLongLong": ('bool', 'int'), + "QByteArray.toLower": (), + "QByteArray.toPercentEncoding": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'Union[str, int]'), + "QByteArray.toShort": ('bool', 'int'), + "QByteArray.toUInt": ('bool', 'int'), + "QByteArray.toULong": ('bool', 'int'), + "QByteArray.toULongLong": ('bool', 'int'), + "QByteArray.toUShort": ('bool', 'int'), + "QByteArray.toUpper": (), + "QByteArray.trimmed": (), + "QByteArray.truncate": ('int',), + + # class PySide2.QtCore.QByteArrayMatcher: + "QByteArrayMatcher.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArrayMatcher',), ('str', 'int')], + "QByteArrayMatcher.__copy__": (), + "QByteArrayMatcher.indexIn": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int', 'int')], + "QByteArrayMatcher.pattern": (), + "QByteArrayMatcher.setPattern": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QChildEvent: + "QChildEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QObject'), + "QChildEvent.added": (), + "QChildEvent.child": (), + "QChildEvent.polished": (), + "QChildEvent.removed": (), + + # class PySide2.QtCore.QCollator: + "QCollator.__init__": [('PySide2.QtCore.QCollator',), ('PySide2.QtCore.QLocale',)], + "QCollator.caseSensitivity": (), + "QCollator.compare": [('Union[str, int]', 'int', 'Union[str, int]', 'int'), ('str', 'str')], + "QCollator.ignorePunctuation": (), + "QCollator.locale": (), + "QCollator.numericMode": (), + "QCollator.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCollator.setIgnorePunctuation": ('bool',), + "QCollator.setLocale": ('PySide2.QtCore.QLocale',), + "QCollator.setNumericMode": ('bool',), + "QCollator.sortKey": ('str',), + "QCollator.swap": ('PySide2.QtCore.QCollator',), + + # class PySide2.QtCore.QCollatorSortKey: + "QCollatorSortKey.__init__": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.compare": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.swap": ('PySide2.QtCore.QCollatorSortKey',), + + # class PySide2.QtCore.QCommandLineOption: + "QCommandLineOption.__init__": [('List[str]',), ('List[str]', 'str', 'str', 'str'), ('PySide2.QtCore.QCommandLineOption',), ('str',), ('str', 'str', 'str', 'str')], + "QCommandLineOption.defaultValues": (), + "QCommandLineOption.description": (), + "QCommandLineOption.flags": (), + "QCommandLineOption.isHidden": (), + "QCommandLineOption.names": (), + "QCommandLineOption.setDefaultValue": ('str',), + "QCommandLineOption.setDefaultValues": ('List[str]',), + "QCommandLineOption.setDescription": ('str',), + "QCommandLineOption.setFlags": ('PySide2.libpyside.Flags',), + "QCommandLineOption.setHidden": ('bool',), + "QCommandLineOption.setValueName": ('str',), + "QCommandLineOption.swap": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineOption.valueName": (), + + # class PySide2.QtCore.QCommandLineParser: + "QCommandLineParser.__init__": (), + "QCommandLineParser.addHelpOption": (), + "QCommandLineParser.addOption": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineParser.addOptions": ('list',), + "QCommandLineParser.addPositionalArgument": ('str', 'str', 'str'), + "QCommandLineParser.addVersionOption": (), + "QCommandLineParser.applicationDescription": (), + "QCommandLineParser.clearPositionalArguments": (), + "QCommandLineParser.errorText": (), + "QCommandLineParser.helpText": (), + "QCommandLineParser.isSet": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.optionNames": (), + "QCommandLineParser.parse": ('List[str]',), + "QCommandLineParser.positionalArguments": (), + "QCommandLineParser.process": [('List[str]',), ('PySide2.QtCore.QCoreApplication',)], + "QCommandLineParser.setApplicationDescription": ('str',), + "QCommandLineParser.setOptionsAfterPositionalArgumentsMode": ('PySide2.QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode',), + "QCommandLineParser.setSingleDashWordOptionMode": ('PySide2.QtCore.QCommandLineParser.SingleDashWordOptionMode',), + "QCommandLineParser.showHelp": ('int',), + "QCommandLineParser.showVersion": (), + "QCommandLineParser.unknownOptionNames": (), + "QCommandLineParser.value": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.values": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + + # class PySide2.QtCore.QCoreApplication: + "QCoreApplication.__init__": [(), ('List[str]',)], + "QCoreApplication.addLibraryPath": ('str',), + "QCoreApplication.applicationDirPath": (), + "QCoreApplication.applicationFilePath": (), + "QCoreApplication.applicationName": (), + "QCoreApplication.applicationPid": (), + "QCoreApplication.applicationVersion": (), + "QCoreApplication.arguments": (), + "QCoreApplication.closingDown": (), + "QCoreApplication.event": ('PySide2.QtCore.QEvent',), + "QCoreApplication.eventDispatcher": (), + "QCoreApplication.exec_": (), + "QCoreApplication.exit": ('int',), + "QCoreApplication.flush": (), + "QCoreApplication.hasPendingEvents": (), + "QCoreApplication.installTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.instance": (), + "QCoreApplication.isQuitLockEnabled": (), + "QCoreApplication.isSetuidAllowed": (), + "QCoreApplication.libraryPaths": (), + "QCoreApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.organizationDomain": (), + "QCoreApplication.organizationName": (), + "QCoreApplication.postEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent', 'int'), + "QCoreApplication.processEvents": [('PySide2.libpyside.ProcessEventsFlags',), ('PySide2.libpyside.ProcessEventsFlags', 'int')], + "QCoreApplication.quit": (), + "QCoreApplication.removeLibraryPath": ('str',), + "QCoreApplication.removePostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.removeTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.sendEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.sendPostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.setApplicationName": ('str',), + "QCoreApplication.setApplicationVersion": ('str',), + "QCoreApplication.setAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute', 'bool'), + "QCoreApplication.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QCoreApplication.setLibraryPaths": ('List[str]',), + "QCoreApplication.setOrganizationDomain": ('str',), + "QCoreApplication.setOrganizationName": ('str',), + "QCoreApplication.setQuitLockEnabled": ('bool',), + "QCoreApplication.setSetuidAllowed": ('bool',), + "QCoreApplication.startingUp": (), + "QCoreApplication.testAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute',), + "QCoreApplication.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QCryptographicHash: + "QCryptographicHash.__init__": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QCryptographicHash.addData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str', 'int')], + "QCryptographicHash.hash": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QCryptographicHash.Algorithm'), + "QCryptographicHash.reset": (), + "QCryptographicHash.result": (), + + # class PySide2.QtCore.QDataStream: + "QDataStream.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.libpyside.OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QDataStream.abortTransaction": (), + "QDataStream.atEnd": (), + "QDataStream.byteOrder": (), + "QDataStream.commitTransaction": (), + "QDataStream.device": (), + "QDataStream.floatingPointPrecision": (), + "QDataStream.readBool": (), + "QDataStream.readDouble": (), + "QDataStream.readFloat": (), + "QDataStream.readInt16": (), + "QDataStream.readInt32": (), + "QDataStream.readInt64": (), + "QDataStream.readInt8": (), + "QDataStream.readQChar": (), + "QDataStream.readQString": (), + "QDataStream.readQStringList": (), + "QDataStream.readQVariant": (), + "QDataStream.readRawData": ('str', 'int'), + "QDataStream.readString": (), + "QDataStream.readUInt16": (), + "QDataStream.readUInt32": (), + "QDataStream.readUInt64": (), + "QDataStream.readUInt8": (), + "QDataStream.resetStatus": (), + "QDataStream.rollbackTransaction": (), + "QDataStream.setByteOrder": ('PySide2.QtCore.QDataStream.ByteOrder',), + "QDataStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QDataStream.setFloatingPointPrecision": ('PySide2.QtCore.QDataStream.FloatingPointPrecision',), + "QDataStream.setStatus": ('PySide2.QtCore.QDataStream.Status',), + "QDataStream.setVersion": ('int',), + "QDataStream.skipRawData": ('int',), + "QDataStream.startTransaction": (), + "QDataStream.status": (), + "QDataStream.unsetDevice": (), + "QDataStream.version": (), + "QDataStream.writeBool": ('bool',), + "QDataStream.writeDouble": ('float',), + "QDataStream.writeFloat": ('float',), + "QDataStream.writeInt16": ('int',), + "QDataStream.writeInt32": ('int',), + "QDataStream.writeInt64": ('int',), + "QDataStream.writeInt8": ('Union[str, int]',), + "QDataStream.writeQChar": ('Union[str, int]',), + "QDataStream.writeQString": ('str',), + "QDataStream.writeQStringList": ('List[str]',), + "QDataStream.writeQVariant": ('Any',), + "QDataStream.writeRawData": ('str', 'int'), + "QDataStream.writeString": ('str',), + "QDataStream.writeUInt16": ('int',), + "QDataStream.writeUInt32": ('int',), + "QDataStream.writeUInt64": ('int',), + "QDataStream.writeUInt8": ('Union[str, int]',), + + # class PySide2.QtCore.QDate: + "QDate.__init__": [(), ('PySide2.QtCore.QDate',), ('int', 'int', 'int')], + "QDate.__copy__": (), + "QDate.__reduce__": (), + "QDate.addDays": ('int',), + "QDate.addMonths": ('int',), + "QDate.addYears": ('int',), + "QDate.currentDate": (), + "QDate.day": (), + "QDate.dayOfWeek": (), + "QDate.dayOfYear": (), + "QDate.daysInMonth": (), + "QDate.daysInYear": (), + "QDate.daysTo": ('PySide2.QtCore.QDate',), + "QDate.fromJulianDay": ('int',), + "QDate.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDate.getDate": ('int', 'int', 'int'), + "QDate.isLeapYear": ('int',), + "QDate.isNull": (), + "QDate.isValid": [(), ('int', 'int', 'int')], + "QDate.longDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.longMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.month": (), + "QDate.setDate": ('int', 'int', 'int'), + "QDate.shortDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.shortMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.toJulianDay": (), + "QDate.toPython": (), + "QDate.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDate.weekNumber": ('int',), + "QDate.year": (), + + # class PySide2.QtCore.QDateTime: + "QDateTime.__init__": [(), ('PySide2.QtCore.QDate',), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.QTimeZone'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec', 'int'), ('PySide2.QtCore.QDateTime',), ('int', 'int', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int')], + "QDateTime.__copy__": (), + "QDateTime.__reduce__": (), + "QDateTime.addDays": ('int',), + "QDateTime.addMSecs": ('int',), + "QDateTime.addMonths": ('int',), + "QDateTime.addSecs": ('int',), + "QDateTime.addYears": ('int',), + "QDateTime.currentDateTime": (), + "QDateTime.currentDateTimeUtc": (), + "QDateTime.currentMSecsSinceEpoch": (), + "QDateTime.currentSecsSinceEpoch": (), + "QDateTime.date": (), + "QDateTime.daysTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.fromMSecsSinceEpoch": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromSecsSinceEpoch": [('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDateTime.fromTime_t": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.isDaylightTime": (), + "QDateTime.isNull": (), + "QDateTime.isValid": (), + "QDateTime.msecsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.offsetFromUtc": (), + "QDateTime.secsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.setDate": ('PySide2.QtCore.QDate',), + "QDateTime.setMSecsSinceEpoch": ('int',), + "QDateTime.setOffsetFromUtc": ('int',), + "QDateTime.setSecsSinceEpoch": ('int',), + "QDateTime.setTime": ('PySide2.QtCore.QTime',), + "QDateTime.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.setTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.setTime_t": ('int',), + "QDateTime.setUtcOffset": ('int',), + "QDateTime.swap": ('PySide2.QtCore.QDateTime',), + "QDateTime.time": (), + "QDateTime.timeSpec": (), + "QDateTime.timeZone": (), + "QDateTime.timeZoneAbbreviation": (), + "QDateTime.toLocalTime": (), + "QDateTime.toMSecsSinceEpoch": (), + "QDateTime.toOffsetFromUtc": ('int',), + "QDateTime.toPython": (), + "QDateTime.toSecsSinceEpoch": (), + "QDateTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDateTime.toTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.toTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.toTime_t": (), + "QDateTime.toUTC": (), + "QDateTime.utcOffset": (), + + # class PySide2.QtCore.QDir: + "QDir.__init__": [('PySide2.QtCore.QDir',), ('str',), ('str', 'str', 'PySide2.libpyside.SortFlags', 'PySide2.libpyside.Filters')], + "QDir.__copy__": (), + "QDir.__reduce__": (), + "QDir.absoluteFilePath": ('str',), + "QDir.absolutePath": (), + "QDir.addResourceSearchPath": ('str',), + "QDir.addSearchPath": ('str', 'str'), + "QDir.canonicalPath": (), + "QDir.cd": ('str',), + "QDir.cdUp": (), + "QDir.cleanPath": ('str',), + "QDir.count": (), + "QDir.current": (), + "QDir.currentPath": (), + "QDir.dirName": (), + "QDir.drives": (), + "QDir.entryInfoList": [('List[str]', 'PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags'), ('PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags')], + "QDir.entryList": [('List[str]', 'PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags'), ('PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags')], + "QDir.exists": [(), ('str',)], + "QDir.filePath": ('str',), + "QDir.filter": (), + "QDir.fromNativeSeparators": ('str',), + "QDir.home": (), + "QDir.homePath": (), + "QDir.isAbsolute": (), + "QDir.isAbsolutePath": ('str',), + "QDir.isEmpty": ('PySide2.libpyside.Filters',), + "QDir.isReadable": (), + "QDir.isRelative": (), + "QDir.isRelativePath": ('str',), + "QDir.isRoot": (), + "QDir.listSeparator": (), + "QDir.makeAbsolute": (), + "QDir.match": [('List[str]', 'str'), ('str', 'str')], + "QDir.mkdir": ('str',), + "QDir.mkpath": ('str',), + "QDir.nameFilters": (), + "QDir.nameFiltersFromString": ('str',), + "QDir.path": (), + "QDir.refresh": (), + "QDir.relativeFilePath": ('str',), + "QDir.remove": ('str',), + "QDir.removeRecursively": (), + "QDir.rename": ('str', 'str'), + "QDir.rmdir": ('str',), + "QDir.rmpath": ('str',), + "QDir.root": (), + "QDir.rootPath": (), + "QDir.searchPaths": ('str',), + "QDir.separator": (), + "QDir.setCurrent": ('str',), + "QDir.setFilter": ('PySide2.libpyside.Filters',), + "QDir.setNameFilters": ('List[str]',), + "QDir.setPath": ('str',), + "QDir.setSearchPaths": ('str', 'List[str]'), + "QDir.setSorting": ('PySide2.libpyside.SortFlags',), + "QDir.sorting": (), + "QDir.swap": ('PySide2.QtCore.QDir',), + "QDir.temp": (), + "QDir.tempPath": (), + "QDir.toNativeSeparators": ('str',), + + # class PySide2.QtCore.QDirIterator: + "QDirIterator.__init__": [('PySide2.QtCore.QDir', 'PySide2.libpyside.IteratorFlags'), ('str', 'List[str]', 'PySide2.libpyside.Filters', 'PySide2.libpyside.IteratorFlags'), ('str', 'PySide2.libpyside.Filters', 'PySide2.libpyside.IteratorFlags'), ('str', 'PySide2.libpyside.IteratorFlags')], + "QDirIterator.fileInfo": (), + "QDirIterator.fileName": (), + "QDirIterator.filePath": (), + "QDirIterator.hasNext": (), + "QDirIterator.path": (), + + # class PySide2.QtCore.QDynamicPropertyChangeEvent: + "QDynamicPropertyChangeEvent.__init__": ('PySide2.QtCore.QByteArray',), + "QDynamicPropertyChangeEvent.propertyName": (), + + # class PySide2.QtCore.QEasingCurve: + "QEasingCurve.__init__": [('PySide2.QtCore.QEasingCurve',), ('PySide2.QtCore.QEasingCurve.Type',)], + "QEasingCurve.__copy__": (), + "QEasingCurve.addCubicBezierSegment": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEasingCurve.addTCBSegment": ('PySide2.QtCore.QPointF', 'float', 'float', 'float'), + "QEasingCurve.amplitude": (), + "QEasingCurve.customType": (), + "QEasingCurve.overshoot": (), + "QEasingCurve.period": (), + "QEasingCurve.setAmplitude": ('float',), + "QEasingCurve.setCustomType": ('object',), + "QEasingCurve.setOvershoot": ('float',), + "QEasingCurve.setPeriod": ('float',), + "QEasingCurve.setType": ('PySide2.QtCore.QEasingCurve.Type',), + "QEasingCurve.swap": ('PySide2.QtCore.QEasingCurve',), + "QEasingCurve.toCubicSpline": (), + "QEasingCurve.type": (), + "QEasingCurve.valueForProgress": ('float',), + + # class PySide2.QtCore.QElapsedTimer: + "QElapsedTimer.__init__": [(), ('PySide2.QtCore.QElapsedTimer',)], + "QElapsedTimer.__copy__": (), + "QElapsedTimer.clockType": (), + "QElapsedTimer.elapsed": (), + "QElapsedTimer.hasExpired": ('int',), + "QElapsedTimer.invalidate": (), + "QElapsedTimer.isMonotonic": (), + "QElapsedTimer.isValid": (), + "QElapsedTimer.msecsSinceReference": (), + "QElapsedTimer.msecsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.nsecsElapsed": (), + "QElapsedTimer.restart": (), + "QElapsedTimer.secsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.start": (), + + # class PySide2.QtCore.QEvent: + "QEvent.__init__": [('PySide2.QtCore.QEvent',), ('PySide2.QtCore.QEvent.Type',)], + "QEvent.accept": (), + "QEvent.ignore": (), + "QEvent.isAccepted": (), + "QEvent.registerEventType": ('int',), + "QEvent.setAccepted": ('bool',), + "QEvent.spontaneous": (), + "QEvent.type": (), + + # class PySide2.QtCore.QEventLoop: + "QEventLoop.__init__": ('PySide2.QtCore.QObject',), + "QEventLoop.event": ('PySide2.QtCore.QEvent',), + "QEventLoop.exec_": ('PySide2.libpyside.ProcessEventsFlags',), + "QEventLoop.exit": ('int',), + "QEventLoop.isRunning": (), + "QEventLoop.processEvents": [('PySide2.libpyside.ProcessEventsFlags',), ('PySide2.libpyside.ProcessEventsFlags', 'int')], + "QEventLoop.quit": (), + "QEventLoop.wakeUp": (), + + # class PySide2.QtCore.QEventTransition: + "QEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QEventTransition.event": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventSource": (), + "QEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventType": (), + "QEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QEventTransition.setEventSource": ('PySide2.QtCore.QObject',), + "QEventTransition.setEventType": ('PySide2.QtCore.QEvent.Type',), + + # class PySide2.QtCore.QFactoryInterface: + "QFactoryInterface.__init__": (), + "QFactoryInterface.keys": (), + + # class PySide2.QtCore.QFile: + "QFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QFile.copy": [('str',), ('str', 'str')], + "QFile.decodeName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QFile.encodeName": ('str',), + "QFile.exists": [(), ('str',)], + "QFile.fileName": (), + "QFile.link": [('str',), ('str', 'str')], + "QFile.open": [('PySide2.libpyside.OpenMode',), ('int', 'PySide2.libpyside.OpenMode', 'PySide2.libpyside.FileHandleFlags')], + "QFile.permissions": [(), ('str',)], + "QFile.readLink": [(), ('str',)], + "QFile.remove": [(), ('str',)], + "QFile.rename": [('str',), ('str', 'str')], + "QFile.resize": [('int',), ('str', 'int')], + "QFile.setFileName": ('str',), + "QFile.setPermissions": [('PySide2.libpyside.Permissions',), ('str', 'PySide2.libpyside.Permissions')], + "QFile.size": (), + "QFile.symLinkTarget": [(), ('str',)], + + # class PySide2.QtCore.QFileDevice: + "QFileDevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QFileDevice.atEnd": (), + "QFileDevice.close": (), + "QFileDevice.error": (), + "QFileDevice.fileName": (), + "QFileDevice.fileTime": ('PySide2.QtCore.QFileDevice.FileTime',), + "QFileDevice.flush": (), + "QFileDevice.handle": (), + "QFileDevice.isSequential": (), + "QFileDevice.map": ('int', 'int', 'PySide2.QtCore.QFileDevice.MemoryMapFlags'), + "QFileDevice.permissions": (), + "QFileDevice.pos": (), + "QFileDevice.readData": ('str', 'int'), + "QFileDevice.readLineData": ('str', 'int'), + "QFileDevice.resize": ('int',), + "QFileDevice.seek": ('int',), + "QFileDevice.setFileTime": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QFileDevice.FileTime'), + "QFileDevice.setPermissions": ('PySide2.libpyside.Permissions',), + "QFileDevice.size": (), + "QFileDevice.unmap": ('Union[str, int]',), + "QFileDevice.unsetError": (), + "QFileDevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QFileInfo: + "QFileInfo.__init__": [(), ('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('PySide2.QtCore.QFileInfo',), ('str',)], + "QFileInfo.__copy__": (), + "QFileInfo.__reduce__": (), + "QFileInfo.absoluteDir": (), + "QFileInfo.absoluteFilePath": (), + "QFileInfo.absolutePath": (), + "QFileInfo.baseName": (), + "QFileInfo.birthTime": (), + "QFileInfo.bundleName": (), + "QFileInfo.caching": (), + "QFileInfo.canonicalFilePath": (), + "QFileInfo.canonicalPath": (), + "QFileInfo.completeBaseName": (), + "QFileInfo.completeSuffix": (), + "QFileInfo.created": (), + "QFileInfo.dir": (), + "QFileInfo.exists": [(), ('str',)], + "QFileInfo.fileName": (), + "QFileInfo.filePath": (), + "QFileInfo.group": (), + "QFileInfo.groupId": (), + "QFileInfo.isAbsolute": (), + "QFileInfo.isBundle": (), + "QFileInfo.isDir": (), + "QFileInfo.isExecutable": (), + "QFileInfo.isFile": (), + "QFileInfo.isHidden": (), + "QFileInfo.isNativePath": (), + "QFileInfo.isReadable": (), + "QFileInfo.isRelative": (), + "QFileInfo.isRoot": (), + "QFileInfo.isSymLink": (), + "QFileInfo.isWritable": (), + "QFileInfo.lastModified": (), + "QFileInfo.lastRead": (), + "QFileInfo.makeAbsolute": (), + "QFileInfo.metadataChangeTime": (), + "QFileInfo.owner": (), + "QFileInfo.ownerId": (), + "QFileInfo.path": (), + "QFileInfo.readLink": (), + "QFileInfo.refresh": (), + "QFileInfo.setCaching": ('bool',), + "QFileInfo.setFile": [('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('str',)], + "QFileInfo.size": (), + "QFileInfo.suffix": (), + "QFileInfo.swap": ('PySide2.QtCore.QFileInfo',), + "QFileInfo.symLinkTarget": (), + + # class PySide2.QtCore.QFileSelector: + "QFileSelector.__init__": ('PySide2.QtCore.QObject',), + "QFileSelector.allSelectors": (), + "QFileSelector.extraSelectors": (), + "QFileSelector.select": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileSelector.setExtraSelectors": ('List[str]',), + + # class PySide2.QtCore.QFileSystemWatcher: + "QFileSystemWatcher.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QFileSystemWatcher.addPath": ('str',), + "QFileSystemWatcher.addPaths": ('List[str]',), + "QFileSystemWatcher.directories": (), + "QFileSystemWatcher.files": (), + "QFileSystemWatcher.removePath": ('str',), + "QFileSystemWatcher.removePaths": ('List[str]',), + + # class PySide2.QtCore.QFinalState: + "QFinalState.__init__": ('PySide2.QtCore.QState',), + "QFinalState.event": ('PySide2.QtCore.QEvent',), + "QFinalState.onEntry": ('PySide2.QtCore.QEvent',), + "QFinalState.onExit": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtCore.QGenericArgument: + "QGenericArgument.__init__": [('PySide2.QtCore.QGenericArgument',), ('str', 'int')], + "QGenericArgument.__copy__": (), + "QGenericArgument.data": (), + "QGenericArgument.name": (), + + # class PySide2.QtCore.QGenericReturnArgument: + "QGenericReturnArgument.__init__": [('PySide2.QtCore.QGenericReturnArgument',), ('str', 'int')], + "QGenericReturnArgument.__copy__": (), + + # class PySide2.QtCore.QHistoryState: + "QHistoryState.__init__": [('PySide2.QtCore.QHistoryState.HistoryType', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QHistoryState.defaultState": (), + "QHistoryState.defaultTransition": (), + "QHistoryState.event": ('PySide2.QtCore.QEvent',), + "QHistoryState.historyType": (), + "QHistoryState.onEntry": ('PySide2.QtCore.QEvent',), + "QHistoryState.onExit": ('PySide2.QtCore.QEvent',), + "QHistoryState.setDefaultState": ('PySide2.QtCore.QAbstractState',), + "QHistoryState.setDefaultTransition": ('PySide2.QtCore.QAbstractTransition',), + "QHistoryState.setHistoryType": ('PySide2.QtCore.QHistoryState.HistoryType',), + + # class PySide2.QtCore.QIODevice: + "QIODevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QIODevice.atEnd": (), + "QIODevice.bytesAvailable": (), + "QIODevice.bytesToWrite": (), + "QIODevice.canReadLine": (), + "QIODevice.close": (), + "QIODevice.commitTransaction": (), + "QIODevice.currentReadChannel": (), + "QIODevice.currentWriteChannel": (), + "QIODevice.errorString": (), + "QIODevice.getChar": ('str',), + "QIODevice.isOpen": (), + "QIODevice.isReadable": (), + "QIODevice.isSequential": (), + "QIODevice.isTextModeEnabled": (), + "QIODevice.isTransactionStarted": (), + "QIODevice.isWritable": (), + "QIODevice.open": ('PySide2.libpyside.OpenMode',), + "QIODevice.openMode": (), + "QIODevice.peek": ('int',), + "QIODevice.pos": (), + "QIODevice.putChar": ('Union[str, int]',), + "QIODevice.read": ('int',), + "QIODevice.readAll": (), + "QIODevice.readChannelCount": (), + "QIODevice.readData": ('str', 'int'), + "QIODevice.readLine": ('int',), + "QIODevice.readLineData": ('str', 'int'), + "QIODevice.reset": (), + "QIODevice.rollbackTransaction": (), + "QIODevice.seek": ('int',), + "QIODevice.setCurrentReadChannel": ('int',), + "QIODevice.setCurrentWriteChannel": ('int',), + "QIODevice.setErrorString": ('str',), + "QIODevice.setOpenMode": ('PySide2.libpyside.OpenMode',), + "QIODevice.setTextModeEnabled": ('bool',), + "QIODevice.size": (), + "QIODevice.skip": ('int',), + "QIODevice.startTransaction": (), + "QIODevice.ungetChar": ('Union[str, int]',), + "QIODevice.waitForBytesWritten": ('int',), + "QIODevice.waitForReadyRead": ('int',), + "QIODevice.write": ('PySide2.QtCore.QByteArray',), + "QIODevice.writeChannelCount": (), + "QIODevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QIdentityProxyModel: + "QIdentityProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QIdentityProxyModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QIdentityProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QIdentityProxyModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QIdentityProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QIdentityProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QIdentityProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QIdentityProxyModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'PySide2.libpyside.MatchFlags'), + "QIdentityProxyModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QIdentityProxyModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QIdentityProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QIdentityProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QItemSelection: + "QItemSelection.__init__": [(), ('PySide2.QtCore.QItemSelection',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelection.__copy__": (), + "QItemSelection.append": [('PySide2.QtCore.QItemSelectionRange',), ('list',)], + "QItemSelection.at": ('int',), + "QItemSelection.back": (), + "QItemSelection.clear": (), + "QItemSelection.constFirst": (), + "QItemSelection.constLast": (), + "QItemSelection.contains": ('PySide2.QtCore.QModelIndex',), + "QItemSelection.count": [(), ('PySide2.QtCore.QItemSelectionRange',)], + "QItemSelection.detachShared": (), + "QItemSelection.empty": (), + "QItemSelection.endsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.first": (), + "QItemSelection.fromSet": ('set',), + "QItemSelection.fromVector": ('list',), + "QItemSelection.front": (), + "QItemSelection.indexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.indexes": (), + "QItemSelection.insert": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.isEmpty": (), + "QItemSelection.isSharedWith": ('list',), + "QItemSelection.last": (), + "QItemSelection.lastIndexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.length": (), + "QItemSelection.merge": ('PySide2.QtCore.QItemSelection', 'PySide2.libpyside.SelectionFlags'), + "QItemSelection.mid": ('int', 'int'), + "QItemSelection.move": ('int', 'int'), + "QItemSelection.pop_back": (), + "QItemSelection.pop_front": (), + "QItemSelection.prepend": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_back": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_front": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAll": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAt": ('int',), + "QItemSelection.removeFirst": (), + "QItemSelection.removeLast": (), + "QItemSelection.removeOne": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.replace": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.reserve": ('int',), + "QItemSelection.select": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QItemSelection.setSharable": ('bool',), + "QItemSelection.size": (), + "QItemSelection.split": ('PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelection'), + "QItemSelection.startsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.swap": [('int', 'int'), ('list',)], + "QItemSelection.takeAt": ('int',), + "QItemSelection.takeFirst": (), + "QItemSelection.takeLast": (), + "QItemSelection.toSet": (), + "QItemSelection.toVector": (), + "QItemSelection.value": [('int',), ('int', 'PySide2.QtCore.QItemSelectionRange')], + + # class PySide2.QtCore.QItemSelectionModel: + "QItemSelectionModel.__init__": [('PySide2.QtCore.QAbstractItemModel',), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject')], + "QItemSelectionModel.clear": (), + "QItemSelectionModel.clearCurrentIndex": (), + "QItemSelectionModel.clearSelection": (), + "QItemSelectionModel.columnIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.currentIndex": (), + "QItemSelectionModel.emitSelectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QItemSelectionModel.hasSelection": (), + "QItemSelectionModel.isColumnSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isRowSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isSelected": ('PySide2.QtCore.QModelIndex',), + "QItemSelectionModel.model": (), + "QItemSelectionModel.reset": (), + "QItemSelectionModel.rowIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.select": [('PySide2.QtCore.QItemSelection', 'PySide2.libpyside.SelectionFlags'), ('PySide2.QtCore.QModelIndex', 'PySide2.libpyside.SelectionFlags')], + "QItemSelectionModel.selectedColumns": ('int',), + "QItemSelectionModel.selectedIndexes": (), + "QItemSelectionModel.selectedRows": ('int',), + "QItemSelectionModel.selection": (), + "QItemSelectionModel.setCurrentIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.libpyside.SelectionFlags'), + "QItemSelectionModel.setModel": ('PySide2.QtCore.QAbstractItemModel',), + + # class PySide2.QtCore.QItemSelectionRange: + "QItemSelectionRange.__init__": [(), ('PySide2.QtCore.QItemSelectionRange',), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.__copy__": (), + "QItemSelectionRange.bottom": (), + "QItemSelectionRange.bottomRight": (), + "QItemSelectionRange.contains": [('PySide2.QtCore.QModelIndex',), ('int', 'int', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.height": (), + "QItemSelectionRange.indexes": (), + "QItemSelectionRange.intersected": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.intersects": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.isEmpty": (), + "QItemSelectionRange.isValid": (), + "QItemSelectionRange.left": (), + "QItemSelectionRange.model": (), + "QItemSelectionRange.parent": (), + "QItemSelectionRange.right": (), + "QItemSelectionRange.swap": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.top": (), + "QItemSelectionRange.topLeft": (), + "QItemSelectionRange.width": (), + + # class PySide2.QtCore.QJsonArray: + "QJsonArray.__init__": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonArray.__copy__": (), + "QJsonArray.append": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.at": ('int',), + "QJsonArray.contains": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.count": (), + "QJsonArray.empty": (), + "QJsonArray.first": (), + "QJsonArray.fromStringList": ('List[str]',), + "QJsonArray.fromVariantList": ('list',), + "QJsonArray.insert": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.isEmpty": (), + "QJsonArray.last": (), + "QJsonArray.pop_back": (), + "QJsonArray.pop_front": (), + "QJsonArray.prepend": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_back": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_front": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.removeAt": ('int',), + "QJsonArray.removeFirst": (), + "QJsonArray.removeLast": (), + "QJsonArray.replace": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.size": (), + "QJsonArray.swap": ('PySide2.QtCore.QJsonArray',), + "QJsonArray.takeAt": ('int',), + "QJsonArray.toVariantList": (), + + # class PySide2.QtCore.QJsonDocument: + "QJsonDocument.__init__": [(), ('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonDocument',), ('dict',)], + "QJsonDocument.__copy__": (), + "QJsonDocument.array": (), + "QJsonDocument.fromBinaryData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromJson": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonParseError'), + "QJsonDocument.fromRawData": ('str', 'int', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromVariant": ('Any',), + "QJsonDocument.isArray": (), + "QJsonDocument.isEmpty": (), + "QJsonDocument.isNull": (), + "QJsonDocument.isObject": (), + "QJsonDocument.object": (), + "QJsonDocument.rawData": ('int',), + "QJsonDocument.setArray": ('PySide2.QtCore.QJsonArray',), + "QJsonDocument.setObject": ('dict',), + "QJsonDocument.swap": ('PySide2.QtCore.QJsonDocument',), + "QJsonDocument.toBinaryData": (), + "QJsonDocument.toJson": [(), ('PySide2.QtCore.QJsonDocument.JsonFormat',)], + "QJsonDocument.toVariant": (), + + # class PySide2.QtCore.QJsonParseError: + "QJsonParseError.__init__": [(), ('PySide2.QtCore.QJsonParseError',)], + "QJsonParseError.__copy__": (), + "QJsonParseError.errorString": (), + + # class PySide2.QtCore.QJsonValue: + "QJsonValue.__init__": [('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonValue',), ('PySide2.QtCore.QJsonValue.Type',), ('bool',), ('dict',), ('float',), ('int',), ('str',)], + "QJsonValue.__copy__": (), + "QJsonValue.fromVariant": ('Any',), + "QJsonValue.isArray": (), + "QJsonValue.isBool": (), + "QJsonValue.isDouble": (), + "QJsonValue.isNull": (), + "QJsonValue.isObject": (), + "QJsonValue.isString": (), + "QJsonValue.isUndefined": (), + "QJsonValue.swap": ('PySide2.QtCore.QJsonValue',), + "QJsonValue.toArray": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonValue.toBool": ('bool',), + "QJsonValue.toDouble": ('float',), + "QJsonValue.toInt": ('int',), + "QJsonValue.toObject": [(), ('dict',)], + "QJsonValue.toString": [(), ('str',)], + "QJsonValue.toVariant": (), + "QJsonValue.type": (), + + # class PySide2.QtCore.QLibraryInfo: + "QLibraryInfo.build": (), + "QLibraryInfo.buildDate": (), + "QLibraryInfo.isDebugBuild": (), + "QLibraryInfo.licensedProducts": (), + "QLibraryInfo.licensee": (), + "QLibraryInfo.location": ('PySide2.QtCore.QLibraryInfo.LibraryLocation',), + "QLibraryInfo.platformPluginArguments": ('str',), + "QLibraryInfo.version": (), + + # class PySide2.QtCore.QLine: + "QLine.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('int', 'int', 'int', 'int')], + "QLine.__copy__": (), + "QLine.__reduce__": (), + "QLine.center": (), + "QLine.dx": (), + "QLine.dy": (), + "QLine.isNull": (), + "QLine.p1": (), + "QLine.p2": (), + "QLine.setLine": ('int', 'int', 'int', 'int'), + "QLine.setP1": ('PySide2.QtCore.QPoint',), + "QLine.setP2": ('PySide2.QtCore.QPoint',), + "QLine.setPoints": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QLine.toTuple": (), + "QLine.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.x1": (), + "QLine.x2": (), + "QLine.y1": (), + "QLine.y2": (), + + # class PySide2.QtCore.QLineF: + "QLineF.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QLineF.__copy__": (), + "QLineF.__reduce__": (), + "QLineF.angle": [(), ('PySide2.QtCore.QLineF',)], + "QLineF.angleTo": ('PySide2.QtCore.QLineF',), + "QLineF.center": (), + "QLineF.dx": (), + "QLineF.dy": (), + "QLineF.fromPolar": ('float', 'float'), + "QLineF.intersect": ('PySide2.QtCore.QLineF', 'PySide2.QtCore.QPointF'), + "QLineF.isNull": (), + "QLineF.length": (), + "QLineF.normalVector": (), + "QLineF.p1": (), + "QLineF.p2": (), + "QLineF.pointAt": ('float',), + "QLineF.setAngle": ('float',), + "QLineF.setLength": ('float',), + "QLineF.setLine": ('float', 'float', 'float', 'float'), + "QLineF.setP1": ('PySide2.QtCore.QPointF',), + "QLineF.setP2": ('PySide2.QtCore.QPointF',), + "QLineF.setPoints": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QLineF.toLine": (), + "QLineF.toTuple": (), + "QLineF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.unitVector": (), + "QLineF.x1": (), + "QLineF.x2": (), + "QLineF.y1": (), + "QLineF.y2": (), + + # class PySide2.QtCore.QLocale: + "QLocale.__init__": [(), ('PySide2.QtCore.QLocale',), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Country'), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), ('str',)], + "QLocale.__copy__": (), + "QLocale.amText": (), + "QLocale.bcp47Name": (), + "QLocale.c": (), + "QLocale.countriesForLanguage": ('PySide2.QtCore.QLocale.Language',), + "QLocale.country": (), + "QLocale.countryToString": ('PySide2.QtCore.QLocale.Country',), + "QLocale.createSeparatedList": ('List[str]',), + "QLocale.currencySymbol": ('PySide2.QtCore.QLocale.CurrencySymbolFormat',), + "QLocale.dateFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dateTimeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.decimalPoint": (), + "QLocale.exponential": (), + "QLocale.firstDayOfWeek": (), + "QLocale.formattedDataSize": ('int', 'int', 'PySide2.libpyside.DataSizeFormats'), + "QLocale.groupSeparator": (), + "QLocale.language": (), + "QLocale.languageToString": ('PySide2.QtCore.QLocale.Language',), + "QLocale.matchingLocales": ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), + "QLocale.measurementSystem": (), + "QLocale.monthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.name": (), + "QLocale.nativeCountryName": (), + "QLocale.nativeLanguageName": (), + "QLocale.negativeSign": (), + "QLocale.numberOptions": (), + "QLocale.percent": (), + "QLocale.pmText": (), + "QLocale.positiveSign": (), + "QLocale.quoteString": ('str', 'PySide2.QtCore.QLocale.QuotationStyle'), + "QLocale.script": (), + "QLocale.scriptToString": ('PySide2.QtCore.QLocale.Script',), + "QLocale.setDefault": ('PySide2.QtCore.QLocale',), + "QLocale.setNumberOptions": ('PySide2.libpyside.NumberOptions',), + "QLocale.standaloneDayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.standaloneMonthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.swap": ('PySide2.QtCore.QLocale',), + "QLocale.system": (), + "QLocale.textDirection": (), + "QLocale.timeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.toCurrencyString": [('float', 'str'), ('float', 'str', 'int'), ('int', 'str')], + "QLocale.toDate": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDateTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDouble": ('str', 'bool'), + "QLocale.toFloat": ('str', 'bool'), + "QLocale.toInt": ('str', 'bool'), + "QLocale.toLongLong": ('str', 'bool'), + "QLocale.toLower": ('str',), + "QLocale.toShort": ('str', 'bool'), + "QLocale.toString": [('PySide2.QtCore.QDate', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDate', 'str'), ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDateTime', 'str'), ('PySide2.QtCore.QTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QTime', 'str'), ('float', 'Union[str, int]', 'int'), ('int',)], + "QLocale.toTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toUInt": ('str', 'bool'), + "QLocale.toULongLong": ('str', 'bool'), + "QLocale.toUShort": ('str', 'bool'), + "QLocale.toUpper": ('str',), + "QLocale.uiLanguages": (), + "QLocale.weekdays": (), + "QLocale.zeroDigit": (), + + # class PySide2.QtCore.QLockFile: + "QLockFile.__init__": ('str',), + "QLockFile.error": (), + "QLockFile.getLockInfo": ('int', 'str', 'str'), + "QLockFile.isLocked": (), + "QLockFile.lock": (), + "QLockFile.removeStaleLockFile": (), + "QLockFile.setStaleLockTime": ('int',), + "QLockFile.staleLockTime": (), + "QLockFile.tryLock": ('int',), + "QLockFile.unlock": (), + + # class PySide2.QtCore.QMargins: + "QMargins.__init__": [(), ('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QMargins.__copy__": (), + "QMargins.bottom": (), + "QMargins.isNull": (), + "QMargins.left": (), + "QMargins.right": (), + "QMargins.setBottom": ('int',), + "QMargins.setLeft": ('int',), + "QMargins.setRight": ('int',), + "QMargins.setTop": ('int',), + "QMargins.top": (), + + # class PySide2.QtCore.QMarginsF: + "QMarginsF.__init__": [(), ('PySide2.QtCore.QMargins',), ('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float')], + "QMarginsF.__copy__": (), + "QMarginsF.bottom": (), + "QMarginsF.isNull": (), + "QMarginsF.left": (), + "QMarginsF.right": (), + "QMarginsF.setBottom": ('float',), + "QMarginsF.setLeft": ('float',), + "QMarginsF.setRight": ('float',), + "QMarginsF.setTop": ('float',), + "QMarginsF.toMargins": (), + "QMarginsF.top": (), + + # class PySide2.QtCore.QMessageAuthenticationCode: + "QMessageAuthenticationCode.__init__": ('PySide2.QtCore.QCryptographicHash.Algorithm', 'PySide2.QtCore.QByteArray'), + "QMessageAuthenticationCode.addData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str', 'int')], + "QMessageAuthenticationCode.hash": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QCryptographicHash.Algorithm'), + "QMessageAuthenticationCode.reset": (), + "QMessageAuthenticationCode.result": (), + "QMessageAuthenticationCode.setKey": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QMessageLogContext: + "QMessageLogContext.__init__": [(), ('str', 'int', 'str', 'str')], + + # class PySide2.QtCore.QMetaClassInfo: + "QMetaClassInfo.__init__": [(), ('PySide2.QtCore.QMetaClassInfo',)], + "QMetaClassInfo.__copy__": (), + "QMetaClassInfo.name": (), + "QMetaClassInfo.value": (), + + # class PySide2.QtCore.QMetaEnum: + "QMetaEnum.__init__": [(), ('PySide2.QtCore.QMetaEnum',)], + "QMetaEnum.__copy__": (), + "QMetaEnum.isFlag": (), + "QMetaEnum.isScoped": (), + "QMetaEnum.isValid": (), + "QMetaEnum.key": ('int',), + "QMetaEnum.keyCount": (), + "QMetaEnum.keyToValue": ('str', 'bool'), + "QMetaEnum.keysToValue": ('str', 'bool'), + "QMetaEnum.name": (), + "QMetaEnum.scope": (), + "QMetaEnum.value": ('int',), + "QMetaEnum.valueToKey": ('int',), + "QMetaEnum.valueToKeys": ('int',), + + # class PySide2.QtCore.QMetaMethod: + "QMetaMethod.__init__": [(), ('PySide2.QtCore.QMetaMethod',)], + "QMetaMethod.__copy__": (), + "QMetaMethod.access": (), + "QMetaMethod.enclosingMetaObject": (), + "QMetaMethod.invoke": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.invokeOnGadget": [('int', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('int', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.isValid": (), + "QMetaMethod.methodIndex": (), + "QMetaMethod.methodSignature": (), + "QMetaMethod.methodType": (), + "QMetaMethod.name": (), + "QMetaMethod.parameterCount": (), + "QMetaMethod.parameterNames": (), + "QMetaMethod.parameterType": ('int',), + "QMetaMethod.parameterTypes": (), + "QMetaMethod.returnType": (), + "QMetaMethod.revision": (), + "QMetaMethod.tag": (), + "QMetaMethod.typeName": (), + + # class PySide2.QtCore.QMetaObject: + "QMetaObject.__init__": (), + "QMetaObject.cast": ('PySide2.QtCore.QObject',), + "QMetaObject.checkConnectArgs": [('PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QMetaMethod'), ('str', 'str')], + "QMetaObject.classInfo": ('int',), + "QMetaObject.classInfoCount": (), + "QMetaObject.classInfoOffset": (), + "QMetaObject.className": (), + "QMetaObject.connectSlotsByName": ('PySide2.QtCore.QObject',), + "QMetaObject.constructor": ('int',), + "QMetaObject.constructorCount": (), + "QMetaObject.disconnect": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.disconnectOne": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.enumerator": ('int',), + "QMetaObject.enumeratorCount": (), + "QMetaObject.enumeratorOffset": (), + "QMetaObject.indexOfClassInfo": ('str',), + "QMetaObject.indexOfConstructor": ('str',), + "QMetaObject.indexOfEnumerator": ('str',), + "QMetaObject.indexOfMethod": ('str',), + "QMetaObject.indexOfProperty": ('str',), + "QMetaObject.indexOfSignal": ('str',), + "QMetaObject.indexOfSlot": ('str',), + "QMetaObject.inherits": ('PySide2.QtCore.QMetaObject',), + "QMetaObject.invokeMethod": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaObject.method": ('int',), + "QMetaObject.methodCount": (), + "QMetaObject.methodOffset": (), + "QMetaObject.newInstance": ('PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), + "QMetaObject.normalizedSignature": ('str',), + "QMetaObject.normalizedType": ('str',), + "QMetaObject.property": ('int',), + "QMetaObject.propertyCount": (), + "QMetaObject.propertyOffset": (), + "QMetaObject.superClass": (), + "QMetaObject.userProperty": (), + + # class PySide2.QtCore.QMetaProperty: + "QMetaProperty.__init__": [(), ('PySide2.QtCore.QMetaProperty',)], + "QMetaProperty.__copy__": (), + "QMetaProperty.enumerator": (), + "QMetaProperty.hasNotifySignal": (), + "QMetaProperty.hasStdCppSet": (), + "QMetaProperty.isConstant": (), + "QMetaProperty.isDesignable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEditable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEnumType": (), + "QMetaProperty.isFinal": (), + "QMetaProperty.isFlagType": (), + "QMetaProperty.isReadable": (), + "QMetaProperty.isResettable": (), + "QMetaProperty.isScriptable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isStored": ('PySide2.QtCore.QObject',), + "QMetaProperty.isUser": ('PySide2.QtCore.QObject',), + "QMetaProperty.isValid": (), + "QMetaProperty.isWritable": (), + "QMetaProperty.name": (), + "QMetaProperty.notifySignal": (), + "QMetaProperty.notifySignalIndex": (), + "QMetaProperty.propertyIndex": (), + "QMetaProperty.read": ('PySide2.QtCore.QObject',), + "QMetaProperty.readOnGadget": ('int',), + "QMetaProperty.reset": ('PySide2.QtCore.QObject',), + "QMetaProperty.resetOnGadget": ('int',), + "QMetaProperty.revision": (), + "QMetaProperty.type": (), + "QMetaProperty.typeName": (), + "QMetaProperty.userType": (), + "QMetaProperty.write": ('PySide2.QtCore.QObject', 'Any'), + "QMetaProperty.writeOnGadget": ('int', 'Any'), + + # class PySide2.QtCore.QMimeData: + "QMimeData.__init__": (), + "QMimeData.clear": (), + "QMimeData.colorData": (), + "QMimeData.data": ('str',), + "QMimeData.formats": (), + "QMimeData.hasColor": (), + "QMimeData.hasFormat": ('str',), + "QMimeData.hasHtml": (), + "QMimeData.hasImage": (), + "QMimeData.hasText": (), + "QMimeData.hasUrls": (), + "QMimeData.html": (), + "QMimeData.imageData": (), + "QMimeData.removeFormat": ('str',), + "QMimeData.retrieveData": ('str', 'type'), + "QMimeData.setColorData": ('Any',), + "QMimeData.setData": ('str', 'PySide2.QtCore.QByteArray'), + "QMimeData.setHtml": ('str',), + "QMimeData.setImageData": ('Any',), + "QMimeData.setText": ('str',), + "QMimeData.setUrls": ('list',), + "QMimeData.text": (), + "QMimeData.urls": (), + + # class PySide2.QtCore.QMimeDatabase: + "QMimeDatabase.__init__": (), + "QMimeDatabase.allMimeTypes": (), + "QMimeDatabase.mimeTypeForData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QMimeDatabase.mimeTypeForFile": [('PySide2.QtCore.QFileInfo', 'PySide2.QtCore.QMimeDatabase.MatchMode'), ('str', 'PySide2.QtCore.QMimeDatabase.MatchMode')], + "QMimeDatabase.mimeTypeForFileNameAndData": [('str', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QIODevice')], + "QMimeDatabase.mimeTypeForName": ('str',), + "QMimeDatabase.mimeTypeForUrl": ('PySide2.QtCore.QUrl',), + "QMimeDatabase.mimeTypesForFileName": ('str',), + "QMimeDatabase.suffixForFileName": ('str',), + + # class PySide2.QtCore.QMimeType: + "QMimeType.__init__": [(), ('PySide2.QtCore.QMimeType',)], + "QMimeType.__copy__": (), + "QMimeType.aliases": (), + "QMimeType.allAncestors": (), + "QMimeType.comment": (), + "QMimeType.filterString": (), + "QMimeType.genericIconName": (), + "QMimeType.globPatterns": (), + "QMimeType.iconName": (), + "QMimeType.inherits": ('str',), + "QMimeType.isDefault": (), + "QMimeType.isValid": (), + "QMimeType.name": (), + "QMimeType.parentMimeTypes": (), + "QMimeType.preferredSuffix": (), + "QMimeType.suffixes": (), + "QMimeType.swap": ('PySide2.QtCore.QMimeType',), + + # class PySide2.QtCore.QModelIndex: + "QModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',)], + "QModelIndex.__copy__": (), + "QModelIndex.child": ('int', 'int'), + "QModelIndex.column": (), + "QModelIndex.data": ('int',), + "QModelIndex.flags": (), + "QModelIndex.internalId": (), + "QModelIndex.internalPointer": (), + "QModelIndex.isValid": (), + "QModelIndex.model": (), + "QModelIndex.parent": (), + "QModelIndex.row": (), + "QModelIndex.sibling": ('int', 'int'), + "QModelIndex.siblingAtColumn": ('int',), + "QModelIndex.siblingAtRow": ('int',), + + # class PySide2.QtCore.QMutex: + "QMutex.__init__": ('PySide2.QtCore.QMutex.RecursionMode',), + "QMutex.isRecursive": (), + "QMutex.lock": (), + "QMutex.tryLock": [(), ('int',)], + "QMutex.try_lock": (), + "QMutex.unlock": (), + + # class PySide2.QtCore.QMutexLocker: + "QMutexLocker.__init__": ('PySide2.QtCore.QBasicMutex',), + "QMutexLocker.__enter__": (), + "QMutexLocker.__exit__": ('object', 'object', 'object'), + "QMutexLocker.mutex": (), + "QMutexLocker.relock": (), + "QMutexLocker.unlock": (), + + # class PySide2.QtCore.QObject: + "QObject.__init__": ('PySide2.QtCore.QObject',), + "QObject.blockSignals": ('bool',), + "QObject.childEvent": ('PySide2.QtCore.QChildEvent',), + "QObject.children": (), + "QObject.connect": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType')], + "QObject.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.customEvent": ('PySide2.QtCore.QEvent',), + "QObject.deleteLater": (), + "QObject.disconnect": [('PySide2.QtCore.QMetaObject.Connection',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'Callable'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str'), ('str', 'Callable'), ('str', 'PySide2.QtCore.QObject', 'str')], + "QObject.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.dumpObjectInfo": (), + "QObject.dumpObjectTree": (), + "QObject.dynamicPropertyNames": (), + "QObject.emit": ('str', '...'), + "QObject.event": ('PySide2.QtCore.QEvent',), + "QObject.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QObject.findChild": ('type', 'str'), + "QObject.findChildren": [('type', 'PySide2.QtCore.QRegExp'), ('type', 'str')], + "QObject.inherits": ('str',), + "QObject.installEventFilter": ('PySide2.QtCore.QObject',), + "QObject.isSignalConnected": ('PySide2.QtCore.QMetaMethod',), + "QObject.isWidgetType": (), + "QObject.isWindowType": (), + "QObject.killTimer": ('int',), + "QObject.metaObject": (), + "QObject.moveToThread": ('PySide2.QtCore.QThread',), + "QObject.objectName": (), + "QObject.parent": (), + "QObject.property": ('str',), + "QObject.receivers": ('str',), + "QObject.registerUserData": (), + "QObject.removeEventFilter": ('PySide2.QtCore.QObject',), + "QObject.sender": (), + "QObject.senderSignalIndex": (), + "QObject.setObjectName": ('str',), + "QObject.setParent": ('PySide2.QtCore.QObject',), + "QObject.setProperty": ('str', 'Any'), + "QObject.signalsBlocked": (), + "QObject.startTimer": ('int', 'PySide2.QtCore.Qt.TimerType'), + "QObject.thread": (), + "QObject.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QObject.tr": ('str', 'str', 'int'), + + # class PySide2.QtCore.QOperatingSystemVersion: + "QOperatingSystemVersion.__init__": [('PySide2.QtCore.QOperatingSystemVersion',), ('PySide2.QtCore.QOperatingSystemVersion.OSType', 'int', 'int', 'int')], + "QOperatingSystemVersion.__copy__": (), + "QOperatingSystemVersion.current": (), + "QOperatingSystemVersion.currentType": (), + "QOperatingSystemVersion.majorVersion": (), + "QOperatingSystemVersion.microVersion": (), + "QOperatingSystemVersion.minorVersion": (), + "QOperatingSystemVersion.name": (), + "QOperatingSystemVersion.segmentCount": (), + "QOperatingSystemVersion.type": (), + + # class PySide2.QtCore.QParallelAnimationGroup: + "QParallelAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QParallelAnimationGroup.duration": (), + "QParallelAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QParallelAnimationGroup.updateCurrentTime": ('int',), + "QParallelAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QParallelAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QPauseAnimation: + "QPauseAnimation.__init__": [('PySide2.QtCore.QObject',), ('int', 'PySide2.QtCore.QObject')], + "QPauseAnimation.duration": (), + "QPauseAnimation.event": ('PySide2.QtCore.QEvent',), + "QPauseAnimation.setDuration": ('int',), + "QPauseAnimation.updateCurrentTime": ('int',), + + # class PySide2.QtCore.QPersistentModelIndex: + "QPersistentModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QPersistentModelIndex',)], + "QPersistentModelIndex.__copy__": (), + "QPersistentModelIndex.child": ('int', 'int'), + "QPersistentModelIndex.column": (), + "QPersistentModelIndex.data": ('int',), + "QPersistentModelIndex.flags": (), + "QPersistentModelIndex.internalId": (), + "QPersistentModelIndex.internalPointer": (), + "QPersistentModelIndex.isValid": (), + "QPersistentModelIndex.model": (), + "QPersistentModelIndex.parent": (), + "QPersistentModelIndex.row": (), + "QPersistentModelIndex.sibling": ('int', 'int'), + "QPersistentModelIndex.swap": ('PySide2.QtCore.QPersistentModelIndex',), + + # class PySide2.QtCore.QPluginLoader: + "QPluginLoader.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QPluginLoader.errorString": (), + "QPluginLoader.fileName": (), + "QPluginLoader.instance": (), + "QPluginLoader.isLoaded": (), + "QPluginLoader.load": (), + "QPluginLoader.metaData": (), + "QPluginLoader.setFileName": ('str',), + "QPluginLoader.staticInstances": (), + "QPluginLoader.unload": (), + + # class PySide2.QtCore.QPoint: + "QPoint.__init__": [(), ('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPoint.__copy__": (), + "QPoint.__reduce__": (), + "QPoint.dotProduct": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QPoint.isNull": (), + "QPoint.manhattanLength": (), + "QPoint.setX": ('int',), + "QPoint.setY": ('int',), + "QPoint.toTuple": (), + "QPoint.x": (), + "QPoint.y": (), + + # class PySide2.QtCore.QPointF: + "QPointF.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPointF.__copy__": (), + "QPointF.__reduce__": (), + "QPointF.dotProduct": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QPointF.isNull": (), + "QPointF.manhattanLength": (), + "QPointF.setX": ('float',), + "QPointF.setY": ('float',), + "QPointF.toPoint": (), + "QPointF.toTuple": (), + "QPointF.x": (), + "QPointF.y": (), + + # class PySide2.QtCore.QProcess: + "QProcess.__init__": ('PySide2.QtCore.QObject',), + "QProcess.arguments": (), + "QProcess.atEnd": (), + "QProcess.bytesAvailable": (), + "QProcess.bytesToWrite": (), + "QProcess.canReadLine": (), + "QProcess.close": (), + "QProcess.closeReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.closeWriteChannel": (), + "QProcess.environment": (), + "QProcess.execute": [('str',), ('str', 'List[str]')], + "QProcess.exitCode": (), + "QProcess.exitStatus": (), + "QProcess.inputChannelMode": (), + "QProcess.isSequential": (), + "QProcess.kill": (), + "QProcess.nullDevice": (), + "QProcess.open": ('PySide2.libpyside.OpenMode',), + "QProcess.pid": (), + "QProcess.processChannelMode": (), + "QProcess.processEnvironment": (), + "QProcess.processId": (), + "QProcess.program": (), + "QProcess.readAllStandardError": (), + "QProcess.readAllStandardOutput": (), + "QProcess.readChannel": (), + "QProcess.readData": ('str', 'int'), + "QProcess.setArguments": ('List[str]',), + "QProcess.setEnvironment": ('List[str]',), + "QProcess.setInputChannelMode": ('PySide2.QtCore.QProcess.InputChannelMode',), + "QProcess.setProcessChannelMode": ('PySide2.QtCore.QProcess.ProcessChannelMode',), + "QProcess.setProcessEnvironment": ('PySide2.QtCore.QProcessEnvironment',), + "QProcess.setProcessState": ('PySide2.QtCore.QProcess.ProcessState',), + "QProcess.setProgram": ('str',), + "QProcess.setReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.setStandardErrorFile": ('str', 'PySide2.libpyside.OpenMode'), + "QProcess.setStandardInputFile": ('str',), + "QProcess.setStandardOutputFile": ('str', 'PySide2.libpyside.OpenMode'), + "QProcess.setStandardOutputProcess": ('PySide2.QtCore.QProcess',), + "QProcess.setWorkingDirectory": ('str',), + "QProcess.setupChildProcess": (), + "QProcess.start": [('PySide2.libpyside.OpenMode',), ('str', 'List[str]', 'PySide2.libpyside.OpenMode'), ('str', 'PySide2.libpyside.OpenMode')], + "QProcess.startDetached": [('int',), ('str',), ('str', 'List[str]'), ('str', 'List[str]', 'str', 'int')], + "QProcess.state": (), + "QProcess.systemEnvironment": (), + "QProcess.terminate": (), + "QProcess.waitForBytesWritten": ('int',), + "QProcess.waitForFinished": ('int',), + "QProcess.waitForReadyRead": ('int',), + "QProcess.waitForStarted": ('int',), + "QProcess.workingDirectory": (), + "QProcess.writeData": ('str', 'int'), + + # class PySide2.QtCore.QProcessEnvironment: + "QProcessEnvironment.__init__": [(), ('PySide2.QtCore.QProcessEnvironment',)], + "QProcessEnvironment.__copy__": (), + "QProcessEnvironment.clear": (), + "QProcessEnvironment.contains": ('str',), + "QProcessEnvironment.insert": [('PySide2.QtCore.QProcessEnvironment',), ('str', 'str')], + "QProcessEnvironment.isEmpty": (), + "QProcessEnvironment.keys": (), + "QProcessEnvironment.remove": ('str',), + "QProcessEnvironment.swap": ('PySide2.QtCore.QProcessEnvironment',), + "QProcessEnvironment.systemEnvironment": (), + "QProcessEnvironment.toStringList": (), + "QProcessEnvironment.value": ('str', 'str'), + + # class PySide2.QtCore.QPropertyAnimation: + "QPropertyAnimation.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QPropertyAnimation.event": ('PySide2.QtCore.QEvent',), + "QPropertyAnimation.propertyName": (), + "QPropertyAnimation.setPropertyName": ('PySide2.QtCore.QByteArray',), + "QPropertyAnimation.setTargetObject": ('PySide2.QtCore.QObject',), + "QPropertyAnimation.targetObject": (), + "QPropertyAnimation.updateCurrentValue": ('Any',), + "QPropertyAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QRandomGenerator: + "QRandomGenerator.__init__": [('PySide2.QtCore.QRandomGenerator',), ('int',), ('int', 'int')], + "QRandomGenerator.bounded": [('float',), ('int',), ('int', 'int')], + "QRandomGenerator.discard": ('int',), + "QRandomGenerator.generate": [(), ('int', 'int')], + "QRandomGenerator.generate64": (), + "QRandomGenerator.generateDouble": (), + "QRandomGenerator.global_": (), + "QRandomGenerator.max": (), + "QRandomGenerator.min": (), + "QRandomGenerator.securelySeeded": (), + "QRandomGenerator.seed": ('int',), + "QRandomGenerator.system": (), + + # class PySide2.QtCore.QRandomGenerator64: + "QRandomGenerator64.__init__": [('PySide2.QtCore.QRandomGenerator',), ('int',), ('int', 'int')], + "QRandomGenerator64.discard": ('int',), + "QRandomGenerator64.generate": (), + "QRandomGenerator64.global_": (), + "QRandomGenerator64.max": (), + "QRandomGenerator64.min": (), + "QRandomGenerator64.securelySeeded": (), + "QRandomGenerator64.system": (), + + # class PySide2.QtCore.QReadLocker: + "QReadLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QReadLocker.__enter__": (), + "QReadLocker.__exit__": ('object', 'object', 'object'), + "QReadLocker.readWriteLock": (), + "QReadLocker.relock": (), + "QReadLocker.unlock": (), + + # class PySide2.QtCore.QReadWriteLock: + "QReadWriteLock.__init__": ('PySide2.QtCore.QReadWriteLock.RecursionMode',), + "QReadWriteLock.lockForRead": (), + "QReadWriteLock.lockForWrite": (), + "QReadWriteLock.tryLockForRead": [(), ('int',)], + "QReadWriteLock.tryLockForWrite": [(), ('int',)], + "QReadWriteLock.unlock": (), + + # class PySide2.QtCore.QRect: + "QRect.__init__": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QSize'), ('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRect.__copy__": (), + "QRect.__reduce__": (), + "QRect.adjust": ('int', 'int', 'int', 'int'), + "QRect.adjusted": ('int', 'int', 'int', 'int'), + "QRect.bottom": (), + "QRect.bottomLeft": (), + "QRect.bottomRight": (), + "QRect.center": (), + "QRect.contains": [('PySide2.QtCore.QPoint', 'bool'), ('PySide2.QtCore.QRect', 'bool'), ('int', 'int'), ('int', 'int', 'bool')], + "QRect.getCoords": ('int', 'int', 'int', 'int'), + "QRect.getRect": ('int', 'int', 'int', 'int'), + "QRect.height": (), + "QRect.intersected": ('PySide2.QtCore.QRect',), + "QRect.intersects": ('PySide2.QtCore.QRect',), + "QRect.isEmpty": (), + "QRect.isNull": (), + "QRect.isValid": (), + "QRect.left": (), + "QRect.marginsAdded": ('PySide2.QtCore.QMargins',), + "QRect.marginsRemoved": ('PySide2.QtCore.QMargins',), + "QRect.moveBottom": ('int',), + "QRect.moveBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.moveCenter": ('PySide2.QtCore.QPoint',), + "QRect.moveLeft": ('int',), + "QRect.moveRight": ('int',), + "QRect.moveTo": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.moveTop": ('int',), + "QRect.moveTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveTopRight": ('PySide2.QtCore.QPoint',), + "QRect.normalized": (), + "QRect.right": (), + "QRect.setBottom": ('int',), + "QRect.setBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.setBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.setCoords": ('int', 'int', 'int', 'int'), + "QRect.setHeight": ('int',), + "QRect.setLeft": ('int',), + "QRect.setRect": ('int', 'int', 'int', 'int'), + "QRect.setRight": ('int',), + "QRect.setSize": ('PySide2.QtCore.QSize',), + "QRect.setTop": ('int',), + "QRect.setTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.setTopRight": ('PySide2.QtCore.QPoint',), + "QRect.setWidth": ('int',), + "QRect.setX": ('int',), + "QRect.setY": ('int',), + "QRect.size": (), + "QRect.top": (), + "QRect.topLeft": (), + "QRect.topRight": (), + "QRect.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.transposed": (), + "QRect.united": ('PySide2.QtCore.QRect',), + "QRect.width": (), + "QRect.x": (), + "QRect.y": (), + + # class PySide2.QtCore.QRectF: + "QRectF.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QSizeF'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QRectF.__copy__": (), + "QRectF.__reduce__": (), + "QRectF.adjust": ('float', 'float', 'float', 'float'), + "QRectF.adjusted": ('float', 'float', 'float', 'float'), + "QRectF.bottom": (), + "QRectF.bottomLeft": (), + "QRectF.bottomRight": (), + "QRectF.center": (), + "QRectF.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('float', 'float')], + "QRectF.getCoords": ('float', 'float', 'float', 'float'), + "QRectF.getRect": ('float', 'float', 'float', 'float'), + "QRectF.height": (), + "QRectF.intersected": ('PySide2.QtCore.QRectF',), + "QRectF.intersects": ('PySide2.QtCore.QRectF',), + "QRectF.isEmpty": (), + "QRectF.isNull": (), + "QRectF.isValid": (), + "QRectF.left": (), + "QRectF.marginsAdded": ('PySide2.QtCore.QMarginsF',), + "QRectF.marginsRemoved": ('PySide2.QtCore.QMarginsF',), + "QRectF.moveBottom": ('float',), + "QRectF.moveBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.moveCenter": ('PySide2.QtCore.QPointF',), + "QRectF.moveLeft": ('float',), + "QRectF.moveRight": ('float',), + "QRectF.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.moveTop": ('float',), + "QRectF.moveTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.normalized": (), + "QRectF.right": (), + "QRectF.setBottom": ('float',), + "QRectF.setBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.setCoords": ('float', 'float', 'float', 'float'), + "QRectF.setHeight": ('float',), + "QRectF.setLeft": ('float',), + "QRectF.setRect": ('float', 'float', 'float', 'float'), + "QRectF.setRight": ('float',), + "QRectF.setSize": ('PySide2.QtCore.QSizeF',), + "QRectF.setTop": ('float',), + "QRectF.setTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.setWidth": ('float',), + "QRectF.setX": ('float',), + "QRectF.setY": ('float',), + "QRectF.size": (), + "QRectF.toAlignedRect": (), + "QRectF.toRect": (), + "QRectF.top": (), + "QRectF.topLeft": (), + "QRectF.topRight": (), + "QRectF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.transposed": (), + "QRectF.united": ('PySide2.QtCore.QRectF',), + "QRectF.width": (), + "QRectF.x": (), + "QRectF.y": (), + + # class PySide2.QtCore.QRegExp: + "QRegExp.__init__": [(), ('PySide2.QtCore.QRegExp',), ('str', 'PySide2.QtCore.Qt.CaseSensitivity', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QRegExp.__copy__": (), + "QRegExp.__reduce__": (), + "QRegExp.cap": ('int',), + "QRegExp.captureCount": (), + "QRegExp.capturedTexts": (), + "QRegExp.caseSensitivity": (), + "QRegExp.errorString": (), + "QRegExp.escape": ('str',), + "QRegExp.exactMatch": ('str',), + "QRegExp.indexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.isEmpty": (), + "QRegExp.isMinimal": (), + "QRegExp.isValid": (), + "QRegExp.lastIndexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.matchedLength": (), + "QRegExp.pattern": (), + "QRegExp.patternSyntax": (), + "QRegExp.pos": ('int',), + "QRegExp.replace": ('str', 'str'), + "QRegExp.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QRegExp.setMinimal": ('bool',), + "QRegExp.setPattern": ('str',), + "QRegExp.setPatternSyntax": ('PySide2.QtCore.QRegExp.PatternSyntax',), + "QRegExp.swap": ('PySide2.QtCore.QRegExp',), + + # class PySide2.QtCore.QRegularExpression: + "QRegularExpression.__init__": [(), ('PySide2.QtCore.QRegularExpression',), ('str', 'PySide2.libpyside.PatternOptions')], + "QRegularExpression.__copy__": (), + "QRegularExpression.captureCount": (), + "QRegularExpression.errorString": (), + "QRegularExpression.escape": ('str',), + "QRegularExpression.globalMatch": ('str', 'int', 'PySide2.QtCore.QRegularExpression.MatchType', 'PySide2.libpyside.MatchOptions'), + "QRegularExpression.isValid": (), + "QRegularExpression.match": ('str', 'int', 'PySide2.QtCore.QRegularExpression.MatchType', 'PySide2.libpyside.MatchOptions'), + "QRegularExpression.namedCaptureGroups": (), + "QRegularExpression.optimize": (), + "QRegularExpression.pattern": (), + "QRegularExpression.patternErrorOffset": (), + "QRegularExpression.patternOptions": (), + "QRegularExpression.setPattern": ('str',), + "QRegularExpression.setPatternOptions": ('PySide2.libpyside.PatternOptions',), + "QRegularExpression.swap": ('PySide2.QtCore.QRegularExpression',), + + # class PySide2.QtCore.QRegularExpressionMatch: + "QRegularExpressionMatch.__init__": [(), ('PySide2.QtCore.QRegularExpressionMatch',)], + "QRegularExpressionMatch.__copy__": (), + "QRegularExpressionMatch.captured": [('int',), ('str',)], + "QRegularExpressionMatch.capturedEnd": [('int',), ('str',)], + "QRegularExpressionMatch.capturedLength": [('int',), ('str',)], + "QRegularExpressionMatch.capturedRef": [('int',), ('str',)], + "QRegularExpressionMatch.capturedStart": [('int',), ('str',)], + "QRegularExpressionMatch.capturedTexts": (), + "QRegularExpressionMatch.hasMatch": (), + "QRegularExpressionMatch.hasPartialMatch": (), + "QRegularExpressionMatch.isValid": (), + "QRegularExpressionMatch.lastCapturedIndex": (), + "QRegularExpressionMatch.matchOptions": (), + "QRegularExpressionMatch.matchType": (), + "QRegularExpressionMatch.regularExpression": (), + "QRegularExpressionMatch.swap": ('PySide2.QtCore.QRegularExpressionMatch',), + + # class PySide2.QtCore.QRegularExpressionMatchIterator: + "QRegularExpressionMatchIterator.__init__": [(), ('PySide2.QtCore.QRegularExpressionMatchIterator',)], + "QRegularExpressionMatchIterator.__copy__": (), + "QRegularExpressionMatchIterator.hasNext": (), + "QRegularExpressionMatchIterator.isValid": (), + "QRegularExpressionMatchIterator.matchOptions": (), + "QRegularExpressionMatchIterator.matchType": (), + "QRegularExpressionMatchIterator.peekNext": (), + "QRegularExpressionMatchIterator.regularExpression": (), + "QRegularExpressionMatchIterator.swap": ('PySide2.QtCore.QRegularExpressionMatchIterator',), + + # class PySide2.QtCore.QResource: + "QResource.__init__": ('str', 'PySide2.QtCore.QLocale'), + "QResource.absoluteFilePath": (), + "QResource.addSearchPath": ('str',), + "QResource.children": (), + "QResource.data": (), + "QResource.fileName": (), + "QResource.isCompressed": (), + "QResource.isDir": (), + "QResource.isFile": (), + "QResource.isValid": (), + "QResource.lastModified": (), + "QResource.locale": (), + "QResource.registerResource": ('str', 'str'), + "QResource.registerResourceData": ('Union[str, int]', 'str'), + "QResource.searchPaths": (), + "QResource.setFileName": ('str',), + "QResource.setLocale": ('PySide2.QtCore.QLocale',), + "QResource.size": (), + "QResource.unregisterResource": ('str', 'str'), + "QResource.unregisterResourceData": ('Union[str, int]', 'str'), + + # class PySide2.QtCore.QRunnable: + "QRunnable.__init__": (), + "QRunnable.autoDelete": (), + "QRunnable.run": (), + "QRunnable.setAutoDelete": ('bool',), + + # class PySide2.QtCore.QSaveFile: + "QSaveFile.__init__": [('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QSaveFile.cancelWriting": (), + "QSaveFile.close": (), + "QSaveFile.commit": (), + "QSaveFile.directWriteFallback": (), + "QSaveFile.fileName": (), + "QSaveFile.open": ('PySide2.libpyside.OpenMode',), + "QSaveFile.setDirectWriteFallback": ('bool',), + "QSaveFile.setFileName": ('str',), + "QSaveFile.writeData": ('str', 'int'), + + # class PySide2.QtCore.QSemaphore: + "QSemaphore.__init__": ('int',), + "QSemaphore.acquire": ('int',), + "QSemaphore.available": (), + "QSemaphore.release": ('int',), + "QSemaphore.tryAcquire": [('int',), ('int', 'int')], + + # class PySide2.QtCore.QSemaphoreReleaser: + "QSemaphoreReleaser.__init__": [(), ('PySide2.QtCore.QSemaphore', 'int')], + "QSemaphoreReleaser.cancel": (), + "QSemaphoreReleaser.semaphore": (), + "QSemaphoreReleaser.swap": ('PySide2.QtCore.QSemaphoreReleaser',), + + # class PySide2.QtCore.QSequentialAnimationGroup: + "QSequentialAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QSequentialAnimationGroup.addPause": ('int',), + "QSequentialAnimationGroup.currentAnimation": (), + "QSequentialAnimationGroup.duration": (), + "QSequentialAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QSequentialAnimationGroup.insertPause": ('int', 'int'), + "QSequentialAnimationGroup.updateCurrentTime": ('int',), + "QSequentialAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QSequentialAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QSettings: + "QSettings.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QObject'), ('str', 'str', 'PySide2.QtCore.QObject')], + "QSettings.allKeys": (), + "QSettings.applicationName": (), + "QSettings.beginGroup": ('str',), + "QSettings.beginReadArray": ('str',), + "QSettings.beginWriteArray": ('str', 'int'), + "QSettings.childGroups": (), + "QSettings.childKeys": (), + "QSettings.clear": (), + "QSettings.contains": ('str',), + "QSettings.defaultFormat": (), + "QSettings.endArray": (), + "QSettings.endGroup": (), + "QSettings.event": ('PySide2.QtCore.QEvent',), + "QSettings.fallbacksEnabled": (), + "QSettings.fileName": (), + "QSettings.format": (), + "QSettings.group": (), + "QSettings.iniCodec": (), + "QSettings.isAtomicSyncRequired": (), + "QSettings.isWritable": (), + "QSettings.organizationName": (), + "QSettings.remove": ('str',), + "QSettings.scope": (), + "QSettings.setArrayIndex": ('int',), + "QSettings.setAtomicSyncRequired": ('bool',), + "QSettings.setDefaultFormat": ('PySide2.QtCore.QSettings.Format',), + "QSettings.setFallbacksEnabled": ('bool',), + "QSettings.setIniCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QSettings.setPath": ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str'), + "QSettings.setValue": ('str', 'Any'), + "QSettings.status": (), + "QSettings.sync": (), + "QSettings.value": ('str', 'Any'), + + # class PySide2.QtCore.QSignalBlocker: + "QSignalBlocker.__init__": ('PySide2.QtCore.QObject',), + "QSignalBlocker.reblock": (), + "QSignalBlocker.unblock": (), + + # class PySide2.QtCore.QSignalMapper: + "QSignalMapper.__init__": ('PySide2.QtCore.QObject',), + "QSignalMapper.map": [(), ('PySide2.QtCore.QObject',)], + "QSignalMapper.mapping": [('PySide2.QtCore.QObject',), ('int',), ('str',)], + "QSignalMapper.removeMappings": ('PySide2.QtCore.QObject',), + "QSignalMapper.setMapping": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + + # class PySide2.QtCore.QSignalTransition: + "QSignalTransition.__init__": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',), ('object', 'PySide2.QtCore.QState')], + "QSignalTransition.event": ('PySide2.QtCore.QEvent',), + "QSignalTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QSignalTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QSignalTransition.senderObject": (), + "QSignalTransition.setSenderObject": ('PySide2.QtCore.QObject',), + "QSignalTransition.setSignal": ('PySide2.QtCore.QByteArray',), + "QSignalTransition.signal": (), + + # class PySide2.QtCore.QSize: + "QSize.__init__": [(), ('PySide2.QtCore.QSize',), ('int', 'int')], + "QSize.__copy__": (), + "QSize.__reduce__": (), + "QSize.boundedTo": ('PySide2.QtCore.QSize',), + "QSize.expandedTo": ('PySide2.QtCore.QSize',), + "QSize.height": (), + "QSize.isEmpty": (), + "QSize.isNull": (), + "QSize.isValid": (), + "QSize.scale": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.setHeight": ('int',), + "QSize.setWidth": ('int',), + "QSize.toTuple": (), + "QSize.transpose": (), + "QSize.transposed": (), + "QSize.width": (), + + # class PySide2.QtCore.QSizeF: + "QSizeF.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QSizeF.__copy__": (), + "QSizeF.__reduce__": (), + "QSizeF.boundedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.expandedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.height": (), + "QSizeF.isEmpty": (), + "QSizeF.isNull": (), + "QSizeF.isValid": (), + "QSizeF.scale": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.scaled": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.setHeight": ('float',), + "QSizeF.setWidth": ('float',), + "QSizeF.toSize": (), + "QSizeF.toTuple": (), + "QSizeF.transpose": (), + "QSizeF.transposed": (), + "QSizeF.width": (), + + # class PySide2.QtCore.QSocketNotifier: + "QSocketNotifier.__init__": [('int', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject'), ('object', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject')], + "QSocketNotifier.event": ('PySide2.QtCore.QEvent',), + "QSocketNotifier.isEnabled": (), + "QSocketNotifier.setEnabled": ('bool',), + "QSocketNotifier.socket": (), + "QSocketNotifier.type": (), + + # class PySide2.QtCore.QSortFilterProxyModel: + "QSortFilterProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QSortFilterProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSortFilterProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.dynamicSortFilter": (), + "QSortFilterProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.filterAcceptsColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterAcceptsRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterCaseSensitivity": (), + "QSortFilterProxyModel.filterKeyColumn": (), + "QSortFilterProxyModel.filterRegExp": (), + "QSortFilterProxyModel.filterRole": (), + "QSortFilterProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSortFilterProxyModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.invalidate": (), + "QSortFilterProxyModel.invalidateFilter": (), + "QSortFilterProxyModel.isRecursiveFilteringEnabled": (), + "QSortFilterProxyModel.isSortLocaleAware": (), + "QSortFilterProxyModel.lessThan": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'PySide2.libpyside.MatchFlags'), + "QSortFilterProxyModel.mimeData": ('List[int]',), + "QSortFilterProxyModel.mimeTypes": (), + "QSortFilterProxyModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QSortFilterProxyModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSortFilterProxyModel.setDynamicSortFilter": ('bool',), + "QSortFilterProxyModel.setFilterCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setFilterFixedString": ('str',), + "QSortFilterProxyModel.setFilterKeyColumn": ('int',), + "QSortFilterProxyModel.setFilterRegExp": [('PySide2.QtCore.QRegExp',), ('str',)], + "QSortFilterProxyModel.setFilterRole": ('int',), + "QSortFilterProxyModel.setFilterWildcard": ('str',), + "QSortFilterProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QSortFilterProxyModel.setRecursiveFilteringEnabled": ('bool',), + "QSortFilterProxyModel.setSortCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setSortLocaleAware": ('bool',), + "QSortFilterProxyModel.setSortRole": ('int',), + "QSortFilterProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QSortFilterProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSortFilterProxyModel.sortCaseSensitivity": (), + "QSortFilterProxyModel.sortColumn": (), + "QSortFilterProxyModel.sortOrder": (), + "QSortFilterProxyModel.sortRole": (), + "QSortFilterProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QStandardPaths: + "QStandardPaths.displayName": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.enableTestMode": ('bool',), + "QStandardPaths.findExecutable": ('str', 'List[str]'), + "QStandardPaths.isTestModeEnabled": (), + "QStandardPaths.locate": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'PySide2.libpyside.LocateOptions'), + "QStandardPaths.locateAll": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'PySide2.libpyside.LocateOptions'), + "QStandardPaths.setTestModeEnabled": ('bool',), + "QStandardPaths.standardLocations": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.writableLocation": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + + # class PySide2.QtCore.QState: + "QState.__init__": [('PySide2.QtCore.QState',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QState')], + "QState.addTransition": [('PySide2.QtCore.QAbstractState',), ('PySide2.QtCore.QAbstractTransition',), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QAbstractState'), ('object', 'PySide2.QtCore.QAbstractState')], + "QState.assignProperty": ('PySide2.QtCore.QObject', 'str', 'Any'), + "QState.childMode": (), + "QState.errorState": (), + "QState.event": ('PySide2.QtCore.QEvent',), + "QState.initialState": (), + "QState.onEntry": ('PySide2.QtCore.QEvent',), + "QState.onExit": ('PySide2.QtCore.QEvent',), + "QState.removeTransition": ('PySide2.QtCore.QAbstractTransition',), + "QState.setChildMode": ('PySide2.QtCore.QState.ChildMode',), + "QState.setErrorState": ('PySide2.QtCore.QAbstractState',), + "QState.setInitialState": ('PySide2.QtCore.QAbstractState',), + "QState.transitions": (), + + # class PySide2.QtCore.QStateMachine: + "QStateMachine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QObject')], + "QStateMachine.addDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.addState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.beginMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.beginSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.cancelDelayedEvent": ('int',), + "QStateMachine.clearError": (), + "QStateMachine.configuration": (), + "QStateMachine.defaultAnimations": (), + "QStateMachine.endMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.endSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.error": (), + "QStateMachine.errorString": (), + "QStateMachine.event": ('PySide2.QtCore.QEvent',), + "QStateMachine.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStateMachine.globalRestorePolicy": (), + "QStateMachine.isAnimated": (), + "QStateMachine.isRunning": (), + "QStateMachine.onEntry": ('PySide2.QtCore.QEvent',), + "QStateMachine.onExit": ('PySide2.QtCore.QEvent',), + "QStateMachine.postDelayedEvent": ('PySide2.QtCore.QEvent', 'int'), + "QStateMachine.postEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QStateMachine.EventPriority'), + "QStateMachine.removeDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.removeState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.setAnimated": ('bool',), + "QStateMachine.setGlobalRestorePolicy": ('PySide2.QtCore.QState.RestorePolicy',), + "QStateMachine.setRunning": ('bool',), + "QStateMachine.start": (), + "QStateMachine.stop": (), + + # class PySide2.QtCore.QStorageInfo: + "QStorageInfo.__init__": [(), ('PySide2.QtCore.QDir',), ('PySide2.QtCore.QStorageInfo',), ('str',)], + "QStorageInfo.__copy__": (), + "QStorageInfo.blockSize": (), + "QStorageInfo.bytesAvailable": (), + "QStorageInfo.bytesFree": (), + "QStorageInfo.bytesTotal": (), + "QStorageInfo.device": (), + "QStorageInfo.displayName": (), + "QStorageInfo.fileSystemType": (), + "QStorageInfo.isReadOnly": (), + "QStorageInfo.isReady": (), + "QStorageInfo.isRoot": (), + "QStorageInfo.isValid": (), + "QStorageInfo.mountedVolumes": (), + "QStorageInfo.name": (), + "QStorageInfo.refresh": (), + "QStorageInfo.root": (), + "QStorageInfo.rootPath": (), + "QStorageInfo.setPath": ('str',), + "QStorageInfo.subvolume": (), + "QStorageInfo.swap": ('PySide2.QtCore.QStorageInfo',), + + # class PySide2.QtCore.QStringListModel: + "QStringListModel.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QStringListModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStringListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QStringListModel.setStringList": ('List[str]',), + "QStringListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStringListModel.stringList": (), + "QStringListModel.supportedDropActions": (), + + # class PySide2.QtCore.QSysInfo: + "QSysInfo.__init__": (), + "QSysInfo.bootUniqueId": (), + "QSysInfo.buildAbi": (), + "QSysInfo.buildCpuArchitecture": (), + "QSysInfo.currentCpuArchitecture": (), + "QSysInfo.kernelType": (), + "QSysInfo.kernelVersion": (), + "QSysInfo.machineHostName": (), + "QSysInfo.machineUniqueId": (), + "QSysInfo.prettyProductName": (), + "QSysInfo.productType": (), + "QSysInfo.productVersion": (), + + # class PySide2.QtCore.QSystemSemaphore: + "QSystemSemaphore.__init__": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + "QSystemSemaphore.acquire": (), + "QSystemSemaphore.error": (), + "QSystemSemaphore.errorString": (), + "QSystemSemaphore.key": (), + "QSystemSemaphore.release": ('int',), + "QSystemSemaphore.setKey": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + + # class PySide2.QtCore.QTemporaryDir: + "QTemporaryDir.__init__": [(), ('str',)], + "QTemporaryDir.autoRemove": (), + "QTemporaryDir.errorString": (), + "QTemporaryDir.filePath": ('str',), + "QTemporaryDir.isValid": (), + "QTemporaryDir.path": (), + "QTemporaryDir.remove": (), + "QTemporaryDir.setAutoRemove": ('bool',), + + # class PySide2.QtCore.QTemporaryFile: + "QTemporaryFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QTemporaryFile.autoRemove": (), + "QTemporaryFile.createLocalFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.createNativeFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.fileName": (), + "QTemporaryFile.fileTemplate": (), + "QTemporaryFile.open": [(), ('PySide2.libpyside.OpenMode',)], + "QTemporaryFile.rename": ('str',), + "QTemporaryFile.setAutoRemove": ('bool',), + "QTemporaryFile.setFileTemplate": ('str',), + + # class PySide2.QtCore.QTextBoundaryFinder: + "QTextBoundaryFinder.__init__": [(), ('PySide2.QtCore.QTextBoundaryFinder',), ('PySide2.QtCore.QTextBoundaryFinder.BoundaryType', 'str')], + "QTextBoundaryFinder.__copy__": (), + "QTextBoundaryFinder.boundaryReasons": (), + "QTextBoundaryFinder.isAtBoundary": (), + "QTextBoundaryFinder.isValid": (), + "QTextBoundaryFinder.position": (), + "QTextBoundaryFinder.setPosition": ('int',), + "QTextBoundaryFinder.string": (), + "QTextBoundaryFinder.toEnd": (), + "QTextBoundaryFinder.toNextBoundary": (), + "QTextBoundaryFinder.toPreviousBoundary": (), + "QTextBoundaryFinder.toStart": (), + "QTextBoundaryFinder.type": (), + + # class PySide2.QtCore.QTextCodec: + "QTextCodec.__init__": (), + "QTextCodec.aliases": (), + "QTextCodec.availableCodecs": (), + "QTextCodec.availableMibs": (), + "QTextCodec.canEncode": [('Union[str, int]',), ('str',)], + "QTextCodec.codecForHtml": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.codecForLocale": (), + "QTextCodec.codecForMib": ('int',), + "QTextCodec.codecForName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QTextCodec.codecForUtfText": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.convertToUnicode": ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState'), + "QTextCodec.fromUnicode": ('str',), + "QTextCodec.makeDecoder": ('PySide2.libpyside.ConversionFlags',), + "QTextCodec.makeEncoder": ('PySide2.libpyside.ConversionFlags',), + "QTextCodec.mibEnum": (), + "QTextCodec.name": (), + "QTextCodec.setCodecForLocale": ('PySide2.QtCore.QTextCodec',), + "QTextCodec.toUnicode": [('PySide2.QtCore.QByteArray',), ('str',), ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState')], + + # class PySide2.QtCore.QTextDecoder: + "QTextDecoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'PySide2.libpyside.ConversionFlags')], + "QTextDecoder.hasFailure": (), + "QTextDecoder.toUnicode": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QTextEncoder: + "QTextEncoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'PySide2.libpyside.ConversionFlags')], + "QTextEncoder.fromUnicode": ('str',), + "QTextEncoder.hasFailure": (), + + # class PySide2.QtCore.QTextStream: + "QTextStream.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.libpyside.OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QTextStream.atEnd": (), + "QTextStream.autoDetectUnicode": (), + "QTextStream.codec": (), + "QTextStream.device": (), + "QTextStream.fieldAlignment": (), + "QTextStream.fieldWidth": (), + "QTextStream.flush": (), + "QTextStream.generateByteOrderMark": (), + "QTextStream.integerBase": (), + "QTextStream.locale": (), + "QTextStream.numberFlags": (), + "QTextStream.padChar": (), + "QTextStream.pos": (), + "QTextStream.read": ('int',), + "QTextStream.readAll": (), + "QTextStream.readLine": ('int',), + "QTextStream.realNumberNotation": (), + "QTextStream.realNumberPrecision": (), + "QTextStream.reset": (), + "QTextStream.resetStatus": (), + "QTextStream.seek": ('int',), + "QTextStream.setAutoDetectUnicode": ('bool',), + "QTextStream.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QTextStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextStream.setFieldAlignment": ('PySide2.QtCore.QTextStream.FieldAlignment',), + "QTextStream.setFieldWidth": ('int',), + "QTextStream.setGenerateByteOrderMark": ('bool',), + "QTextStream.setIntegerBase": ('int',), + "QTextStream.setLocale": ('PySide2.QtCore.QLocale',), + "QTextStream.setNumberFlags": ('PySide2.libpyside.NumberFlags',), + "QTextStream.setPadChar": ('Union[str, int]',), + "QTextStream.setRealNumberNotation": ('PySide2.QtCore.QTextStream.RealNumberNotation',), + "QTextStream.setRealNumberPrecision": ('int',), + "QTextStream.setStatus": ('PySide2.QtCore.QTextStream.Status',), + "QTextStream.skipWhiteSpace": (), + "QTextStream.status": (), + "QTextStream.string": (), + + # class PySide2.QtCore.QTextStreamManipulator: + "QTextStreamManipulator.__copy__": (), + "QTextStreamManipulator.exec_": ('PySide2.QtCore.QTextStream',), + + # class PySide2.QtCore.QThread: + "QThread.__init__": ('PySide2.QtCore.QObject',), + "QThread.currentThread": (), + "QThread.event": ('PySide2.QtCore.QEvent',), + "QThread.eventDispatcher": (), + "QThread.exec_": (), + "QThread.exit": ('int',), + "QThread.idealThreadCount": (), + "QThread.isFinished": (), + "QThread.isInterruptionRequested": (), + "QThread.isRunning": (), + "QThread.loopLevel": (), + "QThread.msleep": ('int',), + "QThread.priority": (), + "QThread.quit": (), + "QThread.requestInterruption": (), + "QThread.run": (), + "QThread.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QThread.setPriority": ('PySide2.QtCore.QThread.Priority',), + "QThread.setStackSize": ('int',), + "QThread.setTerminationEnabled": ('bool',), + "QThread.sleep": ('int',), + "QThread.stackSize": (), + "QThread.start": ('PySide2.QtCore.QThread.Priority',), + "QThread.terminate": (), + "QThread.usleep": ('int',), + "QThread.wait": ('int',), + "QThread.yieldCurrentThread": (), + + # class PySide2.QtCore.QThreadPool: + "QThreadPool.__init__": ('PySide2.QtCore.QObject',), + "QThreadPool.activeThreadCount": (), + "QThreadPool.cancel": ('PySide2.QtCore.QRunnable',), + "QThreadPool.clear": (), + "QThreadPool.expiryTimeout": (), + "QThreadPool.globalInstance": (), + "QThreadPool.maxThreadCount": (), + "QThreadPool.releaseThread": (), + "QThreadPool.reserveThread": (), + "QThreadPool.setExpiryTimeout": ('int',), + "QThreadPool.setMaxThreadCount": ('int',), + "QThreadPool.setStackSize": ('int',), + "QThreadPool.stackSize": (), + "QThreadPool.start": ('PySide2.QtCore.QRunnable', 'int'), + "QThreadPool.tryStart": ('PySide2.QtCore.QRunnable',), + "QThreadPool.tryTake": ('PySide2.QtCore.QRunnable',), + "QThreadPool.waitForDone": ('int',), + + # class PySide2.QtCore.QTime: + "QTime.__init__": [(), ('PySide2.QtCore.QTime',), ('int', 'int', 'int', 'int')], + "QTime.__copy__": (), + "QTime.__reduce__": (), + "QTime.addMSecs": ('int',), + "QTime.addSecs": ('int',), + "QTime.currentTime": (), + "QTime.elapsed": (), + "QTime.fromMSecsSinceStartOfDay": ('int',), + "QTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QTime.hour": (), + "QTime.isNull": (), + "QTime.isValid": [(), ('int', 'int', 'int', 'int')], + "QTime.minute": (), + "QTime.msec": (), + "QTime.msecsSinceStartOfDay": (), + "QTime.msecsTo": ('PySide2.QtCore.QTime',), + "QTime.restart": (), + "QTime.second": (), + "QTime.secsTo": ('PySide2.QtCore.QTime',), + "QTime.setHMS": ('int', 'int', 'int', 'int'), + "QTime.start": (), + "QTime.toPython": (), + "QTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + + # class PySide2.QtCore.QTimeLine: + "QTimeLine.__init__": ('int', 'PySide2.QtCore.QObject'), + "QTimeLine.currentFrame": (), + "QTimeLine.currentTime": (), + "QTimeLine.currentValue": (), + "QTimeLine.curveShape": (), + "QTimeLine.direction": (), + "QTimeLine.duration": (), + "QTimeLine.easingCurve": (), + "QTimeLine.endFrame": (), + "QTimeLine.frameForTime": ('int',), + "QTimeLine.loopCount": (), + "QTimeLine.resume": (), + "QTimeLine.setCurrentTime": ('int',), + "QTimeLine.setCurveShape": ('PySide2.QtCore.QTimeLine.CurveShape',), + "QTimeLine.setDirection": ('PySide2.QtCore.QTimeLine.Direction',), + "QTimeLine.setDuration": ('int',), + "QTimeLine.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QTimeLine.setEndFrame": ('int',), + "QTimeLine.setFrameRange": ('int', 'int'), + "QTimeLine.setLoopCount": ('int',), + "QTimeLine.setPaused": ('bool',), + "QTimeLine.setStartFrame": ('int',), + "QTimeLine.setUpdateInterval": ('int',), + "QTimeLine.start": (), + "QTimeLine.startFrame": (), + "QTimeLine.state": (), + "QTimeLine.stop": (), + "QTimeLine.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimeLine.toggleDirection": (), + "QTimeLine.updateInterval": (), + "QTimeLine.valueForTime": ('int',), + + # class PySide2.QtCore.QTimeZone: + "QTimeZone.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'int', 'str', 'str', 'PySide2.QtCore.QLocale.Country', 'str'), ('PySide2.QtCore.QTimeZone',), ('int',)], + "QTimeZone.__copy__": (), + "QTimeZone.abbreviation": ('PySide2.QtCore.QDateTime',), + "QTimeZone.availableTimeZoneIds": [(), ('PySide2.QtCore.QLocale.Country',), ('int',)], + "QTimeZone.comment": (), + "QTimeZone.country": (), + "QTimeZone.daylightTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.displayName": [('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale'), ('PySide2.QtCore.QTimeZone.TimeType', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale')], + "QTimeZone.hasDaylightTime": (), + "QTimeZone.hasTransitions": (), + "QTimeZone.ianaIdToWindowsId": ('PySide2.QtCore.QByteArray',), + "QTimeZone.id": (), + "QTimeZone.isDaylightTime": ('PySide2.QtCore.QDateTime',), + "QTimeZone.isTimeZoneIdAvailable": ('PySide2.QtCore.QByteArray',), + "QTimeZone.isValid": (), + "QTimeZone.nextTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetData": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetFromUtc": ('PySide2.QtCore.QDateTime',), + "QTimeZone.previousTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.standardTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.swap": ('PySide2.QtCore.QTimeZone',), + "QTimeZone.systemTimeZone": (), + "QTimeZone.systemTimeZoneId": (), + "QTimeZone.transitions": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QTimeZone.utc": (), + "QTimeZone.windowsIdToDefaultIanaId": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + "QTimeZone.windowsIdToIanaIds": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + + # class PySide2.QtCore.QTimer: + "QTimer.__init__": ('PySide2.QtCore.QObject',), + "QTimer.interval": (), + "QTimer.isActive": (), + "QTimer.isSingleShot": (), + "QTimer.killTimer": ('int',), + "QTimer.remainingTime": (), + "QTimer.setInterval": ('int',), + "QTimer.setSingleShot": ('bool',), + "QTimer.setTimerType": ('PySide2.QtCore.Qt.TimerType',), + "QTimer.singleShot": [('int', 'Callable'), ('int', 'PySide2.QtCore.QObject', 'str'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject', 'str')], + "QTimer.start": [(), ('int',)], + "QTimer.stop": (), + "QTimer.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimer.timerId": (), + "QTimer.timerType": (), + + # class PySide2.QtCore.QTimerEvent: + "QTimerEvent.__init__": ('int',), + "QTimerEvent.timerId": (), + + # class PySide2.QtCore.QTranslator: + "QTranslator.__init__": ('PySide2.QtCore.QObject',), + "QTranslator.isEmpty": (), + "QTranslator.load": [('PySide2.QtCore.QLocale', 'str', 'str', 'str', 'str'), ('Union[str, int]', 'int', 'str'), ('str', 'str', 'str', 'str')], + "QTranslator.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QUrl: + "QUrl.__init__": [(), ('PySide2.QtCore.QUrl',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.__copy__": (), + "QUrl.__reduce__": (), + "QUrl.adjusted": ('PySide2.libpyside.FormattingOptions',), + "QUrl.authority": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.clear": (), + "QUrl.errorString": (), + "QUrl.fileName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fragment": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fromAce": ('PySide2.QtCore.QByteArray',), + "QUrl.fromEncoded": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromLocalFile": ('str',), + "QUrl.fromPercentEncoding": ('PySide2.QtCore.QByteArray',), + "QUrl.fromStringList": ('List[str]', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromUserInput": [('str',), ('str', 'str', 'PySide2.libpyside.UserInputResolutionOptions')], + "QUrl.hasFragment": (), + "QUrl.hasQuery": (), + "QUrl.host": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.idnWhitelist": (), + "QUrl.isEmpty": (), + "QUrl.isLocalFile": (), + "QUrl.isParentOf": ('PySide2.QtCore.QUrl',), + "QUrl.isRelative": (), + "QUrl.isValid": (), + "QUrl.matches": ('PySide2.QtCore.QUrl', 'PySide2.libpyside.FormattingOptions'), + "QUrl.password": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.path": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.port": ('int',), + "QUrl.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.resolved": ('PySide2.QtCore.QUrl',), + "QUrl.scheme": (), + "QUrl.setAuthority": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setFragment": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setHost": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setIdnWhitelist": ('List[str]',), + "QUrl.setPassword": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPath": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPort": ('int',), + "QUrl.setQuery": [('PySide2.QtCore.QUrlQuery',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.setScheme": ('str',), + "QUrl.setUrl": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserInfo": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserName": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.swap": ('PySide2.QtCore.QUrl',), + "QUrl.toAce": ('str',), + "QUrl.toDisplayString": ('PySide2.libpyside.FormattingOptions',), + "QUrl.toEncoded": ('PySide2.libpyside.FormattingOptions',), + "QUrl.toLocalFile": (), + "QUrl.toPercentEncoding": ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QUrl.toString": ('PySide2.libpyside.FormattingOptions',), + "QUrl.toStringList": ('list', 'PySide2.libpyside.FormattingOptions'), + "QUrl.topLevelDomain": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.url": ('PySide2.libpyside.FormattingOptions',), + "QUrl.userInfo": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.userName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QUrlQuery: + "QUrlQuery.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrlQuery',), ('str',)], + "QUrlQuery.__copy__": (), + "QUrlQuery.addQueryItem": ('str', 'str'), + "QUrlQuery.allQueryItemValues": ('str', 'PySide2.QtCore.QUrl.ComponentFormattingOption'), + "QUrlQuery.clear": (), + "QUrlQuery.defaultQueryPairDelimiter": (), + "QUrlQuery.defaultQueryValueDelimiter": (), + "QUrlQuery.hasQueryItem": ('str',), + "QUrlQuery.isEmpty": (), + "QUrlQuery.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrlQuery.queryItemValue": ('str', 'PySide2.QtCore.QUrl.ComponentFormattingOption'), + "QUrlQuery.queryItems": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrlQuery.queryPairDelimiter": (), + "QUrlQuery.queryValueDelimiter": (), + "QUrlQuery.removeAllQueryItems": ('str',), + "QUrlQuery.removeQueryItem": ('str',), + "QUrlQuery.setQuery": ('str',), + "QUrlQuery.setQueryDelimiters": ('Union[str, int]', 'Union[str, int]'), + "QUrlQuery.setQueryItems": ('list',), + "QUrlQuery.swap": ('PySide2.QtCore.QUrlQuery',), + "QUrlQuery.toString": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QUuid: + "QUuid.__init__": [(), ('PySide2.QtCore.QByteArray',), ('int', 'int', 'int', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), ('str',)], + "QUuid.__copy__": (), + "QUuid.__reduce__": (), + "QUuid.createUuid": (), + "QUuid.createUuidV3": [('PySide2.QtCore.QUuid', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QUuid', 'str')], + "QUuid.createUuidV5": [('PySide2.QtCore.QUuid', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QUuid', 'str')], + "QUuid.fromRfc4122": ('PySide2.QtCore.QByteArray',), + "QUuid.isNull": (), + "QUuid.toByteArray": [(), ('PySide2.QtCore.QUuid.StringFormat',)], + "QUuid.toRfc4122": (), + "QUuid.toString": [(), ('PySide2.QtCore.QUuid.StringFormat',)], + "QUuid.variant": (), + "QUuid.version": (), + + # class PySide2.QtCore.QVariantAnimation: + "QVariantAnimation.__init__": ('PySide2.QtCore.QObject',), + "QVariantAnimation.currentValue": (), + "QVariantAnimation.duration": (), + "QVariantAnimation.easingCurve": (), + "QVariantAnimation.endValue": (), + "QVariantAnimation.event": ('PySide2.QtCore.QEvent',), + "QVariantAnimation.interpolated": ('Any', 'Any', 'float'), + "QVariantAnimation.keyValueAt": ('float',), + "QVariantAnimation.setDuration": ('int',), + "QVariantAnimation.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QVariantAnimation.setEndValue": ('Any',), + "QVariantAnimation.setKeyValueAt": ('float', 'Any'), + "QVariantAnimation.setStartValue": ('Any',), + "QVariantAnimation.startValue": (), + "QVariantAnimation.updateCurrentTime": ('int',), + "QVariantAnimation.updateCurrentValue": ('Any',), + "QVariantAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QVersionNumber: + "QVersionNumber.__init__": [(), ('int',), ('int', 'int'), ('int', 'int', 'int'), ('list',)], + "QVersionNumber.__copy__": (), + "QVersionNumber.commonPrefix": ('PySide2.QtCore.QVersionNumber', 'PySide2.QtCore.QVersionNumber'), + "QVersionNumber.compare": ('PySide2.QtCore.QVersionNumber', 'PySide2.QtCore.QVersionNumber'), + "QVersionNumber.fromString": ('str', 'int'), + "QVersionNumber.isNormalized": (), + "QVersionNumber.isNull": (), + "QVersionNumber.isPrefixOf": ('PySide2.QtCore.QVersionNumber',), + "QVersionNumber.majorVersion": (), + "QVersionNumber.microVersion": (), + "QVersionNumber.minorVersion": (), + "QVersionNumber.normalized": (), + "QVersionNumber.segmentAt": ('int',), + "QVersionNumber.segmentCount": (), + "QVersionNumber.segments": (), + "QVersionNumber.toString": (), + + # class PySide2.QtCore.QWaitCondition: + "QWaitCondition.__init__": (), + "QWaitCondition.notify_all": (), + "QWaitCondition.notify_one": (), + "QWaitCondition.wait": [('PySide2.QtCore.QMutex', 'int'), ('PySide2.QtCore.QReadWriteLock', 'int')], + "QWaitCondition.wakeAll": (), + "QWaitCondition.wakeOne": (), + + # class PySide2.QtCore.QWriteLocker: + "QWriteLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QWriteLocker.__enter__": (), + "QWriteLocker.__exit__": ('object', 'object', 'object'), + "QWriteLocker.readWriteLock": (), + "QWriteLocker.relock": (), + "QWriteLocker.unlock": (), + + # class PySide2.QtCore.QXmlStreamAttribute: + "QXmlStreamAttribute.__init__": [(), ('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttribute.__copy__": (), + "QXmlStreamAttribute.isDefault": (), + "QXmlStreamAttribute.name": (), + "QXmlStreamAttribute.namespaceUri": (), + "QXmlStreamAttribute.prefix": (), + "QXmlStreamAttribute.qualifiedName": (), + "QXmlStreamAttribute.value": (), + + # class PySide2.QtCore.QXmlStreamAttributes: + "QXmlStreamAttributes.__init__": [(), ('PySide2.QtCore.QXmlStreamAttributes',)], + "QXmlStreamAttributes.__copy__": (), + "QXmlStreamAttributes.append": [('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttributes.at": ('int',), + "QXmlStreamAttributes.capacity": (), + "QXmlStreamAttributes.clear": (), + "QXmlStreamAttributes.constData": (), + "QXmlStreamAttributes.constFirst": (), + "QXmlStreamAttributes.constLast": (), + "QXmlStreamAttributes.contains": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.count": [(), ('PySide2.QtCore.QXmlStreamAttribute',)], + "QXmlStreamAttributes.data": (), + "QXmlStreamAttributes.empty": (), + "QXmlStreamAttributes.endsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.fill": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.first": (), + "QXmlStreamAttributes.front": (), + "QXmlStreamAttributes.hasAttribute": [('str',), ('str', 'str')], + "QXmlStreamAttributes.indexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.insert": [('int', 'PySide2.QtCore.QXmlStreamAttribute'), ('int', 'int', 'PySide2.QtCore.QXmlStreamAttribute')], + "QXmlStreamAttributes.isEmpty": (), + "QXmlStreamAttributes.isSharedWith": ('list',), + "QXmlStreamAttributes.last": (), + "QXmlStreamAttributes.lastIndexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.length": (), + "QXmlStreamAttributes.mid": ('int', 'int'), + "QXmlStreamAttributes.move": ('int', 'int'), + "QXmlStreamAttributes.prepend": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.remove": [('int',), ('int', 'int')], + "QXmlStreamAttributes.removeAll": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.removeAt": ('int',), + "QXmlStreamAttributes.removeFirst": (), + "QXmlStreamAttributes.removeLast": (), + "QXmlStreamAttributes.removeOne": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.replace": ('int', 'PySide2.QtCore.QXmlStreamAttribute'), + "QXmlStreamAttributes.reserve": ('int',), + "QXmlStreamAttributes.resize": ('int',), + "QXmlStreamAttributes.setSharable": ('bool',), + "QXmlStreamAttributes.shrink_to_fit": (), + "QXmlStreamAttributes.size": (), + "QXmlStreamAttributes.squeeze": (), + "QXmlStreamAttributes.startsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.swap": ('list',), + "QXmlStreamAttributes.takeAt": ('int',), + "QXmlStreamAttributes.takeFirst": (), + "QXmlStreamAttributes.takeLast": (), + "QXmlStreamAttributes.value": [('str',), ('str', 'str')], + + # class PySide2.QtCore.QXmlStreamEntityDeclaration: + "QXmlStreamEntityDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamEntityDeclaration',)], + "QXmlStreamEntityDeclaration.__copy__": (), + "QXmlStreamEntityDeclaration.name": (), + "QXmlStreamEntityDeclaration.notationName": (), + "QXmlStreamEntityDeclaration.publicId": (), + "QXmlStreamEntityDeclaration.systemId": (), + "QXmlStreamEntityDeclaration.value": (), + + # class PySide2.QtCore.QXmlStreamEntityResolver: + "QXmlStreamEntityResolver.__init__": (), + "QXmlStreamEntityResolver.resolveEntity": ('str', 'str'), + "QXmlStreamEntityResolver.resolveUndeclaredEntity": ('str',), + + # class PySide2.QtCore.QXmlStreamNamespaceDeclaration: + "QXmlStreamNamespaceDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), ('str', 'str')], + "QXmlStreamNamespaceDeclaration.__copy__": (), + "QXmlStreamNamespaceDeclaration.namespaceUri": (), + "QXmlStreamNamespaceDeclaration.prefix": (), + + # class PySide2.QtCore.QXmlStreamNotationDeclaration: + "QXmlStreamNotationDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNotationDeclaration',)], + "QXmlStreamNotationDeclaration.__copy__": (), + "QXmlStreamNotationDeclaration.name": (), + "QXmlStreamNotationDeclaration.publicId": (), + "QXmlStreamNotationDeclaration.systemId": (), + + # class PySide2.QtCore.QXmlStreamReader: + "QXmlStreamReader.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str',)], + "QXmlStreamReader.addData": [('PySide2.QtCore.QByteArray',), ('str',)], + "QXmlStreamReader.addExtraNamespaceDeclaration": ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), + "QXmlStreamReader.addExtraNamespaceDeclarations": ('list',), + "QXmlStreamReader.atEnd": (), + "QXmlStreamReader.attributes": (), + "QXmlStreamReader.characterOffset": (), + "QXmlStreamReader.clear": (), + "QXmlStreamReader.columnNumber": (), + "QXmlStreamReader.device": (), + "QXmlStreamReader.documentEncoding": (), + "QXmlStreamReader.documentVersion": (), + "QXmlStreamReader.dtdName": (), + "QXmlStreamReader.dtdPublicId": (), + "QXmlStreamReader.dtdSystemId": (), + "QXmlStreamReader.entityDeclarations": (), + "QXmlStreamReader.entityResolver": (), + "QXmlStreamReader.error": (), + "QXmlStreamReader.errorString": (), + "QXmlStreamReader.hasError": (), + "QXmlStreamReader.isCDATA": (), + "QXmlStreamReader.isCharacters": (), + "QXmlStreamReader.isComment": (), + "QXmlStreamReader.isDTD": (), + "QXmlStreamReader.isEndDocument": (), + "QXmlStreamReader.isEndElement": (), + "QXmlStreamReader.isEntityReference": (), + "QXmlStreamReader.isProcessingInstruction": (), + "QXmlStreamReader.isStandaloneDocument": (), + "QXmlStreamReader.isStartDocument": (), + "QXmlStreamReader.isStartElement": (), + "QXmlStreamReader.isWhitespace": (), + "QXmlStreamReader.lineNumber": (), + "QXmlStreamReader.name": (), + "QXmlStreamReader.namespaceDeclarations": (), + "QXmlStreamReader.namespaceProcessing": (), + "QXmlStreamReader.namespaceUri": (), + "QXmlStreamReader.notationDeclarations": (), + "QXmlStreamReader.prefix": (), + "QXmlStreamReader.processingInstructionData": (), + "QXmlStreamReader.processingInstructionTarget": (), + "QXmlStreamReader.qualifiedName": (), + "QXmlStreamReader.raiseError": ('str',), + "QXmlStreamReader.readElementText": ('PySide2.QtCore.QXmlStreamReader.ReadElementTextBehaviour',), + "QXmlStreamReader.readNext": (), + "QXmlStreamReader.readNextStartElement": (), + "QXmlStreamReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamReader.setEntityResolver": ('PySide2.QtCore.QXmlStreamEntityResolver',), + "QXmlStreamReader.setNamespaceProcessing": ('bool',), + "QXmlStreamReader.skipCurrentElement": (), + "QXmlStreamReader.text": (), + "QXmlStreamReader.tokenString": (), + "QXmlStreamReader.tokenType": (), + + # class PySide2.QtCore.QXmlStreamWriter: + "QXmlStreamWriter.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QXmlStreamWriter.autoFormatting": (), + "QXmlStreamWriter.autoFormattingIndent": (), + "QXmlStreamWriter.codec": (), + "QXmlStreamWriter.device": (), + "QXmlStreamWriter.hasError": (), + "QXmlStreamWriter.setAutoFormatting": ('bool',), + "QXmlStreamWriter.setAutoFormattingIndent": ('int',), + "QXmlStreamWriter.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QXmlStreamWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamWriter.writeAttribute": [('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamWriter.writeAttributes": ('PySide2.QtCore.QXmlStreamAttributes',), + "QXmlStreamWriter.writeCDATA": ('str',), + "QXmlStreamWriter.writeCharacters": ('str',), + "QXmlStreamWriter.writeComment": ('str',), + "QXmlStreamWriter.writeCurrentToken": ('PySide2.QtCore.QXmlStreamReader',), + "QXmlStreamWriter.writeDTD": ('str',), + "QXmlStreamWriter.writeDefaultNamespace": ('str',), + "QXmlStreamWriter.writeEmptyElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeEndDocument": (), + "QXmlStreamWriter.writeEndElement": (), + "QXmlStreamWriter.writeEntityReference": ('str',), + "QXmlStreamWriter.writeNamespace": ('str', 'str'), + "QXmlStreamWriter.writeProcessingInstruction": ('str', 'str'), + "QXmlStreamWriter.writeStartDocument": [(), ('str',), ('str', 'bool')], + "QXmlStreamWriter.writeStartElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeTextElement": [('str', 'str'), ('str', 'str', 'str')], + + # class PySide2.QtCore.Qt: + + # class PySide2.QtCore.QtMsgType: + + # class PySide2.QtCore.Signal: + + # class PySide2.QtCore.Slot: + }) + +# Module PySide2.QtGui +if "PySide2.QtGui" in sys.modules: + dict.update({ + + # class PySide2.QtGui.QAbstractOpenGLFunctions: + "QAbstractOpenGLFunctions.__init__": (), + "QAbstractOpenGLFunctions.initializeOpenGLFunctions": (), + "QAbstractOpenGLFunctions.isInitialized": (), + "QAbstractOpenGLFunctions.owningContext": (), + "QAbstractOpenGLFunctions.setOwningContext": ('PySide2.QtGui.QOpenGLContext',), + + # class PySide2.QtGui.QAbstractTextDocumentLayout: + "QAbstractTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QAbstractTextDocumentLayout.anchorAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QAbstractTextDocumentLayout.document": (), + "QAbstractTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QAbstractTextDocumentLayout.documentSize": (), + "QAbstractTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QAbstractTextDocumentLayout.drawInlineObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.format": ('int',), + "QAbstractTextDocumentLayout.formatAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.formatIndex": ('int',), + "QAbstractTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QAbstractTextDocumentLayout.handlerForObject": ('int',), + "QAbstractTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QAbstractTextDocumentLayout.imageAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.pageCount": (), + "QAbstractTextDocumentLayout.paintDevice": (), + "QAbstractTextDocumentLayout.positionInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.registerHandler": ('int', 'PySide2.QtCore.QObject'), + "QAbstractTextDocumentLayout.resizeInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.setPaintDevice": ('PySide2.QtGui.QPaintDevice',), + "QAbstractTextDocumentLayout.unregisterHandler": ('int', 'PySide2.QtCore.QObject'), + + # class PySide2.QtGui.QAccessible: + "QAccessible.__copy__": (), + "QAccessible.accessibleInterface": ('int',), + "QAccessible.cleanup": (), + "QAccessible.deleteAccessibleInterface": ('int',), + "QAccessible.isActive": (), + "QAccessible.qAccessibleTextBoundaryHelper": ('PySide2.QtGui.QTextCursor', 'PySide2.QtGui.QAccessible.TextBoundaryType'), + "QAccessible.queryAccessibleInterface": ('PySide2.QtCore.QObject',), + "QAccessible.registerAccessibleInterface": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessible.setActive": ('bool',), + "QAccessible.setRootObject": ('PySide2.QtCore.QObject',), + "QAccessible.uniqueId": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessible.updateAccessibility": ('PySide2.QtGui.QAccessibleEvent',), + + # class PySide2.QtGui.QAccessibleEditableTextInterface: + "QAccessibleEditableTextInterface.__init__": (), + "QAccessibleEditableTextInterface.deleteText": ('int', 'int'), + "QAccessibleEditableTextInterface.insertText": ('int', 'str'), + "QAccessibleEditableTextInterface.replaceText": ('int', 'int', 'str'), + + # class PySide2.QtGui.QAccessibleEvent: + "QAccessibleEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessible.Event'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessible.Event')], + "QAccessibleEvent.accessibleInterface": (), + "QAccessibleEvent.child": (), + "QAccessibleEvent.object": (), + "QAccessibleEvent.setChild": ('int',), + "QAccessibleEvent.type": (), + "QAccessibleEvent.uniqueId": (), + + # class PySide2.QtGui.QAccessibleInterface: + "QAccessibleInterface.__init__": (), + "QAccessibleInterface.backgroundColor": (), + "QAccessibleInterface.child": ('int',), + "QAccessibleInterface.childAt": ('int', 'int'), + "QAccessibleInterface.childCount": (), + "QAccessibleInterface.editableTextInterface": (), + "QAccessibleInterface.focusChild": (), + "QAccessibleInterface.foregroundColor": (), + "QAccessibleInterface.indexOfChild": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessibleInterface.interface_cast": ('PySide2.QtGui.QAccessible.InterfaceType',), + "QAccessibleInterface.isValid": (), + "QAccessibleInterface.object": (), + "QAccessibleInterface.parent": (), + "QAccessibleInterface.rect": (), + "QAccessibleInterface.relations": ('PySide2.libpyside.Relation',), + "QAccessibleInterface.role": (), + "QAccessibleInterface.setText": ('PySide2.QtGui.QAccessible.Text', 'str'), + "QAccessibleInterface.state": (), + "QAccessibleInterface.tableCellInterface": (), + "QAccessibleInterface.text": ('PySide2.QtGui.QAccessible.Text',), + "QAccessibleInterface.textInterface": (), + "QAccessibleInterface.valueInterface": (), + "QAccessibleInterface.virtual_hook": ('int', 'int'), + "QAccessibleInterface.window": (), + + # class PySide2.QtGui.QAccessibleObject: + "QAccessibleObject.__init__": ('PySide2.QtCore.QObject',), + "QAccessibleObject.childAt": ('int', 'int'), + "QAccessibleObject.isValid": (), + "QAccessibleObject.object": (), + "QAccessibleObject.rect": (), + "QAccessibleObject.setText": ('PySide2.QtGui.QAccessible.Text', 'str'), + + # class PySide2.QtGui.QAccessibleStateChangeEvent: + "QAccessibleStateChangeEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessible.State'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessible.State')], + "QAccessibleStateChangeEvent.changedStates": (), + + # class PySide2.QtGui.QAccessibleTableCellInterface: + "QAccessibleTableCellInterface.__init__": (), + "QAccessibleTableCellInterface.columnExtent": (), + "QAccessibleTableCellInterface.columnHeaderCells": (), + "QAccessibleTableCellInterface.columnIndex": (), + "QAccessibleTableCellInterface.isSelected": (), + "QAccessibleTableCellInterface.rowExtent": (), + "QAccessibleTableCellInterface.rowHeaderCells": (), + "QAccessibleTableCellInterface.rowIndex": (), + "QAccessibleTableCellInterface.table": (), + + # class PySide2.QtGui.QAccessibleTableModelChangeEvent: + "QAccessibleTableModelChangeEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessibleTableModelChangeEvent.ModelChangeType'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessibleTableModelChangeEvent.ModelChangeType')], + "QAccessibleTableModelChangeEvent.firstColumn": (), + "QAccessibleTableModelChangeEvent.firstRow": (), + "QAccessibleTableModelChangeEvent.lastColumn": (), + "QAccessibleTableModelChangeEvent.lastRow": (), + "QAccessibleTableModelChangeEvent.modelChangeType": (), + "QAccessibleTableModelChangeEvent.setFirstColumn": ('int',), + "QAccessibleTableModelChangeEvent.setFirstRow": ('int',), + "QAccessibleTableModelChangeEvent.setLastColumn": ('int',), + "QAccessibleTableModelChangeEvent.setLastRow": ('int',), + "QAccessibleTableModelChangeEvent.setModelChangeType": ('PySide2.QtGui.QAccessibleTableModelChangeEvent.ModelChangeType',), + + # class PySide2.QtGui.QAccessibleTextCursorEvent: + "QAccessibleTextCursorEvent.__init__": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtGui.QAccessibleInterface', 'int')], + "QAccessibleTextCursorEvent.cursorPosition": (), + "QAccessibleTextCursorEvent.setCursorPosition": ('int',), + + # class PySide2.QtGui.QAccessibleTextInsertEvent: + "QAccessibleTextInsertEvent.__init__": [('PySide2.QtCore.QObject', 'int', 'str'), ('PySide2.QtGui.QAccessibleInterface', 'int', 'str')], + "QAccessibleTextInsertEvent.changePosition": (), + "QAccessibleTextInsertEvent.textInserted": (), + + # class PySide2.QtGui.QAccessibleTextInterface: + "QAccessibleTextInterface.__init__": (), + "QAccessibleTextInterface.addSelection": ('int', 'int'), + "QAccessibleTextInterface.attributes": ('int', 'int', 'int'), + "QAccessibleTextInterface.characterCount": (), + "QAccessibleTextInterface.characterRect": ('int',), + "QAccessibleTextInterface.cursorPosition": (), + "QAccessibleTextInterface.offsetAtPoint": ('PySide2.QtCore.QPoint',), + "QAccessibleTextInterface.removeSelection": ('int',), + "QAccessibleTextInterface.scrollToSubstring": ('int', 'int'), + "QAccessibleTextInterface.selection": ('int', 'int', 'int'), + "QAccessibleTextInterface.selectionCount": (), + "QAccessibleTextInterface.setCursorPosition": ('int',), + "QAccessibleTextInterface.setSelection": ('int', 'int', 'int'), + "QAccessibleTextInterface.text": ('int', 'int'), + "QAccessibleTextInterface.textAfterOffset": ('int', 'PySide2.QtGui.QAccessible.TextBoundaryType', 'int', 'int'), + "QAccessibleTextInterface.textAtOffset": ('int', 'PySide2.QtGui.QAccessible.TextBoundaryType', 'int', 'int'), + "QAccessibleTextInterface.textBeforeOffset": ('int', 'PySide2.QtGui.QAccessible.TextBoundaryType', 'int', 'int'), + + # class PySide2.QtGui.QAccessibleTextRemoveEvent: + "QAccessibleTextRemoveEvent.__init__": [('PySide2.QtCore.QObject', 'int', 'str'), ('PySide2.QtGui.QAccessibleInterface', 'int', 'str')], + "QAccessibleTextRemoveEvent.changePosition": (), + "QAccessibleTextRemoveEvent.textRemoved": (), + + # class PySide2.QtGui.QAccessibleTextSelectionEvent: + "QAccessibleTextSelectionEvent.__init__": [('PySide2.QtCore.QObject', 'int', 'int'), ('PySide2.QtGui.QAccessibleInterface', 'int', 'int')], + "QAccessibleTextSelectionEvent.selectionEnd": (), + "QAccessibleTextSelectionEvent.selectionStart": (), + "QAccessibleTextSelectionEvent.setSelection": ('int', 'int'), + + # class PySide2.QtGui.QAccessibleTextUpdateEvent: + "QAccessibleTextUpdateEvent.__init__": [('PySide2.QtCore.QObject', 'int', 'str', 'str'), ('PySide2.QtGui.QAccessibleInterface', 'int', 'str', 'str')], + "QAccessibleTextUpdateEvent.changePosition": (), + "QAccessibleTextUpdateEvent.textInserted": (), + "QAccessibleTextUpdateEvent.textRemoved": (), + + # class PySide2.QtGui.QAccessibleValueChangeEvent: + "QAccessibleValueChangeEvent.__init__": [('PySide2.QtCore.QObject', 'Any'), ('PySide2.QtGui.QAccessibleInterface', 'Any')], + "QAccessibleValueChangeEvent.setValue": ('Any',), + "QAccessibleValueChangeEvent.value": (), + + # class PySide2.QtGui.QAccessibleValueInterface: + "QAccessibleValueInterface.__init__": (), + "QAccessibleValueInterface.currentValue": (), + "QAccessibleValueInterface.maximumValue": (), + "QAccessibleValueInterface.minimumStepSize": (), + "QAccessibleValueInterface.minimumValue": (), + "QAccessibleValueInterface.setCurrentValue": ('Any',), + + # class PySide2.QtGui.QActionEvent: + + # class PySide2.QtGui.QBackingStore: + "QBackingStore.__init__": ('PySide2.QtGui.QWindow',), + "QBackingStore.beginPaint": ('PySide2.QtGui.QRegion',), + "QBackingStore.endPaint": (), + "QBackingStore.flush": ('PySide2.QtGui.QRegion', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint'), + "QBackingStore.hasStaticContents": (), + "QBackingStore.paintDevice": (), + "QBackingStore.resize": ('PySide2.QtCore.QSize',), + "QBackingStore.scroll": ('PySide2.QtGui.QRegion', 'int', 'int'), + "QBackingStore.setStaticContents": ('PySide2.QtGui.QRegion',), + "QBackingStore.size": (), + "QBackingStore.staticContents": (), + "QBackingStore.window": (), + + # class PySide2.QtGui.QBitmap: + "QBitmap.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str')], + "QBitmap.__copy__": (), + "QBitmap.clear": (), + "QBitmap.fromData": ('PySide2.QtCore.QSize', 'Union[str, int]', 'PySide2.QtGui.QImage.Format'), + "QBitmap.fromImage": ('PySide2.QtGui.QImage', 'PySide2.libpyside.ImageConversionFlags'), + "QBitmap.swap": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',)], + "QBitmap.transformed": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform',)], + + # class PySide2.QtGui.QBrush: + "QBrush.__init__": [(), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QBrush',), ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QGradient',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',)], + "QBrush.__copy__": (), + "QBrush.color": (), + "QBrush.gradient": (), + "QBrush.isOpaque": (), + "QBrush.matrix": (), + "QBrush.setColor": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',)], + "QBrush.setMatrix": ('PySide2.QtGui.QMatrix',), + "QBrush.setStyle": ('PySide2.QtCore.Qt.BrushStyle',), + "QBrush.setTexture": ('PySide2.QtGui.QPixmap',), + "QBrush.setTextureImage": ('PySide2.QtGui.QImage',), + "QBrush.setTransform": ('PySide2.QtGui.QTransform',), + "QBrush.style": (), + "QBrush.swap": ('PySide2.QtGui.QBrush',), + "QBrush.texture": (), + "QBrush.textureImage": (), + "QBrush.transform": (), + + # class PySide2.QtGui.QClipboard: + "QClipboard.clear": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.image": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.mimeData": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.ownsClipboard": (), + "QClipboard.ownsFindBuffer": (), + "QClipboard.ownsSelection": (), + "QClipboard.pixmap": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.setImage": ('PySide2.QtGui.QImage', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setText": ('str', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.supportsFindBuffer": (), + "QClipboard.supportsSelection": (), + "QClipboard.text": [('PySide2.QtGui.QClipboard.Mode',), ('str', 'PySide2.QtGui.QClipboard.Mode')], + + # class PySide2.QtGui.QCloseEvent: + "QCloseEvent.__init__": (), + + # class PySide2.QtGui.QColor: + "QColor.__init__": [(), ('Any',), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',), ('int', 'int', 'int', 'int'), ('str',)], + "QColor.__copy__": (), + "QColor.__reduce__": (), + "QColor.__setstate__": ('object',), + "QColor.alpha": (), + "QColor.alphaF": (), + "QColor.black": (), + "QColor.blackF": (), + "QColor.blue": (), + "QColor.blueF": (), + "QColor.colorNames": (), + "QColor.convertTo": ('PySide2.QtGui.QColor.Spec',), + "QColor.cyan": (), + "QColor.cyanF": (), + "QColor.dark": ('int',), + "QColor.darker": ('int',), + "QColor.fromCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.fromCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.fromHsl": ('int', 'int', 'int', 'int'), + "QColor.fromHslF": ('float', 'float', 'float', 'float'), + "QColor.fromHsv": ('int', 'int', 'int', 'int'), + "QColor.fromHsvF": ('float', 'float', 'float', 'float'), + "QColor.fromRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.fromRgbF": ('float', 'float', 'float', 'float'), + "QColor.fromRgba": ('int',), + "QColor.fromRgba64": ('int', 'int', 'int', 'int'), + "QColor.getCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.getCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.getHsl": ('int', 'int', 'int', 'int'), + "QColor.getHslF": ('float', 'float', 'float', 'float'), + "QColor.getHsv": ('int', 'int', 'int', 'int'), + "QColor.getHsvF": ('float', 'float', 'float', 'float'), + "QColor.getRgb": ('int', 'int', 'int', 'int'), + "QColor.getRgbF": ('float', 'float', 'float', 'float'), + "QColor.green": (), + "QColor.greenF": (), + "QColor.hslHue": (), + "QColor.hslHueF": (), + "QColor.hslSaturation": (), + "QColor.hslSaturationF": (), + "QColor.hsvHue": (), + "QColor.hsvHueF": (), + "QColor.hsvSaturation": (), + "QColor.hsvSaturationF": (), + "QColor.hue": (), + "QColor.hueF": (), + "QColor.isValid": (), + "QColor.isValidColor": ('str',), + "QColor.light": ('int',), + "QColor.lighter": ('int',), + "QColor.lightness": (), + "QColor.lightnessF": (), + "QColor.magenta": (), + "QColor.magentaF": (), + "QColor.name": [(), ('PySide2.QtGui.QColor.NameFormat',)], + "QColor.red": (), + "QColor.redF": (), + "QColor.rgb": (), + "QColor.rgba": (), + "QColor.saturation": (), + "QColor.saturationF": (), + "QColor.setAlpha": ('int',), + "QColor.setAlphaF": ('float',), + "QColor.setBlue": ('int',), + "QColor.setBlueF": ('float',), + "QColor.setCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.setCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.setGreen": ('int',), + "QColor.setGreenF": ('float',), + "QColor.setHsl": ('int', 'int', 'int', 'int'), + "QColor.setHslF": ('float', 'float', 'float', 'float'), + "QColor.setHsv": ('int', 'int', 'int', 'int'), + "QColor.setHsvF": ('float', 'float', 'float', 'float'), + "QColor.setNamedColor": ('str',), + "QColor.setRed": ('int',), + "QColor.setRedF": ('float',), + "QColor.setRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.setRgbF": ('float', 'float', 'float', 'float'), + "QColor.setRgba": ('int',), + "QColor.spec": (), + "QColor.toCmyk": (), + "QColor.toHsl": (), + "QColor.toHsv": (), + "QColor.toRgb": (), + "QColor.toTuple": (), + "QColor.value": (), + "QColor.valueF": (), + "QColor.yellow": (), + "QColor.yellowF": (), + + # class PySide2.QtGui.QConicalGradient: + "QConicalGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QConicalGradient',), ('float', 'float', 'float')], + "QConicalGradient.__copy__": (), + "QConicalGradient.angle": (), + "QConicalGradient.center": (), + "QConicalGradient.setAngle": ('float',), + "QConicalGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + + # class PySide2.QtGui.QContextMenuEvent: + "QContextMenuEvent.__init__": [('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'PySide2.libpyside.KeyboardModifiers')], + "QContextMenuEvent.globalPos": (), + "QContextMenuEvent.globalX": (), + "QContextMenuEvent.global""Y": (), + "QContextMenuEvent.pos": (), + "QContextMenuEvent.reason": (), + "QContextMenuEvent.x": (), + "QContextMenuEvent.y": (), + + # class PySide2.QtGui.QCursor: + "QCursor.__init__": [(), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtGui.QBitmap', 'PySide2.QtGui.QBitmap', 'int', 'int'), ('PySide2.QtGui.QCursor',), ('PySide2.QtGui.QPixmap', 'int', 'int')], + "QCursor.__copy__": (), + "QCursor.bitmap": (), + "QCursor.hotSpot": (), + "QCursor.mask": (), + "QCursor.pixmap": (), + "QCursor.pos": [(), ('PySide2.QtGui.QScreen',)], + "QCursor.setPos": [('PySide2.QtCore.QPoint',), ('PySide2.QtGui.QScreen', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QScreen', 'int', 'int'), ('int', 'int')], + "QCursor.setShape": ('PySide2.QtCore.Qt.CursorShape',), + "QCursor.shape": (), + "QCursor.swap": ('PySide2.QtGui.QCursor',), + + # class PySide2.QtGui.QDesktopServices: + "QDesktopServices.__init__": (), + "QDesktopServices.openUrl": ('PySide2.QtCore.QUrl',), + "QDesktopServices.setUrlHandler": ('str', 'PySide2.QtCore.QObject', 'str'), + "QDesktopServices.unsetUrlHandler": ('str',), + + # class PySide2.QtGui.QDoubleValidator: + "QDoubleValidator.__init__": [('PySide2.QtCore.QObject',), ('float', 'float', 'int', 'PySide2.QtCore.QObject')], + "QDoubleValidator.bottom": (), + "QDoubleValidator.decimals": (), + "QDoubleValidator.notation": (), + "QDoubleValidator.setBottom": ('float',), + "QDoubleValidator.setDecimals": ('int',), + "QDoubleValidator.setNotation": ('PySide2.QtGui.QDoubleValidator.Notation',), + "QDoubleValidator.setRange": ('float', 'float', 'int'), + "QDoubleValidator.setTop": ('float',), + "QDoubleValidator.top": (), + "QDoubleValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QDrag: + "QDrag.__init__": ('PySide2.QtCore.QObject',), + "QDrag.cancel": (), + "QDrag.defaultAction": (), + "QDrag.dragCursor": ('PySide2.QtCore.Qt.DropAction',), + "QDrag.exec_": [('PySide2.libpyside.DropActions',), ('PySide2.libpyside.DropActions', 'PySide2.QtCore.Qt.DropAction')], + "QDrag.hotSpot": (), + "QDrag.mimeData": (), + "QDrag.pixmap": (), + "QDrag.setDragCursor": ('PySide2.QtGui.QPixmap', 'PySide2.QtCore.Qt.DropAction'), + "QDrag.setHotSpot": ('PySide2.QtCore.QPoint',), + "QDrag.setMimeData": ('PySide2.QtCore.QMimeData',), + "QDrag.setPixmap": ('PySide2.QtGui.QPixmap',), + "QDrag.source": (), + "QDrag.start": ('PySide2.libpyside.DropActions',), + "QDrag.supportedActions": (), + "QDrag.target": (), + + # class PySide2.QtGui.QDragEnterEvent: + "QDragEnterEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.libpyside.DropActions', 'PySide2.QtCore.QMimeData', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), + + # class PySide2.QtGui.QDragLeaveEvent: + "QDragLeaveEvent.__init__": (), + + # class PySide2.QtGui.QDragMoveEvent: + "QDragMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.libpyside.DropActions', 'PySide2.QtCore.QMimeData', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDragMoveEvent.accept": [(), ('PySide2.QtCore.QRect',)], + "QDragMoveEvent.answerRect": (), + "QDragMoveEvent.ignore": [(), ('PySide2.QtCore.QRect',)], + + # class PySide2.QtGui.QDropEvent: + "QDropEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.libpyside.DropActions', 'PySide2.QtCore.QMimeData', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDropEvent.acceptProposedAction": (), + "QDropEvent.dropAction": (), + "QDropEvent.keyboardModifiers": (), + "QDropEvent.mimeData": (), + "QDropEvent.mouseButtons": (), + "QDropEvent.pos": (), + "QDropEvent.posF": (), + "QDropEvent.possibleActions": (), + "QDropEvent.proposedAction": (), + "QDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QDropEvent.source": (), + + # class PySide2.QtGui.QEnterEvent: + "QEnterEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEnterEvent.globalPos": (), + "QEnterEvent.globalX": (), + "QEnterEvent.global""Y": (), + "QEnterEvent.localPos": (), + "QEnterEvent.pos": (), + "QEnterEvent.screenPos": (), + "QEnterEvent.windowPos": (), + "QEnterEvent.x": (), + "QEnterEvent.y": (), + + # class PySide2.QtGui.QExposeEvent: + "QExposeEvent.__init__": ('PySide2.QtGui.QRegion',), + "QExposeEvent.region": (), + + # class PySide2.QtGui.QFileOpenEvent: + "QFileOpenEvent.__init__": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileOpenEvent.file": (), + "QFileOpenEvent.openFile": ('PySide2.QtCore.QFile', 'PySide2.libpyside.OpenMode'), + "QFileOpenEvent.url": (), + + # class PySide2.QtGui.QFocusEvent: + "QFocusEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.FocusReason'), + "QFocusEvent.gotFocus": (), + "QFocusEvent.lostFocus": (), + "QFocusEvent.reason": (), + + # class PySide2.QtGui.QFont: + "QFont.__init__": [(), ('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('str', 'int', 'int', 'bool')], + "QFont.__copy__": (), + "QFont.bold": (), + "QFont.cacheStatistics": (), + "QFont.capitalization": (), + "QFont.cleanup": (), + "QFont.defaultFamily": (), + "QFont.exactMatch": (), + "QFont.family": (), + "QFont.fixedPitch": (), + "QFont.fromString": ('str',), + "QFont.hintingPreference": (), + "QFont.initialize": (), + "QFont.insertSubstitution": ('str', 'str'), + "QFont.insertSubstitutions": ('str', 'List[str]'), + "QFont.isCopyOf": ('PySide2.QtGui.QFont',), + "QFont.italic": (), + "QFont.kerning": (), + "QFont.key": (), + "QFont.lastResortFamily": (), + "QFont.lastResortFont": (), + "QFont.letterSpacing": (), + "QFont.letterSpacingType": (), + "QFont.overline": (), + "QFont.pixelSize": (), + "QFont.pointSize": (), + "QFont.pointSizeF": (), + "QFont.rawMode": (), + "QFont.rawName": (), + "QFont.removeSubstitutions": ('str',), + "QFont.resolve": [(), ('PySide2.QtGui.QFont',), ('int',)], + "QFont.setBold": ('bool',), + "QFont.setCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QFont.setFamily": ('str',), + "QFont.setFixedPitch": ('bool',), + "QFont.setHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QFont.setItalic": ('bool',), + "QFont.setKerning": ('bool',), + "QFont.setLetterSpacing": ('PySide2.QtGui.QFont.SpacingType', 'float'), + "QFont.setOverline": ('bool',), + "QFont.setPixelSize": ('int',), + "QFont.setPointSize": ('int',), + "QFont.setPointSizeF": ('float',), + "QFont.setRawMode": ('bool',), + "QFont.setRawName": ('str',), + "QFont.setStretch": ('int',), + "QFont.setStrikeOut": ('bool',), + "QFont.setStyle": ('PySide2.QtGui.QFont.Style',), + "QFont.setStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QFont.setStyleName": ('str',), + "QFont.setStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QFont.setUnderline": ('bool',), + "QFont.setWeight": ('int',), + "QFont.setWordSpacing": ('float',), + "QFont.stretch": (), + "QFont.strikeOut": (), + "QFont.style": (), + "QFont.styleHint": (), + "QFont.styleName": (), + "QFont.styleStrategy": (), + "QFont.substitute": ('str',), + "QFont.substitutes": ('str',), + "QFont.substitutions": (), + "QFont.swap": ('PySide2.QtGui.QFont',), + "QFont.toString": (), + "QFont.underline": (), + "QFont.weight": (), + "QFont.wordSpacing": (), + + # class PySide2.QtGui.QFontDatabase: + "QFontDatabase.__init__": [(), ('PySide2.QtGui.QFontDatabase',)], + "QFontDatabase.__copy__": (), + "QFontDatabase.addApplicationFont": ('str',), + "QFontDatabase.addApplicationFontFromData": ('PySide2.QtCore.QByteArray',), + "QFontDatabase.applicationFontFamilies": ('int',), + "QFontDatabase.bold": ('str', 'str'), + "QFontDatabase.families": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.font": ('str', 'str', 'int'), + "QFontDatabase.hasFamily": ('str',), + "QFontDatabase.isBitmapScalable": ('str', 'str'), + "QFontDatabase.isFixedPitch": ('str', 'str'), + "QFontDatabase.isPrivateFamily": ('str',), + "QFontDatabase.isScalable": ('str', 'str'), + "QFontDatabase.isSmoothlyScalable": ('str', 'str'), + "QFontDatabase.italic": ('str', 'str'), + "QFontDatabase.pointSizes": ('str', 'str'), + "QFontDatabase.removeAllApplicationFonts": (), + "QFontDatabase.removeApplicationFont": ('int',), + "QFontDatabase.smoothSizes": ('str', 'str'), + "QFontDatabase.standardSizes": (), + "QFontDatabase.styleString": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontDatabase.styles": ('str',), + "QFontDatabase.supportsThreadedFontRendering": (), + "QFontDatabase.systemFont": ('PySide2.QtGui.QFontDatabase.SystemFont',), + "QFontDatabase.weight": ('str', 'str'), + "QFontDatabase.writingSystemName": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystemSample": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystems": [(), ('str',)], + + # class PySide2.QtGui.QFontInfo: + "QFontInfo.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontInfo.__copy__": (), + "QFontInfo.bold": (), + "QFontInfo.exactMatch": (), + "QFontInfo.family": (), + "QFontInfo.fixedPitch": (), + "QFontInfo.italic": (), + "QFontInfo.overline": (), + "QFontInfo.pixelSize": (), + "QFontInfo.pointSize": (), + "QFontInfo.pointSizeF": (), + "QFontInfo.rawMode": (), + "QFontInfo.strikeOut": (), + "QFontInfo.style": (), + "QFontInfo.styleHint": (), + "QFontInfo.styleName": (), + "QFontInfo.swap": ('PySide2.QtGui.QFontInfo',), + "QFontInfo.underline": (), + "QFontInfo.weight": (), + + # class PySide2.QtGui.QFontMetrics: + "QFontMetrics.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',)], + "QFontMetrics.__copy__": (), + "QFontMetrics.ascent": (), + "QFontMetrics.averageCharWidth": (), + "QFontMetrics.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetrics.boundingRectChar": ('Union[str, int]',), + "QFontMetrics.capHeight": (), + "QFontMetrics.charWidth": ('str', 'int'), + "QFontMetrics.descent": (), + "QFontMetrics.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'int', 'int'), + "QFontMetrics.height": (), + "QFontMetrics.horizontalAdvance": [('Union[str, int]',), ('str', 'int')], + "QFontMetrics.inFont": ('Union[str, int]',), + "QFontMetrics.inFontUcs4": ('int',), + "QFontMetrics.leading": (), + "QFontMetrics.leftBearing": ('Union[str, int]',), + "QFontMetrics.lineSpacing": (), + "QFontMetrics.lineWidth": (), + "QFontMetrics.maxWidth": (), + "QFontMetrics.minLeftBearing": (), + "QFontMetrics.minRightBearing": (), + "QFontMetrics.overlinePos": (), + "QFontMetrics.rightBearing": ('Union[str, int]',), + "QFontMetrics.size": ('int', 'str', 'int', 'int'), + "QFontMetrics.strikeOutPos": (), + "QFontMetrics.swap": ('PySide2.QtGui.QFontMetrics',), + "QFontMetrics.tightBoundingRect": ('str',), + "QFontMetrics.underlinePos": (), + "QFontMetrics.width": [('str', 'int'), ('str', 'int', 'int')], + "QFontMetrics.widthChar": ('Union[str, int]',), + "QFontMetrics.xHeight": (), + + # class PySide2.QtGui.QFontMetricsF: + "QFontMetricsF.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',), ('PySide2.QtGui.QFontMetricsF',)], + "QFontMetricsF.__copy__": (), + "QFontMetricsF.ascent": (), + "QFontMetricsF.averageCharWidth": (), + "QFontMetricsF.boundingRect": [('PySide2.QtCore.QRectF', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetricsF.boundingRectChar": ('Union[str, int]',), + "QFontMetricsF.capHeight": (), + "QFontMetricsF.descent": (), + "QFontMetricsF.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'float', 'int'), + "QFontMetricsF.height": (), + "QFontMetricsF.horizontalAdvance": [('Union[str, int]',), ('str', 'int')], + "QFontMetricsF.inFont": ('Union[str, int]',), + "QFontMetricsF.inFontUcs4": ('int',), + "QFontMetricsF.leading": (), + "QFontMetricsF.leftBearing": ('Union[str, int]',), + "QFontMetricsF.lineSpacing": (), + "QFontMetricsF.lineWidth": (), + "QFontMetricsF.maxWidth": (), + "QFontMetricsF.minLeftBearing": (), + "QFontMetricsF.minRightBearing": (), + "QFontMetricsF.overlinePos": (), + "QFontMetricsF.rightBearing": ('Union[str, int]',), + "QFontMetricsF.size": ('int', 'str', 'int', 'int'), + "QFontMetricsF.strikeOutPos": (), + "QFontMetricsF.swap": ('PySide2.QtGui.QFontMetricsF',), + "QFontMetricsF.tightBoundingRect": ('str',), + "QFontMetricsF.underlinePos": (), + "QFontMetricsF.width": ('str',), + "QFontMetricsF.widthChar": ('Union[str, int]',), + "QFontMetricsF.xHeight": (), + + # class PySide2.QtGui.QGradient: + "QGradient.__init__": [(), ('PySide2.QtGui.QGradient',)], + "QGradient.__copy__": (), + "QGradient.coordinateMode": (), + "QGradient.interpolationMode": (), + "QGradient.setColorAt": ('float', 'PySide2.QtGui.QColor'), + "QGradient.setCoordinateMode": ('PySide2.QtGui.QGradient.CoordinateMode',), + "QGradient.setInterpolationMode": ('PySide2.QtGui.QGradient.InterpolationMode',), + "QGradient.setSpread": ('PySide2.QtGui.QGradient.Spread',), + "QGradient.setStops": ('list',), + "QGradient.spread": (), + "QGradient.stops": (), + "QGradient.type": (), + + # class PySide2.QtGui.QGuiApplication: + "QGuiApplication.__init__": [(), ('List[str]',)], + "QGuiApplication.allWindows": (), + "QGuiApplication.applicationDisplayName": (), + "QGuiApplication.applicationState": (), + "QGuiApplication.changeOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.clipboard": (), + "QGuiApplication.desktopFileName": (), + "QGuiApplication.desktopSettingsAware": (), + "QGuiApplication.devicePixelRatio": (), + "QGuiApplication.event": ('PySide2.QtCore.QEvent',), + "QGuiApplication.exec_": (), + "QGuiApplication.focusObject": (), + "QGuiApplication.focusWindow": (), + "QGuiApplication.font": (), + "QGuiApplication.inputMethod": (), + "QGuiApplication.isFallbackSessionManagementEnabled": (), + "QGuiApplication.isLeftToRight": (), + "QGuiApplication.isRightToLeft": (), + "QGuiApplication.isSavingSession": (), + "QGuiApplication.isSessionRestored": (), + "QGuiApplication.keyboardModifiers": (), + "QGuiApplication.layoutDirection": (), + "QGuiApplication.modalWindow": (), + "QGuiApplication.mouseButtons": (), + "QGuiApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGuiApplication.overrideCursor": (), + "QGuiApplication.palette": (), + "QGuiApplication.platformName": (), + "QGuiApplication.primaryScreen": (), + "QGuiApplication.queryKeyboardModifiers": (), + "QGuiApplication.quitOnLastWindowClosed": (), + "QGuiApplication.restoreOverrideCursor": (), + "QGuiApplication.screenAt": ('PySide2.QtCore.QPoint',), + "QGuiApplication.screens": (), + "QGuiApplication.sessionId": (), + "QGuiApplication.sessionKey": (), + "QGuiApplication.setApplicationDisplayName": ('str',), + "QGuiApplication.setDesktopFileName": ('str',), + "QGuiApplication.setDesktopSettingsAware": ('bool',), + "QGuiApplication.setFallbackSessionManagementEnabled": ('bool',), + "QGuiApplication.setFont": ('PySide2.QtGui.QFont',), + "QGuiApplication.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGuiApplication.setOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.setPalette": ('PySide2.QtGui.QPalette',), + "QGuiApplication.setQuitOnLastWindowClosed": ('bool',), + "QGuiApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QGuiApplication.styleHints": (), + "QGuiApplication.sync": (), + "QGuiApplication.topLevelAt": ('PySide2.QtCore.QPoint',), + "QGuiApplication.topLevelWindows": (), + "QGuiApplication.windowIcon": (), + + # class PySide2.QtGui.QHelpEvent: + "QHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QHelpEvent.globalPos": (), + "QHelpEvent.globalX": (), + "QHelpEvent.global""Y": (), + "QHelpEvent.pos": (), + "QHelpEvent.x": (), + "QHelpEvent.y": (), + + # class PySide2.QtGui.QHideEvent: + "QHideEvent.__init__": (), + + # class PySide2.QtGui.QHoverEvent: + "QHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.libpyside.KeyboardModifiers'), + "QHoverEvent.oldPos": (), + "QHoverEvent.oldPosF": (), + "QHoverEvent.pos": (), + "QHoverEvent.posF": (), + + # class PySide2.QtGui.QIcon: + "QIcon.__init__": [(), ('PySide2.QtGui.QIcon',), ('PySide2.QtGui.QIconEngine',), ('PySide2.QtGui.QPixmap',), ('str',)], + "QIcon.__copy__": (), + "QIcon.actualSize": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.cacheKey": (), + "QIcon.fallbackSearchPaths": (), + "QIcon.fromTheme": [('str',), ('str', 'PySide2.QtGui.QIcon')], + "QIcon.hasThemeIcon": ('str',), + "QIcon.isMask": (), + "QIcon.isNull": (), + "QIcon.name": (), + "QIcon.paint": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.libpyside.Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QPainter', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.pixmap": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.setFallbackSearchPaths": ('List[str]',), + "QIcon.setIsMask": ('bool',), + "QIcon.setThemeName": ('str',), + "QIcon.setThemeSearchPaths": ('List[str]',), + "QIcon.swap": ('PySide2.QtGui.QIcon',), + "QIcon.themeName": (), + "QIcon.themeSearchPaths": (), + + # class PySide2.QtGui.QIconDragEvent: + "QIconDragEvent.__init__": (), + + # class PySide2.QtGui.QIconEngine: + "QIconEngine.__init__": [(), ('PySide2.QtGui.QIconEngine',)], + "QIconEngine.actualSize": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.clone": (), + "QIconEngine.iconName": (), + "QIconEngine.isNull": (), + "QIconEngine.key": (), + "QIconEngine.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.pixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.read": ('PySide2.QtCore.QDataStream',), + "QIconEngine.scaledPixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State', 'float'), + "QIconEngine.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QImage: + "QImage.__init__": [(), ('List[str]',), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QImage.Format'), ('PySide2.QtGui.QImage',), ('Union[str, int]', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'Callable', 'int'), ('Union[str, int]', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'Callable', 'int'), ('int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'str')], + "QImage.__copy__": (), + "QImage.allGray": (), + "QImage.alphaChannel": (), + "QImage.bitPlaneCount": (), + "QImage.bits": (), + "QImage.byteCount": (), + "QImage.bytesPerLine": (), + "QImage.cacheKey": (), + "QImage.color": ('int',), + "QImage.colorCount": (), + "QImage.colorTable": (), + "QImage.constBits": (), + "QImage.constScanLine": ('int',), + "QImage.convertToFormat": [('PySide2.QtGui.QImage.Format', 'PySide2.libpyside.ImageConversionFlags'), ('PySide2.QtGui.QImage.Format', 'list', 'PySide2.libpyside.ImageConversionFlags')], + "QImage.convertToFormat_helper": ('PySide2.QtGui.QImage.Format', 'PySide2.libpyside.ImageConversionFlags'), + "QImage.convertToFormat_inplace": ('PySide2.QtGui.QImage.Format', 'PySide2.libpyside.ImageConversionFlags'), + "QImage.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QImage.createAlphaMask": ('PySide2.libpyside.ImageConversionFlags',), + "QImage.createHeuristicMask": ('bool',), + "QImage.createMaskFromColor": ('int', 'PySide2.QtCore.Qt.MaskMode'), + "QImage.depth": (), + "QImage.devType": (), + "QImage.devicePixelRatio": (), + "QImage.dotsPerMeterX": (), + "QImage.dotsPerMeterY": (), + "QImage.fill": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',)], + "QImage.format": (), + "QImage.fromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.hasAlphaChannel": (), + "QImage.height": (), + "QImage.invertPixels": ('PySide2.QtGui.QImage.InvertMode',), + "QImage.isGrayscale": (), + "QImage.isNull": (), + "QImage.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QImage.loadFromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QImage.mirrored": ('bool', 'bool'), + "QImage.mirrored_helper": ('bool', 'bool'), + "QImage.mirrored_inplace": ('bool', 'bool'), + "QImage.offset": (), + "QImage.paintEngine": (), + "QImage.pixel": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelColor": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelFormat": (), + "QImage.pixelIndex": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.rect": (), + "QImage.reinterpretAsFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.rgbSwapped": (), + "QImage.rgbSwapped_helper": (), + "QImage.rgbSwapped_inplace": (), + "QImage.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QImage.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scanLine": ('int',), + "QImage.setAlphaChannel": ('PySide2.QtGui.QImage',), + "QImage.setColor": ('int', 'int'), + "QImage.setColorCount": ('int',), + "QImage.setColorTable": ('list',), + "QImage.setDevicePixelRatio": ('float',), + "QImage.setDotsPerMeterX": ('int',), + "QImage.setDotsPerMeterY": ('int',), + "QImage.setOffset": ('PySide2.QtCore.QPoint',), + "QImage.setPixel": [('PySide2.QtCore.QPoint', 'int'), ('int', 'int', 'int')], + "QImage.setPixelColor": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QColor')], + "QImage.setText": ('str', 'str'), + "QImage.size": (), + "QImage.smoothScaled": ('int', 'int'), + "QImage.swap": ('PySide2.QtGui.QImage',), + "QImage.text": ('str',), + "QImage.textKeys": (), + "QImage.toImageFormat": ('PySide2.QtGui.QPixelFormat',), + "QImage.toPixelFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QImage.valid": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.width": (), + + # class PySide2.QtGui.QImageIOHandler: + "QImageIOHandler.__init__": (), + "QImageIOHandler.canRead": (), + "QImageIOHandler.currentImageNumber": (), + "QImageIOHandler.currentImageRect": (), + "QImageIOHandler.device": (), + "QImageIOHandler.format": (), + "QImageIOHandler.imageCount": (), + "QImageIOHandler.jumpToImage": ('int',), + "QImageIOHandler.jumpToNextImage": (), + "QImageIOHandler.loopCount": (), + "QImageIOHandler.name": (), + "QImageIOHandler.nextImageDelay": (), + "QImageIOHandler.option": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.read": ('PySide2.QtGui.QImage',), + "QImageIOHandler.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageIOHandler.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageIOHandler.setOption": ('PySide2.QtGui.QImageIOHandler.ImageOption', 'Any'), + "QImageIOHandler.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QImageReader: + "QImageReader.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageReader.autoDetectImageFormat": (), + "QImageReader.autoTransform": (), + "QImageReader.backgroundColor": (), + "QImageReader.canRead": (), + "QImageReader.clipRect": (), + "QImageReader.currentImageNumber": (), + "QImageReader.currentImageRect": (), + "QImageReader.decideFormatFromContent": (), + "QImageReader.device": (), + "QImageReader.error": (), + "QImageReader.errorString": (), + "QImageReader.fileName": (), + "QImageReader.format": (), + "QImageReader.gamma": (), + "QImageReader.imageCount": (), + "QImageReader.imageFormat": [(), ('PySide2.QtCore.QIODevice',), ('str',)], + "QImageReader.jumpToImage": ('int',), + "QImageReader.jumpToNextImage": (), + "QImageReader.loopCount": (), + "QImageReader.nextImageDelay": (), + "QImageReader.quality": (), + "QImageReader.read": (), + "QImageReader.scaledClipRect": (), + "QImageReader.scaledSize": (), + "QImageReader.setAutoDetectImageFormat": ('bool',), + "QImageReader.setAutoTransform": ('bool',), + "QImageReader.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QImageReader.setClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setDecideFormatFromContent": ('bool',), + "QImageReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageReader.setFileName": ('str',), + "QImageReader.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageReader.setGamma": ('float',), + "QImageReader.setQuality": ('int',), + "QImageReader.setScaledClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setScaledSize": ('PySide2.QtCore.QSize',), + "QImageReader.size": (), + "QImageReader.subType": (), + "QImageReader.supportedImageFormats": (), + "QImageReader.supportedMimeTypes": (), + "QImageReader.supportedSubTypes": (), + "QImageReader.supportsAnimation": (), + "QImageReader.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageReader.text": ('str',), + "QImageReader.textKeys": (), + "QImageReader.transformation": (), + + # class PySide2.QtGui.QImageWriter: + "QImageWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageWriter.canWrite": (), + "QImageWriter.compression": (), + "QImageWriter.description": (), + "QImageWriter.device": (), + "QImageWriter.error": (), + "QImageWriter.errorString": (), + "QImageWriter.fileName": (), + "QImageWriter.format": (), + "QImageWriter.gamma": (), + "QImageWriter.optimizedWrite": (), + "QImageWriter.progressiveScanWrite": (), + "QImageWriter.quality": (), + "QImageWriter.setCompression": ('int',), + "QImageWriter.setDescription": ('str',), + "QImageWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageWriter.setFileName": ('str',), + "QImageWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setGamma": ('float',), + "QImageWriter.setOptimizedWrite": ('bool',), + "QImageWriter.setProgressiveScanWrite": ('bool',), + "QImageWriter.setQuality": ('int',), + "QImageWriter.setSubType": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setText": ('str', 'str'), + "QImageWriter.setTransformation": ('PySide2.libpyside.Transformations',), + "QImageWriter.subType": (), + "QImageWriter.supportedImageFormats": (), + "QImageWriter.supportedMimeTypes": (), + "QImageWriter.supportedSubTypes": (), + "QImageWriter.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageWriter.transformation": (), + "QImageWriter.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QInputEvent: + "QInputEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.libpyside.KeyboardModifiers'), + "QInputEvent.modifiers": (), + "QInputEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QInputEvent.setTimestamp": ('int',), + "QInputEvent.timestamp": (), + + # class PySide2.QtGui.QInputMethod: + "QInputMethod.anchorRectangle": (), + "QInputMethod.commit": (), + "QInputMethod.cursorRectangle": (), + "QInputMethod.hide": (), + "QInputMethod.inputDirection": (), + "QInputMethod.inputItemClipRectangle": (), + "QInputMethod.inputItemRectangle": (), + "QInputMethod.inputItemTransform": (), + "QInputMethod.invokeAction": ('PySide2.QtGui.QInputMethod.Action', 'int'), + "QInputMethod.isAnimating": (), + "QInputMethod.isVisible": (), + "QInputMethod.keyboardRectangle": (), + "QInputMethod.locale": (), + "QInputMethod.queryFocusObject": ('PySide2.QtCore.Qt.InputMethodQuery', 'Any'), + "QInputMethod.reset": (), + "QInputMethod.setInputItemRectangle": ('PySide2.QtCore.QRectF',), + "QInputMethod.setInputItemTransform": ('PySide2.QtGui.QTransform',), + "QInputMethod.setVisible": ('bool',), + "QInputMethod.show": (), + "QInputMethod.update": ('PySide2.libpyside.InputMethodQueries',), + + # class PySide2.QtGui.QInputMethodEvent: + "QInputMethodEvent.__init__": [(), ('PySide2.QtGui.QInputMethodEvent',), ('str', 'list')], + "QInputMethodEvent.attributes": (), + "QInputMethodEvent.commitString": (), + "QInputMethodEvent.preeditString": (), + "QInputMethodEvent.replacementLength": (), + "QInputMethodEvent.replacementStart": (), + "QInputMethodEvent.setCommitString": ('str', 'int', 'int'), + + # class PySide2.QtGui.QInputMethodQueryEvent: + "QInputMethodQueryEvent.__init__": ('PySide2.libpyside.InputMethodQueries',), + "QInputMethodQueryEvent.queries": (), + "QInputMethodQueryEvent.setValue": ('PySide2.QtCore.Qt.InputMethodQuery', 'Any'), + "QInputMethodQueryEvent.value": ('PySide2.QtCore.Qt.InputMethodQuery',), + + # class PySide2.QtGui.QIntValidator: + "QIntValidator.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QIntValidator.bottom": (), + "QIntValidator.fixup": ('str',), + "QIntValidator.setBottom": ('int',), + "QIntValidator.setRange": ('int', 'int'), + "QIntValidator.setTop": ('int',), + "QIntValidator.top": (), + "QIntValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QKeyEvent: + "QKeyEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'int', 'PySide2.libpyside.KeyboardModifiers', 'int', 'int', 'int', 'str', 'bool', 'int'), ('PySide2.QtCore.QEvent.Type', 'int', 'PySide2.libpyside.KeyboardModifiers', 'str', 'bool', 'int')], + "QKeyEvent.count": (), + "QKeyEvent.isAutoRepeat": (), + "QKeyEvent.key": (), + "QKeyEvent.matches": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeyEvent.modifiers": (), + "QKeyEvent.nativeModifiers": (), + "QKeyEvent.nativeScanCode": (), + "QKeyEvent.nativeVirtualKey": (), + "QKeyEvent.text": (), + + # class PySide2.QtGui.QKeySequence: + "QKeySequence.__init__": [(), ('PySide2.QtGui.QKeySequence',), ('PySide2.QtGui.QKeySequence.StandardKey',), ('int', 'int', 'int', 'int'), ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat')], + "QKeySequence.__copy__": (), + "QKeySequence.__reduce__": (), + "QKeySequence.count": (), + "QKeySequence.fromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.isEmpty": (), + "QKeySequence.keyBindings": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeySequence.listFromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.listToString": ('list', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.matches": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.mnemonic": ('str',), + "QKeySequence.swap": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.toString": ('PySide2.QtGui.QKeySequence.SequenceFormat',), + + # class PySide2.QtGui.QLinearGradient: + "QLinearGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtGui.QLinearGradient',), ('float', 'float', 'float', 'float')], + "QLinearGradient.__copy__": (), + "QLinearGradient.finalStop": (), + "QLinearGradient.setFinalStop": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.setStart": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.start": (), + + # class PySide2.QtGui.QMatrix: + "QMatrix.__init__": [(), ('PySide2.QtGui.QMatrix',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix.__copy__": (), + "QMatrix.__reduce__": (), + "QMatrix.determinant": (), + "QMatrix.dx": (), + "QMatrix.dy": (), + "QMatrix.inverted": ('bool',), + "QMatrix.isIdentity": (), + "QMatrix.isInvertible": (), + "QMatrix.m11": (), + "QMatrix.m12": (), + "QMatrix.m21": (), + "QMatrix.m22": (), + "QMatrix.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QMatrix.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix.mapToPolygon": ('PySide2.QtCore.QRect',), + "QMatrix.reset": (), + "QMatrix.rotate": ('float',), + "QMatrix.scale": ('float', 'float'), + "QMatrix.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix.shear": ('float', 'float'), + "QMatrix.translate": ('float', 'float'), + + # class PySide2.QtGui.QMatrix2x2: + "QMatrix2x2.__init__": [('PySide2.QtGui.QMatrix2x2',), ('Sequence',)], + "QMatrix2x2.__copy__": (), + "QMatrix2x2.__reduce__": (), + "QMatrix2x2.data": (), + "QMatrix2x2.fill": ('object',), + "QMatrix2x2.transposed": (), + + # class PySide2.QtGui.QMatrix2x3: + "QMatrix2x3.__init__": [('PySide2.QtGui.QMatrix2x3',), ('Sequence',)], + "QMatrix2x3.__copy__": (), + "QMatrix2x3.__reduce__": (), + "QMatrix2x3.data": (), + "QMatrix2x3.fill": ('object',), + "QMatrix2x3.transposed": (), + + # class PySide2.QtGui.QMatrix2x4: + "QMatrix2x4.__init__": [('PySide2.QtGui.QMatrix2x4',), ('Sequence',)], + "QMatrix2x4.__copy__": (), + "QMatrix2x4.__reduce__": (), + "QMatrix2x4.data": (), + "QMatrix2x4.fill": ('object',), + "QMatrix2x4.transposed": (), + + # class PySide2.QtGui.QMatrix3x2: + "QMatrix3x2.__init__": [('PySide2.QtGui.QMatrix3x2',), ('Sequence',)], + "QMatrix3x2.__copy__": (), + "QMatrix3x2.__reduce__": (), + "QMatrix3x2.data": (), + "QMatrix3x2.fill": ('object',), + "QMatrix3x2.transposed": (), + + # class PySide2.QtGui.QMatrix3x3: + "QMatrix3x3.__init__": [('PySide2.QtGui.QMatrix3x3',), ('Sequence',)], + "QMatrix3x3.__copy__": (), + "QMatrix3x3.__reduce__": (), + "QMatrix3x3.data": (), + "QMatrix3x3.fill": ('object',), + "QMatrix3x3.transposed": (), + + # class PySide2.QtGui.QMatrix3x4: + "QMatrix3x4.__init__": [('PySide2.QtGui.QMatrix3x4',), ('Sequence',)], + "QMatrix3x4.__copy__": (), + "QMatrix3x4.__reduce__": (), + "QMatrix3x4.data": (), + "QMatrix3x4.fill": ('object',), + "QMatrix3x4.transposed": (), + + # class PySide2.QtGui.QMatrix4x2: + "QMatrix4x2.__init__": [('PySide2.QtGui.QMatrix4x2',), ('Sequence',)], + "QMatrix4x2.__copy__": (), + "QMatrix4x2.__reduce__": (), + "QMatrix4x2.data": (), + "QMatrix4x2.fill": ('object',), + "QMatrix4x2.transposed": (), + + # class PySide2.QtGui.QMatrix4x3: + "QMatrix4x3.__init__": [('PySide2.QtGui.QMatrix4x3',), ('Sequence',)], + "QMatrix4x3.__copy__": (), + "QMatrix4x3.__reduce__": (), + "QMatrix4x3.data": (), + "QMatrix4x3.fill": ('object',), + "QMatrix4x3.transposed": (), + + # class PySide2.QtGui.QMatrix4x4: + "QMatrix4x4.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float',), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.__copy__": (), + "QMatrix4x4.__reduce__": (), + "QMatrix4x4.column": ('int',), + "QMatrix4x4.copyDataTo": ('float',), + "QMatrix4x4.data": (), + "QMatrix4x4.determinant": (), + "QMatrix4x4.fill": ('float',), + "QMatrix4x4.flipCoordinates": (), + "QMatrix4x4.frustum": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix4x4.inverted": ('bool',), + "QMatrix4x4.isAffine": (), + "QMatrix4x4.isIdentity": (), + "QMatrix4x4.lookAt": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QMatrix4x4.map": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',)], + "QMatrix4x4.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix4x4.mapVector": ('PySide2.QtGui.QVector3D',), + "QMatrix4x4.normalMatrix": (), + "QMatrix4x4.optimize": (), + "QMatrix4x4.ortho": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.perspective": ('float', 'float', 'float', 'float'), + "QMatrix4x4.rotate": [('PySide2.QtGui.QQuaternion',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QMatrix4x4.row": ('int',), + "QMatrix4x4.scale": [('PySide2.QtGui.QVector3D',), ('float',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.setColumn": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setRow": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setToIdentity": (), + "QMatrix4x4.toAffine": (), + "QMatrix4x4.toTransform": [(), ('float',)], + "QMatrix4x4.translate": [('PySide2.QtGui.QVector3D',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.transposed": (), + "QMatrix4x4.viewport": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + + # class PySide2.QtGui.QMouseEvent: + "QMouseEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers')], + "QMouseEvent.button": (), + "QMouseEvent.buttons": (), + "QMouseEvent.flags": (), + "QMouseEvent.globalPos": (), + "QMouseEvent.globalX": (), + "QMouseEvent.global""Y": (), + "QMouseEvent.localPos": (), + "QMouseEvent.pos": (), + "QMouseEvent.screenPos": (), + "QMouseEvent.setLocalPos": ('PySide2.QtCore.QPointF',), + "QMouseEvent.source": (), + "QMouseEvent.windowPos": (), + "QMouseEvent.x": (), + "QMouseEvent.y": (), + + # class PySide2.QtGui.QMoveEvent: + "QMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QMoveEvent.oldPos": (), + "QMoveEvent.pos": (), + + # class PySide2.QtGui.QMovie: + "QMovie.__init__": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QMovie.backgroundColor": (), + "QMovie.cacheMode": (), + "QMovie.currentFrameNumber": (), + "QMovie.currentImage": (), + "QMovie.currentPixmap": (), + "QMovie.device": (), + "QMovie.fileName": (), + "QMovie.format": (), + "QMovie.frameCount": (), + "QMovie.frameRect": (), + "QMovie.isValid": (), + "QMovie.jumpToFrame": ('int',), + "QMovie.jumpToNextFrame": (), + "QMovie.lastError": (), + "QMovie.lastErrorString": (), + "QMovie.loopCount": (), + "QMovie.nextFrameDelay": (), + "QMovie.scaledSize": (), + "QMovie.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QMovie.setCacheMode": ('PySide2.QtGui.QMovie.CacheMode',), + "QMovie.setDevice": ('PySide2.QtCore.QIODevice',), + "QMovie.setFileName": ('str',), + "QMovie.setFormat": ('PySide2.QtCore.QByteArray',), + "QMovie.setPaused": ('bool',), + "QMovie.setScaledSize": ('PySide2.QtCore.QSize',), + "QMovie.setSpeed": ('int',), + "QMovie.speed": (), + "QMovie.start": (), + "QMovie.state": (), + "QMovie.stop": (), + "QMovie.supportedFormats": (), + + # class PySide2.QtGui.QNativeGestureEvent: + "QNativeGestureEvent.__init__": [('PySide2.QtCore.Qt.NativeGestureType', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'float', 'int', 'int'), ('PySide2.QtCore.Qt.NativeGestureType', 'PySide2.QtGui.QTouchDevice', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'float', 'int', 'int')], + "QNativeGestureEvent.device": (), + "QNativeGestureEvent.gestureType": (), + "QNativeGestureEvent.globalPos": (), + "QNativeGestureEvent.localPos": (), + "QNativeGestureEvent.pos": (), + "QNativeGestureEvent.screenPos": (), + "QNativeGestureEvent.value": (), + "QNativeGestureEvent.windowPos": (), + + # class PySide2.QtGui.QOffscreenSurface: + "QOffscreenSurface.__init__": [('PySide2.QtGui.QScreen',), ('PySide2.QtGui.QScreen', 'PySide2.QtCore.QObject')], + "QOffscreenSurface.create": (), + "QOffscreenSurface.destroy": (), + "QOffscreenSurface.format": (), + "QOffscreenSurface.isValid": (), + "QOffscreenSurface.nativeHandle": (), + "QOffscreenSurface.requestedFormat": (), + "QOffscreenSurface.screen": (), + "QOffscreenSurface.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOffscreenSurface.setNativeHandle": ('int',), + "QOffscreenSurface.setScreen": ('PySide2.QtGui.QScreen',), + "QOffscreenSurface.size": (), + "QOffscreenSurface.surfaceHandle": (), + "QOffscreenSurface.surfaceType": (), + + # class PySide2.QtGui.QOpenGLBuffer: + "QOpenGLBuffer.__init__": [(), ('PySide2.QtGui.QOpenGLBuffer',), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.allocate": [('int',), ('int', 'int')], + "QOpenGLBuffer.bind": (), + "QOpenGLBuffer.bufferId": (), + "QOpenGLBuffer.create": (), + "QOpenGLBuffer.destroy": (), + "QOpenGLBuffer.isCreated": (), + "QOpenGLBuffer.map": ('PySide2.QtGui.QOpenGLBuffer.Access',), + "QOpenGLBuffer.mapRange": ('int', 'int', 'PySide2.libpyside.RangeAccessFlags'), + "QOpenGLBuffer.read": ('int', 'int', 'int'), + "QOpenGLBuffer.release": [(), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.setUsagePattern": ('PySide2.QtGui.QOpenGLBuffer.UsagePattern',), + "QOpenGLBuffer.size": (), + "QOpenGLBuffer.type": (), + "QOpenGLBuffer.unmap": (), + "QOpenGLBuffer.usagePattern": (), + "QOpenGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtGui.QOpenGLContext: + "QOpenGLContext.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLContext.areSharing": ('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLContext.create": (), + "QOpenGLContext.currentContext": (), + "QOpenGLContext.defaultFramebufferObject": (), + "QOpenGLContext.doneCurrent": (), + "QOpenGLContext.extensions": (), + "QOpenGLContext.extraFunctions": (), + "QOpenGLContext.format": (), + "QOpenGLContext.functions": (), + "QOpenGLContext.globalShareContext": (), + "QOpenGLContext.hasExtension": ('PySide2.QtCore.QByteArray',), + "QOpenGLContext.isOpenGLES": (), + "QOpenGLContext.isValid": (), + "QOpenGLContext.makeCurrent": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.nativeHandle": (), + "QOpenGLContext.openGLModuleHandle": (), + "QOpenGLContext.openGLModuleType": (), + "QOpenGLContext.screen": (), + "QOpenGLContext.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLContext.setNativeHandle": ('Any',), + "QOpenGLContext.setScreen": ('PySide2.QtGui.QScreen',), + "QOpenGLContext.setShareContext": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLContext.shareContext": (), + "QOpenGLContext.shareGroup": (), + "QOpenGLContext.supportsThreadedOpenGL": (), + "QOpenGLContext.surface": (), + "QOpenGLContext.swapBuffers": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.versionFunctions": ('PySide2.QtGui.QOpenGLVersionProfile',), + + # class PySide2.QtGui.QOpenGLContextGroup: + "QOpenGLContextGroup.currentContextGroup": (), + "QOpenGLContextGroup.shares": (), + + # class PySide2.QtGui.QOpenGLDebugLogger: + "QOpenGLDebugLogger.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLDebugLogger.disableMessages": [('PySide2.libpyside.Sources', 'PySide2.libpyside.Types', 'PySide2.libpyside.Severities'), ('list', 'PySide2.libpyside.Sources', 'PySide2.libpyside.Types')], + "QOpenGLDebugLogger.enableMessages": [('PySide2.libpyside.Sources', 'PySide2.libpyside.Types', 'PySide2.libpyside.Severities'), ('list', 'PySide2.libpyside.Sources', 'PySide2.libpyside.Types')], + "QOpenGLDebugLogger.initialize": (), + "QOpenGLDebugLogger.isLogging": (), + "QOpenGLDebugLogger.logMessage": ('PySide2.QtGui.QOpenGLDebugMessage',), + "QOpenGLDebugLogger.loggedMessages": (), + "QOpenGLDebugLogger.loggingMode": (), + "QOpenGLDebugLogger.maximumMessageLength": (), + "QOpenGLDebugLogger.popGroup": (), + "QOpenGLDebugLogger.pushGroup": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Source'), + "QOpenGLDebugLogger.startLogging": ('PySide2.QtGui.QOpenGLDebugLogger.LoggingMode',), + "QOpenGLDebugLogger.stopLogging": (), + + # class PySide2.QtGui.QOpenGLDebugMessage: + "QOpenGLDebugMessage.__init__": [(), ('PySide2.QtGui.QOpenGLDebugMessage',)], + "QOpenGLDebugMessage.__copy__": (), + "QOpenGLDebugMessage.createApplicationMessage": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Severity', 'PySide2.QtGui.QOpenGLDebugMessage.Type'), + "QOpenGLDebugMessage.createThirdPartyMessage": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Severity', 'PySide2.QtGui.QOpenGLDebugMessage.Type'), + "QOpenGLDebugMessage.id": (), + "QOpenGLDebugMessage.message": (), + "QOpenGLDebugMessage.severity": (), + "QOpenGLDebugMessage.source": (), + "QOpenGLDebugMessage.swap": ('PySide2.QtGui.QOpenGLDebugMessage',), + "QOpenGLDebugMessage.type": (), + + # class PySide2.QtGui.QOpenGLExtraFunctions: + "QOpenGLExtraFunctions.__init__": [(), ('PySide2.QtGui.QOpenGLContext',)], + "QOpenGLExtraFunctions.glActiveShaderProgram": ('int', 'int'), + "QOpenGLExtraFunctions.glBeginQuery": ('int', 'int'), + "QOpenGLExtraFunctions.glBeginTransformFeedback": ('int',), + "QOpenGLExtraFunctions.glBindBufferBase": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glBindImageTexture": ('int', 'int', 'int', 'Union[str, int]', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glBindProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glBindSampler": ('int', 'int'), + "QOpenGLExtraFunctions.glBindTransformFeedback": ('int', 'int'), + "QOpenGLExtraFunctions.glBindVertexArray": ('int',), + "QOpenGLExtraFunctions.glBlendBarrier": (), + "QOpenGLExtraFunctions.glBlendEquationSeparatei": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glBlendEquationi": ('int', 'int'), + "QOpenGLExtraFunctions.glBlendFuncSeparatei": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glBlendFunci": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glBlitFramebuffer": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glClearBufferfi": ('int', 'int', 'float', 'int'), + "QOpenGLExtraFunctions.glClearBufferfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glClearBufferiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glClearBufferuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glColorMaski": ('int', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), + "QOpenGLExtraFunctions.glCompressedTexImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCompressedTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCopyImageSubData": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCopyTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDebugMessageControl": ('int', 'int', 'int', 'int', 'int', 'Union[str, int]'), + "QOpenGLExtraFunctions.glDebugMessageInsert": ('int', 'int', 'int', 'int', 'int', 'str'), + "QOpenGLExtraFunctions.glDeleteProgramPipelines": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteQueries": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteSamplers": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteTransformFeedbacks": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteVertexArrays": ('int', 'int'), + "QOpenGLExtraFunctions.glDisablei": ('int', 'int'), + "QOpenGLExtraFunctions.glDispatchCompute": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawArraysIndirect": ('int', 'int'), + "QOpenGLExtraFunctions.glDrawArraysInstanced": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawBuffers": ('int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsBaseVertex": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsIndirect": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsInstanced": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsInstancedBaseVertex": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawRangeElements": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawRangeElementsBaseVertex": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glEnablei": ('int', 'int'), + "QOpenGLExtraFunctions.glEndQuery": ('int',), + "QOpenGLExtraFunctions.glFramebufferParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glFramebufferTexture": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glFramebufferTextureLayer": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGenProgramPipelines": ('int', 'int'), + "QOpenGLExtraFunctions.glGenQueries": ('int', 'int'), + "QOpenGLExtraFunctions.glGenSamplers": ('int', 'int'), + "QOpenGLExtraFunctions.glGenTransformFeedbacks": ('int', 'int'), + "QOpenGLExtraFunctions.glGenVertexArrays": ('int', 'int'), + "QOpenGLExtraFunctions.glGetActiveUniformBlockiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetActiveUniformsiv": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetBufferParameteri64v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetFragDataLocation": ('int', 'str'), + "QOpenGLExtraFunctions.glGetFramebufferParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetGraphicsResetStatus": (), + "QOpenGLExtraFunctions.glGetInteger64i_v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInteger64v": ('int', 'int'), + "QOpenGLExtraFunctions.glGetIntegeri_v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInternalformativ": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetMultisamplefv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetProgramBinary": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramInterfaceiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramPipelineiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramResourceIndex": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glGetProgramResourceLocation": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glGetProgramResourceiv": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetQueryObjectuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetQueryiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetSamplerParameterIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetSamplerParameterIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetSamplerParameterfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetSamplerParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetStringi": ('int', 'int'), + "QOpenGLExtraFunctions.glGetTexLevelParameterfv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetTexLevelParameteriv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetTexParameterIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetTexParameterIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetUniformBlockIndex": ('int', 'str'), + "QOpenGLExtraFunctions.glGetUniformuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetVertexAttribIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetVertexAttribIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetnUniformfv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetnUniformiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetnUniformuiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glInvalidateFramebuffer": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glInvalidateSubFramebuffer": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glIsEnabledi": ('int', 'int'), + "QOpenGLExtraFunctions.glIsProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glIsQuery": ('int',), + "QOpenGLExtraFunctions.glIsSampler": ('int',), + "QOpenGLExtraFunctions.glIsTransformFeedback": ('int',), + "QOpenGLExtraFunctions.glIsVertexArray": ('int',), + "QOpenGLExtraFunctions.glMemoryBarrier": ('int',), + "QOpenGLExtraFunctions.glMemoryBarrierByRegion": ('int',), + "QOpenGLExtraFunctions.glMinSampleShading": ('float',), + "QOpenGLExtraFunctions.glObjectLabel": ('int', 'int', 'int', 'str'), + "QOpenGLExtraFunctions.glObjectPtrLabel": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glPatchParameteri": ('int', 'int'), + "QOpenGLExtraFunctions.glPopDebugGroup": (), + "QOpenGLExtraFunctions.glPrimitiveBoundingBox": ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramBinary": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1f": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform1fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform1i": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1ui": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2f": ('int', 'int', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform2fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform2i": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2ui": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3f": ('int', 'int', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform3fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform3i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4f": ('int', 'int', 'float', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform4fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform4i": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4ui": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2x3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2x4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3x2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3x4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4x2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4x3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glPushDebugGroup": ('int', 'int', 'int', 'str'), + "QOpenGLExtraFunctions.glReadBuffer": ('int',), + "QOpenGLExtraFunctions.glReadnPixels": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glRenderbufferStorageMultisample": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glSampleMaski": ('int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameterIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameterIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameterf": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glSamplerParameterfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glSamplerParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexBuffer": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexParameterIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexParameterIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage2D": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage2DMultisample": ('int', 'int', 'int', 'int', 'int', 'Union[str, int]'), + "QOpenGLExtraFunctions.glTexStorage3D": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage3DMultisample": ('int', 'int', 'int', 'int', 'int', 'int', 'Union[str, int]'), + "QOpenGLExtraFunctions.glTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform1ui": ('int', 'int'), + "QOpenGLExtraFunctions.glUniform1uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform2ui": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform2uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform3ui": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform3uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform4ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform4uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniformBlockBinding": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniformMatrix2x3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix2x4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix3x2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix3x4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix4x2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix4x3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUnmapBuffer": ('int',), + "QOpenGLExtraFunctions.glUseProgramStages": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glValidateProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glVertexAttribBinding": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribDivisor": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribFormat": ('int', 'int', 'int', 'Union[str, int]', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4iv": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4uiv": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribIFormat": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribIPointer": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexBindingDivisor": ('int', 'int'), + + # class PySide2.QtGui.QOpenGLFramebufferObject: + "QOpenGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.addColorAttachment": [('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.attachment": (), + "QOpenGLFramebufferObject.bind": (), + "QOpenGLFramebufferObject.bindDefault": (), + "QOpenGLFramebufferObject.blitFramebuffer": [('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.FramebufferRestorePolicy'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtGui.QOpenGLFramebufferObject', 'int', 'int')], + "QOpenGLFramebufferObject.format": (), + "QOpenGLFramebufferObject.handle": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QOpenGLFramebufferObject.height": (), + "QOpenGLFramebufferObject.isBound": (), + "QOpenGLFramebufferObject.isValid": (), + "QOpenGLFramebufferObject.release": (), + "QOpenGLFramebufferObject.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObject.size": (), + "QOpenGLFramebufferObject.sizes": (), + "QOpenGLFramebufferObject.takeTexture": [(), ('int',)], + "QOpenGLFramebufferObject.texture": (), + "QOpenGLFramebufferObject.textures": (), + "QOpenGLFramebufferObject.toImage": [(), ('bool',), ('bool', 'int')], + "QOpenGLFramebufferObject.width": (), + + # class PySide2.QtGui.QOpenGLFramebufferObjectFormat: + "QOpenGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtGui.QOpenGLFramebufferObjectFormat',)], + "QOpenGLFramebufferObjectFormat.__copy__": (), + "QOpenGLFramebufferObjectFormat.attachment": (), + "QOpenGLFramebufferObjectFormat.internalTextureFormat": (), + "QOpenGLFramebufferObjectFormat.mipmap": (), + "QOpenGLFramebufferObjectFormat.samples": (), + "QOpenGLFramebufferObjectFormat.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QOpenGLFramebufferObjectFormat.setMipmap": ('bool',), + "QOpenGLFramebufferObjectFormat.setSamples": ('int',), + "QOpenGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QOpenGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtGui.QOpenGLFunctions: + "QOpenGLFunctions.__init__": [(), ('PySide2.QtGui.QOpenGLContext',)], + "QOpenGLFunctions.glActiveTexture": ('int',), + "QOpenGLFunctions.glAttachShader": ('int', 'int'), + "QOpenGLFunctions.glBindAttribLocation": ('int', 'int', 'str'), + "QOpenGLFunctions.glBindBuffer": ('int', 'int'), + "QOpenGLFunctions.glBindFramebuffer": ('int', 'int'), + "QOpenGLFunctions.glBindRenderbuffer": ('int', 'int'), + "QOpenGLFunctions.glBindTexture": ('int', 'int'), + "QOpenGLFunctions.glBlendColor": ('float', 'float', 'float', 'float'), + "QOpenGLFunctions.glBlendEquation": ('int',), + "QOpenGLFunctions.glBlendEquationSeparate": ('int', 'int'), + "QOpenGLFunctions.glBlendFunc": ('int', 'int'), + "QOpenGLFunctions.glBlendFuncSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCheckFramebufferStatus": ('int',), + "QOpenGLFunctions.glClear": ('int',), + "QOpenGLFunctions.glClearColor": ('float', 'float', 'float', 'float'), + "QOpenGLFunctions.glClearDepthf": ('float',), + "QOpenGLFunctions.glClearStencil": ('int',), + "QOpenGLFunctions.glColorMask": ('Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), + "QOpenGLFunctions.glCompileShader": ('int',), + "QOpenGLFunctions.glCompressedTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCompressedTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCopyTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCopyTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCreateProgram": (), + "QOpenGLFunctions.glCreateShader": ('int',), + "QOpenGLFunctions.glCullFace": ('int',), + "QOpenGLFunctions.glDeleteBuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteFramebuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteProgram": ('int',), + "QOpenGLFunctions.glDeleteRenderbuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteShader": ('int',), + "QOpenGLFunctions.glDeleteTextures": ('int', 'int'), + "QOpenGLFunctions.glDepthFunc": ('int',), + "QOpenGLFunctions.glDepthMask": ('Union[str, int]',), + "QOpenGLFunctions.glDepthRangef": ('float', 'float'), + "QOpenGLFunctions.glDetachShader": ('int', 'int'), + "QOpenGLFunctions.glDisable": ('int',), + "QOpenGLFunctions.glDisableVertexAttribArray": ('int',), + "QOpenGLFunctions.glDrawArrays": ('int', 'int', 'int'), + "QOpenGLFunctions.glDrawElements": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glEnable": ('int',), + "QOpenGLFunctions.glEnableVertexAttribArray": ('int',), + "QOpenGLFunctions.glFinish": (), + "QOpenGLFunctions.glFlush": (), + "QOpenGLFunctions.glFramebufferRenderbuffer": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glFramebufferTexture2D": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glFrontFace": ('int',), + "QOpenGLFunctions.glGenBuffers": ('int', 'int'), + "QOpenGLFunctions.glGenFramebuffers": ('int', 'int'), + "QOpenGLFunctions.glGenRenderbuffers": ('int', 'int'), + "QOpenGLFunctions.glGenTextures": ('int', 'int'), + "QOpenGLFunctions.glGenerateMipmap": ('int',), + "QOpenGLFunctions.glGetAttachedShaders": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetAttribLocation": ('int', 'str'), + "QOpenGLFunctions.glGetBufferParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetError": (), + "QOpenGLFunctions.glGetFloatv": ('int', 'float'), + "QOpenGLFunctions.glGetFramebufferAttachmentParameteriv": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetIntegerv": ('int', 'int'), + "QOpenGLFunctions.glGetProgramiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetRenderbufferParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetShaderPrecisionFormat": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetShaderiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetString": ('int',), + "QOpenGLFunctions.glGetTexParameterfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetTexParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetUniformLocation": ('int', 'str'), + "QOpenGLFunctions.glGetUniformfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetUniformiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetVertexAttribfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetVertexAttribiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glHint": ('int', 'int'), + "QOpenGLFunctions.glIsBuffer": ('int',), + "QOpenGLFunctions.glIsEnabled": ('int',), + "QOpenGLFunctions.glIsFramebuffer": ('int',), + "QOpenGLFunctions.glIsProgram": ('int',), + "QOpenGLFunctions.glIsRenderbuffer": ('int',), + "QOpenGLFunctions.glIsShader": ('int',), + "QOpenGLFunctions.glIsTexture": ('int',), + "QOpenGLFunctions.glLineWidth": ('float',), + "QOpenGLFunctions.glLinkProgram": ('int',), + "QOpenGLFunctions.glPixelStorei": ('int', 'int'), + "QOpenGLFunctions.glPolygonOffset": ('float', 'float'), + "QOpenGLFunctions.glReadPixels": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glReleaseShaderCompiler": (), + "QOpenGLFunctions.glRenderbufferStorage": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glSampleCoverage": ('float', 'Union[str, int]'), + "QOpenGLFunctions.glScissor": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glShaderBinary": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glStencilFunc": ('int', 'int', 'int'), + "QOpenGLFunctions.glStencilFuncSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glStencilMask": ('int',), + "QOpenGLFunctions.glStencilMaskSeparate": ('int', 'int'), + "QOpenGLFunctions.glStencilOp": ('int', 'int', 'int'), + "QOpenGLFunctions.glStencilOpSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glTexParameterf": ('int', 'int', 'float'), + "QOpenGLFunctions.glTexParameterfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glTexParameteri": ('int', 'int', 'int'), + "QOpenGLFunctions.glTexParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform1f": ('int', 'float'), + "QOpenGLFunctions.glUniform1fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform1i": ('int', 'int'), + "QOpenGLFunctions.glUniform1iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform2f": ('int', 'float', 'float'), + "QOpenGLFunctions.glUniform2fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform2i": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform2iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform3f": ('int', 'float', 'float', 'float'), + "QOpenGLFunctions.glUniform3fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform3i": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform3iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform4f": ('int', 'float', 'float', 'float', 'float'), + "QOpenGLFunctions.glUniform4fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform4i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform4iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniformMatrix2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUniformMatrix3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUniformMatrix4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUseProgram": ('int',), + "QOpenGLFunctions.glValidateProgram": ('int',), + "QOpenGLFunctions.glVertexAttrib1f": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib1fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib2f": ('int', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib2fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib3f": ('int', 'float', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib3fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib4f": ('int', 'float', 'float', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib4fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttribPointer": ('int', 'int', 'int', 'Union[str, int]', 'int', 'int'), + "QOpenGLFunctions.glViewport": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.hasOpenGLFeature": ('PySide2.QtGui.QOpenGLFunctions.OpenGLFeature',), + "QOpenGLFunctions.initializeOpenGLFunctions": (), + "QOpenGLFunctions.openGLFeatures": (), + + # class PySide2.QtGui.QOpenGLPixelTransferOptions: + "QOpenGLPixelTransferOptions.__init__": [(), ('PySide2.QtGui.QOpenGLPixelTransferOptions',)], + "QOpenGLPixelTransferOptions.__copy__": (), + "QOpenGLPixelTransferOptions.alignment": (), + "QOpenGLPixelTransferOptions.imageHeight": (), + "QOpenGLPixelTransferOptions.isLeastSignificantBitFirst": (), + "QOpenGLPixelTransferOptions.isSwapBytesEnabled": (), + "QOpenGLPixelTransferOptions.rowLength": (), + "QOpenGLPixelTransferOptions.setAlignment": ('int',), + "QOpenGLPixelTransferOptions.setImageHeight": ('int',), + "QOpenGLPixelTransferOptions.setLeastSignificantByteFirst": ('bool',), + "QOpenGLPixelTransferOptions.setRowLength": ('int',), + "QOpenGLPixelTransferOptions.setSkipImages": ('int',), + "QOpenGLPixelTransferOptions.setSkipPixels": ('int',), + "QOpenGLPixelTransferOptions.setSkipRows": ('int',), + "QOpenGLPixelTransferOptions.setSwapBytesEnabled": ('bool',), + "QOpenGLPixelTransferOptions.skipImages": (), + "QOpenGLPixelTransferOptions.skipPixels": (), + "QOpenGLPixelTransferOptions.skipRows": (), + "QOpenGLPixelTransferOptions.swap": ('PySide2.QtGui.QOpenGLPixelTransferOptions',), + + # class PySide2.QtGui.QOpenGLShader: + "QOpenGLShader.__init__": ('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QObject'), + "QOpenGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShader.compileSourceFile": ('str',), + "QOpenGLShader.hasOpenGLShaders": ('PySide2.libpyside.ShaderType', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLShader.isCompiled": (), + "QOpenGLShader.log": (), + "QOpenGLShader.shaderId": (), + "QOpenGLShader.shaderType": (), + "QOpenGLShader.sourceCode": (), + + # class PySide2.QtGui.QOpenGLShaderProgram: + "QOpenGLShaderProgram.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLShaderProgram.addCacheableShaderFromSourceCode": [('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QByteArray'), ('PySide2.libpyside.ShaderType', 'str')], + "QOpenGLShaderProgram.addCacheableShaderFromSourceFile": ('PySide2.libpyside.ShaderType', 'str'), + "QOpenGLShaderProgram.addShader": ('PySide2.QtGui.QOpenGLShader',), + "QOpenGLShaderProgram.addShaderFromSourceCode": [('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QByteArray'), ('PySide2.libpyside.ShaderType', 'str')], + "QOpenGLShaderProgram.addShaderFromSourceFile": ('PySide2.libpyside.ShaderType', 'str'), + "QOpenGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShaderProgram.bind": (), + "QOpenGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QOpenGLShaderProgram.create": (), + "QOpenGLShaderProgram.defaultInnerTessellationLevels": (), + "QOpenGLShaderProgram.defaultOuterTessellationLevels": (), + "QOpenGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QOpenGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QOpenGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLShaderProgram.isLinked": (), + "QOpenGLShaderProgram.link": (), + "QOpenGLShaderProgram.log": (), + "QOpenGLShaderProgram.maxGeometryOutputVertices": (), + "QOpenGLShaderProgram.patchVertexCount": (), + "QOpenGLShaderProgram.programId": (), + "QOpenGLShaderProgram.release": (), + "QOpenGLShaderProgram.removeAllShaders": (), + "QOpenGLShaderProgram.removeShader": ('PySide2.QtGui.QOpenGLShader',), + "QOpenGLShaderProgram.setAttributeArray": [('int', 'float', 'int', 'int'), ('int', 'int', 'int', 'int', 'int'), ('str', 'float', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QOpenGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QOpenGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'float', 'int', 'int'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'float', 'int', 'int')], + "QOpenGLShaderProgram.setDefaultInnerTessellationLevels": ('list',), + "QOpenGLShaderProgram.setDefaultOuterTessellationLevels": ('list',), + "QOpenGLShaderProgram.setPatchVertexCount": ('int',), + "QOpenGLShaderProgram.setUniformValue": [('int', 'List[List[float]]'), ('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'List[List[float]]'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QOpenGLShaderProgram.setUniformValueArray": [('int', 'float', 'int', 'int'), ('int', 'int', 'int'), ('str', 'float', 'int', 'int'), ('str', 'int', 'int')], + "QOpenGLShaderProgram.shaders": (), + "QOpenGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtGui.QOpenGLTexture: + "QOpenGLTexture.__init__": [('PySide2.QtGui.QImage', 'PySide2.QtGui.QOpenGLTexture.MipMapGeneration'), ('PySide2.QtGui.QOpenGLTexture.Target',)], + "QOpenGLTexture.allocateStorage": [(), ('PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType')], + "QOpenGLTexture.bind": [(), ('int', 'PySide2.QtGui.QOpenGLTexture.TextureUnitReset')], + "QOpenGLTexture.borderColor": (), + "QOpenGLTexture.boundTextureId": [('PySide2.QtGui.QOpenGLTexture.BindingTarget',), ('int', 'PySide2.QtGui.QOpenGLTexture.BindingTarget')], + "QOpenGLTexture.comparisonFunction": (), + "QOpenGLTexture.comparisonMode": (), + "QOpenGLTexture.create": (), + "QOpenGLTexture.createTextureView": ('PySide2.QtGui.QOpenGLTexture.Target', 'PySide2.QtGui.QOpenGLTexture.TextureFormat', 'int', 'int', 'int', 'int'), + "QOpenGLTexture.depth": (), + "QOpenGLTexture.depthStencilMode": (), + "QOpenGLTexture.destroy": (), + "QOpenGLTexture.faces": (), + "QOpenGLTexture.format": (), + "QOpenGLTexture.generateMipMaps": [(), ('int', 'bool')], + "QOpenGLTexture.hasFeature": ('PySide2.QtGui.QOpenGLTexture.Feature',), + "QOpenGLTexture.height": (), + "QOpenGLTexture.isAutoMipMapGenerationEnabled": (), + "QOpenGLTexture.isBound": [(), ('int',)], + "QOpenGLTexture.isCreated": (), + "QOpenGLTexture.isFixedSamplePositions": (), + "QOpenGLTexture.isStorageAllocated": (), + "QOpenGLTexture.isTextureView": (), + "QOpenGLTexture.layers": (), + "QOpenGLTexture.levelOfDetailRange": (), + "QOpenGLTexture.levelofDetailBias": (), + "QOpenGLTexture.magnificationFilter": (), + "QOpenGLTexture.maximumAnisotropy": (), + "QOpenGLTexture.maximumLevelOfDetail": (), + "QOpenGLTexture.maximumMipLevels": (), + "QOpenGLTexture.minMagFilters": (), + "QOpenGLTexture.minificationFilter": (), + "QOpenGLTexture.minimumLevelOfDetail": (), + "QOpenGLTexture.mipBaseLevel": (), + "QOpenGLTexture.mipLevelRange": (), + "QOpenGLTexture.mipLevels": (), + "QOpenGLTexture.mipMaxLevel": (), + "QOpenGLTexture.release": [(), ('int', 'PySide2.QtGui.QOpenGLTexture.TextureUnitReset')], + "QOpenGLTexture.samples": (), + "QOpenGLTexture.setAutoMipMapGenerationEnabled": ('bool',), + "QOpenGLTexture.setBorderColor": [('PySide2.QtGui.QColor',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QOpenGLTexture.setComparisonFunction": ('PySide2.QtGui.QOpenGLTexture.ComparisonFunction',), + "QOpenGLTexture.setComparisonMode": ('PySide2.QtGui.QOpenGLTexture.ComparisonMode',), + "QOpenGLTexture.setCompressedData": [('int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions')], + "QOpenGLTexture.setData": [('PySide2.QtGui.QImage', 'PySide2.QtGui.QOpenGLTexture.MipMapGeneration'), ('PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions')], + "QOpenGLTexture.setDepthStencilMode": ('PySide2.QtGui.QOpenGLTexture.DepthStencilMode',), + "QOpenGLTexture.setFixedSamplePositions": ('bool',), + "QOpenGLTexture.setFormat": ('PySide2.QtGui.QOpenGLTexture.TextureFormat',), + "QOpenGLTexture.setLayers": ('int',), + "QOpenGLTexture.setLevelOfDetailRange": ('float', 'float'), + "QOpenGLTexture.setLevelofDetailBias": ('float',), + "QOpenGLTexture.setMagnificationFilter": ('PySide2.QtGui.QOpenGLTexture.Filter',), + "QOpenGLTexture.setMaximumAnisotropy": ('float',), + "QOpenGLTexture.setMaximumLevelOfDetail": ('float',), + "QOpenGLTexture.setMinMagFilters": ('PySide2.QtGui.QOpenGLTexture.Filter', 'PySide2.QtGui.QOpenGLTexture.Filter'), + "QOpenGLTexture.setMinificationFilter": ('PySide2.QtGui.QOpenGLTexture.Filter',), + "QOpenGLTexture.setMinimumLevelOfDetail": ('float',), + "QOpenGLTexture.setMipBaseLevel": ('int',), + "QOpenGLTexture.setMipLevelRange": ('int', 'int'), + "QOpenGLTexture.setMipLevels": ('int',), + "QOpenGLTexture.setMipMaxLevel": ('int',), + "QOpenGLTexture.setSamples": ('int',), + "QOpenGLTexture.setSize": ('int', 'int', 'int'), + "QOpenGLTexture.setSwizzleMask": [('PySide2.QtGui.QOpenGLTexture.SwizzleComponent', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue'), ('PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue')], + "QOpenGLTexture.setWrapMode": [('PySide2.QtGui.QOpenGLTexture.CoordinateDirection', 'PySide2.QtGui.QOpenGLTexture.WrapMode'), ('PySide2.QtGui.QOpenGLTexture.WrapMode',)], + "QOpenGLTexture.swizzleMask": ('PySide2.QtGui.QOpenGLTexture.SwizzleComponent',), + "QOpenGLTexture.target": (), + "QOpenGLTexture.textureId": (), + "QOpenGLTexture.width": (), + "QOpenGLTexture.wrapMode": ('PySide2.QtGui.QOpenGLTexture.CoordinateDirection',), + + # class PySide2.QtGui.QOpenGLTextureBlitter: + "QOpenGLTextureBlitter.__init__": (), + "QOpenGLTextureBlitter.bind": ('int',), + "QOpenGLTextureBlitter.blit": ('int', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix3x3'), + "QOpenGLTextureBlitter.create": (), + "QOpenGLTextureBlitter.destroy": (), + "QOpenGLTextureBlitter.isCreated": (), + "QOpenGLTextureBlitter.release": (), + "QOpenGLTextureBlitter.setOpacity": ('float',), + "QOpenGLTextureBlitter.setRedBlueSwizzle": ('bool',), + "QOpenGLTextureBlitter.supportsExternalOESTarget": (), + "QOpenGLTextureBlitter.targetTransform": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRect'), + + # class PySide2.QtGui.QOpenGLTimeMonitor: + "QOpenGLTimeMonitor.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLTimeMonitor.create": (), + "QOpenGLTimeMonitor.destroy": (), + "QOpenGLTimeMonitor.isCreated": (), + "QOpenGLTimeMonitor.isResultAvailable": (), + "QOpenGLTimeMonitor.objectIds": (), + "QOpenGLTimeMonitor.recordSample": (), + "QOpenGLTimeMonitor.reset": (), + "QOpenGLTimeMonitor.sampleCount": (), + "QOpenGLTimeMonitor.setSampleCount": ('int',), + "QOpenGLTimeMonitor.waitForIntervals": (), + "QOpenGLTimeMonitor.waitForSamples": (), + + # class PySide2.QtGui.QOpenGLTimerQuery: + "QOpenGLTimerQuery.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLTimerQuery.begin": (), + "QOpenGLTimerQuery.create": (), + "QOpenGLTimerQuery.destroy": (), + "QOpenGLTimerQuery.end": (), + "QOpenGLTimerQuery.isCreated": (), + "QOpenGLTimerQuery.isResultAvailable": (), + "QOpenGLTimerQuery.objectId": (), + "QOpenGLTimerQuery.recordTimestamp": (), + "QOpenGLTimerQuery.waitForResult": (), + "QOpenGLTimerQuery.waitForTimestamp": (), + + # class PySide2.QtGui.QOpenGLVersionProfile: + "QOpenGLVersionProfile.__init__": [(), ('PySide2.QtGui.QOpenGLVersionProfile',), ('PySide2.QtGui.QSurfaceFormat',)], + "QOpenGLVersionProfile.__copy__": (), + "QOpenGLVersionProfile.hasProfiles": (), + "QOpenGLVersionProfile.isLegacyVersion": (), + "QOpenGLVersionProfile.isValid": (), + "QOpenGLVersionProfile.profile": (), + "QOpenGLVersionProfile.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QOpenGLVersionProfile.setVersion": ('int', 'int'), + "QOpenGLVersionProfile.version": (), + + # class PySide2.QtGui.QOpenGLVertexArrayObject: + "QOpenGLVertexArrayObject.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLVertexArrayObject.bind": (), + "QOpenGLVertexArrayObject.create": (), + "QOpenGLVertexArrayObject.destroy": (), + "QOpenGLVertexArrayObject.isCreated": (), + "QOpenGLVertexArrayObject.objectId": (), + "QOpenGLVertexArrayObject.release": (), + + # class PySide2.QtGui.QOpenGLWindow: + "QOpenGLWindow.__init__": [('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLWindow.UpdateBehavior', 'PySide2.QtGui.QWindow'), ('PySide2.QtGui.QOpenGLWindow.UpdateBehavior', 'PySide2.QtGui.QWindow')], + "QOpenGLWindow.context": (), + "QOpenGLWindow.defaultFramebufferObject": (), + "QOpenGLWindow.doneCurrent": (), + "QOpenGLWindow.grabFramebuffer": (), + "QOpenGLWindow.initializeGL": (), + "QOpenGLWindow.isValid": (), + "QOpenGLWindow.makeCurrent": (), + "QOpenGLWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWindow.paintGL": (), + "QOpenGLWindow.paintOverGL": (), + "QOpenGLWindow.paintUnderGL": (), + "QOpenGLWindow.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWindow.resizeGL": ('int', 'int'), + "QOpenGLWindow.shareContext": (), + "QOpenGLWindow.updateBehavior": (), + + # class PySide2.QtGui.QPageLayout: + "QPageLayout.__init__": [(), ('PySide2.QtGui.QPageLayout',), ('PySide2.QtGui.QPageSize', 'PySide2.QtGui.QPageLayout.Orientation', 'PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit', 'PySide2.QtCore.QMarginsF')], + "QPageLayout.__copy__": (), + "QPageLayout.fullRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.fullRectPixels": ('int',), + "QPageLayout.fullRectPoints": (), + "QPageLayout.isEquivalentTo": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.isValid": (), + "QPageLayout.margins": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.marginsPixels": ('int',), + "QPageLayout.marginsPoints": (), + "QPageLayout.maximumMargins": (), + "QPageLayout.minimumMargins": (), + "QPageLayout.mode": (), + "QPageLayout.orientation": (), + "QPageLayout.pageSize": (), + "QPageLayout.paintRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.paintRectPixels": ('int',), + "QPageLayout.paintRectPoints": (), + "QPageLayout.setBottomMargin": ('float',), + "QPageLayout.setLeftMargin": ('float',), + "QPageLayout.setMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMinimumMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMode": ('PySide2.QtGui.QPageLayout.Mode',), + "QPageLayout.setOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPageLayout.setPageSize": ('PySide2.QtGui.QPageSize', 'PySide2.QtCore.QMarginsF'), + "QPageLayout.setRightMargin": ('float',), + "QPageLayout.setTopMargin": ('float',), + "QPageLayout.setUnits": ('PySide2.QtGui.QPageLayout.Unit',), + "QPageLayout.swap": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.units": (), + + # class PySide2.QtGui.QPageSize: + "QPageSize.__init__": [(), ('PySide2.QtCore.QSize', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.__copy__": (), + "QPageSize.definitionSize": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.definitionUnits": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.id": [(), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('int',)], + "QPageSize.isEquivalentTo": ('PySide2.QtGui.QPageSize',), + "QPageSize.isValid": (), + "QPageSize.key": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.name": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.rect": ('PySide2.QtGui.QPageSize.Unit',), + "QPageSize.rectPixels": ('int',), + "QPageSize.rectPoints": (), + "QPageSize.size": [('PySide2.QtGui.QPageSize.PageSizeId', 'PySide2.QtGui.QPageSize.Unit'), ('PySide2.QtGui.QPageSize.Unit',)], + "QPageSize.sizePixels": [('PySide2.QtGui.QPageSize.PageSizeId', 'int'), ('int',)], + "QPageSize.sizePoints": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.swap": ('PySide2.QtGui.QPageSize',), + "QPageSize.windowsId": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + + # class PySide2.QtGui.QPagedPaintDevice: + "QPagedPaintDevice.__init__": (), + "QPagedPaintDevice.devicePageLayout": (), + "QPagedPaintDevice.margins": (), + "QPagedPaintDevice.newPage": (), + "QPagedPaintDevice.pageLayout": (), + "QPagedPaintDevice.pageSize": (), + "QPagedPaintDevice.pageSizeMM": (), + "QPagedPaintDevice.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPagedPaintDevice.setPageLayout": ('PySide2.QtGui.QPageLayout',), + "QPagedPaintDevice.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit')], + "QPagedPaintDevice.setPageOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPagedPaintDevice.setPageSize": [('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPagedPaintDevice.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtGui.QPaintDevice: + "QPaintDevice.__init__": (), + "QPaintDevice.colorCount": (), + "QPaintDevice.depth": (), + "QPaintDevice.devType": (), + "QPaintDevice.devicePixelRatio": (), + "QPaintDevice.devicePixelRatioF": (), + "QPaintDevice.devicePixelRatioFScale": (), + "QPaintDevice.height": (), + "QPaintDevice.heightMM": (), + "QPaintDevice.initPainter": ('PySide2.QtGui.QPainter',), + "QPaintDevice.logicalDpiX": (), + "QPaintDevice.logicalDpiY": (), + "QPaintDevice.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDevice.paintEngine": (), + "QPaintDevice.paintingActive": (), + "QPaintDevice.physicalDpiX": (), + "QPaintDevice.physicalDpiY": (), + "QPaintDevice.redirected": ('PySide2.QtCore.QPoint',), + "QPaintDevice.sharedPainter": (), + "QPaintDevice.width": (), + "QPaintDevice.widthMM": (), + + # class PySide2.QtGui.QPaintDeviceWindow: + "QPaintDeviceWindow.event": ('PySide2.QtCore.QEvent',), + "QPaintDeviceWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QPaintDeviceWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDeviceWindow.paintEngine": (), + "QPaintDeviceWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPaintDeviceWindow.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + + # class PySide2.QtGui.QPaintEngine: + "QPaintEngine.__init__": ('PySide2.libpyside.PaintEngineFeatures',), + "QPaintEngine.begin": ('PySide2.QtGui.QPaintDevice',), + "QPaintEngine.clearDirty": ('PySide2.libpyside.DirtyFlags',), + "QPaintEngine.coordinateOffset": (), + "QPaintEngine.drawEllipse": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QPaintEngine.drawImage": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'PySide2.libpyside.ImageConversionFlags'), + "QPaintEngine.drawLines": [('PySide2.QtCore.QLine', 'int'), ('PySide2.QtCore.QLineF', 'int')], + "QPaintEngine.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPaintEngine.drawPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), + "QPaintEngine.drawPoints": [('PySide2.QtCore.QPoint', 'int'), ('PySide2.QtCore.QPointF', 'int')], + "QPaintEngine.drawPolygon": [('PySide2.QtCore.QPoint', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode')], + "QPaintEngine.drawRects": [('PySide2.QtCore.QRect', 'int'), ('PySide2.QtCore.QRectF', 'int')], + "QPaintEngine.drawTextItem": ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), + "QPaintEngine.drawTiledPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), + "QPaintEngine.end": (), + "QPaintEngine.hasFeature": ('PySide2.libpyside.PaintEngineFeatures',), + "QPaintEngine.isActive": (), + "QPaintEngine.isExtended": (), + "QPaintEngine.paintDevice": (), + "QPaintEngine.painter": (), + "QPaintEngine.setActive": ('bool',), + "QPaintEngine.setDirty": ('PySide2.libpyside.DirtyFlags',), + "QPaintEngine.setSystemClip": ('PySide2.QtGui.QRegion',), + "QPaintEngine.setSystemRect": ('PySide2.QtCore.QRect',), + "QPaintEngine.syncState": (), + "QPaintEngine.systemClip": (), + "QPaintEngine.systemRect": (), + "QPaintEngine.testDirty": ('PySide2.libpyside.DirtyFlags',), + "QPaintEngine.type": (), + "QPaintEngine.updateState": ('PySide2.QtGui.QPaintEngineState',), + + # class PySide2.QtGui.QPaintEngineState: + "QPaintEngineState.__init__": (), + "QPaintEngineState.backgroundBrush": (), + "QPaintEngineState.backgroundMode": (), + "QPaintEngineState.brush": (), + "QPaintEngineState.brushNeedsResolving": (), + "QPaintEngineState.brushOrigin": (), + "QPaintEngineState.clipOperation": (), + "QPaintEngineState.clipPath": (), + "QPaintEngineState.clipRegion": (), + "QPaintEngineState.compositionMode": (), + "QPaintEngineState.font": (), + "QPaintEngineState.isClipEnabled": (), + "QPaintEngineState.matrix": (), + "QPaintEngineState.opacity": (), + "QPaintEngineState.painter": (), + "QPaintEngineState.pen": (), + "QPaintEngineState.penNeedsResolving": (), + "QPaintEngineState.renderHints": (), + "QPaintEngineState.state": (), + "QPaintEngineState.transform": (), + + # class PySide2.QtGui.QPaintEvent: + "QPaintEvent.__init__": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QPaintEvent.rect": (), + "QPaintEvent.region": (), + + # class PySide2.QtGui.QPainter: + "QPainter.__init__": [(), ('PySide2.QtGui.QPaintDevice',)], + "QPainter.background": (), + "QPainter.backgroundMode": (), + "QPainter.begin": ('PySide2.QtGui.QPaintDevice',), + "QPainter.beginNativePainting": (), + "QPainter.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str'), ('PySide2.QtCore.QRectF', 'int', 'str'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str')], + "QPainter.brush": (), + "QPainter.brushOrigin": (), + "QPainter.clipBoundingRect": (), + "QPainter.clipPath": (), + "QPainter.clipRegion": (), + "QPainter.combinedMatrix": (), + "QPainter.combinedTransform": (), + "QPainter.compositionMode": (), + "QPainter.device": (), + "QPainter.deviceMatrix": (), + "QPainter.deviceTransform": (), + "QPainter.drawArc": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawChord": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawConvexPolygon": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawEllipse": [('PySide2.QtCore.QPoint', 'int', 'int'), ('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawImage": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'PySide2.libpyside.ImageConversionFlags'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'PySide2.libpyside.ImageConversionFlags'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'PySide2.libpyside.ImageConversionFlags'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'PySide2.libpyside.ImageConversionFlags'), ('int', 'int', 'PySide2.QtGui.QImage', 'int', 'int', 'int', 'int', 'PySide2.libpyside.ImageConversionFlags')], + "QPainter.drawLine": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int')], + "QPainter.drawLines": ('list',), + "QPainter.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPainter.drawPicture": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPicture'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPicture'), ('int', 'int', 'PySide2.QtGui.QPicture')], + "QPainter.drawPie": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmap": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmapFragments": ('PySide2.QtGui.QPainter.PixmapFragment', 'int', 'PySide2.QtGui.QPixmap', 'PySide2.libpyside.PixmapFragmentHints'), + "QPainter.drawPoint": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.drawPoints": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawPolygon": [('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.FillRule'), ('list', 'PySide2.QtCore.Qt.FillRule')], + "QPainter.drawPolyline": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawRects": ('list',), + "QPainter.drawRoundRect": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawRoundedRect": [('PySide2.QtCore.QRect', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('int', 'int', 'int', 'int', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainter.drawStaticText": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QStaticText'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QStaticText'), ('int', 'int', 'PySide2.QtGui.QStaticText')], + "QPainter.drawText": [('PySide2.QtCore.QPoint', 'str'), ('PySide2.QtCore.QPointF', 'str'), ('PySide2.QtCore.QRect', 'int', 'str', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'int', 'str', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str', 'PySide2.QtCore.QRect'), ('int', 'int', 'str')], + "QPainter.drawTextItem": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QTextItem'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), ('int', 'int', 'PySide2.QtGui.QTextItem')], + "QPainter.drawTiledPixmap": [('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int')], + "QPainter.end": (), + "QPainter.endNativePainting": (), + "QPainter.eraseRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.fillPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QBrush'), + "QPainter.fillRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.BrushStyle'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.GlobalColor'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QBrush'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QColor')], + "QPainter.font": (), + "QPainter.fontInfo": (), + "QPainter.fontMetrics": (), + "QPainter.hasClipping": (), + "QPainter.initFrom": ('PySide2.QtGui.QPaintDevice',), + "QPainter.isActive": (), + "QPainter.layoutDirection": (), + "QPainter.matrix": (), + "QPainter.matrixEnabled": (), + "QPainter.opacity": (), + "QPainter.paintEngine": (), + "QPainter.pen": (), + "QPainter.redirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.renderHints": (), + "QPainter.resetMatrix": (), + "QPainter.resetTransform": (), + "QPainter.restore": (), + "QPainter.restoreRedirected": ('PySide2.QtGui.QPaintDevice',), + "QPainter.rotate": ('float',), + "QPainter.save": (), + "QPainter.scale": ('float', 'float'), + "QPainter.setBackground": ('PySide2.QtGui.QBrush',), + "QPainter.setBackgroundMode": ('PySide2.QtCore.Qt.BGMode',), + "QPainter.setBrush": [('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtGui.QBrush',)], + "QPainter.setBrushOrigin": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.setClipPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ClipOperation'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ClipOperation'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ClipOperation')], + "QPainter.setClipRegion": ('PySide2.QtGui.QRegion', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipping": ('bool',), + "QPainter.setCompositionMode": ('PySide2.QtGui.QPainter.CompositionMode',), + "QPainter.setFont": ('PySide2.QtGui.QFont',), + "QPainter.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QPainter.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setMatrixEnabled": ('bool',), + "QPainter.setOpacity": ('float',), + "QPainter.setPen": [('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPainter.setRedirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QPainter.setRenderHints": ('PySide2.libpyside.RenderHints', 'bool'), + "QPainter.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.setViewTransformEnabled": ('bool',), + "QPainter.setViewport": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWindow": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWorldMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setWorldMatrixEnabled": ('bool',), + "QPainter.setWorldTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.shear": ('float', 'float'), + "QPainter.strokePath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen'), + "QPainter.testRenderHint": ('PySide2.QtGui.QPainter.RenderHint',), + "QPainter.transform": (), + "QPainter.translate": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainter.viewTransformEnabled": (), + "QPainter.viewport": (), + "QPainter.window": (), + "QPainter.worldMatrix": (), + "QPainter.worldMatrixEnabled": (), + "QPainter.worldTransform": (), + + # class PySide2.QtGui.QPainterPath: + "QPainterPath.__init__": [(), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.__copy__": (), + "QPainterPath.addEllipse": [('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.addPolygon": ('PySide2.QtGui.QPolygonF',), + "QPainterPath.addRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addRegion": ('PySide2.QtGui.QRegion',), + "QPainterPath.addRoundRect": [('PySide2.QtCore.QRectF', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QPainterPath.addRoundedRect": [('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('float', 'float', 'float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainterPath.addText": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QFont', 'str'), ('float', 'float', 'PySide2.QtGui.QFont', 'str')], + "QPainterPath.angleAtPercent": ('float',), + "QPainterPath.arcMoveTo": [('PySide2.QtCore.QRectF', 'float'), ('float', 'float', 'float', 'float', 'float')], + "QPainterPath.arcTo": [('PySide2.QtCore.QRectF', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.boundingRect": (), + "QPainterPath.closeSubpath": (), + "QPainterPath.connectPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.controlPointRect": (), + "QPainterPath.cubicTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.currentPosition": (), + "QPainterPath.elementAt": ('int',), + "QPainterPath.elementCount": (), + "QPainterPath.fillRule": (), + "QPainterPath.intersected": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.intersects": [('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.isEmpty": (), + "QPainterPath.length": (), + "QPainterPath.lineTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.percentAtLength": ('float',), + "QPainterPath.pointAtPercent": ('float',), + "QPainterPath.quadTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QPainterPath.setElementPositionAt": ('int', 'float', 'float'), + "QPainterPath.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QPainterPath.simplified": (), + "QPainterPath.slopeAtPercent": ('float',), + "QPainterPath.subtracted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.subtractedInverted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.swap": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.toFillPolygon": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toFillPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toReversed": (), + "QPainterPath.toSubpathPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.united": ('PySide2.QtGui.QPainterPath',), + + # class PySide2.QtGui.QPainterPathStroker: + "QPainterPathStroker.__init__": [(), ('PySide2.QtGui.QPen',)], + "QPainterPathStroker.capStyle": (), + "QPainterPathStroker.createStroke": ('PySide2.QtGui.QPainterPath',), + "QPainterPathStroker.curveThreshold": (), + "QPainterPathStroker.dashOffset": (), + "QPainterPathStroker.dashPattern": (), + "QPainterPathStroker.joinStyle": (), + "QPainterPathStroker.miterLimit": (), + "QPainterPathStroker.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPainterPathStroker.setCurveThreshold": ('float',), + "QPainterPathStroker.setDashOffset": ('float',), + "QPainterPathStroker.setDashPattern": [('PySide2.QtCore.Qt.PenStyle',), ('list',)], + "QPainterPathStroker.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPainterPathStroker.setMiterLimit": ('float',), + "QPainterPathStroker.setWidth": ('float',), + "QPainterPathStroker.width": (), + + # class PySide2.QtGui.QPalette: + "QPalette.__init__": [(), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette',)], + "QPalette.__copy__": (), + "QPalette.alternateBase": (), + "QPalette.background": (), + "QPalette.base": (), + "QPalette.brightText": (), + "QPalette.brush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.button": (), + "QPalette.buttonText": (), + "QPalette.cacheKey": (), + "QPalette.color": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.currentColorGroup": (), + "QPalette.dark": (), + "QPalette.foreground": (), + "QPalette.highlight": (), + "QPalette.highlightedText": (), + "QPalette.isBrushSet": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), + "QPalette.isCopyOf": ('PySide2.QtGui.QPalette',), + "QPalette.isEqual": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorGroup'), + "QPalette.light": (), + "QPalette.link": (), + "QPalette.linkVisited": (), + "QPalette.mid": (), + "QPalette.midlight": (), + "QPalette.resolve": [(), ('PySide2.QtGui.QPalette',), ('int',)], + "QPalette.setBrush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush')], + "QPalette.setColor": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor')], + "QPalette.setColorGroup": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), + "QPalette.setCurrentColorGroup": ('PySide2.QtGui.QPalette.ColorGroup',), + "QPalette.shadow": (), + "QPalette.swap": ('PySide2.QtGui.QPalette',), + "QPalette.text": (), + "QPalette.toolTipBase": (), + "QPalette.toolTipText": (), + "QPalette.window": (), + "QPalette.windowText": (), + + # class PySide2.QtGui.QPdfWriter: + "QPdfWriter.__init__": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPdfWriter.creator": (), + "QPdfWriter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPdfWriter.newPage": (), + "QPdfWriter.paintEngine": (), + "QPdfWriter.pdfVersion": (), + "QPdfWriter.resolution": (), + "QPdfWriter.setCreator": ('str',), + "QPdfWriter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPdfWriter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPdfWriter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPdfWriter.setPdfVersion": ('PySide2.QtGui.QPagedPaintDevice.PdfVersion',), + "QPdfWriter.setResolution": ('int',), + "QPdfWriter.setTitle": ('str',), + "QPdfWriter.title": (), + + # class PySide2.QtGui.QPen: + "QPen.__init__": [(), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QBrush', 'float', 'PySide2.QtCore.Qt.PenStyle', 'PySide2.QtCore.Qt.PenCapStyle', 'PySide2.QtCore.Qt.PenJoinStyle'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPen.__copy__": (), + "QPen.brush": (), + "QPen.capStyle": (), + "QPen.color": (), + "QPen.dashOffset": (), + "QPen.dashPattern": (), + "QPen.isCosmetic": (), + "QPen.isSolid": (), + "QPen.joinStyle": (), + "QPen.miterLimit": (), + "QPen.setBrush": ('PySide2.QtGui.QBrush',), + "QPen.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPen.setColor": ('PySide2.QtGui.QColor',), + "QPen.setCosmetic": ('bool',), + "QPen.setDashOffset": ('float',), + "QPen.setDashPattern": ('list',), + "QPen.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPen.setMiterLimit": ('float',), + "QPen.setStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QPen.setWidth": ('int',), + "QPen.setWidthF": ('float',), + "QPen.style": (), + "QPen.swap": ('PySide2.QtGui.QPen',), + "QPen.width": (), + "QPen.widthF": (), + + # class PySide2.QtGui.QPicture: + "QPicture.__init__": [('PySide2.QtGui.QPicture',), ('int',)], + "QPicture.__copy__": (), + "QPicture.boundingRect": (), + "QPicture.data": (), + "QPicture.devType": (), + "QPicture.inputFormatList": (), + "QPicture.inputFormats": (), + "QPicture.isNull": (), + "QPicture.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPicture.outputFormatList": (), + "QPicture.outputFormats": (), + "QPicture.paintEngine": (), + "QPicture.pictureFormat": ('str',), + "QPicture.play": ('PySide2.QtGui.QPainter',), + "QPicture.save": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.setBoundingRect": ('PySide2.QtCore.QRect',), + "QPicture.setData": ('str', 'int'), + "QPicture.size": (), + "QPicture.swap": ('PySide2.QtGui.QPicture',), + + # class PySide2.QtGui.QPictureIO: + "QPictureIO.__init__": [(), ('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPictureIO.description": (), + "QPictureIO.fileName": (), + "QPictureIO.format": (), + "QPictureIO.gamma": (), + "QPictureIO.inputFormats": (), + "QPictureIO.ioDevice": (), + "QPictureIO.outputFormats": (), + "QPictureIO.parameters": (), + "QPictureIO.picture": (), + "QPictureIO.pictureFormat": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPictureIO.quality": (), + "QPictureIO.read": (), + "QPictureIO.setDescription": ('str',), + "QPictureIO.setFileName": ('str',), + "QPictureIO.setFormat": ('str',), + "QPictureIO.setGamma": ('float',), + "QPictureIO.setIODevice": ('PySide2.QtCore.QIODevice',), + "QPictureIO.setParameters": ('str',), + "QPictureIO.setPicture": ('PySide2.QtGui.QPicture',), + "QPictureIO.setQuality": ('int',), + "QPictureIO.setStatus": ('int',), + "QPictureIO.status": (), + "QPictureIO.write": (), + + # class PySide2.QtGui.QPixelFormat: + "QPixelFormat.__init__": [(), ('PySide2.QtGui.QPixelFormat',), ('PySide2.QtGui.QPixelFormat.ColorModel', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'PySide2.QtGui.QPixelFormat.AlphaUsage', 'PySide2.QtGui.QPixelFormat.AlphaPosition', 'PySide2.QtGui.QPixelFormat.AlphaPremultiplied', 'PySide2.QtGui.QPixelFormat.TypeInterpretation', 'PySide2.QtGui.QPixelFormat.ByteOrder', 'Union[str, int]')], + "QPixelFormat.__copy__": (), + "QPixelFormat.alphaPosition": (), + "QPixelFormat.alphaSize": (), + "QPixelFormat.alphaUsage": (), + "QPixelFormat.bitsPerPixel": (), + "QPixelFormat.blackSize": (), + "QPixelFormat.blueSize": (), + "QPixelFormat.brightnessSize": (), + "QPixelFormat.byteOrder": (), + "QPixelFormat.channelCount": (), + "QPixelFormat.colorModel": (), + "QPixelFormat.cyanSize": (), + "QPixelFormat.greenSize": (), + "QPixelFormat.hueSize": (), + "QPixelFormat.lightnessSize": (), + "QPixelFormat.magentaSize": (), + "QPixelFormat.premultiplied": (), + "QPixelFormat.redSize": (), + "QPixelFormat.saturationSize": (), + "QPixelFormat.subEnum": (), + "QPixelFormat.typeInterpretation": (), + "QPixelFormat.yellowSize": (), + "QPixelFormat.yuvLayout": (), + + # class PySide2.QtGui.QPixmap: + "QPixmap.__init__": [(), ('List[str]',), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str', 'PySide2.libpyside.ImageConversionFlags')], + "QPixmap.__copy__": (), + "QPixmap.cacheKey": (), + "QPixmap.convertFromImage": ('PySide2.QtGui.QImage', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPixmap.createHeuristicMask": ('bool',), + "QPixmap.createMaskFromColor": ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.MaskMode'), + "QPixmap.defaultDepth": (), + "QPixmap.depth": (), + "QPixmap.devType": (), + "QPixmap.devicePixelRatio": (), + "QPixmap.fill": [('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QPaintDevice', 'int', 'int')], + "QPixmap.fromImage": ('PySide2.QtGui.QImage', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.fromImageInPlace": ('PySide2.QtGui.QImage', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.fromImageReader": ('PySide2.QtGui.QImageReader', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.grabWidget": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QObject', 'int', 'int', 'int', 'int')], + "QPixmap.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QPixmap.hasAlpha": (), + "QPixmap.hasAlphaChannel": (), + "QPixmap.height": (), + "QPixmap.isNull": (), + "QPixmap.isQBitmap": (), + "QPixmap.load": ('str', 'str', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.loadFromData": [('PySide2.QtCore.QByteArray', 'str', 'PySide2.libpyside.ImageConversionFlags'), ('Union[str, int]', 'int', 'str', 'PySide2.libpyside.ImageConversionFlags')], + "QPixmap.mask": (), + "QPixmap.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPixmap.paintEngine": (), + "QPixmap.rect": (), + "QPixmap.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QPixmap.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scroll": [('int', 'int', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion'), ('int', 'int', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion')], + "QPixmap.setDevicePixelRatio": ('float',), + "QPixmap.setMask": ('PySide2.QtGui.QBitmap',), + "QPixmap.size": (), + "QPixmap.swap": ('PySide2.QtGui.QPixmap',), + "QPixmap.toImage": (), + "QPixmap.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QPixmap.width": (), + + # class PySide2.QtGui.QPixmapCache: + "QPixmapCache.__init__": (), + "QPixmapCache.cacheLimit": (), + "QPixmapCache.clear": (), + "QPixmapCache.find": [('PySide2.QtGui.QPixmapCache.Key',), ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), ('str',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.insert": [('PySide2.QtGui.QPixmap',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.remove": [('PySide2.QtGui.QPixmapCache.Key',), ('str',)], + "QPixmapCache.replace": ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), + "QPixmapCache.setCacheLimit": ('int',), + + # class PySide2.QtGui.QPointingDeviceUniqueId: + "QPointingDeviceUniqueId.__init__": [(), ('PySide2.QtGui.QPointingDeviceUniqueId',)], + "QPointingDeviceUniqueId.__copy__": (), + "QPointingDeviceUniqueId.fromNumericId": ('int',), + "QPointingDeviceUniqueId.isValid": (), + "QPointingDeviceUniqueId.numericId": (), + + # class PySide2.QtGui.QPolygon: + "QPolygon.__init__": [(), ('PySide2.QtCore.QRect', 'bool'), ('PySide2.QtGui.QPolygon',), ('int',), ('list',)], + "QPolygon.__copy__": (), + "QPolygon.__reduce__": (), + "QPolygon.append": [('PySide2.QtCore.QPoint',), ('list',)], + "QPolygon.at": ('int',), + "QPolygon.boundingRect": (), + "QPolygon.capacity": (), + "QPolygon.clear": (), + "QPolygon.constData": (), + "QPolygon.constFirst": (), + "QPolygon.constLast": (), + "QPolygon.contains": ('PySide2.QtCore.QPoint',), + "QPolygon.containsPoint": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.Qt.FillRule'), + "QPolygon.count": [(), ('PySide2.QtCore.QPoint',)], + "QPolygon.data": (), + "QPolygon.empty": (), + "QPolygon.endsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.fill": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.first": (), + "QPolygon.fromList": ('list',), + "QPolygon.front": (), + "QPolygon.indexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.insert": [('int', 'PySide2.QtCore.QPoint'), ('int', 'int', 'PySide2.QtCore.QPoint')], + "QPolygon.intersected": ('PySide2.QtGui.QPolygon',), + "QPolygon.intersects": ('PySide2.QtGui.QPolygon',), + "QPolygon.isEmpty": (), + "QPolygon.isSharedWith": ('list',), + "QPolygon.last": (), + "QPolygon.lastIndexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.length": (), + "QPolygon.mid": ('int', 'int'), + "QPolygon.move": ('int', 'int'), + "QPolygon.pop_back": (), + "QPolygon.pop_front": (), + "QPolygon.prepend": ('PySide2.QtCore.QPoint',), + "QPolygon.push_back": ('PySide2.QtCore.QPoint',), + "QPolygon.push_front": ('PySide2.QtCore.QPoint',), + "QPolygon.remove": [('int',), ('int', 'int')], + "QPolygon.removeAll": ('PySide2.QtCore.QPoint',), + "QPolygon.removeAt": ('int',), + "QPolygon.removeFirst": (), + "QPolygon.removeLast": (), + "QPolygon.removeOne": ('PySide2.QtCore.QPoint',), + "QPolygon.replace": ('int', 'PySide2.QtCore.QPoint'), + "QPolygon.reserve": ('int',), + "QPolygon.resize": ('int',), + "QPolygon.setSharable": ('bool',), + "QPolygon.shrink_to_fit": (), + "QPolygon.size": (), + "QPolygon.squeeze": (), + "QPolygon.startsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.subtracted": ('PySide2.QtGui.QPolygon',), + "QPolygon.swap": ('PySide2.QtGui.QPolygon',), + "QPolygon.takeAt": ('int',), + "QPolygon.takeFirst": (), + "QPolygon.takeLast": (), + "QPolygon.toList": (), + "QPolygon.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.united": ('PySide2.QtGui.QPolygon',), + "QPolygon.value": [('int',), ('int', 'PySide2.QtCore.QPoint')], + + # class PySide2.QtGui.QPolygonF: + "QPolygonF.__init__": [(), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('int',), ('list',)], + "QPolygonF.__copy__": (), + "QPolygonF.append": [('PySide2.QtCore.QPointF',), ('list',)], + "QPolygonF.at": ('int',), + "QPolygonF.boundingRect": (), + "QPolygonF.capacity": (), + "QPolygonF.clear": (), + "QPolygonF.constData": (), + "QPolygonF.constFirst": (), + "QPolygonF.constLast": (), + "QPolygonF.contains": ('PySide2.QtCore.QPointF',), + "QPolygonF.containsPoint": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.FillRule'), + "QPolygonF.count": [(), ('PySide2.QtCore.QPointF',)], + "QPolygonF.data": (), + "QPolygonF.empty": (), + "QPolygonF.endsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.fill": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.first": (), + "QPolygonF.fromList": ('list',), + "QPolygonF.front": (), + "QPolygonF.indexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.insert": [('int', 'PySide2.QtCore.QPointF'), ('int', 'int', 'PySide2.QtCore.QPointF')], + "QPolygonF.intersected": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.intersects": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.isClosed": (), + "QPolygonF.isEmpty": (), + "QPolygonF.isSharedWith": ('list',), + "QPolygonF.last": (), + "QPolygonF.lastIndexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.length": (), + "QPolygonF.mid": ('int', 'int'), + "QPolygonF.move": ('int', 'int'), + "QPolygonF.pop_back": (), + "QPolygonF.pop_front": (), + "QPolygonF.prepend": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_back": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_front": ('PySide2.QtCore.QPointF',), + "QPolygonF.remove": [('int',), ('int', 'int')], + "QPolygonF.removeAll": ('PySide2.QtCore.QPointF',), + "QPolygonF.removeAt": ('int',), + "QPolygonF.removeFirst": (), + "QPolygonF.removeLast": (), + "QPolygonF.removeOne": ('PySide2.QtCore.QPointF',), + "QPolygonF.replace": ('int', 'PySide2.QtCore.QPointF'), + "QPolygonF.reserve": ('int',), + "QPolygonF.resize": ('int',), + "QPolygonF.setSharable": ('bool',), + "QPolygonF.shrink_to_fit": (), + "QPolygonF.size": (), + "QPolygonF.squeeze": (), + "QPolygonF.startsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.subtracted": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.swap": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.takeAt": ('int',), + "QPolygonF.takeFirst": (), + "QPolygonF.takeLast": (), + "QPolygonF.toList": (), + "QPolygonF.toPolygon": (), + "QPolygonF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.united": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.value": [('int',), ('int', 'PySide2.QtCore.QPointF')], + + # class PySide2.QtGui.QPyTextObject: + "QPyTextObject.__init__": ('PySide2.QtCore.QObject',), + "QPyTextObject.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QPyTextObject.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QQuaternion: + "QQuaternion.__init__": [(), ('PySide2.QtGui.QVector4D',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QQuaternion.__copy__": (), + "QQuaternion.__reduce__": (), + "QQuaternion.conjugate": (), + "QQuaternion.conjugated": (), + "QQuaternion.dotProduct": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion'), + "QQuaternion.fromAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromAxisAndAngle": [('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QQuaternion.fromDirection": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromEulerAngles": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.fromRotationMatrix": ('PySide2.QtGui.QMatrix3x3',), + "QQuaternion.getAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.inverted": (), + "QQuaternion.isIdentity": (), + "QQuaternion.isNull": (), + "QQuaternion.length": (), + "QQuaternion.lengthSquared": (), + "QQuaternion.nlerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.normalize": (), + "QQuaternion.normalized": (), + "QQuaternion.rotatedVector": ('PySide2.QtGui.QVector3D',), + "QQuaternion.rotationTo": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.scalar": (), + "QQuaternion.setScalar": ('float',), + "QQuaternion.setVector": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.setX": ('float',), + "QQuaternion.setY": ('float',), + "QQuaternion.setZ": ('float',), + "QQuaternion.slerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.toEulerAngles": (), + "QQuaternion.toRotationMatrix": (), + "QQuaternion.toVector4D": (), + "QQuaternion.vector": (), + "QQuaternion.x": (), + "QQuaternion.y": (), + "QQuaternion.z": (), + + # class PySide2.QtGui.QRadialGradient: + "QRadialGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QRadialGradient',), ('float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QRadialGradient.__copy__": (), + "QRadialGradient.center": (), + "QRadialGradient.centerRadius": (), + "QRadialGradient.focalPoint": (), + "QRadialGradient.focalRadius": (), + "QRadialGradient.radius": (), + "QRadialGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setCenterRadius": ('float',), + "QRadialGradient.setFocalPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setFocalRadius": ('float',), + "QRadialGradient.setRadius": ('float',), + + # class PySide2.QtGui.QRasterWindow: + "QRasterWindow.__init__": ('PySide2.QtGui.QWindow',), + "QRasterWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QRasterWindow.redirected": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtGui.QRawFont: + "QRawFont.__init__": [(), ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), ('PySide2.QtGui.QRawFont',), ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference')], + "QRawFont.__copy__": (), + "QRawFont.advancesForGlyphIndexes": [('list',), ('list', 'PySide2.libpyside.LayoutFlags')], + "QRawFont.alphaMapForGlyph": ('int', 'PySide2.QtGui.QRawFont.AntialiasingType', 'PySide2.QtGui.QTransform'), + "QRawFont.ascent": (), + "QRawFont.averageCharWidth": (), + "QRawFont.boundingRect": ('int',), + "QRawFont.capHeight": (), + "QRawFont.descent": (), + "QRawFont.familyName": (), + "QRawFont.fontTable": ('str',), + "QRawFont.fromFont": ('PySide2.QtGui.QFont', 'PySide2.QtGui.QFontDatabase.WritingSystem'), + "QRawFont.glyphIndexesForString": ('str',), + "QRawFont.hintingPreference": (), + "QRawFont.isValid": (), + "QRawFont.leading": (), + "QRawFont.lineThickness": (), + "QRawFont.loadFromData": ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.loadFromFile": ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.maxCharWidth": (), + "QRawFont.pathForGlyph": ('int',), + "QRawFont.pixelSize": (), + "QRawFont.setPixelSize": ('float',), + "QRawFont.style": (), + "QRawFont.styleName": (), + "QRawFont.supportedWritingSystems": (), + "QRawFont.supportsCharacter": [('Union[str, int]',), ('int',)], + "QRawFont.swap": ('PySide2.QtGui.QRawFont',), + "QRawFont.underlinePosition": (), + "QRawFont.unitsPerEm": (), + "QRawFont.weight": (), + "QRawFont.xHeight": (), + + # class PySide2.QtGui.QRegExpValidator: + "QRegExpValidator.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRegExp', 'PySide2.QtCore.QObject')], + "QRegExpValidator.regExp": (), + "QRegExpValidator.setRegExp": ('PySide2.QtCore.QRegExp',), + "QRegExpValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QRegion: + "QRegion.__init__": [(), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion.RegionType'), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion.RegionType')], + "QRegion.__copy__": (), + "QRegion.begin": (), + "QRegion.boundingRect": (), + "QRegion.cbegin": (), + "QRegion.cend": (), + "QRegion.contains": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',)], + "QRegion.end": (), + "QRegion.intersected": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.intersects": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.isEmpty": (), + "QRegion.isNull": (), + "QRegion.rectCount": (), + "QRegion.rects": (), + "QRegion.setRects": ('PySide2.QtCore.QRect', 'int'), + "QRegion.subtracted": ('PySide2.QtGui.QRegion',), + "QRegion.swap": ('PySide2.QtGui.QRegion',), + "QRegion.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.united": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.xored": ('PySide2.QtGui.QRegion',), + + # class PySide2.QtGui.QResizeEvent: + "QResizeEvent.__init__": ('PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QResizeEvent.oldSize": (), + "QResizeEvent.size": (), + + # class PySide2.QtGui.QScreen: + "QScreen.angleBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation'), + "QScreen.availableGeometry": (), + "QScreen.availableSize": (), + "QScreen.availableVirtualGeometry": (), + "QScreen.availableVirtualSize": (), + "QScreen.depth": (), + "QScreen.devicePixelRatio": (), + "QScreen.geometry": (), + "QScreen.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QScreen.isLandscape": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.isPortrait": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.logicalDotsPerInch": (), + "QScreen.logicalDotsPerInchX": (), + "QScreen.logicalDotsPerInchY": (), + "QScreen.manufacturer": (), + "QScreen.mapBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.model": (), + "QScreen.name": (), + "QScreen.nativeOrientation": (), + "QScreen.orientation": (), + "QScreen.orientationUpdateMask": (), + "QScreen.physicalDotsPerInch": (), + "QScreen.physicalDotsPerInchX": (), + "QScreen.physicalDotsPerInchY": (), + "QScreen.physicalSize": (), + "QScreen.primaryOrientation": (), + "QScreen.refreshRate": (), + "QScreen.serialNumber": (), + "QScreen.setOrientationUpdateMask": ('PySide2.libpyside.ScreenOrientations',), + "QScreen.size": (), + "QScreen.transformBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.virtualGeometry": (), + "QScreen.virtualSiblings": (), + "QScreen.virtualSize": (), + + # class PySide2.QtGui.QScrollEvent: + "QScrollEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtGui.QScrollEvent.ScrollState'), + "QScrollEvent.contentPos": (), + "QScrollEvent.overshootDistance": (), + "QScrollEvent.scrollState": (), + + # class PySide2.QtGui.QScrollPrepareEvent: + "QScrollPrepareEvent.__init__": ('PySide2.QtCore.QPointF',), + "QScrollPrepareEvent.contentPos": (), + "QScrollPrepareEvent.contentPosRange": (), + "QScrollPrepareEvent.setContentPos": ('PySide2.QtCore.QPointF',), + "QScrollPrepareEvent.setContentPosRange": ('PySide2.QtCore.QRectF',), + "QScrollPrepareEvent.setViewportSize": ('PySide2.QtCore.QSizeF',), + "QScrollPrepareEvent.startPos": (), + "QScrollPrepareEvent.viewportSize": (), + + # class PySide2.QtGui.QSessionManager: + "QSessionManager.allowsErrorInteraction": (), + "QSessionManager.allowsInteraction": (), + "QSessionManager.cancel": (), + "QSessionManager.discardCommand": (), + "QSessionManager.isPhase2": (), + "QSessionManager.release": (), + "QSessionManager.requestPhase2": (), + "QSessionManager.restartCommand": (), + "QSessionManager.restartHint": (), + "QSessionManager.sessionId": (), + "QSessionManager.sessionKey": (), + "QSessionManager.setDiscardCommand": ('List[str]',), + "QSessionManager.setManagerProperty": [('str', 'List[str]'), ('str', 'str')], + "QSessionManager.setRestartCommand": ('List[str]',), + "QSessionManager.setRestartHint": ('PySide2.QtGui.QSessionManager.RestartHint',), + + # class PySide2.QtGui.QShortcutEvent: + "QShortcutEvent.__init__": ('PySide2.QtGui.QKeySequence', 'int', 'bool'), + "QShortcutEvent.isAmbiguous": (), + "QShortcutEvent.key": (), + "QShortcutEvent.shortcutId": (), + + # class PySide2.QtGui.QShowEvent: + "QShowEvent.__init__": (), + + # class PySide2.QtGui.QStandardItem: + "QStandardItem.__init__": [(), ('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QStandardItem',), ('int', 'int'), ('str',)], + "QStandardItem.accessibleDescription": (), + "QStandardItem.accessibleText": (), + "QStandardItem.appendColumn": ('list',), + "QStandardItem.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItem.appendRows": ('list',), + "QStandardItem.background": (), + "QStandardItem.checkState": (), + "QStandardItem.child": ('int', 'int'), + "QStandardItem.clone": (), + "QStandardItem.column": (), + "QStandardItem.columnCount": (), + "QStandardItem.data": ('int',), + "QStandardItem.emitDataChanged": (), + "QStandardItem.flags": (), + "QStandardItem.font": (), + "QStandardItem.foreground": (), + "QStandardItem.hasChildren": (), + "QStandardItem.icon": (), + "QStandardItem.index": (), + "QStandardItem.insertColumn": ('int', 'list'), + "QStandardItem.insertColumns": ('int', 'int'), + "QStandardItem.insertRow": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItem.insertRows": [('int', 'int'), ('int', 'list')], + "QStandardItem.isAutoTristate": (), + "QStandardItem.isCheckable": (), + "QStandardItem.isDragEnabled": (), + "QStandardItem.isDropEnabled": (), + "QStandardItem.isEditable": (), + "QStandardItem.isEnabled": (), + "QStandardItem.isSelectable": (), + "QStandardItem.isTristate": (), + "QStandardItem.isUserTristate": (), + "QStandardItem.model": (), + "QStandardItem.parent": (), + "QStandardItem.read": ('PySide2.QtCore.QDataStream',), + "QStandardItem.removeColumn": ('int',), + "QStandardItem.removeColumns": ('int', 'int'), + "QStandardItem.removeRow": ('int',), + "QStandardItem.removeRows": ('int', 'int'), + "QStandardItem.row": (), + "QStandardItem.rowCount": (), + "QStandardItem.setAccessibleDescription": ('str',), + "QStandardItem.setAccessibleText": ('str',), + "QStandardItem.setAutoTristate": ('bool',), + "QStandardItem.setBackground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QStandardItem.setCheckable": ('bool',), + "QStandardItem.setChild": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItem.setColumnCount": ('int',), + "QStandardItem.setData": ('Any', 'int'), + "QStandardItem.setDragEnabled": ('bool',), + "QStandardItem.setDropEnabled": ('bool',), + "QStandardItem.setEditable": ('bool',), + "QStandardItem.setEnabled": ('bool',), + "QStandardItem.setFlags": ('PySide2.libpyside.ItemFlags',), + "QStandardItem.setFont": ('PySide2.QtGui.QFont',), + "QStandardItem.setForeground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setIcon": ('PySide2.QtGui.QIcon',), + "QStandardItem.setRowCount": ('int',), + "QStandardItem.setSelectable": ('bool',), + "QStandardItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QStandardItem.setStatusTip": ('str',), + "QStandardItem.setText": ('str',), + "QStandardItem.setTextAlignment": ('PySide2.libpyside.Alignment',), + "QStandardItem.setToolTip": ('str',), + "QStandardItem.setTristate": ('bool',), + "QStandardItem.setUserTristate": ('bool',), + "QStandardItem.setWhatsThis": ('str',), + "QStandardItem.sizeHint": (), + "QStandardItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItem.statusTip": (), + "QStandardItem.takeChild": ('int', 'int'), + "QStandardItem.takeColumn": ('int',), + "QStandardItem.takeRow": ('int',), + "QStandardItem.text": (), + "QStandardItem.textAlignment": (), + "QStandardItem.toolTip": (), + "QStandardItem.type": (), + "QStandardItem.whatsThis": (), + "QStandardItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QStandardItemModel: + "QStandardItemModel.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QStandardItemModel.appendColumn": ('list',), + "QStandardItemModel.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItemModel.clear": (), + "QStandardItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStandardItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.findItems": ('str', 'PySide2.libpyside.MatchFlags', 'int'), + "QStandardItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QStandardItemModel.horizontalHeaderItem": ('int',), + "QStandardItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.indexFromItem": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.insertColumn": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'list')], + "QStandardItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.insertRow": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.invisibleRootItem": (), + "QStandardItemModel.item": ('int', 'int'), + "QStandardItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemPrototype": (), + "QStandardItemModel.mimeData": ('List[int]',), + "QStandardItemModel.mimeTypes": (), + "QStandardItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QStandardItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.setColumnCount": ('int',), + "QStandardItemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QStandardItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QStandardItemModel.setHorizontalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setHorizontalHeaderLabels": ('List[str]',), + "QStandardItemModel.setItem": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QStandardItemModel.setItemPrototype": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.setItemRoleNames": ('dict',), + "QStandardItemModel.setRowCount": ('int',), + "QStandardItemModel.setSortRole": ('int',), + "QStandardItemModel.setVerticalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setVerticalHeaderLabels": ('List[str]',), + "QStandardItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItemModel.sortRole": (), + "QStandardItemModel.supportedDropActions": (), + "QStandardItemModel.takeColumn": ('int',), + "QStandardItemModel.takeHorizontalHeaderItem": ('int',), + "QStandardItemModel.takeItem": ('int', 'int'), + "QStandardItemModel.takeRow": ('int',), + "QStandardItemModel.takeVerticalHeaderItem": ('int',), + "QStandardItemModel.verticalHeaderItem": ('int',), + + # class PySide2.QtGui.QStaticText: + "QStaticText.__init__": [(), ('PySide2.QtGui.QStaticText',), ('str',)], + "QStaticText.__copy__": (), + "QStaticText.performanceHint": (), + "QStaticText.prepare": ('PySide2.QtGui.QTransform', 'PySide2.QtGui.QFont'), + "QStaticText.setPerformanceHint": ('PySide2.QtGui.QStaticText.PerformanceHint',), + "QStaticText.setText": ('str',), + "QStaticText.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QStaticText.setTextOption": ('PySide2.QtGui.QTextOption',), + "QStaticText.setTextWidth": ('float',), + "QStaticText.size": (), + "QStaticText.swap": ('PySide2.QtGui.QStaticText',), + "QStaticText.text": (), + "QStaticText.textFormat": (), + "QStaticText.textOption": (), + "QStaticText.textWidth": (), + + # class PySide2.QtGui.QStatusTipEvent: + "QStatusTipEvent.__init__": ('str',), + "QStatusTipEvent.tip": (), + + # class PySide2.QtGui.QStyleHints: + "QStyleHints.cursorFlashTime": (), + "QStyleHints.fontSmoothingGamma": (), + "QStyleHints.keyboardAutoRepeatRate": (), + "QStyleHints.keyboardInputInterval": (), + "QStyleHints.mouseDoubleClickInterval": (), + "QStyleHints.mousePressAndHoldInterval": (), + "QStyleHints.mouseQuickSelectionThreshold": (), + "QStyleHints.passwordMaskCharacter": (), + "QStyleHints.passwordMaskDelay": (), + "QStyleHints.setCursorFlashTime": ('int',), + "QStyleHints.setFocusOnTouchRelease": (), + "QStyleHints.setKeyboardInputInterval": ('int',), + "QStyleHints.setMouseDoubleClickInterval": ('int',), + "QStyleHints.setMousePressAndHoldInterval": ('int',), + "QStyleHints.setMouseQuickSelectionThreshold": ('int',), + "QStyleHints.setStartDragDistance": ('int',), + "QStyleHints.setStartDragTime": ('int',), + "QStyleHints.setTabFocusBehavior": ('PySide2.QtCore.Qt.TabFocusBehavior',), + "QStyleHints.setUseHoverEffects": ('bool',), + "QStyleHints.setWheelScrollLines": ('int',), + "QStyleHints.showIsFullScreen": (), + "QStyleHints.showIsMaximized": (), + "QStyleHints.showShortcutsInContextMenus": (), + "QStyleHints.singleClickActivation": (), + "QStyleHints.startDragDistance": (), + "QStyleHints.startDragTime": (), + "QStyleHints.startDragVelocity": (), + "QStyleHints.tabFocusBehavior": (), + "QStyleHints.useHoverEffects": (), + "QStyleHints.useRtlExtensions": (), + "QStyleHints.wheelScrollLines": (), + + # class PySide2.QtGui.QSurface: + "QSurface.__init__": ('PySide2.QtGui.QSurface.SurfaceClass',), + "QSurface.format": (), + "QSurface.size": (), + "QSurface.supportsOpenGL": (), + "QSurface.surfaceClass": (), + "QSurface.surfaceHandle": (), + "QSurface.surfaceType": (), + + # class PySide2.QtGui.QSurfaceFormat: + "QSurfaceFormat.__init__": [(), ('PySide2.QtGui.QSurfaceFormat',), ('PySide2.libpyside.FormatOptions',)], + "QSurfaceFormat.__copy__": (), + "QSurfaceFormat.alphaBufferSize": (), + "QSurfaceFormat.blueBufferSize": (), + "QSurfaceFormat.colorSpace": (), + "QSurfaceFormat.defaultFormat": (), + "QSurfaceFormat.depthBufferSize": (), + "QSurfaceFormat.greenBufferSize": (), + "QSurfaceFormat.hasAlpha": (), + "QSurfaceFormat.majorVersion": (), + "QSurfaceFormat.minorVersion": (), + "QSurfaceFormat.options": (), + "QSurfaceFormat.profile": (), + "QSurfaceFormat.redBufferSize": (), + "QSurfaceFormat.renderableType": (), + "QSurfaceFormat.samples": (), + "QSurfaceFormat.setAlphaBufferSize": ('int',), + "QSurfaceFormat.setBlueBufferSize": ('int',), + "QSurfaceFormat.setColorSpace": ('PySide2.QtGui.QSurfaceFormat.ColorSpace',), + "QSurfaceFormat.setDefaultFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QSurfaceFormat.setDepthBufferSize": ('int',), + "QSurfaceFormat.setGreenBufferSize": ('int',), + "QSurfaceFormat.setMajorVersion": ('int',), + "QSurfaceFormat.setMinorVersion": ('int',), + "QSurfaceFormat.setOption": [('PySide2.QtGui.QSurfaceFormat.FormatOption', 'bool'), ('PySide2.libpyside.FormatOptions',)], + "QSurfaceFormat.setOptions": ('PySide2.libpyside.FormatOptions',), + "QSurfaceFormat.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QSurfaceFormat.setRedBufferSize": ('int',), + "QSurfaceFormat.setRenderableType": ('PySide2.QtGui.QSurfaceFormat.RenderableType',), + "QSurfaceFormat.setSamples": ('int',), + "QSurfaceFormat.setStencilBufferSize": ('int',), + "QSurfaceFormat.setStereo": ('bool',), + "QSurfaceFormat.setSwapBehavior": ('PySide2.QtGui.QSurfaceFormat.SwapBehavior',), + "QSurfaceFormat.setSwapInterval": ('int',), + "QSurfaceFormat.setVersion": ('int', 'int'), + "QSurfaceFormat.stencilBufferSize": (), + "QSurfaceFormat.stereo": (), + "QSurfaceFormat.swapBehavior": (), + "QSurfaceFormat.swapInterval": (), + "QSurfaceFormat.testOption": [('PySide2.QtGui.QSurfaceFormat.FormatOption',), ('PySide2.libpyside.FormatOptions',)], + "QSurfaceFormat.version": (), + + # class PySide2.QtGui.QSyntaxHighlighter: + "QSyntaxHighlighter.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QTextDocument',)], + "QSyntaxHighlighter.currentBlock": (), + "QSyntaxHighlighter.currentBlockState": (), + "QSyntaxHighlighter.currentBlockUserData": (), + "QSyntaxHighlighter.document": (), + "QSyntaxHighlighter.format": ('int',), + "QSyntaxHighlighter.highlightBlock": ('str',), + "QSyntaxHighlighter.previousBlockState": (), + "QSyntaxHighlighter.rehighlight": (), + "QSyntaxHighlighter.rehighlightBlock": ('PySide2.QtGui.QTextBlock',), + "QSyntaxHighlighter.setCurrentBlockState": ('int',), + "QSyntaxHighlighter.setCurrentBlockUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QSyntaxHighlighter.setDocument": ('PySide2.QtGui.QTextDocument',), + "QSyntaxHighlighter.setFormat": [('int', 'int', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QFont'), ('int', 'int', 'PySide2.QtGui.QTextCharFormat')], + + # class PySide2.QtGui.QTabletEvent: + "QTabletEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'PySide2.libpyside.KeyboardModifiers', 'int', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons')], + "QTabletEvent.button": (), + "QTabletEvent.buttons": (), + "QTabletEvent.device": (), + "QTabletEvent.globalPos": (), + "QTabletEvent.globalPosF": (), + "QTabletEvent.globalX": (), + "QTabletEvent.global""Y": (), + "QTabletEvent.hiResGlobalX": (), + "QTabletEvent.hiResGlobal""Y": (), + "QTabletEvent.pointerType": (), + "QTabletEvent.pos": (), + "QTabletEvent.posF": (), + "QTabletEvent.pressure": (), + "QTabletEvent.rotation": (), + "QTabletEvent.tangentialPressure": (), + "QTabletEvent.uniqueId": (), + "QTabletEvent.x": (), + "QTabletEvent.xTilt": (), + "QTabletEvent.y": (), + "QTabletEvent.yTilt": (), + "QTabletEvent.z": (), + + # class PySide2.QtGui.QTextBlock: + "QTextBlock.__init__": [(), ('PySide2.QtGui.QTextBlock',)], + "QTextBlock.__copy__": (), + "QTextBlock.begin": (), + "QTextBlock.blockFormat": (), + "QTextBlock.blockFormatIndex": (), + "QTextBlock.blockNumber": (), + "QTextBlock.charFormat": (), + "QTextBlock.charFormatIndex": (), + "QTextBlock.clearLayout": (), + "QTextBlock.contains": ('int',), + "QTextBlock.document": (), + "QTextBlock.end": (), + "QTextBlock.firstLineNumber": (), + "QTextBlock.fragmentIndex": (), + "QTextBlock.isValid": (), + "QTextBlock.isVisible": (), + "QTextBlock.layout": (), + "QTextBlock.length": (), + "QTextBlock.lineCount": (), + "QTextBlock.position": (), + "QTextBlock.previous": (), + "QTextBlock.revision": (), + "QTextBlock.setLineCount": ('int',), + "QTextBlock.setRevision": ('int',), + "QTextBlock.setUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QTextBlock.setUserState": ('int',), + "QTextBlock.setVisible": ('bool',), + "QTextBlock.text": (), + "QTextBlock.textDirection": (), + "QTextBlock.textFormats": (), + "QTextBlock.textList": (), + "QTextBlock.userData": (), + "QTextBlock.userState": (), + + # class PySide2.QtGui.QTextBlockFormat: + "QTextBlockFormat.__init__": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextBlockFormat.__copy__": (), + "QTextBlockFormat.alignment": (), + "QTextBlockFormat.bottomMargin": (), + "QTextBlockFormat.indent": (), + "QTextBlockFormat.isValid": (), + "QTextBlockFormat.leftMargin": (), + "QTextBlockFormat.lineHeight": [(), ('float', 'float')], + "QTextBlockFormat.lineHeightType": (), + "QTextBlockFormat.nonBreakableLines": (), + "QTextBlockFormat.pageBreakPolicy": (), + "QTextBlockFormat.rightMargin": (), + "QTextBlockFormat.setAlignment": ('PySide2.libpyside.Alignment',), + "QTextBlockFormat.setBottomMargin": ('float',), + "QTextBlockFormat.setIndent": ('int',), + "QTextBlockFormat.setLeftMargin": ('float',), + "QTextBlockFormat.setLineHeight": ('float', 'int'), + "QTextBlockFormat.setNonBreakableLines": ('bool',), + "QTextBlockFormat.setPageBreakPolicy": ('PySide2.libpyside.PageBreakFlags',), + "QTextBlockFormat.setRightMargin": ('float',), + "QTextBlockFormat.setTabPositions": ('list',), + "QTextBlockFormat.setTextIndent": ('float',), + "QTextBlockFormat.setTopMargin": ('float',), + "QTextBlockFormat.tabPositions": (), + "QTextBlockFormat.textIndent": (), + "QTextBlockFormat.topMargin": (), + + # class PySide2.QtGui.QTextBlockGroup: + "QTextBlockGroup.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextBlockGroup.blockFormatChanged": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockInserted": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockList": (), + "QTextBlockGroup.blockRemoved": ('PySide2.QtGui.QTextBlock',), + + # class PySide2.QtGui.QTextBlockUserData: + "QTextBlockUserData.__init__": (), + + # class PySide2.QtGui.QTextCharFormat: + "QTextCharFormat.__init__": [(), ('PySide2.QtGui.QTextCharFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextCharFormat.__copy__": (), + "QTextCharFormat.anchorHref": (), + "QTextCharFormat.anchorName": (), + "QTextCharFormat.anchorNames": (), + "QTextCharFormat.font": (), + "QTextCharFormat.fontCapitalization": (), + "QTextCharFormat.fontFamily": (), + "QTextCharFormat.fontFixedPitch": (), + "QTextCharFormat.fontHintingPreference": (), + "QTextCharFormat.fontItalic": (), + "QTextCharFormat.fontKerning": (), + "QTextCharFormat.fontLetterSpacing": (), + "QTextCharFormat.fontLetterSpacingType": (), + "QTextCharFormat.fontOverline": (), + "QTextCharFormat.fontPointSize": (), + "QTextCharFormat.fontStretch": (), + "QTextCharFormat.fontStrikeOut": (), + "QTextCharFormat.fontStyleHint": (), + "QTextCharFormat.fontStyleStrategy": (), + "QTextCharFormat.fontUnderline": (), + "QTextCharFormat.fontWeight": (), + "QTextCharFormat.fontWordSpacing": (), + "QTextCharFormat.isAnchor": (), + "QTextCharFormat.isValid": (), + "QTextCharFormat.setAnchor": ('bool',), + "QTextCharFormat.setAnchorHref": ('str',), + "QTextCharFormat.setAnchorName": ('str',), + "QTextCharFormat.setAnchorNames": ('List[str]',), + "QTextCharFormat.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior')], + "QTextCharFormat.setFontCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QTextCharFormat.setFontFamily": ('str',), + "QTextCharFormat.setFontFixedPitch": ('bool',), + "QTextCharFormat.setFontHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QTextCharFormat.setFontItalic": ('bool',), + "QTextCharFormat.setFontKerning": ('bool',), + "QTextCharFormat.setFontLetterSpacing": ('float',), + "QTextCharFormat.setFontLetterSpacingType": ('PySide2.QtGui.QFont.SpacingType',), + "QTextCharFormat.setFontOverline": ('bool',), + "QTextCharFormat.setFontPointSize": ('float',), + "QTextCharFormat.setFontStretch": ('int',), + "QTextCharFormat.setFontStrikeOut": ('bool',), + "QTextCharFormat.setFontStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QTextCharFormat.setFontStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QTextCharFormat.setFontUnderline": ('bool',), + "QTextCharFormat.setFontWeight": ('int',), + "QTextCharFormat.setFontWordSpacing": ('float',), + "QTextCharFormat.setTableCellColumnSpan": ('int',), + "QTextCharFormat.setTableCellRowSpan": ('int',), + "QTextCharFormat.setTextOutline": ('PySide2.QtGui.QPen',), + "QTextCharFormat.setToolTip": ('str',), + "QTextCharFormat.setUnderlineColor": ('PySide2.QtGui.QColor',), + "QTextCharFormat.setUnderlineStyle": ('PySide2.QtGui.QTextCharFormat.UnderlineStyle',), + "QTextCharFormat.setVerticalAlignment": ('PySide2.QtGui.QTextCharFormat.VerticalAlignment',), + "QTextCharFormat.tableCellColumnSpan": (), + "QTextCharFormat.tableCellRowSpan": (), + "QTextCharFormat.textOutline": (), + "QTextCharFormat.toolTip": (), + "QTextCharFormat.underlineColor": (), + "QTextCharFormat.underlineStyle": (), + "QTextCharFormat.verticalAlignment": (), + + # class PySide2.QtGui.QTextCursor: + "QTextCursor.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextFrame',)], + "QTextCursor.__copy__": (), + "QTextCursor.anchor": (), + "QTextCursor.atBlockEnd": (), + "QTextCursor.atBlockStart": (), + "QTextCursor.atEnd": (), + "QTextCursor.atStart": (), + "QTextCursor.beginEditBlock": (), + "QTextCursor.block": (), + "QTextCursor.blockCharFormat": (), + "QTextCursor.blockFormat": (), + "QTextCursor.blockNumber": (), + "QTextCursor.charFormat": (), + "QTextCursor.clearSelection": (), + "QTextCursor.columnNumber": (), + "QTextCursor.createList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.currentFrame": (), + "QTextCursor.currentList": (), + "QTextCursor.currentTable": (), + "QTextCursor.deleteChar": (), + "QTextCursor.deletePreviousChar": (), + "QTextCursor.document": (), + "QTextCursor.endEditBlock": (), + "QTextCursor.hasComplexSelection": (), + "QTextCursor.hasSelection": (), + "QTextCursor.insertBlock": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextBlockFormat', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.insertFragment": ('PySide2.QtGui.QTextDocumentFragment',), + "QTextCursor.insertFrame": ('PySide2.QtGui.QTextFrameFormat',), + "QTextCursor.insertHtml": ('str',), + "QTextCursor.insertImage": [('PySide2.QtGui.QImage', 'str'), ('PySide2.QtGui.QTextImageFormat',), ('PySide2.QtGui.QTextImageFormat', 'PySide2.QtGui.QTextFrameFormat.Position'), ('str',)], + "QTextCursor.insertList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.insertTable": [('int', 'int'), ('int', 'int', 'PySide2.QtGui.QTextTableFormat')], + "QTextCursor.insertText": [('str',), ('str', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.isCopyOf": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.isNull": (), + "QTextCursor.joinPreviousEditBlock": (), + "QTextCursor.keepPositionOnInsert": (), + "QTextCursor.mergeBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.mergeBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.mergeCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.movePosition": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode', 'int'), + "QTextCursor.position": (), + "QTextCursor.positionInBlock": (), + "QTextCursor.removeSelectedText": (), + "QTextCursor.select": ('PySide2.QtGui.QTextCursor.SelectionType',), + "QTextCursor.selectedTableCells": ('int', 'int', 'int', 'int'), + "QTextCursor.selectedText": (), + "QTextCursor.selection": (), + "QTextCursor.selectionEnd": (), + "QTextCursor.selectionStart": (), + "QTextCursor.setBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.setCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setKeepPositionOnInsert": ('bool',), + "QTextCursor.setPosition": ('int', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextCursor.setVerticalMovementX": ('int',), + "QTextCursor.setVisualNavigation": ('bool',), + "QTextCursor.swap": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.verticalMovementX": (), + "QTextCursor.visualNavigation": (), + + # class PySide2.QtGui.QTextDocument: + "QTextDocument.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextDocument.addResource": ('int', 'PySide2.QtCore.QUrl', 'Any'), + "QTextDocument.adjustSize": (), + "QTextDocument.allFormats": (), + "QTextDocument.availableRedoSteps": (), + "QTextDocument.availableUndoSteps": (), + "QTextDocument.baseUrl": (), + "QTextDocument.begin": (), + "QTextDocument.blockCount": (), + "QTextDocument.characterAt": ('int',), + "QTextDocument.characterCount": (), + "QTextDocument.clear": (), + "QTextDocument.clearUndoRedoStacks": ('PySide2.QtGui.QTextDocument.Stacks',), + "QTextDocument.clone": ('PySide2.QtCore.QObject',), + "QTextDocument.createObject": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.defaultCursorMoveStyle": (), + "QTextDocument.defaultFont": (), + "QTextDocument.defaultStyleSheet": (), + "QTextDocument.defaultTextOption": (), + "QTextDocument.documentLayout": (), + "QTextDocument.documentMargin": (), + "QTextDocument.drawContents": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QTextDocument.end": (), + "QTextDocument.find": [('PySide2.QtCore.QRegExp', 'PySide2.QtGui.QTextCursor', 'PySide2.libpyside.FindFlags'), ('PySide2.QtCore.QRegExp', 'int', 'PySide2.libpyside.FindFlags'), ('PySide2.QtCore.QRegularExpression', 'PySide2.QtGui.QTextCursor', 'PySide2.libpyside.FindFlags'), ('PySide2.QtCore.QRegularExpression', 'int', 'PySide2.libpyside.FindFlags'), ('str', 'PySide2.QtGui.QTextCursor', 'PySide2.libpyside.FindFlags'), ('str', 'int', 'PySide2.libpyside.FindFlags')], + "QTextDocument.findBlock": ('int',), + "QTextDocument.findBlockByLineNumber": ('int',), + "QTextDocument.findBlockByNumber": ('int',), + "QTextDocument.firstBlock": (), + "QTextDocument.frameAt": ('int',), + "QTextDocument.idealWidth": (), + "QTextDocument.indentWidth": (), + "QTextDocument.isEmpty": (), + "QTextDocument.isModified": (), + "QTextDocument.isRedoAvailable": (), + "QTextDocument.isUndoAvailable": (), + "QTextDocument.isUndoRedoEnabled": (), + "QTextDocument.lastBlock": (), + "QTextDocument.lineCount": (), + "QTextDocument.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.markContentsDirty": ('int', 'int'), + "QTextDocument.maximumBlockCount": (), + "QTextDocument.metaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation',), + "QTextDocument.object": ('int',), + "QTextDocument.objectForFormat": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.pageCount": (), + "QTextDocument.pageSize": (), + "QTextDocument.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextDocument.redo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.resource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.revision": (), + "QTextDocument.rootFrame": (), + "QTextDocument.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QTextDocument.setDefaultCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextDocument.setDefaultFont": ('PySide2.QtGui.QFont',), + "QTextDocument.setDefaultStyleSheet": ('str',), + "QTextDocument.setDefaultTextOption": ('PySide2.QtGui.QTextOption',), + "QTextDocument.setDocumentLayout": ('PySide2.QtGui.QAbstractTextDocumentLayout',), + "QTextDocument.setDocumentMargin": ('float',), + "QTextDocument.setHtml": ('str',), + "QTextDocument.setIndentWidth": ('float',), + "QTextDocument.setMaximumBlockCount": ('int',), + "QTextDocument.setMetaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation', 'str'), + "QTextDocument.setModified": ('bool',), + "QTextDocument.setPageSize": ('PySide2.QtCore.QSizeF',), + "QTextDocument.setPlainText": ('str',), + "QTextDocument.setTextWidth": ('float',), + "QTextDocument.setUndoRedoEnabled": ('bool',), + "QTextDocument.setUseDesignMetrics": ('bool',), + "QTextDocument.size": (), + "QTextDocument.textWidth": (), + "QTextDocument.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocument.toPlainText": (), + "QTextDocument.toRawText": (), + "QTextDocument.undo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.useDesignMetrics": (), + + # class PySide2.QtGui.QTextDocumentFragment: + "QTextDocumentFragment.__init__": [(), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + "QTextDocumentFragment.__copy__": (), + "QTextDocumentFragment.fromHtml": [('str',), ('str', 'PySide2.QtGui.QTextDocument')], + "QTextDocumentFragment.fromPlainText": ('str',), + "QTextDocumentFragment.isEmpty": (), + "QTextDocumentFragment.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocumentFragment.toPlainText": (), + + # class PySide2.QtGui.QTextDocumentWriter: + "QTextDocumentWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QTextDocumentWriter.codec": (), + "QTextDocumentWriter.device": (), + "QTextDocumentWriter.fileName": (), + "QTextDocumentWriter.format": (), + "QTextDocumentWriter.setCodec": ('PySide2.QtCore.QTextCodec',), + "QTextDocumentWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextDocumentWriter.setFileName": ('str',), + "QTextDocumentWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QTextDocumentWriter.supportedDocumentFormats": (), + "QTextDocumentWriter.write": [('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + + # class PySide2.QtGui.QTextFormat: + "QTextFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('int',)], + "QTextFormat.__copy__": (), + "QTextFormat.background": (), + "QTextFormat.boolProperty": ('int',), + "QTextFormat.brushProperty": ('int',), + "QTextFormat.clearBackground": (), + "QTextFormat.clearForeground": (), + "QTextFormat.clearProperty": ('int',), + "QTextFormat.colorProperty": ('int',), + "QTextFormat.doubleProperty": ('int',), + "QTextFormat.foreground": (), + "QTextFormat.hasProperty": ('int',), + "QTextFormat.intProperty": ('int',), + "QTextFormat.isBlockFormat": (), + "QTextFormat.isCharFormat": (), + "QTextFormat.isEmpty": (), + "QTextFormat.isFrameFormat": (), + "QTextFormat.isImageFormat": (), + "QTextFormat.isListFormat": (), + "QTextFormat.isTableCellFormat": (), + "QTextFormat.isTableFormat": (), + "QTextFormat.isValid": (), + "QTextFormat.layoutDirection": (), + "QTextFormat.lengthProperty": ('int',), + "QTextFormat.lengthVectorProperty": ('int',), + "QTextFormat.merge": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.objectIndex": (), + "QTextFormat.objectType": (), + "QTextFormat.penProperty": ('int',), + "QTextFormat.properties": (), + "QTextFormat.property": ('int',), + "QTextFormat.propertyCount": (), + "QTextFormat.setBackground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setForeground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextFormat.setObjectIndex": ('int',), + "QTextFormat.setObjectType": ('int',), + "QTextFormat.setProperty": [('int', 'Any'), ('int', 'list')], + "QTextFormat.stringProperty": ('int',), + "QTextFormat.swap": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.toBlockFormat": (), + "QTextFormat.toCharFormat": (), + "QTextFormat.toFrameFormat": (), + "QTextFormat.toImageFormat": (), + "QTextFormat.toListFormat": (), + "QTextFormat.toTableCellFormat": (), + "QTextFormat.toTableFormat": (), + "QTextFormat.type": (), + + # class PySide2.QtGui.QTextFragment: + "QTextFragment.__init__": [(), ('PySide2.QtGui.QTextFragment',)], + "QTextFragment.__copy__": (), + "QTextFragment.charFormat": (), + "QTextFragment.charFormatIndex": (), + "QTextFragment.contains": ('int',), + "QTextFragment.isValid": (), + "QTextFragment.length": (), + "QTextFragment.position": (), + "QTextFragment.text": (), + + # class PySide2.QtGui.QTextFrame: + "QTextFrame.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextFrame.begin": (), + "QTextFrame.childFrames": (), + "QTextFrame.end": (), + "QTextFrame.firstCursorPosition": (), + "QTextFrame.firstPosition": (), + "QTextFrame.frameFormat": (), + "QTextFrame.lastCursorPosition": (), + "QTextFrame.lastPosition": (), + "QTextFrame.parentFrame": (), + "QTextFrame.setFrameFormat": ('PySide2.QtGui.QTextFrameFormat',), + + # class PySide2.QtGui.QTextFrameFormat: + "QTextFrameFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextFrameFormat',)], + "QTextFrameFormat.__copy__": (), + "QTextFrameFormat.border": (), + "QTextFrameFormat.borderBrush": (), + "QTextFrameFormat.borderStyle": (), + "QTextFrameFormat.bottomMargin": (), + "QTextFrameFormat.height": (), + "QTextFrameFormat.isValid": (), + "QTextFrameFormat.leftMargin": (), + "QTextFrameFormat.margin": (), + "QTextFrameFormat.padding": (), + "QTextFrameFormat.pageBreakPolicy": (), + "QTextFrameFormat.position": (), + "QTextFrameFormat.rightMargin": (), + "QTextFrameFormat.setBorder": ('float',), + "QTextFrameFormat.setBorderBrush": ('PySide2.QtGui.QBrush',), + "QTextFrameFormat.setBorderStyle": ('PySide2.QtGui.QTextFrameFormat.BorderStyle',), + "QTextFrameFormat.setBottomMargin": ('float',), + "QTextFrameFormat.setHeight": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.setLeftMargin": ('float',), + "QTextFrameFormat.setMargin": ('float',), + "QTextFrameFormat.setPadding": ('float',), + "QTextFrameFormat.setPageBreakPolicy": ('PySide2.libpyside.PageBreakFlags',), + "QTextFrameFormat.setPosition": ('PySide2.QtGui.QTextFrameFormat.Position',), + "QTextFrameFormat.setRightMargin": ('float',), + "QTextFrameFormat.setTopMargin": ('float',), + "QTextFrameFormat.setWidth": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.topMargin": (), + "QTextFrameFormat.width": (), + + # class PySide2.QtGui.QTextImageFormat: + "QTextImageFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextImageFormat',)], + "QTextImageFormat.__copy__": (), + "QTextImageFormat.height": (), + "QTextImageFormat.isValid": (), + "QTextImageFormat.name": (), + "QTextImageFormat.setHeight": ('float',), + "QTextImageFormat.setName": ('str',), + "QTextImageFormat.setWidth": ('float',), + "QTextImageFormat.width": (), + + # class PySide2.QtGui.QTextInlineObject: + "QTextInlineObject.__init__": (), + "QTextInlineObject.__copy__": (), + "QTextInlineObject.ascent": (), + "QTextInlineObject.descent": (), + "QTextInlineObject.format": (), + "QTextInlineObject.formatIndex": (), + "QTextInlineObject.height": (), + "QTextInlineObject.isValid": (), + "QTextInlineObject.rect": (), + "QTextInlineObject.setAscent": ('float',), + "QTextInlineObject.setDescent": ('float',), + "QTextInlineObject.setWidth": ('float',), + "QTextInlineObject.textDirection": (), + "QTextInlineObject.textPosition": (), + "QTextInlineObject.width": (), + + # class PySide2.QtGui.QTextItem: + "QTextItem.__init__": (), + "QTextItem.ascent": (), + "QTextItem.descent": (), + "QTextItem.font": (), + "QTextItem.renderFlags": (), + "QTextItem.text": (), + "QTextItem.width": (), + + # class PySide2.QtGui.QTextLayout: + "QTextLayout.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('str',), ('str', 'PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice')], + "QTextLayout.additionalFormats": (), + "QTextLayout.beginLayout": (), + "QTextLayout.boundingRect": (), + "QTextLayout.cacheEnabled": (), + "QTextLayout.clearAdditionalFormats": (), + "QTextLayout.clearFormats": (), + "QTextLayout.clearLayout": (), + "QTextLayout.createLine": (), + "QTextLayout.cursorMoveStyle": (), + "QTextLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'list', 'PySide2.QtCore.QRectF'), + "QTextLayout.drawCursor": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int', 'int')], + "QTextLayout.endLayout": (), + "QTextLayout.font": (), + "QTextLayout.formats": (), + "QTextLayout.isValidCursorPosition": ('int',), + "QTextLayout.leftCursorPosition": ('int',), + "QTextLayout.lineAt": ('int',), + "QTextLayout.lineCount": (), + "QTextLayout.lineForTextPosition": ('int',), + "QTextLayout.maximumWidth": (), + "QTextLayout.minimumWidth": (), + "QTextLayout.nextCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.position": (), + "QTextLayout.preeditAreaPosition": (), + "QTextLayout.preeditAreaText": (), + "QTextLayout.previousCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.rightCursorPosition": ('int',), + "QTextLayout.setAdditionalFormats": ('list',), + "QTextLayout.setCacheEnabled": ('bool',), + "QTextLayout.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextLayout.setFlags": ('int',), + "QTextLayout.setFont": ('PySide2.QtGui.QFont',), + "QTextLayout.setFormats": ('list',), + "QTextLayout.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLayout.setPreeditArea": ('int', 'str'), + "QTextLayout.setRawFont": ('PySide2.QtGui.QRawFont',), + "QTextLayout.setText": ('str',), + "QTextLayout.setTextOption": ('PySide2.QtGui.QTextOption',), + "QTextLayout.text": (), + "QTextLayout.textOption": (), + + # class PySide2.QtGui.QTextLength: + "QTextLength.__init__": [(), ('PySide2.QtGui.QTextLength',), ('PySide2.QtGui.QTextLength.Type', 'float')], + "QTextLength.__copy__": (), + "QTextLength.rawValue": (), + "QTextLength.type": (), + "QTextLength.value": ('float',), + + # class PySide2.QtGui.QTextLine: + "QTextLine.__init__": (), + "QTextLine.__copy__": (), + "QTextLine.ascent": (), + "QTextLine.cursorToX": ('int', 'PySide2.QtGui.QTextLine.Edge'), + "QTextLine.descent": (), + "QTextLine.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextLayout.FormatRange'), + "QTextLine.height": (), + "QTextLine.horizontalAdvance": (), + "QTextLine.isValid": (), + "QTextLine.leading": (), + "QTextLine.leadingIncluded": (), + "QTextLine.lineNumber": (), + "QTextLine.naturalTextRect": (), + "QTextLine.naturalTextWidth": (), + "QTextLine.position": (), + "QTextLine.rect": (), + "QTextLine.setLeadingIncluded": ('bool',), + "QTextLine.setLineWidth": ('float',), + "QTextLine.setNumColumns": [('int',), ('int', 'float')], + "QTextLine.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLine.textLength": (), + "QTextLine.textStart": (), + "QTextLine.width": (), + "QTextLine.x": (), + "QTextLine.xToCursor": ('float', 'PySide2.QtGui.QTextLine.CursorPosition'), + "QTextLine.y": (), + + # class PySide2.QtGui.QTextList: + "QTextList.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextList.add": ('PySide2.QtGui.QTextBlock',), + "QTextList.count": (), + "QTextList.format": (), + "QTextList.item": ('int',), + "QTextList.itemNumber": ('PySide2.QtGui.QTextBlock',), + "QTextList.itemText": ('PySide2.QtGui.QTextBlock',), + "QTextList.remove": ('PySide2.QtGui.QTextBlock',), + "QTextList.removeItem": ('int',), + "QTextList.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + + # class PySide2.QtGui.QTextListFormat: + "QTextListFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + "QTextListFormat.__copy__": (), + "QTextListFormat.indent": (), + "QTextListFormat.isValid": (), + "QTextListFormat.numberPrefix": (), + "QTextListFormat.numberSuffix": (), + "QTextListFormat.setIndent": ('int',), + "QTextListFormat.setNumberPrefix": ('str',), + "QTextListFormat.setNumberSuffix": ('str',), + "QTextListFormat.setStyle": ('PySide2.QtGui.QTextListFormat.Style',), + "QTextListFormat.style": (), + + # class PySide2.QtGui.QTextObject: + "QTextObject.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextObject.document": (), + "QTextObject.format": (), + "QTextObject.formatIndex": (), + "QTextObject.objectIndex": (), + "QTextObject.setFormat": ('PySide2.QtGui.QTextFormat',), + + # class PySide2.QtGui.QTextObjectInterface: + "QTextObjectInterface.__init__": (), + "QTextObjectInterface.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QTextObjectInterface.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QTextOption: + "QTextOption.__init__": [(), ('PySide2.QtGui.QTextOption',), ('PySide2.libpyside.Alignment',)], + "QTextOption.__copy__": (), + "QTextOption.alignment": (), + "QTextOption.flags": (), + "QTextOption.setAlignment": ('PySide2.libpyside.Alignment',), + "QTextOption.setFlags": ('PySide2.libpyside.Flags',), + "QTextOption.setTabArray": ('list',), + "QTextOption.setTabStop": ('float',), + "QTextOption.setTabStopDistance": ('float',), + "QTextOption.setTabs": ('list',), + "QTextOption.setTextDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextOption.setUseDesignMetrics": ('bool',), + "QTextOption.setWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextOption.tabArray": (), + "QTextOption.tabStop": (), + "QTextOption.tabStopDistance": (), + "QTextOption.tabs": (), + "QTextOption.textDirection": (), + "QTextOption.useDesignMetrics": (), + "QTextOption.wrapMode": (), + + # class PySide2.QtGui.QTextTable: + "QTextTable.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextTable.appendColumns": ('int',), + "QTextTable.appendRows": ('int',), + "QTextTable.cellAt": [('PySide2.QtGui.QTextCursor',), ('int',), ('int', 'int')], + "QTextTable.columns": (), + "QTextTable.format": (), + "QTextTable.insertColumns": ('int', 'int'), + "QTextTable.insertRows": ('int', 'int'), + "QTextTable.mergeCells": [('PySide2.QtGui.QTextCursor',), ('int', 'int', 'int', 'int')], + "QTextTable.removeColumns": ('int', 'int'), + "QTextTable.removeRows": ('int', 'int'), + "QTextTable.resize": ('int', 'int'), + "QTextTable.rowEnd": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rowStart": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rows": (), + "QTextTable.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTable.splitCell": ('int', 'int', 'int', 'int'), + + # class PySide2.QtGui.QTextTableCell: + "QTextTableCell.__init__": [(), ('PySide2.QtGui.QTextTableCell',)], + "QTextTableCell.__copy__": (), + "QTextTableCell.begin": (), + "QTextTableCell.column": (), + "QTextTableCell.columnSpan": (), + "QTextTableCell.end": (), + "QTextTableCell.firstCursorPosition": (), + "QTextTableCell.firstPosition": (), + "QTextTableCell.format": (), + "QTextTableCell.isValid": (), + "QTextTableCell.lastCursorPosition": (), + "QTextTableCell.lastPosition": (), + "QTextTableCell.row": (), + "QTextTableCell.rowSpan": (), + "QTextTableCell.setFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextTableCell.tableCellFormatIndex": (), + + # class PySide2.QtGui.QTextTableCellFormat: + "QTextTableCellFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableCellFormat',)], + "QTextTableCellFormat.__copy__": (), + "QTextTableCellFormat.bottomPadding": (), + "QTextTableCellFormat.isValid": (), + "QTextTableCellFormat.leftPadding": (), + "QTextTableCellFormat.rightPadding": (), + "QTextTableCellFormat.setBottomPadding": ('float',), + "QTextTableCellFormat.setLeftPadding": ('float',), + "QTextTableCellFormat.setPadding": ('float',), + "QTextTableCellFormat.setRightPadding": ('float',), + "QTextTableCellFormat.setTopPadding": ('float',), + "QTextTableCellFormat.topPadding": (), + + # class PySide2.QtGui.QTextTableFormat: + "QTextTableFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTableFormat.__copy__": (), + "QTextTableFormat.alignment": (), + "QTextTableFormat.cellPadding": (), + "QTextTableFormat.cellSpacing": (), + "QTextTableFormat.clearColumnWidthConstraints": (), + "QTextTableFormat.columnWidthConstraints": (), + "QTextTableFormat.columns": (), + "QTextTableFormat.headerRowCount": (), + "QTextTableFormat.isValid": (), + "QTextTableFormat.setAlignment": ('PySide2.libpyside.Alignment',), + "QTextTableFormat.setCellPadding": ('float',), + "QTextTableFormat.setCellSpacing": ('float',), + "QTextTableFormat.setColumnWidthConstraints": ('list',), + "QTextTableFormat.setColumns": ('int',), + "QTextTableFormat.setHeaderRowCount": ('int',), + + # class PySide2.QtGui.QToolBarChangeEvent: + "QToolBarChangeEvent.__init__": ('bool',), + "QToolBarChangeEvent.toggle": (), + + # class PySide2.QtGui.QTouchDevice: + "QTouchDevice.__init__": (), + "QTouchDevice.capabilities": (), + "QTouchDevice.devices": (), + "QTouchDevice.maximumTouchPoints": (), + "QTouchDevice.name": (), + "QTouchDevice.setCapabilities": ('PySide2.libpyside.Capabilities',), + "QTouchDevice.setMaximumTouchPoints": ('int',), + "QTouchDevice.setName": ('str',), + "QTouchDevice.setType": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTouchDevice.type": (), + + # class PySide2.QtGui.QTouchEvent: + "QTouchEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtGui.QTouchDevice', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.libpyside.TouchPointStates', 'list'), + "QTouchEvent.device": (), + "QTouchEvent.setDevice": ('PySide2.QtGui.QTouchDevice',), + "QTouchEvent.setTarget": ('PySide2.QtCore.QObject',), + "QTouchEvent.setTouchPointStates": ('PySide2.libpyside.TouchPointStates',), + "QTouchEvent.setTouchPoints": ('list',), + "QTouchEvent.setWindow": ('PySide2.QtGui.QWindow',), + "QTouchEvent.target": (), + "QTouchEvent.touchPointStates": (), + "QTouchEvent.touchPoints": (), + "QTouchEvent.window": (), + + # class PySide2.QtGui.QTransform: + "QTransform.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float', 'float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QTransform.__copy__": (), + "QTransform.__reduce__": (), + "QTransform.adjoint": (), + "QTransform.det": (), + "QTransform.determinant": (), + "QTransform.dx": (), + "QTransform.dy": (), + "QTransform.fromScale": ('float', 'float'), + "QTransform.fromTranslate": ('float', 'float'), + "QTransform.inverted": ('bool',), + "QTransform.isAffine": (), + "QTransform.isIdentity": (), + "QTransform.isInvertible": (), + "QTransform.isRotating": (), + "QTransform.isScaling": (), + "QTransform.isTranslating": (), + "QTransform.m11": (), + "QTransform.m12": (), + "QTransform.m13": (), + "QTransform.m21": (), + "QTransform.m22": (), + "QTransform.m23": (), + "QTransform.m31": (), + "QTransform.m32": (), + "QTransform.m33": (), + "QTransform.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float')], + "QTransform.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QTransform.mapToPolygon": ('PySide2.QtCore.QRect',), + "QTransform.quadToQuad": [('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.quadToSquare": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.reset": (), + "QTransform.rotate": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.rotateRadians": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.scale": ('float', 'float'), + "QTransform.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float'), + "QTransform.shear": ('float', 'float'), + "QTransform.squareToQuad": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.toAffine": (), + "QTransform.translate": ('float', 'float'), + "QTransform.transposed": (), + "QTransform.type": (), + + # class PySide2.QtGui.QValidator: + "QValidator.__init__": ('PySide2.QtCore.QObject',), + "QValidator.fixup": ('str',), + "QValidator.locale": (), + "QValidator.setLocale": ('PySide2.QtCore.QLocale',), + "QValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QVector2D: + "QVector2D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',), ('float', 'float')], + "QVector2D.__copy__": (), + "QVector2D.__reduce__": (), + "QVector2D.distanceToLine": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.distanceToPoint": ('PySide2.QtGui.QVector2D',), + "QVector2D.dotProduct": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.isNull": (), + "QVector2D.length": (), + "QVector2D.lengthSquared": (), + "QVector2D.normalize": (), + "QVector2D.normalized": (), + "QVector2D.setX": ('float',), + "QVector2D.setY": ('float',), + "QVector2D.toPoint": (), + "QVector2D.toPointF": (), + "QVector2D.toTuple": (), + "QVector2D.toVector3D": (), + "QVector2D.toVector4D": (), + "QVector2D.x": (), + "QVector2D.y": (), + + # class PySide2.QtGui.QVector3D: + "QVector3D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float'), ('PySide2.QtGui.QVector4D',), ('float', 'float', 'float')], + "QVector3D.__copy__": (), + "QVector3D.__reduce__": (), + "QVector3D.crossProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToLine": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToPlane": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.distanceToPoint": ('PySide2.QtGui.QVector3D',), + "QVector3D.dotProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.isNull": (), + "QVector3D.length": (), + "QVector3D.lengthSquared": (), + "QVector3D.normal": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.normalize": (), + "QVector3D.normalized": (), + "QVector3D.project": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.setX": ('float',), + "QVector3D.setY": ('float',), + "QVector3D.setZ": ('float',), + "QVector3D.toPoint": (), + "QVector3D.toPointF": (), + "QVector3D.toTuple": (), + "QVector3D.toVector2D": (), + "QVector3D.toVector4D": (), + "QVector3D.unproject": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.x": (), + "QVector3D.y": (), + "QVector3D.z": (), + + # class PySide2.QtGui.QVector4D: + "QVector4D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float', 'float'), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QVector4D.__copy__": (), + "QVector4D.__reduce__": (), + "QVector4D.dotProduct": ('PySide2.QtGui.QVector4D', 'PySide2.QtGui.QVector4D'), + "QVector4D.isNull": (), + "QVector4D.length": (), + "QVector4D.lengthSquared": (), + "QVector4D.normalize": (), + "QVector4D.normalized": (), + "QVector4D.setW": ('float',), + "QVector4D.setX": ('float',), + "QVector4D.setY": ('float',), + "QVector4D.setZ": ('float',), + "QVector4D.toPoint": (), + "QVector4D.toPointF": (), + "QVector4D.toTuple": (), + "QVector4D.toVector2D": (), + "QVector4D.toVector2DAffine": (), + "QVector4D.toVector3D": (), + "QVector4D.toVector3DAffine": (), + "QVector4D.w": (), + "QVector4D.x": (), + "QVector4D.y": (), + "QVector4D.z": (), + + # class PySide2.QtGui.QWhatsThisClickedEvent: + "QWhatsThisClickedEvent.__init__": ('str',), + "QWhatsThisClickedEvent.href": (), + + # class PySide2.QtGui.QWheelEvent: + "QWheelEvent.__init__": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource', 'bool'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation')], + "QWheelEvent.angleDelta": (), + "QWheelEvent.buttons": (), + "QWheelEvent.delta": (), + "QWheelEvent.globalPos": (), + "QWheelEvent.globalPosF": (), + "QWheelEvent.globalX": (), + "QWheelEvent.global""Y": (), + "QWheelEvent.inverted": (), + "QWheelEvent.orientation": (), + "QWheelEvent.phase": (), + "QWheelEvent.pixelDelta": (), + "QWheelEvent.pos": (), + "QWheelEvent.posF": (), + "QWheelEvent.source": (), + "QWheelEvent.x": (), + "QWheelEvent.y": (), + + # class PySide2.QtGui.QWindow: + "QWindow.__init__": [('PySide2.QtGui.QScreen',), ('PySide2.QtGui.QWindow',)], + "QWindow.accessibleRoot": (), + "QWindow.alert": ('int',), + "QWindow.baseSize": (), + "QWindow.close": (), + "QWindow.contentOrientation": (), + "QWindow.create": (), + "QWindow.cursor": (), + "QWindow.destroy": (), + "QWindow.devicePixelRatio": (), + "QWindow.event": ('PySide2.QtCore.QEvent',), + "QWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QWindow.filePath": (), + "QWindow.flags": (), + "QWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.focusObject": (), + "QWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.format": (), + "QWindow.frameGeometry": (), + "QWindow.frameMargins": (), + "QWindow.framePosition": (), + "QWindow.fromWinId": ('int',), + "QWindow.geometry": (), + "QWindow.height": (), + "QWindow.hide": (), + "QWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWindow.icon": (), + "QWindow.isActive": (), + "QWindow.isAncestorOf": ('PySide2.QtGui.QWindow', 'PySide2.QtGui.QWindow.AncestorMode'), + "QWindow.isExposed": (), + "QWindow.isModal": (), + "QWindow.isTopLevel": (), + "QWindow.isVisible": (), + "QWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.lower": (), + "QWindow.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mask": (), + "QWindow.maximumHeight": (), + "QWindow.maximumSize": (), + "QWindow.maximumWidth": (), + "QWindow.minimumHeight": (), + "QWindow.minimumSize": (), + "QWindow.minimumWidth": (), + "QWindow.modality": (), + "QWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWindow.opacity": (), + "QWindow.parent": [(), ('PySide2.QtGui.QWindow.AncestorMode',)], + "QWindow.position": (), + "QWindow.raise": (), + "QWindow.reportContentOrientationChange": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QWindow.requestActivate": (), + "QWindow.requestUpdate": (), + "QWindow.requestedFormat": (), + "QWindow.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWindow.screen": (), + "QWindow.setBaseSize": ('PySide2.QtCore.QSize',), + "QWindow.setCursor": ('PySide2.QtGui.QCursor',), + "QWindow.setFilePath": ('str',), + "QWindow.setFlag": ('PySide2.QtCore.Qt.WindowType', 'bool'), + "QWindow.setFlags": ('PySide2.libpyside.WindowFlags',), + "QWindow.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QWindow.setFramePosition": ('PySide2.QtCore.QPoint',), + "QWindow.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWindow.setHeight": ('int',), + "QWindow.setIcon": ('PySide2.QtGui.QIcon',), + "QWindow.setKeyboardGrabEnabled": ('bool',), + "QWindow.setMask": ('PySide2.QtGui.QRegion',), + "QWindow.setMaximumHeight": ('int',), + "QWindow.setMaximumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMaximumWidth": ('int',), + "QWindow.setMinimumHeight": ('int',), + "QWindow.setMinimumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMinimumWidth": ('int',), + "QWindow.setModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWindow.setMouseGrabEnabled": ('bool',), + "QWindow.setOpacity": ('float',), + "QWindow.setParent": ('PySide2.QtGui.QWindow',), + "QWindow.setPosition": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWindow.setScreen": ('PySide2.QtGui.QScreen',), + "QWindow.setSizeIncrement": ('PySide2.QtCore.QSize',), + "QWindow.setSurfaceType": ('PySide2.QtGui.QSurface.SurfaceType',), + "QWindow.setTitle": ('str',), + "QWindow.setTransientParent": ('PySide2.QtGui.QWindow',), + "QWindow.setVisibility": ('PySide2.QtGui.QWindow.Visibility',), + "QWindow.setVisible": ('bool',), + "QWindow.setWidth": ('int',), + "QWindow.setWindowState": ('PySide2.QtCore.Qt.WindowState',), + "QWindow.setWindowStates": ('PySide2.libpyside.WindowStates',), + "QWindow.setX": ('int',), + "QWindow.setY": ('int',), + "QWindow.show": (), + "QWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWindow.showFullScreen": (), + "QWindow.showMaximized": (), + "QWindow.showMinimized": (), + "QWindow.showNormal": (), + "QWindow.size": (), + "QWindow.sizeIncrement": (), + "QWindow.surfaceHandle": (), + "QWindow.surfaceType": (), + "QWindow.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWindow.title": (), + "QWindow.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QWindow.transientParent": (), + "QWindow.type": (), + "QWindow.unsetCursor": (), + "QWindow.visibility": (), + "QWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWindow.width": (), + "QWindow.winId": (), + "QWindow.windowState": (), + "QWindow.windowStates": (), + "QWindow.x": (), + "QWindow.y": (), + + # class PySide2.QtGui.QWindowStateChangeEvent: + "QWindowStateChangeEvent.__init__": ('PySide2.libpyside.WindowStates', 'bool'), + "QWindowStateChangeEvent.isOverride": (), + "QWindowStateChangeEvent.oldState": (), + }) + +# Module PySide2.QtWidgets +if "PySide2.QtWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWidgets.QAbstractButton: + "QAbstractButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractButton.animateClick": ('int',), + "QAbstractButton.autoExclusive": (), + "QAbstractButton.autoRepeat": (), + "QAbstractButton.autoRepeatDelay": (), + "QAbstractButton.autoRepeatInterval": (), + "QAbstractButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractButton.checkStateSet": (), + "QAbstractButton.click": (), + "QAbstractButton.event": ('PySide2.QtCore.QEvent',), + "QAbstractButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.group": (), + "QAbstractButton.hitButton": ('PySide2.QtCore.QPoint',), + "QAbstractButton.icon": (), + "QAbstractButton.iconSize": (), + "QAbstractButton.isCheckable": (), + "QAbstractButton.isChecked": (), + "QAbstractButton.isDown": (), + "QAbstractButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.nextCheckState": (), + "QAbstractButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractButton.setAutoExclusive": ('bool',), + "QAbstractButton.setAutoRepeat": ('bool',), + "QAbstractButton.setAutoRepeatDelay": ('int',), + "QAbstractButton.setAutoRepeatInterval": ('int',), + "QAbstractButton.setCheckable": ('bool',), + "QAbstractButton.setChecked": ('bool',), + "QAbstractButton.setDown": ('bool',), + "QAbstractButton.setIcon": ('PySide2.QtGui.QIcon',), + "QAbstractButton.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractButton.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAbstractButton.setText": ('str',), + "QAbstractButton.shortcut": (), + "QAbstractButton.text": (), + "QAbstractButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractButton.toggle": (), + + # class PySide2.QtWidgets.QAbstractGraphicsShapeItem: + "QAbstractGraphicsShapeItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.brush": (), + "QAbstractGraphicsShapeItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.opaqueArea": (), + "QAbstractGraphicsShapeItem.pen": (), + "QAbstractGraphicsShapeItem.setBrush": ('PySide2.QtGui.QBrush',), + "QAbstractGraphicsShapeItem.setPen": ('PySide2.QtGui.QPen',), + + # class PySide2.QtWidgets.QAbstractItemDelegate: + "QAbstractItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.destroyEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.elidedText": ('PySide2.QtGui.QFontMetrics', 'int', 'PySide2.QtCore.Qt.TextElideMode', 'str'), + "QAbstractItemDelegate.helpEvent": ('PySide2.QtGui.QHelpEvent', 'PySide2.QtWidgets.QAbstractItemView', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paintingRoles": (), + "QAbstractItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QAbstractItemView: + "QAbstractItemView.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.alternatingRowColors": (), + "QAbstractItemView.autoScrollMargin": (), + "QAbstractItemView.clearSelection": (), + "QAbstractItemView.closeEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QAbstractItemDelegate.EndEditHint'), + "QAbstractItemView.closePersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.commitData": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemView.currentIndex": (), + "QAbstractItemView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QAbstractItemView.defaultDropAction": (), + "QAbstractItemView.dirtyRegionOffset": (), + "QAbstractItemView.doAutoScroll": (), + "QAbstractItemView.doItemsLayout": (), + "QAbstractItemView.dragDropMode": (), + "QAbstractItemView.dragDropOverwriteMode": (), + "QAbstractItemView.dragEnabled": (), + "QAbstractItemView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractItemView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractItemView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractItemView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractItemView.dropIndicatorPosition": (), + "QAbstractItemView.edit": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.EditTrigger', 'PySide2.QtCore.QEvent')], + "QAbstractItemView.editTriggers": (), + "QAbstractItemView.editorDestroyed": ('PySide2.QtCore.QObject',), + "QAbstractItemView.event": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QAbstractItemView.executeDelayedItemsLayout": (), + "QAbstractItemView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.focusNextPrevChild": ('bool',), + "QAbstractItemView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.hasAutoScroll": (), + "QAbstractItemView.horizontalOffset": (), + "QAbstractItemView.horizontalScrollMode": (), + "QAbstractItemView.horizontalScrollbarAction": ('int',), + "QAbstractItemView.horizontalScrollbarValueChanged": ('int',), + "QAbstractItemView.horizontalStepsPerItem": (), + "QAbstractItemView.iconSize": (), + "QAbstractItemView.indexAt": ('PySide2.QtCore.QPoint',), + "QAbstractItemView.indexWidget": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QAbstractItemView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractItemView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.isPersistentEditorOpen": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.itemDelegate": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.itemDelegateForColumn": ('int',), + "QAbstractItemView.itemDelegateForRow": ('int',), + "QAbstractItemView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractItemView.keyboardSearch": ('str',), + "QAbstractItemView.model": (), + "QAbstractItemView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QAbstractItemView.openPersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.reset": (), + "QAbstractItemView.resetHorizontalScrollMode": (), + "QAbstractItemView.resetVerticalScrollMode": (), + "QAbstractItemView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractItemView.rootIndex": (), + "QAbstractItemView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.scheduleDelayedItemsLayout": (), + "QAbstractItemView.scrollDirtyRegion": ('int', 'int'), + "QAbstractItemView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QAbstractItemView.scrollToBottom": (), + "QAbstractItemView.scrollToTop": (), + "QAbstractItemView.selectAll": (), + "QAbstractItemView.selectedIndexes": (), + "QAbstractItemView.selectionBehavior": (), + "QAbstractItemView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QAbstractItemView.selectionCommand": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QEvent'), + "QAbstractItemView.selectionMode": (), + "QAbstractItemView.selectionModel": (), + "QAbstractItemView.setAlternatingRowColors": ('bool',), + "QAbstractItemView.setAutoScroll": ('bool',), + "QAbstractItemView.setAutoScrollMargin": ('int',), + "QAbstractItemView.setCurrentIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setDefaultDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QAbstractItemView.setDirtyRegion": ('PySide2.QtGui.QRegion',), + "QAbstractItemView.setDragDropMode": ('PySide2.QtWidgets.QAbstractItemView.DragDropMode',), + "QAbstractItemView.setDragDropOverwriteMode": ('bool',), + "QAbstractItemView.setDragEnabled": ('bool',), + "QAbstractItemView.setDropIndicatorShown": ('bool',), + "QAbstractItemView.setEditTriggers": ('PySide2.libpyside.EditTriggers',), + "QAbstractItemView.setHorizontalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setHorizontalStepsPerItem": ('int',), + "QAbstractItemView.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractItemView.setIndexWidget": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QWidget'), + "QAbstractItemView.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QAbstractItemView.setItemDelegateForColumn": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setItemDelegateForRow": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractItemView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QAbstractItemView.setSelectionBehavior": ('PySide2.QtWidgets.QAbstractItemView.SelectionBehavior',), + "QAbstractItemView.setSelectionMode": ('PySide2.QtWidgets.QAbstractItemView.SelectionMode',), + "QAbstractItemView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QAbstractItemView.setState": ('PySide2.QtWidgets.QAbstractItemView.State',), + "QAbstractItemView.setTabKeyNavigation": ('bool',), + "QAbstractItemView.setTextElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QAbstractItemView.setVerticalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setVerticalStepsPerItem": ('int',), + "QAbstractItemView.showDropIndicator": (), + "QAbstractItemView.sizeHintForColumn": ('int',), + "QAbstractItemView.sizeHintForIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.sizeHintForRow": ('int',), + "QAbstractItemView.startAutoScroll": (), + "QAbstractItemView.startDrag": ('PySide2.libpyside.DropActions',), + "QAbstractItemView.state": (), + "QAbstractItemView.stopAutoScroll": (), + "QAbstractItemView.tabKeyNavigation": (), + "QAbstractItemView.textElideMode": (), + "QAbstractItemView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractItemView.update": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.updateEditorData": (), + "QAbstractItemView.updateEditorGeometries": (), + "QAbstractItemView.updateGeometries": (), + "QAbstractItemView.verticalOffset": (), + "QAbstractItemView.verticalScrollMode": (), + "QAbstractItemView.verticalScrollbarAction": ('int',), + "QAbstractItemView.verticalScrollbarValueChanged": ('int',), + "QAbstractItemView.verticalStepsPerItem": (), + "QAbstractItemView.viewOptions": (), + "QAbstractItemView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.viewportSizeHint": (), + "QAbstractItemView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QAbstractScrollArea: + "QAbstractScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.addScrollBarWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.Alignment'), + "QAbstractScrollArea.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractScrollArea.cornerWidget": (), + "QAbstractScrollArea.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractScrollArea.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractScrollArea.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractScrollArea.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractScrollArea.event": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QAbstractScrollArea.horizontalScrollBar": (), + "QAbstractScrollArea.horizontalScrollBarPolicy": (), + "QAbstractScrollArea.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractScrollArea.maximumViewportSize": (), + "QAbstractScrollArea.minimumSizeHint": (), + "QAbstractScrollArea.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractScrollArea.scrollBarWidgets": ('PySide2.libpyside.Alignment',), + "QAbstractScrollArea.scrollContentsBy": ('int', 'int'), + "QAbstractScrollArea.setCornerWidget": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setHorizontalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setHorizontalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setSizeAdjustPolicy": ('PySide2.QtWidgets.QAbstractScrollArea.SizeAdjustPolicy',), + "QAbstractScrollArea.setVerticalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setVerticalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setViewportMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QAbstractScrollArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.sizeAdjustPolicy": (), + "QAbstractScrollArea.sizeHint": (), + "QAbstractScrollArea.verticalScrollBar": (), + "QAbstractScrollArea.verticalScrollBarPolicy": (), + "QAbstractScrollArea.viewport": (), + "QAbstractScrollArea.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.viewportMargins": (), + "QAbstractScrollArea.viewportSizeHint": (), + "QAbstractScrollArea.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSlider: + "QAbstractSlider.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSlider.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.event": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.hasTracking": (), + "QAbstractSlider.invertedAppearance": (), + "QAbstractSlider.invertedControls": (), + "QAbstractSlider.isSliderDown": (), + "QAbstractSlider.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSlider.maximum": (), + "QAbstractSlider.minimum": (), + "QAbstractSlider.orientation": (), + "QAbstractSlider.pageStep": (), + "QAbstractSlider.repeatAction": (), + "QAbstractSlider.setInvertedAppearance": ('bool',), + "QAbstractSlider.setInvertedControls": ('bool',), + "QAbstractSlider.setMaximum": ('int',), + "QAbstractSlider.setMinimum": ('int',), + "QAbstractSlider.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QAbstractSlider.setPageStep": ('int',), + "QAbstractSlider.setRange": ('int', 'int'), + "QAbstractSlider.setRepeatAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction', 'int', 'int'), + "QAbstractSlider.setSingleStep": ('int',), + "QAbstractSlider.setSliderDown": ('bool',), + "QAbstractSlider.setSliderPosition": ('int',), + "QAbstractSlider.setTracking": ('bool',), + "QAbstractSlider.setValue": ('int',), + "QAbstractSlider.singleStep": (), + "QAbstractSlider.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QAbstractSlider.sliderPosition": (), + "QAbstractSlider.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSlider.triggerAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction',), + "QAbstractSlider.value": (), + "QAbstractSlider.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSpinBox: + "QAbstractSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSpinBox.alignment": (), + "QAbstractSpinBox.buttonSymbols": (), + "QAbstractSpinBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.clear": (), + "QAbstractSpinBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QAbstractSpinBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractSpinBox.correctionMode": (), + "QAbstractSpinBox.event": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.fixup": ('str',), + "QAbstractSpinBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.hasAcceptableInput": (), + "QAbstractSpinBox.hasFrame": (), + "QAbstractSpinBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QAbstractSpinBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QAbstractSpinBox.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractSpinBox.interpretText": (), + "QAbstractSpinBox.isAccelerated": (), + "QAbstractSpinBox.isGroupSeparatorShown": (), + "QAbstractSpinBox.isReadOnly": (), + "QAbstractSpinBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyboardTracking": (), + "QAbstractSpinBox.lineEdit": (), + "QAbstractSpinBox.minimumSizeHint": (), + "QAbstractSpinBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractSpinBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractSpinBox.selectAll": (), + "QAbstractSpinBox.setAccelerated": ('bool',), + "QAbstractSpinBox.setAlignment": ('PySide2.libpyside.Alignment',), + "QAbstractSpinBox.setButtonSymbols": ('PySide2.QtWidgets.QAbstractSpinBox.ButtonSymbols',), + "QAbstractSpinBox.setCorrectionMode": ('PySide2.QtWidgets.QAbstractSpinBox.CorrectionMode',), + "QAbstractSpinBox.setFrame": ('bool',), + "QAbstractSpinBox.setGroupSeparatorShown": ('bool',), + "QAbstractSpinBox.setKeyboardTracking": ('bool',), + "QAbstractSpinBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QAbstractSpinBox.setReadOnly": ('bool',), + "QAbstractSpinBox.setSpecialValueText": ('str',), + "QAbstractSpinBox.setWrapping": ('bool',), + "QAbstractSpinBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QAbstractSpinBox.sizeHint": (), + "QAbstractSpinBox.specialValueText": (), + "QAbstractSpinBox.stepBy": ('int',), + "QAbstractSpinBox.stepDown": (), + "QAbstractSpinBox.stepEnabled": (), + "QAbstractSpinBox.stepUp": (), + "QAbstractSpinBox.text": (), + "QAbstractSpinBox.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSpinBox.validate": ('str', 'int'), + "QAbstractSpinBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QAbstractSpinBox.wrapping": (), + + # class PySide2.QtWidgets.QAccessibleWidget: + "QAccessibleWidget.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QAccessible.Role', 'str'), + "QAccessibleWidget.actionNames": (), + "QAccessibleWidget.addControllingSignal": ('str',), + "QAccessibleWidget.backgroundColor": (), + "QAccessibleWidget.child": ('int',), + "QAccessibleWidget.childCount": (), + "QAccessibleWidget.doAction": ('str',), + "QAccessibleWidget.focusChild": (), + "QAccessibleWidget.foregroundColor": (), + "QAccessibleWidget.indexOfChild": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessibleWidget.interface_cast": ('PySide2.QtGui.QAccessible.InterfaceType',), + "QAccessibleWidget.isValid": (), + "QAccessibleWidget.keyBindingsForAction": ('str',), + "QAccessibleWidget.parent": (), + "QAccessibleWidget.parentObject": (), + "QAccessibleWidget.rect": (), + "QAccessibleWidget.relations": ('PySide2.libpyside.Relation',), + "QAccessibleWidget.role": (), + "QAccessibleWidget.state": (), + "QAccessibleWidget.text": ('PySide2.QtGui.QAccessible.Text',), + "QAccessibleWidget.widget": (), + "QAccessibleWidget.window": (), + + # class PySide2.QtWidgets.QAction: + "QAction.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QAction.actionGroup": (), + "QAction.activate": ('PySide2.QtWidgets.QAction.ActionEvent',), + "QAction.associatedGraphicsWidgets": (), + "QAction.associatedWidgets": (), + "QAction.autoRepeat": (), + "QAction.data": (), + "QAction.event": ('PySide2.QtCore.QEvent',), + "QAction.font": (), + "QAction.hover": (), + "QAction.icon": (), + "QAction.iconText": (), + "QAction.isCheckable": (), + "QAction.isChecked": (), + "QAction.isEnabled": (), + "QAction.isIconVisibleInMenu": (), + "QAction.isSeparator": (), + "QAction.isShortcutVisibleInContextMenu": (), + "QAction.isVisible": (), + "QAction.menu": (), + "QAction.menuRole": (), + "QAction.parentWidget": (), + "QAction.priority": (), + "QAction.setActionGroup": ('PySide2.QtWidgets.QActionGroup',), + "QAction.setAutoRepeat": ('bool',), + "QAction.setCheckable": ('bool',), + "QAction.setChecked": ('bool',), + "QAction.setData": ('Any',), + "QAction.setDisabled": ('bool',), + "QAction.setEnabled": ('bool',), + "QAction.setFont": ('PySide2.QtGui.QFont',), + "QAction.setIcon": ('PySide2.QtGui.QIcon',), + "QAction.setIconText": ('str',), + "QAction.setIconVisibleInMenu": ('bool',), + "QAction.setMenu": ('PySide2.QtWidgets.QMenu',), + "QAction.setMenuRole": ('PySide2.QtWidgets.QAction.MenuRole',), + "QAction.setPriority": ('PySide2.QtWidgets.QAction.Priority',), + "QAction.setSeparator": ('bool',), + "QAction.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAction.setShortcutContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QAction.setShortcutVisibleInContextMenu": ('bool',), + "QAction.setShortcuts": [('PySide2.QtGui.QKeySequence.StandardKey',), ('list',)], + "QAction.setStatusTip": ('str',), + "QAction.setText": ('str',), + "QAction.setToolTip": ('str',), + "QAction.setVisible": ('bool',), + "QAction.setWhatsThis": ('str',), + "QAction.shortcut": (), + "QAction.shortcutContext": (), + "QAction.shortcuts": (), + "QAction.showStatusText": ('PySide2.QtWidgets.QWidget',), + "QAction.statusTip": (), + "QAction.text": (), + "QAction.toggle": (), + "QAction.toolTip": (), + "QAction.trigger": (), + "QAction.whatsThis": (), + + # class PySide2.QtWidgets.QActionGroup: + "QActionGroup.__init__": ('PySide2.QtCore.QObject',), + "QActionGroup.actions": (), + "QActionGroup.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction',), ('str',)], + "QActionGroup.checkedAction": (), + "QActionGroup.isEnabled": (), + "QActionGroup.isExclusive": (), + "QActionGroup.isVisible": (), + "QActionGroup.removeAction": ('PySide2.QtWidgets.QAction',), + "QActionGroup.setDisabled": ('bool',), + "QActionGroup.setEnabled": ('bool',), + "QActionGroup.setExclusive": ('bool',), + "QActionGroup.setVisible": ('bool',), + + # class PySide2.QtWidgets.QApplication: + "QApplication.__init__": [(), ('List[str]',)], + "QApplication.aboutQt": (), + "QApplication.activeModalWidget": (), + "QApplication.activePopupWidget": (), + "QApplication.activeWindow": (), + "QApplication.alert": ('PySide2.QtWidgets.QWidget', 'int'), + "QApplication.allWidgets": (), + "QApplication.autoSipEnabled": (), + "QApplication.beep": (), + "QApplication.closeAllWindows": (), + "QApplication.colorSpec": (), + "QApplication.cursorFlashTime": (), + "QApplication.desktop": (), + "QApplication.doubleClickInterval": (), + "QApplication.event": ('PySide2.QtCore.QEvent',), + "QApplication.exec_": (), + "QApplication.focusWidget": (), + "QApplication.font": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.fontMetrics": (), + "QApplication.globalStrut": (), + "QApplication.isEffectEnabled": ('PySide2.QtCore.Qt.UIEffect',), + "QApplication.keyboardInputInterval": (), + "QApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QApplication.palette": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.setActiveWindow": ('PySide2.QtWidgets.QWidget',), + "QApplication.setAutoSipEnabled": ('bool',), + "QApplication.setColorSpec": ('int',), + "QApplication.setCursorFlashTime": ('int',), + "QApplication.setDoubleClickInterval": ('int',), + "QApplication.setEffectEnabled": ('PySide2.QtCore.Qt.UIEffect', 'bool'), + "QApplication.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'str')], + "QApplication.setGlobalStrut": ('PySide2.QtCore.QSize',), + "QApplication.setKeyboardInputInterval": ('int',), + "QApplication.setPalette": [('PySide2.QtGui.QPalette',), ('PySide2.QtGui.QPalette', 'str')], + "QApplication.setStartDragDistance": ('int',), + "QApplication.setStartDragTime": ('int',), + "QApplication.setStyle": [('PySide2.QtWidgets.QStyle',), ('str',)], + "QApplication.setStyleSheet": ('str',), + "QApplication.setWheelScrollLines": ('int',), + "QApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QApplication.startDragDistance": (), + "QApplication.startDragTime": (), + "QApplication.style": (), + "QApplication.styleSheet": (), + "QApplication.topLevelAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.topLevelWidgets": (), + "QApplication.wheelScrollLines": (), + "QApplication.widgetAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.windowIcon": (), + + # class PySide2.QtWidgets.QBoxLayout: + "QBoxLayout.__init__": ('PySide2.QtWidgets.QBoxLayout.Direction', 'PySide2.QtWidgets.QWidget'), + "QBoxLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QBoxLayout.addLayout": ('PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.addSpacerItem": ('PySide2.QtWidgets.QSpacerItem',), + "QBoxLayout.addSpacing": ('int',), + "QBoxLayout.addStretch": ('int',), + "QBoxLayout.addStrut": ('int',), + "QBoxLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.libpyside.Alignment')], + "QBoxLayout.count": (), + "QBoxLayout.direction": (), + "QBoxLayout.expandingDirections": (), + "QBoxLayout.hasHeightForWidth": (), + "QBoxLayout.heightForWidth": ('int',), + "QBoxLayout.insertItem": ('int', 'PySide2.QtWidgets.QLayoutItem'), + "QBoxLayout.insertLayout": ('int', 'PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.insertSpacerItem": ('int', 'PySide2.QtWidgets.QSpacerItem'), + "QBoxLayout.insertSpacing": ('int', 'int'), + "QBoxLayout.insertStretch": ('int', 'int'), + "QBoxLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int', 'PySide2.libpyside.Alignment'), + "QBoxLayout.invalidate": (), + "QBoxLayout.itemAt": ('int',), + "QBoxLayout.maximumSize": (), + "QBoxLayout.minimumHeightForWidth": ('int',), + "QBoxLayout.minimumSize": (), + "QBoxLayout.setDirection": ('PySide2.QtWidgets.QBoxLayout.Direction',), + "QBoxLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QBoxLayout.setSpacing": ('int',), + "QBoxLayout.setStretch": ('int', 'int'), + "QBoxLayout.setStretchFactor": [('PySide2.QtWidgets.QLayout', 'int'), ('PySide2.QtWidgets.QWidget', 'int')], + "QBoxLayout.sizeHint": (), + "QBoxLayout.spacing": (), + "QBoxLayout.stretch": ('int',), + "QBoxLayout.takeAt": ('int',), + + # class PySide2.QtWidgets.QButtonGroup: + "QButtonGroup.__init__": ('PySide2.QtCore.QObject',), + "QButtonGroup.addButton": ('PySide2.QtWidgets.QAbstractButton', 'int'), + "QButtonGroup.button": ('int',), + "QButtonGroup.buttons": (), + "QButtonGroup.checkedButton": (), + "QButtonGroup.checkedId": (), + "QButtonGroup.exclusive": (), + "QButtonGroup.id": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.setExclusive": ('bool',), + "QButtonGroup.setId": ('PySide2.QtWidgets.QAbstractButton', 'int'), + + # class PySide2.QtWidgets.QCalendarWidget: + "QCalendarWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QCalendarWidget.dateEditAcceptDelay": (), + "QCalendarWidget.dateTextFormat": [(), ('PySide2.QtCore.QDate',)], + "QCalendarWidget.event": ('PySide2.QtCore.QEvent',), + "QCalendarWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCalendarWidget.firstDayOfWeek": (), + "QCalendarWidget.headerTextFormat": (), + "QCalendarWidget.horizontalHeaderFormat": (), + "QCalendarWidget.isDateEditEnabled": (), + "QCalendarWidget.isGridVisible": (), + "QCalendarWidget.isNavigationBarVisible": (), + "QCalendarWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QCalendarWidget.maximumDate": (), + "QCalendarWidget.minimumDate": (), + "QCalendarWidget.minimumSizeHint": (), + "QCalendarWidget.monthShown": (), + "QCalendarWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QCalendarWidget.paintCell": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QDate'), + "QCalendarWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QCalendarWidget.selectedDate": (), + "QCalendarWidget.selectionMode": (), + "QCalendarWidget.setCurrentPage": ('int', 'int'), + "QCalendarWidget.setDateEditAcceptDelay": ('int',), + "QCalendarWidget.setDateEditEnabled": ('bool',), + "QCalendarWidget.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QCalendarWidget.setDateTextFormat": ('PySide2.QtCore.QDate', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.setFirstDayOfWeek": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.setGridVisible": ('bool',), + "QCalendarWidget.setHeaderTextFormat": ('PySide2.QtGui.QTextCharFormat',), + "QCalendarWidget.setHorizontalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.HorizontalHeaderFormat',), + "QCalendarWidget.setMaximumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setMinimumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setNavigationBarVisible": ('bool',), + "QCalendarWidget.setSelectedDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setSelectionMode": ('PySide2.QtWidgets.QCalendarWidget.SelectionMode',), + "QCalendarWidget.setVerticalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.VerticalHeaderFormat',), + "QCalendarWidget.setWeekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.showNextMonth": (), + "QCalendarWidget.showNextYear": (), + "QCalendarWidget.showPreviousMonth": (), + "QCalendarWidget.showPreviousYear": (), + "QCalendarWidget.showSelectedDate": (), + "QCalendarWidget.showToday": (), + "QCalendarWidget.sizeHint": (), + "QCalendarWidget.updateCell": ('PySide2.QtCore.QDate',), + "QCalendarWidget.updateCells": (), + "QCalendarWidget.verticalHeaderFormat": (), + "QCalendarWidget.weekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.yearShown": (), + + # class PySide2.QtWidgets.QCheckBox: + "QCheckBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QCheckBox.checkState": (), + "QCheckBox.checkStateSet": (), + "QCheckBox.event": ('PySide2.QtCore.QEvent',), + "QCheckBox.hitButton": ('PySide2.QtCore.QPoint',), + "QCheckBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QCheckBox.isTristate": (), + "QCheckBox.minimumSizeHint": (), + "QCheckBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QCheckBox.nextCheckState": (), + "QCheckBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCheckBox.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QCheckBox.setTristate": ('bool',), + "QCheckBox.sizeHint": (), + + # class PySide2.QtWidgets.QColorDialog: + "QColorDialog.__init__": [('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QColorDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QColorDialog.currentColor": (), + "QColorDialog.customColor": ('int',), + "QColorDialog.customCount": (), + "QColorDialog.done": ('int',), + "QColorDialog.getColor": ('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget', 'str', 'PySide2.libpyside.ColorDialogOptions'), + "QColorDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QColorDialog.options": (), + "QColorDialog.selectedColor": (), + "QColorDialog.setCurrentColor": ('PySide2.QtGui.QColor',), + "QColorDialog.setCustomColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption', 'bool'), + "QColorDialog.setOptions": ('PySide2.libpyside.ColorDialogOptions',), + "QColorDialog.setStandardColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setVisible": ('bool',), + "QColorDialog.standardColor": ('int',), + "QColorDialog.testOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption',), + + # class PySide2.QtWidgets.QColormap: + "QColormap.__init__": ('PySide2.QtWidgets.QColormap',), + "QColormap.__copy__": (), + "QColormap.cleanup": (), + "QColormap.colorAt": ('int',), + "QColormap.colormap": (), + "QColormap.depth": (), + "QColormap.initialize": (), + "QColormap.instance": ('int',), + "QColormap.mode": (), + "QColormap.pixel": ('PySide2.QtGui.QColor',), + "QColormap.size": (), + + # class PySide2.QtWidgets.QColumnView: + "QColumnView.__init__": ('PySide2.QtWidgets.QWidget',), + "QColumnView.columnWidths": (), + "QColumnView.createColumn": ('PySide2.QtCore.QModelIndex',), + "QColumnView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QColumnView.horizontalOffset": (), + "QColumnView.indexAt": ('PySide2.QtCore.QPoint',), + "QColumnView.initializeColumn": ('PySide2.QtWidgets.QAbstractItemView',), + "QColumnView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QColumnView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QColumnView.previewWidget": (), + "QColumnView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QColumnView.resizeGripsVisible": (), + "QColumnView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QColumnView.scrollContentsBy": ('int', 'int'), + "QColumnView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QColumnView.selectAll": (), + "QColumnView.setColumnWidths": ('list',), + "QColumnView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QColumnView.setPreviewWidget": ('PySide2.QtWidgets.QWidget',), + "QColumnView.setResizeGripsVisible": ('bool',), + "QColumnView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QColumnView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QColumnView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QColumnView.sizeHint": (), + "QColumnView.verticalOffset": (), + "QColumnView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QColumnView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QComboBox: + "QComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QComboBox.addItem": [('PySide2.QtGui.QIcon', 'str', 'Any'), ('str', 'Any')], + "QComboBox.addItems": ('List[str]',), + "QComboBox.autoCompletion": (), + "QComboBox.autoCompletionCaseSensitivity": (), + "QComboBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QComboBox.clear": (), + "QComboBox.clearEditText": (), + "QComboBox.completer": (), + "QComboBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QComboBox.count": (), + "QComboBox.currentData": ('int',), + "QComboBox.currentIndex": (), + "QComboBox.currentText": (), + "QComboBox.duplicatesEnabled": (), + "QComboBox.event": ('PySide2.QtCore.QEvent',), + "QComboBox.findData": ('Any', 'int', 'PySide2.libpyside.MatchFlags'), + "QComboBox.findText": ('str', 'PySide2.libpyside.MatchFlags'), + "QComboBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.hasFrame": (), + "QComboBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QComboBox.hidePopup": (), + "QComboBox.iconSize": (), + "QComboBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionComboBox',), + "QComboBox.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QComboBox.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QComboBox.insertItem": [('int', 'PySide2.QtGui.QIcon', 'str', 'Any'), ('int', 'str', 'Any')], + "QComboBox.insertItems": ('int', 'List[str]'), + "QComboBox.insertPolicy": (), + "QComboBox.insertSeparator": ('int',), + "QComboBox.isEditable": (), + "QComboBox.itemData": ('int', 'int'), + "QComboBox.itemDelegate": (), + "QComboBox.itemIcon": ('int',), + "QComboBox.itemText": ('int',), + "QComboBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.lineEdit": (), + "QComboBox.maxCount": (), + "QComboBox.maxVisibleItems": (), + "QComboBox.minimumContentsLength": (), + "QComboBox.minimumSizeHint": (), + "QComboBox.model": (), + "QComboBox.modelColumn": (), + "QComboBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QComboBox.removeItem": ('int',), + "QComboBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QComboBox.rootModelIndex": (), + "QComboBox.setAutoCompletion": ('bool',), + "QComboBox.setAutoCompletionCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QComboBox.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QComboBox.setCurrentIndex": ('int',), + "QComboBox.setCurrentText": ('str',), + "QComboBox.setDuplicatesEnabled": ('bool',), + "QComboBox.setEditText": ('str',), + "QComboBox.setEditable": ('bool',), + "QComboBox.setFrame": ('bool',), + "QComboBox.setIconSize": ('PySide2.QtCore.QSize',), + "QComboBox.setInsertPolicy": ('PySide2.QtWidgets.QComboBox.InsertPolicy',), + "QComboBox.setItemData": ('int', 'Any', 'int'), + "QComboBox.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QComboBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QComboBox.setItemText": ('int', 'str'), + "QComboBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QComboBox.setMaxCount": ('int',), + "QComboBox.setMaxVisibleItems": ('int',), + "QComboBox.setMinimumContentsLength": ('int',), + "QComboBox.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QComboBox.setModelColumn": ('int',), + "QComboBox.setRootModelIndex": ('PySide2.QtCore.QModelIndex',), + "QComboBox.setSizeAdjustPolicy": ('PySide2.QtWidgets.QComboBox.SizeAdjustPolicy',), + "QComboBox.setValidator": ('PySide2.QtGui.QValidator',), + "QComboBox.setView": ('PySide2.QtWidgets.QAbstractItemView',), + "QComboBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QComboBox.showPopup": (), + "QComboBox.sizeAdjustPolicy": (), + "QComboBox.sizeHint": (), + "QComboBox.validator": (), + "QComboBox.view": (), + "QComboBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QCommandLinkButton: + "QCommandLinkButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget'), ('str', 'str', 'PySide2.QtWidgets.QWidget')], + "QCommandLinkButton.description": (), + "QCommandLinkButton.event": ('PySide2.QtCore.QEvent',), + "QCommandLinkButton.heightForWidth": ('int',), + "QCommandLinkButton.minimumSizeHint": (), + "QCommandLinkButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCommandLinkButton.setDescription": ('str',), + "QCommandLinkButton.sizeHint": (), + + # class PySide2.QtWidgets.QCommonStyle: + "QCommonStyle.__init__": (), + "QCommonStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QCommonStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QCommonStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QCommonStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QCompleter: + "QCompleter.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QCompleter.caseSensitivity": (), + "QCompleter.complete": ('PySide2.QtCore.QRect',), + "QCompleter.completionColumn": (), + "QCompleter.completionCount": (), + "QCompleter.completionMode": (), + "QCompleter.completionModel": (), + "QCompleter.completionPrefix": (), + "QCompleter.completionRole": (), + "QCompleter.currentCompletion": (), + "QCompleter.currentIndex": (), + "QCompleter.currentRow": (), + "QCompleter.event": ('PySide2.QtCore.QEvent',), + "QCompleter.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCompleter.filterMode": (), + "QCompleter.maxVisibleItems": (), + "QCompleter.model": (), + "QCompleter.modelSorting": (), + "QCompleter.pathFromIndex": ('PySide2.QtCore.QModelIndex',), + "QCompleter.popup": (), + "QCompleter.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCompleter.setCompletionColumn": ('int',), + "QCompleter.setCompletionMode": ('PySide2.QtWidgets.QCompleter.CompletionMode',), + "QCompleter.setCompletionPrefix": ('str',), + "QCompleter.setCompletionRole": ('int',), + "QCompleter.setCurrentRow": ('int',), + "QCompleter.setFilterMode": ('PySide2.libpyside.MatchFlags',), + "QCompleter.setMaxVisibleItems": ('int',), + "QCompleter.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QCompleter.setModelSorting": ('PySide2.QtWidgets.QCompleter.ModelSorting',), + "QCompleter.setPopup": ('PySide2.QtWidgets.QAbstractItemView',), + "QCompleter.setWidget": ('PySide2.QtWidgets.QWidget',), + "QCompleter.setWrapAround": ('bool',), + "QCompleter.splitPath": ('str',), + "QCompleter.widget": (), + "QCompleter.wrapAround": (), + + # class PySide2.QtWidgets.QDataWidgetMapper: + "QDataWidgetMapper.__init__": ('PySide2.QtCore.QObject',), + "QDataWidgetMapper.addMapping": [('PySide2.QtWidgets.QWidget', 'int'), ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtCore.QByteArray')], + "QDataWidgetMapper.clearMapping": (), + "QDataWidgetMapper.currentIndex": (), + "QDataWidgetMapper.itemDelegate": (), + "QDataWidgetMapper.mappedPropertyName": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedSection": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedWidgetAt": ('int',), + "QDataWidgetMapper.model": (), + "QDataWidgetMapper.orientation": (), + "QDataWidgetMapper.removeMapping": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.revert": (), + "QDataWidgetMapper.rootIndex": (), + "QDataWidgetMapper.setCurrentIndex": ('int',), + "QDataWidgetMapper.setCurrentModelIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QDataWidgetMapper.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QDataWidgetMapper.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDataWidgetMapper.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setSubmitPolicy": ('PySide2.QtWidgets.QDataWidgetMapper.SubmitPolicy',), + "QDataWidgetMapper.submit": (), + "QDataWidgetMapper.submitPolicy": (), + "QDataWidgetMapper.toFirst": (), + "QDataWidgetMapper.toLast": (), + "QDataWidgetMapper.toNext": (), + "QDataWidgetMapper.toPrevious": (), + + # class PySide2.QtWidgets.QDateEdit: + "QDateEdit.__init__": [('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDateTimeEdit: + "QDateTimeEdit.__init__": [('Any', 'type', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDateTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QDateTimeEdit.calendarPopup": (), + "QDateTimeEdit.calendarWidget": (), + "QDateTimeEdit.clear": (), + "QDateTimeEdit.clearMaximumDate": (), + "QDateTimeEdit.clearMaximumDateTime": (), + "QDateTimeEdit.clearMaximumTime": (), + "QDateTimeEdit.clearMinimumDate": (), + "QDateTimeEdit.clearMinimumDateTime": (), + "QDateTimeEdit.clearMinimumTime": (), + "QDateTimeEdit.currentSection": (), + "QDateTimeEdit.currentSectionIndex": (), + "QDateTimeEdit.date": (), + "QDateTimeEdit.dateTime": (), + "QDateTimeEdit.dateTimeFromText": ('str',), + "QDateTimeEdit.displayFormat": (), + "QDateTimeEdit.displayedSections": (), + "QDateTimeEdit.event": ('PySide2.QtCore.QEvent',), + "QDateTimeEdit.fixup": ('str',), + "QDateTimeEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QDateTimeEdit.focusNextPrevChild": ('bool',), + "QDateTimeEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QDateTimeEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDateTimeEdit.maximumDate": (), + "QDateTimeEdit.maximumDateTime": (), + "QDateTimeEdit.maximumTime": (), + "QDateTimeEdit.minimumDate": (), + "QDateTimeEdit.minimumDateTime": (), + "QDateTimeEdit.minimumTime": (), + "QDateTimeEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDateTimeEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDateTimeEdit.sectionAt": ('int',), + "QDateTimeEdit.sectionCount": (), + "QDateTimeEdit.sectionText": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCalendarPopup": ('bool',), + "QDateTimeEdit.setCalendarWidget": ('PySide2.QtWidgets.QCalendarWidget',), + "QDateTimeEdit.setCurrentSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCurrentSectionIndex": ('int',), + "QDateTimeEdit.setDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QDateTimeEdit.setDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setDateTimeRange": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QDateTimeEdit.setDisplayFormat": ('str',), + "QDateTimeEdit.setMaximumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMaximumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMaximumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setMinimumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMinimumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMinimumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setSelectedSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setTimeRange": ('PySide2.QtCore.QTime', 'PySide2.QtCore.QTime'), + "QDateTimeEdit.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTimeEdit.sizeHint": (), + "QDateTimeEdit.stepBy": ('int',), + "QDateTimeEdit.stepEnabled": (), + "QDateTimeEdit.textFromDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.time": (), + "QDateTimeEdit.timeSpec": (), + "QDateTimeEdit.validate": ('str', 'int'), + "QDateTimeEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QDesktopWidget: + "QDesktopWidget.__init__": (), + "QDesktopWidget.availableGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.isVirtualDesktop": (), + "QDesktopWidget.numScreens": (), + "QDesktopWidget.primaryScreen": (), + "QDesktopWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDesktopWidget.screen": ('int',), + "QDesktopWidget.screenCount": (), + "QDesktopWidget.screenGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.screenNumber": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDial: + "QDial.__init__": ('PySide2.QtWidgets.QWidget',), + "QDial.event": ('PySide2.QtCore.QEvent',), + "QDial.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QDial.minimumSizeHint": (), + "QDial.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.notchSize": (), + "QDial.notchTarget": (), + "QDial.notchesVisible": (), + "QDial.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDial.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDial.setNotchTarget": ('float',), + "QDial.setNotchesVisible": ('bool',), + "QDial.setWrapping": ('bool',), + "QDial.sizeHint": (), + "QDial.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QDial.wrapping": (), + + # class PySide2.QtWidgets.QDialog: + "QDialog.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QDialog.accept": (), + "QDialog.adjustPosition": ('PySide2.QtWidgets.QWidget',), + "QDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDialog.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QDialog.done": ('int',), + "QDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QDialog.exec_": (), + "QDialog.extension": (), + "QDialog.isSizeGripEnabled": (), + "QDialog.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDialog.minimumSizeHint": (), + "QDialog.open": (), + "QDialog.orientation": (), + "QDialog.reject": (), + "QDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDialog.result": (), + "QDialog.setExtension": ('PySide2.QtWidgets.QWidget',), + "QDialog.setModal": ('bool',), + "QDialog.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialog.setResult": ('int',), + "QDialog.setSizeGripEnabled": ('bool',), + "QDialog.setVisible": ('bool',), + "QDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QDialog.showExtension": ('bool',), + "QDialog.sizeHint": (), + + # class PySide2.QtWidgets.QDialogButtonBox: + "QDialogButtonBox.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('PySide2.libpyside.StandardButtons', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QWidget')], + "QDialogButtonBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole'), ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), ('str', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole')], + "QDialogButtonBox.button": ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), + "QDialogButtonBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.buttons": (), + "QDialogButtonBox.centerButtons": (), + "QDialogButtonBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.clear": (), + "QDialogButtonBox.event": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.orientation": (), + "QDialogButtonBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.setCenterButtons": ('bool',), + "QDialogButtonBox.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialogButtonBox.setStandardButtons": ('PySide2.libpyside.StandardButtons',), + "QDialogButtonBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.standardButtons": (), + + # class PySide2.QtWidgets.QDirModel: + "QDirModel.__init__": [('List[str]', 'PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QDirModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QDirModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QDirModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filter": (), + "QDirModel.flags": ('PySide2.QtCore.QModelIndex',), + "QDirModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QDirModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QDirModel.iconProvider": (), + "QDirModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QDirModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.isReadOnly": (), + "QDirModel.lazyChildCount": (), + "QDirModel.mimeData": ('List[int]',), + "QDirModel.mimeTypes": (), + "QDirModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QDirModel.nameFilters": (), + "QDirModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QDirModel.refresh": ('PySide2.QtCore.QModelIndex',), + "QDirModel.remove": ('PySide2.QtCore.QModelIndex',), + "QDirModel.resolveSymlinks": (), + "QDirModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QDirModel.setFilter": ('PySide2.libpyside.Filters',), + "QDirModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QDirModel.setLazyChildCount": ('bool',), + "QDirModel.setNameFilters": ('List[str]',), + "QDirModel.setReadOnly": ('bool',), + "QDirModel.setResolveSymlinks": ('bool',), + "QDirModel.setSorting": ('PySide2.libpyside.SortFlags',), + "QDirModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QDirModel.sorting": (), + "QDirModel.supportedDropActions": (), + + # class PySide2.QtWidgets.QDockWidget: + "QDockWidget.__init__": [('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QDockWidget.allowedAreas": (), + "QDockWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QDockWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDockWidget.event": ('PySide2.QtCore.QEvent',), + "QDockWidget.features": (), + "QDockWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionDockWidget',), + "QDockWidget.isAreaAllowed": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QDockWidget.isFloating": (), + "QDockWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDockWidget.setAllowedAreas": ('PySide2.libpyside.DockWidgetAreas',), + "QDockWidget.setFeatures": ('PySide2.libpyside.DockWidgetFeatures',), + "QDockWidget.setFloating": ('bool',), + "QDockWidget.setTitleBarWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.titleBarWidget": (), + "QDockWidget.toggleViewAction": (), + "QDockWidget.widget": (), + + # class PySide2.QtWidgets.QDoubleSpinBox: + "QDoubleSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QDoubleSpinBox.cleanText": (), + "QDoubleSpinBox.decimals": (), + "QDoubleSpinBox.fixup": ('str',), + "QDoubleSpinBox.maximum": (), + "QDoubleSpinBox.minimum": (), + "QDoubleSpinBox.prefix": (), + "QDoubleSpinBox.setDecimals": ('int',), + "QDoubleSpinBox.setMaximum": ('float',), + "QDoubleSpinBox.setMinimum": ('float',), + "QDoubleSpinBox.setPrefix": ('str',), + "QDoubleSpinBox.setRange": ('float', 'float'), + "QDoubleSpinBox.setSingleStep": ('float',), + "QDoubleSpinBox.setSuffix": ('str',), + "QDoubleSpinBox.setValue": ('float',), + "QDoubleSpinBox.singleStep": (), + "QDoubleSpinBox.suffix": (), + "QDoubleSpinBox.textFromValue": ('float',), + "QDoubleSpinBox.validate": ('str', 'int'), + "QDoubleSpinBox.value": (), + "QDoubleSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QErrorMessage: + "QErrorMessage.__init__": ('PySide2.QtWidgets.QWidget',), + "QErrorMessage.changeEvent": ('PySide2.QtCore.QEvent',), + "QErrorMessage.done": ('int',), + "QErrorMessage.qtHandler": (), + "QErrorMessage.showMessage": [('str',), ('str', 'str')], + + # class PySide2.QtWidgets.QFileDialog: + "QFileDialog.__init__": [('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str')], + "QFileDialog.accept": (), + "QFileDialog.acceptMode": (), + "QFileDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFileDialog.confirmOverwrite": (), + "QFileDialog.defaultSuffix": (), + "QFileDialog.directory": (), + "QFileDialog.directoryUrl": (), + "QFileDialog.done": ('int',), + "QFileDialog.fileMode": (), + "QFileDialog.filter": (), + "QFileDialog.getExistingDirectory": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.Options'), + "QFileDialog.getExistingDirectoryUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'PySide2.libpyside.Options', 'List[str]'), + "QFileDialog.getOpenFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'PySide2.libpyside.Options'), + "QFileDialog.getOpenFileNames": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'PySide2.libpyside.Options'), + "QFileDialog.getOpenFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'PySide2.libpyside.Options', 'List[str]'), + "QFileDialog.getOpenFileUrls": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'PySide2.libpyside.Options', 'List[str]'), + "QFileDialog.getSaveFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'PySide2.libpyside.Options'), + "QFileDialog.getSaveFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'PySide2.libpyside.Options', 'List[str]'), + "QFileDialog.history": (), + "QFileDialog.iconProvider": (), + "QFileDialog.isNameFilterDetailsVisible": (), + "QFileDialog.isReadOnly": (), + "QFileDialog.itemDelegate": (), + "QFileDialog.labelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel',), + "QFileDialog.mimeTypeFilters": (), + "QFileDialog.nameFilters": (), + "QFileDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFileDialog.options": (), + "QFileDialog.proxyModel": (), + "QFileDialog.resolveSymlinks": (), + "QFileDialog.restoreState": ('PySide2.QtCore.QByteArray',), + "QFileDialog.saveState": (), + "QFileDialog.selectFile": ('str',), + "QFileDialog.selectMimeTypeFilter": ('str',), + "QFileDialog.selectNameFilter": ('str',), + "QFileDialog.selectUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.selectedFiles": (), + "QFileDialog.selectedMimeTypeFilter": (), + "QFileDialog.selectedNameFilter": (), + "QFileDialog.selectedUrls": (), + "QFileDialog.setAcceptMode": ('PySide2.QtWidgets.QFileDialog.AcceptMode',), + "QFileDialog.setConfirmOverwrite": ('bool',), + "QFileDialog.setDefaultSuffix": ('str',), + "QFileDialog.setDirectory": [('PySide2.QtCore.QDir',), ('str',)], + "QFileDialog.setDirectoryUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.setFileMode": ('PySide2.QtWidgets.QFileDialog.FileMode',), + "QFileDialog.setFilter": ('PySide2.libpyside.Filters',), + "QFileDialog.setHistory": ('List[str]',), + "QFileDialog.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileDialog.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QFileDialog.setLabelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel', 'str'), + "QFileDialog.setMimeTypeFilters": ('List[str]',), + "QFileDialog.setNameFilter": ('str',), + "QFileDialog.setNameFilterDetailsVisible": ('bool',), + "QFileDialog.setNameFilters": ('List[str]',), + "QFileDialog.setOption": ('PySide2.QtWidgets.QFileDialog.Option', 'bool'), + "QFileDialog.setOptions": ('PySide2.libpyside.Options',), + "QFileDialog.setProxyModel": ('PySide2.QtCore.QAbstractProxyModel',), + "QFileDialog.setReadOnly": ('bool',), + "QFileDialog.setResolveSymlinks": ('bool',), + "QFileDialog.setSidebarUrls": ('list',), + "QFileDialog.setSupportedSchemes": ('List[str]',), + "QFileDialog.setViewMode": ('PySide2.QtWidgets.QFileDialog.ViewMode',), + "QFileDialog.setVisible": ('bool',), + "QFileDialog.sidebarUrls": (), + "QFileDialog.supportedSchemes": (), + "QFileDialog.testOption": ('PySide2.QtWidgets.QFileDialog.Option',), + "QFileDialog.viewMode": (), + + # class PySide2.QtWidgets.QFileIconProvider: + "QFileIconProvider.__init__": (), + "QFileIconProvider.icon": [('PySide2.QtCore.QFileInfo',), ('PySide2.QtWidgets.QFileIconProvider.IconType',)], + "QFileIconProvider.options": (), + "QFileIconProvider.setOptions": ('PySide2.libpyside.Options',), + "QFileIconProvider.type": ('PySide2.QtCore.QFileInfo',), + + # class PySide2.QtWidgets.QFileSystemModel: + "QFileSystemModel.__init__": ('PySide2.QtCore.QObject',), + "QFileSystemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QFileSystemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.event": ('PySide2.QtCore.QEvent',), + "QFileSystemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filter": (), + "QFileSystemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QFileSystemModel.iconProvider": (), + "QFileSystemModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QFileSystemModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.isReadOnly": (), + "QFileSystemModel.lastModified": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.mimeData": ('List[int]',), + "QFileSystemModel.mimeTypes": (), + "QFileSystemModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QFileSystemModel.myComputer": ('int',), + "QFileSystemModel.nameFilterDisables": (), + "QFileSystemModel.nameFilters": (), + "QFileSystemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QFileSystemModel.remove": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.resolveSymlinks": (), + "QFileSystemModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.rootDirectory": (), + "QFileSystemModel.rootPath": (), + "QFileSystemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QFileSystemModel.setFilter": ('PySide2.libpyside.Filters',), + "QFileSystemModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileSystemModel.setNameFilterDisables": ('bool',), + "QFileSystemModel.setNameFilters": ('List[str]',), + "QFileSystemModel.setReadOnly": ('bool',), + "QFileSystemModel.setResolveSymlinks": ('bool',), + "QFileSystemModel.setRootPath": ('str',), + "QFileSystemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.size": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QFileSystemModel.supportedDropActions": (), + "QFileSystemModel.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QFileSystemModel.type": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtWidgets.QFocusFrame: + "QFocusFrame.__init__": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.event": ('PySide2.QtCore.QEvent',), + "QFocusFrame.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFocusFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QFocusFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFocusFrame.setWidget": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.widget": (), + + # class PySide2.QtWidgets.QFontComboBox: + "QFontComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QFontComboBox.currentFont": (), + "QFontComboBox.event": ('PySide2.QtCore.QEvent',), + "QFontComboBox.fontFilters": (), + "QFontComboBox.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontComboBox.setFontFilters": ('PySide2.libpyside.FontFilters',), + "QFontComboBox.setWritingSystem": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontComboBox.sizeHint": (), + "QFontComboBox.writingSystem": (), + + # class PySide2.QtWidgets.QFontDialog: + "QFontDialog.__init__": [('PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QFontDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFontDialog.currentFont": (), + "QFontDialog.done": ('int',), + "QFontDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFontDialog.getFont": [('bool', 'PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget', 'str', 'PySide2.libpyside.FontDialogOptions'), ('bool', 'PySide2.QtWidgets.QWidget')], + "QFontDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFontDialog.options": (), + "QFontDialog.selectedFont": (), + "QFontDialog.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontDialog.setOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption', 'bool'), + "QFontDialog.setOptions": ('PySide2.libpyside.FontDialogOptions',), + "QFontDialog.setVisible": ('bool',), + "QFontDialog.testOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption',), + + # class PySide2.QtWidgets.QFormLayout: + "QFormLayout.__init__": ('PySide2.QtWidgets.QWidget',), + "QFormLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QFormLayout.addRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QLayout'), ('str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.count": (), + "QFormLayout.expandingDirections": (), + "QFormLayout.fieldGrowthPolicy": (), + "QFormLayout.formAlignment": (), + "QFormLayout.getItemPosition": ('int', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getLayoutPosition": ('PySide2.QtWidgets.QLayout', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getWidgetPosition": ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.hasHeightForWidth": (), + "QFormLayout.heightForWidth": ('int',), + "QFormLayout.horizontalSpacing": (), + "QFormLayout.insertRow": [('int', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('int', 'str', 'PySide2.QtWidgets.QLayout'), ('int', 'str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.invalidate": (), + "QFormLayout.itemAt": [('int',), ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole')], + "QFormLayout.labelAlignment": (), + "QFormLayout.labelForField": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QFormLayout.minimumSize": (), + "QFormLayout.removeRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QFormLayout.rowCount": (), + "QFormLayout.rowWrapPolicy": (), + "QFormLayout.setFieldGrowthPolicy": ('PySide2.QtWidgets.QFormLayout.FieldGrowthPolicy',), + "QFormLayout.setFormAlignment": ('PySide2.libpyside.Alignment',), + "QFormLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QFormLayout.setHorizontalSpacing": ('int',), + "QFormLayout.setItem": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayoutItem'), + "QFormLayout.setLabelAlignment": ('PySide2.libpyside.Alignment',), + "QFormLayout.setLayout": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayout'), + "QFormLayout.setRowWrapPolicy": ('PySide2.QtWidgets.QFormLayout.RowWrapPolicy',), + "QFormLayout.setSpacing": ('int',), + "QFormLayout.setVerticalSpacing": ('int',), + "QFormLayout.setWidget": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QWidget'), + "QFormLayout.sizeHint": (), + "QFormLayout.spacing": (), + "QFormLayout.takeAt": ('int',), + "QFormLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QFrame: + "QFrame.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QFrame.changeEvent": ('PySide2.QtCore.QEvent',), + "QFrame.drawFrame": ('PySide2.QtGui.QPainter',), + "QFrame.event": ('PySide2.QtCore.QEvent',), + "QFrame.frameRect": (), + "QFrame.frameShadow": (), + "QFrame.frameShape": (), + "QFrame.frameStyle": (), + "QFrame.frameWidth": (), + "QFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QFrame.lineWidth": (), + "QFrame.midLineWidth": (), + "QFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFrame.setFrameRect": ('PySide2.QtCore.QRect',), + "QFrame.setFrameShadow": ('PySide2.QtWidgets.QFrame.Shadow',), + "QFrame.setFrameShape": ('PySide2.QtWidgets.QFrame.Shape',), + "QFrame.setFrameStyle": ('int',), + "QFrame.setLineWidth": ('int',), + "QFrame.setMidLineWidth": ('int',), + "QFrame.sizeHint": (), + + # class PySide2.QtWidgets.QGesture: + "QGesture.__init__": ('PySide2.QtCore.QObject',), + "QGesture.gestureCancelPolicy": (), + "QGesture.gestureType": (), + "QGesture.hasHotSpot": (), + "QGesture.hotSpot": (), + "QGesture.setGestureCancelPolicy": ('PySide2.QtWidgets.QGesture.GestureCancelPolicy',), + "QGesture.setHotSpot": ('PySide2.QtCore.QPointF',), + "QGesture.state": (), + "QGesture.unsetHotSpot": (), + + # class PySide2.QtWidgets.QGestureEvent: + "QGestureEvent.__init__": ('list',), + "QGestureEvent.accept": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.activeGestures": (), + "QGestureEvent.canceledGestures": (), + "QGestureEvent.gesture": ('PySide2.QtCore.Qt.GestureType',), + "QGestureEvent.gestures": (), + "QGestureEvent.ignore": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.isAccepted": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.mapToGraphicsScene": ('PySide2.QtCore.QPointF',), + "QGestureEvent.setAccepted": [('PySide2.QtCore.Qt.GestureType', 'bool'), ('PySide2.QtWidgets.QGesture', 'bool'), ('bool',)], + "QGestureEvent.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGestureEvent.widget": (), + + # class PySide2.QtWidgets.QGestureRecognizer: + "QGestureRecognizer.__init__": (), + "QGestureRecognizer.create": ('PySide2.QtCore.QObject',), + "QGestureRecognizer.recognize": ('PySide2.QtWidgets.QGesture', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGestureRecognizer.registerRecognizer": ('PySide2.QtWidgets.QGestureRecognizer',), + "QGestureRecognizer.reset": ('PySide2.QtWidgets.QGesture',), + "QGestureRecognizer.unregisterRecognizer": ('PySide2.QtCore.Qt.GestureType',), + + # class PySide2.QtWidgets.QGraphicsAnchor: + "QGraphicsAnchor.setSizePolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QGraphicsAnchor.setSpacing": ('float',), + "QGraphicsAnchor.sizePolicy": (), + "QGraphicsAnchor.spacing": (), + "QGraphicsAnchor.unsetSpacing": (), + + # class PySide2.QtWidgets.QGraphicsAnchorLayout: + "QGraphicsAnchorLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsAnchorLayout.addAnchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.addAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.libpyside.Orientations'), + "QGraphicsAnchorLayout.addCornerAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner'), + "QGraphicsAnchorLayout.anchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.count": (), + "QGraphicsAnchorLayout.horizontalSpacing": (), + "QGraphicsAnchorLayout.invalidate": (), + "QGraphicsAnchorLayout.itemAt": ('int',), + "QGraphicsAnchorLayout.removeAt": ('int',), + "QGraphicsAnchorLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsAnchorLayout.setHorizontalSpacing": ('float',), + "QGraphicsAnchorLayout.setSpacing": ('float',), + "QGraphicsAnchorLayout.setVerticalSpacing": ('float',), + "QGraphicsAnchorLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsAnchorLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsBlurEffect: + "QGraphicsBlurEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsBlurEffect.blurHints": (), + "QGraphicsBlurEffect.blurRadius": (), + "QGraphicsBlurEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsBlurEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsBlurEffect.setBlurHints": ('PySide2.libpyside.BlurHints',), + "QGraphicsBlurEffect.setBlurRadius": ('float',), + + # class PySide2.QtWidgets.QGraphicsColorizeEffect: + "QGraphicsColorizeEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsColorizeEffect.color": (), + "QGraphicsColorizeEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsColorizeEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsColorizeEffect.setStrength": ('float',), + "QGraphicsColorizeEffect.strength": (), + + # class PySide2.QtWidgets.QGraphicsDropShadowEffect: + "QGraphicsDropShadowEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsDropShadowEffect.blurRadius": (), + "QGraphicsDropShadowEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsDropShadowEffect.color": (), + "QGraphicsDropShadowEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsDropShadowEffect.offset": (), + "QGraphicsDropShadowEffect.setBlurRadius": ('float',), + "QGraphicsDropShadowEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsDropShadowEffect.setOffset": [('PySide2.QtCore.QPointF',), ('float',), ('float', 'float')], + "QGraphicsDropShadowEffect.setXOffset": ('float',), + "QGraphicsDropShadowEffect.setYOffset": ('float',), + "QGraphicsDropShadowEffect.xOffset": (), + "QGraphicsDropShadowEffect.yOffset": (), + + # class PySide2.QtWidgets.QGraphicsEffect: + "QGraphicsEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsEffect.boundingRect": (), + "QGraphicsEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.drawSource": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.isEnabled": (), + "QGraphicsEffect.setEnabled": ('bool',), + "QGraphicsEffect.sourceBoundingRect": ('PySide2.QtCore.Qt.CoordinateSystem',), + "QGraphicsEffect.sourceChanged": ('PySide2.libpyside.ChangeFlags',), + "QGraphicsEffect.sourceIsPixmap": (), + "QGraphicsEffect.sourcePixmap": ('PySide2.QtCore.Qt.CoordinateSystem', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QGraphicsEffect.PixmapPadMode'), + "QGraphicsEffect.update": (), + "QGraphicsEffect.updateBoundingRect": (), + + # class PySide2.QtWidgets.QGraphicsEllipseItem: + "QGraphicsEllipseItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsEllipseItem.boundingRect": (), + "QGraphicsEllipseItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsEllipseItem.extension": ('Any',), + "QGraphicsEllipseItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsEllipseItem.opaqueArea": (), + "QGraphicsEllipseItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsEllipseItem.rect": (), + "QGraphicsEllipseItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsEllipseItem.setSpanAngle": ('int',), + "QGraphicsEllipseItem.setStartAngle": ('int',), + "QGraphicsEllipseItem.shape": (), + "QGraphicsEllipseItem.spanAngle": (), + "QGraphicsEllipseItem.startAngle": (), + "QGraphicsEllipseItem.type": (), + + # class PySide2.QtWidgets.QGraphicsGridLayout: + "QGraphicsGridLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.addItem": [('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'PySide2.libpyside.Alignment'), ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment')], + "QGraphicsGridLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.columnAlignment": ('int',), + "QGraphicsGridLayout.columnCount": (), + "QGraphicsGridLayout.columnMaximumWidth": ('int',), + "QGraphicsGridLayout.columnMinimumWidth": ('int',), + "QGraphicsGridLayout.columnPreferredWidth": ('int',), + "QGraphicsGridLayout.columnSpacing": ('int',), + "QGraphicsGridLayout.columnStretchFactor": ('int',), + "QGraphicsGridLayout.count": (), + "QGraphicsGridLayout.horizontalSpacing": (), + "QGraphicsGridLayout.invalidate": (), + "QGraphicsGridLayout.itemAt": [('int',), ('int', 'int')], + "QGraphicsGridLayout.removeAt": ('int',), + "QGraphicsGridLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.rowAlignment": ('int',), + "QGraphicsGridLayout.rowCount": (), + "QGraphicsGridLayout.rowMaximumHeight": ('int',), + "QGraphicsGridLayout.rowMinimumHeight": ('int',), + "QGraphicsGridLayout.rowPreferredHeight": ('int',), + "QGraphicsGridLayout.rowSpacing": ('int',), + "QGraphicsGridLayout.rowStretchFactor": ('int',), + "QGraphicsGridLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.libpyside.Alignment'), + "QGraphicsGridLayout.setColumnAlignment": ('int', 'PySide2.libpyside.Alignment'), + "QGraphicsGridLayout.setColumnFixedWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMaximumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMinimumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnPreferredWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnSpacing": ('int', 'float'), + "QGraphicsGridLayout.setColumnStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsGridLayout.setHorizontalSpacing": ('float',), + "QGraphicsGridLayout.setRowAlignment": ('int', 'PySide2.libpyside.Alignment'), + "QGraphicsGridLayout.setRowFixedHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMaximumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMinimumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowPreferredHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowSpacing": ('int', 'float'), + "QGraphicsGridLayout.setRowStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setSpacing": ('float',), + "QGraphicsGridLayout.setVerticalSpacing": ('float',), + "QGraphicsGridLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsItem: + "QGraphicsItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.acceptDrops": (), + "QGraphicsItem.acceptHoverEvents": (), + "QGraphicsItem.acceptTouchEvents": (), + "QGraphicsItem.acceptedMouseButtons": (), + "QGraphicsItem.addToIndex": (), + "QGraphicsItem.advance": ('int',), + "QGraphicsItem.boundingRect": (), + "QGraphicsItem.boundingRegion": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.boundingRegionGranularity": (), + "QGraphicsItem.cacheMode": (), + "QGraphicsItem.childItems": (), + "QGraphicsItem.childrenBoundingRect": (), + "QGraphicsItem.clearFocus": (), + "QGraphicsItem.clipPath": (), + "QGraphicsItem.collidesWithItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidesWithPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidingItems": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsItem.commonAncestorItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsItem.cursor": (), + "QGraphicsItem.data": ('int',), + "QGraphicsItem.deviceTransform": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.effectiveOpacity": (), + "QGraphicsItem.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsItem.extension": ('Any',), + "QGraphicsItem.filtersChildEvents": (), + "QGraphicsItem.flags": (), + "QGraphicsItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusItem": (), + "QGraphicsItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusProxy": (), + "QGraphicsItem.focusScopeItem": (), + "QGraphicsItem.grabKeyboard": (), + "QGraphicsItem.grabMouse": (), + "QGraphicsItem.graphicsEffect": (), + "QGraphicsItem.group": (), + "QGraphicsItem.handlesChildEvents": (), + "QGraphicsItem.hasCursor": (), + "QGraphicsItem.hasFocus": (), + "QGraphicsItem.hide": (), + "QGraphicsItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsItem.inputMethodHints": (), + "QGraphicsItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsItem.installSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isActive": (), + "QGraphicsItem.isAncestorOf": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isBlockedByModalPanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isClipped": (), + "QGraphicsItem.isEnabled": (), + "QGraphicsItem.isObscured": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isPanel": (), + "QGraphicsItem.isSelected": (), + "QGraphicsItem.isUnderMouse": (), + "QGraphicsItem.isVisible": (), + "QGraphicsItem.isVisibleTo": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isWidget": (), + "QGraphicsItem.isWindow": (), + "QGraphicsItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsItem.itemTransform": ('PySide2.QtWidgets.QGraphicsItem', 'bool'), + "QGraphicsItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.mapFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapToParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.matrix": (), + "QGraphicsItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.moveBy": ('float', 'float'), + "QGraphicsItem.opacity": (), + "QGraphicsItem.opaqueArea": (), + "QGraphicsItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItem.panel": (), + "QGraphicsItem.panelModality": (), + "QGraphicsItem.parentItem": (), + "QGraphicsItem.parentObject": (), + "QGraphicsItem.parentWidget": (), + "QGraphicsItem.pos": (), + "QGraphicsItem.prepareGeometryChange": (), + "QGraphicsItem.removeFromIndex": (), + "QGraphicsItem.removeSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.resetMatrix": (), + "QGraphicsItem.resetTransform": (), + "QGraphicsItem.rotation": (), + "QGraphicsItem.scale": (), + "QGraphicsItem.scene": (), + "QGraphicsItem.sceneBoundingRect": (), + "QGraphicsItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsItem.sceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsItem.sceneMatrix": (), + "QGraphicsItem.scenePos": (), + "QGraphicsItem.sceneTransform": (), + "QGraphicsItem.scroll": ('float', 'float', 'PySide2.QtCore.QRectF'), + "QGraphicsItem.setAcceptDrops": ('bool',), + "QGraphicsItem.setAcceptHoverEvents": ('bool',), + "QGraphicsItem.setAcceptTouchEvents": ('bool',), + "QGraphicsItem.setAcceptedMouseButtons": ('PySide2.libpyside.MouseButtons',), + "QGraphicsItem.setActive": ('bool',), + "QGraphicsItem.setBoundingRegionGranularity": ('float',), + "QGraphicsItem.setCacheMode": ('PySide2.QtWidgets.QGraphicsItem.CacheMode', 'PySide2.QtCore.QSize'), + "QGraphicsItem.setCursor": ('PySide2.QtGui.QCursor',), + "QGraphicsItem.setData": ('int', 'Any'), + "QGraphicsItem.setEnabled": ('bool',), + "QGraphicsItem.setFiltersChildEvents": ('bool',), + "QGraphicsItem.setFlag": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemFlag', 'bool'), + "QGraphicsItem.setFlags": ('PySide2.libpyside.GraphicsItemFlags',), + "QGraphicsItem.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsItem.setFocusProxy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QGraphicsItem.setGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsItem.setHandlesChildEvents": ('bool',), + "QGraphicsItem.setInputMethodHints": ('PySide2.libpyside.InputMethodHints',), + "QGraphicsItem.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsItem.setOpacity": ('float',), + "QGraphicsItem.setPanelModality": ('PySide2.QtWidgets.QGraphicsItem.PanelModality',), + "QGraphicsItem.setParentItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setPos": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setRotation": ('float',), + "QGraphicsItem.setScale": ('float',), + "QGraphicsItem.setSelected": ('bool',), + "QGraphicsItem.setToolTip": ('str',), + "QGraphicsItem.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsItem.setTransformOriginPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setTransformations": ('list',), + "QGraphicsItem.setVisible": ('bool',), + "QGraphicsItem.setX": ('float',), + "QGraphicsItem.setY": ('float',), + "QGraphicsItem.setZValue": ('float',), + "QGraphicsItem.shape": (), + "QGraphicsItem.show": (), + "QGraphicsItem.stackBefore": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.toGraphicsObject": (), + "QGraphicsItem.toolTip": (), + "QGraphicsItem.topLevelItem": (), + "QGraphicsItem.topLevelWidget": (), + "QGraphicsItem.transform": (), + "QGraphicsItem.transformOriginPoint": (), + "QGraphicsItem.transformations": (), + "QGraphicsItem.type": (), + "QGraphicsItem.ungrabKeyboard": (), + "QGraphicsItem.ungrabMouse": (), + "QGraphicsItem.unsetCursor": (), + "QGraphicsItem.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.updateMicroFocus": (), + "QGraphicsItem.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsItem.window": (), + "QGraphicsItem.x": (), + "QGraphicsItem.y": (), + "QGraphicsItem.zValue": (), + + # class PySide2.QtWidgets.QGraphicsItemAnimation: + "QGraphicsItemAnimation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsItemAnimation.afterAnimationStep": ('float',), + "QGraphicsItemAnimation.beforeAnimationStep": ('float',), + "QGraphicsItemAnimation.clear": (), + "QGraphicsItemAnimation.horizontalScaleAt": ('float',), + "QGraphicsItemAnimation.horizontalShearAt": ('float',), + "QGraphicsItemAnimation.item": (), + "QGraphicsItemAnimation.matrixAt": ('float',), + "QGraphicsItemAnimation.posAt": ('float',), + "QGraphicsItemAnimation.posList": (), + "QGraphicsItemAnimation.reset": (), + "QGraphicsItemAnimation.rotationAt": ('float',), + "QGraphicsItemAnimation.rotationList": (), + "QGraphicsItemAnimation.scaleList": (), + "QGraphicsItemAnimation.setItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemAnimation.setPosAt": ('float', 'PySide2.QtCore.QPointF'), + "QGraphicsItemAnimation.setRotationAt": ('float', 'float'), + "QGraphicsItemAnimation.setScaleAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setShearAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setStep": ('float',), + "QGraphicsItemAnimation.setTimeLine": ('PySide2.QtCore.QTimeLine',), + "QGraphicsItemAnimation.setTranslationAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.shearList": (), + "QGraphicsItemAnimation.timeLine": (), + "QGraphicsItemAnimation.translationList": (), + "QGraphicsItemAnimation.verticalScaleAt": ('float',), + "QGraphicsItemAnimation.verticalShearAt": ('float',), + "QGraphicsItemAnimation.xTranslationAt": ('float',), + "QGraphicsItemAnimation.yTranslationAt": ('float',), + + # class PySide2.QtWidgets.QGraphicsItemGroup: + "QGraphicsItemGroup.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.addToGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.boundingRect": (), + "QGraphicsItemGroup.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.opaqueArea": (), + "QGraphicsItemGroup.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItemGroup.removeFromGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.type": (), + + # class PySide2.QtWidgets.QGraphicsLayout: + "QGraphicsLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.activate": (), + "QGraphicsLayout.addChildLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.count": (), + "QGraphicsLayout.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.instantInvalidatePropagation": (), + "QGraphicsLayout.invalidate": (), + "QGraphicsLayout.isActivated": (), + "QGraphicsLayout.itemAt": ('int',), + "QGraphicsLayout.removeAt": ('int',), + "QGraphicsLayout.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.setInstantInvalidatePropagation": ('bool',), + "QGraphicsLayout.updateGeometry": (), + "QGraphicsLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QGraphicsLayoutItem: + "QGraphicsLayoutItem.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'bool'), + "QGraphicsLayoutItem.contentsRect": (), + "QGraphicsLayoutItem.effectiveSizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.geometry": (), + "QGraphicsLayoutItem.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayoutItem.graphicsItem": (), + "QGraphicsLayoutItem.isLayout": (), + "QGraphicsLayoutItem.maximumHeight": (), + "QGraphicsLayoutItem.maximumSize": (), + "QGraphicsLayoutItem.maximumWidth": (), + "QGraphicsLayoutItem.minimumHeight": (), + "QGraphicsLayoutItem.minimumSize": (), + "QGraphicsLayoutItem.minimumWidth": (), + "QGraphicsLayoutItem.ownedByLayout": (), + "QGraphicsLayoutItem.parentLayoutItem": (), + "QGraphicsLayoutItem.preferredHeight": (), + "QGraphicsLayoutItem.preferredSize": (), + "QGraphicsLayoutItem.preferredWidth": (), + "QGraphicsLayoutItem.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLayoutItem.setGraphicsItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLayoutItem.setMaximumHeight": ('float',), + "QGraphicsLayoutItem.setMaximumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMaximumWidth": ('float',), + "QGraphicsLayoutItem.setMinimumHeight": ('float',), + "QGraphicsLayoutItem.setMinimumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMinimumWidth": ('float',), + "QGraphicsLayoutItem.setOwnedByLayout": ('bool',), + "QGraphicsLayoutItem.setParentLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayoutItem.setPreferredHeight": ('float',), + "QGraphicsLayoutItem.setPreferredSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setPreferredWidth": ('float',), + "QGraphicsLayoutItem.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QGraphicsLayoutItem.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.sizePolicy": (), + "QGraphicsLayoutItem.updateGeometry": (), + + # class PySide2.QtWidgets.QGraphicsLineItem: + "QGraphicsLineItem.__init__": [('PySide2.QtCore.QLineF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsLineItem.boundingRect": (), + "QGraphicsLineItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsLineItem.extension": ('Any',), + "QGraphicsLineItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLineItem.line": (), + "QGraphicsLineItem.opaqueArea": (), + "QGraphicsLineItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsLineItem.pen": (), + "QGraphicsLineItem.setLine": [('PySide2.QtCore.QLineF',), ('float', 'float', 'float', 'float')], + "QGraphicsLineItem.setPen": ('PySide2.QtGui.QPen',), + "QGraphicsLineItem.shape": (), + "QGraphicsLineItem.type": (), + + # class PySide2.QtWidgets.QGraphicsLinearLayout: + "QGraphicsLinearLayout.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QGraphicsLayoutItem'), ('PySide2.QtWidgets.QGraphicsLayoutItem',)], + "QGraphicsLinearLayout.addItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.addStretch": ('int',), + "QGraphicsLinearLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.count": (), + "QGraphicsLinearLayout.dump": ('int',), + "QGraphicsLinearLayout.insertItem": ('int', 'PySide2.QtWidgets.QGraphicsLayoutItem'), + "QGraphicsLinearLayout.insertStretch": ('int', 'int'), + "QGraphicsLinearLayout.invalidate": (), + "QGraphicsLinearLayout.itemAt": ('int',), + "QGraphicsLinearLayout.itemSpacing": ('int',), + "QGraphicsLinearLayout.orientation": (), + "QGraphicsLinearLayout.removeAt": ('int',), + "QGraphicsLinearLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.libpyside.Alignment'), + "QGraphicsLinearLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLinearLayout.setItemSpacing": ('int', 'float'), + "QGraphicsLinearLayout.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsLinearLayout.setSpacing": ('float',), + "QGraphicsLinearLayout.setStretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int'), + "QGraphicsLinearLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLinearLayout.spacing": (), + "QGraphicsLinearLayout.stretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + + # class PySide2.QtWidgets.QGraphicsObject: + "QGraphicsObject.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsObject.event": ('PySide2.QtCore.QEvent',), + "QGraphicsObject.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'PySide2.libpyside.GestureFlags'), + "QGraphicsObject.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QGraphicsObject.updateMicroFocus": (), + + # class PySide2.QtWidgets.QGraphicsOpacityEffect: + "QGraphicsOpacityEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsOpacityEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsOpacityEffect.opacity": (), + "QGraphicsOpacityEffect.opacityMask": (), + "QGraphicsOpacityEffect.setOpacity": ('float',), + "QGraphicsOpacityEffect.setOpacityMask": ('PySide2.QtGui.QBrush',), + + # class PySide2.QtWidgets.QGraphicsPathItem: + "QGraphicsPathItem.__init__": [('PySide2.QtGui.QPainterPath', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPathItem.boundingRect": (), + "QGraphicsPathItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPathItem.extension": ('Any',), + "QGraphicsPathItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPathItem.opaqueArea": (), + "QGraphicsPathItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPathItem.path": (), + "QGraphicsPathItem.setPath": ('PySide2.QtGui.QPainterPath',), + "QGraphicsPathItem.shape": (), + "QGraphicsPathItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPixmapItem: + "QGraphicsPixmapItem.__init__": [('PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPixmapItem.boundingRect": (), + "QGraphicsPixmapItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPixmapItem.extension": ('Any',), + "QGraphicsPixmapItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPixmapItem.offset": (), + "QGraphicsPixmapItem.opaqueArea": (), + "QGraphicsPixmapItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPixmapItem.pixmap": (), + "QGraphicsPixmapItem.setOffset": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsPixmapItem.setPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsPixmapItem.setShapeMode": ('PySide2.QtWidgets.QGraphicsPixmapItem.ShapeMode',), + "QGraphicsPixmapItem.setTransformationMode": ('PySide2.QtCore.Qt.TransformationMode',), + "QGraphicsPixmapItem.shape": (), + "QGraphicsPixmapItem.shapeMode": (), + "QGraphicsPixmapItem.transformationMode": (), + "QGraphicsPixmapItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPolygonItem: + "QGraphicsPolygonItem.__init__": [('PySide2.QtGui.QPolygonF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPolygonItem.boundingRect": (), + "QGraphicsPolygonItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPolygonItem.extension": ('Any',), + "QGraphicsPolygonItem.fillRule": (), + "QGraphicsPolygonItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPolygonItem.opaqueArea": (), + "QGraphicsPolygonItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPolygonItem.polygon": (), + "QGraphicsPolygonItem.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QGraphicsPolygonItem.setPolygon": ('PySide2.QtGui.QPolygonF',), + "QGraphicsPolygonItem.shape": (), + "QGraphicsPolygonItem.type": (), + + # class PySide2.QtWidgets.QGraphicsProxyWidget: + "QGraphicsProxyWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.libpyside.WindowFlags'), + "QGraphicsProxyWidget.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsProxyWidget.createProxyForChildWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsProxyWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.focusNextPrevChild": ('bool',), + "QGraphicsProxyWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsProxyWidget.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsProxyWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsProxyWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsProxyWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.newProxyWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsProxyWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsProxyWidget.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsProxyWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsProxyWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsProxyWidget.subWidgetRect": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.type": (), + "QGraphicsProxyWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsProxyWidget.widget": (), + + # class PySide2.QtWidgets.QGraphicsRectItem: + "QGraphicsRectItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsRectItem.boundingRect": (), + "QGraphicsRectItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsRectItem.extension": ('Any',), + "QGraphicsRectItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsRectItem.opaqueArea": (), + "QGraphicsRectItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsRectItem.rect": (), + "QGraphicsRectItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsRectItem.shape": (), + "QGraphicsRectItem.type": (), + + # class PySide2.QtWidgets.QGraphicsRotation: + "QGraphicsRotation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsRotation.angle": (), + "QGraphicsRotation.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsRotation.axis": (), + "QGraphicsRotation.origin": (), + "QGraphicsRotation.setAngle": ('float',), + "QGraphicsRotation.setAxis": [('PySide2.QtCore.Qt.Axis',), ('PySide2.QtGui.QVector3D',)], + "QGraphicsRotation.setOrigin": ('PySide2.QtGui.QVector3D',), + + # class PySide2.QtWidgets.QGraphicsScale: + "QGraphicsScale.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsScale.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsScale.origin": (), + "QGraphicsScale.setOrigin": ('PySide2.QtGui.QVector3D',), + "QGraphicsScale.setXScale": ('float',), + "QGraphicsScale.setYScale": ('float',), + "QGraphicsScale.setZScale": ('float',), + "QGraphicsScale.xScale": (), + "QGraphicsScale.yScale": (), + "QGraphicsScale.zScale": (), + + # class PySide2.QtWidgets.QGraphicsScene: + "QGraphicsScene.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QObject'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.QObject')], + "QGraphicsScene.activePanel": (), + "QGraphicsScene.activeWindow": (), + "QGraphicsScene.addEllipse": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.addLine": [('PySide2.QtCore.QLineF', 'PySide2.QtGui.QPen'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen')], + "QGraphicsScene.addPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsScene.addPolygon": ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addRect": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addSimpleText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QGraphicsScene.advance": (), + "QGraphicsScene.backgroundBrush": (), + "QGraphicsScene.bspTreeDepth": (), + "QGraphicsScene.clear": (), + "QGraphicsScene.clearFocus": (), + "QGraphicsScene.clearSelection": (), + "QGraphicsScene.collidingItems": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsScene.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsScene.createItemGroup": ('list',), + "QGraphicsScene.destroyItemGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsScene.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.event": ('PySide2.QtCore.QEvent',), + "QGraphicsScene.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.focusItem": (), + "QGraphicsScene.focusNextPrevChild": ('bool',), + "QGraphicsScene.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.font": (), + "QGraphicsScene.foregroundBrush": (), + "QGraphicsScene.hasFocus": (), + "QGraphicsScene.height": (), + "QGraphicsScene.helpEvent": ('PySide2.QtWidgets.QGraphicsSceneHelpEvent',), + "QGraphicsScene.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsScene.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsScene.invalidate": [('PySide2.QtCore.QRectF', 'PySide2.libpyside.SceneLayers'), ('float', 'float', 'float', 'float', 'PySide2.libpyside.SceneLayers')], + "QGraphicsScene.isActive": (), + "QGraphicsScene.isSortCacheEnabled": (), + "QGraphicsScene.itemAt": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTransform'), ('float', 'float', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemIndexMethod": (), + "QGraphicsScene.items": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemsBoundingRect": (), + "QGraphicsScene.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.minimumRenderSize": (), + "QGraphicsScene.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseGrabberItem": (), + "QGraphicsScene.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.palette": (), + "QGraphicsScene.removeItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.render": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), + "QGraphicsScene.sceneRect": (), + "QGraphicsScene.selectedItems": (), + "QGraphicsScene.selectionArea": (), + "QGraphicsScene.sendEvent": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.setActivePanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.setActiveWindow": ('PySide2.QtWidgets.QGraphicsWidget',), + "QGraphicsScene.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setBspTreeDepth": ('int',), + "QGraphicsScene.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsScene.setFocusItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.FocusReason'), + "QGraphicsScene.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsScene.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setItemIndexMethod": ('PySide2.QtWidgets.QGraphicsScene.ItemIndexMethod',), + "QGraphicsScene.setMinimumRenderSize": ('float',), + "QGraphicsScene.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsScene.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.setSelectionArea": [('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionOperation', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.setSortCacheEnabled": ('bool',), + "QGraphicsScene.setStickyFocus": ('bool',), + "QGraphicsScene.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsScene.stickyFocus": (), + "QGraphicsScene.style": (), + "QGraphicsScene.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.views": (), + "QGraphicsScene.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsScene.width": (), + + # class PySide2.QtWidgets.QGraphicsSceneContextMenuEvent: + "QGraphicsSceneContextMenuEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneContextMenuEvent.modifiers": (), + "QGraphicsSceneContextMenuEvent.pos": (), + "QGraphicsSceneContextMenuEvent.reason": (), + "QGraphicsSceneContextMenuEvent.scenePos": (), + "QGraphicsSceneContextMenuEvent.screenPos": (), + "QGraphicsSceneContextMenuEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneContextMenuEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setReason": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent.Reason',), + "QGraphicsSceneContextMenuEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneDragDropEvent: + "QGraphicsSceneDragDropEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneDragDropEvent.acceptProposedAction": (), + "QGraphicsSceneDragDropEvent.buttons": (), + "QGraphicsSceneDragDropEvent.dropAction": (), + "QGraphicsSceneDragDropEvent.mimeData": (), + "QGraphicsSceneDragDropEvent.modifiers": (), + "QGraphicsSceneDragDropEvent.pos": (), + "QGraphicsSceneDragDropEvent.possibleActions": (), + "QGraphicsSceneDragDropEvent.proposedAction": (), + "QGraphicsSceneDragDropEvent.scenePos": (), + "QGraphicsSceneDragDropEvent.screenPos": (), + "QGraphicsSceneDragDropEvent.setButtons": ('PySide2.libpyside.MouseButtons',), + "QGraphicsSceneDragDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneDragDropEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setPossibleActions": ('PySide2.libpyside.DropActions',), + "QGraphicsSceneDragDropEvent.setProposedAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneDragDropEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneEvent: + "QGraphicsSceneEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneEvent.widget": (), + + # class PySide2.QtWidgets.QGraphicsSceneHelpEvent: + "QGraphicsSceneHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHelpEvent.scenePos": (), + "QGraphicsSceneHelpEvent.screenPos": (), + "QGraphicsSceneHelpEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHelpEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneHoverEvent: + "QGraphicsSceneHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHoverEvent.lastPos": (), + "QGraphicsSceneHoverEvent.lastScenePos": (), + "QGraphicsSceneHoverEvent.lastScreenPos": (), + "QGraphicsSceneHoverEvent.modifiers": (), + "QGraphicsSceneHoverEvent.pos": (), + "QGraphicsSceneHoverEvent.scenePos": (), + "QGraphicsSceneHoverEvent.screenPos": (), + "QGraphicsSceneHoverEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneHoverEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneHoverEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneMouseEvent: + "QGraphicsSceneMouseEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneMouseEvent.button": (), + "QGraphicsSceneMouseEvent.buttonDownPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScenePos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttons": (), + "QGraphicsSceneMouseEvent.flags": (), + "QGraphicsSceneMouseEvent.lastPos": (), + "QGraphicsSceneMouseEvent.lastScenePos": (), + "QGraphicsSceneMouseEvent.lastScreenPos": (), + "QGraphicsSceneMouseEvent.modifiers": (), + "QGraphicsSceneMouseEvent.pos": (), + "QGraphicsSceneMouseEvent.scenePos": (), + "QGraphicsSceneMouseEvent.screenPos": (), + "QGraphicsSceneMouseEvent.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.setButtonDownPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScenePos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPoint'), + "QGraphicsSceneMouseEvent.setButtons": ('PySide2.libpyside.MouseButtons',), + "QGraphicsSceneMouseEvent.setFlags": ('PySide2.libpyside.MouseEventFlags',), + "QGraphicsSceneMouseEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneMouseEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setSource": ('PySide2.QtCore.Qt.MouseEventSource',), + "QGraphicsSceneMouseEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneMoveEvent: + "QGraphicsSceneMoveEvent.__init__": (), + "QGraphicsSceneMoveEvent.newPos": (), + "QGraphicsSceneMoveEvent.oldPos": (), + "QGraphicsSceneMoveEvent.setNewPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMoveEvent.setOldPos": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QGraphicsSceneResizeEvent: + "QGraphicsSceneResizeEvent.__init__": (), + "QGraphicsSceneResizeEvent.newSize": (), + "QGraphicsSceneResizeEvent.oldSize": (), + "QGraphicsSceneResizeEvent.setNewSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsSceneResizeEvent.setOldSize": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtWidgets.QGraphicsSceneWheelEvent: + "QGraphicsSceneWheelEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneWheelEvent.buttons": (), + "QGraphicsSceneWheelEvent.delta": (), + "QGraphicsSceneWheelEvent.modifiers": (), + "QGraphicsSceneWheelEvent.orientation": (), + "QGraphicsSceneWheelEvent.pos": (), + "QGraphicsSceneWheelEvent.scenePos": (), + "QGraphicsSceneWheelEvent.screenPos": (), + "QGraphicsSceneWheelEvent.setButtons": ('PySide2.libpyside.MouseButtons',), + "QGraphicsSceneWheelEvent.setDelta": ('int',), + "QGraphicsSceneWheelEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneWheelEvent.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsSceneWheelEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSimpleTextItem: + "QGraphicsSimpleTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSimpleTextItem.boundingRect": (), + "QGraphicsSimpleTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsSimpleTextItem.extension": ('Any',), + "QGraphicsSimpleTextItem.font": (), + "QGraphicsSimpleTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsSimpleTextItem.opaqueArea": (), + "QGraphicsSimpleTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSimpleTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsSimpleTextItem.setText": ('str',), + "QGraphicsSimpleTextItem.shape": (), + "QGraphicsSimpleTextItem.text": (), + "QGraphicsSimpleTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTextItem: + "QGraphicsTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsTextItem.adjustSize": (), + "QGraphicsTextItem.boundingRect": (), + "QGraphicsTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsTextItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsTextItem.defaultTextColor": (), + "QGraphicsTextItem.document": (), + "QGraphicsTextItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.extension": ('Any',), + "QGraphicsTextItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.font": (), + "QGraphicsTextItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsTextItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsTextItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.opaqueArea": (), + "QGraphicsTextItem.openExternalLinks": (), + "QGraphicsTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsTextItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsTextItem.setDefaultTextColor": ('PySide2.QtGui.QColor',), + "QGraphicsTextItem.setDocument": ('PySide2.QtGui.QTextDocument',), + "QGraphicsTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsTextItem.setHtml": ('str',), + "QGraphicsTextItem.setOpenExternalLinks": ('bool',), + "QGraphicsTextItem.setPlainText": ('str',), + "QGraphicsTextItem.setTabChangesFocus": ('bool',), + "QGraphicsTextItem.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QGraphicsTextItem.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QGraphicsTextItem.setTextWidth": ('float',), + "QGraphicsTextItem.shape": (), + "QGraphicsTextItem.tabChangesFocus": (), + "QGraphicsTextItem.textCursor": (), + "QGraphicsTextItem.textInteractionFlags": (), + "QGraphicsTextItem.textWidth": (), + "QGraphicsTextItem.toHtml": (), + "QGraphicsTextItem.toPlainText": (), + "QGraphicsTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTransform: + "QGraphicsTransform.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsTransform.update": (), + + # class PySide2.QtWidgets.QGraphicsView: + "QGraphicsView.__init__": [('PySide2.QtWidgets.QGraphicsScene', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QGraphicsView.alignment": (), + "QGraphicsView.backgroundBrush": (), + "QGraphicsView.cacheMode": (), + "QGraphicsView.centerOn": [('PySide2.QtCore.QPointF',), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float')], + "QGraphicsView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QGraphicsView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QGraphicsView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QGraphicsView.dragMode": (), + "QGraphicsView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QGraphicsView.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawItems": ('PySide2.QtGui.QPainter', 'int', 'List[PySide2.QtWidgets.QGraphicsItem]', 'List[PySide2.QtWidgets.QStyleOptionGraphicsItem]'), + "QGraphicsView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QGraphicsView.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('PySide2.QtWidgets.QGraphicsItem', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsView.event": ('PySide2.QtCore.QEvent',), + "QGraphicsView.fitInView": [('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.focusNextPrevChild": ('bool',), + "QGraphicsView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.foregroundBrush": (), + "QGraphicsView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsView.invalidateScene": ('PySide2.QtCore.QRectF', 'PySide2.libpyside.SceneLayers'), + "QGraphicsView.isInteractive": (), + "QGraphicsView.isTransformed": (), + "QGraphicsView.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QGraphicsView.items": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ItemSelectionMode')], + "QGraphicsView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsView.mapToScene": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('int', 'int'), ('int', 'int', 'int', 'int')], + "QGraphicsView.matrix": (), + "QGraphicsView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.optimizationFlags": (), + "QGraphicsView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGraphicsView.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'PySide2.libpyside.RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.renderHints": (), + "QGraphicsView.resetCachedContent": (), + "QGraphicsView.resetMatrix": (), + "QGraphicsView.resetTransform": (), + "QGraphicsView.resizeAnchor": (), + "QGraphicsView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGraphicsView.rotate": ('float',), + "QGraphicsView.rubberBandRect": (), + "QGraphicsView.rubberBandSelectionMode": (), + "QGraphicsView.scale": ('float', 'float'), + "QGraphicsView.scene": (), + "QGraphicsView.sceneRect": (), + "QGraphicsView.scrollContentsBy": ('int', 'int'), + "QGraphicsView.setAlignment": ('PySide2.libpyside.Alignment',), + "QGraphicsView.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setCacheMode": ('PySide2.libpyside.CacheMode',), + "QGraphicsView.setDragMode": ('PySide2.QtWidgets.QGraphicsView.DragMode',), + "QGraphicsView.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setInteractive": ('bool',), + "QGraphicsView.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsView.setOptimizationFlag": ('PySide2.QtWidgets.QGraphicsView.OptimizationFlag', 'bool'), + "QGraphicsView.setOptimizationFlags": ('PySide2.libpyside.OptimizationFlags',), + "QGraphicsView.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QGraphicsView.setRenderHints": ('PySide2.libpyside.RenderHints',), + "QGraphicsView.setResizeAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setRubberBandSelectionMode": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsView.setScene": ('PySide2.QtWidgets.QGraphicsScene',), + "QGraphicsView.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsView.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsView.setTransformationAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setViewportUpdateMode": ('PySide2.QtWidgets.QGraphicsView.ViewportUpdateMode',), + "QGraphicsView.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QGraphicsView.shear": ('float', 'float'), + "QGraphicsView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsView.sizeHint": (), + "QGraphicsView.transform": (), + "QGraphicsView.transformationAnchor": (), + "QGraphicsView.translate": ('float', 'float'), + "QGraphicsView.updateScene": ('list',), + "QGraphicsView.updateSceneRect": ('PySide2.QtCore.QRectF',), + "QGraphicsView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsView.viewportTransform": (), + "QGraphicsView.viewportUpdateMode": (), + "QGraphicsView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QGraphicsWidget: + "QGraphicsWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.libpyside.WindowFlags'), + "QGraphicsWidget.actions": (), + "QGraphicsWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.addActions": ('list',), + "QGraphicsWidget.adjustSize": (), + "QGraphicsWidget.autoFillBackground": (), + "QGraphicsWidget.boundingRect": (), + "QGraphicsWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.close": (), + "QGraphicsWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QGraphicsWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusNextPrevChild": ('bool',), + "QGraphicsWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusPolicy": (), + "QGraphicsWidget.focusWidget": (), + "QGraphicsWidget.font": (), + "QGraphicsWidget.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.getWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.grabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QGraphicsWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QGraphicsWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QGraphicsWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QGraphicsWidget.isActiveWindow": (), + "QGraphicsWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsWidget.layout": (), + "QGraphicsWidget.layoutDirection": (), + "QGraphicsWidget.moveEvent": ('PySide2.QtWidgets.QGraphicsSceneMoveEvent',), + "QGraphicsWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.paintWindowFrame": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.palette": (), + "QGraphicsWidget.polishEvent": (), + "QGraphicsWidget.propertyChange": ('str', 'Any'), + "QGraphicsWidget.rect": (), + "QGraphicsWidget.releaseShortcut": ('int',), + "QGraphicsWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.resize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsWidget.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QGraphicsWidget.setAutoFillBackground": ('bool',), + "QGraphicsWidget.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QGraphicsWidget.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsWidget.setGeometry": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsWidget.setLayout": ('PySide2.QtWidgets.QGraphicsLayout',), + "QGraphicsWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGraphicsWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QGraphicsWidget.setShortcutEnabled": ('int', 'bool'), + "QGraphicsWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsWidget.setTabOrder": ('PySide2.QtWidgets.QGraphicsWidget', 'PySide2.QtWidgets.QGraphicsWidget'), + "QGraphicsWidget.setWindowFlags": ('PySide2.libpyside.WindowFlags',), + "QGraphicsWidget.setWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setWindowTitle": ('str',), + "QGraphicsWidget.shape": (), + "QGraphicsWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsWidget.size": (), + "QGraphicsWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsWidget.style": (), + "QGraphicsWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QGraphicsWidget.type": (), + "QGraphicsWidget.ungrabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.unsetLayoutDirection": (), + "QGraphicsWidget.unsetWindowFrameMargins": (), + "QGraphicsWidget.updateGeometry": (), + "QGraphicsWidget.windowFlags": (), + "QGraphicsWidget.windowFrameEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.windowFrameGeometry": (), + "QGraphicsWidget.windowFrameRect": (), + "QGraphicsWidget.windowFrameSectionAt": ('PySide2.QtCore.QPointF',), + "QGraphicsWidget.windowTitle": (), + "QGraphicsWidget.windowType": (), + + # class PySide2.QtWidgets.QGridLayout: + "QGridLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QGridLayout.addItem": [('PySide2.QtWidgets.QLayoutItem',), ('PySide2.QtWidgets.QLayoutItem', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment')], + "QGridLayout.addLayout": [('PySide2.QtWidgets.QLayout', 'int', 'int', 'PySide2.libpyside.Alignment'), ('PySide2.QtWidgets.QLayout', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment')], + "QGridLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'PySide2.libpyside.Alignment'), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment')], + "QGridLayout.cellRect": ('int', 'int'), + "QGridLayout.columnCount": (), + "QGridLayout.columnMinimumWidth": ('int',), + "QGridLayout.columnStretch": ('int',), + "QGridLayout.count": (), + "QGridLayout.expandingDirections": (), + "QGridLayout.getItemPosition": ('int', 'int', 'int', 'int', 'int'), + "QGridLayout.hasHeightForWidth": (), + "QGridLayout.heightForWidth": ('int',), + "QGridLayout.horizontalSpacing": (), + "QGridLayout.invalidate": (), + "QGridLayout.itemAt": ('int',), + "QGridLayout.itemAtPosition": ('int', 'int'), + "QGridLayout.maximumSize": (), + "QGridLayout.minimumHeightForWidth": ('int',), + "QGridLayout.minimumSize": (), + "QGridLayout.originCorner": (), + "QGridLayout.rowCount": (), + "QGridLayout.rowMinimumHeight": ('int',), + "QGridLayout.rowStretch": ('int',), + "QGridLayout.setColumnMinimumWidth": ('int', 'int'), + "QGridLayout.setColumnStretch": ('int', 'int'), + "QGridLayout.setDefaultPositioning": ('int', 'PySide2.QtCore.Qt.Orientation'), + "QGridLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QGridLayout.setHorizontalSpacing": ('int',), + "QGridLayout.setOriginCorner": ('PySide2.QtCore.Qt.Corner',), + "QGridLayout.setRowMinimumHeight": ('int', 'int'), + "QGridLayout.setRowStretch": ('int', 'int'), + "QGridLayout.setSpacing": ('int',), + "QGridLayout.setVerticalSpacing": ('int',), + "QGridLayout.sizeHint": (), + "QGridLayout.spacing": (), + "QGridLayout.takeAt": ('int',), + "QGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGroupBox: + "QGroupBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QGroupBox.alignment": (), + "QGroupBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QGroupBox.childEvent": ('PySide2.QtCore.QChildEvent',), + "QGroupBox.event": ('PySide2.QtCore.QEvent',), + "QGroupBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGroupBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionGroupBox',), + "QGroupBox.isCheckable": (), + "QGroupBox.isChecked": (), + "QGroupBox.isFlat": (), + "QGroupBox.minimumSizeHint": (), + "QGroupBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGroupBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGroupBox.setAlignment": ('int',), + "QGroupBox.setCheckable": ('bool',), + "QGroupBox.setChecked": ('bool',), + "QGroupBox.setFlat": ('bool',), + "QGroupBox.setTitle": ('str',), + "QGroupBox.title": (), + + # class PySide2.QtWidgets.QHBoxLayout: + "QHBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QHeaderView: + "QHeaderView.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), + "QHeaderView.cascadingSectionResizes": (), + "QHeaderView.count": (), + "QHeaderView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QHeaderView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QHeaderView.defaultAlignment": (), + "QHeaderView.defaultSectionSize": (), + "QHeaderView.doItemsLayout": (), + "QHeaderView.event": ('PySide2.QtCore.QEvent',), + "QHeaderView.headerDataChanged": ('PySide2.QtCore.Qt.Orientation', 'int', 'int'), + "QHeaderView.hiddenSectionCount": (), + "QHeaderView.hideSection": ('int',), + "QHeaderView.highlightSections": (), + "QHeaderView.horizontalOffset": (), + "QHeaderView.indexAt": ('PySide2.QtCore.QPoint',), + "QHeaderView.initStyleOption": [('PySide2.QtWidgets.QStyleOptionFrame',), ('PySide2.QtWidgets.QStyleOptionHeader',)], + "QHeaderView.initialize": (), + "QHeaderView.initializeSections": [(), ('int', 'int')], + "QHeaderView.isFirstSectionMovable": (), + "QHeaderView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.isSectionHidden": ('int',), + "QHeaderView.isSortIndicatorShown": (), + "QHeaderView.length": (), + "QHeaderView.logicalIndex": ('int',), + "QHeaderView.logicalIndexAt": [('PySide2.QtCore.QPoint',), ('int',), ('int', 'int')], + "QHeaderView.maximumSectionSize": (), + "QHeaderView.minimumSectionSize": (), + "QHeaderView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QHeaderView.moveSection": ('int', 'int'), + "QHeaderView.offset": (), + "QHeaderView.orientation": (), + "QHeaderView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QHeaderView.paintSection": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int'), + "QHeaderView.reset": (), + "QHeaderView.resetDefaultSectionSize": (), + "QHeaderView.resizeContentsPrecision": (), + "QHeaderView.resizeSection": ('int', 'int'), + "QHeaderView.resizeSections": [(), ('PySide2.QtWidgets.QHeaderView.ResizeMode',)], + "QHeaderView.restoreState": ('PySide2.QtCore.QByteArray',), + "QHeaderView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.saveState": (), + "QHeaderView.scrollContentsBy": ('int', 'int'), + "QHeaderView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QHeaderView.sectionPosition": ('int',), + "QHeaderView.sectionResizeMode": ('int',), + "QHeaderView.sectionSize": ('int',), + "QHeaderView.sectionSizeFromContents": ('int',), + "QHeaderView.sectionSizeHint": ('int',), + "QHeaderView.sectionViewportPosition": ('int',), + "QHeaderView.sectionsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsClickable": (), + "QHeaderView.sectionsHidden": (), + "QHeaderView.sectionsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsMovable": (), + "QHeaderView.sectionsMoved": (), + "QHeaderView.setCascadingSectionResizes": ('bool',), + "QHeaderView.setDefaultAlignment": ('PySide2.libpyside.Alignment',), + "QHeaderView.setDefaultSectionSize": ('int',), + "QHeaderView.setFirstSectionMovable": ('bool',), + "QHeaderView.setHighlightSections": ('bool',), + "QHeaderView.setMaximumSectionSize": ('int',), + "QHeaderView.setMinimumSectionSize": ('int',), + "QHeaderView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QHeaderView.setOffset": ('int',), + "QHeaderView.setOffsetToLastSection": (), + "QHeaderView.setOffsetToSectionPosition": ('int',), + "QHeaderView.setResizeContentsPrecision": ('int',), + "QHeaderView.setSectionHidden": ('int', 'bool'), + "QHeaderView.setSectionResizeMode": [('PySide2.QtWidgets.QHeaderView.ResizeMode',), ('int', 'PySide2.QtWidgets.QHeaderView.ResizeMode')], + "QHeaderView.setSectionsClickable": ('bool',), + "QHeaderView.setSectionsMovable": ('bool',), + "QHeaderView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QHeaderView.setSortIndicator": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QHeaderView.setSortIndicatorShown": ('bool',), + "QHeaderView.setStretchLastSection": ('bool',), + "QHeaderView.setVisible": ('bool',), + "QHeaderView.showSection": ('int',), + "QHeaderView.sizeHint": (), + "QHeaderView.sortIndicatorOrder": (), + "QHeaderView.sortIndicatorSection": (), + "QHeaderView.stretchLastSection": (), + "QHeaderView.stretchSectionCount": (), + "QHeaderView.swapSections": ('int', 'int'), + "QHeaderView.updateGeometries": (), + "QHeaderView.updateSection": ('int',), + "QHeaderView.verticalOffset": (), + "QHeaderView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QHeaderView.visualIndex": ('int',), + "QHeaderView.visualIndexAt": ('int',), + "QHeaderView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QInputDialog: + "QInputDialog.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QInputDialog.cancelButtonText": (), + "QInputDialog.comboBoxItems": (), + "QInputDialog.done": ('int',), + "QInputDialog.doubleDecimals": (), + "QInputDialog.doubleMaximum": (), + "QInputDialog.doubleMinimum": (), + "QInputDialog.doubleStep": (), + "QInputDialog.doubleValue": (), + "QInputDialog.getDouble": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'float', 'float', 'float', 'int', 'bool', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'float', 'float', 'float', 'int', 'bool', 'PySide2.libpyside.WindowFlags', 'float')], + "QInputDialog.getInt": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'int', 'int', 'int', 'int', 'bool', 'PySide2.libpyside.WindowFlags'), + "QInputDialog.getItem": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'List[str]', 'int', 'bool', 'bool', 'PySide2.libpyside.WindowFlags', 'PySide2.libpyside.InputMethodHints'), + "QInputDialog.getMultiLineText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'bool', 'PySide2.libpyside.WindowFlags', 'PySide2.libpyside.InputMethodHints'), + "QInputDialog.getText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QLineEdit.EchoMode', 'str', 'bool', 'PySide2.libpyside.WindowFlags', 'PySide2.libpyside.InputMethodHints'), + "QInputDialog.inputMode": (), + "QInputDialog.intMaximum": (), + "QInputDialog.intMinimum": (), + "QInputDialog.intStep": (), + "QInputDialog.intValue": (), + "QInputDialog.isComboBoxEditable": (), + "QInputDialog.labelText": (), + "QInputDialog.minimumSizeHint": (), + "QInputDialog.okButtonText": (), + "QInputDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QInputDialog.setCancelButtonText": ('str',), + "QInputDialog.setComboBoxEditable": ('bool',), + "QInputDialog.setComboBoxItems": ('List[str]',), + "QInputDialog.setDoubleDecimals": ('int',), + "QInputDialog.setDoubleMaximum": ('float',), + "QInputDialog.setDoubleMinimum": ('float',), + "QInputDialog.setDoubleRange": ('float', 'float'), + "QInputDialog.setDoubleStep": ('float',), + "QInputDialog.setDoubleValue": ('float',), + "QInputDialog.setInputMode": ('PySide2.QtWidgets.QInputDialog.InputMode',), + "QInputDialog.setIntMaximum": ('int',), + "QInputDialog.setIntMinimum": ('int',), + "QInputDialog.setIntRange": ('int', 'int'), + "QInputDialog.setIntStep": ('int',), + "QInputDialog.setIntValue": ('int',), + "QInputDialog.setLabelText": ('str',), + "QInputDialog.setOkButtonText": ('str',), + "QInputDialog.setOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption', 'bool'), + "QInputDialog.setTextEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QInputDialog.setTextValue": ('str',), + "QInputDialog.setVisible": ('bool',), + "QInputDialog.sizeHint": (), + "QInputDialog.testOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption',), + "QInputDialog.textEchoMode": (), + "QInputDialog.textValue": (), + + # class PySide2.QtWidgets.QItemDelegate: + "QItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.decoration": ('PySide2.QtWidgets.QStyleOptionViewItem', 'Any'), + "QItemDelegate.doCheck": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'Any'), + "QItemDelegate.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.drawCheck": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.CheckState'), + "QItemDelegate.drawDecoration": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), + "QItemDelegate.drawDisplay": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'str'), + "QItemDelegate.drawFocus": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect'), + "QItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QItemDelegate.hasClipping": (), + "QItemDelegate.itemEditorFactory": (), + "QItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.rect": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex', 'int'), + "QItemDelegate.setClipping": ('bool',), + "QItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setOptions": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QStyleOptionViewItem'), + "QItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.textRectangle": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QFont', 'str'), + "QItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QItemEditorCreatorBase: + "QItemEditorCreatorBase.__init__": (), + "QItemEditorCreatorBase.createWidget": ('PySide2.QtWidgets.QWidget',), + "QItemEditorCreatorBase.valuePropertyName": (), + + # class PySide2.QtWidgets.QItemEditorFactory: + "QItemEditorFactory.__init__": (), + "QItemEditorFactory.createEditor": ('int', 'PySide2.QtWidgets.QWidget'), + "QItemEditorFactory.defaultFactory": (), + "QItemEditorFactory.registerEditor": ('int', 'PySide2.QtWidgets.QItemEditorCreatorBase'), + "QItemEditorFactory.setDefaultFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemEditorFactory.valuePropertyName": ('int',), + + # class PySide2.QtWidgets.QKeyEventTransition: + "QKeyEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'int', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QKeyEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.key": (), + "QKeyEventTransition.modifierMask": (), + "QKeyEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.setKey": ('int',), + "QKeyEventTransition.setModifierMask": ('PySide2.libpyside.KeyboardModifiers',), + + # class PySide2.QtWidgets.QKeySequenceEdit: + "QKeySequenceEdit.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QKeySequenceEdit.clear": (), + "QKeySequenceEdit.event": ('PySide2.QtCore.QEvent',), + "QKeySequenceEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keySequence": (), + "QKeySequenceEdit.setKeySequence": ('PySide2.QtGui.QKeySequence',), + "QKeySequenceEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QLCDNumber: + "QLCDNumber.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'PySide2.QtWidgets.QWidget')], + "QLCDNumber.checkOverflow": [('float',), ('int',)], + "QLCDNumber.digitCount": (), + "QLCDNumber.display": [('float',), ('int',), ('str',)], + "QLCDNumber.event": ('PySide2.QtCore.QEvent',), + "QLCDNumber.intValue": (), + "QLCDNumber.mode": (), + "QLCDNumber.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLCDNumber.segmentStyle": (), + "QLCDNumber.setBinMode": (), + "QLCDNumber.setDecMode": (), + "QLCDNumber.setDigitCount": ('int',), + "QLCDNumber.setHexMode": (), + "QLCDNumber.setMode": ('PySide2.QtWidgets.QLCDNumber.Mode',), + "QLCDNumber.setOctMode": (), + "QLCDNumber.setSegmentStyle": ('PySide2.QtWidgets.QLCDNumber.SegmentStyle',), + "QLCDNumber.setSmallDecimalPoint": ('bool',), + "QLCDNumber.sizeHint": (), + "QLCDNumber.smallDecimalPoint": (), + "QLCDNumber.value": (), + + # class PySide2.QtWidgets.QLabel: + "QLabel.__init__": [('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QLabel.alignment": (), + "QLabel.buddy": (), + "QLabel.changeEvent": ('PySide2.QtCore.QEvent',), + "QLabel.clear": (), + "QLabel.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLabel.event": ('PySide2.QtCore.QEvent',), + "QLabel.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.focusNextPrevChild": ('bool',), + "QLabel.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.hasScaledContents": (), + "QLabel.hasSelectedText": (), + "QLabel.heightForWidth": ('int',), + "QLabel.indent": (), + "QLabel.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLabel.margin": (), + "QLabel.minimumSizeHint": (), + "QLabel.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.movie": (), + "QLabel.openExternalLinks": (), + "QLabel.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLabel.picture": (), + "QLabel.pixmap": (), + "QLabel.selectedText": (), + "QLabel.selectionStart": (), + "QLabel.setAlignment": ('PySide2.libpyside.Alignment',), + "QLabel.setBuddy": ('PySide2.QtWidgets.QWidget',), + "QLabel.setIndent": ('int',), + "QLabel.setMargin": ('int',), + "QLabel.setMovie": ('PySide2.QtGui.QMovie',), + "QLabel.setNum": [('float',), ('int',)], + "QLabel.setOpenExternalLinks": ('bool',), + "QLabel.setPicture": ('PySide2.QtGui.QPicture',), + "QLabel.setPixmap": ('PySide2.QtGui.QPixmap',), + "QLabel.setScaledContents": ('bool',), + "QLabel.setSelection": ('int', 'int'), + "QLabel.setText": ('str',), + "QLabel.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QLabel.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QLabel.setWordWrap": ('bool',), + "QLabel.sizeHint": (), + "QLabel.text": (), + "QLabel.textFormat": (), + "QLabel.textInteractionFlags": (), + "QLabel.wordWrap": (), + + # class PySide2.QtWidgets.QLayout: + "QLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QLayout.activate": (), + "QLayout.addChildLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.addChildWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.adoptLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.alignmentRect": ('PySide2.QtCore.QRect',), + "QLayout.childEvent": ('PySide2.QtCore.QChildEvent',), + "QLayout.closestAcceptableSize": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QSize'), + "QLayout.contentsMargins": (), + "QLayout.contentsRect": (), + "QLayout.controlTypes": (), + "QLayout.count": (), + "QLayout.expandingDirections": (), + "QLayout.geometry": (), + "QLayout.getContentsMargins": ('int', 'int', 'int', 'int'), + "QLayout.indexOf": ('PySide2.QtWidgets.QWidget',), + "QLayout.invalidate": (), + "QLayout.isEmpty": (), + "QLayout.isEnabled": (), + "QLayout.itemAt": ('int',), + "QLayout.layout": (), + "QLayout.margin": (), + "QLayout.maximumSize": (), + "QLayout.menuBar": (), + "QLayout.minimumSize": (), + "QLayout.parentWidget": (), + "QLayout.removeItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.replaceWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.FindChildOptions'), + "QLayout.setAlignment": [('PySide2.QtWidgets.QLayout', 'PySide2.libpyside.Alignment'), ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.Alignment'), ('PySide2.libpyside.Alignment',)], + "QLayout.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLayout.setEnabled": ('bool',), + "QLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QLayout.setMargin": ('int',), + "QLayout.setMenuBar": ('PySide2.QtWidgets.QWidget',), + "QLayout.setSizeConstraint": ('PySide2.QtWidgets.QLayout.SizeConstraint',), + "QLayout.setSpacing": ('int',), + "QLayout.sizeConstraint": (), + "QLayout.spacing": (), + "QLayout.takeAt": ('int',), + "QLayout.totalHeightForWidth": ('int',), + "QLayout.totalMaximumSize": (), + "QLayout.totalMinimumSize": (), + "QLayout.totalSizeHint": (), + "QLayout.update": (), + "QLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QLayoutItem: + "QLayoutItem.__init__": ('PySide2.libpyside.Alignment',), + "QLayoutItem.alignment": (), + "QLayoutItem.controlTypes": (), + "QLayoutItem.expandingDirections": (), + "QLayoutItem.geometry": (), + "QLayoutItem.hasHeightForWidth": (), + "QLayoutItem.heightForWidth": ('int',), + "QLayoutItem.invalidate": (), + "QLayoutItem.isEmpty": (), + "QLayoutItem.layout": (), + "QLayoutItem.maximumSize": (), + "QLayoutItem.minimumHeightForWidth": ('int',), + "QLayoutItem.minimumSize": (), + "QLayoutItem.setAlignment": ('PySide2.libpyside.Alignment',), + "QLayoutItem.setGeometry": ('PySide2.QtCore.QRect',), + "QLayoutItem.sizeHint": (), + "QLayoutItem.spacerItem": (), + "QLayoutItem.widget": (), + + # class PySide2.QtWidgets.QLineEdit: + "QLineEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QLineEdit.addAction": [('PySide2.QtGui.QIcon', 'PySide2.QtWidgets.QLineEdit.ActionPosition'), ('PySide2.QtWidgets.QAction',), ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QLineEdit.ActionPosition')], + "QLineEdit.alignment": (), + "QLineEdit.backspace": (), + "QLineEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QLineEdit.clear": (), + "QLineEdit.completer": (), + "QLineEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLineEdit.copy": (), + "QLineEdit.createStandardContextMenu": (), + "QLineEdit.cursorBackward": ('bool', 'int'), + "QLineEdit.cursorForward": ('bool', 'int'), + "QLineEdit.cursorMoveStyle": (), + "QLineEdit.cursorPosition": (), + "QLineEdit.cursorPositionAt": ('PySide2.QtCore.QPoint',), + "QLineEdit.cursorRect": (), + "QLineEdit.cursorWordBackward": ('bool',), + "QLineEdit.cursorWordForward": ('bool',), + "QLineEdit.cut": (), + "QLineEdit.del_": (), + "QLineEdit.deselect": (), + "QLineEdit.displayText": (), + "QLineEdit.dragEnabled": (), + "QLineEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QLineEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QLineEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QLineEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QLineEdit.echoMode": (), + "QLineEdit.end": ('bool',), + "QLineEdit.event": ('PySide2.QtCore.QEvent',), + "QLineEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.getTextMargins": ('int', 'int', 'int', 'int'), + "QLineEdit.hasAcceptableInput": (), + "QLineEdit.hasFrame": (), + "QLineEdit.hasSelectedText": (), + "QLineEdit.home": ('bool',), + "QLineEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QLineEdit.inputMask": (), + "QLineEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QLineEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QLineEdit.insert": ('str',), + "QLineEdit.isClearButtonEnabled": (), + "QLineEdit.isModified": (), + "QLineEdit.isReadOnly": (), + "QLineEdit.isRedoAvailable": (), + "QLineEdit.isUndoAvailable": (), + "QLineEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLineEdit.maxLength": (), + "QLineEdit.minimumSizeHint": (), + "QLineEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLineEdit.paste": (), + "QLineEdit.placeholderText": (), + "QLineEdit.redo": (), + "QLineEdit.selectAll": (), + "QLineEdit.selectedText": (), + "QLineEdit.selectionEnd": (), + "QLineEdit.selectionLength": (), + "QLineEdit.selectionStart": (), + "QLineEdit.setAlignment": ('PySide2.libpyside.Alignment',), + "QLineEdit.setClearButtonEnabled": ('bool',), + "QLineEdit.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QLineEdit.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QLineEdit.setCursorPosition": ('int',), + "QLineEdit.setDragEnabled": ('bool',), + "QLineEdit.setEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QLineEdit.setFrame": ('bool',), + "QLineEdit.setInputMask": ('str',), + "QLineEdit.setMaxLength": ('int',), + "QLineEdit.setModified": ('bool',), + "QLineEdit.setPlaceholderText": ('str',), + "QLineEdit.setReadOnly": ('bool',), + "QLineEdit.setSelection": ('int', 'int'), + "QLineEdit.setText": ('str',), + "QLineEdit.setTextMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLineEdit.setValidator": ('PySide2.QtGui.QValidator',), + "QLineEdit.sizeHint": (), + "QLineEdit.text": (), + "QLineEdit.textMargins": (), + "QLineEdit.undo": (), + "QLineEdit.validator": (), + + # class PySide2.QtWidgets.QListView: + "QListView.__init__": ('PySide2.QtWidgets.QWidget',), + "QListView.batchSize": (), + "QListView.clearPropertyFlags": (), + "QListView.contentsSize": (), + "QListView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QListView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QListView.doItemsLayout": (), + "QListView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QListView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QListView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListView.event": ('PySide2.QtCore.QEvent',), + "QListView.flow": (), + "QListView.gridSize": (), + "QListView.horizontalOffset": (), + "QListView.indexAt": ('PySide2.QtCore.QPoint',), + "QListView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QListView.isRowHidden": ('int',), + "QListView.isSelectionRectVisible": (), + "QListView.isWrapping": (), + "QListView.layoutMode": (), + "QListView.modelColumn": (), + "QListView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QListView.movement": (), + "QListView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QListView.rectForIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.reset": (), + "QListView.resizeContents": ('int', 'int'), + "QListView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QListView.resizeMode": (), + "QListView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.scrollContentsBy": ('int', 'int'), + "QListView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListView.selectedIndexes": (), + "QListView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QListView.setBatchSize": ('int',), + "QListView.setFlow": ('PySide2.QtWidgets.QListView.Flow',), + "QListView.setGridSize": ('PySide2.QtCore.QSize',), + "QListView.setLayoutMode": ('PySide2.QtWidgets.QListView.LayoutMode',), + "QListView.setModelColumn": ('int',), + "QListView.setMovement": ('PySide2.QtWidgets.QListView.Movement',), + "QListView.setPositionForIndex": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QModelIndex'), + "QListView.setResizeMode": ('PySide2.QtWidgets.QListView.ResizeMode',), + "QListView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.setRowHidden": ('int', 'bool'), + "QListView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QListView.setSelectionRectVisible": ('bool',), + "QListView.setSpacing": ('int',), + "QListView.setUniformItemSizes": ('bool',), + "QListView.setViewMode": ('PySide2.QtWidgets.QListView.ViewMode',), + "QListView.setWordWrap": ('bool',), + "QListView.setWrapping": ('bool',), + "QListView.spacing": (), + "QListView.startDrag": ('PySide2.libpyside.DropActions',), + "QListView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QListView.uniformItemSizes": (), + "QListView.updateGeometries": (), + "QListView.verticalOffset": (), + "QListView.viewMode": (), + "QListView.viewOptions": (), + "QListView.viewportSizeHint": (), + "QListView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QListView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QListView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QListView.wordWrap": (), + + # class PySide2.QtWidgets.QListWidget: + "QListWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QListWidget.addItem": [('PySide2.QtWidgets.QListWidgetItem',), ('str',)], + "QListWidget.addItems": ('List[str]',), + "QListWidget.clear": (), + "QListWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.count": (), + "QListWidget.currentItem": (), + "QListWidget.currentRow": (), + "QListWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListWidget.dropMimeData": ('int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QListWidget.editItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.event": ('PySide2.QtCore.QEvent',), + "QListWidget.findItems": ('str', 'PySide2.libpyside.MatchFlags'), + "QListWidget.indexFromItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.insertItem": [('int', 'PySide2.QtWidgets.QListWidgetItem'), ('int', 'str')], + "QListWidget.insertItems": ('int', 'List[str]'), + "QListWidget.isItemHidden": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isItemSelected": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isPersistentEditorOpen": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.isSortingEnabled": (), + "QListWidget.item": ('int',), + "QListWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QListWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QListWidget.itemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.items": ('PySide2.QtCore.QMimeData',), + "QListWidget.mimeData": ('list',), + "QListWidget.mimeTypes": (), + "QListWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.removeItemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.row": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.scrollToItem": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListWidget.selectedItems": (), + "QListWidget.setCurrentItem": [('PySide2.QtWidgets.QListWidgetItem',), ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.libpyside.SelectionFlags')], + "QListWidget.setCurrentRow": [('int',), ('int', 'PySide2.libpyside.SelectionFlags')], + "QListWidget.setItemHidden": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemSelected": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemWidget": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QWidget'), + "QListWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QListWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QListWidget.setSortingEnabled": ('bool',), + "QListWidget.sortItems": ('PySide2.QtCore.Qt.SortOrder',), + "QListWidget.supportedDropActions": (), + "QListWidget.takeItem": ('int',), + "QListWidget.visualItemRect": ('PySide2.QtWidgets.QListWidgetItem',), + + # class PySide2.QtWidgets.QListWidgetItem: + "QListWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidgetItem',), ('str', 'PySide2.QtWidgets.QListWidget', 'int')], + "QListWidgetItem.background": (), + "QListWidgetItem.backgroundColor": (), + "QListWidgetItem.checkState": (), + "QListWidgetItem.clone": (), + "QListWidgetItem.data": ('int',), + "QListWidgetItem.flags": (), + "QListWidgetItem.font": (), + "QListWidgetItem.foreground": (), + "QListWidgetItem.icon": (), + "QListWidgetItem.isHidden": (), + "QListWidgetItem.isSelected": (), + "QListWidgetItem.listWidget": (), + "QListWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QListWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QListWidgetItem.setData": ('int', 'Any'), + "QListWidgetItem.setFlags": ('PySide2.libpyside.ItemFlags',), + "QListWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QListWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setHidden": ('bool',), + "QListWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QListWidgetItem.setSelected": ('bool',), + "QListWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QListWidgetItem.setStatusTip": ('str',), + "QListWidgetItem.setText": ('str',), + "QListWidgetItem.setTextAlignment": ('int',), + "QListWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setToolTip": ('str',), + "QListWidgetItem.setWhatsThis": ('str',), + "QListWidgetItem.sizeHint": (), + "QListWidgetItem.statusTip": (), + "QListWidgetItem.text": (), + "QListWidgetItem.textAlignment": (), + "QListWidgetItem.textColor": (), + "QListWidgetItem.toolTip": (), + "QListWidgetItem.type": (), + "QListWidgetItem.whatsThis": (), + "QListWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QMainWindow: + "QMainWindow.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QMainWindow.addDockWidget": [('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget'), ('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation')], + "QMainWindow.addToolBar": [('PySide2.QtCore.Qt.ToolBarArea', 'PySide2.QtWidgets.QToolBar'), ('PySide2.QtWidgets.QToolBar',), ('str',)], + "QMainWindow.addToolBarBreak": ('PySide2.QtCore.Qt.ToolBarArea',), + "QMainWindow.centralWidget": (), + "QMainWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMainWindow.corner": ('PySide2.QtCore.Qt.Corner',), + "QMainWindow.createPopupMenu": (), + "QMainWindow.dockOptions": (), + "QMainWindow.dockWidgetArea": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.documentMode": (), + "QMainWindow.event": ('PySide2.QtCore.QEvent',), + "QMainWindow.iconSize": (), + "QMainWindow.insertToolBar": ('PySide2.QtWidgets.QToolBar', 'PySide2.QtWidgets.QToolBar'), + "QMainWindow.insertToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.isAnimated": (), + "QMainWindow.isDockNestingEnabled": (), + "QMainWindow.isSeparator": ('PySide2.QtCore.QPoint',), + "QMainWindow.menuBar": (), + "QMainWindow.menuWidget": (), + "QMainWindow.removeDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.removeToolBar": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.removeToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.resizeDocks": ('list', 'list', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.restoreDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.restoreState": ('PySide2.QtCore.QByteArray', 'int'), + "QMainWindow.saveState": ('int',), + "QMainWindow.setAnimated": ('bool',), + "QMainWindow.setCentralWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setCorner": ('PySide2.QtCore.Qt.Corner', 'PySide2.QtCore.Qt.DockWidgetArea'), + "QMainWindow.setDockNestingEnabled": ('bool',), + "QMainWindow.setDockOptions": ('PySide2.libpyside.DockOptions',), + "QMainWindow.setDocumentMode": ('bool',), + "QMainWindow.setIconSize": ('PySide2.QtCore.QSize',), + "QMainWindow.setMenuBar": ('PySide2.QtWidgets.QMenuBar',), + "QMainWindow.setMenuWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setStatusBar": ('PySide2.QtWidgets.QStatusBar',), + "QMainWindow.setTabPosition": ('PySide2.libpyside.DockWidgetAreas', 'PySide2.QtWidgets.QTabWidget.TabPosition'), + "QMainWindow.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMainWindow.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QMainWindow.setUnifiedTitleAndToolBarOnMac": ('bool',), + "QMainWindow.splitDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.statusBar": (), + "QMainWindow.tabPosition": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QMainWindow.tabShape": (), + "QMainWindow.tabifiedDockWidgets": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.tabifyDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget'), + "QMainWindow.takeCentralWidget": (), + "QMainWindow.toolBarArea": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolButtonStyle": (), + "QMainWindow.unifiedTitleAndToolBarOnMac": (), + + # class PySide2.QtWidgets.QMdiArea: + "QMdiArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.activateNextSubWindow": (), + "QMdiArea.activatePreviousSubWindow": (), + "QMdiArea.activationOrder": (), + "QMdiArea.activeSubWindow": (), + "QMdiArea.addSubWindow": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QMdiArea.background": (), + "QMdiArea.cascadeSubWindows": (), + "QMdiArea.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiArea.closeActiveSubWindow": (), + "QMdiArea.closeAllSubWindows": (), + "QMdiArea.currentSubWindow": (), + "QMdiArea.documentMode": (), + "QMdiArea.event": ('PySide2.QtCore.QEvent',), + "QMdiArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiArea.minimumSizeHint": (), + "QMdiArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiArea.removeSubWindow": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiArea.scrollContentsBy": ('int', 'int'), + "QMdiArea.setActivationOrder": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.setActiveSubWindow": ('PySide2.QtWidgets.QMdiSubWindow',), + "QMdiArea.setBackground": ('PySide2.QtGui.QBrush',), + "QMdiArea.setDocumentMode": ('bool',), + "QMdiArea.setOption": ('PySide2.QtWidgets.QMdiArea.AreaOption', 'bool'), + "QMdiArea.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QMdiArea.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMdiArea.setTabsClosable": ('bool',), + "QMdiArea.setTabsMovable": ('bool',), + "QMdiArea.setViewMode": ('PySide2.QtWidgets.QMdiArea.ViewMode',), + "QMdiArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiArea.sizeHint": (), + "QMdiArea.subWindowList": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.tabPosition": (), + "QMdiArea.tabShape": (), + "QMdiArea.tabsClosable": (), + "QMdiArea.tabsMovable": (), + "QMdiArea.testOption": ('PySide2.QtWidgets.QMdiArea.AreaOption',), + "QMdiArea.tileSubWindows": (), + "QMdiArea.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiArea.viewMode": (), + "QMdiArea.viewportEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QMdiSubWindow: + "QMdiSubWindow.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QMdiSubWindow.changeEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiSubWindow.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMdiSubWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMdiSubWindow.event": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiSubWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMdiSubWindow.isShaded": (), + "QMdiSubWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMdiSubWindow.keyboardPageStep": (), + "QMdiSubWindow.keyboardSingleStep": (), + "QMdiSubWindow.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.maximizedButtonsWidget": (), + "QMdiSubWindow.maximizedSystemMenuIconWidget": (), + "QMdiSubWindow.mdiArea": (), + "QMdiSubWindow.minimumSizeHint": (), + "QMdiSubWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QMdiSubWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiSubWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiSubWindow.setKeyboardPageStep": ('int',), + "QMdiSubWindow.setKeyboardSingleStep": ('int',), + "QMdiSubWindow.setOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption', 'bool'), + "QMdiSubWindow.setSystemMenu": ('PySide2.QtWidgets.QMenu',), + "QMdiSubWindow.setWidget": ('PySide2.QtWidgets.QWidget',), + "QMdiSubWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiSubWindow.showShaded": (), + "QMdiSubWindow.showSystemMenu": (), + "QMdiSubWindow.sizeHint": (), + "QMdiSubWindow.systemMenu": (), + "QMdiSubWindow.testOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption',), + "QMdiSubWindow.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiSubWindow.widget": (), + + # class PySide2.QtWidgets.QMenu: + "QMenu.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QMenu.actionAt": ('PySide2.QtCore.QPoint',), + "QMenu.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenu.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenu.activeAction": (), + "QMenu.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtGui.QIcon', 'str', 'object', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('str', 'object', 'PySide2.QtGui.QKeySequence')], + "QMenu.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenu.addSection": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QMenu.addSeparator": (), + "QMenu.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenu.clear": (), + "QMenu.columnCount": (), + "QMenu.defaultAction": (), + "QMenu.enterEvent": ('PySide2.QtCore.QEvent',), + "QMenu.event": ('PySide2.QtCore.QEvent',), + "QMenu.exec_": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), ('list', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget')], + "QMenu.focusNextPrevChild": ('bool',), + "QMenu.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMenu.hideTearOffMenu": (), + "QMenu.icon": (), + "QMenu.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenu.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenu.insertSection": [('PySide2.QtWidgets.QAction', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction', 'str')], + "QMenu.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenu.isEmpty": (), + "QMenu.isTearOffEnabled": (), + "QMenu.isTearOffMenuVisible": (), + "QMenu.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenu.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenu.menuAction": (), + "QMenu.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenu.popup": ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), + "QMenu.separatorsCollapsible": (), + "QMenu.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setIcon": ('PySide2.QtGui.QIcon',), + "QMenu.setSeparatorsCollapsible": ('bool',), + "QMenu.setTearOffEnabled": ('bool',), + "QMenu.setTitle": ('str',), + "QMenu.setToolTipsVisible": ('bool',), + "QMenu.showTearOffMenu": [(), ('PySide2.QtCore.QPoint',)], + "QMenu.sizeHint": (), + "QMenu.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMenu.title": (), + "QMenu.toolTipsVisible": (), + "QMenu.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QMenuBar: + "QMenuBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QMenuBar.actionAt": ('PySide2.QtCore.QPoint',), + "QMenuBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenuBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenuBar.activeAction": (), + "QMenuBar.addAction": [('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str'), ('str', 'object')], + "QMenuBar.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenuBar.addSeparator": (), + "QMenuBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.clear": (), + "QMenuBar.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QMenuBar.event": ('PySide2.QtCore.QEvent',), + "QMenuBar.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMenuBar.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.heightForWidth": ('int',), + "QMenuBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenuBar.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenuBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenuBar.isDefaultUp": (), + "QMenuBar.isNativeMenuBar": (), + "QMenuBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenuBar.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.minimumSizeHint": (), + "QMenuBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenuBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMenuBar.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenuBar.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QMenuBar.setDefaultUp": ('bool',), + "QMenuBar.setNativeMenuBar": ('bool',), + "QMenuBar.setVisible": ('bool',), + "QMenuBar.sizeHint": (), + "QMenuBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QMessageBox: + "QMessageBox.__init__": [('PySide2.QtWidgets.QMessageBox.Icon', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget',)], + "QMessageBox.about": ('PySide2.QtWidgets.QWidget', 'str', 'str'), + "QMessageBox.aboutQt": ('PySide2.QtWidgets.QWidget', 'str'), + "QMessageBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QMessageBox.ButtonRole'), ('PySide2.QtWidgets.QMessageBox.StandardButton',), ('str', 'PySide2.QtWidgets.QMessageBox.ButtonRole')], + "QMessageBox.button": ('PySide2.QtWidgets.QMessageBox.StandardButton',), + "QMessageBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.buttonText": ('int',), + "QMessageBox.buttons": (), + "QMessageBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QMessageBox.checkBox": (), + "QMessageBox.clickedButton": (), + "QMessageBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMessageBox.critical": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.defaultButton": (), + "QMessageBox.detailedText": (), + "QMessageBox.escapeButton": (), + "QMessageBox.event": ('PySide2.QtCore.QEvent',), + "QMessageBox.icon": (), + "QMessageBox.iconPixmap": (), + "QMessageBox.information": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.informativeText": (), + "QMessageBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMessageBox.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QMessageBox.question": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMessageBox.setButtonText": ('int', 'str'), + "QMessageBox.setCheckBox": ('PySide2.QtWidgets.QCheckBox',), + "QMessageBox.setDefaultButton": [('PySide2.QtWidgets.QMessageBox.StandardButton',), ('PySide2.QtWidgets.QPushButton',)], + "QMessageBox.setDetailedText": ('str',), + "QMessageBox.setEscapeButton": [('PySide2.QtWidgets.QAbstractButton',), ('PySide2.QtWidgets.QMessageBox.StandardButton',)], + "QMessageBox.setIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.setIconPixmap": ('PySide2.QtGui.QPixmap',), + "QMessageBox.setInformativeText": ('str',), + "QMessageBox.setStandardButtons": ('PySide2.libpyside.StandardButtons',), + "QMessageBox.setText": ('str',), + "QMessageBox.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QMessageBox.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QMessageBox.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QMessageBox.setWindowTitle": ('str',), + "QMessageBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMessageBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.standardButtons": (), + "QMessageBox.standardIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.text": (), + "QMessageBox.textFormat": (), + "QMessageBox.textInteractionFlags": (), + "QMessageBox.warning": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + + # class PySide2.QtWidgets.QMouseEventTransition: + "QMouseEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QMouseEventTransition.button": (), + "QMouseEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.hitTestPath": (), + "QMouseEventTransition.modifierMask": (), + "QMouseEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QMouseEventTransition.setHitTestPath": ('PySide2.QtGui.QPainterPath',), + "QMouseEventTransition.setModifierMask": ('PySide2.libpyside.KeyboardModifiers',), + + # class PySide2.QtWidgets.QOpenGLWidget: + "QOpenGLWidget.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QOpenGLWidget.context": (), + "QOpenGLWidget.defaultFramebufferObject": (), + "QOpenGLWidget.doneCurrent": (), + "QOpenGLWidget.event": ('PySide2.QtCore.QEvent',), + "QOpenGLWidget.format": (), + "QOpenGLWidget.grabFramebuffer": (), + "QOpenGLWidget.initializeGL": (), + "QOpenGLWidget.isValid": (), + "QOpenGLWidget.makeCurrent": (), + "QOpenGLWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWidget.paintEngine": (), + "QOpenGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWidget.paintGL": (), + "QOpenGLWidget.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWidget.resizeGL": ('int', 'int'), + "QOpenGLWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLWidget.setTextureFormat": ('int',), + "QOpenGLWidget.setUpdateBehavior": ('PySide2.QtWidgets.QOpenGLWidget.UpdateBehavior',), + "QOpenGLWidget.textureFormat": (), + "QOpenGLWidget.updateBehavior": (), + + # class PySide2.QtWidgets.QPanGesture: + "QPanGesture.__init__": ('PySide2.QtCore.QObject',), + "QPanGesture.acceleration": (), + "QPanGesture.delta": (), + "QPanGesture.lastOffset": (), + "QPanGesture.offset": (), + "QPanGesture.setAcceleration": ('float',), + "QPanGesture.setLastOffset": ('PySide2.QtCore.QPointF',), + "QPanGesture.setOffset": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QPinchGesture: + "QPinchGesture.__init__": ('PySide2.QtCore.QObject',), + "QPinchGesture.centerPoint": (), + "QPinchGesture.changeFlags": (), + "QPinchGesture.lastCenterPoint": (), + "QPinchGesture.lastRotationAngle": (), + "QPinchGesture.lastScaleFactor": (), + "QPinchGesture.rotationAngle": (), + "QPinchGesture.scaleFactor": (), + "QPinchGesture.setCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setChangeFlags": ('PySide2.libpyside.ChangeFlags',), + "QPinchGesture.setLastCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setLastRotationAngle": ('float',), + "QPinchGesture.setLastScaleFactor": ('float',), + "QPinchGesture.setRotationAngle": ('float',), + "QPinchGesture.setScaleFactor": ('float',), + "QPinchGesture.setStartCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setTotalChangeFlags": ('PySide2.libpyside.ChangeFlags',), + "QPinchGesture.setTotalRotationAngle": ('float',), + "QPinchGesture.setTotalScaleFactor": ('float',), + "QPinchGesture.startCenterPoint": (), + "QPinchGesture.totalChangeFlags": (), + "QPinchGesture.totalRotationAngle": (), + "QPinchGesture.totalScaleFactor": (), + + # class PySide2.QtWidgets.QPlainTextDocumentLayout: + "QPlainTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QPlainTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.cursorWidth": (), + "QPlainTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QPlainTextDocumentLayout.documentSize": (), + "QPlainTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QPlainTextDocumentLayout.ensureBlockLayout": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QPlainTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QPlainTextDocumentLayout.pageCount": (), + "QPlainTextDocumentLayout.requestUpdate": (), + "QPlainTextDocumentLayout.setCursorWidth": ('int',), + + # class PySide2.QtWidgets.QPlainTextEdit: + "QPlainTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPlainTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.appendHtml": ('str',), + "QPlainTextEdit.appendPlainText": ('str',), + "QPlainTextEdit.backgroundVisible": (), + "QPlainTextEdit.blockBoundingGeometry": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockCount": (), + "QPlainTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.canPaste": (), + "QPlainTextEdit.centerCursor": (), + "QPlainTextEdit.centerOnScroll": (), + "QPlainTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.clear": (), + "QPlainTextEdit.contentOffset": (), + "QPlainTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QPlainTextEdit.copy": (), + "QPlainTextEdit.createMimeDataFromSelection": (), + "QPlainTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QPlainTextEdit.currentCharFormat": (), + "QPlainTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QPlainTextEdit.cursorWidth": (), + "QPlainTextEdit.cut": (), + "QPlainTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.document": (), + "QPlainTextEdit.documentTitle": (), + "QPlainTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QPlainTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QPlainTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QPlainTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QPlainTextEdit.ensureCursorVisible": (), + "QPlainTextEdit.event": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.extraSelections": (), + "QPlainTextEdit.find": [('PySide2.QtCore.QRegExp', 'PySide2.libpyside.FindFlags'), ('int',), ('str', 'PySide2.libpyside.FindFlags')], + "QPlainTextEdit.firstVisibleBlock": (), + "QPlainTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.focusNextPrevChild": ('bool',), + "QPlainTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.getPaintContext": (), + "QPlainTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QPlainTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QPlainTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.insertPlainText": ('str',), + "QPlainTextEdit.isReadOnly": (), + "QPlainTextEdit.isUndoRedoEnabled": (), + "QPlainTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.lineWrapMode": (), + "QPlainTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QPlainTextEdit.maximumBlockCount": (), + "QPlainTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QPlainTextEdit.overwriteMode": (), + "QPlainTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPlainTextEdit.paste": (), + "QPlainTextEdit.placeholderText": (), + "QPlainTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QPlainTextEdit.redo": (), + "QPlainTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QPlainTextEdit.scrollContentsBy": ('int', 'int'), + "QPlainTextEdit.selectAll": (), + "QPlainTextEdit.setBackgroundVisible": ('bool',), + "QPlainTextEdit.setCenterOnScroll": ('bool',), + "QPlainTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.setCursorWidth": ('int',), + "QPlainTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QPlainTextEdit.setDocumentTitle": ('str',), + "QPlainTextEdit.setExtraSelections": ('list',), + "QPlainTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QPlainTextEdit.LineWrapMode',), + "QPlainTextEdit.setMaximumBlockCount": ('int',), + "QPlainTextEdit.setOverwriteMode": ('bool',), + "QPlainTextEdit.setPlaceholderText": ('str',), + "QPlainTextEdit.setPlainText": ('str',), + "QPlainTextEdit.setReadOnly": ('bool',), + "QPlainTextEdit.setTabChangesFocus": ('bool',), + "QPlainTextEdit.setTabStopDistance": ('float',), + "QPlainTextEdit.setTabStopWidth": ('int',), + "QPlainTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QPlainTextEdit.setUndoRedoEnabled": ('bool',), + "QPlainTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QPlainTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QPlainTextEdit.tabChangesFocus": (), + "QPlainTextEdit.tabStopDistance": (), + "QPlainTextEdit.tabStopWidth": (), + "QPlainTextEdit.textCursor": (), + "QPlainTextEdit.textInteractionFlags": (), + "QPlainTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QPlainTextEdit.toPlainText": (), + "QPlainTextEdit.undo": (), + "QPlainTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QPlainTextEdit.wordWrapMode": (), + "QPlainTextEdit.zoomIn": ('int',), + "QPlainTextEdit.zoomInF": ('float',), + "QPlainTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QProgressBar: + "QProgressBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QProgressBar.alignment": (), + "QProgressBar.event": ('PySide2.QtCore.QEvent',), + "QProgressBar.format": (), + "QProgressBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionProgressBar',), + "QProgressBar.invertedAppearance": (), + "QProgressBar.isTextVisible": (), + "QProgressBar.maximum": (), + "QProgressBar.minimum": (), + "QProgressBar.minimumSizeHint": (), + "QProgressBar.orientation": (), + "QProgressBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QProgressBar.reset": (), + "QProgressBar.resetFormat": (), + "QProgressBar.setAlignment": ('PySide2.libpyside.Alignment',), + "QProgressBar.setFormat": ('str',), + "QProgressBar.setInvertedAppearance": ('bool',), + "QProgressBar.setMaximum": ('int',), + "QProgressBar.setMinimum": ('int',), + "QProgressBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QProgressBar.setRange": ('int', 'int'), + "QProgressBar.setTextDirection": ('PySide2.QtWidgets.QProgressBar.Direction',), + "QProgressBar.setTextVisible": ('bool',), + "QProgressBar.setValue": ('int',), + "QProgressBar.sizeHint": (), + "QProgressBar.text": (), + "QProgressBar.textDirection": (), + "QProgressBar.value": (), + + # class PySide2.QtWidgets.QProgressDialog: + "QProgressDialog.__init__": [('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('str', 'str', 'int', 'int', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QProgressDialog.autoClose": (), + "QProgressDialog.autoReset": (), + "QProgressDialog.cancel": (), + "QProgressDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QProgressDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QProgressDialog.forceShow": (), + "QProgressDialog.labelText": (), + "QProgressDialog.maximum": (), + "QProgressDialog.minimum": (), + "QProgressDialog.minimumDuration": (), + "QProgressDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QProgressDialog.reset": (), + "QProgressDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QProgressDialog.setAutoClose": ('bool',), + "QProgressDialog.setAutoReset": ('bool',), + "QProgressDialog.setBar": ('PySide2.QtWidgets.QProgressBar',), + "QProgressDialog.setCancelButton": ('PySide2.QtWidgets.QPushButton',), + "QProgressDialog.setCancelButtonText": ('str',), + "QProgressDialog.setLabel": ('PySide2.QtWidgets.QLabel',), + "QProgressDialog.setLabelText": ('str',), + "QProgressDialog.setMaximum": ('int',), + "QProgressDialog.setMinimum": ('int',), + "QProgressDialog.setMinimumDuration": ('int',), + "QProgressDialog.setRange": ('int', 'int'), + "QProgressDialog.setValue": ('int',), + "QProgressDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QProgressDialog.sizeHint": (), + "QProgressDialog.value": (), + "QProgressDialog.wasCanceled": (), + + # class PySide2.QtWidgets.QProxyStyle: + "QProxyStyle.__init__": [('PySide2.QtWidgets.QStyle',), ('str',)], + "QProxyStyle.baseStyle": (), + "QProxyStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.drawItemPixmap": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QProxyStyle.drawItemText": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QProxyStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.event": ('PySide2.QtCore.QEvent',), + "QProxyStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QProxyStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.itemPixmapRect": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QProxyStyle.itemTextRect": ('PySide2.QtGui.QFontMetrics', 'PySide2.QtCore.QRect', 'int', 'bool', 'str'), + "QProxyStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QProxyStyle.setBaseStyle": ('PySide2.QtWidgets.QStyle',), + "QProxyStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.standardPalette": (), + "QProxyStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QProxyStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QPushButton: + "QPushButton.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPushButton.autoDefault": (), + "QPushButton.event": ('PySide2.QtCore.QEvent',), + "QPushButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QPushButton.isDefault": (), + "QPushButton.isFlat": (), + "QPushButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPushButton.menu": (), + "QPushButton.minimumSizeHint": (), + "QPushButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPushButton.setAutoDefault": ('bool',), + "QPushButton.setDefault": ('bool',), + "QPushButton.setFlat": ('bool',), + "QPushButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QPushButton.showMenu": (), + "QPushButton.sizeHint": (), + + # class PySide2.QtWidgets.QRadioButton: + "QRadioButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QRadioButton.event": ('PySide2.QtCore.QEvent',), + "QRadioButton.hitButton": ('PySide2.QtCore.QPoint',), + "QRadioButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QRadioButton.minimumSizeHint": (), + "QRadioButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QRadioButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRadioButton.sizeHint": (), + + # class PySide2.QtWidgets.QRubberBand: + "QRubberBand.__init__": ('PySide2.QtWidgets.QRubberBand.Shape', 'PySide2.QtWidgets.QWidget'), + "QRubberBand.changeEvent": ('PySide2.QtCore.QEvent',), + "QRubberBand.event": ('PySide2.QtCore.QEvent',), + "QRubberBand.initStyleOption": ('PySide2.QtWidgets.QStyleOptionRubberBand',), + "QRubberBand.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRubberBand.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QRubberBand.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRubberBand.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QRubberBand.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QRubberBand.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRubberBand.shape": (), + "QRubberBand.showEvent": ('PySide2.QtGui.QShowEvent',), + + # class PySide2.QtWidgets.QScrollArea: + "QScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.alignment": (), + "QScrollArea.ensureVisible": ('int', 'int', 'int', 'int'), + "QScrollArea.ensureWidgetVisible": ('PySide2.QtWidgets.QWidget', 'int', 'int'), + "QScrollArea.event": ('PySide2.QtCore.QEvent',), + "QScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QScrollArea.focusNextPrevChild": ('bool',), + "QScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QScrollArea.scrollContentsBy": ('int', 'int'), + "QScrollArea.setAlignment": ('PySide2.libpyside.Alignment',), + "QScrollArea.setWidget": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.setWidgetResizable": ('bool',), + "QScrollArea.sizeHint": (), + "QScrollArea.takeWidget": (), + "QScrollArea.viewportSizeHint": (), + "QScrollArea.widget": (), + "QScrollArea.widgetResizable": (), + + # class PySide2.QtWidgets.QScrollBar: + "QScrollBar.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QScrollBar.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QScrollBar.event": ('PySide2.QtCore.QEvent',), + "QScrollBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QScrollBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QScrollBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QScrollBar.sizeHint": (), + "QScrollBar.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QScrollBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QScroller: + "QScroller.activeScrollers": (), + "QScroller.ensureVisible": [('PySide2.QtCore.QRectF', 'float', 'float'), ('PySide2.QtCore.QRectF', 'float', 'float', 'int')], + "QScroller.finalPosition": (), + "QScroller.grabGesture": ('PySide2.QtCore.QObject', 'PySide2.QtWidgets.QScroller.ScrollerGestureType'), + "QScroller.grabbedGesture": ('PySide2.QtCore.QObject',), + "QScroller.handleInput": ('PySide2.QtWidgets.QScroller.Input', 'PySide2.QtCore.QPointF', 'int'), + "QScroller.hasScroller": ('PySide2.QtCore.QObject',), + "QScroller.pixelPerMeter": (), + "QScroller.resendPrepareEvent": (), + "QScroller.scrollTo": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QPointF', 'int')], + "QScroller.scroller": ('PySide2.QtCore.QObject',), + "QScroller.scrollerProperties": (), + "QScroller.setScrollerProperties": ('PySide2.QtWidgets.QScrollerProperties',), + "QScroller.setSnapPositionsX": [('float', 'float'), ('list',)], + "QScroller.setSnapPositionsY": [('float', 'float'), ('list',)], + "QScroller.state": (), + "QScroller.stop": (), + "QScroller.target": (), + "QScroller.ungrabGesture": ('PySide2.QtCore.QObject',), + "QScroller.velocity": (), + + # class PySide2.QtWidgets.QScrollerProperties: + "QScrollerProperties.__init__": [(), ('PySide2.QtWidgets.QScrollerProperties',)], + "QScrollerProperties.__copy__": (), + "QScrollerProperties.scrollMetric": ('PySide2.QtWidgets.QScrollerProperties.ScrollMetric',), + "QScrollerProperties.setDefaultScrollerProperties": ('PySide2.QtWidgets.QScrollerProperties',), + "QScrollerProperties.setScrollMetric": ('PySide2.QtWidgets.QScrollerProperties.ScrollMetric', 'Any'), + "QScrollerProperties.unsetDefaultScrollerProperties": (), + + # class PySide2.QtWidgets.QShortcut: + "QShortcut.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'Callable', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtWidgets.QWidget',)], + "QShortcut.autoRepeat": (), + "QShortcut.context": (), + "QShortcut.event": ('PySide2.QtCore.QEvent',), + "QShortcut.id": (), + "QShortcut.isEnabled": (), + "QShortcut.key": (), + "QShortcut.parentWidget": (), + "QShortcut.setAutoRepeat": ('bool',), + "QShortcut.setContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QShortcut.setEnabled": ('bool',), + "QShortcut.setKey": ('PySide2.QtGui.QKeySequence',), + "QShortcut.setWhatsThis": ('str',), + "QShortcut.whatsThis": (), + + # class PySide2.QtWidgets.QSizeGrip: + "QSizeGrip.__init__": ('PySide2.QtWidgets.QWidget',), + "QSizeGrip.event": ('PySide2.QtCore.QEvent',), + "QSizeGrip.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QSizeGrip.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QSizeGrip.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QSizeGrip.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSizeGrip.setVisible": ('bool',), + "QSizeGrip.showEvent": ('PySide2.QtGui.QShowEvent',), + "QSizeGrip.sizeHint": (), + + # class PySide2.QtWidgets.QSizePolicy: + "QSizePolicy.__init__": [(), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QSizePolicy.__copy__": (), + "QSizePolicy.controlType": (), + "QSizePolicy.expandingDirections": (), + "QSizePolicy.hasHeightForWidth": (), + "QSizePolicy.hasWidthForHeight": (), + "QSizePolicy.horizontalPolicy": (), + "QSizePolicy.horizontalStretch": (), + "QSizePolicy.retainSizeWhenHidden": (), + "QSizePolicy.setControlType": ('PySide2.QtWidgets.QSizePolicy.ControlType',), + "QSizePolicy.setHeightForWidth": ('bool',), + "QSizePolicy.setHorizontalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setHorizontalStretch": ('int',), + "QSizePolicy.setRetainSizeWhenHidden": ('bool',), + "QSizePolicy.setVerticalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setVerticalStretch": ('int',), + "QSizePolicy.setWidthForHeight": ('bool',), + "QSizePolicy.transpose": (), + "QSizePolicy.transposed": (), + "QSizePolicy.verticalPolicy": (), + "QSizePolicy.verticalStretch": (), + + # class PySide2.QtWidgets.QSlider: + "QSlider.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSlider.event": ('PySide2.QtCore.QEvent',), + "QSlider.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QSlider.minimumSizeHint": (), + "QSlider.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSlider.setTickInterval": ('int',), + "QSlider.setTickPosition": ('PySide2.QtWidgets.QSlider.TickPosition',), + "QSlider.sizeHint": (), + "QSlider.tickInterval": (), + "QSlider.tickPosition": (), + + # class PySide2.QtWidgets.QSpacerItem: + "QSpacerItem.__init__": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.changeSize": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.expandingDirections": (), + "QSpacerItem.geometry": (), + "QSpacerItem.isEmpty": (), + "QSpacerItem.maximumSize": (), + "QSpacerItem.minimumSize": (), + "QSpacerItem.setGeometry": ('PySide2.QtCore.QRect',), + "QSpacerItem.sizeHint": (), + "QSpacerItem.sizePolicy": (), + "QSpacerItem.spacerItem": (), + + # class PySide2.QtWidgets.QSpinBox: + "QSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QSpinBox.cleanText": (), + "QSpinBox.displayIntegerBase": (), + "QSpinBox.event": ('PySide2.QtCore.QEvent',), + "QSpinBox.fixup": ('str',), + "QSpinBox.maximum": (), + "QSpinBox.minimum": (), + "QSpinBox.prefix": (), + "QSpinBox.setDisplayIntegerBase": ('int',), + "QSpinBox.setMaximum": ('int',), + "QSpinBox.setMinimum": ('int',), + "QSpinBox.setPrefix": ('str',), + "QSpinBox.setRange": ('int', 'int'), + "QSpinBox.setSingleStep": ('int',), + "QSpinBox.setSuffix": ('str',), + "QSpinBox.setValue": ('int',), + "QSpinBox.singleStep": (), + "QSpinBox.suffix": (), + "QSpinBox.textFromValue": ('int',), + "QSpinBox.validate": ('str', 'int'), + "QSpinBox.value": (), + "QSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QSplashScreen: + "QSplashScreen.__init__": [('PySide2.QtGui.QPixmap', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QPixmap', 'PySide2.libpyside.WindowFlags')], + "QSplashScreen.clearMessage": (), + "QSplashScreen.drawContents": ('PySide2.QtGui.QPainter',), + "QSplashScreen.event": ('PySide2.QtCore.QEvent',), + "QSplashScreen.finish": ('PySide2.QtWidgets.QWidget',), + "QSplashScreen.message": (), + "QSplashScreen.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplashScreen.pixmap": (), + "QSplashScreen.setPixmap": ('PySide2.QtGui.QPixmap',), + "QSplashScreen.showMessage": ('str', 'int', 'PySide2.QtGui.QColor'), + + # class PySide2.QtWidgets.QSplitter: + "QSplitter.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSplitter.addWidget": ('PySide2.QtWidgets.QWidget',), + "QSplitter.changeEvent": ('PySide2.QtCore.QEvent',), + "QSplitter.childEvent": ('PySide2.QtCore.QChildEvent',), + "QSplitter.childrenCollapsible": (), + "QSplitter.closestLegalPosition": ('int', 'int'), + "QSplitter.count": (), + "QSplitter.createHandle": (), + "QSplitter.event": ('PySide2.QtCore.QEvent',), + "QSplitter.getRange": ('int', 'int', 'int'), + "QSplitter.handle": ('int',), + "QSplitter.handleWidth": (), + "QSplitter.indexOf": ('PySide2.QtWidgets.QWidget',), + "QSplitter.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.isCollapsible": ('int',), + "QSplitter.minimumSizeHint": (), + "QSplitter.moveSplitter": ('int', 'int'), + "QSplitter.opaqueResize": (), + "QSplitter.orientation": (), + "QSplitter.refresh": (), + "QSplitter.replaceWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitter.restoreState": ('PySide2.QtCore.QByteArray',), + "QSplitter.saveState": (), + "QSplitter.setChildrenCollapsible": ('bool',), + "QSplitter.setCollapsible": ('int', 'bool'), + "QSplitter.setHandleWidth": ('int',), + "QSplitter.setOpaqueResize": ('bool',), + "QSplitter.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitter.setRubberBand": ('int',), + "QSplitter.setSizes": ('list',), + "QSplitter.setStretchFactor": ('int', 'int'), + "QSplitter.sizeHint": (), + "QSplitter.sizes": (), + "QSplitter.widget": ('int',), + + # class PySide2.QtWidgets.QSplitterHandle: + "QSplitterHandle.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QSplitter'), + "QSplitterHandle.closestLegalPosition": ('int',), + "QSplitterHandle.event": ('PySide2.QtCore.QEvent',), + "QSplitterHandle.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.moveSplitter": ('int',), + "QSplitterHandle.opaqueResize": (), + "QSplitterHandle.orientation": (), + "QSplitterHandle.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSplitterHandle.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitterHandle.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitterHandle.sizeHint": (), + "QSplitterHandle.splitter": (), + + # class PySide2.QtWidgets.QStackedLayout: + "QStackedLayout.__init__": [(), ('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QStackedLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QStackedLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.count": (), + "QStackedLayout.currentIndex": (), + "QStackedLayout.currentWidget": (), + "QStackedLayout.hasHeightForWidth": (), + "QStackedLayout.heightForWidth": ('int',), + "QStackedLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedLayout.itemAt": ('int',), + "QStackedLayout.minimumSize": (), + "QStackedLayout.setCurrentIndex": ('int',), + "QStackedLayout.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QStackedLayout.setStackingMode": ('PySide2.QtWidgets.QStackedLayout.StackingMode',), + "QStackedLayout.sizeHint": (), + "QStackedLayout.stackingMode": (), + "QStackedLayout.takeAt": ('int',), + "QStackedLayout.widget": [(), ('int',)], + + # class PySide2.QtWidgets.QStackedWidget: + "QStackedWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.count": (), + "QStackedWidget.currentIndex": (), + "QStackedWidget.currentWidget": (), + "QStackedWidget.event": ('PySide2.QtCore.QEvent',), + "QStackedWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedWidget.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.setCurrentIndex": ('int',), + "QStackedWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.widget": ('int',), + + # class PySide2.QtWidgets.QStatusBar: + "QStatusBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.addPermanentWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.addWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.clearMessage": (), + "QStatusBar.currentMessage": (), + "QStatusBar.event": ('PySide2.QtCore.QEvent',), + "QStatusBar.hideOrShow": (), + "QStatusBar.insertPermanentWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.isSizeGripEnabled": (), + "QStatusBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QStatusBar.reformat": (), + "QStatusBar.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QStatusBar.setSizeGripEnabled": ('bool',), + "QStatusBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QStatusBar.showMessage": ('str', 'int'), + + # class PySide2.QtWidgets.QStyle: + "QStyle.__init__": (), + "QStyle.alignedRect": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.libpyside.Alignment', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QRect'), + "QStyle.combinedLayoutSpacing": ('PySide2.libpyside.ControlTypes', 'PySide2.libpyside.ControlTypes', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawItemPixmap": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.drawItemText": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QStyle.itemPixmapRect": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.itemTextRect": ('PySide2.QtGui.QFontMetrics', 'PySide2.QtCore.QRect', 'int', 'bool', 'str'), + "QStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.proxy": (), + "QStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QStyle.sliderPositionFromValue": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.sliderValueFromPosition": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.standardPalette": (), + "QStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.visualAlignment": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.libpyside.Alignment'), + "QStyle.visualPos": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QPoint'), + "QStyle.visualRect": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QRect'), + + # class PySide2.QtWidgets.QStyleFactory: + "QStyleFactory.__init__": (), + "QStyleFactory.create": ('str',), + "QStyleFactory.keys": (), + + # class PySide2.QtWidgets.QStyleHintReturn: + "QStyleHintReturn.__init__": ('int', 'int'), + + # class PySide2.QtWidgets.QStyleHintReturnMask: + "QStyleHintReturnMask.__init__": (), + + # class PySide2.QtWidgets.QStyleHintReturnVariant: + "QStyleHintReturnVariant.__init__": (), + + # class PySide2.QtWidgets.QStyleOption: + "QStyleOption.__init__": [('PySide2.QtWidgets.QStyleOption',), ('int', 'int')], + "QStyleOption.init": ('PySide2.QtWidgets.QWidget',), + "QStyleOption.initFrom": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QStyleOptionButton: + "QStyleOptionButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComboBox: + "QStyleOptionComboBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionComboBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComplex: + "QStyleOptionComplex.__init__": [('PySide2.QtWidgets.QStyleOptionComplex',), ('int', 'int')], + + # class PySide2.QtWidgets.QStyleOptionDockWidget: + "QStyleOptionDockWidget.__init__": [(), ('PySide2.QtWidgets.QStyleOptionDockWidget',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFocusRect: + "QStyleOptionFocusRect.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFocusRect',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFrame: + "QStyleOptionFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionGraphicsItem: + "QStyleOptionGraphicsItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGraphicsItem',), ('int',)], + "QStyleOptionGraphicsItem.levelOfDetailFromTransform": ('PySide2.QtGui.QTransform',), + + # class PySide2.QtWidgets.QStyleOptionGroupBox: + "QStyleOptionGroupBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGroupBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionHeader: + "QStyleOptionHeader.__init__": [(), ('PySide2.QtWidgets.QStyleOptionHeader',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionMenuItem: + "QStyleOptionMenuItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionMenuItem',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionProgressBar: + "QStyleOptionProgressBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionProgressBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionRubberBand: + "QStyleOptionRubberBand.__init__": [(), ('PySide2.QtWidgets.QStyleOptionRubberBand',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSizeGrip: + "QStyleOptionSizeGrip.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSizeGrip',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSlider: + "QStyleOptionSlider.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSlider',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSpinBox: + "QStyleOptionSpinBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSpinBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTab: + "QStyleOptionTab.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTab',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabBarBase: + "QStyleOptionTabBarBase.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabBarBase',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabWidgetFrame: + "QStyleOptionTabWidgetFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTitleBar: + "QStyleOptionTitleBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTitleBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBar: + "QStyleOptionToolBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBox: + "QStyleOptionToolBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolButton: + "QStyleOptionToolButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionViewItem: + "QStyleOptionViewItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionViewItem',), ('int',)], + "QStyleOptionViewItem.__copy__": (), + + # class PySide2.QtWidgets.QStylePainter: + "QStylePainter.__init__": [(), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.begin": [('PySide2.QtGui.QPaintDevice',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex'), + "QStylePainter.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.drawItemPixmap": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStylePainter.drawItemText": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStylePainter.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.style": (), + + # class PySide2.QtWidgets.QStyledItemDelegate: + "QStyledItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QStyledItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.displayText": ('Any', 'PySide2.QtCore.QLocale'), + "QStyledItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStyledItemDelegate.initStyleOption": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.itemEditorFactory": (), + "QStyledItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QStyledItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QSwipeGesture: + "QSwipeGesture.__init__": ('PySide2.QtCore.QObject',), + "QSwipeGesture.horizontalDirection": (), + "QSwipeGesture.setSwipeAngle": ('float',), + "QSwipeGesture.swipeAngle": (), + "QSwipeGesture.verticalDirection": (), + + # class PySide2.QtWidgets.QSystemTrayIcon: + "QSystemTrayIcon.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'PySide2.QtCore.QObject')], + "QSystemTrayIcon.contextMenu": (), + "QSystemTrayIcon.event": ('PySide2.QtCore.QEvent',), + "QSystemTrayIcon.geometry": (), + "QSystemTrayIcon.hide": (), + "QSystemTrayIcon.icon": (), + "QSystemTrayIcon.isSystemTrayAvailable": (), + "QSystemTrayIcon.isVisible": (), + "QSystemTrayIcon.setContextMenu": ('PySide2.QtWidgets.QMenu',), + "QSystemTrayIcon.setIcon": ('PySide2.QtGui.QIcon',), + "QSystemTrayIcon.setToolTip": ('str',), + "QSystemTrayIcon.setVisible": ('bool',), + "QSystemTrayIcon.show": (), + "QSystemTrayIcon.showMessage": [('str', 'str', 'PySide2.QtGui.QIcon', 'int'), ('str', 'str', 'PySide2.QtWidgets.QSystemTrayIcon.MessageIcon', 'int')], + "QSystemTrayIcon.supportsMessages": (), + "QSystemTrayIcon.toolTip": (), + + # class PySide2.QtWidgets.QTabBar: + "QTabBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabBar.accessibleTabName": ('int',), + "QTabBar.addTab": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QTabBar.autoHide": (), + "QTabBar.changeCurrentOnDrag": (), + "QTabBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabBar.count": (), + "QTabBar.currentIndex": (), + "QTabBar.documentMode": (), + "QTabBar.drawBase": (), + "QTabBar.elideMode": (), + "QTabBar.event": ('PySide2.QtCore.QEvent',), + "QTabBar.expanding": (), + "QTabBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QTabBar.iconSize": (), + "QTabBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTab', 'int'), + "QTabBar.insertTab": [('int', 'PySide2.QtGui.QIcon', 'str'), ('int', 'str')], + "QTabBar.isMovable": (), + "QTabBar.isTabEnabled": ('int',), + "QTabBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabBar.minimumSizeHint": (), + "QTabBar.minimumTabSizeHint": ('int',), + "QTabBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.moveTab": ('int', 'int'), + "QTabBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabBar.removeTab": ('int',), + "QTabBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabBar.selectionBehaviorOnRemove": (), + "QTabBar.setAccessibleTabName": ('int', 'str'), + "QTabBar.setAutoHide": ('bool',), + "QTabBar.setChangeCurrentOnDrag": ('bool',), + "QTabBar.setCurrentIndex": ('int',), + "QTabBar.setDocumentMode": ('bool',), + "QTabBar.setDrawBase": ('bool',), + "QTabBar.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabBar.setExpanding": ('bool',), + "QTabBar.setIconSize": ('PySide2.QtCore.QSize',), + "QTabBar.setMovable": ('bool',), + "QTabBar.setSelectionBehaviorOnRemove": ('PySide2.QtWidgets.QTabBar.SelectionBehavior',), + "QTabBar.setShape": ('PySide2.QtWidgets.QTabBar.Shape',), + "QTabBar.setTabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition', 'PySide2.QtWidgets.QWidget'), + "QTabBar.setTabData": ('int', 'Any'), + "QTabBar.setTabEnabled": ('int', 'bool'), + "QTabBar.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabBar.setTabText": ('int', 'str'), + "QTabBar.setTabTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTabBar.setTabToolTip": ('int', 'str'), + "QTabBar.setTabWhatsThis": ('int', 'str'), + "QTabBar.setTabsClosable": ('bool',), + "QTabBar.setUsesScrollButtons": ('bool',), + "QTabBar.shape": (), + "QTabBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabBar.sizeHint": (), + "QTabBar.tabAt": ('PySide2.QtCore.QPoint',), + "QTabBar.tabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition'), + "QTabBar.tabData": ('int',), + "QTabBar.tabIcon": ('int',), + "QTabBar.tabInserted": ('int',), + "QTabBar.tabLayoutChange": (), + "QTabBar.tabRect": ('int',), + "QTabBar.tabRemoved": ('int',), + "QTabBar.tabSizeHint": ('int',), + "QTabBar.tabText": ('int',), + "QTabBar.tabTextColor": ('int',), + "QTabBar.tabToolTip": ('int',), + "QTabBar.tabWhatsThis": ('int',), + "QTabBar.tabsClosable": (), + "QTabBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTabBar.usesScrollButtons": (), + "QTabBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QTabWidget: + "QTabWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.addTab": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabWidget.clear": (), + "QTabWidget.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QTabWidget.count": (), + "QTabWidget.currentIndex": (), + "QTabWidget.currentWidget": (), + "QTabWidget.documentMode": (), + "QTabWidget.elideMode": (), + "QTabWidget.event": ('PySide2.QtCore.QEvent',), + "QTabWidget.hasHeightForWidth": (), + "QTabWidget.heightForWidth": ('int',), + "QTabWidget.iconSize": (), + "QTabWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), + "QTabWidget.insertTab": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.isMovable": (), + "QTabWidget.isTabEnabled": ('int',), + "QTabWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabWidget.minimumSizeHint": (), + "QTabWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabWidget.removeTab": ('int',), + "QTabWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabWidget.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QTabWidget.setCurrentIndex": ('int',), + "QTabWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.setDocumentMode": ('bool',), + "QTabWidget.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabWidget.setIconSize": ('PySide2.QtCore.QSize',), + "QTabWidget.setMovable": ('bool',), + "QTabWidget.setTabBar": ('PySide2.QtWidgets.QTabBar',), + "QTabWidget.setTabBarAutoHide": ('bool',), + "QTabWidget.setTabEnabled": ('int', 'bool'), + "QTabWidget.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabWidget.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QTabWidget.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QTabWidget.setTabText": ('int', 'str'), + "QTabWidget.setTabToolTip": ('int', 'str'), + "QTabWidget.setTabWhatsThis": ('int', 'str'), + "QTabWidget.setTabsClosable": ('bool',), + "QTabWidget.setUsesScrollButtons": ('bool',), + "QTabWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabWidget.sizeHint": (), + "QTabWidget.tabBar": (), + "QTabWidget.tabBarAutoHide": (), + "QTabWidget.tabIcon": ('int',), + "QTabWidget.tabInserted": ('int',), + "QTabWidget.tabPosition": (), + "QTabWidget.tabRemoved": ('int',), + "QTabWidget.tabShape": (), + "QTabWidget.tabText": ('int',), + "QTabWidget.tabToolTip": ('int',), + "QTabWidget.tabWhatsThis": ('int',), + "QTabWidget.tabsClosable": (), + "QTabWidget.usesScrollButtons": (), + "QTabWidget.widget": ('int',), + + # class PySide2.QtWidgets.QTableView: + "QTableView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTableView.clearSpans": (), + "QTableView.columnAt": ('int',), + "QTableView.columnCountChanged": ('int', 'int'), + "QTableView.columnMoved": ('int', 'int', 'int'), + "QTableView.columnResized": ('int', 'int', 'int'), + "QTableView.columnSpan": ('int', 'int'), + "QTableView.columnViewportPosition": ('int',), + "QTableView.columnWidth": ('int',), + "QTableView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTableView.doItemsLayout": (), + "QTableView.gridStyle": (), + "QTableView.hideColumn": ('int',), + "QTableView.hideRow": ('int',), + "QTableView.horizontalHeader": (), + "QTableView.horizontalOffset": (), + "QTableView.horizontalScrollbarAction": ('int',), + "QTableView.indexAt": ('PySide2.QtCore.QPoint',), + "QTableView.isColumnHidden": ('int',), + "QTableView.isCornerButtonEnabled": (), + "QTableView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTableView.isRowHidden": ('int',), + "QTableView.isSortingEnabled": (), + "QTableView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QTableView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTableView.resizeColumnToContents": ('int',), + "QTableView.resizeColumnsToContents": (), + "QTableView.resizeRowToContents": ('int',), + "QTableView.resizeRowsToContents": (), + "QTableView.rowAt": ('int',), + "QTableView.rowCountChanged": ('int', 'int'), + "QTableView.rowHeight": ('int',), + "QTableView.rowMoved": ('int', 'int', 'int'), + "QTableView.rowResized": ('int', 'int', 'int'), + "QTableView.rowSpan": ('int', 'int'), + "QTableView.rowViewportPosition": ('int',), + "QTableView.scrollContentsBy": ('int', 'int'), + "QTableView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableView.selectColumn": ('int',), + "QTableView.selectRow": ('int',), + "QTableView.selectedIndexes": (), + "QTableView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTableView.setColumnHidden": ('int', 'bool'), + "QTableView.setColumnWidth": ('int', 'int'), + "QTableView.setCornerButtonEnabled": ('bool',), + "QTableView.setGridStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QTableView.setHorizontalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTableView.setRowHeight": ('int', 'int'), + "QTableView.setRowHidden": ('int', 'bool'), + "QTableView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QTableView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTableView.setShowGrid": ('bool',), + "QTableView.setSortingEnabled": ('bool',), + "QTableView.setSpan": ('int', 'int', 'int', 'int'), + "QTableView.setVerticalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setWordWrap": ('bool',), + "QTableView.showColumn": ('int',), + "QTableView.showGrid": (), + "QTableView.showRow": ('int',), + "QTableView.sizeHintForColumn": ('int',), + "QTableView.sizeHintForRow": ('int',), + "QTableView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTableView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTableView.updateGeometries": (), + "QTableView.verticalHeader": (), + "QTableView.verticalOffset": (), + "QTableView.verticalScrollbarAction": ('int',), + "QTableView.viewOptions": (), + "QTableView.viewportSizeHint": (), + "QTableView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTableView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTableView.wordWrap": (), + + # class PySide2.QtWidgets.QTableWidget: + "QTableWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'int', 'PySide2.QtWidgets.QWidget')], + "QTableWidget.cellWidget": ('int', 'int'), + "QTableWidget.clear": (), + "QTableWidget.clearContents": (), + "QTableWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.column": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.columnCount": (), + "QTableWidget.currentColumn": (), + "QTableWidget.currentItem": (), + "QTableWidget.currentRow": (), + "QTableWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTableWidget.dropMimeData": ('int', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTableWidget.editItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.event": ('PySide2.QtCore.QEvent',), + "QTableWidget.findItems": ('str', 'PySide2.libpyside.MatchFlags'), + "QTableWidget.horizontalHeaderItem": ('int',), + "QTableWidget.indexFromItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.insertColumn": ('int',), + "QTableWidget.insertRow": ('int',), + "QTableWidget.isItemSelected": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.isPersistentEditorOpen": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.isSortingEnabled": (), + "QTableWidget.item": ('int', 'int'), + "QTableWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTableWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTableWidget.itemPrototype": (), + "QTableWidget.items": ('PySide2.QtCore.QMimeData',), + "QTableWidget.mimeData": ('list',), + "QTableWidget.mimeTypes": (), + "QTableWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.removeCellWidget": ('int', 'int'), + "QTableWidget.removeColumn": ('int',), + "QTableWidget.removeRow": ('int',), + "QTableWidget.row": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.rowCount": (), + "QTableWidget.scrollToItem": ('PySide2.QtWidgets.QTableWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableWidget.selectedItems": (), + "QTableWidget.selectedRanges": (), + "QTableWidget.setCellWidget": ('int', 'int', 'PySide2.QtWidgets.QWidget'), + "QTableWidget.setColumnCount": ('int',), + "QTableWidget.setCurrentCell": [('int', 'int'), ('int', 'int', 'PySide2.libpyside.SelectionFlags')], + "QTableWidget.setCurrentItem": [('PySide2.QtWidgets.QTableWidgetItem',), ('PySide2.QtWidgets.QTableWidgetItem', 'PySide2.libpyside.SelectionFlags')], + "QTableWidget.setHorizontalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setHorizontalHeaderLabels": ('List[str]',), + "QTableWidget.setItem": ('int', 'int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setItemPrototype": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.setItemSelected": ('PySide2.QtWidgets.QTableWidgetItem', 'bool'), + "QTableWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableWidget.setRangeSelected": ('PySide2.QtWidgets.QTableWidgetSelectionRange', 'bool'), + "QTableWidget.setRowCount": ('int',), + "QTableWidget.setSortingEnabled": ('bool',), + "QTableWidget.setVerticalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setVerticalHeaderLabels": ('List[str]',), + "QTableWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTableWidget.supportedDropActions": (), + "QTableWidget.takeHorizontalHeaderItem": ('int',), + "QTableWidget.takeItem": ('int', 'int'), + "QTableWidget.takeVerticalHeaderItem": ('int',), + "QTableWidget.verticalHeaderItem": ('int',), + "QTableWidget.visualColumn": ('int',), + "QTableWidget.visualItemRect": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.visualRow": ('int',), + + # class PySide2.QtWidgets.QTableWidgetItem: + "QTableWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'int'), ('PySide2.QtWidgets.QTableWidgetItem',), ('int',), ('str', 'int')], + "QTableWidgetItem.background": (), + "QTableWidgetItem.backgroundColor": (), + "QTableWidgetItem.checkState": (), + "QTableWidgetItem.clone": (), + "QTableWidgetItem.column": (), + "QTableWidgetItem.data": ('int',), + "QTableWidgetItem.flags": (), + "QTableWidgetItem.font": (), + "QTableWidgetItem.foreground": (), + "QTableWidgetItem.icon": (), + "QTableWidgetItem.isSelected": (), + "QTableWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTableWidgetItem.row": (), + "QTableWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QTableWidgetItem.setData": ('int', 'Any'), + "QTableWidgetItem.setFlags": ('PySide2.libpyside.ItemFlags',), + "QTableWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QTableWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QTableWidgetItem.setSelected": ('bool',), + "QTableWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QTableWidgetItem.setStatusTip": ('str',), + "QTableWidgetItem.setText": ('str',), + "QTableWidgetItem.setTextAlignment": ('int',), + "QTableWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setToolTip": ('str',), + "QTableWidgetItem.setWhatsThis": ('str',), + "QTableWidgetItem.sizeHint": (), + "QTableWidgetItem.statusTip": (), + "QTableWidgetItem.tableWidget": (), + "QTableWidgetItem.text": (), + "QTableWidgetItem.textAlignment": (), + "QTableWidgetItem.textColor": (), + "QTableWidgetItem.toolTip": (), + "QTableWidgetItem.type": (), + "QTableWidgetItem.whatsThis": (), + "QTableWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTableWidgetSelectionRange: + "QTableWidgetSelectionRange.__init__": [(), ('PySide2.QtWidgets.QTableWidgetSelectionRange',), ('int', 'int', 'int', 'int')], + "QTableWidgetSelectionRange.__copy__": (), + "QTableWidgetSelectionRange.bottomRow": (), + "QTableWidgetSelectionRange.columnCount": (), + "QTableWidgetSelectionRange.leftColumn": (), + "QTableWidgetSelectionRange.rightColumn": (), + "QTableWidgetSelectionRange.rowCount": (), + "QTableWidgetSelectionRange.topRow": (), + + # class PySide2.QtWidgets.QTapAndHoldGesture: + "QTapAndHoldGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapAndHoldGesture.position": (), + "QTapAndHoldGesture.setPosition": ('PySide2.QtCore.QPointF',), + "QTapAndHoldGesture.setTimeout": ('int',), + "QTapAndHoldGesture.timeout": (), + + # class PySide2.QtWidgets.QTapGesture: + "QTapGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapGesture.position": (), + "QTapGesture.setPosition": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QTextBrowser: + "QTextBrowser.__init__": ('PySide2.QtWidgets.QWidget',), + "QTextBrowser.backward": (), + "QTextBrowser.backwardHistoryCount": (), + "QTextBrowser.clearHistory": (), + "QTextBrowser.event": ('PySide2.QtCore.QEvent',), + "QTextBrowser.focusNextPrevChild": ('bool',), + "QTextBrowser.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextBrowser.forward": (), + "QTextBrowser.forwardHistoryCount": (), + "QTextBrowser.historyTitle": ('int',), + "QTextBrowser.historyUrl": ('int',), + "QTextBrowser.home": (), + "QTextBrowser.isBackwardAvailable": (), + "QTextBrowser.isForwardAvailable": (), + "QTextBrowser.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextBrowser.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextBrowser.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.openExternalLinks": (), + "QTextBrowser.openLinks": (), + "QTextBrowser.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextBrowser.reload": (), + "QTextBrowser.searchPaths": (), + "QTextBrowser.setOpenExternalLinks": ('bool',), + "QTextBrowser.setOpenLinks": ('bool',), + "QTextBrowser.setSearchPaths": ('List[str]',), + "QTextBrowser.setSource": ('PySide2.QtCore.QUrl',), + "QTextBrowser.source": (), + + # class PySide2.QtWidgets.QTextEdit: + "QTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QTextEdit.acceptRichText": (), + "QTextEdit.alignment": (), + "QTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QTextEdit.append": ('str',), + "QTextEdit.autoFormatting": (), + "QTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.canPaste": (), + "QTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QTextEdit.clear": (), + "QTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QTextEdit.copy": (), + "QTextEdit.createMimeDataFromSelection": (), + "QTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QTextEdit.currentCharFormat": (), + "QTextEdit.currentFont": (), + "QTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextEdit.cursorWidth": (), + "QTextEdit.cut": (), + "QTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.document": (), + "QTextEdit.documentTitle": (), + "QTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTextEdit.ensureCursorVisible": (), + "QTextEdit.event": ('PySide2.QtCore.QEvent',), + "QTextEdit.extraSelections": (), + "QTextEdit.find": [('PySide2.QtCore.QRegExp', 'PySide2.libpyside.FindFlags'), ('int',), ('str', 'PySide2.libpyside.FindFlags')], + "QTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.focusNextPrevChild": ('bool',), + "QTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.fontFamily": (), + "QTextEdit.fontItalic": (), + "QTextEdit.fontPointSize": (), + "QTextEdit.fontUnderline": (), + "QTextEdit.fontWeight": (), + "QTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.insertHtml": ('str',), + "QTextEdit.insertPlainText": ('str',), + "QTextEdit.isReadOnly": (), + "QTextEdit.isUndoRedoEnabled": (), + "QTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.lineWrapColumnOrWidth": (), + "QTextEdit.lineWrapMode": (), + "QTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextEdit.overwriteMode": (), + "QTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextEdit.paste": (), + "QTextEdit.placeholderText": (), + "QTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextEdit.redo": (), + "QTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTextEdit.scrollContentsBy": ('int', 'int'), + "QTextEdit.scrollToAnchor": ('str',), + "QTextEdit.selectAll": (), + "QTextEdit.setAcceptRichText": ('bool',), + "QTextEdit.setAlignment": ('PySide2.libpyside.Alignment',), + "QTextEdit.setAutoFormatting": ('PySide2.libpyside.AutoFormatting',), + "QTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.setCurrentFont": ('PySide2.QtGui.QFont',), + "QTextEdit.setCursorWidth": ('int',), + "QTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QTextEdit.setDocumentTitle": ('str',), + "QTextEdit.setExtraSelections": ('list',), + "QTextEdit.setFontFamily": ('str',), + "QTextEdit.setFontItalic": ('bool',), + "QTextEdit.setFontPointSize": ('float',), + "QTextEdit.setFontUnderline": ('bool',), + "QTextEdit.setFontWeight": ('int',), + "QTextEdit.setHtml": ('str',), + "QTextEdit.setLineWrapColumnOrWidth": ('int',), + "QTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QTextEdit.LineWrapMode',), + "QTextEdit.setOverwriteMode": ('bool',), + "QTextEdit.setPlaceholderText": ('str',), + "QTextEdit.setPlainText": ('str',), + "QTextEdit.setReadOnly": ('bool',), + "QTextEdit.setTabChangesFocus": ('bool',), + "QTextEdit.setTabStopDistance": ('float',), + "QTextEdit.setTabStopWidth": ('int',), + "QTextEdit.setText": ('str',), + "QTextEdit.setTextBackgroundColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QTextEdit.setUndoRedoEnabled": ('bool',), + "QTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTextEdit.tabChangesFocus": (), + "QTextEdit.tabStopDistance": (), + "QTextEdit.tabStopWidth": (), + "QTextEdit.textBackgroundColor": (), + "QTextEdit.textColor": (), + "QTextEdit.textCursor": (), + "QTextEdit.textInteractionFlags": (), + "QTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTextEdit.toHtml": (), + "QTextEdit.toPlainText": (), + "QTextEdit.undo": (), + "QTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QTextEdit.wordWrapMode": (), + "QTextEdit.zoomIn": ('int',), + "QTextEdit.zoomInF": ('float',), + "QTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QTileRules: + "QTileRules.__init__": [('PySide2.QtCore.Qt.TileRule',), ('PySide2.QtCore.Qt.TileRule', 'PySide2.QtCore.Qt.TileRule'), ('PySide2.QtWidgets.QTileRules',)], + "QTileRules.__copy__": (), + + # class PySide2.QtWidgets.QTimeEdit: + "QTimeEdit.__init__": [('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QToolBar: + "QToolBar.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QToolBar.actionAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QToolBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QToolBar.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str')], + "QToolBar.addSeparator": (), + "QToolBar.addWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBar.allowedAreas": (), + "QToolBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBar.clear": (), + "QToolBar.event": ('PySide2.QtCore.QEvent',), + "QToolBar.iconSize": (), + "QToolBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolBar',), + "QToolBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QToolBar.insertWidget": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget'), + "QToolBar.isAreaAllowed": ('PySide2.QtCore.Qt.ToolBarArea',), + "QToolBar.isFloatable": (), + "QToolBar.isFloating": (), + "QToolBar.isMovable": (), + "QToolBar.orientation": (), + "QToolBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolBar.setAllowedAreas": ('PySide2.libpyside.ToolBarAreas',), + "QToolBar.setFloatable": ('bool',), + "QToolBar.setIconSize": ('PySide2.QtCore.QSize',), + "QToolBar.setMovable": ('bool',), + "QToolBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QToolBar.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolBar.toggleViewAction": (), + "QToolBar.toolButtonStyle": (), + "QToolBar.widgetForAction": ('PySide2.QtWidgets.QAction',), + + # class PySide2.QtWidgets.QToolBox: + "QToolBox.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QToolBox.addItem": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBox.count": (), + "QToolBox.currentIndex": (), + "QToolBox.currentWidget": (), + "QToolBox.event": ('PySide2.QtCore.QEvent',), + "QToolBox.indexOf": ('PySide2.QtWidgets.QWidget',), + "QToolBox.insertItem": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.isItemEnabled": ('int',), + "QToolBox.itemIcon": ('int',), + "QToolBox.itemInserted": ('int',), + "QToolBox.itemRemoved": ('int',), + "QToolBox.itemText": ('int',), + "QToolBox.itemToolTip": ('int',), + "QToolBox.removeItem": ('int',), + "QToolBox.setCurrentIndex": ('int',), + "QToolBox.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBox.setItemEnabled": ('int', 'bool'), + "QToolBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QToolBox.setItemText": ('int', 'str'), + "QToolBox.setItemToolTip": ('int', 'str'), + "QToolBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QToolBox.widget": ('int',), + + # class PySide2.QtWidgets.QToolButton: + "QToolButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QToolButton.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolButton.arrowType": (), + "QToolButton.autoRaise": (), + "QToolButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.defaultAction": (), + "QToolButton.enterEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.event": ('PySide2.QtCore.QEvent',), + "QToolButton.hitButton": ('PySide2.QtCore.QPoint',), + "QToolButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolButton',), + "QToolButton.leaveEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.menu": (), + "QToolButton.minimumSizeHint": (), + "QToolButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.nextCheckState": (), + "QToolButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolButton.popupMode": (), + "QToolButton.setArrowType": ('PySide2.QtCore.Qt.ArrowType',), + "QToolButton.setAutoRaise": ('bool',), + "QToolButton.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QToolButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QToolButton.setPopupMode": ('PySide2.QtWidgets.QToolButton.ToolButtonPopupMode',), + "QToolButton.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolButton.showMenu": (), + "QToolButton.sizeHint": (), + "QToolButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QToolButton.toolButtonStyle": (), + + # class PySide2.QtWidgets.QToolTip: + "QToolTip.font": (), + "QToolTip.hideText": (), + "QToolTip.isVisible": (), + "QToolTip.palette": (), + "QToolTip.setFont": ('PySide2.QtGui.QFont',), + "QToolTip.setPalette": ('PySide2.QtGui.QPalette',), + "QToolTip.showText": [('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect', 'int')], + "QToolTip.text": (), + + # class PySide2.QtWidgets.QTreeView: + "QTreeView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeView.allColumnsShowFocus": (), + "QTreeView.autoExpandDelay": (), + "QTreeView.collapse": ('PySide2.QtCore.QModelIndex',), + "QTreeView.collapseAll": (), + "QTreeView.columnAt": ('int',), + "QTreeView.columnCountChanged": ('int', 'int'), + "QTreeView.columnMoved": (), + "QTreeView.columnResized": ('int', 'int', 'int'), + "QTreeView.columnViewportPosition": ('int',), + "QTreeView.columnWidth": ('int',), + "QTreeView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTreeView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QTreeView.doItemsLayout": (), + "QTreeView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTreeView.drawBranches": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawRow": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawTree": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QRegion'), + "QTreeView.expand": ('PySide2.QtCore.QModelIndex',), + "QTreeView.expandAll": (), + "QTreeView.expandToDepth": ('int',), + "QTreeView.expandsOnDoubleClick": (), + "QTreeView.header": (), + "QTreeView.hideColumn": ('int',), + "QTreeView.horizontalOffset": (), + "QTreeView.horizontalScrollbarAction": ('int',), + "QTreeView.indentation": (), + "QTreeView.indexAbove": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexAt": ('PySide2.QtCore.QPoint',), + "QTreeView.indexBelow": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexRowSizeHint": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isAnimated": (), + "QTreeView.isColumnHidden": ('int',), + "QTreeView.isExpanded": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isHeaderHidden": (), + "QTreeView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isRowHidden": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isSortingEnabled": (), + "QTreeView.itemsExpandable": (), + "QTreeView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTreeView.keyboardSearch": ('str',), + "QTreeView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QTreeView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTreeView.reexpand": (), + "QTreeView.reset": (), + "QTreeView.resetIndentation": (), + "QTreeView.resizeColumnToContents": ('int',), + "QTreeView.rootIsDecorated": (), + "QTreeView.rowHeight": ('PySide2.QtCore.QModelIndex',), + "QTreeView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.scrollContentsBy": ('int', 'int'), + "QTreeView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeView.selectAll": (), + "QTreeView.selectedIndexes": (), + "QTreeView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTreeView.setAllColumnsShowFocus": ('bool',), + "QTreeView.setAnimated": ('bool',), + "QTreeView.setAutoExpandDelay": ('int',), + "QTreeView.setColumnHidden": ('int', 'bool'), + "QTreeView.setColumnWidth": ('int', 'int'), + "QTreeView.setExpanded": ('PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setExpandsOnDoubleClick": ('bool',), + "QTreeView.setFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTreeView.setHeaderHidden": ('bool',), + "QTreeView.setIndentation": ('int',), + "QTreeView.setItemsExpandable": ('bool',), + "QTreeView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeView.setRootIsDecorated": ('bool',), + "QTreeView.setRowHidden": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QTreeView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeView.setSortingEnabled": ('bool',), + "QTreeView.setTreePosition": ('int',), + "QTreeView.setUniformRowHeights": ('bool',), + "QTreeView.setWordWrap": ('bool',), + "QTreeView.showColumn": ('int',), + "QTreeView.sizeHintForColumn": ('int',), + "QTreeView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTreeView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTreeView.treePosition": (), + "QTreeView.uniformRowHeights": (), + "QTreeView.updateGeometries": (), + "QTreeView.verticalOffset": (), + "QTreeView.verticalScrollbarValueChanged": ('int',), + "QTreeView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QTreeView.viewportSizeHint": (), + "QTreeView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTreeView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTreeView.wordWrap": (), + + # class PySide2.QtWidgets.QTreeWidget: + "QTreeWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeWidget.addTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.addTopLevelItems": ('list',), + "QTreeWidget.clear": (), + "QTreeWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.collapseItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.columnCount": (), + "QTreeWidget.currentColumn": (), + "QTreeWidget.currentItem": (), + "QTreeWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTreeWidget.dropMimeData": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTreeWidget.editItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.event": ('PySide2.QtCore.QEvent',), + "QTreeWidget.expandItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.findItems": ('str', 'PySide2.libpyside.MatchFlags', 'int'), + "QTreeWidget.headerItem": (), + "QTreeWidget.indexFromItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.indexOfTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.insertTopLevelItem": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidget.insertTopLevelItems": ('int', 'list'), + "QTreeWidget.invisibleRootItem": (), + "QTreeWidget.isFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isPersistentEditorOpen": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.itemAbove": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTreeWidget.itemBelow": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeWidget.itemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.items": ('PySide2.QtCore.QMimeData',), + "QTreeWidget.mimeData": ('list',), + "QTreeWidget.mimeTypes": (), + "QTreeWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.removeItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.scrollToItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeWidget.selectedItems": (), + "QTreeWidget.setColumnCount": ('int',), + "QTreeWidget.setCurrentItem": [('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.libpyside.SelectionFlags')], + "QTreeWidget.setFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setHeaderItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.setHeaderLabel": ('str',), + "QTreeWidget.setHeaderLabels": ('List[str]',), + "QTreeWidget.setItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtWidgets.QWidget'), + "QTreeWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeWidget.sortColumn": (), + "QTreeWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidget.supportedDropActions": (), + "QTreeWidget.takeTopLevelItem": ('int',), + "QTreeWidget.topLevelItem": ('int',), + "QTreeWidget.topLevelItemCount": (), + "QTreeWidget.visualItemRect": ('PySide2.QtWidgets.QTreeWidgetItem',), + + # class PySide2.QtWidgets.QTreeWidgetItem: + "QTreeWidgetItem.__init__": [('List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('int',)], + "QTreeWidgetItem.addChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.addChildren": ('list',), + "QTreeWidgetItem.background": ('int',), + "QTreeWidgetItem.backgroundColor": ('int',), + "QTreeWidgetItem.checkState": ('int',), + "QTreeWidgetItem.child": ('int',), + "QTreeWidgetItem.childCount": (), + "QTreeWidgetItem.childIndicatorPolicy": (), + "QTreeWidgetItem.clone": (), + "QTreeWidgetItem.columnCount": (), + "QTreeWidgetItem.data": ('int', 'int'), + "QTreeWidgetItem.emitDataChanged": (), + "QTreeWidgetItem.flags": (), + "QTreeWidgetItem.font": ('int',), + "QTreeWidgetItem.foreground": ('int',), + "QTreeWidgetItem.icon": ('int',), + "QTreeWidgetItem.indexOfChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.insertChild": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidgetItem.insertChildren": ('int', 'list'), + "QTreeWidgetItem.isDisabled": (), + "QTreeWidgetItem.isExpanded": (), + "QTreeWidgetItem.isFirstColumnSpanned": (), + "QTreeWidgetItem.isHidden": (), + "QTreeWidgetItem.isSelected": (), + "QTreeWidgetItem.parent": (), + "QTreeWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTreeWidgetItem.removeChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.setBackground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setBackgroundColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setCheckState": ('int', 'PySide2.QtCore.Qt.CheckState'), + "QTreeWidgetItem.setChildIndicatorPolicy": ('PySide2.QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy',), + "QTreeWidgetItem.setData": ('int', 'int', 'Any'), + "QTreeWidgetItem.setDisabled": ('bool',), + "QTreeWidgetItem.setExpanded": ('bool',), + "QTreeWidgetItem.setFirstColumnSpanned": ('bool',), + "QTreeWidgetItem.setFlags": ('PySide2.libpyside.ItemFlags',), + "QTreeWidgetItem.setFont": ('int', 'PySide2.QtGui.QFont'), + "QTreeWidgetItem.setForeground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setHidden": ('bool',), + "QTreeWidgetItem.setIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTreeWidgetItem.setSelected": ('bool',), + "QTreeWidgetItem.setSizeHint": ('int', 'PySide2.QtCore.QSize'), + "QTreeWidgetItem.setStatusTip": ('int', 'str'), + "QTreeWidgetItem.setText": ('int', 'str'), + "QTreeWidgetItem.setTextAlignment": ('int', 'int'), + "QTreeWidgetItem.setTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setToolTip": ('int', 'str'), + "QTreeWidgetItem.setWhatsThis": ('int', 'str'), + "QTreeWidgetItem.sizeHint": ('int',), + "QTreeWidgetItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidgetItem.statusTip": ('int',), + "QTreeWidgetItem.takeChild": ('int',), + "QTreeWidgetItem.takeChildren": (), + "QTreeWidgetItem.text": ('int',), + "QTreeWidgetItem.textAlignment": ('int',), + "QTreeWidgetItem.textColor": ('int',), + "QTreeWidgetItem.toolTip": ('int',), + "QTreeWidgetItem.treeWidget": (), + "QTreeWidgetItem.type": (), + "QTreeWidgetItem.whatsThis": ('int',), + "QTreeWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTreeWidgetItemIterator: + "QTreeWidgetItemIterator.__init__": [('PySide2.QtWidgets.QTreeWidget', 'PySide2.libpyside.IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.libpyside.IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItemIterator',)], + "QTreeWidgetItemIterator.__copy__": (), + "QTreeWidgetItemIterator.value": (), + + # class PySide2.QtWidgets.QUndoCommand: + "QUndoCommand.__init__": [('PySide2.QtWidgets.QUndoCommand',), ('str', 'PySide2.QtWidgets.QUndoCommand')], + "QUndoCommand.actionText": (), + "QUndoCommand.child": ('int',), + "QUndoCommand.childCount": (), + "QUndoCommand.id": (), + "QUndoCommand.isObsolete": (), + "QUndoCommand.mergeWith": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoCommand.redo": (), + "QUndoCommand.setObsolete": ('bool',), + "QUndoCommand.setText": ('str',), + "QUndoCommand.text": (), + "QUndoCommand.undo": (), + + # class PySide2.QtWidgets.QUndoGroup: + "QUndoGroup.__init__": ('PySide2.QtCore.QObject',), + "QUndoGroup.activeStack": (), + "QUndoGroup.addStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.canRedo": (), + "QUndoGroup.canUndo": (), + "QUndoGroup.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.isClean": (), + "QUndoGroup.redo": (), + "QUndoGroup.redoText": (), + "QUndoGroup.removeStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.setActiveStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.stacks": (), + "QUndoGroup.undo": (), + "QUndoGroup.undoText": (), + + # class PySide2.QtWidgets.QUndoStack: + "QUndoStack.__init__": ('PySide2.QtCore.QObject',), + "QUndoStack.beginMacro": ('str',), + "QUndoStack.canRedo": (), + "QUndoStack.canUndo": (), + "QUndoStack.cleanIndex": (), + "QUndoStack.clear": (), + "QUndoStack.command": ('int',), + "QUndoStack.count": (), + "QUndoStack.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.endMacro": (), + "QUndoStack.index": (), + "QUndoStack.isActive": (), + "QUndoStack.isClean": (), + "QUndoStack.push": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoStack.redo": (), + "QUndoStack.redoText": (), + "QUndoStack.resetClean": (), + "QUndoStack.setActive": ('bool',), + "QUndoStack.setClean": (), + "QUndoStack.setIndex": ('int',), + "QUndoStack.setUndoLimit": ('int',), + "QUndoStack.text": ('int',), + "QUndoStack.undo": (), + "QUndoStack.undoLimit": (), + "QUndoStack.undoText": (), + + # class PySide2.QtWidgets.QUndoView: + "QUndoView.__init__": [('PySide2.QtWidgets.QUndoGroup', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QUndoStack', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QUndoView.cleanIcon": (), + "QUndoView.emptyLabel": (), + "QUndoView.group": (), + "QUndoView.setCleanIcon": ('PySide2.QtGui.QIcon',), + "QUndoView.setEmptyLabel": ('str',), + "QUndoView.setGroup": ('PySide2.QtWidgets.QUndoGroup',), + "QUndoView.setStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoView.stack": (), + + # class PySide2.QtWidgets.QVBoxLayout: + "QVBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QWhatsThis: + "QWhatsThis.createAction": ('PySide2.QtCore.QObject',), + "QWhatsThis.enterWhatsThisMode": (), + "QWhatsThis.hideText": (), + "QWhatsThis.inWhatsThisMode": (), + "QWhatsThis.leaveWhatsThisMode": (), + "QWhatsThis.showText": ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), + + # class PySide2.QtWidgets.QWidget: + "QWidget.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QWidget.acceptDrops": (), + "QWidget.accessibleDescription": (), + "QWidget.accessibleName": (), + "QWidget.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QWidget.actions": (), + "QWidget.activateWindow": (), + "QWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QWidget.addActions": ('list',), + "QWidget.adjustSize": (), + "QWidget.autoFillBackground": (), + "QWidget.backgroundRole": (), + "QWidget.backingStore": (), + "QWidget.baseSize": (), + "QWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QWidget.childAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.childrenRect": (), + "QWidget.childrenRegion": (), + "QWidget.clearFocus": (), + "QWidget.clearMask": (), + "QWidget.close": (), + "QWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QWidget.contentsMargins": (), + "QWidget.contentsRect": (), + "QWidget.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWidget.contextMenuPolicy": (), + "QWidget.create": ('int', 'bool', 'bool'), + "QWidget.createWinId": (), + "QWidget.createWindowContainer": ('PySide2.QtGui.QWindow', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QWidget.cursor": (), + "QWidget.destroy": ('bool', 'bool'), + "QWidget.devType": (), + "QWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWidget.effectiveWinId": (), + "QWidget.ensurePolished": (), + "QWidget.enterEvent": ('PySide2.QtCore.QEvent',), + "QWidget.event": ('PySide2.QtCore.QEvent',), + "QWidget.find": ('int',), + "QWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusNextChild": (), + "QWidget.focusNextPrevChild": ('bool',), + "QWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusPolicy": (), + "QWidget.focusPreviousChild": (), + "QWidget.focusProxy": (), + "QWidget.focusWidget": (), + "QWidget.font": (), + "QWidget.fontInfo": (), + "QWidget.fontMetrics": (), + "QWidget.foregroundRole": (), + "QWidget.frameGeometry": (), + "QWidget.frameSize": (), + "QWidget.geometry": (), + "QWidget.getContentsMargins": ('int', 'int', 'int', 'int'), + "QWidget.grab": ('PySide2.QtCore.QRect',), + "QWidget.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'PySide2.libpyside.GestureFlags'), + "QWidget.grabKeyboard": (), + "QWidget.grabMouse": [(), ('PySide2.QtGui.QCursor',)], + "QWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QWidget.graphicsEffect": (), + "QWidget.graphicsProxyWidget": (), + "QWidget.hasFocus": (), + "QWidget.hasHeightForWidth": (), + "QWidget.hasMouseTracking": (), + "QWidget.hasTabletTracking": (), + "QWidget.height": (), + "QWidget.heightForWidth": ('int',), + "QWidget.hide": (), + "QWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWidget.initPainter": ('PySide2.QtGui.QPainter',), + "QWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QWidget.inputMethodHints": (), + "QWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QWidget.internalWinId": (), + "QWidget.isActiveWindow": (), + "QWidget.isAncestorOf": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabled": (), + "QWidget.isEnabledTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabledToTLW": (), + "QWidget.isFullScreen": (), + "QWidget.isHidden": (), + "QWidget.isLeftToRight": (), + "QWidget.isMaximized": (), + "QWidget.isMinimized": (), + "QWidget.isModal": (), + "QWidget.isRightToLeft": (), + "QWidget.isTopLevel": (), + "QWidget.isVisible": (), + "QWidget.isVisibleTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isWindow": (), + "QWidget.isWindowModified": (), + "QWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyboardGrabber": (), + "QWidget.layout": (), + "QWidget.layoutDirection": (), + "QWidget.leaveEvent": ('PySide2.QtCore.QEvent',), + "QWidget.locale": (), + "QWidget.lower": (), + "QWidget.mapFrom": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapFromParent": ('PySide2.QtCore.QPoint',), + "QWidget.mapTo": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapToParent": ('PySide2.QtCore.QPoint',), + "QWidget.mask": (), + "QWidget.maximumHeight": (), + "QWidget.maximumSize": (), + "QWidget.maximumWidth": (), + "QWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QWidget.minimumHeight": (), + "QWidget.minimumSize": (), + "QWidget.minimumSizeHint": (), + "QWidget.minimumWidth": (), + "QWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseGrabber": (), + "QWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWidget.nativeParentWidget": (), + "QWidget.nextInFocusChain": (), + "QWidget.normalGeometry": (), + "QWidget.overrideWindowFlags": ('PySide2.libpyside.WindowFlags',), + "QWidget.overrideWindowState": ('PySide2.libpyside.WindowStates',), + "QWidget.paintEngine": (), + "QWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWidget.palette": (), + "QWidget.parentWidget": (), + "QWidget.pos": (), + "QWidget.previousInFocusChain": (), + "QWidget.raise_": (), + "QWidget.rect": (), + "QWidget.redirected": ('PySide2.QtCore.QPoint',), + "QWidget.releaseKeyboard": (), + "QWidget.releaseMouse": (), + "QWidget.releaseShortcut": ('int',), + "QWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QWidget.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'PySide2.libpyside.RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'PySide2.libpyside.RenderFlags')], + "QWidget.repaint": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWidget.restoreGeometry": ('PySide2.QtCore.QByteArray',), + "QWidget.saveGeometry": (), + "QWidget.scroll": [('int', 'int'), ('int', 'int', 'PySide2.QtCore.QRect')], + "QWidget.setAcceptDrops": ('bool',), + "QWidget.setAccessibleDescription": ('str',), + "QWidget.setAccessibleName": ('str',), + "QWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QWidget.setAutoFillBackground": ('bool',), + "QWidget.setBackgroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setBaseSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QWidget.setContextMenuPolicy": ('PySide2.QtCore.Qt.ContextMenuPolicy',), + "QWidget.setCursor": ('PySide2.QtGui.QCursor',), + "QWidget.setDisabled": ('bool',), + "QWidget.setEnabled": ('bool',), + "QWidget.setFixedHeight": ('int',), + "QWidget.setFixedSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setFixedWidth": ('int',), + "QWidget.setFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QWidget.setFocusProxy": ('PySide2.QtWidgets.QWidget',), + "QWidget.setFont": ('PySide2.QtGui.QFont',), + "QWidget.setForegroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWidget.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QWidget.setHidden": ('bool',), + "QWidget.setInputMethodHints": ('PySide2.libpyside.InputMethodHints',), + "QWidget.setLayout": ('PySide2.QtWidgets.QLayout',), + "QWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QWidget.setLocale": ('PySide2.QtCore.QLocale',), + "QWidget.setMask": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QRegion',)], + "QWidget.setMaximumHeight": ('int',), + "QWidget.setMaximumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMaximumWidth": ('int',), + "QWidget.setMinimumHeight": ('int',), + "QWidget.setMinimumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMinimumWidth": ('int',), + "QWidget.setMouseTracking": ('bool',), + "QWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QWidget.setParent": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QWidget.setShortcutEnabled": ('int', 'bool'), + "QWidget.setSizeIncrement": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy')], + "QWidget.setStatusTip": ('str',), + "QWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QWidget.setStyleSheet": ('str',), + "QWidget.setTabOrder": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), + "QWidget.setTabletTracking": ('bool',), + "QWidget.setToolTip": ('str',), + "QWidget.setToolTipDuration": ('int',), + "QWidget.setUpdatesEnabled": ('bool',), + "QWidget.setVisible": ('bool',), + "QWidget.setWhatsThis": ('str',), + "QWidget.setWindowFilePath": ('str',), + "QWidget.setWindowFlag": ('PySide2.QtCore.Qt.WindowType', 'bool'), + "QWidget.setWindowFlags": ('PySide2.libpyside.WindowFlags',), + "QWidget.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QWidget.setWindowIconText": ('str',), + "QWidget.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWidget.setWindowModified": ('bool',), + "QWidget.setWindowOpacity": ('float',), + "QWidget.setWindowRole": ('str',), + "QWidget.setWindowState": ('PySide2.libpyside.WindowStates',), + "QWidget.setWindowTitle": ('str',), + "QWidget.sharedPainter": (), + "QWidget.show": (), + "QWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWidget.showFullScreen": (), + "QWidget.showMaximized": (), + "QWidget.showMinimized": (), + "QWidget.showNormal": (), + "QWidget.size": (), + "QWidget.sizeHint": (), + "QWidget.sizeIncrement": (), + "QWidget.sizePolicy": (), + "QWidget.stackUnder": ('PySide2.QtWidgets.QWidget',), + "QWidget.statusTip": (), + "QWidget.style": (), + "QWidget.styleSheet": (), + "QWidget.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QWidget.toolTip": (), + "QWidget.toolTipDuration": (), + "QWidget.topLevelWidget": (), + "QWidget.underMouse": (), + "QWidget.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QWidget.unsetCursor": (), + "QWidget.unsetLayoutDirection": (), + "QWidget.unsetLocale": (), + "QWidget.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.updateGeometry": (), + "QWidget.updateMicroFocus": (), + "QWidget.updatesEnabled": (), + "QWidget.visibleRegion": (), + "QWidget.whatsThis": (), + "QWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWidget.width": (), + "QWidget.winId": (), + "QWidget.window": (), + "QWidget.windowFilePath": (), + "QWidget.windowFlags": (), + "QWidget.windowHandle": (), + "QWidget.windowIcon": (), + "QWidget.windowIconText": (), + "QWidget.windowModality": (), + "QWidget.windowOpacity": (), + "QWidget.windowRole": (), + "QWidget.windowState": (), + "QWidget.windowTitle": (), + "QWidget.windowType": (), + "QWidget.x": (), + "QWidget.y": (), + + # class PySide2.QtWidgets.QWidgetAction: + "QWidgetAction.__init__": ('PySide2.QtCore.QObject',), + "QWidgetAction.createWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.createdWidgets": (), + "QWidgetAction.defaultWidget": (), + "QWidgetAction.deleteWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.event": ('PySide2.QtCore.QEvent',), + "QWidgetAction.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QWidgetAction.releaseWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.requestWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.setDefaultWidget": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QWidgetItem: + "QWidgetItem.__init__": ('PySide2.QtWidgets.QWidget',), + "QWidgetItem.controlTypes": (), + "QWidgetItem.expandingDirections": (), + "QWidgetItem.geometry": (), + "QWidgetItem.hasHeightForWidth": (), + "QWidgetItem.heightForWidth": ('int',), + "QWidgetItem.isEmpty": (), + "QWidgetItem.maximumSize": (), + "QWidgetItem.minimumSize": (), + "QWidgetItem.setGeometry": ('PySide2.QtCore.QRect',), + "QWidgetItem.sizeHint": (), + "QWidgetItem.widget": (), + + # class PySide2.QtWidgets.QWizard: + "QWizard.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QWizard.addPage": ('PySide2.QtWidgets.QWizardPage',), + "QWizard.back": (), + "QWizard.button": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.cleanupPage": ('int',), + "QWizard.currentId": (), + "QWizard.currentPage": (), + "QWizard.done": ('int',), + "QWizard.event": ('PySide2.QtCore.QEvent',), + "QWizard.field": ('str',), + "QWizard.hasVisitedPage": ('int',), + "QWizard.initializePage": ('int',), + "QWizard.nextId": (), + "QWizard.options": (), + "QWizard.page": ('int',), + "QWizard.pageIds": (), + "QWizard.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWizard.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizard.removePage": ('int',), + "QWizard.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWizard.restart": (), + "QWizard.setButton": ('PySide2.QtWidgets.QWizard.WizardButton', 'PySide2.QtWidgets.QAbstractButton'), + "QWizard.setButtonLayout": ('list',), + "QWizard.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizard.setDefaultProperty": ('str', 'str', 'str'), + "QWizard.setField": ('str', 'Any'), + "QWizard.setOption": ('PySide2.QtWidgets.QWizard.WizardOption', 'bool'), + "QWizard.setOptions": ('PySide2.libpyside.WizardOptions',), + "QWizard.setPage": ('int', 'PySide2.QtWidgets.QWizardPage'), + "QWizard.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizard.setSideWidget": ('PySide2.QtWidgets.QWidget',), + "QWizard.setStartId": ('int',), + "QWizard.setSubTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setVisible": ('bool',), + "QWizard.setWizardStyle": ('PySide2.QtWidgets.QWizard.WizardStyle',), + "QWizard.sideWidget": (), + "QWizard.sizeHint": (), + "QWizard.startId": (), + "QWizard.subTitleFormat": (), + "QWizard.testOption": ('PySide2.QtWidgets.QWizard.WizardOption',), + "QWizard.titleFormat": (), + "QWizard.validateCurrentPage": (), + "QWizard.visitedPages": (), + "QWizard.wizardStyle": (), + + # class PySide2.QtWidgets.QWizardPage: + "QWizardPage.__init__": ('PySide2.QtWidgets.QWidget',), + "QWizardPage.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizardPage.cleanupPage": (), + "QWizardPage.field": ('str',), + "QWizardPage.initializePage": (), + "QWizardPage.isCommitPage": (), + "QWizardPage.isComplete": (), + "QWizardPage.isFinalPage": (), + "QWizardPage.nextId": (), + "QWizardPage.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizardPage.registerField": ('str', 'PySide2.QtWidgets.QWidget', 'str', 'str'), + "QWizardPage.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizardPage.setCommitPage": ('bool',), + "QWizardPage.setField": ('str', 'Any'), + "QWizardPage.setFinalPage": ('bool',), + "QWizardPage.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizardPage.setSubTitle": ('str',), + "QWizardPage.setTitle": ('str',), + "QWizardPage.subTitle": (), + "QWizardPage.title": (), + "QWizardPage.validatePage": (), + "QWizardPage.wizard": (), + }) + +# Module PySide2.QtPrintSupport +if "PySide2.QtPrintSupport" in sys.modules: + dict.update({ + + # class PySide2.QtPrintSupport.QAbstractPrintDialog: + "QAbstractPrintDialog.__init__": ('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), + "QAbstractPrintDialog.addEnabledOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.enabledOptions": (), + "QAbstractPrintDialog.exec_": (), + "QAbstractPrintDialog.fromPage": (), + "QAbstractPrintDialog.isOptionEnabled": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.maxPage": (), + "QAbstractPrintDialog.minPage": (), + "QAbstractPrintDialog.printRange": (), + "QAbstractPrintDialog.printer": (), + "QAbstractPrintDialog.setEnabledOptions": ('PySide2.libpyside.PrintDialogOptions',), + "QAbstractPrintDialog.setFromTo": ('int', 'int'), + "QAbstractPrintDialog.setMinMax": ('int', 'int'), + "QAbstractPrintDialog.setOptionTabs": ('list',), + "QAbstractPrintDialog.setPrintRange": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintRange',), + "QAbstractPrintDialog.toPage": (), + + # class PySide2.QtPrintSupport.QPageSetupDialog: + "QPageSetupDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPageSetupDialog.done": ('int',), + "QPageSetupDialog.exec_": (), + "QPageSetupDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPageSetupDialog.printer": (), + + # class PySide2.QtPrintSupport.QPrintDialog: + "QPrintDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPrintDialog.accept": (), + "QPrintDialog.done": ('int',), + "QPrintDialog.exec_": (), + "QPrintDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintDialog.options": (), + "QPrintDialog.setOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption', 'bool'), + "QPrintDialog.setOptions": ('PySide2.libpyside.PrintDialogOptions',), + "QPrintDialog.setVisible": ('bool',), + "QPrintDialog.testOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + + # class PySide2.QtPrintSupport.QPrintEngine: + "QPrintEngine.__init__": (), + "QPrintEngine.abort": (), + "QPrintEngine.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrintEngine.newPage": (), + "QPrintEngine.printerState": (), + "QPrintEngine.property": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey',), + "QPrintEngine.setProperty": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey', 'Any'), + + # class PySide2.QtPrintSupport.QPrintPreviewDialog: + "QPrintPreviewDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QPrintPreviewDialog.done": ('int',), + "QPrintPreviewDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintPreviewDialog.printer": (), + "QPrintPreviewDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintPreviewWidget: + "QPrintPreviewWidget.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QPrintPreviewWidget.currentPage": (), + "QPrintPreviewWidget.fitInView": (), + "QPrintPreviewWidget.fitToWidth": (), + "QPrintPreviewWidget.orientation": (), + "QPrintPreviewWidget.pageCount": (), + "QPrintPreviewWidget.print_": (), + "QPrintPreviewWidget.setAllPagesViewMode": (), + "QPrintPreviewWidget.setCurrentPage": ('int',), + "QPrintPreviewWidget.setFacingPagesViewMode": (), + "QPrintPreviewWidget.setLandscapeOrientation": (), + "QPrintPreviewWidget.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrintPreviewWidget.setPortraitOrientation": (), + "QPrintPreviewWidget.setSinglePageViewMode": (), + "QPrintPreviewWidget.setViewMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ViewMode',), + "QPrintPreviewWidget.setVisible": ('bool',), + "QPrintPreviewWidget.setZoomFactor": ('float',), + "QPrintPreviewWidget.setZoomMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ZoomMode',), + "QPrintPreviewWidget.updatePreview": (), + "QPrintPreviewWidget.viewMode": (), + "QPrintPreviewWidget.zoomFactor": (), + "QPrintPreviewWidget.zoomIn": ('float',), + "QPrintPreviewWidget.zoomMode": (), + "QPrintPreviewWidget.zoomOut": ('float',), + + # class PySide2.QtPrintSupport.QPrinter: + "QPrinter.__init__": [('PySide2.QtPrintSupport.QPrinter.PrinterMode',), ('PySide2.QtPrintSupport.QPrinterInfo', 'PySide2.QtPrintSupport.QPrinter.PrinterMode')], + "QPrinter.abort": (), + "QPrinter.actualNumCopies": (), + "QPrinter.collateCopies": (), + "QPrinter.colorMode": (), + "QPrinter.copyCount": (), + "QPrinter.creator": (), + "QPrinter.devType": (), + "QPrinter.docName": (), + "QPrinter.doubleSidedPrinting": (), + "QPrinter.duplex": (), + "QPrinter.fontEmbeddingEnabled": (), + "QPrinter.fromPage": (), + "QPrinter.fullPage": (), + "QPrinter.getPageMargins": ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit'), + "QPrinter.isValid": (), + "QPrinter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrinter.newPage": (), + "QPrinter.numCopies": (), + "QPrinter.orientation": (), + "QPrinter.outputFileName": (), + "QPrinter.outputFormat": (), + "QPrinter.pageOrder": (), + "QPrinter.pageRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.pageSize": (), + "QPrinter.paintEngine": (), + "QPrinter.paperName": (), + "QPrinter.paperRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSize": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSource": (), + "QPrinter.pdfVersion": (), + "QPrinter.printEngine": (), + "QPrinter.printProgram": (), + "QPrinter.printRange": (), + "QPrinter.printerName": (), + "QPrinter.printerState": (), + "QPrinter.resolution": (), + "QPrinter.setCollateCopies": ('bool',), + "QPrinter.setColorMode": ('PySide2.QtPrintSupport.QPrinter.ColorMode',), + "QPrinter.setCopyCount": ('int',), + "QPrinter.setCreator": ('str',), + "QPrinter.setDocName": ('str',), + "QPrinter.setDoubleSidedPrinting": ('bool',), + "QPrinter.setDuplex": ('PySide2.QtPrintSupport.QPrinter.DuplexMode',), + "QPrinter.setEngines": ('PySide2.QtPrintSupport.QPrintEngine', 'PySide2.QtGui.QPaintEngine'), + "QPrinter.setFontEmbeddingEnabled": ('bool',), + "QPrinter.setFromTo": ('int', 'int'), + "QPrinter.setFullPage": ('bool',), + "QPrinter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPrinter.setNumCopies": ('int',), + "QPrinter.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrinter.setOutputFileName": ('str',), + "QPrinter.setOutputFormat": ('PySide2.QtPrintSupport.QPrinter.OutputFormat',), + "QPrinter.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit')], + "QPrinter.setPageOrder": ('PySide2.QtPrintSupport.QPrinter.PageOrder',), + "QPrinter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPrinter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPrinter.setPaperName": ('str',), + "QPrinter.setPaperSize": [('PySide2.QtCore.QSizeF', 'PySide2.QtPrintSupport.QPrinter.Unit'), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPrinter.setPaperSource": ('PySide2.QtPrintSupport.QPrinter.PaperSource',), + "QPrinter.setPdfVersion": ('PySide2.QtGui.QPagedPaintDevice.PdfVersion',), + "QPrinter.setPrintProgram": ('str',), + "QPrinter.setPrintRange": ('PySide2.QtPrintSupport.QPrinter.PrintRange',), + "QPrinter.setPrinterName": ('str',), + "QPrinter.setResolution": ('int',), + "QPrinter.setWinPageSize": ('int',), + "QPrinter.supportedResolutions": (), + "QPrinter.supportsMultipleCopies": (), + "QPrinter.toPage": (), + "QPrinter.winPageSize": (), + + # class PySide2.QtPrintSupport.QPrinterInfo: + "QPrinterInfo.__init__": [(), ('PySide2.QtPrintSupport.QPrinter',), ('PySide2.QtPrintSupport.QPrinterInfo',)], + "QPrinterInfo.__copy__": (), + "QPrinterInfo.availablePrinterNames": (), + "QPrinterInfo.availablePrinters": (), + "QPrinterInfo.defaultDuplexMode": (), + "QPrinterInfo.defaultPageSize": (), + "QPrinterInfo.defaultPrinter": (), + "QPrinterInfo.defaultPrinterName": (), + "QPrinterInfo.description": (), + "QPrinterInfo.isDefault": (), + "QPrinterInfo.isNull": (), + "QPrinterInfo.isRemote": (), + "QPrinterInfo.location": (), + "QPrinterInfo.makeAndModel": (), + "QPrinterInfo.maximumPhysicalPageSize": (), + "QPrinterInfo.minimumPhysicalPageSize": (), + "QPrinterInfo.printerInfo": ('str',), + "QPrinterInfo.printerName": (), + "QPrinterInfo.state": (), + "QPrinterInfo.supportedDuplexModes": (), + "QPrinterInfo.supportedPageSizes": (), + "QPrinterInfo.supportedPaperSizes": (), + "QPrinterInfo.supportedResolutions": (), + "QPrinterInfo.supportedSizesWithNames": (), + "QPrinterInfo.supportsCustomPageSizes": (), + }) + +# Module PySide2.QtSql +if "PySide2.QtSql" in sys.modules: + dict.update({ + + # class PySide2.QtSql.QSql: + + # class PySide2.QtSql.QSqlDatabase: + "QSqlDatabase.__init__": [(), ('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlDriver',), ('str',)], + "QSqlDatabase.__copy__": (), + "QSqlDatabase.addDatabase": [('PySide2.QtSql.QSqlDriver', 'str'), ('str', 'str')], + "QSqlDatabase.cloneDatabase": ('PySide2.QtSql.QSqlDatabase', 'str'), + "QSqlDatabase.close": (), + "QSqlDatabase.commit": (), + "QSqlDatabase.connectOptions": (), + "QSqlDatabase.connectionName": (), + "QSqlDatabase.connectionNames": (), + "QSqlDatabase.contains": ('str',), + "QSqlDatabase.database": ('str', 'bool'), + "QSqlDatabase.databaseName": (), + "QSqlDatabase.driver": (), + "QSqlDatabase.driverName": (), + "QSqlDatabase.drivers": (), + "QSqlDatabase.exec_": ('str',), + "QSqlDatabase.hostName": (), + "QSqlDatabase.isDriverAvailable": ('str',), + "QSqlDatabase.isOpen": (), + "QSqlDatabase.isOpenError": (), + "QSqlDatabase.isValid": (), + "QSqlDatabase.lastError": (), + "QSqlDatabase.numericalPrecisionPolicy": (), + "QSqlDatabase.open": [(), ('str', 'str')], + "QSqlDatabase.password": (), + "QSqlDatabase.port": (), + "QSqlDatabase.primaryIndex": ('str',), + "QSqlDatabase.record": ('str',), + "QSqlDatabase.registerSqlDriver": ('str', 'PySide2.QtSql.QSqlDriverCreatorBase'), + "QSqlDatabase.removeDatabase": ('str',), + "QSqlDatabase.rollback": (), + "QSqlDatabase.setConnectOptions": ('str',), + "QSqlDatabase.setDatabaseName": ('str',), + "QSqlDatabase.setHostName": ('str',), + "QSqlDatabase.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDatabase.setPassword": ('str',), + "QSqlDatabase.setPort": ('int',), + "QSqlDatabase.setUserName": ('str',), + "QSqlDatabase.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDatabase.transaction": (), + "QSqlDatabase.userName": (), + + # class PySide2.QtSql.QSqlDriver: + "QSqlDriver.__init__": ('PySide2.QtCore.QObject',), + "QSqlDriver.beginTransaction": (), + "QSqlDriver.cancelQuery": (), + "QSqlDriver.close": (), + "QSqlDriver.commitTransaction": (), + "QSqlDriver.createResult": (), + "QSqlDriver.dbmsType": (), + "QSqlDriver.escapeIdentifier": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.formatValue": ('PySide2.QtSql.QSqlField', 'bool'), + "QSqlDriver.hasFeature": ('PySide2.QtSql.QSqlDriver.DriverFeature',), + "QSqlDriver.isIdentifierEscaped": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.isOpen": (), + "QSqlDriver.isOpenError": (), + "QSqlDriver.lastError": (), + "QSqlDriver.numericalPrecisionPolicy": (), + "QSqlDriver.open": ('str', 'str', 'str', 'str', 'int', 'str'), + "QSqlDriver.primaryIndex": ('str',), + "QSqlDriver.record": ('str',), + "QSqlDriver.rollbackTransaction": (), + "QSqlDriver.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlDriver.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDriver.setOpen": ('bool',), + "QSqlDriver.setOpenError": ('bool',), + "QSqlDriver.sqlStatement": ('PySide2.QtSql.QSqlDriver.StatementType', 'str', 'PySide2.QtSql.QSqlRecord', 'bool'), + "QSqlDriver.stripDelimiters": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.subscribeToNotification": ('str',), + "QSqlDriver.subscribedToNotifications": (), + "QSqlDriver.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDriver.unsubscribeFromNotification": ('str',), + + # class PySide2.QtSql.QSqlDriverCreatorBase: + "QSqlDriverCreatorBase.__init__": (), + "QSqlDriverCreatorBase.createObject": (), + + # class PySide2.QtSql.QSqlError: + "QSqlError.__init__": [('PySide2.QtSql.QSqlError',), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'int'), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'str')], + "QSqlError.__copy__": (), + "QSqlError.databaseText": (), + "QSqlError.driverText": (), + "QSqlError.isValid": (), + "QSqlError.nativeErrorCode": (), + "QSqlError.number": (), + "QSqlError.setDatabaseText": ('str',), + "QSqlError.setDriverText": ('str',), + "QSqlError.setNumber": ('int',), + "QSqlError.setType": ('PySide2.QtSql.QSqlError.ErrorType',), + "QSqlError.swap": ('PySide2.QtSql.QSqlError',), + "QSqlError.text": (), + "QSqlError.type": (), + + # class PySide2.QtSql.QSqlField: + "QSqlField.__init__": [('PySide2.QtSql.QSqlField',), ('str', 'type'), ('str', 'type', 'str')], + "QSqlField.__copy__": (), + "QSqlField.clear": (), + "QSqlField.defaultValue": (), + "QSqlField.isAutoValue": (), + "QSqlField.isGenerated": (), + "QSqlField.isNull": (), + "QSqlField.isReadOnly": (), + "QSqlField.isValid": (), + "QSqlField.length": (), + "QSqlField.name": (), + "QSqlField.precision": (), + "QSqlField.requiredStatus": (), + "QSqlField.setAutoValue": ('bool',), + "QSqlField.setDefaultValue": ('Any',), + "QSqlField.setGenerated": ('bool',), + "QSqlField.setLength": ('int',), + "QSqlField.setName": ('str',), + "QSqlField.setPrecision": ('int',), + "QSqlField.setReadOnly": ('bool',), + "QSqlField.setRequired": ('bool',), + "QSqlField.setRequiredStatus": ('PySide2.QtSql.QSqlField.RequiredStatus',), + "QSqlField.setSqlType": ('int',), + "QSqlField.setTableName": ('str',), + "QSqlField.setType": ('type',), + "QSqlField.setValue": ('Any',), + "QSqlField.tableName": (), + "QSqlField.type": (), + "QSqlField.typeID": (), + "QSqlField.value": (), + + # class PySide2.QtSql.QSqlIndex: + "QSqlIndex.__init__": [('PySide2.QtSql.QSqlIndex',), ('str', 'str')], + "QSqlIndex.__copy__": (), + "QSqlIndex.append": [('PySide2.QtSql.QSqlField',), ('PySide2.QtSql.QSqlField', 'bool')], + "QSqlIndex.cursorName": (), + "QSqlIndex.isDescending": ('int',), + "QSqlIndex.name": (), + "QSqlIndex.setCursorName": ('str',), + "QSqlIndex.setDescending": ('int', 'bool'), + "QSqlIndex.setName": ('str',), + + # class PySide2.QtSql.QSqlQuery: + "QSqlQuery.__init__": [('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlQuery',), ('PySide2.QtSql.QSqlResult',), ('str', 'PySide2.QtSql.QSqlDatabase')], + "QSqlQuery.__copy__": (), + "QSqlQuery.addBindValue": ('Any', 'PySide2.libpyside.ParamType'), + "QSqlQuery.at": (), + "QSqlQuery.bindValue": [('int', 'Any', 'PySide2.libpyside.ParamType'), ('str', 'Any', 'PySide2.libpyside.ParamType')], + "QSqlQuery.boundValue": [('int',), ('str',)], + "QSqlQuery.boundValues": (), + "QSqlQuery.clear": (), + "QSqlQuery.driver": (), + "QSqlQuery.execBatch": ('PySide2.QtSql.QSqlQuery.BatchExecutionMode',), + "QSqlQuery.exec_": [(), ('str',)], + "QSqlQuery.executedQuery": (), + "QSqlQuery.finish": (), + "QSqlQuery.first": (), + "QSqlQuery.isActive": (), + "QSqlQuery.isForwardOnly": (), + "QSqlQuery.isNull": [('int',), ('str',)], + "QSqlQuery.isSelect": (), + "QSqlQuery.isValid": (), + "QSqlQuery.last": (), + "QSqlQuery.lastError": (), + "QSqlQuery.lastInsertId": (), + "QSqlQuery.lastQuery": (), + "QSqlQuery.nextResult": (), + "QSqlQuery.numRowsAffected": (), + "QSqlQuery.numericalPrecisionPolicy": (), + "QSqlQuery.prepare": ('str',), + "QSqlQuery.previous": (), + "QSqlQuery.record": (), + "QSqlQuery.result": (), + "QSqlQuery.seek": ('int', 'bool'), + "QSqlQuery.setForwardOnly": ('bool',), + "QSqlQuery.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlQuery.size": (), + "QSqlQuery.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlQueryModel: + "QSqlQueryModel.__init__": ('PySide2.QtCore.QObject',), + "QSqlQueryModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginResetModel": (), + "QSqlQueryModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.clear": (), + "QSqlQueryModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlQueryModel.endInsertColumns": (), + "QSqlQueryModel.endInsertRows": (), + "QSqlQueryModel.endRemoveColumns": (), + "QSqlQueryModel.endRemoveRows": (), + "QSqlQueryModel.endResetModel": (), + "QSqlQueryModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlQueryModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.lastError": (), + "QSqlQueryModel.query": (), + "QSqlQueryModel.queryChange": (), + "QSqlQueryModel.record": [(), ('int',)], + "QSqlQueryModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.roleNames": (), + "QSqlQueryModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QSqlQueryModel.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlQueryModel.setQuery": [('PySide2.QtSql.QSqlQuery',), ('str', 'PySide2.QtSql.QSqlDatabase')], + + # class PySide2.QtSql.QSqlRecord: + "QSqlRecord.__init__": [(), ('PySide2.QtSql.QSqlRecord',)], + "QSqlRecord.__copy__": (), + "QSqlRecord.append": ('PySide2.QtSql.QSqlField',), + "QSqlRecord.clear": (), + "QSqlRecord.clearValues": (), + "QSqlRecord.contains": ('str',), + "QSqlRecord.count": (), + "QSqlRecord.field": [('int',), ('str',)], + "QSqlRecord.fieldName": ('int',), + "QSqlRecord.indexOf": ('str',), + "QSqlRecord.insert": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.isEmpty": (), + "QSqlRecord.isGenerated": [('int',), ('str',)], + "QSqlRecord.isNull": [('int',), ('str',)], + "QSqlRecord.keyValues": ('PySide2.QtSql.QSqlRecord',), + "QSqlRecord.remove": ('int',), + "QSqlRecord.replace": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.setGenerated": [('int', 'bool'), ('str', 'bool')], + "QSqlRecord.setNull": [('int',), ('str',)], + "QSqlRecord.setValue": [('int', 'Any'), ('str', 'Any')], + "QSqlRecord.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlRelation: + "QSqlRelation.__init__": [(), ('PySide2.QtSql.QSqlRelation',), ('str', 'str', 'str')], + "QSqlRelation.__copy__": (), + "QSqlRelation.displayColumn": (), + "QSqlRelation.indexColumn": (), + "QSqlRelation.isValid": (), + "QSqlRelation.swap": ('PySide2.QtSql.QSqlRelation',), + "QSqlRelation.tableName": (), + + # class PySide2.QtSql.QSqlRelationalDelegate: + "QSqlRelationalDelegate.__init__": ('PySide2.QtCore.QObject',), + "QSqlRelationalDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtSql.QSqlRelationalTableModel: + "QSqlRelationalTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlRelationalTableModel.clear": (), + "QSqlRelationalTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlRelationalTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlRelationalTableModel.orderByClause": (), + "QSqlRelationalTableModel.relation": ('int',), + "QSqlRelationalTableModel.relationModel": ('int',), + "QSqlRelationalTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalTableModel.revertRow": ('int',), + "QSqlRelationalTableModel.select": (), + "QSqlRelationalTableModel.selectStatement": (), + "QSqlRelationalTableModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSqlRelationalTableModel.setJoinMode": ('PySide2.QtSql.QSqlRelationalTableModel.JoinMode',), + "QSqlRelationalTableModel.setRelation": ('int', 'PySide2.QtSql.QSqlRelation'), + "QSqlRelationalTableModel.setTable": ('str',), + "QSqlRelationalTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + + # class PySide2.QtSql.QSqlResult: + "QSqlResult.__init__": ('PySide2.QtSql.QSqlDriver',), + "QSqlResult.addBindValue": ('Any', 'PySide2.libpyside.ParamType'), + "QSqlResult.at": (), + "QSqlResult.bindValue": [('int', 'Any', 'PySide2.libpyside.ParamType'), ('str', 'Any', 'PySide2.libpyside.ParamType')], + "QSqlResult.bindValueType": [('int',), ('str',)], + "QSqlResult.bindingSyntax": (), + "QSqlResult.boundValue": [('int',), ('str',)], + "QSqlResult.boundValueCount": (), + "QSqlResult.boundValueName": ('int',), + "QSqlResult.boundValues": (), + "QSqlResult.clear": (), + "QSqlResult.data": ('int',), + "QSqlResult.detachFromResultSet": (), + "QSqlResult.driver": (), + "QSqlResult.execBatch": ('bool',), + "QSqlResult.exec_": (), + "QSqlResult.executedQuery": (), + "QSqlResult.fetch": ('int',), + "QSqlResult.fetchFirst": (), + "QSqlResult.fetchLast": (), + "QSqlResult.fetchNext": (), + "QSqlResult.fetchPrevious": (), + "QSqlResult.handle": (), + "QSqlResult.hasOutValues": (), + "QSqlResult.isActive": (), + "QSqlResult.isForwardOnly": (), + "QSqlResult.isNull": ('int',), + "QSqlResult.isSelect": (), + "QSqlResult.isValid": (), + "QSqlResult.lastError": (), + "QSqlResult.lastInsertId": (), + "QSqlResult.lastQuery": (), + "QSqlResult.nextResult": (), + "QSqlResult.numRowsAffected": (), + "QSqlResult.numericalPrecisionPolicy": (), + "QSqlResult.prepare": ('str',), + "QSqlResult.record": (), + "QSqlResult.reset": ('str',), + "QSqlResult.resetBindCount": (), + "QSqlResult.savePrepare": ('str',), + "QSqlResult.setActive": ('bool',), + "QSqlResult.setAt": ('int',), + "QSqlResult.setForwardOnly": ('bool',), + "QSqlResult.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlResult.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlResult.setQuery": ('str',), + "QSqlResult.setSelect": ('bool',), + "QSqlResult.size": (), + + # class PySide2.QtSql.QSqlTableModel: + "QSqlTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlTableModel.clear": (), + "QSqlTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlTableModel.database": (), + "QSqlTableModel.deleteRowFromTable": ('int',), + "QSqlTableModel.editStrategy": (), + "QSqlTableModel.fieldIndex": ('str',), + "QSqlTableModel.filter": (), + "QSqlTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlTableModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.insertRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlTableModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.isDirty": [(), ('PySide2.QtCore.QModelIndex',)], + "QSqlTableModel.orderByClause": (), + "QSqlTableModel.primaryKey": (), + "QSqlTableModel.primaryValues": ('int',), + "QSqlTableModel.record": [(), ('int',)], + "QSqlTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.revert": (), + "QSqlTableModel.revertAll": (), + "QSqlTableModel.revertRow": ('int',), + "QSqlTableModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.select": (), + "QSqlTableModel.selectRow": ('int',), + "QSqlTableModel.selectStatement": (), + "QSqlTableModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSqlTableModel.setEditStrategy": ('PySide2.QtSql.QSqlTableModel.EditStrategy',), + "QSqlTableModel.setFilter": ('str',), + "QSqlTableModel.setPrimaryKey": ('PySide2.QtSql.QSqlIndex',), + "QSqlTableModel.setQuery": ('PySide2.QtSql.QSqlQuery',), + "QSqlTableModel.setRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.setSort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.setTable": ('str',), + "QSqlTableModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.submit": (), + "QSqlTableModel.submitAll": (), + "QSqlTableModel.tableName": (), + "QSqlTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + }) + +# Module PySide2.QtNetwork +if "PySide2.QtNetwork" in sys.modules: + dict.update({ + + # class PySide2.QtNetwork.QAbstractNetworkCache: + "QAbstractNetworkCache.__init__": ('PySide2.QtCore.QObject',), + "QAbstractNetworkCache.cacheSize": (), + "QAbstractNetworkCache.clear": (), + "QAbstractNetworkCache.data": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.insert": ('PySide2.QtCore.QIODevice',), + "QAbstractNetworkCache.metaData": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QAbstractNetworkCache.remove": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QAbstractSocket: + "QAbstractSocket.__init__": ('PySide2.QtNetwork.QAbstractSocket.SocketType', 'PySide2.QtCore.QObject'), + "QAbstractSocket.abort": (), + "QAbstractSocket.atEnd": (), + "QAbstractSocket.bind": [('PySide2.QtNetwork.QHostAddress', 'int', 'PySide2.libpyside.BindMode'), ('int', 'PySide2.libpyside.BindMode')], + "QAbstractSocket.bytesAvailable": (), + "QAbstractSocket.bytesToWrite": (), + "QAbstractSocket.canReadLine": (), + "QAbstractSocket.close": (), + "QAbstractSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'PySide2.libpyside.OpenMode'), ('str', 'int', 'PySide2.libpyside.OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QAbstractSocket.disconnectFromHost": (), + "QAbstractSocket.flush": (), + "QAbstractSocket.isSequential": (), + "QAbstractSocket.isValid": (), + "QAbstractSocket.localAddress": (), + "QAbstractSocket.localPort": (), + "QAbstractSocket.pauseMode": (), + "QAbstractSocket.peerAddress": (), + "QAbstractSocket.peerName": (), + "QAbstractSocket.peerPort": (), + "QAbstractSocket.proxy": (), + "QAbstractSocket.readBufferSize": (), + "QAbstractSocket.readData": ('str', 'int'), + "QAbstractSocket.readLineData": ('str', 'int'), + "QAbstractSocket.resume": (), + "QAbstractSocket.setLocalAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setLocalPort": ('int',), + "QAbstractSocket.setPauseMode": ('PySide2.libpyside.PauseModes',), + "QAbstractSocket.setPeerAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setPeerName": ('str',), + "QAbstractSocket.setPeerPort": ('int',), + "QAbstractSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QAbstractSocket.setReadBufferSize": ('int',), + "QAbstractSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'PySide2.libpyside.OpenMode'), + "QAbstractSocket.setSocketError": ('PySide2.QtNetwork.QAbstractSocket.SocketError',), + "QAbstractSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'Any'), + "QAbstractSocket.setSocketState": ('PySide2.QtNetwork.QAbstractSocket.SocketState',), + "QAbstractSocket.socketDescriptor": (), + "QAbstractSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QAbstractSocket.socketType": (), + "QAbstractSocket.state": (), + "QAbstractSocket.waitForBytesWritten": ('int',), + "QAbstractSocket.waitForConnected": ('int',), + "QAbstractSocket.waitForDisconnected": ('int',), + "QAbstractSocket.waitForReadyRead": ('int',), + "QAbstractSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QAuthenticator: + "QAuthenticator.__init__": [(), ('PySide2.QtNetwork.QAuthenticator',)], + "QAuthenticator.__copy__": (), + "QAuthenticator.isNull": (), + "QAuthenticator.option": ('str',), + "QAuthenticator.options": (), + "QAuthenticator.password": (), + "QAuthenticator.realm": (), + "QAuthenticator.setOption": ('str', 'Any'), + "QAuthenticator.setPassword": ('str',), + "QAuthenticator.setRealm": ('str',), + "QAuthenticator.setUser": ('str',), + "QAuthenticator.user": (), + + # class PySide2.QtNetwork.QDnsDomainNameRecord: + "QDnsDomainNameRecord.__init__": [(), ('PySide2.QtNetwork.QDnsDomainNameRecord',)], + "QDnsDomainNameRecord.__copy__": (), + "QDnsDomainNameRecord.name": (), + "QDnsDomainNameRecord.swap": ('PySide2.QtNetwork.QDnsDomainNameRecord',), + "QDnsDomainNameRecord.timeToLive": (), + "QDnsDomainNameRecord.value": (), + + # class PySide2.QtNetwork.QDnsHostAddressRecord: + "QDnsHostAddressRecord.__init__": [(), ('PySide2.QtNetwork.QDnsHostAddressRecord',)], + "QDnsHostAddressRecord.__copy__": (), + "QDnsHostAddressRecord.name": (), + "QDnsHostAddressRecord.swap": ('PySide2.QtNetwork.QDnsHostAddressRecord',), + "QDnsHostAddressRecord.timeToLive": (), + "QDnsHostAddressRecord.value": (), + + # class PySide2.QtNetwork.QDnsLookup: + "QDnsLookup.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtNetwork.QDnsLookup.Type', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtNetwork.QDnsLookup.Type', 'str', 'PySide2.QtNetwork.QHostAddress', 'PySide2.QtCore.QObject')], + "QDnsLookup.abort": (), + "QDnsLookup.canonicalNameRecords": (), + "QDnsLookup.error": (), + "QDnsLookup.errorString": (), + "QDnsLookup.hostAddressRecords": (), + "QDnsLookup.isFinished": (), + "QDnsLookup.lookup": (), + "QDnsLookup.mailExchangeRecords": (), + "QDnsLookup.name": (), + "QDnsLookup.nameServerRecords": (), + "QDnsLookup.nameserver": (), + "QDnsLookup.pointerRecords": (), + "QDnsLookup.serviceRecords": (), + "QDnsLookup.setName": ('str',), + "QDnsLookup.setNameserver": ('PySide2.QtNetwork.QHostAddress',), + "QDnsLookup.setType": ('PySide2.QtNetwork.QDnsLookup.Type',), + "QDnsLookup.textRecords": (), + "QDnsLookup.type": (), + + # class PySide2.QtNetwork.QDnsMailExchangeRecord: + "QDnsMailExchangeRecord.__init__": [(), ('PySide2.QtNetwork.QDnsMailExchangeRecord',)], + "QDnsMailExchangeRecord.__copy__": (), + "QDnsMailExchangeRecord.exchange": (), + "QDnsMailExchangeRecord.name": (), + "QDnsMailExchangeRecord.preference": (), + "QDnsMailExchangeRecord.swap": ('PySide2.QtNetwork.QDnsMailExchangeRecord',), + "QDnsMailExchangeRecord.timeToLive": (), + + # class PySide2.QtNetwork.QDnsServiceRecord: + "QDnsServiceRecord.__init__": [(), ('PySide2.QtNetwork.QDnsServiceRecord',)], + "QDnsServiceRecord.__copy__": (), + "QDnsServiceRecord.name": (), + "QDnsServiceRecord.port": (), + "QDnsServiceRecord.priority": (), + "QDnsServiceRecord.swap": ('PySide2.QtNetwork.QDnsServiceRecord',), + "QDnsServiceRecord.target": (), + "QDnsServiceRecord.timeToLive": (), + "QDnsServiceRecord.weight": (), + + # class PySide2.QtNetwork.QDnsTextRecord: + "QDnsTextRecord.__init__": [(), ('PySide2.QtNetwork.QDnsTextRecord',)], + "QDnsTextRecord.__copy__": (), + "QDnsTextRecord.name": (), + "QDnsTextRecord.swap": ('PySide2.QtNetwork.QDnsTextRecord',), + "QDnsTextRecord.timeToLive": (), + "QDnsTextRecord.values": (), + + # class PySide2.QtNetwork.QHostAddress: + "QHostAddress.__init__": [(), ('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.__copy__": (), + "QHostAddress.clear": (), + "QHostAddress.isBroadcast": (), + "QHostAddress.isEqual": ('PySide2.QtNetwork.QHostAddress', 'PySide2.libpyside.ConversionMode'), + "QHostAddress.isGlobal": (), + "QHostAddress.isInSubnet": [('PySide2.QtNetwork.QHostAddress', 'int'), ('Tuple[Any, Any]',)], + "QHostAddress.isLinkLocal": (), + "QHostAddress.isLoopback": (), + "QHostAddress.isMulticast": (), + "QHostAddress.isNull": (), + "QHostAddress.isSiteLocal": (), + "QHostAddress.isUniqueLocalUnicast": (), + "QHostAddress.parseSubnet": ('str',), + "QHostAddress.protocol": (), + "QHostAddress.scopeId": (), + "QHostAddress.setAddress": [('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.setScopeId": ('str',), + "QHostAddress.swap": ('PySide2.QtNetwork.QHostAddress',), + "QHostAddress.toIPv4Address": [(), ('bool',)], + "QHostAddress.toIPv6Address": (), + "QHostAddress.toString": (), + + # class PySide2.QtNetwork.QHostInfo: + "QHostInfo.__init__": [('PySide2.QtNetwork.QHostInfo',), ('int',)], + "QHostInfo.__copy__": (), + "QHostInfo.abortHostLookup": ('int',), + "QHostInfo.addresses": (), + "QHostInfo.error": (), + "QHostInfo.errorString": (), + "QHostInfo.fromName": ('str',), + "QHostInfo.hostName": (), + "QHostInfo.localDomainName": (), + "QHostInfo.localHostName": (), + "QHostInfo.lookupId": (), + "QHostInfo.setAddresses": ('list',), + "QHostInfo.setError": ('PySide2.QtNetwork.QHostInfo.HostInfoError',), + "QHostInfo.setErrorString": ('str',), + "QHostInfo.setHostName": ('str',), + "QHostInfo.setLookupId": ('int',), + "QHostInfo.swap": ('PySide2.QtNetwork.QHostInfo',), + + # class PySide2.QtNetwork.QHstsPolicy: + "QHstsPolicy.__init__": [(), ('PySide2.QtCore.QDateTime', 'PySide2.libpyside.PolicyFlags', 'str', 'PySide2.QtCore.QUrl.ParsingMode'), ('PySide2.QtNetwork.QHstsPolicy',)], + "QHstsPolicy.__copy__": (), + "QHstsPolicy.expiry": (), + "QHstsPolicy.host": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QHstsPolicy.includesSubDomains": (), + "QHstsPolicy.isExpired": (), + "QHstsPolicy.setExpiry": ('PySide2.QtCore.QDateTime',), + "QHstsPolicy.setHost": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QHstsPolicy.setIncludesSubDomains": ('bool',), + "QHstsPolicy.swap": ('PySide2.QtNetwork.QHstsPolicy',), + + # class PySide2.QtNetwork.QHttpMultiPart: + "QHttpMultiPart.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtNetwork.QHttpMultiPart.ContentType', 'PySide2.QtCore.QObject')], + "QHttpMultiPart.append": ('PySide2.QtNetwork.QHttpPart',), + "QHttpMultiPart.boundary": (), + "QHttpMultiPart.setBoundary": ('PySide2.QtCore.QByteArray',), + "QHttpMultiPart.setContentType": ('PySide2.QtNetwork.QHttpMultiPart.ContentType',), + + # class PySide2.QtNetwork.QHttpPart: + "QHttpPart.__init__": [(), ('PySide2.QtNetwork.QHttpPart',)], + "QHttpPart.__copy__": (), + "QHttpPart.setBody": ('PySide2.QtCore.QByteArray',), + "QHttpPart.setBodyDevice": ('PySide2.QtCore.QIODevice',), + "QHttpPart.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QHttpPart.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QHttpPart.swap": ('PySide2.QtNetwork.QHttpPart',), + + # class PySide2.QtNetwork.QIPv6Address: + "QIPv6Address.__init__": [(), ('PySide2.QtNetwork.QIPv6Address',)], + "QIPv6Address.__copy__": (), + + # class PySide2.QtNetwork.QLocalServer: + "QLocalServer.__init__": ('PySide2.QtCore.QObject',), + "QLocalServer.close": (), + "QLocalServer.errorString": (), + "QLocalServer.fullServerName": (), + "QLocalServer.hasPendingConnections": (), + "QLocalServer.incomingConnection": ('int',), + "QLocalServer.isListening": (), + "QLocalServer.listen": [('int',), ('str',)], + "QLocalServer.maxPendingConnections": (), + "QLocalServer.nextPendingConnection": (), + "QLocalServer.removeServer": ('str',), + "QLocalServer.serverError": (), + "QLocalServer.serverName": (), + "QLocalServer.setMaxPendingConnections": ('int',), + "QLocalServer.setSocketOptions": ('PySide2.libpyside.SocketOptions',), + "QLocalServer.socketDescriptor": (), + "QLocalServer.socketOptions": (), + "QLocalServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QLocalSocket: + "QLocalSocket.__init__": ('PySide2.QtCore.QObject',), + "QLocalSocket.abort": (), + "QLocalSocket.bytesAvailable": (), + "QLocalSocket.bytesToWrite": (), + "QLocalSocket.canReadLine": (), + "QLocalSocket.close": (), + "QLocalSocket.connectToServer": [('PySide2.libpyside.OpenMode',), ('str', 'PySide2.libpyside.OpenMode')], + "QLocalSocket.disconnectFromServer": (), + "QLocalSocket.flush": (), + "QLocalSocket.fullServerName": (), + "QLocalSocket.isSequential": (), + "QLocalSocket.isValid": (), + "QLocalSocket.open": ('PySide2.libpyside.OpenMode',), + "QLocalSocket.readBufferSize": (), + "QLocalSocket.readData": ('str', 'int'), + "QLocalSocket.serverName": (), + "QLocalSocket.setReadBufferSize": ('int',), + "QLocalSocket.setServerName": ('str',), + "QLocalSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QLocalSocket.LocalSocketState', 'PySide2.libpyside.OpenMode'), + "QLocalSocket.socketDescriptor": (), + "QLocalSocket.state": (), + "QLocalSocket.waitForBytesWritten": ('int',), + "QLocalSocket.waitForConnected": ('int',), + "QLocalSocket.waitForDisconnected": ('int',), + "QLocalSocket.waitForReadyRead": ('int',), + "QLocalSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkAccessManager: + "QNetworkAccessManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkAccessManager.activeConfiguration": (), + "QNetworkAccessManager.addStrictTransportSecurityHosts": ('list',), + "QNetworkAccessManager.cache": (), + "QNetworkAccessManager.clearAccessCache": (), + "QNetworkAccessManager.clearConnectionCache": (), + "QNetworkAccessManager.configuration": (), + "QNetworkAccessManager.connectToHost": ('str', 'int'), + "QNetworkAccessManager.connectToHostEncrypted": ('str', 'int', 'PySide2.QtNetwork.QSslConfiguration'), + "QNetworkAccessManager.cookieJar": (), + "QNetworkAccessManager.createRequest": ('PySide2.QtNetwork.QNetworkAccessManager.Operation', 'PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), + "QNetworkAccessManager.deleteResource": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.enableStrictTransportSecurityStore": ('bool', 'str'), + "QNetworkAccessManager.get": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.head": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.isStrictTransportSecurityEnabled": (), + "QNetworkAccessManager.isStrictTransportSecurityStoreEnabled": (), + "QNetworkAccessManager.networkAccessible": (), + "QNetworkAccessManager.post": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.proxy": (), + "QNetworkAccessManager.proxyFactory": (), + "QNetworkAccessManager.put": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.redirectPolicy": (), + "QNetworkAccessManager.sendCustomRequest": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.setCache": ('PySide2.QtNetwork.QAbstractNetworkCache',), + "QNetworkAccessManager.setConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkAccessManager.setCookieJar": ('PySide2.QtNetwork.QNetworkCookieJar',), + "QNetworkAccessManager.setNetworkAccessible": ('PySide2.QtNetwork.QNetworkAccessManager.NetworkAccessibility',), + "QNetworkAccessManager.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkAccessManager.setProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkAccessManager.setRedirectPolicy": ('PySide2.QtNetwork.QNetworkRequest.RedirectPolicy',), + "QNetworkAccessManager.setStrictTransportSecurityEnabled": ('bool',), + "QNetworkAccessManager.strictTransportSecurityHosts": (), + "QNetworkAccessManager.supportedSchemes": (), + "QNetworkAccessManager.supportedSchemesImplementation": (), + + # class PySide2.QtNetwork.QNetworkAddressEntry: + "QNetworkAddressEntry.__init__": [(), ('PySide2.QtNetwork.QNetworkAddressEntry',)], + "QNetworkAddressEntry.__copy__": (), + "QNetworkAddressEntry.broadcast": (), + "QNetworkAddressEntry.clearAddressLifetime": (), + "QNetworkAddressEntry.dnsEligibility": (), + "QNetworkAddressEntry.ip": (), + "QNetworkAddressEntry.isLifetimeKnown": (), + "QNetworkAddressEntry.isPermanent": (), + "QNetworkAddressEntry.isTemporary": (), + "QNetworkAddressEntry.netmask": (), + "QNetworkAddressEntry.prefixLength": (), + "QNetworkAddressEntry.setBroadcast": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setDnsEligibility": ('PySide2.QtNetwork.QNetworkAddressEntry.DnsEligibilityStatus',), + "QNetworkAddressEntry.setIp": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setNetmask": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setPrefixLength": ('int',), + "QNetworkAddressEntry.swap": ('PySide2.QtNetwork.QNetworkAddressEntry',), + + # class PySide2.QtNetwork.QNetworkCacheMetaData: + "QNetworkCacheMetaData.__init__": [(), ('PySide2.QtNetwork.QNetworkCacheMetaData',)], + "QNetworkCacheMetaData.__copy__": (), + "QNetworkCacheMetaData.attributes": (), + "QNetworkCacheMetaData.expirationDate": (), + "QNetworkCacheMetaData.isValid": (), + "QNetworkCacheMetaData.lastModified": (), + "QNetworkCacheMetaData.saveToDisk": (), + "QNetworkCacheMetaData.setAttributes": ('dict',), + "QNetworkCacheMetaData.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setLastModified": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setSaveToDisk": ('bool',), + "QNetworkCacheMetaData.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCacheMetaData.swap": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkCacheMetaData.url": (), + + # class PySide2.QtNetwork.QNetworkConfiguration: + "QNetworkConfiguration.__init__": [(), ('PySide2.QtNetwork.QNetworkConfiguration',)], + "QNetworkConfiguration.__copy__": (), + "QNetworkConfiguration.bearerType": (), + "QNetworkConfiguration.bearerTypeFamily": (), + "QNetworkConfiguration.bearerTypeName": (), + "QNetworkConfiguration.children": (), + "QNetworkConfiguration.connectTimeout": (), + "QNetworkConfiguration.identifier": (), + "QNetworkConfiguration.isRoamingAvailable": (), + "QNetworkConfiguration.isValid": (), + "QNetworkConfiguration.name": (), + "QNetworkConfiguration.purpose": (), + "QNetworkConfiguration.setConnectTimeout": ('int',), + "QNetworkConfiguration.state": (), + "QNetworkConfiguration.swap": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkConfiguration.type": (), + + # class PySide2.QtNetwork.QNetworkConfigurationManager: + "QNetworkConfigurationManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkConfigurationManager.allConfigurations": ('PySide2.libpyside.StateFlags',), + "QNetworkConfigurationManager.capabilities": (), + "QNetworkConfigurationManager.configurationFromIdentifier": ('str',), + "QNetworkConfigurationManager.defaultConfiguration": (), + "QNetworkConfigurationManager.isOnline": (), + "QNetworkConfigurationManager.updateConfigurations": (), + + # class PySide2.QtNetwork.QNetworkCookie: + "QNetworkCookie.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkCookie',)], + "QNetworkCookie.__copy__": (), + "QNetworkCookie.domain": (), + "QNetworkCookie.expirationDate": (), + "QNetworkCookie.hasSameIdentifier": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.isHttpOnly": (), + "QNetworkCookie.isSecure": (), + "QNetworkCookie.isSessionCookie": (), + "QNetworkCookie.name": (), + "QNetworkCookie.normalize": ('PySide2.QtCore.QUrl',), + "QNetworkCookie.parseCookies": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.path": (), + "QNetworkCookie.setDomain": ('str',), + "QNetworkCookie.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCookie.setHttpOnly": ('bool',), + "QNetworkCookie.setName": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.setPath": ('str',), + "QNetworkCookie.setSecure": ('bool',), + "QNetworkCookie.setValue": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.swap": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.toRawForm": ('PySide2.QtNetwork.QNetworkCookie.RawForm',), + "QNetworkCookie.value": (), + + # class PySide2.QtNetwork.QNetworkCookieJar: + "QNetworkCookieJar.__init__": ('PySide2.QtCore.QObject',), + "QNetworkCookieJar.allCookies": (), + "QNetworkCookieJar.cookiesForUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCookieJar.deleteCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.insertCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.setAllCookies": ('list',), + "QNetworkCookieJar.setCookiesFromUrl": ('list', 'PySide2.QtCore.QUrl'), + "QNetworkCookieJar.updateCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.validateCookie": ('PySide2.QtNetwork.QNetworkCookie', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtNetwork.QNetworkDatagram: + "QNetworkDatagram.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHostAddress', 'int'), ('PySide2.QtNetwork.QNetworkDatagram',)], + "QNetworkDatagram.__copy__": (), + "QNetworkDatagram.clear": (), + "QNetworkDatagram.data": (), + "QNetworkDatagram.destinationAddress": (), + "QNetworkDatagram.destinationPort": (), + "QNetworkDatagram.hopLimit": (), + "QNetworkDatagram.interfaceIndex": (), + "QNetworkDatagram.isNull": (), + "QNetworkDatagram.isValid": (), + "QNetworkDatagram.makeReply": ('PySide2.QtCore.QByteArray',), + "QNetworkDatagram.senderAddress": (), + "QNetworkDatagram.senderPort": (), + "QNetworkDatagram.setData": ('PySide2.QtCore.QByteArray',), + "QNetworkDatagram.setDestination": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QNetworkDatagram.setHopLimit": ('int',), + "QNetworkDatagram.setInterfaceIndex": ('int',), + "QNetworkDatagram.setSender": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QNetworkDatagram.swap": ('PySide2.QtNetwork.QNetworkDatagram',), + + # class PySide2.QtNetwork.QNetworkDiskCache: + "QNetworkDiskCache.__init__": ('PySide2.QtCore.QObject',), + "QNetworkDiskCache.cacheDirectory": (), + "QNetworkDiskCache.cacheSize": (), + "QNetworkDiskCache.clear": (), + "QNetworkDiskCache.data": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.expire": (), + "QNetworkDiskCache.fileMetaData": ('str',), + "QNetworkDiskCache.insert": ('PySide2.QtCore.QIODevice',), + "QNetworkDiskCache.maximumCacheSize": (), + "QNetworkDiskCache.metaData": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkDiskCache.remove": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.setCacheDirectory": ('str',), + "QNetworkDiskCache.setMaximumCacheSize": ('int',), + "QNetworkDiskCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QNetworkInterface: + "QNetworkInterface.__init__": [(), ('PySide2.QtNetwork.QNetworkInterface',)], + "QNetworkInterface.__copy__": (), + "QNetworkInterface.addressEntries": (), + "QNetworkInterface.allAddresses": (), + "QNetworkInterface.allInterfaces": (), + "QNetworkInterface.flags": (), + "QNetworkInterface.hardwareAddress": (), + "QNetworkInterface.humanReadableName": (), + "QNetworkInterface.index": (), + "QNetworkInterface.interfaceFromIndex": ('int',), + "QNetworkInterface.interfaceFromName": ('str',), + "QNetworkInterface.interfaceIndexFromName": ('str',), + "QNetworkInterface.interfaceNameFromIndex": ('int',), + "QNetworkInterface.isValid": (), + "QNetworkInterface.maximumTransmissionUnit": (), + "QNetworkInterface.name": (), + "QNetworkInterface.swap": ('PySide2.QtNetwork.QNetworkInterface',), + "QNetworkInterface.type": (), + + # class PySide2.QtNetwork.QNetworkProxy: + "QNetworkProxy.__init__": [(), ('PySide2.QtNetwork.QNetworkProxy',), ('PySide2.QtNetwork.QNetworkProxy.ProxyType', 'str', 'int', 'str', 'str')], + "QNetworkProxy.__copy__": (), + "QNetworkProxy.applicationProxy": (), + "QNetworkProxy.capabilities": (), + "QNetworkProxy.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkProxy.hostName": (), + "QNetworkProxy.isCachingProxy": (), + "QNetworkProxy.isTransparentProxy": (), + "QNetworkProxy.password": (), + "QNetworkProxy.port": (), + "QNetworkProxy.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.rawHeaderList": (), + "QNetworkProxy.setApplicationProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.setCapabilities": ('PySide2.libpyside.Capabilities',), + "QNetworkProxy.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkProxy.setHostName": ('str',), + "QNetworkProxy.setPassword": ('str',), + "QNetworkProxy.setPort": ('int',), + "QNetworkProxy.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkProxy.setType": ('PySide2.QtNetwork.QNetworkProxy.ProxyType',), + "QNetworkProxy.setUser": ('str',), + "QNetworkProxy.swap": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.type": (), + "QNetworkProxy.user": (), + + # class PySide2.QtNetwork.QNetworkProxyFactory: + "QNetworkProxyFactory.__init__": (), + "QNetworkProxyFactory.proxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.queryProxy": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.setApplicationProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkProxyFactory.setUseSystemConfiguration": ('bool',), + "QNetworkProxyFactory.systemProxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.usesSystemConfiguration": (), + + # class PySide2.QtNetwork.QNetworkProxyQuery: + "QNetworkProxyQuery.__init__": [(), ('PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkProxyQuery',), ('int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType')], + "QNetworkProxyQuery.__copy__": (), + "QNetworkProxyQuery.localPort": (), + "QNetworkProxyQuery.networkConfiguration": (), + "QNetworkProxyQuery.peerHostName": (), + "QNetworkProxyQuery.peerPort": (), + "QNetworkProxyQuery.protocolTag": (), + "QNetworkProxyQuery.queryType": (), + "QNetworkProxyQuery.setLocalPort": ('int',), + "QNetworkProxyQuery.setNetworkConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkProxyQuery.setPeerHostName": ('str',), + "QNetworkProxyQuery.setPeerPort": ('int',), + "QNetworkProxyQuery.setProtocolTag": ('str',), + "QNetworkProxyQuery.setQueryType": ('PySide2.QtNetwork.QNetworkProxyQuery.QueryType',), + "QNetworkProxyQuery.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkProxyQuery.swap": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyQuery.url": (), + + # class PySide2.QtNetwork.QNetworkReply: + "QNetworkReply.__init__": ('PySide2.QtCore.QObject',), + "QNetworkReply.abort": (), + "QNetworkReply.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute',), + "QNetworkReply.close": (), + "QNetworkReply.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkReply.ignoreSslErrors": [(), ('list',)], + "QNetworkReply.ignoreSslErrorsImplementation": ('list',), + "QNetworkReply.isFinished": (), + "QNetworkReply.isRunning": (), + "QNetworkReply.isSequential": (), + "QNetworkReply.manager": (), + "QNetworkReply.operation": (), + "QNetworkReply.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.rawHeaderList": (), + "QNetworkReply.readBufferSize": (), + "QNetworkReply.request": (), + "QNetworkReply.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkReply.setError": ('PySide2.QtNetwork.QNetworkReply.NetworkError', 'str'), + "QNetworkReply.setFinished": ('bool',), + "QNetworkReply.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkReply.setOperation": ('PySide2.QtNetwork.QNetworkAccessManager.Operation',), + "QNetworkReply.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkReply.setReadBufferSize": ('int',), + "QNetworkReply.setRequest": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkReply.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setSslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkReply.sslConfiguration": (), + "QNetworkReply.sslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.url": (), + "QNetworkReply.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkRequest: + "QNetworkRequest.__init__": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QNetworkRequest.__copy__": (), + "QNetworkRequest.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkRequest.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkRequest.maximumRedirectsAllowed": (), + "QNetworkRequest.originatingObject": (), + "QNetworkRequest.priority": (), + "QNetworkRequest.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.rawHeaderList": (), + "QNetworkRequest.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkRequest.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkRequest.setMaximumRedirectsAllowed": ('int',), + "QNetworkRequest.setOriginatingObject": ('PySide2.QtCore.QObject',), + "QNetworkRequest.setPriority": ('PySide2.QtNetwork.QNetworkRequest.Priority',), + "QNetworkRequest.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkRequest.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkRequest.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkRequest.sslConfiguration": (), + "QNetworkRequest.swap": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkRequest.url": (), + + # class PySide2.QtNetwork.QNetworkSession: + "QNetworkSession.__init__": ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QObject'), + "QNetworkSession.accept": (), + "QNetworkSession.activeTime": (), + "QNetworkSession.bytesReceived": (), + "QNetworkSession.bytesWritten": (), + "QNetworkSession.close": (), + "QNetworkSession.configuration": (), + "QNetworkSession.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.errorString": (), + "QNetworkSession.ignore": (), + "QNetworkSession.interface": (), + "QNetworkSession.isOpen": (), + "QNetworkSession.migrate": (), + "QNetworkSession.open": (), + "QNetworkSession.reject": (), + "QNetworkSession.sessionProperty": ('str',), + "QNetworkSession.setSessionProperty": ('str', 'Any'), + "QNetworkSession.state": (), + "QNetworkSession.stop": (), + "QNetworkSession.usagePolicies": (), + "QNetworkSession.waitForOpened": ('int',), + + # class PySide2.QtNetwork.QSsl: + + # class PySide2.QtNetwork.QSslCertificate: + "QSslCertificate.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtNetwork.QSslCertificate',)], + "QSslCertificate.__copy__": (), + "QSslCertificate.clear": (), + "QSslCertificate.digest": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QSslCertificate.effectiveDate": (), + "QSslCertificate.expiryDate": (), + "QSslCertificate.extensions": (), + "QSslCertificate.fromData": ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromDevice": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromPath": ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax'), + "QSslCertificate.handle": (), + "QSslCertificate.importPkcs12": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSslKey', 'PySide2.QtNetwork.QSslCertificate', 'list', 'PySide2.QtCore.QByteArray'), + "QSslCertificate.isBlacklisted": (), + "QSslCertificate.isNull": (), + "QSslCertificate.isSelfSigned": (), + "QSslCertificate.issuerInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.issuerInfoAttributes": (), + "QSslCertificate.publicKey": (), + "QSslCertificate.serialNumber": (), + "QSslCertificate.subjectAlternativeNames": (), + "QSslCertificate.subjectInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.subjectInfoAttributes": (), + "QSslCertificate.swap": ('PySide2.QtNetwork.QSslCertificate',), + "QSslCertificate.toDer": (), + "QSslCertificate.toPem": (), + "QSslCertificate.toText": (), + "QSslCertificate.verify": ('list', 'str'), + "QSslCertificate.version": (), + + # class PySide2.QtNetwork.QSslCertificateExtension: + "QSslCertificateExtension.__init__": [(), ('PySide2.QtNetwork.QSslCertificateExtension',)], + "QSslCertificateExtension.__copy__": (), + "QSslCertificateExtension.isCritical": (), + "QSslCertificateExtension.isSupported": (), + "QSslCertificateExtension.name": (), + "QSslCertificateExtension.oid": (), + "QSslCertificateExtension.swap": ('PySide2.QtNetwork.QSslCertificateExtension',), + "QSslCertificateExtension.value": (), + + # class PySide2.QtNetwork.QSslCipher: + "QSslCipher.__init__": [(), ('PySide2.QtNetwork.QSslCipher',), ('str',), ('str', 'PySide2.QtNetwork.QSsl.SslProtocol')], + "QSslCipher.__copy__": (), + "QSslCipher.authenticationMethod": (), + "QSslCipher.encryptionMethod": (), + "QSslCipher.isNull": (), + "QSslCipher.keyExchangeMethod": (), + "QSslCipher.name": (), + "QSslCipher.protocol": (), + "QSslCipher.protocolString": (), + "QSslCipher.supportedBits": (), + "QSslCipher.swap": ('PySide2.QtNetwork.QSslCipher',), + "QSslCipher.usedBits": (), + + # class PySide2.QtNetwork.QSslConfiguration: + "QSslConfiguration.__init__": [(), ('PySide2.QtNetwork.QSslConfiguration',)], + "QSslConfiguration.__copy__": (), + "QSslConfiguration.allowedNextProtocols": (), + "QSslConfiguration.backendConfiguration": (), + "QSslConfiguration.caCertificates": (), + "QSslConfiguration.ciphers": (), + "QSslConfiguration.defaultConfiguration": (), + "QSslConfiguration.diffieHellmanParameters": (), + "QSslConfiguration.ephemeralServerKey": (), + "QSslConfiguration.isNull": (), + "QSslConfiguration.localCertificate": (), + "QSslConfiguration.localCertificateChain": (), + "QSslConfiguration.nextNegotiatedProtocol": (), + "QSslConfiguration.nextProtocolNegotiationStatus": (), + "QSslConfiguration.peerCertificate": (), + "QSslConfiguration.peerCertificateChain": (), + "QSslConfiguration.peerVerifyDepth": (), + "QSslConfiguration.peerVerifyMode": (), + "QSslConfiguration.preSharedKeyIdentityHint": (), + "QSslConfiguration.privateKey": (), + "QSslConfiguration.protocol": (), + "QSslConfiguration.sessionCipher": (), + "QSslConfiguration.sessionProtocol": (), + "QSslConfiguration.sessionTicket": (), + "QSslConfiguration.sessionTicketLifeTimeHint": (), + "QSslConfiguration.setAllowedNextProtocols": ('list',), + "QSslConfiguration.setBackendConfiguration": ('dict',), + "QSslConfiguration.setBackendConfigurationOption": ('PySide2.QtCore.QByteArray', 'Any'), + "QSslConfiguration.setCaCertificates": ('list',), + "QSslConfiguration.setCiphers": ('list',), + "QSslConfiguration.setDefaultConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.setDiffieHellmanParameters": ('PySide2.QtNetwork.QSslDiffieHellmanParameters',), + "QSslConfiguration.setLocalCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslConfiguration.setLocalCertificateChain": ('list',), + "QSslConfiguration.setPeerVerifyDepth": ('int',), + "QSslConfiguration.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslConfiguration.setPreSharedKeyIdentityHint": ('PySide2.QtCore.QByteArray',), + "QSslConfiguration.setPrivateKey": ('PySide2.QtNetwork.QSslKey',), + "QSslConfiguration.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslConfiguration.setSessionTicket": ('PySide2.QtCore.QByteArray',), + "QSslConfiguration.setSslOption": ('PySide2.QtNetwork.QSsl.SslOption', 'bool'), + "QSslConfiguration.supportedCiphers": (), + "QSslConfiguration.swap": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.systemCaCertificates": (), + "QSslConfiguration.testSslOption": ('PySide2.QtNetwork.QSsl.SslOption',), + + # class PySide2.QtNetwork.QSslDiffieHellmanParameters: + "QSslDiffieHellmanParameters.__init__": [(), ('PySide2.QtNetwork.QSslDiffieHellmanParameters',)], + "QSslDiffieHellmanParameters.__copy__": (), + "QSslDiffieHellmanParameters.defaultParameters": (), + "QSslDiffieHellmanParameters.error": (), + "QSslDiffieHellmanParameters.errorString": (), + "QSslDiffieHellmanParameters.fromEncoded": [('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat')], + "QSslDiffieHellmanParameters.isEmpty": (), + "QSslDiffieHellmanParameters.isValid": (), + "QSslDiffieHellmanParameters.swap": ('PySide2.QtNetwork.QSslDiffieHellmanParameters',), + + # class PySide2.QtNetwork.QSslError: + "QSslError.__init__": [(), ('PySide2.QtNetwork.QSslError',), ('PySide2.QtNetwork.QSslError.SslError',), ('PySide2.QtNetwork.QSslError.SslError', 'PySide2.QtNetwork.QSslCertificate')], + "QSslError.__copy__": (), + "QSslError.certificate": (), + "QSslError.error": (), + "QSslError.errorString": (), + "QSslError.swap": ('PySide2.QtNetwork.QSslError',), + + # class PySide2.QtNetwork.QSslKey: + "QSslKey.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QSslKey',), ('int', 'PySide2.QtNetwork.QSsl.KeyType')], + "QSslKey.__copy__": (), + "QSslKey.algorithm": (), + "QSslKey.clear": (), + "QSslKey.handle": (), + "QSslKey.isNull": (), + "QSslKey.length": (), + "QSslKey.swap": ('PySide2.QtNetwork.QSslKey',), + "QSslKey.toDer": ('PySide2.QtCore.QByteArray',), + "QSslKey.toPem": ('PySide2.QtCore.QByteArray',), + "QSslKey.type": (), + + # class PySide2.QtNetwork.QSslPreSharedKeyAuthenticator: + "QSslPreSharedKeyAuthenticator.__init__": [(), ('PySide2.QtNetwork.QSslPreSharedKeyAuthenticator',)], + "QSslPreSharedKeyAuthenticator.__copy__": (), + "QSslPreSharedKeyAuthenticator.identity": (), + "QSslPreSharedKeyAuthenticator.identityHint": (), + "QSslPreSharedKeyAuthenticator.maximumIdentityLength": (), + "QSslPreSharedKeyAuthenticator.maximumPreSharedKeyLength": (), + "QSslPreSharedKeyAuthenticator.preSharedKey": (), + "QSslPreSharedKeyAuthenticator.setIdentity": ('PySide2.QtCore.QByteArray',), + "QSslPreSharedKeyAuthenticator.setPreSharedKey": ('PySide2.QtCore.QByteArray',), + "QSslPreSharedKeyAuthenticator.swap": ('PySide2.QtNetwork.QSslPreSharedKeyAuthenticator',), + + # class PySide2.QtNetwork.QSslSocket: + "QSslSocket.__init__": ('PySide2.QtCore.QObject',), + "QSslSocket.abort": (), + "QSslSocket.addCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.addDefaultCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addDefaultCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.atEnd": (), + "QSslSocket.bytesAvailable": (), + "QSslSocket.bytesToWrite": (), + "QSslSocket.caCertificates": (), + "QSslSocket.canReadLine": (), + "QSslSocket.ciphers": (), + "QSslSocket.close": (), + "QSslSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'PySide2.libpyside.OpenMode'), ('str', 'int', 'PySide2.libpyside.OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.connectToHostEncrypted": [('str', 'int', 'PySide2.libpyside.OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol'), ('str', 'int', 'str', 'PySide2.libpyside.OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.defaultCaCertificates": (), + "QSslSocket.defaultCiphers": (), + "QSslSocket.disconnectFromHost": (), + "QSslSocket.encryptedBytesAvailable": (), + "QSslSocket.encryptedBytesToWrite": (), + "QSslSocket.flush": (), + "QSslSocket.ignoreSslErrors": [(), ('list',)], + "QSslSocket.isEncrypted": (), + "QSslSocket.localCertificate": (), + "QSslSocket.localCertificateChain": (), + "QSslSocket.mode": (), + "QSslSocket.peerCertificate": (), + "QSslSocket.peerCertificateChain": (), + "QSslSocket.peerVerifyDepth": (), + "QSslSocket.peerVerifyMode": (), + "QSslSocket.peerVerifyName": (), + "QSslSocket.privateKey": (), + "QSslSocket.protocol": (), + "QSslSocket.readData": ('str', 'int'), + "QSslSocket.resume": (), + "QSslSocket.sessionCipher": (), + "QSslSocket.sessionProtocol": (), + "QSslSocket.setCaCertificates": ('list',), + "QSslSocket.setCiphers": [('list',), ('str',)], + "QSslSocket.setDefaultCaCertificates": ('list',), + "QSslSocket.setDefaultCiphers": ('list',), + "QSslSocket.setLocalCertificate": [('PySide2.QtNetwork.QSslCertificate',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat')], + "QSslSocket.setLocalCertificateChain": ('list',), + "QSslSocket.setPeerVerifyDepth": ('int',), + "QSslSocket.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslSocket.setPeerVerifyName": ('str',), + "QSslSocket.setPrivateKey": [('PySide2.QtNetwork.QSslKey',), ('str', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QByteArray')], + "QSslSocket.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslSocket.setReadBufferSize": ('int',), + "QSslSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'PySide2.libpyside.OpenMode'), + "QSslSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'Any'), + "QSslSocket.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QSslSocket.sslConfiguration": (), + "QSslSocket.sslLibraryBuildVersionNumber": (), + "QSslSocket.sslLibraryBuildVersionString": (), + "QSslSocket.sslLibraryVersionNumber": (), + "QSslSocket.sslLibraryVersionString": (), + "QSslSocket.startClientEncryption": (), + "QSslSocket.startServerEncryption": (), + "QSslSocket.supportedCiphers": (), + "QSslSocket.supportsSsl": (), + "QSslSocket.systemCaCertificates": (), + "QSslSocket.waitForBytesWritten": ('int',), + "QSslSocket.waitForConnected": ('int',), + "QSslSocket.waitForDisconnected": ('int',), + "QSslSocket.waitForEncrypted": ('int',), + "QSslSocket.waitForReadyRead": ('int',), + "QSslSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QTcpServer: + "QTcpServer.__init__": ('PySide2.QtCore.QObject',), + "QTcpServer.addPendingConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QTcpServer.close": (), + "QTcpServer.errorString": (), + "QTcpServer.hasPendingConnections": (), + "QTcpServer.incomingConnection": ('int',), + "QTcpServer.isListening": (), + "QTcpServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QTcpServer.maxPendingConnections": (), + "QTcpServer.nextPendingConnection": (), + "QTcpServer.pauseAccepting": (), + "QTcpServer.proxy": (), + "QTcpServer.resumeAccepting": (), + "QTcpServer.serverAddress": (), + "QTcpServer.serverError": (), + "QTcpServer.serverPort": (), + "QTcpServer.setMaxPendingConnections": ('int',), + "QTcpServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QTcpServer.setSocketDescriptor": ('int',), + "QTcpServer.socketDescriptor": (), + "QTcpServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QTcpSocket: + "QTcpSocket.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtNetwork.QUdpSocket: + "QUdpSocket.__init__": ('PySide2.QtCore.QObject',), + "QUdpSocket.hasPendingDatagrams": (), + "QUdpSocket.joinMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.leaveMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.multicastInterface": (), + "QUdpSocket.pendingDatagramSize": (), + "QUdpSocket.readDatagram": ('str', 'int', 'PySide2.QtNetwork.QHostAddress', 'int'), + "QUdpSocket.receiveDatagram": ('int',), + "QUdpSocket.setMulticastInterface": ('PySide2.QtNetwork.QNetworkInterface',), + "QUdpSocket.writeDatagram": [('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHostAddress', 'int'), ('PySide2.QtNetwork.QNetworkDatagram',)], + }) + +# Module PySide2.QtTest +if "PySide2.QtTest" in sys.modules: + dict.update({ + + # class PySide2.QtTest.QTest: + "QTest.addColumnInternal": ('int', 'str'), + "QTest.asciiToKey": ('Union[str, int]',), + "QTest.compare_string_helper": ('str', 'str', 'str', 'str', 'str', 'int'), + "QTest.createTouchDevice": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTest.currentAppName": (), + "QTest.currentDataTag": (), + "QTest.currentTestFailed": (), + "QTest.currentTestFunction": (), + "QTest.ignoreMessage": [('PySide2.QtCore.QtMsgType', 'PySide2.QtCore.QRegularExpression'), ('PySide2.QtCore.QtMsgType', 'str')], + "QTest.keyClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.keyClicks": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.libpyside.KeyboardModifiers', 'int'), + "QTest.keyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.keyPress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.keyRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.keySequence": [('PySide2.QtGui.QWindow', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QKeySequence')], + "QTest.keyToAscii": ('PySide2.QtCore.Qt.Key',), + "QTest.mouseClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseDClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseEvent": [('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseMove": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mousePress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.qCleanup": (), + "QTest.qElementData": ('str', 'int'), + "QTest.qExpectFail": ('str', 'str', 'PySide2.QtTest.QTest.TestFailMode', 'str', 'int'), + "QTest.qFindTestData": ('str', 'str', 'int', 'str'), + "QTest.qGlobalData": ('str', 'int'), + "QTest.qRun": (), + "QTest.qSkip": ('str', 'str', 'int'), + "QTest.qWaitForWindowActive": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.qWaitForWindowExposed": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.sendKeyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'str', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'str', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.setBenchmarkResult": ('float', 'PySide2.QtTest.QTest.QBenchmarkMetric'), + "QTest.setMainSourcePath": ('str', 'str'), + "QTest.simulateEvent": [('PySide2.QtGui.QWindow', 'bool', 'int', 'PySide2.libpyside.KeyboardModifiers', 'str', 'bool', 'int'), ('PySide2.QtWidgets.QWidget', 'bool', 'int', 'PySide2.libpyside.KeyboardModifiers', 'str', 'bool', 'int')], + "QTest.testObject": (), + "QTest.toPrettyCString": ('str', 'int'), + "QTest.touchEvent": [('PySide2.QtGui.QWindow', 'PySide2.QtGui.QTouchDevice', 'bool'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QTouchDevice', 'bool')], + }) + +# Module PySide2.QtConcurrent +if "PySide2.QtConcurrent" in sys.modules: + dict.update({ + + # class PySide2.QtConcurrent.QtConcurrent: + }) + +# Module PySide2.QtX11Extras +if "PySide2.QtX11Extras" in sys.modules: + dict.update({ + + # class PySide2.QtX11Extras.QX11Info: + "QX11Info.appDpiX": ('int',), + "QX11Info.appDpiY": ('int',), + "QX11Info.appRootWindow": ('int',), + "QX11Info.appScreen": (), + "QX11Info.appTime": (), + "QX11Info.appUserTime": (), + "QX11Info.generatePeekerId": (), + "QX11Info.getTimestamp": (), + "QX11Info.isCompositingManagerRunning": ('int',), + "QX11Info.isPlatformX11": (), + "QX11Info.nextStartupId": (), + "QX11Info.removePeekerId": ('int',), + "QX11Info.setAppTime": ('int',), + "QX11Info.setAppUserTime": ('int',), + "QX11Info.setNextStartupId": ('PySide2.QtCore.QByteArray',), + }) + +# Module PySide2.QtXml +if "PySide2.QtXml" in sys.modules: + dict.update({ + + # class PySide2.QtXml.QDomAttr: + "QDomAttr.__init__": [(), ('PySide2.QtXml.QDomAttr',)], + "QDomAttr.__copy__": (), + "QDomAttr.name": (), + "QDomAttr.nodeType": (), + "QDomAttr.ownerElement": (), + "QDomAttr.setValue": ('str',), + "QDomAttr.specified": (), + "QDomAttr.value": (), + + # class PySide2.QtXml.QDomCDATASection: + "QDomCDATASection.__init__": [(), ('PySide2.QtXml.QDomCDATASection',)], + "QDomCDATASection.__copy__": (), + "QDomCDATASection.nodeType": (), + + # class PySide2.QtXml.QDomCharacterData: + "QDomCharacterData.__init__": [(), ('PySide2.QtXml.QDomCharacterData',)], + "QDomCharacterData.__copy__": (), + "QDomCharacterData.appendData": ('str',), + "QDomCharacterData.data": (), + "QDomCharacterData.deleteData": ('int', 'int'), + "QDomCharacterData.insertData": ('int', 'str'), + "QDomCharacterData.length": (), + "QDomCharacterData.nodeType": (), + "QDomCharacterData.replaceData": ('int', 'int', 'str'), + "QDomCharacterData.setData": ('str',), + "QDomCharacterData.substringData": ('int', 'int'), + + # class PySide2.QtXml.QDomComment: + "QDomComment.__init__": [(), ('PySide2.QtXml.QDomComment',)], + "QDomComment.__copy__": (), + "QDomComment.nodeType": (), + + # class PySide2.QtXml.QDomDocument: + "QDomDocument.__init__": [(), ('PySide2.QtXml.QDomDocument',), ('PySide2.QtXml.QDomDocumentType',), ('str',)], + "QDomDocument.__copy__": (), + "QDomDocument.createAttribute": ('str',), + "QDomDocument.createAttributeNS": ('str', 'str'), + "QDomDocument.createCDATASection": ('str',), + "QDomDocument.createComment": ('str',), + "QDomDocument.createDocumentFragment": (), + "QDomDocument.createElement": ('str',), + "QDomDocument.createElementNS": ('str', 'str'), + "QDomDocument.createEntityReference": ('str',), + "QDomDocument.createProcessingInstruction": ('str', 'str'), + "QDomDocument.createTextNode": ('str',), + "QDomDocument.doctype": (), + "QDomDocument.documentElement": (), + "QDomDocument.elementById": ('str',), + "QDomDocument.elementsByTagName": ('str',), + "QDomDocument.elementsByTagNameNS": ('str', 'str'), + "QDomDocument.implementation": (), + "QDomDocument.importNode": ('PySide2.QtXml.QDomNode', 'bool'), + "QDomDocument.nodeType": (), + "QDomDocument.setContent": [('PySide2.QtCore.QByteArray', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QByteArray', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'PySide2.QtXml.QXmlReader', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'bool', 'str', 'int', 'int'), ('str', 'bool', 'str', 'int', 'int'), ('str', 'str', 'int', 'int')], + "QDomDocument.toByteArray": ('int',), + "QDomDocument.toString": ('int',), + + # class PySide2.QtXml.QDomDocumentFragment: + "QDomDocumentFragment.__init__": [(), ('PySide2.QtXml.QDomDocumentFragment',)], + "QDomDocumentFragment.__copy__": (), + "QDomDocumentFragment.nodeType": (), + + # class PySide2.QtXml.QDomDocumentType: + "QDomDocumentType.__init__": [(), ('PySide2.QtXml.QDomDocumentType',)], + "QDomDocumentType.__copy__": (), + "QDomDocumentType.entities": (), + "QDomDocumentType.internalSubset": (), + "QDomDocumentType.name": (), + "QDomDocumentType.nodeType": (), + "QDomDocumentType.notations": (), + "QDomDocumentType.publicId": (), + "QDomDocumentType.systemId": (), + + # class PySide2.QtXml.QDomElement: + "QDomElement.__init__": [(), ('PySide2.QtXml.QDomElement',)], + "QDomElement.__copy__": (), + "QDomElement.attribute": ('str', 'str'), + "QDomElement.attributeNS": ('str', 'str', 'str'), + "QDomElement.attributeNode": ('str',), + "QDomElement.attributeNodeNS": ('str', 'str'), + "QDomElement.attributes": (), + "QDomElement.elementsByTagName": ('str',), + "QDomElement.elementsByTagNameNS": ('str', 'str'), + "QDomElement.hasAttribute": ('str',), + "QDomElement.hasAttributeNS": ('str', 'str'), + "QDomElement.nodeType": (), + "QDomElement.removeAttribute": ('str',), + "QDomElement.removeAttributeNS": ('str', 'str'), + "QDomElement.removeAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttribute": [('str', 'float'), ('str', 'int'), ('str', 'str')], + "QDomElement.setAttributeNS": [('str', 'str', 'float'), ('str', 'str', 'int'), ('str', 'str', 'str')], + "QDomElement.setAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttributeNodeNS": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setTagName": ('str',), + "QDomElement.tagName": (), + "QDomElement.text": (), + + # class PySide2.QtXml.QDomEntity: + "QDomEntity.__init__": [(), ('PySide2.QtXml.QDomEntity',)], + "QDomEntity.__copy__": (), + "QDomEntity.nodeType": (), + "QDomEntity.notationName": (), + "QDomEntity.publicId": (), + "QDomEntity.systemId": (), + + # class PySide2.QtXml.QDomEntityReference: + "QDomEntityReference.__init__": [(), ('PySide2.QtXml.QDomEntityReference',)], + "QDomEntityReference.__copy__": (), + "QDomEntityReference.nodeType": (), + + # class PySide2.QtXml.QDomImplementation: + "QDomImplementation.__init__": [(), ('PySide2.QtXml.QDomImplementation',)], + "QDomImplementation.__copy__": (), + "QDomImplementation.createDocument": ('str', 'str', 'PySide2.QtXml.QDomDocumentType'), + "QDomImplementation.createDocumentType": ('str', 'str', 'str'), + "QDomImplementation.hasFeature": ('str', 'str'), + "QDomImplementation.invalidDataPolicy": (), + "QDomImplementation.isNull": (), + "QDomImplementation.setInvalidDataPolicy": ('PySide2.QtXml.QDomImplementation.InvalidDataPolicy',), + + # class PySide2.QtXml.QDomNamedNodeMap: + "QDomNamedNodeMap.__init__": [(), ('PySide2.QtXml.QDomNamedNodeMap',)], + "QDomNamedNodeMap.__copy__": (), + "QDomNamedNodeMap.contains": ('str',), + "QDomNamedNodeMap.count": (), + "QDomNamedNodeMap.isEmpty": (), + "QDomNamedNodeMap.item": ('int',), + "QDomNamedNodeMap.length": (), + "QDomNamedNodeMap.namedItem": ('str',), + "QDomNamedNodeMap.namedItemNS": ('str', 'str'), + "QDomNamedNodeMap.removeNamedItem": ('str',), + "QDomNamedNodeMap.removeNamedItemNS": ('str', 'str'), + "QDomNamedNodeMap.setNamedItem": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.setNamedItemNS": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.size": (), + + # class PySide2.QtXml.QDomNode: + "QDomNode.__init__": [(), ('PySide2.QtXml.QDomNode',)], + "QDomNode.__copy__": (), + "QDomNode.appendChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.attributes": (), + "QDomNode.childNodes": (), + "QDomNode.clear": (), + "QDomNode.cloneNode": ('bool',), + "QDomNode.columnNumber": (), + "QDomNode.firstChild": (), + "QDomNode.firstChildElement": ('str',), + "QDomNode.hasAttributes": (), + "QDomNode.hasChildNodes": (), + "QDomNode.insertAfter": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.insertBefore": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.isAttr": (), + "QDomNode.isCDATASection": (), + "QDomNode.isCharacterData": (), + "QDomNode.isComment": (), + "QDomNode.isDocument": (), + "QDomNode.isDocumentFragment": (), + "QDomNode.isDocumentType": (), + "QDomNode.isElement": (), + "QDomNode.isEntity": (), + "QDomNode.isEntityReference": (), + "QDomNode.isNotation": (), + "QDomNode.isNull": (), + "QDomNode.isProcessingInstruction": (), + "QDomNode.isSupported": ('str', 'str'), + "QDomNode.isText": (), + "QDomNode.lastChild": (), + "QDomNode.lastChildElement": ('str',), + "QDomNode.lineNumber": (), + "QDomNode.localName": (), + "QDomNode.namedItem": ('str',), + "QDomNode.namespaceURI": (), + "QDomNode.nextSibling": (), + "QDomNode.nextSiblingElement": ('str',), + "QDomNode.nodeName": (), + "QDomNode.nodeType": (), + "QDomNode.nodeValue": (), + "QDomNode.normalize": (), + "QDomNode.ownerDocument": (), + "QDomNode.parentNode": (), + "QDomNode.prefix": (), + "QDomNode.previousSibling": (), + "QDomNode.previousSiblingElement": ('str',), + "QDomNode.removeChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.replaceChild": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.save": ('PySide2.QtCore.QTextStream', 'int', 'PySide2.QtXml.QDomNode.EncodingPolicy'), + "QDomNode.setNodeValue": ('str',), + "QDomNode.setPrefix": ('str',), + "QDomNode.toAttr": (), + "QDomNode.toCDATASection": (), + "QDomNode.toCharacterData": (), + "QDomNode.toComment": (), + "QDomNode.toDocument": (), + "QDomNode.toDocumentFragment": (), + "QDomNode.toDocumentType": (), + "QDomNode.toElement": (), + "QDomNode.toEntity": (), + "QDomNode.toEntityReference": (), + "QDomNode.toNotation": (), + "QDomNode.toProcessingInstruction": (), + "QDomNode.toText": (), + + # class PySide2.QtXml.QDomNodeList: + "QDomNodeList.__init__": [(), ('PySide2.QtXml.QDomNodeList',)], + "QDomNodeList.__copy__": (), + "QDomNodeList.at": ('int',), + "QDomNodeList.count": (), + "QDomNodeList.isEmpty": (), + "QDomNodeList.item": ('int',), + "QDomNodeList.length": (), + "QDomNodeList.size": (), + + # class PySide2.QtXml.QDomNotation: + "QDomNotation.__init__": [(), ('PySide2.QtXml.QDomNotation',)], + "QDomNotation.__copy__": (), + "QDomNotation.nodeType": (), + "QDomNotation.publicId": (), + "QDomNotation.systemId": (), + + # class PySide2.QtXml.QDomProcessingInstruction: + "QDomProcessingInstruction.__init__": [(), ('PySide2.QtXml.QDomProcessingInstruction',)], + "QDomProcessingInstruction.__copy__": (), + "QDomProcessingInstruction.data": (), + "QDomProcessingInstruction.nodeType": (), + "QDomProcessingInstruction.setData": ('str',), + "QDomProcessingInstruction.target": (), + + # class PySide2.QtXml.QDomText: + "QDomText.__init__": [(), ('PySide2.QtXml.QDomText',)], + "QDomText.__copy__": (), + "QDomText.nodeType": (), + "QDomText.splitText": ('int',), + + # class PySide2.QtXml.QXmlAttributes: + "QXmlAttributes.__init__": [(), ('PySide2.QtXml.QXmlAttributes',)], + "QXmlAttributes.__copy__": (), + "QXmlAttributes.append": ('str', 'str', 'str', 'str'), + "QXmlAttributes.clear": (), + "QXmlAttributes.count": (), + "QXmlAttributes.index": [('str',), ('str', 'str')], + "QXmlAttributes.length": (), + "QXmlAttributes.localName": ('int',), + "QXmlAttributes.qName": ('int',), + "QXmlAttributes.swap": ('PySide2.QtXml.QXmlAttributes',), + "QXmlAttributes.type": [('int',), ('str',), ('str', 'str')], + "QXmlAttributes.uri": ('int',), + "QXmlAttributes.value": [('int',), ('str',), ('str', 'str')], + + # class PySide2.QtXml.QXmlContentHandler: + "QXmlContentHandler.__init__": (), + "QXmlContentHandler.characters": ('str',), + "QXmlContentHandler.endDocument": (), + "QXmlContentHandler.endElement": ('str', 'str', 'str'), + "QXmlContentHandler.endPrefixMapping": ('str',), + "QXmlContentHandler.errorString": (), + "QXmlContentHandler.ignorableWhitespace": ('str',), + "QXmlContentHandler.processingInstruction": ('str', 'str'), + "QXmlContentHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlContentHandler.skippedEntity": ('str',), + "QXmlContentHandler.startDocument": (), + "QXmlContentHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlContentHandler.startPrefixMapping": ('str', 'str'), + + # class PySide2.QtXml.QXmlDTDHandler: + "QXmlDTDHandler.__init__": (), + "QXmlDTDHandler.errorString": (), + "QXmlDTDHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDTDHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + + # class PySide2.QtXml.QXmlDeclHandler: + "QXmlDeclHandler.__init__": (), + "QXmlDeclHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDeclHandler.errorString": (), + "QXmlDeclHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDeclHandler.internalEntityDecl": ('str', 'str'), + + # class PySide2.QtXml.QXmlDefaultHandler: + "QXmlDefaultHandler.__init__": (), + "QXmlDefaultHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDefaultHandler.characters": ('str',), + "QXmlDefaultHandler.comment": ('str',), + "QXmlDefaultHandler.endCDATA": (), + "QXmlDefaultHandler.endDTD": (), + "QXmlDefaultHandler.endDocument": (), + "QXmlDefaultHandler.endElement": ('str', 'str', 'str'), + "QXmlDefaultHandler.endEntity": ('str',), + "QXmlDefaultHandler.endPrefixMapping": ('str',), + "QXmlDefaultHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.errorString": (), + "QXmlDefaultHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.ignorableWhitespace": ('str',), + "QXmlDefaultHandler.internalEntityDecl": ('str', 'str'), + "QXmlDefaultHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.processingInstruction": ('str', 'str'), + "QXmlDefaultHandler.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + "QXmlDefaultHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlDefaultHandler.skippedEntity": ('str',), + "QXmlDefaultHandler.startCDATA": (), + "QXmlDefaultHandler.startDTD": ('str', 'str', 'str'), + "QXmlDefaultHandler.startDocument": (), + "QXmlDefaultHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlDefaultHandler.startEntity": ('str',), + "QXmlDefaultHandler.startPrefixMapping": ('str', 'str'), + "QXmlDefaultHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + "QXmlDefaultHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlEntityResolver: + "QXmlEntityResolver.__init__": (), + "QXmlEntityResolver.errorString": (), + "QXmlEntityResolver.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + + # class PySide2.QtXml.QXmlErrorHandler: + "QXmlErrorHandler.__init__": (), + "QXmlErrorHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.errorString": (), + "QXmlErrorHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlInputSource: + "QXmlInputSource.__init__": [(), ('PySide2.QtCore.QIODevice',)], + "QXmlInputSource.data": (), + "QXmlInputSource.fetchData": (), + "QXmlInputSource.fromRawData": ('PySide2.QtCore.QByteArray', 'bool'), + "QXmlInputSource.reset": (), + "QXmlInputSource.setData": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtXml.QXmlLexicalHandler: + "QXmlLexicalHandler.__init__": (), + "QXmlLexicalHandler.comment": ('str',), + "QXmlLexicalHandler.endCDATA": (), + "QXmlLexicalHandler.endDTD": (), + "QXmlLexicalHandler.endEntity": ('str',), + "QXmlLexicalHandler.errorString": (), + "QXmlLexicalHandler.startCDATA": (), + "QXmlLexicalHandler.startDTD": ('str', 'str', 'str'), + "QXmlLexicalHandler.startEntity": ('str',), + + # class PySide2.QtXml.QXmlLocator: + "QXmlLocator.__init__": (), + "QXmlLocator.columnNumber": (), + "QXmlLocator.lineNumber": (), + + # class PySide2.QtXml.QXmlNamespaceSupport: + "QXmlNamespaceSupport.__init__": (), + "QXmlNamespaceSupport.popContext": (), + "QXmlNamespaceSupport.prefix": ('str',), + "QXmlNamespaceSupport.prefixes": [(), ('str',)], + "QXmlNamespaceSupport.processName": ('str', 'bool', 'str', 'str'), + "QXmlNamespaceSupport.pushContext": (), + "QXmlNamespaceSupport.reset": (), + "QXmlNamespaceSupport.setPrefix": ('str', 'str'), + "QXmlNamespaceSupport.splitName": ('str', 'str', 'str'), + "QXmlNamespaceSupport.uri": ('str',), + + # class PySide2.QtXml.QXmlParseException: + "QXmlParseException.__init__": [('PySide2.QtXml.QXmlParseException',), ('str', 'int', 'int', 'str', 'str')], + "QXmlParseException.columnNumber": (), + "QXmlParseException.lineNumber": (), + "QXmlParseException.message": (), + "QXmlParseException.publicId": (), + "QXmlParseException.systemId": (), + + # class PySide2.QtXml.QXmlReader: + "QXmlReader.__init__": (), + "QXmlReader.DTDHandler": (), + "QXmlReader.contentHandler": (), + "QXmlReader.declHandler": (), + "QXmlReader.entityResolver": (), + "QXmlReader.errorHandler": (), + "QXmlReader.feature": ('str', 'bool'), + "QXmlReader.hasFeature": ('str',), + "QXmlReader.hasProperty": ('str',), + "QXmlReader.lexicalHandler": (), + "QXmlReader.parse": ('PySide2.QtXml.QXmlInputSource',), + "QXmlReader.property": ('str', 'bool'), + "QXmlReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlReader.setFeature": ('str', 'bool'), + "QXmlReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlReader.setProperty": ('str', 'int'), + + # class PySide2.QtXml.QXmlSimpleReader: + "QXmlSimpleReader.__init__": (), + "QXmlSimpleReader.DTDHandler": (), + "QXmlSimpleReader.contentHandler": (), + "QXmlSimpleReader.declHandler": (), + "QXmlSimpleReader.entityResolver": (), + "QXmlSimpleReader.errorHandler": (), + "QXmlSimpleReader.feature": ('str', 'bool'), + "QXmlSimpleReader.hasFeature": ('str',), + "QXmlSimpleReader.hasProperty": ('str',), + "QXmlSimpleReader.lexicalHandler": (), + "QXmlSimpleReader.parse": [('PySide2.QtXml.QXmlInputSource',), ('PySide2.QtXml.QXmlInputSource', 'bool')], + "QXmlSimpleReader.parseContinue": (), + "QXmlSimpleReader.property": ('str', 'bool'), + "QXmlSimpleReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlSimpleReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlSimpleReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlSimpleReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlSimpleReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlSimpleReader.setFeature": ('str', 'bool'), + "QXmlSimpleReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlSimpleReader.setProperty": ('str', 'int'), + }) + +# Module PySide2.QtXmlPatterns +if "PySide2.QtXmlPatterns" in sys.modules: + dict.update({ + + # class PySide2.QtXmlPatterns.QAbstractMessageHandler: + "QAbstractMessageHandler.__init__": ('PySide2.QtCore.QObject',), + "QAbstractMessageHandler.handleMessage": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + "QAbstractMessageHandler.message": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + + # class PySide2.QtXmlPatterns.QAbstractUriResolver: + "QAbstractUriResolver.__init__": ('PySide2.QtCore.QObject',), + "QAbstractUriResolver.resolve": ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtXmlPatterns.QAbstractXmlNodeModel: + "QAbstractXmlNodeModel.__init__": (), + "QAbstractXmlNodeModel.attributes": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.baseUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.compareOrder": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.createIndex": [('int',), ('int', 'int')], + "QAbstractXmlNodeModel.documentUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.elementById": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.isDeepEqual": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.kind": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.name": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceBindings": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceForPrefix": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'Missing(PySide2.QtXmlPatterns.QXmlName.PrefixCode)'), + "QAbstractXmlNodeModel.nextFromSimpleAxis": ('PySide2.QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.nodesByIdref": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.root": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.sendNamespaces": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QAbstractXmlReceiver'), + "QAbstractXmlNodeModel.sourceLocation": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.stringValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.typedValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + + # class PySide2.QtXmlPatterns.QAbstractXmlReceiver: + "QAbstractXmlReceiver.__init__": (), + "QAbstractXmlReceiver.atomicValue": ('Any',), + "QAbstractXmlReceiver.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.characters": ('str',), + "QAbstractXmlReceiver.comment": ('str',), + "QAbstractXmlReceiver.endDocument": (), + "QAbstractXmlReceiver.endElement": (), + "QAbstractXmlReceiver.endOfSequence": (), + "QAbstractXmlReceiver.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.startDocument": (), + "QAbstractXmlReceiver.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.startOfSequence": (), + "QAbstractXmlReceiver.whitespaceOnly": ('str',), + + # class PySide2.QtXmlPatterns.QSourceLocation: + "QSourceLocation.__init__": [(), ('PySide2.QtCore.QUrl', 'int', 'int'), ('PySide2.QtXmlPatterns.QSourceLocation',)], + "QSourceLocation.__copy__": (), + "QSourceLocation.column": (), + "QSourceLocation.isNull": (), + "QSourceLocation.line": (), + "QSourceLocation.setColumn": ('int',), + "QSourceLocation.setLine": ('int',), + "QSourceLocation.setUri": ('PySide2.QtCore.QUrl',), + "QSourceLocation.uri": (), + + # class PySide2.QtXmlPatterns.QXmlFormatter: + "QXmlFormatter.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlFormatter.atomicValue": ('Any',), + "QXmlFormatter.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.characters": ('str',), + "QXmlFormatter.comment": ('str',), + "QXmlFormatter.endDocument": (), + "QXmlFormatter.endElement": (), + "QXmlFormatter.endOfSequence": (), + "QXmlFormatter.indentationDepth": (), + "QXmlFormatter.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.setIndentationDepth": ('int',), + "QXmlFormatter.startDocument": (), + "QXmlFormatter.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlFormatter.startOfSequence": (), + + # class PySide2.QtXmlPatterns.QXmlItem: + "QXmlItem.__init__": [(), ('Any',), ('PySide2.QtXmlPatterns.QXmlItem',), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlItem.__copy__": (), + "QXmlItem.isAtomicValue": (), + "QXmlItem.isNode": (), + "QXmlItem.isNull": (), + "QXmlItem.toAtomicValue": (), + "QXmlItem.toNodeModelIndex": (), + + # class PySide2.QtXmlPatterns.QXmlName: + "QXmlName.__init__": [(), ('PySide2.QtXmlPatterns.QXmlName',), ('PySide2.QtXmlPatterns.QXmlNamePool', 'str', 'str', 'str')], + "QXmlName.__copy__": (), + "QXmlName.fromClarkName": ('str', 'PySide2.QtXmlPatterns.QXmlNamePool'), + "QXmlName.isNCName": ('str',), + "QXmlName.isNull": (), + "QXmlName.localName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.namespaceUri": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.prefix": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.toClarkName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + + # class PySide2.QtXmlPatterns.QXmlNamePool: + "QXmlNamePool.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',)], + "QXmlNamePool.__copy__": (), + + # class PySide2.QtXmlPatterns.QXmlNodeModelIndex: + "QXmlNodeModelIndex.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlNodeModelIndex.__copy__": (), + "QXmlNodeModelIndex.additionalData": (), + "QXmlNodeModelIndex.data": (), + "QXmlNodeModelIndex.internalPointer": (), + "QXmlNodeModelIndex.isNull": (), + "QXmlNodeModelIndex.model": (), + + # class PySide2.QtXmlPatterns.QXmlQuery: + "QXmlQuery.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',), ('PySide2.QtXmlPatterns.QXmlQuery',), ('PySide2.QtXmlPatterns.QXmlQuery.QueryLanguage', 'PySide2.QtXmlPatterns.QXmlNamePool')], + "QXmlQuery.__copy__": (), + "QXmlQuery.bindVariable": [('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtCore.QIODevice'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlItem'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlQuery'), ('str', 'PySide2.QtCore.QIODevice'), ('str', 'PySide2.QtXmlPatterns.QXmlItem'), ('str', 'PySide2.QtXmlPatterns.QXmlQuery')], + "QXmlQuery.evaluateTo": [('PySide2.QtCore.QIODevice',), ('PySide2.QtXmlPatterns.QAbstractXmlReceiver',), ('PySide2.QtXmlPatterns.QXmlResultItems',)], + "QXmlQuery.initialTemplateName": (), + "QXmlQuery.isValid": (), + "QXmlQuery.messageHandler": (), + "QXmlQuery.namePool": (), + "QXmlQuery.queryLanguage": (), + "QXmlQuery.setFocus": [('PySide2.QtCore.QIODevice',), ('PySide2.QtCore.QUrl',), ('PySide2.QtXmlPatterns.QXmlItem',), ('str',)], + "QXmlQuery.setInitialTemplateName": [('PySide2.QtXmlPatterns.QXmlName',), ('str',)], + "QXmlQuery.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlQuery.setQuery": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), ('str', 'PySide2.QtCore.QUrl')], + "QXmlQuery.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlQuery.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlResultItems: + "QXmlResultItems.__init__": (), + "QXmlResultItems.current": (), + "QXmlResultItems.hasError": (), + + # class PySide2.QtXmlPatterns.QXmlSchema: + "QXmlSchema.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchema.documentUri": (), + "QXmlSchema.isValid": (), + "QXmlSchema.load": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + "QXmlSchema.messageHandler": (), + "QXmlSchema.namePool": (), + "QXmlSchema.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchema.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchema.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlSchemaValidator: + "QXmlSchemaValidator.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchemaValidator.messageHandler": (), + "QXmlSchemaValidator.namePool": (), + "QXmlSchemaValidator.schema": (), + "QXmlSchemaValidator.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchemaValidator.setSchema": ('PySide2.QtXmlPatterns.QXmlSchema',), + "QXmlSchemaValidator.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchemaValidator.uriResolver": (), + "QXmlSchemaValidator.validate": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + + # class PySide2.QtXmlPatterns.QXmlSerializer: + "QXmlSerializer.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlSerializer.atomicValue": ('Any',), + "QXmlSerializer.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.characters": ('str',), + "QXmlSerializer.codec": (), + "QXmlSerializer.comment": ('str',), + "QXmlSerializer.endDocument": (), + "QXmlSerializer.endElement": (), + "QXmlSerializer.endOfSequence": (), + "QXmlSerializer.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.outputDevice": (), + "QXmlSerializer.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.setCodec": ('PySide2.QtCore.QTextCodec',), + "QXmlSerializer.startDocument": (), + "QXmlSerializer.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.startOfSequence": (), + }) + +# Module PySide2.QtHelp +if "PySide2.QtHelp" in sys.modules: + dict.update({ + + # class PySide2.QtHelp.QHelpContentItem: + "QHelpContentItem.__copy__": (), + "QHelpContentItem.child": ('int',), + "QHelpContentItem.childCount": (), + "QHelpContentItem.childPosition": ('PySide2.QtHelp.QHelpContentItem',), + "QHelpContentItem.parent": (), + "QHelpContentItem.row": (), + "QHelpContentItem.title": (), + "QHelpContentItem.url": (), + + # class PySide2.QtHelp.QHelpContentModel: + "QHelpContentModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.contentItemAt": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.createContents": ('str',), + "QHelpContentModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QHelpContentModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QHelpContentModel.isCreatingContents": (), + "QHelpContentModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QHelpContentModel.rowCount": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtHelp.QHelpContentWidget: + "QHelpContentWidget.indexOf": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtHelp.QHelpEngine: + "QHelpEngine.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngine.contentModel": (), + "QHelpEngine.contentWidget": (), + "QHelpEngine.indexModel": (), + "QHelpEngine.indexWidget": (), + "QHelpEngine.searchEngine": (), + + # class PySide2.QtHelp.QHelpEngineCore: + "QHelpEngineCore.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngineCore.addCustomFilter": ('str', 'List[str]'), + "QHelpEngineCore.autoSaveFilter": (), + "QHelpEngineCore.collectionFile": (), + "QHelpEngineCore.copyCollectionFile": ('str',), + "QHelpEngineCore.currentFilter": (), + "QHelpEngineCore.customFilters": (), + "QHelpEngineCore.customValue": ('str', 'Any'), + "QHelpEngineCore.documentationFileName": ('str',), + "QHelpEngineCore.error": (), + "QHelpEngineCore.fileData": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.files": ('str', 'List[str]', 'str'), + "QHelpEngineCore.filterAttributeSets": ('str',), + "QHelpEngineCore.filterAttributes": [(), ('str',)], + "QHelpEngineCore.findFile": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.linksForIdentifier": ('str',), + "QHelpEngineCore.linksForKeyword": ('str',), + "QHelpEngineCore.metaData": ('str', 'str'), + "QHelpEngineCore.namespaceName": ('str',), + "QHelpEngineCore.registerDocumentation": ('str',), + "QHelpEngineCore.registeredDocumentations": (), + "QHelpEngineCore.removeCustomFilter": ('str',), + "QHelpEngineCore.removeCustomValue": ('str',), + "QHelpEngineCore.setAutoSaveFilter": ('bool',), + "QHelpEngineCore.setCollectionFile": ('str',), + "QHelpEngineCore.setCurrentFilter": ('str',), + "QHelpEngineCore.setCustomValue": ('str', 'Any'), + "QHelpEngineCore.setupData": (), + "QHelpEngineCore.unregisterDocumentation": ('str',), + + # class PySide2.QtHelp.QHelpIndexModel: + "QHelpIndexModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object'), ('str',)], + "QHelpIndexModel.filter": ('str', 'str'), + "QHelpIndexModel.isCreatingIndex": (), + "QHelpIndexModel.linksForKeyword": ('str',), + + # class PySide2.QtHelp.QHelpIndexWidget: + "QHelpIndexWidget.activateCurrentItem": (), + "QHelpIndexWidget.filterIndices": ('str', 'str'), + + # class PySide2.QtHelp.QHelpSearchEngine: + "QHelpSearchEngine.__init__": ('PySide2.QtHelp.QHelpEngineCore', 'PySide2.QtCore.QObject'), + "QHelpSearchEngine.cancelIndexing": (), + "QHelpSearchEngine.cancelSearching": (), + "QHelpSearchEngine.hitCount": (), + "QHelpSearchEngine.hitsCount": (), + "QHelpSearchEngine.query": (), + "QHelpSearchEngine.queryWidget": (), + "QHelpSearchEngine.reindexDocumentation": (), + "QHelpSearchEngine.resultWidget": (), + "QHelpSearchEngine.scheduleIndexDocumentation": (), + "QHelpSearchEngine.search": [('list',), ('str',)], + "QHelpSearchEngine.searchInput": (), + "QHelpSearchEngine.searchResultCount": (), + "QHelpSearchEngine.searchResults": ('int', 'int'), + + # class PySide2.QtHelp.QHelpSearchQuery: + "QHelpSearchQuery.__init__": [(), ('PySide2.QtHelp.QHelpSearchQuery',), ('PySide2.QtHelp.QHelpSearchQuery.FieldName', 'List[str]')], + "QHelpSearchQuery.__copy__": (), + + # class PySide2.QtHelp.QHelpSearchQueryWidget: + "QHelpSearchQueryWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QHelpSearchQueryWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchQueryWidget.collapseExtendedSearch": (), + "QHelpSearchQueryWidget.expandExtendedSearch": (), + "QHelpSearchQueryWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QHelpSearchQueryWidget.isCompactMode": (), + "QHelpSearchQueryWidget.query": (), + "QHelpSearchQueryWidget.searchInput": (), + "QHelpSearchQueryWidget.setCompactMode": ('bool',), + "QHelpSearchQueryWidget.setQuery": ('list',), + "QHelpSearchQueryWidget.setSearchInput": ('str',), + + # class PySide2.QtHelp.QHelpSearchResult: + "QHelpSearchResult.__init__": [(), ('PySide2.QtCore.QUrl', 'str', 'str'), ('PySide2.QtHelp.QHelpSearchResult',)], + "QHelpSearchResult.snippet": (), + "QHelpSearchResult.title": (), + "QHelpSearchResult.url": (), + + # class PySide2.QtHelp.QHelpSearchResultWidget: + "QHelpSearchResultWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchResultWidget.linkAt": ('PySide2.QtCore.QPoint',), + }) + +# Module PySide2.QtMultimedia +if "PySide2.QtMultimedia" in sys.modules: + dict.update({ + + # class PySide2.QtMultimedia.QAbstractAudioDeviceInfo: + "QAbstractAudioDeviceInfo.__init__": (), + "QAbstractAudioDeviceInfo.deviceName": (), + "QAbstractAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioDeviceInfo.preferredFormat": (), + "QAbstractAudioDeviceInfo.supportedByteOrders": (), + "QAbstractAudioDeviceInfo.supportedChannelCounts": (), + "QAbstractAudioDeviceInfo.supportedCodecs": (), + "QAbstractAudioDeviceInfo.supportedSampleRates": (), + "QAbstractAudioDeviceInfo.supportedSampleSizes": (), + "QAbstractAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAbstractAudioInput: + "QAbstractAudioInput.__init__": (), + "QAbstractAudioInput.bufferSize": (), + "QAbstractAudioInput.bytesReady": (), + "QAbstractAudioInput.elapsedUSecs": (), + "QAbstractAudioInput.error": (), + "QAbstractAudioInput.format": (), + "QAbstractAudioInput.notifyInterval": (), + "QAbstractAudioInput.periodSize": (), + "QAbstractAudioInput.processedUSecs": (), + "QAbstractAudioInput.reset": (), + "QAbstractAudioInput.resume": (), + "QAbstractAudioInput.setBufferSize": ('int',), + "QAbstractAudioInput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioInput.setNotifyInterval": ('int',), + "QAbstractAudioInput.setVolume": ('float',), + "QAbstractAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioInput.state": (), + "QAbstractAudioInput.stop": (), + "QAbstractAudioInput.suspend": (), + "QAbstractAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAbstractAudioOutput: + "QAbstractAudioOutput.__init__": (), + "QAbstractAudioOutput.bufferSize": (), + "QAbstractAudioOutput.bytesFree": (), + "QAbstractAudioOutput.category": (), + "QAbstractAudioOutput.elapsedUSecs": (), + "QAbstractAudioOutput.error": (), + "QAbstractAudioOutput.format": (), + "QAbstractAudioOutput.notifyInterval": (), + "QAbstractAudioOutput.periodSize": (), + "QAbstractAudioOutput.processedUSecs": (), + "QAbstractAudioOutput.reset": (), + "QAbstractAudioOutput.resume": (), + "QAbstractAudioOutput.setBufferSize": ('int',), + "QAbstractAudioOutput.setCategory": ('str',), + "QAbstractAudioOutput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioOutput.setNotifyInterval": ('int',), + "QAbstractAudioOutput.setVolume": ('float',), + "QAbstractAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioOutput.state": (), + "QAbstractAudioOutput.stop": (), + "QAbstractAudioOutput.suspend": (), + "QAbstractAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAbstractVideoBuffer: + "QAbstractVideoBuffer.__init__": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoBuffer.handle": (), + "QAbstractVideoBuffer.handleType": (), + "QAbstractVideoBuffer.mapMode": (), + "QAbstractVideoBuffer.release": (), + "QAbstractVideoBuffer.unmap": (), + + # class PySide2.QtMultimedia.QAbstractVideoFilter: + "QAbstractVideoFilter.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoFilter.createFilterRunnable": (), + "QAbstractVideoFilter.isActive": (), + "QAbstractVideoFilter.setActive": ('bool',), + + # class PySide2.QtMultimedia.QAbstractVideoSurface: + "QAbstractVideoSurface.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoSurface.error": (), + "QAbstractVideoSurface.isActive": (), + "QAbstractVideoSurface.isFormatSupported": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.nativeResolution": (), + "QAbstractVideoSurface.nearestFormat": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.present": ('PySide2.QtMultimedia.QVideoFrame',), + "QAbstractVideoSurface.setError": ('PySide2.QtMultimedia.QAbstractVideoSurface.Error',), + "QAbstractVideoSurface.setNativeResolution": ('PySide2.QtCore.QSize',), + "QAbstractVideoSurface.start": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.stop": (), + "QAbstractVideoSurface.supportedPixelFormats": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoSurface.surfaceFormat": (), + + # class PySide2.QtMultimedia.QAudio: + "QAudio.convertVolume": ('float', 'PySide2.QtMultimedia.QAudio.VolumeScale', 'PySide2.QtMultimedia.QAudio.VolumeScale'), + + # class PySide2.QtMultimedia.QAudioBuffer: + "QAudioBuffer.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtMultimedia.QAudioFormat', 'int'), ('PySide2.QtMultimedia.QAudioBuffer',), ('int', 'PySide2.QtMultimedia.QAudioFormat', 'int')], + "QAudioBuffer.__copy__": (), + "QAudioBuffer.byteCount": (), + "QAudioBuffer.constData": (), + "QAudioBuffer.data": (), + "QAudioBuffer.duration": (), + "QAudioBuffer.format": (), + "QAudioBuffer.frameCount": (), + "QAudioBuffer.isValid": (), + "QAudioBuffer.sampleCount": (), + "QAudioBuffer.startTime": (), + + # class PySide2.QtMultimedia.QAudioDecoder: + "QAudioDecoder.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoder.audioFormat": (), + "QAudioDecoder.bind": ('PySide2.QtCore.QObject',), + "QAudioDecoder.bufferAvailable": (), + "QAudioDecoder.duration": (), + "QAudioDecoder.errorString": (), + "QAudioDecoder.hasSupport": ('str', 'List[str]'), + "QAudioDecoder.position": (), + "QAudioDecoder.read": (), + "QAudioDecoder.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoder.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoder.setSourceFilename": ('str',), + "QAudioDecoder.sourceDevice": (), + "QAudioDecoder.sourceFilename": (), + "QAudioDecoder.start": (), + "QAudioDecoder.state": (), + "QAudioDecoder.stop": (), + "QAudioDecoder.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QAudioDecoderControl: + "QAudioDecoderControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoderControl.audioFormat": (), + "QAudioDecoderControl.bufferAvailable": (), + "QAudioDecoderControl.duration": (), + "QAudioDecoderControl.position": (), + "QAudioDecoderControl.read": (), + "QAudioDecoderControl.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoderControl.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoderControl.setSourceFilename": ('str',), + "QAudioDecoderControl.sourceDevice": (), + "QAudioDecoderControl.sourceFilename": (), + "QAudioDecoderControl.start": (), + "QAudioDecoderControl.state": (), + "QAudioDecoderControl.stop": (), + + # class PySide2.QtMultimedia.QAudioDeviceInfo: + "QAudioDeviceInfo.__init__": [(), ('PySide2.QtMultimedia.QAudioDeviceInfo',)], + "QAudioDeviceInfo.__copy__": (), + "QAudioDeviceInfo.availableDevices": ('PySide2.QtMultimedia.QAudio.Mode',), + "QAudioDeviceInfo.defaultInputDevice": (), + "QAudioDeviceInfo.defaultOutputDevice": (), + "QAudioDeviceInfo.deviceName": (), + "QAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.isNull": (), + "QAudioDeviceInfo.nearestFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.preferredFormat": (), + "QAudioDeviceInfo.supportedByteOrders": (), + "QAudioDeviceInfo.supportedChannelCounts": (), + "QAudioDeviceInfo.supportedCodecs": (), + "QAudioDeviceInfo.supportedSampleRates": (), + "QAudioDeviceInfo.supportedSampleSizes": (), + "QAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAudioEncoderSettings: + "QAudioEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QAudioEncoderSettings',)], + "QAudioEncoderSettings.__copy__": (), + "QAudioEncoderSettings.bitRate": (), + "QAudioEncoderSettings.channelCount": (), + "QAudioEncoderSettings.codec": (), + "QAudioEncoderSettings.encodingMode": (), + "QAudioEncoderSettings.encodingOption": ('str',), + "QAudioEncoderSettings.encodingOptions": (), + "QAudioEncoderSettings.isNull": (), + "QAudioEncoderSettings.quality": (), + "QAudioEncoderSettings.sampleRate": (), + "QAudioEncoderSettings.setBitRate": ('int',), + "QAudioEncoderSettings.setChannelCount": ('int',), + "QAudioEncoderSettings.setCodec": ('str',), + "QAudioEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QAudioEncoderSettings.setEncodingOption": ('str', 'Any'), + "QAudioEncoderSettings.setEncodingOptions": ('dict',), + "QAudioEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QAudioEncoderSettings.setSampleRate": ('int',), + + # class PySide2.QtMultimedia.QAudioEncoderSettingsControl: + "QAudioEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioEncoderSettingsControl.audioSettings": (), + "QAudioEncoderSettingsControl.codecDescription": ('str',), + "QAudioEncoderSettingsControl.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QAudioEncoderSettingsControl.supportedAudioCodecs": (), + + # class PySide2.QtMultimedia.QAudioFormat: + "QAudioFormat.__init__": [(), ('PySide2.QtMultimedia.QAudioFormat',)], + "QAudioFormat.__copy__": (), + "QAudioFormat.byteOrder": (), + "QAudioFormat.bytesForDuration": ('int',), + "QAudioFormat.bytesForFrames": ('int',), + "QAudioFormat.bytesPerFrame": (), + "QAudioFormat.channelCount": (), + "QAudioFormat.codec": (), + "QAudioFormat.durationForBytes": ('int',), + "QAudioFormat.durationForFrames": ('int',), + "QAudioFormat.framesForBytes": ('int',), + "QAudioFormat.framesForDuration": ('int',), + "QAudioFormat.isValid": (), + "QAudioFormat.sampleRate": (), + "QAudioFormat.sampleSize": (), + "QAudioFormat.sampleType": (), + "QAudioFormat.setByteOrder": ('PySide2.QtMultimedia.QAudioFormat.Endian',), + "QAudioFormat.setChannelCount": ('int',), + "QAudioFormat.setCodec": ('str',), + "QAudioFormat.setSampleRate": ('int',), + "QAudioFormat.setSampleSize": ('int',), + "QAudioFormat.setSampleType": ('PySide2.QtMultimedia.QAudioFormat.SampleType',), + + # class PySide2.QtMultimedia.QAudioInput: + "QAudioInput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioInput.bufferSize": (), + "QAudioInput.bytesReady": (), + "QAudioInput.elapsedUSecs": (), + "QAudioInput.error": (), + "QAudioInput.format": (), + "QAudioInput.notifyInterval": (), + "QAudioInput.periodSize": (), + "QAudioInput.processedUSecs": (), + "QAudioInput.reset": (), + "QAudioInput.resume": (), + "QAudioInput.setBufferSize": ('int',), + "QAudioInput.setNotifyInterval": ('int',), + "QAudioInput.setVolume": ('float',), + "QAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioInput.state": (), + "QAudioInput.stop": (), + "QAudioInput.suspend": (), + "QAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAudioInputSelectorControl: + "QAudioInputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioInputSelectorControl.activeInput": (), + "QAudioInputSelectorControl.availableInputs": (), + "QAudioInputSelectorControl.defaultInput": (), + "QAudioInputSelectorControl.inputDescription": ('str',), + "QAudioInputSelectorControl.setActiveInput": ('str',), + + # class PySide2.QtMultimedia.QAudioOutput: + "QAudioOutput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioOutput.bufferSize": (), + "QAudioOutput.bytesFree": (), + "QAudioOutput.category": (), + "QAudioOutput.elapsedUSecs": (), + "QAudioOutput.error": (), + "QAudioOutput.format": (), + "QAudioOutput.notifyInterval": (), + "QAudioOutput.periodSize": (), + "QAudioOutput.processedUSecs": (), + "QAudioOutput.reset": (), + "QAudioOutput.resume": (), + "QAudioOutput.setBufferSize": ('int',), + "QAudioOutput.setCategory": ('str',), + "QAudioOutput.setNotifyInterval": ('int',), + "QAudioOutput.setVolume": ('float',), + "QAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioOutput.state": (), + "QAudioOutput.stop": (), + "QAudioOutput.suspend": (), + "QAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAudioOutputSelectorControl: + "QAudioOutputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioOutputSelectorControl.activeOutput": (), + "QAudioOutputSelectorControl.availableOutputs": (), + "QAudioOutputSelectorControl.defaultOutput": (), + "QAudioOutputSelectorControl.outputDescription": ('str',), + "QAudioOutputSelectorControl.setActiveOutput": ('str',), + + # class PySide2.QtMultimedia.QAudioProbe: + "QAudioProbe.__init__": ('PySide2.QtCore.QObject',), + "QAudioProbe.isActive": (), + "QAudioProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QAudioRecorder: + "QAudioRecorder.__init__": ('PySide2.QtCore.QObject',), + "QAudioRecorder.audioInput": (), + "QAudioRecorder.audioInputDescription": ('str',), + "QAudioRecorder.audioInputs": (), + "QAudioRecorder.defaultAudioInput": (), + "QAudioRecorder.setAudioInput": ('str',), + + # class PySide2.QtMultimedia.QAudioRoleControl: + "QAudioRoleControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioRoleControl.audioRole": (), + "QAudioRoleControl.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QAudioRoleControl.supportedAudioRoles": (), + + # class PySide2.QtMultimedia.QCamera: + "QCamera.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtMultimedia.QCamera.Position', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QCameraInfo', 'PySide2.QtCore.QObject')], + "QCamera.availability": (), + "QCamera.availableDevices": (), + "QCamera.captureMode": (), + "QCamera.deviceDescription": ('PySide2.QtCore.QByteArray',), + "QCamera.errorString": (), + "QCamera.isCaptureModeSupported": ('PySide2.libpyside.CaptureModes',), + "QCamera.load": (), + "QCamera.lockStatus": [(), ('PySide2.QtMultimedia.QCamera.LockType',)], + "QCamera.requestedLocks": (), + "QCamera.searchAndLock": [(), ('PySide2.libpyside.LockTypes',)], + "QCamera.setCaptureMode": ('PySide2.libpyside.CaptureModes',), + "QCamera.setViewfinder": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QCamera.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.start": (), + "QCamera.state": (), + "QCamera.status": (), + "QCamera.stop": (), + "QCamera.supportedLocks": (), + "QCamera.supportedViewfinderFrameRateRanges": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderPixelFormats": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderResolutions": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.unload": (), + "QCamera.unlock": [(), ('PySide2.libpyside.LockTypes',)], + "QCamera.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraCaptureBufferFormatControl: + "QCameraCaptureBufferFormatControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureBufferFormatControl.bufferFormat": (), + "QCameraCaptureBufferFormatControl.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraCaptureBufferFormatControl.supportedBufferFormats": (), + + # class PySide2.QtMultimedia.QCameraCaptureDestinationControl: + "QCameraCaptureDestinationControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureDestinationControl.captureDestination": (), + "QCameraCaptureDestinationControl.isCaptureDestinationSupported": ('PySide2.libpyside.CaptureDestinations',), + "QCameraCaptureDestinationControl.setCaptureDestination": ('PySide2.libpyside.CaptureDestinations',), + + # class PySide2.QtMultimedia.QCameraControl: + "QCameraControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraControl.canChangeProperty": ('PySide2.QtMultimedia.QCameraControl.PropertyChangeType', 'PySide2.QtMultimedia.QCamera.Status'), + "QCameraControl.captureMode": (), + "QCameraControl.isCaptureModeSupported": ('PySide2.libpyside.CaptureModes',), + "QCameraControl.setCaptureMode": ('PySide2.libpyside.CaptureModes',), + "QCameraControl.setState": ('PySide2.QtMultimedia.QCamera.State',), + "QCameraControl.state": (), + "QCameraControl.status": (), + + # class PySide2.QtMultimedia.QCameraExposureControl: + "QCameraExposureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraExposureControl.actualValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.requestedValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.setValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter', 'Any'), + + # class PySide2.QtMultimedia.QCameraFeedbackControl: + "QCameraFeedbackControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraFeedbackControl.isEventFeedbackEnabled": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType',), + "QCameraFeedbackControl.isEventFeedbackLocked": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType',), + "QCameraFeedbackControl.resetEventFeedback": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType',), + "QCameraFeedbackControl.setEventFeedbackEnabled": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType', 'bool'), + "QCameraFeedbackControl.setEventFeedbackSound": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType', 'str'), + + # class PySide2.QtMultimedia.QCameraFocusZone: + "QCameraFocusZone.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus'), ('PySide2.QtMultimedia.QCameraFocusZone',)], + "QCameraFocusZone.__copy__": (), + "QCameraFocusZone.area": (), + "QCameraFocusZone.isValid": (), + "QCameraFocusZone.setStatus": ('PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus',), + "QCameraFocusZone.status": (), + + # class PySide2.QtMultimedia.QCameraImageCapture: + "QCameraImageCapture.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QCameraImageCapture.availability": (), + "QCameraImageCapture.bufferFormat": (), + "QCameraImageCapture.cancelCapture": (), + "QCameraImageCapture.capture": ('str',), + "QCameraImageCapture.captureDestination": (), + "QCameraImageCapture.encodingSettings": (), + "QCameraImageCapture.errorString": (), + "QCameraImageCapture.imageCodecDescription": ('str',), + "QCameraImageCapture.isAvailable": (), + "QCameraImageCapture.isCaptureDestinationSupported": ('PySide2.libpyside.CaptureDestinations',), + "QCameraImageCapture.isReadyForCapture": (), + "QCameraImageCapture.mediaObject": (), + "QCameraImageCapture.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraImageCapture.setCaptureDestination": ('PySide2.libpyside.CaptureDestinations',), + "QCameraImageCapture.setEncodingSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QCameraImageCapture.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QCameraImageCapture.supportedBufferFormats": (), + "QCameraImageCapture.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QCameraImageCaptureControl: + "QCameraImageCaptureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageCaptureControl.cancelCapture": (), + "QCameraImageCaptureControl.capture": ('str',), + "QCameraImageCaptureControl.driveMode": (), + "QCameraImageCaptureControl.isReadyForCapture": (), + "QCameraImageCaptureControl.setDriveMode": ('PySide2.QtMultimedia.QCameraImageCapture.DriveMode',), + + # class PySide2.QtMultimedia.QCameraImageProcessingControl: + "QCameraImageProcessingControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageProcessingControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.isParameterValueSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'Any'), + "QCameraImageProcessingControl.parameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.setParameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'Any'), + + # class PySide2.QtMultimedia.QCameraInfo: + "QCameraInfo.__init__": [('PySide2.QtCore.QByteArray',), ('PySide2.QtMultimedia.QCamera',), ('PySide2.QtMultimedia.QCameraInfo',)], + "QCameraInfo.__copy__": (), + "QCameraInfo.availableCameras": ('PySide2.QtMultimedia.QCamera.Position',), + "QCameraInfo.defaultCamera": (), + "QCameraInfo.description": (), + "QCameraInfo.deviceName": (), + "QCameraInfo.isNull": (), + "QCameraInfo.orientation": (), + "QCameraInfo.position": (), + + # class PySide2.QtMultimedia.QCameraInfoControl: + "QCameraInfoControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraInfoControl.cameraOrientation": ('str',), + "QCameraInfoControl.cameraPosition": ('str',), + + # class PySide2.QtMultimedia.QCameraLocksControl: + "QCameraLocksControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraLocksControl.lockStatus": ('PySide2.QtMultimedia.QCamera.LockType',), + "QCameraLocksControl.searchAndLock": ('PySide2.libpyside.LockTypes',), + "QCameraLocksControl.supportedLocks": (), + "QCameraLocksControl.unlock": ('PySide2.libpyside.LockTypes',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettings: + "QCameraViewfinderSettings.__init__": [(), ('PySide2.QtMultimedia.QCameraViewfinderSettings',)], + "QCameraViewfinderSettings.__copy__": (), + "QCameraViewfinderSettings.isNull": (), + "QCameraViewfinderSettings.maximumFrameRate": (), + "QCameraViewfinderSettings.minimumFrameRate": (), + "QCameraViewfinderSettings.pixelAspectRatio": (), + "QCameraViewfinderSettings.pixelFormat": (), + "QCameraViewfinderSettings.resolution": (), + "QCameraViewfinderSettings.setMaximumFrameRate": ('float',), + "QCameraViewfinderSettings.setMinimumFrameRate": ('float',), + "QCameraViewfinderSettings.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.setPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraViewfinderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.swap": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl: + "QCameraViewfinderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl.isViewfinderParameterSupported": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + "QCameraViewfinderSettingsControl.setViewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter', 'Any'), + "QCameraViewfinderSettingsControl.viewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl2: + "QCameraViewfinderSettingsControl2.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl2.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCameraViewfinderSettingsControl2.supportedViewfinderSettings": (), + "QCameraViewfinderSettingsControl2.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraZoomControl: + "QCameraZoomControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraZoomControl.currentDigitalZoom": (), + "QCameraZoomControl.currentOpticalZoom": (), + "QCameraZoomControl.maximumDigitalZoom": (), + "QCameraZoomControl.maximumOpticalZoom": (), + "QCameraZoomControl.requestedDigitalZoom": (), + "QCameraZoomControl.requestedOpticalZoom": (), + "QCameraZoomControl.zoomTo": ('float', 'float'), + + # class PySide2.QtMultimedia.QCustomAudioRoleControl: + "QCustomAudioRoleControl.__init__": ('PySide2.QtCore.QObject',), + "QCustomAudioRoleControl.customAudioRole": (), + "QCustomAudioRoleControl.setCustomAudioRole": ('str',), + "QCustomAudioRoleControl.supportedCustomAudioRoles": (), + + # class PySide2.QtMultimedia.QImageEncoderControl: + "QImageEncoderControl.__init__": ('PySide2.QtCore.QObject',), + "QImageEncoderControl.imageCodecDescription": ('str',), + "QImageEncoderControl.imageSettings": (), + "QImageEncoderControl.setImageSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QImageEncoderControl.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QImageEncoderSettings: + "QImageEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QImageEncoderSettings',)], + "QImageEncoderSettings.__copy__": (), + "QImageEncoderSettings.codec": (), + "QImageEncoderSettings.encodingOption": ('str',), + "QImageEncoderSettings.encodingOptions": (), + "QImageEncoderSettings.isNull": (), + "QImageEncoderSettings.quality": (), + "QImageEncoderSettings.resolution": (), + "QImageEncoderSettings.setCodec": ('str',), + "QImageEncoderSettings.setEncodingOption": ('str', 'Any'), + "QImageEncoderSettings.setEncodingOptions": ('dict',), + "QImageEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QImageEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QMediaAudioProbeControl: + "QMediaAudioProbeControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaAvailabilityControl: + "QMediaAvailabilityControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaAvailabilityControl.availability": (), + + # class PySide2.QtMultimedia.QMediaBindableInterface: + "QMediaBindableInterface.__init__": (), + "QMediaBindableInterface.mediaObject": (), + "QMediaBindableInterface.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimedia.QMediaContainerControl: + "QMediaContainerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaContainerControl.containerDescription": ('str',), + "QMediaContainerControl.containerFormat": (), + "QMediaContainerControl.setContainerFormat": ('str',), + "QMediaContainerControl.supportedContainers": (), + + # class PySide2.QtMultimedia.QMediaContent: + "QMediaContent.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtMultimedia.QMediaContent',), ('PySide2.QtMultimedia.QMediaPlaylist', 'PySide2.QtCore.QUrl', 'bool'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest',), ('list',)], + "QMediaContent.__copy__": (), + "QMediaContent.canonicalRequest": (), + "QMediaContent.canonicalResource": (), + "QMediaContent.canonicalUrl": (), + "QMediaContent.isNull": (), + "QMediaContent.playlist": (), + "QMediaContent.resources": (), + + # class PySide2.QtMultimedia.QMediaControl: + "QMediaControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaGaplessPlaybackControl: + "QMediaGaplessPlaybackControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaGaplessPlaybackControl.crossfadeTime": (), + "QMediaGaplessPlaybackControl.isCrossfadeSupported": (), + "QMediaGaplessPlaybackControl.nextMedia": (), + "QMediaGaplessPlaybackControl.setCrossfadeTime": ('float',), + "QMediaGaplessPlaybackControl.setNextMedia": ('PySide2.QtMultimedia.QMediaContent',), + + # class PySide2.QtMultimedia.QMediaNetworkAccessControl: + "QMediaNetworkAccessControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaNetworkAccessControl.currentConfiguration": (), + "QMediaNetworkAccessControl.setConfigurations": ('list',), + + # class PySide2.QtMultimedia.QMediaObject: + "QMediaObject.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtMultimedia.QMediaService'), + "QMediaObject.addPropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.availability": (), + "QMediaObject.availableMetaData": (), + "QMediaObject.bind": ('PySide2.QtCore.QObject',), + "QMediaObject.isAvailable": (), + "QMediaObject.isMetaDataAvailable": (), + "QMediaObject.metaData": ('str',), + "QMediaObject.notifyInterval": (), + "QMediaObject.removePropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.service": (), + "QMediaObject.setNotifyInterval": ('int',), + "QMediaObject.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaPlayer: + "QMediaPlayer.__init__": ('PySide2.QtCore.QObject', 'PySide2.libpyside.Flags'), + "QMediaPlayer.audioRole": (), + "QMediaPlayer.availability": (), + "QMediaPlayer.bind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.bufferStatus": (), + "QMediaPlayer.currentMedia": (), + "QMediaPlayer.currentNetworkConfiguration": (), + "QMediaPlayer.customAudioRole": (), + "QMediaPlayer.duration": (), + "QMediaPlayer.errorString": (), + "QMediaPlayer.hasSupport": ('str', 'List[str]', 'PySide2.libpyside.Flags'), + "QMediaPlayer.isAudioAvailable": (), + "QMediaPlayer.isMuted": (), + "QMediaPlayer.isSeekable": (), + "QMediaPlayer.isVideoAvailable": (), + "QMediaPlayer.media": (), + "QMediaPlayer.mediaStatus": (), + "QMediaPlayer.mediaStream": (), + "QMediaPlayer.pause": (), + "QMediaPlayer.play": (), + "QMediaPlayer.playbackRate": (), + "QMediaPlayer.playlist": (), + "QMediaPlayer.position": (), + "QMediaPlayer.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QMediaPlayer.setCustomAudioRole": ('str',), + "QMediaPlayer.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayer.setMuted": ('bool',), + "QMediaPlayer.setNetworkConfigurations": ('list',), + "QMediaPlayer.setPlaybackRate": ('float',), + "QMediaPlayer.setPlaylist": ('PySide2.QtMultimedia.QMediaPlaylist',), + "QMediaPlayer.setPosition": ('int',), + "QMediaPlayer.setVideoOutput": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QMediaPlayer.setVolume": ('int',), + "QMediaPlayer.state": (), + "QMediaPlayer.stop": (), + "QMediaPlayer.supportedAudioRoles": (), + "QMediaPlayer.supportedCustomAudioRoles": (), + "QMediaPlayer.supportedMimeTypes": ('PySide2.libpyside.Flags',), + "QMediaPlayer.unbind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.volume": (), + + # class PySide2.QtMultimedia.QMediaPlayerControl: + "QMediaPlayerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlayerControl.availablePlaybackRanges": (), + "QMediaPlayerControl.bufferStatus": (), + "QMediaPlayerControl.duration": (), + "QMediaPlayerControl.isAudioAvailable": (), + "QMediaPlayerControl.isMuted": (), + "QMediaPlayerControl.isSeekable": (), + "QMediaPlayerControl.isVideoAvailable": (), + "QMediaPlayerControl.media": (), + "QMediaPlayerControl.mediaStatus": (), + "QMediaPlayerControl.mediaStream": (), + "QMediaPlayerControl.pause": (), + "QMediaPlayerControl.play": (), + "QMediaPlayerControl.playbackRate": (), + "QMediaPlayerControl.position": (), + "QMediaPlayerControl.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayerControl.setMuted": ('bool',), + "QMediaPlayerControl.setPlaybackRate": ('float',), + "QMediaPlayerControl.setPosition": ('int',), + "QMediaPlayerControl.setVolume": ('int',), + "QMediaPlayerControl.state": (), + "QMediaPlayerControl.stop": (), + "QMediaPlayerControl.volume": (), + + # class PySide2.QtMultimedia.QMediaPlaylist: + "QMediaPlaylist.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlaylist.addMedia": [('PySide2.QtMultimedia.QMediaContent',), ('list',)], + "QMediaPlaylist.clear": (), + "QMediaPlaylist.currentIndex": (), + "QMediaPlaylist.currentMedia": (), + "QMediaPlaylist.error": (), + "QMediaPlaylist.errorString": (), + "QMediaPlaylist.insertMedia": [('int', 'PySide2.QtMultimedia.QMediaContent'), ('int', 'list')], + "QMediaPlaylist.isEmpty": (), + "QMediaPlaylist.isReadOnly": (), + "QMediaPlaylist.load": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaPlaylist.media": ('int',), + "QMediaPlaylist.mediaCount": (), + "QMediaPlaylist.mediaObject": (), + "QMediaPlaylist.moveMedia": ('int', 'int'), + "QMediaPlaylist.nextIndex": ('int',), + "QMediaPlaylist.playbackMode": (), + "QMediaPlaylist.previous": (), + "QMediaPlaylist.previousIndex": ('int',), + "QMediaPlaylist.removeMedia": [('int',), ('int', 'int')], + "QMediaPlaylist.save": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str')], + "QMediaPlaylist.setCurrentIndex": ('int',), + "QMediaPlaylist.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaPlaylist.setPlaybackMode": ('PySide2.QtMultimedia.QMediaPlaylist.PlaybackMode',), + "QMediaPlaylist.shuffle": (), + + # class PySide2.QtMultimedia.QMediaRecorder: + "QMediaRecorder.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QMediaRecorder.actualLocation": (), + "QMediaRecorder.audioCodecDescription": ('str',), + "QMediaRecorder.audioSettings": (), + "QMediaRecorder.availability": (), + "QMediaRecorder.availableMetaData": (), + "QMediaRecorder.containerDescription": ('str',), + "QMediaRecorder.containerFormat": (), + "QMediaRecorder.duration": (), + "QMediaRecorder.errorString": (), + "QMediaRecorder.isAvailable": (), + "QMediaRecorder.isMetaDataAvailable": (), + "QMediaRecorder.isMetaDataWritable": (), + "QMediaRecorder.isMuted": (), + "QMediaRecorder.mediaObject": (), + "QMediaRecorder.metaData": ('str',), + "QMediaRecorder.outputLocation": (), + "QMediaRecorder.pause": (), + "QMediaRecorder.record": (), + "QMediaRecorder.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QMediaRecorder.setContainerFormat": ('str',), + "QMediaRecorder.setEncodingSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings', 'PySide2.QtMultimedia.QVideoEncoderSettings', 'str'), + "QMediaRecorder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaRecorder.setMetaData": ('str', 'Any'), + "QMediaRecorder.setMuted": ('bool',), + "QMediaRecorder.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorder.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QMediaRecorder.setVolume": ('float',), + "QMediaRecorder.state": (), + "QMediaRecorder.status": (), + "QMediaRecorder.stop": (), + "QMediaRecorder.supportedAudioCodecs": (), + "QMediaRecorder.supportedContainers": (), + "QMediaRecorder.supportedVideoCodecs": (), + "QMediaRecorder.videoCodecDescription": ('str',), + "QMediaRecorder.videoSettings": (), + "QMediaRecorder.volume": (), + + # class PySide2.QtMultimedia.QMediaRecorderControl: + "QMediaRecorderControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaRecorderControl.applySettings": (), + "QMediaRecorderControl.duration": (), + "QMediaRecorderControl.isMuted": (), + "QMediaRecorderControl.outputLocation": (), + "QMediaRecorderControl.setMuted": ('bool',), + "QMediaRecorderControl.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorderControl.setState": ('PySide2.QtMultimedia.QMediaRecorder.State',), + "QMediaRecorderControl.setVolume": ('float',), + "QMediaRecorderControl.state": (), + "QMediaRecorderControl.status": (), + "QMediaRecorderControl.volume": (), + + # class PySide2.QtMultimedia.QMediaResource: + "QMediaResource.__init__": [(), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaResource.__copy__": (), + "QMediaResource.audioBitRate": (), + "QMediaResource.audioCodec": (), + "QMediaResource.channelCount": (), + "QMediaResource.dataSize": (), + "QMediaResource.isNull": (), + "QMediaResource.language": (), + "QMediaResource.mimeType": (), + "QMediaResource.request": (), + "QMediaResource.resolution": (), + "QMediaResource.sampleRate": (), + "QMediaResource.setAudioBitRate": ('int',), + "QMediaResource.setAudioCodec": ('str',), + "QMediaResource.setChannelCount": ('int',), + "QMediaResource.setDataSize": ('int',), + "QMediaResource.setLanguage": ('str',), + "QMediaResource.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QMediaResource.setSampleRate": ('int',), + "QMediaResource.setVideoBitRate": ('int',), + "QMediaResource.setVideoCodec": ('str',), + "QMediaResource.url": (), + "QMediaResource.videoBitRate": (), + "QMediaResource.videoCodec": (), + + # class PySide2.QtMultimedia.QMediaService: + "QMediaService.__init__": ('PySide2.QtCore.QObject',), + "QMediaService.releaseControl": ('PySide2.QtMultimedia.QMediaControl',), + "QMediaService.requestControl": ('str',), + + # class PySide2.QtMultimedia.QMediaServiceCameraInfoInterface: + "QMediaServiceCameraInfoInterface.__init__": (), + "QMediaServiceCameraInfoInterface.cameraOrientation": ('PySide2.QtCore.QByteArray',), + "QMediaServiceCameraInfoInterface.cameraPosition": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtMultimedia.QMediaServiceDefaultDeviceInterface: + "QMediaServiceDefaultDeviceInterface.__init__": (), + "QMediaServiceDefaultDeviceInterface.defaultDevice": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtMultimedia.QMediaServiceFeaturesInterface: + "QMediaServiceFeaturesInterface.__init__": (), + "QMediaServiceFeaturesInterface.supportedFeatures": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtMultimedia.QMediaServiceProviderHint: + "QMediaServiceProviderHint.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtMultimedia.QCamera.Position',), ('PySide2.QtMultimedia.QMediaServiceProviderHint',), ('PySide2.libpyside.Features',), ('str', 'List[str]')], + "QMediaServiceProviderHint.__copy__": (), + "QMediaServiceProviderHint.cameraPosition": (), + "QMediaServiceProviderHint.codecs": (), + "QMediaServiceProviderHint.device": (), + "QMediaServiceProviderHint.features": (), + "QMediaServiceProviderHint.isNull": (), + "QMediaServiceProviderHint.mimeType": (), + "QMediaServiceProviderHint.type": (), + + # class PySide2.QtMultimedia.QMediaServiceSupportedDevicesInterface: + "QMediaServiceSupportedDevicesInterface.__init__": (), + "QMediaServiceSupportedDevicesInterface.deviceDescription": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QMediaServiceSupportedDevicesInterface.devices": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtMultimedia.QMediaServiceSupportedFormatsInterface: + "QMediaServiceSupportedFormatsInterface.__init__": (), + "QMediaServiceSupportedFormatsInterface.hasSupport": ('str', 'List[str]'), + "QMediaServiceSupportedFormatsInterface.supportedMimeTypes": (), + + # class PySide2.QtMultimedia.QMediaStreamsControl: + "QMediaStreamsControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaStreamsControl.isActive": ('int',), + "QMediaStreamsControl.metaData": ('int', 'str'), + "QMediaStreamsControl.setActive": ('int', 'bool'), + "QMediaStreamsControl.streamCount": (), + "QMediaStreamsControl.streamType": ('int',), + + # class PySide2.QtMultimedia.QMediaTimeInterval: + "QMediaTimeInterval.__init__": [(), ('PySide2.QtMultimedia.QMediaTimeInterval',), ('int', 'int')], + "QMediaTimeInterval.__copy__": (), + "QMediaTimeInterval.contains": ('int',), + "QMediaTimeInterval.end": (), + "QMediaTimeInterval.isNormal": (), + "QMediaTimeInterval.normalized": (), + "QMediaTimeInterval.start": (), + "QMediaTimeInterval.translated": ('int',), + + # class PySide2.QtMultimedia.QMediaTimeRange: + "QMediaTimeRange.__init__": [(), ('PySide2.QtMultimedia.QMediaTimeInterval',), ('PySide2.QtMultimedia.QMediaTimeRange',), ('int', 'int')], + "QMediaTimeRange.__copy__": (), + "QMediaTimeRange.addInterval": [('PySide2.QtMultimedia.QMediaTimeInterval',), ('int', 'int')], + "QMediaTimeRange.addTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + "QMediaTimeRange.clear": (), + "QMediaTimeRange.contains": ('int',), + "QMediaTimeRange.earliestTime": (), + "QMediaTimeRange.intervals": (), + "QMediaTimeRange.isContinuous": (), + "QMediaTimeRange.isEmpty": (), + "QMediaTimeRange.latestTime": (), + "QMediaTimeRange.removeInterval": [('PySide2.QtMultimedia.QMediaTimeInterval',), ('int', 'int')], + "QMediaTimeRange.removeTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + + # class PySide2.QtMultimedia.QMediaVideoProbeControl: + "QMediaVideoProbeControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMetaDataReaderControl: + "QMetaDataReaderControl.__init__": ('PySide2.QtCore.QObject',), + "QMetaDataReaderControl.availableMetaData": (), + "QMetaDataReaderControl.isMetaDataAvailable": (), + "QMetaDataReaderControl.metaData": ('str',), + + # class PySide2.QtMultimedia.QMetaDataWriterControl: + "QMetaDataWriterControl.__init__": ('PySide2.QtCore.QObject',), + "QMetaDataWriterControl.availableMetaData": (), + "QMetaDataWriterControl.isMetaDataAvailable": (), + "QMetaDataWriterControl.isWritable": (), + "QMetaDataWriterControl.metaData": ('str',), + "QMetaDataWriterControl.setMetaData": ('str', 'Any'), + + # class PySide2.QtMultimedia.QMultimedia: + + # class PySide2.QtMultimedia.QRadioData: + "QRadioData.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QRadioData.availability": (), + "QRadioData.errorString": (), + "QRadioData.isAlternativeFrequenciesEnabled": (), + "QRadioData.mediaObject": (), + "QRadioData.programType": (), + "QRadioData.programTypeName": (), + "QRadioData.radioText": (), + "QRadioData.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioData.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QRadioData.stationId": (), + "QRadioData.stationName": (), + + # class PySide2.QtMultimedia.QRadioDataControl: + "QRadioDataControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioDataControl.errorString": (), + "QRadioDataControl.isAlternativeFrequenciesEnabled": (), + "QRadioDataControl.programType": (), + "QRadioDataControl.programTypeName": (), + "QRadioDataControl.radioText": (), + "QRadioDataControl.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioDataControl.stationId": (), + "QRadioDataControl.stationName": (), + + # class PySide2.QtMultimedia.QRadioTuner: + "QRadioTuner.__init__": ('PySide2.QtCore.QObject',), + "QRadioTuner.availability": (), + "QRadioTuner.band": (), + "QRadioTuner.cancelSearch": (), + "QRadioTuner.errorString": (), + "QRadioTuner.frequency": (), + "QRadioTuner.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isAntennaConnected": (), + "QRadioTuner.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isMuted": (), + "QRadioTuner.isSearching": (), + "QRadioTuner.isStereo": (), + "QRadioTuner.radioData": (), + "QRadioTuner.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTuner.searchBackward": (), + "QRadioTuner.searchForward": (), + "QRadioTuner.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.setFrequency": ('int',), + "QRadioTuner.setMuted": ('bool',), + "QRadioTuner.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTuner.setVolume": ('int',), + "QRadioTuner.signalStrength": (), + "QRadioTuner.start": (), + "QRadioTuner.state": (), + "QRadioTuner.stereoMode": (), + "QRadioTuner.stop": (), + "QRadioTuner.volume": (), + + # class PySide2.QtMultimedia.QRadioTunerControl: + "QRadioTunerControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioTunerControl.band": (), + "QRadioTunerControl.cancelSearch": (), + "QRadioTunerControl.errorString": (), + "QRadioTunerControl.frequency": (), + "QRadioTunerControl.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isAntennaConnected": (), + "QRadioTunerControl.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isMuted": (), + "QRadioTunerControl.isSearching": (), + "QRadioTunerControl.isStereo": (), + "QRadioTunerControl.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTunerControl.searchBackward": (), + "QRadioTunerControl.searchForward": (), + "QRadioTunerControl.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.setFrequency": ('int',), + "QRadioTunerControl.setMuted": ('bool',), + "QRadioTunerControl.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTunerControl.setVolume": ('int',), + "QRadioTunerControl.signalStrength": (), + "QRadioTunerControl.start": (), + "QRadioTunerControl.state": (), + "QRadioTunerControl.stereoMode": (), + "QRadioTunerControl.stop": (), + "QRadioTunerControl.volume": (), + + # class PySide2.QtMultimedia.QSound: + "QSound.__init__": ('str', 'PySide2.QtCore.QObject'), + "QSound.fileName": (), + "QSound.isFinished": (), + "QSound.loops": (), + "QSound.loopsRemaining": (), + "QSound.play": [(), ('str',)], + "QSound.setLoops": ('int',), + "QSound.stop": (), + + # class PySide2.QtMultimedia.QSoundEffect: + "QSoundEffect.__init__": ('PySide2.QtCore.QObject',), + "QSoundEffect.category": (), + "QSoundEffect.isLoaded": (), + "QSoundEffect.isMuted": (), + "QSoundEffect.isPlaying": (), + "QSoundEffect.loopCount": (), + "QSoundEffect.loopsRemaining": (), + "QSoundEffect.play": (), + "QSoundEffect.setCategory": ('str',), + "QSoundEffect.setLoopCount": ('int',), + "QSoundEffect.setMuted": ('bool',), + "QSoundEffect.setSource": ('PySide2.QtCore.QUrl',), + "QSoundEffect.setVolume": ('float',), + "QSoundEffect.source": (), + "QSoundEffect.status": (), + "QSoundEffect.stop": (), + "QSoundEffect.supportedMimeTypes": (), + "QSoundEffect.volume": (), + + # class PySide2.QtMultimedia.QVideoDeviceSelectorControl: + "QVideoDeviceSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoDeviceSelectorControl.defaultDevice": (), + "QVideoDeviceSelectorControl.deviceCount": (), + "QVideoDeviceSelectorControl.deviceDescription": ('int',), + "QVideoDeviceSelectorControl.deviceName": ('int',), + "QVideoDeviceSelectorControl.selectedDevice": (), + "QVideoDeviceSelectorControl.setSelectedDevice": ('int',), + + # class PySide2.QtMultimedia.QVideoEncoderSettings: + "QVideoEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QVideoEncoderSettings',)], + "QVideoEncoderSettings.__copy__": (), + "QVideoEncoderSettings.bitRate": (), + "QVideoEncoderSettings.codec": (), + "QVideoEncoderSettings.encodingMode": (), + "QVideoEncoderSettings.encodingOption": ('str',), + "QVideoEncoderSettings.encodingOptions": (), + "QVideoEncoderSettings.frameRate": (), + "QVideoEncoderSettings.isNull": (), + "QVideoEncoderSettings.quality": (), + "QVideoEncoderSettings.resolution": (), + "QVideoEncoderSettings.setBitRate": ('int',), + "QVideoEncoderSettings.setCodec": ('str',), + "QVideoEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QVideoEncoderSettings.setEncodingOption": ('str', 'Any'), + "QVideoEncoderSettings.setEncodingOptions": ('dict',), + "QVideoEncoderSettings.setFrameRate": ('float',), + "QVideoEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QVideoEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QVideoEncoderSettingsControl: + "QVideoEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoEncoderSettingsControl.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QVideoEncoderSettingsControl.supportedVideoCodecs": (), + "QVideoEncoderSettingsControl.videoCodecDescription": ('str',), + "QVideoEncoderSettingsControl.videoSettings": (), + + # class PySide2.QtMultimedia.QVideoFilterRunnable: + "QVideoFilterRunnable.__init__": (), + "QVideoFilterRunnable.run": ('PySide2.QtMultimedia.QVideoFrame', 'PySide2.QtMultimedia.QVideoSurfaceFormat', 'PySide2.libpyside.RunFlags'), + + # class PySide2.QtMultimedia.QVideoFrame: + "QVideoFrame.__init__": [(), ('PySide2.QtGui.QImage',), ('PySide2.QtMultimedia.QAbstractVideoBuffer', 'PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat'), ('PySide2.QtMultimedia.QVideoFrame',), ('int', 'PySide2.QtCore.QSize', 'int', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat')], + "QVideoFrame.__copy__": (), + "QVideoFrame.availableMetaData": (), + "QVideoFrame.bits": (), + "QVideoFrame.bytesPerLine": [(), ('int',)], + "QVideoFrame.endTime": (), + "QVideoFrame.fieldType": (), + "QVideoFrame.handle": (), + "QVideoFrame.handleType": (), + "QVideoFrame.height": (), + "QVideoFrame.imageFormatFromPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QVideoFrame.isMapped": (), + "QVideoFrame.isReadable": (), + "QVideoFrame.isValid": (), + "QVideoFrame.isWritable": (), + "QVideoFrame.map": ('PySide2.QtMultimedia.QAbstractVideoBuffer.MapMode',), + "QVideoFrame.mapMode": (), + "QVideoFrame.mappedBytes": (), + "QVideoFrame.metaData": ('str',), + "QVideoFrame.pixelFormat": (), + "QVideoFrame.pixelFormatFromImageFormat": ('PySide2.QtGui.QImage.Format',), + "QVideoFrame.planeCount": (), + "QVideoFrame.setEndTime": ('int',), + "QVideoFrame.setFieldType": ('PySide2.QtMultimedia.QVideoFrame.FieldType',), + "QVideoFrame.setMetaData": ('str', 'Any'), + "QVideoFrame.setStartTime": ('int',), + "QVideoFrame.size": (), + "QVideoFrame.startTime": (), + "QVideoFrame.unmap": (), + "QVideoFrame.width": (), + + # class PySide2.QtMultimedia.QVideoProbe: + "QVideoProbe.__init__": ('PySide2.QtCore.QObject',), + "QVideoProbe.isActive": (), + "QVideoProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QVideoRendererControl: + "QVideoRendererControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoRendererControl.setSurface": ('PySide2.QtMultimedia.QAbstractVideoSurface',), + "QVideoRendererControl.surface": (), + + # class PySide2.QtMultimedia.QVideoSurfaceFormat: + "QVideoSurfaceFormat.__init__": [(), ('PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat', 'PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType'), ('PySide2.QtMultimedia.QVideoSurfaceFormat',)], + "QVideoSurfaceFormat.__copy__": (), + "QVideoSurfaceFormat.frameHeight": (), + "QVideoSurfaceFormat.frameRate": (), + "QVideoSurfaceFormat.frameSize": (), + "QVideoSurfaceFormat.frameWidth": (), + "QVideoSurfaceFormat.handleType": (), + "QVideoSurfaceFormat.isMirrored": (), + "QVideoSurfaceFormat.isValid": (), + "QVideoSurfaceFormat.pixelAspectRatio": (), + "QVideoSurfaceFormat.pixelFormat": (), + "QVideoSurfaceFormat.property": ('str',), + "QVideoSurfaceFormat.propertyNames": (), + "QVideoSurfaceFormat.scanLineDirection": (), + "QVideoSurfaceFormat.setFrameRate": ('float',), + "QVideoSurfaceFormat.setFrameSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setMirrored": ('bool',), + "QVideoSurfaceFormat.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setProperty": ('str', 'Any'), + "QVideoSurfaceFormat.setScanLineDirection": ('PySide2.QtMultimedia.QVideoSurfaceFormat.Direction',), + "QVideoSurfaceFormat.setViewport": ('PySide2.QtCore.QRect',), + "QVideoSurfaceFormat.setYCbCrColorSpace": ('PySide2.QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace',), + "QVideoSurfaceFormat.sizeHint": (), + "QVideoSurfaceFormat.viewport": (), + "QVideoSurfaceFormat.yCbCrColorSpace": (), + + # class PySide2.QtMultimedia.QVideoWindowControl: + "QVideoWindowControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWindowControl.aspectRatioMode": (), + "QVideoWindowControl.brightness": (), + "QVideoWindowControl.contrast": (), + "QVideoWindowControl.displayRect": (), + "QVideoWindowControl.hue": (), + "QVideoWindowControl.isFullScreen": (), + "QVideoWindowControl.nativeSize": (), + "QVideoWindowControl.repaint": (), + "QVideoWindowControl.saturation": (), + "QVideoWindowControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWindowControl.setBrightness": ('int',), + "QVideoWindowControl.setContrast": ('int',), + "QVideoWindowControl.setDisplayRect": ('PySide2.QtCore.QRect',), + "QVideoWindowControl.setFullScreen": ('bool',), + "QVideoWindowControl.setHue": ('int',), + "QVideoWindowControl.setSaturation": ('int',), + "QVideoWindowControl.setWinId": ('int',), + "QVideoWindowControl.winId": (), + }) + +# Module PySide2.QtMultimediaWidgets +if "PySide2.QtMultimediaWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtMultimediaWidgets.QCameraViewfinder: + "QCameraViewfinder.__init__": ('PySide2.QtWidgets.QWidget',), + "QCameraViewfinder.mediaObject": (), + "QCameraViewfinder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimediaWidgets.QGraphicsVideoItem: + "QGraphicsVideoItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsVideoItem.aspectRatioMode": (), + "QGraphicsVideoItem.boundingRect": (), + "QGraphicsVideoItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsVideoItem.mediaObject": (), + "QGraphicsVideoItem.nativeSize": (), + "QGraphicsVideoItem.offset": (), + "QGraphicsVideoItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsVideoItem.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QGraphicsVideoItem.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QGraphicsVideoItem.setOffset": ('PySide2.QtCore.QPointF',), + "QGraphicsVideoItem.setSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsVideoItem.size": (), + "QGraphicsVideoItem.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtMultimediaWidgets.QVideoWidget: + "QVideoWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QVideoWidget.aspectRatioMode": (), + "QVideoWidget.brightness": (), + "QVideoWidget.contrast": (), + "QVideoWidget.event": ('PySide2.QtCore.QEvent',), + "QVideoWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QVideoWidget.hue": (), + "QVideoWidget.mediaObject": (), + "QVideoWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QVideoWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QVideoWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QVideoWidget.saturation": (), + "QVideoWidget.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidget.setBrightness": ('int',), + "QVideoWidget.setContrast": ('int',), + "QVideoWidget.setFullScreen": ('bool',), + "QVideoWidget.setHue": ('int',), + "QVideoWidget.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QVideoWidget.setSaturation": ('int',), + "QVideoWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QVideoWidget.sizeHint": (), + + # class PySide2.QtMultimediaWidgets.QVideoWidgetControl: + "QVideoWidgetControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWidgetControl.aspectRatioMode": (), + "QVideoWidgetControl.brightness": (), + "QVideoWidgetControl.contrast": (), + "QVideoWidgetControl.hue": (), + "QVideoWidgetControl.isFullScreen": (), + "QVideoWidgetControl.saturation": (), + "QVideoWidgetControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidgetControl.setBrightness": ('int',), + "QVideoWidgetControl.setContrast": ('int',), + "QVideoWidgetControl.setFullScreen": ('bool',), + "QVideoWidgetControl.setHue": ('int',), + "QVideoWidgetControl.setSaturation": ('int',), + "QVideoWidgetControl.videoWidget": (), + }) + +# Module PySide2.QtOpenGL +if "PySide2.QtOpenGL" in sys.modules: + dict.update({ + + # class PySide2.QtOpenGL.QGL: + + # class PySide2.QtOpenGL.QGLBuffer: + "QGLBuffer.__init__": [(), ('PySide2.QtOpenGL.QGLBuffer',), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.allocate": [('int',), ('int', 'int')], + "QGLBuffer.bind": (), + "QGLBuffer.bufferId": (), + "QGLBuffer.create": (), + "QGLBuffer.destroy": (), + "QGLBuffer.isCreated": (), + "QGLBuffer.map": ('PySide2.QtOpenGL.QGLBuffer.Access',), + "QGLBuffer.read": ('int', 'int', 'int'), + "QGLBuffer.release": [(), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.setUsagePattern": ('PySide2.QtOpenGL.QGLBuffer.UsagePattern',), + "QGLBuffer.size": (), + "QGLBuffer.type": (), + "QGLBuffer.unmap": (), + "QGLBuffer.usagePattern": (), + "QGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtOpenGL.QGLColormap: + "QGLColormap.__init__": [(), ('PySide2.QtOpenGL.QGLColormap',)], + "QGLColormap.__copy__": (), + "QGLColormap.entryColor": ('int',), + "QGLColormap.entryRgb": ('int',), + "QGLColormap.find": ('int',), + "QGLColormap.findNearest": ('int',), + "QGLColormap.handle": (), + "QGLColormap.isEmpty": (), + "QGLColormap.setEntry": [('int', 'PySide2.QtGui.QColor'), ('int', 'int')], + "QGLColormap.setHandle": ('int',), + "QGLColormap.size": (), + + # class PySide2.QtOpenGL.QGLContext: + "QGLContext.__init__": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.areSharing": ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtOpenGL.QGLContext'), + "QGLContext.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'PySide2.libpyside.BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'PySide2.libpyside.BindOptions'), ('str',)], + "QGLContext.chooseContext": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.colorIndex": ('PySide2.QtGui.QColor',), + "QGLContext.contextHandle": (), + "QGLContext.create": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.currentContext": (), + "QGLContext.deleteTexture": ('int',), + "QGLContext.device": (), + "QGLContext.deviceIsPixmap": (), + "QGLContext.doneCurrent": (), + "QGLContext.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLContext.format": (), + "QGLContext.fromOpenGLContext": ('PySide2.QtGui.QOpenGLContext',), + "QGLContext.initialized": (), + "QGLContext.isSharing": (), + "QGLContext.isValid": (), + "QGLContext.makeCurrent": (), + "QGLContext.moveToThread": ('PySide2.QtCore.QThread',), + "QGLContext.overlayTransparentColor": (), + "QGLContext.requestedFormat": (), + "QGLContext.reset": (), + "QGLContext.setDevice": ('PySide2.QtGui.QPaintDevice',), + "QGLContext.setFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.setInitialized": ('bool',), + "QGLContext.setTextureCacheLimit": ('int',), + "QGLContext.setValid": ('bool',), + "QGLContext.setWindowCreated": ('bool',), + "QGLContext.swapBuffers": (), + "QGLContext.textureCacheLimit": (), + "QGLContext.windowCreated": (), + + # class PySide2.QtOpenGL.QGLFormat: + "QGLFormat.__init__": [(), ('PySide2.QtOpenGL.QGLFormat',), ('PySide2.libpyside.FormatOptions', 'int')], + "QGLFormat.__copy__": (), + "QGLFormat.accum": (), + "QGLFormat.accumBufferSize": (), + "QGLFormat.alpha": (), + "QGLFormat.alphaBufferSize": (), + "QGLFormat.blueBufferSize": (), + "QGLFormat.defaultFormat": (), + "QGLFormat.defaultOverlayFormat": (), + "QGLFormat.depth": (), + "QGLFormat.depthBufferSize": (), + "QGLFormat.directRendering": (), + "QGLFormat.doubleBuffer": (), + "QGLFormat.fromSurfaceFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QGLFormat.greenBufferSize": (), + "QGLFormat.hasOpenGL": (), + "QGLFormat.hasOpenGLOverlays": (), + "QGLFormat.hasOverlay": (), + "QGLFormat.majorVersion": (), + "QGLFormat.minorVersion": (), + "QGLFormat.openGLVersionFlags": (), + "QGLFormat.plane": (), + "QGLFormat.profile": (), + "QGLFormat.redBufferSize": (), + "QGLFormat.rgba": (), + "QGLFormat.sampleBuffers": (), + "QGLFormat.samples": (), + "QGLFormat.setAccum": ('bool',), + "QGLFormat.setAccumBufferSize": ('int',), + "QGLFormat.setAlpha": ('bool',), + "QGLFormat.setAlphaBufferSize": ('int',), + "QGLFormat.setBlueBufferSize": ('int',), + "QGLFormat.setDefaultFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDefaultOverlayFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDepth": ('bool',), + "QGLFormat.setDepthBufferSize": ('int',), + "QGLFormat.setDirectRendering": ('bool',), + "QGLFormat.setDoubleBuffer": ('bool',), + "QGLFormat.setGreenBufferSize": ('int',), + "QGLFormat.setOption": ('PySide2.libpyside.FormatOptions',), + "QGLFormat.setOverlay": ('bool',), + "QGLFormat.setPlane": ('int',), + "QGLFormat.setProfile": ('PySide2.QtOpenGL.QGLFormat.OpenGLContextProfile',), + "QGLFormat.setRedBufferSize": ('int',), + "QGLFormat.setRgba": ('bool',), + "QGLFormat.setSampleBuffers": ('bool',), + "QGLFormat.setSamples": ('int',), + "QGLFormat.setStencil": ('bool',), + "QGLFormat.setStencilBufferSize": ('int',), + "QGLFormat.setStereo": ('bool',), + "QGLFormat.setSwapInterval": ('int',), + "QGLFormat.setVersion": ('int', 'int'), + "QGLFormat.stencil": (), + "QGLFormat.stencilBufferSize": (), + "QGLFormat.stereo": (), + "QGLFormat.swapInterval": (), + "QGLFormat.testOption": ('PySide2.libpyside.FormatOptions',), + "QGLFormat.toSurfaceFormat": ('PySide2.QtOpenGL.QGLFormat',), + + # class PySide2.QtOpenGL.QGLFramebufferObject: + "QGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QGLFramebufferObject.attachment": (), + "QGLFramebufferObject.bind": (), + "QGLFramebufferObject.bindDefault": (), + "QGLFramebufferObject.blitFramebuffer": ('PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), + "QGLFramebufferObject.devType": (), + "QGLFramebufferObject.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLFramebufferObject.format": (), + "QGLFramebufferObject.handle": (), + "QGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QGLFramebufferObject.isBound": (), + "QGLFramebufferObject.isValid": (), + "QGLFramebufferObject.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLFramebufferObject.paintEngine": (), + "QGLFramebufferObject.release": (), + "QGLFramebufferObject.size": (), + "QGLFramebufferObject.texture": (), + "QGLFramebufferObject.toImage": (), + + # class PySide2.QtOpenGL.QGLFramebufferObjectFormat: + "QGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtOpenGL.QGLFramebufferObjectFormat',)], + "QGLFramebufferObjectFormat.__copy__": (), + "QGLFramebufferObjectFormat.attachment": (), + "QGLFramebufferObjectFormat.internalTextureFormat": (), + "QGLFramebufferObjectFormat.mipmap": (), + "QGLFramebufferObjectFormat.samples": (), + "QGLFramebufferObjectFormat.setAttachment": ('PySide2.QtOpenGL.QGLFramebufferObject.Attachment',), + "QGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QGLFramebufferObjectFormat.setMipmap": ('bool',), + "QGLFramebufferObjectFormat.setSamples": ('int',), + "QGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtOpenGL.QGLPixelBuffer: + "QGLPixelBuffer.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget'), ('int', 'int', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget')], + "QGLPixelBuffer.bindTexture": [('PySide2.QtGui.QImage', 'int'), ('PySide2.QtGui.QPixmap', 'int'), ('str',)], + "QGLPixelBuffer.bindToDynamicTexture": ('int',), + "QGLPixelBuffer.context": (), + "QGLPixelBuffer.deleteTexture": ('int',), + "QGLPixelBuffer.devType": (), + "QGLPixelBuffer.doneCurrent": (), + "QGLPixelBuffer.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLPixelBuffer.format": (), + "QGLPixelBuffer.generateDynamicTexture": (), + "QGLPixelBuffer.handle": (), + "QGLPixelBuffer.hasOpenGLPbuffers": (), + "QGLPixelBuffer.isValid": (), + "QGLPixelBuffer.makeCurrent": (), + "QGLPixelBuffer.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLPixelBuffer.paintEngine": (), + "QGLPixelBuffer.releaseFromDynamicTexture": (), + "QGLPixelBuffer.size": (), + "QGLPixelBuffer.toImage": (), + "QGLPixelBuffer.updateDynamicTexture": ('int',), + + # class PySide2.QtOpenGL.QGLShader: + "QGLShader.__init__": [('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QObject'), ('PySide2.libpyside.ShaderType', 'PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShader.compileSourceFile": ('str',), + "QGLShader.hasOpenGLShaders": ('PySide2.libpyside.ShaderType', 'PySide2.QtOpenGL.QGLContext'), + "QGLShader.isCompiled": (), + "QGLShader.log": (), + "QGLShader.shaderId": (), + "QGLShader.shaderType": (), + "QGLShader.sourceCode": (), + + # class PySide2.QtOpenGL.QGLShaderProgram: + "QGLShaderProgram.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShaderProgram.addShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.addShaderFromSourceCode": [('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QByteArray'), ('PySide2.libpyside.ShaderType', 'str')], + "QGLShaderProgram.addShaderFromSourceFile": ('PySide2.libpyside.ShaderType', 'str'), + "QGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShaderProgram.bind": (), + "QGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.geometryInputType": (), + "QGLShaderProgram.geometryOutputType": (), + "QGLShaderProgram.geometryOutputVertexCount": (), + "QGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtOpenGL.QGLContext',), + "QGLShaderProgram.isLinked": (), + "QGLShaderProgram.link": (), + "QGLShaderProgram.log": (), + "QGLShaderProgram.maxGeometryOutputVertices": (), + "QGLShaderProgram.programId": (), + "QGLShaderProgram.release": (), + "QGLShaderProgram.removeAllShaders": (), + "QGLShaderProgram.removeShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.setAttributeArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setAttributeArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setAttributeArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float')], + "QGLShaderProgram.setGeometryInputType": ('int',), + "QGLShaderProgram.setGeometryOutputType": ('int',), + "QGLShaderProgram.setGeometryOutputVertexCount": ('int',), + "QGLShaderProgram.setUniformValue": [('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QGLShaderProgram.setUniformValueArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setUniformValueArray2x2": [('int', 'PySide2.QtGui.QMatrix2x2', 'int'), ('str', 'PySide2.QtGui.QMatrix2x2', 'int')], + "QGLShaderProgram.setUniformValueArray2x3": [('int', 'PySide2.QtGui.QMatrix2x3', 'int'), ('str', 'PySide2.QtGui.QMatrix2x3', 'int')], + "QGLShaderProgram.setUniformValueArray2x4": [('int', 'PySide2.QtGui.QMatrix2x4', 'int'), ('str', 'PySide2.QtGui.QMatrix2x4', 'int')], + "QGLShaderProgram.setUniformValueArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setUniformValueArray3x2": [('int', 'PySide2.QtGui.QMatrix3x2', 'int'), ('str', 'PySide2.QtGui.QMatrix3x2', 'int')], + "QGLShaderProgram.setUniformValueArray3x3": [('int', 'PySide2.QtGui.QMatrix3x3', 'int'), ('str', 'PySide2.QtGui.QMatrix3x3', 'int')], + "QGLShaderProgram.setUniformValueArray3x4": [('int', 'PySide2.QtGui.QMatrix3x4', 'int'), ('str', 'PySide2.QtGui.QMatrix3x4', 'int')], + "QGLShaderProgram.setUniformValueArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setUniformValueArray4x2": [('int', 'PySide2.QtGui.QMatrix4x2', 'int'), ('str', 'PySide2.QtGui.QMatrix4x2', 'int')], + "QGLShaderProgram.setUniformValueArray4x3": [('int', 'PySide2.QtGui.QMatrix4x3', 'int'), ('str', 'PySide2.QtGui.QMatrix4x3', 'int')], + "QGLShaderProgram.setUniformValueArray4x4": [('int', 'PySide2.QtGui.QMatrix4x4', 'int'), ('str', 'PySide2.QtGui.QMatrix4x4', 'int')], + "QGLShaderProgram.setUniformValueArrayInt": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.setUniformValueArrayUint": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.shaders": (), + "QGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtOpenGL.QGLWidget: + "QGLWidget.__init__": [('PySide2.QtOpenGL.QGLContext', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtOpenGL.QGLFormat', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'PySide2.libpyside.WindowFlags')], + "QGLWidget.autoBufferSwap": (), + "QGLWidget.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'PySide2.libpyside.BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'PySide2.libpyside.BindOptions'), ('str',)], + "QGLWidget.colormap": (), + "QGLWidget.context": (), + "QGLWidget.convertToGLFormat": ('PySide2.QtGui.QImage',), + "QGLWidget.deleteTexture": ('int',), + "QGLWidget.doneCurrent": (), + "QGLWidget.doubleBuffer": (), + "QGLWidget.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLWidget.event": ('PySide2.QtCore.QEvent',), + "QGLWidget.format": (), + "QGLWidget.glDraw": (), + "QGLWidget.glInit": (), + "QGLWidget.grabFrameBuffer": ('bool',), + "QGLWidget.initializeGL": (), + "QGLWidget.initializeOverlayGL": (), + "QGLWidget.isSharing": (), + "QGLWidget.isValid": (), + "QGLWidget.makeCurrent": (), + "QGLWidget.makeOverlayCurrent": (), + "QGLWidget.overlayContext": (), + "QGLWidget.paintEngine": (), + "QGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGLWidget.paintGL": (), + "QGLWidget.paintOverlayGL": (), + "QGLWidget.qglClearColor": ('PySide2.QtGui.QColor',), + "QGLWidget.qglColor": ('PySide2.QtGui.QColor',), + "QGLWidget.renderPixmap": ('int', 'int', 'bool'), + "QGLWidget.renderText": [('float', 'float', 'float', 'str', 'PySide2.QtGui.QFont'), ('int', 'int', 'str', 'PySide2.QtGui.QFont')], + "QGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGLWidget.resizeGL": ('int', 'int'), + "QGLWidget.resizeOverlayGL": ('int', 'int'), + "QGLWidget.setAutoBufferSwap": ('bool',), + "QGLWidget.setColormap": ('PySide2.QtOpenGL.QGLColormap',), + "QGLWidget.swapBuffers": (), + "QGLWidget.updateGL": (), + "QGLWidget.updateOverlayGL": (), + }) + +# Module PySide2.QtPositioning +if "PySide2.QtPositioning" in sys.modules: + dict.update({ + + # class PySide2.QtPositioning.QGeoAddress: + "QGeoAddress.__init__": [(), ('PySide2.QtPositioning.QGeoAddress',)], + "QGeoAddress.__copy__": (), + "QGeoAddress.city": (), + "QGeoAddress.clear": (), + "QGeoAddress.country": (), + "QGeoAddress.countryCode": (), + "QGeoAddress.county": (), + "QGeoAddress.district": (), + "QGeoAddress.isEmpty": (), + "QGeoAddress.isTextGenerated": (), + "QGeoAddress.postalCode": (), + "QGeoAddress.setCity": ('str',), + "QGeoAddress.setCountry": ('str',), + "QGeoAddress.setCountryCode": ('str',), + "QGeoAddress.setCounty": ('str',), + "QGeoAddress.setDistrict": ('str',), + "QGeoAddress.setPostalCode": ('str',), + "QGeoAddress.setState": ('str',), + "QGeoAddress.setStreet": ('str',), + "QGeoAddress.setText": ('str',), + "QGeoAddress.state": (), + "QGeoAddress.street": (), + "QGeoAddress.text": (), + + # class PySide2.QtPositioning.QGeoAreaMonitorInfo: + "QGeoAreaMonitorInfo.__init__": [('PySide2.QtPositioning.QGeoAreaMonitorInfo',), ('str',)], + "QGeoAreaMonitorInfo.__copy__": (), + "QGeoAreaMonitorInfo.area": (), + "QGeoAreaMonitorInfo.expiration": (), + "QGeoAreaMonitorInfo.identifier": (), + "QGeoAreaMonitorInfo.isPersistent": (), + "QGeoAreaMonitorInfo.isValid": (), + "QGeoAreaMonitorInfo.name": (), + "QGeoAreaMonitorInfo.notificationParameters": (), + "QGeoAreaMonitorInfo.setArea": ('PySide2.QtPositioning.QGeoShape',), + "QGeoAreaMonitorInfo.setExpiration": ('PySide2.QtCore.QDateTime',), + "QGeoAreaMonitorInfo.setName": ('str',), + "QGeoAreaMonitorInfo.setNotificationParameters": ('dict',), + "QGeoAreaMonitorInfo.setPersistent": ('bool',), + + # class PySide2.QtPositioning.QGeoAreaMonitorSource: + "QGeoAreaMonitorSource.__init__": ('PySide2.QtCore.QObject',), + "QGeoAreaMonitorSource.activeMonitors": [(), ('PySide2.QtPositioning.QGeoShape',)], + "QGeoAreaMonitorSource.availableSources": (), + "QGeoAreaMonitorSource.createDefaultSource": ('PySide2.QtCore.QObject',), + "QGeoAreaMonitorSource.createSource": ('str', 'PySide2.QtCore.QObject'), + "QGeoAreaMonitorSource.positionInfoSource": (), + "QGeoAreaMonitorSource.requestUpdate": ('PySide2.QtPositioning.QGeoAreaMonitorInfo', 'str'), + "QGeoAreaMonitorSource.setPositionInfoSource": ('PySide2.QtPositioning.QGeoPositionInfoSource',), + "QGeoAreaMonitorSource.sourceName": (), + "QGeoAreaMonitorSource.startMonitoring": ('PySide2.QtPositioning.QGeoAreaMonitorInfo',), + "QGeoAreaMonitorSource.stopMonitoring": ('PySide2.QtPositioning.QGeoAreaMonitorInfo',), + "QGeoAreaMonitorSource.supportedAreaMonitorFeatures": (), + + # class PySide2.QtPositioning.QGeoCircle: + "QGeoCircle.__init__": [(), ('PySide2.QtPositioning.QGeoCircle',), ('PySide2.QtPositioning.QGeoCoordinate', 'float'), ('PySide2.QtPositioning.QGeoShape',)], + "QGeoCircle.__copy__": (), + "QGeoCircle.center": (), + "QGeoCircle.extendCircle": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoCircle.radius": (), + "QGeoCircle.setCenter": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoCircle.setRadius": ('float',), + "QGeoCircle.toString": (), + "QGeoCircle.translate": ('float', 'float'), + "QGeoCircle.translated": ('float', 'float'), + + # class PySide2.QtPositioning.QGeoCoordinate: + "QGeoCoordinate.__init__": [(), ('PySide2.QtPositioning.QGeoCoordinate',), ('float', 'float'), ('float', 'float', 'float')], + "QGeoCoordinate.__copy__": (), + "QGeoCoordinate.altitude": (), + "QGeoCoordinate.atDistanceAndAzimuth": ('float', 'float', 'float'), + "QGeoCoordinate.azimuthTo": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoCoordinate.distanceTo": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoCoordinate.isValid": (), + "QGeoCoordinate.latitude": (), + "QGeoCoordinate.longitude": (), + "QGeoCoordinate.setAltitude": ('float',), + "QGeoCoordinate.setLatitude": ('float',), + "QGeoCoordinate.setLongitude": ('float',), + "QGeoCoordinate.toString": ('PySide2.QtPositioning.QGeoCoordinate.CoordinateFormat',), + "QGeoCoordinate.type": (), + + # class PySide2.QtPositioning.QGeoLocation: + "QGeoLocation.__init__": [(), ('PySide2.QtPositioning.QGeoLocation',)], + "QGeoLocation.__copy__": (), + "QGeoLocation.address": (), + "QGeoLocation.boundingBox": (), + "QGeoLocation.coordinate": (), + "QGeoLocation.isEmpty": (), + "QGeoLocation.setAddress": ('PySide2.QtPositioning.QGeoAddress',), + "QGeoLocation.setBoundingBox": ('PySide2.QtPositioning.QGeoRectangle',), + "QGeoLocation.setCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + + # class PySide2.QtPositioning.QGeoPath: + "QGeoPath.__init__": [(), ('PySide2.QtPositioning.QGeoPath',), ('PySide2.QtPositioning.QGeoShape',), ('list', 'float')], + "QGeoPath.__copy__": (), + "QGeoPath.addCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPath.containsCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPath.coordinateAt": ('int',), + "QGeoPath.insertCoordinate": ('int', 'PySide2.QtPositioning.QGeoCoordinate'), + "QGeoPath.length": ('int', 'int'), + "QGeoPath.path": (), + "QGeoPath.removeCoordinate": [('PySide2.QtPositioning.QGeoCoordinate',), ('int',)], + "QGeoPath.replaceCoordinate": ('int', 'PySide2.QtPositioning.QGeoCoordinate'), + "QGeoPath.setPath": ('list',), + "QGeoPath.setVariantPath": ('list',), + "QGeoPath.setWidth": ('float',), + "QGeoPath.size": (), + "QGeoPath.toString": (), + "QGeoPath.translate": ('float', 'float'), + "QGeoPath.translated": ('float', 'float'), + "QGeoPath.variantPath": (), + "QGeoPath.width": (), + + # class PySide2.QtPositioning.QGeoPolygon: + "QGeoPolygon.__init__": [(), ('PySide2.QtPositioning.QGeoPolygon',), ('PySide2.QtPositioning.QGeoShape',), ('list',)], + "QGeoPolygon.__copy__": (), + "QGeoPolygon.addCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPolygon.containsCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPolygon.coordinateAt": ('int',), + "QGeoPolygon.insertCoordinate": ('int', 'PySide2.QtPositioning.QGeoCoordinate'), + "QGeoPolygon.length": ('int', 'int'), + "QGeoPolygon.path": (), + "QGeoPolygon.removeCoordinate": [('PySide2.QtPositioning.QGeoCoordinate',), ('int',)], + "QGeoPolygon.replaceCoordinate": ('int', 'PySide2.QtPositioning.QGeoCoordinate'), + "QGeoPolygon.setPath": ('list',), + "QGeoPolygon.size": (), + "QGeoPolygon.toString": (), + "QGeoPolygon.translate": ('float', 'float'), + "QGeoPolygon.translated": ('float', 'float'), + + # class PySide2.QtPositioning.QGeoPositionInfo: + "QGeoPositionInfo.__init__": [(), ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtCore.QDateTime'), ('PySide2.QtPositioning.QGeoPositionInfo',)], + "QGeoPositionInfo.__copy__": (), + "QGeoPositionInfo.attribute": ('PySide2.QtPositioning.QGeoPositionInfo.Attribute',), + "QGeoPositionInfo.coordinate": (), + "QGeoPositionInfo.hasAttribute": ('PySide2.QtPositioning.QGeoPositionInfo.Attribute',), + "QGeoPositionInfo.isValid": (), + "QGeoPositionInfo.removeAttribute": ('PySide2.QtPositioning.QGeoPositionInfo.Attribute',), + "QGeoPositionInfo.setAttribute": ('PySide2.QtPositioning.QGeoPositionInfo.Attribute', 'float'), + "QGeoPositionInfo.setCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPositionInfo.setTimestamp": ('PySide2.QtCore.QDateTime',), + "QGeoPositionInfo.timestamp": (), + + # class PySide2.QtPositioning.QGeoPositionInfoSource: + "QGeoPositionInfoSource.__init__": ('PySide2.QtCore.QObject',), + "QGeoPositionInfoSource.availableSources": (), + "QGeoPositionInfoSource.createDefaultSource": ('PySide2.QtCore.QObject',), + "QGeoPositionInfoSource.createSource": ('str', 'PySide2.QtCore.QObject'), + "QGeoPositionInfoSource.lastKnownPosition": ('bool',), + "QGeoPositionInfoSource.minimumUpdateInterval": (), + "QGeoPositionInfoSource.preferredPositioningMethods": (), + "QGeoPositionInfoSource.requestUpdate": ('int',), + "QGeoPositionInfoSource.setPreferredPositioningMethods": ('PySide2.libpyside.PositioningMethods',), + "QGeoPositionInfoSource.setUpdateInterval": ('int',), + "QGeoPositionInfoSource.sourceName": (), + "QGeoPositionInfoSource.startUpdates": (), + "QGeoPositionInfoSource.stopUpdates": (), + "QGeoPositionInfoSource.supportedPositioningMethods": (), + "QGeoPositionInfoSource.updateInterval": (), + + # class PySide2.QtPositioning.QGeoPositionInfoSourceFactory: + "QGeoPositionInfoSourceFactory.__init__": (), + "QGeoPositionInfoSourceFactory.areaMonitor": ('PySide2.QtCore.QObject',), + "QGeoPositionInfoSourceFactory.positionInfoSource": ('PySide2.QtCore.QObject',), + "QGeoPositionInfoSourceFactory.satelliteInfoSource": ('PySide2.QtCore.QObject',), + + # class PySide2.QtPositioning.QGeoRectangle: + "QGeoRectangle.__init__": [(), ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtPositioning.QGeoCoordinate'), ('PySide2.QtPositioning.QGeoCoordinate', 'float', 'float'), ('PySide2.QtPositioning.QGeoRectangle',), ('PySide2.QtPositioning.QGeoShape',), ('list',)], + "QGeoRectangle.__copy__": (), + "QGeoRectangle.bottomLeft": (), + "QGeoRectangle.bottomRight": (), + "QGeoRectangle.center": (), + "QGeoRectangle.contains": [('PySide2.QtPositioning.QGeoCoordinate',), ('PySide2.QtPositioning.QGeoRectangle',)], + "QGeoRectangle.extendRectangle": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.height": (), + "QGeoRectangle.intersects": ('PySide2.QtPositioning.QGeoRectangle',), + "QGeoRectangle.setBottomLeft": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setBottomRight": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setCenter": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setHeight": ('float',), + "QGeoRectangle.setTopLeft": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setTopRight": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setWidth": ('float',), + "QGeoRectangle.toString": (), + "QGeoRectangle.topLeft": (), + "QGeoRectangle.topRight": (), + "QGeoRectangle.translate": ('float', 'float'), + "QGeoRectangle.translated": ('float', 'float'), + "QGeoRectangle.united": ('PySide2.QtPositioning.QGeoRectangle',), + "QGeoRectangle.width": (), + + # class PySide2.QtPositioning.QGeoSatelliteInfo: + "QGeoSatelliteInfo.__init__": [(), ('PySide2.QtPositioning.QGeoSatelliteInfo',)], + "QGeoSatelliteInfo.__copy__": (), + "QGeoSatelliteInfo.attribute": ('PySide2.QtPositioning.QGeoSatelliteInfo.Attribute',), + "QGeoSatelliteInfo.hasAttribute": ('PySide2.QtPositioning.QGeoSatelliteInfo.Attribute',), + "QGeoSatelliteInfo.removeAttribute": ('PySide2.QtPositioning.QGeoSatelliteInfo.Attribute',), + "QGeoSatelliteInfo.satelliteIdentifier": (), + "QGeoSatelliteInfo.satelliteSystem": (), + "QGeoSatelliteInfo.setAttribute": ('PySide2.QtPositioning.QGeoSatelliteInfo.Attribute', 'float'), + "QGeoSatelliteInfo.setSatelliteIdentifier": ('int',), + "QGeoSatelliteInfo.setSatelliteSystem": ('PySide2.QtPositioning.QGeoSatelliteInfo.SatelliteSystem',), + "QGeoSatelliteInfo.setSignalStrength": ('int',), + "QGeoSatelliteInfo.signalStrength": (), + + # class PySide2.QtPositioning.QGeoSatelliteInfoSource: + "QGeoSatelliteInfoSource.__init__": ('PySide2.QtCore.QObject',), + "QGeoSatelliteInfoSource.availableSources": (), + "QGeoSatelliteInfoSource.createDefaultSource": ('PySide2.QtCore.QObject',), + "QGeoSatelliteInfoSource.createSource": ('str', 'PySide2.QtCore.QObject'), + "QGeoSatelliteInfoSource.minimumUpdateInterval": (), + "QGeoSatelliteInfoSource.requestUpdate": ('int',), + "QGeoSatelliteInfoSource.setUpdateInterval": ('int',), + "QGeoSatelliteInfoSource.sourceName": (), + "QGeoSatelliteInfoSource.startUpdates": (), + "QGeoSatelliteInfoSource.stopUpdates": (), + "QGeoSatelliteInfoSource.updateInterval": (), + + # class PySide2.QtPositioning.QGeoShape: + "QGeoShape.__init__": [(), ('PySide2.QtPositioning.QGeoShape',)], + "QGeoShape.__copy__": (), + "QGeoShape.boundingGeoRectangle": (), + "QGeoShape.center": (), + "QGeoShape.contains": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoShape.extendShape": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoShape.isEmpty": (), + "QGeoShape.isValid": (), + "QGeoShape.toString": (), + "QGeoShape.type": (), + + # class PySide2.QtPositioning.QNmeaPositionInfoSource: + "QNmeaPositionInfoSource.__init__": ('PySide2.QtPositioning.QNmeaPositionInfoSource.UpdateMode', 'PySide2.QtCore.QObject'), + "QNmeaPositionInfoSource.device": (), + "QNmeaPositionInfoSource.error": (), + "QNmeaPositionInfoSource.lastKnownPosition": ('bool',), + "QNmeaPositionInfoSource.minimumUpdateInterval": (), + "QNmeaPositionInfoSource.parsePosInfoFromNmeaData": ('str', 'int', 'PySide2.QtPositioning.QGeoPositionInfo', 'bool'), + "QNmeaPositionInfoSource.requestUpdate": ('int',), + "QNmeaPositionInfoSource.setDevice": ('PySide2.QtCore.QIODevice',), + "QNmeaPositionInfoSource.setUpdateInterval": ('int',), + "QNmeaPositionInfoSource.setUserEquivalentRangeError": ('float',), + "QNmeaPositionInfoSource.startUpdates": (), + "QNmeaPositionInfoSource.stopUpdates": (), + "QNmeaPositionInfoSource.supportedPositioningMethods": (), + "QNmeaPositionInfoSource.updateMode": (), + "QNmeaPositionInfoSource.userEquivalentRangeError": (), + }) + +# Module PySide2.QtLocation +if "PySide2.QtLocation" in sys.modules: + dict.update({ + + # class PySide2.QtLocation.QGeoCodeReply: + "QGeoCodeReply.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtLocation.QGeoCodeReply.Error', 'str', 'PySide2.QtCore.QObject')], + "QGeoCodeReply.abort": (), + "QGeoCodeReply.addLocation": ('PySide2.QtPositioning.QGeoLocation',), + "QGeoCodeReply.errorString": (), + "QGeoCodeReply.isFinished": (), + "QGeoCodeReply.limit": (), + "QGeoCodeReply.locations": (), + "QGeoCodeReply.offset": (), + "QGeoCodeReply.setError": ('PySide2.QtLocation.QGeoCodeReply.Error', 'str'), + "QGeoCodeReply.setFinished": ('bool',), + "QGeoCodeReply.setLimit": ('int',), + "QGeoCodeReply.setLocations": ('list',), + "QGeoCodeReply.setOffset": ('int',), + "QGeoCodeReply.setViewport": ('PySide2.QtPositioning.QGeoShape',), + "QGeoCodeReply.viewport": (), + + # class PySide2.QtLocation.QGeoCodingManager: + "QGeoCodingManager.geocode": [('PySide2.QtPositioning.QGeoAddress', 'PySide2.QtPositioning.QGeoShape'), ('str', 'int', 'int', 'PySide2.QtPositioning.QGeoShape')], + "QGeoCodingManager.locale": (), + "QGeoCodingManager.managerName": (), + "QGeoCodingManager.managerVersion": (), + "QGeoCodingManager.reverseGeocode": ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtPositioning.QGeoShape'), + "QGeoCodingManager.setLocale": ('PySide2.QtCore.QLocale',), + + # class PySide2.QtLocation.QGeoCodingManagerEngine: + "QGeoCodingManagerEngine.__init__": ('dict', 'PySide2.QtCore.QObject'), + "QGeoCodingManagerEngine.geocode": [('PySide2.QtPositioning.QGeoAddress', 'PySide2.QtPositioning.QGeoShape'), ('str', 'int', 'int', 'PySide2.QtPositioning.QGeoShape')], + "QGeoCodingManagerEngine.locale": (), + "QGeoCodingManagerEngine.managerName": (), + "QGeoCodingManagerEngine.managerVersion": (), + "QGeoCodingManagerEngine.reverseGeocode": ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtPositioning.QGeoShape'), + "QGeoCodingManagerEngine.setLocale": ('PySide2.QtCore.QLocale',), + + # class PySide2.QtLocation.QGeoManeuver: + "QGeoManeuver.__init__": [(), ('PySide2.QtLocation.QGeoManeuver',)], + "QGeoManeuver.__copy__": (), + "QGeoManeuver.direction": (), + "QGeoManeuver.distanceToNextInstruction": (), + "QGeoManeuver.extendedAttributes": (), + "QGeoManeuver.instructionText": (), + "QGeoManeuver.isValid": (), + "QGeoManeuver.position": (), + "QGeoManeuver.setDirection": ('PySide2.QtLocation.QGeoManeuver.InstructionDirection',), + "QGeoManeuver.setDistanceToNextInstruction": ('float',), + "QGeoManeuver.setExtendedAttributes": ('dict',), + "QGeoManeuver.setInstructionText": ('str',), + "QGeoManeuver.setPosition": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoManeuver.setTimeToNextInstruction": ('int',), + "QGeoManeuver.setWaypoint": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoManeuver.timeToNextInstruction": (), + "QGeoManeuver.waypoint": (), + + # class PySide2.QtLocation.QGeoRoute: + "QGeoRoute.__init__": [(), ('PySide2.QtLocation.QGeoRoute',)], + "QGeoRoute.__copy__": (), + "QGeoRoute.bounds": (), + "QGeoRoute.distance": (), + "QGeoRoute.firstRouteSegment": (), + "QGeoRoute.path": (), + "QGeoRoute.request": (), + "QGeoRoute.routeId": (), + "QGeoRoute.setBounds": ('PySide2.QtPositioning.QGeoRectangle',), + "QGeoRoute.setDistance": ('float',), + "QGeoRoute.setFirstRouteSegment": ('PySide2.QtLocation.QGeoRouteSegment',), + "QGeoRoute.setPath": ('list',), + "QGeoRoute.setRequest": ('PySide2.QtLocation.QGeoRouteRequest',), + "QGeoRoute.setRouteId": ('str',), + "QGeoRoute.setTravelMode": ('PySide2.QtLocation.QGeoRouteRequest.TravelMode',), + "QGeoRoute.setTravelTime": ('int',), + "QGeoRoute.travelMode": (), + "QGeoRoute.travelTime": (), + + # class PySide2.QtLocation.QGeoRouteReply: + "QGeoRouteReply.__init__": [('PySide2.QtLocation.QGeoRouteReply.Error', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtLocation.QGeoRouteRequest', 'PySide2.QtCore.QObject')], + "QGeoRouteReply.abort": (), + "QGeoRouteReply.addRoutes": ('list',), + "QGeoRouteReply.errorString": (), + "QGeoRouteReply.isFinished": (), + "QGeoRouteReply.request": (), + "QGeoRouteReply.routes": (), + "QGeoRouteReply.setError": ('PySide2.QtLocation.QGeoRouteReply.Error', 'str'), + "QGeoRouteReply.setFinished": ('bool',), + "QGeoRouteReply.setRoutes": ('list',), + + # class PySide2.QtLocation.QGeoRouteRequest: + "QGeoRouteRequest.__init__": [('PySide2.QtLocation.QGeoRouteRequest',), ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtPositioning.QGeoCoordinate'), ('list',)], + "QGeoRouteRequest.excludeAreas": (), + "QGeoRouteRequest.extraParameters": (), + "QGeoRouteRequest.featureTypes": (), + "QGeoRouteRequest.featureWeight": ('PySide2.QtLocation.QGeoRouteRequest.FeatureType',), + "QGeoRouteRequest.maneuverDetail": (), + "QGeoRouteRequest.numberAlternativeRoutes": (), + "QGeoRouteRequest.routeOptimization": (), + "QGeoRouteRequest.segmentDetail": (), + "QGeoRouteRequest.setExcludeAreas": ('list',), + "QGeoRouteRequest.setExtraParameters": ('dict',), + "QGeoRouteRequest.setFeatureWeight": ('PySide2.QtLocation.QGeoRouteRequest.FeatureType', 'PySide2.QtLocation.QGeoRouteRequest.FeatureWeight'), + "QGeoRouteRequest.setManeuverDetail": ('PySide2.QtLocation.QGeoRouteRequest.ManeuverDetail',), + "QGeoRouteRequest.setNumberAlternativeRoutes": ('int',), + "QGeoRouteRequest.setRouteOptimization": ('PySide2.libpyside.RouteOptimizations',), + "QGeoRouteRequest.setSegmentDetail": ('PySide2.QtLocation.QGeoRouteRequest.SegmentDetail',), + "QGeoRouteRequest.setTravelModes": ('PySide2.libpyside.TravelModes',), + "QGeoRouteRequest.setWaypoints": ('list',), + "QGeoRouteRequest.setWaypointsMetadata": ('list',), + "QGeoRouteRequest.travelModes": (), + "QGeoRouteRequest.waypoints": (), + "QGeoRouteRequest.waypointsMetadata": (), + + # class PySide2.QtLocation.QGeoRouteSegment: + "QGeoRouteSegment.__init__": [(), ('PySide2.QtLocation.QGeoRouteSegment',)], + "QGeoRouteSegment.__copy__": (), + "QGeoRouteSegment.distance": (), + "QGeoRouteSegment.isValid": (), + "QGeoRouteSegment.maneuver": (), + "QGeoRouteSegment.nextRouteSegment": (), + "QGeoRouteSegment.path": (), + "QGeoRouteSegment.setDistance": ('float',), + "QGeoRouteSegment.setManeuver": ('PySide2.QtLocation.QGeoManeuver',), + "QGeoRouteSegment.setNextRouteSegment": ('PySide2.QtLocation.QGeoRouteSegment',), + "QGeoRouteSegment.setPath": ('list',), + "QGeoRouteSegment.setTravelTime": ('int',), + "QGeoRouteSegment.travelTime": (), + + # class PySide2.QtLocation.QGeoRoutingManager: + "QGeoRoutingManager.calculateRoute": ('PySide2.QtLocation.QGeoRouteRequest',), + "QGeoRoutingManager.locale": (), + "QGeoRoutingManager.managerName": (), + "QGeoRoutingManager.managerVersion": (), + "QGeoRoutingManager.measurementSystem": (), + "QGeoRoutingManager.setLocale": ('PySide2.QtCore.QLocale',), + "QGeoRoutingManager.setMeasurementSystem": ('PySide2.QtCore.QLocale.MeasurementSystem',), + "QGeoRoutingManager.supportedFeatureTypes": (), + "QGeoRoutingManager.supportedFeatureWeights": (), + "QGeoRoutingManager.supportedManeuverDetails": (), + "QGeoRoutingManager.supportedRouteOptimizations": (), + "QGeoRoutingManager.supportedSegmentDetails": (), + "QGeoRoutingManager.supportedTravelModes": (), + "QGeoRoutingManager.updateRoute": ('PySide2.QtLocation.QGeoRoute', 'PySide2.QtPositioning.QGeoCoordinate'), + + # class PySide2.QtLocation.QGeoRoutingManagerEngine: + "QGeoRoutingManagerEngine.__init__": ('dict', 'PySide2.QtCore.QObject'), + "QGeoRoutingManagerEngine.calculateRoute": ('PySide2.QtLocation.QGeoRouteRequest',), + "QGeoRoutingManagerEngine.locale": (), + "QGeoRoutingManagerEngine.managerName": (), + "QGeoRoutingManagerEngine.managerVersion": (), + "QGeoRoutingManagerEngine.measurementSystem": (), + "QGeoRoutingManagerEngine.setLocale": ('PySide2.QtCore.QLocale',), + "QGeoRoutingManagerEngine.setMeasurementSystem": ('PySide2.QtCore.QLocale.MeasurementSystem',), + "QGeoRoutingManagerEngine.setSupportedFeatureTypes": ('PySide2.libpyside.FeatureTypes',), + "QGeoRoutingManagerEngine.setSupportedFeatureWeights": ('PySide2.libpyside.FeatureWeights',), + "QGeoRoutingManagerEngine.setSupportedManeuverDetails": ('PySide2.libpyside.ManeuverDetails',), + "QGeoRoutingManagerEngine.setSupportedRouteOptimizations": ('PySide2.libpyside.RouteOptimizations',), + "QGeoRoutingManagerEngine.setSupportedSegmentDetails": ('PySide2.libpyside.SegmentDetails',), + "QGeoRoutingManagerEngine.setSupportedTravelModes": ('PySide2.libpyside.TravelModes',), + "QGeoRoutingManagerEngine.supportedFeatureTypes": (), + "QGeoRoutingManagerEngine.supportedFeatureWeights": (), + "QGeoRoutingManagerEngine.supportedManeuverDetails": (), + "QGeoRoutingManagerEngine.supportedRouteOptimizations": (), + "QGeoRoutingManagerEngine.supportedSegmentDetails": (), + "QGeoRoutingManagerEngine.supportedTravelModes": (), + "QGeoRoutingManagerEngine.updateRoute": ('PySide2.QtLocation.QGeoRoute', 'PySide2.QtPositioning.QGeoCoordinate'), + + # class PySide2.QtLocation.QGeoServiceProvider: + "QGeoServiceProvider.__init__": ('str', 'dict', 'bool'), + "QGeoServiceProvider.availableServiceProviders": (), + "QGeoServiceProvider.error": (), + "QGeoServiceProvider.errorString": (), + "QGeoServiceProvider.geocodingFeatures": (), + "QGeoServiceProvider.geocodingManager": (), + "QGeoServiceProvider.mappingFeatures": (), + "QGeoServiceProvider.navigationFeatures": (), + "QGeoServiceProvider.placeManager": (), + "QGeoServiceProvider.placesFeatures": (), + "QGeoServiceProvider.routingFeatures": (), + "QGeoServiceProvider.routingManager": (), + "QGeoServiceProvider.setAllowExperimental": ('bool',), + "QGeoServiceProvider.setLocale": ('PySide2.QtCore.QLocale',), + "QGeoServiceProvider.setParameters": ('dict',), + + # class PySide2.QtLocation.QGeoServiceProviderFactory: + "QGeoServiceProviderFactory.__init__": (), + "QGeoServiceProviderFactory.createGeocodingManagerEngine": ('dict', 'PySide2.QtLocation.QGeoServiceProvider.Error', 'str'), + "QGeoServiceProviderFactory.createPlaceManagerEngine": ('dict', 'PySide2.QtLocation.QGeoServiceProvider.Error', 'str'), + "QGeoServiceProviderFactory.createRoutingManagerEngine": ('dict', 'PySide2.QtLocation.QGeoServiceProvider.Error', 'str'), + + # class PySide2.QtLocation.QGeoServiceProviderFactoryV2: + "QGeoServiceProviderFactoryV2.__init__": (), + + # class PySide2.QtLocation.QPlace: + "QPlace.__init__": [(), ('PySide2.QtLocation.QPlace',)], + "QPlace.__copy__": (), + "QPlace.appendContactDetail": ('str', 'PySide2.QtLocation.QPlaceContactDetail'), + "QPlace.attribution": (), + "QPlace.categories": (), + "QPlace.contactDetails": ('str',), + "QPlace.contactTypes": (), + "QPlace.detailsFetched": (), + "QPlace.extendedAttribute": ('str',), + "QPlace.extendedAttributeTypes": (), + "QPlace.icon": (), + "QPlace.isEmpty": (), + "QPlace.location": (), + "QPlace.name": (), + "QPlace.placeId": (), + "QPlace.primaryEmail": (), + "QPlace.primaryFax": (), + "QPlace.primaryPhone": (), + "QPlace.primaryWebsite": (), + "QPlace.ratings": (), + "QPlace.removeContactDetails": ('str',), + "QPlace.removeExtendedAttribute": ('str',), + "QPlace.setAttribution": ('str',), + "QPlace.setCategories": ('list',), + "QPlace.setCategory": ('PySide2.QtLocation.QPlaceCategory',), + "QPlace.setContactDetails": ('str', 'list'), + "QPlace.setDetailsFetched": ('bool',), + "QPlace.setExtendedAttribute": ('str', 'PySide2.QtLocation.QPlaceAttribute'), + "QPlace.setIcon": ('PySide2.QtLocation.QPlaceIcon',), + "QPlace.setLocation": ('PySide2.QtPositioning.QGeoLocation',), + "QPlace.setName": ('str',), + "QPlace.setPlaceId": ('str',), + "QPlace.setRatings": ('PySide2.QtLocation.QPlaceRatings',), + "QPlace.setSupplier": ('PySide2.QtLocation.QPlaceSupplier',), + "QPlace.supplier": (), + + # class PySide2.QtLocation.QPlaceAttribute: + "QPlaceAttribute.__init__": [(), ('PySide2.QtLocation.QPlaceAttribute',)], + "QPlaceAttribute.__copy__": (), + "QPlaceAttribute.isEmpty": (), + "QPlaceAttribute.label": (), + "QPlaceAttribute.setLabel": ('str',), + "QPlaceAttribute.setText": ('str',), + "QPlaceAttribute.text": (), + + # class PySide2.QtLocation.QPlaceCategory: + "QPlaceCategory.__init__": [(), ('PySide2.QtLocation.QPlaceCategory',)], + "QPlaceCategory.__copy__": (), + "QPlaceCategory.categoryId": (), + "QPlaceCategory.icon": (), + "QPlaceCategory.isEmpty": (), + "QPlaceCategory.name": (), + "QPlaceCategory.setCategoryId": ('str',), + "QPlaceCategory.setIcon": ('PySide2.QtLocation.QPlaceIcon',), + "QPlaceCategory.setName": ('str',), + + # class PySide2.QtLocation.QPlaceContactDetail: + "QPlaceContactDetail.__init__": [(), ('PySide2.QtLocation.QPlaceContactDetail',)], + "QPlaceContactDetail.__copy__": (), + "QPlaceContactDetail.clear": (), + "QPlaceContactDetail.label": (), + "QPlaceContactDetail.setLabel": ('str',), + "QPlaceContactDetail.setValue": ('str',), + "QPlaceContactDetail.value": (), + + # class PySide2.QtLocation.QPlaceContent: + "QPlaceContent.__init__": [(), ('PySide2.QtLocation.QPlaceContent',)], + "QPlaceContent.__copy__": (), + "QPlaceContent.attribution": (), + "QPlaceContent.setAttribution": ('str',), + "QPlaceContent.setSupplier": ('PySide2.QtLocation.QPlaceSupplier',), + "QPlaceContent.setUser": ('PySide2.QtLocation.QPlaceUser',), + "QPlaceContent.supplier": (), + "QPlaceContent.user": (), + + # class PySide2.QtLocation.QPlaceContentReply: + "QPlaceContentReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceContentReply.content": (), + "QPlaceContentReply.nextPageRequest": (), + "QPlaceContentReply.previousPageRequest": (), + "QPlaceContentReply.request": (), + "QPlaceContentReply.setContent": ('dict',), + "QPlaceContentReply.setNextPageRequest": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceContentReply.setPreviousPageRequest": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceContentReply.setRequest": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceContentReply.setTotalCount": ('int',), + "QPlaceContentReply.totalCount": (), + "QPlaceContentReply.type": (), + + # class PySide2.QtLocation.QPlaceContentRequest: + "QPlaceContentRequest.__init__": [(), ('PySide2.QtLocation.QPlaceContentRequest',)], + "QPlaceContentRequest.__copy__": (), + "QPlaceContentRequest.clear": (), + "QPlaceContentRequest.contentContext": (), + "QPlaceContentRequest.limit": (), + "QPlaceContentRequest.placeId": (), + "QPlaceContentRequest.setContentContext": ('Any',), + "QPlaceContentRequest.setLimit": ('int',), + "QPlaceContentRequest.setPlaceId": ('str',), + + # class PySide2.QtLocation.QPlaceDetailsReply: + "QPlaceDetailsReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceDetailsReply.place": (), + "QPlaceDetailsReply.setPlace": ('PySide2.QtLocation.QPlace',), + "QPlaceDetailsReply.type": (), + + # class PySide2.QtLocation.QPlaceEditorial: + "QPlaceEditorial.__init__": [(), ('PySide2.QtLocation.QPlaceContent',)], + "QPlaceEditorial.language": (), + "QPlaceEditorial.setLanguage": ('str',), + "QPlaceEditorial.setText": ('str',), + "QPlaceEditorial.setTitle": ('str',), + "QPlaceEditorial.text": (), + "QPlaceEditorial.title": (), + + # class PySide2.QtLocation.QPlaceIcon: + "QPlaceIcon.__init__": [(), ('PySide2.QtLocation.QPlaceIcon',)], + "QPlaceIcon.__copy__": (), + "QPlaceIcon.isEmpty": (), + "QPlaceIcon.manager": (), + "QPlaceIcon.parameters": (), + "QPlaceIcon.setManager": ('PySide2.QtLocation.QPlaceManager',), + "QPlaceIcon.setParameters": ('dict',), + "QPlaceIcon.url": ('PySide2.QtCore.QSize',), + + # class PySide2.QtLocation.QPlaceIdReply: + "QPlaceIdReply.__init__": ('PySide2.QtLocation.QPlaceIdReply.OperationType', 'PySide2.QtCore.QObject'), + "QPlaceIdReply.id": (), + "QPlaceIdReply.operationType": (), + "QPlaceIdReply.setId": ('str',), + "QPlaceIdReply.type": (), + + # class PySide2.QtLocation.QPlaceImage: + "QPlaceImage.__init__": [(), ('PySide2.QtLocation.QPlaceContent',)], + "QPlaceImage.imageId": (), + "QPlaceImage.mimeType": (), + "QPlaceImage.setImageId": ('str',), + "QPlaceImage.setMimeType": ('str',), + "QPlaceImage.setUrl": ('PySide2.QtCore.QUrl',), + "QPlaceImage.url": (), + + # class PySide2.QtLocation.QPlaceManager: + "QPlaceManager.category": ('str',), + "QPlaceManager.childCategories": ('str',), + "QPlaceManager.childCategoryIds": ('str',), + "QPlaceManager.compatiblePlace": ('PySide2.QtLocation.QPlace',), + "QPlaceManager.getPlaceContent": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceManager.getPlaceDetails": ('str',), + "QPlaceManager.initializeCategories": (), + "QPlaceManager.locales": (), + "QPlaceManager.managerName": (), + "QPlaceManager.managerVersion": (), + "QPlaceManager.matchingPlaces": ('PySide2.QtLocation.QPlaceMatchRequest',), + "QPlaceManager.parentCategoryId": ('str',), + "QPlaceManager.removeCategory": ('str',), + "QPlaceManager.removePlace": ('str',), + "QPlaceManager.saveCategory": ('PySide2.QtLocation.QPlaceCategory', 'str'), + "QPlaceManager.savePlace": ('PySide2.QtLocation.QPlace',), + "QPlaceManager.search": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceManager.searchSuggestions": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceManager.setLocale": ('PySide2.QtCore.QLocale',), + "QPlaceManager.setLocales": ('list',), + + # class PySide2.QtLocation.QPlaceManagerEngine: + "QPlaceManagerEngine.__init__": ('dict', 'PySide2.QtCore.QObject'), + "QPlaceManagerEngine.category": ('str',), + "QPlaceManagerEngine.childCategories": ('str',), + "QPlaceManagerEngine.childCategoryIds": ('str',), + "QPlaceManagerEngine.compatiblePlace": ('PySide2.QtLocation.QPlace',), + "QPlaceManagerEngine.constructIconUrl": ('PySide2.QtLocation.QPlaceIcon', 'PySide2.QtCore.QSize'), + "QPlaceManagerEngine.getPlaceContent": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceManagerEngine.getPlaceDetails": ('str',), + "QPlaceManagerEngine.initializeCategories": (), + "QPlaceManagerEngine.locales": (), + "QPlaceManagerEngine.manager": (), + "QPlaceManagerEngine.managerName": (), + "QPlaceManagerEngine.managerVersion": (), + "QPlaceManagerEngine.matchingPlaces": ('PySide2.QtLocation.QPlaceMatchRequest',), + "QPlaceManagerEngine.parentCategoryId": ('str',), + "QPlaceManagerEngine.removeCategory": ('str',), + "QPlaceManagerEngine.removePlace": ('str',), + "QPlaceManagerEngine.saveCategory": ('PySide2.QtLocation.QPlaceCategory', 'str'), + "QPlaceManagerEngine.savePlace": ('PySide2.QtLocation.QPlace',), + "QPlaceManagerEngine.search": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceManagerEngine.searchSuggestions": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceManagerEngine.setLocales": ('list',), + + # class PySide2.QtLocation.QPlaceMatchReply: + "QPlaceMatchReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceMatchReply.places": (), + "QPlaceMatchReply.request": (), + "QPlaceMatchReply.setPlaces": ('list',), + "QPlaceMatchReply.setRequest": ('PySide2.QtLocation.QPlaceMatchRequest',), + "QPlaceMatchReply.type": (), + + # class PySide2.QtLocation.QPlaceMatchRequest: + "QPlaceMatchRequest.__init__": [(), ('PySide2.QtLocation.QPlaceMatchRequest',)], + "QPlaceMatchRequest.__copy__": (), + "QPlaceMatchRequest.clear": (), + "QPlaceMatchRequest.parameters": (), + "QPlaceMatchRequest.places": (), + "QPlaceMatchRequest.setParameters": ('dict',), + "QPlaceMatchRequest.setPlaces": ('list',), + "QPlaceMatchRequest.setResults": ('list',), + + # class PySide2.QtLocation.QPlaceProposedSearchResult: + "QPlaceProposedSearchResult.__init__": [(), ('PySide2.QtLocation.QPlaceSearchResult',)], + "QPlaceProposedSearchResult.searchRequest": (), + "QPlaceProposedSearchResult.setSearchRequest": ('PySide2.QtLocation.QPlaceSearchRequest',), + + # class PySide2.QtLocation.QPlaceRatings: + "QPlaceRatings.__init__": [(), ('PySide2.QtLocation.QPlaceRatings',)], + "QPlaceRatings.__copy__": (), + "QPlaceRatings.average": (), + "QPlaceRatings.count": (), + "QPlaceRatings.isEmpty": (), + "QPlaceRatings.maximum": (), + "QPlaceRatings.setAverage": ('float',), + "QPlaceRatings.setCount": ('int',), + "QPlaceRatings.setMaximum": ('float',), + + # class PySide2.QtLocation.QPlaceReply: + "QPlaceReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceReply.abort": (), + "QPlaceReply.errorString": (), + "QPlaceReply.isFinished": (), + "QPlaceReply.setError": ('PySide2.QtLocation.QPlaceReply.Error', 'str'), + "QPlaceReply.setFinished": ('bool',), + "QPlaceReply.type": (), + + # class PySide2.QtLocation.QPlaceResult: + "QPlaceResult.__init__": [(), ('PySide2.QtLocation.QPlaceSearchResult',)], + "QPlaceResult.distance": (), + "QPlaceResult.isSponsored": (), + "QPlaceResult.place": (), + "QPlaceResult.setDistance": ('float',), + "QPlaceResult.setPlace": ('PySide2.QtLocation.QPlace',), + "QPlaceResult.setSponsored": ('bool',), + + # class PySide2.QtLocation.QPlaceReview: + "QPlaceReview.__init__": [(), ('PySide2.QtLocation.QPlaceContent',)], + "QPlaceReview.dateTime": (), + "QPlaceReview.language": (), + "QPlaceReview.rating": (), + "QPlaceReview.reviewId": (), + "QPlaceReview.setDateTime": ('PySide2.QtCore.QDateTime',), + "QPlaceReview.setLanguage": ('str',), + "QPlaceReview.setRating": ('float',), + "QPlaceReview.setReviewId": ('str',), + "QPlaceReview.setText": ('str',), + "QPlaceReview.setTitle": ('str',), + "QPlaceReview.text": (), + "QPlaceReview.title": (), + + # class PySide2.QtLocation.QPlaceSearchReply: + "QPlaceSearchReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceSearchReply.nextPageRequest": (), + "QPlaceSearchReply.previousPageRequest": (), + "QPlaceSearchReply.request": (), + "QPlaceSearchReply.results": (), + "QPlaceSearchReply.setNextPageRequest": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceSearchReply.setPreviousPageRequest": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceSearchReply.setRequest": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceSearchReply.setResults": ('list',), + "QPlaceSearchReply.type": (), + + # class PySide2.QtLocation.QPlaceSearchRequest: + "QPlaceSearchRequest.__init__": [(), ('PySide2.QtLocation.QPlaceSearchRequest',)], + "QPlaceSearchRequest.categories": (), + "QPlaceSearchRequest.clear": (), + "QPlaceSearchRequest.limit": (), + "QPlaceSearchRequest.recommendationId": (), + "QPlaceSearchRequest.relevanceHint": (), + "QPlaceSearchRequest.searchArea": (), + "QPlaceSearchRequest.searchContext": (), + "QPlaceSearchRequest.searchTerm": (), + "QPlaceSearchRequest.setCategories": ('list',), + "QPlaceSearchRequest.setCategory": ('PySide2.QtLocation.QPlaceCategory',), + "QPlaceSearchRequest.setLimit": ('int',), + "QPlaceSearchRequest.setRecommendationId": ('str',), + "QPlaceSearchRequest.setRelevanceHint": ('PySide2.QtLocation.QPlaceSearchRequest.RelevanceHint',), + "QPlaceSearchRequest.setSearchArea": ('PySide2.QtPositioning.QGeoShape',), + "QPlaceSearchRequest.setSearchContext": ('Any',), + "QPlaceSearchRequest.setSearchTerm": ('str',), + + # class PySide2.QtLocation.QPlaceSearchResult: + "QPlaceSearchResult.__init__": [(), ('PySide2.QtLocation.QPlaceSearchResult',)], + "QPlaceSearchResult.icon": (), + "QPlaceSearchResult.setIcon": ('PySide2.QtLocation.QPlaceIcon',), + "QPlaceSearchResult.setTitle": ('str',), + "QPlaceSearchResult.title": (), + + # class PySide2.QtLocation.QPlaceSearchSuggestionReply: + "QPlaceSearchSuggestionReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceSearchSuggestionReply.setSuggestions": ('List[str]',), + "QPlaceSearchSuggestionReply.suggestions": (), + "QPlaceSearchSuggestionReply.type": (), + + # class PySide2.QtLocation.QPlaceSupplier: + "QPlaceSupplier.__init__": [(), ('PySide2.QtLocation.QPlaceSupplier',)], + "QPlaceSupplier.__copy__": (), + "QPlaceSupplier.icon": (), + "QPlaceSupplier.isEmpty": (), + "QPlaceSupplier.name": (), + "QPlaceSupplier.setIcon": ('PySide2.QtLocation.QPlaceIcon',), + "QPlaceSupplier.setName": ('str',), + "QPlaceSupplier.setSupplierId": ('str',), + "QPlaceSupplier.setUrl": ('PySide2.QtCore.QUrl',), + "QPlaceSupplier.supplierId": (), + "QPlaceSupplier.url": (), + + # class PySide2.QtLocation.QPlaceUser: + "QPlaceUser.__init__": [(), ('PySide2.QtLocation.QPlaceUser',)], + "QPlaceUser.__copy__": (), + "QPlaceUser.name": (), + "QPlaceUser.setName": ('str',), + "QPlaceUser.setUserId": ('str',), + "QPlaceUser.userId": (), + }) + +# Module PySide2.QtQml +if "PySide2.QtQml" in sys.modules: + dict.update({ + + # class PySide2.QtQml.ListProperty: + + # class PySide2.QtQml.QJSEngine: + "QJSEngine.__init__": [(), ('PySide2.QtCore.QObject',)], + "QJSEngine.collectGarbage": (), + "QJSEngine.evaluate": ('str', 'str', 'int'), + "QJSEngine.globalObject": (), + "QJSEngine.installExtensions": ('PySide2.libpyside.Extensions', 'PySide2.QtQml.QJSValue'), + "QJSEngine.installTranslatorFunctions": ('PySide2.QtQml.QJSValue',), + "QJSEngine.newArray": ('int',), + "QJSEngine.newObject": (), + "QJSEngine.newQMetaObject": ('PySide2.QtCore.QMetaObject',), + "QJSEngine.newQObject": ('PySide2.QtCore.QObject',), + "QJSEngine.toScriptValue": ('Any',), + + # class PySide2.QtQml.QJSValue: + "QJSValue.__init__": [('PySide2.QtQml.QJSValue',), ('PySide2.QtQml.QJSValue.SpecialValue',), ('bool',), ('float',), ('int',), ('str',)], + "QJSValue.__copy__": (), + "QJSValue.call": ('list',), + "QJSValue.callAsConstructor": ('list',), + "QJSValue.callWithInstance": ('PySide2.QtQml.QJSValue', 'list'), + "QJSValue.deleteProperty": ('str',), + "QJSValue.engine": (), + "QJSValue.equals": ('PySide2.QtQml.QJSValue',), + "QJSValue.hasOwnProperty": ('str',), + "QJSValue.hasProperty": ('str',), + "QJSValue.isArray": (), + "QJSValue.isBool": (), + "QJSValue.isCallable": (), + "QJSValue.isDate": (), + "QJSValue.isError": (), + "QJSValue.isNull": (), + "QJSValue.isNumber": (), + "QJSValue.isObject": (), + "QJSValue.isQMetaObject": (), + "QJSValue.isQObject": (), + "QJSValue.isRegExp": (), + "QJSValue.isString": (), + "QJSValue.isUndefined": (), + "QJSValue.isVariant": (), + "QJSValue.property": [('int',), ('str',)], + "QJSValue.prototype": (), + "QJSValue.setProperty": [('int', 'PySide2.QtQml.QJSValue'), ('str', 'PySide2.QtQml.QJSValue')], + "QJSValue.setPrototype": ('PySide2.QtQml.QJSValue',), + "QJSValue.strictlyEquals": ('PySide2.QtQml.QJSValue',), + "QJSValue.toBool": (), + "QJSValue.toDateTime": (), + "QJSValue.toInt": (), + "QJSValue.toNumber": (), + "QJSValue.toQMetaObject": (), + "QJSValue.toQObject": (), + "QJSValue.toString": (), + "QJSValue.toUInt": (), + "QJSValue.toVariant": (), + + # class PySide2.QtQml.QJSValueIterator: + "QJSValueIterator.__init__": ('PySide2.QtQml.QJSValue',), + "QJSValueIterator.hasNext": (), + "QJSValueIterator.name": (), + "QJSValueIterator.value": (), + + # class PySide2.QtQml.QQmlAbstractUrlInterceptor: + "QQmlAbstractUrlInterceptor.__init__": (), + "QQmlAbstractUrlInterceptor.intercept": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlAbstractUrlInterceptor.DataType'), + + # class PySide2.QtQml.QQmlApplicationEngine: + "QQmlApplicationEngine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QQmlApplicationEngine.load": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlApplicationEngine.loadData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlApplicationEngine.rootObjects": (), + + # class PySide2.QtQml.QQmlComponent: + "QQmlComponent.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject')], + "QQmlComponent.beginCreate": ('PySide2.QtQml.QQmlContext',), + "QQmlComponent.completeCreate": (), + "QQmlComponent.create": [('PySide2.QtQml.QQmlContext',), ('PySide2.QtQml.QQmlIncubator', 'PySide2.QtQml.QQmlContext', 'PySide2.QtQml.QQmlContext')], + "QQmlComponent.creationContext": (), + "QQmlComponent.errorString": (), + "QQmlComponent.errors": (), + "QQmlComponent.isError": (), + "QQmlComponent.isLoading": (), + "QQmlComponent.isNull": (), + "QQmlComponent.isReady": (), + "QQmlComponent.loadUrl": [('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode')], + "QQmlComponent.progress": (), + "QQmlComponent.setData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlComponent.status": (), + "QQmlComponent.url": (), + + # class PySide2.QtQml.QQmlContext: + "QQmlContext.__init__": [('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject')], + "QQmlContext.baseUrl": (), + "QQmlContext.contextObject": (), + "QQmlContext.contextProperty": ('str',), + "QQmlContext.engine": (), + "QQmlContext.isValid": (), + "QQmlContext.nameForObject": ('PySide2.QtCore.QObject',), + "QQmlContext.parentContext": (), + "QQmlContext.resolvedUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setContextObject": ('PySide2.QtCore.QObject',), + "QQmlContext.setContextProperty": [('str', 'Any'), ('str', 'PySide2.QtCore.QObject')], + + # class PySide2.QtQml.QQmlDebuggingEnabler: + "QQmlDebuggingEnabler.__init__": ('bool',), + "QQmlDebuggingEnabler.connectToLocalDebugger": ('str', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode'), + "QQmlDebuggingEnabler.debuggerServices": (), + "QQmlDebuggingEnabler.inspectorServices": (), + "QQmlDebuggingEnabler.nativeDebuggerServices": (), + "QQmlDebuggingEnabler.profilerServices": (), + "QQmlDebuggingEnabler.setServices": ('List[str]',), + "QQmlDebuggingEnabler.startDebugConnector": ('str', 'dict'), + "QQmlDebuggingEnabler.startTcpDebugServer": ('int', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode', 'str'), + + # class PySide2.QtQml.QQmlEngine: + "QQmlEngine.__init__": ('PySide2.QtCore.QObject',), + "QQmlEngine.addImageProvider": ('str', 'PySide2.QtQml.QQmlImageProviderBase'), + "QQmlEngine.addImportPath": ('str',), + "QQmlEngine.addNamedBundle": ('str', 'str'), + "QQmlEngine.addPluginPath": ('str',), + "QQmlEngine.baseUrl": (), + "QQmlEngine.clearComponentCache": (), + "QQmlEngine.contextForObject": ('PySide2.QtCore.QObject',), + "QQmlEngine.event": ('PySide2.QtCore.QEvent',), + "QQmlEngine.imageProvider": ('str',), + "QQmlEngine.importPathList": (), + "QQmlEngine.importPlugin": ('str', 'str', 'list'), + "QQmlEngine.incubationController": (), + "QQmlEngine.networkAccessManager": (), + "QQmlEngine.networkAccessManagerFactory": (), + "QQmlEngine.objectOwnership": ('PySide2.QtCore.QObject',), + "QQmlEngine.offlineStorageDatabaseFilePath": ('str',), + "QQmlEngine.offlineStoragePath": (), + "QQmlEngine.outputWarningsToStandardError": (), + "QQmlEngine.pluginPathList": (), + "QQmlEngine.removeImageProvider": ('str',), + "QQmlEngine.retranslate": (), + "QQmlEngine.rootContext": (), + "QQmlEngine.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlEngine.setContextForObject": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), + "QQmlEngine.setImportPathList": ('List[str]',), + "QQmlEngine.setIncubationController": ('PySide2.QtQml.QQmlIncubationController',), + "QQmlEngine.setNetworkAccessManagerFactory": ('PySide2.QtQml.QQmlNetworkAccessManagerFactory',), + "QQmlEngine.setObjectOwnership": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine.ObjectOwnership'), + "QQmlEngine.setOfflineStoragePath": ('str',), + "QQmlEngine.setOutputWarningsToStandardError": ('bool',), + "QQmlEngine.setPluginPathList": ('List[str]',), + "QQmlEngine.setUrlInterceptor": ('PySide2.QtQml.QQmlAbstractUrlInterceptor',), + "QQmlEngine.trimComponentCache": (), + "QQmlEngine.urlInterceptor": (), + + # class PySide2.QtQml.QQmlError: + "QQmlError.__init__": [(), ('PySide2.QtQml.QQmlError',)], + "QQmlError.__copy__": (), + "QQmlError.column": (), + "QQmlError.description": (), + "QQmlError.isValid": (), + "QQmlError.line": (), + "QQmlError.messageType": (), + "QQmlError.object": (), + "QQmlError.setColumn": ('int',), + "QQmlError.setDescription": ('str',), + "QQmlError.setLine": ('int',), + "QQmlError.setMessageType": ('PySide2.QtCore.QtMsgType',), + "QQmlError.setObject": ('PySide2.QtCore.QObject',), + "QQmlError.setUrl": ('PySide2.QtCore.QUrl',), + "QQmlError.toString": (), + "QQmlError.url": (), + + # class PySide2.QtQml.QQmlExpression: + "QQmlExpression.__init__": [(), ('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlScriptString', 'PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QObject')], + "QQmlExpression.clearError": (), + "QQmlExpression.columnNumber": (), + "QQmlExpression.context": (), + "QQmlExpression.engine": (), + "QQmlExpression.error": (), + "QQmlExpression.evaluate": ('bool',), + "QQmlExpression.expression": (), + "QQmlExpression.hasError": (), + "QQmlExpression.lineNumber": (), + "QQmlExpression.notifyOnValueChanged": (), + "QQmlExpression.scopeObject": (), + "QQmlExpression.setExpression": ('str',), + "QQmlExpression.setNotifyOnValueChanged": ('bool',), + "QQmlExpression.setSourceLocation": ('str', 'int', 'int'), + "QQmlExpression.sourceFile": (), + + # class PySide2.QtQml.QQmlExtensionInterface: + "QQmlExtensionInterface.__init__": (), + "QQmlExtensionInterface.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + + # class PySide2.QtQml.QQmlExtensionPlugin: + "QQmlExtensionPlugin.__init__": ('PySide2.QtCore.QObject',), + "QQmlExtensionPlugin.baseUrl": (), + "QQmlExtensionPlugin.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + "QQmlExtensionPlugin.registerTypes": ('str',), + + # class PySide2.QtQml.QQmlFile: + "QQmlFile.__init__": [(), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.clear": [(), ('PySide2.QtCore.QObject',)], + "QQmlFile.connectDownloadProgress": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.connectFinished": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.data": (), + "QQmlFile.dataByteArray": (), + "QQmlFile.error": (), + "QQmlFile.isError": (), + "QQmlFile.isLoading": (), + "QQmlFile.isLocalFile": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.isNull": (), + "QQmlFile.isReady": (), + "QQmlFile.isSynchronous": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.load": [('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.size": (), + "QQmlFile.status": (), + "QQmlFile.url": (), + "QQmlFile.urlToLocalFileOrQrc": [('PySide2.QtCore.QUrl',), ('str',)], + + # class PySide2.QtQml.QQmlFileSelector: + "QQmlFileSelector.__init__": ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), + "QQmlFileSelector.get": ('PySide2.QtQml.QQmlEngine',), + "QQmlFileSelector.selector": (), + "QQmlFileSelector.setExtraSelectors": ('List[str]',), + "QQmlFileSelector.setSelector": ('PySide2.QtCore.QFileSelector',), + + # class PySide2.QtQml.QQmlImageProviderBase: + "QQmlImageProviderBase.flags": (), + "QQmlImageProviderBase.imageType": (), + + # class PySide2.QtQml.QQmlIncubationController: + "QQmlIncubationController.__init__": (), + "QQmlIncubationController.engine": (), + "QQmlIncubationController.incubateFor": ('int',), + "QQmlIncubationController.incubateWhile": ('bool', 'int'), + "QQmlIncubationController.incubatingObjectCount": (), + "QQmlIncubationController.incubatingObjectCountChanged": ('int',), + + # class PySide2.QtQml.QQmlIncubator: + "QQmlIncubator.__init__": ('PySide2.QtQml.QQmlIncubator.IncubationMode',), + "QQmlIncubator.clear": (), + "QQmlIncubator.errors": (), + "QQmlIncubator.forceCompletion": (), + "QQmlIncubator.incubationMode": (), + "QQmlIncubator.isError": (), + "QQmlIncubator.isLoading": (), + "QQmlIncubator.isNull": (), + "QQmlIncubator.isReady": (), + "QQmlIncubator.object": (), + "QQmlIncubator.setInitialState": ('PySide2.QtCore.QObject',), + "QQmlIncubator.status": (), + "QQmlIncubator.statusChanged": ('PySide2.QtQml.QQmlIncubator.Status',), + + # class PySide2.QtQml.QQmlListReference: + "QQmlListReference.__init__": [(), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlListReference',)], + "QQmlListReference.__copy__": (), + "QQmlListReference.append": ('PySide2.QtCore.QObject',), + "QQmlListReference.at": ('int',), + "QQmlListReference.canAppend": (), + "QQmlListReference.canAt": (), + "QQmlListReference.canClear": (), + "QQmlListReference.canCount": (), + "QQmlListReference.clear": (), + "QQmlListReference.count": (), + "QQmlListReference.isManipulable": (), + "QQmlListReference.isReadable": (), + "QQmlListReference.isValid": (), + "QQmlListReference.listElementType": (), + "QQmlListReference.object": (), + + # class PySide2.QtQml.QQmlNetworkAccessManagerFactory: + "QQmlNetworkAccessManagerFactory.__init__": (), + "QQmlNetworkAccessManagerFactory.create": ('PySide2.QtCore.QObject',), + + # class PySide2.QtQml.QQmlParserStatus: + "QQmlParserStatus.__init__": (), + "QQmlParserStatus.classBegin": (), + "QQmlParserStatus.componentComplete": (), + + # class PySide2.QtQml.QQmlProperty: + "QQmlProperty.__init__": [(), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlProperty',)], + "QQmlProperty.__copy__": (), + "QQmlProperty.connectNotifySignal": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlProperty.hasNotifySignal": (), + "QQmlProperty.index": (), + "QQmlProperty.isDesignable": (), + "QQmlProperty.isProperty": (), + "QQmlProperty.isResettable": (), + "QQmlProperty.isSignalProperty": (), + "QQmlProperty.isValid": (), + "QQmlProperty.isWritable": (), + "QQmlProperty.method": (), + "QQmlProperty.name": (), + "QQmlProperty.needsNotifySignal": (), + "QQmlProperty.object": (), + "QQmlProperty.property": (), + "QQmlProperty.propertyType": (), + "QQmlProperty.propertyTypeCategory": (), + "QQmlProperty.propertyTypeName": (), + "QQmlProperty.read": [(), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine')], + "QQmlProperty.reset": (), + "QQmlProperty.type": (), + "QQmlProperty.write": [('Any',), ('PySide2.QtCore.QObject', 'str', 'Any'), ('PySide2.QtCore.QObject', 'str', 'Any', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'Any', 'PySide2.QtQml.QQmlEngine')], + + # class PySide2.QtQml.QQmlPropertyMap: + "QQmlPropertyMap.__init__": ('PySide2.QtCore.QObject',), + "QQmlPropertyMap.clear": ('str',), + "QQmlPropertyMap.contains": ('str',), + "QQmlPropertyMap.count": (), + "QQmlPropertyMap.insert": ('str', 'Any'), + "QQmlPropertyMap.isEmpty": (), + "QQmlPropertyMap.keys": (), + "QQmlPropertyMap.size": (), + "QQmlPropertyMap.updateValue": ('str', 'Any'), + "QQmlPropertyMap.value": ('str',), + + # class PySide2.QtQml.QQmlPropertyValueSource: + "QQmlPropertyValueSource.__init__": (), + "QQmlPropertyValueSource.setTarget": ('PySide2.QtQml.QQmlProperty',), + + # class PySide2.QtQml.QQmlScriptString: + "QQmlScriptString.__init__": [(), ('PySide2.QtQml.QQmlScriptString',)], + "QQmlScriptString.__copy__": (), + "QQmlScriptString.booleanLiteral": ('bool',), + "QQmlScriptString.isEmpty": (), + "QQmlScriptString.isNullLiteral": (), + "QQmlScriptString.isUndefinedLiteral": (), + "QQmlScriptString.numberLiteral": ('bool',), + "QQmlScriptString.stringLiteral": (), + + # class PySide2.QtQml.QQmlTypesExtensionInterface: + "QQmlTypesExtensionInterface.__init__": (), + "QQmlTypesExtensionInterface.registerTypes": ('str',), + + # class PySide2.QtQml.VolatileBool: + }) + +# Module PySide2.QtQuick +if "PySide2.QtQuick" in sys.modules: + dict.update({ + + # class PySide2.QtQuick.QQuickAsyncImageProvider: + "QQuickAsyncImageProvider.__init__": (), + "QQuickAsyncImageProvider.requestImageResponse": ('str', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickFramebufferObject: + "QQuickFramebufferObject.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickFramebufferObject.createRenderer": (), + "QQuickFramebufferObject.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickFramebufferObject.isTextureProvider": (), + "QQuickFramebufferObject.mirrorVertically": (), + "QQuickFramebufferObject.releaseResources": (), + "QQuickFramebufferObject.setMirrorVertically": ('bool',), + "QQuickFramebufferObject.setTextureFollowsItemSize": ('bool',), + "QQuickFramebufferObject.textureFollowsItemSize": (), + "QQuickFramebufferObject.textureProvider": (), + "QQuickFramebufferObject.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickImageProvider: + "QQuickImageProvider.__init__": ('PySide2.QtQml.QQmlImageProviderBase.ImageType', 'PySide2.libpyside.Flags'), + "QQuickImageProvider.flags": (), + "QQuickImageProvider.imageType": (), + "QQuickImageProvider.requestImage": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestPixmap": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestTexture": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickImageResponse: + "QQuickImageResponse.__init__": (), + "QQuickImageResponse.cancel": (), + "QQuickImageResponse.errorString": (), + "QQuickImageResponse.textureFactory": (), + + # class PySide2.QtQuick.QQuickItem: + "QQuickItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.acceptHoverEvents": (), + "QQuickItem.acceptTouchEvents": (), + "QQuickItem.acceptedMouseButtons": (), + "QQuickItem.activeFocusOnTab": (), + "QQuickItem.antialiasing": (), + "QQuickItem.baselineOffset": (), + "QQuickItem.boundingRect": (), + "QQuickItem.childAt": ('float', 'float'), + "QQuickItem.childItems": (), + "QQuickItem.childMouseEventFilter": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickItem.childrenRect": (), + "QQuickItem.classBegin": (), + "QQuickItem.clip": (), + "QQuickItem.clipRect": (), + "QQuickItem.componentComplete": (), + "QQuickItem.containmentMask": (), + "QQuickItem.contains": ('PySide2.QtCore.QPointF',), + "QQuickItem.cursor": (), + "QQuickItem.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickItem.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickItem.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickItem.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickItem.event": ('PySide2.QtCore.QEvent',), + "QQuickItem.filtersChildMouseEvents": (), + "QQuickItem.flags": (), + "QQuickItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.forceActiveFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QQuickItem.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickItem.grabMouse": (), + "QQuickItem.grabToImage": [('PySide2.QtCore.QSize',), ('PySide2.QtQml.QJSValue', 'PySide2.QtCore.QSize')], + "QQuickItem.grabTouchPoints": ('list',), + "QQuickItem.hasActiveFocus": (), + "QQuickItem.hasFocus": (), + "QQuickItem.height": (), + "QQuickItem.heightValid": (), + "QQuickItem.hoverEnterEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverLeaveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverMoveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.implicitHeight": (), + "QQuickItem.implicitWidth": (), + "QQuickItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QQuickItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QQuickItem.isAncestorOf": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.isComponentComplete": (), + "QQuickItem.isEnabled": (), + "QQuickItem.isFocusScope": (), + "QQuickItem.isTextureProvider": (), + "QQuickItem.isUnderMouse": (), + "QQuickItem.isVisible": (), + "QQuickItem.itemTransform": ('PySide2.QtQuick.QQuickItem', 'bool'), + "QQuickItem.keepMouseGrab": (), + "QQuickItem.keepTouchGrab": (), + "QQuickItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.mapFromGlobal": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapFromScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapRectFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectFromScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapRectToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectToScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapToGlobal": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapToScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseUngrabEvent": (), + "QQuickItem.nextItemInFocusChain": ('bool',), + "QQuickItem.opacity": (), + "QQuickItem.parentItem": (), + "QQuickItem.polish": (), + "QQuickItem.position": (), + "QQuickItem.releaseResources": (), + "QQuickItem.resetAntialiasing": (), + "QQuickItem.resetHeight": (), + "QQuickItem.resetWidth": (), + "QQuickItem.rotation": (), + "QQuickItem.scale": (), + "QQuickItem.scopedFocusItem": (), + "QQuickItem.setAcceptHoverEvents": ('bool',), + "QQuickItem.setAcceptTouchEvents": ('bool',), + "QQuickItem.setAcceptedMouseButtons": ('PySide2.libpyside.MouseButtons',), + "QQuickItem.setActiveFocusOnTab": ('bool',), + "QQuickItem.setAntialiasing": ('bool',), + "QQuickItem.setBaselineOffset": ('float',), + "QQuickItem.setClip": ('bool',), + "QQuickItem.setContainmentMask": ('PySide2.QtCore.QObject',), + "QQuickItem.setCursor": ('PySide2.QtGui.QCursor',), + "QQuickItem.setEnabled": ('bool',), + "QQuickItem.setFiltersChildMouseEvents": ('bool',), + "QQuickItem.setFlag": ('PySide2.QtQuick.QQuickItem.Flag', 'bool'), + "QQuickItem.setFlags": ('PySide2.libpyside.Flags',), + "QQuickItem.setFocus": [('bool',), ('bool', 'PySide2.QtCore.Qt.FocusReason')], + "QQuickItem.setHeight": ('float',), + "QQuickItem.setImplicitHeight": ('float',), + "QQuickItem.setImplicitSize": ('float', 'float'), + "QQuickItem.setImplicitWidth": ('float',), + "QQuickItem.setKeepMouseGrab": ('bool',), + "QQuickItem.setKeepTouchGrab": ('bool',), + "QQuickItem.setOpacity": ('float',), + "QQuickItem.setParentItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.setPosition": ('PySide2.QtCore.QPointF',), + "QQuickItem.setRotation": ('float',), + "QQuickItem.setScale": ('float',), + "QQuickItem.setSize": ('PySide2.QtCore.QSizeF',), + "QQuickItem.setSmooth": ('bool',), + "QQuickItem.setState": ('str',), + "QQuickItem.setTransformOrigin": ('PySide2.QtQuick.QQuickItem.TransformOrigin',), + "QQuickItem.setTransformOriginPoint": ('PySide2.QtCore.QPointF',), + "QQuickItem.setVisible": ('bool',), + "QQuickItem.setWidth": ('float',), + "QQuickItem.setX": ('float',), + "QQuickItem.setY": ('float',), + "QQuickItem.setZ": ('float',), + "QQuickItem.size": (), + "QQuickItem.smooth": (), + "QQuickItem.stackAfter": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.stackBefore": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.state": (), + "QQuickItem.textureProvider": (), + "QQuickItem.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QQuickItem.touchUngrabEvent": (), + "QQuickItem.transformOrigin": (), + "QQuickItem.transformOriginPoint": (), + "QQuickItem.ungrabMouse": (), + "QQuickItem.ungrabTouchPoints": (), + "QQuickItem.unsetCursor": (), + "QQuickItem.update": (), + "QQuickItem.updateInputMethod": ('PySide2.libpyside.InputMethodQueries',), + "QQuickItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + "QQuickItem.updatePolish": (), + "QQuickItem.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QQuickItem.width": (), + "QQuickItem.widthValid": (), + "QQuickItem.window": (), + "QQuickItem.windowDeactivateEvent": (), + "QQuickItem.x": (), + "QQuickItem.y": (), + "QQuickItem.z": (), + + # class PySide2.QtQuick.QQuickItemGrabResult: + "QQuickItemGrabResult.event": ('PySide2.QtCore.QEvent',), + "QQuickItemGrabResult.image": (), + "QQuickItemGrabResult.saveToFile": ('str',), + "QQuickItemGrabResult.url": (), + + # class PySide2.QtQuick.QQuickPaintedItem: + "QQuickPaintedItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickPaintedItem.antialiasing": (), + "QQuickPaintedItem.contentsBoundingRect": (), + "QQuickPaintedItem.contentsScale": (), + "QQuickPaintedItem.contentsSize": (), + "QQuickPaintedItem.fillColor": (), + "QQuickPaintedItem.isTextureProvider": (), + "QQuickPaintedItem.mipmap": (), + "QQuickPaintedItem.opaquePainting": (), + "QQuickPaintedItem.paint": ('PySide2.QtGui.QPainter',), + "QQuickPaintedItem.performanceHints": (), + "QQuickPaintedItem.releaseResources": (), + "QQuickPaintedItem.renderTarget": (), + "QQuickPaintedItem.resetContentsSize": (), + "QQuickPaintedItem.setAntialiasing": ('bool',), + "QQuickPaintedItem.setContentsScale": ('float',), + "QQuickPaintedItem.setContentsSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.setFillColor": ('PySide2.QtGui.QColor',), + "QQuickPaintedItem.setMipmap": ('bool',), + "QQuickPaintedItem.setOpaquePainting": ('bool',), + "QQuickPaintedItem.setPerformanceHint": ('PySide2.QtQuick.QQuickPaintedItem.PerformanceHint', 'bool'), + "QQuickPaintedItem.setPerformanceHints": ('PySide2.libpyside.PerformanceHints',), + "QQuickPaintedItem.setRenderTarget": ('PySide2.QtQuick.QQuickPaintedItem.RenderTarget',), + "QQuickPaintedItem.setTextureSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.textureProvider": (), + "QQuickPaintedItem.textureSize": (), + "QQuickPaintedItem.update": [(), ('PySide2.QtCore.QRect',)], + "QQuickPaintedItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickRenderControl: + "QQuickRenderControl.__init__": ('PySide2.QtCore.QObject',), + "QQuickRenderControl.grab": (), + "QQuickRenderControl.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QQuickRenderControl.invalidate": (), + "QQuickRenderControl.polishItems": (), + "QQuickRenderControl.prepareThread": ('PySide2.QtCore.QThread',), + "QQuickRenderControl.render": (), + "QQuickRenderControl.renderWindow": ('PySide2.QtCore.QPoint',), + "QQuickRenderControl.renderWindowFor": ('PySide2.QtQuick.QQuickWindow', 'PySide2.QtCore.QPoint'), + "QQuickRenderControl.sync": (), + + # class PySide2.QtQuick.QQuickTextDocument: + "QQuickTextDocument.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickTextDocument.textDocument": (), + + # class PySide2.QtQuick.QQuickTextureFactory: + "QQuickTextureFactory.__init__": (), + "QQuickTextureFactory.createTexture": ('PySide2.QtQuick.QQuickWindow',), + "QQuickTextureFactory.image": (), + "QQuickTextureFactory.textureByteCount": (), + "QQuickTextureFactory.textureFactoryForImage": ('PySide2.QtGui.QImage',), + "QQuickTextureFactory.textureSize": (), + + # class PySide2.QtQuick.QQuickTransform: + "QQuickTransform.__init__": ('PySide2.QtCore.QObject',), + "QQuickTransform.appendToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QQuickTransform.prependToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.update": (), + + # class PySide2.QtQuick.QQuickView: + "QQuickView.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtGui.QWindow'), ('PySide2.QtCore.QUrl', 'PySide2.QtQuick.QQuickRenderControl'), ('PySide2.QtGui.QWindow',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtGui.QWindow')], + "QQuickView.engine": (), + "QQuickView.errors": (), + "QQuickView.initialSize": (), + "QQuickView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickView.resizeMode": (), + "QQuickView.rootContext": (), + "QQuickView.rootObject": (), + "QQuickView.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickView.setResizeMode": ('PySide2.QtQuick.QQuickView.ResizeMode',), + "QQuickView.setSource": ('PySide2.QtCore.QUrl',), + "QQuickView.sizeHint": (), + "QQuickView.source": (), + "QQuickView.status": (), + "QQuickView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtQuick.QQuickWindow: + "QQuickWindow.__init__": [('PySide2.QtGui.QWindow',), ('PySide2.QtQuick.QQuickRenderControl',)], + "QQuickWindow.accessibleRoot": (), + "QQuickWindow.activeFocusItem": (), + "QQuickWindow.clearBeforeRendering": (), + "QQuickWindow.color": (), + "QQuickWindow.contentItem": (), + "QQuickWindow.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'PySide2.libpyside.CreateTextureOptions'), + "QQuickWindow.createTextureFromImage": [('PySide2.QtGui.QImage',), ('PySide2.QtGui.QImage', 'PySide2.libpyside.CreateTextureOptions')], + "QQuickWindow.effectiveDevicePixelRatio": (), + "QQuickWindow.event": ('PySide2.QtCore.QEvent',), + "QQuickWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QQuickWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.focusObject": (), + "QQuickWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.grabWindow": (), + "QQuickWindow.hasDefaultAlphaBuffer": (), + "QQuickWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWindow.incubationController": (), + "QQuickWindow.isPersistentOpenGLContext": (), + "QQuickWindow.isPersistentSceneGraph": (), + "QQuickWindow.isSceneGraphInitialized": (), + "QQuickWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseGrabberItem": (), + "QQuickWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.openglContext": (), + "QQuickWindow.releaseResources": (), + "QQuickWindow.renderTarget": (), + "QQuickWindow.renderTargetId": (), + "QQuickWindow.renderTargetSize": (), + "QQuickWindow.resetOpenGLState": (), + "QQuickWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWindow.sceneGraphBackend": (), + "QQuickWindow.scheduleRenderJob": ('PySide2.QtCore.QRunnable', 'PySide2.QtQuick.QQuickWindow.RenderStage'), + "QQuickWindow.sendEvent": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickWindow.setClearBeforeRendering": ('bool',), + "QQuickWindow.setColor": ('PySide2.QtGui.QColor',), + "QQuickWindow.setDefaultAlphaBuffer": ('bool',), + "QQuickWindow.setPersistentOpenGLContext": ('bool',), + "QQuickWindow.setPersistentSceneGraph": ('bool',), + "QQuickWindow.setRenderTarget": [('PySide2.QtGui.QOpenGLFramebufferObject',), ('int', 'PySide2.QtCore.QSize')], + "QQuickWindow.setSceneGraphBackend": ('str',), + "QQuickWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWindow.update": (), + "QQuickWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtQuick.QSGAbstractRenderer: + "QSGAbstractRenderer.__init__": ('PySide2.QtCore.QObject',), + "QSGAbstractRenderer.clearColor": (), + "QSGAbstractRenderer.clearMode": (), + "QSGAbstractRenderer.deviceRect": (), + "QSGAbstractRenderer.nodeChanged": ('PySide2.QtQuick.QSGNode', 'PySide2.libpyside.DirtyState'), + "QSGAbstractRenderer.projectionMatrix": (), + "QSGAbstractRenderer.renderScene": ('int',), + "QSGAbstractRenderer.setClearColor": ('PySide2.QtGui.QColor',), + "QSGAbstractRenderer.setClearMode": ('PySide2.libpyside.ClearMode',), + "QSGAbstractRenderer.setDeviceRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.setProjectionMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGAbstractRenderer.setProjectionMatrixToRect": ('PySide2.QtCore.QRectF',), + "QSGAbstractRenderer.setViewportRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.viewportRect": (), + + # class PySide2.QtQuick.QSGBasicGeometryNode: + "QSGBasicGeometryNode.__init__": ('PySide2.QtQuick.QSGNode.NodeType',), + "QSGBasicGeometryNode.clipList": (), + "QSGBasicGeometryNode.geometry": (), + "QSGBasicGeometryNode.matrix": (), + "QSGBasicGeometryNode.setGeometry": ('PySide2.QtQuick.QSGGeometry',), + "QSGBasicGeometryNode.setRendererClipList": ('PySide2.QtQuick.QSGClipNode',), + "QSGBasicGeometryNode.setRendererMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSGClipNode: + "QSGClipNode.__init__": (), + "QSGClipNode.clipRect": (), + "QSGClipNode.isRectangular": (), + "QSGClipNode.setClipRect": ('PySide2.QtCore.QRectF',), + "QSGClipNode.setIsRectangular": ('bool',), + + # class PySide2.QtQuick.QSGDynamicTexture: + "QSGDynamicTexture.__init__": (), + "QSGDynamicTexture.updateTexture": (), + + # class PySide2.QtQuick.QSGEngine: + "QSGEngine.__init__": ('PySide2.QtCore.QObject',), + "QSGEngine.createRenderer": (), + "QSGEngine.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'PySide2.libpyside.CreateTextureOptions'), + "QSGEngine.createTextureFromImage": ('PySide2.QtGui.QImage', 'PySide2.libpyside.CreateTextureOptions'), + "QSGEngine.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QSGEngine.invalidate": (), + + # class PySide2.QtQuick.QSGGeometry: + "QSGGeometry.__init__": ('PySide2.QtQuick.QSGGeometry.AttributeSet', 'int', 'int', 'int'), + "QSGGeometry.allocate": ('int', 'int'), + "QSGGeometry.attributeCount": (), + "QSGGeometry.attributes": (), + "QSGGeometry.defaultAttributes_ColoredPoint2D": (), + "QSGGeometry.defaultAttributes_Point2D": (), + "QSGGeometry.defaultAttributes_TexturedPoint2D": (), + "QSGGeometry.drawingMode": (), + "QSGGeometry.indexCount": (), + "QSGGeometry.indexData": (), + "QSGGeometry.indexDataAsUInt": (), + "QSGGeometry.indexDataAsUShort": (), + "QSGGeometry.indexDataPattern": (), + "QSGGeometry.indexType": (), + "QSGGeometry.lineWidth": (), + "QSGGeometry.markIndexDataDirty": (), + "QSGGeometry.markVertexDataDirty": (), + "QSGGeometry.setDrawingMode": ('int',), + "QSGGeometry.setIndexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.setLineWidth": ('float',), + "QSGGeometry.setVertexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.sizeOfIndex": (), + "QSGGeometry.sizeOfVertex": (), + "QSGGeometry.updateColoredRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateTexturedRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QSGGeometry.vertexCount": (), + "QSGGeometry.vertexData": (), + "QSGGeometry.vertexDataAsColoredPoint2D": (), + "QSGGeometry.vertexDataAsPoint2D": (), + "QSGGeometry.vertexDataAsTexturedPoint2D": (), + "QSGGeometry.vertexDataPattern": (), + + # class PySide2.QtQuick.QSGGeometryNode: + "QSGGeometryNode.__init__": (), + "QSGGeometryNode.inheritedOpacity": (), + "QSGGeometryNode.renderOrder": (), + "QSGGeometryNode.setInheritedOpacity": ('float',), + "QSGGeometryNode.setRenderOrder": ('int',), + + # class PySide2.QtQuick.QSGMaterialType: + "QSGMaterialType.__init__": (), + + # class PySide2.QtQuick.QSGNode: + "QSGNode.__init__": [(), ('PySide2.QtQuick.QSGNode.NodeType',)], + "QSGNode.appendChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.childAtIndex": ('int',), + "QSGNode.childCount": (), + "QSGNode.clearDirty": (), + "QSGNode.dirtyState": (), + "QSGNode.firstChild": (), + "QSGNode.flags": (), + "QSGNode.insertChildNodeAfter": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.insertChildNodeBefore": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.isSubtreeBlocked": (), + "QSGNode.lastChild": (), + "QSGNode.markDirty": ('PySide2.libpyside.DirtyState',), + "QSGNode.nextSibling": (), + "QSGNode.parent": (), + "QSGNode.prependChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.preprocess": (), + "QSGNode.previousSibling": (), + "QSGNode.removeAllChildNodes": (), + "QSGNode.removeChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.reparentChildNodesTo": ('PySide2.QtQuick.QSGNode',), + "QSGNode.setFlag": ('PySide2.QtQuick.QSGNode.Flag', 'bool'), + "QSGNode.setFlags": ('PySide2.libpyside.Flags', 'bool'), + "QSGNode.type": (), + + # class PySide2.QtQuick.QSGOpacityNode: + "QSGOpacityNode.__init__": (), + "QSGOpacityNode.combinedOpacity": (), + "QSGOpacityNode.isSubtreeBlocked": (), + "QSGOpacityNode.opacity": (), + "QSGOpacityNode.setCombinedOpacity": ('float',), + "QSGOpacityNode.setOpacity": ('float',), + + # class PySide2.QtQuick.QSGSimpleRectNode: + "QSGSimpleRectNode.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor')], + "QSGSimpleRectNode.color": (), + "QSGSimpleRectNode.rect": (), + "QSGSimpleRectNode.setColor": ('PySide2.QtGui.QColor',), + "QSGSimpleRectNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + + # class PySide2.QtQuick.QSGSimpleTextureNode: + "QSGSimpleTextureNode.__init__": (), + "QSGSimpleTextureNode.filtering": (), + "QSGSimpleTextureNode.ownsTexture": (), + "QSGSimpleTextureNode.rect": (), + "QSGSimpleTextureNode.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGSimpleTextureNode.setOwnsTexture": ('bool',), + "QSGSimpleTextureNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setSourceRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setTexture": ('PySide2.QtQuick.QSGTexture',), + "QSGSimpleTextureNode.setTextureCoordinatesTransform": ('PySide2.libpyside.TextureCoordinatesTransformMode',), + "QSGSimpleTextureNode.sourceRect": (), + "QSGSimpleTextureNode.texture": (), + "QSGSimpleTextureNode.textureCoordinatesTransform": (), + + # class PySide2.QtQuick.QSGTexture: + "QSGTexture.__init__": (), + "QSGTexture.anisotropyLevel": (), + "QSGTexture.bind": (), + "QSGTexture.convertToNormalizedSourceRect": ('PySide2.QtCore.QRectF',), + "QSGTexture.filtering": (), + "QSGTexture.hasAlphaChannel": (), + "QSGTexture.hasMipmaps": (), + "QSGTexture.horizontalWrapMode": (), + "QSGTexture.isAtlasTexture": (), + "QSGTexture.mipmapFiltering": (), + "QSGTexture.normalizedTextureSubRect": (), + "QSGTexture.removedFromAtlas": (), + "QSGTexture.setAnisotropyLevel": ('PySide2.QtQuick.QSGTexture.AnisotropyLevel',), + "QSGTexture.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setHorizontalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.setMipmapFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setVerticalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.textureId": (), + "QSGTexture.textureSize": (), + "QSGTexture.updateBindOptions": ('bool',), + "QSGTexture.verticalWrapMode": (), + + # class PySide2.QtQuick.QSGTextureProvider: + "QSGTextureProvider.__init__": (), + "QSGTextureProvider.texture": (), + + # class PySide2.QtQuick.QSGTransformNode: + "QSGTransformNode.__init__": (), + "QSGTransformNode.combinedMatrix": (), + "QSGTransformNode.matrix": (), + "QSGTransformNode.setCombinedMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGTransformNode.setMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSharedPointer: + "QSharedPointer.__copy__": (), + "QSharedPointer.data": (), + }) + +# Module PySide2.QtQuickWidgets +if "PySide2.QtQuickWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtQuickWidgets.QQuickWidget: + "QQuickWidget.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QQuickWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickWidget.engine": (), + "QQuickWidget.errors": (), + "QQuickWidget.event": ('PySide2.QtCore.QEvent',), + "QQuickWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.focusNextPrevChild": ('bool',), + "QQuickWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.format": (), + "QQuickWidget.grabFramebuffer": (), + "QQuickWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWidget.initialSize": (), + "QQuickWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QQuickWidget.quickWindow": (), + "QQuickWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWidget.resizeMode": (), + "QQuickWidget.rootContext": (), + "QQuickWidget.rootObject": (), + "QQuickWidget.setClearColor": ('PySide2.QtGui.QColor',), + "QQuickWidget.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QQuickWidget.setResizeMode": ('PySide2.QtQuickWidgets.QQuickWidget.ResizeMode',), + "QQuickWidget.setSource": ('PySide2.QtCore.QUrl',), + "QQuickWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWidget.sizeHint": (), + "QQuickWidget.source": (), + "QQuickWidget.status": (), + "QQuickWidget.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QQuickWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + }) + +# Module PySide2.QtScxml +if "PySide2.QtScxml" in sys.modules: + dict.update({ + + # class PySide2.QtScxml.QScxmlCompiler: + "QScxmlCompiler.__init__": ('PySide2.QtCore.QXmlStreamReader',), + "QScxmlCompiler.compile": (), + "QScxmlCompiler.errors": (), + "QScxmlCompiler.fileName": (), + "QScxmlCompiler.loader": (), + "QScxmlCompiler.setFileName": ('str',), + "QScxmlCompiler.setLoader": ('PySide2.QtScxml.QScxmlCompiler.Loader',), + + # class PySide2.QtScxml.QScxmlDynamicScxmlServiceFactory: + "QScxmlDynamicScxmlServiceFactory.__init__": ('PySide2.QtScxml.QScxmlExecutableContent.InvokeInfo', 'list', 'list', 'PySide2.QtCore.QObject'), + "QScxmlDynamicScxmlServiceFactory.invoke": ('PySide2.QtScxml.QScxmlStateMachine',), + + # class PySide2.QtScxml.QScxmlError: + "QScxmlError.__init__": [(), ('PySide2.QtScxml.QScxmlError',), ('str', 'int', 'int', 'str')], + "QScxmlError.__copy__": (), + "QScxmlError.column": (), + "QScxmlError.description": (), + "QScxmlError.fileName": (), + "QScxmlError.isValid": (), + "QScxmlError.line": (), + "QScxmlError.toString": (), + + # class PySide2.QtScxml.QScxmlEvent: + "QScxmlEvent.__init__": [(), ('PySide2.QtScxml.QScxmlEvent',)], + "QScxmlEvent.clear": (), + "QScxmlEvent.data": (), + "QScxmlEvent.delay": (), + "QScxmlEvent.errorMessage": (), + "QScxmlEvent.eventType": (), + "QScxmlEvent.invokeId": (), + "QScxmlEvent.isErrorEvent": (), + "QScxmlEvent.name": (), + "QScxmlEvent.origin": (), + "QScxmlEvent.originType": (), + "QScxmlEvent.scxmlType": (), + "QScxmlEvent.sendId": (), + "QScxmlEvent.setData": ('Any',), + "QScxmlEvent.setDelay": ('int',), + "QScxmlEvent.setErrorMessage": ('str',), + "QScxmlEvent.setEventType": ('PySide2.QtScxml.QScxmlEvent.EventType',), + "QScxmlEvent.setInvokeId": ('str',), + "QScxmlEvent.setName": ('str',), + "QScxmlEvent.setOrigin": ('str',), + "QScxmlEvent.setOriginType": ('str',), + "QScxmlEvent.setSendId": ('str',), + + # class PySide2.QtScxml.QScxmlExecutableContent: + + # class PySide2.QtScxml.QScxmlInvokableService: + "QScxmlInvokableService.__init__": ('PySide2.QtScxml.QScxmlStateMachine', 'PySide2.QtScxml.QScxmlInvokableServiceFactory'), + "QScxmlInvokableService.id": (), + "QScxmlInvokableService.name": (), + "QScxmlInvokableService.parentStateMachine": (), + "QScxmlInvokableService.postEvent": ('PySide2.QtScxml.QScxmlEvent',), + "QScxmlInvokableService.start": (), + + # class PySide2.QtScxml.QScxmlInvokableServiceFactory: + "QScxmlInvokableServiceFactory.__init__": ('PySide2.QtScxml.QScxmlExecutableContent.InvokeInfo', 'list', 'list', 'PySide2.QtCore.QObject'), + "QScxmlInvokableServiceFactory.invoke": ('PySide2.QtScxml.QScxmlStateMachine',), + "QScxmlInvokableServiceFactory.invokeInfo": (), + "QScxmlInvokableServiceFactory.names": (), + "QScxmlInvokableServiceFactory.parameters": (), + + # class PySide2.QtScxml.QScxmlStateMachine: + "QScxmlStateMachine.__init__": ('PySide2.QtCore.QMetaObject', 'PySide2.QtCore.QObject'), + "QScxmlStateMachine.activeStateNames": ('bool',), + "QScxmlStateMachine.cancelDelayedEvent": ('str',), + "QScxmlStateMachine.connectToEvent": ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), + "QScxmlStateMachine.connectToState": ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), + "QScxmlStateMachine.fromData": ('PySide2.QtCore.QIODevice', 'str'), + "QScxmlStateMachine.fromFile": ('str',), + "QScxmlStateMachine.init": (), + "QScxmlStateMachine.initialValues": (), + "QScxmlStateMachine.invokedServices": (), + "QScxmlStateMachine.isActive": [('int',), ('str',)], + "QScxmlStateMachine.isDispatchableTarget": ('str',), + "QScxmlStateMachine.isInitialized": (), + "QScxmlStateMachine.isInvoked": (), + "QScxmlStateMachine.isRunning": (), + "QScxmlStateMachine.loader": (), + "QScxmlStateMachine.name": (), + "QScxmlStateMachine.parseErrors": (), + "QScxmlStateMachine.sessionId": (), + "QScxmlStateMachine.setInitialValues": ('dict',), + "QScxmlStateMachine.setLoader": ('PySide2.QtScxml.QScxmlCompiler.Loader',), + "QScxmlStateMachine.setRunning": ('bool',), + "QScxmlStateMachine.setTableData": ('PySide2.QtScxml.QScxmlTableData',), + "QScxmlStateMachine.start": (), + "QScxmlStateMachine.stateNames": ('bool',), + "QScxmlStateMachine.stop": (), + "QScxmlStateMachine.submitEvent": [('PySide2.QtScxml.QScxmlEvent',), ('str',), ('str', 'Any')], + "QScxmlStateMachine.tableData": (), + + # class PySide2.QtScxml.QScxmlStaticScxmlServiceFactory: + "QScxmlStaticScxmlServiceFactory.__init__": ('PySide2.QtCore.QMetaObject', 'PySide2.QtScxml.QScxmlExecutableContent.InvokeInfo', 'list', 'list', 'PySide2.QtCore.QObject'), + "QScxmlStaticScxmlServiceFactory.invoke": ('PySide2.QtScxml.QScxmlStateMachine',), + + # class PySide2.QtScxml.QScxmlTableData: + "QScxmlTableData.__init__": (), + "QScxmlTableData.assignmentInfo": ('int',), + "QScxmlTableData.dataNames": ('int',), + "QScxmlTableData.evaluatorInfo": ('int',), + "QScxmlTableData.foreachInfo": ('int',), + "QScxmlTableData.initialSetup": (), + "QScxmlTableData.instructions": (), + "QScxmlTableData.name": (), + "QScxmlTableData.serviceFactory": ('int',), + "QScxmlTableData.stateMachineTable": (), + "QScxmlTableData.string": ('int',), + }) + +# Module PySide2.QtSensors +if "PySide2.QtSensors" in sys.modules: + dict.update({ + + # class PySide2.QtSensors.QAccelerometer: + "QAccelerometer.__init__": ('PySide2.QtCore.QObject',), + "QAccelerometer.accelerationMode": (), + "QAccelerometer.reading": (), + "QAccelerometer.setAccelerationMode": ('PySide2.QtSensors.QAccelerometer.AccelerationMode',), + + # class PySide2.QtSensors.QAccelerometerFilter: + "QAccelerometerFilter.__init__": (), + "QAccelerometerFilter.filter": [('PySide2.QtSensors.QAccelerometerReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QAccelerometerReading: + "QAccelerometerReading.__init__": ('PySide2.QtCore.QObject',), + "QAccelerometerReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QAccelerometerReading.setX": ('float',), + "QAccelerometerReading.setY": ('float',), + "QAccelerometerReading.setZ": ('float',), + "QAccelerometerReading.x": (), + "QAccelerometerReading.y": (), + "QAccelerometerReading.z": (), + + # class PySide2.QtSensors.QAltimeter: + "QAltimeter.__init__": ('PySide2.QtCore.QObject',), + "QAltimeter.reading": (), + + # class PySide2.QtSensors.QAltimeterFilter: + "QAltimeterFilter.__init__": (), + "QAltimeterFilter.filter": [('PySide2.QtSensors.QAltimeterReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QAltimeterReading: + "QAltimeterReading.__init__": ('PySide2.QtCore.QObject',), + "QAltimeterReading.altitude": (), + "QAltimeterReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QAltimeterReading.setAltitude": ('float',), + + # class PySide2.QtSensors.QAmbientLightFilter: + "QAmbientLightFilter.__init__": (), + "QAmbientLightFilter.filter": [('PySide2.QtSensors.QAmbientLightReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QAmbientLightReading: + "QAmbientLightReading.__init__": ('PySide2.QtCore.QObject',), + "QAmbientLightReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QAmbientLightReading.lightLevel": (), + "QAmbientLightReading.setLightLevel": ('PySide2.QtSensors.QAmbientLightReading.LightLevel',), + + # class PySide2.QtSensors.QAmbientLightSensor: + "QAmbientLightSensor.__init__": ('PySide2.QtCore.QObject',), + "QAmbientLightSensor.reading": (), + + # class PySide2.QtSensors.QAmbientTemperatureFilter: + "QAmbientTemperatureFilter.__init__": (), + "QAmbientTemperatureFilter.filter": [('PySide2.QtSensors.QAmbientTemperatureReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QAmbientTemperatureReading: + "QAmbientTemperatureReading.__init__": ('PySide2.QtCore.QObject',), + "QAmbientTemperatureReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QAmbientTemperatureReading.setTemperature": ('float',), + "QAmbientTemperatureReading.temperature": (), + + # class PySide2.QtSensors.QAmbientTemperatureSensor: + "QAmbientTemperatureSensor.__init__": ('PySide2.QtCore.QObject',), + "QAmbientTemperatureSensor.reading": (), + + # class PySide2.QtSensors.QCompass: + "QCompass.__init__": ('PySide2.QtCore.QObject',), + "QCompass.reading": (), + + # class PySide2.QtSensors.QCompassFilter: + "QCompassFilter.__init__": (), + "QCompassFilter.filter": [('PySide2.QtSensors.QCompassReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QCompassReading: + "QCompassReading.__init__": ('PySide2.QtCore.QObject',), + "QCompassReading.azimuth": (), + "QCompassReading.calibrationLevel": (), + "QCompassReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QCompassReading.setAzimuth": ('float',), + "QCompassReading.setCalibrationLevel": ('float',), + + # class PySide2.QtSensors.QDistanceFilter: + "QDistanceFilter.__init__": (), + "QDistanceFilter.filter": [('PySide2.QtSensors.QDistanceReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QDistanceReading: + "QDistanceReading.__init__": ('PySide2.QtCore.QObject',), + "QDistanceReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QDistanceReading.distance": (), + "QDistanceReading.setDistance": ('float',), + + # class PySide2.QtSensors.QDistanceSensor: + "QDistanceSensor.__init__": ('PySide2.QtCore.QObject',), + "QDistanceSensor.reading": (), + + # class PySide2.QtSensors.QGyroscope: + "QGyroscope.__init__": ('PySide2.QtCore.QObject',), + "QGyroscope.reading": (), + + # class PySide2.QtSensors.QGyroscopeFilter: + "QGyroscopeFilter.__init__": (), + "QGyroscopeFilter.filter": [('PySide2.QtSensors.QGyroscopeReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QGyroscopeReading: + "QGyroscopeReading.__init__": ('PySide2.QtCore.QObject',), + "QGyroscopeReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QGyroscopeReading.setX": ('float',), + "QGyroscopeReading.setY": ('float',), + "QGyroscopeReading.setZ": ('float',), + "QGyroscopeReading.x": (), + "QGyroscopeReading.y": (), + "QGyroscopeReading.z": (), + + # class PySide2.QtSensors.QHolsterFilter: + "QHolsterFilter.__init__": (), + "QHolsterFilter.filter": [('PySide2.QtSensors.QHolsterReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QHolsterReading: + "QHolsterReading.__init__": ('PySide2.QtCore.QObject',), + "QHolsterReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QHolsterReading.holstered": (), + "QHolsterReading.setHolstered": ('bool',), + + # class PySide2.QtSensors.QHolsterSensor: + "QHolsterSensor.__init__": ('PySide2.QtCore.QObject',), + "QHolsterSensor.reading": (), + + # class PySide2.QtSensors.QHumidityFilter: + "QHumidityFilter.__init__": (), + "QHumidityFilter.filter": [('PySide2.QtSensors.QHumidityReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QHumidityReading: + "QHumidityReading.__init__": ('PySide2.QtCore.QObject',), + "QHumidityReading.absoluteHumidity": (), + "QHumidityReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QHumidityReading.relativeHumidity": (), + "QHumidityReading.setAbsoluteHumidity": ('float',), + "QHumidityReading.setRelativeHumidity": ('float',), + + # class PySide2.QtSensors.QHumiditySensor: + "QHumiditySensor.__init__": ('PySide2.QtCore.QObject',), + "QHumiditySensor.reading": (), + + # class PySide2.QtSensors.QIRProximityFilter: + "QIRProximityFilter.__init__": (), + "QIRProximityFilter.filter": [('PySide2.QtSensors.QIRProximityReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QIRProximityReading: + "QIRProximityReading.__init__": ('PySide2.QtCore.QObject',), + "QIRProximityReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QIRProximityReading.reflectance": (), + "QIRProximityReading.setReflectance": ('float',), + + # class PySide2.QtSensors.QIRProximitySensor: + "QIRProximitySensor.__init__": ('PySide2.QtCore.QObject',), + "QIRProximitySensor.reading": (), + + # class PySide2.QtSensors.QLidFilter: + "QLidFilter.__init__": (), + "QLidFilter.filter": [('PySide2.QtSensors.QLidReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QLidReading: + "QLidReading.__init__": ('PySide2.QtCore.QObject',), + "QLidReading.backLidClosed": (), + "QLidReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QLidReading.frontLidClosed": (), + "QLidReading.setBackLidClosed": ('bool',), + "QLidReading.setFrontLidClosed": ('bool',), + + # class PySide2.QtSensors.QLidSensor: + "QLidSensor.__init__": ('PySide2.QtCore.QObject',), + "QLidSensor.reading": (), + + # class PySide2.QtSensors.QLightFilter: + "QLightFilter.__init__": (), + "QLightFilter.filter": [('PySide2.QtSensors.QLightReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QLightReading: + "QLightReading.__init__": ('PySide2.QtCore.QObject',), + "QLightReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QLightReading.lux": (), + "QLightReading.setLux": ('float',), + + # class PySide2.QtSensors.QLightSensor: + "QLightSensor.__init__": ('PySide2.QtCore.QObject',), + "QLightSensor.fieldOfView": (), + "QLightSensor.reading": (), + "QLightSensor.setFieldOfView": ('float',), + + # class PySide2.QtSensors.QMagnetometer: + "QMagnetometer.__init__": ('PySide2.QtCore.QObject',), + "QMagnetometer.reading": (), + "QMagnetometer.returnGeoValues": (), + "QMagnetometer.setReturnGeoValues": ('bool',), + + # class PySide2.QtSensors.QMagnetometerFilter: + "QMagnetometerFilter.__init__": (), + "QMagnetometerFilter.filter": [('PySide2.QtSensors.QMagnetometerReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QMagnetometerReading: + "QMagnetometerReading.__init__": ('PySide2.QtCore.QObject',), + "QMagnetometerReading.calibrationLevel": (), + "QMagnetometerReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QMagnetometerReading.setCalibrationLevel": ('float',), + "QMagnetometerReading.setX": ('float',), + "QMagnetometerReading.setY": ('float',), + "QMagnetometerReading.setZ": ('float',), + "QMagnetometerReading.x": (), + "QMagnetometerReading.y": (), + "QMagnetometerReading.z": (), + + # class PySide2.QtSensors.QOrientationFilter: + "QOrientationFilter.__init__": (), + "QOrientationFilter.filter": [('PySide2.QtSensors.QOrientationReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QOrientationReading: + "QOrientationReading.__init__": ('PySide2.QtCore.QObject',), + "QOrientationReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QOrientationReading.orientation": (), + "QOrientationReading.setOrientation": ('PySide2.QtSensors.QOrientationReading.Orientation',), + + # class PySide2.QtSensors.QOrientationSensor: + "QOrientationSensor.__init__": ('PySide2.QtCore.QObject',), + "QOrientationSensor.reading": (), + + # class PySide2.QtSensors.QPressureFilter: + "QPressureFilter.__init__": (), + "QPressureFilter.filter": [('PySide2.QtSensors.QPressureReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QPressureReading: + "QPressureReading.__init__": ('PySide2.QtCore.QObject',), + "QPressureReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QPressureReading.pressure": (), + "QPressureReading.setPressure": ('float',), + "QPressureReading.setTemperature": ('float',), + "QPressureReading.temperature": (), + + # class PySide2.QtSensors.QPressureSensor: + "QPressureSensor.__init__": ('PySide2.QtCore.QObject',), + "QPressureSensor.reading": (), + + # class PySide2.QtSensors.QProximityFilter: + "QProximityFilter.__init__": (), + "QProximityFilter.filter": [('PySide2.QtSensors.QProximityReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QProximityReading: + "QProximityReading.__init__": ('PySide2.QtCore.QObject',), + "QProximityReading.close": (), + "QProximityReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QProximityReading.setClose": ('bool',), + + # class PySide2.QtSensors.QProximitySensor: + "QProximitySensor.__init__": ('PySide2.QtCore.QObject',), + "QProximitySensor.reading": (), + + # class PySide2.QtSensors.QRotationFilter: + "QRotationFilter.__init__": (), + "QRotationFilter.filter": [('PySide2.QtSensors.QRotationReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QRotationReading: + "QRotationReading.__init__": ('PySide2.QtCore.QObject',), + "QRotationReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QRotationReading.setFromEuler": ('float', 'float', 'float'), + "QRotationReading.x": (), + "QRotationReading.y": (), + "QRotationReading.z": (), + + # class PySide2.QtSensors.QRotationSensor: + "QRotationSensor.__init__": ('PySide2.QtCore.QObject',), + "QRotationSensor.hasZ": (), + "QRotationSensor.reading": (), + "QRotationSensor.setHasZ": ('bool',), + + # class PySide2.QtSensors.QSensor: + "QSensor.__init__": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), + "QSensor.addFilter": ('PySide2.QtSensors.QSensorFilter',), + "QSensor.availableDataRates": (), + "QSensor.axesOrientationMode": (), + "QSensor.backend": (), + "QSensor.bufferSize": (), + "QSensor.connectToBackend": (), + "QSensor.currentOrientation": (), + "QSensor.dataRate": (), + "QSensor.defaultSensorForType": ('PySide2.QtCore.QByteArray',), + "QSensor.description": (), + "QSensor.efficientBufferSize": (), + "QSensor.error": (), + "QSensor.filters": (), + "QSensor.identifier": (), + "QSensor.isActive": (), + "QSensor.isAlwaysOn": (), + "QSensor.isBusy": (), + "QSensor.isConnectedToBackend": (), + "QSensor.isFeatureSupported": ('PySide2.QtSensors.QSensor.Feature',), + "QSensor.maxBufferSize": (), + "QSensor.outputRange": (), + "QSensor.outputRanges": (), + "QSensor.reading": (), + "QSensor.removeFilter": ('PySide2.QtSensors.QSensorFilter',), + "QSensor.sensorTypes": (), + "QSensor.sensorsForType": ('PySide2.QtCore.QByteArray',), + "QSensor.setActive": ('bool',), + "QSensor.setAlwaysOn": ('bool',), + "QSensor.setAxesOrientationMode": ('PySide2.QtSensors.QSensor.AxesOrientationMode',), + "QSensor.setBufferSize": ('int',), + "QSensor.setCurrentOrientation": ('int',), + "QSensor.setDataRate": ('int',), + "QSensor.setEfficientBufferSize": ('int',), + "QSensor.setIdentifier": ('PySide2.QtCore.QByteArray',), + "QSensor.setMaxBufferSize": ('int',), + "QSensor.setOutputRange": ('int',), + "QSensor.setSkipDuplicates": ('bool',), + "QSensor.setUserOrientation": ('int',), + "QSensor.skipDuplicates": (), + "QSensor.start": (), + "QSensor.stop": (), + "QSensor.type": (), + "QSensor.userOrientation": (), + + # class PySide2.QtSensors.QSensorBackend: + "QSensorBackend.__init__": ('PySide2.QtSensors.QSensor', 'PySide2.QtCore.QObject'), + "QSensorBackend.addDataRate": ('float', 'float'), + "QSensorBackend.addOutputRange": ('float', 'float', 'float'), + "QSensorBackend.isFeatureSupported": ('PySide2.QtSensors.QSensor.Feature',), + "QSensorBackend.newReadingAvailable": (), + "QSensorBackend.reading": (), + "QSensorBackend.sensor": (), + "QSensorBackend.sensorBusy": (), + "QSensorBackend.sensorError": ('int',), + "QSensorBackend.sensorStopped": (), + "QSensorBackend.setDataRates": ('PySide2.QtSensors.QSensor',), + "QSensorBackend.setDescription": ('str',), + "QSensorBackend.start": (), + "QSensorBackend.stop": (), + + # class PySide2.QtSensors.QSensorBackendFactory: + "QSensorBackendFactory.__init__": (), + "QSensorBackendFactory.createBackend": ('PySide2.QtSensors.QSensor',), + + # class PySide2.QtSensors.QSensorChangesInterface: + "QSensorChangesInterface.__init__": (), + "QSensorChangesInterface.sensorsChanged": (), + + # class PySide2.QtSensors.QSensorFilter: + "QSensorFilter.__init__": (), + "QSensorFilter.filter": ('PySide2.QtSensors.QSensorReading',), + "QSensorFilter.setSensor": ('PySide2.QtSensors.QSensor',), + + # class PySide2.QtSensors.QSensorGestureManager: + "QSensorGestureManager.__init__": ('PySide2.QtCore.QObject',), + "QSensorGestureManager.gestureIds": (), + "QSensorGestureManager.recognizerSignals": ('str',), + "QSensorGestureManager.registerSensorGestureRecognizer": ('PySide2.QtSensors.QSensorGestureRecognizer',), + "QSensorGestureManager.sensorGestureRecognizer": ('str',), + + # class PySide2.QtSensors.QSensorGesturePluginInterface: + "QSensorGesturePluginInterface.__init__": (), + "QSensorGesturePluginInterface.createRecognizers": (), + "QSensorGesturePluginInterface.name": (), + "QSensorGesturePluginInterface.supportedIds": (), + + # class PySide2.QtSensors.QSensorGestureRecognizer: + "QSensorGestureRecognizer.__init__": ('PySide2.QtCore.QObject',), + "QSensorGestureRecognizer.create": (), + "QSensorGestureRecognizer.createBackend": (), + "QSensorGestureRecognizer.gestureSignals": (), + "QSensorGestureRecognizer.id": (), + "QSensorGestureRecognizer.isActive": (), + "QSensorGestureRecognizer.start": (), + "QSensorGestureRecognizer.startBackend": (), + "QSensorGestureRecognizer.stop": (), + "QSensorGestureRecognizer.stopBackend": (), + + # class PySide2.QtSensors.QSensorManager: + "QSensorManager.__init__": (), + "QSensorManager.createBackend": ('PySide2.QtSensors.QSensor',), + "QSensorManager.isBackendRegistered": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QSensorManager.registerBackend": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'PySide2.QtSensors.QSensorBackendFactory'), + "QSensorManager.setDefaultBackend": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QSensorManager.unregisterBackend": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + + # class PySide2.QtSensors.QSensorPluginInterface: + "QSensorPluginInterface.__init__": (), + "QSensorPluginInterface.registerSensors": (), + + # class PySide2.QtSensors.QSensorReading: + "QSensorReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QSensorReading.setTimestamp": ('int',), + "QSensorReading.timestamp": (), + "QSensorReading.value": ('int',), + "QSensorReading.valueCount": (), + + # class PySide2.QtSensors.QTapFilter: + "QTapFilter.__init__": (), + "QTapFilter.filter": [('PySide2.QtSensors.QSensorReading',), ('PySide2.QtSensors.QTapReading',)], + + # class PySide2.QtSensors.QTapReading: + "QTapReading.__init__": ('PySide2.QtCore.QObject',), + "QTapReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QTapReading.isDoubleTap": (), + "QTapReading.setDoubleTap": ('bool',), + "QTapReading.setTapDirection": ('PySide2.QtSensors.QTapReading.TapDirection',), + "QTapReading.tapDirection": (), + + # class PySide2.QtSensors.QTapSensor: + "QTapSensor.__init__": ('PySide2.QtCore.QObject',), + "QTapSensor.reading": (), + "QTapSensor.returnDoubleTapEvents": (), + "QTapSensor.setReturnDoubleTapEvents": ('bool',), + + # class PySide2.QtSensors.QTiltFilter: + "QTiltFilter.__init__": (), + "QTiltFilter.filter": [('PySide2.QtSensors.QSensorReading',), ('PySide2.QtSensors.QTiltReading',)], + + # class PySide2.QtSensors.QTiltReading: + "QTiltReading.__init__": ('PySide2.QtCore.QObject',), + "QTiltReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QTiltReading.setXRotation": ('float',), + "QTiltReading.setYRotation": ('float',), + "QTiltReading.xRotation": (), + "QTiltReading.yRotation": (), + + # class PySide2.QtSensors.QTiltSensor: + "QTiltSensor.__init__": ('PySide2.QtCore.QObject',), + "QTiltSensor.calibrate": (), + "QTiltSensor.reading": (), + + # class PySide2.QtSensors.qoutputrange: + "qoutputrange.__init__": [(), ('PySide2.QtSensors.qoutputrange',)], + "qoutputrange.__copy__": (), + }) + +# Module PySide2.QtTextToSpeech +if "PySide2.QtTextToSpeech" in sys.modules: + dict.update({ + + # class PySide2.QtTextToSpeech.QTextToSpeech: + "QTextToSpeech.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextToSpeech.availableEngines": (), + "QTextToSpeech.availableLocales": (), + "QTextToSpeech.availableVoices": (), + "QTextToSpeech.locale": (), + "QTextToSpeech.pause": (), + "QTextToSpeech.pitch": (), + "QTextToSpeech.rate": (), + "QTextToSpeech.resume": (), + "QTextToSpeech.say": ('str',), + "QTextToSpeech.setLocale": ('PySide2.QtCore.QLocale',), + "QTextToSpeech.setPitch": ('float',), + "QTextToSpeech.setRate": ('float',), + "QTextToSpeech.setVoice": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeech.setVolume": ('float',), + "QTextToSpeech.state": (), + "QTextToSpeech.stop": (), + "QTextToSpeech.voice": (), + "QTextToSpeech.volume": (), + + # class PySide2.QtTextToSpeech.QTextToSpeechEngine: + "QTextToSpeechEngine.__init__": ('PySide2.QtCore.QObject',), + "QTextToSpeechEngine.availableLocales": (), + "QTextToSpeechEngine.availableVoices": (), + "QTextToSpeechEngine.createVoice": ('str', 'PySide2.QtTextToSpeech.QVoice.Gender', 'PySide2.QtTextToSpeech.QVoice.Age', 'Any'), + "QTextToSpeechEngine.locale": (), + "QTextToSpeechEngine.pause": (), + "QTextToSpeechEngine.pitch": (), + "QTextToSpeechEngine.rate": (), + "QTextToSpeechEngine.resume": (), + "QTextToSpeechEngine.say": ('str',), + "QTextToSpeechEngine.setLocale": ('PySide2.QtCore.QLocale',), + "QTextToSpeechEngine.setPitch": ('float',), + "QTextToSpeechEngine.setRate": ('float',), + "QTextToSpeechEngine.setVoice": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeechEngine.setVolume": ('float',), + "QTextToSpeechEngine.state": (), + "QTextToSpeechEngine.stop": (), + "QTextToSpeechEngine.voice": (), + "QTextToSpeechEngine.voiceData": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeechEngine.volume": (), + + # class PySide2.QtTextToSpeech.QVoice: + "QVoice.__init__": [(), ('PySide2.QtTextToSpeech.QVoice',)], + "QVoice.__copy__": (), + "QVoice.age": (), + "QVoice.ageName": ('PySide2.QtTextToSpeech.QVoice.Age',), + "QVoice.gender": (), + "QVoice.genderName": ('PySide2.QtTextToSpeech.QVoice.Gender',), + "QVoice.name": (), + }) + +# Module PySide2.QtCharts +if "PySide2.QtCharts" in sys.modules: + dict.update({ + + # class PySide2.QtCharts.QtCharts: + }) + +# Module PySide2.QtSvg +if "PySide2.QtSvg" in sys.modules: + dict.update({ + + # class PySide2.QtSvg.QGraphicsSvgItem: + "QGraphicsSvgItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSvgItem.boundingRect": (), + "QGraphicsSvgItem.elementId": (), + "QGraphicsSvgItem.isCachingEnabled": (), + "QGraphicsSvgItem.maximumCacheSize": (), + "QGraphicsSvgItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSvgItem.renderer": (), + "QGraphicsSvgItem.setCachingEnabled": ('bool',), + "QGraphicsSvgItem.setElementId": ('str',), + "QGraphicsSvgItem.setMaximumCacheSize": ('PySide2.QtCore.QSize',), + "QGraphicsSvgItem.setSharedRenderer": ('PySide2.QtSvg.QSvgRenderer',), + "QGraphicsSvgItem.type": (), + + # class PySide2.QtSvg.QSvgGenerator: + "QSvgGenerator.__init__": (), + "QSvgGenerator.description": (), + "QSvgGenerator.fileName": (), + "QSvgGenerator.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QSvgGenerator.outputDevice": (), + "QSvgGenerator.paintEngine": (), + "QSvgGenerator.resolution": (), + "QSvgGenerator.setDescription": ('str',), + "QSvgGenerator.setFileName": ('str',), + "QSvgGenerator.setOutputDevice": ('PySide2.QtCore.QIODevice',), + "QSvgGenerator.setResolution": ('int',), + "QSvgGenerator.setSize": ('PySide2.QtCore.QSize',), + "QSvgGenerator.setTitle": ('str',), + "QSvgGenerator.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgGenerator.size": (), + "QSvgGenerator.title": (), + "QSvgGenerator.viewBox": (), + "QSvgGenerator.viewBoxF": (), + + # class PySide2.QtSvg.QSvgRenderer: + "QSvgRenderer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QXmlStreamReader', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QSvgRenderer.animated": (), + "QSvgRenderer.animationDuration": (), + "QSvgRenderer.boundsOnElement": ('str',), + "QSvgRenderer.currentFrame": (), + "QSvgRenderer.defaultSize": (), + "QSvgRenderer.elementExists": ('str',), + "QSvgRenderer.framesPerSecond": (), + "QSvgRenderer.isValid": (), + "QSvgRenderer.load": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QXmlStreamReader',), ('str',)], + "QSvgRenderer.matrixForElement": ('str',), + "QSvgRenderer.render": [('PySide2.QtGui.QPainter',), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), ('PySide2.QtGui.QPainter', 'str', 'PySide2.QtCore.QRectF')], + "QSvgRenderer.setCurrentFrame": ('int',), + "QSvgRenderer.setFramesPerSecond": ('int',), + "QSvgRenderer.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgRenderer.viewBox": (), + "QSvgRenderer.viewBoxF": (), + + # class PySide2.QtSvg.QSvgWidget: + "QSvgWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QSvgWidget.load": [('PySide2.QtCore.QByteArray',), ('str',)], + "QSvgWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSvgWidget.renderer": (), + "QSvgWidget.sizeHint": (), + }) + +# Module PySide2.QtDataVisualization +if "PySide2.QtDataVisualization" in sys.modules: + dict.update({ + + # class PySide2.QtDataVisualization.QtDataVisualization: + "QtDataVisualization.qDefaultSurfaceFormat": ('bool',), + }) + +# Module PySide2.QtUiTools +if "PySide2.QtUiTools" in sys.modules: + dict.update({ + + # class PySide2.QtUiTools.QUiLoader: + "QUiLoader.__init__": ('PySide2.QtCore.QObject',), + "QUiLoader.addPluginPath": ('str',), + "QUiLoader.availableLayouts": (), + "QUiLoader.availableWidgets": (), + "QUiLoader.clearPluginPaths": (), + "QUiLoader.createAction": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createActionGroup": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createLayout": ('str', 'PySide2.QtCore.QObject', 'str'), + "QUiLoader.createWidget": ('str', 'PySide2.QtWidgets.QWidget', 'str'), + "QUiLoader.errorString": (), + "QUiLoader.isLanguageChangeEnabled": (), + "QUiLoader.isTranslationEnabled": (), + "QUiLoader.load": [('PySide2.QtCore.QIODevice', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QWidget')], + "QUiLoader.pluginPaths": (), + "QUiLoader.registerCustomWidget": ('object',), + "QUiLoader.setLanguageChangeEnabled": ('bool',), + "QUiLoader.setTranslationEnabled": ('bool',), + "QUiLoader.setWorkingDirectory": ('PySide2.QtCore.QDir',), + "QUiLoader.workingDirectory": (), + }) + +# Module PySide2.QtWebChannel +if "PySide2.QtWebChannel" in sys.modules: + dict.update({ + + # class PySide2.QtWebChannel.QWebChannel: + "QWebChannel.__init__": ('PySide2.QtCore.QObject',), + "QWebChannel.blockUpdates": (), + "QWebChannel.connectTo": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.deregisterObject": ('PySide2.QtCore.QObject',), + "QWebChannel.disconnectFrom": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.registerObject": ('str', 'PySide2.QtCore.QObject'), + "QWebChannel.registerObjects": ('dict',), + "QWebChannel.registeredObjects": (), + "QWebChannel.setBlockUpdates": ('bool',), + + # class PySide2.QtWebChannel.QWebChannelAbstractTransport: + "QWebChannelAbstractTransport.__init__": ('PySide2.QtCore.QObject',), + "QWebChannelAbstractTransport.sendMessage": ('dict',), + }) + +# Module PySide2.QtWebSockets +if "PySide2.QtWebSockets" in sys.modules: + dict.update({ + + # class PySide2.QtWebSockets.QMaskGenerator: + "QMaskGenerator.__init__": ('PySide2.QtCore.QObject',), + "QMaskGenerator.nextMask": (), + "QMaskGenerator.seed": (), + + # class PySide2.QtWebSockets.QWebSocket: + "QWebSocket.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketProtocol.Version', 'PySide2.QtCore.QObject'), + "QWebSocket.abort": (), + "QWebSocket.close": ('PySide2.QtWebSockets.QWebSocketProtocol.CloseCode', 'str'), + "QWebSocket.closeCode": (), + "QWebSocket.closeReason": (), + "QWebSocket.errorString": (), + "QWebSocket.flush": (), + "QWebSocket.isValid": (), + "QWebSocket.localAddress": (), + "QWebSocket.localPort": (), + "QWebSocket.maskGenerator": (), + "QWebSocket.open": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QWebSocket.origin": (), + "QWebSocket.pauseMode": (), + "QWebSocket.peerAddress": (), + "QWebSocket.peerName": (), + "QWebSocket.peerPort": (), + "QWebSocket.ping": ('PySide2.QtCore.QByteArray',), + "QWebSocket.proxy": (), + "QWebSocket.readBufferSize": (), + "QWebSocket.request": (), + "QWebSocket.requestUrl": (), + "QWebSocket.resourceName": (), + "QWebSocket.resume": (), + "QWebSocket.sendBinaryMessage": ('PySide2.QtCore.QByteArray',), + "QWebSocket.sendTextMessage": ('str',), + "QWebSocket.setMaskGenerator": ('PySide2.QtWebSockets.QMaskGenerator',), + "QWebSocket.setPauseMode": ('PySide2.libpyside.PauseModes',), + "QWebSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocket.setReadBufferSize": ('int',), + "QWebSocket.state": (), + "QWebSocket.version": (), + + # class PySide2.QtWebSockets.QWebSocketCorsAuthenticator: + "QWebSocketCorsAuthenticator.__init__": [('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), ('str',)], + "QWebSocketCorsAuthenticator.allowed": (), + "QWebSocketCorsAuthenticator.origin": (), + "QWebSocketCorsAuthenticator.setAllowed": ('bool',), + "QWebSocketCorsAuthenticator.swap": ('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), + + # class PySide2.QtWebSockets.QWebSocketProtocol: + + # class PySide2.QtWebSockets.QWebSocketServer: + "QWebSocketServer.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketServer.SslMode', 'PySide2.QtCore.QObject'), + "QWebSocketServer.close": (), + "QWebSocketServer.error": (), + "QWebSocketServer.errorString": (), + "QWebSocketServer.handleConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QWebSocketServer.hasPendingConnections": (), + "QWebSocketServer.isListening": (), + "QWebSocketServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QWebSocketServer.maxPendingConnections": (), + "QWebSocketServer.nextPendingConnection": (), + "QWebSocketServer.pauseAccepting": (), + "QWebSocketServer.proxy": (), + "QWebSocketServer.resumeAccepting": (), + "QWebSocketServer.secureMode": (), + "QWebSocketServer.serverAddress": (), + "QWebSocketServer.serverName": (), + "QWebSocketServer.serverPort": (), + "QWebSocketServer.serverUrl": (), + "QWebSocketServer.setMaxPendingConnections": ('int',), + "QWebSocketServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocketServer.setServerName": ('str',), + "QWebSocketServer.setSocketDescriptor": ('int',), + "QWebSocketServer.socketDescriptor": (), + "QWebSocketServer.supportedVersions": (), + }) + +# Module PySide2.Qt3DCore +if "PySide2.Qt3DCore" in sys.modules: + dict.update({ + + # class PySide2.Qt3DCore.Qt3DCore: + "Qt3DCore.QTransform": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float', 'float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "Qt3DCore.qHash": ('PySide2.Qt3DCore.Qt3DCore.QNodeId', 'int'), + "Qt3DCore.qIdForNode": ('PySide2.Qt3DCore.Qt3DCore.QNode',), + }) + +# Module PySide2.Qt3DRender +if "PySide2.Qt3DRender" in sys.modules: + dict.update({ + + # class PySide2.Qt3DRender.Qt3DRender: + "Qt3DRender.QBuffer": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "Qt3DRender.QCamera": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtMultimedia.QCamera.Position', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QCameraInfo', 'PySide2.QtCore.QObject')], + "Qt3DRender.QProximityFilter": (), + }) + +# Module PySide2.Qt3DInput +if "PySide2.Qt3DInput" in sys.modules: + dict.update({ + + # class PySide2.Qt3DInput.Qt3DInput: + "Qt3DInput.QAction": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "Qt3DInput.QKeyEvent": [('PySide2.QtCore.QEvent.Type', 'int', 'PySide2.libpyside.KeyboardModifiers', 'int', 'int', 'int', 'str', 'bool', 'int'), ('PySide2.QtCore.QEvent.Type', 'int', 'PySide2.libpyside.KeyboardModifiers', 'str', 'bool', 'int')], + "Qt3DInput.QMouseEvent": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers')], + "Qt3DInput.QWheelEvent": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource', 'bool'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation')], + }) + +# Module PySide2.Qt3DLogic +if "PySide2.Qt3DLogic" in sys.modules: + dict.update({ + + # class PySide2.Qt3DLogic.Qt3DLogic: + }) + +# Module PySide2.Qt3DAnimation +if "PySide2.Qt3DAnimation" in sys.modules: + dict.update({ + + # class PySide2.Qt3DAnimation.Qt3DAnimation: + "Qt3DAnimation.QAbstractAnimation": ('PySide2.QtCore.QObject',), + "Qt3DAnimation.QAnimationGroup": ('PySide2.QtCore.QObject',), + }) + +# Module PySide2.Qt3DExtras +if "PySide2.Qt3DExtras" in sys.modules: + dict.update({ + + # class PySide2.Qt3DExtras.Qt3DExtras: + }) +# eof + +END_FILE sources/pyside2/tests/registry/exists_linux_5_11_1_ci.py diff --git a/sources/pyside2/tests/registry/exists_linux_5_6_4_ci.py b/sources/pyside2/tests/registry/exists_linux_5_6_4_ci.py new file mode 100644 index 0000000..2addd06 --- /dev/null +++ b/sources/pyside2/tests/registry/exists_linux_5_6_4_ci.py @@ -0,0 +1,15379 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys + +dict = {} + +# Module PySide2.QtCore +if "PySide2.QtCore" in sys.modules: + dict.update({ + + # class PySide2.QtCore.ClassInfo: + + # class PySide2.QtCore.Connection: + "Connection.__init__": [(), ('PySide2.QtCore.Connection',)], + + # class PySide2.QtCore.MetaFunction: + + # class PySide2.QtCore.Property: + + # class PySide2.QtCore.QAbstractAnimation: + "QAbstractAnimation.__init__": ('PySide2.QtCore.QObject',), + "QAbstractAnimation.currentLoop": (), + "QAbstractAnimation.currentLoopTime": (), + "QAbstractAnimation.currentTime": (), + "QAbstractAnimation.direction": (), + "QAbstractAnimation.duration": (), + "QAbstractAnimation.event": ('PySide2.QtCore.QEvent',), + "QAbstractAnimation.group": (), + "QAbstractAnimation.loopCount": (), + "QAbstractAnimation.pause": (), + "QAbstractAnimation.resume": (), + "QAbstractAnimation.setCurrentTime": ('int',), + "QAbstractAnimation.setDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.setLoopCount": ('int',), + "QAbstractAnimation.setPaused": ('bool',), + "QAbstractAnimation.start": ('PySide2.QtCore.QAbstractAnimation.DeletionPolicy',), + "QAbstractAnimation.state": (), + "QAbstractAnimation.stop": (), + "QAbstractAnimation.totalDuration": (), + "QAbstractAnimation.updateCurrentTime": ('int',), + "QAbstractAnimation.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QAbstractEventDispatcher: + "QAbstractEventDispatcher.__init__": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.closingDown": (), + "QAbstractEventDispatcher.flush": (), + "QAbstractEventDispatcher.hasPendingEvents": (), + "QAbstractEventDispatcher.instance": ('PySide2.QtCore.QThread',), + "QAbstractEventDispatcher.interrupt": (), + "QAbstractEventDispatcher.processEvents": ('ProcessEventsFlags',), + "QAbstractEventDispatcher.registerSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.registerTimer": [('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject'), ('int', 'int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QAbstractEventDispatcher.registeredTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.remainingTime": ('int',), + "QAbstractEventDispatcher.startingUp": (), + "QAbstractEventDispatcher.unregisterSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.unregisterTimer": ('int',), + "QAbstractEventDispatcher.unregisterTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.wakeUp": (), + + # class PySide2.QtCore.QAbstractItemModel: + "QAbstractItemModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginMoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginMoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginResetModel": (), + "QAbstractItemModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.changePersistentIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.changePersistentIndexList": ('PySide2.support.signature.typing.List', 'PySide2.support.signature.typing.List'), + "QAbstractItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object')], + "QAbstractItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.decodeData": ('int', 'int', 'PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.encodeData": ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.endInsertColumns": (), + "QAbstractItemModel.endInsertRows": (), + "QAbstractItemModel.endMoveColumns": (), + "QAbstractItemModel.endMoveRows": (), + "QAbstractItemModel.endRemoveColumns": (), + "QAbstractItemModel.endRemoveRows": (), + "QAbstractItemModel.endResetModel": (), + "QAbstractItemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasIndex": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.support.signature.typing.Any', 'int', 'MatchFlags'), + "QAbstractItemModel.mimeData": ('PySide2.support.signature.typing.List',), + "QAbstractItemModel.mimeTypes": (), + "QAbstractItemModel.moveColumn": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRow": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemModel.persistentIndexList": (), + "QAbstractItemModel.removeColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.resetInternalData": (), + "QAbstractItemModel.revert": (), + "QAbstractItemModel.roleNames": (), + "QAbstractItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QAbstractItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QAbstractItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractItemModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.submit": (), + "QAbstractItemModel.supportedDragActions": (), + "QAbstractItemModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractListModel: + "QAbstractListModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractListModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractProxyModel: + "QAbstractProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractProxyModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mimeData": ('PySide2.support.signature.typing.List',), + "QAbstractProxyModel.mimeTypes": (), + "QAbstractProxyModel.resetInternalData": (), + "QAbstractProxyModel.revert": (), + "QAbstractProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QAbstractProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QAbstractProxyModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractProxyModel.sourceModel": (), + "QAbstractProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.submit": (), + "QAbstractProxyModel.supportedDragActions": (), + "QAbstractProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractState: + "QAbstractState.__init__": ('PySide2.QtCore.QState',), + "QAbstractState.active": (), + "QAbstractState.event": ('PySide2.QtCore.QEvent',), + "QAbstractState.machine": (), + "QAbstractState.onEntry": ('PySide2.QtCore.QEvent',), + "QAbstractState.onExit": ('PySide2.QtCore.QEvent',), + "QAbstractState.parentState": (), + + # class PySide2.QtCore.QAbstractTableModel: + "QAbstractTableModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractTableModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractTableModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractTransition: + "QAbstractTransition.__init__": ('PySide2.QtCore.QState',), + "QAbstractTransition.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.animations": (), + "QAbstractTransition.event": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.machine": (), + "QAbstractTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.setTargetState": ('PySide2.QtCore.QAbstractState',), + "QAbstractTransition.setTargetStates": ('list',), + "QAbstractTransition.setTransitionType": ('PySide2.QtCore.QAbstractTransition.TransitionType',), + "QAbstractTransition.sourceState": (), + "QAbstractTransition.targetState": (), + "QAbstractTransition.targetStates": (), + "QAbstractTransition.transitionType": (), + + # class PySide2.QtCore.QAnimationGroup: + "QAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QAnimationGroup.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.animationAt": ('int',), + "QAnimationGroup.animationCount": (), + "QAnimationGroup.clear": (), + "QAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QAnimationGroup.indexOfAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.insertAnimation": ('int', 'PySide2.QtCore.QAbstractAnimation'), + "QAnimationGroup.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.takeAnimation": ('int',), + + # class PySide2.QtCore.QBasicMutex: + "QBasicMutex.__init__": (), + "QBasicMutex.isRecursive": (), + "QBasicMutex.lock": (), + "QBasicMutex.tryLock": (), + "QBasicMutex.unlock": (), + + # class PySide2.QtCore.QBasicTimer: + "QBasicTimer.__init__": [(), ('PySide2.QtCore.QBasicTimer',)], + "QBasicTimer.__copy__": (), + "QBasicTimer.isActive": (), + "QBasicTimer.start": [('int', 'PySide2.QtCore.QObject'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QBasicTimer.stop": (), + "QBasicTimer.timerId": (), + + # class PySide2.QtCore.QBitArray: + "QBitArray.__init__": [(), ('PySide2.QtCore.QBitArray',), ('int', 'bool')], + "QBitArray.__copy__": (), + "QBitArray.at": ('int',), + "QBitArray.clear": (), + "QBitArray.clearBit": ('int',), + "QBitArray.count": [(), ('bool',)], + "QBitArray.fill": [('bool', 'int'), ('bool', 'int', 'int')], + "QBitArray.isEmpty": (), + "QBitArray.isNull": (), + "QBitArray.resize": ('int',), + "QBitArray.setBit": [('int',), ('int', 'bool')], + "QBitArray.size": (), + "QBitArray.swap": ('PySide2.QtCore.QBitArray',), + "QBitArray.testBit": ('int',), + "QBitArray.toggleBit": ('int',), + "QBitArray.truncate": ('int',), + + # class PySide2.QtCore.QBuffer: + "QBuffer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QBuffer.atEnd": (), + "QBuffer.buffer": [], + "QBuffer.canReadLine": (), + "QBuffer.close": (), + "QBuffer.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.data": (), + "QBuffer.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.open": ('OpenMode',), + "QBuffer.pos": (), + "QBuffer.readData": ('str', 'int'), + "QBuffer.seek": ('int',), + "QBuffer.setBuffer": ('PySide2.QtCore.QByteArray',), + "QBuffer.setData": ('PySide2.QtCore.QByteArray',), + "QBuffer.size": (), + "QBuffer.writeData": ('str', 'int'), + + # class PySide2.QtCore.QByteArray: + "QByteArray.__init__": [(), ('PySide2.QtCore.QByteArray',), ('int', 'PySide2.support.signature.typing.Union[str, int]'), ('bytes',), ('bytearray',)], + "QByteArray.__copy__": (), + "QByteArray.__reduce__": (), + "QByteArray.append": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.at": ('int',), + "QByteArray.capacity": (), + "QByteArray.cbegin": (), + "QByteArray.cend": (), + "QByteArray.chop": ('int',), + "QByteArray.clear": (), + "QByteArray.contains": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.count": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.data": [], + "QByteArray.endsWith": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.fill": ('PySide2.support.signature.typing.Union[str, int]', 'int'), + "QByteArray.fromBase64": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'Base64Options')], + "QByteArray.fromHex": ('PySide2.QtCore.QByteArray',), + "QByteArray.fromPercentEncoding": ('PySide2.QtCore.QByteArray', 'PySide2.support.signature.typing.Union[str, int]'), + "QByteArray.fromRawData": ('str', 'int'), + "QByteArray.indexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.insert": ('int', 'PySide2.QtCore.QByteArray'), + "QByteArray.isEmpty": (), + "QByteArray.isNull": (), + "QByteArray.isSharedWith": ('PySide2.QtCore.QByteArray',), + "QByteArray.lastIndexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.left": ('int',), + "QByteArray.leftJustified": ('int', 'PySide2.support.signature.typing.Union[str, int]', 'bool'), + "QByteArray.length": (), + "QByteArray.mid": ('int', 'int'), + "QByteArray.number": [('float', 'PySide2.support.signature.typing.Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.prepend": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.remove": ('int', 'int'), + "QByteArray.repeated": ('int',), + "QByteArray.replace": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.support.signature.typing.Union[str, int]', 'PySide2.QtCore.QByteArray'), ('PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]'), ('int', 'int', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QByteArray.reserve": ('int',), + "QByteArray.resize": ('int',), + "QByteArray.right": ('int',), + "QByteArray.rightJustified": ('int', 'PySide2.support.signature.typing.Union[str, int]', 'bool'), + "QByteArray.setNum": [('float', 'PySide2.support.signature.typing.Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.setRawData": ('str', 'int'), + "QByteArray.simplified": (), + "QByteArray.size": (), + "QByteArray.split": ('PySide2.support.signature.typing.Union[str, int]',), + "QByteArray.squeeze": (), + "QByteArray.startsWith": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.swap": ('PySide2.QtCore.QByteArray',), + "QByteArray.toBase64": [(), ('Base64Options',)], + "QByteArray.toDouble": ('bool',), + "QByteArray.toFloat": ('bool',), + "QByteArray.toHex": (), + "QByteArray.toInt": ('bool', 'int'), + "QByteArray.toLong": ('bool', 'int'), + "QByteArray.toLongLong": ('bool', 'int'), + "QByteArray.toLower": (), + "QByteArray.toPercentEncoding": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'PySide2.support.signature.typing.Union[str, int]'), + "QByteArray.toShort": ('bool', 'int'), + "QByteArray.toUInt": ('bool', 'int'), + "QByteArray.toULong": ('bool', 'int'), + "QByteArray.toULongLong": ('bool', 'int'), + "QByteArray.toUShort": ('bool', 'int'), + "QByteArray.toUpper": (), + "QByteArray.trimmed": (), + "QByteArray.truncate": ('int',), + + # class PySide2.QtCore.QByteArrayMatcher: + "QByteArrayMatcher.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArrayMatcher',), ('str', 'int')], + "QByteArrayMatcher.__copy__": (), + "QByteArrayMatcher.indexIn": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int', 'int')], + "QByteArrayMatcher.pattern": (), + "QByteArrayMatcher.setPattern": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QChildEvent: + "QChildEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QObject'), + "QChildEvent.added": (), + "QChildEvent.child": (), + "QChildEvent.polished": (), + "QChildEvent.removed": (), + + # class PySide2.QtCore.QCollator: + "QCollator.__init__": [('PySide2.QtCore.QCollator',), ('PySide2.QtCore.QLocale',)], + "QCollator.caseSensitivity": (), + "QCollator.compare": [('PySide2.support.signature.typing.Union[str, int]', 'int', 'PySide2.support.signature.typing.Union[str, int]', 'int'), ('str', 'str')], + "QCollator.ignorePunctuation": (), + "QCollator.locale": (), + "QCollator.numericMode": (), + "QCollator.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCollator.setIgnorePunctuation": ('bool',), + "QCollator.setLocale": ('PySide2.QtCore.QLocale',), + "QCollator.setNumericMode": ('bool',), + "QCollator.sortKey": ('str',), + "QCollator.swap": ('PySide2.QtCore.QCollator',), + + # class PySide2.QtCore.QCollatorSortKey: + "QCollatorSortKey.__init__": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.compare": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.swap": ('PySide2.QtCore.QCollatorSortKey',), + + # class PySide2.QtCore.QCommandLineOption: + "QCommandLineOption.__init__": [('PySide2.QtCore.QCommandLineOption',), ('PySide2.support.signature.typing.List',), ('PySide2.support.signature.typing.List', 'str', 'str', 'str'), ('str',), ('str', 'str', 'str', 'str')], + "QCommandLineOption.defaultValues": (), + "QCommandLineOption.description": (), + "QCommandLineOption.isHidden": (), + "QCommandLineOption.names": (), + "QCommandLineOption.setDefaultValue": ('str',), + "QCommandLineOption.setDefaultValues": ('PySide2.support.signature.typing.List',), + "QCommandLineOption.setDescription": ('str',), + "QCommandLineOption.setHidden": ('bool',), + "QCommandLineOption.setValueName": ('str',), + "QCommandLineOption.swap": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineOption.valueName": (), + + # class PySide2.QtCore.QCommandLineParser: + "QCommandLineParser.__init__": (), + "QCommandLineParser.addHelpOption": (), + "QCommandLineParser.addOption": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineParser.addOptions": ('list',), + "QCommandLineParser.addPositionalArgument": ('str', 'str', 'str'), + "QCommandLineParser.addVersionOption": (), + "QCommandLineParser.applicationDescription": (), + "QCommandLineParser.clearPositionalArguments": (), + "QCommandLineParser.errorText": (), + "QCommandLineParser.helpText": (), + "QCommandLineParser.isSet": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.optionNames": (), + "QCommandLineParser.parse": ('PySide2.support.signature.typing.List',), + "QCommandLineParser.positionalArguments": (), + "QCommandLineParser.process": [('PySide2.QtCore.QCoreApplication',), ('PySide2.support.signature.typing.List',)], + "QCommandLineParser.setApplicationDescription": ('str',), + "QCommandLineParser.setOptionsAfterPositionalArgumentsMode": ('PySide2.QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode',), + "QCommandLineParser.setSingleDashWordOptionMode": ('PySide2.QtCore.QCommandLineParser.SingleDashWordOptionMode',), + "QCommandLineParser.showHelp": ('int',), + "QCommandLineParser.showVersion": (), + "QCommandLineParser.unknownOptionNames": (), + "QCommandLineParser.value": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.values": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + + # class PySide2.QtCore.QCoreApplication: + "QCoreApplication.__init__": ('PySide2.support.signature.typing.List',), + "QCoreApplication.addLibraryPath": ('str',), + "QCoreApplication.applicationDirPath": (), + "QCoreApplication.applicationFilePath": (), + "QCoreApplication.applicationName": (), + "QCoreApplication.applicationPid": (), + "QCoreApplication.applicationVersion": (), + "QCoreApplication.arguments": (), + "QCoreApplication.closingDown": (), + "QCoreApplication.event": ('PySide2.QtCore.QEvent',), + "QCoreApplication.eventDispatcher": (), + "QCoreApplication.exec_": (), + "QCoreApplication.exit": ('int',), + "QCoreApplication.flush": (), + "QCoreApplication.hasPendingEvents": (), + "QCoreApplication.installTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.instance": (), + "QCoreApplication.isQuitLockEnabled": (), + "QCoreApplication.isSetuidAllowed": (), + "QCoreApplication.libraryPaths": (), + "QCoreApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.organizationDomain": (), + "QCoreApplication.organizationName": (), + "QCoreApplication.postEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent', 'int'), + "QCoreApplication.processEvents": [('ProcessEventsFlags',), ('ProcessEventsFlags', 'int')], + "QCoreApplication.quit": (), + "QCoreApplication.removeLibraryPath": ('str',), + "QCoreApplication.removePostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.removeTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.sendEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.sendPostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.setApplicationName": ('str',), + "QCoreApplication.setApplicationVersion": ('str',), + "QCoreApplication.setAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute', 'bool'), + "QCoreApplication.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QCoreApplication.setLibraryPaths": ('PySide2.support.signature.typing.List',), + "QCoreApplication.setOrganizationDomain": ('str',), + "QCoreApplication.setOrganizationName": ('str',), + "QCoreApplication.setQuitLockEnabled": ('bool',), + "QCoreApplication.setSetuidAllowed": ('bool',), + "QCoreApplication.startingUp": (), + "QCoreApplication.testAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute',), + "QCoreApplication.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QCryptographicHash: + "QCryptographicHash.__init__": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QCryptographicHash.addData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str', 'int')], + "QCryptographicHash.hash": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QCryptographicHash.Algorithm'), + "QCryptographicHash.reset": (), + "QCryptographicHash.result": (), + + # class PySide2.QtCore.QDataStream: + "QDataStream.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QDataStream.atEnd": (), + "QDataStream.byteOrder": (), + "QDataStream.device": (), + "QDataStream.floatingPointPrecision": (), + "QDataStream.readBool": (), + "QDataStream.readDouble": (), + "QDataStream.readFloat": (), + "QDataStream.readInt16": (), + "QDataStream.readInt32": (), + "QDataStream.readInt64": (), + "QDataStream.readInt8": (), + "QDataStream.readQChar": (), + "QDataStream.readQString": (), + "QDataStream.readQStringList": (), + "QDataStream.readQVariant": (), + "QDataStream.readRawData": ('str', 'int'), + "QDataStream.readString": (), + "QDataStream.readUInt16": (), + "QDataStream.readUInt32": (), + "QDataStream.readUInt64": (), + "QDataStream.readUInt8": (), + "QDataStream.resetStatus": (), + "QDataStream.setByteOrder": ('PySide2.QtCore.QDataStream.ByteOrder',), + "QDataStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QDataStream.setFloatingPointPrecision": ('PySide2.QtCore.QDataStream.FloatingPointPrecision',), + "QDataStream.setStatus": ('PySide2.QtCore.QDataStream.Status',), + "QDataStream.setVersion": ('int',), + "QDataStream.skipRawData": ('int',), + "QDataStream.status": (), + "QDataStream.unsetDevice": (), + "QDataStream.version": (), + "QDataStream.writeBool": ('bool',), + "QDataStream.writeDouble": ('float',), + "QDataStream.writeFloat": ('float',), + "QDataStream.writeInt16": ('int',), + "QDataStream.writeInt32": ('int',), + "QDataStream.writeInt64": ('int',), + "QDataStream.writeInt8": ('PySide2.support.signature.typing.Union[str, int]',), + "QDataStream.writeQChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QDataStream.writeQString": ('str',), + "QDataStream.writeQStringList": ('PySide2.support.signature.typing.List',), + "QDataStream.writeQVariant": ('PySide2.support.signature.typing.Any',), + "QDataStream.writeRawData": ('str', 'int'), + "QDataStream.writeString": ('str',), + "QDataStream.writeUInt16": ('int',), + "QDataStream.writeUInt32": ('int',), + "QDataStream.writeUInt64": ('int',), + "QDataStream.writeUInt8": ('PySide2.support.signature.typing.Union[str, int]',), + + # class PySide2.QtCore.QDate: + "QDate.__init__": [(), ('PySide2.QtCore.QDate',), ('int', 'int', 'int')], + "QDate.__copy__": (), + "QDate.__reduce__": (), + "QDate.addDays": ('int',), + "QDate.addMonths": ('int',), + "QDate.addYears": ('int',), + "QDate.currentDate": (), + "QDate.day": (), + "QDate.dayOfWeek": (), + "QDate.dayOfYear": (), + "QDate.daysInMonth": (), + "QDate.daysInYear": (), + "QDate.daysTo": ('PySide2.QtCore.QDate',), + "QDate.fromJulianDay": ('int',), + "QDate.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDate.getDate": ('int', 'int', 'int'), + "QDate.isLeapYear": ('int',), + "QDate.isNull": (), + "QDate.isValid": [(), ('int', 'int', 'int')], + "QDate.longDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.longMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.month": (), + "QDate.setDate": ('int', 'int', 'int'), + "QDate.shortDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.shortMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.toJulianDay": (), + "QDate.toPython": (), + "QDate.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDate.weekNumber": ('int',), + "QDate.year": (), + + # class PySide2.QtCore.QDateTime: + "QDateTime.__init__": [(), ('PySide2.QtCore.QDate',), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.QTimeZone'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec', 'int'), ('PySide2.QtCore.QDateTime',), ('int', 'int', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int')], + "QDateTime.__copy__": (), + "QDateTime.__reduce__": (), + "QDateTime.addDays": ('int',), + "QDateTime.addMSecs": ('int',), + "QDateTime.addMonths": ('int',), + "QDateTime.addSecs": ('int',), + "QDateTime.addYears": ('int',), + "QDateTime.currentDateTime": (), + "QDateTime.currentDateTimeUtc": (), + "QDateTime.currentMSecsSinceEpoch": (), + "QDateTime.date": (), + "QDateTime.daysTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.fromMSecsSinceEpoch": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDateTime.fromTime_t": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.isDaylightTime": (), + "QDateTime.isNull": (), + "QDateTime.isValid": (), + "QDateTime.msecsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.offsetFromUtc": (), + "QDateTime.secsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.setDate": ('PySide2.QtCore.QDate',), + "QDateTime.setMSecsSinceEpoch": ('int',), + "QDateTime.setOffsetFromUtc": ('int',), + "QDateTime.setTime": ('PySide2.QtCore.QTime',), + "QDateTime.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.setTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.setTime_t": ('int',), + "QDateTime.setUtcOffset": ('int',), + "QDateTime.swap": ('PySide2.QtCore.QDateTime',), + "QDateTime.time": (), + "QDateTime.timeSpec": (), + "QDateTime.timeZone": (), + "QDateTime.timeZoneAbbreviation": (), + "QDateTime.toLocalTime": (), + "QDateTime.toMSecsSinceEpoch": (), + "QDateTime.toOffsetFromUtc": ('int',), + "QDateTime.toPython": (), + "QDateTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDateTime.toTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.toTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.toTime_t": (), + "QDateTime.toUTC": (), + "QDateTime.utcOffset": (), + + # class PySide2.QtCore.QDir: + "QDir.__init__": [('PySide2.QtCore.QDir',), ('str',), ('str', 'str', 'SortFlags', 'Filters')], + "QDir.__copy__": (), + "QDir.__reduce__": (), + "QDir.absoluteFilePath": ('str',), + "QDir.absolutePath": (), + "QDir.addResourceSearchPath": ('str',), + "QDir.addSearchPath": ('str', 'str'), + "QDir.canonicalPath": (), + "QDir.cd": ('str',), + "QDir.cdUp": (), + "QDir.cleanPath": ('str',), + "QDir.count": (), + "QDir.current": (), + "QDir.currentPath": (), + "QDir.dirName": (), + "QDir.drives": (), + "QDir.entryInfoList": [('Filters', 'SortFlags'), ('PySide2.support.signature.typing.List', 'Filters', 'SortFlags')], + "QDir.entryList": [('Filters', 'SortFlags'), ('PySide2.support.signature.typing.List', 'Filters', 'SortFlags')], + "QDir.exists": [(), ('str',)], + "QDir.filePath": ('str',), + "QDir.filter": (), + "QDir.fromNativeSeparators": ('str',), + "QDir.home": (), + "QDir.homePath": (), + "QDir.isAbsolute": (), + "QDir.isAbsolutePath": ('str',), + "QDir.isReadable": (), + "QDir.isRelative": (), + "QDir.isRelativePath": ('str',), + "QDir.isRoot": (), + "QDir.listSeparator": (), + "QDir.makeAbsolute": (), + "QDir.match": [('PySide2.support.signature.typing.List', 'str'), ('str', 'str')], + "QDir.mkdir": ('str',), + "QDir.mkpath": ('str',), + "QDir.nameFilters": (), + "QDir.nameFiltersFromString": ('str',), + "QDir.path": (), + "QDir.refresh": (), + "QDir.relativeFilePath": ('str',), + "QDir.remove": ('str',), + "QDir.removeRecursively": (), + "QDir.rename": ('str', 'str'), + "QDir.rmdir": ('str',), + "QDir.rmpath": ('str',), + "QDir.root": (), + "QDir.rootPath": (), + "QDir.searchPaths": ('str',), + "QDir.separator": (), + "QDir.setCurrent": ('str',), + "QDir.setFilter": ('Filters',), + "QDir.setNameFilters": ('PySide2.support.signature.typing.List',), + "QDir.setPath": ('str',), + "QDir.setSearchPaths": ('str', 'PySide2.support.signature.typing.List'), + "QDir.setSorting": ('SortFlags',), + "QDir.sorting": (), + "QDir.swap": ('PySide2.QtCore.QDir',), + "QDir.temp": (), + "QDir.tempPath": (), + "QDir.toNativeSeparators": ('str',), + + # class PySide2.QtCore.QDirIterator: + "QDirIterator.__init__": [('PySide2.QtCore.QDir', 'IteratorFlags'), ('str', 'Filters', 'IteratorFlags'), ('str', 'IteratorFlags'), ('str', 'PySide2.support.signature.typing.List', 'Filters', 'IteratorFlags')], + "QDirIterator.fileInfo": (), + "QDirIterator.fileName": (), + "QDirIterator.filePath": (), + "QDirIterator.hasNext": (), + "QDirIterator.next": (), + "QDirIterator.path": (), + + # class PySide2.QtCore.QDynamicPropertyChangeEvent: + "QDynamicPropertyChangeEvent.__init__": ('PySide2.QtCore.QByteArray',), + "QDynamicPropertyChangeEvent.propertyName": (), + + # class PySide2.QtCore.QEasingCurve: + "QEasingCurve.__init__": [('PySide2.QtCore.QEasingCurve',), ('PySide2.QtCore.QEasingCurve.Type',)], + "QEasingCurve.__copy__": (), + "QEasingCurve.addCubicBezierSegment": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEasingCurve.addTCBSegment": ('PySide2.QtCore.QPointF', 'float', 'float', 'float'), + "QEasingCurve.amplitude": (), + "QEasingCurve.customType": (), + "QEasingCurve.overshoot": (), + "QEasingCurve.period": (), + "QEasingCurve.setAmplitude": ('float',), + "QEasingCurve.setCustomType": ('object',), + "QEasingCurve.setOvershoot": ('float',), + "QEasingCurve.setPeriod": ('float',), + "QEasingCurve.setType": ('PySide2.QtCore.QEasingCurve.Type',), + "QEasingCurve.swap": ('PySide2.QtCore.QEasingCurve',), + "QEasingCurve.toCubicSpline": (), + "QEasingCurve.type": (), + "QEasingCurve.valueForProgress": ('float',), + + # class PySide2.QtCore.QElapsedTimer: + "QElapsedTimer.__init__": [(), ('PySide2.QtCore.QElapsedTimer',)], + "QElapsedTimer.__copy__": (), + "QElapsedTimer.clockType": (), + "QElapsedTimer.elapsed": (), + "QElapsedTimer.hasExpired": ('int',), + "QElapsedTimer.invalidate": (), + "QElapsedTimer.isMonotonic": (), + "QElapsedTimer.isValid": (), + "QElapsedTimer.msecsSinceReference": (), + "QElapsedTimer.msecsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.nsecsElapsed": (), + "QElapsedTimer.restart": (), + "QElapsedTimer.secsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.start": (), + + # class PySide2.QtCore.QEvent: + "QEvent.__init__": [('PySide2.QtCore.QEvent',), ('PySide2.QtCore.QEvent.Type',)], + "QEvent.accept": (), + "QEvent.ignore": (), + "QEvent.isAccepted": (), + "QEvent.registerEventType": ('int',), + "QEvent.setAccepted": ('bool',), + "QEvent.spontaneous": (), + "QEvent.type": (), + + # class PySide2.QtCore.QEventLoop: + "QEventLoop.__init__": ('PySide2.QtCore.QObject',), + "QEventLoop.event": ('PySide2.QtCore.QEvent',), + "QEventLoop.exec_": ('ProcessEventsFlags',), + "QEventLoop.exit": ('int',), + "QEventLoop.isRunning": (), + "QEventLoop.processEvents": [('ProcessEventsFlags',), ('ProcessEventsFlags', 'int')], + "QEventLoop.quit": (), + "QEventLoop.wakeUp": (), + + # class PySide2.QtCore.QEventTransition: + "QEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QEventTransition.event": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventSource": (), + "QEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventType": (), + "QEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QEventTransition.setEventSource": ('PySide2.QtCore.QObject',), + "QEventTransition.setEventType": ('PySide2.QtCore.QEvent.Type',), + + # class PySide2.QtCore.QFactoryInterface: + "QFactoryInterface.__init__": (), + "QFactoryInterface.keys": (), + + # class PySide2.QtCore.QFile: + "QFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QFile.copy": [('str',), ('str', 'str')], + "QFile.decodeName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QFile.encodeName": ('str',), + "QFile.exists": [(), ('str',)], + "QFile.fileName": (), + "QFile.link": [('str',), ('str', 'str')], + "QFile.open": [('OpenMode',), ('int', 'OpenMode', 'FileHandleFlags')], + "QFile.permissions": [(), ('str',)], + "QFile.readLink": [(), ('str',)], + "QFile.remove": [(), ('str',)], + "QFile.rename": [('str',), ('str', 'str')], + "QFile.resize": [('int',), ('str', 'int')], + "QFile.setFileName": ('str',), + "QFile.setPermissions": [('Permissions',), ('str', 'Permissions')], + "QFile.size": (), + "QFile.symLinkTarget": [(), ('str',)], + + # class PySide2.QtCore.QFileDevice: + "QFileDevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QFileDevice.atEnd": (), + "QFileDevice.close": (), + "QFileDevice.error": (), + "QFileDevice.fileName": (), + "QFileDevice.flush": (), + "QFileDevice.handle": (), + "QFileDevice.isSequential": (), + "QFileDevice.map": ('int', 'int', 'PySide2.QtCore.QFileDevice.MemoryMapFlags'), + "QFileDevice.permissions": (), + "QFileDevice.pos": (), + "QFileDevice.readData": ('str', 'int'), + "QFileDevice.readLineData": ('str', 'int'), + "QFileDevice.resize": ('int',), + "QFileDevice.seek": ('int',), + "QFileDevice.setPermissions": ('Permissions',), + "QFileDevice.size": (), + "QFileDevice.unmap": ('PySide2.support.signature.typing.Union[str, int]',), + "QFileDevice.unsetError": (), + "QFileDevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QFileInfo: + "QFileInfo.__init__": [(), ('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('PySide2.QtCore.QFileInfo',), ('str',)], + "QFileInfo.__copy__": (), + "QFileInfo.__reduce__": (), + "QFileInfo.absoluteDir": (), + "QFileInfo.absoluteFilePath": (), + "QFileInfo.absolutePath": (), + "QFileInfo.baseName": (), + "QFileInfo.bundleName": (), + "QFileInfo.caching": (), + "QFileInfo.canonicalFilePath": (), + "QFileInfo.canonicalPath": (), + "QFileInfo.completeBaseName": (), + "QFileInfo.completeSuffix": (), + "QFileInfo.created": (), + "QFileInfo.dir": (), + "QFileInfo.exists": [(), ('str',)], + "QFileInfo.fileName": (), + "QFileInfo.filePath": (), + "QFileInfo.group": (), + "QFileInfo.groupId": (), + "QFileInfo.isAbsolute": (), + "QFileInfo.isBundle": (), + "QFileInfo.isDir": (), + "QFileInfo.isExecutable": (), + "QFileInfo.isFile": (), + "QFileInfo.isHidden": (), + "QFileInfo.isNativePath": (), + "QFileInfo.isReadable": (), + "QFileInfo.isRelative": (), + "QFileInfo.isRoot": (), + "QFileInfo.isSymLink": (), + "QFileInfo.isWritable": (), + "QFileInfo.lastModified": (), + "QFileInfo.lastRead": (), + "QFileInfo.makeAbsolute": (), + "QFileInfo.owner": (), + "QFileInfo.ownerId": (), + "QFileInfo.path": (), + "QFileInfo.readLink": (), + "QFileInfo.refresh": (), + "QFileInfo.setCaching": ('bool',), + "QFileInfo.setFile": [('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('str',)], + "QFileInfo.size": (), + "QFileInfo.suffix": (), + "QFileInfo.swap": ('PySide2.QtCore.QFileInfo',), + "QFileInfo.symLinkTarget": (), + + # class PySide2.QtCore.QFileSelector: + "QFileSelector.__init__": ('PySide2.QtCore.QObject',), + "QFileSelector.allSelectors": (), + "QFileSelector.extraSelectors": (), + "QFileSelector.select": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileSelector.setExtraSelectors": ('PySide2.support.signature.typing.List',), + + # class PySide2.QtCore.QFileSystemWatcher: + "QFileSystemWatcher.__init__": [('PySide2.QtCore.QObject',), ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QObject')], + "QFileSystemWatcher.addPath": ('str',), + "QFileSystemWatcher.addPaths": ('PySide2.support.signature.typing.List',), + "QFileSystemWatcher.directories": (), + "QFileSystemWatcher.files": (), + "QFileSystemWatcher.removePath": ('str',), + "QFileSystemWatcher.removePaths": ('PySide2.support.signature.typing.List',), + + # class PySide2.QtCore.QFinalState: + "QFinalState.__init__": ('PySide2.QtCore.QState',), + "QFinalState.event": ('PySide2.QtCore.QEvent',), + "QFinalState.onEntry": ('PySide2.QtCore.QEvent',), + "QFinalState.onExit": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtCore.QGenericArgument: + "QGenericArgument.__init__": [('PySide2.QtCore.QGenericArgument',), ('str', 'int')], + "QGenericArgument.__copy__": (), + "QGenericArgument.data": (), + "QGenericArgument.name": (), + + # class PySide2.QtCore.QGenericReturnArgument: + "QGenericReturnArgument.__init__": [('PySide2.QtCore.QGenericReturnArgument',), ('str', 'int')], + "QGenericReturnArgument.__copy__": (), + + # class PySide2.QtCore.QHistoryState: + "QHistoryState.__init__": [('PySide2.QtCore.QHistoryState.HistoryType', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QHistoryState.defaultState": (), + "QHistoryState.defaultTransition": (), + "QHistoryState.event": ('PySide2.QtCore.QEvent',), + "QHistoryState.historyType": (), + "QHistoryState.onEntry": ('PySide2.QtCore.QEvent',), + "QHistoryState.onExit": ('PySide2.QtCore.QEvent',), + "QHistoryState.setDefaultState": ('PySide2.QtCore.QAbstractState',), + "QHistoryState.setDefaultTransition": ('PySide2.QtCore.QAbstractTransition',), + "QHistoryState.setHistoryType": ('PySide2.QtCore.QHistoryState.HistoryType',), + + # class PySide2.QtCore.QIODevice: + "QIODevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QIODevice.atEnd": (), + "QIODevice.bytesAvailable": (), + "QIODevice.bytesToWrite": (), + "QIODevice.canReadLine": (), + "QIODevice.close": (), + "QIODevice.errorString": (), + "QIODevice.getChar": ('str',), + "QIODevice.isOpen": (), + "QIODevice.isReadable": (), + "QIODevice.isSequential": (), + "QIODevice.isTextModeEnabled": (), + "QIODevice.isWritable": (), + "QIODevice.open": ('OpenMode',), + "QIODevice.openMode": (), + "QIODevice.peek": ('int',), + "QIODevice.pos": (), + "QIODevice.putChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QIODevice.read": ('int',), + "QIODevice.readAll": (), + "QIODevice.readData": ('str', 'int'), + "QIODevice.readLine": ('int',), + "QIODevice.readLineData": ('str', 'int'), + "QIODevice.reset": (), + "QIODevice.seek": ('int',), + "QIODevice.setErrorString": ('str',), + "QIODevice.setOpenMode": ('OpenMode',), + "QIODevice.setTextModeEnabled": ('bool',), + "QIODevice.size": (), + "QIODevice.ungetChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QIODevice.waitForBytesWritten": ('int',), + "QIODevice.waitForReadyRead": ('int',), + "QIODevice.write": ('PySide2.QtCore.QByteArray',), + "QIODevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QItemSelection: + "QItemSelection.__init__": [(), ('PySide2.QtCore.QItemSelection',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelection.__copy__": (), + "QItemSelection.append": [('PySide2.QtCore.QItemSelectionRange',), ('list',)], + "QItemSelection.at": ('int',), + "QItemSelection.back": [], + "QItemSelection.clear": (), + "QItemSelection.constFirst": (), + "QItemSelection.constLast": (), + "QItemSelection.contains": ('PySide2.QtCore.QModelIndex',), + "QItemSelection.count": [(), ('PySide2.QtCore.QItemSelectionRange',)], + "QItemSelection.detachShared": (), + "QItemSelection.empty": (), + "QItemSelection.endsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.first": [], + "QItemSelection.fromSet": ('set',), + "QItemSelection.fromVector": ('list',), + "QItemSelection.front": [], + "QItemSelection.indexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.indexes": (), + "QItemSelection.insert": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.isEmpty": (), + "QItemSelection.isSharedWith": ('list',), + "QItemSelection.last": [], + "QItemSelection.lastIndexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.length": (), + "QItemSelection.merge": ('PySide2.QtCore.QItemSelection', 'SelectionFlags'), + "QItemSelection.mid": ('int', 'int'), + "QItemSelection.move": ('int', 'int'), + "QItemSelection.pop_back": (), + "QItemSelection.pop_front": (), + "QItemSelection.prepend": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_back": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_front": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAll": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAt": ('int',), + "QItemSelection.removeFirst": (), + "QItemSelection.removeLast": (), + "QItemSelection.removeOne": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.replace": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.reserve": ('int',), + "QItemSelection.select": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QItemSelection.setSharable": ('bool',), + "QItemSelection.size": (), + "QItemSelection.split": ('PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelection'), + "QItemSelection.startsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.swap": [('int', 'int'), ('list',)], + "QItemSelection.takeAt": ('int',), + "QItemSelection.takeFirst": (), + "QItemSelection.takeLast": (), + "QItemSelection.toSet": (), + "QItemSelection.toVector": (), + "QItemSelection.value": [('int',), ('int', 'PySide2.QtCore.QItemSelectionRange')], + + # class PySide2.QtCore.QItemSelectionModel: + "QItemSelectionModel.__init__": [('PySide2.QtCore.QAbstractItemModel',), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject')], + "QItemSelectionModel.clear": (), + "QItemSelectionModel.clearCurrentIndex": (), + "QItemSelectionModel.clearSelection": (), + "QItemSelectionModel.columnIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.currentIndex": (), + "QItemSelectionModel.emitSelectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QItemSelectionModel.hasSelection": (), + "QItemSelectionModel.isColumnSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isRowSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isSelected": ('PySide2.QtCore.QModelIndex',), + "QItemSelectionModel.model": [], + "QItemSelectionModel.reset": (), + "QItemSelectionModel.rowIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.select": [('PySide2.QtCore.QItemSelection', 'SelectionFlags'), ('PySide2.QtCore.QModelIndex', 'SelectionFlags')], + "QItemSelectionModel.selectedColumns": ('int',), + "QItemSelectionModel.selectedIndexes": (), + "QItemSelectionModel.selectedRows": ('int',), + "QItemSelectionModel.selection": (), + "QItemSelectionModel.setCurrentIndex": ('PySide2.QtCore.QModelIndex', 'SelectionFlags'), + "QItemSelectionModel.setModel": ('PySide2.QtCore.QAbstractItemModel',), + + # class PySide2.QtCore.QItemSelectionRange: + "QItemSelectionRange.__init__": [(), ('PySide2.QtCore.QItemSelectionRange',), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.__copy__": (), + "QItemSelectionRange.bottom": (), + "QItemSelectionRange.bottomRight": (), + "QItemSelectionRange.contains": [('PySide2.QtCore.QModelIndex',), ('int', 'int', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.height": (), + "QItemSelectionRange.indexes": (), + "QItemSelectionRange.intersected": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.intersects": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.isEmpty": (), + "QItemSelectionRange.isValid": (), + "QItemSelectionRange.left": (), + "QItemSelectionRange.model": (), + "QItemSelectionRange.parent": (), + "QItemSelectionRange.right": (), + "QItemSelectionRange.swap": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.top": (), + "QItemSelectionRange.topLeft": (), + "QItemSelectionRange.width": (), + + # class PySide2.QtCore.QJsonArray: + "QJsonArray.__init__": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonArray.__copy__": (), + "QJsonArray.append": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.at": ('int',), + "QJsonArray.contains": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.count": (), + "QJsonArray.empty": (), + "QJsonArray.first": (), + "QJsonArray.fromStringList": ('PySide2.support.signature.typing.List',), + "QJsonArray.fromVariantList": ('list',), + "QJsonArray.insert": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.isEmpty": (), + "QJsonArray.last": (), + "QJsonArray.pop_back": (), + "QJsonArray.pop_front": (), + "QJsonArray.prepend": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_back": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_front": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.removeAt": ('int',), + "QJsonArray.removeFirst": (), + "QJsonArray.removeLast": (), + "QJsonArray.replace": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.size": (), + "QJsonArray.takeAt": ('int',), + "QJsonArray.toVariantList": (), + + # class PySide2.QtCore.QJsonDocument: + "QJsonDocument.__init__": [(), ('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonDocument',), ('dict',)], + "QJsonDocument.__copy__": (), + "QJsonDocument.array": (), + "QJsonDocument.fromBinaryData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromJson": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonParseError'), + "QJsonDocument.fromRawData": ('str', 'int', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromVariant": ('PySide2.support.signature.typing.Any',), + "QJsonDocument.isArray": (), + "QJsonDocument.isEmpty": (), + "QJsonDocument.isNull": (), + "QJsonDocument.isObject": (), + "QJsonDocument.object": (), + "QJsonDocument.rawData": ('int',), + "QJsonDocument.setArray": ('PySide2.QtCore.QJsonArray',), + "QJsonDocument.setObject": ('dict',), + "QJsonDocument.toBinaryData": (), + "QJsonDocument.toJson": ('PySide2.QtCore.QJsonDocument.JsonFormat',), + "QJsonDocument.toVariant": (), + + # class PySide2.QtCore.QJsonParseError: + "QJsonParseError.__init__": [(), ('PySide2.QtCore.QJsonParseError',)], + "QJsonParseError.__copy__": (), + "QJsonParseError.errorString": (), + + # class PySide2.QtCore.QJsonValue: + "QJsonValue.__init__": [('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonValue',), ('PySide2.QtCore.QJsonValue.Type',), ('bool',), ('dict',), ('float',), ('int',), ('str',)], + "QJsonValue.__copy__": (), + "QJsonValue.fromVariant": ('PySide2.support.signature.typing.Any',), + "QJsonValue.isArray": (), + "QJsonValue.isBool": (), + "QJsonValue.isDouble": (), + "QJsonValue.isNull": (), + "QJsonValue.isObject": (), + "QJsonValue.isString": (), + "QJsonValue.isUndefined": (), + "QJsonValue.toArray": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonValue.toBool": ('bool',), + "QJsonValue.toDouble": ('float',), + "QJsonValue.toInt": ('int',), + "QJsonValue.toObject": [(), ('dict',)], + "QJsonValue.toString": ('str',), + "QJsonValue.toVariant": (), + "QJsonValue.type": (), + + # class PySide2.QtCore.QLibraryInfo: + "QLibraryInfo.buildDate": (), + "QLibraryInfo.build": (), + "QLibraryInfo.isDebugBuild": (), + "QLibraryInfo.licensedProducts": (), + "QLibraryInfo.licensee": (), + "QLibraryInfo.location": ('PySide2.QtCore.QLibraryInfo.LibraryLocation',), + "QLibraryInfo.platformPluginArguments": ('str',), + + # class PySide2.QtCore.QLine: + "QLine.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('int', 'int', 'int', 'int')], + "QLine.__copy__": (), + "QLine.__reduce__": (), + "QLine.dx": (), + "QLine.dy": (), + "QLine.isNull": (), + "QLine.p1": (), + "QLine.p2": (), + "QLine.setLine": ('int', 'int', 'int', 'int'), + "QLine.setP1": ('PySide2.QtCore.QPoint',), + "QLine.setP2": ('PySide2.QtCore.QPoint',), + "QLine.setPoints": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QLine.toTuple": (), + "QLine.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.x1": (), + "QLine.x2": (), + "QLine.y1": (), + "QLine.y2": (), + + # class PySide2.QtCore.QLineF: + "QLineF.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QLineF.__copy__": (), + "QLineF.__reduce__": (), + "QLineF.angle": [(), ('PySide2.QtCore.QLineF',)], + "QLineF.angleTo": ('PySide2.QtCore.QLineF',), + "QLineF.dx": (), + "QLineF.dy": (), + "QLineF.fromPolar": ('float', 'float'), + "QLineF.intersect": ('PySide2.QtCore.QLineF', 'PySide2.QtCore.QPointF'), + "QLineF.isNull": (), + "QLineF.length": (), + "QLineF.normalVector": (), + "QLineF.p1": (), + "QLineF.p2": (), + "QLineF.pointAt": ('float',), + "QLineF.setAngle": ('float',), + "QLineF.setLength": ('float',), + "QLineF.setLine": ('float', 'float', 'float', 'float'), + "QLineF.setP1": ('PySide2.QtCore.QPointF',), + "QLineF.setP2": ('PySide2.QtCore.QPointF',), + "QLineF.setPoints": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QLineF.toLine": (), + "QLineF.toTuple": (), + "QLineF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.unitVector": (), + "QLineF.x1": (), + "QLineF.x2": (), + "QLineF.y1": (), + "QLineF.y2": (), + + # class PySide2.QtCore.QLocale: + "QLocale.__init__": [(), ('PySide2.QtCore.QLocale',), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Country'), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), ('str',)], + "QLocale.__copy__": (), + "QLocale.amText": (), + "QLocale.bcp47Name": (), + "QLocale.c": (), + "QLocale.countriesForLanguage": ('PySide2.QtCore.QLocale.Language',), + "QLocale.country": (), + "QLocale.countryToString": ('PySide2.QtCore.QLocale.Country',), + "QLocale.createSeparatedList": ('PySide2.support.signature.typing.List',), + "QLocale.currencySymbol": ('PySide2.QtCore.QLocale.CurrencySymbolFormat',), + "QLocale.dateFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dateTimeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.decimalPoint": (), + "QLocale.exponential": (), + "QLocale.firstDayOfWeek": (), + "QLocale.groupSeparator": (), + "QLocale.language": (), + "QLocale.languageToString": ('PySide2.QtCore.QLocale.Language',), + "QLocale.matchingLocales": ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), + "QLocale.measurementSystem": (), + "QLocale.monthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.name": (), + "QLocale.nativeCountryName": (), + "QLocale.nativeLanguageName": (), + "QLocale.negativeSign": (), + "QLocale.numberOptions": (), + "QLocale.percent": (), + "QLocale.pmText": (), + "QLocale.positiveSign": (), + "QLocale.quoteString": ['PySide2.QtCore.QLocale.QuotationStyle', 'str'], + "QLocale.script": (), + "QLocale.scriptToString": ('PySide2.QtCore.QLocale.Script',), + "QLocale.setDefault": ('PySide2.QtCore.QLocale',), + "QLocale.setNumberOptions": ('NumberOptions',), + "QLocale.standaloneDayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.standaloneMonthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.system": (), + "QLocale.textDirection": (), + "QLocale.timeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.toCurrencyString": [('float', 'str'), ('int', 'str')], + "QLocale.toDate": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDateTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDouble": ('str', 'bool'), + "QLocale.toFloat": ('str', 'bool'), + "QLocale.toInt": ('str', 'bool'), + "QLocale.toLongLong": ('str', 'bool'), + "QLocale.toLower": ('str',), + "QLocale.toShort": ('str', 'bool'), + "QLocale.toString": [('PySide2.QtCore.QDate', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDate', 'str'), ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDateTime', 'str'), ('PySide2.QtCore.QTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QTime', 'str'), ('float', 'PySide2.support.signature.typing.Union[str, int]', 'int'), ('int',)], + "QLocale.toTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toUInt": ('str', 'bool'), + "QLocale.toULongLong": ('str', 'bool'), + "QLocale.toUShort": ('str', 'bool'), + "QLocale.toUpper": ('str',), + "QLocale.uiLanguages": (), + "QLocale.weekdays": (), + "QLocale.zeroDigit": (), + + # class PySide2.QtCore.QMargins: + "QMargins.__init__": [(), ('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QMargins.__copy__": (), + "QMargins.bottom": (), + "QMargins.isNull": (), + "QMargins.left": (), + "QMargins.right": (), + "QMargins.setBottom": ('int',), + "QMargins.setLeft": ('int',), + "QMargins.setRight": ('int',), + "QMargins.setTop": ('int',), + "QMargins.top": (), + + # class PySide2.QtCore.QMarginsF: + "QMarginsF.__init__": [(), ('PySide2.QtCore.QMargins',), ('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float')], + "QMarginsF.__copy__": (), + "QMarginsF.bottom": (), + "QMarginsF.isNull": (), + "QMarginsF.left": (), + "QMarginsF.right": (), + "QMarginsF.setBottom": ('float',), + "QMarginsF.setLeft": ('float',), + "QMarginsF.setRight": ('float',), + "QMarginsF.setTop": ('float',), + "QMarginsF.toMargins": (), + "QMarginsF.top": (), + + # class PySide2.QtCore.QMessageLogContext: + "QMessageLogContext.__init__": [(), ('str', 'int', 'str', 'str')], + + # class PySide2.QtCore.QMetaClassInfo: + "QMetaClassInfo.__init__": [(), ('PySide2.QtCore.QMetaClassInfo',)], + "QMetaClassInfo.__copy__": (), + "QMetaClassInfo.name": (), + "QMetaClassInfo.value": (), + + # class PySide2.QtCore.QMetaEnum: + "QMetaEnum.__init__": [(), ('PySide2.QtCore.QMetaEnum',)], + "QMetaEnum.__copy__": (), + "QMetaEnum.isFlag": (), + "QMetaEnum.isValid": (), + "QMetaEnum.key": ('int',), + "QMetaEnum.keyCount": (), + "QMetaEnum.keyToValue": ('str', 'bool'), + "QMetaEnum.keysToValue": ('str', 'bool'), + "QMetaEnum.name": (), + "QMetaEnum.scope": (), + "QMetaEnum.value": ('int',), + "QMetaEnum.valueToKey": ('int',), + "QMetaEnum.valueToKeys": ('int',), + + # class PySide2.QtCore.QMetaMethod: + "QMetaMethod.__init__": [(), ('PySide2.QtCore.QMetaMethod',)], + "QMetaMethod.__copy__": (), + "QMetaMethod.access": (), + "QMetaMethod.enclosingMetaObject": (), + "QMetaMethod.invoke": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.invokeOnGadget": [('int', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('int', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.isValid": (), + "QMetaMethod.methodIndex": (), + "QMetaMethod.methodSignature": (), + "QMetaMethod.methodType": (), + "QMetaMethod.name": (), + "QMetaMethod.parameterCount": (), + "QMetaMethod.parameterNames": (), + "QMetaMethod.parameterType": ('int',), + "QMetaMethod.parameterTypes": (), + "QMetaMethod.returnType": (), + "QMetaMethod.revision": (), + "QMetaMethod.tag": (), + "QMetaMethod.typeName": (), + + # class PySide2.QtCore.QMetaObject: + "QMetaObject.__init__": (), + "QMetaObject.cast": ['PySide2.QtCore.QObject'], + "QMetaObject.checkConnectArgs": [('PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QMetaMethod'), ('str', 'str')], + "QMetaObject.classInfo": ('int',), + "QMetaObject.classInfoCount": (), + "QMetaObject.classInfoOffset": (), + "QMetaObject.className": (), + "QMetaObject.connectSlotsByName": ('PySide2.QtCore.QObject',), + "QMetaObject.constructor": ('int',), + "QMetaObject.constructorCount": (), + "QMetaObject.disconnect": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.disconnectOne": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.enumerator": ('int',), + "QMetaObject.enumeratorCount": (), + "QMetaObject.enumeratorOffset": (), + "QMetaObject.indexOfClassInfo": ('str',), + "QMetaObject.indexOfConstructor": ('str',), + "QMetaObject.indexOfEnumerator": ('str',), + "QMetaObject.indexOfMethod": ('str',), + "QMetaObject.indexOfProperty": ('str',), + "QMetaObject.indexOfSignal": ('str',), + "QMetaObject.indexOfSlot": ('str',), + "QMetaObject.invokeMethod": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaObject.method": ('int',), + "QMetaObject.methodCount": (), + "QMetaObject.methodOffset": (), + "QMetaObject.newInstance": ('PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), + "QMetaObject.normalizedSignature": ('str',), + "QMetaObject.normalizedType": ('str',), + "QMetaObject.property": ('int',), + "QMetaObject.propertyCount": (), + "QMetaObject.propertyOffset": (), + "QMetaObject.superClass": (), + "QMetaObject.userProperty": (), + + # class PySide2.QtCore.QMetaProperty: + "QMetaProperty.__init__": [(), ('PySide2.QtCore.QMetaProperty',)], + "QMetaProperty.__copy__": (), + "QMetaProperty.enumerator": (), + "QMetaProperty.hasNotifySignal": (), + "QMetaProperty.hasStdCppSet": (), + "QMetaProperty.isConstant": (), + "QMetaProperty.isDesignable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEditable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEnumType": (), + "QMetaProperty.isFinal": (), + "QMetaProperty.isFlagType": (), + "QMetaProperty.isReadable": (), + "QMetaProperty.isResettable": (), + "QMetaProperty.isScriptable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isStored": ('PySide2.QtCore.QObject',), + "QMetaProperty.isUser": ('PySide2.QtCore.QObject',), + "QMetaProperty.isValid": (), + "QMetaProperty.isWritable": (), + "QMetaProperty.name": (), + "QMetaProperty.notifySignal": (), + "QMetaProperty.notifySignalIndex": (), + "QMetaProperty.propertyIndex": (), + "QMetaProperty.read": ('PySide2.QtCore.QObject',), + "QMetaProperty.readOnGadget": ('int',), + "QMetaProperty.reset": ('PySide2.QtCore.QObject',), + "QMetaProperty.resetOnGadget": ('int',), + "QMetaProperty.revision": (), + "QMetaProperty.type": (), + "QMetaProperty.typeName": (), + "QMetaProperty.userType": (), + "QMetaProperty.write": ('PySide2.QtCore.QObject', 'PySide2.support.signature.typing.Any'), + "QMetaProperty.writeOnGadget": ('int', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtCore.QMimeData: + "QMimeData.__init__": (), + "QMimeData.clear": (), + "QMimeData.colorData": (), + "QMimeData.data": ('str',), + "QMimeData.formats": (), + "QMimeData.hasColor": (), + "QMimeData.hasFormat": ('str',), + "QMimeData.hasHtml": (), + "QMimeData.hasImage": (), + "QMimeData.hasText": (), + "QMimeData.hasUrls": (), + "QMimeData.html": (), + "QMimeData.imageData": (), + "QMimeData.removeFormat": ('str',), + "QMimeData.retrieveData": ('str', 'type'), + "QMimeData.setColorData": ('PySide2.support.signature.typing.Any',), + "QMimeData.setData": ('str', 'PySide2.QtCore.QByteArray'), + "QMimeData.setHtml": ('str',), + "QMimeData.setImageData": ('PySide2.support.signature.typing.Any',), + "QMimeData.setText": ('str',), + "QMimeData.setUrls": ('list',), + "QMimeData.text": (), + "QMimeData.urls": (), + + # class PySide2.QtCore.QMimeDatabase: + "QMimeDatabase.__init__": (), + "QMimeDatabase.allMimeTypes": (), + "QMimeDatabase.mimeTypeForData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QMimeDatabase.mimeTypeForFile": [('PySide2.QtCore.QFileInfo', 'PySide2.QtCore.QMimeDatabase.MatchMode'), ('str', 'PySide2.QtCore.QMimeDatabase.MatchMode')], + "QMimeDatabase.mimeTypeForFileNameAndData": [('str', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QIODevice')], + "QMimeDatabase.mimeTypeForName": ('str',), + "QMimeDatabase.mimeTypeForUrl": ('PySide2.QtCore.QUrl',), + "QMimeDatabase.mimeTypesForFileName": ('str',), + "QMimeDatabase.suffixForFileName": ('str',), + + # class PySide2.QtCore.QMimeType: + "QMimeType.__init__": [(), ('PySide2.QtCore.QMimeType',)], + "QMimeType.__copy__": (), + "QMimeType.aliases": (), + "QMimeType.allAncestors": (), + "QMimeType.comment": (), + "QMimeType.filterString": (), + "QMimeType.genericIconName": (), + "QMimeType.globPatterns": (), + "QMimeType.iconName": (), + "QMimeType.inherits": ('str',), + "QMimeType.isDefault": (), + "QMimeType.isValid": (), + "QMimeType.name": (), + "QMimeType.parentMimeTypes": (), + "QMimeType.preferredSuffix": (), + "QMimeType.suffixes": (), + "QMimeType.swap": ('PySide2.QtCore.QMimeType',), + + # class PySide2.QtCore.QModelIndex: + "QModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',)], + "QModelIndex.__copy__": (), + "QModelIndex.child": ('int', 'int'), + "QModelIndex.column": (), + "QModelIndex.data": ('int',), + "QModelIndex.flags": (), + "QModelIndex.internalId": (), + "QModelIndex.internalPointer": (), + "QModelIndex.isValid": (), + "QModelIndex.model": (), + "QModelIndex.parent": (), + "QModelIndex.row": (), + "QModelIndex.sibling": ('int', 'int'), + + # class PySide2.QtCore.QMutex: + "QMutex.__init__": ('PySide2.QtCore.QMutex.RecursionMode',), + "QMutex.lock": (), + "QMutex.tryLock": [(), ('int',)], + "QMutex.unlock": (), + + # class PySide2.QtCore.QMutexLocker: + "QMutexLocker.__init__": ('PySide2.QtCore.QBasicMutex',), + "QMutexLocker.__enter__": (), + "QMutexLocker.__exit__": ('object', 'object', 'object'), + "QMutexLocker.mutex": (), + "QMutexLocker.relock": (), + "QMutexLocker.unlock": (), + + # class PySide2.QtCore.QObject: + "QObject.__init__": ('PySide2.QtCore.QObject',), + "QObject.blockSignals": ('bool',), + "QObject.childEvent": ('PySide2.QtCore.QChildEvent',), + "QObject.children": (), + "QObject.connect": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'PySide2.support.signature.typing.Callable', 'PySide2.QtCore.Qt.ConnectionType')], + "QObject.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.customEvent": ('PySide2.QtCore.QEvent',), + "QObject.deleteLater": (), + "QObject.disconnect": [('PySide2.QtCore.Connection',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Callable'), ('str', 'PySide2.QtCore.QObject', 'str'), ('str', 'PySide2.support.signature.typing.Callable')], + "QObject.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.dumpObjectInfo": (), + "QObject.dumpObjectTree": (), + "QObject.dynamicPropertyNames": (), + "QObject.emit": ('str', '...'), + "QObject.event": ('PySide2.QtCore.QEvent',), + "QObject.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QObject.findChild": ('type', 'str'), + "QObject.findChildren": [('type', 'PySide2.QtCore.QRegExp'), ('type', 'str')], + "QObject.inherits": ('str',), + "QObject.installEventFilter": ('PySide2.QtCore.QObject',), + "QObject.isSignalConnected": ('PySide2.QtCore.QMetaMethod',), + "QObject.isWidgetType": (), + "QObject.isWindowType": (), + "QObject.killTimer": ('int',), + "QObject.metaObject": (), + "QObject.moveToThread": ('PySide2.QtCore.QThread',), + "QObject.objectName": (), + "QObject.parent": (), + "QObject.property": ('str',), + "QObject.receivers": ('str',), + "QObject.registerUserData": (), + "QObject.removeEventFilter": ('PySide2.QtCore.QObject',), + "QObject.sender": (), + "QObject.senderSignalIndex": (), + "QObject.setObjectName": ('str',), + "QObject.setParent": ('PySide2.QtCore.QObject',), + "QObject.setProperty": ('str', 'PySide2.support.signature.typing.Any'), + "QObject.signalsBlocked": (), + "QObject.startTimer": ('int', 'PySide2.QtCore.Qt.TimerType'), + "QObject.thread": (), + "QObject.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QObject.tr": ('str', 'str', 'int'), + + # class PySide2.QtCore.QParallelAnimationGroup: + "QParallelAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QParallelAnimationGroup.duration": (), + "QParallelAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QParallelAnimationGroup.updateCurrentTime": ('int',), + "QParallelAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QParallelAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QPauseAnimation: + "QPauseAnimation.__init__": [('PySide2.QtCore.QObject',), ('int', 'PySide2.QtCore.QObject')], + "QPauseAnimation.duration": (), + "QPauseAnimation.event": ('PySide2.QtCore.QEvent',), + "QPauseAnimation.setDuration": ('int',), + "QPauseAnimation.updateCurrentTime": ('int',), + + # class PySide2.QtCore.QPersistentModelIndex: + "QPersistentModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QPersistentModelIndex',)], + "QPersistentModelIndex.__copy__": (), + "QPersistentModelIndex.child": ('int', 'int'), + "QPersistentModelIndex.column": (), + "QPersistentModelIndex.data": ('int',), + "QPersistentModelIndex.flags": (), + "QPersistentModelIndex.internalId": (), + "QPersistentModelIndex.internalPointer": (), + "QPersistentModelIndex.isValid": (), + "QPersistentModelIndex.model": (), + "QPersistentModelIndex.parent": (), + "QPersistentModelIndex.row": (), + "QPersistentModelIndex.sibling": ('int', 'int'), + "QPersistentModelIndex.swap": ('PySide2.QtCore.QPersistentModelIndex',), + + # class PySide2.QtCore.QPluginLoader: + "QPluginLoader.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QPluginLoader.errorString": (), + "QPluginLoader.fileName": (), + "QPluginLoader.instance": (), + "QPluginLoader.isLoaded": (), + "QPluginLoader.load": (), + "QPluginLoader.metaData": (), + "QPluginLoader.setFileName": ('str',), + "QPluginLoader.staticInstances": (), + "QPluginLoader.unload": (), + + # class PySide2.QtCore.QPoint: + "QPoint.__init__": [(), ('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPoint.__copy__": (), + "QPoint.__reduce__": (), + "QPoint.dotProduct": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QPoint.isNull": (), + "QPoint.manhattanLength": (), + "QPoint.setX": ('int',), + "QPoint.setY": ('int',), + "QPoint.toTuple": (), + "QPoint.x": (), + "QPoint.y": (), + + # class PySide2.QtCore.QPointF: + "QPointF.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPointF.__copy__": (), + "QPointF.__reduce__": (), + "QPointF.dotProduct": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QPointF.isNull": (), + "QPointF.manhattanLength": (), + "QPointF.setX": ('float',), + "QPointF.setY": ('float',), + "QPointF.toPoint": (), + "QPointF.toTuple": (), + "QPointF.x": (), + "QPointF.y": (), + + # class PySide2.QtCore.QProcess: + "QProcess.__init__": ('PySide2.QtCore.QObject',), + "QProcess.arguments": (), + "QProcess.atEnd": (), + "QProcess.bytesAvailable": (), + "QProcess.bytesToWrite": (), + "QProcess.canReadLine": (), + "QProcess.close": (), + "QProcess.closeReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.closeWriteChannel": (), + "QProcess.environment": (), + "QProcess.execute": [('str',), ('str', 'PySide2.support.signature.typing.List')], + "QProcess.exitCode": (), + "QProcess.exitStatus": (), + "QProcess.inputChannelMode": (), + "QProcess.isSequential": (), + "QProcess.kill": (), + "QProcess.nullDevice": (), + "QProcess.open": ('OpenMode',), + "QProcess.pid": (), + "QProcess.processChannelMode": (), + "QProcess.processEnvironment": (), + "QProcess.processId": (), + "QProcess.program": (), + "QProcess.readAllStandardError": (), + "QProcess.readAllStandardOutput": (), + "QProcess.readChannel": (), + "QProcess.readData": ('str', 'int'), + "QProcess.setArguments": ('PySide2.support.signature.typing.List',), + "QProcess.setEnvironment": ('PySide2.support.signature.typing.List',), + "QProcess.setInputChannelMode": ('PySide2.QtCore.QProcess.InputChannelMode',), + "QProcess.setProcessChannelMode": ('PySide2.QtCore.QProcess.ProcessChannelMode',), + "QProcess.setProcessEnvironment": ('PySide2.QtCore.QProcessEnvironment',), + "QProcess.setProcessState": ('PySide2.QtCore.QProcess.ProcessState',), + "QProcess.setProgram": ('str',), + "QProcess.setReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.setStandardErrorFile": ('str', 'OpenMode'), + "QProcess.setStandardInputFile": ('str',), + "QProcess.setStandardOutputFile": ('str', 'OpenMode'), + "QProcess.setStandardOutputProcess": ('PySide2.QtCore.QProcess',), + "QProcess.setWorkingDirectory": ('str',), + "QProcess.setupChildProcess": (), + "QProcess.start": [('OpenMode',), ('str', 'OpenMode'), ('str', 'PySide2.support.signature.typing.List', 'OpenMode')], + "QProcess.startDetached": [('str',), ('str', 'PySide2.support.signature.typing.List', 'str', 'int')], + "QProcess.state": (), + "QProcess.systemEnvironment": (), + "QProcess.terminate": (), + "QProcess.waitForBytesWritten": ('int',), + "QProcess.waitForFinished": ('int',), + "QProcess.waitForReadyRead": ('int',), + "QProcess.waitForStarted": ('int',), + "QProcess.workingDirectory": (), + "QProcess.writeData": ('str', 'int'), + + # class PySide2.QtCore.QProcessEnvironment: + "QProcessEnvironment.__init__": [(), ('PySide2.QtCore.QProcessEnvironment',)], + "QProcessEnvironment.__copy__": (), + "QProcessEnvironment.clear": (), + "QProcessEnvironment.contains": ('str',), + "QProcessEnvironment.insert": [('PySide2.QtCore.QProcessEnvironment',), ('str', 'str')], + "QProcessEnvironment.isEmpty": (), + "QProcessEnvironment.keys": (), + "QProcessEnvironment.remove": ('str',), + "QProcessEnvironment.swap": ('PySide2.QtCore.QProcessEnvironment',), + "QProcessEnvironment.systemEnvironment": (), + "QProcessEnvironment.toStringList": (), + "QProcessEnvironment.value": ('str', 'str'), + + # class PySide2.QtCore.QPropertyAnimation: + "QPropertyAnimation.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QPropertyAnimation.event": ('PySide2.QtCore.QEvent',), + "QPropertyAnimation.propertyName": (), + "QPropertyAnimation.setPropertyName": ('PySide2.QtCore.QByteArray',), + "QPropertyAnimation.setTargetObject": ('PySide2.QtCore.QObject',), + "QPropertyAnimation.targetObject": (), + "QPropertyAnimation.updateCurrentValue": ('PySide2.support.signature.typing.Any',), + "QPropertyAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QReadLocker: + "QReadLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QReadLocker.__enter__": (), + "QReadLocker.__exit__": ('object', 'object', 'object'), + "QReadLocker.readWriteLock": (), + "QReadLocker.relock": (), + "QReadLocker.unlock": (), + + # class PySide2.QtCore.QReadWriteLock: + "QReadWriteLock.__init__": ('PySide2.QtCore.QReadWriteLock.RecursionMode',), + "QReadWriteLock.lockForRead": (), + "QReadWriteLock.lockForWrite": (), + "QReadWriteLock.tryLockForRead": [(), ('int',)], + "QReadWriteLock.tryLockForWrite": [(), ('int',)], + "QReadWriteLock.unlock": (), + + # class PySide2.QtCore.QRect: + "QRect.__init__": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QSize'), ('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRect.__copy__": (), + "QRect.__reduce__": (), + "QRect.adjust": ('int', 'int', 'int', 'int'), + "QRect.adjusted": ('int', 'int', 'int', 'int'), + "QRect.bottom": (), + "QRect.bottomLeft": (), + "QRect.bottomRight": (), + "QRect.center": (), + "QRect.contains": [('PySide2.QtCore.QPoint', 'bool'), ('PySide2.QtCore.QRect', 'bool'), ('int', 'int'), ('int', 'int', 'bool')], + "QRect.getCoords": ('int', 'int', 'int', 'int'), + "QRect.getRect": ('int', 'int', 'int', 'int'), + "QRect.height": (), + "QRect.intersected": ('PySide2.QtCore.QRect',), + "QRect.intersects": ('PySide2.QtCore.QRect',), + "QRect.isEmpty": (), + "QRect.isNull": (), + "QRect.isValid": (), + "QRect.left": (), + "QRect.marginsAdded": ('PySide2.QtCore.QMargins',), + "QRect.marginsRemoved": ('PySide2.QtCore.QMargins',), + "QRect.moveBottom": ('int',), + "QRect.moveBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.moveCenter": ('PySide2.QtCore.QPoint',), + "QRect.moveLeft": ('int',), + "QRect.moveRight": ('int',), + "QRect.moveTo": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.moveTop": ('int',), + "QRect.moveTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveTopRight": ('PySide2.QtCore.QPoint',), + "QRect.normalized": (), + "QRect.right": (), + "QRect.setBottom": ('int',), + "QRect.setBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.setBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.setCoords": ('int', 'int', 'int', 'int'), + "QRect.setHeight": ('int',), + "QRect.setLeft": ('int',), + "QRect.setRect": ('int', 'int', 'int', 'int'), + "QRect.setRight": ('int',), + "QRect.setSize": ('PySide2.QtCore.QSize',), + "QRect.setTop": ('int',), + "QRect.setTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.setTopRight": ('PySide2.QtCore.QPoint',), + "QRect.setWidth": ('int',), + "QRect.setX": ('int',), + "QRect.setY": ('int',), + "QRect.size": (), + "QRect.top": (), + "QRect.topLeft": (), + "QRect.topRight": (), + "QRect.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.united": ('PySide2.QtCore.QRect',), + "QRect.width": (), + "QRect.x": (), + "QRect.y": (), + + # class PySide2.QtCore.QRectF: + "QRectF.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QSizeF'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QRectF.__copy__": (), + "QRectF.__reduce__": (), + "QRectF.adjust": ('float', 'float', 'float', 'float'), + "QRectF.adjusted": ('float', 'float', 'float', 'float'), + "QRectF.bottom": (), + "QRectF.bottomLeft": (), + "QRectF.bottomRight": (), + "QRectF.center": (), + "QRectF.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('float', 'float')], + "QRectF.getCoords": ('float', 'float', 'float', 'float'), + "QRectF.getRect": ('float', 'float', 'float', 'float'), + "QRectF.height": (), + "QRectF.intersected": ('PySide2.QtCore.QRectF',), + "QRectF.intersects": ('PySide2.QtCore.QRectF',), + "QRectF.isEmpty": (), + "QRectF.isNull": (), + "QRectF.isValid": (), + "QRectF.left": (), + "QRectF.marginsAdded": ('PySide2.QtCore.QMarginsF',), + "QRectF.marginsRemoved": ('PySide2.QtCore.QMarginsF',), + "QRectF.moveBottom": ('float',), + "QRectF.moveBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.moveCenter": ('PySide2.QtCore.QPointF',), + "QRectF.moveLeft": ('float',), + "QRectF.moveRight": ('float',), + "QRectF.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.moveTop": ('float',), + "QRectF.moveTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.normalized": (), + "QRectF.right": (), + "QRectF.setBottom": ('float',), + "QRectF.setBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.setCoords": ('float', 'float', 'float', 'float'), + "QRectF.setHeight": ('float',), + "QRectF.setLeft": ('float',), + "QRectF.setRect": ('float', 'float', 'float', 'float'), + "QRectF.setRight": ('float',), + "QRectF.setSize": ('PySide2.QtCore.QSizeF',), + "QRectF.setTop": ('float',), + "QRectF.setTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.setWidth": ('float',), + "QRectF.setX": ('float',), + "QRectF.setY": ('float',), + "QRectF.size": (), + "QRectF.toAlignedRect": (), + "QRectF.toRect": (), + "QRectF.top": (), + "QRectF.topLeft": (), + "QRectF.topRight": (), + "QRectF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.united": ('PySide2.QtCore.QRectF',), + "QRectF.width": (), + "QRectF.x": (), + "QRectF.y": (), + + # class PySide2.QtCore.QRegExp: + "QRegExp.__init__": [(), ('PySide2.QtCore.QRegExp',), ('str', 'PySide2.QtCore.Qt.CaseSensitivity', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QRegExp.__copy__": (), + "QRegExp.__reduce__": (), + "QRegExp.cap": ['int'], + "QRegExp.captureCount": (), + "QRegExp.capturedTexts": [], + "QRegExp.caseSensitivity": (), + "QRegExp.errorString": [], + "QRegExp.escape": ('str',), + "QRegExp.exactMatch": ('str',), + "QRegExp.indexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.isEmpty": (), + "QRegExp.isMinimal": (), + "QRegExp.isValid": (), + "QRegExp.lastIndexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.matchedLength": (), + "QRegExp.pattern": (), + "QRegExp.patternSyntax": (), + "QRegExp.pos": ['int'], + "QRegExp.replace": ('str', 'str'), + "QRegExp.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QRegExp.setMinimal": ('bool',), + "QRegExp.setPattern": ('str',), + "QRegExp.setPatternSyntax": ('PySide2.QtCore.QRegExp.PatternSyntax',), + "QRegExp.swap": ('PySide2.QtCore.QRegExp',), + + # class PySide2.QtCore.QResource: + "QResource.__init__": ('str', 'PySide2.QtCore.QLocale'), + "QResource.absoluteFilePath": (), + "QResource.addSearchPath": ('str',), + "QResource.children": (), + "QResource.data": (), + "QResource.fileName": (), + "QResource.isCompressed": (), + "QResource.isDir": (), + "QResource.isFile": (), + "QResource.isValid": (), + "QResource.locale": (), + "QResource.registerResource": ('str', 'str'), + "QResource.registerResourceData": ('PySide2.support.signature.typing.Union[str, int]', 'str'), + "QResource.searchPaths": (), + "QResource.setFileName": ('str',), + "QResource.setLocale": ('PySide2.QtCore.QLocale',), + "QResource.size": (), + "QResource.unregisterResource": ('str', 'str'), + "QResource.unregisterResourceData": ('PySide2.support.signature.typing.Union[str, int]', 'str'), + + # class PySide2.QtCore.QRunnable: + "QRunnable.__init__": (), + "QRunnable.autoDelete": (), + "QRunnable.run": (), + "QRunnable.setAutoDelete": ('bool',), + + # class PySide2.QtCore.QSaveFile: + "QSaveFile.__init__": [('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QSaveFile.cancelWriting": (), + "QSaveFile.close": (), + "QSaveFile.commit": (), + "QSaveFile.directWriteFallback": (), + "QSaveFile.fileName": (), + "QSaveFile.open": ('OpenMode',), + "QSaveFile.setDirectWriteFallback": ('bool',), + "QSaveFile.setFileName": ('str',), + "QSaveFile.writeData": ('str', 'int'), + + # class PySide2.QtCore.QSemaphore: + "QSemaphore.__init__": ('int',), + "QSemaphore.acquire": ('int',), + "QSemaphore.available": (), + "QSemaphore.release": ('int',), + "QSemaphore.tryAcquire": [('int',), ('int', 'int')], + + # class PySide2.QtCore.QSequentialAnimationGroup: + "QSequentialAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QSequentialAnimationGroup.addPause": ('int',), + "QSequentialAnimationGroup.currentAnimation": (), + "QSequentialAnimationGroup.duration": (), + "QSequentialAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QSequentialAnimationGroup.insertPause": ('int', 'int'), + "QSequentialAnimationGroup.updateCurrentTime": ('int',), + "QSequentialAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QSequentialAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QSettings: + "QSettings.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QObject'), ('str', 'str', 'PySide2.QtCore.QObject')], + "QSettings.allKeys": (), + "QSettings.applicationName": (), + "QSettings.beginGroup": ('str',), + "QSettings.beginReadArray": ('str',), + "QSettings.beginWriteArray": ('str', 'int'), + "QSettings.childGroups": (), + "QSettings.childKeys": (), + "QSettings.clear": (), + "QSettings.contains": ('str',), + "QSettings.defaultFormat": (), + "QSettings.endArray": (), + "QSettings.endGroup": (), + "QSettings.event": ('PySide2.QtCore.QEvent',), + "QSettings.fallbacksEnabled": (), + "QSettings.fileName": (), + "QSettings.format": (), + "QSettings.group": (), + "QSettings.iniCodec": (), + "QSettings.isWritable": (), + "QSettings.organizationName": (), + "QSettings.remove": ('str',), + "QSettings.scope": (), + "QSettings.setArrayIndex": ('int',), + "QSettings.setDefaultFormat": ('PySide2.QtCore.QSettings.Format',), + "QSettings.setFallbacksEnabled": ('bool',), + "QSettings.setIniCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QSettings.setPath": ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str'), + "QSettings.setValue": ('str', 'PySide2.support.signature.typing.Any'), + "QSettings.status": (), + "QSettings.sync": (), + "QSettings.value": ('str', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtCore.QSignalMapper: + "QSignalMapper.__init__": ('PySide2.QtCore.QObject',), + "QSignalMapper.map": [(), ('PySide2.QtCore.QObject',)], + "QSignalMapper.mapping": [('PySide2.QtCore.QObject',), ('int',), ('str',)], + "QSignalMapper.removeMappings": ('PySide2.QtCore.QObject',), + "QSignalMapper.setMapping": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + + # class PySide2.QtCore.QSignalTransition: + "QSignalTransition.__init__": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',), ('object', 'PySide2.QtCore.QState')], + "QSignalTransition.event": ('PySide2.QtCore.QEvent',), + "QSignalTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QSignalTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QSignalTransition.senderObject": (), + "QSignalTransition.setSenderObject": ('PySide2.QtCore.QObject',), + "QSignalTransition.setSignal": ('PySide2.QtCore.QByteArray',), + "QSignalTransition.signal": (), + + # class PySide2.QtCore.QSize: + "QSize.__init__": [(), ('PySide2.QtCore.QSize',), ('int', 'int')], + "QSize.__copy__": (), + "QSize.__reduce__": (), + "QSize.boundedTo": ('PySide2.QtCore.QSize',), + "QSize.expandedTo": ('PySide2.QtCore.QSize',), + "QSize.height": (), + "QSize.isEmpty": (), + "QSize.isNull": (), + "QSize.isValid": (), + "QSize.scale": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.setHeight": ('int',), + "QSize.setWidth": ('int',), + "QSize.toTuple": (), + "QSize.transpose": (), + "QSize.transposed": (), + "QSize.width": (), + + # class PySide2.QtCore.QSizeF: + "QSizeF.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QSizeF.__copy__": (), + "QSizeF.__reduce__": (), + "QSizeF.boundedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.expandedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.height": (), + "QSizeF.isEmpty": (), + "QSizeF.isNull": (), + "QSizeF.isValid": (), + "QSizeF.scale": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.scaled": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.setHeight": ('float',), + "QSizeF.setWidth": ('float',), + "QSizeF.toSize": (), + "QSizeF.toTuple": (), + "QSizeF.transpose": (), + "QSizeF.transposed": (), + "QSizeF.width": (), + + # class PySide2.QtCore.QSocketNotifier: + "QSocketNotifier.__init__": [('int', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject'), ('object', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject')], + "QSocketNotifier.event": ('PySide2.QtCore.QEvent',), + "QSocketNotifier.isEnabled": (), + "QSocketNotifier.setEnabled": ('bool',), + "QSocketNotifier.socket": (), + "QSocketNotifier.type": (), + + # class PySide2.QtCore.QSortFilterProxyModel: + "QSortFilterProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QSortFilterProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSortFilterProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.dynamicSortFilter": (), + "QSortFilterProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.filterAcceptsColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterAcceptsRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterCaseSensitivity": (), + "QSortFilterProxyModel.filterKeyColumn": (), + "QSortFilterProxyModel.filterRegExp": (), + "QSortFilterProxyModel.filterRole": (), + "QSortFilterProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSortFilterProxyModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.invalidate": (), + "QSortFilterProxyModel.invalidateFilter": (), + "QSortFilterProxyModel.isSortLocaleAware": (), + "QSortFilterProxyModel.lessThan": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.support.signature.typing.Any', 'int', 'MatchFlags'), + "QSortFilterProxyModel.mimeData": ('PySide2.support.signature.typing.List',), + "QSortFilterProxyModel.mimeTypes": (), + "QSortFilterProxyModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QSortFilterProxyModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QSortFilterProxyModel.setDynamicSortFilter": ('bool',), + "QSortFilterProxyModel.setFilterCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setFilterFixedString": ('str',), + "QSortFilterProxyModel.setFilterKeyColumn": ('int',), + "QSortFilterProxyModel.setFilterRegExp": [('PySide2.QtCore.QRegExp',), ('str',)], + "QSortFilterProxyModel.setFilterRole": ('int',), + "QSortFilterProxyModel.setFilterWildcard": ('str',), + "QSortFilterProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QSortFilterProxyModel.setSortCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setSortLocaleAware": ('bool',), + "QSortFilterProxyModel.setSortRole": ('int',), + "QSortFilterProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QSortFilterProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSortFilterProxyModel.sortCaseSensitivity": (), + "QSortFilterProxyModel.sortColumn": (), + "QSortFilterProxyModel.sortOrder": (), + "QSortFilterProxyModel.sortRole": (), + "QSortFilterProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QStandardPaths: + "QStandardPaths.writableLocation": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.displayName": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.enableTestMode": ('bool',), + "QStandardPaths.findExecutable": ('str', 'PySide2.support.signature.typing.List'), + "QStandardPaths.isTestModeEnabled": (), + "QStandardPaths.locate": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'LocateOptions'), + "QStandardPaths.locateAll": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'LocateOptions'), + "QStandardPaths.setTestModeEnabled": ('bool',), + "QStandardPaths.standardLocations": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + + # class PySide2.QtCore.QState: + "QState.__init__": [('PySide2.QtCore.QState',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QState')], + "QState.addTransition": [('PySide2.QtCore.QAbstractState',), ('PySide2.QtCore.QAbstractTransition',), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QAbstractState'), ('object', 'PySide2.QtCore.QAbstractState')], + "QState.assignProperty": ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Any'), + "QState.childMode": (), + "QState.errorState": (), + "QState.event": ('PySide2.QtCore.QEvent',), + "QState.initialState": (), + "QState.onEntry": ('PySide2.QtCore.QEvent',), + "QState.onExit": ('PySide2.QtCore.QEvent',), + "QState.removeTransition": ('PySide2.QtCore.QAbstractTransition',), + "QState.setChildMode": ('PySide2.QtCore.QState.ChildMode',), + "QState.setErrorState": ('PySide2.QtCore.QAbstractState',), + "QState.setInitialState": ('PySide2.QtCore.QAbstractState',), + "QState.transitions": (), + + # class PySide2.QtCore.QStateMachine: + "QStateMachine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QObject')], + "QStateMachine.addDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.addState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.beginMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.beginSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.cancelDelayedEvent": ('int',), + "QStateMachine.clearError": (), + "QStateMachine.configuration": [], + "QStateMachine.defaultAnimations": (), + "QStateMachine.endMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.endSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.error": (), + "QStateMachine.errorString": (), + "QStateMachine.event": ('PySide2.QtCore.QEvent',), + "QStateMachine.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStateMachine.globalRestorePolicy": (), + "QStateMachine.isAnimated": (), + "QStateMachine.isRunning": (), + "QStateMachine.onEntry": ('PySide2.QtCore.QEvent',), + "QStateMachine.onExit": ('PySide2.QtCore.QEvent',), + "QStateMachine.postDelayedEvent": ('PySide2.QtCore.QEvent', 'int'), + "QStateMachine.postEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QStateMachine.EventPriority'), + "QStateMachine.removeDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.removeState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.setAnimated": ('bool',), + "QStateMachine.setGlobalRestorePolicy": ('PySide2.QtCore.QState.RestorePolicy',), + "QStateMachine.setRunning": ('bool',), + "QStateMachine.start": (), + "QStateMachine.stop": (), + + # class PySide2.QtCore.QStorageInfo: + "QStorageInfo.__init__": [(), ('PySide2.QtCore.QDir',), ('PySide2.QtCore.QStorageInfo',), ('str',)], + "QStorageInfo.__copy__": (), + "QStorageInfo.blockSize": (), + "QStorageInfo.bytesAvailable": (), + "QStorageInfo.bytesFree": (), + "QStorageInfo.bytesTotal": (), + "QStorageInfo.device": (), + "QStorageInfo.displayName": (), + "QStorageInfo.fileSystemType": (), + "QStorageInfo.isReadOnly": (), + "QStorageInfo.isReady": (), + "QStorageInfo.isRoot": (), + "QStorageInfo.isValid": (), + "QStorageInfo.mountedVolumes": (), + "QStorageInfo.name": (), + "QStorageInfo.refresh": (), + "QStorageInfo.root": (), + "QStorageInfo.rootPath": (), + "QStorageInfo.setPath": ('str',), + "QStorageInfo.swap": ('PySide2.QtCore.QStorageInfo',), + + # class PySide2.QtCore.QSysInfo: + "QSysInfo.__init__": (), + "QSysInfo.buildAbi": (), + "QSysInfo.buildCpuArchitecture": (), + "QSysInfo.currentCpuArchitecture": (), + "QSysInfo.kernelType": (), + "QSysInfo.kernelVersion": (), + "QSysInfo.machineHostName": (), + "QSysInfo.prettyProductName": (), + "QSysInfo.productType": (), + "QSysInfo.productVersion": (), + + # class PySide2.QtCore.QSystemSemaphore: + "QSystemSemaphore.__init__": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + "QSystemSemaphore.acquire": (), + "QSystemSemaphore.error": (), + "QSystemSemaphore.errorString": (), + "QSystemSemaphore.key": (), + "QSystemSemaphore.release": ('int',), + "QSystemSemaphore.setKey": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + + # class PySide2.QtCore.QTemporaryDir: + "QTemporaryDir.__init__": [(), ('str',)], + "QTemporaryDir.autoRemove": (), + "QTemporaryDir.errorString": (), + "QTemporaryDir.isValid": (), + "QTemporaryDir.path": (), + "QTemporaryDir.remove": (), + "QTemporaryDir.setAutoRemove": ('bool',), + + # class PySide2.QtCore.QTemporaryFile: + "QTemporaryFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QTemporaryFile.autoRemove": (), + "QTemporaryFile.createLocalFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.createNativeFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.fileName": (), + "QTemporaryFile.fileTemplate": (), + "QTemporaryFile.open": [(), ('OpenMode',)], + "QTemporaryFile.setAutoRemove": ('bool',), + "QTemporaryFile.setFileTemplate": ('str',), + + # class PySide2.QtCore.QTextBoundaryFinder: + "QTextBoundaryFinder.__init__": [(), ('PySide2.QtCore.QTextBoundaryFinder',), ('PySide2.QtCore.QTextBoundaryFinder.BoundaryType', 'str')], + "QTextBoundaryFinder.__copy__": (), + "QTextBoundaryFinder.boundaryReasons": (), + "QTextBoundaryFinder.isAtBoundary": (), + "QTextBoundaryFinder.isValid": (), + "QTextBoundaryFinder.position": (), + "QTextBoundaryFinder.setPosition": ('int',), + "QTextBoundaryFinder.string": (), + "QTextBoundaryFinder.toEnd": (), + "QTextBoundaryFinder.toNextBoundary": (), + "QTextBoundaryFinder.toPreviousBoundary": (), + "QTextBoundaryFinder.toStart": (), + "QTextBoundaryFinder.type": (), + + # class PySide2.QtCore.QTextCodec: + "QTextCodec.__init__": (), + "QTextCodec.aliases": (), + "QTextCodec.availableCodecs": (), + "QTextCodec.availableMibs": (), + "QTextCodec.canEncode": [('PySide2.support.signature.typing.Union[str, int]',), ('str',)], + "QTextCodec.codecForHtml": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.codecForLocale": (), + "QTextCodec.codecForMib": ('int',), + "QTextCodec.codecForName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QTextCodec.codecForUtfText": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.convertToUnicode": ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState'), + "QTextCodec.fromUnicode": ('str',), + "QTextCodec.makeDecoder": ('ConversionFlags',), + "QTextCodec.makeEncoder": ('ConversionFlags',), + "QTextCodec.mibEnum": (), + "QTextCodec.name": (), + "QTextCodec.setCodecForLocale": ('PySide2.QtCore.QTextCodec',), + "QTextCodec.toUnicode": [('PySide2.QtCore.QByteArray',), ('str',), ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState')], + + # class PySide2.QtCore.QTextDecoder: + "QTextDecoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'ConversionFlags')], + "QTextDecoder.hasFailure": (), + "QTextDecoder.toUnicode": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QTextEncoder: + "QTextEncoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'ConversionFlags')], + "QTextEncoder.fromUnicode": ('str',), + "QTextEncoder.hasFailure": (), + + # class PySide2.QtCore.QTextStream: + "QTextStream.__init__": [(), ('PySide2.QtCore.QByteArray', 'OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QTextStream.atEnd": (), + "QTextStream.autoDetectUnicode": (), + "QTextStream.codec": (), + "QTextStream.device": (), + "QTextStream.fieldAlignment": (), + "QTextStream.fieldWidth": (), + "QTextStream.flush": (), + "QTextStream.generateByteOrderMark": (), + "QTextStream.integerBase": (), + "QTextStream.locale": (), + "QTextStream.numberFlags": (), + "QTextStream.padChar": (), + "QTextStream.pos": (), + "QTextStream.read": ('int',), + "QTextStream.readAll": (), + "QTextStream.readLine": ('int',), + "QTextStream.realNumberNotation": (), + "QTextStream.realNumberPrecision": (), + "QTextStream.reset": (), + "QTextStream.resetStatus": (), + "QTextStream.seek": ('int',), + "QTextStream.setAutoDetectUnicode": ('bool',), + "QTextStream.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QTextStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextStream.setFieldAlignment": ('PySide2.QtCore.QTextStream.FieldAlignment',), + "QTextStream.setFieldWidth": ('int',), + "QTextStream.setGenerateByteOrderMark": ('bool',), + "QTextStream.setIntegerBase": ('int',), + "QTextStream.setLocale": ('PySide2.QtCore.QLocale',), + "QTextStream.setNumberFlags": ('NumberFlags',), + "QTextStream.setPadChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QTextStream.setRealNumberNotation": ('PySide2.QtCore.QTextStream.RealNumberNotation',), + "QTextStream.setRealNumberPrecision": ('int',), + "QTextStream.setStatus": ('PySide2.QtCore.QTextStream.Status',), + "QTextStream.skipWhiteSpace": (), + "QTextStream.status": (), + "QTextStream.string": (), + + # class PySide2.QtCore.QTextStreamManipulator: + "QTextStreamManipulator.exec_": ('PySide2.QtCore.QTextStream',), + "QTextStreamManipulator.__copy__": (), + + # class PySide2.QtCore.QThread: + "QThread.__init__": ('PySide2.QtCore.QObject',), + "QThread.currentThread": (), + "QThread.event": ('PySide2.QtCore.QEvent',), + "QThread.eventDispatcher": (), + "QThread.exec_": (), + "QThread.exit": ('int',), + "QThread.idealThreadCount": (), + "QThread.isFinished": (), + "QThread.isInterruptionRequested": (), + "QThread.isRunning": (), + "QThread.loopLevel": (), + "QThread.msleep": ('int',), + "QThread.priority": (), + "QThread.quit": (), + "QThread.requestInterruption": (), + "QThread.run": (), + "QThread.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QThread.setPriority": ('PySide2.QtCore.QThread.Priority',), + "QThread.setStackSize": ('int',), + "QThread.setTerminationEnabled": ('bool',), + "QThread.sleep": ('int',), + "QThread.stackSize": (), + "QThread.start": ('PySide2.QtCore.QThread.Priority',), + "QThread.terminate": (), + "QThread.usleep": ('int',), + "QThread.wait": ('int',), + "QThread.yieldCurrentThread": (), + + # class PySide2.QtCore.QThreadPool: + "QThreadPool.__init__": ('PySide2.QtCore.QObject',), + "QThreadPool.activeThreadCount": (), + "QThreadPool.cancel": ('PySide2.QtCore.QRunnable',), + "QThreadPool.clear": (), + "QThreadPool.expiryTimeout": (), + "QThreadPool.globalInstance": (), + "QThreadPool.maxThreadCount": (), + "QThreadPool.releaseThread": (), + "QThreadPool.reserveThread": (), + "QThreadPool.setExpiryTimeout": ('int',), + "QThreadPool.setMaxThreadCount": ('int',), + "QThreadPool.start": ('PySide2.QtCore.QRunnable', 'int'), + "QThreadPool.tryStart": ('PySide2.QtCore.QRunnable',), + "QThreadPool.waitForDone": ('int',), + + # class PySide2.QtCore.QTime: + "QTime.__init__": [(), ('PySide2.QtCore.QTime',), ('int', 'int', 'int', 'int')], + "QTime.__copy__": (), + "QTime.__reduce__": (), + "QTime.addMSecs": ('int',), + "QTime.addSecs": ('int',), + "QTime.currentTime": (), + "QTime.elapsed": (), + "QTime.fromMSecsSinceStartOfDay": ('int',), + "QTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QTime.hour": (), + "QTime.isNull": (), + "QTime.isValid": [(), ('int', 'int', 'int', 'int')], + "QTime.minute": (), + "QTime.msec": (), + "QTime.msecsSinceStartOfDay": (), + "QTime.msecsTo": ('PySide2.QtCore.QTime',), + "QTime.restart": (), + "QTime.second": (), + "QTime.secsTo": ('PySide2.QtCore.QTime',), + "QTime.setHMS": ('int', 'int', 'int', 'int'), + "QTime.start": (), + "QTime.toPython": (), + "QTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + + # class PySide2.QtCore.QTimeLine: + "QTimeLine.__init__": ('int', 'PySide2.QtCore.QObject'), + "QTimeLine.currentFrame": (), + "QTimeLine.currentTime": (), + "QTimeLine.currentValue": (), + "QTimeLine.curveShape": (), + "QTimeLine.direction": (), + "QTimeLine.duration": (), + "QTimeLine.easingCurve": (), + "QTimeLine.endFrame": (), + "QTimeLine.frameForTime": ('int',), + "QTimeLine.loopCount": (), + "QTimeLine.resume": (), + "QTimeLine.setCurrentTime": ('int',), + "QTimeLine.setCurveShape": ('PySide2.QtCore.QTimeLine.CurveShape',), + "QTimeLine.setDirection": ('PySide2.QtCore.QTimeLine.Direction',), + "QTimeLine.setDuration": ('int',), + "QTimeLine.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QTimeLine.setEndFrame": ('int',), + "QTimeLine.setFrameRange": ('int', 'int'), + "QTimeLine.setLoopCount": ('int',), + "QTimeLine.setPaused": ('bool',), + "QTimeLine.setStartFrame": ('int',), + "QTimeLine.setUpdateInterval": ('int',), + "QTimeLine.start": (), + "QTimeLine.startFrame": (), + "QTimeLine.state": (), + "QTimeLine.stop": (), + "QTimeLine.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimeLine.toggleDirection": (), + "QTimeLine.updateInterval": (), + "QTimeLine.valueForTime": ('int',), + + # class PySide2.QtCore.QTimeZone: + "QTimeZone.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'int', 'str', 'str', 'PySide2.QtCore.QLocale.Country', 'str'), ('PySide2.QtCore.QTimeZone',), ('int',)], + "QTimeZone.__copy__": (), + "QTimeZone.abbreviation": ('PySide2.QtCore.QDateTime',), + "QTimeZone.availableTimeZoneIds": [(), ('PySide2.QtCore.QLocale.Country',), ('int',)], + "QTimeZone.comment": (), + "QTimeZone.country": (), + "QTimeZone.daylightTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.displayName": [('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale'), ('PySide2.QtCore.QTimeZone.TimeType', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale')], + "QTimeZone.hasDaylightTime": (), + "QTimeZone.hasTransitions": (), + "QTimeZone.ianaIdToWindowsId": ('PySide2.QtCore.QByteArray',), + "QTimeZone.id": (), + "QTimeZone.isDaylightTime": ('PySide2.QtCore.QDateTime',), + "QTimeZone.isTimeZoneIdAvailable": ('PySide2.QtCore.QByteArray',), + "QTimeZone.isValid": (), + "QTimeZone.nextTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetData": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetFromUtc": ('PySide2.QtCore.QDateTime',), + "QTimeZone.previousTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.standardTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.swap": ('PySide2.QtCore.QTimeZone',), + "QTimeZone.systemTimeZone": (), + "QTimeZone.systemTimeZoneId": (), + "QTimeZone.transitions": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QTimeZone.utc": (), + "QTimeZone.windowsIdToDefaultIanaId": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + "QTimeZone.windowsIdToIanaIds": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + + # class PySide2.QtCore.QTimer: + "QTimer.__init__": ('PySide2.QtCore.QObject',), + "QTimer.interval": (), + "QTimer.isActive": (), + "QTimer.isSingleShot": (), + "QTimer.killTimer": ('int',), + "QTimer.remainingTime": (), + "QTimer.setInterval": ('int',), + "QTimer.setSingleShot": ('bool',), + "QTimer.setTimerType": ('PySide2.QtCore.Qt.TimerType',), + "QTimer.singleShot": [('int', 'PySide2.QtCore.QObject', 'str'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject', 'str'), ('int', 'PySide2.support.signature.typing.Callable')], + "QTimer.start": [(), ('int',)], + "QTimer.stop": (), + "QTimer.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimer.timerId": (), + "QTimer.timerType": (), + + # class PySide2.QtCore.QTimerEvent: + "QTimerEvent.__init__": ('int',), + "QTimerEvent.timerId": (), + + # class PySide2.QtCore.QTranslator: + "QTranslator.__init__": ('PySide2.QtCore.QObject',), + "QTranslator.isEmpty": (), + "QTranslator.load": [('PySide2.QtCore.QLocale', 'str', 'str', 'str', 'str'), ('PySide2.support.signature.typing.Union[str, int]', 'int', 'str'), ('str', 'str', 'str', 'str')], + "QTranslator.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QUrl: + "QUrl.__init__": [(), ('PySide2.QtCore.QUrl',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.__copy__": (), + "QUrl.__reduce__": (), + "QUrl.adjusted": ('FormattingOptions',), + "QUrl.authority": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.clear": (), + "QUrl.errorString": (), + "QUrl.fileName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fragment": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fromAce": ('PySide2.QtCore.QByteArray',), + "QUrl.fromEncoded": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromLocalFile": ('str',), + "QUrl.fromPercentEncoding": ('PySide2.QtCore.QByteArray',), + "QUrl.fromStringList": ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromUserInput": [('str',), ('str', 'str', 'UserInputResolutionOptions')], + "QUrl.hasFragment": (), + "QUrl.hasQuery": (), + "QUrl.host": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.idnWhitelist": (), + "QUrl.isEmpty": (), + "QUrl.isLocalFile": (), + "QUrl.isParentOf": ('PySide2.QtCore.QUrl',), + "QUrl.isRelative": (), + "QUrl.isValid": (), + "QUrl.matches": ('PySide2.QtCore.QUrl', 'FormattingOptions'), + "QUrl.password": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.path": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.port": ('int',), + "QUrl.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.resolved": ('PySide2.QtCore.QUrl',), + "QUrl.scheme": (), + "QUrl.setAuthority": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setFragment": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setHost": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setIdnWhitelist": ('PySide2.support.signature.typing.List',), + "QUrl.setPassword": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPath": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPort": ('int',), + "QUrl.setQuery": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setScheme": ('str',), + "QUrl.setUrl": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserInfo": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserName": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.swap": ('PySide2.QtCore.QUrl',), + "QUrl.toAce": ('str',), + "QUrl.toDisplayString": ('FormattingOptions',), + "QUrl.toEncoded": ('FormattingOptions',), + "QUrl.toLocalFile": (), + "QUrl.toPercentEncoding": ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QUrl.toString": ('FormattingOptions',), + "QUrl.toStringList": ('list', 'FormattingOptions'), + "QUrl.topLevelDomain": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.url": ('FormattingOptions',), + "QUrl.userInfo": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.userName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QVariantAnimation: + "QVariantAnimation.__init__": ('PySide2.QtCore.QObject',), + "QVariantAnimation.currentValue": (), + "QVariantAnimation.duration": (), + "QVariantAnimation.easingCurve": (), + "QVariantAnimation.endValue": (), + "QVariantAnimation.event": ('PySide2.QtCore.QEvent',), + "QVariantAnimation.interpolated": ('PySide2.support.signature.typing.Any', 'PySide2.support.signature.typing.Any', 'float'), + "QVariantAnimation.keyValueAt": ('float',), + "QVariantAnimation.keyValues": (), + "QVariantAnimation.setDuration": ('int',), + "QVariantAnimation.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QVariantAnimation.setEndValue": ('PySide2.support.signature.typing.Any',), + "QVariantAnimation.setKeyValueAt": ('float', 'PySide2.support.signature.typing.Any'), + "QVariantAnimation.setKeyValues": ('list',), + "QVariantAnimation.setStartValue": ('PySide2.support.signature.typing.Any',), + "QVariantAnimation.startValue": (), + "QVariantAnimation.updateCurrentTime": ('int',), + "QVariantAnimation.updateCurrentValue": ('PySide2.support.signature.typing.Any',), + "QVariantAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QWaitCondition: + "QWaitCondition.__init__": (), + "QWaitCondition.wait": [('PySide2.QtCore.QMutex', 'int'), ('PySide2.QtCore.QReadWriteLock', 'int')], + "QWaitCondition.wakeAll": (), + "QWaitCondition.wakeOne": (), + + # class PySide2.QtCore.QWriteLocker: + "QWriteLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QWriteLocker.__enter__": (), + "QWriteLocker.__exit__": ('object', 'object', 'object'), + "QWriteLocker.readWriteLock": (), + "QWriteLocker.relock": (), + "QWriteLocker.unlock": (), + + # class PySide2.QtCore.QXmlStreamAttribute: + "QXmlStreamAttribute.__init__": [(), ('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttribute.__copy__": (), + "QXmlStreamAttribute.isDefault": (), + "QXmlStreamAttribute.name": (), + "QXmlStreamAttribute.namespaceUri": (), + "QXmlStreamAttribute.prefix": (), + "QXmlStreamAttribute.qualifiedName": (), + "QXmlStreamAttribute.value": (), + + # class PySide2.QtCore.QXmlStreamAttributes: + "QXmlStreamAttributes.__init__": [(), ('PySide2.QtCore.QXmlStreamAttributes',)], + "QXmlStreamAttributes.__copy__": (), + "QXmlStreamAttributes.append": [('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttributes.at": ('int',), + "QXmlStreamAttributes.capacity": (), + "QXmlStreamAttributes.clear": (), + "QXmlStreamAttributes.constData": (), + "QXmlStreamAttributes.constFirst": (), + "QXmlStreamAttributes.constLast": (), + "QXmlStreamAttributes.contains": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.count": [(), ('PySide2.QtCore.QXmlStreamAttribute',)], + "QXmlStreamAttributes.data": [], + "QXmlStreamAttributes.empty": (), + "QXmlStreamAttributes.endsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.fill": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.first": [], + "QXmlStreamAttributes.front": (), + "QXmlStreamAttributes.hasAttribute": [('str',), ('str', 'str')], + "QXmlStreamAttributes.indexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.insert": [('int', 'PySide2.QtCore.QXmlStreamAttribute'), ('int', 'int', 'PySide2.QtCore.QXmlStreamAttribute')], + "QXmlStreamAttributes.isEmpty": (), + "QXmlStreamAttributes.isSharedWith": ('list',), + "QXmlStreamAttributes.last": [], + "QXmlStreamAttributes.lastIndexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.length": (), + "QXmlStreamAttributes.mid": ('int', 'int'), + "QXmlStreamAttributes.move": ('int', 'int'), + "QXmlStreamAttributes.prepend": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.remove": [('int',), ('int', 'int')], + "QXmlStreamAttributes.removeAll": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.removeAt": ('int',), + "QXmlStreamAttributes.removeFirst": (), + "QXmlStreamAttributes.removeLast": (), + "QXmlStreamAttributes.removeOne": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.replace": ('int', 'PySide2.QtCore.QXmlStreamAttribute'), + "QXmlStreamAttributes.reserve": ('int',), + "QXmlStreamAttributes.resize": ('int',), + "QXmlStreamAttributes.setSharable": ('bool',), + "QXmlStreamAttributes.size": (), + "QXmlStreamAttributes.squeeze": (), + "QXmlStreamAttributes.startsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.swap": ('list',), + "QXmlStreamAttributes.takeAt": ('int',), + "QXmlStreamAttributes.takeFirst": (), + "QXmlStreamAttributes.takeLast": (), + "QXmlStreamAttributes.value": [('str',), ('str', 'str')], + + # class PySide2.QtCore.QXmlStreamEntityDeclaration: + "QXmlStreamEntityDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamEntityDeclaration',)], + "QXmlStreamEntityDeclaration.__copy__": (), + "QXmlStreamEntityDeclaration.name": (), + "QXmlStreamEntityDeclaration.notationName": (), + "QXmlStreamEntityDeclaration.publicId": (), + "QXmlStreamEntityDeclaration.systemId": (), + "QXmlStreamEntityDeclaration.value": (), + + # class PySide2.QtCore.QXmlStreamEntityResolver: + "QXmlStreamEntityResolver.__init__": (), + "QXmlStreamEntityResolver.resolveEntity": ('str', 'str'), + "QXmlStreamEntityResolver.resolveUndeclaredEntity": ('str',), + + # class PySide2.QtCore.QXmlStreamNamespaceDeclaration: + "QXmlStreamNamespaceDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), ('str', 'str')], + "QXmlStreamNamespaceDeclaration.__copy__": (), + "QXmlStreamNamespaceDeclaration.namespaceUri": (), + "QXmlStreamNamespaceDeclaration.prefix": (), + + # class PySide2.QtCore.QXmlStreamNotationDeclaration: + "QXmlStreamNotationDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNotationDeclaration',)], + "QXmlStreamNotationDeclaration.__copy__": (), + "QXmlStreamNotationDeclaration.name": (), + "QXmlStreamNotationDeclaration.publicId": (), + "QXmlStreamNotationDeclaration.systemId": (), + + # class PySide2.QtCore.QXmlStreamReader: + "QXmlStreamReader.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str',)], + "QXmlStreamReader.addData": [('PySide2.QtCore.QByteArray',), ('str',)], + "QXmlStreamReader.addExtraNamespaceDeclaration": ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), + "QXmlStreamReader.addExtraNamespaceDeclarations": ('list',), + "QXmlStreamReader.atEnd": (), + "QXmlStreamReader.attributes": (), + "QXmlStreamReader.characterOffset": (), + "QXmlStreamReader.clear": (), + "QXmlStreamReader.columnNumber": (), + "QXmlStreamReader.device": (), + "QXmlStreamReader.documentEncoding": (), + "QXmlStreamReader.documentVersion": (), + "QXmlStreamReader.dtdName": (), + "QXmlStreamReader.dtdPublicId": (), + "QXmlStreamReader.dtdSystemId": (), + "QXmlStreamReader.entityDeclarations": (), + "QXmlStreamReader.entityResolver": (), + "QXmlStreamReader.error": (), + "QXmlStreamReader.errorString": (), + "QXmlStreamReader.hasError": (), + "QXmlStreamReader.isCDATA": (), + "QXmlStreamReader.isCharacters": (), + "QXmlStreamReader.isComment": (), + "QXmlStreamReader.isDTD": (), + "QXmlStreamReader.isEndDocument": (), + "QXmlStreamReader.isEndElement": (), + "QXmlStreamReader.isEntityReference": (), + "QXmlStreamReader.isProcessingInstruction": (), + "QXmlStreamReader.isStandaloneDocument": (), + "QXmlStreamReader.isStartDocument": (), + "QXmlStreamReader.isStartElement": (), + "QXmlStreamReader.isWhitespace": (), + "QXmlStreamReader.lineNumber": (), + "QXmlStreamReader.name": (), + "QXmlStreamReader.namespaceDeclarations": (), + "QXmlStreamReader.namespaceProcessing": (), + "QXmlStreamReader.namespaceUri": (), + "QXmlStreamReader.notationDeclarations": (), + "QXmlStreamReader.prefix": (), + "QXmlStreamReader.processingInstructionData": (), + "QXmlStreamReader.processingInstructionTarget": (), + "QXmlStreamReader.qualifiedName": (), + "QXmlStreamReader.raiseError": ('str',), + "QXmlStreamReader.readElementText": ('PySide2.QtCore.QXmlStreamReader.ReadElementTextBehaviour',), + "QXmlStreamReader.readNext": (), + "QXmlStreamReader.readNextStartElement": (), + "QXmlStreamReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamReader.setEntityResolver": ('PySide2.QtCore.QXmlStreamEntityResolver',), + "QXmlStreamReader.setNamespaceProcessing": ('bool',), + "QXmlStreamReader.skipCurrentElement": (), + "QXmlStreamReader.text": (), + "QXmlStreamReader.tokenString": (), + "QXmlStreamReader.tokenType": (), + + # class PySide2.QtCore.QXmlStreamWriter: + "QXmlStreamWriter.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QXmlStreamWriter.autoFormatting": (), + "QXmlStreamWriter.autoFormattingIndent": (), + "QXmlStreamWriter.codec": (), + "QXmlStreamWriter.device": (), + "QXmlStreamWriter.hasError": (), + "QXmlStreamWriter.setAutoFormatting": ('bool',), + "QXmlStreamWriter.setAutoFormattingIndent": ('int',), + "QXmlStreamWriter.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QXmlStreamWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamWriter.writeAttribute": [('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamWriter.writeAttributes": ('PySide2.QtCore.QXmlStreamAttributes',), + "QXmlStreamWriter.writeCDATA": ('str',), + "QXmlStreamWriter.writeCharacters": ('str',), + "QXmlStreamWriter.writeComment": ('str',), + "QXmlStreamWriter.writeCurrentToken": ('PySide2.QtCore.QXmlStreamReader',), + "QXmlStreamWriter.writeDTD": ('str',), + "QXmlStreamWriter.writeDefaultNamespace": ('str',), + "QXmlStreamWriter.writeEmptyElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeEndDocument": (), + "QXmlStreamWriter.writeEndElement": (), + "QXmlStreamWriter.writeEntityReference": ('str',), + "QXmlStreamWriter.writeNamespace": ('str', 'str'), + "QXmlStreamWriter.writeProcessingInstruction": ('str', 'str'), + "QXmlStreamWriter.writeStartDocument": [(), ('str',), ('str', 'bool')], + "QXmlStreamWriter.writeStartElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeTextElement": [('str', 'str'), ('str', 'str', 'str')], + + # class PySide2.QtCore.Qt: + "Qt.qt_getEnumName": [('Alignment',), ('DockWidgetAreas',), ('DropActions',), ('Edges',), ('ImageConversionFlags',), ('InputMethodHints',), ('InputMethodQueries',), ('ItemFlags',), ('KeyboardModifiers',), ('MatchFlags',), ('MouseButtons',), ('Orientations',), ('PySide2.QtCore.Qt.ApplicationAttribute',), ('PySide2.QtCore.Qt.ApplicationState',), ('PySide2.QtCore.Qt.ArrowType',), ('PySide2.QtCore.Qt.AspectRatioMode',), ('PySide2.QtCore.Qt.Axis',), ('PySide2.QtCore.Qt.BGMode',), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.CaseSensitivity',), ('PySide2.QtCore.Qt.CheckState',), ('PySide2.QtCore.Qt.ClipOperation',), ('PySide2.QtCore.Qt.ConnectionType',), ('PySide2.QtCore.Qt.ContextMenuPolicy',), ('PySide2.QtCore.Qt.Corner',), ('PySide2.QtCore.Qt.CursorMoveStyle',), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtCore.Qt.DateFormat',), ('PySide2.QtCore.Qt.DayOfWeek',), ('PySide2.QtCore.Qt.DockWidgetArea',), ('PySide2.QtCore.Qt.DropAction',), ('PySide2.QtCore.Qt.Edge',), ('PySide2.QtCore.Qt.EnterKeyType',), ('PySide2.QtCore.Qt.FillRule',), ('PySide2.QtCore.Qt.FocusPolicy',), ('PySide2.QtCore.Qt.FocusReason',), ('PySide2.QtCore.Qt.GestureState',), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtCore.Qt.InputMethodHint',), ('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.ItemDataRole',), ('PySide2.QtCore.Qt.ItemSelectionMode',), ('PySide2.QtCore.Qt.ItemSelectionOperation',), ('PySide2.QtCore.Qt.Key',), ('PySide2.QtCore.Qt.LayoutDirection',), ('PySide2.QtCore.Qt.MaskMode',), ('PySide2.QtCore.Qt.MouseEventFlag',), ('PySide2.QtCore.Qt.MouseEventSource',), ('PySide2.QtCore.Qt.NativeGestureType',), ('PySide2.QtCore.Qt.Orientation',), ('PySide2.QtCore.Qt.PenCapStyle',), ('PySide2.QtCore.Qt.PenJoinStyle',), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtCore.Qt.ScreenOrientation',), ('PySide2.QtCore.Qt.ScrollBarPolicy',), ('PySide2.QtCore.Qt.ScrollPhase',), ('PySide2.QtCore.Qt.ShortcutContext',), ('PySide2.QtCore.Qt.SizeHint',), ('PySide2.QtCore.Qt.SizeMode',), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtCore.Qt.TabFocusBehavior',), ('PySide2.QtCore.Qt.TextElideMode',), ('PySide2.QtCore.Qt.TextFormat',), ('PySide2.QtCore.Qt.TextInteractionFlag',), ('PySide2.QtCore.Qt.TimeSpec',), ('PySide2.QtCore.Qt.TimerType',), ('PySide2.QtCore.Qt.ToolBarArea',), ('PySide2.QtCore.Qt.ToolButtonStyle',), ('PySide2.QtCore.Qt.TransformationMode',), ('PySide2.QtCore.Qt.WidgetAttribute',), ('PySide2.QtCore.Qt.WindowModality',), ('PySide2.QtCore.Qt.WindowState',), ('PySide2.QtCore.Qt.WindowType',), ('ScreenOrientations',), ('TextInteractionFlags',), ('ToolBarAreas',), ('TouchPointStates',), ('WindowFlags',), ('WindowStates',)], + "Qt.qt_getEnumMetaObject": [('Alignment',), ('DockWidgetAreas',), ('DropActions',), ('Edges',), ('ImageConversionFlags',), ('InputMethodHints',), ('InputMethodQueries',), ('ItemFlags',), ('KeyboardModifiers',), ('MatchFlags',), ('MouseButtons',), ('Orientations',), ('PySide2.QtCore.Qt.ApplicationAttribute',), ('PySide2.QtCore.Qt.ApplicationState',), ('PySide2.QtCore.Qt.ArrowType',), ('PySide2.QtCore.Qt.AspectRatioMode',), ('PySide2.QtCore.Qt.Axis',), ('PySide2.QtCore.Qt.BGMode',), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.CaseSensitivity',), ('PySide2.QtCore.Qt.CheckState',), ('PySide2.QtCore.Qt.ClipOperation',), ('PySide2.QtCore.Qt.ConnectionType',), ('PySide2.QtCore.Qt.ContextMenuPolicy',), ('PySide2.QtCore.Qt.Corner',), ('PySide2.QtCore.Qt.CursorMoveStyle',), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtCore.Qt.DateFormat',), ('PySide2.QtCore.Qt.DayOfWeek',), ('PySide2.QtCore.Qt.DockWidgetArea',), ('PySide2.QtCore.Qt.DropAction',), ('PySide2.QtCore.Qt.Edge',), ('PySide2.QtCore.Qt.EnterKeyType',), ('PySide2.QtCore.Qt.FillRule',), ('PySide2.QtCore.Qt.FocusPolicy',), ('PySide2.QtCore.Qt.FocusReason',), ('PySide2.QtCore.Qt.GestureState',), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtCore.Qt.InputMethodHint',), ('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.ItemDataRole',), ('PySide2.QtCore.Qt.ItemSelectionMode',), ('PySide2.QtCore.Qt.ItemSelectionOperation',), ('PySide2.QtCore.Qt.Key',), ('PySide2.QtCore.Qt.LayoutDirection',), ('PySide2.QtCore.Qt.MaskMode',), ('PySide2.QtCore.Qt.MouseEventFlag',), ('PySide2.QtCore.Qt.MouseEventSource',), ('PySide2.QtCore.Qt.NativeGestureType',), ('PySide2.QtCore.Qt.Orientation',), ('PySide2.QtCore.Qt.PenCapStyle',), ('PySide2.QtCore.Qt.PenJoinStyle',), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtCore.Qt.ScreenOrientation',), ('PySide2.QtCore.Qt.ScrollBarPolicy',), ('PySide2.QtCore.Qt.ScrollPhase',), ('PySide2.QtCore.Qt.ShortcutContext',), ('PySide2.QtCore.Qt.SizeHint',), ('PySide2.QtCore.Qt.SizeMode',), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtCore.Qt.TabFocusBehavior',), ('PySide2.QtCore.Qt.TextElideMode',), ('PySide2.QtCore.Qt.TextFormat',), ('PySide2.QtCore.Qt.TextInteractionFlag',), ('PySide2.QtCore.Qt.TimeSpec',), ('PySide2.QtCore.Qt.TimerType',), ('PySide2.QtCore.Qt.ToolBarArea',), ('PySide2.QtCore.Qt.ToolButtonStyle',), ('PySide2.QtCore.Qt.TransformationMode',), ('PySide2.QtCore.Qt.WidgetAttribute',), ('PySide2.QtCore.Qt.WindowModality',), ('PySide2.QtCore.Qt.WindowState',), ('PySide2.QtCore.Qt.WindowType',), ('ScreenOrientations',), ('TextInteractionFlags',), ('ToolBarAreas',), ('TouchPointStates',), ('WindowFlags',), ('WindowStates',)], + + # class PySide2.QtCore.QtMsgType: + + # class PySide2.QtCore.Signal: + + # class PySide2.QtCore.Slot: + }) + +# Module PySide2.QtGui +if "PySide2.QtGui" in sys.modules: + dict.update({ + + # class PySide2.QtGui.QAbstractTextDocumentLayout: + "QAbstractTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QAbstractTextDocumentLayout.anchorAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QAbstractTextDocumentLayout.document": (), + "QAbstractTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QAbstractTextDocumentLayout.documentSize": (), + "QAbstractTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QAbstractTextDocumentLayout.drawInlineObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.format": ('int',), + "QAbstractTextDocumentLayout.formatIndex": ('int',), + "QAbstractTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QAbstractTextDocumentLayout.handlerForObject": ('int',), + "QAbstractTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QAbstractTextDocumentLayout.pageCount": (), + "QAbstractTextDocumentLayout.paintDevice": (), + "QAbstractTextDocumentLayout.positionInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.registerHandler": ('int', 'PySide2.QtCore.QObject'), + "QAbstractTextDocumentLayout.resizeInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.setPaintDevice": ('PySide2.QtGui.QPaintDevice',), + "QAbstractTextDocumentLayout.unregisterHandler": ('int', 'PySide2.QtCore.QObject'), + + # class PySide2.QtGui.QAccessible: + "QAccessible.queryAccessibleInterface": ('PySide2.QtCore.QObject',), + "QAccessible.__copy__": (), + "QAccessible.cleanup": (), + "QAccessible.isActive": (), + "QAccessible.qAccessibleTextBoundaryHelper": ('PySide2.QtGui.QTextCursor', 'PySide2.QtGui.QAccessible.TextBoundaryType'), + "QAccessible.setActive": ('bool',), + "QAccessible.setRootObject": ('PySide2.QtCore.QObject',), + "QAccessible.updateAccessibility": ('PySide2.QtGui.QAccessibleEvent',), + + # class PySide2.QtGui.QAccessibleEvent: + "QAccessibleEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessible.Event'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessible.Event')], + "QAccessibleEvent.accessibleInterface": (), + "QAccessibleEvent.child": (), + "QAccessibleEvent.object": (), + "QAccessibleEvent.setChild": ('int',), + "QAccessibleEvent.type": (), + + # class PySide2.QtGui.QAccessibleInterface: + "QAccessibleInterface.__init__": (), + "QAccessibleInterface.backgroundColor": (), + "QAccessibleInterface.child": ('int',), + "QAccessibleInterface.childAt": ('int', 'int'), + "QAccessibleInterface.childCount": (), + "QAccessibleInterface.focusChild": (), + "QAccessibleInterface.foregroundColor": (), + "QAccessibleInterface.indexOfChild": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessibleInterface.interface_cast": ('PySide2.QtGui.QAccessible.InterfaceType',), + "QAccessibleInterface.isValid": (), + "QAccessibleInterface.object": (), + "QAccessibleInterface.parent": (), + "QAccessibleInterface.rect": (), + "QAccessibleInterface.role": (), + "QAccessibleInterface.setText": ('PySide2.QtGui.QAccessible.Text', 'str'), + "QAccessibleInterface.state": (), + "QAccessibleInterface.text": ('PySide2.QtGui.QAccessible.Text',), + "QAccessibleInterface.virtual_hook": ('int', 'int'), + "QAccessibleInterface.window": (), + + # class PySide2.QtGui.QActionEvent: + + # class PySide2.QtGui.QBackingStore: + "QBackingStore.__init__": ('PySide2.QtGui.QWindow',), + "QBackingStore.beginPaint": ('PySide2.QtGui.QRegion',), + "QBackingStore.endPaint": (), + "QBackingStore.flush": ('PySide2.QtGui.QRegion', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint'), + "QBackingStore.hasStaticContents": (), + "QBackingStore.paintDevice": (), + "QBackingStore.resize": ('PySide2.QtCore.QSize',), + "QBackingStore.scroll": ('PySide2.QtGui.QRegion', 'int', 'int'), + "QBackingStore.setStaticContents": ('PySide2.QtGui.QRegion',), + "QBackingStore.size": (), + "QBackingStore.staticContents": (), + "QBackingStore.window": (), + + # class PySide2.QtGui.QBitmap: + "QBitmap.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str')], + "QBitmap.__copy__": (), + "QBitmap.clear": (), + "QBitmap.fromData": ('PySide2.QtCore.QSize', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.QtGui.QImage.Format'), + "QBitmap.fromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QBitmap.swap": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',)], + "QBitmap.transformed": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform',)], + + # class PySide2.QtGui.QBrush: + "QBrush.__init__": [(), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QBrush',), ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QGradient',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',)], + "QBrush.__copy__": (), + "QBrush.color": (), + "QBrush.gradient": (), + "QBrush.isOpaque": (), + "QBrush.matrix": (), + "QBrush.setColor": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',)], + "QBrush.setMatrix": ('PySide2.QtGui.QMatrix',), + "QBrush.setStyle": ('PySide2.QtCore.Qt.BrushStyle',), + "QBrush.setTexture": ('PySide2.QtGui.QPixmap',), + "QBrush.setTextureImage": ('PySide2.QtGui.QImage',), + "QBrush.setTransform": ('PySide2.QtGui.QTransform',), + "QBrush.style": (), + "QBrush.swap": ('PySide2.QtGui.QBrush',), + "QBrush.texture": (), + "QBrush.textureImage": (), + "QBrush.transform": (), + + # class PySide2.QtGui.QClipboard: + "QClipboard.setMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.clear": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.image": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.mimeData": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.ownsClipboard": (), + "QClipboard.ownsFindBuffer": (), + "QClipboard.ownsSelection": (), + "QClipboard.pixmap": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.setImage": ('PySide2.QtGui.QImage', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setText": ('str', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.supportsFindBuffer": (), + "QClipboard.supportsSelection": (), + "QClipboard.text": [('PySide2.QtGui.QClipboard.Mode',), ('str', 'PySide2.QtGui.QClipboard.Mode')], + + # class PySide2.QtGui.QCloseEvent: + "QCloseEvent.__init__": (), + + # class PySide2.QtGui.QColor: + "QColor.__init__": [(), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('PySide2.support.signature.typing.Any',), ('int',), ('int', 'int', 'int', 'int'), ('str',)], + "QColor.__copy__": (), + "QColor.__reduce__": (), + "QColor.__setstate__": ('object',), + "QColor.alpha": (), + "QColor.alphaF": (), + "QColor.black": (), + "QColor.blackF": (), + "QColor.blue": (), + "QColor.blueF": (), + "QColor.colorNames": (), + "QColor.convertTo": ('PySide2.QtGui.QColor.Spec',), + "QColor.cyan": (), + "QColor.cyanF": (), + "QColor.dark": ('int',), + "QColor.darker": ('int',), + "QColor.fromCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.fromCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.fromHsl": ('int', 'int', 'int', 'int'), + "QColor.fromHslF": ('float', 'float', 'float', 'float'), + "QColor.fromHsv": ('int', 'int', 'int', 'int'), + "QColor.fromHsvF": ('float', 'float', 'float', 'float'), + "QColor.fromRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.fromRgbF": ('float', 'float', 'float', 'float'), + "QColor.fromRgba": ('int',), + "QColor.fromRgba64": ('int', 'int', 'int', 'int'), + "QColor.getCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.getCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.getHsl": ('int', 'int', 'int', 'int'), + "QColor.getHslF": ('float', 'float', 'float', 'float'), + "QColor.getHsv": ('int', 'int', 'int', 'int'), + "QColor.getHsvF": ('float', 'float', 'float', 'float'), + "QColor.getRgb": ('int', 'int', 'int', 'int'), + "QColor.getRgbF": ('float', 'float', 'float', 'float'), + "QColor.green": (), + "QColor.greenF": (), + "QColor.hslHue": (), + "QColor.hslHueF": (), + "QColor.hslSaturation": (), + "QColor.hslSaturationF": (), + "QColor.hsvHue": (), + "QColor.hsvHueF": (), + "QColor.hsvSaturation": (), + "QColor.hsvSaturationF": (), + "QColor.hue": (), + "QColor.hueF": (), + "QColor.isValid": (), + "QColor.isValidColor": ('str',), + "QColor.light": ('int',), + "QColor.lighter": ('int',), + "QColor.lightness": (), + "QColor.lightnessF": (), + "QColor.magenta": (), + "QColor.magentaF": (), + "QColor.name": [(), ('PySide2.QtGui.QColor.NameFormat',)], + "QColor.red": (), + "QColor.redF": (), + "QColor.rgb": (), + "QColor.rgba": (), + "QColor.saturation": (), + "QColor.saturationF": (), + "QColor.setAlpha": ('int',), + "QColor.setAlphaF": ('float',), + "QColor.setBlue": ('int',), + "QColor.setBlueF": ('float',), + "QColor.setCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.setCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.setGreen": ('int',), + "QColor.setGreenF": ('float',), + "QColor.setHsl": ('int', 'int', 'int', 'int'), + "QColor.setHslF": ('float', 'float', 'float', 'float'), + "QColor.setHsv": ('int', 'int', 'int', 'int'), + "QColor.setHsvF": ('float', 'float', 'float', 'float'), + "QColor.setNamedColor": ('str',), + "QColor.setRed": ('int',), + "QColor.setRedF": ('float',), + "QColor.setRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.setRgbF": ('float', 'float', 'float', 'float'), + "QColor.setRgba": ('int',), + "QColor.spec": (), + "QColor.toCmyk": (), + "QColor.toHsl": (), + "QColor.toHsv": (), + "QColor.toRgb": (), + "QColor.toTuple": (), + "QColor.value": (), + "QColor.valueF": (), + "QColor.yellow": (), + "QColor.yellowF": (), + + # class PySide2.QtGui.QConicalGradient: + "QConicalGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QConicalGradient',), ('float', 'float', 'float')], + "QConicalGradient.__copy__": (), + "QConicalGradient.angle": (), + "QConicalGradient.center": (), + "QConicalGradient.setAngle": ('float',), + "QConicalGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + + # class PySide2.QtGui.QContextMenuEvent: + "QContextMenuEvent.__init__": [('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'KeyboardModifiers')], + "QContextMenuEvent.global"+"Y": (), + "QContextMenuEvent.globalPos": (), + "QContextMenuEvent.globalX": (), + "QContextMenuEvent.pos": (), + "QContextMenuEvent.reason": (), + "QContextMenuEvent.x": (), + "QContextMenuEvent.y": (), + + # class PySide2.QtGui.QCursor: + "QCursor.__init__": [(), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtGui.QBitmap', 'PySide2.QtGui.QBitmap', 'int', 'int'), ('PySide2.QtGui.QCursor',), ('PySide2.QtGui.QPixmap', 'int', 'int')], + "QCursor.__copy__": (), + "QCursor.bitmap": (), + "QCursor.hotSpot": (), + "QCursor.mask": (), + "QCursor.pixmap": (), + "QCursor.pos": [(), ('PySide2.QtGui.QScreen',)], + "QCursor.setPos": [('PySide2.QtCore.QPoint',), ('PySide2.QtGui.QScreen', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QScreen', 'int', 'int'), ('int', 'int')], + "QCursor.setShape": ('PySide2.QtCore.Qt.CursorShape',), + "QCursor.shape": (), + + # class PySide2.QtGui.QDesktopServices: + "QDesktopServices.__init__": (), + "QDesktopServices.openUrl": ('PySide2.QtCore.QUrl',), + "QDesktopServices.setUrlHandler": ('str', 'PySide2.QtCore.QObject', 'str'), + "QDesktopServices.unsetUrlHandler": ('str',), + + # class PySide2.QtGui.QDoubleValidator: + "QDoubleValidator.__init__": [('PySide2.QtCore.QObject',), ('float', 'float', 'int', 'PySide2.QtCore.QObject')], + "QDoubleValidator.bottom": (), + "QDoubleValidator.decimals": (), + "QDoubleValidator.notation": (), + "QDoubleValidator.setBottom": ('float',), + "QDoubleValidator.setDecimals": ('int',), + "QDoubleValidator.setNotation": ('PySide2.QtGui.QDoubleValidator.Notation',), + "QDoubleValidator.setRange": ('float', 'float', 'int'), + "QDoubleValidator.setTop": ('float',), + "QDoubleValidator.top": (), + "QDoubleValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QDrag: + "QDrag.__init__": ('PySide2.QtCore.QObject',), + "QDrag.defaultAction": (), + "QDrag.dragCursor": ('PySide2.QtCore.Qt.DropAction',), + "QDrag.exec_": [('DropActions',), ('DropActions', 'PySide2.QtCore.Qt.DropAction')], + "QDrag.hotSpot": (), + "QDrag.mimeData": (), + "QDrag.pixmap": (), + "QDrag.setDragCursor": ('PySide2.QtGui.QPixmap', 'PySide2.QtCore.Qt.DropAction'), + "QDrag.setHotSpot": ('PySide2.QtCore.QPoint',), + "QDrag.setMimeData": ('PySide2.QtCore.QMimeData',), + "QDrag.setPixmap": ('PySide2.QtGui.QPixmap',), + "QDrag.source": (), + "QDrag.start": ('DropActions',), + "QDrag.supportedActions": (), + "QDrag.target": (), + + # class PySide2.QtGui.QDragEnterEvent: + "QDragEnterEvent.__init__": ('PySide2.QtCore.QPoint', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers'), + + # class PySide2.QtGui.QDragLeaveEvent: + "QDragLeaveEvent.__init__": (), + + # class PySide2.QtGui.QDragMoveEvent: + "QDragMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDragMoveEvent.accept": [(), ('PySide2.QtCore.QRect',)], + "QDragMoveEvent.answerRect": (), + "QDragMoveEvent.ignore": [(), ('PySide2.QtCore.QRect',)], + + # class PySide2.QtGui.QDropEvent: + "QDropEvent.__init__": ('PySide2.QtCore.QPointF', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDropEvent.acceptProposedAction": (), + "QDropEvent.dropAction": (), + "QDropEvent.keyboardModifiers": (), + "QDropEvent.mimeData": (), + "QDropEvent.mouseButtons": (), + "QDropEvent.pos": (), + "QDropEvent.posF": (), + "QDropEvent.possibleActions": (), + "QDropEvent.proposedAction": (), + "QDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QDropEvent.source": (), + + # class PySide2.QtGui.QEnterEvent: + "QEnterEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEnterEvent.global"+"Y": (), + "QEnterEvent.globalPos": (), + "QEnterEvent.globalX": (), + "QEnterEvent.localPos": (), + "QEnterEvent.pos": (), + "QEnterEvent.screenPos": (), + "QEnterEvent.windowPos": (), + "QEnterEvent.x": (), + "QEnterEvent.y": (), + + # class PySide2.QtGui.QExposeEvent: + "QExposeEvent.__init__": ('PySide2.QtGui.QRegion',), + "QExposeEvent.region": (), + + # class PySide2.QtGui.QFileOpenEvent: + "QFileOpenEvent.__init__": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileOpenEvent.file": (), + "QFileOpenEvent.openFile": ('PySide2.QtCore.QFile', 'OpenMode'), + "QFileOpenEvent.url": (), + + # class PySide2.QtGui.QFocusEvent: + "QFocusEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.FocusReason'), + "QFocusEvent.gotFocus": (), + "QFocusEvent.lostFocus": (), + "QFocusEvent.reason": (), + + # class PySide2.QtGui.QFont: + "QFont.__init__": [(), ('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('str', 'int', 'int', 'bool')], + "QFont.__copy__": (), + "QFont.bold": (), + "QFont.cacheStatistics": (), + "QFont.capitalization": (), + "QFont.cleanup": (), + "QFont.defaultFamily": (), + "QFont.exactMatch": (), + "QFont.family": (), + "QFont.fixedPitch": (), + "QFont.fromString": ('str',), + "QFont.hintingPreference": (), + "QFont.initialize": (), + "QFont.insertSubstitution": ('str', 'str'), + "QFont.insertSubstitutions": ('str', 'PySide2.support.signature.typing.List'), + "QFont.isCopyOf": ('PySide2.QtGui.QFont',), + "QFont.italic": (), + "QFont.kerning": (), + "QFont.key": (), + "QFont.lastResortFamily": (), + "QFont.lastResortFont": (), + "QFont.letterSpacing": (), + "QFont.letterSpacingType": (), + "QFont.overline": (), + "QFont.pixelSize": (), + "QFont.pointSize": (), + "QFont.pointSizeF": (), + "QFont.rawMode": (), + "QFont.rawName": (), + "QFont.removeSubstitutions": ('str',), + "QFont.resolve": [(), ('PySide2.QtGui.QFont',), ('int',)], + "QFont.setBold": ('bool',), + "QFont.setCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QFont.setFamily": ('str',), + "QFont.setFixedPitch": ('bool',), + "QFont.setHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QFont.setItalic": ('bool',), + "QFont.setKerning": ('bool',), + "QFont.setLetterSpacing": ('PySide2.QtGui.QFont.SpacingType', 'float'), + "QFont.setOverline": ('bool',), + "QFont.setPixelSize": ('int',), + "QFont.setPointSize": ('int',), + "QFont.setPointSizeF": ('float',), + "QFont.setRawMode": ('bool',), + "QFont.setRawName": ('str',), + "QFont.setStretch": ('int',), + "QFont.setStrikeOut": ('bool',), + "QFont.setStyle": ('PySide2.QtGui.QFont.Style',), + "QFont.setStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QFont.setStyleName": ('str',), + "QFont.setStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QFont.setUnderline": ('bool',), + "QFont.setWeight": ('int',), + "QFont.setWordSpacing": ('float',), + "QFont.stretch": (), + "QFont.strikeOut": (), + "QFont.style": (), + "QFont.styleHint": (), + "QFont.styleName": (), + "QFont.styleStrategy": (), + "QFont.substitute": ('str',), + "QFont.substitutes": ('str',), + "QFont.substitutions": (), + "QFont.swap": ('PySide2.QtGui.QFont',), + "QFont.toString": (), + "QFont.underline": (), + "QFont.weight": (), + "QFont.wordSpacing": (), + + # class PySide2.QtGui.QFontDatabase: + "QFontDatabase.__init__": [(), ('PySide2.QtGui.QFontDatabase',)], + "QFontDatabase.__copy__": (), + "QFontDatabase.addApplicationFont": ('str',), + "QFontDatabase.addApplicationFontFromData": ('PySide2.QtCore.QByteArray',), + "QFontDatabase.applicationFontFamilies": ('int',), + "QFontDatabase.bold": ('str', 'str'), + "QFontDatabase.families": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.font": ('str', 'str', 'int'), + "QFontDatabase.hasFamily": ('str',), + "QFontDatabase.isBitmapScalable": ('str', 'str'), + "QFontDatabase.isFixedPitch": ('str', 'str'), + "QFontDatabase.isPrivateFamily": ('str',), + "QFontDatabase.isScalable": ('str', 'str'), + "QFontDatabase.isSmoothlyScalable": ('str', 'str'), + "QFontDatabase.italic": ('str', 'str'), + "QFontDatabase.pointSizes": ('str', 'str'), + "QFontDatabase.removeAllApplicationFonts": (), + "QFontDatabase.removeApplicationFont": ('int',), + "QFontDatabase.smoothSizes": ('str', 'str'), + "QFontDatabase.standardSizes": (), + "QFontDatabase.styleString": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontDatabase.styles": ('str',), + "QFontDatabase.supportsThreadedFontRendering": (), + "QFontDatabase.systemFont": ('PySide2.QtGui.QFontDatabase.SystemFont',), + "QFontDatabase.weight": ('str', 'str'), + "QFontDatabase.writingSystemName": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystemSample": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystems": [(), ('str',)], + + # class PySide2.QtGui.QFontInfo: + "QFontInfo.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontInfo.__copy__": (), + "QFontInfo.bold": (), + "QFontInfo.exactMatch": (), + "QFontInfo.family": (), + "QFontInfo.fixedPitch": (), + "QFontInfo.italic": (), + "QFontInfo.overline": (), + "QFontInfo.pixelSize": (), + "QFontInfo.pointSize": (), + "QFontInfo.pointSizeF": (), + "QFontInfo.rawMode": (), + "QFontInfo.strikeOut": (), + "QFontInfo.style": (), + "QFontInfo.styleHint": (), + "QFontInfo.styleName": (), + "QFontInfo.swap": ('PySide2.QtGui.QFontInfo',), + "QFontInfo.underline": (), + "QFontInfo.weight": (), + + # class PySide2.QtGui.QFontMetrics: + "QFontMetrics.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',)], + "QFontMetrics.__copy__": (), + "QFontMetrics.ascent": (), + "QFontMetrics.averageCharWidth": (), + "QFontMetrics.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetrics.boundingRectChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.charWidth": ('str', 'int'), + "QFontMetrics.descent": (), + "QFontMetrics.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'int', 'int'), + "QFontMetrics.height": (), + "QFontMetrics.inFont": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.inFontUcs4": ('int',), + "QFontMetrics.leading": (), + "QFontMetrics.leftBearing": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.lineSpacing": (), + "QFontMetrics.lineWidth": (), + "QFontMetrics.maxWidth": (), + "QFontMetrics.minLeftBearing": (), + "QFontMetrics.minRightBearing": (), + "QFontMetrics.overlinePos": (), + "QFontMetrics.rightBearing": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.size": ('int', 'str', 'int', 'int'), + "QFontMetrics.strikeOutPos": (), + "QFontMetrics.swap": ('PySide2.QtGui.QFontMetrics',), + "QFontMetrics.tightBoundingRect": ('str',), + "QFontMetrics.underlinePos": (), + "QFontMetrics.width": [('str', 'int'), ('str', 'int', 'int')], + "QFontMetrics.widthChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.xHeight": (), + + # class PySide2.QtGui.QFontMetricsF: + "QFontMetricsF.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',), ('PySide2.QtGui.QFontMetricsF',)], + "QFontMetricsF.__copy__": (), + "QFontMetricsF.ascent": (), + "QFontMetricsF.averageCharWidth": (), + "QFontMetricsF.boundingRect": [('PySide2.QtCore.QRectF', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetricsF.boundingRectChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.descent": (), + "QFontMetricsF.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'float', 'int'), + "QFontMetricsF.height": (), + "QFontMetricsF.inFont": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.inFontUcs4": ('int',), + "QFontMetricsF.leading": (), + "QFontMetricsF.leftBearing": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.lineSpacing": (), + "QFontMetricsF.lineWidth": (), + "QFontMetricsF.maxWidth": (), + "QFontMetricsF.minLeftBearing": (), + "QFontMetricsF.minRightBearing": (), + "QFontMetricsF.overlinePos": (), + "QFontMetricsF.rightBearing": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.size": ('int', 'str', 'int', 'int'), + "QFontMetricsF.strikeOutPos": (), + "QFontMetricsF.swap": ('PySide2.QtGui.QFontMetricsF',), + "QFontMetricsF.tightBoundingRect": ('str',), + "QFontMetricsF.underlinePos": (), + "QFontMetricsF.width": ('str',), + "QFontMetricsF.widthChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.xHeight": (), + + # class PySide2.QtGui.QGradient: + "QGradient.__init__": [(), ('PySide2.QtGui.QGradient',)], + "QGradient.__copy__": (), + "QGradient.coordinateMode": (), + "QGradient.interpolationMode": (), + "QGradient.setColorAt": ('float', 'PySide2.QtGui.QColor'), + "QGradient.setCoordinateMode": ('PySide2.QtGui.QGradient.CoordinateMode',), + "QGradient.setInterpolationMode": ('PySide2.QtGui.QGradient.InterpolationMode',), + "QGradient.setSpread": ('PySide2.QtGui.QGradient.Spread',), + "QGradient.setStops": ('list',), + "QGradient.spread": (), + "QGradient.stops": (), + "QGradient.type": (), + + # class PySide2.QtGui.QGuiApplication: + "QGuiApplication.__init__": ('PySide2.support.signature.typing.List',), + "QGuiApplication.allWindows": (), + "QGuiApplication.applicationDisplayName": (), + "QGuiApplication.applicationState": (), + "QGuiApplication.changeOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.clipboard": (), + "QGuiApplication.desktopSettingsAware": (), + "QGuiApplication.devicePixelRatio": (), + "QGuiApplication.event": ('PySide2.QtCore.QEvent',), + "QGuiApplication.exec_": (), + "QGuiApplication.focusObject": (), + "QGuiApplication.focusWindow": (), + "QGuiApplication.font": (), + "QGuiApplication.isFallbackSessionManagementEnabled": (), + "QGuiApplication.isLeftToRight": (), + "QGuiApplication.isRightToLeft": (), + "QGuiApplication.isSavingSession": (), + "QGuiApplication.isSessionRestored": (), + "QGuiApplication.keyboardModifiers": (), + "QGuiApplication.layoutDirection": (), + "QGuiApplication.modalWindow": (), + "QGuiApplication.mouseButtons": (), + "QGuiApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGuiApplication.overrideCursor": (), + "QGuiApplication.palette": (), + "QGuiApplication.platformName": (), + "QGuiApplication.primaryScreen": (), + "QGuiApplication.queryKeyboardModifiers": (), + "QGuiApplication.quitOnLastWindowClosed": (), + "QGuiApplication.restoreOverrideCursor": (), + "QGuiApplication.screens": (), + "QGuiApplication.sessionId": (), + "QGuiApplication.sessionKey": (), + "QGuiApplication.setApplicationDisplayName": ('str',), + "QGuiApplication.setDesktopSettingsAware": ('bool',), + "QGuiApplication.setFallbackSessionManagementEnabled": ('bool',), + "QGuiApplication.setFont": ('PySide2.QtGui.QFont',), + "QGuiApplication.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGuiApplication.setOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.setPalette": ('PySide2.QtGui.QPalette',), + "QGuiApplication.setQuitOnLastWindowClosed": ('bool',), + "QGuiApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QGuiApplication.styleHints": (), + "QGuiApplication.sync": (), + "QGuiApplication.topLevelAt": ('PySide2.QtCore.QPoint',), + "QGuiApplication.topLevelWindows": (), + "QGuiApplication.windowIcon": (), + + # class PySide2.QtGui.QHelpEvent: + "QHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QHelpEvent.global"+"Y": (), + "QHelpEvent.globalPos": (), + "QHelpEvent.globalX": (), + "QHelpEvent.pos": (), + "QHelpEvent.x": (), + "QHelpEvent.y": (), + + # class PySide2.QtGui.QHideEvent: + "QHideEvent.__init__": (), + + # class PySide2.QtGui.QHoverEvent: + "QHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'KeyboardModifiers'), + "QHoverEvent.oldPos": (), + "QHoverEvent.oldPosF": (), + "QHoverEvent.pos": (), + "QHoverEvent.posF": (), + + # class PySide2.QtGui.QIcon: + "QIcon.__init__": [(), ('PySide2.QtGui.QIcon',), ('PySide2.QtGui.QIconEngine',), ('PySide2.QtGui.QPixmap',), ('str',)], + "QIcon.__copy__": (), + "QIcon.actualSize": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.cacheKey": (), + "QIcon.fromTheme": ('str', 'PySide2.QtGui.QIcon'), + "QIcon.hasThemeIcon": ('str',), + "QIcon.isMask": (), + "QIcon.isNull": (), + "QIcon.name": (), + "QIcon.paint": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QPainter', 'int', 'int', 'int', 'int', 'Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.pixmap": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.setIsMask": ('bool',), + "QIcon.setThemeName": ('str',), + "QIcon.setThemeSearchPaths": ('PySide2.support.signature.typing.List',), + "QIcon.swap": ('PySide2.QtGui.QIcon',), + "QIcon.themeName": (), + "QIcon.themeSearchPaths": (), + + # class PySide2.QtGui.QIconDragEvent: + "QIconDragEvent.__init__": (), + + # class PySide2.QtGui.QIconEngine: + "QIconEngine.__init__": (), + "QIconEngine.actualSize": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.clone": (), + "QIconEngine.iconName": (), + "QIconEngine.key": (), + "QIconEngine.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.pixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.read": ('PySide2.QtCore.QDataStream',), + "QIconEngine.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QImage: + "QImage.__init__": [(), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QImage.Format'), ('PySide2.QtGui.QImage',), ('PySide2.support.signature.typing.List',), ('PySide2.support.signature.typing.Union[str, int]', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'PySide2.support.signature.typing.Callable', 'int'), ('PySide2.support.signature.typing.Union[str, int]', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'PySide2.support.signature.typing.Callable', 'int'), ('int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'str')], + "QImage.__copy__": (), + "QImage.allGray": (), + "QImage.alphaChannel": (), + "QImage.bitPlaneCount": (), + "QImage.bits": (), + "QImage.byteCount": (), + "QImage.bytesPerLine": (), + "QImage.cacheKey": (), + "QImage.color": ('int',), + "QImage.colorCount": (), + "QImage.colorTable": (), + "QImage.constBits": (), + "QImage.constScanLine": ('int',), + "QImage.convertToFormat": [('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), ('PySide2.QtGui.QImage.Format', 'list', 'ImageConversionFlags')], + "QImage.convertToFormat_helper": ('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), + "QImage.convertToFormat_inplace": ('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), + "QImage.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QImage.createAlphaMask": ('ImageConversionFlags',), + "QImage.createHeuristicMask": ('bool',), + "QImage.createMaskFromColor": ('int', 'PySide2.QtCore.Qt.MaskMode'), + "QImage.depth": (), + "QImage.devType": (), + "QImage.devicePixelRatio": (), + "QImage.dotsPerMeterX": (), + "QImage.dotsPerMeterY": (), + "QImage.fill": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',)], + "QImage.format": (), + "QImage.fromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.hasAlphaChannel": (), + "QImage.height": (), + "QImage.invertPixels": ('PySide2.QtGui.QImage.InvertMode',), + "QImage.isGrayscale": (), + "QImage.isNull": (), + "QImage.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QImage.loadFromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QImage.mirrored": ('bool', 'bool'), + "QImage.mirrored_helper": ('bool', 'bool'), + "QImage.mirrored_inplace": ('bool', 'bool'), + "QImage.offset": (), + "QImage.paintEngine": (), + "QImage.pixel": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelColor": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelFormat": (), + "QImage.pixelIndex": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.rect": (), + "QImage.rgbSwapped": (), + "QImage.rgbSwapped_helper": (), + "QImage.rgbSwapped_inplace": (), + "QImage.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QImage.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scanLine": ('int',), + "QImage.setAlphaChannel": ('PySide2.QtGui.QImage',), + "QImage.setColor": ('int', 'int'), + "QImage.setColorCount": ('int',), + "QImage.setColorTable": ('list',), + "QImage.setDevicePixelRatio": ('float',), + "QImage.setDotsPerMeterX": ('int',), + "QImage.setDotsPerMeterY": ('int',), + "QImage.setOffset": ('PySide2.QtCore.QPoint',), + "QImage.setPixel": [('PySide2.QtCore.QPoint', 'int'), ('int', 'int', 'int')], + "QImage.setPixelColor": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QColor')], + "QImage.setText": ('str', 'str'), + "QImage.size": (), + "QImage.smoothScaled": ('int', 'int'), + "QImage.swap": ('PySide2.QtGui.QImage',), + "QImage.text": ('str',), + "QImage.textKeys": (), + "QImage.toImageFormat": ('PySide2.QtGui.QPixelFormat',), + "QImage.toPixelFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QImage.valid": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.width": (), + + # class PySide2.QtGui.QImageIOHandler: + "QImageIOHandler.__init__": (), + "QImageIOHandler.canRead": (), + "QImageIOHandler.currentImageNumber": (), + "QImageIOHandler.currentImageRect": (), + "QImageIOHandler.device": (), + "QImageIOHandler.format": (), + "QImageIOHandler.imageCount": (), + "QImageIOHandler.jumpToImage": ('int',), + "QImageIOHandler.jumpToNextImage": (), + "QImageIOHandler.loopCount": (), + "QImageIOHandler.name": (), + "QImageIOHandler.nextImageDelay": (), + "QImageIOHandler.option": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.read": ('PySide2.QtGui.QImage',), + "QImageIOHandler.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageIOHandler.setFormat": ['PySide2.QtCore.QByteArray'], + "QImageIOHandler.setOption": ('PySide2.QtGui.QImageIOHandler.ImageOption', 'PySide2.support.signature.typing.Any'), + "QImageIOHandler.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QImageReader: + "QImageReader.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageReader.autoDetectImageFormat": (), + "QImageReader.autoTransform": (), + "QImageReader.backgroundColor": (), + "QImageReader.canRead": (), + "QImageReader.clipRect": (), + "QImageReader.currentImageNumber": (), + "QImageReader.currentImageRect": (), + "QImageReader.decideFormatFromContent": (), + "QImageReader.device": (), + "QImageReader.error": (), + "QImageReader.errorString": (), + "QImageReader.fileName": (), + "QImageReader.format": (), + "QImageReader.gamma": (), + "QImageReader.imageCount": (), + "QImageReader.imageFormat": [(), ('PySide2.QtCore.QIODevice',), ('str',)], + "QImageReader.jumpToImage": ('int',), + "QImageReader.jumpToNextImage": (), + "QImageReader.loopCount": (), + "QImageReader.nextImageDelay": (), + "QImageReader.quality": (), + "QImageReader.read": (), + "QImageReader.scaledClipRect": (), + "QImageReader.scaledSize": (), + "QImageReader.setAutoDetectImageFormat": ('bool',), + "QImageReader.setAutoTransform": ('bool',), + "QImageReader.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QImageReader.setClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setDecideFormatFromContent": ('bool',), + "QImageReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageReader.setFileName": ('str',), + "QImageReader.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageReader.setGamma": ('float',), + "QImageReader.setQuality": ('int',), + "QImageReader.setScaledClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setScaledSize": ('PySide2.QtCore.QSize',), + "QImageReader.size": (), + "QImageReader.subType": (), + "QImageReader.supportedImageFormats": (), + "QImageReader.supportedMimeTypes": (), + "QImageReader.supportedSubTypes": (), + "QImageReader.supportsAnimation": (), + "QImageReader.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageReader.text": ('str',), + "QImageReader.textKeys": (), + "QImageReader.transformation": (), + + # class PySide2.QtGui.QImageWriter: + "QImageWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageWriter.canWrite": (), + "QImageWriter.compression": (), + "QImageWriter.description": (), + "QImageWriter.device": (), + "QImageWriter.error": (), + "QImageWriter.errorString": (), + "QImageWriter.fileName": (), + "QImageWriter.format": (), + "QImageWriter.gamma": (), + "QImageWriter.optimizedWrite": (), + "QImageWriter.progressiveScanWrite": (), + "QImageWriter.quality": (), + "QImageWriter.setCompression": ('int',), + "QImageWriter.setDescription": ('str',), + "QImageWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageWriter.setFileName": ('str',), + "QImageWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setGamma": ('float',), + "QImageWriter.setOptimizedWrite": ('bool',), + "QImageWriter.setProgressiveScanWrite": ('bool',), + "QImageWriter.setQuality": ('int',), + "QImageWriter.setSubType": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setText": ('str', 'str'), + "QImageWriter.setTransformation": ('Transformations',), + "QImageWriter.subType": (), + "QImageWriter.supportedImageFormats": (), + "QImageWriter.supportedMimeTypes": (), + "QImageWriter.supportedSubTypes": (), + "QImageWriter.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageWriter.transformation": (), + "QImageWriter.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QInputEvent: + "QInputEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'KeyboardModifiers'), + "QInputEvent.modifiers": (), + "QInputEvent.setModifiers": ('KeyboardModifiers',), + "QInputEvent.setTimestamp": ('int',), + "QInputEvent.timestamp": (), + + # class PySide2.QtGui.QInputMethodEvent: + "QInputMethodEvent.__init__": [(), ('PySide2.QtGui.QInputMethodEvent',), ('str', 'list')], + "QInputMethodEvent.attributes": (), + "QInputMethodEvent.commitString": (), + "QInputMethodEvent.preeditString": (), + "QInputMethodEvent.replacementLength": (), + "QInputMethodEvent.replacementStart": (), + "QInputMethodEvent.setCommitString": ('str', 'int', 'int'), + + # class PySide2.QtGui.QIntValidator: + "QIntValidator.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QIntValidator.bottom": (), + "QIntValidator.fixup": ('str',), + "QIntValidator.setBottom": ('int',), + "QIntValidator.setRange": ('int', 'int'), + "QIntValidator.setTop": ('int',), + "QIntValidator.top": (), + "QIntValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QKeyEvent: + "QKeyEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'int', 'KeyboardModifiers', 'int', 'int', 'int', 'str', 'bool', 'int'), ('PySide2.QtCore.QEvent.Type', 'int', 'KeyboardModifiers', 'str', 'bool', 'int')], + "QKeyEvent.count": (), + "QKeyEvent.isAutoRepeat": (), + "QKeyEvent.key": (), + "QKeyEvent.matches": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeyEvent.modifiers": (), + "QKeyEvent.nativeModifiers": (), + "QKeyEvent.nativeScanCode": (), + "QKeyEvent.nativeVirtualKey": (), + "QKeyEvent.text": (), + + # class PySide2.QtGui.QKeySequence: + "QKeySequence.__init__": [(), ('PySide2.QtGui.QKeySequence',), ('PySide2.QtGui.QKeySequence.StandardKey',), ('int', 'int', 'int', 'int'), ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat')], + "QKeySequence.__copy__": (), + "QKeySequence.__reduce__": (), + "QKeySequence.count": (), + "QKeySequence.fromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.isEmpty": (), + "QKeySequence.keyBindings": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeySequence.listFromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.listToString": ('list', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.matches": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.mnemonic": ('str',), + "QKeySequence.swap": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.toString": ('PySide2.QtGui.QKeySequence.SequenceFormat',), + + # class PySide2.QtGui.QLinearGradient: + "QLinearGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtGui.QLinearGradient',), ('float', 'float', 'float', 'float')], + "QLinearGradient.__copy__": (), + "QLinearGradient.finalStop": (), + "QLinearGradient.setFinalStop": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.setStart": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.start": (), + + # class PySide2.QtGui.QMatrix: + "QMatrix.__init__": [(), ('PySide2.QtGui.QMatrix',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix.__copy__": (), + "QMatrix.__reduce__": (), + "QMatrix.determinant": (), + "QMatrix.dx": (), + "QMatrix.dy": (), + "QMatrix.inverted": ('bool',), + "QMatrix.isIdentity": (), + "QMatrix.isInvertible": (), + "QMatrix.m11": (), + "QMatrix.m12": (), + "QMatrix.m21": (), + "QMatrix.m22": (), + "QMatrix.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QMatrix.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix.mapToPolygon": ('PySide2.QtCore.QRect',), + "QMatrix.reset": (), + "QMatrix.rotate": ('float',), + "QMatrix.scale": ('float', 'float'), + "QMatrix.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix.shear": ('float', 'float'), + "QMatrix.translate": ('float', 'float'), + + # class PySide2.QtGui.QMatrix2x2: + "QMatrix2x2.__init__": [('PySide2.QtGui.QMatrix2x2',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix2x2.__copy__": (), + "QMatrix2x2.__reduce__": (), + "QMatrix2x2.data": (), + "QMatrix2x2.fill": ('object',), + "QMatrix2x2.transposed": (), + + # class PySide2.QtGui.QMatrix2x3: + "QMatrix2x3.__init__": [('PySide2.QtGui.QMatrix2x3',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix2x3.__copy__": (), + "QMatrix2x3.__reduce__": (), + "QMatrix2x3.data": (), + "QMatrix2x3.fill": ('object',), + "QMatrix2x3.transposed": (), + + # class PySide2.QtGui.QMatrix2x4: + "QMatrix2x4.__init__": [('PySide2.QtGui.QMatrix2x4',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix2x4.__copy__": (), + "QMatrix2x4.__reduce__": (), + "QMatrix2x4.data": (), + "QMatrix2x4.fill": ('object',), + "QMatrix2x4.transposed": (), + + # class PySide2.QtGui.QMatrix3x2: + "QMatrix3x2.__init__": [('PySide2.QtGui.QMatrix3x2',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix3x2.__copy__": (), + "QMatrix3x2.__reduce__": (), + "QMatrix3x2.data": (), + "QMatrix3x2.fill": ('object',), + "QMatrix3x2.transposed": (), + + # class PySide2.QtGui.QMatrix3x3: + "QMatrix3x3.__init__": [('PySide2.QtGui.QMatrix3x3',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix3x3.__copy__": (), + "QMatrix3x3.__reduce__": (), + "QMatrix3x3.data": (), + "QMatrix3x3.fill": ('object',), + "QMatrix3x3.transposed": (), + + # class PySide2.QtGui.QMatrix3x4: + "QMatrix3x4.__init__": [('PySide2.QtGui.QMatrix3x4',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix3x4.__copy__": (), + "QMatrix3x4.__reduce__": (), + "QMatrix3x4.data": (), + "QMatrix3x4.fill": ('object',), + "QMatrix3x4.transposed": (), + + # class PySide2.QtGui.QMatrix4x2: + "QMatrix4x2.__init__": [('PySide2.QtGui.QMatrix4x2',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix4x2.__copy__": (), + "QMatrix4x2.__reduce__": (), + "QMatrix4x2.data": (), + "QMatrix4x2.fill": ('object',), + "QMatrix4x2.transposed": (), + + # class PySide2.QtGui.QMatrix4x3: + "QMatrix4x3.__init__": [('PySide2.QtGui.QMatrix4x3',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix4x3.__copy__": (), + "QMatrix4x3.__reduce__": (), + "QMatrix4x3.data": (), + "QMatrix4x3.fill": ('object',), + "QMatrix4x3.transposed": (), + + # class PySide2.QtGui.QMatrix4x4: + "QMatrix4x4.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QMatrix4x4',), ('PySide2.QtGui.QTransform',), ('float',), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.__copy__": (), + "QMatrix4x4.__reduce__": (), + "QMatrix4x4.column": ('int',), + "QMatrix4x4.copyDataTo": ('float',), + "QMatrix4x4.data": (), + "QMatrix4x4.determinant": (), + "QMatrix4x4.fill": ('float',), + "QMatrix4x4.flipCoordinates": (), + "QMatrix4x4.frustum": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix4x4.inverted": ('bool',), + "QMatrix4x4.isAffine": (), + "QMatrix4x4.isIdentity": (), + "QMatrix4x4.lookAt": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QMatrix4x4.map": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',)], + "QMatrix4x4.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix4x4.mapVector": ('PySide2.QtGui.QVector3D',), + "QMatrix4x4.normalMatrix": (), + "QMatrix4x4.optimize": (), + "QMatrix4x4.ortho": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.perspective": ('float', 'float', 'float', 'float'), + "QMatrix4x4.rotate": [('PySide2.QtGui.QQuaternion',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QMatrix4x4.row": ('int',), + "QMatrix4x4.scale": [('PySide2.QtGui.QVector3D',), ('float',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.setColumn": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setRow": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setToIdentity": (), + "QMatrix4x4.toAffine": (), + "QMatrix4x4.toTransform": [(), ('float',)], + "QMatrix4x4.translate": [('PySide2.QtGui.QVector3D',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.transposed": (), + "QMatrix4x4.viewport": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + + # class PySide2.QtGui.QMouseEvent: + "QMouseEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers')], + "QMouseEvent.button": (), + "QMouseEvent.buttons": (), + "QMouseEvent.flags": (), + "QMouseEvent.global"+"Y": (), + "QMouseEvent.globalPos": (), + "QMouseEvent.globalX": (), + "QMouseEvent.localPos": (), + "QMouseEvent.pos": (), + "QMouseEvent.screenPos": (), + "QMouseEvent.source": (), + "QMouseEvent.windowPos": (), + "QMouseEvent.x": (), + "QMouseEvent.y": (), + + # class PySide2.QtGui.QMoveEvent: + "QMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QMoveEvent.oldPos": (), + "QMoveEvent.pos": (), + + # class PySide2.QtGui.QMovie: + "QMovie.__init__": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QMovie.backgroundColor": (), + "QMovie.cacheMode": (), + "QMovie.currentFrameNumber": (), + "QMovie.currentImage": (), + "QMovie.currentPixmap": (), + "QMovie.device": (), + "QMovie.fileName": (), + "QMovie.format": (), + "QMovie.frameCount": (), + "QMovie.frameRect": (), + "QMovie.isValid": (), + "QMovie.jumpToFrame": ('int',), + "QMovie.jumpToNextFrame": (), + "QMovie.loopCount": (), + "QMovie.nextFrameDelay": (), + "QMovie.scaledSize": (), + "QMovie.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QMovie.setCacheMode": ('PySide2.QtGui.QMovie.CacheMode',), + "QMovie.setDevice": ('PySide2.QtCore.QIODevice',), + "QMovie.setFileName": ('str',), + "QMovie.setFormat": ('PySide2.QtCore.QByteArray',), + "QMovie.setPaused": ('bool',), + "QMovie.setScaledSize": ('PySide2.QtCore.QSize',), + "QMovie.setSpeed": ('int',), + "QMovie.speed": (), + "QMovie.start": (), + "QMovie.state": (), + "QMovie.stop": (), + "QMovie.supportedFormats": (), + + # class PySide2.QtGui.QOpenGLBuffer: + "QOpenGLBuffer.__init__": [(), ('PySide2.QtGui.QOpenGLBuffer',), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.allocate": [('int',), ('int', 'int')], + "QOpenGLBuffer.bind": (), + "QOpenGLBuffer.bufferId": (), + "QOpenGLBuffer.create": (), + "QOpenGLBuffer.destroy": (), + "QOpenGLBuffer.isCreated": (), + "QOpenGLBuffer.map": ('PySide2.QtGui.QOpenGLBuffer.Access',), + "QOpenGLBuffer.mapRange": ('int', 'int', 'RangeAccessFlags'), + "QOpenGLBuffer.read": ('int', 'int', 'int'), + "QOpenGLBuffer.release": [(), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.setUsagePattern": ('PySide2.QtGui.QOpenGLBuffer.UsagePattern',), + "QOpenGLBuffer.size": (), + "QOpenGLBuffer.type": (), + "QOpenGLBuffer.unmap": (), + "QOpenGLBuffer.usagePattern": (), + "QOpenGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtGui.QOpenGLContext: + "QOpenGLContext.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLContext.areSharing": ('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLContext.create": (), + "QOpenGLContext.currentContext": (), + "QOpenGLContext.defaultFramebufferObject": (), + "QOpenGLContext.doneCurrent": (), + "QOpenGLContext.extensions": (), + "QOpenGLContext.format": (), + "QOpenGLContext.globalShareContext": (), + "QOpenGLContext.hasExtension": ('PySide2.QtCore.QByteArray',), + "QOpenGLContext.isOpenGLES": (), + "QOpenGLContext.isValid": (), + "QOpenGLContext.makeCurrent": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.nativeHandle": (), + "QOpenGLContext.openGLModuleHandle": (), + "QOpenGLContext.openGLModuleType": (), + "QOpenGLContext.screen": (), + "QOpenGLContext.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLContext.setNativeHandle": ('PySide2.support.signature.typing.Any',), + "QOpenGLContext.setScreen": ('PySide2.QtGui.QScreen',), + "QOpenGLContext.setShareContext": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLContext.shareContext": (), + "QOpenGLContext.supportsThreadedOpenGL": (), + "QOpenGLContext.surface": (), + "QOpenGLContext.swapBuffers": ('PySide2.QtGui.QSurface',), + + # class PySide2.QtGui.QOpenGLFramebufferObject: + "QOpenGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.addColorAttachment": [('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.attachment": (), + "QOpenGLFramebufferObject.bind": (), + "QOpenGLFramebufferObject.bindDefault": (), + "QOpenGLFramebufferObject.blitFramebuffer": [('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtGui.QOpenGLFramebufferObject', 'int', 'int')], + "QOpenGLFramebufferObject.handle": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QOpenGLFramebufferObject.height": (), + "QOpenGLFramebufferObject.isBound": (), + "QOpenGLFramebufferObject.isValid": (), + "QOpenGLFramebufferObject.release": (), + "QOpenGLFramebufferObject.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObject.size": (), + "QOpenGLFramebufferObject.sizes": (), + "QOpenGLFramebufferObject.takeTexture": [(), ('int',)], + "QOpenGLFramebufferObject.texture": (), + "QOpenGLFramebufferObject.textures": (), + "QOpenGLFramebufferObject.toImage": [(), ('bool',), ('bool', 'int')], + "QOpenGLFramebufferObject.width": (), + + # class PySide2.QtGui.QOpenGLShader: + "QOpenGLShader.__init__": ('ShaderType', 'PySide2.QtCore.QObject'), + "QOpenGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShader.compileSourceFile": ('str',), + "QOpenGLShader.hasOpenGLShaders": ('ShaderType', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLShader.isCompiled": (), + "QOpenGLShader.log": (), + "QOpenGLShader.shaderId": (), + "QOpenGLShader.shaderType": (), + "QOpenGLShader.sourceCode": (), + + # class PySide2.QtGui.QPageLayout: + "QPageLayout.__init__": [(), ('PySide2.QtGui.QPageLayout',), ('PySide2.QtGui.QPageSize', 'PySide2.QtGui.QPageLayout.Orientation', 'PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit', 'PySide2.QtCore.QMarginsF')], + "QPageLayout.__copy__": (), + "QPageLayout.fullRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.fullRectPixels": ('int',), + "QPageLayout.fullRectPoints": (), + "QPageLayout.isEquivalentTo": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.isValid": (), + "QPageLayout.margins": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.marginsPixels": ('int',), + "QPageLayout.marginsPoints": (), + "QPageLayout.maximumMargins": (), + "QPageLayout.minimumMargins": (), + "QPageLayout.mode": (), + "QPageLayout.orientation": (), + "QPageLayout.pageSize": (), + "QPageLayout.paintRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.paintRectPixels": ('int',), + "QPageLayout.paintRectPoints": (), + "QPageLayout.setBottomMargin": ('float',), + "QPageLayout.setLeftMargin": ('float',), + "QPageLayout.setMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMinimumMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMode": ('PySide2.QtGui.QPageLayout.Mode',), + "QPageLayout.setOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPageLayout.setPageSize": ('PySide2.QtGui.QPageSize', 'PySide2.QtCore.QMarginsF'), + "QPageLayout.setRightMargin": ('float',), + "QPageLayout.setTopMargin": ('float',), + "QPageLayout.setUnits": ('PySide2.QtGui.QPageLayout.Unit',), + "QPageLayout.swap": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.units": (), + + # class PySide2.QtGui.QPageSize: + "QPageSize.__init__": [(), ('PySide2.QtCore.QSize', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.__copy__": (), + "QPageSize.definitionSize": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.definitionUnits": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.id": [(), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('int',)], + "QPageSize.isEquivalentTo": ('PySide2.QtGui.QPageSize',), + "QPageSize.isValid": (), + "QPageSize.key": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.name": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.rect": ('PySide2.QtGui.QPageSize.Unit',), + "QPageSize.rectPixels": ('int',), + "QPageSize.rectPoints": (), + "QPageSize.size": [('PySide2.QtGui.QPageSize.PageSizeId', 'PySide2.QtGui.QPageSize.Unit'), ('PySide2.QtGui.QPageSize.Unit',)], + "QPageSize.sizePixels": [('PySide2.QtGui.QPageSize.PageSizeId', 'int'), ('int',)], + "QPageSize.sizePoints": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.swap": ('PySide2.QtGui.QPageSize',), + "QPageSize.windowsId": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + + # class PySide2.QtGui.QPagedPaintDevice: + "QPagedPaintDevice.__init__": (), + "QPagedPaintDevice.devicePageLayout": [], + "QPagedPaintDevice.margins": (), + "QPagedPaintDevice.newPage": (), + "QPagedPaintDevice.pageLayout": (), + "QPagedPaintDevice.pageSize": (), + "QPagedPaintDevice.pageSizeMM": (), + "QPagedPaintDevice.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPagedPaintDevice.setPageLayout": ('PySide2.QtGui.QPageLayout',), + "QPagedPaintDevice.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit')], + "QPagedPaintDevice.setPageOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPagedPaintDevice.setPageSize": [('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPagedPaintDevice.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtGui.QPaintDevice: + "QPaintDevice.__init__": (), + "QPaintDevice.colorCount": (), + "QPaintDevice.depth": (), + "QPaintDevice.devType": (), + "QPaintDevice.devicePixelRatio": (), + "QPaintDevice.devicePixelRatioF": (), + "QPaintDevice.devicePixelRatioFScale": (), + "QPaintDevice.height": (), + "QPaintDevice.heightMM": (), + "QPaintDevice.initPainter": ('PySide2.QtGui.QPainter',), + "QPaintDevice.logicalDpiX": (), + "QPaintDevice.logicalDpiY": (), + "QPaintDevice.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDevice.paintEngine": (), + "QPaintDevice.paintingActive": (), + "QPaintDevice.physicalDpiX": (), + "QPaintDevice.physicalDpiY": (), + "QPaintDevice.redirected": ('PySide2.QtCore.QPoint',), + "QPaintDevice.sharedPainter": (), + "QPaintDevice.width": (), + "QPaintDevice.widthMM": (), + + # class PySide2.QtGui.QPaintDeviceWindow: + "QPaintDeviceWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDeviceWindow.event": ('PySide2.QtCore.QEvent',), + "QPaintDeviceWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QPaintDeviceWindow.paintEngine": (), + "QPaintDeviceWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPaintDeviceWindow.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + + # class PySide2.QtGui.QPaintEngine: + "QPaintEngine.__init__": ('PaintEngineFeatures',), + "QPaintEngine.begin": ('PySide2.QtGui.QPaintDevice',), + "QPaintEngine.clearDirty": ('DirtyFlags',), + "QPaintEngine.coordinateOffset": (), + "QPaintEngine.drawEllipse": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QPaintEngine.drawImage": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), + "QPaintEngine.drawLines": [('PySide2.QtCore.QLine', 'int'), ('PySide2.QtCore.QLineF', 'int')], + "QPaintEngine.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPaintEngine.drawPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), + "QPaintEngine.drawPoints": [('PySide2.QtCore.QPoint', 'int'), ('PySide2.QtCore.QPointF', 'int')], + "QPaintEngine.drawPolygon": [('PySide2.QtCore.QPoint', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode')], + "QPaintEngine.drawRects": [('PySide2.QtCore.QRect', 'int'), ('PySide2.QtCore.QRectF', 'int')], + "QPaintEngine.drawTextItem": ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), + "QPaintEngine.drawTiledPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), + "QPaintEngine.end": (), + "QPaintEngine.hasFeature": ('PaintEngineFeatures',), + "QPaintEngine.isActive": (), + "QPaintEngine.isExtended": (), + "QPaintEngine.paintDevice": (), + "QPaintEngine.painter": (), + "QPaintEngine.setActive": ('bool',), + "QPaintEngine.setDirty": ('DirtyFlags',), + "QPaintEngine.setSystemClip": ('PySide2.QtGui.QRegion',), + "QPaintEngine.setSystemRect": ('PySide2.QtCore.QRect',), + "QPaintEngine.syncState": (), + "QPaintEngine.systemClip": (), + "QPaintEngine.systemRect": (), + "QPaintEngine.testDirty": ('DirtyFlags',), + "QPaintEngine.type": (), + "QPaintEngine.updateState": ('PySide2.QtGui.QPaintEngineState',), + + # class PySide2.QtGui.QPaintEngineState: + "QPaintEngineState.__init__": (), + "QPaintEngineState.backgroundBrush": (), + "QPaintEngineState.backgroundMode": (), + "QPaintEngineState.brush": (), + "QPaintEngineState.brushNeedsResolving": (), + "QPaintEngineState.brushOrigin": (), + "QPaintEngineState.clipOperation": (), + "QPaintEngineState.clipPath": (), + "QPaintEngineState.clipRegion": (), + "QPaintEngineState.compositionMode": (), + "QPaintEngineState.font": (), + "QPaintEngineState.isClipEnabled": (), + "QPaintEngineState.matrix": (), + "QPaintEngineState.opacity": (), + "QPaintEngineState.painter": (), + "QPaintEngineState.pen": (), + "QPaintEngineState.penNeedsResolving": (), + "QPaintEngineState.renderHints": (), + "QPaintEngineState.state": (), + "QPaintEngineState.transform": (), + + # class PySide2.QtGui.QPaintEvent: + "QPaintEvent.__init__": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QPaintEvent.rect": (), + "QPaintEvent.region": (), + + # class PySide2.QtGui.QPainter: + "QPainter.__init__": [(), ('PySide2.QtGui.QPaintDevice',)], + "QPainter.background": (), + "QPainter.backgroundMode": (), + "QPainter.begin": ('PySide2.QtGui.QPaintDevice',), + "QPainter.beginNativePainting": (), + "QPainter.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str'), ('PySide2.QtCore.QRectF', 'int', 'str'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str')], + "QPainter.brush": (), + "QPainter.brushOrigin": (), + "QPainter.clipBoundingRect": (), + "QPainter.clipPath": (), + "QPainter.clipRegion": (), + "QPainter.combinedMatrix": (), + "QPainter.combinedTransform": (), + "QPainter.compositionMode": (), + "QPainter.device": (), + "QPainter.deviceMatrix": (), + "QPainter.deviceTransform": (), + "QPainter.drawArc": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawChord": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawConvexPolygon": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawEllipse": [('PySide2.QtCore.QPoint', 'int', 'int'), ('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawImage": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'ImageConversionFlags'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'ImageConversionFlags'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), ('int', 'int', 'PySide2.QtGui.QImage', 'int', 'int', 'int', 'int', 'ImageConversionFlags')], + "QPainter.drawLine": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int')], + "QPainter.drawLines": ['list'], + "QPainter.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPainter.drawPicture": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPicture'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPicture'), ('int', 'int', 'PySide2.QtGui.QPicture')], + "QPainter.drawPie": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmap": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmapFragments": ('PySide2.QtGui.QPainter.PixmapFragment', 'int', 'PySide2.QtGui.QPixmap', 'PixmapFragmentHints'), + "QPainter.drawPoint": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.drawPoints": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawPolygon": [('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.FillRule'), ('list', 'PySide2.QtCore.Qt.FillRule')], + "QPainter.drawPolyline": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawRects": ['list'], + "QPainter.drawRoundRect": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawRoundedRect": [('PySide2.QtCore.QRect', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('int', 'int', 'int', 'int', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainter.drawStaticText": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QStaticText'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QStaticText'), ('int', 'int', 'PySide2.QtGui.QStaticText')], + "QPainter.drawText": [('PySide2.QtCore.QPoint', 'str'), ('PySide2.QtCore.QPointF', 'str'), ('PySide2.QtCore.QRect', 'int', 'str', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'int', 'str', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str', 'PySide2.QtCore.QRect'), ('int', 'int', 'str')], + "QPainter.drawTextItem": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QTextItem'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), ('int', 'int', 'PySide2.QtGui.QTextItem')], + "QPainter.drawTiledPixmap": [('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int')], + "QPainter.end": (), + "QPainter.endNativePainting": (), + "QPainter.eraseRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.fillPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QBrush'), + "QPainter.fillRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.BrushStyle'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.GlobalColor'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QBrush'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QColor')], + "QPainter.font": (), + "QPainter.fontInfo": (), + "QPainter.fontMetrics": (), + "QPainter.hasClipping": (), + "QPainter.initFrom": ('PySide2.QtGui.QPaintDevice',), + "QPainter.isActive": (), + "QPainter.layoutDirection": (), + "QPainter.matrix": (), + "QPainter.matrixEnabled": (), + "QPainter.opacity": (), + "QPainter.paintEngine": (), + "QPainter.pen": (), + "QPainter.redirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.renderHints": (), + "QPainter.resetMatrix": (), + "QPainter.resetTransform": (), + "QPainter.restore": (), + "QPainter.restoreRedirected": ('PySide2.QtGui.QPaintDevice',), + "QPainter.rotate": ('float',), + "QPainter.save": (), + "QPainter.scale": ('float', 'float'), + "QPainter.setBackground": ('PySide2.QtGui.QBrush',), + "QPainter.setBackgroundMode": ('PySide2.QtCore.Qt.BGMode',), + "QPainter.setBrush": [('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtGui.QBrush',)], + "QPainter.setBrushOrigin": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.setClipPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ClipOperation'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ClipOperation'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ClipOperation')], + "QPainter.setClipRegion": ('PySide2.QtGui.QRegion', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipping": ('bool',), + "QPainter.setCompositionMode": ('PySide2.QtGui.QPainter.CompositionMode',), + "QPainter.setFont": ('PySide2.QtGui.QFont',), + "QPainter.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QPainter.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setMatrixEnabled": ('bool',), + "QPainter.setOpacity": ('float',), + "QPainter.setPen": [('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPainter.setRedirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QPainter.setRenderHints": ('RenderHints', 'bool'), + "QPainter.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.setViewTransformEnabled": ('bool',), + "QPainter.setViewport": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWindow": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWorldMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setWorldMatrixEnabled": ('bool',), + "QPainter.setWorldTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.shear": ('float', 'float'), + "QPainter.strokePath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen'), + "QPainter.testRenderHint": ('PySide2.QtGui.QPainter.RenderHint',), + "QPainter.transform": (), + "QPainter.translate": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainter.viewTransformEnabled": (), + "QPainter.viewport": (), + "QPainter.window": (), + "QPainter.worldMatrix": (), + "QPainter.worldMatrixEnabled": (), + "QPainter.worldTransform": (), + + # class PySide2.QtGui.QPainterPath: + "QPainterPath.__init__": [(), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.__copy__": (), + "QPainterPath.addEllipse": [('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.addPolygon": ('PySide2.QtGui.QPolygonF',), + "QPainterPath.addRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addRegion": ('PySide2.QtGui.QRegion',), + "QPainterPath.addRoundRect": [('PySide2.QtCore.QRectF', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QPainterPath.addRoundedRect": [('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('float', 'float', 'float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainterPath.addText": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QFont', 'str'), ('float', 'float', 'PySide2.QtGui.QFont', 'str')], + "QPainterPath.angleAtPercent": ('float',), + "QPainterPath.arcMoveTo": [('PySide2.QtCore.QRectF', 'float'), ('float', 'float', 'float', 'float', 'float')], + "QPainterPath.arcTo": [('PySide2.QtCore.QRectF', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.boundingRect": (), + "QPainterPath.closeSubpath": (), + "QPainterPath.connectPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.controlPointRect": (), + "QPainterPath.cubicTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.currentPosition": (), + "QPainterPath.elementAt": ('int',), + "QPainterPath.elementCount": (), + "QPainterPath.fillRule": (), + "QPainterPath.intersected": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.intersects": [('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.isEmpty": (), + "QPainterPath.length": (), + "QPainterPath.lineTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.percentAtLength": ('float',), + "QPainterPath.pointAtPercent": ('float',), + "QPainterPath.quadTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QPainterPath.setElementPositionAt": ('int', 'float', 'float'), + "QPainterPath.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QPainterPath.simplified": (), + "QPainterPath.slopeAtPercent": ('float',), + "QPainterPath.subtracted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.subtractedInverted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.swap": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.toFillPolygon": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toFillPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toReversed": (), + "QPainterPath.toSubpathPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.united": ('PySide2.QtGui.QPainterPath',), + + # class PySide2.QtGui.QPainterPathStroker: + "QPainterPathStroker.__init__": [(), ('PySide2.QtGui.QPen',)], + "QPainterPathStroker.capStyle": (), + "QPainterPathStroker.createStroke": ('PySide2.QtGui.QPainterPath',), + "QPainterPathStroker.curveThreshold": (), + "QPainterPathStroker.dashOffset": (), + "QPainterPathStroker.dashPattern": (), + "QPainterPathStroker.joinStyle": (), + "QPainterPathStroker.miterLimit": (), + "QPainterPathStroker.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPainterPathStroker.setCurveThreshold": ('float',), + "QPainterPathStroker.setDashOffset": ('float',), + "QPainterPathStroker.setDashPattern": [('PySide2.QtCore.Qt.PenStyle',), ('list',)], + "QPainterPathStroker.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPainterPathStroker.setMiterLimit": ('float',), + "QPainterPathStroker.setWidth": ('float',), + "QPainterPathStroker.width": (), + + # class PySide2.QtGui.QPalette: + "QPalette.__init__": [(), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette',)], + "QPalette.__copy__": (), + "QPalette.alternateBase": (), + "QPalette.background": (), + "QPalette.base": (), + "QPalette.brightText": (), + "QPalette.brush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.button": (), + "QPalette.buttonText": (), + "QPalette.cacheKey": (), + "QPalette.color": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.currentColorGroup": (), + "QPalette.dark": (), + "QPalette.foreground": (), + "QPalette.highlight": (), + "QPalette.highlightedText": (), + "QPalette.isBrushSet": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), + "QPalette.isCopyOf": ('PySide2.QtGui.QPalette',), + "QPalette.isEqual": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorGroup'), + "QPalette.light": (), + "QPalette.link": (), + "QPalette.linkVisited": (), + "QPalette.mid": (), + "QPalette.midlight": (), + "QPalette.resolve": [(), ('PySide2.QtGui.QPalette',), ('int',)], + "QPalette.setBrush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush')], + "QPalette.setColor": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor')], + "QPalette.setColorGroup": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), + "QPalette.setCurrentColorGroup": ('PySide2.QtGui.QPalette.ColorGroup',), + "QPalette.shadow": (), + "QPalette.swap": ('PySide2.QtGui.QPalette',), + "QPalette.text": (), + "QPalette.toolTipBase": (), + "QPalette.toolTipText": (), + "QPalette.window": (), + "QPalette.windowText": (), + + # class PySide2.QtGui.QPdfWriter: + "QPdfWriter.__init__": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPdfWriter.creator": (), + "QPdfWriter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPdfWriter.newPage": (), + "QPdfWriter.paintEngine": (), + "QPdfWriter.resolution": (), + "QPdfWriter.setCreator": ('str',), + "QPdfWriter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPdfWriter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPdfWriter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPdfWriter.setResolution": ('int',), + "QPdfWriter.setTitle": ('str',), + "QPdfWriter.title": (), + + # class PySide2.QtGui.QPen: + "QPen.__init__": [(), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QBrush', 'float', 'PySide2.QtCore.Qt.PenStyle', 'PySide2.QtCore.Qt.PenCapStyle', 'PySide2.QtCore.Qt.PenJoinStyle'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPen.__copy__": (), + "QPen.brush": (), + "QPen.capStyle": (), + "QPen.color": (), + "QPen.dashOffset": (), + "QPen.dashPattern": (), + "QPen.isCosmetic": (), + "QPen.isSolid": (), + "QPen.joinStyle": (), + "QPen.miterLimit": (), + "QPen.setBrush": ('PySide2.QtGui.QBrush',), + "QPen.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPen.setColor": ('PySide2.QtGui.QColor',), + "QPen.setCosmetic": ('bool',), + "QPen.setDashOffset": ('float',), + "QPen.setDashPattern": ('list',), + "QPen.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPen.setMiterLimit": ('float',), + "QPen.setStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QPen.setWidth": ('int',), + "QPen.setWidthF": ('float',), + "QPen.style": (), + "QPen.swap": ('PySide2.QtGui.QPen',), + "QPen.width": (), + "QPen.widthF": (), + + # class PySide2.QtGui.QPicture: + "QPicture.__init__": [('PySide2.QtGui.QPicture',), ('int',)], + "QPicture.__copy__": (), + "QPicture.boundingRect": (), + "QPicture.data": (), + "QPicture.devType": (), + "QPicture.inputFormatList": (), + "QPicture.inputFormats": (), + "QPicture.isNull": (), + "QPicture.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPicture.outputFormatList": (), + "QPicture.outputFormats": (), + "QPicture.paintEngine": (), + "QPicture.pictureFormat": ('str',), + "QPicture.play": ('PySide2.QtGui.QPainter',), + "QPicture.save": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.setBoundingRect": ('PySide2.QtCore.QRect',), + "QPicture.setData": ('str', 'int'), + "QPicture.size": (), + "QPicture.swap": ('PySide2.QtGui.QPicture',), + + # class PySide2.QtGui.QPictureIO: + "QPictureIO.__init__": [(), ('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPictureIO.description": (), + "QPictureIO.fileName": (), + "QPictureIO.format": (), + "QPictureIO.gamma": (), + "QPictureIO.inputFormats": (), + "QPictureIO.ioDevice": (), + "QPictureIO.outputFormats": (), + "QPictureIO.parameters": (), + "QPictureIO.picture": (), + "QPictureIO.pictureFormat": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPictureIO.quality": (), + "QPictureIO.read": (), + "QPictureIO.setDescription": ('str',), + "QPictureIO.setFileName": ('str',), + "QPictureIO.setFormat": ('str',), + "QPictureIO.setGamma": ('float',), + "QPictureIO.setIODevice": ('PySide2.QtCore.QIODevice',), + "QPictureIO.setParameters": ('str',), + "QPictureIO.setPicture": ('PySide2.QtGui.QPicture',), + "QPictureIO.setQuality": ('int',), + "QPictureIO.setStatus": ('int',), + "QPictureIO.status": (), + "QPictureIO.write": (), + + # class PySide2.QtGui.QPixelFormat: + "QPixelFormat.__init__": [(), ('PySide2.QtGui.QPixelFormat',), ('PySide2.QtGui.QPixelFormat.ColorModel', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.QtGui.QPixelFormat.AlphaUsage', 'PySide2.QtGui.QPixelFormat.AlphaPosition', 'PySide2.QtGui.QPixelFormat.AlphaPremultiplied', 'PySide2.QtGui.QPixelFormat.TypeInterpretation', 'PySide2.QtGui.QPixelFormat.ByteOrder', 'PySide2.support.signature.typing.Union[str, int]')], + "QPixelFormat.__copy__": (), + "QPixelFormat.alphaPosition": (), + "QPixelFormat.alphaSize": (), + "QPixelFormat.alphaUsage": (), + "QPixelFormat.bitsPerPixel": (), + "QPixelFormat.blackSize": (), + "QPixelFormat.blueSize": (), + "QPixelFormat.brightnessSize": (), + "QPixelFormat.byteOrder": (), + "QPixelFormat.channelCount": (), + "QPixelFormat.colorModel": (), + "QPixelFormat.cyanSize": (), + "QPixelFormat.greenSize": (), + "QPixelFormat.hueSize": (), + "QPixelFormat.lightnessSize": (), + "QPixelFormat.magentaSize": (), + "QPixelFormat.premultiplied": (), + "QPixelFormat.redSize": (), + "QPixelFormat.saturationSize": (), + "QPixelFormat.subEnum": (), + "QPixelFormat.typeInterpretation": (), + "QPixelFormat.yellowSize": (), + "QPixelFormat.yuvLayout": (), + + # class PySide2.QtGui.QPixmap: + "QPixmap.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',), ('PySide2.support.signature.typing.List',), ('int', 'int'), ('str', 'str', 'ImageConversionFlags')], + "QPixmap.__copy__": (), + "QPixmap.cacheKey": (), + "QPixmap.convertFromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPixmap.createHeuristicMask": ('bool',), + "QPixmap.createMaskFromColor": ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.MaskMode'), + "QPixmap.defaultDepth": (), + "QPixmap.depth": (), + "QPixmap.devType": (), + "QPixmap.devicePixelRatio": (), + "QPixmap.fill": [('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QPaintDevice', 'int', 'int')], + "QPixmap.fromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.fromImageInPlace": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.fromImageReader": ('PySide2.QtGui.QImageReader', 'ImageConversionFlags'), + "QPixmap.grabWidget": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QObject', 'int', 'int', 'int', 'int')], + "QPixmap.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QPixmap.hasAlpha": (), + "QPixmap.hasAlphaChannel": (), + "QPixmap.height": (), + "QPixmap.isNull": (), + "QPixmap.isQBitmap": (), + "QPixmap.load": ('str', 'str', 'ImageConversionFlags'), + "QPixmap.loadFromData": [('PySide2.QtCore.QByteArray', 'str', 'ImageConversionFlags'), ('PySide2.support.signature.typing.Union[str, int]', 'int', 'str', 'ImageConversionFlags')], + "QPixmap.mask": (), + "QPixmap.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPixmap.paintEngine": (), + "QPixmap.rect": (), + "QPixmap.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QPixmap.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scroll": [('int', 'int', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion'), ('int', 'int', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion')], + "QPixmap.setDevicePixelRatio": ('float',), + "QPixmap.setMask": ('PySide2.QtGui.QBitmap',), + "QPixmap.size": (), + "QPixmap.swap": ('PySide2.QtGui.QPixmap',), + "QPixmap.toImage": (), + "QPixmap.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QPixmap.width": (), + + # class PySide2.QtGui.QPixmapCache: + "QPixmapCache.__init__": (), + "QPixmapCache.cacheLimit": (), + "QPixmapCache.clear": (), + "QPixmapCache.find": [('PySide2.QtGui.QPixmapCache.Key',), ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), ('str',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.insert": [('PySide2.QtGui.QPixmap',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.remove": [('PySide2.QtGui.QPixmapCache.Key',), ('str',)], + "QPixmapCache.replace": ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), + "QPixmapCache.setCacheLimit": ('int',), + + # class PySide2.QtGui.QPolygon: + "QPolygon.__init__": [(), ('PySide2.QtCore.QRect', 'bool'), ('PySide2.QtGui.QPolygon',), ('int',), ('list',)], + "QPolygon.__copy__": (), + "QPolygon.__reduce__": (), + "QPolygon.append": [('PySide2.QtCore.QPoint',), ('list',)], + "QPolygon.at": ('int',), + "QPolygon.boundingRect": (), + "QPolygon.capacity": (), + "QPolygon.clear": (), + "QPolygon.constData": (), + "QPolygon.constFirst": (), + "QPolygon.constLast": (), + "QPolygon.contains": ('PySide2.QtCore.QPoint',), + "QPolygon.containsPoint": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.Qt.FillRule'), + "QPolygon.count": [(), ('PySide2.QtCore.QPoint',)], + "QPolygon.data": [], + "QPolygon.empty": (), + "QPolygon.endsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.fill": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.first": [], + "QPolygon.fromList": ('list',), + "QPolygon.front": (), + "QPolygon.indexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.insert": [('int', 'PySide2.QtCore.QPoint'), ('int', 'int', 'PySide2.QtCore.QPoint')], + "QPolygon.intersected": ('PySide2.QtGui.QPolygon',), + "QPolygon.isEmpty": (), + "QPolygon.isSharedWith": ('list',), + "QPolygon.last": [], + "QPolygon.lastIndexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.length": (), + "QPolygon.mid": ('int', 'int'), + "QPolygon.move": ('int', 'int'), + "QPolygon.pop_back": (), + "QPolygon.pop_front": (), + "QPolygon.prepend": ('PySide2.QtCore.QPoint',), + "QPolygon.push_back": ('PySide2.QtCore.QPoint',), + "QPolygon.push_front": ('PySide2.QtCore.QPoint',), + "QPolygon.remove": [('int',), ('int', 'int')], + "QPolygon.removeAll": ('PySide2.QtCore.QPoint',), + "QPolygon.removeAt": ('int',), + "QPolygon.removeFirst": (), + "QPolygon.removeLast": (), + "QPolygon.removeOne": ('PySide2.QtCore.QPoint',), + "QPolygon.replace": ('int', 'PySide2.QtCore.QPoint'), + "QPolygon.reserve": ('int',), + "QPolygon.resize": ('int',), + "QPolygon.setSharable": ('bool',), + "QPolygon.size": (), + "QPolygon.squeeze": (), + "QPolygon.startsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.subtracted": ('PySide2.QtGui.QPolygon',), + "QPolygon.swap": ('PySide2.QtGui.QPolygon',), + "QPolygon.takeAt": ('int',), + "QPolygon.takeFirst": (), + "QPolygon.takeLast": (), + "QPolygon.toList": (), + "QPolygon.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.united": ('PySide2.QtGui.QPolygon',), + "QPolygon.value": [('int',), ('int', 'PySide2.QtCore.QPoint')], + + # class PySide2.QtGui.QPolygonF: + "QPolygonF.__init__": [(), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('int',), ('list',)], + "QPolygonF.__copy__": (), + "QPolygonF.append": [('PySide2.QtCore.QPointF',), ('list',)], + "QPolygonF.at": ('int',), + "QPolygonF.boundingRect": (), + "QPolygonF.capacity": (), + "QPolygonF.clear": (), + "QPolygonF.constData": (), + "QPolygonF.constFirst": (), + "QPolygonF.constLast": (), + "QPolygonF.contains": ('PySide2.QtCore.QPointF',), + "QPolygonF.containsPoint": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.FillRule'), + "QPolygonF.count": [(), ('PySide2.QtCore.QPointF',)], + "QPolygonF.data": [], + "QPolygonF.empty": (), + "QPolygonF.endsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.fill": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.first": [], + "QPolygonF.fromList": ('list',), + "QPolygonF.front": (), + "QPolygonF.indexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.insert": [('int', 'PySide2.QtCore.QPointF'), ('int', 'int', 'PySide2.QtCore.QPointF')], + "QPolygonF.intersected": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.isClosed": (), + "QPolygonF.isEmpty": (), + "QPolygonF.isSharedWith": ('list',), + "QPolygonF.last": [], + "QPolygonF.lastIndexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.length": (), + "QPolygonF.mid": ('int', 'int'), + "QPolygonF.move": ('int', 'int'), + "QPolygonF.pop_back": (), + "QPolygonF.pop_front": (), + "QPolygonF.prepend": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_back": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_front": ('PySide2.QtCore.QPointF',), + "QPolygonF.remove": [('int',), ('int', 'int')], + "QPolygonF.removeAll": ('PySide2.QtCore.QPointF',), + "QPolygonF.removeAt": ('int',), + "QPolygonF.removeFirst": (), + "QPolygonF.removeLast": (), + "QPolygonF.removeOne": ('PySide2.QtCore.QPointF',), + "QPolygonF.replace": ('int', 'PySide2.QtCore.QPointF'), + "QPolygonF.reserve": ('int',), + "QPolygonF.resize": ('int',), + "QPolygonF.setSharable": ('bool',), + "QPolygonF.size": (), + "QPolygonF.squeeze": (), + "QPolygonF.startsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.subtracted": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.swap": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.takeAt": ('int',), + "QPolygonF.takeFirst": (), + "QPolygonF.takeLast": (), + "QPolygonF.toList": (), + "QPolygonF.toPolygon": (), + "QPolygonF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.united": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.value": [('int',), ('int', 'PySide2.QtCore.QPointF')], + + # class PySide2.QtGui.QPyTextObject: + "QPyTextObject.__init__": ('PySide2.QtCore.QObject',), + "QPyTextObject.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QPyTextObject.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QQuaternion: + "QQuaternion.__init__": [(), ('PySide2.QtGui.QQuaternion',), ('PySide2.QtGui.QVector4D',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QQuaternion.__copy__": (), + "QQuaternion.__reduce__": (), + "QQuaternion.conjugate": (), + "QQuaternion.conjugated": (), + "QQuaternion.dotProduct": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion'), + "QQuaternion.fromAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromAxisAndAngle": [('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QQuaternion.fromDirection": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromEulerAngles": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.fromRotationMatrix": ('PySide2.QtGui.QMatrix3x3',), + "QQuaternion.getAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.inverted": (), + "QQuaternion.isIdentity": (), + "QQuaternion.isNull": (), + "QQuaternion.length": (), + "QQuaternion.lengthSquared": (), + "QQuaternion.nlerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.normalize": (), + "QQuaternion.normalized": (), + "QQuaternion.rotatedVector": ('PySide2.QtGui.QVector3D',), + "QQuaternion.rotationTo": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.scalar": (), + "QQuaternion.setScalar": ('float',), + "QQuaternion.setVector": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.setX": ('float',), + "QQuaternion.setY": ('float',), + "QQuaternion.setZ": ('float',), + "QQuaternion.slerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.toEulerAngles": (), + "QQuaternion.toRotationMatrix": (), + "QQuaternion.toVector4D": (), + "QQuaternion.vector": (), + "QQuaternion.x": (), + "QQuaternion.y": (), + "QQuaternion.z": (), + + # class PySide2.QtGui.QRadialGradient: + "QRadialGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QRadialGradient',), ('float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QRadialGradient.__copy__": (), + "QRadialGradient.center": (), + "QRadialGradient.centerRadius": (), + "QRadialGradient.focalPoint": (), + "QRadialGradient.focalRadius": (), + "QRadialGradient.radius": (), + "QRadialGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setCenterRadius": ('float',), + "QRadialGradient.setFocalPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setFocalRadius": ('float',), + "QRadialGradient.setRadius": ('float',), + + # class PySide2.QtGui.QRasterWindow: + "QRasterWindow.__init__": ('PySide2.QtGui.QWindow',), + "QRasterWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QRasterWindow.redirected": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtGui.QRawFont: + "QRawFont.__init__": [(), ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), ('PySide2.QtGui.QRawFont',), ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference')], + "QRawFont.__copy__": (), + "QRawFont.advancesForGlyphIndexes": [('list',), ('list', 'LayoutFlags')], + "QRawFont.alphaMapForGlyph": ('int', 'PySide2.QtGui.QRawFont.AntialiasingType', 'PySide2.QtGui.QTransform'), + "QRawFont.ascent": (), + "QRawFont.averageCharWidth": (), + "QRawFont.boundingRect": ('int',), + "QRawFont.descent": (), + "QRawFont.familyName": (), + "QRawFont.fontTable": ('str',), + "QRawFont.fromFont": ('PySide2.QtGui.QFont', 'PySide2.QtGui.QFontDatabase.WritingSystem'), + "QRawFont.glyphIndexesForString": ('str',), + "QRawFont.hintingPreference": (), + "QRawFont.isValid": (), + "QRawFont.leading": (), + "QRawFont.lineThickness": (), + "QRawFont.loadFromData": ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.loadFromFile": ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.maxCharWidth": (), + "QRawFont.pathForGlyph": ('int',), + "QRawFont.pixelSize": (), + "QRawFont.setPixelSize": ('float',), + "QRawFont.style": (), + "QRawFont.styleName": (), + "QRawFont.supportedWritingSystems": (), + "QRawFont.supportsCharacter": [('PySide2.support.signature.typing.Union[str, int]',), ('int',)], + "QRawFont.swap": ('PySide2.QtGui.QRawFont',), + "QRawFont.underlinePosition": (), + "QRawFont.unitsPerEm": (), + "QRawFont.weight": (), + "QRawFont.xHeight": (), + + # class PySide2.QtGui.QRegExpValidator: + "QRegExpValidator.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRegExp', 'PySide2.QtCore.QObject')], + "QRegExpValidator.regExp": (), + "QRegExpValidator.setRegExp": ('PySide2.QtCore.QRegExp',), + "QRegExpValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QRegion: + "QRegion.__init__": [(), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion.RegionType'), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion.RegionType')], + "QRegion.__copy__": (), + "QRegion.boundingRect": (), + "QRegion.contains": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',)], + "QRegion.intersected": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.intersects": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.isEmpty": (), + "QRegion.isNull": (), + "QRegion.rectCount": (), + "QRegion.rects": (), + "QRegion.setRects": ('PySide2.QtCore.QRect', 'int'), + "QRegion.subtracted": ('PySide2.QtGui.QRegion',), + "QRegion.swap": ('PySide2.QtGui.QRegion',), + "QRegion.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.united": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.xored": ('PySide2.QtGui.QRegion',), + + # class PySide2.QtGui.QResizeEvent: + "QResizeEvent.__init__": ('PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QResizeEvent.oldSize": (), + "QResizeEvent.size": (), + + # class PySide2.QtGui.QScreen: + "QScreen.physicalDotsPerInchX": (), + "QScreen.angleBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation'), + "QScreen.availableGeometry": (), + "QScreen.availableSize": (), + "QScreen.availableVirtualGeometry": (), + "QScreen.availableVirtualSize": (), + "QScreen.depth": (), + "QScreen.devicePixelRatio": (), + "QScreen.geometry": (), + "QScreen.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QScreen.isLandscape": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.isPortrait": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.logicalDotsPerInch": (), + "QScreen.logicalDotsPerInchX": (), + "QScreen.logicalDotsPerInchY": (), + "QScreen.mapBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.name": (), + "QScreen.nativeOrientation": (), + "QScreen.orientation": (), + "QScreen.orientationUpdateMask": (), + "QScreen.physicalDotsPerInch": (), + "QScreen.physicalDotsPerInchY": (), + "QScreen.physicalSize": (), + "QScreen.primaryOrientation": (), + "QScreen.refreshRate": (), + "QScreen.setOrientationUpdateMask": ('ScreenOrientations',), + "QScreen.size": (), + "QScreen.transformBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.virtualGeometry": (), + "QScreen.virtualSiblings": (), + "QScreen.virtualSize": (), + + # class PySide2.QtGui.QSessionManager: + "QSessionManager.cancel": (), + "QSessionManager.allowsErrorInteraction": (), + "QSessionManager.allowsInteraction": (), + "QSessionManager.discardCommand": (), + "QSessionManager.isPhase2": (), + "QSessionManager.release": (), + "QSessionManager.requestPhase2": (), + "QSessionManager.restartCommand": (), + "QSessionManager.restartHint": (), + "QSessionManager.sessionId": (), + "QSessionManager.sessionKey": (), + "QSessionManager.setDiscardCommand": ('PySide2.support.signature.typing.List',), + "QSessionManager.setManagerProperty": [('str', 'PySide2.support.signature.typing.List'), ('str', 'str')], + "QSessionManager.setRestartCommand": ('PySide2.support.signature.typing.List',), + "QSessionManager.setRestartHint": ('PySide2.QtGui.QSessionManager.RestartHint',), + + # class PySide2.QtGui.QShortcutEvent: + "QShortcutEvent.__init__": ('PySide2.QtGui.QKeySequence', 'int', 'bool'), + + # class PySide2.QtGui.QShowEvent: + "QShowEvent.__init__": (), + + # class PySide2.QtGui.QStandardItem: + "QStandardItem.__init__": [(), ('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QStandardItem',), ('int', 'int'), ('str',)], + "QStandardItem.accessibleDescription": (), + "QStandardItem.accessibleText": (), + "QStandardItem.appendColumn": ('list',), + "QStandardItem.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItem.appendRows": ('list',), + "QStandardItem.background": (), + "QStandardItem.checkState": (), + "QStandardItem.child": ('int', 'int'), + "QStandardItem.clone": (), + "QStandardItem.column": (), + "QStandardItem.columnCount": (), + "QStandardItem.data": ('int',), + "QStandardItem.emitDataChanged": (), + "QStandardItem.flags": (), + "QStandardItem.font": (), + "QStandardItem.foreground": (), + "QStandardItem.hasChildren": (), + "QStandardItem.icon": (), + "QStandardItem.index": (), + "QStandardItem.insertColumn": ('int', 'list'), + "QStandardItem.insertColumns": ('int', 'int'), + "QStandardItem.insertRow": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItem.insertRows": [('int', 'int'), ('int', 'list')], + "QStandardItem.isAutoTristate": (), + "QStandardItem.isCheckable": (), + "QStandardItem.isDragEnabled": (), + "QStandardItem.isDropEnabled": (), + "QStandardItem.isEditable": (), + "QStandardItem.isEnabled": (), + "QStandardItem.isSelectable": (), + "QStandardItem.isTristate": (), + "QStandardItem.isUserTristate": (), + "QStandardItem.model": (), + "QStandardItem.parent": (), + "QStandardItem.read": ('PySide2.QtCore.QDataStream',), + "QStandardItem.removeColumn": ('int',), + "QStandardItem.removeColumns": ('int', 'int'), + "QStandardItem.removeRow": ('int',), + "QStandardItem.removeRows": ('int', 'int'), + "QStandardItem.row": (), + "QStandardItem.rowCount": (), + "QStandardItem.setAccessibleDescription": ('str',), + "QStandardItem.setAccessibleText": ('str',), + "QStandardItem.setAutoTristate": ('bool',), + "QStandardItem.setBackground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QStandardItem.setCheckable": ('bool',), + "QStandardItem.setChild": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItem.setColumnCount": ('int',), + "QStandardItem.setData": ('PySide2.support.signature.typing.Any', 'int'), + "QStandardItem.setDragEnabled": ('bool',), + "QStandardItem.setDropEnabled": ('bool',), + "QStandardItem.setEditable": ('bool',), + "QStandardItem.setEnabled": ('bool',), + "QStandardItem.setFlags": ('ItemFlags',), + "QStandardItem.setFont": ('PySide2.QtGui.QFont',), + "QStandardItem.setForeground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setIcon": ('PySide2.QtGui.QIcon',), + "QStandardItem.setRowCount": ('int',), + "QStandardItem.setSelectable": ('bool',), + "QStandardItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QStandardItem.setStatusTip": ('str',), + "QStandardItem.setText": ('str',), + "QStandardItem.setTextAlignment": ('Alignment',), + "QStandardItem.setToolTip": ('str',), + "QStandardItem.setTristate": ('bool',), + "QStandardItem.setUserTristate": ('bool',), + "QStandardItem.setWhatsThis": ('str',), + "QStandardItem.sizeHint": (), + "QStandardItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItem.statusTip": (), + "QStandardItem.takeChild": ('int', 'int'), + "QStandardItem.takeColumn": ('int',), + "QStandardItem.takeRow": ('int',), + "QStandardItem.text": (), + "QStandardItem.textAlignment": (), + "QStandardItem.toolTip": (), + "QStandardItem.type": (), + "QStandardItem.whatsThis": (), + "QStandardItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QStandardItemModel: + "QStandardItemModel.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QStandardItemModel.appendColumn": ('list',), + "QStandardItemModel.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItemModel.clear": (), + "QStandardItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStandardItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.findItems": ('str', 'MatchFlags', 'int'), + "QStandardItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QStandardItemModel.horizontalHeaderItem": ('int',), + "QStandardItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.indexFromItem": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.insertColumn": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'list')], + "QStandardItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.insertRow": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.invisibleRootItem": (), + "QStandardItemModel.item": ('int', 'int'), + "QStandardItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemPrototype": (), + "QStandardItemModel.mimeData": ('PySide2.support.signature.typing.List',), + "QStandardItemModel.mimeTypes": (), + "QStandardItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QStandardItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.setColumnCount": ('int',), + "QStandardItemModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QStandardItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QStandardItemModel.setHorizontalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setHorizontalHeaderLabels": ('PySide2.support.signature.typing.List',), + "QStandardItemModel.setItem": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QStandardItemModel.setItemPrototype": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.setItemRoleNames": ('dict',), + "QStandardItemModel.setRowCount": ('int',), + "QStandardItemModel.setSortRole": ('int',), + "QStandardItemModel.setVerticalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setVerticalHeaderLabels": ('PySide2.support.signature.typing.List',), + "QStandardItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItemModel.sortRole": (), + "QStandardItemModel.supportedDropActions": (), + "QStandardItemModel.takeColumn": ('int',), + "QStandardItemModel.takeHorizontalHeaderItem": ('int',), + "QStandardItemModel.takeItem": ('int', 'int'), + "QStandardItemModel.takeRow": ('int',), + "QStandardItemModel.takeVerticalHeaderItem": ('int',), + "QStandardItemModel.verticalHeaderItem": ('int',), + + # class PySide2.QtGui.QStaticText: + "QStaticText.__init__": [(), ('PySide2.QtGui.QStaticText',), ('str',)], + "QStaticText.__copy__": (), + "QStaticText.performanceHint": (), + "QStaticText.prepare": ('PySide2.QtGui.QTransform', 'PySide2.QtGui.QFont'), + "QStaticText.setPerformanceHint": ('PySide2.QtGui.QStaticText.PerformanceHint',), + "QStaticText.setText": ('str',), + "QStaticText.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QStaticText.setTextOption": ('PySide2.QtGui.QTextOption',), + "QStaticText.setTextWidth": ('float',), + "QStaticText.size": (), + "QStaticText.swap": ('PySide2.QtGui.QStaticText',), + "QStaticText.text": (), + "QStaticText.textFormat": (), + "QStaticText.textOption": (), + "QStaticText.textWidth": (), + + # class PySide2.QtGui.QStatusTipEvent: + "QStatusTipEvent.__init__": ('str',), + "QStatusTipEvent.tip": (), + + # class PySide2.QtGui.QStringListModel: + "QStringListModel.__init__": [('PySide2.QtCore.QObject',), ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QObject')], + "QStringListModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStringListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QStringListModel.setStringList": ('PySide2.support.signature.typing.List',), + "QStringListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStringListModel.stringList": (), + "QStringListModel.supportedDropActions": (), + + # class PySide2.QtGui.QStyleHints: + "QStyleHints.setFocusOnTouchRelease": (), + "QStyleHints.cursorFlashTime": (), + "QStyleHints.fontSmoothingGamma": (), + "QStyleHints.keyboardAutoRepeatRate": (), + "QStyleHints.keyboardInputInterval": (), + "QStyleHints.mouseDoubleClickInterval": (), + "QStyleHints.mousePressAndHoldInterval": (), + "QStyleHints.passwordMaskCharacter": (), + "QStyleHints.passwordMaskDelay": (), + "QStyleHints.setCursorFlashTime": ('int',), + "QStyleHints.setKeyboardInputInterval": ('int',), + "QStyleHints.setMouseDoubleClickInterval": ('int',), + "QStyleHints.setStartDragDistance": ('int',), + "QStyleHints.setStartDragTime": ('int',), + "QStyleHints.showIsFullScreen": (), + "QStyleHints.showIsMaximized": (), + "QStyleHints.singleClickActivation": (), + "QStyleHints.startDragDistance": (), + "QStyleHints.startDragTime": (), + "QStyleHints.startDragVelocity": (), + "QStyleHints.tabFocusBehavior": (), + "QStyleHints.useRtlExtensions": (), + + # class PySide2.QtGui.QSurface: + "QSurface.__init__": ('PySide2.QtGui.QSurface.SurfaceClass',), + "QSurface.format": (), + "QSurface.size": (), + "QSurface.supportsOpenGL": (), + "QSurface.surfaceClass": (), + "QSurface.surfaceHandle": (), + "QSurface.surfaceType": (), + + # class PySide2.QtGui.QSurfaceFormat: + "QSurfaceFormat.__init__": [(), ('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat',)], + "QSurfaceFormat.__copy__": (), + "QSurfaceFormat.alphaBufferSize": (), + "QSurfaceFormat.blueBufferSize": (), + "QSurfaceFormat.defaultFormat": (), + "QSurfaceFormat.depthBufferSize": (), + "QSurfaceFormat.greenBufferSize": (), + "QSurfaceFormat.hasAlpha": (), + "QSurfaceFormat.majorVersion": (), + "QSurfaceFormat.minorVersion": (), + "QSurfaceFormat.options": (), + "QSurfaceFormat.profile": (), + "QSurfaceFormat.redBufferSize": (), + "QSurfaceFormat.renderableType": (), + "QSurfaceFormat.samples": (), + "QSurfaceFormat.setAlphaBufferSize": ('int',), + "QSurfaceFormat.setBlueBufferSize": ('int',), + "QSurfaceFormat.setDefaultFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QSurfaceFormat.setDepthBufferSize": ('int',), + "QSurfaceFormat.setGreenBufferSize": ('int',), + "QSurfaceFormat.setMajorVersion": ('int',), + "QSurfaceFormat.setMinorVersion": ('int',), + "QSurfaceFormat.setOption": [('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat.FormatOption', 'bool')], + "QSurfaceFormat.setOptions": ('FormatOptions',), + "QSurfaceFormat.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QSurfaceFormat.setRedBufferSize": ('int',), + "QSurfaceFormat.setRenderableType": ('PySide2.QtGui.QSurfaceFormat.RenderableType',), + "QSurfaceFormat.setSamples": ('int',), + "QSurfaceFormat.setStencilBufferSize": ('int',), + "QSurfaceFormat.setStereo": ('bool',), + "QSurfaceFormat.setSwapBehavior": ('PySide2.QtGui.QSurfaceFormat.SwapBehavior',), + "QSurfaceFormat.setSwapInterval": ('int',), + "QSurfaceFormat.setVersion": ('int', 'int'), + "QSurfaceFormat.stencilBufferSize": (), + "QSurfaceFormat.stereo": (), + "QSurfaceFormat.swapBehavior": (), + "QSurfaceFormat.swapInterval": (), + "QSurfaceFormat.testOption": [('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat.FormatOption',)], + "QSurfaceFormat.version": (), + + # class PySide2.QtGui.QSyntaxHighlighter: + "QSyntaxHighlighter.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QTextDocument',)], + "QSyntaxHighlighter.currentBlock": (), + "QSyntaxHighlighter.currentBlockState": (), + "QSyntaxHighlighter.currentBlockUserData": (), + "QSyntaxHighlighter.document": (), + "QSyntaxHighlighter.format": ('int',), + "QSyntaxHighlighter.highlightBlock": ('str',), + "QSyntaxHighlighter.previousBlockState": (), + "QSyntaxHighlighter.rehighlight": (), + "QSyntaxHighlighter.rehighlightBlock": ('PySide2.QtGui.QTextBlock',), + "QSyntaxHighlighter.setCurrentBlockState": ('int',), + "QSyntaxHighlighter.setCurrentBlockUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QSyntaxHighlighter.setDocument": ('PySide2.QtGui.QTextDocument',), + "QSyntaxHighlighter.setFormat": [('int', 'int', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QFont'), ('int', 'int', 'PySide2.QtGui.QTextCharFormat')], + + # class PySide2.QtGui.QTabletEvent: + "QTabletEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'KeyboardModifiers', 'int'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'KeyboardModifiers', 'int', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons')], + "QTabletEvent.button": (), + "QTabletEvent.buttons": (), + "QTabletEvent.device": (), + "QTabletEvent.global"+"Y": (), + "QTabletEvent.globalPos": (), + "QTabletEvent.globalPosF": (), + "QTabletEvent.globalX": (), + "QTabletEvent.hiResGlobal"+"Y": (), + "QTabletEvent.hiResGlobalX": (), + "QTabletEvent.pointerType": (), + "QTabletEvent.pos": (), + "QTabletEvent.posF": (), + "QTabletEvent.pressure": (), + "QTabletEvent.rotation": (), + "QTabletEvent.tangentialPressure": (), + "QTabletEvent.uniqueId": (), + "QTabletEvent.x": (), + "QTabletEvent.xTilt": (), + "QTabletEvent.y": (), + "QTabletEvent.yTilt": (), + "QTabletEvent.z": (), + + # class PySide2.QtGui.QTextBlock: + "QTextBlock.__init__": [(), ('PySide2.QtGui.QTextBlock',)], + "QTextBlock.__copy__": (), + "QTextBlock.begin": (), + "QTextBlock.blockFormat": (), + "QTextBlock.blockFormatIndex": (), + "QTextBlock.blockNumber": (), + "QTextBlock.charFormat": (), + "QTextBlock.charFormatIndex": (), + "QTextBlock.clearLayout": (), + "QTextBlock.contains": ('int',), + "QTextBlock.document": (), + "QTextBlock.end": (), + "QTextBlock.firstLineNumber": (), + "QTextBlock.fragmentIndex": (), + "QTextBlock.isValid": (), + "QTextBlock.isVisible": (), + "QTextBlock.layout": (), + "QTextBlock.length": (), + "QTextBlock.lineCount": (), + "QTextBlock.next": (), + "QTextBlock.position": (), + "QTextBlock.previous": (), + "QTextBlock.revision": (), + "QTextBlock.setLineCount": ('int',), + "QTextBlock.setRevision": ('int',), + "QTextBlock.setUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QTextBlock.setUserState": ('int',), + "QTextBlock.setVisible": ('bool',), + "QTextBlock.text": (), + "QTextBlock.textDirection": (), + "QTextBlock.textFormats": (), + "QTextBlock.textList": (), + "QTextBlock.userData": (), + "QTextBlock.userState": (), + + # class PySide2.QtGui.QTextBlockFormat: + "QTextBlockFormat.__init__": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextBlockFormat.__copy__": (), + "QTextBlockFormat.alignment": (), + "QTextBlockFormat.bottomMargin": (), + "QTextBlockFormat.indent": (), + "QTextBlockFormat.isValid": (), + "QTextBlockFormat.leftMargin": (), + "QTextBlockFormat.lineHeight": [(), ('float', 'float')], + "QTextBlockFormat.lineHeightType": (), + "QTextBlockFormat.nonBreakableLines": (), + "QTextBlockFormat.pageBreakPolicy": (), + "QTextBlockFormat.rightMargin": (), + "QTextBlockFormat.setAlignment": ('Alignment',), + "QTextBlockFormat.setBottomMargin": ('float',), + "QTextBlockFormat.setIndent": ('int',), + "QTextBlockFormat.setLeftMargin": ('float',), + "QTextBlockFormat.setLineHeight": ('float', 'int'), + "QTextBlockFormat.setNonBreakableLines": ('bool',), + "QTextBlockFormat.setPageBreakPolicy": ('PageBreakFlags',), + "QTextBlockFormat.setRightMargin": ('float',), + "QTextBlockFormat.setTabPositions": ('list',), + "QTextBlockFormat.setTextIndent": ('float',), + "QTextBlockFormat.setTopMargin": ('float',), + "QTextBlockFormat.tabPositions": (), + "QTextBlockFormat.textIndent": (), + "QTextBlockFormat.topMargin": (), + + # class PySide2.QtGui.QTextBlockGroup: + "QTextBlockGroup.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextBlockGroup.blockFormatChanged": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockInserted": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockList": (), + "QTextBlockGroup.blockRemoved": ('PySide2.QtGui.QTextBlock',), + + # class PySide2.QtGui.QTextBlockUserData: + "QTextBlockUserData.__init__": (), + + # class PySide2.QtGui.QTextCharFormat: + "QTextCharFormat.__init__": [(), ('PySide2.QtGui.QTextCharFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextCharFormat.__copy__": (), + "QTextCharFormat.anchorHref": (), + "QTextCharFormat.anchorName": (), + "QTextCharFormat.anchorNames": (), + "QTextCharFormat.font": (), + "QTextCharFormat.fontCapitalization": (), + "QTextCharFormat.fontFamily": (), + "QTextCharFormat.fontFixedPitch": (), + "QTextCharFormat.fontHintingPreference": (), + "QTextCharFormat.fontItalic": (), + "QTextCharFormat.fontKerning": (), + "QTextCharFormat.fontLetterSpacing": (), + "QTextCharFormat.fontLetterSpacingType": (), + "QTextCharFormat.fontOverline": (), + "QTextCharFormat.fontPointSize": (), + "QTextCharFormat.fontStretch": (), + "QTextCharFormat.fontStrikeOut": (), + "QTextCharFormat.fontStyleHint": (), + "QTextCharFormat.fontStyleStrategy": (), + "QTextCharFormat.fontUnderline": (), + "QTextCharFormat.fontWeight": (), + "QTextCharFormat.fontWordSpacing": (), + "QTextCharFormat.isAnchor": (), + "QTextCharFormat.isValid": (), + "QTextCharFormat.setAnchor": ('bool',), + "QTextCharFormat.setAnchorHref": ('str',), + "QTextCharFormat.setAnchorName": ('str',), + "QTextCharFormat.setAnchorNames": ('PySide2.support.signature.typing.List',), + "QTextCharFormat.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior')], + "QTextCharFormat.setFontCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QTextCharFormat.setFontFamily": ('str',), + "QTextCharFormat.setFontFixedPitch": ('bool',), + "QTextCharFormat.setFontHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QTextCharFormat.setFontItalic": ('bool',), + "QTextCharFormat.setFontKerning": ('bool',), + "QTextCharFormat.setFontLetterSpacing": ('float',), + "QTextCharFormat.setFontLetterSpacingType": ('PySide2.QtGui.QFont.SpacingType',), + "QTextCharFormat.setFontOverline": ('bool',), + "QTextCharFormat.setFontPointSize": ('float',), + "QTextCharFormat.setFontStretch": ('int',), + "QTextCharFormat.setFontStrikeOut": ('bool',), + "QTextCharFormat.setFontStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QTextCharFormat.setFontStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QTextCharFormat.setFontUnderline": ('bool',), + "QTextCharFormat.setFontWeight": ('int',), + "QTextCharFormat.setFontWordSpacing": ('float',), + "QTextCharFormat.setTableCellColumnSpan": ('int',), + "QTextCharFormat.setTableCellRowSpan": ('int',), + "QTextCharFormat.setTextOutline": ('PySide2.QtGui.QPen',), + "QTextCharFormat.setToolTip": ('str',), + "QTextCharFormat.setUnderlineColor": ('PySide2.QtGui.QColor',), + "QTextCharFormat.setUnderlineStyle": ('PySide2.QtGui.QTextCharFormat.UnderlineStyle',), + "QTextCharFormat.setVerticalAlignment": ('PySide2.QtGui.QTextCharFormat.VerticalAlignment',), + "QTextCharFormat.tableCellColumnSpan": (), + "QTextCharFormat.tableCellRowSpan": (), + "QTextCharFormat.textOutline": (), + "QTextCharFormat.toolTip": (), + "QTextCharFormat.underlineColor": (), + "QTextCharFormat.underlineStyle": (), + "QTextCharFormat.verticalAlignment": (), + + # class PySide2.QtGui.QTextCursor: + "QTextCursor.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextFrame',)], + "QTextCursor.__copy__": (), + "QTextCursor.anchor": (), + "QTextCursor.atBlockEnd": (), + "QTextCursor.atBlockStart": (), + "QTextCursor.atEnd": (), + "QTextCursor.atStart": (), + "QTextCursor.beginEditBlock": (), + "QTextCursor.block": (), + "QTextCursor.blockCharFormat": (), + "QTextCursor.blockFormat": (), + "QTextCursor.blockNumber": (), + "QTextCursor.charFormat": (), + "QTextCursor.clearSelection": (), + "QTextCursor.columnNumber": (), + "QTextCursor.createList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.currentFrame": (), + "QTextCursor.currentList": (), + "QTextCursor.currentTable": (), + "QTextCursor.deleteChar": (), + "QTextCursor.deletePreviousChar": (), + "QTextCursor.document": (), + "QTextCursor.endEditBlock": (), + "QTextCursor.hasComplexSelection": (), + "QTextCursor.hasSelection": (), + "QTextCursor.insertBlock": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextBlockFormat', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.insertFragment": ('PySide2.QtGui.QTextDocumentFragment',), + "QTextCursor.insertFrame": ('PySide2.QtGui.QTextFrameFormat',), + "QTextCursor.insertHtml": ('str',), + "QTextCursor.insertImage": [('PySide2.QtGui.QImage', 'str'), ('PySide2.QtGui.QTextImageFormat',), ('PySide2.QtGui.QTextImageFormat', 'PySide2.QtGui.QTextFrameFormat.Position'), ('str',)], + "QTextCursor.insertList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.insertTable": [('int', 'int'), ('int', 'int', 'PySide2.QtGui.QTextTableFormat')], + "QTextCursor.insertText": [('str',), ('str', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.isCopyOf": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.isNull": (), + "QTextCursor.joinPreviousEditBlock": (), + "QTextCursor.keepPositionOnInsert": (), + "QTextCursor.mergeBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.mergeBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.mergeCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.movePosition": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode', 'int'), + "QTextCursor.position": (), + "QTextCursor.positionInBlock": (), + "QTextCursor.removeSelectedText": (), + "QTextCursor.select": ('PySide2.QtGui.QTextCursor.SelectionType',), + "QTextCursor.selectedTableCells": ('int', 'int', 'int', 'int'), + "QTextCursor.selectedText": (), + "QTextCursor.selection": (), + "QTextCursor.selectionEnd": (), + "QTextCursor.selectionStart": (), + "QTextCursor.setBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.setCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setKeepPositionOnInsert": ('bool',), + "QTextCursor.setPosition": ('int', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextCursor.setVerticalMovementX": ('int',), + "QTextCursor.setVisualNavigation": ('bool',), + "QTextCursor.swap": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.verticalMovementX": (), + "QTextCursor.visualNavigation": (), + + # class PySide2.QtGui.QTextDocument: + "QTextDocument.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextDocument.addResource": ('int', 'PySide2.QtCore.QUrl', 'PySide2.support.signature.typing.Any'), + "QTextDocument.adjustSize": (), + "QTextDocument.allFormats": (), + "QTextDocument.availableRedoSteps": (), + "QTextDocument.availableUndoSteps": (), + "QTextDocument.baseUrl": (), + "QTextDocument.begin": (), + "QTextDocument.blockCount": (), + "QTextDocument.characterAt": ('int',), + "QTextDocument.characterCount": (), + "QTextDocument.clear": (), + "QTextDocument.clearUndoRedoStacks": ('PySide2.QtGui.QTextDocument.Stacks',), + "QTextDocument.clone": ('PySide2.QtCore.QObject',), + "QTextDocument.createObject": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.defaultCursorMoveStyle": (), + "QTextDocument.defaultFont": (), + "QTextDocument.defaultStyleSheet": (), + "QTextDocument.defaultTextOption": (), + "QTextDocument.documentLayout": (), + "QTextDocument.documentMargin": (), + "QTextDocument.drawContents": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QTextDocument.end": (), + "QTextDocument.find": [('PySide2.QtCore.QRegExp', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('PySide2.QtCore.QRegExp', 'int', 'FindFlags'), ('str', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('str', 'int', 'FindFlags')], + "QTextDocument.findBlock": ('int',), + "QTextDocument.findBlockByLineNumber": ('int',), + "QTextDocument.findBlockByNumber": ('int',), + "QTextDocument.firstBlock": (), + "QTextDocument.frameAt": ('int',), + "QTextDocument.idealWidth": (), + "QTextDocument.indentWidth": (), + "QTextDocument.isEmpty": (), + "QTextDocument.isModified": (), + "QTextDocument.isRedoAvailable": (), + "QTextDocument.isUndoAvailable": (), + "QTextDocument.isUndoRedoEnabled": (), + "QTextDocument.lastBlock": (), + "QTextDocument.lineCount": (), + "QTextDocument.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.markContentsDirty": ('int', 'int'), + "QTextDocument.maximumBlockCount": (), + "QTextDocument.metaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation',), + "QTextDocument.object": ('int',), + "QTextDocument.objectForFormat": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.pageCount": (), + "QTextDocument.pageSize": (), + "QTextDocument.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextDocument.redo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.resource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.revision": (), + "QTextDocument.rootFrame": (), + "QTextDocument.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QTextDocument.setDefaultCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextDocument.setDefaultFont": ('PySide2.QtGui.QFont',), + "QTextDocument.setDefaultStyleSheet": ('str',), + "QTextDocument.setDefaultTextOption": ('PySide2.QtGui.QTextOption',), + "QTextDocument.setDocumentLayout": ('PySide2.QtGui.QAbstractTextDocumentLayout',), + "QTextDocument.setDocumentMargin": ('float',), + "QTextDocument.setHtml": ('str',), + "QTextDocument.setIndentWidth": ('float',), + "QTextDocument.setMaximumBlockCount": ('int',), + "QTextDocument.setMetaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation', 'str'), + "QTextDocument.setModified": ('bool',), + "QTextDocument.setPageSize": ('PySide2.QtCore.QSizeF',), + "QTextDocument.setPlainText": ('str',), + "QTextDocument.setTextWidth": ('float',), + "QTextDocument.setUndoRedoEnabled": ('bool',), + "QTextDocument.setUseDesignMetrics": ('bool',), + "QTextDocument.size": (), + "QTextDocument.textWidth": (), + "QTextDocument.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocument.toPlainText": (), + "QTextDocument.undo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.useDesignMetrics": (), + + # class PySide2.QtGui.QTextDocumentFragment: + "QTextDocumentFragment.__init__": [(), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + "QTextDocumentFragment.__copy__": (), + "QTextDocumentFragment.fromHtml": [('str',), ('str', 'PySide2.QtGui.QTextDocument')], + "QTextDocumentFragment.fromPlainText": ('str',), + "QTextDocumentFragment.isEmpty": (), + "QTextDocumentFragment.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocumentFragment.toPlainText": (), + + # class PySide2.QtGui.QTextDocumentWriter: + "QTextDocumentWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QTextDocumentWriter.codec": (), + "QTextDocumentWriter.device": (), + "QTextDocumentWriter.fileName": (), + "QTextDocumentWriter.format": (), + "QTextDocumentWriter.setCodec": ('PySide2.QtCore.QTextCodec',), + "QTextDocumentWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextDocumentWriter.setFileName": ('str',), + "QTextDocumentWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QTextDocumentWriter.supportedDocumentFormats": (), + "QTextDocumentWriter.write": [('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + + # class PySide2.QtGui.QTextFormat: + "QTextFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('int',)], + "QTextFormat.__copy__": (), + "QTextFormat.background": (), + "QTextFormat.boolProperty": ('int',), + "QTextFormat.brushProperty": ('int',), + "QTextFormat.clearBackground": (), + "QTextFormat.clearForeground": (), + "QTextFormat.clearProperty": ('int',), + "QTextFormat.colorProperty": ('int',), + "QTextFormat.doubleProperty": ('int',), + "QTextFormat.foreground": (), + "QTextFormat.hasProperty": ('int',), + "QTextFormat.intProperty": ('int',), + "QTextFormat.isBlockFormat": (), + "QTextFormat.isCharFormat": (), + "QTextFormat.isEmpty": (), + "QTextFormat.isFrameFormat": (), + "QTextFormat.isImageFormat": (), + "QTextFormat.isListFormat": (), + "QTextFormat.isTableCellFormat": (), + "QTextFormat.isTableFormat": (), + "QTextFormat.isValid": (), + "QTextFormat.layoutDirection": (), + "QTextFormat.lengthProperty": ('int',), + "QTextFormat.lengthVectorProperty": ('int',), + "QTextFormat.merge": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.objectIndex": (), + "QTextFormat.objectType": (), + "QTextFormat.penProperty": ('int',), + "QTextFormat.properties": (), + "QTextFormat.property": ('int',), + "QTextFormat.propertyCount": (), + "QTextFormat.setBackground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setForeground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextFormat.setObjectIndex": ('int',), + "QTextFormat.setObjectType": ('int',), + "QTextFormat.setProperty": [('int', 'PySide2.support.signature.typing.Any'), ('int', 'list')], + "QTextFormat.stringProperty": ('int',), + "QTextFormat.swap": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.toBlockFormat": (), + "QTextFormat.toCharFormat": (), + "QTextFormat.toFrameFormat": (), + "QTextFormat.toImageFormat": (), + "QTextFormat.toListFormat": (), + "QTextFormat.toTableCellFormat": (), + "QTextFormat.toTableFormat": (), + "QTextFormat.type": (), + + # class PySide2.QtGui.QTextFragment: + "QTextFragment.__init__": [(), ('PySide2.QtGui.QTextFragment',)], + "QTextFragment.__copy__": (), + "QTextFragment.charFormat": (), + "QTextFragment.charFormatIndex": (), + "QTextFragment.contains": ('int',), + "QTextFragment.isValid": (), + "QTextFragment.length": (), + "QTextFragment.position": (), + "QTextFragment.text": (), + + # class PySide2.QtGui.QTextFrame: + "QTextFrame.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextFrame.begin": (), + "QTextFrame.childFrames": (), + "QTextFrame.end": (), + "QTextFrame.firstCursorPosition": (), + "QTextFrame.firstPosition": (), + "QTextFrame.frameFormat": (), + "QTextFrame.lastCursorPosition": (), + "QTextFrame.lastPosition": (), + "QTextFrame.parentFrame": (), + "QTextFrame.setFrameFormat": ('PySide2.QtGui.QTextFrameFormat',), + + # class PySide2.QtGui.QTextFrameFormat: + "QTextFrameFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextFrameFormat',)], + "QTextFrameFormat.__copy__": (), + "QTextFrameFormat.border": (), + "QTextFrameFormat.borderBrush": (), + "QTextFrameFormat.borderStyle": (), + "QTextFrameFormat.bottomMargin": (), + "QTextFrameFormat.height": (), + "QTextFrameFormat.isValid": (), + "QTextFrameFormat.leftMargin": (), + "QTextFrameFormat.margin": (), + "QTextFrameFormat.padding": (), + "QTextFrameFormat.pageBreakPolicy": (), + "QTextFrameFormat.position": (), + "QTextFrameFormat.rightMargin": (), + "QTextFrameFormat.setBorder": ('float',), + "QTextFrameFormat.setBorderBrush": ('PySide2.QtGui.QBrush',), + "QTextFrameFormat.setBorderStyle": ('PySide2.QtGui.QTextFrameFormat.BorderStyle',), + "QTextFrameFormat.setBottomMargin": ('float',), + "QTextFrameFormat.setHeight": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.setLeftMargin": ('float',), + "QTextFrameFormat.setMargin": ('float',), + "QTextFrameFormat.setPadding": ('float',), + "QTextFrameFormat.setPageBreakPolicy": ('PageBreakFlags',), + "QTextFrameFormat.setPosition": ('PySide2.QtGui.QTextFrameFormat.Position',), + "QTextFrameFormat.setRightMargin": ('float',), + "QTextFrameFormat.setTopMargin": ('float',), + "QTextFrameFormat.setWidth": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.topMargin": (), + "QTextFrameFormat.width": (), + + # class PySide2.QtGui.QTextImageFormat: + "QTextImageFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextImageFormat',)], + "QTextImageFormat.__copy__": (), + "QTextImageFormat.height": (), + "QTextImageFormat.isValid": (), + "QTextImageFormat.name": (), + "QTextImageFormat.setHeight": ('float',), + "QTextImageFormat.setName": ('str',), + "QTextImageFormat.setWidth": ('float',), + "QTextImageFormat.width": (), + + # class PySide2.QtGui.QTextInlineObject: + "QTextInlineObject.__init__": [(), ('PySide2.QtGui.QTextInlineObject',)], + "QTextInlineObject.__copy__": (), + "QTextInlineObject.ascent": (), + "QTextInlineObject.descent": (), + "QTextInlineObject.format": (), + "QTextInlineObject.formatIndex": (), + "QTextInlineObject.height": (), + "QTextInlineObject.isValid": (), + "QTextInlineObject.rect": (), + "QTextInlineObject.setAscent": ('float',), + "QTextInlineObject.setDescent": ('float',), + "QTextInlineObject.setWidth": ('float',), + "QTextInlineObject.textDirection": (), + "QTextInlineObject.textPosition": (), + "QTextInlineObject.width": (), + + # class PySide2.QtGui.QTextItem: + "QTextItem.__init__": (), + "QTextItem.ascent": (), + "QTextItem.descent": (), + "QTextItem.font": (), + "QTextItem.renderFlags": (), + "QTextItem.text": (), + "QTextItem.width": (), + + # class PySide2.QtGui.QTextLayout: + "QTextLayout.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('str',), ('str', 'PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice')], + "QTextLayout.additionalFormats": (), + "QTextLayout.beginLayout": (), + "QTextLayout.boundingRect": (), + "QTextLayout.cacheEnabled": (), + "QTextLayout.clearAdditionalFormats": (), + "QTextLayout.clearFormats": (), + "QTextLayout.clearLayout": (), + "QTextLayout.createLine": (), + "QTextLayout.cursorMoveStyle": (), + "QTextLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'list', 'PySide2.QtCore.QRectF'), + "QTextLayout.drawCursor": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int', 'int')], + "QTextLayout.endLayout": (), + "QTextLayout.font": (), + "QTextLayout.formats": (), + "QTextLayout.isValidCursorPosition": ('int',), + "QTextLayout.leftCursorPosition": ('int',), + "QTextLayout.lineAt": ('int',), + "QTextLayout.lineCount": (), + "QTextLayout.lineForTextPosition": ('int',), + "QTextLayout.maximumWidth": (), + "QTextLayout.minimumWidth": (), + "QTextLayout.nextCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.position": (), + "QTextLayout.preeditAreaPosition": (), + "QTextLayout.preeditAreaText": (), + "QTextLayout.previousCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.rightCursorPosition": ('int',), + "QTextLayout.setAdditionalFormats": ('list',), + "QTextLayout.setCacheEnabled": ('bool',), + "QTextLayout.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextLayout.setFlags": ('int',), + "QTextLayout.setFont": ('PySide2.QtGui.QFont',), + "QTextLayout.setFormats": ('list',), + "QTextLayout.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLayout.setPreeditArea": ('int', 'str'), + "QTextLayout.setRawFont": ('PySide2.QtGui.QRawFont',), + "QTextLayout.setText": ('str',), + "QTextLayout.setTextOption": ('PySide2.QtGui.QTextOption',), + "QTextLayout.text": (), + "QTextLayout.textOption": (), + + # class PySide2.QtGui.QTextLength: + "QTextLength.__init__": [(), ('PySide2.QtGui.QTextLength',), ('PySide2.QtGui.QTextLength.Type', 'float')], + "QTextLength.__copy__": (), + "QTextLength.rawValue": (), + "QTextLength.type": (), + "QTextLength.value": ('float',), + + # class PySide2.QtGui.QTextLine: + "QTextLine.__init__": [(), ('PySide2.QtGui.QTextLine',)], + "QTextLine.__copy__": (), + "QTextLine.ascent": (), + "QTextLine.cursorToX": ('int', 'PySide2.QtGui.QTextLine.Edge'), + "QTextLine.descent": (), + "QTextLine.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextLayout.FormatRange'), + "QTextLine.height": (), + "QTextLine.horizontalAdvance": (), + "QTextLine.isValid": (), + "QTextLine.leading": (), + "QTextLine.leadingIncluded": (), + "QTextLine.lineNumber": (), + "QTextLine.naturalTextRect": (), + "QTextLine.naturalTextWidth": (), + "QTextLine.position": (), + "QTextLine.rect": (), + "QTextLine.setLeadingIncluded": ('bool',), + "QTextLine.setLineWidth": ('float',), + "QTextLine.setNumColumns": [('int',), ('int', 'float')], + "QTextLine.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLine.textLength": (), + "QTextLine.textStart": (), + "QTextLine.width": (), + "QTextLine.x": (), + "QTextLine.xToCursor": ('float', 'PySide2.QtGui.QTextLine.CursorPosition'), + "QTextLine.y": (), + + # class PySide2.QtGui.QTextList: + "QTextList.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextList.add": ('PySide2.QtGui.QTextBlock',), + "QTextList.count": (), + "QTextList.format": (), + "QTextList.item": ('int',), + "QTextList.itemNumber": ('PySide2.QtGui.QTextBlock',), + "QTextList.itemText": ('PySide2.QtGui.QTextBlock',), + "QTextList.remove": ('PySide2.QtGui.QTextBlock',), + "QTextList.removeItem": ('int',), + "QTextList.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + + # class PySide2.QtGui.QTextListFormat: + "QTextListFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + "QTextListFormat.__copy__": (), + "QTextListFormat.indent": (), + "QTextListFormat.isValid": (), + "QTextListFormat.numberPrefix": (), + "QTextListFormat.numberSuffix": (), + "QTextListFormat.setIndent": ('int',), + "QTextListFormat.setNumberPrefix": ('str',), + "QTextListFormat.setNumberSuffix": ('str',), + "QTextListFormat.setStyle": ('PySide2.QtGui.QTextListFormat.Style',), + "QTextListFormat.style": (), + + # class PySide2.QtGui.QTextObject: + "QTextObject.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextObject.document": (), + "QTextObject.format": (), + "QTextObject.formatIndex": (), + "QTextObject.objectIndex": (), + "QTextObject.setFormat": ('PySide2.QtGui.QTextFormat',), + + # class PySide2.QtGui.QTextObjectInterface: + "QTextObjectInterface.__init__": (), + "QTextObjectInterface.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QTextObjectInterface.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QTextOption: + "QTextOption.__init__": [(), ('Alignment',), ('PySide2.QtGui.QTextOption',)], + "QTextOption.__copy__": (), + "QTextOption.alignment": (), + "QTextOption.flags": (), + "QTextOption.setAlignment": ('Alignment',), + "QTextOption.setFlags": ('Flags',), + "QTextOption.setTabArray": ('list',), + "QTextOption.setTabStop": ('float',), + "QTextOption.setTabs": ('list',), + "QTextOption.setTextDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextOption.setUseDesignMetrics": ('bool',), + "QTextOption.setWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextOption.tabArray": (), + "QTextOption.tabStop": (), + "QTextOption.tabs": (), + "QTextOption.textDirection": (), + "QTextOption.useDesignMetrics": (), + "QTextOption.wrapMode": (), + + # class PySide2.QtGui.QTextTable: + "QTextTable.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextTable.appendColumns": ('int',), + "QTextTable.appendRows": ('int',), + "QTextTable.cellAt": [('PySide2.QtGui.QTextCursor',), ('int',), ('int', 'int')], + "QTextTable.columns": (), + "QTextTable.format": (), + "QTextTable.insertColumns": ('int', 'int'), + "QTextTable.insertRows": ('int', 'int'), + "QTextTable.mergeCells": [('PySide2.QtGui.QTextCursor',), ('int', 'int', 'int', 'int')], + "QTextTable.removeColumns": ('int', 'int'), + "QTextTable.removeRows": ('int', 'int'), + "QTextTable.resize": ('int', 'int'), + "QTextTable.rowEnd": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rowStart": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rows": (), + "QTextTable.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTable.splitCell": ('int', 'int', 'int', 'int'), + + # class PySide2.QtGui.QTextTableCell: + "QTextTableCell.__init__": [(), ('PySide2.QtGui.QTextTableCell',)], + "QTextTableCell.__copy__": (), + "QTextTableCell.begin": (), + "QTextTableCell.column": (), + "QTextTableCell.columnSpan": (), + "QTextTableCell.end": (), + "QTextTableCell.firstCursorPosition": (), + "QTextTableCell.firstPosition": (), + "QTextTableCell.format": (), + "QTextTableCell.isValid": (), + "QTextTableCell.lastCursorPosition": (), + "QTextTableCell.lastPosition": (), + "QTextTableCell.row": (), + "QTextTableCell.rowSpan": (), + "QTextTableCell.setFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextTableCell.tableCellFormatIndex": (), + + # class PySide2.QtGui.QTextTableCellFormat: + "QTextTableCellFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableCellFormat',)], + "QTextTableCellFormat.__copy__": (), + "QTextTableCellFormat.bottomPadding": (), + "QTextTableCellFormat.isValid": (), + "QTextTableCellFormat.leftPadding": (), + "QTextTableCellFormat.rightPadding": (), + "QTextTableCellFormat.setBottomPadding": ('float',), + "QTextTableCellFormat.setLeftPadding": ('float',), + "QTextTableCellFormat.setPadding": ('float',), + "QTextTableCellFormat.setRightPadding": ('float',), + "QTextTableCellFormat.setTopPadding": ('float',), + "QTextTableCellFormat.topPadding": (), + + # class PySide2.QtGui.QTextTableFormat: + "QTextTableFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTableFormat.__copy__": (), + "QTextTableFormat.alignment": (), + "QTextTableFormat.cellPadding": (), + "QTextTableFormat.cellSpacing": (), + "QTextTableFormat.clearColumnWidthConstraints": (), + "QTextTableFormat.columnWidthConstraints": (), + "QTextTableFormat.columns": (), + "QTextTableFormat.headerRowCount": (), + "QTextTableFormat.isValid": (), + "QTextTableFormat.setAlignment": ('Alignment',), + "QTextTableFormat.setCellPadding": ('float',), + "QTextTableFormat.setCellSpacing": ('float',), + "QTextTableFormat.setColumnWidthConstraints": ('list',), + "QTextTableFormat.setColumns": ('int',), + "QTextTableFormat.setHeaderRowCount": ('int',), + + # class PySide2.QtGui.QToolBarChangeEvent: + "QToolBarChangeEvent.__init__": ('bool',), + "QToolBarChangeEvent.toggle": (), + + # class PySide2.QtGui.QTouchDevice: + "QTouchDevice.__init__": (), + "QTouchDevice.capabilities": (), + "QTouchDevice.devices": (), + "QTouchDevice.maximumTouchPoints": (), + "QTouchDevice.name": (), + "QTouchDevice.setCapabilities": ('Capabilities',), + "QTouchDevice.setMaximumTouchPoints": ('int',), + "QTouchDevice.setName": ('str',), + "QTouchDevice.setType": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTouchDevice.type": (), + + # class PySide2.QtGui.QTouchEvent: + "QTouchEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtGui.QTouchDevice', 'KeyboardModifiers', 'TouchPointStates', 'list'), + "QTouchEvent.device": (), + "QTouchEvent.setDevice": ('PySide2.QtGui.QTouchDevice',), + "QTouchEvent.setTarget": ('PySide2.QtCore.QObject',), + "QTouchEvent.setTouchPointStates": ('TouchPointStates',), + "QTouchEvent.setTouchPoints": ('list',), + "QTouchEvent.setWindow": ('PySide2.QtGui.QWindow',), + "QTouchEvent.target": (), + "QTouchEvent.touchPointStates": (), + "QTouchEvent.touchPoints": (), + "QTouchEvent.window": (), + + # class PySide2.QtGui.QTransform: + "QTransform.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float', 'float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QTransform.__copy__": (), + "QTransform.__reduce__": (), + "QTransform.adjoint": (), + "QTransform.det": (), + "QTransform.determinant": (), + "QTransform.dx": (), + "QTransform.dy": (), + "QTransform.fromScale": ('float', 'float'), + "QTransform.fromTranslate": ('float', 'float'), + "QTransform.inverted": ('bool',), + "QTransform.isAffine": (), + "QTransform.isIdentity": (), + "QTransform.isInvertible": (), + "QTransform.isRotating": (), + "QTransform.isScaling": (), + "QTransform.isTranslating": (), + "QTransform.m11": (), + "QTransform.m12": (), + "QTransform.m13": (), + "QTransform.m21": (), + "QTransform.m22": (), + "QTransform.m23": (), + "QTransform.m31": (), + "QTransform.m32": (), + "QTransform.m33": (), + "QTransform.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float')], + "QTransform.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QTransform.mapToPolygon": ('PySide2.QtCore.QRect',), + "QTransform.quadToQuad": [('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.quadToSquare": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.reset": (), + "QTransform.rotate": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.rotateRadians": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.scale": ('float', 'float'), + "QTransform.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float'), + "QTransform.shear": ('float', 'float'), + "QTransform.squareToQuad": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.toAffine": (), + "QTransform.translate": ('float', 'float'), + "QTransform.transposed": (), + "QTransform.type": (), + + # class PySide2.QtGui.QValidator: + "QValidator.__init__": ('PySide2.QtCore.QObject',), + "QValidator.fixup": ('str',), + "QValidator.locale": (), + "QValidator.setLocale": ('PySide2.QtCore.QLocale',), + "QValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QVector2D: + "QVector2D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',), ('float', 'float')], + "QVector2D.__copy__": (), + "QVector2D.__reduce__": (), + "QVector2D.distanceToLine": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.distanceToPoint": ('PySide2.QtGui.QVector2D',), + "QVector2D.dotProduct": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.isNull": (), + "QVector2D.length": (), + "QVector2D.lengthSquared": (), + "QVector2D.normalize": (), + "QVector2D.normalized": (), + "QVector2D.setX": ('float',), + "QVector2D.setY": ('float',), + "QVector2D.toPoint": (), + "QVector2D.toPointF": (), + "QVector2D.toTuple": (), + "QVector2D.toVector3D": (), + "QVector2D.toVector4D": (), + "QVector2D.x": (), + "QVector2D.y": (), + + # class PySide2.QtGui.QVector3D: + "QVector3D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float'), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',), ('float', 'float', 'float')], + "QVector3D.__copy__": (), + "QVector3D.__reduce__": (), + "QVector3D.crossProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToLine": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToPlane": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.distanceToPoint": ('PySide2.QtGui.QVector3D',), + "QVector3D.dotProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.isNull": (), + "QVector3D.length": (), + "QVector3D.lengthSquared": (), + "QVector3D.normal": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.normalize": (), + "QVector3D.normalized": (), + "QVector3D.project": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.setX": ('float',), + "QVector3D.setY": ('float',), + "QVector3D.setZ": ('float',), + "QVector3D.toPoint": (), + "QVector3D.toPointF": (), + "QVector3D.toTuple": (), + "QVector3D.toVector2D": (), + "QVector3D.toVector4D": (), + "QVector3D.unproject": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.x": (), + "QVector3D.y": (), + "QVector3D.z": (), + + # class PySide2.QtGui.QVector4D: + "QVector4D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float', 'float'), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector3D', 'float'), ('PySide2.QtGui.QVector4D',), ('float', 'float', 'float', 'float')], + "QVector4D.__copy__": (), + "QVector4D.__reduce__": (), + "QVector4D.dotProduct": ('PySide2.QtGui.QVector4D', 'PySide2.QtGui.QVector4D'), + "QVector4D.isNull": (), + "QVector4D.length": (), + "QVector4D.lengthSquared": (), + "QVector4D.normalize": (), + "QVector4D.normalized": (), + "QVector4D.setW": ('float',), + "QVector4D.setX": ('float',), + "QVector4D.setY": ('float',), + "QVector4D.setZ": ('float',), + "QVector4D.toPoint": (), + "QVector4D.toPointF": (), + "QVector4D.toTuple": (), + "QVector4D.toVector2D": (), + "QVector4D.toVector2DAffine": (), + "QVector4D.toVector3D": (), + "QVector4D.toVector3DAffine": (), + "QVector4D.w": (), + "QVector4D.x": (), + "QVector4D.y": (), + "QVector4D.z": (), + + # class PySide2.QtGui.QWhatsThisClickedEvent: + "QWhatsThisClickedEvent.__init__": ('str',), + "QWhatsThisClickedEvent.href": (), + + # class PySide2.QtGui.QWheelEvent: + "QWheelEvent.__init__": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation'), ('PySide2.QtCore.QPointF', 'int', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation')], + "QWheelEvent.angleDelta": (), + "QWheelEvent.buttons": (), + "QWheelEvent.delta": (), + "QWheelEvent.global"+"Y": (), + "QWheelEvent.globalPos": (), + "QWheelEvent.globalPosF": (), + "QWheelEvent.globalX": (), + "QWheelEvent.orientation": (), + "QWheelEvent.phase": (), + "QWheelEvent.pixelDelta": (), + "QWheelEvent.pos": (), + "QWheelEvent.posF": (), + "QWheelEvent.source": (), + "QWheelEvent.x": (), + "QWheelEvent.y": (), + + # class PySide2.QtGui.QWindow: + "QWindow.__init__": [('PySide2.QtGui.QScreen',), ('PySide2.QtGui.QWindow',)], + "QWindow.accessibleRoot": (), + "QWindow.alert": ('int',), + "QWindow.baseSize": (), + "QWindow.close": (), + "QWindow.contentOrientation": (), + "QWindow.create": (), + "QWindow.cursor": (), + "QWindow.destroy": (), + "QWindow.devicePixelRatio": (), + "QWindow.event": ('PySide2.QtCore.QEvent',), + "QWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QWindow.filePath": (), + "QWindow.flags": (), + "QWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.focusObject": (), + "QWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.format": (), + "QWindow.frameGeometry": (), + "QWindow.frameMargins": (), + "QWindow.framePosition": (), + "QWindow.fromWinId": ('int',), + "QWindow.geometry": (), + "QWindow.height": (), + "QWindow.hide": (), + "QWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWindow.icon": (), + "QWindow.isActive": (), + "QWindow.isAncestorOf": ('PySide2.QtGui.QWindow', 'PySide2.QtGui.QWindow.AncestorMode'), + "QWindow.isExposed": (), + "QWindow.isModal": (), + "QWindow.isTopLevel": (), + "QWindow.isVisible": (), + "QWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.lower": (), + "QWindow.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mask": (), + "QWindow.maximumHeight": (), + "QWindow.maximumSize": (), + "QWindow.maximumWidth": (), + "QWindow.minimumHeight": (), + "QWindow.minimumSize": (), + "QWindow.minimumWidth": (), + "QWindow.modality": (), + "QWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWindow.opacity": (), + "QWindow.parent": (), + "QWindow.position": (), + "QWindow.raise": (), + "QWindow.reportContentOrientationChange": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QWindow.requestActivate": (), + "QWindow.requestUpdate": (), + "QWindow.requestedFormat": (), + "QWindow.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWindow.screen": (), + "QWindow.setBaseSize": ('PySide2.QtCore.QSize',), + "QWindow.setCursor": ('PySide2.QtGui.QCursor',), + "QWindow.setFilePath": ('str',), + "QWindow.setFlags": ('WindowFlags',), + "QWindow.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QWindow.setFramePosition": ('PySide2.QtCore.QPoint',), + "QWindow.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWindow.setHeight": ('int',), + "QWindow.setIcon": ('PySide2.QtGui.QIcon',), + "QWindow.setKeyboardGrabEnabled": ('bool',), + "QWindow.setMask": ('PySide2.QtGui.QRegion',), + "QWindow.setMaximumHeight": ('int',), + "QWindow.setMaximumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMaximumWidth": ('int',), + "QWindow.setMinimumHeight": ('int',), + "QWindow.setMinimumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMinimumWidth": ('int',), + "QWindow.setModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWindow.setMouseGrabEnabled": ('bool',), + "QWindow.setOpacity": ('float',), + "QWindow.setParent": ('PySide2.QtGui.QWindow',), + "QWindow.setPosition": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWindow.setScreen": ('PySide2.QtGui.QScreen',), + "QWindow.setSizeIncrement": ('PySide2.QtCore.QSize',), + "QWindow.setSurfaceType": ('PySide2.QtGui.QSurface.SurfaceType',), + "QWindow.setTitle": ('str',), + "QWindow.setTransientParent": ('PySide2.QtGui.QWindow',), + "QWindow.setVisibility": ('PySide2.QtGui.QWindow.Visibility',), + "QWindow.setVisible": ('bool',), + "QWindow.setWidth": ('int',), + "QWindow.setWindowState": ('PySide2.QtCore.Qt.WindowState',), + "QWindow.setX": ('int',), + "QWindow.setY": ('int',), + "QWindow.show": (), + "QWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWindow.showFullScreen": (), + "QWindow.showMaximized": (), + "QWindow.showMinimized": (), + "QWindow.showNormal": (), + "QWindow.size": (), + "QWindow.sizeIncrement": (), + "QWindow.surfaceHandle": (), + "QWindow.surfaceType": (), + "QWindow.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWindow.title": (), + "QWindow.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QWindow.transientParent": (), + "QWindow.type": (), + "QWindow.unsetCursor": (), + "QWindow.visibility": (), + "QWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWindow.width": (), + "QWindow.winId": (), + "QWindow.windowState": (), + "QWindow.x": (), + "QWindow.y": (), + + # class PySide2.QtGui.QWindowStateChangeEvent: + "QWindowStateChangeEvent.__init__": ('WindowStates', 'bool'), + "QWindowStateChangeEvent.isOverride": (), + "QWindowStateChangeEvent.oldState": (), + }) + +# Module PySide2.QtWidgets +if "PySide2.QtWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWidgets.QAbstractButton: + "QAbstractButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractButton.animateClick": ('int',), + "QAbstractButton.autoExclusive": (), + "QAbstractButton.autoRepeat": (), + "QAbstractButton.autoRepeatDelay": (), + "QAbstractButton.autoRepeatInterval": (), + "QAbstractButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractButton.checkStateSet": (), + "QAbstractButton.click": (), + "QAbstractButton.event": ('PySide2.QtCore.QEvent',), + "QAbstractButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.group": (), + "QAbstractButton.hitButton": ('PySide2.QtCore.QPoint',), + "QAbstractButton.icon": (), + "QAbstractButton.iconSize": (), + "QAbstractButton.isCheckable": (), + "QAbstractButton.isChecked": (), + "QAbstractButton.isDown": (), + "QAbstractButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.nextCheckState": (), + "QAbstractButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractButton.setAutoExclusive": ('bool',), + "QAbstractButton.setAutoRepeat": ('bool',), + "QAbstractButton.setAutoRepeatDelay": ('int',), + "QAbstractButton.setAutoRepeatInterval": ('int',), + "QAbstractButton.setCheckable": ('bool',), + "QAbstractButton.setChecked": ('bool',), + "QAbstractButton.setDown": ('bool',), + "QAbstractButton.setIcon": ('PySide2.QtGui.QIcon',), + "QAbstractButton.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractButton.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAbstractButton.setText": ('str',), + "QAbstractButton.shortcut": (), + "QAbstractButton.text": (), + "QAbstractButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractButton.toggle": (), + + # class PySide2.QtWidgets.QAbstractGraphicsShapeItem: + "QAbstractGraphicsShapeItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.brush": (), + "QAbstractGraphicsShapeItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.opaqueArea": (), + "QAbstractGraphicsShapeItem.pen": (), + "QAbstractGraphicsShapeItem.setBrush": ('PySide2.QtGui.QBrush',), + "QAbstractGraphicsShapeItem.setPen": ('PySide2.QtGui.QPen',), + + # class PySide2.QtWidgets.QAbstractItemDelegate: + "QAbstractItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.destroyEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.elidedText": ('PySide2.QtGui.QFontMetrics', 'int', 'PySide2.QtCore.Qt.TextElideMode', 'str'), + "QAbstractItemDelegate.helpEvent": ('PySide2.QtGui.QHelpEvent', 'PySide2.QtWidgets.QAbstractItemView', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paintingRoles": (), + "QAbstractItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QAbstractItemView: + "QAbstractItemView.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.alternatingRowColors": (), + "QAbstractItemView.autoScrollMargin": (), + "QAbstractItemView.clearSelection": (), + "QAbstractItemView.closeEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QAbstractItemDelegate.EndEditHint'), + "QAbstractItemView.closePersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.commitData": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemView.currentIndex": (), + "QAbstractItemView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QAbstractItemView.defaultDropAction": (), + "QAbstractItemView.dirtyRegionOffset": (), + "QAbstractItemView.doAutoScroll": (), + "QAbstractItemView.doItemsLayout": (), + "QAbstractItemView.dragDropMode": (), + "QAbstractItemView.dragDropOverwriteMode": (), + "QAbstractItemView.dragEnabled": (), + "QAbstractItemView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractItemView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractItemView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractItemView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractItemView.dropIndicatorPosition": (), + "QAbstractItemView.edit": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.EditTrigger', 'PySide2.QtCore.QEvent')], + "QAbstractItemView.editTriggers": (), + "QAbstractItemView.editorDestroyed": ('PySide2.QtCore.QObject',), + "QAbstractItemView.event": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.executeDelayedItemsLayout": (), + "QAbstractItemView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.focusNextPrevChild": ('bool',), + "QAbstractItemView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.hasAutoScroll": (), + "QAbstractItemView.horizontalOffset": (), + "QAbstractItemView.horizontalScrollMode": (), + "QAbstractItemView.horizontalScrollbarAction": ('int',), + "QAbstractItemView.horizontalScrollbarValueChanged": ('int',), + "QAbstractItemView.horizontalStepsPerItem": (), + "QAbstractItemView.iconSize": (), + "QAbstractItemView.indexAt": ('PySide2.QtCore.QPoint',), + "QAbstractItemView.indexWidget": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QAbstractItemView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractItemView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.itemDelegate": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.itemDelegateForColumn": ('int',), + "QAbstractItemView.itemDelegateForRow": ('int',), + "QAbstractItemView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractItemView.keyboardSearch": ('str',), + "QAbstractItemView.model": (), + "QAbstractItemView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QAbstractItemView.openPersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.reset": (), + "QAbstractItemView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractItemView.rootIndex": (), + "QAbstractItemView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.scheduleDelayedItemsLayout": (), + "QAbstractItemView.scrollDirtyRegion": ('int', 'int'), + "QAbstractItemView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QAbstractItemView.scrollToBottom": (), + "QAbstractItemView.scrollToTop": (), + "QAbstractItemView.selectAll": (), + "QAbstractItemView.selectedIndexes": (), + "QAbstractItemView.selectionBehavior": (), + "QAbstractItemView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QAbstractItemView.selectionCommand": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QEvent'), + "QAbstractItemView.selectionMode": (), + "QAbstractItemView.selectionModel": (), + "QAbstractItemView.setAlternatingRowColors": ('bool',), + "QAbstractItemView.setAutoScroll": ('bool',), + "QAbstractItemView.setAutoScrollMargin": ('int',), + "QAbstractItemView.setCurrentIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setDefaultDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QAbstractItemView.setDirtyRegion": ('PySide2.QtGui.QRegion',), + "QAbstractItemView.setDragDropMode": ('PySide2.QtWidgets.QAbstractItemView.DragDropMode',), + "QAbstractItemView.setDragDropOverwriteMode": ('bool',), + "QAbstractItemView.setDragEnabled": ('bool',), + "QAbstractItemView.setDropIndicatorShown": ('bool',), + "QAbstractItemView.setEditTriggers": ('EditTriggers',), + "QAbstractItemView.setHorizontalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setHorizontalStepsPerItem": ('int',), + "QAbstractItemView.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractItemView.setIndexWidget": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QWidget'), + "QAbstractItemView.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QAbstractItemView.setItemDelegateForColumn": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setItemDelegateForRow": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractItemView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QAbstractItemView.setSelectionBehavior": ('PySide2.QtWidgets.QAbstractItemView.SelectionBehavior',), + "QAbstractItemView.setSelectionMode": ('PySide2.QtWidgets.QAbstractItemView.SelectionMode',), + "QAbstractItemView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QAbstractItemView.setState": ('PySide2.QtWidgets.QAbstractItemView.State',), + "QAbstractItemView.setTabKeyNavigation": ('bool',), + "QAbstractItemView.setTextElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QAbstractItemView.setVerticalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setVerticalStepsPerItem": ('int',), + "QAbstractItemView.showDropIndicator": (), + "QAbstractItemView.sizeHintForColumn": ('int',), + "QAbstractItemView.sizeHintForIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.sizeHintForRow": ('int',), + "QAbstractItemView.startAutoScroll": (), + "QAbstractItemView.startDrag": ('DropActions',), + "QAbstractItemView.state": (), + "QAbstractItemView.stopAutoScroll": (), + "QAbstractItemView.tabKeyNavigation": (), + "QAbstractItemView.textElideMode": (), + "QAbstractItemView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractItemView.update": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.updateEditorData": (), + "QAbstractItemView.updateEditorGeometries": (), + "QAbstractItemView.updateGeometries": (), + "QAbstractItemView.verticalOffset": (), + "QAbstractItemView.verticalScrollMode": (), + "QAbstractItemView.verticalScrollbarAction": ('int',), + "QAbstractItemView.verticalScrollbarValueChanged": ('int',), + "QAbstractItemView.verticalStepsPerItem": (), + "QAbstractItemView.viewOptions": (), + "QAbstractItemView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.viewportSizeHint": (), + "QAbstractItemView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QAbstractScrollArea: + "QAbstractScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.addScrollBarWidget": ('PySide2.QtWidgets.QWidget', 'Alignment'), + "QAbstractScrollArea.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractScrollArea.cornerWidget": (), + "QAbstractScrollArea.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractScrollArea.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractScrollArea.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractScrollArea.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractScrollArea.event": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QAbstractScrollArea.horizontalScrollBar": (), + "QAbstractScrollArea.horizontalScrollBarPolicy": (), + "QAbstractScrollArea.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractScrollArea.maximumViewportSize": (), + "QAbstractScrollArea.minimumSizeHint": (), + "QAbstractScrollArea.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractScrollArea.scrollBarWidgets": ('Alignment',), + "QAbstractScrollArea.scrollContentsBy": ('int', 'int'), + "QAbstractScrollArea.setCornerWidget": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setHorizontalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setHorizontalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setSizeAdjustPolicy": ('PySide2.QtWidgets.QAbstractScrollArea.SizeAdjustPolicy',), + "QAbstractScrollArea.setVerticalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setVerticalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setViewportMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QAbstractScrollArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.sizeAdjustPolicy": (), + "QAbstractScrollArea.sizeHint": (), + "QAbstractScrollArea.verticalScrollBar": (), + "QAbstractScrollArea.verticalScrollBarPolicy": (), + "QAbstractScrollArea.viewport": (), + "QAbstractScrollArea.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.viewportMargins": (), + "QAbstractScrollArea.viewportSizeHint": (), + "QAbstractScrollArea.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSlider: + "QAbstractSlider.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSlider.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.event": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.hasTracking": (), + "QAbstractSlider.invertedAppearance": (), + "QAbstractSlider.invertedControls": (), + "QAbstractSlider.isSliderDown": (), + "QAbstractSlider.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSlider.maximum": (), + "QAbstractSlider.minimum": (), + "QAbstractSlider.orientation": (), + "QAbstractSlider.pageStep": (), + "QAbstractSlider.repeatAction": (), + "QAbstractSlider.setInvertedAppearance": ('bool',), + "QAbstractSlider.setInvertedControls": ('bool',), + "QAbstractSlider.setMaximum": ('int',), + "QAbstractSlider.setMinimum": ('int',), + "QAbstractSlider.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QAbstractSlider.setPageStep": ('int',), + "QAbstractSlider.setRange": ('int', 'int'), + "QAbstractSlider.setRepeatAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction', 'int', 'int'), + "QAbstractSlider.setSingleStep": ('int',), + "QAbstractSlider.setSliderDown": ('bool',), + "QAbstractSlider.setSliderPosition": ('int',), + "QAbstractSlider.setTracking": ('bool',), + "QAbstractSlider.setValue": ('int',), + "QAbstractSlider.singleStep": (), + "QAbstractSlider.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QAbstractSlider.sliderPosition": (), + "QAbstractSlider.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSlider.triggerAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction',), + "QAbstractSlider.value": (), + "QAbstractSlider.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSpinBox: + "QAbstractSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSpinBox.alignment": (), + "QAbstractSpinBox.buttonSymbols": (), + "QAbstractSpinBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.clear": (), + "QAbstractSpinBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QAbstractSpinBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractSpinBox.correctionMode": (), + "QAbstractSpinBox.event": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.fixup": ('str',), + "QAbstractSpinBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.hasAcceptableInput": (), + "QAbstractSpinBox.hasFrame": (), + "QAbstractSpinBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QAbstractSpinBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QAbstractSpinBox.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractSpinBox.interpretText": (), + "QAbstractSpinBox.isAccelerated": (), + "QAbstractSpinBox.isGroupSeparatorShown": (), + "QAbstractSpinBox.isReadOnly": (), + "QAbstractSpinBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyboardTracking": (), + "QAbstractSpinBox.lineEdit": (), + "QAbstractSpinBox.minimumSizeHint": (), + "QAbstractSpinBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractSpinBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractSpinBox.selectAll": (), + "QAbstractSpinBox.setAccelerated": ('bool',), + "QAbstractSpinBox.setAlignment": ('Alignment',), + "QAbstractSpinBox.setButtonSymbols": ('PySide2.QtWidgets.QAbstractSpinBox.ButtonSymbols',), + "QAbstractSpinBox.setCorrectionMode": ('PySide2.QtWidgets.QAbstractSpinBox.CorrectionMode',), + "QAbstractSpinBox.setFrame": ('bool',), + "QAbstractSpinBox.setGroupSeparatorShown": ('bool',), + "QAbstractSpinBox.setKeyboardTracking": ('bool',), + "QAbstractSpinBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QAbstractSpinBox.setReadOnly": ('bool',), + "QAbstractSpinBox.setSpecialValueText": ('str',), + "QAbstractSpinBox.setWrapping": ('bool',), + "QAbstractSpinBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QAbstractSpinBox.sizeHint": (), + "QAbstractSpinBox.specialValueText": (), + "QAbstractSpinBox.stepBy": ('int',), + "QAbstractSpinBox.stepDown": (), + "QAbstractSpinBox.stepEnabled": (), + "QAbstractSpinBox.stepUp": (), + "QAbstractSpinBox.text": (), + "QAbstractSpinBox.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSpinBox.validate": ('str', 'int'), + "QAbstractSpinBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QAbstractSpinBox.wrapping": (), + + # class PySide2.QtWidgets.QAction: + "QAction.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QAction.actionGroup": (), + "QAction.activate": ('PySide2.QtWidgets.QAction.ActionEvent',), + "QAction.associatedGraphicsWidgets": (), + "QAction.associatedWidgets": (), + "QAction.autoRepeat": (), + "QAction.data": (), + "QAction.event": ('PySide2.QtCore.QEvent',), + "QAction.font": (), + "QAction.hover": (), + "QAction.icon": (), + "QAction.iconText": (), + "QAction.isCheckable": (), + "QAction.isChecked": (), + "QAction.isEnabled": (), + "QAction.isIconVisibleInMenu": (), + "QAction.isSeparator": (), + "QAction.isVisible": (), + "QAction.menu": (), + "QAction.menuRole": (), + "QAction.parentWidget": (), + "QAction.priority": (), + "QAction.setActionGroup": ('PySide2.QtWidgets.QActionGroup',), + "QAction.setAutoRepeat": ('bool',), + "QAction.setCheckable": ('bool',), + "QAction.setChecked": ('bool',), + "QAction.setData": ('PySide2.support.signature.typing.Any',), + "QAction.setDisabled": ('bool',), + "QAction.setEnabled": ('bool',), + "QAction.setFont": ('PySide2.QtGui.QFont',), + "QAction.setIcon": ('PySide2.QtGui.QIcon',), + "QAction.setIconText": ('str',), + "QAction.setIconVisibleInMenu": ('bool',), + "QAction.setMenu": ('PySide2.QtWidgets.QMenu',), + "QAction.setMenuRole": ('PySide2.QtWidgets.QAction.MenuRole',), + "QAction.setPriority": ('PySide2.QtWidgets.QAction.Priority',), + "QAction.setSeparator": ('bool',), + "QAction.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAction.setShortcutContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QAction.setShortcuts": [('PySide2.QtGui.QKeySequence.StandardKey',), ('list',)], + "QAction.setStatusTip": ('str',), + "QAction.setText": ('str',), + "QAction.setToolTip": ('str',), + "QAction.setVisible": ('bool',), + "QAction.setWhatsThis": ('str',), + "QAction.shortcut": (), + "QAction.shortcutContext": (), + "QAction.shortcuts": (), + "QAction.showStatusText": ('PySide2.QtWidgets.QWidget',), + "QAction.statusTip": (), + "QAction.text": (), + "QAction.toggle": (), + "QAction.toolTip": (), + "QAction.trigger": (), + "QAction.whatsThis": (), + + # class PySide2.QtWidgets.QActionGroup: + "QActionGroup.__init__": ('PySide2.QtCore.QObject',), + "QActionGroup.actions": (), + "QActionGroup.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction',), ('str',)], + "QActionGroup.checkedAction": (), + "QActionGroup.isEnabled": (), + "QActionGroup.isExclusive": (), + "QActionGroup.isVisible": (), + "QActionGroup.removeAction": ('PySide2.QtWidgets.QAction',), + "QActionGroup.setDisabled": ('bool',), + "QActionGroup.setEnabled": ('bool',), + "QActionGroup.setExclusive": ('bool',), + "QActionGroup.setVisible": ('bool',), + + # class PySide2.QtWidgets.QApplication: + "QApplication.__init__": ('PySide2.support.signature.typing.List',), + "QApplication.aboutQt": (), + "QApplication.activeModalWidget": (), + "QApplication.activePopupWidget": (), + "QApplication.activeWindow": (), + "QApplication.alert": ('PySide2.QtWidgets.QWidget', 'int'), + "QApplication.allWidgets": (), + "QApplication.autoSipEnabled": (), + "QApplication.beep": (), + "QApplication.closeAllWindows": (), + "QApplication.colorSpec": (), + "QApplication.cursorFlashTime": (), + "QApplication.desktop": (), + "QApplication.doubleClickInterval": (), + "QApplication.event": ('PySide2.QtCore.QEvent',), + "QApplication.exec_": (), + "QApplication.focusWidget": (), + "QApplication.font": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.fontMetrics": (), + "QApplication.globalStrut": (), + "QApplication.isEffectEnabled": ('PySide2.QtCore.Qt.UIEffect',), + "QApplication.keyboardInputInterval": (), + "QApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QApplication.palette": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.setActiveWindow": ('PySide2.QtWidgets.QWidget',), + "QApplication.setAutoSipEnabled": ('bool',), + "QApplication.setColorSpec": ('int',), + "QApplication.setCursorFlashTime": ('int',), + "QApplication.setDoubleClickInterval": ('int',), + "QApplication.setEffectEnabled": ('PySide2.QtCore.Qt.UIEffect', 'bool'), + "QApplication.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'str')], + "QApplication.setGlobalStrut": ('PySide2.QtCore.QSize',), + "QApplication.setKeyboardInputInterval": ('int',), + "QApplication.setPalette": [('PySide2.QtGui.QPalette',), ('PySide2.QtGui.QPalette', 'str')], + "QApplication.setStartDragDistance": ('int',), + "QApplication.setStartDragTime": ('int',), + "QApplication.setStyle": [('PySide2.QtWidgets.QStyle',), ('str',)], + "QApplication.setStyleSheet": ('str',), + "QApplication.setWheelScrollLines": ('int',), + "QApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QApplication.startDragDistance": (), + "QApplication.startDragTime": (), + "QApplication.style": (), + "QApplication.styleSheet": (), + "QApplication.topLevelAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.topLevelWidgets": (), + "QApplication.wheelScrollLines": (), + "QApplication.widgetAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.windowIcon": (), + + # class PySide2.QtWidgets.QBoxLayout: + "QBoxLayout.__init__": ('PySide2.QtWidgets.QBoxLayout.Direction', 'PySide2.QtWidgets.QWidget'), + "QBoxLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QBoxLayout.addLayout": ('PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.addSpacerItem": ('PySide2.QtWidgets.QSpacerItem',), + "QBoxLayout.addSpacing": ('int',), + "QBoxLayout.addStretch": ('int',), + "QBoxLayout.addStrut": ('int',), + "QBoxLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'Alignment')], + "QBoxLayout.count": (), + "QBoxLayout.direction": (), + "QBoxLayout.expandingDirections": (), + "QBoxLayout.hasHeightForWidth": (), + "QBoxLayout.heightForWidth": ('int',), + "QBoxLayout.insertItem": ('int', 'PySide2.QtWidgets.QLayoutItem'), + "QBoxLayout.insertLayout": ('int', 'PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.insertSpacerItem": ('int', 'PySide2.QtWidgets.QSpacerItem'), + "QBoxLayout.insertSpacing": ('int', 'int'), + "QBoxLayout.insertStretch": ('int', 'int'), + "QBoxLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int', 'Alignment'), + "QBoxLayout.invalidate": (), + "QBoxLayout.itemAt": ('int',), + "QBoxLayout.maximumSize": (), + "QBoxLayout.minimumHeightForWidth": ('int',), + "QBoxLayout.minimumSize": (), + "QBoxLayout.setDirection": ('PySide2.QtWidgets.QBoxLayout.Direction',), + "QBoxLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QBoxLayout.setSpacing": ('int',), + "QBoxLayout.setStretch": ('int', 'int'), + "QBoxLayout.setStretchFactor": [('PySide2.QtWidgets.QLayout', 'int'), ('PySide2.QtWidgets.QWidget', 'int')], + "QBoxLayout.sizeHint": (), + "QBoxLayout.spacing": (), + "QBoxLayout.stretch": ('int',), + "QBoxLayout.takeAt": ('int',), + + # class PySide2.QtWidgets.QButtonGroup: + "QButtonGroup.__init__": ('PySide2.QtCore.QObject',), + "QButtonGroup.addButton": ('PySide2.QtWidgets.QAbstractButton', 'int'), + "QButtonGroup.button": ('int',), + "QButtonGroup.buttons": (), + "QButtonGroup.checkedButton": (), + "QButtonGroup.checkedId": (), + "QButtonGroup.exclusive": (), + "QButtonGroup.id": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.setExclusive": ('bool',), + "QButtonGroup.setId": ('PySide2.QtWidgets.QAbstractButton', 'int'), + + # class PySide2.QtWidgets.QCalendarWidget: + "QCalendarWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QCalendarWidget.dateEditAcceptDelay": (), + "QCalendarWidget.dateTextFormat": [(), ('PySide2.QtCore.QDate',)], + "QCalendarWidget.event": ('PySide2.QtCore.QEvent',), + "QCalendarWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCalendarWidget.firstDayOfWeek": (), + "QCalendarWidget.headerTextFormat": (), + "QCalendarWidget.horizontalHeaderFormat": (), + "QCalendarWidget.isDateEditEnabled": (), + "QCalendarWidget.isGridVisible": (), + "QCalendarWidget.isNavigationBarVisible": (), + "QCalendarWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QCalendarWidget.maximumDate": (), + "QCalendarWidget.minimumDate": (), + "QCalendarWidget.minimumSizeHint": (), + "QCalendarWidget.monthShown": (), + "QCalendarWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QCalendarWidget.paintCell": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QDate'), + "QCalendarWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QCalendarWidget.selectedDate": (), + "QCalendarWidget.selectionMode": (), + "QCalendarWidget.setCurrentPage": ('int', 'int'), + "QCalendarWidget.setDateEditAcceptDelay": ('int',), + "QCalendarWidget.setDateEditEnabled": ('bool',), + "QCalendarWidget.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QCalendarWidget.setDateTextFormat": ('PySide2.QtCore.QDate', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.setFirstDayOfWeek": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.setGridVisible": ('bool',), + "QCalendarWidget.setHeaderTextFormat": ('PySide2.QtGui.QTextCharFormat',), + "QCalendarWidget.setHorizontalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.HorizontalHeaderFormat',), + "QCalendarWidget.setMaximumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setMinimumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setNavigationBarVisible": ('bool',), + "QCalendarWidget.setSelectedDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setSelectionMode": ('PySide2.QtWidgets.QCalendarWidget.SelectionMode',), + "QCalendarWidget.setVerticalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.VerticalHeaderFormat',), + "QCalendarWidget.setWeekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.showNextMonth": (), + "QCalendarWidget.showNextYear": (), + "QCalendarWidget.showPreviousMonth": (), + "QCalendarWidget.showPreviousYear": (), + "QCalendarWidget.showSelectedDate": (), + "QCalendarWidget.showToday": (), + "QCalendarWidget.sizeHint": (), + "QCalendarWidget.updateCell": ('PySide2.QtCore.QDate',), + "QCalendarWidget.updateCells": (), + "QCalendarWidget.verticalHeaderFormat": (), + "QCalendarWidget.weekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.yearShown": (), + + # class PySide2.QtWidgets.QCheckBox: + "QCheckBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QCheckBox.checkState": (), + "QCheckBox.checkStateSet": (), + "QCheckBox.event": ('PySide2.QtCore.QEvent',), + "QCheckBox.hitButton": ('PySide2.QtCore.QPoint',), + "QCheckBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QCheckBox.isTristate": (), + "QCheckBox.minimumSizeHint": (), + "QCheckBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QCheckBox.nextCheckState": (), + "QCheckBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCheckBox.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QCheckBox.setTristate": ('bool',), + "QCheckBox.sizeHint": (), + + # class PySide2.QtWidgets.QColorDialog: + "QColorDialog.__init__": [('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QColorDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QColorDialog.currentColor": (), + "QColorDialog.customColor": ('int',), + "QColorDialog.customCount": (), + "QColorDialog.done": ('int',), + "QColorDialog.getColor": ('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget', 'str', 'ColorDialogOptions'), + "QColorDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QColorDialog.options": (), + "QColorDialog.selectedColor": (), + "QColorDialog.setCurrentColor": ('PySide2.QtGui.QColor',), + "QColorDialog.setCustomColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption', 'bool'), + "QColorDialog.setOptions": ('ColorDialogOptions',), + "QColorDialog.setStandardColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setVisible": ('bool',), + "QColorDialog.standardColor": ('int',), + "QColorDialog.testOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption',), + + # class PySide2.QtWidgets.QColumnView: + "QColumnView.__init__": ('PySide2.QtWidgets.QWidget',), + "QColumnView.columnWidths": (), + "QColumnView.createColumn": ('PySide2.QtCore.QModelIndex',), + "QColumnView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QColumnView.horizontalOffset": (), + "QColumnView.indexAt": ('PySide2.QtCore.QPoint',), + "QColumnView.initializeColumn": ('PySide2.QtWidgets.QAbstractItemView',), + "QColumnView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QColumnView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QColumnView.previewWidget": (), + "QColumnView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QColumnView.resizeGripsVisible": (), + "QColumnView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QColumnView.scrollContentsBy": ('int', 'int'), + "QColumnView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QColumnView.selectAll": (), + "QColumnView.setColumnWidths": ('list',), + "QColumnView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QColumnView.setPreviewWidget": ('PySide2.QtWidgets.QWidget',), + "QColumnView.setResizeGripsVisible": ('bool',), + "QColumnView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QColumnView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QColumnView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QColumnView.sizeHint": (), + "QColumnView.verticalOffset": (), + "QColumnView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QColumnView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QComboBox: + "QComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QComboBox.addItem": [('PySide2.QtGui.QIcon', 'str', 'PySide2.support.signature.typing.Any'), ('str', 'PySide2.support.signature.typing.Any')], + "QComboBox.addItems": ('PySide2.support.signature.typing.List',), + "QComboBox.autoCompletion": (), + "QComboBox.autoCompletionCaseSensitivity": (), + "QComboBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QComboBox.clear": (), + "QComboBox.clearEditText": (), + "QComboBox.completer": (), + "QComboBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QComboBox.count": (), + "QComboBox.currentData": ('int',), + "QComboBox.currentIndex": (), + "QComboBox.currentText": (), + "QComboBox.duplicatesEnabled": (), + "QComboBox.event": ('PySide2.QtCore.QEvent',), + "QComboBox.findData": ('PySide2.support.signature.typing.Any', 'int', 'MatchFlags'), + "QComboBox.findText": ('str', 'MatchFlags'), + "QComboBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.hasFrame": (), + "QComboBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QComboBox.hidePopup": (), + "QComboBox.iconSize": (), + "QComboBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionComboBox',), + "QComboBox.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QComboBox.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QComboBox.insertItem": [('int', 'PySide2.QtGui.QIcon', 'str', 'PySide2.support.signature.typing.Any'), ('int', 'str', 'PySide2.support.signature.typing.Any')], + "QComboBox.insertItems": ('int', 'PySide2.support.signature.typing.List'), + "QComboBox.insertPolicy": (), + "QComboBox.insertSeparator": ('int',), + "QComboBox.isEditable": (), + "QComboBox.itemData": ('int', 'int'), + "QComboBox.itemDelegate": (), + "QComboBox.itemIcon": ('int',), + "QComboBox.itemText": ('int',), + "QComboBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.lineEdit": (), + "QComboBox.maxCount": (), + "QComboBox.maxVisibleItems": (), + "QComboBox.minimumContentsLength": (), + "QComboBox.minimumSizeHint": (), + "QComboBox.model": (), + "QComboBox.modelColumn": (), + "QComboBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QComboBox.removeItem": ('int',), + "QComboBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QComboBox.rootModelIndex": (), + "QComboBox.setAutoCompletion": ('bool',), + "QComboBox.setAutoCompletionCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QComboBox.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QComboBox.setCurrentIndex": ('int',), + "QComboBox.setCurrentText": ('str',), + "QComboBox.setDuplicatesEnabled": ('bool',), + "QComboBox.setEditText": ('str',), + "QComboBox.setEditable": ('bool',), + "QComboBox.setFrame": ('bool',), + "QComboBox.setIconSize": ('PySide2.QtCore.QSize',), + "QComboBox.setInsertPolicy": ('PySide2.QtWidgets.QComboBox.InsertPolicy',), + "QComboBox.setItemData": ('int', 'PySide2.support.signature.typing.Any', 'int'), + "QComboBox.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QComboBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QComboBox.setItemText": ('int', 'str'), + "QComboBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QComboBox.setMaxCount": ('int',), + "QComboBox.setMaxVisibleItems": ('int',), + "QComboBox.setMinimumContentsLength": ('int',), + "QComboBox.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QComboBox.setModelColumn": ('int',), + "QComboBox.setRootModelIndex": ('PySide2.QtCore.QModelIndex',), + "QComboBox.setSizeAdjustPolicy": ('PySide2.QtWidgets.QComboBox.SizeAdjustPolicy',), + "QComboBox.setValidator": ('PySide2.QtGui.QValidator',), + "QComboBox.setView": ('PySide2.QtWidgets.QAbstractItemView',), + "QComboBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QComboBox.showPopup": (), + "QComboBox.sizeAdjustPolicy": (), + "QComboBox.sizeHint": (), + "QComboBox.validator": (), + "QComboBox.view": (), + "QComboBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QCommandLinkButton: + "QCommandLinkButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget'), ('str', 'str', 'PySide2.QtWidgets.QWidget')], + "QCommandLinkButton.description": (), + "QCommandLinkButton.event": ('PySide2.QtCore.QEvent',), + "QCommandLinkButton.heightForWidth": ('int',), + "QCommandLinkButton.minimumSizeHint": (), + "QCommandLinkButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCommandLinkButton.setDescription": ('str',), + "QCommandLinkButton.sizeHint": (), + + # class PySide2.QtWidgets.QCommonStyle: + "QCommonStyle.__init__": (), + "QCommonStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QCommonStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QCommonStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QCommonStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QCompleter: + "QCompleter.__init__": [('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QObject')], + "QCompleter.caseSensitivity": (), + "QCompleter.complete": ('PySide2.QtCore.QRect',), + "QCompleter.completionColumn": (), + "QCompleter.completionCount": (), + "QCompleter.completionMode": (), + "QCompleter.completionModel": (), + "QCompleter.completionPrefix": (), + "QCompleter.completionRole": (), + "QCompleter.currentCompletion": (), + "QCompleter.currentIndex": (), + "QCompleter.currentRow": (), + "QCompleter.event": ('PySide2.QtCore.QEvent',), + "QCompleter.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCompleter.filterMode": (), + "QCompleter.maxVisibleItems": (), + "QCompleter.model": (), + "QCompleter.modelSorting": (), + "QCompleter.pathFromIndex": ('PySide2.QtCore.QModelIndex',), + "QCompleter.popup": (), + "QCompleter.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCompleter.setCompletionColumn": ('int',), + "QCompleter.setCompletionMode": ('PySide2.QtWidgets.QCompleter.CompletionMode',), + "QCompleter.setCompletionPrefix": ('str',), + "QCompleter.setCompletionRole": ('int',), + "QCompleter.setCurrentRow": ('int',), + "QCompleter.setFilterMode": ('MatchFlags',), + "QCompleter.setMaxVisibleItems": ('int',), + "QCompleter.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QCompleter.setModelSorting": ('PySide2.QtWidgets.QCompleter.ModelSorting',), + "QCompleter.setPopup": ('PySide2.QtWidgets.QAbstractItemView',), + "QCompleter.setWidget": ('PySide2.QtWidgets.QWidget',), + "QCompleter.setWrapAround": ('bool',), + "QCompleter.splitPath": ('str',), + "QCompleter.widget": (), + "QCompleter.wrapAround": (), + + # class PySide2.QtWidgets.QDataWidgetMapper: + "QDataWidgetMapper.__init__": ('PySide2.QtCore.QObject',), + "QDataWidgetMapper.addMapping": [('PySide2.QtWidgets.QWidget', 'int'), ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtCore.QByteArray')], + "QDataWidgetMapper.clearMapping": (), + "QDataWidgetMapper.currentIndex": (), + "QDataWidgetMapper.itemDelegate": (), + "QDataWidgetMapper.mappedPropertyName": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedSection": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedWidgetAt": ('int',), + "QDataWidgetMapper.model": (), + "QDataWidgetMapper.orientation": (), + "QDataWidgetMapper.removeMapping": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.revert": (), + "QDataWidgetMapper.rootIndex": (), + "QDataWidgetMapper.setCurrentIndex": ('int',), + "QDataWidgetMapper.setCurrentModelIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QDataWidgetMapper.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QDataWidgetMapper.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDataWidgetMapper.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setSubmitPolicy": ('PySide2.QtWidgets.QDataWidgetMapper.SubmitPolicy',), + "QDataWidgetMapper.submit": (), + "QDataWidgetMapper.submitPolicy": (), + "QDataWidgetMapper.toFirst": (), + "QDataWidgetMapper.toLast": (), + "QDataWidgetMapper.toNext": (), + "QDataWidgetMapper.toPrevious": (), + + # class PySide2.QtWidgets.QDateEdit: + "QDateEdit.__init__": [('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDateTimeEdit: + "QDateTimeEdit.__init__": [('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDateTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('PySide2.support.signature.typing.Any', 'type', 'PySide2.QtWidgets.QWidget')], + "QDateTimeEdit.calendarPopup": (), + "QDateTimeEdit.calendarWidget": (), + "QDateTimeEdit.clear": (), + "QDateTimeEdit.clearMaximumDate": (), + "QDateTimeEdit.clearMaximumDateTime": (), + "QDateTimeEdit.clearMaximumTime": (), + "QDateTimeEdit.clearMinimumDate": (), + "QDateTimeEdit.clearMinimumDateTime": (), + "QDateTimeEdit.clearMinimumTime": (), + "QDateTimeEdit.currentSection": (), + "QDateTimeEdit.currentSectionIndex": (), + "QDateTimeEdit.date": (), + "QDateTimeEdit.dateTime": (), + "QDateTimeEdit.dateTimeFromText": ('str',), + "QDateTimeEdit.displayFormat": (), + "QDateTimeEdit.displayedSections": (), + "QDateTimeEdit.event": ('PySide2.QtCore.QEvent',), + "QDateTimeEdit.fixup": ('str',), + "QDateTimeEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QDateTimeEdit.focusNextPrevChild": ('bool',), + "QDateTimeEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QDateTimeEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDateTimeEdit.maximumDate": (), + "QDateTimeEdit.maximumDateTime": (), + "QDateTimeEdit.maximumTime": (), + "QDateTimeEdit.minimumDate": (), + "QDateTimeEdit.minimumDateTime": (), + "QDateTimeEdit.minimumTime": (), + "QDateTimeEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDateTimeEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDateTimeEdit.sectionAt": ('int',), + "QDateTimeEdit.sectionCount": (), + "QDateTimeEdit.sectionText": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCalendarPopup": ('bool',), + "QDateTimeEdit.setCalendarWidget": ('PySide2.QtWidgets.QCalendarWidget',), + "QDateTimeEdit.setCurrentSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCurrentSectionIndex": ('int',), + "QDateTimeEdit.setDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QDateTimeEdit.setDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setDateTimeRange": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QDateTimeEdit.setDisplayFormat": ('str',), + "QDateTimeEdit.setMaximumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMaximumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMaximumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setMinimumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMinimumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMinimumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setSelectedSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setTimeRange": ('PySide2.QtCore.QTime', 'PySide2.QtCore.QTime'), + "QDateTimeEdit.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTimeEdit.sizeHint": (), + "QDateTimeEdit.stepBy": ('int',), + "QDateTimeEdit.stepEnabled": (), + "QDateTimeEdit.textFromDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.time": (), + "QDateTimeEdit.timeSpec": (), + "QDateTimeEdit.validate": ('str', 'int'), + "QDateTimeEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QDesktopWidget: + "QDesktopWidget.__init__": (), + "QDesktopWidget.availableGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.isVirtualDesktop": (), + "QDesktopWidget.numScreens": (), + "QDesktopWidget.primaryScreen": (), + "QDesktopWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDesktopWidget.screen": ('int',), + "QDesktopWidget.screenCount": (), + "QDesktopWidget.screenGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.screenNumber": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDial: + "QDial.__init__": ('PySide2.QtWidgets.QWidget',), + "QDial.event": ('PySide2.QtCore.QEvent',), + "QDial.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QDial.minimumSizeHint": (), + "QDial.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.notchSize": (), + "QDial.notchTarget": (), + "QDial.notchesVisible": (), + "QDial.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDial.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDial.setNotchTarget": ('float',), + "QDial.setNotchesVisible": ('bool',), + "QDial.setWrapping": ('bool',), + "QDial.sizeHint": (), + "QDial.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QDial.wrapping": (), + + # class PySide2.QtWidgets.QDialog: + "QDialog.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QDialog.accept": (), + "QDialog.adjustPosition": ('PySide2.QtWidgets.QWidget',), + "QDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDialog.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QDialog.done": ('int',), + "QDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QDialog.exec_": (), + "QDialog.extension": (), + "QDialog.isSizeGripEnabled": (), + "QDialog.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDialog.minimumSizeHint": (), + "QDialog.open": (), + "QDialog.orientation": (), + "QDialog.reject": (), + "QDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDialog.result": (), + "QDialog.setExtension": ('PySide2.QtWidgets.QWidget',), + "QDialog.setModal": ('bool',), + "QDialog.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialog.setResult": ('int',), + "QDialog.setSizeGripEnabled": ('bool',), + "QDialog.setVisible": ('bool',), + "QDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QDialog.showExtension": ('bool',), + "QDialog.sizeHint": (), + + # class PySide2.QtWidgets.QDialogButtonBox: + "QDialogButtonBox.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('StandardButtons', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('StandardButtons', 'PySide2.QtWidgets.QWidget')], + "QDialogButtonBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole'), ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), ('str', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole')], + "QDialogButtonBox.button": ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), + "QDialogButtonBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.buttons": (), + "QDialogButtonBox.centerButtons": (), + "QDialogButtonBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.clear": (), + "QDialogButtonBox.event": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.orientation": (), + "QDialogButtonBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.setCenterButtons": ('bool',), + "QDialogButtonBox.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialogButtonBox.setStandardButtons": ('StandardButtons',), + "QDialogButtonBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.standardButtons": (), + + # class PySide2.QtWidgets.QDirModel: + "QDirModel.__init__": [('PySide2.QtCore.QObject',), ('PySide2.support.signature.typing.List', 'Filters', 'SortFlags', 'PySide2.QtCore.QObject')], + "QDirModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QDirModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QDirModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filter": (), + "QDirModel.flags": ('PySide2.QtCore.QModelIndex',), + "QDirModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QDirModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QDirModel.iconProvider": (), + "QDirModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QDirModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.isReadOnly": (), + "QDirModel.lazyChildCount": (), + "QDirModel.mimeData": ('PySide2.support.signature.typing.List',), + "QDirModel.mimeTypes": (), + "QDirModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QDirModel.nameFilters": (), + "QDirModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QDirModel.refresh": ('PySide2.QtCore.QModelIndex',), + "QDirModel.remove": ('PySide2.QtCore.QModelIndex',), + "QDirModel.resolveSymlinks": (), + "QDirModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QDirModel.setFilter": ('Filters',), + "QDirModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QDirModel.setLazyChildCount": ('bool',), + "QDirModel.setNameFilters": ('PySide2.support.signature.typing.List',), + "QDirModel.setReadOnly": ('bool',), + "QDirModel.setResolveSymlinks": ('bool',), + "QDirModel.setSorting": ('SortFlags',), + "QDirModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QDirModel.sorting": (), + "QDirModel.supportedDropActions": (), + + # class PySide2.QtWidgets.QDockWidget: + "QDockWidget.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QDockWidget.allowedAreas": (), + "QDockWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QDockWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDockWidget.event": ('PySide2.QtCore.QEvent',), + "QDockWidget.features": (), + "QDockWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionDockWidget',), + "QDockWidget.isAreaAllowed": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QDockWidget.isFloating": (), + "QDockWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDockWidget.setAllowedAreas": ('DockWidgetAreas',), + "QDockWidget.setFeatures": ('DockWidgetFeatures',), + "QDockWidget.setFloating": ('bool',), + "QDockWidget.setTitleBarWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.titleBarWidget": (), + "QDockWidget.toggleViewAction": (), + "QDockWidget.widget": (), + + # class PySide2.QtWidgets.QDoubleSpinBox: + "QDoubleSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QDoubleSpinBox.cleanText": (), + "QDoubleSpinBox.decimals": (), + "QDoubleSpinBox.fixup": ('str',), + "QDoubleSpinBox.maximum": (), + "QDoubleSpinBox.minimum": (), + "QDoubleSpinBox.prefix": (), + "QDoubleSpinBox.setDecimals": ('int',), + "QDoubleSpinBox.setMaximum": ('float',), + "QDoubleSpinBox.setMinimum": ('float',), + "QDoubleSpinBox.setPrefix": ('str',), + "QDoubleSpinBox.setRange": ('float', 'float'), + "QDoubleSpinBox.setSingleStep": ('float',), + "QDoubleSpinBox.setSuffix": ('str',), + "QDoubleSpinBox.setValue": ('float',), + "QDoubleSpinBox.singleStep": (), + "QDoubleSpinBox.suffix": (), + "QDoubleSpinBox.textFromValue": ('float',), + "QDoubleSpinBox.validate": ('str', 'int'), + "QDoubleSpinBox.value": (), + "QDoubleSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QErrorMessage: + "QErrorMessage.__init__": ('PySide2.QtWidgets.QWidget',), + "QErrorMessage.changeEvent": ('PySide2.QtCore.QEvent',), + "QErrorMessage.done": ('int',), + "QErrorMessage.qtHandler": (), + "QErrorMessage.showMessage": [('str',), ('str', 'str')], + + # class PySide2.QtWidgets.QFileDialog: + "QFileDialog.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str')], + "QFileDialog.accept": (), + "QFileDialog.acceptMode": (), + "QFileDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFileDialog.confirmOverwrite": (), + "QFileDialog.defaultSuffix": (), + "QFileDialog.directory": (), + "QFileDialog.directoryUrl": (), + "QFileDialog.done": ('int',), + "QFileDialog.fileMode": (), + "QFileDialog.filter": (), + "QFileDialog.getExistingDirectory": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'Options'), + "QFileDialog.getExistingDirectoryUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'Options', 'PySide2.support.signature.typing.List'), + "QFileDialog.getOpenFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getOpenFileNames": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getOpenFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'PySide2.support.signature.typing.List'), + "QFileDialog.getOpenFileUrls": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'PySide2.support.signature.typing.List'), + "QFileDialog.getSaveFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getSaveFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'PySide2.support.signature.typing.List'), + "QFileDialog.history": (), + "QFileDialog.iconProvider": (), + "QFileDialog.isNameFilterDetailsVisible": (), + "QFileDialog.isReadOnly": (), + "QFileDialog.itemDelegate": (), + "QFileDialog.labelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel',), + "QFileDialog.mimeTypeFilters": (), + "QFileDialog.nameFilters": (), + "QFileDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFileDialog.options": (), + "QFileDialog.proxyModel": (), + "QFileDialog.resolveSymlinks": (), + "QFileDialog.restoreState": ('PySide2.QtCore.QByteArray',), + "QFileDialog.saveState": (), + "QFileDialog.selectFile": ('str',), + "QFileDialog.selectMimeTypeFilter": ('str',), + "QFileDialog.selectNameFilter": ('str',), + "QFileDialog.selectUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.selectedFiles": (), + "QFileDialog.selectedNameFilter": (), + "QFileDialog.selectedUrls": (), + "QFileDialog.setAcceptMode": ('PySide2.QtWidgets.QFileDialog.AcceptMode',), + "QFileDialog.setConfirmOverwrite": ('bool',), + "QFileDialog.setDefaultSuffix": ('str',), + "QFileDialog.setDirectory": [('PySide2.QtCore.QDir',), ('str',)], + "QFileDialog.setDirectoryUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.setFileMode": ('PySide2.QtWidgets.QFileDialog.FileMode',), + "QFileDialog.setFilter": ('Filters',), + "QFileDialog.setHistory": ('PySide2.support.signature.typing.List',), + "QFileDialog.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileDialog.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QFileDialog.setLabelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel', 'str'), + "QFileDialog.setMimeTypeFilters": ('PySide2.support.signature.typing.List',), + "QFileDialog.setNameFilter": ('str',), + "QFileDialog.setNameFilterDetailsVisible": ('bool',), + "QFileDialog.setNameFilters": ('PySide2.support.signature.typing.List',), + "QFileDialog.setOption": ('PySide2.QtWidgets.QFileDialog.Option', 'bool'), + "QFileDialog.setOptions": ('Options',), + "QFileDialog.setProxyModel": ('PySide2.QtCore.QAbstractProxyModel',), + "QFileDialog.setReadOnly": ('bool',), + "QFileDialog.setResolveSymlinks": ('bool',), + "QFileDialog.setSidebarUrls": ('list',), + "QFileDialog.setSupportedSchemes": ('PySide2.support.signature.typing.List',), + "QFileDialog.setViewMode": ('PySide2.QtWidgets.QFileDialog.ViewMode',), + "QFileDialog.setVisible": ('bool',), + "QFileDialog.sidebarUrls": (), + "QFileDialog.supportedSchemes": (), + "QFileDialog.testOption": ('PySide2.QtWidgets.QFileDialog.Option',), + "QFileDialog.viewMode": (), + + # class PySide2.QtWidgets.QFileIconProvider: + "QFileIconProvider.__init__": (), + "QFileIconProvider.icon": [('PySide2.QtCore.QFileInfo',), ('PySide2.QtWidgets.QFileIconProvider.IconType',)], + "QFileIconProvider.options": (), + "QFileIconProvider.setOptions": ('Options',), + "QFileIconProvider.type": ('PySide2.QtCore.QFileInfo',), + + # class PySide2.QtWidgets.QFileSystemModel: + "QFileSystemModel.__init__": ('PySide2.QtCore.QObject',), + "QFileSystemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QFileSystemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.event": ('PySide2.QtCore.QEvent',), + "QFileSystemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filter": (), + "QFileSystemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QFileSystemModel.iconProvider": (), + "QFileSystemModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QFileSystemModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.isReadOnly": (), + "QFileSystemModel.lastModified": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.mimeData": ('PySide2.support.signature.typing.List',), + "QFileSystemModel.mimeTypes": (), + "QFileSystemModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QFileSystemModel.myComputer": ('int',), + "QFileSystemModel.nameFilterDisables": (), + "QFileSystemModel.nameFilters": (), + "QFileSystemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QFileSystemModel.remove": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.resolveSymlinks": (), + "QFileSystemModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.rootDirectory": (), + "QFileSystemModel.rootPath": (), + "QFileSystemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QFileSystemModel.setFilter": ('Filters',), + "QFileSystemModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileSystemModel.setNameFilterDisables": ('bool',), + "QFileSystemModel.setNameFilters": ('PySide2.support.signature.typing.List',), + "QFileSystemModel.setReadOnly": ('bool',), + "QFileSystemModel.setResolveSymlinks": ('bool',), + "QFileSystemModel.setRootPath": ('str',), + "QFileSystemModel.size": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QFileSystemModel.supportedDropActions": (), + "QFileSystemModel.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QFileSystemModel.type": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtWidgets.QFocusFrame: + "QFocusFrame.__init__": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.event": ('PySide2.QtCore.QEvent',), + "QFocusFrame.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFocusFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QFocusFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFocusFrame.setWidget": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.widget": (), + + # class PySide2.QtWidgets.QFontComboBox: + "QFontComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QFontComboBox.currentFont": (), + "QFontComboBox.event": ('PySide2.QtCore.QEvent',), + "QFontComboBox.fontFilters": (), + "QFontComboBox.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontComboBox.setFontFilters": ('FontFilters',), + "QFontComboBox.setWritingSystem": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontComboBox.sizeHint": (), + "QFontComboBox.writingSystem": (), + + # class PySide2.QtWidgets.QFontDialog: + "QFontDialog.__init__": [('PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QFontDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFontDialog.currentFont": (), + "QFontDialog.done": ('int',), + "QFontDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFontDialog.getFont": [('bool', 'PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget', 'str', 'FontDialogOptions'), ('bool', 'PySide2.QtWidgets.QWidget')], + "QFontDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFontDialog.options": (), + "QFontDialog.selectedFont": (), + "QFontDialog.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontDialog.setOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption', 'bool'), + "QFontDialog.setOptions": ('FontDialogOptions',), + "QFontDialog.setVisible": ('bool',), + "QFontDialog.testOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption',), + + # class PySide2.QtWidgets.QFormLayout: + "QFormLayout.__init__": ('PySide2.QtWidgets.QWidget',), + "QFormLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QFormLayout.addRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QLayout'), ('str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.count": (), + "QFormLayout.expandingDirections": (), + "QFormLayout.fieldGrowthPolicy": (), + "QFormLayout.formAlignment": (), + "QFormLayout.getItemPosition": ('int', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getLayoutPosition": ('PySide2.QtWidgets.QLayout', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getWidgetPosition": ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.hasHeightForWidth": (), + "QFormLayout.heightForWidth": ('int',), + "QFormLayout.horizontalSpacing": (), + "QFormLayout.insertRow": [('int', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('int', 'str', 'PySide2.QtWidgets.QLayout'), ('int', 'str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.invalidate": (), + "QFormLayout.itemAt": [('int',), ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole')], + "QFormLayout.labelAlignment": (), + "QFormLayout.labelForField": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QFormLayout.minimumSize": (), + "QFormLayout.rowCount": (), + "QFormLayout.rowWrapPolicy": (), + "QFormLayout.setFieldGrowthPolicy": ('PySide2.QtWidgets.QFormLayout.FieldGrowthPolicy',), + "QFormLayout.setFormAlignment": ('Alignment',), + "QFormLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QFormLayout.setHorizontalSpacing": ('int',), + "QFormLayout.setItem": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayoutItem'), + "QFormLayout.setLabelAlignment": ('Alignment',), + "QFormLayout.setLayout": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayout'), + "QFormLayout.setRowWrapPolicy": ('PySide2.QtWidgets.QFormLayout.RowWrapPolicy',), + "QFormLayout.setSpacing": ('int',), + "QFormLayout.setVerticalSpacing": ('int',), + "QFormLayout.setWidget": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QWidget'), + "QFormLayout.sizeHint": (), + "QFormLayout.spacing": (), + "QFormLayout.takeAt": ('int',), + "QFormLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QFrame: + "QFrame.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QFrame.changeEvent": ('PySide2.QtCore.QEvent',), + "QFrame.drawFrame": ('PySide2.QtGui.QPainter',), + "QFrame.event": ('PySide2.QtCore.QEvent',), + "QFrame.frameRect": (), + "QFrame.frameShadow": (), + "QFrame.frameShape": (), + "QFrame.frameStyle": (), + "QFrame.frameWidth": (), + "QFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QFrame.lineWidth": (), + "QFrame.midLineWidth": (), + "QFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFrame.setFrameRect": ('PySide2.QtCore.QRect',), + "QFrame.setFrameShadow": ('PySide2.QtWidgets.QFrame.Shadow',), + "QFrame.setFrameShape": ('PySide2.QtWidgets.QFrame.Shape',), + "QFrame.setFrameStyle": ('int',), + "QFrame.setLineWidth": ('int',), + "QFrame.setMidLineWidth": ('int',), + "QFrame.sizeHint": (), + + # class PySide2.QtWidgets.QGesture: + "QGesture.__init__": ('PySide2.QtCore.QObject',), + "QGesture.gestureCancelPolicy": (), + "QGesture.gestureType": (), + "QGesture.hasHotSpot": (), + "QGesture.hotSpot": (), + "QGesture.setGestureCancelPolicy": ('PySide2.QtWidgets.QGesture.GestureCancelPolicy',), + "QGesture.setHotSpot": ('PySide2.QtCore.QPointF',), + "QGesture.state": (), + "QGesture.unsetHotSpot": (), + + # class PySide2.QtWidgets.QGestureEvent: + "QGestureEvent.__init__": ('list',), + "QGestureEvent.accept": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.activeGestures": (), + "QGestureEvent.canceledGestures": (), + "QGestureEvent.gesture": ('PySide2.QtCore.Qt.GestureType',), + "QGestureEvent.gestures": (), + "QGestureEvent.ignore": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.isAccepted": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.mapToGraphicsScene": ('PySide2.QtCore.QPointF',), + "QGestureEvent.setAccepted": [('PySide2.QtCore.Qt.GestureType', 'bool'), ('PySide2.QtWidgets.QGesture', 'bool'), ('bool',)], + "QGestureEvent.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGestureEvent.widget": (), + + # class PySide2.QtWidgets.QGestureRecognizer: + "QGestureRecognizer.__init__": (), + "QGestureRecognizer.create": ('PySide2.QtCore.QObject',), + "QGestureRecognizer.recognize": ('PySide2.QtWidgets.QGesture', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGestureRecognizer.registerRecognizer": ('PySide2.QtWidgets.QGestureRecognizer',), + "QGestureRecognizer.reset": ('PySide2.QtWidgets.QGesture',), + "QGestureRecognizer.unregisterRecognizer": ('PySide2.QtCore.Qt.GestureType',), + + # class PySide2.QtWidgets.QGraphicsAnchor: + "QGraphicsAnchor.setSpacing": ('float',), + "QGraphicsAnchor.setSizePolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QGraphicsAnchor.sizePolicy": (), + "QGraphicsAnchor.spacing": (), + "QGraphicsAnchor.unsetSpacing": (), + + # class PySide2.QtWidgets.QGraphicsAnchorLayout: + "QGraphicsAnchorLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsAnchorLayout.addAnchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.addAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'Orientations'), + "QGraphicsAnchorLayout.addCornerAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner'), + "QGraphicsAnchorLayout.anchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.count": (), + "QGraphicsAnchorLayout.horizontalSpacing": (), + "QGraphicsAnchorLayout.invalidate": (), + "QGraphicsAnchorLayout.itemAt": ('int',), + "QGraphicsAnchorLayout.removeAt": ('int',), + "QGraphicsAnchorLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsAnchorLayout.setHorizontalSpacing": ('float',), + "QGraphicsAnchorLayout.setSpacing": ('float',), + "QGraphicsAnchorLayout.setVerticalSpacing": ('float',), + "QGraphicsAnchorLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsAnchorLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsBlurEffect: + "QGraphicsBlurEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsBlurEffect.blurHints": (), + "QGraphicsBlurEffect.blurRadius": (), + "QGraphicsBlurEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsBlurEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsBlurEffect.setBlurHints": ('BlurHints',), + "QGraphicsBlurEffect.setBlurRadius": ('float',), + + # class PySide2.QtWidgets.QGraphicsColorizeEffect: + "QGraphicsColorizeEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsColorizeEffect.color": (), + "QGraphicsColorizeEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsColorizeEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsColorizeEffect.setStrength": ('float',), + "QGraphicsColorizeEffect.strength": (), + + # class PySide2.QtWidgets.QGraphicsDropShadowEffect: + "QGraphicsDropShadowEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsDropShadowEffect.blurRadius": (), + "QGraphicsDropShadowEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsDropShadowEffect.color": (), + "QGraphicsDropShadowEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsDropShadowEffect.offset": (), + "QGraphicsDropShadowEffect.setBlurRadius": ('float',), + "QGraphicsDropShadowEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsDropShadowEffect.setOffset": [('PySide2.QtCore.QPointF',), ('float',), ('float', 'float')], + "QGraphicsDropShadowEffect.setXOffset": ('float',), + "QGraphicsDropShadowEffect.setYOffset": ('float',), + "QGraphicsDropShadowEffect.xOffset": (), + "QGraphicsDropShadowEffect.yOffset": (), + + # class PySide2.QtWidgets.QGraphicsEffect: + "QGraphicsEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsEffect.boundingRect": (), + "QGraphicsEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.drawSource": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.isEnabled": (), + "QGraphicsEffect.setEnabled": ('bool',), + "QGraphicsEffect.sourceBoundingRect": ('PySide2.QtCore.Qt.CoordinateSystem',), + "QGraphicsEffect.sourceChanged": ('ChangeFlags',), + "QGraphicsEffect.sourceIsPixmap": (), + "QGraphicsEffect.sourcePixmap": ('PySide2.QtCore.Qt.CoordinateSystem', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QGraphicsEffect.PixmapPadMode'), + "QGraphicsEffect.update": (), + "QGraphicsEffect.updateBoundingRect": (), + + # class PySide2.QtWidgets.QGraphicsEllipseItem: + "QGraphicsEllipseItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsEllipseItem.boundingRect": (), + "QGraphicsEllipseItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsEllipseItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsEllipseItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsEllipseItem.opaqueArea": (), + "QGraphicsEllipseItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsEllipseItem.rect": (), + "QGraphicsEllipseItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsEllipseItem.setSpanAngle": ('int',), + "QGraphicsEllipseItem.setStartAngle": ('int',), + "QGraphicsEllipseItem.shape": (), + "QGraphicsEllipseItem.spanAngle": (), + "QGraphicsEllipseItem.startAngle": (), + "QGraphicsEllipseItem.type": (), + + # class PySide2.QtWidgets.QGraphicsGridLayout: + "QGraphicsGridLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.addItem": [('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'int', 'int', 'Alignment')], + "QGraphicsGridLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.columnAlignment": ('int',), + "QGraphicsGridLayout.columnCount": (), + "QGraphicsGridLayout.columnMaximumWidth": ('int',), + "QGraphicsGridLayout.columnMinimumWidth": ('int',), + "QGraphicsGridLayout.columnPreferredWidth": ('int',), + "QGraphicsGridLayout.columnSpacing": ('int',), + "QGraphicsGridLayout.columnStretchFactor": ('int',), + "QGraphicsGridLayout.count": (), + "QGraphicsGridLayout.horizontalSpacing": (), + "QGraphicsGridLayout.invalidate": (), + "QGraphicsGridLayout.itemAt": [('int',), ('int', 'int')], + "QGraphicsGridLayout.removeAt": ('int',), + "QGraphicsGridLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.rowAlignment": ('int',), + "QGraphicsGridLayout.rowCount": (), + "QGraphicsGridLayout.rowMaximumHeight": ('int',), + "QGraphicsGridLayout.rowMinimumHeight": ('int',), + "QGraphicsGridLayout.rowPreferredHeight": ('int',), + "QGraphicsGridLayout.rowSpacing": ('int',), + "QGraphicsGridLayout.rowStretchFactor": ('int',), + "QGraphicsGridLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'Alignment'), + "QGraphicsGridLayout.setColumnAlignment": ('int', 'Alignment'), + "QGraphicsGridLayout.setColumnFixedWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMaximumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMinimumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnPreferredWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnSpacing": ('int', 'float'), + "QGraphicsGridLayout.setColumnStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsGridLayout.setHorizontalSpacing": ('float',), + "QGraphicsGridLayout.setRowAlignment": ('int', 'Alignment'), + "QGraphicsGridLayout.setRowFixedHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMaximumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMinimumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowPreferredHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowSpacing": ('int', 'float'), + "QGraphicsGridLayout.setRowStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setSpacing": ('float',), + "QGraphicsGridLayout.setVerticalSpacing": ('float',), + "QGraphicsGridLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsItem: + "QGraphicsItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.acceptDrops": (), + "QGraphicsItem.acceptHoverEvents": (), + "QGraphicsItem.acceptTouchEvents": (), + "QGraphicsItem.acceptedMouseButtons": (), + "QGraphicsItem.addToIndex": (), + "QGraphicsItem.advance": ('int',), + "QGraphicsItem.boundingRect": (), + "QGraphicsItem.boundingRegion": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.boundingRegionGranularity": (), + "QGraphicsItem.cacheMode": (), + "QGraphicsItem.childItems": (), + "QGraphicsItem.childrenBoundingRect": (), + "QGraphicsItem.clearFocus": (), + "QGraphicsItem.clipPath": (), + "QGraphicsItem.collidesWithItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidesWithPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidingItems": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsItem.commonAncestorItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsItem.cursor": (), + "QGraphicsItem.data": ('int',), + "QGraphicsItem.deviceTransform": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.effectiveOpacity": (), + "QGraphicsItem.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsItem.filtersChildEvents": (), + "QGraphicsItem.flags": (), + "QGraphicsItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusItem": (), + "QGraphicsItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusProxy": (), + "QGraphicsItem.focusScopeItem": (), + "QGraphicsItem.grabKeyboard": (), + "QGraphicsItem.grabMouse": (), + "QGraphicsItem.graphicsEffect": (), + "QGraphicsItem.group": (), + "QGraphicsItem.handlesChildEvents": (), + "QGraphicsItem.hasCursor": (), + "QGraphicsItem.hasFocus": (), + "QGraphicsItem.hide": (), + "QGraphicsItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsItem.inputMethodHints": (), + "QGraphicsItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsItem.installSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isActive": (), + "QGraphicsItem.isAncestorOf": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isBlockedByModalPanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isClipped": (), + "QGraphicsItem.isEnabled": (), + "QGraphicsItem.isObscured": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isPanel": (), + "QGraphicsItem.isSelected": (), + "QGraphicsItem.isUnderMouse": (), + "QGraphicsItem.isVisible": (), + "QGraphicsItem.isVisibleTo": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isWidget": (), + "QGraphicsItem.isWindow": (), + "QGraphicsItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'PySide2.support.signature.typing.Any'), + "QGraphicsItem.itemTransform": ('PySide2.QtWidgets.QGraphicsItem', 'bool'), + "QGraphicsItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.mapFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapToParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.matrix": (), + "QGraphicsItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.moveBy": ('float', 'float'), + "QGraphicsItem.opacity": (), + "QGraphicsItem.opaqueArea": (), + "QGraphicsItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItem.panel": (), + "QGraphicsItem.panelModality": (), + "QGraphicsItem.parentItem": (), + "QGraphicsItem.parentObject": (), + "QGraphicsItem.parentWidget": (), + "QGraphicsItem.pos": (), + "QGraphicsItem.prepareGeometryChange": (), + "QGraphicsItem.removeFromIndex": (), + "QGraphicsItem.removeSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.resetMatrix": (), + "QGraphicsItem.resetTransform": (), + "QGraphicsItem.rotation": (), + "QGraphicsItem.scale": (), + "QGraphicsItem.scene": (), + "QGraphicsItem.sceneBoundingRect": (), + "QGraphicsItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsItem.sceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsItem.sceneMatrix": (), + "QGraphicsItem.scenePos": (), + "QGraphicsItem.sceneTransform": (), + "QGraphicsItem.scroll": ('float', 'float', 'PySide2.QtCore.QRectF'), + "QGraphicsItem.setAcceptDrops": ('bool',), + "QGraphicsItem.setAcceptHoverEvents": ('bool',), + "QGraphicsItem.setAcceptTouchEvents": ('bool',), + "QGraphicsItem.setAcceptedMouseButtons": ('MouseButtons',), + "QGraphicsItem.setActive": ('bool',), + "QGraphicsItem.setBoundingRegionGranularity": ('float',), + "QGraphicsItem.setCacheMode": ('PySide2.QtWidgets.QGraphicsItem.CacheMode', 'PySide2.QtCore.QSize'), + "QGraphicsItem.setCursor": ('PySide2.QtGui.QCursor',), + "QGraphicsItem.setData": ('int', 'PySide2.support.signature.typing.Any'), + "QGraphicsItem.setEnabled": ('bool',), + "QGraphicsItem.setFiltersChildEvents": ('bool',), + "QGraphicsItem.setFlag": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemFlag', 'bool'), + "QGraphicsItem.setFlags": ('GraphicsItemFlags',), + "QGraphicsItem.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsItem.setFocusProxy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QGraphicsItem.setGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsItem.setHandlesChildEvents": ('bool',), + "QGraphicsItem.setInputMethodHints": ('InputMethodHints',), + "QGraphicsItem.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsItem.setOpacity": ('float',), + "QGraphicsItem.setPanelModality": ('PySide2.QtWidgets.QGraphicsItem.PanelModality',), + "QGraphicsItem.setParentItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setPos": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setRotation": ('float',), + "QGraphicsItem.setScale": ('float',), + "QGraphicsItem.setSelected": ('bool',), + "QGraphicsItem.setToolTip": ('str',), + "QGraphicsItem.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsItem.setTransformOriginPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setTransformations": ('list',), + "QGraphicsItem.setVisible": ('bool',), + "QGraphicsItem.setX": ('float',), + "QGraphicsItem.setY": ('float',), + "QGraphicsItem.setZValue": ('float',), + "QGraphicsItem.shape": (), + "QGraphicsItem.show": (), + "QGraphicsItem.stackBefore": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.toGraphicsObject": [], + "QGraphicsItem.toolTip": (), + "QGraphicsItem.topLevelItem": (), + "QGraphicsItem.topLevelWidget": (), + "QGraphicsItem.transform": (), + "QGraphicsItem.transformOriginPoint": (), + "QGraphicsItem.transformations": (), + "QGraphicsItem.type": (), + "QGraphicsItem.ungrabKeyboard": (), + "QGraphicsItem.ungrabMouse": (), + "QGraphicsItem.unsetCursor": (), + "QGraphicsItem.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.updateMicroFocus": (), + "QGraphicsItem.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsItem.window": (), + "QGraphicsItem.x": (), + "QGraphicsItem.y": (), + "QGraphicsItem.zValue": (), + + # class PySide2.QtWidgets.QGraphicsItemAnimation: + "QGraphicsItemAnimation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsItemAnimation.afterAnimationStep": ('float',), + "QGraphicsItemAnimation.beforeAnimationStep": ('float',), + "QGraphicsItemAnimation.clear": (), + "QGraphicsItemAnimation.horizontalScaleAt": ('float',), + "QGraphicsItemAnimation.horizontalShearAt": ('float',), + "QGraphicsItemAnimation.item": (), + "QGraphicsItemAnimation.matrixAt": ('float',), + "QGraphicsItemAnimation.posAt": ('float',), + "QGraphicsItemAnimation.posList": (), + "QGraphicsItemAnimation.reset": (), + "QGraphicsItemAnimation.rotationAt": ('float',), + "QGraphicsItemAnimation.rotationList": (), + "QGraphicsItemAnimation.scaleList": (), + "QGraphicsItemAnimation.setItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemAnimation.setPosAt": ('float', 'PySide2.QtCore.QPointF'), + "QGraphicsItemAnimation.setRotationAt": ('float', 'float'), + "QGraphicsItemAnimation.setScaleAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setShearAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setStep": ('float',), + "QGraphicsItemAnimation.setTimeLine": ('PySide2.QtCore.QTimeLine',), + "QGraphicsItemAnimation.setTranslationAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.shearList": (), + "QGraphicsItemAnimation.timeLine": (), + "QGraphicsItemAnimation.translationList": (), + "QGraphicsItemAnimation.verticalScaleAt": ('float',), + "QGraphicsItemAnimation.verticalShearAt": ('float',), + "QGraphicsItemAnimation.xTranslationAt": ('float',), + "QGraphicsItemAnimation.yTranslationAt": ('float',), + + # class PySide2.QtWidgets.QGraphicsItemGroup: + "QGraphicsItemGroup.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.addToGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.boundingRect": (), + "QGraphicsItemGroup.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.opaqueArea": (), + "QGraphicsItemGroup.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItemGroup.removeFromGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.type": (), + + # class PySide2.QtWidgets.QGraphicsLayout: + "QGraphicsLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.activate": (), + "QGraphicsLayout.addChildLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.count": (), + "QGraphicsLayout.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.instantInvalidatePropagation": (), + "QGraphicsLayout.invalidate": (), + "QGraphicsLayout.isActivated": (), + "QGraphicsLayout.itemAt": ('int',), + "QGraphicsLayout.removeAt": ('int',), + "QGraphicsLayout.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.setInstantInvalidatePropagation": ('bool',), + "QGraphicsLayout.updateGeometry": (), + "QGraphicsLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QGraphicsLayoutItem: + "QGraphicsLayoutItem.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'bool'), + "QGraphicsLayoutItem.contentsRect": (), + "QGraphicsLayoutItem.effectiveSizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.geometry": (), + "QGraphicsLayoutItem.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayoutItem.graphicsItem": (), + "QGraphicsLayoutItem.isLayout": (), + "QGraphicsLayoutItem.maximumHeight": (), + "QGraphicsLayoutItem.maximumSize": (), + "QGraphicsLayoutItem.maximumWidth": (), + "QGraphicsLayoutItem.minimumHeight": (), + "QGraphicsLayoutItem.minimumSize": (), + "QGraphicsLayoutItem.minimumWidth": (), + "QGraphicsLayoutItem.ownedByLayout": (), + "QGraphicsLayoutItem.parentLayoutItem": (), + "QGraphicsLayoutItem.preferredHeight": (), + "QGraphicsLayoutItem.preferredSize": (), + "QGraphicsLayoutItem.preferredWidth": (), + "QGraphicsLayoutItem.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLayoutItem.setGraphicsItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLayoutItem.setMaximumHeight": ('float',), + "QGraphicsLayoutItem.setMaximumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMaximumWidth": ('float',), + "QGraphicsLayoutItem.setMinimumHeight": ('float',), + "QGraphicsLayoutItem.setMinimumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMinimumWidth": ('float',), + "QGraphicsLayoutItem.setOwnedByLayout": ('bool',), + "QGraphicsLayoutItem.setParentLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayoutItem.setPreferredHeight": ('float',), + "QGraphicsLayoutItem.setPreferredSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setPreferredWidth": ('float',), + "QGraphicsLayoutItem.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QGraphicsLayoutItem.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.sizePolicy": (), + "QGraphicsLayoutItem.updateGeometry": (), + + # class PySide2.QtWidgets.QGraphicsLineItem: + "QGraphicsLineItem.__init__": [('PySide2.QtCore.QLineF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsLineItem.boundingRect": (), + "QGraphicsLineItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsLineItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsLineItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLineItem.line": (), + "QGraphicsLineItem.opaqueArea": (), + "QGraphicsLineItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsLineItem.pen": (), + "QGraphicsLineItem.setLine": [('PySide2.QtCore.QLineF',), ('float', 'float', 'float', 'float')], + "QGraphicsLineItem.setPen": ('PySide2.QtGui.QPen',), + "QGraphicsLineItem.shape": (), + "QGraphicsLineItem.type": (), + + # class PySide2.QtWidgets.QGraphicsLinearLayout: + "QGraphicsLinearLayout.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QGraphicsLayoutItem'), ('PySide2.QtWidgets.QGraphicsLayoutItem',)], + "QGraphicsLinearLayout.addItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.addStretch": ('int',), + "QGraphicsLinearLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.count": (), + "QGraphicsLinearLayout.dump": ('int',), + "QGraphicsLinearLayout.insertItem": ('int', 'PySide2.QtWidgets.QGraphicsLayoutItem'), + "QGraphicsLinearLayout.insertStretch": ('int', 'int'), + "QGraphicsLinearLayout.invalidate": (), + "QGraphicsLinearLayout.itemAt": ('int',), + "QGraphicsLinearLayout.itemSpacing": ('int',), + "QGraphicsLinearLayout.orientation": (), + "QGraphicsLinearLayout.removeAt": ('int',), + "QGraphicsLinearLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'Alignment'), + "QGraphicsLinearLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLinearLayout.setItemSpacing": ('int', 'float'), + "QGraphicsLinearLayout.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsLinearLayout.setSpacing": ('float',), + "QGraphicsLinearLayout.setStretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int'), + "QGraphicsLinearLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLinearLayout.spacing": (), + "QGraphicsLinearLayout.stretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + + # class PySide2.QtWidgets.QGraphicsObject: + "QGraphicsObject.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsObject.event": ('PySide2.QtCore.QEvent',), + "QGraphicsObject.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'GestureFlags'), + "QGraphicsObject.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QGraphicsObject.updateMicroFocus": (), + + # class PySide2.QtWidgets.QGraphicsOpacityEffect: + "QGraphicsOpacityEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsOpacityEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsOpacityEffect.opacity": (), + "QGraphicsOpacityEffect.opacityMask": (), + "QGraphicsOpacityEffect.setOpacity": ('float',), + "QGraphicsOpacityEffect.setOpacityMask": ('PySide2.QtGui.QBrush',), + + # class PySide2.QtWidgets.QGraphicsPathItem: + "QGraphicsPathItem.__init__": [('PySide2.QtGui.QPainterPath', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPathItem.boundingRect": (), + "QGraphicsPathItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPathItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsPathItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPathItem.opaqueArea": (), + "QGraphicsPathItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPathItem.path": (), + "QGraphicsPathItem.setPath": ('PySide2.QtGui.QPainterPath',), + "QGraphicsPathItem.shape": (), + "QGraphicsPathItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPixmapItem: + "QGraphicsPixmapItem.__init__": [('PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPixmapItem.boundingRect": (), + "QGraphicsPixmapItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPixmapItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsPixmapItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPixmapItem.offset": (), + "QGraphicsPixmapItem.opaqueArea": (), + "QGraphicsPixmapItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPixmapItem.pixmap": (), + "QGraphicsPixmapItem.setOffset": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsPixmapItem.setPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsPixmapItem.setShapeMode": ('PySide2.QtWidgets.QGraphicsPixmapItem.ShapeMode',), + "QGraphicsPixmapItem.setTransformationMode": ('PySide2.QtCore.Qt.TransformationMode',), + "QGraphicsPixmapItem.shape": (), + "QGraphicsPixmapItem.shapeMode": (), + "QGraphicsPixmapItem.transformationMode": (), + "QGraphicsPixmapItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPolygonItem: + "QGraphicsPolygonItem.__init__": [('PySide2.QtGui.QPolygonF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPolygonItem.boundingRect": (), + "QGraphicsPolygonItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPolygonItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsPolygonItem.fillRule": (), + "QGraphicsPolygonItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPolygonItem.opaqueArea": (), + "QGraphicsPolygonItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPolygonItem.polygon": (), + "QGraphicsPolygonItem.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QGraphicsPolygonItem.setPolygon": ('PySide2.QtGui.QPolygonF',), + "QGraphicsPolygonItem.shape": (), + "QGraphicsPolygonItem.type": (), + + # class PySide2.QtWidgets.QGraphicsProxyWidget: + "QGraphicsProxyWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'WindowFlags'), + "QGraphicsProxyWidget.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsProxyWidget.createProxyForChildWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsProxyWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.focusNextPrevChild": ('bool',), + "QGraphicsProxyWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsProxyWidget.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsProxyWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsProxyWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'PySide2.support.signature.typing.Any'), + "QGraphicsProxyWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.newProxyWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsProxyWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsProxyWidget.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsProxyWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsProxyWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsProxyWidget.subWidgetRect": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.type": (), + "QGraphicsProxyWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsProxyWidget.widget": (), + + # class PySide2.QtWidgets.QGraphicsRectItem: + "QGraphicsRectItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsRectItem.boundingRect": (), + "QGraphicsRectItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsRectItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsRectItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsRectItem.opaqueArea": (), + "QGraphicsRectItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsRectItem.rect": (), + "QGraphicsRectItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsRectItem.shape": (), + "QGraphicsRectItem.type": (), + + # class PySide2.QtWidgets.QGraphicsRotation: + "QGraphicsRotation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsRotation.angle": (), + "QGraphicsRotation.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsRotation.axis": (), + "QGraphicsRotation.origin": (), + "QGraphicsRotation.setAngle": ('float',), + "QGraphicsRotation.setAxis": [('PySide2.QtCore.Qt.Axis',), ('PySide2.QtGui.QVector3D',)], + "QGraphicsRotation.setOrigin": ('PySide2.QtGui.QVector3D',), + + # class PySide2.QtWidgets.QGraphicsScale: + "QGraphicsScale.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsScale.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsScale.origin": (), + "QGraphicsScale.setOrigin": ('PySide2.QtGui.QVector3D',), + "QGraphicsScale.setXScale": ('float',), + "QGraphicsScale.setYScale": ('float',), + "QGraphicsScale.setZScale": ('float',), + "QGraphicsScale.xScale": (), + "QGraphicsScale.yScale": (), + "QGraphicsScale.zScale": (), + + # class PySide2.QtWidgets.QGraphicsScene: + "QGraphicsScene.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QObject'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.QObject')], + "QGraphicsScene.activePanel": (), + "QGraphicsScene.activeWindow": (), + "QGraphicsScene.addEllipse": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.addLine": [('PySide2.QtCore.QLineF', 'PySide2.QtGui.QPen'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen')], + "QGraphicsScene.addPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsScene.addPolygon": ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addRect": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addSimpleText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addWidget": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QGraphicsScene.advance": (), + "QGraphicsScene.backgroundBrush": (), + "QGraphicsScene.bspTreeDepth": (), + "QGraphicsScene.clear": (), + "QGraphicsScene.clearFocus": (), + "QGraphicsScene.clearSelection": (), + "QGraphicsScene.collidingItems": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsScene.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsScene.createItemGroup": ('list',), + "QGraphicsScene.destroyItemGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsScene.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.event": ('PySide2.QtCore.QEvent',), + "QGraphicsScene.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.focusItem": (), + "QGraphicsScene.focusNextPrevChild": ('bool',), + "QGraphicsScene.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.font": (), + "QGraphicsScene.foregroundBrush": (), + "QGraphicsScene.hasFocus": (), + "QGraphicsScene.height": (), + "QGraphicsScene.helpEvent": ('PySide2.QtWidgets.QGraphicsSceneHelpEvent',), + "QGraphicsScene.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsScene.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsScene.invalidate": [('PySide2.QtCore.QRectF', 'SceneLayers'), ('float', 'float', 'float', 'float', 'SceneLayers')], + "QGraphicsScene.isActive": (), + "QGraphicsScene.isSortCacheEnabled": (), + "QGraphicsScene.itemAt": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTransform'), ('float', 'float', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemIndexMethod": (), + "QGraphicsScene.items": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemsBoundingRect": (), + "QGraphicsScene.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.minimumRenderSize": (), + "QGraphicsScene.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseGrabberItem": (), + "QGraphicsScene.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.palette": (), + "QGraphicsScene.removeItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.render": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), + "QGraphicsScene.sceneRect": (), + "QGraphicsScene.selectedItems": (), + "QGraphicsScene.selectionArea": (), + "QGraphicsScene.sendEvent": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.setActivePanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.setActiveWindow": ('PySide2.QtWidgets.QGraphicsWidget',), + "QGraphicsScene.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setBspTreeDepth": ('int',), + "QGraphicsScene.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsScene.setFocusItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.FocusReason'), + "QGraphicsScene.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsScene.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setItemIndexMethod": ('PySide2.QtWidgets.QGraphicsScene.ItemIndexMethod',), + "QGraphicsScene.setMinimumRenderSize": ('float',), + "QGraphicsScene.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsScene.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.setSelectionArea": [('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionOperation', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.setSortCacheEnabled": ('bool',), + "QGraphicsScene.setStickyFocus": ('bool',), + "QGraphicsScene.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsScene.stickyFocus": (), + "QGraphicsScene.style": (), + "QGraphicsScene.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.views": (), + "QGraphicsScene.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsScene.width": (), + + # class PySide2.QtWidgets.QGraphicsSceneContextMenuEvent: + "QGraphicsSceneContextMenuEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneContextMenuEvent.modifiers": (), + "QGraphicsSceneContextMenuEvent.pos": (), + "QGraphicsSceneContextMenuEvent.reason": (), + "QGraphicsSceneContextMenuEvent.scenePos": (), + "QGraphicsSceneContextMenuEvent.screenPos": (), + "QGraphicsSceneContextMenuEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneContextMenuEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setReason": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent.Reason',), + "QGraphicsSceneContextMenuEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneDragDropEvent: + "QGraphicsSceneDragDropEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneDragDropEvent.acceptProposedAction": (), + "QGraphicsSceneDragDropEvent.buttons": (), + "QGraphicsSceneDragDropEvent.dropAction": (), + "QGraphicsSceneDragDropEvent.mimeData": (), + "QGraphicsSceneDragDropEvent.modifiers": (), + "QGraphicsSceneDragDropEvent.pos": (), + "QGraphicsSceneDragDropEvent.possibleActions": (), + "QGraphicsSceneDragDropEvent.proposedAction": (), + "QGraphicsSceneDragDropEvent.scenePos": (), + "QGraphicsSceneDragDropEvent.screenPos": (), + "QGraphicsSceneDragDropEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneDragDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneDragDropEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setPossibleActions": ('DropActions',), + "QGraphicsSceneDragDropEvent.setProposedAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneDragDropEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneEvent: + "QGraphicsSceneEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneEvent.widget": (), + + # class PySide2.QtWidgets.QGraphicsSceneHelpEvent: + "QGraphicsSceneHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHelpEvent.scenePos": (), + "QGraphicsSceneHelpEvent.screenPos": (), + "QGraphicsSceneHelpEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHelpEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneHoverEvent: + "QGraphicsSceneHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHoverEvent.lastPos": (), + "QGraphicsSceneHoverEvent.lastScenePos": (), + "QGraphicsSceneHoverEvent.lastScreenPos": (), + "QGraphicsSceneHoverEvent.modifiers": (), + "QGraphicsSceneHoverEvent.pos": (), + "QGraphicsSceneHoverEvent.scenePos": (), + "QGraphicsSceneHoverEvent.screenPos": (), + "QGraphicsSceneHoverEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneHoverEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneHoverEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneMouseEvent: + "QGraphicsSceneMouseEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneMouseEvent.button": (), + "QGraphicsSceneMouseEvent.buttonDownPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScenePos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttons": (), + "QGraphicsSceneMouseEvent.flags": (), + "QGraphicsSceneMouseEvent.lastPos": (), + "QGraphicsSceneMouseEvent.lastScenePos": (), + "QGraphicsSceneMouseEvent.lastScreenPos": (), + "QGraphicsSceneMouseEvent.modifiers": (), + "QGraphicsSceneMouseEvent.pos": (), + "QGraphicsSceneMouseEvent.scenePos": (), + "QGraphicsSceneMouseEvent.screenPos": (), + "QGraphicsSceneMouseEvent.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.setButtonDownPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScenePos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPoint'), + "QGraphicsSceneMouseEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneMouseEvent.setFlags": ('MouseEventFlags',), + "QGraphicsSceneMouseEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneMouseEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setSource": ('PySide2.QtCore.Qt.MouseEventSource',), + "QGraphicsSceneMouseEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneMoveEvent: + "QGraphicsSceneMoveEvent.__init__": (), + "QGraphicsSceneMoveEvent.newPos": (), + "QGraphicsSceneMoveEvent.oldPos": (), + "QGraphicsSceneMoveEvent.setNewPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMoveEvent.setOldPos": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QGraphicsSceneResizeEvent: + "QGraphicsSceneResizeEvent.__init__": (), + "QGraphicsSceneResizeEvent.newSize": (), + "QGraphicsSceneResizeEvent.oldSize": (), + "QGraphicsSceneResizeEvent.setNewSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsSceneResizeEvent.setOldSize": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtWidgets.QGraphicsSceneWheelEvent: + "QGraphicsSceneWheelEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneWheelEvent.buttons": (), + "QGraphicsSceneWheelEvent.delta": (), + "QGraphicsSceneWheelEvent.modifiers": (), + "QGraphicsSceneWheelEvent.orientation": (), + "QGraphicsSceneWheelEvent.pos": (), + "QGraphicsSceneWheelEvent.scenePos": (), + "QGraphicsSceneWheelEvent.screenPos": (), + "QGraphicsSceneWheelEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneWheelEvent.setDelta": ('int',), + "QGraphicsSceneWheelEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneWheelEvent.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsSceneWheelEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSimpleTextItem: + "QGraphicsSimpleTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSimpleTextItem.boundingRect": (), + "QGraphicsSimpleTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsSimpleTextItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsSimpleTextItem.font": (), + "QGraphicsSimpleTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsSimpleTextItem.opaqueArea": (), + "QGraphicsSimpleTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSimpleTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsSimpleTextItem.setText": ('str',), + "QGraphicsSimpleTextItem.shape": (), + "QGraphicsSimpleTextItem.text": (), + "QGraphicsSimpleTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTextItem: + "QGraphicsTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsTextItem.adjustSize": (), + "QGraphicsTextItem.boundingRect": (), + "QGraphicsTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsTextItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsTextItem.defaultTextColor": (), + "QGraphicsTextItem.document": (), + "QGraphicsTextItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsTextItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.font": (), + "QGraphicsTextItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsTextItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsTextItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.opaqueArea": (), + "QGraphicsTextItem.openExternalLinks": (), + "QGraphicsTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsTextItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsTextItem.setDefaultTextColor": ('PySide2.QtGui.QColor',), + "QGraphicsTextItem.setDocument": ('PySide2.QtGui.QTextDocument',), + "QGraphicsTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsTextItem.setHtml": ('str',), + "QGraphicsTextItem.setOpenExternalLinks": ('bool',), + "QGraphicsTextItem.setPlainText": ('str',), + "QGraphicsTextItem.setTabChangesFocus": ('bool',), + "QGraphicsTextItem.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QGraphicsTextItem.setTextInteractionFlags": ('TextInteractionFlags',), + "QGraphicsTextItem.setTextWidth": ('float',), + "QGraphicsTextItem.shape": (), + "QGraphicsTextItem.tabChangesFocus": (), + "QGraphicsTextItem.textCursor": (), + "QGraphicsTextItem.textInteractionFlags": (), + "QGraphicsTextItem.textWidth": (), + "QGraphicsTextItem.toHtml": (), + "QGraphicsTextItem.toPlainText": (), + "QGraphicsTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTransform: + "QGraphicsTransform.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsTransform.update": (), + + # class PySide2.QtWidgets.QGraphicsView: + "QGraphicsView.__init__": [('PySide2.QtWidgets.QGraphicsScene', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QGraphicsView.alignment": (), + "QGraphicsView.backgroundBrush": (), + "QGraphicsView.cacheMode": (), + "QGraphicsView.centerOn": [('PySide2.QtCore.QPointF',), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float')], + "QGraphicsView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QGraphicsView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QGraphicsView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QGraphicsView.dragMode": (), + "QGraphicsView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QGraphicsView.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawItems": ('PySide2.QtGui.QPainter', 'int', 'PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtWidgets.QStyleOptionGraphicsItem'), + "QGraphicsView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QGraphicsView.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('PySide2.QtWidgets.QGraphicsItem', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsView.event": ('PySide2.QtCore.QEvent',), + "QGraphicsView.fitInView": [('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.focusNextPrevChild": ('bool',), + "QGraphicsView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.foregroundBrush": (), + "QGraphicsView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsView.invalidateScene": ('PySide2.QtCore.QRectF', 'SceneLayers'), + "QGraphicsView.isInteractive": (), + "QGraphicsView.isTransformed": (), + "QGraphicsView.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QGraphicsView.items": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ItemSelectionMode')], + "QGraphicsView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsView.mapToScene": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('int', 'int'), ('int', 'int', 'int', 'int')], + "QGraphicsView.matrix": (), + "QGraphicsView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.optimizationFlags": (), + "QGraphicsView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGraphicsView.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.renderHints": (), + "QGraphicsView.resetCachedContent": (), + "QGraphicsView.resetMatrix": (), + "QGraphicsView.resetTransform": (), + "QGraphicsView.resizeAnchor": (), + "QGraphicsView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGraphicsView.rotate": ('float',), + "QGraphicsView.rubberBandRect": (), + "QGraphicsView.rubberBandSelectionMode": (), + "QGraphicsView.scale": ('float', 'float'), + "QGraphicsView.scene": (), + "QGraphicsView.sceneRect": (), + "QGraphicsView.scrollContentsBy": ('int', 'int'), + "QGraphicsView.setAlignment": ('Alignment',), + "QGraphicsView.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setCacheMode": ('CacheMode',), + "QGraphicsView.setDragMode": ('PySide2.QtWidgets.QGraphicsView.DragMode',), + "QGraphicsView.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setInteractive": ('bool',), + "QGraphicsView.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsView.setOptimizationFlag": ('PySide2.QtWidgets.QGraphicsView.OptimizationFlag', 'bool'), + "QGraphicsView.setOptimizationFlags": ('OptimizationFlags',), + "QGraphicsView.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QGraphicsView.setRenderHints": ('RenderHints',), + "QGraphicsView.setResizeAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setRubberBandSelectionMode": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsView.setScene": ('PySide2.QtWidgets.QGraphicsScene',), + "QGraphicsView.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsView.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsView.setTransformationAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setViewportUpdateMode": ('PySide2.QtWidgets.QGraphicsView.ViewportUpdateMode',), + "QGraphicsView.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QGraphicsView.shear": ('float', 'float'), + "QGraphicsView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsView.sizeHint": (), + "QGraphicsView.transform": (), + "QGraphicsView.transformationAnchor": (), + "QGraphicsView.translate": ('float', 'float'), + "QGraphicsView.updateScene": ('list',), + "QGraphicsView.updateSceneRect": ('PySide2.QtCore.QRectF',), + "QGraphicsView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsView.viewportTransform": (), + "QGraphicsView.viewportUpdateMode": (), + "QGraphicsView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QGraphicsWidget: + "QGraphicsWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'WindowFlags'), + "QGraphicsWidget.actions": (), + "QGraphicsWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.addActions": ('list',), + "QGraphicsWidget.adjustSize": (), + "QGraphicsWidget.autoFillBackground": (), + "QGraphicsWidget.boundingRect": (), + "QGraphicsWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.close": (), + "QGraphicsWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QGraphicsWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusNextPrevChild": ('bool',), + "QGraphicsWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusPolicy": (), + "QGraphicsWidget.focusWidget": (), + "QGraphicsWidget.font": (), + "QGraphicsWidget.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.getWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.grabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QGraphicsWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QGraphicsWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QGraphicsWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QGraphicsWidget.isActiveWindow": (), + "QGraphicsWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'PySide2.support.signature.typing.Any'), + "QGraphicsWidget.layout": (), + "QGraphicsWidget.layoutDirection": (), + "QGraphicsWidget.moveEvent": ('PySide2.QtWidgets.QGraphicsSceneMoveEvent',), + "QGraphicsWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.paintWindowFrame": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.palette": (), + "QGraphicsWidget.polishEvent": (), + "QGraphicsWidget.propertyChange": ('str', 'PySide2.support.signature.typing.Any'), + "QGraphicsWidget.rect": (), + "QGraphicsWidget.releaseShortcut": ('int',), + "QGraphicsWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.resize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsWidget.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QGraphicsWidget.setAutoFillBackground": ('bool',), + "QGraphicsWidget.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QGraphicsWidget.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsWidget.setGeometry": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsWidget.setLayout": ('PySide2.QtWidgets.QGraphicsLayout',), + "QGraphicsWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGraphicsWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QGraphicsWidget.setShortcutEnabled": ('int', 'bool'), + "QGraphicsWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsWidget.setTabOrder": ('PySide2.QtWidgets.QGraphicsWidget', 'PySide2.QtWidgets.QGraphicsWidget'), + "QGraphicsWidget.setWindowFlags": ('WindowFlags',), + "QGraphicsWidget.setWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setWindowTitle": ('str',), + "QGraphicsWidget.shape": (), + "QGraphicsWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsWidget.size": (), + "QGraphicsWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsWidget.style": (), + "QGraphicsWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QGraphicsWidget.type": (), + "QGraphicsWidget.ungrabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.unsetLayoutDirection": (), + "QGraphicsWidget.unsetWindowFrameMargins": (), + "QGraphicsWidget.updateGeometry": (), + "QGraphicsWidget.windowFlags": (), + "QGraphicsWidget.windowFrameEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.windowFrameGeometry": (), + "QGraphicsWidget.windowFrameRect": (), + "QGraphicsWidget.windowFrameSectionAt": ('PySide2.QtCore.QPointF',), + "QGraphicsWidget.windowTitle": (), + "QGraphicsWidget.windowType": (), + + # class PySide2.QtWidgets.QGridLayout: + "QGridLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QGridLayout.addItem": [('PySide2.QtWidgets.QLayoutItem',), ('PySide2.QtWidgets.QLayoutItem', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.addLayout": [('PySide2.QtWidgets.QLayout', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QLayout', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.cellRect": ('int', 'int'), + "QGridLayout.columnCount": (), + "QGridLayout.columnMinimumWidth": ('int',), + "QGridLayout.columnStretch": ('int',), + "QGridLayout.count": (), + "QGridLayout.expandingDirections": (), + "QGridLayout.getItemPosition": ('int', 'int', 'int', 'int', 'int'), + "QGridLayout.hasHeightForWidth": (), + "QGridLayout.heightForWidth": ('int',), + "QGridLayout.horizontalSpacing": (), + "QGridLayout.invalidate": (), + "QGridLayout.itemAt": ('int',), + "QGridLayout.itemAtPosition": ('int', 'int'), + "QGridLayout.maximumSize": (), + "QGridLayout.minimumHeightForWidth": ('int',), + "QGridLayout.minimumSize": (), + "QGridLayout.originCorner": (), + "QGridLayout.rowCount": (), + "QGridLayout.rowMinimumHeight": ('int',), + "QGridLayout.rowStretch": ('int',), + "QGridLayout.setColumnMinimumWidth": ('int', 'int'), + "QGridLayout.setColumnStretch": ('int', 'int'), + "QGridLayout.setDefaultPositioning": ('int', 'PySide2.QtCore.Qt.Orientation'), + "QGridLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QGridLayout.setHorizontalSpacing": ('int',), + "QGridLayout.setOriginCorner": ('PySide2.QtCore.Qt.Corner',), + "QGridLayout.setRowMinimumHeight": ('int', 'int'), + "QGridLayout.setRowStretch": ('int', 'int'), + "QGridLayout.setSpacing": ('int',), + "QGridLayout.setVerticalSpacing": ('int',), + "QGridLayout.sizeHint": (), + "QGridLayout.spacing": (), + "QGridLayout.takeAt": ('int',), + "QGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGroupBox: + "QGroupBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QGroupBox.alignment": (), + "QGroupBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QGroupBox.childEvent": ('PySide2.QtCore.QChildEvent',), + "QGroupBox.event": ('PySide2.QtCore.QEvent',), + "QGroupBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGroupBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionGroupBox',), + "QGroupBox.isCheckable": (), + "QGroupBox.isChecked": (), + "QGroupBox.isFlat": (), + "QGroupBox.minimumSizeHint": (), + "QGroupBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGroupBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGroupBox.setAlignment": ('int',), + "QGroupBox.setCheckable": ('bool',), + "QGroupBox.setChecked": ('bool',), + "QGroupBox.setFlat": ('bool',), + "QGroupBox.setTitle": ('str',), + "QGroupBox.title": (), + + # class PySide2.QtWidgets.QHBoxLayout: + "QHBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QHeaderView: + "QHeaderView.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), + "QHeaderView.cascadingSectionResizes": (), + "QHeaderView.count": (), + "QHeaderView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QHeaderView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QHeaderView.defaultAlignment": (), + "QHeaderView.defaultSectionSize": (), + "QHeaderView.doItemsLayout": (), + "QHeaderView.event": ('PySide2.QtCore.QEvent',), + "QHeaderView.headerDataChanged": ('PySide2.QtCore.Qt.Orientation', 'int', 'int'), + "QHeaderView.hiddenSectionCount": (), + "QHeaderView.hideSection": ('int',), + "QHeaderView.highlightSections": (), + "QHeaderView.horizontalOffset": (), + "QHeaderView.indexAt": ('PySide2.QtCore.QPoint',), + "QHeaderView.initStyleOption": [('PySide2.QtWidgets.QStyleOptionFrame',), ('PySide2.QtWidgets.QStyleOptionHeader',)], + "QHeaderView.initialize": (), + "QHeaderView.initializeSections": [(), ('int', 'int')], + "QHeaderView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.isSectionHidden": ('int',), + "QHeaderView.isSortIndicatorShown": (), + "QHeaderView.length": (), + "QHeaderView.logicalIndex": ('int',), + "QHeaderView.logicalIndexAt": [('PySide2.QtCore.QPoint',), ('int',), ('int', 'int')], + "QHeaderView.maximumSectionSize": (), + "QHeaderView.minimumSectionSize": (), + "QHeaderView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QHeaderView.moveSection": ('int', 'int'), + "QHeaderView.offset": (), + "QHeaderView.orientation": (), + "QHeaderView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QHeaderView.paintSection": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int'), + "QHeaderView.reset": (), + "QHeaderView.resetDefaultSectionSize": (), + "QHeaderView.resizeContentsPrecision": (), + "QHeaderView.resizeSection": ('int', 'int'), + "QHeaderView.resizeSections": [(), ('PySide2.QtWidgets.QHeaderView.ResizeMode',)], + "QHeaderView.restoreState": ('PySide2.QtCore.QByteArray',), + "QHeaderView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.saveState": (), + "QHeaderView.scrollContentsBy": ('int', 'int'), + "QHeaderView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QHeaderView.sectionPosition": ('int',), + "QHeaderView.sectionResizeMode": ('int',), + "QHeaderView.sectionSize": ('int',), + "QHeaderView.sectionSizeFromContents": ('int',), + "QHeaderView.sectionSizeHint": ('int',), + "QHeaderView.sectionViewportPosition": ('int',), + "QHeaderView.sectionsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsClickable": (), + "QHeaderView.sectionsHidden": (), + "QHeaderView.sectionsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsMovable": (), + "QHeaderView.sectionsMoved": (), + "QHeaderView.setCascadingSectionResizes": ('bool',), + "QHeaderView.setDefaultAlignment": ('Alignment',), + "QHeaderView.setDefaultSectionSize": ('int',), + "QHeaderView.setHighlightSections": ('bool',), + "QHeaderView.setMaximumSectionSize": ('int',), + "QHeaderView.setMinimumSectionSize": ('int',), + "QHeaderView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QHeaderView.setOffset": ('int',), + "QHeaderView.setOffsetToLastSection": (), + "QHeaderView.setOffsetToSectionPosition": ('int',), + "QHeaderView.setResizeContentsPrecision": ('int',), + "QHeaderView.setSectionHidden": ('int', 'bool'), + "QHeaderView.setSectionResizeMode": [('PySide2.QtWidgets.QHeaderView.ResizeMode',), ('int', 'PySide2.QtWidgets.QHeaderView.ResizeMode')], + "QHeaderView.setSectionsClickable": ('bool',), + "QHeaderView.setSectionsMovable": ('bool',), + "QHeaderView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QHeaderView.setSortIndicator": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QHeaderView.setSortIndicatorShown": ('bool',), + "QHeaderView.setStretchLastSection": ('bool',), + "QHeaderView.setVisible": ('bool',), + "QHeaderView.showSection": ('int',), + "QHeaderView.sizeHint": (), + "QHeaderView.sortIndicatorOrder": (), + "QHeaderView.sortIndicatorSection": (), + "QHeaderView.stretchLastSection": (), + "QHeaderView.stretchSectionCount": (), + "QHeaderView.swapSections": ('int', 'int'), + "QHeaderView.updateGeometries": (), + "QHeaderView.updateSection": ('int',), + "QHeaderView.verticalOffset": (), + "QHeaderView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QHeaderView.visualIndex": ('int',), + "QHeaderView.visualIndexAt": ('int',), + "QHeaderView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QInputDialog: + "QInputDialog.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QInputDialog.cancelButtonText": (), + "QInputDialog.comboBoxItems": (), + "QInputDialog.done": ('int',), + "QInputDialog.doubleDecimals": (), + "QInputDialog.doubleMaximum": (), + "QInputDialog.doubleMinimum": (), + "QInputDialog.doubleValue": (), + "QInputDialog.getDouble": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'float', 'float', 'float', 'int', 'bool', 'WindowFlags'), + "QInputDialog.getInt": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'int', 'int', 'int', 'int', 'bool', 'WindowFlags'), + "QInputDialog.getItem": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.support.signature.typing.List', 'int', 'bool', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.getMultiLineText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.getText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QLineEdit.EchoMode', 'str', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.inputMode": (), + "QInputDialog.intMaximum": (), + "QInputDialog.intMinimum": (), + "QInputDialog.intStep": (), + "QInputDialog.intValue": (), + "QInputDialog.isComboBoxEditable": (), + "QInputDialog.labelText": (), + "QInputDialog.minimumSizeHint": (), + "QInputDialog.okButtonText": (), + "QInputDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QInputDialog.setCancelButtonText": ('str',), + "QInputDialog.setComboBoxEditable": ('bool',), + "QInputDialog.setComboBoxItems": ('PySide2.support.signature.typing.List',), + "QInputDialog.setDoubleDecimals": ('int',), + "QInputDialog.setDoubleMaximum": ('float',), + "QInputDialog.setDoubleMinimum": ('float',), + "QInputDialog.setDoubleRange": ('float', 'float'), + "QInputDialog.setDoubleValue": ('float',), + "QInputDialog.setInputMode": ('PySide2.QtWidgets.QInputDialog.InputMode',), + "QInputDialog.setIntMaximum": ('int',), + "QInputDialog.setIntMinimum": ('int',), + "QInputDialog.setIntRange": ('int', 'int'), + "QInputDialog.setIntStep": ('int',), + "QInputDialog.setIntValue": ('int',), + "QInputDialog.setLabelText": ('str',), + "QInputDialog.setOkButtonText": ('str',), + "QInputDialog.setOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption', 'bool'), + "QInputDialog.setTextEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QInputDialog.setTextValue": ('str',), + "QInputDialog.setVisible": ('bool',), + "QInputDialog.sizeHint": (), + "QInputDialog.testOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption',), + "QInputDialog.textEchoMode": (), + "QInputDialog.textValue": (), + + # class PySide2.QtWidgets.QItemDelegate: + "QItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.decoration": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.support.signature.typing.Any'), + "QItemDelegate.doCheck": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.support.signature.typing.Any'), + "QItemDelegate.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.drawCheck": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.CheckState'), + "QItemDelegate.drawDecoration": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), + "QItemDelegate.drawDisplay": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'str'), + "QItemDelegate.drawFocus": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect'), + "QItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QItemDelegate.hasClipping": (), + "QItemDelegate.itemEditorFactory": (), + "QItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.rect": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex', 'int'), + "QItemDelegate.setClipping": ('bool',), + "QItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setOptions": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QStyleOptionViewItem'), + "QItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.textRectangle": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QFont', 'str'), + "QItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QItemEditorCreatorBase: + "QItemEditorCreatorBase.__init__": (), + "QItemEditorCreatorBase.createWidget": ('PySide2.QtWidgets.QWidget',), + "QItemEditorCreatorBase.valuePropertyName": (), + + # class PySide2.QtWidgets.QItemEditorFactory: + "QItemEditorFactory.__init__": (), + "QItemEditorFactory.createEditor": ('int', 'PySide2.QtWidgets.QWidget'), + "QItemEditorFactory.defaultFactory": (), + "QItemEditorFactory.registerEditor": ('int', 'PySide2.QtWidgets.QItemEditorCreatorBase'), + "QItemEditorFactory.setDefaultFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemEditorFactory.valuePropertyName": ('int',), + + # class PySide2.QtWidgets.QKeyEventTransition: + "QKeyEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'int', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QKeyEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.key": (), + "QKeyEventTransition.modifierMask": (), + "QKeyEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.setKey": ('int',), + "QKeyEventTransition.setModifierMask": ('KeyboardModifiers',), + + # class PySide2.QtWidgets.QKeySequenceEdit: + "QKeySequenceEdit.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QKeySequenceEdit.clear": (), + "QKeySequenceEdit.event": ('PySide2.QtCore.QEvent',), + "QKeySequenceEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keySequence": (), + "QKeySequenceEdit.setKeySequence": ('PySide2.QtGui.QKeySequence',), + "QKeySequenceEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QLCDNumber: + "QLCDNumber.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'PySide2.QtWidgets.QWidget')], + "QLCDNumber.checkOverflow": [('float',), ('int',)], + "QLCDNumber.digitCount": (), + "QLCDNumber.display": [('float',), ('int',), ('str',)], + "QLCDNumber.event": ('PySide2.QtCore.QEvent',), + "QLCDNumber.intValue": (), + "QLCDNumber.mode": (), + "QLCDNumber.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLCDNumber.segmentStyle": (), + "QLCDNumber.setBinMode": (), + "QLCDNumber.setDecMode": (), + "QLCDNumber.setDigitCount": ('int',), + "QLCDNumber.setHexMode": (), + "QLCDNumber.setMode": ('PySide2.QtWidgets.QLCDNumber.Mode',), + "QLCDNumber.setOctMode": (), + "QLCDNumber.setSegmentStyle": ('PySide2.QtWidgets.QLCDNumber.SegmentStyle',), + "QLCDNumber.setSmallDecimalPoint": ('bool',), + "QLCDNumber.sizeHint": (), + "QLCDNumber.smallDecimalPoint": (), + "QLCDNumber.value": (), + + # class PySide2.QtWidgets.QLabel: + "QLabel.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QLabel.alignment": (), + "QLabel.buddy": (), + "QLabel.changeEvent": ('PySide2.QtCore.QEvent',), + "QLabel.clear": (), + "QLabel.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLabel.event": ('PySide2.QtCore.QEvent',), + "QLabel.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.focusNextPrevChild": ('bool',), + "QLabel.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.hasScaledContents": (), + "QLabel.hasSelectedText": (), + "QLabel.heightForWidth": ('int',), + "QLabel.indent": (), + "QLabel.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLabel.margin": (), + "QLabel.minimumSizeHint": (), + "QLabel.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.movie": (), + "QLabel.openExternalLinks": (), + "QLabel.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLabel.picture": (), + "QLabel.pixmap": (), + "QLabel.selectedText": (), + "QLabel.selectionStart": (), + "QLabel.setAlignment": ('Alignment',), + "QLabel.setBuddy": ('PySide2.QtWidgets.QWidget',), + "QLabel.setIndent": ('int',), + "QLabel.setMargin": ('int',), + "QLabel.setMovie": ('PySide2.QtGui.QMovie',), + "QLabel.setNum": [('float',), ('int',)], + "QLabel.setOpenExternalLinks": ('bool',), + "QLabel.setPicture": ('PySide2.QtGui.QPicture',), + "QLabel.setPixmap": ('PySide2.QtGui.QPixmap',), + "QLabel.setScaledContents": ('bool',), + "QLabel.setSelection": ('int', 'int'), + "QLabel.setText": ('str',), + "QLabel.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QLabel.setTextInteractionFlags": ('TextInteractionFlags',), + "QLabel.setWordWrap": ('bool',), + "QLabel.sizeHint": (), + "QLabel.text": (), + "QLabel.textFormat": (), + "QLabel.textInteractionFlags": (), + "QLabel.wordWrap": (), + + # class PySide2.QtWidgets.QLayout: + "QLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QLayout.activate": (), + "QLayout.addChildLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.addChildWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.adoptLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.alignmentRect": ('PySide2.QtCore.QRect',), + "QLayout.childEvent": ('PySide2.QtCore.QChildEvent',), + "QLayout.closestAcceptableSize": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QSize'), + "QLayout.contentsMargins": (), + "QLayout.contentsRect": (), + "QLayout.controlTypes": (), + "QLayout.count": (), + "QLayout.expandingDirections": (), + "QLayout.geometry": (), + "QLayout.getContentsMargins": ('int', 'int', 'int', 'int'), + "QLayout.indexOf": ('PySide2.QtWidgets.QWidget',), + "QLayout.invalidate": (), + "QLayout.isEmpty": (), + "QLayout.isEnabled": (), + "QLayout.itemAt": ('int',), + "QLayout.layout": (), + "QLayout.margin": (), + "QLayout.maximumSize": (), + "QLayout.menuBar": (), + "QLayout.minimumSize": (), + "QLayout.parentWidget": (), + "QLayout.removeItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.replaceWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget', 'FindChildOptions'), + "QLayout.setAlignment": [('Alignment',), ('PySide2.QtWidgets.QLayout', 'Alignment'), ('PySide2.QtWidgets.QWidget', 'Alignment')], + "QLayout.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLayout.setEnabled": ('bool',), + "QLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QLayout.setMargin": ('int',), + "QLayout.setMenuBar": ('PySide2.QtWidgets.QWidget',), + "QLayout.setSizeConstraint": ('PySide2.QtWidgets.QLayout.SizeConstraint',), + "QLayout.setSpacing": ('int',), + "QLayout.sizeConstraint": (), + "QLayout.spacing": (), + "QLayout.takeAt": ('int',), + "QLayout.totalHeightForWidth": ('int',), + "QLayout.totalMaximumSize": (), + "QLayout.totalMinimumSize": (), + "QLayout.totalSizeHint": (), + "QLayout.update": (), + "QLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QLayoutItem: + "QLayoutItem.__init__": ('Alignment',), + "QLayoutItem.alignment": (), + "QLayoutItem.controlTypes": (), + "QLayoutItem.expandingDirections": (), + "QLayoutItem.geometry": (), + "QLayoutItem.hasHeightForWidth": (), + "QLayoutItem.heightForWidth": ('int',), + "QLayoutItem.invalidate": (), + "QLayoutItem.isEmpty": (), + "QLayoutItem.layout": (), + "QLayoutItem.maximumSize": (), + "QLayoutItem.minimumHeightForWidth": ('int',), + "QLayoutItem.minimumSize": (), + "QLayoutItem.setAlignment": ('Alignment',), + "QLayoutItem.setGeometry": ('PySide2.QtCore.QRect',), + "QLayoutItem.sizeHint": (), + "QLayoutItem.spacerItem": (), + "QLayoutItem.widget": (), + + # class PySide2.QtWidgets.QLineEdit: + "QLineEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QLineEdit.addAction": [('PySide2.QtGui.QIcon', 'PySide2.QtWidgets.QLineEdit.ActionPosition'), ('PySide2.QtWidgets.QAction',), ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QLineEdit.ActionPosition')], + "QLineEdit.alignment": (), + "QLineEdit.backspace": (), + "QLineEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QLineEdit.clear": (), + "QLineEdit.completer": (), + "QLineEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLineEdit.copy": (), + "QLineEdit.createStandardContextMenu": (), + "QLineEdit.cursorBackward": ('bool', 'int'), + "QLineEdit.cursorForward": ('bool', 'int'), + "QLineEdit.cursorMoveStyle": (), + "QLineEdit.cursorPosition": (), + "QLineEdit.cursorPositionAt": ('PySide2.QtCore.QPoint',), + "QLineEdit.cursorRect": (), + "QLineEdit.cursorWordBackward": ('bool',), + "QLineEdit.cursorWordForward": ('bool',), + "QLineEdit.cut": (), + "QLineEdit.del_": (), + "QLineEdit.deselect": (), + "QLineEdit.displayText": (), + "QLineEdit.dragEnabled": (), + "QLineEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QLineEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QLineEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QLineEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QLineEdit.echoMode": (), + "QLineEdit.end": ('bool',), + "QLineEdit.event": ('PySide2.QtCore.QEvent',), + "QLineEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.getTextMargins": ('int', 'int', 'int', 'int'), + "QLineEdit.hasAcceptableInput": (), + "QLineEdit.hasFrame": (), + "QLineEdit.hasSelectedText": (), + "QLineEdit.home": ('bool',), + "QLineEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QLineEdit.inputMask": (), + "QLineEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QLineEdit.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QLineEdit.insert": ('str',), + "QLineEdit.isClearButtonEnabled": (), + "QLineEdit.isModified": (), + "QLineEdit.isReadOnly": (), + "QLineEdit.isRedoAvailable": (), + "QLineEdit.isUndoAvailable": (), + "QLineEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLineEdit.maxLength": (), + "QLineEdit.minimumSizeHint": (), + "QLineEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLineEdit.paste": (), + "QLineEdit.placeholderText": (), + "QLineEdit.redo": (), + "QLineEdit.selectAll": (), + "QLineEdit.selectedText": (), + "QLineEdit.selectionStart": (), + "QLineEdit.setAlignment": ('Alignment',), + "QLineEdit.setClearButtonEnabled": ('bool',), + "QLineEdit.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QLineEdit.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QLineEdit.setCursorPosition": ('int',), + "QLineEdit.setDragEnabled": ('bool',), + "QLineEdit.setEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QLineEdit.setFrame": ('bool',), + "QLineEdit.setInputMask": ('str',), + "QLineEdit.setMaxLength": ('int',), + "QLineEdit.setModified": ('bool',), + "QLineEdit.setPlaceholderText": ('str',), + "QLineEdit.setReadOnly": ('bool',), + "QLineEdit.setSelection": ('int', 'int'), + "QLineEdit.setText": ('str',), + "QLineEdit.setTextMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLineEdit.setValidator": ('PySide2.QtGui.QValidator',), + "QLineEdit.sizeHint": (), + "QLineEdit.text": (), + "QLineEdit.textMargins": (), + "QLineEdit.undo": (), + "QLineEdit.validator": (), + + # class PySide2.QtWidgets.QListView: + "QListView.__init__": ('PySide2.QtWidgets.QWidget',), + "QListView.batchSize": (), + "QListView.clearPropertyFlags": (), + "QListView.contentsSize": (), + "QListView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QListView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QListView.doItemsLayout": (), + "QListView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QListView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QListView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListView.event": ('PySide2.QtCore.QEvent',), + "QListView.flow": (), + "QListView.gridSize": (), + "QListView.horizontalOffset": (), + "QListView.indexAt": ('PySide2.QtCore.QPoint',), + "QListView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QListView.isRowHidden": ('int',), + "QListView.isSelectionRectVisible": (), + "QListView.isWrapping": (), + "QListView.layoutMode": (), + "QListView.modelColumn": (), + "QListView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QListView.movement": (), + "QListView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QListView.rectForIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.reset": (), + "QListView.resizeContents": ('int', 'int'), + "QListView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QListView.resizeMode": (), + "QListView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.scrollContentsBy": ('int', 'int'), + "QListView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListView.selectedIndexes": (), + "QListView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QListView.setBatchSize": ('int',), + "QListView.setFlow": ('PySide2.QtWidgets.QListView.Flow',), + "QListView.setGridSize": ('PySide2.QtCore.QSize',), + "QListView.setLayoutMode": ('PySide2.QtWidgets.QListView.LayoutMode',), + "QListView.setModelColumn": ('int',), + "QListView.setMovement": ('PySide2.QtWidgets.QListView.Movement',), + "QListView.setPositionForIndex": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QModelIndex'), + "QListView.setResizeMode": ('PySide2.QtWidgets.QListView.ResizeMode',), + "QListView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.setRowHidden": ('int', 'bool'), + "QListView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QListView.setSelectionRectVisible": ('bool',), + "QListView.setSpacing": ('int',), + "QListView.setUniformItemSizes": ('bool',), + "QListView.setViewMode": ('PySide2.QtWidgets.QListView.ViewMode',), + "QListView.setWordWrap": ('bool',), + "QListView.setWrapping": ('bool',), + "QListView.spacing": (), + "QListView.startDrag": ('DropActions',), + "QListView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QListView.uniformItemSizes": (), + "QListView.updateGeometries": (), + "QListView.verticalOffset": (), + "QListView.viewMode": (), + "QListView.viewOptions": (), + "QListView.viewportSizeHint": (), + "QListView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QListView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QListView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QListView.wordWrap": (), + + # class PySide2.QtWidgets.QListWidget: + "QListWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QListWidget.addItem": [('PySide2.QtWidgets.QListWidgetItem',), ('str',)], + "QListWidget.addItems": ('PySide2.support.signature.typing.List',), + "QListWidget.clear": (), + "QListWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.count": (), + "QListWidget.currentItem": (), + "QListWidget.currentRow": (), + "QListWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListWidget.dropMimeData": ('int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QListWidget.editItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.event": ('PySide2.QtCore.QEvent',), + "QListWidget.findItems": ('str', 'MatchFlags'), + "QListWidget.indexFromItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.insertItem": [('int', 'PySide2.QtWidgets.QListWidgetItem'), ('int', 'str')], + "QListWidget.insertItems": ('int', 'PySide2.support.signature.typing.List'), + "QListWidget.isItemHidden": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isItemSelected": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isSortingEnabled": (), + "QListWidget.item": ('int',), + "QListWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QListWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QListWidget.itemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.items": ('PySide2.QtCore.QMimeData',), + "QListWidget.mimeData": ('list',), + "QListWidget.mimeTypes": (), + "QListWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.removeItemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.row": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.scrollToItem": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListWidget.selectedItems": (), + "QListWidget.setCurrentItem": [('PySide2.QtWidgets.QListWidgetItem',), ('PySide2.QtWidgets.QListWidgetItem', 'SelectionFlags')], + "QListWidget.setCurrentRow": [('int',), ('int', 'SelectionFlags')], + "QListWidget.setItemHidden": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemSelected": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemWidget": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QWidget'), + "QListWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QListWidget.setSortingEnabled": ('bool',), + "QListWidget.sortItems": ('PySide2.QtCore.Qt.SortOrder',), + "QListWidget.supportedDropActions": (), + "QListWidget.takeItem": ('int',), + "QListWidget.visualItemRect": ('PySide2.QtWidgets.QListWidgetItem',), + + # class PySide2.QtWidgets.QListWidgetItem: + "QListWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidgetItem',), ('str', 'PySide2.QtWidgets.QListWidget', 'int')], + "QListWidgetItem.background": (), + "QListWidgetItem.backgroundColor": (), + "QListWidgetItem.checkState": (), + "QListWidgetItem.clone": (), + "QListWidgetItem.data": ('int',), + "QListWidgetItem.flags": (), + "QListWidgetItem.font": (), + "QListWidgetItem.foreground": (), + "QListWidgetItem.icon": (), + "QListWidgetItem.isHidden": (), + "QListWidgetItem.isSelected": (), + "QListWidgetItem.listWidget": (), + "QListWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QListWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QListWidgetItem.setData": ('int', 'PySide2.support.signature.typing.Any'), + "QListWidgetItem.setFlags": ('ItemFlags',), + "QListWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QListWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setHidden": ('bool',), + "QListWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QListWidgetItem.setSelected": ('bool',), + "QListWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QListWidgetItem.setStatusTip": ('str',), + "QListWidgetItem.setText": ('str',), + "QListWidgetItem.setTextAlignment": ('int',), + "QListWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setToolTip": ('str',), + "QListWidgetItem.setWhatsThis": ('str',), + "QListWidgetItem.sizeHint": (), + "QListWidgetItem.statusTip": (), + "QListWidgetItem.text": (), + "QListWidgetItem.textAlignment": (), + "QListWidgetItem.textColor": (), + "QListWidgetItem.toolTip": (), + "QListWidgetItem.type": (), + "QListWidgetItem.whatsThis": (), + "QListWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QMainWindow: + "QMainWindow.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMainWindow.addDockWidget": [('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget'), ('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation')], + "QMainWindow.addToolBar": [('PySide2.QtCore.Qt.ToolBarArea', 'PySide2.QtWidgets.QToolBar'), ('PySide2.QtWidgets.QToolBar',), ('str',)], + "QMainWindow.addToolBarBreak": ('PySide2.QtCore.Qt.ToolBarArea',), + "QMainWindow.centralWidget": (), + "QMainWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMainWindow.corner": ('PySide2.QtCore.Qt.Corner',), + "QMainWindow.createPopupMenu": (), + "QMainWindow.dockOptions": (), + "QMainWindow.dockWidgetArea": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.documentMode": (), + "QMainWindow.event": ('PySide2.QtCore.QEvent',), + "QMainWindow.iconSize": (), + "QMainWindow.insertToolBar": ('PySide2.QtWidgets.QToolBar', 'PySide2.QtWidgets.QToolBar'), + "QMainWindow.insertToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.isAnimated": (), + "QMainWindow.isDockNestingEnabled": (), + "QMainWindow.isSeparator": ('PySide2.QtCore.QPoint',), + "QMainWindow.menuBar": (), + "QMainWindow.menuWidget": (), + "QMainWindow.removeDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.removeToolBar": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.removeToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.resizeDocks": ('list', 'list', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.restoreDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.restoreState": ('PySide2.QtCore.QByteArray', 'int'), + "QMainWindow.saveState": ('int',), + "QMainWindow.setAnimated": ('bool',), + "QMainWindow.setCentralWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setCorner": ('PySide2.QtCore.Qt.Corner', 'PySide2.QtCore.Qt.DockWidgetArea'), + "QMainWindow.setDockNestingEnabled": ('bool',), + "QMainWindow.setDockOptions": ('DockOptions',), + "QMainWindow.setDocumentMode": ('bool',), + "QMainWindow.setIconSize": ('PySide2.QtCore.QSize',), + "QMainWindow.setMenuBar": ('PySide2.QtWidgets.QMenuBar',), + "QMainWindow.setMenuWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setStatusBar": ('PySide2.QtWidgets.QStatusBar',), + "QMainWindow.setTabPosition": ('DockWidgetAreas', 'PySide2.QtWidgets.QTabWidget.TabPosition'), + "QMainWindow.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMainWindow.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QMainWindow.setUnifiedTitleAndToolBarOnMac": ('bool',), + "QMainWindow.splitDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.statusBar": (), + "QMainWindow.tabPosition": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QMainWindow.tabShape": (), + "QMainWindow.tabifiedDockWidgets": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.tabifyDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget'), + "QMainWindow.takeCentralWidget": (), + "QMainWindow.toolBarArea": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolButtonStyle": (), + "QMainWindow.unifiedTitleAndToolBarOnMac": (), + + # class PySide2.QtWidgets.QMdiArea: + "QMdiArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.activateNextSubWindow": (), + "QMdiArea.activatePreviousSubWindow": (), + "QMdiArea.activationOrder": (), + "QMdiArea.activeSubWindow": (), + "QMdiArea.addSubWindow": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMdiArea.background": (), + "QMdiArea.cascadeSubWindows": (), + "QMdiArea.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiArea.closeActiveSubWindow": (), + "QMdiArea.closeAllSubWindows": (), + "QMdiArea.currentSubWindow": (), + "QMdiArea.documentMode": (), + "QMdiArea.event": ('PySide2.QtCore.QEvent',), + "QMdiArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiArea.minimumSizeHint": (), + "QMdiArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiArea.removeSubWindow": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiArea.scrollContentsBy": ('int', 'int'), + "QMdiArea.setActivationOrder": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.setActiveSubWindow": ('PySide2.QtWidgets.QMdiSubWindow',), + "QMdiArea.setBackground": ('PySide2.QtGui.QBrush',), + "QMdiArea.setDocumentMode": ('bool',), + "QMdiArea.setOption": ('PySide2.QtWidgets.QMdiArea.AreaOption', 'bool'), + "QMdiArea.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QMdiArea.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMdiArea.setTabsClosable": ('bool',), + "QMdiArea.setTabsMovable": ('bool',), + "QMdiArea.setViewMode": ('PySide2.QtWidgets.QMdiArea.ViewMode',), + "QMdiArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiArea.sizeHint": (), + "QMdiArea.subWindowList": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.tabPosition": (), + "QMdiArea.tabShape": (), + "QMdiArea.tabsClosable": (), + "QMdiArea.tabsMovable": (), + "QMdiArea.testOption": ('PySide2.QtWidgets.QMdiArea.AreaOption',), + "QMdiArea.tileSubWindows": (), + "QMdiArea.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiArea.viewMode": (), + "QMdiArea.viewportEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QMdiSubWindow: + "QMdiSubWindow.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMdiSubWindow.changeEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiSubWindow.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMdiSubWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMdiSubWindow.event": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiSubWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMdiSubWindow.isShaded": (), + "QMdiSubWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMdiSubWindow.keyboardPageStep": (), + "QMdiSubWindow.keyboardSingleStep": (), + "QMdiSubWindow.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.maximizedButtonsWidget": (), + "QMdiSubWindow.maximizedSystemMenuIconWidget": (), + "QMdiSubWindow.mdiArea": (), + "QMdiSubWindow.minimumSizeHint": (), + "QMdiSubWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QMdiSubWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiSubWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiSubWindow.setKeyboardPageStep": ('int',), + "QMdiSubWindow.setKeyboardSingleStep": ('int',), + "QMdiSubWindow.setOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption', 'bool'), + "QMdiSubWindow.setSystemMenu": ('PySide2.QtWidgets.QMenu',), + "QMdiSubWindow.setWidget": ('PySide2.QtWidgets.QWidget',), + "QMdiSubWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiSubWindow.showShaded": (), + "QMdiSubWindow.showSystemMenu": (), + "QMdiSubWindow.sizeHint": (), + "QMdiSubWindow.systemMenu": (), + "QMdiSubWindow.testOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption',), + "QMdiSubWindow.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiSubWindow.widget": (), + + # class PySide2.QtWidgets.QMenu: + "QMenu.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QMenu.actionAt": ('PySide2.QtCore.QPoint',), + "QMenu.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenu.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenu.activeAction": (), + "QMenu.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtGui.QIcon', 'str', 'object', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('str', 'object', 'PySide2.QtGui.QKeySequence')], + "QMenu.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenu.addSection": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QMenu.addSeparator": (), + "QMenu.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenu.clear": (), + "QMenu.columnCount": (), + "QMenu.defaultAction": (), + "QMenu.enterEvent": ('PySide2.QtCore.QEvent',), + "QMenu.event": ('PySide2.QtCore.QEvent',), + "QMenu.exec_": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), ('list', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget')], + "QMenu.focusNextPrevChild": ('bool',), + "QMenu.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMenu.hideTearOffMenu": (), + "QMenu.icon": (), + "QMenu.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenu.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenu.insertSection": [('PySide2.QtWidgets.QAction', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction', 'str')], + "QMenu.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenu.isEmpty": (), + "QMenu.isTearOffEnabled": (), + "QMenu.isTearOffMenuVisible": (), + "QMenu.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenu.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenu.menuAction": (), + "QMenu.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenu.popup": ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), + "QMenu.separatorsCollapsible": (), + "QMenu.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setIcon": ('PySide2.QtGui.QIcon',), + "QMenu.setSeparatorsCollapsible": ('bool',), + "QMenu.setTearOffEnabled": ('bool',), + "QMenu.setTitle": ('str',), + "QMenu.setToolTipsVisible": ('bool',), + "QMenu.sizeHint": (), + "QMenu.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMenu.title": (), + "QMenu.toolTipsVisible": (), + "QMenu.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QMenuBar: + "QMenuBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QMenuBar.actionAt": ('PySide2.QtCore.QPoint',), + "QMenuBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenuBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenuBar.activeAction": (), + "QMenuBar.addAction": [('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str'), ('str', 'object')], + "QMenuBar.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenuBar.addSeparator": (), + "QMenuBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.clear": (), + "QMenuBar.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QMenuBar.event": ('PySide2.QtCore.QEvent',), + "QMenuBar.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMenuBar.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.heightForWidth": ('int',), + "QMenuBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenuBar.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenuBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenuBar.isDefaultUp": (), + "QMenuBar.isNativeMenuBar": (), + "QMenuBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenuBar.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.minimumSizeHint": (), + "QMenuBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenuBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMenuBar.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenuBar.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QMenuBar.setDefaultUp": ('bool',), + "QMenuBar.setNativeMenuBar": ('bool',), + "QMenuBar.setVisible": ('bool',), + "QMenuBar.sizeHint": (), + "QMenuBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QMessageBox: + "QMessageBox.__init__": [('PySide2.QtWidgets.QMessageBox.Icon', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget',)], + "QMessageBox.about": ('PySide2.QtWidgets.QWidget', 'str', 'str'), + "QMessageBox.aboutQt": ('PySide2.QtWidgets.QWidget', 'str'), + "QMessageBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QMessageBox.ButtonRole'), ('PySide2.QtWidgets.QMessageBox.StandardButton',), ('str', 'PySide2.QtWidgets.QMessageBox.ButtonRole')], + "QMessageBox.button": ('PySide2.QtWidgets.QMessageBox.StandardButton',), + "QMessageBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.buttonText": ('int',), + "QMessageBox.buttons": (), + "QMessageBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QMessageBox.checkBox": (), + "QMessageBox.clickedButton": (), + "QMessageBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMessageBox.critical": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.defaultButton": (), + "QMessageBox.detailedText": (), + "QMessageBox.escapeButton": (), + "QMessageBox.event": ('PySide2.QtCore.QEvent',), + "QMessageBox.icon": (), + "QMessageBox.iconPixmap": (), + "QMessageBox.information": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.informativeText": (), + "QMessageBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMessageBox.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QMessageBox.question": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMessageBox.setButtonText": ('int', 'str'), + "QMessageBox.setCheckBox": ('PySide2.QtWidgets.QCheckBox',), + "QMessageBox.setDefaultButton": [('PySide2.QtWidgets.QMessageBox.StandardButton',), ('PySide2.QtWidgets.QPushButton',)], + "QMessageBox.setDetailedText": ('str',), + "QMessageBox.setEscapeButton": [('PySide2.QtWidgets.QAbstractButton',), ('PySide2.QtWidgets.QMessageBox.StandardButton',)], + "QMessageBox.setIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.setIconPixmap": ('PySide2.QtGui.QPixmap',), + "QMessageBox.setInformativeText": ('str',), + "QMessageBox.setStandardButtons": ('StandardButtons',), + "QMessageBox.setText": ('str',), + "QMessageBox.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QMessageBox.setTextInteractionFlags": ('TextInteractionFlags',), + "QMessageBox.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QMessageBox.setWindowTitle": ('str',), + "QMessageBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMessageBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.standardButtons": (), + "QMessageBox.standardIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.text": (), + "QMessageBox.textFormat": (), + "QMessageBox.textInteractionFlags": (), + "QMessageBox.warning": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + + # class PySide2.QtWidgets.QMouseEventTransition: + "QMouseEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QMouseEventTransition.button": (), + "QMouseEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.hitTestPath": (), + "QMouseEventTransition.modifierMask": (), + "QMouseEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QMouseEventTransition.setHitTestPath": ('PySide2.QtGui.QPainterPath',), + "QMouseEventTransition.setModifierMask": ('KeyboardModifiers',), + + # class PySide2.QtWidgets.QOpenGLWidget: + "QOpenGLWidget.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QOpenGLWidget.context": (), + "QOpenGLWidget.defaultFramebufferObject": (), + "QOpenGLWidget.doneCurrent": (), + "QOpenGLWidget.event": ('PySide2.QtCore.QEvent',), + "QOpenGLWidget.format": (), + "QOpenGLWidget.grabFramebuffer": (), + "QOpenGLWidget.initializeGL": (), + "QOpenGLWidget.isValid": (), + "QOpenGLWidget.makeCurrent": (), + "QOpenGLWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWidget.paintEngine": (), + "QOpenGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWidget.paintGL": (), + "QOpenGLWidget.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWidget.resizeGL": ('int', 'int'), + "QOpenGLWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLWidget.setUpdateBehavior": ('PySide2.QtWidgets.QOpenGLWidget.UpdateBehavior',), + "QOpenGLWidget.updateBehavior": (), + + # class PySide2.QtWidgets.QPanGesture: + "QPanGesture.__init__": ('PySide2.QtCore.QObject',), + "QPanGesture.acceleration": (), + "QPanGesture.delta": (), + "QPanGesture.lastOffset": (), + "QPanGesture.offset": (), + "QPanGesture.setAcceleration": ('float',), + "QPanGesture.setLastOffset": ('PySide2.QtCore.QPointF',), + "QPanGesture.setOffset": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QPinchGesture: + "QPinchGesture.__init__": ('PySide2.QtCore.QObject',), + "QPinchGesture.centerPoint": (), + "QPinchGesture.changeFlags": (), + "QPinchGesture.lastCenterPoint": (), + "QPinchGesture.lastRotationAngle": (), + "QPinchGesture.lastScaleFactor": (), + "QPinchGesture.rotationAngle": (), + "QPinchGesture.scaleFactor": (), + "QPinchGesture.setCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setChangeFlags": ('ChangeFlags',), + "QPinchGesture.setLastCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setLastRotationAngle": ('float',), + "QPinchGesture.setLastScaleFactor": ('float',), + "QPinchGesture.setRotationAngle": ('float',), + "QPinchGesture.setScaleFactor": ('float',), + "QPinchGesture.setStartCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setTotalChangeFlags": ('ChangeFlags',), + "QPinchGesture.setTotalRotationAngle": ('float',), + "QPinchGesture.setTotalScaleFactor": ('float',), + "QPinchGesture.startCenterPoint": (), + "QPinchGesture.totalChangeFlags": (), + "QPinchGesture.totalRotationAngle": (), + "QPinchGesture.totalScaleFactor": (), + + # class PySide2.QtWidgets.QPlainTextDocumentLayout: + "QPlainTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QPlainTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.cursorWidth": (), + "QPlainTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QPlainTextDocumentLayout.documentSize": (), + "QPlainTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QPlainTextDocumentLayout.ensureBlockLayout": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QPlainTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QPlainTextDocumentLayout.pageCount": (), + "QPlainTextDocumentLayout.requestUpdate": (), + "QPlainTextDocumentLayout.setCursorWidth": ('int',), + + # class PySide2.QtWidgets.QPlainTextEdit: + "QPlainTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPlainTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.appendHtml": ('str',), + "QPlainTextEdit.appendPlainText": ('str',), + "QPlainTextEdit.backgroundVisible": (), + "QPlainTextEdit.blockBoundingGeometry": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockCount": (), + "QPlainTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.canPaste": (), + "QPlainTextEdit.centerCursor": (), + "QPlainTextEdit.centerOnScroll": (), + "QPlainTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.clear": (), + "QPlainTextEdit.contentOffset": (), + "QPlainTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QPlainTextEdit.copy": (), + "QPlainTextEdit.createMimeDataFromSelection": (), + "QPlainTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QPlainTextEdit.currentCharFormat": (), + "QPlainTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QPlainTextEdit.cursorWidth": (), + "QPlainTextEdit.cut": (), + "QPlainTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.document": (), + "QPlainTextEdit.documentTitle": (), + "QPlainTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QPlainTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QPlainTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QPlainTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QPlainTextEdit.ensureCursorVisible": (), + "QPlainTextEdit.event": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.extraSelections": (), + "QPlainTextEdit.find": [('PySide2.QtCore.QRegExp', 'FindFlags'), ('int',), ('str', 'FindFlags')], + "QPlainTextEdit.firstVisibleBlock": (), + "QPlainTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.focusNextPrevChild": ('bool',), + "QPlainTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.getPaintContext": (), + "QPlainTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QPlainTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'PySide2.support.signature.typing.Any')], + "QPlainTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.insertPlainText": ('str',), + "QPlainTextEdit.isReadOnly": (), + "QPlainTextEdit.isUndoRedoEnabled": (), + "QPlainTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.lineWrapMode": (), + "QPlainTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QPlainTextEdit.maximumBlockCount": (), + "QPlainTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QPlainTextEdit.overwriteMode": (), + "QPlainTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPlainTextEdit.paste": (), + "QPlainTextEdit.placeholderText": (), + "QPlainTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QPlainTextEdit.redo": (), + "QPlainTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QPlainTextEdit.scrollContentsBy": ('int', 'int'), + "QPlainTextEdit.selectAll": (), + "QPlainTextEdit.setBackgroundVisible": ('bool',), + "QPlainTextEdit.setCenterOnScroll": ('bool',), + "QPlainTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.setCursorWidth": ('int',), + "QPlainTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QPlainTextEdit.setDocumentTitle": ('str',), + "QPlainTextEdit.setExtraSelections": ('list',), + "QPlainTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QPlainTextEdit.LineWrapMode',), + "QPlainTextEdit.setMaximumBlockCount": ('int',), + "QPlainTextEdit.setOverwriteMode": ('bool',), + "QPlainTextEdit.setPlaceholderText": ('str',), + "QPlainTextEdit.setPlainText": ('str',), + "QPlainTextEdit.setReadOnly": ('bool',), + "QPlainTextEdit.setTabChangesFocus": ('bool',), + "QPlainTextEdit.setTabStopWidth": ('int',), + "QPlainTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.setTextInteractionFlags": ('TextInteractionFlags',), + "QPlainTextEdit.setUndoRedoEnabled": ('bool',), + "QPlainTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QPlainTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QPlainTextEdit.tabChangesFocus": (), + "QPlainTextEdit.tabStopWidth": (), + "QPlainTextEdit.textCursor": (), + "QPlainTextEdit.textInteractionFlags": (), + "QPlainTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QPlainTextEdit.toPlainText": (), + "QPlainTextEdit.undo": (), + "QPlainTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QPlainTextEdit.wordWrapMode": (), + "QPlainTextEdit.zoomIn": ('int',), + "QPlainTextEdit.zoomInF": ('float',), + "QPlainTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QProgressBar: + "QProgressBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QProgressBar.alignment": (), + "QProgressBar.event": ('PySide2.QtCore.QEvent',), + "QProgressBar.format": (), + "QProgressBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionProgressBar',), + "QProgressBar.invertedAppearance": (), + "QProgressBar.isTextVisible": (), + "QProgressBar.maximum": (), + "QProgressBar.minimum": (), + "QProgressBar.minimumSizeHint": (), + "QProgressBar.orientation": (), + "QProgressBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QProgressBar.reset": (), + "QProgressBar.resetFormat": (), + "QProgressBar.setAlignment": ('Alignment',), + "QProgressBar.setFormat": ('str',), + "QProgressBar.setInvertedAppearance": ('bool',), + "QProgressBar.setMaximum": ('int',), + "QProgressBar.setMinimum": ('int',), + "QProgressBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QProgressBar.setRange": ('int', 'int'), + "QProgressBar.setTextDirection": ('PySide2.QtWidgets.QProgressBar.Direction',), + "QProgressBar.setTextVisible": ('bool',), + "QProgressBar.setValue": ('int',), + "QProgressBar.sizeHint": (), + "QProgressBar.text": (), + "QProgressBar.textDirection": (), + "QProgressBar.value": (), + + # class PySide2.QtWidgets.QProgressDialog: + "QProgressDialog.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'str', 'int', 'int', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QProgressDialog.autoClose": (), + "QProgressDialog.autoReset": (), + "QProgressDialog.cancel": (), + "QProgressDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QProgressDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QProgressDialog.forceShow": (), + "QProgressDialog.labelText": (), + "QProgressDialog.maximum": (), + "QProgressDialog.minimum": (), + "QProgressDialog.minimumDuration": (), + "QProgressDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QProgressDialog.reset": (), + "QProgressDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QProgressDialog.setAutoClose": ('bool',), + "QProgressDialog.setAutoReset": ('bool',), + "QProgressDialog.setBar": ('PySide2.QtWidgets.QProgressBar',), + "QProgressDialog.setCancelButton": ('PySide2.QtWidgets.QPushButton',), + "QProgressDialog.setCancelButtonText": ('str',), + "QProgressDialog.setLabel": ('PySide2.QtWidgets.QLabel',), + "QProgressDialog.setLabelText": ('str',), + "QProgressDialog.setMaximum": ('int',), + "QProgressDialog.setMinimum": ('int',), + "QProgressDialog.setMinimumDuration": ('int',), + "QProgressDialog.setRange": ('int', 'int'), + "QProgressDialog.setValue": ('int',), + "QProgressDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QProgressDialog.sizeHint": (), + "QProgressDialog.value": (), + "QProgressDialog.wasCanceled": (), + + # class PySide2.QtWidgets.QPushButton: + "QPushButton.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPushButton.autoDefault": (), + "QPushButton.event": ('PySide2.QtCore.QEvent',), + "QPushButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QPushButton.isDefault": (), + "QPushButton.isFlat": (), + "QPushButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPushButton.menu": (), + "QPushButton.minimumSizeHint": (), + "QPushButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPushButton.setAutoDefault": ('bool',), + "QPushButton.setDefault": ('bool',), + "QPushButton.setFlat": ('bool',), + "QPushButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QPushButton.showMenu": (), + "QPushButton.sizeHint": (), + + # class PySide2.QtWidgets.QRadioButton: + "QRadioButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QRadioButton.event": ('PySide2.QtCore.QEvent',), + "QRadioButton.hitButton": ('PySide2.QtCore.QPoint',), + "QRadioButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QRadioButton.minimumSizeHint": (), + "QRadioButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QRadioButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRadioButton.sizeHint": (), + + # class PySide2.QtWidgets.QRubberBand: + "QRubberBand.__init__": ('PySide2.QtWidgets.QRubberBand.Shape', 'PySide2.QtWidgets.QWidget'), + "QRubberBand.changeEvent": ('PySide2.QtCore.QEvent',), + "QRubberBand.event": ('PySide2.QtCore.QEvent',), + "QRubberBand.initStyleOption": ('PySide2.QtWidgets.QStyleOptionRubberBand',), + "QRubberBand.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRubberBand.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QRubberBand.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRubberBand.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QRubberBand.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QRubberBand.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRubberBand.shape": (), + "QRubberBand.showEvent": ('PySide2.QtGui.QShowEvent',), + + # class PySide2.QtWidgets.QScrollArea: + "QScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.alignment": (), + "QScrollArea.ensureVisible": ('int', 'int', 'int', 'int'), + "QScrollArea.ensureWidgetVisible": ('PySide2.QtWidgets.QWidget', 'int', 'int'), + "QScrollArea.event": ('PySide2.QtCore.QEvent',), + "QScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QScrollArea.focusNextPrevChild": ('bool',), + "QScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QScrollArea.scrollContentsBy": ('int', 'int'), + "QScrollArea.setAlignment": ('Alignment',), + "QScrollArea.setWidget": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.setWidgetResizable": ('bool',), + "QScrollArea.sizeHint": (), + "QScrollArea.takeWidget": (), + "QScrollArea.viewportSizeHint": (), + "QScrollArea.widget": (), + "QScrollArea.widgetResizable": (), + + # class PySide2.QtWidgets.QScrollBar: + "QScrollBar.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QScrollBar.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QScrollBar.event": ('PySide2.QtCore.QEvent',), + "QScrollBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QScrollBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QScrollBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QScrollBar.sizeHint": (), + "QScrollBar.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QScrollBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QShortcut: + "QShortcut.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Callable', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtWidgets.QWidget',)], + "QShortcut.autoRepeat": (), + "QShortcut.context": (), + "QShortcut.event": ('PySide2.QtCore.QEvent',), + "QShortcut.id": (), + "QShortcut.isEnabled": (), + "QShortcut.key": (), + "QShortcut.parentWidget": (), + "QShortcut.setAutoRepeat": ('bool',), + "QShortcut.setContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QShortcut.setEnabled": ('bool',), + "QShortcut.setKey": ('PySide2.QtGui.QKeySequence',), + "QShortcut.setWhatsThis": ('str',), + "QShortcut.whatsThis": (), + + # class PySide2.QtWidgets.QSizeGrip: + "QSizeGrip.__init__": ('PySide2.QtWidgets.QWidget',), + "QSizeGrip.event": ('PySide2.QtCore.QEvent',), + "QSizeGrip.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QSizeGrip.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QSizeGrip.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QSizeGrip.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSizeGrip.setVisible": ('bool',), + "QSizeGrip.showEvent": ('PySide2.QtGui.QShowEvent',), + "QSizeGrip.sizeHint": (), + + # class PySide2.QtWidgets.QSizePolicy: + "QSizePolicy.__init__": [(), ('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QSizePolicy.__copy__": (), + "QSizePolicy.controlType": (), + "QSizePolicy.expandingDirections": (), + "QSizePolicy.hasHeightForWidth": (), + "QSizePolicy.hasWidthForHeight": (), + "QSizePolicy.horizontalPolicy": (), + "QSizePolicy.horizontalStretch": (), + "QSizePolicy.retainSizeWhenHidden": (), + "QSizePolicy.setControlType": ('PySide2.QtWidgets.QSizePolicy.ControlType',), + "QSizePolicy.setHeightForWidth": ('bool',), + "QSizePolicy.setHorizontalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setHorizontalStretch": ('int',), + "QSizePolicy.setRetainSizeWhenHidden": ('bool',), + "QSizePolicy.setVerticalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setVerticalStretch": ('int',), + "QSizePolicy.setWidthForHeight": ('bool',), + "QSizePolicy.transpose": (), + "QSizePolicy.verticalPolicy": (), + "QSizePolicy.verticalStretch": (), + + # class PySide2.QtWidgets.QSlider: + "QSlider.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSlider.event": ('PySide2.QtCore.QEvent',), + "QSlider.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QSlider.minimumSizeHint": (), + "QSlider.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSlider.setTickInterval": ('int',), + "QSlider.setTickPosition": ('PySide2.QtWidgets.QSlider.TickPosition',), + "QSlider.sizeHint": (), + "QSlider.tickInterval": (), + "QSlider.tickPosition": (), + + # class PySide2.QtWidgets.QSpacerItem: + "QSpacerItem.__init__": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.changeSize": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.expandingDirections": (), + "QSpacerItem.geometry": (), + "QSpacerItem.isEmpty": (), + "QSpacerItem.maximumSize": (), + "QSpacerItem.minimumSize": (), + "QSpacerItem.setGeometry": ('PySide2.QtCore.QRect',), + "QSpacerItem.sizeHint": (), + "QSpacerItem.sizePolicy": (), + "QSpacerItem.spacerItem": (), + + # class PySide2.QtWidgets.QSpinBox: + "QSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QSpinBox.cleanText": (), + "QSpinBox.displayIntegerBase": (), + "QSpinBox.event": ('PySide2.QtCore.QEvent',), + "QSpinBox.fixup": ('str',), + "QSpinBox.maximum": (), + "QSpinBox.minimum": (), + "QSpinBox.prefix": (), + "QSpinBox.setDisplayIntegerBase": ('int',), + "QSpinBox.setMaximum": ('int',), + "QSpinBox.setMinimum": ('int',), + "QSpinBox.setPrefix": ('str',), + "QSpinBox.setRange": ('int', 'int'), + "QSpinBox.setSingleStep": ('int',), + "QSpinBox.setSuffix": ('str',), + "QSpinBox.setValue": ('int',), + "QSpinBox.singleStep": (), + "QSpinBox.suffix": (), + "QSpinBox.textFromValue": ('int',), + "QSpinBox.validate": ('str', 'int'), + "QSpinBox.value": (), + "QSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QSplashScreen: + "QSplashScreen.__init__": [('PySide2.QtGui.QPixmap', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QPixmap', 'WindowFlags')], + "QSplashScreen.clearMessage": (), + "QSplashScreen.drawContents": ('PySide2.QtGui.QPainter',), + "QSplashScreen.event": ('PySide2.QtCore.QEvent',), + "QSplashScreen.finish": ('PySide2.QtWidgets.QWidget',), + "QSplashScreen.message": (), + "QSplashScreen.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplashScreen.pixmap": (), + "QSplashScreen.setPixmap": ('PySide2.QtGui.QPixmap',), + "QSplashScreen.showMessage": ('str', 'int', 'PySide2.QtGui.QColor'), + + # class PySide2.QtWidgets.QSplitter: + "QSplitter.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSplitter.addWidget": ('PySide2.QtWidgets.QWidget',), + "QSplitter.changeEvent": ('PySide2.QtCore.QEvent',), + "QSplitter.childEvent": ('PySide2.QtCore.QChildEvent',), + "QSplitter.childrenCollapsible": (), + "QSplitter.closestLegalPosition": ('int', 'int'), + "QSplitter.count": (), + "QSplitter.createHandle": (), + "QSplitter.event": ('PySide2.QtCore.QEvent',), + "QSplitter.getRange": ('int', 'int', 'int'), + "QSplitter.handle": ('int',), + "QSplitter.handleWidth": (), + "QSplitter.indexOf": ('PySide2.QtWidgets.QWidget',), + "QSplitter.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.isCollapsible": ('int',), + "QSplitter.minimumSizeHint": (), + "QSplitter.moveSplitter": ('int', 'int'), + "QSplitter.opaqueResize": (), + "QSplitter.orientation": (), + "QSplitter.refresh": (), + "QSplitter.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitter.restoreState": ('PySide2.QtCore.QByteArray',), + "QSplitter.saveState": (), + "QSplitter.setChildrenCollapsible": ('bool',), + "QSplitter.setCollapsible": ('int', 'bool'), + "QSplitter.setHandleWidth": ('int',), + "QSplitter.setOpaqueResize": ('bool',), + "QSplitter.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitter.setRubberBand": ('int',), + "QSplitter.setSizes": ('list',), + "QSplitter.setStretchFactor": ('int', 'int'), + "QSplitter.sizeHint": (), + "QSplitter.sizes": (), + "QSplitter.widget": ('int',), + + # class PySide2.QtWidgets.QSplitterHandle: + "QSplitterHandle.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QSplitter'), + "QSplitterHandle.closestLegalPosition": ('int',), + "QSplitterHandle.event": ('PySide2.QtCore.QEvent',), + "QSplitterHandle.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.moveSplitter": ('int',), + "QSplitterHandle.opaqueResize": (), + "QSplitterHandle.orientation": (), + "QSplitterHandle.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSplitterHandle.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitterHandle.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitterHandle.sizeHint": (), + "QSplitterHandle.splitter": (), + + # class PySide2.QtWidgets.QStackedLayout: + "QStackedLayout.__init__": [(), ('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QStackedLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QStackedLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.count": (), + "QStackedLayout.currentIndex": (), + "QStackedLayout.currentWidget": (), + "QStackedLayout.hasHeightForWidth": (), + "QStackedLayout.heightForWidth": ('int',), + "QStackedLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedLayout.itemAt": ('int',), + "QStackedLayout.minimumSize": (), + "QStackedLayout.setCurrentIndex": ('int',), + "QStackedLayout.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QStackedLayout.setStackingMode": ('PySide2.QtWidgets.QStackedLayout.StackingMode',), + "QStackedLayout.sizeHint": (), + "QStackedLayout.stackingMode": (), + "QStackedLayout.takeAt": ('int',), + "QStackedLayout.widget": [(), ('int',)], + + # class PySide2.QtWidgets.QStackedWidget: + "QStackedWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.count": (), + "QStackedWidget.currentIndex": (), + "QStackedWidget.currentWidget": (), + "QStackedWidget.event": ('PySide2.QtCore.QEvent',), + "QStackedWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedWidget.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.setCurrentIndex": ('int',), + "QStackedWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.widget": ('int',), + + # class PySide2.QtWidgets.QStatusBar: + "QStatusBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.addPermanentWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.addWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.clearMessage": (), + "QStatusBar.currentMessage": (), + "QStatusBar.event": ('PySide2.QtCore.QEvent',), + "QStatusBar.hideOrShow": (), + "QStatusBar.insertPermanentWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.isSizeGripEnabled": (), + "QStatusBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QStatusBar.reformat": (), + "QStatusBar.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QStatusBar.setSizeGripEnabled": ('bool',), + "QStatusBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QStatusBar.showMessage": ('str', 'int'), + + # class PySide2.QtWidgets.QStyle: + "QStyle.__init__": (), + "QStyle.alignedRect": ('PySide2.QtCore.Qt.LayoutDirection', 'Alignment', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QRect'), + "QStyle.combinedLayoutSpacing": ('ControlTypes', 'ControlTypes', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawItemPixmap": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.drawItemText": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QStyle.itemPixmapRect": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.itemTextRect": ('PySide2.QtGui.QFontMetrics', 'PySide2.QtCore.QRect', 'int', 'bool', 'str'), + "QStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.proxy": (), + "QStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QStyle.sliderPositionFromValue": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.sliderValueFromPosition": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.standardPalette": (), + "QStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.visualAlignment": ('PySide2.QtCore.Qt.LayoutDirection', 'Alignment'), + "QStyle.visualPos": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QPoint'), + "QStyle.visualRect": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QRect'), + + # class PySide2.QtWidgets.QStyleFactory: + "QStyleFactory.__init__": (), + "QStyleFactory.create": ('str',), + "QStyleFactory.keys": (), + + # class PySide2.QtWidgets.QStyleHintReturn: + "QStyleHintReturn.__init__": ('int', 'int'), + + # class PySide2.QtWidgets.QStyleHintReturnMask: + "QStyleHintReturnMask.__init__": (), + + # class PySide2.QtWidgets.QStyleHintReturnVariant: + "QStyleHintReturnVariant.__init__": (), + + # class PySide2.QtWidgets.QStyleOption: + "QStyleOption.__init__": [('PySide2.QtWidgets.QStyleOption',), ('int', 'int')], + "QStyleOption.init": ('PySide2.QtWidgets.QWidget',), + "QStyleOption.initFrom": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QStyleOptionButton: + "QStyleOptionButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComboBox: + "QStyleOptionComboBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionComboBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComplex: + "QStyleOptionComplex.__init__": [('PySide2.QtWidgets.QStyleOptionComplex',), ('int', 'int')], + + # class PySide2.QtWidgets.QStyleOptionDockWidget: + "QStyleOptionDockWidget.__init__": [(), ('PySide2.QtWidgets.QStyleOptionDockWidget',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFocusRect: + "QStyleOptionFocusRect.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFocusRect',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFrame: + "QStyleOptionFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionGraphicsItem: + "QStyleOptionGraphicsItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGraphicsItem',), ('int',)], + "QStyleOptionGraphicsItem.levelOfDetailFromTransform": ('PySide2.QtGui.QTransform',), + + # class PySide2.QtWidgets.QStyleOptionGroupBox: + "QStyleOptionGroupBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGroupBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionHeader: + "QStyleOptionHeader.__init__": [(), ('PySide2.QtWidgets.QStyleOptionHeader',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionMenuItem: + "QStyleOptionMenuItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionMenuItem',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionProgressBar: + "QStyleOptionProgressBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionProgressBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionRubberBand: + "QStyleOptionRubberBand.__init__": [(), ('PySide2.QtWidgets.QStyleOptionRubberBand',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSizeGrip: + "QStyleOptionSizeGrip.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSizeGrip',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSlider: + "QStyleOptionSlider.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSlider',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSpinBox: + "QStyleOptionSpinBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSpinBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTab: + "QStyleOptionTab.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTab',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabBarBase: + "QStyleOptionTabBarBase.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabBarBase',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabWidgetFrame: + "QStyleOptionTabWidgetFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTitleBar: + "QStyleOptionTitleBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTitleBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBar: + "QStyleOptionToolBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBox: + "QStyleOptionToolBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolButton: + "QStyleOptionToolButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionViewItem: + "QStyleOptionViewItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionViewItem',), ('int',)], + "QStyleOptionViewItem.__copy__": (), + + # class PySide2.QtWidgets.QStylePainter: + "QStylePainter.__init__": [(), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.begin": [('PySide2.QtGui.QPaintDevice',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex'), + "QStylePainter.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.drawItemPixmap": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStylePainter.drawItemText": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStylePainter.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.style": (), + + # class PySide2.QtWidgets.QStyledItemDelegate: + "QStyledItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QStyledItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.displayText": ('PySide2.support.signature.typing.Any', 'PySide2.QtCore.QLocale'), + "QStyledItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStyledItemDelegate.initStyleOption": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.itemEditorFactory": (), + "QStyledItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QStyledItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QSwipeGesture: + "QSwipeGesture.__init__": ('PySide2.QtCore.QObject',), + "QSwipeGesture.horizontalDirection": (), + "QSwipeGesture.setSwipeAngle": ('float',), + "QSwipeGesture.swipeAngle": (), + "QSwipeGesture.verticalDirection": (), + + # class PySide2.QtWidgets.QSystemTrayIcon: + "QSystemTrayIcon.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'PySide2.QtCore.QObject')], + "QSystemTrayIcon.contextMenu": (), + "QSystemTrayIcon.event": ('PySide2.QtCore.QEvent',), + "QSystemTrayIcon.geometry": (), + "QSystemTrayIcon.hide": (), + "QSystemTrayIcon.icon": (), + "QSystemTrayIcon.isSystemTrayAvailable": (), + "QSystemTrayIcon.isVisible": (), + "QSystemTrayIcon.setContextMenu": ('PySide2.QtWidgets.QMenu',), + "QSystemTrayIcon.setIcon": ('PySide2.QtGui.QIcon',), + "QSystemTrayIcon.setToolTip": ('str',), + "QSystemTrayIcon.setVisible": ('bool',), + "QSystemTrayIcon.show": (), + "QSystemTrayIcon.showMessage": ('str', 'str', 'PySide2.QtWidgets.QSystemTrayIcon.MessageIcon', 'int'), + "QSystemTrayIcon.supportsMessages": (), + "QSystemTrayIcon.toolTip": (), + + # class PySide2.QtWidgets.QTabBar: + "QTabBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabBar.addTab": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QTabBar.autoHide": (), + "QTabBar.changeCurrentOnDrag": (), + "QTabBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabBar.count": (), + "QTabBar.currentIndex": (), + "QTabBar.documentMode": (), + "QTabBar.drawBase": (), + "QTabBar.elideMode": (), + "QTabBar.event": ('PySide2.QtCore.QEvent',), + "QTabBar.expanding": (), + "QTabBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QTabBar.iconSize": (), + "QTabBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTab', 'int'), + "QTabBar.insertTab": [('int', 'PySide2.QtGui.QIcon', 'str'), ('int', 'str')], + "QTabBar.isMovable": (), + "QTabBar.isTabEnabled": ('int',), + "QTabBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabBar.minimumSizeHint": (), + "QTabBar.minimumTabSizeHint": ('int',), + "QTabBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.moveTab": ('int', 'int'), + "QTabBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabBar.removeTab": ('int',), + "QTabBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabBar.selectionBehaviorOnRemove": (), + "QTabBar.setAutoHide": ('bool',), + "QTabBar.setChangeCurrentOnDrag": ('bool',), + "QTabBar.setCurrentIndex": ('int',), + "QTabBar.setDocumentMode": ('bool',), + "QTabBar.setDrawBase": ('bool',), + "QTabBar.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabBar.setExpanding": ('bool',), + "QTabBar.setIconSize": ('PySide2.QtCore.QSize',), + "QTabBar.setMovable": ('bool',), + "QTabBar.setSelectionBehaviorOnRemove": ('PySide2.QtWidgets.QTabBar.SelectionBehavior',), + "QTabBar.setShape": ('PySide2.QtWidgets.QTabBar.Shape',), + "QTabBar.setTabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition', 'PySide2.QtWidgets.QWidget'), + "QTabBar.setTabData": ('int', 'PySide2.support.signature.typing.Any'), + "QTabBar.setTabEnabled": ('int', 'bool'), + "QTabBar.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabBar.setTabText": ('int', 'str'), + "QTabBar.setTabTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTabBar.setTabToolTip": ('int', 'str'), + "QTabBar.setTabWhatsThis": ('int', 'str'), + "QTabBar.setTabsClosable": ('bool',), + "QTabBar.setUsesScrollButtons": ('bool',), + "QTabBar.shape": (), + "QTabBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabBar.sizeHint": (), + "QTabBar.tabAt": ('PySide2.QtCore.QPoint',), + "QTabBar.tabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition'), + "QTabBar.tabData": ('int',), + "QTabBar.tabIcon": ('int',), + "QTabBar.tabInserted": ('int',), + "QTabBar.tabLayoutChange": (), + "QTabBar.tabRect": ('int',), + "QTabBar.tabRemoved": ('int',), + "QTabBar.tabSizeHint": ('int',), + "QTabBar.tabText": ('int',), + "QTabBar.tabTextColor": ('int',), + "QTabBar.tabToolTip": ('int',), + "QTabBar.tabWhatsThis": ('int',), + "QTabBar.tabsClosable": (), + "QTabBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTabBar.usesScrollButtons": (), + "QTabBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QTabWidget: + "QTabWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.addTab": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabWidget.clear": (), + "QTabWidget.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QTabWidget.count": (), + "QTabWidget.currentIndex": (), + "QTabWidget.currentWidget": (), + "QTabWidget.documentMode": (), + "QTabWidget.elideMode": (), + "QTabWidget.event": ('PySide2.QtCore.QEvent',), + "QTabWidget.hasHeightForWidth": (), + "QTabWidget.heightForWidth": ('int',), + "QTabWidget.iconSize": (), + "QTabWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), + "QTabWidget.insertTab": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.isMovable": (), + "QTabWidget.isTabEnabled": ('int',), + "QTabWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabWidget.minimumSizeHint": (), + "QTabWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabWidget.removeTab": ('int',), + "QTabWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabWidget.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QTabWidget.setCurrentIndex": ('int',), + "QTabWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.setDocumentMode": ('bool',), + "QTabWidget.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabWidget.setIconSize": ('PySide2.QtCore.QSize',), + "QTabWidget.setMovable": ('bool',), + "QTabWidget.setTabBar": ('PySide2.QtWidgets.QTabBar',), + "QTabWidget.setTabBarAutoHide": ('bool',), + "QTabWidget.setTabEnabled": ('int', 'bool'), + "QTabWidget.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabWidget.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QTabWidget.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QTabWidget.setTabText": ('int', 'str'), + "QTabWidget.setTabToolTip": ('int', 'str'), + "QTabWidget.setTabWhatsThis": ('int', 'str'), + "QTabWidget.setTabsClosable": ('bool',), + "QTabWidget.setUsesScrollButtons": ('bool',), + "QTabWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabWidget.sizeHint": (), + "QTabWidget.tabBar": (), + "QTabWidget.tabBarAutoHide": (), + "QTabWidget.tabIcon": ('int',), + "QTabWidget.tabInserted": ('int',), + "QTabWidget.tabPosition": (), + "QTabWidget.tabRemoved": ('int',), + "QTabWidget.tabShape": (), + "QTabWidget.tabText": ('int',), + "QTabWidget.tabToolTip": ('int',), + "QTabWidget.tabWhatsThis": ('int',), + "QTabWidget.tabsClosable": (), + "QTabWidget.usesScrollButtons": (), + "QTabWidget.widget": ('int',), + + # class PySide2.QtWidgets.QTableView: + "QTableView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTableView.clearSpans": (), + "QTableView.columnAt": ('int',), + "QTableView.columnCountChanged": ('int', 'int'), + "QTableView.columnMoved": ('int', 'int', 'int'), + "QTableView.columnResized": ('int', 'int', 'int'), + "QTableView.columnSpan": ('int', 'int'), + "QTableView.columnViewportPosition": ('int',), + "QTableView.columnWidth": ('int',), + "QTableView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTableView.doItemsLayout": (), + "QTableView.gridStyle": (), + "QTableView.hideColumn": ('int',), + "QTableView.hideRow": ('int',), + "QTableView.horizontalHeader": (), + "QTableView.horizontalOffset": (), + "QTableView.horizontalScrollbarAction": ('int',), + "QTableView.indexAt": ('PySide2.QtCore.QPoint',), + "QTableView.isColumnHidden": ('int',), + "QTableView.isCornerButtonEnabled": (), + "QTableView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTableView.isRowHidden": ('int',), + "QTableView.isSortingEnabled": (), + "QTableView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QTableView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTableView.resizeColumnToContents": ('int',), + "QTableView.resizeColumnsToContents": (), + "QTableView.resizeRowToContents": ('int',), + "QTableView.resizeRowsToContents": (), + "QTableView.rowAt": ('int',), + "QTableView.rowCountChanged": ('int', 'int'), + "QTableView.rowHeight": ('int',), + "QTableView.rowMoved": ('int', 'int', 'int'), + "QTableView.rowResized": ('int', 'int', 'int'), + "QTableView.rowSpan": ('int', 'int'), + "QTableView.rowViewportPosition": ('int',), + "QTableView.scrollContentsBy": ('int', 'int'), + "QTableView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableView.selectColumn": ('int',), + "QTableView.selectRow": ('int',), + "QTableView.selectedIndexes": (), + "QTableView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTableView.setColumnHidden": ('int', 'bool'), + "QTableView.setColumnWidth": ('int', 'int'), + "QTableView.setCornerButtonEnabled": ('bool',), + "QTableView.setGridStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QTableView.setHorizontalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTableView.setRowHeight": ('int', 'int'), + "QTableView.setRowHidden": ('int', 'bool'), + "QTableView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QTableView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTableView.setShowGrid": ('bool',), + "QTableView.setSortingEnabled": ('bool',), + "QTableView.setSpan": ('int', 'int', 'int', 'int'), + "QTableView.setVerticalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setWordWrap": ('bool',), + "QTableView.showColumn": ('int',), + "QTableView.showGrid": (), + "QTableView.showRow": ('int',), + "QTableView.sizeHintForColumn": ('int',), + "QTableView.sizeHintForRow": ('int',), + "QTableView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTableView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTableView.updateGeometries": (), + "QTableView.verticalHeader": (), + "QTableView.verticalOffset": (), + "QTableView.verticalScrollbarAction": ('int',), + "QTableView.viewOptions": (), + "QTableView.viewportSizeHint": (), + "QTableView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTableView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTableView.wordWrap": (), + + # class PySide2.QtWidgets.QTableWidget: + "QTableWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'int', 'PySide2.QtWidgets.QWidget')], + "QTableWidget.cellWidget": ('int', 'int'), + "QTableWidget.clear": (), + "QTableWidget.clearContents": (), + "QTableWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.column": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.columnCount": (), + "QTableWidget.currentColumn": (), + "QTableWidget.currentItem": (), + "QTableWidget.currentRow": (), + "QTableWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTableWidget.dropMimeData": ('int', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTableWidget.editItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.event": ('PySide2.QtCore.QEvent',), + "QTableWidget.findItems": ('str', 'MatchFlags'), + "QTableWidget.horizontalHeaderItem": ('int',), + "QTableWidget.indexFromItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.insertColumn": ('int',), + "QTableWidget.insertRow": ('int',), + "QTableWidget.isItemSelected": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.isSortingEnabled": (), + "QTableWidget.item": ('int', 'int'), + "QTableWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTableWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTableWidget.itemPrototype": (), + "QTableWidget.items": ('PySide2.QtCore.QMimeData',), + "QTableWidget.mimeData": ('list',), + "QTableWidget.mimeTypes": (), + "QTableWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.removeCellWidget": ('int', 'int'), + "QTableWidget.removeColumn": ('int',), + "QTableWidget.removeRow": ('int',), + "QTableWidget.row": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.rowCount": (), + "QTableWidget.scrollToItem": ('PySide2.QtWidgets.QTableWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableWidget.selectedItems": (), + "QTableWidget.selectedRanges": (), + "QTableWidget.setCellWidget": ('int', 'int', 'PySide2.QtWidgets.QWidget'), + "QTableWidget.setColumnCount": ('int',), + "QTableWidget.setCurrentCell": [('int', 'int'), ('int', 'int', 'SelectionFlags')], + "QTableWidget.setCurrentItem": [('PySide2.QtWidgets.QTableWidgetItem',), ('PySide2.QtWidgets.QTableWidgetItem', 'SelectionFlags')], + "QTableWidget.setHorizontalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setHorizontalHeaderLabels": ('PySide2.support.signature.typing.List',), + "QTableWidget.setItem": ('int', 'int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setItemPrototype": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.setItemSelected": ('PySide2.QtWidgets.QTableWidgetItem', 'bool'), + "QTableWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableWidget.setRangeSelected": ('PySide2.QtWidgets.QTableWidgetSelectionRange', 'bool'), + "QTableWidget.setRowCount": ('int',), + "QTableWidget.setSortingEnabled": ('bool',), + "QTableWidget.setVerticalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setVerticalHeaderLabels": ('PySide2.support.signature.typing.List',), + "QTableWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTableWidget.supportedDropActions": (), + "QTableWidget.takeHorizontalHeaderItem": ('int',), + "QTableWidget.takeItem": ('int', 'int'), + "QTableWidget.takeVerticalHeaderItem": ('int',), + "QTableWidget.verticalHeaderItem": ('int',), + "QTableWidget.visualColumn": ('int',), + "QTableWidget.visualItemRect": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.visualRow": ('int',), + + # class PySide2.QtWidgets.QTableWidgetItem: + "QTableWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'int'), ('PySide2.QtWidgets.QTableWidgetItem',), ('int',), ('str', 'int')], + "QTableWidgetItem.background": (), + "QTableWidgetItem.backgroundColor": (), + "QTableWidgetItem.checkState": (), + "QTableWidgetItem.clone": (), + "QTableWidgetItem.column": (), + "QTableWidgetItem.data": ('int',), + "QTableWidgetItem.flags": (), + "QTableWidgetItem.font": (), + "QTableWidgetItem.foreground": (), + "QTableWidgetItem.icon": (), + "QTableWidgetItem.isSelected": (), + "QTableWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTableWidgetItem.row": (), + "QTableWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QTableWidgetItem.setData": ('int', 'PySide2.support.signature.typing.Any'), + "QTableWidgetItem.setFlags": ('ItemFlags',), + "QTableWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QTableWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QTableWidgetItem.setSelected": ('bool',), + "QTableWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QTableWidgetItem.setStatusTip": ('str',), + "QTableWidgetItem.setText": ('str',), + "QTableWidgetItem.setTextAlignment": ('int',), + "QTableWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setToolTip": ('str',), + "QTableWidgetItem.setWhatsThis": ('str',), + "QTableWidgetItem.sizeHint": (), + "QTableWidgetItem.statusTip": (), + "QTableWidgetItem.tableWidget": (), + "QTableWidgetItem.text": (), + "QTableWidgetItem.textAlignment": (), + "QTableWidgetItem.textColor": (), + "QTableWidgetItem.toolTip": (), + "QTableWidgetItem.type": (), + "QTableWidgetItem.whatsThis": (), + "QTableWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTableWidgetSelectionRange: + "QTableWidgetSelectionRange.__init__": [(), ('PySide2.QtWidgets.QTableWidgetSelectionRange',), ('int', 'int', 'int', 'int')], + "QTableWidgetSelectionRange.__copy__": (), + "QTableWidgetSelectionRange.bottomRow": (), + "QTableWidgetSelectionRange.columnCount": (), + "QTableWidgetSelectionRange.leftColumn": (), + "QTableWidgetSelectionRange.rightColumn": (), + "QTableWidgetSelectionRange.rowCount": (), + "QTableWidgetSelectionRange.topRow": (), + + # class PySide2.QtWidgets.QTapAndHoldGesture: + "QTapAndHoldGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapAndHoldGesture.position": (), + "QTapAndHoldGesture.setPosition": ('PySide2.QtCore.QPointF',), + "QTapAndHoldGesture.setTimeout": ('int',), + "QTapAndHoldGesture.timeout": (), + + # class PySide2.QtWidgets.QTapGesture: + "QTapGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapGesture.position": (), + "QTapGesture.setPosition": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QTextBrowser: + "QTextBrowser.__init__": ('PySide2.QtWidgets.QWidget',), + "QTextBrowser.backward": (), + "QTextBrowser.backwardHistoryCount": (), + "QTextBrowser.clearHistory": (), + "QTextBrowser.event": ('PySide2.QtCore.QEvent',), + "QTextBrowser.focusNextPrevChild": ('bool',), + "QTextBrowser.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextBrowser.forward": (), + "QTextBrowser.forwardHistoryCount": (), + "QTextBrowser.historyTitle": ('int',), + "QTextBrowser.historyUrl": ('int',), + "QTextBrowser.home": (), + "QTextBrowser.isBackwardAvailable": (), + "QTextBrowser.isForwardAvailable": (), + "QTextBrowser.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextBrowser.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextBrowser.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.openExternalLinks": (), + "QTextBrowser.openLinks": (), + "QTextBrowser.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextBrowser.reload": (), + "QTextBrowser.searchPaths": (), + "QTextBrowser.setOpenExternalLinks": ('bool',), + "QTextBrowser.setOpenLinks": ('bool',), + "QTextBrowser.setSearchPaths": ('PySide2.support.signature.typing.List',), + "QTextBrowser.setSource": ('PySide2.QtCore.QUrl',), + "QTextBrowser.source": (), + + # class PySide2.QtWidgets.QTextEdit: + "QTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QTextEdit.acceptRichText": (), + "QTextEdit.alignment": (), + "QTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QTextEdit.append": ('str',), + "QTextEdit.autoFormatting": (), + "QTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.canPaste": (), + "QTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QTextEdit.clear": (), + "QTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QTextEdit.copy": (), + "QTextEdit.createMimeDataFromSelection": (), + "QTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QTextEdit.currentCharFormat": (), + "QTextEdit.currentFont": (), + "QTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextEdit.cursorWidth": (), + "QTextEdit.cut": (), + "QTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.document": (), + "QTextEdit.documentTitle": (), + "QTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTextEdit.ensureCursorVisible": (), + "QTextEdit.event": ('PySide2.QtCore.QEvent',), + "QTextEdit.extraSelections": (), + "QTextEdit.find": [('PySide2.QtCore.QRegExp', 'FindFlags'), ('int',), ('str', 'FindFlags')], + "QTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.focusNextPrevChild": ('bool',), + "QTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.fontFamily": (), + "QTextEdit.fontItalic": (), + "QTextEdit.fontPointSize": (), + "QTextEdit.fontUnderline": (), + "QTextEdit.fontWeight": (), + "QTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'PySide2.support.signature.typing.Any')], + "QTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.insertHtml": ('str',), + "QTextEdit.insertPlainText": ('str',), + "QTextEdit.isReadOnly": (), + "QTextEdit.isUndoRedoEnabled": (), + "QTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.lineWrapColumnOrWidth": (), + "QTextEdit.lineWrapMode": (), + "QTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextEdit.overwriteMode": (), + "QTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextEdit.paste": (), + "QTextEdit.placeholderText": (), + "QTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextEdit.redo": (), + "QTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTextEdit.scrollContentsBy": ('int', 'int'), + "QTextEdit.scrollToAnchor": ('str',), + "QTextEdit.selectAll": (), + "QTextEdit.setAcceptRichText": ('bool',), + "QTextEdit.setAlignment": ('Alignment',), + "QTextEdit.setAutoFormatting": ('AutoFormatting',), + "QTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.setCurrentFont": ('PySide2.QtGui.QFont',), + "QTextEdit.setCursorWidth": ('int',), + "QTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QTextEdit.setDocumentTitle": ('str',), + "QTextEdit.setExtraSelections": ('list',), + "QTextEdit.setFontFamily": ('str',), + "QTextEdit.setFontItalic": ('bool',), + "QTextEdit.setFontPointSize": ('float',), + "QTextEdit.setFontUnderline": ('bool',), + "QTextEdit.setFontWeight": ('int',), + "QTextEdit.setHtml": ('str',), + "QTextEdit.setLineWrapColumnOrWidth": ('int',), + "QTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QTextEdit.LineWrapMode',), + "QTextEdit.setOverwriteMode": ('bool',), + "QTextEdit.setPlaceholderText": ('str',), + "QTextEdit.setPlainText": ('str',), + "QTextEdit.setReadOnly": ('bool',), + "QTextEdit.setTabChangesFocus": ('bool',), + "QTextEdit.setTabStopWidth": ('int',), + "QTextEdit.setText": ('str',), + "QTextEdit.setTextBackgroundColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.setTextInteractionFlags": ('TextInteractionFlags',), + "QTextEdit.setUndoRedoEnabled": ('bool',), + "QTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTextEdit.tabChangesFocus": (), + "QTextEdit.tabStopWidth": (), + "QTextEdit.textBackgroundColor": (), + "QTextEdit.textColor": (), + "QTextEdit.textCursor": (), + "QTextEdit.textInteractionFlags": (), + "QTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTextEdit.toHtml": (), + "QTextEdit.toPlainText": (), + "QTextEdit.undo": (), + "QTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QTextEdit.wordWrapMode": (), + "QTextEdit.zoomIn": ('int',), + "QTextEdit.zoomInF": ('float',), + "QTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QTileRules: + "QTileRules.__init__": [('PySide2.QtCore.Qt.TileRule',), ('PySide2.QtCore.Qt.TileRule', 'PySide2.QtCore.Qt.TileRule'), ('PySide2.QtWidgets.QTileRules',)], + "QTileRules.__copy__": (), + + # class PySide2.QtWidgets.QTimeEdit: + "QTimeEdit.__init__": [('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QToolBar: + "QToolBar.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QToolBar.actionAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QToolBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QToolBar.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str')], + "QToolBar.addSeparator": (), + "QToolBar.addWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBar.allowedAreas": (), + "QToolBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBar.clear": (), + "QToolBar.event": ('PySide2.QtCore.QEvent',), + "QToolBar.iconSize": (), + "QToolBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolBar',), + "QToolBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QToolBar.insertWidget": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget'), + "QToolBar.isAreaAllowed": ('PySide2.QtCore.Qt.ToolBarArea',), + "QToolBar.isFloatable": (), + "QToolBar.isFloating": (), + "QToolBar.isMovable": (), + "QToolBar.orientation": (), + "QToolBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolBar.setAllowedAreas": ('ToolBarAreas',), + "QToolBar.setFloatable": ('bool',), + "QToolBar.setIconSize": ('PySide2.QtCore.QSize',), + "QToolBar.setMovable": ('bool',), + "QToolBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QToolBar.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolBar.toggleViewAction": (), + "QToolBar.toolButtonStyle": (), + "QToolBar.widgetForAction": ('PySide2.QtWidgets.QAction',), + + # class PySide2.QtWidgets.QToolBox: + "QToolBox.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QToolBox.addItem": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBox.count": (), + "QToolBox.currentIndex": (), + "QToolBox.currentWidget": (), + "QToolBox.event": ('PySide2.QtCore.QEvent',), + "QToolBox.indexOf": ('PySide2.QtWidgets.QWidget',), + "QToolBox.insertItem": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.isItemEnabled": ('int',), + "QToolBox.itemIcon": ('int',), + "QToolBox.itemInserted": ('int',), + "QToolBox.itemRemoved": ('int',), + "QToolBox.itemText": ('int',), + "QToolBox.itemToolTip": ('int',), + "QToolBox.removeItem": ('int',), + "QToolBox.setCurrentIndex": ('int',), + "QToolBox.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBox.setItemEnabled": ('int', 'bool'), + "QToolBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QToolBox.setItemText": ('int', 'str'), + "QToolBox.setItemToolTip": ('int', 'str'), + "QToolBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QToolBox.widget": ('int',), + + # class PySide2.QtWidgets.QToolButton: + "QToolButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QToolButton.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolButton.arrowType": (), + "QToolButton.autoRaise": (), + "QToolButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.defaultAction": (), + "QToolButton.enterEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.event": ('PySide2.QtCore.QEvent',), + "QToolButton.hitButton": ('PySide2.QtCore.QPoint',), + "QToolButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolButton',), + "QToolButton.leaveEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.menu": (), + "QToolButton.minimumSizeHint": (), + "QToolButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.nextCheckState": (), + "QToolButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolButton.popupMode": (), + "QToolButton.setArrowType": ('PySide2.QtCore.Qt.ArrowType',), + "QToolButton.setAutoRaise": ('bool',), + "QToolButton.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QToolButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QToolButton.setPopupMode": ('PySide2.QtWidgets.QToolButton.ToolButtonPopupMode',), + "QToolButton.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolButton.showMenu": (), + "QToolButton.sizeHint": (), + "QToolButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QToolButton.toolButtonStyle": (), + + # class PySide2.QtWidgets.QToolTip: + "QToolTip.palette": (), + "QToolTip.font": (), + "QToolTip.hideText": (), + "QToolTip.isVisible": (), + "QToolTip.setFont": ('PySide2.QtGui.QFont',), + "QToolTip.setPalette": ('PySide2.QtGui.QPalette',), + "QToolTip.showText": [('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect', 'int')], + "QToolTip.text": (), + + # class PySide2.QtWidgets.QTreeView: + "QTreeView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeView.allColumnsShowFocus": (), + "QTreeView.autoExpandDelay": (), + "QTreeView.collapse": ('PySide2.QtCore.QModelIndex',), + "QTreeView.collapseAll": (), + "QTreeView.columnAt": ('int',), + "QTreeView.columnCountChanged": ('int', 'int'), + "QTreeView.columnMoved": (), + "QTreeView.columnResized": ('int', 'int', 'int'), + "QTreeView.columnViewportPosition": ('int',), + "QTreeView.columnWidth": ('int',), + "QTreeView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTreeView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QTreeView.doItemsLayout": (), + "QTreeView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTreeView.drawBranches": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawRow": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawTree": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QRegion'), + "QTreeView.expand": ('PySide2.QtCore.QModelIndex',), + "QTreeView.expandAll": (), + "QTreeView.expandToDepth": ('int',), + "QTreeView.expandsOnDoubleClick": (), + "QTreeView.header": (), + "QTreeView.hideColumn": ('int',), + "QTreeView.horizontalOffset": (), + "QTreeView.horizontalScrollbarAction": ('int',), + "QTreeView.indentation": (), + "QTreeView.indexAbove": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexAt": ('PySide2.QtCore.QPoint',), + "QTreeView.indexBelow": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexRowSizeHint": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isAnimated": (), + "QTreeView.isColumnHidden": ('int',), + "QTreeView.isExpanded": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isHeaderHidden": (), + "QTreeView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isRowHidden": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isSortingEnabled": (), + "QTreeView.itemsExpandable": (), + "QTreeView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTreeView.keyboardSearch": ('str',), + "QTreeView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QTreeView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTreeView.reexpand": (), + "QTreeView.reset": (), + "QTreeView.resetIndentation": (), + "QTreeView.resizeColumnToContents": ('int',), + "QTreeView.rootIsDecorated": (), + "QTreeView.rowHeight": ('PySide2.QtCore.QModelIndex',), + "QTreeView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.scrollContentsBy": ('int', 'int'), + "QTreeView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeView.selectAll": (), + "QTreeView.selectedIndexes": (), + "QTreeView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTreeView.setAllColumnsShowFocus": ('bool',), + "QTreeView.setAnimated": ('bool',), + "QTreeView.setAutoExpandDelay": ('int',), + "QTreeView.setColumnHidden": ('int', 'bool'), + "QTreeView.setColumnWidth": ('int', 'int'), + "QTreeView.setExpanded": ('PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setExpandsOnDoubleClick": ('bool',), + "QTreeView.setFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTreeView.setHeaderHidden": ('bool',), + "QTreeView.setIndentation": ('int',), + "QTreeView.setItemsExpandable": ('bool',), + "QTreeView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeView.setRootIsDecorated": ('bool',), + "QTreeView.setRowHidden": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QTreeView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeView.setSortingEnabled": ('bool',), + "QTreeView.setTreePosition": ('int',), + "QTreeView.setUniformRowHeights": ('bool',), + "QTreeView.setWordWrap": ('bool',), + "QTreeView.showColumn": ('int',), + "QTreeView.sizeHintForColumn": ('int',), + "QTreeView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTreeView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTreeView.treePosition": (), + "QTreeView.uniformRowHeights": (), + "QTreeView.updateGeometries": (), + "QTreeView.verticalOffset": (), + "QTreeView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QTreeView.viewportSizeHint": (), + "QTreeView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTreeView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTreeView.wordWrap": (), + + # class PySide2.QtWidgets.QTreeWidget: + "QTreeWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeWidget.addTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.addTopLevelItems": ('list',), + "QTreeWidget.clear": (), + "QTreeWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.collapseItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.columnCount": (), + "QTreeWidget.currentColumn": (), + "QTreeWidget.currentItem": (), + "QTreeWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTreeWidget.dropMimeData": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTreeWidget.editItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.event": ('PySide2.QtCore.QEvent',), + "QTreeWidget.expandItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.findItems": ('str', 'MatchFlags', 'int'), + "QTreeWidget.headerItem": (), + "QTreeWidget.indexFromItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.indexOfTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.insertTopLevelItem": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidget.insertTopLevelItems": ('int', 'list'), + "QTreeWidget.invisibleRootItem": (), + "QTreeWidget.isFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAbove": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTreeWidget.itemBelow": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeWidget.itemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.items": ('PySide2.QtCore.QMimeData',), + "QTreeWidget.mimeData": ('list',), + "QTreeWidget.mimeTypes": (), + "QTreeWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.removeItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.scrollToItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeWidget.selectedItems": (), + "QTreeWidget.setColumnCount": ('int',), + "QTreeWidget.setCurrentItem": [('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'SelectionFlags')], + "QTreeWidget.setFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setHeaderItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.setHeaderLabel": ('str',), + "QTreeWidget.setHeaderLabels": ('PySide2.support.signature.typing.List',), + "QTreeWidget.setItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtWidgets.QWidget'), + "QTreeWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeWidget.sortColumn": (), + "QTreeWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidget.supportedDropActions": (), + "QTreeWidget.takeTopLevelItem": ('int',), + "QTreeWidget.topLevelItem": ('int',), + "QTreeWidget.topLevelItemCount": (), + "QTreeWidget.visualItemRect": ('PySide2.QtWidgets.QTreeWidgetItem',), + + # class PySide2.QtWidgets.QTreeWidgetItem: + "QTreeWidgetItem.__init__": [('PySide2.QtWidgets.QTreeWidget', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'PySide2.support.signature.typing.List', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.support.signature.typing.List', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.support.signature.typing.List', 'int'), ('int',)], + "QTreeWidgetItem.addChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.addChildren": ('list',), + "QTreeWidgetItem.background": ('int',), + "QTreeWidgetItem.backgroundColor": ('int',), + "QTreeWidgetItem.checkState": ('int',), + "QTreeWidgetItem.child": ('int',), + "QTreeWidgetItem.childCount": (), + "QTreeWidgetItem.childIndicatorPolicy": (), + "QTreeWidgetItem.clone": (), + "QTreeWidgetItem.columnCount": (), + "QTreeWidgetItem.data": ('int', 'int'), + "QTreeWidgetItem.emitDataChanged": (), + "QTreeWidgetItem.flags": (), + "QTreeWidgetItem.font": ('int',), + "QTreeWidgetItem.foreground": ('int',), + "QTreeWidgetItem.icon": ('int',), + "QTreeWidgetItem.indexOfChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.insertChild": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidgetItem.insertChildren": ('int', 'list'), + "QTreeWidgetItem.isDisabled": (), + "QTreeWidgetItem.isExpanded": (), + "QTreeWidgetItem.isFirstColumnSpanned": (), + "QTreeWidgetItem.isHidden": (), + "QTreeWidgetItem.isSelected": (), + "QTreeWidgetItem.parent": (), + "QTreeWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTreeWidgetItem.removeChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.setBackground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setBackgroundColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setCheckState": ('int', 'PySide2.QtCore.Qt.CheckState'), + "QTreeWidgetItem.setChildIndicatorPolicy": ('PySide2.QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy',), + "QTreeWidgetItem.setData": ('int', 'int', 'PySide2.support.signature.typing.Any'), + "QTreeWidgetItem.setDisabled": ('bool',), + "QTreeWidgetItem.setExpanded": ('bool',), + "QTreeWidgetItem.setFirstColumnSpanned": ('bool',), + "QTreeWidgetItem.setFlags": ('ItemFlags',), + "QTreeWidgetItem.setFont": ('int', 'PySide2.QtGui.QFont'), + "QTreeWidgetItem.setForeground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setHidden": ('bool',), + "QTreeWidgetItem.setIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTreeWidgetItem.setSelected": ('bool',), + "QTreeWidgetItem.setSizeHint": ('int', 'PySide2.QtCore.QSize'), + "QTreeWidgetItem.setStatusTip": ('int', 'str'), + "QTreeWidgetItem.setText": ('int', 'str'), + "QTreeWidgetItem.setTextAlignment": ('int', 'int'), + "QTreeWidgetItem.setTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setToolTip": ('int', 'str'), + "QTreeWidgetItem.setWhatsThis": ('int', 'str'), + "QTreeWidgetItem.sizeHint": ('int',), + "QTreeWidgetItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidgetItem.statusTip": ('int',), + "QTreeWidgetItem.takeChild": ('int',), + "QTreeWidgetItem.takeChildren": (), + "QTreeWidgetItem.text": ('int',), + "QTreeWidgetItem.textAlignment": ('int',), + "QTreeWidgetItem.textColor": ('int',), + "QTreeWidgetItem.toolTip": ('int',), + "QTreeWidgetItem.treeWidget": (), + "QTreeWidgetItem.type": (), + "QTreeWidgetItem.whatsThis": ('int',), + "QTreeWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTreeWidgetItemIterator: + "QTreeWidgetItemIterator.__init__": [('PySide2.QtWidgets.QTreeWidget', 'IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItem', 'IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItemIterator',)], + "QTreeWidgetItemIterator.__copy__": (), + "QTreeWidgetItemIterator.value": (), + + # class PySide2.QtWidgets.QUndoCommand: + "QUndoCommand.__init__": [('PySide2.QtWidgets.QUndoCommand',), ('str', 'PySide2.QtWidgets.QUndoCommand')], + "QUndoCommand.actionText": (), + "QUndoCommand.child": ('int',), + "QUndoCommand.childCount": (), + "QUndoCommand.id": (), + "QUndoCommand.mergeWith": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoCommand.redo": (), + "QUndoCommand.setText": ('str',), + "QUndoCommand.text": (), + "QUndoCommand.undo": (), + + # class PySide2.QtWidgets.QUndoGroup: + "QUndoGroup.__init__": ('PySide2.QtCore.QObject',), + "QUndoGroup.activeStack": (), + "QUndoGroup.addStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.canRedo": (), + "QUndoGroup.canUndo": (), + "QUndoGroup.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.isClean": (), + "QUndoGroup.redo": (), + "QUndoGroup.redoText": (), + "QUndoGroup.removeStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.setActiveStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.stacks": (), + "QUndoGroup.undo": (), + "QUndoGroup.undoText": (), + + # class PySide2.QtWidgets.QUndoStack: + "QUndoStack.__init__": ('PySide2.QtCore.QObject',), + "QUndoStack.beginMacro": ('str',), + "QUndoStack.canRedo": (), + "QUndoStack.canUndo": (), + "QUndoStack.cleanIndex": (), + "QUndoStack.clear": (), + "QUndoStack.command": ('int',), + "QUndoStack.count": (), + "QUndoStack.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.endMacro": (), + "QUndoStack.index": (), + "QUndoStack.isActive": (), + "QUndoStack.isClean": (), + "QUndoStack.push": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoStack.redo": (), + "QUndoStack.redoText": (), + "QUndoStack.setActive": ('bool',), + "QUndoStack.setClean": (), + "QUndoStack.setIndex": ('int',), + "QUndoStack.setUndoLimit": ('int',), + "QUndoStack.text": ('int',), + "QUndoStack.undo": (), + "QUndoStack.undoLimit": (), + "QUndoStack.undoText": (), + + # class PySide2.QtWidgets.QUndoView: + "QUndoView.__init__": [('PySide2.QtWidgets.QUndoGroup', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QUndoStack', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QUndoView.cleanIcon": (), + "QUndoView.emptyLabel": (), + "QUndoView.group": (), + "QUndoView.setCleanIcon": ('PySide2.QtGui.QIcon',), + "QUndoView.setEmptyLabel": ('str',), + "QUndoView.setGroup": ('PySide2.QtWidgets.QUndoGroup',), + "QUndoView.setStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoView.stack": (), + + # class PySide2.QtWidgets.QVBoxLayout: + "QVBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QWhatsThis: + "QWhatsThis.enterWhatsThisMode": (), + "QWhatsThis.createAction": ('PySide2.QtCore.QObject',), + "QWhatsThis.hideText": (), + "QWhatsThis.inWhatsThisMode": (), + "QWhatsThis.leaveWhatsThisMode": (), + "QWhatsThis.showText": ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), + + # class PySide2.QtWidgets.QWidget: + "QWidget.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWidget.acceptDrops": (), + "QWidget.accessibleDescription": (), + "QWidget.accessibleName": (), + "QWidget.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QWidget.actions": (), + "QWidget.activateWindow": (), + "QWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QWidget.addActions": ('list',), + "QWidget.adjustSize": (), + "QWidget.autoFillBackground": (), + "QWidget.backgroundRole": (), + "QWidget.backingStore": (), + "QWidget.baseSize": (), + "QWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QWidget.childAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.childrenRect": (), + "QWidget.childrenRegion": (), + "QWidget.clearFocus": (), + "QWidget.clearMask": (), + "QWidget.close": (), + "QWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QWidget.contentsMargins": (), + "QWidget.contentsRect": (), + "QWidget.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWidget.contextMenuPolicy": (), + "QWidget.create": ('int', 'bool', 'bool'), + "QWidget.createWinId": (), + "QWidget.createWindowContainer": ('PySide2.QtGui.QWindow', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWidget.cursor": (), + "QWidget.destroy": ('bool', 'bool'), + "QWidget.devType": (), + "QWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWidget.effectiveWinId": (), + "QWidget.ensurePolished": (), + "QWidget.enterEvent": ('PySide2.QtCore.QEvent',), + "QWidget.event": ('PySide2.QtCore.QEvent',), + "QWidget.find": ('int',), + "QWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusNextChild": (), + "QWidget.focusNextPrevChild": ('bool',), + "QWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusPolicy": (), + "QWidget.focusPreviousChild": (), + "QWidget.focusProxy": (), + "QWidget.focusWidget": (), + "QWidget.font": (), + "QWidget.fontInfo": (), + "QWidget.fontMetrics": (), + "QWidget.foregroundRole": (), + "QWidget.frameGeometry": (), + "QWidget.frameSize": (), + "QWidget.geometry": (), + "QWidget.getContentsMargins": ('int', 'int', 'int', 'int'), + "QWidget.grab": ('PySide2.QtCore.QRect',), + "QWidget.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'GestureFlags'), + "QWidget.grabKeyboard": (), + "QWidget.grabMouse": [(), ('PySide2.QtGui.QCursor',)], + "QWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QWidget.graphicsEffect": (), + "QWidget.graphicsProxyWidget": (), + "QWidget.hasFocus": (), + "QWidget.hasHeightForWidth": (), + "QWidget.hasMouseTracking": (), + "QWidget.height": (), + "QWidget.heightForWidth": ('int',), + "QWidget.hide": (), + "QWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWidget.initPainter": ('PySide2.QtGui.QPainter',), + "QWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QWidget.inputMethodHints": (), + "QWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QWidget.internalWinId": (), + "QWidget.isActiveWindow": (), + "QWidget.isAncestorOf": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabled": (), + "QWidget.isEnabledTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabledToTLW": (), + "QWidget.isFullScreen": (), + "QWidget.isHidden": (), + "QWidget.isLeftToRight": (), + "QWidget.isMaximized": (), + "QWidget.isMinimized": (), + "QWidget.isModal": (), + "QWidget.isRightToLeft": (), + "QWidget.isTopLevel": (), + "QWidget.isVisible": (), + "QWidget.isVisibleTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isWindow": (), + "QWidget.isWindowModified": (), + "QWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyboardGrabber": (), + "QWidget.layout": (), + "QWidget.layoutDirection": (), + "QWidget.leaveEvent": ('PySide2.QtCore.QEvent',), + "QWidget.locale": (), + "QWidget.lower": (), + "QWidget.mapFrom": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapFromParent": ('PySide2.QtCore.QPoint',), + "QWidget.mapTo": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapToParent": ('PySide2.QtCore.QPoint',), + "QWidget.mask": (), + "QWidget.maximumHeight": (), + "QWidget.maximumSize": (), + "QWidget.maximumWidth": (), + "QWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QWidget.minimumHeight": (), + "QWidget.minimumSize": (), + "QWidget.minimumSizeHint": (), + "QWidget.minimumWidth": (), + "QWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseGrabber": (), + "QWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWidget.nativeParentWidget": (), + "QWidget.nextInFocusChain": (), + "QWidget.normalGeometry": (), + "QWidget.overrideWindowFlags": ('WindowFlags',), + "QWidget.overrideWindowState": ('WindowStates',), + "QWidget.paintEngine": (), + "QWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWidget.palette": (), + "QWidget.parentWidget": (), + "QWidget.pos": (), + "QWidget.previousInFocusChain": (), + "QWidget.raise_": (), + "QWidget.rect": (), + "QWidget.redirected": ('PySide2.QtCore.QPoint',), + "QWidget.releaseKeyboard": (), + "QWidget.releaseMouse": (), + "QWidget.releaseShortcut": ('int',), + "QWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QWidget.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags')], + "QWidget.repaint": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWidget.restoreGeometry": ('PySide2.QtCore.QByteArray',), + "QWidget.saveGeometry": (), + "QWidget.scroll": [('int', 'int'), ('int', 'int', 'PySide2.QtCore.QRect')], + "QWidget.setAcceptDrops": ('bool',), + "QWidget.setAccessibleDescription": ('str',), + "QWidget.setAccessibleName": ('str',), + "QWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QWidget.setAutoFillBackground": ('bool',), + "QWidget.setBackgroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setBaseSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QWidget.setContextMenuPolicy": ('PySide2.QtCore.Qt.ContextMenuPolicy',), + "QWidget.setCursor": ('PySide2.QtGui.QCursor',), + "QWidget.setDisabled": ('bool',), + "QWidget.setEnabled": ('bool',), + "QWidget.setFixedHeight": ('int',), + "QWidget.setFixedSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setFixedWidth": ('int',), + "QWidget.setFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QWidget.setFocusProxy": ('PySide2.QtWidgets.QWidget',), + "QWidget.setFont": ('PySide2.QtGui.QFont',), + "QWidget.setForegroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWidget.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QWidget.setHidden": ('bool',), + "QWidget.setInputMethodHints": ('InputMethodHints',), + "QWidget.setLayout": ('PySide2.QtWidgets.QLayout',), + "QWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QWidget.setLocale": ('PySide2.QtCore.QLocale',), + "QWidget.setMask": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QRegion',)], + "QWidget.setMaximumHeight": ('int',), + "QWidget.setMaximumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMaximumWidth": ('int',), + "QWidget.setMinimumHeight": ('int',), + "QWidget.setMinimumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMinimumWidth": ('int',), + "QWidget.setMouseTracking": ('bool',), + "QWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QWidget.setParent": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QWidget.setShortcutEnabled": ('int', 'bool'), + "QWidget.setSizeIncrement": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy')], + "QWidget.setStatusTip": ('str',), + "QWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QWidget.setStyleSheet": ('str',), + "QWidget.setTabOrder": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), + "QWidget.setToolTip": ('str',), + "QWidget.setToolTipDuration": ('int',), + "QWidget.setUpdatesEnabled": ('bool',), + "QWidget.setVisible": ('bool',), + "QWidget.setWhatsThis": ('str',), + "QWidget.setWindowFilePath": ('str',), + "QWidget.setWindowFlags": ('WindowFlags',), + "QWidget.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QWidget.setWindowIconText": ('str',), + "QWidget.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWidget.setWindowModified": ('bool',), + "QWidget.setWindowOpacity": ('float',), + "QWidget.setWindowRole": ('str',), + "QWidget.setWindowState": ('WindowStates',), + "QWidget.setWindowTitle": ('str',), + "QWidget.sharedPainter": (), + "QWidget.show": (), + "QWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWidget.showFullScreen": (), + "QWidget.showMaximized": (), + "QWidget.showMinimized": (), + "QWidget.showNormal": (), + "QWidget.size": (), + "QWidget.sizeHint": (), + "QWidget.sizeIncrement": (), + "QWidget.sizePolicy": (), + "QWidget.stackUnder": ('PySide2.QtWidgets.QWidget',), + "QWidget.statusTip": (), + "QWidget.style": (), + "QWidget.styleSheet": (), + "QWidget.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QWidget.toolTip": (), + "QWidget.toolTipDuration": (), + "QWidget.topLevelWidget": (), + "QWidget.underMouse": (), + "QWidget.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QWidget.unsetCursor": (), + "QWidget.unsetLayoutDirection": (), + "QWidget.unsetLocale": (), + "QWidget.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.updateGeometry": (), + "QWidget.updateMicroFocus": (), + "QWidget.updatesEnabled": (), + "QWidget.visibleRegion": (), + "QWidget.whatsThis": (), + "QWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWidget.width": (), + "QWidget.winId": (), + "QWidget.window": (), + "QWidget.windowFilePath": (), + "QWidget.windowFlags": (), + "QWidget.windowHandle": (), + "QWidget.windowIcon": (), + "QWidget.windowIconText": (), + "QWidget.windowModality": (), + "QWidget.windowOpacity": (), + "QWidget.windowRole": (), + "QWidget.windowState": (), + "QWidget.windowTitle": (), + "QWidget.windowType": (), + "QWidget.x": (), + "QWidget.y": (), + + # class PySide2.QtWidgets.QWidgetAction: + "QWidgetAction.__init__": ('PySide2.QtCore.QObject',), + "QWidgetAction.createWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.createdWidgets": (), + "QWidgetAction.defaultWidget": (), + "QWidgetAction.deleteWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.event": ('PySide2.QtCore.QEvent',), + "QWidgetAction.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QWidgetAction.releaseWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.requestWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.setDefaultWidget": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QWidgetItem: + "QWidgetItem.__init__": ('PySide2.QtWidgets.QWidget',), + "QWidgetItem.controlTypes": (), + "QWidgetItem.expandingDirections": (), + "QWidgetItem.geometry": (), + "QWidgetItem.hasHeightForWidth": (), + "QWidgetItem.heightForWidth": ('int',), + "QWidgetItem.isEmpty": (), + "QWidgetItem.maximumSize": (), + "QWidgetItem.minimumSize": (), + "QWidgetItem.setGeometry": ('PySide2.QtCore.QRect',), + "QWidgetItem.sizeHint": (), + "QWidgetItem.widget": (), + + # class PySide2.QtWidgets.QWizard: + "QWizard.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWizard.addPage": ('PySide2.QtWidgets.QWizardPage',), + "QWizard.back": (), + "QWizard.button": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.cleanupPage": ('int',), + "QWizard.currentId": (), + "QWizard.currentPage": (), + "QWizard.done": ('int',), + "QWizard.event": ('PySide2.QtCore.QEvent',), + "QWizard.field": ('str',), + "QWizard.hasVisitedPage": ('int',), + "QWizard.initializePage": ('int',), + "QWizard.next": (), + "QWizard.nextId": (), + "QWizard.options": (), + "QWizard.page": ('int',), + "QWizard.pageIds": (), + "QWizard.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWizard.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizard.removePage": ('int',), + "QWizard.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWizard.restart": (), + "QWizard.setButton": ('PySide2.QtWidgets.QWizard.WizardButton', 'PySide2.QtWidgets.QAbstractButton'), + "QWizard.setButtonLayout": ('list',), + "QWizard.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizard.setDefaultProperty": ('str', 'str', 'str'), + "QWizard.setField": ('str', 'PySide2.support.signature.typing.Any'), + "QWizard.setOption": ('PySide2.QtWidgets.QWizard.WizardOption', 'bool'), + "QWizard.setOptions": ('WizardOptions',), + "QWizard.setPage": ('int', 'PySide2.QtWidgets.QWizardPage'), + "QWizard.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizard.setSideWidget": ('PySide2.QtWidgets.QWidget',), + "QWizard.setStartId": ('int',), + "QWizard.setSubTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setVisible": ('bool',), + "QWizard.setWizardStyle": ('PySide2.QtWidgets.QWizard.WizardStyle',), + "QWizard.sideWidget": (), + "QWizard.sizeHint": (), + "QWizard.startId": (), + "QWizard.subTitleFormat": (), + "QWizard.testOption": ('PySide2.QtWidgets.QWizard.WizardOption',), + "QWizard.titleFormat": (), + "QWizard.validateCurrentPage": (), + "QWizard.visitedPages": (), + "QWizard.wizardStyle": (), + + # class PySide2.QtWidgets.QWizardPage: + "QWizardPage.__init__": ('PySide2.QtWidgets.QWidget',), + "QWizardPage.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizardPage.cleanupPage": (), + "QWizardPage.field": ('str',), + "QWizardPage.initializePage": (), + "QWizardPage.isCommitPage": (), + "QWizardPage.isComplete": (), + "QWizardPage.isFinalPage": (), + "QWizardPage.nextId": (), + "QWizardPage.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizardPage.registerField": ('str', 'PySide2.QtWidgets.QWidget', 'str', 'str'), + "QWizardPage.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizardPage.setCommitPage": ('bool',), + "QWizardPage.setField": ('str', 'PySide2.support.signature.typing.Any'), + "QWizardPage.setFinalPage": ('bool',), + "QWizardPage.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizardPage.setSubTitle": ('str',), + "QWizardPage.setTitle": ('str',), + "QWizardPage.subTitle": (), + "QWizardPage.title": (), + "QWizardPage.validatePage": (), + "QWizardPage.wizard": (), + }) + +# Module PySide2.QtPrintSupport +if "PySide2.QtPrintSupport" in sys.modules: + dict.update({ + + # class PySide2.QtPrintSupport.QAbstractPrintDialog: + "QAbstractPrintDialog.__init__": ('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), + "QAbstractPrintDialog.addEnabledOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.enabledOptions": (), + "QAbstractPrintDialog.exec_": (), + "QAbstractPrintDialog.fromPage": (), + "QAbstractPrintDialog.isOptionEnabled": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.maxPage": (), + "QAbstractPrintDialog.minPage": (), + "QAbstractPrintDialog.printRange": (), + "QAbstractPrintDialog.printer": (), + "QAbstractPrintDialog.setEnabledOptions": ('PrintDialogOptions',), + "QAbstractPrintDialog.setFromTo": ('int', 'int'), + "QAbstractPrintDialog.setMinMax": ('int', 'int'), + "QAbstractPrintDialog.setOptionTabs": ('list',), + "QAbstractPrintDialog.setPrintRange": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintRange',), + "QAbstractPrintDialog.toPage": (), + + # class PySide2.QtPrintSupport.QPageSetupDialog: + "QPageSetupDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPageSetupDialog.done": ('int',), + "QPageSetupDialog.exec_": (), + "QPageSetupDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPageSetupDialog.printer": (), + + # class PySide2.QtPrintSupport.QPrintDialog: + "QPrintDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPrintDialog.accept": (), + "QPrintDialog.done": ('int',), + "QPrintDialog.exec_": (), + "QPrintDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintDialog.options": (), + "QPrintDialog.printer": [], + "QPrintDialog.setOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption', 'bool'), + "QPrintDialog.setOptions": ('PrintDialogOptions',), + "QPrintDialog.setVisible": ('bool',), + "QPrintDialog.testOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + + # class PySide2.QtPrintSupport.QPrintEngine: + "QPrintEngine.__init__": (), + "QPrintEngine.abort": (), + "QPrintEngine.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrintEngine.newPage": (), + "QPrintEngine.printerState": (), + "QPrintEngine.property": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey',), + "QPrintEngine.setProperty": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtPrintSupport.QPrintPreviewDialog: + "QPrintPreviewDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QPrintPreviewDialog.done": ('int',), + "QPrintPreviewDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintPreviewDialog.printer": (), + "QPrintPreviewDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintPreviewWidget: + "QPrintPreviewWidget.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QPrintPreviewWidget.currentPage": (), + "QPrintPreviewWidget.fitInView": (), + "QPrintPreviewWidget.fitToWidth": (), + "QPrintPreviewWidget.orientation": (), + "QPrintPreviewWidget.pageCount": (), + "QPrintPreviewWidget.print_": (), + "QPrintPreviewWidget.setAllPagesViewMode": (), + "QPrintPreviewWidget.setCurrentPage": ('int',), + "QPrintPreviewWidget.setFacingPagesViewMode": (), + "QPrintPreviewWidget.setLandscapeOrientation": (), + "QPrintPreviewWidget.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrintPreviewWidget.setPortraitOrientation": (), + "QPrintPreviewWidget.setSinglePageViewMode": (), + "QPrintPreviewWidget.setViewMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ViewMode',), + "QPrintPreviewWidget.setVisible": ('bool',), + "QPrintPreviewWidget.setZoomFactor": ('float',), + "QPrintPreviewWidget.setZoomMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ZoomMode',), + "QPrintPreviewWidget.updatePreview": (), + "QPrintPreviewWidget.viewMode": (), + "QPrintPreviewWidget.zoomFactor": (), + "QPrintPreviewWidget.zoomIn": ('float',), + "QPrintPreviewWidget.zoomMode": (), + "QPrintPreviewWidget.zoomOut": ('float',), + + # class PySide2.QtPrintSupport.QPrinter: + "QPrinter.__init__": [('PySide2.QtPrintSupport.QPrinter.PrinterMode',), ('PySide2.QtPrintSupport.QPrinterInfo', 'PySide2.QtPrintSupport.QPrinter.PrinterMode')], + "QPrinter.abort": (), + "QPrinter.actualNumCopies": (), + "QPrinter.collateCopies": (), + "QPrinter.colorMode": (), + "QPrinter.copyCount": (), + "QPrinter.creator": (), + "QPrinter.devType": (), + "QPrinter.docName": (), + "QPrinter.doubleSidedPrinting": (), + "QPrinter.duplex": (), + "QPrinter.fontEmbeddingEnabled": (), + "QPrinter.fromPage": (), + "QPrinter.fullPage": (), + "QPrinter.getPageMargins": ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit'), + "QPrinter.isValid": (), + "QPrinter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrinter.newPage": (), + "QPrinter.numCopies": (), + "QPrinter.orientation": (), + "QPrinter.outputFileName": (), + "QPrinter.outputFormat": (), + "QPrinter.pageLayout": (), + "QPrinter.pageOrder": (), + "QPrinter.pageRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.pageSize": (), + "QPrinter.paintEngine": (), + "QPrinter.paperName": (), + "QPrinter.paperRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSize": ('PySide2.QtPrintSupport.QPrinter.Unit',), + "QPrinter.paperSource": (), + "QPrinter.printEngine": (), + "QPrinter.printProgram": (), + "QPrinter.printRange": (), + "QPrinter.printerName": (), + "QPrinter.printerState": (), + "QPrinter.resolution": (), + "QPrinter.setCollateCopies": ('bool',), + "QPrinter.setColorMode": ('PySide2.QtPrintSupport.QPrinter.ColorMode',), + "QPrinter.setCopyCount": ('int',), + "QPrinter.setCreator": ('str',), + "QPrinter.setDocName": ('str',), + "QPrinter.setDoubleSidedPrinting": ('bool',), + "QPrinter.setDuplex": ('PySide2.QtPrintSupport.QPrinter.DuplexMode',), + "QPrinter.setEngines": ('PySide2.QtPrintSupport.QPrintEngine', 'PySide2.QtGui.QPaintEngine'), + "QPrinter.setFontEmbeddingEnabled": ('bool',), + "QPrinter.setFromTo": ('int', 'int'), + "QPrinter.setFullPage": ('bool',), + "QPrinter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPrinter.setNumCopies": ('int',), + "QPrinter.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrinter.setOutputFileName": ('str',), + "QPrinter.setOutputFormat": ('PySide2.QtPrintSupport.QPrinter.OutputFormat',), + "QPrinter.setPageLayout": ('PySide2.QtGui.QPageLayout',), + "QPrinter.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit'), ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit')], + "QPrinter.setPageOrder": ('PySide2.QtPrintSupport.QPrinter.PageOrder',), + "QPrinter.setPageOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPrinter.setPageSize": [('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPrinter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPrinter.setPaperName": ('str',), + "QPrinter.setPaperSize": ('PySide2.QtCore.QSizeF', 'PySide2.QtPrintSupport.QPrinter.Unit'), + "QPrinter.setPaperSource": ('PySide2.QtPrintSupport.QPrinter.PaperSource',), + "QPrinter.setPrintProgram": ('str',), + "QPrinter.setPrintRange": ('PySide2.QtPrintSupport.QPrinter.PrintRange',), + "QPrinter.setPrinterName": ('str',), + "QPrinter.setResolution": ('int',), + "QPrinter.setWinPageSize": ('int',), + "QPrinter.supportedResolutions": (), + "QPrinter.supportsMultipleCopies": (), + "QPrinter.toPage": (), + "QPrinter.winPageSize": (), + + # class PySide2.QtPrintSupport.QPrinterInfo: + "QPrinterInfo.__init__": [(), ('PySide2.QtPrintSupport.QPrinter',), ('PySide2.QtPrintSupport.QPrinterInfo',)], + "QPrinterInfo.__copy__": (), + "QPrinterInfo.availablePrinterNames": (), + "QPrinterInfo.availablePrinters": (), + "QPrinterInfo.defaultDuplexMode": (), + "QPrinterInfo.defaultPageSize": (), + "QPrinterInfo.defaultPrinter": (), + "QPrinterInfo.defaultPrinterName": (), + "QPrinterInfo.description": (), + "QPrinterInfo.isDefault": (), + "QPrinterInfo.isNull": (), + "QPrinterInfo.isRemote": (), + "QPrinterInfo.location": (), + "QPrinterInfo.makeAndModel": (), + "QPrinterInfo.maximumPhysicalPageSize": (), + "QPrinterInfo.minimumPhysicalPageSize": (), + "QPrinterInfo.printerInfo": ('str',), + "QPrinterInfo.printerName": (), + "QPrinterInfo.state": (), + "QPrinterInfo.supportedDuplexModes": (), + "QPrinterInfo.supportedPageSizes": (), + "QPrinterInfo.supportedResolutions": (), + "QPrinterInfo.supportedSizesWithNames": (), + "QPrinterInfo.supportsCustomPageSizes": (), + }) + +# Module PySide2.QtSql +if "PySide2.QtSql" in sys.modules: + dict.update({ + + # class PySide2.QtSql.QSql: + + # class PySide2.QtSql.QSqlDatabase: + "QSqlDatabase.__init__": [(), ('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlDriver',), ('str',)], + "QSqlDatabase.__copy__": (), + "QSqlDatabase.addDatabase": [('PySide2.QtSql.QSqlDriver', 'str'), ('str', 'str')], + "QSqlDatabase.cloneDatabase": ('PySide2.QtSql.QSqlDatabase', 'str'), + "QSqlDatabase.close": (), + "QSqlDatabase.commit": (), + "QSqlDatabase.connectOptions": (), + "QSqlDatabase.connectionName": (), + "QSqlDatabase.connectionNames": (), + "QSqlDatabase.contains": ('str',), + "QSqlDatabase.database": ('str', 'bool'), + "QSqlDatabase.databaseName": (), + "QSqlDatabase.driver": (), + "QSqlDatabase.driverName": (), + "QSqlDatabase.drivers": (), + "QSqlDatabase.exec_": ('str',), + "QSqlDatabase.hostName": (), + "QSqlDatabase.isDriverAvailable": ('str',), + "QSqlDatabase.isOpen": (), + "QSqlDatabase.isOpenError": (), + "QSqlDatabase.isValid": (), + "QSqlDatabase.lastError": (), + "QSqlDatabase.numericalPrecisionPolicy": (), + "QSqlDatabase.open": [(), ('str', 'str')], + "QSqlDatabase.password": (), + "QSqlDatabase.port": (), + "QSqlDatabase.primaryIndex": ('str',), + "QSqlDatabase.record": ('str',), + "QSqlDatabase.registerSqlDriver": ('str', 'PySide2.QtSql.QSqlDriverCreatorBase'), + "QSqlDatabase.removeDatabase": ('str',), + "QSqlDatabase.rollback": (), + "QSqlDatabase.setConnectOptions": ('str',), + "QSqlDatabase.setDatabaseName": ('str',), + "QSqlDatabase.setHostName": ('str',), + "QSqlDatabase.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDatabase.setPassword": ('str',), + "QSqlDatabase.setPort": ('int',), + "QSqlDatabase.setUserName": ('str',), + "QSqlDatabase.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDatabase.transaction": (), + "QSqlDatabase.userName": (), + + # class PySide2.QtSql.QSqlDriver: + "QSqlDriver.__init__": ('PySide2.QtCore.QObject',), + "QSqlDriver.beginTransaction": (), + "QSqlDriver.cancelQuery": (), + "QSqlDriver.close": (), + "QSqlDriver.commitTransaction": (), + "QSqlDriver.createResult": (), + "QSqlDriver.dbmsType": (), + "QSqlDriver.escapeIdentifier": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.formatValue": ('PySide2.QtSql.QSqlField', 'bool'), + "QSqlDriver.hasFeature": ('PySide2.QtSql.QSqlDriver.DriverFeature',), + "QSqlDriver.isIdentifierEscaped": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.isOpen": (), + "QSqlDriver.isOpenError": (), + "QSqlDriver.lastError": (), + "QSqlDriver.numericalPrecisionPolicy": (), + "QSqlDriver.open": ('str', 'str', 'str', 'str', 'int', 'str'), + "QSqlDriver.primaryIndex": ('str',), + "QSqlDriver.record": ('str',), + "QSqlDriver.rollbackTransaction": (), + "QSqlDriver.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlDriver.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDriver.setOpen": ('bool',), + "QSqlDriver.setOpenError": ('bool',), + "QSqlDriver.sqlStatement": ('PySide2.QtSql.QSqlDriver.StatementType', 'str', 'PySide2.QtSql.QSqlRecord', 'bool'), + "QSqlDriver.stripDelimiters": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.subscribeToNotification": ('str',), + "QSqlDriver.subscribedToNotifications": (), + "QSqlDriver.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDriver.unsubscribeFromNotification": ('str',), + + # class PySide2.QtSql.QSqlDriverCreatorBase: + "QSqlDriverCreatorBase.__init__": (), + "QSqlDriverCreatorBase.createObject": (), + + # class PySide2.QtSql.QSqlError: + "QSqlError.__init__": [('PySide2.QtSql.QSqlError',), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'int'), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'str')], + "QSqlError.__copy__": (), + "QSqlError.databaseText": (), + "QSqlError.driverText": (), + "QSqlError.isValid": (), + "QSqlError.nativeErrorCode": (), + "QSqlError.number": (), + "QSqlError.setDatabaseText": ('str',), + "QSqlError.setDriverText": ('str',), + "QSqlError.setNumber": ('int',), + "QSqlError.setType": ('PySide2.QtSql.QSqlError.ErrorType',), + "QSqlError.text": (), + "QSqlError.type": (), + + # class PySide2.QtSql.QSqlField: + "QSqlField.__init__": [('PySide2.QtSql.QSqlField',), ('str', 'type')], + "QSqlField.__copy__": (), + "QSqlField.clear": (), + "QSqlField.defaultValue": (), + "QSqlField.isAutoValue": (), + "QSqlField.isGenerated": (), + "QSqlField.isNull": (), + "QSqlField.isReadOnly": (), + "QSqlField.isValid": (), + "QSqlField.length": (), + "QSqlField.name": (), + "QSqlField.precision": (), + "QSqlField.requiredStatus": (), + "QSqlField.setAutoValue": ('bool',), + "QSqlField.setDefaultValue": ('PySide2.support.signature.typing.Any',), + "QSqlField.setGenerated": ('bool',), + "QSqlField.setLength": ('int',), + "QSqlField.setName": ('str',), + "QSqlField.setPrecision": ('int',), + "QSqlField.setReadOnly": ('bool',), + "QSqlField.setRequired": ('bool',), + "QSqlField.setRequiredStatus": ('PySide2.QtSql.QSqlField.RequiredStatus',), + "QSqlField.setSqlType": ('int',), + "QSqlField.setType": ('type',), + "QSqlField.setValue": ('PySide2.support.signature.typing.Any',), + "QSqlField.type": (), + "QSqlField.typeID": (), + "QSqlField.value": (), + + # class PySide2.QtSql.QSqlIndex: + "QSqlIndex.__init__": [('PySide2.QtSql.QSqlIndex',), ('str', 'str')], + "QSqlIndex.__copy__": (), + "QSqlIndex.append": [('PySide2.QtSql.QSqlField',), ('PySide2.QtSql.QSqlField', 'bool')], + "QSqlIndex.cursorName": (), + "QSqlIndex.isDescending": ('int',), + "QSqlIndex.name": (), + "QSqlIndex.setCursorName": ('str',), + "QSqlIndex.setDescending": ('int', 'bool'), + "QSqlIndex.setName": ('str',), + + # class PySide2.QtSql.QSqlQuery: + "QSqlQuery.__init__": [('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlQuery',), ('PySide2.QtSql.QSqlResult',), ('str', 'PySide2.QtSql.QSqlDatabase')], + "QSqlQuery.__copy__": (), + "QSqlQuery.addBindValue": ('PySide2.support.signature.typing.Any', 'ParamType'), + "QSqlQuery.at": (), + "QSqlQuery.bindValue": [('int', 'PySide2.support.signature.typing.Any', 'ParamType'), ('str', 'PySide2.support.signature.typing.Any', 'ParamType')], + "QSqlQuery.boundValue": [('int',), ('str',)], + "QSqlQuery.boundValues": (), + "QSqlQuery.clear": (), + "QSqlQuery.driver": (), + "QSqlQuery.execBatch": ('PySide2.QtSql.QSqlQuery.BatchExecutionMode',), + "QSqlQuery.exec_": [(), ('str',)], + "QSqlQuery.executedQuery": (), + "QSqlQuery.finish": (), + "QSqlQuery.first": (), + "QSqlQuery.isActive": (), + "QSqlQuery.isForwardOnly": (), + "QSqlQuery.isNull": [('int',), ('str',)], + "QSqlQuery.isSelect": (), + "QSqlQuery.isValid": (), + "QSqlQuery.last": (), + "QSqlQuery.lastError": (), + "QSqlQuery.lastInsertId": (), + "QSqlQuery.lastQuery": (), + "QSqlQuery.next": (), + "QSqlQuery.nextResult": (), + "QSqlQuery.numRowsAffected": (), + "QSqlQuery.numericalPrecisionPolicy": (), + "QSqlQuery.prepare": ('str',), + "QSqlQuery.previous": (), + "QSqlQuery.record": (), + "QSqlQuery.result": (), + "QSqlQuery.seek": ('int', 'bool'), + "QSqlQuery.setForwardOnly": ('bool',), + "QSqlQuery.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlQuery.size": (), + "QSqlQuery.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlQueryModel: + "QSqlQueryModel.__init__": ('PySide2.QtCore.QObject',), + "QSqlQueryModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginResetModel": (), + "QSqlQueryModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.clear": (), + "QSqlQueryModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlQueryModel.endInsertColumns": (), + "QSqlQueryModel.endInsertRows": (), + "QSqlQueryModel.endRemoveColumns": (), + "QSqlQueryModel.endRemoveRows": (), + "QSqlQueryModel.endResetModel": (), + "QSqlQueryModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlQueryModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.lastError": (), + "QSqlQueryModel.query": (), + "QSqlQueryModel.queryChange": (), + "QSqlQueryModel.record": [(), ('int',)], + "QSqlQueryModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QSqlQueryModel.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlQueryModel.setQuery": [('PySide2.QtSql.QSqlQuery',), ('str', 'PySide2.QtSql.QSqlDatabase')], + + # class PySide2.QtSql.QSqlRecord: + "QSqlRecord.__init__": [(), ('PySide2.QtSql.QSqlRecord',)], + "QSqlRecord.__copy__": (), + "QSqlRecord.append": ('PySide2.QtSql.QSqlField',), + "QSqlRecord.clear": (), + "QSqlRecord.clearValues": (), + "QSqlRecord.contains": ('str',), + "QSqlRecord.count": (), + "QSqlRecord.field": [('int',), ('str',)], + "QSqlRecord.fieldName": ('int',), + "QSqlRecord.indexOf": ('str',), + "QSqlRecord.insert": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.isEmpty": (), + "QSqlRecord.isGenerated": [('int',), ('str',)], + "QSqlRecord.isNull": [('int',), ('str',)], + "QSqlRecord.keyValues": ('PySide2.QtSql.QSqlRecord',), + "QSqlRecord.remove": ('int',), + "QSqlRecord.replace": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.setGenerated": [('int', 'bool'), ('str', 'bool')], + "QSqlRecord.setNull": [('int',), ('str',)], + "QSqlRecord.setValue": [('int', 'PySide2.support.signature.typing.Any'), ('str', 'PySide2.support.signature.typing.Any')], + "QSqlRecord.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlRelation: + "QSqlRelation.__init__": [(), ('PySide2.QtSql.QSqlRelation',), ('str', 'str', 'str')], + "QSqlRelation.__copy__": (), + "QSqlRelation.displayColumn": (), + "QSqlRelation.indexColumn": (), + "QSqlRelation.isValid": (), + "QSqlRelation.tableName": (), + + # class PySide2.QtSql.QSqlRelationalDelegate: + "QSqlRelationalDelegate.__init__": ('PySide2.QtCore.QObject',), + "QSqlRelationalDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtSql.QSqlRelationalTableModel: + "QSqlRelationalTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlRelationalTableModel.clear": (), + "QSqlRelationalTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlRelationalTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlRelationalTableModel.orderByClause": (), + "QSqlRelationalTableModel.relation": ('int',), + "QSqlRelationalTableModel.relationModel": ('int',), + "QSqlRelationalTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalTableModel.revertRow": ('int',), + "QSqlRelationalTableModel.select": (), + "QSqlRelationalTableModel.selectStatement": (), + "QSqlRelationalTableModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QSqlRelationalTableModel.setJoinMode": ('PySide2.QtSql.QSqlRelationalTableModel.JoinMode',), + "QSqlRelationalTableModel.setRelation": ('int', 'PySide2.QtSql.QSqlRelation'), + "QSqlRelationalTableModel.setTable": ('str',), + "QSqlRelationalTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + + # class PySide2.QtSql.QSqlResult: + "QSqlResult.__init__": ('PySide2.QtSql.QSqlDriver',), + "QSqlResult.addBindValue": ('PySide2.support.signature.typing.Any', 'ParamType'), + "QSqlResult.at": (), + "QSqlResult.bindValue": [('int', 'PySide2.support.signature.typing.Any', 'ParamType'), ('str', 'PySide2.support.signature.typing.Any', 'ParamType')], + "QSqlResult.bindValueType": [('int',), ('str',)], + "QSqlResult.bindingSyntax": (), + "QSqlResult.boundValue": [('int',), ('str',)], + "QSqlResult.boundValueCount": (), + "QSqlResult.boundValueName": ('int',), + "QSqlResult.boundValues": (), + "QSqlResult.clear": (), + "QSqlResult.data": ('int',), + "QSqlResult.detachFromResultSet": (), + "QSqlResult.driver": (), + "QSqlResult.execBatch": ('bool',), + "QSqlResult.exec_": (), + "QSqlResult.executedQuery": (), + "QSqlResult.fetch": ('int',), + "QSqlResult.fetchFirst": (), + "QSqlResult.fetchLast": (), + "QSqlResult.fetchNext": (), + "QSqlResult.fetchPrevious": (), + "QSqlResult.handle": (), + "QSqlResult.hasOutValues": (), + "QSqlResult.isActive": (), + "QSqlResult.isForwardOnly": (), + "QSqlResult.isNull": ('int',), + "QSqlResult.isSelect": (), + "QSqlResult.isValid": (), + "QSqlResult.lastError": (), + "QSqlResult.lastInsertId": (), + "QSqlResult.lastQuery": (), + "QSqlResult.nextResult": (), + "QSqlResult.numRowsAffected": (), + "QSqlResult.numericalPrecisionPolicy": (), + "QSqlResult.prepare": ('str',), + "QSqlResult.record": (), + "QSqlResult.reset": ('str',), + "QSqlResult.resetBindCount": (), + "QSqlResult.savePrepare": ('str',), + "QSqlResult.setActive": ('bool',), + "QSqlResult.setAt": ('int',), + "QSqlResult.setForwardOnly": ('bool',), + "QSqlResult.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlResult.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlResult.setQuery": ('str',), + "QSqlResult.setSelect": ('bool',), + "QSqlResult.size": (), + + # class PySide2.QtSql.QSqlTableModel: + "QSqlTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlTableModel.clear": (), + "QSqlTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlTableModel.database": (), + "QSqlTableModel.deleteRowFromTable": ('int',), + "QSqlTableModel.editStrategy": (), + "QSqlTableModel.fieldIndex": ('str',), + "QSqlTableModel.filter": (), + "QSqlTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlTableModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.insertRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlTableModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.isDirty": [(), ('PySide2.QtCore.QModelIndex',)], + "QSqlTableModel.orderByClause": (), + "QSqlTableModel.primaryKey": (), + "QSqlTableModel.primaryValues": ('int',), + "QSqlTableModel.record": [(), ('int',)], + "QSqlTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.revert": (), + "QSqlTableModel.revertAll": (), + "QSqlTableModel.revertRow": ('int',), + "QSqlTableModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.select": (), + "QSqlTableModel.selectRow": ('int',), + "QSqlTableModel.selectStatement": (), + "QSqlTableModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QSqlTableModel.setEditStrategy": ('PySide2.QtSql.QSqlTableModel.EditStrategy',), + "QSqlTableModel.setFilter": ('str',), + "QSqlTableModel.setPrimaryKey": ('PySide2.QtSql.QSqlIndex',), + "QSqlTableModel.setQuery": ('PySide2.QtSql.QSqlQuery',), + "QSqlTableModel.setRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.setSort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.setTable": ('str',), + "QSqlTableModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.submit": (), + "QSqlTableModel.submitAll": (), + "QSqlTableModel.tableName": (), + "QSqlTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + }) + +# Module PySide2.QtNetwork +if "PySide2.QtNetwork" in sys.modules: + dict.update({ + + # class PySide2.QtNetwork.QAbstractNetworkCache: + "QAbstractNetworkCache.__init__": ('PySide2.QtCore.QObject',), + "QAbstractNetworkCache.cacheSize": (), + "QAbstractNetworkCache.clear": (), + "QAbstractNetworkCache.data": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.insert": ('PySide2.QtCore.QIODevice',), + "QAbstractNetworkCache.metaData": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QAbstractNetworkCache.remove": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QAbstractSocket: + "QAbstractSocket.__init__": ('PySide2.QtNetwork.QAbstractSocket.SocketType', 'PySide2.QtCore.QObject'), + "QAbstractSocket.abort": (), + "QAbstractSocket.atEnd": (), + "QAbstractSocket.bind": [('PySide2.QtNetwork.QHostAddress', 'int', 'BindMode'), ('int', 'BindMode')], + "QAbstractSocket.bytesAvailable": (), + "QAbstractSocket.bytesToWrite": (), + "QAbstractSocket.canReadLine": (), + "QAbstractSocket.close": (), + "QAbstractSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'OpenMode'), ('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QAbstractSocket.disconnectFromHost": (), + "QAbstractSocket.flush": (), + "QAbstractSocket.isSequential": (), + "QAbstractSocket.isValid": (), + "QAbstractSocket.localAddress": (), + "QAbstractSocket.localPort": (), + "QAbstractSocket.pauseMode": (), + "QAbstractSocket.peerAddress": (), + "QAbstractSocket.peerName": (), + "QAbstractSocket.peerPort": (), + "QAbstractSocket.proxy": (), + "QAbstractSocket.readBufferSize": (), + "QAbstractSocket.readData": ('str', 'int'), + "QAbstractSocket.readLineData": ('str', 'int'), + "QAbstractSocket.resume": (), + "QAbstractSocket.setLocalAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setLocalPort": ('int',), + "QAbstractSocket.setPauseMode": ('PauseModes',), + "QAbstractSocket.setPeerAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setPeerName": ('str',), + "QAbstractSocket.setPeerPort": ('int',), + "QAbstractSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QAbstractSocket.setReadBufferSize": ('int',), + "QAbstractSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'OpenMode'), + "QAbstractSocket.setSocketError": ('PySide2.QtNetwork.QAbstractSocket.SocketError',), + "QAbstractSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'PySide2.support.signature.typing.Any'), + "QAbstractSocket.setSocketState": ('PySide2.QtNetwork.QAbstractSocket.SocketState',), + "QAbstractSocket.socketDescriptor": (), + "QAbstractSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QAbstractSocket.socketType": (), + "QAbstractSocket.state": (), + "QAbstractSocket.waitForBytesWritten": ('int',), + "QAbstractSocket.waitForConnected": ('int',), + "QAbstractSocket.waitForDisconnected": ('int',), + "QAbstractSocket.waitForReadyRead": ('int',), + "QAbstractSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QAuthenticator: + "QAuthenticator.__init__": [(), ('PySide2.QtNetwork.QAuthenticator',)], + "QAuthenticator.__copy__": (), + "QAuthenticator.isNull": (), + "QAuthenticator.option": ('str',), + "QAuthenticator.options": (), + "QAuthenticator.password": (), + "QAuthenticator.realm": (), + "QAuthenticator.setOption": ('str', 'PySide2.support.signature.typing.Any'), + "QAuthenticator.setPassword": ('str',), + "QAuthenticator.setRealm": ('str',), + "QAuthenticator.setUser": ('str',), + "QAuthenticator.user": (), + + # class PySide2.QtNetwork.QHostAddress: + "QHostAddress.__init__": [(), ('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.__copy__": (), + "QHostAddress.clear": (), + "QHostAddress.isInSubnet": [('PySide2.QtNetwork.QHostAddress', 'int'), ('PySide2.support.signature.typing.Tuple',)], + "QHostAddress.isLoopback": (), + "QHostAddress.isMulticast": (), + "QHostAddress.isNull": (), + "QHostAddress.parseSubnet": ('str',), + "QHostAddress.protocol": (), + "QHostAddress.scopeId": (), + "QHostAddress.setAddress": [('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.setScopeId": ('str',), + "QHostAddress.swap": ('PySide2.QtNetwork.QHostAddress',), + "QHostAddress.toIPv4Address": [(), ('bool',)], + "QHostAddress.toIPv6Address": (), + "QHostAddress.toString": (), + + # class PySide2.QtNetwork.QHostInfo: + "QHostInfo.__init__": [('PySide2.QtNetwork.QHostInfo',), ('int',)], + "QHostInfo.__copy__": (), + "QHostInfo.abortHostLookup": ('int',), + "QHostInfo.addresses": (), + "QHostInfo.error": (), + "QHostInfo.errorString": (), + "QHostInfo.fromName": ('str',), + "QHostInfo.hostName": (), + "QHostInfo.localDomainName": (), + "QHostInfo.localHostName": (), + "QHostInfo.lookupId": (), + "QHostInfo.setAddresses": ('list',), + "QHostInfo.setError": ('PySide2.QtNetwork.QHostInfo.HostInfoError',), + "QHostInfo.setErrorString": ('str',), + "QHostInfo.setHostName": ('str',), + "QHostInfo.setLookupId": ('int',), + + # class PySide2.QtNetwork.QIPv6Address: + "QIPv6Address.__init__": [(), ('PySide2.QtNetwork.QIPv6Address',)], + "QIPv6Address.__copy__": (), + + # class PySide2.QtNetwork.QLocalServer: + "QLocalServer.__init__": ('PySide2.QtCore.QObject',), + "QLocalServer.close": (), + "QLocalServer.errorString": (), + "QLocalServer.fullServerName": (), + "QLocalServer.hasPendingConnections": (), + "QLocalServer.incomingConnection": ('int',), + "QLocalServer.isListening": (), + "QLocalServer.listen": [('int',), ('str',)], + "QLocalServer.maxPendingConnections": (), + "QLocalServer.nextPendingConnection": (), + "QLocalServer.removeServer": ('str',), + "QLocalServer.serverError": (), + "QLocalServer.serverName": (), + "QLocalServer.setMaxPendingConnections": ('int',), + "QLocalServer.setSocketOptions": ('SocketOptions',), + "QLocalServer.socketOptions": (), + "QLocalServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QLocalSocket: + "QLocalSocket.__init__": ('PySide2.QtCore.QObject',), + "QLocalSocket.abort": (), + "QLocalSocket.bytesAvailable": (), + "QLocalSocket.bytesToWrite": (), + "QLocalSocket.canReadLine": (), + "QLocalSocket.close": (), + "QLocalSocket.connectToServer": [('OpenMode',), ('str', 'OpenMode')], + "QLocalSocket.disconnectFromServer": (), + "QLocalSocket.flush": (), + "QLocalSocket.fullServerName": (), + "QLocalSocket.isSequential": (), + "QLocalSocket.isValid": (), + "QLocalSocket.open": ('OpenMode',), + "QLocalSocket.readBufferSize": (), + "QLocalSocket.readData": ('str', 'int'), + "QLocalSocket.serverName": (), + "QLocalSocket.setReadBufferSize": ('int',), + "QLocalSocket.setServerName": ('str',), + "QLocalSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QLocalSocket.LocalSocketState', 'OpenMode'), + "QLocalSocket.socketDescriptor": (), + "QLocalSocket.state": (), + "QLocalSocket.waitForBytesWritten": ('int',), + "QLocalSocket.waitForConnected": ('int',), + "QLocalSocket.waitForDisconnected": ('int',), + "QLocalSocket.waitForReadyRead": ('int',), + "QLocalSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkAccessManager: + "QNetworkAccessManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkAccessManager.activeConfiguration": (), + "QNetworkAccessManager.cache": (), + "QNetworkAccessManager.clearAccessCache": (), + "QNetworkAccessManager.configuration": (), + "QNetworkAccessManager.connectToHost": ('str', 'int'), + "QNetworkAccessManager.cookieJar": (), + "QNetworkAccessManager.createRequest": ('PySide2.QtNetwork.QNetworkAccessManager.Operation', 'PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), + "QNetworkAccessManager.deleteResource": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.get": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.head": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.networkAccessible": (), + "QNetworkAccessManager.post": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice')], + "QNetworkAccessManager.proxy": (), + "QNetworkAccessManager.proxyFactory": (), + "QNetworkAccessManager.put": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice')], + "QNetworkAccessManager.sendCustomRequest": ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QIODevice'), + "QNetworkAccessManager.setCache": ('PySide2.QtNetwork.QAbstractNetworkCache',), + "QNetworkAccessManager.setConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkAccessManager.setCookieJar": ('PySide2.QtNetwork.QNetworkCookieJar',), + "QNetworkAccessManager.setNetworkAccessible": ('PySide2.QtNetwork.QNetworkAccessManager.NetworkAccessibility',), + "QNetworkAccessManager.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkAccessManager.setProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkAccessManager.supportedSchemes": (), + "QNetworkAccessManager.supportedSchemesImplementation": (), + + # class PySide2.QtNetwork.QNetworkAddressEntry: + "QNetworkAddressEntry.__init__": [(), ('PySide2.QtNetwork.QNetworkAddressEntry',)], + "QNetworkAddressEntry.__copy__": (), + "QNetworkAddressEntry.broadcast": (), + "QNetworkAddressEntry.ip": (), + "QNetworkAddressEntry.netmask": (), + "QNetworkAddressEntry.prefixLength": (), + "QNetworkAddressEntry.setBroadcast": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setIp": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setNetmask": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setPrefixLength": ('int',), + "QNetworkAddressEntry.swap": ('PySide2.QtNetwork.QNetworkAddressEntry',), + + # class PySide2.QtNetwork.QNetworkCacheMetaData: + "QNetworkCacheMetaData.__init__": [(), ('PySide2.QtNetwork.QNetworkCacheMetaData',)], + "QNetworkCacheMetaData.__copy__": (), + "QNetworkCacheMetaData.attributes": (), + "QNetworkCacheMetaData.expirationDate": (), + "QNetworkCacheMetaData.isValid": (), + "QNetworkCacheMetaData.lastModified": (), + "QNetworkCacheMetaData.rawHeaders": (), + "QNetworkCacheMetaData.saveToDisk": (), + "QNetworkCacheMetaData.setAttributes": ('dict',), + "QNetworkCacheMetaData.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setLastModified": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setRawHeaders": ('list',), + "QNetworkCacheMetaData.setSaveToDisk": ('bool',), + "QNetworkCacheMetaData.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCacheMetaData.swap": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkCacheMetaData.url": (), + + # class PySide2.QtNetwork.QNetworkConfiguration: + "QNetworkConfiguration.__init__": [(), ('PySide2.QtNetwork.QNetworkConfiguration',)], + "QNetworkConfiguration.__copy__": (), + "QNetworkConfiguration.bearerType": (), + "QNetworkConfiguration.bearerTypeFamily": (), + "QNetworkConfiguration.bearerTypeName": (), + "QNetworkConfiguration.children": (), + "QNetworkConfiguration.identifier": (), + "QNetworkConfiguration.isRoamingAvailable": (), + "QNetworkConfiguration.isValid": (), + "QNetworkConfiguration.name": (), + "QNetworkConfiguration.purpose": (), + "QNetworkConfiguration.state": (), + "QNetworkConfiguration.swap": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkConfiguration.type": (), + + # class PySide2.QtNetwork.QNetworkConfigurationManager: + "QNetworkConfigurationManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkConfigurationManager.allConfigurations": ('StateFlags',), + "QNetworkConfigurationManager.capabilities": (), + "QNetworkConfigurationManager.configurationFromIdentifier": ('str',), + "QNetworkConfigurationManager.defaultConfiguration": (), + "QNetworkConfigurationManager.isOnline": (), + "QNetworkConfigurationManager.updateConfigurations": (), + + # class PySide2.QtNetwork.QNetworkCookie: + "QNetworkCookie.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkCookie',)], + "QNetworkCookie.__copy__": (), + "QNetworkCookie.domain": (), + "QNetworkCookie.expirationDate": (), + "QNetworkCookie.hasSameIdentifier": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.isHttpOnly": (), + "QNetworkCookie.isSecure": (), + "QNetworkCookie.isSessionCookie": (), + "QNetworkCookie.name": (), + "QNetworkCookie.normalize": ('PySide2.QtCore.QUrl',), + "QNetworkCookie.parseCookies": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.path": (), + "QNetworkCookie.setDomain": ('str',), + "QNetworkCookie.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCookie.setHttpOnly": ('bool',), + "QNetworkCookie.setName": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.setPath": ('str',), + "QNetworkCookie.setSecure": ('bool',), + "QNetworkCookie.setValue": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.swap": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.toRawForm": ('PySide2.QtNetwork.QNetworkCookie.RawForm',), + "QNetworkCookie.value": (), + + # class PySide2.QtNetwork.QNetworkCookieJar: + "QNetworkCookieJar.__init__": ('PySide2.QtCore.QObject',), + "QNetworkCookieJar.allCookies": (), + "QNetworkCookieJar.cookiesForUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCookieJar.deleteCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.insertCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.setAllCookies": ('list',), + "QNetworkCookieJar.setCookiesFromUrl": ('list', 'PySide2.QtCore.QUrl'), + "QNetworkCookieJar.updateCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.validateCookie": ('PySide2.QtNetwork.QNetworkCookie', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtNetwork.QNetworkDiskCache: + "QNetworkDiskCache.__init__": ('PySide2.QtCore.QObject',), + "QNetworkDiskCache.cacheDirectory": (), + "QNetworkDiskCache.cacheSize": (), + "QNetworkDiskCache.clear": (), + "QNetworkDiskCache.data": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.expire": (), + "QNetworkDiskCache.fileMetaData": ('str',), + "QNetworkDiskCache.insert": ('PySide2.QtCore.QIODevice',), + "QNetworkDiskCache.maximumCacheSize": (), + "QNetworkDiskCache.metaData": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkDiskCache.remove": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.setCacheDirectory": ('str',), + "QNetworkDiskCache.setMaximumCacheSize": ('int',), + "QNetworkDiskCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QNetworkInterface: + "QNetworkInterface.__init__": [(), ('PySide2.QtNetwork.QNetworkInterface',)], + "QNetworkInterface.__copy__": (), + "QNetworkInterface.addressEntries": (), + "QNetworkInterface.allAddresses": (), + "QNetworkInterface.allInterfaces": (), + "QNetworkInterface.flags": (), + "QNetworkInterface.hardwareAddress": (), + "QNetworkInterface.humanReadableName": (), + "QNetworkInterface.index": (), + "QNetworkInterface.interfaceFromIndex": ('int',), + "QNetworkInterface.interfaceFromName": ('str',), + "QNetworkInterface.isValid": (), + "QNetworkInterface.name": (), + "QNetworkInterface.swap": ('PySide2.QtNetwork.QNetworkInterface',), + + # class PySide2.QtNetwork.QNetworkProxy: + "QNetworkProxy.__init__": [(), ('PySide2.QtNetwork.QNetworkProxy',), ('PySide2.QtNetwork.QNetworkProxy.ProxyType', 'str', 'int', 'str', 'str')], + "QNetworkProxy.__copy__": (), + "QNetworkProxy.applicationProxy": (), + "QNetworkProxy.capabilities": (), + "QNetworkProxy.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkProxy.hostName": (), + "QNetworkProxy.isCachingProxy": (), + "QNetworkProxy.isTransparentProxy": (), + "QNetworkProxy.password": (), + "QNetworkProxy.port": (), + "QNetworkProxy.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.rawHeaderList": (), + "QNetworkProxy.setApplicationProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.setCapabilities": ('Capabilities',), + "QNetworkProxy.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'PySide2.support.signature.typing.Any'), + "QNetworkProxy.setHostName": ('str',), + "QNetworkProxy.setPassword": ('str',), + "QNetworkProxy.setPort": ('int',), + "QNetworkProxy.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkProxy.setType": ('PySide2.QtNetwork.QNetworkProxy.ProxyType',), + "QNetworkProxy.setUser": ('str',), + "QNetworkProxy.swap": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.type": (), + "QNetworkProxy.user": (), + + # class PySide2.QtNetwork.QNetworkProxyFactory: + "QNetworkProxyFactory.__init__": (), + "QNetworkProxyFactory.proxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.queryProxy": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.setApplicationProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkProxyFactory.setUseSystemConfiguration": ('bool',), + "QNetworkProxyFactory.systemProxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + + # class PySide2.QtNetwork.QNetworkProxyQuery: + "QNetworkProxyQuery.__init__": [(), ('PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkProxyQuery',), ('int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType')], + "QNetworkProxyQuery.__copy__": (), + "QNetworkProxyQuery.localPort": (), + "QNetworkProxyQuery.networkConfiguration": (), + "QNetworkProxyQuery.peerHostName": (), + "QNetworkProxyQuery.peerPort": (), + "QNetworkProxyQuery.protocolTag": (), + "QNetworkProxyQuery.queryType": (), + "QNetworkProxyQuery.setLocalPort": ('int',), + "QNetworkProxyQuery.setNetworkConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkProxyQuery.setPeerHostName": ('str',), + "QNetworkProxyQuery.setPeerPort": ('int',), + "QNetworkProxyQuery.setProtocolTag": ('str',), + "QNetworkProxyQuery.setQueryType": ('PySide2.QtNetwork.QNetworkProxyQuery.QueryType',), + "QNetworkProxyQuery.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkProxyQuery.swap": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyQuery.url": (), + + # class PySide2.QtNetwork.QNetworkReply: + "QNetworkReply.__init__": ('PySide2.QtCore.QObject',), + "QNetworkReply.abort": (), + "QNetworkReply.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute',), + "QNetworkReply.close": (), + "QNetworkReply.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkReply.ignoreSslErrors": (), + "QNetworkReply.isFinished": (), + "QNetworkReply.isRunning": (), + "QNetworkReply.isSequential": (), + "QNetworkReply.manager": (), + "QNetworkReply.operation": (), + "QNetworkReply.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.rawHeaderList": (), + "QNetworkReply.rawHeaderPairs": (), + "QNetworkReply.readBufferSize": (), + "QNetworkReply.request": (), + "QNetworkReply.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'PySide2.support.signature.typing.Any'), + "QNetworkReply.setError": ('PySide2.QtNetwork.QNetworkReply.NetworkError', 'str'), + "QNetworkReply.setFinished": ('bool',), + "QNetworkReply.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'PySide2.support.signature.typing.Any'), + "QNetworkReply.setOperation": ('PySide2.QtNetwork.QNetworkAccessManager.Operation',), + "QNetworkReply.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkReply.setReadBufferSize": ('int',), + "QNetworkReply.setRequest": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkReply.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkReply.url": (), + "QNetworkReply.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkRequest: + "QNetworkRequest.__init__": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QNetworkRequest.__copy__": (), + "QNetworkRequest.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'PySide2.support.signature.typing.Any'), + "QNetworkRequest.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkRequest.maximumRedirectsAllowed": (), + "QNetworkRequest.originatingObject": (), + "QNetworkRequest.priority": (), + "QNetworkRequest.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.rawHeaderList": (), + "QNetworkRequest.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'PySide2.support.signature.typing.Any'), + "QNetworkRequest.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'PySide2.support.signature.typing.Any'), + "QNetworkRequest.setMaximumRedirectsAllowed": ('int',), + "QNetworkRequest.setOriginatingObject": ('PySide2.QtCore.QObject',), + "QNetworkRequest.setPriority": ('PySide2.QtNetwork.QNetworkRequest.Priority',), + "QNetworkRequest.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkRequest.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkRequest.swap": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkRequest.url": (), + + # class PySide2.QtNetwork.QNetworkSession: + "QNetworkSession.__init__": ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QObject'), + "QNetworkSession.accept": (), + "QNetworkSession.activeTime": (), + "QNetworkSession.bytesReceived": (), + "QNetworkSession.bytesWritten": (), + "QNetworkSession.close": (), + "QNetworkSession.configuration": (), + "QNetworkSession.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.errorString": (), + "QNetworkSession.ignore": (), + "QNetworkSession.interface": (), + "QNetworkSession.isOpen": (), + "QNetworkSession.migrate": (), + "QNetworkSession.open": (), + "QNetworkSession.reject": (), + "QNetworkSession.sessionProperty": ('str',), + "QNetworkSession.setSessionProperty": ('str', 'PySide2.support.signature.typing.Any'), + "QNetworkSession.state": (), + "QNetworkSession.stop": (), + "QNetworkSession.usagePolicies": (), + "QNetworkSession.waitForOpened": ('int',), + + # class PySide2.QtNetwork.QSsl: + + # class PySide2.QtNetwork.QTcpServer: + "QTcpServer.__init__": ('PySide2.QtCore.QObject',), + "QTcpServer.addPendingConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QTcpServer.close": (), + "QTcpServer.errorString": (), + "QTcpServer.hasPendingConnections": (), + "QTcpServer.incomingConnection": ('int',), + "QTcpServer.isListening": (), + "QTcpServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QTcpServer.maxPendingConnections": (), + "QTcpServer.nextPendingConnection": (), + "QTcpServer.pauseAccepting": (), + "QTcpServer.proxy": (), + "QTcpServer.resumeAccepting": (), + "QTcpServer.serverAddress": (), + "QTcpServer.serverError": (), + "QTcpServer.serverPort": (), + "QTcpServer.setMaxPendingConnections": ('int',), + "QTcpServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QTcpServer.setSocketDescriptor": ('int',), + "QTcpServer.socketDescriptor": (), + "QTcpServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QTcpSocket: + "QTcpSocket.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtNetwork.QUdpSocket: + "QUdpSocket.__init__": ('PySide2.QtCore.QObject',), + "QUdpSocket.hasPendingDatagrams": (), + "QUdpSocket.joinMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.leaveMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.multicastInterface": (), + "QUdpSocket.pendingDatagramSize": (), + "QUdpSocket.readDatagram": ('str', 'int', 'PySide2.QtNetwork.QHostAddress', 'int'), + "QUdpSocket.setMulticastInterface": ('PySide2.QtNetwork.QNetworkInterface',), + "QUdpSocket.writeDatagram": ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHostAddress', 'int'), + }) + +# Module PySide2.QtTest +if "PySide2.QtTest" in sys.modules: + dict.update({ + + # class PySide2.QtTest.QTest: + "QTest.waitForEvents": (), + "QTest.addColumnInternal": ('int', 'str'), + "QTest.asciiToKey": ('PySide2.support.signature.typing.Union[str, int]',), + "QTest.compare_ptr_helper": ('int', 'int', 'str', 'str', 'str', 'int'), + "QTest.compare_string_helper": ('str', 'str', 'str', 'str', 'str', 'int'), + "QTest.currentAppName": (), + "QTest.currentDataTag": (), + "QTest.currentTestFailed": (), + "QTest.currentTestFunction": (), + "QTest.ignoreMessage": ('PySide2.QtCore.QtMsgType', 'str'), + "QTest.keyClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyClicks": ('PySide2.QtWidgets.QWidget', 'str', 'KeyboardModifiers', 'int'), + "QTest.keyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyPress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyToAscii": ('PySide2.QtCore.Qt.Key',), + "QTest.mouseClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseDClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseEvent": [('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseMove": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mousePress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.qElementData": ('str', 'int'), + "QTest.qExpectFail": ('str', 'str', 'PySide2.QtTest.QTest.TestFailMode', 'str', 'int'), + "QTest.qFindTestData": ['int', 'str', 'str', 'str'], + "QTest.qGlobalData": ('str', 'int'), + "QTest.qSkip": ('str', 'str', 'int'), + "QTest.qWaitForWindowActive": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.qWaitForWindowExposed": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.sendKeyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'str', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'str', 'KeyboardModifiers', 'int')], + "QTest.setBenchmarkResult": ('float', 'PySide2.QtTest.QTest.QBenchmarkMetric'), + "QTest.setMainSourcePath": ('str', 'str'), + "QTest.simulateEvent": [('PySide2.QtGui.QWindow', 'bool', 'int', 'KeyboardModifiers', 'str', 'bool', 'int'), ('PySide2.QtWidgets.QWidget', 'bool', 'int', 'KeyboardModifiers', 'str', 'bool', 'int')], + "QTest.testObject": (), + "QTest.toPrettyCString": ('str', 'int'), + "QTest.touchEvent": [('PySide2.QtGui.QWindow', 'PySide2.QtGui.QTouchDevice', 'bool'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QTouchDevice', 'bool')], + }) + +# Module PySide2.QtConcurrent +if "PySide2.QtConcurrent" in sys.modules: + dict.update({ + + # class PySide2.QtConcurrent.QtConcurrent: + }) + +# Module PySide2.QtX11Extras +if "PySide2.QtX11Extras" in sys.modules: + dict.update({ + + # class PySide2.QtX11Extras.QX11Info: + "QX11Info.appUserTime": (), + "QX11Info.appDpiX": ('int',), + "QX11Info.appDpiY": ('int',), + "QX11Info.appRootWindow": ('int',), + "QX11Info.appScreen": (), + "QX11Info.appTime": (), + "QX11Info.getTimestamp": (), + "QX11Info.isPlatformX11": (), + "QX11Info.nextStartupId": (), + "QX11Info.setAppTime": ('int',), + "QX11Info.setAppUserTime": ('int',), + "QX11Info.setNextStartupId": ('PySide2.QtCore.QByteArray',), + }) + +# Module PySide2.QtXml +if "PySide2.QtXml" in sys.modules: + dict.update({ + + # class PySide2.QtXml.QDomAttr: + "QDomAttr.__init__": [(), ('PySide2.QtXml.QDomAttr',)], + "QDomAttr.__copy__": (), + "QDomAttr.name": (), + "QDomAttr.nodeType": (), + "QDomAttr.ownerElement": (), + "QDomAttr.setValue": ('str',), + "QDomAttr.specified": (), + "QDomAttr.value": (), + + # class PySide2.QtXml.QDomCDATASection: + "QDomCDATASection.__init__": [(), ('PySide2.QtXml.QDomCDATASection',)], + "QDomCDATASection.__copy__": (), + "QDomCDATASection.nodeType": (), + + # class PySide2.QtXml.QDomCharacterData: + "QDomCharacterData.__init__": [(), ('PySide2.QtXml.QDomCharacterData',)], + "QDomCharacterData.__copy__": (), + "QDomCharacterData.appendData": ('str',), + "QDomCharacterData.data": (), + "QDomCharacterData.deleteData": ('int', 'int'), + "QDomCharacterData.insertData": ('int', 'str'), + "QDomCharacterData.length": (), + "QDomCharacterData.nodeType": (), + "QDomCharacterData.replaceData": ('int', 'int', 'str'), + "QDomCharacterData.setData": ('str',), + "QDomCharacterData.substringData": ('int', 'int'), + + # class PySide2.QtXml.QDomComment: + "QDomComment.__init__": [(), ('PySide2.QtXml.QDomComment',)], + "QDomComment.__copy__": (), + "QDomComment.nodeType": (), + + # class PySide2.QtXml.QDomDocument: + "QDomDocument.__init__": [(), ('PySide2.QtXml.QDomDocument',), ('PySide2.QtXml.QDomDocumentType',), ('str',)], + "QDomDocument.__copy__": (), + "QDomDocument.createAttribute": ('str',), + "QDomDocument.createAttributeNS": ('str', 'str'), + "QDomDocument.createCDATASection": ('str',), + "QDomDocument.createComment": ('str',), + "QDomDocument.createDocumentFragment": (), + "QDomDocument.createElement": ('str',), + "QDomDocument.createElementNS": ('str', 'str'), + "QDomDocument.createEntityReference": ('str',), + "QDomDocument.createProcessingInstruction": ('str', 'str'), + "QDomDocument.createTextNode": ('str',), + "QDomDocument.doctype": (), + "QDomDocument.documentElement": (), + "QDomDocument.elementById": ('str',), + "QDomDocument.elementsByTagName": ('str',), + "QDomDocument.elementsByTagNameNS": ('str', 'str'), + "QDomDocument.implementation": (), + "QDomDocument.importNode": ('PySide2.QtXml.QDomNode', 'bool'), + "QDomDocument.nodeType": (), + "QDomDocument.setContent": [('PySide2.QtCore.QByteArray', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QByteArray', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'PySide2.QtXml.QXmlReader', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'bool', 'str', 'int', 'int'), ('str', 'bool', 'str', 'int', 'int'), ('str', 'str', 'int', 'int')], + "QDomDocument.toByteArray": ('int',), + "QDomDocument.toString": ('int',), + + # class PySide2.QtXml.QDomDocumentFragment: + "QDomDocumentFragment.__init__": [(), ('PySide2.QtXml.QDomDocumentFragment',)], + "QDomDocumentFragment.__copy__": (), + "QDomDocumentFragment.nodeType": (), + + # class PySide2.QtXml.QDomDocumentType: + "QDomDocumentType.__init__": [(), ('PySide2.QtXml.QDomDocumentType',)], + "QDomDocumentType.__copy__": (), + "QDomDocumentType.entities": (), + "QDomDocumentType.internalSubset": (), + "QDomDocumentType.name": (), + "QDomDocumentType.nodeType": (), + "QDomDocumentType.notations": (), + "QDomDocumentType.publicId": (), + "QDomDocumentType.systemId": (), + + # class PySide2.QtXml.QDomElement: + "QDomElement.__init__": [(), ('PySide2.QtXml.QDomElement',)], + "QDomElement.__copy__": (), + "QDomElement.attribute": ('str', 'str'), + "QDomElement.attributeNS": ('str', 'str', 'str'), + "QDomElement.attributeNode": ('str',), + "QDomElement.attributeNodeNS": ('str', 'str'), + "QDomElement.attributes": (), + "QDomElement.elementsByTagName": ('str',), + "QDomElement.elementsByTagNameNS": ('str', 'str'), + "QDomElement.hasAttribute": ('str',), + "QDomElement.hasAttributeNS": ('str', 'str'), + "QDomElement.nodeType": (), + "QDomElement.removeAttribute": ('str',), + "QDomElement.removeAttributeNS": ('str', 'str'), + "QDomElement.removeAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttribute": [('str', 'float'), ('str', 'int'), ('str', 'str')], + "QDomElement.setAttributeNS": [('str', 'str', 'float'), ('str', 'str', 'int'), ('str', 'str', 'str')], + "QDomElement.setAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttributeNodeNS": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setTagName": ('str',), + "QDomElement.tagName": (), + "QDomElement.text": (), + + # class PySide2.QtXml.QDomEntity: + "QDomEntity.__init__": [(), ('PySide2.QtXml.QDomEntity',)], + "QDomEntity.__copy__": (), + "QDomEntity.nodeType": (), + "QDomEntity.notationName": (), + "QDomEntity.publicId": (), + "QDomEntity.systemId": (), + + # class PySide2.QtXml.QDomEntityReference: + "QDomEntityReference.__init__": [(), ('PySide2.QtXml.QDomEntityReference',)], + "QDomEntityReference.__copy__": (), + "QDomEntityReference.nodeType": (), + + # class PySide2.QtXml.QDomImplementation: + "QDomImplementation.__init__": [(), ('PySide2.QtXml.QDomImplementation',)], + "QDomImplementation.__copy__": (), + "QDomImplementation.createDocument": ('str', 'str', 'PySide2.QtXml.QDomDocumentType'), + "QDomImplementation.createDocumentType": ('str', 'str', 'str'), + "QDomImplementation.hasFeature": ('str', 'str'), + "QDomImplementation.invalidDataPolicy": (), + "QDomImplementation.isNull": (), + "QDomImplementation.setInvalidDataPolicy": ('PySide2.QtXml.QDomImplementation.InvalidDataPolicy',), + + # class PySide2.QtXml.QDomNamedNodeMap: + "QDomNamedNodeMap.__init__": [(), ('PySide2.QtXml.QDomNamedNodeMap',)], + "QDomNamedNodeMap.__copy__": (), + "QDomNamedNodeMap.contains": ('str',), + "QDomNamedNodeMap.count": (), + "QDomNamedNodeMap.isEmpty": (), + "QDomNamedNodeMap.item": ('int',), + "QDomNamedNodeMap.length": (), + "QDomNamedNodeMap.namedItem": ('str',), + "QDomNamedNodeMap.namedItemNS": ('str', 'str'), + "QDomNamedNodeMap.removeNamedItem": ('str',), + "QDomNamedNodeMap.removeNamedItemNS": ('str', 'str'), + "QDomNamedNodeMap.setNamedItem": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.setNamedItemNS": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.size": (), + + # class PySide2.QtXml.QDomNode: + "QDomNode.__init__": [(), ('PySide2.QtXml.QDomNode',)], + "QDomNode.__copy__": (), + "QDomNode.appendChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.attributes": (), + "QDomNode.childNodes": (), + "QDomNode.clear": (), + "QDomNode.cloneNode": ('bool',), + "QDomNode.columnNumber": (), + "QDomNode.firstChild": (), + "QDomNode.firstChildElement": ('str',), + "QDomNode.hasAttributes": (), + "QDomNode.hasChildNodes": (), + "QDomNode.insertAfter": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.insertBefore": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.isAttr": (), + "QDomNode.isCDATASection": (), + "QDomNode.isCharacterData": (), + "QDomNode.isComment": (), + "QDomNode.isDocument": (), + "QDomNode.isDocumentFragment": (), + "QDomNode.isDocumentType": (), + "QDomNode.isElement": (), + "QDomNode.isEntity": (), + "QDomNode.isEntityReference": (), + "QDomNode.isNotation": (), + "QDomNode.isNull": (), + "QDomNode.isProcessingInstruction": (), + "QDomNode.isSupported": ('str', 'str'), + "QDomNode.isText": (), + "QDomNode.lastChild": (), + "QDomNode.lastChildElement": ('str',), + "QDomNode.lineNumber": (), + "QDomNode.localName": (), + "QDomNode.namedItem": ('str',), + "QDomNode.namespaceURI": (), + "QDomNode.nextSibling": (), + "QDomNode.nextSiblingElement": ('str',), + "QDomNode.nodeName": (), + "QDomNode.nodeType": (), + "QDomNode.nodeValue": (), + "QDomNode.normalize": (), + "QDomNode.ownerDocument": (), + "QDomNode.parentNode": (), + "QDomNode.prefix": (), + "QDomNode.previousSibling": (), + "QDomNode.previousSiblingElement": ('str',), + "QDomNode.removeChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.replaceChild": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.save": ('PySide2.QtCore.QTextStream', 'int', 'PySide2.QtXml.QDomNode.EncodingPolicy'), + "QDomNode.setNodeValue": ('str',), + "QDomNode.setPrefix": ('str',), + "QDomNode.toAttr": (), + "QDomNode.toCDATASection": (), + "QDomNode.toCharacterData": (), + "QDomNode.toComment": (), + "QDomNode.toDocument": (), + "QDomNode.toDocumentFragment": (), + "QDomNode.toDocumentType": (), + "QDomNode.toElement": (), + "QDomNode.toEntity": (), + "QDomNode.toEntityReference": (), + "QDomNode.toNotation": (), + "QDomNode.toProcessingInstruction": (), + "QDomNode.toText": (), + + # class PySide2.QtXml.QDomNodeList: + "QDomNodeList.__init__": [(), ('PySide2.QtXml.QDomNodeList',)], + "QDomNodeList.__copy__": (), + "QDomNodeList.at": ('int',), + "QDomNodeList.count": (), + "QDomNodeList.isEmpty": (), + "QDomNodeList.item": ('int',), + "QDomNodeList.length": (), + "QDomNodeList.size": (), + + # class PySide2.QtXml.QDomNotation: + "QDomNotation.__init__": [(), ('PySide2.QtXml.QDomNotation',)], + "QDomNotation.__copy__": (), + "QDomNotation.nodeType": (), + "QDomNotation.publicId": (), + "QDomNotation.systemId": (), + + # class PySide2.QtXml.QDomProcessingInstruction: + "QDomProcessingInstruction.__init__": [(), ('PySide2.QtXml.QDomProcessingInstruction',)], + "QDomProcessingInstruction.__copy__": (), + "QDomProcessingInstruction.data": (), + "QDomProcessingInstruction.nodeType": (), + "QDomProcessingInstruction.setData": ('str',), + "QDomProcessingInstruction.target": (), + + # class PySide2.QtXml.QDomText: + "QDomText.__init__": [(), ('PySide2.QtXml.QDomText',)], + "QDomText.__copy__": (), + "QDomText.nodeType": (), + "QDomText.splitText": ('int',), + + # class PySide2.QtXml.QXmlAttributes: + "QXmlAttributes.__init__": [(), ('PySide2.QtXml.QXmlAttributes',)], + "QXmlAttributes.__copy__": (), + "QXmlAttributes.append": ('str', 'str', 'str', 'str'), + "QXmlAttributes.clear": (), + "QXmlAttributes.count": (), + "QXmlAttributes.index": [('str',), ('str', 'str')], + "QXmlAttributes.length": (), + "QXmlAttributes.localName": ('int',), + "QXmlAttributes.qName": ('int',), + "QXmlAttributes.type": [('int',), ('str',), ('str', 'str')], + "QXmlAttributes.uri": ('int',), + "QXmlAttributes.value": [('int',), ('str',), ('str', 'str')], + + # class PySide2.QtXml.QXmlContentHandler: + "QXmlContentHandler.__init__": (), + "QXmlContentHandler.characters": ('str',), + "QXmlContentHandler.endDocument": (), + "QXmlContentHandler.endElement": ('str', 'str', 'str'), + "QXmlContentHandler.endPrefixMapping": ('str',), + "QXmlContentHandler.errorString": (), + "QXmlContentHandler.ignorableWhitespace": ('str',), + "QXmlContentHandler.processingInstruction": ('str', 'str'), + "QXmlContentHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlContentHandler.skippedEntity": ('str',), + "QXmlContentHandler.startDocument": (), + "QXmlContentHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlContentHandler.startPrefixMapping": ('str', 'str'), + + # class PySide2.QtXml.QXmlDTDHandler: + "QXmlDTDHandler.__init__": (), + "QXmlDTDHandler.errorString": (), + "QXmlDTDHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDTDHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + + # class PySide2.QtXml.QXmlDeclHandler: + "QXmlDeclHandler.__init__": (), + "QXmlDeclHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDeclHandler.errorString": (), + "QXmlDeclHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDeclHandler.internalEntityDecl": ('str', 'str'), + + # class PySide2.QtXml.QXmlDefaultHandler: + "QXmlDefaultHandler.__init__": (), + "QXmlDefaultHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDefaultHandler.characters": ('str',), + "QXmlDefaultHandler.comment": ('str',), + "QXmlDefaultHandler.endCDATA": (), + "QXmlDefaultHandler.endDTD": (), + "QXmlDefaultHandler.endDocument": (), + "QXmlDefaultHandler.endElement": ('str', 'str', 'str'), + "QXmlDefaultHandler.endEntity": ('str',), + "QXmlDefaultHandler.endPrefixMapping": ('str',), + "QXmlDefaultHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.errorString": (), + "QXmlDefaultHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.ignorableWhitespace": ('str',), + "QXmlDefaultHandler.internalEntityDecl": ('str', 'str'), + "QXmlDefaultHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.processingInstruction": ('str', 'str'), + "QXmlDefaultHandler.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + "QXmlDefaultHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlDefaultHandler.skippedEntity": ('str',), + "QXmlDefaultHandler.startCDATA": (), + "QXmlDefaultHandler.startDTD": ('str', 'str', 'str'), + "QXmlDefaultHandler.startDocument": (), + "QXmlDefaultHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlDefaultHandler.startEntity": ('str',), + "QXmlDefaultHandler.startPrefixMapping": ('str', 'str'), + "QXmlDefaultHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + "QXmlDefaultHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlEntityResolver: + "QXmlEntityResolver.__init__": (), + "QXmlEntityResolver.errorString": (), + "QXmlEntityResolver.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + + # class PySide2.QtXml.QXmlErrorHandler: + "QXmlErrorHandler.__init__": (), + "QXmlErrorHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.errorString": (), + "QXmlErrorHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlInputSource: + "QXmlInputSource.__init__": [(), ('PySide2.QtCore.QIODevice',)], + "QXmlInputSource.data": (), + "QXmlInputSource.fetchData": (), + "QXmlInputSource.fromRawData": ('PySide2.QtCore.QByteArray', 'bool'), + "QXmlInputSource.next": (), + "QXmlInputSource.reset": (), + "QXmlInputSource.setData": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtXml.QXmlLexicalHandler: + "QXmlLexicalHandler.__init__": (), + "QXmlLexicalHandler.comment": ('str',), + "QXmlLexicalHandler.endCDATA": (), + "QXmlLexicalHandler.endDTD": (), + "QXmlLexicalHandler.endEntity": ('str',), + "QXmlLexicalHandler.errorString": (), + "QXmlLexicalHandler.startCDATA": (), + "QXmlLexicalHandler.startDTD": ('str', 'str', 'str'), + "QXmlLexicalHandler.startEntity": ('str',), + + # class PySide2.QtXml.QXmlLocator: + "QXmlLocator.__init__": (), + "QXmlLocator.columnNumber": (), + "QXmlLocator.lineNumber": (), + + # class PySide2.QtXml.QXmlNamespaceSupport: + "QXmlNamespaceSupport.__init__": (), + "QXmlNamespaceSupport.popContext": (), + "QXmlNamespaceSupport.prefix": ('str',), + "QXmlNamespaceSupport.prefixes": [(), ('str',)], + "QXmlNamespaceSupport.processName": ('str', 'bool', 'str', 'str'), + "QXmlNamespaceSupport.pushContext": (), + "QXmlNamespaceSupport.reset": (), + "QXmlNamespaceSupport.setPrefix": ('str', 'str'), + "QXmlNamespaceSupport.splitName": ('str', 'str', 'str'), + "QXmlNamespaceSupport.uri": ('str',), + + # class PySide2.QtXml.QXmlParseException: + "QXmlParseException.__init__": [('PySide2.QtXml.QXmlParseException',), ('str', 'int', 'int', 'str', 'str')], + "QXmlParseException.columnNumber": (), + "QXmlParseException.lineNumber": (), + "QXmlParseException.message": (), + "QXmlParseException.publicId": (), + "QXmlParseException.systemId": (), + + # class PySide2.QtXml.QXmlReader: + "QXmlReader.__init__": (), + "QXmlReader.DTDHandler": (), + "QXmlReader.contentHandler": (), + "QXmlReader.declHandler": (), + "QXmlReader.entityResolver": (), + "QXmlReader.errorHandler": (), + "QXmlReader.feature": ('str', 'bool'), + "QXmlReader.hasFeature": ('str',), + "QXmlReader.hasProperty": ('str',), + "QXmlReader.lexicalHandler": (), + "QXmlReader.parse": ['PySide2.QtXml.QXmlInputSource'], + "QXmlReader.property": ('str', 'bool'), + "QXmlReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlReader.setFeature": ('str', 'bool'), + "QXmlReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlReader.setProperty": ('str', 'int'), + + # class PySide2.QtXml.QXmlSimpleReader: + "QXmlSimpleReader.__init__": (), + "QXmlSimpleReader.DTDHandler": (), + "QXmlSimpleReader.contentHandler": (), + "QXmlSimpleReader.declHandler": (), + "QXmlSimpleReader.entityResolver": (), + "QXmlSimpleReader.errorHandler": (), + "QXmlSimpleReader.feature": ('str', 'bool'), + "QXmlSimpleReader.hasFeature": ('str',), + "QXmlSimpleReader.hasProperty": ('str',), + "QXmlSimpleReader.lexicalHandler": (), + "QXmlSimpleReader.parse": [('PySide2.QtXml.QXmlInputSource',), ('PySide2.QtXml.QXmlInputSource', 'bool')], + "QXmlSimpleReader.parseContinue": (), + "QXmlSimpleReader.property": ('str', 'bool'), + "QXmlSimpleReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlSimpleReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlSimpleReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlSimpleReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlSimpleReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlSimpleReader.setFeature": ('str', 'bool'), + "QXmlSimpleReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlSimpleReader.setProperty": ('str', 'int'), + }) + +# Module PySide2.QtXmlPatterns +if "PySide2.QtXmlPatterns" in sys.modules: + dict.update({ + + # class PySide2.QtXmlPatterns.QAbstractMessageHandler: + "QAbstractMessageHandler.__init__": ('PySide2.QtCore.QObject',), + "QAbstractMessageHandler.handleMessage": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + "QAbstractMessageHandler.message": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + + # class PySide2.QtXmlPatterns.QAbstractUriResolver: + "QAbstractUriResolver.__init__": ('PySide2.QtCore.QObject',), + "QAbstractUriResolver.resolve": ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtXmlPatterns.QAbstractXmlNodeModel: + "QAbstractXmlNodeModel.__init__": (), + "QAbstractXmlNodeModel.attributes": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.baseUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.compareOrder": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.createIndex": [('int',), ('int', 'int')], + "QAbstractXmlNodeModel.documentUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.elementById": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.isDeepEqual": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.kind": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.name": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceBindings": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceForPrefix": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'Missing(PySide2.QtXmlPatterns.QXmlName.PrefixCode)'), + "QAbstractXmlNodeModel.nextFromSimpleAxis": ('PySide2.QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.nodesByIdref": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.root": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.sendNamespaces": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QAbstractXmlReceiver'), + "QAbstractXmlNodeModel.sourceLocation": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.stringValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.typedValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + + # class PySide2.QtXmlPatterns.QAbstractXmlReceiver: + "QAbstractXmlReceiver.__init__": (), + "QAbstractXmlReceiver.atomicValue": ('PySide2.support.signature.typing.Any',), + "QAbstractXmlReceiver.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.characters": ('str',), + "QAbstractXmlReceiver.comment": ('str',), + "QAbstractXmlReceiver.endDocument": (), + "QAbstractXmlReceiver.endElement": (), + "QAbstractXmlReceiver.endOfSequence": (), + "QAbstractXmlReceiver.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.startDocument": (), + "QAbstractXmlReceiver.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.startOfSequence": (), + "QAbstractXmlReceiver.whitespaceOnly": ('str',), + + # class PySide2.QtXmlPatterns.QSourceLocation: + "QSourceLocation.__init__": [(), ('PySide2.QtCore.QUrl', 'int', 'int'), ('PySide2.QtXmlPatterns.QSourceLocation',)], + "QSourceLocation.__copy__": (), + "QSourceLocation.column": (), + "QSourceLocation.isNull": (), + "QSourceLocation.line": (), + "QSourceLocation.setColumn": ('int',), + "QSourceLocation.setLine": ('int',), + "QSourceLocation.setUri": ('PySide2.QtCore.QUrl',), + "QSourceLocation.uri": (), + + # class PySide2.QtXmlPatterns.QXmlFormatter: + "QXmlFormatter.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlFormatter.atomicValue": ('PySide2.support.signature.typing.Any',), + "QXmlFormatter.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.characters": ('str',), + "QXmlFormatter.comment": ('str',), + "QXmlFormatter.endDocument": (), + "QXmlFormatter.endElement": (), + "QXmlFormatter.endOfSequence": (), + "QXmlFormatter.indentationDepth": (), + "QXmlFormatter.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.setIndentationDepth": ('int',), + "QXmlFormatter.startDocument": (), + "QXmlFormatter.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlFormatter.startOfSequence": (), + + # class PySide2.QtXmlPatterns.QXmlItem: + "QXmlItem.__init__": [(), ('PySide2.QtXmlPatterns.QXmlItem',), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), ('PySide2.support.signature.typing.Any',)], + "QXmlItem.__copy__": (), + "QXmlItem.isAtomicValue": (), + "QXmlItem.isNode": (), + "QXmlItem.isNull": (), + "QXmlItem.toAtomicValue": (), + "QXmlItem.toNodeModelIndex": (), + + # class PySide2.QtXmlPatterns.QXmlName: + "QXmlName.__init__": [(), ('PySide2.QtXmlPatterns.QXmlName',), ('PySide2.QtXmlPatterns.QXmlNamePool', 'str', 'str', 'str')], + "QXmlName.__copy__": (), + "QXmlName.fromClarkName": ('str', 'PySide2.QtXmlPatterns.QXmlNamePool'), + "QXmlName.isNCName": ('str',), + "QXmlName.isNull": (), + "QXmlName.localName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.namespaceUri": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.prefix": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.toClarkName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + + # class PySide2.QtXmlPatterns.QXmlNamePool: + "QXmlNamePool.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',)], + "QXmlNamePool.__copy__": (), + + # class PySide2.QtXmlPatterns.QXmlNodeModelIndex: + "QXmlNodeModelIndex.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlNodeModelIndex.__copy__": (), + "QXmlNodeModelIndex.additionalData": (), + "QXmlNodeModelIndex.data": (), + "QXmlNodeModelIndex.internalPointer": (), + "QXmlNodeModelIndex.isNull": (), + "QXmlNodeModelIndex.model": (), + + # class PySide2.QtXmlPatterns.QXmlQuery: + "QXmlQuery.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',), ('PySide2.QtXmlPatterns.QXmlQuery',), ('PySide2.QtXmlPatterns.QXmlQuery.QueryLanguage', 'PySide2.QtXmlPatterns.QXmlNamePool')], + "QXmlQuery.__copy__": (), + "QXmlQuery.bindVariable": [('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtCore.QIODevice'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlItem'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlQuery'), ('str', 'PySide2.QtCore.QIODevice'), ('str', 'PySide2.QtXmlPatterns.QXmlItem'), ('str', 'PySide2.QtXmlPatterns.QXmlQuery')], + "QXmlQuery.evaluateTo": [('PySide2.QtCore.QIODevice',), ('PySide2.QtXmlPatterns.QAbstractXmlReceiver',), ('PySide2.QtXmlPatterns.QXmlResultItems',)], + "QXmlQuery.initialTemplateName": (), + "QXmlQuery.isValid": (), + "QXmlQuery.messageHandler": (), + "QXmlQuery.namePool": (), + "QXmlQuery.queryLanguage": (), + "QXmlQuery.setFocus": [('PySide2.QtCore.QIODevice',), ('PySide2.QtCore.QUrl',), ('PySide2.QtXmlPatterns.QXmlItem',), ('str',)], + "QXmlQuery.setInitialTemplateName": [('PySide2.QtXmlPatterns.QXmlName',), ('str',)], + "QXmlQuery.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlQuery.setQuery": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), ('str', 'PySide2.QtCore.QUrl')], + "QXmlQuery.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlQuery.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlResultItems: + "QXmlResultItems.__init__": (), + "QXmlResultItems.current": (), + "QXmlResultItems.hasError": (), + "QXmlResultItems.next": (), + + # class PySide2.QtXmlPatterns.QXmlSchema: + "QXmlSchema.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchema.documentUri": (), + "QXmlSchema.isValid": (), + "QXmlSchema.load": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + "QXmlSchema.messageHandler": (), + "QXmlSchema.namePool": (), + "QXmlSchema.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchema.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchema.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlSchemaValidator: + "QXmlSchemaValidator.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchemaValidator.messageHandler": (), + "QXmlSchemaValidator.namePool": (), + "QXmlSchemaValidator.schema": (), + "QXmlSchemaValidator.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchemaValidator.setSchema": ('PySide2.QtXmlPatterns.QXmlSchema',), + "QXmlSchemaValidator.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchemaValidator.uriResolver": (), + "QXmlSchemaValidator.validate": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + + # class PySide2.QtXmlPatterns.QXmlSerializer: + "QXmlSerializer.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlSerializer.atomicValue": ('PySide2.support.signature.typing.Any',), + "QXmlSerializer.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.characters": ('str',), + "QXmlSerializer.codec": (), + "QXmlSerializer.comment": ('str',), + "QXmlSerializer.endDocument": (), + "QXmlSerializer.endElement": (), + "QXmlSerializer.endOfSequence": (), + "QXmlSerializer.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.outputDevice": (), + "QXmlSerializer.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.setCodec": ('PySide2.QtCore.QTextCodec',), + "QXmlSerializer.startDocument": (), + "QXmlSerializer.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.startOfSequence": (), + }) + +# Module PySide2.QtHelp +if "PySide2.QtHelp" in sys.modules: + dict.update({ + + # class PySide2.QtHelp.QHelpContentItem: + "QHelpContentItem.parent": (), + "QHelpContentItem.__copy__": (), + "QHelpContentItem.child": ('int',), + "QHelpContentItem.childCount": (), + "QHelpContentItem.childPosition": ('PySide2.QtHelp.QHelpContentItem',), + "QHelpContentItem.row": (), + "QHelpContentItem.title": (), + "QHelpContentItem.url": (), + + # class PySide2.QtHelp.QHelpContentModel: + "QHelpContentModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.contentItemAt": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.createContents": ('str',), + "QHelpContentModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QHelpContentModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QHelpContentModel.isCreatingContents": (), + "QHelpContentModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QHelpContentModel.rowCount": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtHelp.QHelpContentWidget: + "QHelpContentWidget.indexOf": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtHelp.QHelpEngine: + "QHelpEngine.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngine.contentModel": (), + "QHelpEngine.contentWidget": (), + "QHelpEngine.indexModel": (), + "QHelpEngine.indexWidget": (), + "QHelpEngine.searchEngine": (), + + # class PySide2.QtHelp.QHelpEngineCore: + "QHelpEngineCore.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngineCore.addCustomFilter": ('str', 'PySide2.support.signature.typing.List'), + "QHelpEngineCore.autoSaveFilter": (), + "QHelpEngineCore.collectionFile": (), + "QHelpEngineCore.copyCollectionFile": ('str',), + "QHelpEngineCore.currentFilter": (), + "QHelpEngineCore.customFilters": (), + "QHelpEngineCore.customValue": ('str', 'PySide2.support.signature.typing.Any'), + "QHelpEngineCore.documentationFileName": ('str',), + "QHelpEngineCore.error": (), + "QHelpEngineCore.fileData": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.files": ('str', 'PySide2.support.signature.typing.List', 'str'), + "QHelpEngineCore.filterAttributeSets": ('str',), + "QHelpEngineCore.filterAttributes": [(), ('str',)], + "QHelpEngineCore.findFile": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.linksForIdentifier": ('str',), + "QHelpEngineCore.metaData": ('str', 'str'), + "QHelpEngineCore.namespaceName": ('str',), + "QHelpEngineCore.registerDocumentation": ('str',), + "QHelpEngineCore.registeredDocumentations": (), + "QHelpEngineCore.removeCustomFilter": ('str',), + "QHelpEngineCore.removeCustomValue": ('str',), + "QHelpEngineCore.setAutoSaveFilter": ('bool',), + "QHelpEngineCore.setCollectionFile": ('str',), + "QHelpEngineCore.setCurrentFilter": ('str',), + "QHelpEngineCore.setCustomValue": ('str', 'PySide2.support.signature.typing.Any'), + "QHelpEngineCore.setupData": (), + "QHelpEngineCore.unregisterDocumentation": ('str',), + + # class PySide2.QtHelp.QHelpIndexModel: + "QHelpIndexModel.linksForKeyword": ('str',), + "QHelpIndexModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object'), ('str',)], + "QHelpIndexModel.filter": ('str', 'str'), + "QHelpIndexModel.isCreatingIndex": (), + + # class PySide2.QtHelp.QHelpIndexWidget: + "QHelpIndexWidget.activateCurrentItem": (), + "QHelpIndexWidget.filterIndices": ('str', 'str'), + + # class PySide2.QtHelp.QHelpSearchEngine: + "QHelpSearchEngine.__init__": ('PySide2.QtHelp.QHelpEngineCore', 'PySide2.QtCore.QObject'), + "QHelpSearchEngine.cancelIndexing": (), + "QHelpSearchEngine.cancelSearching": (), + "QHelpSearchEngine.hitCount": (), + "QHelpSearchEngine.hits": ('int', 'int'), + "QHelpSearchEngine.hitsCount": (), + "QHelpSearchEngine.query": (), + "QHelpSearchEngine.queryWidget": (), + "QHelpSearchEngine.reindexDocumentation": (), + "QHelpSearchEngine.resultWidget": (), + "QHelpSearchEngine.search": ('list',), + + # class PySide2.QtHelp.QHelpSearchQuery: + "QHelpSearchQuery.__init__": [(), ('PySide2.QtHelp.QHelpSearchQuery',), ('PySide2.QtHelp.QHelpSearchQuery.FieldName', 'PySide2.support.signature.typing.List')], + "QHelpSearchQuery.__copy__": (), + + # class PySide2.QtHelp.QHelpSearchQueryWidget: + "QHelpSearchQueryWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QHelpSearchQueryWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchQueryWidget.collapseExtendedSearch": (), + "QHelpSearchQueryWidget.expandExtendedSearch": (), + "QHelpSearchQueryWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QHelpSearchQueryWidget.isCompactMode": (), + "QHelpSearchQueryWidget.query": (), + "QHelpSearchQueryWidget.setCompactMode": ('bool',), + "QHelpSearchQueryWidget.setQuery": ('list',), + + # class PySide2.QtHelp.QHelpSearchResultWidget: + "QHelpSearchResultWidget.linkAt": ('PySide2.QtCore.QPoint',), + "QHelpSearchResultWidget.changeEvent": ('PySide2.QtCore.QEvent',), + }) + +# Module PySide2.QtMultimedia +if "PySide2.QtMultimedia" in sys.modules: + dict.update({ + + # class PySide2.QtMultimedia.QAbstractAudioDeviceInfo: + "QAbstractAudioDeviceInfo.__init__": (), + "QAbstractAudioDeviceInfo.deviceName": (), + "QAbstractAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioDeviceInfo.preferredFormat": (), + "QAbstractAudioDeviceInfo.supportedByteOrders": (), + "QAbstractAudioDeviceInfo.supportedChannelCounts": (), + "QAbstractAudioDeviceInfo.supportedCodecs": (), + "QAbstractAudioDeviceInfo.supportedSampleRates": (), + "QAbstractAudioDeviceInfo.supportedSampleSizes": (), + "QAbstractAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAbstractAudioInput: + "QAbstractAudioInput.__init__": (), + "QAbstractAudioInput.bufferSize": (), + "QAbstractAudioInput.bytesReady": (), + "QAbstractAudioInput.elapsedUSecs": (), + "QAbstractAudioInput.error": (), + "QAbstractAudioInput.format": (), + "QAbstractAudioInput.notifyInterval": (), + "QAbstractAudioInput.periodSize": (), + "QAbstractAudioInput.processedUSecs": (), + "QAbstractAudioInput.reset": (), + "QAbstractAudioInput.resume": (), + "QAbstractAudioInput.setBufferSize": ('int',), + "QAbstractAudioInput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioInput.setNotifyInterval": ('int',), + "QAbstractAudioInput.setVolume": ('float',), + "QAbstractAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioInput.state": (), + "QAbstractAudioInput.stop": (), + "QAbstractAudioInput.suspend": (), + "QAbstractAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAbstractAudioOutput: + "QAbstractAudioOutput.__init__": (), + "QAbstractAudioOutput.bufferSize": (), + "QAbstractAudioOutput.bytesFree": (), + "QAbstractAudioOutput.category": (), + "QAbstractAudioOutput.elapsedUSecs": (), + "QAbstractAudioOutput.error": (), + "QAbstractAudioOutput.format": (), + "QAbstractAudioOutput.notifyInterval": (), + "QAbstractAudioOutput.periodSize": (), + "QAbstractAudioOutput.processedUSecs": (), + "QAbstractAudioOutput.reset": (), + "QAbstractAudioOutput.resume": (), + "QAbstractAudioOutput.setBufferSize": ('int',), + "QAbstractAudioOutput.setCategory": ('str',), + "QAbstractAudioOutput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioOutput.setNotifyInterval": ('int',), + "QAbstractAudioOutput.setVolume": ('float',), + "QAbstractAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioOutput.state": (), + "QAbstractAudioOutput.stop": (), + "QAbstractAudioOutput.suspend": (), + "QAbstractAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAbstractVideoBuffer: + "QAbstractVideoBuffer.__init__": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoBuffer.handle": (), + "QAbstractVideoBuffer.handleType": (), + "QAbstractVideoBuffer.mapMode": (), + "QAbstractVideoBuffer.release": (), + "QAbstractVideoBuffer.unmap": (), + + # class PySide2.QtMultimedia.QAbstractVideoFilter: + "QAbstractVideoFilter.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoFilter.createFilterRunnable": (), + "QAbstractVideoFilter.isActive": (), + "QAbstractVideoFilter.setActive": ('bool',), + + # class PySide2.QtMultimedia.QAbstractVideoSurface: + "QAbstractVideoSurface.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoSurface.error": (), + "QAbstractVideoSurface.isActive": (), + "QAbstractVideoSurface.isFormatSupported": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.nativeResolution": (), + "QAbstractVideoSurface.nearestFormat": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.present": ('PySide2.QtMultimedia.QVideoFrame',), + "QAbstractVideoSurface.setError": ('PySide2.QtMultimedia.QAbstractVideoSurface.Error',), + "QAbstractVideoSurface.setNativeResolution": ('PySide2.QtCore.QSize',), + "QAbstractVideoSurface.start": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.stop": (), + "QAbstractVideoSurface.supportedPixelFormats": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoSurface.surfaceFormat": (), + + # class PySide2.QtMultimedia.QAudio: + + # class PySide2.QtMultimedia.QAudioBuffer: + "QAudioBuffer.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtMultimedia.QAudioFormat', 'int'), ('PySide2.QtMultimedia.QAudioBuffer',), ('int', 'PySide2.QtMultimedia.QAudioFormat', 'int')], + "QAudioBuffer.__copy__": (), + "QAudioBuffer.byteCount": (), + "QAudioBuffer.constData": (), + "QAudioBuffer.data": [], + "QAudioBuffer.duration": (), + "QAudioBuffer.format": (), + "QAudioBuffer.frameCount": (), + "QAudioBuffer.isValid": (), + "QAudioBuffer.sampleCount": (), + "QAudioBuffer.startTime": (), + + # class PySide2.QtMultimedia.QAudioDecoder: + "QAudioDecoder.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoder.audioFormat": (), + "QAudioDecoder.bind": ('PySide2.QtCore.QObject',), + "QAudioDecoder.bufferAvailable": (), + "QAudioDecoder.duration": (), + "QAudioDecoder.errorString": (), + "QAudioDecoder.hasSupport": ('str', 'PySide2.support.signature.typing.List'), + "QAudioDecoder.position": (), + "QAudioDecoder.read": (), + "QAudioDecoder.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoder.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoder.setSourceFilename": ('str',), + "QAudioDecoder.sourceDevice": (), + "QAudioDecoder.sourceFilename": (), + "QAudioDecoder.start": (), + "QAudioDecoder.state": (), + "QAudioDecoder.stop": (), + "QAudioDecoder.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QAudioDecoderControl: + "QAudioDecoderControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoderControl.audioFormat": (), + "QAudioDecoderControl.bufferAvailable": (), + "QAudioDecoderControl.duration": (), + "QAudioDecoderControl.position": (), + "QAudioDecoderControl.read": (), + "QAudioDecoderControl.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoderControl.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoderControl.setSourceFilename": ('str',), + "QAudioDecoderControl.sourceDevice": (), + "QAudioDecoderControl.sourceFilename": (), + "QAudioDecoderControl.start": (), + "QAudioDecoderControl.state": (), + "QAudioDecoderControl.stop": (), + + # class PySide2.QtMultimedia.QAudioDeviceInfo: + "QAudioDeviceInfo.__init__": [(), ('PySide2.QtMultimedia.QAudioDeviceInfo',)], + "QAudioDeviceInfo.__copy__": (), + "QAudioDeviceInfo.availableDevices": ('PySide2.QtMultimedia.QAudio.Mode',), + "QAudioDeviceInfo.defaultInputDevice": (), + "QAudioDeviceInfo.defaultOutputDevice": (), + "QAudioDeviceInfo.deviceName": (), + "QAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.isNull": (), + "QAudioDeviceInfo.nearestFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.preferredFormat": (), + "QAudioDeviceInfo.supportedByteOrders": (), + "QAudioDeviceInfo.supportedChannelCounts": (), + "QAudioDeviceInfo.supportedCodecs": (), + "QAudioDeviceInfo.supportedSampleRates": (), + "QAudioDeviceInfo.supportedSampleSizes": (), + "QAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAudioEncoderSettings: + "QAudioEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QAudioEncoderSettings',)], + "QAudioEncoderSettings.__copy__": (), + "QAudioEncoderSettings.bitRate": (), + "QAudioEncoderSettings.channelCount": (), + "QAudioEncoderSettings.codec": (), + "QAudioEncoderSettings.encodingMode": (), + "QAudioEncoderSettings.encodingOption": ('str',), + "QAudioEncoderSettings.encodingOptions": (), + "QAudioEncoderSettings.isNull": (), + "QAudioEncoderSettings.quality": (), + "QAudioEncoderSettings.sampleRate": (), + "QAudioEncoderSettings.setBitRate": ('int',), + "QAudioEncoderSettings.setChannelCount": ('int',), + "QAudioEncoderSettings.setCodec": ('str',), + "QAudioEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QAudioEncoderSettings.setEncodingOption": ('str', 'PySide2.support.signature.typing.Any'), + "QAudioEncoderSettings.setEncodingOptions": ('dict',), + "QAudioEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QAudioEncoderSettings.setSampleRate": ('int',), + + # class PySide2.QtMultimedia.QAudioEncoderSettingsControl: + "QAudioEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioEncoderSettingsControl.audioSettings": (), + "QAudioEncoderSettingsControl.codecDescription": ('str',), + "QAudioEncoderSettingsControl.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QAudioEncoderSettingsControl.supportedAudioCodecs": (), + + # class PySide2.QtMultimedia.QAudioFormat: + "QAudioFormat.__init__": [(), ('PySide2.QtMultimedia.QAudioFormat',)], + "QAudioFormat.__copy__": (), + "QAudioFormat.byteOrder": (), + "QAudioFormat.bytesForDuration": ('int',), + "QAudioFormat.bytesForFrames": ('int',), + "QAudioFormat.bytesPerFrame": (), + "QAudioFormat.channelCount": (), + "QAudioFormat.codec": (), + "QAudioFormat.durationForBytes": ('int',), + "QAudioFormat.durationForFrames": ('int',), + "QAudioFormat.framesForBytes": ('int',), + "QAudioFormat.framesForDuration": ('int',), + "QAudioFormat.isValid": (), + "QAudioFormat.sampleRate": (), + "QAudioFormat.sampleSize": (), + "QAudioFormat.sampleType": (), + "QAudioFormat.setByteOrder": ('PySide2.QtMultimedia.QAudioFormat.Endian',), + "QAudioFormat.setChannelCount": ('int',), + "QAudioFormat.setCodec": ('str',), + "QAudioFormat.setSampleRate": ('int',), + "QAudioFormat.setSampleSize": ('int',), + "QAudioFormat.setSampleType": ('PySide2.QtMultimedia.QAudioFormat.SampleType',), + + # class PySide2.QtMultimedia.QAudioInput: + "QAudioInput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioInput.bufferSize": (), + "QAudioInput.bytesReady": (), + "QAudioInput.elapsedUSecs": (), + "QAudioInput.error": (), + "QAudioInput.format": (), + "QAudioInput.notifyInterval": (), + "QAudioInput.periodSize": (), + "QAudioInput.processedUSecs": (), + "QAudioInput.reset": (), + "QAudioInput.resume": (), + "QAudioInput.setBufferSize": ('int',), + "QAudioInput.setNotifyInterval": ('int',), + "QAudioInput.setVolume": ('float',), + "QAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioInput.state": (), + "QAudioInput.stop": (), + "QAudioInput.suspend": (), + "QAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAudioInputSelectorControl: + "QAudioInputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioInputSelectorControl.activeInput": (), + "QAudioInputSelectorControl.availableInputs": (), + "QAudioInputSelectorControl.defaultInput": (), + "QAudioInputSelectorControl.inputDescription": ('str',), + "QAudioInputSelectorControl.setActiveInput": ('str',), + + # class PySide2.QtMultimedia.QAudioOutput: + "QAudioOutput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioOutput.bufferSize": (), + "QAudioOutput.bytesFree": (), + "QAudioOutput.category": (), + "QAudioOutput.elapsedUSecs": (), + "QAudioOutput.error": (), + "QAudioOutput.format": (), + "QAudioOutput.notifyInterval": (), + "QAudioOutput.periodSize": (), + "QAudioOutput.processedUSecs": (), + "QAudioOutput.reset": (), + "QAudioOutput.resume": (), + "QAudioOutput.setBufferSize": ('int',), + "QAudioOutput.setCategory": ('str',), + "QAudioOutput.setNotifyInterval": ('int',), + "QAudioOutput.setVolume": ('float',), + "QAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioOutput.state": (), + "QAudioOutput.stop": (), + "QAudioOutput.suspend": (), + "QAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAudioOutputSelectorControl: + "QAudioOutputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioOutputSelectorControl.activeOutput": (), + "QAudioOutputSelectorControl.availableOutputs": (), + "QAudioOutputSelectorControl.defaultOutput": (), + "QAudioOutputSelectorControl.outputDescription": ('str',), + "QAudioOutputSelectorControl.setActiveOutput": ('str',), + + # class PySide2.QtMultimedia.QAudioProbe: + "QAudioProbe.__init__": ('PySide2.QtCore.QObject',), + "QAudioProbe.isActive": (), + "QAudioProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QAudioRecorder: + "QAudioRecorder.__init__": ('PySide2.QtCore.QObject',), + "QAudioRecorder.audioInput": (), + "QAudioRecorder.audioInputDescription": ('str',), + "QAudioRecorder.audioInputs": (), + "QAudioRecorder.defaultAudioInput": (), + "QAudioRecorder.setAudioInput": ('str',), + + # class PySide2.QtMultimedia.QAudioRoleControl: + "QAudioRoleControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioRoleControl.audioRole": (), + "QAudioRoleControl.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QAudioRoleControl.supportedAudioRoles": (), + + # class PySide2.QtMultimedia.QCamera: + "QCamera.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtMultimedia.QCamera.Position', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QCameraInfo', 'PySide2.QtCore.QObject')], + "QCamera.availability": (), + "QCamera.availableDevices": (), + "QCamera.captureMode": (), + "QCamera.deviceDescription": ('PySide2.QtCore.QByteArray',), + "QCamera.errorString": (), + "QCamera.isCaptureModeSupported": ('CaptureModes',), + "QCamera.load": (), + "QCamera.lockStatus": [(), ('PySide2.QtMultimedia.QCamera.LockType',)], + "QCamera.requestedLocks": (), + "QCamera.searchAndLock": [(), ('LockTypes',)], + "QCamera.setCaptureMode": ('CaptureModes',), + "QCamera.setViewfinder": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QCamera.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.start": (), + "QCamera.state": (), + "QCamera.status": (), + "QCamera.stop": (), + "QCamera.supportedLocks": (), + "QCamera.supportedViewfinderFrameRateRanges": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderPixelFormats": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderResolutions": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.unload": (), + "QCamera.unlock": [(), ('LockTypes',)], + "QCamera.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraCaptureBufferFormatControl: + "QCameraCaptureBufferFormatControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureBufferFormatControl.bufferFormat": (), + "QCameraCaptureBufferFormatControl.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraCaptureBufferFormatControl.supportedBufferFormats": (), + + # class PySide2.QtMultimedia.QCameraCaptureDestinationControl: + "QCameraCaptureDestinationControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureDestinationControl.captureDestination": (), + "QCameraCaptureDestinationControl.isCaptureDestinationSupported": ('CaptureDestinations',), + "QCameraCaptureDestinationControl.setCaptureDestination": ('CaptureDestinations',), + + # class PySide2.QtMultimedia.QCameraControl: + "QCameraControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraControl.canChangeProperty": ('PySide2.QtMultimedia.QCameraControl.PropertyChangeType', 'PySide2.QtMultimedia.QCamera.Status'), + "QCameraControl.captureMode": (), + "QCameraControl.isCaptureModeSupported": ('CaptureModes',), + "QCameraControl.setCaptureMode": ('CaptureModes',), + "QCameraControl.setState": ('PySide2.QtMultimedia.QCamera.State',), + "QCameraControl.state": (), + "QCameraControl.status": (), + + # class PySide2.QtMultimedia.QCameraExposureControl: + "QCameraExposureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraExposureControl.actualValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.requestedValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.setValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtMultimedia.QCameraFocusZone: + "QCameraFocusZone.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus'), ('PySide2.QtMultimedia.QCameraFocusZone',)], + "QCameraFocusZone.__copy__": (), + "QCameraFocusZone.area": (), + "QCameraFocusZone.isValid": (), + "QCameraFocusZone.setStatus": ('PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus',), + "QCameraFocusZone.status": (), + + # class PySide2.QtMultimedia.QCameraImageCapture: + "QCameraImageCapture.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QCameraImageCapture.availability": (), + "QCameraImageCapture.bufferFormat": (), + "QCameraImageCapture.cancelCapture": (), + "QCameraImageCapture.capture": ('str',), + "QCameraImageCapture.captureDestination": (), + "QCameraImageCapture.encodingSettings": (), + "QCameraImageCapture.errorString": (), + "QCameraImageCapture.imageCodecDescription": ('str',), + "QCameraImageCapture.isAvailable": (), + "QCameraImageCapture.isCaptureDestinationSupported": ('CaptureDestinations',), + "QCameraImageCapture.isReadyForCapture": (), + "QCameraImageCapture.mediaObject": (), + "QCameraImageCapture.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraImageCapture.setCaptureDestination": ('CaptureDestinations',), + "QCameraImageCapture.setEncodingSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QCameraImageCapture.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QCameraImageCapture.supportedBufferFormats": (), + "QCameraImageCapture.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QCameraImageCaptureControl: + "QCameraImageCaptureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageCaptureControl.cancelCapture": (), + "QCameraImageCaptureControl.capture": ('str',), + "QCameraImageCaptureControl.driveMode": (), + "QCameraImageCaptureControl.isReadyForCapture": (), + "QCameraImageCaptureControl.setDriveMode": ('PySide2.QtMultimedia.QCameraImageCapture.DriveMode',), + + # class PySide2.QtMultimedia.QCameraImageProcessingControl: + "QCameraImageProcessingControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageProcessingControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.isParameterValueSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'PySide2.support.signature.typing.Any'), + "QCameraImageProcessingControl.parameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.setParameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtMultimedia.QCameraInfo: + "QCameraInfo.__init__": [('PySide2.QtCore.QByteArray',), ('PySide2.QtMultimedia.QCamera',), ('PySide2.QtMultimedia.QCameraInfo',)], + "QCameraInfo.__copy__": (), + "QCameraInfo.availableCameras": ('PySide2.QtMultimedia.QCamera.Position',), + "QCameraInfo.defaultCamera": (), + "QCameraInfo.description": (), + "QCameraInfo.deviceName": (), + "QCameraInfo.isNull": (), + "QCameraInfo.orientation": (), + "QCameraInfo.position": (), + + # class PySide2.QtMultimedia.QCameraInfoControl: + "QCameraInfoControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraInfoControl.cameraOrientation": ('str',), + "QCameraInfoControl.cameraPosition": ('str',), + + # class PySide2.QtMultimedia.QCameraLocksControl: + "QCameraLocksControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraLocksControl.lockStatus": ('PySide2.QtMultimedia.QCamera.LockType',), + "QCameraLocksControl.searchAndLock": ('LockTypes',), + "QCameraLocksControl.supportedLocks": (), + "QCameraLocksControl.unlock": ('LockTypes',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettings: + "QCameraViewfinderSettings.__init__": [(), ('PySide2.QtMultimedia.QCameraViewfinderSettings',)], + "QCameraViewfinderSettings.__copy__": (), + "QCameraViewfinderSettings.isNull": (), + "QCameraViewfinderSettings.maximumFrameRate": (), + "QCameraViewfinderSettings.minimumFrameRate": (), + "QCameraViewfinderSettings.pixelAspectRatio": (), + "QCameraViewfinderSettings.pixelFormat": (), + "QCameraViewfinderSettings.resolution": (), + "QCameraViewfinderSettings.setMaximumFrameRate": ('float',), + "QCameraViewfinderSettings.setMinimumFrameRate": ('float',), + "QCameraViewfinderSettings.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.setPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraViewfinderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.swap": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl: + "QCameraViewfinderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl.isViewfinderParameterSupported": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + "QCameraViewfinderSettingsControl.setViewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter', 'PySide2.support.signature.typing.Any'), + "QCameraViewfinderSettingsControl.viewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl2: + "QCameraViewfinderSettingsControl2.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl2.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCameraViewfinderSettingsControl2.supportedViewfinderSettings": (), + "QCameraViewfinderSettingsControl2.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraZoomControl: + "QCameraZoomControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraZoomControl.currentDigitalZoom": (), + "QCameraZoomControl.currentOpticalZoom": (), + "QCameraZoomControl.maximumDigitalZoom": (), + "QCameraZoomControl.maximumOpticalZoom": (), + "QCameraZoomControl.requestedDigitalZoom": (), + "QCameraZoomControl.requestedOpticalZoom": (), + "QCameraZoomControl.zoomTo": ('float', 'float'), + + # class PySide2.QtMultimedia.QImageEncoderControl: + "QImageEncoderControl.__init__": ('PySide2.QtCore.QObject',), + "QImageEncoderControl.imageCodecDescription": ('str',), + "QImageEncoderControl.imageSettings": (), + "QImageEncoderControl.setImageSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QImageEncoderControl.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QImageEncoderSettings: + "QImageEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QImageEncoderSettings',)], + "QImageEncoderSettings.__copy__": (), + "QImageEncoderSettings.codec": (), + "QImageEncoderSettings.encodingOption": ('str',), + "QImageEncoderSettings.encodingOptions": (), + "QImageEncoderSettings.isNull": (), + "QImageEncoderSettings.quality": (), + "QImageEncoderSettings.resolution": (), + "QImageEncoderSettings.setCodec": ('str',), + "QImageEncoderSettings.setEncodingOption": ('str', 'PySide2.support.signature.typing.Any'), + "QImageEncoderSettings.setEncodingOptions": ('dict',), + "QImageEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QImageEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QMediaAudioProbeControl: + "QMediaAudioProbeControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaAvailabilityControl: + "QMediaAvailabilityControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaAvailabilityControl.availability": (), + + # class PySide2.QtMultimedia.QMediaBindableInterface: + "QMediaBindableInterface.__init__": (), + "QMediaBindableInterface.mediaObject": (), + "QMediaBindableInterface.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimedia.QMediaContainerControl: + "QMediaContainerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaContainerControl.containerDescription": ('str',), + "QMediaContainerControl.containerFormat": (), + "QMediaContainerControl.setContainerFormat": ('str',), + "QMediaContainerControl.supportedContainers": (), + + # class PySide2.QtMultimedia.QMediaContent: + "QMediaContent.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtMultimedia.QMediaContent',), ('PySide2.QtMultimedia.QMediaPlaylist', 'PySide2.QtCore.QUrl', 'bool'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest',), ('list',)], + "QMediaContent.__copy__": (), + "QMediaContent.canonicalRequest": (), + "QMediaContent.canonicalResource": (), + "QMediaContent.canonicalUrl": (), + "QMediaContent.isNull": (), + "QMediaContent.playlist": (), + "QMediaContent.resources": (), + + # class PySide2.QtMultimedia.QMediaControl: + "QMediaControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaGaplessPlaybackControl: + "QMediaGaplessPlaybackControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaGaplessPlaybackControl.crossfadeTime": (), + "QMediaGaplessPlaybackControl.isCrossfadeSupported": (), + "QMediaGaplessPlaybackControl.nextMedia": (), + "QMediaGaplessPlaybackControl.setCrossfadeTime": ('float',), + "QMediaGaplessPlaybackControl.setNextMedia": ('PySide2.QtMultimedia.QMediaContent',), + + # class PySide2.QtMultimedia.QMediaNetworkAccessControl: + "QMediaNetworkAccessControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaNetworkAccessControl.currentConfiguration": (), + "QMediaNetworkAccessControl.setConfigurations": ('list',), + + # class PySide2.QtMultimedia.QMediaObject: + "QMediaObject.notifyInterval": (), + "QMediaObject.addPropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.availability": (), + "QMediaObject.availableMetaData": (), + "QMediaObject.bind": ('PySide2.QtCore.QObject',), + "QMediaObject.isAvailable": (), + "QMediaObject.isMetaDataAvailable": (), + "QMediaObject.metaData": ('str',), + "QMediaObject.removePropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.setNotifyInterval": ('int',), + "QMediaObject.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaPlayer: + "QMediaPlayer.__init__": ('PySide2.QtCore.QObject', 'Flags'), + "QMediaPlayer.audioRole": (), + "QMediaPlayer.availability": (), + "QMediaPlayer.bind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.bufferStatus": (), + "QMediaPlayer.currentMedia": (), + "QMediaPlayer.currentNetworkConfiguration": (), + "QMediaPlayer.duration": (), + "QMediaPlayer.errorString": (), + "QMediaPlayer.hasSupport": ('str', 'PySide2.support.signature.typing.List', 'Flags'), + "QMediaPlayer.isAudioAvailable": (), + "QMediaPlayer.isMuted": (), + "QMediaPlayer.isSeekable": (), + "QMediaPlayer.isVideoAvailable": (), + "QMediaPlayer.media": (), + "QMediaPlayer.mediaStatus": (), + "QMediaPlayer.mediaStream": (), + "QMediaPlayer.pause": (), + "QMediaPlayer.play": (), + "QMediaPlayer.playbackRate": (), + "QMediaPlayer.playlist": (), + "QMediaPlayer.position": (), + "QMediaPlayer.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QMediaPlayer.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayer.setMuted": ('bool',), + "QMediaPlayer.setNetworkConfigurations": ('list',), + "QMediaPlayer.setPlaybackRate": ('float',), + "QMediaPlayer.setPlaylist": ('PySide2.QtMultimedia.QMediaPlaylist',), + "QMediaPlayer.setPosition": ('int',), + "QMediaPlayer.setVideoOutput": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QMediaPlayer.setVolume": ('int',), + "QMediaPlayer.state": (), + "QMediaPlayer.stop": (), + "QMediaPlayer.supportedAudioRoles": (), + "QMediaPlayer.supportedMimeTypes": ('Flags',), + "QMediaPlayer.unbind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.volume": (), + + # class PySide2.QtMultimedia.QMediaPlayerControl: + "QMediaPlayerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlayerControl.availablePlaybackRanges": (), + "QMediaPlayerControl.bufferStatus": (), + "QMediaPlayerControl.duration": (), + "QMediaPlayerControl.isAudioAvailable": (), + "QMediaPlayerControl.isMuted": (), + "QMediaPlayerControl.isSeekable": (), + "QMediaPlayerControl.isVideoAvailable": (), + "QMediaPlayerControl.media": (), + "QMediaPlayerControl.mediaStatus": (), + "QMediaPlayerControl.mediaStream": (), + "QMediaPlayerControl.pause": (), + "QMediaPlayerControl.play": (), + "QMediaPlayerControl.playbackRate": (), + "QMediaPlayerControl.position": (), + "QMediaPlayerControl.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayerControl.setMuted": ('bool',), + "QMediaPlayerControl.setPlaybackRate": ('float',), + "QMediaPlayerControl.setPosition": ('int',), + "QMediaPlayerControl.setVolume": ('int',), + "QMediaPlayerControl.state": (), + "QMediaPlayerControl.stop": (), + "QMediaPlayerControl.volume": (), + + # class PySide2.QtMultimedia.QMediaPlaylist: + "QMediaPlaylist.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlaylist.addMedia": [('PySide2.QtMultimedia.QMediaContent',), ('list',)], + "QMediaPlaylist.clear": (), + "QMediaPlaylist.currentIndex": (), + "QMediaPlaylist.currentMedia": (), + "QMediaPlaylist.error": (), + "QMediaPlaylist.errorString": (), + "QMediaPlaylist.insertMedia": [('int', 'PySide2.QtMultimedia.QMediaContent'), ('int', 'list')], + "QMediaPlaylist.isEmpty": (), + "QMediaPlaylist.isReadOnly": (), + "QMediaPlaylist.load": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaPlaylist.media": ('int',), + "QMediaPlaylist.mediaCount": (), + "QMediaPlaylist.mediaObject": (), + "QMediaPlaylist.next": (), + "QMediaPlaylist.nextIndex": ('int',), + "QMediaPlaylist.playbackMode": (), + "QMediaPlaylist.previous": (), + "QMediaPlaylist.previousIndex": ('int',), + "QMediaPlaylist.removeMedia": [('int',), ('int', 'int')], + "QMediaPlaylist.save": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str')], + "QMediaPlaylist.setCurrentIndex": ('int',), + "QMediaPlaylist.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaPlaylist.setPlaybackMode": ('PySide2.QtMultimedia.QMediaPlaylist.PlaybackMode',), + "QMediaPlaylist.shuffle": (), + + # class PySide2.QtMultimedia.QMediaRecorder: + "QMediaRecorder.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QMediaRecorder.actualLocation": (), + "QMediaRecorder.audioCodecDescription": ('str',), + "QMediaRecorder.audioSettings": (), + "QMediaRecorder.availability": (), + "QMediaRecorder.availableMetaData": (), + "QMediaRecorder.containerDescription": ('str',), + "QMediaRecorder.containerFormat": (), + "QMediaRecorder.duration": (), + "QMediaRecorder.errorString": (), + "QMediaRecorder.isAvailable": (), + "QMediaRecorder.isMetaDataAvailable": (), + "QMediaRecorder.isMetaDataWritable": (), + "QMediaRecorder.isMuted": (), + "QMediaRecorder.mediaObject": (), + "QMediaRecorder.metaData": ('str',), + "QMediaRecorder.outputLocation": (), + "QMediaRecorder.pause": (), + "QMediaRecorder.record": (), + "QMediaRecorder.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QMediaRecorder.setContainerFormat": ('str',), + "QMediaRecorder.setEncodingSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings', 'PySide2.QtMultimedia.QVideoEncoderSettings', 'str'), + "QMediaRecorder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaRecorder.setMetaData": ('str', 'PySide2.support.signature.typing.Any'), + "QMediaRecorder.setMuted": ('bool',), + "QMediaRecorder.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorder.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QMediaRecorder.setVolume": ('float',), + "QMediaRecorder.state": (), + "QMediaRecorder.status": (), + "QMediaRecorder.stop": (), + "QMediaRecorder.supportedAudioCodecs": (), + "QMediaRecorder.supportedContainers": (), + "QMediaRecorder.supportedVideoCodecs": (), + "QMediaRecorder.videoCodecDescription": ('str',), + "QMediaRecorder.videoSettings": (), + "QMediaRecorder.volume": (), + + # class PySide2.QtMultimedia.QMediaRecorderControl: + "QMediaRecorderControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaRecorderControl.applySettings": (), + "QMediaRecorderControl.duration": (), + "QMediaRecorderControl.isMuted": (), + "QMediaRecorderControl.outputLocation": (), + "QMediaRecorderControl.setMuted": ('bool',), + "QMediaRecorderControl.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorderControl.setState": ('PySide2.QtMultimedia.QMediaRecorder.State',), + "QMediaRecorderControl.setVolume": ('float',), + "QMediaRecorderControl.state": (), + "QMediaRecorderControl.status": (), + "QMediaRecorderControl.volume": (), + + # class PySide2.QtMultimedia.QMediaResource: + "QMediaResource.__init__": [(), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaResource.__copy__": (), + "QMediaResource.audioBitRate": (), + "QMediaResource.audioCodec": (), + "QMediaResource.channelCount": (), + "QMediaResource.dataSize": (), + "QMediaResource.isNull": (), + "QMediaResource.language": (), + "QMediaResource.mimeType": (), + "QMediaResource.request": (), + "QMediaResource.resolution": (), + "QMediaResource.sampleRate": (), + "QMediaResource.setAudioBitRate": ('int',), + "QMediaResource.setAudioCodec": ('str',), + "QMediaResource.setChannelCount": ('int',), + "QMediaResource.setDataSize": ('int',), + "QMediaResource.setLanguage": ('str',), + "QMediaResource.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QMediaResource.setSampleRate": ('int',), + "QMediaResource.setVideoBitRate": ('int',), + "QMediaResource.setVideoCodec": ('str',), + "QMediaResource.url": (), + "QMediaResource.videoBitRate": (), + "QMediaResource.videoCodec": (), + + # class PySide2.QtMultimedia.QMediaTimeRange: + "QMediaTimeRange.__init__": [(), ('PySide2.QtMultimedia.QMediaTimeRange',), ('int', 'int')], + "QMediaTimeRange.__copy__": (), + "QMediaTimeRange.addInterval": ('int', 'int'), + "QMediaTimeRange.addTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + "QMediaTimeRange.clear": (), + "QMediaTimeRange.contains": ('int',), + "QMediaTimeRange.earliestTime": (), + "QMediaTimeRange.isContinuous": (), + "QMediaTimeRange.isEmpty": (), + "QMediaTimeRange.latestTime": (), + "QMediaTimeRange.removeInterval": ('int', 'int'), + "QMediaTimeRange.removeTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + + # class PySide2.QtMultimedia.QMultimedia: + + # class PySide2.QtMultimedia.QRadioData: + "QRadioData.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QRadioData.availability": (), + "QRadioData.errorString": (), + "QRadioData.isAlternativeFrequenciesEnabled": (), + "QRadioData.mediaObject": (), + "QRadioData.programType": (), + "QRadioData.programTypeName": (), + "QRadioData.radioText": (), + "QRadioData.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioData.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QRadioData.stationId": (), + "QRadioData.stationName": (), + + # class PySide2.QtMultimedia.QRadioDataControl: + "QRadioDataControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioDataControl.errorString": (), + "QRadioDataControl.isAlternativeFrequenciesEnabled": (), + "QRadioDataControl.programType": (), + "QRadioDataControl.programTypeName": (), + "QRadioDataControl.radioText": (), + "QRadioDataControl.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioDataControl.stationId": (), + "QRadioDataControl.stationName": (), + + # class PySide2.QtMultimedia.QRadioTuner: + "QRadioTuner.__init__": ('PySide2.QtCore.QObject',), + "QRadioTuner.availability": (), + "QRadioTuner.band": (), + "QRadioTuner.cancelSearch": (), + "QRadioTuner.errorString": (), + "QRadioTuner.frequency": (), + "QRadioTuner.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isAntennaConnected": (), + "QRadioTuner.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isMuted": (), + "QRadioTuner.isSearching": (), + "QRadioTuner.isStereo": (), + "QRadioTuner.radioData": (), + "QRadioTuner.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTuner.searchBackward": (), + "QRadioTuner.searchForward": (), + "QRadioTuner.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.setFrequency": ('int',), + "QRadioTuner.setMuted": ('bool',), + "QRadioTuner.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTuner.setVolume": ('int',), + "QRadioTuner.signalStrength": (), + "QRadioTuner.start": (), + "QRadioTuner.state": (), + "QRadioTuner.stereoMode": (), + "QRadioTuner.stop": (), + "QRadioTuner.volume": (), + + # class PySide2.QtMultimedia.QRadioTunerControl: + "QRadioTunerControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioTunerControl.band": (), + "QRadioTunerControl.cancelSearch": (), + "QRadioTunerControl.errorString": (), + "QRadioTunerControl.frequency": (), + "QRadioTunerControl.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isAntennaConnected": (), + "QRadioTunerControl.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isMuted": (), + "QRadioTunerControl.isSearching": (), + "QRadioTunerControl.isStereo": (), + "QRadioTunerControl.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTunerControl.searchBackward": (), + "QRadioTunerControl.searchForward": (), + "QRadioTunerControl.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.setFrequency": ('int',), + "QRadioTunerControl.setMuted": ('bool',), + "QRadioTunerControl.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTunerControl.setVolume": ('int',), + "QRadioTunerControl.signalStrength": (), + "QRadioTunerControl.start": (), + "QRadioTunerControl.state": (), + "QRadioTunerControl.stereoMode": (), + "QRadioTunerControl.stop": (), + "QRadioTunerControl.volume": (), + + # class PySide2.QtMultimedia.QSound: + "QSound.__init__": ('str', 'PySide2.QtCore.QObject'), + "QSound.fileName": (), + "QSound.isFinished": (), + "QSound.loops": (), + "QSound.loopsRemaining": (), + "QSound.play": [(), ('str',)], + "QSound.setLoops": ('int',), + "QSound.stop": (), + + # class PySide2.QtMultimedia.QSoundEffect: + "QSoundEffect.__init__": ('PySide2.QtCore.QObject',), + "QSoundEffect.category": (), + "QSoundEffect.isLoaded": (), + "QSoundEffect.isMuted": (), + "QSoundEffect.isPlaying": (), + "QSoundEffect.loopCount": (), + "QSoundEffect.loopsRemaining": (), + "QSoundEffect.play": (), + "QSoundEffect.setCategory": ('str',), + "QSoundEffect.setLoopCount": ('int',), + "QSoundEffect.setMuted": ('bool',), + "QSoundEffect.setSource": ('PySide2.QtCore.QUrl',), + "QSoundEffect.setVolume": ('float',), + "QSoundEffect.source": (), + "QSoundEffect.status": (), + "QSoundEffect.stop": (), + "QSoundEffect.supportedMimeTypes": (), + "QSoundEffect.volume": (), + + # class PySide2.QtMultimedia.QVideoDeviceSelectorControl: + "QVideoDeviceSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoDeviceSelectorControl.defaultDevice": (), + "QVideoDeviceSelectorControl.deviceCount": (), + "QVideoDeviceSelectorControl.deviceDescription": ('int',), + "QVideoDeviceSelectorControl.deviceName": ('int',), + "QVideoDeviceSelectorControl.selectedDevice": (), + "QVideoDeviceSelectorControl.setSelectedDevice": ('int',), + + # class PySide2.QtMultimedia.QVideoEncoderSettings: + "QVideoEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QVideoEncoderSettings',)], + "QVideoEncoderSettings.__copy__": (), + "QVideoEncoderSettings.bitRate": (), + "QVideoEncoderSettings.codec": (), + "QVideoEncoderSettings.encodingMode": (), + "QVideoEncoderSettings.encodingOption": ('str',), + "QVideoEncoderSettings.encodingOptions": (), + "QVideoEncoderSettings.frameRate": (), + "QVideoEncoderSettings.isNull": (), + "QVideoEncoderSettings.quality": (), + "QVideoEncoderSettings.resolution": (), + "QVideoEncoderSettings.setBitRate": ('int',), + "QVideoEncoderSettings.setCodec": ('str',), + "QVideoEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QVideoEncoderSettings.setEncodingOption": ('str', 'PySide2.support.signature.typing.Any'), + "QVideoEncoderSettings.setEncodingOptions": ('dict',), + "QVideoEncoderSettings.setFrameRate": ('float',), + "QVideoEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QVideoEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QVideoEncoderSettingsControl: + "QVideoEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoEncoderSettingsControl.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QVideoEncoderSettingsControl.supportedVideoCodecs": (), + "QVideoEncoderSettingsControl.videoCodecDescription": ('str',), + "QVideoEncoderSettingsControl.videoSettings": (), + + # class PySide2.QtMultimedia.QVideoFilterRunnable: + "QVideoFilterRunnable.__init__": (), + "QVideoFilterRunnable.run": ('PySide2.QtMultimedia.QVideoFrame', 'PySide2.QtMultimedia.QVideoSurfaceFormat', 'RunFlags'), + + # class PySide2.QtMultimedia.QVideoFrame: + "QVideoFrame.__init__": [(), ('PySide2.QtGui.QImage',), ('PySide2.QtMultimedia.QAbstractVideoBuffer', 'PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat'), ('PySide2.QtMultimedia.QVideoFrame',), ('int', 'PySide2.QtCore.QSize', 'int', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat')], + "QVideoFrame.__copy__": (), + "QVideoFrame.availableMetaData": (), + "QVideoFrame.bits": [], + "QVideoFrame.bytesPerLine": [(), ('int',)], + "QVideoFrame.endTime": (), + "QVideoFrame.fieldType": (), + "QVideoFrame.handle": (), + "QVideoFrame.handleType": (), + "QVideoFrame.height": (), + "QVideoFrame.imageFormatFromPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QVideoFrame.isMapped": (), + "QVideoFrame.isReadable": (), + "QVideoFrame.isValid": (), + "QVideoFrame.isWritable": (), + "QVideoFrame.map": ('PySide2.QtMultimedia.QAbstractVideoBuffer.MapMode',), + "QVideoFrame.mapMode": (), + "QVideoFrame.mappedBytes": (), + "QVideoFrame.metaData": ('str',), + "QVideoFrame.pixelFormat": (), + "QVideoFrame.pixelFormatFromImageFormat": ('PySide2.QtGui.QImage.Format',), + "QVideoFrame.planeCount": (), + "QVideoFrame.setEndTime": ('int',), + "QVideoFrame.setFieldType": ('PySide2.QtMultimedia.QVideoFrame.FieldType',), + "QVideoFrame.setMetaData": ('str', 'PySide2.support.signature.typing.Any'), + "QVideoFrame.setStartTime": ('int',), + "QVideoFrame.size": (), + "QVideoFrame.startTime": (), + "QVideoFrame.unmap": (), + "QVideoFrame.width": (), + + # class PySide2.QtMultimedia.QVideoProbe: + "QVideoProbe.__init__": ('PySide2.QtCore.QObject',), + "QVideoProbe.isActive": (), + "QVideoProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QVideoRendererControl: + "QVideoRendererControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoRendererControl.setSurface": ('PySide2.QtMultimedia.QAbstractVideoSurface',), + "QVideoRendererControl.surface": (), + + # class PySide2.QtMultimedia.QVideoSurfaceFormat: + "QVideoSurfaceFormat.__init__": [(), ('PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat', 'PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType'), ('PySide2.QtMultimedia.QVideoSurfaceFormat',)], + "QVideoSurfaceFormat.__copy__": (), + "QVideoSurfaceFormat.frameHeight": (), + "QVideoSurfaceFormat.frameRate": (), + "QVideoSurfaceFormat.frameSize": (), + "QVideoSurfaceFormat.frameWidth": (), + "QVideoSurfaceFormat.handleType": (), + "QVideoSurfaceFormat.isValid": (), + "QVideoSurfaceFormat.pixelAspectRatio": (), + "QVideoSurfaceFormat.pixelFormat": (), + "QVideoSurfaceFormat.property": ('str',), + "QVideoSurfaceFormat.propertyNames": (), + "QVideoSurfaceFormat.scanLineDirection": (), + "QVideoSurfaceFormat.setFrameRate": ('float',), + "QVideoSurfaceFormat.setFrameSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setProperty": ('str', 'PySide2.support.signature.typing.Any'), + "QVideoSurfaceFormat.setScanLineDirection": ('PySide2.QtMultimedia.QVideoSurfaceFormat.Direction',), + "QVideoSurfaceFormat.setViewport": ('PySide2.QtCore.QRect',), + "QVideoSurfaceFormat.setYCbCrColorSpace": ('PySide2.QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace',), + "QVideoSurfaceFormat.sizeHint": (), + "QVideoSurfaceFormat.viewport": (), + "QVideoSurfaceFormat.yCbCrColorSpace": (), + + # class PySide2.QtMultimedia.QVideoWindowControl: + "QVideoWindowControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWindowControl.aspectRatioMode": (), + "QVideoWindowControl.brightness": (), + "QVideoWindowControl.contrast": (), + "QVideoWindowControl.displayRect": (), + "QVideoWindowControl.hue": (), + "QVideoWindowControl.isFullScreen": (), + "QVideoWindowControl.nativeSize": (), + "QVideoWindowControl.repaint": (), + "QVideoWindowControl.saturation": (), + "QVideoWindowControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWindowControl.setBrightness": ('int',), + "QVideoWindowControl.setContrast": ('int',), + "QVideoWindowControl.setDisplayRect": ('PySide2.QtCore.QRect',), + "QVideoWindowControl.setFullScreen": ('bool',), + "QVideoWindowControl.setHue": ('int',), + "QVideoWindowControl.setSaturation": ('int',), + "QVideoWindowControl.setWinId": ('int',), + "QVideoWindowControl.winId": (), + }) + +# Module PySide2.QtMultimediaWidgets +if "PySide2.QtMultimediaWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtMultimediaWidgets.QCameraViewfinder: + "QCameraViewfinder.__init__": ('PySide2.QtWidgets.QWidget',), + "QCameraViewfinder.mediaObject": (), + "QCameraViewfinder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimediaWidgets.QGraphicsVideoItem: + "QGraphicsVideoItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsVideoItem.aspectRatioMode": (), + "QGraphicsVideoItem.boundingRect": (), + "QGraphicsVideoItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'PySide2.support.signature.typing.Any'), + "QGraphicsVideoItem.mediaObject": (), + "QGraphicsVideoItem.nativeSize": (), + "QGraphicsVideoItem.offset": (), + "QGraphicsVideoItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsVideoItem.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QGraphicsVideoItem.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QGraphicsVideoItem.setOffset": ('PySide2.QtCore.QPointF',), + "QGraphicsVideoItem.setSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsVideoItem.size": (), + "QGraphicsVideoItem.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtMultimediaWidgets.QVideoWidget: + "QVideoWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QVideoWidget.aspectRatioMode": (), + "QVideoWidget.brightness": (), + "QVideoWidget.contrast": (), + "QVideoWidget.event": ('PySide2.QtCore.QEvent',), + "QVideoWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QVideoWidget.hue": (), + "QVideoWidget.isFullScreen": (), + "QVideoWidget.mediaObject": (), + "QVideoWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QVideoWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QVideoWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QVideoWidget.saturation": (), + "QVideoWidget.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidget.setBrightness": ('int',), + "QVideoWidget.setContrast": ('int',), + "QVideoWidget.setFullScreen": ('bool',), + "QVideoWidget.setHue": ('int',), + "QVideoWidget.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QVideoWidget.setSaturation": ('int',), + "QVideoWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QVideoWidget.sizeHint": (), + + # class PySide2.QtMultimediaWidgets.QVideoWidgetControl: + "QVideoWidgetControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWidgetControl.aspectRatioMode": (), + "QVideoWidgetControl.brightness": (), + "QVideoWidgetControl.contrast": (), + "QVideoWidgetControl.hue": (), + "QVideoWidgetControl.isFullScreen": (), + "QVideoWidgetControl.saturation": (), + "QVideoWidgetControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidgetControl.setBrightness": ('int',), + "QVideoWidgetControl.setContrast": ('int',), + "QVideoWidgetControl.setFullScreen": ('bool',), + "QVideoWidgetControl.setHue": ('int',), + "QVideoWidgetControl.setSaturation": ('int',), + "QVideoWidgetControl.videoWidget": (), + }) + +# Module PySide2.QtOpenGL +if "PySide2.QtOpenGL" in sys.modules: + dict.update({ + + # class PySide2.QtOpenGL.QGL: + + # class PySide2.QtOpenGL.QGLBuffer: + "QGLBuffer.__init__": [(), ('PySide2.QtOpenGL.QGLBuffer',), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.allocate": [('int',), ('int', 'int')], + "QGLBuffer.bind": (), + "QGLBuffer.bufferId": (), + "QGLBuffer.create": (), + "QGLBuffer.destroy": (), + "QGLBuffer.isCreated": (), + "QGLBuffer.map": ('PySide2.QtOpenGL.QGLBuffer.Access',), + "QGLBuffer.read": ('int', 'int', 'int'), + "QGLBuffer.release": [(), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.setUsagePattern": ('PySide2.QtOpenGL.QGLBuffer.UsagePattern',), + "QGLBuffer.size": (), + "QGLBuffer.type": (), + "QGLBuffer.unmap": (), + "QGLBuffer.usagePattern": (), + "QGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtOpenGL.QGLColormap: + "QGLColormap.__init__": [(), ('PySide2.QtOpenGL.QGLColormap',)], + "QGLColormap.__copy__": (), + "QGLColormap.entryColor": ('int',), + "QGLColormap.entryRgb": ('int',), + "QGLColormap.find": ('int',), + "QGLColormap.findNearest": ('int',), + "QGLColormap.handle": (), + "QGLColormap.isEmpty": (), + "QGLColormap.setEntry": [('int', 'PySide2.QtGui.QColor'), ('int', 'int')], + "QGLColormap.setHandle": ('int',), + "QGLColormap.size": (), + + # class PySide2.QtOpenGL.QGLContext: + "QGLContext.__init__": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.areSharing": ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtOpenGL.QGLContext'), + "QGLContext.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'BindOptions'), ('str',)], + "QGLContext.chooseContext": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.colorIndex": ('PySide2.QtGui.QColor',), + "QGLContext.contextHandle": (), + "QGLContext.create": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.currentContext": (), + "QGLContext.deleteTexture": ('int',), + "QGLContext.device": (), + "QGLContext.deviceIsPixmap": (), + "QGLContext.doneCurrent": (), + "QGLContext.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLContext.format": (), + "QGLContext.fromOpenGLContext": ('PySide2.QtGui.QOpenGLContext',), + "QGLContext.initialized": (), + "QGLContext.isSharing": (), + "QGLContext.isValid": (), + "QGLContext.makeCurrent": (), + "QGLContext.moveToThread": ('PySide2.QtCore.QThread',), + "QGLContext.overlayTransparentColor": (), + "QGLContext.requestedFormat": (), + "QGLContext.reset": (), + "QGLContext.setDevice": ('PySide2.QtGui.QPaintDevice',), + "QGLContext.setFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.setInitialized": ('bool',), + "QGLContext.setTextureCacheLimit": ('int',), + "QGLContext.setValid": ('bool',), + "QGLContext.setWindowCreated": ('bool',), + "QGLContext.swapBuffers": (), + "QGLContext.textureCacheLimit": (), + "QGLContext.windowCreated": (), + + # class PySide2.QtOpenGL.QGLFormat: + "QGLFormat.__init__": [(), ('FormatOptions', 'int'), ('PySide2.QtOpenGL.QGLFormat',)], + "QGLFormat.__copy__": (), + "QGLFormat.accum": (), + "QGLFormat.accumBufferSize": (), + "QGLFormat.alpha": (), + "QGLFormat.alphaBufferSize": (), + "QGLFormat.blueBufferSize": (), + "QGLFormat.defaultFormat": (), + "QGLFormat.defaultOverlayFormat": (), + "QGLFormat.depth": (), + "QGLFormat.depthBufferSize": (), + "QGLFormat.directRendering": (), + "QGLFormat.doubleBuffer": (), + "QGLFormat.fromSurfaceFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QGLFormat.greenBufferSize": (), + "QGLFormat.hasOpenGL": (), + "QGLFormat.hasOpenGLOverlays": (), + "QGLFormat.hasOverlay": (), + "QGLFormat.majorVersion": (), + "QGLFormat.minorVersion": (), + "QGLFormat.openGLVersionFlags": (), + "QGLFormat.plane": (), + "QGLFormat.profile": (), + "QGLFormat.redBufferSize": (), + "QGLFormat.rgba": (), + "QGLFormat.sampleBuffers": (), + "QGLFormat.samples": (), + "QGLFormat.setAccum": ('bool',), + "QGLFormat.setAccumBufferSize": ('int',), + "QGLFormat.setAlpha": ('bool',), + "QGLFormat.setAlphaBufferSize": ('int',), + "QGLFormat.setBlueBufferSize": ('int',), + "QGLFormat.setDefaultFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDefaultOverlayFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDepth": ('bool',), + "QGLFormat.setDepthBufferSize": ('int',), + "QGLFormat.setDirectRendering": ('bool',), + "QGLFormat.setDoubleBuffer": ('bool',), + "QGLFormat.setGreenBufferSize": ('int',), + "QGLFormat.setOption": ('FormatOptions',), + "QGLFormat.setOverlay": ('bool',), + "QGLFormat.setPlane": ('int',), + "QGLFormat.setProfile": ('PySide2.QtOpenGL.QGLFormat.OpenGLContextProfile',), + "QGLFormat.setRedBufferSize": ('int',), + "QGLFormat.setRgba": ('bool',), + "QGLFormat.setSampleBuffers": ('bool',), + "QGLFormat.setSamples": ('int',), + "QGLFormat.setStencil": ('bool',), + "QGLFormat.setStencilBufferSize": ('int',), + "QGLFormat.setStereo": ('bool',), + "QGLFormat.setSwapInterval": ('int',), + "QGLFormat.setVersion": ('int', 'int'), + "QGLFormat.stencil": (), + "QGLFormat.stencilBufferSize": (), + "QGLFormat.stereo": (), + "QGLFormat.swapInterval": (), + "QGLFormat.testOption": ('FormatOptions',), + "QGLFormat.toSurfaceFormat": ('PySide2.QtOpenGL.QGLFormat',), + + # class PySide2.QtOpenGL.QGLFramebufferObject: + "QGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QGLFramebufferObject.attachment": (), + "QGLFramebufferObject.bind": (), + "QGLFramebufferObject.bindDefault": (), + "QGLFramebufferObject.blitFramebuffer": ('PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), + "QGLFramebufferObject.devType": (), + "QGLFramebufferObject.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLFramebufferObject.format": (), + "QGLFramebufferObject.handle": (), + "QGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QGLFramebufferObject.isBound": (), + "QGLFramebufferObject.isValid": (), + "QGLFramebufferObject.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLFramebufferObject.paintEngine": (), + "QGLFramebufferObject.release": (), + "QGLFramebufferObject.size": (), + "QGLFramebufferObject.texture": (), + "QGLFramebufferObject.toImage": (), + + # class PySide2.QtOpenGL.QGLFramebufferObjectFormat: + "QGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtOpenGL.QGLFramebufferObjectFormat',)], + "QGLFramebufferObjectFormat.__copy__": (), + "QGLFramebufferObjectFormat.attachment": (), + "QGLFramebufferObjectFormat.internalTextureFormat": (), + "QGLFramebufferObjectFormat.mipmap": (), + "QGLFramebufferObjectFormat.samples": (), + "QGLFramebufferObjectFormat.setAttachment": ('PySide2.QtOpenGL.QGLFramebufferObject.Attachment',), + "QGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QGLFramebufferObjectFormat.setMipmap": ('bool',), + "QGLFramebufferObjectFormat.setSamples": ('int',), + "QGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtOpenGL.QGLPixelBuffer: + "QGLPixelBuffer.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget'), ('int', 'int', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget')], + "QGLPixelBuffer.bindTexture": [('PySide2.QtGui.QImage', 'int'), ('PySide2.QtGui.QPixmap', 'int'), ('str',)], + "QGLPixelBuffer.bindToDynamicTexture": ('int',), + "QGLPixelBuffer.context": (), + "QGLPixelBuffer.deleteTexture": ('int',), + "QGLPixelBuffer.devType": (), + "QGLPixelBuffer.doneCurrent": (), + "QGLPixelBuffer.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLPixelBuffer.format": (), + "QGLPixelBuffer.generateDynamicTexture": (), + "QGLPixelBuffer.handle": (), + "QGLPixelBuffer.hasOpenGLPbuffers": (), + "QGLPixelBuffer.isValid": (), + "QGLPixelBuffer.makeCurrent": (), + "QGLPixelBuffer.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLPixelBuffer.paintEngine": (), + "QGLPixelBuffer.releaseFromDynamicTexture": (), + "QGLPixelBuffer.size": (), + "QGLPixelBuffer.toImage": (), + "QGLPixelBuffer.updateDynamicTexture": ('int',), + + # class PySide2.QtOpenGL.QGLShader: + "QGLShader.__init__": [('ShaderType', 'PySide2.QtCore.QObject'), ('ShaderType', 'PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShader.compileSourceFile": ('str',), + "QGLShader.hasOpenGLShaders": ('ShaderType', 'PySide2.QtOpenGL.QGLContext'), + "QGLShader.isCompiled": (), + "QGLShader.log": (), + "QGLShader.shaderId": (), + "QGLShader.shaderType": (), + "QGLShader.sourceCode": (), + + # class PySide2.QtOpenGL.QGLShaderProgram: + "QGLShaderProgram.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShaderProgram.addShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.addShaderFromSourceCode": [('ShaderType', 'PySide2.QtCore.QByteArray'), ('ShaderType', 'str')], + "QGLShaderProgram.addShaderFromSourceFile": ('ShaderType', 'str'), + "QGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShaderProgram.bind": (), + "QGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.geometryInputType": (), + "QGLShaderProgram.geometryOutputType": (), + "QGLShaderProgram.geometryOutputVertexCount": (), + "QGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtOpenGL.QGLContext',), + "QGLShaderProgram.isLinked": (), + "QGLShaderProgram.link": (), + "QGLShaderProgram.log": (), + "QGLShaderProgram.maxGeometryOutputVertices": (), + "QGLShaderProgram.programId": (), + "QGLShaderProgram.release": (), + "QGLShaderProgram.removeAllShaders": (), + "QGLShaderProgram.removeShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.setAttributeArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setAttributeArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setAttributeArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float')], + "QGLShaderProgram.setGeometryInputType": ('int',), + "QGLShaderProgram.setGeometryOutputType": ('int',), + "QGLShaderProgram.setGeometryOutputVertexCount": ('int',), + "QGLShaderProgram.setUniformValue": [('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QGLShaderProgram.setUniformValueArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setUniformValueArray2x2": [('int', 'PySide2.QtGui.QMatrix2x2', 'int'), ('str', 'PySide2.QtGui.QMatrix2x2', 'int')], + "QGLShaderProgram.setUniformValueArray2x3": [('int', 'PySide2.QtGui.QMatrix2x3', 'int'), ('str', 'PySide2.QtGui.QMatrix2x3', 'int')], + "QGLShaderProgram.setUniformValueArray2x4": [('int', 'PySide2.QtGui.QMatrix2x4', 'int'), ('str', 'PySide2.QtGui.QMatrix2x4', 'int')], + "QGLShaderProgram.setUniformValueArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setUniformValueArray3x2": [('int', 'PySide2.QtGui.QMatrix3x2', 'int'), ('str', 'PySide2.QtGui.QMatrix3x2', 'int')], + "QGLShaderProgram.setUniformValueArray3x3": [('int', 'PySide2.QtGui.QMatrix3x3', 'int'), ('str', 'PySide2.QtGui.QMatrix3x3', 'int')], + "QGLShaderProgram.setUniformValueArray3x4": [('int', 'PySide2.QtGui.QMatrix3x4', 'int'), ('str', 'PySide2.QtGui.QMatrix3x4', 'int')], + "QGLShaderProgram.setUniformValueArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setUniformValueArray4x2": [('int', 'PySide2.QtGui.QMatrix4x2', 'int'), ('str', 'PySide2.QtGui.QMatrix4x2', 'int')], + "QGLShaderProgram.setUniformValueArray4x3": [('int', 'PySide2.QtGui.QMatrix4x3', 'int'), ('str', 'PySide2.QtGui.QMatrix4x3', 'int')], + "QGLShaderProgram.setUniformValueArray4x4": [('int', 'PySide2.QtGui.QMatrix4x4', 'int'), ('str', 'PySide2.QtGui.QMatrix4x4', 'int')], + "QGLShaderProgram.setUniformValueArrayInt": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.setUniformValueArrayUint": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.shaders": (), + "QGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtOpenGL.QGLWidget: + "QGLWidget.__init__": [('PySide2.QtOpenGL.QGLContext', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags'), ('PySide2.QtOpenGL.QGLFormat', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags')], + "QGLWidget.autoBufferSwap": (), + "QGLWidget.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'BindOptions'), ('str',)], + "QGLWidget.colormap": (), + "QGLWidget.context": (), + "QGLWidget.convertToGLFormat": ('PySide2.QtGui.QImage',), + "QGLWidget.deleteTexture": ('int',), + "QGLWidget.doneCurrent": (), + "QGLWidget.doubleBuffer": (), + "QGLWidget.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLWidget.event": ('PySide2.QtCore.QEvent',), + "QGLWidget.format": (), + "QGLWidget.glDraw": (), + "QGLWidget.glInit": (), + "QGLWidget.grabFrameBuffer": ('bool',), + "QGLWidget.initializeGL": (), + "QGLWidget.initializeOverlayGL": (), + "QGLWidget.isSharing": (), + "QGLWidget.isValid": (), + "QGLWidget.makeCurrent": (), + "QGLWidget.makeOverlayCurrent": (), + "QGLWidget.overlayContext": (), + "QGLWidget.paintEngine": (), + "QGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGLWidget.paintGL": (), + "QGLWidget.paintOverlayGL": (), + "QGLWidget.qglClearColor": ('PySide2.QtGui.QColor',), + "QGLWidget.qglColor": ('PySide2.QtGui.QColor',), + "QGLWidget.renderPixmap": ('int', 'int', 'bool'), + "QGLWidget.renderText": [('float', 'float', 'float', 'str', 'PySide2.QtGui.QFont'), ('int', 'int', 'str', 'PySide2.QtGui.QFont')], + "QGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGLWidget.resizeGL": ('int', 'int'), + "QGLWidget.resizeOverlayGL": ('int', 'int'), + "QGLWidget.setAutoBufferSwap": ('bool',), + "QGLWidget.setColormap": ('PySide2.QtOpenGL.QGLColormap',), + "QGLWidget.swapBuffers": (), + "QGLWidget.updateGL": (), + "QGLWidget.updateOverlayGL": (), + }) + +# Module PySide2.QtQml +if "PySide2.QtQml" in sys.modules: + dict.update({ + + # class PySide2.QtQml.ListProperty: + + # class PySide2.QtQml.QJSEngine: + "QJSEngine.__init__": [(), ('PySide2.QtCore.QObject',)], + "QJSEngine.collectGarbage": (), + "QJSEngine.evaluate": ('str', 'str', 'int'), + "QJSEngine.globalObject": (), + "QJSEngine.installExtensions": ('Extensions', 'PySide2.QtQml.QJSValue'), + "QJSEngine.installTranslatorFunctions": ('PySide2.QtQml.QJSValue',), + "QJSEngine.newArray": ('int',), + "QJSEngine.newObject": (), + "QJSEngine.newQObject": ('PySide2.QtCore.QObject',), + "QJSEngine.toScriptValue": ('PySide2.support.signature.typing.Any',), + + # class PySide2.QtQml.QJSValue: + "QJSValue.__init__": [('PySide2.QtQml.QJSValue',), ('PySide2.QtQml.QJSValue.SpecialValue',), ('bool',), ('float',), ('int',), ('str',)], + "QJSValue.__copy__": (), + "QJSValue.call": ('list',), + "QJSValue.callAsConstructor": ('list',), + "QJSValue.callWithInstance": ('PySide2.QtQml.QJSValue', 'list'), + "QJSValue.deleteProperty": ('str',), + "QJSValue.engine": (), + "QJSValue.equals": ('PySide2.QtQml.QJSValue',), + "QJSValue.hasOwnProperty": ('str',), + "QJSValue.hasProperty": ('str',), + "QJSValue.isArray": (), + "QJSValue.isBool": (), + "QJSValue.isCallable": (), + "QJSValue.isDate": (), + "QJSValue.isError": (), + "QJSValue.isNull": (), + "QJSValue.isNumber": (), + "QJSValue.isObject": (), + "QJSValue.isQObject": (), + "QJSValue.isRegExp": (), + "QJSValue.isString": (), + "QJSValue.isUndefined": (), + "QJSValue.isVariant": (), + "QJSValue.property": [('int',), ('str',)], + "QJSValue.prototype": (), + "QJSValue.setProperty": [('int', 'PySide2.QtQml.QJSValue'), ('str', 'PySide2.QtQml.QJSValue')], + "QJSValue.setPrototype": ('PySide2.QtQml.QJSValue',), + "QJSValue.strictlyEquals": ('PySide2.QtQml.QJSValue',), + "QJSValue.toBool": (), + "QJSValue.toDateTime": (), + "QJSValue.toInt": (), + "QJSValue.toNumber": (), + "QJSValue.toQObject": (), + "QJSValue.toString": (), + "QJSValue.toUInt": (), + "QJSValue.toVariant": (), + + # class PySide2.QtQml.QJSValueIterator: + "QJSValueIterator.__init__": ('PySide2.QtQml.QJSValue',), + "QJSValueIterator.hasNext": (), + "QJSValueIterator.name": (), + "QJSValueIterator.next": (), + "QJSValueIterator.value": (), + + # class PySide2.QtQml.QQmlAbstractUrlInterceptor: + "QQmlAbstractUrlInterceptor.__init__": (), + "QQmlAbstractUrlInterceptor.intercept": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlAbstractUrlInterceptor.DataType'), + + # class PySide2.QtQml.QQmlApplicationEngine: + "QQmlApplicationEngine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QQmlApplicationEngine.load": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlApplicationEngine.loadData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlApplicationEngine.rootObjects": (), + + # class PySide2.QtQml.QQmlComponent: + "QQmlComponent.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject')], + "QQmlComponent.beginCreate": ('PySide2.QtQml.QQmlContext',), + "QQmlComponent.completeCreate": (), + "QQmlComponent.create": [('PySide2.QtQml.QQmlContext',), ('PySide2.QtQml.QQmlIncubator', 'PySide2.QtQml.QQmlContext', 'PySide2.QtQml.QQmlContext')], + "QQmlComponent.creationContext": (), + "QQmlComponent.errorString": (), + "QQmlComponent.errors": (), + "QQmlComponent.isError": (), + "QQmlComponent.isLoading": (), + "QQmlComponent.isNull": (), + "QQmlComponent.isReady": (), + "QQmlComponent.loadUrl": [('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode')], + "QQmlComponent.progress": (), + "QQmlComponent.setData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlComponent.status": (), + "QQmlComponent.url": (), + + # class PySide2.QtQml.QQmlContext: + "QQmlContext.__init__": [('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject')], + "QQmlContext.baseUrl": (), + "QQmlContext.contextObject": (), + "QQmlContext.contextProperty": ('str',), + "QQmlContext.engine": (), + "QQmlContext.isValid": (), + "QQmlContext.nameForObject": ('PySide2.QtCore.QObject',), + "QQmlContext.parentContext": (), + "QQmlContext.resolvedUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setContextObject": ('PySide2.QtCore.QObject',), + "QQmlContext.setContextProperty": [('str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.support.signature.typing.Any')], + + # class PySide2.QtQml.QQmlDebuggingEnabler: + "QQmlDebuggingEnabler.__init__": ('bool',), + "QQmlDebuggingEnabler.connectToLocalDebugger": ('str', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode'), + "QQmlDebuggingEnabler.startTcpDebugServer": ('int', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode', 'str'), + + # class PySide2.QtQml.QQmlEngine: + "QQmlEngine.__init__": ('PySide2.QtCore.QObject',), + "QQmlEngine.addImageProvider": ('str', 'PySide2.QtQml.QQmlImageProviderBase'), + "QQmlEngine.addImportPath": ('str',), + "QQmlEngine.addNamedBundle": ('str', 'str'), + "QQmlEngine.addPluginPath": ('str',), + "QQmlEngine.baseUrl": (), + "QQmlEngine.clearComponentCache": (), + "QQmlEngine.contextForObject": ('PySide2.QtCore.QObject',), + "QQmlEngine.event": ('PySide2.QtCore.QEvent',), + "QQmlEngine.imageProvider": ('str',), + "QQmlEngine.importPathList": (), + "QQmlEngine.importPlugin": ('str', 'str', 'list'), + "QQmlEngine.incubationController": (), + "QQmlEngine.networkAccessManager": (), + "QQmlEngine.networkAccessManagerFactory": (), + "QQmlEngine.objectOwnership": ('PySide2.QtCore.QObject',), + "QQmlEngine.offlineStoragePath": (), + "QQmlEngine.outputWarningsToStandardError": (), + "QQmlEngine.pluginPathList": (), + "QQmlEngine.removeImageProvider": ('str',), + "QQmlEngine.rootContext": (), + "QQmlEngine.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlEngine.setContextForObject": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), + "QQmlEngine.setImportPathList": ('PySide2.support.signature.typing.List',), + "QQmlEngine.setIncubationController": ('PySide2.QtQml.QQmlIncubationController',), + "QQmlEngine.setNetworkAccessManagerFactory": ('PySide2.QtQml.QQmlNetworkAccessManagerFactory',), + "QQmlEngine.setObjectOwnership": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine.ObjectOwnership'), + "QQmlEngine.setOfflineStoragePath": ('str',), + "QQmlEngine.setOutputWarningsToStandardError": ('bool',), + "QQmlEngine.setPluginPathList": ('PySide2.support.signature.typing.List',), + "QQmlEngine.setUrlInterceptor": ('PySide2.QtQml.QQmlAbstractUrlInterceptor',), + "QQmlEngine.trimComponentCache": (), + "QQmlEngine.urlInterceptor": (), + + # class PySide2.QtQml.QQmlError: + "QQmlError.__init__": [(), ('PySide2.QtQml.QQmlError',)], + "QQmlError.__copy__": (), + "QQmlError.column": (), + "QQmlError.description": (), + "QQmlError.isValid": (), + "QQmlError.line": (), + "QQmlError.object": (), + "QQmlError.setColumn": ('int',), + "QQmlError.setDescription": ('str',), + "QQmlError.setLine": ('int',), + "QQmlError.setObject": ('PySide2.QtCore.QObject',), + "QQmlError.setUrl": ('PySide2.QtCore.QUrl',), + "QQmlError.toString": (), + "QQmlError.url": (), + + # class PySide2.QtQml.QQmlExpression: + "QQmlExpression.__init__": [(), ('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlScriptString', 'PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QObject')], + "QQmlExpression.clearError": (), + "QQmlExpression.columnNumber": (), + "QQmlExpression.context": (), + "QQmlExpression.engine": (), + "QQmlExpression.error": (), + "QQmlExpression.evaluate": ('bool',), + "QQmlExpression.expression": (), + "QQmlExpression.hasError": (), + "QQmlExpression.lineNumber": (), + "QQmlExpression.notifyOnValueChanged": (), + "QQmlExpression.scopeObject": (), + "QQmlExpression.setExpression": ('str',), + "QQmlExpression.setNotifyOnValueChanged": ('bool',), + "QQmlExpression.setSourceLocation": ('str', 'int', 'int'), + "QQmlExpression.sourceFile": (), + + # class PySide2.QtQml.QQmlExtensionInterface: + "QQmlExtensionInterface.__init__": (), + "QQmlExtensionInterface.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + + # class PySide2.QtQml.QQmlExtensionPlugin: + "QQmlExtensionPlugin.__init__": ('PySide2.QtCore.QObject',), + "QQmlExtensionPlugin.baseUrl": (), + "QQmlExtensionPlugin.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + "QQmlExtensionPlugin.registerTypes": ('str',), + + # class PySide2.QtQml.QQmlFile: + "QQmlFile.__init__": [(), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.clear": [(), ('PySide2.QtCore.QObject',)], + "QQmlFile.connectDownloadProgress": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.connectFinished": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.data": (), + "QQmlFile.dataByteArray": (), + "QQmlFile.error": (), + "QQmlFile.isError": (), + "QQmlFile.isLoading": (), + "QQmlFile.isLocalFile": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.isNull": (), + "QQmlFile.isReady": (), + "QQmlFile.isSynchronous": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.load": [('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.size": (), + "QQmlFile.status": (), + "QQmlFile.url": (), + "QQmlFile.urlToLocalFileOrQrc": [('PySide2.QtCore.QUrl',), ('str',)], + + # class PySide2.QtQml.QQmlFileSelector: + "QQmlFileSelector.__init__": ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), + "QQmlFileSelector.get": ('PySide2.QtQml.QQmlEngine',), + "QQmlFileSelector.setExtraSelectors": ['PySide2.support.signature.typing.List'], + "QQmlFileSelector.setSelector": ('PySide2.QtCore.QFileSelector',), + + # class PySide2.QtQml.QQmlImageProviderBase: + "QQmlImageProviderBase.flags": (), + "QQmlImageProviderBase.imageType": (), + + # class PySide2.QtQml.QQmlIncubationController: + "QQmlIncubationController.__init__": (), + "QQmlIncubationController.engine": (), + "QQmlIncubationController.incubateFor": ('int',), + "QQmlIncubationController.incubateWhile": ('bool', 'int'), + "QQmlIncubationController.incubatingObjectCount": (), + "QQmlIncubationController.incubatingObjectCountChanged": ('int',), + + # class PySide2.QtQml.QQmlIncubator: + "QQmlIncubator.__init__": ('PySide2.QtQml.QQmlIncubator.IncubationMode',), + "QQmlIncubator.clear": (), + "QQmlIncubator.errors": (), + "QQmlIncubator.forceCompletion": (), + "QQmlIncubator.incubationMode": (), + "QQmlIncubator.isError": (), + "QQmlIncubator.isLoading": (), + "QQmlIncubator.isNull": (), + "QQmlIncubator.isReady": (), + "QQmlIncubator.object": (), + "QQmlIncubator.setInitialState": ('PySide2.QtCore.QObject',), + "QQmlIncubator.status": (), + "QQmlIncubator.statusChanged": ('PySide2.QtQml.QQmlIncubator.Status',), + + # class PySide2.QtQml.QQmlListReference: + "QQmlListReference.__init__": [(), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlListReference',)], + "QQmlListReference.__copy__": (), + "QQmlListReference.append": ('PySide2.QtCore.QObject',), + "QQmlListReference.at": ('int',), + "QQmlListReference.canAppend": (), + "QQmlListReference.canAt": (), + "QQmlListReference.canClear": (), + "QQmlListReference.canCount": (), + "QQmlListReference.clear": (), + "QQmlListReference.count": (), + "QQmlListReference.isManipulable": (), + "QQmlListReference.isReadable": (), + "QQmlListReference.isValid": (), + "QQmlListReference.listElementType": (), + "QQmlListReference.object": (), + + # class PySide2.QtQml.QQmlNetworkAccessManagerFactory: + "QQmlNetworkAccessManagerFactory.__init__": (), + "QQmlNetworkAccessManagerFactory.create": ('PySide2.QtCore.QObject',), + + # class PySide2.QtQml.QQmlParserStatus: + "QQmlParserStatus.__init__": (), + "QQmlParserStatus.classBegin": (), + "QQmlParserStatus.componentComplete": (), + + # class PySide2.QtQml.QQmlProperty: + "QQmlProperty.__init__": [(), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlProperty',)], + "QQmlProperty.__copy__": (), + "QQmlProperty.connectNotifySignal": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlProperty.hasNotifySignal": (), + "QQmlProperty.index": (), + "QQmlProperty.isDesignable": (), + "QQmlProperty.isProperty": (), + "QQmlProperty.isResettable": (), + "QQmlProperty.isSignalProperty": (), + "QQmlProperty.isValid": (), + "QQmlProperty.isWritable": (), + "QQmlProperty.method": (), + "QQmlProperty.name": (), + "QQmlProperty.needsNotifySignal": (), + "QQmlProperty.object": (), + "QQmlProperty.property": (), + "QQmlProperty.propertyType": (), + "QQmlProperty.propertyTypeCategory": (), + "QQmlProperty.propertyTypeName": (), + "QQmlProperty.read": [(), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine')], + "QQmlProperty.reset": (), + "QQmlProperty.type": (), + "QQmlProperty.write": [('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Any'), ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Any', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Any', 'PySide2.QtQml.QQmlEngine'), ('PySide2.support.signature.typing.Any',)], + + # class PySide2.QtQml.QQmlPropertyMap: + "QQmlPropertyMap.__init__": ('PySide2.QtCore.QObject',), + "QQmlPropertyMap.clear": ('str',), + "QQmlPropertyMap.contains": ('str',), + "QQmlPropertyMap.count": (), + "QQmlPropertyMap.insert": ('str', 'PySide2.support.signature.typing.Any'), + "QQmlPropertyMap.isEmpty": (), + "QQmlPropertyMap.keys": (), + "QQmlPropertyMap.size": (), + "QQmlPropertyMap.updateValue": ('str', 'PySide2.support.signature.typing.Any'), + "QQmlPropertyMap.value": ('str',), + + # class PySide2.QtQml.QQmlPropertyValueSource: + "QQmlPropertyValueSource.__init__": (), + "QQmlPropertyValueSource.setTarget": ('PySide2.QtQml.QQmlProperty',), + + # class PySide2.QtQml.QQmlScriptString: + "QQmlScriptString.__init__": [(), ('PySide2.QtQml.QQmlScriptString',)], + "QQmlScriptString.__copy__": (), + "QQmlScriptString.booleanLiteral": ('bool',), + "QQmlScriptString.isEmpty": (), + "QQmlScriptString.isNullLiteral": (), + "QQmlScriptString.isUndefinedLiteral": (), + "QQmlScriptString.numberLiteral": ('bool',), + "QQmlScriptString.stringLiteral": (), + + # class PySide2.QtQml.QQmlTypesExtensionInterface: + "QQmlTypesExtensionInterface.__init__": (), + "QQmlTypesExtensionInterface.registerTypes": ('str',), + + # class PySide2.QtQml.VolatileBool: + }) + +# Module PySide2.QtQuick +if "PySide2.QtQuick" in sys.modules: + dict.update({ + + # class PySide2.QtQuick.QQuickAsyncImageProvider: + "QQuickAsyncImageProvider.__init__": (), + "QQuickAsyncImageProvider.requestImageResponse": ('str', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickFramebufferObject: + "QQuickFramebufferObject.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickFramebufferObject.createRenderer": (), + "QQuickFramebufferObject.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickFramebufferObject.isTextureProvider": (), + "QQuickFramebufferObject.mirrorVertically": (), + "QQuickFramebufferObject.releaseResources": (), + "QQuickFramebufferObject.setMirrorVertically": ('bool',), + "QQuickFramebufferObject.setTextureFollowsItemSize": ('bool',), + "QQuickFramebufferObject.textureFollowsItemSize": (), + "QQuickFramebufferObject.textureProvider": (), + "QQuickFramebufferObject.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickImageProvider: + "QQuickImageProvider.__init__": ('PySide2.QtQml.QQmlImageProviderBase.ImageType', 'Flags'), + "QQuickImageProvider.flags": (), + "QQuickImageProvider.imageType": (), + "QQuickImageProvider.requestImage": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestPixmap": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestTexture": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickImageResponse: + "QQuickImageResponse.__init__": (), + "QQuickImageResponse.cancel": (), + "QQuickImageResponse.errorString": (), + "QQuickImageResponse.textureFactory": (), + + # class PySide2.QtQuick.QQuickItem: + "QQuickItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.acceptHoverEvents": (), + "QQuickItem.acceptedMouseButtons": (), + "QQuickItem.activeFocusOnTab": (), + "QQuickItem.antialiasing": (), + "QQuickItem.baselineOffset": (), + "QQuickItem.boundingRect": (), + "QQuickItem.childAt": ('float', 'float'), + "QQuickItem.childItems": (), + "QQuickItem.childMouseEventFilter": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickItem.childrenRect": (), + "QQuickItem.classBegin": (), + "QQuickItem.clip": (), + "QQuickItem.clipRect": (), + "QQuickItem.componentComplete": (), + "QQuickItem.contains": ('PySide2.QtCore.QPointF',), + "QQuickItem.cursor": (), + "QQuickItem.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickItem.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickItem.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickItem.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickItem.event": ('PySide2.QtCore.QEvent',), + "QQuickItem.filtersChildMouseEvents": (), + "QQuickItem.flags": (), + "QQuickItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.forceActiveFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QQuickItem.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickItem.grabMouse": (), + "QQuickItem.grabToImage": [('PySide2.QtCore.QSize',), ('PySide2.QtQml.QJSValue', 'PySide2.QtCore.QSize')], + "QQuickItem.grabTouchPoints": ('list',), + "QQuickItem.hasActiveFocus": (), + "QQuickItem.hasFocus": (), + "QQuickItem.height": (), + "QQuickItem.heightValid": (), + "QQuickItem.hoverEnterEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverLeaveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverMoveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.implicitHeight": (), + "QQuickItem.implicitWidth": (), + "QQuickItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QQuickItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QQuickItem.isComponentComplete": (), + "QQuickItem.isEnabled": (), + "QQuickItem.isFocusScope": (), + "QQuickItem.isTextureProvider": (), + "QQuickItem.isUnderMouse": (), + "QQuickItem.isVisible": (), + "QQuickItem.itemTransform": ('PySide2.QtQuick.QQuickItem', 'bool'), + "QQuickItem.keepMouseGrab": (), + "QQuickItem.keepTouchGrab": (), + "QQuickItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.mapFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapFromScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapRectFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectFromScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapRectToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectToScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapToScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseUngrabEvent": (), + "QQuickItem.nextItemInFocusChain": ('bool',), + "QQuickItem.opacity": (), + "QQuickItem.parentItem": (), + "QQuickItem.polish": (), + "QQuickItem.position": (), + "QQuickItem.releaseResources": (), + "QQuickItem.resetAntialiasing": (), + "QQuickItem.resetHeight": (), + "QQuickItem.resetWidth": (), + "QQuickItem.rotation": (), + "QQuickItem.scale": (), + "QQuickItem.scopedFocusItem": (), + "QQuickItem.setAcceptHoverEvents": ('bool',), + "QQuickItem.setAcceptedMouseButtons": ('MouseButtons',), + "QQuickItem.setActiveFocusOnTab": ('bool',), + "QQuickItem.setAntialiasing": ('bool',), + "QQuickItem.setBaselineOffset": ('float',), + "QQuickItem.setClip": ('bool',), + "QQuickItem.setCursor": ('PySide2.QtGui.QCursor',), + "QQuickItem.setEnabled": ('bool',), + "QQuickItem.setFiltersChildMouseEvents": ('bool',), + "QQuickItem.setFlag": ('PySide2.QtQuick.QQuickItem.Flag', 'bool'), + "QQuickItem.setFlags": ('Flags',), + "QQuickItem.setFocus": [('bool',), ('bool', 'PySide2.QtCore.Qt.FocusReason')], + "QQuickItem.setHeight": ('float',), + "QQuickItem.setImplicitHeight": ('float',), + "QQuickItem.setImplicitSize": ('float', 'float'), + "QQuickItem.setImplicitWidth": ('float',), + "QQuickItem.setKeepMouseGrab": ('bool',), + "QQuickItem.setKeepTouchGrab": ('bool',), + "QQuickItem.setOpacity": ('float',), + "QQuickItem.setParentItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.setPosition": ('PySide2.QtCore.QPointF',), + "QQuickItem.setRotation": ('float',), + "QQuickItem.setScale": ('float',), + "QQuickItem.setSize": ('PySide2.QtCore.QSizeF',), + "QQuickItem.setSmooth": ('bool',), + "QQuickItem.setState": ('str',), + "QQuickItem.setTransformOrigin": ('PySide2.QtQuick.QQuickItem.TransformOrigin',), + "QQuickItem.setTransformOriginPoint": ('PySide2.QtCore.QPointF',), + "QQuickItem.setVisible": ('bool',), + "QQuickItem.setWidth": ('float',), + "QQuickItem.setX": ('float',), + "QQuickItem.setY": ('float',), + "QQuickItem.setZ": ('float',), + "QQuickItem.smooth": (), + "QQuickItem.stackAfter": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.stackBefore": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.state": (), + "QQuickItem.textureProvider": (), + "QQuickItem.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QQuickItem.touchUngrabEvent": (), + "QQuickItem.transformOrigin": (), + "QQuickItem.transformOriginPoint": (), + "QQuickItem.ungrabMouse": (), + "QQuickItem.ungrabTouchPoints": (), + "QQuickItem.unsetCursor": (), + "QQuickItem.update": (), + "QQuickItem.updateInputMethod": ('InputMethodQueries',), + "QQuickItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + "QQuickItem.updatePolish": (), + "QQuickItem.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QQuickItem.width": (), + "QQuickItem.widthValid": (), + "QQuickItem.window": (), + "QQuickItem.windowDeactivateEvent": (), + "QQuickItem.x": (), + "QQuickItem.y": (), + "QQuickItem.z": (), + + # class PySide2.QtQuick.QQuickItemGrabResult: + "QQuickItemGrabResult.saveToFile": ('str',), + "QQuickItemGrabResult.event": ('PySide2.QtCore.QEvent',), + "QQuickItemGrabResult.image": (), + "QQuickItemGrabResult.url": (), + + # class PySide2.QtQuick.QQuickPaintedItem: + "QQuickPaintedItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickPaintedItem.antialiasing": (), + "QQuickPaintedItem.contentsBoundingRect": (), + "QQuickPaintedItem.contentsScale": (), + "QQuickPaintedItem.contentsSize": (), + "QQuickPaintedItem.fillColor": (), + "QQuickPaintedItem.isTextureProvider": (), + "QQuickPaintedItem.mipmap": (), + "QQuickPaintedItem.opaquePainting": (), + "QQuickPaintedItem.paint": ('PySide2.QtGui.QPainter',), + "QQuickPaintedItem.performanceHints": (), + "QQuickPaintedItem.releaseResources": (), + "QQuickPaintedItem.renderTarget": (), + "QQuickPaintedItem.resetContentsSize": (), + "QQuickPaintedItem.setAntialiasing": ('bool',), + "QQuickPaintedItem.setContentsScale": ('float',), + "QQuickPaintedItem.setContentsSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.setFillColor": ('PySide2.QtGui.QColor',), + "QQuickPaintedItem.setMipmap": ('bool',), + "QQuickPaintedItem.setOpaquePainting": ('bool',), + "QQuickPaintedItem.setPerformanceHint": ('PySide2.QtQuick.QQuickPaintedItem.PerformanceHint', 'bool'), + "QQuickPaintedItem.setPerformanceHints": ('PerformanceHints',), + "QQuickPaintedItem.setRenderTarget": ('PySide2.QtQuick.QQuickPaintedItem.RenderTarget',), + "QQuickPaintedItem.setTextureSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.textureProvider": (), + "QQuickPaintedItem.textureSize": (), + "QQuickPaintedItem.update": [(), ('PySide2.QtCore.QRect',)], + "QQuickPaintedItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickRenderControl: + "QQuickRenderControl.__init__": ('PySide2.QtCore.QObject',), + "QQuickRenderControl.grab": (), + "QQuickRenderControl.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QQuickRenderControl.invalidate": (), + "QQuickRenderControl.polishItems": (), + "QQuickRenderControl.prepareThread": ('PySide2.QtCore.QThread',), + "QQuickRenderControl.render": (), + "QQuickRenderControl.renderWindow": ('PySide2.QtCore.QPoint',), + "QQuickRenderControl.renderWindowFor": ('PySide2.QtQuick.QQuickWindow', 'PySide2.QtCore.QPoint'), + "QQuickRenderControl.sync": (), + + # class PySide2.QtQuick.QQuickTextDocument: + "QQuickTextDocument.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickTextDocument.textDocument": (), + + # class PySide2.QtQuick.QQuickTextureFactory: + "QQuickTextureFactory.__init__": (), + "QQuickTextureFactory.createTexture": ('PySide2.QtQuick.QQuickWindow',), + "QQuickTextureFactory.image": (), + "QQuickTextureFactory.textureByteCount": (), + "QQuickTextureFactory.textureFactoryForImage": ('PySide2.QtGui.QImage',), + "QQuickTextureFactory.textureSize": (), + + # class PySide2.QtQuick.QQuickTransform: + "QQuickTransform.__init__": ('PySide2.QtCore.QObject',), + "QQuickTransform.appendToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QQuickTransform.prependToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.update": (), + + # class PySide2.QtQuick.QQuickView: + "QQuickView.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtGui.QWindow'), ('PySide2.QtGui.QWindow',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtGui.QWindow')], + "QQuickView.engine": (), + "QQuickView.errors": (), + "QQuickView.initialSize": (), + "QQuickView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickView.resizeMode": (), + "QQuickView.rootContext": (), + "QQuickView.rootObject": (), + "QQuickView.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickView.setResizeMode": ('PySide2.QtQuick.QQuickView.ResizeMode',), + "QQuickView.setSource": ('PySide2.QtCore.QUrl',), + "QQuickView.sizeHint": (), + "QQuickView.source": (), + "QQuickView.status": (), + "QQuickView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtQuick.QQuickWindow: + "QQuickWindow.__init__": [('PySide2.QtGui.QWindow',), ('PySide2.QtQuick.QQuickRenderControl',)], + "QQuickWindow.accessibleRoot": (), + "QQuickWindow.activeFocusItem": (), + "QQuickWindow.clearBeforeRendering": (), + "QQuickWindow.color": (), + "QQuickWindow.contentItem": (), + "QQuickWindow.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'CreateTextureOptions'), + "QQuickWindow.createTextureFromImage": [('PySide2.QtGui.QImage',), ('PySide2.QtGui.QImage', 'CreateTextureOptions')], + "QQuickWindow.effectiveDevicePixelRatio": (), + "QQuickWindow.event": ('PySide2.QtCore.QEvent',), + "QQuickWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QQuickWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.focusObject": (), + "QQuickWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.grabWindow": (), + "QQuickWindow.hasDefaultAlphaBuffer": (), + "QQuickWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWindow.incubationController": (), + "QQuickWindow.isPersistentOpenGLContext": (), + "QQuickWindow.isPersistentSceneGraph": (), + "QQuickWindow.isSceneGraphInitialized": (), + "QQuickWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseGrabberItem": (), + "QQuickWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.openglContext": (), + "QQuickWindow.releaseResources": (), + "QQuickWindow.renderTarget": (), + "QQuickWindow.renderTargetId": (), + "QQuickWindow.renderTargetSize": (), + "QQuickWindow.resetOpenGLState": (), + "QQuickWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWindow.scheduleRenderJob": ('PySide2.QtCore.QRunnable', 'PySide2.QtQuick.QQuickWindow.RenderStage'), + "QQuickWindow.sendEvent": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickWindow.setClearBeforeRendering": ('bool',), + "QQuickWindow.setColor": ('PySide2.QtGui.QColor',), + "QQuickWindow.setDefaultAlphaBuffer": ('bool',), + "QQuickWindow.setPersistentOpenGLContext": ('bool',), + "QQuickWindow.setPersistentSceneGraph": ('bool',), + "QQuickWindow.setRenderTarget": [('PySide2.QtGui.QOpenGLFramebufferObject',), ('int', 'PySide2.QtCore.QSize')], + "QQuickWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWindow.update": (), + "QQuickWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtQuick.QSGAbstractRenderer: + "QSGAbstractRenderer.__init__": ('PySide2.QtCore.QObject',), + "QSGAbstractRenderer.clearColor": (), + "QSGAbstractRenderer.clearMode": (), + "QSGAbstractRenderer.deviceRect": (), + "QSGAbstractRenderer.nodeChanged": ('PySide2.QtQuick.QSGNode', 'DirtyState'), + "QSGAbstractRenderer.projectionMatrix": (), + "QSGAbstractRenderer.renderScene": ('int',), + "QSGAbstractRenderer.setClearColor": ('PySide2.QtGui.QColor',), + "QSGAbstractRenderer.setClearMode": ('ClearMode',), + "QSGAbstractRenderer.setDeviceRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.setProjectionMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGAbstractRenderer.setProjectionMatrixToRect": ('PySide2.QtCore.QRectF',), + "QSGAbstractRenderer.setViewportRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.viewportRect": (), + + # class PySide2.QtQuick.QSGBasicGeometryNode: + "QSGBasicGeometryNode.__init__": ('PySide2.QtQuick.QSGNode.NodeType',), + "QSGBasicGeometryNode.clipList": (), + "QSGBasicGeometryNode.geometry": [], + "QSGBasicGeometryNode.matrix": (), + "QSGBasicGeometryNode.setGeometry": ('PySide2.QtQuick.QSGGeometry',), + + # class PySide2.QtQuick.QSGClipNode: + "QSGClipNode.__init__": (), + "QSGClipNode.clipRect": (), + "QSGClipNode.isRectangular": (), + "QSGClipNode.setClipRect": ('PySide2.QtCore.QRectF',), + "QSGClipNode.setIsRectangular": ('bool',), + + # class PySide2.QtQuick.QSGDynamicTexture: + "QSGDynamicTexture.__init__": (), + "QSGDynamicTexture.updateTexture": (), + + # class PySide2.QtQuick.QSGEngine: + "QSGEngine.__init__": ('PySide2.QtCore.QObject',), + "QSGEngine.createRenderer": (), + "QSGEngine.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'CreateTextureOptions'), + "QSGEngine.createTextureFromImage": ('PySide2.QtGui.QImage', 'CreateTextureOptions'), + "QSGEngine.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QSGEngine.invalidate": (), + + # class PySide2.QtQuick.QSGGeometry: + "QSGGeometry.__init__": ('PySide2.QtQuick.QSGGeometry.AttributeSet', 'int', 'int', 'int'), + "QSGGeometry.allocate": ('int', 'int'), + "QSGGeometry.attributeCount": (), + "QSGGeometry.attributes": (), + "QSGGeometry.defaultAttributes_ColoredPoint2D": (), + "QSGGeometry.defaultAttributes_Point2D": (), + "QSGGeometry.defaultAttributes_TexturedPoint2D": (), + "QSGGeometry.drawingMode": (), + "QSGGeometry.indexCount": (), + "QSGGeometry.indexData": [], + "QSGGeometry.indexDataAsUInt": [], + "QSGGeometry.indexDataAsUShort": [], + "QSGGeometry.indexDataPattern": (), + "QSGGeometry.indexType": (), + "QSGGeometry.lineWidth": (), + "QSGGeometry.markIndexDataDirty": (), + "QSGGeometry.markVertexDataDirty": (), + "QSGGeometry.setDrawingMode": ('int',), + "QSGGeometry.setIndexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.setLineWidth": ('float',), + "QSGGeometry.setVertexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.sizeOfIndex": (), + "QSGGeometry.sizeOfVertex": (), + "QSGGeometry.updateRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateTexturedRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QSGGeometry.vertexCount": (), + "QSGGeometry.vertexData": [], + "QSGGeometry.vertexDataAsColoredPoint2D": [], + "QSGGeometry.vertexDataAsPoint2D": [], + "QSGGeometry.vertexDataAsTexturedPoint2D": [], + "QSGGeometry.vertexDataPattern": (), + + # class PySide2.QtQuick.QSGGeometryNode: + "QSGGeometryNode.__init__": (), + "QSGGeometryNode.inheritedOpacity": (), + "QSGGeometryNode.renderOrder": (), + "QSGGeometryNode.setInheritedOpacity": ('float',), + "QSGGeometryNode.setRenderOrder": ('int',), + + # class PySide2.QtQuick.QSGMaterialType: + "QSGMaterialType.__init__": (), + + # class PySide2.QtQuick.QSGNode: + "QSGNode.__init__": [(), ('PySide2.QtQuick.QSGNode.NodeType',)], + "QSGNode.appendChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.childAtIndex": ('int',), + "QSGNode.childCount": (), + "QSGNode.clearDirty": (), + "QSGNode.dirtyState": (), + "QSGNode.firstChild": (), + "QSGNode.flags": (), + "QSGNode.insertChildNodeAfter": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.insertChildNodeBefore": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.isSubtreeBlocked": (), + "QSGNode.lastChild": (), + "QSGNode.markDirty": ('DirtyState',), + "QSGNode.nextSibling": (), + "QSGNode.parent": (), + "QSGNode.prependChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.preprocess": (), + "QSGNode.previousSibling": (), + "QSGNode.removeAllChildNodes": (), + "QSGNode.removeChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.reparentChildNodesTo": ('PySide2.QtQuick.QSGNode',), + "QSGNode.setFlag": ('PySide2.QtQuick.QSGNode.Flag', 'bool'), + "QSGNode.setFlags": ('Flags', 'bool'), + "QSGNode.type": (), + + # class PySide2.QtQuick.QSGOpacityNode: + "QSGOpacityNode.__init__": (), + "QSGOpacityNode.combinedOpacity": (), + "QSGOpacityNode.isSubtreeBlocked": (), + "QSGOpacityNode.opacity": (), + "QSGOpacityNode.setCombinedOpacity": ('float',), + "QSGOpacityNode.setOpacity": ('float',), + + # class PySide2.QtQuick.QSGSimpleRectNode: + "QSGSimpleRectNode.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor')], + "QSGSimpleRectNode.color": (), + "QSGSimpleRectNode.rect": (), + "QSGSimpleRectNode.setColor": ('PySide2.QtGui.QColor',), + "QSGSimpleRectNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + + # class PySide2.QtQuick.QSGSimpleTextureNode: + "QSGSimpleTextureNode.__init__": (), + "QSGSimpleTextureNode.filtering": (), + "QSGSimpleTextureNode.ownsTexture": (), + "QSGSimpleTextureNode.rect": (), + "QSGSimpleTextureNode.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGSimpleTextureNode.setOwnsTexture": ('bool',), + "QSGSimpleTextureNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setSourceRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setTexture": ('PySide2.QtQuick.QSGTexture',), + "QSGSimpleTextureNode.setTextureCoordinatesTransform": ('TextureCoordinatesTransformMode',), + "QSGSimpleTextureNode.sourceRect": (), + "QSGSimpleTextureNode.texture": (), + "QSGSimpleTextureNode.textureCoordinatesTransform": (), + + # class PySide2.QtQuick.QSGTexture: + "QSGTexture.__init__": (), + "QSGTexture.bind": (), + "QSGTexture.convertToNormalizedSourceRect": ('PySide2.QtCore.QRectF',), + "QSGTexture.filtering": (), + "QSGTexture.hasAlphaChannel": (), + "QSGTexture.hasMipmaps": (), + "QSGTexture.horizontalWrapMode": (), + "QSGTexture.isAtlasTexture": (), + "QSGTexture.mipmapFiltering": (), + "QSGTexture.normalizedTextureSubRect": (), + "QSGTexture.removedFromAtlas": (), + "QSGTexture.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setHorizontalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.setMipmapFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setVerticalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.textureId": (), + "QSGTexture.textureSize": (), + "QSGTexture.updateBindOptions": ('bool',), + "QSGTexture.verticalWrapMode": (), + + # class PySide2.QtQuick.QSGTextureProvider: + "QSGTextureProvider.__init__": (), + "QSGTextureProvider.texture": (), + + # class PySide2.QtQuick.QSGTransformNode: + "QSGTransformNode.__init__": (), + "QSGTransformNode.combinedMatrix": (), + "QSGTransformNode.matrix": (), + "QSGTransformNode.setCombinedMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGTransformNode.setMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSharedPointer: + "QSharedPointer.__copy__": (), + "QSharedPointer.data": (), + }) + +# Module PySide2.QtQuickWidgets +if "PySide2.QtQuickWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtQuickWidgets.QQuickWidget: + "QQuickWidget.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QQuickWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickWidget.engine": (), + "QQuickWidget.errors": (), + "QQuickWidget.event": ('PySide2.QtCore.QEvent',), + "QQuickWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.format": (), + "QQuickWidget.grabFramebuffer": (), + "QQuickWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWidget.initialSize": (), + "QQuickWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.quickWindow": (), + "QQuickWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWidget.resizeMode": (), + "QQuickWidget.rootContext": (), + "QQuickWidget.rootObject": (), + "QQuickWidget.setClearColor": ('PySide2.QtGui.QColor',), + "QQuickWidget.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QQuickWidget.setResizeMode": ('PySide2.QtQuickWidgets.QQuickWidget.ResizeMode',), + "QQuickWidget.setSource": ('PySide2.QtCore.QUrl',), + "QQuickWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWidget.sizeHint": (), + "QQuickWidget.source": (), + "QQuickWidget.status": (), + "QQuickWidget.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QQuickWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + }) + +# Module PySide2.QtSvg +if "PySide2.QtSvg" in sys.modules: + dict.update({ + + # class PySide2.QtSvg.QGraphicsSvgItem: + "QGraphicsSvgItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSvgItem.boundingRect": (), + "QGraphicsSvgItem.elementId": (), + "QGraphicsSvgItem.isCachingEnabled": (), + "QGraphicsSvgItem.maximumCacheSize": (), + "QGraphicsSvgItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSvgItem.renderer": (), + "QGraphicsSvgItem.setCachingEnabled": ('bool',), + "QGraphicsSvgItem.setElementId": ('str',), + "QGraphicsSvgItem.setMaximumCacheSize": ('PySide2.QtCore.QSize',), + "QGraphicsSvgItem.setSharedRenderer": ('PySide2.QtSvg.QSvgRenderer',), + "QGraphicsSvgItem.type": (), + + # class PySide2.QtSvg.QSvgGenerator: + "QSvgGenerator.__init__": (), + "QSvgGenerator.description": (), + "QSvgGenerator.fileName": (), + "QSvgGenerator.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QSvgGenerator.outputDevice": (), + "QSvgGenerator.paintEngine": (), + "QSvgGenerator.resolution": (), + "QSvgGenerator.setDescription": ('str',), + "QSvgGenerator.setFileName": ('str',), + "QSvgGenerator.setOutputDevice": ('PySide2.QtCore.QIODevice',), + "QSvgGenerator.setResolution": ('int',), + "QSvgGenerator.setSize": ('PySide2.QtCore.QSize',), + "QSvgGenerator.setTitle": ('str',), + "QSvgGenerator.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgGenerator.size": (), + "QSvgGenerator.title": (), + "QSvgGenerator.viewBox": (), + "QSvgGenerator.viewBoxF": (), + + # class PySide2.QtSvg.QSvgRenderer: + "QSvgRenderer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QXmlStreamReader', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QSvgRenderer.animated": (), + "QSvgRenderer.animationDuration": (), + "QSvgRenderer.boundsOnElement": ('str',), + "QSvgRenderer.currentFrame": (), + "QSvgRenderer.defaultSize": (), + "QSvgRenderer.elementExists": ('str',), + "QSvgRenderer.framesPerSecond": (), + "QSvgRenderer.isValid": (), + "QSvgRenderer.load": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QXmlStreamReader',), ('str',)], + "QSvgRenderer.matrixForElement": ('str',), + "QSvgRenderer.render": [('PySide2.QtGui.QPainter',), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), ('PySide2.QtGui.QPainter', 'str', 'PySide2.QtCore.QRectF')], + "QSvgRenderer.setCurrentFrame": ('int',), + "QSvgRenderer.setFramesPerSecond": ('int',), + "QSvgRenderer.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgRenderer.viewBox": (), + "QSvgRenderer.viewBoxF": (), + + # class PySide2.QtSvg.QSvgWidget: + "QSvgWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QSvgWidget.load": [('PySide2.QtCore.QByteArray',), ('str',)], + "QSvgWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSvgWidget.renderer": (), + "QSvgWidget.sizeHint": (), + }) + +# Module PySide2.QtUiTools +if "PySide2.QtUiTools" in sys.modules: + dict.update({ + + # class PySide2.QtUiTools.QUiLoader: + "QUiLoader.__init__": ('PySide2.QtCore.QObject',), + "QUiLoader.addPluginPath": ('str',), + "QUiLoader.availableLayouts": (), + "QUiLoader.availableWidgets": (), + "QUiLoader.clearPluginPaths": (), + "QUiLoader.createAction": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createActionGroup": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createLayout": ('str', 'PySide2.QtCore.QObject', 'str'), + "QUiLoader.createWidget": ('str', 'PySide2.QtWidgets.QWidget', 'str'), + "QUiLoader.errorString": (), + "QUiLoader.isLanguageChangeEnabled": (), + "QUiLoader.isTranslationEnabled": (), + "QUiLoader.load": [('PySide2.QtCore.QIODevice', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QWidget')], + "QUiLoader.pluginPaths": (), + "QUiLoader.registerCustomWidget": ('object',), + "QUiLoader.setLanguageChangeEnabled": ('bool',), + "QUiLoader.setTranslationEnabled": ('bool',), + "QUiLoader.setWorkingDirectory": ('PySide2.QtCore.QDir',), + "QUiLoader.workingDirectory": (), + }) + +# Module PySide2.QtWebChannel +if "PySide2.QtWebChannel" in sys.modules: + dict.update({ + + # class PySide2.QtWebChannel.QWebChannel: + "QWebChannel.__init__": ('PySide2.QtCore.QObject',), + "QWebChannel.blockUpdates": (), + "QWebChannel.connectTo": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.deregisterObject": ('PySide2.QtCore.QObject',), + "QWebChannel.disconnectFrom": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.registerObject": ('str', 'PySide2.QtCore.QObject'), + "QWebChannel.registerObjects": ('dict',), + "QWebChannel.registeredObjects": (), + "QWebChannel.setBlockUpdates": ('bool',), + + # class PySide2.QtWebChannel.QWebChannelAbstractTransport: + "QWebChannelAbstractTransport.__init__": ('PySide2.QtCore.QObject',), + "QWebChannelAbstractTransport.sendMessage": ('dict',), + }) + +# Module PySide2.QtWebEngineWidgets +if "PySide2.QtWebEngineWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWebEngineWidgets.QWebEngineCertificateError: + "QWebEngineCertificateError.__init__": ('int', 'PySide2.QtCore.QUrl', 'bool', 'str'), + "QWebEngineCertificateError.error": (), + "QWebEngineCertificateError.errorDescription": (), + "QWebEngineCertificateError.isOverridable": (), + "QWebEngineCertificateError.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineDownloadItem: + "QWebEngineDownloadItem.mimeType": (), + "QWebEngineDownloadItem.accept": (), + "QWebEngineDownloadItem.cancel": (), + "QWebEngineDownloadItem.id": (), + "QWebEngineDownloadItem.isFinished": (), + "QWebEngineDownloadItem.path": (), + "QWebEngineDownloadItem.receivedBytes": (), + "QWebEngineDownloadItem.setPath": ('str',), + "QWebEngineDownloadItem.state": (), + "QWebEngineDownloadItem.totalBytes": (), + "QWebEngineDownloadItem.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineHistoryItem: + "QWebEngineHistoryItem.__init__": ('PySide2.QtWebEngineWidgets.QWebEngineHistoryItem',), + "QWebEngineHistoryItem.__copy__": (), + "QWebEngineHistoryItem.iconUrl": (), + "QWebEngineHistoryItem.isValid": (), + "QWebEngineHistoryItem.lastVisited": (), + "QWebEngineHistoryItem.originalUrl": (), + "QWebEngineHistoryItem.swap": ('PySide2.QtWebEngineWidgets.QWebEngineHistoryItem',), + "QWebEngineHistoryItem.title": (), + "QWebEngineHistoryItem.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEnginePage: + "QWebEnginePage.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtWebEngineWidgets.QWebEngineProfile', 'PySide2.QtCore.QObject')], + "QWebEnginePage.acceptNavigationRequest": ('PySide2.QtCore.QUrl', 'PySide2.QtWebEngineWidgets.QWebEnginePage.NavigationType', 'bool'), + "QWebEnginePage.action": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction',), + "QWebEnginePage.backgroundColor": (), + "QWebEnginePage.certificateError": ('PySide2.QtWebEngineWidgets.QWebEngineCertificateError',), + "QWebEnginePage.chooseFiles": ('PySide2.QtWebEngineWidgets.QWebEnginePage.FileSelectionMode', 'PySide2.support.signature.typing.List', 'PySide2.support.signature.typing.List'), + "QWebEnginePage.createStandardContextMenu": (), + "QWebEnginePage.createWindow": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebWindowType',), + "QWebEnginePage.event": ('PySide2.QtCore.QEvent',), + "QWebEnginePage.findText": ('str', 'FindFlags'), + "QWebEnginePage.hasSelection": (), + "QWebEnginePage.iconUrl": (), + "QWebEnginePage.javaScriptAlert": ('PySide2.QtCore.QUrl', 'str'), + "QWebEnginePage.javaScriptConfirm": ('PySide2.QtCore.QUrl', 'str'), + "QWebEnginePage.javaScriptConsoleMessage": ('PySide2.QtWebEngineWidgets.QWebEnginePage.JavaScriptConsoleMessageLevel', 'str', 'int', 'str'), + "QWebEnginePage.javaScriptPrompt": ('PySide2.QtCore.QUrl', 'str', 'str', 'str'), + "QWebEnginePage.load": ('PySide2.QtCore.QUrl',), + "QWebEnginePage.profile": (), + "QWebEnginePage.requestedUrl": (), + "QWebEnginePage.runJavaScript": ('str',), + "QWebEnginePage.selectedText": (), + "QWebEnginePage.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QWebEnginePage.setContent": ('PySide2.QtCore.QByteArray', 'str', 'PySide2.QtCore.QUrl'), + "QWebEnginePage.setFeaturePermission": ('PySide2.QtCore.QUrl', 'PySide2.QtWebEngineWidgets.QWebEnginePage.Feature', 'PySide2.QtWebEngineWidgets.QWebEnginePage.PermissionPolicy'), + "QWebEnginePage.setHtml": ('str', 'PySide2.QtCore.QUrl'), + "QWebEnginePage.setUrl": ('PySide2.QtCore.QUrl',), + "QWebEnginePage.setView": ('PySide2.QtWidgets.QWidget',), + "QWebEnginePage.setWebChannel": ('PySide2.QtWebChannel.QWebChannel',), + "QWebEnginePage.setZoomFactor": ('float',), + "QWebEnginePage.title": (), + "QWebEnginePage.triggerAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction', 'bool'), + "QWebEnginePage.url": (), + "QWebEnginePage.view": (), + "QWebEnginePage.webChannel": (), + "QWebEnginePage.zoomFactor": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineProfile: + "QWebEngineProfile.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QWebEngineProfile.cachePath": (), + "QWebEngineProfile.clearAllVisitedLinks": (), + "QWebEngineProfile.clearVisitedLinks": ('list',), + "QWebEngineProfile.defaultProfile": (), + "QWebEngineProfile.httpAcceptLanguage": (), + "QWebEngineProfile.httpCacheMaximumSize": (), + "QWebEngineProfile.httpCacheType": (), + "QWebEngineProfile.httpUserAgent": (), + "QWebEngineProfile.isOffTheRecord": (), + "QWebEngineProfile.persistentCookiesPolicy": (), + "QWebEngineProfile.persistentStoragePath": (), + "QWebEngineProfile.removeAllUrlSchemeHandlers": (), + "QWebEngineProfile.removeUrlScheme": ('PySide2.QtCore.QByteArray',), + "QWebEngineProfile.setCachePath": ('str',), + "QWebEngineProfile.setHttpAcceptLanguage": ('str',), + "QWebEngineProfile.setHttpCacheMaximumSize": ('int',), + "QWebEngineProfile.setHttpCacheType": ('PySide2.QtWebEngineWidgets.QWebEngineProfile.HttpCacheType',), + "QWebEngineProfile.setHttpUserAgent": ('str',), + "QWebEngineProfile.setPersistentCookiesPolicy": ('PySide2.QtWebEngineWidgets.QWebEngineProfile.PersistentCookiesPolicy',), + "QWebEngineProfile.setPersistentStoragePath": ('str',), + "QWebEngineProfile.storageName": (), + "QWebEngineProfile.visitedLinksContainsUrl": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtWebEngineWidgets.QWebEngineScript: + "QWebEngineScript.__init__": [(), ('PySide2.QtWebEngineWidgets.QWebEngineScript',)], + "QWebEngineScript.__copy__": (), + "QWebEngineScript.injectionPoint": (), + "QWebEngineScript.isNull": (), + "QWebEngineScript.name": (), + "QWebEngineScript.runsOnSubFrames": (), + "QWebEngineScript.setInjectionPoint": ('PySide2.QtWebEngineWidgets.QWebEngineScript.InjectionPoint',), + "QWebEngineScript.setName": ('str',), + "QWebEngineScript.setRunsOnSubFrames": ('bool',), + "QWebEngineScript.setSourceCode": ('str',), + "QWebEngineScript.setWorldId": ('int',), + "QWebEngineScript.sourceCode": (), + "QWebEngineScript.swap": ('PySide2.QtWebEngineWidgets.QWebEngineScript',), + "QWebEngineScript.worldId": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineView: + "QWebEngineView.__init__": ('PySide2.QtWidgets.QWidget',), + "QWebEngineView.back": (), + "QWebEngineView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWebEngineView.createWindow": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebWindowType',), + "QWebEngineView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWebEngineView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWebEngineView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWebEngineView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWebEngineView.event": ('PySide2.QtCore.QEvent',), + "QWebEngineView.findText": ('str', 'FindFlags'), + "QWebEngineView.forward": (), + "QWebEngineView.hasSelection": (), + "QWebEngineView.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWebEngineView.iconUrl": (), + "QWebEngineView.load": ('PySide2.QtCore.QUrl',), + "QWebEngineView.page": (), + "QWebEngineView.pageAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction',), + "QWebEngineView.reload": (), + "QWebEngineView.selectedText": (), + "QWebEngineView.setContent": ('PySide2.QtCore.QByteArray', 'str', 'PySide2.QtCore.QUrl'), + "QWebEngineView.setHtml": ('str', 'PySide2.QtCore.QUrl'), + "QWebEngineView.setPage": ('PySide2.QtWebEngineWidgets.QWebEnginePage',), + "QWebEngineView.setUrl": ('PySide2.QtCore.QUrl',), + "QWebEngineView.setZoomFactor": ('float',), + "QWebEngineView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWebEngineView.sizeHint": (), + "QWebEngineView.stop": (), + "QWebEngineView.title": (), + "QWebEngineView.triggerPageAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction', 'bool'), + "QWebEngineView.url": (), + "QWebEngineView.zoomFactor": (), + }) + +# Module PySide2.QtWebSockets +if "PySide2.QtWebSockets" in sys.modules: + dict.update({ + + # class PySide2.QtWebSockets.QMaskGenerator: + "QMaskGenerator.__init__": ('PySide2.QtCore.QObject',), + "QMaskGenerator.nextMask": (), + "QMaskGenerator.seed": (), + + # class PySide2.QtWebSockets.QWebSocket: + "QWebSocket.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketProtocol.Version', 'PySide2.QtCore.QObject'), + "QWebSocket.abort": (), + "QWebSocket.close": ('PySide2.QtWebSockets.QWebSocketProtocol.CloseCode', 'str'), + "QWebSocket.closeCode": (), + "QWebSocket.closeReason": (), + "QWebSocket.errorString": (), + "QWebSocket.flush": (), + "QWebSocket.isValid": (), + "QWebSocket.localAddress": (), + "QWebSocket.localPort": (), + "QWebSocket.maskGenerator": (), + "QWebSocket.open": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QWebSocket.origin": (), + "QWebSocket.pauseMode": (), + "QWebSocket.peerAddress": (), + "QWebSocket.peerName": (), + "QWebSocket.peerPort": (), + "QWebSocket.ping": ('PySide2.QtCore.QByteArray',), + "QWebSocket.proxy": (), + "QWebSocket.readBufferSize": (), + "QWebSocket.request": (), + "QWebSocket.requestUrl": (), + "QWebSocket.resourceName": (), + "QWebSocket.resume": (), + "QWebSocket.sendBinaryMessage": ('PySide2.QtCore.QByteArray',), + "QWebSocket.sendTextMessage": ('str',), + "QWebSocket.setMaskGenerator": ('PySide2.QtWebSockets.QMaskGenerator',), + "QWebSocket.setPauseMode": ('PauseModes',), + "QWebSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocket.setReadBufferSize": ('int',), + "QWebSocket.state": (), + "QWebSocket.version": (), + + # class PySide2.QtWebSockets.QWebSocketCorsAuthenticator: + "QWebSocketCorsAuthenticator.__init__": [('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), ('str',)], + "QWebSocketCorsAuthenticator.allowed": (), + "QWebSocketCorsAuthenticator.origin": (), + "QWebSocketCorsAuthenticator.setAllowed": ('bool',), + "QWebSocketCorsAuthenticator.swap": ('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), + + # class PySide2.QtWebSockets.QWebSocketProtocol: + + # class PySide2.QtWebSockets.QWebSocketServer: + "QWebSocketServer.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketServer.SslMode', 'PySide2.QtCore.QObject'), + "QWebSocketServer.close": (), + "QWebSocketServer.error": (), + "QWebSocketServer.errorString": (), + "QWebSocketServer.hasPendingConnections": (), + "QWebSocketServer.isListening": (), + "QWebSocketServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QWebSocketServer.maxPendingConnections": (), + "QWebSocketServer.nextPendingConnection": (), + "QWebSocketServer.pauseAccepting": (), + "QWebSocketServer.proxy": (), + "QWebSocketServer.resumeAccepting": (), + "QWebSocketServer.secureMode": (), + "QWebSocketServer.serverAddress": (), + "QWebSocketServer.serverName": (), + "QWebSocketServer.serverPort": (), + "QWebSocketServer.serverUrl": (), + "QWebSocketServer.setMaxPendingConnections": ('int',), + "QWebSocketServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocketServer.setServerName": ('str',), + "QWebSocketServer.setSocketDescriptor": ('int',), + "QWebSocketServer.socketDescriptor": (), + "QWebSocketServer.supportedVersions": (), + }) + +# eof diff --git a/sources/pyside2/tests/registry/exists_linux_5_9_4_ci.py b/sources/pyside2/tests/registry/exists_linux_5_9_4_ci.py new file mode 100644 index 0000000..636c88a --- /dev/null +++ b/sources/pyside2/tests/registry/exists_linux_5_9_4_ci.py @@ -0,0 +1,16262 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" +This file contains the simplified signatures for all functions in PySide +for module 'exists_linux_5_9_4_ci'. There are no default values, no variable +names and no self parameter. Only types are present after simplification. +The functions 'next' resp. '__next__' are removed +to make the output identical for Python 2 and 3. +""" + +import sys + +dict = {} + +# Module PySide2.QtCore +if "PySide2.QtCore" in sys.modules: + dict.update({ + + # class PySide2.QtCore.ClassInfo: + + # class PySide2.QtCore.MetaFunction: + + # class PySide2.QtCore.Property: + + # class PySide2.QtCore.QAbstractAnimation: + "QAbstractAnimation.__init__": ('PySide2.QtCore.QObject',), + "QAbstractAnimation.currentLoop": (), + "QAbstractAnimation.currentLoopTime": (), + "QAbstractAnimation.currentTime": (), + "QAbstractAnimation.direction": (), + "QAbstractAnimation.duration": (), + "QAbstractAnimation.event": ('PySide2.QtCore.QEvent',), + "QAbstractAnimation.group": (), + "QAbstractAnimation.loopCount": (), + "QAbstractAnimation.pause": (), + "QAbstractAnimation.resume": (), + "QAbstractAnimation.setCurrentTime": ('int',), + "QAbstractAnimation.setDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.setLoopCount": ('int',), + "QAbstractAnimation.setPaused": ('bool',), + "QAbstractAnimation.start": ('PySide2.QtCore.QAbstractAnimation.DeletionPolicy',), + "QAbstractAnimation.state": (), + "QAbstractAnimation.stop": (), + "QAbstractAnimation.totalDuration": (), + "QAbstractAnimation.updateCurrentTime": ('int',), + "QAbstractAnimation.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QAbstractEventDispatcher: + "QAbstractEventDispatcher.__init__": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.closingDown": (), + "QAbstractEventDispatcher.flush": (), + "QAbstractEventDispatcher.hasPendingEvents": (), + "QAbstractEventDispatcher.instance": ('PySide2.QtCore.QThread',), + "QAbstractEventDispatcher.interrupt": (), + "QAbstractEventDispatcher.processEvents": ('ProcessEventsFlags',), + "QAbstractEventDispatcher.registerSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.registerTimer": [('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject'), ('int', 'int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QAbstractEventDispatcher.registeredTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.remainingTime": ('int',), + "QAbstractEventDispatcher.startingUp": (), + "QAbstractEventDispatcher.unregisterSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.unregisterTimer": ('int',), + "QAbstractEventDispatcher.unregisterTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.wakeUp": (), + + # class PySide2.QtCore.QAbstractItemModel: + "QAbstractItemModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginMoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginMoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginResetModel": (), + "QAbstractItemModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.changePersistentIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.changePersistentIndexList": ('List[int]', 'List[int]'), + "QAbstractItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object')], + "QAbstractItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.decodeData": ('int', 'int', 'PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.encodeData": ('List[int]', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.endInsertColumns": (), + "QAbstractItemModel.endInsertRows": (), + "QAbstractItemModel.endMoveColumns": (), + "QAbstractItemModel.endMoveRows": (), + "QAbstractItemModel.endRemoveColumns": (), + "QAbstractItemModel.endRemoveRows": (), + "QAbstractItemModel.endResetModel": (), + "QAbstractItemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasIndex": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'MatchFlags'), + "QAbstractItemModel.mimeData": ('List[int]',), + "QAbstractItemModel.mimeTypes": (), + "QAbstractItemModel.moveColumn": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRow": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemModel.persistentIndexList": (), + "QAbstractItemModel.removeColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.resetInternalData": (), + "QAbstractItemModel.revert": (), + "QAbstractItemModel.roleNames": (), + "QAbstractItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QAbstractItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QAbstractItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractItemModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.submit": (), + "QAbstractItemModel.supportedDragActions": (), + "QAbstractItemModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractListModel: + "QAbstractListModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractListModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractProxyModel: + "QAbstractProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractProxyModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mimeData": ('List[int]',), + "QAbstractProxyModel.mimeTypes": (), + "QAbstractProxyModel.resetInternalData": (), + "QAbstractProxyModel.revert": (), + "QAbstractProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QAbstractProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QAbstractProxyModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractProxyModel.sourceModel": (), + "QAbstractProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.submit": (), + "QAbstractProxyModel.supportedDragActions": (), + "QAbstractProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractState: + "QAbstractState.__init__": ('PySide2.QtCore.QState',), + "QAbstractState.active": (), + "QAbstractState.event": ('PySide2.QtCore.QEvent',), + "QAbstractState.machine": (), + "QAbstractState.onEntry": ('PySide2.QtCore.QEvent',), + "QAbstractState.onExit": ('PySide2.QtCore.QEvent',), + "QAbstractState.parentState": (), + + # class PySide2.QtCore.QAbstractTableModel: + "QAbstractTableModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractTableModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractTableModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractTransition: + "QAbstractTransition.__init__": ('PySide2.QtCore.QState',), + "QAbstractTransition.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.animations": (), + "QAbstractTransition.event": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.machine": (), + "QAbstractTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.setTargetState": ('PySide2.QtCore.QAbstractState',), + "QAbstractTransition.setTargetStates": ('list',), + "QAbstractTransition.setTransitionType": ('PySide2.QtCore.QAbstractTransition.TransitionType',), + "QAbstractTransition.sourceState": (), + "QAbstractTransition.targetState": (), + "QAbstractTransition.targetStates": (), + "QAbstractTransition.transitionType": (), + + # class PySide2.QtCore.QAnimationGroup: + "QAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QAnimationGroup.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.animationAt": ('int',), + "QAnimationGroup.animationCount": (), + "QAnimationGroup.clear": (), + "QAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QAnimationGroup.indexOfAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.insertAnimation": ('int', 'PySide2.QtCore.QAbstractAnimation'), + "QAnimationGroup.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.takeAnimation": ('int',), + + # class PySide2.QtCore.QBasicMutex: + "QBasicMutex.__init__": (), + "QBasicMutex.isRecursive": (), + "QBasicMutex.lock": (), + "QBasicMutex.tryLock": (), + "QBasicMutex.try_lock": (), + "QBasicMutex.unlock": (), + + # class PySide2.QtCore.QBasicTimer: + "QBasicTimer.__init__": [(), ('PySide2.QtCore.QBasicTimer',)], + "QBasicTimer.__copy__": (), + "QBasicTimer.isActive": (), + "QBasicTimer.start": [('int', 'PySide2.QtCore.QObject'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QBasicTimer.stop": (), + "QBasicTimer.timerId": (), + + # class PySide2.QtCore.QBitArray: + "QBitArray.__init__": [(), ('PySide2.QtCore.QBitArray',), ('int', 'bool')], + "QBitArray.__copy__": (), + "QBitArray.at": ('int',), + "QBitArray.clear": (), + "QBitArray.clearBit": ('int',), + "QBitArray.count": [(), ('bool',)], + "QBitArray.fill": [('bool', 'int'), ('bool', 'int', 'int')], + "QBitArray.isEmpty": (), + "QBitArray.isNull": (), + "QBitArray.resize": ('int',), + "QBitArray.setBit": [('int',), ('int', 'bool')], + "QBitArray.size": (), + "QBitArray.swap": ('PySide2.QtCore.QBitArray',), + "QBitArray.testBit": ('int',), + "QBitArray.toggleBit": ('int',), + "QBitArray.truncate": ('int',), + + # class PySide2.QtCore.QBuffer: + "QBuffer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QBuffer.atEnd": (), + "QBuffer.buffer": (), + "QBuffer.canReadLine": (), + "QBuffer.close": (), + "QBuffer.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.data": (), + "QBuffer.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.open": ('OpenMode',), + "QBuffer.pos": (), + "QBuffer.readData": ('str', 'int'), + "QBuffer.seek": ('int',), + "QBuffer.setBuffer": ('PySide2.QtCore.QByteArray',), + "QBuffer.setData": ('PySide2.QtCore.QByteArray',), + "QBuffer.size": (), + "QBuffer.writeData": ('str', 'int'), + + # class PySide2.QtCore.QByteArray: + "QByteArray.__init__": [(), ('PySide2.QtCore.QByteArray',), ('int', 'Union[str, int]'), ('bytes',), ('bytearray',)], + "QByteArray.__copy__": (), + "QByteArray.__reduce__": (), + "QByteArray.append": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',), ('int', 'Union[str, int]')], + "QByteArray.at": ('int',), + "QByteArray.capacity": (), + "QByteArray.cbegin": (), + "QByteArray.cend": (), + "QByteArray.chop": ('int',), + "QByteArray.clear": (), + "QByteArray.contains": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.count": [(), ('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.data": (), + "QByteArray.endsWith": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.fill": ('Union[str, int]', 'int'), + "QByteArray.fromBase64": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'Base64Options')], + "QByteArray.fromHex": ('PySide2.QtCore.QByteArray',), + "QByteArray.fromPercentEncoding": ('PySide2.QtCore.QByteArray', 'Union[str, int]'), + "QByteArray.fromRawData": ('str', 'int'), + "QByteArray.indexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.insert": [('int', 'PySide2.QtCore.QByteArray'), ('int', 'int', 'Union[str, int]')], + "QByteArray.isEmpty": (), + "QByteArray.isNull": (), + "QByteArray.isSharedWith": ('PySide2.QtCore.QByteArray',), + "QByteArray.lastIndexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.left": ('int',), + "QByteArray.leftJustified": ('int', 'Union[str, int]', 'bool'), + "QByteArray.length": (), + "QByteArray.mid": ('int', 'int'), + "QByteArray.number": [('float', 'Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.prepend": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',), ('int', 'Union[str, int]')], + "QByteArray.remove": ('int', 'int'), + "QByteArray.repeated": ('int',), + "QByteArray.replace": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('Union[str, int]', 'PySide2.QtCore.QByteArray'), ('Union[str, int]', 'Union[str, int]'), ('int', 'int', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QByteArray.reserve": ('int',), + "QByteArray.resize": ('int',), + "QByteArray.right": ('int',), + "QByteArray.rightJustified": ('int', 'Union[str, int]', 'bool'), + "QByteArray.setNum": [('float', 'Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.setRawData": ('str', 'int'), + "QByteArray.simplified": (), + "QByteArray.size": (), + "QByteArray.split": ('Union[str, int]',), + "QByteArray.squeeze": (), + "QByteArray.startsWith": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.swap": ('PySide2.QtCore.QByteArray',), + "QByteArray.toBase64": [(), ('Base64Options',)], + "QByteArray.toDouble": ('bool',), + "QByteArray.toFloat": ('bool',), + "QByteArray.toHex": [(), ('Union[str, int]',)], + "QByteArray.toInt": ('bool', 'int'), + "QByteArray.toLong": ('bool', 'int'), + "QByteArray.toLongLong": ('bool', 'int'), + "QByteArray.toLower": (), + "QByteArray.toPercentEncoding": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'Union[str, int]'), + "QByteArray.toShort": ('bool', 'int'), + "QByteArray.toUInt": ('bool', 'int'), + "QByteArray.toULong": ('bool', 'int'), + "QByteArray.toULongLong": ('bool', 'int'), + "QByteArray.toUShort": ('bool', 'int'), + "QByteArray.toUpper": (), + "QByteArray.trimmed": (), + "QByteArray.truncate": ('int',), + + # class PySide2.QtCore.QByteArrayMatcher: + "QByteArrayMatcher.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArrayMatcher',), ('str', 'int')], + "QByteArrayMatcher.__copy__": (), + "QByteArrayMatcher.indexIn": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int', 'int')], + "QByteArrayMatcher.pattern": (), + "QByteArrayMatcher.setPattern": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QChildEvent: + "QChildEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QObject'), + "QChildEvent.added": (), + "QChildEvent.child": (), + "QChildEvent.polished": (), + "QChildEvent.removed": (), + + # class PySide2.QtCore.QCollator: + "QCollator.__init__": [('PySide2.QtCore.QCollator',), ('PySide2.QtCore.QLocale',)], + "QCollator.caseSensitivity": (), + "QCollator.compare": [('Union[str, int]', 'int', 'Union[str, int]', 'int'), ('str', 'str')], + "QCollator.ignorePunctuation": (), + "QCollator.locale": (), + "QCollator.numericMode": (), + "QCollator.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCollator.setIgnorePunctuation": ('bool',), + "QCollator.setLocale": ('PySide2.QtCore.QLocale',), + "QCollator.setNumericMode": ('bool',), + "QCollator.sortKey": ('str',), + "QCollator.swap": ('PySide2.QtCore.QCollator',), + + # class PySide2.QtCore.QCollatorSortKey: + "QCollatorSortKey.__init__": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.compare": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.swap": ('PySide2.QtCore.QCollatorSortKey',), + + # class PySide2.QtCore.QCommandLineOption: + "QCommandLineOption.__init__": [('List[str]',), ('List[str]', 'str', 'str', 'str'), ('PySide2.QtCore.QCommandLineOption',), ('str',), ('str', 'str', 'str', 'str')], + "QCommandLineOption.defaultValues": (), + "QCommandLineOption.description": (), + "QCommandLineOption.flags": (), + "QCommandLineOption.isHidden": (), + "QCommandLineOption.names": (), + "QCommandLineOption.setDefaultValue": ('str',), + "QCommandLineOption.setDefaultValues": ('List[str]',), + "QCommandLineOption.setDescription": ('str',), + "QCommandLineOption.setFlags": ('Flags',), + "QCommandLineOption.setHidden": ('bool',), + "QCommandLineOption.setValueName": ('str',), + "QCommandLineOption.swap": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineOption.valueName": (), + + # class PySide2.QtCore.QCommandLineParser: + "QCommandLineParser.__init__": (), + "QCommandLineParser.addHelpOption": (), + "QCommandLineParser.addOption": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineParser.addOptions": ('list',), + "QCommandLineParser.addPositionalArgument": ('str', 'str', 'str'), + "QCommandLineParser.addVersionOption": (), + "QCommandLineParser.applicationDescription": (), + "QCommandLineParser.clearPositionalArguments": (), + "QCommandLineParser.errorText": (), + "QCommandLineParser.helpText": (), + "QCommandLineParser.isSet": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.optionNames": (), + "QCommandLineParser.parse": ('List[str]',), + "QCommandLineParser.positionalArguments": (), + "QCommandLineParser.process": [('List[str]',), ('PySide2.QtCore.QCoreApplication',)], + "QCommandLineParser.setApplicationDescription": ('str',), + "QCommandLineParser.setOptionsAfterPositionalArgumentsMode": ('PySide2.QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode',), + "QCommandLineParser.setSingleDashWordOptionMode": ('PySide2.QtCore.QCommandLineParser.SingleDashWordOptionMode',), + "QCommandLineParser.showHelp": ('int',), + "QCommandLineParser.showVersion": (), + "QCommandLineParser.unknownOptionNames": (), + "QCommandLineParser.value": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.values": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + + # class PySide2.QtCore.QCoreApplication: + "QCoreApplication.__init__": ('List[str]',), + "QCoreApplication.addLibraryPath": ('str',), + "QCoreApplication.applicationDirPath": (), + "QCoreApplication.applicationFilePath": (), + "QCoreApplication.applicationName": (), + "QCoreApplication.applicationPid": (), + "QCoreApplication.applicationVersion": (), + "QCoreApplication.arguments": (), + "QCoreApplication.closingDown": (), + "QCoreApplication.event": ('PySide2.QtCore.QEvent',), + "QCoreApplication.eventDispatcher": (), + "QCoreApplication.exec_": (), + "QCoreApplication.exit": ('int',), + "QCoreApplication.flush": (), + "QCoreApplication.hasPendingEvents": (), + "QCoreApplication.installTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.instance": (), + "QCoreApplication.isQuitLockEnabled": (), + "QCoreApplication.isSetuidAllowed": (), + "QCoreApplication.libraryPaths": (), + "QCoreApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.organizationDomain": (), + "QCoreApplication.organizationName": (), + "QCoreApplication.postEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent', 'int'), + "QCoreApplication.processEvents": [('ProcessEventsFlags',), ('ProcessEventsFlags', 'int')], + "QCoreApplication.quit": (), + "QCoreApplication.removeLibraryPath": ('str',), + "QCoreApplication.removePostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.removeTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.sendEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.sendPostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.setApplicationName": ('str',), + "QCoreApplication.setApplicationVersion": ('str',), + "QCoreApplication.setAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute', 'bool'), + "QCoreApplication.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QCoreApplication.setLibraryPaths": ('List[str]',), + "QCoreApplication.setOrganizationDomain": ('str',), + "QCoreApplication.setOrganizationName": ('str',), + "QCoreApplication.setQuitLockEnabled": ('bool',), + "QCoreApplication.setSetuidAllowed": ('bool',), + "QCoreApplication.startingUp": (), + "QCoreApplication.testAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute',), + "QCoreApplication.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QCryptographicHash: + "QCryptographicHash.__init__": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QCryptographicHash.addData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str', 'int')], + "QCryptographicHash.hash": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QCryptographicHash.Algorithm'), + "QCryptographicHash.reset": (), + "QCryptographicHash.result": (), + + # class PySide2.QtCore.QDataStream: + "QDataStream.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QDataStream.abortTransaction": (), + "QDataStream.atEnd": (), + "QDataStream.byteOrder": (), + "QDataStream.commitTransaction": (), + "QDataStream.device": (), + "QDataStream.floatingPointPrecision": (), + "QDataStream.readBool": (), + "QDataStream.readDouble": (), + "QDataStream.readFloat": (), + "QDataStream.readInt16": (), + "QDataStream.readInt32": (), + "QDataStream.readInt64": (), + "QDataStream.readInt8": (), + "QDataStream.readQChar": (), + "QDataStream.readQString": (), + "QDataStream.readQStringList": (), + "QDataStream.readQVariant": (), + "QDataStream.readRawData": ('str', 'int'), + "QDataStream.readString": (), + "QDataStream.readUInt16": (), + "QDataStream.readUInt32": (), + "QDataStream.readUInt64": (), + "QDataStream.readUInt8": (), + "QDataStream.resetStatus": (), + "QDataStream.rollbackTransaction": (), + "QDataStream.setByteOrder": ('PySide2.QtCore.QDataStream.ByteOrder',), + "QDataStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QDataStream.setFloatingPointPrecision": ('PySide2.QtCore.QDataStream.FloatingPointPrecision',), + "QDataStream.setStatus": ('PySide2.QtCore.QDataStream.Status',), + "QDataStream.setVersion": ('int',), + "QDataStream.skipRawData": ('int',), + "QDataStream.startTransaction": (), + "QDataStream.status": (), + "QDataStream.unsetDevice": (), + "QDataStream.version": (), + "QDataStream.writeBool": ('bool',), + "QDataStream.writeDouble": ('float',), + "QDataStream.writeFloat": ('float',), + "QDataStream.writeInt16": ('int',), + "QDataStream.writeInt32": ('int',), + "QDataStream.writeInt64": ('int',), + "QDataStream.writeInt8": ('Union[str, int]',), + "QDataStream.writeQChar": ('Union[str, int]',), + "QDataStream.writeQString": ('str',), + "QDataStream.writeQStringList": ('List[str]',), + "QDataStream.writeQVariant": ('Any',), + "QDataStream.writeRawData": ('str', 'int'), + "QDataStream.writeString": ('str',), + "QDataStream.writeUInt16": ('int',), + "QDataStream.writeUInt32": ('int',), + "QDataStream.writeUInt64": ('int',), + "QDataStream.writeUInt8": ('Union[str, int]',), + + # class PySide2.QtCore.QDate: + "QDate.__init__": [(), ('PySide2.QtCore.QDate',), ('int', 'int', 'int')], + "QDate.__copy__": (), + "QDate.__reduce__": (), + "QDate.addDays": ('int',), + "QDate.addMonths": ('int',), + "QDate.addYears": ('int',), + "QDate.currentDate": (), + "QDate.day": (), + "QDate.dayOfWeek": (), + "QDate.dayOfYear": (), + "QDate.daysInMonth": (), + "QDate.daysInYear": (), + "QDate.daysTo": ('PySide2.QtCore.QDate',), + "QDate.fromJulianDay": ('int',), + "QDate.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDate.getDate": ('int', 'int', 'int'), + "QDate.isLeapYear": ('int',), + "QDate.isNull": (), + "QDate.isValid": [(), ('int', 'int', 'int')], + "QDate.longDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.longMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.month": (), + "QDate.setDate": ('int', 'int', 'int'), + "QDate.shortDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.shortMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.toJulianDay": (), + "QDate.toPython": (), + "QDate.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDate.weekNumber": ('int',), + "QDate.year": (), + + # class PySide2.QtCore.QDateTime: + "QDateTime.__init__": [(), ('PySide2.QtCore.QDate',), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.QTimeZone'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec', 'int'), ('PySide2.QtCore.QDateTime',), ('int', 'int', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int')], + "QDateTime.__copy__": (), + "QDateTime.__reduce__": (), + "QDateTime.addDays": ('int',), + "QDateTime.addMSecs": ('int',), + "QDateTime.addMonths": ('int',), + "QDateTime.addSecs": ('int',), + "QDateTime.addYears": ('int',), + "QDateTime.currentDateTime": (), + "QDateTime.currentDateTimeUtc": (), + "QDateTime.currentMSecsSinceEpoch": (), + "QDateTime.currentSecsSinceEpoch": (), + "QDateTime.date": (), + "QDateTime.daysTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.fromMSecsSinceEpoch": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromSecsSinceEpoch": [('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDateTime.fromTime_t": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.isDaylightTime": (), + "QDateTime.isNull": (), + "QDateTime.isValid": (), + "QDateTime.msecsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.offsetFromUtc": (), + "QDateTime.secsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.setDate": ('PySide2.QtCore.QDate',), + "QDateTime.setMSecsSinceEpoch": ('int',), + "QDateTime.setOffsetFromUtc": ('int',), + "QDateTime.setSecsSinceEpoch": ('int',), + "QDateTime.setTime": ('PySide2.QtCore.QTime',), + "QDateTime.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.setTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.setTime_t": ('int',), + "QDateTime.setUtcOffset": ('int',), + "QDateTime.swap": ('PySide2.QtCore.QDateTime',), + "QDateTime.time": (), + "QDateTime.timeSpec": (), + "QDateTime.timeZone": (), + "QDateTime.timeZoneAbbreviation": (), + "QDateTime.toLocalTime": (), + "QDateTime.toMSecsSinceEpoch": (), + "QDateTime.toOffsetFromUtc": ('int',), + "QDateTime.toPython": (), + "QDateTime.toSecsSinceEpoch": (), + "QDateTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDateTime.toTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.toTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.toTime_t": (), + "QDateTime.toUTC": (), + "QDateTime.utcOffset": (), + + # class PySide2.QtCore.QDir: + "QDir.__init__": [('PySide2.QtCore.QDir',), ('str',), ('str', 'str', 'SortFlags', 'Filters')], + "QDir.__copy__": (), + "QDir.__reduce__": (), + "QDir.absoluteFilePath": ('str',), + "QDir.absolutePath": (), + "QDir.addResourceSearchPath": ('str',), + "QDir.addSearchPath": ('str', 'str'), + "QDir.canonicalPath": (), + "QDir.cd": ('str',), + "QDir.cdUp": (), + "QDir.cleanPath": ('str',), + "QDir.count": (), + "QDir.current": (), + "QDir.currentPath": (), + "QDir.dirName": (), + "QDir.drives": (), + "QDir.entryInfoList": [('Filters', 'SortFlags'), ('List[str]', 'Filters', 'SortFlags')], + "QDir.entryList": [('Filters', 'SortFlags'), ('List[str]', 'Filters', 'SortFlags')], + "QDir.exists": [(), ('str',)], + "QDir.filePath": ('str',), + "QDir.filter": (), + "QDir.fromNativeSeparators": ('str',), + "QDir.home": (), + "QDir.homePath": (), + "QDir.isAbsolute": (), + "QDir.isAbsolutePath": ('str',), + "QDir.isEmpty": ('Filters',), + "QDir.isReadable": (), + "QDir.isRelative": (), + "QDir.isRelativePath": ('str',), + "QDir.isRoot": (), + "QDir.listSeparator": (), + "QDir.makeAbsolute": (), + "QDir.match": [('List[str]', 'str'), ('str', 'str')], + "QDir.mkdir": ('str',), + "QDir.mkpath": ('str',), + "QDir.nameFilters": (), + "QDir.nameFiltersFromString": ('str',), + "QDir.path": (), + "QDir.refresh": (), + "QDir.relativeFilePath": ('str',), + "QDir.remove": ('str',), + "QDir.removeRecursively": (), + "QDir.rename": ('str', 'str'), + "QDir.rmdir": ('str',), + "QDir.rmpath": ('str',), + "QDir.root": (), + "QDir.rootPath": (), + "QDir.searchPaths": ('str',), + "QDir.separator": (), + "QDir.setCurrent": ('str',), + "QDir.setFilter": ('Filters',), + "QDir.setNameFilters": ('List[str]',), + "QDir.setPath": ('str',), + "QDir.setSearchPaths": ('str', 'List[str]'), + "QDir.setSorting": ('SortFlags',), + "QDir.sorting": (), + "QDir.swap": ('PySide2.QtCore.QDir',), + "QDir.temp": (), + "QDir.tempPath": (), + "QDir.toNativeSeparators": ('str',), + + # class PySide2.QtCore.QDirIterator: + "QDirIterator.__init__": [('PySide2.QtCore.QDir', 'IteratorFlags'), ('str', 'Filters', 'IteratorFlags'), ('str', 'IteratorFlags'), ('str', 'List[str]', 'Filters', 'IteratorFlags')], + "QDirIterator.fileInfo": (), + "QDirIterator.fileName": (), + "QDirIterator.filePath": (), + "QDirIterator.hasNext": (), + "QDirIterator.path": (), + + # class PySide2.QtCore.QDynamicPropertyChangeEvent: + "QDynamicPropertyChangeEvent.__init__": ('PySide2.QtCore.QByteArray',), + "QDynamicPropertyChangeEvent.propertyName": (), + + # class PySide2.QtCore.QEasingCurve: + "QEasingCurve.__init__": [('PySide2.QtCore.QEasingCurve',), ('PySide2.QtCore.QEasingCurve.Type',)], + "QEasingCurve.__copy__": (), + "QEasingCurve.addCubicBezierSegment": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEasingCurve.addTCBSegment": ('PySide2.QtCore.QPointF', 'float', 'float', 'float'), + "QEasingCurve.amplitude": (), + "QEasingCurve.customType": (), + "QEasingCurve.overshoot": (), + "QEasingCurve.period": (), + "QEasingCurve.setAmplitude": ('float',), + "QEasingCurve.setCustomType": ('object',), + "QEasingCurve.setOvershoot": ('float',), + "QEasingCurve.setPeriod": ('float',), + "QEasingCurve.setType": ('PySide2.QtCore.QEasingCurve.Type',), + "QEasingCurve.swap": ('PySide2.QtCore.QEasingCurve',), + "QEasingCurve.toCubicSpline": (), + "QEasingCurve.type": (), + "QEasingCurve.valueForProgress": ('float',), + + # class PySide2.QtCore.QElapsedTimer: + "QElapsedTimer.__init__": [(), ('PySide2.QtCore.QElapsedTimer',)], + "QElapsedTimer.__copy__": (), + "QElapsedTimer.clockType": (), + "QElapsedTimer.elapsed": (), + "QElapsedTimer.hasExpired": ('int',), + "QElapsedTimer.invalidate": (), + "QElapsedTimer.isMonotonic": (), + "QElapsedTimer.isValid": (), + "QElapsedTimer.msecsSinceReference": (), + "QElapsedTimer.msecsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.nsecsElapsed": (), + "QElapsedTimer.restart": (), + "QElapsedTimer.secsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.start": (), + + # class PySide2.QtCore.QEvent: + "QEvent.__init__": [('PySide2.QtCore.QEvent',), ('PySide2.QtCore.QEvent.Type',)], + "QEvent.accept": (), + "QEvent.ignore": (), + "QEvent.isAccepted": (), + "QEvent.registerEventType": ('int',), + "QEvent.setAccepted": ('bool',), + "QEvent.spontaneous": (), + "QEvent.type": (), + + # class PySide2.QtCore.QEventLoop: + "QEventLoop.__init__": ('PySide2.QtCore.QObject',), + "QEventLoop.event": ('PySide2.QtCore.QEvent',), + "QEventLoop.exec_": ('ProcessEventsFlags',), + "QEventLoop.exit": ('int',), + "QEventLoop.isRunning": (), + "QEventLoop.processEvents": [('ProcessEventsFlags',), ('ProcessEventsFlags', 'int')], + "QEventLoop.quit": (), + "QEventLoop.wakeUp": (), + + # class PySide2.QtCore.QEventTransition: + "QEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QEventTransition.event": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventSource": (), + "QEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventType": (), + "QEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QEventTransition.setEventSource": ('PySide2.QtCore.QObject',), + "QEventTransition.setEventType": ('PySide2.QtCore.QEvent.Type',), + + # class PySide2.QtCore.QFactoryInterface: + "QFactoryInterface.__init__": (), + "QFactoryInterface.keys": (), + + # class PySide2.QtCore.QFile: + "QFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QFile.copy": [('str',), ('str', 'str')], + "QFile.decodeName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QFile.encodeName": ('str',), + "QFile.exists": [(), ('str',)], + "QFile.fileName": (), + "QFile.link": [('str',), ('str', 'str')], + "QFile.open": [('OpenMode',), ('int', 'OpenMode', 'FileHandleFlags')], + "QFile.permissions": [(), ('str',)], + "QFile.readLink": [(), ('str',)], + "QFile.remove": [(), ('str',)], + "QFile.rename": [('str',), ('str', 'str')], + "QFile.resize": [('int',), ('str', 'int')], + "QFile.setFileName": ('str',), + "QFile.setPermissions": [('Permissions',), ('str', 'Permissions')], + "QFile.size": (), + "QFile.symLinkTarget": [(), ('str',)], + + # class PySide2.QtCore.QFileDevice: + "QFileDevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QFileDevice.atEnd": (), + "QFileDevice.close": (), + "QFileDevice.error": (), + "QFileDevice.fileName": (), + "QFileDevice.flush": (), + "QFileDevice.handle": (), + "QFileDevice.isSequential": (), + "QFileDevice.map": ('int', 'int', 'PySide2.QtCore.QFileDevice.MemoryMapFlags'), + "QFileDevice.permissions": (), + "QFileDevice.pos": (), + "QFileDevice.readData": ('str', 'int'), + "QFileDevice.readLineData": ('str', 'int'), + "QFileDevice.resize": ('int',), + "QFileDevice.seek": ('int',), + "QFileDevice.setPermissions": ('Permissions',), + "QFileDevice.size": (), + "QFileDevice.unmap": ('Union[str, int]',), + "QFileDevice.unsetError": (), + "QFileDevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QFileInfo: + "QFileInfo.__init__": [(), ('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('PySide2.QtCore.QFileInfo',), ('str',)], + "QFileInfo.__copy__": (), + "QFileInfo.__reduce__": (), + "QFileInfo.absoluteDir": (), + "QFileInfo.absoluteFilePath": (), + "QFileInfo.absolutePath": (), + "QFileInfo.baseName": (), + "QFileInfo.bundleName": (), + "QFileInfo.caching": (), + "QFileInfo.canonicalFilePath": (), + "QFileInfo.canonicalPath": (), + "QFileInfo.completeBaseName": (), + "QFileInfo.completeSuffix": (), + "QFileInfo.created": (), + "QFileInfo.dir": (), + "QFileInfo.exists": [(), ('str',)], + "QFileInfo.fileName": (), + "QFileInfo.filePath": (), + "QFileInfo.group": (), + "QFileInfo.groupId": (), + "QFileInfo.isAbsolute": (), + "QFileInfo.isBundle": (), + "QFileInfo.isDir": (), + "QFileInfo.isExecutable": (), + "QFileInfo.isFile": (), + "QFileInfo.isHidden": (), + "QFileInfo.isNativePath": (), + "QFileInfo.isReadable": (), + "QFileInfo.isRelative": (), + "QFileInfo.isRoot": (), + "QFileInfo.isSymLink": (), + "QFileInfo.isWritable": (), + "QFileInfo.lastModified": (), + "QFileInfo.lastRead": (), + "QFileInfo.makeAbsolute": (), + "QFileInfo.owner": (), + "QFileInfo.ownerId": (), + "QFileInfo.path": (), + "QFileInfo.readLink": (), + "QFileInfo.refresh": (), + "QFileInfo.setCaching": ('bool',), + "QFileInfo.setFile": [('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('str',)], + "QFileInfo.size": (), + "QFileInfo.suffix": (), + "QFileInfo.swap": ('PySide2.QtCore.QFileInfo',), + "QFileInfo.symLinkTarget": (), + + # class PySide2.QtCore.QFileSelector: + "QFileSelector.__init__": ('PySide2.QtCore.QObject',), + "QFileSelector.allSelectors": (), + "QFileSelector.extraSelectors": (), + "QFileSelector.select": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileSelector.setExtraSelectors": ('List[str]',), + + # class PySide2.QtCore.QFileSystemWatcher: + "QFileSystemWatcher.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QFileSystemWatcher.addPath": ('str',), + "QFileSystemWatcher.addPaths": ('List[str]',), + "QFileSystemWatcher.directories": (), + "QFileSystemWatcher.files": (), + "QFileSystemWatcher.removePath": ('str',), + "QFileSystemWatcher.removePaths": ('List[str]',), + + # class PySide2.QtCore.QFinalState: + "QFinalState.__init__": ('PySide2.QtCore.QState',), + "QFinalState.event": ('PySide2.QtCore.QEvent',), + "QFinalState.onEntry": ('PySide2.QtCore.QEvent',), + "QFinalState.onExit": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtCore.QGenericArgument: + "QGenericArgument.__init__": [('PySide2.QtCore.QGenericArgument',), ('str', 'int')], + "QGenericArgument.__copy__": (), + "QGenericArgument.data": (), + "QGenericArgument.name": (), + + # class PySide2.QtCore.QGenericReturnArgument: + "QGenericReturnArgument.__init__": [('PySide2.QtCore.QGenericReturnArgument',), ('str', 'int')], + "QGenericReturnArgument.__copy__": (), + + # class PySide2.QtCore.QHistoryState: + "QHistoryState.__init__": [('PySide2.QtCore.QHistoryState.HistoryType', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QHistoryState.defaultState": (), + "QHistoryState.defaultTransition": (), + "QHistoryState.event": ('PySide2.QtCore.QEvent',), + "QHistoryState.historyType": (), + "QHistoryState.onEntry": ('PySide2.QtCore.QEvent',), + "QHistoryState.onExit": ('PySide2.QtCore.QEvent',), + "QHistoryState.setDefaultState": ('PySide2.QtCore.QAbstractState',), + "QHistoryState.setDefaultTransition": ('PySide2.QtCore.QAbstractTransition',), + "QHistoryState.setHistoryType": ('PySide2.QtCore.QHistoryState.HistoryType',), + + # class PySide2.QtCore.QIODevice: + "QIODevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QIODevice.atEnd": (), + "QIODevice.bytesAvailable": (), + "QIODevice.bytesToWrite": (), + "QIODevice.canReadLine": (), + "QIODevice.close": (), + "QIODevice.commitTransaction": (), + "QIODevice.currentReadChannel": (), + "QIODevice.currentWriteChannel": (), + "QIODevice.errorString": (), + "QIODevice.getChar": ('str',), + "QIODevice.isOpen": (), + "QIODevice.isReadable": (), + "QIODevice.isSequential": (), + "QIODevice.isTextModeEnabled": (), + "QIODevice.isTransactionStarted": (), + "QIODevice.isWritable": (), + "QIODevice.open": ('OpenMode',), + "QIODevice.openMode": (), + "QIODevice.peek": ('int',), + "QIODevice.pos": (), + "QIODevice.putChar": ('Union[str, int]',), + "QIODevice.read": ('int',), + "QIODevice.readAll": (), + "QIODevice.readChannelCount": (), + "QIODevice.readData": ('str', 'int'), + "QIODevice.readLine": ('int',), + "QIODevice.readLineData": ('str', 'int'), + "QIODevice.reset": (), + "QIODevice.rollbackTransaction": (), + "QIODevice.seek": ('int',), + "QIODevice.setCurrentReadChannel": ('int',), + "QIODevice.setCurrentWriteChannel": ('int',), + "QIODevice.setErrorString": ('str',), + "QIODevice.setOpenMode": ('OpenMode',), + "QIODevice.setTextModeEnabled": ('bool',), + "QIODevice.size": (), + "QIODevice.startTransaction": (), + "QIODevice.ungetChar": ('Union[str, int]',), + "QIODevice.waitForBytesWritten": ('int',), + "QIODevice.waitForReadyRead": ('int',), + "QIODevice.write": ('PySide2.QtCore.QByteArray',), + "QIODevice.writeChannelCount": (), + "QIODevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QItemSelection: + "QItemSelection.__init__": [(), ('PySide2.QtCore.QItemSelection',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelection.__copy__": (), + "QItemSelection.append": [('PySide2.QtCore.QItemSelectionRange',), ('list',)], + "QItemSelection.at": ('int',), + "QItemSelection.back": (), + "QItemSelection.clear": (), + "QItemSelection.constFirst": (), + "QItemSelection.constLast": (), + "QItemSelection.contains": ('PySide2.QtCore.QModelIndex',), + "QItemSelection.count": [(), ('PySide2.QtCore.QItemSelectionRange',)], + "QItemSelection.detachShared": (), + "QItemSelection.empty": (), + "QItemSelection.endsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.first": (), + "QItemSelection.fromSet": ('set',), + "QItemSelection.fromVector": ('list',), + "QItemSelection.front": (), + "QItemSelection.indexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.indexes": (), + "QItemSelection.insert": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.isEmpty": (), + "QItemSelection.isSharedWith": ('list',), + "QItemSelection.last": (), + "QItemSelection.lastIndexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.length": (), + "QItemSelection.merge": ('PySide2.QtCore.QItemSelection', 'SelectionFlags'), + "QItemSelection.mid": ('int', 'int'), + "QItemSelection.move": ('int', 'int'), + "QItemSelection.pop_back": (), + "QItemSelection.pop_front": (), + "QItemSelection.prepend": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_back": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_front": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAll": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAt": ('int',), + "QItemSelection.removeFirst": (), + "QItemSelection.removeLast": (), + "QItemSelection.removeOne": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.replace": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.reserve": ('int',), + "QItemSelection.select": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QItemSelection.setSharable": ('bool',), + "QItemSelection.size": (), + "QItemSelection.split": ('PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelection'), + "QItemSelection.startsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.swap": [('int', 'int'), ('list',)], + "QItemSelection.takeAt": ('int',), + "QItemSelection.takeFirst": (), + "QItemSelection.takeLast": (), + "QItemSelection.toSet": (), + "QItemSelection.toVector": (), + "QItemSelection.value": [('int',), ('int', 'PySide2.QtCore.QItemSelectionRange')], + + # class PySide2.QtCore.QItemSelectionModel: + "QItemSelectionModel.__init__": [('PySide2.QtCore.QAbstractItemModel',), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject')], + "QItemSelectionModel.clear": (), + "QItemSelectionModel.clearCurrentIndex": (), + "QItemSelectionModel.clearSelection": (), + "QItemSelectionModel.columnIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.currentIndex": (), + "QItemSelectionModel.emitSelectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QItemSelectionModel.hasSelection": (), + "QItemSelectionModel.isColumnSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isRowSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isSelected": ('PySide2.QtCore.QModelIndex',), + "QItemSelectionModel.model": (), + "QItemSelectionModel.reset": (), + "QItemSelectionModel.rowIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.select": [('PySide2.QtCore.QItemSelection', 'SelectionFlags'), ('PySide2.QtCore.QModelIndex', 'SelectionFlags')], + "QItemSelectionModel.selectedColumns": ('int',), + "QItemSelectionModel.selectedIndexes": (), + "QItemSelectionModel.selectedRows": ('int',), + "QItemSelectionModel.selection": (), + "QItemSelectionModel.setCurrentIndex": ('PySide2.QtCore.QModelIndex', 'SelectionFlags'), + "QItemSelectionModel.setModel": ('PySide2.QtCore.QAbstractItemModel',), + + # class PySide2.QtCore.QItemSelectionRange: + "QItemSelectionRange.__init__": [(), ('PySide2.QtCore.QItemSelectionRange',), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.__copy__": (), + "QItemSelectionRange.bottom": (), + "QItemSelectionRange.bottomRight": (), + "QItemSelectionRange.contains": [('PySide2.QtCore.QModelIndex',), ('int', 'int', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.height": (), + "QItemSelectionRange.indexes": (), + "QItemSelectionRange.intersected": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.intersects": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.isEmpty": (), + "QItemSelectionRange.isValid": (), + "QItemSelectionRange.left": (), + "QItemSelectionRange.model": (), + "QItemSelectionRange.parent": (), + "QItemSelectionRange.right": (), + "QItemSelectionRange.swap": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.top": (), + "QItemSelectionRange.topLeft": (), + "QItemSelectionRange.width": (), + + # class PySide2.QtCore.QJsonArray: + "QJsonArray.__init__": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonArray.__copy__": (), + "QJsonArray.append": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.at": ('int',), + "QJsonArray.contains": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.count": (), + "QJsonArray.empty": (), + "QJsonArray.first": (), + "QJsonArray.fromStringList": ('List[str]',), + "QJsonArray.fromVariantList": ('list',), + "QJsonArray.insert": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.isEmpty": (), + "QJsonArray.last": (), + "QJsonArray.pop_back": (), + "QJsonArray.pop_front": (), + "QJsonArray.prepend": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_back": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_front": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.removeAt": ('int',), + "QJsonArray.removeFirst": (), + "QJsonArray.removeLast": (), + "QJsonArray.replace": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.size": (), + "QJsonArray.takeAt": ('int',), + "QJsonArray.toVariantList": (), + + # class PySide2.QtCore.QJsonDocument: + "QJsonDocument.__init__": [(), ('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonDocument',), ('dict',)], + "QJsonDocument.__copy__": (), + "QJsonDocument.array": (), + "QJsonDocument.fromBinaryData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromJson": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonParseError'), + "QJsonDocument.fromRawData": ('str', 'int', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromVariant": ('Any',), + "QJsonDocument.isArray": (), + "QJsonDocument.isEmpty": (), + "QJsonDocument.isNull": (), + "QJsonDocument.isObject": (), + "QJsonDocument.object": (), + "QJsonDocument.rawData": ('int',), + "QJsonDocument.setArray": ('PySide2.QtCore.QJsonArray',), + "QJsonDocument.setObject": ('dict',), + "QJsonDocument.toBinaryData": (), + "QJsonDocument.toJson": [(), ('PySide2.QtCore.QJsonDocument.JsonFormat',)], + "QJsonDocument.toVariant": (), + + # class PySide2.QtCore.QJsonParseError: + "QJsonParseError.__init__": [(), ('PySide2.QtCore.QJsonParseError',)], + "QJsonParseError.__copy__": (), + "QJsonParseError.errorString": (), + + # class PySide2.QtCore.QJsonValue: + "QJsonValue.__init__": [('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonValue',), ('PySide2.QtCore.QJsonValue.Type',), ('bool',), ('dict',), ('float',), ('int',), ('str',)], + "QJsonValue.__copy__": (), + "QJsonValue.fromVariant": ('Any',), + "QJsonValue.isArray": (), + "QJsonValue.isBool": (), + "QJsonValue.isDouble": (), + "QJsonValue.isNull": (), + "QJsonValue.isObject": (), + "QJsonValue.isString": (), + "QJsonValue.isUndefined": (), + "QJsonValue.toArray": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonValue.toBool": ('bool',), + "QJsonValue.toDouble": ('float',), + "QJsonValue.toInt": ('int',), + "QJsonValue.toObject": [(), ('dict',)], + "QJsonValue.toString": [(), ('str',)], + "QJsonValue.toVariant": (), + "QJsonValue.type": (), + + # class PySide2.QtCore.QLibraryInfo: + "QLibraryInfo.build": (), + "QLibraryInfo.buildDate": (), + "QLibraryInfo.isDebugBuild": (), + "QLibraryInfo.licensedProducts": (), + "QLibraryInfo.licensee": (), + "QLibraryInfo.location": ('PySide2.QtCore.QLibraryInfo.LibraryLocation',), + "QLibraryInfo.platformPluginArguments": ('str',), + "QLibraryInfo.version": (), + + # class PySide2.QtCore.QLine: + "QLine.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('int', 'int', 'int', 'int')], + "QLine.__copy__": (), + "QLine.__reduce__": (), + "QLine.center": (), + "QLine.dx": (), + "QLine.dy": (), + "QLine.isNull": (), + "QLine.p1": (), + "QLine.p2": (), + "QLine.setLine": ('int', 'int', 'int', 'int'), + "QLine.setP1": ('PySide2.QtCore.QPoint',), + "QLine.setP2": ('PySide2.QtCore.QPoint',), + "QLine.setPoints": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QLine.toTuple": (), + "QLine.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.x1": (), + "QLine.x2": (), + "QLine.y1": (), + "QLine.y2": (), + + # class PySide2.QtCore.QLineF: + "QLineF.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QLineF.__copy__": (), + "QLineF.__reduce__": (), + "QLineF.angle": [(), ('PySide2.QtCore.QLineF',)], + "QLineF.angleTo": ('PySide2.QtCore.QLineF',), + "QLineF.center": (), + "QLineF.dx": (), + "QLineF.dy": (), + "QLineF.fromPolar": ('float', 'float'), + "QLineF.intersect": ('PySide2.QtCore.QLineF', 'PySide2.QtCore.QPointF'), + "QLineF.isNull": (), + "QLineF.length": (), + "QLineF.normalVector": (), + "QLineF.p1": (), + "QLineF.p2": (), + "QLineF.pointAt": ('float',), + "QLineF.setAngle": ('float',), + "QLineF.setLength": ('float',), + "QLineF.setLine": ('float', 'float', 'float', 'float'), + "QLineF.setP1": ('PySide2.QtCore.QPointF',), + "QLineF.setP2": ('PySide2.QtCore.QPointF',), + "QLineF.setPoints": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QLineF.toLine": (), + "QLineF.toTuple": (), + "QLineF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.unitVector": (), + "QLineF.x1": (), + "QLineF.x2": (), + "QLineF.y1": (), + "QLineF.y2": (), + + # class PySide2.QtCore.QLocale: + "QLocale.__init__": [(), ('PySide2.QtCore.QLocale',), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Country'), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), ('str',)], + "QLocale.__copy__": (), + "QLocale.amText": (), + "QLocale.bcp47Name": (), + "QLocale.c": (), + "QLocale.countriesForLanguage": ('PySide2.QtCore.QLocale.Language',), + "QLocale.country": (), + "QLocale.countryToString": ('PySide2.QtCore.QLocale.Country',), + "QLocale.createSeparatedList": ('List[str]',), + "QLocale.currencySymbol": ('PySide2.QtCore.QLocale.CurrencySymbolFormat',), + "QLocale.dateFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dateTimeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.decimalPoint": (), + "QLocale.exponential": (), + "QLocale.firstDayOfWeek": (), + "QLocale.groupSeparator": (), + "QLocale.language": (), + "QLocale.languageToString": ('PySide2.QtCore.QLocale.Language',), + "QLocale.matchingLocales": ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), + "QLocale.measurementSystem": (), + "QLocale.monthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.name": (), + "QLocale.nativeCountryName": (), + "QLocale.nativeLanguageName": (), + "QLocale.negativeSign": (), + "QLocale.numberOptions": (), + "QLocale.percent": (), + "QLocale.pmText": (), + "QLocale.positiveSign": (), + "QLocale.quoteString": ('str', 'PySide2.QtCore.QLocale.QuotationStyle'), + "QLocale.script": (), + "QLocale.scriptToString": ('PySide2.QtCore.QLocale.Script',), + "QLocale.setDefault": ('PySide2.QtCore.QLocale',), + "QLocale.setNumberOptions": ('NumberOptions',), + "QLocale.standaloneDayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.standaloneMonthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.swap": ('PySide2.QtCore.QLocale',), + "QLocale.system": (), + "QLocale.textDirection": (), + "QLocale.timeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.toCurrencyString": [('float', 'str'), ('float', 'str', 'int'), ('int', 'str')], + "QLocale.toDate": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDateTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDouble": ('str', 'bool'), + "QLocale.toFloat": ('str', 'bool'), + "QLocale.toInt": ('str', 'bool'), + "QLocale.toLongLong": ('str', 'bool'), + "QLocale.toLower": ('str',), + "QLocale.toShort": ('str', 'bool'), + "QLocale.toString": [('PySide2.QtCore.QDate', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDate', 'str'), ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDateTime', 'str'), ('PySide2.QtCore.QTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QTime', 'str'), ('float', 'Union[str, int]', 'int'), ('int',)], + "QLocale.toTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toUInt": ('str', 'bool'), + "QLocale.toULongLong": ('str', 'bool'), + "QLocale.toUShort": ('str', 'bool'), + "QLocale.toUpper": ('str',), + "QLocale.uiLanguages": (), + "QLocale.weekdays": (), + "QLocale.zeroDigit": (), + + # class PySide2.QtCore.QMargins: + "QMargins.__init__": [(), ('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QMargins.__copy__": (), + "QMargins.bottom": (), + "QMargins.isNull": (), + "QMargins.left": (), + "QMargins.right": (), + "QMargins.setBottom": ('int',), + "QMargins.setLeft": ('int',), + "QMargins.setRight": ('int',), + "QMargins.setTop": ('int',), + "QMargins.top": (), + + # class PySide2.QtCore.QMarginsF: + "QMarginsF.__init__": [(), ('PySide2.QtCore.QMargins',), ('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float')], + "QMarginsF.__copy__": (), + "QMarginsF.bottom": (), + "QMarginsF.isNull": (), + "QMarginsF.left": (), + "QMarginsF.right": (), + "QMarginsF.setBottom": ('float',), + "QMarginsF.setLeft": ('float',), + "QMarginsF.setRight": ('float',), + "QMarginsF.setTop": ('float',), + "QMarginsF.toMargins": (), + "QMarginsF.top": (), + + # class PySide2.QtCore.QMessageLogContext: + "QMessageLogContext.__init__": [(), ('str', 'int', 'str', 'str')], + + # class PySide2.QtCore.QMetaClassInfo: + "QMetaClassInfo.__init__": [(), ('PySide2.QtCore.QMetaClassInfo',)], + "QMetaClassInfo.__copy__": (), + "QMetaClassInfo.name": (), + "QMetaClassInfo.value": (), + + # class PySide2.QtCore.QMetaEnum: + "QMetaEnum.__init__": [(), ('PySide2.QtCore.QMetaEnum',)], + "QMetaEnum.__copy__": (), + "QMetaEnum.isFlag": (), + "QMetaEnum.isScoped": (), + "QMetaEnum.isValid": (), + "QMetaEnum.key": ('int',), + "QMetaEnum.keyCount": (), + "QMetaEnum.keyToValue": ('str', 'bool'), + "QMetaEnum.keysToValue": ('str', 'bool'), + "QMetaEnum.name": (), + "QMetaEnum.scope": (), + "QMetaEnum.value": ('int',), + "QMetaEnum.valueToKey": ('int',), + "QMetaEnum.valueToKeys": ('int',), + + # class PySide2.QtCore.QMetaMethod: + "QMetaMethod.__init__": [(), ('PySide2.QtCore.QMetaMethod',)], + "QMetaMethod.__copy__": (), + "QMetaMethod.access": (), + "QMetaMethod.enclosingMetaObject": (), + "QMetaMethod.invoke": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.invokeOnGadget": [('int', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('int', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.isValid": (), + "QMetaMethod.methodIndex": (), + "QMetaMethod.methodSignature": (), + "QMetaMethod.methodType": (), + "QMetaMethod.name": (), + "QMetaMethod.parameterCount": (), + "QMetaMethod.parameterNames": (), + "QMetaMethod.parameterType": ('int',), + "QMetaMethod.parameterTypes": (), + "QMetaMethod.returnType": (), + "QMetaMethod.revision": (), + "QMetaMethod.tag": (), + "QMetaMethod.typeName": (), + + # class PySide2.QtCore.QMetaObject: + "QMetaObject.__init__": (), + "QMetaObject.cast": ('PySide2.QtCore.QObject',), + "QMetaObject.checkConnectArgs": [('PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QMetaMethod'), ('str', 'str')], + "QMetaObject.classInfo": ('int',), + "QMetaObject.classInfoCount": (), + "QMetaObject.classInfoOffset": (), + "QMetaObject.className": (), + "QMetaObject.connectSlotsByName": ('PySide2.QtCore.QObject',), + "QMetaObject.constructor": ('int',), + "QMetaObject.constructorCount": (), + "QMetaObject.disconnect": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.disconnectOne": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.enumerator": ('int',), + "QMetaObject.enumeratorCount": (), + "QMetaObject.enumeratorOffset": (), + "QMetaObject.indexOfClassInfo": ('str',), + "QMetaObject.indexOfConstructor": ('str',), + "QMetaObject.indexOfEnumerator": ('str',), + "QMetaObject.indexOfMethod": ('str',), + "QMetaObject.indexOfProperty": ('str',), + "QMetaObject.indexOfSignal": ('str',), + "QMetaObject.indexOfSlot": ('str',), + "QMetaObject.inherits": ('PySide2.QtCore.QMetaObject',), + "QMetaObject.invokeMethod": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaObject.method": ('int',), + "QMetaObject.methodCount": (), + "QMetaObject.methodOffset": (), + "QMetaObject.newInstance": ('PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), + "QMetaObject.normalizedSignature": ('str',), + "QMetaObject.normalizedType": ('str',), + "QMetaObject.property": ('int',), + "QMetaObject.propertyCount": (), + "QMetaObject.propertyOffset": (), + "QMetaObject.superClass": (), + "QMetaObject.userProperty": (), + + # class PySide2.QtCore.QMetaProperty: + "QMetaProperty.__init__": [(), ('PySide2.QtCore.QMetaProperty',)], + "QMetaProperty.__copy__": (), + "QMetaProperty.enumerator": (), + "QMetaProperty.hasNotifySignal": (), + "QMetaProperty.hasStdCppSet": (), + "QMetaProperty.isConstant": (), + "QMetaProperty.isDesignable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEditable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEnumType": (), + "QMetaProperty.isFinal": (), + "QMetaProperty.isFlagType": (), + "QMetaProperty.isReadable": (), + "QMetaProperty.isResettable": (), + "QMetaProperty.isScriptable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isStored": ('PySide2.QtCore.QObject',), + "QMetaProperty.isUser": ('PySide2.QtCore.QObject',), + "QMetaProperty.isValid": (), + "QMetaProperty.isWritable": (), + "QMetaProperty.name": (), + "QMetaProperty.notifySignal": (), + "QMetaProperty.notifySignalIndex": (), + "QMetaProperty.propertyIndex": (), + "QMetaProperty.read": ('PySide2.QtCore.QObject',), + "QMetaProperty.readOnGadget": ('int',), + "QMetaProperty.reset": ('PySide2.QtCore.QObject',), + "QMetaProperty.resetOnGadget": ('int',), + "QMetaProperty.revision": (), + "QMetaProperty.type": (), + "QMetaProperty.typeName": (), + "QMetaProperty.userType": (), + "QMetaProperty.write": ('PySide2.QtCore.QObject', 'Any'), + "QMetaProperty.writeOnGadget": ('int', 'Any'), + + # class PySide2.QtCore.QMimeData: + "QMimeData.__init__": (), + "QMimeData.clear": (), + "QMimeData.colorData": (), + "QMimeData.data": ('str',), + "QMimeData.formats": (), + "QMimeData.hasColor": (), + "QMimeData.hasFormat": ('str',), + "QMimeData.hasHtml": (), + "QMimeData.hasImage": (), + "QMimeData.hasText": (), + "QMimeData.hasUrls": (), + "QMimeData.html": (), + "QMimeData.imageData": (), + "QMimeData.removeFormat": ('str',), + "QMimeData.retrieveData": ('str', 'type'), + "QMimeData.setColorData": ('Any',), + "QMimeData.setData": ('str', 'PySide2.QtCore.QByteArray'), + "QMimeData.setHtml": ('str',), + "QMimeData.setImageData": ('Any',), + "QMimeData.setText": ('str',), + "QMimeData.setUrls": ('list',), + "QMimeData.text": (), + "QMimeData.urls": (), + + # class PySide2.QtCore.QMimeDatabase: + "QMimeDatabase.__init__": (), + "QMimeDatabase.allMimeTypes": (), + "QMimeDatabase.mimeTypeForData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QMimeDatabase.mimeTypeForFile": [('PySide2.QtCore.QFileInfo', 'PySide2.QtCore.QMimeDatabase.MatchMode'), ('str', 'PySide2.QtCore.QMimeDatabase.MatchMode')], + "QMimeDatabase.mimeTypeForFileNameAndData": [('str', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QIODevice')], + "QMimeDatabase.mimeTypeForName": ('str',), + "QMimeDatabase.mimeTypeForUrl": ('PySide2.QtCore.QUrl',), + "QMimeDatabase.mimeTypesForFileName": ('str',), + "QMimeDatabase.suffixForFileName": ('str',), + + # class PySide2.QtCore.QMimeType: + "QMimeType.__init__": [(), ('PySide2.QtCore.QMimeType',)], + "QMimeType.__copy__": (), + "QMimeType.aliases": (), + "QMimeType.allAncestors": (), + "QMimeType.comment": (), + "QMimeType.filterString": (), + "QMimeType.genericIconName": (), + "QMimeType.globPatterns": (), + "QMimeType.iconName": (), + "QMimeType.inherits": ('str',), + "QMimeType.isDefault": (), + "QMimeType.isValid": (), + "QMimeType.name": (), + "QMimeType.parentMimeTypes": (), + "QMimeType.preferredSuffix": (), + "QMimeType.suffixes": (), + "QMimeType.swap": ('PySide2.QtCore.QMimeType',), + + # class PySide2.QtCore.QModelIndex: + "QModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',)], + "QModelIndex.__copy__": (), + "QModelIndex.child": ('int', 'int'), + "QModelIndex.column": (), + "QModelIndex.data": ('int',), + "QModelIndex.flags": (), + "QModelIndex.internalId": (), + "QModelIndex.internalPointer": (), + "QModelIndex.isValid": (), + "QModelIndex.model": (), + "QModelIndex.parent": (), + "QModelIndex.row": (), + "QModelIndex.sibling": ('int', 'int'), + + # class PySide2.QtCore.QMutex: + "QMutex.__init__": ('PySide2.QtCore.QMutex.RecursionMode',), + "QMutex.isRecursive": (), + "QMutex.lock": (), + "QMutex.tryLock": [(), ('int',)], + "QMutex.try_lock": (), + "QMutex.unlock": (), + + # class PySide2.QtCore.QMutexLocker: + "QMutexLocker.__init__": ('PySide2.QtCore.QBasicMutex',), + "QMutexLocker.__enter__": (), + "QMutexLocker.__exit__": ('object', 'object', 'object'), + "QMutexLocker.mutex": (), + "QMutexLocker.relock": (), + "QMutexLocker.unlock": (), + + # class PySide2.QtCore.QObject: + "QObject.__init__": ('PySide2.QtCore.QObject',), + "QObject.blockSignals": ('bool',), + "QObject.childEvent": ('PySide2.QtCore.QChildEvent',), + "QObject.children": (), + "QObject.connect": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType')], + "QObject.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.customEvent": ('PySide2.QtCore.QEvent',), + "QObject.deleteLater": (), + "QObject.disconnect": [('PySide2.QtCore.QMetaObject.Connection',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'Callable'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str'), ('str', 'Callable'), ('str', 'PySide2.QtCore.QObject', 'str')], + "QObject.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.dumpObjectInfo": (), + "QObject.dumpObjectTree": (), + "QObject.dynamicPropertyNames": (), + "QObject.emit": ('str', '...'), + "QObject.event": ('PySide2.QtCore.QEvent',), + "QObject.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QObject.findChild": ('type', 'str'), + "QObject.findChildren": [('type', 'PySide2.QtCore.QRegExp'), ('type', 'str')], + "QObject.inherits": ('str',), + "QObject.installEventFilter": ('PySide2.QtCore.QObject',), + "QObject.isSignalConnected": ('PySide2.QtCore.QMetaMethod',), + "QObject.isWidgetType": (), + "QObject.isWindowType": (), + "QObject.killTimer": ('int',), + "QObject.metaObject": (), + "QObject.moveToThread": ('PySide2.QtCore.QThread',), + "QObject.objectName": (), + "QObject.parent": (), + "QObject.property": ('str',), + "QObject.receivers": ('str',), + "QObject.registerUserData": (), + "QObject.removeEventFilter": ('PySide2.QtCore.QObject',), + "QObject.sender": (), + "QObject.senderSignalIndex": (), + "QObject.setObjectName": ('str',), + "QObject.setParent": ('PySide2.QtCore.QObject',), + "QObject.setProperty": ('str', 'Any'), + "QObject.signalsBlocked": (), + "QObject.startTimer": ('int', 'PySide2.QtCore.Qt.TimerType'), + "QObject.thread": (), + "QObject.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QObject.tr": ('str', 'str', 'int'), + + # class PySide2.QtCore.QParallelAnimationGroup: + "QParallelAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QParallelAnimationGroup.duration": (), + "QParallelAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QParallelAnimationGroup.updateCurrentTime": ('int',), + "QParallelAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QParallelAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QPauseAnimation: + "QPauseAnimation.__init__": [('PySide2.QtCore.QObject',), ('int', 'PySide2.QtCore.QObject')], + "QPauseAnimation.duration": (), + "QPauseAnimation.event": ('PySide2.QtCore.QEvent',), + "QPauseAnimation.setDuration": ('int',), + "QPauseAnimation.updateCurrentTime": ('int',), + + # class PySide2.QtCore.QPersistentModelIndex: + "QPersistentModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QPersistentModelIndex',)], + "QPersistentModelIndex.__copy__": (), + "QPersistentModelIndex.child": ('int', 'int'), + "QPersistentModelIndex.column": (), + "QPersistentModelIndex.data": ('int',), + "QPersistentModelIndex.flags": (), + "QPersistentModelIndex.internalId": (), + "QPersistentModelIndex.internalPointer": (), + "QPersistentModelIndex.isValid": (), + "QPersistentModelIndex.model": (), + "QPersistentModelIndex.parent": (), + "QPersistentModelIndex.row": (), + "QPersistentModelIndex.sibling": ('int', 'int'), + "QPersistentModelIndex.swap": ('PySide2.QtCore.QPersistentModelIndex',), + + # class PySide2.QtCore.QPluginLoader: + "QPluginLoader.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QPluginLoader.errorString": (), + "QPluginLoader.fileName": (), + "QPluginLoader.instance": (), + "QPluginLoader.isLoaded": (), + "QPluginLoader.load": (), + "QPluginLoader.metaData": (), + "QPluginLoader.setFileName": ('str',), + "QPluginLoader.staticInstances": (), + "QPluginLoader.unload": (), + + # class PySide2.QtCore.QPoint: + "QPoint.__init__": [(), ('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPoint.__copy__": (), + "QPoint.__reduce__": (), + "QPoint.dotProduct": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QPoint.isNull": (), + "QPoint.manhattanLength": (), + "QPoint.setX": ('int',), + "QPoint.setY": ('int',), + "QPoint.toTuple": (), + "QPoint.x": (), + "QPoint.y": (), + + # class PySide2.QtCore.QPointF: + "QPointF.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPointF.__copy__": (), + "QPointF.__reduce__": (), + "QPointF.dotProduct": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QPointF.isNull": (), + "QPointF.manhattanLength": (), + "QPointF.setX": ('float',), + "QPointF.setY": ('float',), + "QPointF.toPoint": (), + "QPointF.toTuple": (), + "QPointF.x": (), + "QPointF.y": (), + + # class PySide2.QtCore.QProcess: + "QProcess.__init__": ('PySide2.QtCore.QObject',), + "QProcess.arguments": (), + "QProcess.atEnd": (), + "QProcess.bytesAvailable": (), + "QProcess.bytesToWrite": (), + "QProcess.canReadLine": (), + "QProcess.close": (), + "QProcess.closeReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.closeWriteChannel": (), + "QProcess.environment": (), + "QProcess.execute": [('str',), ('str', 'List[str]')], + "QProcess.exitCode": (), + "QProcess.exitStatus": (), + "QProcess.inputChannelMode": (), + "QProcess.isSequential": (), + "QProcess.kill": (), + "QProcess.nullDevice": (), + "QProcess.open": ('OpenMode',), + "QProcess.pid": (), + "QProcess.processChannelMode": (), + "QProcess.processEnvironment": (), + "QProcess.processId": (), + "QProcess.program": (), + "QProcess.readAllStandardError": (), + "QProcess.readAllStandardOutput": (), + "QProcess.readChannel": (), + "QProcess.readData": ('str', 'int'), + "QProcess.setArguments": ('List[str]',), + "QProcess.setEnvironment": ('List[str]',), + "QProcess.setInputChannelMode": ('PySide2.QtCore.QProcess.InputChannelMode',), + "QProcess.setProcessChannelMode": ('PySide2.QtCore.QProcess.ProcessChannelMode',), + "QProcess.setProcessEnvironment": ('PySide2.QtCore.QProcessEnvironment',), + "QProcess.setProcessState": ('PySide2.QtCore.QProcess.ProcessState',), + "QProcess.setProgram": ('str',), + "QProcess.setReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.setStandardErrorFile": ('str', 'OpenMode'), + "QProcess.setStandardInputFile": ('str',), + "QProcess.setStandardOutputFile": ('str', 'OpenMode'), + "QProcess.setStandardOutputProcess": ('PySide2.QtCore.QProcess',), + "QProcess.setWorkingDirectory": ('str',), + "QProcess.setupChildProcess": (), + "QProcess.start": [('OpenMode',), ('str', 'List[str]', 'OpenMode'), ('str', 'OpenMode')], + "QProcess.startDetached": [('str',), ('str', 'List[str]'), ('str', 'List[str]', 'str', 'int')], + "QProcess.state": (), + "QProcess.systemEnvironment": (), + "QProcess.terminate": (), + "QProcess.waitForBytesWritten": ('int',), + "QProcess.waitForFinished": ('int',), + "QProcess.waitForReadyRead": ('int',), + "QProcess.waitForStarted": ('int',), + "QProcess.workingDirectory": (), + "QProcess.writeData": ('str', 'int'), + + # class PySide2.QtCore.QProcessEnvironment: + "QProcessEnvironment.__init__": [(), ('PySide2.QtCore.QProcessEnvironment',)], + "QProcessEnvironment.__copy__": (), + "QProcessEnvironment.clear": (), + "QProcessEnvironment.contains": ('str',), + "QProcessEnvironment.insert": [('PySide2.QtCore.QProcessEnvironment',), ('str', 'str')], + "QProcessEnvironment.isEmpty": (), + "QProcessEnvironment.keys": (), + "QProcessEnvironment.remove": ('str',), + "QProcessEnvironment.swap": ('PySide2.QtCore.QProcessEnvironment',), + "QProcessEnvironment.systemEnvironment": (), + "QProcessEnvironment.toStringList": (), + "QProcessEnvironment.value": ('str', 'str'), + + # class PySide2.QtCore.QPropertyAnimation: + "QPropertyAnimation.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QPropertyAnimation.event": ('PySide2.QtCore.QEvent',), + "QPropertyAnimation.propertyName": (), + "QPropertyAnimation.setPropertyName": ('PySide2.QtCore.QByteArray',), + "QPropertyAnimation.setTargetObject": ('PySide2.QtCore.QObject',), + "QPropertyAnimation.targetObject": (), + "QPropertyAnimation.updateCurrentValue": ('Any',), + "QPropertyAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QReadLocker: + "QReadLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QReadLocker.__enter__": (), + "QReadLocker.__exit__": ('object', 'object', 'object'), + "QReadLocker.readWriteLock": (), + "QReadLocker.relock": (), + "QReadLocker.unlock": (), + + # class PySide2.QtCore.QReadWriteLock: + "QReadWriteLock.__init__": ('PySide2.QtCore.QReadWriteLock.RecursionMode',), + "QReadWriteLock.lockForRead": (), + "QReadWriteLock.lockForWrite": (), + "QReadWriteLock.tryLockForRead": [(), ('int',)], + "QReadWriteLock.tryLockForWrite": [(), ('int',)], + "QReadWriteLock.unlock": (), + + # class PySide2.QtCore.QRect: + "QRect.__init__": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QSize'), ('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRect.__copy__": (), + "QRect.__reduce__": (), + "QRect.adjust": ('int', 'int', 'int', 'int'), + "QRect.adjusted": ('int', 'int', 'int', 'int'), + "QRect.bottom": (), + "QRect.bottomLeft": (), + "QRect.bottomRight": (), + "QRect.center": (), + "QRect.contains": [('PySide2.QtCore.QPoint', 'bool'), ('PySide2.QtCore.QRect', 'bool'), ('int', 'int'), ('int', 'int', 'bool')], + "QRect.getCoords": ('int', 'int', 'int', 'int'), + "QRect.getRect": ('int', 'int', 'int', 'int'), + "QRect.height": (), + "QRect.intersected": ('PySide2.QtCore.QRect',), + "QRect.intersects": ('PySide2.QtCore.QRect',), + "QRect.isEmpty": (), + "QRect.isNull": (), + "QRect.isValid": (), + "QRect.left": (), + "QRect.marginsAdded": ('PySide2.QtCore.QMargins',), + "QRect.marginsRemoved": ('PySide2.QtCore.QMargins',), + "QRect.moveBottom": ('int',), + "QRect.moveBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.moveCenter": ('PySide2.QtCore.QPoint',), + "QRect.moveLeft": ('int',), + "QRect.moveRight": ('int',), + "QRect.moveTo": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.moveTop": ('int',), + "QRect.moveTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveTopRight": ('PySide2.QtCore.QPoint',), + "QRect.normalized": (), + "QRect.right": (), + "QRect.setBottom": ('int',), + "QRect.setBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.setBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.setCoords": ('int', 'int', 'int', 'int'), + "QRect.setHeight": ('int',), + "QRect.setLeft": ('int',), + "QRect.setRect": ('int', 'int', 'int', 'int'), + "QRect.setRight": ('int',), + "QRect.setSize": ('PySide2.QtCore.QSize',), + "QRect.setTop": ('int',), + "QRect.setTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.setTopRight": ('PySide2.QtCore.QPoint',), + "QRect.setWidth": ('int',), + "QRect.setX": ('int',), + "QRect.setY": ('int',), + "QRect.size": (), + "QRect.top": (), + "QRect.topLeft": (), + "QRect.topRight": (), + "QRect.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.transposed": (), + "QRect.united": ('PySide2.QtCore.QRect',), + "QRect.width": (), + "QRect.x": (), + "QRect.y": (), + + # class PySide2.QtCore.QRectF: + "QRectF.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QSizeF'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QRectF.__copy__": (), + "QRectF.__reduce__": (), + "QRectF.adjust": ('float', 'float', 'float', 'float'), + "QRectF.adjusted": ('float', 'float', 'float', 'float'), + "QRectF.bottom": (), + "QRectF.bottomLeft": (), + "QRectF.bottomRight": (), + "QRectF.center": (), + "QRectF.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('float', 'float')], + "QRectF.getCoords": ('float', 'float', 'float', 'float'), + "QRectF.getRect": ('float', 'float', 'float', 'float'), + "QRectF.height": (), + "QRectF.intersected": ('PySide2.QtCore.QRectF',), + "QRectF.intersects": ('PySide2.QtCore.QRectF',), + "QRectF.isEmpty": (), + "QRectF.isNull": (), + "QRectF.isValid": (), + "QRectF.left": (), + "QRectF.marginsAdded": ('PySide2.QtCore.QMarginsF',), + "QRectF.marginsRemoved": ('PySide2.QtCore.QMarginsF',), + "QRectF.moveBottom": ('float',), + "QRectF.moveBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.moveCenter": ('PySide2.QtCore.QPointF',), + "QRectF.moveLeft": ('float',), + "QRectF.moveRight": ('float',), + "QRectF.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.moveTop": ('float',), + "QRectF.moveTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.normalized": (), + "QRectF.right": (), + "QRectF.setBottom": ('float',), + "QRectF.setBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.setCoords": ('float', 'float', 'float', 'float'), + "QRectF.setHeight": ('float',), + "QRectF.setLeft": ('float',), + "QRectF.setRect": ('float', 'float', 'float', 'float'), + "QRectF.setRight": ('float',), + "QRectF.setSize": ('PySide2.QtCore.QSizeF',), + "QRectF.setTop": ('float',), + "QRectF.setTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.setWidth": ('float',), + "QRectF.setX": ('float',), + "QRectF.setY": ('float',), + "QRectF.size": (), + "QRectF.toAlignedRect": (), + "QRectF.toRect": (), + "QRectF.top": (), + "QRectF.topLeft": (), + "QRectF.topRight": (), + "QRectF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.transposed": (), + "QRectF.united": ('PySide2.QtCore.QRectF',), + "QRectF.width": (), + "QRectF.x": (), + "QRectF.y": (), + + # class PySide2.QtCore.QRegExp: + "QRegExp.__init__": [(), ('PySide2.QtCore.QRegExp',), ('str', 'PySide2.QtCore.Qt.CaseSensitivity', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QRegExp.__copy__": (), + "QRegExp.__reduce__": (), + "QRegExp.cap": ('int',), + "QRegExp.captureCount": (), + "QRegExp.capturedTexts": (), + "QRegExp.caseSensitivity": (), + "QRegExp.errorString": (), + "QRegExp.escape": ('str',), + "QRegExp.exactMatch": ('str',), + "QRegExp.indexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.isEmpty": (), + "QRegExp.isMinimal": (), + "QRegExp.isValid": (), + "QRegExp.lastIndexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.matchedLength": (), + "QRegExp.pattern": (), + "QRegExp.patternSyntax": (), + "QRegExp.pos": ('int',), + "QRegExp.replace": ('str', 'str'), + "QRegExp.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QRegExp.setMinimal": ('bool',), + "QRegExp.setPattern": ('str',), + "QRegExp.setPatternSyntax": ('PySide2.QtCore.QRegExp.PatternSyntax',), + "QRegExp.swap": ('PySide2.QtCore.QRegExp',), + + # class PySide2.QtCore.QRegularExpression: + "QRegularExpression.__init__": [(), ('PySide2.QtCore.QRegularExpression',), ('str', 'PatternOptions')], + "QRegularExpression.__copy__": (), + "QRegularExpression.captureCount": (), + "QRegularExpression.errorString": (), + "QRegularExpression.escape": ('str',), + "QRegularExpression.globalMatch": ('str', 'int', 'PySide2.QtCore.QRegularExpression.MatchType', 'MatchOptions'), + "QRegularExpression.isValid": (), + "QRegularExpression.match": ('str', 'int', 'PySide2.QtCore.QRegularExpression.MatchType', 'MatchOptions'), + "QRegularExpression.namedCaptureGroups": (), + "QRegularExpression.optimize": (), + "QRegularExpression.pattern": (), + "QRegularExpression.patternErrorOffset": (), + "QRegularExpression.patternOptions": (), + "QRegularExpression.setPattern": ('str',), + "QRegularExpression.setPatternOptions": ('PatternOptions',), + "QRegularExpression.swap": ('PySide2.QtCore.QRegularExpression',), + + # class PySide2.QtCore.QRegularExpressionMatch: + "QRegularExpressionMatch.__init__": [(), ('PySide2.QtCore.QRegularExpressionMatch',)], + "QRegularExpressionMatch.__copy__": (), + "QRegularExpressionMatch.captured": [('int',), ('str',)], + "QRegularExpressionMatch.capturedEnd": [('int',), ('str',)], + "QRegularExpressionMatch.capturedLength": [('int',), ('str',)], + "QRegularExpressionMatch.capturedRef": [('int',), ('str',)], + "QRegularExpressionMatch.capturedStart": [('int',), ('str',)], + "QRegularExpressionMatch.capturedTexts": (), + "QRegularExpressionMatch.hasMatch": (), + "QRegularExpressionMatch.hasPartialMatch": (), + "QRegularExpressionMatch.isValid": (), + "QRegularExpressionMatch.lastCapturedIndex": (), + "QRegularExpressionMatch.matchOptions": (), + "QRegularExpressionMatch.matchType": (), + "QRegularExpressionMatch.regularExpression": (), + "QRegularExpressionMatch.swap": ('PySide2.QtCore.QRegularExpressionMatch',), + + # class PySide2.QtCore.QRegularExpressionMatchIterator: + "QRegularExpressionMatchIterator.__init__": [(), ('PySide2.QtCore.QRegularExpressionMatchIterator',)], + "QRegularExpressionMatchIterator.__copy__": (), + "QRegularExpressionMatchIterator.hasNext": (), + "QRegularExpressionMatchIterator.isValid": (), + "QRegularExpressionMatchIterator.matchOptions": (), + "QRegularExpressionMatchIterator.matchType": (), + "QRegularExpressionMatchIterator.peekNext": (), + "QRegularExpressionMatchIterator.regularExpression": (), + "QRegularExpressionMatchIterator.swap": ('PySide2.QtCore.QRegularExpressionMatchIterator',), + + # class PySide2.QtCore.QResource: + "QResource.__init__": ('str', 'PySide2.QtCore.QLocale'), + "QResource.absoluteFilePath": (), + "QResource.addSearchPath": ('str',), + "QResource.children": (), + "QResource.data": (), + "QResource.fileName": (), + "QResource.isCompressed": (), + "QResource.isDir": (), + "QResource.isFile": (), + "QResource.isValid": (), + "QResource.lastModified": (), + "QResource.locale": (), + "QResource.registerResource": ('str', 'str'), + "QResource.registerResourceData": ('Union[str, int]', 'str'), + "QResource.searchPaths": (), + "QResource.setFileName": ('str',), + "QResource.setLocale": ('PySide2.QtCore.QLocale',), + "QResource.size": (), + "QResource.unregisterResource": ('str', 'str'), + "QResource.unregisterResourceData": ('Union[str, int]', 'str'), + + # class PySide2.QtCore.QRunnable: + "QRunnable.__init__": (), + "QRunnable.autoDelete": (), + "QRunnable.run": (), + "QRunnable.setAutoDelete": ('bool',), + + # class PySide2.QtCore.QSaveFile: + "QSaveFile.__init__": [('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QSaveFile.cancelWriting": (), + "QSaveFile.close": (), + "QSaveFile.commit": (), + "QSaveFile.directWriteFallback": (), + "QSaveFile.fileName": (), + "QSaveFile.open": ('OpenMode',), + "QSaveFile.setDirectWriteFallback": ('bool',), + "QSaveFile.setFileName": ('str',), + "QSaveFile.writeData": ('str', 'int'), + + # class PySide2.QtCore.QSemaphore: + "QSemaphore.__init__": ('int',), + "QSemaphore.acquire": ('int',), + "QSemaphore.available": (), + "QSemaphore.release": ('int',), + "QSemaphore.tryAcquire": [('int',), ('int', 'int')], + + # class PySide2.QtCore.QSequentialAnimationGroup: + "QSequentialAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QSequentialAnimationGroup.addPause": ('int',), + "QSequentialAnimationGroup.currentAnimation": (), + "QSequentialAnimationGroup.duration": (), + "QSequentialAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QSequentialAnimationGroup.insertPause": ('int', 'int'), + "QSequentialAnimationGroup.updateCurrentTime": ('int',), + "QSequentialAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QSequentialAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QSettings: + "QSettings.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QObject'), ('str', 'str', 'PySide2.QtCore.QObject')], + "QSettings.allKeys": (), + "QSettings.applicationName": (), + "QSettings.beginGroup": ('str',), + "QSettings.beginReadArray": ('str',), + "QSettings.beginWriteArray": ('str', 'int'), + "QSettings.childGroups": (), + "QSettings.childKeys": (), + "QSettings.clear": (), + "QSettings.contains": ('str',), + "QSettings.defaultFormat": (), + "QSettings.endArray": (), + "QSettings.endGroup": (), + "QSettings.event": ('PySide2.QtCore.QEvent',), + "QSettings.fallbacksEnabled": (), + "QSettings.fileName": (), + "QSettings.format": (), + "QSettings.group": (), + "QSettings.iniCodec": (), + "QSettings.isWritable": (), + "QSettings.organizationName": (), + "QSettings.remove": ('str',), + "QSettings.scope": (), + "QSettings.setArrayIndex": ('int',), + "QSettings.setDefaultFormat": ('PySide2.QtCore.QSettings.Format',), + "QSettings.setFallbacksEnabled": ('bool',), + "QSettings.setIniCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QSettings.setPath": ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str'), + "QSettings.setValue": ('str', 'Any'), + "QSettings.status": (), + "QSettings.sync": (), + "QSettings.value": ('str', 'Any'), + + # class PySide2.QtCore.QSignalMapper: + "QSignalMapper.__init__": ('PySide2.QtCore.QObject',), + "QSignalMapper.map": [(), ('PySide2.QtCore.QObject',)], + "QSignalMapper.mapping": [('PySide2.QtCore.QObject',), ('int',), ('str',)], + "QSignalMapper.removeMappings": ('PySide2.QtCore.QObject',), + "QSignalMapper.setMapping": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + + # class PySide2.QtCore.QSignalTransition: + "QSignalTransition.__init__": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',), ('object', 'PySide2.QtCore.QState')], + "QSignalTransition.event": ('PySide2.QtCore.QEvent',), + "QSignalTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QSignalTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QSignalTransition.senderObject": (), + "QSignalTransition.setSenderObject": ('PySide2.QtCore.QObject',), + "QSignalTransition.setSignal": ('PySide2.QtCore.QByteArray',), + "QSignalTransition.signal": (), + + # class PySide2.QtCore.QSize: + "QSize.__init__": [(), ('PySide2.QtCore.QSize',), ('int', 'int')], + "QSize.__copy__": (), + "QSize.__reduce__": (), + "QSize.boundedTo": ('PySide2.QtCore.QSize',), + "QSize.expandedTo": ('PySide2.QtCore.QSize',), + "QSize.height": (), + "QSize.isEmpty": (), + "QSize.isNull": (), + "QSize.isValid": (), + "QSize.scale": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.setHeight": ('int',), + "QSize.setWidth": ('int',), + "QSize.toTuple": (), + "QSize.transpose": (), + "QSize.transposed": (), + "QSize.width": (), + + # class PySide2.QtCore.QSizeF: + "QSizeF.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QSizeF.__copy__": (), + "QSizeF.__reduce__": (), + "QSizeF.boundedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.expandedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.height": (), + "QSizeF.isEmpty": (), + "QSizeF.isNull": (), + "QSizeF.isValid": (), + "QSizeF.scale": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.scaled": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.setHeight": ('float',), + "QSizeF.setWidth": ('float',), + "QSizeF.toSize": (), + "QSizeF.toTuple": (), + "QSizeF.transpose": (), + "QSizeF.transposed": (), + "QSizeF.width": (), + + # class PySide2.QtCore.QSocketNotifier: + "QSocketNotifier.__init__": [('int', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject'), ('object', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject')], + "QSocketNotifier.event": ('PySide2.QtCore.QEvent',), + "QSocketNotifier.isEnabled": (), + "QSocketNotifier.setEnabled": ('bool',), + "QSocketNotifier.socket": (), + "QSocketNotifier.type": (), + + # class PySide2.QtCore.QSortFilterProxyModel: + "QSortFilterProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QSortFilterProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSortFilterProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.dynamicSortFilter": (), + "QSortFilterProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.filterAcceptsColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterAcceptsRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterCaseSensitivity": (), + "QSortFilterProxyModel.filterKeyColumn": (), + "QSortFilterProxyModel.filterRegExp": (), + "QSortFilterProxyModel.filterRole": (), + "QSortFilterProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSortFilterProxyModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.invalidate": (), + "QSortFilterProxyModel.invalidateFilter": (), + "QSortFilterProxyModel.isSortLocaleAware": (), + "QSortFilterProxyModel.lessThan": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'MatchFlags'), + "QSortFilterProxyModel.mimeData": ('List[int]',), + "QSortFilterProxyModel.mimeTypes": (), + "QSortFilterProxyModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QSortFilterProxyModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSortFilterProxyModel.setDynamicSortFilter": ('bool',), + "QSortFilterProxyModel.setFilterCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setFilterFixedString": ('str',), + "QSortFilterProxyModel.setFilterKeyColumn": ('int',), + "QSortFilterProxyModel.setFilterRegExp": [('PySide2.QtCore.QRegExp',), ('str',)], + "QSortFilterProxyModel.setFilterRole": ('int',), + "QSortFilterProxyModel.setFilterWildcard": ('str',), + "QSortFilterProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QSortFilterProxyModel.setSortCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setSortLocaleAware": ('bool',), + "QSortFilterProxyModel.setSortRole": ('int',), + "QSortFilterProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QSortFilterProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSortFilterProxyModel.sortCaseSensitivity": (), + "QSortFilterProxyModel.sortColumn": (), + "QSortFilterProxyModel.sortOrder": (), + "QSortFilterProxyModel.sortRole": (), + "QSortFilterProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QStandardPaths: + "QStandardPaths.displayName": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.enableTestMode": ('bool',), + "QStandardPaths.findExecutable": ('str', 'List[str]'), + "QStandardPaths.isTestModeEnabled": (), + "QStandardPaths.locate": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'LocateOptions'), + "QStandardPaths.locateAll": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'LocateOptions'), + "QStandardPaths.setTestModeEnabled": ('bool',), + "QStandardPaths.standardLocations": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.writableLocation": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + + # class PySide2.QtCore.QState: + "QState.__init__": [('PySide2.QtCore.QState',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QState')], + "QState.addTransition": [('PySide2.QtCore.QAbstractState',), ('PySide2.QtCore.QAbstractTransition',), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QAbstractState'), ('object', 'PySide2.QtCore.QAbstractState')], + "QState.assignProperty": ('PySide2.QtCore.QObject', 'str', 'Any'), + "QState.childMode": (), + "QState.errorState": (), + "QState.event": ('PySide2.QtCore.QEvent',), + "QState.initialState": (), + "QState.onEntry": ('PySide2.QtCore.QEvent',), + "QState.onExit": ('PySide2.QtCore.QEvent',), + "QState.removeTransition": ('PySide2.QtCore.QAbstractTransition',), + "QState.setChildMode": ('PySide2.QtCore.QState.ChildMode',), + "QState.setErrorState": ('PySide2.QtCore.QAbstractState',), + "QState.setInitialState": ('PySide2.QtCore.QAbstractState',), + "QState.transitions": (), + + # class PySide2.QtCore.QStateMachine: + "QStateMachine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QObject')], + "QStateMachine.addDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.addState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.beginMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.beginSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.cancelDelayedEvent": ('int',), + "QStateMachine.clearError": (), + "QStateMachine.configuration": (), + "QStateMachine.defaultAnimations": (), + "QStateMachine.endMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.endSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.error": (), + "QStateMachine.errorString": (), + "QStateMachine.event": ('PySide2.QtCore.QEvent',), + "QStateMachine.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStateMachine.globalRestorePolicy": (), + "QStateMachine.isAnimated": (), + "QStateMachine.isRunning": (), + "QStateMachine.onEntry": ('PySide2.QtCore.QEvent',), + "QStateMachine.onExit": ('PySide2.QtCore.QEvent',), + "QStateMachine.postDelayedEvent": ('PySide2.QtCore.QEvent', 'int'), + "QStateMachine.postEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QStateMachine.EventPriority'), + "QStateMachine.removeDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.removeState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.setAnimated": ('bool',), + "QStateMachine.setGlobalRestorePolicy": ('PySide2.QtCore.QState.RestorePolicy',), + "QStateMachine.setRunning": ('bool',), + "QStateMachine.start": (), + "QStateMachine.stop": (), + + # class PySide2.QtCore.QStorageInfo: + "QStorageInfo.__init__": [(), ('PySide2.QtCore.QDir',), ('PySide2.QtCore.QStorageInfo',), ('str',)], + "QStorageInfo.__copy__": (), + "QStorageInfo.blockSize": (), + "QStorageInfo.bytesAvailable": (), + "QStorageInfo.bytesFree": (), + "QStorageInfo.bytesTotal": (), + "QStorageInfo.device": (), + "QStorageInfo.displayName": (), + "QStorageInfo.fileSystemType": (), + "QStorageInfo.isReadOnly": (), + "QStorageInfo.isReady": (), + "QStorageInfo.isRoot": (), + "QStorageInfo.isValid": (), + "QStorageInfo.mountedVolumes": (), + "QStorageInfo.name": (), + "QStorageInfo.refresh": (), + "QStorageInfo.root": (), + "QStorageInfo.rootPath": (), + "QStorageInfo.setPath": ('str',), + "QStorageInfo.subvolume": (), + "QStorageInfo.swap": ('PySide2.QtCore.QStorageInfo',), + + # class PySide2.QtCore.QSysInfo: + "QSysInfo.__init__": (), + "QSysInfo.buildAbi": (), + "QSysInfo.buildCpuArchitecture": (), + "QSysInfo.currentCpuArchitecture": (), + "QSysInfo.kernelType": (), + "QSysInfo.kernelVersion": (), + "QSysInfo.machineHostName": (), + "QSysInfo.prettyProductName": (), + "QSysInfo.productType": (), + "QSysInfo.productVersion": (), + + # class PySide2.QtCore.QSystemSemaphore: + "QSystemSemaphore.__init__": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + "QSystemSemaphore.acquire": (), + "QSystemSemaphore.error": (), + "QSystemSemaphore.errorString": (), + "QSystemSemaphore.key": (), + "QSystemSemaphore.release": ('int',), + "QSystemSemaphore.setKey": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + + # class PySide2.QtCore.QTemporaryDir: + "QTemporaryDir.__init__": [(), ('str',)], + "QTemporaryDir.autoRemove": (), + "QTemporaryDir.errorString": (), + "QTemporaryDir.filePath": ('str',), + "QTemporaryDir.isValid": (), + "QTemporaryDir.path": (), + "QTemporaryDir.remove": (), + "QTemporaryDir.setAutoRemove": ('bool',), + + # class PySide2.QtCore.QTemporaryFile: + "QTemporaryFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QTemporaryFile.autoRemove": (), + "QTemporaryFile.createLocalFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.createNativeFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.fileName": (), + "QTemporaryFile.fileTemplate": (), + "QTemporaryFile.open": [(), ('OpenMode',)], + "QTemporaryFile.setAutoRemove": ('bool',), + "QTemporaryFile.setFileTemplate": ('str',), + + # class PySide2.QtCore.QTextBoundaryFinder: + "QTextBoundaryFinder.__init__": [(), ('PySide2.QtCore.QTextBoundaryFinder',), ('PySide2.QtCore.QTextBoundaryFinder.BoundaryType', 'str')], + "QTextBoundaryFinder.__copy__": (), + "QTextBoundaryFinder.boundaryReasons": (), + "QTextBoundaryFinder.isAtBoundary": (), + "QTextBoundaryFinder.isValid": (), + "QTextBoundaryFinder.position": (), + "QTextBoundaryFinder.setPosition": ('int',), + "QTextBoundaryFinder.string": (), + "QTextBoundaryFinder.toEnd": (), + "QTextBoundaryFinder.toNextBoundary": (), + "QTextBoundaryFinder.toPreviousBoundary": (), + "QTextBoundaryFinder.toStart": (), + "QTextBoundaryFinder.type": (), + + # class PySide2.QtCore.QTextCodec: + "QTextCodec.__init__": (), + "QTextCodec.aliases": (), + "QTextCodec.availableCodecs": (), + "QTextCodec.availableMibs": (), + "QTextCodec.canEncode": [('Union[str, int]',), ('str',)], + "QTextCodec.codecForHtml": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.codecForLocale": (), + "QTextCodec.codecForMib": ('int',), + "QTextCodec.codecForName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QTextCodec.codecForUtfText": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.convertToUnicode": ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState'), + "QTextCodec.fromUnicode": ('str',), + "QTextCodec.makeDecoder": ('ConversionFlags',), + "QTextCodec.makeEncoder": ('ConversionFlags',), + "QTextCodec.mibEnum": (), + "QTextCodec.name": (), + "QTextCodec.setCodecForLocale": ('PySide2.QtCore.QTextCodec',), + "QTextCodec.toUnicode": [('PySide2.QtCore.QByteArray',), ('str',), ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState')], + + # class PySide2.QtCore.QTextDecoder: + "QTextDecoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'ConversionFlags')], + "QTextDecoder.hasFailure": (), + "QTextDecoder.toUnicode": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QTextEncoder: + "QTextEncoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'ConversionFlags')], + "QTextEncoder.fromUnicode": ('str',), + "QTextEncoder.hasFailure": (), + + # class PySide2.QtCore.QTextStream: + "QTextStream.__init__": [(), ('PySide2.QtCore.QByteArray', 'OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QTextStream.atEnd": (), + "QTextStream.autoDetectUnicode": (), + "QTextStream.codec": (), + "QTextStream.device": (), + "QTextStream.fieldAlignment": (), + "QTextStream.fieldWidth": (), + "QTextStream.flush": (), + "QTextStream.generateByteOrderMark": (), + "QTextStream.integerBase": (), + "QTextStream.locale": (), + "QTextStream.numberFlags": (), + "QTextStream.padChar": (), + "QTextStream.pos": (), + "QTextStream.read": ('int',), + "QTextStream.readAll": (), + "QTextStream.readLine": ('int',), + "QTextStream.realNumberNotation": (), + "QTextStream.realNumberPrecision": (), + "QTextStream.reset": (), + "QTextStream.resetStatus": (), + "QTextStream.seek": ('int',), + "QTextStream.setAutoDetectUnicode": ('bool',), + "QTextStream.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QTextStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextStream.setFieldAlignment": ('PySide2.QtCore.QTextStream.FieldAlignment',), + "QTextStream.setFieldWidth": ('int',), + "QTextStream.setGenerateByteOrderMark": ('bool',), + "QTextStream.setIntegerBase": ('int',), + "QTextStream.setLocale": ('PySide2.QtCore.QLocale',), + "QTextStream.setNumberFlags": ('NumberFlags',), + "QTextStream.setPadChar": ('Union[str, int]',), + "QTextStream.setRealNumberNotation": ('PySide2.QtCore.QTextStream.RealNumberNotation',), + "QTextStream.setRealNumberPrecision": ('int',), + "QTextStream.setStatus": ('PySide2.QtCore.QTextStream.Status',), + "QTextStream.skipWhiteSpace": (), + "QTextStream.status": (), + "QTextStream.string": (), + + # class PySide2.QtCore.QTextStreamManipulator: + "QTextStreamManipulator.__copy__": (), + "QTextStreamManipulator.exec_": ('PySide2.QtCore.QTextStream',), + + # class PySide2.QtCore.QThread: + "QThread.__init__": ('PySide2.QtCore.QObject',), + "QThread.currentThread": (), + "QThread.event": ('PySide2.QtCore.QEvent',), + "QThread.eventDispatcher": (), + "QThread.exec_": (), + "QThread.exit": ('int',), + "QThread.idealThreadCount": (), + "QThread.isFinished": (), + "QThread.isInterruptionRequested": (), + "QThread.isRunning": (), + "QThread.loopLevel": (), + "QThread.msleep": ('int',), + "QThread.priority": (), + "QThread.quit": (), + "QThread.requestInterruption": (), + "QThread.run": (), + "QThread.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QThread.setPriority": ('PySide2.QtCore.QThread.Priority',), + "QThread.setStackSize": ('int',), + "QThread.setTerminationEnabled": ('bool',), + "QThread.sleep": ('int',), + "QThread.stackSize": (), + "QThread.start": ('PySide2.QtCore.QThread.Priority',), + "QThread.terminate": (), + "QThread.usleep": ('int',), + "QThread.wait": ('int',), + "QThread.yieldCurrentThread": (), + + # class PySide2.QtCore.QThreadPool: + "QThreadPool.__init__": ('PySide2.QtCore.QObject',), + "QThreadPool.activeThreadCount": (), + "QThreadPool.cancel": ('PySide2.QtCore.QRunnable',), + "QThreadPool.clear": (), + "QThreadPool.expiryTimeout": (), + "QThreadPool.globalInstance": (), + "QThreadPool.maxThreadCount": (), + "QThreadPool.releaseThread": (), + "QThreadPool.reserveThread": (), + "QThreadPool.setExpiryTimeout": ('int',), + "QThreadPool.setMaxThreadCount": ('int',), + "QThreadPool.start": ('PySide2.QtCore.QRunnable', 'int'), + "QThreadPool.tryStart": ('PySide2.QtCore.QRunnable',), + "QThreadPool.tryTake": ('PySide2.QtCore.QRunnable',), + "QThreadPool.waitForDone": ('int',), + + # class PySide2.QtCore.QTime: + "QTime.__init__": [(), ('PySide2.QtCore.QTime',), ('int', 'int', 'int', 'int')], + "QTime.__copy__": (), + "QTime.__reduce__": (), + "QTime.addMSecs": ('int',), + "QTime.addSecs": ('int',), + "QTime.currentTime": (), + "QTime.elapsed": (), + "QTime.fromMSecsSinceStartOfDay": ('int',), + "QTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QTime.hour": (), + "QTime.isNull": (), + "QTime.isValid": [(), ('int', 'int', 'int', 'int')], + "QTime.minute": (), + "QTime.msec": (), + "QTime.msecsSinceStartOfDay": (), + "QTime.msecsTo": ('PySide2.QtCore.QTime',), + "QTime.restart": (), + "QTime.second": (), + "QTime.secsTo": ('PySide2.QtCore.QTime',), + "QTime.setHMS": ('int', 'int', 'int', 'int'), + "QTime.start": (), + "QTime.toPython": (), + "QTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + + # class PySide2.QtCore.QTimeLine: + "QTimeLine.__init__": ('int', 'PySide2.QtCore.QObject'), + "QTimeLine.currentFrame": (), + "QTimeLine.currentTime": (), + "QTimeLine.currentValue": (), + "QTimeLine.curveShape": (), + "QTimeLine.direction": (), + "QTimeLine.duration": (), + "QTimeLine.easingCurve": (), + "QTimeLine.endFrame": (), + "QTimeLine.frameForTime": ('int',), + "QTimeLine.loopCount": (), + "QTimeLine.resume": (), + "QTimeLine.setCurrentTime": ('int',), + "QTimeLine.setCurveShape": ('PySide2.QtCore.QTimeLine.CurveShape',), + "QTimeLine.setDirection": ('PySide2.QtCore.QTimeLine.Direction',), + "QTimeLine.setDuration": ('int',), + "QTimeLine.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QTimeLine.setEndFrame": ('int',), + "QTimeLine.setFrameRange": ('int', 'int'), + "QTimeLine.setLoopCount": ('int',), + "QTimeLine.setPaused": ('bool',), + "QTimeLine.setStartFrame": ('int',), + "QTimeLine.setUpdateInterval": ('int',), + "QTimeLine.start": (), + "QTimeLine.startFrame": (), + "QTimeLine.state": (), + "QTimeLine.stop": (), + "QTimeLine.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimeLine.toggleDirection": (), + "QTimeLine.updateInterval": (), + "QTimeLine.valueForTime": ('int',), + + # class PySide2.QtCore.QTimeZone: + "QTimeZone.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'int', 'str', 'str', 'PySide2.QtCore.QLocale.Country', 'str'), ('PySide2.QtCore.QTimeZone',), ('int',)], + "QTimeZone.__copy__": (), + "QTimeZone.abbreviation": ('PySide2.QtCore.QDateTime',), + "QTimeZone.availableTimeZoneIds": [(), ('PySide2.QtCore.QLocale.Country',), ('int',)], + "QTimeZone.comment": (), + "QTimeZone.country": (), + "QTimeZone.daylightTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.displayName": [('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale'), ('PySide2.QtCore.QTimeZone.TimeType', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale')], + "QTimeZone.hasDaylightTime": (), + "QTimeZone.hasTransitions": (), + "QTimeZone.ianaIdToWindowsId": ('PySide2.QtCore.QByteArray',), + "QTimeZone.id": (), + "QTimeZone.isDaylightTime": ('PySide2.QtCore.QDateTime',), + "QTimeZone.isTimeZoneIdAvailable": ('PySide2.QtCore.QByteArray',), + "QTimeZone.isValid": (), + "QTimeZone.nextTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetData": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetFromUtc": ('PySide2.QtCore.QDateTime',), + "QTimeZone.previousTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.standardTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.swap": ('PySide2.QtCore.QTimeZone',), + "QTimeZone.systemTimeZone": (), + "QTimeZone.systemTimeZoneId": (), + "QTimeZone.transitions": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QTimeZone.utc": (), + "QTimeZone.windowsIdToDefaultIanaId": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + "QTimeZone.windowsIdToIanaIds": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + + # class PySide2.QtCore.QTimer: + "QTimer.__init__": ('PySide2.QtCore.QObject',), + "QTimer.interval": (), + "QTimer.isActive": (), + "QTimer.isSingleShot": (), + "QTimer.killTimer": ('int',), + "QTimer.remainingTime": (), + "QTimer.setInterval": ('int',), + "QTimer.setSingleShot": ('bool',), + "QTimer.setTimerType": ('PySide2.QtCore.Qt.TimerType',), + "QTimer.singleShot": [('int', 'Callable'), ('int', 'PySide2.QtCore.QObject', 'str'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject', 'str')], + "QTimer.start": [(), ('int',)], + "QTimer.stop": (), + "QTimer.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimer.timerId": (), + "QTimer.timerType": (), + + # class PySide2.QtCore.QTimerEvent: + "QTimerEvent.__init__": ('int',), + "QTimerEvent.timerId": (), + + # class PySide2.QtCore.QTranslator: + "QTranslator.__init__": ('PySide2.QtCore.QObject',), + "QTranslator.isEmpty": (), + "QTranslator.load": [('PySide2.QtCore.QLocale', 'str', 'str', 'str', 'str'), ('Union[str, int]', 'int', 'str'), ('str', 'str', 'str', 'str')], + "QTranslator.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QUrl: + "QUrl.__init__": [(), ('PySide2.QtCore.QUrl',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.__copy__": (), + "QUrl.__reduce__": (), + "QUrl.adjusted": ('FormattingOptions',), + "QUrl.authority": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.clear": (), + "QUrl.errorString": (), + "QUrl.fileName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fragment": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fromAce": ('PySide2.QtCore.QByteArray',), + "QUrl.fromEncoded": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromLocalFile": ('str',), + "QUrl.fromPercentEncoding": ('PySide2.QtCore.QByteArray',), + "QUrl.fromStringList": ('List[str]', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromUserInput": [('str',), ('str', 'str', 'UserInputResolutionOptions')], + "QUrl.hasFragment": (), + "QUrl.hasQuery": (), + "QUrl.host": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.idnWhitelist": (), + "QUrl.isEmpty": (), + "QUrl.isLocalFile": (), + "QUrl.isParentOf": ('PySide2.QtCore.QUrl',), + "QUrl.isRelative": (), + "QUrl.isValid": (), + "QUrl.matches": ('PySide2.QtCore.QUrl', 'FormattingOptions'), + "QUrl.password": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.path": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.port": ('int',), + "QUrl.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.resolved": ('PySide2.QtCore.QUrl',), + "QUrl.scheme": (), + "QUrl.setAuthority": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setFragment": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setHost": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setIdnWhitelist": ('List[str]',), + "QUrl.setPassword": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPath": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPort": ('int',), + "QUrl.setQuery": [('PySide2.QtCore.QUrlQuery',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.setScheme": ('str',), + "QUrl.setUrl": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserInfo": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserName": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.swap": ('PySide2.QtCore.QUrl',), + "QUrl.toAce": ('str',), + "QUrl.toDisplayString": ('FormattingOptions',), + "QUrl.toEncoded": ('FormattingOptions',), + "QUrl.toLocalFile": (), + "QUrl.toPercentEncoding": ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QUrl.toString": ('FormattingOptions',), + "QUrl.toStringList": ('list', 'FormattingOptions'), + "QUrl.topLevelDomain": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.url": ('FormattingOptions',), + "QUrl.userInfo": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.userName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QUrlQuery: + "QUrlQuery.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrlQuery',), ('str',)], + "QUrlQuery.__copy__": (), + "QUrlQuery.addQueryItem": ('str', 'str'), + "QUrlQuery.allQueryItemValues": ('str', 'PySide2.QtCore.QUrl.ComponentFormattingOption'), + "QUrlQuery.clear": (), + "QUrlQuery.defaultQueryPairDelimiter": (), + "QUrlQuery.defaultQueryValueDelimiter": (), + "QUrlQuery.hasQueryItem": ('str',), + "QUrlQuery.isEmpty": (), + "QUrlQuery.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrlQuery.queryItemValue": ('str', 'PySide2.QtCore.QUrl.ComponentFormattingOption'), + "QUrlQuery.queryItems": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrlQuery.queryPairDelimiter": (), + "QUrlQuery.queryValueDelimiter": (), + "QUrlQuery.removeAllQueryItems": ('str',), + "QUrlQuery.removeQueryItem": ('str',), + "QUrlQuery.setQuery": ('str',), + "QUrlQuery.setQueryDelimiters": ('Union[str, int]', 'Union[str, int]'), + "QUrlQuery.setQueryItems": ('list',), + "QUrlQuery.swap": ('PySide2.QtCore.QUrlQuery',), + "QUrlQuery.toString": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QUuid: + "QUuid.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QUuid',), ('int', 'int', 'int', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), ('str',)], + "QUuid.__copy__": (), + "QUuid.__reduce__": (), + "QUuid.createUuid": (), + "QUuid.createUuidV3": [('PySide2.QtCore.QUuid', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QUuid', 'str')], + "QUuid.createUuidV5": [('PySide2.QtCore.QUuid', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QUuid', 'str')], + "QUuid.fromRfc4122": ('PySide2.QtCore.QByteArray',), + "QUuid.isNull": (), + "QUuid.toByteArray": (), + "QUuid.toRfc4122": (), + "QUuid.toString": (), + "QUuid.variant": (), + "QUuid.version": (), + + # class PySide2.QtCore.QVariantAnimation: + "QVariantAnimation.__init__": ('PySide2.QtCore.QObject',), + "QVariantAnimation.currentValue": (), + "QVariantAnimation.duration": (), + "QVariantAnimation.easingCurve": (), + "QVariantAnimation.endValue": (), + "QVariantAnimation.event": ('PySide2.QtCore.QEvent',), + "QVariantAnimation.interpolated": ('Any', 'Any', 'float'), + "QVariantAnimation.keyValueAt": ('float',), + "QVariantAnimation.setDuration": ('int',), + "QVariantAnimation.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QVariantAnimation.setEndValue": ('Any',), + "QVariantAnimation.setKeyValueAt": ('float', 'Any'), + "QVariantAnimation.setStartValue": ('Any',), + "QVariantAnimation.startValue": (), + "QVariantAnimation.updateCurrentTime": ('int',), + "QVariantAnimation.updateCurrentValue": ('Any',), + "QVariantAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QVersionNumber: + "QVersionNumber.__init__": [(), ('int',), ('int', 'int'), ('int', 'int', 'int'), ('list',)], + "QVersionNumber.__copy__": (), + "QVersionNumber.commonPrefix": ('PySide2.QtCore.QVersionNumber', 'PySide2.QtCore.QVersionNumber'), + "QVersionNumber.compare": ('PySide2.QtCore.QVersionNumber', 'PySide2.QtCore.QVersionNumber'), + "QVersionNumber.fromString": ('str', 'int'), + "QVersionNumber.isNormalized": (), + "QVersionNumber.isNull": (), + "QVersionNumber.isPrefixOf": ('PySide2.QtCore.QVersionNumber',), + "QVersionNumber.majorVersion": (), + "QVersionNumber.microVersion": (), + "QVersionNumber.minorVersion": (), + "QVersionNumber.normalized": (), + "QVersionNumber.segmentAt": ('int',), + "QVersionNumber.segmentCount": (), + "QVersionNumber.segments": (), + "QVersionNumber.toString": (), + + # class PySide2.QtCore.QWaitCondition: + "QWaitCondition.__init__": (), + "QWaitCondition.notify_all": (), + "QWaitCondition.notify_one": (), + "QWaitCondition.wait": [('PySide2.QtCore.QMutex', 'int'), ('PySide2.QtCore.QReadWriteLock', 'int')], + "QWaitCondition.wakeAll": (), + "QWaitCondition.wakeOne": (), + + # class PySide2.QtCore.QWriteLocker: + "QWriteLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QWriteLocker.__enter__": (), + "QWriteLocker.__exit__": ('object', 'object', 'object'), + "QWriteLocker.readWriteLock": (), + "QWriteLocker.relock": (), + "QWriteLocker.unlock": (), + + # class PySide2.QtCore.QXmlStreamAttribute: + "QXmlStreamAttribute.__init__": [(), ('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttribute.__copy__": (), + "QXmlStreamAttribute.isDefault": (), + "QXmlStreamAttribute.name": (), + "QXmlStreamAttribute.namespaceUri": (), + "QXmlStreamAttribute.prefix": (), + "QXmlStreamAttribute.qualifiedName": (), + "QXmlStreamAttribute.value": (), + + # class PySide2.QtCore.QXmlStreamAttributes: + "QXmlStreamAttributes.__init__": [(), ('PySide2.QtCore.QXmlStreamAttributes',)], + "QXmlStreamAttributes.__copy__": (), + "QXmlStreamAttributes.append": [('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttributes.at": ('int',), + "QXmlStreamAttributes.capacity": (), + "QXmlStreamAttributes.clear": (), + "QXmlStreamAttributes.constData": (), + "QXmlStreamAttributes.constFirst": (), + "QXmlStreamAttributes.constLast": (), + "QXmlStreamAttributes.contains": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.count": [(), ('PySide2.QtCore.QXmlStreamAttribute',)], + "QXmlStreamAttributes.data": (), + "QXmlStreamAttributes.empty": (), + "QXmlStreamAttributes.endsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.fill": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.first": (), + "QXmlStreamAttributes.front": (), + "QXmlStreamAttributes.hasAttribute": [('str',), ('str', 'str')], + "QXmlStreamAttributes.indexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.insert": [('int', 'PySide2.QtCore.QXmlStreamAttribute'), ('int', 'int', 'PySide2.QtCore.QXmlStreamAttribute')], + "QXmlStreamAttributes.isEmpty": (), + "QXmlStreamAttributes.isSharedWith": ('list',), + "QXmlStreamAttributes.last": (), + "QXmlStreamAttributes.lastIndexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.length": (), + "QXmlStreamAttributes.mid": ('int', 'int'), + "QXmlStreamAttributes.move": ('int', 'int'), + "QXmlStreamAttributes.prepend": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.remove": [('int',), ('int', 'int')], + "QXmlStreamAttributes.removeAll": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.removeAt": ('int',), + "QXmlStreamAttributes.removeFirst": (), + "QXmlStreamAttributes.removeLast": (), + "QXmlStreamAttributes.removeOne": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.replace": ('int', 'PySide2.QtCore.QXmlStreamAttribute'), + "QXmlStreamAttributes.reserve": ('int',), + "QXmlStreamAttributes.resize": ('int',), + "QXmlStreamAttributes.setSharable": ('bool',), + "QXmlStreamAttributes.size": (), + "QXmlStreamAttributes.squeeze": (), + "QXmlStreamAttributes.startsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.swap": ('list',), + "QXmlStreamAttributes.takeAt": ('int',), + "QXmlStreamAttributes.takeFirst": (), + "QXmlStreamAttributes.takeLast": (), + "QXmlStreamAttributes.value": [('str',), ('str', 'str')], + + # class PySide2.QtCore.QXmlStreamEntityDeclaration: + "QXmlStreamEntityDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamEntityDeclaration',)], + "QXmlStreamEntityDeclaration.__copy__": (), + "QXmlStreamEntityDeclaration.name": (), + "QXmlStreamEntityDeclaration.notationName": (), + "QXmlStreamEntityDeclaration.publicId": (), + "QXmlStreamEntityDeclaration.systemId": (), + "QXmlStreamEntityDeclaration.value": (), + + # class PySide2.QtCore.QXmlStreamEntityResolver: + "QXmlStreamEntityResolver.__init__": (), + "QXmlStreamEntityResolver.resolveEntity": ('str', 'str'), + "QXmlStreamEntityResolver.resolveUndeclaredEntity": ('str',), + + # class PySide2.QtCore.QXmlStreamNamespaceDeclaration: + "QXmlStreamNamespaceDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), ('str', 'str')], + "QXmlStreamNamespaceDeclaration.__copy__": (), + "QXmlStreamNamespaceDeclaration.namespaceUri": (), + "QXmlStreamNamespaceDeclaration.prefix": (), + + # class PySide2.QtCore.QXmlStreamNotationDeclaration: + "QXmlStreamNotationDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNotationDeclaration',)], + "QXmlStreamNotationDeclaration.__copy__": (), + "QXmlStreamNotationDeclaration.name": (), + "QXmlStreamNotationDeclaration.publicId": (), + "QXmlStreamNotationDeclaration.systemId": (), + + # class PySide2.QtCore.QXmlStreamReader: + "QXmlStreamReader.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str',)], + "QXmlStreamReader.addData": [('PySide2.QtCore.QByteArray',), ('str',)], + "QXmlStreamReader.addExtraNamespaceDeclaration": ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), + "QXmlStreamReader.addExtraNamespaceDeclarations": ('list',), + "QXmlStreamReader.atEnd": (), + "QXmlStreamReader.attributes": (), + "QXmlStreamReader.characterOffset": (), + "QXmlStreamReader.clear": (), + "QXmlStreamReader.columnNumber": (), + "QXmlStreamReader.device": (), + "QXmlStreamReader.documentEncoding": (), + "QXmlStreamReader.documentVersion": (), + "QXmlStreamReader.dtdName": (), + "QXmlStreamReader.dtdPublicId": (), + "QXmlStreamReader.dtdSystemId": (), + "QXmlStreamReader.entityDeclarations": (), + "QXmlStreamReader.entityResolver": (), + "QXmlStreamReader.error": (), + "QXmlStreamReader.errorString": (), + "QXmlStreamReader.hasError": (), + "QXmlStreamReader.isCDATA": (), + "QXmlStreamReader.isCharacters": (), + "QXmlStreamReader.isComment": (), + "QXmlStreamReader.isDTD": (), + "QXmlStreamReader.isEndDocument": (), + "QXmlStreamReader.isEndElement": (), + "QXmlStreamReader.isEntityReference": (), + "QXmlStreamReader.isProcessingInstruction": (), + "QXmlStreamReader.isStandaloneDocument": (), + "QXmlStreamReader.isStartDocument": (), + "QXmlStreamReader.isStartElement": (), + "QXmlStreamReader.isWhitespace": (), + "QXmlStreamReader.lineNumber": (), + "QXmlStreamReader.name": (), + "QXmlStreamReader.namespaceDeclarations": (), + "QXmlStreamReader.namespaceProcessing": (), + "QXmlStreamReader.namespaceUri": (), + "QXmlStreamReader.notationDeclarations": (), + "QXmlStreamReader.prefix": (), + "QXmlStreamReader.processingInstructionData": (), + "QXmlStreamReader.processingInstructionTarget": (), + "QXmlStreamReader.qualifiedName": (), + "QXmlStreamReader.raiseError": ('str',), + "QXmlStreamReader.readElementText": ('PySide2.QtCore.QXmlStreamReader.ReadElementTextBehaviour',), + "QXmlStreamReader.readNext": (), + "QXmlStreamReader.readNextStartElement": (), + "QXmlStreamReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamReader.setEntityResolver": ('PySide2.QtCore.QXmlStreamEntityResolver',), + "QXmlStreamReader.setNamespaceProcessing": ('bool',), + "QXmlStreamReader.skipCurrentElement": (), + "QXmlStreamReader.text": (), + "QXmlStreamReader.tokenString": (), + "QXmlStreamReader.tokenType": (), + + # class PySide2.QtCore.QXmlStreamWriter: + "QXmlStreamWriter.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QXmlStreamWriter.autoFormatting": (), + "QXmlStreamWriter.autoFormattingIndent": (), + "QXmlStreamWriter.codec": (), + "QXmlStreamWriter.device": (), + "QXmlStreamWriter.hasError": (), + "QXmlStreamWriter.setAutoFormatting": ('bool',), + "QXmlStreamWriter.setAutoFormattingIndent": ('int',), + "QXmlStreamWriter.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QXmlStreamWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamWriter.writeAttribute": [('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamWriter.writeAttributes": ('PySide2.QtCore.QXmlStreamAttributes',), + "QXmlStreamWriter.writeCDATA": ('str',), + "QXmlStreamWriter.writeCharacters": ('str',), + "QXmlStreamWriter.writeComment": ('str',), + "QXmlStreamWriter.writeCurrentToken": ('PySide2.QtCore.QXmlStreamReader',), + "QXmlStreamWriter.writeDTD": ('str',), + "QXmlStreamWriter.writeDefaultNamespace": ('str',), + "QXmlStreamWriter.writeEmptyElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeEndDocument": (), + "QXmlStreamWriter.writeEndElement": (), + "QXmlStreamWriter.writeEntityReference": ('str',), + "QXmlStreamWriter.writeNamespace": ('str', 'str'), + "QXmlStreamWriter.writeProcessingInstruction": ('str', 'str'), + "QXmlStreamWriter.writeStartDocument": [(), ('str',), ('str', 'bool')], + "QXmlStreamWriter.writeStartElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeTextElement": [('str', 'str'), ('str', 'str', 'str')], + + # class PySide2.QtCore.QtMsgType: + + # class PySide2.QtCore.Signal: + + # class PySide2.QtCore.Slot: + }) + +# Module PySide2.QtGui +if "PySide2.QtGui" in sys.modules: + dict.update({ + + # class PySide2.QtGui.QAbstractOpenGLFunctions: + "QAbstractOpenGLFunctions.__init__": (), + "QAbstractOpenGLFunctions.initializeOpenGLFunctions": (), + "QAbstractOpenGLFunctions.isInitialized": (), + "QAbstractOpenGLFunctions.owningContext": (), + "QAbstractOpenGLFunctions.setOwningContext": ('PySide2.QtGui.QOpenGLContext',), + + # class PySide2.QtGui.QAbstractTextDocumentLayout: + "QAbstractTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QAbstractTextDocumentLayout.anchorAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QAbstractTextDocumentLayout.document": (), + "QAbstractTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QAbstractTextDocumentLayout.documentSize": (), + "QAbstractTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QAbstractTextDocumentLayout.drawInlineObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.format": ('int',), + "QAbstractTextDocumentLayout.formatAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.formatIndex": ('int',), + "QAbstractTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QAbstractTextDocumentLayout.handlerForObject": ('int',), + "QAbstractTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QAbstractTextDocumentLayout.imageAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.pageCount": (), + "QAbstractTextDocumentLayout.paintDevice": (), + "QAbstractTextDocumentLayout.positionInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.registerHandler": ('int', 'PySide2.QtCore.QObject'), + "QAbstractTextDocumentLayout.resizeInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.setPaintDevice": ('PySide2.QtGui.QPaintDevice',), + "QAbstractTextDocumentLayout.unregisterHandler": ('int', 'PySide2.QtCore.QObject'), + + # class PySide2.QtGui.QAccessible: + "QAccessible.__copy__": (), + "QAccessible.accessibleInterface": ('int',), + "QAccessible.cleanup": (), + "QAccessible.deleteAccessibleInterface": ('int',), + "QAccessible.isActive": (), + "QAccessible.qAccessibleTextBoundaryHelper": ('PySide2.QtGui.QTextCursor', 'PySide2.QtGui.QAccessible.TextBoundaryType'), + "QAccessible.queryAccessibleInterface": ('PySide2.QtCore.QObject',), + "QAccessible.registerAccessibleInterface": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessible.setActive": ('bool',), + "QAccessible.setRootObject": ('PySide2.QtCore.QObject',), + "QAccessible.uniqueId": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessible.updateAccessibility": ('PySide2.QtGui.QAccessibleEvent',), + + # class PySide2.QtGui.QAccessibleEvent: + "QAccessibleEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessible.Event'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessible.Event')], + "QAccessibleEvent.accessibleInterface": (), + "QAccessibleEvent.child": (), + "QAccessibleEvent.object": (), + "QAccessibleEvent.setChild": ('int',), + "QAccessibleEvent.type": (), + "QAccessibleEvent.uniqueId": (), + + # class PySide2.QtGui.QAccessibleInterface: + "QAccessibleInterface.__init__": (), + "QAccessibleInterface.backgroundColor": (), + "QAccessibleInterface.child": ('int',), + "QAccessibleInterface.childAt": ('int', 'int'), + "QAccessibleInterface.childCount": (), + "QAccessibleInterface.focusChild": (), + "QAccessibleInterface.foregroundColor": (), + "QAccessibleInterface.indexOfChild": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessibleInterface.interface_cast": ('PySide2.QtGui.QAccessible.InterfaceType',), + "QAccessibleInterface.isValid": (), + "QAccessibleInterface.object": (), + "QAccessibleInterface.parent": (), + "QAccessibleInterface.rect": (), + "QAccessibleInterface.role": (), + "QAccessibleInterface.setText": ('PySide2.QtGui.QAccessible.Text', 'str'), + "QAccessibleInterface.state": (), + "QAccessibleInterface.text": ('PySide2.QtGui.QAccessible.Text',), + "QAccessibleInterface.virtual_hook": ('int', 'int'), + "QAccessibleInterface.window": (), + + # class PySide2.QtGui.QActionEvent: + + # class PySide2.QtGui.QBackingStore: + "QBackingStore.__init__": ('PySide2.QtGui.QWindow',), + "QBackingStore.beginPaint": ('PySide2.QtGui.QRegion',), + "QBackingStore.endPaint": (), + "QBackingStore.flush": ('PySide2.QtGui.QRegion', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint'), + "QBackingStore.hasStaticContents": (), + "QBackingStore.paintDevice": (), + "QBackingStore.resize": ('PySide2.QtCore.QSize',), + "QBackingStore.scroll": ('PySide2.QtGui.QRegion', 'int', 'int'), + "QBackingStore.setStaticContents": ('PySide2.QtGui.QRegion',), + "QBackingStore.size": (), + "QBackingStore.staticContents": (), + "QBackingStore.window": (), + + # class PySide2.QtGui.QBitmap: + "QBitmap.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str')], + "QBitmap.__copy__": (), + "QBitmap.clear": (), + "QBitmap.fromData": ('PySide2.QtCore.QSize', 'Union[str, int]', 'PySide2.QtGui.QImage.Format'), + "QBitmap.fromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QBitmap.swap": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',)], + "QBitmap.transformed": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform',)], + + # class PySide2.QtGui.QBrush: + "QBrush.__init__": [(), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QBrush',), ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QGradient',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',)], + "QBrush.__copy__": (), + "QBrush.color": (), + "QBrush.gradient": (), + "QBrush.isOpaque": (), + "QBrush.matrix": (), + "QBrush.setColor": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',)], + "QBrush.setMatrix": ('PySide2.QtGui.QMatrix',), + "QBrush.setStyle": ('PySide2.QtCore.Qt.BrushStyle',), + "QBrush.setTexture": ('PySide2.QtGui.QPixmap',), + "QBrush.setTextureImage": ('PySide2.QtGui.QImage',), + "QBrush.setTransform": ('PySide2.QtGui.QTransform',), + "QBrush.style": (), + "QBrush.swap": ('PySide2.QtGui.QBrush',), + "QBrush.texture": (), + "QBrush.textureImage": (), + "QBrush.transform": (), + + # class PySide2.QtGui.QClipboard: + "QClipboard.clear": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.image": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.mimeData": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.ownsClipboard": (), + "QClipboard.ownsFindBuffer": (), + "QClipboard.ownsSelection": (), + "QClipboard.pixmap": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.setImage": ('PySide2.QtGui.QImage', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setText": ('str', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.supportsFindBuffer": (), + "QClipboard.supportsSelection": (), + "QClipboard.text": [('PySide2.QtGui.QClipboard.Mode',), ('str', 'PySide2.QtGui.QClipboard.Mode')], + + # class PySide2.QtGui.QCloseEvent: + "QCloseEvent.__init__": (), + + # class PySide2.QtGui.QColor: + "QColor.__init__": [(), ('Any',), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',), ('int', 'int', 'int', 'int'), ('str',)], + "QColor.__copy__": (), + "QColor.__reduce__": (), + "QColor.__setstate__": ('object',), + "QColor.alpha": (), + "QColor.alphaF": (), + "QColor.black": (), + "QColor.blackF": (), + "QColor.blue": (), + "QColor.blueF": (), + "QColor.colorNames": (), + "QColor.convertTo": ('PySide2.QtGui.QColor.Spec',), + "QColor.cyan": (), + "QColor.cyanF": (), + "QColor.dark": ('int',), + "QColor.darker": ('int',), + "QColor.fromCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.fromCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.fromHsl": ('int', 'int', 'int', 'int'), + "QColor.fromHslF": ('float', 'float', 'float', 'float'), + "QColor.fromHsv": ('int', 'int', 'int', 'int'), + "QColor.fromHsvF": ('float', 'float', 'float', 'float'), + "QColor.fromRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.fromRgbF": ('float', 'float', 'float', 'float'), + "QColor.fromRgba": ('int',), + "QColor.fromRgba64": ('int', 'int', 'int', 'int'), + "QColor.getCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.getCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.getHsl": ('int', 'int', 'int', 'int'), + "QColor.getHslF": ('float', 'float', 'float', 'float'), + "QColor.getHsv": ('int', 'int', 'int', 'int'), + "QColor.getHsvF": ('float', 'float', 'float', 'float'), + "QColor.getRgb": ('int', 'int', 'int', 'int'), + "QColor.getRgbF": ('float', 'float', 'float', 'float'), + "QColor.green": (), + "QColor.greenF": (), + "QColor.hslHue": (), + "QColor.hslHueF": (), + "QColor.hslSaturation": (), + "QColor.hslSaturationF": (), + "QColor.hsvHue": (), + "QColor.hsvHueF": (), + "QColor.hsvSaturation": (), + "QColor.hsvSaturationF": (), + "QColor.hue": (), + "QColor.hueF": (), + "QColor.isValid": (), + "QColor.isValidColor": ('str',), + "QColor.light": ('int',), + "QColor.lighter": ('int',), + "QColor.lightness": (), + "QColor.lightnessF": (), + "QColor.magenta": (), + "QColor.magentaF": (), + "QColor.name": [(), ('PySide2.QtGui.QColor.NameFormat',)], + "QColor.red": (), + "QColor.redF": (), + "QColor.rgb": (), + "QColor.rgba": (), + "QColor.saturation": (), + "QColor.saturationF": (), + "QColor.setAlpha": ('int',), + "QColor.setAlphaF": ('float',), + "QColor.setBlue": ('int',), + "QColor.setBlueF": ('float',), + "QColor.setCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.setCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.setGreen": ('int',), + "QColor.setGreenF": ('float',), + "QColor.setHsl": ('int', 'int', 'int', 'int'), + "QColor.setHslF": ('float', 'float', 'float', 'float'), + "QColor.setHsv": ('int', 'int', 'int', 'int'), + "QColor.setHsvF": ('float', 'float', 'float', 'float'), + "QColor.setNamedColor": ('str',), + "QColor.setRed": ('int',), + "QColor.setRedF": ('float',), + "QColor.setRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.setRgbF": ('float', 'float', 'float', 'float'), + "QColor.setRgba": ('int',), + "QColor.spec": (), + "QColor.toCmyk": (), + "QColor.toHsl": (), + "QColor.toHsv": (), + "QColor.toRgb": (), + "QColor.toTuple": (), + "QColor.value": (), + "QColor.valueF": (), + "QColor.yellow": (), + "QColor.yellowF": (), + + # class PySide2.QtGui.QConicalGradient: + "QConicalGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QConicalGradient',), ('float', 'float', 'float')], + "QConicalGradient.__copy__": (), + "QConicalGradient.angle": (), + "QConicalGradient.center": (), + "QConicalGradient.setAngle": ('float',), + "QConicalGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + + # class PySide2.QtGui.QContextMenuEvent: + "QContextMenuEvent.__init__": [('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'KeyboardModifiers')], + "QContextMenuEvent.globalPos": (), + "QContextMenuEvent.globalX": (), + "QContextMenuEvent.global""Y": (), + "QContextMenuEvent.pos": (), + "QContextMenuEvent.reason": (), + "QContextMenuEvent.x": (), + "QContextMenuEvent.y": (), + + # class PySide2.QtGui.QCursor: + "QCursor.__init__": [(), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtGui.QBitmap', 'PySide2.QtGui.QBitmap', 'int', 'int'), ('PySide2.QtGui.QCursor',), ('PySide2.QtGui.QPixmap', 'int', 'int')], + "QCursor.__copy__": (), + "QCursor.bitmap": (), + "QCursor.hotSpot": (), + "QCursor.mask": (), + "QCursor.pixmap": (), + "QCursor.pos": [(), ('PySide2.QtGui.QScreen',)], + "QCursor.setPos": [('PySide2.QtCore.QPoint',), ('PySide2.QtGui.QScreen', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QScreen', 'int', 'int'), ('int', 'int')], + "QCursor.setShape": ('PySide2.QtCore.Qt.CursorShape',), + "QCursor.shape": (), + "QCursor.swap": ('PySide2.QtGui.QCursor',), + + # class PySide2.QtGui.QDesktopServices: + "QDesktopServices.__init__": (), + "QDesktopServices.openUrl": ('PySide2.QtCore.QUrl',), + "QDesktopServices.setUrlHandler": ('str', 'PySide2.QtCore.QObject', 'str'), + "QDesktopServices.unsetUrlHandler": ('str',), + + # class PySide2.QtGui.QDoubleValidator: + "QDoubleValidator.__init__": [('PySide2.QtCore.QObject',), ('float', 'float', 'int', 'PySide2.QtCore.QObject')], + "QDoubleValidator.bottom": (), + "QDoubleValidator.decimals": (), + "QDoubleValidator.notation": (), + "QDoubleValidator.setBottom": ('float',), + "QDoubleValidator.setDecimals": ('int',), + "QDoubleValidator.setNotation": ('PySide2.QtGui.QDoubleValidator.Notation',), + "QDoubleValidator.setRange": ('float', 'float', 'int'), + "QDoubleValidator.setTop": ('float',), + "QDoubleValidator.top": (), + "QDoubleValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QDrag: + "QDrag.__init__": ('PySide2.QtCore.QObject',), + "QDrag.cancel": (), + "QDrag.defaultAction": (), + "QDrag.dragCursor": ('PySide2.QtCore.Qt.DropAction',), + "QDrag.exec_": [('DropActions',), ('DropActions', 'PySide2.QtCore.Qt.DropAction')], + "QDrag.hotSpot": (), + "QDrag.mimeData": (), + "QDrag.pixmap": (), + "QDrag.setDragCursor": ('PySide2.QtGui.QPixmap', 'PySide2.QtCore.Qt.DropAction'), + "QDrag.setHotSpot": ('PySide2.QtCore.QPoint',), + "QDrag.setMimeData": ('PySide2.QtCore.QMimeData',), + "QDrag.setPixmap": ('PySide2.QtGui.QPixmap',), + "QDrag.source": (), + "QDrag.start": ('DropActions',), + "QDrag.supportedActions": (), + "QDrag.target": (), + + # class PySide2.QtGui.QDragEnterEvent: + "QDragEnterEvent.__init__": ('PySide2.QtCore.QPoint', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers'), + + # class PySide2.QtGui.QDragLeaveEvent: + "QDragLeaveEvent.__init__": (), + + # class PySide2.QtGui.QDragMoveEvent: + "QDragMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDragMoveEvent.accept": [(), ('PySide2.QtCore.QRect',)], + "QDragMoveEvent.answerRect": (), + "QDragMoveEvent.ignore": [(), ('PySide2.QtCore.QRect',)], + + # class PySide2.QtGui.QDropEvent: + "QDropEvent.__init__": ('PySide2.QtCore.QPointF', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDropEvent.acceptProposedAction": (), + "QDropEvent.dropAction": (), + "QDropEvent.keyboardModifiers": (), + "QDropEvent.mimeData": (), + "QDropEvent.mouseButtons": (), + "QDropEvent.pos": (), + "QDropEvent.posF": (), + "QDropEvent.possibleActions": (), + "QDropEvent.proposedAction": (), + "QDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QDropEvent.source": (), + + # class PySide2.QtGui.QEnterEvent: + "QEnterEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEnterEvent.globalPos": (), + "QEnterEvent.globalX": (), + "QEnterEvent.global""Y": (), + "QEnterEvent.localPos": (), + "QEnterEvent.pos": (), + "QEnterEvent.screenPos": (), + "QEnterEvent.windowPos": (), + "QEnterEvent.x": (), + "QEnterEvent.y": (), + + # class PySide2.QtGui.QExposeEvent: + "QExposeEvent.__init__": ('PySide2.QtGui.QRegion',), + "QExposeEvent.region": (), + + # class PySide2.QtGui.QFileOpenEvent: + "QFileOpenEvent.__init__": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileOpenEvent.file": (), + "QFileOpenEvent.openFile": ('PySide2.QtCore.QFile', 'OpenMode'), + "QFileOpenEvent.url": (), + + # class PySide2.QtGui.QFocusEvent: + "QFocusEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.FocusReason'), + "QFocusEvent.gotFocus": (), + "QFocusEvent.lostFocus": (), + "QFocusEvent.reason": (), + + # class PySide2.QtGui.QFont: + "QFont.__init__": [(), ('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('str', 'int', 'int', 'bool')], + "QFont.__copy__": (), + "QFont.bold": (), + "QFont.cacheStatistics": (), + "QFont.capitalization": (), + "QFont.cleanup": (), + "QFont.defaultFamily": (), + "QFont.exactMatch": (), + "QFont.family": (), + "QFont.fixedPitch": (), + "QFont.fromString": ('str',), + "QFont.hintingPreference": (), + "QFont.initialize": (), + "QFont.insertSubstitution": ('str', 'str'), + "QFont.insertSubstitutions": ('str', 'List[str]'), + "QFont.isCopyOf": ('PySide2.QtGui.QFont',), + "QFont.italic": (), + "QFont.kerning": (), + "QFont.key": (), + "QFont.lastResortFamily": (), + "QFont.lastResortFont": (), + "QFont.letterSpacing": (), + "QFont.letterSpacingType": (), + "QFont.overline": (), + "QFont.pixelSize": (), + "QFont.pointSize": (), + "QFont.pointSizeF": (), + "QFont.rawMode": (), + "QFont.rawName": (), + "QFont.removeSubstitutions": ('str',), + "QFont.resolve": [(), ('PySide2.QtGui.QFont',), ('int',)], + "QFont.setBold": ('bool',), + "QFont.setCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QFont.setFamily": ('str',), + "QFont.setFixedPitch": ('bool',), + "QFont.setHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QFont.setItalic": ('bool',), + "QFont.setKerning": ('bool',), + "QFont.setLetterSpacing": ('PySide2.QtGui.QFont.SpacingType', 'float'), + "QFont.setOverline": ('bool',), + "QFont.setPixelSize": ('int',), + "QFont.setPointSize": ('int',), + "QFont.setPointSizeF": ('float',), + "QFont.setRawMode": ('bool',), + "QFont.setRawName": ('str',), + "QFont.setStretch": ('int',), + "QFont.setStrikeOut": ('bool',), + "QFont.setStyle": ('PySide2.QtGui.QFont.Style',), + "QFont.setStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QFont.setStyleName": ('str',), + "QFont.setStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QFont.setUnderline": ('bool',), + "QFont.setWeight": ('int',), + "QFont.setWordSpacing": ('float',), + "QFont.stretch": (), + "QFont.strikeOut": (), + "QFont.style": (), + "QFont.styleHint": (), + "QFont.styleName": (), + "QFont.styleStrategy": (), + "QFont.substitute": ('str',), + "QFont.substitutes": ('str',), + "QFont.substitutions": (), + "QFont.swap": ('PySide2.QtGui.QFont',), + "QFont.toString": (), + "QFont.underline": (), + "QFont.weight": (), + "QFont.wordSpacing": (), + + # class PySide2.QtGui.QFontDatabase: + "QFontDatabase.__init__": [(), ('PySide2.QtGui.QFontDatabase',)], + "QFontDatabase.__copy__": (), + "QFontDatabase.addApplicationFont": ('str',), + "QFontDatabase.addApplicationFontFromData": ('PySide2.QtCore.QByteArray',), + "QFontDatabase.applicationFontFamilies": ('int',), + "QFontDatabase.bold": ('str', 'str'), + "QFontDatabase.families": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.font": ('str', 'str', 'int'), + "QFontDatabase.hasFamily": ('str',), + "QFontDatabase.isBitmapScalable": ('str', 'str'), + "QFontDatabase.isFixedPitch": ('str', 'str'), + "QFontDatabase.isPrivateFamily": ('str',), + "QFontDatabase.isScalable": ('str', 'str'), + "QFontDatabase.isSmoothlyScalable": ('str', 'str'), + "QFontDatabase.italic": ('str', 'str'), + "QFontDatabase.pointSizes": ('str', 'str'), + "QFontDatabase.removeAllApplicationFonts": (), + "QFontDatabase.removeApplicationFont": ('int',), + "QFontDatabase.smoothSizes": ('str', 'str'), + "QFontDatabase.standardSizes": (), + "QFontDatabase.styleString": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontDatabase.styles": ('str',), + "QFontDatabase.supportsThreadedFontRendering": (), + "QFontDatabase.systemFont": ('PySide2.QtGui.QFontDatabase.SystemFont',), + "QFontDatabase.weight": ('str', 'str'), + "QFontDatabase.writingSystemName": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystemSample": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystems": [(), ('str',)], + + # class PySide2.QtGui.QFontInfo: + "QFontInfo.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontInfo.__copy__": (), + "QFontInfo.bold": (), + "QFontInfo.exactMatch": (), + "QFontInfo.family": (), + "QFontInfo.fixedPitch": (), + "QFontInfo.italic": (), + "QFontInfo.overline": (), + "QFontInfo.pixelSize": (), + "QFontInfo.pointSize": (), + "QFontInfo.pointSizeF": (), + "QFontInfo.rawMode": (), + "QFontInfo.strikeOut": (), + "QFontInfo.style": (), + "QFontInfo.styleHint": (), + "QFontInfo.styleName": (), + "QFontInfo.swap": ('PySide2.QtGui.QFontInfo',), + "QFontInfo.underline": (), + "QFontInfo.weight": (), + + # class PySide2.QtGui.QFontMetrics: + "QFontMetrics.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',)], + "QFontMetrics.__copy__": (), + "QFontMetrics.ascent": (), + "QFontMetrics.averageCharWidth": (), + "QFontMetrics.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetrics.boundingRectChar": ('Union[str, int]',), + "QFontMetrics.capHeight": (), + "QFontMetrics.charWidth": ('str', 'int'), + "QFontMetrics.descent": (), + "QFontMetrics.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'int', 'int'), + "QFontMetrics.height": (), + "QFontMetrics.inFont": ('Union[str, int]',), + "QFontMetrics.inFontUcs4": ('int',), + "QFontMetrics.leading": (), + "QFontMetrics.leftBearing": ('Union[str, int]',), + "QFontMetrics.lineSpacing": (), + "QFontMetrics.lineWidth": (), + "QFontMetrics.maxWidth": (), + "QFontMetrics.minLeftBearing": (), + "QFontMetrics.minRightBearing": (), + "QFontMetrics.overlinePos": (), + "QFontMetrics.rightBearing": ('Union[str, int]',), + "QFontMetrics.size": ('int', 'str', 'int', 'int'), + "QFontMetrics.strikeOutPos": (), + "QFontMetrics.swap": ('PySide2.QtGui.QFontMetrics',), + "QFontMetrics.tightBoundingRect": ('str',), + "QFontMetrics.underlinePos": (), + "QFontMetrics.width": [('str', 'int'), ('str', 'int', 'int')], + "QFontMetrics.widthChar": ('Union[str, int]',), + "QFontMetrics.xHeight": (), + + # class PySide2.QtGui.QFontMetricsF: + "QFontMetricsF.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',), ('PySide2.QtGui.QFontMetricsF',)], + "QFontMetricsF.__copy__": (), + "QFontMetricsF.ascent": (), + "QFontMetricsF.averageCharWidth": (), + "QFontMetricsF.boundingRect": [('PySide2.QtCore.QRectF', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetricsF.boundingRectChar": ('Union[str, int]',), + "QFontMetricsF.capHeight": (), + "QFontMetricsF.descent": (), + "QFontMetricsF.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'float', 'int'), + "QFontMetricsF.height": (), + "QFontMetricsF.inFont": ('Union[str, int]',), + "QFontMetricsF.inFontUcs4": ('int',), + "QFontMetricsF.leading": (), + "QFontMetricsF.leftBearing": ('Union[str, int]',), + "QFontMetricsF.lineSpacing": (), + "QFontMetricsF.lineWidth": (), + "QFontMetricsF.maxWidth": (), + "QFontMetricsF.minLeftBearing": (), + "QFontMetricsF.minRightBearing": (), + "QFontMetricsF.overlinePos": (), + "QFontMetricsF.rightBearing": ('Union[str, int]',), + "QFontMetricsF.size": ('int', 'str', 'int', 'int'), + "QFontMetricsF.strikeOutPos": (), + "QFontMetricsF.swap": ('PySide2.QtGui.QFontMetricsF',), + "QFontMetricsF.tightBoundingRect": ('str',), + "QFontMetricsF.underlinePos": (), + "QFontMetricsF.width": ('str',), + "QFontMetricsF.widthChar": ('Union[str, int]',), + "QFontMetricsF.xHeight": (), + + # class PySide2.QtGui.QGradient: + "QGradient.__init__": [(), ('PySide2.QtGui.QGradient',)], + "QGradient.__copy__": (), + "QGradient.coordinateMode": (), + "QGradient.interpolationMode": (), + "QGradient.setColorAt": ('float', 'PySide2.QtGui.QColor'), + "QGradient.setCoordinateMode": ('PySide2.QtGui.QGradient.CoordinateMode',), + "QGradient.setInterpolationMode": ('PySide2.QtGui.QGradient.InterpolationMode',), + "QGradient.setSpread": ('PySide2.QtGui.QGradient.Spread',), + "QGradient.setStops": ('list',), + "QGradient.spread": (), + "QGradient.stops": (), + "QGradient.type": (), + + # class PySide2.QtGui.QGuiApplication: + "QGuiApplication.__init__": ('List[str]',), + "QGuiApplication.allWindows": (), + "QGuiApplication.applicationDisplayName": (), + "QGuiApplication.applicationState": (), + "QGuiApplication.changeOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.clipboard": (), + "QGuiApplication.desktopFileName": (), + "QGuiApplication.desktopSettingsAware": (), + "QGuiApplication.devicePixelRatio": (), + "QGuiApplication.event": ('PySide2.QtCore.QEvent',), + "QGuiApplication.exec_": (), + "QGuiApplication.focusObject": (), + "QGuiApplication.focusWindow": (), + "QGuiApplication.font": (), + "QGuiApplication.isFallbackSessionManagementEnabled": (), + "QGuiApplication.isLeftToRight": (), + "QGuiApplication.isRightToLeft": (), + "QGuiApplication.isSavingSession": (), + "QGuiApplication.isSessionRestored": (), + "QGuiApplication.keyboardModifiers": (), + "QGuiApplication.layoutDirection": (), + "QGuiApplication.modalWindow": (), + "QGuiApplication.mouseButtons": (), + "QGuiApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGuiApplication.overrideCursor": (), + "QGuiApplication.palette": (), + "QGuiApplication.platformName": (), + "QGuiApplication.primaryScreen": (), + "QGuiApplication.queryKeyboardModifiers": (), + "QGuiApplication.quitOnLastWindowClosed": (), + "QGuiApplication.restoreOverrideCursor": (), + "QGuiApplication.screens": (), + "QGuiApplication.sessionId": (), + "QGuiApplication.sessionKey": (), + "QGuiApplication.setApplicationDisplayName": ('str',), + "QGuiApplication.setDesktopFileName": ('str',), + "QGuiApplication.setDesktopSettingsAware": ('bool',), + "QGuiApplication.setFallbackSessionManagementEnabled": ('bool',), + "QGuiApplication.setFont": ('PySide2.QtGui.QFont',), + "QGuiApplication.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGuiApplication.setOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.setPalette": ('PySide2.QtGui.QPalette',), + "QGuiApplication.setQuitOnLastWindowClosed": ('bool',), + "QGuiApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QGuiApplication.styleHints": (), + "QGuiApplication.sync": (), + "QGuiApplication.topLevelAt": ('PySide2.QtCore.QPoint',), + "QGuiApplication.topLevelWindows": (), + "QGuiApplication.windowIcon": (), + + # class PySide2.QtGui.QHelpEvent: + "QHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QHelpEvent.globalPos": (), + "QHelpEvent.globalX": (), + "QHelpEvent.global""Y": (), + "QHelpEvent.pos": (), + "QHelpEvent.x": (), + "QHelpEvent.y": (), + + # class PySide2.QtGui.QHideEvent: + "QHideEvent.__init__": (), + + # class PySide2.QtGui.QHoverEvent: + "QHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'KeyboardModifiers'), + "QHoverEvent.oldPos": (), + "QHoverEvent.oldPosF": (), + "QHoverEvent.pos": (), + "QHoverEvent.posF": (), + + # class PySide2.QtGui.QIcon: + "QIcon.__init__": [(), ('PySide2.QtGui.QIcon',), ('PySide2.QtGui.QIconEngine',), ('PySide2.QtGui.QPixmap',), ('str',)], + "QIcon.__copy__": (), + "QIcon.actualSize": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.cacheKey": (), + "QIcon.fromTheme": [('str',), ('str', 'PySide2.QtGui.QIcon')], + "QIcon.hasThemeIcon": ('str',), + "QIcon.isMask": (), + "QIcon.isNull": (), + "QIcon.name": (), + "QIcon.paint": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QPainter', 'int', 'int', 'int', 'int', 'Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.pixmap": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.setIsMask": ('bool',), + "QIcon.setThemeName": ('str',), + "QIcon.setThemeSearchPaths": ('List[str]',), + "QIcon.swap": ('PySide2.QtGui.QIcon',), + "QIcon.themeName": (), + "QIcon.themeSearchPaths": (), + + # class PySide2.QtGui.QIconDragEvent: + "QIconDragEvent.__init__": (), + + # class PySide2.QtGui.QIconEngine: + "QIconEngine.__init__": [(), ('PySide2.QtGui.QIconEngine',)], + "QIconEngine.actualSize": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.clone": (), + "QIconEngine.iconName": (), + "QIconEngine.isNull": (), + "QIconEngine.key": (), + "QIconEngine.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.pixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.read": ('PySide2.QtCore.QDataStream',), + "QIconEngine.scaledPixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State', 'float'), + "QIconEngine.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QImage: + "QImage.__init__": [(), ('List[str]',), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QImage.Format'), ('PySide2.QtGui.QImage',), ('Union[str, int]', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'Callable', 'int'), ('Union[str, int]', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'Callable', 'int'), ('int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'str')], + "QImage.__copy__": (), + "QImage.allGray": (), + "QImage.alphaChannel": (), + "QImage.bitPlaneCount": (), + "QImage.bits": (), + "QImage.byteCount": (), + "QImage.bytesPerLine": (), + "QImage.cacheKey": (), + "QImage.color": ('int',), + "QImage.colorCount": (), + "QImage.colorTable": (), + "QImage.constBits": (), + "QImage.constScanLine": ('int',), + "QImage.convertToFormat": [('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), ('PySide2.QtGui.QImage.Format', 'list', 'ImageConversionFlags')], + "QImage.convertToFormat_helper": ('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), + "QImage.convertToFormat_inplace": ('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), + "QImage.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QImage.createAlphaMask": ('ImageConversionFlags',), + "QImage.createHeuristicMask": ('bool',), + "QImage.createMaskFromColor": ('int', 'PySide2.QtCore.Qt.MaskMode'), + "QImage.depth": (), + "QImage.devType": (), + "QImage.devicePixelRatio": (), + "QImage.dotsPerMeterX": (), + "QImage.dotsPerMeterY": (), + "QImage.fill": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',)], + "QImage.format": (), + "QImage.fromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.hasAlphaChannel": (), + "QImage.height": (), + "QImage.invertPixels": ('PySide2.QtGui.QImage.InvertMode',), + "QImage.isGrayscale": (), + "QImage.isNull": (), + "QImage.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QImage.loadFromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QImage.mirrored": ('bool', 'bool'), + "QImage.mirrored_helper": ('bool', 'bool'), + "QImage.mirrored_inplace": ('bool', 'bool'), + "QImage.offset": (), + "QImage.paintEngine": (), + "QImage.pixel": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelColor": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelFormat": (), + "QImage.pixelIndex": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.rect": (), + "QImage.reinterpretAsFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.rgbSwapped": (), + "QImage.rgbSwapped_helper": (), + "QImage.rgbSwapped_inplace": (), + "QImage.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QImage.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scanLine": ('int',), + "QImage.setAlphaChannel": ('PySide2.QtGui.QImage',), + "QImage.setColor": ('int', 'int'), + "QImage.setColorCount": ('int',), + "QImage.setColorTable": ('list',), + "QImage.setDevicePixelRatio": ('float',), + "QImage.setDotsPerMeterX": ('int',), + "QImage.setDotsPerMeterY": ('int',), + "QImage.setOffset": ('PySide2.QtCore.QPoint',), + "QImage.setPixel": [('PySide2.QtCore.QPoint', 'int'), ('int', 'int', 'int')], + "QImage.setPixelColor": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QColor')], + "QImage.setText": ('str', 'str'), + "QImage.size": (), + "QImage.smoothScaled": ('int', 'int'), + "QImage.swap": ('PySide2.QtGui.QImage',), + "QImage.text": ('str',), + "QImage.textKeys": (), + "QImage.toImageFormat": ('PySide2.QtGui.QPixelFormat',), + "QImage.toPixelFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QImage.valid": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.width": (), + + # class PySide2.QtGui.QImageIOHandler: + "QImageIOHandler.__init__": (), + "QImageIOHandler.canRead": (), + "QImageIOHandler.currentImageNumber": (), + "QImageIOHandler.currentImageRect": (), + "QImageIOHandler.device": (), + "QImageIOHandler.format": (), + "QImageIOHandler.imageCount": (), + "QImageIOHandler.jumpToImage": ('int',), + "QImageIOHandler.jumpToNextImage": (), + "QImageIOHandler.loopCount": (), + "QImageIOHandler.name": (), + "QImageIOHandler.nextImageDelay": (), + "QImageIOHandler.option": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.read": ('PySide2.QtGui.QImage',), + "QImageIOHandler.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageIOHandler.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageIOHandler.setOption": ('PySide2.QtGui.QImageIOHandler.ImageOption', 'Any'), + "QImageIOHandler.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QImageReader: + "QImageReader.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageReader.autoDetectImageFormat": (), + "QImageReader.autoTransform": (), + "QImageReader.backgroundColor": (), + "QImageReader.canRead": (), + "QImageReader.clipRect": (), + "QImageReader.currentImageNumber": (), + "QImageReader.currentImageRect": (), + "QImageReader.decideFormatFromContent": (), + "QImageReader.device": (), + "QImageReader.error": (), + "QImageReader.errorString": (), + "QImageReader.fileName": (), + "QImageReader.format": (), + "QImageReader.gamma": (), + "QImageReader.imageCount": (), + "QImageReader.imageFormat": [(), ('PySide2.QtCore.QIODevice',), ('str',)], + "QImageReader.jumpToImage": ('int',), + "QImageReader.jumpToNextImage": (), + "QImageReader.loopCount": (), + "QImageReader.nextImageDelay": (), + "QImageReader.quality": (), + "QImageReader.read": (), + "QImageReader.scaledClipRect": (), + "QImageReader.scaledSize": (), + "QImageReader.setAutoDetectImageFormat": ('bool',), + "QImageReader.setAutoTransform": ('bool',), + "QImageReader.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QImageReader.setClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setDecideFormatFromContent": ('bool',), + "QImageReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageReader.setFileName": ('str',), + "QImageReader.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageReader.setGamma": ('float',), + "QImageReader.setQuality": ('int',), + "QImageReader.setScaledClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setScaledSize": ('PySide2.QtCore.QSize',), + "QImageReader.size": (), + "QImageReader.subType": (), + "QImageReader.supportedImageFormats": (), + "QImageReader.supportedMimeTypes": (), + "QImageReader.supportedSubTypes": (), + "QImageReader.supportsAnimation": (), + "QImageReader.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageReader.text": ('str',), + "QImageReader.textKeys": (), + "QImageReader.transformation": (), + + # class PySide2.QtGui.QImageWriter: + "QImageWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageWriter.canWrite": (), + "QImageWriter.compression": (), + "QImageWriter.description": (), + "QImageWriter.device": (), + "QImageWriter.error": (), + "QImageWriter.errorString": (), + "QImageWriter.fileName": (), + "QImageWriter.format": (), + "QImageWriter.gamma": (), + "QImageWriter.optimizedWrite": (), + "QImageWriter.progressiveScanWrite": (), + "QImageWriter.quality": (), + "QImageWriter.setCompression": ('int',), + "QImageWriter.setDescription": ('str',), + "QImageWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageWriter.setFileName": ('str',), + "QImageWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setGamma": ('float',), + "QImageWriter.setOptimizedWrite": ('bool',), + "QImageWriter.setProgressiveScanWrite": ('bool',), + "QImageWriter.setQuality": ('int',), + "QImageWriter.setSubType": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setText": ('str', 'str'), + "QImageWriter.setTransformation": ('Transformations',), + "QImageWriter.subType": (), + "QImageWriter.supportedImageFormats": (), + "QImageWriter.supportedMimeTypes": (), + "QImageWriter.supportedSubTypes": (), + "QImageWriter.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageWriter.transformation": (), + "QImageWriter.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QInputEvent: + "QInputEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'KeyboardModifiers'), + "QInputEvent.modifiers": (), + "QInputEvent.setModifiers": ('KeyboardModifiers',), + "QInputEvent.setTimestamp": ('int',), + "QInputEvent.timestamp": (), + + # class PySide2.QtGui.QInputMethodEvent: + "QInputMethodEvent.__init__": [(), ('PySide2.QtGui.QInputMethodEvent',), ('str', 'list')], + "QInputMethodEvent.attributes": (), + "QInputMethodEvent.commitString": (), + "QInputMethodEvent.preeditString": (), + "QInputMethodEvent.replacementLength": (), + "QInputMethodEvent.replacementStart": (), + "QInputMethodEvent.setCommitString": ('str', 'int', 'int'), + + # class PySide2.QtGui.QIntValidator: + "QIntValidator.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QIntValidator.bottom": (), + "QIntValidator.fixup": ('str',), + "QIntValidator.setBottom": ('int',), + "QIntValidator.setRange": ('int', 'int'), + "QIntValidator.setTop": ('int',), + "QIntValidator.top": (), + "QIntValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QKeyEvent: + "QKeyEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'int', 'KeyboardModifiers', 'int', 'int', 'int', 'str', 'bool', 'int'), ('PySide2.QtCore.QEvent.Type', 'int', 'KeyboardModifiers', 'str', 'bool', 'int')], + "QKeyEvent.count": (), + "QKeyEvent.isAutoRepeat": (), + "QKeyEvent.key": (), + "QKeyEvent.matches": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeyEvent.modifiers": (), + "QKeyEvent.nativeModifiers": (), + "QKeyEvent.nativeScanCode": (), + "QKeyEvent.nativeVirtualKey": (), + "QKeyEvent.text": (), + + # class PySide2.QtGui.QKeySequence: + "QKeySequence.__init__": [(), ('PySide2.QtGui.QKeySequence',), ('PySide2.QtGui.QKeySequence.StandardKey',), ('int', 'int', 'int', 'int'), ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat')], + "QKeySequence.__copy__": (), + "QKeySequence.__reduce__": (), + "QKeySequence.count": (), + "QKeySequence.fromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.isEmpty": (), + "QKeySequence.keyBindings": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeySequence.listFromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.listToString": ('list', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.matches": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.mnemonic": ('str',), + "QKeySequence.swap": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.toString": ('PySide2.QtGui.QKeySequence.SequenceFormat',), + + # class PySide2.QtGui.QLinearGradient: + "QLinearGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtGui.QLinearGradient',), ('float', 'float', 'float', 'float')], + "QLinearGradient.__copy__": (), + "QLinearGradient.finalStop": (), + "QLinearGradient.setFinalStop": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.setStart": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.start": (), + + # class PySide2.QtGui.QMatrix: + "QMatrix.__init__": [(), ('PySide2.QtGui.QMatrix',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix.__copy__": (), + "QMatrix.__reduce__": (), + "QMatrix.determinant": (), + "QMatrix.dx": (), + "QMatrix.dy": (), + "QMatrix.inverted": ('bool',), + "QMatrix.isIdentity": (), + "QMatrix.isInvertible": (), + "QMatrix.m11": (), + "QMatrix.m12": (), + "QMatrix.m21": (), + "QMatrix.m22": (), + "QMatrix.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QMatrix.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix.mapToPolygon": ('PySide2.QtCore.QRect',), + "QMatrix.reset": (), + "QMatrix.rotate": ('float',), + "QMatrix.scale": ('float', 'float'), + "QMatrix.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix.shear": ('float', 'float'), + "QMatrix.translate": ('float', 'float'), + + # class PySide2.QtGui.QMatrix2x2: + "QMatrix2x2.__init__": [('PySide2.QtGui.QMatrix2x2',), ('Sequence',)], + "QMatrix2x2.__copy__": (), + "QMatrix2x2.__reduce__": (), + "QMatrix2x2.data": (), + "QMatrix2x2.fill": ('object',), + "QMatrix2x2.transposed": (), + + # class PySide2.QtGui.QMatrix2x3: + "QMatrix2x3.__init__": [('PySide2.QtGui.QMatrix2x3',), ('Sequence',)], + "QMatrix2x3.__copy__": (), + "QMatrix2x3.__reduce__": (), + "QMatrix2x3.data": (), + "QMatrix2x3.fill": ('object',), + "QMatrix2x3.transposed": (), + + # class PySide2.QtGui.QMatrix2x4: + "QMatrix2x4.__init__": [('PySide2.QtGui.QMatrix2x4',), ('Sequence',)], + "QMatrix2x4.__copy__": (), + "QMatrix2x4.__reduce__": (), + "QMatrix2x4.data": (), + "QMatrix2x4.fill": ('object',), + "QMatrix2x4.transposed": (), + + # class PySide2.QtGui.QMatrix3x2: + "QMatrix3x2.__init__": [('PySide2.QtGui.QMatrix3x2',), ('Sequence',)], + "QMatrix3x2.__copy__": (), + "QMatrix3x2.__reduce__": (), + "QMatrix3x2.data": (), + "QMatrix3x2.fill": ('object',), + "QMatrix3x2.transposed": (), + + # class PySide2.QtGui.QMatrix3x3: + "QMatrix3x3.__init__": [('PySide2.QtGui.QMatrix3x3',), ('Sequence',)], + "QMatrix3x3.__copy__": (), + "QMatrix3x3.__reduce__": (), + "QMatrix3x3.data": (), + "QMatrix3x3.fill": ('object',), + "QMatrix3x3.transposed": (), + + # class PySide2.QtGui.QMatrix3x4: + "QMatrix3x4.__init__": [('PySide2.QtGui.QMatrix3x4',), ('Sequence',)], + "QMatrix3x4.__copy__": (), + "QMatrix3x4.__reduce__": (), + "QMatrix3x4.data": (), + "QMatrix3x4.fill": ('object',), + "QMatrix3x4.transposed": (), + + # class PySide2.QtGui.QMatrix4x2: + "QMatrix4x2.__init__": [('PySide2.QtGui.QMatrix4x2',), ('Sequence',)], + "QMatrix4x2.__copy__": (), + "QMatrix4x2.__reduce__": (), + "QMatrix4x2.data": (), + "QMatrix4x2.fill": ('object',), + "QMatrix4x2.transposed": (), + + # class PySide2.QtGui.QMatrix4x3: + "QMatrix4x3.__init__": [('PySide2.QtGui.QMatrix4x3',), ('Sequence',)], + "QMatrix4x3.__copy__": (), + "QMatrix4x3.__reduce__": (), + "QMatrix4x3.data": (), + "QMatrix4x3.fill": ('object',), + "QMatrix4x3.transposed": (), + + # class PySide2.QtGui.QMatrix4x4: + "QMatrix4x4.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float',), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.__copy__": (), + "QMatrix4x4.__reduce__": (), + "QMatrix4x4.column": ('int',), + "QMatrix4x4.copyDataTo": ('float',), + "QMatrix4x4.data": (), + "QMatrix4x4.determinant": (), + "QMatrix4x4.fill": ('float',), + "QMatrix4x4.flipCoordinates": (), + "QMatrix4x4.frustum": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix4x4.inverted": ('bool',), + "QMatrix4x4.isAffine": (), + "QMatrix4x4.isIdentity": (), + "QMatrix4x4.lookAt": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QMatrix4x4.map": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',)], + "QMatrix4x4.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix4x4.mapVector": ('PySide2.QtGui.QVector3D',), + "QMatrix4x4.normalMatrix": (), + "QMatrix4x4.optimize": (), + "QMatrix4x4.ortho": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.perspective": ('float', 'float', 'float', 'float'), + "QMatrix4x4.rotate": [('PySide2.QtGui.QQuaternion',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QMatrix4x4.row": ('int',), + "QMatrix4x4.scale": [('PySide2.QtGui.QVector3D',), ('float',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.setColumn": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setRow": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setToIdentity": (), + "QMatrix4x4.toAffine": (), + "QMatrix4x4.toTransform": [(), ('float',)], + "QMatrix4x4.translate": [('PySide2.QtGui.QVector3D',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.transposed": (), + "QMatrix4x4.viewport": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + + # class PySide2.QtGui.QMouseEvent: + "QMouseEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers')], + "QMouseEvent.button": (), + "QMouseEvent.buttons": (), + "QMouseEvent.flags": (), + "QMouseEvent.globalPos": (), + "QMouseEvent.globalX": (), + "QMouseEvent.global""Y": (), + "QMouseEvent.localPos": (), + "QMouseEvent.pos": (), + "QMouseEvent.screenPos": (), + "QMouseEvent.setLocalPos": ('PySide2.QtCore.QPointF',), + "QMouseEvent.source": (), + "QMouseEvent.windowPos": (), + "QMouseEvent.x": (), + "QMouseEvent.y": (), + + # class PySide2.QtGui.QMoveEvent: + "QMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QMoveEvent.oldPos": (), + "QMoveEvent.pos": (), + + # class PySide2.QtGui.QMovie: + "QMovie.__init__": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QMovie.backgroundColor": (), + "QMovie.cacheMode": (), + "QMovie.currentFrameNumber": (), + "QMovie.currentImage": (), + "QMovie.currentPixmap": (), + "QMovie.device": (), + "QMovie.fileName": (), + "QMovie.format": (), + "QMovie.frameCount": (), + "QMovie.frameRect": (), + "QMovie.isValid": (), + "QMovie.jumpToFrame": ('int',), + "QMovie.jumpToNextFrame": (), + "QMovie.loopCount": (), + "QMovie.nextFrameDelay": (), + "QMovie.scaledSize": (), + "QMovie.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QMovie.setCacheMode": ('PySide2.QtGui.QMovie.CacheMode',), + "QMovie.setDevice": ('PySide2.QtCore.QIODevice',), + "QMovie.setFileName": ('str',), + "QMovie.setFormat": ('PySide2.QtCore.QByteArray',), + "QMovie.setPaused": ('bool',), + "QMovie.setScaledSize": ('PySide2.QtCore.QSize',), + "QMovie.setSpeed": ('int',), + "QMovie.speed": (), + "QMovie.start": (), + "QMovie.state": (), + "QMovie.stop": (), + "QMovie.supportedFormats": (), + + # class PySide2.QtGui.QOffscreenSurface: + "QOffscreenSurface.__init__": ('PySide2.QtGui.QScreen',), + "QOffscreenSurface.create": (), + "QOffscreenSurface.destroy": (), + "QOffscreenSurface.format": (), + "QOffscreenSurface.isValid": (), + "QOffscreenSurface.nativeHandle": (), + "QOffscreenSurface.requestedFormat": (), + "QOffscreenSurface.screen": (), + "QOffscreenSurface.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOffscreenSurface.setNativeHandle": ('int',), + "QOffscreenSurface.setScreen": ('PySide2.QtGui.QScreen',), + "QOffscreenSurface.size": (), + "QOffscreenSurface.surfaceHandle": (), + "QOffscreenSurface.surfaceType": (), + + # class PySide2.QtGui.QOpenGLBuffer: + "QOpenGLBuffer.__init__": [(), ('PySide2.QtGui.QOpenGLBuffer',), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.allocate": [('int',), ('int', 'int')], + "QOpenGLBuffer.bind": (), + "QOpenGLBuffer.bufferId": (), + "QOpenGLBuffer.create": (), + "QOpenGLBuffer.destroy": (), + "QOpenGLBuffer.isCreated": (), + "QOpenGLBuffer.map": ('PySide2.QtGui.QOpenGLBuffer.Access',), + "QOpenGLBuffer.mapRange": ('int', 'int', 'RangeAccessFlags'), + "QOpenGLBuffer.read": ('int', 'int', 'int'), + "QOpenGLBuffer.release": [(), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.setUsagePattern": ('PySide2.QtGui.QOpenGLBuffer.UsagePattern',), + "QOpenGLBuffer.size": (), + "QOpenGLBuffer.type": (), + "QOpenGLBuffer.unmap": (), + "QOpenGLBuffer.usagePattern": (), + "QOpenGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtGui.QOpenGLContext: + "QOpenGLContext.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLContext.areSharing": ('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLContext.create": (), + "QOpenGLContext.currentContext": (), + "QOpenGLContext.defaultFramebufferObject": (), + "QOpenGLContext.doneCurrent": (), + "QOpenGLContext.extensions": (), + "QOpenGLContext.extraFunctions": (), + "QOpenGLContext.format": (), + "QOpenGLContext.functions": (), + "QOpenGLContext.globalShareContext": (), + "QOpenGLContext.hasExtension": ('PySide2.QtCore.QByteArray',), + "QOpenGLContext.isOpenGLES": (), + "QOpenGLContext.isValid": (), + "QOpenGLContext.makeCurrent": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.nativeHandle": (), + "QOpenGLContext.openGLModuleHandle": (), + "QOpenGLContext.openGLModuleType": (), + "QOpenGLContext.screen": (), + "QOpenGLContext.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLContext.setNativeHandle": ('Any',), + "QOpenGLContext.setScreen": ('PySide2.QtGui.QScreen',), + "QOpenGLContext.setShareContext": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLContext.shareContext": (), + "QOpenGLContext.shareGroup": (), + "QOpenGLContext.supportsThreadedOpenGL": (), + "QOpenGLContext.surface": (), + "QOpenGLContext.swapBuffers": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.versionFunctions": ('PySide2.QtGui.QOpenGLVersionProfile',), + + # class PySide2.QtGui.QOpenGLContextGroup: + "QOpenGLContextGroup.currentContextGroup": (), + "QOpenGLContextGroup.shares": (), + + # class PySide2.QtGui.QOpenGLDebugLogger: + "QOpenGLDebugLogger.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLDebugLogger.disableMessages": [('Sources', 'Types', 'Severities'), ('list', 'Sources', 'Types')], + "QOpenGLDebugLogger.enableMessages": [('Sources', 'Types', 'Severities'), ('list', 'Sources', 'Types')], + "QOpenGLDebugLogger.initialize": (), + "QOpenGLDebugLogger.isLogging": (), + "QOpenGLDebugLogger.logMessage": ('PySide2.QtGui.QOpenGLDebugMessage',), + "QOpenGLDebugLogger.loggedMessages": (), + "QOpenGLDebugLogger.loggingMode": (), + "QOpenGLDebugLogger.maximumMessageLength": (), + "QOpenGLDebugLogger.popGroup": (), + "QOpenGLDebugLogger.pushGroup": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Source'), + "QOpenGLDebugLogger.startLogging": ('PySide2.QtGui.QOpenGLDebugLogger.LoggingMode',), + "QOpenGLDebugLogger.stopLogging": (), + + # class PySide2.QtGui.QOpenGLDebugMessage: + "QOpenGLDebugMessage.__init__": [(), ('PySide2.QtGui.QOpenGLDebugMessage',)], + "QOpenGLDebugMessage.__copy__": (), + "QOpenGLDebugMessage.createApplicationMessage": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Severity', 'PySide2.QtGui.QOpenGLDebugMessage.Type'), + "QOpenGLDebugMessage.createThirdPartyMessage": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Severity', 'PySide2.QtGui.QOpenGLDebugMessage.Type'), + "QOpenGLDebugMessage.id": (), + "QOpenGLDebugMessage.message": (), + "QOpenGLDebugMessage.severity": (), + "QOpenGLDebugMessage.source": (), + "QOpenGLDebugMessage.swap": ('PySide2.QtGui.QOpenGLDebugMessage',), + "QOpenGLDebugMessage.type": (), + + # class PySide2.QtGui.QOpenGLExtraFunctions: + "QOpenGLExtraFunctions.__init__": [(), ('PySide2.QtGui.QOpenGLContext',)], + "QOpenGLExtraFunctions.glActiveShaderProgram": ('int', 'int'), + "QOpenGLExtraFunctions.glBeginQuery": ('int', 'int'), + "QOpenGLExtraFunctions.glBeginTransformFeedback": ('int',), + "QOpenGLExtraFunctions.glBindBufferBase": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glBindImageTexture": ('int', 'int', 'int', 'Union[str, int]', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glBindProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glBindSampler": ('int', 'int'), + "QOpenGLExtraFunctions.glBindTransformFeedback": ('int', 'int'), + "QOpenGLExtraFunctions.glBindVertexArray": ('int',), + "QOpenGLExtraFunctions.glBlitFramebuffer": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glClearBufferfi": ('int', 'int', 'float', 'int'), + "QOpenGLExtraFunctions.glClearBufferfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glClearBufferiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glClearBufferuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glCompressedTexImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCompressedTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCopyTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDeleteProgramPipelines": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteQueries": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteSamplers": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteTransformFeedbacks": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteVertexArrays": ('int', 'int'), + "QOpenGLExtraFunctions.glDispatchCompute": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawArraysIndirect": ('int', 'int'), + "QOpenGLExtraFunctions.glDrawArraysInstanced": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawBuffers": ('int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsIndirect": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsInstanced": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawRangeElements": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glEndQuery": ('int',), + "QOpenGLExtraFunctions.glFramebufferParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glFramebufferTextureLayer": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGenProgramPipelines": ('int', 'int'), + "QOpenGLExtraFunctions.glGenQueries": ('int', 'int'), + "QOpenGLExtraFunctions.glGenSamplers": ('int', 'int'), + "QOpenGLExtraFunctions.glGenTransformFeedbacks": ('int', 'int'), + "QOpenGLExtraFunctions.glGenVertexArrays": ('int', 'int'), + "QOpenGLExtraFunctions.glGetActiveUniformBlockiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetActiveUniformsiv": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetBufferParameteri64v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetFragDataLocation": ('int', 'str'), + "QOpenGLExtraFunctions.glGetFramebufferParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInteger64i_v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInteger64v": ('int', 'int'), + "QOpenGLExtraFunctions.glGetIntegeri_v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInternalformativ": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetMultisamplefv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetProgramBinary": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramInterfaceiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramPipelineiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramResourceIndex": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glGetProgramResourceLocation": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glGetProgramResourceiv": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetQueryObjectuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetQueryiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetSamplerParameterfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetSamplerParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetStringi": ('int', 'int'), + "QOpenGLExtraFunctions.glGetTexLevelParameterfv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetTexLevelParameteriv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetUniformBlockIndex": ('int', 'str'), + "QOpenGLExtraFunctions.glGetUniformuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetVertexAttribIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetVertexAttribIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glInvalidateFramebuffer": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glInvalidateSubFramebuffer": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glIsProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glIsQuery": ('int',), + "QOpenGLExtraFunctions.glIsSampler": ('int',), + "QOpenGLExtraFunctions.glIsTransformFeedback": ('int',), + "QOpenGLExtraFunctions.glIsVertexArray": ('int',), + "QOpenGLExtraFunctions.glMemoryBarrier": ('int',), + "QOpenGLExtraFunctions.glMemoryBarrierByRegion": ('int',), + "QOpenGLExtraFunctions.glProgramBinary": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1f": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform1fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform1i": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1ui": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2f": ('int', 'int', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform2fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform2i": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2ui": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3f": ('int', 'int', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform3fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform3i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4f": ('int', 'int', 'float', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform4fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform4i": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4ui": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2x3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2x4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3x2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3x4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4x2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4x3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glReadBuffer": ('int',), + "QOpenGLExtraFunctions.glRenderbufferStorageMultisample": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glSampleMaski": ('int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameterf": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glSamplerParameterfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glSamplerParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage2D": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage2DMultisample": ('int', 'int', 'int', 'int', 'int', 'Union[str, int]'), + "QOpenGLExtraFunctions.glTexStorage3D": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform1ui": ('int', 'int'), + "QOpenGLExtraFunctions.glUniform1uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform2ui": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform2uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform3ui": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform3uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform4ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform4uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniformBlockBinding": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniformMatrix2x3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix2x4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix3x2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix3x4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix4x2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix4x3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUnmapBuffer": ('int',), + "QOpenGLExtraFunctions.glUseProgramStages": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glValidateProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glVertexAttribBinding": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribDivisor": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribFormat": ('int', 'int', 'int', 'Union[str, int]', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4iv": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4uiv": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribIFormat": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribIPointer": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexBindingDivisor": ('int', 'int'), + + # class PySide2.QtGui.QOpenGLFramebufferObject: + "QOpenGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.addColorAttachment": [('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.attachment": (), + "QOpenGLFramebufferObject.bind": (), + "QOpenGLFramebufferObject.bindDefault": (), + "QOpenGLFramebufferObject.blitFramebuffer": [('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.FramebufferRestorePolicy'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtGui.QOpenGLFramebufferObject', 'int', 'int')], + "QOpenGLFramebufferObject.format": (), + "QOpenGLFramebufferObject.handle": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QOpenGLFramebufferObject.height": (), + "QOpenGLFramebufferObject.isBound": (), + "QOpenGLFramebufferObject.isValid": (), + "QOpenGLFramebufferObject.release": (), + "QOpenGLFramebufferObject.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObject.size": (), + "QOpenGLFramebufferObject.sizes": (), + "QOpenGLFramebufferObject.takeTexture": [(), ('int',)], + "QOpenGLFramebufferObject.texture": (), + "QOpenGLFramebufferObject.textures": (), + "QOpenGLFramebufferObject.toImage": [(), ('bool',), ('bool', 'int')], + "QOpenGLFramebufferObject.width": (), + + # class PySide2.QtGui.QOpenGLFramebufferObjectFormat: + "QOpenGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtGui.QOpenGLFramebufferObjectFormat',)], + "QOpenGLFramebufferObjectFormat.__copy__": (), + "QOpenGLFramebufferObjectFormat.attachment": (), + "QOpenGLFramebufferObjectFormat.internalTextureFormat": (), + "QOpenGLFramebufferObjectFormat.mipmap": (), + "QOpenGLFramebufferObjectFormat.samples": (), + "QOpenGLFramebufferObjectFormat.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QOpenGLFramebufferObjectFormat.setMipmap": ('bool',), + "QOpenGLFramebufferObjectFormat.setSamples": ('int',), + "QOpenGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QOpenGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtGui.QOpenGLFunctions: + "QOpenGLFunctions.__init__": [(), ('PySide2.QtGui.QOpenGLContext',)], + "QOpenGLFunctions.glActiveTexture": ('int',), + "QOpenGLFunctions.glAttachShader": ('int', 'int'), + "QOpenGLFunctions.glBindAttribLocation": ('int', 'int', 'str'), + "QOpenGLFunctions.glBindBuffer": ('int', 'int'), + "QOpenGLFunctions.glBindFramebuffer": ('int', 'int'), + "QOpenGLFunctions.glBindRenderbuffer": ('int', 'int'), + "QOpenGLFunctions.glBindTexture": ('int', 'int'), + "QOpenGLFunctions.glBlendColor": ('float', 'float', 'float', 'float'), + "QOpenGLFunctions.glBlendEquation": ('int',), + "QOpenGLFunctions.glBlendEquationSeparate": ('int', 'int'), + "QOpenGLFunctions.glBlendFunc": ('int', 'int'), + "QOpenGLFunctions.glBlendFuncSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCheckFramebufferStatus": ('int',), + "QOpenGLFunctions.glClear": ('int',), + "QOpenGLFunctions.glClearColor": ('float', 'float', 'float', 'float'), + "QOpenGLFunctions.glClearDepthf": ('float',), + "QOpenGLFunctions.glClearStencil": ('int',), + "QOpenGLFunctions.glColorMask": ('Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), + "QOpenGLFunctions.glCompileShader": ('int',), + "QOpenGLFunctions.glCompressedTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCompressedTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCopyTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCopyTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCreateProgram": (), + "QOpenGLFunctions.glCreateShader": ('int',), + "QOpenGLFunctions.glCullFace": ('int',), + "QOpenGLFunctions.glDeleteBuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteFramebuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteProgram": ('int',), + "QOpenGLFunctions.glDeleteRenderbuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteShader": ('int',), + "QOpenGLFunctions.glDeleteTextures": ('int', 'int'), + "QOpenGLFunctions.glDepthFunc": ('int',), + "QOpenGLFunctions.glDepthMask": ('Union[str, int]',), + "QOpenGLFunctions.glDepthRangef": ('float', 'float'), + "QOpenGLFunctions.glDetachShader": ('int', 'int'), + "QOpenGLFunctions.glDisable": ('int',), + "QOpenGLFunctions.glDisableVertexAttribArray": ('int',), + "QOpenGLFunctions.glDrawArrays": ('int', 'int', 'int'), + "QOpenGLFunctions.glDrawElements": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glEnable": ('int',), + "QOpenGLFunctions.glEnableVertexAttribArray": ('int',), + "QOpenGLFunctions.glFinish": (), + "QOpenGLFunctions.glFlush": (), + "QOpenGLFunctions.glFramebufferRenderbuffer": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glFramebufferTexture2D": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glFrontFace": ('int',), + "QOpenGLFunctions.glGenBuffers": ('int', 'int'), + "QOpenGLFunctions.glGenFramebuffers": ('int', 'int'), + "QOpenGLFunctions.glGenRenderbuffers": ('int', 'int'), + "QOpenGLFunctions.glGenTextures": ('int', 'int'), + "QOpenGLFunctions.glGenerateMipmap": ('int',), + "QOpenGLFunctions.glGetAttachedShaders": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetAttribLocation": ('int', 'str'), + "QOpenGLFunctions.glGetBufferParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetError": (), + "QOpenGLFunctions.glGetFloatv": ('int', 'float'), + "QOpenGLFunctions.glGetFramebufferAttachmentParameteriv": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetIntegerv": ('int', 'int'), + "QOpenGLFunctions.glGetProgramiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetRenderbufferParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetShaderPrecisionFormat": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetShaderiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetString": ('int',), + "QOpenGLFunctions.glGetTexParameterfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetTexParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetUniformLocation": ('int', 'str'), + "QOpenGLFunctions.glGetUniformfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetUniformiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetVertexAttribfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetVertexAttribiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glHint": ('int', 'int'), + "QOpenGLFunctions.glIsBuffer": ('int',), + "QOpenGLFunctions.glIsEnabled": ('int',), + "QOpenGLFunctions.glIsFramebuffer": ('int',), + "QOpenGLFunctions.glIsProgram": ('int',), + "QOpenGLFunctions.glIsRenderbuffer": ('int',), + "QOpenGLFunctions.glIsShader": ('int',), + "QOpenGLFunctions.glIsTexture": ('int',), + "QOpenGLFunctions.glLineWidth": ('float',), + "QOpenGLFunctions.glLinkProgram": ('int',), + "QOpenGLFunctions.glPixelStorei": ('int', 'int'), + "QOpenGLFunctions.glPolygonOffset": ('float', 'float'), + "QOpenGLFunctions.glReadPixels": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glReleaseShaderCompiler": (), + "QOpenGLFunctions.glRenderbufferStorage": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glSampleCoverage": ('float', 'Union[str, int]'), + "QOpenGLFunctions.glScissor": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glShaderBinary": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glStencilFunc": ('int', 'int', 'int'), + "QOpenGLFunctions.glStencilFuncSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glStencilMask": ('int',), + "QOpenGLFunctions.glStencilMaskSeparate": ('int', 'int'), + "QOpenGLFunctions.glStencilOp": ('int', 'int', 'int'), + "QOpenGLFunctions.glStencilOpSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glTexParameterf": ('int', 'int', 'float'), + "QOpenGLFunctions.glTexParameterfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glTexParameteri": ('int', 'int', 'int'), + "QOpenGLFunctions.glTexParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform1f": ('int', 'float'), + "QOpenGLFunctions.glUniform1fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform1i": ('int', 'int'), + "QOpenGLFunctions.glUniform1iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform2f": ('int', 'float', 'float'), + "QOpenGLFunctions.glUniform2fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform2i": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform2iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform3f": ('int', 'float', 'float', 'float'), + "QOpenGLFunctions.glUniform3fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform3i": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform3iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform4f": ('int', 'float', 'float', 'float', 'float'), + "QOpenGLFunctions.glUniform4fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform4i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform4iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniformMatrix2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUniformMatrix3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUniformMatrix4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUseProgram": ('int',), + "QOpenGLFunctions.glValidateProgram": ('int',), + "QOpenGLFunctions.glVertexAttrib1f": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib1fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib2f": ('int', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib2fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib3f": ('int', 'float', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib3fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib4f": ('int', 'float', 'float', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib4fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttribPointer": ('int', 'int', 'int', 'Union[str, int]', 'int', 'int'), + "QOpenGLFunctions.glViewport": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.hasOpenGLFeature": ('PySide2.QtGui.QOpenGLFunctions.OpenGLFeature',), + "QOpenGLFunctions.initializeOpenGLFunctions": (), + "QOpenGLFunctions.openGLFeatures": (), + + # class PySide2.QtGui.QOpenGLPixelTransferOptions: + "QOpenGLPixelTransferOptions.__init__": [(), ('PySide2.QtGui.QOpenGLPixelTransferOptions',)], + "QOpenGLPixelTransferOptions.__copy__": (), + "QOpenGLPixelTransferOptions.alignment": (), + "QOpenGLPixelTransferOptions.imageHeight": (), + "QOpenGLPixelTransferOptions.isLeastSignificantBitFirst": (), + "QOpenGLPixelTransferOptions.isSwapBytesEnabled": (), + "QOpenGLPixelTransferOptions.rowLength": (), + "QOpenGLPixelTransferOptions.setAlignment": ('int',), + "QOpenGLPixelTransferOptions.setImageHeight": ('int',), + "QOpenGLPixelTransferOptions.setLeastSignificantByteFirst": ('bool',), + "QOpenGLPixelTransferOptions.setRowLength": ('int',), + "QOpenGLPixelTransferOptions.setSkipImages": ('int',), + "QOpenGLPixelTransferOptions.setSkipPixels": ('int',), + "QOpenGLPixelTransferOptions.setSkipRows": ('int',), + "QOpenGLPixelTransferOptions.setSwapBytesEnabled": ('bool',), + "QOpenGLPixelTransferOptions.skipImages": (), + "QOpenGLPixelTransferOptions.skipPixels": (), + "QOpenGLPixelTransferOptions.skipRows": (), + "QOpenGLPixelTransferOptions.swap": ('PySide2.QtGui.QOpenGLPixelTransferOptions',), + + # class PySide2.QtGui.QOpenGLShader: + "QOpenGLShader.__init__": ('ShaderType', 'PySide2.QtCore.QObject'), + "QOpenGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShader.compileSourceFile": ('str',), + "QOpenGLShader.hasOpenGLShaders": ('ShaderType', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLShader.isCompiled": (), + "QOpenGLShader.log": (), + "QOpenGLShader.shaderId": (), + "QOpenGLShader.shaderType": (), + "QOpenGLShader.sourceCode": (), + + # class PySide2.QtGui.QOpenGLShaderProgram: + "QOpenGLShaderProgram.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLShaderProgram.addCacheableShaderFromSourceCode": [('ShaderType', 'PySide2.QtCore.QByteArray'), ('ShaderType', 'str')], + "QOpenGLShaderProgram.addCacheableShaderFromSourceFile": ('ShaderType', 'str'), + "QOpenGLShaderProgram.addShader": ('PySide2.QtGui.QOpenGLShader',), + "QOpenGLShaderProgram.addShaderFromSourceCode": [('ShaderType', 'PySide2.QtCore.QByteArray'), ('ShaderType', 'str')], + "QOpenGLShaderProgram.addShaderFromSourceFile": ('ShaderType', 'str'), + "QOpenGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShaderProgram.bind": (), + "QOpenGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QOpenGLShaderProgram.create": (), + "QOpenGLShaderProgram.defaultInnerTessellationLevels": (), + "QOpenGLShaderProgram.defaultOuterTessellationLevels": (), + "QOpenGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QOpenGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QOpenGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLShaderProgram.isLinked": (), + "QOpenGLShaderProgram.link": (), + "QOpenGLShaderProgram.log": (), + "QOpenGLShaderProgram.maxGeometryOutputVertices": (), + "QOpenGLShaderProgram.patchVertexCount": (), + "QOpenGLShaderProgram.programId": (), + "QOpenGLShaderProgram.release": (), + "QOpenGLShaderProgram.removeAllShaders": (), + "QOpenGLShaderProgram.removeShader": ('PySide2.QtGui.QOpenGLShader',), + "QOpenGLShaderProgram.setAttributeArray": [('int', 'float', 'int', 'int'), ('int', 'int', 'int', 'int', 'int'), ('str', 'float', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QOpenGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QOpenGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'float', 'int', 'int'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'float', 'int', 'int')], + "QOpenGLShaderProgram.setDefaultInnerTessellationLevels": ('list',), + "QOpenGLShaderProgram.setDefaultOuterTessellationLevels": ('list',), + "QOpenGLShaderProgram.setPatchVertexCount": ('int',), + "QOpenGLShaderProgram.setUniformValue": [('int', 'List[List[float]]'), ('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'List[List[float]]'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QOpenGLShaderProgram.setUniformValueArray": [('int', 'float', 'int', 'int'), ('int', 'int', 'int'), ('str', 'float', 'int', 'int'), ('str', 'int', 'int')], + "QOpenGLShaderProgram.shaders": (), + "QOpenGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtGui.QOpenGLTexture: + "QOpenGLTexture.__init__": [('PySide2.QtGui.QImage', 'PySide2.QtGui.QOpenGLTexture.MipMapGeneration'), ('PySide2.QtGui.QOpenGLTexture.Target',)], + "QOpenGLTexture.allocateStorage": [(), ('PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType')], + "QOpenGLTexture.bind": [(), ('int', 'PySide2.QtGui.QOpenGLTexture.TextureUnitReset')], + "QOpenGLTexture.borderColor": (), + "QOpenGLTexture.boundTextureId": [('PySide2.QtGui.QOpenGLTexture.BindingTarget',), ('int', 'PySide2.QtGui.QOpenGLTexture.BindingTarget')], + "QOpenGLTexture.comparisonFunction": (), + "QOpenGLTexture.comparisonMode": (), + "QOpenGLTexture.create": (), + "QOpenGLTexture.createTextureView": ('PySide2.QtGui.QOpenGLTexture.Target', 'PySide2.QtGui.QOpenGLTexture.TextureFormat', 'int', 'int', 'int', 'int'), + "QOpenGLTexture.depth": (), + "QOpenGLTexture.depthStencilMode": (), + "QOpenGLTexture.destroy": (), + "QOpenGLTexture.faces": (), + "QOpenGLTexture.format": (), + "QOpenGLTexture.generateMipMaps": [(), ('int', 'bool')], + "QOpenGLTexture.hasFeature": ('PySide2.QtGui.QOpenGLTexture.Feature',), + "QOpenGLTexture.height": (), + "QOpenGLTexture.isAutoMipMapGenerationEnabled": (), + "QOpenGLTexture.isBound": [(), ('int',)], + "QOpenGLTexture.isCreated": (), + "QOpenGLTexture.isFixedSamplePositions": (), + "QOpenGLTexture.isStorageAllocated": (), + "QOpenGLTexture.isTextureView": (), + "QOpenGLTexture.layers": (), + "QOpenGLTexture.levelOfDetailRange": (), + "QOpenGLTexture.levelofDetailBias": (), + "QOpenGLTexture.magnificationFilter": (), + "QOpenGLTexture.maximumAnisotropy": (), + "QOpenGLTexture.maximumLevelOfDetail": (), + "QOpenGLTexture.maximumMipLevels": (), + "QOpenGLTexture.minMagFilters": (), + "QOpenGLTexture.minificationFilter": (), + "QOpenGLTexture.minimumLevelOfDetail": (), + "QOpenGLTexture.mipBaseLevel": (), + "QOpenGLTexture.mipLevelRange": (), + "QOpenGLTexture.mipLevels": (), + "QOpenGLTexture.mipMaxLevel": (), + "QOpenGLTexture.release": [(), ('int', 'PySide2.QtGui.QOpenGLTexture.TextureUnitReset')], + "QOpenGLTexture.samples": (), + "QOpenGLTexture.setAutoMipMapGenerationEnabled": ('bool',), + "QOpenGLTexture.setBorderColor": [('PySide2.QtGui.QColor',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QOpenGLTexture.setComparisonFunction": ('PySide2.QtGui.QOpenGLTexture.ComparisonFunction',), + "QOpenGLTexture.setComparisonMode": ('PySide2.QtGui.QOpenGLTexture.ComparisonMode',), + "QOpenGLTexture.setCompressedData": [('int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions')], + "QOpenGLTexture.setData": [('PySide2.QtGui.QImage', 'PySide2.QtGui.QOpenGLTexture.MipMapGeneration'), ('PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions')], + "QOpenGLTexture.setDepthStencilMode": ('PySide2.QtGui.QOpenGLTexture.DepthStencilMode',), + "QOpenGLTexture.setFixedSamplePositions": ('bool',), + "QOpenGLTexture.setFormat": ('PySide2.QtGui.QOpenGLTexture.TextureFormat',), + "QOpenGLTexture.setLayers": ('int',), + "QOpenGLTexture.setLevelOfDetailRange": ('float', 'float'), + "QOpenGLTexture.setLevelofDetailBias": ('float',), + "QOpenGLTexture.setMagnificationFilter": ('PySide2.QtGui.QOpenGLTexture.Filter',), + "QOpenGLTexture.setMaximumAnisotropy": ('float',), + "QOpenGLTexture.setMaximumLevelOfDetail": ('float',), + "QOpenGLTexture.setMinMagFilters": ('PySide2.QtGui.QOpenGLTexture.Filter', 'PySide2.QtGui.QOpenGLTexture.Filter'), + "QOpenGLTexture.setMinificationFilter": ('PySide2.QtGui.QOpenGLTexture.Filter',), + "QOpenGLTexture.setMinimumLevelOfDetail": ('float',), + "QOpenGLTexture.setMipBaseLevel": ('int',), + "QOpenGLTexture.setMipLevelRange": ('int', 'int'), + "QOpenGLTexture.setMipLevels": ('int',), + "QOpenGLTexture.setMipMaxLevel": ('int',), + "QOpenGLTexture.setSamples": ('int',), + "QOpenGLTexture.setSize": ('int', 'int', 'int'), + "QOpenGLTexture.setSwizzleMask": [('PySide2.QtGui.QOpenGLTexture.SwizzleComponent', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue'), ('PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue')], + "QOpenGLTexture.setWrapMode": [('PySide2.QtGui.QOpenGLTexture.CoordinateDirection', 'PySide2.QtGui.QOpenGLTexture.WrapMode'), ('PySide2.QtGui.QOpenGLTexture.WrapMode',)], + "QOpenGLTexture.swizzleMask": ('PySide2.QtGui.QOpenGLTexture.SwizzleComponent',), + "QOpenGLTexture.target": (), + "QOpenGLTexture.textureId": (), + "QOpenGLTexture.width": (), + "QOpenGLTexture.wrapMode": ('PySide2.QtGui.QOpenGLTexture.CoordinateDirection',), + + # class PySide2.QtGui.QOpenGLTimeMonitor: + "QOpenGLTimeMonitor.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLTimeMonitor.create": (), + "QOpenGLTimeMonitor.destroy": (), + "QOpenGLTimeMonitor.isCreated": (), + "QOpenGLTimeMonitor.isResultAvailable": (), + "QOpenGLTimeMonitor.objectIds": (), + "QOpenGLTimeMonitor.recordSample": (), + "QOpenGLTimeMonitor.reset": (), + "QOpenGLTimeMonitor.sampleCount": (), + "QOpenGLTimeMonitor.setSampleCount": ('int',), + "QOpenGLTimeMonitor.waitForIntervals": (), + "QOpenGLTimeMonitor.waitForSamples": (), + + # class PySide2.QtGui.QOpenGLTimerQuery: + "QOpenGLTimerQuery.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLTimerQuery.begin": (), + "QOpenGLTimerQuery.create": (), + "QOpenGLTimerQuery.destroy": (), + "QOpenGLTimerQuery.end": (), + "QOpenGLTimerQuery.isCreated": (), + "QOpenGLTimerQuery.isResultAvailable": (), + "QOpenGLTimerQuery.objectId": (), + "QOpenGLTimerQuery.recordTimestamp": (), + "QOpenGLTimerQuery.waitForResult": (), + "QOpenGLTimerQuery.waitForTimestamp": (), + + # class PySide2.QtGui.QOpenGLVersionProfile: + "QOpenGLVersionProfile.__init__": [(), ('PySide2.QtGui.QOpenGLVersionProfile',), ('PySide2.QtGui.QSurfaceFormat',)], + "QOpenGLVersionProfile.__copy__": (), + "QOpenGLVersionProfile.hasProfiles": (), + "QOpenGLVersionProfile.isLegacyVersion": (), + "QOpenGLVersionProfile.isValid": (), + "QOpenGLVersionProfile.profile": (), + "QOpenGLVersionProfile.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QOpenGLVersionProfile.setVersion": ('int', 'int'), + "QOpenGLVersionProfile.version": (), + + # class PySide2.QtGui.QOpenGLVertexArrayObject: + "QOpenGLVertexArrayObject.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLVertexArrayObject.bind": (), + "QOpenGLVertexArrayObject.create": (), + "QOpenGLVertexArrayObject.destroy": (), + "QOpenGLVertexArrayObject.isCreated": (), + "QOpenGLVertexArrayObject.objectId": (), + "QOpenGLVertexArrayObject.release": (), + + # class PySide2.QtGui.QOpenGLWindow: + "QOpenGLWindow.__init__": [('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLWindow.UpdateBehavior', 'PySide2.QtGui.QWindow'), ('PySide2.QtGui.QOpenGLWindow.UpdateBehavior', 'PySide2.QtGui.QWindow')], + "QOpenGLWindow.context": (), + "QOpenGLWindow.defaultFramebufferObject": (), + "QOpenGLWindow.doneCurrent": (), + "QOpenGLWindow.grabFramebuffer": (), + "QOpenGLWindow.initializeGL": (), + "QOpenGLWindow.isValid": (), + "QOpenGLWindow.makeCurrent": (), + "QOpenGLWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWindow.paintGL": (), + "QOpenGLWindow.paintOverGL": (), + "QOpenGLWindow.paintUnderGL": (), + "QOpenGLWindow.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWindow.resizeGL": ('int', 'int'), + "QOpenGLWindow.shareContext": (), + "QOpenGLWindow.updateBehavior": (), + + # class PySide2.QtGui.QPageLayout: + "QPageLayout.__init__": [(), ('PySide2.QtGui.QPageLayout',), ('PySide2.QtGui.QPageSize', 'PySide2.QtGui.QPageLayout.Orientation', 'PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit', 'PySide2.QtCore.QMarginsF')], + "QPageLayout.__copy__": (), + "QPageLayout.fullRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.fullRectPixels": ('int',), + "QPageLayout.fullRectPoints": (), + "QPageLayout.isEquivalentTo": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.isValid": (), + "QPageLayout.margins": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.marginsPixels": ('int',), + "QPageLayout.marginsPoints": (), + "QPageLayout.maximumMargins": (), + "QPageLayout.minimumMargins": (), + "QPageLayout.mode": (), + "QPageLayout.orientation": (), + "QPageLayout.pageSize": (), + "QPageLayout.paintRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.paintRectPixels": ('int',), + "QPageLayout.paintRectPoints": (), + "QPageLayout.setBottomMargin": ('float',), + "QPageLayout.setLeftMargin": ('float',), + "QPageLayout.setMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMinimumMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMode": ('PySide2.QtGui.QPageLayout.Mode',), + "QPageLayout.setOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPageLayout.setPageSize": ('PySide2.QtGui.QPageSize', 'PySide2.QtCore.QMarginsF'), + "QPageLayout.setRightMargin": ('float',), + "QPageLayout.setTopMargin": ('float',), + "QPageLayout.setUnits": ('PySide2.QtGui.QPageLayout.Unit',), + "QPageLayout.swap": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.units": (), + + # class PySide2.QtGui.QPageSize: + "QPageSize.__init__": [(), ('PySide2.QtCore.QSize', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.__copy__": (), + "QPageSize.definitionSize": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.definitionUnits": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.id": [(), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('int',)], + "QPageSize.isEquivalentTo": ('PySide2.QtGui.QPageSize',), + "QPageSize.isValid": (), + "QPageSize.key": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.name": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.rect": ('PySide2.QtGui.QPageSize.Unit',), + "QPageSize.rectPixels": ('int',), + "QPageSize.rectPoints": (), + "QPageSize.size": [('PySide2.QtGui.QPageSize.PageSizeId', 'PySide2.QtGui.QPageSize.Unit'), ('PySide2.QtGui.QPageSize.Unit',)], + "QPageSize.sizePixels": [('PySide2.QtGui.QPageSize.PageSizeId', 'int'), ('int',)], + "QPageSize.sizePoints": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.swap": ('PySide2.QtGui.QPageSize',), + "QPageSize.windowsId": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + + # class PySide2.QtGui.QPagedPaintDevice: + "QPagedPaintDevice.__init__": (), + "QPagedPaintDevice.devicePageLayout": (), + "QPagedPaintDevice.margins": (), + "QPagedPaintDevice.newPage": (), + "QPagedPaintDevice.pageLayout": (), + "QPagedPaintDevice.pageSize": (), + "QPagedPaintDevice.pageSizeMM": (), + "QPagedPaintDevice.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPagedPaintDevice.setPageLayout": ('PySide2.QtGui.QPageLayout',), + "QPagedPaintDevice.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit')], + "QPagedPaintDevice.setPageOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPagedPaintDevice.setPageSize": [('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPagedPaintDevice.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtGui.QPaintDevice: + "QPaintDevice.__init__": (), + "QPaintDevice.colorCount": (), + "QPaintDevice.depth": (), + "QPaintDevice.devType": (), + "QPaintDevice.devicePixelRatio": (), + "QPaintDevice.devicePixelRatioF": (), + "QPaintDevice.devicePixelRatioFScale": (), + "QPaintDevice.height": (), + "QPaintDevice.heightMM": (), + "QPaintDevice.initPainter": ('PySide2.QtGui.QPainter',), + "QPaintDevice.logicalDpiX": (), + "QPaintDevice.logicalDpiY": (), + "QPaintDevice.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDevice.paintEngine": (), + "QPaintDevice.paintingActive": (), + "QPaintDevice.physicalDpiX": (), + "QPaintDevice.physicalDpiY": (), + "QPaintDevice.redirected": ('PySide2.QtCore.QPoint',), + "QPaintDevice.sharedPainter": (), + "QPaintDevice.width": (), + "QPaintDevice.widthMM": (), + + # class PySide2.QtGui.QPaintDeviceWindow: + "QPaintDeviceWindow.event": ('PySide2.QtCore.QEvent',), + "QPaintDeviceWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QPaintDeviceWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDeviceWindow.paintEngine": (), + "QPaintDeviceWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPaintDeviceWindow.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + + # class PySide2.QtGui.QPaintEngine: + "QPaintEngine.__init__": ('PaintEngineFeatures',), + "QPaintEngine.begin": ('PySide2.QtGui.QPaintDevice',), + "QPaintEngine.clearDirty": ('DirtyFlags',), + "QPaintEngine.coordinateOffset": (), + "QPaintEngine.drawEllipse": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QPaintEngine.drawImage": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), + "QPaintEngine.drawLines": [('PySide2.QtCore.QLine', 'int'), ('PySide2.QtCore.QLineF', 'int')], + "QPaintEngine.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPaintEngine.drawPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), + "QPaintEngine.drawPoints": [('PySide2.QtCore.QPoint', 'int'), ('PySide2.QtCore.QPointF', 'int')], + "QPaintEngine.drawPolygon": [('PySide2.QtCore.QPoint', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode')], + "QPaintEngine.drawRects": [('PySide2.QtCore.QRect', 'int'), ('PySide2.QtCore.QRectF', 'int')], + "QPaintEngine.drawTextItem": ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), + "QPaintEngine.drawTiledPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), + "QPaintEngine.end": (), + "QPaintEngine.hasFeature": ('PaintEngineFeatures',), + "QPaintEngine.isActive": (), + "QPaintEngine.isExtended": (), + "QPaintEngine.paintDevice": (), + "QPaintEngine.painter": (), + "QPaintEngine.setActive": ('bool',), + "QPaintEngine.setDirty": ('DirtyFlags',), + "QPaintEngine.setSystemClip": ('PySide2.QtGui.QRegion',), + "QPaintEngine.setSystemRect": ('PySide2.QtCore.QRect',), + "QPaintEngine.syncState": (), + "QPaintEngine.systemClip": (), + "QPaintEngine.systemRect": (), + "QPaintEngine.testDirty": ('DirtyFlags',), + "QPaintEngine.type": (), + "QPaintEngine.updateState": ('PySide2.QtGui.QPaintEngineState',), + + # class PySide2.QtGui.QPaintEngineState: + "QPaintEngineState.__init__": (), + "QPaintEngineState.backgroundBrush": (), + "QPaintEngineState.backgroundMode": (), + "QPaintEngineState.brush": (), + "QPaintEngineState.brushNeedsResolving": (), + "QPaintEngineState.brushOrigin": (), + "QPaintEngineState.clipOperation": (), + "QPaintEngineState.clipPath": (), + "QPaintEngineState.clipRegion": (), + "QPaintEngineState.compositionMode": (), + "QPaintEngineState.font": (), + "QPaintEngineState.isClipEnabled": (), + "QPaintEngineState.matrix": (), + "QPaintEngineState.opacity": (), + "QPaintEngineState.painter": (), + "QPaintEngineState.pen": (), + "QPaintEngineState.penNeedsResolving": (), + "QPaintEngineState.renderHints": (), + "QPaintEngineState.state": (), + "QPaintEngineState.transform": (), + + # class PySide2.QtGui.QPaintEvent: + "QPaintEvent.__init__": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QPaintEvent.rect": (), + "QPaintEvent.region": (), + + # class PySide2.QtGui.QPainter: + "QPainter.__init__": [(), ('PySide2.QtGui.QPaintDevice',)], + "QPainter.background": (), + "QPainter.backgroundMode": (), + "QPainter.begin": ('PySide2.QtGui.QPaintDevice',), + "QPainter.beginNativePainting": (), + "QPainter.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str'), ('PySide2.QtCore.QRectF', 'int', 'str'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str')], + "QPainter.brush": (), + "QPainter.brushOrigin": (), + "QPainter.clipBoundingRect": (), + "QPainter.clipPath": (), + "QPainter.clipRegion": (), + "QPainter.combinedMatrix": (), + "QPainter.combinedTransform": (), + "QPainter.compositionMode": (), + "QPainter.device": (), + "QPainter.deviceMatrix": (), + "QPainter.deviceTransform": (), + "QPainter.drawArc": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawChord": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawConvexPolygon": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawEllipse": [('PySide2.QtCore.QPoint', 'int', 'int'), ('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawImage": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'ImageConversionFlags'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'ImageConversionFlags'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), ('int', 'int', 'PySide2.QtGui.QImage', 'int', 'int', 'int', 'int', 'ImageConversionFlags')], + "QPainter.drawLine": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int')], + "QPainter.drawLines": ('list',), + "QPainter.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPainter.drawPicture": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPicture'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPicture'), ('int', 'int', 'PySide2.QtGui.QPicture')], + "QPainter.drawPie": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmap": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmapFragments": ('PySide2.QtGui.QPainter.PixmapFragment', 'int', 'PySide2.QtGui.QPixmap', 'PixmapFragmentHints'), + "QPainter.drawPoint": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.drawPoints": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawPolygon": [('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.FillRule'), ('list', 'PySide2.QtCore.Qt.FillRule')], + "QPainter.drawPolyline": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawRects": ('list',), + "QPainter.drawRoundRect": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawRoundedRect": [('PySide2.QtCore.QRect', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('int', 'int', 'int', 'int', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainter.drawStaticText": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QStaticText'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QStaticText'), ('int', 'int', 'PySide2.QtGui.QStaticText')], + "QPainter.drawText": [('PySide2.QtCore.QPoint', 'str'), ('PySide2.QtCore.QPointF', 'str'), ('PySide2.QtCore.QRect', 'int', 'str', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'int', 'str', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str', 'PySide2.QtCore.QRect'), ('int', 'int', 'str')], + "QPainter.drawTextItem": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QTextItem'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), ('int', 'int', 'PySide2.QtGui.QTextItem')], + "QPainter.drawTiledPixmap": [('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int')], + "QPainter.end": (), + "QPainter.endNativePainting": (), + "QPainter.eraseRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.fillPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QBrush'), + "QPainter.fillRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.BrushStyle'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.GlobalColor'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QBrush'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QColor')], + "QPainter.font": (), + "QPainter.fontInfo": (), + "QPainter.fontMetrics": (), + "QPainter.hasClipping": (), + "QPainter.initFrom": ('PySide2.QtGui.QPaintDevice',), + "QPainter.isActive": (), + "QPainter.layoutDirection": (), + "QPainter.matrix": (), + "QPainter.matrixEnabled": (), + "QPainter.opacity": (), + "QPainter.paintEngine": (), + "QPainter.pen": (), + "QPainter.redirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.renderHints": (), + "QPainter.resetMatrix": (), + "QPainter.resetTransform": (), + "QPainter.restore": (), + "QPainter.restoreRedirected": ('PySide2.QtGui.QPaintDevice',), + "QPainter.rotate": ('float',), + "QPainter.save": (), + "QPainter.scale": ('float', 'float'), + "QPainter.setBackground": ('PySide2.QtGui.QBrush',), + "QPainter.setBackgroundMode": ('PySide2.QtCore.Qt.BGMode',), + "QPainter.setBrush": [('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtGui.QBrush',)], + "QPainter.setBrushOrigin": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.setClipPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ClipOperation'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ClipOperation'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ClipOperation')], + "QPainter.setClipRegion": ('PySide2.QtGui.QRegion', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipping": ('bool',), + "QPainter.setCompositionMode": ('PySide2.QtGui.QPainter.CompositionMode',), + "QPainter.setFont": ('PySide2.QtGui.QFont',), + "QPainter.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QPainter.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setMatrixEnabled": ('bool',), + "QPainter.setOpacity": ('float',), + "QPainter.setPen": [('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPainter.setRedirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QPainter.setRenderHints": ('RenderHints', 'bool'), + "QPainter.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.setViewTransformEnabled": ('bool',), + "QPainter.setViewport": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWindow": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWorldMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setWorldMatrixEnabled": ('bool',), + "QPainter.setWorldTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.shear": ('float', 'float'), + "QPainter.strokePath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen'), + "QPainter.testRenderHint": ('PySide2.QtGui.QPainter.RenderHint',), + "QPainter.transform": (), + "QPainter.translate": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainter.viewTransformEnabled": (), + "QPainter.viewport": (), + "QPainter.window": (), + "QPainter.worldMatrix": (), + "QPainter.worldMatrixEnabled": (), + "QPainter.worldTransform": (), + + # class PySide2.QtGui.QPainterPath: + "QPainterPath.__init__": [(), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.__copy__": (), + "QPainterPath.addEllipse": [('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.addPolygon": ('PySide2.QtGui.QPolygonF',), + "QPainterPath.addRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addRegion": ('PySide2.QtGui.QRegion',), + "QPainterPath.addRoundRect": [('PySide2.QtCore.QRectF', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QPainterPath.addRoundedRect": [('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('float', 'float', 'float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainterPath.addText": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QFont', 'str'), ('float', 'float', 'PySide2.QtGui.QFont', 'str')], + "QPainterPath.angleAtPercent": ('float',), + "QPainterPath.arcMoveTo": [('PySide2.QtCore.QRectF', 'float'), ('float', 'float', 'float', 'float', 'float')], + "QPainterPath.arcTo": [('PySide2.QtCore.QRectF', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.boundingRect": (), + "QPainterPath.closeSubpath": (), + "QPainterPath.connectPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.controlPointRect": (), + "QPainterPath.cubicTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.currentPosition": (), + "QPainterPath.elementAt": ('int',), + "QPainterPath.elementCount": (), + "QPainterPath.fillRule": (), + "QPainterPath.intersected": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.intersects": [('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.isEmpty": (), + "QPainterPath.length": (), + "QPainterPath.lineTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.percentAtLength": ('float',), + "QPainterPath.pointAtPercent": ('float',), + "QPainterPath.quadTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QPainterPath.setElementPositionAt": ('int', 'float', 'float'), + "QPainterPath.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QPainterPath.simplified": (), + "QPainterPath.slopeAtPercent": ('float',), + "QPainterPath.subtracted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.subtractedInverted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.swap": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.toFillPolygon": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toFillPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toReversed": (), + "QPainterPath.toSubpathPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.united": ('PySide2.QtGui.QPainterPath',), + + # class PySide2.QtGui.QPainterPathStroker: + "QPainterPathStroker.__init__": [(), ('PySide2.QtGui.QPen',)], + "QPainterPathStroker.capStyle": (), + "QPainterPathStroker.createStroke": ('PySide2.QtGui.QPainterPath',), + "QPainterPathStroker.curveThreshold": (), + "QPainterPathStroker.dashOffset": (), + "QPainterPathStroker.dashPattern": (), + "QPainterPathStroker.joinStyle": (), + "QPainterPathStroker.miterLimit": (), + "QPainterPathStroker.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPainterPathStroker.setCurveThreshold": ('float',), + "QPainterPathStroker.setDashOffset": ('float',), + "QPainterPathStroker.setDashPattern": [('PySide2.QtCore.Qt.PenStyle',), ('list',)], + "QPainterPathStroker.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPainterPathStroker.setMiterLimit": ('float',), + "QPainterPathStroker.setWidth": ('float',), + "QPainterPathStroker.width": (), + + # class PySide2.QtGui.QPalette: + "QPalette.__init__": [(), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette',)], + "QPalette.__copy__": (), + "QPalette.alternateBase": (), + "QPalette.background": (), + "QPalette.base": (), + "QPalette.brightText": (), + "QPalette.brush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.button": (), + "QPalette.buttonText": (), + "QPalette.cacheKey": (), + "QPalette.color": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.currentColorGroup": (), + "QPalette.dark": (), + "QPalette.foreground": (), + "QPalette.highlight": (), + "QPalette.highlightedText": (), + "QPalette.isBrushSet": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), + "QPalette.isCopyOf": ('PySide2.QtGui.QPalette',), + "QPalette.isEqual": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorGroup'), + "QPalette.light": (), + "QPalette.link": (), + "QPalette.linkVisited": (), + "QPalette.mid": (), + "QPalette.midlight": (), + "QPalette.resolve": [(), ('PySide2.QtGui.QPalette',), ('int',)], + "QPalette.setBrush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush')], + "QPalette.setColor": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor')], + "QPalette.setColorGroup": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), + "QPalette.setCurrentColorGroup": ('PySide2.QtGui.QPalette.ColorGroup',), + "QPalette.shadow": (), + "QPalette.swap": ('PySide2.QtGui.QPalette',), + "QPalette.text": (), + "QPalette.toolTipBase": (), + "QPalette.toolTipText": (), + "QPalette.window": (), + "QPalette.windowText": (), + + # class PySide2.QtGui.QPdfWriter: + "QPdfWriter.__init__": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPdfWriter.creator": (), + "QPdfWriter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPdfWriter.newPage": (), + "QPdfWriter.paintEngine": (), + "QPdfWriter.resolution": (), + "QPdfWriter.setCreator": ('str',), + "QPdfWriter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPdfWriter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPdfWriter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPdfWriter.setResolution": ('int',), + "QPdfWriter.setTitle": ('str',), + "QPdfWriter.title": (), + + # class PySide2.QtGui.QPen: + "QPen.__init__": [(), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QBrush', 'float', 'PySide2.QtCore.Qt.PenStyle', 'PySide2.QtCore.Qt.PenCapStyle', 'PySide2.QtCore.Qt.PenJoinStyle'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPen.__copy__": (), + "QPen.brush": (), + "QPen.capStyle": (), + "QPen.color": (), + "QPen.dashOffset": (), + "QPen.dashPattern": (), + "QPen.isCosmetic": (), + "QPen.isSolid": (), + "QPen.joinStyle": (), + "QPen.miterLimit": (), + "QPen.setBrush": ('PySide2.QtGui.QBrush',), + "QPen.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPen.setColor": ('PySide2.QtGui.QColor',), + "QPen.setCosmetic": ('bool',), + "QPen.setDashOffset": ('float',), + "QPen.setDashPattern": ('list',), + "QPen.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPen.setMiterLimit": ('float',), + "QPen.setStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QPen.setWidth": ('int',), + "QPen.setWidthF": ('float',), + "QPen.style": (), + "QPen.swap": ('PySide2.QtGui.QPen',), + "QPen.width": (), + "QPen.widthF": (), + + # class PySide2.QtGui.QPicture: + "QPicture.__init__": [('PySide2.QtGui.QPicture',), ('int',)], + "QPicture.__copy__": (), + "QPicture.boundingRect": (), + "QPicture.data": (), + "QPicture.devType": (), + "QPicture.inputFormatList": (), + "QPicture.inputFormats": (), + "QPicture.isNull": (), + "QPicture.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPicture.outputFormatList": (), + "QPicture.outputFormats": (), + "QPicture.paintEngine": (), + "QPicture.pictureFormat": ('str',), + "QPicture.play": ('PySide2.QtGui.QPainter',), + "QPicture.save": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.setBoundingRect": ('PySide2.QtCore.QRect',), + "QPicture.setData": ('str', 'int'), + "QPicture.size": (), + "QPicture.swap": ('PySide2.QtGui.QPicture',), + + # class PySide2.QtGui.QPictureIO: + "QPictureIO.__init__": [(), ('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPictureIO.description": (), + "QPictureIO.fileName": (), + "QPictureIO.format": (), + "QPictureIO.gamma": (), + "QPictureIO.inputFormats": (), + "QPictureIO.ioDevice": (), + "QPictureIO.outputFormats": (), + "QPictureIO.parameters": (), + "QPictureIO.picture": (), + "QPictureIO.pictureFormat": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPictureIO.quality": (), + "QPictureIO.read": (), + "QPictureIO.setDescription": ('str',), + "QPictureIO.setFileName": ('str',), + "QPictureIO.setFormat": ('str',), + "QPictureIO.setGamma": ('float',), + "QPictureIO.setIODevice": ('PySide2.QtCore.QIODevice',), + "QPictureIO.setParameters": ('str',), + "QPictureIO.setPicture": ('PySide2.QtGui.QPicture',), + "QPictureIO.setQuality": ('int',), + "QPictureIO.setStatus": ('int',), + "QPictureIO.status": (), + "QPictureIO.write": (), + + # class PySide2.QtGui.QPixelFormat: + "QPixelFormat.__init__": [(), ('PySide2.QtGui.QPixelFormat',), ('PySide2.QtGui.QPixelFormat.ColorModel', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'PySide2.QtGui.QPixelFormat.AlphaUsage', 'PySide2.QtGui.QPixelFormat.AlphaPosition', 'PySide2.QtGui.QPixelFormat.AlphaPremultiplied', 'PySide2.QtGui.QPixelFormat.TypeInterpretation', 'PySide2.QtGui.QPixelFormat.ByteOrder', 'Union[str, int]')], + "QPixelFormat.__copy__": (), + "QPixelFormat.alphaPosition": (), + "QPixelFormat.alphaSize": (), + "QPixelFormat.alphaUsage": (), + "QPixelFormat.bitsPerPixel": (), + "QPixelFormat.blackSize": (), + "QPixelFormat.blueSize": (), + "QPixelFormat.brightnessSize": (), + "QPixelFormat.byteOrder": (), + "QPixelFormat.channelCount": (), + "QPixelFormat.colorModel": (), + "QPixelFormat.cyanSize": (), + "QPixelFormat.greenSize": (), + "QPixelFormat.hueSize": (), + "QPixelFormat.lightnessSize": (), + "QPixelFormat.magentaSize": (), + "QPixelFormat.premultiplied": (), + "QPixelFormat.redSize": (), + "QPixelFormat.saturationSize": (), + "QPixelFormat.subEnum": (), + "QPixelFormat.typeInterpretation": (), + "QPixelFormat.yellowSize": (), + "QPixelFormat.yuvLayout": (), + + # class PySide2.QtGui.QPixmap: + "QPixmap.__init__": [(), ('List[str]',), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str', 'ImageConversionFlags')], + "QPixmap.__copy__": (), + "QPixmap.cacheKey": (), + "QPixmap.convertFromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPixmap.createHeuristicMask": ('bool',), + "QPixmap.createMaskFromColor": ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.MaskMode'), + "QPixmap.defaultDepth": (), + "QPixmap.depth": (), + "QPixmap.devType": (), + "QPixmap.devicePixelRatio": (), + "QPixmap.fill": [('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QPaintDevice', 'int', 'int')], + "QPixmap.fromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.fromImageInPlace": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.fromImageReader": ('PySide2.QtGui.QImageReader', 'ImageConversionFlags'), + "QPixmap.grabWidget": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QObject', 'int', 'int', 'int', 'int')], + "QPixmap.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QPixmap.hasAlpha": (), + "QPixmap.hasAlphaChannel": (), + "QPixmap.height": (), + "QPixmap.isNull": (), + "QPixmap.isQBitmap": (), + "QPixmap.load": ('str', 'str', 'ImageConversionFlags'), + "QPixmap.loadFromData": [('PySide2.QtCore.QByteArray', 'str', 'ImageConversionFlags'), ('Union[str, int]', 'int', 'str', 'ImageConversionFlags')], + "QPixmap.mask": (), + "QPixmap.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPixmap.paintEngine": (), + "QPixmap.rect": (), + "QPixmap.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QPixmap.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scroll": [('int', 'int', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion'), ('int', 'int', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion')], + "QPixmap.setDevicePixelRatio": ('float',), + "QPixmap.setMask": ('PySide2.QtGui.QBitmap',), + "QPixmap.size": (), + "QPixmap.swap": ('PySide2.QtGui.QPixmap',), + "QPixmap.toImage": (), + "QPixmap.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QPixmap.width": (), + + # class PySide2.QtGui.QPixmapCache: + "QPixmapCache.__init__": (), + "QPixmapCache.cacheLimit": (), + "QPixmapCache.clear": (), + "QPixmapCache.find": [('PySide2.QtGui.QPixmapCache.Key',), ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), ('str',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.insert": [('PySide2.QtGui.QPixmap',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.remove": [('PySide2.QtGui.QPixmapCache.Key',), ('str',)], + "QPixmapCache.replace": ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), + "QPixmapCache.setCacheLimit": ('int',), + + # class PySide2.QtGui.QPolygon: + "QPolygon.__init__": [(), ('PySide2.QtCore.QRect', 'bool'), ('PySide2.QtGui.QPolygon',), ('int',), ('list',)], + "QPolygon.__copy__": (), + "QPolygon.__reduce__": (), + "QPolygon.append": [('PySide2.QtCore.QPoint',), ('list',)], + "QPolygon.at": ('int',), + "QPolygon.boundingRect": (), + "QPolygon.capacity": (), + "QPolygon.clear": (), + "QPolygon.constData": (), + "QPolygon.constFirst": (), + "QPolygon.constLast": (), + "QPolygon.contains": ('PySide2.QtCore.QPoint',), + "QPolygon.containsPoint": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.Qt.FillRule'), + "QPolygon.count": [(), ('PySide2.QtCore.QPoint',)], + "QPolygon.data": (), + "QPolygon.empty": (), + "QPolygon.endsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.fill": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.first": (), + "QPolygon.fromList": ('list',), + "QPolygon.front": (), + "QPolygon.indexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.insert": [('int', 'PySide2.QtCore.QPoint'), ('int', 'int', 'PySide2.QtCore.QPoint')], + "QPolygon.intersected": ('PySide2.QtGui.QPolygon',), + "QPolygon.isEmpty": (), + "QPolygon.isSharedWith": ('list',), + "QPolygon.last": (), + "QPolygon.lastIndexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.length": (), + "QPolygon.mid": ('int', 'int'), + "QPolygon.move": ('int', 'int'), + "QPolygon.pop_back": (), + "QPolygon.pop_front": (), + "QPolygon.prepend": ('PySide2.QtCore.QPoint',), + "QPolygon.push_back": ('PySide2.QtCore.QPoint',), + "QPolygon.push_front": ('PySide2.QtCore.QPoint',), + "QPolygon.remove": [('int',), ('int', 'int')], + "QPolygon.removeAll": ('PySide2.QtCore.QPoint',), + "QPolygon.removeAt": ('int',), + "QPolygon.removeFirst": (), + "QPolygon.removeLast": (), + "QPolygon.removeOne": ('PySide2.QtCore.QPoint',), + "QPolygon.replace": ('int', 'PySide2.QtCore.QPoint'), + "QPolygon.reserve": ('int',), + "QPolygon.resize": ('int',), + "QPolygon.setSharable": ('bool',), + "QPolygon.size": (), + "QPolygon.squeeze": (), + "QPolygon.startsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.subtracted": ('PySide2.QtGui.QPolygon',), + "QPolygon.swap": ('PySide2.QtGui.QPolygon',), + "QPolygon.takeAt": ('int',), + "QPolygon.takeFirst": (), + "QPolygon.takeLast": (), + "QPolygon.toList": (), + "QPolygon.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.united": ('PySide2.QtGui.QPolygon',), + "QPolygon.value": [('int',), ('int', 'PySide2.QtCore.QPoint')], + + # class PySide2.QtGui.QPolygonF: + "QPolygonF.__init__": [(), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('int',), ('list',)], + "QPolygonF.__copy__": (), + "QPolygonF.append": [('PySide2.QtCore.QPointF',), ('list',)], + "QPolygonF.at": ('int',), + "QPolygonF.boundingRect": (), + "QPolygonF.capacity": (), + "QPolygonF.clear": (), + "QPolygonF.constData": (), + "QPolygonF.constFirst": (), + "QPolygonF.constLast": (), + "QPolygonF.contains": ('PySide2.QtCore.QPointF',), + "QPolygonF.containsPoint": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.FillRule'), + "QPolygonF.count": [(), ('PySide2.QtCore.QPointF',)], + "QPolygonF.data": (), + "QPolygonF.empty": (), + "QPolygonF.endsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.fill": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.first": (), + "QPolygonF.fromList": ('list',), + "QPolygonF.front": (), + "QPolygonF.indexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.insert": [('int', 'PySide2.QtCore.QPointF'), ('int', 'int', 'PySide2.QtCore.QPointF')], + "QPolygonF.intersected": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.isClosed": (), + "QPolygonF.isEmpty": (), + "QPolygonF.isSharedWith": ('list',), + "QPolygonF.last": (), + "QPolygonF.lastIndexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.length": (), + "QPolygonF.mid": ('int', 'int'), + "QPolygonF.move": ('int', 'int'), + "QPolygonF.pop_back": (), + "QPolygonF.pop_front": (), + "QPolygonF.prepend": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_back": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_front": ('PySide2.QtCore.QPointF',), + "QPolygonF.remove": [('int',), ('int', 'int')], + "QPolygonF.removeAll": ('PySide2.QtCore.QPointF',), + "QPolygonF.removeAt": ('int',), + "QPolygonF.removeFirst": (), + "QPolygonF.removeLast": (), + "QPolygonF.removeOne": ('PySide2.QtCore.QPointF',), + "QPolygonF.replace": ('int', 'PySide2.QtCore.QPointF'), + "QPolygonF.reserve": ('int',), + "QPolygonF.resize": ('int',), + "QPolygonF.setSharable": ('bool',), + "QPolygonF.size": (), + "QPolygonF.squeeze": (), + "QPolygonF.startsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.subtracted": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.swap": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.takeAt": ('int',), + "QPolygonF.takeFirst": (), + "QPolygonF.takeLast": (), + "QPolygonF.toList": (), + "QPolygonF.toPolygon": (), + "QPolygonF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.united": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.value": [('int',), ('int', 'PySide2.QtCore.QPointF')], + + # class PySide2.QtGui.QPyTextObject: + "QPyTextObject.__init__": ('PySide2.QtCore.QObject',), + "QPyTextObject.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QPyTextObject.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QQuaternion: + "QQuaternion.__init__": [(), ('PySide2.QtGui.QVector4D',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QQuaternion.__copy__": (), + "QQuaternion.__reduce__": (), + "QQuaternion.conjugate": (), + "QQuaternion.conjugated": (), + "QQuaternion.dotProduct": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion'), + "QQuaternion.fromAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromAxisAndAngle": [('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QQuaternion.fromDirection": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromEulerAngles": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.fromRotationMatrix": ('PySide2.QtGui.QMatrix3x3',), + "QQuaternion.getAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.inverted": (), + "QQuaternion.isIdentity": (), + "QQuaternion.isNull": (), + "QQuaternion.length": (), + "QQuaternion.lengthSquared": (), + "QQuaternion.nlerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.normalize": (), + "QQuaternion.normalized": (), + "QQuaternion.rotatedVector": ('PySide2.QtGui.QVector3D',), + "QQuaternion.rotationTo": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.scalar": (), + "QQuaternion.setScalar": ('float',), + "QQuaternion.setVector": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.setX": ('float',), + "QQuaternion.setY": ('float',), + "QQuaternion.setZ": ('float',), + "QQuaternion.slerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.toEulerAngles": (), + "QQuaternion.toRotationMatrix": (), + "QQuaternion.toVector4D": (), + "QQuaternion.vector": (), + "QQuaternion.x": (), + "QQuaternion.y": (), + "QQuaternion.z": (), + + # class PySide2.QtGui.QRadialGradient: + "QRadialGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QRadialGradient',), ('float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QRadialGradient.__copy__": (), + "QRadialGradient.center": (), + "QRadialGradient.centerRadius": (), + "QRadialGradient.focalPoint": (), + "QRadialGradient.focalRadius": (), + "QRadialGradient.radius": (), + "QRadialGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setCenterRadius": ('float',), + "QRadialGradient.setFocalPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setFocalRadius": ('float',), + "QRadialGradient.setRadius": ('float',), + + # class PySide2.QtGui.QRasterWindow: + "QRasterWindow.__init__": ('PySide2.QtGui.QWindow',), + "QRasterWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QRasterWindow.redirected": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtGui.QRawFont: + "QRawFont.__init__": [(), ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), ('PySide2.QtGui.QRawFont',), ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference')], + "QRawFont.__copy__": (), + "QRawFont.advancesForGlyphIndexes": [('list',), ('list', 'LayoutFlags')], + "QRawFont.alphaMapForGlyph": ('int', 'PySide2.QtGui.QRawFont.AntialiasingType', 'PySide2.QtGui.QTransform'), + "QRawFont.ascent": (), + "QRawFont.averageCharWidth": (), + "QRawFont.boundingRect": ('int',), + "QRawFont.capHeight": (), + "QRawFont.descent": (), + "QRawFont.familyName": (), + "QRawFont.fontTable": ('str',), + "QRawFont.fromFont": ('PySide2.QtGui.QFont', 'PySide2.QtGui.QFontDatabase.WritingSystem'), + "QRawFont.glyphIndexesForString": ('str',), + "QRawFont.hintingPreference": (), + "QRawFont.isValid": (), + "QRawFont.leading": (), + "QRawFont.lineThickness": (), + "QRawFont.loadFromData": ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.loadFromFile": ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.maxCharWidth": (), + "QRawFont.pathForGlyph": ('int',), + "QRawFont.pixelSize": (), + "QRawFont.setPixelSize": ('float',), + "QRawFont.style": (), + "QRawFont.styleName": (), + "QRawFont.supportedWritingSystems": (), + "QRawFont.supportsCharacter": [('Union[str, int]',), ('int',)], + "QRawFont.swap": ('PySide2.QtGui.QRawFont',), + "QRawFont.underlinePosition": (), + "QRawFont.unitsPerEm": (), + "QRawFont.weight": (), + "QRawFont.xHeight": (), + + # class PySide2.QtGui.QRegExpValidator: + "QRegExpValidator.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRegExp', 'PySide2.QtCore.QObject')], + "QRegExpValidator.regExp": (), + "QRegExpValidator.setRegExp": ('PySide2.QtCore.QRegExp',), + "QRegExpValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QRegion: + "QRegion.__init__": [(), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion.RegionType'), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion.RegionType')], + "QRegion.__copy__": (), + "QRegion.begin": (), + "QRegion.boundingRect": (), + "QRegion.cbegin": (), + "QRegion.cend": (), + "QRegion.contains": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',)], + "QRegion.end": (), + "QRegion.intersected": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.intersects": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.isEmpty": (), + "QRegion.isNull": (), + "QRegion.rectCount": (), + "QRegion.rects": (), + "QRegion.setRects": ('PySide2.QtCore.QRect', 'int'), + "QRegion.subtracted": ('PySide2.QtGui.QRegion',), + "QRegion.swap": ('PySide2.QtGui.QRegion',), + "QRegion.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.united": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.xored": ('PySide2.QtGui.QRegion',), + + # class PySide2.QtGui.QResizeEvent: + "QResizeEvent.__init__": ('PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QResizeEvent.oldSize": (), + "QResizeEvent.size": (), + + # class PySide2.QtGui.QScreen: + "QScreen.angleBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation'), + "QScreen.availableGeometry": (), + "QScreen.availableSize": (), + "QScreen.availableVirtualGeometry": (), + "QScreen.availableVirtualSize": (), + "QScreen.depth": (), + "QScreen.devicePixelRatio": (), + "QScreen.geometry": (), + "QScreen.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QScreen.isLandscape": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.isPortrait": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.logicalDotsPerInch": (), + "QScreen.logicalDotsPerInchX": (), + "QScreen.logicalDotsPerInchY": (), + "QScreen.manufacturer": (), + "QScreen.mapBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.model": (), + "QScreen.name": (), + "QScreen.nativeOrientation": (), + "QScreen.orientation": (), + "QScreen.orientationUpdateMask": (), + "QScreen.physicalDotsPerInch": (), + "QScreen.physicalDotsPerInchX": (), + "QScreen.physicalDotsPerInchY": (), + "QScreen.physicalSize": (), + "QScreen.primaryOrientation": (), + "QScreen.refreshRate": (), + "QScreen.serialNumber": (), + "QScreen.setOrientationUpdateMask": ('ScreenOrientations',), + "QScreen.size": (), + "QScreen.transformBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.virtualGeometry": (), + "QScreen.virtualSiblings": (), + "QScreen.virtualSize": (), + + # class PySide2.QtGui.QSessionManager: + "QSessionManager.allowsErrorInteraction": (), + "QSessionManager.allowsInteraction": (), + "QSessionManager.cancel": (), + "QSessionManager.discardCommand": (), + "QSessionManager.isPhase2": (), + "QSessionManager.release": (), + "QSessionManager.requestPhase2": (), + "QSessionManager.restartCommand": (), + "QSessionManager.restartHint": (), + "QSessionManager.sessionId": (), + "QSessionManager.sessionKey": (), + "QSessionManager.setDiscardCommand": ('List[str]',), + "QSessionManager.setManagerProperty": [('str', 'List[str]'), ('str', 'str')], + "QSessionManager.setRestartCommand": ('List[str]',), + "QSessionManager.setRestartHint": ('PySide2.QtGui.QSessionManager.RestartHint',), + + # class PySide2.QtGui.QShortcutEvent: + "QShortcutEvent.__init__": ('PySide2.QtGui.QKeySequence', 'int', 'bool'), + + # class PySide2.QtGui.QShowEvent: + "QShowEvent.__init__": (), + + # class PySide2.QtGui.QStandardItem: + "QStandardItem.__init__": [(), ('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QStandardItem',), ('int', 'int'), ('str',)], + "QStandardItem.accessibleDescription": (), + "QStandardItem.accessibleText": (), + "QStandardItem.appendColumn": ('list',), + "QStandardItem.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItem.appendRows": ('list',), + "QStandardItem.background": (), + "QStandardItem.checkState": (), + "QStandardItem.child": ('int', 'int'), + "QStandardItem.clone": (), + "QStandardItem.column": (), + "QStandardItem.columnCount": (), + "QStandardItem.data": ('int',), + "QStandardItem.emitDataChanged": (), + "QStandardItem.flags": (), + "QStandardItem.font": (), + "QStandardItem.foreground": (), + "QStandardItem.hasChildren": (), + "QStandardItem.icon": (), + "QStandardItem.index": (), + "QStandardItem.insertColumn": ('int', 'list'), + "QStandardItem.insertColumns": ('int', 'int'), + "QStandardItem.insertRow": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItem.insertRows": [('int', 'int'), ('int', 'list')], + "QStandardItem.isAutoTristate": (), + "QStandardItem.isCheckable": (), + "QStandardItem.isDragEnabled": (), + "QStandardItem.isDropEnabled": (), + "QStandardItem.isEditable": (), + "QStandardItem.isEnabled": (), + "QStandardItem.isSelectable": (), + "QStandardItem.isTristate": (), + "QStandardItem.isUserTristate": (), + "QStandardItem.model": (), + "QStandardItem.parent": (), + "QStandardItem.read": ('PySide2.QtCore.QDataStream',), + "QStandardItem.removeColumn": ('int',), + "QStandardItem.removeColumns": ('int', 'int'), + "QStandardItem.removeRow": ('int',), + "QStandardItem.removeRows": ('int', 'int'), + "QStandardItem.row": (), + "QStandardItem.rowCount": (), + "QStandardItem.setAccessibleDescription": ('str',), + "QStandardItem.setAccessibleText": ('str',), + "QStandardItem.setAutoTristate": ('bool',), + "QStandardItem.setBackground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QStandardItem.setCheckable": ('bool',), + "QStandardItem.setChild": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItem.setColumnCount": ('int',), + "QStandardItem.setData": ('Any', 'int'), + "QStandardItem.setDragEnabled": ('bool',), + "QStandardItem.setDropEnabled": ('bool',), + "QStandardItem.setEditable": ('bool',), + "QStandardItem.setEnabled": ('bool',), + "QStandardItem.setFlags": ('ItemFlags',), + "QStandardItem.setFont": ('PySide2.QtGui.QFont',), + "QStandardItem.setForeground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setIcon": ('PySide2.QtGui.QIcon',), + "QStandardItem.setRowCount": ('int',), + "QStandardItem.setSelectable": ('bool',), + "QStandardItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QStandardItem.setStatusTip": ('str',), + "QStandardItem.setText": ('str',), + "QStandardItem.setTextAlignment": ('Alignment',), + "QStandardItem.setToolTip": ('str',), + "QStandardItem.setTristate": ('bool',), + "QStandardItem.setUserTristate": ('bool',), + "QStandardItem.setWhatsThis": ('str',), + "QStandardItem.sizeHint": (), + "QStandardItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItem.statusTip": (), + "QStandardItem.takeChild": ('int', 'int'), + "QStandardItem.takeColumn": ('int',), + "QStandardItem.takeRow": ('int',), + "QStandardItem.text": (), + "QStandardItem.textAlignment": (), + "QStandardItem.toolTip": (), + "QStandardItem.type": (), + "QStandardItem.whatsThis": (), + "QStandardItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QStandardItemModel: + "QStandardItemModel.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QStandardItemModel.appendColumn": ('list',), + "QStandardItemModel.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItemModel.clear": (), + "QStandardItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStandardItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.findItems": ('str', 'MatchFlags', 'int'), + "QStandardItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QStandardItemModel.horizontalHeaderItem": ('int',), + "QStandardItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.indexFromItem": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.insertColumn": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'list')], + "QStandardItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.insertRow": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.invisibleRootItem": (), + "QStandardItemModel.item": ('int', 'int'), + "QStandardItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemPrototype": (), + "QStandardItemModel.mimeData": ('List[int]',), + "QStandardItemModel.mimeTypes": (), + "QStandardItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QStandardItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.setColumnCount": ('int',), + "QStandardItemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QStandardItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QStandardItemModel.setHorizontalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setHorizontalHeaderLabels": ('List[str]',), + "QStandardItemModel.setItem": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QStandardItemModel.setItemPrototype": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.setItemRoleNames": ('dict',), + "QStandardItemModel.setRowCount": ('int',), + "QStandardItemModel.setSortRole": ('int',), + "QStandardItemModel.setVerticalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setVerticalHeaderLabels": ('List[str]',), + "QStandardItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItemModel.sortRole": (), + "QStandardItemModel.supportedDropActions": (), + "QStandardItemModel.takeColumn": ('int',), + "QStandardItemModel.takeHorizontalHeaderItem": ('int',), + "QStandardItemModel.takeItem": ('int', 'int'), + "QStandardItemModel.takeRow": ('int',), + "QStandardItemModel.takeVerticalHeaderItem": ('int',), + "QStandardItemModel.verticalHeaderItem": ('int',), + + # class PySide2.QtGui.QStaticText: + "QStaticText.__init__": [(), ('PySide2.QtGui.QStaticText',), ('str',)], + "QStaticText.__copy__": (), + "QStaticText.performanceHint": (), + "QStaticText.prepare": ('PySide2.QtGui.QTransform', 'PySide2.QtGui.QFont'), + "QStaticText.setPerformanceHint": ('PySide2.QtGui.QStaticText.PerformanceHint',), + "QStaticText.setText": ('str',), + "QStaticText.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QStaticText.setTextOption": ('PySide2.QtGui.QTextOption',), + "QStaticText.setTextWidth": ('float',), + "QStaticText.size": (), + "QStaticText.swap": ('PySide2.QtGui.QStaticText',), + "QStaticText.text": (), + "QStaticText.textFormat": (), + "QStaticText.textOption": (), + "QStaticText.textWidth": (), + + # class PySide2.QtGui.QStatusTipEvent: + "QStatusTipEvent.__init__": ('str',), + "QStatusTipEvent.tip": (), + + # class PySide2.QtGui.QStringListModel: + "QStringListModel.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QStringListModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStringListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QStringListModel.setStringList": ('List[str]',), + "QStringListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStringListModel.stringList": (), + "QStringListModel.supportedDropActions": (), + + # class PySide2.QtGui.QStyleHints: + "QStyleHints.cursorFlashTime": (), + "QStyleHints.fontSmoothingGamma": (), + "QStyleHints.keyboardAutoRepeatRate": (), + "QStyleHints.keyboardInputInterval": (), + "QStyleHints.mouseDoubleClickInterval": (), + "QStyleHints.mousePressAndHoldInterval": (), + "QStyleHints.passwordMaskCharacter": (), + "QStyleHints.passwordMaskDelay": (), + "QStyleHints.setCursorFlashTime": ('int',), + "QStyleHints.setFocusOnTouchRelease": (), + "QStyleHints.setKeyboardInputInterval": ('int',), + "QStyleHints.setMouseDoubleClickInterval": ('int',), + "QStyleHints.setMousePressAndHoldInterval": ('int',), + "QStyleHints.setStartDragDistance": ('int',), + "QStyleHints.setStartDragTime": ('int',), + "QStyleHints.setTabFocusBehavior": ('PySide2.QtCore.Qt.TabFocusBehavior',), + "QStyleHints.setUseHoverEffects": ('bool',), + "QStyleHints.setWheelScrollLines": ('int',), + "QStyleHints.showIsFullScreen": (), + "QStyleHints.showIsMaximized": (), + "QStyleHints.singleClickActivation": (), + "QStyleHints.startDragDistance": (), + "QStyleHints.startDragTime": (), + "QStyleHints.startDragVelocity": (), + "QStyleHints.tabFocusBehavior": (), + "QStyleHints.useHoverEffects": (), + "QStyleHints.useRtlExtensions": (), + "QStyleHints.wheelScrollLines": (), + + # class PySide2.QtGui.QSurface: + "QSurface.__init__": ('PySide2.QtGui.QSurface.SurfaceClass',), + "QSurface.format": (), + "QSurface.size": (), + "QSurface.supportsOpenGL": (), + "QSurface.surfaceClass": (), + "QSurface.surfaceHandle": (), + "QSurface.surfaceType": (), + + # class PySide2.QtGui.QSurfaceFormat: + "QSurfaceFormat.__init__": [(), ('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat',)], + "QSurfaceFormat.__copy__": (), + "QSurfaceFormat.alphaBufferSize": (), + "QSurfaceFormat.blueBufferSize": (), + "QSurfaceFormat.defaultFormat": (), + "QSurfaceFormat.depthBufferSize": (), + "QSurfaceFormat.greenBufferSize": (), + "QSurfaceFormat.hasAlpha": (), + "QSurfaceFormat.majorVersion": (), + "QSurfaceFormat.minorVersion": (), + "QSurfaceFormat.options": (), + "QSurfaceFormat.profile": (), + "QSurfaceFormat.redBufferSize": (), + "QSurfaceFormat.renderableType": (), + "QSurfaceFormat.samples": (), + "QSurfaceFormat.setAlphaBufferSize": ('int',), + "QSurfaceFormat.setBlueBufferSize": ('int',), + "QSurfaceFormat.setDefaultFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QSurfaceFormat.setDepthBufferSize": ('int',), + "QSurfaceFormat.setGreenBufferSize": ('int',), + "QSurfaceFormat.setMajorVersion": ('int',), + "QSurfaceFormat.setMinorVersion": ('int',), + "QSurfaceFormat.setOption": [('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat.FormatOption', 'bool')], + "QSurfaceFormat.setOptions": ('FormatOptions',), + "QSurfaceFormat.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QSurfaceFormat.setRedBufferSize": ('int',), + "QSurfaceFormat.setRenderableType": ('PySide2.QtGui.QSurfaceFormat.RenderableType',), + "QSurfaceFormat.setSamples": ('int',), + "QSurfaceFormat.setStencilBufferSize": ('int',), + "QSurfaceFormat.setStereo": ('bool',), + "QSurfaceFormat.setSwapBehavior": ('PySide2.QtGui.QSurfaceFormat.SwapBehavior',), + "QSurfaceFormat.setSwapInterval": ('int',), + "QSurfaceFormat.setVersion": ('int', 'int'), + "QSurfaceFormat.stencilBufferSize": (), + "QSurfaceFormat.stereo": (), + "QSurfaceFormat.swapBehavior": (), + "QSurfaceFormat.swapInterval": (), + "QSurfaceFormat.testOption": [('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat.FormatOption',)], + "QSurfaceFormat.version": (), + + # class PySide2.QtGui.QSyntaxHighlighter: + "QSyntaxHighlighter.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QTextDocument',)], + "QSyntaxHighlighter.currentBlock": (), + "QSyntaxHighlighter.currentBlockState": (), + "QSyntaxHighlighter.currentBlockUserData": (), + "QSyntaxHighlighter.document": (), + "QSyntaxHighlighter.format": ('int',), + "QSyntaxHighlighter.highlightBlock": ('str',), + "QSyntaxHighlighter.previousBlockState": (), + "QSyntaxHighlighter.rehighlight": (), + "QSyntaxHighlighter.rehighlightBlock": ('PySide2.QtGui.QTextBlock',), + "QSyntaxHighlighter.setCurrentBlockState": ('int',), + "QSyntaxHighlighter.setCurrentBlockUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QSyntaxHighlighter.setDocument": ('PySide2.QtGui.QTextDocument',), + "QSyntaxHighlighter.setFormat": [('int', 'int', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QFont'), ('int', 'int', 'PySide2.QtGui.QTextCharFormat')], + + # class PySide2.QtGui.QTabletEvent: + "QTabletEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'KeyboardModifiers', 'int'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'KeyboardModifiers', 'int', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons')], + "QTabletEvent.button": (), + "QTabletEvent.buttons": (), + "QTabletEvent.device": (), + "QTabletEvent.globalPos": (), + "QTabletEvent.globalPosF": (), + "QTabletEvent.globalX": (), + "QTabletEvent.global""Y": (), + "QTabletEvent.hiResGlobalX": (), + "QTabletEvent.hiResGlobal""Y": (), + "QTabletEvent.pointerType": (), + "QTabletEvent.pos": (), + "QTabletEvent.posF": (), + "QTabletEvent.pressure": (), + "QTabletEvent.rotation": (), + "QTabletEvent.tangentialPressure": (), + "QTabletEvent.uniqueId": (), + "QTabletEvent.x": (), + "QTabletEvent.xTilt": (), + "QTabletEvent.y": (), + "QTabletEvent.yTilt": (), + "QTabletEvent.z": (), + + # class PySide2.QtGui.QTextBlock: + "QTextBlock.__init__": [(), ('PySide2.QtGui.QTextBlock',)], + "QTextBlock.__copy__": (), + "QTextBlock.begin": (), + "QTextBlock.blockFormat": (), + "QTextBlock.blockFormatIndex": (), + "QTextBlock.blockNumber": (), + "QTextBlock.charFormat": (), + "QTextBlock.charFormatIndex": (), + "QTextBlock.clearLayout": (), + "QTextBlock.contains": ('int',), + "QTextBlock.document": (), + "QTextBlock.end": (), + "QTextBlock.firstLineNumber": (), + "QTextBlock.fragmentIndex": (), + "QTextBlock.isValid": (), + "QTextBlock.isVisible": (), + "QTextBlock.layout": (), + "QTextBlock.length": (), + "QTextBlock.lineCount": (), + "QTextBlock.position": (), + "QTextBlock.previous": (), + "QTextBlock.revision": (), + "QTextBlock.setLineCount": ('int',), + "QTextBlock.setRevision": ('int',), + "QTextBlock.setUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QTextBlock.setUserState": ('int',), + "QTextBlock.setVisible": ('bool',), + "QTextBlock.text": (), + "QTextBlock.textDirection": (), + "QTextBlock.textFormats": (), + "QTextBlock.textList": (), + "QTextBlock.userData": (), + "QTextBlock.userState": (), + + # class PySide2.QtGui.QTextBlockFormat: + "QTextBlockFormat.__init__": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextBlockFormat.__copy__": (), + "QTextBlockFormat.alignment": (), + "QTextBlockFormat.bottomMargin": (), + "QTextBlockFormat.indent": (), + "QTextBlockFormat.isValid": (), + "QTextBlockFormat.leftMargin": (), + "QTextBlockFormat.lineHeight": [(), ('float', 'float')], + "QTextBlockFormat.lineHeightType": (), + "QTextBlockFormat.nonBreakableLines": (), + "QTextBlockFormat.pageBreakPolicy": (), + "QTextBlockFormat.rightMargin": (), + "QTextBlockFormat.setAlignment": ('Alignment',), + "QTextBlockFormat.setBottomMargin": ('float',), + "QTextBlockFormat.setIndent": ('int',), + "QTextBlockFormat.setLeftMargin": ('float',), + "QTextBlockFormat.setLineHeight": ('float', 'int'), + "QTextBlockFormat.setNonBreakableLines": ('bool',), + "QTextBlockFormat.setPageBreakPolicy": ('PageBreakFlags',), + "QTextBlockFormat.setRightMargin": ('float',), + "QTextBlockFormat.setTabPositions": ('list',), + "QTextBlockFormat.setTextIndent": ('float',), + "QTextBlockFormat.setTopMargin": ('float',), + "QTextBlockFormat.tabPositions": (), + "QTextBlockFormat.textIndent": (), + "QTextBlockFormat.topMargin": (), + + # class PySide2.QtGui.QTextBlockGroup: + "QTextBlockGroup.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextBlockGroup.blockFormatChanged": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockInserted": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockList": (), + "QTextBlockGroup.blockRemoved": ('PySide2.QtGui.QTextBlock',), + + # class PySide2.QtGui.QTextBlockUserData: + "QTextBlockUserData.__init__": (), + + # class PySide2.QtGui.QTextCharFormat: + "QTextCharFormat.__init__": [(), ('PySide2.QtGui.QTextCharFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextCharFormat.__copy__": (), + "QTextCharFormat.anchorHref": (), + "QTextCharFormat.anchorName": (), + "QTextCharFormat.anchorNames": (), + "QTextCharFormat.font": (), + "QTextCharFormat.fontCapitalization": (), + "QTextCharFormat.fontFamily": (), + "QTextCharFormat.fontFixedPitch": (), + "QTextCharFormat.fontHintingPreference": (), + "QTextCharFormat.fontItalic": (), + "QTextCharFormat.fontKerning": (), + "QTextCharFormat.fontLetterSpacing": (), + "QTextCharFormat.fontLetterSpacingType": (), + "QTextCharFormat.fontOverline": (), + "QTextCharFormat.fontPointSize": (), + "QTextCharFormat.fontStretch": (), + "QTextCharFormat.fontStrikeOut": (), + "QTextCharFormat.fontStyleHint": (), + "QTextCharFormat.fontStyleStrategy": (), + "QTextCharFormat.fontUnderline": (), + "QTextCharFormat.fontWeight": (), + "QTextCharFormat.fontWordSpacing": (), + "QTextCharFormat.isAnchor": (), + "QTextCharFormat.isValid": (), + "QTextCharFormat.setAnchor": ('bool',), + "QTextCharFormat.setAnchorHref": ('str',), + "QTextCharFormat.setAnchorName": ('str',), + "QTextCharFormat.setAnchorNames": ('List[str]',), + "QTextCharFormat.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior')], + "QTextCharFormat.setFontCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QTextCharFormat.setFontFamily": ('str',), + "QTextCharFormat.setFontFixedPitch": ('bool',), + "QTextCharFormat.setFontHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QTextCharFormat.setFontItalic": ('bool',), + "QTextCharFormat.setFontKerning": ('bool',), + "QTextCharFormat.setFontLetterSpacing": ('float',), + "QTextCharFormat.setFontLetterSpacingType": ('PySide2.QtGui.QFont.SpacingType',), + "QTextCharFormat.setFontOverline": ('bool',), + "QTextCharFormat.setFontPointSize": ('float',), + "QTextCharFormat.setFontStretch": ('int',), + "QTextCharFormat.setFontStrikeOut": ('bool',), + "QTextCharFormat.setFontStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QTextCharFormat.setFontStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QTextCharFormat.setFontUnderline": ('bool',), + "QTextCharFormat.setFontWeight": ('int',), + "QTextCharFormat.setFontWordSpacing": ('float',), + "QTextCharFormat.setTableCellColumnSpan": ('int',), + "QTextCharFormat.setTableCellRowSpan": ('int',), + "QTextCharFormat.setTextOutline": ('PySide2.QtGui.QPen',), + "QTextCharFormat.setToolTip": ('str',), + "QTextCharFormat.setUnderlineColor": ('PySide2.QtGui.QColor',), + "QTextCharFormat.setUnderlineStyle": ('PySide2.QtGui.QTextCharFormat.UnderlineStyle',), + "QTextCharFormat.setVerticalAlignment": ('PySide2.QtGui.QTextCharFormat.VerticalAlignment',), + "QTextCharFormat.tableCellColumnSpan": (), + "QTextCharFormat.tableCellRowSpan": (), + "QTextCharFormat.textOutline": (), + "QTextCharFormat.toolTip": (), + "QTextCharFormat.underlineColor": (), + "QTextCharFormat.underlineStyle": (), + "QTextCharFormat.verticalAlignment": (), + + # class PySide2.QtGui.QTextCursor: + "QTextCursor.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextFrame',)], + "QTextCursor.__copy__": (), + "QTextCursor.anchor": (), + "QTextCursor.atBlockEnd": (), + "QTextCursor.atBlockStart": (), + "QTextCursor.atEnd": (), + "QTextCursor.atStart": (), + "QTextCursor.beginEditBlock": (), + "QTextCursor.block": (), + "QTextCursor.blockCharFormat": (), + "QTextCursor.blockFormat": (), + "QTextCursor.blockNumber": (), + "QTextCursor.charFormat": (), + "QTextCursor.clearSelection": (), + "QTextCursor.columnNumber": (), + "QTextCursor.createList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.currentFrame": (), + "QTextCursor.currentList": (), + "QTextCursor.currentTable": (), + "QTextCursor.deleteChar": (), + "QTextCursor.deletePreviousChar": (), + "QTextCursor.document": (), + "QTextCursor.endEditBlock": (), + "QTextCursor.hasComplexSelection": (), + "QTextCursor.hasSelection": (), + "QTextCursor.insertBlock": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextBlockFormat', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.insertFragment": ('PySide2.QtGui.QTextDocumentFragment',), + "QTextCursor.insertFrame": ('PySide2.QtGui.QTextFrameFormat',), + "QTextCursor.insertHtml": ('str',), + "QTextCursor.insertImage": [('PySide2.QtGui.QImage', 'str'), ('PySide2.QtGui.QTextImageFormat',), ('PySide2.QtGui.QTextImageFormat', 'PySide2.QtGui.QTextFrameFormat.Position'), ('str',)], + "QTextCursor.insertList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.insertTable": [('int', 'int'), ('int', 'int', 'PySide2.QtGui.QTextTableFormat')], + "QTextCursor.insertText": [('str',), ('str', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.isCopyOf": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.isNull": (), + "QTextCursor.joinPreviousEditBlock": (), + "QTextCursor.keepPositionOnInsert": (), + "QTextCursor.mergeBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.mergeBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.mergeCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.movePosition": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode', 'int'), + "QTextCursor.position": (), + "QTextCursor.positionInBlock": (), + "QTextCursor.removeSelectedText": (), + "QTextCursor.select": ('PySide2.QtGui.QTextCursor.SelectionType',), + "QTextCursor.selectedTableCells": ('int', 'int', 'int', 'int'), + "QTextCursor.selectedText": (), + "QTextCursor.selection": (), + "QTextCursor.selectionEnd": (), + "QTextCursor.selectionStart": (), + "QTextCursor.setBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.setCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setKeepPositionOnInsert": ('bool',), + "QTextCursor.setPosition": ('int', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextCursor.setVerticalMovementX": ('int',), + "QTextCursor.setVisualNavigation": ('bool',), + "QTextCursor.swap": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.verticalMovementX": (), + "QTextCursor.visualNavigation": (), + + # class PySide2.QtGui.QTextDocument: + "QTextDocument.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextDocument.addResource": ('int', 'PySide2.QtCore.QUrl', 'Any'), + "QTextDocument.adjustSize": (), + "QTextDocument.allFormats": (), + "QTextDocument.availableRedoSteps": (), + "QTextDocument.availableUndoSteps": (), + "QTextDocument.baseUrl": (), + "QTextDocument.begin": (), + "QTextDocument.blockCount": (), + "QTextDocument.characterAt": ('int',), + "QTextDocument.characterCount": (), + "QTextDocument.clear": (), + "QTextDocument.clearUndoRedoStacks": ('PySide2.QtGui.QTextDocument.Stacks',), + "QTextDocument.clone": ('PySide2.QtCore.QObject',), + "QTextDocument.createObject": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.defaultCursorMoveStyle": (), + "QTextDocument.defaultFont": (), + "QTextDocument.defaultStyleSheet": (), + "QTextDocument.defaultTextOption": (), + "QTextDocument.documentLayout": (), + "QTextDocument.documentMargin": (), + "QTextDocument.drawContents": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QTextDocument.end": (), + "QTextDocument.find": [('PySide2.QtCore.QRegExp', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('PySide2.QtCore.QRegExp', 'int', 'FindFlags'), ('PySide2.QtCore.QRegularExpression', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('PySide2.QtCore.QRegularExpression', 'int', 'FindFlags'), ('str', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('str', 'int', 'FindFlags')], + "QTextDocument.findBlock": ('int',), + "QTextDocument.findBlockByLineNumber": ('int',), + "QTextDocument.findBlockByNumber": ('int',), + "QTextDocument.firstBlock": (), + "QTextDocument.frameAt": ('int',), + "QTextDocument.idealWidth": (), + "QTextDocument.indentWidth": (), + "QTextDocument.isEmpty": (), + "QTextDocument.isModified": (), + "QTextDocument.isRedoAvailable": (), + "QTextDocument.isUndoAvailable": (), + "QTextDocument.isUndoRedoEnabled": (), + "QTextDocument.lastBlock": (), + "QTextDocument.lineCount": (), + "QTextDocument.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.markContentsDirty": ('int', 'int'), + "QTextDocument.maximumBlockCount": (), + "QTextDocument.metaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation',), + "QTextDocument.object": ('int',), + "QTextDocument.objectForFormat": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.pageCount": (), + "QTextDocument.pageSize": (), + "QTextDocument.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextDocument.redo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.resource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.revision": (), + "QTextDocument.rootFrame": (), + "QTextDocument.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QTextDocument.setDefaultCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextDocument.setDefaultFont": ('PySide2.QtGui.QFont',), + "QTextDocument.setDefaultStyleSheet": ('str',), + "QTextDocument.setDefaultTextOption": ('PySide2.QtGui.QTextOption',), + "QTextDocument.setDocumentLayout": ('PySide2.QtGui.QAbstractTextDocumentLayout',), + "QTextDocument.setDocumentMargin": ('float',), + "QTextDocument.setHtml": ('str',), + "QTextDocument.setIndentWidth": ('float',), + "QTextDocument.setMaximumBlockCount": ('int',), + "QTextDocument.setMetaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation', 'str'), + "QTextDocument.setModified": ('bool',), + "QTextDocument.setPageSize": ('PySide2.QtCore.QSizeF',), + "QTextDocument.setPlainText": ('str',), + "QTextDocument.setTextWidth": ('float',), + "QTextDocument.setUndoRedoEnabled": ('bool',), + "QTextDocument.setUseDesignMetrics": ('bool',), + "QTextDocument.size": (), + "QTextDocument.textWidth": (), + "QTextDocument.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocument.toPlainText": (), + "QTextDocument.toRawText": (), + "QTextDocument.undo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.useDesignMetrics": (), + + # class PySide2.QtGui.QTextDocumentFragment: + "QTextDocumentFragment.__init__": [(), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + "QTextDocumentFragment.__copy__": (), + "QTextDocumentFragment.fromHtml": [('str',), ('str', 'PySide2.QtGui.QTextDocument')], + "QTextDocumentFragment.fromPlainText": ('str',), + "QTextDocumentFragment.isEmpty": (), + "QTextDocumentFragment.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocumentFragment.toPlainText": (), + + # class PySide2.QtGui.QTextDocumentWriter: + "QTextDocumentWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QTextDocumentWriter.codec": (), + "QTextDocumentWriter.device": (), + "QTextDocumentWriter.fileName": (), + "QTextDocumentWriter.format": (), + "QTextDocumentWriter.setCodec": ('PySide2.QtCore.QTextCodec',), + "QTextDocumentWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextDocumentWriter.setFileName": ('str',), + "QTextDocumentWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QTextDocumentWriter.supportedDocumentFormats": (), + "QTextDocumentWriter.write": [('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + + # class PySide2.QtGui.QTextFormat: + "QTextFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('int',)], + "QTextFormat.__copy__": (), + "QTextFormat.background": (), + "QTextFormat.boolProperty": ('int',), + "QTextFormat.brushProperty": ('int',), + "QTextFormat.clearBackground": (), + "QTextFormat.clearForeground": (), + "QTextFormat.clearProperty": ('int',), + "QTextFormat.colorProperty": ('int',), + "QTextFormat.doubleProperty": ('int',), + "QTextFormat.foreground": (), + "QTextFormat.hasProperty": ('int',), + "QTextFormat.intProperty": ('int',), + "QTextFormat.isBlockFormat": (), + "QTextFormat.isCharFormat": (), + "QTextFormat.isEmpty": (), + "QTextFormat.isFrameFormat": (), + "QTextFormat.isImageFormat": (), + "QTextFormat.isListFormat": (), + "QTextFormat.isTableCellFormat": (), + "QTextFormat.isTableFormat": (), + "QTextFormat.isValid": (), + "QTextFormat.layoutDirection": (), + "QTextFormat.lengthProperty": ('int',), + "QTextFormat.lengthVectorProperty": ('int',), + "QTextFormat.merge": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.objectIndex": (), + "QTextFormat.objectType": (), + "QTextFormat.penProperty": ('int',), + "QTextFormat.properties": (), + "QTextFormat.property": ('int',), + "QTextFormat.propertyCount": (), + "QTextFormat.setBackground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setForeground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextFormat.setObjectIndex": ('int',), + "QTextFormat.setObjectType": ('int',), + "QTextFormat.setProperty": [('int', 'Any'), ('int', 'list')], + "QTextFormat.stringProperty": ('int',), + "QTextFormat.swap": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.toBlockFormat": (), + "QTextFormat.toCharFormat": (), + "QTextFormat.toFrameFormat": (), + "QTextFormat.toImageFormat": (), + "QTextFormat.toListFormat": (), + "QTextFormat.toTableCellFormat": (), + "QTextFormat.toTableFormat": (), + "QTextFormat.type": (), + + # class PySide2.QtGui.QTextFragment: + "QTextFragment.__init__": [(), ('PySide2.QtGui.QTextFragment',)], + "QTextFragment.__copy__": (), + "QTextFragment.charFormat": (), + "QTextFragment.charFormatIndex": (), + "QTextFragment.contains": ('int',), + "QTextFragment.isValid": (), + "QTextFragment.length": (), + "QTextFragment.position": (), + "QTextFragment.text": (), + + # class PySide2.QtGui.QTextFrame: + "QTextFrame.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextFrame.begin": (), + "QTextFrame.childFrames": (), + "QTextFrame.end": (), + "QTextFrame.firstCursorPosition": (), + "QTextFrame.firstPosition": (), + "QTextFrame.frameFormat": (), + "QTextFrame.lastCursorPosition": (), + "QTextFrame.lastPosition": (), + "QTextFrame.parentFrame": (), + "QTextFrame.setFrameFormat": ('PySide2.QtGui.QTextFrameFormat',), + + # class PySide2.QtGui.QTextFrameFormat: + "QTextFrameFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextFrameFormat',)], + "QTextFrameFormat.__copy__": (), + "QTextFrameFormat.border": (), + "QTextFrameFormat.borderBrush": (), + "QTextFrameFormat.borderStyle": (), + "QTextFrameFormat.bottomMargin": (), + "QTextFrameFormat.height": (), + "QTextFrameFormat.isValid": (), + "QTextFrameFormat.leftMargin": (), + "QTextFrameFormat.margin": (), + "QTextFrameFormat.padding": (), + "QTextFrameFormat.pageBreakPolicy": (), + "QTextFrameFormat.position": (), + "QTextFrameFormat.rightMargin": (), + "QTextFrameFormat.setBorder": ('float',), + "QTextFrameFormat.setBorderBrush": ('PySide2.QtGui.QBrush',), + "QTextFrameFormat.setBorderStyle": ('PySide2.QtGui.QTextFrameFormat.BorderStyle',), + "QTextFrameFormat.setBottomMargin": ('float',), + "QTextFrameFormat.setHeight": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.setLeftMargin": ('float',), + "QTextFrameFormat.setMargin": ('float',), + "QTextFrameFormat.setPadding": ('float',), + "QTextFrameFormat.setPageBreakPolicy": ('PageBreakFlags',), + "QTextFrameFormat.setPosition": ('PySide2.QtGui.QTextFrameFormat.Position',), + "QTextFrameFormat.setRightMargin": ('float',), + "QTextFrameFormat.setTopMargin": ('float',), + "QTextFrameFormat.setWidth": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.topMargin": (), + "QTextFrameFormat.width": (), + + # class PySide2.QtGui.QTextImageFormat: + "QTextImageFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextImageFormat',)], + "QTextImageFormat.__copy__": (), + "QTextImageFormat.height": (), + "QTextImageFormat.isValid": (), + "QTextImageFormat.name": (), + "QTextImageFormat.setHeight": ('float',), + "QTextImageFormat.setName": ('str',), + "QTextImageFormat.setWidth": ('float',), + "QTextImageFormat.width": (), + + # class PySide2.QtGui.QTextInlineObject: + "QTextInlineObject.__init__": (), + "QTextInlineObject.__copy__": (), + "QTextInlineObject.ascent": (), + "QTextInlineObject.descent": (), + "QTextInlineObject.format": (), + "QTextInlineObject.formatIndex": (), + "QTextInlineObject.height": (), + "QTextInlineObject.isValid": (), + "QTextInlineObject.rect": (), + "QTextInlineObject.setAscent": ('float',), + "QTextInlineObject.setDescent": ('float',), + "QTextInlineObject.setWidth": ('float',), + "QTextInlineObject.textDirection": (), + "QTextInlineObject.textPosition": (), + "QTextInlineObject.width": (), + + # class PySide2.QtGui.QTextItem: + "QTextItem.__init__": (), + "QTextItem.ascent": (), + "QTextItem.descent": (), + "QTextItem.font": (), + "QTextItem.renderFlags": (), + "QTextItem.text": (), + "QTextItem.width": (), + + # class PySide2.QtGui.QTextLayout: + "QTextLayout.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('str',), ('str', 'PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice')], + "QTextLayout.additionalFormats": (), + "QTextLayout.beginLayout": (), + "QTextLayout.boundingRect": (), + "QTextLayout.cacheEnabled": (), + "QTextLayout.clearAdditionalFormats": (), + "QTextLayout.clearFormats": (), + "QTextLayout.clearLayout": (), + "QTextLayout.createLine": (), + "QTextLayout.cursorMoveStyle": (), + "QTextLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'list', 'PySide2.QtCore.QRectF'), + "QTextLayout.drawCursor": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int', 'int')], + "QTextLayout.endLayout": (), + "QTextLayout.font": (), + "QTextLayout.formats": (), + "QTextLayout.isValidCursorPosition": ('int',), + "QTextLayout.leftCursorPosition": ('int',), + "QTextLayout.lineAt": ('int',), + "QTextLayout.lineCount": (), + "QTextLayout.lineForTextPosition": ('int',), + "QTextLayout.maximumWidth": (), + "QTextLayout.minimumWidth": (), + "QTextLayout.nextCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.position": (), + "QTextLayout.preeditAreaPosition": (), + "QTextLayout.preeditAreaText": (), + "QTextLayout.previousCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.rightCursorPosition": ('int',), + "QTextLayout.setAdditionalFormats": ('list',), + "QTextLayout.setCacheEnabled": ('bool',), + "QTextLayout.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextLayout.setFlags": ('int',), + "QTextLayout.setFont": ('PySide2.QtGui.QFont',), + "QTextLayout.setFormats": ('list',), + "QTextLayout.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLayout.setPreeditArea": ('int', 'str'), + "QTextLayout.setRawFont": ('PySide2.QtGui.QRawFont',), + "QTextLayout.setText": ('str',), + "QTextLayout.setTextOption": ('PySide2.QtGui.QTextOption',), + "QTextLayout.text": (), + "QTextLayout.textOption": (), + + # class PySide2.QtGui.QTextLength: + "QTextLength.__init__": [(), ('PySide2.QtGui.QTextLength',), ('PySide2.QtGui.QTextLength.Type', 'float')], + "QTextLength.__copy__": (), + "QTextLength.rawValue": (), + "QTextLength.type": (), + "QTextLength.value": ('float',), + + # class PySide2.QtGui.QTextLine: + "QTextLine.__init__": (), + "QTextLine.__copy__": (), + "QTextLine.ascent": (), + "QTextLine.cursorToX": ('int', 'PySide2.QtGui.QTextLine.Edge'), + "QTextLine.descent": (), + "QTextLine.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextLayout.FormatRange'), + "QTextLine.height": (), + "QTextLine.horizontalAdvance": (), + "QTextLine.isValid": (), + "QTextLine.leading": (), + "QTextLine.leadingIncluded": (), + "QTextLine.lineNumber": (), + "QTextLine.naturalTextRect": (), + "QTextLine.naturalTextWidth": (), + "QTextLine.position": (), + "QTextLine.rect": (), + "QTextLine.setLeadingIncluded": ('bool',), + "QTextLine.setLineWidth": ('float',), + "QTextLine.setNumColumns": [('int',), ('int', 'float')], + "QTextLine.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLine.textLength": (), + "QTextLine.textStart": (), + "QTextLine.width": (), + "QTextLine.x": (), + "QTextLine.xToCursor": ('float', 'PySide2.QtGui.QTextLine.CursorPosition'), + "QTextLine.y": (), + + # class PySide2.QtGui.QTextList: + "QTextList.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextList.add": ('PySide2.QtGui.QTextBlock',), + "QTextList.count": (), + "QTextList.format": (), + "QTextList.item": ('int',), + "QTextList.itemNumber": ('PySide2.QtGui.QTextBlock',), + "QTextList.itemText": ('PySide2.QtGui.QTextBlock',), + "QTextList.remove": ('PySide2.QtGui.QTextBlock',), + "QTextList.removeItem": ('int',), + "QTextList.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + + # class PySide2.QtGui.QTextListFormat: + "QTextListFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + "QTextListFormat.__copy__": (), + "QTextListFormat.indent": (), + "QTextListFormat.isValid": (), + "QTextListFormat.numberPrefix": (), + "QTextListFormat.numberSuffix": (), + "QTextListFormat.setIndent": ('int',), + "QTextListFormat.setNumberPrefix": ('str',), + "QTextListFormat.setNumberSuffix": ('str',), + "QTextListFormat.setStyle": ('PySide2.QtGui.QTextListFormat.Style',), + "QTextListFormat.style": (), + + # class PySide2.QtGui.QTextObject: + "QTextObject.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextObject.document": (), + "QTextObject.format": (), + "QTextObject.formatIndex": (), + "QTextObject.objectIndex": (), + "QTextObject.setFormat": ('PySide2.QtGui.QTextFormat',), + + # class PySide2.QtGui.QTextObjectInterface: + "QTextObjectInterface.__init__": (), + "QTextObjectInterface.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QTextObjectInterface.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QTextOption: + "QTextOption.__init__": [(), ('Alignment',), ('PySide2.QtGui.QTextOption',)], + "QTextOption.__copy__": (), + "QTextOption.alignment": (), + "QTextOption.flags": (), + "QTextOption.setAlignment": ('Alignment',), + "QTextOption.setFlags": ('Flags',), + "QTextOption.setTabArray": ('list',), + "QTextOption.setTabStop": ('float',), + "QTextOption.setTabs": ('list',), + "QTextOption.setTextDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextOption.setUseDesignMetrics": ('bool',), + "QTextOption.setWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextOption.tabArray": (), + "QTextOption.tabStop": (), + "QTextOption.tabs": (), + "QTextOption.textDirection": (), + "QTextOption.useDesignMetrics": (), + "QTextOption.wrapMode": (), + + # class PySide2.QtGui.QTextTable: + "QTextTable.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextTable.appendColumns": ('int',), + "QTextTable.appendRows": ('int',), + "QTextTable.cellAt": [('PySide2.QtGui.QTextCursor',), ('int',), ('int', 'int')], + "QTextTable.columns": (), + "QTextTable.format": (), + "QTextTable.insertColumns": ('int', 'int'), + "QTextTable.insertRows": ('int', 'int'), + "QTextTable.mergeCells": [('PySide2.QtGui.QTextCursor',), ('int', 'int', 'int', 'int')], + "QTextTable.removeColumns": ('int', 'int'), + "QTextTable.removeRows": ('int', 'int'), + "QTextTable.resize": ('int', 'int'), + "QTextTable.rowEnd": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rowStart": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rows": (), + "QTextTable.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTable.splitCell": ('int', 'int', 'int', 'int'), + + # class PySide2.QtGui.QTextTableCell: + "QTextTableCell.__init__": [(), ('PySide2.QtGui.QTextTableCell',)], + "QTextTableCell.__copy__": (), + "QTextTableCell.begin": (), + "QTextTableCell.column": (), + "QTextTableCell.columnSpan": (), + "QTextTableCell.end": (), + "QTextTableCell.firstCursorPosition": (), + "QTextTableCell.firstPosition": (), + "QTextTableCell.format": (), + "QTextTableCell.isValid": (), + "QTextTableCell.lastCursorPosition": (), + "QTextTableCell.lastPosition": (), + "QTextTableCell.row": (), + "QTextTableCell.rowSpan": (), + "QTextTableCell.setFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextTableCell.tableCellFormatIndex": (), + + # class PySide2.QtGui.QTextTableCellFormat: + "QTextTableCellFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableCellFormat',)], + "QTextTableCellFormat.__copy__": (), + "QTextTableCellFormat.bottomPadding": (), + "QTextTableCellFormat.isValid": (), + "QTextTableCellFormat.leftPadding": (), + "QTextTableCellFormat.rightPadding": (), + "QTextTableCellFormat.setBottomPadding": ('float',), + "QTextTableCellFormat.setLeftPadding": ('float',), + "QTextTableCellFormat.setPadding": ('float',), + "QTextTableCellFormat.setRightPadding": ('float',), + "QTextTableCellFormat.setTopPadding": ('float',), + "QTextTableCellFormat.topPadding": (), + + # class PySide2.QtGui.QTextTableFormat: + "QTextTableFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTableFormat.__copy__": (), + "QTextTableFormat.alignment": (), + "QTextTableFormat.cellPadding": (), + "QTextTableFormat.cellSpacing": (), + "QTextTableFormat.clearColumnWidthConstraints": (), + "QTextTableFormat.columnWidthConstraints": (), + "QTextTableFormat.columns": (), + "QTextTableFormat.headerRowCount": (), + "QTextTableFormat.isValid": (), + "QTextTableFormat.setAlignment": ('Alignment',), + "QTextTableFormat.setCellPadding": ('float',), + "QTextTableFormat.setCellSpacing": ('float',), + "QTextTableFormat.setColumnWidthConstraints": ('list',), + "QTextTableFormat.setColumns": ('int',), + "QTextTableFormat.setHeaderRowCount": ('int',), + + # class PySide2.QtGui.QToolBarChangeEvent: + "QToolBarChangeEvent.__init__": ('bool',), + "QToolBarChangeEvent.toggle": (), + + # class PySide2.QtGui.QTouchDevice: + "QTouchDevice.__init__": (), + "QTouchDevice.capabilities": (), + "QTouchDevice.devices": (), + "QTouchDevice.maximumTouchPoints": (), + "QTouchDevice.name": (), + "QTouchDevice.setCapabilities": ('Capabilities',), + "QTouchDevice.setMaximumTouchPoints": ('int',), + "QTouchDevice.setName": ('str',), + "QTouchDevice.setType": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTouchDevice.type": (), + + # class PySide2.QtGui.QTouchEvent: + "QTouchEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtGui.QTouchDevice', 'KeyboardModifiers', 'TouchPointStates', 'list'), + "QTouchEvent.device": (), + "QTouchEvent.setDevice": ('PySide2.QtGui.QTouchDevice',), + "QTouchEvent.setTarget": ('PySide2.QtCore.QObject',), + "QTouchEvent.setTouchPointStates": ('TouchPointStates',), + "QTouchEvent.setTouchPoints": ('list',), + "QTouchEvent.setWindow": ('PySide2.QtGui.QWindow',), + "QTouchEvent.target": (), + "QTouchEvent.touchPointStates": (), + "QTouchEvent.touchPoints": (), + "QTouchEvent.window": (), + + # class PySide2.QtGui.QTransform: + "QTransform.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float', 'float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QTransform.__copy__": (), + "QTransform.__reduce__": (), + "QTransform.adjoint": (), + "QTransform.det": (), + "QTransform.determinant": (), + "QTransform.dx": (), + "QTransform.dy": (), + "QTransform.fromScale": ('float', 'float'), + "QTransform.fromTranslate": ('float', 'float'), + "QTransform.inverted": ('bool',), + "QTransform.isAffine": (), + "QTransform.isIdentity": (), + "QTransform.isInvertible": (), + "QTransform.isRotating": (), + "QTransform.isScaling": (), + "QTransform.isTranslating": (), + "QTransform.m11": (), + "QTransform.m12": (), + "QTransform.m13": (), + "QTransform.m21": (), + "QTransform.m22": (), + "QTransform.m23": (), + "QTransform.m31": (), + "QTransform.m32": (), + "QTransform.m33": (), + "QTransform.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float')], + "QTransform.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QTransform.mapToPolygon": ('PySide2.QtCore.QRect',), + "QTransform.quadToQuad": [('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.quadToSquare": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.reset": (), + "QTransform.rotate": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.rotateRadians": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.scale": ('float', 'float'), + "QTransform.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float'), + "QTransform.shear": ('float', 'float'), + "QTransform.squareToQuad": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.toAffine": (), + "QTransform.translate": ('float', 'float'), + "QTransform.transposed": (), + "QTransform.type": (), + + # class PySide2.QtGui.QValidator: + "QValidator.__init__": ('PySide2.QtCore.QObject',), + "QValidator.fixup": ('str',), + "QValidator.locale": (), + "QValidator.setLocale": ('PySide2.QtCore.QLocale',), + "QValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QVector2D: + "QVector2D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',), ('float', 'float')], + "QVector2D.__copy__": (), + "QVector2D.__reduce__": (), + "QVector2D.distanceToLine": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.distanceToPoint": ('PySide2.QtGui.QVector2D',), + "QVector2D.dotProduct": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.isNull": (), + "QVector2D.length": (), + "QVector2D.lengthSquared": (), + "QVector2D.normalize": (), + "QVector2D.normalized": (), + "QVector2D.setX": ('float',), + "QVector2D.setY": ('float',), + "QVector2D.toPoint": (), + "QVector2D.toPointF": (), + "QVector2D.toTuple": (), + "QVector2D.toVector3D": (), + "QVector2D.toVector4D": (), + "QVector2D.x": (), + "QVector2D.y": (), + + # class PySide2.QtGui.QVector3D: + "QVector3D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float'), ('PySide2.QtGui.QVector4D',), ('float', 'float', 'float')], + "QVector3D.__copy__": (), + "QVector3D.__reduce__": (), + "QVector3D.crossProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToLine": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToPlane": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.distanceToPoint": ('PySide2.QtGui.QVector3D',), + "QVector3D.dotProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.isNull": (), + "QVector3D.length": (), + "QVector3D.lengthSquared": (), + "QVector3D.normal": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.normalize": (), + "QVector3D.normalized": (), + "QVector3D.project": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.setX": ('float',), + "QVector3D.setY": ('float',), + "QVector3D.setZ": ('float',), + "QVector3D.toPoint": (), + "QVector3D.toPointF": (), + "QVector3D.toTuple": (), + "QVector3D.toVector2D": (), + "QVector3D.toVector4D": (), + "QVector3D.unproject": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.x": (), + "QVector3D.y": (), + "QVector3D.z": (), + + # class PySide2.QtGui.QVector4D: + "QVector4D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float', 'float'), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QVector4D.__copy__": (), + "QVector4D.__reduce__": (), + "QVector4D.dotProduct": ('PySide2.QtGui.QVector4D', 'PySide2.QtGui.QVector4D'), + "QVector4D.isNull": (), + "QVector4D.length": (), + "QVector4D.lengthSquared": (), + "QVector4D.normalize": (), + "QVector4D.normalized": (), + "QVector4D.setW": ('float',), + "QVector4D.setX": ('float',), + "QVector4D.setY": ('float',), + "QVector4D.setZ": ('float',), + "QVector4D.toPoint": (), + "QVector4D.toPointF": (), + "QVector4D.toTuple": (), + "QVector4D.toVector2D": (), + "QVector4D.toVector2DAffine": (), + "QVector4D.toVector3D": (), + "QVector4D.toVector3DAffine": (), + "QVector4D.w": (), + "QVector4D.x": (), + "QVector4D.y": (), + "QVector4D.z": (), + + # class PySide2.QtGui.QWhatsThisClickedEvent: + "QWhatsThisClickedEvent.__init__": ('str',), + "QWhatsThisClickedEvent.href": (), + + # class PySide2.QtGui.QWheelEvent: + "QWheelEvent.__init__": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource', 'bool'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation'), ('PySide2.QtCore.QPointF', 'int', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation')], + "QWheelEvent.angleDelta": (), + "QWheelEvent.buttons": (), + "QWheelEvent.delta": (), + "QWheelEvent.globalPos": (), + "QWheelEvent.globalPosF": (), + "QWheelEvent.globalX": (), + "QWheelEvent.global""Y": (), + "QWheelEvent.inverted": (), + "QWheelEvent.orientation": (), + "QWheelEvent.phase": (), + "QWheelEvent.pixelDelta": (), + "QWheelEvent.pos": (), + "QWheelEvent.posF": (), + "QWheelEvent.source": (), + "QWheelEvent.x": (), + "QWheelEvent.y": (), + + # class PySide2.QtGui.QWindow: + "QWindow.__init__": [('PySide2.QtGui.QScreen',), ('PySide2.QtGui.QWindow',)], + "QWindow.accessibleRoot": (), + "QWindow.alert": ('int',), + "QWindow.baseSize": (), + "QWindow.close": (), + "QWindow.contentOrientation": (), + "QWindow.create": (), + "QWindow.cursor": (), + "QWindow.destroy": (), + "QWindow.devicePixelRatio": (), + "QWindow.event": ('PySide2.QtCore.QEvent',), + "QWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QWindow.filePath": (), + "QWindow.flags": (), + "QWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.focusObject": (), + "QWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.format": (), + "QWindow.frameGeometry": (), + "QWindow.frameMargins": (), + "QWindow.framePosition": (), + "QWindow.fromWinId": ('int',), + "QWindow.geometry": (), + "QWindow.height": (), + "QWindow.hide": (), + "QWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWindow.icon": (), + "QWindow.isActive": (), + "QWindow.isAncestorOf": ('PySide2.QtGui.QWindow', 'PySide2.QtGui.QWindow.AncestorMode'), + "QWindow.isExposed": (), + "QWindow.isModal": (), + "QWindow.isTopLevel": (), + "QWindow.isVisible": (), + "QWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.lower": (), + "QWindow.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mask": (), + "QWindow.maximumHeight": (), + "QWindow.maximumSize": (), + "QWindow.maximumWidth": (), + "QWindow.minimumHeight": (), + "QWindow.minimumSize": (), + "QWindow.minimumWidth": (), + "QWindow.modality": (), + "QWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWindow.opacity": (), + "QWindow.parent": [(), ('PySide2.QtGui.QWindow.AncestorMode',)], + "QWindow.position": (), + "QWindow.raise": (), + "QWindow.reportContentOrientationChange": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QWindow.requestActivate": (), + "QWindow.requestUpdate": (), + "QWindow.requestedFormat": (), + "QWindow.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWindow.screen": (), + "QWindow.setBaseSize": ('PySide2.QtCore.QSize',), + "QWindow.setCursor": ('PySide2.QtGui.QCursor',), + "QWindow.setFilePath": ('str',), + "QWindow.setFlag": ('PySide2.QtCore.Qt.WindowType', 'bool'), + "QWindow.setFlags": ('WindowFlags',), + "QWindow.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QWindow.setFramePosition": ('PySide2.QtCore.QPoint',), + "QWindow.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWindow.setHeight": ('int',), + "QWindow.setIcon": ('PySide2.QtGui.QIcon',), + "QWindow.setKeyboardGrabEnabled": ('bool',), + "QWindow.setMask": ('PySide2.QtGui.QRegion',), + "QWindow.setMaximumHeight": ('int',), + "QWindow.setMaximumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMaximumWidth": ('int',), + "QWindow.setMinimumHeight": ('int',), + "QWindow.setMinimumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMinimumWidth": ('int',), + "QWindow.setModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWindow.setMouseGrabEnabled": ('bool',), + "QWindow.setOpacity": ('float',), + "QWindow.setParent": ('PySide2.QtGui.QWindow',), + "QWindow.setPosition": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWindow.setScreen": ('PySide2.QtGui.QScreen',), + "QWindow.setSizeIncrement": ('PySide2.QtCore.QSize',), + "QWindow.setSurfaceType": ('PySide2.QtGui.QSurface.SurfaceType',), + "QWindow.setTitle": ('str',), + "QWindow.setTransientParent": ('PySide2.QtGui.QWindow',), + "QWindow.setVisibility": ('PySide2.QtGui.QWindow.Visibility',), + "QWindow.setVisible": ('bool',), + "QWindow.setWidth": ('int',), + "QWindow.setWindowState": ('PySide2.QtCore.Qt.WindowState',), + "QWindow.setX": ('int',), + "QWindow.setY": ('int',), + "QWindow.show": (), + "QWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWindow.showFullScreen": (), + "QWindow.showMaximized": (), + "QWindow.showMinimized": (), + "QWindow.showNormal": (), + "QWindow.size": (), + "QWindow.sizeIncrement": (), + "QWindow.surfaceHandle": (), + "QWindow.surfaceType": (), + "QWindow.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWindow.title": (), + "QWindow.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QWindow.transientParent": (), + "QWindow.type": (), + "QWindow.unsetCursor": (), + "QWindow.visibility": (), + "QWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWindow.width": (), + "QWindow.winId": (), + "QWindow.windowState": (), + "QWindow.x": (), + "QWindow.y": (), + + # class PySide2.QtGui.QWindowStateChangeEvent: + "QWindowStateChangeEvent.__init__": ('WindowStates', 'bool'), + "QWindowStateChangeEvent.isOverride": (), + "QWindowStateChangeEvent.oldState": (), + }) + +# Module PySide2.QtWidgets +if "PySide2.QtWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWidgets.QAbstractButton: + "QAbstractButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractButton.animateClick": ('int',), + "QAbstractButton.autoExclusive": (), + "QAbstractButton.autoRepeat": (), + "QAbstractButton.autoRepeatDelay": (), + "QAbstractButton.autoRepeatInterval": (), + "QAbstractButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractButton.checkStateSet": (), + "QAbstractButton.click": (), + "QAbstractButton.event": ('PySide2.QtCore.QEvent',), + "QAbstractButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.group": (), + "QAbstractButton.hitButton": ('PySide2.QtCore.QPoint',), + "QAbstractButton.icon": (), + "QAbstractButton.iconSize": (), + "QAbstractButton.isCheckable": (), + "QAbstractButton.isChecked": (), + "QAbstractButton.isDown": (), + "QAbstractButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.nextCheckState": (), + "QAbstractButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractButton.setAutoExclusive": ('bool',), + "QAbstractButton.setAutoRepeat": ('bool',), + "QAbstractButton.setAutoRepeatDelay": ('int',), + "QAbstractButton.setAutoRepeatInterval": ('int',), + "QAbstractButton.setCheckable": ('bool',), + "QAbstractButton.setChecked": ('bool',), + "QAbstractButton.setDown": ('bool',), + "QAbstractButton.setIcon": ('PySide2.QtGui.QIcon',), + "QAbstractButton.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractButton.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAbstractButton.setText": ('str',), + "QAbstractButton.shortcut": (), + "QAbstractButton.text": (), + "QAbstractButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractButton.toggle": (), + + # class PySide2.QtWidgets.QAbstractGraphicsShapeItem: + "QAbstractGraphicsShapeItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.brush": (), + "QAbstractGraphicsShapeItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.opaqueArea": (), + "QAbstractGraphicsShapeItem.pen": (), + "QAbstractGraphicsShapeItem.setBrush": ('PySide2.QtGui.QBrush',), + "QAbstractGraphicsShapeItem.setPen": ('PySide2.QtGui.QPen',), + + # class PySide2.QtWidgets.QAbstractItemDelegate: + "QAbstractItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.destroyEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.elidedText": ('PySide2.QtGui.QFontMetrics', 'int', 'PySide2.QtCore.Qt.TextElideMode', 'str'), + "QAbstractItemDelegate.helpEvent": ('PySide2.QtGui.QHelpEvent', 'PySide2.QtWidgets.QAbstractItemView', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paintingRoles": (), + "QAbstractItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QAbstractItemView: + "QAbstractItemView.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.alternatingRowColors": (), + "QAbstractItemView.autoScrollMargin": (), + "QAbstractItemView.clearSelection": (), + "QAbstractItemView.closeEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QAbstractItemDelegate.EndEditHint'), + "QAbstractItemView.closePersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.commitData": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemView.currentIndex": (), + "QAbstractItemView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QAbstractItemView.defaultDropAction": (), + "QAbstractItemView.dirtyRegionOffset": (), + "QAbstractItemView.doAutoScroll": (), + "QAbstractItemView.doItemsLayout": (), + "QAbstractItemView.dragDropMode": (), + "QAbstractItemView.dragDropOverwriteMode": (), + "QAbstractItemView.dragEnabled": (), + "QAbstractItemView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractItemView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractItemView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractItemView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractItemView.dropIndicatorPosition": (), + "QAbstractItemView.edit": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.EditTrigger', 'PySide2.QtCore.QEvent')], + "QAbstractItemView.editTriggers": (), + "QAbstractItemView.editorDestroyed": ('PySide2.QtCore.QObject',), + "QAbstractItemView.event": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.executeDelayedItemsLayout": (), + "QAbstractItemView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.focusNextPrevChild": ('bool',), + "QAbstractItemView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.hasAutoScroll": (), + "QAbstractItemView.horizontalOffset": (), + "QAbstractItemView.horizontalScrollMode": (), + "QAbstractItemView.horizontalScrollbarAction": ('int',), + "QAbstractItemView.horizontalScrollbarValueChanged": ('int',), + "QAbstractItemView.horizontalStepsPerItem": (), + "QAbstractItemView.iconSize": (), + "QAbstractItemView.indexAt": ('PySide2.QtCore.QPoint',), + "QAbstractItemView.indexWidget": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QAbstractItemView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractItemView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.itemDelegate": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.itemDelegateForColumn": ('int',), + "QAbstractItemView.itemDelegateForRow": ('int',), + "QAbstractItemView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractItemView.keyboardSearch": ('str',), + "QAbstractItemView.model": (), + "QAbstractItemView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QAbstractItemView.openPersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.reset": (), + "QAbstractItemView.resetHorizontalScrollMode": (), + "QAbstractItemView.resetVerticalScrollMode": (), + "QAbstractItemView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractItemView.rootIndex": (), + "QAbstractItemView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.scheduleDelayedItemsLayout": (), + "QAbstractItemView.scrollDirtyRegion": ('int', 'int'), + "QAbstractItemView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QAbstractItemView.scrollToBottom": (), + "QAbstractItemView.scrollToTop": (), + "QAbstractItemView.selectAll": (), + "QAbstractItemView.selectedIndexes": (), + "QAbstractItemView.selectionBehavior": (), + "QAbstractItemView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QAbstractItemView.selectionCommand": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QEvent'), + "QAbstractItemView.selectionMode": (), + "QAbstractItemView.selectionModel": (), + "QAbstractItemView.setAlternatingRowColors": ('bool',), + "QAbstractItemView.setAutoScroll": ('bool',), + "QAbstractItemView.setAutoScrollMargin": ('int',), + "QAbstractItemView.setCurrentIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setDefaultDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QAbstractItemView.setDirtyRegion": ('PySide2.QtGui.QRegion',), + "QAbstractItemView.setDragDropMode": ('PySide2.QtWidgets.QAbstractItemView.DragDropMode',), + "QAbstractItemView.setDragDropOverwriteMode": ('bool',), + "QAbstractItemView.setDragEnabled": ('bool',), + "QAbstractItemView.setDropIndicatorShown": ('bool',), + "QAbstractItemView.setEditTriggers": ('EditTriggers',), + "QAbstractItemView.setHorizontalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setHorizontalStepsPerItem": ('int',), + "QAbstractItemView.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractItemView.setIndexWidget": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QWidget'), + "QAbstractItemView.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QAbstractItemView.setItemDelegateForColumn": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setItemDelegateForRow": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractItemView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QAbstractItemView.setSelectionBehavior": ('PySide2.QtWidgets.QAbstractItemView.SelectionBehavior',), + "QAbstractItemView.setSelectionMode": ('PySide2.QtWidgets.QAbstractItemView.SelectionMode',), + "QAbstractItemView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QAbstractItemView.setState": ('PySide2.QtWidgets.QAbstractItemView.State',), + "QAbstractItemView.setTabKeyNavigation": ('bool',), + "QAbstractItemView.setTextElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QAbstractItemView.setVerticalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setVerticalStepsPerItem": ('int',), + "QAbstractItemView.showDropIndicator": (), + "QAbstractItemView.sizeHintForColumn": ('int',), + "QAbstractItemView.sizeHintForIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.sizeHintForRow": ('int',), + "QAbstractItemView.startAutoScroll": (), + "QAbstractItemView.startDrag": ('DropActions',), + "QAbstractItemView.state": (), + "QAbstractItemView.stopAutoScroll": (), + "QAbstractItemView.tabKeyNavigation": (), + "QAbstractItemView.textElideMode": (), + "QAbstractItemView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractItemView.update": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.updateEditorData": (), + "QAbstractItemView.updateEditorGeometries": (), + "QAbstractItemView.updateGeometries": (), + "QAbstractItemView.verticalOffset": (), + "QAbstractItemView.verticalScrollMode": (), + "QAbstractItemView.verticalScrollbarAction": ('int',), + "QAbstractItemView.verticalScrollbarValueChanged": ('int',), + "QAbstractItemView.verticalStepsPerItem": (), + "QAbstractItemView.viewOptions": (), + "QAbstractItemView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.viewportSizeHint": (), + "QAbstractItemView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QAbstractScrollArea: + "QAbstractScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.addScrollBarWidget": ('PySide2.QtWidgets.QWidget', 'Alignment'), + "QAbstractScrollArea.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractScrollArea.cornerWidget": (), + "QAbstractScrollArea.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractScrollArea.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractScrollArea.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractScrollArea.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractScrollArea.event": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QAbstractScrollArea.horizontalScrollBar": (), + "QAbstractScrollArea.horizontalScrollBarPolicy": (), + "QAbstractScrollArea.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractScrollArea.maximumViewportSize": (), + "QAbstractScrollArea.minimumSizeHint": (), + "QAbstractScrollArea.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractScrollArea.scrollBarWidgets": ('Alignment',), + "QAbstractScrollArea.scrollContentsBy": ('int', 'int'), + "QAbstractScrollArea.setCornerWidget": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setHorizontalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setHorizontalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setSizeAdjustPolicy": ('PySide2.QtWidgets.QAbstractScrollArea.SizeAdjustPolicy',), + "QAbstractScrollArea.setVerticalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setVerticalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setViewportMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QAbstractScrollArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.sizeAdjustPolicy": (), + "QAbstractScrollArea.sizeHint": (), + "QAbstractScrollArea.verticalScrollBar": (), + "QAbstractScrollArea.verticalScrollBarPolicy": (), + "QAbstractScrollArea.viewport": (), + "QAbstractScrollArea.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.viewportMargins": (), + "QAbstractScrollArea.viewportSizeHint": (), + "QAbstractScrollArea.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSlider: + "QAbstractSlider.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSlider.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.event": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.hasTracking": (), + "QAbstractSlider.invertedAppearance": (), + "QAbstractSlider.invertedControls": (), + "QAbstractSlider.isSliderDown": (), + "QAbstractSlider.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSlider.maximum": (), + "QAbstractSlider.minimum": (), + "QAbstractSlider.orientation": (), + "QAbstractSlider.pageStep": (), + "QAbstractSlider.repeatAction": (), + "QAbstractSlider.setInvertedAppearance": ('bool',), + "QAbstractSlider.setInvertedControls": ('bool',), + "QAbstractSlider.setMaximum": ('int',), + "QAbstractSlider.setMinimum": ('int',), + "QAbstractSlider.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QAbstractSlider.setPageStep": ('int',), + "QAbstractSlider.setRange": ('int', 'int'), + "QAbstractSlider.setRepeatAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction', 'int', 'int'), + "QAbstractSlider.setSingleStep": ('int',), + "QAbstractSlider.setSliderDown": ('bool',), + "QAbstractSlider.setSliderPosition": ('int',), + "QAbstractSlider.setTracking": ('bool',), + "QAbstractSlider.setValue": ('int',), + "QAbstractSlider.singleStep": (), + "QAbstractSlider.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QAbstractSlider.sliderPosition": (), + "QAbstractSlider.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSlider.triggerAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction',), + "QAbstractSlider.value": (), + "QAbstractSlider.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSpinBox: + "QAbstractSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSpinBox.alignment": (), + "QAbstractSpinBox.buttonSymbols": (), + "QAbstractSpinBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.clear": (), + "QAbstractSpinBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QAbstractSpinBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractSpinBox.correctionMode": (), + "QAbstractSpinBox.event": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.fixup": ('str',), + "QAbstractSpinBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.hasAcceptableInput": (), + "QAbstractSpinBox.hasFrame": (), + "QAbstractSpinBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QAbstractSpinBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QAbstractSpinBox.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractSpinBox.interpretText": (), + "QAbstractSpinBox.isAccelerated": (), + "QAbstractSpinBox.isGroupSeparatorShown": (), + "QAbstractSpinBox.isReadOnly": (), + "QAbstractSpinBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyboardTracking": (), + "QAbstractSpinBox.lineEdit": (), + "QAbstractSpinBox.minimumSizeHint": (), + "QAbstractSpinBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractSpinBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractSpinBox.selectAll": (), + "QAbstractSpinBox.setAccelerated": ('bool',), + "QAbstractSpinBox.setAlignment": ('Alignment',), + "QAbstractSpinBox.setButtonSymbols": ('PySide2.QtWidgets.QAbstractSpinBox.ButtonSymbols',), + "QAbstractSpinBox.setCorrectionMode": ('PySide2.QtWidgets.QAbstractSpinBox.CorrectionMode',), + "QAbstractSpinBox.setFrame": ('bool',), + "QAbstractSpinBox.setGroupSeparatorShown": ('bool',), + "QAbstractSpinBox.setKeyboardTracking": ('bool',), + "QAbstractSpinBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QAbstractSpinBox.setReadOnly": ('bool',), + "QAbstractSpinBox.setSpecialValueText": ('str',), + "QAbstractSpinBox.setWrapping": ('bool',), + "QAbstractSpinBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QAbstractSpinBox.sizeHint": (), + "QAbstractSpinBox.specialValueText": (), + "QAbstractSpinBox.stepBy": ('int',), + "QAbstractSpinBox.stepDown": (), + "QAbstractSpinBox.stepEnabled": (), + "QAbstractSpinBox.stepUp": (), + "QAbstractSpinBox.text": (), + "QAbstractSpinBox.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSpinBox.validate": ('str', 'int'), + "QAbstractSpinBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QAbstractSpinBox.wrapping": (), + + # class PySide2.QtWidgets.QAction: + "QAction.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QAction.actionGroup": (), + "QAction.activate": ('PySide2.QtWidgets.QAction.ActionEvent',), + "QAction.associatedGraphicsWidgets": (), + "QAction.associatedWidgets": (), + "QAction.autoRepeat": (), + "QAction.data": (), + "QAction.event": ('PySide2.QtCore.QEvent',), + "QAction.font": (), + "QAction.hover": (), + "QAction.icon": (), + "QAction.iconText": (), + "QAction.isCheckable": (), + "QAction.isChecked": (), + "QAction.isEnabled": (), + "QAction.isIconVisibleInMenu": (), + "QAction.isSeparator": (), + "QAction.isVisible": (), + "QAction.menu": (), + "QAction.menuRole": (), + "QAction.parentWidget": (), + "QAction.priority": (), + "QAction.setActionGroup": ('PySide2.QtWidgets.QActionGroup',), + "QAction.setAutoRepeat": ('bool',), + "QAction.setCheckable": ('bool',), + "QAction.setChecked": ('bool',), + "QAction.setData": ('Any',), + "QAction.setDisabled": ('bool',), + "QAction.setEnabled": ('bool',), + "QAction.setFont": ('PySide2.QtGui.QFont',), + "QAction.setIcon": ('PySide2.QtGui.QIcon',), + "QAction.setIconText": ('str',), + "QAction.setIconVisibleInMenu": ('bool',), + "QAction.setMenu": ('PySide2.QtWidgets.QMenu',), + "QAction.setMenuRole": ('PySide2.QtWidgets.QAction.MenuRole',), + "QAction.setPriority": ('PySide2.QtWidgets.QAction.Priority',), + "QAction.setSeparator": ('bool',), + "QAction.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAction.setShortcutContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QAction.setShortcuts": [('PySide2.QtGui.QKeySequence.StandardKey',), ('list',)], + "QAction.setStatusTip": ('str',), + "QAction.setText": ('str',), + "QAction.setToolTip": ('str',), + "QAction.setVisible": ('bool',), + "QAction.setWhatsThis": ('str',), + "QAction.shortcut": (), + "QAction.shortcutContext": (), + "QAction.shortcuts": (), + "QAction.showStatusText": ('PySide2.QtWidgets.QWidget',), + "QAction.statusTip": (), + "QAction.text": (), + "QAction.toggle": (), + "QAction.toolTip": (), + "QAction.trigger": (), + "QAction.whatsThis": (), + + # class PySide2.QtWidgets.QActionGroup: + "QActionGroup.__init__": ('PySide2.QtCore.QObject',), + "QActionGroup.actions": (), + "QActionGroup.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction',), ('str',)], + "QActionGroup.checkedAction": (), + "QActionGroup.isEnabled": (), + "QActionGroup.isExclusive": (), + "QActionGroup.isVisible": (), + "QActionGroup.removeAction": ('PySide2.QtWidgets.QAction',), + "QActionGroup.setDisabled": ('bool',), + "QActionGroup.setEnabled": ('bool',), + "QActionGroup.setExclusive": ('bool',), + "QActionGroup.setVisible": ('bool',), + + # class PySide2.QtWidgets.QApplication: + "QApplication.__init__": ('List[str]',), + "QApplication.aboutQt": (), + "QApplication.activeModalWidget": (), + "QApplication.activePopupWidget": (), + "QApplication.activeWindow": (), + "QApplication.alert": ('PySide2.QtWidgets.QWidget', 'int'), + "QApplication.allWidgets": (), + "QApplication.autoSipEnabled": (), + "QApplication.beep": (), + "QApplication.closeAllWindows": (), + "QApplication.colorSpec": (), + "QApplication.cursorFlashTime": (), + "QApplication.desktop": (), + "QApplication.doubleClickInterval": (), + "QApplication.event": ('PySide2.QtCore.QEvent',), + "QApplication.exec_": (), + "QApplication.focusWidget": (), + "QApplication.font": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.fontMetrics": (), + "QApplication.globalStrut": (), + "QApplication.isEffectEnabled": ('PySide2.QtCore.Qt.UIEffect',), + "QApplication.keyboardInputInterval": (), + "QApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QApplication.palette": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.setActiveWindow": ('PySide2.QtWidgets.QWidget',), + "QApplication.setAutoSipEnabled": ('bool',), + "QApplication.setColorSpec": ('int',), + "QApplication.setCursorFlashTime": ('int',), + "QApplication.setDoubleClickInterval": ('int',), + "QApplication.setEffectEnabled": ('PySide2.QtCore.Qt.UIEffect', 'bool'), + "QApplication.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'str')], + "QApplication.setGlobalStrut": ('PySide2.QtCore.QSize',), + "QApplication.setKeyboardInputInterval": ('int',), + "QApplication.setPalette": [('PySide2.QtGui.QPalette',), ('PySide2.QtGui.QPalette', 'str')], + "QApplication.setStartDragDistance": ('int',), + "QApplication.setStartDragTime": ('int',), + "QApplication.setStyle": [('PySide2.QtWidgets.QStyle',), ('str',)], + "QApplication.setStyleSheet": ('str',), + "QApplication.setWheelScrollLines": ('int',), + "QApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QApplication.startDragDistance": (), + "QApplication.startDragTime": (), + "QApplication.style": (), + "QApplication.styleSheet": (), + "QApplication.topLevelAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.topLevelWidgets": (), + "QApplication.wheelScrollLines": (), + "QApplication.widgetAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.windowIcon": (), + + # class PySide2.QtWidgets.QBoxLayout: + "QBoxLayout.__init__": ('PySide2.QtWidgets.QBoxLayout.Direction', 'PySide2.QtWidgets.QWidget'), + "QBoxLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QBoxLayout.addLayout": ('PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.addSpacerItem": ('PySide2.QtWidgets.QSpacerItem',), + "QBoxLayout.addSpacing": ('int',), + "QBoxLayout.addStretch": ('int',), + "QBoxLayout.addStrut": ('int',), + "QBoxLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'Alignment')], + "QBoxLayout.count": (), + "QBoxLayout.direction": (), + "QBoxLayout.expandingDirections": (), + "QBoxLayout.hasHeightForWidth": (), + "QBoxLayout.heightForWidth": ('int',), + "QBoxLayout.insertItem": ('int', 'PySide2.QtWidgets.QLayoutItem'), + "QBoxLayout.insertLayout": ('int', 'PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.insertSpacerItem": ('int', 'PySide2.QtWidgets.QSpacerItem'), + "QBoxLayout.insertSpacing": ('int', 'int'), + "QBoxLayout.insertStretch": ('int', 'int'), + "QBoxLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int', 'Alignment'), + "QBoxLayout.invalidate": (), + "QBoxLayout.itemAt": ('int',), + "QBoxLayout.maximumSize": (), + "QBoxLayout.minimumHeightForWidth": ('int',), + "QBoxLayout.minimumSize": (), + "QBoxLayout.setDirection": ('PySide2.QtWidgets.QBoxLayout.Direction',), + "QBoxLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QBoxLayout.setSpacing": ('int',), + "QBoxLayout.setStretch": ('int', 'int'), + "QBoxLayout.setStretchFactor": [('PySide2.QtWidgets.QLayout', 'int'), ('PySide2.QtWidgets.QWidget', 'int')], + "QBoxLayout.sizeHint": (), + "QBoxLayout.spacing": (), + "QBoxLayout.stretch": ('int',), + "QBoxLayout.takeAt": ('int',), + + # class PySide2.QtWidgets.QButtonGroup: + "QButtonGroup.__init__": ('PySide2.QtCore.QObject',), + "QButtonGroup.addButton": ('PySide2.QtWidgets.QAbstractButton', 'int'), + "QButtonGroup.button": ('int',), + "QButtonGroup.buttons": (), + "QButtonGroup.checkedButton": (), + "QButtonGroup.checkedId": (), + "QButtonGroup.exclusive": (), + "QButtonGroup.id": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.setExclusive": ('bool',), + "QButtonGroup.setId": ('PySide2.QtWidgets.QAbstractButton', 'int'), + + # class PySide2.QtWidgets.QCalendarWidget: + "QCalendarWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QCalendarWidget.dateEditAcceptDelay": (), + "QCalendarWidget.dateTextFormat": [(), ('PySide2.QtCore.QDate',)], + "QCalendarWidget.event": ('PySide2.QtCore.QEvent',), + "QCalendarWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCalendarWidget.firstDayOfWeek": (), + "QCalendarWidget.headerTextFormat": (), + "QCalendarWidget.horizontalHeaderFormat": (), + "QCalendarWidget.isDateEditEnabled": (), + "QCalendarWidget.isGridVisible": (), + "QCalendarWidget.isNavigationBarVisible": (), + "QCalendarWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QCalendarWidget.maximumDate": (), + "QCalendarWidget.minimumDate": (), + "QCalendarWidget.minimumSizeHint": (), + "QCalendarWidget.monthShown": (), + "QCalendarWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QCalendarWidget.paintCell": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QDate'), + "QCalendarWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QCalendarWidget.selectedDate": (), + "QCalendarWidget.selectionMode": (), + "QCalendarWidget.setCurrentPage": ('int', 'int'), + "QCalendarWidget.setDateEditAcceptDelay": ('int',), + "QCalendarWidget.setDateEditEnabled": ('bool',), + "QCalendarWidget.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QCalendarWidget.setDateTextFormat": ('PySide2.QtCore.QDate', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.setFirstDayOfWeek": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.setGridVisible": ('bool',), + "QCalendarWidget.setHeaderTextFormat": ('PySide2.QtGui.QTextCharFormat',), + "QCalendarWidget.setHorizontalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.HorizontalHeaderFormat',), + "QCalendarWidget.setMaximumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setMinimumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setNavigationBarVisible": ('bool',), + "QCalendarWidget.setSelectedDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setSelectionMode": ('PySide2.QtWidgets.QCalendarWidget.SelectionMode',), + "QCalendarWidget.setVerticalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.VerticalHeaderFormat',), + "QCalendarWidget.setWeekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.showNextMonth": (), + "QCalendarWidget.showNextYear": (), + "QCalendarWidget.showPreviousMonth": (), + "QCalendarWidget.showPreviousYear": (), + "QCalendarWidget.showSelectedDate": (), + "QCalendarWidget.showToday": (), + "QCalendarWidget.sizeHint": (), + "QCalendarWidget.updateCell": ('PySide2.QtCore.QDate',), + "QCalendarWidget.updateCells": (), + "QCalendarWidget.verticalHeaderFormat": (), + "QCalendarWidget.weekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.yearShown": (), + + # class PySide2.QtWidgets.QCheckBox: + "QCheckBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QCheckBox.checkState": (), + "QCheckBox.checkStateSet": (), + "QCheckBox.event": ('PySide2.QtCore.QEvent',), + "QCheckBox.hitButton": ('PySide2.QtCore.QPoint',), + "QCheckBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QCheckBox.isTristate": (), + "QCheckBox.minimumSizeHint": (), + "QCheckBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QCheckBox.nextCheckState": (), + "QCheckBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCheckBox.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QCheckBox.setTristate": ('bool',), + "QCheckBox.sizeHint": (), + + # class PySide2.QtWidgets.QColorDialog: + "QColorDialog.__init__": [('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QColorDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QColorDialog.currentColor": (), + "QColorDialog.customColor": ('int',), + "QColorDialog.customCount": (), + "QColorDialog.done": ('int',), + "QColorDialog.getColor": ('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget', 'str', 'ColorDialogOptions'), + "QColorDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QColorDialog.options": (), + "QColorDialog.selectedColor": (), + "QColorDialog.setCurrentColor": ('PySide2.QtGui.QColor',), + "QColorDialog.setCustomColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption', 'bool'), + "QColorDialog.setOptions": ('ColorDialogOptions',), + "QColorDialog.setStandardColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setVisible": ('bool',), + "QColorDialog.standardColor": ('int',), + "QColorDialog.testOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption',), + + # class PySide2.QtWidgets.QColormap: + "QColormap.__init__": ('PySide2.QtWidgets.QColormap',), + "QColormap.__copy__": (), + "QColormap.cleanup": (), + "QColormap.colorAt": ('int',), + "QColormap.colormap": (), + "QColormap.depth": (), + "QColormap.initialize": (), + "QColormap.instance": ('int',), + "QColormap.mode": (), + "QColormap.pixel": ('PySide2.QtGui.QColor',), + "QColormap.size": (), + + # class PySide2.QtWidgets.QColumnView: + "QColumnView.__init__": ('PySide2.QtWidgets.QWidget',), + "QColumnView.columnWidths": (), + "QColumnView.createColumn": ('PySide2.QtCore.QModelIndex',), + "QColumnView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QColumnView.horizontalOffset": (), + "QColumnView.indexAt": ('PySide2.QtCore.QPoint',), + "QColumnView.initializeColumn": ('PySide2.QtWidgets.QAbstractItemView',), + "QColumnView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QColumnView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QColumnView.previewWidget": (), + "QColumnView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QColumnView.resizeGripsVisible": (), + "QColumnView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QColumnView.scrollContentsBy": ('int', 'int'), + "QColumnView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QColumnView.selectAll": (), + "QColumnView.setColumnWidths": ('list',), + "QColumnView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QColumnView.setPreviewWidget": ('PySide2.QtWidgets.QWidget',), + "QColumnView.setResizeGripsVisible": ('bool',), + "QColumnView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QColumnView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QColumnView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QColumnView.sizeHint": (), + "QColumnView.verticalOffset": (), + "QColumnView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QColumnView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QComboBox: + "QComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QComboBox.addItem": [('PySide2.QtGui.QIcon', 'str', 'Any'), ('str', 'Any')], + "QComboBox.addItems": ('List[str]',), + "QComboBox.autoCompletion": (), + "QComboBox.autoCompletionCaseSensitivity": (), + "QComboBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QComboBox.clear": (), + "QComboBox.clearEditText": (), + "QComboBox.completer": (), + "QComboBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QComboBox.count": (), + "QComboBox.currentData": ('int',), + "QComboBox.currentIndex": (), + "QComboBox.currentText": (), + "QComboBox.duplicatesEnabled": (), + "QComboBox.event": ('PySide2.QtCore.QEvent',), + "QComboBox.findData": ('Any', 'int', 'MatchFlags'), + "QComboBox.findText": ('str', 'MatchFlags'), + "QComboBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.hasFrame": (), + "QComboBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QComboBox.hidePopup": (), + "QComboBox.iconSize": (), + "QComboBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionComboBox',), + "QComboBox.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QComboBox.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QComboBox.insertItem": [('int', 'PySide2.QtGui.QIcon', 'str', 'Any'), ('int', 'str', 'Any')], + "QComboBox.insertItems": ('int', 'List[str]'), + "QComboBox.insertPolicy": (), + "QComboBox.insertSeparator": ('int',), + "QComboBox.isEditable": (), + "QComboBox.itemData": ('int', 'int'), + "QComboBox.itemDelegate": (), + "QComboBox.itemIcon": ('int',), + "QComboBox.itemText": ('int',), + "QComboBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.lineEdit": (), + "QComboBox.maxCount": (), + "QComboBox.maxVisibleItems": (), + "QComboBox.minimumContentsLength": (), + "QComboBox.minimumSizeHint": (), + "QComboBox.model": (), + "QComboBox.modelColumn": (), + "QComboBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QComboBox.removeItem": ('int',), + "QComboBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QComboBox.rootModelIndex": (), + "QComboBox.setAutoCompletion": ('bool',), + "QComboBox.setAutoCompletionCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QComboBox.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QComboBox.setCurrentIndex": ('int',), + "QComboBox.setCurrentText": ('str',), + "QComboBox.setDuplicatesEnabled": ('bool',), + "QComboBox.setEditText": ('str',), + "QComboBox.setEditable": ('bool',), + "QComboBox.setFrame": ('bool',), + "QComboBox.setIconSize": ('PySide2.QtCore.QSize',), + "QComboBox.setInsertPolicy": ('PySide2.QtWidgets.QComboBox.InsertPolicy',), + "QComboBox.setItemData": ('int', 'Any', 'int'), + "QComboBox.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QComboBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QComboBox.setItemText": ('int', 'str'), + "QComboBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QComboBox.setMaxCount": ('int',), + "QComboBox.setMaxVisibleItems": ('int',), + "QComboBox.setMinimumContentsLength": ('int',), + "QComboBox.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QComboBox.setModelColumn": ('int',), + "QComboBox.setRootModelIndex": ('PySide2.QtCore.QModelIndex',), + "QComboBox.setSizeAdjustPolicy": ('PySide2.QtWidgets.QComboBox.SizeAdjustPolicy',), + "QComboBox.setValidator": ('PySide2.QtGui.QValidator',), + "QComboBox.setView": ('PySide2.QtWidgets.QAbstractItemView',), + "QComboBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QComboBox.showPopup": (), + "QComboBox.sizeAdjustPolicy": (), + "QComboBox.sizeHint": (), + "QComboBox.validator": (), + "QComboBox.view": (), + "QComboBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QCommandLinkButton: + "QCommandLinkButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget'), ('str', 'str', 'PySide2.QtWidgets.QWidget')], + "QCommandLinkButton.description": (), + "QCommandLinkButton.event": ('PySide2.QtCore.QEvent',), + "QCommandLinkButton.heightForWidth": ('int',), + "QCommandLinkButton.minimumSizeHint": (), + "QCommandLinkButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCommandLinkButton.setDescription": ('str',), + "QCommandLinkButton.sizeHint": (), + + # class PySide2.QtWidgets.QCommonStyle: + "QCommonStyle.__init__": (), + "QCommonStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QCommonStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QCommonStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QCommonStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QCompleter: + "QCompleter.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QCompleter.caseSensitivity": (), + "QCompleter.complete": ('PySide2.QtCore.QRect',), + "QCompleter.completionColumn": (), + "QCompleter.completionCount": (), + "QCompleter.completionMode": (), + "QCompleter.completionModel": (), + "QCompleter.completionPrefix": (), + "QCompleter.completionRole": (), + "QCompleter.currentCompletion": (), + "QCompleter.currentIndex": (), + "QCompleter.currentRow": (), + "QCompleter.event": ('PySide2.QtCore.QEvent',), + "QCompleter.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCompleter.filterMode": (), + "QCompleter.maxVisibleItems": (), + "QCompleter.model": (), + "QCompleter.modelSorting": (), + "QCompleter.pathFromIndex": ('PySide2.QtCore.QModelIndex',), + "QCompleter.popup": (), + "QCompleter.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCompleter.setCompletionColumn": ('int',), + "QCompleter.setCompletionMode": ('PySide2.QtWidgets.QCompleter.CompletionMode',), + "QCompleter.setCompletionPrefix": ('str',), + "QCompleter.setCompletionRole": ('int',), + "QCompleter.setCurrentRow": ('int',), + "QCompleter.setFilterMode": ('MatchFlags',), + "QCompleter.setMaxVisibleItems": ('int',), + "QCompleter.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QCompleter.setModelSorting": ('PySide2.QtWidgets.QCompleter.ModelSorting',), + "QCompleter.setPopup": ('PySide2.QtWidgets.QAbstractItemView',), + "QCompleter.setWidget": ('PySide2.QtWidgets.QWidget',), + "QCompleter.setWrapAround": ('bool',), + "QCompleter.splitPath": ('str',), + "QCompleter.widget": (), + "QCompleter.wrapAround": (), + + # class PySide2.QtWidgets.QDataWidgetMapper: + "QDataWidgetMapper.__init__": ('PySide2.QtCore.QObject',), + "QDataWidgetMapper.addMapping": [('PySide2.QtWidgets.QWidget', 'int'), ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtCore.QByteArray')], + "QDataWidgetMapper.clearMapping": (), + "QDataWidgetMapper.currentIndex": (), + "QDataWidgetMapper.itemDelegate": (), + "QDataWidgetMapper.mappedPropertyName": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedSection": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedWidgetAt": ('int',), + "QDataWidgetMapper.model": (), + "QDataWidgetMapper.orientation": (), + "QDataWidgetMapper.removeMapping": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.revert": (), + "QDataWidgetMapper.rootIndex": (), + "QDataWidgetMapper.setCurrentIndex": ('int',), + "QDataWidgetMapper.setCurrentModelIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QDataWidgetMapper.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QDataWidgetMapper.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDataWidgetMapper.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setSubmitPolicy": ('PySide2.QtWidgets.QDataWidgetMapper.SubmitPolicy',), + "QDataWidgetMapper.submit": (), + "QDataWidgetMapper.submitPolicy": (), + "QDataWidgetMapper.toFirst": (), + "QDataWidgetMapper.toLast": (), + "QDataWidgetMapper.toNext": (), + "QDataWidgetMapper.toPrevious": (), + + # class PySide2.QtWidgets.QDateEdit: + "QDateEdit.__init__": [('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDateTimeEdit: + "QDateTimeEdit.__init__": [('Any', 'type', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDateTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QDateTimeEdit.calendarPopup": (), + "QDateTimeEdit.calendarWidget": (), + "QDateTimeEdit.clear": (), + "QDateTimeEdit.clearMaximumDate": (), + "QDateTimeEdit.clearMaximumDateTime": (), + "QDateTimeEdit.clearMaximumTime": (), + "QDateTimeEdit.clearMinimumDate": (), + "QDateTimeEdit.clearMinimumDateTime": (), + "QDateTimeEdit.clearMinimumTime": (), + "QDateTimeEdit.currentSection": (), + "QDateTimeEdit.currentSectionIndex": (), + "QDateTimeEdit.date": (), + "QDateTimeEdit.dateTime": (), + "QDateTimeEdit.dateTimeFromText": ('str',), + "QDateTimeEdit.displayFormat": (), + "QDateTimeEdit.displayedSections": (), + "QDateTimeEdit.event": ('PySide2.QtCore.QEvent',), + "QDateTimeEdit.fixup": ('str',), + "QDateTimeEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QDateTimeEdit.focusNextPrevChild": ('bool',), + "QDateTimeEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QDateTimeEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDateTimeEdit.maximumDate": (), + "QDateTimeEdit.maximumDateTime": (), + "QDateTimeEdit.maximumTime": (), + "QDateTimeEdit.minimumDate": (), + "QDateTimeEdit.minimumDateTime": (), + "QDateTimeEdit.minimumTime": (), + "QDateTimeEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDateTimeEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDateTimeEdit.sectionAt": ('int',), + "QDateTimeEdit.sectionCount": (), + "QDateTimeEdit.sectionText": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCalendarPopup": ('bool',), + "QDateTimeEdit.setCalendarWidget": ('PySide2.QtWidgets.QCalendarWidget',), + "QDateTimeEdit.setCurrentSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCurrentSectionIndex": ('int',), + "QDateTimeEdit.setDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QDateTimeEdit.setDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setDateTimeRange": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QDateTimeEdit.setDisplayFormat": ('str',), + "QDateTimeEdit.setMaximumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMaximumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMaximumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setMinimumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMinimumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMinimumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setSelectedSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setTimeRange": ('PySide2.QtCore.QTime', 'PySide2.QtCore.QTime'), + "QDateTimeEdit.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTimeEdit.sizeHint": (), + "QDateTimeEdit.stepBy": ('int',), + "QDateTimeEdit.stepEnabled": (), + "QDateTimeEdit.textFromDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.time": (), + "QDateTimeEdit.timeSpec": (), + "QDateTimeEdit.validate": ('str', 'int'), + "QDateTimeEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QDesktopWidget: + "QDesktopWidget.__init__": (), + "QDesktopWidget.availableGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.isVirtualDesktop": (), + "QDesktopWidget.numScreens": (), + "QDesktopWidget.primaryScreen": (), + "QDesktopWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDesktopWidget.screen": ('int',), + "QDesktopWidget.screenCount": (), + "QDesktopWidget.screenGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.screenNumber": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDial: + "QDial.__init__": ('PySide2.QtWidgets.QWidget',), + "QDial.event": ('PySide2.QtCore.QEvent',), + "QDial.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QDial.minimumSizeHint": (), + "QDial.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.notchSize": (), + "QDial.notchTarget": (), + "QDial.notchesVisible": (), + "QDial.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDial.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDial.setNotchTarget": ('float',), + "QDial.setNotchesVisible": ('bool',), + "QDial.setWrapping": ('bool',), + "QDial.sizeHint": (), + "QDial.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QDial.wrapping": (), + + # class PySide2.QtWidgets.QDialog: + "QDialog.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QDialog.accept": (), + "QDialog.adjustPosition": ('PySide2.QtWidgets.QWidget',), + "QDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDialog.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QDialog.done": ('int',), + "QDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QDialog.exec_": (), + "QDialog.extension": (), + "QDialog.isSizeGripEnabled": (), + "QDialog.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDialog.minimumSizeHint": (), + "QDialog.open": (), + "QDialog.orientation": (), + "QDialog.reject": (), + "QDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDialog.result": (), + "QDialog.setExtension": ('PySide2.QtWidgets.QWidget',), + "QDialog.setModal": ('bool',), + "QDialog.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialog.setResult": ('int',), + "QDialog.setSizeGripEnabled": ('bool',), + "QDialog.setVisible": ('bool',), + "QDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QDialog.showExtension": ('bool',), + "QDialog.sizeHint": (), + + # class PySide2.QtWidgets.QDialogButtonBox: + "QDialogButtonBox.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('StandardButtons', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('StandardButtons', 'PySide2.QtWidgets.QWidget')], + "QDialogButtonBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole'), ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), ('str', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole')], + "QDialogButtonBox.button": ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), + "QDialogButtonBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.buttons": (), + "QDialogButtonBox.centerButtons": (), + "QDialogButtonBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.clear": (), + "QDialogButtonBox.event": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.orientation": (), + "QDialogButtonBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.setCenterButtons": ('bool',), + "QDialogButtonBox.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialogButtonBox.setStandardButtons": ('StandardButtons',), + "QDialogButtonBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.standardButtons": (), + + # class PySide2.QtWidgets.QDirModel: + "QDirModel.__init__": [('List[str]', 'Filters', 'SortFlags', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QDirModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QDirModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QDirModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filter": (), + "QDirModel.flags": ('PySide2.QtCore.QModelIndex',), + "QDirModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QDirModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QDirModel.iconProvider": (), + "QDirModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QDirModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.isReadOnly": (), + "QDirModel.lazyChildCount": (), + "QDirModel.mimeData": ('List[int]',), + "QDirModel.mimeTypes": (), + "QDirModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QDirModel.nameFilters": (), + "QDirModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QDirModel.refresh": ('PySide2.QtCore.QModelIndex',), + "QDirModel.remove": ('PySide2.QtCore.QModelIndex',), + "QDirModel.resolveSymlinks": (), + "QDirModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QDirModel.setFilter": ('Filters',), + "QDirModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QDirModel.setLazyChildCount": ('bool',), + "QDirModel.setNameFilters": ('List[str]',), + "QDirModel.setReadOnly": ('bool',), + "QDirModel.setResolveSymlinks": ('bool',), + "QDirModel.setSorting": ('SortFlags',), + "QDirModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QDirModel.sorting": (), + "QDirModel.supportedDropActions": (), + + # class PySide2.QtWidgets.QDockWidget: + "QDockWidget.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QDockWidget.allowedAreas": (), + "QDockWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QDockWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDockWidget.event": ('PySide2.QtCore.QEvent',), + "QDockWidget.features": (), + "QDockWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionDockWidget',), + "QDockWidget.isAreaAllowed": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QDockWidget.isFloating": (), + "QDockWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDockWidget.setAllowedAreas": ('DockWidgetAreas',), + "QDockWidget.setFeatures": ('DockWidgetFeatures',), + "QDockWidget.setFloating": ('bool',), + "QDockWidget.setTitleBarWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.titleBarWidget": (), + "QDockWidget.toggleViewAction": (), + "QDockWidget.widget": (), + + # class PySide2.QtWidgets.QDoubleSpinBox: + "QDoubleSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QDoubleSpinBox.cleanText": (), + "QDoubleSpinBox.decimals": (), + "QDoubleSpinBox.fixup": ('str',), + "QDoubleSpinBox.maximum": (), + "QDoubleSpinBox.minimum": (), + "QDoubleSpinBox.prefix": (), + "QDoubleSpinBox.setDecimals": ('int',), + "QDoubleSpinBox.setMaximum": ('float',), + "QDoubleSpinBox.setMinimum": ('float',), + "QDoubleSpinBox.setPrefix": ('str',), + "QDoubleSpinBox.setRange": ('float', 'float'), + "QDoubleSpinBox.setSingleStep": ('float',), + "QDoubleSpinBox.setSuffix": ('str',), + "QDoubleSpinBox.setValue": ('float',), + "QDoubleSpinBox.singleStep": (), + "QDoubleSpinBox.suffix": (), + "QDoubleSpinBox.textFromValue": ('float',), + "QDoubleSpinBox.validate": ('str', 'int'), + "QDoubleSpinBox.value": (), + "QDoubleSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QErrorMessage: + "QErrorMessage.__init__": ('PySide2.QtWidgets.QWidget',), + "QErrorMessage.changeEvent": ('PySide2.QtCore.QEvent',), + "QErrorMessage.done": ('int',), + "QErrorMessage.qtHandler": (), + "QErrorMessage.showMessage": [('str',), ('str', 'str')], + + # class PySide2.QtWidgets.QFileDialog: + "QFileDialog.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str')], + "QFileDialog.accept": (), + "QFileDialog.acceptMode": (), + "QFileDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFileDialog.confirmOverwrite": (), + "QFileDialog.defaultSuffix": (), + "QFileDialog.directory": (), + "QFileDialog.directoryUrl": (), + "QFileDialog.done": ('int',), + "QFileDialog.fileMode": (), + "QFileDialog.filter": (), + "QFileDialog.getExistingDirectory": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'Options'), + "QFileDialog.getExistingDirectoryUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'Options', 'List[str]'), + "QFileDialog.getOpenFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getOpenFileNames": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getOpenFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'List[str]'), + "QFileDialog.getOpenFileUrls": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'List[str]'), + "QFileDialog.getSaveFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getSaveFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'List[str]'), + "QFileDialog.history": (), + "QFileDialog.iconProvider": (), + "QFileDialog.isNameFilterDetailsVisible": (), + "QFileDialog.isReadOnly": (), + "QFileDialog.itemDelegate": (), + "QFileDialog.labelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel',), + "QFileDialog.mimeTypeFilters": (), + "QFileDialog.nameFilters": (), + "QFileDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFileDialog.options": (), + "QFileDialog.proxyModel": (), + "QFileDialog.resolveSymlinks": (), + "QFileDialog.restoreState": ('PySide2.QtCore.QByteArray',), + "QFileDialog.saveState": (), + "QFileDialog.selectFile": ('str',), + "QFileDialog.selectMimeTypeFilter": ('str',), + "QFileDialog.selectNameFilter": ('str',), + "QFileDialog.selectUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.selectedFiles": (), + "QFileDialog.selectedMimeTypeFilter": (), + "QFileDialog.selectedNameFilter": (), + "QFileDialog.selectedUrls": (), + "QFileDialog.setAcceptMode": ('PySide2.QtWidgets.QFileDialog.AcceptMode',), + "QFileDialog.setConfirmOverwrite": ('bool',), + "QFileDialog.setDefaultSuffix": ('str',), + "QFileDialog.setDirectory": [('PySide2.QtCore.QDir',), ('str',)], + "QFileDialog.setDirectoryUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.setFileMode": ('PySide2.QtWidgets.QFileDialog.FileMode',), + "QFileDialog.setFilter": ('Filters',), + "QFileDialog.setHistory": ('List[str]',), + "QFileDialog.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileDialog.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QFileDialog.setLabelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel', 'str'), + "QFileDialog.setMimeTypeFilters": ('List[str]',), + "QFileDialog.setNameFilter": ('str',), + "QFileDialog.setNameFilterDetailsVisible": ('bool',), + "QFileDialog.setNameFilters": ('List[str]',), + "QFileDialog.setOption": ('PySide2.QtWidgets.QFileDialog.Option', 'bool'), + "QFileDialog.setOptions": ('Options',), + "QFileDialog.setProxyModel": ('PySide2.QtCore.QAbstractProxyModel',), + "QFileDialog.setReadOnly": ('bool',), + "QFileDialog.setResolveSymlinks": ('bool',), + "QFileDialog.setSidebarUrls": ('list',), + "QFileDialog.setSupportedSchemes": ('List[str]',), + "QFileDialog.setViewMode": ('PySide2.QtWidgets.QFileDialog.ViewMode',), + "QFileDialog.setVisible": ('bool',), + "QFileDialog.sidebarUrls": (), + "QFileDialog.supportedSchemes": (), + "QFileDialog.testOption": ('PySide2.QtWidgets.QFileDialog.Option',), + "QFileDialog.viewMode": (), + + # class PySide2.QtWidgets.QFileIconProvider: + "QFileIconProvider.__init__": (), + "QFileIconProvider.icon": [('PySide2.QtCore.QFileInfo',), ('PySide2.QtWidgets.QFileIconProvider.IconType',)], + "QFileIconProvider.options": (), + "QFileIconProvider.setOptions": ('Options',), + "QFileIconProvider.type": ('PySide2.QtCore.QFileInfo',), + + # class PySide2.QtWidgets.QFileSystemModel: + "QFileSystemModel.__init__": ('PySide2.QtCore.QObject',), + "QFileSystemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QFileSystemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.event": ('PySide2.QtCore.QEvent',), + "QFileSystemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filter": (), + "QFileSystemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QFileSystemModel.iconProvider": (), + "QFileSystemModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QFileSystemModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.isReadOnly": (), + "QFileSystemModel.lastModified": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.mimeData": ('List[int]',), + "QFileSystemModel.mimeTypes": (), + "QFileSystemModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QFileSystemModel.myComputer": ('int',), + "QFileSystemModel.nameFilterDisables": (), + "QFileSystemModel.nameFilters": (), + "QFileSystemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QFileSystemModel.remove": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.resolveSymlinks": (), + "QFileSystemModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.rootDirectory": (), + "QFileSystemModel.rootPath": (), + "QFileSystemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QFileSystemModel.setFilter": ('Filters',), + "QFileSystemModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileSystemModel.setNameFilterDisables": ('bool',), + "QFileSystemModel.setNameFilters": ('List[str]',), + "QFileSystemModel.setReadOnly": ('bool',), + "QFileSystemModel.setResolveSymlinks": ('bool',), + "QFileSystemModel.setRootPath": ('str',), + "QFileSystemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.size": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QFileSystemModel.supportedDropActions": (), + "QFileSystemModel.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QFileSystemModel.type": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtWidgets.QFocusFrame: + "QFocusFrame.__init__": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.event": ('PySide2.QtCore.QEvent',), + "QFocusFrame.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFocusFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QFocusFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFocusFrame.setWidget": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.widget": (), + + # class PySide2.QtWidgets.QFontComboBox: + "QFontComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QFontComboBox.currentFont": (), + "QFontComboBox.event": ('PySide2.QtCore.QEvent',), + "QFontComboBox.fontFilters": (), + "QFontComboBox.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontComboBox.setFontFilters": ('FontFilters',), + "QFontComboBox.setWritingSystem": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontComboBox.sizeHint": (), + "QFontComboBox.writingSystem": (), + + # class PySide2.QtWidgets.QFontDialog: + "QFontDialog.__init__": [('PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QFontDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFontDialog.currentFont": (), + "QFontDialog.done": ('int',), + "QFontDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFontDialog.getFont": [('bool', 'PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget', 'str', 'FontDialogOptions'), ('bool', 'PySide2.QtWidgets.QWidget')], + "QFontDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFontDialog.options": (), + "QFontDialog.selectedFont": (), + "QFontDialog.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontDialog.setOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption', 'bool'), + "QFontDialog.setOptions": ('FontDialogOptions',), + "QFontDialog.setVisible": ('bool',), + "QFontDialog.testOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption',), + + # class PySide2.QtWidgets.QFormLayout: + "QFormLayout.__init__": ('PySide2.QtWidgets.QWidget',), + "QFormLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QFormLayout.addRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QLayout'), ('str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.count": (), + "QFormLayout.expandingDirections": (), + "QFormLayout.fieldGrowthPolicy": (), + "QFormLayout.formAlignment": (), + "QFormLayout.getItemPosition": ('int', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getLayoutPosition": ('PySide2.QtWidgets.QLayout', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getWidgetPosition": ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.hasHeightForWidth": (), + "QFormLayout.heightForWidth": ('int',), + "QFormLayout.horizontalSpacing": (), + "QFormLayout.insertRow": [('int', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('int', 'str', 'PySide2.QtWidgets.QLayout'), ('int', 'str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.invalidate": (), + "QFormLayout.itemAt": [('int',), ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole')], + "QFormLayout.labelAlignment": (), + "QFormLayout.labelForField": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QFormLayout.minimumSize": (), + "QFormLayout.removeRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QFormLayout.rowCount": (), + "QFormLayout.rowWrapPolicy": (), + "QFormLayout.setFieldGrowthPolicy": ('PySide2.QtWidgets.QFormLayout.FieldGrowthPolicy',), + "QFormLayout.setFormAlignment": ('Alignment',), + "QFormLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QFormLayout.setHorizontalSpacing": ('int',), + "QFormLayout.setItem": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayoutItem'), + "QFormLayout.setLabelAlignment": ('Alignment',), + "QFormLayout.setLayout": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayout'), + "QFormLayout.setRowWrapPolicy": ('PySide2.QtWidgets.QFormLayout.RowWrapPolicy',), + "QFormLayout.setSpacing": ('int',), + "QFormLayout.setVerticalSpacing": ('int',), + "QFormLayout.setWidget": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QWidget'), + "QFormLayout.sizeHint": (), + "QFormLayout.spacing": (), + "QFormLayout.takeAt": ('int',), + "QFormLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QFrame: + "QFrame.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QFrame.changeEvent": ('PySide2.QtCore.QEvent',), + "QFrame.drawFrame": ('PySide2.QtGui.QPainter',), + "QFrame.event": ('PySide2.QtCore.QEvent',), + "QFrame.frameRect": (), + "QFrame.frameShadow": (), + "QFrame.frameShape": (), + "QFrame.frameStyle": (), + "QFrame.frameWidth": (), + "QFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QFrame.lineWidth": (), + "QFrame.midLineWidth": (), + "QFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFrame.setFrameRect": ('PySide2.QtCore.QRect',), + "QFrame.setFrameShadow": ('PySide2.QtWidgets.QFrame.Shadow',), + "QFrame.setFrameShape": ('PySide2.QtWidgets.QFrame.Shape',), + "QFrame.setFrameStyle": ('int',), + "QFrame.setLineWidth": ('int',), + "QFrame.setMidLineWidth": ('int',), + "QFrame.sizeHint": (), + + # class PySide2.QtWidgets.QGesture: + "QGesture.__init__": ('PySide2.QtCore.QObject',), + "QGesture.gestureCancelPolicy": (), + "QGesture.gestureType": (), + "QGesture.hasHotSpot": (), + "QGesture.hotSpot": (), + "QGesture.setGestureCancelPolicy": ('PySide2.QtWidgets.QGesture.GestureCancelPolicy',), + "QGesture.setHotSpot": ('PySide2.QtCore.QPointF',), + "QGesture.state": (), + "QGesture.unsetHotSpot": (), + + # class PySide2.QtWidgets.QGestureEvent: + "QGestureEvent.__init__": ('list',), + "QGestureEvent.accept": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.activeGestures": (), + "QGestureEvent.canceledGestures": (), + "QGestureEvent.gesture": ('PySide2.QtCore.Qt.GestureType',), + "QGestureEvent.gestures": (), + "QGestureEvent.ignore": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.isAccepted": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.mapToGraphicsScene": ('PySide2.QtCore.QPointF',), + "QGestureEvent.setAccepted": [('PySide2.QtCore.Qt.GestureType', 'bool'), ('PySide2.QtWidgets.QGesture', 'bool'), ('bool',)], + "QGestureEvent.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGestureEvent.widget": (), + + # class PySide2.QtWidgets.QGestureRecognizer: + "QGestureRecognizer.__init__": (), + "QGestureRecognizer.create": ('PySide2.QtCore.QObject',), + "QGestureRecognizer.recognize": ('PySide2.QtWidgets.QGesture', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGestureRecognizer.registerRecognizer": ('PySide2.QtWidgets.QGestureRecognizer',), + "QGestureRecognizer.reset": ('PySide2.QtWidgets.QGesture',), + "QGestureRecognizer.unregisterRecognizer": ('PySide2.QtCore.Qt.GestureType',), + + # class PySide2.QtWidgets.QGraphicsAnchor: + "QGraphicsAnchor.setSizePolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QGraphicsAnchor.setSpacing": ('float',), + "QGraphicsAnchor.sizePolicy": (), + "QGraphicsAnchor.spacing": (), + "QGraphicsAnchor.unsetSpacing": (), + + # class PySide2.QtWidgets.QGraphicsAnchorLayout: + "QGraphicsAnchorLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsAnchorLayout.addAnchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.addAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'Orientations'), + "QGraphicsAnchorLayout.addCornerAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner'), + "QGraphicsAnchorLayout.anchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.count": (), + "QGraphicsAnchorLayout.horizontalSpacing": (), + "QGraphicsAnchorLayout.invalidate": (), + "QGraphicsAnchorLayout.itemAt": ('int',), + "QGraphicsAnchorLayout.removeAt": ('int',), + "QGraphicsAnchorLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsAnchorLayout.setHorizontalSpacing": ('float',), + "QGraphicsAnchorLayout.setSpacing": ('float',), + "QGraphicsAnchorLayout.setVerticalSpacing": ('float',), + "QGraphicsAnchorLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsAnchorLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsBlurEffect: + "QGraphicsBlurEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsBlurEffect.blurHints": (), + "QGraphicsBlurEffect.blurRadius": (), + "QGraphicsBlurEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsBlurEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsBlurEffect.setBlurHints": ('BlurHints',), + "QGraphicsBlurEffect.setBlurRadius": ('float',), + + # class PySide2.QtWidgets.QGraphicsColorizeEffect: + "QGraphicsColorizeEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsColorizeEffect.color": (), + "QGraphicsColorizeEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsColorizeEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsColorizeEffect.setStrength": ('float',), + "QGraphicsColorizeEffect.strength": (), + + # class PySide2.QtWidgets.QGraphicsDropShadowEffect: + "QGraphicsDropShadowEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsDropShadowEffect.blurRadius": (), + "QGraphicsDropShadowEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsDropShadowEffect.color": (), + "QGraphicsDropShadowEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsDropShadowEffect.offset": (), + "QGraphicsDropShadowEffect.setBlurRadius": ('float',), + "QGraphicsDropShadowEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsDropShadowEffect.setOffset": [('PySide2.QtCore.QPointF',), ('float',), ('float', 'float')], + "QGraphicsDropShadowEffect.setXOffset": ('float',), + "QGraphicsDropShadowEffect.setYOffset": ('float',), + "QGraphicsDropShadowEffect.xOffset": (), + "QGraphicsDropShadowEffect.yOffset": (), + + # class PySide2.QtWidgets.QGraphicsEffect: + "QGraphicsEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsEffect.boundingRect": (), + "QGraphicsEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.drawSource": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.isEnabled": (), + "QGraphicsEffect.setEnabled": ('bool',), + "QGraphicsEffect.sourceBoundingRect": ('PySide2.QtCore.Qt.CoordinateSystem',), + "QGraphicsEffect.sourceChanged": ('ChangeFlags',), + "QGraphicsEffect.sourceIsPixmap": (), + "QGraphicsEffect.sourcePixmap": ('PySide2.QtCore.Qt.CoordinateSystem', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QGraphicsEffect.PixmapPadMode'), + "QGraphicsEffect.update": (), + "QGraphicsEffect.updateBoundingRect": (), + + # class PySide2.QtWidgets.QGraphicsEllipseItem: + "QGraphicsEllipseItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsEllipseItem.boundingRect": (), + "QGraphicsEllipseItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsEllipseItem.extension": ('Any',), + "QGraphicsEllipseItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsEllipseItem.opaqueArea": (), + "QGraphicsEllipseItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsEllipseItem.rect": (), + "QGraphicsEllipseItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsEllipseItem.setSpanAngle": ('int',), + "QGraphicsEllipseItem.setStartAngle": ('int',), + "QGraphicsEllipseItem.shape": (), + "QGraphicsEllipseItem.spanAngle": (), + "QGraphicsEllipseItem.startAngle": (), + "QGraphicsEllipseItem.type": (), + + # class PySide2.QtWidgets.QGraphicsGridLayout: + "QGraphicsGridLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.addItem": [('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'int', 'int', 'Alignment')], + "QGraphicsGridLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.columnAlignment": ('int',), + "QGraphicsGridLayout.columnCount": (), + "QGraphicsGridLayout.columnMaximumWidth": ('int',), + "QGraphicsGridLayout.columnMinimumWidth": ('int',), + "QGraphicsGridLayout.columnPreferredWidth": ('int',), + "QGraphicsGridLayout.columnSpacing": ('int',), + "QGraphicsGridLayout.columnStretchFactor": ('int',), + "QGraphicsGridLayout.count": (), + "QGraphicsGridLayout.horizontalSpacing": (), + "QGraphicsGridLayout.invalidate": (), + "QGraphicsGridLayout.itemAt": [('int',), ('int', 'int')], + "QGraphicsGridLayout.removeAt": ('int',), + "QGraphicsGridLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.rowAlignment": ('int',), + "QGraphicsGridLayout.rowCount": (), + "QGraphicsGridLayout.rowMaximumHeight": ('int',), + "QGraphicsGridLayout.rowMinimumHeight": ('int',), + "QGraphicsGridLayout.rowPreferredHeight": ('int',), + "QGraphicsGridLayout.rowSpacing": ('int',), + "QGraphicsGridLayout.rowStretchFactor": ('int',), + "QGraphicsGridLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'Alignment'), + "QGraphicsGridLayout.setColumnAlignment": ('int', 'Alignment'), + "QGraphicsGridLayout.setColumnFixedWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMaximumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMinimumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnPreferredWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnSpacing": ('int', 'float'), + "QGraphicsGridLayout.setColumnStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsGridLayout.setHorizontalSpacing": ('float',), + "QGraphicsGridLayout.setRowAlignment": ('int', 'Alignment'), + "QGraphicsGridLayout.setRowFixedHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMaximumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMinimumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowPreferredHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowSpacing": ('int', 'float'), + "QGraphicsGridLayout.setRowStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setSpacing": ('float',), + "QGraphicsGridLayout.setVerticalSpacing": ('float',), + "QGraphicsGridLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsItem: + "QGraphicsItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.acceptDrops": (), + "QGraphicsItem.acceptHoverEvents": (), + "QGraphicsItem.acceptTouchEvents": (), + "QGraphicsItem.acceptedMouseButtons": (), + "QGraphicsItem.addToIndex": (), + "QGraphicsItem.advance": ('int',), + "QGraphicsItem.boundingRect": (), + "QGraphicsItem.boundingRegion": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.boundingRegionGranularity": (), + "QGraphicsItem.cacheMode": (), + "QGraphicsItem.childItems": (), + "QGraphicsItem.childrenBoundingRect": (), + "QGraphicsItem.clearFocus": (), + "QGraphicsItem.clipPath": (), + "QGraphicsItem.collidesWithItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidesWithPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidingItems": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsItem.commonAncestorItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsItem.cursor": (), + "QGraphicsItem.data": ('int',), + "QGraphicsItem.deviceTransform": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.effectiveOpacity": (), + "QGraphicsItem.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsItem.extension": ('Any',), + "QGraphicsItem.filtersChildEvents": (), + "QGraphicsItem.flags": (), + "QGraphicsItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusItem": (), + "QGraphicsItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusProxy": (), + "QGraphicsItem.focusScopeItem": (), + "QGraphicsItem.grabKeyboard": (), + "QGraphicsItem.grabMouse": (), + "QGraphicsItem.graphicsEffect": (), + "QGraphicsItem.group": (), + "QGraphicsItem.handlesChildEvents": (), + "QGraphicsItem.hasCursor": (), + "QGraphicsItem.hasFocus": (), + "QGraphicsItem.hide": (), + "QGraphicsItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsItem.inputMethodHints": (), + "QGraphicsItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsItem.installSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isActive": (), + "QGraphicsItem.isAncestorOf": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isBlockedByModalPanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isClipped": (), + "QGraphicsItem.isEnabled": (), + "QGraphicsItem.isObscured": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isPanel": (), + "QGraphicsItem.isSelected": (), + "QGraphicsItem.isUnderMouse": (), + "QGraphicsItem.isVisible": (), + "QGraphicsItem.isVisibleTo": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isWidget": (), + "QGraphicsItem.isWindow": (), + "QGraphicsItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsItem.itemTransform": ('PySide2.QtWidgets.QGraphicsItem', 'bool'), + "QGraphicsItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.mapFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapToParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.matrix": (), + "QGraphicsItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.moveBy": ('float', 'float'), + "QGraphicsItem.opacity": (), + "QGraphicsItem.opaqueArea": (), + "QGraphicsItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItem.panel": (), + "QGraphicsItem.panelModality": (), + "QGraphicsItem.parentItem": (), + "QGraphicsItem.parentObject": (), + "QGraphicsItem.parentWidget": (), + "QGraphicsItem.pos": (), + "QGraphicsItem.prepareGeometryChange": (), + "QGraphicsItem.removeFromIndex": (), + "QGraphicsItem.removeSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.resetMatrix": (), + "QGraphicsItem.resetTransform": (), + "QGraphicsItem.rotation": (), + "QGraphicsItem.scale": (), + "QGraphicsItem.scene": (), + "QGraphicsItem.sceneBoundingRect": (), + "QGraphicsItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsItem.sceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsItem.sceneMatrix": (), + "QGraphicsItem.scenePos": (), + "QGraphicsItem.sceneTransform": (), + "QGraphicsItem.scroll": ('float', 'float', 'PySide2.QtCore.QRectF'), + "QGraphicsItem.setAcceptDrops": ('bool',), + "QGraphicsItem.setAcceptHoverEvents": ('bool',), + "QGraphicsItem.setAcceptTouchEvents": ('bool',), + "QGraphicsItem.setAcceptedMouseButtons": ('MouseButtons',), + "QGraphicsItem.setActive": ('bool',), + "QGraphicsItem.setBoundingRegionGranularity": ('float',), + "QGraphicsItem.setCacheMode": ('PySide2.QtWidgets.QGraphicsItem.CacheMode', 'PySide2.QtCore.QSize'), + "QGraphicsItem.setCursor": ('PySide2.QtGui.QCursor',), + "QGraphicsItem.setData": ('int', 'Any'), + "QGraphicsItem.setEnabled": ('bool',), + "QGraphicsItem.setFiltersChildEvents": ('bool',), + "QGraphicsItem.setFlag": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemFlag', 'bool'), + "QGraphicsItem.setFlags": ('GraphicsItemFlags',), + "QGraphicsItem.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsItem.setFocusProxy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QGraphicsItem.setGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsItem.setHandlesChildEvents": ('bool',), + "QGraphicsItem.setInputMethodHints": ('InputMethodHints',), + "QGraphicsItem.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsItem.setOpacity": ('float',), + "QGraphicsItem.setPanelModality": ('PySide2.QtWidgets.QGraphicsItem.PanelModality',), + "QGraphicsItem.setParentItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setPos": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setRotation": ('float',), + "QGraphicsItem.setScale": ('float',), + "QGraphicsItem.setSelected": ('bool',), + "QGraphicsItem.setToolTip": ('str',), + "QGraphicsItem.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsItem.setTransformOriginPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setTransformations": ('list',), + "QGraphicsItem.setVisible": ('bool',), + "QGraphicsItem.setX": ('float',), + "QGraphicsItem.setY": ('float',), + "QGraphicsItem.setZValue": ('float',), + "QGraphicsItem.shape": (), + "QGraphicsItem.show": (), + "QGraphicsItem.stackBefore": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.toGraphicsObject": (), + "QGraphicsItem.toolTip": (), + "QGraphicsItem.topLevelItem": (), + "QGraphicsItem.topLevelWidget": (), + "QGraphicsItem.transform": (), + "QGraphicsItem.transformOriginPoint": (), + "QGraphicsItem.transformations": (), + "QGraphicsItem.type": (), + "QGraphicsItem.ungrabKeyboard": (), + "QGraphicsItem.ungrabMouse": (), + "QGraphicsItem.unsetCursor": (), + "QGraphicsItem.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.updateMicroFocus": (), + "QGraphicsItem.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsItem.window": (), + "QGraphicsItem.x": (), + "QGraphicsItem.y": (), + "QGraphicsItem.zValue": (), + + # class PySide2.QtWidgets.QGraphicsItemAnimation: + "QGraphicsItemAnimation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsItemAnimation.afterAnimationStep": ('float',), + "QGraphicsItemAnimation.beforeAnimationStep": ('float',), + "QGraphicsItemAnimation.clear": (), + "QGraphicsItemAnimation.horizontalScaleAt": ('float',), + "QGraphicsItemAnimation.horizontalShearAt": ('float',), + "QGraphicsItemAnimation.item": (), + "QGraphicsItemAnimation.matrixAt": ('float',), + "QGraphicsItemAnimation.posAt": ('float',), + "QGraphicsItemAnimation.posList": (), + "QGraphicsItemAnimation.reset": (), + "QGraphicsItemAnimation.rotationAt": ('float',), + "QGraphicsItemAnimation.rotationList": (), + "QGraphicsItemAnimation.scaleList": (), + "QGraphicsItemAnimation.setItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemAnimation.setPosAt": ('float', 'PySide2.QtCore.QPointF'), + "QGraphicsItemAnimation.setRotationAt": ('float', 'float'), + "QGraphicsItemAnimation.setScaleAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setShearAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setStep": ('float',), + "QGraphicsItemAnimation.setTimeLine": ('PySide2.QtCore.QTimeLine',), + "QGraphicsItemAnimation.setTranslationAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.shearList": (), + "QGraphicsItemAnimation.timeLine": (), + "QGraphicsItemAnimation.translationList": (), + "QGraphicsItemAnimation.verticalScaleAt": ('float',), + "QGraphicsItemAnimation.verticalShearAt": ('float',), + "QGraphicsItemAnimation.xTranslationAt": ('float',), + "QGraphicsItemAnimation.yTranslationAt": ('float',), + + # class PySide2.QtWidgets.QGraphicsItemGroup: + "QGraphicsItemGroup.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.addToGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.boundingRect": (), + "QGraphicsItemGroup.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.opaqueArea": (), + "QGraphicsItemGroup.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItemGroup.removeFromGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.type": (), + + # class PySide2.QtWidgets.QGraphicsLayout: + "QGraphicsLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.activate": (), + "QGraphicsLayout.addChildLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.count": (), + "QGraphicsLayout.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.instantInvalidatePropagation": (), + "QGraphicsLayout.invalidate": (), + "QGraphicsLayout.isActivated": (), + "QGraphicsLayout.itemAt": ('int',), + "QGraphicsLayout.removeAt": ('int',), + "QGraphicsLayout.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.setInstantInvalidatePropagation": ('bool',), + "QGraphicsLayout.updateGeometry": (), + "QGraphicsLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QGraphicsLayoutItem: + "QGraphicsLayoutItem.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'bool'), + "QGraphicsLayoutItem.contentsRect": (), + "QGraphicsLayoutItem.effectiveSizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.geometry": (), + "QGraphicsLayoutItem.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayoutItem.graphicsItem": (), + "QGraphicsLayoutItem.isLayout": (), + "QGraphicsLayoutItem.maximumHeight": (), + "QGraphicsLayoutItem.maximumSize": (), + "QGraphicsLayoutItem.maximumWidth": (), + "QGraphicsLayoutItem.minimumHeight": (), + "QGraphicsLayoutItem.minimumSize": (), + "QGraphicsLayoutItem.minimumWidth": (), + "QGraphicsLayoutItem.ownedByLayout": (), + "QGraphicsLayoutItem.parentLayoutItem": (), + "QGraphicsLayoutItem.preferredHeight": (), + "QGraphicsLayoutItem.preferredSize": (), + "QGraphicsLayoutItem.preferredWidth": (), + "QGraphicsLayoutItem.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLayoutItem.setGraphicsItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLayoutItem.setMaximumHeight": ('float',), + "QGraphicsLayoutItem.setMaximumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMaximumWidth": ('float',), + "QGraphicsLayoutItem.setMinimumHeight": ('float',), + "QGraphicsLayoutItem.setMinimumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMinimumWidth": ('float',), + "QGraphicsLayoutItem.setOwnedByLayout": ('bool',), + "QGraphicsLayoutItem.setParentLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayoutItem.setPreferredHeight": ('float',), + "QGraphicsLayoutItem.setPreferredSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setPreferredWidth": ('float',), + "QGraphicsLayoutItem.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QGraphicsLayoutItem.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.sizePolicy": (), + "QGraphicsLayoutItem.updateGeometry": (), + + # class PySide2.QtWidgets.QGraphicsLineItem: + "QGraphicsLineItem.__init__": [('PySide2.QtCore.QLineF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsLineItem.boundingRect": (), + "QGraphicsLineItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsLineItem.extension": ('Any',), + "QGraphicsLineItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLineItem.line": (), + "QGraphicsLineItem.opaqueArea": (), + "QGraphicsLineItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsLineItem.pen": (), + "QGraphicsLineItem.setLine": [('PySide2.QtCore.QLineF',), ('float', 'float', 'float', 'float')], + "QGraphicsLineItem.setPen": ('PySide2.QtGui.QPen',), + "QGraphicsLineItem.shape": (), + "QGraphicsLineItem.type": (), + + # class PySide2.QtWidgets.QGraphicsLinearLayout: + "QGraphicsLinearLayout.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QGraphicsLayoutItem'), ('PySide2.QtWidgets.QGraphicsLayoutItem',)], + "QGraphicsLinearLayout.addItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.addStretch": ('int',), + "QGraphicsLinearLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.count": (), + "QGraphicsLinearLayout.dump": ('int',), + "QGraphicsLinearLayout.insertItem": ('int', 'PySide2.QtWidgets.QGraphicsLayoutItem'), + "QGraphicsLinearLayout.insertStretch": ('int', 'int'), + "QGraphicsLinearLayout.invalidate": (), + "QGraphicsLinearLayout.itemAt": ('int',), + "QGraphicsLinearLayout.itemSpacing": ('int',), + "QGraphicsLinearLayout.orientation": (), + "QGraphicsLinearLayout.removeAt": ('int',), + "QGraphicsLinearLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'Alignment'), + "QGraphicsLinearLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLinearLayout.setItemSpacing": ('int', 'float'), + "QGraphicsLinearLayout.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsLinearLayout.setSpacing": ('float',), + "QGraphicsLinearLayout.setStretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int'), + "QGraphicsLinearLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLinearLayout.spacing": (), + "QGraphicsLinearLayout.stretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + + # class PySide2.QtWidgets.QGraphicsObject: + "QGraphicsObject.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsObject.event": ('PySide2.QtCore.QEvent',), + "QGraphicsObject.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'GestureFlags'), + "QGraphicsObject.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QGraphicsObject.updateMicroFocus": (), + + # class PySide2.QtWidgets.QGraphicsOpacityEffect: + "QGraphicsOpacityEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsOpacityEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsOpacityEffect.opacity": (), + "QGraphicsOpacityEffect.opacityMask": (), + "QGraphicsOpacityEffect.setOpacity": ('float',), + "QGraphicsOpacityEffect.setOpacityMask": ('PySide2.QtGui.QBrush',), + + # class PySide2.QtWidgets.QGraphicsPathItem: + "QGraphicsPathItem.__init__": [('PySide2.QtGui.QPainterPath', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPathItem.boundingRect": (), + "QGraphicsPathItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPathItem.extension": ('Any',), + "QGraphicsPathItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPathItem.opaqueArea": (), + "QGraphicsPathItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPathItem.path": (), + "QGraphicsPathItem.setPath": ('PySide2.QtGui.QPainterPath',), + "QGraphicsPathItem.shape": (), + "QGraphicsPathItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPixmapItem: + "QGraphicsPixmapItem.__init__": [('PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPixmapItem.boundingRect": (), + "QGraphicsPixmapItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPixmapItem.extension": ('Any',), + "QGraphicsPixmapItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPixmapItem.offset": (), + "QGraphicsPixmapItem.opaqueArea": (), + "QGraphicsPixmapItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPixmapItem.pixmap": (), + "QGraphicsPixmapItem.setOffset": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsPixmapItem.setPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsPixmapItem.setShapeMode": ('PySide2.QtWidgets.QGraphicsPixmapItem.ShapeMode',), + "QGraphicsPixmapItem.setTransformationMode": ('PySide2.QtCore.Qt.TransformationMode',), + "QGraphicsPixmapItem.shape": (), + "QGraphicsPixmapItem.shapeMode": (), + "QGraphicsPixmapItem.transformationMode": (), + "QGraphicsPixmapItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPolygonItem: + "QGraphicsPolygonItem.__init__": [('PySide2.QtGui.QPolygonF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPolygonItem.boundingRect": (), + "QGraphicsPolygonItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPolygonItem.extension": ('Any',), + "QGraphicsPolygonItem.fillRule": (), + "QGraphicsPolygonItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPolygonItem.opaqueArea": (), + "QGraphicsPolygonItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPolygonItem.polygon": (), + "QGraphicsPolygonItem.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QGraphicsPolygonItem.setPolygon": ('PySide2.QtGui.QPolygonF',), + "QGraphicsPolygonItem.shape": (), + "QGraphicsPolygonItem.type": (), + + # class PySide2.QtWidgets.QGraphicsProxyWidget: + "QGraphicsProxyWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'WindowFlags'), + "QGraphicsProxyWidget.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsProxyWidget.createProxyForChildWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsProxyWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.focusNextPrevChild": ('bool',), + "QGraphicsProxyWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsProxyWidget.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsProxyWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsProxyWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsProxyWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.newProxyWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsProxyWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsProxyWidget.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsProxyWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsProxyWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsProxyWidget.subWidgetRect": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.type": (), + "QGraphicsProxyWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsProxyWidget.widget": (), + + # class PySide2.QtWidgets.QGraphicsRectItem: + "QGraphicsRectItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsRectItem.boundingRect": (), + "QGraphicsRectItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsRectItem.extension": ('Any',), + "QGraphicsRectItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsRectItem.opaqueArea": (), + "QGraphicsRectItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsRectItem.rect": (), + "QGraphicsRectItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsRectItem.shape": (), + "QGraphicsRectItem.type": (), + + # class PySide2.QtWidgets.QGraphicsRotation: + "QGraphicsRotation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsRotation.angle": (), + "QGraphicsRotation.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsRotation.axis": (), + "QGraphicsRotation.origin": (), + "QGraphicsRotation.setAngle": ('float',), + "QGraphicsRotation.setAxis": [('PySide2.QtCore.Qt.Axis',), ('PySide2.QtGui.QVector3D',)], + "QGraphicsRotation.setOrigin": ('PySide2.QtGui.QVector3D',), + + # class PySide2.QtWidgets.QGraphicsScale: + "QGraphicsScale.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsScale.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsScale.origin": (), + "QGraphicsScale.setOrigin": ('PySide2.QtGui.QVector3D',), + "QGraphicsScale.setXScale": ('float',), + "QGraphicsScale.setYScale": ('float',), + "QGraphicsScale.setZScale": ('float',), + "QGraphicsScale.xScale": (), + "QGraphicsScale.yScale": (), + "QGraphicsScale.zScale": (), + + # class PySide2.QtWidgets.QGraphicsScene: + "QGraphicsScene.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QObject'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.QObject')], + "QGraphicsScene.activePanel": (), + "QGraphicsScene.activeWindow": (), + "QGraphicsScene.addEllipse": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.addLine": [('PySide2.QtCore.QLineF', 'PySide2.QtGui.QPen'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen')], + "QGraphicsScene.addPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsScene.addPolygon": ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addRect": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addSimpleText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addWidget": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QGraphicsScene.advance": (), + "QGraphicsScene.backgroundBrush": (), + "QGraphicsScene.bspTreeDepth": (), + "QGraphicsScene.clear": (), + "QGraphicsScene.clearFocus": (), + "QGraphicsScene.clearSelection": (), + "QGraphicsScene.collidingItems": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsScene.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsScene.createItemGroup": ('list',), + "QGraphicsScene.destroyItemGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsScene.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.event": ('PySide2.QtCore.QEvent',), + "QGraphicsScene.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.focusItem": (), + "QGraphicsScene.focusNextPrevChild": ('bool',), + "QGraphicsScene.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.font": (), + "QGraphicsScene.foregroundBrush": (), + "QGraphicsScene.hasFocus": (), + "QGraphicsScene.height": (), + "QGraphicsScene.helpEvent": ('PySide2.QtWidgets.QGraphicsSceneHelpEvent',), + "QGraphicsScene.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsScene.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsScene.invalidate": [('PySide2.QtCore.QRectF', 'SceneLayers'), ('float', 'float', 'float', 'float', 'SceneLayers')], + "QGraphicsScene.isActive": (), + "QGraphicsScene.isSortCacheEnabled": (), + "QGraphicsScene.itemAt": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTransform'), ('float', 'float', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemIndexMethod": (), + "QGraphicsScene.items": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemsBoundingRect": (), + "QGraphicsScene.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.minimumRenderSize": (), + "QGraphicsScene.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseGrabberItem": (), + "QGraphicsScene.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.palette": (), + "QGraphicsScene.removeItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.render": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), + "QGraphicsScene.sceneRect": (), + "QGraphicsScene.selectedItems": (), + "QGraphicsScene.selectionArea": (), + "QGraphicsScene.sendEvent": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.setActivePanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.setActiveWindow": ('PySide2.QtWidgets.QGraphicsWidget',), + "QGraphicsScene.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setBspTreeDepth": ('int',), + "QGraphicsScene.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsScene.setFocusItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.FocusReason'), + "QGraphicsScene.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsScene.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setItemIndexMethod": ('PySide2.QtWidgets.QGraphicsScene.ItemIndexMethod',), + "QGraphicsScene.setMinimumRenderSize": ('float',), + "QGraphicsScene.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsScene.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.setSelectionArea": [('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionOperation', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.setSortCacheEnabled": ('bool',), + "QGraphicsScene.setStickyFocus": ('bool',), + "QGraphicsScene.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsScene.stickyFocus": (), + "QGraphicsScene.style": (), + "QGraphicsScene.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.views": (), + "QGraphicsScene.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsScene.width": (), + + # class PySide2.QtWidgets.QGraphicsSceneContextMenuEvent: + "QGraphicsSceneContextMenuEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneContextMenuEvent.modifiers": (), + "QGraphicsSceneContextMenuEvent.pos": (), + "QGraphicsSceneContextMenuEvent.reason": (), + "QGraphicsSceneContextMenuEvent.scenePos": (), + "QGraphicsSceneContextMenuEvent.screenPos": (), + "QGraphicsSceneContextMenuEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneContextMenuEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setReason": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent.Reason',), + "QGraphicsSceneContextMenuEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneDragDropEvent: + "QGraphicsSceneDragDropEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneDragDropEvent.acceptProposedAction": (), + "QGraphicsSceneDragDropEvent.buttons": (), + "QGraphicsSceneDragDropEvent.dropAction": (), + "QGraphicsSceneDragDropEvent.mimeData": (), + "QGraphicsSceneDragDropEvent.modifiers": (), + "QGraphicsSceneDragDropEvent.pos": (), + "QGraphicsSceneDragDropEvent.possibleActions": (), + "QGraphicsSceneDragDropEvent.proposedAction": (), + "QGraphicsSceneDragDropEvent.scenePos": (), + "QGraphicsSceneDragDropEvent.screenPos": (), + "QGraphicsSceneDragDropEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneDragDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneDragDropEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setPossibleActions": ('DropActions',), + "QGraphicsSceneDragDropEvent.setProposedAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneDragDropEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneEvent: + "QGraphicsSceneEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneEvent.widget": (), + + # class PySide2.QtWidgets.QGraphicsSceneHelpEvent: + "QGraphicsSceneHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHelpEvent.scenePos": (), + "QGraphicsSceneHelpEvent.screenPos": (), + "QGraphicsSceneHelpEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHelpEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneHoverEvent: + "QGraphicsSceneHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHoverEvent.lastPos": (), + "QGraphicsSceneHoverEvent.lastScenePos": (), + "QGraphicsSceneHoverEvent.lastScreenPos": (), + "QGraphicsSceneHoverEvent.modifiers": (), + "QGraphicsSceneHoverEvent.pos": (), + "QGraphicsSceneHoverEvent.scenePos": (), + "QGraphicsSceneHoverEvent.screenPos": (), + "QGraphicsSceneHoverEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneHoverEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneHoverEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneMouseEvent: + "QGraphicsSceneMouseEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneMouseEvent.button": (), + "QGraphicsSceneMouseEvent.buttonDownPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScenePos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttons": (), + "QGraphicsSceneMouseEvent.flags": (), + "QGraphicsSceneMouseEvent.lastPos": (), + "QGraphicsSceneMouseEvent.lastScenePos": (), + "QGraphicsSceneMouseEvent.lastScreenPos": (), + "QGraphicsSceneMouseEvent.modifiers": (), + "QGraphicsSceneMouseEvent.pos": (), + "QGraphicsSceneMouseEvent.scenePos": (), + "QGraphicsSceneMouseEvent.screenPos": (), + "QGraphicsSceneMouseEvent.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.setButtonDownPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScenePos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPoint'), + "QGraphicsSceneMouseEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneMouseEvent.setFlags": ('MouseEventFlags',), + "QGraphicsSceneMouseEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneMouseEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setSource": ('PySide2.QtCore.Qt.MouseEventSource',), + "QGraphicsSceneMouseEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneMoveEvent: + "QGraphicsSceneMoveEvent.__init__": (), + "QGraphicsSceneMoveEvent.newPos": (), + "QGraphicsSceneMoveEvent.oldPos": (), + "QGraphicsSceneMoveEvent.setNewPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMoveEvent.setOldPos": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QGraphicsSceneResizeEvent: + "QGraphicsSceneResizeEvent.__init__": (), + "QGraphicsSceneResizeEvent.newSize": (), + "QGraphicsSceneResizeEvent.oldSize": (), + "QGraphicsSceneResizeEvent.setNewSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsSceneResizeEvent.setOldSize": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtWidgets.QGraphicsSceneWheelEvent: + "QGraphicsSceneWheelEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneWheelEvent.buttons": (), + "QGraphicsSceneWheelEvent.delta": (), + "QGraphicsSceneWheelEvent.modifiers": (), + "QGraphicsSceneWheelEvent.orientation": (), + "QGraphicsSceneWheelEvent.pos": (), + "QGraphicsSceneWheelEvent.scenePos": (), + "QGraphicsSceneWheelEvent.screenPos": (), + "QGraphicsSceneWheelEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneWheelEvent.setDelta": ('int',), + "QGraphicsSceneWheelEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneWheelEvent.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsSceneWheelEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSimpleTextItem: + "QGraphicsSimpleTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSimpleTextItem.boundingRect": (), + "QGraphicsSimpleTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsSimpleTextItem.extension": ('Any',), + "QGraphicsSimpleTextItem.font": (), + "QGraphicsSimpleTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsSimpleTextItem.opaqueArea": (), + "QGraphicsSimpleTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSimpleTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsSimpleTextItem.setText": ('str',), + "QGraphicsSimpleTextItem.shape": (), + "QGraphicsSimpleTextItem.text": (), + "QGraphicsSimpleTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTextItem: + "QGraphicsTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsTextItem.adjustSize": (), + "QGraphicsTextItem.boundingRect": (), + "QGraphicsTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsTextItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsTextItem.defaultTextColor": (), + "QGraphicsTextItem.document": (), + "QGraphicsTextItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.extension": ('Any',), + "QGraphicsTextItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.font": (), + "QGraphicsTextItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsTextItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsTextItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.opaqueArea": (), + "QGraphicsTextItem.openExternalLinks": (), + "QGraphicsTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsTextItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsTextItem.setDefaultTextColor": ('PySide2.QtGui.QColor',), + "QGraphicsTextItem.setDocument": ('PySide2.QtGui.QTextDocument',), + "QGraphicsTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsTextItem.setHtml": ('str',), + "QGraphicsTextItem.setOpenExternalLinks": ('bool',), + "QGraphicsTextItem.setPlainText": ('str',), + "QGraphicsTextItem.setTabChangesFocus": ('bool',), + "QGraphicsTextItem.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QGraphicsTextItem.setTextInteractionFlags": ('TextInteractionFlags',), + "QGraphicsTextItem.setTextWidth": ('float',), + "QGraphicsTextItem.shape": (), + "QGraphicsTextItem.tabChangesFocus": (), + "QGraphicsTextItem.textCursor": (), + "QGraphicsTextItem.textInteractionFlags": (), + "QGraphicsTextItem.textWidth": (), + "QGraphicsTextItem.toHtml": (), + "QGraphicsTextItem.toPlainText": (), + "QGraphicsTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTransform: + "QGraphicsTransform.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsTransform.update": (), + + # class PySide2.QtWidgets.QGraphicsView: + "QGraphicsView.__init__": [('PySide2.QtWidgets.QGraphicsScene', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QGraphicsView.alignment": (), + "QGraphicsView.backgroundBrush": (), + "QGraphicsView.cacheMode": (), + "QGraphicsView.centerOn": [('PySide2.QtCore.QPointF',), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float')], + "QGraphicsView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QGraphicsView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QGraphicsView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QGraphicsView.dragMode": (), + "QGraphicsView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QGraphicsView.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawItems": ('PySide2.QtGui.QPainter', 'int', 'List[PySide2.QtWidgets.QGraphicsItem]', 'List[PySide2.QtWidgets.QStyleOptionGraphicsItem]'), + "QGraphicsView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QGraphicsView.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('PySide2.QtWidgets.QGraphicsItem', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsView.event": ('PySide2.QtCore.QEvent',), + "QGraphicsView.fitInView": [('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.focusNextPrevChild": ('bool',), + "QGraphicsView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.foregroundBrush": (), + "QGraphicsView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsView.invalidateScene": ('PySide2.QtCore.QRectF', 'SceneLayers'), + "QGraphicsView.isInteractive": (), + "QGraphicsView.isTransformed": (), + "QGraphicsView.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QGraphicsView.items": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ItemSelectionMode')], + "QGraphicsView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsView.mapToScene": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('int', 'int'), ('int', 'int', 'int', 'int')], + "QGraphicsView.matrix": (), + "QGraphicsView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.optimizationFlags": (), + "QGraphicsView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGraphicsView.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.renderHints": (), + "QGraphicsView.resetCachedContent": (), + "QGraphicsView.resetMatrix": (), + "QGraphicsView.resetTransform": (), + "QGraphicsView.resizeAnchor": (), + "QGraphicsView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGraphicsView.rotate": ('float',), + "QGraphicsView.rubberBandRect": (), + "QGraphicsView.rubberBandSelectionMode": (), + "QGraphicsView.scale": ('float', 'float'), + "QGraphicsView.scene": (), + "QGraphicsView.sceneRect": (), + "QGraphicsView.scrollContentsBy": ('int', 'int'), + "QGraphicsView.setAlignment": ('Alignment',), + "QGraphicsView.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setCacheMode": ('CacheMode',), + "QGraphicsView.setDragMode": ('PySide2.QtWidgets.QGraphicsView.DragMode',), + "QGraphicsView.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setInteractive": ('bool',), + "QGraphicsView.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsView.setOptimizationFlag": ('PySide2.QtWidgets.QGraphicsView.OptimizationFlag', 'bool'), + "QGraphicsView.setOptimizationFlags": ('OptimizationFlags',), + "QGraphicsView.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QGraphicsView.setRenderHints": ('RenderHints',), + "QGraphicsView.setResizeAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setRubberBandSelectionMode": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsView.setScene": ('PySide2.QtWidgets.QGraphicsScene',), + "QGraphicsView.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsView.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsView.setTransformationAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setViewportUpdateMode": ('PySide2.QtWidgets.QGraphicsView.ViewportUpdateMode',), + "QGraphicsView.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QGraphicsView.shear": ('float', 'float'), + "QGraphicsView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsView.sizeHint": (), + "QGraphicsView.transform": (), + "QGraphicsView.transformationAnchor": (), + "QGraphicsView.translate": ('float', 'float'), + "QGraphicsView.updateScene": ('list',), + "QGraphicsView.updateSceneRect": ('PySide2.QtCore.QRectF',), + "QGraphicsView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsView.viewportTransform": (), + "QGraphicsView.viewportUpdateMode": (), + "QGraphicsView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QGraphicsWidget: + "QGraphicsWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'WindowFlags'), + "QGraphicsWidget.actions": (), + "QGraphicsWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.addActions": ('list',), + "QGraphicsWidget.adjustSize": (), + "QGraphicsWidget.autoFillBackground": (), + "QGraphicsWidget.boundingRect": (), + "QGraphicsWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.close": (), + "QGraphicsWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QGraphicsWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusNextPrevChild": ('bool',), + "QGraphicsWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusPolicy": (), + "QGraphicsWidget.focusWidget": (), + "QGraphicsWidget.font": (), + "QGraphicsWidget.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.getWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.grabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QGraphicsWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QGraphicsWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QGraphicsWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QGraphicsWidget.isActiveWindow": (), + "QGraphicsWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsWidget.layout": (), + "QGraphicsWidget.layoutDirection": (), + "QGraphicsWidget.moveEvent": ('PySide2.QtWidgets.QGraphicsSceneMoveEvent',), + "QGraphicsWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.paintWindowFrame": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.palette": (), + "QGraphicsWidget.polishEvent": (), + "QGraphicsWidget.propertyChange": ('str', 'Any'), + "QGraphicsWidget.rect": (), + "QGraphicsWidget.releaseShortcut": ('int',), + "QGraphicsWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.resize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsWidget.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QGraphicsWidget.setAutoFillBackground": ('bool',), + "QGraphicsWidget.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QGraphicsWidget.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsWidget.setGeometry": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsWidget.setLayout": ('PySide2.QtWidgets.QGraphicsLayout',), + "QGraphicsWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGraphicsWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QGraphicsWidget.setShortcutEnabled": ('int', 'bool'), + "QGraphicsWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsWidget.setTabOrder": ('PySide2.QtWidgets.QGraphicsWidget', 'PySide2.QtWidgets.QGraphicsWidget'), + "QGraphicsWidget.setWindowFlags": ('WindowFlags',), + "QGraphicsWidget.setWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setWindowTitle": ('str',), + "QGraphicsWidget.shape": (), + "QGraphicsWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsWidget.size": (), + "QGraphicsWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsWidget.style": (), + "QGraphicsWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QGraphicsWidget.type": (), + "QGraphicsWidget.ungrabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.unsetLayoutDirection": (), + "QGraphicsWidget.unsetWindowFrameMargins": (), + "QGraphicsWidget.updateGeometry": (), + "QGraphicsWidget.windowFlags": (), + "QGraphicsWidget.windowFrameEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.windowFrameGeometry": (), + "QGraphicsWidget.windowFrameRect": (), + "QGraphicsWidget.windowFrameSectionAt": ('PySide2.QtCore.QPointF',), + "QGraphicsWidget.windowTitle": (), + "QGraphicsWidget.windowType": (), + + # class PySide2.QtWidgets.QGridLayout: + "QGridLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QGridLayout.addItem": [('PySide2.QtWidgets.QLayoutItem',), ('PySide2.QtWidgets.QLayoutItem', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.addLayout": [('PySide2.QtWidgets.QLayout', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QLayout', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.cellRect": ('int', 'int'), + "QGridLayout.columnCount": (), + "QGridLayout.columnMinimumWidth": ('int',), + "QGridLayout.columnStretch": ('int',), + "QGridLayout.count": (), + "QGridLayout.expandingDirections": (), + "QGridLayout.getItemPosition": ('int', 'int', 'int', 'int', 'int'), + "QGridLayout.hasHeightForWidth": (), + "QGridLayout.heightForWidth": ('int',), + "QGridLayout.horizontalSpacing": (), + "QGridLayout.invalidate": (), + "QGridLayout.itemAt": ('int',), + "QGridLayout.itemAtPosition": ('int', 'int'), + "QGridLayout.maximumSize": (), + "QGridLayout.minimumHeightForWidth": ('int',), + "QGridLayout.minimumSize": (), + "QGridLayout.originCorner": (), + "QGridLayout.rowCount": (), + "QGridLayout.rowMinimumHeight": ('int',), + "QGridLayout.rowStretch": ('int',), + "QGridLayout.setColumnMinimumWidth": ('int', 'int'), + "QGridLayout.setColumnStretch": ('int', 'int'), + "QGridLayout.setDefaultPositioning": ('int', 'PySide2.QtCore.Qt.Orientation'), + "QGridLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QGridLayout.setHorizontalSpacing": ('int',), + "QGridLayout.setOriginCorner": ('PySide2.QtCore.Qt.Corner',), + "QGridLayout.setRowMinimumHeight": ('int', 'int'), + "QGridLayout.setRowStretch": ('int', 'int'), + "QGridLayout.setSpacing": ('int',), + "QGridLayout.setVerticalSpacing": ('int',), + "QGridLayout.sizeHint": (), + "QGridLayout.spacing": (), + "QGridLayout.takeAt": ('int',), + "QGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGroupBox: + "QGroupBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QGroupBox.alignment": (), + "QGroupBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QGroupBox.childEvent": ('PySide2.QtCore.QChildEvent',), + "QGroupBox.event": ('PySide2.QtCore.QEvent',), + "QGroupBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGroupBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionGroupBox',), + "QGroupBox.isCheckable": (), + "QGroupBox.isChecked": (), + "QGroupBox.isFlat": (), + "QGroupBox.minimumSizeHint": (), + "QGroupBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGroupBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGroupBox.setAlignment": ('int',), + "QGroupBox.setCheckable": ('bool',), + "QGroupBox.setChecked": ('bool',), + "QGroupBox.setFlat": ('bool',), + "QGroupBox.setTitle": ('str',), + "QGroupBox.title": (), + + # class PySide2.QtWidgets.QHBoxLayout: + "QHBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QHeaderView: + "QHeaderView.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), + "QHeaderView.cascadingSectionResizes": (), + "QHeaderView.count": (), + "QHeaderView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QHeaderView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QHeaderView.defaultAlignment": (), + "QHeaderView.defaultSectionSize": (), + "QHeaderView.doItemsLayout": (), + "QHeaderView.event": ('PySide2.QtCore.QEvent',), + "QHeaderView.headerDataChanged": ('PySide2.QtCore.Qt.Orientation', 'int', 'int'), + "QHeaderView.hiddenSectionCount": (), + "QHeaderView.hideSection": ('int',), + "QHeaderView.highlightSections": (), + "QHeaderView.horizontalOffset": (), + "QHeaderView.indexAt": ('PySide2.QtCore.QPoint',), + "QHeaderView.initStyleOption": [('PySide2.QtWidgets.QStyleOptionFrame',), ('PySide2.QtWidgets.QStyleOptionHeader',)], + "QHeaderView.initialize": (), + "QHeaderView.initializeSections": [(), ('int', 'int')], + "QHeaderView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.isSectionHidden": ('int',), + "QHeaderView.isSortIndicatorShown": (), + "QHeaderView.length": (), + "QHeaderView.logicalIndex": ('int',), + "QHeaderView.logicalIndexAt": [('PySide2.QtCore.QPoint',), ('int',), ('int', 'int')], + "QHeaderView.maximumSectionSize": (), + "QHeaderView.minimumSectionSize": (), + "QHeaderView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QHeaderView.moveSection": ('int', 'int'), + "QHeaderView.offset": (), + "QHeaderView.orientation": (), + "QHeaderView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QHeaderView.paintSection": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int'), + "QHeaderView.reset": (), + "QHeaderView.resetDefaultSectionSize": (), + "QHeaderView.resizeContentsPrecision": (), + "QHeaderView.resizeSection": ('int', 'int'), + "QHeaderView.resizeSections": [(), ('PySide2.QtWidgets.QHeaderView.ResizeMode',)], + "QHeaderView.restoreState": ('PySide2.QtCore.QByteArray',), + "QHeaderView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.saveState": (), + "QHeaderView.scrollContentsBy": ('int', 'int'), + "QHeaderView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QHeaderView.sectionPosition": ('int',), + "QHeaderView.sectionResizeMode": ('int',), + "QHeaderView.sectionSize": ('int',), + "QHeaderView.sectionSizeFromContents": ('int',), + "QHeaderView.sectionSizeHint": ('int',), + "QHeaderView.sectionViewportPosition": ('int',), + "QHeaderView.sectionsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsClickable": (), + "QHeaderView.sectionsHidden": (), + "QHeaderView.sectionsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsMovable": (), + "QHeaderView.sectionsMoved": (), + "QHeaderView.setCascadingSectionResizes": ('bool',), + "QHeaderView.setDefaultAlignment": ('Alignment',), + "QHeaderView.setDefaultSectionSize": ('int',), + "QHeaderView.setHighlightSections": ('bool',), + "QHeaderView.setMaximumSectionSize": ('int',), + "QHeaderView.setMinimumSectionSize": ('int',), + "QHeaderView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QHeaderView.setOffset": ('int',), + "QHeaderView.setOffsetToLastSection": (), + "QHeaderView.setOffsetToSectionPosition": ('int',), + "QHeaderView.setResizeContentsPrecision": ('int',), + "QHeaderView.setSectionHidden": ('int', 'bool'), + "QHeaderView.setSectionResizeMode": [('PySide2.QtWidgets.QHeaderView.ResizeMode',), ('int', 'PySide2.QtWidgets.QHeaderView.ResizeMode')], + "QHeaderView.setSectionsClickable": ('bool',), + "QHeaderView.setSectionsMovable": ('bool',), + "QHeaderView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QHeaderView.setSortIndicator": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QHeaderView.setSortIndicatorShown": ('bool',), + "QHeaderView.setStretchLastSection": ('bool',), + "QHeaderView.setVisible": ('bool',), + "QHeaderView.showSection": ('int',), + "QHeaderView.sizeHint": (), + "QHeaderView.sortIndicatorOrder": (), + "QHeaderView.sortIndicatorSection": (), + "QHeaderView.stretchLastSection": (), + "QHeaderView.stretchSectionCount": (), + "QHeaderView.swapSections": ('int', 'int'), + "QHeaderView.updateGeometries": (), + "QHeaderView.updateSection": ('int',), + "QHeaderView.verticalOffset": (), + "QHeaderView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QHeaderView.visualIndex": ('int',), + "QHeaderView.visualIndexAt": ('int',), + "QHeaderView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QInputDialog: + "QInputDialog.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QInputDialog.cancelButtonText": (), + "QInputDialog.comboBoxItems": (), + "QInputDialog.done": ('int',), + "QInputDialog.doubleDecimals": (), + "QInputDialog.doubleMaximum": (), + "QInputDialog.doubleMinimum": (), + "QInputDialog.doubleValue": (), + "QInputDialog.getDouble": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'float', 'float', 'float', 'int', 'bool', 'WindowFlags'), + "QInputDialog.getInt": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'int', 'int', 'int', 'int', 'bool', 'WindowFlags'), + "QInputDialog.getItem": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'List[str]', 'int', 'bool', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.getMultiLineText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.getText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QLineEdit.EchoMode', 'str', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.inputMode": (), + "QInputDialog.intMaximum": (), + "QInputDialog.intMinimum": (), + "QInputDialog.intStep": (), + "QInputDialog.intValue": (), + "QInputDialog.isComboBoxEditable": (), + "QInputDialog.labelText": (), + "QInputDialog.minimumSizeHint": (), + "QInputDialog.okButtonText": (), + "QInputDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QInputDialog.setCancelButtonText": ('str',), + "QInputDialog.setComboBoxEditable": ('bool',), + "QInputDialog.setComboBoxItems": ('List[str]',), + "QInputDialog.setDoubleDecimals": ('int',), + "QInputDialog.setDoubleMaximum": ('float',), + "QInputDialog.setDoubleMinimum": ('float',), + "QInputDialog.setDoubleRange": ('float', 'float'), + "QInputDialog.setDoubleValue": ('float',), + "QInputDialog.setInputMode": ('PySide2.QtWidgets.QInputDialog.InputMode',), + "QInputDialog.setIntMaximum": ('int',), + "QInputDialog.setIntMinimum": ('int',), + "QInputDialog.setIntRange": ('int', 'int'), + "QInputDialog.setIntStep": ('int',), + "QInputDialog.setIntValue": ('int',), + "QInputDialog.setLabelText": ('str',), + "QInputDialog.setOkButtonText": ('str',), + "QInputDialog.setOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption', 'bool'), + "QInputDialog.setTextEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QInputDialog.setTextValue": ('str',), + "QInputDialog.setVisible": ('bool',), + "QInputDialog.sizeHint": (), + "QInputDialog.testOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption',), + "QInputDialog.textEchoMode": (), + "QInputDialog.textValue": (), + + # class PySide2.QtWidgets.QItemDelegate: + "QItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.decoration": ('PySide2.QtWidgets.QStyleOptionViewItem', 'Any'), + "QItemDelegate.doCheck": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'Any'), + "QItemDelegate.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.drawCheck": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.CheckState'), + "QItemDelegate.drawDecoration": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), + "QItemDelegate.drawDisplay": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'str'), + "QItemDelegate.drawFocus": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect'), + "QItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QItemDelegate.hasClipping": (), + "QItemDelegate.itemEditorFactory": (), + "QItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.rect": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex', 'int'), + "QItemDelegate.setClipping": ('bool',), + "QItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setOptions": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QStyleOptionViewItem'), + "QItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.textRectangle": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QFont', 'str'), + "QItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QItemEditorCreatorBase: + "QItemEditorCreatorBase.__init__": (), + "QItemEditorCreatorBase.createWidget": ('PySide2.QtWidgets.QWidget',), + "QItemEditorCreatorBase.valuePropertyName": (), + + # class PySide2.QtWidgets.QItemEditorFactory: + "QItemEditorFactory.__init__": (), + "QItemEditorFactory.createEditor": ('int', 'PySide2.QtWidgets.QWidget'), + "QItemEditorFactory.defaultFactory": (), + "QItemEditorFactory.registerEditor": ('int', 'PySide2.QtWidgets.QItemEditorCreatorBase'), + "QItemEditorFactory.setDefaultFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemEditorFactory.valuePropertyName": ('int',), + + # class PySide2.QtWidgets.QKeyEventTransition: + "QKeyEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'int', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QKeyEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.key": (), + "QKeyEventTransition.modifierMask": (), + "QKeyEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.setKey": ('int',), + "QKeyEventTransition.setModifierMask": ('KeyboardModifiers',), + + # class PySide2.QtWidgets.QKeySequenceEdit: + "QKeySequenceEdit.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QKeySequenceEdit.clear": (), + "QKeySequenceEdit.event": ('PySide2.QtCore.QEvent',), + "QKeySequenceEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keySequence": (), + "QKeySequenceEdit.setKeySequence": ('PySide2.QtGui.QKeySequence',), + "QKeySequenceEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QLCDNumber: + "QLCDNumber.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'PySide2.QtWidgets.QWidget')], + "QLCDNumber.checkOverflow": [('float',), ('int',)], + "QLCDNumber.digitCount": (), + "QLCDNumber.display": [('float',), ('int',), ('str',)], + "QLCDNumber.event": ('PySide2.QtCore.QEvent',), + "QLCDNumber.intValue": (), + "QLCDNumber.mode": (), + "QLCDNumber.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLCDNumber.segmentStyle": (), + "QLCDNumber.setBinMode": (), + "QLCDNumber.setDecMode": (), + "QLCDNumber.setDigitCount": ('int',), + "QLCDNumber.setHexMode": (), + "QLCDNumber.setMode": ('PySide2.QtWidgets.QLCDNumber.Mode',), + "QLCDNumber.setOctMode": (), + "QLCDNumber.setSegmentStyle": ('PySide2.QtWidgets.QLCDNumber.SegmentStyle',), + "QLCDNumber.setSmallDecimalPoint": ('bool',), + "QLCDNumber.sizeHint": (), + "QLCDNumber.smallDecimalPoint": (), + "QLCDNumber.value": (), + + # class PySide2.QtWidgets.QLabel: + "QLabel.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QLabel.alignment": (), + "QLabel.buddy": (), + "QLabel.changeEvent": ('PySide2.QtCore.QEvent',), + "QLabel.clear": (), + "QLabel.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLabel.event": ('PySide2.QtCore.QEvent',), + "QLabel.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.focusNextPrevChild": ('bool',), + "QLabel.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.hasScaledContents": (), + "QLabel.hasSelectedText": (), + "QLabel.heightForWidth": ('int',), + "QLabel.indent": (), + "QLabel.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLabel.margin": (), + "QLabel.minimumSizeHint": (), + "QLabel.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.movie": (), + "QLabel.openExternalLinks": (), + "QLabel.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLabel.picture": (), + "QLabel.pixmap": (), + "QLabel.selectedText": (), + "QLabel.selectionStart": (), + "QLabel.setAlignment": ('Alignment',), + "QLabel.setBuddy": ('PySide2.QtWidgets.QWidget',), + "QLabel.setIndent": ('int',), + "QLabel.setMargin": ('int',), + "QLabel.setMovie": ('PySide2.QtGui.QMovie',), + "QLabel.setNum": [('float',), ('int',)], + "QLabel.setOpenExternalLinks": ('bool',), + "QLabel.setPicture": ('PySide2.QtGui.QPicture',), + "QLabel.setPixmap": ('PySide2.QtGui.QPixmap',), + "QLabel.setScaledContents": ('bool',), + "QLabel.setSelection": ('int', 'int'), + "QLabel.setText": ('str',), + "QLabel.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QLabel.setTextInteractionFlags": ('TextInteractionFlags',), + "QLabel.setWordWrap": ('bool',), + "QLabel.sizeHint": (), + "QLabel.text": (), + "QLabel.textFormat": (), + "QLabel.textInteractionFlags": (), + "QLabel.wordWrap": (), + + # class PySide2.QtWidgets.QLayout: + "QLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QLayout.activate": (), + "QLayout.addChildLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.addChildWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.adoptLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.alignmentRect": ('PySide2.QtCore.QRect',), + "QLayout.childEvent": ('PySide2.QtCore.QChildEvent',), + "QLayout.closestAcceptableSize": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QSize'), + "QLayout.contentsMargins": (), + "QLayout.contentsRect": (), + "QLayout.controlTypes": (), + "QLayout.count": (), + "QLayout.expandingDirections": (), + "QLayout.geometry": (), + "QLayout.getContentsMargins": ('int', 'int', 'int', 'int'), + "QLayout.indexOf": ('PySide2.QtWidgets.QWidget',), + "QLayout.invalidate": (), + "QLayout.isEmpty": (), + "QLayout.isEnabled": (), + "QLayout.itemAt": ('int',), + "QLayout.layout": (), + "QLayout.margin": (), + "QLayout.maximumSize": (), + "QLayout.menuBar": (), + "QLayout.minimumSize": (), + "QLayout.parentWidget": (), + "QLayout.removeItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.replaceWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget', 'FindChildOptions'), + "QLayout.setAlignment": [('Alignment',), ('PySide2.QtWidgets.QLayout', 'Alignment'), ('PySide2.QtWidgets.QWidget', 'Alignment')], + "QLayout.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLayout.setEnabled": ('bool',), + "QLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QLayout.setMargin": ('int',), + "QLayout.setMenuBar": ('PySide2.QtWidgets.QWidget',), + "QLayout.setSizeConstraint": ('PySide2.QtWidgets.QLayout.SizeConstraint',), + "QLayout.setSpacing": ('int',), + "QLayout.sizeConstraint": (), + "QLayout.spacing": (), + "QLayout.takeAt": ('int',), + "QLayout.totalHeightForWidth": ('int',), + "QLayout.totalMaximumSize": (), + "QLayout.totalMinimumSize": (), + "QLayout.totalSizeHint": (), + "QLayout.update": (), + "QLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QLayoutItem: + "QLayoutItem.__init__": ('Alignment',), + "QLayoutItem.alignment": (), + "QLayoutItem.controlTypes": (), + "QLayoutItem.expandingDirections": (), + "QLayoutItem.geometry": (), + "QLayoutItem.hasHeightForWidth": (), + "QLayoutItem.heightForWidth": ('int',), + "QLayoutItem.invalidate": (), + "QLayoutItem.isEmpty": (), + "QLayoutItem.layout": (), + "QLayoutItem.maximumSize": (), + "QLayoutItem.minimumHeightForWidth": ('int',), + "QLayoutItem.minimumSize": (), + "QLayoutItem.setAlignment": ('Alignment',), + "QLayoutItem.setGeometry": ('PySide2.QtCore.QRect',), + "QLayoutItem.sizeHint": (), + "QLayoutItem.spacerItem": (), + "QLayoutItem.widget": (), + + # class PySide2.QtWidgets.QLineEdit: + "QLineEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QLineEdit.addAction": [('PySide2.QtGui.QIcon', 'PySide2.QtWidgets.QLineEdit.ActionPosition'), ('PySide2.QtWidgets.QAction',), ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QLineEdit.ActionPosition')], + "QLineEdit.alignment": (), + "QLineEdit.backspace": (), + "QLineEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QLineEdit.clear": (), + "QLineEdit.completer": (), + "QLineEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLineEdit.copy": (), + "QLineEdit.createStandardContextMenu": (), + "QLineEdit.cursorBackward": ('bool', 'int'), + "QLineEdit.cursorForward": ('bool', 'int'), + "QLineEdit.cursorMoveStyle": (), + "QLineEdit.cursorPosition": (), + "QLineEdit.cursorPositionAt": ('PySide2.QtCore.QPoint',), + "QLineEdit.cursorRect": (), + "QLineEdit.cursorWordBackward": ('bool',), + "QLineEdit.cursorWordForward": ('bool',), + "QLineEdit.cut": (), + "QLineEdit.del_": (), + "QLineEdit.deselect": (), + "QLineEdit.displayText": (), + "QLineEdit.dragEnabled": (), + "QLineEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QLineEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QLineEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QLineEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QLineEdit.echoMode": (), + "QLineEdit.end": ('bool',), + "QLineEdit.event": ('PySide2.QtCore.QEvent',), + "QLineEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.getTextMargins": ('int', 'int', 'int', 'int'), + "QLineEdit.hasAcceptableInput": (), + "QLineEdit.hasFrame": (), + "QLineEdit.hasSelectedText": (), + "QLineEdit.home": ('bool',), + "QLineEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QLineEdit.inputMask": (), + "QLineEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QLineEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QLineEdit.insert": ('str',), + "QLineEdit.isClearButtonEnabled": (), + "QLineEdit.isModified": (), + "QLineEdit.isReadOnly": (), + "QLineEdit.isRedoAvailable": (), + "QLineEdit.isUndoAvailable": (), + "QLineEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLineEdit.maxLength": (), + "QLineEdit.minimumSizeHint": (), + "QLineEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLineEdit.paste": (), + "QLineEdit.placeholderText": (), + "QLineEdit.redo": (), + "QLineEdit.selectAll": (), + "QLineEdit.selectedText": (), + "QLineEdit.selectionStart": (), + "QLineEdit.setAlignment": ('Alignment',), + "QLineEdit.setClearButtonEnabled": ('bool',), + "QLineEdit.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QLineEdit.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QLineEdit.setCursorPosition": ('int',), + "QLineEdit.setDragEnabled": ('bool',), + "QLineEdit.setEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QLineEdit.setFrame": ('bool',), + "QLineEdit.setInputMask": ('str',), + "QLineEdit.setMaxLength": ('int',), + "QLineEdit.setModified": ('bool',), + "QLineEdit.setPlaceholderText": ('str',), + "QLineEdit.setReadOnly": ('bool',), + "QLineEdit.setSelection": ('int', 'int'), + "QLineEdit.setText": ('str',), + "QLineEdit.setTextMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLineEdit.setValidator": ('PySide2.QtGui.QValidator',), + "QLineEdit.sizeHint": (), + "QLineEdit.text": (), + "QLineEdit.textMargins": (), + "QLineEdit.undo": (), + "QLineEdit.validator": (), + + # class PySide2.QtWidgets.QListView: + "QListView.__init__": ('PySide2.QtWidgets.QWidget',), + "QListView.batchSize": (), + "QListView.clearPropertyFlags": (), + "QListView.contentsSize": (), + "QListView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QListView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QListView.doItemsLayout": (), + "QListView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QListView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QListView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListView.event": ('PySide2.QtCore.QEvent',), + "QListView.flow": (), + "QListView.gridSize": (), + "QListView.horizontalOffset": (), + "QListView.indexAt": ('PySide2.QtCore.QPoint',), + "QListView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QListView.isRowHidden": ('int',), + "QListView.isSelectionRectVisible": (), + "QListView.isWrapping": (), + "QListView.layoutMode": (), + "QListView.modelColumn": (), + "QListView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QListView.movement": (), + "QListView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QListView.rectForIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.reset": (), + "QListView.resizeContents": ('int', 'int'), + "QListView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QListView.resizeMode": (), + "QListView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.scrollContentsBy": ('int', 'int'), + "QListView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListView.selectedIndexes": (), + "QListView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QListView.setBatchSize": ('int',), + "QListView.setFlow": ('PySide2.QtWidgets.QListView.Flow',), + "QListView.setGridSize": ('PySide2.QtCore.QSize',), + "QListView.setLayoutMode": ('PySide2.QtWidgets.QListView.LayoutMode',), + "QListView.setModelColumn": ('int',), + "QListView.setMovement": ('PySide2.QtWidgets.QListView.Movement',), + "QListView.setPositionForIndex": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QModelIndex'), + "QListView.setResizeMode": ('PySide2.QtWidgets.QListView.ResizeMode',), + "QListView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.setRowHidden": ('int', 'bool'), + "QListView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QListView.setSelectionRectVisible": ('bool',), + "QListView.setSpacing": ('int',), + "QListView.setUniformItemSizes": ('bool',), + "QListView.setViewMode": ('PySide2.QtWidgets.QListView.ViewMode',), + "QListView.setWordWrap": ('bool',), + "QListView.setWrapping": ('bool',), + "QListView.spacing": (), + "QListView.startDrag": ('DropActions',), + "QListView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QListView.uniformItemSizes": (), + "QListView.updateGeometries": (), + "QListView.verticalOffset": (), + "QListView.viewMode": (), + "QListView.viewOptions": (), + "QListView.viewportSizeHint": (), + "QListView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QListView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QListView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QListView.wordWrap": (), + + # class PySide2.QtWidgets.QListWidget: + "QListWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QListWidget.addItem": [('PySide2.QtWidgets.QListWidgetItem',), ('str',)], + "QListWidget.addItems": ('List[str]',), + "QListWidget.clear": (), + "QListWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.count": (), + "QListWidget.currentItem": (), + "QListWidget.currentRow": (), + "QListWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListWidget.dropMimeData": ('int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QListWidget.editItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.event": ('PySide2.QtCore.QEvent',), + "QListWidget.findItems": ('str', 'MatchFlags'), + "QListWidget.indexFromItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.insertItem": [('int', 'PySide2.QtWidgets.QListWidgetItem'), ('int', 'str')], + "QListWidget.insertItems": ('int', 'List[str]'), + "QListWidget.isItemHidden": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isItemSelected": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isSortingEnabled": (), + "QListWidget.item": ('int',), + "QListWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QListWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QListWidget.itemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.items": ('PySide2.QtCore.QMimeData',), + "QListWidget.mimeData": ('list',), + "QListWidget.mimeTypes": (), + "QListWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.removeItemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.row": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.scrollToItem": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListWidget.selectedItems": (), + "QListWidget.setCurrentItem": [('PySide2.QtWidgets.QListWidgetItem',), ('PySide2.QtWidgets.QListWidgetItem', 'SelectionFlags')], + "QListWidget.setCurrentRow": [('int',), ('int', 'SelectionFlags')], + "QListWidget.setItemHidden": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemSelected": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemWidget": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QWidget'), + "QListWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QListWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QListWidget.setSortingEnabled": ('bool',), + "QListWidget.sortItems": ('PySide2.QtCore.Qt.SortOrder',), + "QListWidget.supportedDropActions": (), + "QListWidget.takeItem": ('int',), + "QListWidget.visualItemRect": ('PySide2.QtWidgets.QListWidgetItem',), + + # class PySide2.QtWidgets.QListWidgetItem: + "QListWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidgetItem',), ('str', 'PySide2.QtWidgets.QListWidget', 'int')], + "QListWidgetItem.background": (), + "QListWidgetItem.backgroundColor": (), + "QListWidgetItem.checkState": (), + "QListWidgetItem.clone": (), + "QListWidgetItem.data": ('int',), + "QListWidgetItem.flags": (), + "QListWidgetItem.font": (), + "QListWidgetItem.foreground": (), + "QListWidgetItem.icon": (), + "QListWidgetItem.isHidden": (), + "QListWidgetItem.isSelected": (), + "QListWidgetItem.listWidget": (), + "QListWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QListWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QListWidgetItem.setData": ('int', 'Any'), + "QListWidgetItem.setFlags": ('ItemFlags',), + "QListWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QListWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setHidden": ('bool',), + "QListWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QListWidgetItem.setSelected": ('bool',), + "QListWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QListWidgetItem.setStatusTip": ('str',), + "QListWidgetItem.setText": ('str',), + "QListWidgetItem.setTextAlignment": ('int',), + "QListWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setToolTip": ('str',), + "QListWidgetItem.setWhatsThis": ('str',), + "QListWidgetItem.sizeHint": (), + "QListWidgetItem.statusTip": (), + "QListWidgetItem.text": (), + "QListWidgetItem.textAlignment": (), + "QListWidgetItem.textColor": (), + "QListWidgetItem.toolTip": (), + "QListWidgetItem.type": (), + "QListWidgetItem.whatsThis": (), + "QListWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QMainWindow: + "QMainWindow.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMainWindow.addDockWidget": [('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget'), ('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation')], + "QMainWindow.addToolBar": [('PySide2.QtCore.Qt.ToolBarArea', 'PySide2.QtWidgets.QToolBar'), ('PySide2.QtWidgets.QToolBar',), ('str',)], + "QMainWindow.addToolBarBreak": ('PySide2.QtCore.Qt.ToolBarArea',), + "QMainWindow.centralWidget": (), + "QMainWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMainWindow.corner": ('PySide2.QtCore.Qt.Corner',), + "QMainWindow.createPopupMenu": (), + "QMainWindow.dockOptions": (), + "QMainWindow.dockWidgetArea": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.documentMode": (), + "QMainWindow.event": ('PySide2.QtCore.QEvent',), + "QMainWindow.iconSize": (), + "QMainWindow.insertToolBar": ('PySide2.QtWidgets.QToolBar', 'PySide2.QtWidgets.QToolBar'), + "QMainWindow.insertToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.isAnimated": (), + "QMainWindow.isDockNestingEnabled": (), + "QMainWindow.isSeparator": ('PySide2.QtCore.QPoint',), + "QMainWindow.menuBar": (), + "QMainWindow.menuWidget": (), + "QMainWindow.removeDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.removeToolBar": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.removeToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.resizeDocks": ('list', 'list', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.restoreDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.restoreState": ('PySide2.QtCore.QByteArray', 'int'), + "QMainWindow.saveState": ('int',), + "QMainWindow.setAnimated": ('bool',), + "QMainWindow.setCentralWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setCorner": ('PySide2.QtCore.Qt.Corner', 'PySide2.QtCore.Qt.DockWidgetArea'), + "QMainWindow.setDockNestingEnabled": ('bool',), + "QMainWindow.setDockOptions": ('DockOptions',), + "QMainWindow.setDocumentMode": ('bool',), + "QMainWindow.setIconSize": ('PySide2.QtCore.QSize',), + "QMainWindow.setMenuBar": ('PySide2.QtWidgets.QMenuBar',), + "QMainWindow.setMenuWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setStatusBar": ('PySide2.QtWidgets.QStatusBar',), + "QMainWindow.setTabPosition": ('DockWidgetAreas', 'PySide2.QtWidgets.QTabWidget.TabPosition'), + "QMainWindow.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMainWindow.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QMainWindow.setUnifiedTitleAndToolBarOnMac": ('bool',), + "QMainWindow.splitDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.statusBar": (), + "QMainWindow.tabPosition": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QMainWindow.tabShape": (), + "QMainWindow.tabifiedDockWidgets": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.tabifyDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget'), + "QMainWindow.takeCentralWidget": (), + "QMainWindow.toolBarArea": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolButtonStyle": (), + "QMainWindow.unifiedTitleAndToolBarOnMac": (), + + # class PySide2.QtWidgets.QMdiArea: + "QMdiArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.activateNextSubWindow": (), + "QMdiArea.activatePreviousSubWindow": (), + "QMdiArea.activationOrder": (), + "QMdiArea.activeSubWindow": (), + "QMdiArea.addSubWindow": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMdiArea.background": (), + "QMdiArea.cascadeSubWindows": (), + "QMdiArea.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiArea.closeActiveSubWindow": (), + "QMdiArea.closeAllSubWindows": (), + "QMdiArea.currentSubWindow": (), + "QMdiArea.documentMode": (), + "QMdiArea.event": ('PySide2.QtCore.QEvent',), + "QMdiArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiArea.minimumSizeHint": (), + "QMdiArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiArea.removeSubWindow": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiArea.scrollContentsBy": ('int', 'int'), + "QMdiArea.setActivationOrder": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.setActiveSubWindow": ('PySide2.QtWidgets.QMdiSubWindow',), + "QMdiArea.setBackground": ('PySide2.QtGui.QBrush',), + "QMdiArea.setDocumentMode": ('bool',), + "QMdiArea.setOption": ('PySide2.QtWidgets.QMdiArea.AreaOption', 'bool'), + "QMdiArea.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QMdiArea.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMdiArea.setTabsClosable": ('bool',), + "QMdiArea.setTabsMovable": ('bool',), + "QMdiArea.setViewMode": ('PySide2.QtWidgets.QMdiArea.ViewMode',), + "QMdiArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiArea.sizeHint": (), + "QMdiArea.subWindowList": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.tabPosition": (), + "QMdiArea.tabShape": (), + "QMdiArea.tabsClosable": (), + "QMdiArea.tabsMovable": (), + "QMdiArea.testOption": ('PySide2.QtWidgets.QMdiArea.AreaOption',), + "QMdiArea.tileSubWindows": (), + "QMdiArea.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiArea.viewMode": (), + "QMdiArea.viewportEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QMdiSubWindow: + "QMdiSubWindow.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMdiSubWindow.changeEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiSubWindow.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMdiSubWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMdiSubWindow.event": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiSubWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMdiSubWindow.isShaded": (), + "QMdiSubWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMdiSubWindow.keyboardPageStep": (), + "QMdiSubWindow.keyboardSingleStep": (), + "QMdiSubWindow.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.maximizedButtonsWidget": (), + "QMdiSubWindow.maximizedSystemMenuIconWidget": (), + "QMdiSubWindow.mdiArea": (), + "QMdiSubWindow.minimumSizeHint": (), + "QMdiSubWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QMdiSubWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiSubWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiSubWindow.setKeyboardPageStep": ('int',), + "QMdiSubWindow.setKeyboardSingleStep": ('int',), + "QMdiSubWindow.setOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption', 'bool'), + "QMdiSubWindow.setSystemMenu": ('PySide2.QtWidgets.QMenu',), + "QMdiSubWindow.setWidget": ('PySide2.QtWidgets.QWidget',), + "QMdiSubWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiSubWindow.showShaded": (), + "QMdiSubWindow.showSystemMenu": (), + "QMdiSubWindow.sizeHint": (), + "QMdiSubWindow.systemMenu": (), + "QMdiSubWindow.testOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption',), + "QMdiSubWindow.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiSubWindow.widget": (), + + # class PySide2.QtWidgets.QMenu: + "QMenu.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QMenu.actionAt": ('PySide2.QtCore.QPoint',), + "QMenu.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenu.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenu.activeAction": (), + "QMenu.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtGui.QIcon', 'str', 'object', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('str', 'object', 'PySide2.QtGui.QKeySequence')], + "QMenu.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenu.addSection": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QMenu.addSeparator": (), + "QMenu.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenu.clear": (), + "QMenu.columnCount": (), + "QMenu.defaultAction": (), + "QMenu.enterEvent": ('PySide2.QtCore.QEvent',), + "QMenu.event": ('PySide2.QtCore.QEvent',), + "QMenu.exec_": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), ('list', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget')], + "QMenu.focusNextPrevChild": ('bool',), + "QMenu.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMenu.hideTearOffMenu": (), + "QMenu.icon": (), + "QMenu.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenu.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenu.insertSection": [('PySide2.QtWidgets.QAction', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction', 'str')], + "QMenu.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenu.isEmpty": (), + "QMenu.isTearOffEnabled": (), + "QMenu.isTearOffMenuVisible": (), + "QMenu.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenu.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenu.menuAction": (), + "QMenu.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenu.popup": ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), + "QMenu.separatorsCollapsible": (), + "QMenu.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setIcon": ('PySide2.QtGui.QIcon',), + "QMenu.setSeparatorsCollapsible": ('bool',), + "QMenu.setTearOffEnabled": ('bool',), + "QMenu.setTitle": ('str',), + "QMenu.setToolTipsVisible": ('bool',), + "QMenu.showTearOffMenu": [(), ('PySide2.QtCore.QPoint',)], + "QMenu.sizeHint": (), + "QMenu.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMenu.title": (), + "QMenu.toolTipsVisible": (), + "QMenu.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QMenuBar: + "QMenuBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QMenuBar.actionAt": ('PySide2.QtCore.QPoint',), + "QMenuBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenuBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenuBar.activeAction": (), + "QMenuBar.addAction": [('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str'), ('str', 'object')], + "QMenuBar.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenuBar.addSeparator": (), + "QMenuBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.clear": (), + "QMenuBar.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QMenuBar.event": ('PySide2.QtCore.QEvent',), + "QMenuBar.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMenuBar.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.heightForWidth": ('int',), + "QMenuBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenuBar.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenuBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenuBar.isDefaultUp": (), + "QMenuBar.isNativeMenuBar": (), + "QMenuBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenuBar.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.minimumSizeHint": (), + "QMenuBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenuBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMenuBar.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenuBar.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QMenuBar.setDefaultUp": ('bool',), + "QMenuBar.setNativeMenuBar": ('bool',), + "QMenuBar.setVisible": ('bool',), + "QMenuBar.sizeHint": (), + "QMenuBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QMessageBox: + "QMessageBox.__init__": [('PySide2.QtWidgets.QMessageBox.Icon', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget',)], + "QMessageBox.about": ('PySide2.QtWidgets.QWidget', 'str', 'str'), + "QMessageBox.aboutQt": ('PySide2.QtWidgets.QWidget', 'str'), + "QMessageBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QMessageBox.ButtonRole'), ('PySide2.QtWidgets.QMessageBox.StandardButton',), ('str', 'PySide2.QtWidgets.QMessageBox.ButtonRole')], + "QMessageBox.button": ('PySide2.QtWidgets.QMessageBox.StandardButton',), + "QMessageBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.buttonText": ('int',), + "QMessageBox.buttons": (), + "QMessageBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QMessageBox.checkBox": (), + "QMessageBox.clickedButton": (), + "QMessageBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMessageBox.critical": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.defaultButton": (), + "QMessageBox.detailedText": (), + "QMessageBox.escapeButton": (), + "QMessageBox.event": ('PySide2.QtCore.QEvent',), + "QMessageBox.icon": (), + "QMessageBox.iconPixmap": (), + "QMessageBox.information": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.informativeText": (), + "QMessageBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMessageBox.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QMessageBox.question": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMessageBox.setButtonText": ('int', 'str'), + "QMessageBox.setCheckBox": ('PySide2.QtWidgets.QCheckBox',), + "QMessageBox.setDefaultButton": [('PySide2.QtWidgets.QMessageBox.StandardButton',), ('PySide2.QtWidgets.QPushButton',)], + "QMessageBox.setDetailedText": ('str',), + "QMessageBox.setEscapeButton": [('PySide2.QtWidgets.QAbstractButton',), ('PySide2.QtWidgets.QMessageBox.StandardButton',)], + "QMessageBox.setIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.setIconPixmap": ('PySide2.QtGui.QPixmap',), + "QMessageBox.setInformativeText": ('str',), + "QMessageBox.setStandardButtons": ('StandardButtons',), + "QMessageBox.setText": ('str',), + "QMessageBox.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QMessageBox.setTextInteractionFlags": ('TextInteractionFlags',), + "QMessageBox.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QMessageBox.setWindowTitle": ('str',), + "QMessageBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMessageBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.standardButtons": (), + "QMessageBox.standardIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.text": (), + "QMessageBox.textFormat": (), + "QMessageBox.textInteractionFlags": (), + "QMessageBox.warning": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + + # class PySide2.QtWidgets.QMouseEventTransition: + "QMouseEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QMouseEventTransition.button": (), + "QMouseEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.hitTestPath": (), + "QMouseEventTransition.modifierMask": (), + "QMouseEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QMouseEventTransition.setHitTestPath": ('PySide2.QtGui.QPainterPath',), + "QMouseEventTransition.setModifierMask": ('KeyboardModifiers',), + + # class PySide2.QtWidgets.QOpenGLWidget: + "QOpenGLWidget.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QOpenGLWidget.context": (), + "QOpenGLWidget.defaultFramebufferObject": (), + "QOpenGLWidget.doneCurrent": (), + "QOpenGLWidget.event": ('PySide2.QtCore.QEvent',), + "QOpenGLWidget.format": (), + "QOpenGLWidget.grabFramebuffer": (), + "QOpenGLWidget.initializeGL": (), + "QOpenGLWidget.isValid": (), + "QOpenGLWidget.makeCurrent": (), + "QOpenGLWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWidget.paintEngine": (), + "QOpenGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWidget.paintGL": (), + "QOpenGLWidget.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWidget.resizeGL": ('int', 'int'), + "QOpenGLWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLWidget.setUpdateBehavior": ('PySide2.QtWidgets.QOpenGLWidget.UpdateBehavior',), + "QOpenGLWidget.updateBehavior": (), + + # class PySide2.QtWidgets.QPanGesture: + "QPanGesture.__init__": ('PySide2.QtCore.QObject',), + "QPanGesture.acceleration": (), + "QPanGesture.delta": (), + "QPanGesture.lastOffset": (), + "QPanGesture.offset": (), + "QPanGesture.setAcceleration": ('float',), + "QPanGesture.setLastOffset": ('PySide2.QtCore.QPointF',), + "QPanGesture.setOffset": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QPinchGesture: + "QPinchGesture.__init__": ('PySide2.QtCore.QObject',), + "QPinchGesture.centerPoint": (), + "QPinchGesture.changeFlags": (), + "QPinchGesture.lastCenterPoint": (), + "QPinchGesture.lastRotationAngle": (), + "QPinchGesture.lastScaleFactor": (), + "QPinchGesture.rotationAngle": (), + "QPinchGesture.scaleFactor": (), + "QPinchGesture.setCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setChangeFlags": ('ChangeFlags',), + "QPinchGesture.setLastCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setLastRotationAngle": ('float',), + "QPinchGesture.setLastScaleFactor": ('float',), + "QPinchGesture.setRotationAngle": ('float',), + "QPinchGesture.setScaleFactor": ('float',), + "QPinchGesture.setStartCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setTotalChangeFlags": ('ChangeFlags',), + "QPinchGesture.setTotalRotationAngle": ('float',), + "QPinchGesture.setTotalScaleFactor": ('float',), + "QPinchGesture.startCenterPoint": (), + "QPinchGesture.totalChangeFlags": (), + "QPinchGesture.totalRotationAngle": (), + "QPinchGesture.totalScaleFactor": (), + + # class PySide2.QtWidgets.QPlainTextDocumentLayout: + "QPlainTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QPlainTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.cursorWidth": (), + "QPlainTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QPlainTextDocumentLayout.documentSize": (), + "QPlainTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QPlainTextDocumentLayout.ensureBlockLayout": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QPlainTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QPlainTextDocumentLayout.pageCount": (), + "QPlainTextDocumentLayout.requestUpdate": (), + "QPlainTextDocumentLayout.setCursorWidth": ('int',), + + # class PySide2.QtWidgets.QPlainTextEdit: + "QPlainTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPlainTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.appendHtml": ('str',), + "QPlainTextEdit.appendPlainText": ('str',), + "QPlainTextEdit.backgroundVisible": (), + "QPlainTextEdit.blockBoundingGeometry": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockCount": (), + "QPlainTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.canPaste": (), + "QPlainTextEdit.centerCursor": (), + "QPlainTextEdit.centerOnScroll": (), + "QPlainTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.clear": (), + "QPlainTextEdit.contentOffset": (), + "QPlainTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QPlainTextEdit.copy": (), + "QPlainTextEdit.createMimeDataFromSelection": (), + "QPlainTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QPlainTextEdit.currentCharFormat": (), + "QPlainTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QPlainTextEdit.cursorWidth": (), + "QPlainTextEdit.cut": (), + "QPlainTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.document": (), + "QPlainTextEdit.documentTitle": (), + "QPlainTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QPlainTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QPlainTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QPlainTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QPlainTextEdit.ensureCursorVisible": (), + "QPlainTextEdit.event": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.extraSelections": (), + "QPlainTextEdit.find": [('PySide2.QtCore.QRegExp', 'FindFlags'), ('int',), ('str', 'FindFlags')], + "QPlainTextEdit.firstVisibleBlock": (), + "QPlainTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.focusNextPrevChild": ('bool',), + "QPlainTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.getPaintContext": (), + "QPlainTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QPlainTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QPlainTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.insertPlainText": ('str',), + "QPlainTextEdit.isReadOnly": (), + "QPlainTextEdit.isUndoRedoEnabled": (), + "QPlainTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.lineWrapMode": (), + "QPlainTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QPlainTextEdit.maximumBlockCount": (), + "QPlainTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QPlainTextEdit.overwriteMode": (), + "QPlainTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPlainTextEdit.paste": (), + "QPlainTextEdit.placeholderText": (), + "QPlainTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QPlainTextEdit.redo": (), + "QPlainTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QPlainTextEdit.scrollContentsBy": ('int', 'int'), + "QPlainTextEdit.selectAll": (), + "QPlainTextEdit.setBackgroundVisible": ('bool',), + "QPlainTextEdit.setCenterOnScroll": ('bool',), + "QPlainTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.setCursorWidth": ('int',), + "QPlainTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QPlainTextEdit.setDocumentTitle": ('str',), + "QPlainTextEdit.setExtraSelections": ('list',), + "QPlainTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QPlainTextEdit.LineWrapMode',), + "QPlainTextEdit.setMaximumBlockCount": ('int',), + "QPlainTextEdit.setOverwriteMode": ('bool',), + "QPlainTextEdit.setPlaceholderText": ('str',), + "QPlainTextEdit.setPlainText": ('str',), + "QPlainTextEdit.setReadOnly": ('bool',), + "QPlainTextEdit.setTabChangesFocus": ('bool',), + "QPlainTextEdit.setTabStopWidth": ('int',), + "QPlainTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.setTextInteractionFlags": ('TextInteractionFlags',), + "QPlainTextEdit.setUndoRedoEnabled": ('bool',), + "QPlainTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QPlainTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QPlainTextEdit.tabChangesFocus": (), + "QPlainTextEdit.tabStopWidth": (), + "QPlainTextEdit.textCursor": (), + "QPlainTextEdit.textInteractionFlags": (), + "QPlainTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QPlainTextEdit.toPlainText": (), + "QPlainTextEdit.undo": (), + "QPlainTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QPlainTextEdit.wordWrapMode": (), + "QPlainTextEdit.zoomIn": ('int',), + "QPlainTextEdit.zoomInF": ('float',), + "QPlainTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QProgressBar: + "QProgressBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QProgressBar.alignment": (), + "QProgressBar.event": ('PySide2.QtCore.QEvent',), + "QProgressBar.format": (), + "QProgressBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionProgressBar',), + "QProgressBar.invertedAppearance": (), + "QProgressBar.isTextVisible": (), + "QProgressBar.maximum": (), + "QProgressBar.minimum": (), + "QProgressBar.minimumSizeHint": (), + "QProgressBar.orientation": (), + "QProgressBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QProgressBar.reset": (), + "QProgressBar.resetFormat": (), + "QProgressBar.setAlignment": ('Alignment',), + "QProgressBar.setFormat": ('str',), + "QProgressBar.setInvertedAppearance": ('bool',), + "QProgressBar.setMaximum": ('int',), + "QProgressBar.setMinimum": ('int',), + "QProgressBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QProgressBar.setRange": ('int', 'int'), + "QProgressBar.setTextDirection": ('PySide2.QtWidgets.QProgressBar.Direction',), + "QProgressBar.setTextVisible": ('bool',), + "QProgressBar.setValue": ('int',), + "QProgressBar.sizeHint": (), + "QProgressBar.text": (), + "QProgressBar.textDirection": (), + "QProgressBar.value": (), + + # class PySide2.QtWidgets.QProgressDialog: + "QProgressDialog.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'str', 'int', 'int', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QProgressDialog.autoClose": (), + "QProgressDialog.autoReset": (), + "QProgressDialog.cancel": (), + "QProgressDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QProgressDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QProgressDialog.forceShow": (), + "QProgressDialog.labelText": (), + "QProgressDialog.maximum": (), + "QProgressDialog.minimum": (), + "QProgressDialog.minimumDuration": (), + "QProgressDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QProgressDialog.reset": (), + "QProgressDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QProgressDialog.setAutoClose": ('bool',), + "QProgressDialog.setAutoReset": ('bool',), + "QProgressDialog.setBar": ('PySide2.QtWidgets.QProgressBar',), + "QProgressDialog.setCancelButton": ('PySide2.QtWidgets.QPushButton',), + "QProgressDialog.setCancelButtonText": ('str',), + "QProgressDialog.setLabel": ('PySide2.QtWidgets.QLabel',), + "QProgressDialog.setLabelText": ('str',), + "QProgressDialog.setMaximum": ('int',), + "QProgressDialog.setMinimum": ('int',), + "QProgressDialog.setMinimumDuration": ('int',), + "QProgressDialog.setRange": ('int', 'int'), + "QProgressDialog.setValue": ('int',), + "QProgressDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QProgressDialog.sizeHint": (), + "QProgressDialog.value": (), + "QProgressDialog.wasCanceled": (), + + # class PySide2.QtWidgets.QPushButton: + "QPushButton.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPushButton.autoDefault": (), + "QPushButton.event": ('PySide2.QtCore.QEvent',), + "QPushButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QPushButton.isDefault": (), + "QPushButton.isFlat": (), + "QPushButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPushButton.menu": (), + "QPushButton.minimumSizeHint": (), + "QPushButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPushButton.setAutoDefault": ('bool',), + "QPushButton.setDefault": ('bool',), + "QPushButton.setFlat": ('bool',), + "QPushButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QPushButton.showMenu": (), + "QPushButton.sizeHint": (), + + # class PySide2.QtWidgets.QRadioButton: + "QRadioButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QRadioButton.event": ('PySide2.QtCore.QEvent',), + "QRadioButton.hitButton": ('PySide2.QtCore.QPoint',), + "QRadioButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QRadioButton.minimumSizeHint": (), + "QRadioButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QRadioButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRadioButton.sizeHint": (), + + # class PySide2.QtWidgets.QRubberBand: + "QRubberBand.__init__": ('PySide2.QtWidgets.QRubberBand.Shape', 'PySide2.QtWidgets.QWidget'), + "QRubberBand.changeEvent": ('PySide2.QtCore.QEvent',), + "QRubberBand.event": ('PySide2.QtCore.QEvent',), + "QRubberBand.initStyleOption": ('PySide2.QtWidgets.QStyleOptionRubberBand',), + "QRubberBand.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRubberBand.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QRubberBand.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRubberBand.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QRubberBand.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QRubberBand.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRubberBand.shape": (), + "QRubberBand.showEvent": ('PySide2.QtGui.QShowEvent',), + + # class PySide2.QtWidgets.QScrollArea: + "QScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.alignment": (), + "QScrollArea.ensureVisible": ('int', 'int', 'int', 'int'), + "QScrollArea.ensureWidgetVisible": ('PySide2.QtWidgets.QWidget', 'int', 'int'), + "QScrollArea.event": ('PySide2.QtCore.QEvent',), + "QScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QScrollArea.focusNextPrevChild": ('bool',), + "QScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QScrollArea.scrollContentsBy": ('int', 'int'), + "QScrollArea.setAlignment": ('Alignment',), + "QScrollArea.setWidget": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.setWidgetResizable": ('bool',), + "QScrollArea.sizeHint": (), + "QScrollArea.takeWidget": (), + "QScrollArea.viewportSizeHint": (), + "QScrollArea.widget": (), + "QScrollArea.widgetResizable": (), + + # class PySide2.QtWidgets.QScrollBar: + "QScrollBar.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QScrollBar.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QScrollBar.event": ('PySide2.QtCore.QEvent',), + "QScrollBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QScrollBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QScrollBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QScrollBar.sizeHint": (), + "QScrollBar.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QScrollBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QShortcut: + "QShortcut.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'Callable', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtWidgets.QWidget',)], + "QShortcut.autoRepeat": (), + "QShortcut.context": (), + "QShortcut.event": ('PySide2.QtCore.QEvent',), + "QShortcut.id": (), + "QShortcut.isEnabled": (), + "QShortcut.key": (), + "QShortcut.parentWidget": (), + "QShortcut.setAutoRepeat": ('bool',), + "QShortcut.setContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QShortcut.setEnabled": ('bool',), + "QShortcut.setKey": ('PySide2.QtGui.QKeySequence',), + "QShortcut.setWhatsThis": ('str',), + "QShortcut.whatsThis": (), + + # class PySide2.QtWidgets.QSizeGrip: + "QSizeGrip.__init__": ('PySide2.QtWidgets.QWidget',), + "QSizeGrip.event": ('PySide2.QtCore.QEvent',), + "QSizeGrip.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QSizeGrip.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QSizeGrip.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QSizeGrip.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSizeGrip.setVisible": ('bool',), + "QSizeGrip.showEvent": ('PySide2.QtGui.QShowEvent',), + "QSizeGrip.sizeHint": (), + + # class PySide2.QtWidgets.QSizePolicy: + "QSizePolicy.__init__": [(), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QSizePolicy.__copy__": (), + "QSizePolicy.controlType": (), + "QSizePolicy.expandingDirections": (), + "QSizePolicy.hasHeightForWidth": (), + "QSizePolicy.hasWidthForHeight": (), + "QSizePolicy.horizontalPolicy": (), + "QSizePolicy.horizontalStretch": (), + "QSizePolicy.retainSizeWhenHidden": (), + "QSizePolicy.setControlType": ('PySide2.QtWidgets.QSizePolicy.ControlType',), + "QSizePolicy.setHeightForWidth": ('bool',), + "QSizePolicy.setHorizontalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setHorizontalStretch": ('int',), + "QSizePolicy.setRetainSizeWhenHidden": ('bool',), + "QSizePolicy.setVerticalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setVerticalStretch": ('int',), + "QSizePolicy.setWidthForHeight": ('bool',), + "QSizePolicy.transpose": (), + "QSizePolicy.transposed": (), + "QSizePolicy.verticalPolicy": (), + "QSizePolicy.verticalStretch": (), + + # class PySide2.QtWidgets.QSlider: + "QSlider.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSlider.event": ('PySide2.QtCore.QEvent',), + "QSlider.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QSlider.minimumSizeHint": (), + "QSlider.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSlider.setTickInterval": ('int',), + "QSlider.setTickPosition": ('PySide2.QtWidgets.QSlider.TickPosition',), + "QSlider.sizeHint": (), + "QSlider.tickInterval": (), + "QSlider.tickPosition": (), + + # class PySide2.QtWidgets.QSpacerItem: + "QSpacerItem.__init__": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.changeSize": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.expandingDirections": (), + "QSpacerItem.geometry": (), + "QSpacerItem.isEmpty": (), + "QSpacerItem.maximumSize": (), + "QSpacerItem.minimumSize": (), + "QSpacerItem.setGeometry": ('PySide2.QtCore.QRect',), + "QSpacerItem.sizeHint": (), + "QSpacerItem.sizePolicy": (), + "QSpacerItem.spacerItem": (), + + # class PySide2.QtWidgets.QSpinBox: + "QSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QSpinBox.cleanText": (), + "QSpinBox.displayIntegerBase": (), + "QSpinBox.event": ('PySide2.QtCore.QEvent',), + "QSpinBox.fixup": ('str',), + "QSpinBox.maximum": (), + "QSpinBox.minimum": (), + "QSpinBox.prefix": (), + "QSpinBox.setDisplayIntegerBase": ('int',), + "QSpinBox.setMaximum": ('int',), + "QSpinBox.setMinimum": ('int',), + "QSpinBox.setPrefix": ('str',), + "QSpinBox.setRange": ('int', 'int'), + "QSpinBox.setSingleStep": ('int',), + "QSpinBox.setSuffix": ('str',), + "QSpinBox.setValue": ('int',), + "QSpinBox.singleStep": (), + "QSpinBox.suffix": (), + "QSpinBox.textFromValue": ('int',), + "QSpinBox.validate": ('str', 'int'), + "QSpinBox.value": (), + "QSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QSplashScreen: + "QSplashScreen.__init__": [('PySide2.QtGui.QPixmap', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QPixmap', 'WindowFlags')], + "QSplashScreen.clearMessage": (), + "QSplashScreen.drawContents": ('PySide2.QtGui.QPainter',), + "QSplashScreen.event": ('PySide2.QtCore.QEvent',), + "QSplashScreen.finish": ('PySide2.QtWidgets.QWidget',), + "QSplashScreen.message": (), + "QSplashScreen.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplashScreen.pixmap": (), + "QSplashScreen.setPixmap": ('PySide2.QtGui.QPixmap',), + "QSplashScreen.showMessage": ('str', 'int', 'PySide2.QtGui.QColor'), + + # class PySide2.QtWidgets.QSplitter: + "QSplitter.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSplitter.addWidget": ('PySide2.QtWidgets.QWidget',), + "QSplitter.changeEvent": ('PySide2.QtCore.QEvent',), + "QSplitter.childEvent": ('PySide2.QtCore.QChildEvent',), + "QSplitter.childrenCollapsible": (), + "QSplitter.closestLegalPosition": ('int', 'int'), + "QSplitter.count": (), + "QSplitter.createHandle": (), + "QSplitter.event": ('PySide2.QtCore.QEvent',), + "QSplitter.getRange": ('int', 'int', 'int'), + "QSplitter.handle": ('int',), + "QSplitter.handleWidth": (), + "QSplitter.indexOf": ('PySide2.QtWidgets.QWidget',), + "QSplitter.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.isCollapsible": ('int',), + "QSplitter.minimumSizeHint": (), + "QSplitter.moveSplitter": ('int', 'int'), + "QSplitter.opaqueResize": (), + "QSplitter.orientation": (), + "QSplitter.refresh": (), + "QSplitter.replaceWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitter.restoreState": ('PySide2.QtCore.QByteArray',), + "QSplitter.saveState": (), + "QSplitter.setChildrenCollapsible": ('bool',), + "QSplitter.setCollapsible": ('int', 'bool'), + "QSplitter.setHandleWidth": ('int',), + "QSplitter.setOpaqueResize": ('bool',), + "QSplitter.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitter.setRubberBand": ('int',), + "QSplitter.setSizes": ('list',), + "QSplitter.setStretchFactor": ('int', 'int'), + "QSplitter.sizeHint": (), + "QSplitter.sizes": (), + "QSplitter.widget": ('int',), + + # class PySide2.QtWidgets.QSplitterHandle: + "QSplitterHandle.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QSplitter'), + "QSplitterHandle.closestLegalPosition": ('int',), + "QSplitterHandle.event": ('PySide2.QtCore.QEvent',), + "QSplitterHandle.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.moveSplitter": ('int',), + "QSplitterHandle.opaqueResize": (), + "QSplitterHandle.orientation": (), + "QSplitterHandle.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSplitterHandle.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitterHandle.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitterHandle.sizeHint": (), + "QSplitterHandle.splitter": (), + + # class PySide2.QtWidgets.QStackedLayout: + "QStackedLayout.__init__": [(), ('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QStackedLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QStackedLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.count": (), + "QStackedLayout.currentIndex": (), + "QStackedLayout.currentWidget": (), + "QStackedLayout.hasHeightForWidth": (), + "QStackedLayout.heightForWidth": ('int',), + "QStackedLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedLayout.itemAt": ('int',), + "QStackedLayout.minimumSize": (), + "QStackedLayout.setCurrentIndex": ('int',), + "QStackedLayout.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QStackedLayout.setStackingMode": ('PySide2.QtWidgets.QStackedLayout.StackingMode',), + "QStackedLayout.sizeHint": (), + "QStackedLayout.stackingMode": (), + "QStackedLayout.takeAt": ('int',), + "QStackedLayout.widget": [(), ('int',)], + + # class PySide2.QtWidgets.QStackedWidget: + "QStackedWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.count": (), + "QStackedWidget.currentIndex": (), + "QStackedWidget.currentWidget": (), + "QStackedWidget.event": ('PySide2.QtCore.QEvent',), + "QStackedWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedWidget.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.setCurrentIndex": ('int',), + "QStackedWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.widget": ('int',), + + # class PySide2.QtWidgets.QStatusBar: + "QStatusBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.addPermanentWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.addWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.clearMessage": (), + "QStatusBar.currentMessage": (), + "QStatusBar.event": ('PySide2.QtCore.QEvent',), + "QStatusBar.hideOrShow": (), + "QStatusBar.insertPermanentWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.isSizeGripEnabled": (), + "QStatusBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QStatusBar.reformat": (), + "QStatusBar.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QStatusBar.setSizeGripEnabled": ('bool',), + "QStatusBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QStatusBar.showMessage": ('str', 'int'), + + # class PySide2.QtWidgets.QStyle: + "QStyle.__init__": (), + "QStyle.alignedRect": ('PySide2.QtCore.Qt.LayoutDirection', 'Alignment', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QRect'), + "QStyle.combinedLayoutSpacing": ('ControlTypes', 'ControlTypes', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawItemPixmap": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.drawItemText": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QStyle.itemPixmapRect": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.itemTextRect": ('PySide2.QtGui.QFontMetrics', 'PySide2.QtCore.QRect', 'int', 'bool', 'str'), + "QStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.proxy": (), + "QStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QStyle.sliderPositionFromValue": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.sliderValueFromPosition": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.standardPalette": (), + "QStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.visualAlignment": ('PySide2.QtCore.Qt.LayoutDirection', 'Alignment'), + "QStyle.visualPos": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QPoint'), + "QStyle.visualRect": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QRect'), + + # class PySide2.QtWidgets.QStyleFactory: + "QStyleFactory.__init__": (), + "QStyleFactory.create": ('str',), + "QStyleFactory.keys": (), + + # class PySide2.QtWidgets.QStyleHintReturn: + "QStyleHintReturn.__init__": ('int', 'int'), + + # class PySide2.QtWidgets.QStyleHintReturnMask: + "QStyleHintReturnMask.__init__": (), + + # class PySide2.QtWidgets.QStyleHintReturnVariant: + "QStyleHintReturnVariant.__init__": (), + + # class PySide2.QtWidgets.QStyleOption: + "QStyleOption.__init__": [('PySide2.QtWidgets.QStyleOption',), ('int', 'int')], + "QStyleOption.init": ('PySide2.QtWidgets.QWidget',), + "QStyleOption.initFrom": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QStyleOptionButton: + "QStyleOptionButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComboBox: + "QStyleOptionComboBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionComboBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComplex: + "QStyleOptionComplex.__init__": [('PySide2.QtWidgets.QStyleOptionComplex',), ('int', 'int')], + + # class PySide2.QtWidgets.QStyleOptionDockWidget: + "QStyleOptionDockWidget.__init__": [(), ('PySide2.QtWidgets.QStyleOptionDockWidget',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFocusRect: + "QStyleOptionFocusRect.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFocusRect',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFrame: + "QStyleOptionFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionGraphicsItem: + "QStyleOptionGraphicsItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGraphicsItem',), ('int',)], + "QStyleOptionGraphicsItem.levelOfDetailFromTransform": ('PySide2.QtGui.QTransform',), + + # class PySide2.QtWidgets.QStyleOptionGroupBox: + "QStyleOptionGroupBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGroupBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionHeader: + "QStyleOptionHeader.__init__": [(), ('PySide2.QtWidgets.QStyleOptionHeader',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionMenuItem: + "QStyleOptionMenuItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionMenuItem',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionProgressBar: + "QStyleOptionProgressBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionProgressBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionRubberBand: + "QStyleOptionRubberBand.__init__": [(), ('PySide2.QtWidgets.QStyleOptionRubberBand',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSizeGrip: + "QStyleOptionSizeGrip.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSizeGrip',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSlider: + "QStyleOptionSlider.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSlider',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSpinBox: + "QStyleOptionSpinBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSpinBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTab: + "QStyleOptionTab.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTab',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabBarBase: + "QStyleOptionTabBarBase.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabBarBase',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabWidgetFrame: + "QStyleOptionTabWidgetFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTitleBar: + "QStyleOptionTitleBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTitleBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBar: + "QStyleOptionToolBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBox: + "QStyleOptionToolBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolButton: + "QStyleOptionToolButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionViewItem: + "QStyleOptionViewItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionViewItem',), ('int',)], + "QStyleOptionViewItem.__copy__": (), + + # class PySide2.QtWidgets.QStylePainter: + "QStylePainter.__init__": [(), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.begin": [('PySide2.QtGui.QPaintDevice',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex'), + "QStylePainter.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.drawItemPixmap": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStylePainter.drawItemText": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStylePainter.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.style": (), + + # class PySide2.QtWidgets.QStyledItemDelegate: + "QStyledItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QStyledItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.displayText": ('Any', 'PySide2.QtCore.QLocale'), + "QStyledItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStyledItemDelegate.initStyleOption": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.itemEditorFactory": (), + "QStyledItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QStyledItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QSwipeGesture: + "QSwipeGesture.__init__": ('PySide2.QtCore.QObject',), + "QSwipeGesture.horizontalDirection": (), + "QSwipeGesture.setSwipeAngle": ('float',), + "QSwipeGesture.swipeAngle": (), + "QSwipeGesture.verticalDirection": (), + + # class PySide2.QtWidgets.QSystemTrayIcon: + "QSystemTrayIcon.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'PySide2.QtCore.QObject')], + "QSystemTrayIcon.contextMenu": (), + "QSystemTrayIcon.event": ('PySide2.QtCore.QEvent',), + "QSystemTrayIcon.geometry": (), + "QSystemTrayIcon.hide": (), + "QSystemTrayIcon.icon": (), + "QSystemTrayIcon.isSystemTrayAvailable": (), + "QSystemTrayIcon.isVisible": (), + "QSystemTrayIcon.setContextMenu": ('PySide2.QtWidgets.QMenu',), + "QSystemTrayIcon.setIcon": ('PySide2.QtGui.QIcon',), + "QSystemTrayIcon.setToolTip": ('str',), + "QSystemTrayIcon.setVisible": ('bool',), + "QSystemTrayIcon.show": (), + "QSystemTrayIcon.showMessage": [('str', 'str', 'PySide2.QtGui.QIcon', 'int'), ('str', 'str', 'PySide2.QtWidgets.QSystemTrayIcon.MessageIcon', 'int')], + "QSystemTrayIcon.supportsMessages": (), + "QSystemTrayIcon.toolTip": (), + + # class PySide2.QtWidgets.QTabBar: + "QTabBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabBar.accessibleTabName": ('int',), + "QTabBar.addTab": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QTabBar.autoHide": (), + "QTabBar.changeCurrentOnDrag": (), + "QTabBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabBar.count": (), + "QTabBar.currentIndex": (), + "QTabBar.documentMode": (), + "QTabBar.drawBase": (), + "QTabBar.elideMode": (), + "QTabBar.event": ('PySide2.QtCore.QEvent',), + "QTabBar.expanding": (), + "QTabBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QTabBar.iconSize": (), + "QTabBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTab', 'int'), + "QTabBar.insertTab": [('int', 'PySide2.QtGui.QIcon', 'str'), ('int', 'str')], + "QTabBar.isMovable": (), + "QTabBar.isTabEnabled": ('int',), + "QTabBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabBar.minimumSizeHint": (), + "QTabBar.minimumTabSizeHint": ('int',), + "QTabBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.moveTab": ('int', 'int'), + "QTabBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabBar.removeTab": ('int',), + "QTabBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabBar.selectionBehaviorOnRemove": (), + "QTabBar.setAccessibleTabName": ('int', 'str'), + "QTabBar.setAutoHide": ('bool',), + "QTabBar.setChangeCurrentOnDrag": ('bool',), + "QTabBar.setCurrentIndex": ('int',), + "QTabBar.setDocumentMode": ('bool',), + "QTabBar.setDrawBase": ('bool',), + "QTabBar.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabBar.setExpanding": ('bool',), + "QTabBar.setIconSize": ('PySide2.QtCore.QSize',), + "QTabBar.setMovable": ('bool',), + "QTabBar.setSelectionBehaviorOnRemove": ('PySide2.QtWidgets.QTabBar.SelectionBehavior',), + "QTabBar.setShape": ('PySide2.QtWidgets.QTabBar.Shape',), + "QTabBar.setTabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition', 'PySide2.QtWidgets.QWidget'), + "QTabBar.setTabData": ('int', 'Any'), + "QTabBar.setTabEnabled": ('int', 'bool'), + "QTabBar.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabBar.setTabText": ('int', 'str'), + "QTabBar.setTabTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTabBar.setTabToolTip": ('int', 'str'), + "QTabBar.setTabWhatsThis": ('int', 'str'), + "QTabBar.setTabsClosable": ('bool',), + "QTabBar.setUsesScrollButtons": ('bool',), + "QTabBar.shape": (), + "QTabBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabBar.sizeHint": (), + "QTabBar.tabAt": ('PySide2.QtCore.QPoint',), + "QTabBar.tabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition'), + "QTabBar.tabData": ('int',), + "QTabBar.tabIcon": ('int',), + "QTabBar.tabInserted": ('int',), + "QTabBar.tabLayoutChange": (), + "QTabBar.tabRect": ('int',), + "QTabBar.tabRemoved": ('int',), + "QTabBar.tabSizeHint": ('int',), + "QTabBar.tabText": ('int',), + "QTabBar.tabTextColor": ('int',), + "QTabBar.tabToolTip": ('int',), + "QTabBar.tabWhatsThis": ('int',), + "QTabBar.tabsClosable": (), + "QTabBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTabBar.usesScrollButtons": (), + "QTabBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QTabWidget: + "QTabWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.addTab": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabWidget.clear": (), + "QTabWidget.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QTabWidget.count": (), + "QTabWidget.currentIndex": (), + "QTabWidget.currentWidget": (), + "QTabWidget.documentMode": (), + "QTabWidget.elideMode": (), + "QTabWidget.event": ('PySide2.QtCore.QEvent',), + "QTabWidget.hasHeightForWidth": (), + "QTabWidget.heightForWidth": ('int',), + "QTabWidget.iconSize": (), + "QTabWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), + "QTabWidget.insertTab": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.isMovable": (), + "QTabWidget.isTabEnabled": ('int',), + "QTabWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabWidget.minimumSizeHint": (), + "QTabWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabWidget.removeTab": ('int',), + "QTabWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabWidget.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QTabWidget.setCurrentIndex": ('int',), + "QTabWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.setDocumentMode": ('bool',), + "QTabWidget.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabWidget.setIconSize": ('PySide2.QtCore.QSize',), + "QTabWidget.setMovable": ('bool',), + "QTabWidget.setTabBar": ('PySide2.QtWidgets.QTabBar',), + "QTabWidget.setTabBarAutoHide": ('bool',), + "QTabWidget.setTabEnabled": ('int', 'bool'), + "QTabWidget.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabWidget.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QTabWidget.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QTabWidget.setTabText": ('int', 'str'), + "QTabWidget.setTabToolTip": ('int', 'str'), + "QTabWidget.setTabWhatsThis": ('int', 'str'), + "QTabWidget.setTabsClosable": ('bool',), + "QTabWidget.setUsesScrollButtons": ('bool',), + "QTabWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabWidget.sizeHint": (), + "QTabWidget.tabBar": (), + "QTabWidget.tabBarAutoHide": (), + "QTabWidget.tabIcon": ('int',), + "QTabWidget.tabInserted": ('int',), + "QTabWidget.tabPosition": (), + "QTabWidget.tabRemoved": ('int',), + "QTabWidget.tabShape": (), + "QTabWidget.tabText": ('int',), + "QTabWidget.tabToolTip": ('int',), + "QTabWidget.tabWhatsThis": ('int',), + "QTabWidget.tabsClosable": (), + "QTabWidget.usesScrollButtons": (), + "QTabWidget.widget": ('int',), + + # class PySide2.QtWidgets.QTableView: + "QTableView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTableView.clearSpans": (), + "QTableView.columnAt": ('int',), + "QTableView.columnCountChanged": ('int', 'int'), + "QTableView.columnMoved": ('int', 'int', 'int'), + "QTableView.columnResized": ('int', 'int', 'int'), + "QTableView.columnSpan": ('int', 'int'), + "QTableView.columnViewportPosition": ('int',), + "QTableView.columnWidth": ('int',), + "QTableView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTableView.doItemsLayout": (), + "QTableView.gridStyle": (), + "QTableView.hideColumn": ('int',), + "QTableView.hideRow": ('int',), + "QTableView.horizontalHeader": (), + "QTableView.horizontalOffset": (), + "QTableView.horizontalScrollbarAction": ('int',), + "QTableView.indexAt": ('PySide2.QtCore.QPoint',), + "QTableView.isColumnHidden": ('int',), + "QTableView.isCornerButtonEnabled": (), + "QTableView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTableView.isRowHidden": ('int',), + "QTableView.isSortingEnabled": (), + "QTableView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QTableView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTableView.resizeColumnToContents": ('int',), + "QTableView.resizeColumnsToContents": (), + "QTableView.resizeRowToContents": ('int',), + "QTableView.resizeRowsToContents": (), + "QTableView.rowAt": ('int',), + "QTableView.rowCountChanged": ('int', 'int'), + "QTableView.rowHeight": ('int',), + "QTableView.rowMoved": ('int', 'int', 'int'), + "QTableView.rowResized": ('int', 'int', 'int'), + "QTableView.rowSpan": ('int', 'int'), + "QTableView.rowViewportPosition": ('int',), + "QTableView.scrollContentsBy": ('int', 'int'), + "QTableView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableView.selectColumn": ('int',), + "QTableView.selectRow": ('int',), + "QTableView.selectedIndexes": (), + "QTableView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTableView.setColumnHidden": ('int', 'bool'), + "QTableView.setColumnWidth": ('int', 'int'), + "QTableView.setCornerButtonEnabled": ('bool',), + "QTableView.setGridStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QTableView.setHorizontalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTableView.setRowHeight": ('int', 'int'), + "QTableView.setRowHidden": ('int', 'bool'), + "QTableView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QTableView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTableView.setShowGrid": ('bool',), + "QTableView.setSortingEnabled": ('bool',), + "QTableView.setSpan": ('int', 'int', 'int', 'int'), + "QTableView.setVerticalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setWordWrap": ('bool',), + "QTableView.showColumn": ('int',), + "QTableView.showGrid": (), + "QTableView.showRow": ('int',), + "QTableView.sizeHintForColumn": ('int',), + "QTableView.sizeHintForRow": ('int',), + "QTableView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTableView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTableView.updateGeometries": (), + "QTableView.verticalHeader": (), + "QTableView.verticalOffset": (), + "QTableView.verticalScrollbarAction": ('int',), + "QTableView.viewOptions": (), + "QTableView.viewportSizeHint": (), + "QTableView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTableView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTableView.wordWrap": (), + + # class PySide2.QtWidgets.QTableWidget: + "QTableWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'int', 'PySide2.QtWidgets.QWidget')], + "QTableWidget.cellWidget": ('int', 'int'), + "QTableWidget.clear": (), + "QTableWidget.clearContents": (), + "QTableWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.column": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.columnCount": (), + "QTableWidget.currentColumn": (), + "QTableWidget.currentItem": (), + "QTableWidget.currentRow": (), + "QTableWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTableWidget.dropMimeData": ('int', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTableWidget.editItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.event": ('PySide2.QtCore.QEvent',), + "QTableWidget.findItems": ('str', 'MatchFlags'), + "QTableWidget.horizontalHeaderItem": ('int',), + "QTableWidget.indexFromItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.insertColumn": ('int',), + "QTableWidget.insertRow": ('int',), + "QTableWidget.isItemSelected": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.isSortingEnabled": (), + "QTableWidget.item": ('int', 'int'), + "QTableWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTableWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTableWidget.itemPrototype": (), + "QTableWidget.items": ('PySide2.QtCore.QMimeData',), + "QTableWidget.mimeData": ('list',), + "QTableWidget.mimeTypes": (), + "QTableWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.removeCellWidget": ('int', 'int'), + "QTableWidget.removeColumn": ('int',), + "QTableWidget.removeRow": ('int',), + "QTableWidget.row": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.rowCount": (), + "QTableWidget.scrollToItem": ('PySide2.QtWidgets.QTableWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableWidget.selectedItems": (), + "QTableWidget.selectedRanges": (), + "QTableWidget.setCellWidget": ('int', 'int', 'PySide2.QtWidgets.QWidget'), + "QTableWidget.setColumnCount": ('int',), + "QTableWidget.setCurrentCell": [('int', 'int'), ('int', 'int', 'SelectionFlags')], + "QTableWidget.setCurrentItem": [('PySide2.QtWidgets.QTableWidgetItem',), ('PySide2.QtWidgets.QTableWidgetItem', 'SelectionFlags')], + "QTableWidget.setHorizontalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setHorizontalHeaderLabels": ('List[str]',), + "QTableWidget.setItem": ('int', 'int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setItemPrototype": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.setItemSelected": ('PySide2.QtWidgets.QTableWidgetItem', 'bool'), + "QTableWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableWidget.setRangeSelected": ('PySide2.QtWidgets.QTableWidgetSelectionRange', 'bool'), + "QTableWidget.setRowCount": ('int',), + "QTableWidget.setSortingEnabled": ('bool',), + "QTableWidget.setVerticalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setVerticalHeaderLabels": ('List[str]',), + "QTableWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTableWidget.supportedDropActions": (), + "QTableWidget.takeHorizontalHeaderItem": ('int',), + "QTableWidget.takeItem": ('int', 'int'), + "QTableWidget.takeVerticalHeaderItem": ('int',), + "QTableWidget.verticalHeaderItem": ('int',), + "QTableWidget.visualColumn": ('int',), + "QTableWidget.visualItemRect": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.visualRow": ('int',), + + # class PySide2.QtWidgets.QTableWidgetItem: + "QTableWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'int'), ('PySide2.QtWidgets.QTableWidgetItem',), ('int',), ('str', 'int')], + "QTableWidgetItem.background": (), + "QTableWidgetItem.backgroundColor": (), + "QTableWidgetItem.checkState": (), + "QTableWidgetItem.clone": (), + "QTableWidgetItem.column": (), + "QTableWidgetItem.data": ('int',), + "QTableWidgetItem.flags": (), + "QTableWidgetItem.font": (), + "QTableWidgetItem.foreground": (), + "QTableWidgetItem.icon": (), + "QTableWidgetItem.isSelected": (), + "QTableWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTableWidgetItem.row": (), + "QTableWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QTableWidgetItem.setData": ('int', 'Any'), + "QTableWidgetItem.setFlags": ('ItemFlags',), + "QTableWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QTableWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QTableWidgetItem.setSelected": ('bool',), + "QTableWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QTableWidgetItem.setStatusTip": ('str',), + "QTableWidgetItem.setText": ('str',), + "QTableWidgetItem.setTextAlignment": ('int',), + "QTableWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setToolTip": ('str',), + "QTableWidgetItem.setWhatsThis": ('str',), + "QTableWidgetItem.sizeHint": (), + "QTableWidgetItem.statusTip": (), + "QTableWidgetItem.tableWidget": (), + "QTableWidgetItem.text": (), + "QTableWidgetItem.textAlignment": (), + "QTableWidgetItem.textColor": (), + "QTableWidgetItem.toolTip": (), + "QTableWidgetItem.type": (), + "QTableWidgetItem.whatsThis": (), + "QTableWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTableWidgetSelectionRange: + "QTableWidgetSelectionRange.__init__": [(), ('PySide2.QtWidgets.QTableWidgetSelectionRange',), ('int', 'int', 'int', 'int')], + "QTableWidgetSelectionRange.__copy__": (), + "QTableWidgetSelectionRange.bottomRow": (), + "QTableWidgetSelectionRange.columnCount": (), + "QTableWidgetSelectionRange.leftColumn": (), + "QTableWidgetSelectionRange.rightColumn": (), + "QTableWidgetSelectionRange.rowCount": (), + "QTableWidgetSelectionRange.topRow": (), + + # class PySide2.QtWidgets.QTapAndHoldGesture: + "QTapAndHoldGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapAndHoldGesture.position": (), + "QTapAndHoldGesture.setPosition": ('PySide2.QtCore.QPointF',), + "QTapAndHoldGesture.setTimeout": ('int',), + "QTapAndHoldGesture.timeout": (), + + # class PySide2.QtWidgets.QTapGesture: + "QTapGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapGesture.position": (), + "QTapGesture.setPosition": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QTextBrowser: + "QTextBrowser.__init__": ('PySide2.QtWidgets.QWidget',), + "QTextBrowser.backward": (), + "QTextBrowser.backwardHistoryCount": (), + "QTextBrowser.clearHistory": (), + "QTextBrowser.event": ('PySide2.QtCore.QEvent',), + "QTextBrowser.focusNextPrevChild": ('bool',), + "QTextBrowser.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextBrowser.forward": (), + "QTextBrowser.forwardHistoryCount": (), + "QTextBrowser.historyTitle": ('int',), + "QTextBrowser.historyUrl": ('int',), + "QTextBrowser.home": (), + "QTextBrowser.isBackwardAvailable": (), + "QTextBrowser.isForwardAvailable": (), + "QTextBrowser.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextBrowser.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextBrowser.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.openExternalLinks": (), + "QTextBrowser.openLinks": (), + "QTextBrowser.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextBrowser.reload": (), + "QTextBrowser.searchPaths": (), + "QTextBrowser.setOpenExternalLinks": ('bool',), + "QTextBrowser.setOpenLinks": ('bool',), + "QTextBrowser.setSearchPaths": ('List[str]',), + "QTextBrowser.setSource": ('PySide2.QtCore.QUrl',), + "QTextBrowser.source": (), + + # class PySide2.QtWidgets.QTextEdit: + "QTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QTextEdit.acceptRichText": (), + "QTextEdit.alignment": (), + "QTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QTextEdit.append": ('str',), + "QTextEdit.autoFormatting": (), + "QTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.canPaste": (), + "QTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QTextEdit.clear": (), + "QTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QTextEdit.copy": (), + "QTextEdit.createMimeDataFromSelection": (), + "QTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QTextEdit.currentCharFormat": (), + "QTextEdit.currentFont": (), + "QTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextEdit.cursorWidth": (), + "QTextEdit.cut": (), + "QTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.document": (), + "QTextEdit.documentTitle": (), + "QTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTextEdit.ensureCursorVisible": (), + "QTextEdit.event": ('PySide2.QtCore.QEvent',), + "QTextEdit.extraSelections": (), + "QTextEdit.find": [('PySide2.QtCore.QRegExp', 'FindFlags'), ('int',), ('str', 'FindFlags')], + "QTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.focusNextPrevChild": ('bool',), + "QTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.fontFamily": (), + "QTextEdit.fontItalic": (), + "QTextEdit.fontPointSize": (), + "QTextEdit.fontUnderline": (), + "QTextEdit.fontWeight": (), + "QTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.insertHtml": ('str',), + "QTextEdit.insertPlainText": ('str',), + "QTextEdit.isReadOnly": (), + "QTextEdit.isUndoRedoEnabled": (), + "QTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.lineWrapColumnOrWidth": (), + "QTextEdit.lineWrapMode": (), + "QTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextEdit.overwriteMode": (), + "QTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextEdit.paste": (), + "QTextEdit.placeholderText": (), + "QTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextEdit.redo": (), + "QTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTextEdit.scrollContentsBy": ('int', 'int'), + "QTextEdit.scrollToAnchor": ('str',), + "QTextEdit.selectAll": (), + "QTextEdit.setAcceptRichText": ('bool',), + "QTextEdit.setAlignment": ('Alignment',), + "QTextEdit.setAutoFormatting": ('AutoFormatting',), + "QTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.setCurrentFont": ('PySide2.QtGui.QFont',), + "QTextEdit.setCursorWidth": ('int',), + "QTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QTextEdit.setDocumentTitle": ('str',), + "QTextEdit.setExtraSelections": ('list',), + "QTextEdit.setFontFamily": ('str',), + "QTextEdit.setFontItalic": ('bool',), + "QTextEdit.setFontPointSize": ('float',), + "QTextEdit.setFontUnderline": ('bool',), + "QTextEdit.setFontWeight": ('int',), + "QTextEdit.setHtml": ('str',), + "QTextEdit.setLineWrapColumnOrWidth": ('int',), + "QTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QTextEdit.LineWrapMode',), + "QTextEdit.setOverwriteMode": ('bool',), + "QTextEdit.setPlaceholderText": ('str',), + "QTextEdit.setPlainText": ('str',), + "QTextEdit.setReadOnly": ('bool',), + "QTextEdit.setTabChangesFocus": ('bool',), + "QTextEdit.setTabStopWidth": ('int',), + "QTextEdit.setText": ('str',), + "QTextEdit.setTextBackgroundColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.setTextInteractionFlags": ('TextInteractionFlags',), + "QTextEdit.setUndoRedoEnabled": ('bool',), + "QTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTextEdit.tabChangesFocus": (), + "QTextEdit.tabStopWidth": (), + "QTextEdit.textBackgroundColor": (), + "QTextEdit.textColor": (), + "QTextEdit.textCursor": (), + "QTextEdit.textInteractionFlags": (), + "QTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTextEdit.toHtml": (), + "QTextEdit.toPlainText": (), + "QTextEdit.undo": (), + "QTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QTextEdit.wordWrapMode": (), + "QTextEdit.zoomIn": ('int',), + "QTextEdit.zoomInF": ('float',), + "QTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QTileRules: + "QTileRules.__init__": [('PySide2.QtCore.Qt.TileRule',), ('PySide2.QtCore.Qt.TileRule', 'PySide2.QtCore.Qt.TileRule'), ('PySide2.QtWidgets.QTileRules',)], + "QTileRules.__copy__": (), + + # class PySide2.QtWidgets.QTimeEdit: + "QTimeEdit.__init__": [('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QToolBar: + "QToolBar.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QToolBar.actionAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QToolBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QToolBar.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str')], + "QToolBar.addSeparator": (), + "QToolBar.addWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBar.allowedAreas": (), + "QToolBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBar.clear": (), + "QToolBar.event": ('PySide2.QtCore.QEvent',), + "QToolBar.iconSize": (), + "QToolBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolBar',), + "QToolBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QToolBar.insertWidget": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget'), + "QToolBar.isAreaAllowed": ('PySide2.QtCore.Qt.ToolBarArea',), + "QToolBar.isFloatable": (), + "QToolBar.isFloating": (), + "QToolBar.isMovable": (), + "QToolBar.orientation": (), + "QToolBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolBar.setAllowedAreas": ('ToolBarAreas',), + "QToolBar.setFloatable": ('bool',), + "QToolBar.setIconSize": ('PySide2.QtCore.QSize',), + "QToolBar.setMovable": ('bool',), + "QToolBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QToolBar.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolBar.toggleViewAction": (), + "QToolBar.toolButtonStyle": (), + "QToolBar.widgetForAction": ('PySide2.QtWidgets.QAction',), + + # class PySide2.QtWidgets.QToolBox: + "QToolBox.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QToolBox.addItem": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBox.count": (), + "QToolBox.currentIndex": (), + "QToolBox.currentWidget": (), + "QToolBox.event": ('PySide2.QtCore.QEvent',), + "QToolBox.indexOf": ('PySide2.QtWidgets.QWidget',), + "QToolBox.insertItem": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.isItemEnabled": ('int',), + "QToolBox.itemIcon": ('int',), + "QToolBox.itemInserted": ('int',), + "QToolBox.itemRemoved": ('int',), + "QToolBox.itemText": ('int',), + "QToolBox.itemToolTip": ('int',), + "QToolBox.removeItem": ('int',), + "QToolBox.setCurrentIndex": ('int',), + "QToolBox.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBox.setItemEnabled": ('int', 'bool'), + "QToolBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QToolBox.setItemText": ('int', 'str'), + "QToolBox.setItemToolTip": ('int', 'str'), + "QToolBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QToolBox.widget": ('int',), + + # class PySide2.QtWidgets.QToolButton: + "QToolButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QToolButton.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolButton.arrowType": (), + "QToolButton.autoRaise": (), + "QToolButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.defaultAction": (), + "QToolButton.enterEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.event": ('PySide2.QtCore.QEvent',), + "QToolButton.hitButton": ('PySide2.QtCore.QPoint',), + "QToolButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolButton',), + "QToolButton.leaveEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.menu": (), + "QToolButton.minimumSizeHint": (), + "QToolButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.nextCheckState": (), + "QToolButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolButton.popupMode": (), + "QToolButton.setArrowType": ('PySide2.QtCore.Qt.ArrowType',), + "QToolButton.setAutoRaise": ('bool',), + "QToolButton.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QToolButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QToolButton.setPopupMode": ('PySide2.QtWidgets.QToolButton.ToolButtonPopupMode',), + "QToolButton.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolButton.showMenu": (), + "QToolButton.sizeHint": (), + "QToolButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QToolButton.toolButtonStyle": (), + + # class PySide2.QtWidgets.QToolTip: + "QToolTip.font": (), + "QToolTip.hideText": (), + "QToolTip.isVisible": (), + "QToolTip.palette": (), + "QToolTip.setFont": ('PySide2.QtGui.QFont',), + "QToolTip.setPalette": ('PySide2.QtGui.QPalette',), + "QToolTip.showText": [('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect', 'int')], + "QToolTip.text": (), + + # class PySide2.QtWidgets.QTreeView: + "QTreeView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeView.allColumnsShowFocus": (), + "QTreeView.autoExpandDelay": (), + "QTreeView.collapse": ('PySide2.QtCore.QModelIndex',), + "QTreeView.collapseAll": (), + "QTreeView.columnAt": ('int',), + "QTreeView.columnCountChanged": ('int', 'int'), + "QTreeView.columnMoved": (), + "QTreeView.columnResized": ('int', 'int', 'int'), + "QTreeView.columnViewportPosition": ('int',), + "QTreeView.columnWidth": ('int',), + "QTreeView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTreeView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QTreeView.doItemsLayout": (), + "QTreeView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTreeView.drawBranches": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawRow": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawTree": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QRegion'), + "QTreeView.expand": ('PySide2.QtCore.QModelIndex',), + "QTreeView.expandAll": (), + "QTreeView.expandToDepth": ('int',), + "QTreeView.expandsOnDoubleClick": (), + "QTreeView.header": (), + "QTreeView.hideColumn": ('int',), + "QTreeView.horizontalOffset": (), + "QTreeView.horizontalScrollbarAction": ('int',), + "QTreeView.indentation": (), + "QTreeView.indexAbove": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexAt": ('PySide2.QtCore.QPoint',), + "QTreeView.indexBelow": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexRowSizeHint": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isAnimated": (), + "QTreeView.isColumnHidden": ('int',), + "QTreeView.isExpanded": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isHeaderHidden": (), + "QTreeView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isRowHidden": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isSortingEnabled": (), + "QTreeView.itemsExpandable": (), + "QTreeView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTreeView.keyboardSearch": ('str',), + "QTreeView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QTreeView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTreeView.reexpand": (), + "QTreeView.reset": (), + "QTreeView.resetIndentation": (), + "QTreeView.resizeColumnToContents": ('int',), + "QTreeView.rootIsDecorated": (), + "QTreeView.rowHeight": ('PySide2.QtCore.QModelIndex',), + "QTreeView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.scrollContentsBy": ('int', 'int'), + "QTreeView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeView.selectAll": (), + "QTreeView.selectedIndexes": (), + "QTreeView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTreeView.setAllColumnsShowFocus": ('bool',), + "QTreeView.setAnimated": ('bool',), + "QTreeView.setAutoExpandDelay": ('int',), + "QTreeView.setColumnHidden": ('int', 'bool'), + "QTreeView.setColumnWidth": ('int', 'int'), + "QTreeView.setExpanded": ('PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setExpandsOnDoubleClick": ('bool',), + "QTreeView.setFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTreeView.setHeaderHidden": ('bool',), + "QTreeView.setIndentation": ('int',), + "QTreeView.setItemsExpandable": ('bool',), + "QTreeView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeView.setRootIsDecorated": ('bool',), + "QTreeView.setRowHidden": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QTreeView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeView.setSortingEnabled": ('bool',), + "QTreeView.setTreePosition": ('int',), + "QTreeView.setUniformRowHeights": ('bool',), + "QTreeView.setWordWrap": ('bool',), + "QTreeView.showColumn": ('int',), + "QTreeView.sizeHintForColumn": ('int',), + "QTreeView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTreeView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTreeView.treePosition": (), + "QTreeView.uniformRowHeights": (), + "QTreeView.updateGeometries": (), + "QTreeView.verticalOffset": (), + "QTreeView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QTreeView.viewportSizeHint": (), + "QTreeView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTreeView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTreeView.wordWrap": (), + + # class PySide2.QtWidgets.QTreeWidget: + "QTreeWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeWidget.addTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.addTopLevelItems": ('list',), + "QTreeWidget.clear": (), + "QTreeWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.collapseItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.columnCount": (), + "QTreeWidget.currentColumn": (), + "QTreeWidget.currentItem": (), + "QTreeWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTreeWidget.dropMimeData": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTreeWidget.editItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.event": ('PySide2.QtCore.QEvent',), + "QTreeWidget.expandItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.findItems": ('str', 'MatchFlags', 'int'), + "QTreeWidget.headerItem": (), + "QTreeWidget.indexFromItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.indexOfTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.insertTopLevelItem": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidget.insertTopLevelItems": ('int', 'list'), + "QTreeWidget.invisibleRootItem": (), + "QTreeWidget.isFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAbove": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTreeWidget.itemBelow": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeWidget.itemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.items": ('PySide2.QtCore.QMimeData',), + "QTreeWidget.mimeData": ('list',), + "QTreeWidget.mimeTypes": (), + "QTreeWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.removeItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.scrollToItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeWidget.selectedItems": (), + "QTreeWidget.setColumnCount": ('int',), + "QTreeWidget.setCurrentItem": [('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'SelectionFlags')], + "QTreeWidget.setFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setHeaderItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.setHeaderLabel": ('str',), + "QTreeWidget.setHeaderLabels": ('List[str]',), + "QTreeWidget.setItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtWidgets.QWidget'), + "QTreeWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeWidget.sortColumn": (), + "QTreeWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidget.supportedDropActions": (), + "QTreeWidget.takeTopLevelItem": ('int',), + "QTreeWidget.topLevelItem": ('int',), + "QTreeWidget.topLevelItemCount": (), + "QTreeWidget.visualItemRect": ('PySide2.QtWidgets.QTreeWidgetItem',), + + # class PySide2.QtWidgets.QTreeWidgetItem: + "QTreeWidgetItem.__init__": [('List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('int',)], + "QTreeWidgetItem.addChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.addChildren": ('list',), + "QTreeWidgetItem.background": ('int',), + "QTreeWidgetItem.backgroundColor": ('int',), + "QTreeWidgetItem.checkState": ('int',), + "QTreeWidgetItem.child": ('int',), + "QTreeWidgetItem.childCount": (), + "QTreeWidgetItem.childIndicatorPolicy": (), + "QTreeWidgetItem.clone": (), + "QTreeWidgetItem.columnCount": (), + "QTreeWidgetItem.data": ('int', 'int'), + "QTreeWidgetItem.emitDataChanged": (), + "QTreeWidgetItem.flags": (), + "QTreeWidgetItem.font": ('int',), + "QTreeWidgetItem.foreground": ('int',), + "QTreeWidgetItem.icon": ('int',), + "QTreeWidgetItem.indexOfChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.insertChild": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidgetItem.insertChildren": ('int', 'list'), + "QTreeWidgetItem.isDisabled": (), + "QTreeWidgetItem.isExpanded": (), + "QTreeWidgetItem.isFirstColumnSpanned": (), + "QTreeWidgetItem.isHidden": (), + "QTreeWidgetItem.isSelected": (), + "QTreeWidgetItem.parent": (), + "QTreeWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTreeWidgetItem.removeChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.setBackground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setBackgroundColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setCheckState": ('int', 'PySide2.QtCore.Qt.CheckState'), + "QTreeWidgetItem.setChildIndicatorPolicy": ('PySide2.QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy',), + "QTreeWidgetItem.setData": ('int', 'int', 'Any'), + "QTreeWidgetItem.setDisabled": ('bool',), + "QTreeWidgetItem.setExpanded": ('bool',), + "QTreeWidgetItem.setFirstColumnSpanned": ('bool',), + "QTreeWidgetItem.setFlags": ('ItemFlags',), + "QTreeWidgetItem.setFont": ('int', 'PySide2.QtGui.QFont'), + "QTreeWidgetItem.setForeground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setHidden": ('bool',), + "QTreeWidgetItem.setIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTreeWidgetItem.setSelected": ('bool',), + "QTreeWidgetItem.setSizeHint": ('int', 'PySide2.QtCore.QSize'), + "QTreeWidgetItem.setStatusTip": ('int', 'str'), + "QTreeWidgetItem.setText": ('int', 'str'), + "QTreeWidgetItem.setTextAlignment": ('int', 'int'), + "QTreeWidgetItem.setTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setToolTip": ('int', 'str'), + "QTreeWidgetItem.setWhatsThis": ('int', 'str'), + "QTreeWidgetItem.sizeHint": ('int',), + "QTreeWidgetItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidgetItem.statusTip": ('int',), + "QTreeWidgetItem.takeChild": ('int',), + "QTreeWidgetItem.takeChildren": (), + "QTreeWidgetItem.text": ('int',), + "QTreeWidgetItem.textAlignment": ('int',), + "QTreeWidgetItem.textColor": ('int',), + "QTreeWidgetItem.toolTip": ('int',), + "QTreeWidgetItem.treeWidget": (), + "QTreeWidgetItem.type": (), + "QTreeWidgetItem.whatsThis": ('int',), + "QTreeWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTreeWidgetItemIterator: + "QTreeWidgetItemIterator.__init__": [('PySide2.QtWidgets.QTreeWidget', 'IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItem', 'IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItemIterator',)], + "QTreeWidgetItemIterator.__copy__": (), + "QTreeWidgetItemIterator.value": (), + + # class PySide2.QtWidgets.QUndoCommand: + "QUndoCommand.__init__": [('PySide2.QtWidgets.QUndoCommand',), ('str', 'PySide2.QtWidgets.QUndoCommand')], + "QUndoCommand.actionText": (), + "QUndoCommand.child": ('int',), + "QUndoCommand.childCount": (), + "QUndoCommand.id": (), + "QUndoCommand.isObsolete": (), + "QUndoCommand.mergeWith": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoCommand.redo": (), + "QUndoCommand.setObsolete": ('bool',), + "QUndoCommand.setText": ('str',), + "QUndoCommand.text": (), + "QUndoCommand.undo": (), + + # class PySide2.QtWidgets.QUndoGroup: + "QUndoGroup.__init__": ('PySide2.QtCore.QObject',), + "QUndoGroup.activeStack": (), + "QUndoGroup.addStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.canRedo": (), + "QUndoGroup.canUndo": (), + "QUndoGroup.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.isClean": (), + "QUndoGroup.redo": (), + "QUndoGroup.redoText": (), + "QUndoGroup.removeStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.setActiveStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.stacks": (), + "QUndoGroup.undo": (), + "QUndoGroup.undoText": (), + + # class PySide2.QtWidgets.QUndoStack: + "QUndoStack.__init__": ('PySide2.QtCore.QObject',), + "QUndoStack.beginMacro": ('str',), + "QUndoStack.canRedo": (), + "QUndoStack.canUndo": (), + "QUndoStack.cleanIndex": (), + "QUndoStack.clear": (), + "QUndoStack.command": ('int',), + "QUndoStack.count": (), + "QUndoStack.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.endMacro": (), + "QUndoStack.index": (), + "QUndoStack.isActive": (), + "QUndoStack.isClean": (), + "QUndoStack.push": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoStack.redo": (), + "QUndoStack.redoText": (), + "QUndoStack.resetClean": (), + "QUndoStack.setActive": ('bool',), + "QUndoStack.setClean": (), + "QUndoStack.setIndex": ('int',), + "QUndoStack.setUndoLimit": ('int',), + "QUndoStack.text": ('int',), + "QUndoStack.undo": (), + "QUndoStack.undoLimit": (), + "QUndoStack.undoText": (), + + # class PySide2.QtWidgets.QUndoView: + "QUndoView.__init__": [('PySide2.QtWidgets.QUndoGroup', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QUndoStack', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QUndoView.cleanIcon": (), + "QUndoView.emptyLabel": (), + "QUndoView.group": (), + "QUndoView.setCleanIcon": ('PySide2.QtGui.QIcon',), + "QUndoView.setEmptyLabel": ('str',), + "QUndoView.setGroup": ('PySide2.QtWidgets.QUndoGroup',), + "QUndoView.setStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoView.stack": (), + + # class PySide2.QtWidgets.QVBoxLayout: + "QVBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QWhatsThis: + "QWhatsThis.createAction": ('PySide2.QtCore.QObject',), + "QWhatsThis.enterWhatsThisMode": (), + "QWhatsThis.hideText": (), + "QWhatsThis.inWhatsThisMode": (), + "QWhatsThis.leaveWhatsThisMode": (), + "QWhatsThis.showText": ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), + + # class PySide2.QtWidgets.QWidget: + "QWidget.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWidget.acceptDrops": (), + "QWidget.accessibleDescription": (), + "QWidget.accessibleName": (), + "QWidget.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QWidget.actions": (), + "QWidget.activateWindow": (), + "QWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QWidget.addActions": ('list',), + "QWidget.adjustSize": (), + "QWidget.autoFillBackground": (), + "QWidget.backgroundRole": (), + "QWidget.backingStore": (), + "QWidget.baseSize": (), + "QWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QWidget.childAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.childrenRect": (), + "QWidget.childrenRegion": (), + "QWidget.clearFocus": (), + "QWidget.clearMask": (), + "QWidget.close": (), + "QWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QWidget.contentsMargins": (), + "QWidget.contentsRect": (), + "QWidget.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWidget.contextMenuPolicy": (), + "QWidget.create": ('int', 'bool', 'bool'), + "QWidget.createWinId": (), + "QWidget.createWindowContainer": ('PySide2.QtGui.QWindow', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWidget.cursor": (), + "QWidget.destroy": ('bool', 'bool'), + "QWidget.devType": (), + "QWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWidget.effectiveWinId": (), + "QWidget.ensurePolished": (), + "QWidget.enterEvent": ('PySide2.QtCore.QEvent',), + "QWidget.event": ('PySide2.QtCore.QEvent',), + "QWidget.find": ('int',), + "QWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusNextChild": (), + "QWidget.focusNextPrevChild": ('bool',), + "QWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusPolicy": (), + "QWidget.focusPreviousChild": (), + "QWidget.focusProxy": (), + "QWidget.focusWidget": (), + "QWidget.font": (), + "QWidget.fontInfo": (), + "QWidget.fontMetrics": (), + "QWidget.foregroundRole": (), + "QWidget.frameGeometry": (), + "QWidget.frameSize": (), + "QWidget.geometry": (), + "QWidget.getContentsMargins": ('int', 'int', 'int', 'int'), + "QWidget.grab": ('PySide2.QtCore.QRect',), + "QWidget.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'GestureFlags'), + "QWidget.grabKeyboard": (), + "QWidget.grabMouse": [(), ('PySide2.QtGui.QCursor',)], + "QWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QWidget.graphicsEffect": (), + "QWidget.graphicsProxyWidget": (), + "QWidget.hasFocus": (), + "QWidget.hasHeightForWidth": (), + "QWidget.hasMouseTracking": (), + "QWidget.hasTabletTracking": (), + "QWidget.height": (), + "QWidget.heightForWidth": ('int',), + "QWidget.hide": (), + "QWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWidget.initPainter": ('PySide2.QtGui.QPainter',), + "QWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QWidget.inputMethodHints": (), + "QWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QWidget.internalWinId": (), + "QWidget.isActiveWindow": (), + "QWidget.isAncestorOf": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabled": (), + "QWidget.isEnabledTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabledToTLW": (), + "QWidget.isFullScreen": (), + "QWidget.isHidden": (), + "QWidget.isLeftToRight": (), + "QWidget.isMaximized": (), + "QWidget.isMinimized": (), + "QWidget.isModal": (), + "QWidget.isRightToLeft": (), + "QWidget.isTopLevel": (), + "QWidget.isVisible": (), + "QWidget.isVisibleTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isWindow": (), + "QWidget.isWindowModified": (), + "QWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyboardGrabber": (), + "QWidget.layout": (), + "QWidget.layoutDirection": (), + "QWidget.leaveEvent": ('PySide2.QtCore.QEvent',), + "QWidget.locale": (), + "QWidget.lower": (), + "QWidget.mapFrom": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapFromParent": ('PySide2.QtCore.QPoint',), + "QWidget.mapTo": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapToParent": ('PySide2.QtCore.QPoint',), + "QWidget.mask": (), + "QWidget.maximumHeight": (), + "QWidget.maximumSize": (), + "QWidget.maximumWidth": (), + "QWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QWidget.minimumHeight": (), + "QWidget.minimumSize": (), + "QWidget.minimumSizeHint": (), + "QWidget.minimumWidth": (), + "QWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseGrabber": (), + "QWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWidget.nativeParentWidget": (), + "QWidget.nextInFocusChain": (), + "QWidget.normalGeometry": (), + "QWidget.overrideWindowFlags": ('WindowFlags',), + "QWidget.overrideWindowState": ('WindowStates',), + "QWidget.paintEngine": (), + "QWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWidget.palette": (), + "QWidget.parentWidget": (), + "QWidget.pos": (), + "QWidget.previousInFocusChain": (), + "QWidget.raise_": (), + "QWidget.rect": (), + "QWidget.redirected": ('PySide2.QtCore.QPoint',), + "QWidget.releaseKeyboard": (), + "QWidget.releaseMouse": (), + "QWidget.releaseShortcut": ('int',), + "QWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QWidget.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags')], + "QWidget.repaint": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWidget.restoreGeometry": ('PySide2.QtCore.QByteArray',), + "QWidget.saveGeometry": (), + "QWidget.scroll": [('int', 'int'), ('int', 'int', 'PySide2.QtCore.QRect')], + "QWidget.setAcceptDrops": ('bool',), + "QWidget.setAccessibleDescription": ('str',), + "QWidget.setAccessibleName": ('str',), + "QWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QWidget.setAutoFillBackground": ('bool',), + "QWidget.setBackgroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setBaseSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QWidget.setContextMenuPolicy": ('PySide2.QtCore.Qt.ContextMenuPolicy',), + "QWidget.setCursor": ('PySide2.QtGui.QCursor',), + "QWidget.setDisabled": ('bool',), + "QWidget.setEnabled": ('bool',), + "QWidget.setFixedHeight": ('int',), + "QWidget.setFixedSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setFixedWidth": ('int',), + "QWidget.setFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QWidget.setFocusProxy": ('PySide2.QtWidgets.QWidget',), + "QWidget.setFont": ('PySide2.QtGui.QFont',), + "QWidget.setForegroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWidget.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QWidget.setHidden": ('bool',), + "QWidget.setInputMethodHints": ('InputMethodHints',), + "QWidget.setLayout": ('PySide2.QtWidgets.QLayout',), + "QWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QWidget.setLocale": ('PySide2.QtCore.QLocale',), + "QWidget.setMask": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QRegion',)], + "QWidget.setMaximumHeight": ('int',), + "QWidget.setMaximumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMaximumWidth": ('int',), + "QWidget.setMinimumHeight": ('int',), + "QWidget.setMinimumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMinimumWidth": ('int',), + "QWidget.setMouseTracking": ('bool',), + "QWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QWidget.setParent": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QWidget.setShortcutEnabled": ('int', 'bool'), + "QWidget.setSizeIncrement": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy')], + "QWidget.setStatusTip": ('str',), + "QWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QWidget.setStyleSheet": ('str',), + "QWidget.setTabOrder": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), + "QWidget.setTabletTracking": ('bool',), + "QWidget.setToolTip": ('str',), + "QWidget.setToolTipDuration": ('int',), + "QWidget.setUpdatesEnabled": ('bool',), + "QWidget.setVisible": ('bool',), + "QWidget.setWhatsThis": ('str',), + "QWidget.setWindowFilePath": ('str',), + "QWidget.setWindowFlag": ('PySide2.QtCore.Qt.WindowType', 'bool'), + "QWidget.setWindowFlags": ('WindowFlags',), + "QWidget.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QWidget.setWindowIconText": ('str',), + "QWidget.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWidget.setWindowModified": ('bool',), + "QWidget.setWindowOpacity": ('float',), + "QWidget.setWindowRole": ('str',), + "QWidget.setWindowState": ('WindowStates',), + "QWidget.setWindowTitle": ('str',), + "QWidget.sharedPainter": (), + "QWidget.show": (), + "QWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWidget.showFullScreen": (), + "QWidget.showMaximized": (), + "QWidget.showMinimized": (), + "QWidget.showNormal": (), + "QWidget.size": (), + "QWidget.sizeHint": (), + "QWidget.sizeIncrement": (), + "QWidget.sizePolicy": (), + "QWidget.stackUnder": ('PySide2.QtWidgets.QWidget',), + "QWidget.statusTip": (), + "QWidget.style": (), + "QWidget.styleSheet": (), + "QWidget.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QWidget.toolTip": (), + "QWidget.toolTipDuration": (), + "QWidget.topLevelWidget": (), + "QWidget.underMouse": (), + "QWidget.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QWidget.unsetCursor": (), + "QWidget.unsetLayoutDirection": (), + "QWidget.unsetLocale": (), + "QWidget.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.updateGeometry": (), + "QWidget.updateMicroFocus": (), + "QWidget.updatesEnabled": (), + "QWidget.visibleRegion": (), + "QWidget.whatsThis": (), + "QWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWidget.width": (), + "QWidget.winId": (), + "QWidget.window": (), + "QWidget.windowFilePath": (), + "QWidget.windowFlags": (), + "QWidget.windowHandle": (), + "QWidget.windowIcon": (), + "QWidget.windowIconText": (), + "QWidget.windowModality": (), + "QWidget.windowOpacity": (), + "QWidget.windowRole": (), + "QWidget.windowState": (), + "QWidget.windowTitle": (), + "QWidget.windowType": (), + "QWidget.x": (), + "QWidget.y": (), + + # class PySide2.QtWidgets.QWidgetAction: + "QWidgetAction.__init__": ('PySide2.QtCore.QObject',), + "QWidgetAction.createWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.createdWidgets": (), + "QWidgetAction.defaultWidget": (), + "QWidgetAction.deleteWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.event": ('PySide2.QtCore.QEvent',), + "QWidgetAction.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QWidgetAction.releaseWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.requestWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.setDefaultWidget": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QWidgetItem: + "QWidgetItem.__init__": ('PySide2.QtWidgets.QWidget',), + "QWidgetItem.controlTypes": (), + "QWidgetItem.expandingDirections": (), + "QWidgetItem.geometry": (), + "QWidgetItem.hasHeightForWidth": (), + "QWidgetItem.heightForWidth": ('int',), + "QWidgetItem.isEmpty": (), + "QWidgetItem.maximumSize": (), + "QWidgetItem.minimumSize": (), + "QWidgetItem.setGeometry": ('PySide2.QtCore.QRect',), + "QWidgetItem.sizeHint": (), + "QWidgetItem.widget": (), + + # class PySide2.QtWidgets.QWizard: + "QWizard.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWizard.addPage": ('PySide2.QtWidgets.QWizardPage',), + "QWizard.back": (), + "QWizard.button": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.cleanupPage": ('int',), + "QWizard.currentId": (), + "QWizard.currentPage": (), + "QWizard.done": ('int',), + "QWizard.event": ('PySide2.QtCore.QEvent',), + "QWizard.field": ('str',), + "QWizard.hasVisitedPage": ('int',), + "QWizard.initializePage": ('int',), + "QWizard.nextId": (), + "QWizard.options": (), + "QWizard.page": ('int',), + "QWizard.pageIds": (), + "QWizard.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWizard.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizard.removePage": ('int',), + "QWizard.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWizard.restart": (), + "QWizard.setButton": ('PySide2.QtWidgets.QWizard.WizardButton', 'PySide2.QtWidgets.QAbstractButton'), + "QWizard.setButtonLayout": ('list',), + "QWizard.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizard.setDefaultProperty": ('str', 'str', 'str'), + "QWizard.setField": ('str', 'Any'), + "QWizard.setOption": ('PySide2.QtWidgets.QWizard.WizardOption', 'bool'), + "QWizard.setOptions": ('WizardOptions',), + "QWizard.setPage": ('int', 'PySide2.QtWidgets.QWizardPage'), + "QWizard.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizard.setSideWidget": ('PySide2.QtWidgets.QWidget',), + "QWizard.setStartId": ('int',), + "QWizard.setSubTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setVisible": ('bool',), + "QWizard.setWizardStyle": ('PySide2.QtWidgets.QWizard.WizardStyle',), + "QWizard.sideWidget": (), + "QWizard.sizeHint": (), + "QWizard.startId": (), + "QWizard.subTitleFormat": (), + "QWizard.testOption": ('PySide2.QtWidgets.QWizard.WizardOption',), + "QWizard.titleFormat": (), + "QWizard.validateCurrentPage": (), + "QWizard.visitedPages": (), + "QWizard.wizardStyle": (), + + # class PySide2.QtWidgets.QWizardPage: + "QWizardPage.__init__": ('PySide2.QtWidgets.QWidget',), + "QWizardPage.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizardPage.cleanupPage": (), + "QWizardPage.field": ('str',), + "QWizardPage.initializePage": (), + "QWizardPage.isCommitPage": (), + "QWizardPage.isComplete": (), + "QWizardPage.isFinalPage": (), + "QWizardPage.nextId": (), + "QWizardPage.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizardPage.registerField": ('str', 'PySide2.QtWidgets.QWidget', 'str', 'str'), + "QWizardPage.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizardPage.setCommitPage": ('bool',), + "QWizardPage.setField": ('str', 'Any'), + "QWizardPage.setFinalPage": ('bool',), + "QWizardPage.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizardPage.setSubTitle": ('str',), + "QWizardPage.setTitle": ('str',), + "QWizardPage.subTitle": (), + "QWizardPage.title": (), + "QWizardPage.validatePage": (), + "QWizardPage.wizard": (), + }) + +# Module PySide2.QtPrintSupport +if "PySide2.QtPrintSupport" in sys.modules: + dict.update({ + + # class PySide2.QtPrintSupport.QAbstractPrintDialog: + "QAbstractPrintDialog.__init__": ('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), + "QAbstractPrintDialog.addEnabledOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.enabledOptions": (), + "QAbstractPrintDialog.exec_": (), + "QAbstractPrintDialog.fromPage": (), + "QAbstractPrintDialog.isOptionEnabled": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.maxPage": (), + "QAbstractPrintDialog.minPage": (), + "QAbstractPrintDialog.printRange": (), + "QAbstractPrintDialog.printer": (), + "QAbstractPrintDialog.setEnabledOptions": ('PrintDialogOptions',), + "QAbstractPrintDialog.setFromTo": ('int', 'int'), + "QAbstractPrintDialog.setMinMax": ('int', 'int'), + "QAbstractPrintDialog.setOptionTabs": ('list',), + "QAbstractPrintDialog.setPrintRange": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintRange',), + "QAbstractPrintDialog.toPage": (), + + # class PySide2.QtPrintSupport.QPageSetupDialog: + "QPageSetupDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPageSetupDialog.done": ('int',), + "QPageSetupDialog.exec_": (), + "QPageSetupDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPageSetupDialog.printer": (), + + # class PySide2.QtPrintSupport.QPrintDialog: + "QPrintDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPrintDialog.accept": (), + "QPrintDialog.done": ('int',), + "QPrintDialog.exec_": (), + "QPrintDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintDialog.options": (), + "QPrintDialog.setOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption', 'bool'), + "QPrintDialog.setOptions": ('PrintDialogOptions',), + "QPrintDialog.setVisible": ('bool',), + "QPrintDialog.testOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + + # class PySide2.QtPrintSupport.QPrintEngine: + "QPrintEngine.__init__": (), + "QPrintEngine.abort": (), + "QPrintEngine.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrintEngine.newPage": (), + "QPrintEngine.printerState": (), + "QPrintEngine.property": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey',), + "QPrintEngine.setProperty": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey', 'Any'), + + # class PySide2.QtPrintSupport.QPrintPreviewDialog: + "QPrintPreviewDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QPrintPreviewDialog.done": ('int',), + "QPrintPreviewDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintPreviewDialog.printer": (), + "QPrintPreviewDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintPreviewWidget: + "QPrintPreviewWidget.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QPrintPreviewWidget.currentPage": (), + "QPrintPreviewWidget.fitInView": (), + "QPrintPreviewWidget.fitToWidth": (), + "QPrintPreviewWidget.orientation": (), + "QPrintPreviewWidget.pageCount": (), + "QPrintPreviewWidget.print_": (), + "QPrintPreviewWidget.setAllPagesViewMode": (), + "QPrintPreviewWidget.setCurrentPage": ('int',), + "QPrintPreviewWidget.setFacingPagesViewMode": (), + "QPrintPreviewWidget.setLandscapeOrientation": (), + "QPrintPreviewWidget.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrintPreviewWidget.setPortraitOrientation": (), + "QPrintPreviewWidget.setSinglePageViewMode": (), + "QPrintPreviewWidget.setViewMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ViewMode',), + "QPrintPreviewWidget.setVisible": ('bool',), + "QPrintPreviewWidget.setZoomFactor": ('float',), + "QPrintPreviewWidget.setZoomMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ZoomMode',), + "QPrintPreviewWidget.updatePreview": (), + "QPrintPreviewWidget.viewMode": (), + "QPrintPreviewWidget.zoomFactor": (), + "QPrintPreviewWidget.zoomIn": ('float',), + "QPrintPreviewWidget.zoomMode": (), + "QPrintPreviewWidget.zoomOut": ('float',), + + # class PySide2.QtPrintSupport.QPrinter: + "QPrinter.__init__": [('PySide2.QtPrintSupport.QPrinter.PrinterMode',), ('PySide2.QtPrintSupport.QPrinterInfo', 'PySide2.QtPrintSupport.QPrinter.PrinterMode')], + "QPrinter.abort": (), + "QPrinter.actualNumCopies": (), + "QPrinter.collateCopies": (), + "QPrinter.colorMode": (), + "QPrinter.copyCount": (), + "QPrinter.creator": (), + "QPrinter.devType": (), + "QPrinter.docName": (), + "QPrinter.doubleSidedPrinting": (), + "QPrinter.duplex": (), + "QPrinter.fontEmbeddingEnabled": (), + "QPrinter.fromPage": (), + "QPrinter.fullPage": (), + "QPrinter.getPageMargins": ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit'), + "QPrinter.isValid": (), + "QPrinter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrinter.newPage": (), + "QPrinter.numCopies": (), + "QPrinter.orientation": (), + "QPrinter.outputFileName": (), + "QPrinter.outputFormat": (), + "QPrinter.pageOrder": (), + "QPrinter.pageRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.pageSize": (), + "QPrinter.paintEngine": (), + "QPrinter.paperName": (), + "QPrinter.paperRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSize": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSource": (), + "QPrinter.printEngine": (), + "QPrinter.printProgram": (), + "QPrinter.printRange": (), + "QPrinter.printerName": (), + "QPrinter.printerState": (), + "QPrinter.resolution": (), + "QPrinter.setCollateCopies": ('bool',), + "QPrinter.setColorMode": ('PySide2.QtPrintSupport.QPrinter.ColorMode',), + "QPrinter.setCopyCount": ('int',), + "QPrinter.setCreator": ('str',), + "QPrinter.setDocName": ('str',), + "QPrinter.setDoubleSidedPrinting": ('bool',), + "QPrinter.setDuplex": ('PySide2.QtPrintSupport.QPrinter.DuplexMode',), + "QPrinter.setEngines": ('PySide2.QtPrintSupport.QPrintEngine', 'PySide2.QtGui.QPaintEngine'), + "QPrinter.setFontEmbeddingEnabled": ('bool',), + "QPrinter.setFromTo": ('int', 'int'), + "QPrinter.setFullPage": ('bool',), + "QPrinter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPrinter.setNumCopies": ('int',), + "QPrinter.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrinter.setOutputFileName": ('str',), + "QPrinter.setOutputFormat": ('PySide2.QtPrintSupport.QPrinter.OutputFormat',), + "QPrinter.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit')], + "QPrinter.setPageOrder": ('PySide2.QtPrintSupport.QPrinter.PageOrder',), + "QPrinter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPrinter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPrinter.setPaperName": ('str',), + "QPrinter.setPaperSize": [('PySide2.QtCore.QSizeF', 'PySide2.QtPrintSupport.QPrinter.Unit'), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPrinter.setPaperSource": ('PySide2.QtPrintSupport.QPrinter.PaperSource',), + "QPrinter.setPrintProgram": ('str',), + "QPrinter.setPrintRange": ('PySide2.QtPrintSupport.QPrinter.PrintRange',), + "QPrinter.setPrinterName": ('str',), + "QPrinter.setResolution": ('int',), + "QPrinter.setWinPageSize": ('int',), + "QPrinter.supportedResolutions": (), + "QPrinter.supportsMultipleCopies": (), + "QPrinter.toPage": (), + "QPrinter.winPageSize": (), + + # class PySide2.QtPrintSupport.QPrinterInfo: + "QPrinterInfo.__init__": [(), ('PySide2.QtPrintSupport.QPrinter',), ('PySide2.QtPrintSupport.QPrinterInfo',)], + "QPrinterInfo.__copy__": (), + "QPrinterInfo.availablePrinterNames": (), + "QPrinterInfo.availablePrinters": (), + "QPrinterInfo.defaultDuplexMode": (), + "QPrinterInfo.defaultPageSize": (), + "QPrinterInfo.defaultPrinter": (), + "QPrinterInfo.defaultPrinterName": (), + "QPrinterInfo.description": (), + "QPrinterInfo.isDefault": (), + "QPrinterInfo.isNull": (), + "QPrinterInfo.isRemote": (), + "QPrinterInfo.location": (), + "QPrinterInfo.makeAndModel": (), + "QPrinterInfo.maximumPhysicalPageSize": (), + "QPrinterInfo.minimumPhysicalPageSize": (), + "QPrinterInfo.printerInfo": ('str',), + "QPrinterInfo.printerName": (), + "QPrinterInfo.state": (), + "QPrinterInfo.supportedDuplexModes": (), + "QPrinterInfo.supportedPageSizes": (), + "QPrinterInfo.supportedPaperSizes": (), + "QPrinterInfo.supportedResolutions": (), + "QPrinterInfo.supportedSizesWithNames": (), + "QPrinterInfo.supportsCustomPageSizes": (), + }) + +# Module PySide2.QtSql +if "PySide2.QtSql" in sys.modules: + dict.update({ + + # class PySide2.QtSql.QSql: + + # class PySide2.QtSql.QSqlDatabase: + "QSqlDatabase.__init__": [(), ('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlDriver',), ('str',)], + "QSqlDatabase.__copy__": (), + "QSqlDatabase.addDatabase": [('PySide2.QtSql.QSqlDriver', 'str'), ('str', 'str')], + "QSqlDatabase.cloneDatabase": ('PySide2.QtSql.QSqlDatabase', 'str'), + "QSqlDatabase.close": (), + "QSqlDatabase.commit": (), + "QSqlDatabase.connectOptions": (), + "QSqlDatabase.connectionName": (), + "QSqlDatabase.connectionNames": (), + "QSqlDatabase.contains": ('str',), + "QSqlDatabase.database": ('str', 'bool'), + "QSqlDatabase.databaseName": (), + "QSqlDatabase.driver": (), + "QSqlDatabase.driverName": (), + "QSqlDatabase.drivers": (), + "QSqlDatabase.exec_": ('str',), + "QSqlDatabase.hostName": (), + "QSqlDatabase.isDriverAvailable": ('str',), + "QSqlDatabase.isOpen": (), + "QSqlDatabase.isOpenError": (), + "QSqlDatabase.isValid": (), + "QSqlDatabase.lastError": (), + "QSqlDatabase.numericalPrecisionPolicy": (), + "QSqlDatabase.open": [(), ('str', 'str')], + "QSqlDatabase.password": (), + "QSqlDatabase.port": (), + "QSqlDatabase.primaryIndex": ('str',), + "QSqlDatabase.record": ('str',), + "QSqlDatabase.registerSqlDriver": ('str', 'PySide2.QtSql.QSqlDriverCreatorBase'), + "QSqlDatabase.removeDatabase": ('str',), + "QSqlDatabase.rollback": (), + "QSqlDatabase.setConnectOptions": ('str',), + "QSqlDatabase.setDatabaseName": ('str',), + "QSqlDatabase.setHostName": ('str',), + "QSqlDatabase.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDatabase.setPassword": ('str',), + "QSqlDatabase.setPort": ('int',), + "QSqlDatabase.setUserName": ('str',), + "QSqlDatabase.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDatabase.transaction": (), + "QSqlDatabase.userName": (), + + # class PySide2.QtSql.QSqlDriver: + "QSqlDriver.__init__": ('PySide2.QtCore.QObject',), + "QSqlDriver.beginTransaction": (), + "QSqlDriver.cancelQuery": (), + "QSqlDriver.close": (), + "QSqlDriver.commitTransaction": (), + "QSqlDriver.createResult": (), + "QSqlDriver.dbmsType": (), + "QSqlDriver.escapeIdentifier": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.formatValue": ('PySide2.QtSql.QSqlField', 'bool'), + "QSqlDriver.hasFeature": ('PySide2.QtSql.QSqlDriver.DriverFeature',), + "QSqlDriver.isIdentifierEscaped": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.isOpen": (), + "QSqlDriver.isOpenError": (), + "QSqlDriver.lastError": (), + "QSqlDriver.numericalPrecisionPolicy": (), + "QSqlDriver.open": ('str', 'str', 'str', 'str', 'int', 'str'), + "QSqlDriver.primaryIndex": ('str',), + "QSqlDriver.record": ('str',), + "QSqlDriver.rollbackTransaction": (), + "QSqlDriver.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlDriver.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDriver.setOpen": ('bool',), + "QSqlDriver.setOpenError": ('bool',), + "QSqlDriver.sqlStatement": ('PySide2.QtSql.QSqlDriver.StatementType', 'str', 'PySide2.QtSql.QSqlRecord', 'bool'), + "QSqlDriver.stripDelimiters": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.subscribeToNotification": ('str',), + "QSqlDriver.subscribedToNotifications": (), + "QSqlDriver.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDriver.unsubscribeFromNotification": ('str',), + + # class PySide2.QtSql.QSqlDriverCreatorBase: + "QSqlDriverCreatorBase.__init__": (), + "QSqlDriverCreatorBase.createObject": (), + + # class PySide2.QtSql.QSqlError: + "QSqlError.__init__": [('PySide2.QtSql.QSqlError',), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'int'), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'str')], + "QSqlError.__copy__": (), + "QSqlError.databaseText": (), + "QSqlError.driverText": (), + "QSqlError.isValid": (), + "QSqlError.nativeErrorCode": (), + "QSqlError.number": (), + "QSqlError.setDatabaseText": ('str',), + "QSqlError.setDriverText": ('str',), + "QSqlError.setNumber": ('int',), + "QSqlError.setType": ('PySide2.QtSql.QSqlError.ErrorType',), + "QSqlError.text": (), + "QSqlError.type": (), + + # class PySide2.QtSql.QSqlField: + "QSqlField.__init__": [('PySide2.QtSql.QSqlField',), ('str', 'type')], + "QSqlField.__copy__": (), + "QSqlField.clear": (), + "QSqlField.defaultValue": (), + "QSqlField.isAutoValue": (), + "QSqlField.isGenerated": (), + "QSqlField.isNull": (), + "QSqlField.isReadOnly": (), + "QSqlField.isValid": (), + "QSqlField.length": (), + "QSqlField.name": (), + "QSqlField.precision": (), + "QSqlField.requiredStatus": (), + "QSqlField.setAutoValue": ('bool',), + "QSqlField.setDefaultValue": ('Any',), + "QSqlField.setGenerated": ('bool',), + "QSqlField.setLength": ('int',), + "QSqlField.setName": ('str',), + "QSqlField.setPrecision": ('int',), + "QSqlField.setReadOnly": ('bool',), + "QSqlField.setRequired": ('bool',), + "QSqlField.setRequiredStatus": ('PySide2.QtSql.QSqlField.RequiredStatus',), + "QSqlField.setSqlType": ('int',), + "QSqlField.setType": ('type',), + "QSqlField.setValue": ('Any',), + "QSqlField.type": (), + "QSqlField.typeID": (), + "QSqlField.value": (), + + # class PySide2.QtSql.QSqlIndex: + "QSqlIndex.__init__": [('PySide2.QtSql.QSqlIndex',), ('str', 'str')], + "QSqlIndex.__copy__": (), + "QSqlIndex.append": [('PySide2.QtSql.QSqlField',), ('PySide2.QtSql.QSqlField', 'bool')], + "QSqlIndex.cursorName": (), + "QSqlIndex.isDescending": ('int',), + "QSqlIndex.name": (), + "QSqlIndex.setCursorName": ('str',), + "QSqlIndex.setDescending": ('int', 'bool'), + "QSqlIndex.setName": ('str',), + + # class PySide2.QtSql.QSqlQuery: + "QSqlQuery.__init__": [('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlQuery',), ('PySide2.QtSql.QSqlResult',), ('str', 'PySide2.QtSql.QSqlDatabase')], + "QSqlQuery.__copy__": (), + "QSqlQuery.addBindValue": ('Any', 'ParamType'), + "QSqlQuery.at": (), + "QSqlQuery.bindValue": [('int', 'Any', 'ParamType'), ('str', 'Any', 'ParamType')], + "QSqlQuery.boundValue": [('int',), ('str',)], + "QSqlQuery.boundValues": (), + "QSqlQuery.clear": (), + "QSqlQuery.driver": (), + "QSqlQuery.execBatch": ('PySide2.QtSql.QSqlQuery.BatchExecutionMode',), + "QSqlQuery.exec_": [(), ('str',)], + "QSqlQuery.executedQuery": (), + "QSqlQuery.finish": (), + "QSqlQuery.first": (), + "QSqlQuery.isActive": (), + "QSqlQuery.isForwardOnly": (), + "QSqlQuery.isNull": [('int',), ('str',)], + "QSqlQuery.isSelect": (), + "QSqlQuery.isValid": (), + "QSqlQuery.last": (), + "QSqlQuery.lastError": (), + "QSqlQuery.lastInsertId": (), + "QSqlQuery.lastQuery": (), + "QSqlQuery.nextResult": (), + "QSqlQuery.numRowsAffected": (), + "QSqlQuery.numericalPrecisionPolicy": (), + "QSqlQuery.prepare": ('str',), + "QSqlQuery.previous": (), + "QSqlQuery.record": (), + "QSqlQuery.result": (), + "QSqlQuery.seek": ('int', 'bool'), + "QSqlQuery.setForwardOnly": ('bool',), + "QSqlQuery.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlQuery.size": (), + "QSqlQuery.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlQueryModel: + "QSqlQueryModel.__init__": ('PySide2.QtCore.QObject',), + "QSqlQueryModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginResetModel": (), + "QSqlQueryModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.clear": (), + "QSqlQueryModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlQueryModel.endInsertColumns": (), + "QSqlQueryModel.endInsertRows": (), + "QSqlQueryModel.endRemoveColumns": (), + "QSqlQueryModel.endRemoveRows": (), + "QSqlQueryModel.endResetModel": (), + "QSqlQueryModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlQueryModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.lastError": (), + "QSqlQueryModel.query": (), + "QSqlQueryModel.queryChange": (), + "QSqlQueryModel.record": [(), ('int',)], + "QSqlQueryModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QSqlQueryModel.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlQueryModel.setQuery": [('PySide2.QtSql.QSqlQuery',), ('str', 'PySide2.QtSql.QSqlDatabase')], + + # class PySide2.QtSql.QSqlRecord: + "QSqlRecord.__init__": [(), ('PySide2.QtSql.QSqlRecord',)], + "QSqlRecord.__copy__": (), + "QSqlRecord.append": ('PySide2.QtSql.QSqlField',), + "QSqlRecord.clear": (), + "QSqlRecord.clearValues": (), + "QSqlRecord.contains": ('str',), + "QSqlRecord.count": (), + "QSqlRecord.field": [('int',), ('str',)], + "QSqlRecord.fieldName": ('int',), + "QSqlRecord.indexOf": ('str',), + "QSqlRecord.insert": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.isEmpty": (), + "QSqlRecord.isGenerated": [('int',), ('str',)], + "QSqlRecord.isNull": [('int',), ('str',)], + "QSqlRecord.keyValues": ('PySide2.QtSql.QSqlRecord',), + "QSqlRecord.remove": ('int',), + "QSqlRecord.replace": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.setGenerated": [('int', 'bool'), ('str', 'bool')], + "QSqlRecord.setNull": [('int',), ('str',)], + "QSqlRecord.setValue": [('int', 'Any'), ('str', 'Any')], + "QSqlRecord.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlRelation: + "QSqlRelation.__init__": [(), ('PySide2.QtSql.QSqlRelation',), ('str', 'str', 'str')], + "QSqlRelation.__copy__": (), + "QSqlRelation.displayColumn": (), + "QSqlRelation.indexColumn": (), + "QSqlRelation.isValid": (), + "QSqlRelation.swap": ('PySide2.QtSql.QSqlRelation',), + "QSqlRelation.tableName": (), + + # class PySide2.QtSql.QSqlRelationalDelegate: + "QSqlRelationalDelegate.__init__": ('PySide2.QtCore.QObject',), + "QSqlRelationalDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtSql.QSqlRelationalTableModel: + "QSqlRelationalTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlRelationalTableModel.clear": (), + "QSqlRelationalTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlRelationalTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlRelationalTableModel.orderByClause": (), + "QSqlRelationalTableModel.relation": ('int',), + "QSqlRelationalTableModel.relationModel": ('int',), + "QSqlRelationalTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalTableModel.revertRow": ('int',), + "QSqlRelationalTableModel.select": (), + "QSqlRelationalTableModel.selectStatement": (), + "QSqlRelationalTableModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSqlRelationalTableModel.setJoinMode": ('PySide2.QtSql.QSqlRelationalTableModel.JoinMode',), + "QSqlRelationalTableModel.setRelation": ('int', 'PySide2.QtSql.QSqlRelation'), + "QSqlRelationalTableModel.setTable": ('str',), + "QSqlRelationalTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + + # class PySide2.QtSql.QSqlResult: + "QSqlResult.__init__": ('PySide2.QtSql.QSqlDriver',), + "QSqlResult.addBindValue": ('Any', 'ParamType'), + "QSqlResult.at": (), + "QSqlResult.bindValue": [('int', 'Any', 'ParamType'), ('str', 'Any', 'ParamType')], + "QSqlResult.bindValueType": [('int',), ('str',)], + "QSqlResult.bindingSyntax": (), + "QSqlResult.boundValue": [('int',), ('str',)], + "QSqlResult.boundValueCount": (), + "QSqlResult.boundValueName": ('int',), + "QSqlResult.boundValues": (), + "QSqlResult.clear": (), + "QSqlResult.data": ('int',), + "QSqlResult.detachFromResultSet": (), + "QSqlResult.driver": (), + "QSqlResult.execBatch": ('bool',), + "QSqlResult.exec_": (), + "QSqlResult.executedQuery": (), + "QSqlResult.fetch": ('int',), + "QSqlResult.fetchFirst": (), + "QSqlResult.fetchLast": (), + "QSqlResult.fetchNext": (), + "QSqlResult.fetchPrevious": (), + "QSqlResult.handle": (), + "QSqlResult.hasOutValues": (), + "QSqlResult.isActive": (), + "QSqlResult.isForwardOnly": (), + "QSqlResult.isNull": ('int',), + "QSqlResult.isSelect": (), + "QSqlResult.isValid": (), + "QSqlResult.lastError": (), + "QSqlResult.lastInsertId": (), + "QSqlResult.lastQuery": (), + "QSqlResult.nextResult": (), + "QSqlResult.numRowsAffected": (), + "QSqlResult.numericalPrecisionPolicy": (), + "QSqlResult.prepare": ('str',), + "QSqlResult.record": (), + "QSqlResult.reset": ('str',), + "QSqlResult.resetBindCount": (), + "QSqlResult.savePrepare": ('str',), + "QSqlResult.setActive": ('bool',), + "QSqlResult.setAt": ('int',), + "QSqlResult.setForwardOnly": ('bool',), + "QSqlResult.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlResult.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlResult.setQuery": ('str',), + "QSqlResult.setSelect": ('bool',), + "QSqlResult.size": (), + + # class PySide2.QtSql.QSqlTableModel: + "QSqlTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlTableModel.clear": (), + "QSqlTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlTableModel.database": (), + "QSqlTableModel.deleteRowFromTable": ('int',), + "QSqlTableModel.editStrategy": (), + "QSqlTableModel.fieldIndex": ('str',), + "QSqlTableModel.filter": (), + "QSqlTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlTableModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.insertRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlTableModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.isDirty": [(), ('PySide2.QtCore.QModelIndex',)], + "QSqlTableModel.orderByClause": (), + "QSqlTableModel.primaryKey": (), + "QSqlTableModel.primaryValues": ('int',), + "QSqlTableModel.record": [(), ('int',)], + "QSqlTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.revert": (), + "QSqlTableModel.revertAll": (), + "QSqlTableModel.revertRow": ('int',), + "QSqlTableModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.select": (), + "QSqlTableModel.selectRow": ('int',), + "QSqlTableModel.selectStatement": (), + "QSqlTableModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSqlTableModel.setEditStrategy": ('PySide2.QtSql.QSqlTableModel.EditStrategy',), + "QSqlTableModel.setFilter": ('str',), + "QSqlTableModel.setPrimaryKey": ('PySide2.QtSql.QSqlIndex',), + "QSqlTableModel.setQuery": ('PySide2.QtSql.QSqlQuery',), + "QSqlTableModel.setRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.setSort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.setTable": ('str',), + "QSqlTableModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.submit": (), + "QSqlTableModel.submitAll": (), + "QSqlTableModel.tableName": (), + "QSqlTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + }) + +# Module PySide2.QtNetwork +if "PySide2.QtNetwork" in sys.modules: + dict.update({ + + # class PySide2.QtNetwork.QAbstractNetworkCache: + "QAbstractNetworkCache.__init__": ('PySide2.QtCore.QObject',), + "QAbstractNetworkCache.cacheSize": (), + "QAbstractNetworkCache.clear": (), + "QAbstractNetworkCache.data": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.insert": ('PySide2.QtCore.QIODevice',), + "QAbstractNetworkCache.metaData": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QAbstractNetworkCache.remove": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QAbstractSocket: + "QAbstractSocket.__init__": ('PySide2.QtNetwork.QAbstractSocket.SocketType', 'PySide2.QtCore.QObject'), + "QAbstractSocket.abort": (), + "QAbstractSocket.atEnd": (), + "QAbstractSocket.bind": [('PySide2.QtNetwork.QHostAddress', 'int', 'BindMode'), ('int', 'BindMode')], + "QAbstractSocket.bytesAvailable": (), + "QAbstractSocket.bytesToWrite": (), + "QAbstractSocket.canReadLine": (), + "QAbstractSocket.close": (), + "QAbstractSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'OpenMode'), ('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QAbstractSocket.disconnectFromHost": (), + "QAbstractSocket.flush": (), + "QAbstractSocket.isSequential": (), + "QAbstractSocket.isValid": (), + "QAbstractSocket.localAddress": (), + "QAbstractSocket.localPort": (), + "QAbstractSocket.pauseMode": (), + "QAbstractSocket.peerAddress": (), + "QAbstractSocket.peerName": (), + "QAbstractSocket.peerPort": (), + "QAbstractSocket.proxy": (), + "QAbstractSocket.readBufferSize": (), + "QAbstractSocket.readData": ('str', 'int'), + "QAbstractSocket.readLineData": ('str', 'int'), + "QAbstractSocket.resume": (), + "QAbstractSocket.setLocalAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setLocalPort": ('int',), + "QAbstractSocket.setPauseMode": ('PauseModes',), + "QAbstractSocket.setPeerAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setPeerName": ('str',), + "QAbstractSocket.setPeerPort": ('int',), + "QAbstractSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QAbstractSocket.setReadBufferSize": ('int',), + "QAbstractSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'OpenMode'), + "QAbstractSocket.setSocketError": ('PySide2.QtNetwork.QAbstractSocket.SocketError',), + "QAbstractSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'Any'), + "QAbstractSocket.setSocketState": ('PySide2.QtNetwork.QAbstractSocket.SocketState',), + "QAbstractSocket.socketDescriptor": (), + "QAbstractSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QAbstractSocket.socketType": (), + "QAbstractSocket.state": (), + "QAbstractSocket.waitForBytesWritten": ('int',), + "QAbstractSocket.waitForConnected": ('int',), + "QAbstractSocket.waitForDisconnected": ('int',), + "QAbstractSocket.waitForReadyRead": ('int',), + "QAbstractSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QAuthenticator: + "QAuthenticator.__init__": [(), ('PySide2.QtNetwork.QAuthenticator',)], + "QAuthenticator.__copy__": (), + "QAuthenticator.isNull": (), + "QAuthenticator.option": ('str',), + "QAuthenticator.options": (), + "QAuthenticator.password": (), + "QAuthenticator.realm": (), + "QAuthenticator.setOption": ('str', 'Any'), + "QAuthenticator.setPassword": ('str',), + "QAuthenticator.setRealm": ('str',), + "QAuthenticator.setUser": ('str',), + "QAuthenticator.user": (), + + # class PySide2.QtNetwork.QHostAddress: + "QHostAddress.__init__": [(), ('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.__copy__": (), + "QHostAddress.clear": (), + "QHostAddress.isEqual": ('PySide2.QtNetwork.QHostAddress', 'ConversionMode'), + "QHostAddress.isInSubnet": [('PySide2.QtNetwork.QHostAddress', 'int'), ('Tuple[Any, Any]',)], + "QHostAddress.isLoopback": (), + "QHostAddress.isMulticast": (), + "QHostAddress.isNull": (), + "QHostAddress.parseSubnet": ('str',), + "QHostAddress.protocol": (), + "QHostAddress.scopeId": (), + "QHostAddress.setAddress": [('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.setScopeId": ('str',), + "QHostAddress.swap": ('PySide2.QtNetwork.QHostAddress',), + "QHostAddress.toIPv4Address": [(), ('bool',)], + "QHostAddress.toIPv6Address": (), + "QHostAddress.toString": (), + + # class PySide2.QtNetwork.QHostInfo: + "QHostInfo.__init__": [('PySide2.QtNetwork.QHostInfo',), ('int',)], + "QHostInfo.__copy__": (), + "QHostInfo.abortHostLookup": ('int',), + "QHostInfo.addresses": (), + "QHostInfo.error": (), + "QHostInfo.errorString": (), + "QHostInfo.fromName": ('str',), + "QHostInfo.hostName": (), + "QHostInfo.localDomainName": (), + "QHostInfo.localHostName": (), + "QHostInfo.lookupId": (), + "QHostInfo.setAddresses": ('list',), + "QHostInfo.setError": ('PySide2.QtNetwork.QHostInfo.HostInfoError',), + "QHostInfo.setErrorString": ('str',), + "QHostInfo.setHostName": ('str',), + "QHostInfo.setLookupId": ('int',), + + # class PySide2.QtNetwork.QIPv6Address: + "QIPv6Address.__init__": [(), ('PySide2.QtNetwork.QIPv6Address',)], + "QIPv6Address.__copy__": (), + + # class PySide2.QtNetwork.QLocalServer: + "QLocalServer.__init__": ('PySide2.QtCore.QObject',), + "QLocalServer.close": (), + "QLocalServer.errorString": (), + "QLocalServer.fullServerName": (), + "QLocalServer.hasPendingConnections": (), + "QLocalServer.incomingConnection": ('int',), + "QLocalServer.isListening": (), + "QLocalServer.listen": [('int',), ('str',)], + "QLocalServer.maxPendingConnections": (), + "QLocalServer.nextPendingConnection": (), + "QLocalServer.removeServer": ('str',), + "QLocalServer.serverError": (), + "QLocalServer.serverName": (), + "QLocalServer.setMaxPendingConnections": ('int',), + "QLocalServer.setSocketOptions": ('SocketOptions',), + "QLocalServer.socketOptions": (), + "QLocalServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QLocalSocket: + "QLocalSocket.__init__": ('PySide2.QtCore.QObject',), + "QLocalSocket.abort": (), + "QLocalSocket.bytesAvailable": (), + "QLocalSocket.bytesToWrite": (), + "QLocalSocket.canReadLine": (), + "QLocalSocket.close": (), + "QLocalSocket.connectToServer": [('OpenMode',), ('str', 'OpenMode')], + "QLocalSocket.disconnectFromServer": (), + "QLocalSocket.flush": (), + "QLocalSocket.fullServerName": (), + "QLocalSocket.isSequential": (), + "QLocalSocket.isValid": (), + "QLocalSocket.open": ('OpenMode',), + "QLocalSocket.readBufferSize": (), + "QLocalSocket.readData": ('str', 'int'), + "QLocalSocket.serverName": (), + "QLocalSocket.setReadBufferSize": ('int',), + "QLocalSocket.setServerName": ('str',), + "QLocalSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QLocalSocket.LocalSocketState', 'OpenMode'), + "QLocalSocket.socketDescriptor": (), + "QLocalSocket.state": (), + "QLocalSocket.waitForBytesWritten": ('int',), + "QLocalSocket.waitForConnected": ('int',), + "QLocalSocket.waitForDisconnected": ('int',), + "QLocalSocket.waitForReadyRead": ('int',), + "QLocalSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkAccessManager: + "QNetworkAccessManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkAccessManager.activeConfiguration": (), + "QNetworkAccessManager.cache": (), + "QNetworkAccessManager.clearAccessCache": (), + "QNetworkAccessManager.clearConnectionCache": (), + "QNetworkAccessManager.configuration": (), + "QNetworkAccessManager.connectToHost": ('str', 'int'), + "QNetworkAccessManager.cookieJar": (), + "QNetworkAccessManager.createRequest": ('PySide2.QtNetwork.QNetworkAccessManager.Operation', 'PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), + "QNetworkAccessManager.deleteResource": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.get": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.head": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.isStrictTransportSecurityEnabled": (), + "QNetworkAccessManager.networkAccessible": (), + "QNetworkAccessManager.post": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.proxy": (), + "QNetworkAccessManager.proxyFactory": (), + "QNetworkAccessManager.put": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.redirectPolicy": (), + "QNetworkAccessManager.sendCustomRequest": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.setCache": ('PySide2.QtNetwork.QAbstractNetworkCache',), + "QNetworkAccessManager.setConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkAccessManager.setCookieJar": ('PySide2.QtNetwork.QNetworkCookieJar',), + "QNetworkAccessManager.setNetworkAccessible": ('PySide2.QtNetwork.QNetworkAccessManager.NetworkAccessibility',), + "QNetworkAccessManager.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkAccessManager.setProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkAccessManager.setRedirectPolicy": ('PySide2.QtNetwork.QNetworkRequest.RedirectPolicy',), + "QNetworkAccessManager.setStrictTransportSecurityEnabled": ('bool',), + "QNetworkAccessManager.supportedSchemes": (), + "QNetworkAccessManager.supportedSchemesImplementation": (), + + # class PySide2.QtNetwork.QNetworkAddressEntry: + "QNetworkAddressEntry.__init__": [(), ('PySide2.QtNetwork.QNetworkAddressEntry',)], + "QNetworkAddressEntry.__copy__": (), + "QNetworkAddressEntry.broadcast": (), + "QNetworkAddressEntry.ip": (), + "QNetworkAddressEntry.netmask": (), + "QNetworkAddressEntry.prefixLength": (), + "QNetworkAddressEntry.setBroadcast": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setIp": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setNetmask": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setPrefixLength": ('int',), + "QNetworkAddressEntry.swap": ('PySide2.QtNetwork.QNetworkAddressEntry',), + + # class PySide2.QtNetwork.QNetworkCacheMetaData: + "QNetworkCacheMetaData.__init__": [(), ('PySide2.QtNetwork.QNetworkCacheMetaData',)], + "QNetworkCacheMetaData.__copy__": (), + "QNetworkCacheMetaData.attributes": (), + "QNetworkCacheMetaData.expirationDate": (), + "QNetworkCacheMetaData.isValid": (), + "QNetworkCacheMetaData.lastModified": (), + "QNetworkCacheMetaData.saveToDisk": (), + "QNetworkCacheMetaData.setAttributes": ('dict',), + "QNetworkCacheMetaData.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setLastModified": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setSaveToDisk": ('bool',), + "QNetworkCacheMetaData.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCacheMetaData.swap": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkCacheMetaData.url": (), + + # class PySide2.QtNetwork.QNetworkConfiguration: + "QNetworkConfiguration.__init__": [(), ('PySide2.QtNetwork.QNetworkConfiguration',)], + "QNetworkConfiguration.__copy__": (), + "QNetworkConfiguration.bearerType": (), + "QNetworkConfiguration.bearerTypeFamily": (), + "QNetworkConfiguration.bearerTypeName": (), + "QNetworkConfiguration.children": (), + "QNetworkConfiguration.connectTimeout": (), + "QNetworkConfiguration.identifier": (), + "QNetworkConfiguration.isRoamingAvailable": (), + "QNetworkConfiguration.isValid": (), + "QNetworkConfiguration.name": (), + "QNetworkConfiguration.purpose": (), + "QNetworkConfiguration.setConnectTimeout": ('int',), + "QNetworkConfiguration.state": (), + "QNetworkConfiguration.swap": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkConfiguration.type": (), + + # class PySide2.QtNetwork.QNetworkConfigurationManager: + "QNetworkConfigurationManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkConfigurationManager.allConfigurations": ('StateFlags',), + "QNetworkConfigurationManager.capabilities": (), + "QNetworkConfigurationManager.configurationFromIdentifier": ('str',), + "QNetworkConfigurationManager.defaultConfiguration": (), + "QNetworkConfigurationManager.isOnline": (), + "QNetworkConfigurationManager.updateConfigurations": (), + + # class PySide2.QtNetwork.QNetworkCookie: + "QNetworkCookie.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkCookie',)], + "QNetworkCookie.__copy__": (), + "QNetworkCookie.domain": (), + "QNetworkCookie.expirationDate": (), + "QNetworkCookie.hasSameIdentifier": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.isHttpOnly": (), + "QNetworkCookie.isSecure": (), + "QNetworkCookie.isSessionCookie": (), + "QNetworkCookie.name": (), + "QNetworkCookie.normalize": ('PySide2.QtCore.QUrl',), + "QNetworkCookie.parseCookies": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.path": (), + "QNetworkCookie.setDomain": ('str',), + "QNetworkCookie.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCookie.setHttpOnly": ('bool',), + "QNetworkCookie.setName": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.setPath": ('str',), + "QNetworkCookie.setSecure": ('bool',), + "QNetworkCookie.setValue": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.swap": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.toRawForm": ('PySide2.QtNetwork.QNetworkCookie.RawForm',), + "QNetworkCookie.value": (), + + # class PySide2.QtNetwork.QNetworkCookieJar: + "QNetworkCookieJar.__init__": ('PySide2.QtCore.QObject',), + "QNetworkCookieJar.allCookies": (), + "QNetworkCookieJar.cookiesForUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCookieJar.deleteCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.insertCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.setAllCookies": ('list',), + "QNetworkCookieJar.setCookiesFromUrl": ('list', 'PySide2.QtCore.QUrl'), + "QNetworkCookieJar.updateCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.validateCookie": ('PySide2.QtNetwork.QNetworkCookie', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtNetwork.QNetworkDiskCache: + "QNetworkDiskCache.__init__": ('PySide2.QtCore.QObject',), + "QNetworkDiskCache.cacheDirectory": (), + "QNetworkDiskCache.cacheSize": (), + "QNetworkDiskCache.clear": (), + "QNetworkDiskCache.data": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.expire": (), + "QNetworkDiskCache.fileMetaData": ('str',), + "QNetworkDiskCache.insert": ('PySide2.QtCore.QIODevice',), + "QNetworkDiskCache.maximumCacheSize": (), + "QNetworkDiskCache.metaData": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkDiskCache.remove": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.setCacheDirectory": ('str',), + "QNetworkDiskCache.setMaximumCacheSize": ('int',), + "QNetworkDiskCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QNetworkInterface: + "QNetworkInterface.__init__": [(), ('PySide2.QtNetwork.QNetworkInterface',)], + "QNetworkInterface.__copy__": (), + "QNetworkInterface.addressEntries": (), + "QNetworkInterface.allAddresses": (), + "QNetworkInterface.allInterfaces": (), + "QNetworkInterface.flags": (), + "QNetworkInterface.hardwareAddress": (), + "QNetworkInterface.humanReadableName": (), + "QNetworkInterface.index": (), + "QNetworkInterface.interfaceFromIndex": ('int',), + "QNetworkInterface.interfaceFromName": ('str',), + "QNetworkInterface.interfaceIndexFromName": ('str',), + "QNetworkInterface.interfaceNameFromIndex": ('int',), + "QNetworkInterface.isValid": (), + "QNetworkInterface.name": (), + "QNetworkInterface.swap": ('PySide2.QtNetwork.QNetworkInterface',), + + # class PySide2.QtNetwork.QNetworkProxy: + "QNetworkProxy.__init__": [(), ('PySide2.QtNetwork.QNetworkProxy',), ('PySide2.QtNetwork.QNetworkProxy.ProxyType', 'str', 'int', 'str', 'str')], + "QNetworkProxy.__copy__": (), + "QNetworkProxy.applicationProxy": (), + "QNetworkProxy.capabilities": (), + "QNetworkProxy.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkProxy.hostName": (), + "QNetworkProxy.isCachingProxy": (), + "QNetworkProxy.isTransparentProxy": (), + "QNetworkProxy.password": (), + "QNetworkProxy.port": (), + "QNetworkProxy.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.rawHeaderList": (), + "QNetworkProxy.setApplicationProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.setCapabilities": ('Capabilities',), + "QNetworkProxy.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkProxy.setHostName": ('str',), + "QNetworkProxy.setPassword": ('str',), + "QNetworkProxy.setPort": ('int',), + "QNetworkProxy.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkProxy.setType": ('PySide2.QtNetwork.QNetworkProxy.ProxyType',), + "QNetworkProxy.setUser": ('str',), + "QNetworkProxy.swap": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.type": (), + "QNetworkProxy.user": (), + + # class PySide2.QtNetwork.QNetworkProxyFactory: + "QNetworkProxyFactory.__init__": (), + "QNetworkProxyFactory.proxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.queryProxy": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.setApplicationProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkProxyFactory.setUseSystemConfiguration": ('bool',), + "QNetworkProxyFactory.systemProxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.usesSystemConfiguration": (), + + # class PySide2.QtNetwork.QNetworkProxyQuery: + "QNetworkProxyQuery.__init__": [(), ('PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkProxyQuery',), ('int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType')], + "QNetworkProxyQuery.__copy__": (), + "QNetworkProxyQuery.localPort": (), + "QNetworkProxyQuery.networkConfiguration": (), + "QNetworkProxyQuery.peerHostName": (), + "QNetworkProxyQuery.peerPort": (), + "QNetworkProxyQuery.protocolTag": (), + "QNetworkProxyQuery.queryType": (), + "QNetworkProxyQuery.setLocalPort": ('int',), + "QNetworkProxyQuery.setNetworkConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkProxyQuery.setPeerHostName": ('str',), + "QNetworkProxyQuery.setPeerPort": ('int',), + "QNetworkProxyQuery.setProtocolTag": ('str',), + "QNetworkProxyQuery.setQueryType": ('PySide2.QtNetwork.QNetworkProxyQuery.QueryType',), + "QNetworkProxyQuery.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkProxyQuery.swap": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyQuery.url": (), + + # class PySide2.QtNetwork.QNetworkReply: + "QNetworkReply.__init__": ('PySide2.QtCore.QObject',), + "QNetworkReply.abort": (), + "QNetworkReply.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute',), + "QNetworkReply.close": (), + "QNetworkReply.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkReply.ignoreSslErrors": (), + "QNetworkReply.isFinished": (), + "QNetworkReply.isRunning": (), + "QNetworkReply.isSequential": (), + "QNetworkReply.manager": (), + "QNetworkReply.operation": (), + "QNetworkReply.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.rawHeaderList": (), + "QNetworkReply.readBufferSize": (), + "QNetworkReply.request": (), + "QNetworkReply.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkReply.setError": ('PySide2.QtNetwork.QNetworkReply.NetworkError', 'str'), + "QNetworkReply.setFinished": ('bool',), + "QNetworkReply.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkReply.setOperation": ('PySide2.QtNetwork.QNetworkAccessManager.Operation',), + "QNetworkReply.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkReply.setReadBufferSize": ('int',), + "QNetworkReply.setRequest": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkReply.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkReply.url": (), + "QNetworkReply.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkRequest: + "QNetworkRequest.__init__": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QNetworkRequest.__copy__": (), + "QNetworkRequest.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkRequest.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkRequest.maximumRedirectsAllowed": (), + "QNetworkRequest.originatingObject": (), + "QNetworkRequest.priority": (), + "QNetworkRequest.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.rawHeaderList": (), + "QNetworkRequest.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkRequest.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkRequest.setMaximumRedirectsAllowed": ('int',), + "QNetworkRequest.setOriginatingObject": ('PySide2.QtCore.QObject',), + "QNetworkRequest.setPriority": ('PySide2.QtNetwork.QNetworkRequest.Priority',), + "QNetworkRequest.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkRequest.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkRequest.swap": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkRequest.url": (), + + # class PySide2.QtNetwork.QNetworkSession: + "QNetworkSession.__init__": ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QObject'), + "QNetworkSession.accept": (), + "QNetworkSession.activeTime": (), + "QNetworkSession.bytesReceived": (), + "QNetworkSession.bytesWritten": (), + "QNetworkSession.close": (), + "QNetworkSession.configuration": (), + "QNetworkSession.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.errorString": (), + "QNetworkSession.ignore": (), + "QNetworkSession.interface": (), + "QNetworkSession.isOpen": (), + "QNetworkSession.migrate": (), + "QNetworkSession.open": (), + "QNetworkSession.reject": (), + "QNetworkSession.sessionProperty": ('str',), + "QNetworkSession.setSessionProperty": ('str', 'Any'), + "QNetworkSession.state": (), + "QNetworkSession.stop": (), + "QNetworkSession.usagePolicies": (), + "QNetworkSession.waitForOpened": ('int',), + + # class PySide2.QtNetwork.QSsl: + + # class PySide2.QtNetwork.QTcpServer: + "QTcpServer.__init__": ('PySide2.QtCore.QObject',), + "QTcpServer.addPendingConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QTcpServer.close": (), + "QTcpServer.errorString": (), + "QTcpServer.hasPendingConnections": (), + "QTcpServer.incomingConnection": ('int',), + "QTcpServer.isListening": (), + "QTcpServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QTcpServer.maxPendingConnections": (), + "QTcpServer.nextPendingConnection": (), + "QTcpServer.pauseAccepting": (), + "QTcpServer.proxy": (), + "QTcpServer.resumeAccepting": (), + "QTcpServer.serverAddress": (), + "QTcpServer.serverError": (), + "QTcpServer.serverPort": (), + "QTcpServer.setMaxPendingConnections": ('int',), + "QTcpServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QTcpServer.setSocketDescriptor": ('int',), + "QTcpServer.socketDescriptor": (), + "QTcpServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QTcpSocket: + "QTcpSocket.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtNetwork.QUdpSocket: + "QUdpSocket.__init__": ('PySide2.QtCore.QObject',), + "QUdpSocket.hasPendingDatagrams": (), + "QUdpSocket.joinMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.leaveMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.multicastInterface": (), + "QUdpSocket.pendingDatagramSize": (), + "QUdpSocket.readDatagram": ('str', 'int', 'PySide2.QtNetwork.QHostAddress', 'int'), + "QUdpSocket.setMulticastInterface": ('PySide2.QtNetwork.QNetworkInterface',), + "QUdpSocket.writeDatagram": ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHostAddress', 'int'), + }) + +# Module PySide2.QtTest +if "PySide2.QtTest" in sys.modules: + dict.update({ + + # class PySide2.QtTest.QTest: + "QTest.addColumnInternal": ('int', 'str'), + "QTest.asciiToKey": ('Union[str, int]',), + "QTest.compare_string_helper": ('str', 'str', 'str', 'str', 'str', 'int'), + "QTest.createTouchDevice": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTest.currentAppName": (), + "QTest.currentDataTag": (), + "QTest.currentTestFailed": (), + "QTest.currentTestFunction": (), + "QTest.ignoreMessage": [('PySide2.QtCore.QtMsgType', 'PySide2.QtCore.QRegularExpression'), ('PySide2.QtCore.QtMsgType', 'str')], + "QTest.keyClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyClicks": ('PySide2.QtWidgets.QWidget', 'str', 'KeyboardModifiers', 'int'), + "QTest.keyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyPress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyToAscii": ('PySide2.QtCore.Qt.Key',), + "QTest.mouseClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseDClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseEvent": [('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseMove": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mousePress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.qElementData": ('str', 'int'), + "QTest.qExpectFail": ('str', 'str', 'PySide2.QtTest.QTest.TestFailMode', 'str', 'int'), + "QTest.qFindTestData": ('str', 'str', 'int', 'str'), + "QTest.qGlobalData": ('str', 'int'), + "QTest.qSkip": ('str', 'str', 'int'), + "QTest.qWaitForWindowActive": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.qWaitForWindowExposed": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.sendKeyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'str', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'str', 'KeyboardModifiers', 'int')], + "QTest.setBenchmarkResult": ('float', 'PySide2.QtTest.QTest.QBenchmarkMetric'), + "QTest.setMainSourcePath": ('str', 'str'), + "QTest.simulateEvent": [('PySide2.QtGui.QWindow', 'bool', 'int', 'KeyboardModifiers', 'str', 'bool', 'int'), ('PySide2.QtWidgets.QWidget', 'bool', 'int', 'KeyboardModifiers', 'str', 'bool', 'int')], + "QTest.testObject": (), + "QTest.toPrettyCString": ('str', 'int'), + "QTest.touchEvent": [('PySide2.QtGui.QWindow', 'PySide2.QtGui.QTouchDevice', 'bool'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QTouchDevice', 'bool')], + "QTest.waitForEvents": (), + }) + +# Module PySide2.QtConcurrent +if "PySide2.QtConcurrent" in sys.modules: + dict.update({ + + # class PySide2.QtConcurrent.QtConcurrent: + }) + +# Module PySide2.QtX11Extras +if "PySide2.QtX11Extras" in sys.modules: + dict.update({ + + # class PySide2.QtX11Extras.QX11Info: + "QX11Info.appDpiX": ('int',), + "QX11Info.appDpiY": ('int',), + "QX11Info.appRootWindow": ('int',), + "QX11Info.appScreen": (), + "QX11Info.appTime": (), + "QX11Info.appUserTime": (), + "QX11Info.getTimestamp": (), + "QX11Info.isCompositingManagerRunning": ('int',), + "QX11Info.isPlatformX11": (), + "QX11Info.nextStartupId": (), + "QX11Info.setAppTime": ('int',), + "QX11Info.setAppUserTime": ('int',), + "QX11Info.setNextStartupId": ('PySide2.QtCore.QByteArray',), + }) + +# Module PySide2.QtXml +if "PySide2.QtXml" in sys.modules: + dict.update({ + + # class PySide2.QtXml.QDomAttr: + "QDomAttr.__init__": [(), ('PySide2.QtXml.QDomAttr',)], + "QDomAttr.__copy__": (), + "QDomAttr.name": (), + "QDomAttr.nodeType": (), + "QDomAttr.ownerElement": (), + "QDomAttr.setValue": ('str',), + "QDomAttr.specified": (), + "QDomAttr.value": (), + + # class PySide2.QtXml.QDomCDATASection: + "QDomCDATASection.__init__": [(), ('PySide2.QtXml.QDomCDATASection',)], + "QDomCDATASection.__copy__": (), + "QDomCDATASection.nodeType": (), + + # class PySide2.QtXml.QDomCharacterData: + "QDomCharacterData.__init__": [(), ('PySide2.QtXml.QDomCharacterData',)], + "QDomCharacterData.__copy__": (), + "QDomCharacterData.appendData": ('str',), + "QDomCharacterData.data": (), + "QDomCharacterData.deleteData": ('int', 'int'), + "QDomCharacterData.insertData": ('int', 'str'), + "QDomCharacterData.length": (), + "QDomCharacterData.nodeType": (), + "QDomCharacterData.replaceData": ('int', 'int', 'str'), + "QDomCharacterData.setData": ('str',), + "QDomCharacterData.substringData": ('int', 'int'), + + # class PySide2.QtXml.QDomComment: + "QDomComment.__init__": [(), ('PySide2.QtXml.QDomComment',)], + "QDomComment.__copy__": (), + "QDomComment.nodeType": (), + + # class PySide2.QtXml.QDomDocument: + "QDomDocument.__init__": [(), ('PySide2.QtXml.QDomDocument',), ('PySide2.QtXml.QDomDocumentType',), ('str',)], + "QDomDocument.__copy__": (), + "QDomDocument.createAttribute": ('str',), + "QDomDocument.createAttributeNS": ('str', 'str'), + "QDomDocument.createCDATASection": ('str',), + "QDomDocument.createComment": ('str',), + "QDomDocument.createDocumentFragment": (), + "QDomDocument.createElement": ('str',), + "QDomDocument.createElementNS": ('str', 'str'), + "QDomDocument.createEntityReference": ('str',), + "QDomDocument.createProcessingInstruction": ('str', 'str'), + "QDomDocument.createTextNode": ('str',), + "QDomDocument.doctype": (), + "QDomDocument.documentElement": (), + "QDomDocument.elementById": ('str',), + "QDomDocument.elementsByTagName": ('str',), + "QDomDocument.elementsByTagNameNS": ('str', 'str'), + "QDomDocument.implementation": (), + "QDomDocument.importNode": ('PySide2.QtXml.QDomNode', 'bool'), + "QDomDocument.nodeType": (), + "QDomDocument.setContent": [('PySide2.QtCore.QByteArray', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QByteArray', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'PySide2.QtXml.QXmlReader', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'bool', 'str', 'int', 'int'), ('str', 'bool', 'str', 'int', 'int'), ('str', 'str', 'int', 'int')], + "QDomDocument.toByteArray": ('int',), + "QDomDocument.toString": ('int',), + + # class PySide2.QtXml.QDomDocumentFragment: + "QDomDocumentFragment.__init__": [(), ('PySide2.QtXml.QDomDocumentFragment',)], + "QDomDocumentFragment.__copy__": (), + "QDomDocumentFragment.nodeType": (), + + # class PySide2.QtXml.QDomDocumentType: + "QDomDocumentType.__init__": [(), ('PySide2.QtXml.QDomDocumentType',)], + "QDomDocumentType.__copy__": (), + "QDomDocumentType.entities": (), + "QDomDocumentType.internalSubset": (), + "QDomDocumentType.name": (), + "QDomDocumentType.nodeType": (), + "QDomDocumentType.notations": (), + "QDomDocumentType.publicId": (), + "QDomDocumentType.systemId": (), + + # class PySide2.QtXml.QDomElement: + "QDomElement.__init__": [(), ('PySide2.QtXml.QDomElement',)], + "QDomElement.__copy__": (), + "QDomElement.attribute": ('str', 'str'), + "QDomElement.attributeNS": ('str', 'str', 'str'), + "QDomElement.attributeNode": ('str',), + "QDomElement.attributeNodeNS": ('str', 'str'), + "QDomElement.attributes": (), + "QDomElement.elementsByTagName": ('str',), + "QDomElement.elementsByTagNameNS": ('str', 'str'), + "QDomElement.hasAttribute": ('str',), + "QDomElement.hasAttributeNS": ('str', 'str'), + "QDomElement.nodeType": (), + "QDomElement.removeAttribute": ('str',), + "QDomElement.removeAttributeNS": ('str', 'str'), + "QDomElement.removeAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttribute": [('str', 'float'), ('str', 'int'), ('str', 'str')], + "QDomElement.setAttributeNS": [('str', 'str', 'float'), ('str', 'str', 'int'), ('str', 'str', 'str')], + "QDomElement.setAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttributeNodeNS": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setTagName": ('str',), + "QDomElement.tagName": (), + "QDomElement.text": (), + + # class PySide2.QtXml.QDomEntity: + "QDomEntity.__init__": [(), ('PySide2.QtXml.QDomEntity',)], + "QDomEntity.__copy__": (), + "QDomEntity.nodeType": (), + "QDomEntity.notationName": (), + "QDomEntity.publicId": (), + "QDomEntity.systemId": (), + + # class PySide2.QtXml.QDomEntityReference: + "QDomEntityReference.__init__": [(), ('PySide2.QtXml.QDomEntityReference',)], + "QDomEntityReference.__copy__": (), + "QDomEntityReference.nodeType": (), + + # class PySide2.QtXml.QDomImplementation: + "QDomImplementation.__init__": [(), ('PySide2.QtXml.QDomImplementation',)], + "QDomImplementation.__copy__": (), + "QDomImplementation.createDocument": ('str', 'str', 'PySide2.QtXml.QDomDocumentType'), + "QDomImplementation.createDocumentType": ('str', 'str', 'str'), + "QDomImplementation.hasFeature": ('str', 'str'), + "QDomImplementation.invalidDataPolicy": (), + "QDomImplementation.isNull": (), + "QDomImplementation.setInvalidDataPolicy": ('PySide2.QtXml.QDomImplementation.InvalidDataPolicy',), + + # class PySide2.QtXml.QDomNamedNodeMap: + "QDomNamedNodeMap.__init__": [(), ('PySide2.QtXml.QDomNamedNodeMap',)], + "QDomNamedNodeMap.__copy__": (), + "QDomNamedNodeMap.contains": ('str',), + "QDomNamedNodeMap.count": (), + "QDomNamedNodeMap.isEmpty": (), + "QDomNamedNodeMap.item": ('int',), + "QDomNamedNodeMap.length": (), + "QDomNamedNodeMap.namedItem": ('str',), + "QDomNamedNodeMap.namedItemNS": ('str', 'str'), + "QDomNamedNodeMap.removeNamedItem": ('str',), + "QDomNamedNodeMap.removeNamedItemNS": ('str', 'str'), + "QDomNamedNodeMap.setNamedItem": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.setNamedItemNS": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.size": (), + + # class PySide2.QtXml.QDomNode: + "QDomNode.__init__": [(), ('PySide2.QtXml.QDomNode',)], + "QDomNode.__copy__": (), + "QDomNode.appendChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.attributes": (), + "QDomNode.childNodes": (), + "QDomNode.clear": (), + "QDomNode.cloneNode": ('bool',), + "QDomNode.columnNumber": (), + "QDomNode.firstChild": (), + "QDomNode.firstChildElement": ('str',), + "QDomNode.hasAttributes": (), + "QDomNode.hasChildNodes": (), + "QDomNode.insertAfter": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.insertBefore": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.isAttr": (), + "QDomNode.isCDATASection": (), + "QDomNode.isCharacterData": (), + "QDomNode.isComment": (), + "QDomNode.isDocument": (), + "QDomNode.isDocumentFragment": (), + "QDomNode.isDocumentType": (), + "QDomNode.isElement": (), + "QDomNode.isEntity": (), + "QDomNode.isEntityReference": (), + "QDomNode.isNotation": (), + "QDomNode.isNull": (), + "QDomNode.isProcessingInstruction": (), + "QDomNode.isSupported": ('str', 'str'), + "QDomNode.isText": (), + "QDomNode.lastChild": (), + "QDomNode.lastChildElement": ('str',), + "QDomNode.lineNumber": (), + "QDomNode.localName": (), + "QDomNode.namedItem": ('str',), + "QDomNode.namespaceURI": (), + "QDomNode.nextSibling": (), + "QDomNode.nextSiblingElement": ('str',), + "QDomNode.nodeName": (), + "QDomNode.nodeType": (), + "QDomNode.nodeValue": (), + "QDomNode.normalize": (), + "QDomNode.ownerDocument": (), + "QDomNode.parentNode": (), + "QDomNode.prefix": (), + "QDomNode.previousSibling": (), + "QDomNode.previousSiblingElement": ('str',), + "QDomNode.removeChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.replaceChild": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.save": ('PySide2.QtCore.QTextStream', 'int', 'PySide2.QtXml.QDomNode.EncodingPolicy'), + "QDomNode.setNodeValue": ('str',), + "QDomNode.setPrefix": ('str',), + "QDomNode.toAttr": (), + "QDomNode.toCDATASection": (), + "QDomNode.toCharacterData": (), + "QDomNode.toComment": (), + "QDomNode.toDocument": (), + "QDomNode.toDocumentFragment": (), + "QDomNode.toDocumentType": (), + "QDomNode.toElement": (), + "QDomNode.toEntity": (), + "QDomNode.toEntityReference": (), + "QDomNode.toNotation": (), + "QDomNode.toProcessingInstruction": (), + "QDomNode.toText": (), + + # class PySide2.QtXml.QDomNodeList: + "QDomNodeList.__init__": [(), ('PySide2.QtXml.QDomNodeList',)], + "QDomNodeList.__copy__": (), + "QDomNodeList.at": ('int',), + "QDomNodeList.count": (), + "QDomNodeList.isEmpty": (), + "QDomNodeList.item": ('int',), + "QDomNodeList.length": (), + "QDomNodeList.size": (), + + # class PySide2.QtXml.QDomNotation: + "QDomNotation.__init__": [(), ('PySide2.QtXml.QDomNotation',)], + "QDomNotation.__copy__": (), + "QDomNotation.nodeType": (), + "QDomNotation.publicId": (), + "QDomNotation.systemId": (), + + # class PySide2.QtXml.QDomProcessingInstruction: + "QDomProcessingInstruction.__init__": [(), ('PySide2.QtXml.QDomProcessingInstruction',)], + "QDomProcessingInstruction.__copy__": (), + "QDomProcessingInstruction.data": (), + "QDomProcessingInstruction.nodeType": (), + "QDomProcessingInstruction.setData": ('str',), + "QDomProcessingInstruction.target": (), + + # class PySide2.QtXml.QDomText: + "QDomText.__init__": [(), ('PySide2.QtXml.QDomText',)], + "QDomText.__copy__": (), + "QDomText.nodeType": (), + "QDomText.splitText": ('int',), + + # class PySide2.QtXml.QXmlAttributes: + "QXmlAttributes.__init__": [(), ('PySide2.QtXml.QXmlAttributes',)], + "QXmlAttributes.__copy__": (), + "QXmlAttributes.append": ('str', 'str', 'str', 'str'), + "QXmlAttributes.clear": (), + "QXmlAttributes.count": (), + "QXmlAttributes.index": [('str',), ('str', 'str')], + "QXmlAttributes.length": (), + "QXmlAttributes.localName": ('int',), + "QXmlAttributes.qName": ('int',), + "QXmlAttributes.swap": ('PySide2.QtXml.QXmlAttributes',), + "QXmlAttributes.type": [('int',), ('str',), ('str', 'str')], + "QXmlAttributes.uri": ('int',), + "QXmlAttributes.value": [('int',), ('str',), ('str', 'str')], + + # class PySide2.QtXml.QXmlContentHandler: + "QXmlContentHandler.__init__": (), + "QXmlContentHandler.characters": ('str',), + "QXmlContentHandler.endDocument": (), + "QXmlContentHandler.endElement": ('str', 'str', 'str'), + "QXmlContentHandler.endPrefixMapping": ('str',), + "QXmlContentHandler.errorString": (), + "QXmlContentHandler.ignorableWhitespace": ('str',), + "QXmlContentHandler.processingInstruction": ('str', 'str'), + "QXmlContentHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlContentHandler.skippedEntity": ('str',), + "QXmlContentHandler.startDocument": (), + "QXmlContentHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlContentHandler.startPrefixMapping": ('str', 'str'), + + # class PySide2.QtXml.QXmlDTDHandler: + "QXmlDTDHandler.__init__": (), + "QXmlDTDHandler.errorString": (), + "QXmlDTDHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDTDHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + + # class PySide2.QtXml.QXmlDeclHandler: + "QXmlDeclHandler.__init__": (), + "QXmlDeclHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDeclHandler.errorString": (), + "QXmlDeclHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDeclHandler.internalEntityDecl": ('str', 'str'), + + # class PySide2.QtXml.QXmlDefaultHandler: + "QXmlDefaultHandler.__init__": (), + "QXmlDefaultHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDefaultHandler.characters": ('str',), + "QXmlDefaultHandler.comment": ('str',), + "QXmlDefaultHandler.endCDATA": (), + "QXmlDefaultHandler.endDTD": (), + "QXmlDefaultHandler.endDocument": (), + "QXmlDefaultHandler.endElement": ('str', 'str', 'str'), + "QXmlDefaultHandler.endEntity": ('str',), + "QXmlDefaultHandler.endPrefixMapping": ('str',), + "QXmlDefaultHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.errorString": (), + "QXmlDefaultHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.ignorableWhitespace": ('str',), + "QXmlDefaultHandler.internalEntityDecl": ('str', 'str'), + "QXmlDefaultHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.processingInstruction": ('str', 'str'), + "QXmlDefaultHandler.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + "QXmlDefaultHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlDefaultHandler.skippedEntity": ('str',), + "QXmlDefaultHandler.startCDATA": (), + "QXmlDefaultHandler.startDTD": ('str', 'str', 'str'), + "QXmlDefaultHandler.startDocument": (), + "QXmlDefaultHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlDefaultHandler.startEntity": ('str',), + "QXmlDefaultHandler.startPrefixMapping": ('str', 'str'), + "QXmlDefaultHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + "QXmlDefaultHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlEntityResolver: + "QXmlEntityResolver.__init__": (), + "QXmlEntityResolver.errorString": (), + "QXmlEntityResolver.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + + # class PySide2.QtXml.QXmlErrorHandler: + "QXmlErrorHandler.__init__": (), + "QXmlErrorHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.errorString": (), + "QXmlErrorHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlInputSource: + "QXmlInputSource.__init__": [(), ('PySide2.QtCore.QIODevice',)], + "QXmlInputSource.data": (), + "QXmlInputSource.fetchData": (), + "QXmlInputSource.fromRawData": ('PySide2.QtCore.QByteArray', 'bool'), + "QXmlInputSource.reset": (), + "QXmlInputSource.setData": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtXml.QXmlLexicalHandler: + "QXmlLexicalHandler.__init__": (), + "QXmlLexicalHandler.comment": ('str',), + "QXmlLexicalHandler.endCDATA": (), + "QXmlLexicalHandler.endDTD": (), + "QXmlLexicalHandler.endEntity": ('str',), + "QXmlLexicalHandler.errorString": (), + "QXmlLexicalHandler.startCDATA": (), + "QXmlLexicalHandler.startDTD": ('str', 'str', 'str'), + "QXmlLexicalHandler.startEntity": ('str',), + + # class PySide2.QtXml.QXmlLocator: + "QXmlLocator.__init__": (), + "QXmlLocator.columnNumber": (), + "QXmlLocator.lineNumber": (), + + # class PySide2.QtXml.QXmlNamespaceSupport: + "QXmlNamespaceSupport.__init__": (), + "QXmlNamespaceSupport.popContext": (), + "QXmlNamespaceSupport.prefix": ('str',), + "QXmlNamespaceSupport.prefixes": [(), ('str',)], + "QXmlNamespaceSupport.processName": ('str', 'bool', 'str', 'str'), + "QXmlNamespaceSupport.pushContext": (), + "QXmlNamespaceSupport.reset": (), + "QXmlNamespaceSupport.setPrefix": ('str', 'str'), + "QXmlNamespaceSupport.splitName": ('str', 'str', 'str'), + "QXmlNamespaceSupport.uri": ('str',), + + # class PySide2.QtXml.QXmlParseException: + "QXmlParseException.__init__": [('PySide2.QtXml.QXmlParseException',), ('str', 'int', 'int', 'str', 'str')], + "QXmlParseException.columnNumber": (), + "QXmlParseException.lineNumber": (), + "QXmlParseException.message": (), + "QXmlParseException.publicId": (), + "QXmlParseException.systemId": (), + + # class PySide2.QtXml.QXmlReader: + "QXmlReader.__init__": (), + "QXmlReader.DTDHandler": (), + "QXmlReader.contentHandler": (), + "QXmlReader.declHandler": (), + "QXmlReader.entityResolver": (), + "QXmlReader.errorHandler": (), + "QXmlReader.feature": ('str', 'bool'), + "QXmlReader.hasFeature": ('str',), + "QXmlReader.hasProperty": ('str',), + "QXmlReader.lexicalHandler": (), + "QXmlReader.parse": ('PySide2.QtXml.QXmlInputSource',), + "QXmlReader.property": ('str', 'bool'), + "QXmlReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlReader.setFeature": ('str', 'bool'), + "QXmlReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlReader.setProperty": ('str', 'int'), + + # class PySide2.QtXml.QXmlSimpleReader: + "QXmlSimpleReader.__init__": (), + "QXmlSimpleReader.DTDHandler": (), + "QXmlSimpleReader.contentHandler": (), + "QXmlSimpleReader.declHandler": (), + "QXmlSimpleReader.entityResolver": (), + "QXmlSimpleReader.errorHandler": (), + "QXmlSimpleReader.feature": ('str', 'bool'), + "QXmlSimpleReader.hasFeature": ('str',), + "QXmlSimpleReader.hasProperty": ('str',), + "QXmlSimpleReader.lexicalHandler": (), + "QXmlSimpleReader.parse": [('PySide2.QtXml.QXmlInputSource',), ('PySide2.QtXml.QXmlInputSource', 'bool')], + "QXmlSimpleReader.parseContinue": (), + "QXmlSimpleReader.property": ('str', 'bool'), + "QXmlSimpleReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlSimpleReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlSimpleReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlSimpleReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlSimpleReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlSimpleReader.setFeature": ('str', 'bool'), + "QXmlSimpleReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlSimpleReader.setProperty": ('str', 'int'), + }) + +# Module PySide2.QtXmlPatterns +if "PySide2.QtXmlPatterns" in sys.modules: + dict.update({ + + # class PySide2.QtXmlPatterns.QAbstractMessageHandler: + "QAbstractMessageHandler.__init__": ('PySide2.QtCore.QObject',), + "QAbstractMessageHandler.handleMessage": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + "QAbstractMessageHandler.message": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + + # class PySide2.QtXmlPatterns.QAbstractUriResolver: + "QAbstractUriResolver.__init__": ('PySide2.QtCore.QObject',), + "QAbstractUriResolver.resolve": ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtXmlPatterns.QAbstractXmlNodeModel: + "QAbstractXmlNodeModel.__init__": (), + "QAbstractXmlNodeModel.attributes": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.baseUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.compareOrder": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.createIndex": [('int',), ('int', 'int')], + "QAbstractXmlNodeModel.documentUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.elementById": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.isDeepEqual": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.kind": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.name": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceBindings": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceForPrefix": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'Missing(PySide2.QtXmlPatterns.QXmlName.PrefixCode)'), + "QAbstractXmlNodeModel.nextFromSimpleAxis": ('PySide2.QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.nodesByIdref": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.root": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.sendNamespaces": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QAbstractXmlReceiver'), + "QAbstractXmlNodeModel.sourceLocation": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.stringValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.typedValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + + # class PySide2.QtXmlPatterns.QAbstractXmlReceiver: + "QAbstractXmlReceiver.__init__": (), + "QAbstractXmlReceiver.atomicValue": ('Any',), + "QAbstractXmlReceiver.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.characters": ('str',), + "QAbstractXmlReceiver.comment": ('str',), + "QAbstractXmlReceiver.endDocument": (), + "QAbstractXmlReceiver.endElement": (), + "QAbstractXmlReceiver.endOfSequence": (), + "QAbstractXmlReceiver.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.startDocument": (), + "QAbstractXmlReceiver.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.startOfSequence": (), + "QAbstractXmlReceiver.whitespaceOnly": ('str',), + + # class PySide2.QtXmlPatterns.QSourceLocation: + "QSourceLocation.__init__": [(), ('PySide2.QtCore.QUrl', 'int', 'int'), ('PySide2.QtXmlPatterns.QSourceLocation',)], + "QSourceLocation.__copy__": (), + "QSourceLocation.column": (), + "QSourceLocation.isNull": (), + "QSourceLocation.line": (), + "QSourceLocation.setColumn": ('int',), + "QSourceLocation.setLine": ('int',), + "QSourceLocation.setUri": ('PySide2.QtCore.QUrl',), + "QSourceLocation.uri": (), + + # class PySide2.QtXmlPatterns.QXmlFormatter: + "QXmlFormatter.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlFormatter.atomicValue": ('Any',), + "QXmlFormatter.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.characters": ('str',), + "QXmlFormatter.comment": ('str',), + "QXmlFormatter.endDocument": (), + "QXmlFormatter.endElement": (), + "QXmlFormatter.endOfSequence": (), + "QXmlFormatter.indentationDepth": (), + "QXmlFormatter.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.setIndentationDepth": ('int',), + "QXmlFormatter.startDocument": (), + "QXmlFormatter.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlFormatter.startOfSequence": (), + + # class PySide2.QtXmlPatterns.QXmlItem: + "QXmlItem.__init__": [(), ('Any',), ('PySide2.QtXmlPatterns.QXmlItem',), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlItem.__copy__": (), + "QXmlItem.isAtomicValue": (), + "QXmlItem.isNode": (), + "QXmlItem.isNull": (), + "QXmlItem.toAtomicValue": (), + "QXmlItem.toNodeModelIndex": (), + + # class PySide2.QtXmlPatterns.QXmlName: + "QXmlName.__init__": [(), ('PySide2.QtXmlPatterns.QXmlName',), ('PySide2.QtXmlPatterns.QXmlNamePool', 'str', 'str', 'str')], + "QXmlName.__copy__": (), + "QXmlName.fromClarkName": ('str', 'PySide2.QtXmlPatterns.QXmlNamePool'), + "QXmlName.isNCName": ('str',), + "QXmlName.isNull": (), + "QXmlName.localName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.namespaceUri": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.prefix": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.toClarkName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + + # class PySide2.QtXmlPatterns.QXmlNamePool: + "QXmlNamePool.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',)], + "QXmlNamePool.__copy__": (), + + # class PySide2.QtXmlPatterns.QXmlNodeModelIndex: + "QXmlNodeModelIndex.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlNodeModelIndex.__copy__": (), + "QXmlNodeModelIndex.additionalData": (), + "QXmlNodeModelIndex.data": (), + "QXmlNodeModelIndex.internalPointer": (), + "QXmlNodeModelIndex.isNull": (), + "QXmlNodeModelIndex.model": (), + + # class PySide2.QtXmlPatterns.QXmlQuery: + "QXmlQuery.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',), ('PySide2.QtXmlPatterns.QXmlQuery',), ('PySide2.QtXmlPatterns.QXmlQuery.QueryLanguage', 'PySide2.QtXmlPatterns.QXmlNamePool')], + "QXmlQuery.__copy__": (), + "QXmlQuery.bindVariable": [('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtCore.QIODevice'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlItem'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlQuery'), ('str', 'PySide2.QtCore.QIODevice'), ('str', 'PySide2.QtXmlPatterns.QXmlItem'), ('str', 'PySide2.QtXmlPatterns.QXmlQuery')], + "QXmlQuery.evaluateTo": [('PySide2.QtCore.QIODevice',), ('PySide2.QtXmlPatterns.QAbstractXmlReceiver',), ('PySide2.QtXmlPatterns.QXmlResultItems',)], + "QXmlQuery.initialTemplateName": (), + "QXmlQuery.isValid": (), + "QXmlQuery.messageHandler": (), + "QXmlQuery.namePool": (), + "QXmlQuery.queryLanguage": (), + "QXmlQuery.setFocus": [('PySide2.QtCore.QIODevice',), ('PySide2.QtCore.QUrl',), ('PySide2.QtXmlPatterns.QXmlItem',), ('str',)], + "QXmlQuery.setInitialTemplateName": [('PySide2.QtXmlPatterns.QXmlName',), ('str',)], + "QXmlQuery.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlQuery.setQuery": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), ('str', 'PySide2.QtCore.QUrl')], + "QXmlQuery.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlQuery.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlResultItems: + "QXmlResultItems.__init__": (), + "QXmlResultItems.current": (), + "QXmlResultItems.hasError": (), + + # class PySide2.QtXmlPatterns.QXmlSchema: + "QXmlSchema.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchema.documentUri": (), + "QXmlSchema.isValid": (), + "QXmlSchema.load": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + "QXmlSchema.messageHandler": (), + "QXmlSchema.namePool": (), + "QXmlSchema.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchema.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchema.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlSchemaValidator: + "QXmlSchemaValidator.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchemaValidator.messageHandler": (), + "QXmlSchemaValidator.namePool": (), + "QXmlSchemaValidator.schema": (), + "QXmlSchemaValidator.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchemaValidator.setSchema": ('PySide2.QtXmlPatterns.QXmlSchema',), + "QXmlSchemaValidator.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchemaValidator.uriResolver": (), + "QXmlSchemaValidator.validate": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + + # class PySide2.QtXmlPatterns.QXmlSerializer: + "QXmlSerializer.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlSerializer.atomicValue": ('Any',), + "QXmlSerializer.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.characters": ('str',), + "QXmlSerializer.codec": (), + "QXmlSerializer.comment": ('str',), + "QXmlSerializer.endDocument": (), + "QXmlSerializer.endElement": (), + "QXmlSerializer.endOfSequence": (), + "QXmlSerializer.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.outputDevice": (), + "QXmlSerializer.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.setCodec": ('PySide2.QtCore.QTextCodec',), + "QXmlSerializer.startDocument": (), + "QXmlSerializer.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.startOfSequence": (), + }) + +# Module PySide2.QtHelp +if "PySide2.QtHelp" in sys.modules: + dict.update({ + + # class PySide2.QtHelp.QHelpContentItem: + "QHelpContentItem.__copy__": (), + "QHelpContentItem.child": ('int',), + "QHelpContentItem.childCount": (), + "QHelpContentItem.childPosition": ('PySide2.QtHelp.QHelpContentItem',), + "QHelpContentItem.parent": (), + "QHelpContentItem.row": (), + "QHelpContentItem.title": (), + "QHelpContentItem.url": (), + + # class PySide2.QtHelp.QHelpContentModel: + "QHelpContentModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.contentItemAt": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.createContents": ('str',), + "QHelpContentModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QHelpContentModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QHelpContentModel.isCreatingContents": (), + "QHelpContentModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QHelpContentModel.rowCount": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtHelp.QHelpContentWidget: + "QHelpContentWidget.indexOf": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtHelp.QHelpEngine: + "QHelpEngine.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngine.contentModel": (), + "QHelpEngine.contentWidget": (), + "QHelpEngine.indexModel": (), + "QHelpEngine.indexWidget": (), + "QHelpEngine.searchEngine": (), + + # class PySide2.QtHelp.QHelpEngineCore: + "QHelpEngineCore.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngineCore.addCustomFilter": ('str', 'List[str]'), + "QHelpEngineCore.autoSaveFilter": (), + "QHelpEngineCore.collectionFile": (), + "QHelpEngineCore.copyCollectionFile": ('str',), + "QHelpEngineCore.currentFilter": (), + "QHelpEngineCore.customFilters": (), + "QHelpEngineCore.customValue": ('str', 'Any'), + "QHelpEngineCore.documentationFileName": ('str',), + "QHelpEngineCore.error": (), + "QHelpEngineCore.fileData": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.files": ('str', 'List[str]', 'str'), + "QHelpEngineCore.filterAttributeSets": ('str',), + "QHelpEngineCore.filterAttributes": [(), ('str',)], + "QHelpEngineCore.findFile": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.linksForIdentifier": ('str',), + "QHelpEngineCore.linksForKeyword": ('str',), + "QHelpEngineCore.metaData": ('str', 'str'), + "QHelpEngineCore.namespaceName": ('str',), + "QHelpEngineCore.registerDocumentation": ('str',), + "QHelpEngineCore.registeredDocumentations": (), + "QHelpEngineCore.removeCustomFilter": ('str',), + "QHelpEngineCore.removeCustomValue": ('str',), + "QHelpEngineCore.setAutoSaveFilter": ('bool',), + "QHelpEngineCore.setCollectionFile": ('str',), + "QHelpEngineCore.setCurrentFilter": ('str',), + "QHelpEngineCore.setCustomValue": ('str', 'Any'), + "QHelpEngineCore.setupData": (), + "QHelpEngineCore.unregisterDocumentation": ('str',), + + # class PySide2.QtHelp.QHelpIndexModel: + "QHelpIndexModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object'), ('str',)], + "QHelpIndexModel.filter": ('str', 'str'), + "QHelpIndexModel.isCreatingIndex": (), + "QHelpIndexModel.linksForKeyword": ('str',), + + # class PySide2.QtHelp.QHelpIndexWidget: + "QHelpIndexWidget.activateCurrentItem": (), + "QHelpIndexWidget.filterIndices": ('str', 'str'), + + # class PySide2.QtHelp.QHelpSearchEngine: + "QHelpSearchEngine.__init__": ('PySide2.QtHelp.QHelpEngineCore', 'PySide2.QtCore.QObject'), + "QHelpSearchEngine.cancelIndexing": (), + "QHelpSearchEngine.cancelSearching": (), + "QHelpSearchEngine.hitCount": (), + "QHelpSearchEngine.hitsCount": (), + "QHelpSearchEngine.query": (), + "QHelpSearchEngine.queryWidget": (), + "QHelpSearchEngine.reindexDocumentation": (), + "QHelpSearchEngine.resultWidget": (), + "QHelpSearchEngine.scheduleIndexDocumentation": (), + "QHelpSearchEngine.search": [('list',), ('str',)], + "QHelpSearchEngine.searchInput": (), + "QHelpSearchEngine.searchResultCount": (), + "QHelpSearchEngine.searchResults": ('int', 'int'), + + # class PySide2.QtHelp.QHelpSearchQuery: + "QHelpSearchQuery.__init__": [(), ('PySide2.QtHelp.QHelpSearchQuery',), ('PySide2.QtHelp.QHelpSearchQuery.FieldName', 'List[str]')], + "QHelpSearchQuery.__copy__": (), + + # class PySide2.QtHelp.QHelpSearchQueryWidget: + "QHelpSearchQueryWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QHelpSearchQueryWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchQueryWidget.collapseExtendedSearch": (), + "QHelpSearchQueryWidget.expandExtendedSearch": (), + "QHelpSearchQueryWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QHelpSearchQueryWidget.isCompactMode": (), + "QHelpSearchQueryWidget.query": (), + "QHelpSearchQueryWidget.searchInput": (), + "QHelpSearchQueryWidget.setCompactMode": ('bool',), + "QHelpSearchQueryWidget.setQuery": ('list',), + "QHelpSearchQueryWidget.setSearchInput": ('str',), + + # class PySide2.QtHelp.QHelpSearchResult: + "QHelpSearchResult.__init__": [(), ('PySide2.QtCore.QUrl', 'str', 'str'), ('PySide2.QtHelp.QHelpSearchResult',)], + "QHelpSearchResult.snippet": (), + "QHelpSearchResult.title": (), + "QHelpSearchResult.url": (), + + # class PySide2.QtHelp.QHelpSearchResultWidget: + "QHelpSearchResultWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchResultWidget.linkAt": ('PySide2.QtCore.QPoint',), + }) + +# Module PySide2.QtMultimedia +if "PySide2.QtMultimedia" in sys.modules: + dict.update({ + + # class PySide2.QtMultimedia.QAbstractAudioDeviceInfo: + "QAbstractAudioDeviceInfo.__init__": (), + "QAbstractAudioDeviceInfo.deviceName": (), + "QAbstractAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioDeviceInfo.preferredFormat": (), + "QAbstractAudioDeviceInfo.supportedByteOrders": (), + "QAbstractAudioDeviceInfo.supportedChannelCounts": (), + "QAbstractAudioDeviceInfo.supportedCodecs": (), + "QAbstractAudioDeviceInfo.supportedSampleRates": (), + "QAbstractAudioDeviceInfo.supportedSampleSizes": (), + "QAbstractAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAbstractAudioInput: + "QAbstractAudioInput.__init__": (), + "QAbstractAudioInput.bufferSize": (), + "QAbstractAudioInput.bytesReady": (), + "QAbstractAudioInput.elapsedUSecs": (), + "QAbstractAudioInput.error": (), + "QAbstractAudioInput.format": (), + "QAbstractAudioInput.notifyInterval": (), + "QAbstractAudioInput.periodSize": (), + "QAbstractAudioInput.processedUSecs": (), + "QAbstractAudioInput.reset": (), + "QAbstractAudioInput.resume": (), + "QAbstractAudioInput.setBufferSize": ('int',), + "QAbstractAudioInput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioInput.setNotifyInterval": ('int',), + "QAbstractAudioInput.setVolume": ('float',), + "QAbstractAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioInput.state": (), + "QAbstractAudioInput.stop": (), + "QAbstractAudioInput.suspend": (), + "QAbstractAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAbstractAudioOutput: + "QAbstractAudioOutput.__init__": (), + "QAbstractAudioOutput.bufferSize": (), + "QAbstractAudioOutput.bytesFree": (), + "QAbstractAudioOutput.category": (), + "QAbstractAudioOutput.elapsedUSecs": (), + "QAbstractAudioOutput.error": (), + "QAbstractAudioOutput.format": (), + "QAbstractAudioOutput.notifyInterval": (), + "QAbstractAudioOutput.periodSize": (), + "QAbstractAudioOutput.processedUSecs": (), + "QAbstractAudioOutput.reset": (), + "QAbstractAudioOutput.resume": (), + "QAbstractAudioOutput.setBufferSize": ('int',), + "QAbstractAudioOutput.setCategory": ('str',), + "QAbstractAudioOutput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioOutput.setNotifyInterval": ('int',), + "QAbstractAudioOutput.setVolume": ('float',), + "QAbstractAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioOutput.state": (), + "QAbstractAudioOutput.stop": (), + "QAbstractAudioOutput.suspend": (), + "QAbstractAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAbstractVideoBuffer: + "QAbstractVideoBuffer.__init__": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoBuffer.handle": (), + "QAbstractVideoBuffer.handleType": (), + "QAbstractVideoBuffer.mapMode": (), + "QAbstractVideoBuffer.release": (), + "QAbstractVideoBuffer.unmap": (), + + # class PySide2.QtMultimedia.QAbstractVideoFilter: + "QAbstractVideoFilter.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoFilter.createFilterRunnable": (), + "QAbstractVideoFilter.isActive": (), + "QAbstractVideoFilter.setActive": ('bool',), + + # class PySide2.QtMultimedia.QAbstractVideoSurface: + "QAbstractVideoSurface.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoSurface.error": (), + "QAbstractVideoSurface.isActive": (), + "QAbstractVideoSurface.isFormatSupported": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.nativeResolution": (), + "QAbstractVideoSurface.nearestFormat": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.present": ('PySide2.QtMultimedia.QVideoFrame',), + "QAbstractVideoSurface.setError": ('PySide2.QtMultimedia.QAbstractVideoSurface.Error',), + "QAbstractVideoSurface.setNativeResolution": ('PySide2.QtCore.QSize',), + "QAbstractVideoSurface.start": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.stop": (), + "QAbstractVideoSurface.supportedPixelFormats": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoSurface.surfaceFormat": (), + + # class PySide2.QtMultimedia.QAudio: + "QAudio.convertVolume": ('float', 'PySide2.QtMultimedia.QAudio.VolumeScale', 'PySide2.QtMultimedia.QAudio.VolumeScale'), + + # class PySide2.QtMultimedia.QAudioBuffer: + "QAudioBuffer.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtMultimedia.QAudioFormat', 'int'), ('PySide2.QtMultimedia.QAudioBuffer',), ('int', 'PySide2.QtMultimedia.QAudioFormat', 'int')], + "QAudioBuffer.__copy__": (), + "QAudioBuffer.byteCount": (), + "QAudioBuffer.constData": (), + "QAudioBuffer.data": (), + "QAudioBuffer.duration": (), + "QAudioBuffer.format": (), + "QAudioBuffer.frameCount": (), + "QAudioBuffer.isValid": (), + "QAudioBuffer.sampleCount": (), + "QAudioBuffer.startTime": (), + + # class PySide2.QtMultimedia.QAudioDecoder: + "QAudioDecoder.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoder.audioFormat": (), + "QAudioDecoder.bind": ('PySide2.QtCore.QObject',), + "QAudioDecoder.bufferAvailable": (), + "QAudioDecoder.duration": (), + "QAudioDecoder.errorString": (), + "QAudioDecoder.hasSupport": ('str', 'List[str]'), + "QAudioDecoder.position": (), + "QAudioDecoder.read": (), + "QAudioDecoder.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoder.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoder.setSourceFilename": ('str',), + "QAudioDecoder.sourceDevice": (), + "QAudioDecoder.sourceFilename": (), + "QAudioDecoder.start": (), + "QAudioDecoder.state": (), + "QAudioDecoder.stop": (), + "QAudioDecoder.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QAudioDecoderControl: + "QAudioDecoderControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoderControl.audioFormat": (), + "QAudioDecoderControl.bufferAvailable": (), + "QAudioDecoderControl.duration": (), + "QAudioDecoderControl.position": (), + "QAudioDecoderControl.read": (), + "QAudioDecoderControl.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoderControl.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoderControl.setSourceFilename": ('str',), + "QAudioDecoderControl.sourceDevice": (), + "QAudioDecoderControl.sourceFilename": (), + "QAudioDecoderControl.start": (), + "QAudioDecoderControl.state": (), + "QAudioDecoderControl.stop": (), + + # class PySide2.QtMultimedia.QAudioDeviceInfo: + "QAudioDeviceInfo.__init__": [(), ('PySide2.QtMultimedia.QAudioDeviceInfo',)], + "QAudioDeviceInfo.__copy__": (), + "QAudioDeviceInfo.availableDevices": ('PySide2.QtMultimedia.QAudio.Mode',), + "QAudioDeviceInfo.defaultInputDevice": (), + "QAudioDeviceInfo.defaultOutputDevice": (), + "QAudioDeviceInfo.deviceName": (), + "QAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.isNull": (), + "QAudioDeviceInfo.nearestFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.preferredFormat": (), + "QAudioDeviceInfo.supportedByteOrders": (), + "QAudioDeviceInfo.supportedChannelCounts": (), + "QAudioDeviceInfo.supportedCodecs": (), + "QAudioDeviceInfo.supportedSampleRates": (), + "QAudioDeviceInfo.supportedSampleSizes": (), + "QAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAudioEncoderSettings: + "QAudioEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QAudioEncoderSettings',)], + "QAudioEncoderSettings.__copy__": (), + "QAudioEncoderSettings.bitRate": (), + "QAudioEncoderSettings.channelCount": (), + "QAudioEncoderSettings.codec": (), + "QAudioEncoderSettings.encodingMode": (), + "QAudioEncoderSettings.encodingOption": ('str',), + "QAudioEncoderSettings.encodingOptions": (), + "QAudioEncoderSettings.isNull": (), + "QAudioEncoderSettings.quality": (), + "QAudioEncoderSettings.sampleRate": (), + "QAudioEncoderSettings.setBitRate": ('int',), + "QAudioEncoderSettings.setChannelCount": ('int',), + "QAudioEncoderSettings.setCodec": ('str',), + "QAudioEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QAudioEncoderSettings.setEncodingOption": ('str', 'Any'), + "QAudioEncoderSettings.setEncodingOptions": ('dict',), + "QAudioEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QAudioEncoderSettings.setSampleRate": ('int',), + + # class PySide2.QtMultimedia.QAudioEncoderSettingsControl: + "QAudioEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioEncoderSettingsControl.audioSettings": (), + "QAudioEncoderSettingsControl.codecDescription": ('str',), + "QAudioEncoderSettingsControl.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QAudioEncoderSettingsControl.supportedAudioCodecs": (), + + # class PySide2.QtMultimedia.QAudioFormat: + "QAudioFormat.__init__": [(), ('PySide2.QtMultimedia.QAudioFormat',)], + "QAudioFormat.__copy__": (), + "QAudioFormat.byteOrder": (), + "QAudioFormat.bytesForDuration": ('int',), + "QAudioFormat.bytesForFrames": ('int',), + "QAudioFormat.bytesPerFrame": (), + "QAudioFormat.channelCount": (), + "QAudioFormat.codec": (), + "QAudioFormat.durationForBytes": ('int',), + "QAudioFormat.durationForFrames": ('int',), + "QAudioFormat.framesForBytes": ('int',), + "QAudioFormat.framesForDuration": ('int',), + "QAudioFormat.isValid": (), + "QAudioFormat.sampleRate": (), + "QAudioFormat.sampleSize": (), + "QAudioFormat.sampleType": (), + "QAudioFormat.setByteOrder": ('PySide2.QtMultimedia.QAudioFormat.Endian',), + "QAudioFormat.setChannelCount": ('int',), + "QAudioFormat.setCodec": ('str',), + "QAudioFormat.setSampleRate": ('int',), + "QAudioFormat.setSampleSize": ('int',), + "QAudioFormat.setSampleType": ('PySide2.QtMultimedia.QAudioFormat.SampleType',), + + # class PySide2.QtMultimedia.QAudioInput: + "QAudioInput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioInput.bufferSize": (), + "QAudioInput.bytesReady": (), + "QAudioInput.elapsedUSecs": (), + "QAudioInput.error": (), + "QAudioInput.format": (), + "QAudioInput.notifyInterval": (), + "QAudioInput.periodSize": (), + "QAudioInput.processedUSecs": (), + "QAudioInput.reset": (), + "QAudioInput.resume": (), + "QAudioInput.setBufferSize": ('int',), + "QAudioInput.setNotifyInterval": ('int',), + "QAudioInput.setVolume": ('float',), + "QAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioInput.state": (), + "QAudioInput.stop": (), + "QAudioInput.suspend": (), + "QAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAudioInputSelectorControl: + "QAudioInputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioInputSelectorControl.activeInput": (), + "QAudioInputSelectorControl.availableInputs": (), + "QAudioInputSelectorControl.defaultInput": (), + "QAudioInputSelectorControl.inputDescription": ('str',), + "QAudioInputSelectorControl.setActiveInput": ('str',), + + # class PySide2.QtMultimedia.QAudioOutput: + "QAudioOutput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioOutput.bufferSize": (), + "QAudioOutput.bytesFree": (), + "QAudioOutput.category": (), + "QAudioOutput.elapsedUSecs": (), + "QAudioOutput.error": (), + "QAudioOutput.format": (), + "QAudioOutput.notifyInterval": (), + "QAudioOutput.periodSize": (), + "QAudioOutput.processedUSecs": (), + "QAudioOutput.reset": (), + "QAudioOutput.resume": (), + "QAudioOutput.setBufferSize": ('int',), + "QAudioOutput.setCategory": ('str',), + "QAudioOutput.setNotifyInterval": ('int',), + "QAudioOutput.setVolume": ('float',), + "QAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioOutput.state": (), + "QAudioOutput.stop": (), + "QAudioOutput.suspend": (), + "QAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAudioOutputSelectorControl: + "QAudioOutputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioOutputSelectorControl.activeOutput": (), + "QAudioOutputSelectorControl.availableOutputs": (), + "QAudioOutputSelectorControl.defaultOutput": (), + "QAudioOutputSelectorControl.outputDescription": ('str',), + "QAudioOutputSelectorControl.setActiveOutput": ('str',), + + # class PySide2.QtMultimedia.QAudioProbe: + "QAudioProbe.__init__": ('PySide2.QtCore.QObject',), + "QAudioProbe.isActive": (), + "QAudioProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QAudioRecorder: + "QAudioRecorder.__init__": ('PySide2.QtCore.QObject',), + "QAudioRecorder.audioInput": (), + "QAudioRecorder.audioInputDescription": ('str',), + "QAudioRecorder.audioInputs": (), + "QAudioRecorder.defaultAudioInput": (), + "QAudioRecorder.setAudioInput": ('str',), + + # class PySide2.QtMultimedia.QAudioRoleControl: + "QAudioRoleControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioRoleControl.audioRole": (), + "QAudioRoleControl.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QAudioRoleControl.supportedAudioRoles": (), + + # class PySide2.QtMultimedia.QCamera: + "QCamera.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtMultimedia.QCamera.Position', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QCameraInfo', 'PySide2.QtCore.QObject')], + "QCamera.availability": (), + "QCamera.availableDevices": (), + "QCamera.captureMode": (), + "QCamera.deviceDescription": ('PySide2.QtCore.QByteArray',), + "QCamera.errorString": (), + "QCamera.isCaptureModeSupported": ('CaptureModes',), + "QCamera.load": (), + "QCamera.lockStatus": [(), ('PySide2.QtMultimedia.QCamera.LockType',)], + "QCamera.requestedLocks": (), + "QCamera.searchAndLock": [(), ('LockTypes',)], + "QCamera.setCaptureMode": ('CaptureModes',), + "QCamera.setViewfinder": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QCamera.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.start": (), + "QCamera.state": (), + "QCamera.status": (), + "QCamera.stop": (), + "QCamera.supportedLocks": (), + "QCamera.supportedViewfinderFrameRateRanges": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderPixelFormats": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderResolutions": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.unload": (), + "QCamera.unlock": [(), ('LockTypes',)], + "QCamera.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraCaptureBufferFormatControl: + "QCameraCaptureBufferFormatControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureBufferFormatControl.bufferFormat": (), + "QCameraCaptureBufferFormatControl.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraCaptureBufferFormatControl.supportedBufferFormats": (), + + # class PySide2.QtMultimedia.QCameraCaptureDestinationControl: + "QCameraCaptureDestinationControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureDestinationControl.captureDestination": (), + "QCameraCaptureDestinationControl.isCaptureDestinationSupported": ('CaptureDestinations',), + "QCameraCaptureDestinationControl.setCaptureDestination": ('CaptureDestinations',), + + # class PySide2.QtMultimedia.QCameraControl: + "QCameraControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraControl.canChangeProperty": ('PySide2.QtMultimedia.QCameraControl.PropertyChangeType', 'PySide2.QtMultimedia.QCamera.Status'), + "QCameraControl.captureMode": (), + "QCameraControl.isCaptureModeSupported": ('CaptureModes',), + "QCameraControl.setCaptureMode": ('CaptureModes',), + "QCameraControl.setState": ('PySide2.QtMultimedia.QCamera.State',), + "QCameraControl.state": (), + "QCameraControl.status": (), + + # class PySide2.QtMultimedia.QCameraExposureControl: + "QCameraExposureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraExposureControl.actualValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.requestedValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.setValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter', 'Any'), + + # class PySide2.QtMultimedia.QCameraFocusZone: + "QCameraFocusZone.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus'), ('PySide2.QtMultimedia.QCameraFocusZone',)], + "QCameraFocusZone.__copy__": (), + "QCameraFocusZone.area": (), + "QCameraFocusZone.isValid": (), + "QCameraFocusZone.setStatus": ('PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus',), + "QCameraFocusZone.status": (), + + # class PySide2.QtMultimedia.QCameraImageCapture: + "QCameraImageCapture.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QCameraImageCapture.availability": (), + "QCameraImageCapture.bufferFormat": (), + "QCameraImageCapture.cancelCapture": (), + "QCameraImageCapture.capture": ('str',), + "QCameraImageCapture.captureDestination": (), + "QCameraImageCapture.encodingSettings": (), + "QCameraImageCapture.errorString": (), + "QCameraImageCapture.imageCodecDescription": ('str',), + "QCameraImageCapture.isAvailable": (), + "QCameraImageCapture.isCaptureDestinationSupported": ('CaptureDestinations',), + "QCameraImageCapture.isReadyForCapture": (), + "QCameraImageCapture.mediaObject": (), + "QCameraImageCapture.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraImageCapture.setCaptureDestination": ('CaptureDestinations',), + "QCameraImageCapture.setEncodingSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QCameraImageCapture.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QCameraImageCapture.supportedBufferFormats": (), + "QCameraImageCapture.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QCameraImageCaptureControl: + "QCameraImageCaptureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageCaptureControl.cancelCapture": (), + "QCameraImageCaptureControl.capture": ('str',), + "QCameraImageCaptureControl.driveMode": (), + "QCameraImageCaptureControl.isReadyForCapture": (), + "QCameraImageCaptureControl.setDriveMode": ('PySide2.QtMultimedia.QCameraImageCapture.DriveMode',), + + # class PySide2.QtMultimedia.QCameraImageProcessingControl: + "QCameraImageProcessingControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageProcessingControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.isParameterValueSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'Any'), + "QCameraImageProcessingControl.parameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.setParameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'Any'), + + # class PySide2.QtMultimedia.QCameraInfo: + "QCameraInfo.__init__": [('PySide2.QtCore.QByteArray',), ('PySide2.QtMultimedia.QCamera',), ('PySide2.QtMultimedia.QCameraInfo',)], + "QCameraInfo.__copy__": (), + "QCameraInfo.availableCameras": ('PySide2.QtMultimedia.QCamera.Position',), + "QCameraInfo.defaultCamera": (), + "QCameraInfo.description": (), + "QCameraInfo.deviceName": (), + "QCameraInfo.isNull": (), + "QCameraInfo.orientation": (), + "QCameraInfo.position": (), + + # class PySide2.QtMultimedia.QCameraInfoControl: + "QCameraInfoControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraInfoControl.cameraOrientation": ('str',), + "QCameraInfoControl.cameraPosition": ('str',), + + # class PySide2.QtMultimedia.QCameraLocksControl: + "QCameraLocksControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraLocksControl.lockStatus": ('PySide2.QtMultimedia.QCamera.LockType',), + "QCameraLocksControl.searchAndLock": ('LockTypes',), + "QCameraLocksControl.supportedLocks": (), + "QCameraLocksControl.unlock": ('LockTypes',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettings: + "QCameraViewfinderSettings.__init__": [(), ('PySide2.QtMultimedia.QCameraViewfinderSettings',)], + "QCameraViewfinderSettings.__copy__": (), + "QCameraViewfinderSettings.isNull": (), + "QCameraViewfinderSettings.maximumFrameRate": (), + "QCameraViewfinderSettings.minimumFrameRate": (), + "QCameraViewfinderSettings.pixelAspectRatio": (), + "QCameraViewfinderSettings.pixelFormat": (), + "QCameraViewfinderSettings.resolution": (), + "QCameraViewfinderSettings.setMaximumFrameRate": ('float',), + "QCameraViewfinderSettings.setMinimumFrameRate": ('float',), + "QCameraViewfinderSettings.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.setPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraViewfinderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.swap": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl: + "QCameraViewfinderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl.isViewfinderParameterSupported": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + "QCameraViewfinderSettingsControl.setViewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter', 'Any'), + "QCameraViewfinderSettingsControl.viewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl2: + "QCameraViewfinderSettingsControl2.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl2.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCameraViewfinderSettingsControl2.supportedViewfinderSettings": (), + "QCameraViewfinderSettingsControl2.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraZoomControl: + "QCameraZoomControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraZoomControl.currentDigitalZoom": (), + "QCameraZoomControl.currentOpticalZoom": (), + "QCameraZoomControl.maximumDigitalZoom": (), + "QCameraZoomControl.maximumOpticalZoom": (), + "QCameraZoomControl.requestedDigitalZoom": (), + "QCameraZoomControl.requestedOpticalZoom": (), + "QCameraZoomControl.zoomTo": ('float', 'float'), + + # class PySide2.QtMultimedia.QImageEncoderControl: + "QImageEncoderControl.__init__": ('PySide2.QtCore.QObject',), + "QImageEncoderControl.imageCodecDescription": ('str',), + "QImageEncoderControl.imageSettings": (), + "QImageEncoderControl.setImageSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QImageEncoderControl.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QImageEncoderSettings: + "QImageEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QImageEncoderSettings',)], + "QImageEncoderSettings.__copy__": (), + "QImageEncoderSettings.codec": (), + "QImageEncoderSettings.encodingOption": ('str',), + "QImageEncoderSettings.encodingOptions": (), + "QImageEncoderSettings.isNull": (), + "QImageEncoderSettings.quality": (), + "QImageEncoderSettings.resolution": (), + "QImageEncoderSettings.setCodec": ('str',), + "QImageEncoderSettings.setEncodingOption": ('str', 'Any'), + "QImageEncoderSettings.setEncodingOptions": ('dict',), + "QImageEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QImageEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QMediaAudioProbeControl: + "QMediaAudioProbeControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaAvailabilityControl: + "QMediaAvailabilityControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaAvailabilityControl.availability": (), + + # class PySide2.QtMultimedia.QMediaBindableInterface: + "QMediaBindableInterface.__init__": (), + "QMediaBindableInterface.mediaObject": (), + "QMediaBindableInterface.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimedia.QMediaContainerControl: + "QMediaContainerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaContainerControl.containerDescription": ('str',), + "QMediaContainerControl.containerFormat": (), + "QMediaContainerControl.setContainerFormat": ('str',), + "QMediaContainerControl.supportedContainers": (), + + # class PySide2.QtMultimedia.QMediaContent: + "QMediaContent.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtMultimedia.QMediaContent',), ('PySide2.QtMultimedia.QMediaPlaylist', 'PySide2.QtCore.QUrl', 'bool'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest',), ('list',)], + "QMediaContent.__copy__": (), + "QMediaContent.canonicalRequest": (), + "QMediaContent.canonicalResource": (), + "QMediaContent.canonicalUrl": (), + "QMediaContent.isNull": (), + "QMediaContent.playlist": (), + "QMediaContent.resources": (), + + # class PySide2.QtMultimedia.QMediaControl: + "QMediaControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaGaplessPlaybackControl: + "QMediaGaplessPlaybackControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaGaplessPlaybackControl.crossfadeTime": (), + "QMediaGaplessPlaybackControl.isCrossfadeSupported": (), + "QMediaGaplessPlaybackControl.nextMedia": (), + "QMediaGaplessPlaybackControl.setCrossfadeTime": ('float',), + "QMediaGaplessPlaybackControl.setNextMedia": ('PySide2.QtMultimedia.QMediaContent',), + + # class PySide2.QtMultimedia.QMediaNetworkAccessControl: + "QMediaNetworkAccessControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaNetworkAccessControl.currentConfiguration": (), + "QMediaNetworkAccessControl.setConfigurations": ('list',), + + # class PySide2.QtMultimedia.QMediaObject: + "QMediaObject.addPropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.availability": (), + "QMediaObject.availableMetaData": (), + "QMediaObject.bind": ('PySide2.QtCore.QObject',), + "QMediaObject.isAvailable": (), + "QMediaObject.isMetaDataAvailable": (), + "QMediaObject.metaData": ('str',), + "QMediaObject.notifyInterval": (), + "QMediaObject.removePropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.setNotifyInterval": ('int',), + "QMediaObject.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaPlayer: + "QMediaPlayer.__init__": ('PySide2.QtCore.QObject', 'Flags'), + "QMediaPlayer.audioRole": (), + "QMediaPlayer.availability": (), + "QMediaPlayer.bind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.bufferStatus": (), + "QMediaPlayer.currentMedia": (), + "QMediaPlayer.currentNetworkConfiguration": (), + "QMediaPlayer.duration": (), + "QMediaPlayer.errorString": (), + "QMediaPlayer.hasSupport": ('str', 'List[str]', 'Flags'), + "QMediaPlayer.isAudioAvailable": (), + "QMediaPlayer.isMuted": (), + "QMediaPlayer.isSeekable": (), + "QMediaPlayer.isVideoAvailable": (), + "QMediaPlayer.media": (), + "QMediaPlayer.mediaStatus": (), + "QMediaPlayer.mediaStream": (), + "QMediaPlayer.pause": (), + "QMediaPlayer.play": (), + "QMediaPlayer.playbackRate": (), + "QMediaPlayer.playlist": (), + "QMediaPlayer.position": (), + "QMediaPlayer.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QMediaPlayer.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayer.setMuted": ('bool',), + "QMediaPlayer.setNetworkConfigurations": ('list',), + "QMediaPlayer.setPlaybackRate": ('float',), + "QMediaPlayer.setPlaylist": ('PySide2.QtMultimedia.QMediaPlaylist',), + "QMediaPlayer.setPosition": ('int',), + "QMediaPlayer.setVideoOutput": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QMediaPlayer.setVolume": ('int',), + "QMediaPlayer.state": (), + "QMediaPlayer.stop": (), + "QMediaPlayer.supportedAudioRoles": (), + "QMediaPlayer.supportedMimeTypes": ('Flags',), + "QMediaPlayer.unbind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.volume": (), + + # class PySide2.QtMultimedia.QMediaPlayerControl: + "QMediaPlayerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlayerControl.availablePlaybackRanges": (), + "QMediaPlayerControl.bufferStatus": (), + "QMediaPlayerControl.duration": (), + "QMediaPlayerControl.isAudioAvailable": (), + "QMediaPlayerControl.isMuted": (), + "QMediaPlayerControl.isSeekable": (), + "QMediaPlayerControl.isVideoAvailable": (), + "QMediaPlayerControl.media": (), + "QMediaPlayerControl.mediaStatus": (), + "QMediaPlayerControl.mediaStream": (), + "QMediaPlayerControl.pause": (), + "QMediaPlayerControl.play": (), + "QMediaPlayerControl.playbackRate": (), + "QMediaPlayerControl.position": (), + "QMediaPlayerControl.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayerControl.setMuted": ('bool',), + "QMediaPlayerControl.setPlaybackRate": ('float',), + "QMediaPlayerControl.setPosition": ('int',), + "QMediaPlayerControl.setVolume": ('int',), + "QMediaPlayerControl.state": (), + "QMediaPlayerControl.stop": (), + "QMediaPlayerControl.volume": (), + + # class PySide2.QtMultimedia.QMediaPlaylist: + "QMediaPlaylist.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlaylist.addMedia": [('PySide2.QtMultimedia.QMediaContent',), ('list',)], + "QMediaPlaylist.clear": (), + "QMediaPlaylist.currentIndex": (), + "QMediaPlaylist.currentMedia": (), + "QMediaPlaylist.error": (), + "QMediaPlaylist.errorString": (), + "QMediaPlaylist.insertMedia": [('int', 'PySide2.QtMultimedia.QMediaContent'), ('int', 'list')], + "QMediaPlaylist.isEmpty": (), + "QMediaPlaylist.isReadOnly": (), + "QMediaPlaylist.load": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaPlaylist.media": ('int',), + "QMediaPlaylist.mediaCount": (), + "QMediaPlaylist.mediaObject": (), + "QMediaPlaylist.moveMedia": ('int', 'int'), + "QMediaPlaylist.nextIndex": ('int',), + "QMediaPlaylist.playbackMode": (), + "QMediaPlaylist.previous": (), + "QMediaPlaylist.previousIndex": ('int',), + "QMediaPlaylist.removeMedia": [('int',), ('int', 'int')], + "QMediaPlaylist.save": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str')], + "QMediaPlaylist.setCurrentIndex": ('int',), + "QMediaPlaylist.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaPlaylist.setPlaybackMode": ('PySide2.QtMultimedia.QMediaPlaylist.PlaybackMode',), + "QMediaPlaylist.shuffle": (), + + # class PySide2.QtMultimedia.QMediaRecorder: + "QMediaRecorder.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QMediaRecorder.actualLocation": (), + "QMediaRecorder.audioCodecDescription": ('str',), + "QMediaRecorder.audioSettings": (), + "QMediaRecorder.availability": (), + "QMediaRecorder.availableMetaData": (), + "QMediaRecorder.containerDescription": ('str',), + "QMediaRecorder.containerFormat": (), + "QMediaRecorder.duration": (), + "QMediaRecorder.errorString": (), + "QMediaRecorder.isAvailable": (), + "QMediaRecorder.isMetaDataAvailable": (), + "QMediaRecorder.isMetaDataWritable": (), + "QMediaRecorder.isMuted": (), + "QMediaRecorder.mediaObject": (), + "QMediaRecorder.metaData": ('str',), + "QMediaRecorder.outputLocation": (), + "QMediaRecorder.pause": (), + "QMediaRecorder.record": (), + "QMediaRecorder.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QMediaRecorder.setContainerFormat": ('str',), + "QMediaRecorder.setEncodingSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings', 'PySide2.QtMultimedia.QVideoEncoderSettings', 'str'), + "QMediaRecorder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaRecorder.setMetaData": ('str', 'Any'), + "QMediaRecorder.setMuted": ('bool',), + "QMediaRecorder.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorder.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QMediaRecorder.setVolume": ('float',), + "QMediaRecorder.state": (), + "QMediaRecorder.status": (), + "QMediaRecorder.stop": (), + "QMediaRecorder.supportedAudioCodecs": (), + "QMediaRecorder.supportedContainers": (), + "QMediaRecorder.supportedVideoCodecs": (), + "QMediaRecorder.videoCodecDescription": ('str',), + "QMediaRecorder.videoSettings": (), + "QMediaRecorder.volume": (), + + # class PySide2.QtMultimedia.QMediaRecorderControl: + "QMediaRecorderControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaRecorderControl.applySettings": (), + "QMediaRecorderControl.duration": (), + "QMediaRecorderControl.isMuted": (), + "QMediaRecorderControl.outputLocation": (), + "QMediaRecorderControl.setMuted": ('bool',), + "QMediaRecorderControl.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorderControl.setState": ('PySide2.QtMultimedia.QMediaRecorder.State',), + "QMediaRecorderControl.setVolume": ('float',), + "QMediaRecorderControl.state": (), + "QMediaRecorderControl.status": (), + "QMediaRecorderControl.volume": (), + + # class PySide2.QtMultimedia.QMediaResource: + "QMediaResource.__init__": [(), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaResource.__copy__": (), + "QMediaResource.audioBitRate": (), + "QMediaResource.audioCodec": (), + "QMediaResource.channelCount": (), + "QMediaResource.dataSize": (), + "QMediaResource.isNull": (), + "QMediaResource.language": (), + "QMediaResource.mimeType": (), + "QMediaResource.request": (), + "QMediaResource.resolution": (), + "QMediaResource.sampleRate": (), + "QMediaResource.setAudioBitRate": ('int',), + "QMediaResource.setAudioCodec": ('str',), + "QMediaResource.setChannelCount": ('int',), + "QMediaResource.setDataSize": ('int',), + "QMediaResource.setLanguage": ('str',), + "QMediaResource.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QMediaResource.setSampleRate": ('int',), + "QMediaResource.setVideoBitRate": ('int',), + "QMediaResource.setVideoCodec": ('str',), + "QMediaResource.url": (), + "QMediaResource.videoBitRate": (), + "QMediaResource.videoCodec": (), + + # class PySide2.QtMultimedia.QMediaTimeRange: + "QMediaTimeRange.__init__": [(), ('PySide2.QtMultimedia.QMediaTimeInterval',), ('PySide2.QtMultimedia.QMediaTimeRange',), ('int', 'int')], + "QMediaTimeRange.__copy__": (), + "QMediaTimeRange.addInterval": ('int', 'int'), + "QMediaTimeRange.addTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + "QMediaTimeRange.clear": (), + "QMediaTimeRange.contains": ('int',), + "QMediaTimeRange.earliestTime": (), + "QMediaTimeRange.isContinuous": (), + "QMediaTimeRange.isEmpty": (), + "QMediaTimeRange.latestTime": (), + "QMediaTimeRange.removeInterval": ('int', 'int'), + "QMediaTimeRange.removeTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + + # class PySide2.QtMultimedia.QMultimedia: + + # class PySide2.QtMultimedia.QRadioData: + "QRadioData.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QRadioData.availability": (), + "QRadioData.errorString": (), + "QRadioData.isAlternativeFrequenciesEnabled": (), + "QRadioData.mediaObject": (), + "QRadioData.programType": (), + "QRadioData.programTypeName": (), + "QRadioData.radioText": (), + "QRadioData.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioData.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QRadioData.stationId": (), + "QRadioData.stationName": (), + + # class PySide2.QtMultimedia.QRadioDataControl: + "QRadioDataControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioDataControl.errorString": (), + "QRadioDataControl.isAlternativeFrequenciesEnabled": (), + "QRadioDataControl.programType": (), + "QRadioDataControl.programTypeName": (), + "QRadioDataControl.radioText": (), + "QRadioDataControl.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioDataControl.stationId": (), + "QRadioDataControl.stationName": (), + + # class PySide2.QtMultimedia.QRadioTuner: + "QRadioTuner.__init__": ('PySide2.QtCore.QObject',), + "QRadioTuner.availability": (), + "QRadioTuner.band": (), + "QRadioTuner.cancelSearch": (), + "QRadioTuner.errorString": (), + "QRadioTuner.frequency": (), + "QRadioTuner.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isAntennaConnected": (), + "QRadioTuner.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isMuted": (), + "QRadioTuner.isSearching": (), + "QRadioTuner.isStereo": (), + "QRadioTuner.radioData": (), + "QRadioTuner.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTuner.searchBackward": (), + "QRadioTuner.searchForward": (), + "QRadioTuner.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.setFrequency": ('int',), + "QRadioTuner.setMuted": ('bool',), + "QRadioTuner.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTuner.setVolume": ('int',), + "QRadioTuner.signalStrength": (), + "QRadioTuner.start": (), + "QRadioTuner.state": (), + "QRadioTuner.stereoMode": (), + "QRadioTuner.stop": (), + "QRadioTuner.volume": (), + + # class PySide2.QtMultimedia.QRadioTunerControl: + "QRadioTunerControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioTunerControl.band": (), + "QRadioTunerControl.cancelSearch": (), + "QRadioTunerControl.errorString": (), + "QRadioTunerControl.frequency": (), + "QRadioTunerControl.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isAntennaConnected": (), + "QRadioTunerControl.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isMuted": (), + "QRadioTunerControl.isSearching": (), + "QRadioTunerControl.isStereo": (), + "QRadioTunerControl.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTunerControl.searchBackward": (), + "QRadioTunerControl.searchForward": (), + "QRadioTunerControl.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.setFrequency": ('int',), + "QRadioTunerControl.setMuted": ('bool',), + "QRadioTunerControl.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTunerControl.setVolume": ('int',), + "QRadioTunerControl.signalStrength": (), + "QRadioTunerControl.start": (), + "QRadioTunerControl.state": (), + "QRadioTunerControl.stereoMode": (), + "QRadioTunerControl.stop": (), + "QRadioTunerControl.volume": (), + + # class PySide2.QtMultimedia.QSound: + "QSound.__init__": ('str', 'PySide2.QtCore.QObject'), + "QSound.fileName": (), + "QSound.isFinished": (), + "QSound.loops": (), + "QSound.loopsRemaining": (), + "QSound.play": [(), ('str',)], + "QSound.setLoops": ('int',), + "QSound.stop": (), + + # class PySide2.QtMultimedia.QSoundEffect: + "QSoundEffect.__init__": ('PySide2.QtCore.QObject',), + "QSoundEffect.category": (), + "QSoundEffect.isLoaded": (), + "QSoundEffect.isMuted": (), + "QSoundEffect.isPlaying": (), + "QSoundEffect.loopCount": (), + "QSoundEffect.loopsRemaining": (), + "QSoundEffect.play": (), + "QSoundEffect.setCategory": ('str',), + "QSoundEffect.setLoopCount": ('int',), + "QSoundEffect.setMuted": ('bool',), + "QSoundEffect.setSource": ('PySide2.QtCore.QUrl',), + "QSoundEffect.setVolume": ('float',), + "QSoundEffect.source": (), + "QSoundEffect.status": (), + "QSoundEffect.stop": (), + "QSoundEffect.supportedMimeTypes": (), + "QSoundEffect.volume": (), + + # class PySide2.QtMultimedia.QVideoDeviceSelectorControl: + "QVideoDeviceSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoDeviceSelectorControl.defaultDevice": (), + "QVideoDeviceSelectorControl.deviceCount": (), + "QVideoDeviceSelectorControl.deviceDescription": ('int',), + "QVideoDeviceSelectorControl.deviceName": ('int',), + "QVideoDeviceSelectorControl.selectedDevice": (), + "QVideoDeviceSelectorControl.setSelectedDevice": ('int',), + + # class PySide2.QtMultimedia.QVideoEncoderSettings: + "QVideoEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QVideoEncoderSettings',)], + "QVideoEncoderSettings.__copy__": (), + "QVideoEncoderSettings.bitRate": (), + "QVideoEncoderSettings.codec": (), + "QVideoEncoderSettings.encodingMode": (), + "QVideoEncoderSettings.encodingOption": ('str',), + "QVideoEncoderSettings.encodingOptions": (), + "QVideoEncoderSettings.frameRate": (), + "QVideoEncoderSettings.isNull": (), + "QVideoEncoderSettings.quality": (), + "QVideoEncoderSettings.resolution": (), + "QVideoEncoderSettings.setBitRate": ('int',), + "QVideoEncoderSettings.setCodec": ('str',), + "QVideoEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QVideoEncoderSettings.setEncodingOption": ('str', 'Any'), + "QVideoEncoderSettings.setEncodingOptions": ('dict',), + "QVideoEncoderSettings.setFrameRate": ('float',), + "QVideoEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QVideoEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QVideoEncoderSettingsControl: + "QVideoEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoEncoderSettingsControl.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QVideoEncoderSettingsControl.supportedVideoCodecs": (), + "QVideoEncoderSettingsControl.videoCodecDescription": ('str',), + "QVideoEncoderSettingsControl.videoSettings": (), + + # class PySide2.QtMultimedia.QVideoFilterRunnable: + "QVideoFilterRunnable.__init__": (), + "QVideoFilterRunnable.run": ('PySide2.QtMultimedia.QVideoFrame', 'PySide2.QtMultimedia.QVideoSurfaceFormat', 'RunFlags'), + + # class PySide2.QtMultimedia.QVideoFrame: + "QVideoFrame.__init__": [(), ('PySide2.QtGui.QImage',), ('PySide2.QtMultimedia.QAbstractVideoBuffer', 'PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat'), ('PySide2.QtMultimedia.QVideoFrame',), ('int', 'PySide2.QtCore.QSize', 'int', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat')], + "QVideoFrame.__copy__": (), + "QVideoFrame.availableMetaData": (), + "QVideoFrame.bits": (), + "QVideoFrame.bytesPerLine": [(), ('int',)], + "QVideoFrame.endTime": (), + "QVideoFrame.fieldType": (), + "QVideoFrame.handle": (), + "QVideoFrame.handleType": (), + "QVideoFrame.height": (), + "QVideoFrame.imageFormatFromPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QVideoFrame.isMapped": (), + "QVideoFrame.isReadable": (), + "QVideoFrame.isValid": (), + "QVideoFrame.isWritable": (), + "QVideoFrame.map": ('PySide2.QtMultimedia.QAbstractVideoBuffer.MapMode',), + "QVideoFrame.mapMode": (), + "QVideoFrame.mappedBytes": (), + "QVideoFrame.metaData": ('str',), + "QVideoFrame.pixelFormat": (), + "QVideoFrame.pixelFormatFromImageFormat": ('PySide2.QtGui.QImage.Format',), + "QVideoFrame.planeCount": (), + "QVideoFrame.setEndTime": ('int',), + "QVideoFrame.setFieldType": ('PySide2.QtMultimedia.QVideoFrame.FieldType',), + "QVideoFrame.setMetaData": ('str', 'Any'), + "QVideoFrame.setStartTime": ('int',), + "QVideoFrame.size": (), + "QVideoFrame.startTime": (), + "QVideoFrame.unmap": (), + "QVideoFrame.width": (), + + # class PySide2.QtMultimedia.QVideoProbe: + "QVideoProbe.__init__": ('PySide2.QtCore.QObject',), + "QVideoProbe.isActive": (), + "QVideoProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QVideoRendererControl: + "QVideoRendererControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoRendererControl.setSurface": ('PySide2.QtMultimedia.QAbstractVideoSurface',), + "QVideoRendererControl.surface": (), + + # class PySide2.QtMultimedia.QVideoSurfaceFormat: + "QVideoSurfaceFormat.__init__": [(), ('PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat', 'PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType'), ('PySide2.QtMultimedia.QVideoSurfaceFormat',)], + "QVideoSurfaceFormat.__copy__": (), + "QVideoSurfaceFormat.frameHeight": (), + "QVideoSurfaceFormat.frameRate": (), + "QVideoSurfaceFormat.frameSize": (), + "QVideoSurfaceFormat.frameWidth": (), + "QVideoSurfaceFormat.handleType": (), + "QVideoSurfaceFormat.isValid": (), + "QVideoSurfaceFormat.pixelAspectRatio": (), + "QVideoSurfaceFormat.pixelFormat": (), + "QVideoSurfaceFormat.property": ('str',), + "QVideoSurfaceFormat.propertyNames": (), + "QVideoSurfaceFormat.scanLineDirection": (), + "QVideoSurfaceFormat.setFrameRate": ('float',), + "QVideoSurfaceFormat.setFrameSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setProperty": ('str', 'Any'), + "QVideoSurfaceFormat.setScanLineDirection": ('PySide2.QtMultimedia.QVideoSurfaceFormat.Direction',), + "QVideoSurfaceFormat.setViewport": ('PySide2.QtCore.QRect',), + "QVideoSurfaceFormat.setYCbCrColorSpace": ('PySide2.QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace',), + "QVideoSurfaceFormat.sizeHint": (), + "QVideoSurfaceFormat.viewport": (), + "QVideoSurfaceFormat.yCbCrColorSpace": (), + + # class PySide2.QtMultimedia.QVideoWindowControl: + "QVideoWindowControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWindowControl.aspectRatioMode": (), + "QVideoWindowControl.brightness": (), + "QVideoWindowControl.contrast": (), + "QVideoWindowControl.displayRect": (), + "QVideoWindowControl.hue": (), + "QVideoWindowControl.isFullScreen": (), + "QVideoWindowControl.nativeSize": (), + "QVideoWindowControl.repaint": (), + "QVideoWindowControl.saturation": (), + "QVideoWindowControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWindowControl.setBrightness": ('int',), + "QVideoWindowControl.setContrast": ('int',), + "QVideoWindowControl.setDisplayRect": ('PySide2.QtCore.QRect',), + "QVideoWindowControl.setFullScreen": ('bool',), + "QVideoWindowControl.setHue": ('int',), + "QVideoWindowControl.setSaturation": ('int',), + "QVideoWindowControl.setWinId": ('int',), + "QVideoWindowControl.winId": (), + }) + +# Module PySide2.QtMultimediaWidgets +if "PySide2.QtMultimediaWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtMultimediaWidgets.QCameraViewfinder: + "QCameraViewfinder.__init__": ('PySide2.QtWidgets.QWidget',), + "QCameraViewfinder.mediaObject": (), + "QCameraViewfinder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimediaWidgets.QGraphicsVideoItem: + "QGraphicsVideoItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsVideoItem.aspectRatioMode": (), + "QGraphicsVideoItem.boundingRect": (), + "QGraphicsVideoItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsVideoItem.mediaObject": (), + "QGraphicsVideoItem.nativeSize": (), + "QGraphicsVideoItem.offset": (), + "QGraphicsVideoItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsVideoItem.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QGraphicsVideoItem.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QGraphicsVideoItem.setOffset": ('PySide2.QtCore.QPointF',), + "QGraphicsVideoItem.setSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsVideoItem.size": (), + "QGraphicsVideoItem.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtMultimediaWidgets.QVideoWidget: + "QVideoWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QVideoWidget.aspectRatioMode": (), + "QVideoWidget.brightness": (), + "QVideoWidget.contrast": (), + "QVideoWidget.event": ('PySide2.QtCore.QEvent',), + "QVideoWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QVideoWidget.hue": (), + "QVideoWidget.mediaObject": (), + "QVideoWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QVideoWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QVideoWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QVideoWidget.saturation": (), + "QVideoWidget.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidget.setBrightness": ('int',), + "QVideoWidget.setContrast": ('int',), + "QVideoWidget.setFullScreen": ('bool',), + "QVideoWidget.setHue": ('int',), + "QVideoWidget.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QVideoWidget.setSaturation": ('int',), + "QVideoWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QVideoWidget.sizeHint": (), + + # class PySide2.QtMultimediaWidgets.QVideoWidgetControl: + "QVideoWidgetControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWidgetControl.aspectRatioMode": (), + "QVideoWidgetControl.brightness": (), + "QVideoWidgetControl.contrast": (), + "QVideoWidgetControl.hue": (), + "QVideoWidgetControl.isFullScreen": (), + "QVideoWidgetControl.saturation": (), + "QVideoWidgetControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidgetControl.setBrightness": ('int',), + "QVideoWidgetControl.setContrast": ('int',), + "QVideoWidgetControl.setFullScreen": ('bool',), + "QVideoWidgetControl.setHue": ('int',), + "QVideoWidgetControl.setSaturation": ('int',), + "QVideoWidgetControl.videoWidget": (), + }) + +# Module PySide2.QtOpenGL +if "PySide2.QtOpenGL" in sys.modules: + dict.update({ + + # class PySide2.QtOpenGL.QGL: + + # class PySide2.QtOpenGL.QGLBuffer: + "QGLBuffer.__init__": [(), ('PySide2.QtOpenGL.QGLBuffer',), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.allocate": [('int',), ('int', 'int')], + "QGLBuffer.bind": (), + "QGLBuffer.bufferId": (), + "QGLBuffer.create": (), + "QGLBuffer.destroy": (), + "QGLBuffer.isCreated": (), + "QGLBuffer.map": ('PySide2.QtOpenGL.QGLBuffer.Access',), + "QGLBuffer.read": ('int', 'int', 'int'), + "QGLBuffer.release": [(), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.setUsagePattern": ('PySide2.QtOpenGL.QGLBuffer.UsagePattern',), + "QGLBuffer.size": (), + "QGLBuffer.type": (), + "QGLBuffer.unmap": (), + "QGLBuffer.usagePattern": (), + "QGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtOpenGL.QGLColormap: + "QGLColormap.__init__": [(), ('PySide2.QtOpenGL.QGLColormap',)], + "QGLColormap.__copy__": (), + "QGLColormap.entryColor": ('int',), + "QGLColormap.entryRgb": ('int',), + "QGLColormap.find": ('int',), + "QGLColormap.findNearest": ('int',), + "QGLColormap.handle": (), + "QGLColormap.isEmpty": (), + "QGLColormap.setEntry": [('int', 'PySide2.QtGui.QColor'), ('int', 'int')], + "QGLColormap.setHandle": ('int',), + "QGLColormap.size": (), + + # class PySide2.QtOpenGL.QGLContext: + "QGLContext.__init__": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.areSharing": ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtOpenGL.QGLContext'), + "QGLContext.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'BindOptions'), ('str',)], + "QGLContext.chooseContext": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.colorIndex": ('PySide2.QtGui.QColor',), + "QGLContext.contextHandle": (), + "QGLContext.create": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.currentContext": (), + "QGLContext.deleteTexture": ('int',), + "QGLContext.device": (), + "QGLContext.deviceIsPixmap": (), + "QGLContext.doneCurrent": (), + "QGLContext.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLContext.format": (), + "QGLContext.fromOpenGLContext": ('PySide2.QtGui.QOpenGLContext',), + "QGLContext.initialized": (), + "QGLContext.isSharing": (), + "QGLContext.isValid": (), + "QGLContext.makeCurrent": (), + "QGLContext.moveToThread": ('PySide2.QtCore.QThread',), + "QGLContext.overlayTransparentColor": (), + "QGLContext.requestedFormat": (), + "QGLContext.reset": (), + "QGLContext.setDevice": ('PySide2.QtGui.QPaintDevice',), + "QGLContext.setFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.setInitialized": ('bool',), + "QGLContext.setTextureCacheLimit": ('int',), + "QGLContext.setValid": ('bool',), + "QGLContext.setWindowCreated": ('bool',), + "QGLContext.swapBuffers": (), + "QGLContext.textureCacheLimit": (), + "QGLContext.windowCreated": (), + + # class PySide2.QtOpenGL.QGLFormat: + "QGLFormat.__init__": [(), ('FormatOptions', 'int'), ('PySide2.QtOpenGL.QGLFormat',)], + "QGLFormat.__copy__": (), + "QGLFormat.accum": (), + "QGLFormat.accumBufferSize": (), + "QGLFormat.alpha": (), + "QGLFormat.alphaBufferSize": (), + "QGLFormat.blueBufferSize": (), + "QGLFormat.defaultFormat": (), + "QGLFormat.defaultOverlayFormat": (), + "QGLFormat.depth": (), + "QGLFormat.depthBufferSize": (), + "QGLFormat.directRendering": (), + "QGLFormat.doubleBuffer": (), + "QGLFormat.fromSurfaceFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QGLFormat.greenBufferSize": (), + "QGLFormat.hasOpenGL": (), + "QGLFormat.hasOpenGLOverlays": (), + "QGLFormat.hasOverlay": (), + "QGLFormat.majorVersion": (), + "QGLFormat.minorVersion": (), + "QGLFormat.openGLVersionFlags": (), + "QGLFormat.plane": (), + "QGLFormat.profile": (), + "QGLFormat.redBufferSize": (), + "QGLFormat.rgba": (), + "QGLFormat.sampleBuffers": (), + "QGLFormat.samples": (), + "QGLFormat.setAccum": ('bool',), + "QGLFormat.setAccumBufferSize": ('int',), + "QGLFormat.setAlpha": ('bool',), + "QGLFormat.setAlphaBufferSize": ('int',), + "QGLFormat.setBlueBufferSize": ('int',), + "QGLFormat.setDefaultFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDefaultOverlayFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDepth": ('bool',), + "QGLFormat.setDepthBufferSize": ('int',), + "QGLFormat.setDirectRendering": ('bool',), + "QGLFormat.setDoubleBuffer": ('bool',), + "QGLFormat.setGreenBufferSize": ('int',), + "QGLFormat.setOption": ('FormatOptions',), + "QGLFormat.setOverlay": ('bool',), + "QGLFormat.setPlane": ('int',), + "QGLFormat.setProfile": ('PySide2.QtOpenGL.QGLFormat.OpenGLContextProfile',), + "QGLFormat.setRedBufferSize": ('int',), + "QGLFormat.setRgba": ('bool',), + "QGLFormat.setSampleBuffers": ('bool',), + "QGLFormat.setSamples": ('int',), + "QGLFormat.setStencil": ('bool',), + "QGLFormat.setStencilBufferSize": ('int',), + "QGLFormat.setStereo": ('bool',), + "QGLFormat.setSwapInterval": ('int',), + "QGLFormat.setVersion": ('int', 'int'), + "QGLFormat.stencil": (), + "QGLFormat.stencilBufferSize": (), + "QGLFormat.stereo": (), + "QGLFormat.swapInterval": (), + "QGLFormat.testOption": ('FormatOptions',), + "QGLFormat.toSurfaceFormat": ('PySide2.QtOpenGL.QGLFormat',), + + # class PySide2.QtOpenGL.QGLFramebufferObject: + "QGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QGLFramebufferObject.attachment": (), + "QGLFramebufferObject.bind": (), + "QGLFramebufferObject.bindDefault": (), + "QGLFramebufferObject.blitFramebuffer": ('PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), + "QGLFramebufferObject.devType": (), + "QGLFramebufferObject.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLFramebufferObject.format": (), + "QGLFramebufferObject.handle": (), + "QGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QGLFramebufferObject.isBound": (), + "QGLFramebufferObject.isValid": (), + "QGLFramebufferObject.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLFramebufferObject.paintEngine": (), + "QGLFramebufferObject.release": (), + "QGLFramebufferObject.size": (), + "QGLFramebufferObject.texture": (), + "QGLFramebufferObject.toImage": (), + + # class PySide2.QtOpenGL.QGLFramebufferObjectFormat: + "QGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtOpenGL.QGLFramebufferObjectFormat',)], + "QGLFramebufferObjectFormat.__copy__": (), + "QGLFramebufferObjectFormat.attachment": (), + "QGLFramebufferObjectFormat.internalTextureFormat": (), + "QGLFramebufferObjectFormat.mipmap": (), + "QGLFramebufferObjectFormat.samples": (), + "QGLFramebufferObjectFormat.setAttachment": ('PySide2.QtOpenGL.QGLFramebufferObject.Attachment',), + "QGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QGLFramebufferObjectFormat.setMipmap": ('bool',), + "QGLFramebufferObjectFormat.setSamples": ('int',), + "QGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtOpenGL.QGLPixelBuffer: + "QGLPixelBuffer.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget'), ('int', 'int', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget')], + "QGLPixelBuffer.bindTexture": [('PySide2.QtGui.QImage', 'int'), ('PySide2.QtGui.QPixmap', 'int'), ('str',)], + "QGLPixelBuffer.bindToDynamicTexture": ('int',), + "QGLPixelBuffer.context": (), + "QGLPixelBuffer.deleteTexture": ('int',), + "QGLPixelBuffer.devType": (), + "QGLPixelBuffer.doneCurrent": (), + "QGLPixelBuffer.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLPixelBuffer.format": (), + "QGLPixelBuffer.generateDynamicTexture": (), + "QGLPixelBuffer.handle": (), + "QGLPixelBuffer.hasOpenGLPbuffers": (), + "QGLPixelBuffer.isValid": (), + "QGLPixelBuffer.makeCurrent": (), + "QGLPixelBuffer.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLPixelBuffer.paintEngine": (), + "QGLPixelBuffer.releaseFromDynamicTexture": (), + "QGLPixelBuffer.size": (), + "QGLPixelBuffer.toImage": (), + "QGLPixelBuffer.updateDynamicTexture": ('int',), + + # class PySide2.QtOpenGL.QGLShader: + "QGLShader.__init__": [('ShaderType', 'PySide2.QtCore.QObject'), ('ShaderType', 'PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShader.compileSourceFile": ('str',), + "QGLShader.hasOpenGLShaders": ('ShaderType', 'PySide2.QtOpenGL.QGLContext'), + "QGLShader.isCompiled": (), + "QGLShader.log": (), + "QGLShader.shaderId": (), + "QGLShader.shaderType": (), + "QGLShader.sourceCode": (), + + # class PySide2.QtOpenGL.QGLShaderProgram: + "QGLShaderProgram.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShaderProgram.addShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.addShaderFromSourceCode": [('ShaderType', 'PySide2.QtCore.QByteArray'), ('ShaderType', 'str')], + "QGLShaderProgram.addShaderFromSourceFile": ('ShaderType', 'str'), + "QGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShaderProgram.bind": (), + "QGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.geometryInputType": (), + "QGLShaderProgram.geometryOutputType": (), + "QGLShaderProgram.geometryOutputVertexCount": (), + "QGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtOpenGL.QGLContext',), + "QGLShaderProgram.isLinked": (), + "QGLShaderProgram.link": (), + "QGLShaderProgram.log": (), + "QGLShaderProgram.maxGeometryOutputVertices": (), + "QGLShaderProgram.programId": (), + "QGLShaderProgram.release": (), + "QGLShaderProgram.removeAllShaders": (), + "QGLShaderProgram.removeShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.setAttributeArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setAttributeArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setAttributeArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float')], + "QGLShaderProgram.setGeometryInputType": ('int',), + "QGLShaderProgram.setGeometryOutputType": ('int',), + "QGLShaderProgram.setGeometryOutputVertexCount": ('int',), + "QGLShaderProgram.setUniformValue": [('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QGLShaderProgram.setUniformValueArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setUniformValueArray2x2": [('int', 'PySide2.QtGui.QMatrix2x2', 'int'), ('str', 'PySide2.QtGui.QMatrix2x2', 'int')], + "QGLShaderProgram.setUniformValueArray2x3": [('int', 'PySide2.QtGui.QMatrix2x3', 'int'), ('str', 'PySide2.QtGui.QMatrix2x3', 'int')], + "QGLShaderProgram.setUniformValueArray2x4": [('int', 'PySide2.QtGui.QMatrix2x4', 'int'), ('str', 'PySide2.QtGui.QMatrix2x4', 'int')], + "QGLShaderProgram.setUniformValueArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setUniformValueArray3x2": [('int', 'PySide2.QtGui.QMatrix3x2', 'int'), ('str', 'PySide2.QtGui.QMatrix3x2', 'int')], + "QGLShaderProgram.setUniformValueArray3x3": [('int', 'PySide2.QtGui.QMatrix3x3', 'int'), ('str', 'PySide2.QtGui.QMatrix3x3', 'int')], + "QGLShaderProgram.setUniformValueArray3x4": [('int', 'PySide2.QtGui.QMatrix3x4', 'int'), ('str', 'PySide2.QtGui.QMatrix3x4', 'int')], + "QGLShaderProgram.setUniformValueArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setUniformValueArray4x2": [('int', 'PySide2.QtGui.QMatrix4x2', 'int'), ('str', 'PySide2.QtGui.QMatrix4x2', 'int')], + "QGLShaderProgram.setUniformValueArray4x3": [('int', 'PySide2.QtGui.QMatrix4x3', 'int'), ('str', 'PySide2.QtGui.QMatrix4x3', 'int')], + "QGLShaderProgram.setUniformValueArray4x4": [('int', 'PySide2.QtGui.QMatrix4x4', 'int'), ('str', 'PySide2.QtGui.QMatrix4x4', 'int')], + "QGLShaderProgram.setUniformValueArrayInt": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.setUniformValueArrayUint": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.shaders": (), + "QGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtOpenGL.QGLWidget: + "QGLWidget.__init__": [('PySide2.QtOpenGL.QGLContext', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags'), ('PySide2.QtOpenGL.QGLFormat', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags')], + "QGLWidget.autoBufferSwap": (), + "QGLWidget.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'BindOptions'), ('str',)], + "QGLWidget.colormap": (), + "QGLWidget.context": (), + "QGLWidget.convertToGLFormat": ('PySide2.QtGui.QImage',), + "QGLWidget.deleteTexture": ('int',), + "QGLWidget.doneCurrent": (), + "QGLWidget.doubleBuffer": (), + "QGLWidget.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLWidget.event": ('PySide2.QtCore.QEvent',), + "QGLWidget.format": (), + "QGLWidget.glDraw": (), + "QGLWidget.glInit": (), + "QGLWidget.grabFrameBuffer": ('bool',), + "QGLWidget.initializeGL": (), + "QGLWidget.initializeOverlayGL": (), + "QGLWidget.isSharing": (), + "QGLWidget.isValid": (), + "QGLWidget.makeCurrent": (), + "QGLWidget.makeOverlayCurrent": (), + "QGLWidget.overlayContext": (), + "QGLWidget.paintEngine": (), + "QGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGLWidget.paintGL": (), + "QGLWidget.paintOverlayGL": (), + "QGLWidget.qglClearColor": ('PySide2.QtGui.QColor',), + "QGLWidget.qglColor": ('PySide2.QtGui.QColor',), + "QGLWidget.renderPixmap": ('int', 'int', 'bool'), + "QGLWidget.renderText": [('float', 'float', 'float', 'str', 'PySide2.QtGui.QFont'), ('int', 'int', 'str', 'PySide2.QtGui.QFont')], + "QGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGLWidget.resizeGL": ('int', 'int'), + "QGLWidget.resizeOverlayGL": ('int', 'int'), + "QGLWidget.setAutoBufferSwap": ('bool',), + "QGLWidget.setColormap": ('PySide2.QtOpenGL.QGLColormap',), + "QGLWidget.swapBuffers": (), + "QGLWidget.updateGL": (), + "QGLWidget.updateOverlayGL": (), + }) + +# Module PySide2.QtQml +if "PySide2.QtQml" in sys.modules: + dict.update({ + + # class PySide2.QtQml.ListProperty: + + # class PySide2.QtQml.QJSEngine: + "QJSEngine.__init__": [(), ('PySide2.QtCore.QObject',)], + "QJSEngine.collectGarbage": (), + "QJSEngine.evaluate": ('str', 'str', 'int'), + "QJSEngine.globalObject": (), + "QJSEngine.installExtensions": ('Extensions', 'PySide2.QtQml.QJSValue'), + "QJSEngine.installTranslatorFunctions": ('PySide2.QtQml.QJSValue',), + "QJSEngine.newArray": ('int',), + "QJSEngine.newObject": (), + "QJSEngine.newQMetaObject": ('PySide2.QtCore.QMetaObject',), + "QJSEngine.newQObject": ('PySide2.QtCore.QObject',), + "QJSEngine.toScriptValue": ('Any',), + + # class PySide2.QtQml.QJSValue: + "QJSValue.__init__": [('PySide2.QtQml.QJSValue',), ('PySide2.QtQml.QJSValue.SpecialValue',), ('bool',), ('float',), ('int',), ('str',)], + "QJSValue.__copy__": (), + "QJSValue.call": ('list',), + "QJSValue.callAsConstructor": ('list',), + "QJSValue.callWithInstance": ('PySide2.QtQml.QJSValue', 'list'), + "QJSValue.deleteProperty": ('str',), + "QJSValue.engine": (), + "QJSValue.equals": ('PySide2.QtQml.QJSValue',), + "QJSValue.hasOwnProperty": ('str',), + "QJSValue.hasProperty": ('str',), + "QJSValue.isArray": (), + "QJSValue.isBool": (), + "QJSValue.isCallable": (), + "QJSValue.isDate": (), + "QJSValue.isError": (), + "QJSValue.isNull": (), + "QJSValue.isNumber": (), + "QJSValue.isObject": (), + "QJSValue.isQMetaObject": (), + "QJSValue.isQObject": (), + "QJSValue.isRegExp": (), + "QJSValue.isString": (), + "QJSValue.isUndefined": (), + "QJSValue.isVariant": (), + "QJSValue.property": [('int',), ('str',)], + "QJSValue.prototype": (), + "QJSValue.setProperty": [('int', 'PySide2.QtQml.QJSValue'), ('str', 'PySide2.QtQml.QJSValue')], + "QJSValue.setPrototype": ('PySide2.QtQml.QJSValue',), + "QJSValue.strictlyEquals": ('PySide2.QtQml.QJSValue',), + "QJSValue.toBool": (), + "QJSValue.toDateTime": (), + "QJSValue.toInt": (), + "QJSValue.toNumber": (), + "QJSValue.toQMetaObject": (), + "QJSValue.toQObject": (), + "QJSValue.toString": (), + "QJSValue.toUInt": (), + "QJSValue.toVariant": (), + + # class PySide2.QtQml.QJSValueIterator: + "QJSValueIterator.__init__": ('PySide2.QtQml.QJSValue',), + "QJSValueIterator.hasNext": (), + "QJSValueIterator.name": (), + "QJSValueIterator.value": (), + + # class PySide2.QtQml.QQmlAbstractUrlInterceptor: + "QQmlAbstractUrlInterceptor.__init__": (), + "QQmlAbstractUrlInterceptor.intercept": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlAbstractUrlInterceptor.DataType'), + + # class PySide2.QtQml.QQmlApplicationEngine: + "QQmlApplicationEngine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QQmlApplicationEngine.load": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlApplicationEngine.loadData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlApplicationEngine.rootObjects": (), + + # class PySide2.QtQml.QQmlComponent: + "QQmlComponent.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject')], + "QQmlComponent.beginCreate": ('PySide2.QtQml.QQmlContext',), + "QQmlComponent.completeCreate": (), + "QQmlComponent.create": [('PySide2.QtQml.QQmlContext',), ('PySide2.QtQml.QQmlIncubator', 'PySide2.QtQml.QQmlContext', 'PySide2.QtQml.QQmlContext')], + "QQmlComponent.creationContext": (), + "QQmlComponent.errorString": (), + "QQmlComponent.errors": (), + "QQmlComponent.isError": (), + "QQmlComponent.isLoading": (), + "QQmlComponent.isNull": (), + "QQmlComponent.isReady": (), + "QQmlComponent.loadUrl": [('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode')], + "QQmlComponent.progress": (), + "QQmlComponent.setData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlComponent.status": (), + "QQmlComponent.url": (), + + # class PySide2.QtQml.QQmlContext: + "QQmlContext.__init__": [('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject')], + "QQmlContext.baseUrl": (), + "QQmlContext.contextObject": (), + "QQmlContext.contextProperty": ('str',), + "QQmlContext.engine": (), + "QQmlContext.isValid": (), + "QQmlContext.nameForObject": ('PySide2.QtCore.QObject',), + "QQmlContext.parentContext": (), + "QQmlContext.resolvedUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setContextObject": ('PySide2.QtCore.QObject',), + "QQmlContext.setContextProperty": [('str', 'Any'), ('str', 'PySide2.QtCore.QObject')], + + # class PySide2.QtQml.QQmlDebuggingEnabler: + "QQmlDebuggingEnabler.__init__": ('bool',), + "QQmlDebuggingEnabler.connectToLocalDebugger": ('str', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode'), + "QQmlDebuggingEnabler.debuggerServices": (), + "QQmlDebuggingEnabler.inspectorServices": (), + "QQmlDebuggingEnabler.nativeDebuggerServices": (), + "QQmlDebuggingEnabler.profilerServices": (), + "QQmlDebuggingEnabler.setServices": ('List[str]',), + "QQmlDebuggingEnabler.startDebugConnector": ('str', 'dict'), + "QQmlDebuggingEnabler.startTcpDebugServer": ('int', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode', 'str'), + + # class PySide2.QtQml.QQmlEngine: + "QQmlEngine.__init__": ('PySide2.QtCore.QObject',), + "QQmlEngine.addImageProvider": ('str', 'PySide2.QtQml.QQmlImageProviderBase'), + "QQmlEngine.addImportPath": ('str',), + "QQmlEngine.addNamedBundle": ('str', 'str'), + "QQmlEngine.addPluginPath": ('str',), + "QQmlEngine.baseUrl": (), + "QQmlEngine.clearComponentCache": (), + "QQmlEngine.contextForObject": ('PySide2.QtCore.QObject',), + "QQmlEngine.event": ('PySide2.QtCore.QEvent',), + "QQmlEngine.imageProvider": ('str',), + "QQmlEngine.importPathList": (), + "QQmlEngine.importPlugin": ('str', 'str', 'list'), + "QQmlEngine.incubationController": (), + "QQmlEngine.networkAccessManager": (), + "QQmlEngine.networkAccessManagerFactory": (), + "QQmlEngine.objectOwnership": ('PySide2.QtCore.QObject',), + "QQmlEngine.offlineStorageDatabaseFilePath": ('str',), + "QQmlEngine.offlineStoragePath": (), + "QQmlEngine.outputWarningsToStandardError": (), + "QQmlEngine.pluginPathList": (), + "QQmlEngine.removeImageProvider": ('str',), + "QQmlEngine.rootContext": (), + "QQmlEngine.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlEngine.setContextForObject": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), + "QQmlEngine.setImportPathList": ('List[str]',), + "QQmlEngine.setIncubationController": ('PySide2.QtQml.QQmlIncubationController',), + "QQmlEngine.setNetworkAccessManagerFactory": ('PySide2.QtQml.QQmlNetworkAccessManagerFactory',), + "QQmlEngine.setObjectOwnership": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine.ObjectOwnership'), + "QQmlEngine.setOfflineStoragePath": ('str',), + "QQmlEngine.setOutputWarningsToStandardError": ('bool',), + "QQmlEngine.setPluginPathList": ('List[str]',), + "QQmlEngine.setUrlInterceptor": ('PySide2.QtQml.QQmlAbstractUrlInterceptor',), + "QQmlEngine.trimComponentCache": (), + "QQmlEngine.urlInterceptor": (), + + # class PySide2.QtQml.QQmlError: + "QQmlError.__init__": [(), ('PySide2.QtQml.QQmlError',)], + "QQmlError.__copy__": (), + "QQmlError.column": (), + "QQmlError.description": (), + "QQmlError.isValid": (), + "QQmlError.line": (), + "QQmlError.messageType": (), + "QQmlError.object": (), + "QQmlError.setColumn": ('int',), + "QQmlError.setDescription": ('str',), + "QQmlError.setLine": ('int',), + "QQmlError.setMessageType": ('PySide2.QtCore.QtMsgType',), + "QQmlError.setObject": ('PySide2.QtCore.QObject',), + "QQmlError.setUrl": ('PySide2.QtCore.QUrl',), + "QQmlError.toString": (), + "QQmlError.url": (), + + # class PySide2.QtQml.QQmlExpression: + "QQmlExpression.__init__": [(), ('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlScriptString', 'PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QObject')], + "QQmlExpression.clearError": (), + "QQmlExpression.columnNumber": (), + "QQmlExpression.context": (), + "QQmlExpression.engine": (), + "QQmlExpression.error": (), + "QQmlExpression.evaluate": ('bool',), + "QQmlExpression.expression": (), + "QQmlExpression.hasError": (), + "QQmlExpression.lineNumber": (), + "QQmlExpression.notifyOnValueChanged": (), + "QQmlExpression.scopeObject": (), + "QQmlExpression.setExpression": ('str',), + "QQmlExpression.setNotifyOnValueChanged": ('bool',), + "QQmlExpression.setSourceLocation": ('str', 'int', 'int'), + "QQmlExpression.sourceFile": (), + + # class PySide2.QtQml.QQmlExtensionInterface: + "QQmlExtensionInterface.__init__": (), + "QQmlExtensionInterface.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + + # class PySide2.QtQml.QQmlExtensionPlugin: + "QQmlExtensionPlugin.__init__": ('PySide2.QtCore.QObject',), + "QQmlExtensionPlugin.baseUrl": (), + "QQmlExtensionPlugin.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + "QQmlExtensionPlugin.registerTypes": ('str',), + + # class PySide2.QtQml.QQmlFile: + "QQmlFile.__init__": [(), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.clear": [(), ('PySide2.QtCore.QObject',)], + "QQmlFile.connectDownloadProgress": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.connectFinished": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.data": (), + "QQmlFile.dataByteArray": (), + "QQmlFile.error": (), + "QQmlFile.isError": (), + "QQmlFile.isLoading": (), + "QQmlFile.isLocalFile": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.isNull": (), + "QQmlFile.isReady": (), + "QQmlFile.isSynchronous": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.load": [('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.size": (), + "QQmlFile.status": (), + "QQmlFile.url": (), + "QQmlFile.urlToLocalFileOrQrc": [('PySide2.QtCore.QUrl',), ('str',)], + + # class PySide2.QtQml.QQmlFileSelector: + "QQmlFileSelector.__init__": ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), + "QQmlFileSelector.get": ('PySide2.QtQml.QQmlEngine',), + "QQmlFileSelector.selector": (), + "QQmlFileSelector.setExtraSelectors": ('List[str]',), + "QQmlFileSelector.setSelector": ('PySide2.QtCore.QFileSelector',), + + # class PySide2.QtQml.QQmlImageProviderBase: + "QQmlImageProviderBase.flags": (), + "QQmlImageProviderBase.imageType": (), + + # class PySide2.QtQml.QQmlIncubationController: + "QQmlIncubationController.__init__": (), + "QQmlIncubationController.engine": (), + "QQmlIncubationController.incubateFor": ('int',), + "QQmlIncubationController.incubateWhile": ('bool', 'int'), + "QQmlIncubationController.incubatingObjectCount": (), + "QQmlIncubationController.incubatingObjectCountChanged": ('int',), + + # class PySide2.QtQml.QQmlIncubator: + "QQmlIncubator.__init__": ('PySide2.QtQml.QQmlIncubator.IncubationMode',), + "QQmlIncubator.clear": (), + "QQmlIncubator.errors": (), + "QQmlIncubator.forceCompletion": (), + "QQmlIncubator.incubationMode": (), + "QQmlIncubator.isError": (), + "QQmlIncubator.isLoading": (), + "QQmlIncubator.isNull": (), + "QQmlIncubator.isReady": (), + "QQmlIncubator.object": (), + "QQmlIncubator.setInitialState": ('PySide2.QtCore.QObject',), + "QQmlIncubator.status": (), + "QQmlIncubator.statusChanged": ('PySide2.QtQml.QQmlIncubator.Status',), + + # class PySide2.QtQml.QQmlListReference: + "QQmlListReference.__init__": [(), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlListReference',)], + "QQmlListReference.__copy__": (), + "QQmlListReference.append": ('PySide2.QtCore.QObject',), + "QQmlListReference.at": ('int',), + "QQmlListReference.canAppend": (), + "QQmlListReference.canAt": (), + "QQmlListReference.canClear": (), + "QQmlListReference.canCount": (), + "QQmlListReference.clear": (), + "QQmlListReference.count": (), + "QQmlListReference.isManipulable": (), + "QQmlListReference.isReadable": (), + "QQmlListReference.isValid": (), + "QQmlListReference.listElementType": (), + "QQmlListReference.object": (), + + # class PySide2.QtQml.QQmlNetworkAccessManagerFactory: + "QQmlNetworkAccessManagerFactory.__init__": (), + "QQmlNetworkAccessManagerFactory.create": ('PySide2.QtCore.QObject',), + + # class PySide2.QtQml.QQmlParserStatus: + "QQmlParserStatus.__init__": (), + "QQmlParserStatus.classBegin": (), + "QQmlParserStatus.componentComplete": (), + + # class PySide2.QtQml.QQmlProperty: + "QQmlProperty.__init__": [(), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlProperty',)], + "QQmlProperty.__copy__": (), + "QQmlProperty.connectNotifySignal": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlProperty.hasNotifySignal": (), + "QQmlProperty.index": (), + "QQmlProperty.isDesignable": (), + "QQmlProperty.isProperty": (), + "QQmlProperty.isResettable": (), + "QQmlProperty.isSignalProperty": (), + "QQmlProperty.isValid": (), + "QQmlProperty.isWritable": (), + "QQmlProperty.method": (), + "QQmlProperty.name": (), + "QQmlProperty.needsNotifySignal": (), + "QQmlProperty.object": (), + "QQmlProperty.property": (), + "QQmlProperty.propertyType": (), + "QQmlProperty.propertyTypeCategory": (), + "QQmlProperty.propertyTypeName": (), + "QQmlProperty.read": [(), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine')], + "QQmlProperty.reset": (), + "QQmlProperty.type": (), + "QQmlProperty.write": [('Any',), ('PySide2.QtCore.QObject', 'str', 'Any'), ('PySide2.QtCore.QObject', 'str', 'Any', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'Any', 'PySide2.QtQml.QQmlEngine')], + + # class PySide2.QtQml.QQmlPropertyMap: + "QQmlPropertyMap.__init__": ('PySide2.QtCore.QObject',), + "QQmlPropertyMap.clear": ('str',), + "QQmlPropertyMap.contains": ('str',), + "QQmlPropertyMap.count": (), + "QQmlPropertyMap.insert": ('str', 'Any'), + "QQmlPropertyMap.isEmpty": (), + "QQmlPropertyMap.keys": (), + "QQmlPropertyMap.size": (), + "QQmlPropertyMap.updateValue": ('str', 'Any'), + "QQmlPropertyMap.value": ('str',), + + # class PySide2.QtQml.QQmlPropertyValueSource: + "QQmlPropertyValueSource.__init__": (), + "QQmlPropertyValueSource.setTarget": ('PySide2.QtQml.QQmlProperty',), + + # class PySide2.QtQml.QQmlScriptString: + "QQmlScriptString.__init__": [(), ('PySide2.QtQml.QQmlScriptString',)], + "QQmlScriptString.__copy__": (), + "QQmlScriptString.booleanLiteral": ('bool',), + "QQmlScriptString.isEmpty": (), + "QQmlScriptString.isNullLiteral": (), + "QQmlScriptString.isUndefinedLiteral": (), + "QQmlScriptString.numberLiteral": ('bool',), + "QQmlScriptString.stringLiteral": (), + + # class PySide2.QtQml.QQmlTypesExtensionInterface: + "QQmlTypesExtensionInterface.__init__": (), + "QQmlTypesExtensionInterface.registerTypes": ('str',), + + # class PySide2.QtQml.VolatileBool: + }) + +# Module PySide2.QtQuick +if "PySide2.QtQuick" in sys.modules: + dict.update({ + + # class PySide2.QtQuick.QQuickAsyncImageProvider: + "QQuickAsyncImageProvider.__init__": (), + "QQuickAsyncImageProvider.requestImageResponse": ('str', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickFramebufferObject: + "QQuickFramebufferObject.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickFramebufferObject.createRenderer": (), + "QQuickFramebufferObject.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickFramebufferObject.isTextureProvider": (), + "QQuickFramebufferObject.mirrorVertically": (), + "QQuickFramebufferObject.releaseResources": (), + "QQuickFramebufferObject.setMirrorVertically": ('bool',), + "QQuickFramebufferObject.setTextureFollowsItemSize": ('bool',), + "QQuickFramebufferObject.textureFollowsItemSize": (), + "QQuickFramebufferObject.textureProvider": (), + "QQuickFramebufferObject.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickImageProvider: + "QQuickImageProvider.__init__": ('PySide2.QtQml.QQmlImageProviderBase.ImageType', 'Flags'), + "QQuickImageProvider.flags": (), + "QQuickImageProvider.imageType": (), + "QQuickImageProvider.requestImage": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestPixmap": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestTexture": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickImageResponse: + "QQuickImageResponse.__init__": (), + "QQuickImageResponse.cancel": (), + "QQuickImageResponse.errorString": (), + "QQuickImageResponse.textureFactory": (), + + # class PySide2.QtQuick.QQuickItem: + "QQuickItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.acceptHoverEvents": (), + "QQuickItem.acceptedMouseButtons": (), + "QQuickItem.activeFocusOnTab": (), + "QQuickItem.antialiasing": (), + "QQuickItem.baselineOffset": (), + "QQuickItem.boundingRect": (), + "QQuickItem.childAt": ('float', 'float'), + "QQuickItem.childItems": (), + "QQuickItem.childMouseEventFilter": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickItem.childrenRect": (), + "QQuickItem.classBegin": (), + "QQuickItem.clip": (), + "QQuickItem.clipRect": (), + "QQuickItem.componentComplete": (), + "QQuickItem.contains": ('PySide2.QtCore.QPointF',), + "QQuickItem.cursor": (), + "QQuickItem.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickItem.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickItem.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickItem.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickItem.event": ('PySide2.QtCore.QEvent',), + "QQuickItem.filtersChildMouseEvents": (), + "QQuickItem.flags": (), + "QQuickItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.forceActiveFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QQuickItem.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickItem.grabMouse": (), + "QQuickItem.grabToImage": [('PySide2.QtCore.QSize',), ('PySide2.QtQml.QJSValue', 'PySide2.QtCore.QSize')], + "QQuickItem.grabTouchPoints": ('list',), + "QQuickItem.hasActiveFocus": (), + "QQuickItem.hasFocus": (), + "QQuickItem.height": (), + "QQuickItem.heightValid": (), + "QQuickItem.hoverEnterEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverLeaveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverMoveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.implicitHeight": (), + "QQuickItem.implicitWidth": (), + "QQuickItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QQuickItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QQuickItem.isAncestorOf": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.isComponentComplete": (), + "QQuickItem.isEnabled": (), + "QQuickItem.isFocusScope": (), + "QQuickItem.isTextureProvider": (), + "QQuickItem.isUnderMouse": (), + "QQuickItem.isVisible": (), + "QQuickItem.itemTransform": ('PySide2.QtQuick.QQuickItem', 'bool'), + "QQuickItem.keepMouseGrab": (), + "QQuickItem.keepTouchGrab": (), + "QQuickItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.mapFromGlobal": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapFromScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapRectFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectFromScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapRectToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectToScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapToGlobal": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapToScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseUngrabEvent": (), + "QQuickItem.nextItemInFocusChain": ('bool',), + "QQuickItem.opacity": (), + "QQuickItem.parentItem": (), + "QQuickItem.polish": (), + "QQuickItem.position": (), + "QQuickItem.releaseResources": (), + "QQuickItem.resetAntialiasing": (), + "QQuickItem.resetHeight": (), + "QQuickItem.resetWidth": (), + "QQuickItem.rotation": (), + "QQuickItem.scale": (), + "QQuickItem.scopedFocusItem": (), + "QQuickItem.setAcceptHoverEvents": ('bool',), + "QQuickItem.setAcceptedMouseButtons": ('MouseButtons',), + "QQuickItem.setActiveFocusOnTab": ('bool',), + "QQuickItem.setAntialiasing": ('bool',), + "QQuickItem.setBaselineOffset": ('float',), + "QQuickItem.setClip": ('bool',), + "QQuickItem.setCursor": ('PySide2.QtGui.QCursor',), + "QQuickItem.setEnabled": ('bool',), + "QQuickItem.setFiltersChildMouseEvents": ('bool',), + "QQuickItem.setFlag": ('PySide2.QtQuick.QQuickItem.Flag', 'bool'), + "QQuickItem.setFlags": ('Flags',), + "QQuickItem.setFocus": [('bool',), ('bool', 'PySide2.QtCore.Qt.FocusReason')], + "QQuickItem.setHeight": ('float',), + "QQuickItem.setImplicitHeight": ('float',), + "QQuickItem.setImplicitSize": ('float', 'float'), + "QQuickItem.setImplicitWidth": ('float',), + "QQuickItem.setKeepMouseGrab": ('bool',), + "QQuickItem.setKeepTouchGrab": ('bool',), + "QQuickItem.setOpacity": ('float',), + "QQuickItem.setParentItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.setPosition": ('PySide2.QtCore.QPointF',), + "QQuickItem.setRotation": ('float',), + "QQuickItem.setScale": ('float',), + "QQuickItem.setSize": ('PySide2.QtCore.QSizeF',), + "QQuickItem.setSmooth": ('bool',), + "QQuickItem.setState": ('str',), + "QQuickItem.setTransformOrigin": ('PySide2.QtQuick.QQuickItem.TransformOrigin',), + "QQuickItem.setTransformOriginPoint": ('PySide2.QtCore.QPointF',), + "QQuickItem.setVisible": ('bool',), + "QQuickItem.setWidth": ('float',), + "QQuickItem.setX": ('float',), + "QQuickItem.setY": ('float',), + "QQuickItem.setZ": ('float',), + "QQuickItem.smooth": (), + "QQuickItem.stackAfter": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.stackBefore": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.state": (), + "QQuickItem.textureProvider": (), + "QQuickItem.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QQuickItem.touchUngrabEvent": (), + "QQuickItem.transformOrigin": (), + "QQuickItem.transformOriginPoint": (), + "QQuickItem.ungrabMouse": (), + "QQuickItem.ungrabTouchPoints": (), + "QQuickItem.unsetCursor": (), + "QQuickItem.update": (), + "QQuickItem.updateInputMethod": ('InputMethodQueries',), + "QQuickItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + "QQuickItem.updatePolish": (), + "QQuickItem.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QQuickItem.width": (), + "QQuickItem.widthValid": (), + "QQuickItem.window": (), + "QQuickItem.windowDeactivateEvent": (), + "QQuickItem.x": (), + "QQuickItem.y": (), + "QQuickItem.z": (), + + # class PySide2.QtQuick.QQuickItemGrabResult: + "QQuickItemGrabResult.event": ('PySide2.QtCore.QEvent',), + "QQuickItemGrabResult.image": (), + "QQuickItemGrabResult.saveToFile": ('str',), + "QQuickItemGrabResult.url": (), + + # class PySide2.QtQuick.QQuickPaintedItem: + "QQuickPaintedItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickPaintedItem.antialiasing": (), + "QQuickPaintedItem.contentsBoundingRect": (), + "QQuickPaintedItem.contentsScale": (), + "QQuickPaintedItem.contentsSize": (), + "QQuickPaintedItem.fillColor": (), + "QQuickPaintedItem.isTextureProvider": (), + "QQuickPaintedItem.mipmap": (), + "QQuickPaintedItem.opaquePainting": (), + "QQuickPaintedItem.paint": ('PySide2.QtGui.QPainter',), + "QQuickPaintedItem.performanceHints": (), + "QQuickPaintedItem.releaseResources": (), + "QQuickPaintedItem.renderTarget": (), + "QQuickPaintedItem.resetContentsSize": (), + "QQuickPaintedItem.setAntialiasing": ('bool',), + "QQuickPaintedItem.setContentsScale": ('float',), + "QQuickPaintedItem.setContentsSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.setFillColor": ('PySide2.QtGui.QColor',), + "QQuickPaintedItem.setMipmap": ('bool',), + "QQuickPaintedItem.setOpaquePainting": ('bool',), + "QQuickPaintedItem.setPerformanceHint": ('PySide2.QtQuick.QQuickPaintedItem.PerformanceHint', 'bool'), + "QQuickPaintedItem.setPerformanceHints": ('PerformanceHints',), + "QQuickPaintedItem.setRenderTarget": ('PySide2.QtQuick.QQuickPaintedItem.RenderTarget',), + "QQuickPaintedItem.setTextureSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.textureProvider": (), + "QQuickPaintedItem.textureSize": (), + "QQuickPaintedItem.update": [(), ('PySide2.QtCore.QRect',)], + "QQuickPaintedItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickRenderControl: + "QQuickRenderControl.__init__": ('PySide2.QtCore.QObject',), + "QQuickRenderControl.grab": (), + "QQuickRenderControl.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QQuickRenderControl.invalidate": (), + "QQuickRenderControl.polishItems": (), + "QQuickRenderControl.prepareThread": ('PySide2.QtCore.QThread',), + "QQuickRenderControl.render": (), + "QQuickRenderControl.renderWindow": ('PySide2.QtCore.QPoint',), + "QQuickRenderControl.renderWindowFor": ('PySide2.QtQuick.QQuickWindow', 'PySide2.QtCore.QPoint'), + "QQuickRenderControl.sync": (), + + # class PySide2.QtQuick.QQuickTextDocument: + "QQuickTextDocument.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickTextDocument.textDocument": (), + + # class PySide2.QtQuick.QQuickTextureFactory: + "QQuickTextureFactory.__init__": (), + "QQuickTextureFactory.createTexture": ('PySide2.QtQuick.QQuickWindow',), + "QQuickTextureFactory.image": (), + "QQuickTextureFactory.textureByteCount": (), + "QQuickTextureFactory.textureFactoryForImage": ('PySide2.QtGui.QImage',), + "QQuickTextureFactory.textureSize": (), + + # class PySide2.QtQuick.QQuickTransform: + "QQuickTransform.__init__": ('PySide2.QtCore.QObject',), + "QQuickTransform.appendToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QQuickTransform.prependToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.update": (), + + # class PySide2.QtQuick.QQuickView: + "QQuickView.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtGui.QWindow'), ('PySide2.QtGui.QWindow',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtGui.QWindow')], + "QQuickView.engine": (), + "QQuickView.errors": (), + "QQuickView.initialSize": (), + "QQuickView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickView.resizeMode": (), + "QQuickView.rootContext": (), + "QQuickView.rootObject": (), + "QQuickView.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickView.setResizeMode": ('PySide2.QtQuick.QQuickView.ResizeMode',), + "QQuickView.setSource": ('PySide2.QtCore.QUrl',), + "QQuickView.sizeHint": (), + "QQuickView.source": (), + "QQuickView.status": (), + "QQuickView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtQuick.QQuickWindow: + "QQuickWindow.__init__": [('PySide2.QtGui.QWindow',), ('PySide2.QtQuick.QQuickRenderControl',)], + "QQuickWindow.accessibleRoot": (), + "QQuickWindow.activeFocusItem": (), + "QQuickWindow.clearBeforeRendering": (), + "QQuickWindow.color": (), + "QQuickWindow.contentItem": (), + "QQuickWindow.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'CreateTextureOptions'), + "QQuickWindow.createTextureFromImage": [('PySide2.QtGui.QImage',), ('PySide2.QtGui.QImage', 'CreateTextureOptions')], + "QQuickWindow.effectiveDevicePixelRatio": (), + "QQuickWindow.event": ('PySide2.QtCore.QEvent',), + "QQuickWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QQuickWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.focusObject": (), + "QQuickWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.grabWindow": (), + "QQuickWindow.hasDefaultAlphaBuffer": (), + "QQuickWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWindow.incubationController": (), + "QQuickWindow.isPersistentOpenGLContext": (), + "QQuickWindow.isPersistentSceneGraph": (), + "QQuickWindow.isSceneGraphInitialized": (), + "QQuickWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseGrabberItem": (), + "QQuickWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.openglContext": (), + "QQuickWindow.releaseResources": (), + "QQuickWindow.renderTarget": (), + "QQuickWindow.renderTargetId": (), + "QQuickWindow.renderTargetSize": (), + "QQuickWindow.resetOpenGLState": (), + "QQuickWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWindow.sceneGraphBackend": (), + "QQuickWindow.scheduleRenderJob": ('PySide2.QtCore.QRunnable', 'PySide2.QtQuick.QQuickWindow.RenderStage'), + "QQuickWindow.sendEvent": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickWindow.setClearBeforeRendering": ('bool',), + "QQuickWindow.setColor": ('PySide2.QtGui.QColor',), + "QQuickWindow.setDefaultAlphaBuffer": ('bool',), + "QQuickWindow.setPersistentOpenGLContext": ('bool',), + "QQuickWindow.setPersistentSceneGraph": ('bool',), + "QQuickWindow.setRenderTarget": [('PySide2.QtGui.QOpenGLFramebufferObject',), ('int', 'PySide2.QtCore.QSize')], + "QQuickWindow.setSceneGraphBackend": ('str',), + "QQuickWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWindow.update": (), + "QQuickWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtQuick.QSGAbstractRenderer: + "QSGAbstractRenderer.__init__": ('PySide2.QtCore.QObject',), + "QSGAbstractRenderer.clearColor": (), + "QSGAbstractRenderer.clearMode": (), + "QSGAbstractRenderer.deviceRect": (), + "QSGAbstractRenderer.nodeChanged": ('PySide2.QtQuick.QSGNode', 'DirtyState'), + "QSGAbstractRenderer.projectionMatrix": (), + "QSGAbstractRenderer.renderScene": ('int',), + "QSGAbstractRenderer.setClearColor": ('PySide2.QtGui.QColor',), + "QSGAbstractRenderer.setClearMode": ('ClearMode',), + "QSGAbstractRenderer.setDeviceRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.setProjectionMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGAbstractRenderer.setProjectionMatrixToRect": ('PySide2.QtCore.QRectF',), + "QSGAbstractRenderer.setViewportRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.viewportRect": (), + + # class PySide2.QtQuick.QSGBasicGeometryNode: + "QSGBasicGeometryNode.__init__": ('PySide2.QtQuick.QSGNode.NodeType',), + "QSGBasicGeometryNode.clipList": (), + "QSGBasicGeometryNode.geometry": (), + "QSGBasicGeometryNode.matrix": (), + "QSGBasicGeometryNode.setGeometry": ('PySide2.QtQuick.QSGGeometry',), + "QSGBasicGeometryNode.setRendererClipList": ('PySide2.QtQuick.QSGClipNode',), + "QSGBasicGeometryNode.setRendererMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSGClipNode: + "QSGClipNode.__init__": (), + "QSGClipNode.clipRect": (), + "QSGClipNode.isRectangular": (), + "QSGClipNode.setClipRect": ('PySide2.QtCore.QRectF',), + "QSGClipNode.setIsRectangular": ('bool',), + + # class PySide2.QtQuick.QSGDynamicTexture: + "QSGDynamicTexture.__init__": (), + "QSGDynamicTexture.updateTexture": (), + + # class PySide2.QtQuick.QSGEngine: + "QSGEngine.__init__": ('PySide2.QtCore.QObject',), + "QSGEngine.createRenderer": (), + "QSGEngine.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'CreateTextureOptions'), + "QSGEngine.createTextureFromImage": ('PySide2.QtGui.QImage', 'CreateTextureOptions'), + "QSGEngine.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QSGEngine.invalidate": (), + + # class PySide2.QtQuick.QSGGeometry: + "QSGGeometry.__init__": ('PySide2.QtQuick.QSGGeometry.AttributeSet', 'int', 'int', 'int'), + "QSGGeometry.allocate": ('int', 'int'), + "QSGGeometry.attributeCount": (), + "QSGGeometry.attributes": (), + "QSGGeometry.defaultAttributes_ColoredPoint2D": (), + "QSGGeometry.defaultAttributes_Point2D": (), + "QSGGeometry.defaultAttributes_TexturedPoint2D": (), + "QSGGeometry.drawingMode": (), + "QSGGeometry.indexCount": (), + "QSGGeometry.indexData": (), + "QSGGeometry.indexDataAsUInt": (), + "QSGGeometry.indexDataAsUShort": (), + "QSGGeometry.indexDataPattern": (), + "QSGGeometry.indexType": (), + "QSGGeometry.lineWidth": (), + "QSGGeometry.markIndexDataDirty": (), + "QSGGeometry.markVertexDataDirty": (), + "QSGGeometry.setDrawingMode": ('int',), + "QSGGeometry.setIndexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.setLineWidth": ('float',), + "QSGGeometry.setVertexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.sizeOfIndex": (), + "QSGGeometry.sizeOfVertex": (), + "QSGGeometry.updateColoredRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateTexturedRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QSGGeometry.vertexCount": (), + "QSGGeometry.vertexData": (), + "QSGGeometry.vertexDataAsColoredPoint2D": (), + "QSGGeometry.vertexDataAsPoint2D": (), + "QSGGeometry.vertexDataAsTexturedPoint2D": (), + "QSGGeometry.vertexDataPattern": (), + + # class PySide2.QtQuick.QSGGeometryNode: + "QSGGeometryNode.__init__": (), + "QSGGeometryNode.inheritedOpacity": (), + "QSGGeometryNode.renderOrder": (), + "QSGGeometryNode.setInheritedOpacity": ('float',), + "QSGGeometryNode.setRenderOrder": ('int',), + + # class PySide2.QtQuick.QSGMaterialType: + "QSGMaterialType.__init__": (), + + # class PySide2.QtQuick.QSGNode: + "QSGNode.__init__": [(), ('PySide2.QtQuick.QSGNode.NodeType',)], + "QSGNode.appendChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.childAtIndex": ('int',), + "QSGNode.childCount": (), + "QSGNode.clearDirty": (), + "QSGNode.dirtyState": (), + "QSGNode.firstChild": (), + "QSGNode.flags": (), + "QSGNode.insertChildNodeAfter": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.insertChildNodeBefore": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.isSubtreeBlocked": (), + "QSGNode.lastChild": (), + "QSGNode.markDirty": ('DirtyState',), + "QSGNode.nextSibling": (), + "QSGNode.parent": (), + "QSGNode.prependChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.preprocess": (), + "QSGNode.previousSibling": (), + "QSGNode.removeAllChildNodes": (), + "QSGNode.removeChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.reparentChildNodesTo": ('PySide2.QtQuick.QSGNode',), + "QSGNode.setFlag": ('PySide2.QtQuick.QSGNode.Flag', 'bool'), + "QSGNode.setFlags": ('Flags', 'bool'), + "QSGNode.type": (), + + # class PySide2.QtQuick.QSGOpacityNode: + "QSGOpacityNode.__init__": (), + "QSGOpacityNode.combinedOpacity": (), + "QSGOpacityNode.isSubtreeBlocked": (), + "QSGOpacityNode.opacity": (), + "QSGOpacityNode.setCombinedOpacity": ('float',), + "QSGOpacityNode.setOpacity": ('float',), + + # class PySide2.QtQuick.QSGSimpleRectNode: + "QSGSimpleRectNode.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor')], + "QSGSimpleRectNode.color": (), + "QSGSimpleRectNode.rect": (), + "QSGSimpleRectNode.setColor": ('PySide2.QtGui.QColor',), + "QSGSimpleRectNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + + # class PySide2.QtQuick.QSGSimpleTextureNode: + "QSGSimpleTextureNode.__init__": (), + "QSGSimpleTextureNode.filtering": (), + "QSGSimpleTextureNode.ownsTexture": (), + "QSGSimpleTextureNode.rect": (), + "QSGSimpleTextureNode.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGSimpleTextureNode.setOwnsTexture": ('bool',), + "QSGSimpleTextureNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setSourceRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setTexture": ('PySide2.QtQuick.QSGTexture',), + "QSGSimpleTextureNode.setTextureCoordinatesTransform": ('TextureCoordinatesTransformMode',), + "QSGSimpleTextureNode.sourceRect": (), + "QSGSimpleTextureNode.texture": (), + "QSGSimpleTextureNode.textureCoordinatesTransform": (), + + # class PySide2.QtQuick.QSGTexture: + "QSGTexture.__init__": (), + "QSGTexture.anisotropyLevel": (), + "QSGTexture.bind": (), + "QSGTexture.convertToNormalizedSourceRect": ('PySide2.QtCore.QRectF',), + "QSGTexture.filtering": (), + "QSGTexture.hasAlphaChannel": (), + "QSGTexture.hasMipmaps": (), + "QSGTexture.horizontalWrapMode": (), + "QSGTexture.isAtlasTexture": (), + "QSGTexture.mipmapFiltering": (), + "QSGTexture.normalizedTextureSubRect": (), + "QSGTexture.removedFromAtlas": (), + "QSGTexture.setAnisotropyLevel": ('PySide2.QtQuick.QSGTexture.AnisotropyLevel',), + "QSGTexture.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setHorizontalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.setMipmapFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setVerticalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.textureId": (), + "QSGTexture.textureSize": (), + "QSGTexture.updateBindOptions": ('bool',), + "QSGTexture.verticalWrapMode": (), + + # class PySide2.QtQuick.QSGTextureProvider: + "QSGTextureProvider.__init__": (), + "QSGTextureProvider.texture": (), + + # class PySide2.QtQuick.QSGTransformNode: + "QSGTransformNode.__init__": (), + "QSGTransformNode.combinedMatrix": (), + "QSGTransformNode.matrix": (), + "QSGTransformNode.setCombinedMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGTransformNode.setMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSharedPointer: + "QSharedPointer.__copy__": (), + "QSharedPointer.data": (), + }) + +# Module PySide2.QtQuickWidgets +if "PySide2.QtQuickWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtQuickWidgets.QQuickWidget: + "QQuickWidget.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QQuickWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickWidget.engine": (), + "QQuickWidget.errors": (), + "QQuickWidget.event": ('PySide2.QtCore.QEvent',), + "QQuickWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.format": (), + "QQuickWidget.grabFramebuffer": (), + "QQuickWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWidget.initialSize": (), + "QQuickWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QQuickWidget.quickWindow": (), + "QQuickWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWidget.resizeMode": (), + "QQuickWidget.rootContext": (), + "QQuickWidget.rootObject": (), + "QQuickWidget.setClearColor": ('PySide2.QtGui.QColor',), + "QQuickWidget.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QQuickWidget.setResizeMode": ('PySide2.QtQuickWidgets.QQuickWidget.ResizeMode',), + "QQuickWidget.setSource": ('PySide2.QtCore.QUrl',), + "QQuickWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWidget.sizeHint": (), + "QQuickWidget.source": (), + "QQuickWidget.status": (), + "QQuickWidget.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QQuickWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + }) + +# Module PySide2.QtTextToSpeech +if "PySide2.QtTextToSpeech" in sys.modules: + dict.update({ + + # class PySide2.QtTextToSpeech.QTextToSpeech: + "QTextToSpeech.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextToSpeech.availableEngines": (), + "QTextToSpeech.availableLocales": (), + "QTextToSpeech.availableVoices": (), + "QTextToSpeech.locale": (), + "QTextToSpeech.pause": (), + "QTextToSpeech.pitch": (), + "QTextToSpeech.rate": (), + "QTextToSpeech.resume": (), + "QTextToSpeech.say": ('str',), + "QTextToSpeech.setLocale": ('PySide2.QtCore.QLocale',), + "QTextToSpeech.setPitch": ('float',), + "QTextToSpeech.setRate": ('float',), + "QTextToSpeech.setVoice": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeech.setVolume": ('float',), + "QTextToSpeech.state": (), + "QTextToSpeech.stop": (), + "QTextToSpeech.voice": (), + "QTextToSpeech.volume": (), + + # class PySide2.QtTextToSpeech.QTextToSpeechEngine: + "QTextToSpeechEngine.__init__": ('PySide2.QtCore.QObject',), + "QTextToSpeechEngine.availableLocales": (), + "QTextToSpeechEngine.availableVoices": (), + "QTextToSpeechEngine.createVoice": ('str', 'PySide2.QtTextToSpeech.QVoice.Gender', 'PySide2.QtTextToSpeech.QVoice.Age', 'Any'), + "QTextToSpeechEngine.locale": (), + "QTextToSpeechEngine.pause": (), + "QTextToSpeechEngine.pitch": (), + "QTextToSpeechEngine.rate": (), + "QTextToSpeechEngine.resume": (), + "QTextToSpeechEngine.say": ('str',), + "QTextToSpeechEngine.setLocale": ('PySide2.QtCore.QLocale',), + "QTextToSpeechEngine.setPitch": ('float',), + "QTextToSpeechEngine.setRate": ('float',), + "QTextToSpeechEngine.setVoice": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeechEngine.setVolume": ('float',), + "QTextToSpeechEngine.state": (), + "QTextToSpeechEngine.stop": (), + "QTextToSpeechEngine.voice": (), + "QTextToSpeechEngine.voiceData": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeechEngine.volume": (), + + # class PySide2.QtTextToSpeech.QVoice: + "QVoice.__init__": [(), ('PySide2.QtTextToSpeech.QVoice',)], + "QVoice.__copy__": (), + "QVoice.age": (), + "QVoice.ageName": ('PySide2.QtTextToSpeech.QVoice.Age',), + "QVoice.gender": (), + "QVoice.genderName": ('PySide2.QtTextToSpeech.QVoice.Gender',), + "QVoice.name": (), + }) + +# Module PySide2.QtCharts +if "PySide2.QtCharts" in sys.modules: + dict.update({ + + # class PySide2.QtCharts.QtCharts: + }) + +# Module PySide2.QtSvg +if "PySide2.QtSvg" in sys.modules: + dict.update({ + + # class PySide2.QtSvg.QGraphicsSvgItem: + "QGraphicsSvgItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSvgItem.boundingRect": (), + "QGraphicsSvgItem.elementId": (), + "QGraphicsSvgItem.isCachingEnabled": (), + "QGraphicsSvgItem.maximumCacheSize": (), + "QGraphicsSvgItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSvgItem.renderer": (), + "QGraphicsSvgItem.setCachingEnabled": ('bool',), + "QGraphicsSvgItem.setElementId": ('str',), + "QGraphicsSvgItem.setMaximumCacheSize": ('PySide2.QtCore.QSize',), + "QGraphicsSvgItem.setSharedRenderer": ('PySide2.QtSvg.QSvgRenderer',), + "QGraphicsSvgItem.type": (), + + # class PySide2.QtSvg.QSvgGenerator: + "QSvgGenerator.__init__": (), + "QSvgGenerator.description": (), + "QSvgGenerator.fileName": (), + "QSvgGenerator.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QSvgGenerator.outputDevice": (), + "QSvgGenerator.paintEngine": (), + "QSvgGenerator.resolution": (), + "QSvgGenerator.setDescription": ('str',), + "QSvgGenerator.setFileName": ('str',), + "QSvgGenerator.setOutputDevice": ('PySide2.QtCore.QIODevice',), + "QSvgGenerator.setResolution": ('int',), + "QSvgGenerator.setSize": ('PySide2.QtCore.QSize',), + "QSvgGenerator.setTitle": ('str',), + "QSvgGenerator.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgGenerator.size": (), + "QSvgGenerator.title": (), + "QSvgGenerator.viewBox": (), + "QSvgGenerator.viewBoxF": (), + + # class PySide2.QtSvg.QSvgRenderer: + "QSvgRenderer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QXmlStreamReader', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QSvgRenderer.animated": (), + "QSvgRenderer.animationDuration": (), + "QSvgRenderer.boundsOnElement": ('str',), + "QSvgRenderer.currentFrame": (), + "QSvgRenderer.defaultSize": (), + "QSvgRenderer.elementExists": ('str',), + "QSvgRenderer.framesPerSecond": (), + "QSvgRenderer.isValid": (), + "QSvgRenderer.load": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QXmlStreamReader',), ('str',)], + "QSvgRenderer.matrixForElement": ('str',), + "QSvgRenderer.render": [('PySide2.QtGui.QPainter',), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), ('PySide2.QtGui.QPainter', 'str', 'PySide2.QtCore.QRectF')], + "QSvgRenderer.setCurrentFrame": ('int',), + "QSvgRenderer.setFramesPerSecond": ('int',), + "QSvgRenderer.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgRenderer.viewBox": (), + "QSvgRenderer.viewBoxF": (), + + # class PySide2.QtSvg.QSvgWidget: + "QSvgWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QSvgWidget.load": [('PySide2.QtCore.QByteArray',), ('str',)], + "QSvgWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSvgWidget.renderer": (), + "QSvgWidget.sizeHint": (), + }) + +# Module PySide2.QtDataVisualization +if "PySide2.QtDataVisualization" in sys.modules: + dict.update({ + + # class PySide2.QtDataVisualization.QtDataVisualization: + "QtDataVisualization.qDefaultSurfaceFormat": ('bool',), + }) + +# Module PySide2.QtUiTools +if "PySide2.QtUiTools" in sys.modules: + dict.update({ + + # class PySide2.QtUiTools.QUiLoader: + "QUiLoader.__init__": ('PySide2.QtCore.QObject',), + "QUiLoader.addPluginPath": ('str',), + "QUiLoader.availableLayouts": (), + "QUiLoader.availableWidgets": (), + "QUiLoader.clearPluginPaths": (), + "QUiLoader.createAction": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createActionGroup": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createLayout": ('str', 'PySide2.QtCore.QObject', 'str'), + "QUiLoader.createWidget": ('str', 'PySide2.QtWidgets.QWidget', 'str'), + "QUiLoader.errorString": (), + "QUiLoader.isLanguageChangeEnabled": (), + "QUiLoader.isTranslationEnabled": (), + "QUiLoader.load": [('PySide2.QtCore.QIODevice', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QWidget')], + "QUiLoader.pluginPaths": (), + "QUiLoader.registerCustomWidget": ('object',), + "QUiLoader.setLanguageChangeEnabled": ('bool',), + "QUiLoader.setTranslationEnabled": ('bool',), + "QUiLoader.setWorkingDirectory": ('PySide2.QtCore.QDir',), + "QUiLoader.workingDirectory": (), + }) + +# Module PySide2.QtWebChannel +if "PySide2.QtWebChannel" in sys.modules: + dict.update({ + + # class PySide2.QtWebChannel.QWebChannel: + "QWebChannel.__init__": ('PySide2.QtCore.QObject',), + "QWebChannel.blockUpdates": (), + "QWebChannel.connectTo": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.deregisterObject": ('PySide2.QtCore.QObject',), + "QWebChannel.disconnectFrom": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.registerObject": ('str', 'PySide2.QtCore.QObject'), + "QWebChannel.registerObjects": ('dict',), + "QWebChannel.registeredObjects": (), + "QWebChannel.setBlockUpdates": ('bool',), + + # class PySide2.QtWebChannel.QWebChannelAbstractTransport: + "QWebChannelAbstractTransport.__init__": ('PySide2.QtCore.QObject',), + "QWebChannelAbstractTransport.sendMessage": ('dict',), + }) + +# Module PySide2.QtWebEngineWidgets +if "PySide2.QtWebEngineWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWebEngineWidgets.QWebEngineCertificateError: + "QWebEngineCertificateError.__init__": ('int', 'PySide2.QtCore.QUrl', 'bool', 'str'), + "QWebEngineCertificateError.error": (), + "QWebEngineCertificateError.errorDescription": (), + "QWebEngineCertificateError.isOverridable": (), + "QWebEngineCertificateError.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineDownloadItem: + "QWebEngineDownloadItem.accept": (), + "QWebEngineDownloadItem.cancel": (), + "QWebEngineDownloadItem.id": (), + "QWebEngineDownloadItem.interruptReasonString": (), + "QWebEngineDownloadItem.isFinished": (), + "QWebEngineDownloadItem.mimeType": (), + "QWebEngineDownloadItem.path": (), + "QWebEngineDownloadItem.receivedBytes": (), + "QWebEngineDownloadItem.setPath": ('str',), + "QWebEngineDownloadItem.state": (), + "QWebEngineDownloadItem.totalBytes": (), + "QWebEngineDownloadItem.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineHistoryItem: + "QWebEngineHistoryItem.__init__": ('PySide2.QtWebEngineWidgets.QWebEngineHistoryItem',), + "QWebEngineHistoryItem.iconUrl": (), + "QWebEngineHistoryItem.isValid": (), + "QWebEngineHistoryItem.lastVisited": (), + "QWebEngineHistoryItem.originalUrl": (), + "QWebEngineHistoryItem.swap": ('PySide2.QtWebEngineWidgets.QWebEngineHistoryItem',), + "QWebEngineHistoryItem.title": (), + "QWebEngineHistoryItem.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEnginePage: + "QWebEnginePage.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtWebEngineWidgets.QWebEngineProfile', 'PySide2.QtCore.QObject')], + "QWebEnginePage.acceptNavigationRequest": ('PySide2.QtCore.QUrl', 'PySide2.QtWebEngineWidgets.QWebEnginePage.NavigationType', 'bool'), + "QWebEnginePage.action": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction',), + "QWebEnginePage.backgroundColor": (), + "QWebEnginePage.certificateError": ('PySide2.QtWebEngineWidgets.QWebEngineCertificateError',), + "QWebEnginePage.chooseFiles": ('PySide2.QtWebEngineWidgets.QWebEnginePage.FileSelectionMode', 'List[str]', 'List[str]'), + "QWebEnginePage.contentsSize": (), + "QWebEnginePage.createStandardContextMenu": (), + "QWebEnginePage.createWindow": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebWindowType',), + "QWebEnginePage.event": ('PySide2.QtCore.QEvent',), + "QWebEnginePage.hasSelection": (), + "QWebEnginePage.icon": (), + "QWebEnginePage.iconUrl": (), + "QWebEnginePage.isAudioMuted": (), + "QWebEnginePage.javaScriptAlert": ('PySide2.QtCore.QUrl', 'str'), + "QWebEnginePage.javaScriptConfirm": ('PySide2.QtCore.QUrl', 'str'), + "QWebEnginePage.javaScriptConsoleMessage": ('PySide2.QtWebEngineWidgets.QWebEnginePage.JavaScriptConsoleMessageLevel', 'str', 'int', 'str'), + "QWebEnginePage.javaScriptPrompt": ('PySide2.QtCore.QUrl', 'str', 'str', 'str'), + "QWebEnginePage.load": ('PySide2.QtCore.QUrl',), + "QWebEnginePage.printToPdf": ('str', 'PySide2.QtGui.QPageLayout'), + "QWebEnginePage.profile": (), + "QWebEnginePage.recentlyAudible": (), + "QWebEnginePage.replaceMisspelledWord": ('str',), + "QWebEnginePage.requestedUrl": (), + "QWebEnginePage.runJavaScript": [('str',), ('str', 'int')], + "QWebEnginePage.scrollPosition": (), + "QWebEnginePage.selectedText": (), + "QWebEnginePage.setAudioMuted": ('bool',), + "QWebEnginePage.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QWebEnginePage.setContent": ('PySide2.QtCore.QByteArray', 'str', 'PySide2.QtCore.QUrl'), + "QWebEnginePage.setFeaturePermission": ('PySide2.QtCore.QUrl', 'PySide2.QtWebEngineWidgets.QWebEnginePage.Feature', 'PySide2.QtWebEngineWidgets.QWebEnginePage.PermissionPolicy'), + "QWebEnginePage.setHtml": ('str', 'PySide2.QtCore.QUrl'), + "QWebEnginePage.setUrl": ('PySide2.QtCore.QUrl',), + "QWebEnginePage.setView": ('PySide2.QtWidgets.QWidget',), + "QWebEnginePage.setWebChannel": [('PySide2.QtWebChannel.QWebChannel',), ('PySide2.QtWebChannel.QWebChannel', 'int')], + "QWebEnginePage.setZoomFactor": ('float',), + "QWebEnginePage.title": (), + "QWebEnginePage.triggerAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction', 'bool'), + "QWebEnginePage.url": (), + "QWebEnginePage.view": (), + "QWebEnginePage.webChannel": (), + "QWebEnginePage.zoomFactor": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineProfile: + "QWebEngineProfile.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QWebEngineProfile.cachePath": (), + "QWebEngineProfile.clearAllVisitedLinks": (), + "QWebEngineProfile.clearHttpCache": (), + "QWebEngineProfile.clearVisitedLinks": ('list',), + "QWebEngineProfile.defaultProfile": (), + "QWebEngineProfile.httpAcceptLanguage": (), + "QWebEngineProfile.httpCacheMaximumSize": (), + "QWebEngineProfile.httpCacheType": (), + "QWebEngineProfile.httpUserAgent": (), + "QWebEngineProfile.isOffTheRecord": (), + "QWebEngineProfile.isSpellCheckEnabled": (), + "QWebEngineProfile.persistentCookiesPolicy": (), + "QWebEngineProfile.persistentStoragePath": (), + "QWebEngineProfile.removeAllUrlSchemeHandlers": (), + "QWebEngineProfile.removeUrlScheme": ('PySide2.QtCore.QByteArray',), + "QWebEngineProfile.setCachePath": ('str',), + "QWebEngineProfile.setHttpAcceptLanguage": ('str',), + "QWebEngineProfile.setHttpCacheMaximumSize": ('int',), + "QWebEngineProfile.setHttpCacheType": ('PySide2.QtWebEngineWidgets.QWebEngineProfile.HttpCacheType',), + "QWebEngineProfile.setHttpUserAgent": ('str',), + "QWebEngineProfile.setPersistentCookiesPolicy": ('PySide2.QtWebEngineWidgets.QWebEngineProfile.PersistentCookiesPolicy',), + "QWebEngineProfile.setPersistentStoragePath": ('str',), + "QWebEngineProfile.setSpellCheckEnabled": ('bool',), + "QWebEngineProfile.setSpellCheckLanguages": ('List[str]',), + "QWebEngineProfile.spellCheckLanguages": (), + "QWebEngineProfile.storageName": (), + "QWebEngineProfile.visitedLinksContainsUrl": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtWebEngineWidgets.QWebEngineScript: + "QWebEngineScript.__init__": [(), ('PySide2.QtWebEngineWidgets.QWebEngineScript',)], + "QWebEngineScript.__copy__": (), + "QWebEngineScript.injectionPoint": (), + "QWebEngineScript.isNull": (), + "QWebEngineScript.name": (), + "QWebEngineScript.runsOnSubFrames": (), + "QWebEngineScript.setInjectionPoint": ('PySide2.QtWebEngineWidgets.QWebEngineScript.InjectionPoint',), + "QWebEngineScript.setName": ('str',), + "QWebEngineScript.setRunsOnSubFrames": ('bool',), + "QWebEngineScript.setSourceCode": ('str',), + "QWebEngineScript.setWorldId": ('int',), + "QWebEngineScript.sourceCode": (), + "QWebEngineScript.swap": ('PySide2.QtWebEngineWidgets.QWebEngineScript',), + "QWebEngineScript.worldId": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineView: + "QWebEngineView.__init__": ('PySide2.QtWidgets.QWidget',), + "QWebEngineView.back": (), + "QWebEngineView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWebEngineView.createWindow": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebWindowType',), + "QWebEngineView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWebEngineView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWebEngineView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWebEngineView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWebEngineView.event": ('PySide2.QtCore.QEvent',), + "QWebEngineView.forward": (), + "QWebEngineView.hasSelection": (), + "QWebEngineView.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWebEngineView.icon": (), + "QWebEngineView.iconUrl": (), + "QWebEngineView.load": ('PySide2.QtCore.QUrl',), + "QWebEngineView.page": (), + "QWebEngineView.pageAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction',), + "QWebEngineView.reload": (), + "QWebEngineView.selectedText": (), + "QWebEngineView.setContent": ('PySide2.QtCore.QByteArray', 'str', 'PySide2.QtCore.QUrl'), + "QWebEngineView.setHtml": ('str', 'PySide2.QtCore.QUrl'), + "QWebEngineView.setPage": ('PySide2.QtWebEngineWidgets.QWebEnginePage',), + "QWebEngineView.setUrl": ('PySide2.QtCore.QUrl',), + "QWebEngineView.setZoomFactor": ('float',), + "QWebEngineView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWebEngineView.sizeHint": (), + "QWebEngineView.stop": (), + "QWebEngineView.title": (), + "QWebEngineView.triggerPageAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction', 'bool'), + "QWebEngineView.url": (), + "QWebEngineView.zoomFactor": (), + }) + +# Module PySide2.QtWebSockets +if "PySide2.QtWebSockets" in sys.modules: + dict.update({ + + # class PySide2.QtWebSockets.QMaskGenerator: + "QMaskGenerator.__init__": ('PySide2.QtCore.QObject',), + "QMaskGenerator.nextMask": (), + "QMaskGenerator.seed": (), + + # class PySide2.QtWebSockets.QWebSocket: + "QWebSocket.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketProtocol.Version', 'PySide2.QtCore.QObject'), + "QWebSocket.abort": (), + "QWebSocket.close": ('PySide2.QtWebSockets.QWebSocketProtocol.CloseCode', 'str'), + "QWebSocket.closeCode": (), + "QWebSocket.closeReason": (), + "QWebSocket.errorString": (), + "QWebSocket.flush": (), + "QWebSocket.isValid": (), + "QWebSocket.localAddress": (), + "QWebSocket.localPort": (), + "QWebSocket.maskGenerator": (), + "QWebSocket.open": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QWebSocket.origin": (), + "QWebSocket.pauseMode": (), + "QWebSocket.peerAddress": (), + "QWebSocket.peerName": (), + "QWebSocket.peerPort": (), + "QWebSocket.ping": ('PySide2.QtCore.QByteArray',), + "QWebSocket.proxy": (), + "QWebSocket.readBufferSize": (), + "QWebSocket.request": (), + "QWebSocket.requestUrl": (), + "QWebSocket.resourceName": (), + "QWebSocket.resume": (), + "QWebSocket.sendBinaryMessage": ('PySide2.QtCore.QByteArray',), + "QWebSocket.sendTextMessage": ('str',), + "QWebSocket.setMaskGenerator": ('PySide2.QtWebSockets.QMaskGenerator',), + "QWebSocket.setPauseMode": ('PauseModes',), + "QWebSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocket.setReadBufferSize": ('int',), + "QWebSocket.state": (), + "QWebSocket.version": (), + + # class PySide2.QtWebSockets.QWebSocketCorsAuthenticator: + "QWebSocketCorsAuthenticator.__init__": [('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), ('str',)], + "QWebSocketCorsAuthenticator.allowed": (), + "QWebSocketCorsAuthenticator.origin": (), + "QWebSocketCorsAuthenticator.setAllowed": ('bool',), + "QWebSocketCorsAuthenticator.swap": ('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), + + # class PySide2.QtWebSockets.QWebSocketProtocol: + + # class PySide2.QtWebSockets.QWebSocketServer: + "QWebSocketServer.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketServer.SslMode', 'PySide2.QtCore.QObject'), + "QWebSocketServer.close": (), + "QWebSocketServer.error": (), + "QWebSocketServer.errorString": (), + "QWebSocketServer.handleConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QWebSocketServer.hasPendingConnections": (), + "QWebSocketServer.isListening": (), + "QWebSocketServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QWebSocketServer.maxPendingConnections": (), + "QWebSocketServer.nextPendingConnection": (), + "QWebSocketServer.pauseAccepting": (), + "QWebSocketServer.proxy": (), + "QWebSocketServer.resumeAccepting": (), + "QWebSocketServer.secureMode": (), + "QWebSocketServer.serverAddress": (), + "QWebSocketServer.serverName": (), + "QWebSocketServer.serverPort": (), + "QWebSocketServer.serverUrl": (), + "QWebSocketServer.setMaxPendingConnections": ('int',), + "QWebSocketServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocketServer.setServerName": ('str',), + "QWebSocketServer.setSocketDescriptor": ('int',), + "QWebSocketServer.socketDescriptor": (), + "QWebSocketServer.supportedVersions": (), + }) +# eof diff --git a/sources/pyside2/tests/registry/exists_win32_5_11_1_ci.py b/sources/pyside2/tests/registry/exists_win32_5_11_1_ci.py new file mode 100644 index 0000000..38e06a3 --- /dev/null +++ b/sources/pyside2/tests/registry/exists_win32_5_11_1_ci.py @@ -0,0 +1,18619 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" +This file contains the simplified signatures for all functions in PySide +for module 'exists_win32_5_11_1_ci'. There are no default values, no variable +names and no self parameter. Only types are present after simplification. +The functions 'next' resp. '__next__' are removed +to make the output identical for Python 2 and 3. +""" + +import sys + +dict = {} + +# Module PySide2.QtCore +if "PySide2.QtCore" in sys.modules: + dict.update({ + + # class PySide2.QtCore.ClassInfo: + + # class PySide2.QtCore.MetaFunction: + + # class PySide2.QtCore.Property: + + # class PySide2.QtCore.QAbstractAnimation: + "QAbstractAnimation.__init__": ('PySide2.QtCore.QObject',), + "QAbstractAnimation.currentLoop": (), + "QAbstractAnimation.currentLoopTime": (), + "QAbstractAnimation.currentTime": (), + "QAbstractAnimation.direction": (), + "QAbstractAnimation.duration": (), + "QAbstractAnimation.event": ('PySide2.QtCore.QEvent',), + "QAbstractAnimation.group": (), + "QAbstractAnimation.loopCount": (), + "QAbstractAnimation.pause": (), + "QAbstractAnimation.resume": (), + "QAbstractAnimation.setCurrentTime": ('int',), + "QAbstractAnimation.setDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.setLoopCount": ('int',), + "QAbstractAnimation.setPaused": ('bool',), + "QAbstractAnimation.start": ('PySide2.QtCore.QAbstractAnimation.DeletionPolicy',), + "QAbstractAnimation.state": (), + "QAbstractAnimation.stop": (), + "QAbstractAnimation.totalDuration": (), + "QAbstractAnimation.updateCurrentTime": ('int',), + "QAbstractAnimation.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QAbstractEventDispatcher: + "QAbstractEventDispatcher.__init__": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.closingDown": (), + "QAbstractEventDispatcher.flush": (), + "QAbstractEventDispatcher.hasPendingEvents": (), + "QAbstractEventDispatcher.instance": ('PySide2.QtCore.QThread',), + "QAbstractEventDispatcher.interrupt": (), + "QAbstractEventDispatcher.processEvents": ('PySide2.libpyside.ProcessEventsFlags',), + "QAbstractEventDispatcher.registerEventNotifier": ('PySide2.QtCore.QWinEventNotifier',), + "QAbstractEventDispatcher.registerSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.registerTimer": [('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject'), ('int', 'int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QAbstractEventDispatcher.registeredTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.remainingTime": ('int',), + "QAbstractEventDispatcher.startingUp": (), + "QAbstractEventDispatcher.unregisterEventNotifier": ('PySide2.QtCore.QWinEventNotifier',), + "QAbstractEventDispatcher.unregisterSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.unregisterTimer": ('int',), + "QAbstractEventDispatcher.unregisterTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.wakeUp": (), + + # class PySide2.QtCore.QAbstractItemModel: + "QAbstractItemModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginMoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginMoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginResetModel": (), + "QAbstractItemModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.changePersistentIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.changePersistentIndexList": ('List[int]', 'List[int]'), + "QAbstractItemModel.checkIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.libpyside.CheckIndexOptions'), + "QAbstractItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object')], + "QAbstractItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.decodeData": ('int', 'int', 'PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.encodeData": ('List[int]', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.endInsertColumns": (), + "QAbstractItemModel.endInsertRows": (), + "QAbstractItemModel.endMoveColumns": (), + "QAbstractItemModel.endMoveRows": (), + "QAbstractItemModel.endRemoveColumns": (), + "QAbstractItemModel.endRemoveRows": (), + "QAbstractItemModel.endResetModel": (), + "QAbstractItemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasIndex": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'PySide2.libpyside.MatchFlags'), + "QAbstractItemModel.mimeData": ('List[int]',), + "QAbstractItemModel.mimeTypes": (), + "QAbstractItemModel.moveColumn": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRow": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemModel.persistentIndexList": (), + "QAbstractItemModel.removeColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.resetInternalData": (), + "QAbstractItemModel.revert": (), + "QAbstractItemModel.roleNames": (), + "QAbstractItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QAbstractItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QAbstractItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractItemModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.submit": (), + "QAbstractItemModel.supportedDragActions": (), + "QAbstractItemModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractListModel: + "QAbstractListModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractListModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractProxyModel: + "QAbstractProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractProxyModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mimeData": ('List[int]',), + "QAbstractProxyModel.mimeTypes": (), + "QAbstractProxyModel.resetInternalData": (), + "QAbstractProxyModel.revert": (), + "QAbstractProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QAbstractProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QAbstractProxyModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractProxyModel.sourceModel": (), + "QAbstractProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.submit": (), + "QAbstractProxyModel.supportedDragActions": (), + "QAbstractProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractState: + "QAbstractState.__init__": ('PySide2.QtCore.QState',), + "QAbstractState.active": (), + "QAbstractState.event": ('PySide2.QtCore.QEvent',), + "QAbstractState.machine": (), + "QAbstractState.onEntry": ('PySide2.QtCore.QEvent',), + "QAbstractState.onExit": ('PySide2.QtCore.QEvent',), + "QAbstractState.parentState": (), + + # class PySide2.QtCore.QAbstractTableModel: + "QAbstractTableModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractTableModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractTableModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractTransition: + "QAbstractTransition.__init__": ('PySide2.QtCore.QState',), + "QAbstractTransition.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.animations": (), + "QAbstractTransition.event": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.machine": (), + "QAbstractTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.setTargetState": ('PySide2.QtCore.QAbstractState',), + "QAbstractTransition.setTargetStates": ('list',), + "QAbstractTransition.setTransitionType": ('PySide2.QtCore.QAbstractTransition.TransitionType',), + "QAbstractTransition.sourceState": (), + "QAbstractTransition.targetState": (), + "QAbstractTransition.targetStates": (), + "QAbstractTransition.transitionType": (), + + # class PySide2.QtCore.QAnimationGroup: + "QAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QAnimationGroup.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.animationAt": ('int',), + "QAnimationGroup.animationCount": (), + "QAnimationGroup.clear": (), + "QAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QAnimationGroup.indexOfAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.insertAnimation": ('int', 'PySide2.QtCore.QAbstractAnimation'), + "QAnimationGroup.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.takeAnimation": ('int',), + + # class PySide2.QtCore.QBasicMutex: + "QBasicMutex.__init__": (), + "QBasicMutex.isRecursive": (), + "QBasicMutex.lock": (), + "QBasicMutex.tryLock": (), + "QBasicMutex.try_lock": (), + "QBasicMutex.unlock": (), + + # class PySide2.QtCore.QBasicTimer: + "QBasicTimer.__init__": [(), ('PySide2.QtCore.QBasicTimer',)], + "QBasicTimer.__copy__": (), + "QBasicTimer.isActive": (), + "QBasicTimer.start": [('int', 'PySide2.QtCore.QObject'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QBasicTimer.stop": (), + "QBasicTimer.timerId": (), + + # class PySide2.QtCore.QBitArray: + "QBitArray.__init__": [(), ('PySide2.QtCore.QBitArray',), ('int', 'bool')], + "QBitArray.__copy__": (), + "QBitArray.at": ('int',), + "QBitArray.bits": (), + "QBitArray.clear": (), + "QBitArray.clearBit": ('int',), + "QBitArray.count": [(), ('bool',)], + "QBitArray.fill": [('bool', 'int'), ('bool', 'int', 'int')], + "QBitArray.isEmpty": (), + "QBitArray.isNull": (), + "QBitArray.resize": ('int',), + "QBitArray.setBit": [('int',), ('int', 'bool')], + "QBitArray.size": (), + "QBitArray.swap": ('PySide2.QtCore.QBitArray',), + "QBitArray.testBit": ('int',), + "QBitArray.toggleBit": ('int',), + "QBitArray.truncate": ('int',), + + # class PySide2.QtCore.QBuffer: + "QBuffer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QBuffer.atEnd": (), + "QBuffer.buffer": (), + "QBuffer.canReadLine": (), + "QBuffer.close": (), + "QBuffer.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.data": (), + "QBuffer.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.open": ('PySide2.libpyside.OpenMode',), + "QBuffer.pos": (), + "QBuffer.readData": ('str', 'int'), + "QBuffer.seek": ('int',), + "QBuffer.setBuffer": ('PySide2.QtCore.QByteArray',), + "QBuffer.setData": ('PySide2.QtCore.QByteArray',), + "QBuffer.size": (), + "QBuffer.writeData": ('str', 'int'), + + # class PySide2.QtCore.QByteArray: + "QByteArray.__init__": [(), ('PySide2.QtCore.QByteArray',), ('bytearray',), ('bytes',), ('int', 'Union[str, int]')], + "QByteArray.__copy__": (), + "QByteArray.__reduce__": (), + "QByteArray.append": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',), ('int', 'Union[str, int]')], + "QByteArray.at": ('int',), + "QByteArray.back": (), + "QByteArray.capacity": (), + "QByteArray.cbegin": (), + "QByteArray.cend": (), + "QByteArray.chop": ('int',), + "QByteArray.chopped": ('int',), + "QByteArray.clear": (), + "QByteArray.contains": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.count": [(), ('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.data": (), + "QByteArray.endsWith": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.fill": ('Union[str, int]', 'int'), + "QByteArray.fromBase64": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.libpyside.Base64Options')], + "QByteArray.fromHex": ('PySide2.QtCore.QByteArray',), + "QByteArray.fromPercentEncoding": ('PySide2.QtCore.QByteArray', 'Union[str, int]'), + "QByteArray.fromRawData": ('str', 'int'), + "QByteArray.front": (), + "QByteArray.indexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.insert": [('int', 'PySide2.QtCore.QByteArray'), ('int', 'int', 'Union[str, int]')], + "QByteArray.isEmpty": (), + "QByteArray.isNull": (), + "QByteArray.isSharedWith": ('PySide2.QtCore.QByteArray',), + "QByteArray.lastIndexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.left": ('int',), + "QByteArray.leftJustified": ('int', 'Union[str, int]', 'bool'), + "QByteArray.length": (), + "QByteArray.mid": ('int', 'int'), + "QByteArray.number": [('float', 'Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.prepend": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',), ('int', 'Union[str, int]')], + "QByteArray.remove": ('int', 'int'), + "QByteArray.repeated": ('int',), + "QByteArray.replace": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('Union[str, int]', 'PySide2.QtCore.QByteArray'), ('Union[str, int]', 'Union[str, int]'), ('int', 'int', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QByteArray.reserve": ('int',), + "QByteArray.resize": ('int',), + "QByteArray.right": ('int',), + "QByteArray.rightJustified": ('int', 'Union[str, int]', 'bool'), + "QByteArray.setNum": [('float', 'Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.setRawData": ('str', 'int'), + "QByteArray.shrink_to_fit": (), + "QByteArray.simplified": (), + "QByteArray.size": (), + "QByteArray.split": ('Union[str, int]',), + "QByteArray.squeeze": (), + "QByteArray.startsWith": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.swap": ('PySide2.QtCore.QByteArray',), + "QByteArray.toBase64": [(), ('PySide2.libpyside.Base64Options',)], + "QByteArray.toDouble": ('bool',), + "QByteArray.toFloat": ('bool',), + "QByteArray.toHex": [(), ('Union[str, int]',)], + "QByteArray.toInt": ('bool', 'int'), + "QByteArray.toLong": ('bool', 'int'), + "QByteArray.toLongLong": ('bool', 'int'), + "QByteArray.toLower": (), + "QByteArray.toPercentEncoding": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'Union[str, int]'), + "QByteArray.toShort": ('bool', 'int'), + "QByteArray.toUInt": ('bool', 'int'), + "QByteArray.toULong": ('bool', 'int'), + "QByteArray.toULongLong": ('bool', 'int'), + "QByteArray.toUShort": ('bool', 'int'), + "QByteArray.toUpper": (), + "QByteArray.trimmed": (), + "QByteArray.truncate": ('int',), + + # class PySide2.QtCore.QByteArrayMatcher: + "QByteArrayMatcher.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArrayMatcher',), ('str', 'int')], + "QByteArrayMatcher.__copy__": (), + "QByteArrayMatcher.indexIn": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int', 'int')], + "QByteArrayMatcher.pattern": (), + "QByteArrayMatcher.setPattern": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QChildEvent: + "QChildEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QObject'), + "QChildEvent.added": (), + "QChildEvent.child": (), + "QChildEvent.polished": (), + "QChildEvent.removed": (), + + # class PySide2.QtCore.QCollator: + "QCollator.__init__": [('PySide2.QtCore.QCollator',), ('PySide2.QtCore.QLocale',)], + "QCollator.caseSensitivity": (), + "QCollator.compare": [('Union[str, int]', 'int', 'Union[str, int]', 'int'), ('str', 'str')], + "QCollator.ignorePunctuation": (), + "QCollator.locale": (), + "QCollator.numericMode": (), + "QCollator.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCollator.setIgnorePunctuation": ('bool',), + "QCollator.setLocale": ('PySide2.QtCore.QLocale',), + "QCollator.setNumericMode": ('bool',), + "QCollator.sortKey": ('str',), + "QCollator.swap": ('PySide2.QtCore.QCollator',), + + # class PySide2.QtCore.QCollatorSortKey: + "QCollatorSortKey.__init__": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.compare": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.swap": ('PySide2.QtCore.QCollatorSortKey',), + + # class PySide2.QtCore.QCommandLineOption: + "QCommandLineOption.__init__": [('List[str]',), ('List[str]', 'str', 'str', 'str'), ('PySide2.QtCore.QCommandLineOption',), ('str',), ('str', 'str', 'str', 'str')], + "QCommandLineOption.defaultValues": (), + "QCommandLineOption.description": (), + "QCommandLineOption.flags": (), + "QCommandLineOption.isHidden": (), + "QCommandLineOption.names": (), + "QCommandLineOption.setDefaultValue": ('str',), + "QCommandLineOption.setDefaultValues": ('List[str]',), + "QCommandLineOption.setDescription": ('str',), + "QCommandLineOption.setFlags": ('PySide2.libpyside.Flags',), + "QCommandLineOption.setHidden": ('bool',), + "QCommandLineOption.setValueName": ('str',), + "QCommandLineOption.swap": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineOption.valueName": (), + + # class PySide2.QtCore.QCommandLineParser: + "QCommandLineParser.__init__": (), + "QCommandLineParser.addHelpOption": (), + "QCommandLineParser.addOption": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineParser.addOptions": ('list',), + "QCommandLineParser.addPositionalArgument": ('str', 'str', 'str'), + "QCommandLineParser.addVersionOption": (), + "QCommandLineParser.applicationDescription": (), + "QCommandLineParser.clearPositionalArguments": (), + "QCommandLineParser.errorText": (), + "QCommandLineParser.helpText": (), + "QCommandLineParser.isSet": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.optionNames": (), + "QCommandLineParser.parse": ('List[str]',), + "QCommandLineParser.positionalArguments": (), + "QCommandLineParser.process": [('List[str]',), ('PySide2.QtCore.QCoreApplication',)], + "QCommandLineParser.setApplicationDescription": ('str',), + "QCommandLineParser.setOptionsAfterPositionalArgumentsMode": ('PySide2.QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode',), + "QCommandLineParser.setSingleDashWordOptionMode": ('PySide2.QtCore.QCommandLineParser.SingleDashWordOptionMode',), + "QCommandLineParser.showHelp": ('int',), + "QCommandLineParser.showVersion": (), + "QCommandLineParser.unknownOptionNames": (), + "QCommandLineParser.value": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.values": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + + # class PySide2.QtCore.QCoreApplication: + "QCoreApplication.__init__": [(), ('List[str]',)], + "QCoreApplication.addLibraryPath": ('str',), + "QCoreApplication.applicationDirPath": (), + "QCoreApplication.applicationFilePath": (), + "QCoreApplication.applicationName": (), + "QCoreApplication.applicationPid": (), + "QCoreApplication.applicationVersion": (), + "QCoreApplication.arguments": (), + "QCoreApplication.closingDown": (), + "QCoreApplication.event": ('PySide2.QtCore.QEvent',), + "QCoreApplication.eventDispatcher": (), + "QCoreApplication.exec_": (), + "QCoreApplication.exit": ('int',), + "QCoreApplication.flush": (), + "QCoreApplication.hasPendingEvents": (), + "QCoreApplication.installTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.instance": (), + "QCoreApplication.isQuitLockEnabled": (), + "QCoreApplication.isSetuidAllowed": (), + "QCoreApplication.libraryPaths": (), + "QCoreApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.organizationDomain": (), + "QCoreApplication.organizationName": (), + "QCoreApplication.postEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent', 'int'), + "QCoreApplication.processEvents": [('PySide2.libpyside.ProcessEventsFlags',), ('PySide2.libpyside.ProcessEventsFlags', 'int')], + "QCoreApplication.quit": (), + "QCoreApplication.removeLibraryPath": ('str',), + "QCoreApplication.removePostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.removeTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.sendEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.sendPostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.setApplicationName": ('str',), + "QCoreApplication.setApplicationVersion": ('str',), + "QCoreApplication.setAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute', 'bool'), + "QCoreApplication.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QCoreApplication.setLibraryPaths": ('List[str]',), + "QCoreApplication.setOrganizationDomain": ('str',), + "QCoreApplication.setOrganizationName": ('str',), + "QCoreApplication.setQuitLockEnabled": ('bool',), + "QCoreApplication.setSetuidAllowed": ('bool',), + "QCoreApplication.startingUp": (), + "QCoreApplication.testAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute',), + "QCoreApplication.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QCryptographicHash: + "QCryptographicHash.__init__": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QCryptographicHash.addData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str', 'int')], + "QCryptographicHash.hash": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QCryptographicHash.Algorithm'), + "QCryptographicHash.reset": (), + "QCryptographicHash.result": (), + + # class PySide2.QtCore.QDataStream: + "QDataStream.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.libpyside.OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QDataStream.abortTransaction": (), + "QDataStream.atEnd": (), + "QDataStream.byteOrder": (), + "QDataStream.commitTransaction": (), + "QDataStream.device": (), + "QDataStream.floatingPointPrecision": (), + "QDataStream.readBool": (), + "QDataStream.readDouble": (), + "QDataStream.readFloat": (), + "QDataStream.readInt16": (), + "QDataStream.readInt32": (), + "QDataStream.readInt64": (), + "QDataStream.readInt8": (), + "QDataStream.readQChar": (), + "QDataStream.readQString": (), + "QDataStream.readQStringList": (), + "QDataStream.readQVariant": (), + "QDataStream.readRawData": ('str', 'int'), + "QDataStream.readString": (), + "QDataStream.readUInt16": (), + "QDataStream.readUInt32": (), + "QDataStream.readUInt64": (), + "QDataStream.readUInt8": (), + "QDataStream.resetStatus": (), + "QDataStream.rollbackTransaction": (), + "QDataStream.setByteOrder": ('PySide2.QtCore.QDataStream.ByteOrder',), + "QDataStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QDataStream.setFloatingPointPrecision": ('PySide2.QtCore.QDataStream.FloatingPointPrecision',), + "QDataStream.setStatus": ('PySide2.QtCore.QDataStream.Status',), + "QDataStream.setVersion": ('int',), + "QDataStream.skipRawData": ('int',), + "QDataStream.startTransaction": (), + "QDataStream.status": (), + "QDataStream.unsetDevice": (), + "QDataStream.version": (), + "QDataStream.writeBool": ('bool',), + "QDataStream.writeDouble": ('float',), + "QDataStream.writeFloat": ('float',), + "QDataStream.writeInt16": ('int',), + "QDataStream.writeInt32": ('int',), + "QDataStream.writeInt64": ('int',), + "QDataStream.writeInt8": ('Union[str, int]',), + "QDataStream.writeQChar": ('Union[str, int]',), + "QDataStream.writeQString": ('str',), + "QDataStream.writeQStringList": ('List[str]',), + "QDataStream.writeQVariant": ('Any',), + "QDataStream.writeRawData": ('str', 'int'), + "QDataStream.writeString": ('str',), + "QDataStream.writeUInt16": ('int',), + "QDataStream.writeUInt32": ('int',), + "QDataStream.writeUInt64": ('int',), + "QDataStream.writeUInt8": ('Union[str, int]',), + + # class PySide2.QtCore.QDate: + "QDate.__init__": [(), ('PySide2.QtCore.QDate',), ('int', 'int', 'int')], + "QDate.__copy__": (), + "QDate.__reduce__": (), + "QDate.addDays": ('int',), + "QDate.addMonths": ('int',), + "QDate.addYears": ('int',), + "QDate.currentDate": (), + "QDate.day": (), + "QDate.dayOfWeek": (), + "QDate.dayOfYear": (), + "QDate.daysInMonth": (), + "QDate.daysInYear": (), + "QDate.daysTo": ('PySide2.QtCore.QDate',), + "QDate.fromJulianDay": ('int',), + "QDate.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDate.getDate": ('int', 'int', 'int'), + "QDate.isLeapYear": ('int',), + "QDate.isNull": (), + "QDate.isValid": [(), ('int', 'int', 'int')], + "QDate.longDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.longMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.month": (), + "QDate.setDate": ('int', 'int', 'int'), + "QDate.shortDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.shortMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.toJulianDay": (), + "QDate.toPython": (), + "QDate.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDate.weekNumber": ('int',), + "QDate.year": (), + + # class PySide2.QtCore.QDateTime: + "QDateTime.__init__": [(), ('PySide2.QtCore.QDate',), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.QTimeZone'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec', 'int'), ('PySide2.QtCore.QDateTime',), ('int', 'int', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int')], + "QDateTime.__copy__": (), + "QDateTime.__reduce__": (), + "QDateTime.addDays": ('int',), + "QDateTime.addMSecs": ('int',), + "QDateTime.addMonths": ('int',), + "QDateTime.addSecs": ('int',), + "QDateTime.addYears": ('int',), + "QDateTime.currentDateTime": (), + "QDateTime.currentDateTimeUtc": (), + "QDateTime.currentMSecsSinceEpoch": (), + "QDateTime.currentSecsSinceEpoch": (), + "QDateTime.date": (), + "QDateTime.daysTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.fromMSecsSinceEpoch": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromSecsSinceEpoch": [('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDateTime.fromTime_t": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.isDaylightTime": (), + "QDateTime.isNull": (), + "QDateTime.isValid": (), + "QDateTime.msecsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.offsetFromUtc": (), + "QDateTime.secsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.setDate": ('PySide2.QtCore.QDate',), + "QDateTime.setMSecsSinceEpoch": ('int',), + "QDateTime.setOffsetFromUtc": ('int',), + "QDateTime.setSecsSinceEpoch": ('int',), + "QDateTime.setTime": ('PySide2.QtCore.QTime',), + "QDateTime.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.setTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.setTime_t": ('int',), + "QDateTime.setUtcOffset": ('int',), + "QDateTime.swap": ('PySide2.QtCore.QDateTime',), + "QDateTime.time": (), + "QDateTime.timeSpec": (), + "QDateTime.timeZone": (), + "QDateTime.timeZoneAbbreviation": (), + "QDateTime.toLocalTime": (), + "QDateTime.toMSecsSinceEpoch": (), + "QDateTime.toOffsetFromUtc": ('int',), + "QDateTime.toPython": (), + "QDateTime.toSecsSinceEpoch": (), + "QDateTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDateTime.toTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.toTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.toTime_t": (), + "QDateTime.toUTC": (), + "QDateTime.utcOffset": (), + + # class PySide2.QtCore.QDir: + "QDir.__init__": [('PySide2.QtCore.QDir',), ('str',), ('str', 'str', 'PySide2.libpyside.SortFlags', 'PySide2.libpyside.Filters')], + "QDir.__copy__": (), + "QDir.__reduce__": (), + "QDir.absoluteFilePath": ('str',), + "QDir.absolutePath": (), + "QDir.addResourceSearchPath": ('str',), + "QDir.addSearchPath": ('str', 'str'), + "QDir.canonicalPath": (), + "QDir.cd": ('str',), + "QDir.cdUp": (), + "QDir.cleanPath": ('str',), + "QDir.count": (), + "QDir.current": (), + "QDir.currentPath": (), + "QDir.dirName": (), + "QDir.drives": (), + "QDir.entryInfoList": [('List[str]', 'PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags'), ('PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags')], + "QDir.entryList": [('List[str]', 'PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags'), ('PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags')], + "QDir.exists": [(), ('str',)], + "QDir.filePath": ('str',), + "QDir.filter": (), + "QDir.fromNativeSeparators": ('str',), + "QDir.home": (), + "QDir.homePath": (), + "QDir.isAbsolute": (), + "QDir.isAbsolutePath": ('str',), + "QDir.isEmpty": ('PySide2.libpyside.Filters',), + "QDir.isReadable": (), + "QDir.isRelative": (), + "QDir.isRelativePath": ('str',), + "QDir.isRoot": (), + "QDir.listSeparator": (), + "QDir.makeAbsolute": (), + "QDir.match": [('List[str]', 'str'), ('str', 'str')], + "QDir.mkdir": ('str',), + "QDir.mkpath": ('str',), + "QDir.nameFilters": (), + "QDir.nameFiltersFromString": ('str',), + "QDir.path": (), + "QDir.refresh": (), + "QDir.relativeFilePath": ('str',), + "QDir.remove": ('str',), + "QDir.removeRecursively": (), + "QDir.rename": ('str', 'str'), + "QDir.rmdir": ('str',), + "QDir.rmpath": ('str',), + "QDir.root": (), + "QDir.rootPath": (), + "QDir.searchPaths": ('str',), + "QDir.separator": (), + "QDir.setCurrent": ('str',), + "QDir.setFilter": ('PySide2.libpyside.Filters',), + "QDir.setNameFilters": ('List[str]',), + "QDir.setPath": ('str',), + "QDir.setSearchPaths": ('str', 'List[str]'), + "QDir.setSorting": ('PySide2.libpyside.SortFlags',), + "QDir.sorting": (), + "QDir.swap": ('PySide2.QtCore.QDir',), + "QDir.temp": (), + "QDir.tempPath": (), + "QDir.toNativeSeparators": ('str',), + + # class PySide2.QtCore.QDirIterator: + "QDirIterator.__init__": [('PySide2.QtCore.QDir', 'PySide2.libpyside.IteratorFlags'), ('str', 'List[str]', 'PySide2.libpyside.Filters', 'PySide2.libpyside.IteratorFlags'), ('str', 'PySide2.libpyside.Filters', 'PySide2.libpyside.IteratorFlags'), ('str', 'PySide2.libpyside.IteratorFlags')], + "QDirIterator.fileInfo": (), + "QDirIterator.fileName": (), + "QDirIterator.filePath": (), + "QDirIterator.hasNext": (), + "QDirIterator.path": (), + + # class PySide2.QtCore.QDynamicPropertyChangeEvent: + "QDynamicPropertyChangeEvent.__init__": ('PySide2.QtCore.QByteArray',), + "QDynamicPropertyChangeEvent.propertyName": (), + + # class PySide2.QtCore.QEasingCurve: + "QEasingCurve.__init__": [('PySide2.QtCore.QEasingCurve',), ('PySide2.QtCore.QEasingCurve.Type',)], + "QEasingCurve.__copy__": (), + "QEasingCurve.addCubicBezierSegment": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEasingCurve.addTCBSegment": ('PySide2.QtCore.QPointF', 'float', 'float', 'float'), + "QEasingCurve.amplitude": (), + "QEasingCurve.customType": (), + "QEasingCurve.overshoot": (), + "QEasingCurve.period": (), + "QEasingCurve.setAmplitude": ('float',), + "QEasingCurve.setCustomType": ('object',), + "QEasingCurve.setOvershoot": ('float',), + "QEasingCurve.setPeriod": ('float',), + "QEasingCurve.setType": ('PySide2.QtCore.QEasingCurve.Type',), + "QEasingCurve.swap": ('PySide2.QtCore.QEasingCurve',), + "QEasingCurve.toCubicSpline": (), + "QEasingCurve.type": (), + "QEasingCurve.valueForProgress": ('float',), + + # class PySide2.QtCore.QElapsedTimer: + "QElapsedTimer.__init__": [(), ('PySide2.QtCore.QElapsedTimer',)], + "QElapsedTimer.__copy__": (), + "QElapsedTimer.clockType": (), + "QElapsedTimer.elapsed": (), + "QElapsedTimer.hasExpired": ('int',), + "QElapsedTimer.invalidate": (), + "QElapsedTimer.isMonotonic": (), + "QElapsedTimer.isValid": (), + "QElapsedTimer.msecsSinceReference": (), + "QElapsedTimer.msecsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.nsecsElapsed": (), + "QElapsedTimer.restart": (), + "QElapsedTimer.secsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.start": (), + + # class PySide2.QtCore.QEvent: + "QEvent.__init__": [('PySide2.QtCore.QEvent',), ('PySide2.QtCore.QEvent.Type',)], + "QEvent.accept": (), + "QEvent.ignore": (), + "QEvent.isAccepted": (), + "QEvent.registerEventType": ('int',), + "QEvent.setAccepted": ('bool',), + "QEvent.spontaneous": (), + "QEvent.type": (), + + # class PySide2.QtCore.QEventLoop: + "QEventLoop.__init__": ('PySide2.QtCore.QObject',), + "QEventLoop.event": ('PySide2.QtCore.QEvent',), + "QEventLoop.exec_": ('PySide2.libpyside.ProcessEventsFlags',), + "QEventLoop.exit": ('int',), + "QEventLoop.isRunning": (), + "QEventLoop.processEvents": [('PySide2.libpyside.ProcessEventsFlags',), ('PySide2.libpyside.ProcessEventsFlags', 'int')], + "QEventLoop.quit": (), + "QEventLoop.wakeUp": (), + + # class PySide2.QtCore.QEventTransition: + "QEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QEventTransition.event": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventSource": (), + "QEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventType": (), + "QEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QEventTransition.setEventSource": ('PySide2.QtCore.QObject',), + "QEventTransition.setEventType": ('PySide2.QtCore.QEvent.Type',), + + # class PySide2.QtCore.QFactoryInterface: + "QFactoryInterface.__init__": (), + "QFactoryInterface.keys": (), + + # class PySide2.QtCore.QFile: + "QFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QFile.copy": [('str',), ('str', 'str')], + "QFile.decodeName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QFile.encodeName": ('str',), + "QFile.exists": [(), ('str',)], + "QFile.fileName": (), + "QFile.link": [('str',), ('str', 'str')], + "QFile.open": [('PySide2.libpyside.OpenMode',), ('int', 'PySide2.libpyside.OpenMode', 'PySide2.libpyside.FileHandleFlags')], + "QFile.permissions": [(), ('str',)], + "QFile.readLink": [(), ('str',)], + "QFile.remove": [(), ('str',)], + "QFile.rename": [('str',), ('str', 'str')], + "QFile.resize": [('int',), ('str', 'int')], + "QFile.setFileName": ('str',), + "QFile.setPermissions": [('PySide2.libpyside.Permissions',), ('str', 'PySide2.libpyside.Permissions')], + "QFile.size": (), + "QFile.symLinkTarget": [(), ('str',)], + + # class PySide2.QtCore.QFileDevice: + "QFileDevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QFileDevice.atEnd": (), + "QFileDevice.close": (), + "QFileDevice.error": (), + "QFileDevice.fileName": (), + "QFileDevice.fileTime": ('PySide2.QtCore.QFileDevice.FileTime',), + "QFileDevice.flush": (), + "QFileDevice.handle": (), + "QFileDevice.isSequential": (), + "QFileDevice.map": ('int', 'int', 'PySide2.QtCore.QFileDevice.MemoryMapFlags'), + "QFileDevice.permissions": (), + "QFileDevice.pos": (), + "QFileDevice.readData": ('str', 'int'), + "QFileDevice.readLineData": ('str', 'int'), + "QFileDevice.resize": ('int',), + "QFileDevice.seek": ('int',), + "QFileDevice.setFileTime": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QFileDevice.FileTime'), + "QFileDevice.setPermissions": ('PySide2.libpyside.Permissions',), + "QFileDevice.size": (), + "QFileDevice.unmap": ('Union[str, int]',), + "QFileDevice.unsetError": (), + "QFileDevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QFileInfo: + "QFileInfo.__init__": [(), ('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('PySide2.QtCore.QFileInfo',), ('str',)], + "QFileInfo.__copy__": (), + "QFileInfo.__reduce__": (), + "QFileInfo.absoluteDir": (), + "QFileInfo.absoluteFilePath": (), + "QFileInfo.absolutePath": (), + "QFileInfo.baseName": (), + "QFileInfo.birthTime": (), + "QFileInfo.bundleName": (), + "QFileInfo.caching": (), + "QFileInfo.canonicalFilePath": (), + "QFileInfo.canonicalPath": (), + "QFileInfo.completeBaseName": (), + "QFileInfo.completeSuffix": (), + "QFileInfo.created": (), + "QFileInfo.dir": (), + "QFileInfo.exists": [(), ('str',)], + "QFileInfo.fileName": (), + "QFileInfo.filePath": (), + "QFileInfo.group": (), + "QFileInfo.groupId": (), + "QFileInfo.isAbsolute": (), + "QFileInfo.isBundle": (), + "QFileInfo.isDir": (), + "QFileInfo.isExecutable": (), + "QFileInfo.isFile": (), + "QFileInfo.isHidden": (), + "QFileInfo.isNativePath": (), + "QFileInfo.isReadable": (), + "QFileInfo.isRelative": (), + "QFileInfo.isRoot": (), + "QFileInfo.isSymLink": (), + "QFileInfo.isWritable": (), + "QFileInfo.lastModified": (), + "QFileInfo.lastRead": (), + "QFileInfo.makeAbsolute": (), + "QFileInfo.metadataChangeTime": (), + "QFileInfo.owner": (), + "QFileInfo.ownerId": (), + "QFileInfo.path": (), + "QFileInfo.readLink": (), + "QFileInfo.refresh": (), + "QFileInfo.setCaching": ('bool',), + "QFileInfo.setFile": [('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('str',)], + "QFileInfo.size": (), + "QFileInfo.suffix": (), + "QFileInfo.swap": ('PySide2.QtCore.QFileInfo',), + "QFileInfo.symLinkTarget": (), + + # class PySide2.QtCore.QFileSelector: + "QFileSelector.__init__": ('PySide2.QtCore.QObject',), + "QFileSelector.allSelectors": (), + "QFileSelector.extraSelectors": (), + "QFileSelector.select": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileSelector.setExtraSelectors": ('List[str]',), + + # class PySide2.QtCore.QFileSystemWatcher: + "QFileSystemWatcher.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QFileSystemWatcher.addPath": ('str',), + "QFileSystemWatcher.addPaths": ('List[str]',), + "QFileSystemWatcher.directories": (), + "QFileSystemWatcher.files": (), + "QFileSystemWatcher.removePath": ('str',), + "QFileSystemWatcher.removePaths": ('List[str]',), + + # class PySide2.QtCore.QFinalState: + "QFinalState.__init__": ('PySide2.QtCore.QState',), + "QFinalState.event": ('PySide2.QtCore.QEvent',), + "QFinalState.onEntry": ('PySide2.QtCore.QEvent',), + "QFinalState.onExit": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtCore.QGenericArgument: + "QGenericArgument.__init__": [('PySide2.QtCore.QGenericArgument',), ('str', 'int')], + "QGenericArgument.__copy__": (), + "QGenericArgument.data": (), + "QGenericArgument.name": (), + + # class PySide2.QtCore.QGenericReturnArgument: + "QGenericReturnArgument.__init__": [('PySide2.QtCore.QGenericReturnArgument',), ('str', 'int')], + "QGenericReturnArgument.__copy__": (), + + # class PySide2.QtCore.QHistoryState: + "QHistoryState.__init__": [('PySide2.QtCore.QHistoryState.HistoryType', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QHistoryState.defaultState": (), + "QHistoryState.defaultTransition": (), + "QHistoryState.event": ('PySide2.QtCore.QEvent',), + "QHistoryState.historyType": (), + "QHistoryState.onEntry": ('PySide2.QtCore.QEvent',), + "QHistoryState.onExit": ('PySide2.QtCore.QEvent',), + "QHistoryState.setDefaultState": ('PySide2.QtCore.QAbstractState',), + "QHistoryState.setDefaultTransition": ('PySide2.QtCore.QAbstractTransition',), + "QHistoryState.setHistoryType": ('PySide2.QtCore.QHistoryState.HistoryType',), + + # class PySide2.QtCore.QIODevice: + "QIODevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QIODevice.atEnd": (), + "QIODevice.bytesAvailable": (), + "QIODevice.bytesToWrite": (), + "QIODevice.canReadLine": (), + "QIODevice.close": (), + "QIODevice.commitTransaction": (), + "QIODevice.currentReadChannel": (), + "QIODevice.currentWriteChannel": (), + "QIODevice.errorString": (), + "QIODevice.getChar": ('str',), + "QIODevice.isOpen": (), + "QIODevice.isReadable": (), + "QIODevice.isSequential": (), + "QIODevice.isTextModeEnabled": (), + "QIODevice.isTransactionStarted": (), + "QIODevice.isWritable": (), + "QIODevice.open": ('PySide2.libpyside.OpenMode',), + "QIODevice.openMode": (), + "QIODevice.peek": ('int',), + "QIODevice.pos": (), + "QIODevice.putChar": ('Union[str, int]',), + "QIODevice.read": ('int',), + "QIODevice.readAll": (), + "QIODevice.readChannelCount": (), + "QIODevice.readData": ('str', 'int'), + "QIODevice.readLine": ('int',), + "QIODevice.readLineData": ('str', 'int'), + "QIODevice.reset": (), + "QIODevice.rollbackTransaction": (), + "QIODevice.seek": ('int',), + "QIODevice.setCurrentReadChannel": ('int',), + "QIODevice.setCurrentWriteChannel": ('int',), + "QIODevice.setErrorString": ('str',), + "QIODevice.setOpenMode": ('PySide2.libpyside.OpenMode',), + "QIODevice.setTextModeEnabled": ('bool',), + "QIODevice.size": (), + "QIODevice.skip": ('int',), + "QIODevice.startTransaction": (), + "QIODevice.ungetChar": ('Union[str, int]',), + "QIODevice.waitForBytesWritten": ('int',), + "QIODevice.waitForReadyRead": ('int',), + "QIODevice.write": ('PySide2.QtCore.QByteArray',), + "QIODevice.writeChannelCount": (), + "QIODevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QIdentityProxyModel: + "QIdentityProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QIdentityProxyModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QIdentityProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QIdentityProxyModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QIdentityProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QIdentityProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QIdentityProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QIdentityProxyModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'PySide2.libpyside.MatchFlags'), + "QIdentityProxyModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QIdentityProxyModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QIdentityProxyModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QIdentityProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QIdentityProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QItemSelection: + "QItemSelection.__init__": [(), ('PySide2.QtCore.QItemSelection',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelection.__copy__": (), + "QItemSelection.append": [('PySide2.QtCore.QItemSelectionRange',), ('list',)], + "QItemSelection.at": ('int',), + "QItemSelection.back": (), + "QItemSelection.clear": (), + "QItemSelection.constFirst": (), + "QItemSelection.constLast": (), + "QItemSelection.contains": ('PySide2.QtCore.QModelIndex',), + "QItemSelection.count": [(), ('PySide2.QtCore.QItemSelectionRange',)], + "QItemSelection.detachShared": (), + "QItemSelection.empty": (), + "QItemSelection.endsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.first": (), + "QItemSelection.fromSet": ('set',), + "QItemSelection.fromVector": ('list',), + "QItemSelection.front": (), + "QItemSelection.indexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.indexes": (), + "QItemSelection.insert": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.isEmpty": (), + "QItemSelection.isSharedWith": ('list',), + "QItemSelection.last": (), + "QItemSelection.lastIndexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.length": (), + "QItemSelection.merge": ('PySide2.QtCore.QItemSelection', 'PySide2.libpyside.SelectionFlags'), + "QItemSelection.mid": ('int', 'int'), + "QItemSelection.move": ('int', 'int'), + "QItemSelection.pop_back": (), + "QItemSelection.pop_front": (), + "QItemSelection.prepend": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_back": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_front": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAll": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAt": ('int',), + "QItemSelection.removeFirst": (), + "QItemSelection.removeLast": (), + "QItemSelection.removeOne": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.replace": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.reserve": ('int',), + "QItemSelection.select": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QItemSelection.setSharable": ('bool',), + "QItemSelection.size": (), + "QItemSelection.split": ('PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelection'), + "QItemSelection.startsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.swap": [('int', 'int'), ('list',)], + "QItemSelection.takeAt": ('int',), + "QItemSelection.takeFirst": (), + "QItemSelection.takeLast": (), + "QItemSelection.toSet": (), + "QItemSelection.toVector": (), + "QItemSelection.value": [('int',), ('int', 'PySide2.QtCore.QItemSelectionRange')], + + # class PySide2.QtCore.QItemSelectionModel: + "QItemSelectionModel.__init__": [('PySide2.QtCore.QAbstractItemModel',), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject')], + "QItemSelectionModel.clear": (), + "QItemSelectionModel.clearCurrentIndex": (), + "QItemSelectionModel.clearSelection": (), + "QItemSelectionModel.columnIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.currentIndex": (), + "QItemSelectionModel.emitSelectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QItemSelectionModel.hasSelection": (), + "QItemSelectionModel.isColumnSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isRowSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isSelected": ('PySide2.QtCore.QModelIndex',), + "QItemSelectionModel.model": (), + "QItemSelectionModel.reset": (), + "QItemSelectionModel.rowIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.select": [('PySide2.QtCore.QItemSelection', 'PySide2.libpyside.SelectionFlags'), ('PySide2.QtCore.QModelIndex', 'PySide2.libpyside.SelectionFlags')], + "QItemSelectionModel.selectedColumns": ('int',), + "QItemSelectionModel.selectedIndexes": (), + "QItemSelectionModel.selectedRows": ('int',), + "QItemSelectionModel.selection": (), + "QItemSelectionModel.setCurrentIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.libpyside.SelectionFlags'), + "QItemSelectionModel.setModel": ('PySide2.QtCore.QAbstractItemModel',), + + # class PySide2.QtCore.QItemSelectionRange: + "QItemSelectionRange.__init__": [(), ('PySide2.QtCore.QItemSelectionRange',), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.__copy__": (), + "QItemSelectionRange.bottom": (), + "QItemSelectionRange.bottomRight": (), + "QItemSelectionRange.contains": [('PySide2.QtCore.QModelIndex',), ('int', 'int', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.height": (), + "QItemSelectionRange.indexes": (), + "QItemSelectionRange.intersected": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.intersects": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.isEmpty": (), + "QItemSelectionRange.isValid": (), + "QItemSelectionRange.left": (), + "QItemSelectionRange.model": (), + "QItemSelectionRange.parent": (), + "QItemSelectionRange.right": (), + "QItemSelectionRange.swap": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.top": (), + "QItemSelectionRange.topLeft": (), + "QItemSelectionRange.width": (), + + # class PySide2.QtCore.QJsonArray: + "QJsonArray.__init__": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonArray.__copy__": (), + "QJsonArray.append": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.at": ('int',), + "QJsonArray.contains": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.count": (), + "QJsonArray.empty": (), + "QJsonArray.first": (), + "QJsonArray.fromStringList": ('List[str]',), + "QJsonArray.fromVariantList": ('list',), + "QJsonArray.insert": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.isEmpty": (), + "QJsonArray.last": (), + "QJsonArray.pop_back": (), + "QJsonArray.pop_front": (), + "QJsonArray.prepend": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_back": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_front": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.removeAt": ('int',), + "QJsonArray.removeFirst": (), + "QJsonArray.removeLast": (), + "QJsonArray.replace": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.size": (), + "QJsonArray.swap": ('PySide2.QtCore.QJsonArray',), + "QJsonArray.takeAt": ('int',), + "QJsonArray.toVariantList": (), + + # class PySide2.QtCore.QJsonDocument: + "QJsonDocument.__init__": [(), ('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonDocument',), ('dict',)], + "QJsonDocument.__copy__": (), + "QJsonDocument.array": (), + "QJsonDocument.fromBinaryData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromJson": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonParseError'), + "QJsonDocument.fromRawData": ('str', 'int', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromVariant": ('Any',), + "QJsonDocument.isArray": (), + "QJsonDocument.isEmpty": (), + "QJsonDocument.isNull": (), + "QJsonDocument.isObject": (), + "QJsonDocument.object": (), + "QJsonDocument.rawData": ('int',), + "QJsonDocument.setArray": ('PySide2.QtCore.QJsonArray',), + "QJsonDocument.setObject": ('dict',), + "QJsonDocument.swap": ('PySide2.QtCore.QJsonDocument',), + "QJsonDocument.toBinaryData": (), + "QJsonDocument.toJson": [(), ('PySide2.QtCore.QJsonDocument.JsonFormat',)], + "QJsonDocument.toVariant": (), + + # class PySide2.QtCore.QJsonParseError: + "QJsonParseError.__init__": [(), ('PySide2.QtCore.QJsonParseError',)], + "QJsonParseError.__copy__": (), + "QJsonParseError.errorString": (), + + # class PySide2.QtCore.QJsonValue: + "QJsonValue.__init__": [('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonValue',), ('PySide2.QtCore.QJsonValue.Type',), ('bool',), ('dict',), ('float',), ('int',), ('str',)], + "QJsonValue.__copy__": (), + "QJsonValue.fromVariant": ('Any',), + "QJsonValue.isArray": (), + "QJsonValue.isBool": (), + "QJsonValue.isDouble": (), + "QJsonValue.isNull": (), + "QJsonValue.isObject": (), + "QJsonValue.isString": (), + "QJsonValue.isUndefined": (), + "QJsonValue.swap": ('PySide2.QtCore.QJsonValue',), + "QJsonValue.toArray": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonValue.toBool": ('bool',), + "QJsonValue.toDouble": ('float',), + "QJsonValue.toInt": ('int',), + "QJsonValue.toObject": [(), ('dict',)], + "QJsonValue.toString": [(), ('str',)], + "QJsonValue.toVariant": (), + "QJsonValue.type": (), + + # class PySide2.QtCore.QLibraryInfo: + "QLibraryInfo.build": (), + "QLibraryInfo.buildDate": (), + "QLibraryInfo.isDebugBuild": (), + "QLibraryInfo.licensedProducts": (), + "QLibraryInfo.licensee": (), + "QLibraryInfo.location": ('PySide2.QtCore.QLibraryInfo.LibraryLocation',), + "QLibraryInfo.platformPluginArguments": ('str',), + "QLibraryInfo.version": (), + + # class PySide2.QtCore.QLine: + "QLine.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('int', 'int', 'int', 'int')], + "QLine.__copy__": (), + "QLine.__reduce__": (), + "QLine.center": (), + "QLine.dx": (), + "QLine.dy": (), + "QLine.isNull": (), + "QLine.p1": (), + "QLine.p2": (), + "QLine.setLine": ('int', 'int', 'int', 'int'), + "QLine.setP1": ('PySide2.QtCore.QPoint',), + "QLine.setP2": ('PySide2.QtCore.QPoint',), + "QLine.setPoints": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QLine.toTuple": (), + "QLine.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.x1": (), + "QLine.x2": (), + "QLine.y1": (), + "QLine.y2": (), + + # class PySide2.QtCore.QLineF: + "QLineF.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QLineF.__copy__": (), + "QLineF.__reduce__": (), + "QLineF.angle": [(), ('PySide2.QtCore.QLineF',)], + "QLineF.angleTo": ('PySide2.QtCore.QLineF',), + "QLineF.center": (), + "QLineF.dx": (), + "QLineF.dy": (), + "QLineF.fromPolar": ('float', 'float'), + "QLineF.intersect": ('PySide2.QtCore.QLineF', 'PySide2.QtCore.QPointF'), + "QLineF.isNull": (), + "QLineF.length": (), + "QLineF.normalVector": (), + "QLineF.p1": (), + "QLineF.p2": (), + "QLineF.pointAt": ('float',), + "QLineF.setAngle": ('float',), + "QLineF.setLength": ('float',), + "QLineF.setLine": ('float', 'float', 'float', 'float'), + "QLineF.setP1": ('PySide2.QtCore.QPointF',), + "QLineF.setP2": ('PySide2.QtCore.QPointF',), + "QLineF.setPoints": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QLineF.toLine": (), + "QLineF.toTuple": (), + "QLineF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.unitVector": (), + "QLineF.x1": (), + "QLineF.x2": (), + "QLineF.y1": (), + "QLineF.y2": (), + + # class PySide2.QtCore.QLocale: + "QLocale.__init__": [(), ('PySide2.QtCore.QLocale',), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Country'), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), ('str',)], + "QLocale.__copy__": (), + "QLocale.amText": (), + "QLocale.bcp47Name": (), + "QLocale.c": (), + "QLocale.countriesForLanguage": ('PySide2.QtCore.QLocale.Language',), + "QLocale.country": (), + "QLocale.countryToString": ('PySide2.QtCore.QLocale.Country',), + "QLocale.createSeparatedList": ('List[str]',), + "QLocale.currencySymbol": ('PySide2.QtCore.QLocale.CurrencySymbolFormat',), + "QLocale.dateFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dateTimeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.decimalPoint": (), + "QLocale.exponential": (), + "QLocale.firstDayOfWeek": (), + "QLocale.formattedDataSize": ('int', 'int', 'PySide2.libpyside.DataSizeFormats'), + "QLocale.groupSeparator": (), + "QLocale.language": (), + "QLocale.languageToString": ('PySide2.QtCore.QLocale.Language',), + "QLocale.matchingLocales": ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), + "QLocale.measurementSystem": (), + "QLocale.monthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.name": (), + "QLocale.nativeCountryName": (), + "QLocale.nativeLanguageName": (), + "QLocale.negativeSign": (), + "QLocale.numberOptions": (), + "QLocale.percent": (), + "QLocale.pmText": (), + "QLocale.positiveSign": (), + "QLocale.quoteString": ('str', 'PySide2.QtCore.QLocale.QuotationStyle'), + "QLocale.script": (), + "QLocale.scriptToString": ('PySide2.QtCore.QLocale.Script',), + "QLocale.setDefault": ('PySide2.QtCore.QLocale',), + "QLocale.setNumberOptions": ('PySide2.libpyside.NumberOptions',), + "QLocale.standaloneDayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.standaloneMonthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.swap": ('PySide2.QtCore.QLocale',), + "QLocale.system": (), + "QLocale.textDirection": (), + "QLocale.timeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.toCurrencyString": [('float', 'str'), ('float', 'str', 'int'), ('int', 'str')], + "QLocale.toDate": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDateTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDouble": ('str', 'bool'), + "QLocale.toFloat": ('str', 'bool'), + "QLocale.toInt": ('str', 'bool'), + "QLocale.toLongLong": ('str', 'bool'), + "QLocale.toLower": ('str',), + "QLocale.toShort": ('str', 'bool'), + "QLocale.toString": [('PySide2.QtCore.QDate', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDate', 'str'), ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDateTime', 'str'), ('PySide2.QtCore.QTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QTime', 'str'), ('float', 'Union[str, int]', 'int'), ('int',)], + "QLocale.toTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toUInt": ('str', 'bool'), + "QLocale.toULongLong": ('str', 'bool'), + "QLocale.toUShort": ('str', 'bool'), + "QLocale.toUpper": ('str',), + "QLocale.uiLanguages": (), + "QLocale.weekdays": (), + "QLocale.zeroDigit": (), + + # class PySide2.QtCore.QLockFile: + "QLockFile.__init__": ('str',), + "QLockFile.error": (), + "QLockFile.getLockInfo": ('int', 'str', 'str'), + "QLockFile.isLocked": (), + "QLockFile.lock": (), + "QLockFile.removeStaleLockFile": (), + "QLockFile.setStaleLockTime": ('int',), + "QLockFile.staleLockTime": (), + "QLockFile.tryLock": ('int',), + "QLockFile.unlock": (), + + # class PySide2.QtCore.QMargins: + "QMargins.__init__": [(), ('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QMargins.__copy__": (), + "QMargins.bottom": (), + "QMargins.isNull": (), + "QMargins.left": (), + "QMargins.right": (), + "QMargins.setBottom": ('int',), + "QMargins.setLeft": ('int',), + "QMargins.setRight": ('int',), + "QMargins.setTop": ('int',), + "QMargins.top": (), + + # class PySide2.QtCore.QMarginsF: + "QMarginsF.__init__": [(), ('PySide2.QtCore.QMargins',), ('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float')], + "QMarginsF.__copy__": (), + "QMarginsF.bottom": (), + "QMarginsF.isNull": (), + "QMarginsF.left": (), + "QMarginsF.right": (), + "QMarginsF.setBottom": ('float',), + "QMarginsF.setLeft": ('float',), + "QMarginsF.setRight": ('float',), + "QMarginsF.setTop": ('float',), + "QMarginsF.toMargins": (), + "QMarginsF.top": (), + + # class PySide2.QtCore.QMessageAuthenticationCode: + "QMessageAuthenticationCode.__init__": ('PySide2.QtCore.QCryptographicHash.Algorithm', 'PySide2.QtCore.QByteArray'), + "QMessageAuthenticationCode.addData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str', 'int')], + "QMessageAuthenticationCode.hash": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QCryptographicHash.Algorithm'), + "QMessageAuthenticationCode.reset": (), + "QMessageAuthenticationCode.result": (), + "QMessageAuthenticationCode.setKey": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QMessageLogContext: + "QMessageLogContext.__init__": [(), ('str', 'int', 'str', 'str')], + + # class PySide2.QtCore.QMetaClassInfo: + "QMetaClassInfo.__init__": [(), ('PySide2.QtCore.QMetaClassInfo',)], + "QMetaClassInfo.__copy__": (), + "QMetaClassInfo.name": (), + "QMetaClassInfo.value": (), + + # class PySide2.QtCore.QMetaEnum: + "QMetaEnum.__init__": [(), ('PySide2.QtCore.QMetaEnum',)], + "QMetaEnum.__copy__": (), + "QMetaEnum.isFlag": (), + "QMetaEnum.isScoped": (), + "QMetaEnum.isValid": (), + "QMetaEnum.key": ('int',), + "QMetaEnum.keyCount": (), + "QMetaEnum.keyToValue": ('str', 'bool'), + "QMetaEnum.keysToValue": ('str', 'bool'), + "QMetaEnum.name": (), + "QMetaEnum.scope": (), + "QMetaEnum.value": ('int',), + "QMetaEnum.valueToKey": ('int',), + "QMetaEnum.valueToKeys": ('int',), + + # class PySide2.QtCore.QMetaMethod: + "QMetaMethod.__init__": [(), ('PySide2.QtCore.QMetaMethod',)], + "QMetaMethod.__copy__": (), + "QMetaMethod.access": (), + "QMetaMethod.enclosingMetaObject": (), + "QMetaMethod.invoke": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.invokeOnGadget": [('int', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('int', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.isValid": (), + "QMetaMethod.methodIndex": (), + "QMetaMethod.methodSignature": (), + "QMetaMethod.methodType": (), + "QMetaMethod.name": (), + "QMetaMethod.parameterCount": (), + "QMetaMethod.parameterNames": (), + "QMetaMethod.parameterType": ('int',), + "QMetaMethod.parameterTypes": (), + "QMetaMethod.returnType": (), + "QMetaMethod.revision": (), + "QMetaMethod.tag": (), + "QMetaMethod.typeName": (), + + # class PySide2.QtCore.QMetaObject: + "QMetaObject.__init__": (), + "QMetaObject.cast": ('PySide2.QtCore.QObject',), + "QMetaObject.checkConnectArgs": [('PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QMetaMethod'), ('str', 'str')], + "QMetaObject.classInfo": ('int',), + "QMetaObject.classInfoCount": (), + "QMetaObject.classInfoOffset": (), + "QMetaObject.className": (), + "QMetaObject.connectSlotsByName": ('PySide2.QtCore.QObject',), + "QMetaObject.constructor": ('int',), + "QMetaObject.constructorCount": (), + "QMetaObject.disconnect": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.disconnectOne": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.enumerator": ('int',), + "QMetaObject.enumeratorCount": (), + "QMetaObject.enumeratorOffset": (), + "QMetaObject.indexOfClassInfo": ('str',), + "QMetaObject.indexOfConstructor": ('str',), + "QMetaObject.indexOfEnumerator": ('str',), + "QMetaObject.indexOfMethod": ('str',), + "QMetaObject.indexOfProperty": ('str',), + "QMetaObject.indexOfSignal": ('str',), + "QMetaObject.indexOfSlot": ('str',), + "QMetaObject.inherits": ('PySide2.QtCore.QMetaObject',), + "QMetaObject.invokeMethod": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaObject.method": ('int',), + "QMetaObject.methodCount": (), + "QMetaObject.methodOffset": (), + "QMetaObject.newInstance": ('PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), + "QMetaObject.normalizedSignature": ('str',), + "QMetaObject.normalizedType": ('str',), + "QMetaObject.property": ('int',), + "QMetaObject.propertyCount": (), + "QMetaObject.propertyOffset": (), + "QMetaObject.superClass": (), + "QMetaObject.userProperty": (), + + # class PySide2.QtCore.QMetaProperty: + "QMetaProperty.__init__": [(), ('PySide2.QtCore.QMetaProperty',)], + "QMetaProperty.__copy__": (), + "QMetaProperty.enumerator": (), + "QMetaProperty.hasNotifySignal": (), + "QMetaProperty.hasStdCppSet": (), + "QMetaProperty.isConstant": (), + "QMetaProperty.isDesignable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEditable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEnumType": (), + "QMetaProperty.isFinal": (), + "QMetaProperty.isFlagType": (), + "QMetaProperty.isReadable": (), + "QMetaProperty.isResettable": (), + "QMetaProperty.isScriptable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isStored": ('PySide2.QtCore.QObject',), + "QMetaProperty.isUser": ('PySide2.QtCore.QObject',), + "QMetaProperty.isValid": (), + "QMetaProperty.isWritable": (), + "QMetaProperty.name": (), + "QMetaProperty.notifySignal": (), + "QMetaProperty.notifySignalIndex": (), + "QMetaProperty.propertyIndex": (), + "QMetaProperty.read": ('PySide2.QtCore.QObject',), + "QMetaProperty.readOnGadget": ('int',), + "QMetaProperty.reset": ('PySide2.QtCore.QObject',), + "QMetaProperty.resetOnGadget": ('int',), + "QMetaProperty.revision": (), + "QMetaProperty.type": (), + "QMetaProperty.typeName": (), + "QMetaProperty.userType": (), + "QMetaProperty.write": ('PySide2.QtCore.QObject', 'Any'), + "QMetaProperty.writeOnGadget": ('int', 'Any'), + + # class PySide2.QtCore.QMimeData: + "QMimeData.__init__": (), + "QMimeData.clear": (), + "QMimeData.colorData": (), + "QMimeData.data": ('str',), + "QMimeData.formats": (), + "QMimeData.hasColor": (), + "QMimeData.hasFormat": ('str',), + "QMimeData.hasHtml": (), + "QMimeData.hasImage": (), + "QMimeData.hasText": (), + "QMimeData.hasUrls": (), + "QMimeData.html": (), + "QMimeData.imageData": (), + "QMimeData.removeFormat": ('str',), + "QMimeData.retrieveData": ('str', 'type'), + "QMimeData.setColorData": ('Any',), + "QMimeData.setData": ('str', 'PySide2.QtCore.QByteArray'), + "QMimeData.setHtml": ('str',), + "QMimeData.setImageData": ('Any',), + "QMimeData.setText": ('str',), + "QMimeData.setUrls": ('list',), + "QMimeData.text": (), + "QMimeData.urls": (), + + # class PySide2.QtCore.QMimeDatabase: + "QMimeDatabase.__init__": (), + "QMimeDatabase.allMimeTypes": (), + "QMimeDatabase.mimeTypeForData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QMimeDatabase.mimeTypeForFile": [('PySide2.QtCore.QFileInfo', 'PySide2.QtCore.QMimeDatabase.MatchMode'), ('str', 'PySide2.QtCore.QMimeDatabase.MatchMode')], + "QMimeDatabase.mimeTypeForFileNameAndData": [('str', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QIODevice')], + "QMimeDatabase.mimeTypeForName": ('str',), + "QMimeDatabase.mimeTypeForUrl": ('PySide2.QtCore.QUrl',), + "QMimeDatabase.mimeTypesForFileName": ('str',), + "QMimeDatabase.suffixForFileName": ('str',), + + # class PySide2.QtCore.QMimeType: + "QMimeType.__init__": [(), ('PySide2.QtCore.QMimeType',)], + "QMimeType.__copy__": (), + "QMimeType.aliases": (), + "QMimeType.allAncestors": (), + "QMimeType.comment": (), + "QMimeType.filterString": (), + "QMimeType.genericIconName": (), + "QMimeType.globPatterns": (), + "QMimeType.iconName": (), + "QMimeType.inherits": ('str',), + "QMimeType.isDefault": (), + "QMimeType.isValid": (), + "QMimeType.name": (), + "QMimeType.parentMimeTypes": (), + "QMimeType.preferredSuffix": (), + "QMimeType.suffixes": (), + "QMimeType.swap": ('PySide2.QtCore.QMimeType',), + + # class PySide2.QtCore.QModelIndex: + "QModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',)], + "QModelIndex.__copy__": (), + "QModelIndex.child": ('int', 'int'), + "QModelIndex.column": (), + "QModelIndex.data": ('int',), + "QModelIndex.flags": (), + "QModelIndex.internalId": (), + "QModelIndex.internalPointer": (), + "QModelIndex.isValid": (), + "QModelIndex.model": (), + "QModelIndex.parent": (), + "QModelIndex.row": (), + "QModelIndex.sibling": ('int', 'int'), + "QModelIndex.siblingAtColumn": ('int',), + "QModelIndex.siblingAtRow": ('int',), + + # class PySide2.QtCore.QMutex: + "QMutex.__init__": ('PySide2.QtCore.QMutex.RecursionMode',), + "QMutex.isRecursive": (), + "QMutex.lock": (), + "QMutex.tryLock": [(), ('int',)], + "QMutex.try_lock": (), + "QMutex.unlock": (), + + # class PySide2.QtCore.QMutexLocker: + "QMutexLocker.__init__": ('PySide2.QtCore.QBasicMutex',), + "QMutexLocker.__enter__": (), + "QMutexLocker.__exit__": ('object', 'object', 'object'), + "QMutexLocker.mutex": (), + "QMutexLocker.relock": (), + "QMutexLocker.unlock": (), + + # class PySide2.QtCore.QObject: + "QObject.__init__": ('PySide2.QtCore.QObject',), + "QObject.blockSignals": ('bool',), + "QObject.childEvent": ('PySide2.QtCore.QChildEvent',), + "QObject.children": (), + "QObject.connect": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType')], + "QObject.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.customEvent": ('PySide2.QtCore.QEvent',), + "QObject.deleteLater": (), + "QObject.disconnect": [('PySide2.QtCore.QMetaObject.Connection',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'Callable'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str'), ('str', 'Callable'), ('str', 'PySide2.QtCore.QObject', 'str')], + "QObject.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.dumpObjectInfo": (), + "QObject.dumpObjectTree": (), + "QObject.dynamicPropertyNames": (), + "QObject.emit": ('str', '...'), + "QObject.event": ('PySide2.QtCore.QEvent',), + "QObject.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QObject.findChild": ('type', 'str'), + "QObject.findChildren": [('type', 'PySide2.QtCore.QRegExp'), ('type', 'str')], + "QObject.inherits": ('str',), + "QObject.installEventFilter": ('PySide2.QtCore.QObject',), + "QObject.isSignalConnected": ('PySide2.QtCore.QMetaMethod',), + "QObject.isWidgetType": (), + "QObject.isWindowType": (), + "QObject.killTimer": ('int',), + "QObject.metaObject": (), + "QObject.moveToThread": ('PySide2.QtCore.QThread',), + "QObject.objectName": (), + "QObject.parent": (), + "QObject.property": ('str',), + "QObject.receivers": ('str',), + "QObject.registerUserData": (), + "QObject.removeEventFilter": ('PySide2.QtCore.QObject',), + "QObject.sender": (), + "QObject.senderSignalIndex": (), + "QObject.setObjectName": ('str',), + "QObject.setParent": ('PySide2.QtCore.QObject',), + "QObject.setProperty": ('str', 'Any'), + "QObject.signalsBlocked": (), + "QObject.startTimer": ('int', 'PySide2.QtCore.Qt.TimerType'), + "QObject.thread": (), + "QObject.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QObject.tr": ('str', 'str', 'int'), + + # class PySide2.QtCore.QOperatingSystemVersion: + "QOperatingSystemVersion.__init__": [('PySide2.QtCore.QOperatingSystemVersion',), ('PySide2.QtCore.QOperatingSystemVersion.OSType', 'int', 'int', 'int')], + "QOperatingSystemVersion.__copy__": (), + "QOperatingSystemVersion.current": (), + "QOperatingSystemVersion.currentType": (), + "QOperatingSystemVersion.majorVersion": (), + "QOperatingSystemVersion.microVersion": (), + "QOperatingSystemVersion.minorVersion": (), + "QOperatingSystemVersion.name": (), + "QOperatingSystemVersion.segmentCount": (), + "QOperatingSystemVersion.type": (), + + # class PySide2.QtCore.QParallelAnimationGroup: + "QParallelAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QParallelAnimationGroup.duration": (), + "QParallelAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QParallelAnimationGroup.updateCurrentTime": ('int',), + "QParallelAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QParallelAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QPauseAnimation: + "QPauseAnimation.__init__": [('PySide2.QtCore.QObject',), ('int', 'PySide2.QtCore.QObject')], + "QPauseAnimation.duration": (), + "QPauseAnimation.event": ('PySide2.QtCore.QEvent',), + "QPauseAnimation.setDuration": ('int',), + "QPauseAnimation.updateCurrentTime": ('int',), + + # class PySide2.QtCore.QPersistentModelIndex: + "QPersistentModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QPersistentModelIndex',)], + "QPersistentModelIndex.__copy__": (), + "QPersistentModelIndex.child": ('int', 'int'), + "QPersistentModelIndex.column": (), + "QPersistentModelIndex.data": ('int',), + "QPersistentModelIndex.flags": (), + "QPersistentModelIndex.internalId": (), + "QPersistentModelIndex.internalPointer": (), + "QPersistentModelIndex.isValid": (), + "QPersistentModelIndex.model": (), + "QPersistentModelIndex.parent": (), + "QPersistentModelIndex.row": (), + "QPersistentModelIndex.sibling": ('int', 'int'), + "QPersistentModelIndex.swap": ('PySide2.QtCore.QPersistentModelIndex',), + + # class PySide2.QtCore.QPluginLoader: + "QPluginLoader.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QPluginLoader.errorString": (), + "QPluginLoader.fileName": (), + "QPluginLoader.instance": (), + "QPluginLoader.isLoaded": (), + "QPluginLoader.load": (), + "QPluginLoader.metaData": (), + "QPluginLoader.setFileName": ('str',), + "QPluginLoader.staticInstances": (), + "QPluginLoader.unload": (), + + # class PySide2.QtCore.QPoint: + "QPoint.__init__": [(), ('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPoint.__copy__": (), + "QPoint.__reduce__": (), + "QPoint.dotProduct": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QPoint.isNull": (), + "QPoint.manhattanLength": (), + "QPoint.setX": ('int',), + "QPoint.setY": ('int',), + "QPoint.toTuple": (), + "QPoint.x": (), + "QPoint.y": (), + + # class PySide2.QtCore.QPointF: + "QPointF.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPointF.__copy__": (), + "QPointF.__reduce__": (), + "QPointF.dotProduct": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QPointF.isNull": (), + "QPointF.manhattanLength": (), + "QPointF.setX": ('float',), + "QPointF.setY": ('float',), + "QPointF.toPoint": (), + "QPointF.toTuple": (), + "QPointF.x": (), + "QPointF.y": (), + + # class PySide2.QtCore.QProcess: + "QProcess.__init__": ('PySide2.QtCore.QObject',), + "QProcess.arguments": (), + "QProcess.atEnd": (), + "QProcess.bytesAvailable": (), + "QProcess.bytesToWrite": (), + "QProcess.canReadLine": (), + "QProcess.close": (), + "QProcess.closeReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.closeWriteChannel": (), + "QProcess.environment": (), + "QProcess.execute": [('str',), ('str', 'List[str]')], + "QProcess.exitCode": (), + "QProcess.exitStatus": (), + "QProcess.inputChannelMode": (), + "QProcess.isSequential": (), + "QProcess.kill": (), + "QProcess.nativeArguments": (), + "QProcess.nullDevice": (), + "QProcess.open": ('PySide2.libpyside.OpenMode',), + "QProcess.pid": (), + "QProcess.processChannelMode": (), + "QProcess.processEnvironment": (), + "QProcess.processId": (), + "QProcess.program": (), + "QProcess.readAllStandardError": (), + "QProcess.readAllStandardOutput": (), + "QProcess.readChannel": (), + "QProcess.readData": ('str', 'int'), + "QProcess.setArguments": ('List[str]',), + "QProcess.setEnvironment": ('List[str]',), + "QProcess.setInputChannelMode": ('PySide2.QtCore.QProcess.InputChannelMode',), + "QProcess.setNativeArguments": ('str',), + "QProcess.setProcessChannelMode": ('PySide2.QtCore.QProcess.ProcessChannelMode',), + "QProcess.setProcessEnvironment": ('PySide2.QtCore.QProcessEnvironment',), + "QProcess.setProcessState": ('PySide2.QtCore.QProcess.ProcessState',), + "QProcess.setProgram": ('str',), + "QProcess.setReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.setStandardErrorFile": ('str', 'PySide2.libpyside.OpenMode'), + "QProcess.setStandardInputFile": ('str',), + "QProcess.setStandardOutputFile": ('str', 'PySide2.libpyside.OpenMode'), + "QProcess.setStandardOutputProcess": ('PySide2.QtCore.QProcess',), + "QProcess.setWorkingDirectory": ('str',), + "QProcess.setupChildProcess": (), + "QProcess.start": [('PySide2.libpyside.OpenMode',), ('str', 'List[str]', 'PySide2.libpyside.OpenMode'), ('str', 'PySide2.libpyside.OpenMode')], + "QProcess.startDetached": [('int',), ('str',), ('str', 'List[str]'), ('str', 'List[str]', 'str', 'int')], + "QProcess.state": (), + "QProcess.systemEnvironment": (), + "QProcess.terminate": (), + "QProcess.waitForBytesWritten": ('int',), + "QProcess.waitForFinished": ('int',), + "QProcess.waitForReadyRead": ('int',), + "QProcess.waitForStarted": ('int',), + "QProcess.workingDirectory": (), + "QProcess.writeData": ('str', 'int'), + + # class PySide2.QtCore.QProcessEnvironment: + "QProcessEnvironment.__init__": [(), ('PySide2.QtCore.QProcessEnvironment',)], + "QProcessEnvironment.__copy__": (), + "QProcessEnvironment.clear": (), + "QProcessEnvironment.contains": ('str',), + "QProcessEnvironment.insert": [('PySide2.QtCore.QProcessEnvironment',), ('str', 'str')], + "QProcessEnvironment.isEmpty": (), + "QProcessEnvironment.keys": (), + "QProcessEnvironment.remove": ('str',), + "QProcessEnvironment.swap": ('PySide2.QtCore.QProcessEnvironment',), + "QProcessEnvironment.systemEnvironment": (), + "QProcessEnvironment.toStringList": (), + "QProcessEnvironment.value": ('str', 'str'), + + # class PySide2.QtCore.QPropertyAnimation: + "QPropertyAnimation.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QPropertyAnimation.event": ('PySide2.QtCore.QEvent',), + "QPropertyAnimation.propertyName": (), + "QPropertyAnimation.setPropertyName": ('PySide2.QtCore.QByteArray',), + "QPropertyAnimation.setTargetObject": ('PySide2.QtCore.QObject',), + "QPropertyAnimation.targetObject": (), + "QPropertyAnimation.updateCurrentValue": ('Any',), + "QPropertyAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QRandomGenerator: + "QRandomGenerator.__init__": [('PySide2.QtCore.QRandomGenerator',), ('int',), ('int', 'int')], + "QRandomGenerator.bounded": [('float',), ('int',), ('int', 'int')], + "QRandomGenerator.discard": ('int',), + "QRandomGenerator.generate": [(), ('int', 'int')], + "QRandomGenerator.generate64": (), + "QRandomGenerator.generateDouble": (), + "QRandomGenerator.global_": (), + "QRandomGenerator.max": (), + "QRandomGenerator.min": (), + "QRandomGenerator.securelySeeded": (), + "QRandomGenerator.seed": ('int',), + "QRandomGenerator.system": (), + + # class PySide2.QtCore.QRandomGenerator64: + "QRandomGenerator64.__init__": [('PySide2.QtCore.QRandomGenerator',), ('int',), ('int', 'int')], + "QRandomGenerator64.discard": ('int',), + "QRandomGenerator64.generate": (), + "QRandomGenerator64.global_": (), + "QRandomGenerator64.max": (), + "QRandomGenerator64.min": (), + "QRandomGenerator64.securelySeeded": (), + "QRandomGenerator64.system": (), + + # class PySide2.QtCore.QReadLocker: + "QReadLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QReadLocker.__enter__": (), + "QReadLocker.__exit__": ('object', 'object', 'object'), + "QReadLocker.readWriteLock": (), + "QReadLocker.relock": (), + "QReadLocker.unlock": (), + + # class PySide2.QtCore.QReadWriteLock: + "QReadWriteLock.__init__": ('PySide2.QtCore.QReadWriteLock.RecursionMode',), + "QReadWriteLock.lockForRead": (), + "QReadWriteLock.lockForWrite": (), + "QReadWriteLock.tryLockForRead": [(), ('int',)], + "QReadWriteLock.tryLockForWrite": [(), ('int',)], + "QReadWriteLock.unlock": (), + + # class PySide2.QtCore.QRect: + "QRect.__init__": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QSize'), ('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRect.__copy__": (), + "QRect.__reduce__": (), + "QRect.adjust": ('int', 'int', 'int', 'int'), + "QRect.adjusted": ('int', 'int', 'int', 'int'), + "QRect.bottom": (), + "QRect.bottomLeft": (), + "QRect.bottomRight": (), + "QRect.center": (), + "QRect.contains": [('PySide2.QtCore.QPoint', 'bool'), ('PySide2.QtCore.QRect', 'bool'), ('int', 'int'), ('int', 'int', 'bool')], + "QRect.getCoords": ('int', 'int', 'int', 'int'), + "QRect.getRect": ('int', 'int', 'int', 'int'), + "QRect.height": (), + "QRect.intersected": ('PySide2.QtCore.QRect',), + "QRect.intersects": ('PySide2.QtCore.QRect',), + "QRect.isEmpty": (), + "QRect.isNull": (), + "QRect.isValid": (), + "QRect.left": (), + "QRect.marginsAdded": ('PySide2.QtCore.QMargins',), + "QRect.marginsRemoved": ('PySide2.QtCore.QMargins',), + "QRect.moveBottom": ('int',), + "QRect.moveBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.moveCenter": ('PySide2.QtCore.QPoint',), + "QRect.moveLeft": ('int',), + "QRect.moveRight": ('int',), + "QRect.moveTo": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.moveTop": ('int',), + "QRect.moveTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveTopRight": ('PySide2.QtCore.QPoint',), + "QRect.normalized": (), + "QRect.right": (), + "QRect.setBottom": ('int',), + "QRect.setBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.setBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.setCoords": ('int', 'int', 'int', 'int'), + "QRect.setHeight": ('int',), + "QRect.setLeft": ('int',), + "QRect.setRect": ('int', 'int', 'int', 'int'), + "QRect.setRight": ('int',), + "QRect.setSize": ('PySide2.QtCore.QSize',), + "QRect.setTop": ('int',), + "QRect.setTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.setTopRight": ('PySide2.QtCore.QPoint',), + "QRect.setWidth": ('int',), + "QRect.setX": ('int',), + "QRect.setY": ('int',), + "QRect.size": (), + "QRect.top": (), + "QRect.topLeft": (), + "QRect.topRight": (), + "QRect.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.transposed": (), + "QRect.united": ('PySide2.QtCore.QRect',), + "QRect.width": (), + "QRect.x": (), + "QRect.y": (), + + # class PySide2.QtCore.QRectF: + "QRectF.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QSizeF'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QRectF.__copy__": (), + "QRectF.__reduce__": (), + "QRectF.adjust": ('float', 'float', 'float', 'float'), + "QRectF.adjusted": ('float', 'float', 'float', 'float'), + "QRectF.bottom": (), + "QRectF.bottomLeft": (), + "QRectF.bottomRight": (), + "QRectF.center": (), + "QRectF.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('float', 'float')], + "QRectF.getCoords": ('float', 'float', 'float', 'float'), + "QRectF.getRect": ('float', 'float', 'float', 'float'), + "QRectF.height": (), + "QRectF.intersected": ('PySide2.QtCore.QRectF',), + "QRectF.intersects": ('PySide2.QtCore.QRectF',), + "QRectF.isEmpty": (), + "QRectF.isNull": (), + "QRectF.isValid": (), + "QRectF.left": (), + "QRectF.marginsAdded": ('PySide2.QtCore.QMarginsF',), + "QRectF.marginsRemoved": ('PySide2.QtCore.QMarginsF',), + "QRectF.moveBottom": ('float',), + "QRectF.moveBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.moveCenter": ('PySide2.QtCore.QPointF',), + "QRectF.moveLeft": ('float',), + "QRectF.moveRight": ('float',), + "QRectF.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.moveTop": ('float',), + "QRectF.moveTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.normalized": (), + "QRectF.right": (), + "QRectF.setBottom": ('float',), + "QRectF.setBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.setCoords": ('float', 'float', 'float', 'float'), + "QRectF.setHeight": ('float',), + "QRectF.setLeft": ('float',), + "QRectF.setRect": ('float', 'float', 'float', 'float'), + "QRectF.setRight": ('float',), + "QRectF.setSize": ('PySide2.QtCore.QSizeF',), + "QRectF.setTop": ('float',), + "QRectF.setTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.setWidth": ('float',), + "QRectF.setX": ('float',), + "QRectF.setY": ('float',), + "QRectF.size": (), + "QRectF.toAlignedRect": (), + "QRectF.toRect": (), + "QRectF.top": (), + "QRectF.topLeft": (), + "QRectF.topRight": (), + "QRectF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.transposed": (), + "QRectF.united": ('PySide2.QtCore.QRectF',), + "QRectF.width": (), + "QRectF.x": (), + "QRectF.y": (), + + # class PySide2.QtCore.QRegExp: + "QRegExp.__init__": [(), ('PySide2.QtCore.QRegExp',), ('str', 'PySide2.QtCore.Qt.CaseSensitivity', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QRegExp.__copy__": (), + "QRegExp.__reduce__": (), + "QRegExp.cap": ('int',), + "QRegExp.captureCount": (), + "QRegExp.capturedTexts": (), + "QRegExp.caseSensitivity": (), + "QRegExp.errorString": (), + "QRegExp.escape": ('str',), + "QRegExp.exactMatch": ('str',), + "QRegExp.indexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.isEmpty": (), + "QRegExp.isMinimal": (), + "QRegExp.isValid": (), + "QRegExp.lastIndexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.matchedLength": (), + "QRegExp.pattern": (), + "QRegExp.patternSyntax": (), + "QRegExp.pos": ('int',), + "QRegExp.replace": ('str', 'str'), + "QRegExp.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QRegExp.setMinimal": ('bool',), + "QRegExp.setPattern": ('str',), + "QRegExp.setPatternSyntax": ('PySide2.QtCore.QRegExp.PatternSyntax',), + "QRegExp.swap": ('PySide2.QtCore.QRegExp',), + + # class PySide2.QtCore.QRegularExpression: + "QRegularExpression.__init__": [(), ('PySide2.QtCore.QRegularExpression',), ('str', 'PySide2.libpyside.PatternOptions')], + "QRegularExpression.__copy__": (), + "QRegularExpression.captureCount": (), + "QRegularExpression.errorString": (), + "QRegularExpression.escape": ('str',), + "QRegularExpression.globalMatch": ('str', 'int', 'PySide2.QtCore.QRegularExpression.MatchType', 'PySide2.libpyside.MatchOptions'), + "QRegularExpression.isValid": (), + "QRegularExpression.match": ('str', 'int', 'PySide2.QtCore.QRegularExpression.MatchType', 'PySide2.libpyside.MatchOptions'), + "QRegularExpression.namedCaptureGroups": (), + "QRegularExpression.optimize": (), + "QRegularExpression.pattern": (), + "QRegularExpression.patternErrorOffset": (), + "QRegularExpression.patternOptions": (), + "QRegularExpression.setPattern": ('str',), + "QRegularExpression.setPatternOptions": ('PySide2.libpyside.PatternOptions',), + "QRegularExpression.swap": ('PySide2.QtCore.QRegularExpression',), + + # class PySide2.QtCore.QRegularExpressionMatch: + "QRegularExpressionMatch.__init__": [(), ('PySide2.QtCore.QRegularExpressionMatch',)], + "QRegularExpressionMatch.__copy__": (), + "QRegularExpressionMatch.captured": [('int',), ('str',)], + "QRegularExpressionMatch.capturedEnd": [('int',), ('str',)], + "QRegularExpressionMatch.capturedLength": [('int',), ('str',)], + "QRegularExpressionMatch.capturedRef": [('int',), ('str',)], + "QRegularExpressionMatch.capturedStart": [('int',), ('str',)], + "QRegularExpressionMatch.capturedTexts": (), + "QRegularExpressionMatch.hasMatch": (), + "QRegularExpressionMatch.hasPartialMatch": (), + "QRegularExpressionMatch.isValid": (), + "QRegularExpressionMatch.lastCapturedIndex": (), + "QRegularExpressionMatch.matchOptions": (), + "QRegularExpressionMatch.matchType": (), + "QRegularExpressionMatch.regularExpression": (), + "QRegularExpressionMatch.swap": ('PySide2.QtCore.QRegularExpressionMatch',), + + # class PySide2.QtCore.QRegularExpressionMatchIterator: + "QRegularExpressionMatchIterator.__init__": [(), ('PySide2.QtCore.QRegularExpressionMatchIterator',)], + "QRegularExpressionMatchIterator.__copy__": (), + "QRegularExpressionMatchIterator.hasNext": (), + "QRegularExpressionMatchIterator.isValid": (), + "QRegularExpressionMatchIterator.matchOptions": (), + "QRegularExpressionMatchIterator.matchType": (), + "QRegularExpressionMatchIterator.peekNext": (), + "QRegularExpressionMatchIterator.regularExpression": (), + "QRegularExpressionMatchIterator.swap": ('PySide2.QtCore.QRegularExpressionMatchIterator',), + + # class PySide2.QtCore.QResource: + "QResource.__init__": ('str', 'PySide2.QtCore.QLocale'), + "QResource.absoluteFilePath": (), + "QResource.addSearchPath": ('str',), + "QResource.children": (), + "QResource.data": (), + "QResource.fileName": (), + "QResource.isCompressed": (), + "QResource.isDir": (), + "QResource.isFile": (), + "QResource.isValid": (), + "QResource.lastModified": (), + "QResource.locale": (), + "QResource.registerResource": ('str', 'str'), + "QResource.registerResourceData": ('Union[str, int]', 'str'), + "QResource.searchPaths": (), + "QResource.setFileName": ('str',), + "QResource.setLocale": ('PySide2.QtCore.QLocale',), + "QResource.size": (), + "QResource.unregisterResource": ('str', 'str'), + "QResource.unregisterResourceData": ('Union[str, int]', 'str'), + + # class PySide2.QtCore.QRunnable: + "QRunnable.__init__": (), + "QRunnable.autoDelete": (), + "QRunnable.run": (), + "QRunnable.setAutoDelete": ('bool',), + + # class PySide2.QtCore.QSaveFile: + "QSaveFile.__init__": [('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QSaveFile.cancelWriting": (), + "QSaveFile.close": (), + "QSaveFile.commit": (), + "QSaveFile.directWriteFallback": (), + "QSaveFile.fileName": (), + "QSaveFile.open": ('PySide2.libpyside.OpenMode',), + "QSaveFile.setDirectWriteFallback": ('bool',), + "QSaveFile.setFileName": ('str',), + "QSaveFile.writeData": ('str', 'int'), + + # class PySide2.QtCore.QSemaphore: + "QSemaphore.__init__": ('int',), + "QSemaphore.acquire": ('int',), + "QSemaphore.available": (), + "QSemaphore.release": ('int',), + "QSemaphore.tryAcquire": [('int',), ('int', 'int')], + + # class PySide2.QtCore.QSemaphoreReleaser: + "QSemaphoreReleaser.__init__": [(), ('PySide2.QtCore.QSemaphore', 'int')], + "QSemaphoreReleaser.cancel": (), + "QSemaphoreReleaser.semaphore": (), + "QSemaphoreReleaser.swap": ('PySide2.QtCore.QSemaphoreReleaser',), + + # class PySide2.QtCore.QSequentialAnimationGroup: + "QSequentialAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QSequentialAnimationGroup.addPause": ('int',), + "QSequentialAnimationGroup.currentAnimation": (), + "QSequentialAnimationGroup.duration": (), + "QSequentialAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QSequentialAnimationGroup.insertPause": ('int', 'int'), + "QSequentialAnimationGroup.updateCurrentTime": ('int',), + "QSequentialAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QSequentialAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QSettings: + "QSettings.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QObject'), ('str', 'str', 'PySide2.QtCore.QObject')], + "QSettings.allKeys": (), + "QSettings.applicationName": (), + "QSettings.beginGroup": ('str',), + "QSettings.beginReadArray": ('str',), + "QSettings.beginWriteArray": ('str', 'int'), + "QSettings.childGroups": (), + "QSettings.childKeys": (), + "QSettings.clear": (), + "QSettings.contains": ('str',), + "QSettings.defaultFormat": (), + "QSettings.endArray": (), + "QSettings.endGroup": (), + "QSettings.event": ('PySide2.QtCore.QEvent',), + "QSettings.fallbacksEnabled": (), + "QSettings.fileName": (), + "QSettings.format": (), + "QSettings.group": (), + "QSettings.iniCodec": (), + "QSettings.isAtomicSyncRequired": (), + "QSettings.isWritable": (), + "QSettings.organizationName": (), + "QSettings.remove": ('str',), + "QSettings.scope": (), + "QSettings.setArrayIndex": ('int',), + "QSettings.setAtomicSyncRequired": ('bool',), + "QSettings.setDefaultFormat": ('PySide2.QtCore.QSettings.Format',), + "QSettings.setFallbacksEnabled": ('bool',), + "QSettings.setIniCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QSettings.setPath": ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str'), + "QSettings.setValue": ('str', 'Any'), + "QSettings.status": (), + "QSettings.sync": (), + "QSettings.value": ('str', 'Any'), + + # class PySide2.QtCore.QSignalBlocker: + "QSignalBlocker.__init__": ('PySide2.QtCore.QObject',), + "QSignalBlocker.reblock": (), + "QSignalBlocker.unblock": (), + + # class PySide2.QtCore.QSignalMapper: + "QSignalMapper.__init__": ('PySide2.QtCore.QObject',), + "QSignalMapper.map": [(), ('PySide2.QtCore.QObject',)], + "QSignalMapper.mapping": [('PySide2.QtCore.QObject',), ('int',), ('str',)], + "QSignalMapper.removeMappings": ('PySide2.QtCore.QObject',), + "QSignalMapper.setMapping": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + + # class PySide2.QtCore.QSignalTransition: + "QSignalTransition.__init__": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',), ('object', 'PySide2.QtCore.QState')], + "QSignalTransition.event": ('PySide2.QtCore.QEvent',), + "QSignalTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QSignalTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QSignalTransition.senderObject": (), + "QSignalTransition.setSenderObject": ('PySide2.QtCore.QObject',), + "QSignalTransition.setSignal": ('PySide2.QtCore.QByteArray',), + "QSignalTransition.signal": (), + + # class PySide2.QtCore.QSize: + "QSize.__init__": [(), ('PySide2.QtCore.QSize',), ('int', 'int')], + "QSize.__copy__": (), + "QSize.__reduce__": (), + "QSize.boundedTo": ('PySide2.QtCore.QSize',), + "QSize.expandedTo": ('PySide2.QtCore.QSize',), + "QSize.height": (), + "QSize.isEmpty": (), + "QSize.isNull": (), + "QSize.isValid": (), + "QSize.scale": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.setHeight": ('int',), + "QSize.setWidth": ('int',), + "QSize.toTuple": (), + "QSize.transpose": (), + "QSize.transposed": (), + "QSize.width": (), + + # class PySide2.QtCore.QSizeF: + "QSizeF.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QSizeF.__copy__": (), + "QSizeF.__reduce__": (), + "QSizeF.boundedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.expandedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.height": (), + "QSizeF.isEmpty": (), + "QSizeF.isNull": (), + "QSizeF.isValid": (), + "QSizeF.scale": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.scaled": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.setHeight": ('float',), + "QSizeF.setWidth": ('float',), + "QSizeF.toSize": (), + "QSizeF.toTuple": (), + "QSizeF.transpose": (), + "QSizeF.transposed": (), + "QSizeF.width": (), + + # class PySide2.QtCore.QSocketNotifier: + "QSocketNotifier.__init__": [('int', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject'), ('object', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject')], + "QSocketNotifier.event": ('PySide2.QtCore.QEvent',), + "QSocketNotifier.isEnabled": (), + "QSocketNotifier.setEnabled": ('bool',), + "QSocketNotifier.socket": (), + "QSocketNotifier.type": (), + + # class PySide2.QtCore.QSortFilterProxyModel: + "QSortFilterProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QSortFilterProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSortFilterProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.dynamicSortFilter": (), + "QSortFilterProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.filterAcceptsColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterAcceptsRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterCaseSensitivity": (), + "QSortFilterProxyModel.filterKeyColumn": (), + "QSortFilterProxyModel.filterRegExp": (), + "QSortFilterProxyModel.filterRole": (), + "QSortFilterProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSortFilterProxyModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.invalidate": (), + "QSortFilterProxyModel.invalidateFilter": (), + "QSortFilterProxyModel.isRecursiveFilteringEnabled": (), + "QSortFilterProxyModel.isSortLocaleAware": (), + "QSortFilterProxyModel.lessThan": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'PySide2.libpyside.MatchFlags'), + "QSortFilterProxyModel.mimeData": ('List[int]',), + "QSortFilterProxyModel.mimeTypes": (), + "QSortFilterProxyModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QSortFilterProxyModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSortFilterProxyModel.setDynamicSortFilter": ('bool',), + "QSortFilterProxyModel.setFilterCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setFilterFixedString": ('str',), + "QSortFilterProxyModel.setFilterKeyColumn": ('int',), + "QSortFilterProxyModel.setFilterRegExp": [('PySide2.QtCore.QRegExp',), ('str',)], + "QSortFilterProxyModel.setFilterRole": ('int',), + "QSortFilterProxyModel.setFilterWildcard": ('str',), + "QSortFilterProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QSortFilterProxyModel.setRecursiveFilteringEnabled": ('bool',), + "QSortFilterProxyModel.setSortCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setSortLocaleAware": ('bool',), + "QSortFilterProxyModel.setSortRole": ('int',), + "QSortFilterProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QSortFilterProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSortFilterProxyModel.sortCaseSensitivity": (), + "QSortFilterProxyModel.sortColumn": (), + "QSortFilterProxyModel.sortOrder": (), + "QSortFilterProxyModel.sortRole": (), + "QSortFilterProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QStandardPaths: + "QStandardPaths.displayName": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.enableTestMode": ('bool',), + "QStandardPaths.findExecutable": ('str', 'List[str]'), + "QStandardPaths.isTestModeEnabled": (), + "QStandardPaths.locate": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'PySide2.libpyside.LocateOptions'), + "QStandardPaths.locateAll": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'PySide2.libpyside.LocateOptions'), + "QStandardPaths.setTestModeEnabled": ('bool',), + "QStandardPaths.standardLocations": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.writableLocation": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + + # class PySide2.QtCore.QState: + "QState.__init__": [('PySide2.QtCore.QState',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QState')], + "QState.addTransition": [('PySide2.QtCore.QAbstractState',), ('PySide2.QtCore.QAbstractTransition',), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QAbstractState'), ('object', 'PySide2.QtCore.QAbstractState')], + "QState.assignProperty": ('PySide2.QtCore.QObject', 'str', 'Any'), + "QState.childMode": (), + "QState.errorState": (), + "QState.event": ('PySide2.QtCore.QEvent',), + "QState.initialState": (), + "QState.onEntry": ('PySide2.QtCore.QEvent',), + "QState.onExit": ('PySide2.QtCore.QEvent',), + "QState.removeTransition": ('PySide2.QtCore.QAbstractTransition',), + "QState.setChildMode": ('PySide2.QtCore.QState.ChildMode',), + "QState.setErrorState": ('PySide2.QtCore.QAbstractState',), + "QState.setInitialState": ('PySide2.QtCore.QAbstractState',), + "QState.transitions": (), + + # class PySide2.QtCore.QStateMachine: + "QStateMachine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QObject')], + "QStateMachine.addDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.addState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.beginMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.beginSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.cancelDelayedEvent": ('int',), + "QStateMachine.clearError": (), + "QStateMachine.configuration": (), + "QStateMachine.defaultAnimations": (), + "QStateMachine.endMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.endSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.error": (), + "QStateMachine.errorString": (), + "QStateMachine.event": ('PySide2.QtCore.QEvent',), + "QStateMachine.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStateMachine.globalRestorePolicy": (), + "QStateMachine.isAnimated": (), + "QStateMachine.isRunning": (), + "QStateMachine.onEntry": ('PySide2.QtCore.QEvent',), + "QStateMachine.onExit": ('PySide2.QtCore.QEvent',), + "QStateMachine.postDelayedEvent": ('PySide2.QtCore.QEvent', 'int'), + "QStateMachine.postEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QStateMachine.EventPriority'), + "QStateMachine.removeDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.removeState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.setAnimated": ('bool',), + "QStateMachine.setGlobalRestorePolicy": ('PySide2.QtCore.QState.RestorePolicy',), + "QStateMachine.setRunning": ('bool',), + "QStateMachine.start": (), + "QStateMachine.stop": (), + + # class PySide2.QtCore.QStorageInfo: + "QStorageInfo.__init__": [(), ('PySide2.QtCore.QDir',), ('PySide2.QtCore.QStorageInfo',), ('str',)], + "QStorageInfo.__copy__": (), + "QStorageInfo.blockSize": (), + "QStorageInfo.bytesAvailable": (), + "QStorageInfo.bytesFree": (), + "QStorageInfo.bytesTotal": (), + "QStorageInfo.device": (), + "QStorageInfo.displayName": (), + "QStorageInfo.fileSystemType": (), + "QStorageInfo.isReadOnly": (), + "QStorageInfo.isReady": (), + "QStorageInfo.isRoot": (), + "QStorageInfo.isValid": (), + "QStorageInfo.mountedVolumes": (), + "QStorageInfo.name": (), + "QStorageInfo.refresh": (), + "QStorageInfo.root": (), + "QStorageInfo.rootPath": (), + "QStorageInfo.setPath": ('str',), + "QStorageInfo.subvolume": (), + "QStorageInfo.swap": ('PySide2.QtCore.QStorageInfo',), + + # class PySide2.QtCore.QStringListModel: + "QStringListModel.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QStringListModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStringListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QStringListModel.setStringList": ('List[str]',), + "QStringListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStringListModel.stringList": (), + "QStringListModel.supportedDropActions": (), + + # class PySide2.QtCore.QSysInfo: + "QSysInfo.__init__": (), + "QSysInfo.bootUniqueId": (), + "QSysInfo.buildAbi": (), + "QSysInfo.buildCpuArchitecture": (), + "QSysInfo.currentCpuArchitecture": (), + "QSysInfo.kernelType": (), + "QSysInfo.kernelVersion": (), + "QSysInfo.machineHostName": (), + "QSysInfo.machineUniqueId": (), + "QSysInfo.prettyProductName": (), + "QSysInfo.productType": (), + "QSysInfo.productVersion": (), + "QSysInfo.windowsVersion": (), + + # class PySide2.QtCore.QSystemSemaphore: + "QSystemSemaphore.__init__": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + "QSystemSemaphore.acquire": (), + "QSystemSemaphore.error": (), + "QSystemSemaphore.errorString": (), + "QSystemSemaphore.key": (), + "QSystemSemaphore.release": ('int',), + "QSystemSemaphore.setKey": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + + # class PySide2.QtCore.QTemporaryDir: + "QTemporaryDir.__init__": [(), ('str',)], + "QTemporaryDir.autoRemove": (), + "QTemporaryDir.errorString": (), + "QTemporaryDir.filePath": ('str',), + "QTemporaryDir.isValid": (), + "QTemporaryDir.path": (), + "QTemporaryDir.remove": (), + "QTemporaryDir.setAutoRemove": ('bool',), + + # class PySide2.QtCore.QTemporaryFile: + "QTemporaryFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QTemporaryFile.autoRemove": (), + "QTemporaryFile.createLocalFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.createNativeFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.fileName": (), + "QTemporaryFile.fileTemplate": (), + "QTemporaryFile.open": [(), ('PySide2.libpyside.OpenMode',)], + "QTemporaryFile.rename": ('str',), + "QTemporaryFile.setAutoRemove": ('bool',), + "QTemporaryFile.setFileTemplate": ('str',), + + # class PySide2.QtCore.QTextBoundaryFinder: + "QTextBoundaryFinder.__init__": [(), ('PySide2.QtCore.QTextBoundaryFinder',), ('PySide2.QtCore.QTextBoundaryFinder.BoundaryType', 'str')], + "QTextBoundaryFinder.__copy__": (), + "QTextBoundaryFinder.boundaryReasons": (), + "QTextBoundaryFinder.isAtBoundary": (), + "QTextBoundaryFinder.isValid": (), + "QTextBoundaryFinder.position": (), + "QTextBoundaryFinder.setPosition": ('int',), + "QTextBoundaryFinder.string": (), + "QTextBoundaryFinder.toEnd": (), + "QTextBoundaryFinder.toNextBoundary": (), + "QTextBoundaryFinder.toPreviousBoundary": (), + "QTextBoundaryFinder.toStart": (), + "QTextBoundaryFinder.type": (), + + # class PySide2.QtCore.QTextCodec: + "QTextCodec.__init__": (), + "QTextCodec.aliases": (), + "QTextCodec.availableCodecs": (), + "QTextCodec.availableMibs": (), + "QTextCodec.canEncode": [('Union[str, int]',), ('str',)], + "QTextCodec.codecForHtml": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.codecForLocale": (), + "QTextCodec.codecForMib": ('int',), + "QTextCodec.codecForName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QTextCodec.codecForUtfText": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.convertToUnicode": ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState'), + "QTextCodec.fromUnicode": ('str',), + "QTextCodec.makeDecoder": ('PySide2.libpyside.ConversionFlags',), + "QTextCodec.makeEncoder": ('PySide2.libpyside.ConversionFlags',), + "QTextCodec.mibEnum": (), + "QTextCodec.name": (), + "QTextCodec.setCodecForLocale": ('PySide2.QtCore.QTextCodec',), + "QTextCodec.toUnicode": [('PySide2.QtCore.QByteArray',), ('str',), ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState')], + + # class PySide2.QtCore.QTextDecoder: + "QTextDecoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'PySide2.libpyside.ConversionFlags')], + "QTextDecoder.hasFailure": (), + "QTextDecoder.toUnicode": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QTextEncoder: + "QTextEncoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'PySide2.libpyside.ConversionFlags')], + "QTextEncoder.fromUnicode": ('str',), + "QTextEncoder.hasFailure": (), + + # class PySide2.QtCore.QTextStream: + "QTextStream.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.libpyside.OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QTextStream.atEnd": (), + "QTextStream.autoDetectUnicode": (), + "QTextStream.codec": (), + "QTextStream.device": (), + "QTextStream.fieldAlignment": (), + "QTextStream.fieldWidth": (), + "QTextStream.flush": (), + "QTextStream.generateByteOrderMark": (), + "QTextStream.integerBase": (), + "QTextStream.locale": (), + "QTextStream.numberFlags": (), + "QTextStream.padChar": (), + "QTextStream.pos": (), + "QTextStream.read": ('int',), + "QTextStream.readAll": (), + "QTextStream.readLine": ('int',), + "QTextStream.realNumberNotation": (), + "QTextStream.realNumberPrecision": (), + "QTextStream.reset": (), + "QTextStream.resetStatus": (), + "QTextStream.seek": ('int',), + "QTextStream.setAutoDetectUnicode": ('bool',), + "QTextStream.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QTextStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextStream.setFieldAlignment": ('PySide2.QtCore.QTextStream.FieldAlignment',), + "QTextStream.setFieldWidth": ('int',), + "QTextStream.setGenerateByteOrderMark": ('bool',), + "QTextStream.setIntegerBase": ('int',), + "QTextStream.setLocale": ('PySide2.QtCore.QLocale',), + "QTextStream.setNumberFlags": ('PySide2.libpyside.NumberFlags',), + "QTextStream.setPadChar": ('Union[str, int]',), + "QTextStream.setRealNumberNotation": ('PySide2.QtCore.QTextStream.RealNumberNotation',), + "QTextStream.setRealNumberPrecision": ('int',), + "QTextStream.setStatus": ('PySide2.QtCore.QTextStream.Status',), + "QTextStream.skipWhiteSpace": (), + "QTextStream.status": (), + "QTextStream.string": (), + + # class PySide2.QtCore.QTextStreamManipulator: + "QTextStreamManipulator.__copy__": (), + "QTextStreamManipulator.exec_": ('PySide2.QtCore.QTextStream',), + + # class PySide2.QtCore.QThread: + "QThread.__init__": ('PySide2.QtCore.QObject',), + "QThread.currentThread": (), + "QThread.event": ('PySide2.QtCore.QEvent',), + "QThread.eventDispatcher": (), + "QThread.exec_": (), + "QThread.exit": ('int',), + "QThread.idealThreadCount": (), + "QThread.isFinished": (), + "QThread.isInterruptionRequested": (), + "QThread.isRunning": (), + "QThread.loopLevel": (), + "QThread.msleep": ('int',), + "QThread.priority": (), + "QThread.quit": (), + "QThread.requestInterruption": (), + "QThread.run": (), + "QThread.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QThread.setPriority": ('PySide2.QtCore.QThread.Priority',), + "QThread.setStackSize": ('int',), + "QThread.setTerminationEnabled": ('bool',), + "QThread.sleep": ('int',), + "QThread.stackSize": (), + "QThread.start": ('PySide2.QtCore.QThread.Priority',), + "QThread.terminate": (), + "QThread.usleep": ('int',), + "QThread.wait": ('int',), + "QThread.yieldCurrentThread": (), + + # class PySide2.QtCore.QThreadPool: + "QThreadPool.__init__": ('PySide2.QtCore.QObject',), + "QThreadPool.activeThreadCount": (), + "QThreadPool.cancel": ('PySide2.QtCore.QRunnable',), + "QThreadPool.clear": (), + "QThreadPool.expiryTimeout": (), + "QThreadPool.globalInstance": (), + "QThreadPool.maxThreadCount": (), + "QThreadPool.releaseThread": (), + "QThreadPool.reserveThread": (), + "QThreadPool.setExpiryTimeout": ('int',), + "QThreadPool.setMaxThreadCount": ('int',), + "QThreadPool.setStackSize": ('int',), + "QThreadPool.stackSize": (), + "QThreadPool.start": ('PySide2.QtCore.QRunnable', 'int'), + "QThreadPool.tryStart": ('PySide2.QtCore.QRunnable',), + "QThreadPool.tryTake": ('PySide2.QtCore.QRunnable',), + "QThreadPool.waitForDone": ('int',), + + # class PySide2.QtCore.QTime: + "QTime.__init__": [(), ('PySide2.QtCore.QTime',), ('int', 'int', 'int', 'int')], + "QTime.__copy__": (), + "QTime.__reduce__": (), + "QTime.addMSecs": ('int',), + "QTime.addSecs": ('int',), + "QTime.currentTime": (), + "QTime.elapsed": (), + "QTime.fromMSecsSinceStartOfDay": ('int',), + "QTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QTime.hour": (), + "QTime.isNull": (), + "QTime.isValid": [(), ('int', 'int', 'int', 'int')], + "QTime.minute": (), + "QTime.msec": (), + "QTime.msecsSinceStartOfDay": (), + "QTime.msecsTo": ('PySide2.QtCore.QTime',), + "QTime.restart": (), + "QTime.second": (), + "QTime.secsTo": ('PySide2.QtCore.QTime',), + "QTime.setHMS": ('int', 'int', 'int', 'int'), + "QTime.start": (), + "QTime.toPython": (), + "QTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + + # class PySide2.QtCore.QTimeLine: + "QTimeLine.__init__": ('int', 'PySide2.QtCore.QObject'), + "QTimeLine.currentFrame": (), + "QTimeLine.currentTime": (), + "QTimeLine.currentValue": (), + "QTimeLine.curveShape": (), + "QTimeLine.direction": (), + "QTimeLine.duration": (), + "QTimeLine.easingCurve": (), + "QTimeLine.endFrame": (), + "QTimeLine.frameForTime": ('int',), + "QTimeLine.loopCount": (), + "QTimeLine.resume": (), + "QTimeLine.setCurrentTime": ('int',), + "QTimeLine.setCurveShape": ('PySide2.QtCore.QTimeLine.CurveShape',), + "QTimeLine.setDirection": ('PySide2.QtCore.QTimeLine.Direction',), + "QTimeLine.setDuration": ('int',), + "QTimeLine.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QTimeLine.setEndFrame": ('int',), + "QTimeLine.setFrameRange": ('int', 'int'), + "QTimeLine.setLoopCount": ('int',), + "QTimeLine.setPaused": ('bool',), + "QTimeLine.setStartFrame": ('int',), + "QTimeLine.setUpdateInterval": ('int',), + "QTimeLine.start": (), + "QTimeLine.startFrame": (), + "QTimeLine.state": (), + "QTimeLine.stop": (), + "QTimeLine.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimeLine.toggleDirection": (), + "QTimeLine.updateInterval": (), + "QTimeLine.valueForTime": ('int',), + + # class PySide2.QtCore.QTimeZone: + "QTimeZone.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'int', 'str', 'str', 'PySide2.QtCore.QLocale.Country', 'str'), ('PySide2.QtCore.QTimeZone',), ('int',)], + "QTimeZone.__copy__": (), + "QTimeZone.abbreviation": ('PySide2.QtCore.QDateTime',), + "QTimeZone.availableTimeZoneIds": [(), ('PySide2.QtCore.QLocale.Country',), ('int',)], + "QTimeZone.comment": (), + "QTimeZone.country": (), + "QTimeZone.daylightTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.displayName": [('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale'), ('PySide2.QtCore.QTimeZone.TimeType', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale')], + "QTimeZone.hasDaylightTime": (), + "QTimeZone.hasTransitions": (), + "QTimeZone.ianaIdToWindowsId": ('PySide2.QtCore.QByteArray',), + "QTimeZone.id": (), + "QTimeZone.isDaylightTime": ('PySide2.QtCore.QDateTime',), + "QTimeZone.isTimeZoneIdAvailable": ('PySide2.QtCore.QByteArray',), + "QTimeZone.isValid": (), + "QTimeZone.nextTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetData": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetFromUtc": ('PySide2.QtCore.QDateTime',), + "QTimeZone.previousTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.standardTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.swap": ('PySide2.QtCore.QTimeZone',), + "QTimeZone.systemTimeZone": (), + "QTimeZone.systemTimeZoneId": (), + "QTimeZone.transitions": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QTimeZone.utc": (), + "QTimeZone.windowsIdToDefaultIanaId": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + "QTimeZone.windowsIdToIanaIds": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + + # class PySide2.QtCore.QTimer: + "QTimer.__init__": ('PySide2.QtCore.QObject',), + "QTimer.interval": (), + "QTimer.isActive": (), + "QTimer.isSingleShot": (), + "QTimer.killTimer": ('int',), + "QTimer.remainingTime": (), + "QTimer.setInterval": ('int',), + "QTimer.setSingleShot": ('bool',), + "QTimer.setTimerType": ('PySide2.QtCore.Qt.TimerType',), + "QTimer.singleShot": [('int', 'Callable'), ('int', 'PySide2.QtCore.QObject', 'str'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject', 'str')], + "QTimer.start": [(), ('int',)], + "QTimer.stop": (), + "QTimer.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimer.timerId": (), + "QTimer.timerType": (), + + # class PySide2.QtCore.QTimerEvent: + "QTimerEvent.__init__": ('int',), + "QTimerEvent.timerId": (), + + # class PySide2.QtCore.QTranslator: + "QTranslator.__init__": ('PySide2.QtCore.QObject',), + "QTranslator.isEmpty": (), + "QTranslator.load": [('PySide2.QtCore.QLocale', 'str', 'str', 'str', 'str'), ('Union[str, int]', 'int', 'str'), ('str', 'str', 'str', 'str')], + "QTranslator.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QUrl: + "QUrl.__init__": [(), ('PySide2.QtCore.QUrl',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.__copy__": (), + "QUrl.__reduce__": (), + "QUrl.adjusted": ('PySide2.libpyside.FormattingOptions',), + "QUrl.authority": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.clear": (), + "QUrl.errorString": (), + "QUrl.fileName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fragment": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fromAce": ('PySide2.QtCore.QByteArray',), + "QUrl.fromEncoded": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromLocalFile": ('str',), + "QUrl.fromPercentEncoding": ('PySide2.QtCore.QByteArray',), + "QUrl.fromStringList": ('List[str]', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromUserInput": [('str',), ('str', 'str', 'PySide2.libpyside.UserInputResolutionOptions')], + "QUrl.hasFragment": (), + "QUrl.hasQuery": (), + "QUrl.host": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.idnWhitelist": (), + "QUrl.isEmpty": (), + "QUrl.isLocalFile": (), + "QUrl.isParentOf": ('PySide2.QtCore.QUrl',), + "QUrl.isRelative": (), + "QUrl.isValid": (), + "QUrl.matches": ('PySide2.QtCore.QUrl', 'PySide2.libpyside.FormattingOptions'), + "QUrl.password": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.path": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.port": ('int',), + "QUrl.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.resolved": ('PySide2.QtCore.QUrl',), + "QUrl.scheme": (), + "QUrl.setAuthority": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setFragment": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setHost": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setIdnWhitelist": ('List[str]',), + "QUrl.setPassword": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPath": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPort": ('int',), + "QUrl.setQuery": [('PySide2.QtCore.QUrlQuery',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.setScheme": ('str',), + "QUrl.setUrl": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserInfo": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserName": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.swap": ('PySide2.QtCore.QUrl',), + "QUrl.toAce": ('str',), + "QUrl.toDisplayString": ('PySide2.libpyside.FormattingOptions',), + "QUrl.toEncoded": ('PySide2.libpyside.FormattingOptions',), + "QUrl.toLocalFile": (), + "QUrl.toPercentEncoding": ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QUrl.toString": ('PySide2.libpyside.FormattingOptions',), + "QUrl.toStringList": ('list', 'PySide2.libpyside.FormattingOptions'), + "QUrl.topLevelDomain": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.url": ('PySide2.libpyside.FormattingOptions',), + "QUrl.userInfo": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.userName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QUrlQuery: + "QUrlQuery.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrlQuery',), ('str',)], + "QUrlQuery.__copy__": (), + "QUrlQuery.addQueryItem": ('str', 'str'), + "QUrlQuery.allQueryItemValues": ('str', 'PySide2.QtCore.QUrl.ComponentFormattingOption'), + "QUrlQuery.clear": (), + "QUrlQuery.defaultQueryPairDelimiter": (), + "QUrlQuery.defaultQueryValueDelimiter": (), + "QUrlQuery.hasQueryItem": ('str',), + "QUrlQuery.isEmpty": (), + "QUrlQuery.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrlQuery.queryItemValue": ('str', 'PySide2.QtCore.QUrl.ComponentFormattingOption'), + "QUrlQuery.queryItems": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrlQuery.queryPairDelimiter": (), + "QUrlQuery.queryValueDelimiter": (), + "QUrlQuery.removeAllQueryItems": ('str',), + "QUrlQuery.removeQueryItem": ('str',), + "QUrlQuery.setQuery": ('str',), + "QUrlQuery.setQueryDelimiters": ('Union[str, int]', 'Union[str, int]'), + "QUrlQuery.setQueryItems": ('list',), + "QUrlQuery.swap": ('PySide2.QtCore.QUrlQuery',), + "QUrlQuery.toString": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QUuid: + "QUuid.__init__": [(), ('PySide2.QtCore.QByteArray',), ('int', 'int', 'int', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), ('str',)], + "QUuid.__copy__": (), + "QUuid.__reduce__": (), + "QUuid.createUuid": (), + "QUuid.createUuidV3": [('PySide2.QtCore.QUuid', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QUuid', 'str')], + "QUuid.createUuidV5": [('PySide2.QtCore.QUuid', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QUuid', 'str')], + "QUuid.fromRfc4122": ('PySide2.QtCore.QByteArray',), + "QUuid.isNull": (), + "QUuid.toByteArray": [(), ('PySide2.QtCore.QUuid.StringFormat',)], + "QUuid.toRfc4122": (), + "QUuid.toString": [(), ('PySide2.QtCore.QUuid.StringFormat',)], + "QUuid.variant": (), + "QUuid.version": (), + + # class PySide2.QtCore.QVariantAnimation: + "QVariantAnimation.__init__": ('PySide2.QtCore.QObject',), + "QVariantAnimation.currentValue": (), + "QVariantAnimation.duration": (), + "QVariantAnimation.easingCurve": (), + "QVariantAnimation.endValue": (), + "QVariantAnimation.event": ('PySide2.QtCore.QEvent',), + "QVariantAnimation.interpolated": ('Any', 'Any', 'float'), + "QVariantAnimation.keyValueAt": ('float',), + "QVariantAnimation.keyValues": (), + "QVariantAnimation.setDuration": ('int',), + "QVariantAnimation.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QVariantAnimation.setEndValue": ('Any',), + "QVariantAnimation.setKeyValueAt": ('float', 'Any'), + "QVariantAnimation.setKeyValues": ('list',), + "QVariantAnimation.setStartValue": ('Any',), + "QVariantAnimation.startValue": (), + "QVariantAnimation.updateCurrentTime": ('int',), + "QVariantAnimation.updateCurrentValue": ('Any',), + "QVariantAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QVersionNumber: + "QVersionNumber.__init__": [(), ('int',), ('int', 'int'), ('int', 'int', 'int'), ('list',)], + "QVersionNumber.__copy__": (), + "QVersionNumber.commonPrefix": ('PySide2.QtCore.QVersionNumber', 'PySide2.QtCore.QVersionNumber'), + "QVersionNumber.compare": ('PySide2.QtCore.QVersionNumber', 'PySide2.QtCore.QVersionNumber'), + "QVersionNumber.fromString": ('str', 'int'), + "QVersionNumber.isNormalized": (), + "QVersionNumber.isNull": (), + "QVersionNumber.isPrefixOf": ('PySide2.QtCore.QVersionNumber',), + "QVersionNumber.majorVersion": (), + "QVersionNumber.microVersion": (), + "QVersionNumber.minorVersion": (), + "QVersionNumber.normalized": (), + "QVersionNumber.segmentAt": ('int',), + "QVersionNumber.segmentCount": (), + "QVersionNumber.segments": (), + "QVersionNumber.toString": (), + + # class PySide2.QtCore.QWaitCondition: + "QWaitCondition.__init__": (), + "QWaitCondition.notify_all": (), + "QWaitCondition.notify_one": (), + "QWaitCondition.wait": [('PySide2.QtCore.QMutex', 'int'), ('PySide2.QtCore.QReadWriteLock', 'int')], + "QWaitCondition.wakeAll": (), + "QWaitCondition.wakeOne": (), + + # class PySide2.QtCore.QWinEventNotifier: + "QWinEventNotifier.__init__": [('PySide2.QtCore.QObject',), ('int', 'PySide2.QtCore.QObject')], + "QWinEventNotifier.event": ('PySide2.QtCore.QEvent',), + "QWinEventNotifier.handle": (), + "QWinEventNotifier.isEnabled": (), + "QWinEventNotifier.setEnabled": ('bool',), + "QWinEventNotifier.setHandle": ('int',), + + # class PySide2.QtCore.QWriteLocker: + "QWriteLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QWriteLocker.__enter__": (), + "QWriteLocker.__exit__": ('object', 'object', 'object'), + "QWriteLocker.readWriteLock": (), + "QWriteLocker.relock": (), + "QWriteLocker.unlock": (), + + # class PySide2.QtCore.QXmlStreamAttribute: + "QXmlStreamAttribute.__init__": [(), ('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttribute.__copy__": (), + "QXmlStreamAttribute.isDefault": (), + "QXmlStreamAttribute.name": (), + "QXmlStreamAttribute.namespaceUri": (), + "QXmlStreamAttribute.prefix": (), + "QXmlStreamAttribute.qualifiedName": (), + "QXmlStreamAttribute.value": (), + + # class PySide2.QtCore.QXmlStreamAttributes: + "QXmlStreamAttributes.__init__": [(), ('PySide2.QtCore.QXmlStreamAttributes',)], + "QXmlStreamAttributes.__copy__": (), + "QXmlStreamAttributes.append": [('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttributes.at": ('int',), + "QXmlStreamAttributes.back": (), + "QXmlStreamAttributes.capacity": (), + "QXmlStreamAttributes.clear": (), + "QXmlStreamAttributes.constData": (), + "QXmlStreamAttributes.constFirst": (), + "QXmlStreamAttributes.constLast": (), + "QXmlStreamAttributes.contains": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.count": [(), ('PySide2.QtCore.QXmlStreamAttribute',)], + "QXmlStreamAttributes.data": (), + "QXmlStreamAttributes.empty": (), + "QXmlStreamAttributes.endsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.fill": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.first": (), + "QXmlStreamAttributes.front": (), + "QXmlStreamAttributes.hasAttribute": [('str',), ('str', 'str')], + "QXmlStreamAttributes.indexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.insert": [('int', 'PySide2.QtCore.QXmlStreamAttribute'), ('int', 'int', 'PySide2.QtCore.QXmlStreamAttribute')], + "QXmlStreamAttributes.isEmpty": (), + "QXmlStreamAttributes.isSharedWith": ('list',), + "QXmlStreamAttributes.last": (), + "QXmlStreamAttributes.lastIndexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.length": (), + "QXmlStreamAttributes.mid": ('int', 'int'), + "QXmlStreamAttributes.move": ('int', 'int'), + "QXmlStreamAttributes.prepend": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.remove": [('int',), ('int', 'int')], + "QXmlStreamAttributes.removeAll": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.removeAt": ('int',), + "QXmlStreamAttributes.removeFirst": (), + "QXmlStreamAttributes.removeLast": (), + "QXmlStreamAttributes.removeOne": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.replace": ('int', 'PySide2.QtCore.QXmlStreamAttribute'), + "QXmlStreamAttributes.reserve": ('int',), + "QXmlStreamAttributes.resize": ('int',), + "QXmlStreamAttributes.setSharable": ('bool',), + "QXmlStreamAttributes.shrink_to_fit": (), + "QXmlStreamAttributes.size": (), + "QXmlStreamAttributes.squeeze": (), + "QXmlStreamAttributes.startsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.swap": ('list',), + "QXmlStreamAttributes.takeAt": ('int',), + "QXmlStreamAttributes.takeFirst": (), + "QXmlStreamAttributes.takeLast": (), + "QXmlStreamAttributes.value": [('str',), ('str', 'str')], + + # class PySide2.QtCore.QXmlStreamEntityDeclaration: + "QXmlStreamEntityDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamEntityDeclaration',)], + "QXmlStreamEntityDeclaration.__copy__": (), + "QXmlStreamEntityDeclaration.name": (), + "QXmlStreamEntityDeclaration.notationName": (), + "QXmlStreamEntityDeclaration.publicId": (), + "QXmlStreamEntityDeclaration.systemId": (), + "QXmlStreamEntityDeclaration.value": (), + + # class PySide2.QtCore.QXmlStreamEntityResolver: + "QXmlStreamEntityResolver.__init__": (), + "QXmlStreamEntityResolver.resolveEntity": ('str', 'str'), + "QXmlStreamEntityResolver.resolveUndeclaredEntity": ('str',), + + # class PySide2.QtCore.QXmlStreamNamespaceDeclaration: + "QXmlStreamNamespaceDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), ('str', 'str')], + "QXmlStreamNamespaceDeclaration.__copy__": (), + "QXmlStreamNamespaceDeclaration.namespaceUri": (), + "QXmlStreamNamespaceDeclaration.prefix": (), + + # class PySide2.QtCore.QXmlStreamNotationDeclaration: + "QXmlStreamNotationDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNotationDeclaration',)], + "QXmlStreamNotationDeclaration.__copy__": (), + "QXmlStreamNotationDeclaration.name": (), + "QXmlStreamNotationDeclaration.publicId": (), + "QXmlStreamNotationDeclaration.systemId": (), + + # class PySide2.QtCore.QXmlStreamReader: + "QXmlStreamReader.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str',)], + "QXmlStreamReader.addData": [('PySide2.QtCore.QByteArray',), ('str',)], + "QXmlStreamReader.addExtraNamespaceDeclaration": ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), + "QXmlStreamReader.addExtraNamespaceDeclarations": ('list',), + "QXmlStreamReader.atEnd": (), + "QXmlStreamReader.attributes": (), + "QXmlStreamReader.characterOffset": (), + "QXmlStreamReader.clear": (), + "QXmlStreamReader.columnNumber": (), + "QXmlStreamReader.device": (), + "QXmlStreamReader.documentEncoding": (), + "QXmlStreamReader.documentVersion": (), + "QXmlStreamReader.dtdName": (), + "QXmlStreamReader.dtdPublicId": (), + "QXmlStreamReader.dtdSystemId": (), + "QXmlStreamReader.entityDeclarations": (), + "QXmlStreamReader.entityResolver": (), + "QXmlStreamReader.error": (), + "QXmlStreamReader.errorString": (), + "QXmlStreamReader.hasError": (), + "QXmlStreamReader.isCDATA": (), + "QXmlStreamReader.isCharacters": (), + "QXmlStreamReader.isComment": (), + "QXmlStreamReader.isDTD": (), + "QXmlStreamReader.isEndDocument": (), + "QXmlStreamReader.isEndElement": (), + "QXmlStreamReader.isEntityReference": (), + "QXmlStreamReader.isProcessingInstruction": (), + "QXmlStreamReader.isStandaloneDocument": (), + "QXmlStreamReader.isStartDocument": (), + "QXmlStreamReader.isStartElement": (), + "QXmlStreamReader.isWhitespace": (), + "QXmlStreamReader.lineNumber": (), + "QXmlStreamReader.name": (), + "QXmlStreamReader.namespaceDeclarations": (), + "QXmlStreamReader.namespaceProcessing": (), + "QXmlStreamReader.namespaceUri": (), + "QXmlStreamReader.notationDeclarations": (), + "QXmlStreamReader.prefix": (), + "QXmlStreamReader.processingInstructionData": (), + "QXmlStreamReader.processingInstructionTarget": (), + "QXmlStreamReader.qualifiedName": (), + "QXmlStreamReader.raiseError": ('str',), + "QXmlStreamReader.readElementText": ('PySide2.QtCore.QXmlStreamReader.ReadElementTextBehaviour',), + "QXmlStreamReader.readNext": (), + "QXmlStreamReader.readNextStartElement": (), + "QXmlStreamReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamReader.setEntityResolver": ('PySide2.QtCore.QXmlStreamEntityResolver',), + "QXmlStreamReader.setNamespaceProcessing": ('bool',), + "QXmlStreamReader.skipCurrentElement": (), + "QXmlStreamReader.text": (), + "QXmlStreamReader.tokenString": (), + "QXmlStreamReader.tokenType": (), + + # class PySide2.QtCore.QXmlStreamWriter: + "QXmlStreamWriter.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QXmlStreamWriter.autoFormatting": (), + "QXmlStreamWriter.autoFormattingIndent": (), + "QXmlStreamWriter.codec": (), + "QXmlStreamWriter.device": (), + "QXmlStreamWriter.hasError": (), + "QXmlStreamWriter.setAutoFormatting": ('bool',), + "QXmlStreamWriter.setAutoFormattingIndent": ('int',), + "QXmlStreamWriter.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QXmlStreamWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamWriter.writeAttribute": [('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamWriter.writeAttributes": ('PySide2.QtCore.QXmlStreamAttributes',), + "QXmlStreamWriter.writeCDATA": ('str',), + "QXmlStreamWriter.writeCharacters": ('str',), + "QXmlStreamWriter.writeComment": ('str',), + "QXmlStreamWriter.writeCurrentToken": ('PySide2.QtCore.QXmlStreamReader',), + "QXmlStreamWriter.writeDTD": ('str',), + "QXmlStreamWriter.writeDefaultNamespace": ('str',), + "QXmlStreamWriter.writeEmptyElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeEndDocument": (), + "QXmlStreamWriter.writeEndElement": (), + "QXmlStreamWriter.writeEntityReference": ('str',), + "QXmlStreamWriter.writeNamespace": ('str', 'str'), + "QXmlStreamWriter.writeProcessingInstruction": ('str', 'str'), + "QXmlStreamWriter.writeStartDocument": [(), ('str',), ('str', 'bool')], + "QXmlStreamWriter.writeStartElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeTextElement": [('str', 'str'), ('str', 'str', 'str')], + + # class PySide2.QtCore.Qt: + + # class PySide2.QtCore.QtMsgType: + + # class PySide2.QtCore.Signal: + + # class PySide2.QtCore.Slot: + }) + +# Module PySide2.QtGui +if "PySide2.QtGui" in sys.modules: + dict.update({ + + # class PySide2.QtGui.QAbstractOpenGLFunctions: + "QAbstractOpenGLFunctions.__init__": (), + "QAbstractOpenGLFunctions.initializeOpenGLFunctions": (), + "QAbstractOpenGLFunctions.isInitialized": (), + "QAbstractOpenGLFunctions.owningContext": (), + "QAbstractOpenGLFunctions.setOwningContext": ('PySide2.QtGui.QOpenGLContext',), + + # class PySide2.QtGui.QAbstractTextDocumentLayout: + "QAbstractTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QAbstractTextDocumentLayout.anchorAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QAbstractTextDocumentLayout.document": (), + "QAbstractTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QAbstractTextDocumentLayout.documentSize": (), + "QAbstractTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QAbstractTextDocumentLayout.drawInlineObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.format": ('int',), + "QAbstractTextDocumentLayout.formatAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.formatIndex": ('int',), + "QAbstractTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QAbstractTextDocumentLayout.handlerForObject": ('int',), + "QAbstractTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QAbstractTextDocumentLayout.imageAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.pageCount": (), + "QAbstractTextDocumentLayout.paintDevice": (), + "QAbstractTextDocumentLayout.positionInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.registerHandler": ('int', 'PySide2.QtCore.QObject'), + "QAbstractTextDocumentLayout.resizeInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.setPaintDevice": ('PySide2.QtGui.QPaintDevice',), + "QAbstractTextDocumentLayout.unregisterHandler": ('int', 'PySide2.QtCore.QObject'), + + # class PySide2.QtGui.QAccessible: + "QAccessible.__copy__": (), + "QAccessible.accessibleInterface": ('int',), + "QAccessible.cleanup": (), + "QAccessible.deleteAccessibleInterface": ('int',), + "QAccessible.isActive": (), + "QAccessible.qAccessibleTextBoundaryHelper": ('PySide2.QtGui.QTextCursor', 'PySide2.QtGui.QAccessible.TextBoundaryType'), + "QAccessible.queryAccessibleInterface": ('PySide2.QtCore.QObject',), + "QAccessible.registerAccessibleInterface": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessible.setActive": ('bool',), + "QAccessible.setRootObject": ('PySide2.QtCore.QObject',), + "QAccessible.uniqueId": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessible.updateAccessibility": ('PySide2.QtGui.QAccessibleEvent',), + + # class PySide2.QtGui.QAccessibleEditableTextInterface: + "QAccessibleEditableTextInterface.__init__": (), + "QAccessibleEditableTextInterface.deleteText": ('int', 'int'), + "QAccessibleEditableTextInterface.insertText": ('int', 'str'), + "QAccessibleEditableTextInterface.replaceText": ('int', 'int', 'str'), + + # class PySide2.QtGui.QAccessibleEvent: + "QAccessibleEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessible.Event'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessible.Event')], + "QAccessibleEvent.accessibleInterface": (), + "QAccessibleEvent.child": (), + "QAccessibleEvent.object": (), + "QAccessibleEvent.setChild": ('int',), + "QAccessibleEvent.type": (), + "QAccessibleEvent.uniqueId": (), + + # class PySide2.QtGui.QAccessibleInterface: + "QAccessibleInterface.__init__": (), + "QAccessibleInterface.backgroundColor": (), + "QAccessibleInterface.child": ('int',), + "QAccessibleInterface.childAt": ('int', 'int'), + "QAccessibleInterface.childCount": (), + "QAccessibleInterface.editableTextInterface": (), + "QAccessibleInterface.focusChild": (), + "QAccessibleInterface.foregroundColor": (), + "QAccessibleInterface.indexOfChild": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessibleInterface.interface_cast": ('PySide2.QtGui.QAccessible.InterfaceType',), + "QAccessibleInterface.isValid": (), + "QAccessibleInterface.object": (), + "QAccessibleInterface.parent": (), + "QAccessibleInterface.rect": (), + "QAccessibleInterface.relations": ('PySide2.libpyside.Relation',), + "QAccessibleInterface.role": (), + "QAccessibleInterface.setText": ('PySide2.QtGui.QAccessible.Text', 'str'), + "QAccessibleInterface.state": (), + "QAccessibleInterface.tableCellInterface": (), + "QAccessibleInterface.text": ('PySide2.QtGui.QAccessible.Text',), + "QAccessibleInterface.textInterface": (), + "QAccessibleInterface.valueInterface": (), + "QAccessibleInterface.virtual_hook": ('int', 'int'), + "QAccessibleInterface.window": (), + + # class PySide2.QtGui.QAccessibleObject: + "QAccessibleObject.__init__": ('PySide2.QtCore.QObject',), + "QAccessibleObject.childAt": ('int', 'int'), + "QAccessibleObject.isValid": (), + "QAccessibleObject.object": (), + "QAccessibleObject.rect": (), + "QAccessibleObject.setText": ('PySide2.QtGui.QAccessible.Text', 'str'), + + # class PySide2.QtGui.QAccessibleStateChangeEvent: + "QAccessibleStateChangeEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessible.State'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessible.State')], + "QAccessibleStateChangeEvent.changedStates": (), + + # class PySide2.QtGui.QAccessibleTableCellInterface: + "QAccessibleTableCellInterface.__init__": (), + "QAccessibleTableCellInterface.columnExtent": (), + "QAccessibleTableCellInterface.columnHeaderCells": (), + "QAccessibleTableCellInterface.columnIndex": (), + "QAccessibleTableCellInterface.isSelected": (), + "QAccessibleTableCellInterface.rowExtent": (), + "QAccessibleTableCellInterface.rowHeaderCells": (), + "QAccessibleTableCellInterface.rowIndex": (), + "QAccessibleTableCellInterface.table": (), + + # class PySide2.QtGui.QAccessibleTableModelChangeEvent: + "QAccessibleTableModelChangeEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessibleTableModelChangeEvent.ModelChangeType'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessibleTableModelChangeEvent.ModelChangeType')], + "QAccessibleTableModelChangeEvent.firstColumn": (), + "QAccessibleTableModelChangeEvent.firstRow": (), + "QAccessibleTableModelChangeEvent.lastColumn": (), + "QAccessibleTableModelChangeEvent.lastRow": (), + "QAccessibleTableModelChangeEvent.modelChangeType": (), + "QAccessibleTableModelChangeEvent.setFirstColumn": ('int',), + "QAccessibleTableModelChangeEvent.setFirstRow": ('int',), + "QAccessibleTableModelChangeEvent.setLastColumn": ('int',), + "QAccessibleTableModelChangeEvent.setLastRow": ('int',), + "QAccessibleTableModelChangeEvent.setModelChangeType": ('PySide2.QtGui.QAccessibleTableModelChangeEvent.ModelChangeType',), + + # class PySide2.QtGui.QAccessibleTextCursorEvent: + "QAccessibleTextCursorEvent.__init__": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtGui.QAccessibleInterface', 'int')], + "QAccessibleTextCursorEvent.cursorPosition": (), + "QAccessibleTextCursorEvent.setCursorPosition": ('int',), + + # class PySide2.QtGui.QAccessibleTextInsertEvent: + "QAccessibleTextInsertEvent.__init__": [('PySide2.QtCore.QObject', 'int', 'str'), ('PySide2.QtGui.QAccessibleInterface', 'int', 'str')], + "QAccessibleTextInsertEvent.changePosition": (), + "QAccessibleTextInsertEvent.textInserted": (), + + # class PySide2.QtGui.QAccessibleTextInterface: + "QAccessibleTextInterface.__init__": (), + "QAccessibleTextInterface.addSelection": ('int', 'int'), + "QAccessibleTextInterface.attributes": ('int', 'int', 'int'), + "QAccessibleTextInterface.characterCount": (), + "QAccessibleTextInterface.characterRect": ('int',), + "QAccessibleTextInterface.cursorPosition": (), + "QAccessibleTextInterface.offsetAtPoint": ('PySide2.QtCore.QPoint',), + "QAccessibleTextInterface.removeSelection": ('int',), + "QAccessibleTextInterface.scrollToSubstring": ('int', 'int'), + "QAccessibleTextInterface.selection": ('int', 'int', 'int'), + "QAccessibleTextInterface.selectionCount": (), + "QAccessibleTextInterface.setCursorPosition": ('int',), + "QAccessibleTextInterface.setSelection": ('int', 'int', 'int'), + "QAccessibleTextInterface.text": ('int', 'int'), + "QAccessibleTextInterface.textAfterOffset": ('int', 'PySide2.QtGui.QAccessible.TextBoundaryType', 'int', 'int'), + "QAccessibleTextInterface.textAtOffset": ('int', 'PySide2.QtGui.QAccessible.TextBoundaryType', 'int', 'int'), + "QAccessibleTextInterface.textBeforeOffset": ('int', 'PySide2.QtGui.QAccessible.TextBoundaryType', 'int', 'int'), + + # class PySide2.QtGui.QAccessibleTextRemoveEvent: + "QAccessibleTextRemoveEvent.__init__": [('PySide2.QtCore.QObject', 'int', 'str'), ('PySide2.QtGui.QAccessibleInterface', 'int', 'str')], + "QAccessibleTextRemoveEvent.changePosition": (), + "QAccessibleTextRemoveEvent.textRemoved": (), + + # class PySide2.QtGui.QAccessibleTextSelectionEvent: + "QAccessibleTextSelectionEvent.__init__": [('PySide2.QtCore.QObject', 'int', 'int'), ('PySide2.QtGui.QAccessibleInterface', 'int', 'int')], + "QAccessibleTextSelectionEvent.selectionEnd": (), + "QAccessibleTextSelectionEvent.selectionStart": (), + "QAccessibleTextSelectionEvent.setSelection": ('int', 'int'), + + # class PySide2.QtGui.QAccessibleTextUpdateEvent: + "QAccessibleTextUpdateEvent.__init__": [('PySide2.QtCore.QObject', 'int', 'str', 'str'), ('PySide2.QtGui.QAccessibleInterface', 'int', 'str', 'str')], + "QAccessibleTextUpdateEvent.changePosition": (), + "QAccessibleTextUpdateEvent.textInserted": (), + "QAccessibleTextUpdateEvent.textRemoved": (), + + # class PySide2.QtGui.QAccessibleValueChangeEvent: + "QAccessibleValueChangeEvent.__init__": [('PySide2.QtCore.QObject', 'Any'), ('PySide2.QtGui.QAccessibleInterface', 'Any')], + "QAccessibleValueChangeEvent.setValue": ('Any',), + "QAccessibleValueChangeEvent.value": (), + + # class PySide2.QtGui.QAccessibleValueInterface: + "QAccessibleValueInterface.__init__": (), + "QAccessibleValueInterface.currentValue": (), + "QAccessibleValueInterface.maximumValue": (), + "QAccessibleValueInterface.minimumStepSize": (), + "QAccessibleValueInterface.minimumValue": (), + "QAccessibleValueInterface.setCurrentValue": ('Any',), + + # class PySide2.QtGui.QActionEvent: + + # class PySide2.QtGui.QBackingStore: + "QBackingStore.__init__": ('PySide2.QtGui.QWindow',), + "QBackingStore.beginPaint": ('PySide2.QtGui.QRegion',), + "QBackingStore.endPaint": (), + "QBackingStore.flush": ('PySide2.QtGui.QRegion', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint'), + "QBackingStore.hasStaticContents": (), + "QBackingStore.paintDevice": (), + "QBackingStore.resize": ('PySide2.QtCore.QSize',), + "QBackingStore.scroll": ('PySide2.QtGui.QRegion', 'int', 'int'), + "QBackingStore.setStaticContents": ('PySide2.QtGui.QRegion',), + "QBackingStore.size": (), + "QBackingStore.staticContents": (), + "QBackingStore.window": (), + + # class PySide2.QtGui.QBitmap: + "QBitmap.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str')], + "QBitmap.__copy__": (), + "QBitmap.clear": (), + "QBitmap.fromData": ('PySide2.QtCore.QSize', 'Union[str, int]', 'PySide2.QtGui.QImage.Format'), + "QBitmap.fromImage": ('PySide2.QtGui.QImage', 'PySide2.libpyside.ImageConversionFlags'), + "QBitmap.swap": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',)], + "QBitmap.transformed": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform',)], + + # class PySide2.QtGui.QBrush: + "QBrush.__init__": [(), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QBrush',), ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QGradient',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',)], + "QBrush.__copy__": (), + "QBrush.color": (), + "QBrush.gradient": (), + "QBrush.isOpaque": (), + "QBrush.matrix": (), + "QBrush.setColor": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',)], + "QBrush.setMatrix": ('PySide2.QtGui.QMatrix',), + "QBrush.setStyle": ('PySide2.QtCore.Qt.BrushStyle',), + "QBrush.setTexture": ('PySide2.QtGui.QPixmap',), + "QBrush.setTextureImage": ('PySide2.QtGui.QImage',), + "QBrush.setTransform": ('PySide2.QtGui.QTransform',), + "QBrush.style": (), + "QBrush.swap": ('PySide2.QtGui.QBrush',), + "QBrush.texture": (), + "QBrush.textureImage": (), + "QBrush.transform": (), + + # class PySide2.QtGui.QClipboard: + "QClipboard.clear": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.image": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.mimeData": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.ownsClipboard": (), + "QClipboard.ownsFindBuffer": (), + "QClipboard.ownsSelection": (), + "QClipboard.pixmap": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.setImage": ('PySide2.QtGui.QImage', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setText": ('str', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.supportsFindBuffer": (), + "QClipboard.supportsSelection": (), + "QClipboard.text": [('PySide2.QtGui.QClipboard.Mode',), ('str', 'PySide2.QtGui.QClipboard.Mode')], + + # class PySide2.QtGui.QCloseEvent: + "QCloseEvent.__init__": (), + + # class PySide2.QtGui.QColor: + "QColor.__init__": [(), ('Any',), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',), ('int', 'int', 'int', 'int'), ('str',)], + "QColor.__copy__": (), + "QColor.__reduce__": (), + "QColor.__setstate__": ('object',), + "QColor.alpha": (), + "QColor.alphaF": (), + "QColor.black": (), + "QColor.blackF": (), + "QColor.blue": (), + "QColor.blueF": (), + "QColor.colorNames": (), + "QColor.convertTo": ('PySide2.QtGui.QColor.Spec',), + "QColor.cyan": (), + "QColor.cyanF": (), + "QColor.dark": ('int',), + "QColor.darker": ('int',), + "QColor.fromCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.fromCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.fromHsl": ('int', 'int', 'int', 'int'), + "QColor.fromHslF": ('float', 'float', 'float', 'float'), + "QColor.fromHsv": ('int', 'int', 'int', 'int'), + "QColor.fromHsvF": ('float', 'float', 'float', 'float'), + "QColor.fromRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.fromRgbF": ('float', 'float', 'float', 'float'), + "QColor.fromRgba": ('int',), + "QColor.fromRgba64": ('int', 'int', 'int', 'int'), + "QColor.getCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.getCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.getHsl": ('int', 'int', 'int', 'int'), + "QColor.getHslF": ('float', 'float', 'float', 'float'), + "QColor.getHsv": ('int', 'int', 'int', 'int'), + "QColor.getHsvF": ('float', 'float', 'float', 'float'), + "QColor.getRgb": ('int', 'int', 'int', 'int'), + "QColor.getRgbF": ('float', 'float', 'float', 'float'), + "QColor.green": (), + "QColor.greenF": (), + "QColor.hslHue": (), + "QColor.hslHueF": (), + "QColor.hslSaturation": (), + "QColor.hslSaturationF": (), + "QColor.hsvHue": (), + "QColor.hsvHueF": (), + "QColor.hsvSaturation": (), + "QColor.hsvSaturationF": (), + "QColor.hue": (), + "QColor.hueF": (), + "QColor.isValid": (), + "QColor.isValidColor": ('str',), + "QColor.light": ('int',), + "QColor.lighter": ('int',), + "QColor.lightness": (), + "QColor.lightnessF": (), + "QColor.magenta": (), + "QColor.magentaF": (), + "QColor.name": [(), ('PySide2.QtGui.QColor.NameFormat',)], + "QColor.red": (), + "QColor.redF": (), + "QColor.rgb": (), + "QColor.rgba": (), + "QColor.saturation": (), + "QColor.saturationF": (), + "QColor.setAlpha": ('int',), + "QColor.setAlphaF": ('float',), + "QColor.setBlue": ('int',), + "QColor.setBlueF": ('float',), + "QColor.setCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.setCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.setGreen": ('int',), + "QColor.setGreenF": ('float',), + "QColor.setHsl": ('int', 'int', 'int', 'int'), + "QColor.setHslF": ('float', 'float', 'float', 'float'), + "QColor.setHsv": ('int', 'int', 'int', 'int'), + "QColor.setHsvF": ('float', 'float', 'float', 'float'), + "QColor.setNamedColor": ('str',), + "QColor.setRed": ('int',), + "QColor.setRedF": ('float',), + "QColor.setRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.setRgbF": ('float', 'float', 'float', 'float'), + "QColor.setRgba": ('int',), + "QColor.spec": (), + "QColor.toCmyk": (), + "QColor.toHsl": (), + "QColor.toHsv": (), + "QColor.toRgb": (), + "QColor.toTuple": (), + "QColor.value": (), + "QColor.valueF": (), + "QColor.yellow": (), + "QColor.yellowF": (), + + # class PySide2.QtGui.QConicalGradient: + "QConicalGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QConicalGradient',), ('float', 'float', 'float')], + "QConicalGradient.__copy__": (), + "QConicalGradient.angle": (), + "QConicalGradient.center": (), + "QConicalGradient.setAngle": ('float',), + "QConicalGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + + # class PySide2.QtGui.QContextMenuEvent: + "QContextMenuEvent.__init__": [('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'PySide2.libpyside.KeyboardModifiers')], + "QContextMenuEvent.globalPos": (), + "QContextMenuEvent.globalX": (), + "QContextMenuEvent.global""Y": (), + "QContextMenuEvent.pos": (), + "QContextMenuEvent.reason": (), + "QContextMenuEvent.x": (), + "QContextMenuEvent.y": (), + + # class PySide2.QtGui.QCursor: + "QCursor.__init__": [(), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtGui.QBitmap', 'PySide2.QtGui.QBitmap', 'int', 'int'), ('PySide2.QtGui.QCursor',), ('PySide2.QtGui.QPixmap', 'int', 'int')], + "QCursor.__copy__": (), + "QCursor.bitmap": (), + "QCursor.hotSpot": (), + "QCursor.mask": (), + "QCursor.pixmap": (), + "QCursor.pos": [(), ('PySide2.QtGui.QScreen',)], + "QCursor.setPos": [('PySide2.QtCore.QPoint',), ('PySide2.QtGui.QScreen', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QScreen', 'int', 'int'), ('int', 'int')], + "QCursor.setShape": ('PySide2.QtCore.Qt.CursorShape',), + "QCursor.shape": (), + "QCursor.swap": ('PySide2.QtGui.QCursor',), + + # class PySide2.QtGui.QDesktopServices: + "QDesktopServices.__init__": (), + "QDesktopServices.openUrl": ('PySide2.QtCore.QUrl',), + "QDesktopServices.setUrlHandler": ('str', 'PySide2.QtCore.QObject', 'str'), + "QDesktopServices.unsetUrlHandler": ('str',), + + # class PySide2.QtGui.QDoubleValidator: + "QDoubleValidator.__init__": [('PySide2.QtCore.QObject',), ('float', 'float', 'int', 'PySide2.QtCore.QObject')], + "QDoubleValidator.bottom": (), + "QDoubleValidator.decimals": (), + "QDoubleValidator.notation": (), + "QDoubleValidator.setBottom": ('float',), + "QDoubleValidator.setDecimals": ('int',), + "QDoubleValidator.setNotation": ('PySide2.QtGui.QDoubleValidator.Notation',), + "QDoubleValidator.setRange": ('float', 'float', 'int'), + "QDoubleValidator.setTop": ('float',), + "QDoubleValidator.top": (), + "QDoubleValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QDrag: + "QDrag.__init__": ('PySide2.QtCore.QObject',), + "QDrag.cancel": (), + "QDrag.defaultAction": (), + "QDrag.dragCursor": ('PySide2.QtCore.Qt.DropAction',), + "QDrag.exec_": [('PySide2.libpyside.DropActions',), ('PySide2.libpyside.DropActions', 'PySide2.QtCore.Qt.DropAction')], + "QDrag.hotSpot": (), + "QDrag.mimeData": (), + "QDrag.pixmap": (), + "QDrag.setDragCursor": ('PySide2.QtGui.QPixmap', 'PySide2.QtCore.Qt.DropAction'), + "QDrag.setHotSpot": ('PySide2.QtCore.QPoint',), + "QDrag.setMimeData": ('PySide2.QtCore.QMimeData',), + "QDrag.setPixmap": ('PySide2.QtGui.QPixmap',), + "QDrag.source": (), + "QDrag.start": ('PySide2.libpyside.DropActions',), + "QDrag.supportedActions": (), + "QDrag.target": (), + + # class PySide2.QtGui.QDragEnterEvent: + "QDragEnterEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.libpyside.DropActions', 'PySide2.QtCore.QMimeData', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), + + # class PySide2.QtGui.QDragLeaveEvent: + "QDragLeaveEvent.__init__": (), + + # class PySide2.QtGui.QDragMoveEvent: + "QDragMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.libpyside.DropActions', 'PySide2.QtCore.QMimeData', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDragMoveEvent.accept": [(), ('PySide2.QtCore.QRect',)], + "QDragMoveEvent.answerRect": (), + "QDragMoveEvent.ignore": [(), ('PySide2.QtCore.QRect',)], + + # class PySide2.QtGui.QDropEvent: + "QDropEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.libpyside.DropActions', 'PySide2.QtCore.QMimeData', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDropEvent.acceptProposedAction": (), + "QDropEvent.dropAction": (), + "QDropEvent.keyboardModifiers": (), + "QDropEvent.mimeData": (), + "QDropEvent.mouseButtons": (), + "QDropEvent.pos": (), + "QDropEvent.posF": (), + "QDropEvent.possibleActions": (), + "QDropEvent.proposedAction": (), + "QDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QDropEvent.source": (), + + # class PySide2.QtGui.QEnterEvent: + "QEnterEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEnterEvent.globalPos": (), + "QEnterEvent.globalX": (), + "QEnterEvent.global""Y": (), + "QEnterEvent.localPos": (), + "QEnterEvent.pos": (), + "QEnterEvent.screenPos": (), + "QEnterEvent.windowPos": (), + "QEnterEvent.x": (), + "QEnterEvent.y": (), + + # class PySide2.QtGui.QExposeEvent: + "QExposeEvent.__init__": ('PySide2.QtGui.QRegion',), + "QExposeEvent.region": (), + + # class PySide2.QtGui.QFileOpenEvent: + "QFileOpenEvent.__init__": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileOpenEvent.file": (), + "QFileOpenEvent.openFile": ('PySide2.QtCore.QFile', 'PySide2.libpyside.OpenMode'), + "QFileOpenEvent.url": (), + + # class PySide2.QtGui.QFocusEvent: + "QFocusEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.FocusReason'), + "QFocusEvent.gotFocus": (), + "QFocusEvent.lostFocus": (), + "QFocusEvent.reason": (), + + # class PySide2.QtGui.QFont: + "QFont.__init__": [(), ('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('str', 'int', 'int', 'bool')], + "QFont.__copy__": (), + "QFont.bold": (), + "QFont.cacheStatistics": (), + "QFont.capitalization": (), + "QFont.cleanup": (), + "QFont.defaultFamily": (), + "QFont.exactMatch": (), + "QFont.family": (), + "QFont.fixedPitch": (), + "QFont.fromString": ('str',), + "QFont.hintingPreference": (), + "QFont.initialize": (), + "QFont.insertSubstitution": ('str', 'str'), + "QFont.insertSubstitutions": ('str', 'List[str]'), + "QFont.isCopyOf": ('PySide2.QtGui.QFont',), + "QFont.italic": (), + "QFont.kerning": (), + "QFont.key": (), + "QFont.lastResortFamily": (), + "QFont.lastResortFont": (), + "QFont.letterSpacing": (), + "QFont.letterSpacingType": (), + "QFont.overline": (), + "QFont.pixelSize": (), + "QFont.pointSize": (), + "QFont.pointSizeF": (), + "QFont.rawMode": (), + "QFont.rawName": (), + "QFont.removeSubstitutions": ('str',), + "QFont.resolve": [(), ('PySide2.QtGui.QFont',), ('int',)], + "QFont.setBold": ('bool',), + "QFont.setCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QFont.setFamily": ('str',), + "QFont.setFixedPitch": ('bool',), + "QFont.setHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QFont.setItalic": ('bool',), + "QFont.setKerning": ('bool',), + "QFont.setLetterSpacing": ('PySide2.QtGui.QFont.SpacingType', 'float'), + "QFont.setOverline": ('bool',), + "QFont.setPixelSize": ('int',), + "QFont.setPointSize": ('int',), + "QFont.setPointSizeF": ('float',), + "QFont.setRawMode": ('bool',), + "QFont.setRawName": ('str',), + "QFont.setStretch": ('int',), + "QFont.setStrikeOut": ('bool',), + "QFont.setStyle": ('PySide2.QtGui.QFont.Style',), + "QFont.setStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QFont.setStyleName": ('str',), + "QFont.setStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QFont.setUnderline": ('bool',), + "QFont.setWeight": ('int',), + "QFont.setWordSpacing": ('float',), + "QFont.stretch": (), + "QFont.strikeOut": (), + "QFont.style": (), + "QFont.styleHint": (), + "QFont.styleName": (), + "QFont.styleStrategy": (), + "QFont.substitute": ('str',), + "QFont.substitutes": ('str',), + "QFont.substitutions": (), + "QFont.swap": ('PySide2.QtGui.QFont',), + "QFont.toString": (), + "QFont.underline": (), + "QFont.weight": (), + "QFont.wordSpacing": (), + + # class PySide2.QtGui.QFontDatabase: + "QFontDatabase.__init__": [(), ('PySide2.QtGui.QFontDatabase',)], + "QFontDatabase.__copy__": (), + "QFontDatabase.addApplicationFont": ('str',), + "QFontDatabase.addApplicationFontFromData": ('PySide2.QtCore.QByteArray',), + "QFontDatabase.applicationFontFamilies": ('int',), + "QFontDatabase.bold": ('str', 'str'), + "QFontDatabase.families": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.font": ('str', 'str', 'int'), + "QFontDatabase.hasFamily": ('str',), + "QFontDatabase.isBitmapScalable": ('str', 'str'), + "QFontDatabase.isFixedPitch": ('str', 'str'), + "QFontDatabase.isPrivateFamily": ('str',), + "QFontDatabase.isScalable": ('str', 'str'), + "QFontDatabase.isSmoothlyScalable": ('str', 'str'), + "QFontDatabase.italic": ('str', 'str'), + "QFontDatabase.pointSizes": ('str', 'str'), + "QFontDatabase.removeAllApplicationFonts": (), + "QFontDatabase.removeApplicationFont": ('int',), + "QFontDatabase.smoothSizes": ('str', 'str'), + "QFontDatabase.standardSizes": (), + "QFontDatabase.styleString": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontDatabase.styles": ('str',), + "QFontDatabase.supportsThreadedFontRendering": (), + "QFontDatabase.systemFont": ('PySide2.QtGui.QFontDatabase.SystemFont',), + "QFontDatabase.weight": ('str', 'str'), + "QFontDatabase.writingSystemName": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystemSample": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystems": [(), ('str',)], + + # class PySide2.QtGui.QFontInfo: + "QFontInfo.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontInfo.__copy__": (), + "QFontInfo.bold": (), + "QFontInfo.exactMatch": (), + "QFontInfo.family": (), + "QFontInfo.fixedPitch": (), + "QFontInfo.italic": (), + "QFontInfo.overline": (), + "QFontInfo.pixelSize": (), + "QFontInfo.pointSize": (), + "QFontInfo.pointSizeF": (), + "QFontInfo.rawMode": (), + "QFontInfo.strikeOut": (), + "QFontInfo.style": (), + "QFontInfo.styleHint": (), + "QFontInfo.styleName": (), + "QFontInfo.swap": ('PySide2.QtGui.QFontInfo',), + "QFontInfo.underline": (), + "QFontInfo.weight": (), + + # class PySide2.QtGui.QFontMetrics: + "QFontMetrics.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',)], + "QFontMetrics.__copy__": (), + "QFontMetrics.ascent": (), + "QFontMetrics.averageCharWidth": (), + "QFontMetrics.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetrics.boundingRectChar": ('Union[str, int]',), + "QFontMetrics.capHeight": (), + "QFontMetrics.charWidth": ('str', 'int'), + "QFontMetrics.descent": (), + "QFontMetrics.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'int', 'int'), + "QFontMetrics.height": (), + "QFontMetrics.horizontalAdvance": [('Union[str, int]',), ('str', 'int')], + "QFontMetrics.inFont": ('Union[str, int]',), + "QFontMetrics.inFontUcs4": ('int',), + "QFontMetrics.leading": (), + "QFontMetrics.leftBearing": ('Union[str, int]',), + "QFontMetrics.lineSpacing": (), + "QFontMetrics.lineWidth": (), + "QFontMetrics.maxWidth": (), + "QFontMetrics.minLeftBearing": (), + "QFontMetrics.minRightBearing": (), + "QFontMetrics.overlinePos": (), + "QFontMetrics.rightBearing": ('Union[str, int]',), + "QFontMetrics.size": ('int', 'str', 'int', 'int'), + "QFontMetrics.strikeOutPos": (), + "QFontMetrics.swap": ('PySide2.QtGui.QFontMetrics',), + "QFontMetrics.tightBoundingRect": ('str',), + "QFontMetrics.underlinePos": (), + "QFontMetrics.width": [('str', 'int'), ('str', 'int', 'int')], + "QFontMetrics.widthChar": ('Union[str, int]',), + "QFontMetrics.xHeight": (), + + # class PySide2.QtGui.QFontMetricsF: + "QFontMetricsF.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',), ('PySide2.QtGui.QFontMetricsF',)], + "QFontMetricsF.__copy__": (), + "QFontMetricsF.ascent": (), + "QFontMetricsF.averageCharWidth": (), + "QFontMetricsF.boundingRect": [('PySide2.QtCore.QRectF', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetricsF.boundingRectChar": ('Union[str, int]',), + "QFontMetricsF.capHeight": (), + "QFontMetricsF.descent": (), + "QFontMetricsF.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'float', 'int'), + "QFontMetricsF.height": (), + "QFontMetricsF.horizontalAdvance": [('Union[str, int]',), ('str', 'int')], + "QFontMetricsF.inFont": ('Union[str, int]',), + "QFontMetricsF.inFontUcs4": ('int',), + "QFontMetricsF.leading": (), + "QFontMetricsF.leftBearing": ('Union[str, int]',), + "QFontMetricsF.lineSpacing": (), + "QFontMetricsF.lineWidth": (), + "QFontMetricsF.maxWidth": (), + "QFontMetricsF.minLeftBearing": (), + "QFontMetricsF.minRightBearing": (), + "QFontMetricsF.overlinePos": (), + "QFontMetricsF.rightBearing": ('Union[str, int]',), + "QFontMetricsF.size": ('int', 'str', 'int', 'int'), + "QFontMetricsF.strikeOutPos": (), + "QFontMetricsF.swap": ('PySide2.QtGui.QFontMetricsF',), + "QFontMetricsF.tightBoundingRect": ('str',), + "QFontMetricsF.underlinePos": (), + "QFontMetricsF.width": ('str',), + "QFontMetricsF.widthChar": ('Union[str, int]',), + "QFontMetricsF.xHeight": (), + + # class PySide2.QtGui.QGradient: + "QGradient.__init__": [(), ('PySide2.QtGui.QGradient',)], + "QGradient.__copy__": (), + "QGradient.coordinateMode": (), + "QGradient.interpolationMode": (), + "QGradient.setColorAt": ('float', 'PySide2.QtGui.QColor'), + "QGradient.setCoordinateMode": ('PySide2.QtGui.QGradient.CoordinateMode',), + "QGradient.setInterpolationMode": ('PySide2.QtGui.QGradient.InterpolationMode',), + "QGradient.setSpread": ('PySide2.QtGui.QGradient.Spread',), + "QGradient.setStops": ('list',), + "QGradient.spread": (), + "QGradient.stops": (), + "QGradient.type": (), + + # class PySide2.QtGui.QGuiApplication: + "QGuiApplication.__init__": [(), ('List[str]',)], + "QGuiApplication.allWindows": (), + "QGuiApplication.applicationDisplayName": (), + "QGuiApplication.applicationState": (), + "QGuiApplication.changeOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.clipboard": (), + "QGuiApplication.desktopFileName": (), + "QGuiApplication.desktopSettingsAware": (), + "QGuiApplication.devicePixelRatio": (), + "QGuiApplication.event": ('PySide2.QtCore.QEvent',), + "QGuiApplication.exec_": (), + "QGuiApplication.focusObject": (), + "QGuiApplication.focusWindow": (), + "QGuiApplication.font": (), + "QGuiApplication.inputMethod": (), + "QGuiApplication.isFallbackSessionManagementEnabled": (), + "QGuiApplication.isLeftToRight": (), + "QGuiApplication.isRightToLeft": (), + "QGuiApplication.isSavingSession": (), + "QGuiApplication.isSessionRestored": (), + "QGuiApplication.keyboardModifiers": (), + "QGuiApplication.layoutDirection": (), + "QGuiApplication.modalWindow": (), + "QGuiApplication.mouseButtons": (), + "QGuiApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGuiApplication.overrideCursor": (), + "QGuiApplication.palette": (), + "QGuiApplication.platformName": (), + "QGuiApplication.primaryScreen": (), + "QGuiApplication.queryKeyboardModifiers": (), + "QGuiApplication.quitOnLastWindowClosed": (), + "QGuiApplication.restoreOverrideCursor": (), + "QGuiApplication.screenAt": ('PySide2.QtCore.QPoint',), + "QGuiApplication.screens": (), + "QGuiApplication.sessionId": (), + "QGuiApplication.sessionKey": (), + "QGuiApplication.setApplicationDisplayName": ('str',), + "QGuiApplication.setDesktopFileName": ('str',), + "QGuiApplication.setDesktopSettingsAware": ('bool',), + "QGuiApplication.setFallbackSessionManagementEnabled": ('bool',), + "QGuiApplication.setFont": ('PySide2.QtGui.QFont',), + "QGuiApplication.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGuiApplication.setOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.setPalette": ('PySide2.QtGui.QPalette',), + "QGuiApplication.setQuitOnLastWindowClosed": ('bool',), + "QGuiApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QGuiApplication.styleHints": (), + "QGuiApplication.sync": (), + "QGuiApplication.topLevelAt": ('PySide2.QtCore.QPoint',), + "QGuiApplication.topLevelWindows": (), + "QGuiApplication.windowIcon": (), + + # class PySide2.QtGui.QHelpEvent: + "QHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QHelpEvent.globalPos": (), + "QHelpEvent.globalX": (), + "QHelpEvent.global""Y": (), + "QHelpEvent.pos": (), + "QHelpEvent.x": (), + "QHelpEvent.y": (), + + # class PySide2.QtGui.QHideEvent: + "QHideEvent.__init__": (), + + # class PySide2.QtGui.QHoverEvent: + "QHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.libpyside.KeyboardModifiers'), + "QHoverEvent.oldPos": (), + "QHoverEvent.oldPosF": (), + "QHoverEvent.pos": (), + "QHoverEvent.posF": (), + + # class PySide2.QtGui.QIcon: + "QIcon.__init__": [(), ('PySide2.QtGui.QIcon',), ('PySide2.QtGui.QIconEngine',), ('PySide2.QtGui.QPixmap',), ('str',)], + "QIcon.__copy__": (), + "QIcon.actualSize": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.cacheKey": (), + "QIcon.fallbackSearchPaths": (), + "QIcon.fromTheme": [('str',), ('str', 'PySide2.QtGui.QIcon')], + "QIcon.hasThemeIcon": ('str',), + "QIcon.isMask": (), + "QIcon.isNull": (), + "QIcon.name": (), + "QIcon.paint": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.libpyside.Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QPainter', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.pixmap": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.setFallbackSearchPaths": ('List[str]',), + "QIcon.setIsMask": ('bool',), + "QIcon.setThemeName": ('str',), + "QIcon.setThemeSearchPaths": ('List[str]',), + "QIcon.swap": ('PySide2.QtGui.QIcon',), + "QIcon.themeName": (), + "QIcon.themeSearchPaths": (), + + # class PySide2.QtGui.QIconDragEvent: + "QIconDragEvent.__init__": (), + + # class PySide2.QtGui.QIconEngine: + "QIconEngine.__init__": [(), ('PySide2.QtGui.QIconEngine',)], + "QIconEngine.actualSize": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.clone": (), + "QIconEngine.iconName": (), + "QIconEngine.isNull": (), + "QIconEngine.key": (), + "QIconEngine.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.pixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.read": ('PySide2.QtCore.QDataStream',), + "QIconEngine.scaledPixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State', 'float'), + "QIconEngine.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QImage: + "QImage.__init__": [(), ('List[str]',), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QImage.Format'), ('PySide2.QtGui.QImage',), ('Union[str, int]', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'Callable', 'int'), ('Union[str, int]', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'Callable', 'int'), ('int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'str')], + "QImage.__copy__": (), + "QImage.allGray": (), + "QImage.alphaChannel": (), + "QImage.bitPlaneCount": (), + "QImage.bits": (), + "QImage.byteCount": (), + "QImage.bytesPerLine": (), + "QImage.cacheKey": (), + "QImage.color": ('int',), + "QImage.colorCount": (), + "QImage.colorTable": (), + "QImage.constBits": (), + "QImage.constScanLine": ('int',), + "QImage.convertToFormat": [('PySide2.QtGui.QImage.Format', 'PySide2.libpyside.ImageConversionFlags'), ('PySide2.QtGui.QImage.Format', 'list', 'PySide2.libpyside.ImageConversionFlags')], + "QImage.convertToFormat_helper": ('PySide2.QtGui.QImage.Format', 'PySide2.libpyside.ImageConversionFlags'), + "QImage.convertToFormat_inplace": ('PySide2.QtGui.QImage.Format', 'PySide2.libpyside.ImageConversionFlags'), + "QImage.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QImage.createAlphaMask": ('PySide2.libpyside.ImageConversionFlags',), + "QImage.createHeuristicMask": ('bool',), + "QImage.createMaskFromColor": ('int', 'PySide2.QtCore.Qt.MaskMode'), + "QImage.depth": (), + "QImage.devType": (), + "QImage.devicePixelRatio": (), + "QImage.dotsPerMeterX": (), + "QImage.dotsPerMeterY": (), + "QImage.fill": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',)], + "QImage.format": (), + "QImage.fromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.hasAlphaChannel": (), + "QImage.height": (), + "QImage.invertPixels": ('PySide2.QtGui.QImage.InvertMode',), + "QImage.isGrayscale": (), + "QImage.isNull": (), + "QImage.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QImage.loadFromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QImage.mirrored": ('bool', 'bool'), + "QImage.mirrored_helper": ('bool', 'bool'), + "QImage.mirrored_inplace": ('bool', 'bool'), + "QImage.offset": (), + "QImage.paintEngine": (), + "QImage.pixel": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelColor": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelFormat": (), + "QImage.pixelIndex": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.rect": (), + "QImage.reinterpretAsFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.rgbSwapped": (), + "QImage.rgbSwapped_helper": (), + "QImage.rgbSwapped_inplace": (), + "QImage.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QImage.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scanLine": ('int',), + "QImage.setAlphaChannel": ('PySide2.QtGui.QImage',), + "QImage.setColor": ('int', 'int'), + "QImage.setColorCount": ('int',), + "QImage.setColorTable": ('list',), + "QImage.setDevicePixelRatio": ('float',), + "QImage.setDotsPerMeterX": ('int',), + "QImage.setDotsPerMeterY": ('int',), + "QImage.setOffset": ('PySide2.QtCore.QPoint',), + "QImage.setPixel": [('PySide2.QtCore.QPoint', 'int'), ('int', 'int', 'int')], + "QImage.setPixelColor": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QColor')], + "QImage.setText": ('str', 'str'), + "QImage.size": (), + "QImage.smoothScaled": ('int', 'int'), + "QImage.swap": ('PySide2.QtGui.QImage',), + "QImage.text": ('str',), + "QImage.textKeys": (), + "QImage.toImageFormat": ('PySide2.QtGui.QPixelFormat',), + "QImage.toPixelFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QImage.valid": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.width": (), + + # class PySide2.QtGui.QImageIOHandler: + "QImageIOHandler.__init__": (), + "QImageIOHandler.canRead": (), + "QImageIOHandler.currentImageNumber": (), + "QImageIOHandler.currentImageRect": (), + "QImageIOHandler.device": (), + "QImageIOHandler.format": (), + "QImageIOHandler.imageCount": (), + "QImageIOHandler.jumpToImage": ('int',), + "QImageIOHandler.jumpToNextImage": (), + "QImageIOHandler.loopCount": (), + "QImageIOHandler.name": (), + "QImageIOHandler.nextImageDelay": (), + "QImageIOHandler.option": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.read": ('PySide2.QtGui.QImage',), + "QImageIOHandler.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageIOHandler.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageIOHandler.setOption": ('PySide2.QtGui.QImageIOHandler.ImageOption', 'Any'), + "QImageIOHandler.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QImageReader: + "QImageReader.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageReader.autoDetectImageFormat": (), + "QImageReader.autoTransform": (), + "QImageReader.backgroundColor": (), + "QImageReader.canRead": (), + "QImageReader.clipRect": (), + "QImageReader.currentImageNumber": (), + "QImageReader.currentImageRect": (), + "QImageReader.decideFormatFromContent": (), + "QImageReader.device": (), + "QImageReader.error": (), + "QImageReader.errorString": (), + "QImageReader.fileName": (), + "QImageReader.format": (), + "QImageReader.gamma": (), + "QImageReader.imageCount": (), + "QImageReader.imageFormat": [(), ('PySide2.QtCore.QIODevice',), ('str',)], + "QImageReader.jumpToImage": ('int',), + "QImageReader.jumpToNextImage": (), + "QImageReader.loopCount": (), + "QImageReader.nextImageDelay": (), + "QImageReader.quality": (), + "QImageReader.read": (), + "QImageReader.scaledClipRect": (), + "QImageReader.scaledSize": (), + "QImageReader.setAutoDetectImageFormat": ('bool',), + "QImageReader.setAutoTransform": ('bool',), + "QImageReader.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QImageReader.setClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setDecideFormatFromContent": ('bool',), + "QImageReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageReader.setFileName": ('str',), + "QImageReader.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageReader.setGamma": ('float',), + "QImageReader.setQuality": ('int',), + "QImageReader.setScaledClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setScaledSize": ('PySide2.QtCore.QSize',), + "QImageReader.size": (), + "QImageReader.subType": (), + "QImageReader.supportedImageFormats": (), + "QImageReader.supportedMimeTypes": (), + "QImageReader.supportedSubTypes": (), + "QImageReader.supportsAnimation": (), + "QImageReader.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageReader.text": ('str',), + "QImageReader.textKeys": (), + "QImageReader.transformation": (), + + # class PySide2.QtGui.QImageWriter: + "QImageWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageWriter.canWrite": (), + "QImageWriter.compression": (), + "QImageWriter.description": (), + "QImageWriter.device": (), + "QImageWriter.error": (), + "QImageWriter.errorString": (), + "QImageWriter.fileName": (), + "QImageWriter.format": (), + "QImageWriter.gamma": (), + "QImageWriter.optimizedWrite": (), + "QImageWriter.progressiveScanWrite": (), + "QImageWriter.quality": (), + "QImageWriter.setCompression": ('int',), + "QImageWriter.setDescription": ('str',), + "QImageWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageWriter.setFileName": ('str',), + "QImageWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setGamma": ('float',), + "QImageWriter.setOptimizedWrite": ('bool',), + "QImageWriter.setProgressiveScanWrite": ('bool',), + "QImageWriter.setQuality": ('int',), + "QImageWriter.setSubType": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setText": ('str', 'str'), + "QImageWriter.setTransformation": ('PySide2.libpyside.Transformations',), + "QImageWriter.subType": (), + "QImageWriter.supportedImageFormats": (), + "QImageWriter.supportedMimeTypes": (), + "QImageWriter.supportedSubTypes": (), + "QImageWriter.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageWriter.transformation": (), + "QImageWriter.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QInputEvent: + "QInputEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.libpyside.KeyboardModifiers'), + "QInputEvent.modifiers": (), + "QInputEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QInputEvent.setTimestamp": ('int',), + "QInputEvent.timestamp": (), + + # class PySide2.QtGui.QInputMethod: + "QInputMethod.anchorRectangle": (), + "QInputMethod.commit": (), + "QInputMethod.cursorRectangle": (), + "QInputMethod.hide": (), + "QInputMethod.inputDirection": (), + "QInputMethod.inputItemClipRectangle": (), + "QInputMethod.inputItemRectangle": (), + "QInputMethod.inputItemTransform": (), + "QInputMethod.invokeAction": ('PySide2.QtGui.QInputMethod.Action', 'int'), + "QInputMethod.isAnimating": (), + "QInputMethod.isVisible": (), + "QInputMethod.keyboardRectangle": (), + "QInputMethod.locale": (), + "QInputMethod.queryFocusObject": ('PySide2.QtCore.Qt.InputMethodQuery', 'Any'), + "QInputMethod.reset": (), + "QInputMethod.setInputItemRectangle": ('PySide2.QtCore.QRectF',), + "QInputMethod.setInputItemTransform": ('PySide2.QtGui.QTransform',), + "QInputMethod.setVisible": ('bool',), + "QInputMethod.show": (), + "QInputMethod.update": ('PySide2.libpyside.InputMethodQueries',), + + # class PySide2.QtGui.QInputMethodEvent: + "QInputMethodEvent.__init__": [(), ('PySide2.QtGui.QInputMethodEvent',), ('str', 'list')], + "QInputMethodEvent.attributes": (), + "QInputMethodEvent.commitString": (), + "QInputMethodEvent.preeditString": (), + "QInputMethodEvent.replacementLength": (), + "QInputMethodEvent.replacementStart": (), + "QInputMethodEvent.setCommitString": ('str', 'int', 'int'), + + # class PySide2.QtGui.QInputMethodQueryEvent: + "QInputMethodQueryEvent.__init__": ('PySide2.libpyside.InputMethodQueries',), + "QInputMethodQueryEvent.queries": (), + "QInputMethodQueryEvent.setValue": ('PySide2.QtCore.Qt.InputMethodQuery', 'Any'), + "QInputMethodQueryEvent.value": ('PySide2.QtCore.Qt.InputMethodQuery',), + + # class PySide2.QtGui.QIntValidator: + "QIntValidator.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QIntValidator.bottom": (), + "QIntValidator.fixup": ('str',), + "QIntValidator.setBottom": ('int',), + "QIntValidator.setRange": ('int', 'int'), + "QIntValidator.setTop": ('int',), + "QIntValidator.top": (), + "QIntValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QKeyEvent: + "QKeyEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'int', 'PySide2.libpyside.KeyboardModifiers', 'int', 'int', 'int', 'str', 'bool', 'int'), ('PySide2.QtCore.QEvent.Type', 'int', 'PySide2.libpyside.KeyboardModifiers', 'str', 'bool', 'int')], + "QKeyEvent.count": (), + "QKeyEvent.isAutoRepeat": (), + "QKeyEvent.key": (), + "QKeyEvent.matches": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeyEvent.modifiers": (), + "QKeyEvent.nativeModifiers": (), + "QKeyEvent.nativeScanCode": (), + "QKeyEvent.nativeVirtualKey": (), + "QKeyEvent.text": (), + + # class PySide2.QtGui.QKeySequence: + "QKeySequence.__init__": [(), ('PySide2.QtGui.QKeySequence',), ('PySide2.QtGui.QKeySequence.StandardKey',), ('int', 'int', 'int', 'int'), ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat')], + "QKeySequence.__copy__": (), + "QKeySequence.__reduce__": (), + "QKeySequence.count": (), + "QKeySequence.fromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.isEmpty": (), + "QKeySequence.keyBindings": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeySequence.listFromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.listToString": ('list', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.matches": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.mnemonic": ('str',), + "QKeySequence.swap": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.toString": ('PySide2.QtGui.QKeySequence.SequenceFormat',), + + # class PySide2.QtGui.QLinearGradient: + "QLinearGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtGui.QLinearGradient',), ('float', 'float', 'float', 'float')], + "QLinearGradient.__copy__": (), + "QLinearGradient.finalStop": (), + "QLinearGradient.setFinalStop": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.setStart": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.start": (), + + # class PySide2.QtGui.QMatrix: + "QMatrix.__init__": [(), ('PySide2.QtGui.QMatrix',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix.__copy__": (), + "QMatrix.__reduce__": (), + "QMatrix.determinant": (), + "QMatrix.dx": (), + "QMatrix.dy": (), + "QMatrix.inverted": ('bool',), + "QMatrix.isIdentity": (), + "QMatrix.isInvertible": (), + "QMatrix.m11": (), + "QMatrix.m12": (), + "QMatrix.m21": (), + "QMatrix.m22": (), + "QMatrix.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QMatrix.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix.mapToPolygon": ('PySide2.QtCore.QRect',), + "QMatrix.reset": (), + "QMatrix.rotate": ('float',), + "QMatrix.scale": ('float', 'float'), + "QMatrix.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix.shear": ('float', 'float'), + "QMatrix.translate": ('float', 'float'), + + # class PySide2.QtGui.QMatrix2x2: + "QMatrix2x2.__init__": [('PySide2.QtGui.QMatrix2x2',), ('Sequence',)], + "QMatrix2x2.__copy__": (), + "QMatrix2x2.__reduce__": (), + "QMatrix2x2.data": (), + "QMatrix2x2.fill": ('object',), + "QMatrix2x2.transposed": (), + + # class PySide2.QtGui.QMatrix2x3: + "QMatrix2x3.__init__": [('PySide2.QtGui.QMatrix2x3',), ('Sequence',)], + "QMatrix2x3.__copy__": (), + "QMatrix2x3.__reduce__": (), + "QMatrix2x3.data": (), + "QMatrix2x3.fill": ('object',), + "QMatrix2x3.transposed": (), + + # class PySide2.QtGui.QMatrix2x4: + "QMatrix2x4.__init__": [('PySide2.QtGui.QMatrix2x4',), ('Sequence',)], + "QMatrix2x4.__copy__": (), + "QMatrix2x4.__reduce__": (), + "QMatrix2x4.data": (), + "QMatrix2x4.fill": ('object',), + "QMatrix2x4.transposed": (), + + # class PySide2.QtGui.QMatrix3x2: + "QMatrix3x2.__init__": [('PySide2.QtGui.QMatrix3x2',), ('Sequence',)], + "QMatrix3x2.__copy__": (), + "QMatrix3x2.__reduce__": (), + "QMatrix3x2.data": (), + "QMatrix3x2.fill": ('object',), + "QMatrix3x2.transposed": (), + + # class PySide2.QtGui.QMatrix3x3: + "QMatrix3x3.__init__": [('PySide2.QtGui.QMatrix3x3',), ('Sequence',)], + "QMatrix3x3.__copy__": (), + "QMatrix3x3.__reduce__": (), + "QMatrix3x3.data": (), + "QMatrix3x3.fill": ('object',), + "QMatrix3x3.transposed": (), + + # class PySide2.QtGui.QMatrix3x4: + "QMatrix3x4.__init__": [('PySide2.QtGui.QMatrix3x4',), ('Sequence',)], + "QMatrix3x4.__copy__": (), + "QMatrix3x4.__reduce__": (), + "QMatrix3x4.data": (), + "QMatrix3x4.fill": ('object',), + "QMatrix3x4.transposed": (), + + # class PySide2.QtGui.QMatrix4x2: + "QMatrix4x2.__init__": [('PySide2.QtGui.QMatrix4x2',), ('Sequence',)], + "QMatrix4x2.__copy__": (), + "QMatrix4x2.__reduce__": (), + "QMatrix4x2.data": (), + "QMatrix4x2.fill": ('object',), + "QMatrix4x2.transposed": (), + + # class PySide2.QtGui.QMatrix4x3: + "QMatrix4x3.__init__": [('PySide2.QtGui.QMatrix4x3',), ('Sequence',)], + "QMatrix4x3.__copy__": (), + "QMatrix4x3.__reduce__": (), + "QMatrix4x3.data": (), + "QMatrix4x3.fill": ('object',), + "QMatrix4x3.transposed": (), + + # class PySide2.QtGui.QMatrix4x4: + "QMatrix4x4.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float',), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.__copy__": (), + "QMatrix4x4.__reduce__": (), + "QMatrix4x4.column": ('int',), + "QMatrix4x4.copyDataTo": ('float',), + "QMatrix4x4.data": (), + "QMatrix4x4.determinant": (), + "QMatrix4x4.fill": ('float',), + "QMatrix4x4.flipCoordinates": (), + "QMatrix4x4.frustum": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix4x4.inverted": ('bool',), + "QMatrix4x4.isAffine": (), + "QMatrix4x4.isIdentity": (), + "QMatrix4x4.lookAt": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QMatrix4x4.map": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',)], + "QMatrix4x4.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix4x4.mapVector": ('PySide2.QtGui.QVector3D',), + "QMatrix4x4.normalMatrix": (), + "QMatrix4x4.optimize": (), + "QMatrix4x4.ortho": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.perspective": ('float', 'float', 'float', 'float'), + "QMatrix4x4.rotate": [('PySide2.QtGui.QQuaternion',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QMatrix4x4.row": ('int',), + "QMatrix4x4.scale": [('PySide2.QtGui.QVector3D',), ('float',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.setColumn": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setRow": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setToIdentity": (), + "QMatrix4x4.toAffine": (), + "QMatrix4x4.toTransform": [(), ('float',)], + "QMatrix4x4.translate": [('PySide2.QtGui.QVector3D',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.transposed": (), + "QMatrix4x4.viewport": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + + # class PySide2.QtGui.QMouseEvent: + "QMouseEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers')], + "QMouseEvent.button": (), + "QMouseEvent.buttons": (), + "QMouseEvent.flags": (), + "QMouseEvent.globalPos": (), + "QMouseEvent.globalX": (), + "QMouseEvent.global""Y": (), + "QMouseEvent.localPos": (), + "QMouseEvent.pos": (), + "QMouseEvent.screenPos": (), + "QMouseEvent.setLocalPos": ('PySide2.QtCore.QPointF',), + "QMouseEvent.source": (), + "QMouseEvent.windowPos": (), + "QMouseEvent.x": (), + "QMouseEvent.y": (), + + # class PySide2.QtGui.QMoveEvent: + "QMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QMoveEvent.oldPos": (), + "QMoveEvent.pos": (), + + # class PySide2.QtGui.QMovie: + "QMovie.__init__": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QMovie.backgroundColor": (), + "QMovie.cacheMode": (), + "QMovie.currentFrameNumber": (), + "QMovie.currentImage": (), + "QMovie.currentPixmap": (), + "QMovie.device": (), + "QMovie.fileName": (), + "QMovie.format": (), + "QMovie.frameCount": (), + "QMovie.frameRect": (), + "QMovie.isValid": (), + "QMovie.jumpToFrame": ('int',), + "QMovie.jumpToNextFrame": (), + "QMovie.lastError": (), + "QMovie.lastErrorString": (), + "QMovie.loopCount": (), + "QMovie.nextFrameDelay": (), + "QMovie.scaledSize": (), + "QMovie.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QMovie.setCacheMode": ('PySide2.QtGui.QMovie.CacheMode',), + "QMovie.setDevice": ('PySide2.QtCore.QIODevice',), + "QMovie.setFileName": ('str',), + "QMovie.setFormat": ('PySide2.QtCore.QByteArray',), + "QMovie.setPaused": ('bool',), + "QMovie.setScaledSize": ('PySide2.QtCore.QSize',), + "QMovie.setSpeed": ('int',), + "QMovie.speed": (), + "QMovie.start": (), + "QMovie.state": (), + "QMovie.stop": (), + "QMovie.supportedFormats": (), + + # class PySide2.QtGui.QNativeGestureEvent: + "QNativeGestureEvent.__init__": [('PySide2.QtCore.Qt.NativeGestureType', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'float', 'int', 'int'), ('PySide2.QtCore.Qt.NativeGestureType', 'PySide2.QtGui.QTouchDevice', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'float', 'int', 'int')], + "QNativeGestureEvent.device": (), + "QNativeGestureEvent.gestureType": (), + "QNativeGestureEvent.globalPos": (), + "QNativeGestureEvent.localPos": (), + "QNativeGestureEvent.pos": (), + "QNativeGestureEvent.screenPos": (), + "QNativeGestureEvent.value": (), + "QNativeGestureEvent.windowPos": (), + + # class PySide2.QtGui.QOffscreenSurface: + "QOffscreenSurface.__init__": [('PySide2.QtGui.QScreen',), ('PySide2.QtGui.QScreen', 'PySide2.QtCore.QObject')], + "QOffscreenSurface.create": (), + "QOffscreenSurface.destroy": (), + "QOffscreenSurface.format": (), + "QOffscreenSurface.isValid": (), + "QOffscreenSurface.nativeHandle": (), + "QOffscreenSurface.requestedFormat": (), + "QOffscreenSurface.screen": (), + "QOffscreenSurface.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOffscreenSurface.setNativeHandle": ('int',), + "QOffscreenSurface.setScreen": ('PySide2.QtGui.QScreen',), + "QOffscreenSurface.size": (), + "QOffscreenSurface.surfaceHandle": (), + "QOffscreenSurface.surfaceType": (), + + # class PySide2.QtGui.QOpenGLBuffer: + "QOpenGLBuffer.__init__": [(), ('PySide2.QtGui.QOpenGLBuffer',), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.allocate": [('int',), ('int', 'int')], + "QOpenGLBuffer.bind": (), + "QOpenGLBuffer.bufferId": (), + "QOpenGLBuffer.create": (), + "QOpenGLBuffer.destroy": (), + "QOpenGLBuffer.isCreated": (), + "QOpenGLBuffer.map": ('PySide2.QtGui.QOpenGLBuffer.Access',), + "QOpenGLBuffer.mapRange": ('int', 'int', 'PySide2.libpyside.RangeAccessFlags'), + "QOpenGLBuffer.read": ('int', 'int', 'int'), + "QOpenGLBuffer.release": [(), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.setUsagePattern": ('PySide2.QtGui.QOpenGLBuffer.UsagePattern',), + "QOpenGLBuffer.size": (), + "QOpenGLBuffer.type": (), + "QOpenGLBuffer.unmap": (), + "QOpenGLBuffer.usagePattern": (), + "QOpenGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtGui.QOpenGLContext: + "QOpenGLContext.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLContext.areSharing": ('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLContext.create": (), + "QOpenGLContext.currentContext": (), + "QOpenGLContext.defaultFramebufferObject": (), + "QOpenGLContext.doneCurrent": (), + "QOpenGLContext.extensions": (), + "QOpenGLContext.extraFunctions": (), + "QOpenGLContext.format": (), + "QOpenGLContext.functions": (), + "QOpenGLContext.globalShareContext": (), + "QOpenGLContext.hasExtension": ('PySide2.QtCore.QByteArray',), + "QOpenGLContext.isOpenGLES": (), + "QOpenGLContext.isValid": (), + "QOpenGLContext.makeCurrent": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.nativeHandle": (), + "QOpenGLContext.openGLModuleHandle": (), + "QOpenGLContext.openGLModuleType": (), + "QOpenGLContext.screen": (), + "QOpenGLContext.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLContext.setNativeHandle": ('Any',), + "QOpenGLContext.setScreen": ('PySide2.QtGui.QScreen',), + "QOpenGLContext.setShareContext": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLContext.shareContext": (), + "QOpenGLContext.shareGroup": (), + "QOpenGLContext.supportsThreadedOpenGL": (), + "QOpenGLContext.surface": (), + "QOpenGLContext.swapBuffers": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.versionFunctions": ('PySide2.QtGui.QOpenGLVersionProfile',), + + # class PySide2.QtGui.QOpenGLContextGroup: + "QOpenGLContextGroup.currentContextGroup": (), + "QOpenGLContextGroup.shares": (), + + # class PySide2.QtGui.QOpenGLDebugLogger: + "QOpenGLDebugLogger.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLDebugLogger.disableMessages": [('PySide2.libpyside.Sources', 'PySide2.libpyside.Types', 'PySide2.libpyside.Severities'), ('list', 'PySide2.libpyside.Sources', 'PySide2.libpyside.Types')], + "QOpenGLDebugLogger.enableMessages": [('PySide2.libpyside.Sources', 'PySide2.libpyside.Types', 'PySide2.libpyside.Severities'), ('list', 'PySide2.libpyside.Sources', 'PySide2.libpyside.Types')], + "QOpenGLDebugLogger.initialize": (), + "QOpenGLDebugLogger.isLogging": (), + "QOpenGLDebugLogger.logMessage": ('PySide2.QtGui.QOpenGLDebugMessage',), + "QOpenGLDebugLogger.loggedMessages": (), + "QOpenGLDebugLogger.loggingMode": (), + "QOpenGLDebugLogger.maximumMessageLength": (), + "QOpenGLDebugLogger.popGroup": (), + "QOpenGLDebugLogger.pushGroup": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Source'), + "QOpenGLDebugLogger.startLogging": ('PySide2.QtGui.QOpenGLDebugLogger.LoggingMode',), + "QOpenGLDebugLogger.stopLogging": (), + + # class PySide2.QtGui.QOpenGLDebugMessage: + "QOpenGLDebugMessage.__init__": [(), ('PySide2.QtGui.QOpenGLDebugMessage',)], + "QOpenGLDebugMessage.__copy__": (), + "QOpenGLDebugMessage.createApplicationMessage": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Severity', 'PySide2.QtGui.QOpenGLDebugMessage.Type'), + "QOpenGLDebugMessage.createThirdPartyMessage": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Severity', 'PySide2.QtGui.QOpenGLDebugMessage.Type'), + "QOpenGLDebugMessage.id": (), + "QOpenGLDebugMessage.message": (), + "QOpenGLDebugMessage.severity": (), + "QOpenGLDebugMessage.source": (), + "QOpenGLDebugMessage.swap": ('PySide2.QtGui.QOpenGLDebugMessage',), + "QOpenGLDebugMessage.type": (), + + # class PySide2.QtGui.QOpenGLExtraFunctions: + "QOpenGLExtraFunctions.__init__": [(), ('PySide2.QtGui.QOpenGLContext',)], + "QOpenGLExtraFunctions.glActiveShaderProgram": ('int', 'int'), + "QOpenGLExtraFunctions.glBeginQuery": ('int', 'int'), + "QOpenGLExtraFunctions.glBeginTransformFeedback": ('int',), + "QOpenGLExtraFunctions.glBindBufferBase": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glBindImageTexture": ('int', 'int', 'int', 'Union[str, int]', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glBindProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glBindSampler": ('int', 'int'), + "QOpenGLExtraFunctions.glBindTransformFeedback": ('int', 'int'), + "QOpenGLExtraFunctions.glBindVertexArray": ('int',), + "QOpenGLExtraFunctions.glBlendBarrier": (), + "QOpenGLExtraFunctions.glBlendEquationSeparatei": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glBlendEquationi": ('int', 'int'), + "QOpenGLExtraFunctions.glBlendFuncSeparatei": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glBlendFunci": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glBlitFramebuffer": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glClearBufferfi": ('int', 'int', 'float', 'int'), + "QOpenGLExtraFunctions.glClearBufferfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glClearBufferiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glClearBufferuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glColorMaski": ('int', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), + "QOpenGLExtraFunctions.glCompressedTexImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCompressedTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCopyImageSubData": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCopyTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDebugMessageControl": ('int', 'int', 'int', 'int', 'int', 'Union[str, int]'), + "QOpenGLExtraFunctions.glDebugMessageInsert": ('int', 'int', 'int', 'int', 'int', 'str'), + "QOpenGLExtraFunctions.glDeleteProgramPipelines": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteQueries": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteSamplers": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteTransformFeedbacks": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteVertexArrays": ('int', 'int'), + "QOpenGLExtraFunctions.glDisablei": ('int', 'int'), + "QOpenGLExtraFunctions.glDispatchCompute": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawArraysIndirect": ('int', 'int'), + "QOpenGLExtraFunctions.glDrawArraysInstanced": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawBuffers": ('int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsBaseVertex": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsIndirect": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsInstanced": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsInstancedBaseVertex": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawRangeElements": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawRangeElementsBaseVertex": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glEnablei": ('int', 'int'), + "QOpenGLExtraFunctions.glEndQuery": ('int',), + "QOpenGLExtraFunctions.glFramebufferParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glFramebufferTexture": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glFramebufferTextureLayer": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGenProgramPipelines": ('int', 'int'), + "QOpenGLExtraFunctions.glGenQueries": ('int', 'int'), + "QOpenGLExtraFunctions.glGenSamplers": ('int', 'int'), + "QOpenGLExtraFunctions.glGenTransformFeedbacks": ('int', 'int'), + "QOpenGLExtraFunctions.glGenVertexArrays": ('int', 'int'), + "QOpenGLExtraFunctions.glGetActiveUniformBlockiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetActiveUniformsiv": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetBufferParameteri64v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetFragDataLocation": ('int', 'str'), + "QOpenGLExtraFunctions.glGetFramebufferParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetGraphicsResetStatus": (), + "QOpenGLExtraFunctions.glGetInteger64i_v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInteger64v": ('int', 'int'), + "QOpenGLExtraFunctions.glGetIntegeri_v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInternalformativ": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetMultisamplefv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetProgramBinary": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramInterfaceiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramPipelineiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramResourceIndex": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glGetProgramResourceLocation": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glGetProgramResourceiv": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetQueryObjectuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetQueryiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetSamplerParameterIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetSamplerParameterIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetSamplerParameterfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetSamplerParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetStringi": ('int', 'int'), + "QOpenGLExtraFunctions.glGetTexLevelParameterfv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetTexLevelParameteriv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetTexParameterIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetTexParameterIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetUniformBlockIndex": ('int', 'str'), + "QOpenGLExtraFunctions.glGetUniformuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetVertexAttribIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetVertexAttribIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetnUniformfv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetnUniformiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetnUniformuiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glInvalidateFramebuffer": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glInvalidateSubFramebuffer": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glIsEnabledi": ('int', 'int'), + "QOpenGLExtraFunctions.glIsProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glIsQuery": ('int',), + "QOpenGLExtraFunctions.glIsSampler": ('int',), + "QOpenGLExtraFunctions.glIsTransformFeedback": ('int',), + "QOpenGLExtraFunctions.glIsVertexArray": ('int',), + "QOpenGLExtraFunctions.glMemoryBarrier": ('int',), + "QOpenGLExtraFunctions.glMemoryBarrierByRegion": ('int',), + "QOpenGLExtraFunctions.glMinSampleShading": ('float',), + "QOpenGLExtraFunctions.glObjectLabel": ('int', 'int', 'int', 'str'), + "QOpenGLExtraFunctions.glObjectPtrLabel": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glPatchParameteri": ('int', 'int'), + "QOpenGLExtraFunctions.glPopDebugGroup": (), + "QOpenGLExtraFunctions.glPrimitiveBoundingBox": ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramBinary": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1f": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform1fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform1i": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1ui": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2f": ('int', 'int', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform2fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform2i": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2ui": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3f": ('int', 'int', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform3fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform3i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4f": ('int', 'int', 'float', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform4fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform4i": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4ui": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2x3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2x4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3x2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3x4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4x2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4x3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glPushDebugGroup": ('int', 'int', 'int', 'str'), + "QOpenGLExtraFunctions.glReadBuffer": ('int',), + "QOpenGLExtraFunctions.glReadnPixels": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glRenderbufferStorageMultisample": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glSampleMaski": ('int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameterIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameterIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameterf": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glSamplerParameterfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glSamplerParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexBuffer": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexParameterIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexParameterIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage2D": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage2DMultisample": ('int', 'int', 'int', 'int', 'int', 'Union[str, int]'), + "QOpenGLExtraFunctions.glTexStorage3D": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage3DMultisample": ('int', 'int', 'int', 'int', 'int', 'int', 'Union[str, int]'), + "QOpenGLExtraFunctions.glTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform1ui": ('int', 'int'), + "QOpenGLExtraFunctions.glUniform1uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform2ui": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform2uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform3ui": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform3uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform4ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform4uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniformBlockBinding": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniformMatrix2x3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix2x4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix3x2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix3x4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix4x2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix4x3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUnmapBuffer": ('int',), + "QOpenGLExtraFunctions.glUseProgramStages": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glValidateProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glVertexAttribBinding": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribDivisor": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribFormat": ('int', 'int', 'int', 'Union[str, int]', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4iv": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4uiv": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribIFormat": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribIPointer": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexBindingDivisor": ('int', 'int'), + + # class PySide2.QtGui.QOpenGLFramebufferObject: + "QOpenGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.addColorAttachment": [('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.attachment": (), + "QOpenGLFramebufferObject.bind": (), + "QOpenGLFramebufferObject.bindDefault": (), + "QOpenGLFramebufferObject.blitFramebuffer": [('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.FramebufferRestorePolicy'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtGui.QOpenGLFramebufferObject', 'int', 'int')], + "QOpenGLFramebufferObject.format": (), + "QOpenGLFramebufferObject.handle": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QOpenGLFramebufferObject.height": (), + "QOpenGLFramebufferObject.isBound": (), + "QOpenGLFramebufferObject.isValid": (), + "QOpenGLFramebufferObject.release": (), + "QOpenGLFramebufferObject.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObject.size": (), + "QOpenGLFramebufferObject.sizes": (), + "QOpenGLFramebufferObject.takeTexture": [(), ('int',)], + "QOpenGLFramebufferObject.texture": (), + "QOpenGLFramebufferObject.textures": (), + "QOpenGLFramebufferObject.toImage": [(), ('bool',), ('bool', 'int')], + "QOpenGLFramebufferObject.width": (), + + # class PySide2.QtGui.QOpenGLFramebufferObjectFormat: + "QOpenGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtGui.QOpenGLFramebufferObjectFormat',)], + "QOpenGLFramebufferObjectFormat.__copy__": (), + "QOpenGLFramebufferObjectFormat.attachment": (), + "QOpenGLFramebufferObjectFormat.internalTextureFormat": (), + "QOpenGLFramebufferObjectFormat.mipmap": (), + "QOpenGLFramebufferObjectFormat.samples": (), + "QOpenGLFramebufferObjectFormat.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QOpenGLFramebufferObjectFormat.setMipmap": ('bool',), + "QOpenGLFramebufferObjectFormat.setSamples": ('int',), + "QOpenGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QOpenGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtGui.QOpenGLFunctions: + "QOpenGLFunctions.__init__": [(), ('PySide2.QtGui.QOpenGLContext',)], + "QOpenGLFunctions.glActiveTexture": ('int',), + "QOpenGLFunctions.glAttachShader": ('int', 'int'), + "QOpenGLFunctions.glBindAttribLocation": ('int', 'int', 'str'), + "QOpenGLFunctions.glBindBuffer": ('int', 'int'), + "QOpenGLFunctions.glBindFramebuffer": ('int', 'int'), + "QOpenGLFunctions.glBindRenderbuffer": ('int', 'int'), + "QOpenGLFunctions.glBindTexture": ('int', 'int'), + "QOpenGLFunctions.glBlendColor": ('float', 'float', 'float', 'float'), + "QOpenGLFunctions.glBlendEquation": ('int',), + "QOpenGLFunctions.glBlendEquationSeparate": ('int', 'int'), + "QOpenGLFunctions.glBlendFunc": ('int', 'int'), + "QOpenGLFunctions.glBlendFuncSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCheckFramebufferStatus": ('int',), + "QOpenGLFunctions.glClear": ('int',), + "QOpenGLFunctions.glClearColor": ('float', 'float', 'float', 'float'), + "QOpenGLFunctions.glClearDepthf": ('float',), + "QOpenGLFunctions.glClearStencil": ('int',), + "QOpenGLFunctions.glColorMask": ('Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), + "QOpenGLFunctions.glCompileShader": ('int',), + "QOpenGLFunctions.glCompressedTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCompressedTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCopyTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCopyTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCreateProgram": (), + "QOpenGLFunctions.glCreateShader": ('int',), + "QOpenGLFunctions.glCullFace": ('int',), + "QOpenGLFunctions.glDeleteBuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteFramebuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteProgram": ('int',), + "QOpenGLFunctions.glDeleteRenderbuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteShader": ('int',), + "QOpenGLFunctions.glDeleteTextures": ('int', 'int'), + "QOpenGLFunctions.glDepthFunc": ('int',), + "QOpenGLFunctions.glDepthMask": ('Union[str, int]',), + "QOpenGLFunctions.glDepthRangef": ('float', 'float'), + "QOpenGLFunctions.glDetachShader": ('int', 'int'), + "QOpenGLFunctions.glDisable": ('int',), + "QOpenGLFunctions.glDisableVertexAttribArray": ('int',), + "QOpenGLFunctions.glDrawArrays": ('int', 'int', 'int'), + "QOpenGLFunctions.glDrawElements": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glEnable": ('int',), + "QOpenGLFunctions.glEnableVertexAttribArray": ('int',), + "QOpenGLFunctions.glFinish": (), + "QOpenGLFunctions.glFlush": (), + "QOpenGLFunctions.glFramebufferRenderbuffer": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glFramebufferTexture2D": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glFrontFace": ('int',), + "QOpenGLFunctions.glGenBuffers": ('int', 'int'), + "QOpenGLFunctions.glGenFramebuffers": ('int', 'int'), + "QOpenGLFunctions.glGenRenderbuffers": ('int', 'int'), + "QOpenGLFunctions.glGenTextures": ('int', 'int'), + "QOpenGLFunctions.glGenerateMipmap": ('int',), + "QOpenGLFunctions.glGetAttachedShaders": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetAttribLocation": ('int', 'str'), + "QOpenGLFunctions.glGetBufferParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetError": (), + "QOpenGLFunctions.glGetFloatv": ('int', 'float'), + "QOpenGLFunctions.glGetFramebufferAttachmentParameteriv": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetIntegerv": ('int', 'int'), + "QOpenGLFunctions.glGetProgramiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetRenderbufferParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetShaderPrecisionFormat": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetShaderiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetString": ('int',), + "QOpenGLFunctions.glGetTexParameterfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetTexParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetUniformLocation": ('int', 'str'), + "QOpenGLFunctions.glGetUniformfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetUniformiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetVertexAttribfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetVertexAttribiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glHint": ('int', 'int'), + "QOpenGLFunctions.glIsBuffer": ('int',), + "QOpenGLFunctions.glIsEnabled": ('int',), + "QOpenGLFunctions.glIsFramebuffer": ('int',), + "QOpenGLFunctions.glIsProgram": ('int',), + "QOpenGLFunctions.glIsRenderbuffer": ('int',), + "QOpenGLFunctions.glIsShader": ('int',), + "QOpenGLFunctions.glIsTexture": ('int',), + "QOpenGLFunctions.glLineWidth": ('float',), + "QOpenGLFunctions.glLinkProgram": ('int',), + "QOpenGLFunctions.glPixelStorei": ('int', 'int'), + "QOpenGLFunctions.glPolygonOffset": ('float', 'float'), + "QOpenGLFunctions.glReadPixels": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glReleaseShaderCompiler": (), + "QOpenGLFunctions.glRenderbufferStorage": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glSampleCoverage": ('float', 'Union[str, int]'), + "QOpenGLFunctions.glScissor": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glShaderBinary": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glStencilFunc": ('int', 'int', 'int'), + "QOpenGLFunctions.glStencilFuncSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glStencilMask": ('int',), + "QOpenGLFunctions.glStencilMaskSeparate": ('int', 'int'), + "QOpenGLFunctions.glStencilOp": ('int', 'int', 'int'), + "QOpenGLFunctions.glStencilOpSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glTexParameterf": ('int', 'int', 'float'), + "QOpenGLFunctions.glTexParameterfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glTexParameteri": ('int', 'int', 'int'), + "QOpenGLFunctions.glTexParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform1f": ('int', 'float'), + "QOpenGLFunctions.glUniform1fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform1i": ('int', 'int'), + "QOpenGLFunctions.glUniform1iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform2f": ('int', 'float', 'float'), + "QOpenGLFunctions.glUniform2fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform2i": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform2iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform3f": ('int', 'float', 'float', 'float'), + "QOpenGLFunctions.glUniform3fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform3i": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform3iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform4f": ('int', 'float', 'float', 'float', 'float'), + "QOpenGLFunctions.glUniform4fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform4i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform4iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniformMatrix2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUniformMatrix3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUniformMatrix4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUseProgram": ('int',), + "QOpenGLFunctions.glValidateProgram": ('int',), + "QOpenGLFunctions.glVertexAttrib1f": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib1fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib2f": ('int', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib2fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib3f": ('int', 'float', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib3fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib4f": ('int', 'float', 'float', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib4fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttribPointer": ('int', 'int', 'int', 'Union[str, int]', 'int', 'int'), + "QOpenGLFunctions.glViewport": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.hasOpenGLFeature": ('PySide2.QtGui.QOpenGLFunctions.OpenGLFeature',), + "QOpenGLFunctions.initializeOpenGLFunctions": (), + "QOpenGLFunctions.openGLFeatures": (), + + # class PySide2.QtGui.QOpenGLPixelTransferOptions: + "QOpenGLPixelTransferOptions.__init__": [(), ('PySide2.QtGui.QOpenGLPixelTransferOptions',)], + "QOpenGLPixelTransferOptions.__copy__": (), + "QOpenGLPixelTransferOptions.alignment": (), + "QOpenGLPixelTransferOptions.imageHeight": (), + "QOpenGLPixelTransferOptions.isLeastSignificantBitFirst": (), + "QOpenGLPixelTransferOptions.isSwapBytesEnabled": (), + "QOpenGLPixelTransferOptions.rowLength": (), + "QOpenGLPixelTransferOptions.setAlignment": ('int',), + "QOpenGLPixelTransferOptions.setImageHeight": ('int',), + "QOpenGLPixelTransferOptions.setLeastSignificantByteFirst": ('bool',), + "QOpenGLPixelTransferOptions.setRowLength": ('int',), + "QOpenGLPixelTransferOptions.setSkipImages": ('int',), + "QOpenGLPixelTransferOptions.setSkipPixels": ('int',), + "QOpenGLPixelTransferOptions.setSkipRows": ('int',), + "QOpenGLPixelTransferOptions.setSwapBytesEnabled": ('bool',), + "QOpenGLPixelTransferOptions.skipImages": (), + "QOpenGLPixelTransferOptions.skipPixels": (), + "QOpenGLPixelTransferOptions.skipRows": (), + "QOpenGLPixelTransferOptions.swap": ('PySide2.QtGui.QOpenGLPixelTransferOptions',), + + # class PySide2.QtGui.QOpenGLShader: + "QOpenGLShader.__init__": ('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QObject'), + "QOpenGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShader.compileSourceFile": ('str',), + "QOpenGLShader.hasOpenGLShaders": ('PySide2.libpyside.ShaderType', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLShader.isCompiled": (), + "QOpenGLShader.log": (), + "QOpenGLShader.shaderId": (), + "QOpenGLShader.shaderType": (), + "QOpenGLShader.sourceCode": (), + + # class PySide2.QtGui.QOpenGLShaderProgram: + "QOpenGLShaderProgram.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLShaderProgram.addCacheableShaderFromSourceCode": [('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QByteArray'), ('PySide2.libpyside.ShaderType', 'str')], + "QOpenGLShaderProgram.addCacheableShaderFromSourceFile": ('PySide2.libpyside.ShaderType', 'str'), + "QOpenGLShaderProgram.addShader": ('PySide2.QtGui.QOpenGLShader',), + "QOpenGLShaderProgram.addShaderFromSourceCode": [('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QByteArray'), ('PySide2.libpyside.ShaderType', 'str')], + "QOpenGLShaderProgram.addShaderFromSourceFile": ('PySide2.libpyside.ShaderType', 'str'), + "QOpenGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShaderProgram.bind": (), + "QOpenGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QOpenGLShaderProgram.create": (), + "QOpenGLShaderProgram.defaultInnerTessellationLevels": (), + "QOpenGLShaderProgram.defaultOuterTessellationLevels": (), + "QOpenGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QOpenGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QOpenGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLShaderProgram.isLinked": (), + "QOpenGLShaderProgram.link": (), + "QOpenGLShaderProgram.log": (), + "QOpenGLShaderProgram.maxGeometryOutputVertices": (), + "QOpenGLShaderProgram.patchVertexCount": (), + "QOpenGLShaderProgram.programId": (), + "QOpenGLShaderProgram.release": (), + "QOpenGLShaderProgram.removeAllShaders": (), + "QOpenGLShaderProgram.removeShader": ('PySide2.QtGui.QOpenGLShader',), + "QOpenGLShaderProgram.setAttributeArray": [('int', 'float', 'int', 'int'), ('int', 'int', 'int', 'int', 'int'), ('str', 'float', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QOpenGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QOpenGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'float', 'int', 'int'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'float', 'int', 'int')], + "QOpenGLShaderProgram.setDefaultInnerTessellationLevels": ('list',), + "QOpenGLShaderProgram.setDefaultOuterTessellationLevels": ('list',), + "QOpenGLShaderProgram.setPatchVertexCount": ('int',), + "QOpenGLShaderProgram.setUniformValue": [('int', 'List[List[float]]'), ('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'List[List[float]]'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QOpenGLShaderProgram.setUniformValueArray": [('int', 'float', 'int', 'int'), ('int', 'int', 'int'), ('str', 'float', 'int', 'int'), ('str', 'int', 'int')], + "QOpenGLShaderProgram.shaders": (), + "QOpenGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtGui.QOpenGLTexture: + "QOpenGLTexture.__init__": [('PySide2.QtGui.QImage', 'PySide2.QtGui.QOpenGLTexture.MipMapGeneration'), ('PySide2.QtGui.QOpenGLTexture.Target',)], + "QOpenGLTexture.allocateStorage": [(), ('PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType')], + "QOpenGLTexture.bind": [(), ('int', 'PySide2.QtGui.QOpenGLTexture.TextureUnitReset')], + "QOpenGLTexture.borderColor": (), + "QOpenGLTexture.boundTextureId": [('PySide2.QtGui.QOpenGLTexture.BindingTarget',), ('int', 'PySide2.QtGui.QOpenGLTexture.BindingTarget')], + "QOpenGLTexture.comparisonFunction": (), + "QOpenGLTexture.comparisonMode": (), + "QOpenGLTexture.create": (), + "QOpenGLTexture.createTextureView": ('PySide2.QtGui.QOpenGLTexture.Target', 'PySide2.QtGui.QOpenGLTexture.TextureFormat', 'int', 'int', 'int', 'int'), + "QOpenGLTexture.depth": (), + "QOpenGLTexture.depthStencilMode": (), + "QOpenGLTexture.destroy": (), + "QOpenGLTexture.faces": (), + "QOpenGLTexture.format": (), + "QOpenGLTexture.generateMipMaps": [(), ('int', 'bool')], + "QOpenGLTexture.hasFeature": ('PySide2.QtGui.QOpenGLTexture.Feature',), + "QOpenGLTexture.height": (), + "QOpenGLTexture.isAutoMipMapGenerationEnabled": (), + "QOpenGLTexture.isBound": [(), ('int',)], + "QOpenGLTexture.isCreated": (), + "QOpenGLTexture.isFixedSamplePositions": (), + "QOpenGLTexture.isStorageAllocated": (), + "QOpenGLTexture.isTextureView": (), + "QOpenGLTexture.layers": (), + "QOpenGLTexture.levelOfDetailRange": (), + "QOpenGLTexture.levelofDetailBias": (), + "QOpenGLTexture.magnificationFilter": (), + "QOpenGLTexture.maximumAnisotropy": (), + "QOpenGLTexture.maximumLevelOfDetail": (), + "QOpenGLTexture.maximumMipLevels": (), + "QOpenGLTexture.minMagFilters": (), + "QOpenGLTexture.minificationFilter": (), + "QOpenGLTexture.minimumLevelOfDetail": (), + "QOpenGLTexture.mipBaseLevel": (), + "QOpenGLTexture.mipLevelRange": (), + "QOpenGLTexture.mipLevels": (), + "QOpenGLTexture.mipMaxLevel": (), + "QOpenGLTexture.release": [(), ('int', 'PySide2.QtGui.QOpenGLTexture.TextureUnitReset')], + "QOpenGLTexture.samples": (), + "QOpenGLTexture.setAutoMipMapGenerationEnabled": ('bool',), + "QOpenGLTexture.setBorderColor": [('PySide2.QtGui.QColor',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QOpenGLTexture.setComparisonFunction": ('PySide2.QtGui.QOpenGLTexture.ComparisonFunction',), + "QOpenGLTexture.setComparisonMode": ('PySide2.QtGui.QOpenGLTexture.ComparisonMode',), + "QOpenGLTexture.setCompressedData": [('int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions')], + "QOpenGLTexture.setData": [('PySide2.QtGui.QImage', 'PySide2.QtGui.QOpenGLTexture.MipMapGeneration'), ('PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions')], + "QOpenGLTexture.setDepthStencilMode": ('PySide2.QtGui.QOpenGLTexture.DepthStencilMode',), + "QOpenGLTexture.setFixedSamplePositions": ('bool',), + "QOpenGLTexture.setFormat": ('PySide2.QtGui.QOpenGLTexture.TextureFormat',), + "QOpenGLTexture.setLayers": ('int',), + "QOpenGLTexture.setLevelOfDetailRange": ('float', 'float'), + "QOpenGLTexture.setLevelofDetailBias": ('float',), + "QOpenGLTexture.setMagnificationFilter": ('PySide2.QtGui.QOpenGLTexture.Filter',), + "QOpenGLTexture.setMaximumAnisotropy": ('float',), + "QOpenGLTexture.setMaximumLevelOfDetail": ('float',), + "QOpenGLTexture.setMinMagFilters": ('PySide2.QtGui.QOpenGLTexture.Filter', 'PySide2.QtGui.QOpenGLTexture.Filter'), + "QOpenGLTexture.setMinificationFilter": ('PySide2.QtGui.QOpenGLTexture.Filter',), + "QOpenGLTexture.setMinimumLevelOfDetail": ('float',), + "QOpenGLTexture.setMipBaseLevel": ('int',), + "QOpenGLTexture.setMipLevelRange": ('int', 'int'), + "QOpenGLTexture.setMipLevels": ('int',), + "QOpenGLTexture.setMipMaxLevel": ('int',), + "QOpenGLTexture.setSamples": ('int',), + "QOpenGLTexture.setSize": ('int', 'int', 'int'), + "QOpenGLTexture.setSwizzleMask": [('PySide2.QtGui.QOpenGLTexture.SwizzleComponent', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue'), ('PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue')], + "QOpenGLTexture.setWrapMode": [('PySide2.QtGui.QOpenGLTexture.CoordinateDirection', 'PySide2.QtGui.QOpenGLTexture.WrapMode'), ('PySide2.QtGui.QOpenGLTexture.WrapMode',)], + "QOpenGLTexture.swizzleMask": ('PySide2.QtGui.QOpenGLTexture.SwizzleComponent',), + "QOpenGLTexture.target": (), + "QOpenGLTexture.textureId": (), + "QOpenGLTexture.width": (), + "QOpenGLTexture.wrapMode": ('PySide2.QtGui.QOpenGLTexture.CoordinateDirection',), + + # class PySide2.QtGui.QOpenGLTextureBlitter: + "QOpenGLTextureBlitter.__init__": (), + "QOpenGLTextureBlitter.bind": ('int',), + "QOpenGLTextureBlitter.blit": ('int', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix3x3'), + "QOpenGLTextureBlitter.create": (), + "QOpenGLTextureBlitter.destroy": (), + "QOpenGLTextureBlitter.isCreated": (), + "QOpenGLTextureBlitter.release": (), + "QOpenGLTextureBlitter.setOpacity": ('float',), + "QOpenGLTextureBlitter.setRedBlueSwizzle": ('bool',), + "QOpenGLTextureBlitter.supportsExternalOESTarget": (), + "QOpenGLTextureBlitter.targetTransform": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRect'), + + # class PySide2.QtGui.QOpenGLTimeMonitor: + "QOpenGLTimeMonitor.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLTimeMonitor.create": (), + "QOpenGLTimeMonitor.destroy": (), + "QOpenGLTimeMonitor.isCreated": (), + "QOpenGLTimeMonitor.isResultAvailable": (), + "QOpenGLTimeMonitor.objectIds": (), + "QOpenGLTimeMonitor.recordSample": (), + "QOpenGLTimeMonitor.reset": (), + "QOpenGLTimeMonitor.sampleCount": (), + "QOpenGLTimeMonitor.setSampleCount": ('int',), + "QOpenGLTimeMonitor.waitForIntervals": (), + "QOpenGLTimeMonitor.waitForSamples": (), + + # class PySide2.QtGui.QOpenGLTimerQuery: + "QOpenGLTimerQuery.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLTimerQuery.begin": (), + "QOpenGLTimerQuery.create": (), + "QOpenGLTimerQuery.destroy": (), + "QOpenGLTimerQuery.end": (), + "QOpenGLTimerQuery.isCreated": (), + "QOpenGLTimerQuery.isResultAvailable": (), + "QOpenGLTimerQuery.objectId": (), + "QOpenGLTimerQuery.recordTimestamp": (), + "QOpenGLTimerQuery.waitForResult": (), + "QOpenGLTimerQuery.waitForTimestamp": (), + + # class PySide2.QtGui.QOpenGLVersionProfile: + "QOpenGLVersionProfile.__init__": [(), ('PySide2.QtGui.QOpenGLVersionProfile',), ('PySide2.QtGui.QSurfaceFormat',)], + "QOpenGLVersionProfile.__copy__": (), + "QOpenGLVersionProfile.hasProfiles": (), + "QOpenGLVersionProfile.isLegacyVersion": (), + "QOpenGLVersionProfile.isValid": (), + "QOpenGLVersionProfile.profile": (), + "QOpenGLVersionProfile.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QOpenGLVersionProfile.setVersion": ('int', 'int'), + "QOpenGLVersionProfile.version": (), + + # class PySide2.QtGui.QOpenGLVertexArrayObject: + "QOpenGLVertexArrayObject.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLVertexArrayObject.bind": (), + "QOpenGLVertexArrayObject.create": (), + "QOpenGLVertexArrayObject.destroy": (), + "QOpenGLVertexArrayObject.isCreated": (), + "QOpenGLVertexArrayObject.objectId": (), + "QOpenGLVertexArrayObject.release": (), + + # class PySide2.QtGui.QOpenGLWindow: + "QOpenGLWindow.__init__": [('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLWindow.UpdateBehavior', 'PySide2.QtGui.QWindow'), ('PySide2.QtGui.QOpenGLWindow.UpdateBehavior', 'PySide2.QtGui.QWindow')], + "QOpenGLWindow.context": (), + "QOpenGLWindow.defaultFramebufferObject": (), + "QOpenGLWindow.doneCurrent": (), + "QOpenGLWindow.grabFramebuffer": (), + "QOpenGLWindow.initializeGL": (), + "QOpenGLWindow.isValid": (), + "QOpenGLWindow.makeCurrent": (), + "QOpenGLWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWindow.paintGL": (), + "QOpenGLWindow.paintOverGL": (), + "QOpenGLWindow.paintUnderGL": (), + "QOpenGLWindow.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWindow.resizeGL": ('int', 'int'), + "QOpenGLWindow.shareContext": (), + "QOpenGLWindow.updateBehavior": (), + + # class PySide2.QtGui.QPageLayout: + "QPageLayout.__init__": [(), ('PySide2.QtGui.QPageLayout',), ('PySide2.QtGui.QPageSize', 'PySide2.QtGui.QPageLayout.Orientation', 'PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit', 'PySide2.QtCore.QMarginsF')], + "QPageLayout.__copy__": (), + "QPageLayout.fullRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.fullRectPixels": ('int',), + "QPageLayout.fullRectPoints": (), + "QPageLayout.isEquivalentTo": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.isValid": (), + "QPageLayout.margins": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.marginsPixels": ('int',), + "QPageLayout.marginsPoints": (), + "QPageLayout.maximumMargins": (), + "QPageLayout.minimumMargins": (), + "QPageLayout.mode": (), + "QPageLayout.orientation": (), + "QPageLayout.pageSize": (), + "QPageLayout.paintRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.paintRectPixels": ('int',), + "QPageLayout.paintRectPoints": (), + "QPageLayout.setBottomMargin": ('float',), + "QPageLayout.setLeftMargin": ('float',), + "QPageLayout.setMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMinimumMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMode": ('PySide2.QtGui.QPageLayout.Mode',), + "QPageLayout.setOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPageLayout.setPageSize": ('PySide2.QtGui.QPageSize', 'PySide2.QtCore.QMarginsF'), + "QPageLayout.setRightMargin": ('float',), + "QPageLayout.setTopMargin": ('float',), + "QPageLayout.setUnits": ('PySide2.QtGui.QPageLayout.Unit',), + "QPageLayout.swap": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.units": (), + + # class PySide2.QtGui.QPageSize: + "QPageSize.__init__": [(), ('PySide2.QtCore.QSize', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.__copy__": (), + "QPageSize.definitionSize": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.definitionUnits": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.id": [(), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('int',)], + "QPageSize.isEquivalentTo": ('PySide2.QtGui.QPageSize',), + "QPageSize.isValid": (), + "QPageSize.key": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.name": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.rect": ('PySide2.QtGui.QPageSize.Unit',), + "QPageSize.rectPixels": ('int',), + "QPageSize.rectPoints": (), + "QPageSize.size": [('PySide2.QtGui.QPageSize.PageSizeId', 'PySide2.QtGui.QPageSize.Unit'), ('PySide2.QtGui.QPageSize.Unit',)], + "QPageSize.sizePixels": [('PySide2.QtGui.QPageSize.PageSizeId', 'int'), ('int',)], + "QPageSize.sizePoints": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.swap": ('PySide2.QtGui.QPageSize',), + "QPageSize.windowsId": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + + # class PySide2.QtGui.QPagedPaintDevice: + "QPagedPaintDevice.__init__": (), + "QPagedPaintDevice.devicePageLayout": (), + "QPagedPaintDevice.margins": (), + "QPagedPaintDevice.newPage": (), + "QPagedPaintDevice.pageLayout": (), + "QPagedPaintDevice.pageSize": (), + "QPagedPaintDevice.pageSizeMM": (), + "QPagedPaintDevice.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPagedPaintDevice.setPageLayout": ('PySide2.QtGui.QPageLayout',), + "QPagedPaintDevice.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit')], + "QPagedPaintDevice.setPageOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPagedPaintDevice.setPageSize": [('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPagedPaintDevice.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtGui.QPaintDevice: + "QPaintDevice.__init__": (), + "QPaintDevice.colorCount": (), + "QPaintDevice.depth": (), + "QPaintDevice.devType": (), + "QPaintDevice.devicePixelRatio": (), + "QPaintDevice.devicePixelRatioF": (), + "QPaintDevice.devicePixelRatioFScale": (), + "QPaintDevice.height": (), + "QPaintDevice.heightMM": (), + "QPaintDevice.initPainter": ('PySide2.QtGui.QPainter',), + "QPaintDevice.logicalDpiX": (), + "QPaintDevice.logicalDpiY": (), + "QPaintDevice.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDevice.paintEngine": (), + "QPaintDevice.paintingActive": (), + "QPaintDevice.physicalDpiX": (), + "QPaintDevice.physicalDpiY": (), + "QPaintDevice.redirected": ('PySide2.QtCore.QPoint',), + "QPaintDevice.sharedPainter": (), + "QPaintDevice.width": (), + "QPaintDevice.widthMM": (), + + # class PySide2.QtGui.QPaintDeviceWindow: + "QPaintDeviceWindow.event": ('PySide2.QtCore.QEvent',), + "QPaintDeviceWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QPaintDeviceWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDeviceWindow.paintEngine": (), + "QPaintDeviceWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPaintDeviceWindow.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + + # class PySide2.QtGui.QPaintEngine: + "QPaintEngine.__init__": ('PySide2.libpyside.PaintEngineFeatures',), + "QPaintEngine.begin": ('PySide2.QtGui.QPaintDevice',), + "QPaintEngine.clearDirty": ('PySide2.libpyside.DirtyFlags',), + "QPaintEngine.coordinateOffset": (), + "QPaintEngine.drawEllipse": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QPaintEngine.drawImage": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'PySide2.libpyside.ImageConversionFlags'), + "QPaintEngine.drawLines": [('PySide2.QtCore.QLine', 'int'), ('PySide2.QtCore.QLineF', 'int')], + "QPaintEngine.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPaintEngine.drawPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), + "QPaintEngine.drawPoints": [('PySide2.QtCore.QPoint', 'int'), ('PySide2.QtCore.QPointF', 'int')], + "QPaintEngine.drawPolygon": [('PySide2.QtCore.QPoint', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode')], + "QPaintEngine.drawRects": [('PySide2.QtCore.QRect', 'int'), ('PySide2.QtCore.QRectF', 'int')], + "QPaintEngine.drawTextItem": ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), + "QPaintEngine.drawTiledPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), + "QPaintEngine.end": (), + "QPaintEngine.hasFeature": ('PySide2.libpyside.PaintEngineFeatures',), + "QPaintEngine.isActive": (), + "QPaintEngine.isExtended": (), + "QPaintEngine.paintDevice": (), + "QPaintEngine.painter": (), + "QPaintEngine.setActive": ('bool',), + "QPaintEngine.setDirty": ('PySide2.libpyside.DirtyFlags',), + "QPaintEngine.setSystemClip": ('PySide2.QtGui.QRegion',), + "QPaintEngine.setSystemRect": ('PySide2.QtCore.QRect',), + "QPaintEngine.syncState": (), + "QPaintEngine.systemClip": (), + "QPaintEngine.systemRect": (), + "QPaintEngine.testDirty": ('PySide2.libpyside.DirtyFlags',), + "QPaintEngine.type": (), + "QPaintEngine.updateState": ('PySide2.QtGui.QPaintEngineState',), + + # class PySide2.QtGui.QPaintEngineState: + "QPaintEngineState.__init__": (), + "QPaintEngineState.backgroundBrush": (), + "QPaintEngineState.backgroundMode": (), + "QPaintEngineState.brush": (), + "QPaintEngineState.brushNeedsResolving": (), + "QPaintEngineState.brushOrigin": (), + "QPaintEngineState.clipOperation": (), + "QPaintEngineState.clipPath": (), + "QPaintEngineState.clipRegion": (), + "QPaintEngineState.compositionMode": (), + "QPaintEngineState.font": (), + "QPaintEngineState.isClipEnabled": (), + "QPaintEngineState.matrix": (), + "QPaintEngineState.opacity": (), + "QPaintEngineState.painter": (), + "QPaintEngineState.pen": (), + "QPaintEngineState.penNeedsResolving": (), + "QPaintEngineState.renderHints": (), + "QPaintEngineState.state": (), + "QPaintEngineState.transform": (), + + # class PySide2.QtGui.QPaintEvent: + "QPaintEvent.__init__": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QPaintEvent.rect": (), + "QPaintEvent.region": (), + + # class PySide2.QtGui.QPainter: + "QPainter.__init__": [(), ('PySide2.QtGui.QPaintDevice',)], + "QPainter.background": (), + "QPainter.backgroundMode": (), + "QPainter.begin": ('PySide2.QtGui.QPaintDevice',), + "QPainter.beginNativePainting": (), + "QPainter.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str'), ('PySide2.QtCore.QRectF', 'int', 'str'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str')], + "QPainter.brush": (), + "QPainter.brushOrigin": (), + "QPainter.clipBoundingRect": (), + "QPainter.clipPath": (), + "QPainter.clipRegion": (), + "QPainter.combinedMatrix": (), + "QPainter.combinedTransform": (), + "QPainter.compositionMode": (), + "QPainter.device": (), + "QPainter.deviceMatrix": (), + "QPainter.deviceTransform": (), + "QPainter.drawArc": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawChord": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawConvexPolygon": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawEllipse": [('PySide2.QtCore.QPoint', 'int', 'int'), ('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawImage": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'PySide2.libpyside.ImageConversionFlags'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'PySide2.libpyside.ImageConversionFlags'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'PySide2.libpyside.ImageConversionFlags'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'PySide2.libpyside.ImageConversionFlags'), ('int', 'int', 'PySide2.QtGui.QImage', 'int', 'int', 'int', 'int', 'PySide2.libpyside.ImageConversionFlags')], + "QPainter.drawLine": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int')], + "QPainter.drawLines": ('list',), + "QPainter.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPainter.drawPicture": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPicture'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPicture'), ('int', 'int', 'PySide2.QtGui.QPicture')], + "QPainter.drawPie": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmap": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmapFragments": ('PySide2.QtGui.QPainter.PixmapFragment', 'int', 'PySide2.QtGui.QPixmap', 'PySide2.libpyside.PixmapFragmentHints'), + "QPainter.drawPoint": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.drawPoints": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawPolygon": [('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.FillRule'), ('list', 'PySide2.QtCore.Qt.FillRule')], + "QPainter.drawPolyline": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawRects": ('list',), + "QPainter.drawRoundRect": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawRoundedRect": [('PySide2.QtCore.QRect', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('int', 'int', 'int', 'int', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainter.drawStaticText": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QStaticText'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QStaticText'), ('int', 'int', 'PySide2.QtGui.QStaticText')], + "QPainter.drawText": [('PySide2.QtCore.QPoint', 'str'), ('PySide2.QtCore.QPointF', 'str'), ('PySide2.QtCore.QRect', 'int', 'str', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'int', 'str', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str', 'PySide2.QtCore.QRect'), ('int', 'int', 'str')], + "QPainter.drawTextItem": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QTextItem'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), ('int', 'int', 'PySide2.QtGui.QTextItem')], + "QPainter.drawTiledPixmap": [('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int')], + "QPainter.end": (), + "QPainter.endNativePainting": (), + "QPainter.eraseRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.fillPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QBrush'), + "QPainter.fillRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.BrushStyle'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.GlobalColor'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QBrush'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QColor')], + "QPainter.font": (), + "QPainter.fontInfo": (), + "QPainter.fontMetrics": (), + "QPainter.hasClipping": (), + "QPainter.initFrom": ('PySide2.QtGui.QPaintDevice',), + "QPainter.isActive": (), + "QPainter.layoutDirection": (), + "QPainter.matrix": (), + "QPainter.matrixEnabled": (), + "QPainter.opacity": (), + "QPainter.paintEngine": (), + "QPainter.pen": (), + "QPainter.redirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.renderHints": (), + "QPainter.resetMatrix": (), + "QPainter.resetTransform": (), + "QPainter.restore": (), + "QPainter.restoreRedirected": ('PySide2.QtGui.QPaintDevice',), + "QPainter.rotate": ('float',), + "QPainter.save": (), + "QPainter.scale": ('float', 'float'), + "QPainter.setBackground": ('PySide2.QtGui.QBrush',), + "QPainter.setBackgroundMode": ('PySide2.QtCore.Qt.BGMode',), + "QPainter.setBrush": [('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtGui.QBrush',)], + "QPainter.setBrushOrigin": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.setClipPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ClipOperation'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ClipOperation'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ClipOperation')], + "QPainter.setClipRegion": ('PySide2.QtGui.QRegion', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipping": ('bool',), + "QPainter.setCompositionMode": ('PySide2.QtGui.QPainter.CompositionMode',), + "QPainter.setFont": ('PySide2.QtGui.QFont',), + "QPainter.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QPainter.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setMatrixEnabled": ('bool',), + "QPainter.setOpacity": ('float',), + "QPainter.setPen": [('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPainter.setRedirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QPainter.setRenderHints": ('PySide2.libpyside.RenderHints', 'bool'), + "QPainter.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.setViewTransformEnabled": ('bool',), + "QPainter.setViewport": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWindow": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWorldMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setWorldMatrixEnabled": ('bool',), + "QPainter.setWorldTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.shear": ('float', 'float'), + "QPainter.strokePath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen'), + "QPainter.testRenderHint": ('PySide2.QtGui.QPainter.RenderHint',), + "QPainter.transform": (), + "QPainter.translate": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainter.viewTransformEnabled": (), + "QPainter.viewport": (), + "QPainter.window": (), + "QPainter.worldMatrix": (), + "QPainter.worldMatrixEnabled": (), + "QPainter.worldTransform": (), + + # class PySide2.QtGui.QPainterPath: + "QPainterPath.__init__": [(), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.__copy__": (), + "QPainterPath.addEllipse": [('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.addPolygon": ('PySide2.QtGui.QPolygonF',), + "QPainterPath.addRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addRegion": ('PySide2.QtGui.QRegion',), + "QPainterPath.addRoundRect": [('PySide2.QtCore.QRectF', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QPainterPath.addRoundedRect": [('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('float', 'float', 'float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainterPath.addText": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QFont', 'str'), ('float', 'float', 'PySide2.QtGui.QFont', 'str')], + "QPainterPath.angleAtPercent": ('float',), + "QPainterPath.arcMoveTo": [('PySide2.QtCore.QRectF', 'float'), ('float', 'float', 'float', 'float', 'float')], + "QPainterPath.arcTo": [('PySide2.QtCore.QRectF', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.boundingRect": (), + "QPainterPath.closeSubpath": (), + "QPainterPath.connectPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.controlPointRect": (), + "QPainterPath.cubicTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.currentPosition": (), + "QPainterPath.elementAt": ('int',), + "QPainterPath.elementCount": (), + "QPainterPath.fillRule": (), + "QPainterPath.intersected": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.intersects": [('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.isEmpty": (), + "QPainterPath.length": (), + "QPainterPath.lineTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.percentAtLength": ('float',), + "QPainterPath.pointAtPercent": ('float',), + "QPainterPath.quadTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QPainterPath.setElementPositionAt": ('int', 'float', 'float'), + "QPainterPath.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QPainterPath.simplified": (), + "QPainterPath.slopeAtPercent": ('float',), + "QPainterPath.subtracted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.subtractedInverted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.swap": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.toFillPolygon": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toFillPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toReversed": (), + "QPainterPath.toSubpathPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.united": ('PySide2.QtGui.QPainterPath',), + + # class PySide2.QtGui.QPainterPathStroker: + "QPainterPathStroker.__init__": [(), ('PySide2.QtGui.QPen',)], + "QPainterPathStroker.capStyle": (), + "QPainterPathStroker.createStroke": ('PySide2.QtGui.QPainterPath',), + "QPainterPathStroker.curveThreshold": (), + "QPainterPathStroker.dashOffset": (), + "QPainterPathStroker.dashPattern": (), + "QPainterPathStroker.joinStyle": (), + "QPainterPathStroker.miterLimit": (), + "QPainterPathStroker.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPainterPathStroker.setCurveThreshold": ('float',), + "QPainterPathStroker.setDashOffset": ('float',), + "QPainterPathStroker.setDashPattern": [('PySide2.QtCore.Qt.PenStyle',), ('list',)], + "QPainterPathStroker.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPainterPathStroker.setMiterLimit": ('float',), + "QPainterPathStroker.setWidth": ('float',), + "QPainterPathStroker.width": (), + + # class PySide2.QtGui.QPalette: + "QPalette.__init__": [(), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette',)], + "QPalette.__copy__": (), + "QPalette.alternateBase": (), + "QPalette.background": (), + "QPalette.base": (), + "QPalette.brightText": (), + "QPalette.brush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.button": (), + "QPalette.buttonText": (), + "QPalette.cacheKey": (), + "QPalette.color": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.currentColorGroup": (), + "QPalette.dark": (), + "QPalette.foreground": (), + "QPalette.highlight": (), + "QPalette.highlightedText": (), + "QPalette.isBrushSet": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), + "QPalette.isCopyOf": ('PySide2.QtGui.QPalette',), + "QPalette.isEqual": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorGroup'), + "QPalette.light": (), + "QPalette.link": (), + "QPalette.linkVisited": (), + "QPalette.mid": (), + "QPalette.midlight": (), + "QPalette.resolve": [(), ('PySide2.QtGui.QPalette',), ('int',)], + "QPalette.setBrush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush')], + "QPalette.setColor": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor')], + "QPalette.setColorGroup": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), + "QPalette.setCurrentColorGroup": ('PySide2.QtGui.QPalette.ColorGroup',), + "QPalette.shadow": (), + "QPalette.swap": ('PySide2.QtGui.QPalette',), + "QPalette.text": (), + "QPalette.toolTipBase": (), + "QPalette.toolTipText": (), + "QPalette.window": (), + "QPalette.windowText": (), + + # class PySide2.QtGui.QPdfWriter: + "QPdfWriter.__init__": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPdfWriter.creator": (), + "QPdfWriter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPdfWriter.newPage": (), + "QPdfWriter.paintEngine": (), + "QPdfWriter.pdfVersion": (), + "QPdfWriter.resolution": (), + "QPdfWriter.setCreator": ('str',), + "QPdfWriter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPdfWriter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPdfWriter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPdfWriter.setPdfVersion": ('PySide2.QtGui.QPagedPaintDevice.PdfVersion',), + "QPdfWriter.setResolution": ('int',), + "QPdfWriter.setTitle": ('str',), + "QPdfWriter.title": (), + + # class PySide2.QtGui.QPen: + "QPen.__init__": [(), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QBrush', 'float', 'PySide2.QtCore.Qt.PenStyle', 'PySide2.QtCore.Qt.PenCapStyle', 'PySide2.QtCore.Qt.PenJoinStyle'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPen.__copy__": (), + "QPen.brush": (), + "QPen.capStyle": (), + "QPen.color": (), + "QPen.dashOffset": (), + "QPen.dashPattern": (), + "QPen.isCosmetic": (), + "QPen.isSolid": (), + "QPen.joinStyle": (), + "QPen.miterLimit": (), + "QPen.setBrush": ('PySide2.QtGui.QBrush',), + "QPen.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPen.setColor": ('PySide2.QtGui.QColor',), + "QPen.setCosmetic": ('bool',), + "QPen.setDashOffset": ('float',), + "QPen.setDashPattern": ('list',), + "QPen.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPen.setMiterLimit": ('float',), + "QPen.setStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QPen.setWidth": ('int',), + "QPen.setWidthF": ('float',), + "QPen.style": (), + "QPen.swap": ('PySide2.QtGui.QPen',), + "QPen.width": (), + "QPen.widthF": (), + + # class PySide2.QtGui.QPicture: + "QPicture.__init__": [('PySide2.QtGui.QPicture',), ('int',)], + "QPicture.__copy__": (), + "QPicture.boundingRect": (), + "QPicture.data": (), + "QPicture.devType": (), + "QPicture.inputFormatList": (), + "QPicture.inputFormats": (), + "QPicture.isNull": (), + "QPicture.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPicture.outputFormatList": (), + "QPicture.outputFormats": (), + "QPicture.paintEngine": (), + "QPicture.pictureFormat": ('str',), + "QPicture.play": ('PySide2.QtGui.QPainter',), + "QPicture.save": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.setBoundingRect": ('PySide2.QtCore.QRect',), + "QPicture.setData": ('str', 'int'), + "QPicture.size": (), + "QPicture.swap": ('PySide2.QtGui.QPicture',), + + # class PySide2.QtGui.QPictureIO: + "QPictureIO.__init__": [(), ('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPictureIO.description": (), + "QPictureIO.fileName": (), + "QPictureIO.format": (), + "QPictureIO.gamma": (), + "QPictureIO.inputFormats": (), + "QPictureIO.ioDevice": (), + "QPictureIO.outputFormats": (), + "QPictureIO.parameters": (), + "QPictureIO.picture": (), + "QPictureIO.pictureFormat": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPictureIO.quality": (), + "QPictureIO.read": (), + "QPictureIO.setDescription": ('str',), + "QPictureIO.setFileName": ('str',), + "QPictureIO.setFormat": ('str',), + "QPictureIO.setGamma": ('float',), + "QPictureIO.setIODevice": ('PySide2.QtCore.QIODevice',), + "QPictureIO.setParameters": ('str',), + "QPictureIO.setPicture": ('PySide2.QtGui.QPicture',), + "QPictureIO.setQuality": ('int',), + "QPictureIO.setStatus": ('int',), + "QPictureIO.status": (), + "QPictureIO.write": (), + + # class PySide2.QtGui.QPixelFormat: + "QPixelFormat.__init__": [(), ('PySide2.QtGui.QPixelFormat',), ('PySide2.QtGui.QPixelFormat.ColorModel', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'PySide2.QtGui.QPixelFormat.AlphaUsage', 'PySide2.QtGui.QPixelFormat.AlphaPosition', 'PySide2.QtGui.QPixelFormat.AlphaPremultiplied', 'PySide2.QtGui.QPixelFormat.TypeInterpretation', 'PySide2.QtGui.QPixelFormat.ByteOrder', 'Union[str, int]')], + "QPixelFormat.__copy__": (), + "QPixelFormat.alphaPosition": (), + "QPixelFormat.alphaSize": (), + "QPixelFormat.alphaUsage": (), + "QPixelFormat.bitsPerPixel": (), + "QPixelFormat.blackSize": (), + "QPixelFormat.blueSize": (), + "QPixelFormat.brightnessSize": (), + "QPixelFormat.byteOrder": (), + "QPixelFormat.channelCount": (), + "QPixelFormat.colorModel": (), + "QPixelFormat.cyanSize": (), + "QPixelFormat.greenSize": (), + "QPixelFormat.hueSize": (), + "QPixelFormat.lightnessSize": (), + "QPixelFormat.magentaSize": (), + "QPixelFormat.premultiplied": (), + "QPixelFormat.redSize": (), + "QPixelFormat.saturationSize": (), + "QPixelFormat.subEnum": (), + "QPixelFormat.typeInterpretation": (), + "QPixelFormat.yellowSize": (), + "QPixelFormat.yuvLayout": (), + + # class PySide2.QtGui.QPixmap: + "QPixmap.__init__": [(), ('List[str]',), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str', 'PySide2.libpyside.ImageConversionFlags')], + "QPixmap.__copy__": (), + "QPixmap.cacheKey": (), + "QPixmap.convertFromImage": ('PySide2.QtGui.QImage', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPixmap.createHeuristicMask": ('bool',), + "QPixmap.createMaskFromColor": ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.MaskMode'), + "QPixmap.defaultDepth": (), + "QPixmap.depth": (), + "QPixmap.devType": (), + "QPixmap.devicePixelRatio": (), + "QPixmap.fill": [('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QPaintDevice', 'int', 'int')], + "QPixmap.fromImage": ('PySide2.QtGui.QImage', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.fromImageInPlace": ('PySide2.QtGui.QImage', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.fromImageReader": ('PySide2.QtGui.QImageReader', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.grabWidget": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QObject', 'int', 'int', 'int', 'int')], + "QPixmap.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QPixmap.hasAlpha": (), + "QPixmap.hasAlphaChannel": (), + "QPixmap.height": (), + "QPixmap.isNull": (), + "QPixmap.isQBitmap": (), + "QPixmap.load": ('str', 'str', 'PySide2.libpyside.ImageConversionFlags'), + "QPixmap.loadFromData": [('PySide2.QtCore.QByteArray', 'str', 'PySide2.libpyside.ImageConversionFlags'), ('Union[str, int]', 'int', 'str', 'PySide2.libpyside.ImageConversionFlags')], + "QPixmap.mask": (), + "QPixmap.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPixmap.paintEngine": (), + "QPixmap.rect": (), + "QPixmap.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QPixmap.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scroll": [('int', 'int', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion'), ('int', 'int', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion')], + "QPixmap.setDevicePixelRatio": ('float',), + "QPixmap.setMask": ('PySide2.QtGui.QBitmap',), + "QPixmap.size": (), + "QPixmap.swap": ('PySide2.QtGui.QPixmap',), + "QPixmap.toImage": (), + "QPixmap.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QPixmap.width": (), + + # class PySide2.QtGui.QPixmapCache: + "QPixmapCache.__init__": (), + "QPixmapCache.cacheLimit": (), + "QPixmapCache.clear": (), + "QPixmapCache.find": [('PySide2.QtGui.QPixmapCache.Key',), ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), ('str',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.insert": [('PySide2.QtGui.QPixmap',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.remove": [('PySide2.QtGui.QPixmapCache.Key',), ('str',)], + "QPixmapCache.replace": ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), + "QPixmapCache.setCacheLimit": ('int',), + + # class PySide2.QtGui.QPointingDeviceUniqueId: + "QPointingDeviceUniqueId.__init__": [(), ('PySide2.QtGui.QPointingDeviceUniqueId',)], + "QPointingDeviceUniqueId.__copy__": (), + "QPointingDeviceUniqueId.fromNumericId": ('int',), + "QPointingDeviceUniqueId.isValid": (), + "QPointingDeviceUniqueId.numericId": (), + + # class PySide2.QtGui.QPolygon: + "QPolygon.__init__": [(), ('PySide2.QtCore.QRect', 'bool'), ('PySide2.QtGui.QPolygon',), ('int',), ('list',)], + "QPolygon.__copy__": (), + "QPolygon.__reduce__": (), + "QPolygon.append": [('PySide2.QtCore.QPoint',), ('list',)], + "QPolygon.at": ('int',), + "QPolygon.back": (), + "QPolygon.boundingRect": (), + "QPolygon.capacity": (), + "QPolygon.clear": (), + "QPolygon.constData": (), + "QPolygon.constFirst": (), + "QPolygon.constLast": (), + "QPolygon.contains": ('PySide2.QtCore.QPoint',), + "QPolygon.containsPoint": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.Qt.FillRule'), + "QPolygon.count": [(), ('PySide2.QtCore.QPoint',)], + "QPolygon.data": (), + "QPolygon.empty": (), + "QPolygon.endsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.fill": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.first": (), + "QPolygon.fromList": ('list',), + "QPolygon.front": (), + "QPolygon.indexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.insert": [('int', 'PySide2.QtCore.QPoint'), ('int', 'int', 'PySide2.QtCore.QPoint')], + "QPolygon.intersected": ('PySide2.QtGui.QPolygon',), + "QPolygon.intersects": ('PySide2.QtGui.QPolygon',), + "QPolygon.isEmpty": (), + "QPolygon.isSharedWith": ('list',), + "QPolygon.last": (), + "QPolygon.lastIndexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.length": (), + "QPolygon.mid": ('int', 'int'), + "QPolygon.move": ('int', 'int'), + "QPolygon.pop_back": (), + "QPolygon.pop_front": (), + "QPolygon.prepend": ('PySide2.QtCore.QPoint',), + "QPolygon.push_back": ('PySide2.QtCore.QPoint',), + "QPolygon.push_front": ('PySide2.QtCore.QPoint',), + "QPolygon.remove": [('int',), ('int', 'int')], + "QPolygon.removeAll": ('PySide2.QtCore.QPoint',), + "QPolygon.removeAt": ('int',), + "QPolygon.removeFirst": (), + "QPolygon.removeLast": (), + "QPolygon.removeOne": ('PySide2.QtCore.QPoint',), + "QPolygon.replace": ('int', 'PySide2.QtCore.QPoint'), + "QPolygon.reserve": ('int',), + "QPolygon.resize": ('int',), + "QPolygon.setSharable": ('bool',), + "QPolygon.shrink_to_fit": (), + "QPolygon.size": (), + "QPolygon.squeeze": (), + "QPolygon.startsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.subtracted": ('PySide2.QtGui.QPolygon',), + "QPolygon.swap": ('PySide2.QtGui.QPolygon',), + "QPolygon.takeAt": ('int',), + "QPolygon.takeFirst": (), + "QPolygon.takeLast": (), + "QPolygon.toList": (), + "QPolygon.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.united": ('PySide2.QtGui.QPolygon',), + "QPolygon.value": [('int',), ('int', 'PySide2.QtCore.QPoint')], + + # class PySide2.QtGui.QPolygonF: + "QPolygonF.__init__": [(), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('int',), ('list',)], + "QPolygonF.__copy__": (), + "QPolygonF.append": [('PySide2.QtCore.QPointF',), ('list',)], + "QPolygonF.at": ('int',), + "QPolygonF.back": (), + "QPolygonF.boundingRect": (), + "QPolygonF.capacity": (), + "QPolygonF.clear": (), + "QPolygonF.constData": (), + "QPolygonF.constFirst": (), + "QPolygonF.constLast": (), + "QPolygonF.contains": ('PySide2.QtCore.QPointF',), + "QPolygonF.containsPoint": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.FillRule'), + "QPolygonF.count": [(), ('PySide2.QtCore.QPointF',)], + "QPolygonF.data": (), + "QPolygonF.empty": (), + "QPolygonF.endsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.fill": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.first": (), + "QPolygonF.fromList": ('list',), + "QPolygonF.front": (), + "QPolygonF.indexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.insert": [('int', 'PySide2.QtCore.QPointF'), ('int', 'int', 'PySide2.QtCore.QPointF')], + "QPolygonF.intersected": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.intersects": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.isClosed": (), + "QPolygonF.isEmpty": (), + "QPolygonF.isSharedWith": ('list',), + "QPolygonF.last": (), + "QPolygonF.lastIndexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.length": (), + "QPolygonF.mid": ('int', 'int'), + "QPolygonF.move": ('int', 'int'), + "QPolygonF.pop_back": (), + "QPolygonF.pop_front": (), + "QPolygonF.prepend": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_back": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_front": ('PySide2.QtCore.QPointF',), + "QPolygonF.remove": [('int',), ('int', 'int')], + "QPolygonF.removeAll": ('PySide2.QtCore.QPointF',), + "QPolygonF.removeAt": ('int',), + "QPolygonF.removeFirst": (), + "QPolygonF.removeLast": (), + "QPolygonF.removeOne": ('PySide2.QtCore.QPointF',), + "QPolygonF.replace": ('int', 'PySide2.QtCore.QPointF'), + "QPolygonF.reserve": ('int',), + "QPolygonF.resize": ('int',), + "QPolygonF.setSharable": ('bool',), + "QPolygonF.shrink_to_fit": (), + "QPolygonF.size": (), + "QPolygonF.squeeze": (), + "QPolygonF.startsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.subtracted": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.swap": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.takeAt": ('int',), + "QPolygonF.takeFirst": (), + "QPolygonF.takeLast": (), + "QPolygonF.toList": (), + "QPolygonF.toPolygon": (), + "QPolygonF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.united": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.value": [('int',), ('int', 'PySide2.QtCore.QPointF')], + + # class PySide2.QtGui.QPyTextObject: + "QPyTextObject.__init__": ('PySide2.QtCore.QObject',), + "QPyTextObject.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QPyTextObject.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QQuaternion: + "QQuaternion.__init__": [(), ('PySide2.QtGui.QVector4D',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QQuaternion.__copy__": (), + "QQuaternion.__reduce__": (), + "QQuaternion.conjugate": (), + "QQuaternion.conjugated": (), + "QQuaternion.dotProduct": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion'), + "QQuaternion.fromAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromAxisAndAngle": [('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QQuaternion.fromDirection": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromEulerAngles": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.fromRotationMatrix": ('PySide2.QtGui.QMatrix3x3',), + "QQuaternion.getAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.inverted": (), + "QQuaternion.isIdentity": (), + "QQuaternion.isNull": (), + "QQuaternion.length": (), + "QQuaternion.lengthSquared": (), + "QQuaternion.nlerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.normalize": (), + "QQuaternion.normalized": (), + "QQuaternion.rotatedVector": ('PySide2.QtGui.QVector3D',), + "QQuaternion.rotationTo": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.scalar": (), + "QQuaternion.setScalar": ('float',), + "QQuaternion.setVector": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.setX": ('float',), + "QQuaternion.setY": ('float',), + "QQuaternion.setZ": ('float',), + "QQuaternion.slerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.toEulerAngles": (), + "QQuaternion.toRotationMatrix": (), + "QQuaternion.toVector4D": (), + "QQuaternion.vector": (), + "QQuaternion.x": (), + "QQuaternion.y": (), + "QQuaternion.z": (), + + # class PySide2.QtGui.QRadialGradient: + "QRadialGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QRadialGradient',), ('float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QRadialGradient.__copy__": (), + "QRadialGradient.center": (), + "QRadialGradient.centerRadius": (), + "QRadialGradient.focalPoint": (), + "QRadialGradient.focalRadius": (), + "QRadialGradient.radius": (), + "QRadialGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setCenterRadius": ('float',), + "QRadialGradient.setFocalPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setFocalRadius": ('float',), + "QRadialGradient.setRadius": ('float',), + + # class PySide2.QtGui.QRasterWindow: + "QRasterWindow.__init__": ('PySide2.QtGui.QWindow',), + "QRasterWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QRasterWindow.redirected": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtGui.QRawFont: + "QRawFont.__init__": [(), ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), ('PySide2.QtGui.QRawFont',), ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference')], + "QRawFont.__copy__": (), + "QRawFont.advancesForGlyphIndexes": [('list',), ('list', 'PySide2.libpyside.LayoutFlags')], + "QRawFont.alphaMapForGlyph": ('int', 'PySide2.QtGui.QRawFont.AntialiasingType', 'PySide2.QtGui.QTransform'), + "QRawFont.ascent": (), + "QRawFont.averageCharWidth": (), + "QRawFont.boundingRect": ('int',), + "QRawFont.capHeight": (), + "QRawFont.descent": (), + "QRawFont.familyName": (), + "QRawFont.fontTable": ('str',), + "QRawFont.fromFont": ('PySide2.QtGui.QFont', 'PySide2.QtGui.QFontDatabase.WritingSystem'), + "QRawFont.glyphIndexesForString": ('str',), + "QRawFont.hintingPreference": (), + "QRawFont.isValid": (), + "QRawFont.leading": (), + "QRawFont.lineThickness": (), + "QRawFont.loadFromData": ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.loadFromFile": ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.maxCharWidth": (), + "QRawFont.pathForGlyph": ('int',), + "QRawFont.pixelSize": (), + "QRawFont.setPixelSize": ('float',), + "QRawFont.style": (), + "QRawFont.styleName": (), + "QRawFont.supportedWritingSystems": (), + "QRawFont.supportsCharacter": [('Union[str, int]',), ('int',)], + "QRawFont.swap": ('PySide2.QtGui.QRawFont',), + "QRawFont.underlinePosition": (), + "QRawFont.unitsPerEm": (), + "QRawFont.weight": (), + "QRawFont.xHeight": (), + + # class PySide2.QtGui.QRegExpValidator: + "QRegExpValidator.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRegExp', 'PySide2.QtCore.QObject')], + "QRegExpValidator.regExp": (), + "QRegExpValidator.setRegExp": ('PySide2.QtCore.QRegExp',), + "QRegExpValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QRegion: + "QRegion.__init__": [(), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion.RegionType'), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion.RegionType')], + "QRegion.__copy__": (), + "QRegion.begin": (), + "QRegion.boundingRect": (), + "QRegion.cbegin": (), + "QRegion.cend": (), + "QRegion.contains": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',)], + "QRegion.end": (), + "QRegion.intersected": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.intersects": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.isEmpty": (), + "QRegion.isNull": (), + "QRegion.rectCount": (), + "QRegion.rects": (), + "QRegion.setRects": ('PySide2.QtCore.QRect', 'int'), + "QRegion.subtracted": ('PySide2.QtGui.QRegion',), + "QRegion.swap": ('PySide2.QtGui.QRegion',), + "QRegion.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.united": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.xored": ('PySide2.QtGui.QRegion',), + + # class PySide2.QtGui.QResizeEvent: + "QResizeEvent.__init__": ('PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QResizeEvent.oldSize": (), + "QResizeEvent.size": (), + + # class PySide2.QtGui.QScreen: + "QScreen.angleBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation'), + "QScreen.availableGeometry": (), + "QScreen.availableSize": (), + "QScreen.availableVirtualGeometry": (), + "QScreen.availableVirtualSize": (), + "QScreen.depth": (), + "QScreen.devicePixelRatio": (), + "QScreen.geometry": (), + "QScreen.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QScreen.isLandscape": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.isPortrait": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.logicalDotsPerInch": (), + "QScreen.logicalDotsPerInchX": (), + "QScreen.logicalDotsPerInchY": (), + "QScreen.manufacturer": (), + "QScreen.mapBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.model": (), + "QScreen.name": (), + "QScreen.nativeOrientation": (), + "QScreen.orientation": (), + "QScreen.orientationUpdateMask": (), + "QScreen.physicalDotsPerInch": (), + "QScreen.physicalDotsPerInchX": (), + "QScreen.physicalDotsPerInchY": (), + "QScreen.physicalSize": (), + "QScreen.primaryOrientation": (), + "QScreen.refreshRate": (), + "QScreen.serialNumber": (), + "QScreen.setOrientationUpdateMask": ('PySide2.libpyside.ScreenOrientations',), + "QScreen.size": (), + "QScreen.transformBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.virtualGeometry": (), + "QScreen.virtualSiblings": (), + "QScreen.virtualSize": (), + + # class PySide2.QtGui.QScrollEvent: + "QScrollEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtGui.QScrollEvent.ScrollState'), + "QScrollEvent.contentPos": (), + "QScrollEvent.overshootDistance": (), + "QScrollEvent.scrollState": (), + + # class PySide2.QtGui.QScrollPrepareEvent: + "QScrollPrepareEvent.__init__": ('PySide2.QtCore.QPointF',), + "QScrollPrepareEvent.contentPos": (), + "QScrollPrepareEvent.contentPosRange": (), + "QScrollPrepareEvent.setContentPos": ('PySide2.QtCore.QPointF',), + "QScrollPrepareEvent.setContentPosRange": ('PySide2.QtCore.QRectF',), + "QScrollPrepareEvent.setViewportSize": ('PySide2.QtCore.QSizeF',), + "QScrollPrepareEvent.startPos": (), + "QScrollPrepareEvent.viewportSize": (), + + # class PySide2.QtGui.QSessionManager: + "QSessionManager.allowsErrorInteraction": (), + "QSessionManager.allowsInteraction": (), + "QSessionManager.cancel": (), + "QSessionManager.discardCommand": (), + "QSessionManager.isPhase2": (), + "QSessionManager.release": (), + "QSessionManager.requestPhase2": (), + "QSessionManager.restartCommand": (), + "QSessionManager.restartHint": (), + "QSessionManager.sessionId": (), + "QSessionManager.sessionKey": (), + "QSessionManager.setDiscardCommand": ('List[str]',), + "QSessionManager.setManagerProperty": [('str', 'List[str]'), ('str', 'str')], + "QSessionManager.setRestartCommand": ('List[str]',), + "QSessionManager.setRestartHint": ('PySide2.QtGui.QSessionManager.RestartHint',), + + # class PySide2.QtGui.QShortcutEvent: + "QShortcutEvent.__init__": ('PySide2.QtGui.QKeySequence', 'int', 'bool'), + "QShortcutEvent.isAmbiguous": (), + "QShortcutEvent.key": (), + "QShortcutEvent.shortcutId": (), + + # class PySide2.QtGui.QShowEvent: + "QShowEvent.__init__": (), + + # class PySide2.QtGui.QStandardItem: + "QStandardItem.__init__": [(), ('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QStandardItem',), ('int', 'int'), ('str',)], + "QStandardItem.accessibleDescription": (), + "QStandardItem.accessibleText": (), + "QStandardItem.appendColumn": ('list',), + "QStandardItem.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItem.appendRows": ('list',), + "QStandardItem.background": (), + "QStandardItem.checkState": (), + "QStandardItem.child": ('int', 'int'), + "QStandardItem.clone": (), + "QStandardItem.column": (), + "QStandardItem.columnCount": (), + "QStandardItem.data": ('int',), + "QStandardItem.emitDataChanged": (), + "QStandardItem.flags": (), + "QStandardItem.font": (), + "QStandardItem.foreground": (), + "QStandardItem.hasChildren": (), + "QStandardItem.icon": (), + "QStandardItem.index": (), + "QStandardItem.insertColumn": ('int', 'list'), + "QStandardItem.insertColumns": ('int', 'int'), + "QStandardItem.insertRow": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItem.insertRows": [('int', 'int'), ('int', 'list')], + "QStandardItem.isAutoTristate": (), + "QStandardItem.isCheckable": (), + "QStandardItem.isDragEnabled": (), + "QStandardItem.isDropEnabled": (), + "QStandardItem.isEditable": (), + "QStandardItem.isEnabled": (), + "QStandardItem.isSelectable": (), + "QStandardItem.isTristate": (), + "QStandardItem.isUserTristate": (), + "QStandardItem.model": (), + "QStandardItem.parent": (), + "QStandardItem.read": ('PySide2.QtCore.QDataStream',), + "QStandardItem.removeColumn": ('int',), + "QStandardItem.removeColumns": ('int', 'int'), + "QStandardItem.removeRow": ('int',), + "QStandardItem.removeRows": ('int', 'int'), + "QStandardItem.row": (), + "QStandardItem.rowCount": (), + "QStandardItem.setAccessibleDescription": ('str',), + "QStandardItem.setAccessibleText": ('str',), + "QStandardItem.setAutoTristate": ('bool',), + "QStandardItem.setBackground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QStandardItem.setCheckable": ('bool',), + "QStandardItem.setChild": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItem.setColumnCount": ('int',), + "QStandardItem.setData": ('Any', 'int'), + "QStandardItem.setDragEnabled": ('bool',), + "QStandardItem.setDropEnabled": ('bool',), + "QStandardItem.setEditable": ('bool',), + "QStandardItem.setEnabled": ('bool',), + "QStandardItem.setFlags": ('PySide2.libpyside.ItemFlags',), + "QStandardItem.setFont": ('PySide2.QtGui.QFont',), + "QStandardItem.setForeground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setIcon": ('PySide2.QtGui.QIcon',), + "QStandardItem.setRowCount": ('int',), + "QStandardItem.setSelectable": ('bool',), + "QStandardItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QStandardItem.setStatusTip": ('str',), + "QStandardItem.setText": ('str',), + "QStandardItem.setTextAlignment": ('PySide2.libpyside.Alignment',), + "QStandardItem.setToolTip": ('str',), + "QStandardItem.setTristate": ('bool',), + "QStandardItem.setUserTristate": ('bool',), + "QStandardItem.setWhatsThis": ('str',), + "QStandardItem.sizeHint": (), + "QStandardItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItem.statusTip": (), + "QStandardItem.takeChild": ('int', 'int'), + "QStandardItem.takeColumn": ('int',), + "QStandardItem.takeRow": ('int',), + "QStandardItem.text": (), + "QStandardItem.textAlignment": (), + "QStandardItem.toolTip": (), + "QStandardItem.type": (), + "QStandardItem.whatsThis": (), + "QStandardItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QStandardItemModel: + "QStandardItemModel.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QStandardItemModel.appendColumn": ('list',), + "QStandardItemModel.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItemModel.clear": (), + "QStandardItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStandardItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.findItems": ('str', 'PySide2.libpyside.MatchFlags', 'int'), + "QStandardItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QStandardItemModel.horizontalHeaderItem": ('int',), + "QStandardItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.indexFromItem": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.insertColumn": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'list')], + "QStandardItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.insertRow": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.invisibleRootItem": (), + "QStandardItemModel.item": ('int', 'int'), + "QStandardItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemPrototype": (), + "QStandardItemModel.mimeData": ('List[int]',), + "QStandardItemModel.mimeTypes": (), + "QStandardItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QStandardItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.setColumnCount": ('int',), + "QStandardItemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QStandardItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QStandardItemModel.setHorizontalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setHorizontalHeaderLabels": ('List[str]',), + "QStandardItemModel.setItem": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QStandardItemModel.setItemPrototype": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.setItemRoleNames": ('dict',), + "QStandardItemModel.setRowCount": ('int',), + "QStandardItemModel.setSortRole": ('int',), + "QStandardItemModel.setVerticalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setVerticalHeaderLabels": ('List[str]',), + "QStandardItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItemModel.sortRole": (), + "QStandardItemModel.supportedDropActions": (), + "QStandardItemModel.takeColumn": ('int',), + "QStandardItemModel.takeHorizontalHeaderItem": ('int',), + "QStandardItemModel.takeItem": ('int', 'int'), + "QStandardItemModel.takeRow": ('int',), + "QStandardItemModel.takeVerticalHeaderItem": ('int',), + "QStandardItemModel.verticalHeaderItem": ('int',), + + # class PySide2.QtGui.QStaticText: + "QStaticText.__init__": [(), ('PySide2.QtGui.QStaticText',), ('str',)], + "QStaticText.__copy__": (), + "QStaticText.performanceHint": (), + "QStaticText.prepare": ('PySide2.QtGui.QTransform', 'PySide2.QtGui.QFont'), + "QStaticText.setPerformanceHint": ('PySide2.QtGui.QStaticText.PerformanceHint',), + "QStaticText.setText": ('str',), + "QStaticText.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QStaticText.setTextOption": ('PySide2.QtGui.QTextOption',), + "QStaticText.setTextWidth": ('float',), + "QStaticText.size": (), + "QStaticText.swap": ('PySide2.QtGui.QStaticText',), + "QStaticText.text": (), + "QStaticText.textFormat": (), + "QStaticText.textOption": (), + "QStaticText.textWidth": (), + + # class PySide2.QtGui.QStatusTipEvent: + "QStatusTipEvent.__init__": ('str',), + "QStatusTipEvent.tip": (), + + # class PySide2.QtGui.QStyleHints: + "QStyleHints.cursorFlashTime": (), + "QStyleHints.fontSmoothingGamma": (), + "QStyleHints.keyboardAutoRepeatRate": (), + "QStyleHints.keyboardInputInterval": (), + "QStyleHints.mouseDoubleClickInterval": (), + "QStyleHints.mousePressAndHoldInterval": (), + "QStyleHints.mouseQuickSelectionThreshold": (), + "QStyleHints.passwordMaskCharacter": (), + "QStyleHints.passwordMaskDelay": (), + "QStyleHints.setCursorFlashTime": ('int',), + "QStyleHints.setFocusOnTouchRelease": (), + "QStyleHints.setKeyboardInputInterval": ('int',), + "QStyleHints.setMouseDoubleClickInterval": ('int',), + "QStyleHints.setMousePressAndHoldInterval": ('int',), + "QStyleHints.setMouseQuickSelectionThreshold": ('int',), + "QStyleHints.setStartDragDistance": ('int',), + "QStyleHints.setStartDragTime": ('int',), + "QStyleHints.setTabFocusBehavior": ('PySide2.QtCore.Qt.TabFocusBehavior',), + "QStyleHints.setUseHoverEffects": ('bool',), + "QStyleHints.setWheelScrollLines": ('int',), + "QStyleHints.showIsFullScreen": (), + "QStyleHints.showIsMaximized": (), + "QStyleHints.showShortcutsInContextMenus": (), + "QStyleHints.singleClickActivation": (), + "QStyleHints.startDragDistance": (), + "QStyleHints.startDragTime": (), + "QStyleHints.startDragVelocity": (), + "QStyleHints.tabFocusBehavior": (), + "QStyleHints.useHoverEffects": (), + "QStyleHints.useRtlExtensions": (), + "QStyleHints.wheelScrollLines": (), + + # class PySide2.QtGui.QSurface: + "QSurface.__init__": ('PySide2.QtGui.QSurface.SurfaceClass',), + "QSurface.format": (), + "QSurface.size": (), + "QSurface.supportsOpenGL": (), + "QSurface.surfaceClass": (), + "QSurface.surfaceHandle": (), + "QSurface.surfaceType": (), + + # class PySide2.QtGui.QSurfaceFormat: + "QSurfaceFormat.__init__": [(), ('PySide2.QtGui.QSurfaceFormat',), ('PySide2.libpyside.FormatOptions',)], + "QSurfaceFormat.__copy__": (), + "QSurfaceFormat.alphaBufferSize": (), + "QSurfaceFormat.blueBufferSize": (), + "QSurfaceFormat.colorSpace": (), + "QSurfaceFormat.defaultFormat": (), + "QSurfaceFormat.depthBufferSize": (), + "QSurfaceFormat.greenBufferSize": (), + "QSurfaceFormat.hasAlpha": (), + "QSurfaceFormat.majorVersion": (), + "QSurfaceFormat.minorVersion": (), + "QSurfaceFormat.options": (), + "QSurfaceFormat.profile": (), + "QSurfaceFormat.redBufferSize": (), + "QSurfaceFormat.renderableType": (), + "QSurfaceFormat.samples": (), + "QSurfaceFormat.setAlphaBufferSize": ('int',), + "QSurfaceFormat.setBlueBufferSize": ('int',), + "QSurfaceFormat.setColorSpace": ('PySide2.QtGui.QSurfaceFormat.ColorSpace',), + "QSurfaceFormat.setDefaultFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QSurfaceFormat.setDepthBufferSize": ('int',), + "QSurfaceFormat.setGreenBufferSize": ('int',), + "QSurfaceFormat.setMajorVersion": ('int',), + "QSurfaceFormat.setMinorVersion": ('int',), + "QSurfaceFormat.setOption": [('PySide2.QtGui.QSurfaceFormat.FormatOption', 'bool'), ('PySide2.libpyside.FormatOptions',)], + "QSurfaceFormat.setOptions": ('PySide2.libpyside.FormatOptions',), + "QSurfaceFormat.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QSurfaceFormat.setRedBufferSize": ('int',), + "QSurfaceFormat.setRenderableType": ('PySide2.QtGui.QSurfaceFormat.RenderableType',), + "QSurfaceFormat.setSamples": ('int',), + "QSurfaceFormat.setStencilBufferSize": ('int',), + "QSurfaceFormat.setStereo": ('bool',), + "QSurfaceFormat.setSwapBehavior": ('PySide2.QtGui.QSurfaceFormat.SwapBehavior',), + "QSurfaceFormat.setSwapInterval": ('int',), + "QSurfaceFormat.setVersion": ('int', 'int'), + "QSurfaceFormat.stencilBufferSize": (), + "QSurfaceFormat.stereo": (), + "QSurfaceFormat.swapBehavior": (), + "QSurfaceFormat.swapInterval": (), + "QSurfaceFormat.testOption": [('PySide2.QtGui.QSurfaceFormat.FormatOption',), ('PySide2.libpyside.FormatOptions',)], + "QSurfaceFormat.version": (), + + # class PySide2.QtGui.QSyntaxHighlighter: + "QSyntaxHighlighter.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QTextDocument',)], + "QSyntaxHighlighter.currentBlock": (), + "QSyntaxHighlighter.currentBlockState": (), + "QSyntaxHighlighter.currentBlockUserData": (), + "QSyntaxHighlighter.document": (), + "QSyntaxHighlighter.format": ('int',), + "QSyntaxHighlighter.highlightBlock": ('str',), + "QSyntaxHighlighter.previousBlockState": (), + "QSyntaxHighlighter.rehighlight": (), + "QSyntaxHighlighter.rehighlightBlock": ('PySide2.QtGui.QTextBlock',), + "QSyntaxHighlighter.setCurrentBlockState": ('int',), + "QSyntaxHighlighter.setCurrentBlockUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QSyntaxHighlighter.setDocument": ('PySide2.QtGui.QTextDocument',), + "QSyntaxHighlighter.setFormat": [('int', 'int', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QFont'), ('int', 'int', 'PySide2.QtGui.QTextCharFormat')], + + # class PySide2.QtGui.QTabletEvent: + "QTabletEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'PySide2.libpyside.KeyboardModifiers', 'int', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons')], + "QTabletEvent.button": (), + "QTabletEvent.buttons": (), + "QTabletEvent.device": (), + "QTabletEvent.globalPos": (), + "QTabletEvent.globalPosF": (), + "QTabletEvent.globalX": (), + "QTabletEvent.global""Y": (), + "QTabletEvent.hiResGlobalX": (), + "QTabletEvent.hiResGlobal""Y": (), + "QTabletEvent.pointerType": (), + "QTabletEvent.pos": (), + "QTabletEvent.posF": (), + "QTabletEvent.pressure": (), + "QTabletEvent.rotation": (), + "QTabletEvent.tangentialPressure": (), + "QTabletEvent.uniqueId": (), + "QTabletEvent.x": (), + "QTabletEvent.xTilt": (), + "QTabletEvent.y": (), + "QTabletEvent.yTilt": (), + "QTabletEvent.z": (), + + # class PySide2.QtGui.QTextBlock: + "QTextBlock.__init__": [(), ('PySide2.QtGui.QTextBlock',)], + "QTextBlock.__copy__": (), + "QTextBlock.begin": (), + "QTextBlock.blockFormat": (), + "QTextBlock.blockFormatIndex": (), + "QTextBlock.blockNumber": (), + "QTextBlock.charFormat": (), + "QTextBlock.charFormatIndex": (), + "QTextBlock.clearLayout": (), + "QTextBlock.contains": ('int',), + "QTextBlock.document": (), + "QTextBlock.end": (), + "QTextBlock.firstLineNumber": (), + "QTextBlock.fragmentIndex": (), + "QTextBlock.isValid": (), + "QTextBlock.isVisible": (), + "QTextBlock.layout": (), + "QTextBlock.length": (), + "QTextBlock.lineCount": (), + "QTextBlock.position": (), + "QTextBlock.previous": (), + "QTextBlock.revision": (), + "QTextBlock.setLineCount": ('int',), + "QTextBlock.setRevision": ('int',), + "QTextBlock.setUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QTextBlock.setUserState": ('int',), + "QTextBlock.setVisible": ('bool',), + "QTextBlock.text": (), + "QTextBlock.textDirection": (), + "QTextBlock.textFormats": (), + "QTextBlock.textList": (), + "QTextBlock.userData": (), + "QTextBlock.userState": (), + + # class PySide2.QtGui.QTextBlockFormat: + "QTextBlockFormat.__init__": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextBlockFormat.__copy__": (), + "QTextBlockFormat.alignment": (), + "QTextBlockFormat.bottomMargin": (), + "QTextBlockFormat.indent": (), + "QTextBlockFormat.isValid": (), + "QTextBlockFormat.leftMargin": (), + "QTextBlockFormat.lineHeight": [(), ('float', 'float')], + "QTextBlockFormat.lineHeightType": (), + "QTextBlockFormat.nonBreakableLines": (), + "QTextBlockFormat.pageBreakPolicy": (), + "QTextBlockFormat.rightMargin": (), + "QTextBlockFormat.setAlignment": ('PySide2.libpyside.Alignment',), + "QTextBlockFormat.setBottomMargin": ('float',), + "QTextBlockFormat.setIndent": ('int',), + "QTextBlockFormat.setLeftMargin": ('float',), + "QTextBlockFormat.setLineHeight": ('float', 'int'), + "QTextBlockFormat.setNonBreakableLines": ('bool',), + "QTextBlockFormat.setPageBreakPolicy": ('PySide2.libpyside.PageBreakFlags',), + "QTextBlockFormat.setRightMargin": ('float',), + "QTextBlockFormat.setTabPositions": ('list',), + "QTextBlockFormat.setTextIndent": ('float',), + "QTextBlockFormat.setTopMargin": ('float',), + "QTextBlockFormat.tabPositions": (), + "QTextBlockFormat.textIndent": (), + "QTextBlockFormat.topMargin": (), + + # class PySide2.QtGui.QTextBlockGroup: + "QTextBlockGroup.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextBlockGroup.blockFormatChanged": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockInserted": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockList": (), + "QTextBlockGroup.blockRemoved": ('PySide2.QtGui.QTextBlock',), + + # class PySide2.QtGui.QTextBlockUserData: + "QTextBlockUserData.__init__": (), + + # class PySide2.QtGui.QTextCharFormat: + "QTextCharFormat.__init__": [(), ('PySide2.QtGui.QTextCharFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextCharFormat.__copy__": (), + "QTextCharFormat.anchorHref": (), + "QTextCharFormat.anchorName": (), + "QTextCharFormat.anchorNames": (), + "QTextCharFormat.font": (), + "QTextCharFormat.fontCapitalization": (), + "QTextCharFormat.fontFamily": (), + "QTextCharFormat.fontFixedPitch": (), + "QTextCharFormat.fontHintingPreference": (), + "QTextCharFormat.fontItalic": (), + "QTextCharFormat.fontKerning": (), + "QTextCharFormat.fontLetterSpacing": (), + "QTextCharFormat.fontLetterSpacingType": (), + "QTextCharFormat.fontOverline": (), + "QTextCharFormat.fontPointSize": (), + "QTextCharFormat.fontStretch": (), + "QTextCharFormat.fontStrikeOut": (), + "QTextCharFormat.fontStyleHint": (), + "QTextCharFormat.fontStyleStrategy": (), + "QTextCharFormat.fontUnderline": (), + "QTextCharFormat.fontWeight": (), + "QTextCharFormat.fontWordSpacing": (), + "QTextCharFormat.isAnchor": (), + "QTextCharFormat.isValid": (), + "QTextCharFormat.setAnchor": ('bool',), + "QTextCharFormat.setAnchorHref": ('str',), + "QTextCharFormat.setAnchorName": ('str',), + "QTextCharFormat.setAnchorNames": ('List[str]',), + "QTextCharFormat.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior')], + "QTextCharFormat.setFontCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QTextCharFormat.setFontFamily": ('str',), + "QTextCharFormat.setFontFixedPitch": ('bool',), + "QTextCharFormat.setFontHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QTextCharFormat.setFontItalic": ('bool',), + "QTextCharFormat.setFontKerning": ('bool',), + "QTextCharFormat.setFontLetterSpacing": ('float',), + "QTextCharFormat.setFontLetterSpacingType": ('PySide2.QtGui.QFont.SpacingType',), + "QTextCharFormat.setFontOverline": ('bool',), + "QTextCharFormat.setFontPointSize": ('float',), + "QTextCharFormat.setFontStretch": ('int',), + "QTextCharFormat.setFontStrikeOut": ('bool',), + "QTextCharFormat.setFontStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QTextCharFormat.setFontStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QTextCharFormat.setFontUnderline": ('bool',), + "QTextCharFormat.setFontWeight": ('int',), + "QTextCharFormat.setFontWordSpacing": ('float',), + "QTextCharFormat.setTableCellColumnSpan": ('int',), + "QTextCharFormat.setTableCellRowSpan": ('int',), + "QTextCharFormat.setTextOutline": ('PySide2.QtGui.QPen',), + "QTextCharFormat.setToolTip": ('str',), + "QTextCharFormat.setUnderlineColor": ('PySide2.QtGui.QColor',), + "QTextCharFormat.setUnderlineStyle": ('PySide2.QtGui.QTextCharFormat.UnderlineStyle',), + "QTextCharFormat.setVerticalAlignment": ('PySide2.QtGui.QTextCharFormat.VerticalAlignment',), + "QTextCharFormat.tableCellColumnSpan": (), + "QTextCharFormat.tableCellRowSpan": (), + "QTextCharFormat.textOutline": (), + "QTextCharFormat.toolTip": (), + "QTextCharFormat.underlineColor": (), + "QTextCharFormat.underlineStyle": (), + "QTextCharFormat.verticalAlignment": (), + + # class PySide2.QtGui.QTextCursor: + "QTextCursor.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextFrame',)], + "QTextCursor.__copy__": (), + "QTextCursor.anchor": (), + "QTextCursor.atBlockEnd": (), + "QTextCursor.atBlockStart": (), + "QTextCursor.atEnd": (), + "QTextCursor.atStart": (), + "QTextCursor.beginEditBlock": (), + "QTextCursor.block": (), + "QTextCursor.blockCharFormat": (), + "QTextCursor.blockFormat": (), + "QTextCursor.blockNumber": (), + "QTextCursor.charFormat": (), + "QTextCursor.clearSelection": (), + "QTextCursor.columnNumber": (), + "QTextCursor.createList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.currentFrame": (), + "QTextCursor.currentList": (), + "QTextCursor.currentTable": (), + "QTextCursor.deleteChar": (), + "QTextCursor.deletePreviousChar": (), + "QTextCursor.document": (), + "QTextCursor.endEditBlock": (), + "QTextCursor.hasComplexSelection": (), + "QTextCursor.hasSelection": (), + "QTextCursor.insertBlock": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextBlockFormat', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.insertFragment": ('PySide2.QtGui.QTextDocumentFragment',), + "QTextCursor.insertFrame": ('PySide2.QtGui.QTextFrameFormat',), + "QTextCursor.insertHtml": ('str',), + "QTextCursor.insertImage": [('PySide2.QtGui.QImage', 'str'), ('PySide2.QtGui.QTextImageFormat',), ('PySide2.QtGui.QTextImageFormat', 'PySide2.QtGui.QTextFrameFormat.Position'), ('str',)], + "QTextCursor.insertList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.insertTable": [('int', 'int'), ('int', 'int', 'PySide2.QtGui.QTextTableFormat')], + "QTextCursor.insertText": [('str',), ('str', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.isCopyOf": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.isNull": (), + "QTextCursor.joinPreviousEditBlock": (), + "QTextCursor.keepPositionOnInsert": (), + "QTextCursor.mergeBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.mergeBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.mergeCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.movePosition": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode', 'int'), + "QTextCursor.position": (), + "QTextCursor.positionInBlock": (), + "QTextCursor.removeSelectedText": (), + "QTextCursor.select": ('PySide2.QtGui.QTextCursor.SelectionType',), + "QTextCursor.selectedTableCells": ('int', 'int', 'int', 'int'), + "QTextCursor.selectedText": (), + "QTextCursor.selection": (), + "QTextCursor.selectionEnd": (), + "QTextCursor.selectionStart": (), + "QTextCursor.setBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.setCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setKeepPositionOnInsert": ('bool',), + "QTextCursor.setPosition": ('int', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextCursor.setVerticalMovementX": ('int',), + "QTextCursor.setVisualNavigation": ('bool',), + "QTextCursor.swap": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.verticalMovementX": (), + "QTextCursor.visualNavigation": (), + + # class PySide2.QtGui.QTextDocument: + "QTextDocument.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextDocument.addResource": ('int', 'PySide2.QtCore.QUrl', 'Any'), + "QTextDocument.adjustSize": (), + "QTextDocument.allFormats": (), + "QTextDocument.availableRedoSteps": (), + "QTextDocument.availableUndoSteps": (), + "QTextDocument.baseUrl": (), + "QTextDocument.begin": (), + "QTextDocument.blockCount": (), + "QTextDocument.characterAt": ('int',), + "QTextDocument.characterCount": (), + "QTextDocument.clear": (), + "QTextDocument.clearUndoRedoStacks": ('PySide2.QtGui.QTextDocument.Stacks',), + "QTextDocument.clone": ('PySide2.QtCore.QObject',), + "QTextDocument.createObject": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.defaultCursorMoveStyle": (), + "QTextDocument.defaultFont": (), + "QTextDocument.defaultStyleSheet": (), + "QTextDocument.defaultTextOption": (), + "QTextDocument.documentLayout": (), + "QTextDocument.documentMargin": (), + "QTextDocument.drawContents": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QTextDocument.end": (), + "QTextDocument.find": [('PySide2.QtCore.QRegExp', 'PySide2.QtGui.QTextCursor', 'PySide2.libpyside.FindFlags'), ('PySide2.QtCore.QRegExp', 'int', 'PySide2.libpyside.FindFlags'), ('PySide2.QtCore.QRegularExpression', 'PySide2.QtGui.QTextCursor', 'PySide2.libpyside.FindFlags'), ('PySide2.QtCore.QRegularExpression', 'int', 'PySide2.libpyside.FindFlags'), ('str', 'PySide2.QtGui.QTextCursor', 'PySide2.libpyside.FindFlags'), ('str', 'int', 'PySide2.libpyside.FindFlags')], + "QTextDocument.findBlock": ('int',), + "QTextDocument.findBlockByLineNumber": ('int',), + "QTextDocument.findBlockByNumber": ('int',), + "QTextDocument.firstBlock": (), + "QTextDocument.frameAt": ('int',), + "QTextDocument.idealWidth": (), + "QTextDocument.indentWidth": (), + "QTextDocument.isEmpty": (), + "QTextDocument.isModified": (), + "QTextDocument.isRedoAvailable": (), + "QTextDocument.isUndoAvailable": (), + "QTextDocument.isUndoRedoEnabled": (), + "QTextDocument.lastBlock": (), + "QTextDocument.lineCount": (), + "QTextDocument.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.markContentsDirty": ('int', 'int'), + "QTextDocument.maximumBlockCount": (), + "QTextDocument.metaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation',), + "QTextDocument.object": ('int',), + "QTextDocument.objectForFormat": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.pageCount": (), + "QTextDocument.pageSize": (), + "QTextDocument.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextDocument.redo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.resource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.revision": (), + "QTextDocument.rootFrame": (), + "QTextDocument.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QTextDocument.setDefaultCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextDocument.setDefaultFont": ('PySide2.QtGui.QFont',), + "QTextDocument.setDefaultStyleSheet": ('str',), + "QTextDocument.setDefaultTextOption": ('PySide2.QtGui.QTextOption',), + "QTextDocument.setDocumentLayout": ('PySide2.QtGui.QAbstractTextDocumentLayout',), + "QTextDocument.setDocumentMargin": ('float',), + "QTextDocument.setHtml": ('str',), + "QTextDocument.setIndentWidth": ('float',), + "QTextDocument.setMaximumBlockCount": ('int',), + "QTextDocument.setMetaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation', 'str'), + "QTextDocument.setModified": ('bool',), + "QTextDocument.setPageSize": ('PySide2.QtCore.QSizeF',), + "QTextDocument.setPlainText": ('str',), + "QTextDocument.setTextWidth": ('float',), + "QTextDocument.setUndoRedoEnabled": ('bool',), + "QTextDocument.setUseDesignMetrics": ('bool',), + "QTextDocument.size": (), + "QTextDocument.textWidth": (), + "QTextDocument.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocument.toPlainText": (), + "QTextDocument.toRawText": (), + "QTextDocument.undo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.useDesignMetrics": (), + + # class PySide2.QtGui.QTextDocumentFragment: + "QTextDocumentFragment.__init__": [(), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + "QTextDocumentFragment.__copy__": (), + "QTextDocumentFragment.fromHtml": [('str',), ('str', 'PySide2.QtGui.QTextDocument')], + "QTextDocumentFragment.fromPlainText": ('str',), + "QTextDocumentFragment.isEmpty": (), + "QTextDocumentFragment.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocumentFragment.toPlainText": (), + + # class PySide2.QtGui.QTextDocumentWriter: + "QTextDocumentWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QTextDocumentWriter.codec": (), + "QTextDocumentWriter.device": (), + "QTextDocumentWriter.fileName": (), + "QTextDocumentWriter.format": (), + "QTextDocumentWriter.setCodec": ('PySide2.QtCore.QTextCodec',), + "QTextDocumentWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextDocumentWriter.setFileName": ('str',), + "QTextDocumentWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QTextDocumentWriter.supportedDocumentFormats": (), + "QTextDocumentWriter.write": [('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + + # class PySide2.QtGui.QTextFormat: + "QTextFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('int',)], + "QTextFormat.__copy__": (), + "QTextFormat.background": (), + "QTextFormat.boolProperty": ('int',), + "QTextFormat.brushProperty": ('int',), + "QTextFormat.clearBackground": (), + "QTextFormat.clearForeground": (), + "QTextFormat.clearProperty": ('int',), + "QTextFormat.colorProperty": ('int',), + "QTextFormat.doubleProperty": ('int',), + "QTextFormat.foreground": (), + "QTextFormat.hasProperty": ('int',), + "QTextFormat.intProperty": ('int',), + "QTextFormat.isBlockFormat": (), + "QTextFormat.isCharFormat": (), + "QTextFormat.isEmpty": (), + "QTextFormat.isFrameFormat": (), + "QTextFormat.isImageFormat": (), + "QTextFormat.isListFormat": (), + "QTextFormat.isTableCellFormat": (), + "QTextFormat.isTableFormat": (), + "QTextFormat.isValid": (), + "QTextFormat.layoutDirection": (), + "QTextFormat.lengthProperty": ('int',), + "QTextFormat.lengthVectorProperty": ('int',), + "QTextFormat.merge": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.objectIndex": (), + "QTextFormat.objectType": (), + "QTextFormat.penProperty": ('int',), + "QTextFormat.properties": (), + "QTextFormat.property": ('int',), + "QTextFormat.propertyCount": (), + "QTextFormat.setBackground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setForeground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextFormat.setObjectIndex": ('int',), + "QTextFormat.setObjectType": ('int',), + "QTextFormat.setProperty": [('int', 'Any'), ('int', 'list')], + "QTextFormat.stringProperty": ('int',), + "QTextFormat.swap": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.toBlockFormat": (), + "QTextFormat.toCharFormat": (), + "QTextFormat.toFrameFormat": (), + "QTextFormat.toImageFormat": (), + "QTextFormat.toListFormat": (), + "QTextFormat.toTableCellFormat": (), + "QTextFormat.toTableFormat": (), + "QTextFormat.type": (), + + # class PySide2.QtGui.QTextFragment: + "QTextFragment.__init__": [(), ('PySide2.QtGui.QTextFragment',)], + "QTextFragment.__copy__": (), + "QTextFragment.charFormat": (), + "QTextFragment.charFormatIndex": (), + "QTextFragment.contains": ('int',), + "QTextFragment.isValid": (), + "QTextFragment.length": (), + "QTextFragment.position": (), + "QTextFragment.text": (), + + # class PySide2.QtGui.QTextFrame: + "QTextFrame.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextFrame.begin": (), + "QTextFrame.childFrames": (), + "QTextFrame.end": (), + "QTextFrame.firstCursorPosition": (), + "QTextFrame.firstPosition": (), + "QTextFrame.frameFormat": (), + "QTextFrame.lastCursorPosition": (), + "QTextFrame.lastPosition": (), + "QTextFrame.parentFrame": (), + "QTextFrame.setFrameFormat": ('PySide2.QtGui.QTextFrameFormat',), + + # class PySide2.QtGui.QTextFrameFormat: + "QTextFrameFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextFrameFormat',)], + "QTextFrameFormat.__copy__": (), + "QTextFrameFormat.border": (), + "QTextFrameFormat.borderBrush": (), + "QTextFrameFormat.borderStyle": (), + "QTextFrameFormat.bottomMargin": (), + "QTextFrameFormat.height": (), + "QTextFrameFormat.isValid": (), + "QTextFrameFormat.leftMargin": (), + "QTextFrameFormat.margin": (), + "QTextFrameFormat.padding": (), + "QTextFrameFormat.pageBreakPolicy": (), + "QTextFrameFormat.position": (), + "QTextFrameFormat.rightMargin": (), + "QTextFrameFormat.setBorder": ('float',), + "QTextFrameFormat.setBorderBrush": ('PySide2.QtGui.QBrush',), + "QTextFrameFormat.setBorderStyle": ('PySide2.QtGui.QTextFrameFormat.BorderStyle',), + "QTextFrameFormat.setBottomMargin": ('float',), + "QTextFrameFormat.setHeight": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.setLeftMargin": ('float',), + "QTextFrameFormat.setMargin": ('float',), + "QTextFrameFormat.setPadding": ('float',), + "QTextFrameFormat.setPageBreakPolicy": ('PySide2.libpyside.PageBreakFlags',), + "QTextFrameFormat.setPosition": ('PySide2.QtGui.QTextFrameFormat.Position',), + "QTextFrameFormat.setRightMargin": ('float',), + "QTextFrameFormat.setTopMargin": ('float',), + "QTextFrameFormat.setWidth": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.topMargin": (), + "QTextFrameFormat.width": (), + + # class PySide2.QtGui.QTextImageFormat: + "QTextImageFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextImageFormat',)], + "QTextImageFormat.__copy__": (), + "QTextImageFormat.height": (), + "QTextImageFormat.isValid": (), + "QTextImageFormat.name": (), + "QTextImageFormat.setHeight": ('float',), + "QTextImageFormat.setName": ('str',), + "QTextImageFormat.setWidth": ('float',), + "QTextImageFormat.width": (), + + # class PySide2.QtGui.QTextInlineObject: + "QTextInlineObject.__init__": (), + "QTextInlineObject.__copy__": (), + "QTextInlineObject.ascent": (), + "QTextInlineObject.descent": (), + "QTextInlineObject.format": (), + "QTextInlineObject.formatIndex": (), + "QTextInlineObject.height": (), + "QTextInlineObject.isValid": (), + "QTextInlineObject.rect": (), + "QTextInlineObject.setAscent": ('float',), + "QTextInlineObject.setDescent": ('float',), + "QTextInlineObject.setWidth": ('float',), + "QTextInlineObject.textDirection": (), + "QTextInlineObject.textPosition": (), + "QTextInlineObject.width": (), + + # class PySide2.QtGui.QTextItem: + "QTextItem.__init__": (), + "QTextItem.ascent": (), + "QTextItem.descent": (), + "QTextItem.font": (), + "QTextItem.renderFlags": (), + "QTextItem.text": (), + "QTextItem.width": (), + + # class PySide2.QtGui.QTextLayout: + "QTextLayout.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('str',), ('str', 'PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice')], + "QTextLayout.additionalFormats": (), + "QTextLayout.beginLayout": (), + "QTextLayout.boundingRect": (), + "QTextLayout.cacheEnabled": (), + "QTextLayout.clearAdditionalFormats": (), + "QTextLayout.clearFormats": (), + "QTextLayout.clearLayout": (), + "QTextLayout.createLine": (), + "QTextLayout.cursorMoveStyle": (), + "QTextLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'list', 'PySide2.QtCore.QRectF'), + "QTextLayout.drawCursor": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int', 'int')], + "QTextLayout.endLayout": (), + "QTextLayout.font": (), + "QTextLayout.formats": (), + "QTextLayout.isValidCursorPosition": ('int',), + "QTextLayout.leftCursorPosition": ('int',), + "QTextLayout.lineAt": ('int',), + "QTextLayout.lineCount": (), + "QTextLayout.lineForTextPosition": ('int',), + "QTextLayout.maximumWidth": (), + "QTextLayout.minimumWidth": (), + "QTextLayout.nextCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.position": (), + "QTextLayout.preeditAreaPosition": (), + "QTextLayout.preeditAreaText": (), + "QTextLayout.previousCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.rightCursorPosition": ('int',), + "QTextLayout.setAdditionalFormats": ('list',), + "QTextLayout.setCacheEnabled": ('bool',), + "QTextLayout.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextLayout.setFlags": ('int',), + "QTextLayout.setFont": ('PySide2.QtGui.QFont',), + "QTextLayout.setFormats": ('list',), + "QTextLayout.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLayout.setPreeditArea": ('int', 'str'), + "QTextLayout.setRawFont": ('PySide2.QtGui.QRawFont',), + "QTextLayout.setText": ('str',), + "QTextLayout.setTextOption": ('PySide2.QtGui.QTextOption',), + "QTextLayout.text": (), + "QTextLayout.textOption": (), + + # class PySide2.QtGui.QTextLength: + "QTextLength.__init__": [(), ('PySide2.QtGui.QTextLength',), ('PySide2.QtGui.QTextLength.Type', 'float')], + "QTextLength.__copy__": (), + "QTextLength.rawValue": (), + "QTextLength.type": (), + "QTextLength.value": ('float',), + + # class PySide2.QtGui.QTextLine: + "QTextLine.__init__": (), + "QTextLine.__copy__": (), + "QTextLine.ascent": (), + "QTextLine.cursorToX": ('int', 'PySide2.QtGui.QTextLine.Edge'), + "QTextLine.descent": (), + "QTextLine.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextLayout.FormatRange'), + "QTextLine.height": (), + "QTextLine.horizontalAdvance": (), + "QTextLine.isValid": (), + "QTextLine.leading": (), + "QTextLine.leadingIncluded": (), + "QTextLine.lineNumber": (), + "QTextLine.naturalTextRect": (), + "QTextLine.naturalTextWidth": (), + "QTextLine.position": (), + "QTextLine.rect": (), + "QTextLine.setLeadingIncluded": ('bool',), + "QTextLine.setLineWidth": ('float',), + "QTextLine.setNumColumns": [('int',), ('int', 'float')], + "QTextLine.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLine.textLength": (), + "QTextLine.textStart": (), + "QTextLine.width": (), + "QTextLine.x": (), + "QTextLine.xToCursor": ('float', 'PySide2.QtGui.QTextLine.CursorPosition'), + "QTextLine.y": (), + + # class PySide2.QtGui.QTextList: + "QTextList.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextList.add": ('PySide2.QtGui.QTextBlock',), + "QTextList.count": (), + "QTextList.format": (), + "QTextList.item": ('int',), + "QTextList.itemNumber": ('PySide2.QtGui.QTextBlock',), + "QTextList.itemText": ('PySide2.QtGui.QTextBlock',), + "QTextList.remove": ('PySide2.QtGui.QTextBlock',), + "QTextList.removeItem": ('int',), + "QTextList.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + + # class PySide2.QtGui.QTextListFormat: + "QTextListFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + "QTextListFormat.__copy__": (), + "QTextListFormat.indent": (), + "QTextListFormat.isValid": (), + "QTextListFormat.numberPrefix": (), + "QTextListFormat.numberSuffix": (), + "QTextListFormat.setIndent": ('int',), + "QTextListFormat.setNumberPrefix": ('str',), + "QTextListFormat.setNumberSuffix": ('str',), + "QTextListFormat.setStyle": ('PySide2.QtGui.QTextListFormat.Style',), + "QTextListFormat.style": (), + + # class PySide2.QtGui.QTextObject: + "QTextObject.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextObject.document": (), + "QTextObject.format": (), + "QTextObject.formatIndex": (), + "QTextObject.objectIndex": (), + "QTextObject.setFormat": ('PySide2.QtGui.QTextFormat',), + + # class PySide2.QtGui.QTextObjectInterface: + "QTextObjectInterface.__init__": (), + "QTextObjectInterface.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QTextObjectInterface.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QTextOption: + "QTextOption.__init__": [(), ('PySide2.QtGui.QTextOption',), ('PySide2.libpyside.Alignment',)], + "QTextOption.__copy__": (), + "QTextOption.alignment": (), + "QTextOption.flags": (), + "QTextOption.setAlignment": ('PySide2.libpyside.Alignment',), + "QTextOption.setFlags": ('PySide2.libpyside.Flags',), + "QTextOption.setTabArray": ('list',), + "QTextOption.setTabStop": ('float',), + "QTextOption.setTabStopDistance": ('float',), + "QTextOption.setTabs": ('list',), + "QTextOption.setTextDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextOption.setUseDesignMetrics": ('bool',), + "QTextOption.setWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextOption.tabArray": (), + "QTextOption.tabStop": (), + "QTextOption.tabStopDistance": (), + "QTextOption.tabs": (), + "QTextOption.textDirection": (), + "QTextOption.useDesignMetrics": (), + "QTextOption.wrapMode": (), + + # class PySide2.QtGui.QTextTable: + "QTextTable.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextTable.appendColumns": ('int',), + "QTextTable.appendRows": ('int',), + "QTextTable.cellAt": [('PySide2.QtGui.QTextCursor',), ('int',), ('int', 'int')], + "QTextTable.columns": (), + "QTextTable.format": (), + "QTextTable.insertColumns": ('int', 'int'), + "QTextTable.insertRows": ('int', 'int'), + "QTextTable.mergeCells": [('PySide2.QtGui.QTextCursor',), ('int', 'int', 'int', 'int')], + "QTextTable.removeColumns": ('int', 'int'), + "QTextTable.removeRows": ('int', 'int'), + "QTextTable.resize": ('int', 'int'), + "QTextTable.rowEnd": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rowStart": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rows": (), + "QTextTable.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTable.splitCell": ('int', 'int', 'int', 'int'), + + # class PySide2.QtGui.QTextTableCell: + "QTextTableCell.__init__": [(), ('PySide2.QtGui.QTextTableCell',)], + "QTextTableCell.__copy__": (), + "QTextTableCell.begin": (), + "QTextTableCell.column": (), + "QTextTableCell.columnSpan": (), + "QTextTableCell.end": (), + "QTextTableCell.firstCursorPosition": (), + "QTextTableCell.firstPosition": (), + "QTextTableCell.format": (), + "QTextTableCell.isValid": (), + "QTextTableCell.lastCursorPosition": (), + "QTextTableCell.lastPosition": (), + "QTextTableCell.row": (), + "QTextTableCell.rowSpan": (), + "QTextTableCell.setFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextTableCell.tableCellFormatIndex": (), + + # class PySide2.QtGui.QTextTableCellFormat: + "QTextTableCellFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableCellFormat',)], + "QTextTableCellFormat.__copy__": (), + "QTextTableCellFormat.bottomPadding": (), + "QTextTableCellFormat.isValid": (), + "QTextTableCellFormat.leftPadding": (), + "QTextTableCellFormat.rightPadding": (), + "QTextTableCellFormat.setBottomPadding": ('float',), + "QTextTableCellFormat.setLeftPadding": ('float',), + "QTextTableCellFormat.setPadding": ('float',), + "QTextTableCellFormat.setRightPadding": ('float',), + "QTextTableCellFormat.setTopPadding": ('float',), + "QTextTableCellFormat.topPadding": (), + + # class PySide2.QtGui.QTextTableFormat: + "QTextTableFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTableFormat.__copy__": (), + "QTextTableFormat.alignment": (), + "QTextTableFormat.cellPadding": (), + "QTextTableFormat.cellSpacing": (), + "QTextTableFormat.clearColumnWidthConstraints": (), + "QTextTableFormat.columnWidthConstraints": (), + "QTextTableFormat.columns": (), + "QTextTableFormat.headerRowCount": (), + "QTextTableFormat.isValid": (), + "QTextTableFormat.setAlignment": ('PySide2.libpyside.Alignment',), + "QTextTableFormat.setCellPadding": ('float',), + "QTextTableFormat.setCellSpacing": ('float',), + "QTextTableFormat.setColumnWidthConstraints": ('list',), + "QTextTableFormat.setColumns": ('int',), + "QTextTableFormat.setHeaderRowCount": ('int',), + + # class PySide2.QtGui.QToolBarChangeEvent: + "QToolBarChangeEvent.__init__": ('bool',), + "QToolBarChangeEvent.toggle": (), + + # class PySide2.QtGui.QTouchDevice: + "QTouchDevice.__init__": (), + "QTouchDevice.capabilities": (), + "QTouchDevice.devices": (), + "QTouchDevice.maximumTouchPoints": (), + "QTouchDevice.name": (), + "QTouchDevice.setCapabilities": ('PySide2.libpyside.Capabilities',), + "QTouchDevice.setMaximumTouchPoints": ('int',), + "QTouchDevice.setName": ('str',), + "QTouchDevice.setType": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTouchDevice.type": (), + + # class PySide2.QtGui.QTouchEvent: + "QTouchEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtGui.QTouchDevice', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.libpyside.TouchPointStates', 'list'), + "QTouchEvent.device": (), + "QTouchEvent.setDevice": ('PySide2.QtGui.QTouchDevice',), + "QTouchEvent.setTarget": ('PySide2.QtCore.QObject',), + "QTouchEvent.setTouchPointStates": ('PySide2.libpyside.TouchPointStates',), + "QTouchEvent.setTouchPoints": ('list',), + "QTouchEvent.setWindow": ('PySide2.QtGui.QWindow',), + "QTouchEvent.target": (), + "QTouchEvent.touchPointStates": (), + "QTouchEvent.touchPoints": (), + "QTouchEvent.window": (), + + # class PySide2.QtGui.QTransform: + "QTransform.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float', 'float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QTransform.__copy__": (), + "QTransform.__reduce__": (), + "QTransform.adjoint": (), + "QTransform.det": (), + "QTransform.determinant": (), + "QTransform.dx": (), + "QTransform.dy": (), + "QTransform.fromScale": ('float', 'float'), + "QTransform.fromTranslate": ('float', 'float'), + "QTransform.inverted": ('bool',), + "QTransform.isAffine": (), + "QTransform.isIdentity": (), + "QTransform.isInvertible": (), + "QTransform.isRotating": (), + "QTransform.isScaling": (), + "QTransform.isTranslating": (), + "QTransform.m11": (), + "QTransform.m12": (), + "QTransform.m13": (), + "QTransform.m21": (), + "QTransform.m22": (), + "QTransform.m23": (), + "QTransform.m31": (), + "QTransform.m32": (), + "QTransform.m33": (), + "QTransform.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float')], + "QTransform.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QTransform.mapToPolygon": ('PySide2.QtCore.QRect',), + "QTransform.quadToQuad": [('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.quadToSquare": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.reset": (), + "QTransform.rotate": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.rotateRadians": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.scale": ('float', 'float'), + "QTransform.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float'), + "QTransform.shear": ('float', 'float'), + "QTransform.squareToQuad": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.toAffine": (), + "QTransform.translate": ('float', 'float'), + "QTransform.transposed": (), + "QTransform.type": (), + + # class PySide2.QtGui.QValidator: + "QValidator.__init__": ('PySide2.QtCore.QObject',), + "QValidator.fixup": ('str',), + "QValidator.locale": (), + "QValidator.setLocale": ('PySide2.QtCore.QLocale',), + "QValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QVector2D: + "QVector2D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',), ('float', 'float')], + "QVector2D.__copy__": (), + "QVector2D.__reduce__": (), + "QVector2D.distanceToLine": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.distanceToPoint": ('PySide2.QtGui.QVector2D',), + "QVector2D.dotProduct": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.isNull": (), + "QVector2D.length": (), + "QVector2D.lengthSquared": (), + "QVector2D.normalize": (), + "QVector2D.normalized": (), + "QVector2D.setX": ('float',), + "QVector2D.setY": ('float',), + "QVector2D.toPoint": (), + "QVector2D.toPointF": (), + "QVector2D.toTuple": (), + "QVector2D.toVector3D": (), + "QVector2D.toVector4D": (), + "QVector2D.x": (), + "QVector2D.y": (), + + # class PySide2.QtGui.QVector3D: + "QVector3D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float'), ('PySide2.QtGui.QVector4D',), ('float', 'float', 'float')], + "QVector3D.__copy__": (), + "QVector3D.__reduce__": (), + "QVector3D.crossProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToLine": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToPlane": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.distanceToPoint": ('PySide2.QtGui.QVector3D',), + "QVector3D.dotProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.isNull": (), + "QVector3D.length": (), + "QVector3D.lengthSquared": (), + "QVector3D.normal": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.normalize": (), + "QVector3D.normalized": (), + "QVector3D.project": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.setX": ('float',), + "QVector3D.setY": ('float',), + "QVector3D.setZ": ('float',), + "QVector3D.toPoint": (), + "QVector3D.toPointF": (), + "QVector3D.toTuple": (), + "QVector3D.toVector2D": (), + "QVector3D.toVector4D": (), + "QVector3D.unproject": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.x": (), + "QVector3D.y": (), + "QVector3D.z": (), + + # class PySide2.QtGui.QVector4D: + "QVector4D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float', 'float'), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QVector4D.__copy__": (), + "QVector4D.__reduce__": (), + "QVector4D.dotProduct": ('PySide2.QtGui.QVector4D', 'PySide2.QtGui.QVector4D'), + "QVector4D.isNull": (), + "QVector4D.length": (), + "QVector4D.lengthSquared": (), + "QVector4D.normalize": (), + "QVector4D.normalized": (), + "QVector4D.setW": ('float',), + "QVector4D.setX": ('float',), + "QVector4D.setY": ('float',), + "QVector4D.setZ": ('float',), + "QVector4D.toPoint": (), + "QVector4D.toPointF": (), + "QVector4D.toTuple": (), + "QVector4D.toVector2D": (), + "QVector4D.toVector2DAffine": (), + "QVector4D.toVector3D": (), + "QVector4D.toVector3DAffine": (), + "QVector4D.w": (), + "QVector4D.x": (), + "QVector4D.y": (), + "QVector4D.z": (), + + # class PySide2.QtGui.QWhatsThisClickedEvent: + "QWhatsThisClickedEvent.__init__": ('str',), + "QWhatsThisClickedEvent.href": (), + + # class PySide2.QtGui.QWheelEvent: + "QWheelEvent.__init__": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource', 'bool'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation')], + "QWheelEvent.angleDelta": (), + "QWheelEvent.buttons": (), + "QWheelEvent.delta": (), + "QWheelEvent.globalPos": (), + "QWheelEvent.globalPosF": (), + "QWheelEvent.globalX": (), + "QWheelEvent.global""Y": (), + "QWheelEvent.inverted": (), + "QWheelEvent.orientation": (), + "QWheelEvent.phase": (), + "QWheelEvent.pixelDelta": (), + "QWheelEvent.pos": (), + "QWheelEvent.posF": (), + "QWheelEvent.source": (), + "QWheelEvent.x": (), + "QWheelEvent.y": (), + + # class PySide2.QtGui.QWindow: + "QWindow.__init__": [('PySide2.QtGui.QScreen',), ('PySide2.QtGui.QWindow',)], + "QWindow.accessibleRoot": (), + "QWindow.alert": ('int',), + "QWindow.baseSize": (), + "QWindow.close": (), + "QWindow.contentOrientation": (), + "QWindow.create": (), + "QWindow.cursor": (), + "QWindow.destroy": (), + "QWindow.devicePixelRatio": (), + "QWindow.event": ('PySide2.QtCore.QEvent',), + "QWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QWindow.filePath": (), + "QWindow.flags": (), + "QWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.focusObject": (), + "QWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.format": (), + "QWindow.frameGeometry": (), + "QWindow.frameMargins": (), + "QWindow.framePosition": (), + "QWindow.fromWinId": ('int',), + "QWindow.geometry": (), + "QWindow.height": (), + "QWindow.hide": (), + "QWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWindow.icon": (), + "QWindow.isActive": (), + "QWindow.isAncestorOf": ('PySide2.QtGui.QWindow', 'PySide2.QtGui.QWindow.AncestorMode'), + "QWindow.isExposed": (), + "QWindow.isModal": (), + "QWindow.isTopLevel": (), + "QWindow.isVisible": (), + "QWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.lower": (), + "QWindow.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mask": (), + "QWindow.maximumHeight": (), + "QWindow.maximumSize": (), + "QWindow.maximumWidth": (), + "QWindow.minimumHeight": (), + "QWindow.minimumSize": (), + "QWindow.minimumWidth": (), + "QWindow.modality": (), + "QWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWindow.opacity": (), + "QWindow.parent": [(), ('PySide2.QtGui.QWindow.AncestorMode',)], + "QWindow.position": (), + "QWindow.raise": (), + "QWindow.reportContentOrientationChange": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QWindow.requestActivate": (), + "QWindow.requestUpdate": (), + "QWindow.requestedFormat": (), + "QWindow.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWindow.screen": (), + "QWindow.setBaseSize": ('PySide2.QtCore.QSize',), + "QWindow.setCursor": ('PySide2.QtGui.QCursor',), + "QWindow.setFilePath": ('str',), + "QWindow.setFlag": ('PySide2.QtCore.Qt.WindowType', 'bool'), + "QWindow.setFlags": ('PySide2.libpyside.WindowFlags',), + "QWindow.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QWindow.setFramePosition": ('PySide2.QtCore.QPoint',), + "QWindow.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWindow.setHeight": ('int',), + "QWindow.setIcon": ('PySide2.QtGui.QIcon',), + "QWindow.setKeyboardGrabEnabled": ('bool',), + "QWindow.setMask": ('PySide2.QtGui.QRegion',), + "QWindow.setMaximumHeight": ('int',), + "QWindow.setMaximumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMaximumWidth": ('int',), + "QWindow.setMinimumHeight": ('int',), + "QWindow.setMinimumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMinimumWidth": ('int',), + "QWindow.setModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWindow.setMouseGrabEnabled": ('bool',), + "QWindow.setOpacity": ('float',), + "QWindow.setParent": ('PySide2.QtGui.QWindow',), + "QWindow.setPosition": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWindow.setScreen": ('PySide2.QtGui.QScreen',), + "QWindow.setSizeIncrement": ('PySide2.QtCore.QSize',), + "QWindow.setSurfaceType": ('PySide2.QtGui.QSurface.SurfaceType',), + "QWindow.setTitle": ('str',), + "QWindow.setTransientParent": ('PySide2.QtGui.QWindow',), + "QWindow.setVisibility": ('PySide2.QtGui.QWindow.Visibility',), + "QWindow.setVisible": ('bool',), + "QWindow.setWidth": ('int',), + "QWindow.setWindowState": ('PySide2.QtCore.Qt.WindowState',), + "QWindow.setWindowStates": ('PySide2.libpyside.WindowStates',), + "QWindow.setX": ('int',), + "QWindow.setY": ('int',), + "QWindow.show": (), + "QWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWindow.showFullScreen": (), + "QWindow.showMaximized": (), + "QWindow.showMinimized": (), + "QWindow.showNormal": (), + "QWindow.size": (), + "QWindow.sizeIncrement": (), + "QWindow.surfaceHandle": (), + "QWindow.surfaceType": (), + "QWindow.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWindow.title": (), + "QWindow.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QWindow.transientParent": (), + "QWindow.type": (), + "QWindow.unsetCursor": (), + "QWindow.visibility": (), + "QWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWindow.width": (), + "QWindow.winId": (), + "QWindow.windowState": (), + "QWindow.windowStates": (), + "QWindow.x": (), + "QWindow.y": (), + + # class PySide2.QtGui.QWindowStateChangeEvent: + "QWindowStateChangeEvent.__init__": ('PySide2.libpyside.WindowStates', 'bool'), + "QWindowStateChangeEvent.isOverride": (), + "QWindowStateChangeEvent.oldState": (), + }) + +# Module PySide2.QtWidgets +if "PySide2.QtWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWidgets.QAbstractButton: + "QAbstractButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractButton.animateClick": ('int',), + "QAbstractButton.autoExclusive": (), + "QAbstractButton.autoRepeat": (), + "QAbstractButton.autoRepeatDelay": (), + "QAbstractButton.autoRepeatInterval": (), + "QAbstractButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractButton.checkStateSet": (), + "QAbstractButton.click": (), + "QAbstractButton.event": ('PySide2.QtCore.QEvent',), + "QAbstractButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.group": (), + "QAbstractButton.hitButton": ('PySide2.QtCore.QPoint',), + "QAbstractButton.icon": (), + "QAbstractButton.iconSize": (), + "QAbstractButton.isCheckable": (), + "QAbstractButton.isChecked": (), + "QAbstractButton.isDown": (), + "QAbstractButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.nextCheckState": (), + "QAbstractButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractButton.setAutoExclusive": ('bool',), + "QAbstractButton.setAutoRepeat": ('bool',), + "QAbstractButton.setAutoRepeatDelay": ('int',), + "QAbstractButton.setAutoRepeatInterval": ('int',), + "QAbstractButton.setCheckable": ('bool',), + "QAbstractButton.setChecked": ('bool',), + "QAbstractButton.setDown": ('bool',), + "QAbstractButton.setIcon": ('PySide2.QtGui.QIcon',), + "QAbstractButton.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractButton.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAbstractButton.setText": ('str',), + "QAbstractButton.shortcut": (), + "QAbstractButton.text": (), + "QAbstractButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractButton.toggle": (), + + # class PySide2.QtWidgets.QAbstractGraphicsShapeItem: + "QAbstractGraphicsShapeItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.brush": (), + "QAbstractGraphicsShapeItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.opaqueArea": (), + "QAbstractGraphicsShapeItem.pen": (), + "QAbstractGraphicsShapeItem.setBrush": ('PySide2.QtGui.QBrush',), + "QAbstractGraphicsShapeItem.setPen": ('PySide2.QtGui.QPen',), + + # class PySide2.QtWidgets.QAbstractItemDelegate: + "QAbstractItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.destroyEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.elidedText": ('PySide2.QtGui.QFontMetrics', 'int', 'PySide2.QtCore.Qt.TextElideMode', 'str'), + "QAbstractItemDelegate.helpEvent": ('PySide2.QtGui.QHelpEvent', 'PySide2.QtWidgets.QAbstractItemView', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paintingRoles": (), + "QAbstractItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QAbstractItemView: + "QAbstractItemView.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.alternatingRowColors": (), + "QAbstractItemView.autoScrollMargin": (), + "QAbstractItemView.clearSelection": (), + "QAbstractItemView.closeEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QAbstractItemDelegate.EndEditHint'), + "QAbstractItemView.closePersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.commitData": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemView.currentIndex": (), + "QAbstractItemView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QAbstractItemView.defaultDropAction": (), + "QAbstractItemView.dirtyRegionOffset": (), + "QAbstractItemView.doAutoScroll": (), + "QAbstractItemView.doItemsLayout": (), + "QAbstractItemView.dragDropMode": (), + "QAbstractItemView.dragDropOverwriteMode": (), + "QAbstractItemView.dragEnabled": (), + "QAbstractItemView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractItemView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractItemView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractItemView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractItemView.dropIndicatorPosition": (), + "QAbstractItemView.edit": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.EditTrigger', 'PySide2.QtCore.QEvent')], + "QAbstractItemView.editTriggers": (), + "QAbstractItemView.editorDestroyed": ('PySide2.QtCore.QObject',), + "QAbstractItemView.event": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QAbstractItemView.executeDelayedItemsLayout": (), + "QAbstractItemView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.focusNextPrevChild": ('bool',), + "QAbstractItemView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.hasAutoScroll": (), + "QAbstractItemView.horizontalOffset": (), + "QAbstractItemView.horizontalScrollMode": (), + "QAbstractItemView.horizontalScrollbarAction": ('int',), + "QAbstractItemView.horizontalScrollbarValueChanged": ('int',), + "QAbstractItemView.horizontalStepsPerItem": (), + "QAbstractItemView.iconSize": (), + "QAbstractItemView.indexAt": ('PySide2.QtCore.QPoint',), + "QAbstractItemView.indexWidget": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QAbstractItemView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractItemView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.isPersistentEditorOpen": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.itemDelegate": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.itemDelegateForColumn": ('int',), + "QAbstractItemView.itemDelegateForRow": ('int',), + "QAbstractItemView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractItemView.keyboardSearch": ('str',), + "QAbstractItemView.model": (), + "QAbstractItemView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QAbstractItemView.openPersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.reset": (), + "QAbstractItemView.resetHorizontalScrollMode": (), + "QAbstractItemView.resetVerticalScrollMode": (), + "QAbstractItemView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractItemView.rootIndex": (), + "QAbstractItemView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.scheduleDelayedItemsLayout": (), + "QAbstractItemView.scrollDirtyRegion": ('int', 'int'), + "QAbstractItemView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QAbstractItemView.scrollToBottom": (), + "QAbstractItemView.scrollToTop": (), + "QAbstractItemView.selectAll": (), + "QAbstractItemView.selectedIndexes": (), + "QAbstractItemView.selectionBehavior": (), + "QAbstractItemView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QAbstractItemView.selectionCommand": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QEvent'), + "QAbstractItemView.selectionMode": (), + "QAbstractItemView.selectionModel": (), + "QAbstractItemView.setAlternatingRowColors": ('bool',), + "QAbstractItemView.setAutoScroll": ('bool',), + "QAbstractItemView.setAutoScrollMargin": ('int',), + "QAbstractItemView.setCurrentIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setDefaultDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QAbstractItemView.setDirtyRegion": ('PySide2.QtGui.QRegion',), + "QAbstractItemView.setDragDropMode": ('PySide2.QtWidgets.QAbstractItemView.DragDropMode',), + "QAbstractItemView.setDragDropOverwriteMode": ('bool',), + "QAbstractItemView.setDragEnabled": ('bool',), + "QAbstractItemView.setDropIndicatorShown": ('bool',), + "QAbstractItemView.setEditTriggers": ('PySide2.libpyside.EditTriggers',), + "QAbstractItemView.setHorizontalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setHorizontalStepsPerItem": ('int',), + "QAbstractItemView.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractItemView.setIndexWidget": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QWidget'), + "QAbstractItemView.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QAbstractItemView.setItemDelegateForColumn": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setItemDelegateForRow": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractItemView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QAbstractItemView.setSelectionBehavior": ('PySide2.QtWidgets.QAbstractItemView.SelectionBehavior',), + "QAbstractItemView.setSelectionMode": ('PySide2.QtWidgets.QAbstractItemView.SelectionMode',), + "QAbstractItemView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QAbstractItemView.setState": ('PySide2.QtWidgets.QAbstractItemView.State',), + "QAbstractItemView.setTabKeyNavigation": ('bool',), + "QAbstractItemView.setTextElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QAbstractItemView.setVerticalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setVerticalStepsPerItem": ('int',), + "QAbstractItemView.showDropIndicator": (), + "QAbstractItemView.sizeHintForColumn": ('int',), + "QAbstractItemView.sizeHintForIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.sizeHintForRow": ('int',), + "QAbstractItemView.startAutoScroll": (), + "QAbstractItemView.startDrag": ('PySide2.libpyside.DropActions',), + "QAbstractItemView.state": (), + "QAbstractItemView.stopAutoScroll": (), + "QAbstractItemView.tabKeyNavigation": (), + "QAbstractItemView.textElideMode": (), + "QAbstractItemView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractItemView.update": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.updateEditorData": (), + "QAbstractItemView.updateEditorGeometries": (), + "QAbstractItemView.updateGeometries": (), + "QAbstractItemView.verticalOffset": (), + "QAbstractItemView.verticalScrollMode": (), + "QAbstractItemView.verticalScrollbarAction": ('int',), + "QAbstractItemView.verticalScrollbarValueChanged": ('int',), + "QAbstractItemView.verticalStepsPerItem": (), + "QAbstractItemView.viewOptions": (), + "QAbstractItemView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.viewportSizeHint": (), + "QAbstractItemView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QAbstractScrollArea: + "QAbstractScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.addScrollBarWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.Alignment'), + "QAbstractScrollArea.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractScrollArea.cornerWidget": (), + "QAbstractScrollArea.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractScrollArea.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractScrollArea.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractScrollArea.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractScrollArea.event": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QAbstractScrollArea.horizontalScrollBar": (), + "QAbstractScrollArea.horizontalScrollBarPolicy": (), + "QAbstractScrollArea.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractScrollArea.maximumViewportSize": (), + "QAbstractScrollArea.minimumSizeHint": (), + "QAbstractScrollArea.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractScrollArea.scrollBarWidgets": ('PySide2.libpyside.Alignment',), + "QAbstractScrollArea.scrollContentsBy": ('int', 'int'), + "QAbstractScrollArea.setCornerWidget": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setHorizontalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setHorizontalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setSizeAdjustPolicy": ('PySide2.QtWidgets.QAbstractScrollArea.SizeAdjustPolicy',), + "QAbstractScrollArea.setVerticalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setVerticalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setViewportMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QAbstractScrollArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.sizeAdjustPolicy": (), + "QAbstractScrollArea.sizeHint": (), + "QAbstractScrollArea.verticalScrollBar": (), + "QAbstractScrollArea.verticalScrollBarPolicy": (), + "QAbstractScrollArea.viewport": (), + "QAbstractScrollArea.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.viewportMargins": (), + "QAbstractScrollArea.viewportSizeHint": (), + "QAbstractScrollArea.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSlider: + "QAbstractSlider.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSlider.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.event": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.hasTracking": (), + "QAbstractSlider.invertedAppearance": (), + "QAbstractSlider.invertedControls": (), + "QAbstractSlider.isSliderDown": (), + "QAbstractSlider.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSlider.maximum": (), + "QAbstractSlider.minimum": (), + "QAbstractSlider.orientation": (), + "QAbstractSlider.pageStep": (), + "QAbstractSlider.repeatAction": (), + "QAbstractSlider.setInvertedAppearance": ('bool',), + "QAbstractSlider.setInvertedControls": ('bool',), + "QAbstractSlider.setMaximum": ('int',), + "QAbstractSlider.setMinimum": ('int',), + "QAbstractSlider.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QAbstractSlider.setPageStep": ('int',), + "QAbstractSlider.setRange": ('int', 'int'), + "QAbstractSlider.setRepeatAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction', 'int', 'int'), + "QAbstractSlider.setSingleStep": ('int',), + "QAbstractSlider.setSliderDown": ('bool',), + "QAbstractSlider.setSliderPosition": ('int',), + "QAbstractSlider.setTracking": ('bool',), + "QAbstractSlider.setValue": ('int',), + "QAbstractSlider.singleStep": (), + "QAbstractSlider.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QAbstractSlider.sliderPosition": (), + "QAbstractSlider.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSlider.triggerAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction',), + "QAbstractSlider.value": (), + "QAbstractSlider.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSpinBox: + "QAbstractSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSpinBox.alignment": (), + "QAbstractSpinBox.buttonSymbols": (), + "QAbstractSpinBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.clear": (), + "QAbstractSpinBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QAbstractSpinBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractSpinBox.correctionMode": (), + "QAbstractSpinBox.event": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.fixup": ('str',), + "QAbstractSpinBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.hasAcceptableInput": (), + "QAbstractSpinBox.hasFrame": (), + "QAbstractSpinBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QAbstractSpinBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QAbstractSpinBox.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractSpinBox.interpretText": (), + "QAbstractSpinBox.isAccelerated": (), + "QAbstractSpinBox.isGroupSeparatorShown": (), + "QAbstractSpinBox.isReadOnly": (), + "QAbstractSpinBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyboardTracking": (), + "QAbstractSpinBox.lineEdit": (), + "QAbstractSpinBox.minimumSizeHint": (), + "QAbstractSpinBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractSpinBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractSpinBox.selectAll": (), + "QAbstractSpinBox.setAccelerated": ('bool',), + "QAbstractSpinBox.setAlignment": ('PySide2.libpyside.Alignment',), + "QAbstractSpinBox.setButtonSymbols": ('PySide2.QtWidgets.QAbstractSpinBox.ButtonSymbols',), + "QAbstractSpinBox.setCorrectionMode": ('PySide2.QtWidgets.QAbstractSpinBox.CorrectionMode',), + "QAbstractSpinBox.setFrame": ('bool',), + "QAbstractSpinBox.setGroupSeparatorShown": ('bool',), + "QAbstractSpinBox.setKeyboardTracking": ('bool',), + "QAbstractSpinBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QAbstractSpinBox.setReadOnly": ('bool',), + "QAbstractSpinBox.setSpecialValueText": ('str',), + "QAbstractSpinBox.setWrapping": ('bool',), + "QAbstractSpinBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QAbstractSpinBox.sizeHint": (), + "QAbstractSpinBox.specialValueText": (), + "QAbstractSpinBox.stepBy": ('int',), + "QAbstractSpinBox.stepDown": (), + "QAbstractSpinBox.stepEnabled": (), + "QAbstractSpinBox.stepUp": (), + "QAbstractSpinBox.text": (), + "QAbstractSpinBox.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSpinBox.validate": ('str', 'int'), + "QAbstractSpinBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QAbstractSpinBox.wrapping": (), + + # class PySide2.QtWidgets.QAccessibleWidget: + "QAccessibleWidget.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QAccessible.Role', 'str'), + "QAccessibleWidget.actionNames": (), + "QAccessibleWidget.addControllingSignal": ('str',), + "QAccessibleWidget.backgroundColor": (), + "QAccessibleWidget.child": ('int',), + "QAccessibleWidget.childCount": (), + "QAccessibleWidget.doAction": ('str',), + "QAccessibleWidget.focusChild": (), + "QAccessibleWidget.foregroundColor": (), + "QAccessibleWidget.indexOfChild": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessibleWidget.interface_cast": ('PySide2.QtGui.QAccessible.InterfaceType',), + "QAccessibleWidget.isValid": (), + "QAccessibleWidget.keyBindingsForAction": ('str',), + "QAccessibleWidget.parent": (), + "QAccessibleWidget.parentObject": (), + "QAccessibleWidget.rect": (), + "QAccessibleWidget.relations": ('PySide2.libpyside.Relation',), + "QAccessibleWidget.role": (), + "QAccessibleWidget.state": (), + "QAccessibleWidget.text": ('PySide2.QtGui.QAccessible.Text',), + "QAccessibleWidget.widget": (), + "QAccessibleWidget.window": (), + + # class PySide2.QtWidgets.QAction: + "QAction.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QAction.actionGroup": (), + "QAction.activate": ('PySide2.QtWidgets.QAction.ActionEvent',), + "QAction.associatedGraphicsWidgets": (), + "QAction.associatedWidgets": (), + "QAction.autoRepeat": (), + "QAction.data": (), + "QAction.event": ('PySide2.QtCore.QEvent',), + "QAction.font": (), + "QAction.hover": (), + "QAction.icon": (), + "QAction.iconText": (), + "QAction.isCheckable": (), + "QAction.isChecked": (), + "QAction.isEnabled": (), + "QAction.isIconVisibleInMenu": (), + "QAction.isSeparator": (), + "QAction.isShortcutVisibleInContextMenu": (), + "QAction.isVisible": (), + "QAction.menu": (), + "QAction.menuRole": (), + "QAction.parentWidget": (), + "QAction.priority": (), + "QAction.setActionGroup": ('PySide2.QtWidgets.QActionGroup',), + "QAction.setAutoRepeat": ('bool',), + "QAction.setCheckable": ('bool',), + "QAction.setChecked": ('bool',), + "QAction.setData": ('Any',), + "QAction.setDisabled": ('bool',), + "QAction.setEnabled": ('bool',), + "QAction.setFont": ('PySide2.QtGui.QFont',), + "QAction.setIcon": ('PySide2.QtGui.QIcon',), + "QAction.setIconText": ('str',), + "QAction.setIconVisibleInMenu": ('bool',), + "QAction.setMenu": ('PySide2.QtWidgets.QMenu',), + "QAction.setMenuRole": ('PySide2.QtWidgets.QAction.MenuRole',), + "QAction.setPriority": ('PySide2.QtWidgets.QAction.Priority',), + "QAction.setSeparator": ('bool',), + "QAction.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAction.setShortcutContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QAction.setShortcutVisibleInContextMenu": ('bool',), + "QAction.setShortcuts": [('PySide2.QtGui.QKeySequence.StandardKey',), ('list',)], + "QAction.setStatusTip": ('str',), + "QAction.setText": ('str',), + "QAction.setToolTip": ('str',), + "QAction.setVisible": ('bool',), + "QAction.setWhatsThis": ('str',), + "QAction.shortcut": (), + "QAction.shortcutContext": (), + "QAction.shortcuts": (), + "QAction.showStatusText": ('PySide2.QtWidgets.QWidget',), + "QAction.statusTip": (), + "QAction.text": (), + "QAction.toggle": (), + "QAction.toolTip": (), + "QAction.trigger": (), + "QAction.whatsThis": (), + + # class PySide2.QtWidgets.QActionGroup: + "QActionGroup.__init__": ('PySide2.QtCore.QObject',), + "QActionGroup.actions": (), + "QActionGroup.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction',), ('str',)], + "QActionGroup.checkedAction": (), + "QActionGroup.isEnabled": (), + "QActionGroup.isExclusive": (), + "QActionGroup.isVisible": (), + "QActionGroup.removeAction": ('PySide2.QtWidgets.QAction',), + "QActionGroup.setDisabled": ('bool',), + "QActionGroup.setEnabled": ('bool',), + "QActionGroup.setExclusive": ('bool',), + "QActionGroup.setVisible": ('bool',), + + # class PySide2.QtWidgets.QApplication: + "QApplication.__init__": [(), ('List[str]',)], + "QApplication.aboutQt": (), + "QApplication.activeModalWidget": (), + "QApplication.activePopupWidget": (), + "QApplication.activeWindow": (), + "QApplication.alert": ('PySide2.QtWidgets.QWidget', 'int'), + "QApplication.allWidgets": (), + "QApplication.autoSipEnabled": (), + "QApplication.beep": (), + "QApplication.closeAllWindows": (), + "QApplication.colorSpec": (), + "QApplication.cursorFlashTime": (), + "QApplication.desktop": (), + "QApplication.doubleClickInterval": (), + "QApplication.event": ('PySide2.QtCore.QEvent',), + "QApplication.exec_": (), + "QApplication.focusWidget": (), + "QApplication.font": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.fontMetrics": (), + "QApplication.globalStrut": (), + "QApplication.isEffectEnabled": ('PySide2.QtCore.Qt.UIEffect',), + "QApplication.keyboardInputInterval": (), + "QApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QApplication.palette": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.setActiveWindow": ('PySide2.QtWidgets.QWidget',), + "QApplication.setAutoSipEnabled": ('bool',), + "QApplication.setColorSpec": ('int',), + "QApplication.setCursorFlashTime": ('int',), + "QApplication.setDoubleClickInterval": ('int',), + "QApplication.setEffectEnabled": ('PySide2.QtCore.Qt.UIEffect', 'bool'), + "QApplication.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'str')], + "QApplication.setGlobalStrut": ('PySide2.QtCore.QSize',), + "QApplication.setKeyboardInputInterval": ('int',), + "QApplication.setPalette": [('PySide2.QtGui.QPalette',), ('PySide2.QtGui.QPalette', 'str')], + "QApplication.setStartDragDistance": ('int',), + "QApplication.setStartDragTime": ('int',), + "QApplication.setStyle": [('PySide2.QtWidgets.QStyle',), ('str',)], + "QApplication.setStyleSheet": ('str',), + "QApplication.setWheelScrollLines": ('int',), + "QApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QApplication.startDragDistance": (), + "QApplication.startDragTime": (), + "QApplication.style": (), + "QApplication.styleSheet": (), + "QApplication.topLevelAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.topLevelWidgets": (), + "QApplication.wheelScrollLines": (), + "QApplication.widgetAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.windowIcon": (), + + # class PySide2.QtWidgets.QBoxLayout: + "QBoxLayout.__init__": ('PySide2.QtWidgets.QBoxLayout.Direction', 'PySide2.QtWidgets.QWidget'), + "QBoxLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QBoxLayout.addLayout": ('PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.addSpacerItem": ('PySide2.QtWidgets.QSpacerItem',), + "QBoxLayout.addSpacing": ('int',), + "QBoxLayout.addStretch": ('int',), + "QBoxLayout.addStrut": ('int',), + "QBoxLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.libpyside.Alignment')], + "QBoxLayout.count": (), + "QBoxLayout.direction": (), + "QBoxLayout.expandingDirections": (), + "QBoxLayout.hasHeightForWidth": (), + "QBoxLayout.heightForWidth": ('int',), + "QBoxLayout.insertItem": ('int', 'PySide2.QtWidgets.QLayoutItem'), + "QBoxLayout.insertLayout": ('int', 'PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.insertSpacerItem": ('int', 'PySide2.QtWidgets.QSpacerItem'), + "QBoxLayout.insertSpacing": ('int', 'int'), + "QBoxLayout.insertStretch": ('int', 'int'), + "QBoxLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int', 'PySide2.libpyside.Alignment'), + "QBoxLayout.invalidate": (), + "QBoxLayout.itemAt": ('int',), + "QBoxLayout.maximumSize": (), + "QBoxLayout.minimumHeightForWidth": ('int',), + "QBoxLayout.minimumSize": (), + "QBoxLayout.setDirection": ('PySide2.QtWidgets.QBoxLayout.Direction',), + "QBoxLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QBoxLayout.setSpacing": ('int',), + "QBoxLayout.setStretch": ('int', 'int'), + "QBoxLayout.setStretchFactor": [('PySide2.QtWidgets.QLayout', 'int'), ('PySide2.QtWidgets.QWidget', 'int')], + "QBoxLayout.sizeHint": (), + "QBoxLayout.spacing": (), + "QBoxLayout.stretch": ('int',), + "QBoxLayout.takeAt": ('int',), + + # class PySide2.QtWidgets.QButtonGroup: + "QButtonGroup.__init__": ('PySide2.QtCore.QObject',), + "QButtonGroup.addButton": ('PySide2.QtWidgets.QAbstractButton', 'int'), + "QButtonGroup.button": ('int',), + "QButtonGroup.buttons": (), + "QButtonGroup.checkedButton": (), + "QButtonGroup.checkedId": (), + "QButtonGroup.exclusive": (), + "QButtonGroup.id": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.setExclusive": ('bool',), + "QButtonGroup.setId": ('PySide2.QtWidgets.QAbstractButton', 'int'), + + # class PySide2.QtWidgets.QCalendarWidget: + "QCalendarWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QCalendarWidget.dateEditAcceptDelay": (), + "QCalendarWidget.dateTextFormat": [(), ('PySide2.QtCore.QDate',)], + "QCalendarWidget.event": ('PySide2.QtCore.QEvent',), + "QCalendarWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCalendarWidget.firstDayOfWeek": (), + "QCalendarWidget.headerTextFormat": (), + "QCalendarWidget.horizontalHeaderFormat": (), + "QCalendarWidget.isDateEditEnabled": (), + "QCalendarWidget.isGridVisible": (), + "QCalendarWidget.isNavigationBarVisible": (), + "QCalendarWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QCalendarWidget.maximumDate": (), + "QCalendarWidget.minimumDate": (), + "QCalendarWidget.minimumSizeHint": (), + "QCalendarWidget.monthShown": (), + "QCalendarWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QCalendarWidget.paintCell": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QDate'), + "QCalendarWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QCalendarWidget.selectedDate": (), + "QCalendarWidget.selectionMode": (), + "QCalendarWidget.setCurrentPage": ('int', 'int'), + "QCalendarWidget.setDateEditAcceptDelay": ('int',), + "QCalendarWidget.setDateEditEnabled": ('bool',), + "QCalendarWidget.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QCalendarWidget.setDateTextFormat": ('PySide2.QtCore.QDate', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.setFirstDayOfWeek": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.setGridVisible": ('bool',), + "QCalendarWidget.setHeaderTextFormat": ('PySide2.QtGui.QTextCharFormat',), + "QCalendarWidget.setHorizontalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.HorizontalHeaderFormat',), + "QCalendarWidget.setMaximumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setMinimumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setNavigationBarVisible": ('bool',), + "QCalendarWidget.setSelectedDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setSelectionMode": ('PySide2.QtWidgets.QCalendarWidget.SelectionMode',), + "QCalendarWidget.setVerticalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.VerticalHeaderFormat',), + "QCalendarWidget.setWeekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.showNextMonth": (), + "QCalendarWidget.showNextYear": (), + "QCalendarWidget.showPreviousMonth": (), + "QCalendarWidget.showPreviousYear": (), + "QCalendarWidget.showSelectedDate": (), + "QCalendarWidget.showToday": (), + "QCalendarWidget.sizeHint": (), + "QCalendarWidget.updateCell": ('PySide2.QtCore.QDate',), + "QCalendarWidget.updateCells": (), + "QCalendarWidget.verticalHeaderFormat": (), + "QCalendarWidget.weekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.yearShown": (), + + # class PySide2.QtWidgets.QCheckBox: + "QCheckBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QCheckBox.checkState": (), + "QCheckBox.checkStateSet": (), + "QCheckBox.event": ('PySide2.QtCore.QEvent',), + "QCheckBox.hitButton": ('PySide2.QtCore.QPoint',), + "QCheckBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QCheckBox.isTristate": (), + "QCheckBox.minimumSizeHint": (), + "QCheckBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QCheckBox.nextCheckState": (), + "QCheckBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCheckBox.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QCheckBox.setTristate": ('bool',), + "QCheckBox.sizeHint": (), + + # class PySide2.QtWidgets.QColorDialog: + "QColorDialog.__init__": [('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QColorDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QColorDialog.currentColor": (), + "QColorDialog.customColor": ('int',), + "QColorDialog.customCount": (), + "QColorDialog.done": ('int',), + "QColorDialog.getColor": ('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget', 'str', 'PySide2.libpyside.ColorDialogOptions'), + "QColorDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QColorDialog.options": (), + "QColorDialog.selectedColor": (), + "QColorDialog.setCurrentColor": ('PySide2.QtGui.QColor',), + "QColorDialog.setCustomColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption', 'bool'), + "QColorDialog.setOptions": ('PySide2.libpyside.ColorDialogOptions',), + "QColorDialog.setStandardColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setVisible": ('bool',), + "QColorDialog.standardColor": ('int',), + "QColorDialog.testOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption',), + + # class PySide2.QtWidgets.QColormap: + "QColormap.__init__": ('PySide2.QtWidgets.QColormap',), + "QColormap.__copy__": (), + "QColormap.cleanup": (), + "QColormap.colorAt": ('int',), + "QColormap.colormap": (), + "QColormap.depth": (), + "QColormap.initialize": (), + "QColormap.instance": ('int',), + "QColormap.mode": (), + "QColormap.pixel": ('PySide2.QtGui.QColor',), + "QColormap.size": (), + + # class PySide2.QtWidgets.QColumnView: + "QColumnView.__init__": ('PySide2.QtWidgets.QWidget',), + "QColumnView.columnWidths": (), + "QColumnView.createColumn": ('PySide2.QtCore.QModelIndex',), + "QColumnView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QColumnView.horizontalOffset": (), + "QColumnView.indexAt": ('PySide2.QtCore.QPoint',), + "QColumnView.initializeColumn": ('PySide2.QtWidgets.QAbstractItemView',), + "QColumnView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QColumnView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QColumnView.previewWidget": (), + "QColumnView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QColumnView.resizeGripsVisible": (), + "QColumnView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QColumnView.scrollContentsBy": ('int', 'int'), + "QColumnView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QColumnView.selectAll": (), + "QColumnView.setColumnWidths": ('list',), + "QColumnView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QColumnView.setPreviewWidget": ('PySide2.QtWidgets.QWidget',), + "QColumnView.setResizeGripsVisible": ('bool',), + "QColumnView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QColumnView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QColumnView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QColumnView.sizeHint": (), + "QColumnView.verticalOffset": (), + "QColumnView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QColumnView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QComboBox: + "QComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QComboBox.addItem": [('PySide2.QtGui.QIcon', 'str', 'Any'), ('str', 'Any')], + "QComboBox.addItems": ('List[str]',), + "QComboBox.autoCompletion": (), + "QComboBox.autoCompletionCaseSensitivity": (), + "QComboBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QComboBox.clear": (), + "QComboBox.clearEditText": (), + "QComboBox.completer": (), + "QComboBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QComboBox.count": (), + "QComboBox.currentData": ('int',), + "QComboBox.currentIndex": (), + "QComboBox.currentText": (), + "QComboBox.duplicatesEnabled": (), + "QComboBox.event": ('PySide2.QtCore.QEvent',), + "QComboBox.findData": ('Any', 'int', 'PySide2.libpyside.MatchFlags'), + "QComboBox.findText": ('str', 'PySide2.libpyside.MatchFlags'), + "QComboBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.hasFrame": (), + "QComboBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QComboBox.hidePopup": (), + "QComboBox.iconSize": (), + "QComboBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionComboBox',), + "QComboBox.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QComboBox.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QComboBox.insertItem": [('int', 'PySide2.QtGui.QIcon', 'str', 'Any'), ('int', 'str', 'Any')], + "QComboBox.insertItems": ('int', 'List[str]'), + "QComboBox.insertPolicy": (), + "QComboBox.insertSeparator": ('int',), + "QComboBox.isEditable": (), + "QComboBox.itemData": ('int', 'int'), + "QComboBox.itemDelegate": (), + "QComboBox.itemIcon": ('int',), + "QComboBox.itemText": ('int',), + "QComboBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.lineEdit": (), + "QComboBox.maxCount": (), + "QComboBox.maxVisibleItems": (), + "QComboBox.minimumContentsLength": (), + "QComboBox.minimumSizeHint": (), + "QComboBox.model": (), + "QComboBox.modelColumn": (), + "QComboBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QComboBox.removeItem": ('int',), + "QComboBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QComboBox.rootModelIndex": (), + "QComboBox.setAutoCompletion": ('bool',), + "QComboBox.setAutoCompletionCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QComboBox.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QComboBox.setCurrentIndex": ('int',), + "QComboBox.setCurrentText": ('str',), + "QComboBox.setDuplicatesEnabled": ('bool',), + "QComboBox.setEditText": ('str',), + "QComboBox.setEditable": ('bool',), + "QComboBox.setFrame": ('bool',), + "QComboBox.setIconSize": ('PySide2.QtCore.QSize',), + "QComboBox.setInsertPolicy": ('PySide2.QtWidgets.QComboBox.InsertPolicy',), + "QComboBox.setItemData": ('int', 'Any', 'int'), + "QComboBox.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QComboBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QComboBox.setItemText": ('int', 'str'), + "QComboBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QComboBox.setMaxCount": ('int',), + "QComboBox.setMaxVisibleItems": ('int',), + "QComboBox.setMinimumContentsLength": ('int',), + "QComboBox.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QComboBox.setModelColumn": ('int',), + "QComboBox.setRootModelIndex": ('PySide2.QtCore.QModelIndex',), + "QComboBox.setSizeAdjustPolicy": ('PySide2.QtWidgets.QComboBox.SizeAdjustPolicy',), + "QComboBox.setValidator": ('PySide2.QtGui.QValidator',), + "QComboBox.setView": ('PySide2.QtWidgets.QAbstractItemView',), + "QComboBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QComboBox.showPopup": (), + "QComboBox.sizeAdjustPolicy": (), + "QComboBox.sizeHint": (), + "QComboBox.validator": (), + "QComboBox.view": (), + "QComboBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QCommandLinkButton: + "QCommandLinkButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget'), ('str', 'str', 'PySide2.QtWidgets.QWidget')], + "QCommandLinkButton.description": (), + "QCommandLinkButton.event": ('PySide2.QtCore.QEvent',), + "QCommandLinkButton.heightForWidth": ('int',), + "QCommandLinkButton.minimumSizeHint": (), + "QCommandLinkButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCommandLinkButton.setDescription": ('str',), + "QCommandLinkButton.sizeHint": (), + + # class PySide2.QtWidgets.QCommonStyle: + "QCommonStyle.__init__": (), + "QCommonStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QCommonStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QCommonStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QCommonStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QCompleter: + "QCompleter.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QCompleter.caseSensitivity": (), + "QCompleter.complete": ('PySide2.QtCore.QRect',), + "QCompleter.completionColumn": (), + "QCompleter.completionCount": (), + "QCompleter.completionMode": (), + "QCompleter.completionModel": (), + "QCompleter.completionPrefix": (), + "QCompleter.completionRole": (), + "QCompleter.currentCompletion": (), + "QCompleter.currentIndex": (), + "QCompleter.currentRow": (), + "QCompleter.event": ('PySide2.QtCore.QEvent',), + "QCompleter.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCompleter.filterMode": (), + "QCompleter.maxVisibleItems": (), + "QCompleter.model": (), + "QCompleter.modelSorting": (), + "QCompleter.pathFromIndex": ('PySide2.QtCore.QModelIndex',), + "QCompleter.popup": (), + "QCompleter.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCompleter.setCompletionColumn": ('int',), + "QCompleter.setCompletionMode": ('PySide2.QtWidgets.QCompleter.CompletionMode',), + "QCompleter.setCompletionPrefix": ('str',), + "QCompleter.setCompletionRole": ('int',), + "QCompleter.setCurrentRow": ('int',), + "QCompleter.setFilterMode": ('PySide2.libpyside.MatchFlags',), + "QCompleter.setMaxVisibleItems": ('int',), + "QCompleter.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QCompleter.setModelSorting": ('PySide2.QtWidgets.QCompleter.ModelSorting',), + "QCompleter.setPopup": ('PySide2.QtWidgets.QAbstractItemView',), + "QCompleter.setWidget": ('PySide2.QtWidgets.QWidget',), + "QCompleter.setWrapAround": ('bool',), + "QCompleter.splitPath": ('str',), + "QCompleter.widget": (), + "QCompleter.wrapAround": (), + + # class PySide2.QtWidgets.QDataWidgetMapper: + "QDataWidgetMapper.__init__": ('PySide2.QtCore.QObject',), + "QDataWidgetMapper.addMapping": [('PySide2.QtWidgets.QWidget', 'int'), ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtCore.QByteArray')], + "QDataWidgetMapper.clearMapping": (), + "QDataWidgetMapper.currentIndex": (), + "QDataWidgetMapper.itemDelegate": (), + "QDataWidgetMapper.mappedPropertyName": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedSection": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedWidgetAt": ('int',), + "QDataWidgetMapper.model": (), + "QDataWidgetMapper.orientation": (), + "QDataWidgetMapper.removeMapping": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.revert": (), + "QDataWidgetMapper.rootIndex": (), + "QDataWidgetMapper.setCurrentIndex": ('int',), + "QDataWidgetMapper.setCurrentModelIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QDataWidgetMapper.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QDataWidgetMapper.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDataWidgetMapper.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setSubmitPolicy": ('PySide2.QtWidgets.QDataWidgetMapper.SubmitPolicy',), + "QDataWidgetMapper.submit": (), + "QDataWidgetMapper.submitPolicy": (), + "QDataWidgetMapper.toFirst": (), + "QDataWidgetMapper.toLast": (), + "QDataWidgetMapper.toNext": (), + "QDataWidgetMapper.toPrevious": (), + + # class PySide2.QtWidgets.QDateEdit: + "QDateEdit.__init__": [('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDateTimeEdit: + "QDateTimeEdit.__init__": [('Any', 'type', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDateTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QDateTimeEdit.calendarPopup": (), + "QDateTimeEdit.calendarWidget": (), + "QDateTimeEdit.clear": (), + "QDateTimeEdit.clearMaximumDate": (), + "QDateTimeEdit.clearMaximumDateTime": (), + "QDateTimeEdit.clearMaximumTime": (), + "QDateTimeEdit.clearMinimumDate": (), + "QDateTimeEdit.clearMinimumDateTime": (), + "QDateTimeEdit.clearMinimumTime": (), + "QDateTimeEdit.currentSection": (), + "QDateTimeEdit.currentSectionIndex": (), + "QDateTimeEdit.date": (), + "QDateTimeEdit.dateTime": (), + "QDateTimeEdit.dateTimeFromText": ('str',), + "QDateTimeEdit.displayFormat": (), + "QDateTimeEdit.displayedSections": (), + "QDateTimeEdit.event": ('PySide2.QtCore.QEvent',), + "QDateTimeEdit.fixup": ('str',), + "QDateTimeEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QDateTimeEdit.focusNextPrevChild": ('bool',), + "QDateTimeEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QDateTimeEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDateTimeEdit.maximumDate": (), + "QDateTimeEdit.maximumDateTime": (), + "QDateTimeEdit.maximumTime": (), + "QDateTimeEdit.minimumDate": (), + "QDateTimeEdit.minimumDateTime": (), + "QDateTimeEdit.minimumTime": (), + "QDateTimeEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDateTimeEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDateTimeEdit.sectionAt": ('int',), + "QDateTimeEdit.sectionCount": (), + "QDateTimeEdit.sectionText": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCalendarPopup": ('bool',), + "QDateTimeEdit.setCalendarWidget": ('PySide2.QtWidgets.QCalendarWidget',), + "QDateTimeEdit.setCurrentSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCurrentSectionIndex": ('int',), + "QDateTimeEdit.setDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QDateTimeEdit.setDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setDateTimeRange": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QDateTimeEdit.setDisplayFormat": ('str',), + "QDateTimeEdit.setMaximumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMaximumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMaximumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setMinimumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMinimumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMinimumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setSelectedSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setTimeRange": ('PySide2.QtCore.QTime', 'PySide2.QtCore.QTime'), + "QDateTimeEdit.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTimeEdit.sizeHint": (), + "QDateTimeEdit.stepBy": ('int',), + "QDateTimeEdit.stepEnabled": (), + "QDateTimeEdit.textFromDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.time": (), + "QDateTimeEdit.timeSpec": (), + "QDateTimeEdit.validate": ('str', 'int'), + "QDateTimeEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QDesktopWidget: + "QDesktopWidget.__init__": (), + "QDesktopWidget.availableGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.isVirtualDesktop": (), + "QDesktopWidget.numScreens": (), + "QDesktopWidget.primaryScreen": (), + "QDesktopWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDesktopWidget.screen": ('int',), + "QDesktopWidget.screenCount": (), + "QDesktopWidget.screenGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.screenNumber": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDial: + "QDial.__init__": ('PySide2.QtWidgets.QWidget',), + "QDial.event": ('PySide2.QtCore.QEvent',), + "QDial.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QDial.minimumSizeHint": (), + "QDial.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.notchSize": (), + "QDial.notchTarget": (), + "QDial.notchesVisible": (), + "QDial.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDial.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDial.setNotchTarget": ('float',), + "QDial.setNotchesVisible": ('bool',), + "QDial.setWrapping": ('bool',), + "QDial.sizeHint": (), + "QDial.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QDial.wrapping": (), + + # class PySide2.QtWidgets.QDialog: + "QDialog.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QDialog.accept": (), + "QDialog.adjustPosition": ('PySide2.QtWidgets.QWidget',), + "QDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDialog.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QDialog.done": ('int',), + "QDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QDialog.exec_": (), + "QDialog.extension": (), + "QDialog.isSizeGripEnabled": (), + "QDialog.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDialog.minimumSizeHint": (), + "QDialog.open": (), + "QDialog.orientation": (), + "QDialog.reject": (), + "QDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDialog.result": (), + "QDialog.setExtension": ('PySide2.QtWidgets.QWidget',), + "QDialog.setModal": ('bool',), + "QDialog.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialog.setResult": ('int',), + "QDialog.setSizeGripEnabled": ('bool',), + "QDialog.setVisible": ('bool',), + "QDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QDialog.showExtension": ('bool',), + "QDialog.sizeHint": (), + + # class PySide2.QtWidgets.QDialogButtonBox: + "QDialogButtonBox.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('PySide2.libpyside.StandardButtons', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QWidget')], + "QDialogButtonBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole'), ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), ('str', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole')], + "QDialogButtonBox.button": ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), + "QDialogButtonBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.buttons": (), + "QDialogButtonBox.centerButtons": (), + "QDialogButtonBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.clear": (), + "QDialogButtonBox.event": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.orientation": (), + "QDialogButtonBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.setCenterButtons": ('bool',), + "QDialogButtonBox.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialogButtonBox.setStandardButtons": ('PySide2.libpyside.StandardButtons',), + "QDialogButtonBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.standardButtons": (), + + # class PySide2.QtWidgets.QDirModel: + "QDirModel.__init__": [('List[str]', 'PySide2.libpyside.Filters', 'PySide2.libpyside.SortFlags', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QDirModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QDirModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QDirModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filter": (), + "QDirModel.flags": ('PySide2.QtCore.QModelIndex',), + "QDirModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QDirModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QDirModel.iconProvider": (), + "QDirModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QDirModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.isReadOnly": (), + "QDirModel.lazyChildCount": (), + "QDirModel.mimeData": ('List[int]',), + "QDirModel.mimeTypes": (), + "QDirModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QDirModel.nameFilters": (), + "QDirModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QDirModel.refresh": ('PySide2.QtCore.QModelIndex',), + "QDirModel.remove": ('PySide2.QtCore.QModelIndex',), + "QDirModel.resolveSymlinks": (), + "QDirModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QDirModel.setFilter": ('PySide2.libpyside.Filters',), + "QDirModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QDirModel.setLazyChildCount": ('bool',), + "QDirModel.setNameFilters": ('List[str]',), + "QDirModel.setReadOnly": ('bool',), + "QDirModel.setResolveSymlinks": ('bool',), + "QDirModel.setSorting": ('PySide2.libpyside.SortFlags',), + "QDirModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QDirModel.sorting": (), + "QDirModel.supportedDropActions": (), + + # class PySide2.QtWidgets.QDockWidget: + "QDockWidget.__init__": [('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QDockWidget.allowedAreas": (), + "QDockWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QDockWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDockWidget.event": ('PySide2.QtCore.QEvent',), + "QDockWidget.features": (), + "QDockWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionDockWidget',), + "QDockWidget.isAreaAllowed": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QDockWidget.isFloating": (), + "QDockWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDockWidget.setAllowedAreas": ('PySide2.libpyside.DockWidgetAreas',), + "QDockWidget.setFeatures": ('PySide2.libpyside.DockWidgetFeatures',), + "QDockWidget.setFloating": ('bool',), + "QDockWidget.setTitleBarWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.titleBarWidget": (), + "QDockWidget.toggleViewAction": (), + "QDockWidget.widget": (), + + # class PySide2.QtWidgets.QDoubleSpinBox: + "QDoubleSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QDoubleSpinBox.cleanText": (), + "QDoubleSpinBox.decimals": (), + "QDoubleSpinBox.fixup": ('str',), + "QDoubleSpinBox.maximum": (), + "QDoubleSpinBox.minimum": (), + "QDoubleSpinBox.prefix": (), + "QDoubleSpinBox.setDecimals": ('int',), + "QDoubleSpinBox.setMaximum": ('float',), + "QDoubleSpinBox.setMinimum": ('float',), + "QDoubleSpinBox.setPrefix": ('str',), + "QDoubleSpinBox.setRange": ('float', 'float'), + "QDoubleSpinBox.setSingleStep": ('float',), + "QDoubleSpinBox.setSuffix": ('str',), + "QDoubleSpinBox.setValue": ('float',), + "QDoubleSpinBox.singleStep": (), + "QDoubleSpinBox.suffix": (), + "QDoubleSpinBox.textFromValue": ('float',), + "QDoubleSpinBox.validate": ('str', 'int'), + "QDoubleSpinBox.value": (), + "QDoubleSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QErrorMessage: + "QErrorMessage.__init__": ('PySide2.QtWidgets.QWidget',), + "QErrorMessage.changeEvent": ('PySide2.QtCore.QEvent',), + "QErrorMessage.done": ('int',), + "QErrorMessage.qtHandler": (), + "QErrorMessage.showMessage": [('str',), ('str', 'str')], + + # class PySide2.QtWidgets.QFileDialog: + "QFileDialog.__init__": [('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str')], + "QFileDialog.accept": (), + "QFileDialog.acceptMode": (), + "QFileDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFileDialog.confirmOverwrite": (), + "QFileDialog.defaultSuffix": (), + "QFileDialog.directory": (), + "QFileDialog.directoryUrl": (), + "QFileDialog.done": ('int',), + "QFileDialog.fileMode": (), + "QFileDialog.filter": (), + "QFileDialog.getExistingDirectory": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.Options'), + "QFileDialog.getExistingDirectoryUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'PySide2.libpyside.Options', 'List[str]'), + "QFileDialog.getOpenFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'PySide2.libpyside.Options'), + "QFileDialog.getOpenFileNames": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'PySide2.libpyside.Options'), + "QFileDialog.getOpenFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'PySide2.libpyside.Options', 'List[str]'), + "QFileDialog.getOpenFileUrls": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'PySide2.libpyside.Options', 'List[str]'), + "QFileDialog.getSaveFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'PySide2.libpyside.Options'), + "QFileDialog.getSaveFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'PySide2.libpyside.Options', 'List[str]'), + "QFileDialog.history": (), + "QFileDialog.iconProvider": (), + "QFileDialog.isNameFilterDetailsVisible": (), + "QFileDialog.isReadOnly": (), + "QFileDialog.itemDelegate": (), + "QFileDialog.labelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel',), + "QFileDialog.mimeTypeFilters": (), + "QFileDialog.nameFilters": (), + "QFileDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFileDialog.options": (), + "QFileDialog.proxyModel": (), + "QFileDialog.resolveSymlinks": (), + "QFileDialog.restoreState": ('PySide2.QtCore.QByteArray',), + "QFileDialog.saveState": (), + "QFileDialog.selectFile": ('str',), + "QFileDialog.selectMimeTypeFilter": ('str',), + "QFileDialog.selectNameFilter": ('str',), + "QFileDialog.selectUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.selectedFiles": (), + "QFileDialog.selectedMimeTypeFilter": (), + "QFileDialog.selectedNameFilter": (), + "QFileDialog.selectedUrls": (), + "QFileDialog.setAcceptMode": ('PySide2.QtWidgets.QFileDialog.AcceptMode',), + "QFileDialog.setConfirmOverwrite": ('bool',), + "QFileDialog.setDefaultSuffix": ('str',), + "QFileDialog.setDirectory": [('PySide2.QtCore.QDir',), ('str',)], + "QFileDialog.setDirectoryUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.setFileMode": ('PySide2.QtWidgets.QFileDialog.FileMode',), + "QFileDialog.setFilter": ('PySide2.libpyside.Filters',), + "QFileDialog.setHistory": ('List[str]',), + "QFileDialog.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileDialog.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QFileDialog.setLabelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel', 'str'), + "QFileDialog.setMimeTypeFilters": ('List[str]',), + "QFileDialog.setNameFilter": ('str',), + "QFileDialog.setNameFilterDetailsVisible": ('bool',), + "QFileDialog.setNameFilters": ('List[str]',), + "QFileDialog.setOption": ('PySide2.QtWidgets.QFileDialog.Option', 'bool'), + "QFileDialog.setOptions": ('PySide2.libpyside.Options',), + "QFileDialog.setProxyModel": ('PySide2.QtCore.QAbstractProxyModel',), + "QFileDialog.setReadOnly": ('bool',), + "QFileDialog.setResolveSymlinks": ('bool',), + "QFileDialog.setSidebarUrls": ('list',), + "QFileDialog.setSupportedSchemes": ('List[str]',), + "QFileDialog.setViewMode": ('PySide2.QtWidgets.QFileDialog.ViewMode',), + "QFileDialog.setVisible": ('bool',), + "QFileDialog.sidebarUrls": (), + "QFileDialog.supportedSchemes": (), + "QFileDialog.testOption": ('PySide2.QtWidgets.QFileDialog.Option',), + "QFileDialog.viewMode": (), + + # class PySide2.QtWidgets.QFileIconProvider: + "QFileIconProvider.__init__": (), + "QFileIconProvider.icon": [('PySide2.QtCore.QFileInfo',), ('PySide2.QtWidgets.QFileIconProvider.IconType',)], + "QFileIconProvider.options": (), + "QFileIconProvider.setOptions": ('PySide2.libpyside.Options',), + "QFileIconProvider.type": ('PySide2.QtCore.QFileInfo',), + + # class PySide2.QtWidgets.QFileSystemModel: + "QFileSystemModel.__init__": ('PySide2.QtCore.QObject',), + "QFileSystemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QFileSystemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.event": ('PySide2.QtCore.QEvent',), + "QFileSystemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filter": (), + "QFileSystemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QFileSystemModel.iconProvider": (), + "QFileSystemModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QFileSystemModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.isReadOnly": (), + "QFileSystemModel.lastModified": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.mimeData": ('List[int]',), + "QFileSystemModel.mimeTypes": (), + "QFileSystemModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QFileSystemModel.myComputer": ('int',), + "QFileSystemModel.nameFilterDisables": (), + "QFileSystemModel.nameFilters": (), + "QFileSystemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QFileSystemModel.remove": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.resolveSymlinks": (), + "QFileSystemModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.rootDirectory": (), + "QFileSystemModel.rootPath": (), + "QFileSystemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QFileSystemModel.setFilter": ('PySide2.libpyside.Filters',), + "QFileSystemModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileSystemModel.setNameFilterDisables": ('bool',), + "QFileSystemModel.setNameFilters": ('List[str]',), + "QFileSystemModel.setReadOnly": ('bool',), + "QFileSystemModel.setResolveSymlinks": ('bool',), + "QFileSystemModel.setRootPath": ('str',), + "QFileSystemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.size": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QFileSystemModel.supportedDropActions": (), + "QFileSystemModel.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QFileSystemModel.type": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtWidgets.QFocusFrame: + "QFocusFrame.__init__": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.event": ('PySide2.QtCore.QEvent',), + "QFocusFrame.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFocusFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QFocusFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFocusFrame.setWidget": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.widget": (), + + # class PySide2.QtWidgets.QFontComboBox: + "QFontComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QFontComboBox.currentFont": (), + "QFontComboBox.event": ('PySide2.QtCore.QEvent',), + "QFontComboBox.fontFilters": (), + "QFontComboBox.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontComboBox.setFontFilters": ('PySide2.libpyside.FontFilters',), + "QFontComboBox.setWritingSystem": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontComboBox.sizeHint": (), + "QFontComboBox.writingSystem": (), + + # class PySide2.QtWidgets.QFontDialog: + "QFontDialog.__init__": [('PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QFontDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFontDialog.currentFont": (), + "QFontDialog.done": ('int',), + "QFontDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFontDialog.getFont": [('bool', 'PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget', 'str', 'PySide2.libpyside.FontDialogOptions'), ('bool', 'PySide2.QtWidgets.QWidget')], + "QFontDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFontDialog.options": (), + "QFontDialog.selectedFont": (), + "QFontDialog.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontDialog.setOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption', 'bool'), + "QFontDialog.setOptions": ('PySide2.libpyside.FontDialogOptions',), + "QFontDialog.setVisible": ('bool',), + "QFontDialog.testOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption',), + + # class PySide2.QtWidgets.QFormLayout: + "QFormLayout.__init__": ('PySide2.QtWidgets.QWidget',), + "QFormLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QFormLayout.addRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QLayout'), ('str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.count": (), + "QFormLayout.expandingDirections": (), + "QFormLayout.fieldGrowthPolicy": (), + "QFormLayout.formAlignment": (), + "QFormLayout.getItemPosition": ('int', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getLayoutPosition": ('PySide2.QtWidgets.QLayout', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getWidgetPosition": ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.hasHeightForWidth": (), + "QFormLayout.heightForWidth": ('int',), + "QFormLayout.horizontalSpacing": (), + "QFormLayout.insertRow": [('int', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('int', 'str', 'PySide2.QtWidgets.QLayout'), ('int', 'str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.invalidate": (), + "QFormLayout.itemAt": [('int',), ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole')], + "QFormLayout.labelAlignment": (), + "QFormLayout.labelForField": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QFormLayout.minimumSize": (), + "QFormLayout.removeRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QFormLayout.rowCount": (), + "QFormLayout.rowWrapPolicy": (), + "QFormLayout.setFieldGrowthPolicy": ('PySide2.QtWidgets.QFormLayout.FieldGrowthPolicy',), + "QFormLayout.setFormAlignment": ('PySide2.libpyside.Alignment',), + "QFormLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QFormLayout.setHorizontalSpacing": ('int',), + "QFormLayout.setItem": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayoutItem'), + "QFormLayout.setLabelAlignment": ('PySide2.libpyside.Alignment',), + "QFormLayout.setLayout": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayout'), + "QFormLayout.setRowWrapPolicy": ('PySide2.QtWidgets.QFormLayout.RowWrapPolicy',), + "QFormLayout.setSpacing": ('int',), + "QFormLayout.setVerticalSpacing": ('int',), + "QFormLayout.setWidget": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QWidget'), + "QFormLayout.sizeHint": (), + "QFormLayout.spacing": (), + "QFormLayout.takeAt": ('int',), + "QFormLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QFrame: + "QFrame.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QFrame.changeEvent": ('PySide2.QtCore.QEvent',), + "QFrame.drawFrame": ('PySide2.QtGui.QPainter',), + "QFrame.event": ('PySide2.QtCore.QEvent',), + "QFrame.frameRect": (), + "QFrame.frameShadow": (), + "QFrame.frameShape": (), + "QFrame.frameStyle": (), + "QFrame.frameWidth": (), + "QFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QFrame.lineWidth": (), + "QFrame.midLineWidth": (), + "QFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFrame.setFrameRect": ('PySide2.QtCore.QRect',), + "QFrame.setFrameShadow": ('PySide2.QtWidgets.QFrame.Shadow',), + "QFrame.setFrameShape": ('PySide2.QtWidgets.QFrame.Shape',), + "QFrame.setFrameStyle": ('int',), + "QFrame.setLineWidth": ('int',), + "QFrame.setMidLineWidth": ('int',), + "QFrame.sizeHint": (), + + # class PySide2.QtWidgets.QGesture: + "QGesture.__init__": ('PySide2.QtCore.QObject',), + "QGesture.gestureCancelPolicy": (), + "QGesture.gestureType": (), + "QGesture.hasHotSpot": (), + "QGesture.hotSpot": (), + "QGesture.setGestureCancelPolicy": ('PySide2.QtWidgets.QGesture.GestureCancelPolicy',), + "QGesture.setHotSpot": ('PySide2.QtCore.QPointF',), + "QGesture.state": (), + "QGesture.unsetHotSpot": (), + + # class PySide2.QtWidgets.QGestureEvent: + "QGestureEvent.__init__": ('list',), + "QGestureEvent.accept": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.activeGestures": (), + "QGestureEvent.canceledGestures": (), + "QGestureEvent.gesture": ('PySide2.QtCore.Qt.GestureType',), + "QGestureEvent.gestures": (), + "QGestureEvent.ignore": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.isAccepted": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.mapToGraphicsScene": ('PySide2.QtCore.QPointF',), + "QGestureEvent.setAccepted": [('PySide2.QtCore.Qt.GestureType', 'bool'), ('PySide2.QtWidgets.QGesture', 'bool'), ('bool',)], + "QGestureEvent.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGestureEvent.widget": (), + + # class PySide2.QtWidgets.QGestureRecognizer: + "QGestureRecognizer.__init__": (), + "QGestureRecognizer.create": ('PySide2.QtCore.QObject',), + "QGestureRecognizer.recognize": ('PySide2.QtWidgets.QGesture', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGestureRecognizer.registerRecognizer": ('PySide2.QtWidgets.QGestureRecognizer',), + "QGestureRecognizer.reset": ('PySide2.QtWidgets.QGesture',), + "QGestureRecognizer.unregisterRecognizer": ('PySide2.QtCore.Qt.GestureType',), + + # class PySide2.QtWidgets.QGraphicsAnchor: + "QGraphicsAnchor.setSizePolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QGraphicsAnchor.setSpacing": ('float',), + "QGraphicsAnchor.sizePolicy": (), + "QGraphicsAnchor.spacing": (), + "QGraphicsAnchor.unsetSpacing": (), + + # class PySide2.QtWidgets.QGraphicsAnchorLayout: + "QGraphicsAnchorLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsAnchorLayout.addAnchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.addAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.libpyside.Orientations'), + "QGraphicsAnchorLayout.addCornerAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner'), + "QGraphicsAnchorLayout.anchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.count": (), + "QGraphicsAnchorLayout.horizontalSpacing": (), + "QGraphicsAnchorLayout.invalidate": (), + "QGraphicsAnchorLayout.itemAt": ('int',), + "QGraphicsAnchorLayout.removeAt": ('int',), + "QGraphicsAnchorLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsAnchorLayout.setHorizontalSpacing": ('float',), + "QGraphicsAnchorLayout.setSpacing": ('float',), + "QGraphicsAnchorLayout.setVerticalSpacing": ('float',), + "QGraphicsAnchorLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsAnchorLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsBlurEffect: + "QGraphicsBlurEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsBlurEffect.blurHints": (), + "QGraphicsBlurEffect.blurRadius": (), + "QGraphicsBlurEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsBlurEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsBlurEffect.setBlurHints": ('PySide2.libpyside.BlurHints',), + "QGraphicsBlurEffect.setBlurRadius": ('float',), + + # class PySide2.QtWidgets.QGraphicsColorizeEffect: + "QGraphicsColorizeEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsColorizeEffect.color": (), + "QGraphicsColorizeEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsColorizeEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsColorizeEffect.setStrength": ('float',), + "QGraphicsColorizeEffect.strength": (), + + # class PySide2.QtWidgets.QGraphicsDropShadowEffect: + "QGraphicsDropShadowEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsDropShadowEffect.blurRadius": (), + "QGraphicsDropShadowEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsDropShadowEffect.color": (), + "QGraphicsDropShadowEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsDropShadowEffect.offset": (), + "QGraphicsDropShadowEffect.setBlurRadius": ('float',), + "QGraphicsDropShadowEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsDropShadowEffect.setOffset": [('PySide2.QtCore.QPointF',), ('float',), ('float', 'float')], + "QGraphicsDropShadowEffect.setXOffset": ('float',), + "QGraphicsDropShadowEffect.setYOffset": ('float',), + "QGraphicsDropShadowEffect.xOffset": (), + "QGraphicsDropShadowEffect.yOffset": (), + + # class PySide2.QtWidgets.QGraphicsEffect: + "QGraphicsEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsEffect.boundingRect": (), + "QGraphicsEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.drawSource": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.isEnabled": (), + "QGraphicsEffect.setEnabled": ('bool',), + "QGraphicsEffect.sourceBoundingRect": ('PySide2.QtCore.Qt.CoordinateSystem',), + "QGraphicsEffect.sourceChanged": ('PySide2.libpyside.ChangeFlags',), + "QGraphicsEffect.sourceIsPixmap": (), + "QGraphicsEffect.sourcePixmap": ('PySide2.QtCore.Qt.CoordinateSystem', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QGraphicsEffect.PixmapPadMode'), + "QGraphicsEffect.update": (), + "QGraphicsEffect.updateBoundingRect": (), + + # class PySide2.QtWidgets.QGraphicsEllipseItem: + "QGraphicsEllipseItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsEllipseItem.boundingRect": (), + "QGraphicsEllipseItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsEllipseItem.extension": ('Any',), + "QGraphicsEllipseItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsEllipseItem.opaqueArea": (), + "QGraphicsEllipseItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsEllipseItem.rect": (), + "QGraphicsEllipseItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsEllipseItem.setSpanAngle": ('int',), + "QGraphicsEllipseItem.setStartAngle": ('int',), + "QGraphicsEllipseItem.shape": (), + "QGraphicsEllipseItem.spanAngle": (), + "QGraphicsEllipseItem.startAngle": (), + "QGraphicsEllipseItem.type": (), + + # class PySide2.QtWidgets.QGraphicsGridLayout: + "QGraphicsGridLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.addItem": [('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'PySide2.libpyside.Alignment'), ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment')], + "QGraphicsGridLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.columnAlignment": ('int',), + "QGraphicsGridLayout.columnCount": (), + "QGraphicsGridLayout.columnMaximumWidth": ('int',), + "QGraphicsGridLayout.columnMinimumWidth": ('int',), + "QGraphicsGridLayout.columnPreferredWidth": ('int',), + "QGraphicsGridLayout.columnSpacing": ('int',), + "QGraphicsGridLayout.columnStretchFactor": ('int',), + "QGraphicsGridLayout.count": (), + "QGraphicsGridLayout.horizontalSpacing": (), + "QGraphicsGridLayout.invalidate": (), + "QGraphicsGridLayout.itemAt": [('int',), ('int', 'int')], + "QGraphicsGridLayout.removeAt": ('int',), + "QGraphicsGridLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.rowAlignment": ('int',), + "QGraphicsGridLayout.rowCount": (), + "QGraphicsGridLayout.rowMaximumHeight": ('int',), + "QGraphicsGridLayout.rowMinimumHeight": ('int',), + "QGraphicsGridLayout.rowPreferredHeight": ('int',), + "QGraphicsGridLayout.rowSpacing": ('int',), + "QGraphicsGridLayout.rowStretchFactor": ('int',), + "QGraphicsGridLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.libpyside.Alignment'), + "QGraphicsGridLayout.setColumnAlignment": ('int', 'PySide2.libpyside.Alignment'), + "QGraphicsGridLayout.setColumnFixedWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMaximumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMinimumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnPreferredWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnSpacing": ('int', 'float'), + "QGraphicsGridLayout.setColumnStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsGridLayout.setHorizontalSpacing": ('float',), + "QGraphicsGridLayout.setRowAlignment": ('int', 'PySide2.libpyside.Alignment'), + "QGraphicsGridLayout.setRowFixedHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMaximumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMinimumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowPreferredHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowSpacing": ('int', 'float'), + "QGraphicsGridLayout.setRowStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setSpacing": ('float',), + "QGraphicsGridLayout.setVerticalSpacing": ('float',), + "QGraphicsGridLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsItem: + "QGraphicsItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.acceptDrops": (), + "QGraphicsItem.acceptHoverEvents": (), + "QGraphicsItem.acceptTouchEvents": (), + "QGraphicsItem.acceptedMouseButtons": (), + "QGraphicsItem.addToIndex": (), + "QGraphicsItem.advance": ('int',), + "QGraphicsItem.boundingRect": (), + "QGraphicsItem.boundingRegion": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.boundingRegionGranularity": (), + "QGraphicsItem.cacheMode": (), + "QGraphicsItem.childItems": (), + "QGraphicsItem.childrenBoundingRect": (), + "QGraphicsItem.clearFocus": (), + "QGraphicsItem.clipPath": (), + "QGraphicsItem.collidesWithItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidesWithPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidingItems": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsItem.commonAncestorItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsItem.cursor": (), + "QGraphicsItem.data": ('int',), + "QGraphicsItem.deviceTransform": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.effectiveOpacity": (), + "QGraphicsItem.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsItem.extension": ('Any',), + "QGraphicsItem.filtersChildEvents": (), + "QGraphicsItem.flags": (), + "QGraphicsItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusItem": (), + "QGraphicsItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusProxy": (), + "QGraphicsItem.focusScopeItem": (), + "QGraphicsItem.grabKeyboard": (), + "QGraphicsItem.grabMouse": (), + "QGraphicsItem.graphicsEffect": (), + "QGraphicsItem.group": (), + "QGraphicsItem.handlesChildEvents": (), + "QGraphicsItem.hasCursor": (), + "QGraphicsItem.hasFocus": (), + "QGraphicsItem.hide": (), + "QGraphicsItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsItem.inputMethodHints": (), + "QGraphicsItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsItem.installSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isActive": (), + "QGraphicsItem.isAncestorOf": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isBlockedByModalPanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isClipped": (), + "QGraphicsItem.isEnabled": (), + "QGraphicsItem.isObscured": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isPanel": (), + "QGraphicsItem.isSelected": (), + "QGraphicsItem.isUnderMouse": (), + "QGraphicsItem.isVisible": (), + "QGraphicsItem.isVisibleTo": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isWidget": (), + "QGraphicsItem.isWindow": (), + "QGraphicsItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsItem.itemTransform": ('PySide2.QtWidgets.QGraphicsItem', 'bool'), + "QGraphicsItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.mapFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapToParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.matrix": (), + "QGraphicsItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.moveBy": ('float', 'float'), + "QGraphicsItem.opacity": (), + "QGraphicsItem.opaqueArea": (), + "QGraphicsItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItem.panel": (), + "QGraphicsItem.panelModality": (), + "QGraphicsItem.parentItem": (), + "QGraphicsItem.parentObject": (), + "QGraphicsItem.parentWidget": (), + "QGraphicsItem.pos": (), + "QGraphicsItem.prepareGeometryChange": (), + "QGraphicsItem.removeFromIndex": (), + "QGraphicsItem.removeSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.resetMatrix": (), + "QGraphicsItem.resetTransform": (), + "QGraphicsItem.rotation": (), + "QGraphicsItem.scale": (), + "QGraphicsItem.scene": (), + "QGraphicsItem.sceneBoundingRect": (), + "QGraphicsItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsItem.sceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsItem.sceneMatrix": (), + "QGraphicsItem.scenePos": (), + "QGraphicsItem.sceneTransform": (), + "QGraphicsItem.scroll": ('float', 'float', 'PySide2.QtCore.QRectF'), + "QGraphicsItem.setAcceptDrops": ('bool',), + "QGraphicsItem.setAcceptHoverEvents": ('bool',), + "QGraphicsItem.setAcceptTouchEvents": ('bool',), + "QGraphicsItem.setAcceptedMouseButtons": ('PySide2.libpyside.MouseButtons',), + "QGraphicsItem.setActive": ('bool',), + "QGraphicsItem.setBoundingRegionGranularity": ('float',), + "QGraphicsItem.setCacheMode": ('PySide2.QtWidgets.QGraphicsItem.CacheMode', 'PySide2.QtCore.QSize'), + "QGraphicsItem.setCursor": ('PySide2.QtGui.QCursor',), + "QGraphicsItem.setData": ('int', 'Any'), + "QGraphicsItem.setEnabled": ('bool',), + "QGraphicsItem.setFiltersChildEvents": ('bool',), + "QGraphicsItem.setFlag": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemFlag', 'bool'), + "QGraphicsItem.setFlags": ('PySide2.libpyside.GraphicsItemFlags',), + "QGraphicsItem.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsItem.setFocusProxy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QGraphicsItem.setGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsItem.setHandlesChildEvents": ('bool',), + "QGraphicsItem.setInputMethodHints": ('PySide2.libpyside.InputMethodHints',), + "QGraphicsItem.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsItem.setOpacity": ('float',), + "QGraphicsItem.setPanelModality": ('PySide2.QtWidgets.QGraphicsItem.PanelModality',), + "QGraphicsItem.setParentItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setPos": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setRotation": ('float',), + "QGraphicsItem.setScale": ('float',), + "QGraphicsItem.setSelected": ('bool',), + "QGraphicsItem.setToolTip": ('str',), + "QGraphicsItem.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsItem.setTransformOriginPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setTransformations": ('list',), + "QGraphicsItem.setVisible": ('bool',), + "QGraphicsItem.setX": ('float',), + "QGraphicsItem.setY": ('float',), + "QGraphicsItem.setZValue": ('float',), + "QGraphicsItem.shape": (), + "QGraphicsItem.show": (), + "QGraphicsItem.stackBefore": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.toGraphicsObject": (), + "QGraphicsItem.toolTip": (), + "QGraphicsItem.topLevelItem": (), + "QGraphicsItem.topLevelWidget": (), + "QGraphicsItem.transform": (), + "QGraphicsItem.transformOriginPoint": (), + "QGraphicsItem.transformations": (), + "QGraphicsItem.type": (), + "QGraphicsItem.ungrabKeyboard": (), + "QGraphicsItem.ungrabMouse": (), + "QGraphicsItem.unsetCursor": (), + "QGraphicsItem.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.updateMicroFocus": (), + "QGraphicsItem.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsItem.window": (), + "QGraphicsItem.x": (), + "QGraphicsItem.y": (), + "QGraphicsItem.zValue": (), + + # class PySide2.QtWidgets.QGraphicsItemAnimation: + "QGraphicsItemAnimation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsItemAnimation.afterAnimationStep": ('float',), + "QGraphicsItemAnimation.beforeAnimationStep": ('float',), + "QGraphicsItemAnimation.clear": (), + "QGraphicsItemAnimation.horizontalScaleAt": ('float',), + "QGraphicsItemAnimation.horizontalShearAt": ('float',), + "QGraphicsItemAnimation.item": (), + "QGraphicsItemAnimation.matrixAt": ('float',), + "QGraphicsItemAnimation.posAt": ('float',), + "QGraphicsItemAnimation.posList": (), + "QGraphicsItemAnimation.reset": (), + "QGraphicsItemAnimation.rotationAt": ('float',), + "QGraphicsItemAnimation.rotationList": (), + "QGraphicsItemAnimation.scaleList": (), + "QGraphicsItemAnimation.setItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemAnimation.setPosAt": ('float', 'PySide2.QtCore.QPointF'), + "QGraphicsItemAnimation.setRotationAt": ('float', 'float'), + "QGraphicsItemAnimation.setScaleAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setShearAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setStep": ('float',), + "QGraphicsItemAnimation.setTimeLine": ('PySide2.QtCore.QTimeLine',), + "QGraphicsItemAnimation.setTranslationAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.shearList": (), + "QGraphicsItemAnimation.timeLine": (), + "QGraphicsItemAnimation.translationList": (), + "QGraphicsItemAnimation.verticalScaleAt": ('float',), + "QGraphicsItemAnimation.verticalShearAt": ('float',), + "QGraphicsItemAnimation.xTranslationAt": ('float',), + "QGraphicsItemAnimation.yTranslationAt": ('float',), + + # class PySide2.QtWidgets.QGraphicsItemGroup: + "QGraphicsItemGroup.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.addToGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.boundingRect": (), + "QGraphicsItemGroup.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.opaqueArea": (), + "QGraphicsItemGroup.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItemGroup.removeFromGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.type": (), + + # class PySide2.QtWidgets.QGraphicsLayout: + "QGraphicsLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.activate": (), + "QGraphicsLayout.addChildLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.count": (), + "QGraphicsLayout.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.instantInvalidatePropagation": (), + "QGraphicsLayout.invalidate": (), + "QGraphicsLayout.isActivated": (), + "QGraphicsLayout.itemAt": ('int',), + "QGraphicsLayout.removeAt": ('int',), + "QGraphicsLayout.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.setInstantInvalidatePropagation": ('bool',), + "QGraphicsLayout.updateGeometry": (), + "QGraphicsLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QGraphicsLayoutItem: + "QGraphicsLayoutItem.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'bool'), + "QGraphicsLayoutItem.contentsRect": (), + "QGraphicsLayoutItem.effectiveSizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.geometry": (), + "QGraphicsLayoutItem.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayoutItem.graphicsItem": (), + "QGraphicsLayoutItem.isLayout": (), + "QGraphicsLayoutItem.maximumHeight": (), + "QGraphicsLayoutItem.maximumSize": (), + "QGraphicsLayoutItem.maximumWidth": (), + "QGraphicsLayoutItem.minimumHeight": (), + "QGraphicsLayoutItem.minimumSize": (), + "QGraphicsLayoutItem.minimumWidth": (), + "QGraphicsLayoutItem.ownedByLayout": (), + "QGraphicsLayoutItem.parentLayoutItem": (), + "QGraphicsLayoutItem.preferredHeight": (), + "QGraphicsLayoutItem.preferredSize": (), + "QGraphicsLayoutItem.preferredWidth": (), + "QGraphicsLayoutItem.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLayoutItem.setGraphicsItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLayoutItem.setMaximumHeight": ('float',), + "QGraphicsLayoutItem.setMaximumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMaximumWidth": ('float',), + "QGraphicsLayoutItem.setMinimumHeight": ('float',), + "QGraphicsLayoutItem.setMinimumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMinimumWidth": ('float',), + "QGraphicsLayoutItem.setOwnedByLayout": ('bool',), + "QGraphicsLayoutItem.setParentLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayoutItem.setPreferredHeight": ('float',), + "QGraphicsLayoutItem.setPreferredSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setPreferredWidth": ('float',), + "QGraphicsLayoutItem.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QGraphicsLayoutItem.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.sizePolicy": (), + "QGraphicsLayoutItem.updateGeometry": (), + + # class PySide2.QtWidgets.QGraphicsLineItem: + "QGraphicsLineItem.__init__": [('PySide2.QtCore.QLineF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsLineItem.boundingRect": (), + "QGraphicsLineItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsLineItem.extension": ('Any',), + "QGraphicsLineItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLineItem.line": (), + "QGraphicsLineItem.opaqueArea": (), + "QGraphicsLineItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsLineItem.pen": (), + "QGraphicsLineItem.setLine": [('PySide2.QtCore.QLineF',), ('float', 'float', 'float', 'float')], + "QGraphicsLineItem.setPen": ('PySide2.QtGui.QPen',), + "QGraphicsLineItem.shape": (), + "QGraphicsLineItem.type": (), + + # class PySide2.QtWidgets.QGraphicsLinearLayout: + "QGraphicsLinearLayout.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QGraphicsLayoutItem'), ('PySide2.QtWidgets.QGraphicsLayoutItem',)], + "QGraphicsLinearLayout.addItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.addStretch": ('int',), + "QGraphicsLinearLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.count": (), + "QGraphicsLinearLayout.dump": ('int',), + "QGraphicsLinearLayout.insertItem": ('int', 'PySide2.QtWidgets.QGraphicsLayoutItem'), + "QGraphicsLinearLayout.insertStretch": ('int', 'int'), + "QGraphicsLinearLayout.invalidate": (), + "QGraphicsLinearLayout.itemAt": ('int',), + "QGraphicsLinearLayout.itemSpacing": ('int',), + "QGraphicsLinearLayout.orientation": (), + "QGraphicsLinearLayout.removeAt": ('int',), + "QGraphicsLinearLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.libpyside.Alignment'), + "QGraphicsLinearLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLinearLayout.setItemSpacing": ('int', 'float'), + "QGraphicsLinearLayout.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsLinearLayout.setSpacing": ('float',), + "QGraphicsLinearLayout.setStretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int'), + "QGraphicsLinearLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLinearLayout.spacing": (), + "QGraphicsLinearLayout.stretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + + # class PySide2.QtWidgets.QGraphicsObject: + "QGraphicsObject.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsObject.event": ('PySide2.QtCore.QEvent',), + "QGraphicsObject.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'PySide2.libpyside.GestureFlags'), + "QGraphicsObject.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QGraphicsObject.updateMicroFocus": (), + + # class PySide2.QtWidgets.QGraphicsOpacityEffect: + "QGraphicsOpacityEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsOpacityEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsOpacityEffect.opacity": (), + "QGraphicsOpacityEffect.opacityMask": (), + "QGraphicsOpacityEffect.setOpacity": ('float',), + "QGraphicsOpacityEffect.setOpacityMask": ('PySide2.QtGui.QBrush',), + + # class PySide2.QtWidgets.QGraphicsPathItem: + "QGraphicsPathItem.__init__": [('PySide2.QtGui.QPainterPath', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPathItem.boundingRect": (), + "QGraphicsPathItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPathItem.extension": ('Any',), + "QGraphicsPathItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPathItem.opaqueArea": (), + "QGraphicsPathItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPathItem.path": (), + "QGraphicsPathItem.setPath": ('PySide2.QtGui.QPainterPath',), + "QGraphicsPathItem.shape": (), + "QGraphicsPathItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPixmapItem: + "QGraphicsPixmapItem.__init__": [('PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPixmapItem.boundingRect": (), + "QGraphicsPixmapItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPixmapItem.extension": ('Any',), + "QGraphicsPixmapItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPixmapItem.offset": (), + "QGraphicsPixmapItem.opaqueArea": (), + "QGraphicsPixmapItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPixmapItem.pixmap": (), + "QGraphicsPixmapItem.setOffset": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsPixmapItem.setPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsPixmapItem.setShapeMode": ('PySide2.QtWidgets.QGraphicsPixmapItem.ShapeMode',), + "QGraphicsPixmapItem.setTransformationMode": ('PySide2.QtCore.Qt.TransformationMode',), + "QGraphicsPixmapItem.shape": (), + "QGraphicsPixmapItem.shapeMode": (), + "QGraphicsPixmapItem.transformationMode": (), + "QGraphicsPixmapItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPolygonItem: + "QGraphicsPolygonItem.__init__": [('PySide2.QtGui.QPolygonF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPolygonItem.boundingRect": (), + "QGraphicsPolygonItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPolygonItem.extension": ('Any',), + "QGraphicsPolygonItem.fillRule": (), + "QGraphicsPolygonItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPolygonItem.opaqueArea": (), + "QGraphicsPolygonItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPolygonItem.polygon": (), + "QGraphicsPolygonItem.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QGraphicsPolygonItem.setPolygon": ('PySide2.QtGui.QPolygonF',), + "QGraphicsPolygonItem.shape": (), + "QGraphicsPolygonItem.type": (), + + # class PySide2.QtWidgets.QGraphicsProxyWidget: + "QGraphicsProxyWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.libpyside.WindowFlags'), + "QGraphicsProxyWidget.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsProxyWidget.createProxyForChildWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsProxyWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.focusNextPrevChild": ('bool',), + "QGraphicsProxyWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsProxyWidget.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsProxyWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsProxyWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsProxyWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.newProxyWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsProxyWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsProxyWidget.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsProxyWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsProxyWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsProxyWidget.subWidgetRect": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.type": (), + "QGraphicsProxyWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsProxyWidget.widget": (), + + # class PySide2.QtWidgets.QGraphicsRectItem: + "QGraphicsRectItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsRectItem.boundingRect": (), + "QGraphicsRectItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsRectItem.extension": ('Any',), + "QGraphicsRectItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsRectItem.opaqueArea": (), + "QGraphicsRectItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsRectItem.rect": (), + "QGraphicsRectItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsRectItem.shape": (), + "QGraphicsRectItem.type": (), + + # class PySide2.QtWidgets.QGraphicsRotation: + "QGraphicsRotation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsRotation.angle": (), + "QGraphicsRotation.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsRotation.axis": (), + "QGraphicsRotation.origin": (), + "QGraphicsRotation.setAngle": ('float',), + "QGraphicsRotation.setAxis": [('PySide2.QtCore.Qt.Axis',), ('PySide2.QtGui.QVector3D',)], + "QGraphicsRotation.setOrigin": ('PySide2.QtGui.QVector3D',), + + # class PySide2.QtWidgets.QGraphicsScale: + "QGraphicsScale.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsScale.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsScale.origin": (), + "QGraphicsScale.setOrigin": ('PySide2.QtGui.QVector3D',), + "QGraphicsScale.setXScale": ('float',), + "QGraphicsScale.setYScale": ('float',), + "QGraphicsScale.setZScale": ('float',), + "QGraphicsScale.xScale": (), + "QGraphicsScale.yScale": (), + "QGraphicsScale.zScale": (), + + # class PySide2.QtWidgets.QGraphicsScene: + "QGraphicsScene.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QObject'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.QObject')], + "QGraphicsScene.activePanel": (), + "QGraphicsScene.activeWindow": (), + "QGraphicsScene.addEllipse": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.addLine": [('PySide2.QtCore.QLineF', 'PySide2.QtGui.QPen'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen')], + "QGraphicsScene.addPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsScene.addPolygon": ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addRect": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addSimpleText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QGraphicsScene.advance": (), + "QGraphicsScene.backgroundBrush": (), + "QGraphicsScene.bspTreeDepth": (), + "QGraphicsScene.clear": (), + "QGraphicsScene.clearFocus": (), + "QGraphicsScene.clearSelection": (), + "QGraphicsScene.collidingItems": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsScene.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsScene.createItemGroup": ('list',), + "QGraphicsScene.destroyItemGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsScene.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.event": ('PySide2.QtCore.QEvent',), + "QGraphicsScene.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.focusItem": (), + "QGraphicsScene.focusNextPrevChild": ('bool',), + "QGraphicsScene.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.font": (), + "QGraphicsScene.foregroundBrush": (), + "QGraphicsScene.hasFocus": (), + "QGraphicsScene.height": (), + "QGraphicsScene.helpEvent": ('PySide2.QtWidgets.QGraphicsSceneHelpEvent',), + "QGraphicsScene.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsScene.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsScene.invalidate": [('PySide2.QtCore.QRectF', 'PySide2.libpyside.SceneLayers'), ('float', 'float', 'float', 'float', 'PySide2.libpyside.SceneLayers')], + "QGraphicsScene.isActive": (), + "QGraphicsScene.isSortCacheEnabled": (), + "QGraphicsScene.itemAt": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTransform'), ('float', 'float', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemIndexMethod": (), + "QGraphicsScene.items": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemsBoundingRect": (), + "QGraphicsScene.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.minimumRenderSize": (), + "QGraphicsScene.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseGrabberItem": (), + "QGraphicsScene.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.palette": (), + "QGraphicsScene.removeItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.render": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), + "QGraphicsScene.sceneRect": (), + "QGraphicsScene.selectedItems": (), + "QGraphicsScene.selectionArea": (), + "QGraphicsScene.sendEvent": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.setActivePanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.setActiveWindow": ('PySide2.QtWidgets.QGraphicsWidget',), + "QGraphicsScene.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setBspTreeDepth": ('int',), + "QGraphicsScene.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsScene.setFocusItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.FocusReason'), + "QGraphicsScene.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsScene.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setItemIndexMethod": ('PySide2.QtWidgets.QGraphicsScene.ItemIndexMethod',), + "QGraphicsScene.setMinimumRenderSize": ('float',), + "QGraphicsScene.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsScene.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.setSelectionArea": [('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionOperation', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.setSortCacheEnabled": ('bool',), + "QGraphicsScene.setStickyFocus": ('bool',), + "QGraphicsScene.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsScene.stickyFocus": (), + "QGraphicsScene.style": (), + "QGraphicsScene.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.views": (), + "QGraphicsScene.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsScene.width": (), + + # class PySide2.QtWidgets.QGraphicsSceneContextMenuEvent: + "QGraphicsSceneContextMenuEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneContextMenuEvent.modifiers": (), + "QGraphicsSceneContextMenuEvent.pos": (), + "QGraphicsSceneContextMenuEvent.reason": (), + "QGraphicsSceneContextMenuEvent.scenePos": (), + "QGraphicsSceneContextMenuEvent.screenPos": (), + "QGraphicsSceneContextMenuEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneContextMenuEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setReason": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent.Reason',), + "QGraphicsSceneContextMenuEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneDragDropEvent: + "QGraphicsSceneDragDropEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneDragDropEvent.acceptProposedAction": (), + "QGraphicsSceneDragDropEvent.buttons": (), + "QGraphicsSceneDragDropEvent.dropAction": (), + "QGraphicsSceneDragDropEvent.mimeData": (), + "QGraphicsSceneDragDropEvent.modifiers": (), + "QGraphicsSceneDragDropEvent.pos": (), + "QGraphicsSceneDragDropEvent.possibleActions": (), + "QGraphicsSceneDragDropEvent.proposedAction": (), + "QGraphicsSceneDragDropEvent.scenePos": (), + "QGraphicsSceneDragDropEvent.screenPos": (), + "QGraphicsSceneDragDropEvent.setButtons": ('PySide2.libpyside.MouseButtons',), + "QGraphicsSceneDragDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneDragDropEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setPossibleActions": ('PySide2.libpyside.DropActions',), + "QGraphicsSceneDragDropEvent.setProposedAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneDragDropEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneEvent: + "QGraphicsSceneEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneEvent.widget": (), + + # class PySide2.QtWidgets.QGraphicsSceneHelpEvent: + "QGraphicsSceneHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHelpEvent.scenePos": (), + "QGraphicsSceneHelpEvent.screenPos": (), + "QGraphicsSceneHelpEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHelpEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneHoverEvent: + "QGraphicsSceneHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHoverEvent.lastPos": (), + "QGraphicsSceneHoverEvent.lastScenePos": (), + "QGraphicsSceneHoverEvent.lastScreenPos": (), + "QGraphicsSceneHoverEvent.modifiers": (), + "QGraphicsSceneHoverEvent.pos": (), + "QGraphicsSceneHoverEvent.scenePos": (), + "QGraphicsSceneHoverEvent.screenPos": (), + "QGraphicsSceneHoverEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneHoverEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneHoverEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneMouseEvent: + "QGraphicsSceneMouseEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneMouseEvent.button": (), + "QGraphicsSceneMouseEvent.buttonDownPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScenePos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttons": (), + "QGraphicsSceneMouseEvent.flags": (), + "QGraphicsSceneMouseEvent.lastPos": (), + "QGraphicsSceneMouseEvent.lastScenePos": (), + "QGraphicsSceneMouseEvent.lastScreenPos": (), + "QGraphicsSceneMouseEvent.modifiers": (), + "QGraphicsSceneMouseEvent.pos": (), + "QGraphicsSceneMouseEvent.scenePos": (), + "QGraphicsSceneMouseEvent.screenPos": (), + "QGraphicsSceneMouseEvent.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.setButtonDownPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScenePos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPoint'), + "QGraphicsSceneMouseEvent.setButtons": ('PySide2.libpyside.MouseButtons',), + "QGraphicsSceneMouseEvent.setFlags": ('PySide2.libpyside.MouseEventFlags',), + "QGraphicsSceneMouseEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneMouseEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setSource": ('PySide2.QtCore.Qt.MouseEventSource',), + "QGraphicsSceneMouseEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneMoveEvent: + "QGraphicsSceneMoveEvent.__init__": (), + "QGraphicsSceneMoveEvent.newPos": (), + "QGraphicsSceneMoveEvent.oldPos": (), + "QGraphicsSceneMoveEvent.setNewPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMoveEvent.setOldPos": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QGraphicsSceneResizeEvent: + "QGraphicsSceneResizeEvent.__init__": (), + "QGraphicsSceneResizeEvent.newSize": (), + "QGraphicsSceneResizeEvent.oldSize": (), + "QGraphicsSceneResizeEvent.setNewSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsSceneResizeEvent.setOldSize": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtWidgets.QGraphicsSceneWheelEvent: + "QGraphicsSceneWheelEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneWheelEvent.buttons": (), + "QGraphicsSceneWheelEvent.delta": (), + "QGraphicsSceneWheelEvent.modifiers": (), + "QGraphicsSceneWheelEvent.orientation": (), + "QGraphicsSceneWheelEvent.pos": (), + "QGraphicsSceneWheelEvent.scenePos": (), + "QGraphicsSceneWheelEvent.screenPos": (), + "QGraphicsSceneWheelEvent.setButtons": ('PySide2.libpyside.MouseButtons',), + "QGraphicsSceneWheelEvent.setDelta": ('int',), + "QGraphicsSceneWheelEvent.setModifiers": ('PySide2.libpyside.KeyboardModifiers',), + "QGraphicsSceneWheelEvent.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsSceneWheelEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSimpleTextItem: + "QGraphicsSimpleTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSimpleTextItem.boundingRect": (), + "QGraphicsSimpleTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsSimpleTextItem.extension": ('Any',), + "QGraphicsSimpleTextItem.font": (), + "QGraphicsSimpleTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsSimpleTextItem.opaqueArea": (), + "QGraphicsSimpleTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSimpleTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsSimpleTextItem.setText": ('str',), + "QGraphicsSimpleTextItem.shape": (), + "QGraphicsSimpleTextItem.text": (), + "QGraphicsSimpleTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTextItem: + "QGraphicsTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsTextItem.adjustSize": (), + "QGraphicsTextItem.boundingRect": (), + "QGraphicsTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsTextItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsTextItem.defaultTextColor": (), + "QGraphicsTextItem.document": (), + "QGraphicsTextItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.extension": ('Any',), + "QGraphicsTextItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.font": (), + "QGraphicsTextItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsTextItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsTextItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.opaqueArea": (), + "QGraphicsTextItem.openExternalLinks": (), + "QGraphicsTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsTextItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsTextItem.setDefaultTextColor": ('PySide2.QtGui.QColor',), + "QGraphicsTextItem.setDocument": ('PySide2.QtGui.QTextDocument',), + "QGraphicsTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsTextItem.setHtml": ('str',), + "QGraphicsTextItem.setOpenExternalLinks": ('bool',), + "QGraphicsTextItem.setPlainText": ('str',), + "QGraphicsTextItem.setTabChangesFocus": ('bool',), + "QGraphicsTextItem.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QGraphicsTextItem.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QGraphicsTextItem.setTextWidth": ('float',), + "QGraphicsTextItem.shape": (), + "QGraphicsTextItem.tabChangesFocus": (), + "QGraphicsTextItem.textCursor": (), + "QGraphicsTextItem.textInteractionFlags": (), + "QGraphicsTextItem.textWidth": (), + "QGraphicsTextItem.toHtml": (), + "QGraphicsTextItem.toPlainText": (), + "QGraphicsTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTransform: + "QGraphicsTransform.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsTransform.update": (), + + # class PySide2.QtWidgets.QGraphicsView: + "QGraphicsView.__init__": [('PySide2.QtWidgets.QGraphicsScene', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QGraphicsView.alignment": (), + "QGraphicsView.backgroundBrush": (), + "QGraphicsView.cacheMode": (), + "QGraphicsView.centerOn": [('PySide2.QtCore.QPointF',), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float')], + "QGraphicsView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QGraphicsView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QGraphicsView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QGraphicsView.dragMode": (), + "QGraphicsView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QGraphicsView.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawItems": ('PySide2.QtGui.QPainter', 'int', 'List[PySide2.QtWidgets.QGraphicsItem]', 'List[PySide2.QtWidgets.QStyleOptionGraphicsItem]'), + "QGraphicsView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QGraphicsView.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('PySide2.QtWidgets.QGraphicsItem', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsView.event": ('PySide2.QtCore.QEvent',), + "QGraphicsView.fitInView": [('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.focusNextPrevChild": ('bool',), + "QGraphicsView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.foregroundBrush": (), + "QGraphicsView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsView.invalidateScene": ('PySide2.QtCore.QRectF', 'PySide2.libpyside.SceneLayers'), + "QGraphicsView.isInteractive": (), + "QGraphicsView.isTransformed": (), + "QGraphicsView.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QGraphicsView.items": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ItemSelectionMode')], + "QGraphicsView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsView.mapToScene": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('int', 'int'), ('int', 'int', 'int', 'int')], + "QGraphicsView.matrix": (), + "QGraphicsView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.optimizationFlags": (), + "QGraphicsView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGraphicsView.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'PySide2.libpyside.RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.renderHints": (), + "QGraphicsView.resetCachedContent": (), + "QGraphicsView.resetMatrix": (), + "QGraphicsView.resetTransform": (), + "QGraphicsView.resizeAnchor": (), + "QGraphicsView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGraphicsView.rotate": ('float',), + "QGraphicsView.rubberBandRect": (), + "QGraphicsView.rubberBandSelectionMode": (), + "QGraphicsView.scale": ('float', 'float'), + "QGraphicsView.scene": (), + "QGraphicsView.sceneRect": (), + "QGraphicsView.scrollContentsBy": ('int', 'int'), + "QGraphicsView.setAlignment": ('PySide2.libpyside.Alignment',), + "QGraphicsView.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setCacheMode": ('PySide2.libpyside.CacheMode',), + "QGraphicsView.setDragMode": ('PySide2.QtWidgets.QGraphicsView.DragMode',), + "QGraphicsView.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setInteractive": ('bool',), + "QGraphicsView.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsView.setOptimizationFlag": ('PySide2.QtWidgets.QGraphicsView.OptimizationFlag', 'bool'), + "QGraphicsView.setOptimizationFlags": ('PySide2.libpyside.OptimizationFlags',), + "QGraphicsView.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QGraphicsView.setRenderHints": ('PySide2.libpyside.RenderHints',), + "QGraphicsView.setResizeAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setRubberBandSelectionMode": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsView.setScene": ('PySide2.QtWidgets.QGraphicsScene',), + "QGraphicsView.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsView.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsView.setTransformationAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setViewportUpdateMode": ('PySide2.QtWidgets.QGraphicsView.ViewportUpdateMode',), + "QGraphicsView.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QGraphicsView.shear": ('float', 'float'), + "QGraphicsView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsView.sizeHint": (), + "QGraphicsView.transform": (), + "QGraphicsView.transformationAnchor": (), + "QGraphicsView.translate": ('float', 'float'), + "QGraphicsView.updateScene": ('list',), + "QGraphicsView.updateSceneRect": ('PySide2.QtCore.QRectF',), + "QGraphicsView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsView.viewportTransform": (), + "QGraphicsView.viewportUpdateMode": (), + "QGraphicsView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QGraphicsWidget: + "QGraphicsWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.libpyside.WindowFlags'), + "QGraphicsWidget.actions": (), + "QGraphicsWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.addActions": ('list',), + "QGraphicsWidget.adjustSize": (), + "QGraphicsWidget.autoFillBackground": (), + "QGraphicsWidget.boundingRect": (), + "QGraphicsWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.close": (), + "QGraphicsWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QGraphicsWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusNextPrevChild": ('bool',), + "QGraphicsWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusPolicy": (), + "QGraphicsWidget.focusWidget": (), + "QGraphicsWidget.font": (), + "QGraphicsWidget.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.getWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.grabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QGraphicsWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QGraphicsWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QGraphicsWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QGraphicsWidget.isActiveWindow": (), + "QGraphicsWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsWidget.layout": (), + "QGraphicsWidget.layoutDirection": (), + "QGraphicsWidget.moveEvent": ('PySide2.QtWidgets.QGraphicsSceneMoveEvent',), + "QGraphicsWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.paintWindowFrame": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.palette": (), + "QGraphicsWidget.polishEvent": (), + "QGraphicsWidget.propertyChange": ('str', 'Any'), + "QGraphicsWidget.rect": (), + "QGraphicsWidget.releaseShortcut": ('int',), + "QGraphicsWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.resize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsWidget.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QGraphicsWidget.setAutoFillBackground": ('bool',), + "QGraphicsWidget.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QGraphicsWidget.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsWidget.setGeometry": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsWidget.setLayout": ('PySide2.QtWidgets.QGraphicsLayout',), + "QGraphicsWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGraphicsWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QGraphicsWidget.setShortcutEnabled": ('int', 'bool'), + "QGraphicsWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsWidget.setTabOrder": ('PySide2.QtWidgets.QGraphicsWidget', 'PySide2.QtWidgets.QGraphicsWidget'), + "QGraphicsWidget.setWindowFlags": ('PySide2.libpyside.WindowFlags',), + "QGraphicsWidget.setWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setWindowTitle": ('str',), + "QGraphicsWidget.shape": (), + "QGraphicsWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsWidget.size": (), + "QGraphicsWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsWidget.style": (), + "QGraphicsWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QGraphicsWidget.type": (), + "QGraphicsWidget.ungrabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.unsetLayoutDirection": (), + "QGraphicsWidget.unsetWindowFrameMargins": (), + "QGraphicsWidget.updateGeometry": (), + "QGraphicsWidget.windowFlags": (), + "QGraphicsWidget.windowFrameEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.windowFrameGeometry": (), + "QGraphicsWidget.windowFrameRect": (), + "QGraphicsWidget.windowFrameSectionAt": ('PySide2.QtCore.QPointF',), + "QGraphicsWidget.windowTitle": (), + "QGraphicsWidget.windowType": (), + + # class PySide2.QtWidgets.QGridLayout: + "QGridLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QGridLayout.addItem": [('PySide2.QtWidgets.QLayoutItem',), ('PySide2.QtWidgets.QLayoutItem', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment')], + "QGridLayout.addLayout": [('PySide2.QtWidgets.QLayout', 'int', 'int', 'PySide2.libpyside.Alignment'), ('PySide2.QtWidgets.QLayout', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment')], + "QGridLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'PySide2.libpyside.Alignment'), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'int', 'int', 'PySide2.libpyside.Alignment')], + "QGridLayout.cellRect": ('int', 'int'), + "QGridLayout.columnCount": (), + "QGridLayout.columnMinimumWidth": ('int',), + "QGridLayout.columnStretch": ('int',), + "QGridLayout.count": (), + "QGridLayout.expandingDirections": (), + "QGridLayout.getItemPosition": ('int', 'int', 'int', 'int', 'int'), + "QGridLayout.hasHeightForWidth": (), + "QGridLayout.heightForWidth": ('int',), + "QGridLayout.horizontalSpacing": (), + "QGridLayout.invalidate": (), + "QGridLayout.itemAt": ('int',), + "QGridLayout.itemAtPosition": ('int', 'int'), + "QGridLayout.maximumSize": (), + "QGridLayout.minimumHeightForWidth": ('int',), + "QGridLayout.minimumSize": (), + "QGridLayout.originCorner": (), + "QGridLayout.rowCount": (), + "QGridLayout.rowMinimumHeight": ('int',), + "QGridLayout.rowStretch": ('int',), + "QGridLayout.setColumnMinimumWidth": ('int', 'int'), + "QGridLayout.setColumnStretch": ('int', 'int'), + "QGridLayout.setDefaultPositioning": ('int', 'PySide2.QtCore.Qt.Orientation'), + "QGridLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QGridLayout.setHorizontalSpacing": ('int',), + "QGridLayout.setOriginCorner": ('PySide2.QtCore.Qt.Corner',), + "QGridLayout.setRowMinimumHeight": ('int', 'int'), + "QGridLayout.setRowStretch": ('int', 'int'), + "QGridLayout.setSpacing": ('int',), + "QGridLayout.setVerticalSpacing": ('int',), + "QGridLayout.sizeHint": (), + "QGridLayout.spacing": (), + "QGridLayout.takeAt": ('int',), + "QGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGroupBox: + "QGroupBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QGroupBox.alignment": (), + "QGroupBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QGroupBox.childEvent": ('PySide2.QtCore.QChildEvent',), + "QGroupBox.event": ('PySide2.QtCore.QEvent',), + "QGroupBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGroupBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionGroupBox',), + "QGroupBox.isCheckable": (), + "QGroupBox.isChecked": (), + "QGroupBox.isFlat": (), + "QGroupBox.minimumSizeHint": (), + "QGroupBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGroupBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGroupBox.setAlignment": ('int',), + "QGroupBox.setCheckable": ('bool',), + "QGroupBox.setChecked": ('bool',), + "QGroupBox.setFlat": ('bool',), + "QGroupBox.setTitle": ('str',), + "QGroupBox.title": (), + + # class PySide2.QtWidgets.QHBoxLayout: + "QHBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QHeaderView: + "QHeaderView.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), + "QHeaderView.cascadingSectionResizes": (), + "QHeaderView.count": (), + "QHeaderView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QHeaderView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QHeaderView.defaultAlignment": (), + "QHeaderView.defaultSectionSize": (), + "QHeaderView.doItemsLayout": (), + "QHeaderView.event": ('PySide2.QtCore.QEvent',), + "QHeaderView.headerDataChanged": ('PySide2.QtCore.Qt.Orientation', 'int', 'int'), + "QHeaderView.hiddenSectionCount": (), + "QHeaderView.hideSection": ('int',), + "QHeaderView.highlightSections": (), + "QHeaderView.horizontalOffset": (), + "QHeaderView.indexAt": ('PySide2.QtCore.QPoint',), + "QHeaderView.initStyleOption": [('PySide2.QtWidgets.QStyleOptionFrame',), ('PySide2.QtWidgets.QStyleOptionHeader',)], + "QHeaderView.initialize": (), + "QHeaderView.initializeSections": [(), ('int', 'int')], + "QHeaderView.isFirstSectionMovable": (), + "QHeaderView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.isSectionHidden": ('int',), + "QHeaderView.isSortIndicatorShown": (), + "QHeaderView.length": (), + "QHeaderView.logicalIndex": ('int',), + "QHeaderView.logicalIndexAt": [('PySide2.QtCore.QPoint',), ('int',), ('int', 'int')], + "QHeaderView.maximumSectionSize": (), + "QHeaderView.minimumSectionSize": (), + "QHeaderView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QHeaderView.moveSection": ('int', 'int'), + "QHeaderView.offset": (), + "QHeaderView.orientation": (), + "QHeaderView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QHeaderView.paintSection": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int'), + "QHeaderView.reset": (), + "QHeaderView.resetDefaultSectionSize": (), + "QHeaderView.resizeContentsPrecision": (), + "QHeaderView.resizeSection": ('int', 'int'), + "QHeaderView.resizeSections": [(), ('PySide2.QtWidgets.QHeaderView.ResizeMode',)], + "QHeaderView.restoreState": ('PySide2.QtCore.QByteArray',), + "QHeaderView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.saveState": (), + "QHeaderView.scrollContentsBy": ('int', 'int'), + "QHeaderView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QHeaderView.sectionPosition": ('int',), + "QHeaderView.sectionResizeMode": ('int',), + "QHeaderView.sectionSize": ('int',), + "QHeaderView.sectionSizeFromContents": ('int',), + "QHeaderView.sectionSizeHint": ('int',), + "QHeaderView.sectionViewportPosition": ('int',), + "QHeaderView.sectionsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsClickable": (), + "QHeaderView.sectionsHidden": (), + "QHeaderView.sectionsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsMovable": (), + "QHeaderView.sectionsMoved": (), + "QHeaderView.setCascadingSectionResizes": ('bool',), + "QHeaderView.setDefaultAlignment": ('PySide2.libpyside.Alignment',), + "QHeaderView.setDefaultSectionSize": ('int',), + "QHeaderView.setFirstSectionMovable": ('bool',), + "QHeaderView.setHighlightSections": ('bool',), + "QHeaderView.setMaximumSectionSize": ('int',), + "QHeaderView.setMinimumSectionSize": ('int',), + "QHeaderView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QHeaderView.setOffset": ('int',), + "QHeaderView.setOffsetToLastSection": (), + "QHeaderView.setOffsetToSectionPosition": ('int',), + "QHeaderView.setResizeContentsPrecision": ('int',), + "QHeaderView.setSectionHidden": ('int', 'bool'), + "QHeaderView.setSectionResizeMode": [('PySide2.QtWidgets.QHeaderView.ResizeMode',), ('int', 'PySide2.QtWidgets.QHeaderView.ResizeMode')], + "QHeaderView.setSectionsClickable": ('bool',), + "QHeaderView.setSectionsMovable": ('bool',), + "QHeaderView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QHeaderView.setSortIndicator": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QHeaderView.setSortIndicatorShown": ('bool',), + "QHeaderView.setStretchLastSection": ('bool',), + "QHeaderView.setVisible": ('bool',), + "QHeaderView.showSection": ('int',), + "QHeaderView.sizeHint": (), + "QHeaderView.sortIndicatorOrder": (), + "QHeaderView.sortIndicatorSection": (), + "QHeaderView.stretchLastSection": (), + "QHeaderView.stretchSectionCount": (), + "QHeaderView.swapSections": ('int', 'int'), + "QHeaderView.updateGeometries": (), + "QHeaderView.updateSection": ('int',), + "QHeaderView.verticalOffset": (), + "QHeaderView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QHeaderView.visualIndex": ('int',), + "QHeaderView.visualIndexAt": ('int',), + "QHeaderView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QInputDialog: + "QInputDialog.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QInputDialog.cancelButtonText": (), + "QInputDialog.comboBoxItems": (), + "QInputDialog.done": ('int',), + "QInputDialog.doubleDecimals": (), + "QInputDialog.doubleMaximum": (), + "QInputDialog.doubleMinimum": (), + "QInputDialog.doubleStep": (), + "QInputDialog.doubleValue": (), + "QInputDialog.getDouble": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'float', 'float', 'float', 'int', 'bool', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'float', 'float', 'float', 'int', 'bool', 'PySide2.libpyside.WindowFlags', 'float')], + "QInputDialog.getInt": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'int', 'int', 'int', 'int', 'bool', 'PySide2.libpyside.WindowFlags'), + "QInputDialog.getItem": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'List[str]', 'int', 'bool', 'bool', 'PySide2.libpyside.WindowFlags', 'PySide2.libpyside.InputMethodHints'), + "QInputDialog.getMultiLineText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'bool', 'PySide2.libpyside.WindowFlags', 'PySide2.libpyside.InputMethodHints'), + "QInputDialog.getText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QLineEdit.EchoMode', 'str', 'bool', 'PySide2.libpyside.WindowFlags', 'PySide2.libpyside.InputMethodHints'), + "QInputDialog.inputMode": (), + "QInputDialog.intMaximum": (), + "QInputDialog.intMinimum": (), + "QInputDialog.intStep": (), + "QInputDialog.intValue": (), + "QInputDialog.isComboBoxEditable": (), + "QInputDialog.labelText": (), + "QInputDialog.minimumSizeHint": (), + "QInputDialog.okButtonText": (), + "QInputDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QInputDialog.setCancelButtonText": ('str',), + "QInputDialog.setComboBoxEditable": ('bool',), + "QInputDialog.setComboBoxItems": ('List[str]',), + "QInputDialog.setDoubleDecimals": ('int',), + "QInputDialog.setDoubleMaximum": ('float',), + "QInputDialog.setDoubleMinimum": ('float',), + "QInputDialog.setDoubleRange": ('float', 'float'), + "QInputDialog.setDoubleStep": ('float',), + "QInputDialog.setDoubleValue": ('float',), + "QInputDialog.setInputMode": ('PySide2.QtWidgets.QInputDialog.InputMode',), + "QInputDialog.setIntMaximum": ('int',), + "QInputDialog.setIntMinimum": ('int',), + "QInputDialog.setIntRange": ('int', 'int'), + "QInputDialog.setIntStep": ('int',), + "QInputDialog.setIntValue": ('int',), + "QInputDialog.setLabelText": ('str',), + "QInputDialog.setOkButtonText": ('str',), + "QInputDialog.setOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption', 'bool'), + "QInputDialog.setTextEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QInputDialog.setTextValue": ('str',), + "QInputDialog.setVisible": ('bool',), + "QInputDialog.sizeHint": (), + "QInputDialog.testOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption',), + "QInputDialog.textEchoMode": (), + "QInputDialog.textValue": (), + + # class PySide2.QtWidgets.QItemDelegate: + "QItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.decoration": ('PySide2.QtWidgets.QStyleOptionViewItem', 'Any'), + "QItemDelegate.doCheck": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'Any'), + "QItemDelegate.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.drawCheck": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.CheckState'), + "QItemDelegate.drawDecoration": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), + "QItemDelegate.drawDisplay": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'str'), + "QItemDelegate.drawFocus": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect'), + "QItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QItemDelegate.hasClipping": (), + "QItemDelegate.itemEditorFactory": (), + "QItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.rect": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex', 'int'), + "QItemDelegate.setClipping": ('bool',), + "QItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setOptions": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QStyleOptionViewItem'), + "QItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.textRectangle": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QFont', 'str'), + "QItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QItemEditorCreatorBase: + "QItemEditorCreatorBase.__init__": (), + "QItemEditorCreatorBase.createWidget": ('PySide2.QtWidgets.QWidget',), + "QItemEditorCreatorBase.valuePropertyName": (), + + # class PySide2.QtWidgets.QItemEditorFactory: + "QItemEditorFactory.__init__": (), + "QItemEditorFactory.createEditor": ('int', 'PySide2.QtWidgets.QWidget'), + "QItemEditorFactory.defaultFactory": (), + "QItemEditorFactory.registerEditor": ('int', 'PySide2.QtWidgets.QItemEditorCreatorBase'), + "QItemEditorFactory.setDefaultFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemEditorFactory.valuePropertyName": ('int',), + + # class PySide2.QtWidgets.QKeyEventTransition: + "QKeyEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'int', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QKeyEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.key": (), + "QKeyEventTransition.modifierMask": (), + "QKeyEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.setKey": ('int',), + "QKeyEventTransition.setModifierMask": ('PySide2.libpyside.KeyboardModifiers',), + + # class PySide2.QtWidgets.QKeySequenceEdit: + "QKeySequenceEdit.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QKeySequenceEdit.clear": (), + "QKeySequenceEdit.event": ('PySide2.QtCore.QEvent',), + "QKeySequenceEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keySequence": (), + "QKeySequenceEdit.setKeySequence": ('PySide2.QtGui.QKeySequence',), + "QKeySequenceEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QLCDNumber: + "QLCDNumber.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'PySide2.QtWidgets.QWidget')], + "QLCDNumber.checkOverflow": [('float',), ('int',)], + "QLCDNumber.digitCount": (), + "QLCDNumber.display": [('float',), ('int',), ('str',)], + "QLCDNumber.event": ('PySide2.QtCore.QEvent',), + "QLCDNumber.intValue": (), + "QLCDNumber.mode": (), + "QLCDNumber.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLCDNumber.segmentStyle": (), + "QLCDNumber.setBinMode": (), + "QLCDNumber.setDecMode": (), + "QLCDNumber.setDigitCount": ('int',), + "QLCDNumber.setHexMode": (), + "QLCDNumber.setMode": ('PySide2.QtWidgets.QLCDNumber.Mode',), + "QLCDNumber.setOctMode": (), + "QLCDNumber.setSegmentStyle": ('PySide2.QtWidgets.QLCDNumber.SegmentStyle',), + "QLCDNumber.setSmallDecimalPoint": ('bool',), + "QLCDNumber.sizeHint": (), + "QLCDNumber.smallDecimalPoint": (), + "QLCDNumber.value": (), + + # class PySide2.QtWidgets.QLabel: + "QLabel.__init__": [('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QLabel.alignment": (), + "QLabel.buddy": (), + "QLabel.changeEvent": ('PySide2.QtCore.QEvent',), + "QLabel.clear": (), + "QLabel.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLabel.event": ('PySide2.QtCore.QEvent',), + "QLabel.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.focusNextPrevChild": ('bool',), + "QLabel.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.hasScaledContents": (), + "QLabel.hasSelectedText": (), + "QLabel.heightForWidth": ('int',), + "QLabel.indent": (), + "QLabel.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLabel.margin": (), + "QLabel.minimumSizeHint": (), + "QLabel.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.movie": (), + "QLabel.openExternalLinks": (), + "QLabel.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLabel.picture": (), + "QLabel.pixmap": (), + "QLabel.selectedText": (), + "QLabel.selectionStart": (), + "QLabel.setAlignment": ('PySide2.libpyside.Alignment',), + "QLabel.setBuddy": ('PySide2.QtWidgets.QWidget',), + "QLabel.setIndent": ('int',), + "QLabel.setMargin": ('int',), + "QLabel.setMovie": ('PySide2.QtGui.QMovie',), + "QLabel.setNum": [('float',), ('int',)], + "QLabel.setOpenExternalLinks": ('bool',), + "QLabel.setPicture": ('PySide2.QtGui.QPicture',), + "QLabel.setPixmap": ('PySide2.QtGui.QPixmap',), + "QLabel.setScaledContents": ('bool',), + "QLabel.setSelection": ('int', 'int'), + "QLabel.setText": ('str',), + "QLabel.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QLabel.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QLabel.setWordWrap": ('bool',), + "QLabel.sizeHint": (), + "QLabel.text": (), + "QLabel.textFormat": (), + "QLabel.textInteractionFlags": (), + "QLabel.wordWrap": (), + + # class PySide2.QtWidgets.QLayout: + "QLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QLayout.activate": (), + "QLayout.addChildLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.addChildWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.adoptLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.alignmentRect": ('PySide2.QtCore.QRect',), + "QLayout.childEvent": ('PySide2.QtCore.QChildEvent',), + "QLayout.closestAcceptableSize": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QSize'), + "QLayout.contentsMargins": (), + "QLayout.contentsRect": (), + "QLayout.controlTypes": (), + "QLayout.count": (), + "QLayout.expandingDirections": (), + "QLayout.geometry": (), + "QLayout.getContentsMargins": ('int', 'int', 'int', 'int'), + "QLayout.indexOf": ('PySide2.QtWidgets.QWidget',), + "QLayout.invalidate": (), + "QLayout.isEmpty": (), + "QLayout.isEnabled": (), + "QLayout.itemAt": ('int',), + "QLayout.layout": (), + "QLayout.margin": (), + "QLayout.maximumSize": (), + "QLayout.menuBar": (), + "QLayout.minimumSize": (), + "QLayout.parentWidget": (), + "QLayout.removeItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.replaceWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.FindChildOptions'), + "QLayout.setAlignment": [('PySide2.QtWidgets.QLayout', 'PySide2.libpyside.Alignment'), ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.Alignment'), ('PySide2.libpyside.Alignment',)], + "QLayout.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLayout.setEnabled": ('bool',), + "QLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QLayout.setMargin": ('int',), + "QLayout.setMenuBar": ('PySide2.QtWidgets.QWidget',), + "QLayout.setSizeConstraint": ('PySide2.QtWidgets.QLayout.SizeConstraint',), + "QLayout.setSpacing": ('int',), + "QLayout.sizeConstraint": (), + "QLayout.spacing": (), + "QLayout.takeAt": ('int',), + "QLayout.totalHeightForWidth": ('int',), + "QLayout.totalMaximumSize": (), + "QLayout.totalMinimumSize": (), + "QLayout.totalSizeHint": (), + "QLayout.update": (), + "QLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QLayoutItem: + "QLayoutItem.__init__": ('PySide2.libpyside.Alignment',), + "QLayoutItem.alignment": (), + "QLayoutItem.controlTypes": (), + "QLayoutItem.expandingDirections": (), + "QLayoutItem.geometry": (), + "QLayoutItem.hasHeightForWidth": (), + "QLayoutItem.heightForWidth": ('int',), + "QLayoutItem.invalidate": (), + "QLayoutItem.isEmpty": (), + "QLayoutItem.layout": (), + "QLayoutItem.maximumSize": (), + "QLayoutItem.minimumHeightForWidth": ('int',), + "QLayoutItem.minimumSize": (), + "QLayoutItem.setAlignment": ('PySide2.libpyside.Alignment',), + "QLayoutItem.setGeometry": ('PySide2.QtCore.QRect',), + "QLayoutItem.sizeHint": (), + "QLayoutItem.spacerItem": (), + "QLayoutItem.widget": (), + + # class PySide2.QtWidgets.QLineEdit: + "QLineEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QLineEdit.addAction": [('PySide2.QtGui.QIcon', 'PySide2.QtWidgets.QLineEdit.ActionPosition'), ('PySide2.QtWidgets.QAction',), ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QLineEdit.ActionPosition')], + "QLineEdit.alignment": (), + "QLineEdit.backspace": (), + "QLineEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QLineEdit.clear": (), + "QLineEdit.completer": (), + "QLineEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLineEdit.copy": (), + "QLineEdit.createStandardContextMenu": (), + "QLineEdit.cursorBackward": ('bool', 'int'), + "QLineEdit.cursorForward": ('bool', 'int'), + "QLineEdit.cursorMoveStyle": (), + "QLineEdit.cursorPosition": (), + "QLineEdit.cursorPositionAt": ('PySide2.QtCore.QPoint',), + "QLineEdit.cursorRect": (), + "QLineEdit.cursorWordBackward": ('bool',), + "QLineEdit.cursorWordForward": ('bool',), + "QLineEdit.cut": (), + "QLineEdit.del_": (), + "QLineEdit.deselect": (), + "QLineEdit.displayText": (), + "QLineEdit.dragEnabled": (), + "QLineEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QLineEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QLineEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QLineEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QLineEdit.echoMode": (), + "QLineEdit.end": ('bool',), + "QLineEdit.event": ('PySide2.QtCore.QEvent',), + "QLineEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.getTextMargins": ('int', 'int', 'int', 'int'), + "QLineEdit.hasAcceptableInput": (), + "QLineEdit.hasFrame": (), + "QLineEdit.hasSelectedText": (), + "QLineEdit.home": ('bool',), + "QLineEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QLineEdit.inputMask": (), + "QLineEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QLineEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QLineEdit.insert": ('str',), + "QLineEdit.isClearButtonEnabled": (), + "QLineEdit.isModified": (), + "QLineEdit.isReadOnly": (), + "QLineEdit.isRedoAvailable": (), + "QLineEdit.isUndoAvailable": (), + "QLineEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLineEdit.maxLength": (), + "QLineEdit.minimumSizeHint": (), + "QLineEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLineEdit.paste": (), + "QLineEdit.placeholderText": (), + "QLineEdit.redo": (), + "QLineEdit.selectAll": (), + "QLineEdit.selectedText": (), + "QLineEdit.selectionEnd": (), + "QLineEdit.selectionLength": (), + "QLineEdit.selectionStart": (), + "QLineEdit.setAlignment": ('PySide2.libpyside.Alignment',), + "QLineEdit.setClearButtonEnabled": ('bool',), + "QLineEdit.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QLineEdit.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QLineEdit.setCursorPosition": ('int',), + "QLineEdit.setDragEnabled": ('bool',), + "QLineEdit.setEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QLineEdit.setFrame": ('bool',), + "QLineEdit.setInputMask": ('str',), + "QLineEdit.setMaxLength": ('int',), + "QLineEdit.setModified": ('bool',), + "QLineEdit.setPlaceholderText": ('str',), + "QLineEdit.setReadOnly": ('bool',), + "QLineEdit.setSelection": ('int', 'int'), + "QLineEdit.setText": ('str',), + "QLineEdit.setTextMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLineEdit.setValidator": ('PySide2.QtGui.QValidator',), + "QLineEdit.sizeHint": (), + "QLineEdit.text": (), + "QLineEdit.textMargins": (), + "QLineEdit.undo": (), + "QLineEdit.validator": (), + + # class PySide2.QtWidgets.QListView: + "QListView.__init__": ('PySide2.QtWidgets.QWidget',), + "QListView.batchSize": (), + "QListView.clearPropertyFlags": (), + "QListView.contentsSize": (), + "QListView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QListView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QListView.doItemsLayout": (), + "QListView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QListView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QListView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListView.event": ('PySide2.QtCore.QEvent',), + "QListView.flow": (), + "QListView.gridSize": (), + "QListView.horizontalOffset": (), + "QListView.indexAt": ('PySide2.QtCore.QPoint',), + "QListView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QListView.isRowHidden": ('int',), + "QListView.isSelectionRectVisible": (), + "QListView.isWrapping": (), + "QListView.layoutMode": (), + "QListView.modelColumn": (), + "QListView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QListView.movement": (), + "QListView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QListView.rectForIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.reset": (), + "QListView.resizeContents": ('int', 'int'), + "QListView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QListView.resizeMode": (), + "QListView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.scrollContentsBy": ('int', 'int'), + "QListView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListView.selectedIndexes": (), + "QListView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QListView.setBatchSize": ('int',), + "QListView.setFlow": ('PySide2.QtWidgets.QListView.Flow',), + "QListView.setGridSize": ('PySide2.QtCore.QSize',), + "QListView.setLayoutMode": ('PySide2.QtWidgets.QListView.LayoutMode',), + "QListView.setModelColumn": ('int',), + "QListView.setMovement": ('PySide2.QtWidgets.QListView.Movement',), + "QListView.setPositionForIndex": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QModelIndex'), + "QListView.setResizeMode": ('PySide2.QtWidgets.QListView.ResizeMode',), + "QListView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.setRowHidden": ('int', 'bool'), + "QListView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QListView.setSelectionRectVisible": ('bool',), + "QListView.setSpacing": ('int',), + "QListView.setUniformItemSizes": ('bool',), + "QListView.setViewMode": ('PySide2.QtWidgets.QListView.ViewMode',), + "QListView.setWordWrap": ('bool',), + "QListView.setWrapping": ('bool',), + "QListView.spacing": (), + "QListView.startDrag": ('PySide2.libpyside.DropActions',), + "QListView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QListView.uniformItemSizes": (), + "QListView.updateGeometries": (), + "QListView.verticalOffset": (), + "QListView.viewMode": (), + "QListView.viewOptions": (), + "QListView.viewportSizeHint": (), + "QListView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QListView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QListView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QListView.wordWrap": (), + + # class PySide2.QtWidgets.QListWidget: + "QListWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QListWidget.addItem": [('PySide2.QtWidgets.QListWidgetItem',), ('str',)], + "QListWidget.addItems": ('List[str]',), + "QListWidget.clear": (), + "QListWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.count": (), + "QListWidget.currentItem": (), + "QListWidget.currentRow": (), + "QListWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListWidget.dropMimeData": ('int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QListWidget.editItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.event": ('PySide2.QtCore.QEvent',), + "QListWidget.findItems": ('str', 'PySide2.libpyside.MatchFlags'), + "QListWidget.indexFromItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.insertItem": [('int', 'PySide2.QtWidgets.QListWidgetItem'), ('int', 'str')], + "QListWidget.insertItems": ('int', 'List[str]'), + "QListWidget.isItemHidden": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isItemSelected": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isPersistentEditorOpen": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.isSortingEnabled": (), + "QListWidget.item": ('int',), + "QListWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QListWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QListWidget.itemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.items": ('PySide2.QtCore.QMimeData',), + "QListWidget.mimeData": ('list',), + "QListWidget.mimeTypes": (), + "QListWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.removeItemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.row": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.scrollToItem": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListWidget.selectedItems": (), + "QListWidget.setCurrentItem": [('PySide2.QtWidgets.QListWidgetItem',), ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.libpyside.SelectionFlags')], + "QListWidget.setCurrentRow": [('int',), ('int', 'PySide2.libpyside.SelectionFlags')], + "QListWidget.setItemHidden": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemSelected": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemWidget": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QWidget'), + "QListWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QListWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QListWidget.setSortingEnabled": ('bool',), + "QListWidget.sortItems": ('PySide2.QtCore.Qt.SortOrder',), + "QListWidget.supportedDropActions": (), + "QListWidget.takeItem": ('int',), + "QListWidget.visualItemRect": ('PySide2.QtWidgets.QListWidgetItem',), + + # class PySide2.QtWidgets.QListWidgetItem: + "QListWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidgetItem',), ('str', 'PySide2.QtWidgets.QListWidget', 'int')], + "QListWidgetItem.background": (), + "QListWidgetItem.backgroundColor": (), + "QListWidgetItem.checkState": (), + "QListWidgetItem.clone": (), + "QListWidgetItem.data": ('int',), + "QListWidgetItem.flags": (), + "QListWidgetItem.font": (), + "QListWidgetItem.foreground": (), + "QListWidgetItem.icon": (), + "QListWidgetItem.isHidden": (), + "QListWidgetItem.isSelected": (), + "QListWidgetItem.listWidget": (), + "QListWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QListWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QListWidgetItem.setData": ('int', 'Any'), + "QListWidgetItem.setFlags": ('PySide2.libpyside.ItemFlags',), + "QListWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QListWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setHidden": ('bool',), + "QListWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QListWidgetItem.setSelected": ('bool',), + "QListWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QListWidgetItem.setStatusTip": ('str',), + "QListWidgetItem.setText": ('str',), + "QListWidgetItem.setTextAlignment": ('int',), + "QListWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setToolTip": ('str',), + "QListWidgetItem.setWhatsThis": ('str',), + "QListWidgetItem.sizeHint": (), + "QListWidgetItem.statusTip": (), + "QListWidgetItem.text": (), + "QListWidgetItem.textAlignment": (), + "QListWidgetItem.textColor": (), + "QListWidgetItem.toolTip": (), + "QListWidgetItem.type": (), + "QListWidgetItem.whatsThis": (), + "QListWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QMainWindow: + "QMainWindow.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QMainWindow.addDockWidget": [('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget'), ('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation')], + "QMainWindow.addToolBar": [('PySide2.QtCore.Qt.ToolBarArea', 'PySide2.QtWidgets.QToolBar'), ('PySide2.QtWidgets.QToolBar',), ('str',)], + "QMainWindow.addToolBarBreak": ('PySide2.QtCore.Qt.ToolBarArea',), + "QMainWindow.centralWidget": (), + "QMainWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMainWindow.corner": ('PySide2.QtCore.Qt.Corner',), + "QMainWindow.createPopupMenu": (), + "QMainWindow.dockOptions": (), + "QMainWindow.dockWidgetArea": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.documentMode": (), + "QMainWindow.event": ('PySide2.QtCore.QEvent',), + "QMainWindow.iconSize": (), + "QMainWindow.insertToolBar": ('PySide2.QtWidgets.QToolBar', 'PySide2.QtWidgets.QToolBar'), + "QMainWindow.insertToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.isAnimated": (), + "QMainWindow.isDockNestingEnabled": (), + "QMainWindow.isSeparator": ('PySide2.QtCore.QPoint',), + "QMainWindow.menuBar": (), + "QMainWindow.menuWidget": (), + "QMainWindow.removeDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.removeToolBar": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.removeToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.resizeDocks": ('list', 'list', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.restoreDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.restoreState": ('PySide2.QtCore.QByteArray', 'int'), + "QMainWindow.saveState": ('int',), + "QMainWindow.setAnimated": ('bool',), + "QMainWindow.setCentralWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setCorner": ('PySide2.QtCore.Qt.Corner', 'PySide2.QtCore.Qt.DockWidgetArea'), + "QMainWindow.setDockNestingEnabled": ('bool',), + "QMainWindow.setDockOptions": ('PySide2.libpyside.DockOptions',), + "QMainWindow.setDocumentMode": ('bool',), + "QMainWindow.setIconSize": ('PySide2.QtCore.QSize',), + "QMainWindow.setMenuBar": ('PySide2.QtWidgets.QMenuBar',), + "QMainWindow.setMenuWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setStatusBar": ('PySide2.QtWidgets.QStatusBar',), + "QMainWindow.setTabPosition": ('PySide2.libpyside.DockWidgetAreas', 'PySide2.QtWidgets.QTabWidget.TabPosition'), + "QMainWindow.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMainWindow.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QMainWindow.setUnifiedTitleAndToolBarOnMac": ('bool',), + "QMainWindow.splitDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.statusBar": (), + "QMainWindow.tabPosition": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QMainWindow.tabShape": (), + "QMainWindow.tabifiedDockWidgets": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.tabifyDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget'), + "QMainWindow.takeCentralWidget": (), + "QMainWindow.toolBarArea": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolButtonStyle": (), + "QMainWindow.unifiedTitleAndToolBarOnMac": (), + + # class PySide2.QtWidgets.QMdiArea: + "QMdiArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.activateNextSubWindow": (), + "QMdiArea.activatePreviousSubWindow": (), + "QMdiArea.activationOrder": (), + "QMdiArea.activeSubWindow": (), + "QMdiArea.addSubWindow": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QMdiArea.background": (), + "QMdiArea.cascadeSubWindows": (), + "QMdiArea.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiArea.closeActiveSubWindow": (), + "QMdiArea.closeAllSubWindows": (), + "QMdiArea.currentSubWindow": (), + "QMdiArea.documentMode": (), + "QMdiArea.event": ('PySide2.QtCore.QEvent',), + "QMdiArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiArea.minimumSizeHint": (), + "QMdiArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiArea.removeSubWindow": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiArea.scrollContentsBy": ('int', 'int'), + "QMdiArea.setActivationOrder": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.setActiveSubWindow": ('PySide2.QtWidgets.QMdiSubWindow',), + "QMdiArea.setBackground": ('PySide2.QtGui.QBrush',), + "QMdiArea.setDocumentMode": ('bool',), + "QMdiArea.setOption": ('PySide2.QtWidgets.QMdiArea.AreaOption', 'bool'), + "QMdiArea.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QMdiArea.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMdiArea.setTabsClosable": ('bool',), + "QMdiArea.setTabsMovable": ('bool',), + "QMdiArea.setViewMode": ('PySide2.QtWidgets.QMdiArea.ViewMode',), + "QMdiArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiArea.sizeHint": (), + "QMdiArea.subWindowList": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.tabPosition": (), + "QMdiArea.tabShape": (), + "QMdiArea.tabsClosable": (), + "QMdiArea.tabsMovable": (), + "QMdiArea.testOption": ('PySide2.QtWidgets.QMdiArea.AreaOption',), + "QMdiArea.tileSubWindows": (), + "QMdiArea.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiArea.viewMode": (), + "QMdiArea.viewportEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QMdiSubWindow: + "QMdiSubWindow.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QMdiSubWindow.changeEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiSubWindow.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMdiSubWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMdiSubWindow.event": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiSubWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMdiSubWindow.isShaded": (), + "QMdiSubWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMdiSubWindow.keyboardPageStep": (), + "QMdiSubWindow.keyboardSingleStep": (), + "QMdiSubWindow.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.maximizedButtonsWidget": (), + "QMdiSubWindow.maximizedSystemMenuIconWidget": (), + "QMdiSubWindow.mdiArea": (), + "QMdiSubWindow.minimumSizeHint": (), + "QMdiSubWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QMdiSubWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiSubWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiSubWindow.setKeyboardPageStep": ('int',), + "QMdiSubWindow.setKeyboardSingleStep": ('int',), + "QMdiSubWindow.setOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption', 'bool'), + "QMdiSubWindow.setSystemMenu": ('PySide2.QtWidgets.QMenu',), + "QMdiSubWindow.setWidget": ('PySide2.QtWidgets.QWidget',), + "QMdiSubWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiSubWindow.showShaded": (), + "QMdiSubWindow.showSystemMenu": (), + "QMdiSubWindow.sizeHint": (), + "QMdiSubWindow.systemMenu": (), + "QMdiSubWindow.testOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption',), + "QMdiSubWindow.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiSubWindow.widget": (), + + # class PySide2.QtWidgets.QMenu: + "QMenu.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QMenu.actionAt": ('PySide2.QtCore.QPoint',), + "QMenu.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenu.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenu.activeAction": (), + "QMenu.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtGui.QIcon', 'str', 'object', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('str', 'object', 'PySide2.QtGui.QKeySequence')], + "QMenu.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenu.addSection": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QMenu.addSeparator": (), + "QMenu.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenu.clear": (), + "QMenu.columnCount": (), + "QMenu.defaultAction": (), + "QMenu.enterEvent": ('PySide2.QtCore.QEvent',), + "QMenu.event": ('PySide2.QtCore.QEvent',), + "QMenu.exec_": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), ('list', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget')], + "QMenu.focusNextPrevChild": ('bool',), + "QMenu.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMenu.hideTearOffMenu": (), + "QMenu.icon": (), + "QMenu.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenu.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenu.insertSection": [('PySide2.QtWidgets.QAction', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction', 'str')], + "QMenu.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenu.isEmpty": (), + "QMenu.isTearOffEnabled": (), + "QMenu.isTearOffMenuVisible": (), + "QMenu.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenu.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenu.menuAction": (), + "QMenu.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenu.popup": ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), + "QMenu.separatorsCollapsible": (), + "QMenu.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setIcon": ('PySide2.QtGui.QIcon',), + "QMenu.setSeparatorsCollapsible": ('bool',), + "QMenu.setTearOffEnabled": ('bool',), + "QMenu.setTitle": ('str',), + "QMenu.setToolTipsVisible": ('bool',), + "QMenu.showTearOffMenu": [(), ('PySide2.QtCore.QPoint',)], + "QMenu.sizeHint": (), + "QMenu.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMenu.title": (), + "QMenu.toolTipsVisible": (), + "QMenu.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QMenuBar: + "QMenuBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QMenuBar.actionAt": ('PySide2.QtCore.QPoint',), + "QMenuBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenuBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenuBar.activeAction": (), + "QMenuBar.addAction": [('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str'), ('str', 'object')], + "QMenuBar.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenuBar.addSeparator": (), + "QMenuBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.clear": (), + "QMenuBar.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QMenuBar.event": ('PySide2.QtCore.QEvent',), + "QMenuBar.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMenuBar.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.heightForWidth": ('int',), + "QMenuBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenuBar.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenuBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenuBar.isDefaultUp": (), + "QMenuBar.isNativeMenuBar": (), + "QMenuBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenuBar.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.minimumSizeHint": (), + "QMenuBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenuBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMenuBar.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenuBar.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QMenuBar.setDefaultUp": ('bool',), + "QMenuBar.setNativeMenuBar": ('bool',), + "QMenuBar.setVisible": ('bool',), + "QMenuBar.sizeHint": (), + "QMenuBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QMessageBox: + "QMessageBox.__init__": [('PySide2.QtWidgets.QMessageBox.Icon', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget',)], + "QMessageBox.about": ('PySide2.QtWidgets.QWidget', 'str', 'str'), + "QMessageBox.aboutQt": ('PySide2.QtWidgets.QWidget', 'str'), + "QMessageBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QMessageBox.ButtonRole'), ('PySide2.QtWidgets.QMessageBox.StandardButton',), ('str', 'PySide2.QtWidgets.QMessageBox.ButtonRole')], + "QMessageBox.button": ('PySide2.QtWidgets.QMessageBox.StandardButton',), + "QMessageBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.buttonText": ('int',), + "QMessageBox.buttons": (), + "QMessageBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QMessageBox.checkBox": (), + "QMessageBox.clickedButton": (), + "QMessageBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMessageBox.critical": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.defaultButton": (), + "QMessageBox.detailedText": (), + "QMessageBox.escapeButton": (), + "QMessageBox.event": ('PySide2.QtCore.QEvent',), + "QMessageBox.icon": (), + "QMessageBox.iconPixmap": (), + "QMessageBox.information": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.informativeText": (), + "QMessageBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMessageBox.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QMessageBox.question": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMessageBox.setButtonText": ('int', 'str'), + "QMessageBox.setCheckBox": ('PySide2.QtWidgets.QCheckBox',), + "QMessageBox.setDefaultButton": [('PySide2.QtWidgets.QMessageBox.StandardButton',), ('PySide2.QtWidgets.QPushButton',)], + "QMessageBox.setDetailedText": ('str',), + "QMessageBox.setEscapeButton": [('PySide2.QtWidgets.QAbstractButton',), ('PySide2.QtWidgets.QMessageBox.StandardButton',)], + "QMessageBox.setIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.setIconPixmap": ('PySide2.QtGui.QPixmap',), + "QMessageBox.setInformativeText": ('str',), + "QMessageBox.setStandardButtons": ('PySide2.libpyside.StandardButtons',), + "QMessageBox.setText": ('str',), + "QMessageBox.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QMessageBox.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QMessageBox.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QMessageBox.setWindowTitle": ('str',), + "QMessageBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMessageBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.standardButtons": (), + "QMessageBox.standardIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.text": (), + "QMessageBox.textFormat": (), + "QMessageBox.textInteractionFlags": (), + "QMessageBox.warning": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.libpyside.StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + + # class PySide2.QtWidgets.QMouseEventTransition: + "QMouseEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QMouseEventTransition.button": (), + "QMouseEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.hitTestPath": (), + "QMouseEventTransition.modifierMask": (), + "QMouseEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QMouseEventTransition.setHitTestPath": ('PySide2.QtGui.QPainterPath',), + "QMouseEventTransition.setModifierMask": ('PySide2.libpyside.KeyboardModifiers',), + + # class PySide2.QtWidgets.QOpenGLWidget: + "QOpenGLWidget.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QOpenGLWidget.context": (), + "QOpenGLWidget.defaultFramebufferObject": (), + "QOpenGLWidget.doneCurrent": (), + "QOpenGLWidget.event": ('PySide2.QtCore.QEvent',), + "QOpenGLWidget.format": (), + "QOpenGLWidget.grabFramebuffer": (), + "QOpenGLWidget.initializeGL": (), + "QOpenGLWidget.isValid": (), + "QOpenGLWidget.makeCurrent": (), + "QOpenGLWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWidget.paintEngine": (), + "QOpenGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWidget.paintGL": (), + "QOpenGLWidget.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWidget.resizeGL": ('int', 'int'), + "QOpenGLWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLWidget.setTextureFormat": ('int',), + "QOpenGLWidget.setUpdateBehavior": ('PySide2.QtWidgets.QOpenGLWidget.UpdateBehavior',), + "QOpenGLWidget.textureFormat": (), + "QOpenGLWidget.updateBehavior": (), + + # class PySide2.QtWidgets.QPanGesture: + "QPanGesture.__init__": ('PySide2.QtCore.QObject',), + "QPanGesture.acceleration": (), + "QPanGesture.delta": (), + "QPanGesture.lastOffset": (), + "QPanGesture.offset": (), + "QPanGesture.setAcceleration": ('float',), + "QPanGesture.setLastOffset": ('PySide2.QtCore.QPointF',), + "QPanGesture.setOffset": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QPinchGesture: + "QPinchGesture.__init__": ('PySide2.QtCore.QObject',), + "QPinchGesture.centerPoint": (), + "QPinchGesture.changeFlags": (), + "QPinchGesture.lastCenterPoint": (), + "QPinchGesture.lastRotationAngle": (), + "QPinchGesture.lastScaleFactor": (), + "QPinchGesture.rotationAngle": (), + "QPinchGesture.scaleFactor": (), + "QPinchGesture.setCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setChangeFlags": ('PySide2.libpyside.ChangeFlags',), + "QPinchGesture.setLastCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setLastRotationAngle": ('float',), + "QPinchGesture.setLastScaleFactor": ('float',), + "QPinchGesture.setRotationAngle": ('float',), + "QPinchGesture.setScaleFactor": ('float',), + "QPinchGesture.setStartCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setTotalChangeFlags": ('PySide2.libpyside.ChangeFlags',), + "QPinchGesture.setTotalRotationAngle": ('float',), + "QPinchGesture.setTotalScaleFactor": ('float',), + "QPinchGesture.startCenterPoint": (), + "QPinchGesture.totalChangeFlags": (), + "QPinchGesture.totalRotationAngle": (), + "QPinchGesture.totalScaleFactor": (), + + # class PySide2.QtWidgets.QPlainTextDocumentLayout: + "QPlainTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QPlainTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.cursorWidth": (), + "QPlainTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QPlainTextDocumentLayout.documentSize": (), + "QPlainTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QPlainTextDocumentLayout.ensureBlockLayout": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QPlainTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QPlainTextDocumentLayout.pageCount": (), + "QPlainTextDocumentLayout.requestUpdate": (), + "QPlainTextDocumentLayout.setCursorWidth": ('int',), + + # class PySide2.QtWidgets.QPlainTextEdit: + "QPlainTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPlainTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.appendHtml": ('str',), + "QPlainTextEdit.appendPlainText": ('str',), + "QPlainTextEdit.backgroundVisible": (), + "QPlainTextEdit.blockBoundingGeometry": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockCount": (), + "QPlainTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.canPaste": (), + "QPlainTextEdit.centerCursor": (), + "QPlainTextEdit.centerOnScroll": (), + "QPlainTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.clear": (), + "QPlainTextEdit.contentOffset": (), + "QPlainTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QPlainTextEdit.copy": (), + "QPlainTextEdit.createMimeDataFromSelection": (), + "QPlainTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QPlainTextEdit.currentCharFormat": (), + "QPlainTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QPlainTextEdit.cursorWidth": (), + "QPlainTextEdit.cut": (), + "QPlainTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.document": (), + "QPlainTextEdit.documentTitle": (), + "QPlainTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QPlainTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QPlainTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QPlainTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QPlainTextEdit.ensureCursorVisible": (), + "QPlainTextEdit.event": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.extraSelections": (), + "QPlainTextEdit.find": [('PySide2.QtCore.QRegExp', 'PySide2.libpyside.FindFlags'), ('int',), ('str', 'PySide2.libpyside.FindFlags')], + "QPlainTextEdit.firstVisibleBlock": (), + "QPlainTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.focusNextPrevChild": ('bool',), + "QPlainTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.getPaintContext": (), + "QPlainTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QPlainTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QPlainTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.insertPlainText": ('str',), + "QPlainTextEdit.isReadOnly": (), + "QPlainTextEdit.isUndoRedoEnabled": (), + "QPlainTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.lineWrapMode": (), + "QPlainTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QPlainTextEdit.maximumBlockCount": (), + "QPlainTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QPlainTextEdit.overwriteMode": (), + "QPlainTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPlainTextEdit.paste": (), + "QPlainTextEdit.placeholderText": (), + "QPlainTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QPlainTextEdit.redo": (), + "QPlainTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QPlainTextEdit.scrollContentsBy": ('int', 'int'), + "QPlainTextEdit.selectAll": (), + "QPlainTextEdit.setBackgroundVisible": ('bool',), + "QPlainTextEdit.setCenterOnScroll": ('bool',), + "QPlainTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.setCursorWidth": ('int',), + "QPlainTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QPlainTextEdit.setDocumentTitle": ('str',), + "QPlainTextEdit.setExtraSelections": ('list',), + "QPlainTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QPlainTextEdit.LineWrapMode',), + "QPlainTextEdit.setMaximumBlockCount": ('int',), + "QPlainTextEdit.setOverwriteMode": ('bool',), + "QPlainTextEdit.setPlaceholderText": ('str',), + "QPlainTextEdit.setPlainText": ('str',), + "QPlainTextEdit.setReadOnly": ('bool',), + "QPlainTextEdit.setTabChangesFocus": ('bool',), + "QPlainTextEdit.setTabStopDistance": ('float',), + "QPlainTextEdit.setTabStopWidth": ('int',), + "QPlainTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QPlainTextEdit.setUndoRedoEnabled": ('bool',), + "QPlainTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QPlainTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QPlainTextEdit.tabChangesFocus": (), + "QPlainTextEdit.tabStopDistance": (), + "QPlainTextEdit.tabStopWidth": (), + "QPlainTextEdit.textCursor": (), + "QPlainTextEdit.textInteractionFlags": (), + "QPlainTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QPlainTextEdit.toPlainText": (), + "QPlainTextEdit.undo": (), + "QPlainTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QPlainTextEdit.wordWrapMode": (), + "QPlainTextEdit.zoomIn": ('int',), + "QPlainTextEdit.zoomInF": ('float',), + "QPlainTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QProgressBar: + "QProgressBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QProgressBar.alignment": (), + "QProgressBar.event": ('PySide2.QtCore.QEvent',), + "QProgressBar.format": (), + "QProgressBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionProgressBar',), + "QProgressBar.invertedAppearance": (), + "QProgressBar.isTextVisible": (), + "QProgressBar.maximum": (), + "QProgressBar.minimum": (), + "QProgressBar.minimumSizeHint": (), + "QProgressBar.orientation": (), + "QProgressBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QProgressBar.reset": (), + "QProgressBar.resetFormat": (), + "QProgressBar.setAlignment": ('PySide2.libpyside.Alignment',), + "QProgressBar.setFormat": ('str',), + "QProgressBar.setInvertedAppearance": ('bool',), + "QProgressBar.setMaximum": ('int',), + "QProgressBar.setMinimum": ('int',), + "QProgressBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QProgressBar.setRange": ('int', 'int'), + "QProgressBar.setTextDirection": ('PySide2.QtWidgets.QProgressBar.Direction',), + "QProgressBar.setTextVisible": ('bool',), + "QProgressBar.setValue": ('int',), + "QProgressBar.sizeHint": (), + "QProgressBar.text": (), + "QProgressBar.textDirection": (), + "QProgressBar.value": (), + + # class PySide2.QtWidgets.QProgressDialog: + "QProgressDialog.__init__": [('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('str', 'str', 'int', 'int', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QProgressDialog.autoClose": (), + "QProgressDialog.autoReset": (), + "QProgressDialog.cancel": (), + "QProgressDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QProgressDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QProgressDialog.forceShow": (), + "QProgressDialog.labelText": (), + "QProgressDialog.maximum": (), + "QProgressDialog.minimum": (), + "QProgressDialog.minimumDuration": (), + "QProgressDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QProgressDialog.reset": (), + "QProgressDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QProgressDialog.setAutoClose": ('bool',), + "QProgressDialog.setAutoReset": ('bool',), + "QProgressDialog.setBar": ('PySide2.QtWidgets.QProgressBar',), + "QProgressDialog.setCancelButton": ('PySide2.QtWidgets.QPushButton',), + "QProgressDialog.setCancelButtonText": ('str',), + "QProgressDialog.setLabel": ('PySide2.QtWidgets.QLabel',), + "QProgressDialog.setLabelText": ('str',), + "QProgressDialog.setMaximum": ('int',), + "QProgressDialog.setMinimum": ('int',), + "QProgressDialog.setMinimumDuration": ('int',), + "QProgressDialog.setRange": ('int', 'int'), + "QProgressDialog.setValue": ('int',), + "QProgressDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QProgressDialog.sizeHint": (), + "QProgressDialog.value": (), + "QProgressDialog.wasCanceled": (), + + # class PySide2.QtWidgets.QProxyStyle: + "QProxyStyle.__init__": [('PySide2.QtWidgets.QStyle',), ('str',)], + "QProxyStyle.baseStyle": (), + "QProxyStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.drawItemPixmap": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QProxyStyle.drawItemText": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QProxyStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.event": ('PySide2.QtCore.QEvent',), + "QProxyStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QProxyStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.itemPixmapRect": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QProxyStyle.itemTextRect": ('PySide2.QtGui.QFontMetrics', 'PySide2.QtCore.QRect', 'int', 'bool', 'str'), + "QProxyStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QProxyStyle.setBaseStyle": ('PySide2.QtWidgets.QStyle',), + "QProxyStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.standardPalette": (), + "QProxyStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QProxyStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QProxyStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QPushButton: + "QPushButton.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPushButton.autoDefault": (), + "QPushButton.event": ('PySide2.QtCore.QEvent',), + "QPushButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QPushButton.isDefault": (), + "QPushButton.isFlat": (), + "QPushButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPushButton.menu": (), + "QPushButton.minimumSizeHint": (), + "QPushButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPushButton.setAutoDefault": ('bool',), + "QPushButton.setDefault": ('bool',), + "QPushButton.setFlat": ('bool',), + "QPushButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QPushButton.showMenu": (), + "QPushButton.sizeHint": (), + + # class PySide2.QtWidgets.QRadioButton: + "QRadioButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QRadioButton.event": ('PySide2.QtCore.QEvent',), + "QRadioButton.hitButton": ('PySide2.QtCore.QPoint',), + "QRadioButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QRadioButton.minimumSizeHint": (), + "QRadioButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QRadioButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRadioButton.sizeHint": (), + + # class PySide2.QtWidgets.QRubberBand: + "QRubberBand.__init__": ('PySide2.QtWidgets.QRubberBand.Shape', 'PySide2.QtWidgets.QWidget'), + "QRubberBand.changeEvent": ('PySide2.QtCore.QEvent',), + "QRubberBand.event": ('PySide2.QtCore.QEvent',), + "QRubberBand.initStyleOption": ('PySide2.QtWidgets.QStyleOptionRubberBand',), + "QRubberBand.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRubberBand.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QRubberBand.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRubberBand.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QRubberBand.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QRubberBand.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRubberBand.shape": (), + "QRubberBand.showEvent": ('PySide2.QtGui.QShowEvent',), + + # class PySide2.QtWidgets.QScrollArea: + "QScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.alignment": (), + "QScrollArea.ensureVisible": ('int', 'int', 'int', 'int'), + "QScrollArea.ensureWidgetVisible": ('PySide2.QtWidgets.QWidget', 'int', 'int'), + "QScrollArea.event": ('PySide2.QtCore.QEvent',), + "QScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QScrollArea.focusNextPrevChild": ('bool',), + "QScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QScrollArea.scrollContentsBy": ('int', 'int'), + "QScrollArea.setAlignment": ('PySide2.libpyside.Alignment',), + "QScrollArea.setWidget": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.setWidgetResizable": ('bool',), + "QScrollArea.sizeHint": (), + "QScrollArea.takeWidget": (), + "QScrollArea.viewportSizeHint": (), + "QScrollArea.widget": (), + "QScrollArea.widgetResizable": (), + + # class PySide2.QtWidgets.QScrollBar: + "QScrollBar.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QScrollBar.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QScrollBar.event": ('PySide2.QtCore.QEvent',), + "QScrollBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QScrollBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QScrollBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QScrollBar.sizeHint": (), + "QScrollBar.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QScrollBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QScroller: + "QScroller.activeScrollers": (), + "QScroller.ensureVisible": [('PySide2.QtCore.QRectF', 'float', 'float'), ('PySide2.QtCore.QRectF', 'float', 'float', 'int')], + "QScroller.finalPosition": (), + "QScroller.grabGesture": ('PySide2.QtCore.QObject', 'PySide2.QtWidgets.QScroller.ScrollerGestureType'), + "QScroller.grabbedGesture": ('PySide2.QtCore.QObject',), + "QScroller.handleInput": ('PySide2.QtWidgets.QScroller.Input', 'PySide2.QtCore.QPointF', 'int'), + "QScroller.hasScroller": ('PySide2.QtCore.QObject',), + "QScroller.pixelPerMeter": (), + "QScroller.resendPrepareEvent": (), + "QScroller.scrollTo": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QPointF', 'int')], + "QScroller.scroller": ('PySide2.QtCore.QObject',), + "QScroller.scrollerProperties": (), + "QScroller.setScrollerProperties": ('PySide2.QtWidgets.QScrollerProperties',), + "QScroller.setSnapPositionsX": [('float', 'float'), ('list',)], + "QScroller.setSnapPositionsY": [('float', 'float'), ('list',)], + "QScroller.state": (), + "QScroller.stop": (), + "QScroller.target": (), + "QScroller.ungrabGesture": ('PySide2.QtCore.QObject',), + "QScroller.velocity": (), + + # class PySide2.QtWidgets.QScrollerProperties: + "QScrollerProperties.__init__": [(), ('PySide2.QtWidgets.QScrollerProperties',)], + "QScrollerProperties.__copy__": (), + "QScrollerProperties.scrollMetric": ('PySide2.QtWidgets.QScrollerProperties.ScrollMetric',), + "QScrollerProperties.setDefaultScrollerProperties": ('PySide2.QtWidgets.QScrollerProperties',), + "QScrollerProperties.setScrollMetric": ('PySide2.QtWidgets.QScrollerProperties.ScrollMetric', 'Any'), + "QScrollerProperties.unsetDefaultScrollerProperties": (), + + # class PySide2.QtWidgets.QShortcut: + "QShortcut.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'Callable', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtWidgets.QWidget',)], + "QShortcut.autoRepeat": (), + "QShortcut.context": (), + "QShortcut.event": ('PySide2.QtCore.QEvent',), + "QShortcut.id": (), + "QShortcut.isEnabled": (), + "QShortcut.key": (), + "QShortcut.parentWidget": (), + "QShortcut.setAutoRepeat": ('bool',), + "QShortcut.setContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QShortcut.setEnabled": ('bool',), + "QShortcut.setKey": ('PySide2.QtGui.QKeySequence',), + "QShortcut.setWhatsThis": ('str',), + "QShortcut.whatsThis": (), + + # class PySide2.QtWidgets.QSizeGrip: + "QSizeGrip.__init__": ('PySide2.QtWidgets.QWidget',), + "QSizeGrip.event": ('PySide2.QtCore.QEvent',), + "QSizeGrip.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QSizeGrip.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QSizeGrip.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QSizeGrip.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSizeGrip.setVisible": ('bool',), + "QSizeGrip.showEvent": ('PySide2.QtGui.QShowEvent',), + "QSizeGrip.sizeHint": (), + + # class PySide2.QtWidgets.QSizePolicy: + "QSizePolicy.__init__": [(), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QSizePolicy.__copy__": (), + "QSizePolicy.controlType": (), + "QSizePolicy.expandingDirections": (), + "QSizePolicy.hasHeightForWidth": (), + "QSizePolicy.hasWidthForHeight": (), + "QSizePolicy.horizontalPolicy": (), + "QSizePolicy.horizontalStretch": (), + "QSizePolicy.retainSizeWhenHidden": (), + "QSizePolicy.setControlType": ('PySide2.QtWidgets.QSizePolicy.ControlType',), + "QSizePolicy.setHeightForWidth": ('bool',), + "QSizePolicy.setHorizontalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setHorizontalStretch": ('int',), + "QSizePolicy.setRetainSizeWhenHidden": ('bool',), + "QSizePolicy.setVerticalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setVerticalStretch": ('int',), + "QSizePolicy.setWidthForHeight": ('bool',), + "QSizePolicy.transpose": (), + "QSizePolicy.transposed": (), + "QSizePolicy.verticalPolicy": (), + "QSizePolicy.verticalStretch": (), + + # class PySide2.QtWidgets.QSlider: + "QSlider.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSlider.event": ('PySide2.QtCore.QEvent',), + "QSlider.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QSlider.minimumSizeHint": (), + "QSlider.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSlider.setTickInterval": ('int',), + "QSlider.setTickPosition": ('PySide2.QtWidgets.QSlider.TickPosition',), + "QSlider.sizeHint": (), + "QSlider.tickInterval": (), + "QSlider.tickPosition": (), + + # class PySide2.QtWidgets.QSpacerItem: + "QSpacerItem.__init__": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.changeSize": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.expandingDirections": (), + "QSpacerItem.geometry": (), + "QSpacerItem.isEmpty": (), + "QSpacerItem.maximumSize": (), + "QSpacerItem.minimumSize": (), + "QSpacerItem.setGeometry": ('PySide2.QtCore.QRect',), + "QSpacerItem.sizeHint": (), + "QSpacerItem.sizePolicy": (), + "QSpacerItem.spacerItem": (), + + # class PySide2.QtWidgets.QSpinBox: + "QSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QSpinBox.cleanText": (), + "QSpinBox.displayIntegerBase": (), + "QSpinBox.event": ('PySide2.QtCore.QEvent',), + "QSpinBox.fixup": ('str',), + "QSpinBox.maximum": (), + "QSpinBox.minimum": (), + "QSpinBox.prefix": (), + "QSpinBox.setDisplayIntegerBase": ('int',), + "QSpinBox.setMaximum": ('int',), + "QSpinBox.setMinimum": ('int',), + "QSpinBox.setPrefix": ('str',), + "QSpinBox.setRange": ('int', 'int'), + "QSpinBox.setSingleStep": ('int',), + "QSpinBox.setSuffix": ('str',), + "QSpinBox.setValue": ('int',), + "QSpinBox.singleStep": (), + "QSpinBox.suffix": (), + "QSpinBox.textFromValue": ('int',), + "QSpinBox.validate": ('str', 'int'), + "QSpinBox.value": (), + "QSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QSplashScreen: + "QSplashScreen.__init__": [('PySide2.QtGui.QPixmap', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QPixmap', 'PySide2.libpyside.WindowFlags')], + "QSplashScreen.clearMessage": (), + "QSplashScreen.drawContents": ('PySide2.QtGui.QPainter',), + "QSplashScreen.event": ('PySide2.QtCore.QEvent',), + "QSplashScreen.finish": ('PySide2.QtWidgets.QWidget',), + "QSplashScreen.message": (), + "QSplashScreen.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplashScreen.pixmap": (), + "QSplashScreen.setPixmap": ('PySide2.QtGui.QPixmap',), + "QSplashScreen.showMessage": ('str', 'int', 'PySide2.QtGui.QColor'), + + # class PySide2.QtWidgets.QSplitter: + "QSplitter.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSplitter.addWidget": ('PySide2.QtWidgets.QWidget',), + "QSplitter.changeEvent": ('PySide2.QtCore.QEvent',), + "QSplitter.childEvent": ('PySide2.QtCore.QChildEvent',), + "QSplitter.childrenCollapsible": (), + "QSplitter.closestLegalPosition": ('int', 'int'), + "QSplitter.count": (), + "QSplitter.createHandle": (), + "QSplitter.event": ('PySide2.QtCore.QEvent',), + "QSplitter.getRange": ('int', 'int', 'int'), + "QSplitter.handle": ('int',), + "QSplitter.handleWidth": (), + "QSplitter.indexOf": ('PySide2.QtWidgets.QWidget',), + "QSplitter.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.isCollapsible": ('int',), + "QSplitter.minimumSizeHint": (), + "QSplitter.moveSplitter": ('int', 'int'), + "QSplitter.opaqueResize": (), + "QSplitter.orientation": (), + "QSplitter.refresh": (), + "QSplitter.replaceWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitter.restoreState": ('PySide2.QtCore.QByteArray',), + "QSplitter.saveState": (), + "QSplitter.setChildrenCollapsible": ('bool',), + "QSplitter.setCollapsible": ('int', 'bool'), + "QSplitter.setHandleWidth": ('int',), + "QSplitter.setOpaqueResize": ('bool',), + "QSplitter.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitter.setRubberBand": ('int',), + "QSplitter.setSizes": ('list',), + "QSplitter.setStretchFactor": ('int', 'int'), + "QSplitter.sizeHint": (), + "QSplitter.sizes": (), + "QSplitter.widget": ('int',), + + # class PySide2.QtWidgets.QSplitterHandle: + "QSplitterHandle.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QSplitter'), + "QSplitterHandle.closestLegalPosition": ('int',), + "QSplitterHandle.event": ('PySide2.QtCore.QEvent',), + "QSplitterHandle.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.moveSplitter": ('int',), + "QSplitterHandle.opaqueResize": (), + "QSplitterHandle.orientation": (), + "QSplitterHandle.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSplitterHandle.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitterHandle.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitterHandle.sizeHint": (), + "QSplitterHandle.splitter": (), + + # class PySide2.QtWidgets.QStackedLayout: + "QStackedLayout.__init__": [(), ('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QStackedLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QStackedLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.count": (), + "QStackedLayout.currentIndex": (), + "QStackedLayout.currentWidget": (), + "QStackedLayout.hasHeightForWidth": (), + "QStackedLayout.heightForWidth": ('int',), + "QStackedLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedLayout.itemAt": ('int',), + "QStackedLayout.minimumSize": (), + "QStackedLayout.setCurrentIndex": ('int',), + "QStackedLayout.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QStackedLayout.setStackingMode": ('PySide2.QtWidgets.QStackedLayout.StackingMode',), + "QStackedLayout.sizeHint": (), + "QStackedLayout.stackingMode": (), + "QStackedLayout.takeAt": ('int',), + "QStackedLayout.widget": [(), ('int',)], + + # class PySide2.QtWidgets.QStackedWidget: + "QStackedWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.count": (), + "QStackedWidget.currentIndex": (), + "QStackedWidget.currentWidget": (), + "QStackedWidget.event": ('PySide2.QtCore.QEvent',), + "QStackedWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedWidget.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.setCurrentIndex": ('int',), + "QStackedWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.widget": ('int',), + + # class PySide2.QtWidgets.QStatusBar: + "QStatusBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.addPermanentWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.addWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.clearMessage": (), + "QStatusBar.currentMessage": (), + "QStatusBar.event": ('PySide2.QtCore.QEvent',), + "QStatusBar.hideOrShow": (), + "QStatusBar.insertPermanentWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.isSizeGripEnabled": (), + "QStatusBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QStatusBar.reformat": (), + "QStatusBar.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QStatusBar.setSizeGripEnabled": ('bool',), + "QStatusBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QStatusBar.showMessage": ('str', 'int'), + + # class PySide2.QtWidgets.QStyle: + "QStyle.__init__": (), + "QStyle.alignedRect": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.libpyside.Alignment', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QRect'), + "QStyle.combinedLayoutSpacing": ('PySide2.libpyside.ControlTypes', 'PySide2.libpyside.ControlTypes', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawItemPixmap": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.drawItemText": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QStyle.itemPixmapRect": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.itemTextRect": ('PySide2.QtGui.QFontMetrics', 'PySide2.QtCore.QRect', 'int', 'bool', 'str'), + "QStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.proxy": (), + "QStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QStyle.sliderPositionFromValue": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.sliderValueFromPosition": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.standardPalette": (), + "QStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.visualAlignment": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.libpyside.Alignment'), + "QStyle.visualPos": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QPoint'), + "QStyle.visualRect": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QRect'), + + # class PySide2.QtWidgets.QStyleFactory: + "QStyleFactory.__init__": (), + "QStyleFactory.create": ('str',), + "QStyleFactory.keys": (), + + # class PySide2.QtWidgets.QStyleHintReturn: + "QStyleHintReturn.__init__": ('int', 'int'), + + # class PySide2.QtWidgets.QStyleHintReturnMask: + "QStyleHintReturnMask.__init__": (), + + # class PySide2.QtWidgets.QStyleHintReturnVariant: + "QStyleHintReturnVariant.__init__": (), + + # class PySide2.QtWidgets.QStyleOption: + "QStyleOption.__init__": [('PySide2.QtWidgets.QStyleOption',), ('int', 'int')], + "QStyleOption.init": ('PySide2.QtWidgets.QWidget',), + "QStyleOption.initFrom": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QStyleOptionButton: + "QStyleOptionButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComboBox: + "QStyleOptionComboBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionComboBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComplex: + "QStyleOptionComplex.__init__": [('PySide2.QtWidgets.QStyleOptionComplex',), ('int', 'int')], + + # class PySide2.QtWidgets.QStyleOptionDockWidget: + "QStyleOptionDockWidget.__init__": [(), ('PySide2.QtWidgets.QStyleOptionDockWidget',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFocusRect: + "QStyleOptionFocusRect.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFocusRect',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFrame: + "QStyleOptionFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionGraphicsItem: + "QStyleOptionGraphicsItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGraphicsItem',), ('int',)], + "QStyleOptionGraphicsItem.levelOfDetailFromTransform": ('PySide2.QtGui.QTransform',), + + # class PySide2.QtWidgets.QStyleOptionGroupBox: + "QStyleOptionGroupBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGroupBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionHeader: + "QStyleOptionHeader.__init__": [(), ('PySide2.QtWidgets.QStyleOptionHeader',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionMenuItem: + "QStyleOptionMenuItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionMenuItem',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionProgressBar: + "QStyleOptionProgressBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionProgressBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionRubberBand: + "QStyleOptionRubberBand.__init__": [(), ('PySide2.QtWidgets.QStyleOptionRubberBand',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSizeGrip: + "QStyleOptionSizeGrip.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSizeGrip',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSlider: + "QStyleOptionSlider.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSlider',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSpinBox: + "QStyleOptionSpinBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSpinBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTab: + "QStyleOptionTab.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTab',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabBarBase: + "QStyleOptionTabBarBase.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabBarBase',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabWidgetFrame: + "QStyleOptionTabWidgetFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTitleBar: + "QStyleOptionTitleBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTitleBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBar: + "QStyleOptionToolBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBox: + "QStyleOptionToolBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolButton: + "QStyleOptionToolButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionViewItem: + "QStyleOptionViewItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionViewItem',), ('int',)], + "QStyleOptionViewItem.__copy__": (), + + # class PySide2.QtWidgets.QStylePainter: + "QStylePainter.__init__": [(), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.begin": [('PySide2.QtGui.QPaintDevice',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex'), + "QStylePainter.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.drawItemPixmap": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStylePainter.drawItemText": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStylePainter.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.style": (), + + # class PySide2.QtWidgets.QStyledItemDelegate: + "QStyledItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QStyledItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.displayText": ('Any', 'PySide2.QtCore.QLocale'), + "QStyledItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStyledItemDelegate.initStyleOption": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.itemEditorFactory": (), + "QStyledItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QStyledItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QSwipeGesture: + "QSwipeGesture.__init__": ('PySide2.QtCore.QObject',), + "QSwipeGesture.horizontalDirection": (), + "QSwipeGesture.setSwipeAngle": ('float',), + "QSwipeGesture.swipeAngle": (), + "QSwipeGesture.verticalDirection": (), + + # class PySide2.QtWidgets.QSystemTrayIcon: + "QSystemTrayIcon.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'PySide2.QtCore.QObject')], + "QSystemTrayIcon.contextMenu": (), + "QSystemTrayIcon.event": ('PySide2.QtCore.QEvent',), + "QSystemTrayIcon.geometry": (), + "QSystemTrayIcon.hide": (), + "QSystemTrayIcon.icon": (), + "QSystemTrayIcon.isSystemTrayAvailable": (), + "QSystemTrayIcon.isVisible": (), + "QSystemTrayIcon.setContextMenu": ('PySide2.QtWidgets.QMenu',), + "QSystemTrayIcon.setIcon": ('PySide2.QtGui.QIcon',), + "QSystemTrayIcon.setToolTip": ('str',), + "QSystemTrayIcon.setVisible": ('bool',), + "QSystemTrayIcon.show": (), + "QSystemTrayIcon.showMessage": [('str', 'str', 'PySide2.QtGui.QIcon', 'int'), ('str', 'str', 'PySide2.QtWidgets.QSystemTrayIcon.MessageIcon', 'int')], + "QSystemTrayIcon.supportsMessages": (), + "QSystemTrayIcon.toolTip": (), + + # class PySide2.QtWidgets.QTabBar: + "QTabBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabBar.accessibleTabName": ('int',), + "QTabBar.addTab": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QTabBar.autoHide": (), + "QTabBar.changeCurrentOnDrag": (), + "QTabBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabBar.count": (), + "QTabBar.currentIndex": (), + "QTabBar.documentMode": (), + "QTabBar.drawBase": (), + "QTabBar.elideMode": (), + "QTabBar.event": ('PySide2.QtCore.QEvent',), + "QTabBar.expanding": (), + "QTabBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QTabBar.iconSize": (), + "QTabBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTab', 'int'), + "QTabBar.insertTab": [('int', 'PySide2.QtGui.QIcon', 'str'), ('int', 'str')], + "QTabBar.isMovable": (), + "QTabBar.isTabEnabled": ('int',), + "QTabBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabBar.minimumSizeHint": (), + "QTabBar.minimumTabSizeHint": ('int',), + "QTabBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.moveTab": ('int', 'int'), + "QTabBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabBar.removeTab": ('int',), + "QTabBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabBar.selectionBehaviorOnRemove": (), + "QTabBar.setAccessibleTabName": ('int', 'str'), + "QTabBar.setAutoHide": ('bool',), + "QTabBar.setChangeCurrentOnDrag": ('bool',), + "QTabBar.setCurrentIndex": ('int',), + "QTabBar.setDocumentMode": ('bool',), + "QTabBar.setDrawBase": ('bool',), + "QTabBar.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabBar.setExpanding": ('bool',), + "QTabBar.setIconSize": ('PySide2.QtCore.QSize',), + "QTabBar.setMovable": ('bool',), + "QTabBar.setSelectionBehaviorOnRemove": ('PySide2.QtWidgets.QTabBar.SelectionBehavior',), + "QTabBar.setShape": ('PySide2.QtWidgets.QTabBar.Shape',), + "QTabBar.setTabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition', 'PySide2.QtWidgets.QWidget'), + "QTabBar.setTabData": ('int', 'Any'), + "QTabBar.setTabEnabled": ('int', 'bool'), + "QTabBar.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabBar.setTabText": ('int', 'str'), + "QTabBar.setTabTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTabBar.setTabToolTip": ('int', 'str'), + "QTabBar.setTabWhatsThis": ('int', 'str'), + "QTabBar.setTabsClosable": ('bool',), + "QTabBar.setUsesScrollButtons": ('bool',), + "QTabBar.shape": (), + "QTabBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabBar.sizeHint": (), + "QTabBar.tabAt": ('PySide2.QtCore.QPoint',), + "QTabBar.tabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition'), + "QTabBar.tabData": ('int',), + "QTabBar.tabIcon": ('int',), + "QTabBar.tabInserted": ('int',), + "QTabBar.tabLayoutChange": (), + "QTabBar.tabRect": ('int',), + "QTabBar.tabRemoved": ('int',), + "QTabBar.tabSizeHint": ('int',), + "QTabBar.tabText": ('int',), + "QTabBar.tabTextColor": ('int',), + "QTabBar.tabToolTip": ('int',), + "QTabBar.tabWhatsThis": ('int',), + "QTabBar.tabsClosable": (), + "QTabBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTabBar.usesScrollButtons": (), + "QTabBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QTabWidget: + "QTabWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.addTab": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabWidget.clear": (), + "QTabWidget.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QTabWidget.count": (), + "QTabWidget.currentIndex": (), + "QTabWidget.currentWidget": (), + "QTabWidget.documentMode": (), + "QTabWidget.elideMode": (), + "QTabWidget.event": ('PySide2.QtCore.QEvent',), + "QTabWidget.hasHeightForWidth": (), + "QTabWidget.heightForWidth": ('int',), + "QTabWidget.iconSize": (), + "QTabWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), + "QTabWidget.insertTab": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.isMovable": (), + "QTabWidget.isTabEnabled": ('int',), + "QTabWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabWidget.minimumSizeHint": (), + "QTabWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabWidget.removeTab": ('int',), + "QTabWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabWidget.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QTabWidget.setCurrentIndex": ('int',), + "QTabWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.setDocumentMode": ('bool',), + "QTabWidget.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabWidget.setIconSize": ('PySide2.QtCore.QSize',), + "QTabWidget.setMovable": ('bool',), + "QTabWidget.setTabBar": ('PySide2.QtWidgets.QTabBar',), + "QTabWidget.setTabBarAutoHide": ('bool',), + "QTabWidget.setTabEnabled": ('int', 'bool'), + "QTabWidget.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabWidget.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QTabWidget.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QTabWidget.setTabText": ('int', 'str'), + "QTabWidget.setTabToolTip": ('int', 'str'), + "QTabWidget.setTabWhatsThis": ('int', 'str'), + "QTabWidget.setTabsClosable": ('bool',), + "QTabWidget.setUsesScrollButtons": ('bool',), + "QTabWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabWidget.sizeHint": (), + "QTabWidget.tabBar": (), + "QTabWidget.tabBarAutoHide": (), + "QTabWidget.tabIcon": ('int',), + "QTabWidget.tabInserted": ('int',), + "QTabWidget.tabPosition": (), + "QTabWidget.tabRemoved": ('int',), + "QTabWidget.tabShape": (), + "QTabWidget.tabText": ('int',), + "QTabWidget.tabToolTip": ('int',), + "QTabWidget.tabWhatsThis": ('int',), + "QTabWidget.tabsClosable": (), + "QTabWidget.usesScrollButtons": (), + "QTabWidget.widget": ('int',), + + # class PySide2.QtWidgets.QTableView: + "QTableView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTableView.clearSpans": (), + "QTableView.columnAt": ('int',), + "QTableView.columnCountChanged": ('int', 'int'), + "QTableView.columnMoved": ('int', 'int', 'int'), + "QTableView.columnResized": ('int', 'int', 'int'), + "QTableView.columnSpan": ('int', 'int'), + "QTableView.columnViewportPosition": ('int',), + "QTableView.columnWidth": ('int',), + "QTableView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTableView.doItemsLayout": (), + "QTableView.gridStyle": (), + "QTableView.hideColumn": ('int',), + "QTableView.hideRow": ('int',), + "QTableView.horizontalHeader": (), + "QTableView.horizontalOffset": (), + "QTableView.horizontalScrollbarAction": ('int',), + "QTableView.indexAt": ('PySide2.QtCore.QPoint',), + "QTableView.isColumnHidden": ('int',), + "QTableView.isCornerButtonEnabled": (), + "QTableView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTableView.isRowHidden": ('int',), + "QTableView.isSortingEnabled": (), + "QTableView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QTableView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTableView.resizeColumnToContents": ('int',), + "QTableView.resizeColumnsToContents": (), + "QTableView.resizeRowToContents": ('int',), + "QTableView.resizeRowsToContents": (), + "QTableView.rowAt": ('int',), + "QTableView.rowCountChanged": ('int', 'int'), + "QTableView.rowHeight": ('int',), + "QTableView.rowMoved": ('int', 'int', 'int'), + "QTableView.rowResized": ('int', 'int', 'int'), + "QTableView.rowSpan": ('int', 'int'), + "QTableView.rowViewportPosition": ('int',), + "QTableView.scrollContentsBy": ('int', 'int'), + "QTableView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableView.selectColumn": ('int',), + "QTableView.selectRow": ('int',), + "QTableView.selectedIndexes": (), + "QTableView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTableView.setColumnHidden": ('int', 'bool'), + "QTableView.setColumnWidth": ('int', 'int'), + "QTableView.setCornerButtonEnabled": ('bool',), + "QTableView.setGridStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QTableView.setHorizontalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTableView.setRowHeight": ('int', 'int'), + "QTableView.setRowHidden": ('int', 'bool'), + "QTableView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QTableView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTableView.setShowGrid": ('bool',), + "QTableView.setSortingEnabled": ('bool',), + "QTableView.setSpan": ('int', 'int', 'int', 'int'), + "QTableView.setVerticalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setWordWrap": ('bool',), + "QTableView.showColumn": ('int',), + "QTableView.showGrid": (), + "QTableView.showRow": ('int',), + "QTableView.sizeHintForColumn": ('int',), + "QTableView.sizeHintForRow": ('int',), + "QTableView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTableView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTableView.updateGeometries": (), + "QTableView.verticalHeader": (), + "QTableView.verticalOffset": (), + "QTableView.verticalScrollbarAction": ('int',), + "QTableView.viewOptions": (), + "QTableView.viewportSizeHint": (), + "QTableView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTableView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTableView.wordWrap": (), + + # class PySide2.QtWidgets.QTableWidget: + "QTableWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'int', 'PySide2.QtWidgets.QWidget')], + "QTableWidget.cellWidget": ('int', 'int'), + "QTableWidget.clear": (), + "QTableWidget.clearContents": (), + "QTableWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.column": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.columnCount": (), + "QTableWidget.currentColumn": (), + "QTableWidget.currentItem": (), + "QTableWidget.currentRow": (), + "QTableWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTableWidget.dropMimeData": ('int', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTableWidget.editItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.event": ('PySide2.QtCore.QEvent',), + "QTableWidget.findItems": ('str', 'PySide2.libpyside.MatchFlags'), + "QTableWidget.horizontalHeaderItem": ('int',), + "QTableWidget.indexFromItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.insertColumn": ('int',), + "QTableWidget.insertRow": ('int',), + "QTableWidget.isItemSelected": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.isPersistentEditorOpen": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.isSortingEnabled": (), + "QTableWidget.item": ('int', 'int'), + "QTableWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTableWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTableWidget.itemPrototype": (), + "QTableWidget.items": ('PySide2.QtCore.QMimeData',), + "QTableWidget.mimeData": ('list',), + "QTableWidget.mimeTypes": (), + "QTableWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.removeCellWidget": ('int', 'int'), + "QTableWidget.removeColumn": ('int',), + "QTableWidget.removeRow": ('int',), + "QTableWidget.row": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.rowCount": (), + "QTableWidget.scrollToItem": ('PySide2.QtWidgets.QTableWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableWidget.selectedItems": (), + "QTableWidget.selectedRanges": (), + "QTableWidget.setCellWidget": ('int', 'int', 'PySide2.QtWidgets.QWidget'), + "QTableWidget.setColumnCount": ('int',), + "QTableWidget.setCurrentCell": [('int', 'int'), ('int', 'int', 'PySide2.libpyside.SelectionFlags')], + "QTableWidget.setCurrentItem": [('PySide2.QtWidgets.QTableWidgetItem',), ('PySide2.QtWidgets.QTableWidgetItem', 'PySide2.libpyside.SelectionFlags')], + "QTableWidget.setHorizontalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setHorizontalHeaderLabels": ('List[str]',), + "QTableWidget.setItem": ('int', 'int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setItemPrototype": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.setItemSelected": ('PySide2.QtWidgets.QTableWidgetItem', 'bool'), + "QTableWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableWidget.setRangeSelected": ('PySide2.QtWidgets.QTableWidgetSelectionRange', 'bool'), + "QTableWidget.setRowCount": ('int',), + "QTableWidget.setSortingEnabled": ('bool',), + "QTableWidget.setVerticalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setVerticalHeaderLabels": ('List[str]',), + "QTableWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTableWidget.supportedDropActions": (), + "QTableWidget.takeHorizontalHeaderItem": ('int',), + "QTableWidget.takeItem": ('int', 'int'), + "QTableWidget.takeVerticalHeaderItem": ('int',), + "QTableWidget.verticalHeaderItem": ('int',), + "QTableWidget.visualColumn": ('int',), + "QTableWidget.visualItemRect": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.visualRow": ('int',), + + # class PySide2.QtWidgets.QTableWidgetItem: + "QTableWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'int'), ('PySide2.QtWidgets.QTableWidgetItem',), ('int',), ('str', 'int')], + "QTableWidgetItem.background": (), + "QTableWidgetItem.backgroundColor": (), + "QTableWidgetItem.checkState": (), + "QTableWidgetItem.clone": (), + "QTableWidgetItem.column": (), + "QTableWidgetItem.data": ('int',), + "QTableWidgetItem.flags": (), + "QTableWidgetItem.font": (), + "QTableWidgetItem.foreground": (), + "QTableWidgetItem.icon": (), + "QTableWidgetItem.isSelected": (), + "QTableWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTableWidgetItem.row": (), + "QTableWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QTableWidgetItem.setData": ('int', 'Any'), + "QTableWidgetItem.setFlags": ('PySide2.libpyside.ItemFlags',), + "QTableWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QTableWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QTableWidgetItem.setSelected": ('bool',), + "QTableWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QTableWidgetItem.setStatusTip": ('str',), + "QTableWidgetItem.setText": ('str',), + "QTableWidgetItem.setTextAlignment": ('int',), + "QTableWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setToolTip": ('str',), + "QTableWidgetItem.setWhatsThis": ('str',), + "QTableWidgetItem.sizeHint": (), + "QTableWidgetItem.statusTip": (), + "QTableWidgetItem.tableWidget": (), + "QTableWidgetItem.text": (), + "QTableWidgetItem.textAlignment": (), + "QTableWidgetItem.textColor": (), + "QTableWidgetItem.toolTip": (), + "QTableWidgetItem.type": (), + "QTableWidgetItem.whatsThis": (), + "QTableWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTableWidgetSelectionRange: + "QTableWidgetSelectionRange.__init__": [(), ('PySide2.QtWidgets.QTableWidgetSelectionRange',), ('int', 'int', 'int', 'int')], + "QTableWidgetSelectionRange.__copy__": (), + "QTableWidgetSelectionRange.bottomRow": (), + "QTableWidgetSelectionRange.columnCount": (), + "QTableWidgetSelectionRange.leftColumn": (), + "QTableWidgetSelectionRange.rightColumn": (), + "QTableWidgetSelectionRange.rowCount": (), + "QTableWidgetSelectionRange.topRow": (), + + # class PySide2.QtWidgets.QTapAndHoldGesture: + "QTapAndHoldGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapAndHoldGesture.position": (), + "QTapAndHoldGesture.setPosition": ('PySide2.QtCore.QPointF',), + "QTapAndHoldGesture.setTimeout": ('int',), + "QTapAndHoldGesture.timeout": (), + + # class PySide2.QtWidgets.QTapGesture: + "QTapGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapGesture.position": (), + "QTapGesture.setPosition": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QTextBrowser: + "QTextBrowser.__init__": ('PySide2.QtWidgets.QWidget',), + "QTextBrowser.backward": (), + "QTextBrowser.backwardHistoryCount": (), + "QTextBrowser.clearHistory": (), + "QTextBrowser.event": ('PySide2.QtCore.QEvent',), + "QTextBrowser.focusNextPrevChild": ('bool',), + "QTextBrowser.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextBrowser.forward": (), + "QTextBrowser.forwardHistoryCount": (), + "QTextBrowser.historyTitle": ('int',), + "QTextBrowser.historyUrl": ('int',), + "QTextBrowser.home": (), + "QTextBrowser.isBackwardAvailable": (), + "QTextBrowser.isForwardAvailable": (), + "QTextBrowser.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextBrowser.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextBrowser.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.openExternalLinks": (), + "QTextBrowser.openLinks": (), + "QTextBrowser.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextBrowser.reload": (), + "QTextBrowser.searchPaths": (), + "QTextBrowser.setOpenExternalLinks": ('bool',), + "QTextBrowser.setOpenLinks": ('bool',), + "QTextBrowser.setSearchPaths": ('List[str]',), + "QTextBrowser.setSource": ('PySide2.QtCore.QUrl',), + "QTextBrowser.source": (), + + # class PySide2.QtWidgets.QTextEdit: + "QTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QTextEdit.acceptRichText": (), + "QTextEdit.alignment": (), + "QTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QTextEdit.append": ('str',), + "QTextEdit.autoFormatting": (), + "QTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.canPaste": (), + "QTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QTextEdit.clear": (), + "QTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QTextEdit.copy": (), + "QTextEdit.createMimeDataFromSelection": (), + "QTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QTextEdit.currentCharFormat": (), + "QTextEdit.currentFont": (), + "QTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextEdit.cursorWidth": (), + "QTextEdit.cut": (), + "QTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.document": (), + "QTextEdit.documentTitle": (), + "QTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTextEdit.ensureCursorVisible": (), + "QTextEdit.event": ('PySide2.QtCore.QEvent',), + "QTextEdit.extraSelections": (), + "QTextEdit.find": [('PySide2.QtCore.QRegExp', 'PySide2.libpyside.FindFlags'), ('int',), ('str', 'PySide2.libpyside.FindFlags')], + "QTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.focusNextPrevChild": ('bool',), + "QTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.fontFamily": (), + "QTextEdit.fontItalic": (), + "QTextEdit.fontPointSize": (), + "QTextEdit.fontUnderline": (), + "QTextEdit.fontWeight": (), + "QTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.insertHtml": ('str',), + "QTextEdit.insertPlainText": ('str',), + "QTextEdit.isReadOnly": (), + "QTextEdit.isUndoRedoEnabled": (), + "QTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.lineWrapColumnOrWidth": (), + "QTextEdit.lineWrapMode": (), + "QTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextEdit.overwriteMode": (), + "QTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextEdit.paste": (), + "QTextEdit.placeholderText": (), + "QTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextEdit.redo": (), + "QTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTextEdit.scrollContentsBy": ('int', 'int'), + "QTextEdit.scrollToAnchor": ('str',), + "QTextEdit.selectAll": (), + "QTextEdit.setAcceptRichText": ('bool',), + "QTextEdit.setAlignment": ('PySide2.libpyside.Alignment',), + "QTextEdit.setAutoFormatting": ('PySide2.libpyside.AutoFormatting',), + "QTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.setCurrentFont": ('PySide2.QtGui.QFont',), + "QTextEdit.setCursorWidth": ('int',), + "QTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QTextEdit.setDocumentTitle": ('str',), + "QTextEdit.setExtraSelections": ('list',), + "QTextEdit.setFontFamily": ('str',), + "QTextEdit.setFontItalic": ('bool',), + "QTextEdit.setFontPointSize": ('float',), + "QTextEdit.setFontUnderline": ('bool',), + "QTextEdit.setFontWeight": ('int',), + "QTextEdit.setHtml": ('str',), + "QTextEdit.setLineWrapColumnOrWidth": ('int',), + "QTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QTextEdit.LineWrapMode',), + "QTextEdit.setOverwriteMode": ('bool',), + "QTextEdit.setPlaceholderText": ('str',), + "QTextEdit.setPlainText": ('str',), + "QTextEdit.setReadOnly": ('bool',), + "QTextEdit.setTabChangesFocus": ('bool',), + "QTextEdit.setTabStopDistance": ('float',), + "QTextEdit.setTabStopWidth": ('int',), + "QTextEdit.setText": ('str',), + "QTextEdit.setTextBackgroundColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.setTextInteractionFlags": ('PySide2.libpyside.TextInteractionFlags',), + "QTextEdit.setUndoRedoEnabled": ('bool',), + "QTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTextEdit.tabChangesFocus": (), + "QTextEdit.tabStopDistance": (), + "QTextEdit.tabStopWidth": (), + "QTextEdit.textBackgroundColor": (), + "QTextEdit.textColor": (), + "QTextEdit.textCursor": (), + "QTextEdit.textInteractionFlags": (), + "QTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTextEdit.toHtml": (), + "QTextEdit.toPlainText": (), + "QTextEdit.undo": (), + "QTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QTextEdit.wordWrapMode": (), + "QTextEdit.zoomIn": ('int',), + "QTextEdit.zoomInF": ('float',), + "QTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QTileRules: + "QTileRules.__init__": [('PySide2.QtCore.Qt.TileRule',), ('PySide2.QtCore.Qt.TileRule', 'PySide2.QtCore.Qt.TileRule'), ('PySide2.QtWidgets.QTileRules',)], + "QTileRules.__copy__": (), + + # class PySide2.QtWidgets.QTimeEdit: + "QTimeEdit.__init__": [('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QToolBar: + "QToolBar.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QToolBar.actionAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QToolBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QToolBar.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str')], + "QToolBar.addSeparator": (), + "QToolBar.addWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBar.allowedAreas": (), + "QToolBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBar.clear": (), + "QToolBar.event": ('PySide2.QtCore.QEvent',), + "QToolBar.iconSize": (), + "QToolBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolBar',), + "QToolBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QToolBar.insertWidget": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget'), + "QToolBar.isAreaAllowed": ('PySide2.QtCore.Qt.ToolBarArea',), + "QToolBar.isFloatable": (), + "QToolBar.isFloating": (), + "QToolBar.isMovable": (), + "QToolBar.orientation": (), + "QToolBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolBar.setAllowedAreas": ('PySide2.libpyside.ToolBarAreas',), + "QToolBar.setFloatable": ('bool',), + "QToolBar.setIconSize": ('PySide2.QtCore.QSize',), + "QToolBar.setMovable": ('bool',), + "QToolBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QToolBar.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolBar.toggleViewAction": (), + "QToolBar.toolButtonStyle": (), + "QToolBar.widgetForAction": ('PySide2.QtWidgets.QAction',), + + # class PySide2.QtWidgets.QToolBox: + "QToolBox.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QToolBox.addItem": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBox.count": (), + "QToolBox.currentIndex": (), + "QToolBox.currentWidget": (), + "QToolBox.event": ('PySide2.QtCore.QEvent',), + "QToolBox.indexOf": ('PySide2.QtWidgets.QWidget',), + "QToolBox.insertItem": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.isItemEnabled": ('int',), + "QToolBox.itemIcon": ('int',), + "QToolBox.itemInserted": ('int',), + "QToolBox.itemRemoved": ('int',), + "QToolBox.itemText": ('int',), + "QToolBox.itemToolTip": ('int',), + "QToolBox.removeItem": ('int',), + "QToolBox.setCurrentIndex": ('int',), + "QToolBox.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBox.setItemEnabled": ('int', 'bool'), + "QToolBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QToolBox.setItemText": ('int', 'str'), + "QToolBox.setItemToolTip": ('int', 'str'), + "QToolBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QToolBox.widget": ('int',), + + # class PySide2.QtWidgets.QToolButton: + "QToolButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QToolButton.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolButton.arrowType": (), + "QToolButton.autoRaise": (), + "QToolButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.defaultAction": (), + "QToolButton.enterEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.event": ('PySide2.QtCore.QEvent',), + "QToolButton.hitButton": ('PySide2.QtCore.QPoint',), + "QToolButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolButton',), + "QToolButton.leaveEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.menu": (), + "QToolButton.minimumSizeHint": (), + "QToolButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.nextCheckState": (), + "QToolButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolButton.popupMode": (), + "QToolButton.setArrowType": ('PySide2.QtCore.Qt.ArrowType',), + "QToolButton.setAutoRaise": ('bool',), + "QToolButton.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QToolButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QToolButton.setPopupMode": ('PySide2.QtWidgets.QToolButton.ToolButtonPopupMode',), + "QToolButton.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolButton.showMenu": (), + "QToolButton.sizeHint": (), + "QToolButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QToolButton.toolButtonStyle": (), + + # class PySide2.QtWidgets.QToolTip: + "QToolTip.font": (), + "QToolTip.hideText": (), + "QToolTip.isVisible": (), + "QToolTip.palette": (), + "QToolTip.setFont": ('PySide2.QtGui.QFont',), + "QToolTip.setPalette": ('PySide2.QtGui.QPalette',), + "QToolTip.showText": [('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect', 'int')], + "QToolTip.text": (), + + # class PySide2.QtWidgets.QTreeView: + "QTreeView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeView.allColumnsShowFocus": (), + "QTreeView.autoExpandDelay": (), + "QTreeView.collapse": ('PySide2.QtCore.QModelIndex',), + "QTreeView.collapseAll": (), + "QTreeView.columnAt": ('int',), + "QTreeView.columnCountChanged": ('int', 'int'), + "QTreeView.columnMoved": (), + "QTreeView.columnResized": ('int', 'int', 'int'), + "QTreeView.columnViewportPosition": ('int',), + "QTreeView.columnWidth": ('int',), + "QTreeView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTreeView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QTreeView.doItemsLayout": (), + "QTreeView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTreeView.drawBranches": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawRow": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawTree": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QRegion'), + "QTreeView.expand": ('PySide2.QtCore.QModelIndex',), + "QTreeView.expandAll": (), + "QTreeView.expandToDepth": ('int',), + "QTreeView.expandsOnDoubleClick": (), + "QTreeView.header": (), + "QTreeView.hideColumn": ('int',), + "QTreeView.horizontalOffset": (), + "QTreeView.horizontalScrollbarAction": ('int',), + "QTreeView.indentation": (), + "QTreeView.indexAbove": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexAt": ('PySide2.QtCore.QPoint',), + "QTreeView.indexBelow": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexRowSizeHint": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isAnimated": (), + "QTreeView.isColumnHidden": ('int',), + "QTreeView.isExpanded": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isHeaderHidden": (), + "QTreeView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isRowHidden": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isSortingEnabled": (), + "QTreeView.itemsExpandable": (), + "QTreeView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTreeView.keyboardSearch": ('str',), + "QTreeView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'PySide2.libpyside.KeyboardModifiers'), + "QTreeView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTreeView.reexpand": (), + "QTreeView.reset": (), + "QTreeView.resetIndentation": (), + "QTreeView.resizeColumnToContents": ('int',), + "QTreeView.rootIsDecorated": (), + "QTreeView.rowHeight": ('PySide2.QtCore.QModelIndex',), + "QTreeView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.scrollContentsBy": ('int', 'int'), + "QTreeView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeView.selectAll": (), + "QTreeView.selectedIndexes": (), + "QTreeView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTreeView.setAllColumnsShowFocus": ('bool',), + "QTreeView.setAnimated": ('bool',), + "QTreeView.setAutoExpandDelay": ('int',), + "QTreeView.setColumnHidden": ('int', 'bool'), + "QTreeView.setColumnWidth": ('int', 'int'), + "QTreeView.setExpanded": ('PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setExpandsOnDoubleClick": ('bool',), + "QTreeView.setFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTreeView.setHeaderHidden": ('bool',), + "QTreeView.setIndentation": ('int',), + "QTreeView.setItemsExpandable": ('bool',), + "QTreeView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeView.setRootIsDecorated": ('bool',), + "QTreeView.setRowHidden": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setSelection": ('PySide2.QtCore.QRect', 'PySide2.libpyside.SelectionFlags'), + "QTreeView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeView.setSortingEnabled": ('bool',), + "QTreeView.setTreePosition": ('int',), + "QTreeView.setUniformRowHeights": ('bool',), + "QTreeView.setWordWrap": ('bool',), + "QTreeView.showColumn": ('int',), + "QTreeView.sizeHintForColumn": ('int',), + "QTreeView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTreeView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTreeView.treePosition": (), + "QTreeView.uniformRowHeights": (), + "QTreeView.updateGeometries": (), + "QTreeView.verticalOffset": (), + "QTreeView.verticalScrollbarValueChanged": ('int',), + "QTreeView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QTreeView.viewportSizeHint": (), + "QTreeView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTreeView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTreeView.wordWrap": (), + + # class PySide2.QtWidgets.QTreeWidget: + "QTreeWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeWidget.addTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.addTopLevelItems": ('list',), + "QTreeWidget.clear": (), + "QTreeWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.collapseItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.columnCount": (), + "QTreeWidget.currentColumn": (), + "QTreeWidget.currentItem": (), + "QTreeWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTreeWidget.dropMimeData": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTreeWidget.editItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.event": ('PySide2.QtCore.QEvent',), + "QTreeWidget.expandItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.findItems": ('str', 'PySide2.libpyside.MatchFlags', 'int'), + "QTreeWidget.headerItem": (), + "QTreeWidget.indexFromItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.indexOfTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.insertTopLevelItem": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidget.insertTopLevelItems": ('int', 'list'), + "QTreeWidget.invisibleRootItem": (), + "QTreeWidget.isFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isPersistentEditorOpen": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.itemAbove": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTreeWidget.itemBelow": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeWidget.itemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.items": ('PySide2.QtCore.QMimeData',), + "QTreeWidget.mimeData": ('list',), + "QTreeWidget.mimeTypes": (), + "QTreeWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.removeItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.scrollToItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeWidget.selectedItems": (), + "QTreeWidget.setColumnCount": ('int',), + "QTreeWidget.setCurrentItem": [('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.libpyside.SelectionFlags')], + "QTreeWidget.setFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setHeaderItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.setHeaderLabel": ('str',), + "QTreeWidget.setHeaderLabels": ('List[str]',), + "QTreeWidget.setItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtWidgets.QWidget'), + "QTreeWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeWidget.sortColumn": (), + "QTreeWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidget.supportedDropActions": (), + "QTreeWidget.takeTopLevelItem": ('int',), + "QTreeWidget.topLevelItem": ('int',), + "QTreeWidget.topLevelItemCount": (), + "QTreeWidget.visualItemRect": ('PySide2.QtWidgets.QTreeWidgetItem',), + + # class PySide2.QtWidgets.QTreeWidgetItem: + "QTreeWidgetItem.__init__": [('List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('int',)], + "QTreeWidgetItem.addChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.addChildren": ('list',), + "QTreeWidgetItem.background": ('int',), + "QTreeWidgetItem.backgroundColor": ('int',), + "QTreeWidgetItem.checkState": ('int',), + "QTreeWidgetItem.child": ('int',), + "QTreeWidgetItem.childCount": (), + "QTreeWidgetItem.childIndicatorPolicy": (), + "QTreeWidgetItem.clone": (), + "QTreeWidgetItem.columnCount": (), + "QTreeWidgetItem.data": ('int', 'int'), + "QTreeWidgetItem.emitDataChanged": (), + "QTreeWidgetItem.flags": (), + "QTreeWidgetItem.font": ('int',), + "QTreeWidgetItem.foreground": ('int',), + "QTreeWidgetItem.icon": ('int',), + "QTreeWidgetItem.indexOfChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.insertChild": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidgetItem.insertChildren": ('int', 'list'), + "QTreeWidgetItem.isDisabled": (), + "QTreeWidgetItem.isExpanded": (), + "QTreeWidgetItem.isFirstColumnSpanned": (), + "QTreeWidgetItem.isHidden": (), + "QTreeWidgetItem.isSelected": (), + "QTreeWidgetItem.parent": (), + "QTreeWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTreeWidgetItem.removeChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.setBackground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setBackgroundColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setCheckState": ('int', 'PySide2.QtCore.Qt.CheckState'), + "QTreeWidgetItem.setChildIndicatorPolicy": ('PySide2.QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy',), + "QTreeWidgetItem.setData": ('int', 'int', 'Any'), + "QTreeWidgetItem.setDisabled": ('bool',), + "QTreeWidgetItem.setExpanded": ('bool',), + "QTreeWidgetItem.setFirstColumnSpanned": ('bool',), + "QTreeWidgetItem.setFlags": ('PySide2.libpyside.ItemFlags',), + "QTreeWidgetItem.setFont": ('int', 'PySide2.QtGui.QFont'), + "QTreeWidgetItem.setForeground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setHidden": ('bool',), + "QTreeWidgetItem.setIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTreeWidgetItem.setSelected": ('bool',), + "QTreeWidgetItem.setSizeHint": ('int', 'PySide2.QtCore.QSize'), + "QTreeWidgetItem.setStatusTip": ('int', 'str'), + "QTreeWidgetItem.setText": ('int', 'str'), + "QTreeWidgetItem.setTextAlignment": ('int', 'int'), + "QTreeWidgetItem.setTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setToolTip": ('int', 'str'), + "QTreeWidgetItem.setWhatsThis": ('int', 'str'), + "QTreeWidgetItem.sizeHint": ('int',), + "QTreeWidgetItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidgetItem.statusTip": ('int',), + "QTreeWidgetItem.takeChild": ('int',), + "QTreeWidgetItem.takeChildren": (), + "QTreeWidgetItem.text": ('int',), + "QTreeWidgetItem.textAlignment": ('int',), + "QTreeWidgetItem.textColor": ('int',), + "QTreeWidgetItem.toolTip": ('int',), + "QTreeWidgetItem.treeWidget": (), + "QTreeWidgetItem.type": (), + "QTreeWidgetItem.whatsThis": ('int',), + "QTreeWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTreeWidgetItemIterator: + "QTreeWidgetItemIterator.__init__": [('PySide2.QtWidgets.QTreeWidget', 'PySide2.libpyside.IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.libpyside.IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItemIterator',)], + "QTreeWidgetItemIterator.__copy__": (), + "QTreeWidgetItemIterator.value": (), + + # class PySide2.QtWidgets.QUndoCommand: + "QUndoCommand.__init__": [('PySide2.QtWidgets.QUndoCommand',), ('str', 'PySide2.QtWidgets.QUndoCommand')], + "QUndoCommand.actionText": (), + "QUndoCommand.child": ('int',), + "QUndoCommand.childCount": (), + "QUndoCommand.id": (), + "QUndoCommand.isObsolete": (), + "QUndoCommand.mergeWith": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoCommand.redo": (), + "QUndoCommand.setObsolete": ('bool',), + "QUndoCommand.setText": ('str',), + "QUndoCommand.text": (), + "QUndoCommand.undo": (), + + # class PySide2.QtWidgets.QUndoGroup: + "QUndoGroup.__init__": ('PySide2.QtCore.QObject',), + "QUndoGroup.activeStack": (), + "QUndoGroup.addStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.canRedo": (), + "QUndoGroup.canUndo": (), + "QUndoGroup.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.isClean": (), + "QUndoGroup.redo": (), + "QUndoGroup.redoText": (), + "QUndoGroup.removeStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.setActiveStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.stacks": (), + "QUndoGroup.undo": (), + "QUndoGroup.undoText": (), + + # class PySide2.QtWidgets.QUndoStack: + "QUndoStack.__init__": ('PySide2.QtCore.QObject',), + "QUndoStack.beginMacro": ('str',), + "QUndoStack.canRedo": (), + "QUndoStack.canUndo": (), + "QUndoStack.cleanIndex": (), + "QUndoStack.clear": (), + "QUndoStack.command": ('int',), + "QUndoStack.count": (), + "QUndoStack.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.endMacro": (), + "QUndoStack.index": (), + "QUndoStack.isActive": (), + "QUndoStack.isClean": (), + "QUndoStack.push": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoStack.redo": (), + "QUndoStack.redoText": (), + "QUndoStack.resetClean": (), + "QUndoStack.setActive": ('bool',), + "QUndoStack.setClean": (), + "QUndoStack.setIndex": ('int',), + "QUndoStack.setUndoLimit": ('int',), + "QUndoStack.text": ('int',), + "QUndoStack.undo": (), + "QUndoStack.undoLimit": (), + "QUndoStack.undoText": (), + + # class PySide2.QtWidgets.QUndoView: + "QUndoView.__init__": [('PySide2.QtWidgets.QUndoGroup', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QUndoStack', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QUndoView.cleanIcon": (), + "QUndoView.emptyLabel": (), + "QUndoView.group": (), + "QUndoView.setCleanIcon": ('PySide2.QtGui.QIcon',), + "QUndoView.setEmptyLabel": ('str',), + "QUndoView.setGroup": ('PySide2.QtWidgets.QUndoGroup',), + "QUndoView.setStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoView.stack": (), + + # class PySide2.QtWidgets.QVBoxLayout: + "QVBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QWhatsThis: + "QWhatsThis.createAction": ('PySide2.QtCore.QObject',), + "QWhatsThis.enterWhatsThisMode": (), + "QWhatsThis.hideText": (), + "QWhatsThis.inWhatsThisMode": (), + "QWhatsThis.leaveWhatsThisMode": (), + "QWhatsThis.showText": ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), + + # class PySide2.QtWidgets.QWidget: + "QWidget.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QWidget.acceptDrops": (), + "QWidget.accessibleDescription": (), + "QWidget.accessibleName": (), + "QWidget.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QWidget.actions": (), + "QWidget.activateWindow": (), + "QWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QWidget.addActions": ('list',), + "QWidget.adjustSize": (), + "QWidget.autoFillBackground": (), + "QWidget.backgroundRole": (), + "QWidget.backingStore": (), + "QWidget.baseSize": (), + "QWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QWidget.childAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.childrenRect": (), + "QWidget.childrenRegion": (), + "QWidget.clearFocus": (), + "QWidget.clearMask": (), + "QWidget.close": (), + "QWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QWidget.contentsMargins": (), + "QWidget.contentsRect": (), + "QWidget.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWidget.contextMenuPolicy": (), + "QWidget.create": ('int', 'bool', 'bool'), + "QWidget.createWinId": (), + "QWidget.createWindowContainer": ('PySide2.QtGui.QWindow', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QWidget.cursor": (), + "QWidget.destroy": ('bool', 'bool'), + "QWidget.devType": (), + "QWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWidget.effectiveWinId": (), + "QWidget.ensurePolished": (), + "QWidget.enterEvent": ('PySide2.QtCore.QEvent',), + "QWidget.event": ('PySide2.QtCore.QEvent',), + "QWidget.find": ('int',), + "QWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusNextChild": (), + "QWidget.focusNextPrevChild": ('bool',), + "QWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusPolicy": (), + "QWidget.focusPreviousChild": (), + "QWidget.focusProxy": (), + "QWidget.focusWidget": (), + "QWidget.font": (), + "QWidget.fontInfo": (), + "QWidget.fontMetrics": (), + "QWidget.foregroundRole": (), + "QWidget.frameGeometry": (), + "QWidget.frameSize": (), + "QWidget.geometry": (), + "QWidget.getContentsMargins": ('int', 'int', 'int', 'int'), + "QWidget.grab": ('PySide2.QtCore.QRect',), + "QWidget.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'PySide2.libpyside.GestureFlags'), + "QWidget.grabKeyboard": (), + "QWidget.grabMouse": [(), ('PySide2.QtGui.QCursor',)], + "QWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QWidget.graphicsEffect": (), + "QWidget.graphicsProxyWidget": (), + "QWidget.hasFocus": (), + "QWidget.hasHeightForWidth": (), + "QWidget.hasMouseTracking": (), + "QWidget.hasTabletTracking": (), + "QWidget.height": (), + "QWidget.heightForWidth": ('int',), + "QWidget.hide": (), + "QWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWidget.initPainter": ('PySide2.QtGui.QPainter',), + "QWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QWidget.inputMethodHints": (), + "QWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QWidget.internalWinId": (), + "QWidget.isActiveWindow": (), + "QWidget.isAncestorOf": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabled": (), + "QWidget.isEnabledTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabledToTLW": (), + "QWidget.isFullScreen": (), + "QWidget.isHidden": (), + "QWidget.isLeftToRight": (), + "QWidget.isMaximized": (), + "QWidget.isMinimized": (), + "QWidget.isModal": (), + "QWidget.isRightToLeft": (), + "QWidget.isTopLevel": (), + "QWidget.isVisible": (), + "QWidget.isVisibleTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isWindow": (), + "QWidget.isWindowModified": (), + "QWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyboardGrabber": (), + "QWidget.layout": (), + "QWidget.layoutDirection": (), + "QWidget.leaveEvent": ('PySide2.QtCore.QEvent',), + "QWidget.locale": (), + "QWidget.lower": (), + "QWidget.mapFrom": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapFromParent": ('PySide2.QtCore.QPoint',), + "QWidget.mapTo": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapToParent": ('PySide2.QtCore.QPoint',), + "QWidget.mask": (), + "QWidget.maximumHeight": (), + "QWidget.maximumSize": (), + "QWidget.maximumWidth": (), + "QWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QWidget.minimumHeight": (), + "QWidget.minimumSize": (), + "QWidget.minimumSizeHint": (), + "QWidget.minimumWidth": (), + "QWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseGrabber": (), + "QWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWidget.nativeParentWidget": (), + "QWidget.nextInFocusChain": (), + "QWidget.normalGeometry": (), + "QWidget.overrideWindowFlags": ('PySide2.libpyside.WindowFlags',), + "QWidget.overrideWindowState": ('PySide2.libpyside.WindowStates',), + "QWidget.paintEngine": (), + "QWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWidget.palette": (), + "QWidget.parentWidget": (), + "QWidget.pos": (), + "QWidget.previousInFocusChain": (), + "QWidget.raise_": (), + "QWidget.rect": (), + "QWidget.redirected": ('PySide2.QtCore.QPoint',), + "QWidget.releaseKeyboard": (), + "QWidget.releaseMouse": (), + "QWidget.releaseShortcut": ('int',), + "QWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QWidget.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'PySide2.libpyside.RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'PySide2.libpyside.RenderFlags')], + "QWidget.repaint": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWidget.restoreGeometry": ('PySide2.QtCore.QByteArray',), + "QWidget.saveGeometry": (), + "QWidget.scroll": [('int', 'int'), ('int', 'int', 'PySide2.QtCore.QRect')], + "QWidget.setAcceptDrops": ('bool',), + "QWidget.setAccessibleDescription": ('str',), + "QWidget.setAccessibleName": ('str',), + "QWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QWidget.setAutoFillBackground": ('bool',), + "QWidget.setBackgroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setBaseSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QWidget.setContextMenuPolicy": ('PySide2.QtCore.Qt.ContextMenuPolicy',), + "QWidget.setCursor": ('PySide2.QtGui.QCursor',), + "QWidget.setDisabled": ('bool',), + "QWidget.setEnabled": ('bool',), + "QWidget.setFixedHeight": ('int',), + "QWidget.setFixedSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setFixedWidth": ('int',), + "QWidget.setFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QWidget.setFocusProxy": ('PySide2.QtWidgets.QWidget',), + "QWidget.setFont": ('PySide2.QtGui.QFont',), + "QWidget.setForegroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWidget.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QWidget.setHidden": ('bool',), + "QWidget.setInputMethodHints": ('PySide2.libpyside.InputMethodHints',), + "QWidget.setLayout": ('PySide2.QtWidgets.QLayout',), + "QWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QWidget.setLocale": ('PySide2.QtCore.QLocale',), + "QWidget.setMask": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QRegion',)], + "QWidget.setMaximumHeight": ('int',), + "QWidget.setMaximumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMaximumWidth": ('int',), + "QWidget.setMinimumHeight": ('int',), + "QWidget.setMinimumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMinimumWidth": ('int',), + "QWidget.setMouseTracking": ('bool',), + "QWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QWidget.setParent": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QWidget.setShortcutEnabled": ('int', 'bool'), + "QWidget.setSizeIncrement": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy')], + "QWidget.setStatusTip": ('str',), + "QWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QWidget.setStyleSheet": ('str',), + "QWidget.setTabOrder": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), + "QWidget.setTabletTracking": ('bool',), + "QWidget.setToolTip": ('str',), + "QWidget.setToolTipDuration": ('int',), + "QWidget.setUpdatesEnabled": ('bool',), + "QWidget.setVisible": ('bool',), + "QWidget.setWhatsThis": ('str',), + "QWidget.setWindowFilePath": ('str',), + "QWidget.setWindowFlag": ('PySide2.QtCore.Qt.WindowType', 'bool'), + "QWidget.setWindowFlags": ('PySide2.libpyside.WindowFlags',), + "QWidget.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QWidget.setWindowIconText": ('str',), + "QWidget.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWidget.setWindowModified": ('bool',), + "QWidget.setWindowOpacity": ('float',), + "QWidget.setWindowRole": ('str',), + "QWidget.setWindowState": ('PySide2.libpyside.WindowStates',), + "QWidget.setWindowTitle": ('str',), + "QWidget.sharedPainter": (), + "QWidget.show": (), + "QWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWidget.showFullScreen": (), + "QWidget.showMaximized": (), + "QWidget.showMinimized": (), + "QWidget.showNormal": (), + "QWidget.size": (), + "QWidget.sizeHint": (), + "QWidget.sizeIncrement": (), + "QWidget.sizePolicy": (), + "QWidget.stackUnder": ('PySide2.QtWidgets.QWidget',), + "QWidget.statusTip": (), + "QWidget.style": (), + "QWidget.styleSheet": (), + "QWidget.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QWidget.toolTip": (), + "QWidget.toolTipDuration": (), + "QWidget.topLevelWidget": (), + "QWidget.underMouse": (), + "QWidget.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QWidget.unsetCursor": (), + "QWidget.unsetLayoutDirection": (), + "QWidget.unsetLocale": (), + "QWidget.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.updateGeometry": (), + "QWidget.updateMicroFocus": (), + "QWidget.updatesEnabled": (), + "QWidget.visibleRegion": (), + "QWidget.whatsThis": (), + "QWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWidget.width": (), + "QWidget.winId": (), + "QWidget.window": (), + "QWidget.windowFilePath": (), + "QWidget.windowFlags": (), + "QWidget.windowHandle": (), + "QWidget.windowIcon": (), + "QWidget.windowIconText": (), + "QWidget.windowModality": (), + "QWidget.windowOpacity": (), + "QWidget.windowRole": (), + "QWidget.windowState": (), + "QWidget.windowTitle": (), + "QWidget.windowType": (), + "QWidget.x": (), + "QWidget.y": (), + + # class PySide2.QtWidgets.QWidgetAction: + "QWidgetAction.__init__": ('PySide2.QtCore.QObject',), + "QWidgetAction.createWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.createdWidgets": (), + "QWidgetAction.defaultWidget": (), + "QWidgetAction.deleteWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.event": ('PySide2.QtCore.QEvent',), + "QWidgetAction.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QWidgetAction.releaseWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.requestWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.setDefaultWidget": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QWidgetItem: + "QWidgetItem.__init__": ('PySide2.QtWidgets.QWidget',), + "QWidgetItem.controlTypes": (), + "QWidgetItem.expandingDirections": (), + "QWidgetItem.geometry": (), + "QWidgetItem.hasHeightForWidth": (), + "QWidgetItem.heightForWidth": ('int',), + "QWidgetItem.isEmpty": (), + "QWidgetItem.maximumSize": (), + "QWidgetItem.minimumSize": (), + "QWidgetItem.setGeometry": ('PySide2.QtCore.QRect',), + "QWidgetItem.sizeHint": (), + "QWidgetItem.widget": (), + + # class PySide2.QtWidgets.QWizard: + "QWizard.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QWizard.addPage": ('PySide2.QtWidgets.QWizardPage',), + "QWizard.back": (), + "QWizard.button": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.cleanupPage": ('int',), + "QWizard.currentId": (), + "QWizard.currentPage": (), + "QWizard.done": ('int',), + "QWizard.event": ('PySide2.QtCore.QEvent',), + "QWizard.field": ('str',), + "QWizard.hasVisitedPage": ('int',), + "QWizard.initializePage": ('int',), + "QWizard.nextId": (), + "QWizard.options": (), + "QWizard.page": ('int',), + "QWizard.pageIds": (), + "QWizard.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWizard.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizard.removePage": ('int',), + "QWizard.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWizard.restart": (), + "QWizard.setButton": ('PySide2.QtWidgets.QWizard.WizardButton', 'PySide2.QtWidgets.QAbstractButton'), + "QWizard.setButtonLayout": ('list',), + "QWizard.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizard.setDefaultProperty": ('str', 'str', 'str'), + "QWizard.setField": ('str', 'Any'), + "QWizard.setOption": ('PySide2.QtWidgets.QWizard.WizardOption', 'bool'), + "QWizard.setOptions": ('PySide2.libpyside.WizardOptions',), + "QWizard.setPage": ('int', 'PySide2.QtWidgets.QWizardPage'), + "QWizard.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizard.setSideWidget": ('PySide2.QtWidgets.QWidget',), + "QWizard.setStartId": ('int',), + "QWizard.setSubTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setVisible": ('bool',), + "QWizard.setWizardStyle": ('PySide2.QtWidgets.QWizard.WizardStyle',), + "QWizard.sideWidget": (), + "QWizard.sizeHint": (), + "QWizard.startId": (), + "QWizard.subTitleFormat": (), + "QWizard.testOption": ('PySide2.QtWidgets.QWizard.WizardOption',), + "QWizard.titleFormat": (), + "QWizard.validateCurrentPage": (), + "QWizard.visitedPages": (), + "QWizard.wizardStyle": (), + + # class PySide2.QtWidgets.QWizardPage: + "QWizardPage.__init__": ('PySide2.QtWidgets.QWidget',), + "QWizardPage.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizardPage.cleanupPage": (), + "QWizardPage.field": ('str',), + "QWizardPage.initializePage": (), + "QWizardPage.isCommitPage": (), + "QWizardPage.isComplete": (), + "QWizardPage.isFinalPage": (), + "QWizardPage.nextId": (), + "QWizardPage.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizardPage.registerField": ('str', 'PySide2.QtWidgets.QWidget', 'str', 'str'), + "QWizardPage.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizardPage.setCommitPage": ('bool',), + "QWizardPage.setField": ('str', 'Any'), + "QWizardPage.setFinalPage": ('bool',), + "QWizardPage.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizardPage.setSubTitle": ('str',), + "QWizardPage.setTitle": ('str',), + "QWizardPage.subTitle": (), + "QWizardPage.title": (), + "QWizardPage.validatePage": (), + "QWizardPage.wizard": (), + }) + +# Module PySide2.QtPrintSupport +if "PySide2.QtPrintSupport" in sys.modules: + dict.update({ + + # class PySide2.QtPrintSupport.QAbstractPrintDialog: + "QAbstractPrintDialog.__init__": ('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), + "QAbstractPrintDialog.addEnabledOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.enabledOptions": (), + "QAbstractPrintDialog.exec_": (), + "QAbstractPrintDialog.fromPage": (), + "QAbstractPrintDialog.isOptionEnabled": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.maxPage": (), + "QAbstractPrintDialog.minPage": (), + "QAbstractPrintDialog.printRange": (), + "QAbstractPrintDialog.printer": (), + "QAbstractPrintDialog.setEnabledOptions": ('PySide2.libpyside.PrintDialogOptions',), + "QAbstractPrintDialog.setFromTo": ('int', 'int'), + "QAbstractPrintDialog.setMinMax": ('int', 'int'), + "QAbstractPrintDialog.setOptionTabs": ('list',), + "QAbstractPrintDialog.setPrintRange": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintRange',), + "QAbstractPrintDialog.toPage": (), + + # class PySide2.QtPrintSupport.QPageSetupDialog: + "QPageSetupDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPageSetupDialog.done": ('int',), + "QPageSetupDialog.exec_": (), + "QPageSetupDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPageSetupDialog.printer": (), + "QPageSetupDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintDialog: + "QPrintDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPrintDialog.done": ('int',), + "QPrintDialog.exec_": (), + "QPrintDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintDialog.options": (), + "QPrintDialog.setOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption', 'bool'), + "QPrintDialog.setOptions": ('PySide2.libpyside.PrintDialogOptions',), + "QPrintDialog.setVisible": ('bool',), + "QPrintDialog.testOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + + # class PySide2.QtPrintSupport.QPrintEngine: + "QPrintEngine.__init__": (), + "QPrintEngine.abort": (), + "QPrintEngine.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrintEngine.newPage": (), + "QPrintEngine.printerState": (), + "QPrintEngine.property": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey',), + "QPrintEngine.setProperty": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey', 'Any'), + + # class PySide2.QtPrintSupport.QPrintPreviewDialog: + "QPrintPreviewDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QPrintPreviewDialog.done": ('int',), + "QPrintPreviewDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintPreviewDialog.printer": (), + "QPrintPreviewDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintPreviewWidget: + "QPrintPreviewWidget.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QPrintPreviewWidget.currentPage": (), + "QPrintPreviewWidget.fitInView": (), + "QPrintPreviewWidget.fitToWidth": (), + "QPrintPreviewWidget.orientation": (), + "QPrintPreviewWidget.pageCount": (), + "QPrintPreviewWidget.print_": (), + "QPrintPreviewWidget.setAllPagesViewMode": (), + "QPrintPreviewWidget.setCurrentPage": ('int',), + "QPrintPreviewWidget.setFacingPagesViewMode": (), + "QPrintPreviewWidget.setLandscapeOrientation": (), + "QPrintPreviewWidget.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrintPreviewWidget.setPortraitOrientation": (), + "QPrintPreviewWidget.setSinglePageViewMode": (), + "QPrintPreviewWidget.setViewMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ViewMode',), + "QPrintPreviewWidget.setVisible": ('bool',), + "QPrintPreviewWidget.setZoomFactor": ('float',), + "QPrintPreviewWidget.setZoomMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ZoomMode',), + "QPrintPreviewWidget.updatePreview": (), + "QPrintPreviewWidget.viewMode": (), + "QPrintPreviewWidget.zoomFactor": (), + "QPrintPreviewWidget.zoomIn": ('float',), + "QPrintPreviewWidget.zoomMode": (), + "QPrintPreviewWidget.zoomOut": ('float',), + + # class PySide2.QtPrintSupport.QPrinter: + "QPrinter.__init__": [('PySide2.QtPrintSupport.QPrinter.PrinterMode',), ('PySide2.QtPrintSupport.QPrinterInfo', 'PySide2.QtPrintSupport.QPrinter.PrinterMode')], + "QPrinter.abort": (), + "QPrinter.actualNumCopies": (), + "QPrinter.collateCopies": (), + "QPrinter.colorMode": (), + "QPrinter.copyCount": (), + "QPrinter.creator": (), + "QPrinter.devType": (), + "QPrinter.docName": (), + "QPrinter.doubleSidedPrinting": (), + "QPrinter.duplex": (), + "QPrinter.fontEmbeddingEnabled": (), + "QPrinter.fromPage": (), + "QPrinter.fullPage": (), + "QPrinter.getPageMargins": ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit'), + "QPrinter.isValid": (), + "QPrinter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrinter.newPage": (), + "QPrinter.numCopies": (), + "QPrinter.orientation": (), + "QPrinter.outputFileName": (), + "QPrinter.outputFormat": (), + "QPrinter.pageOrder": (), + "QPrinter.pageRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.pageSize": (), + "QPrinter.paintEngine": (), + "QPrinter.paperName": (), + "QPrinter.paperRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSize": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSource": (), + "QPrinter.pdfVersion": (), + "QPrinter.printEngine": (), + "QPrinter.printProgram": (), + "QPrinter.printRange": (), + "QPrinter.printerName": (), + "QPrinter.printerState": (), + "QPrinter.resolution": (), + "QPrinter.setCollateCopies": ('bool',), + "QPrinter.setColorMode": ('PySide2.QtPrintSupport.QPrinter.ColorMode',), + "QPrinter.setCopyCount": ('int',), + "QPrinter.setCreator": ('str',), + "QPrinter.setDocName": ('str',), + "QPrinter.setDoubleSidedPrinting": ('bool',), + "QPrinter.setDuplex": ('PySide2.QtPrintSupport.QPrinter.DuplexMode',), + "QPrinter.setEngines": ('PySide2.QtPrintSupport.QPrintEngine', 'PySide2.QtGui.QPaintEngine'), + "QPrinter.setFontEmbeddingEnabled": ('bool',), + "QPrinter.setFromTo": ('int', 'int'), + "QPrinter.setFullPage": ('bool',), + "QPrinter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPrinter.setNumCopies": ('int',), + "QPrinter.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrinter.setOutputFileName": ('str',), + "QPrinter.setOutputFormat": ('PySide2.QtPrintSupport.QPrinter.OutputFormat',), + "QPrinter.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit')], + "QPrinter.setPageOrder": ('PySide2.QtPrintSupport.QPrinter.PageOrder',), + "QPrinter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPrinter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPrinter.setPaperName": ('str',), + "QPrinter.setPaperSize": [('PySide2.QtCore.QSizeF', 'PySide2.QtPrintSupport.QPrinter.Unit'), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPrinter.setPaperSource": ('PySide2.QtPrintSupport.QPrinter.PaperSource',), + "QPrinter.setPdfVersion": ('PySide2.QtGui.QPagedPaintDevice.PdfVersion',), + "QPrinter.setPrintProgram": ('str',), + "QPrinter.setPrintRange": ('PySide2.QtPrintSupport.QPrinter.PrintRange',), + "QPrinter.setPrinterName": ('str',), + "QPrinter.setResolution": ('int',), + "QPrinter.setWinPageSize": ('int',), + "QPrinter.supportedPaperSources": (), + "QPrinter.supportedResolutions": (), + "QPrinter.supportsMultipleCopies": (), + "QPrinter.toPage": (), + "QPrinter.winPageSize": (), + + # class PySide2.QtPrintSupport.QPrinterInfo: + "QPrinterInfo.__init__": [(), ('PySide2.QtPrintSupport.QPrinter',), ('PySide2.QtPrintSupport.QPrinterInfo',)], + "QPrinterInfo.__copy__": (), + "QPrinterInfo.availablePrinterNames": (), + "QPrinterInfo.availablePrinters": (), + "QPrinterInfo.defaultDuplexMode": (), + "QPrinterInfo.defaultPageSize": (), + "QPrinterInfo.defaultPrinter": (), + "QPrinterInfo.defaultPrinterName": (), + "QPrinterInfo.description": (), + "QPrinterInfo.isDefault": (), + "QPrinterInfo.isNull": (), + "QPrinterInfo.isRemote": (), + "QPrinterInfo.location": (), + "QPrinterInfo.makeAndModel": (), + "QPrinterInfo.maximumPhysicalPageSize": (), + "QPrinterInfo.minimumPhysicalPageSize": (), + "QPrinterInfo.printerInfo": ('str',), + "QPrinterInfo.printerName": (), + "QPrinterInfo.state": (), + "QPrinterInfo.supportedDuplexModes": (), + "QPrinterInfo.supportedPageSizes": (), + "QPrinterInfo.supportedPaperSizes": (), + "QPrinterInfo.supportedResolutions": (), + "QPrinterInfo.supportedSizesWithNames": (), + "QPrinterInfo.supportsCustomPageSizes": (), + }) + +# Module PySide2.QtSql +if "PySide2.QtSql" in sys.modules: + dict.update({ + + # class PySide2.QtSql.QSql: + + # class PySide2.QtSql.QSqlDatabase: + "QSqlDatabase.__init__": [(), ('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlDriver',), ('str',)], + "QSqlDatabase.__copy__": (), + "QSqlDatabase.addDatabase": [('PySide2.QtSql.QSqlDriver', 'str'), ('str', 'str')], + "QSqlDatabase.cloneDatabase": ('PySide2.QtSql.QSqlDatabase', 'str'), + "QSqlDatabase.close": (), + "QSqlDatabase.commit": (), + "QSqlDatabase.connectOptions": (), + "QSqlDatabase.connectionName": (), + "QSqlDatabase.connectionNames": (), + "QSqlDatabase.contains": ('str',), + "QSqlDatabase.database": ('str', 'bool'), + "QSqlDatabase.databaseName": (), + "QSqlDatabase.driver": (), + "QSqlDatabase.driverName": (), + "QSqlDatabase.drivers": (), + "QSqlDatabase.exec_": ('str',), + "QSqlDatabase.hostName": (), + "QSqlDatabase.isDriverAvailable": ('str',), + "QSqlDatabase.isOpen": (), + "QSqlDatabase.isOpenError": (), + "QSqlDatabase.isValid": (), + "QSqlDatabase.lastError": (), + "QSqlDatabase.numericalPrecisionPolicy": (), + "QSqlDatabase.open": [(), ('str', 'str')], + "QSqlDatabase.password": (), + "QSqlDatabase.port": (), + "QSqlDatabase.primaryIndex": ('str',), + "QSqlDatabase.record": ('str',), + "QSqlDatabase.registerSqlDriver": ('str', 'PySide2.QtSql.QSqlDriverCreatorBase'), + "QSqlDatabase.removeDatabase": ('str',), + "QSqlDatabase.rollback": (), + "QSqlDatabase.setConnectOptions": ('str',), + "QSqlDatabase.setDatabaseName": ('str',), + "QSqlDatabase.setHostName": ('str',), + "QSqlDatabase.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDatabase.setPassword": ('str',), + "QSqlDatabase.setPort": ('int',), + "QSqlDatabase.setUserName": ('str',), + "QSqlDatabase.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDatabase.transaction": (), + "QSqlDatabase.userName": (), + + # class PySide2.QtSql.QSqlDriver: + "QSqlDriver.__init__": ('PySide2.QtCore.QObject',), + "QSqlDriver.beginTransaction": (), + "QSqlDriver.cancelQuery": (), + "QSqlDriver.close": (), + "QSqlDriver.commitTransaction": (), + "QSqlDriver.createResult": (), + "QSqlDriver.dbmsType": (), + "QSqlDriver.escapeIdentifier": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.formatValue": ('PySide2.QtSql.QSqlField', 'bool'), + "QSqlDriver.hasFeature": ('PySide2.QtSql.QSqlDriver.DriverFeature',), + "QSqlDriver.isIdentifierEscaped": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.isOpen": (), + "QSqlDriver.isOpenError": (), + "QSqlDriver.lastError": (), + "QSqlDriver.numericalPrecisionPolicy": (), + "QSqlDriver.open": ('str', 'str', 'str', 'str', 'int', 'str'), + "QSqlDriver.primaryIndex": ('str',), + "QSqlDriver.record": ('str',), + "QSqlDriver.rollbackTransaction": (), + "QSqlDriver.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlDriver.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDriver.setOpen": ('bool',), + "QSqlDriver.setOpenError": ('bool',), + "QSqlDriver.sqlStatement": ('PySide2.QtSql.QSqlDriver.StatementType', 'str', 'PySide2.QtSql.QSqlRecord', 'bool'), + "QSqlDriver.stripDelimiters": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.subscribeToNotification": ('str',), + "QSqlDriver.subscribedToNotifications": (), + "QSqlDriver.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDriver.unsubscribeFromNotification": ('str',), + + # class PySide2.QtSql.QSqlDriverCreatorBase: + "QSqlDriverCreatorBase.__init__": (), + "QSqlDriverCreatorBase.createObject": (), + + # class PySide2.QtSql.QSqlError: + "QSqlError.__init__": [('PySide2.QtSql.QSqlError',), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'int'), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'str')], + "QSqlError.__copy__": (), + "QSqlError.databaseText": (), + "QSqlError.driverText": (), + "QSqlError.isValid": (), + "QSqlError.nativeErrorCode": (), + "QSqlError.number": (), + "QSqlError.setDatabaseText": ('str',), + "QSqlError.setDriverText": ('str',), + "QSqlError.setNumber": ('int',), + "QSqlError.setType": ('PySide2.QtSql.QSqlError.ErrorType',), + "QSqlError.swap": ('PySide2.QtSql.QSqlError',), + "QSqlError.text": (), + "QSqlError.type": (), + + # class PySide2.QtSql.QSqlField: + "QSqlField.__init__": [('PySide2.QtSql.QSqlField',), ('str', 'type'), ('str', 'type', 'str')], + "QSqlField.__copy__": (), + "QSqlField.clear": (), + "QSqlField.defaultValue": (), + "QSqlField.isAutoValue": (), + "QSqlField.isGenerated": (), + "QSqlField.isNull": (), + "QSqlField.isReadOnly": (), + "QSqlField.isValid": (), + "QSqlField.length": (), + "QSqlField.name": (), + "QSqlField.precision": (), + "QSqlField.requiredStatus": (), + "QSqlField.setAutoValue": ('bool',), + "QSqlField.setDefaultValue": ('Any',), + "QSqlField.setGenerated": ('bool',), + "QSqlField.setLength": ('int',), + "QSqlField.setName": ('str',), + "QSqlField.setPrecision": ('int',), + "QSqlField.setReadOnly": ('bool',), + "QSqlField.setRequired": ('bool',), + "QSqlField.setRequiredStatus": ('PySide2.QtSql.QSqlField.RequiredStatus',), + "QSqlField.setSqlType": ('int',), + "QSqlField.setTableName": ('str',), + "QSqlField.setType": ('type',), + "QSqlField.setValue": ('Any',), + "QSqlField.tableName": (), + "QSqlField.type": (), + "QSqlField.typeID": (), + "QSqlField.value": (), + + # class PySide2.QtSql.QSqlIndex: + "QSqlIndex.__init__": [('PySide2.QtSql.QSqlIndex',), ('str', 'str')], + "QSqlIndex.__copy__": (), + "QSqlIndex.append": [('PySide2.QtSql.QSqlField',), ('PySide2.QtSql.QSqlField', 'bool')], + "QSqlIndex.cursorName": (), + "QSqlIndex.isDescending": ('int',), + "QSqlIndex.name": (), + "QSqlIndex.setCursorName": ('str',), + "QSqlIndex.setDescending": ('int', 'bool'), + "QSqlIndex.setName": ('str',), + + # class PySide2.QtSql.QSqlQuery: + "QSqlQuery.__init__": [('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlQuery',), ('PySide2.QtSql.QSqlResult',), ('str', 'PySide2.QtSql.QSqlDatabase')], + "QSqlQuery.__copy__": (), + "QSqlQuery.addBindValue": ('Any', 'PySide2.libpyside.ParamType'), + "QSqlQuery.at": (), + "QSqlQuery.bindValue": [('int', 'Any', 'PySide2.libpyside.ParamType'), ('str', 'Any', 'PySide2.libpyside.ParamType')], + "QSqlQuery.boundValue": [('int',), ('str',)], + "QSqlQuery.boundValues": (), + "QSqlQuery.clear": (), + "QSqlQuery.driver": (), + "QSqlQuery.execBatch": ('PySide2.QtSql.QSqlQuery.BatchExecutionMode',), + "QSqlQuery.exec_": [(), ('str',)], + "QSqlQuery.executedQuery": (), + "QSqlQuery.finish": (), + "QSqlQuery.first": (), + "QSqlQuery.isActive": (), + "QSqlQuery.isForwardOnly": (), + "QSqlQuery.isNull": [('int',), ('str',)], + "QSqlQuery.isSelect": (), + "QSqlQuery.isValid": (), + "QSqlQuery.last": (), + "QSqlQuery.lastError": (), + "QSqlQuery.lastInsertId": (), + "QSqlQuery.lastQuery": (), + "QSqlQuery.nextResult": (), + "QSqlQuery.numRowsAffected": (), + "QSqlQuery.numericalPrecisionPolicy": (), + "QSqlQuery.prepare": ('str',), + "QSqlQuery.previous": (), + "QSqlQuery.record": (), + "QSqlQuery.result": (), + "QSqlQuery.seek": ('int', 'bool'), + "QSqlQuery.setForwardOnly": ('bool',), + "QSqlQuery.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlQuery.size": (), + "QSqlQuery.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlQueryModel: + "QSqlQueryModel.__init__": ('PySide2.QtCore.QObject',), + "QSqlQueryModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginResetModel": (), + "QSqlQueryModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.clear": (), + "QSqlQueryModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlQueryModel.endInsertColumns": (), + "QSqlQueryModel.endInsertRows": (), + "QSqlQueryModel.endRemoveColumns": (), + "QSqlQueryModel.endRemoveRows": (), + "QSqlQueryModel.endResetModel": (), + "QSqlQueryModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlQueryModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.lastError": (), + "QSqlQueryModel.query": (), + "QSqlQueryModel.queryChange": (), + "QSqlQueryModel.record": [(), ('int',)], + "QSqlQueryModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.roleNames": (), + "QSqlQueryModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QSqlQueryModel.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlQueryModel.setQuery": [('PySide2.QtSql.QSqlQuery',), ('str', 'PySide2.QtSql.QSqlDatabase')], + + # class PySide2.QtSql.QSqlRecord: + "QSqlRecord.__init__": [(), ('PySide2.QtSql.QSqlRecord',)], + "QSqlRecord.__copy__": (), + "QSqlRecord.append": ('PySide2.QtSql.QSqlField',), + "QSqlRecord.clear": (), + "QSqlRecord.clearValues": (), + "QSqlRecord.contains": ('str',), + "QSqlRecord.count": (), + "QSqlRecord.field": [('int',), ('str',)], + "QSqlRecord.fieldName": ('int',), + "QSqlRecord.indexOf": ('str',), + "QSqlRecord.insert": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.isEmpty": (), + "QSqlRecord.isGenerated": [('int',), ('str',)], + "QSqlRecord.isNull": [('int',), ('str',)], + "QSqlRecord.keyValues": ('PySide2.QtSql.QSqlRecord',), + "QSqlRecord.remove": ('int',), + "QSqlRecord.replace": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.setGenerated": [('int', 'bool'), ('str', 'bool')], + "QSqlRecord.setNull": [('int',), ('str',)], + "QSqlRecord.setValue": [('int', 'Any'), ('str', 'Any')], + "QSqlRecord.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlRelation: + "QSqlRelation.__init__": [(), ('PySide2.QtSql.QSqlRelation',), ('str', 'str', 'str')], + "QSqlRelation.__copy__": (), + "QSqlRelation.displayColumn": (), + "QSqlRelation.indexColumn": (), + "QSqlRelation.isValid": (), + "QSqlRelation.swap": ('PySide2.QtSql.QSqlRelation',), + "QSqlRelation.tableName": (), + + # class PySide2.QtSql.QSqlRelationalDelegate: + "QSqlRelationalDelegate.__init__": ('PySide2.QtCore.QObject',), + "QSqlRelationalDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtSql.QSqlRelationalTableModel: + "QSqlRelationalTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlRelationalTableModel.clear": (), + "QSqlRelationalTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlRelationalTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlRelationalTableModel.orderByClause": (), + "QSqlRelationalTableModel.relation": ('int',), + "QSqlRelationalTableModel.relationModel": ('int',), + "QSqlRelationalTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalTableModel.revertRow": ('int',), + "QSqlRelationalTableModel.select": (), + "QSqlRelationalTableModel.selectStatement": (), + "QSqlRelationalTableModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSqlRelationalTableModel.setJoinMode": ('PySide2.QtSql.QSqlRelationalTableModel.JoinMode',), + "QSqlRelationalTableModel.setRelation": ('int', 'PySide2.QtSql.QSqlRelation'), + "QSqlRelationalTableModel.setTable": ('str',), + "QSqlRelationalTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + + # class PySide2.QtSql.QSqlResult: + "QSqlResult.__init__": ('PySide2.QtSql.QSqlDriver',), + "QSqlResult.addBindValue": ('Any', 'PySide2.libpyside.ParamType'), + "QSqlResult.at": (), + "QSqlResult.bindValue": [('int', 'Any', 'PySide2.libpyside.ParamType'), ('str', 'Any', 'PySide2.libpyside.ParamType')], + "QSqlResult.bindValueType": [('int',), ('str',)], + "QSqlResult.bindingSyntax": (), + "QSqlResult.boundValue": [('int',), ('str',)], + "QSqlResult.boundValueCount": (), + "QSqlResult.boundValueName": ('int',), + "QSqlResult.boundValues": (), + "QSqlResult.clear": (), + "QSqlResult.data": ('int',), + "QSqlResult.detachFromResultSet": (), + "QSqlResult.driver": (), + "QSqlResult.execBatch": ('bool',), + "QSqlResult.exec_": (), + "QSqlResult.executedQuery": (), + "QSqlResult.fetch": ('int',), + "QSqlResult.fetchFirst": (), + "QSqlResult.fetchLast": (), + "QSqlResult.fetchNext": (), + "QSqlResult.fetchPrevious": (), + "QSqlResult.handle": (), + "QSqlResult.hasOutValues": (), + "QSqlResult.isActive": (), + "QSqlResult.isForwardOnly": (), + "QSqlResult.isNull": ('int',), + "QSqlResult.isSelect": (), + "QSqlResult.isValid": (), + "QSqlResult.lastError": (), + "QSqlResult.lastInsertId": (), + "QSqlResult.lastQuery": (), + "QSqlResult.nextResult": (), + "QSqlResult.numRowsAffected": (), + "QSqlResult.numericalPrecisionPolicy": (), + "QSqlResult.prepare": ('str',), + "QSqlResult.record": (), + "QSqlResult.reset": ('str',), + "QSqlResult.resetBindCount": (), + "QSqlResult.savePrepare": ('str',), + "QSqlResult.setActive": ('bool',), + "QSqlResult.setAt": ('int',), + "QSqlResult.setForwardOnly": ('bool',), + "QSqlResult.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlResult.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlResult.setQuery": ('str',), + "QSqlResult.setSelect": ('bool',), + "QSqlResult.size": (), + + # class PySide2.QtSql.QSqlTableModel: + "QSqlTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlTableModel.clear": (), + "QSqlTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlTableModel.database": (), + "QSqlTableModel.deleteRowFromTable": ('int',), + "QSqlTableModel.editStrategy": (), + "QSqlTableModel.fieldIndex": ('str',), + "QSqlTableModel.filter": (), + "QSqlTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlTableModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.insertRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlTableModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.isDirty": [(), ('PySide2.QtCore.QModelIndex',)], + "QSqlTableModel.orderByClause": (), + "QSqlTableModel.primaryKey": (), + "QSqlTableModel.primaryValues": ('int',), + "QSqlTableModel.record": [(), ('int',)], + "QSqlTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.revert": (), + "QSqlTableModel.revertAll": (), + "QSqlTableModel.revertRow": ('int',), + "QSqlTableModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.select": (), + "QSqlTableModel.selectRow": ('int',), + "QSqlTableModel.selectStatement": (), + "QSqlTableModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSqlTableModel.setEditStrategy": ('PySide2.QtSql.QSqlTableModel.EditStrategy',), + "QSqlTableModel.setFilter": ('str',), + "QSqlTableModel.setPrimaryKey": ('PySide2.QtSql.QSqlIndex',), + "QSqlTableModel.setQuery": ('PySide2.QtSql.QSqlQuery',), + "QSqlTableModel.setRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.setSort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.setTable": ('str',), + "QSqlTableModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.submit": (), + "QSqlTableModel.submitAll": (), + "QSqlTableModel.tableName": (), + "QSqlTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + }) + +# Module PySide2.QtNetwork +if "PySide2.QtNetwork" in sys.modules: + dict.update({ + + # class PySide2.QtNetwork.QAbstractNetworkCache: + "QAbstractNetworkCache.__init__": ('PySide2.QtCore.QObject',), + "QAbstractNetworkCache.cacheSize": (), + "QAbstractNetworkCache.clear": (), + "QAbstractNetworkCache.data": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.insert": ('PySide2.QtCore.QIODevice',), + "QAbstractNetworkCache.metaData": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QAbstractNetworkCache.remove": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QAbstractSocket: + "QAbstractSocket.__init__": ('PySide2.QtNetwork.QAbstractSocket.SocketType', 'PySide2.QtCore.QObject'), + "QAbstractSocket.abort": (), + "QAbstractSocket.atEnd": (), + "QAbstractSocket.bind": [('PySide2.QtNetwork.QHostAddress', 'int', 'PySide2.libpyside.BindMode'), ('int', 'PySide2.libpyside.BindMode')], + "QAbstractSocket.bytesAvailable": (), + "QAbstractSocket.bytesToWrite": (), + "QAbstractSocket.canReadLine": (), + "QAbstractSocket.close": (), + "QAbstractSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'PySide2.libpyside.OpenMode'), ('str', 'int', 'PySide2.libpyside.OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QAbstractSocket.disconnectFromHost": (), + "QAbstractSocket.flush": (), + "QAbstractSocket.isSequential": (), + "QAbstractSocket.isValid": (), + "QAbstractSocket.localAddress": (), + "QAbstractSocket.localPort": (), + "QAbstractSocket.pauseMode": (), + "QAbstractSocket.peerAddress": (), + "QAbstractSocket.peerName": (), + "QAbstractSocket.peerPort": (), + "QAbstractSocket.proxy": (), + "QAbstractSocket.readBufferSize": (), + "QAbstractSocket.readData": ('str', 'int'), + "QAbstractSocket.readLineData": ('str', 'int'), + "QAbstractSocket.resume": (), + "QAbstractSocket.setLocalAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setLocalPort": ('int',), + "QAbstractSocket.setPauseMode": ('PySide2.libpyside.PauseModes',), + "QAbstractSocket.setPeerAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setPeerName": ('str',), + "QAbstractSocket.setPeerPort": ('int',), + "QAbstractSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QAbstractSocket.setReadBufferSize": ('int',), + "QAbstractSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'PySide2.libpyside.OpenMode'), + "QAbstractSocket.setSocketError": ('PySide2.QtNetwork.QAbstractSocket.SocketError',), + "QAbstractSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'Any'), + "QAbstractSocket.setSocketState": ('PySide2.QtNetwork.QAbstractSocket.SocketState',), + "QAbstractSocket.socketDescriptor": (), + "QAbstractSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QAbstractSocket.socketType": (), + "QAbstractSocket.state": (), + "QAbstractSocket.waitForBytesWritten": ('int',), + "QAbstractSocket.waitForConnected": ('int',), + "QAbstractSocket.waitForDisconnected": ('int',), + "QAbstractSocket.waitForReadyRead": ('int',), + "QAbstractSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QAuthenticator: + "QAuthenticator.__init__": [(), ('PySide2.QtNetwork.QAuthenticator',)], + "QAuthenticator.__copy__": (), + "QAuthenticator.isNull": (), + "QAuthenticator.option": ('str',), + "QAuthenticator.options": (), + "QAuthenticator.password": (), + "QAuthenticator.realm": (), + "QAuthenticator.setOption": ('str', 'Any'), + "QAuthenticator.setPassword": ('str',), + "QAuthenticator.setRealm": ('str',), + "QAuthenticator.setUser": ('str',), + "QAuthenticator.user": (), + + # class PySide2.QtNetwork.QDnsDomainNameRecord: + "QDnsDomainNameRecord.__init__": [(), ('PySide2.QtNetwork.QDnsDomainNameRecord',)], + "QDnsDomainNameRecord.__copy__": (), + "QDnsDomainNameRecord.name": (), + "QDnsDomainNameRecord.swap": ('PySide2.QtNetwork.QDnsDomainNameRecord',), + "QDnsDomainNameRecord.timeToLive": (), + "QDnsDomainNameRecord.value": (), + + # class PySide2.QtNetwork.QDnsHostAddressRecord: + "QDnsHostAddressRecord.__init__": [(), ('PySide2.QtNetwork.QDnsHostAddressRecord',)], + "QDnsHostAddressRecord.__copy__": (), + "QDnsHostAddressRecord.name": (), + "QDnsHostAddressRecord.swap": ('PySide2.QtNetwork.QDnsHostAddressRecord',), + "QDnsHostAddressRecord.timeToLive": (), + "QDnsHostAddressRecord.value": (), + + # class PySide2.QtNetwork.QDnsLookup: + "QDnsLookup.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtNetwork.QDnsLookup.Type', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtNetwork.QDnsLookup.Type', 'str', 'PySide2.QtNetwork.QHostAddress', 'PySide2.QtCore.QObject')], + "QDnsLookup.abort": (), + "QDnsLookup.canonicalNameRecords": (), + "QDnsLookup.error": (), + "QDnsLookup.errorString": (), + "QDnsLookup.hostAddressRecords": (), + "QDnsLookup.isFinished": (), + "QDnsLookup.lookup": (), + "QDnsLookup.mailExchangeRecords": (), + "QDnsLookup.name": (), + "QDnsLookup.nameServerRecords": (), + "QDnsLookup.nameserver": (), + "QDnsLookup.pointerRecords": (), + "QDnsLookup.serviceRecords": (), + "QDnsLookup.setName": ('str',), + "QDnsLookup.setNameserver": ('PySide2.QtNetwork.QHostAddress',), + "QDnsLookup.setType": ('PySide2.QtNetwork.QDnsLookup.Type',), + "QDnsLookup.textRecords": (), + "QDnsLookup.type": (), + + # class PySide2.QtNetwork.QDnsMailExchangeRecord: + "QDnsMailExchangeRecord.__init__": [(), ('PySide2.QtNetwork.QDnsMailExchangeRecord',)], + "QDnsMailExchangeRecord.__copy__": (), + "QDnsMailExchangeRecord.exchange": (), + "QDnsMailExchangeRecord.name": (), + "QDnsMailExchangeRecord.preference": (), + "QDnsMailExchangeRecord.swap": ('PySide2.QtNetwork.QDnsMailExchangeRecord',), + "QDnsMailExchangeRecord.timeToLive": (), + + # class PySide2.QtNetwork.QDnsServiceRecord: + "QDnsServiceRecord.__init__": [(), ('PySide2.QtNetwork.QDnsServiceRecord',)], + "QDnsServiceRecord.__copy__": (), + "QDnsServiceRecord.name": (), + "QDnsServiceRecord.port": (), + "QDnsServiceRecord.priority": (), + "QDnsServiceRecord.swap": ('PySide2.QtNetwork.QDnsServiceRecord',), + "QDnsServiceRecord.target": (), + "QDnsServiceRecord.timeToLive": (), + "QDnsServiceRecord.weight": (), + + # class PySide2.QtNetwork.QDnsTextRecord: + "QDnsTextRecord.__init__": [(), ('PySide2.QtNetwork.QDnsTextRecord',)], + "QDnsTextRecord.__copy__": (), + "QDnsTextRecord.name": (), + "QDnsTextRecord.swap": ('PySide2.QtNetwork.QDnsTextRecord',), + "QDnsTextRecord.timeToLive": (), + "QDnsTextRecord.values": (), + + # class PySide2.QtNetwork.QHostAddress: + "QHostAddress.__init__": [(), ('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.__copy__": (), + "QHostAddress.clear": (), + "QHostAddress.isBroadcast": (), + "QHostAddress.isEqual": ('PySide2.QtNetwork.QHostAddress', 'PySide2.libpyside.ConversionMode'), + "QHostAddress.isGlobal": (), + "QHostAddress.isInSubnet": [('PySide2.QtNetwork.QHostAddress', 'int'), ('Tuple[Any, Any]',)], + "QHostAddress.isLinkLocal": (), + "QHostAddress.isLoopback": (), + "QHostAddress.isMulticast": (), + "QHostAddress.isNull": (), + "QHostAddress.isSiteLocal": (), + "QHostAddress.isUniqueLocalUnicast": (), + "QHostAddress.parseSubnet": ('str',), + "QHostAddress.protocol": (), + "QHostAddress.scopeId": (), + "QHostAddress.setAddress": [('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.setScopeId": ('str',), + "QHostAddress.swap": ('PySide2.QtNetwork.QHostAddress',), + "QHostAddress.toIPv4Address": [(), ('bool',)], + "QHostAddress.toIPv6Address": (), + "QHostAddress.toString": (), + + # class PySide2.QtNetwork.QHostInfo: + "QHostInfo.__init__": [('PySide2.QtNetwork.QHostInfo',), ('int',)], + "QHostInfo.__copy__": (), + "QHostInfo.abortHostLookup": ('int',), + "QHostInfo.addresses": (), + "QHostInfo.error": (), + "QHostInfo.errorString": (), + "QHostInfo.fromName": ('str',), + "QHostInfo.hostName": (), + "QHostInfo.localDomainName": (), + "QHostInfo.localHostName": (), + "QHostInfo.lookupId": (), + "QHostInfo.setAddresses": ('list',), + "QHostInfo.setError": ('PySide2.QtNetwork.QHostInfo.HostInfoError',), + "QHostInfo.setErrorString": ('str',), + "QHostInfo.setHostName": ('str',), + "QHostInfo.setLookupId": ('int',), + "QHostInfo.swap": ('PySide2.QtNetwork.QHostInfo',), + + # class PySide2.QtNetwork.QHstsPolicy: + "QHstsPolicy.__init__": [(), ('PySide2.QtCore.QDateTime', 'PySide2.libpyside.PolicyFlags', 'str', 'PySide2.QtCore.QUrl.ParsingMode'), ('PySide2.QtNetwork.QHstsPolicy',)], + "QHstsPolicy.__copy__": (), + "QHstsPolicy.expiry": (), + "QHstsPolicy.host": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QHstsPolicy.includesSubDomains": (), + "QHstsPolicy.isExpired": (), + "QHstsPolicy.setExpiry": ('PySide2.QtCore.QDateTime',), + "QHstsPolicy.setHost": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QHstsPolicy.setIncludesSubDomains": ('bool',), + "QHstsPolicy.swap": ('PySide2.QtNetwork.QHstsPolicy',), + + # class PySide2.QtNetwork.QHttpMultiPart: + "QHttpMultiPart.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtNetwork.QHttpMultiPart.ContentType', 'PySide2.QtCore.QObject')], + "QHttpMultiPart.append": ('PySide2.QtNetwork.QHttpPart',), + "QHttpMultiPart.boundary": (), + "QHttpMultiPart.setBoundary": ('PySide2.QtCore.QByteArray',), + "QHttpMultiPart.setContentType": ('PySide2.QtNetwork.QHttpMultiPart.ContentType',), + + # class PySide2.QtNetwork.QHttpPart: + "QHttpPart.__init__": [(), ('PySide2.QtNetwork.QHttpPart',)], + "QHttpPart.__copy__": (), + "QHttpPart.setBody": ('PySide2.QtCore.QByteArray',), + "QHttpPart.setBodyDevice": ('PySide2.QtCore.QIODevice',), + "QHttpPart.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QHttpPart.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QHttpPart.swap": ('PySide2.QtNetwork.QHttpPart',), + + # class PySide2.QtNetwork.QIPv6Address: + "QIPv6Address.__init__": [(), ('PySide2.QtNetwork.QIPv6Address',)], + "QIPv6Address.__copy__": (), + + # class PySide2.QtNetwork.QLocalServer: + "QLocalServer.__init__": ('PySide2.QtCore.QObject',), + "QLocalServer.close": (), + "QLocalServer.errorString": (), + "QLocalServer.fullServerName": (), + "QLocalServer.hasPendingConnections": (), + "QLocalServer.incomingConnection": ('int',), + "QLocalServer.isListening": (), + "QLocalServer.listen": [('int',), ('str',)], + "QLocalServer.maxPendingConnections": (), + "QLocalServer.nextPendingConnection": (), + "QLocalServer.removeServer": ('str',), + "QLocalServer.serverError": (), + "QLocalServer.serverName": (), + "QLocalServer.setMaxPendingConnections": ('int',), + "QLocalServer.setSocketOptions": ('PySide2.libpyside.SocketOptions',), + "QLocalServer.socketDescriptor": (), + "QLocalServer.socketOptions": (), + "QLocalServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QLocalSocket: + "QLocalSocket.__init__": ('PySide2.QtCore.QObject',), + "QLocalSocket.abort": (), + "QLocalSocket.bytesAvailable": (), + "QLocalSocket.bytesToWrite": (), + "QLocalSocket.canReadLine": (), + "QLocalSocket.close": (), + "QLocalSocket.connectToServer": [('PySide2.libpyside.OpenMode',), ('str', 'PySide2.libpyside.OpenMode')], + "QLocalSocket.disconnectFromServer": (), + "QLocalSocket.flush": (), + "QLocalSocket.fullServerName": (), + "QLocalSocket.isSequential": (), + "QLocalSocket.isValid": (), + "QLocalSocket.open": ('PySide2.libpyside.OpenMode',), + "QLocalSocket.readBufferSize": (), + "QLocalSocket.readData": ('str', 'int'), + "QLocalSocket.serverName": (), + "QLocalSocket.setReadBufferSize": ('int',), + "QLocalSocket.setServerName": ('str',), + "QLocalSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QLocalSocket.LocalSocketState', 'PySide2.libpyside.OpenMode'), + "QLocalSocket.socketDescriptor": (), + "QLocalSocket.state": (), + "QLocalSocket.waitForBytesWritten": ('int',), + "QLocalSocket.waitForConnected": ('int',), + "QLocalSocket.waitForDisconnected": ('int',), + "QLocalSocket.waitForReadyRead": ('int',), + "QLocalSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkAccessManager: + "QNetworkAccessManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkAccessManager.activeConfiguration": (), + "QNetworkAccessManager.addStrictTransportSecurityHosts": ('list',), + "QNetworkAccessManager.cache": (), + "QNetworkAccessManager.clearAccessCache": (), + "QNetworkAccessManager.clearConnectionCache": (), + "QNetworkAccessManager.configuration": (), + "QNetworkAccessManager.connectToHost": ('str', 'int'), + "QNetworkAccessManager.connectToHostEncrypted": ('str', 'int', 'PySide2.QtNetwork.QSslConfiguration'), + "QNetworkAccessManager.cookieJar": (), + "QNetworkAccessManager.createRequest": ('PySide2.QtNetwork.QNetworkAccessManager.Operation', 'PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), + "QNetworkAccessManager.deleteResource": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.enableStrictTransportSecurityStore": ('bool', 'str'), + "QNetworkAccessManager.get": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.head": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.isStrictTransportSecurityEnabled": (), + "QNetworkAccessManager.isStrictTransportSecurityStoreEnabled": (), + "QNetworkAccessManager.networkAccessible": (), + "QNetworkAccessManager.post": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.proxy": (), + "QNetworkAccessManager.proxyFactory": (), + "QNetworkAccessManager.put": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.redirectPolicy": (), + "QNetworkAccessManager.sendCustomRequest": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.setCache": ('PySide2.QtNetwork.QAbstractNetworkCache',), + "QNetworkAccessManager.setConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkAccessManager.setCookieJar": ('PySide2.QtNetwork.QNetworkCookieJar',), + "QNetworkAccessManager.setNetworkAccessible": ('PySide2.QtNetwork.QNetworkAccessManager.NetworkAccessibility',), + "QNetworkAccessManager.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkAccessManager.setProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkAccessManager.setRedirectPolicy": ('PySide2.QtNetwork.QNetworkRequest.RedirectPolicy',), + "QNetworkAccessManager.setStrictTransportSecurityEnabled": ('bool',), + "QNetworkAccessManager.strictTransportSecurityHosts": (), + "QNetworkAccessManager.supportedSchemes": (), + "QNetworkAccessManager.supportedSchemesImplementation": (), + + # class PySide2.QtNetwork.QNetworkAddressEntry: + "QNetworkAddressEntry.__init__": [(), ('PySide2.QtNetwork.QNetworkAddressEntry',)], + "QNetworkAddressEntry.__copy__": (), + "QNetworkAddressEntry.broadcast": (), + "QNetworkAddressEntry.clearAddressLifetime": (), + "QNetworkAddressEntry.dnsEligibility": (), + "QNetworkAddressEntry.ip": (), + "QNetworkAddressEntry.isLifetimeKnown": (), + "QNetworkAddressEntry.isPermanent": (), + "QNetworkAddressEntry.isTemporary": (), + "QNetworkAddressEntry.netmask": (), + "QNetworkAddressEntry.prefixLength": (), + "QNetworkAddressEntry.setBroadcast": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setDnsEligibility": ('PySide2.QtNetwork.QNetworkAddressEntry.DnsEligibilityStatus',), + "QNetworkAddressEntry.setIp": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setNetmask": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setPrefixLength": ('int',), + "QNetworkAddressEntry.swap": ('PySide2.QtNetwork.QNetworkAddressEntry',), + + # class PySide2.QtNetwork.QNetworkCacheMetaData: + "QNetworkCacheMetaData.__init__": [(), ('PySide2.QtNetwork.QNetworkCacheMetaData',)], + "QNetworkCacheMetaData.__copy__": (), + "QNetworkCacheMetaData.attributes": (), + "QNetworkCacheMetaData.expirationDate": (), + "QNetworkCacheMetaData.isValid": (), + "QNetworkCacheMetaData.lastModified": (), + "QNetworkCacheMetaData.rawHeaders": (), + "QNetworkCacheMetaData.saveToDisk": (), + "QNetworkCacheMetaData.setAttributes": ('dict',), + "QNetworkCacheMetaData.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setLastModified": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setRawHeaders": ('list',), + "QNetworkCacheMetaData.setSaveToDisk": ('bool',), + "QNetworkCacheMetaData.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCacheMetaData.swap": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkCacheMetaData.url": (), + + # class PySide2.QtNetwork.QNetworkConfiguration: + "QNetworkConfiguration.__init__": [(), ('PySide2.QtNetwork.QNetworkConfiguration',)], + "QNetworkConfiguration.__copy__": (), + "QNetworkConfiguration.bearerType": (), + "QNetworkConfiguration.bearerTypeFamily": (), + "QNetworkConfiguration.bearerTypeName": (), + "QNetworkConfiguration.children": (), + "QNetworkConfiguration.connectTimeout": (), + "QNetworkConfiguration.identifier": (), + "QNetworkConfiguration.isRoamingAvailable": (), + "QNetworkConfiguration.isValid": (), + "QNetworkConfiguration.name": (), + "QNetworkConfiguration.purpose": (), + "QNetworkConfiguration.setConnectTimeout": ('int',), + "QNetworkConfiguration.state": (), + "QNetworkConfiguration.swap": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkConfiguration.type": (), + + # class PySide2.QtNetwork.QNetworkConfigurationManager: + "QNetworkConfigurationManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkConfigurationManager.allConfigurations": ('PySide2.libpyside.StateFlags',), + "QNetworkConfigurationManager.capabilities": (), + "QNetworkConfigurationManager.configurationFromIdentifier": ('str',), + "QNetworkConfigurationManager.defaultConfiguration": (), + "QNetworkConfigurationManager.isOnline": (), + "QNetworkConfigurationManager.updateConfigurations": (), + + # class PySide2.QtNetwork.QNetworkCookie: + "QNetworkCookie.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkCookie',)], + "QNetworkCookie.__copy__": (), + "QNetworkCookie.domain": (), + "QNetworkCookie.expirationDate": (), + "QNetworkCookie.hasSameIdentifier": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.isHttpOnly": (), + "QNetworkCookie.isSecure": (), + "QNetworkCookie.isSessionCookie": (), + "QNetworkCookie.name": (), + "QNetworkCookie.normalize": ('PySide2.QtCore.QUrl',), + "QNetworkCookie.parseCookies": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.path": (), + "QNetworkCookie.setDomain": ('str',), + "QNetworkCookie.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCookie.setHttpOnly": ('bool',), + "QNetworkCookie.setName": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.setPath": ('str',), + "QNetworkCookie.setSecure": ('bool',), + "QNetworkCookie.setValue": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.swap": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.toRawForm": ('PySide2.QtNetwork.QNetworkCookie.RawForm',), + "QNetworkCookie.value": (), + + # class PySide2.QtNetwork.QNetworkCookieJar: + "QNetworkCookieJar.__init__": ('PySide2.QtCore.QObject',), + "QNetworkCookieJar.allCookies": (), + "QNetworkCookieJar.cookiesForUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCookieJar.deleteCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.insertCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.setAllCookies": ('list',), + "QNetworkCookieJar.setCookiesFromUrl": ('list', 'PySide2.QtCore.QUrl'), + "QNetworkCookieJar.updateCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.validateCookie": ('PySide2.QtNetwork.QNetworkCookie', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtNetwork.QNetworkDatagram: + "QNetworkDatagram.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHostAddress', 'int'), ('PySide2.QtNetwork.QNetworkDatagram',)], + "QNetworkDatagram.__copy__": (), + "QNetworkDatagram.clear": (), + "QNetworkDatagram.data": (), + "QNetworkDatagram.destinationAddress": (), + "QNetworkDatagram.destinationPort": (), + "QNetworkDatagram.hopLimit": (), + "QNetworkDatagram.interfaceIndex": (), + "QNetworkDatagram.isNull": (), + "QNetworkDatagram.isValid": (), + "QNetworkDatagram.makeReply": ('PySide2.QtCore.QByteArray',), + "QNetworkDatagram.senderAddress": (), + "QNetworkDatagram.senderPort": (), + "QNetworkDatagram.setData": ('PySide2.QtCore.QByteArray',), + "QNetworkDatagram.setDestination": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QNetworkDatagram.setHopLimit": ('int',), + "QNetworkDatagram.setInterfaceIndex": ('int',), + "QNetworkDatagram.setSender": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QNetworkDatagram.swap": ('PySide2.QtNetwork.QNetworkDatagram',), + + # class PySide2.QtNetwork.QNetworkDiskCache: + "QNetworkDiskCache.__init__": ('PySide2.QtCore.QObject',), + "QNetworkDiskCache.cacheDirectory": (), + "QNetworkDiskCache.cacheSize": (), + "QNetworkDiskCache.clear": (), + "QNetworkDiskCache.data": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.expire": (), + "QNetworkDiskCache.fileMetaData": ('str',), + "QNetworkDiskCache.insert": ('PySide2.QtCore.QIODevice',), + "QNetworkDiskCache.maximumCacheSize": (), + "QNetworkDiskCache.metaData": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkDiskCache.remove": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.setCacheDirectory": ('str',), + "QNetworkDiskCache.setMaximumCacheSize": ('int',), + "QNetworkDiskCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QNetworkInterface: + "QNetworkInterface.__init__": [(), ('PySide2.QtNetwork.QNetworkInterface',)], + "QNetworkInterface.__copy__": (), + "QNetworkInterface.addressEntries": (), + "QNetworkInterface.allAddresses": (), + "QNetworkInterface.allInterfaces": (), + "QNetworkInterface.flags": (), + "QNetworkInterface.hardwareAddress": (), + "QNetworkInterface.humanReadableName": (), + "QNetworkInterface.index": (), + "QNetworkInterface.interfaceFromIndex": ('int',), + "QNetworkInterface.interfaceFromName": ('str',), + "QNetworkInterface.interfaceIndexFromName": ('str',), + "QNetworkInterface.interfaceNameFromIndex": ('int',), + "QNetworkInterface.isValid": (), + "QNetworkInterface.maximumTransmissionUnit": (), + "QNetworkInterface.name": (), + "QNetworkInterface.swap": ('PySide2.QtNetwork.QNetworkInterface',), + "QNetworkInterface.type": (), + + # class PySide2.QtNetwork.QNetworkProxy: + "QNetworkProxy.__init__": [(), ('PySide2.QtNetwork.QNetworkProxy',), ('PySide2.QtNetwork.QNetworkProxy.ProxyType', 'str', 'int', 'str', 'str')], + "QNetworkProxy.__copy__": (), + "QNetworkProxy.applicationProxy": (), + "QNetworkProxy.capabilities": (), + "QNetworkProxy.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkProxy.hostName": (), + "QNetworkProxy.isCachingProxy": (), + "QNetworkProxy.isTransparentProxy": (), + "QNetworkProxy.password": (), + "QNetworkProxy.port": (), + "QNetworkProxy.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.rawHeaderList": (), + "QNetworkProxy.setApplicationProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.setCapabilities": ('PySide2.libpyside.Capabilities',), + "QNetworkProxy.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkProxy.setHostName": ('str',), + "QNetworkProxy.setPassword": ('str',), + "QNetworkProxy.setPort": ('int',), + "QNetworkProxy.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkProxy.setType": ('PySide2.QtNetwork.QNetworkProxy.ProxyType',), + "QNetworkProxy.setUser": ('str',), + "QNetworkProxy.swap": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.type": (), + "QNetworkProxy.user": (), + + # class PySide2.QtNetwork.QNetworkProxyFactory: + "QNetworkProxyFactory.__init__": (), + "QNetworkProxyFactory.proxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.queryProxy": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.setApplicationProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkProxyFactory.setUseSystemConfiguration": ('bool',), + "QNetworkProxyFactory.systemProxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.usesSystemConfiguration": (), + + # class PySide2.QtNetwork.QNetworkProxyQuery: + "QNetworkProxyQuery.__init__": [(), ('PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkProxyQuery',), ('int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType')], + "QNetworkProxyQuery.__copy__": (), + "QNetworkProxyQuery.localPort": (), + "QNetworkProxyQuery.networkConfiguration": (), + "QNetworkProxyQuery.peerHostName": (), + "QNetworkProxyQuery.peerPort": (), + "QNetworkProxyQuery.protocolTag": (), + "QNetworkProxyQuery.queryType": (), + "QNetworkProxyQuery.setLocalPort": ('int',), + "QNetworkProxyQuery.setNetworkConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkProxyQuery.setPeerHostName": ('str',), + "QNetworkProxyQuery.setPeerPort": ('int',), + "QNetworkProxyQuery.setProtocolTag": ('str',), + "QNetworkProxyQuery.setQueryType": ('PySide2.QtNetwork.QNetworkProxyQuery.QueryType',), + "QNetworkProxyQuery.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkProxyQuery.swap": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyQuery.url": (), + + # class PySide2.QtNetwork.QNetworkReply: + "QNetworkReply.__init__": ('PySide2.QtCore.QObject',), + "QNetworkReply.abort": (), + "QNetworkReply.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute',), + "QNetworkReply.close": (), + "QNetworkReply.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkReply.ignoreSslErrors": [(), ('list',)], + "QNetworkReply.ignoreSslErrorsImplementation": ('list',), + "QNetworkReply.isFinished": (), + "QNetworkReply.isRunning": (), + "QNetworkReply.isSequential": (), + "QNetworkReply.manager": (), + "QNetworkReply.operation": (), + "QNetworkReply.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.rawHeaderList": (), + "QNetworkReply.rawHeaderPairs": (), + "QNetworkReply.readBufferSize": (), + "QNetworkReply.request": (), + "QNetworkReply.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkReply.setError": ('PySide2.QtNetwork.QNetworkReply.NetworkError', 'str'), + "QNetworkReply.setFinished": ('bool',), + "QNetworkReply.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkReply.setOperation": ('PySide2.QtNetwork.QNetworkAccessManager.Operation',), + "QNetworkReply.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkReply.setReadBufferSize": ('int',), + "QNetworkReply.setRequest": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkReply.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setSslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkReply.sslConfiguration": (), + "QNetworkReply.sslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.url": (), + "QNetworkReply.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkRequest: + "QNetworkRequest.__init__": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QNetworkRequest.__copy__": (), + "QNetworkRequest.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkRequest.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkRequest.maximumRedirectsAllowed": (), + "QNetworkRequest.originatingObject": (), + "QNetworkRequest.priority": (), + "QNetworkRequest.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.rawHeaderList": (), + "QNetworkRequest.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkRequest.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkRequest.setMaximumRedirectsAllowed": ('int',), + "QNetworkRequest.setOriginatingObject": ('PySide2.QtCore.QObject',), + "QNetworkRequest.setPriority": ('PySide2.QtNetwork.QNetworkRequest.Priority',), + "QNetworkRequest.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkRequest.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkRequest.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkRequest.sslConfiguration": (), + "QNetworkRequest.swap": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkRequest.url": (), + + # class PySide2.QtNetwork.QNetworkSession: + "QNetworkSession.__init__": ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QObject'), + "QNetworkSession.accept": (), + "QNetworkSession.activeTime": (), + "QNetworkSession.bytesReceived": (), + "QNetworkSession.bytesWritten": (), + "QNetworkSession.close": (), + "QNetworkSession.configuration": (), + "QNetworkSession.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.errorString": (), + "QNetworkSession.ignore": (), + "QNetworkSession.interface": (), + "QNetworkSession.isOpen": (), + "QNetworkSession.migrate": (), + "QNetworkSession.open": (), + "QNetworkSession.reject": (), + "QNetworkSession.sessionProperty": ('str',), + "QNetworkSession.setSessionProperty": ('str', 'Any'), + "QNetworkSession.state": (), + "QNetworkSession.stop": (), + "QNetworkSession.usagePolicies": (), + "QNetworkSession.waitForOpened": ('int',), + + # class PySide2.QtNetwork.QSsl: + + # class PySide2.QtNetwork.QSslCertificate: + "QSslCertificate.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtNetwork.QSslCertificate',)], + "QSslCertificate.__copy__": (), + "QSslCertificate.clear": (), + "QSslCertificate.digest": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QSslCertificate.effectiveDate": (), + "QSslCertificate.expiryDate": (), + "QSslCertificate.extensions": (), + "QSslCertificate.fromData": ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromDevice": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromPath": ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax'), + "QSslCertificate.handle": (), + "QSslCertificate.importPkcs12": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSslKey', 'PySide2.QtNetwork.QSslCertificate', 'list', 'PySide2.QtCore.QByteArray'), + "QSslCertificate.isBlacklisted": (), + "QSslCertificate.isNull": (), + "QSslCertificate.isSelfSigned": (), + "QSslCertificate.issuerInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.issuerInfoAttributes": (), + "QSslCertificate.publicKey": (), + "QSslCertificate.serialNumber": (), + "QSslCertificate.subjectAlternativeNames": (), + "QSslCertificate.subjectInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.subjectInfoAttributes": (), + "QSslCertificate.swap": ('PySide2.QtNetwork.QSslCertificate',), + "QSslCertificate.toDer": (), + "QSslCertificate.toPem": (), + "QSslCertificate.toText": (), + "QSslCertificate.verify": ('list', 'str'), + "QSslCertificate.version": (), + + # class PySide2.QtNetwork.QSslCertificateExtension: + "QSslCertificateExtension.__init__": [(), ('PySide2.QtNetwork.QSslCertificateExtension',)], + "QSslCertificateExtension.__copy__": (), + "QSslCertificateExtension.isCritical": (), + "QSslCertificateExtension.isSupported": (), + "QSslCertificateExtension.name": (), + "QSslCertificateExtension.oid": (), + "QSslCertificateExtension.swap": ('PySide2.QtNetwork.QSslCertificateExtension',), + "QSslCertificateExtension.value": (), + + # class PySide2.QtNetwork.QSslCipher: + "QSslCipher.__init__": [(), ('PySide2.QtNetwork.QSslCipher',), ('str',), ('str', 'PySide2.QtNetwork.QSsl.SslProtocol')], + "QSslCipher.__copy__": (), + "QSslCipher.authenticationMethod": (), + "QSslCipher.encryptionMethod": (), + "QSslCipher.isNull": (), + "QSslCipher.keyExchangeMethod": (), + "QSslCipher.name": (), + "QSslCipher.protocol": (), + "QSslCipher.protocolString": (), + "QSslCipher.supportedBits": (), + "QSslCipher.swap": ('PySide2.QtNetwork.QSslCipher',), + "QSslCipher.usedBits": (), + + # class PySide2.QtNetwork.QSslConfiguration: + "QSslConfiguration.__init__": [(), ('PySide2.QtNetwork.QSslConfiguration',)], + "QSslConfiguration.__copy__": (), + "QSslConfiguration.allowedNextProtocols": (), + "QSslConfiguration.backendConfiguration": (), + "QSslConfiguration.caCertificates": (), + "QSslConfiguration.ciphers": (), + "QSslConfiguration.defaultConfiguration": (), + "QSslConfiguration.diffieHellmanParameters": (), + "QSslConfiguration.ephemeralServerKey": (), + "QSslConfiguration.isNull": (), + "QSslConfiguration.localCertificate": (), + "QSslConfiguration.localCertificateChain": (), + "QSslConfiguration.nextNegotiatedProtocol": (), + "QSslConfiguration.nextProtocolNegotiationStatus": (), + "QSslConfiguration.peerCertificate": (), + "QSslConfiguration.peerCertificateChain": (), + "QSslConfiguration.peerVerifyDepth": (), + "QSslConfiguration.peerVerifyMode": (), + "QSslConfiguration.preSharedKeyIdentityHint": (), + "QSslConfiguration.privateKey": (), + "QSslConfiguration.protocol": (), + "QSslConfiguration.sessionCipher": (), + "QSslConfiguration.sessionProtocol": (), + "QSslConfiguration.sessionTicket": (), + "QSslConfiguration.sessionTicketLifeTimeHint": (), + "QSslConfiguration.setAllowedNextProtocols": ('list',), + "QSslConfiguration.setBackendConfiguration": ('dict',), + "QSslConfiguration.setBackendConfigurationOption": ('PySide2.QtCore.QByteArray', 'Any'), + "QSslConfiguration.setCaCertificates": ('list',), + "QSslConfiguration.setCiphers": ('list',), + "QSslConfiguration.setDefaultConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.setDiffieHellmanParameters": ('PySide2.QtNetwork.QSslDiffieHellmanParameters',), + "QSslConfiguration.setLocalCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslConfiguration.setLocalCertificateChain": ('list',), + "QSslConfiguration.setPeerVerifyDepth": ('int',), + "QSslConfiguration.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslConfiguration.setPreSharedKeyIdentityHint": ('PySide2.QtCore.QByteArray',), + "QSslConfiguration.setPrivateKey": ('PySide2.QtNetwork.QSslKey',), + "QSslConfiguration.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslConfiguration.setSessionTicket": ('PySide2.QtCore.QByteArray',), + "QSslConfiguration.setSslOption": ('PySide2.QtNetwork.QSsl.SslOption', 'bool'), + "QSslConfiguration.supportedCiphers": (), + "QSslConfiguration.swap": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.systemCaCertificates": (), + "QSslConfiguration.testSslOption": ('PySide2.QtNetwork.QSsl.SslOption',), + + # class PySide2.QtNetwork.QSslDiffieHellmanParameters: + "QSslDiffieHellmanParameters.__init__": [(), ('PySide2.QtNetwork.QSslDiffieHellmanParameters',)], + "QSslDiffieHellmanParameters.__copy__": (), + "QSslDiffieHellmanParameters.defaultParameters": (), + "QSslDiffieHellmanParameters.error": (), + "QSslDiffieHellmanParameters.errorString": (), + "QSslDiffieHellmanParameters.fromEncoded": [('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat')], + "QSslDiffieHellmanParameters.isEmpty": (), + "QSslDiffieHellmanParameters.isValid": (), + "QSslDiffieHellmanParameters.swap": ('PySide2.QtNetwork.QSslDiffieHellmanParameters',), + + # class PySide2.QtNetwork.QSslError: + "QSslError.__init__": [(), ('PySide2.QtNetwork.QSslError',), ('PySide2.QtNetwork.QSslError.SslError',), ('PySide2.QtNetwork.QSslError.SslError', 'PySide2.QtNetwork.QSslCertificate')], + "QSslError.__copy__": (), + "QSslError.certificate": (), + "QSslError.error": (), + "QSslError.errorString": (), + "QSslError.swap": ('PySide2.QtNetwork.QSslError',), + + # class PySide2.QtNetwork.QSslKey: + "QSslKey.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QSslKey',), ('int', 'PySide2.QtNetwork.QSsl.KeyType')], + "QSslKey.__copy__": (), + "QSslKey.algorithm": (), + "QSslKey.clear": (), + "QSslKey.handle": (), + "QSslKey.isNull": (), + "QSslKey.length": (), + "QSslKey.swap": ('PySide2.QtNetwork.QSslKey',), + "QSslKey.toDer": ('PySide2.QtCore.QByteArray',), + "QSslKey.toPem": ('PySide2.QtCore.QByteArray',), + "QSslKey.type": (), + + # class PySide2.QtNetwork.QSslPreSharedKeyAuthenticator: + "QSslPreSharedKeyAuthenticator.__init__": [(), ('PySide2.QtNetwork.QSslPreSharedKeyAuthenticator',)], + "QSslPreSharedKeyAuthenticator.__copy__": (), + "QSslPreSharedKeyAuthenticator.identity": (), + "QSslPreSharedKeyAuthenticator.identityHint": (), + "QSslPreSharedKeyAuthenticator.maximumIdentityLength": (), + "QSslPreSharedKeyAuthenticator.maximumPreSharedKeyLength": (), + "QSslPreSharedKeyAuthenticator.preSharedKey": (), + "QSslPreSharedKeyAuthenticator.setIdentity": ('PySide2.QtCore.QByteArray',), + "QSslPreSharedKeyAuthenticator.setPreSharedKey": ('PySide2.QtCore.QByteArray',), + "QSslPreSharedKeyAuthenticator.swap": ('PySide2.QtNetwork.QSslPreSharedKeyAuthenticator',), + + # class PySide2.QtNetwork.QSslSocket: + "QSslSocket.__init__": ('PySide2.QtCore.QObject',), + "QSslSocket.abort": (), + "QSslSocket.addCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.addDefaultCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addDefaultCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.atEnd": (), + "QSslSocket.bytesAvailable": (), + "QSslSocket.bytesToWrite": (), + "QSslSocket.caCertificates": (), + "QSslSocket.canReadLine": (), + "QSslSocket.ciphers": (), + "QSslSocket.close": (), + "QSslSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'PySide2.libpyside.OpenMode'), ('str', 'int', 'PySide2.libpyside.OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.connectToHostEncrypted": [('str', 'int', 'PySide2.libpyside.OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol'), ('str', 'int', 'str', 'PySide2.libpyside.OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.defaultCaCertificates": (), + "QSslSocket.defaultCiphers": (), + "QSslSocket.disconnectFromHost": (), + "QSslSocket.encryptedBytesAvailable": (), + "QSslSocket.encryptedBytesToWrite": (), + "QSslSocket.flush": (), + "QSslSocket.ignoreSslErrors": [(), ('list',)], + "QSslSocket.isEncrypted": (), + "QSslSocket.localCertificate": (), + "QSslSocket.localCertificateChain": (), + "QSslSocket.mode": (), + "QSslSocket.peerCertificate": (), + "QSslSocket.peerCertificateChain": (), + "QSslSocket.peerVerifyDepth": (), + "QSslSocket.peerVerifyMode": (), + "QSslSocket.peerVerifyName": (), + "QSslSocket.privateKey": (), + "QSslSocket.protocol": (), + "QSslSocket.readData": ('str', 'int'), + "QSslSocket.resume": (), + "QSslSocket.sessionCipher": (), + "QSslSocket.sessionProtocol": (), + "QSslSocket.setCaCertificates": ('list',), + "QSslSocket.setCiphers": [('list',), ('str',)], + "QSslSocket.setDefaultCaCertificates": ('list',), + "QSslSocket.setDefaultCiphers": ('list',), + "QSslSocket.setLocalCertificate": [('PySide2.QtNetwork.QSslCertificate',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat')], + "QSslSocket.setLocalCertificateChain": ('list',), + "QSslSocket.setPeerVerifyDepth": ('int',), + "QSslSocket.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslSocket.setPeerVerifyName": ('str',), + "QSslSocket.setPrivateKey": [('PySide2.QtNetwork.QSslKey',), ('str', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QByteArray')], + "QSslSocket.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslSocket.setReadBufferSize": ('int',), + "QSslSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'PySide2.libpyside.OpenMode'), + "QSslSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'Any'), + "QSslSocket.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QSslSocket.sslConfiguration": (), + "QSslSocket.sslLibraryBuildVersionNumber": (), + "QSslSocket.sslLibraryBuildVersionString": (), + "QSslSocket.sslLibraryVersionNumber": (), + "QSslSocket.sslLibraryVersionString": (), + "QSslSocket.startClientEncryption": (), + "QSslSocket.startServerEncryption": (), + "QSslSocket.supportedCiphers": (), + "QSslSocket.supportsSsl": (), + "QSslSocket.systemCaCertificates": (), + "QSslSocket.waitForBytesWritten": ('int',), + "QSslSocket.waitForConnected": ('int',), + "QSslSocket.waitForDisconnected": ('int',), + "QSslSocket.waitForEncrypted": ('int',), + "QSslSocket.waitForReadyRead": ('int',), + "QSslSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QTcpServer: + "QTcpServer.__init__": ('PySide2.QtCore.QObject',), + "QTcpServer.addPendingConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QTcpServer.close": (), + "QTcpServer.errorString": (), + "QTcpServer.hasPendingConnections": (), + "QTcpServer.incomingConnection": ('int',), + "QTcpServer.isListening": (), + "QTcpServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QTcpServer.maxPendingConnections": (), + "QTcpServer.nextPendingConnection": (), + "QTcpServer.pauseAccepting": (), + "QTcpServer.proxy": (), + "QTcpServer.resumeAccepting": (), + "QTcpServer.serverAddress": (), + "QTcpServer.serverError": (), + "QTcpServer.serverPort": (), + "QTcpServer.setMaxPendingConnections": ('int',), + "QTcpServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QTcpServer.setSocketDescriptor": ('int',), + "QTcpServer.socketDescriptor": (), + "QTcpServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QTcpSocket: + "QTcpSocket.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtNetwork.QUdpSocket: + "QUdpSocket.__init__": ('PySide2.QtCore.QObject',), + "QUdpSocket.hasPendingDatagrams": (), + "QUdpSocket.joinMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.leaveMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.multicastInterface": (), + "QUdpSocket.pendingDatagramSize": (), + "QUdpSocket.readDatagram": ('str', 'int', 'PySide2.QtNetwork.QHostAddress', 'int'), + "QUdpSocket.receiveDatagram": ('int',), + "QUdpSocket.setMulticastInterface": ('PySide2.QtNetwork.QNetworkInterface',), + "QUdpSocket.writeDatagram": [('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHostAddress', 'int'), ('PySide2.QtNetwork.QNetworkDatagram',)], + }) + +# Module PySide2.QtTest +if "PySide2.QtTest" in sys.modules: + dict.update({ + + # class PySide2.QtTest.QTest: + "QTest.addColumnInternal": ('int', 'str'), + "QTest.asciiToKey": ('Union[str, int]',), + "QTest.compare_string_helper": ('str', 'str', 'str', 'str', 'str', 'int'), + "QTest.createTouchDevice": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTest.currentAppName": (), + "QTest.currentDataTag": (), + "QTest.currentTestFailed": (), + "QTest.currentTestFunction": (), + "QTest.ignoreMessage": [('PySide2.QtCore.QtMsgType', 'PySide2.QtCore.QRegularExpression'), ('PySide2.QtCore.QtMsgType', 'str')], + "QTest.keyClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.keyClicks": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.libpyside.KeyboardModifiers', 'int'), + "QTest.keyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.keyPress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.keyRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.keySequence": [('PySide2.QtGui.QWindow', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QKeySequence')], + "QTest.keyToAscii": ('PySide2.QtCore.Qt.Key',), + "QTest.mouseClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseDClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseEvent": [('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseMove": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mousePress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.qCleanup": (), + "QTest.qElementData": ('str', 'int'), + "QTest.qExpectFail": ('str', 'str', 'PySide2.QtTest.QTest.TestFailMode', 'str', 'int'), + "QTest.qFindTestData": ('str', 'str', 'int', 'str'), + "QTest.qGlobalData": ('str', 'int'), + "QTest.qRun": (), + "QTest.qSkip": ('str', 'str', 'int'), + "QTest.qWaitForWindowActive": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.qWaitForWindowExposed": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.sendKeyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'str', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'Union[str, int]', 'PySide2.libpyside.KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'str', 'PySide2.libpyside.KeyboardModifiers', 'int')], + "QTest.setBenchmarkResult": ('float', 'PySide2.QtTest.QTest.QBenchmarkMetric'), + "QTest.setMainSourcePath": ('str', 'str'), + "QTest.simulateEvent": [('PySide2.QtGui.QWindow', 'bool', 'int', 'PySide2.libpyside.KeyboardModifiers', 'str', 'bool', 'int'), ('PySide2.QtWidgets.QWidget', 'bool', 'int', 'PySide2.libpyside.KeyboardModifiers', 'str', 'bool', 'int')], + "QTest.testObject": (), + "QTest.toPrettyCString": ('str', 'int'), + "QTest.touchEvent": [('PySide2.QtGui.QWindow', 'PySide2.QtGui.QTouchDevice', 'bool'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QTouchDevice', 'bool')], + }) + +# Module PySide2.QtConcurrent +if "PySide2.QtConcurrent" in sys.modules: + dict.update({ + + # class PySide2.QtConcurrent.QtConcurrent: + }) + +# Module PySide2.QtWinExtras +if "PySide2.QtWinExtras" in sys.modules: + dict.update({ + + # class PySide2.QtWinExtras.QWinColorizationChangeEvent: + "QWinColorizationChangeEvent.__init__": ('int', 'bool'), + "QWinColorizationChangeEvent.color": (), + "QWinColorizationChangeEvent.opaqueBlend": (), + + # class PySide2.QtWinExtras.QWinCompositionChangeEvent: + "QWinCompositionChangeEvent.__init__": ('bool',), + "QWinCompositionChangeEvent.isCompositionEnabled": (), + + # class PySide2.QtWinExtras.QWinEvent: + "QWinEvent.__init__": ('int',), + + # class PySide2.QtWinExtras.QWinJumpList: + "QWinJumpList.__init__": ('PySide2.QtCore.QObject',), + "QWinJumpList.addCategory": [('PySide2.QtWinExtras.QWinJumpListCategory',), ('str', 'list')], + "QWinJumpList.categories": (), + "QWinJumpList.clear": (), + "QWinJumpList.frequent": (), + "QWinJumpList.identifier": (), + "QWinJumpList.recent": (), + "QWinJumpList.setIdentifier": ('str',), + "QWinJumpList.tasks": (), + + # class PySide2.QtWinExtras.QWinJumpListCategory: + "QWinJumpListCategory.__init__": ('str',), + "QWinJumpListCategory.addDestination": ('str',), + "QWinJumpListCategory.addItem": ('PySide2.QtWinExtras.QWinJumpListItem',), + "QWinJumpListCategory.addLink": [('PySide2.QtGui.QIcon', 'str', 'str', 'List[str]'), ('str', 'str', 'List[str]')], + "QWinJumpListCategory.addSeparator": (), + "QWinJumpListCategory.clear": (), + "QWinJumpListCategory.count": (), + "QWinJumpListCategory.isEmpty": (), + "QWinJumpListCategory.isVisible": (), + "QWinJumpListCategory.items": (), + "QWinJumpListCategory.setTitle": ('str',), + "QWinJumpListCategory.setVisible": ('bool',), + "QWinJumpListCategory.title": (), + "QWinJumpListCategory.type": (), + + # class PySide2.QtWinExtras.QWinJumpListItem: + "QWinJumpListItem.__init__": ('PySide2.QtWinExtras.QWinJumpListItem.Type',), + "QWinJumpListItem.arguments": (), + "QWinJumpListItem.description": (), + "QWinJumpListItem.filePath": (), + "QWinJumpListItem.icon": (), + "QWinJumpListItem.setArguments": ('List[str]',), + "QWinJumpListItem.setDescription": ('str',), + "QWinJumpListItem.setFilePath": ('str',), + "QWinJumpListItem.setIcon": ('PySide2.QtGui.QIcon',), + "QWinJumpListItem.setTitle": ('str',), + "QWinJumpListItem.setType": ('PySide2.QtWinExtras.QWinJumpListItem.Type',), + "QWinJumpListItem.setWorkingDirectory": ('str',), + "QWinJumpListItem.title": (), + "QWinJumpListItem.type": (), + "QWinJumpListItem.workingDirectory": (), + + # class PySide2.QtWinExtras.QWinTaskbarButton: + "QWinTaskbarButton.__init__": ('PySide2.QtCore.QObject',), + "QWinTaskbarButton.clearOverlayIcon": (), + "QWinTaskbarButton.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QWinTaskbarButton.overlayAccessibleDescription": (), + "QWinTaskbarButton.overlayIcon": (), + "QWinTaskbarButton.progress": (), + "QWinTaskbarButton.setOverlayAccessibleDescription": ('str',), + "QWinTaskbarButton.setOverlayIcon": ('PySide2.QtGui.QIcon',), + "QWinTaskbarButton.setWindow": ('PySide2.QtGui.QWindow',), + "QWinTaskbarButton.window": (), + + # class PySide2.QtWinExtras.QWinTaskbarProgress: + "QWinTaskbarProgress.__init__": ('PySide2.QtCore.QObject',), + "QWinTaskbarProgress.hide": (), + "QWinTaskbarProgress.isPaused": (), + "QWinTaskbarProgress.isStopped": (), + "QWinTaskbarProgress.isVisible": (), + "QWinTaskbarProgress.maximum": (), + "QWinTaskbarProgress.minimum": (), + "QWinTaskbarProgress.pause": (), + "QWinTaskbarProgress.reset": (), + "QWinTaskbarProgress.resume": (), + "QWinTaskbarProgress.setMaximum": ('int',), + "QWinTaskbarProgress.setMinimum": ('int',), + "QWinTaskbarProgress.setPaused": ('bool',), + "QWinTaskbarProgress.setRange": ('int', 'int'), + "QWinTaskbarProgress.setValue": ('int',), + "QWinTaskbarProgress.setVisible": ('bool',), + "QWinTaskbarProgress.show": (), + "QWinTaskbarProgress.stop": (), + "QWinTaskbarProgress.value": (), + + # class PySide2.QtWinExtras.QWinThumbnailToolBar: + "QWinThumbnailToolBar.__init__": ('PySide2.QtCore.QObject',), + "QWinThumbnailToolBar.addButton": ('PySide2.QtWinExtras.QWinThumbnailToolButton',), + "QWinThumbnailToolBar.buttons": (), + "QWinThumbnailToolBar.clear": (), + "QWinThumbnailToolBar.count": (), + "QWinThumbnailToolBar.iconicLivePreviewPixmap": (), + "QWinThumbnailToolBar.iconicPixmapNotificationsEnabled": (), + "QWinThumbnailToolBar.iconicThumbnailPixmap": (), + "QWinThumbnailToolBar.removeButton": ('PySide2.QtWinExtras.QWinThumbnailToolButton',), + "QWinThumbnailToolBar.setButtons": ('list',), + "QWinThumbnailToolBar.setIconicLivePreviewPixmap": ('PySide2.QtGui.QPixmap',), + "QWinThumbnailToolBar.setIconicPixmapNotificationsEnabled": ('bool',), + "QWinThumbnailToolBar.setIconicThumbnailPixmap": ('PySide2.QtGui.QPixmap',), + "QWinThumbnailToolBar.setWindow": ('PySide2.QtGui.QWindow',), + "QWinThumbnailToolBar.window": (), + + # class PySide2.QtWinExtras.QWinThumbnailToolButton: + "QWinThumbnailToolButton.__init__": ('PySide2.QtCore.QObject',), + "QWinThumbnailToolButton.click": (), + "QWinThumbnailToolButton.dismissOnClick": (), + "QWinThumbnailToolButton.icon": (), + "QWinThumbnailToolButton.isEnabled": (), + "QWinThumbnailToolButton.isFlat": (), + "QWinThumbnailToolButton.isInteractive": (), + "QWinThumbnailToolButton.isVisible": (), + "QWinThumbnailToolButton.setDismissOnClick": ('bool',), + "QWinThumbnailToolButton.setEnabled": ('bool',), + "QWinThumbnailToolButton.setFlat": ('bool',), + "QWinThumbnailToolButton.setIcon": ('PySide2.QtGui.QIcon',), + "QWinThumbnailToolButton.setInteractive": ('bool',), + "QWinThumbnailToolButton.setToolTip": ('str',), + "QWinThumbnailToolButton.setVisible": ('bool',), + "QWinThumbnailToolButton.toolTip": (), + }) + +# Module PySide2.QtXml +if "PySide2.QtXml" in sys.modules: + dict.update({ + + # class PySide2.QtXml.QDomAttr: + "QDomAttr.__init__": [(), ('PySide2.QtXml.QDomAttr',)], + "QDomAttr.__copy__": (), + "QDomAttr.name": (), + "QDomAttr.nodeType": (), + "QDomAttr.ownerElement": (), + "QDomAttr.setValue": ('str',), + "QDomAttr.specified": (), + "QDomAttr.value": (), + + # class PySide2.QtXml.QDomCDATASection: + "QDomCDATASection.__init__": [(), ('PySide2.QtXml.QDomCDATASection',)], + "QDomCDATASection.__copy__": (), + "QDomCDATASection.nodeType": (), + + # class PySide2.QtXml.QDomCharacterData: + "QDomCharacterData.__init__": [(), ('PySide2.QtXml.QDomCharacterData',)], + "QDomCharacterData.__copy__": (), + "QDomCharacterData.appendData": ('str',), + "QDomCharacterData.data": (), + "QDomCharacterData.deleteData": ('int', 'int'), + "QDomCharacterData.insertData": ('int', 'str'), + "QDomCharacterData.length": (), + "QDomCharacterData.nodeType": (), + "QDomCharacterData.replaceData": ('int', 'int', 'str'), + "QDomCharacterData.setData": ('str',), + "QDomCharacterData.substringData": ('int', 'int'), + + # class PySide2.QtXml.QDomComment: + "QDomComment.__init__": [(), ('PySide2.QtXml.QDomComment',)], + "QDomComment.__copy__": (), + "QDomComment.nodeType": (), + + # class PySide2.QtXml.QDomDocument: + "QDomDocument.__init__": [(), ('PySide2.QtXml.QDomDocument',), ('PySide2.QtXml.QDomDocumentType',), ('str',)], + "QDomDocument.__copy__": (), + "QDomDocument.createAttribute": ('str',), + "QDomDocument.createAttributeNS": ('str', 'str'), + "QDomDocument.createCDATASection": ('str',), + "QDomDocument.createComment": ('str',), + "QDomDocument.createDocumentFragment": (), + "QDomDocument.createElement": ('str',), + "QDomDocument.createElementNS": ('str', 'str'), + "QDomDocument.createEntityReference": ('str',), + "QDomDocument.createProcessingInstruction": ('str', 'str'), + "QDomDocument.createTextNode": ('str',), + "QDomDocument.doctype": (), + "QDomDocument.documentElement": (), + "QDomDocument.elementById": ('str',), + "QDomDocument.elementsByTagName": ('str',), + "QDomDocument.elementsByTagNameNS": ('str', 'str'), + "QDomDocument.implementation": (), + "QDomDocument.importNode": ('PySide2.QtXml.QDomNode', 'bool'), + "QDomDocument.nodeType": (), + "QDomDocument.setContent": [('PySide2.QtCore.QByteArray', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QByteArray', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'PySide2.QtXml.QXmlReader', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'bool', 'str', 'int', 'int'), ('str', 'bool', 'str', 'int', 'int'), ('str', 'str', 'int', 'int')], + "QDomDocument.toByteArray": ('int',), + "QDomDocument.toString": ('int',), + + # class PySide2.QtXml.QDomDocumentFragment: + "QDomDocumentFragment.__init__": [(), ('PySide2.QtXml.QDomDocumentFragment',)], + "QDomDocumentFragment.__copy__": (), + "QDomDocumentFragment.nodeType": (), + + # class PySide2.QtXml.QDomDocumentType: + "QDomDocumentType.__init__": [(), ('PySide2.QtXml.QDomDocumentType',)], + "QDomDocumentType.__copy__": (), + "QDomDocumentType.entities": (), + "QDomDocumentType.internalSubset": (), + "QDomDocumentType.name": (), + "QDomDocumentType.nodeType": (), + "QDomDocumentType.notations": (), + "QDomDocumentType.publicId": (), + "QDomDocumentType.systemId": (), + + # class PySide2.QtXml.QDomElement: + "QDomElement.__init__": [(), ('PySide2.QtXml.QDomElement',)], + "QDomElement.__copy__": (), + "QDomElement.attribute": ('str', 'str'), + "QDomElement.attributeNS": ('str', 'str', 'str'), + "QDomElement.attributeNode": ('str',), + "QDomElement.attributeNodeNS": ('str', 'str'), + "QDomElement.attributes": (), + "QDomElement.elementsByTagName": ('str',), + "QDomElement.elementsByTagNameNS": ('str', 'str'), + "QDomElement.hasAttribute": ('str',), + "QDomElement.hasAttributeNS": ('str', 'str'), + "QDomElement.nodeType": (), + "QDomElement.removeAttribute": ('str',), + "QDomElement.removeAttributeNS": ('str', 'str'), + "QDomElement.removeAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttribute": [('str', 'float'), ('str', 'int'), ('str', 'str')], + "QDomElement.setAttributeNS": [('str', 'str', 'float'), ('str', 'str', 'int'), ('str', 'str', 'str')], + "QDomElement.setAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttributeNodeNS": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setTagName": ('str',), + "QDomElement.tagName": (), + "QDomElement.text": (), + + # class PySide2.QtXml.QDomEntity: + "QDomEntity.__init__": [(), ('PySide2.QtXml.QDomEntity',)], + "QDomEntity.__copy__": (), + "QDomEntity.nodeType": (), + "QDomEntity.notationName": (), + "QDomEntity.publicId": (), + "QDomEntity.systemId": (), + + # class PySide2.QtXml.QDomEntityReference: + "QDomEntityReference.__init__": [(), ('PySide2.QtXml.QDomEntityReference',)], + "QDomEntityReference.__copy__": (), + "QDomEntityReference.nodeType": (), + + # class PySide2.QtXml.QDomImplementation: + "QDomImplementation.__init__": [(), ('PySide2.QtXml.QDomImplementation',)], + "QDomImplementation.__copy__": (), + "QDomImplementation.createDocument": ('str', 'str', 'PySide2.QtXml.QDomDocumentType'), + "QDomImplementation.createDocumentType": ('str', 'str', 'str'), + "QDomImplementation.hasFeature": ('str', 'str'), + "QDomImplementation.invalidDataPolicy": (), + "QDomImplementation.isNull": (), + "QDomImplementation.setInvalidDataPolicy": ('PySide2.QtXml.QDomImplementation.InvalidDataPolicy',), + + # class PySide2.QtXml.QDomNamedNodeMap: + "QDomNamedNodeMap.__init__": [(), ('PySide2.QtXml.QDomNamedNodeMap',)], + "QDomNamedNodeMap.__copy__": (), + "QDomNamedNodeMap.contains": ('str',), + "QDomNamedNodeMap.count": (), + "QDomNamedNodeMap.isEmpty": (), + "QDomNamedNodeMap.item": ('int',), + "QDomNamedNodeMap.length": (), + "QDomNamedNodeMap.namedItem": ('str',), + "QDomNamedNodeMap.namedItemNS": ('str', 'str'), + "QDomNamedNodeMap.removeNamedItem": ('str',), + "QDomNamedNodeMap.removeNamedItemNS": ('str', 'str'), + "QDomNamedNodeMap.setNamedItem": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.setNamedItemNS": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.size": (), + + # class PySide2.QtXml.QDomNode: + "QDomNode.__init__": [(), ('PySide2.QtXml.QDomNode',)], + "QDomNode.__copy__": (), + "QDomNode.appendChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.attributes": (), + "QDomNode.childNodes": (), + "QDomNode.clear": (), + "QDomNode.cloneNode": ('bool',), + "QDomNode.columnNumber": (), + "QDomNode.firstChild": (), + "QDomNode.firstChildElement": ('str',), + "QDomNode.hasAttributes": (), + "QDomNode.hasChildNodes": (), + "QDomNode.insertAfter": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.insertBefore": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.isAttr": (), + "QDomNode.isCDATASection": (), + "QDomNode.isCharacterData": (), + "QDomNode.isComment": (), + "QDomNode.isDocument": (), + "QDomNode.isDocumentFragment": (), + "QDomNode.isDocumentType": (), + "QDomNode.isElement": (), + "QDomNode.isEntity": (), + "QDomNode.isEntityReference": (), + "QDomNode.isNotation": (), + "QDomNode.isNull": (), + "QDomNode.isProcessingInstruction": (), + "QDomNode.isSupported": ('str', 'str'), + "QDomNode.isText": (), + "QDomNode.lastChild": (), + "QDomNode.lastChildElement": ('str',), + "QDomNode.lineNumber": (), + "QDomNode.localName": (), + "QDomNode.namedItem": ('str',), + "QDomNode.namespaceURI": (), + "QDomNode.nextSibling": (), + "QDomNode.nextSiblingElement": ('str',), + "QDomNode.nodeName": (), + "QDomNode.nodeType": (), + "QDomNode.nodeValue": (), + "QDomNode.normalize": (), + "QDomNode.ownerDocument": (), + "QDomNode.parentNode": (), + "QDomNode.prefix": (), + "QDomNode.previousSibling": (), + "QDomNode.previousSiblingElement": ('str',), + "QDomNode.removeChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.replaceChild": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.save": ('PySide2.QtCore.QTextStream', 'int', 'PySide2.QtXml.QDomNode.EncodingPolicy'), + "QDomNode.setNodeValue": ('str',), + "QDomNode.setPrefix": ('str',), + "QDomNode.toAttr": (), + "QDomNode.toCDATASection": (), + "QDomNode.toCharacterData": (), + "QDomNode.toComment": (), + "QDomNode.toDocument": (), + "QDomNode.toDocumentFragment": (), + "QDomNode.toDocumentType": (), + "QDomNode.toElement": (), + "QDomNode.toEntity": (), + "QDomNode.toEntityReference": (), + "QDomNode.toNotation": (), + "QDomNode.toProcessingInstruction": (), + "QDomNode.toText": (), + + # class PySide2.QtXml.QDomNodeList: + "QDomNodeList.__init__": [(), ('PySide2.QtXml.QDomNodeList',)], + "QDomNodeList.__copy__": (), + "QDomNodeList.at": ('int',), + "QDomNodeList.count": (), + "QDomNodeList.isEmpty": (), + "QDomNodeList.item": ('int',), + "QDomNodeList.length": (), + "QDomNodeList.size": (), + + # class PySide2.QtXml.QDomNotation: + "QDomNotation.__init__": [(), ('PySide2.QtXml.QDomNotation',)], + "QDomNotation.__copy__": (), + "QDomNotation.nodeType": (), + "QDomNotation.publicId": (), + "QDomNotation.systemId": (), + + # class PySide2.QtXml.QDomProcessingInstruction: + "QDomProcessingInstruction.__init__": [(), ('PySide2.QtXml.QDomProcessingInstruction',)], + "QDomProcessingInstruction.__copy__": (), + "QDomProcessingInstruction.data": (), + "QDomProcessingInstruction.nodeType": (), + "QDomProcessingInstruction.setData": ('str',), + "QDomProcessingInstruction.target": (), + + # class PySide2.QtXml.QDomText: + "QDomText.__init__": [(), ('PySide2.QtXml.QDomText',)], + "QDomText.__copy__": (), + "QDomText.nodeType": (), + "QDomText.splitText": ('int',), + + # class PySide2.QtXml.QXmlAttributes: + "QXmlAttributes.__init__": [(), ('PySide2.QtXml.QXmlAttributes',)], + "QXmlAttributes.__copy__": (), + "QXmlAttributes.append": ('str', 'str', 'str', 'str'), + "QXmlAttributes.clear": (), + "QXmlAttributes.count": (), + "QXmlAttributes.index": [('str',), ('str', 'str')], + "QXmlAttributes.length": (), + "QXmlAttributes.localName": ('int',), + "QXmlAttributes.qName": ('int',), + "QXmlAttributes.swap": ('PySide2.QtXml.QXmlAttributes',), + "QXmlAttributes.type": [('int',), ('str',), ('str', 'str')], + "QXmlAttributes.uri": ('int',), + "QXmlAttributes.value": [('int',), ('str',), ('str', 'str')], + + # class PySide2.QtXml.QXmlContentHandler: + "QXmlContentHandler.__init__": (), + "QXmlContentHandler.characters": ('str',), + "QXmlContentHandler.endDocument": (), + "QXmlContentHandler.endElement": ('str', 'str', 'str'), + "QXmlContentHandler.endPrefixMapping": ('str',), + "QXmlContentHandler.errorString": (), + "QXmlContentHandler.ignorableWhitespace": ('str',), + "QXmlContentHandler.processingInstruction": ('str', 'str'), + "QXmlContentHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlContentHandler.skippedEntity": ('str',), + "QXmlContentHandler.startDocument": (), + "QXmlContentHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlContentHandler.startPrefixMapping": ('str', 'str'), + + # class PySide2.QtXml.QXmlDTDHandler: + "QXmlDTDHandler.__init__": (), + "QXmlDTDHandler.errorString": (), + "QXmlDTDHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDTDHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + + # class PySide2.QtXml.QXmlDeclHandler: + "QXmlDeclHandler.__init__": (), + "QXmlDeclHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDeclHandler.errorString": (), + "QXmlDeclHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDeclHandler.internalEntityDecl": ('str', 'str'), + + # class PySide2.QtXml.QXmlDefaultHandler: + "QXmlDefaultHandler.__init__": (), + "QXmlDefaultHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDefaultHandler.characters": ('str',), + "QXmlDefaultHandler.comment": ('str',), + "QXmlDefaultHandler.endCDATA": (), + "QXmlDefaultHandler.endDTD": (), + "QXmlDefaultHandler.endDocument": (), + "QXmlDefaultHandler.endElement": ('str', 'str', 'str'), + "QXmlDefaultHandler.endEntity": ('str',), + "QXmlDefaultHandler.endPrefixMapping": ('str',), + "QXmlDefaultHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.errorString": (), + "QXmlDefaultHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.ignorableWhitespace": ('str',), + "QXmlDefaultHandler.internalEntityDecl": ('str', 'str'), + "QXmlDefaultHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.processingInstruction": ('str', 'str'), + "QXmlDefaultHandler.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + "QXmlDefaultHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlDefaultHandler.skippedEntity": ('str',), + "QXmlDefaultHandler.startCDATA": (), + "QXmlDefaultHandler.startDTD": ('str', 'str', 'str'), + "QXmlDefaultHandler.startDocument": (), + "QXmlDefaultHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlDefaultHandler.startEntity": ('str',), + "QXmlDefaultHandler.startPrefixMapping": ('str', 'str'), + "QXmlDefaultHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + "QXmlDefaultHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlEntityResolver: + "QXmlEntityResolver.__init__": (), + "QXmlEntityResolver.errorString": (), + "QXmlEntityResolver.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + + # class PySide2.QtXml.QXmlErrorHandler: + "QXmlErrorHandler.__init__": (), + "QXmlErrorHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.errorString": (), + "QXmlErrorHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlInputSource: + "QXmlInputSource.__init__": [(), ('PySide2.QtCore.QIODevice',)], + "QXmlInputSource.data": (), + "QXmlInputSource.fetchData": (), + "QXmlInputSource.fromRawData": ('PySide2.QtCore.QByteArray', 'bool'), + "QXmlInputSource.reset": (), + "QXmlInputSource.setData": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtXml.QXmlLexicalHandler: + "QXmlLexicalHandler.__init__": (), + "QXmlLexicalHandler.comment": ('str',), + "QXmlLexicalHandler.endCDATA": (), + "QXmlLexicalHandler.endDTD": (), + "QXmlLexicalHandler.endEntity": ('str',), + "QXmlLexicalHandler.errorString": (), + "QXmlLexicalHandler.startCDATA": (), + "QXmlLexicalHandler.startDTD": ('str', 'str', 'str'), + "QXmlLexicalHandler.startEntity": ('str',), + + # class PySide2.QtXml.QXmlLocator: + "QXmlLocator.__init__": (), + "QXmlLocator.columnNumber": (), + "QXmlLocator.lineNumber": (), + + # class PySide2.QtXml.QXmlNamespaceSupport: + "QXmlNamespaceSupport.__init__": (), + "QXmlNamespaceSupport.popContext": (), + "QXmlNamespaceSupport.prefix": ('str',), + "QXmlNamespaceSupport.prefixes": [(), ('str',)], + "QXmlNamespaceSupport.processName": ('str', 'bool', 'str', 'str'), + "QXmlNamespaceSupport.pushContext": (), + "QXmlNamespaceSupport.reset": (), + "QXmlNamespaceSupport.setPrefix": ('str', 'str'), + "QXmlNamespaceSupport.splitName": ('str', 'str', 'str'), + "QXmlNamespaceSupport.uri": ('str',), + + # class PySide2.QtXml.QXmlParseException: + "QXmlParseException.__init__": [('PySide2.QtXml.QXmlParseException',), ('str', 'int', 'int', 'str', 'str')], + "QXmlParseException.columnNumber": (), + "QXmlParseException.lineNumber": (), + "QXmlParseException.message": (), + "QXmlParseException.publicId": (), + "QXmlParseException.systemId": (), + + # class PySide2.QtXml.QXmlReader: + "QXmlReader.__init__": (), + "QXmlReader.DTDHandler": (), + "QXmlReader.contentHandler": (), + "QXmlReader.declHandler": (), + "QXmlReader.entityResolver": (), + "QXmlReader.errorHandler": (), + "QXmlReader.feature": ('str', 'bool'), + "QXmlReader.hasFeature": ('str',), + "QXmlReader.hasProperty": ('str',), + "QXmlReader.lexicalHandler": (), + "QXmlReader.parse": ('PySide2.QtXml.QXmlInputSource',), + "QXmlReader.property": ('str', 'bool'), + "QXmlReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlReader.setFeature": ('str', 'bool'), + "QXmlReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlReader.setProperty": ('str', 'int'), + + # class PySide2.QtXml.QXmlSimpleReader: + "QXmlSimpleReader.__init__": (), + "QXmlSimpleReader.DTDHandler": (), + "QXmlSimpleReader.contentHandler": (), + "QXmlSimpleReader.declHandler": (), + "QXmlSimpleReader.entityResolver": (), + "QXmlSimpleReader.errorHandler": (), + "QXmlSimpleReader.feature": ('str', 'bool'), + "QXmlSimpleReader.hasFeature": ('str',), + "QXmlSimpleReader.hasProperty": ('str',), + "QXmlSimpleReader.lexicalHandler": (), + "QXmlSimpleReader.parse": [('PySide2.QtXml.QXmlInputSource',), ('PySide2.QtXml.QXmlInputSource', 'bool')], + "QXmlSimpleReader.parseContinue": (), + "QXmlSimpleReader.property": ('str', 'bool'), + "QXmlSimpleReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlSimpleReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlSimpleReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlSimpleReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlSimpleReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlSimpleReader.setFeature": ('str', 'bool'), + "QXmlSimpleReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlSimpleReader.setProperty": ('str', 'int'), + }) + +# Module PySide2.QtXmlPatterns +if "PySide2.QtXmlPatterns" in sys.modules: + dict.update({ + + # class PySide2.QtXmlPatterns.QAbstractMessageHandler: + "QAbstractMessageHandler.__init__": ('PySide2.QtCore.QObject',), + "QAbstractMessageHandler.handleMessage": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + "QAbstractMessageHandler.message": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + + # class PySide2.QtXmlPatterns.QAbstractUriResolver: + "QAbstractUriResolver.__init__": ('PySide2.QtCore.QObject',), + "QAbstractUriResolver.resolve": ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtXmlPatterns.QAbstractXmlNodeModel: + "QAbstractXmlNodeModel.__init__": (), + "QAbstractXmlNodeModel.attributes": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.baseUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.compareOrder": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.createIndex": [('int',), ('int', 'int')], + "QAbstractXmlNodeModel.documentUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.elementById": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.isDeepEqual": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.kind": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.name": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceBindings": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceForPrefix": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'Missing(PySide2.QtXmlPatterns.QXmlName.PrefixCode)'), + "QAbstractXmlNodeModel.nextFromSimpleAxis": ('PySide2.QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.nodesByIdref": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.root": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.sendNamespaces": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QAbstractXmlReceiver'), + "QAbstractXmlNodeModel.sourceLocation": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.stringValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.typedValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + + # class PySide2.QtXmlPatterns.QAbstractXmlReceiver: + "QAbstractXmlReceiver.__init__": (), + "QAbstractXmlReceiver.atomicValue": ('Any',), + "QAbstractXmlReceiver.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.characters": ('str',), + "QAbstractXmlReceiver.comment": ('str',), + "QAbstractXmlReceiver.endDocument": (), + "QAbstractXmlReceiver.endElement": (), + "QAbstractXmlReceiver.endOfSequence": (), + "QAbstractXmlReceiver.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.startDocument": (), + "QAbstractXmlReceiver.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.startOfSequence": (), + "QAbstractXmlReceiver.whitespaceOnly": ('str',), + + # class PySide2.QtXmlPatterns.QSourceLocation: + "QSourceLocation.__init__": [(), ('PySide2.QtCore.QUrl', 'int', 'int'), ('PySide2.QtXmlPatterns.QSourceLocation',)], + "QSourceLocation.__copy__": (), + "QSourceLocation.column": (), + "QSourceLocation.isNull": (), + "QSourceLocation.line": (), + "QSourceLocation.setColumn": ('int',), + "QSourceLocation.setLine": ('int',), + "QSourceLocation.setUri": ('PySide2.QtCore.QUrl',), + "QSourceLocation.uri": (), + + # class PySide2.QtXmlPatterns.QXmlFormatter: + "QXmlFormatter.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlFormatter.atomicValue": ('Any',), + "QXmlFormatter.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.characters": ('str',), + "QXmlFormatter.comment": ('str',), + "QXmlFormatter.endDocument": (), + "QXmlFormatter.endElement": (), + "QXmlFormatter.endOfSequence": (), + "QXmlFormatter.indentationDepth": (), + "QXmlFormatter.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.setIndentationDepth": ('int',), + "QXmlFormatter.startDocument": (), + "QXmlFormatter.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlFormatter.startOfSequence": (), + + # class PySide2.QtXmlPatterns.QXmlItem: + "QXmlItem.__init__": [(), ('Any',), ('PySide2.QtXmlPatterns.QXmlItem',), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlItem.__copy__": (), + "QXmlItem.isAtomicValue": (), + "QXmlItem.isNode": (), + "QXmlItem.isNull": (), + "QXmlItem.toAtomicValue": (), + "QXmlItem.toNodeModelIndex": (), + + # class PySide2.QtXmlPatterns.QXmlName: + "QXmlName.__init__": [(), ('PySide2.QtXmlPatterns.QXmlName',), ('PySide2.QtXmlPatterns.QXmlNamePool', 'str', 'str', 'str')], + "QXmlName.__copy__": (), + "QXmlName.fromClarkName": ('str', 'PySide2.QtXmlPatterns.QXmlNamePool'), + "QXmlName.isNCName": ('str',), + "QXmlName.isNull": (), + "QXmlName.localName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.namespaceUri": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.prefix": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.toClarkName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + + # class PySide2.QtXmlPatterns.QXmlNamePool: + "QXmlNamePool.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',)], + "QXmlNamePool.__copy__": (), + + # class PySide2.QtXmlPatterns.QXmlNodeModelIndex: + "QXmlNodeModelIndex.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlNodeModelIndex.__copy__": (), + "QXmlNodeModelIndex.additionalData": (), + "QXmlNodeModelIndex.data": (), + "QXmlNodeModelIndex.internalPointer": (), + "QXmlNodeModelIndex.isNull": (), + "QXmlNodeModelIndex.model": (), + + # class PySide2.QtXmlPatterns.QXmlQuery: + "QXmlQuery.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',), ('PySide2.QtXmlPatterns.QXmlQuery',), ('PySide2.QtXmlPatterns.QXmlQuery.QueryLanguage', 'PySide2.QtXmlPatterns.QXmlNamePool')], + "QXmlQuery.__copy__": (), + "QXmlQuery.bindVariable": [('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtCore.QIODevice'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlItem'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlQuery'), ('str', 'PySide2.QtCore.QIODevice'), ('str', 'PySide2.QtXmlPatterns.QXmlItem'), ('str', 'PySide2.QtXmlPatterns.QXmlQuery')], + "QXmlQuery.evaluateTo": [('PySide2.QtCore.QIODevice',), ('PySide2.QtXmlPatterns.QAbstractXmlReceiver',), ('PySide2.QtXmlPatterns.QXmlResultItems',)], + "QXmlQuery.initialTemplateName": (), + "QXmlQuery.isValid": (), + "QXmlQuery.messageHandler": (), + "QXmlQuery.namePool": (), + "QXmlQuery.queryLanguage": (), + "QXmlQuery.setFocus": [('PySide2.QtCore.QIODevice',), ('PySide2.QtCore.QUrl',), ('PySide2.QtXmlPatterns.QXmlItem',), ('str',)], + "QXmlQuery.setInitialTemplateName": [('PySide2.QtXmlPatterns.QXmlName',), ('str',)], + "QXmlQuery.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlQuery.setQuery": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), ('str', 'PySide2.QtCore.QUrl')], + "QXmlQuery.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlQuery.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlResultItems: + "QXmlResultItems.__init__": (), + "QXmlResultItems.current": (), + "QXmlResultItems.hasError": (), + + # class PySide2.QtXmlPatterns.QXmlSchema: + "QXmlSchema.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchema.documentUri": (), + "QXmlSchema.isValid": (), + "QXmlSchema.load": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + "QXmlSchema.messageHandler": (), + "QXmlSchema.namePool": (), + "QXmlSchema.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchema.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchema.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlSchemaValidator: + "QXmlSchemaValidator.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchemaValidator.messageHandler": (), + "QXmlSchemaValidator.namePool": (), + "QXmlSchemaValidator.schema": (), + "QXmlSchemaValidator.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchemaValidator.setSchema": ('PySide2.QtXmlPatterns.QXmlSchema',), + "QXmlSchemaValidator.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchemaValidator.uriResolver": (), + "QXmlSchemaValidator.validate": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + + # class PySide2.QtXmlPatterns.QXmlSerializer: + "QXmlSerializer.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlSerializer.atomicValue": ('Any',), + "QXmlSerializer.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.characters": ('str',), + "QXmlSerializer.codec": (), + "QXmlSerializer.comment": ('str',), + "QXmlSerializer.endDocument": (), + "QXmlSerializer.endElement": (), + "QXmlSerializer.endOfSequence": (), + "QXmlSerializer.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.outputDevice": (), + "QXmlSerializer.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.setCodec": ('PySide2.QtCore.QTextCodec',), + "QXmlSerializer.startDocument": (), + "QXmlSerializer.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.startOfSequence": (), + }) + +# Module PySide2.QtHelp +if "PySide2.QtHelp" in sys.modules: + dict.update({ + + # class PySide2.QtHelp.QHelpContentItem: + "QHelpContentItem.__copy__": (), + "QHelpContentItem.child": ('int',), + "QHelpContentItem.childCount": (), + "QHelpContentItem.childPosition": ('PySide2.QtHelp.QHelpContentItem',), + "QHelpContentItem.parent": (), + "QHelpContentItem.row": (), + "QHelpContentItem.title": (), + "QHelpContentItem.url": (), + + # class PySide2.QtHelp.QHelpContentModel: + "QHelpContentModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.contentItemAt": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.createContents": ('str',), + "QHelpContentModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QHelpContentModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QHelpContentModel.isCreatingContents": (), + "QHelpContentModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QHelpContentModel.rowCount": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtHelp.QHelpContentWidget: + "QHelpContentWidget.indexOf": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtHelp.QHelpEngine: + "QHelpEngine.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngine.contentModel": (), + "QHelpEngine.contentWidget": (), + "QHelpEngine.indexModel": (), + "QHelpEngine.indexWidget": (), + "QHelpEngine.searchEngine": (), + + # class PySide2.QtHelp.QHelpEngineCore: + "QHelpEngineCore.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngineCore.addCustomFilter": ('str', 'List[str]'), + "QHelpEngineCore.autoSaveFilter": (), + "QHelpEngineCore.collectionFile": (), + "QHelpEngineCore.copyCollectionFile": ('str',), + "QHelpEngineCore.currentFilter": (), + "QHelpEngineCore.customFilters": (), + "QHelpEngineCore.customValue": ('str', 'Any'), + "QHelpEngineCore.documentationFileName": ('str',), + "QHelpEngineCore.error": (), + "QHelpEngineCore.fileData": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.files": ('str', 'List[str]', 'str'), + "QHelpEngineCore.filterAttributeSets": ('str',), + "QHelpEngineCore.filterAttributes": [(), ('str',)], + "QHelpEngineCore.findFile": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.linksForIdentifier": ('str',), + "QHelpEngineCore.linksForKeyword": ('str',), + "QHelpEngineCore.metaData": ('str', 'str'), + "QHelpEngineCore.namespaceName": ('str',), + "QHelpEngineCore.registerDocumentation": ('str',), + "QHelpEngineCore.registeredDocumentations": (), + "QHelpEngineCore.removeCustomFilter": ('str',), + "QHelpEngineCore.removeCustomValue": ('str',), + "QHelpEngineCore.setAutoSaveFilter": ('bool',), + "QHelpEngineCore.setCollectionFile": ('str',), + "QHelpEngineCore.setCurrentFilter": ('str',), + "QHelpEngineCore.setCustomValue": ('str', 'Any'), + "QHelpEngineCore.setupData": (), + "QHelpEngineCore.unregisterDocumentation": ('str',), + + # class PySide2.QtHelp.QHelpIndexModel: + "QHelpIndexModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object'), ('str',)], + "QHelpIndexModel.filter": ('str', 'str'), + "QHelpIndexModel.isCreatingIndex": (), + "QHelpIndexModel.linksForKeyword": ('str',), + + # class PySide2.QtHelp.QHelpIndexWidget: + "QHelpIndexWidget.activateCurrentItem": (), + "QHelpIndexWidget.filterIndices": ('str', 'str'), + + # class PySide2.QtHelp.QHelpSearchEngine: + "QHelpSearchEngine.__init__": ('PySide2.QtHelp.QHelpEngineCore', 'PySide2.QtCore.QObject'), + "QHelpSearchEngine.cancelIndexing": (), + "QHelpSearchEngine.cancelSearching": (), + "QHelpSearchEngine.hitCount": (), + "QHelpSearchEngine.hits": ('int', 'int'), + "QHelpSearchEngine.hitsCount": (), + "QHelpSearchEngine.query": (), + "QHelpSearchEngine.queryWidget": (), + "QHelpSearchEngine.reindexDocumentation": (), + "QHelpSearchEngine.resultWidget": (), + "QHelpSearchEngine.scheduleIndexDocumentation": (), + "QHelpSearchEngine.search": [('list',), ('str',)], + "QHelpSearchEngine.searchInput": (), + "QHelpSearchEngine.searchResultCount": (), + "QHelpSearchEngine.searchResults": ('int', 'int'), + + # class PySide2.QtHelp.QHelpSearchQuery: + "QHelpSearchQuery.__init__": [(), ('PySide2.QtHelp.QHelpSearchQuery',), ('PySide2.QtHelp.QHelpSearchQuery.FieldName', 'List[str]')], + "QHelpSearchQuery.__copy__": (), + + # class PySide2.QtHelp.QHelpSearchQueryWidget: + "QHelpSearchQueryWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QHelpSearchQueryWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchQueryWidget.collapseExtendedSearch": (), + "QHelpSearchQueryWidget.expandExtendedSearch": (), + "QHelpSearchQueryWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QHelpSearchQueryWidget.isCompactMode": (), + "QHelpSearchQueryWidget.query": (), + "QHelpSearchQueryWidget.searchInput": (), + "QHelpSearchQueryWidget.setCompactMode": ('bool',), + "QHelpSearchQueryWidget.setQuery": ('list',), + "QHelpSearchQueryWidget.setSearchInput": ('str',), + + # class PySide2.QtHelp.QHelpSearchResult: + "QHelpSearchResult.__init__": [(), ('PySide2.QtCore.QUrl', 'str', 'str'), ('PySide2.QtHelp.QHelpSearchResult',)], + "QHelpSearchResult.snippet": (), + "QHelpSearchResult.title": (), + "QHelpSearchResult.url": (), + + # class PySide2.QtHelp.QHelpSearchResultWidget: + "QHelpSearchResultWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchResultWidget.linkAt": ('PySide2.QtCore.QPoint',), + }) + +# Module PySide2.QtMultimedia +if "PySide2.QtMultimedia" in sys.modules: + dict.update({ + + # class PySide2.QtMultimedia.QAbstractAudioDeviceInfo: + "QAbstractAudioDeviceInfo.__init__": (), + "QAbstractAudioDeviceInfo.deviceName": (), + "QAbstractAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioDeviceInfo.preferredFormat": (), + "QAbstractAudioDeviceInfo.supportedByteOrders": (), + "QAbstractAudioDeviceInfo.supportedChannelCounts": (), + "QAbstractAudioDeviceInfo.supportedCodecs": (), + "QAbstractAudioDeviceInfo.supportedSampleRates": (), + "QAbstractAudioDeviceInfo.supportedSampleSizes": (), + "QAbstractAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAbstractAudioInput: + "QAbstractAudioInput.__init__": (), + "QAbstractAudioInput.bufferSize": (), + "QAbstractAudioInput.bytesReady": (), + "QAbstractAudioInput.elapsedUSecs": (), + "QAbstractAudioInput.error": (), + "QAbstractAudioInput.format": (), + "QAbstractAudioInput.notifyInterval": (), + "QAbstractAudioInput.periodSize": (), + "QAbstractAudioInput.processedUSecs": (), + "QAbstractAudioInput.reset": (), + "QAbstractAudioInput.resume": (), + "QAbstractAudioInput.setBufferSize": ('int',), + "QAbstractAudioInput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioInput.setNotifyInterval": ('int',), + "QAbstractAudioInput.setVolume": ('float',), + "QAbstractAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioInput.state": (), + "QAbstractAudioInput.stop": (), + "QAbstractAudioInput.suspend": (), + "QAbstractAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAbstractAudioOutput: + "QAbstractAudioOutput.__init__": (), + "QAbstractAudioOutput.bufferSize": (), + "QAbstractAudioOutput.bytesFree": (), + "QAbstractAudioOutput.category": (), + "QAbstractAudioOutput.elapsedUSecs": (), + "QAbstractAudioOutput.error": (), + "QAbstractAudioOutput.format": (), + "QAbstractAudioOutput.notifyInterval": (), + "QAbstractAudioOutput.periodSize": (), + "QAbstractAudioOutput.processedUSecs": (), + "QAbstractAudioOutput.reset": (), + "QAbstractAudioOutput.resume": (), + "QAbstractAudioOutput.setBufferSize": ('int',), + "QAbstractAudioOutput.setCategory": ('str',), + "QAbstractAudioOutput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioOutput.setNotifyInterval": ('int',), + "QAbstractAudioOutput.setVolume": ('float',), + "QAbstractAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioOutput.state": (), + "QAbstractAudioOutput.stop": (), + "QAbstractAudioOutput.suspend": (), + "QAbstractAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAbstractVideoBuffer: + "QAbstractVideoBuffer.__init__": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoBuffer.handle": (), + "QAbstractVideoBuffer.handleType": (), + "QAbstractVideoBuffer.mapMode": (), + "QAbstractVideoBuffer.release": (), + "QAbstractVideoBuffer.unmap": (), + + # class PySide2.QtMultimedia.QAbstractVideoFilter: + "QAbstractVideoFilter.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoFilter.createFilterRunnable": (), + "QAbstractVideoFilter.isActive": (), + "QAbstractVideoFilter.setActive": ('bool',), + + # class PySide2.QtMultimedia.QAbstractVideoSurface: + "QAbstractVideoSurface.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoSurface.error": (), + "QAbstractVideoSurface.isActive": (), + "QAbstractVideoSurface.isFormatSupported": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.nativeResolution": (), + "QAbstractVideoSurface.nearestFormat": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.present": ('PySide2.QtMultimedia.QVideoFrame',), + "QAbstractVideoSurface.setError": ('PySide2.QtMultimedia.QAbstractVideoSurface.Error',), + "QAbstractVideoSurface.setNativeResolution": ('PySide2.QtCore.QSize',), + "QAbstractVideoSurface.start": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.stop": (), + "QAbstractVideoSurface.supportedPixelFormats": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoSurface.surfaceFormat": (), + + # class PySide2.QtMultimedia.QAudio: + "QAudio.convertVolume": ('float', 'PySide2.QtMultimedia.QAudio.VolumeScale', 'PySide2.QtMultimedia.QAudio.VolumeScale'), + + # class PySide2.QtMultimedia.QAudioBuffer: + "QAudioBuffer.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtMultimedia.QAudioFormat', 'int'), ('PySide2.QtMultimedia.QAudioBuffer',), ('int', 'PySide2.QtMultimedia.QAudioFormat', 'int')], + "QAudioBuffer.__copy__": (), + "QAudioBuffer.byteCount": (), + "QAudioBuffer.constData": (), + "QAudioBuffer.data": (), + "QAudioBuffer.duration": (), + "QAudioBuffer.format": (), + "QAudioBuffer.frameCount": (), + "QAudioBuffer.isValid": (), + "QAudioBuffer.sampleCount": (), + "QAudioBuffer.startTime": (), + + # class PySide2.QtMultimedia.QAudioDecoder: + "QAudioDecoder.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoder.audioFormat": (), + "QAudioDecoder.bind": ('PySide2.QtCore.QObject',), + "QAudioDecoder.bufferAvailable": (), + "QAudioDecoder.duration": (), + "QAudioDecoder.errorString": (), + "QAudioDecoder.hasSupport": ('str', 'List[str]'), + "QAudioDecoder.position": (), + "QAudioDecoder.read": (), + "QAudioDecoder.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoder.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoder.setSourceFilename": ('str',), + "QAudioDecoder.sourceDevice": (), + "QAudioDecoder.sourceFilename": (), + "QAudioDecoder.start": (), + "QAudioDecoder.state": (), + "QAudioDecoder.stop": (), + "QAudioDecoder.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QAudioDecoderControl: + "QAudioDecoderControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoderControl.audioFormat": (), + "QAudioDecoderControl.bufferAvailable": (), + "QAudioDecoderControl.duration": (), + "QAudioDecoderControl.position": (), + "QAudioDecoderControl.read": (), + "QAudioDecoderControl.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoderControl.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoderControl.setSourceFilename": ('str',), + "QAudioDecoderControl.sourceDevice": (), + "QAudioDecoderControl.sourceFilename": (), + "QAudioDecoderControl.start": (), + "QAudioDecoderControl.state": (), + "QAudioDecoderControl.stop": (), + + # class PySide2.QtMultimedia.QAudioDeviceInfo: + "QAudioDeviceInfo.__init__": [(), ('PySide2.QtMultimedia.QAudioDeviceInfo',)], + "QAudioDeviceInfo.__copy__": (), + "QAudioDeviceInfo.availableDevices": ('PySide2.QtMultimedia.QAudio.Mode',), + "QAudioDeviceInfo.defaultInputDevice": (), + "QAudioDeviceInfo.defaultOutputDevice": (), + "QAudioDeviceInfo.deviceName": (), + "QAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.isNull": (), + "QAudioDeviceInfo.nearestFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.preferredFormat": (), + "QAudioDeviceInfo.supportedByteOrders": (), + "QAudioDeviceInfo.supportedChannelCounts": (), + "QAudioDeviceInfo.supportedCodecs": (), + "QAudioDeviceInfo.supportedSampleRates": (), + "QAudioDeviceInfo.supportedSampleSizes": (), + "QAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAudioEncoderSettings: + "QAudioEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QAudioEncoderSettings',)], + "QAudioEncoderSettings.__copy__": (), + "QAudioEncoderSettings.bitRate": (), + "QAudioEncoderSettings.channelCount": (), + "QAudioEncoderSettings.codec": (), + "QAudioEncoderSettings.encodingMode": (), + "QAudioEncoderSettings.encodingOption": ('str',), + "QAudioEncoderSettings.encodingOptions": (), + "QAudioEncoderSettings.isNull": (), + "QAudioEncoderSettings.quality": (), + "QAudioEncoderSettings.sampleRate": (), + "QAudioEncoderSettings.setBitRate": ('int',), + "QAudioEncoderSettings.setChannelCount": ('int',), + "QAudioEncoderSettings.setCodec": ('str',), + "QAudioEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QAudioEncoderSettings.setEncodingOption": ('str', 'Any'), + "QAudioEncoderSettings.setEncodingOptions": ('dict',), + "QAudioEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QAudioEncoderSettings.setSampleRate": ('int',), + + # class PySide2.QtMultimedia.QAudioEncoderSettingsControl: + "QAudioEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioEncoderSettingsControl.audioSettings": (), + "QAudioEncoderSettingsControl.codecDescription": ('str',), + "QAudioEncoderSettingsControl.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QAudioEncoderSettingsControl.supportedAudioCodecs": (), + + # class PySide2.QtMultimedia.QAudioFormat: + "QAudioFormat.__init__": [(), ('PySide2.QtMultimedia.QAudioFormat',)], + "QAudioFormat.__copy__": (), + "QAudioFormat.byteOrder": (), + "QAudioFormat.bytesForDuration": ('int',), + "QAudioFormat.bytesForFrames": ('int',), + "QAudioFormat.bytesPerFrame": (), + "QAudioFormat.channelCount": (), + "QAudioFormat.codec": (), + "QAudioFormat.durationForBytes": ('int',), + "QAudioFormat.durationForFrames": ('int',), + "QAudioFormat.framesForBytes": ('int',), + "QAudioFormat.framesForDuration": ('int',), + "QAudioFormat.isValid": (), + "QAudioFormat.sampleRate": (), + "QAudioFormat.sampleSize": (), + "QAudioFormat.sampleType": (), + "QAudioFormat.setByteOrder": ('PySide2.QtMultimedia.QAudioFormat.Endian',), + "QAudioFormat.setChannelCount": ('int',), + "QAudioFormat.setCodec": ('str',), + "QAudioFormat.setSampleRate": ('int',), + "QAudioFormat.setSampleSize": ('int',), + "QAudioFormat.setSampleType": ('PySide2.QtMultimedia.QAudioFormat.SampleType',), + + # class PySide2.QtMultimedia.QAudioInput: + "QAudioInput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioInput.bufferSize": (), + "QAudioInput.bytesReady": (), + "QAudioInput.elapsedUSecs": (), + "QAudioInput.error": (), + "QAudioInput.format": (), + "QAudioInput.notifyInterval": (), + "QAudioInput.periodSize": (), + "QAudioInput.processedUSecs": (), + "QAudioInput.reset": (), + "QAudioInput.resume": (), + "QAudioInput.setBufferSize": ('int',), + "QAudioInput.setNotifyInterval": ('int',), + "QAudioInput.setVolume": ('float',), + "QAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioInput.state": (), + "QAudioInput.stop": (), + "QAudioInput.suspend": (), + "QAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAudioInputSelectorControl: + "QAudioInputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioInputSelectorControl.activeInput": (), + "QAudioInputSelectorControl.availableInputs": (), + "QAudioInputSelectorControl.defaultInput": (), + "QAudioInputSelectorControl.inputDescription": ('str',), + "QAudioInputSelectorControl.setActiveInput": ('str',), + + # class PySide2.QtMultimedia.QAudioOutput: + "QAudioOutput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioOutput.bufferSize": (), + "QAudioOutput.bytesFree": (), + "QAudioOutput.category": (), + "QAudioOutput.elapsedUSecs": (), + "QAudioOutput.error": (), + "QAudioOutput.format": (), + "QAudioOutput.notifyInterval": (), + "QAudioOutput.periodSize": (), + "QAudioOutput.processedUSecs": (), + "QAudioOutput.reset": (), + "QAudioOutput.resume": (), + "QAudioOutput.setBufferSize": ('int',), + "QAudioOutput.setCategory": ('str',), + "QAudioOutput.setNotifyInterval": ('int',), + "QAudioOutput.setVolume": ('float',), + "QAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioOutput.state": (), + "QAudioOutput.stop": (), + "QAudioOutput.suspend": (), + "QAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAudioOutputSelectorControl: + "QAudioOutputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioOutputSelectorControl.activeOutput": (), + "QAudioOutputSelectorControl.availableOutputs": (), + "QAudioOutputSelectorControl.defaultOutput": (), + "QAudioOutputSelectorControl.outputDescription": ('str',), + "QAudioOutputSelectorControl.setActiveOutput": ('str',), + + # class PySide2.QtMultimedia.QAudioProbe: + "QAudioProbe.__init__": ('PySide2.QtCore.QObject',), + "QAudioProbe.isActive": (), + "QAudioProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QAudioRecorder: + "QAudioRecorder.__init__": ('PySide2.QtCore.QObject',), + "QAudioRecorder.audioInput": (), + "QAudioRecorder.audioInputDescription": ('str',), + "QAudioRecorder.audioInputs": (), + "QAudioRecorder.defaultAudioInput": (), + "QAudioRecorder.setAudioInput": ('str',), + + # class PySide2.QtMultimedia.QAudioRoleControl: + "QAudioRoleControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioRoleControl.audioRole": (), + "QAudioRoleControl.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QAudioRoleControl.supportedAudioRoles": (), + + # class PySide2.QtMultimedia.QCamera: + "QCamera.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtMultimedia.QCamera.Position', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QCameraInfo', 'PySide2.QtCore.QObject')], + "QCamera.availability": (), + "QCamera.availableDevices": (), + "QCamera.captureMode": (), + "QCamera.deviceDescription": ('PySide2.QtCore.QByteArray',), + "QCamera.errorString": (), + "QCamera.isCaptureModeSupported": ('PySide2.libpyside.CaptureModes',), + "QCamera.load": (), + "QCamera.lockStatus": [(), ('PySide2.QtMultimedia.QCamera.LockType',)], + "QCamera.requestedLocks": (), + "QCamera.searchAndLock": [(), ('PySide2.libpyside.LockTypes',)], + "QCamera.setCaptureMode": ('PySide2.libpyside.CaptureModes',), + "QCamera.setViewfinder": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QCamera.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.start": (), + "QCamera.state": (), + "QCamera.status": (), + "QCamera.stop": (), + "QCamera.supportedLocks": (), + "QCamera.supportedViewfinderFrameRateRanges": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderPixelFormats": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderResolutions": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.unload": (), + "QCamera.unlock": [(), ('PySide2.libpyside.LockTypes',)], + "QCamera.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraCaptureBufferFormatControl: + "QCameraCaptureBufferFormatControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureBufferFormatControl.bufferFormat": (), + "QCameraCaptureBufferFormatControl.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraCaptureBufferFormatControl.supportedBufferFormats": (), + + # class PySide2.QtMultimedia.QCameraCaptureDestinationControl: + "QCameraCaptureDestinationControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureDestinationControl.captureDestination": (), + "QCameraCaptureDestinationControl.isCaptureDestinationSupported": ('PySide2.libpyside.CaptureDestinations',), + "QCameraCaptureDestinationControl.setCaptureDestination": ('PySide2.libpyside.CaptureDestinations',), + + # class PySide2.QtMultimedia.QCameraControl: + "QCameraControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraControl.canChangeProperty": ('PySide2.QtMultimedia.QCameraControl.PropertyChangeType', 'PySide2.QtMultimedia.QCamera.Status'), + "QCameraControl.captureMode": (), + "QCameraControl.isCaptureModeSupported": ('PySide2.libpyside.CaptureModes',), + "QCameraControl.setCaptureMode": ('PySide2.libpyside.CaptureModes',), + "QCameraControl.setState": ('PySide2.QtMultimedia.QCamera.State',), + "QCameraControl.state": (), + "QCameraControl.status": (), + + # class PySide2.QtMultimedia.QCameraExposureControl: + "QCameraExposureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraExposureControl.actualValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.requestedValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.setValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter', 'Any'), + + # class PySide2.QtMultimedia.QCameraFeedbackControl: + "QCameraFeedbackControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraFeedbackControl.isEventFeedbackEnabled": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType',), + "QCameraFeedbackControl.isEventFeedbackLocked": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType',), + "QCameraFeedbackControl.resetEventFeedback": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType',), + "QCameraFeedbackControl.setEventFeedbackEnabled": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType', 'bool'), + "QCameraFeedbackControl.setEventFeedbackSound": ('PySide2.QtMultimedia.QCameraFeedbackControl.EventType', 'str'), + + # class PySide2.QtMultimedia.QCameraFocusZone: + "QCameraFocusZone.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus'), ('PySide2.QtMultimedia.QCameraFocusZone',)], + "QCameraFocusZone.__copy__": (), + "QCameraFocusZone.area": (), + "QCameraFocusZone.isValid": (), + "QCameraFocusZone.setStatus": ('PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus',), + "QCameraFocusZone.status": (), + + # class PySide2.QtMultimedia.QCameraImageCapture: + "QCameraImageCapture.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QCameraImageCapture.availability": (), + "QCameraImageCapture.bufferFormat": (), + "QCameraImageCapture.cancelCapture": (), + "QCameraImageCapture.capture": ('str',), + "QCameraImageCapture.captureDestination": (), + "QCameraImageCapture.encodingSettings": (), + "QCameraImageCapture.errorString": (), + "QCameraImageCapture.imageCodecDescription": ('str',), + "QCameraImageCapture.isAvailable": (), + "QCameraImageCapture.isCaptureDestinationSupported": ('PySide2.libpyside.CaptureDestinations',), + "QCameraImageCapture.isReadyForCapture": (), + "QCameraImageCapture.mediaObject": (), + "QCameraImageCapture.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraImageCapture.setCaptureDestination": ('PySide2.libpyside.CaptureDestinations',), + "QCameraImageCapture.setEncodingSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QCameraImageCapture.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QCameraImageCapture.supportedBufferFormats": (), + "QCameraImageCapture.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QCameraImageCaptureControl: + "QCameraImageCaptureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageCaptureControl.cancelCapture": (), + "QCameraImageCaptureControl.capture": ('str',), + "QCameraImageCaptureControl.driveMode": (), + "QCameraImageCaptureControl.isReadyForCapture": (), + "QCameraImageCaptureControl.setDriveMode": ('PySide2.QtMultimedia.QCameraImageCapture.DriveMode',), + + # class PySide2.QtMultimedia.QCameraImageProcessingControl: + "QCameraImageProcessingControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageProcessingControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.isParameterValueSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'Any'), + "QCameraImageProcessingControl.parameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.setParameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'Any'), + + # class PySide2.QtMultimedia.QCameraInfo: + "QCameraInfo.__init__": [('PySide2.QtCore.QByteArray',), ('PySide2.QtMultimedia.QCamera',), ('PySide2.QtMultimedia.QCameraInfo',)], + "QCameraInfo.__copy__": (), + "QCameraInfo.availableCameras": ('PySide2.QtMultimedia.QCamera.Position',), + "QCameraInfo.defaultCamera": (), + "QCameraInfo.description": (), + "QCameraInfo.deviceName": (), + "QCameraInfo.isNull": (), + "QCameraInfo.orientation": (), + "QCameraInfo.position": (), + + # class PySide2.QtMultimedia.QCameraInfoControl: + "QCameraInfoControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraInfoControl.cameraOrientation": ('str',), + "QCameraInfoControl.cameraPosition": ('str',), + + # class PySide2.QtMultimedia.QCameraLocksControl: + "QCameraLocksControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraLocksControl.lockStatus": ('PySide2.QtMultimedia.QCamera.LockType',), + "QCameraLocksControl.searchAndLock": ('PySide2.libpyside.LockTypes',), + "QCameraLocksControl.supportedLocks": (), + "QCameraLocksControl.unlock": ('PySide2.libpyside.LockTypes',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettings: + "QCameraViewfinderSettings.__init__": [(), ('PySide2.QtMultimedia.QCameraViewfinderSettings',)], + "QCameraViewfinderSettings.__copy__": (), + "QCameraViewfinderSettings.isNull": (), + "QCameraViewfinderSettings.maximumFrameRate": (), + "QCameraViewfinderSettings.minimumFrameRate": (), + "QCameraViewfinderSettings.pixelAspectRatio": (), + "QCameraViewfinderSettings.pixelFormat": (), + "QCameraViewfinderSettings.resolution": (), + "QCameraViewfinderSettings.setMaximumFrameRate": ('float',), + "QCameraViewfinderSettings.setMinimumFrameRate": ('float',), + "QCameraViewfinderSettings.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.setPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraViewfinderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.swap": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl: + "QCameraViewfinderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl.isViewfinderParameterSupported": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + "QCameraViewfinderSettingsControl.setViewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter', 'Any'), + "QCameraViewfinderSettingsControl.viewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl2: + "QCameraViewfinderSettingsControl2.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl2.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCameraViewfinderSettingsControl2.supportedViewfinderSettings": (), + "QCameraViewfinderSettingsControl2.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraZoomControl: + "QCameraZoomControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraZoomControl.currentDigitalZoom": (), + "QCameraZoomControl.currentOpticalZoom": (), + "QCameraZoomControl.maximumDigitalZoom": (), + "QCameraZoomControl.maximumOpticalZoom": (), + "QCameraZoomControl.requestedDigitalZoom": (), + "QCameraZoomControl.requestedOpticalZoom": (), + "QCameraZoomControl.zoomTo": ('float', 'float'), + + # class PySide2.QtMultimedia.QCustomAudioRoleControl: + "QCustomAudioRoleControl.__init__": ('PySide2.QtCore.QObject',), + "QCustomAudioRoleControl.customAudioRole": (), + "QCustomAudioRoleControl.setCustomAudioRole": ('str',), + "QCustomAudioRoleControl.supportedCustomAudioRoles": (), + + # class PySide2.QtMultimedia.QImageEncoderControl: + "QImageEncoderControl.__init__": ('PySide2.QtCore.QObject',), + "QImageEncoderControl.imageCodecDescription": ('str',), + "QImageEncoderControl.imageSettings": (), + "QImageEncoderControl.setImageSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QImageEncoderControl.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QImageEncoderSettings: + "QImageEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QImageEncoderSettings',)], + "QImageEncoderSettings.__copy__": (), + "QImageEncoderSettings.codec": (), + "QImageEncoderSettings.encodingOption": ('str',), + "QImageEncoderSettings.encodingOptions": (), + "QImageEncoderSettings.isNull": (), + "QImageEncoderSettings.quality": (), + "QImageEncoderSettings.resolution": (), + "QImageEncoderSettings.setCodec": ('str',), + "QImageEncoderSettings.setEncodingOption": ('str', 'Any'), + "QImageEncoderSettings.setEncodingOptions": ('dict',), + "QImageEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QImageEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QMediaAudioProbeControl: + "QMediaAudioProbeControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaAvailabilityControl: + "QMediaAvailabilityControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaAvailabilityControl.availability": (), + + # class PySide2.QtMultimedia.QMediaBindableInterface: + "QMediaBindableInterface.__init__": (), + "QMediaBindableInterface.mediaObject": (), + "QMediaBindableInterface.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimedia.QMediaContainerControl: + "QMediaContainerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaContainerControl.containerDescription": ('str',), + "QMediaContainerControl.containerFormat": (), + "QMediaContainerControl.setContainerFormat": ('str',), + "QMediaContainerControl.supportedContainers": (), + + # class PySide2.QtMultimedia.QMediaContent: + "QMediaContent.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtMultimedia.QMediaContent',), ('PySide2.QtMultimedia.QMediaPlaylist', 'PySide2.QtCore.QUrl', 'bool'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest',), ('list',)], + "QMediaContent.__copy__": (), + "QMediaContent.canonicalRequest": (), + "QMediaContent.canonicalResource": (), + "QMediaContent.canonicalUrl": (), + "QMediaContent.isNull": (), + "QMediaContent.playlist": (), + "QMediaContent.resources": (), + + # class PySide2.QtMultimedia.QMediaControl: + "QMediaControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaGaplessPlaybackControl: + "QMediaGaplessPlaybackControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaGaplessPlaybackControl.crossfadeTime": (), + "QMediaGaplessPlaybackControl.isCrossfadeSupported": (), + "QMediaGaplessPlaybackControl.nextMedia": (), + "QMediaGaplessPlaybackControl.setCrossfadeTime": ('float',), + "QMediaGaplessPlaybackControl.setNextMedia": ('PySide2.QtMultimedia.QMediaContent',), + + # class PySide2.QtMultimedia.QMediaNetworkAccessControl: + "QMediaNetworkAccessControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaNetworkAccessControl.currentConfiguration": (), + "QMediaNetworkAccessControl.setConfigurations": ('list',), + + # class PySide2.QtMultimedia.QMediaObject: + "QMediaObject.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtMultimedia.QMediaService'), + "QMediaObject.addPropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.availability": (), + "QMediaObject.availableMetaData": (), + "QMediaObject.bind": ('PySide2.QtCore.QObject',), + "QMediaObject.isAvailable": (), + "QMediaObject.isMetaDataAvailable": (), + "QMediaObject.metaData": ('str',), + "QMediaObject.notifyInterval": (), + "QMediaObject.removePropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.service": (), + "QMediaObject.setNotifyInterval": ('int',), + "QMediaObject.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaPlayer: + "QMediaPlayer.__init__": ('PySide2.QtCore.QObject', 'PySide2.libpyside.Flags'), + "QMediaPlayer.audioRole": (), + "QMediaPlayer.availability": (), + "QMediaPlayer.bind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.bufferStatus": (), + "QMediaPlayer.currentMedia": (), + "QMediaPlayer.currentNetworkConfiguration": (), + "QMediaPlayer.customAudioRole": (), + "QMediaPlayer.duration": (), + "QMediaPlayer.errorString": (), + "QMediaPlayer.hasSupport": ('str', 'List[str]', 'PySide2.libpyside.Flags'), + "QMediaPlayer.isAudioAvailable": (), + "QMediaPlayer.isMuted": (), + "QMediaPlayer.isSeekable": (), + "QMediaPlayer.isVideoAvailable": (), + "QMediaPlayer.media": (), + "QMediaPlayer.mediaStatus": (), + "QMediaPlayer.mediaStream": (), + "QMediaPlayer.pause": (), + "QMediaPlayer.play": (), + "QMediaPlayer.playbackRate": (), + "QMediaPlayer.playlist": (), + "QMediaPlayer.position": (), + "QMediaPlayer.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QMediaPlayer.setCustomAudioRole": ('str',), + "QMediaPlayer.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayer.setMuted": ('bool',), + "QMediaPlayer.setNetworkConfigurations": ('list',), + "QMediaPlayer.setPlaybackRate": ('float',), + "QMediaPlayer.setPlaylist": ('PySide2.QtMultimedia.QMediaPlaylist',), + "QMediaPlayer.setPosition": ('int',), + "QMediaPlayer.setVideoOutput": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QMediaPlayer.setVolume": ('int',), + "QMediaPlayer.state": (), + "QMediaPlayer.stop": (), + "QMediaPlayer.supportedAudioRoles": (), + "QMediaPlayer.supportedCustomAudioRoles": (), + "QMediaPlayer.supportedMimeTypes": ('PySide2.libpyside.Flags',), + "QMediaPlayer.unbind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.volume": (), + + # class PySide2.QtMultimedia.QMediaPlayerControl: + "QMediaPlayerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlayerControl.availablePlaybackRanges": (), + "QMediaPlayerControl.bufferStatus": (), + "QMediaPlayerControl.duration": (), + "QMediaPlayerControl.isAudioAvailable": (), + "QMediaPlayerControl.isMuted": (), + "QMediaPlayerControl.isSeekable": (), + "QMediaPlayerControl.isVideoAvailable": (), + "QMediaPlayerControl.media": (), + "QMediaPlayerControl.mediaStatus": (), + "QMediaPlayerControl.mediaStream": (), + "QMediaPlayerControl.pause": (), + "QMediaPlayerControl.play": (), + "QMediaPlayerControl.playbackRate": (), + "QMediaPlayerControl.position": (), + "QMediaPlayerControl.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayerControl.setMuted": ('bool',), + "QMediaPlayerControl.setPlaybackRate": ('float',), + "QMediaPlayerControl.setPosition": ('int',), + "QMediaPlayerControl.setVolume": ('int',), + "QMediaPlayerControl.state": (), + "QMediaPlayerControl.stop": (), + "QMediaPlayerControl.volume": (), + + # class PySide2.QtMultimedia.QMediaPlaylist: + "QMediaPlaylist.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlaylist.addMedia": [('PySide2.QtMultimedia.QMediaContent',), ('list',)], + "QMediaPlaylist.clear": (), + "QMediaPlaylist.currentIndex": (), + "QMediaPlaylist.currentMedia": (), + "QMediaPlaylist.error": (), + "QMediaPlaylist.errorString": (), + "QMediaPlaylist.insertMedia": [('int', 'PySide2.QtMultimedia.QMediaContent'), ('int', 'list')], + "QMediaPlaylist.isEmpty": (), + "QMediaPlaylist.isReadOnly": (), + "QMediaPlaylist.load": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaPlaylist.media": ('int',), + "QMediaPlaylist.mediaCount": (), + "QMediaPlaylist.mediaObject": (), + "QMediaPlaylist.moveMedia": ('int', 'int'), + "QMediaPlaylist.nextIndex": ('int',), + "QMediaPlaylist.playbackMode": (), + "QMediaPlaylist.previous": (), + "QMediaPlaylist.previousIndex": ('int',), + "QMediaPlaylist.removeMedia": [('int',), ('int', 'int')], + "QMediaPlaylist.save": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str')], + "QMediaPlaylist.setCurrentIndex": ('int',), + "QMediaPlaylist.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaPlaylist.setPlaybackMode": ('PySide2.QtMultimedia.QMediaPlaylist.PlaybackMode',), + "QMediaPlaylist.shuffle": (), + + # class PySide2.QtMultimedia.QMediaRecorder: + "QMediaRecorder.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QMediaRecorder.actualLocation": (), + "QMediaRecorder.audioCodecDescription": ('str',), + "QMediaRecorder.audioSettings": (), + "QMediaRecorder.availability": (), + "QMediaRecorder.availableMetaData": (), + "QMediaRecorder.containerDescription": ('str',), + "QMediaRecorder.containerFormat": (), + "QMediaRecorder.duration": (), + "QMediaRecorder.errorString": (), + "QMediaRecorder.isAvailable": (), + "QMediaRecorder.isMetaDataAvailable": (), + "QMediaRecorder.isMetaDataWritable": (), + "QMediaRecorder.isMuted": (), + "QMediaRecorder.mediaObject": (), + "QMediaRecorder.metaData": ('str',), + "QMediaRecorder.outputLocation": (), + "QMediaRecorder.pause": (), + "QMediaRecorder.record": (), + "QMediaRecorder.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QMediaRecorder.setContainerFormat": ('str',), + "QMediaRecorder.setEncodingSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings', 'PySide2.QtMultimedia.QVideoEncoderSettings', 'str'), + "QMediaRecorder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaRecorder.setMetaData": ('str', 'Any'), + "QMediaRecorder.setMuted": ('bool',), + "QMediaRecorder.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorder.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QMediaRecorder.setVolume": ('float',), + "QMediaRecorder.state": (), + "QMediaRecorder.status": (), + "QMediaRecorder.stop": (), + "QMediaRecorder.supportedAudioCodecs": (), + "QMediaRecorder.supportedContainers": (), + "QMediaRecorder.supportedVideoCodecs": (), + "QMediaRecorder.videoCodecDescription": ('str',), + "QMediaRecorder.videoSettings": (), + "QMediaRecorder.volume": (), + + # class PySide2.QtMultimedia.QMediaRecorderControl: + "QMediaRecorderControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaRecorderControl.applySettings": (), + "QMediaRecorderControl.duration": (), + "QMediaRecorderControl.isMuted": (), + "QMediaRecorderControl.outputLocation": (), + "QMediaRecorderControl.setMuted": ('bool',), + "QMediaRecorderControl.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorderControl.setState": ('PySide2.QtMultimedia.QMediaRecorder.State',), + "QMediaRecorderControl.setVolume": ('float',), + "QMediaRecorderControl.state": (), + "QMediaRecorderControl.status": (), + "QMediaRecorderControl.volume": (), + + # class PySide2.QtMultimedia.QMediaResource: + "QMediaResource.__init__": [(), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaResource.__copy__": (), + "QMediaResource.audioBitRate": (), + "QMediaResource.audioCodec": (), + "QMediaResource.channelCount": (), + "QMediaResource.dataSize": (), + "QMediaResource.isNull": (), + "QMediaResource.language": (), + "QMediaResource.mimeType": (), + "QMediaResource.request": (), + "QMediaResource.resolution": (), + "QMediaResource.sampleRate": (), + "QMediaResource.setAudioBitRate": ('int',), + "QMediaResource.setAudioCodec": ('str',), + "QMediaResource.setChannelCount": ('int',), + "QMediaResource.setDataSize": ('int',), + "QMediaResource.setLanguage": ('str',), + "QMediaResource.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QMediaResource.setSampleRate": ('int',), + "QMediaResource.setVideoBitRate": ('int',), + "QMediaResource.setVideoCodec": ('str',), + "QMediaResource.url": (), + "QMediaResource.videoBitRate": (), + "QMediaResource.videoCodec": (), + + # class PySide2.QtMultimedia.QMediaService: + "QMediaService.__init__": ('PySide2.QtCore.QObject',), + "QMediaService.releaseControl": ('PySide2.QtMultimedia.QMediaControl',), + "QMediaService.requestControl": ('str',), + + # class PySide2.QtMultimedia.QMediaServiceCameraInfoInterface: + "QMediaServiceCameraInfoInterface.__init__": (), + "QMediaServiceCameraInfoInterface.cameraOrientation": ('PySide2.QtCore.QByteArray',), + "QMediaServiceCameraInfoInterface.cameraPosition": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtMultimedia.QMediaServiceDefaultDeviceInterface: + "QMediaServiceDefaultDeviceInterface.__init__": (), + "QMediaServiceDefaultDeviceInterface.defaultDevice": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtMultimedia.QMediaServiceFeaturesInterface: + "QMediaServiceFeaturesInterface.__init__": (), + "QMediaServiceFeaturesInterface.supportedFeatures": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtMultimedia.QMediaServiceProviderHint: + "QMediaServiceProviderHint.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtMultimedia.QCamera.Position',), ('PySide2.QtMultimedia.QMediaServiceProviderHint',), ('PySide2.libpyside.Features',), ('str', 'List[str]')], + "QMediaServiceProviderHint.__copy__": (), + "QMediaServiceProviderHint.cameraPosition": (), + "QMediaServiceProviderHint.codecs": (), + "QMediaServiceProviderHint.device": (), + "QMediaServiceProviderHint.features": (), + "QMediaServiceProviderHint.isNull": (), + "QMediaServiceProviderHint.mimeType": (), + "QMediaServiceProviderHint.type": (), + + # class PySide2.QtMultimedia.QMediaServiceSupportedDevicesInterface: + "QMediaServiceSupportedDevicesInterface.__init__": (), + "QMediaServiceSupportedDevicesInterface.deviceDescription": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QMediaServiceSupportedDevicesInterface.devices": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtMultimedia.QMediaServiceSupportedFormatsInterface: + "QMediaServiceSupportedFormatsInterface.__init__": (), + "QMediaServiceSupportedFormatsInterface.hasSupport": ('str', 'List[str]'), + "QMediaServiceSupportedFormatsInterface.supportedMimeTypes": (), + + # class PySide2.QtMultimedia.QMediaStreamsControl: + "QMediaStreamsControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaStreamsControl.isActive": ('int',), + "QMediaStreamsControl.metaData": ('int', 'str'), + "QMediaStreamsControl.setActive": ('int', 'bool'), + "QMediaStreamsControl.streamCount": (), + "QMediaStreamsControl.streamType": ('int',), + + # class PySide2.QtMultimedia.QMediaTimeInterval: + "QMediaTimeInterval.__init__": [(), ('PySide2.QtMultimedia.QMediaTimeInterval',), ('int', 'int')], + "QMediaTimeInterval.__copy__": (), + "QMediaTimeInterval.contains": ('int',), + "QMediaTimeInterval.end": (), + "QMediaTimeInterval.isNormal": (), + "QMediaTimeInterval.normalized": (), + "QMediaTimeInterval.start": (), + "QMediaTimeInterval.translated": ('int',), + + # class PySide2.QtMultimedia.QMediaTimeRange: + "QMediaTimeRange.__init__": [(), ('PySide2.QtMultimedia.QMediaTimeInterval',), ('PySide2.QtMultimedia.QMediaTimeRange',), ('int', 'int')], + "QMediaTimeRange.__copy__": (), + "QMediaTimeRange.addInterval": [('PySide2.QtMultimedia.QMediaTimeInterval',), ('int', 'int')], + "QMediaTimeRange.addTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + "QMediaTimeRange.clear": (), + "QMediaTimeRange.contains": ('int',), + "QMediaTimeRange.earliestTime": (), + "QMediaTimeRange.intervals": (), + "QMediaTimeRange.isContinuous": (), + "QMediaTimeRange.isEmpty": (), + "QMediaTimeRange.latestTime": (), + "QMediaTimeRange.removeInterval": [('PySide2.QtMultimedia.QMediaTimeInterval',), ('int', 'int')], + "QMediaTimeRange.removeTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + + # class PySide2.QtMultimedia.QMediaVideoProbeControl: + "QMediaVideoProbeControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMetaDataReaderControl: + "QMetaDataReaderControl.__init__": ('PySide2.QtCore.QObject',), + "QMetaDataReaderControl.availableMetaData": (), + "QMetaDataReaderControl.isMetaDataAvailable": (), + "QMetaDataReaderControl.metaData": ('str',), + + # class PySide2.QtMultimedia.QMetaDataWriterControl: + "QMetaDataWriterControl.__init__": ('PySide2.QtCore.QObject',), + "QMetaDataWriterControl.availableMetaData": (), + "QMetaDataWriterControl.isMetaDataAvailable": (), + "QMetaDataWriterControl.isWritable": (), + "QMetaDataWriterControl.metaData": ('str',), + "QMetaDataWriterControl.setMetaData": ('str', 'Any'), + + # class PySide2.QtMultimedia.QMultimedia: + + # class PySide2.QtMultimedia.QRadioData: + "QRadioData.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QRadioData.availability": (), + "QRadioData.errorString": (), + "QRadioData.isAlternativeFrequenciesEnabled": (), + "QRadioData.mediaObject": (), + "QRadioData.programType": (), + "QRadioData.programTypeName": (), + "QRadioData.radioText": (), + "QRadioData.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioData.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QRadioData.stationId": (), + "QRadioData.stationName": (), + + # class PySide2.QtMultimedia.QRadioDataControl: + "QRadioDataControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioDataControl.errorString": (), + "QRadioDataControl.isAlternativeFrequenciesEnabled": (), + "QRadioDataControl.programType": (), + "QRadioDataControl.programTypeName": (), + "QRadioDataControl.radioText": (), + "QRadioDataControl.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioDataControl.stationId": (), + "QRadioDataControl.stationName": (), + + # class PySide2.QtMultimedia.QRadioTuner: + "QRadioTuner.__init__": ('PySide2.QtCore.QObject',), + "QRadioTuner.availability": (), + "QRadioTuner.band": (), + "QRadioTuner.cancelSearch": (), + "QRadioTuner.errorString": (), + "QRadioTuner.frequency": (), + "QRadioTuner.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isAntennaConnected": (), + "QRadioTuner.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isMuted": (), + "QRadioTuner.isSearching": (), + "QRadioTuner.isStereo": (), + "QRadioTuner.radioData": (), + "QRadioTuner.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTuner.searchBackward": (), + "QRadioTuner.searchForward": (), + "QRadioTuner.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.setFrequency": ('int',), + "QRadioTuner.setMuted": ('bool',), + "QRadioTuner.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTuner.setVolume": ('int',), + "QRadioTuner.signalStrength": (), + "QRadioTuner.start": (), + "QRadioTuner.state": (), + "QRadioTuner.stereoMode": (), + "QRadioTuner.stop": (), + "QRadioTuner.volume": (), + + # class PySide2.QtMultimedia.QRadioTunerControl: + "QRadioTunerControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioTunerControl.band": (), + "QRadioTunerControl.cancelSearch": (), + "QRadioTunerControl.errorString": (), + "QRadioTunerControl.frequency": (), + "QRadioTunerControl.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isAntennaConnected": (), + "QRadioTunerControl.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isMuted": (), + "QRadioTunerControl.isSearching": (), + "QRadioTunerControl.isStereo": (), + "QRadioTunerControl.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTunerControl.searchBackward": (), + "QRadioTunerControl.searchForward": (), + "QRadioTunerControl.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.setFrequency": ('int',), + "QRadioTunerControl.setMuted": ('bool',), + "QRadioTunerControl.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTunerControl.setVolume": ('int',), + "QRadioTunerControl.signalStrength": (), + "QRadioTunerControl.start": (), + "QRadioTunerControl.state": (), + "QRadioTunerControl.stereoMode": (), + "QRadioTunerControl.stop": (), + "QRadioTunerControl.volume": (), + + # class PySide2.QtMultimedia.QSound: + "QSound.__init__": ('str', 'PySide2.QtCore.QObject'), + "QSound.fileName": (), + "QSound.isFinished": (), + "QSound.loops": (), + "QSound.loopsRemaining": (), + "QSound.play": [(), ('str',)], + "QSound.setLoops": ('int',), + "QSound.stop": (), + + # class PySide2.QtMultimedia.QSoundEffect: + "QSoundEffect.__init__": ('PySide2.QtCore.QObject',), + "QSoundEffect.category": (), + "QSoundEffect.isLoaded": (), + "QSoundEffect.isMuted": (), + "QSoundEffect.isPlaying": (), + "QSoundEffect.loopCount": (), + "QSoundEffect.loopsRemaining": (), + "QSoundEffect.play": (), + "QSoundEffect.setCategory": ('str',), + "QSoundEffect.setLoopCount": ('int',), + "QSoundEffect.setMuted": ('bool',), + "QSoundEffect.setSource": ('PySide2.QtCore.QUrl',), + "QSoundEffect.setVolume": ('float',), + "QSoundEffect.source": (), + "QSoundEffect.status": (), + "QSoundEffect.stop": (), + "QSoundEffect.supportedMimeTypes": (), + "QSoundEffect.volume": (), + + # class PySide2.QtMultimedia.QVideoDeviceSelectorControl: + "QVideoDeviceSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoDeviceSelectorControl.defaultDevice": (), + "QVideoDeviceSelectorControl.deviceCount": (), + "QVideoDeviceSelectorControl.deviceDescription": ('int',), + "QVideoDeviceSelectorControl.deviceName": ('int',), + "QVideoDeviceSelectorControl.selectedDevice": (), + "QVideoDeviceSelectorControl.setSelectedDevice": ('int',), + + # class PySide2.QtMultimedia.QVideoEncoderSettings: + "QVideoEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QVideoEncoderSettings',)], + "QVideoEncoderSettings.__copy__": (), + "QVideoEncoderSettings.bitRate": (), + "QVideoEncoderSettings.codec": (), + "QVideoEncoderSettings.encodingMode": (), + "QVideoEncoderSettings.encodingOption": ('str',), + "QVideoEncoderSettings.encodingOptions": (), + "QVideoEncoderSettings.frameRate": (), + "QVideoEncoderSettings.isNull": (), + "QVideoEncoderSettings.quality": (), + "QVideoEncoderSettings.resolution": (), + "QVideoEncoderSettings.setBitRate": ('int',), + "QVideoEncoderSettings.setCodec": ('str',), + "QVideoEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QVideoEncoderSettings.setEncodingOption": ('str', 'Any'), + "QVideoEncoderSettings.setEncodingOptions": ('dict',), + "QVideoEncoderSettings.setFrameRate": ('float',), + "QVideoEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QVideoEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QVideoEncoderSettingsControl: + "QVideoEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoEncoderSettingsControl.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QVideoEncoderSettingsControl.supportedVideoCodecs": (), + "QVideoEncoderSettingsControl.videoCodecDescription": ('str',), + "QVideoEncoderSettingsControl.videoSettings": (), + + # class PySide2.QtMultimedia.QVideoFilterRunnable: + "QVideoFilterRunnable.__init__": (), + "QVideoFilterRunnable.run": ('PySide2.QtMultimedia.QVideoFrame', 'PySide2.QtMultimedia.QVideoSurfaceFormat', 'PySide2.libpyside.RunFlags'), + + # class PySide2.QtMultimedia.QVideoFrame: + "QVideoFrame.__init__": [(), ('PySide2.QtGui.QImage',), ('PySide2.QtMultimedia.QAbstractVideoBuffer', 'PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat'), ('PySide2.QtMultimedia.QVideoFrame',), ('int', 'PySide2.QtCore.QSize', 'int', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat')], + "QVideoFrame.__copy__": (), + "QVideoFrame.availableMetaData": (), + "QVideoFrame.bits": (), + "QVideoFrame.bytesPerLine": [(), ('int',)], + "QVideoFrame.endTime": (), + "QVideoFrame.fieldType": (), + "QVideoFrame.handle": (), + "QVideoFrame.handleType": (), + "QVideoFrame.height": (), + "QVideoFrame.imageFormatFromPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QVideoFrame.isMapped": (), + "QVideoFrame.isReadable": (), + "QVideoFrame.isValid": (), + "QVideoFrame.isWritable": (), + "QVideoFrame.map": ('PySide2.QtMultimedia.QAbstractVideoBuffer.MapMode',), + "QVideoFrame.mapMode": (), + "QVideoFrame.mappedBytes": (), + "QVideoFrame.metaData": ('str',), + "QVideoFrame.pixelFormat": (), + "QVideoFrame.pixelFormatFromImageFormat": ('PySide2.QtGui.QImage.Format',), + "QVideoFrame.planeCount": (), + "QVideoFrame.setEndTime": ('int',), + "QVideoFrame.setFieldType": ('PySide2.QtMultimedia.QVideoFrame.FieldType',), + "QVideoFrame.setMetaData": ('str', 'Any'), + "QVideoFrame.setStartTime": ('int',), + "QVideoFrame.size": (), + "QVideoFrame.startTime": (), + "QVideoFrame.unmap": (), + "QVideoFrame.width": (), + + # class PySide2.QtMultimedia.QVideoProbe: + "QVideoProbe.__init__": ('PySide2.QtCore.QObject',), + "QVideoProbe.isActive": (), + "QVideoProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QVideoRendererControl: + "QVideoRendererControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoRendererControl.setSurface": ('PySide2.QtMultimedia.QAbstractVideoSurface',), + "QVideoRendererControl.surface": (), + + # class PySide2.QtMultimedia.QVideoSurfaceFormat: + "QVideoSurfaceFormat.__init__": [(), ('PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat', 'PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType'), ('PySide2.QtMultimedia.QVideoSurfaceFormat',)], + "QVideoSurfaceFormat.__copy__": (), + "QVideoSurfaceFormat.frameHeight": (), + "QVideoSurfaceFormat.frameRate": (), + "QVideoSurfaceFormat.frameSize": (), + "QVideoSurfaceFormat.frameWidth": (), + "QVideoSurfaceFormat.handleType": (), + "QVideoSurfaceFormat.isMirrored": (), + "QVideoSurfaceFormat.isValid": (), + "QVideoSurfaceFormat.pixelAspectRatio": (), + "QVideoSurfaceFormat.pixelFormat": (), + "QVideoSurfaceFormat.property": ('str',), + "QVideoSurfaceFormat.propertyNames": (), + "QVideoSurfaceFormat.scanLineDirection": (), + "QVideoSurfaceFormat.setFrameRate": ('float',), + "QVideoSurfaceFormat.setFrameSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setMirrored": ('bool',), + "QVideoSurfaceFormat.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setProperty": ('str', 'Any'), + "QVideoSurfaceFormat.setScanLineDirection": ('PySide2.QtMultimedia.QVideoSurfaceFormat.Direction',), + "QVideoSurfaceFormat.setViewport": ('PySide2.QtCore.QRect',), + "QVideoSurfaceFormat.setYCbCrColorSpace": ('PySide2.QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace',), + "QVideoSurfaceFormat.sizeHint": (), + "QVideoSurfaceFormat.viewport": (), + "QVideoSurfaceFormat.yCbCrColorSpace": (), + + # class PySide2.QtMultimedia.QVideoWindowControl: + "QVideoWindowControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWindowControl.aspectRatioMode": (), + "QVideoWindowControl.brightness": (), + "QVideoWindowControl.contrast": (), + "QVideoWindowControl.displayRect": (), + "QVideoWindowControl.hue": (), + "QVideoWindowControl.isFullScreen": (), + "QVideoWindowControl.nativeSize": (), + "QVideoWindowControl.repaint": (), + "QVideoWindowControl.saturation": (), + "QVideoWindowControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWindowControl.setBrightness": ('int',), + "QVideoWindowControl.setContrast": ('int',), + "QVideoWindowControl.setDisplayRect": ('PySide2.QtCore.QRect',), + "QVideoWindowControl.setFullScreen": ('bool',), + "QVideoWindowControl.setHue": ('int',), + "QVideoWindowControl.setSaturation": ('int',), + "QVideoWindowControl.setWinId": ('int',), + "QVideoWindowControl.winId": (), + }) + +# Module PySide2.QtMultimediaWidgets +if "PySide2.QtMultimediaWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtMultimediaWidgets.QCameraViewfinder: + "QCameraViewfinder.__init__": ('PySide2.QtWidgets.QWidget',), + "QCameraViewfinder.mediaObject": (), + "QCameraViewfinder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimediaWidgets.QGraphicsVideoItem: + "QGraphicsVideoItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsVideoItem.aspectRatioMode": (), + "QGraphicsVideoItem.boundingRect": (), + "QGraphicsVideoItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsVideoItem.mediaObject": (), + "QGraphicsVideoItem.nativeSize": (), + "QGraphicsVideoItem.offset": (), + "QGraphicsVideoItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsVideoItem.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QGraphicsVideoItem.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QGraphicsVideoItem.setOffset": ('PySide2.QtCore.QPointF',), + "QGraphicsVideoItem.setSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsVideoItem.size": (), + "QGraphicsVideoItem.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtMultimediaWidgets.QVideoWidget: + "QVideoWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QVideoWidget.aspectRatioMode": (), + "QVideoWidget.brightness": (), + "QVideoWidget.contrast": (), + "QVideoWidget.event": ('PySide2.QtCore.QEvent',), + "QVideoWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QVideoWidget.hue": (), + "QVideoWidget.mediaObject": (), + "QVideoWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QVideoWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QVideoWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QVideoWidget.saturation": (), + "QVideoWidget.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidget.setBrightness": ('int',), + "QVideoWidget.setContrast": ('int',), + "QVideoWidget.setFullScreen": ('bool',), + "QVideoWidget.setHue": ('int',), + "QVideoWidget.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QVideoWidget.setSaturation": ('int',), + "QVideoWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QVideoWidget.sizeHint": (), + + # class PySide2.QtMultimediaWidgets.QVideoWidgetControl: + "QVideoWidgetControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWidgetControl.aspectRatioMode": (), + "QVideoWidgetControl.brightness": (), + "QVideoWidgetControl.contrast": (), + "QVideoWidgetControl.hue": (), + "QVideoWidgetControl.isFullScreen": (), + "QVideoWidgetControl.saturation": (), + "QVideoWidgetControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidgetControl.setBrightness": ('int',), + "QVideoWidgetControl.setContrast": ('int',), + "QVideoWidgetControl.setFullScreen": ('bool',), + "QVideoWidgetControl.setHue": ('int',), + "QVideoWidgetControl.setSaturation": ('int',), + "QVideoWidgetControl.videoWidget": (), + }) + +# Module PySide2.QtOpenGL +if "PySide2.QtOpenGL" in sys.modules: + dict.update({ + + # class PySide2.QtOpenGL.QGL: + + # class PySide2.QtOpenGL.QGLBuffer: + "QGLBuffer.__init__": [(), ('PySide2.QtOpenGL.QGLBuffer',), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.allocate": [('int',), ('int', 'int')], + "QGLBuffer.bind": (), + "QGLBuffer.bufferId": (), + "QGLBuffer.create": (), + "QGLBuffer.destroy": (), + "QGLBuffer.isCreated": (), + "QGLBuffer.map": ('PySide2.QtOpenGL.QGLBuffer.Access',), + "QGLBuffer.read": ('int', 'int', 'int'), + "QGLBuffer.release": [(), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.setUsagePattern": ('PySide2.QtOpenGL.QGLBuffer.UsagePattern',), + "QGLBuffer.size": (), + "QGLBuffer.type": (), + "QGLBuffer.unmap": (), + "QGLBuffer.usagePattern": (), + "QGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtOpenGL.QGLColormap: + "QGLColormap.__init__": [(), ('PySide2.QtOpenGL.QGLColormap',)], + "QGLColormap.__copy__": (), + "QGLColormap.entryColor": ('int',), + "QGLColormap.entryRgb": ('int',), + "QGLColormap.find": ('int',), + "QGLColormap.findNearest": ('int',), + "QGLColormap.handle": (), + "QGLColormap.isEmpty": (), + "QGLColormap.setEntry": [('int', 'PySide2.QtGui.QColor'), ('int', 'int')], + "QGLColormap.setHandle": ('int',), + "QGLColormap.size": (), + + # class PySide2.QtOpenGL.QGLContext: + "QGLContext.__init__": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.areSharing": ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtOpenGL.QGLContext'), + "QGLContext.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'PySide2.libpyside.BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'PySide2.libpyside.BindOptions'), ('str',)], + "QGLContext.chooseContext": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.colorIndex": ('PySide2.QtGui.QColor',), + "QGLContext.contextHandle": (), + "QGLContext.create": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.currentContext": (), + "QGLContext.deleteTexture": ('int',), + "QGLContext.device": (), + "QGLContext.deviceIsPixmap": (), + "QGLContext.doneCurrent": (), + "QGLContext.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLContext.format": (), + "QGLContext.fromOpenGLContext": ('PySide2.QtGui.QOpenGLContext',), + "QGLContext.initialized": (), + "QGLContext.isSharing": (), + "QGLContext.isValid": (), + "QGLContext.makeCurrent": (), + "QGLContext.moveToThread": ('PySide2.QtCore.QThread',), + "QGLContext.overlayTransparentColor": (), + "QGLContext.requestedFormat": (), + "QGLContext.reset": (), + "QGLContext.setDevice": ('PySide2.QtGui.QPaintDevice',), + "QGLContext.setFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.setInitialized": ('bool',), + "QGLContext.setTextureCacheLimit": ('int',), + "QGLContext.setValid": ('bool',), + "QGLContext.setWindowCreated": ('bool',), + "QGLContext.swapBuffers": (), + "QGLContext.textureCacheLimit": (), + "QGLContext.windowCreated": (), + + # class PySide2.QtOpenGL.QGLFormat: + "QGLFormat.__init__": [(), ('PySide2.QtOpenGL.QGLFormat',), ('PySide2.libpyside.FormatOptions', 'int')], + "QGLFormat.__copy__": (), + "QGLFormat.accum": (), + "QGLFormat.accumBufferSize": (), + "QGLFormat.alpha": (), + "QGLFormat.alphaBufferSize": (), + "QGLFormat.blueBufferSize": (), + "QGLFormat.defaultFormat": (), + "QGLFormat.defaultOverlayFormat": (), + "QGLFormat.depth": (), + "QGLFormat.depthBufferSize": (), + "QGLFormat.directRendering": (), + "QGLFormat.doubleBuffer": (), + "QGLFormat.fromSurfaceFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QGLFormat.greenBufferSize": (), + "QGLFormat.hasOpenGL": (), + "QGLFormat.hasOpenGLOverlays": (), + "QGLFormat.hasOverlay": (), + "QGLFormat.majorVersion": (), + "QGLFormat.minorVersion": (), + "QGLFormat.openGLVersionFlags": (), + "QGLFormat.plane": (), + "QGLFormat.profile": (), + "QGLFormat.redBufferSize": (), + "QGLFormat.rgba": (), + "QGLFormat.sampleBuffers": (), + "QGLFormat.samples": (), + "QGLFormat.setAccum": ('bool',), + "QGLFormat.setAccumBufferSize": ('int',), + "QGLFormat.setAlpha": ('bool',), + "QGLFormat.setAlphaBufferSize": ('int',), + "QGLFormat.setBlueBufferSize": ('int',), + "QGLFormat.setDefaultFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDefaultOverlayFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDepth": ('bool',), + "QGLFormat.setDepthBufferSize": ('int',), + "QGLFormat.setDirectRendering": ('bool',), + "QGLFormat.setDoubleBuffer": ('bool',), + "QGLFormat.setGreenBufferSize": ('int',), + "QGLFormat.setOption": ('PySide2.libpyside.FormatOptions',), + "QGLFormat.setOverlay": ('bool',), + "QGLFormat.setPlane": ('int',), + "QGLFormat.setProfile": ('PySide2.QtOpenGL.QGLFormat.OpenGLContextProfile',), + "QGLFormat.setRedBufferSize": ('int',), + "QGLFormat.setRgba": ('bool',), + "QGLFormat.setSampleBuffers": ('bool',), + "QGLFormat.setSamples": ('int',), + "QGLFormat.setStencil": ('bool',), + "QGLFormat.setStencilBufferSize": ('int',), + "QGLFormat.setStereo": ('bool',), + "QGLFormat.setSwapInterval": ('int',), + "QGLFormat.setVersion": ('int', 'int'), + "QGLFormat.stencil": (), + "QGLFormat.stencilBufferSize": (), + "QGLFormat.stereo": (), + "QGLFormat.swapInterval": (), + "QGLFormat.testOption": ('PySide2.libpyside.FormatOptions',), + "QGLFormat.toSurfaceFormat": ('PySide2.QtOpenGL.QGLFormat',), + + # class PySide2.QtOpenGL.QGLFramebufferObject: + "QGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QGLFramebufferObject.attachment": (), + "QGLFramebufferObject.bind": (), + "QGLFramebufferObject.bindDefault": (), + "QGLFramebufferObject.blitFramebuffer": ('PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), + "QGLFramebufferObject.devType": (), + "QGLFramebufferObject.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLFramebufferObject.format": (), + "QGLFramebufferObject.handle": (), + "QGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QGLFramebufferObject.isBound": (), + "QGLFramebufferObject.isValid": (), + "QGLFramebufferObject.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLFramebufferObject.paintEngine": (), + "QGLFramebufferObject.release": (), + "QGLFramebufferObject.size": (), + "QGLFramebufferObject.texture": (), + "QGLFramebufferObject.toImage": (), + + # class PySide2.QtOpenGL.QGLFramebufferObjectFormat: + "QGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtOpenGL.QGLFramebufferObjectFormat',)], + "QGLFramebufferObjectFormat.__copy__": (), + "QGLFramebufferObjectFormat.attachment": (), + "QGLFramebufferObjectFormat.internalTextureFormat": (), + "QGLFramebufferObjectFormat.mipmap": (), + "QGLFramebufferObjectFormat.samples": (), + "QGLFramebufferObjectFormat.setAttachment": ('PySide2.QtOpenGL.QGLFramebufferObject.Attachment',), + "QGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QGLFramebufferObjectFormat.setMipmap": ('bool',), + "QGLFramebufferObjectFormat.setSamples": ('int',), + "QGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtOpenGL.QGLPixelBuffer: + "QGLPixelBuffer.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget'), ('int', 'int', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget')], + "QGLPixelBuffer.bindTexture": [('PySide2.QtGui.QImage', 'int'), ('PySide2.QtGui.QPixmap', 'int'), ('str',)], + "QGLPixelBuffer.bindToDynamicTexture": ('int',), + "QGLPixelBuffer.context": (), + "QGLPixelBuffer.deleteTexture": ('int',), + "QGLPixelBuffer.devType": (), + "QGLPixelBuffer.doneCurrent": (), + "QGLPixelBuffer.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLPixelBuffer.format": (), + "QGLPixelBuffer.generateDynamicTexture": (), + "QGLPixelBuffer.handle": (), + "QGLPixelBuffer.hasOpenGLPbuffers": (), + "QGLPixelBuffer.isValid": (), + "QGLPixelBuffer.makeCurrent": (), + "QGLPixelBuffer.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLPixelBuffer.paintEngine": (), + "QGLPixelBuffer.releaseFromDynamicTexture": (), + "QGLPixelBuffer.size": (), + "QGLPixelBuffer.toImage": (), + "QGLPixelBuffer.updateDynamicTexture": ('int',), + + # class PySide2.QtOpenGL.QGLShader: + "QGLShader.__init__": [('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QObject'), ('PySide2.libpyside.ShaderType', 'PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShader.compileSourceFile": ('str',), + "QGLShader.hasOpenGLShaders": ('PySide2.libpyside.ShaderType', 'PySide2.QtOpenGL.QGLContext'), + "QGLShader.isCompiled": (), + "QGLShader.log": (), + "QGLShader.shaderId": (), + "QGLShader.shaderType": (), + "QGLShader.sourceCode": (), + + # class PySide2.QtOpenGL.QGLShaderProgram: + "QGLShaderProgram.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShaderProgram.addShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.addShaderFromSourceCode": [('PySide2.libpyside.ShaderType', 'PySide2.QtCore.QByteArray'), ('PySide2.libpyside.ShaderType', 'str')], + "QGLShaderProgram.addShaderFromSourceFile": ('PySide2.libpyside.ShaderType', 'str'), + "QGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShaderProgram.bind": (), + "QGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.geometryInputType": (), + "QGLShaderProgram.geometryOutputType": (), + "QGLShaderProgram.geometryOutputVertexCount": (), + "QGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtOpenGL.QGLContext',), + "QGLShaderProgram.isLinked": (), + "QGLShaderProgram.link": (), + "QGLShaderProgram.log": (), + "QGLShaderProgram.maxGeometryOutputVertices": (), + "QGLShaderProgram.programId": (), + "QGLShaderProgram.release": (), + "QGLShaderProgram.removeAllShaders": (), + "QGLShaderProgram.removeShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.setAttributeArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setAttributeArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setAttributeArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float')], + "QGLShaderProgram.setGeometryInputType": ('int',), + "QGLShaderProgram.setGeometryOutputType": ('int',), + "QGLShaderProgram.setGeometryOutputVertexCount": ('int',), + "QGLShaderProgram.setUniformValue": [('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QGLShaderProgram.setUniformValueArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setUniformValueArray2x2": [('int', 'PySide2.QtGui.QMatrix2x2', 'int'), ('str', 'PySide2.QtGui.QMatrix2x2', 'int')], + "QGLShaderProgram.setUniformValueArray2x3": [('int', 'PySide2.QtGui.QMatrix2x3', 'int'), ('str', 'PySide2.QtGui.QMatrix2x3', 'int')], + "QGLShaderProgram.setUniformValueArray2x4": [('int', 'PySide2.QtGui.QMatrix2x4', 'int'), ('str', 'PySide2.QtGui.QMatrix2x4', 'int')], + "QGLShaderProgram.setUniformValueArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setUniformValueArray3x2": [('int', 'PySide2.QtGui.QMatrix3x2', 'int'), ('str', 'PySide2.QtGui.QMatrix3x2', 'int')], + "QGLShaderProgram.setUniformValueArray3x3": [('int', 'PySide2.QtGui.QMatrix3x3', 'int'), ('str', 'PySide2.QtGui.QMatrix3x3', 'int')], + "QGLShaderProgram.setUniformValueArray3x4": [('int', 'PySide2.QtGui.QMatrix3x4', 'int'), ('str', 'PySide2.QtGui.QMatrix3x4', 'int')], + "QGLShaderProgram.setUniformValueArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setUniformValueArray4x2": [('int', 'PySide2.QtGui.QMatrix4x2', 'int'), ('str', 'PySide2.QtGui.QMatrix4x2', 'int')], + "QGLShaderProgram.setUniformValueArray4x3": [('int', 'PySide2.QtGui.QMatrix4x3', 'int'), ('str', 'PySide2.QtGui.QMatrix4x3', 'int')], + "QGLShaderProgram.setUniformValueArray4x4": [('int', 'PySide2.QtGui.QMatrix4x4', 'int'), ('str', 'PySide2.QtGui.QMatrix4x4', 'int')], + "QGLShaderProgram.setUniformValueArrayInt": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.setUniformValueArrayUint": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.shaders": (), + "QGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtOpenGL.QGLWidget: + "QGLWidget.__init__": [('PySide2.QtOpenGL.QGLContext', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtOpenGL.QGLFormat', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'PySide2.libpyside.WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'PySide2.libpyside.WindowFlags')], + "QGLWidget.autoBufferSwap": (), + "QGLWidget.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'PySide2.libpyside.BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'PySide2.libpyside.BindOptions'), ('str',)], + "QGLWidget.colormap": (), + "QGLWidget.context": (), + "QGLWidget.convertToGLFormat": ('PySide2.QtGui.QImage',), + "QGLWidget.deleteTexture": ('int',), + "QGLWidget.doneCurrent": (), + "QGLWidget.doubleBuffer": (), + "QGLWidget.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLWidget.event": ('PySide2.QtCore.QEvent',), + "QGLWidget.format": (), + "QGLWidget.glDraw": (), + "QGLWidget.glInit": (), + "QGLWidget.grabFrameBuffer": ('bool',), + "QGLWidget.initializeGL": (), + "QGLWidget.initializeOverlayGL": (), + "QGLWidget.isSharing": (), + "QGLWidget.isValid": (), + "QGLWidget.makeCurrent": (), + "QGLWidget.makeOverlayCurrent": (), + "QGLWidget.overlayContext": (), + "QGLWidget.paintEngine": (), + "QGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGLWidget.paintGL": (), + "QGLWidget.paintOverlayGL": (), + "QGLWidget.qglClearColor": ('PySide2.QtGui.QColor',), + "QGLWidget.qglColor": ('PySide2.QtGui.QColor',), + "QGLWidget.renderPixmap": ('int', 'int', 'bool'), + "QGLWidget.renderText": [('float', 'float', 'float', 'str', 'PySide2.QtGui.QFont'), ('int', 'int', 'str', 'PySide2.QtGui.QFont')], + "QGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGLWidget.resizeGL": ('int', 'int'), + "QGLWidget.resizeOverlayGL": ('int', 'int'), + "QGLWidget.setAutoBufferSwap": ('bool',), + "QGLWidget.setColormap": ('PySide2.QtOpenGL.QGLColormap',), + "QGLWidget.swapBuffers": (), + "QGLWidget.updateGL": (), + "QGLWidget.updateOverlayGL": (), + }) + +# Module PySide2.QtPositioning +if "PySide2.QtPositioning" in sys.modules: + dict.update({ + + # class PySide2.QtPositioning.QGeoAddress: + "QGeoAddress.__init__": [(), ('PySide2.QtPositioning.QGeoAddress',)], + "QGeoAddress.__copy__": (), + "QGeoAddress.city": (), + "QGeoAddress.clear": (), + "QGeoAddress.country": (), + "QGeoAddress.countryCode": (), + "QGeoAddress.county": (), + "QGeoAddress.district": (), + "QGeoAddress.isEmpty": (), + "QGeoAddress.isTextGenerated": (), + "QGeoAddress.postalCode": (), + "QGeoAddress.setCity": ('str',), + "QGeoAddress.setCountry": ('str',), + "QGeoAddress.setCountryCode": ('str',), + "QGeoAddress.setCounty": ('str',), + "QGeoAddress.setDistrict": ('str',), + "QGeoAddress.setPostalCode": ('str',), + "QGeoAddress.setState": ('str',), + "QGeoAddress.setStreet": ('str',), + "QGeoAddress.setText": ('str',), + "QGeoAddress.state": (), + "QGeoAddress.street": (), + "QGeoAddress.text": (), + + # class PySide2.QtPositioning.QGeoAreaMonitorInfo: + "QGeoAreaMonitorInfo.__init__": [('PySide2.QtPositioning.QGeoAreaMonitorInfo',), ('str',)], + "QGeoAreaMonitorInfo.__copy__": (), + "QGeoAreaMonitorInfo.area": (), + "QGeoAreaMonitorInfo.expiration": (), + "QGeoAreaMonitorInfo.identifier": (), + "QGeoAreaMonitorInfo.isPersistent": (), + "QGeoAreaMonitorInfo.isValid": (), + "QGeoAreaMonitorInfo.name": (), + "QGeoAreaMonitorInfo.notificationParameters": (), + "QGeoAreaMonitorInfo.setArea": ('PySide2.QtPositioning.QGeoShape',), + "QGeoAreaMonitorInfo.setExpiration": ('PySide2.QtCore.QDateTime',), + "QGeoAreaMonitorInfo.setName": ('str',), + "QGeoAreaMonitorInfo.setNotificationParameters": ('dict',), + "QGeoAreaMonitorInfo.setPersistent": ('bool',), + + # class PySide2.QtPositioning.QGeoAreaMonitorSource: + "QGeoAreaMonitorSource.__init__": ('PySide2.QtCore.QObject',), + "QGeoAreaMonitorSource.activeMonitors": [(), ('PySide2.QtPositioning.QGeoShape',)], + "QGeoAreaMonitorSource.availableSources": (), + "QGeoAreaMonitorSource.createDefaultSource": ('PySide2.QtCore.QObject',), + "QGeoAreaMonitorSource.createSource": ('str', 'PySide2.QtCore.QObject'), + "QGeoAreaMonitorSource.positionInfoSource": (), + "QGeoAreaMonitorSource.requestUpdate": ('PySide2.QtPositioning.QGeoAreaMonitorInfo', 'str'), + "QGeoAreaMonitorSource.setPositionInfoSource": ('PySide2.QtPositioning.QGeoPositionInfoSource',), + "QGeoAreaMonitorSource.sourceName": (), + "QGeoAreaMonitorSource.startMonitoring": ('PySide2.QtPositioning.QGeoAreaMonitorInfo',), + "QGeoAreaMonitorSource.stopMonitoring": ('PySide2.QtPositioning.QGeoAreaMonitorInfo',), + "QGeoAreaMonitorSource.supportedAreaMonitorFeatures": (), + + # class PySide2.QtPositioning.QGeoCircle: + "QGeoCircle.__init__": [(), ('PySide2.QtPositioning.QGeoCircle',), ('PySide2.QtPositioning.QGeoCoordinate', 'float'), ('PySide2.QtPositioning.QGeoShape',)], + "QGeoCircle.__copy__": (), + "QGeoCircle.center": (), + "QGeoCircle.extendCircle": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoCircle.radius": (), + "QGeoCircle.setCenter": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoCircle.setRadius": ('float',), + "QGeoCircle.toString": (), + "QGeoCircle.translate": ('float', 'float'), + "QGeoCircle.translated": ('float', 'float'), + + # class PySide2.QtPositioning.QGeoCoordinate: + "QGeoCoordinate.__init__": [(), ('PySide2.QtPositioning.QGeoCoordinate',), ('float', 'float'), ('float', 'float', 'float')], + "QGeoCoordinate.__copy__": (), + "QGeoCoordinate.altitude": (), + "QGeoCoordinate.atDistanceAndAzimuth": ('float', 'float', 'float'), + "QGeoCoordinate.azimuthTo": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoCoordinate.distanceTo": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoCoordinate.isValid": (), + "QGeoCoordinate.latitude": (), + "QGeoCoordinate.longitude": (), + "QGeoCoordinate.setAltitude": ('float',), + "QGeoCoordinate.setLatitude": ('float',), + "QGeoCoordinate.setLongitude": ('float',), + "QGeoCoordinate.toString": ('PySide2.QtPositioning.QGeoCoordinate.CoordinateFormat',), + "QGeoCoordinate.type": (), + + # class PySide2.QtPositioning.QGeoLocation: + "QGeoLocation.__init__": [(), ('PySide2.QtPositioning.QGeoLocation',)], + "QGeoLocation.__copy__": (), + "QGeoLocation.address": (), + "QGeoLocation.boundingBox": (), + "QGeoLocation.coordinate": (), + "QGeoLocation.isEmpty": (), + "QGeoLocation.setAddress": ('PySide2.QtPositioning.QGeoAddress',), + "QGeoLocation.setBoundingBox": ('PySide2.QtPositioning.QGeoRectangle',), + "QGeoLocation.setCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + + # class PySide2.QtPositioning.QGeoPath: + "QGeoPath.__init__": [(), ('PySide2.QtPositioning.QGeoPath',), ('PySide2.QtPositioning.QGeoShape',), ('list', 'float')], + "QGeoPath.__copy__": (), + "QGeoPath.addCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPath.containsCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPath.coordinateAt": ('int',), + "QGeoPath.insertCoordinate": ('int', 'PySide2.QtPositioning.QGeoCoordinate'), + "QGeoPath.length": ('int', 'int'), + "QGeoPath.path": (), + "QGeoPath.removeCoordinate": [('PySide2.QtPositioning.QGeoCoordinate',), ('int',)], + "QGeoPath.replaceCoordinate": ('int', 'PySide2.QtPositioning.QGeoCoordinate'), + "QGeoPath.setPath": ('list',), + "QGeoPath.setVariantPath": ('list',), + "QGeoPath.setWidth": ('float',), + "QGeoPath.size": (), + "QGeoPath.toString": (), + "QGeoPath.translate": ('float', 'float'), + "QGeoPath.translated": ('float', 'float'), + "QGeoPath.variantPath": (), + "QGeoPath.width": (), + + # class PySide2.QtPositioning.QGeoPolygon: + "QGeoPolygon.__init__": [(), ('PySide2.QtPositioning.QGeoPolygon',), ('PySide2.QtPositioning.QGeoShape',), ('list',)], + "QGeoPolygon.__copy__": (), + "QGeoPolygon.addCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPolygon.containsCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPolygon.coordinateAt": ('int',), + "QGeoPolygon.insertCoordinate": ('int', 'PySide2.QtPositioning.QGeoCoordinate'), + "QGeoPolygon.length": ('int', 'int'), + "QGeoPolygon.path": (), + "QGeoPolygon.removeCoordinate": [('PySide2.QtPositioning.QGeoCoordinate',), ('int',)], + "QGeoPolygon.replaceCoordinate": ('int', 'PySide2.QtPositioning.QGeoCoordinate'), + "QGeoPolygon.setPath": ('list',), + "QGeoPolygon.size": (), + "QGeoPolygon.toString": (), + "QGeoPolygon.translate": ('float', 'float'), + "QGeoPolygon.translated": ('float', 'float'), + + # class PySide2.QtPositioning.QGeoPositionInfo: + "QGeoPositionInfo.__init__": [(), ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtCore.QDateTime'), ('PySide2.QtPositioning.QGeoPositionInfo',)], + "QGeoPositionInfo.__copy__": (), + "QGeoPositionInfo.attribute": ('PySide2.QtPositioning.QGeoPositionInfo.Attribute',), + "QGeoPositionInfo.coordinate": (), + "QGeoPositionInfo.hasAttribute": ('PySide2.QtPositioning.QGeoPositionInfo.Attribute',), + "QGeoPositionInfo.isValid": (), + "QGeoPositionInfo.removeAttribute": ('PySide2.QtPositioning.QGeoPositionInfo.Attribute',), + "QGeoPositionInfo.setAttribute": ('PySide2.QtPositioning.QGeoPositionInfo.Attribute', 'float'), + "QGeoPositionInfo.setCoordinate": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoPositionInfo.setTimestamp": ('PySide2.QtCore.QDateTime',), + "QGeoPositionInfo.timestamp": (), + + # class PySide2.QtPositioning.QGeoPositionInfoSource: + "QGeoPositionInfoSource.__init__": ('PySide2.QtCore.QObject',), + "QGeoPositionInfoSource.availableSources": (), + "QGeoPositionInfoSource.createDefaultSource": ('PySide2.QtCore.QObject',), + "QGeoPositionInfoSource.createSource": ('str', 'PySide2.QtCore.QObject'), + "QGeoPositionInfoSource.lastKnownPosition": ('bool',), + "QGeoPositionInfoSource.minimumUpdateInterval": (), + "QGeoPositionInfoSource.preferredPositioningMethods": (), + "QGeoPositionInfoSource.requestUpdate": ('int',), + "QGeoPositionInfoSource.setPreferredPositioningMethods": ('PySide2.libpyside.PositioningMethods',), + "QGeoPositionInfoSource.setUpdateInterval": ('int',), + "QGeoPositionInfoSource.sourceName": (), + "QGeoPositionInfoSource.startUpdates": (), + "QGeoPositionInfoSource.stopUpdates": (), + "QGeoPositionInfoSource.supportedPositioningMethods": (), + "QGeoPositionInfoSource.updateInterval": (), + + # class PySide2.QtPositioning.QGeoPositionInfoSourceFactory: + "QGeoPositionInfoSourceFactory.__init__": (), + "QGeoPositionInfoSourceFactory.areaMonitor": ('PySide2.QtCore.QObject',), + "QGeoPositionInfoSourceFactory.positionInfoSource": ('PySide2.QtCore.QObject',), + "QGeoPositionInfoSourceFactory.satelliteInfoSource": ('PySide2.QtCore.QObject',), + + # class PySide2.QtPositioning.QGeoRectangle: + "QGeoRectangle.__init__": [(), ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtPositioning.QGeoCoordinate'), ('PySide2.QtPositioning.QGeoCoordinate', 'float', 'float'), ('PySide2.QtPositioning.QGeoRectangle',), ('PySide2.QtPositioning.QGeoShape',), ('list',)], + "QGeoRectangle.__copy__": (), + "QGeoRectangle.bottomLeft": (), + "QGeoRectangle.bottomRight": (), + "QGeoRectangle.center": (), + "QGeoRectangle.contains": [('PySide2.QtPositioning.QGeoCoordinate',), ('PySide2.QtPositioning.QGeoRectangle',)], + "QGeoRectangle.extendRectangle": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.height": (), + "QGeoRectangle.intersects": ('PySide2.QtPositioning.QGeoRectangle',), + "QGeoRectangle.setBottomLeft": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setBottomRight": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setCenter": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setHeight": ('float',), + "QGeoRectangle.setTopLeft": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setTopRight": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoRectangle.setWidth": ('float',), + "QGeoRectangle.toString": (), + "QGeoRectangle.topLeft": (), + "QGeoRectangle.topRight": (), + "QGeoRectangle.translate": ('float', 'float'), + "QGeoRectangle.translated": ('float', 'float'), + "QGeoRectangle.united": ('PySide2.QtPositioning.QGeoRectangle',), + "QGeoRectangle.width": (), + + # class PySide2.QtPositioning.QGeoSatelliteInfo: + "QGeoSatelliteInfo.__init__": [(), ('PySide2.QtPositioning.QGeoSatelliteInfo',)], + "QGeoSatelliteInfo.__copy__": (), + "QGeoSatelliteInfo.attribute": ('PySide2.QtPositioning.QGeoSatelliteInfo.Attribute',), + "QGeoSatelliteInfo.hasAttribute": ('PySide2.QtPositioning.QGeoSatelliteInfo.Attribute',), + "QGeoSatelliteInfo.removeAttribute": ('PySide2.QtPositioning.QGeoSatelliteInfo.Attribute',), + "QGeoSatelliteInfo.satelliteIdentifier": (), + "QGeoSatelliteInfo.satelliteSystem": (), + "QGeoSatelliteInfo.setAttribute": ('PySide2.QtPositioning.QGeoSatelliteInfo.Attribute', 'float'), + "QGeoSatelliteInfo.setSatelliteIdentifier": ('int',), + "QGeoSatelliteInfo.setSatelliteSystem": ('PySide2.QtPositioning.QGeoSatelliteInfo.SatelliteSystem',), + "QGeoSatelliteInfo.setSignalStrength": ('int',), + "QGeoSatelliteInfo.signalStrength": (), + + # class PySide2.QtPositioning.QGeoSatelliteInfoSource: + "QGeoSatelliteInfoSource.__init__": ('PySide2.QtCore.QObject',), + "QGeoSatelliteInfoSource.availableSources": (), + "QGeoSatelliteInfoSource.createDefaultSource": ('PySide2.QtCore.QObject',), + "QGeoSatelliteInfoSource.createSource": ('str', 'PySide2.QtCore.QObject'), + "QGeoSatelliteInfoSource.minimumUpdateInterval": (), + "QGeoSatelliteInfoSource.requestUpdate": ('int',), + "QGeoSatelliteInfoSource.setUpdateInterval": ('int',), + "QGeoSatelliteInfoSource.sourceName": (), + "QGeoSatelliteInfoSource.startUpdates": (), + "QGeoSatelliteInfoSource.stopUpdates": (), + "QGeoSatelliteInfoSource.updateInterval": (), + + # class PySide2.QtPositioning.QGeoShape: + "QGeoShape.__init__": [(), ('PySide2.QtPositioning.QGeoShape',)], + "QGeoShape.__copy__": (), + "QGeoShape.boundingGeoRectangle": (), + "QGeoShape.center": (), + "QGeoShape.contains": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoShape.extendShape": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoShape.isEmpty": (), + "QGeoShape.isValid": (), + "QGeoShape.toString": (), + "QGeoShape.type": (), + + # class PySide2.QtPositioning.QNmeaPositionInfoSource: + "QNmeaPositionInfoSource.__init__": ('PySide2.QtPositioning.QNmeaPositionInfoSource.UpdateMode', 'PySide2.QtCore.QObject'), + "QNmeaPositionInfoSource.device": (), + "QNmeaPositionInfoSource.error": (), + "QNmeaPositionInfoSource.lastKnownPosition": ('bool',), + "QNmeaPositionInfoSource.minimumUpdateInterval": (), + "QNmeaPositionInfoSource.parsePosInfoFromNmeaData": ('str', 'int', 'PySide2.QtPositioning.QGeoPositionInfo', 'bool'), + "QNmeaPositionInfoSource.requestUpdate": ('int',), + "QNmeaPositionInfoSource.setDevice": ('PySide2.QtCore.QIODevice',), + "QNmeaPositionInfoSource.setUpdateInterval": ('int',), + "QNmeaPositionInfoSource.setUserEquivalentRangeError": ('float',), + "QNmeaPositionInfoSource.startUpdates": (), + "QNmeaPositionInfoSource.stopUpdates": (), + "QNmeaPositionInfoSource.supportedPositioningMethods": (), + "QNmeaPositionInfoSource.updateMode": (), + "QNmeaPositionInfoSource.userEquivalentRangeError": (), + }) + +# Module PySide2.QtLocation +if "PySide2.QtLocation" in sys.modules: + dict.update({ + + # class PySide2.QtLocation.QGeoCodeReply: + "QGeoCodeReply.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtLocation.QGeoCodeReply.Error', 'str', 'PySide2.QtCore.QObject')], + "QGeoCodeReply.abort": (), + "QGeoCodeReply.addLocation": ('PySide2.QtPositioning.QGeoLocation',), + "QGeoCodeReply.errorString": (), + "QGeoCodeReply.isFinished": (), + "QGeoCodeReply.limit": (), + "QGeoCodeReply.locations": (), + "QGeoCodeReply.offset": (), + "QGeoCodeReply.setError": ('PySide2.QtLocation.QGeoCodeReply.Error', 'str'), + "QGeoCodeReply.setFinished": ('bool',), + "QGeoCodeReply.setLimit": ('int',), + "QGeoCodeReply.setLocations": ('list',), + "QGeoCodeReply.setOffset": ('int',), + "QGeoCodeReply.setViewport": ('PySide2.QtPositioning.QGeoShape',), + "QGeoCodeReply.viewport": (), + + # class PySide2.QtLocation.QGeoCodingManager: + "QGeoCodingManager.geocode": [('PySide2.QtPositioning.QGeoAddress', 'PySide2.QtPositioning.QGeoShape'), ('str', 'int', 'int', 'PySide2.QtPositioning.QGeoShape')], + "QGeoCodingManager.locale": (), + "QGeoCodingManager.managerName": (), + "QGeoCodingManager.managerVersion": (), + "QGeoCodingManager.reverseGeocode": ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtPositioning.QGeoShape'), + "QGeoCodingManager.setLocale": ('PySide2.QtCore.QLocale',), + + # class PySide2.QtLocation.QGeoCodingManagerEngine: + "QGeoCodingManagerEngine.__init__": ('dict', 'PySide2.QtCore.QObject'), + "QGeoCodingManagerEngine.geocode": [('PySide2.QtPositioning.QGeoAddress', 'PySide2.QtPositioning.QGeoShape'), ('str', 'int', 'int', 'PySide2.QtPositioning.QGeoShape')], + "QGeoCodingManagerEngine.locale": (), + "QGeoCodingManagerEngine.managerName": (), + "QGeoCodingManagerEngine.managerVersion": (), + "QGeoCodingManagerEngine.reverseGeocode": ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtPositioning.QGeoShape'), + "QGeoCodingManagerEngine.setLocale": ('PySide2.QtCore.QLocale',), + + # class PySide2.QtLocation.QGeoManeuver: + "QGeoManeuver.__init__": [(), ('PySide2.QtLocation.QGeoManeuver',)], + "QGeoManeuver.__copy__": (), + "QGeoManeuver.direction": (), + "QGeoManeuver.distanceToNextInstruction": (), + "QGeoManeuver.extendedAttributes": (), + "QGeoManeuver.instructionText": (), + "QGeoManeuver.isValid": (), + "QGeoManeuver.position": (), + "QGeoManeuver.setDirection": ('PySide2.QtLocation.QGeoManeuver.InstructionDirection',), + "QGeoManeuver.setDistanceToNextInstruction": ('float',), + "QGeoManeuver.setExtendedAttributes": ('dict',), + "QGeoManeuver.setInstructionText": ('str',), + "QGeoManeuver.setPosition": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoManeuver.setTimeToNextInstruction": ('int',), + "QGeoManeuver.setWaypoint": ('PySide2.QtPositioning.QGeoCoordinate',), + "QGeoManeuver.timeToNextInstruction": (), + "QGeoManeuver.waypoint": (), + + # class PySide2.QtLocation.QGeoRoute: + "QGeoRoute.__init__": [(), ('PySide2.QtLocation.QGeoRoute',)], + "QGeoRoute.__copy__": (), + "QGeoRoute.bounds": (), + "QGeoRoute.distance": (), + "QGeoRoute.firstRouteSegment": (), + "QGeoRoute.path": (), + "QGeoRoute.request": (), + "QGeoRoute.routeId": (), + "QGeoRoute.setBounds": ('PySide2.QtPositioning.QGeoRectangle',), + "QGeoRoute.setDistance": ('float',), + "QGeoRoute.setFirstRouteSegment": ('PySide2.QtLocation.QGeoRouteSegment',), + "QGeoRoute.setPath": ('list',), + "QGeoRoute.setRequest": ('PySide2.QtLocation.QGeoRouteRequest',), + "QGeoRoute.setRouteId": ('str',), + "QGeoRoute.setTravelMode": ('PySide2.QtLocation.QGeoRouteRequest.TravelMode',), + "QGeoRoute.setTravelTime": ('int',), + "QGeoRoute.travelMode": (), + "QGeoRoute.travelTime": (), + + # class PySide2.QtLocation.QGeoRouteReply: + "QGeoRouteReply.__init__": [('PySide2.QtLocation.QGeoRouteReply.Error', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtLocation.QGeoRouteRequest', 'PySide2.QtCore.QObject')], + "QGeoRouteReply.abort": (), + "QGeoRouteReply.addRoutes": ('list',), + "QGeoRouteReply.errorString": (), + "QGeoRouteReply.isFinished": (), + "QGeoRouteReply.request": (), + "QGeoRouteReply.routes": (), + "QGeoRouteReply.setError": ('PySide2.QtLocation.QGeoRouteReply.Error', 'str'), + "QGeoRouteReply.setFinished": ('bool',), + "QGeoRouteReply.setRoutes": ('list',), + + # class PySide2.QtLocation.QGeoRouteRequest: + "QGeoRouteRequest.__init__": [('PySide2.QtLocation.QGeoRouteRequest',), ('PySide2.QtPositioning.QGeoCoordinate', 'PySide2.QtPositioning.QGeoCoordinate'), ('list',)], + "QGeoRouteRequest.excludeAreas": (), + "QGeoRouteRequest.extraParameters": (), + "QGeoRouteRequest.featureTypes": (), + "QGeoRouteRequest.featureWeight": ('PySide2.QtLocation.QGeoRouteRequest.FeatureType',), + "QGeoRouteRequest.maneuverDetail": (), + "QGeoRouteRequest.numberAlternativeRoutes": (), + "QGeoRouteRequest.routeOptimization": (), + "QGeoRouteRequest.segmentDetail": (), + "QGeoRouteRequest.setExcludeAreas": ('list',), + "QGeoRouteRequest.setExtraParameters": ('dict',), + "QGeoRouteRequest.setFeatureWeight": ('PySide2.QtLocation.QGeoRouteRequest.FeatureType', 'PySide2.QtLocation.QGeoRouteRequest.FeatureWeight'), + "QGeoRouteRequest.setManeuverDetail": ('PySide2.QtLocation.QGeoRouteRequest.ManeuverDetail',), + "QGeoRouteRequest.setNumberAlternativeRoutes": ('int',), + "QGeoRouteRequest.setRouteOptimization": ('PySide2.libpyside.RouteOptimizations',), + "QGeoRouteRequest.setSegmentDetail": ('PySide2.QtLocation.QGeoRouteRequest.SegmentDetail',), + "QGeoRouteRequest.setTravelModes": ('PySide2.libpyside.TravelModes',), + "QGeoRouteRequest.setWaypoints": ('list',), + "QGeoRouteRequest.setWaypointsMetadata": ('list',), + "QGeoRouteRequest.travelModes": (), + "QGeoRouteRequest.waypoints": (), + "QGeoRouteRequest.waypointsMetadata": (), + + # class PySide2.QtLocation.QGeoRouteSegment: + "QGeoRouteSegment.__init__": [(), ('PySide2.QtLocation.QGeoRouteSegment',)], + "QGeoRouteSegment.__copy__": (), + "QGeoRouteSegment.distance": (), + "QGeoRouteSegment.isValid": (), + "QGeoRouteSegment.maneuver": (), + "QGeoRouteSegment.nextRouteSegment": (), + "QGeoRouteSegment.path": (), + "QGeoRouteSegment.setDistance": ('float',), + "QGeoRouteSegment.setManeuver": ('PySide2.QtLocation.QGeoManeuver',), + "QGeoRouteSegment.setNextRouteSegment": ('PySide2.QtLocation.QGeoRouteSegment',), + "QGeoRouteSegment.setPath": ('list',), + "QGeoRouteSegment.setTravelTime": ('int',), + "QGeoRouteSegment.travelTime": (), + + # class PySide2.QtLocation.QGeoRoutingManager: + "QGeoRoutingManager.calculateRoute": ('PySide2.QtLocation.QGeoRouteRequest',), + "QGeoRoutingManager.locale": (), + "QGeoRoutingManager.managerName": (), + "QGeoRoutingManager.managerVersion": (), + "QGeoRoutingManager.measurementSystem": (), + "QGeoRoutingManager.setLocale": ('PySide2.QtCore.QLocale',), + "QGeoRoutingManager.setMeasurementSystem": ('PySide2.QtCore.QLocale.MeasurementSystem',), + "QGeoRoutingManager.supportedFeatureTypes": (), + "QGeoRoutingManager.supportedFeatureWeights": (), + "QGeoRoutingManager.supportedManeuverDetails": (), + "QGeoRoutingManager.supportedRouteOptimizations": (), + "QGeoRoutingManager.supportedSegmentDetails": (), + "QGeoRoutingManager.supportedTravelModes": (), + "QGeoRoutingManager.updateRoute": ('PySide2.QtLocation.QGeoRoute', 'PySide2.QtPositioning.QGeoCoordinate'), + + # class PySide2.QtLocation.QGeoRoutingManagerEngine: + "QGeoRoutingManagerEngine.__init__": ('dict', 'PySide2.QtCore.QObject'), + "QGeoRoutingManagerEngine.calculateRoute": ('PySide2.QtLocation.QGeoRouteRequest',), + "QGeoRoutingManagerEngine.locale": (), + "QGeoRoutingManagerEngine.managerName": (), + "QGeoRoutingManagerEngine.managerVersion": (), + "QGeoRoutingManagerEngine.measurementSystem": (), + "QGeoRoutingManagerEngine.setLocale": ('PySide2.QtCore.QLocale',), + "QGeoRoutingManagerEngine.setMeasurementSystem": ('PySide2.QtCore.QLocale.MeasurementSystem',), + "QGeoRoutingManagerEngine.setSupportedFeatureTypes": ('PySide2.libpyside.FeatureTypes',), + "QGeoRoutingManagerEngine.setSupportedFeatureWeights": ('PySide2.libpyside.FeatureWeights',), + "QGeoRoutingManagerEngine.setSupportedManeuverDetails": ('PySide2.libpyside.ManeuverDetails',), + "QGeoRoutingManagerEngine.setSupportedRouteOptimizations": ('PySide2.libpyside.RouteOptimizations',), + "QGeoRoutingManagerEngine.setSupportedSegmentDetails": ('PySide2.libpyside.SegmentDetails',), + "QGeoRoutingManagerEngine.setSupportedTravelModes": ('PySide2.libpyside.TravelModes',), + "QGeoRoutingManagerEngine.supportedFeatureTypes": (), + "QGeoRoutingManagerEngine.supportedFeatureWeights": (), + "QGeoRoutingManagerEngine.supportedManeuverDetails": (), + "QGeoRoutingManagerEngine.supportedRouteOptimizations": (), + "QGeoRoutingManagerEngine.supportedSegmentDetails": (), + "QGeoRoutingManagerEngine.supportedTravelModes": (), + "QGeoRoutingManagerEngine.updateRoute": ('PySide2.QtLocation.QGeoRoute', 'PySide2.QtPositioning.QGeoCoordinate'), + + # class PySide2.QtLocation.QGeoServiceProvider: + "QGeoServiceProvider.__init__": ('str', 'dict', 'bool'), + "QGeoServiceProvider.availableServiceProviders": (), + "QGeoServiceProvider.error": (), + "QGeoServiceProvider.errorString": (), + "QGeoServiceProvider.geocodingFeatures": (), + "QGeoServiceProvider.geocodingManager": (), + "QGeoServiceProvider.mappingFeatures": (), + "QGeoServiceProvider.navigationFeatures": (), + "QGeoServiceProvider.placeManager": (), + "QGeoServiceProvider.placesFeatures": (), + "QGeoServiceProvider.routingFeatures": (), + "QGeoServiceProvider.routingManager": (), + "QGeoServiceProvider.setAllowExperimental": ('bool',), + "QGeoServiceProvider.setLocale": ('PySide2.QtCore.QLocale',), + "QGeoServiceProvider.setParameters": ('dict',), + + # class PySide2.QtLocation.QGeoServiceProviderFactory: + "QGeoServiceProviderFactory.__init__": (), + "QGeoServiceProviderFactory.createGeocodingManagerEngine": ('dict', 'PySide2.QtLocation.QGeoServiceProvider.Error', 'str'), + "QGeoServiceProviderFactory.createPlaceManagerEngine": ('dict', 'PySide2.QtLocation.QGeoServiceProvider.Error', 'str'), + "QGeoServiceProviderFactory.createRoutingManagerEngine": ('dict', 'PySide2.QtLocation.QGeoServiceProvider.Error', 'str'), + + # class PySide2.QtLocation.QGeoServiceProviderFactoryV2: + "QGeoServiceProviderFactoryV2.__init__": (), + + # class PySide2.QtLocation.QPlace: + "QPlace.__init__": [(), ('PySide2.QtLocation.QPlace',)], + "QPlace.__copy__": (), + "QPlace.appendContactDetail": ('str', 'PySide2.QtLocation.QPlaceContactDetail'), + "QPlace.attribution": (), + "QPlace.categories": (), + "QPlace.contactDetails": ('str',), + "QPlace.contactTypes": (), + "QPlace.detailsFetched": (), + "QPlace.extendedAttribute": ('str',), + "QPlace.extendedAttributeTypes": (), + "QPlace.icon": (), + "QPlace.isEmpty": (), + "QPlace.location": (), + "QPlace.name": (), + "QPlace.placeId": (), + "QPlace.primaryEmail": (), + "QPlace.primaryFax": (), + "QPlace.primaryPhone": (), + "QPlace.primaryWebsite": (), + "QPlace.ratings": (), + "QPlace.removeContactDetails": ('str',), + "QPlace.removeExtendedAttribute": ('str',), + "QPlace.setAttribution": ('str',), + "QPlace.setCategories": ('list',), + "QPlace.setCategory": ('PySide2.QtLocation.QPlaceCategory',), + "QPlace.setContactDetails": ('str', 'list'), + "QPlace.setDetailsFetched": ('bool',), + "QPlace.setExtendedAttribute": ('str', 'PySide2.QtLocation.QPlaceAttribute'), + "QPlace.setIcon": ('PySide2.QtLocation.QPlaceIcon',), + "QPlace.setLocation": ('PySide2.QtPositioning.QGeoLocation',), + "QPlace.setName": ('str',), + "QPlace.setPlaceId": ('str',), + "QPlace.setRatings": ('PySide2.QtLocation.QPlaceRatings',), + "QPlace.setSupplier": ('PySide2.QtLocation.QPlaceSupplier',), + "QPlace.supplier": (), + + # class PySide2.QtLocation.QPlaceAttribute: + "QPlaceAttribute.__init__": [(), ('PySide2.QtLocation.QPlaceAttribute',)], + "QPlaceAttribute.__copy__": (), + "QPlaceAttribute.isEmpty": (), + "QPlaceAttribute.label": (), + "QPlaceAttribute.setLabel": ('str',), + "QPlaceAttribute.setText": ('str',), + "QPlaceAttribute.text": (), + + # class PySide2.QtLocation.QPlaceCategory: + "QPlaceCategory.__init__": [(), ('PySide2.QtLocation.QPlaceCategory',)], + "QPlaceCategory.__copy__": (), + "QPlaceCategory.categoryId": (), + "QPlaceCategory.icon": (), + "QPlaceCategory.isEmpty": (), + "QPlaceCategory.name": (), + "QPlaceCategory.setCategoryId": ('str',), + "QPlaceCategory.setIcon": ('PySide2.QtLocation.QPlaceIcon',), + "QPlaceCategory.setName": ('str',), + + # class PySide2.QtLocation.QPlaceContactDetail: + "QPlaceContactDetail.__init__": [(), ('PySide2.QtLocation.QPlaceContactDetail',)], + "QPlaceContactDetail.__copy__": (), + "QPlaceContactDetail.clear": (), + "QPlaceContactDetail.label": (), + "QPlaceContactDetail.setLabel": ('str',), + "QPlaceContactDetail.setValue": ('str',), + "QPlaceContactDetail.value": (), + + # class PySide2.QtLocation.QPlaceContent: + "QPlaceContent.__init__": [(), ('PySide2.QtLocation.QPlaceContent',)], + "QPlaceContent.__copy__": (), + "QPlaceContent.attribution": (), + "QPlaceContent.setAttribution": ('str',), + "QPlaceContent.setSupplier": ('PySide2.QtLocation.QPlaceSupplier',), + "QPlaceContent.setUser": ('PySide2.QtLocation.QPlaceUser',), + "QPlaceContent.supplier": (), + "QPlaceContent.user": (), + + # class PySide2.QtLocation.QPlaceContentReply: + "QPlaceContentReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceContentReply.content": (), + "QPlaceContentReply.nextPageRequest": (), + "QPlaceContentReply.previousPageRequest": (), + "QPlaceContentReply.request": (), + "QPlaceContentReply.setContent": ('dict',), + "QPlaceContentReply.setNextPageRequest": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceContentReply.setPreviousPageRequest": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceContentReply.setRequest": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceContentReply.setTotalCount": ('int',), + "QPlaceContentReply.totalCount": (), + "QPlaceContentReply.type": (), + + # class PySide2.QtLocation.QPlaceContentRequest: + "QPlaceContentRequest.__init__": [(), ('PySide2.QtLocation.QPlaceContentRequest',)], + "QPlaceContentRequest.__copy__": (), + "QPlaceContentRequest.clear": (), + "QPlaceContentRequest.contentContext": (), + "QPlaceContentRequest.limit": (), + "QPlaceContentRequest.placeId": (), + "QPlaceContentRequest.setContentContext": ('Any',), + "QPlaceContentRequest.setLimit": ('int',), + "QPlaceContentRequest.setPlaceId": ('str',), + + # class PySide2.QtLocation.QPlaceDetailsReply: + "QPlaceDetailsReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceDetailsReply.place": (), + "QPlaceDetailsReply.setPlace": ('PySide2.QtLocation.QPlace',), + "QPlaceDetailsReply.type": (), + + # class PySide2.QtLocation.QPlaceEditorial: + "QPlaceEditorial.__init__": [(), ('PySide2.QtLocation.QPlaceContent',)], + "QPlaceEditorial.language": (), + "QPlaceEditorial.setLanguage": ('str',), + "QPlaceEditorial.setText": ('str',), + "QPlaceEditorial.setTitle": ('str',), + "QPlaceEditorial.text": (), + "QPlaceEditorial.title": (), + + # class PySide2.QtLocation.QPlaceIcon: + "QPlaceIcon.__init__": [(), ('PySide2.QtLocation.QPlaceIcon',)], + "QPlaceIcon.__copy__": (), + "QPlaceIcon.isEmpty": (), + "QPlaceIcon.manager": (), + "QPlaceIcon.parameters": (), + "QPlaceIcon.setManager": ('PySide2.QtLocation.QPlaceManager',), + "QPlaceIcon.setParameters": ('dict',), + "QPlaceIcon.url": ('PySide2.QtCore.QSize',), + + # class PySide2.QtLocation.QPlaceIdReply: + "QPlaceIdReply.__init__": ('PySide2.QtLocation.QPlaceIdReply.OperationType', 'PySide2.QtCore.QObject'), + "QPlaceIdReply.id": (), + "QPlaceIdReply.operationType": (), + "QPlaceIdReply.setId": ('str',), + "QPlaceIdReply.type": (), + + # class PySide2.QtLocation.QPlaceImage: + "QPlaceImage.__init__": [(), ('PySide2.QtLocation.QPlaceContent',)], + "QPlaceImage.imageId": (), + "QPlaceImage.mimeType": (), + "QPlaceImage.setImageId": ('str',), + "QPlaceImage.setMimeType": ('str',), + "QPlaceImage.setUrl": ('PySide2.QtCore.QUrl',), + "QPlaceImage.url": (), + + # class PySide2.QtLocation.QPlaceManager: + "QPlaceManager.category": ('str',), + "QPlaceManager.childCategories": ('str',), + "QPlaceManager.childCategoryIds": ('str',), + "QPlaceManager.compatiblePlace": ('PySide2.QtLocation.QPlace',), + "QPlaceManager.getPlaceContent": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceManager.getPlaceDetails": ('str',), + "QPlaceManager.initializeCategories": (), + "QPlaceManager.locales": (), + "QPlaceManager.managerName": (), + "QPlaceManager.managerVersion": (), + "QPlaceManager.matchingPlaces": ('PySide2.QtLocation.QPlaceMatchRequest',), + "QPlaceManager.parentCategoryId": ('str',), + "QPlaceManager.removeCategory": ('str',), + "QPlaceManager.removePlace": ('str',), + "QPlaceManager.saveCategory": ('PySide2.QtLocation.QPlaceCategory', 'str'), + "QPlaceManager.savePlace": ('PySide2.QtLocation.QPlace',), + "QPlaceManager.search": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceManager.searchSuggestions": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceManager.setLocale": ('PySide2.QtCore.QLocale',), + "QPlaceManager.setLocales": ('list',), + + # class PySide2.QtLocation.QPlaceManagerEngine: + "QPlaceManagerEngine.__init__": ('dict', 'PySide2.QtCore.QObject'), + "QPlaceManagerEngine.category": ('str',), + "QPlaceManagerEngine.childCategories": ('str',), + "QPlaceManagerEngine.childCategoryIds": ('str',), + "QPlaceManagerEngine.compatiblePlace": ('PySide2.QtLocation.QPlace',), + "QPlaceManagerEngine.constructIconUrl": ('PySide2.QtLocation.QPlaceIcon', 'PySide2.QtCore.QSize'), + "QPlaceManagerEngine.getPlaceContent": ('PySide2.QtLocation.QPlaceContentRequest',), + "QPlaceManagerEngine.getPlaceDetails": ('str',), + "QPlaceManagerEngine.initializeCategories": (), + "QPlaceManagerEngine.locales": (), + "QPlaceManagerEngine.manager": (), + "QPlaceManagerEngine.managerName": (), + "QPlaceManagerEngine.managerVersion": (), + "QPlaceManagerEngine.matchingPlaces": ('PySide2.QtLocation.QPlaceMatchRequest',), + "QPlaceManagerEngine.parentCategoryId": ('str',), + "QPlaceManagerEngine.removeCategory": ('str',), + "QPlaceManagerEngine.removePlace": ('str',), + "QPlaceManagerEngine.saveCategory": ('PySide2.QtLocation.QPlaceCategory', 'str'), + "QPlaceManagerEngine.savePlace": ('PySide2.QtLocation.QPlace',), + "QPlaceManagerEngine.search": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceManagerEngine.searchSuggestions": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceManagerEngine.setLocales": ('list',), + + # class PySide2.QtLocation.QPlaceMatchReply: + "QPlaceMatchReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceMatchReply.places": (), + "QPlaceMatchReply.request": (), + "QPlaceMatchReply.setPlaces": ('list',), + "QPlaceMatchReply.setRequest": ('PySide2.QtLocation.QPlaceMatchRequest',), + "QPlaceMatchReply.type": (), + + # class PySide2.QtLocation.QPlaceMatchRequest: + "QPlaceMatchRequest.__init__": [(), ('PySide2.QtLocation.QPlaceMatchRequest',)], + "QPlaceMatchRequest.__copy__": (), + "QPlaceMatchRequest.clear": (), + "QPlaceMatchRequest.parameters": (), + "QPlaceMatchRequest.places": (), + "QPlaceMatchRequest.setParameters": ('dict',), + "QPlaceMatchRequest.setPlaces": ('list',), + "QPlaceMatchRequest.setResults": ('list',), + + # class PySide2.QtLocation.QPlaceProposedSearchResult: + "QPlaceProposedSearchResult.__init__": [(), ('PySide2.QtLocation.QPlaceSearchResult',)], + "QPlaceProposedSearchResult.searchRequest": (), + "QPlaceProposedSearchResult.setSearchRequest": ('PySide2.QtLocation.QPlaceSearchRequest',), + + # class PySide2.QtLocation.QPlaceRatings: + "QPlaceRatings.__init__": [(), ('PySide2.QtLocation.QPlaceRatings',)], + "QPlaceRatings.__copy__": (), + "QPlaceRatings.average": (), + "QPlaceRatings.count": (), + "QPlaceRatings.isEmpty": (), + "QPlaceRatings.maximum": (), + "QPlaceRatings.setAverage": ('float',), + "QPlaceRatings.setCount": ('int',), + "QPlaceRatings.setMaximum": ('float',), + + # class PySide2.QtLocation.QPlaceReply: + "QPlaceReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceReply.abort": (), + "QPlaceReply.errorString": (), + "QPlaceReply.isFinished": (), + "QPlaceReply.setError": ('PySide2.QtLocation.QPlaceReply.Error', 'str'), + "QPlaceReply.setFinished": ('bool',), + "QPlaceReply.type": (), + + # class PySide2.QtLocation.QPlaceResult: + "QPlaceResult.__init__": [(), ('PySide2.QtLocation.QPlaceSearchResult',)], + "QPlaceResult.distance": (), + "QPlaceResult.isSponsored": (), + "QPlaceResult.place": (), + "QPlaceResult.setDistance": ('float',), + "QPlaceResult.setPlace": ('PySide2.QtLocation.QPlace',), + "QPlaceResult.setSponsored": ('bool',), + + # class PySide2.QtLocation.QPlaceReview: + "QPlaceReview.__init__": [(), ('PySide2.QtLocation.QPlaceContent',)], + "QPlaceReview.dateTime": (), + "QPlaceReview.language": (), + "QPlaceReview.rating": (), + "QPlaceReview.reviewId": (), + "QPlaceReview.setDateTime": ('PySide2.QtCore.QDateTime',), + "QPlaceReview.setLanguage": ('str',), + "QPlaceReview.setRating": ('float',), + "QPlaceReview.setReviewId": ('str',), + "QPlaceReview.setText": ('str',), + "QPlaceReview.setTitle": ('str',), + "QPlaceReview.text": (), + "QPlaceReview.title": (), + + # class PySide2.QtLocation.QPlaceSearchReply: + "QPlaceSearchReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceSearchReply.nextPageRequest": (), + "QPlaceSearchReply.previousPageRequest": (), + "QPlaceSearchReply.request": (), + "QPlaceSearchReply.results": (), + "QPlaceSearchReply.setNextPageRequest": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceSearchReply.setPreviousPageRequest": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceSearchReply.setRequest": ('PySide2.QtLocation.QPlaceSearchRequest',), + "QPlaceSearchReply.setResults": ('list',), + "QPlaceSearchReply.type": (), + + # class PySide2.QtLocation.QPlaceSearchRequest: + "QPlaceSearchRequest.__init__": [(), ('PySide2.QtLocation.QPlaceSearchRequest',)], + "QPlaceSearchRequest.categories": (), + "QPlaceSearchRequest.clear": (), + "QPlaceSearchRequest.limit": (), + "QPlaceSearchRequest.recommendationId": (), + "QPlaceSearchRequest.relevanceHint": (), + "QPlaceSearchRequest.searchArea": (), + "QPlaceSearchRequest.searchContext": (), + "QPlaceSearchRequest.searchTerm": (), + "QPlaceSearchRequest.setCategories": ('list',), + "QPlaceSearchRequest.setCategory": ('PySide2.QtLocation.QPlaceCategory',), + "QPlaceSearchRequest.setLimit": ('int',), + "QPlaceSearchRequest.setRecommendationId": ('str',), + "QPlaceSearchRequest.setRelevanceHint": ('PySide2.QtLocation.QPlaceSearchRequest.RelevanceHint',), + "QPlaceSearchRequest.setSearchArea": ('PySide2.QtPositioning.QGeoShape',), + "QPlaceSearchRequest.setSearchContext": ('Any',), + "QPlaceSearchRequest.setSearchTerm": ('str',), + + # class PySide2.QtLocation.QPlaceSearchResult: + "QPlaceSearchResult.__init__": [(), ('PySide2.QtLocation.QPlaceSearchResult',)], + "QPlaceSearchResult.icon": (), + "QPlaceSearchResult.setIcon": ('PySide2.QtLocation.QPlaceIcon',), + "QPlaceSearchResult.setTitle": ('str',), + "QPlaceSearchResult.title": (), + + # class PySide2.QtLocation.QPlaceSearchSuggestionReply: + "QPlaceSearchSuggestionReply.__init__": ('PySide2.QtCore.QObject',), + "QPlaceSearchSuggestionReply.setSuggestions": ('List[str]',), + "QPlaceSearchSuggestionReply.suggestions": (), + "QPlaceSearchSuggestionReply.type": (), + + # class PySide2.QtLocation.QPlaceSupplier: + "QPlaceSupplier.__init__": [(), ('PySide2.QtLocation.QPlaceSupplier',)], + "QPlaceSupplier.__copy__": (), + "QPlaceSupplier.icon": (), + "QPlaceSupplier.isEmpty": (), + "QPlaceSupplier.name": (), + "QPlaceSupplier.setIcon": ('PySide2.QtLocation.QPlaceIcon',), + "QPlaceSupplier.setName": ('str',), + "QPlaceSupplier.setSupplierId": ('str',), + "QPlaceSupplier.setUrl": ('PySide2.QtCore.QUrl',), + "QPlaceSupplier.supplierId": (), + "QPlaceSupplier.url": (), + + # class PySide2.QtLocation.QPlaceUser: + "QPlaceUser.__init__": [(), ('PySide2.QtLocation.QPlaceUser',)], + "QPlaceUser.__copy__": (), + "QPlaceUser.name": (), + "QPlaceUser.setName": ('str',), + "QPlaceUser.setUserId": ('str',), + "QPlaceUser.userId": (), + }) + +# Module PySide2.QtQml +if "PySide2.QtQml" in sys.modules: + dict.update({ + + # class PySide2.QtQml.ListProperty: + + # class PySide2.QtQml.QJSEngine: + "QJSEngine.__init__": [(), ('PySide2.QtCore.QObject',)], + "QJSEngine.collectGarbage": (), + "QJSEngine.evaluate": ('str', 'str', 'int'), + "QJSEngine.globalObject": (), + "QJSEngine.installExtensions": ('PySide2.libpyside.Extensions', 'PySide2.QtQml.QJSValue'), + "QJSEngine.installTranslatorFunctions": ('PySide2.QtQml.QJSValue',), + "QJSEngine.newArray": ('int',), + "QJSEngine.newObject": (), + "QJSEngine.newQMetaObject": ('PySide2.QtCore.QMetaObject',), + "QJSEngine.newQObject": ('PySide2.QtCore.QObject',), + "QJSEngine.toScriptValue": ('Any',), + + # class PySide2.QtQml.QJSValue: + "QJSValue.__init__": [('PySide2.QtQml.QJSValue',), ('PySide2.QtQml.QJSValue.SpecialValue',), ('bool',), ('float',), ('int',), ('str',)], + "QJSValue.__copy__": (), + "QJSValue.call": ('list',), + "QJSValue.callAsConstructor": ('list',), + "QJSValue.callWithInstance": ('PySide2.QtQml.QJSValue', 'list'), + "QJSValue.deleteProperty": ('str',), + "QJSValue.engine": (), + "QJSValue.equals": ('PySide2.QtQml.QJSValue',), + "QJSValue.hasOwnProperty": ('str',), + "QJSValue.hasProperty": ('str',), + "QJSValue.isArray": (), + "QJSValue.isBool": (), + "QJSValue.isCallable": (), + "QJSValue.isDate": (), + "QJSValue.isError": (), + "QJSValue.isNull": (), + "QJSValue.isNumber": (), + "QJSValue.isObject": (), + "QJSValue.isQMetaObject": (), + "QJSValue.isQObject": (), + "QJSValue.isRegExp": (), + "QJSValue.isString": (), + "QJSValue.isUndefined": (), + "QJSValue.isVariant": (), + "QJSValue.property": [('int',), ('str',)], + "QJSValue.prototype": (), + "QJSValue.setProperty": [('int', 'PySide2.QtQml.QJSValue'), ('str', 'PySide2.QtQml.QJSValue')], + "QJSValue.setPrototype": ('PySide2.QtQml.QJSValue',), + "QJSValue.strictlyEquals": ('PySide2.QtQml.QJSValue',), + "QJSValue.toBool": (), + "QJSValue.toDateTime": (), + "QJSValue.toInt": (), + "QJSValue.toNumber": (), + "QJSValue.toQMetaObject": (), + "QJSValue.toQObject": (), + "QJSValue.toString": (), + "QJSValue.toUInt": (), + "QJSValue.toVariant": (), + + # class PySide2.QtQml.QJSValueIterator: + "QJSValueIterator.__init__": ('PySide2.QtQml.QJSValue',), + "QJSValueIterator.hasNext": (), + "QJSValueIterator.name": (), + "QJSValueIterator.value": (), + + # class PySide2.QtQml.QQmlAbstractUrlInterceptor: + "QQmlAbstractUrlInterceptor.__init__": (), + "QQmlAbstractUrlInterceptor.intercept": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlAbstractUrlInterceptor.DataType'), + + # class PySide2.QtQml.QQmlApplicationEngine: + "QQmlApplicationEngine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QQmlApplicationEngine.load": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlApplicationEngine.loadData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlApplicationEngine.rootObjects": (), + + # class PySide2.QtQml.QQmlComponent: + "QQmlComponent.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject')], + "QQmlComponent.beginCreate": ('PySide2.QtQml.QQmlContext',), + "QQmlComponent.completeCreate": (), + "QQmlComponent.create": [('PySide2.QtQml.QQmlContext',), ('PySide2.QtQml.QQmlIncubator', 'PySide2.QtQml.QQmlContext', 'PySide2.QtQml.QQmlContext')], + "QQmlComponent.creationContext": (), + "QQmlComponent.errorString": (), + "QQmlComponent.errors": (), + "QQmlComponent.isError": (), + "QQmlComponent.isLoading": (), + "QQmlComponent.isNull": (), + "QQmlComponent.isReady": (), + "QQmlComponent.loadUrl": [('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode')], + "QQmlComponent.progress": (), + "QQmlComponent.setData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlComponent.status": (), + "QQmlComponent.url": (), + + # class PySide2.QtQml.QQmlContext: + "QQmlContext.__init__": [('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject')], + "QQmlContext.baseUrl": (), + "QQmlContext.contextObject": (), + "QQmlContext.contextProperty": ('str',), + "QQmlContext.engine": (), + "QQmlContext.isValid": (), + "QQmlContext.nameForObject": ('PySide2.QtCore.QObject',), + "QQmlContext.parentContext": (), + "QQmlContext.resolvedUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setContextObject": ('PySide2.QtCore.QObject',), + "QQmlContext.setContextProperty": [('str', 'Any'), ('str', 'PySide2.QtCore.QObject')], + + # class PySide2.QtQml.QQmlDebuggingEnabler: + "QQmlDebuggingEnabler.__init__": ('bool',), + "QQmlDebuggingEnabler.connectToLocalDebugger": ('str', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode'), + "QQmlDebuggingEnabler.debuggerServices": (), + "QQmlDebuggingEnabler.inspectorServices": (), + "QQmlDebuggingEnabler.nativeDebuggerServices": (), + "QQmlDebuggingEnabler.profilerServices": (), + "QQmlDebuggingEnabler.setServices": ('List[str]',), + "QQmlDebuggingEnabler.startDebugConnector": ('str', 'dict'), + "QQmlDebuggingEnabler.startTcpDebugServer": ('int', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode', 'str'), + + # class PySide2.QtQml.QQmlEngine: + "QQmlEngine.__init__": ('PySide2.QtCore.QObject',), + "QQmlEngine.addImageProvider": ('str', 'PySide2.QtQml.QQmlImageProviderBase'), + "QQmlEngine.addImportPath": ('str',), + "QQmlEngine.addNamedBundle": ('str', 'str'), + "QQmlEngine.addPluginPath": ('str',), + "QQmlEngine.baseUrl": (), + "QQmlEngine.clearComponentCache": (), + "QQmlEngine.contextForObject": ('PySide2.QtCore.QObject',), + "QQmlEngine.event": ('PySide2.QtCore.QEvent',), + "QQmlEngine.imageProvider": ('str',), + "QQmlEngine.importPathList": (), + "QQmlEngine.importPlugin": ('str', 'str', 'list'), + "QQmlEngine.incubationController": (), + "QQmlEngine.networkAccessManager": (), + "QQmlEngine.networkAccessManagerFactory": (), + "QQmlEngine.objectOwnership": ('PySide2.QtCore.QObject',), + "QQmlEngine.offlineStorageDatabaseFilePath": ('str',), + "QQmlEngine.offlineStoragePath": (), + "QQmlEngine.outputWarningsToStandardError": (), + "QQmlEngine.pluginPathList": (), + "QQmlEngine.removeImageProvider": ('str',), + "QQmlEngine.retranslate": (), + "QQmlEngine.rootContext": (), + "QQmlEngine.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlEngine.setContextForObject": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), + "QQmlEngine.setImportPathList": ('List[str]',), + "QQmlEngine.setIncubationController": ('PySide2.QtQml.QQmlIncubationController',), + "QQmlEngine.setNetworkAccessManagerFactory": ('PySide2.QtQml.QQmlNetworkAccessManagerFactory',), + "QQmlEngine.setObjectOwnership": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine.ObjectOwnership'), + "QQmlEngine.setOfflineStoragePath": ('str',), + "QQmlEngine.setOutputWarningsToStandardError": ('bool',), + "QQmlEngine.setPluginPathList": ('List[str]',), + "QQmlEngine.setUrlInterceptor": ('PySide2.QtQml.QQmlAbstractUrlInterceptor',), + "QQmlEngine.trimComponentCache": (), + "QQmlEngine.urlInterceptor": (), + + # class PySide2.QtQml.QQmlError: + "QQmlError.__init__": [(), ('PySide2.QtQml.QQmlError',)], + "QQmlError.__copy__": (), + "QQmlError.column": (), + "QQmlError.description": (), + "QQmlError.isValid": (), + "QQmlError.line": (), + "QQmlError.messageType": (), + "QQmlError.object": (), + "QQmlError.setColumn": ('int',), + "QQmlError.setDescription": ('str',), + "QQmlError.setLine": ('int',), + "QQmlError.setMessageType": ('PySide2.QtCore.QtMsgType',), + "QQmlError.setObject": ('PySide2.QtCore.QObject',), + "QQmlError.setUrl": ('PySide2.QtCore.QUrl',), + "QQmlError.toString": (), + "QQmlError.url": (), + + # class PySide2.QtQml.QQmlExpression: + "QQmlExpression.__init__": [(), ('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlScriptString', 'PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QObject')], + "QQmlExpression.clearError": (), + "QQmlExpression.columnNumber": (), + "QQmlExpression.context": (), + "QQmlExpression.engine": (), + "QQmlExpression.error": (), + "QQmlExpression.evaluate": ('bool',), + "QQmlExpression.expression": (), + "QQmlExpression.hasError": (), + "QQmlExpression.lineNumber": (), + "QQmlExpression.notifyOnValueChanged": (), + "QQmlExpression.scopeObject": (), + "QQmlExpression.setExpression": ('str',), + "QQmlExpression.setNotifyOnValueChanged": ('bool',), + "QQmlExpression.setSourceLocation": ('str', 'int', 'int'), + "QQmlExpression.sourceFile": (), + + # class PySide2.QtQml.QQmlExtensionInterface: + "QQmlExtensionInterface.__init__": (), + "QQmlExtensionInterface.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + + # class PySide2.QtQml.QQmlExtensionPlugin: + "QQmlExtensionPlugin.__init__": ('PySide2.QtCore.QObject',), + "QQmlExtensionPlugin.baseUrl": (), + "QQmlExtensionPlugin.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + "QQmlExtensionPlugin.registerTypes": ('str',), + + # class PySide2.QtQml.QQmlFile: + "QQmlFile.__init__": [(), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.clear": [(), ('PySide2.QtCore.QObject',)], + "QQmlFile.connectDownloadProgress": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.connectFinished": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.data": (), + "QQmlFile.dataByteArray": (), + "QQmlFile.error": (), + "QQmlFile.isError": (), + "QQmlFile.isLoading": (), + "QQmlFile.isLocalFile": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.isNull": (), + "QQmlFile.isReady": (), + "QQmlFile.isSynchronous": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.load": [('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.size": (), + "QQmlFile.status": (), + "QQmlFile.url": (), + "QQmlFile.urlToLocalFileOrQrc": [('PySide2.QtCore.QUrl',), ('str',)], + + # class PySide2.QtQml.QQmlFileSelector: + "QQmlFileSelector.__init__": ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), + "QQmlFileSelector.get": ('PySide2.QtQml.QQmlEngine',), + "QQmlFileSelector.selector": (), + "QQmlFileSelector.setExtraSelectors": ('List[str]',), + "QQmlFileSelector.setSelector": ('PySide2.QtCore.QFileSelector',), + + # class PySide2.QtQml.QQmlImageProviderBase: + "QQmlImageProviderBase.flags": (), + "QQmlImageProviderBase.imageType": (), + + # class PySide2.QtQml.QQmlIncubationController: + "QQmlIncubationController.__init__": (), + "QQmlIncubationController.engine": (), + "QQmlIncubationController.incubateFor": ('int',), + "QQmlIncubationController.incubateWhile": ('bool', 'int'), + "QQmlIncubationController.incubatingObjectCount": (), + "QQmlIncubationController.incubatingObjectCountChanged": ('int',), + + # class PySide2.QtQml.QQmlIncubator: + "QQmlIncubator.__init__": ('PySide2.QtQml.QQmlIncubator.IncubationMode',), + "QQmlIncubator.clear": (), + "QQmlIncubator.errors": (), + "QQmlIncubator.forceCompletion": (), + "QQmlIncubator.incubationMode": (), + "QQmlIncubator.isError": (), + "QQmlIncubator.isLoading": (), + "QQmlIncubator.isNull": (), + "QQmlIncubator.isReady": (), + "QQmlIncubator.object": (), + "QQmlIncubator.setInitialState": ('PySide2.QtCore.QObject',), + "QQmlIncubator.status": (), + "QQmlIncubator.statusChanged": ('PySide2.QtQml.QQmlIncubator.Status',), + + # class PySide2.QtQml.QQmlListReference: + "QQmlListReference.__init__": [(), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlListReference',)], + "QQmlListReference.__copy__": (), + "QQmlListReference.append": ('PySide2.QtCore.QObject',), + "QQmlListReference.at": ('int',), + "QQmlListReference.canAppend": (), + "QQmlListReference.canAt": (), + "QQmlListReference.canClear": (), + "QQmlListReference.canCount": (), + "QQmlListReference.clear": (), + "QQmlListReference.count": (), + "QQmlListReference.isManipulable": (), + "QQmlListReference.isReadable": (), + "QQmlListReference.isValid": (), + "QQmlListReference.listElementType": (), + "QQmlListReference.object": (), + + # class PySide2.QtQml.QQmlNetworkAccessManagerFactory: + "QQmlNetworkAccessManagerFactory.__init__": (), + "QQmlNetworkAccessManagerFactory.create": ('PySide2.QtCore.QObject',), + + # class PySide2.QtQml.QQmlParserStatus: + "QQmlParserStatus.__init__": (), + "QQmlParserStatus.classBegin": (), + "QQmlParserStatus.componentComplete": (), + + # class PySide2.QtQml.QQmlProperty: + "QQmlProperty.__init__": [(), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlProperty',)], + "QQmlProperty.__copy__": (), + "QQmlProperty.connectNotifySignal": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlProperty.hasNotifySignal": (), + "QQmlProperty.index": (), + "QQmlProperty.isDesignable": (), + "QQmlProperty.isProperty": (), + "QQmlProperty.isResettable": (), + "QQmlProperty.isSignalProperty": (), + "QQmlProperty.isValid": (), + "QQmlProperty.isWritable": (), + "QQmlProperty.method": (), + "QQmlProperty.name": (), + "QQmlProperty.needsNotifySignal": (), + "QQmlProperty.object": (), + "QQmlProperty.property": (), + "QQmlProperty.propertyType": (), + "QQmlProperty.propertyTypeCategory": (), + "QQmlProperty.propertyTypeName": (), + "QQmlProperty.read": [(), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine')], + "QQmlProperty.reset": (), + "QQmlProperty.type": (), + "QQmlProperty.write": [('Any',), ('PySide2.QtCore.QObject', 'str', 'Any'), ('PySide2.QtCore.QObject', 'str', 'Any', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'Any', 'PySide2.QtQml.QQmlEngine')], + + # class PySide2.QtQml.QQmlPropertyMap: + "QQmlPropertyMap.__init__": ('PySide2.QtCore.QObject',), + "QQmlPropertyMap.clear": ('str',), + "QQmlPropertyMap.contains": ('str',), + "QQmlPropertyMap.count": (), + "QQmlPropertyMap.insert": ('str', 'Any'), + "QQmlPropertyMap.isEmpty": (), + "QQmlPropertyMap.keys": (), + "QQmlPropertyMap.size": (), + "QQmlPropertyMap.updateValue": ('str', 'Any'), + "QQmlPropertyMap.value": ('str',), + + # class PySide2.QtQml.QQmlPropertyValueSource: + "QQmlPropertyValueSource.__init__": (), + "QQmlPropertyValueSource.setTarget": ('PySide2.QtQml.QQmlProperty',), + + # class PySide2.QtQml.QQmlScriptString: + "QQmlScriptString.__init__": [(), ('PySide2.QtQml.QQmlScriptString',)], + "QQmlScriptString.__copy__": (), + "QQmlScriptString.booleanLiteral": ('bool',), + "QQmlScriptString.isEmpty": (), + "QQmlScriptString.isNullLiteral": (), + "QQmlScriptString.isUndefinedLiteral": (), + "QQmlScriptString.numberLiteral": ('bool',), + "QQmlScriptString.stringLiteral": (), + + # class PySide2.QtQml.QQmlTypesExtensionInterface: + "QQmlTypesExtensionInterface.__init__": (), + "QQmlTypesExtensionInterface.registerTypes": ('str',), + + # class PySide2.QtQml.VolatileBool: + }) + +# Module PySide2.QtQuick +if "PySide2.QtQuick" in sys.modules: + dict.update({ + + # class PySide2.QtQuick.QQuickAsyncImageProvider: + "QQuickAsyncImageProvider.__init__": (), + "QQuickAsyncImageProvider.requestImageResponse": ('str', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickFramebufferObject: + "QQuickFramebufferObject.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickFramebufferObject.createRenderer": (), + "QQuickFramebufferObject.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickFramebufferObject.isTextureProvider": (), + "QQuickFramebufferObject.mirrorVertically": (), + "QQuickFramebufferObject.releaseResources": (), + "QQuickFramebufferObject.setMirrorVertically": ('bool',), + "QQuickFramebufferObject.setTextureFollowsItemSize": ('bool',), + "QQuickFramebufferObject.textureFollowsItemSize": (), + "QQuickFramebufferObject.textureProvider": (), + "QQuickFramebufferObject.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickImageProvider: + "QQuickImageProvider.__init__": ('PySide2.QtQml.QQmlImageProviderBase.ImageType', 'PySide2.libpyside.Flags'), + "QQuickImageProvider.flags": (), + "QQuickImageProvider.imageType": (), + "QQuickImageProvider.requestImage": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestPixmap": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestTexture": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickImageResponse: + "QQuickImageResponse.__init__": (), + "QQuickImageResponse.cancel": (), + "QQuickImageResponse.errorString": (), + "QQuickImageResponse.textureFactory": (), + + # class PySide2.QtQuick.QQuickItem: + "QQuickItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.acceptHoverEvents": (), + "QQuickItem.acceptTouchEvents": (), + "QQuickItem.acceptedMouseButtons": (), + "QQuickItem.activeFocusOnTab": (), + "QQuickItem.antialiasing": (), + "QQuickItem.baselineOffset": (), + "QQuickItem.boundingRect": (), + "QQuickItem.childAt": ('float', 'float'), + "QQuickItem.childItems": (), + "QQuickItem.childMouseEventFilter": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickItem.childrenRect": (), + "QQuickItem.classBegin": (), + "QQuickItem.clip": (), + "QQuickItem.clipRect": (), + "QQuickItem.componentComplete": (), + "QQuickItem.containmentMask": (), + "QQuickItem.contains": ('PySide2.QtCore.QPointF',), + "QQuickItem.cursor": (), + "QQuickItem.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickItem.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickItem.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickItem.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickItem.event": ('PySide2.QtCore.QEvent',), + "QQuickItem.filtersChildMouseEvents": (), + "QQuickItem.flags": (), + "QQuickItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.forceActiveFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QQuickItem.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickItem.grabMouse": (), + "QQuickItem.grabToImage": [('PySide2.QtCore.QSize',), ('PySide2.QtQml.QJSValue', 'PySide2.QtCore.QSize')], + "QQuickItem.grabTouchPoints": ('list',), + "QQuickItem.hasActiveFocus": (), + "QQuickItem.hasFocus": (), + "QQuickItem.height": (), + "QQuickItem.heightValid": (), + "QQuickItem.hoverEnterEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverLeaveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverMoveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.implicitHeight": (), + "QQuickItem.implicitWidth": (), + "QQuickItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QQuickItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QQuickItem.isAncestorOf": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.isComponentComplete": (), + "QQuickItem.isEnabled": (), + "QQuickItem.isFocusScope": (), + "QQuickItem.isTextureProvider": (), + "QQuickItem.isUnderMouse": (), + "QQuickItem.isVisible": (), + "QQuickItem.itemTransform": ('PySide2.QtQuick.QQuickItem', 'bool'), + "QQuickItem.keepMouseGrab": (), + "QQuickItem.keepTouchGrab": (), + "QQuickItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.mapFromGlobal": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapFromScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapRectFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectFromScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapRectToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectToScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapToGlobal": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapToScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseUngrabEvent": (), + "QQuickItem.nextItemInFocusChain": ('bool',), + "QQuickItem.opacity": (), + "QQuickItem.parentItem": (), + "QQuickItem.polish": (), + "QQuickItem.position": (), + "QQuickItem.releaseResources": (), + "QQuickItem.resetAntialiasing": (), + "QQuickItem.resetHeight": (), + "QQuickItem.resetWidth": (), + "QQuickItem.rotation": (), + "QQuickItem.scale": (), + "QQuickItem.scopedFocusItem": (), + "QQuickItem.setAcceptHoverEvents": ('bool',), + "QQuickItem.setAcceptTouchEvents": ('bool',), + "QQuickItem.setAcceptedMouseButtons": ('PySide2.libpyside.MouseButtons',), + "QQuickItem.setActiveFocusOnTab": ('bool',), + "QQuickItem.setAntialiasing": ('bool',), + "QQuickItem.setBaselineOffset": ('float',), + "QQuickItem.setClip": ('bool',), + "QQuickItem.setContainmentMask": ('PySide2.QtCore.QObject',), + "QQuickItem.setCursor": ('PySide2.QtGui.QCursor',), + "QQuickItem.setEnabled": ('bool',), + "QQuickItem.setFiltersChildMouseEvents": ('bool',), + "QQuickItem.setFlag": ('PySide2.QtQuick.QQuickItem.Flag', 'bool'), + "QQuickItem.setFlags": ('PySide2.libpyside.Flags',), + "QQuickItem.setFocus": [('bool',), ('bool', 'PySide2.QtCore.Qt.FocusReason')], + "QQuickItem.setHeight": ('float',), + "QQuickItem.setImplicitHeight": ('float',), + "QQuickItem.setImplicitSize": ('float', 'float'), + "QQuickItem.setImplicitWidth": ('float',), + "QQuickItem.setKeepMouseGrab": ('bool',), + "QQuickItem.setKeepTouchGrab": ('bool',), + "QQuickItem.setOpacity": ('float',), + "QQuickItem.setParentItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.setPosition": ('PySide2.QtCore.QPointF',), + "QQuickItem.setRotation": ('float',), + "QQuickItem.setScale": ('float',), + "QQuickItem.setSize": ('PySide2.QtCore.QSizeF',), + "QQuickItem.setSmooth": ('bool',), + "QQuickItem.setState": ('str',), + "QQuickItem.setTransformOrigin": ('PySide2.QtQuick.QQuickItem.TransformOrigin',), + "QQuickItem.setTransformOriginPoint": ('PySide2.QtCore.QPointF',), + "QQuickItem.setVisible": ('bool',), + "QQuickItem.setWidth": ('float',), + "QQuickItem.setX": ('float',), + "QQuickItem.setY": ('float',), + "QQuickItem.setZ": ('float',), + "QQuickItem.size": (), + "QQuickItem.smooth": (), + "QQuickItem.stackAfter": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.stackBefore": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.state": (), + "QQuickItem.textureProvider": (), + "QQuickItem.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QQuickItem.touchUngrabEvent": (), + "QQuickItem.transformOrigin": (), + "QQuickItem.transformOriginPoint": (), + "QQuickItem.ungrabMouse": (), + "QQuickItem.ungrabTouchPoints": (), + "QQuickItem.unsetCursor": (), + "QQuickItem.update": (), + "QQuickItem.updateInputMethod": ('PySide2.libpyside.InputMethodQueries',), + "QQuickItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + "QQuickItem.updatePolish": (), + "QQuickItem.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QQuickItem.width": (), + "QQuickItem.widthValid": (), + "QQuickItem.window": (), + "QQuickItem.windowDeactivateEvent": (), + "QQuickItem.x": (), + "QQuickItem.y": (), + "QQuickItem.z": (), + + # class PySide2.QtQuick.QQuickItemGrabResult: + "QQuickItemGrabResult.event": ('PySide2.QtCore.QEvent',), + "QQuickItemGrabResult.image": (), + "QQuickItemGrabResult.saveToFile": ('str',), + "QQuickItemGrabResult.url": (), + + # class PySide2.QtQuick.QQuickPaintedItem: + "QQuickPaintedItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickPaintedItem.antialiasing": (), + "QQuickPaintedItem.contentsBoundingRect": (), + "QQuickPaintedItem.contentsScale": (), + "QQuickPaintedItem.contentsSize": (), + "QQuickPaintedItem.fillColor": (), + "QQuickPaintedItem.isTextureProvider": (), + "QQuickPaintedItem.mipmap": (), + "QQuickPaintedItem.opaquePainting": (), + "QQuickPaintedItem.paint": ('PySide2.QtGui.QPainter',), + "QQuickPaintedItem.performanceHints": (), + "QQuickPaintedItem.releaseResources": (), + "QQuickPaintedItem.renderTarget": (), + "QQuickPaintedItem.resetContentsSize": (), + "QQuickPaintedItem.setAntialiasing": ('bool',), + "QQuickPaintedItem.setContentsScale": ('float',), + "QQuickPaintedItem.setContentsSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.setFillColor": ('PySide2.QtGui.QColor',), + "QQuickPaintedItem.setMipmap": ('bool',), + "QQuickPaintedItem.setOpaquePainting": ('bool',), + "QQuickPaintedItem.setPerformanceHint": ('PySide2.QtQuick.QQuickPaintedItem.PerformanceHint', 'bool'), + "QQuickPaintedItem.setPerformanceHints": ('PySide2.libpyside.PerformanceHints',), + "QQuickPaintedItem.setRenderTarget": ('PySide2.QtQuick.QQuickPaintedItem.RenderTarget',), + "QQuickPaintedItem.setTextureSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.textureProvider": (), + "QQuickPaintedItem.textureSize": (), + "QQuickPaintedItem.update": [(), ('PySide2.QtCore.QRect',)], + "QQuickPaintedItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickRenderControl: + "QQuickRenderControl.__init__": ('PySide2.QtCore.QObject',), + "QQuickRenderControl.grab": (), + "QQuickRenderControl.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QQuickRenderControl.invalidate": (), + "QQuickRenderControl.polishItems": (), + "QQuickRenderControl.prepareThread": ('PySide2.QtCore.QThread',), + "QQuickRenderControl.render": (), + "QQuickRenderControl.renderWindow": ('PySide2.QtCore.QPoint',), + "QQuickRenderControl.renderWindowFor": ('PySide2.QtQuick.QQuickWindow', 'PySide2.QtCore.QPoint'), + "QQuickRenderControl.sync": (), + + # class PySide2.QtQuick.QQuickTextDocument: + "QQuickTextDocument.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickTextDocument.textDocument": (), + + # class PySide2.QtQuick.QQuickTextureFactory: + "QQuickTextureFactory.__init__": (), + "QQuickTextureFactory.createTexture": ('PySide2.QtQuick.QQuickWindow',), + "QQuickTextureFactory.image": (), + "QQuickTextureFactory.textureByteCount": (), + "QQuickTextureFactory.textureFactoryForImage": ('PySide2.QtGui.QImage',), + "QQuickTextureFactory.textureSize": (), + + # class PySide2.QtQuick.QQuickTransform: + "QQuickTransform.__init__": ('PySide2.QtCore.QObject',), + "QQuickTransform.appendToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QQuickTransform.prependToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.update": (), + + # class PySide2.QtQuick.QQuickView: + "QQuickView.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtGui.QWindow'), ('PySide2.QtCore.QUrl', 'PySide2.QtQuick.QQuickRenderControl'), ('PySide2.QtGui.QWindow',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtGui.QWindow')], + "QQuickView.engine": (), + "QQuickView.errors": (), + "QQuickView.initialSize": (), + "QQuickView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickView.resizeMode": (), + "QQuickView.rootContext": (), + "QQuickView.rootObject": (), + "QQuickView.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickView.setResizeMode": ('PySide2.QtQuick.QQuickView.ResizeMode',), + "QQuickView.setSource": ('PySide2.QtCore.QUrl',), + "QQuickView.sizeHint": (), + "QQuickView.source": (), + "QQuickView.status": (), + "QQuickView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtQuick.QQuickWindow: + "QQuickWindow.__init__": [('PySide2.QtGui.QWindow',), ('PySide2.QtQuick.QQuickRenderControl',)], + "QQuickWindow.accessibleRoot": (), + "QQuickWindow.activeFocusItem": (), + "QQuickWindow.clearBeforeRendering": (), + "QQuickWindow.color": (), + "QQuickWindow.contentItem": (), + "QQuickWindow.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'PySide2.libpyside.CreateTextureOptions'), + "QQuickWindow.createTextureFromImage": [('PySide2.QtGui.QImage',), ('PySide2.QtGui.QImage', 'PySide2.libpyside.CreateTextureOptions')], + "QQuickWindow.effectiveDevicePixelRatio": (), + "QQuickWindow.event": ('PySide2.QtCore.QEvent',), + "QQuickWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QQuickWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.focusObject": (), + "QQuickWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.grabWindow": (), + "QQuickWindow.hasDefaultAlphaBuffer": (), + "QQuickWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWindow.incubationController": (), + "QQuickWindow.isPersistentOpenGLContext": (), + "QQuickWindow.isPersistentSceneGraph": (), + "QQuickWindow.isSceneGraphInitialized": (), + "QQuickWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseGrabberItem": (), + "QQuickWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.openglContext": (), + "QQuickWindow.releaseResources": (), + "QQuickWindow.renderTarget": (), + "QQuickWindow.renderTargetId": (), + "QQuickWindow.renderTargetSize": (), + "QQuickWindow.resetOpenGLState": (), + "QQuickWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWindow.sceneGraphBackend": (), + "QQuickWindow.scheduleRenderJob": ('PySide2.QtCore.QRunnable', 'PySide2.QtQuick.QQuickWindow.RenderStage'), + "QQuickWindow.sendEvent": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickWindow.setClearBeforeRendering": ('bool',), + "QQuickWindow.setColor": ('PySide2.QtGui.QColor',), + "QQuickWindow.setDefaultAlphaBuffer": ('bool',), + "QQuickWindow.setPersistentOpenGLContext": ('bool',), + "QQuickWindow.setPersistentSceneGraph": ('bool',), + "QQuickWindow.setRenderTarget": [('PySide2.QtGui.QOpenGLFramebufferObject',), ('int', 'PySide2.QtCore.QSize')], + "QQuickWindow.setSceneGraphBackend": ('str',), + "QQuickWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWindow.update": (), + "QQuickWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtQuick.QSGAbstractRenderer: + "QSGAbstractRenderer.__init__": ('PySide2.QtCore.QObject',), + "QSGAbstractRenderer.clearColor": (), + "QSGAbstractRenderer.clearMode": (), + "QSGAbstractRenderer.deviceRect": (), + "QSGAbstractRenderer.nodeChanged": ('PySide2.QtQuick.QSGNode', 'PySide2.libpyside.DirtyState'), + "QSGAbstractRenderer.projectionMatrix": (), + "QSGAbstractRenderer.renderScene": ('int',), + "QSGAbstractRenderer.setClearColor": ('PySide2.QtGui.QColor',), + "QSGAbstractRenderer.setClearMode": ('PySide2.libpyside.ClearMode',), + "QSGAbstractRenderer.setDeviceRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.setProjectionMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGAbstractRenderer.setProjectionMatrixToRect": ('PySide2.QtCore.QRectF',), + "QSGAbstractRenderer.setViewportRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.viewportRect": (), + + # class PySide2.QtQuick.QSGBasicGeometryNode: + "QSGBasicGeometryNode.__init__": ('PySide2.QtQuick.QSGNode.NodeType',), + "QSGBasicGeometryNode.clipList": (), + "QSGBasicGeometryNode.geometry": (), + "QSGBasicGeometryNode.matrix": (), + "QSGBasicGeometryNode.setGeometry": ('PySide2.QtQuick.QSGGeometry',), + "QSGBasicGeometryNode.setRendererClipList": ('PySide2.QtQuick.QSGClipNode',), + "QSGBasicGeometryNode.setRendererMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSGClipNode: + "QSGClipNode.__init__": (), + "QSGClipNode.clipRect": (), + "QSGClipNode.isRectangular": (), + "QSGClipNode.setClipRect": ('PySide2.QtCore.QRectF',), + "QSGClipNode.setIsRectangular": ('bool',), + + # class PySide2.QtQuick.QSGDynamicTexture: + "QSGDynamicTexture.__init__": (), + "QSGDynamicTexture.updateTexture": (), + + # class PySide2.QtQuick.QSGEngine: + "QSGEngine.__init__": ('PySide2.QtCore.QObject',), + "QSGEngine.createRenderer": (), + "QSGEngine.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'PySide2.libpyside.CreateTextureOptions'), + "QSGEngine.createTextureFromImage": ('PySide2.QtGui.QImage', 'PySide2.libpyside.CreateTextureOptions'), + "QSGEngine.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QSGEngine.invalidate": (), + + # class PySide2.QtQuick.QSGGeometry: + "QSGGeometry.__init__": ('PySide2.QtQuick.QSGGeometry.AttributeSet', 'int', 'int', 'int'), + "QSGGeometry.allocate": ('int', 'int'), + "QSGGeometry.attributeCount": (), + "QSGGeometry.attributes": (), + "QSGGeometry.defaultAttributes_ColoredPoint2D": (), + "QSGGeometry.defaultAttributes_Point2D": (), + "QSGGeometry.defaultAttributes_TexturedPoint2D": (), + "QSGGeometry.drawingMode": (), + "QSGGeometry.indexCount": (), + "QSGGeometry.indexData": (), + "QSGGeometry.indexDataAsUInt": (), + "QSGGeometry.indexDataAsUShort": (), + "QSGGeometry.indexDataPattern": (), + "QSGGeometry.indexType": (), + "QSGGeometry.lineWidth": (), + "QSGGeometry.markIndexDataDirty": (), + "QSGGeometry.markVertexDataDirty": (), + "QSGGeometry.setDrawingMode": ('int',), + "QSGGeometry.setIndexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.setLineWidth": ('float',), + "QSGGeometry.setVertexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.sizeOfIndex": (), + "QSGGeometry.sizeOfVertex": (), + "QSGGeometry.updateColoredRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateTexturedRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QSGGeometry.vertexCount": (), + "QSGGeometry.vertexData": (), + "QSGGeometry.vertexDataAsColoredPoint2D": (), + "QSGGeometry.vertexDataAsPoint2D": (), + "QSGGeometry.vertexDataAsTexturedPoint2D": (), + "QSGGeometry.vertexDataPattern": (), + + # class PySide2.QtQuick.QSGGeometryNode: + "QSGGeometryNode.__init__": (), + "QSGGeometryNode.inheritedOpacity": (), + "QSGGeometryNode.renderOrder": (), + "QSGGeometryNode.setInheritedOpacity": ('float',), + "QSGGeometryNode.setRenderOrder": ('int',), + + # class PySide2.QtQuick.QSGMaterialType: + "QSGMaterialType.__init__": (), + + # class PySide2.QtQuick.QSGNode: + "QSGNode.__init__": [(), ('PySide2.QtQuick.QSGNode.NodeType',)], + "QSGNode.appendChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.childAtIndex": ('int',), + "QSGNode.childCount": (), + "QSGNode.clearDirty": (), + "QSGNode.dirtyState": (), + "QSGNode.firstChild": (), + "QSGNode.flags": (), + "QSGNode.insertChildNodeAfter": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.insertChildNodeBefore": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.isSubtreeBlocked": (), + "QSGNode.lastChild": (), + "QSGNode.markDirty": ('PySide2.libpyside.DirtyState',), + "QSGNode.nextSibling": (), + "QSGNode.parent": (), + "QSGNode.prependChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.preprocess": (), + "QSGNode.previousSibling": (), + "QSGNode.removeAllChildNodes": (), + "QSGNode.removeChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.reparentChildNodesTo": ('PySide2.QtQuick.QSGNode',), + "QSGNode.setFlag": ('PySide2.QtQuick.QSGNode.Flag', 'bool'), + "QSGNode.setFlags": ('PySide2.libpyside.Flags', 'bool'), + "QSGNode.type": (), + + # class PySide2.QtQuick.QSGOpacityNode: + "QSGOpacityNode.__init__": (), + "QSGOpacityNode.combinedOpacity": (), + "QSGOpacityNode.isSubtreeBlocked": (), + "QSGOpacityNode.opacity": (), + "QSGOpacityNode.setCombinedOpacity": ('float',), + "QSGOpacityNode.setOpacity": ('float',), + + # class PySide2.QtQuick.QSGSimpleRectNode: + "QSGSimpleRectNode.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor')], + "QSGSimpleRectNode.color": (), + "QSGSimpleRectNode.rect": (), + "QSGSimpleRectNode.setColor": ('PySide2.QtGui.QColor',), + "QSGSimpleRectNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + + # class PySide2.QtQuick.QSGSimpleTextureNode: + "QSGSimpleTextureNode.__init__": (), + "QSGSimpleTextureNode.filtering": (), + "QSGSimpleTextureNode.ownsTexture": (), + "QSGSimpleTextureNode.rect": (), + "QSGSimpleTextureNode.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGSimpleTextureNode.setOwnsTexture": ('bool',), + "QSGSimpleTextureNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setSourceRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setTexture": ('PySide2.QtQuick.QSGTexture',), + "QSGSimpleTextureNode.setTextureCoordinatesTransform": ('PySide2.libpyside.TextureCoordinatesTransformMode',), + "QSGSimpleTextureNode.sourceRect": (), + "QSGSimpleTextureNode.texture": (), + "QSGSimpleTextureNode.textureCoordinatesTransform": (), + + # class PySide2.QtQuick.QSGTexture: + "QSGTexture.__init__": (), + "QSGTexture.anisotropyLevel": (), + "QSGTexture.bind": (), + "QSGTexture.convertToNormalizedSourceRect": ('PySide2.QtCore.QRectF',), + "QSGTexture.filtering": (), + "QSGTexture.hasAlphaChannel": (), + "QSGTexture.hasMipmaps": (), + "QSGTexture.horizontalWrapMode": (), + "QSGTexture.isAtlasTexture": (), + "QSGTexture.mipmapFiltering": (), + "QSGTexture.normalizedTextureSubRect": (), + "QSGTexture.removedFromAtlas": (), + "QSGTexture.setAnisotropyLevel": ('PySide2.QtQuick.QSGTexture.AnisotropyLevel',), + "QSGTexture.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setHorizontalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.setMipmapFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setVerticalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.textureId": (), + "QSGTexture.textureSize": (), + "QSGTexture.updateBindOptions": ('bool',), + "QSGTexture.verticalWrapMode": (), + + # class PySide2.QtQuick.QSGTextureProvider: + "QSGTextureProvider.__init__": (), + "QSGTextureProvider.texture": (), + + # class PySide2.QtQuick.QSGTransformNode: + "QSGTransformNode.__init__": (), + "QSGTransformNode.combinedMatrix": (), + "QSGTransformNode.matrix": (), + "QSGTransformNode.setCombinedMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGTransformNode.setMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSharedPointer: + "QSharedPointer.__copy__": (), + "QSharedPointer.data": (), + }) + +# Module PySide2.QtQuickWidgets +if "PySide2.QtQuickWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtQuickWidgets.QQuickWidget: + "QQuickWidget.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QQuickWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickWidget.engine": (), + "QQuickWidget.errors": (), + "QQuickWidget.event": ('PySide2.QtCore.QEvent',), + "QQuickWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.focusNextPrevChild": ('bool',), + "QQuickWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.format": (), + "QQuickWidget.grabFramebuffer": (), + "QQuickWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWidget.initialSize": (), + "QQuickWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QQuickWidget.quickWindow": (), + "QQuickWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWidget.resizeMode": (), + "QQuickWidget.rootContext": (), + "QQuickWidget.rootObject": (), + "QQuickWidget.setClearColor": ('PySide2.QtGui.QColor',), + "QQuickWidget.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QQuickWidget.setResizeMode": ('PySide2.QtQuickWidgets.QQuickWidget.ResizeMode',), + "QQuickWidget.setSource": ('PySide2.QtCore.QUrl',), + "QQuickWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWidget.sizeHint": (), + "QQuickWidget.source": (), + "QQuickWidget.status": (), + "QQuickWidget.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QQuickWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + }) + +# Module PySide2.QtScxml +if "PySide2.QtScxml" in sys.modules: + dict.update({ + + # class PySide2.QtScxml.QScxmlCompiler: + "QScxmlCompiler.__init__": ('PySide2.QtCore.QXmlStreamReader',), + "QScxmlCompiler.compile": (), + "QScxmlCompiler.errors": (), + "QScxmlCompiler.fileName": (), + "QScxmlCompiler.loader": (), + "QScxmlCompiler.setFileName": ('str',), + "QScxmlCompiler.setLoader": ('PySide2.QtScxml.QScxmlCompiler.Loader',), + + # class PySide2.QtScxml.QScxmlDynamicScxmlServiceFactory: + "QScxmlDynamicScxmlServiceFactory.__init__": ('PySide2.QtScxml.QScxmlExecutableContent.InvokeInfo', 'list', 'list', 'PySide2.QtCore.QObject'), + "QScxmlDynamicScxmlServiceFactory.invoke": ('PySide2.QtScxml.QScxmlStateMachine',), + + # class PySide2.QtScxml.QScxmlError: + "QScxmlError.__init__": [(), ('PySide2.QtScxml.QScxmlError',), ('str', 'int', 'int', 'str')], + "QScxmlError.__copy__": (), + "QScxmlError.column": (), + "QScxmlError.description": (), + "QScxmlError.fileName": (), + "QScxmlError.isValid": (), + "QScxmlError.line": (), + "QScxmlError.toString": (), + + # class PySide2.QtScxml.QScxmlEvent: + "QScxmlEvent.__init__": [(), ('PySide2.QtScxml.QScxmlEvent',)], + "QScxmlEvent.clear": (), + "QScxmlEvent.data": (), + "QScxmlEvent.delay": (), + "QScxmlEvent.errorMessage": (), + "QScxmlEvent.eventType": (), + "QScxmlEvent.invokeId": (), + "QScxmlEvent.isErrorEvent": (), + "QScxmlEvent.name": (), + "QScxmlEvent.origin": (), + "QScxmlEvent.originType": (), + "QScxmlEvent.scxmlType": (), + "QScxmlEvent.sendId": (), + "QScxmlEvent.setData": ('Any',), + "QScxmlEvent.setDelay": ('int',), + "QScxmlEvent.setErrorMessage": ('str',), + "QScxmlEvent.setEventType": ('PySide2.QtScxml.QScxmlEvent.EventType',), + "QScxmlEvent.setInvokeId": ('str',), + "QScxmlEvent.setName": ('str',), + "QScxmlEvent.setOrigin": ('str',), + "QScxmlEvent.setOriginType": ('str',), + "QScxmlEvent.setSendId": ('str',), + + # class PySide2.QtScxml.QScxmlExecutableContent: + + # class PySide2.QtScxml.QScxmlInvokableService: + "QScxmlInvokableService.__init__": ('PySide2.QtScxml.QScxmlStateMachine', 'PySide2.QtScxml.QScxmlInvokableServiceFactory'), + "QScxmlInvokableService.id": (), + "QScxmlInvokableService.name": (), + "QScxmlInvokableService.parentStateMachine": (), + "QScxmlInvokableService.postEvent": ('PySide2.QtScxml.QScxmlEvent',), + "QScxmlInvokableService.start": (), + + # class PySide2.QtScxml.QScxmlInvokableServiceFactory: + "QScxmlInvokableServiceFactory.__init__": ('PySide2.QtScxml.QScxmlExecutableContent.InvokeInfo', 'list', 'list', 'PySide2.QtCore.QObject'), + "QScxmlInvokableServiceFactory.invoke": ('PySide2.QtScxml.QScxmlStateMachine',), + "QScxmlInvokableServiceFactory.invokeInfo": (), + "QScxmlInvokableServiceFactory.names": (), + "QScxmlInvokableServiceFactory.parameters": (), + + # class PySide2.QtScxml.QScxmlStateMachine: + "QScxmlStateMachine.__init__": ('PySide2.QtCore.QMetaObject', 'PySide2.QtCore.QObject'), + "QScxmlStateMachine.activeStateNames": ('bool',), + "QScxmlStateMachine.cancelDelayedEvent": ('str',), + "QScxmlStateMachine.connectToEvent": ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), + "QScxmlStateMachine.connectToState": ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), + "QScxmlStateMachine.fromData": ('PySide2.QtCore.QIODevice', 'str'), + "QScxmlStateMachine.fromFile": ('str',), + "QScxmlStateMachine.init": (), + "QScxmlStateMachine.initialValues": (), + "QScxmlStateMachine.invokedServices": (), + "QScxmlStateMachine.isActive": [('int',), ('str',)], + "QScxmlStateMachine.isDispatchableTarget": ('str',), + "QScxmlStateMachine.isInitialized": (), + "QScxmlStateMachine.isInvoked": (), + "QScxmlStateMachine.isRunning": (), + "QScxmlStateMachine.loader": (), + "QScxmlStateMachine.name": (), + "QScxmlStateMachine.parseErrors": (), + "QScxmlStateMachine.sessionId": (), + "QScxmlStateMachine.setInitialValues": ('dict',), + "QScxmlStateMachine.setLoader": ('PySide2.QtScxml.QScxmlCompiler.Loader',), + "QScxmlStateMachine.setRunning": ('bool',), + "QScxmlStateMachine.setTableData": ('PySide2.QtScxml.QScxmlTableData',), + "QScxmlStateMachine.start": (), + "QScxmlStateMachine.stateNames": ('bool',), + "QScxmlStateMachine.stop": (), + "QScxmlStateMachine.submitEvent": [('PySide2.QtScxml.QScxmlEvent',), ('str',), ('str', 'Any')], + "QScxmlStateMachine.tableData": (), + + # class PySide2.QtScxml.QScxmlStaticScxmlServiceFactory: + "QScxmlStaticScxmlServiceFactory.__init__": ('PySide2.QtCore.QMetaObject', 'PySide2.QtScxml.QScxmlExecutableContent.InvokeInfo', 'list', 'list', 'PySide2.QtCore.QObject'), + "QScxmlStaticScxmlServiceFactory.invoke": ('PySide2.QtScxml.QScxmlStateMachine',), + + # class PySide2.QtScxml.QScxmlTableData: + "QScxmlTableData.__init__": (), + "QScxmlTableData.assignmentInfo": ('int',), + "QScxmlTableData.dataNames": ('int',), + "QScxmlTableData.evaluatorInfo": ('int',), + "QScxmlTableData.foreachInfo": ('int',), + "QScxmlTableData.initialSetup": (), + "QScxmlTableData.instructions": (), + "QScxmlTableData.name": (), + "QScxmlTableData.serviceFactory": ('int',), + "QScxmlTableData.stateMachineTable": (), + "QScxmlTableData.string": ('int',), + }) + +# Module PySide2.QtSensors +if "PySide2.QtSensors" in sys.modules: + dict.update({ + + # class PySide2.QtSensors.QAccelerometer: + "QAccelerometer.__init__": ('PySide2.QtCore.QObject',), + "QAccelerometer.accelerationMode": (), + "QAccelerometer.reading": (), + "QAccelerometer.setAccelerationMode": ('PySide2.QtSensors.QAccelerometer.AccelerationMode',), + + # class PySide2.QtSensors.QAccelerometerFilter: + "QAccelerometerFilter.__init__": (), + "QAccelerometerFilter.filter": [('PySide2.QtSensors.QAccelerometerReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QAccelerometerReading: + "QAccelerometerReading.__init__": ('PySide2.QtCore.QObject',), + "QAccelerometerReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QAccelerometerReading.setX": ('float',), + "QAccelerometerReading.setY": ('float',), + "QAccelerometerReading.setZ": ('float',), + "QAccelerometerReading.x": (), + "QAccelerometerReading.y": (), + "QAccelerometerReading.z": (), + + # class PySide2.QtSensors.QAltimeter: + "QAltimeter.__init__": ('PySide2.QtCore.QObject',), + "QAltimeter.reading": (), + + # class PySide2.QtSensors.QAltimeterFilter: + "QAltimeterFilter.__init__": (), + "QAltimeterFilter.filter": [('PySide2.QtSensors.QAltimeterReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QAltimeterReading: + "QAltimeterReading.__init__": ('PySide2.QtCore.QObject',), + "QAltimeterReading.altitude": (), + "QAltimeterReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QAltimeterReading.setAltitude": ('float',), + + # class PySide2.QtSensors.QAmbientLightFilter: + "QAmbientLightFilter.__init__": (), + "QAmbientLightFilter.filter": [('PySide2.QtSensors.QAmbientLightReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QAmbientLightReading: + "QAmbientLightReading.__init__": ('PySide2.QtCore.QObject',), + "QAmbientLightReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QAmbientLightReading.lightLevel": (), + "QAmbientLightReading.setLightLevel": ('PySide2.QtSensors.QAmbientLightReading.LightLevel',), + + # class PySide2.QtSensors.QAmbientLightSensor: + "QAmbientLightSensor.__init__": ('PySide2.QtCore.QObject',), + "QAmbientLightSensor.reading": (), + + # class PySide2.QtSensors.QAmbientTemperatureFilter: + "QAmbientTemperatureFilter.__init__": (), + "QAmbientTemperatureFilter.filter": [('PySide2.QtSensors.QAmbientTemperatureReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QAmbientTemperatureReading: + "QAmbientTemperatureReading.__init__": ('PySide2.QtCore.QObject',), + "QAmbientTemperatureReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QAmbientTemperatureReading.setTemperature": ('float',), + "QAmbientTemperatureReading.temperature": (), + + # class PySide2.QtSensors.QAmbientTemperatureSensor: + "QAmbientTemperatureSensor.__init__": ('PySide2.QtCore.QObject',), + "QAmbientTemperatureSensor.reading": (), + + # class PySide2.QtSensors.QCompass: + "QCompass.__init__": ('PySide2.QtCore.QObject',), + "QCompass.reading": (), + + # class PySide2.QtSensors.QCompassFilter: + "QCompassFilter.__init__": (), + "QCompassFilter.filter": [('PySide2.QtSensors.QCompassReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QCompassReading: + "QCompassReading.__init__": ('PySide2.QtCore.QObject',), + "QCompassReading.azimuth": (), + "QCompassReading.calibrationLevel": (), + "QCompassReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QCompassReading.setAzimuth": ('float',), + "QCompassReading.setCalibrationLevel": ('float',), + + # class PySide2.QtSensors.QDistanceFilter: + "QDistanceFilter.__init__": (), + "QDistanceFilter.filter": [('PySide2.QtSensors.QDistanceReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QDistanceReading: + "QDistanceReading.__init__": ('PySide2.QtCore.QObject',), + "QDistanceReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QDistanceReading.distance": (), + "QDistanceReading.setDistance": ('float',), + + # class PySide2.QtSensors.QDistanceSensor: + "QDistanceSensor.__init__": ('PySide2.QtCore.QObject',), + "QDistanceSensor.reading": (), + + # class PySide2.QtSensors.QGyroscope: + "QGyroscope.__init__": ('PySide2.QtCore.QObject',), + "QGyroscope.reading": (), + + # class PySide2.QtSensors.QGyroscopeFilter: + "QGyroscopeFilter.__init__": (), + "QGyroscopeFilter.filter": [('PySide2.QtSensors.QGyroscopeReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QGyroscopeReading: + "QGyroscopeReading.__init__": ('PySide2.QtCore.QObject',), + "QGyroscopeReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QGyroscopeReading.setX": ('float',), + "QGyroscopeReading.setY": ('float',), + "QGyroscopeReading.setZ": ('float',), + "QGyroscopeReading.x": (), + "QGyroscopeReading.y": (), + "QGyroscopeReading.z": (), + + # class PySide2.QtSensors.QHolsterFilter: + "QHolsterFilter.__init__": (), + "QHolsterFilter.filter": [('PySide2.QtSensors.QHolsterReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QHolsterReading: + "QHolsterReading.__init__": ('PySide2.QtCore.QObject',), + "QHolsterReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QHolsterReading.holstered": (), + "QHolsterReading.setHolstered": ('bool',), + + # class PySide2.QtSensors.QHolsterSensor: + "QHolsterSensor.__init__": ('PySide2.QtCore.QObject',), + "QHolsterSensor.reading": (), + + # class PySide2.QtSensors.QHumidityFilter: + "QHumidityFilter.__init__": (), + "QHumidityFilter.filter": [('PySide2.QtSensors.QHumidityReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QHumidityReading: + "QHumidityReading.__init__": ('PySide2.QtCore.QObject',), + "QHumidityReading.absoluteHumidity": (), + "QHumidityReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QHumidityReading.relativeHumidity": (), + "QHumidityReading.setAbsoluteHumidity": ('float',), + "QHumidityReading.setRelativeHumidity": ('float',), + + # class PySide2.QtSensors.QHumiditySensor: + "QHumiditySensor.__init__": ('PySide2.QtCore.QObject',), + "QHumiditySensor.reading": (), + + # class PySide2.QtSensors.QIRProximityFilter: + "QIRProximityFilter.__init__": (), + "QIRProximityFilter.filter": [('PySide2.QtSensors.QIRProximityReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QIRProximityReading: + "QIRProximityReading.__init__": ('PySide2.QtCore.QObject',), + "QIRProximityReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QIRProximityReading.reflectance": (), + "QIRProximityReading.setReflectance": ('float',), + + # class PySide2.QtSensors.QIRProximitySensor: + "QIRProximitySensor.__init__": ('PySide2.QtCore.QObject',), + "QIRProximitySensor.reading": (), + + # class PySide2.QtSensors.QLidFilter: + "QLidFilter.__init__": (), + "QLidFilter.filter": [('PySide2.QtSensors.QLidReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QLidReading: + "QLidReading.__init__": ('PySide2.QtCore.QObject',), + "QLidReading.backLidClosed": (), + "QLidReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QLidReading.frontLidClosed": (), + "QLidReading.setBackLidClosed": ('bool',), + "QLidReading.setFrontLidClosed": ('bool',), + + # class PySide2.QtSensors.QLidSensor: + "QLidSensor.__init__": ('PySide2.QtCore.QObject',), + "QLidSensor.reading": (), + + # class PySide2.QtSensors.QLightFilter: + "QLightFilter.__init__": (), + "QLightFilter.filter": [('PySide2.QtSensors.QLightReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QLightReading: + "QLightReading.__init__": ('PySide2.QtCore.QObject',), + "QLightReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QLightReading.lux": (), + "QLightReading.setLux": ('float',), + + # class PySide2.QtSensors.QLightSensor: + "QLightSensor.__init__": ('PySide2.QtCore.QObject',), + "QLightSensor.fieldOfView": (), + "QLightSensor.reading": (), + "QLightSensor.setFieldOfView": ('float',), + + # class PySide2.QtSensors.QMagnetometer: + "QMagnetometer.__init__": ('PySide2.QtCore.QObject',), + "QMagnetometer.reading": (), + "QMagnetometer.returnGeoValues": (), + "QMagnetometer.setReturnGeoValues": ('bool',), + + # class PySide2.QtSensors.QMagnetometerFilter: + "QMagnetometerFilter.__init__": (), + "QMagnetometerFilter.filter": [('PySide2.QtSensors.QMagnetometerReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QMagnetometerReading: + "QMagnetometerReading.__init__": ('PySide2.QtCore.QObject',), + "QMagnetometerReading.calibrationLevel": (), + "QMagnetometerReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QMagnetometerReading.setCalibrationLevel": ('float',), + "QMagnetometerReading.setX": ('float',), + "QMagnetometerReading.setY": ('float',), + "QMagnetometerReading.setZ": ('float',), + "QMagnetometerReading.x": (), + "QMagnetometerReading.y": (), + "QMagnetometerReading.z": (), + + # class PySide2.QtSensors.QOrientationFilter: + "QOrientationFilter.__init__": (), + "QOrientationFilter.filter": [('PySide2.QtSensors.QOrientationReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QOrientationReading: + "QOrientationReading.__init__": ('PySide2.QtCore.QObject',), + "QOrientationReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QOrientationReading.orientation": (), + "QOrientationReading.setOrientation": ('PySide2.QtSensors.QOrientationReading.Orientation',), + + # class PySide2.QtSensors.QOrientationSensor: + "QOrientationSensor.__init__": ('PySide2.QtCore.QObject',), + "QOrientationSensor.reading": (), + + # class PySide2.QtSensors.QPressureFilter: + "QPressureFilter.__init__": (), + "QPressureFilter.filter": [('PySide2.QtSensors.QPressureReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QPressureReading: + "QPressureReading.__init__": ('PySide2.QtCore.QObject',), + "QPressureReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QPressureReading.pressure": (), + "QPressureReading.setPressure": ('float',), + "QPressureReading.setTemperature": ('float',), + "QPressureReading.temperature": (), + + # class PySide2.QtSensors.QPressureSensor: + "QPressureSensor.__init__": ('PySide2.QtCore.QObject',), + "QPressureSensor.reading": (), + + # class PySide2.QtSensors.QProximityFilter: + "QProximityFilter.__init__": (), + "QProximityFilter.filter": [('PySide2.QtSensors.QProximityReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QProximityReading: + "QProximityReading.__init__": ('PySide2.QtCore.QObject',), + "QProximityReading.close": (), + "QProximityReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QProximityReading.setClose": ('bool',), + + # class PySide2.QtSensors.QProximitySensor: + "QProximitySensor.__init__": ('PySide2.QtCore.QObject',), + "QProximitySensor.reading": (), + + # class PySide2.QtSensors.QRotationFilter: + "QRotationFilter.__init__": (), + "QRotationFilter.filter": [('PySide2.QtSensors.QRotationReading',), ('PySide2.QtSensors.QSensorReading',)], + + # class PySide2.QtSensors.QRotationReading: + "QRotationReading.__init__": ('PySide2.QtCore.QObject',), + "QRotationReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QRotationReading.setFromEuler": ('float', 'float', 'float'), + "QRotationReading.x": (), + "QRotationReading.y": (), + "QRotationReading.z": (), + + # class PySide2.QtSensors.QRotationSensor: + "QRotationSensor.__init__": ('PySide2.QtCore.QObject',), + "QRotationSensor.hasZ": (), + "QRotationSensor.reading": (), + "QRotationSensor.setHasZ": ('bool',), + + # class PySide2.QtSensors.QSensor: + "QSensor.__init__": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), + "QSensor.addFilter": ('PySide2.QtSensors.QSensorFilter',), + "QSensor.availableDataRates": (), + "QSensor.axesOrientationMode": (), + "QSensor.backend": (), + "QSensor.bufferSize": (), + "QSensor.connectToBackend": (), + "QSensor.currentOrientation": (), + "QSensor.dataRate": (), + "QSensor.defaultSensorForType": ('PySide2.QtCore.QByteArray',), + "QSensor.description": (), + "QSensor.efficientBufferSize": (), + "QSensor.error": (), + "QSensor.filters": (), + "QSensor.identifier": (), + "QSensor.isActive": (), + "QSensor.isAlwaysOn": (), + "QSensor.isBusy": (), + "QSensor.isConnectedToBackend": (), + "QSensor.isFeatureSupported": ('PySide2.QtSensors.QSensor.Feature',), + "QSensor.maxBufferSize": (), + "QSensor.outputRange": (), + "QSensor.outputRanges": (), + "QSensor.reading": (), + "QSensor.removeFilter": ('PySide2.QtSensors.QSensorFilter',), + "QSensor.sensorTypes": (), + "QSensor.sensorsForType": ('PySide2.QtCore.QByteArray',), + "QSensor.setActive": ('bool',), + "QSensor.setAlwaysOn": ('bool',), + "QSensor.setAxesOrientationMode": ('PySide2.QtSensors.QSensor.AxesOrientationMode',), + "QSensor.setBufferSize": ('int',), + "QSensor.setCurrentOrientation": ('int',), + "QSensor.setDataRate": ('int',), + "QSensor.setEfficientBufferSize": ('int',), + "QSensor.setIdentifier": ('PySide2.QtCore.QByteArray',), + "QSensor.setMaxBufferSize": ('int',), + "QSensor.setOutputRange": ('int',), + "QSensor.setSkipDuplicates": ('bool',), + "QSensor.setUserOrientation": ('int',), + "QSensor.skipDuplicates": (), + "QSensor.start": (), + "QSensor.stop": (), + "QSensor.type": (), + "QSensor.userOrientation": (), + + # class PySide2.QtSensors.QSensorBackend: + "QSensorBackend.__init__": ('PySide2.QtSensors.QSensor', 'PySide2.QtCore.QObject'), + "QSensorBackend.addDataRate": ('float', 'float'), + "QSensorBackend.addOutputRange": ('float', 'float', 'float'), + "QSensorBackend.isFeatureSupported": ('PySide2.QtSensors.QSensor.Feature',), + "QSensorBackend.newReadingAvailable": (), + "QSensorBackend.reading": (), + "QSensorBackend.sensor": (), + "QSensorBackend.sensorBusy": (), + "QSensorBackend.sensorError": ('int',), + "QSensorBackend.sensorStopped": (), + "QSensorBackend.setDataRates": ('PySide2.QtSensors.QSensor',), + "QSensorBackend.setDescription": ('str',), + "QSensorBackend.start": (), + "QSensorBackend.stop": (), + + # class PySide2.QtSensors.QSensorBackendFactory: + "QSensorBackendFactory.__init__": (), + "QSensorBackendFactory.createBackend": ('PySide2.QtSensors.QSensor',), + + # class PySide2.QtSensors.QSensorChangesInterface: + "QSensorChangesInterface.__init__": (), + "QSensorChangesInterface.sensorsChanged": (), + + # class PySide2.QtSensors.QSensorFilter: + "QSensorFilter.__init__": (), + "QSensorFilter.filter": ('PySide2.QtSensors.QSensorReading',), + "QSensorFilter.setSensor": ('PySide2.QtSensors.QSensor',), + + # class PySide2.QtSensors.QSensorGestureManager: + "QSensorGestureManager.__init__": ('PySide2.QtCore.QObject',), + "QSensorGestureManager.gestureIds": (), + "QSensorGestureManager.recognizerSignals": ('str',), + "QSensorGestureManager.registerSensorGestureRecognizer": ('PySide2.QtSensors.QSensorGestureRecognizer',), + "QSensorGestureManager.sensorGestureRecognizer": ('str',), + + # class PySide2.QtSensors.QSensorGesturePluginInterface: + "QSensorGesturePluginInterface.__init__": (), + "QSensorGesturePluginInterface.createRecognizers": (), + "QSensorGesturePluginInterface.name": (), + "QSensorGesturePluginInterface.supportedIds": (), + + # class PySide2.QtSensors.QSensorGestureRecognizer: + "QSensorGestureRecognizer.__init__": ('PySide2.QtCore.QObject',), + "QSensorGestureRecognizer.create": (), + "QSensorGestureRecognizer.createBackend": (), + "QSensorGestureRecognizer.gestureSignals": (), + "QSensorGestureRecognizer.id": (), + "QSensorGestureRecognizer.isActive": (), + "QSensorGestureRecognizer.start": (), + "QSensorGestureRecognizer.startBackend": (), + "QSensorGestureRecognizer.stop": (), + "QSensorGestureRecognizer.stopBackend": (), + + # class PySide2.QtSensors.QSensorManager: + "QSensorManager.__init__": (), + "QSensorManager.createBackend": ('PySide2.QtSensors.QSensor',), + "QSensorManager.isBackendRegistered": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QSensorManager.registerBackend": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'PySide2.QtSensors.QSensorBackendFactory'), + "QSensorManager.setDefaultBackend": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QSensorManager.unregisterBackend": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + + # class PySide2.QtSensors.QSensorPluginInterface: + "QSensorPluginInterface.__init__": (), + "QSensorPluginInterface.registerSensors": (), + + # class PySide2.QtSensors.QSensorReading: + "QSensorReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QSensorReading.setTimestamp": ('int',), + "QSensorReading.timestamp": (), + "QSensorReading.value": ('int',), + "QSensorReading.valueCount": (), + + # class PySide2.QtSensors.QTapFilter: + "QTapFilter.__init__": (), + "QTapFilter.filter": [('PySide2.QtSensors.QSensorReading',), ('PySide2.QtSensors.QTapReading',)], + + # class PySide2.QtSensors.QTapReading: + "QTapReading.__init__": ('PySide2.QtCore.QObject',), + "QTapReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QTapReading.isDoubleTap": (), + "QTapReading.setDoubleTap": ('bool',), + "QTapReading.setTapDirection": ('PySide2.QtSensors.QTapReading.TapDirection',), + "QTapReading.tapDirection": (), + + # class PySide2.QtSensors.QTapSensor: + "QTapSensor.__init__": ('PySide2.QtCore.QObject',), + "QTapSensor.reading": (), + "QTapSensor.returnDoubleTapEvents": (), + "QTapSensor.setReturnDoubleTapEvents": ('bool',), + + # class PySide2.QtSensors.QTiltFilter: + "QTiltFilter.__init__": (), + "QTiltFilter.filter": [('PySide2.QtSensors.QSensorReading',), ('PySide2.QtSensors.QTiltReading',)], + + # class PySide2.QtSensors.QTiltReading: + "QTiltReading.__init__": ('PySide2.QtCore.QObject',), + "QTiltReading.copyValuesFrom": ('PySide2.QtSensors.QSensorReading',), + "QTiltReading.setXRotation": ('float',), + "QTiltReading.setYRotation": ('float',), + "QTiltReading.xRotation": (), + "QTiltReading.yRotation": (), + + # class PySide2.QtSensors.QTiltSensor: + "QTiltSensor.__init__": ('PySide2.QtCore.QObject',), + "QTiltSensor.calibrate": (), + "QTiltSensor.reading": (), + + # class PySide2.QtSensors.qoutputrange: + "qoutputrange.__init__": [(), ('PySide2.QtSensors.qoutputrange',)], + "qoutputrange.__copy__": (), + }) + +# Module PySide2.QtTextToSpeech +if "PySide2.QtTextToSpeech" in sys.modules: + dict.update({ + + # class PySide2.QtTextToSpeech.QTextToSpeech: + "QTextToSpeech.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextToSpeech.availableEngines": (), + "QTextToSpeech.availableLocales": (), + "QTextToSpeech.availableVoices": (), + "QTextToSpeech.locale": (), + "QTextToSpeech.pause": (), + "QTextToSpeech.pitch": (), + "QTextToSpeech.rate": (), + "QTextToSpeech.resume": (), + "QTextToSpeech.say": ('str',), + "QTextToSpeech.setLocale": ('PySide2.QtCore.QLocale',), + "QTextToSpeech.setPitch": ('float',), + "QTextToSpeech.setRate": ('float',), + "QTextToSpeech.setVoice": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeech.setVolume": ('float',), + "QTextToSpeech.state": (), + "QTextToSpeech.stop": (), + "QTextToSpeech.voice": (), + "QTextToSpeech.volume": (), + + # class PySide2.QtTextToSpeech.QTextToSpeechEngine: + "QTextToSpeechEngine.__init__": ('PySide2.QtCore.QObject',), + "QTextToSpeechEngine.availableLocales": (), + "QTextToSpeechEngine.availableVoices": (), + "QTextToSpeechEngine.createVoice": ('str', 'PySide2.QtTextToSpeech.QVoice.Gender', 'PySide2.QtTextToSpeech.QVoice.Age', 'Any'), + "QTextToSpeechEngine.locale": (), + "QTextToSpeechEngine.pause": (), + "QTextToSpeechEngine.pitch": (), + "QTextToSpeechEngine.rate": (), + "QTextToSpeechEngine.resume": (), + "QTextToSpeechEngine.say": ('str',), + "QTextToSpeechEngine.setLocale": ('PySide2.QtCore.QLocale',), + "QTextToSpeechEngine.setPitch": ('float',), + "QTextToSpeechEngine.setRate": ('float',), + "QTextToSpeechEngine.setVoice": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeechEngine.setVolume": ('float',), + "QTextToSpeechEngine.state": (), + "QTextToSpeechEngine.stop": (), + "QTextToSpeechEngine.voice": (), + "QTextToSpeechEngine.voiceData": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeechEngine.volume": (), + + # class PySide2.QtTextToSpeech.QVoice: + "QVoice.__init__": [(), ('PySide2.QtTextToSpeech.QVoice',)], + "QVoice.__copy__": (), + "QVoice.age": (), + "QVoice.ageName": ('PySide2.QtTextToSpeech.QVoice.Age',), + "QVoice.gender": (), + "QVoice.genderName": ('PySide2.QtTextToSpeech.QVoice.Gender',), + "QVoice.name": (), + }) + +# Module PySide2.QtCharts +if "PySide2.QtCharts" in sys.modules: + dict.update({ + + # class PySide2.QtCharts.QtCharts: + }) + +# Module PySide2.QtSvg +if "PySide2.QtSvg" in sys.modules: + dict.update({ + + # class PySide2.QtSvg.QGraphicsSvgItem: + "QGraphicsSvgItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSvgItem.boundingRect": (), + "QGraphicsSvgItem.elementId": (), + "QGraphicsSvgItem.isCachingEnabled": (), + "QGraphicsSvgItem.maximumCacheSize": (), + "QGraphicsSvgItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSvgItem.renderer": (), + "QGraphicsSvgItem.setCachingEnabled": ('bool',), + "QGraphicsSvgItem.setElementId": ('str',), + "QGraphicsSvgItem.setMaximumCacheSize": ('PySide2.QtCore.QSize',), + "QGraphicsSvgItem.setSharedRenderer": ('PySide2.QtSvg.QSvgRenderer',), + "QGraphicsSvgItem.type": (), + + # class PySide2.QtSvg.QSvgGenerator: + "QSvgGenerator.__init__": (), + "QSvgGenerator.description": (), + "QSvgGenerator.fileName": (), + "QSvgGenerator.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QSvgGenerator.outputDevice": (), + "QSvgGenerator.paintEngine": (), + "QSvgGenerator.resolution": (), + "QSvgGenerator.setDescription": ('str',), + "QSvgGenerator.setFileName": ('str',), + "QSvgGenerator.setOutputDevice": ('PySide2.QtCore.QIODevice',), + "QSvgGenerator.setResolution": ('int',), + "QSvgGenerator.setSize": ('PySide2.QtCore.QSize',), + "QSvgGenerator.setTitle": ('str',), + "QSvgGenerator.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgGenerator.size": (), + "QSvgGenerator.title": (), + "QSvgGenerator.viewBox": (), + "QSvgGenerator.viewBoxF": (), + + # class PySide2.QtSvg.QSvgRenderer: + "QSvgRenderer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QXmlStreamReader', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QSvgRenderer.animated": (), + "QSvgRenderer.animationDuration": (), + "QSvgRenderer.boundsOnElement": ('str',), + "QSvgRenderer.currentFrame": (), + "QSvgRenderer.defaultSize": (), + "QSvgRenderer.elementExists": ('str',), + "QSvgRenderer.framesPerSecond": (), + "QSvgRenderer.isValid": (), + "QSvgRenderer.load": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QXmlStreamReader',), ('str',)], + "QSvgRenderer.matrixForElement": ('str',), + "QSvgRenderer.render": [('PySide2.QtGui.QPainter',), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), ('PySide2.QtGui.QPainter', 'str', 'PySide2.QtCore.QRectF')], + "QSvgRenderer.setCurrentFrame": ('int',), + "QSvgRenderer.setFramesPerSecond": ('int',), + "QSvgRenderer.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgRenderer.viewBox": (), + "QSvgRenderer.viewBoxF": (), + + # class PySide2.QtSvg.QSvgWidget: + "QSvgWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QSvgWidget.load": [('PySide2.QtCore.QByteArray',), ('str',)], + "QSvgWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSvgWidget.renderer": (), + "QSvgWidget.sizeHint": (), + }) + +# Module PySide2.QtDataVisualization +if "PySide2.QtDataVisualization" in sys.modules: + dict.update({ + + # class PySide2.QtDataVisualization.QtDataVisualization: + "QtDataVisualization.qDefaultSurfaceFormat": ('bool',), + }) + +# Module PySide2.QtUiTools +if "PySide2.QtUiTools" in sys.modules: + dict.update({ + + # class PySide2.QtUiTools.QUiLoader: + "QUiLoader.__init__": ('PySide2.QtCore.QObject',), + "QUiLoader.addPluginPath": ('str',), + "QUiLoader.availableLayouts": (), + "QUiLoader.availableWidgets": (), + "QUiLoader.clearPluginPaths": (), + "QUiLoader.createAction": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createActionGroup": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createLayout": ('str', 'PySide2.QtCore.QObject', 'str'), + "QUiLoader.createWidget": ('str', 'PySide2.QtWidgets.QWidget', 'str'), + "QUiLoader.errorString": (), + "QUiLoader.isLanguageChangeEnabled": (), + "QUiLoader.isTranslationEnabled": (), + "QUiLoader.load": [('PySide2.QtCore.QIODevice', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QWidget')], + "QUiLoader.pluginPaths": (), + "QUiLoader.registerCustomWidget": ('object',), + "QUiLoader.setLanguageChangeEnabled": ('bool',), + "QUiLoader.setTranslationEnabled": ('bool',), + "QUiLoader.setWorkingDirectory": ('PySide2.QtCore.QDir',), + "QUiLoader.workingDirectory": (), + }) + +# Module PySide2.QtAxContainer +if "PySide2.QtAxContainer" in sys.modules: + dict.update({ + + # class PySide2.QtAxContainer.QAxBase: + "QAxBase.__init__": (), + "QAxBase.argumentsToList": ('Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any'), + "QAxBase.asVariant": (), + "QAxBase.className": (), + "QAxBase.clear": (), + "QAxBase.control": (), + "QAxBase.disableClassInfo": (), + "QAxBase.disableEventSink": (), + "QAxBase.disableMetaObject": (), + "QAxBase.dynamicCall": [('str', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any'), ('str', 'list'), ('str', 'list', 'int')], + "QAxBase.fallbackMetaObject": (), + "QAxBase.generateDocumentation": (), + "QAxBase.indexOfVerb": ('str',), + "QAxBase.initializeFrom": ('PySide2.QtAxContainer.QAxBase',), + "QAxBase.internalRelease": (), + "QAxBase.isNull": (), + "QAxBase.propertyBag": (), + "QAxBase.propertyWritable": ('str',), + "QAxBase.qObject": (), + "QAxBase.querySubObject": [('str', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any'), ('str', 'list')], + "QAxBase.setControl": ('str',), + "QAxBase.setPropertyBag": ('dict',), + "QAxBase.setPropertyWritable": ('str', 'bool'), + "QAxBase.verbs": (), + + # class PySide2.QtAxContainer.QAxObject: + "QAxObject.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QAxObject.className": (), + "QAxObject.doVerb": ('str',), + "QAxObject.fallbackMetaObject": (), + "QAxObject.qObject": (), + + # class PySide2.QtAxContainer.QAxScript: + "QAxScript.__init__": ('str', 'PySide2.QtAxContainer.QAxScriptManager'), + "QAxScript.call": [('str', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any'), ('str', 'list')], + "QAxScript.functions": ('PySide2.QtAxContainer.QAxScript.FunctionFlags',), + "QAxScript.load": ('str', 'str'), + "QAxScript.scriptCode": (), + "QAxScript.scriptEngine": (), + "QAxScript.scriptName": (), + + # class PySide2.QtAxContainer.QAxScriptEngine: + "QAxScriptEngine.__init__": ('str', 'PySide2.QtAxContainer.QAxScript'), + "QAxScriptEngine.addItem": ('str',), + "QAxScriptEngine.hasIntrospection": (), + "QAxScriptEngine.isValid": (), + "QAxScriptEngine.scriptLanguage": (), + + # class PySide2.QtAxContainer.QAxScriptManager: + "QAxScriptManager.__init__": ('PySide2.QtCore.QObject',), + "QAxScriptManager.addObject": ('PySide2.QtAxContainer.QAxBase',), + "QAxScriptManager.call": [('str', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any'), ('str', 'list')], + "QAxScriptManager.functions": ('PySide2.QtAxContainer.QAxScript.FunctionFlags',), + "QAxScriptManager.load": [('str', 'str'), ('str', 'str', 'str')], + "QAxScriptManager.registerEngine": ('str', 'str', 'str'), + "QAxScriptManager.script": ('str',), + "QAxScriptManager.scriptFileFilter": (), + "QAxScriptManager.scriptNames": (), + + # class PySide2.QtAxContainer.QAxSelect: + "QAxSelect.__init__": ('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), + "QAxSelect.clsid": (), + + # class PySide2.QtAxContainer.QAxWidget: + "QAxWidget.__init__": [('PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'PySide2.libpyside.WindowFlags')], + "QAxWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QAxWidget.className": (), + "QAxWidget.clear": (), + "QAxWidget.createHostWindow": [('bool',), ('bool', 'PySide2.QtCore.QByteArray')], + "QAxWidget.doVerb": ('str',), + "QAxWidget.fallbackMetaObject": (), + "QAxWidget.minimumSizeHint": (), + "QAxWidget.qObject": (), + "QAxWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAxWidget.sizeHint": (), + "QAxWidget.translateKeyEvent": ('int', 'int'), + }) + +# Module PySide2.QtWebChannel +if "PySide2.QtWebChannel" in sys.modules: + dict.update({ + + # class PySide2.QtWebChannel.QWebChannel: + "QWebChannel.__init__": ('PySide2.QtCore.QObject',), + "QWebChannel.blockUpdates": (), + "QWebChannel.connectTo": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.deregisterObject": ('PySide2.QtCore.QObject',), + "QWebChannel.disconnectFrom": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.registerObject": ('str', 'PySide2.QtCore.QObject'), + "QWebChannel.registerObjects": ('dict',), + "QWebChannel.registeredObjects": (), + "QWebChannel.setBlockUpdates": ('bool',), + + # class PySide2.QtWebChannel.QWebChannelAbstractTransport: + "QWebChannelAbstractTransport.__init__": ('PySide2.QtCore.QObject',), + "QWebChannelAbstractTransport.sendMessage": ('dict',), + }) + +# Module PySide2.QtWebSockets +if "PySide2.QtWebSockets" in sys.modules: + dict.update({ + + # class PySide2.QtWebSockets.QMaskGenerator: + "QMaskGenerator.__init__": ('PySide2.QtCore.QObject',), + "QMaskGenerator.nextMask": (), + "QMaskGenerator.seed": (), + + # class PySide2.QtWebSockets.QWebSocket: + "QWebSocket.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketProtocol.Version', 'PySide2.QtCore.QObject'), + "QWebSocket.abort": (), + "QWebSocket.close": ('PySide2.QtWebSockets.QWebSocketProtocol.CloseCode', 'str'), + "QWebSocket.closeCode": (), + "QWebSocket.closeReason": (), + "QWebSocket.errorString": (), + "QWebSocket.flush": (), + "QWebSocket.isValid": (), + "QWebSocket.localAddress": (), + "QWebSocket.localPort": (), + "QWebSocket.maskGenerator": (), + "QWebSocket.open": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QWebSocket.origin": (), + "QWebSocket.pauseMode": (), + "QWebSocket.peerAddress": (), + "QWebSocket.peerName": (), + "QWebSocket.peerPort": (), + "QWebSocket.ping": ('PySide2.QtCore.QByteArray',), + "QWebSocket.proxy": (), + "QWebSocket.readBufferSize": (), + "QWebSocket.request": (), + "QWebSocket.requestUrl": (), + "QWebSocket.resourceName": (), + "QWebSocket.resume": (), + "QWebSocket.sendBinaryMessage": ('PySide2.QtCore.QByteArray',), + "QWebSocket.sendTextMessage": ('str',), + "QWebSocket.setMaskGenerator": ('PySide2.QtWebSockets.QMaskGenerator',), + "QWebSocket.setPauseMode": ('PySide2.libpyside.PauseModes',), + "QWebSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocket.setReadBufferSize": ('int',), + "QWebSocket.state": (), + "QWebSocket.version": (), + + # class PySide2.QtWebSockets.QWebSocketCorsAuthenticator: + "QWebSocketCorsAuthenticator.__init__": [('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), ('str',)], + "QWebSocketCorsAuthenticator.allowed": (), + "QWebSocketCorsAuthenticator.origin": (), + "QWebSocketCorsAuthenticator.setAllowed": ('bool',), + "QWebSocketCorsAuthenticator.swap": ('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), + + # class PySide2.QtWebSockets.QWebSocketProtocol: + + # class PySide2.QtWebSockets.QWebSocketServer: + "QWebSocketServer.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketServer.SslMode', 'PySide2.QtCore.QObject'), + "QWebSocketServer.close": (), + "QWebSocketServer.error": (), + "QWebSocketServer.errorString": (), + "QWebSocketServer.handleConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QWebSocketServer.hasPendingConnections": (), + "QWebSocketServer.isListening": (), + "QWebSocketServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QWebSocketServer.maxPendingConnections": (), + "QWebSocketServer.nextPendingConnection": (), + "QWebSocketServer.pauseAccepting": (), + "QWebSocketServer.proxy": (), + "QWebSocketServer.resumeAccepting": (), + "QWebSocketServer.secureMode": (), + "QWebSocketServer.serverAddress": (), + "QWebSocketServer.serverName": (), + "QWebSocketServer.serverPort": (), + "QWebSocketServer.serverUrl": (), + "QWebSocketServer.setMaxPendingConnections": ('int',), + "QWebSocketServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocketServer.setServerName": ('str',), + "QWebSocketServer.setSocketDescriptor": ('int',), + "QWebSocketServer.socketDescriptor": (), + "QWebSocketServer.supportedVersions": (), + }) + +# Module PySide2.Qt3DCore +if "PySide2.Qt3DCore" in sys.modules: + dict.update({ + + # class PySide2.Qt3DCore.Qt3DCore: + "Qt3DCore.QTransform": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float', 'float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "Qt3DCore.qHash": ('PySide2.Qt3DCore.Qt3DCore.QNodeId', 'int'), + "Qt3DCore.qIdForNode": ('PySide2.Qt3DCore.Qt3DCore.QNode',), + }) + +# Module PySide2.Qt3DRender +if "PySide2.Qt3DRender" in sys.modules: + dict.update({ + + # class PySide2.Qt3DRender.Qt3DRender: + "Qt3DRender.QBuffer": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "Qt3DRender.QCamera": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtMultimedia.QCamera.Position', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QCameraInfo', 'PySide2.QtCore.QObject')], + "Qt3DRender.QProximityFilter": (), + }) + +# Module PySide2.Qt3DInput +if "PySide2.Qt3DInput" in sys.modules: + dict.update({ + + # class PySide2.Qt3DInput.Qt3DInput: + "Qt3DInput.QAction": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "Qt3DInput.QKeyEvent": [('PySide2.QtCore.QEvent.Type', 'int', 'PySide2.libpyside.KeyboardModifiers', 'int', 'int', 'int', 'str', 'bool', 'int'), ('PySide2.QtCore.QEvent.Type', 'int', 'PySide2.libpyside.KeyboardModifiers', 'str', 'bool', 'int')], + "Qt3DInput.QMouseEvent": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers')], + "Qt3DInput.QWheelEvent": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource', 'bool'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.libpyside.MouseButtons', 'PySide2.libpyside.KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation')], + }) + +# Module PySide2.Qt3DLogic +if "PySide2.Qt3DLogic" in sys.modules: + dict.update({ + + # class PySide2.Qt3DLogic.Qt3DLogic: + }) + +# Module PySide2.Qt3DAnimation +if "PySide2.Qt3DAnimation" in sys.modules: + dict.update({ + + # class PySide2.Qt3DAnimation.Qt3DAnimation: + "Qt3DAnimation.QAbstractAnimation": ('PySide2.QtCore.QObject',), + "Qt3DAnimation.QAnimationGroup": ('PySide2.QtCore.QObject',), + }) + +# Module PySide2.Qt3DExtras +if "PySide2.Qt3DExtras" in sys.modules: + dict.update({ + + # class PySide2.Qt3DExtras.Qt3DExtras: + }) +# eof diff --git a/sources/pyside2/tests/registry/exists_win32_5_6_4_ci.py b/sources/pyside2/tests/registry/exists_win32_5_6_4_ci.py new file mode 100644 index 0000000..3b4c744 --- /dev/null +++ b/sources/pyside2/tests/registry/exists_win32_5_6_4_ci.py @@ -0,0 +1,15672 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys + +dict = {} + +# Module PySide2.QtCore +if "PySide2.QtCore" in sys.modules: + dict.update({ + + # class PySide2.QtCore.ClassInfo: + + # class PySide2.QtCore.Connection: + "Connection.__init__": [(), ('PySide2.QtCore.Connection',)], + + # class PySide2.QtCore.MetaFunction: + + # class PySide2.QtCore.Property: + + # class PySide2.QtCore.QAbstractAnimation: + "QAbstractAnimation.__init__": ('PySide2.QtCore.QObject',), + "QAbstractAnimation.currentLoop": (), + "QAbstractAnimation.currentLoopTime": (), + "QAbstractAnimation.currentTime": (), + "QAbstractAnimation.direction": (), + "QAbstractAnimation.duration": (), + "QAbstractAnimation.event": ('PySide2.QtCore.QEvent',), + "QAbstractAnimation.group": (), + "QAbstractAnimation.loopCount": (), + "QAbstractAnimation.pause": (), + "QAbstractAnimation.resume": (), + "QAbstractAnimation.setCurrentTime": ('int',), + "QAbstractAnimation.setDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.setLoopCount": ('int',), + "QAbstractAnimation.setPaused": ('bool',), + "QAbstractAnimation.start": ('PySide2.QtCore.QAbstractAnimation.DeletionPolicy',), + "QAbstractAnimation.state": (), + "QAbstractAnimation.stop": (), + "QAbstractAnimation.totalDuration": (), + "QAbstractAnimation.updateCurrentTime": ('int',), + "QAbstractAnimation.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QAbstractEventDispatcher: + "QAbstractEventDispatcher.__init__": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.closingDown": (), + "QAbstractEventDispatcher.flush": (), + "QAbstractEventDispatcher.hasPendingEvents": (), + "QAbstractEventDispatcher.instance": ('PySide2.QtCore.QThread',), + "QAbstractEventDispatcher.interrupt": (), + "QAbstractEventDispatcher.processEvents": ('ProcessEventsFlags',), + "QAbstractEventDispatcher.registerEventNotifier": ('PySide2.QtCore.QWinEventNotifier',), + "QAbstractEventDispatcher.registerSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.registerTimer": [('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject'), ('int', 'int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QAbstractEventDispatcher.registeredTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.remainingTime": ('int',), + "QAbstractEventDispatcher.startingUp": (), + "QAbstractEventDispatcher.unregisterEventNotifier": ('PySide2.QtCore.QWinEventNotifier',), + "QAbstractEventDispatcher.unregisterSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.unregisterTimer": ('int',), + "QAbstractEventDispatcher.unregisterTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.wakeUp": (), + + # class PySide2.QtCore.QAbstractItemModel: + "QAbstractItemModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginMoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginMoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginResetModel": (), + "QAbstractItemModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.changePersistentIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.changePersistentIndexList": ('PySide2.support.signature.typing.List', 'PySide2.support.signature.typing.List'), + "QAbstractItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object')], + "QAbstractItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.decodeData": ('int', 'int', 'PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.encodeData": ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.endInsertColumns": (), + "QAbstractItemModel.endInsertRows": (), + "QAbstractItemModel.endMoveColumns": (), + "QAbstractItemModel.endMoveRows": (), + "QAbstractItemModel.endRemoveColumns": (), + "QAbstractItemModel.endRemoveRows": (), + "QAbstractItemModel.endResetModel": (), + "QAbstractItemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasIndex": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.support.signature.typing.Any', 'int', 'MatchFlags'), + "QAbstractItemModel.mimeData": ('PySide2.support.signature.typing.List',), + "QAbstractItemModel.mimeTypes": (), + "QAbstractItemModel.moveColumn": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRow": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemModel.persistentIndexList": (), + "QAbstractItemModel.removeColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.resetInternalData": (), + "QAbstractItemModel.revert": (), + "QAbstractItemModel.roleNames": (), + "QAbstractItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QAbstractItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QAbstractItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractItemModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.submit": (), + "QAbstractItemModel.supportedDragActions": (), + "QAbstractItemModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractListModel: + "QAbstractListModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractListModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractProxyModel: + "QAbstractProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractProxyModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mimeData": ('PySide2.support.signature.typing.List',), + "QAbstractProxyModel.mimeTypes": (), + "QAbstractProxyModel.resetInternalData": (), + "QAbstractProxyModel.revert": (), + "QAbstractProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QAbstractProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QAbstractProxyModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractProxyModel.sourceModel": (), + "QAbstractProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.submit": (), + "QAbstractProxyModel.supportedDragActions": (), + "QAbstractProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractState: + "QAbstractState.__init__": ('PySide2.QtCore.QState',), + "QAbstractState.active": (), + "QAbstractState.event": ('PySide2.QtCore.QEvent',), + "QAbstractState.machine": (), + "QAbstractState.onEntry": ('PySide2.QtCore.QEvent',), + "QAbstractState.onExit": ('PySide2.QtCore.QEvent',), + "QAbstractState.parentState": (), + + # class PySide2.QtCore.QAbstractTableModel: + "QAbstractTableModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractTableModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractTableModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractTransition: + "QAbstractTransition.__init__": ('PySide2.QtCore.QState',), + "QAbstractTransition.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.animations": (), + "QAbstractTransition.event": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.machine": (), + "QAbstractTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.setTargetState": ('PySide2.QtCore.QAbstractState',), + "QAbstractTransition.setTargetStates": ('list',), + "QAbstractTransition.setTransitionType": ('PySide2.QtCore.QAbstractTransition.TransitionType',), + "QAbstractTransition.sourceState": (), + "QAbstractTransition.targetState": (), + "QAbstractTransition.targetStates": (), + "QAbstractTransition.transitionType": (), + + # class PySide2.QtCore.QAnimationGroup: + "QAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QAnimationGroup.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.animationAt": ('int',), + "QAnimationGroup.animationCount": (), + "QAnimationGroup.clear": (), + "QAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QAnimationGroup.indexOfAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.insertAnimation": ('int', 'PySide2.QtCore.QAbstractAnimation'), + "QAnimationGroup.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.takeAnimation": ('int',), + + # class PySide2.QtCore.QBasicMutex: + "QBasicMutex.__init__": (), + "QBasicMutex.isRecursive": (), + "QBasicMutex.lock": (), + "QBasicMutex.tryLock": (), + "QBasicMutex.unlock": (), + + # class PySide2.QtCore.QBasicTimer: + "QBasicTimer.__init__": [(), ('PySide2.QtCore.QBasicTimer',)], + "QBasicTimer.__copy__": (), + "QBasicTimer.isActive": (), + "QBasicTimer.start": [('int', 'PySide2.QtCore.QObject'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QBasicTimer.stop": (), + "QBasicTimer.timerId": (), + + # class PySide2.QtCore.QBitArray: + "QBitArray.__init__": [(), ('PySide2.QtCore.QBitArray',), ('int', 'bool')], + "QBitArray.__copy__": (), + "QBitArray.at": ('int',), + "QBitArray.clear": (), + "QBitArray.clearBit": ('int',), + "QBitArray.count": [(), ('bool',)], + "QBitArray.fill": [('bool', 'int'), ('bool', 'int', 'int')], + "QBitArray.isEmpty": (), + "QBitArray.isNull": (), + "QBitArray.resize": ('int',), + "QBitArray.setBit": [('int',), ('int', 'bool')], + "QBitArray.size": (), + "QBitArray.swap": ('PySide2.QtCore.QBitArray',), + "QBitArray.testBit": ('int',), + "QBitArray.toggleBit": ('int',), + "QBitArray.truncate": ('int',), + + # class PySide2.QtCore.QBuffer: + "QBuffer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QBuffer.atEnd": (), + "QBuffer.buffer": [], + "QBuffer.canReadLine": (), + "QBuffer.close": (), + "QBuffer.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.data": (), + "QBuffer.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.open": ('OpenMode',), + "QBuffer.pos": (), + "QBuffer.readData": ('str', 'int'), + "QBuffer.seek": ('int',), + "QBuffer.setBuffer": ('PySide2.QtCore.QByteArray',), + "QBuffer.setData": ('PySide2.QtCore.QByteArray',), + "QBuffer.size": (), + "QBuffer.writeData": ('str', 'int'), + + # class PySide2.QtCore.QByteArray: + "QByteArray.__init__": [(), ('PySide2.QtCore.QByteArray',), ('int', 'PySide2.support.signature.typing.Union[str, int]'), ('bytes',), ('bytearray',)], + "QByteArray.__copy__": (), + "QByteArray.__reduce__": (), + "QByteArray.append": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.at": ('int',), + "QByteArray.capacity": (), + "QByteArray.cbegin": (), + "QByteArray.cend": (), + "QByteArray.chop": ('int',), + "QByteArray.clear": (), + "QByteArray.contains": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.count": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.data": [], + "QByteArray.endsWith": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.fill": ('PySide2.support.signature.typing.Union[str, int]', 'int'), + "QByteArray.fromBase64": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'Base64Options')], + "QByteArray.fromHex": ('PySide2.QtCore.QByteArray',), + "QByteArray.fromPercentEncoding": ('PySide2.QtCore.QByteArray', 'PySide2.support.signature.typing.Union[str, int]'), + "QByteArray.fromRawData": ('str', 'int'), + "QByteArray.indexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.insert": ('int', 'PySide2.QtCore.QByteArray'), + "QByteArray.isEmpty": (), + "QByteArray.isNull": (), + "QByteArray.isSharedWith": ('PySide2.QtCore.QByteArray',), + "QByteArray.lastIndexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.left": ('int',), + "QByteArray.leftJustified": ('int', 'PySide2.support.signature.typing.Union[str, int]', 'bool'), + "QByteArray.length": (), + "QByteArray.mid": ('int', 'int'), + "QByteArray.number": [('float', 'PySide2.support.signature.typing.Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.prepend": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.remove": ('int', 'int'), + "QByteArray.repeated": ('int',), + "QByteArray.replace": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.support.signature.typing.Union[str, int]', 'PySide2.QtCore.QByteArray'), ('PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]'), ('int', 'int', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QByteArray.reserve": ('int',), + "QByteArray.resize": ('int',), + "QByteArray.right": ('int',), + "QByteArray.rightJustified": ('int', 'PySide2.support.signature.typing.Union[str, int]', 'bool'), + "QByteArray.setNum": [('float', 'PySide2.support.signature.typing.Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.setRawData": ('str', 'int'), + "QByteArray.simplified": (), + "QByteArray.size": (), + "QByteArray.split": ('PySide2.support.signature.typing.Union[str, int]',), + "QByteArray.squeeze": (), + "QByteArray.startsWith": [('PySide2.QtCore.QByteArray',), ('PySide2.support.signature.typing.Union[str, int]',)], + "QByteArray.swap": ('PySide2.QtCore.QByteArray',), + "QByteArray.toBase64": [(), ('Base64Options',)], + "QByteArray.toDouble": ('bool',), + "QByteArray.toFloat": ('bool',), + "QByteArray.toHex": (), + "QByteArray.toInt": ('bool', 'int'), + "QByteArray.toLong": ('bool', 'int'), + "QByteArray.toLongLong": ('bool', 'int'), + "QByteArray.toLower": (), + "QByteArray.toPercentEncoding": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'PySide2.support.signature.typing.Union[str, int]'), + "QByteArray.toShort": ('bool', 'int'), + "QByteArray.toUInt": ('bool', 'int'), + "QByteArray.toULong": ('bool', 'int'), + "QByteArray.toULongLong": ('bool', 'int'), + "QByteArray.toUShort": ('bool', 'int'), + "QByteArray.toUpper": (), + "QByteArray.trimmed": (), + "QByteArray.truncate": ('int',), + + # class PySide2.QtCore.QByteArrayMatcher: + "QByteArrayMatcher.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArrayMatcher',), ('str', 'int')], + "QByteArrayMatcher.__copy__": (), + "QByteArrayMatcher.indexIn": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int', 'int')], + "QByteArrayMatcher.pattern": (), + "QByteArrayMatcher.setPattern": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QChildEvent: + "QChildEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QObject'), + "QChildEvent.added": (), + "QChildEvent.child": (), + "QChildEvent.polished": (), + "QChildEvent.removed": (), + + # class PySide2.QtCore.QCollator: + "QCollator.__init__": [('PySide2.QtCore.QCollator',), ('PySide2.QtCore.QLocale',)], + "QCollator.caseSensitivity": (), + "QCollator.compare": [('PySide2.support.signature.typing.Union[str, int]', 'int', 'PySide2.support.signature.typing.Union[str, int]', 'int'), ('str', 'str')], + "QCollator.ignorePunctuation": (), + "QCollator.locale": (), + "QCollator.numericMode": (), + "QCollator.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCollator.setIgnorePunctuation": ('bool',), + "QCollator.setLocale": ('PySide2.QtCore.QLocale',), + "QCollator.setNumericMode": ('bool',), + "QCollator.sortKey": ('str',), + "QCollator.swap": ('PySide2.QtCore.QCollator',), + + # class PySide2.QtCore.QCollatorSortKey: + "QCollatorSortKey.__init__": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.compare": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.swap": ('PySide2.QtCore.QCollatorSortKey',), + + # class PySide2.QtCore.QCommandLineOption: + "QCommandLineOption.__init__": [('PySide2.QtCore.QCommandLineOption',), ('PySide2.support.signature.typing.List',), ('PySide2.support.signature.typing.List', 'str', 'str', 'str'), ('str',), ('str', 'str', 'str', 'str')], + "QCommandLineOption.defaultValues": (), + "QCommandLineOption.description": (), + "QCommandLineOption.isHidden": (), + "QCommandLineOption.names": (), + "QCommandLineOption.setDefaultValue": ('str',), + "QCommandLineOption.setDefaultValues": ('PySide2.support.signature.typing.List',), + "QCommandLineOption.setDescription": ('str',), + "QCommandLineOption.setHidden": ('bool',), + "QCommandLineOption.setValueName": ('str',), + "QCommandLineOption.swap": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineOption.valueName": (), + + # class PySide2.QtCore.QCommandLineParser: + "QCommandLineParser.__init__": (), + "QCommandLineParser.addHelpOption": (), + "QCommandLineParser.addOption": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineParser.addOptions": ('list',), + "QCommandLineParser.addPositionalArgument": ('str', 'str', 'str'), + "QCommandLineParser.addVersionOption": (), + "QCommandLineParser.applicationDescription": (), + "QCommandLineParser.clearPositionalArguments": (), + "QCommandLineParser.errorText": (), + "QCommandLineParser.helpText": (), + "QCommandLineParser.isSet": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.optionNames": (), + "QCommandLineParser.parse": ('PySide2.support.signature.typing.List',), + "QCommandLineParser.positionalArguments": (), + "QCommandLineParser.process": [('PySide2.QtCore.QCoreApplication',), ('PySide2.support.signature.typing.List',)], + "QCommandLineParser.setApplicationDescription": ('str',), + "QCommandLineParser.setOptionsAfterPositionalArgumentsMode": ('PySide2.QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode',), + "QCommandLineParser.setSingleDashWordOptionMode": ('PySide2.QtCore.QCommandLineParser.SingleDashWordOptionMode',), + "QCommandLineParser.showHelp": ('int',), + "QCommandLineParser.showVersion": (), + "QCommandLineParser.unknownOptionNames": (), + "QCommandLineParser.value": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.values": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + + # class PySide2.QtCore.QCoreApplication: + "QCoreApplication.__init__": ('PySide2.support.signature.typing.List',), + "QCoreApplication.addLibraryPath": ('str',), + "QCoreApplication.applicationDirPath": (), + "QCoreApplication.applicationFilePath": (), + "QCoreApplication.applicationName": (), + "QCoreApplication.applicationPid": (), + "QCoreApplication.applicationVersion": (), + "QCoreApplication.arguments": (), + "QCoreApplication.closingDown": (), + "QCoreApplication.event": ('PySide2.QtCore.QEvent',), + "QCoreApplication.eventDispatcher": (), + "QCoreApplication.exec_": (), + "QCoreApplication.exit": ('int',), + "QCoreApplication.flush": (), + "QCoreApplication.hasPendingEvents": (), + "QCoreApplication.installTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.instance": (), + "QCoreApplication.isQuitLockEnabled": (), + "QCoreApplication.isSetuidAllowed": (), + "QCoreApplication.libraryPaths": (), + "QCoreApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.organizationDomain": (), + "QCoreApplication.organizationName": (), + "QCoreApplication.postEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent', 'int'), + "QCoreApplication.processEvents": [('ProcessEventsFlags',), ('ProcessEventsFlags', 'int')], + "QCoreApplication.quit": (), + "QCoreApplication.removeLibraryPath": ('str',), + "QCoreApplication.removePostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.removeTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.sendEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.sendPostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.setApplicationName": ('str',), + "QCoreApplication.setApplicationVersion": ('str',), + "QCoreApplication.setAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute', 'bool'), + "QCoreApplication.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QCoreApplication.setLibraryPaths": ('PySide2.support.signature.typing.List',), + "QCoreApplication.setOrganizationDomain": ('str',), + "QCoreApplication.setOrganizationName": ('str',), + "QCoreApplication.setQuitLockEnabled": ('bool',), + "QCoreApplication.setSetuidAllowed": ('bool',), + "QCoreApplication.startingUp": (), + "QCoreApplication.testAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute',), + "QCoreApplication.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QCryptographicHash: + "QCryptographicHash.__init__": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QCryptographicHash.addData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str', 'int')], + "QCryptographicHash.hash": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QCryptographicHash.Algorithm'), + "QCryptographicHash.reset": (), + "QCryptographicHash.result": (), + + # class PySide2.QtCore.QDataStream: + "QDataStream.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QDataStream.atEnd": (), + "QDataStream.byteOrder": (), + "QDataStream.device": (), + "QDataStream.floatingPointPrecision": (), + "QDataStream.readBool": (), + "QDataStream.readDouble": (), + "QDataStream.readFloat": (), + "QDataStream.readInt16": (), + "QDataStream.readInt32": (), + "QDataStream.readInt64": (), + "QDataStream.readInt8": (), + "QDataStream.readQChar": (), + "QDataStream.readQString": (), + "QDataStream.readQStringList": (), + "QDataStream.readQVariant": (), + "QDataStream.readRawData": ('str', 'int'), + "QDataStream.readString": (), + "QDataStream.readUInt16": (), + "QDataStream.readUInt32": (), + "QDataStream.readUInt64": (), + "QDataStream.readUInt8": (), + "QDataStream.resetStatus": (), + "QDataStream.setByteOrder": ('PySide2.QtCore.QDataStream.ByteOrder',), + "QDataStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QDataStream.setFloatingPointPrecision": ('PySide2.QtCore.QDataStream.FloatingPointPrecision',), + "QDataStream.setStatus": ('PySide2.QtCore.QDataStream.Status',), + "QDataStream.setVersion": ('int',), + "QDataStream.skipRawData": ('int',), + "QDataStream.status": (), + "QDataStream.unsetDevice": (), + "QDataStream.version": (), + "QDataStream.writeBool": ('bool',), + "QDataStream.writeDouble": ('float',), + "QDataStream.writeFloat": ('float',), + "QDataStream.writeInt16": ('int',), + "QDataStream.writeInt32": ('int',), + "QDataStream.writeInt64": ('int',), + "QDataStream.writeInt8": ('PySide2.support.signature.typing.Union[str, int]',), + "QDataStream.writeQChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QDataStream.writeQString": ('str',), + "QDataStream.writeQStringList": ('PySide2.support.signature.typing.List',), + "QDataStream.writeQVariant": ('PySide2.support.signature.typing.Any',), + "QDataStream.writeRawData": ('str', 'int'), + "QDataStream.writeString": ('str',), + "QDataStream.writeUInt16": ('int',), + "QDataStream.writeUInt32": ('int',), + "QDataStream.writeUInt64": ('int',), + "QDataStream.writeUInt8": ('PySide2.support.signature.typing.Union[str, int]',), + + # class PySide2.QtCore.QDate: + "QDate.__init__": [(), ('PySide2.QtCore.QDate',), ('int', 'int', 'int')], + "QDate.__copy__": (), + "QDate.__reduce__": (), + "QDate.addDays": ('int',), + "QDate.addMonths": ('int',), + "QDate.addYears": ('int',), + "QDate.currentDate": (), + "QDate.day": (), + "QDate.dayOfWeek": (), + "QDate.dayOfYear": (), + "QDate.daysInMonth": (), + "QDate.daysInYear": (), + "QDate.daysTo": ('PySide2.QtCore.QDate',), + "QDate.fromJulianDay": ('int',), + "QDate.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDate.getDate": ('int', 'int', 'int'), + "QDate.isLeapYear": ('int',), + "QDate.isNull": (), + "QDate.isValid": [(), ('int', 'int', 'int')], + "QDate.longDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.longMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.month": (), + "QDate.setDate": ('int', 'int', 'int'), + "QDate.shortDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.shortMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.toJulianDay": (), + "QDate.toPython": (), + "QDate.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDate.weekNumber": ('int',), + "QDate.year": (), + + # class PySide2.QtCore.QDateTime: + "QDateTime.__init__": [(), ('PySide2.QtCore.QDate',), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.QTimeZone'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec', 'int'), ('PySide2.QtCore.QDateTime',), ('int', 'int', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int')], + "QDateTime.__copy__": (), + "QDateTime.__reduce__": (), + "QDateTime.addDays": ('int',), + "QDateTime.addMSecs": ('int',), + "QDateTime.addMonths": ('int',), + "QDateTime.addSecs": ('int',), + "QDateTime.addYears": ('int',), + "QDateTime.currentDateTime": (), + "QDateTime.currentDateTimeUtc": (), + "QDateTime.currentMSecsSinceEpoch": (), + "QDateTime.date": (), + "QDateTime.daysTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.fromMSecsSinceEpoch": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDateTime.fromTime_t": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.isDaylightTime": (), + "QDateTime.isNull": (), + "QDateTime.isValid": (), + "QDateTime.msecsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.offsetFromUtc": (), + "QDateTime.secsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.setDate": ('PySide2.QtCore.QDate',), + "QDateTime.setMSecsSinceEpoch": ('int',), + "QDateTime.setOffsetFromUtc": ('int',), + "QDateTime.setTime": ('PySide2.QtCore.QTime',), + "QDateTime.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.setTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.setTime_t": ('int',), + "QDateTime.setUtcOffset": ('int',), + "QDateTime.swap": ('PySide2.QtCore.QDateTime',), + "QDateTime.time": (), + "QDateTime.timeSpec": (), + "QDateTime.timeZone": (), + "QDateTime.timeZoneAbbreviation": (), + "QDateTime.toLocalTime": (), + "QDateTime.toMSecsSinceEpoch": (), + "QDateTime.toOffsetFromUtc": ('int',), + "QDateTime.toPython": (), + "QDateTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDateTime.toTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.toTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.toTime_t": (), + "QDateTime.toUTC": (), + "QDateTime.utcOffset": (), + + # class PySide2.QtCore.QDir: + "QDir.__init__": [('PySide2.QtCore.QDir',), ('str',), ('str', 'str', 'SortFlags', 'Filters')], + "QDir.__copy__": (), + "QDir.__reduce__": (), + "QDir.absoluteFilePath": ('str',), + "QDir.absolutePath": (), + "QDir.addResourceSearchPath": ('str',), + "QDir.addSearchPath": ('str', 'str'), + "QDir.canonicalPath": (), + "QDir.cd": ('str',), + "QDir.cdUp": (), + "QDir.cleanPath": ('str',), + "QDir.count": (), + "QDir.current": (), + "QDir.currentPath": (), + "QDir.dirName": (), + "QDir.drives": (), + "QDir.entryInfoList": [('Filters', 'SortFlags'), ('PySide2.support.signature.typing.List', 'Filters', 'SortFlags')], + "QDir.entryList": [('Filters', 'SortFlags'), ('PySide2.support.signature.typing.List', 'Filters', 'SortFlags')], + "QDir.exists": [(), ('str',)], + "QDir.filePath": ('str',), + "QDir.filter": (), + "QDir.fromNativeSeparators": ('str',), + "QDir.home": (), + "QDir.homePath": (), + "QDir.isAbsolute": (), + "QDir.isAbsolutePath": ('str',), + "QDir.isReadable": (), + "QDir.isRelative": (), + "QDir.isRelativePath": ('str',), + "QDir.isRoot": (), + "QDir.listSeparator": (), + "QDir.makeAbsolute": (), + "QDir.match": [('PySide2.support.signature.typing.List', 'str'), ('str', 'str')], + "QDir.mkdir": ('str',), + "QDir.mkpath": ('str',), + "QDir.nameFilters": (), + "QDir.nameFiltersFromString": ('str',), + "QDir.path": (), + "QDir.refresh": (), + "QDir.relativeFilePath": ('str',), + "QDir.remove": ('str',), + "QDir.removeRecursively": (), + "QDir.rename": ('str', 'str'), + "QDir.rmdir": ('str',), + "QDir.rmpath": ('str',), + "QDir.root": (), + "QDir.rootPath": (), + "QDir.searchPaths": ('str',), + "QDir.separator": (), + "QDir.setCurrent": ('str',), + "QDir.setFilter": ('Filters',), + "QDir.setNameFilters": ('PySide2.support.signature.typing.List',), + "QDir.setPath": ('str',), + "QDir.setSearchPaths": ('str', 'PySide2.support.signature.typing.List'), + "QDir.setSorting": ('SortFlags',), + "QDir.sorting": (), + "QDir.swap": ('PySide2.QtCore.QDir',), + "QDir.temp": (), + "QDir.tempPath": (), + "QDir.toNativeSeparators": ('str',), + + # class PySide2.QtCore.QDirIterator: + "QDirIterator.__init__": [('PySide2.QtCore.QDir', 'IteratorFlags'), ('str', 'Filters', 'IteratorFlags'), ('str', 'IteratorFlags'), ('str', 'PySide2.support.signature.typing.List', 'Filters', 'IteratorFlags')], + "QDirIterator.fileInfo": (), + "QDirIterator.fileName": (), + "QDirIterator.filePath": (), + "QDirIterator.hasNext": (), + "QDirIterator.next": (), + "QDirIterator.path": (), + + # class PySide2.QtCore.QDynamicPropertyChangeEvent: + "QDynamicPropertyChangeEvent.__init__": ('PySide2.QtCore.QByteArray',), + "QDynamicPropertyChangeEvent.propertyName": (), + + # class PySide2.QtCore.QEasingCurve: + "QEasingCurve.__init__": [('PySide2.QtCore.QEasingCurve',), ('PySide2.QtCore.QEasingCurve.Type',)], + "QEasingCurve.__copy__": (), + "QEasingCurve.addCubicBezierSegment": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEasingCurve.addTCBSegment": ('PySide2.QtCore.QPointF', 'float', 'float', 'float'), + "QEasingCurve.amplitude": (), + "QEasingCurve.customType": (), + "QEasingCurve.overshoot": (), + "QEasingCurve.period": (), + "QEasingCurve.setAmplitude": ('float',), + "QEasingCurve.setCustomType": ('object',), + "QEasingCurve.setOvershoot": ('float',), + "QEasingCurve.setPeriod": ('float',), + "QEasingCurve.setType": ('PySide2.QtCore.QEasingCurve.Type',), + "QEasingCurve.swap": ('PySide2.QtCore.QEasingCurve',), + "QEasingCurve.toCubicSpline": (), + "QEasingCurve.type": (), + "QEasingCurve.valueForProgress": ('float',), + + # class PySide2.QtCore.QElapsedTimer: + "QElapsedTimer.__init__": [(), ('PySide2.QtCore.QElapsedTimer',)], + "QElapsedTimer.__copy__": (), + "QElapsedTimer.clockType": (), + "QElapsedTimer.elapsed": (), + "QElapsedTimer.hasExpired": ('int',), + "QElapsedTimer.invalidate": (), + "QElapsedTimer.isMonotonic": (), + "QElapsedTimer.isValid": (), + "QElapsedTimer.msecsSinceReference": (), + "QElapsedTimer.msecsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.nsecsElapsed": (), + "QElapsedTimer.restart": (), + "QElapsedTimer.secsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.start": (), + + # class PySide2.QtCore.QEvent: + "QEvent.__init__": [('PySide2.QtCore.QEvent',), ('PySide2.QtCore.QEvent.Type',)], + "QEvent.accept": (), + "QEvent.ignore": (), + "QEvent.isAccepted": (), + "QEvent.registerEventType": ('int',), + "QEvent.setAccepted": ('bool',), + "QEvent.spontaneous": (), + "QEvent.type": (), + + # class PySide2.QtCore.QEventLoop: + "QEventLoop.__init__": ('PySide2.QtCore.QObject',), + "QEventLoop.event": ('PySide2.QtCore.QEvent',), + "QEventLoop.exec_": ('ProcessEventsFlags',), + "QEventLoop.exit": ('int',), + "QEventLoop.isRunning": (), + "QEventLoop.processEvents": [('ProcessEventsFlags',), ('ProcessEventsFlags', 'int')], + "QEventLoop.quit": (), + "QEventLoop.wakeUp": (), + + # class PySide2.QtCore.QEventTransition: + "QEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QEventTransition.event": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventSource": (), + "QEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventType": (), + "QEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QEventTransition.setEventSource": ('PySide2.QtCore.QObject',), + "QEventTransition.setEventType": ('PySide2.QtCore.QEvent.Type',), + + # class PySide2.QtCore.QFactoryInterface: + "QFactoryInterface.__init__": (), + "QFactoryInterface.keys": (), + + # class PySide2.QtCore.QFile: + "QFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QFile.copy": [('str',), ('str', 'str')], + "QFile.decodeName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QFile.encodeName": ('str',), + "QFile.exists": [(), ('str',)], + "QFile.fileName": (), + "QFile.link": [('str',), ('str', 'str')], + "QFile.open": [('OpenMode',), ('int', 'OpenMode', 'FileHandleFlags')], + "QFile.permissions": [(), ('str',)], + "QFile.readLink": [(), ('str',)], + "QFile.remove": [(), ('str',)], + "QFile.rename": [('str',), ('str', 'str')], + "QFile.resize": [('int',), ('str', 'int')], + "QFile.setFileName": ('str',), + "QFile.setPermissions": [('Permissions',), ('str', 'Permissions')], + "QFile.size": (), + "QFile.symLinkTarget": [(), ('str',)], + + # class PySide2.QtCore.QFileDevice: + "QFileDevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QFileDevice.atEnd": (), + "QFileDevice.close": (), + "QFileDevice.error": (), + "QFileDevice.fileName": (), + "QFileDevice.flush": (), + "QFileDevice.handle": (), + "QFileDevice.isSequential": (), + "QFileDevice.map": ('int', 'int', 'PySide2.QtCore.QFileDevice.MemoryMapFlags'), + "QFileDevice.permissions": (), + "QFileDevice.pos": (), + "QFileDevice.readData": ('str', 'int'), + "QFileDevice.readLineData": ('str', 'int'), + "QFileDevice.resize": ('int',), + "QFileDevice.seek": ('int',), + "QFileDevice.setPermissions": ('Permissions',), + "QFileDevice.size": (), + "QFileDevice.unmap": ('PySide2.support.signature.typing.Union[str, int]',), + "QFileDevice.unsetError": (), + "QFileDevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QFileInfo: + "QFileInfo.__init__": [(), ('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('PySide2.QtCore.QFileInfo',), ('str',)], + "QFileInfo.__copy__": (), + "QFileInfo.__reduce__": (), + "QFileInfo.absoluteDir": (), + "QFileInfo.absoluteFilePath": (), + "QFileInfo.absolutePath": (), + "QFileInfo.baseName": (), + "QFileInfo.bundleName": (), + "QFileInfo.caching": (), + "QFileInfo.canonicalFilePath": (), + "QFileInfo.canonicalPath": (), + "QFileInfo.completeBaseName": (), + "QFileInfo.completeSuffix": (), + "QFileInfo.created": (), + "QFileInfo.dir": (), + "QFileInfo.exists": [(), ('str',)], + "QFileInfo.fileName": (), + "QFileInfo.filePath": (), + "QFileInfo.group": (), + "QFileInfo.groupId": (), + "QFileInfo.isAbsolute": (), + "QFileInfo.isBundle": (), + "QFileInfo.isDir": (), + "QFileInfo.isExecutable": (), + "QFileInfo.isFile": (), + "QFileInfo.isHidden": (), + "QFileInfo.isNativePath": (), + "QFileInfo.isReadable": (), + "QFileInfo.isRelative": (), + "QFileInfo.isRoot": (), + "QFileInfo.isSymLink": (), + "QFileInfo.isWritable": (), + "QFileInfo.lastModified": (), + "QFileInfo.lastRead": (), + "QFileInfo.makeAbsolute": (), + "QFileInfo.owner": (), + "QFileInfo.ownerId": (), + "QFileInfo.path": (), + "QFileInfo.readLink": (), + "QFileInfo.refresh": (), + "QFileInfo.setCaching": ('bool',), + "QFileInfo.setFile": [('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('str',)], + "QFileInfo.size": (), + "QFileInfo.suffix": (), + "QFileInfo.swap": ('PySide2.QtCore.QFileInfo',), + "QFileInfo.symLinkTarget": (), + + # class PySide2.QtCore.QFileSelector: + "QFileSelector.__init__": ('PySide2.QtCore.QObject',), + "QFileSelector.allSelectors": (), + "QFileSelector.extraSelectors": (), + "QFileSelector.select": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileSelector.setExtraSelectors": ('PySide2.support.signature.typing.List',), + + # class PySide2.QtCore.QFileSystemWatcher: + "QFileSystemWatcher.__init__": [('PySide2.QtCore.QObject',), ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QObject')], + "QFileSystemWatcher.addPath": ('str',), + "QFileSystemWatcher.addPaths": ('PySide2.support.signature.typing.List',), + "QFileSystemWatcher.directories": (), + "QFileSystemWatcher.files": (), + "QFileSystemWatcher.removePath": ('str',), + "QFileSystemWatcher.removePaths": ('PySide2.support.signature.typing.List',), + + # class PySide2.QtCore.QFinalState: + "QFinalState.__init__": ('PySide2.QtCore.QState',), + "QFinalState.event": ('PySide2.QtCore.QEvent',), + "QFinalState.onEntry": ('PySide2.QtCore.QEvent',), + "QFinalState.onExit": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtCore.QGenericArgument: + "QGenericArgument.__init__": [('PySide2.QtCore.QGenericArgument',), ('str', 'int')], + "QGenericArgument.__copy__": (), + "QGenericArgument.data": (), + "QGenericArgument.name": (), + + # class PySide2.QtCore.QGenericReturnArgument: + "QGenericReturnArgument.__init__": [('PySide2.QtCore.QGenericReturnArgument',), ('str', 'int')], + "QGenericReturnArgument.__copy__": (), + + # class PySide2.QtCore.QHistoryState: + "QHistoryState.__init__": [('PySide2.QtCore.QHistoryState.HistoryType', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QHistoryState.defaultState": (), + "QHistoryState.defaultTransition": (), + "QHistoryState.event": ('PySide2.QtCore.QEvent',), + "QHistoryState.historyType": (), + "QHistoryState.onEntry": ('PySide2.QtCore.QEvent',), + "QHistoryState.onExit": ('PySide2.QtCore.QEvent',), + "QHistoryState.setDefaultState": ('PySide2.QtCore.QAbstractState',), + "QHistoryState.setDefaultTransition": ('PySide2.QtCore.QAbstractTransition',), + "QHistoryState.setHistoryType": ('PySide2.QtCore.QHistoryState.HistoryType',), + + # class PySide2.QtCore.QIODevice: + "QIODevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QIODevice.atEnd": (), + "QIODevice.bytesAvailable": (), + "QIODevice.bytesToWrite": (), + "QIODevice.canReadLine": (), + "QIODevice.close": (), + "QIODevice.errorString": (), + "QIODevice.getChar": ('str',), + "QIODevice.isOpen": (), + "QIODevice.isReadable": (), + "QIODevice.isSequential": (), + "QIODevice.isTextModeEnabled": (), + "QIODevice.isWritable": (), + "QIODevice.open": ('OpenMode',), + "QIODevice.openMode": (), + "QIODevice.peek": ('int',), + "QIODevice.pos": (), + "QIODevice.putChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QIODevice.read": ('int',), + "QIODevice.readAll": (), + "QIODevice.readData": ('str', 'int'), + "QIODevice.readLine": ('int',), + "QIODevice.readLineData": ('str', 'int'), + "QIODevice.reset": (), + "QIODevice.seek": ('int',), + "QIODevice.setErrorString": ('str',), + "QIODevice.setOpenMode": ('OpenMode',), + "QIODevice.setTextModeEnabled": ('bool',), + "QIODevice.size": (), + "QIODevice.ungetChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QIODevice.waitForBytesWritten": ('int',), + "QIODevice.waitForReadyRead": ('int',), + "QIODevice.write": ('PySide2.QtCore.QByteArray',), + "QIODevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QItemSelection: + "QItemSelection.__init__": [(), ('PySide2.QtCore.QItemSelection',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelection.__copy__": (), + "QItemSelection.append": [('PySide2.QtCore.QItemSelectionRange',), ('list',)], + "QItemSelection.at": ('int',), + "QItemSelection.back": [], + "QItemSelection.clear": (), + "QItemSelection.constFirst": (), + "QItemSelection.constLast": (), + "QItemSelection.contains": ('PySide2.QtCore.QModelIndex',), + "QItemSelection.count": [(), ('PySide2.QtCore.QItemSelectionRange',)], + "QItemSelection.detachShared": (), + "QItemSelection.empty": (), + "QItemSelection.endsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.first": [], + "QItemSelection.fromSet": ('set',), + "QItemSelection.fromVector": ('list',), + "QItemSelection.front": [], + "QItemSelection.indexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.indexes": (), + "QItemSelection.insert": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.isEmpty": (), + "QItemSelection.isSharedWith": ('list',), + "QItemSelection.last": [], + "QItemSelection.lastIndexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.length": (), + "QItemSelection.merge": ('PySide2.QtCore.QItemSelection', 'SelectionFlags'), + "QItemSelection.mid": ('int', 'int'), + "QItemSelection.move": ('int', 'int'), + "QItemSelection.pop_back": (), + "QItemSelection.pop_front": (), + "QItemSelection.prepend": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_back": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_front": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAll": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAt": ('int',), + "QItemSelection.removeFirst": (), + "QItemSelection.removeLast": (), + "QItemSelection.removeOne": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.replace": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.reserve": ('int',), + "QItemSelection.select": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QItemSelection.setSharable": ('bool',), + "QItemSelection.size": (), + "QItemSelection.split": ('PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelection'), + "QItemSelection.startsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.swap": [('int', 'int'), ('list',)], + "QItemSelection.takeAt": ('int',), + "QItemSelection.takeFirst": (), + "QItemSelection.takeLast": (), + "QItemSelection.toSet": (), + "QItemSelection.toVector": (), + "QItemSelection.value": [('int',), ('int', 'PySide2.QtCore.QItemSelectionRange')], + + # class PySide2.QtCore.QItemSelectionModel: + "QItemSelectionModel.__init__": [('PySide2.QtCore.QAbstractItemModel',), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject')], + "QItemSelectionModel.clear": (), + "QItemSelectionModel.clearCurrentIndex": (), + "QItemSelectionModel.clearSelection": (), + "QItemSelectionModel.columnIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.currentIndex": (), + "QItemSelectionModel.emitSelectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QItemSelectionModel.hasSelection": (), + "QItemSelectionModel.isColumnSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isRowSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isSelected": ('PySide2.QtCore.QModelIndex',), + "QItemSelectionModel.model": [], + "QItemSelectionModel.reset": (), + "QItemSelectionModel.rowIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.select": [('PySide2.QtCore.QItemSelection', 'SelectionFlags'), ('PySide2.QtCore.QModelIndex', 'SelectionFlags')], + "QItemSelectionModel.selectedColumns": ('int',), + "QItemSelectionModel.selectedIndexes": (), + "QItemSelectionModel.selectedRows": ('int',), + "QItemSelectionModel.selection": (), + "QItemSelectionModel.setCurrentIndex": ('PySide2.QtCore.QModelIndex', 'SelectionFlags'), + "QItemSelectionModel.setModel": ('PySide2.QtCore.QAbstractItemModel',), + + # class PySide2.QtCore.QItemSelectionRange: + "QItemSelectionRange.__init__": [(), ('PySide2.QtCore.QItemSelectionRange',), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.__copy__": (), + "QItemSelectionRange.bottom": (), + "QItemSelectionRange.bottomRight": (), + "QItemSelectionRange.contains": [('PySide2.QtCore.QModelIndex',), ('int', 'int', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.height": (), + "QItemSelectionRange.indexes": (), + "QItemSelectionRange.intersected": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.intersects": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.isEmpty": (), + "QItemSelectionRange.isValid": (), + "QItemSelectionRange.left": (), + "QItemSelectionRange.model": (), + "QItemSelectionRange.parent": (), + "QItemSelectionRange.right": (), + "QItemSelectionRange.swap": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.top": (), + "QItemSelectionRange.topLeft": (), + "QItemSelectionRange.width": (), + + # class PySide2.QtCore.QJsonArray: + "QJsonArray.__init__": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonArray.__copy__": (), + "QJsonArray.append": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.at": ('int',), + "QJsonArray.contains": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.count": (), + "QJsonArray.empty": (), + "QJsonArray.first": (), + "QJsonArray.fromStringList": ('PySide2.support.signature.typing.List',), + "QJsonArray.fromVariantList": ('list',), + "QJsonArray.insert": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.isEmpty": (), + "QJsonArray.last": (), + "QJsonArray.pop_back": (), + "QJsonArray.pop_front": (), + "QJsonArray.prepend": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_back": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_front": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.removeAt": ('int',), + "QJsonArray.removeFirst": (), + "QJsonArray.removeLast": (), + "QJsonArray.replace": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.size": (), + "QJsonArray.takeAt": ('int',), + "QJsonArray.toVariantList": (), + + # class PySide2.QtCore.QJsonDocument: + "QJsonDocument.__init__": [(), ('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonDocument',), ('dict',)], + "QJsonDocument.__copy__": (), + "QJsonDocument.array": (), + "QJsonDocument.fromBinaryData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromJson": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonParseError'), + "QJsonDocument.fromRawData": ('str', 'int', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromVariant": ('PySide2.support.signature.typing.Any',), + "QJsonDocument.isArray": (), + "QJsonDocument.isEmpty": (), + "QJsonDocument.isNull": (), + "QJsonDocument.isObject": (), + "QJsonDocument.object": (), + "QJsonDocument.rawData": ('int',), + "QJsonDocument.setArray": ('PySide2.QtCore.QJsonArray',), + "QJsonDocument.setObject": ('dict',), + "QJsonDocument.toBinaryData": (), + "QJsonDocument.toJson": ('PySide2.QtCore.QJsonDocument.JsonFormat',), + "QJsonDocument.toVariant": (), + + # class PySide2.QtCore.QJsonParseError: + "QJsonParseError.__init__": [(), ('PySide2.QtCore.QJsonParseError',)], + "QJsonParseError.__copy__": (), + "QJsonParseError.errorString": (), + + # class PySide2.QtCore.QJsonValue: + "QJsonValue.__init__": [('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonValue',), ('PySide2.QtCore.QJsonValue.Type',), ('bool',), ('dict',), ('float',), ('int',), ('str',)], + "QJsonValue.__copy__": (), + "QJsonValue.fromVariant": ('PySide2.support.signature.typing.Any',), + "QJsonValue.isArray": (), + "QJsonValue.isBool": (), + "QJsonValue.isDouble": (), + "QJsonValue.isNull": (), + "QJsonValue.isObject": (), + "QJsonValue.isString": (), + "QJsonValue.isUndefined": (), + "QJsonValue.toArray": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonValue.toBool": ('bool',), + "QJsonValue.toDouble": ('float',), + "QJsonValue.toInt": ('int',), + "QJsonValue.toObject": [(), ('dict',)], + "QJsonValue.toString": ('str',), + "QJsonValue.toVariant": (), + "QJsonValue.type": (), + + # class PySide2.QtCore.QLibraryInfo: + "QLibraryInfo.buildDate": (), + "QLibraryInfo.build": (), + "QLibraryInfo.isDebugBuild": (), + "QLibraryInfo.licensedProducts": (), + "QLibraryInfo.licensee": (), + "QLibraryInfo.location": ('PySide2.QtCore.QLibraryInfo.LibraryLocation',), + "QLibraryInfo.platformPluginArguments": ('str',), + + # class PySide2.QtCore.QLine: + "QLine.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('int', 'int', 'int', 'int')], + "QLine.__copy__": (), + "QLine.__reduce__": (), + "QLine.dx": (), + "QLine.dy": (), + "QLine.isNull": (), + "QLine.p1": (), + "QLine.p2": (), + "QLine.setLine": ('int', 'int', 'int', 'int'), + "QLine.setP1": ('PySide2.QtCore.QPoint',), + "QLine.setP2": ('PySide2.QtCore.QPoint',), + "QLine.setPoints": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QLine.toTuple": (), + "QLine.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.x1": (), + "QLine.x2": (), + "QLine.y1": (), + "QLine.y2": (), + + # class PySide2.QtCore.QLineF: + "QLineF.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QLineF.__copy__": (), + "QLineF.__reduce__": (), + "QLineF.angle": [(), ('PySide2.QtCore.QLineF',)], + "QLineF.angleTo": ('PySide2.QtCore.QLineF',), + "QLineF.dx": (), + "QLineF.dy": (), + "QLineF.fromPolar": ('float', 'float'), + "QLineF.intersect": ('PySide2.QtCore.QLineF', 'PySide2.QtCore.QPointF'), + "QLineF.isNull": (), + "QLineF.length": (), + "QLineF.normalVector": (), + "QLineF.p1": (), + "QLineF.p2": (), + "QLineF.pointAt": ('float',), + "QLineF.setAngle": ('float',), + "QLineF.setLength": ('float',), + "QLineF.setLine": ('float', 'float', 'float', 'float'), + "QLineF.setP1": ('PySide2.QtCore.QPointF',), + "QLineF.setP2": ('PySide2.QtCore.QPointF',), + "QLineF.setPoints": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QLineF.toLine": (), + "QLineF.toTuple": (), + "QLineF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.unitVector": (), + "QLineF.x1": (), + "QLineF.x2": (), + "QLineF.y1": (), + "QLineF.y2": (), + + # class PySide2.QtCore.QLocale: + "QLocale.__init__": [(), ('PySide2.QtCore.QLocale',), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Country'), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), ('str',)], + "QLocale.__copy__": (), + "QLocale.amText": (), + "QLocale.bcp47Name": (), + "QLocale.c": (), + "QLocale.countriesForLanguage": ('PySide2.QtCore.QLocale.Language',), + "QLocale.country": (), + "QLocale.countryToString": ('PySide2.QtCore.QLocale.Country',), + "QLocale.createSeparatedList": ('PySide2.support.signature.typing.List',), + "QLocale.currencySymbol": ('PySide2.QtCore.QLocale.CurrencySymbolFormat',), + "QLocale.dateFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dateTimeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.decimalPoint": (), + "QLocale.exponential": (), + "QLocale.firstDayOfWeek": (), + "QLocale.groupSeparator": (), + "QLocale.language": (), + "QLocale.languageToString": ('PySide2.QtCore.QLocale.Language',), + "QLocale.matchingLocales": ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), + "QLocale.measurementSystem": (), + "QLocale.monthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.name": (), + "QLocale.nativeCountryName": (), + "QLocale.nativeLanguageName": (), + "QLocale.negativeSign": (), + "QLocale.numberOptions": (), + "QLocale.percent": (), + "QLocale.pmText": (), + "QLocale.positiveSign": (), + "QLocale.quoteString": ['PySide2.QtCore.QLocale.QuotationStyle', 'str'], + "QLocale.script": (), + "QLocale.scriptToString": ('PySide2.QtCore.QLocale.Script',), + "QLocale.setDefault": ('PySide2.QtCore.QLocale',), + "QLocale.setNumberOptions": ('NumberOptions',), + "QLocale.standaloneDayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.standaloneMonthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.system": (), + "QLocale.textDirection": (), + "QLocale.timeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.toCurrencyString": [('float', 'str'), ('int', 'str')], + "QLocale.toDate": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDateTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDouble": ('str', 'bool'), + "QLocale.toFloat": ('str', 'bool'), + "QLocale.toInt": ('str', 'bool'), + "QLocale.toLongLong": ('str', 'bool'), + "QLocale.toLower": ('str',), + "QLocale.toShort": ('str', 'bool'), + "QLocale.toString": [('PySide2.QtCore.QDate', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDate', 'str'), ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDateTime', 'str'), ('PySide2.QtCore.QTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QTime', 'str'), ('float', 'PySide2.support.signature.typing.Union[str, int]', 'int'), ('int',)], + "QLocale.toTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toUInt": ('str', 'bool'), + "QLocale.toULongLong": ('str', 'bool'), + "QLocale.toUShort": ('str', 'bool'), + "QLocale.toUpper": ('str',), + "QLocale.uiLanguages": (), + "QLocale.weekdays": (), + "QLocale.zeroDigit": (), + + # class PySide2.QtCore.QMargins: + "QMargins.__init__": [(), ('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QMargins.__copy__": (), + "QMargins.bottom": (), + "QMargins.isNull": (), + "QMargins.left": (), + "QMargins.right": (), + "QMargins.setBottom": ('int',), + "QMargins.setLeft": ('int',), + "QMargins.setRight": ('int',), + "QMargins.setTop": ('int',), + "QMargins.top": (), + + # class PySide2.QtCore.QMarginsF: + "QMarginsF.__init__": [(), ('PySide2.QtCore.QMargins',), ('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float')], + "QMarginsF.__copy__": (), + "QMarginsF.bottom": (), + "QMarginsF.isNull": (), + "QMarginsF.left": (), + "QMarginsF.right": (), + "QMarginsF.setBottom": ('float',), + "QMarginsF.setLeft": ('float',), + "QMarginsF.setRight": ('float',), + "QMarginsF.setTop": ('float',), + "QMarginsF.toMargins": (), + "QMarginsF.top": (), + + # class PySide2.QtCore.QMessageLogContext: + "QMessageLogContext.__init__": [(), ('str', 'int', 'str', 'str')], + + # class PySide2.QtCore.QMetaClassInfo: + "QMetaClassInfo.__init__": [(), ('PySide2.QtCore.QMetaClassInfo',)], + "QMetaClassInfo.__copy__": (), + "QMetaClassInfo.name": (), + "QMetaClassInfo.value": (), + + # class PySide2.QtCore.QMetaEnum: + "QMetaEnum.__init__": [(), ('PySide2.QtCore.QMetaEnum',)], + "QMetaEnum.__copy__": (), + "QMetaEnum.isFlag": (), + "QMetaEnum.isValid": (), + "QMetaEnum.key": ('int',), + "QMetaEnum.keyCount": (), + "QMetaEnum.keyToValue": ('str', 'bool'), + "QMetaEnum.keysToValue": ('str', 'bool'), + "QMetaEnum.name": (), + "QMetaEnum.scope": (), + "QMetaEnum.value": ('int',), + "QMetaEnum.valueToKey": ('int',), + "QMetaEnum.valueToKeys": ('int',), + + # class PySide2.QtCore.QMetaMethod: + "QMetaMethod.__init__": [(), ('PySide2.QtCore.QMetaMethod',)], + "QMetaMethod.__copy__": (), + "QMetaMethod.access": (), + "QMetaMethod.enclosingMetaObject": (), + "QMetaMethod.invoke": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.invokeOnGadget": [('int', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('int', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.isValid": (), + "QMetaMethod.methodIndex": (), + "QMetaMethod.methodSignature": (), + "QMetaMethod.methodType": (), + "QMetaMethod.name": (), + "QMetaMethod.parameterCount": (), + "QMetaMethod.parameterNames": (), + "QMetaMethod.parameterType": ('int',), + "QMetaMethod.parameterTypes": (), + "QMetaMethod.returnType": (), + "QMetaMethod.revision": (), + "QMetaMethod.tag": (), + "QMetaMethod.typeName": (), + + # class PySide2.QtCore.QMetaObject: + "QMetaObject.__init__": (), + "QMetaObject.cast": ['PySide2.QtCore.QObject'], + "QMetaObject.checkConnectArgs": [('PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QMetaMethod'), ('str', 'str')], + "QMetaObject.classInfo": ('int',), + "QMetaObject.classInfoCount": (), + "QMetaObject.classInfoOffset": (), + "QMetaObject.className": (), + "QMetaObject.connectSlotsByName": ('PySide2.QtCore.QObject',), + "QMetaObject.constructor": ('int',), + "QMetaObject.constructorCount": (), + "QMetaObject.disconnect": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.disconnectOne": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.enumerator": ('int',), + "QMetaObject.enumeratorCount": (), + "QMetaObject.enumeratorOffset": (), + "QMetaObject.indexOfClassInfo": ('str',), + "QMetaObject.indexOfConstructor": ('str',), + "QMetaObject.indexOfEnumerator": ('str',), + "QMetaObject.indexOfMethod": ('str',), + "QMetaObject.indexOfProperty": ('str',), + "QMetaObject.indexOfSignal": ('str',), + "QMetaObject.indexOfSlot": ('str',), + "QMetaObject.invokeMethod": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaObject.method": ('int',), + "QMetaObject.methodCount": (), + "QMetaObject.methodOffset": (), + "QMetaObject.newInstance": ('PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), + "QMetaObject.normalizedSignature": ('str',), + "QMetaObject.normalizedType": ('str',), + "QMetaObject.property": ('int',), + "QMetaObject.propertyCount": (), + "QMetaObject.propertyOffset": (), + "QMetaObject.superClass": (), + "QMetaObject.userProperty": (), + + # class PySide2.QtCore.QMetaProperty: + "QMetaProperty.__init__": [(), ('PySide2.QtCore.QMetaProperty',)], + "QMetaProperty.__copy__": (), + "QMetaProperty.enumerator": (), + "QMetaProperty.hasNotifySignal": (), + "QMetaProperty.hasStdCppSet": (), + "QMetaProperty.isConstant": (), + "QMetaProperty.isDesignable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEditable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEnumType": (), + "QMetaProperty.isFinal": (), + "QMetaProperty.isFlagType": (), + "QMetaProperty.isReadable": (), + "QMetaProperty.isResettable": (), + "QMetaProperty.isScriptable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isStored": ('PySide2.QtCore.QObject',), + "QMetaProperty.isUser": ('PySide2.QtCore.QObject',), + "QMetaProperty.isValid": (), + "QMetaProperty.isWritable": (), + "QMetaProperty.name": (), + "QMetaProperty.notifySignal": (), + "QMetaProperty.notifySignalIndex": (), + "QMetaProperty.propertyIndex": (), + "QMetaProperty.read": ('PySide2.QtCore.QObject',), + "QMetaProperty.readOnGadget": ('int',), + "QMetaProperty.reset": ('PySide2.QtCore.QObject',), + "QMetaProperty.resetOnGadget": ('int',), + "QMetaProperty.revision": (), + "QMetaProperty.type": (), + "QMetaProperty.typeName": (), + "QMetaProperty.userType": (), + "QMetaProperty.write": ('PySide2.QtCore.QObject', 'PySide2.support.signature.typing.Any'), + "QMetaProperty.writeOnGadget": ('int', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtCore.QMimeData: + "QMimeData.__init__": (), + "QMimeData.clear": (), + "QMimeData.colorData": (), + "QMimeData.data": ('str',), + "QMimeData.formats": (), + "QMimeData.hasColor": (), + "QMimeData.hasFormat": ('str',), + "QMimeData.hasHtml": (), + "QMimeData.hasImage": (), + "QMimeData.hasText": (), + "QMimeData.hasUrls": (), + "QMimeData.html": (), + "QMimeData.imageData": (), + "QMimeData.removeFormat": ('str',), + "QMimeData.retrieveData": ('str', 'type'), + "QMimeData.setColorData": ('PySide2.support.signature.typing.Any',), + "QMimeData.setData": ('str', 'PySide2.QtCore.QByteArray'), + "QMimeData.setHtml": ('str',), + "QMimeData.setImageData": ('PySide2.support.signature.typing.Any',), + "QMimeData.setText": ('str',), + "QMimeData.setUrls": ('list',), + "QMimeData.text": (), + "QMimeData.urls": (), + + # class PySide2.QtCore.QMimeDatabase: + "QMimeDatabase.__init__": (), + "QMimeDatabase.allMimeTypes": (), + "QMimeDatabase.mimeTypeForData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QMimeDatabase.mimeTypeForFile": [('PySide2.QtCore.QFileInfo', 'PySide2.QtCore.QMimeDatabase.MatchMode'), ('str', 'PySide2.QtCore.QMimeDatabase.MatchMode')], + "QMimeDatabase.mimeTypeForFileNameAndData": [('str', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QIODevice')], + "QMimeDatabase.mimeTypeForName": ('str',), + "QMimeDatabase.mimeTypeForUrl": ('PySide2.QtCore.QUrl',), + "QMimeDatabase.mimeTypesForFileName": ('str',), + "QMimeDatabase.suffixForFileName": ('str',), + + # class PySide2.QtCore.QMimeType: + "QMimeType.__init__": [(), ('PySide2.QtCore.QMimeType',)], + "QMimeType.__copy__": (), + "QMimeType.aliases": (), + "QMimeType.allAncestors": (), + "QMimeType.comment": (), + "QMimeType.filterString": (), + "QMimeType.genericIconName": (), + "QMimeType.globPatterns": (), + "QMimeType.iconName": (), + "QMimeType.inherits": ('str',), + "QMimeType.isDefault": (), + "QMimeType.isValid": (), + "QMimeType.name": (), + "QMimeType.parentMimeTypes": (), + "QMimeType.preferredSuffix": (), + "QMimeType.suffixes": (), + "QMimeType.swap": ('PySide2.QtCore.QMimeType',), + + # class PySide2.QtCore.QModelIndex: + "QModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',)], + "QModelIndex.__copy__": (), + "QModelIndex.child": ('int', 'int'), + "QModelIndex.column": (), + "QModelIndex.data": ('int',), + "QModelIndex.flags": (), + "QModelIndex.internalId": (), + "QModelIndex.internalPointer": (), + "QModelIndex.isValid": (), + "QModelIndex.model": (), + "QModelIndex.parent": (), + "QModelIndex.row": (), + "QModelIndex.sibling": ('int', 'int'), + + # class PySide2.QtCore.QMutex: + "QMutex.__init__": ('PySide2.QtCore.QMutex.RecursionMode',), + "QMutex.lock": (), + "QMutex.tryLock": [(), ('int',)], + "QMutex.unlock": (), + + # class PySide2.QtCore.QMutexLocker: + "QMutexLocker.__init__": ('PySide2.QtCore.QBasicMutex',), + "QMutexLocker.__enter__": (), + "QMutexLocker.__exit__": ('object', 'object', 'object'), + "QMutexLocker.mutex": (), + "QMutexLocker.relock": (), + "QMutexLocker.unlock": (), + + # class PySide2.QtCore.QObject: + "QObject.__init__": ('PySide2.QtCore.QObject',), + "QObject.blockSignals": ('bool',), + "QObject.childEvent": ('PySide2.QtCore.QChildEvent',), + "QObject.children": (), + "QObject.connect": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'PySide2.support.signature.typing.Callable', 'PySide2.QtCore.Qt.ConnectionType')], + "QObject.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.customEvent": ('PySide2.QtCore.QEvent',), + "QObject.deleteLater": (), + "QObject.disconnect": [('PySide2.QtCore.Connection',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Callable'), ('str', 'PySide2.QtCore.QObject', 'str'), ('str', 'PySide2.support.signature.typing.Callable')], + "QObject.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.dumpObjectInfo": (), + "QObject.dumpObjectTree": (), + "QObject.dynamicPropertyNames": (), + "QObject.emit": ('str', '...'), + "QObject.event": ('PySide2.QtCore.QEvent',), + "QObject.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QObject.findChild": ('type', 'str'), + "QObject.findChildren": [('type', 'PySide2.QtCore.QRegExp'), ('type', 'str')], + "QObject.inherits": ('str',), + "QObject.installEventFilter": ('PySide2.QtCore.QObject',), + "QObject.isSignalConnected": ('PySide2.QtCore.QMetaMethod',), + "QObject.isWidgetType": (), + "QObject.isWindowType": (), + "QObject.killTimer": ('int',), + "QObject.metaObject": (), + "QObject.moveToThread": ('PySide2.QtCore.QThread',), + "QObject.objectName": (), + "QObject.parent": (), + "QObject.property": ('str',), + "QObject.receivers": ('str',), + "QObject.registerUserData": (), + "QObject.removeEventFilter": ('PySide2.QtCore.QObject',), + "QObject.sender": (), + "QObject.senderSignalIndex": (), + "QObject.setObjectName": ('str',), + "QObject.setParent": ('PySide2.QtCore.QObject',), + "QObject.setProperty": ('str', 'PySide2.support.signature.typing.Any'), + "QObject.signalsBlocked": (), + "QObject.startTimer": ('int', 'PySide2.QtCore.Qt.TimerType'), + "QObject.thread": (), + "QObject.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QObject.tr": ('str', 'str', 'int'), + + # class PySide2.QtCore.QParallelAnimationGroup: + "QParallelAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QParallelAnimationGroup.duration": (), + "QParallelAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QParallelAnimationGroup.updateCurrentTime": ('int',), + "QParallelAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QParallelAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QPauseAnimation: + "QPauseAnimation.__init__": [('PySide2.QtCore.QObject',), ('int', 'PySide2.QtCore.QObject')], + "QPauseAnimation.duration": (), + "QPauseAnimation.event": ('PySide2.QtCore.QEvent',), + "QPauseAnimation.setDuration": ('int',), + "QPauseAnimation.updateCurrentTime": ('int',), + + # class PySide2.QtCore.QPersistentModelIndex: + "QPersistentModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QPersistentModelIndex',)], + "QPersistentModelIndex.__copy__": (), + "QPersistentModelIndex.child": ('int', 'int'), + "QPersistentModelIndex.column": (), + "QPersistentModelIndex.data": ('int',), + "QPersistentModelIndex.flags": (), + "QPersistentModelIndex.internalId": (), + "QPersistentModelIndex.internalPointer": (), + "QPersistentModelIndex.isValid": (), + "QPersistentModelIndex.model": (), + "QPersistentModelIndex.parent": (), + "QPersistentModelIndex.row": (), + "QPersistentModelIndex.sibling": ('int', 'int'), + "QPersistentModelIndex.swap": ('PySide2.QtCore.QPersistentModelIndex',), + + # class PySide2.QtCore.QPluginLoader: + "QPluginLoader.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QPluginLoader.errorString": (), + "QPluginLoader.fileName": (), + "QPluginLoader.instance": (), + "QPluginLoader.isLoaded": (), + "QPluginLoader.load": (), + "QPluginLoader.metaData": (), + "QPluginLoader.setFileName": ('str',), + "QPluginLoader.staticInstances": (), + "QPluginLoader.unload": (), + + # class PySide2.QtCore.QPoint: + "QPoint.__init__": [(), ('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPoint.__copy__": (), + "QPoint.__reduce__": (), + "QPoint.dotProduct": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QPoint.isNull": (), + "QPoint.manhattanLength": (), + "QPoint.setX": ('int',), + "QPoint.setY": ('int',), + "QPoint.toTuple": (), + "QPoint.x": (), + "QPoint.y": (), + + # class PySide2.QtCore.QPointF: + "QPointF.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPointF.__copy__": (), + "QPointF.__reduce__": (), + "QPointF.dotProduct": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QPointF.isNull": (), + "QPointF.manhattanLength": (), + "QPointF.setX": ('float',), + "QPointF.setY": ('float',), + "QPointF.toPoint": (), + "QPointF.toTuple": (), + "QPointF.x": (), + "QPointF.y": (), + + # class PySide2.QtCore.QProcess: + "QProcess.__init__": ('PySide2.QtCore.QObject',), + "QProcess.arguments": (), + "QProcess.atEnd": (), + "QProcess.bytesAvailable": (), + "QProcess.bytesToWrite": (), + "QProcess.canReadLine": (), + "QProcess.close": (), + "QProcess.closeReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.closeWriteChannel": (), + "QProcess.environment": (), + "QProcess.execute": [('str',), ('str', 'PySide2.support.signature.typing.List')], + "QProcess.exitCode": (), + "QProcess.exitStatus": (), + "QProcess.inputChannelMode": (), + "QProcess.isSequential": (), + "QProcess.kill": (), + "QProcess.nativeArguments": (), + "QProcess.nullDevice": (), + "QProcess.open": ('OpenMode',), + "QProcess.pid": (), + "QProcess.processChannelMode": (), + "QProcess.processEnvironment": (), + "QProcess.processId": (), + "QProcess.program": (), + "QProcess.readAllStandardError": (), + "QProcess.readAllStandardOutput": (), + "QProcess.readChannel": (), + "QProcess.readData": ('str', 'int'), + "QProcess.setArguments": ('PySide2.support.signature.typing.List',), + "QProcess.setEnvironment": ('PySide2.support.signature.typing.List',), + "QProcess.setInputChannelMode": ('PySide2.QtCore.QProcess.InputChannelMode',), + "QProcess.setNativeArguments": ('str',), + "QProcess.setProcessChannelMode": ('PySide2.QtCore.QProcess.ProcessChannelMode',), + "QProcess.setProcessEnvironment": ('PySide2.QtCore.QProcessEnvironment',), + "QProcess.setProcessState": ('PySide2.QtCore.QProcess.ProcessState',), + "QProcess.setProgram": ('str',), + "QProcess.setReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.setStandardErrorFile": ('str', 'OpenMode'), + "QProcess.setStandardInputFile": ('str',), + "QProcess.setStandardOutputFile": ('str', 'OpenMode'), + "QProcess.setStandardOutputProcess": ('PySide2.QtCore.QProcess',), + "QProcess.setWorkingDirectory": ('str',), + "QProcess.setupChildProcess": (), + "QProcess.start": [('OpenMode',), ('str', 'OpenMode'), ('str', 'PySide2.support.signature.typing.List', 'OpenMode')], + "QProcess.startDetached": [('str',), ('str', 'PySide2.support.signature.typing.List', 'str', 'int')], + "QProcess.state": (), + "QProcess.systemEnvironment": (), + "QProcess.terminate": (), + "QProcess.waitForBytesWritten": ('int',), + "QProcess.waitForFinished": ('int',), + "QProcess.waitForReadyRead": ('int',), + "QProcess.waitForStarted": ('int',), + "QProcess.workingDirectory": (), + "QProcess.writeData": ('str', 'int'), + + # class PySide2.QtCore.QProcessEnvironment: + "QProcessEnvironment.__init__": [(), ('PySide2.QtCore.QProcessEnvironment',)], + "QProcessEnvironment.__copy__": (), + "QProcessEnvironment.clear": (), + "QProcessEnvironment.contains": ('str',), + "QProcessEnvironment.insert": [('PySide2.QtCore.QProcessEnvironment',), ('str', 'str')], + "QProcessEnvironment.isEmpty": (), + "QProcessEnvironment.keys": (), + "QProcessEnvironment.remove": ('str',), + "QProcessEnvironment.swap": ('PySide2.QtCore.QProcessEnvironment',), + "QProcessEnvironment.systemEnvironment": (), + "QProcessEnvironment.toStringList": (), + "QProcessEnvironment.value": ('str', 'str'), + + # class PySide2.QtCore.QPropertyAnimation: + "QPropertyAnimation.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QPropertyAnimation.event": ('PySide2.QtCore.QEvent',), + "QPropertyAnimation.propertyName": (), + "QPropertyAnimation.setPropertyName": ('PySide2.QtCore.QByteArray',), + "QPropertyAnimation.setTargetObject": ('PySide2.QtCore.QObject',), + "QPropertyAnimation.targetObject": (), + "QPropertyAnimation.updateCurrentValue": ('PySide2.support.signature.typing.Any',), + "QPropertyAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QReadLocker: + "QReadLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QReadLocker.__enter__": (), + "QReadLocker.__exit__": ('object', 'object', 'object'), + "QReadLocker.readWriteLock": (), + "QReadLocker.relock": (), + "QReadLocker.unlock": (), + + # class PySide2.QtCore.QReadWriteLock: + "QReadWriteLock.__init__": ('PySide2.QtCore.QReadWriteLock.RecursionMode',), + "QReadWriteLock.lockForRead": (), + "QReadWriteLock.lockForWrite": (), + "QReadWriteLock.tryLockForRead": [(), ('int',)], + "QReadWriteLock.tryLockForWrite": [(), ('int',)], + "QReadWriteLock.unlock": (), + + # class PySide2.QtCore.QRect: + "QRect.__init__": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QSize'), ('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRect.__copy__": (), + "QRect.__reduce__": (), + "QRect.adjust": ('int', 'int', 'int', 'int'), + "QRect.adjusted": ('int', 'int', 'int', 'int'), + "QRect.bottom": (), + "QRect.bottomLeft": (), + "QRect.bottomRight": (), + "QRect.center": (), + "QRect.contains": [('PySide2.QtCore.QPoint', 'bool'), ('PySide2.QtCore.QRect', 'bool'), ('int', 'int'), ('int', 'int', 'bool')], + "QRect.getCoords": ('int', 'int', 'int', 'int'), + "QRect.getRect": ('int', 'int', 'int', 'int'), + "QRect.height": (), + "QRect.intersected": ('PySide2.QtCore.QRect',), + "QRect.intersects": ('PySide2.QtCore.QRect',), + "QRect.isEmpty": (), + "QRect.isNull": (), + "QRect.isValid": (), + "QRect.left": (), + "QRect.marginsAdded": ('PySide2.QtCore.QMargins',), + "QRect.marginsRemoved": ('PySide2.QtCore.QMargins',), + "QRect.moveBottom": ('int',), + "QRect.moveBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.moveCenter": ('PySide2.QtCore.QPoint',), + "QRect.moveLeft": ('int',), + "QRect.moveRight": ('int',), + "QRect.moveTo": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.moveTop": ('int',), + "QRect.moveTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveTopRight": ('PySide2.QtCore.QPoint',), + "QRect.normalized": (), + "QRect.right": (), + "QRect.setBottom": ('int',), + "QRect.setBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.setBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.setCoords": ('int', 'int', 'int', 'int'), + "QRect.setHeight": ('int',), + "QRect.setLeft": ('int',), + "QRect.setRect": ('int', 'int', 'int', 'int'), + "QRect.setRight": ('int',), + "QRect.setSize": ('PySide2.QtCore.QSize',), + "QRect.setTop": ('int',), + "QRect.setTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.setTopRight": ('PySide2.QtCore.QPoint',), + "QRect.setWidth": ('int',), + "QRect.setX": ('int',), + "QRect.setY": ('int',), + "QRect.size": (), + "QRect.top": (), + "QRect.topLeft": (), + "QRect.topRight": (), + "QRect.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.united": ('PySide2.QtCore.QRect',), + "QRect.width": (), + "QRect.x": (), + "QRect.y": (), + + # class PySide2.QtCore.QRectF: + "QRectF.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QSizeF'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QRectF.__copy__": (), + "QRectF.__reduce__": (), + "QRectF.adjust": ('float', 'float', 'float', 'float'), + "QRectF.adjusted": ('float', 'float', 'float', 'float'), + "QRectF.bottom": (), + "QRectF.bottomLeft": (), + "QRectF.bottomRight": (), + "QRectF.center": (), + "QRectF.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('float', 'float')], + "QRectF.getCoords": ('float', 'float', 'float', 'float'), + "QRectF.getRect": ('float', 'float', 'float', 'float'), + "QRectF.height": (), + "QRectF.intersected": ('PySide2.QtCore.QRectF',), + "QRectF.intersects": ('PySide2.QtCore.QRectF',), + "QRectF.isEmpty": (), + "QRectF.isNull": (), + "QRectF.isValid": (), + "QRectF.left": (), + "QRectF.marginsAdded": ('PySide2.QtCore.QMarginsF',), + "QRectF.marginsRemoved": ('PySide2.QtCore.QMarginsF',), + "QRectF.moveBottom": ('float',), + "QRectF.moveBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.moveCenter": ('PySide2.QtCore.QPointF',), + "QRectF.moveLeft": ('float',), + "QRectF.moveRight": ('float',), + "QRectF.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.moveTop": ('float',), + "QRectF.moveTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.normalized": (), + "QRectF.right": (), + "QRectF.setBottom": ('float',), + "QRectF.setBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.setCoords": ('float', 'float', 'float', 'float'), + "QRectF.setHeight": ('float',), + "QRectF.setLeft": ('float',), + "QRectF.setRect": ('float', 'float', 'float', 'float'), + "QRectF.setRight": ('float',), + "QRectF.setSize": ('PySide2.QtCore.QSizeF',), + "QRectF.setTop": ('float',), + "QRectF.setTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.setWidth": ('float',), + "QRectF.setX": ('float',), + "QRectF.setY": ('float',), + "QRectF.size": (), + "QRectF.toAlignedRect": (), + "QRectF.toRect": (), + "QRectF.top": (), + "QRectF.topLeft": (), + "QRectF.topRight": (), + "QRectF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.united": ('PySide2.QtCore.QRectF',), + "QRectF.width": (), + "QRectF.x": (), + "QRectF.y": (), + + # class PySide2.QtCore.QRegExp: + "QRegExp.__init__": [(), ('PySide2.QtCore.QRegExp',), ('str', 'PySide2.QtCore.Qt.CaseSensitivity', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QRegExp.__copy__": (), + "QRegExp.__reduce__": (), + "QRegExp.cap": ['int'], + "QRegExp.captureCount": (), + "QRegExp.capturedTexts": [], + "QRegExp.caseSensitivity": (), + "QRegExp.errorString": [], + "QRegExp.escape": ('str',), + "QRegExp.exactMatch": ('str',), + "QRegExp.indexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.isEmpty": (), + "QRegExp.isMinimal": (), + "QRegExp.isValid": (), + "QRegExp.lastIndexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.matchedLength": (), + "QRegExp.pattern": (), + "QRegExp.patternSyntax": (), + "QRegExp.pos": ['int'], + "QRegExp.replace": ('str', 'str'), + "QRegExp.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QRegExp.setMinimal": ('bool',), + "QRegExp.setPattern": ('str',), + "QRegExp.setPatternSyntax": ('PySide2.QtCore.QRegExp.PatternSyntax',), + "QRegExp.swap": ('PySide2.QtCore.QRegExp',), + + # class PySide2.QtCore.QResource: + "QResource.__init__": ('str', 'PySide2.QtCore.QLocale'), + "QResource.absoluteFilePath": (), + "QResource.addSearchPath": ('str',), + "QResource.children": (), + "QResource.data": (), + "QResource.fileName": (), + "QResource.isCompressed": (), + "QResource.isDir": (), + "QResource.isFile": (), + "QResource.isValid": (), + "QResource.locale": (), + "QResource.registerResource": ('str', 'str'), + "QResource.registerResourceData": ('PySide2.support.signature.typing.Union[str, int]', 'str'), + "QResource.searchPaths": (), + "QResource.setFileName": ('str',), + "QResource.setLocale": ('PySide2.QtCore.QLocale',), + "QResource.size": (), + "QResource.unregisterResource": ('str', 'str'), + "QResource.unregisterResourceData": ('PySide2.support.signature.typing.Union[str, int]', 'str'), + + # class PySide2.QtCore.QRunnable: + "QRunnable.__init__": (), + "QRunnable.autoDelete": (), + "QRunnable.run": (), + "QRunnable.setAutoDelete": ('bool',), + + # class PySide2.QtCore.QSaveFile: + "QSaveFile.__init__": [('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QSaveFile.cancelWriting": (), + "QSaveFile.close": (), + "QSaveFile.commit": (), + "QSaveFile.directWriteFallback": (), + "QSaveFile.fileName": (), + "QSaveFile.open": ('OpenMode',), + "QSaveFile.setDirectWriteFallback": ('bool',), + "QSaveFile.setFileName": ('str',), + "QSaveFile.writeData": ('str', 'int'), + + # class PySide2.QtCore.QSemaphore: + "QSemaphore.__init__": ('int',), + "QSemaphore.acquire": ('int',), + "QSemaphore.available": (), + "QSemaphore.release": ('int',), + "QSemaphore.tryAcquire": [('int',), ('int', 'int')], + + # class PySide2.QtCore.QSequentialAnimationGroup: + "QSequentialAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QSequentialAnimationGroup.addPause": ('int',), + "QSequentialAnimationGroup.currentAnimation": (), + "QSequentialAnimationGroup.duration": (), + "QSequentialAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QSequentialAnimationGroup.insertPause": ('int', 'int'), + "QSequentialAnimationGroup.updateCurrentTime": ('int',), + "QSequentialAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QSequentialAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QSettings: + "QSettings.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QObject'), ('str', 'str', 'PySide2.QtCore.QObject')], + "QSettings.allKeys": (), + "QSettings.applicationName": (), + "QSettings.beginGroup": ('str',), + "QSettings.beginReadArray": ('str',), + "QSettings.beginWriteArray": ('str', 'int'), + "QSettings.childGroups": (), + "QSettings.childKeys": (), + "QSettings.clear": (), + "QSettings.contains": ('str',), + "QSettings.defaultFormat": (), + "QSettings.endArray": (), + "QSettings.endGroup": (), + "QSettings.event": ('PySide2.QtCore.QEvent',), + "QSettings.fallbacksEnabled": (), + "QSettings.fileName": (), + "QSettings.format": (), + "QSettings.group": (), + "QSettings.iniCodec": (), + "QSettings.isWritable": (), + "QSettings.organizationName": (), + "QSettings.remove": ('str',), + "QSettings.scope": (), + "QSettings.setArrayIndex": ('int',), + "QSettings.setDefaultFormat": ('PySide2.QtCore.QSettings.Format',), + "QSettings.setFallbacksEnabled": ('bool',), + "QSettings.setIniCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QSettings.setPath": ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str'), + "QSettings.setValue": ('str', 'PySide2.support.signature.typing.Any'), + "QSettings.status": (), + "QSettings.sync": (), + "QSettings.value": ('str', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtCore.QSignalMapper: + "QSignalMapper.__init__": ('PySide2.QtCore.QObject',), + "QSignalMapper.map": [(), ('PySide2.QtCore.QObject',)], + "QSignalMapper.mapping": [('PySide2.QtCore.QObject',), ('int',), ('str',)], + "QSignalMapper.removeMappings": ('PySide2.QtCore.QObject',), + "QSignalMapper.setMapping": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + + # class PySide2.QtCore.QSignalTransition: + "QSignalTransition.__init__": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',), ('object', 'PySide2.QtCore.QState')], + "QSignalTransition.event": ('PySide2.QtCore.QEvent',), + "QSignalTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QSignalTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QSignalTransition.senderObject": (), + "QSignalTransition.setSenderObject": ('PySide2.QtCore.QObject',), + "QSignalTransition.setSignal": ('PySide2.QtCore.QByteArray',), + "QSignalTransition.signal": (), + + # class PySide2.QtCore.QSize: + "QSize.__init__": [(), ('PySide2.QtCore.QSize',), ('int', 'int')], + "QSize.__copy__": (), + "QSize.__reduce__": (), + "QSize.boundedTo": ('PySide2.QtCore.QSize',), + "QSize.expandedTo": ('PySide2.QtCore.QSize',), + "QSize.height": (), + "QSize.isEmpty": (), + "QSize.isNull": (), + "QSize.isValid": (), + "QSize.scale": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.setHeight": ('int',), + "QSize.setWidth": ('int',), + "QSize.toTuple": (), + "QSize.transpose": (), + "QSize.transposed": (), + "QSize.width": (), + + # class PySide2.QtCore.QSizeF: + "QSizeF.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QSizeF.__copy__": (), + "QSizeF.__reduce__": (), + "QSizeF.boundedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.expandedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.height": (), + "QSizeF.isEmpty": (), + "QSizeF.isNull": (), + "QSizeF.isValid": (), + "QSizeF.scale": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.scaled": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.setHeight": ('float',), + "QSizeF.setWidth": ('float',), + "QSizeF.toSize": (), + "QSizeF.toTuple": (), + "QSizeF.transpose": (), + "QSizeF.transposed": (), + "QSizeF.width": (), + + # class PySide2.QtCore.QSocketNotifier: + "QSocketNotifier.__init__": [('int', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject'), ('object', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject')], + "QSocketNotifier.event": ('PySide2.QtCore.QEvent',), + "QSocketNotifier.isEnabled": (), + "QSocketNotifier.setEnabled": ('bool',), + "QSocketNotifier.socket": (), + "QSocketNotifier.type": (), + + # class PySide2.QtCore.QSortFilterProxyModel: + "QSortFilterProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QSortFilterProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSortFilterProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.dynamicSortFilter": (), + "QSortFilterProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.filterAcceptsColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterAcceptsRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterCaseSensitivity": (), + "QSortFilterProxyModel.filterKeyColumn": (), + "QSortFilterProxyModel.filterRegExp": (), + "QSortFilterProxyModel.filterRole": (), + "QSortFilterProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSortFilterProxyModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.invalidate": (), + "QSortFilterProxyModel.invalidateFilter": (), + "QSortFilterProxyModel.isSortLocaleAware": (), + "QSortFilterProxyModel.lessThan": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.support.signature.typing.Any', 'int', 'MatchFlags'), + "QSortFilterProxyModel.mimeData": ('PySide2.support.signature.typing.List',), + "QSortFilterProxyModel.mimeTypes": (), + "QSortFilterProxyModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QSortFilterProxyModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QSortFilterProxyModel.setDynamicSortFilter": ('bool',), + "QSortFilterProxyModel.setFilterCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setFilterFixedString": ('str',), + "QSortFilterProxyModel.setFilterKeyColumn": ('int',), + "QSortFilterProxyModel.setFilterRegExp": [('PySide2.QtCore.QRegExp',), ('str',)], + "QSortFilterProxyModel.setFilterRole": ('int',), + "QSortFilterProxyModel.setFilterWildcard": ('str',), + "QSortFilterProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QSortFilterProxyModel.setSortCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setSortLocaleAware": ('bool',), + "QSortFilterProxyModel.setSortRole": ('int',), + "QSortFilterProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QSortFilterProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSortFilterProxyModel.sortCaseSensitivity": (), + "QSortFilterProxyModel.sortColumn": (), + "QSortFilterProxyModel.sortOrder": (), + "QSortFilterProxyModel.sortRole": (), + "QSortFilterProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QStandardPaths: + "QStandardPaths.writableLocation": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.displayName": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.enableTestMode": ('bool',), + "QStandardPaths.findExecutable": ('str', 'PySide2.support.signature.typing.List'), + "QStandardPaths.isTestModeEnabled": (), + "QStandardPaths.locate": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'LocateOptions'), + "QStandardPaths.locateAll": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'LocateOptions'), + "QStandardPaths.setTestModeEnabled": ('bool',), + "QStandardPaths.standardLocations": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + + # class PySide2.QtCore.QState: + "QState.__init__": [('PySide2.QtCore.QState',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QState')], + "QState.addTransition": [('PySide2.QtCore.QAbstractState',), ('PySide2.QtCore.QAbstractTransition',), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QAbstractState'), ('object', 'PySide2.QtCore.QAbstractState')], + "QState.assignProperty": ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Any'), + "QState.childMode": (), + "QState.errorState": (), + "QState.event": ('PySide2.QtCore.QEvent',), + "QState.initialState": (), + "QState.onEntry": ('PySide2.QtCore.QEvent',), + "QState.onExit": ('PySide2.QtCore.QEvent',), + "QState.removeTransition": ('PySide2.QtCore.QAbstractTransition',), + "QState.setChildMode": ('PySide2.QtCore.QState.ChildMode',), + "QState.setErrorState": ('PySide2.QtCore.QAbstractState',), + "QState.setInitialState": ('PySide2.QtCore.QAbstractState',), + "QState.transitions": (), + + # class PySide2.QtCore.QStateMachine: + "QStateMachine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QObject')], + "QStateMachine.addDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.addState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.beginMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.beginSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.cancelDelayedEvent": ('int',), + "QStateMachine.clearError": (), + "QStateMachine.configuration": [], + "QStateMachine.defaultAnimations": (), + "QStateMachine.endMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.endSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.error": (), + "QStateMachine.errorString": (), + "QStateMachine.event": ('PySide2.QtCore.QEvent',), + "QStateMachine.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStateMachine.globalRestorePolicy": (), + "QStateMachine.isAnimated": (), + "QStateMachine.isRunning": (), + "QStateMachine.onEntry": ('PySide2.QtCore.QEvent',), + "QStateMachine.onExit": ('PySide2.QtCore.QEvent',), + "QStateMachine.postDelayedEvent": ('PySide2.QtCore.QEvent', 'int'), + "QStateMachine.postEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QStateMachine.EventPriority'), + "QStateMachine.removeDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.removeState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.setAnimated": ('bool',), + "QStateMachine.setGlobalRestorePolicy": ('PySide2.QtCore.QState.RestorePolicy',), + "QStateMachine.setRunning": ('bool',), + "QStateMachine.start": (), + "QStateMachine.stop": (), + + # class PySide2.QtCore.QStorageInfo: + "QStorageInfo.__init__": [(), ('PySide2.QtCore.QDir',), ('PySide2.QtCore.QStorageInfo',), ('str',)], + "QStorageInfo.__copy__": (), + "QStorageInfo.blockSize": (), + "QStorageInfo.bytesAvailable": (), + "QStorageInfo.bytesFree": (), + "QStorageInfo.bytesTotal": (), + "QStorageInfo.device": (), + "QStorageInfo.displayName": (), + "QStorageInfo.fileSystemType": (), + "QStorageInfo.isReadOnly": (), + "QStorageInfo.isReady": (), + "QStorageInfo.isRoot": (), + "QStorageInfo.isValid": (), + "QStorageInfo.mountedVolumes": (), + "QStorageInfo.name": (), + "QStorageInfo.refresh": (), + "QStorageInfo.root": (), + "QStorageInfo.rootPath": (), + "QStorageInfo.setPath": ('str',), + "QStorageInfo.swap": ('PySide2.QtCore.QStorageInfo',), + + # class PySide2.QtCore.QSysInfo: + "QSysInfo.__init__": (), + "QSysInfo.buildAbi": (), + "QSysInfo.buildCpuArchitecture": (), + "QSysInfo.currentCpuArchitecture": (), + "QSysInfo.kernelType": (), + "QSysInfo.kernelVersion": (), + "QSysInfo.machineHostName": (), + "QSysInfo.prettyProductName": (), + "QSysInfo.productType": (), + "QSysInfo.productVersion": (), + "QSysInfo.windowsVersion": (), + + # class PySide2.QtCore.QSystemSemaphore: + "QSystemSemaphore.__init__": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + "QSystemSemaphore.acquire": (), + "QSystemSemaphore.error": (), + "QSystemSemaphore.errorString": (), + "QSystemSemaphore.key": (), + "QSystemSemaphore.release": ('int',), + "QSystemSemaphore.setKey": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + + # class PySide2.QtCore.QTemporaryDir: + "QTemporaryDir.__init__": [(), ('str',)], + "QTemporaryDir.autoRemove": (), + "QTemporaryDir.errorString": (), + "QTemporaryDir.isValid": (), + "QTemporaryDir.path": (), + "QTemporaryDir.remove": (), + "QTemporaryDir.setAutoRemove": ('bool',), + + # class PySide2.QtCore.QTemporaryFile: + "QTemporaryFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QTemporaryFile.autoRemove": (), + "QTemporaryFile.createLocalFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.createNativeFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.fileName": (), + "QTemporaryFile.fileTemplate": (), + "QTemporaryFile.open": [(), ('OpenMode',)], + "QTemporaryFile.setAutoRemove": ('bool',), + "QTemporaryFile.setFileTemplate": ('str',), + + # class PySide2.QtCore.QTextBoundaryFinder: + "QTextBoundaryFinder.__init__": [(), ('PySide2.QtCore.QTextBoundaryFinder',), ('PySide2.QtCore.QTextBoundaryFinder.BoundaryType', 'str')], + "QTextBoundaryFinder.__copy__": (), + "QTextBoundaryFinder.boundaryReasons": (), + "QTextBoundaryFinder.isAtBoundary": (), + "QTextBoundaryFinder.isValid": (), + "QTextBoundaryFinder.position": (), + "QTextBoundaryFinder.setPosition": ('int',), + "QTextBoundaryFinder.string": (), + "QTextBoundaryFinder.toEnd": (), + "QTextBoundaryFinder.toNextBoundary": (), + "QTextBoundaryFinder.toPreviousBoundary": (), + "QTextBoundaryFinder.toStart": (), + "QTextBoundaryFinder.type": (), + + # class PySide2.QtCore.QTextCodec: + "QTextCodec.__init__": (), + "QTextCodec.aliases": (), + "QTextCodec.availableCodecs": (), + "QTextCodec.availableMibs": (), + "QTextCodec.canEncode": [('PySide2.support.signature.typing.Union[str, int]',), ('str',)], + "QTextCodec.codecForHtml": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.codecForLocale": (), + "QTextCodec.codecForMib": ('int',), + "QTextCodec.codecForName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QTextCodec.codecForUtfText": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.convertToUnicode": ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState'), + "QTextCodec.fromUnicode": ('str',), + "QTextCodec.makeDecoder": ('ConversionFlags',), + "QTextCodec.makeEncoder": ('ConversionFlags',), + "QTextCodec.mibEnum": (), + "QTextCodec.name": (), + "QTextCodec.setCodecForLocale": ('PySide2.QtCore.QTextCodec',), + "QTextCodec.toUnicode": [('PySide2.QtCore.QByteArray',), ('str',), ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState')], + + # class PySide2.QtCore.QTextDecoder: + "QTextDecoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'ConversionFlags')], + "QTextDecoder.hasFailure": (), + "QTextDecoder.toUnicode": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QTextEncoder: + "QTextEncoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'ConversionFlags')], + "QTextEncoder.fromUnicode": ('str',), + "QTextEncoder.hasFailure": (), + + # class PySide2.QtCore.QTextStream: + "QTextStream.__init__": [(), ('PySide2.QtCore.QByteArray', 'OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QTextStream.atEnd": (), + "QTextStream.autoDetectUnicode": (), + "QTextStream.codec": (), + "QTextStream.device": (), + "QTextStream.fieldAlignment": (), + "QTextStream.fieldWidth": (), + "QTextStream.flush": (), + "QTextStream.generateByteOrderMark": (), + "QTextStream.integerBase": (), + "QTextStream.locale": (), + "QTextStream.numberFlags": (), + "QTextStream.padChar": (), + "QTextStream.pos": (), + "QTextStream.read": ('int',), + "QTextStream.readAll": (), + "QTextStream.readLine": ('int',), + "QTextStream.realNumberNotation": (), + "QTextStream.realNumberPrecision": (), + "QTextStream.reset": (), + "QTextStream.resetStatus": (), + "QTextStream.seek": ('int',), + "QTextStream.setAutoDetectUnicode": ('bool',), + "QTextStream.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QTextStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextStream.setFieldAlignment": ('PySide2.QtCore.QTextStream.FieldAlignment',), + "QTextStream.setFieldWidth": ('int',), + "QTextStream.setGenerateByteOrderMark": ('bool',), + "QTextStream.setIntegerBase": ('int',), + "QTextStream.setLocale": ('PySide2.QtCore.QLocale',), + "QTextStream.setNumberFlags": ('NumberFlags',), + "QTextStream.setPadChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QTextStream.setRealNumberNotation": ('PySide2.QtCore.QTextStream.RealNumberNotation',), + "QTextStream.setRealNumberPrecision": ('int',), + "QTextStream.setStatus": ('PySide2.QtCore.QTextStream.Status',), + "QTextStream.skipWhiteSpace": (), + "QTextStream.status": (), + "QTextStream.string": (), + + # class PySide2.QtCore.QTextStreamManipulator: + "QTextStreamManipulator.exec_": ('PySide2.QtCore.QTextStream',), + "QTextStreamManipulator.__copy__": (), + + # class PySide2.QtCore.QThread: + "QThread.__init__": ('PySide2.QtCore.QObject',), + "QThread.currentThread": (), + "QThread.event": ('PySide2.QtCore.QEvent',), + "QThread.eventDispatcher": (), + "QThread.exec_": (), + "QThread.exit": ('int',), + "QThread.idealThreadCount": (), + "QThread.isFinished": (), + "QThread.isInterruptionRequested": (), + "QThread.isRunning": (), + "QThread.loopLevel": (), + "QThread.msleep": ('int',), + "QThread.priority": (), + "QThread.quit": (), + "QThread.requestInterruption": (), + "QThread.run": (), + "QThread.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QThread.setPriority": ('PySide2.QtCore.QThread.Priority',), + "QThread.setStackSize": ('int',), + "QThread.setTerminationEnabled": ('bool',), + "QThread.sleep": ('int',), + "QThread.stackSize": (), + "QThread.start": ('PySide2.QtCore.QThread.Priority',), + "QThread.terminate": (), + "QThread.usleep": ('int',), + "QThread.wait": ('int',), + "QThread.yieldCurrentThread": (), + + # class PySide2.QtCore.QThreadPool: + "QThreadPool.__init__": ('PySide2.QtCore.QObject',), + "QThreadPool.activeThreadCount": (), + "QThreadPool.cancel": ('PySide2.QtCore.QRunnable',), + "QThreadPool.clear": (), + "QThreadPool.expiryTimeout": (), + "QThreadPool.globalInstance": (), + "QThreadPool.maxThreadCount": (), + "QThreadPool.releaseThread": (), + "QThreadPool.reserveThread": (), + "QThreadPool.setExpiryTimeout": ('int',), + "QThreadPool.setMaxThreadCount": ('int',), + "QThreadPool.start": ('PySide2.QtCore.QRunnable', 'int'), + "QThreadPool.tryStart": ('PySide2.QtCore.QRunnable',), + "QThreadPool.waitForDone": ('int',), + + # class PySide2.QtCore.QTime: + "QTime.__init__": [(), ('PySide2.QtCore.QTime',), ('int', 'int', 'int', 'int')], + "QTime.__copy__": (), + "QTime.__reduce__": (), + "QTime.addMSecs": ('int',), + "QTime.addSecs": ('int',), + "QTime.currentTime": (), + "QTime.elapsed": (), + "QTime.fromMSecsSinceStartOfDay": ('int',), + "QTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QTime.hour": (), + "QTime.isNull": (), + "QTime.isValid": [(), ('int', 'int', 'int', 'int')], + "QTime.minute": (), + "QTime.msec": (), + "QTime.msecsSinceStartOfDay": (), + "QTime.msecsTo": ('PySide2.QtCore.QTime',), + "QTime.restart": (), + "QTime.second": (), + "QTime.secsTo": ('PySide2.QtCore.QTime',), + "QTime.setHMS": ('int', 'int', 'int', 'int'), + "QTime.start": (), + "QTime.toPython": (), + "QTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + + # class PySide2.QtCore.QTimeLine: + "QTimeLine.__init__": ('int', 'PySide2.QtCore.QObject'), + "QTimeLine.currentFrame": (), + "QTimeLine.currentTime": (), + "QTimeLine.currentValue": (), + "QTimeLine.curveShape": (), + "QTimeLine.direction": (), + "QTimeLine.duration": (), + "QTimeLine.easingCurve": (), + "QTimeLine.endFrame": (), + "QTimeLine.frameForTime": ('int',), + "QTimeLine.loopCount": (), + "QTimeLine.resume": (), + "QTimeLine.setCurrentTime": ('int',), + "QTimeLine.setCurveShape": ('PySide2.QtCore.QTimeLine.CurveShape',), + "QTimeLine.setDirection": ('PySide2.QtCore.QTimeLine.Direction',), + "QTimeLine.setDuration": ('int',), + "QTimeLine.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QTimeLine.setEndFrame": ('int',), + "QTimeLine.setFrameRange": ('int', 'int'), + "QTimeLine.setLoopCount": ('int',), + "QTimeLine.setPaused": ('bool',), + "QTimeLine.setStartFrame": ('int',), + "QTimeLine.setUpdateInterval": ('int',), + "QTimeLine.start": (), + "QTimeLine.startFrame": (), + "QTimeLine.state": (), + "QTimeLine.stop": (), + "QTimeLine.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimeLine.toggleDirection": (), + "QTimeLine.updateInterval": (), + "QTimeLine.valueForTime": ('int',), + + # class PySide2.QtCore.QTimeZone: + "QTimeZone.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'int', 'str', 'str', 'PySide2.QtCore.QLocale.Country', 'str'), ('PySide2.QtCore.QTimeZone',), ('int',)], + "QTimeZone.__copy__": (), + "QTimeZone.abbreviation": ('PySide2.QtCore.QDateTime',), + "QTimeZone.availableTimeZoneIds": [(), ('PySide2.QtCore.QLocale.Country',), ('int',)], + "QTimeZone.comment": (), + "QTimeZone.country": (), + "QTimeZone.daylightTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.displayName": [('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale'), ('PySide2.QtCore.QTimeZone.TimeType', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale')], + "QTimeZone.hasDaylightTime": (), + "QTimeZone.hasTransitions": (), + "QTimeZone.ianaIdToWindowsId": ('PySide2.QtCore.QByteArray',), + "QTimeZone.id": (), + "QTimeZone.isDaylightTime": ('PySide2.QtCore.QDateTime',), + "QTimeZone.isTimeZoneIdAvailable": ('PySide2.QtCore.QByteArray',), + "QTimeZone.isValid": (), + "QTimeZone.nextTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetData": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetFromUtc": ('PySide2.QtCore.QDateTime',), + "QTimeZone.previousTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.standardTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.swap": ('PySide2.QtCore.QTimeZone',), + "QTimeZone.systemTimeZone": (), + "QTimeZone.systemTimeZoneId": (), + "QTimeZone.transitions": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QTimeZone.utc": (), + "QTimeZone.windowsIdToDefaultIanaId": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + "QTimeZone.windowsIdToIanaIds": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + + # class PySide2.QtCore.QTimer: + "QTimer.__init__": ('PySide2.QtCore.QObject',), + "QTimer.interval": (), + "QTimer.isActive": (), + "QTimer.isSingleShot": (), + "QTimer.killTimer": ('int',), + "QTimer.remainingTime": (), + "QTimer.setInterval": ('int',), + "QTimer.setSingleShot": ('bool',), + "QTimer.setTimerType": ('PySide2.QtCore.Qt.TimerType',), + "QTimer.singleShot": [('int', 'PySide2.QtCore.QObject', 'str'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject', 'str'), ('int', 'PySide2.support.signature.typing.Callable')], + "QTimer.start": [(), ('int',)], + "QTimer.stop": (), + "QTimer.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimer.timerId": (), + "QTimer.timerType": (), + + # class PySide2.QtCore.QTimerEvent: + "QTimerEvent.__init__": ('int',), + "QTimerEvent.timerId": (), + + # class PySide2.QtCore.QTranslator: + "QTranslator.__init__": ('PySide2.QtCore.QObject',), + "QTranslator.isEmpty": (), + "QTranslator.load": [('PySide2.QtCore.QLocale', 'str', 'str', 'str', 'str'), ('PySide2.support.signature.typing.Union[str, int]', 'int', 'str'), ('str', 'str', 'str', 'str')], + "QTranslator.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QUrl: + "QUrl.__init__": [(), ('PySide2.QtCore.QUrl',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.__copy__": (), + "QUrl.__reduce__": (), + "QUrl.adjusted": ('FormattingOptions',), + "QUrl.authority": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.clear": (), + "QUrl.errorString": (), + "QUrl.fileName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fragment": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fromAce": ('PySide2.QtCore.QByteArray',), + "QUrl.fromEncoded": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromLocalFile": ('str',), + "QUrl.fromPercentEncoding": ('PySide2.QtCore.QByteArray',), + "QUrl.fromStringList": ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromUserInput": [('str',), ('str', 'str', 'UserInputResolutionOptions')], + "QUrl.hasFragment": (), + "QUrl.hasQuery": (), + "QUrl.host": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.idnWhitelist": (), + "QUrl.isEmpty": (), + "QUrl.isLocalFile": (), + "QUrl.isParentOf": ('PySide2.QtCore.QUrl',), + "QUrl.isRelative": (), + "QUrl.isValid": (), + "QUrl.matches": ('PySide2.QtCore.QUrl', 'FormattingOptions'), + "QUrl.password": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.path": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.port": ('int',), + "QUrl.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.resolved": ('PySide2.QtCore.QUrl',), + "QUrl.scheme": (), + "QUrl.setAuthority": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setFragment": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setHost": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setIdnWhitelist": ('PySide2.support.signature.typing.List',), + "QUrl.setPassword": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPath": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPort": ('int',), + "QUrl.setQuery": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setScheme": ('str',), + "QUrl.setUrl": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserInfo": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserName": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.swap": ('PySide2.QtCore.QUrl',), + "QUrl.toAce": ('str',), + "QUrl.toDisplayString": ('FormattingOptions',), + "QUrl.toEncoded": ('FormattingOptions',), + "QUrl.toLocalFile": (), + "QUrl.toPercentEncoding": ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QUrl.toString": ('FormattingOptions',), + "QUrl.toStringList": ('list', 'FormattingOptions'), + "QUrl.topLevelDomain": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.url": ('FormattingOptions',), + "QUrl.userInfo": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.userName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QVariantAnimation: + "QVariantAnimation.__init__": ('PySide2.QtCore.QObject',), + "QVariantAnimation.currentValue": (), + "QVariantAnimation.duration": (), + "QVariantAnimation.easingCurve": (), + "QVariantAnimation.endValue": (), + "QVariantAnimation.event": ('PySide2.QtCore.QEvent',), + "QVariantAnimation.interpolated": ('PySide2.support.signature.typing.Any', 'PySide2.support.signature.typing.Any', 'float'), + "QVariantAnimation.keyValueAt": ('float',), + "QVariantAnimation.keyValues": (), + "QVariantAnimation.setDuration": ('int',), + "QVariantAnimation.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QVariantAnimation.setEndValue": ('PySide2.support.signature.typing.Any',), + "QVariantAnimation.setKeyValueAt": ('float', 'PySide2.support.signature.typing.Any'), + "QVariantAnimation.setKeyValues": ('list',), + "QVariantAnimation.setStartValue": ('PySide2.support.signature.typing.Any',), + "QVariantAnimation.startValue": (), + "QVariantAnimation.updateCurrentTime": ('int',), + "QVariantAnimation.updateCurrentValue": ('PySide2.support.signature.typing.Any',), + "QVariantAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QWaitCondition: + "QWaitCondition.__init__": (), + "QWaitCondition.wait": [('PySide2.QtCore.QMutex', 'int'), ('PySide2.QtCore.QReadWriteLock', 'int')], + "QWaitCondition.wakeAll": (), + "QWaitCondition.wakeOne": (), + + # class PySide2.QtCore.QWinEventNotifier: + "QWinEventNotifier.__init__": [('PySide2.QtCore.QObject',), ('int', 'PySide2.QtCore.QObject')], + "QWinEventNotifier.event": ('PySide2.QtCore.QEvent',), + "QWinEventNotifier.handle": (), + "QWinEventNotifier.isEnabled": (), + "QWinEventNotifier.setEnabled": ('bool',), + "QWinEventNotifier.setHandle": ('int',), + + # class PySide2.QtCore.QWriteLocker: + "QWriteLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QWriteLocker.__enter__": (), + "QWriteLocker.__exit__": ('object', 'object', 'object'), + "QWriteLocker.readWriteLock": (), + "QWriteLocker.relock": (), + "QWriteLocker.unlock": (), + + # class PySide2.QtCore.QXmlStreamAttribute: + "QXmlStreamAttribute.__init__": [(), ('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttribute.__copy__": (), + "QXmlStreamAttribute.isDefault": (), + "QXmlStreamAttribute.name": (), + "QXmlStreamAttribute.namespaceUri": (), + "QXmlStreamAttribute.prefix": (), + "QXmlStreamAttribute.qualifiedName": (), + "QXmlStreamAttribute.value": (), + + # class PySide2.QtCore.QXmlStreamAttributes: + "QXmlStreamAttributes.__init__": [(), ('PySide2.QtCore.QXmlStreamAttributes',)], + "QXmlStreamAttributes.__copy__": (), + "QXmlStreamAttributes.append": [('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttributes.at": ('int',), + "QXmlStreamAttributes.capacity": (), + "QXmlStreamAttributes.clear": (), + "QXmlStreamAttributes.constData": (), + "QXmlStreamAttributes.constFirst": (), + "QXmlStreamAttributes.constLast": (), + "QXmlStreamAttributes.contains": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.count": [(), ('PySide2.QtCore.QXmlStreamAttribute',)], + "QXmlStreamAttributes.data": [], + "QXmlStreamAttributes.empty": (), + "QXmlStreamAttributes.endsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.fill": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.first": [], + "QXmlStreamAttributes.front": (), + "QXmlStreamAttributes.hasAttribute": [('str',), ('str', 'str')], + "QXmlStreamAttributes.indexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.insert": [('int', 'PySide2.QtCore.QXmlStreamAttribute'), ('int', 'int', 'PySide2.QtCore.QXmlStreamAttribute')], + "QXmlStreamAttributes.isEmpty": (), + "QXmlStreamAttributes.isSharedWith": ('list',), + "QXmlStreamAttributes.last": [], + "QXmlStreamAttributes.lastIndexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.length": (), + "QXmlStreamAttributes.mid": ('int', 'int'), + "QXmlStreamAttributes.move": ('int', 'int'), + "QXmlStreamAttributes.prepend": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.remove": [('int',), ('int', 'int')], + "QXmlStreamAttributes.removeAll": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.removeAt": ('int',), + "QXmlStreamAttributes.removeFirst": (), + "QXmlStreamAttributes.removeLast": (), + "QXmlStreamAttributes.removeOne": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.replace": ('int', 'PySide2.QtCore.QXmlStreamAttribute'), + "QXmlStreamAttributes.reserve": ('int',), + "QXmlStreamAttributes.resize": ('int',), + "QXmlStreamAttributes.setSharable": ('bool',), + "QXmlStreamAttributes.size": (), + "QXmlStreamAttributes.squeeze": (), + "QXmlStreamAttributes.startsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.swap": ('list',), + "QXmlStreamAttributes.takeAt": ('int',), + "QXmlStreamAttributes.takeFirst": (), + "QXmlStreamAttributes.takeLast": (), + "QXmlStreamAttributes.value": [('str',), ('str', 'str')], + + # class PySide2.QtCore.QXmlStreamEntityDeclaration: + "QXmlStreamEntityDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamEntityDeclaration',)], + "QXmlStreamEntityDeclaration.__copy__": (), + "QXmlStreamEntityDeclaration.name": (), + "QXmlStreamEntityDeclaration.notationName": (), + "QXmlStreamEntityDeclaration.publicId": (), + "QXmlStreamEntityDeclaration.systemId": (), + "QXmlStreamEntityDeclaration.value": (), + + # class PySide2.QtCore.QXmlStreamEntityResolver: + "QXmlStreamEntityResolver.__init__": (), + "QXmlStreamEntityResolver.resolveEntity": ('str', 'str'), + "QXmlStreamEntityResolver.resolveUndeclaredEntity": ('str',), + + # class PySide2.QtCore.QXmlStreamNamespaceDeclaration: + "QXmlStreamNamespaceDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), ('str', 'str')], + "QXmlStreamNamespaceDeclaration.__copy__": (), + "QXmlStreamNamespaceDeclaration.namespaceUri": (), + "QXmlStreamNamespaceDeclaration.prefix": (), + + # class PySide2.QtCore.QXmlStreamNotationDeclaration: + "QXmlStreamNotationDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNotationDeclaration',)], + "QXmlStreamNotationDeclaration.__copy__": (), + "QXmlStreamNotationDeclaration.name": (), + "QXmlStreamNotationDeclaration.publicId": (), + "QXmlStreamNotationDeclaration.systemId": (), + + # class PySide2.QtCore.QXmlStreamReader: + "QXmlStreamReader.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str',)], + "QXmlStreamReader.addData": [('PySide2.QtCore.QByteArray',), ('str',)], + "QXmlStreamReader.addExtraNamespaceDeclaration": ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), + "QXmlStreamReader.addExtraNamespaceDeclarations": ('list',), + "QXmlStreamReader.atEnd": (), + "QXmlStreamReader.attributes": (), + "QXmlStreamReader.characterOffset": (), + "QXmlStreamReader.clear": (), + "QXmlStreamReader.columnNumber": (), + "QXmlStreamReader.device": (), + "QXmlStreamReader.documentEncoding": (), + "QXmlStreamReader.documentVersion": (), + "QXmlStreamReader.dtdName": (), + "QXmlStreamReader.dtdPublicId": (), + "QXmlStreamReader.dtdSystemId": (), + "QXmlStreamReader.entityDeclarations": (), + "QXmlStreamReader.entityResolver": (), + "QXmlStreamReader.error": (), + "QXmlStreamReader.errorString": (), + "QXmlStreamReader.hasError": (), + "QXmlStreamReader.isCDATA": (), + "QXmlStreamReader.isCharacters": (), + "QXmlStreamReader.isComment": (), + "QXmlStreamReader.isDTD": (), + "QXmlStreamReader.isEndDocument": (), + "QXmlStreamReader.isEndElement": (), + "QXmlStreamReader.isEntityReference": (), + "QXmlStreamReader.isProcessingInstruction": (), + "QXmlStreamReader.isStandaloneDocument": (), + "QXmlStreamReader.isStartDocument": (), + "QXmlStreamReader.isStartElement": (), + "QXmlStreamReader.isWhitespace": (), + "QXmlStreamReader.lineNumber": (), + "QXmlStreamReader.name": (), + "QXmlStreamReader.namespaceDeclarations": (), + "QXmlStreamReader.namespaceProcessing": (), + "QXmlStreamReader.namespaceUri": (), + "QXmlStreamReader.notationDeclarations": (), + "QXmlStreamReader.prefix": (), + "QXmlStreamReader.processingInstructionData": (), + "QXmlStreamReader.processingInstructionTarget": (), + "QXmlStreamReader.qualifiedName": (), + "QXmlStreamReader.raiseError": ('str',), + "QXmlStreamReader.readElementText": ('PySide2.QtCore.QXmlStreamReader.ReadElementTextBehaviour',), + "QXmlStreamReader.readNext": (), + "QXmlStreamReader.readNextStartElement": (), + "QXmlStreamReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamReader.setEntityResolver": ('PySide2.QtCore.QXmlStreamEntityResolver',), + "QXmlStreamReader.setNamespaceProcessing": ('bool',), + "QXmlStreamReader.skipCurrentElement": (), + "QXmlStreamReader.text": (), + "QXmlStreamReader.tokenString": (), + "QXmlStreamReader.tokenType": (), + + # class PySide2.QtCore.QXmlStreamWriter: + "QXmlStreamWriter.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QXmlStreamWriter.autoFormatting": (), + "QXmlStreamWriter.autoFormattingIndent": (), + "QXmlStreamWriter.codec": (), + "QXmlStreamWriter.device": (), + "QXmlStreamWriter.hasError": (), + "QXmlStreamWriter.setAutoFormatting": ('bool',), + "QXmlStreamWriter.setAutoFormattingIndent": ('int',), + "QXmlStreamWriter.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QXmlStreamWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamWriter.writeAttribute": [('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamWriter.writeAttributes": ('PySide2.QtCore.QXmlStreamAttributes',), + "QXmlStreamWriter.writeCDATA": ('str',), + "QXmlStreamWriter.writeCharacters": ('str',), + "QXmlStreamWriter.writeComment": ('str',), + "QXmlStreamWriter.writeCurrentToken": ('PySide2.QtCore.QXmlStreamReader',), + "QXmlStreamWriter.writeDTD": ('str',), + "QXmlStreamWriter.writeDefaultNamespace": ('str',), + "QXmlStreamWriter.writeEmptyElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeEndDocument": (), + "QXmlStreamWriter.writeEndElement": (), + "QXmlStreamWriter.writeEntityReference": ('str',), + "QXmlStreamWriter.writeNamespace": ('str', 'str'), + "QXmlStreamWriter.writeProcessingInstruction": ('str', 'str'), + "QXmlStreamWriter.writeStartDocument": [(), ('str',), ('str', 'bool')], + "QXmlStreamWriter.writeStartElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeTextElement": [('str', 'str'), ('str', 'str', 'str')], + + # class PySide2.QtCore.Qt: + "Qt.qt_getEnumName": [('Alignment',), ('DockWidgetAreas',), ('DropActions',), ('Edges',), ('ImageConversionFlags',), ('InputMethodHints',), ('InputMethodQueries',), ('ItemFlags',), ('KeyboardModifiers',), ('MatchFlags',), ('MouseButtons',), ('Orientations',), ('PySide2.QtCore.Qt.ApplicationAttribute',), ('PySide2.QtCore.Qt.ApplicationState',), ('PySide2.QtCore.Qt.ArrowType',), ('PySide2.QtCore.Qt.AspectRatioMode',), ('PySide2.QtCore.Qt.Axis',), ('PySide2.QtCore.Qt.BGMode',), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.CaseSensitivity',), ('PySide2.QtCore.Qt.CheckState',), ('PySide2.QtCore.Qt.ClipOperation',), ('PySide2.QtCore.Qt.ConnectionType',), ('PySide2.QtCore.Qt.ContextMenuPolicy',), ('PySide2.QtCore.Qt.Corner',), ('PySide2.QtCore.Qt.CursorMoveStyle',), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtCore.Qt.DateFormat',), ('PySide2.QtCore.Qt.DayOfWeek',), ('PySide2.QtCore.Qt.DockWidgetArea',), ('PySide2.QtCore.Qt.DropAction',), ('PySide2.QtCore.Qt.Edge',), ('PySide2.QtCore.Qt.EnterKeyType',), ('PySide2.QtCore.Qt.FillRule',), ('PySide2.QtCore.Qt.FocusPolicy',), ('PySide2.QtCore.Qt.FocusReason',), ('PySide2.QtCore.Qt.GestureState',), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtCore.Qt.InputMethodHint',), ('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.ItemDataRole',), ('PySide2.QtCore.Qt.ItemSelectionMode',), ('PySide2.QtCore.Qt.ItemSelectionOperation',), ('PySide2.QtCore.Qt.Key',), ('PySide2.QtCore.Qt.LayoutDirection',), ('PySide2.QtCore.Qt.MaskMode',), ('PySide2.QtCore.Qt.MouseEventFlag',), ('PySide2.QtCore.Qt.MouseEventSource',), ('PySide2.QtCore.Qt.NativeGestureType',), ('PySide2.QtCore.Qt.Orientation',), ('PySide2.QtCore.Qt.PenCapStyle',), ('PySide2.QtCore.Qt.PenJoinStyle',), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtCore.Qt.ScreenOrientation',), ('PySide2.QtCore.Qt.ScrollBarPolicy',), ('PySide2.QtCore.Qt.ScrollPhase',), ('PySide2.QtCore.Qt.ShortcutContext',), ('PySide2.QtCore.Qt.SizeHint',), ('PySide2.QtCore.Qt.SizeMode',), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtCore.Qt.TabFocusBehavior',), ('PySide2.QtCore.Qt.TextElideMode',), ('PySide2.QtCore.Qt.TextFormat',), ('PySide2.QtCore.Qt.TextInteractionFlag',), ('PySide2.QtCore.Qt.TimeSpec',), ('PySide2.QtCore.Qt.TimerType',), ('PySide2.QtCore.Qt.ToolBarArea',), ('PySide2.QtCore.Qt.ToolButtonStyle',), ('PySide2.QtCore.Qt.TransformationMode',), ('PySide2.QtCore.Qt.WidgetAttribute',), ('PySide2.QtCore.Qt.WindowModality',), ('PySide2.QtCore.Qt.WindowState',), ('PySide2.QtCore.Qt.WindowType',), ('ScreenOrientations',), ('TextInteractionFlags',), ('ToolBarAreas',), ('TouchPointStates',), ('WindowFlags',), ('WindowStates',)], + "Qt.qt_getEnumMetaObject": [('Alignment',), ('DockWidgetAreas',), ('DropActions',), ('Edges',), ('ImageConversionFlags',), ('InputMethodHints',), ('InputMethodQueries',), ('ItemFlags',), ('KeyboardModifiers',), ('MatchFlags',), ('MouseButtons',), ('Orientations',), ('PySide2.QtCore.Qt.ApplicationAttribute',), ('PySide2.QtCore.Qt.ApplicationState',), ('PySide2.QtCore.Qt.ArrowType',), ('PySide2.QtCore.Qt.AspectRatioMode',), ('PySide2.QtCore.Qt.Axis',), ('PySide2.QtCore.Qt.BGMode',), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.CaseSensitivity',), ('PySide2.QtCore.Qt.CheckState',), ('PySide2.QtCore.Qt.ClipOperation',), ('PySide2.QtCore.Qt.ConnectionType',), ('PySide2.QtCore.Qt.ContextMenuPolicy',), ('PySide2.QtCore.Qt.Corner',), ('PySide2.QtCore.Qt.CursorMoveStyle',), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtCore.Qt.DateFormat',), ('PySide2.QtCore.Qt.DayOfWeek',), ('PySide2.QtCore.Qt.DockWidgetArea',), ('PySide2.QtCore.Qt.DropAction',), ('PySide2.QtCore.Qt.Edge',), ('PySide2.QtCore.Qt.EnterKeyType',), ('PySide2.QtCore.Qt.FillRule',), ('PySide2.QtCore.Qt.FocusPolicy',), ('PySide2.QtCore.Qt.FocusReason',), ('PySide2.QtCore.Qt.GestureState',), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtCore.Qt.InputMethodHint',), ('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.ItemDataRole',), ('PySide2.QtCore.Qt.ItemSelectionMode',), ('PySide2.QtCore.Qt.ItemSelectionOperation',), ('PySide2.QtCore.Qt.Key',), ('PySide2.QtCore.Qt.LayoutDirection',), ('PySide2.QtCore.Qt.MaskMode',), ('PySide2.QtCore.Qt.MouseEventFlag',), ('PySide2.QtCore.Qt.MouseEventSource',), ('PySide2.QtCore.Qt.NativeGestureType',), ('PySide2.QtCore.Qt.Orientation',), ('PySide2.QtCore.Qt.PenCapStyle',), ('PySide2.QtCore.Qt.PenJoinStyle',), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtCore.Qt.ScreenOrientation',), ('PySide2.QtCore.Qt.ScrollBarPolicy',), ('PySide2.QtCore.Qt.ScrollPhase',), ('PySide2.QtCore.Qt.ShortcutContext',), ('PySide2.QtCore.Qt.SizeHint',), ('PySide2.QtCore.Qt.SizeMode',), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtCore.Qt.TabFocusBehavior',), ('PySide2.QtCore.Qt.TextElideMode',), ('PySide2.QtCore.Qt.TextFormat',), ('PySide2.QtCore.Qt.TextInteractionFlag',), ('PySide2.QtCore.Qt.TimeSpec',), ('PySide2.QtCore.Qt.TimerType',), ('PySide2.QtCore.Qt.ToolBarArea',), ('PySide2.QtCore.Qt.ToolButtonStyle',), ('PySide2.QtCore.Qt.TransformationMode',), ('PySide2.QtCore.Qt.WidgetAttribute',), ('PySide2.QtCore.Qt.WindowModality',), ('PySide2.QtCore.Qt.WindowState',), ('PySide2.QtCore.Qt.WindowType',), ('ScreenOrientations',), ('TextInteractionFlags',), ('ToolBarAreas',), ('TouchPointStates',), ('WindowFlags',), ('WindowStates',)], + + # class PySide2.QtCore.QtMsgType: + + # class PySide2.QtCore.Signal: + + # class PySide2.QtCore.Slot: + }) + +# Module PySide2.QtGui +if "PySide2.QtGui" in sys.modules: + dict.update({ + + # class PySide2.QtGui.QAbstractTextDocumentLayout: + "QAbstractTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QAbstractTextDocumentLayout.anchorAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QAbstractTextDocumentLayout.document": (), + "QAbstractTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QAbstractTextDocumentLayout.documentSize": (), + "QAbstractTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QAbstractTextDocumentLayout.drawInlineObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.format": ('int',), + "QAbstractTextDocumentLayout.formatIndex": ('int',), + "QAbstractTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QAbstractTextDocumentLayout.handlerForObject": ('int',), + "QAbstractTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QAbstractTextDocumentLayout.pageCount": (), + "QAbstractTextDocumentLayout.paintDevice": (), + "QAbstractTextDocumentLayout.positionInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.registerHandler": ('int', 'PySide2.QtCore.QObject'), + "QAbstractTextDocumentLayout.resizeInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.setPaintDevice": ('PySide2.QtGui.QPaintDevice',), + "QAbstractTextDocumentLayout.unregisterHandler": ('int', 'PySide2.QtCore.QObject'), + + # class PySide2.QtGui.QAccessible: + "QAccessible.queryAccessibleInterface": ('PySide2.QtCore.QObject',), + "QAccessible.__copy__": (), + "QAccessible.cleanup": (), + "QAccessible.isActive": (), + "QAccessible.qAccessibleTextBoundaryHelper": ('PySide2.QtGui.QTextCursor', 'PySide2.QtGui.QAccessible.TextBoundaryType'), + "QAccessible.setActive": ('bool',), + "QAccessible.setRootObject": ('PySide2.QtCore.QObject',), + "QAccessible.updateAccessibility": ('PySide2.QtGui.QAccessibleEvent',), + + # class PySide2.QtGui.QAccessibleEvent: + "QAccessibleEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessible.Event'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessible.Event')], + "QAccessibleEvent.accessibleInterface": (), + "QAccessibleEvent.child": (), + "QAccessibleEvent.object": (), + "QAccessibleEvent.setChild": ('int',), + "QAccessibleEvent.type": (), + + # class PySide2.QtGui.QAccessibleInterface: + "QAccessibleInterface.__init__": (), + "QAccessibleInterface.backgroundColor": (), + "QAccessibleInterface.child": ('int',), + "QAccessibleInterface.childAt": ('int', 'int'), + "QAccessibleInterface.childCount": (), + "QAccessibleInterface.focusChild": (), + "QAccessibleInterface.foregroundColor": (), + "QAccessibleInterface.indexOfChild": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessibleInterface.interface_cast": ('PySide2.QtGui.QAccessible.InterfaceType',), + "QAccessibleInterface.isValid": (), + "QAccessibleInterface.object": (), + "QAccessibleInterface.parent": (), + "QAccessibleInterface.rect": (), + "QAccessibleInterface.role": (), + "QAccessibleInterface.setText": ('PySide2.QtGui.QAccessible.Text', 'str'), + "QAccessibleInterface.state": (), + "QAccessibleInterface.text": ('PySide2.QtGui.QAccessible.Text',), + "QAccessibleInterface.virtual_hook": ('int', 'int'), + "QAccessibleInterface.window": (), + + # class PySide2.QtGui.QActionEvent: + + # class PySide2.QtGui.QBackingStore: + "QBackingStore.__init__": ('PySide2.QtGui.QWindow',), + "QBackingStore.beginPaint": ('PySide2.QtGui.QRegion',), + "QBackingStore.endPaint": (), + "QBackingStore.flush": ('PySide2.QtGui.QRegion', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint'), + "QBackingStore.hasStaticContents": (), + "QBackingStore.paintDevice": (), + "QBackingStore.resize": ('PySide2.QtCore.QSize',), + "QBackingStore.scroll": ('PySide2.QtGui.QRegion', 'int', 'int'), + "QBackingStore.setStaticContents": ('PySide2.QtGui.QRegion',), + "QBackingStore.size": (), + "QBackingStore.staticContents": (), + "QBackingStore.window": (), + + # class PySide2.QtGui.QBitmap: + "QBitmap.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str')], + "QBitmap.__copy__": (), + "QBitmap.clear": (), + "QBitmap.fromData": ('PySide2.QtCore.QSize', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.QtGui.QImage.Format'), + "QBitmap.fromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QBitmap.swap": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',)], + "QBitmap.transformed": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform',)], + + # class PySide2.QtGui.QBrush: + "QBrush.__init__": [(), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QBrush',), ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QGradient',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',)], + "QBrush.__copy__": (), + "QBrush.color": (), + "QBrush.gradient": (), + "QBrush.isOpaque": (), + "QBrush.matrix": (), + "QBrush.setColor": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',)], + "QBrush.setMatrix": ('PySide2.QtGui.QMatrix',), + "QBrush.setStyle": ('PySide2.QtCore.Qt.BrushStyle',), + "QBrush.setTexture": ('PySide2.QtGui.QPixmap',), + "QBrush.setTextureImage": ('PySide2.QtGui.QImage',), + "QBrush.setTransform": ('PySide2.QtGui.QTransform',), + "QBrush.style": (), + "QBrush.swap": ('PySide2.QtGui.QBrush',), + "QBrush.texture": (), + "QBrush.textureImage": (), + "QBrush.transform": (), + + # class PySide2.QtGui.QClipboard: + "QClipboard.setMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.clear": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.image": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.mimeData": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.ownsClipboard": (), + "QClipboard.ownsFindBuffer": (), + "QClipboard.ownsSelection": (), + "QClipboard.pixmap": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.setImage": ('PySide2.QtGui.QImage', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setText": ('str', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.supportsFindBuffer": (), + "QClipboard.supportsSelection": (), + "QClipboard.text": [('PySide2.QtGui.QClipboard.Mode',), ('str', 'PySide2.QtGui.QClipboard.Mode')], + + # class PySide2.QtGui.QCloseEvent: + "QCloseEvent.__init__": (), + + # class PySide2.QtGui.QColor: + "QColor.__init__": [(), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('PySide2.support.signature.typing.Any',), ('int',), ('int', 'int', 'int', 'int'), ('str',)], + "QColor.__copy__": (), + "QColor.__reduce__": (), + "QColor.__setstate__": ('object',), + "QColor.alpha": (), + "QColor.alphaF": (), + "QColor.black": (), + "QColor.blackF": (), + "QColor.blue": (), + "QColor.blueF": (), + "QColor.colorNames": (), + "QColor.convertTo": ('PySide2.QtGui.QColor.Spec',), + "QColor.cyan": (), + "QColor.cyanF": (), + "QColor.dark": ('int',), + "QColor.darker": ('int',), + "QColor.fromCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.fromCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.fromHsl": ('int', 'int', 'int', 'int'), + "QColor.fromHslF": ('float', 'float', 'float', 'float'), + "QColor.fromHsv": ('int', 'int', 'int', 'int'), + "QColor.fromHsvF": ('float', 'float', 'float', 'float'), + "QColor.fromRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.fromRgbF": ('float', 'float', 'float', 'float'), + "QColor.fromRgba": ('int',), + "QColor.fromRgba64": ('int', 'int', 'int', 'int'), + "QColor.getCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.getCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.getHsl": ('int', 'int', 'int', 'int'), + "QColor.getHslF": ('float', 'float', 'float', 'float'), + "QColor.getHsv": ('int', 'int', 'int', 'int'), + "QColor.getHsvF": ('float', 'float', 'float', 'float'), + "QColor.getRgb": ('int', 'int', 'int', 'int'), + "QColor.getRgbF": ('float', 'float', 'float', 'float'), + "QColor.green": (), + "QColor.greenF": (), + "QColor.hslHue": (), + "QColor.hslHueF": (), + "QColor.hslSaturation": (), + "QColor.hslSaturationF": (), + "QColor.hsvHue": (), + "QColor.hsvHueF": (), + "QColor.hsvSaturation": (), + "QColor.hsvSaturationF": (), + "QColor.hue": (), + "QColor.hueF": (), + "QColor.isValid": (), + "QColor.isValidColor": ('str',), + "QColor.light": ('int',), + "QColor.lighter": ('int',), + "QColor.lightness": (), + "QColor.lightnessF": (), + "QColor.magenta": (), + "QColor.magentaF": (), + "QColor.name": [(), ('PySide2.QtGui.QColor.NameFormat',)], + "QColor.red": (), + "QColor.redF": (), + "QColor.rgb": (), + "QColor.rgba": (), + "QColor.saturation": (), + "QColor.saturationF": (), + "QColor.setAlpha": ('int',), + "QColor.setAlphaF": ('float',), + "QColor.setBlue": ('int',), + "QColor.setBlueF": ('float',), + "QColor.setCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.setCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.setGreen": ('int',), + "QColor.setGreenF": ('float',), + "QColor.setHsl": ('int', 'int', 'int', 'int'), + "QColor.setHslF": ('float', 'float', 'float', 'float'), + "QColor.setHsv": ('int', 'int', 'int', 'int'), + "QColor.setHsvF": ('float', 'float', 'float', 'float'), + "QColor.setNamedColor": ('str',), + "QColor.setRed": ('int',), + "QColor.setRedF": ('float',), + "QColor.setRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.setRgbF": ('float', 'float', 'float', 'float'), + "QColor.setRgba": ('int',), + "QColor.spec": (), + "QColor.toCmyk": (), + "QColor.toHsl": (), + "QColor.toHsv": (), + "QColor.toRgb": (), + "QColor.toTuple": (), + "QColor.value": (), + "QColor.valueF": (), + "QColor.yellow": (), + "QColor.yellowF": (), + + # class PySide2.QtGui.QConicalGradient: + "QConicalGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QConicalGradient',), ('float', 'float', 'float')], + "QConicalGradient.__copy__": (), + "QConicalGradient.angle": (), + "QConicalGradient.center": (), + "QConicalGradient.setAngle": ('float',), + "QConicalGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + + # class PySide2.QtGui.QContextMenuEvent: + "QContextMenuEvent.__init__": [('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'KeyboardModifiers')], + "QContextMenuEvent.global"+"Y": (), + "QContextMenuEvent.globalPos": (), + "QContextMenuEvent.globalX": (), + "QContextMenuEvent.pos": (), + "QContextMenuEvent.reason": (), + "QContextMenuEvent.x": (), + "QContextMenuEvent.y": (), + + # class PySide2.QtGui.QCursor: + "QCursor.__init__": [(), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtGui.QBitmap', 'PySide2.QtGui.QBitmap', 'int', 'int'), ('PySide2.QtGui.QCursor',), ('PySide2.QtGui.QPixmap', 'int', 'int')], + "QCursor.__copy__": (), + "QCursor.bitmap": (), + "QCursor.hotSpot": (), + "QCursor.mask": (), + "QCursor.pixmap": (), + "QCursor.pos": [(), ('PySide2.QtGui.QScreen',)], + "QCursor.setPos": [('PySide2.QtCore.QPoint',), ('PySide2.QtGui.QScreen', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QScreen', 'int', 'int'), ('int', 'int')], + "QCursor.setShape": ('PySide2.QtCore.Qt.CursorShape',), + "QCursor.shape": (), + + # class PySide2.QtGui.QDesktopServices: + "QDesktopServices.__init__": (), + "QDesktopServices.openUrl": ('PySide2.QtCore.QUrl',), + "QDesktopServices.setUrlHandler": ('str', 'PySide2.QtCore.QObject', 'str'), + "QDesktopServices.unsetUrlHandler": ('str',), + + # class PySide2.QtGui.QDoubleValidator: + "QDoubleValidator.__init__": [('PySide2.QtCore.QObject',), ('float', 'float', 'int', 'PySide2.QtCore.QObject')], + "QDoubleValidator.bottom": (), + "QDoubleValidator.decimals": (), + "QDoubleValidator.notation": (), + "QDoubleValidator.setBottom": ('float',), + "QDoubleValidator.setDecimals": ('int',), + "QDoubleValidator.setNotation": ('PySide2.QtGui.QDoubleValidator.Notation',), + "QDoubleValidator.setRange": ('float', 'float', 'int'), + "QDoubleValidator.setTop": ('float',), + "QDoubleValidator.top": (), + "QDoubleValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QDrag: + "QDrag.__init__": ('PySide2.QtCore.QObject',), + "QDrag.defaultAction": (), + "QDrag.dragCursor": ('PySide2.QtCore.Qt.DropAction',), + "QDrag.exec_": [('DropActions',), ('DropActions', 'PySide2.QtCore.Qt.DropAction')], + "QDrag.hotSpot": (), + "QDrag.mimeData": (), + "QDrag.pixmap": (), + "QDrag.setDragCursor": ('PySide2.QtGui.QPixmap', 'PySide2.QtCore.Qt.DropAction'), + "QDrag.setHotSpot": ('PySide2.QtCore.QPoint',), + "QDrag.setMimeData": ('PySide2.QtCore.QMimeData',), + "QDrag.setPixmap": ('PySide2.QtGui.QPixmap',), + "QDrag.source": (), + "QDrag.start": ('DropActions',), + "QDrag.supportedActions": (), + "QDrag.target": (), + + # class PySide2.QtGui.QDragEnterEvent: + "QDragEnterEvent.__init__": ('PySide2.QtCore.QPoint', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers'), + + # class PySide2.QtGui.QDragLeaveEvent: + "QDragLeaveEvent.__init__": (), + + # class PySide2.QtGui.QDragMoveEvent: + "QDragMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDragMoveEvent.accept": [(), ('PySide2.QtCore.QRect',)], + "QDragMoveEvent.answerRect": (), + "QDragMoveEvent.ignore": [(), ('PySide2.QtCore.QRect',)], + + # class PySide2.QtGui.QDropEvent: + "QDropEvent.__init__": ('PySide2.QtCore.QPointF', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDropEvent.acceptProposedAction": (), + "QDropEvent.dropAction": (), + "QDropEvent.keyboardModifiers": (), + "QDropEvent.mimeData": (), + "QDropEvent.mouseButtons": (), + "QDropEvent.pos": (), + "QDropEvent.posF": (), + "QDropEvent.possibleActions": (), + "QDropEvent.proposedAction": (), + "QDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QDropEvent.source": (), + + # class PySide2.QtGui.QEnterEvent: + "QEnterEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEnterEvent.global"+"Y": (), + "QEnterEvent.globalPos": (), + "QEnterEvent.globalX": (), + "QEnterEvent.localPos": (), + "QEnterEvent.pos": (), + "QEnterEvent.screenPos": (), + "QEnterEvent.windowPos": (), + "QEnterEvent.x": (), + "QEnterEvent.y": (), + + # class PySide2.QtGui.QExposeEvent: + "QExposeEvent.__init__": ('PySide2.QtGui.QRegion',), + "QExposeEvent.region": (), + + # class PySide2.QtGui.QFileOpenEvent: + "QFileOpenEvent.__init__": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileOpenEvent.file": (), + "QFileOpenEvent.openFile": ('PySide2.QtCore.QFile', 'OpenMode'), + "QFileOpenEvent.url": (), + + # class PySide2.QtGui.QFocusEvent: + "QFocusEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.FocusReason'), + "QFocusEvent.gotFocus": (), + "QFocusEvent.lostFocus": (), + "QFocusEvent.reason": (), + + # class PySide2.QtGui.QFont: + "QFont.__init__": [(), ('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('str', 'int', 'int', 'bool')], + "QFont.__copy__": (), + "QFont.bold": (), + "QFont.cacheStatistics": (), + "QFont.capitalization": (), + "QFont.cleanup": (), + "QFont.defaultFamily": (), + "QFont.exactMatch": (), + "QFont.family": (), + "QFont.fixedPitch": (), + "QFont.fromString": ('str',), + "QFont.hintingPreference": (), + "QFont.initialize": (), + "QFont.insertSubstitution": ('str', 'str'), + "QFont.insertSubstitutions": ('str', 'PySide2.support.signature.typing.List'), + "QFont.isCopyOf": ('PySide2.QtGui.QFont',), + "QFont.italic": (), + "QFont.kerning": (), + "QFont.key": (), + "QFont.lastResortFamily": (), + "QFont.lastResortFont": (), + "QFont.letterSpacing": (), + "QFont.letterSpacingType": (), + "QFont.overline": (), + "QFont.pixelSize": (), + "QFont.pointSize": (), + "QFont.pointSizeF": (), + "QFont.rawMode": (), + "QFont.rawName": (), + "QFont.removeSubstitutions": ('str',), + "QFont.resolve": [(), ('PySide2.QtGui.QFont',), ('int',)], + "QFont.setBold": ('bool',), + "QFont.setCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QFont.setFamily": ('str',), + "QFont.setFixedPitch": ('bool',), + "QFont.setHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QFont.setItalic": ('bool',), + "QFont.setKerning": ('bool',), + "QFont.setLetterSpacing": ('PySide2.QtGui.QFont.SpacingType', 'float'), + "QFont.setOverline": ('bool',), + "QFont.setPixelSize": ('int',), + "QFont.setPointSize": ('int',), + "QFont.setPointSizeF": ('float',), + "QFont.setRawMode": ('bool',), + "QFont.setRawName": ('str',), + "QFont.setStretch": ('int',), + "QFont.setStrikeOut": ('bool',), + "QFont.setStyle": ('PySide2.QtGui.QFont.Style',), + "QFont.setStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QFont.setStyleName": ('str',), + "QFont.setStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QFont.setUnderline": ('bool',), + "QFont.setWeight": ('int',), + "QFont.setWordSpacing": ('float',), + "QFont.stretch": (), + "QFont.strikeOut": (), + "QFont.style": (), + "QFont.styleHint": (), + "QFont.styleName": (), + "QFont.styleStrategy": (), + "QFont.substitute": ('str',), + "QFont.substitutes": ('str',), + "QFont.substitutions": (), + "QFont.swap": ('PySide2.QtGui.QFont',), + "QFont.toString": (), + "QFont.underline": (), + "QFont.weight": (), + "QFont.wordSpacing": (), + + # class PySide2.QtGui.QFontDatabase: + "QFontDatabase.__init__": [(), ('PySide2.QtGui.QFontDatabase',)], + "QFontDatabase.__copy__": (), + "QFontDatabase.addApplicationFont": ('str',), + "QFontDatabase.addApplicationFontFromData": ('PySide2.QtCore.QByteArray',), + "QFontDatabase.applicationFontFamilies": ('int',), + "QFontDatabase.bold": ('str', 'str'), + "QFontDatabase.families": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.font": ('str', 'str', 'int'), + "QFontDatabase.hasFamily": ('str',), + "QFontDatabase.isBitmapScalable": ('str', 'str'), + "QFontDatabase.isFixedPitch": ('str', 'str'), + "QFontDatabase.isPrivateFamily": ('str',), + "QFontDatabase.isScalable": ('str', 'str'), + "QFontDatabase.isSmoothlyScalable": ('str', 'str'), + "QFontDatabase.italic": ('str', 'str'), + "QFontDatabase.pointSizes": ('str', 'str'), + "QFontDatabase.removeAllApplicationFonts": (), + "QFontDatabase.removeApplicationFont": ('int',), + "QFontDatabase.smoothSizes": ('str', 'str'), + "QFontDatabase.standardSizes": (), + "QFontDatabase.styleString": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontDatabase.styles": ('str',), + "QFontDatabase.supportsThreadedFontRendering": (), + "QFontDatabase.systemFont": ('PySide2.QtGui.QFontDatabase.SystemFont',), + "QFontDatabase.weight": ('str', 'str'), + "QFontDatabase.writingSystemName": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystemSample": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystems": [(), ('str',)], + + # class PySide2.QtGui.QFontInfo: + "QFontInfo.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontInfo.__copy__": (), + "QFontInfo.bold": (), + "QFontInfo.exactMatch": (), + "QFontInfo.family": (), + "QFontInfo.fixedPitch": (), + "QFontInfo.italic": (), + "QFontInfo.overline": (), + "QFontInfo.pixelSize": (), + "QFontInfo.pointSize": (), + "QFontInfo.pointSizeF": (), + "QFontInfo.rawMode": (), + "QFontInfo.strikeOut": (), + "QFontInfo.style": (), + "QFontInfo.styleHint": (), + "QFontInfo.styleName": (), + "QFontInfo.swap": ('PySide2.QtGui.QFontInfo',), + "QFontInfo.underline": (), + "QFontInfo.weight": (), + + # class PySide2.QtGui.QFontMetrics: + "QFontMetrics.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',)], + "QFontMetrics.__copy__": (), + "QFontMetrics.ascent": (), + "QFontMetrics.averageCharWidth": (), + "QFontMetrics.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetrics.boundingRectChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.charWidth": ('str', 'int'), + "QFontMetrics.descent": (), + "QFontMetrics.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'int', 'int'), + "QFontMetrics.height": (), + "QFontMetrics.inFont": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.inFontUcs4": ('int',), + "QFontMetrics.leading": (), + "QFontMetrics.leftBearing": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.lineSpacing": (), + "QFontMetrics.lineWidth": (), + "QFontMetrics.maxWidth": (), + "QFontMetrics.minLeftBearing": (), + "QFontMetrics.minRightBearing": (), + "QFontMetrics.overlinePos": (), + "QFontMetrics.rightBearing": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.size": ('int', 'str', 'int', 'int'), + "QFontMetrics.strikeOutPos": (), + "QFontMetrics.swap": ('PySide2.QtGui.QFontMetrics',), + "QFontMetrics.tightBoundingRect": ('str',), + "QFontMetrics.underlinePos": (), + "QFontMetrics.width": [('str', 'int'), ('str', 'int', 'int')], + "QFontMetrics.widthChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetrics.xHeight": (), + + # class PySide2.QtGui.QFontMetricsF: + "QFontMetricsF.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',), ('PySide2.QtGui.QFontMetricsF',)], + "QFontMetricsF.__copy__": (), + "QFontMetricsF.ascent": (), + "QFontMetricsF.averageCharWidth": (), + "QFontMetricsF.boundingRect": [('PySide2.QtCore.QRectF', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetricsF.boundingRectChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.descent": (), + "QFontMetricsF.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'float', 'int'), + "QFontMetricsF.height": (), + "QFontMetricsF.inFont": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.inFontUcs4": ('int',), + "QFontMetricsF.leading": (), + "QFontMetricsF.leftBearing": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.lineSpacing": (), + "QFontMetricsF.lineWidth": (), + "QFontMetricsF.maxWidth": (), + "QFontMetricsF.minLeftBearing": (), + "QFontMetricsF.minRightBearing": (), + "QFontMetricsF.overlinePos": (), + "QFontMetricsF.rightBearing": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.size": ('int', 'str', 'int', 'int'), + "QFontMetricsF.strikeOutPos": (), + "QFontMetricsF.swap": ('PySide2.QtGui.QFontMetricsF',), + "QFontMetricsF.tightBoundingRect": ('str',), + "QFontMetricsF.underlinePos": (), + "QFontMetricsF.width": ('str',), + "QFontMetricsF.widthChar": ('PySide2.support.signature.typing.Union[str, int]',), + "QFontMetricsF.xHeight": (), + + # class PySide2.QtGui.QGradient: + "QGradient.__init__": [(), ('PySide2.QtGui.QGradient',)], + "QGradient.__copy__": (), + "QGradient.coordinateMode": (), + "QGradient.interpolationMode": (), + "QGradient.setColorAt": ('float', 'PySide2.QtGui.QColor'), + "QGradient.setCoordinateMode": ('PySide2.QtGui.QGradient.CoordinateMode',), + "QGradient.setInterpolationMode": ('PySide2.QtGui.QGradient.InterpolationMode',), + "QGradient.setSpread": ('PySide2.QtGui.QGradient.Spread',), + "QGradient.setStops": ('list',), + "QGradient.spread": (), + "QGradient.stops": (), + "QGradient.type": (), + + # class PySide2.QtGui.QGuiApplication: + "QGuiApplication.__init__": ('PySide2.support.signature.typing.List',), + "QGuiApplication.allWindows": (), + "QGuiApplication.applicationDisplayName": (), + "QGuiApplication.applicationState": (), + "QGuiApplication.changeOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.clipboard": (), + "QGuiApplication.desktopSettingsAware": (), + "QGuiApplication.devicePixelRatio": (), + "QGuiApplication.event": ('PySide2.QtCore.QEvent',), + "QGuiApplication.exec_": (), + "QGuiApplication.focusObject": (), + "QGuiApplication.focusWindow": (), + "QGuiApplication.font": (), + "QGuiApplication.isFallbackSessionManagementEnabled": (), + "QGuiApplication.isLeftToRight": (), + "QGuiApplication.isRightToLeft": (), + "QGuiApplication.isSavingSession": (), + "QGuiApplication.isSessionRestored": (), + "QGuiApplication.keyboardModifiers": (), + "QGuiApplication.layoutDirection": (), + "QGuiApplication.modalWindow": (), + "QGuiApplication.mouseButtons": (), + "QGuiApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGuiApplication.overrideCursor": (), + "QGuiApplication.palette": (), + "QGuiApplication.platformName": (), + "QGuiApplication.primaryScreen": (), + "QGuiApplication.queryKeyboardModifiers": (), + "QGuiApplication.quitOnLastWindowClosed": (), + "QGuiApplication.restoreOverrideCursor": (), + "QGuiApplication.screens": (), + "QGuiApplication.sessionId": (), + "QGuiApplication.sessionKey": (), + "QGuiApplication.setApplicationDisplayName": ('str',), + "QGuiApplication.setDesktopSettingsAware": ('bool',), + "QGuiApplication.setFallbackSessionManagementEnabled": ('bool',), + "QGuiApplication.setFont": ('PySide2.QtGui.QFont',), + "QGuiApplication.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGuiApplication.setOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.setPalette": ('PySide2.QtGui.QPalette',), + "QGuiApplication.setQuitOnLastWindowClosed": ('bool',), + "QGuiApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QGuiApplication.styleHints": (), + "QGuiApplication.sync": (), + "QGuiApplication.topLevelAt": ('PySide2.QtCore.QPoint',), + "QGuiApplication.topLevelWindows": (), + "QGuiApplication.windowIcon": (), + + # class PySide2.QtGui.QHelpEvent: + "QHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QHelpEvent.global"+"Y": (), + "QHelpEvent.globalPos": (), + "QHelpEvent.globalX": (), + "QHelpEvent.pos": (), + "QHelpEvent.x": (), + "QHelpEvent.y": (), + + # class PySide2.QtGui.QHideEvent: + "QHideEvent.__init__": (), + + # class PySide2.QtGui.QHoverEvent: + "QHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'KeyboardModifiers'), + "QHoverEvent.oldPos": (), + "QHoverEvent.oldPosF": (), + "QHoverEvent.pos": (), + "QHoverEvent.posF": (), + + # class PySide2.QtGui.QIcon: + "QIcon.__init__": [(), ('PySide2.QtGui.QIcon',), ('PySide2.QtGui.QIconEngine',), ('PySide2.QtGui.QPixmap',), ('str',)], + "QIcon.__copy__": (), + "QIcon.actualSize": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.cacheKey": (), + "QIcon.fromTheme": ('str', 'PySide2.QtGui.QIcon'), + "QIcon.hasThemeIcon": ('str',), + "QIcon.isMask": (), + "QIcon.isNull": (), + "QIcon.name": (), + "QIcon.paint": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QPainter', 'int', 'int', 'int', 'int', 'Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.pixmap": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.setIsMask": ('bool',), + "QIcon.setThemeName": ('str',), + "QIcon.setThemeSearchPaths": ('PySide2.support.signature.typing.List',), + "QIcon.swap": ('PySide2.QtGui.QIcon',), + "QIcon.themeName": (), + "QIcon.themeSearchPaths": (), + + # class PySide2.QtGui.QIconDragEvent: + "QIconDragEvent.__init__": (), + + # class PySide2.QtGui.QIconEngine: + "QIconEngine.__init__": (), + "QIconEngine.actualSize": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.clone": (), + "QIconEngine.iconName": (), + "QIconEngine.key": (), + "QIconEngine.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.pixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.read": ('PySide2.QtCore.QDataStream',), + "QIconEngine.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QImage: + "QImage.__init__": [(), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QImage.Format'), ('PySide2.QtGui.QImage',), ('PySide2.support.signature.typing.List',), ('PySide2.support.signature.typing.Union[str, int]', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'PySide2.support.signature.typing.Callable', 'int'), ('PySide2.support.signature.typing.Union[str, int]', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'PySide2.support.signature.typing.Callable', 'int'), ('int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'str')], + "QImage.__copy__": (), + "QImage.allGray": (), + "QImage.alphaChannel": (), + "QImage.bitPlaneCount": (), + "QImage.bits": (), + "QImage.byteCount": (), + "QImage.bytesPerLine": (), + "QImage.cacheKey": (), + "QImage.color": ('int',), + "QImage.colorCount": (), + "QImage.colorTable": (), + "QImage.constBits": (), + "QImage.constScanLine": ('int',), + "QImage.convertToFormat": [('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), ('PySide2.QtGui.QImage.Format', 'list', 'ImageConversionFlags')], + "QImage.convertToFormat_helper": ('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), + "QImage.convertToFormat_inplace": ('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), + "QImage.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QImage.createAlphaMask": ('ImageConversionFlags',), + "QImage.createHeuristicMask": ('bool',), + "QImage.createMaskFromColor": ('int', 'PySide2.QtCore.Qt.MaskMode'), + "QImage.depth": (), + "QImage.devType": (), + "QImage.devicePixelRatio": (), + "QImage.dotsPerMeterX": (), + "QImage.dotsPerMeterY": (), + "QImage.fill": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',)], + "QImage.format": (), + "QImage.fromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.hasAlphaChannel": (), + "QImage.height": (), + "QImage.invertPixels": ('PySide2.QtGui.QImage.InvertMode',), + "QImage.isGrayscale": (), + "QImage.isNull": (), + "QImage.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QImage.loadFromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QImage.mirrored": ('bool', 'bool'), + "QImage.mirrored_helper": ('bool', 'bool'), + "QImage.mirrored_inplace": ('bool', 'bool'), + "QImage.offset": (), + "QImage.paintEngine": (), + "QImage.pixel": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelColor": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelFormat": (), + "QImage.pixelIndex": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.rect": (), + "QImage.rgbSwapped": (), + "QImage.rgbSwapped_helper": (), + "QImage.rgbSwapped_inplace": (), + "QImage.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QImage.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scanLine": ('int',), + "QImage.setAlphaChannel": ('PySide2.QtGui.QImage',), + "QImage.setColor": ('int', 'int'), + "QImage.setColorCount": ('int',), + "QImage.setColorTable": ('list',), + "QImage.setDevicePixelRatio": ('float',), + "QImage.setDotsPerMeterX": ('int',), + "QImage.setDotsPerMeterY": ('int',), + "QImage.setOffset": ('PySide2.QtCore.QPoint',), + "QImage.setPixel": [('PySide2.QtCore.QPoint', 'int'), ('int', 'int', 'int')], + "QImage.setPixelColor": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QColor')], + "QImage.setText": ('str', 'str'), + "QImage.size": (), + "QImage.smoothScaled": ('int', 'int'), + "QImage.swap": ('PySide2.QtGui.QImage',), + "QImage.text": ('str',), + "QImage.textKeys": (), + "QImage.toImageFormat": ('PySide2.QtGui.QPixelFormat',), + "QImage.toPixelFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QImage.valid": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.width": (), + + # class PySide2.QtGui.QImageIOHandler: + "QImageIOHandler.__init__": (), + "QImageIOHandler.canRead": (), + "QImageIOHandler.currentImageNumber": (), + "QImageIOHandler.currentImageRect": (), + "QImageIOHandler.device": (), + "QImageIOHandler.format": (), + "QImageIOHandler.imageCount": (), + "QImageIOHandler.jumpToImage": ('int',), + "QImageIOHandler.jumpToNextImage": (), + "QImageIOHandler.loopCount": (), + "QImageIOHandler.name": (), + "QImageIOHandler.nextImageDelay": (), + "QImageIOHandler.option": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.read": ('PySide2.QtGui.QImage',), + "QImageIOHandler.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageIOHandler.setFormat": ['PySide2.QtCore.QByteArray'], + "QImageIOHandler.setOption": ('PySide2.QtGui.QImageIOHandler.ImageOption', 'PySide2.support.signature.typing.Any'), + "QImageIOHandler.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QImageReader: + "QImageReader.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageReader.autoDetectImageFormat": (), + "QImageReader.autoTransform": (), + "QImageReader.backgroundColor": (), + "QImageReader.canRead": (), + "QImageReader.clipRect": (), + "QImageReader.currentImageNumber": (), + "QImageReader.currentImageRect": (), + "QImageReader.decideFormatFromContent": (), + "QImageReader.device": (), + "QImageReader.error": (), + "QImageReader.errorString": (), + "QImageReader.fileName": (), + "QImageReader.format": (), + "QImageReader.gamma": (), + "QImageReader.imageCount": (), + "QImageReader.imageFormat": [(), ('PySide2.QtCore.QIODevice',), ('str',)], + "QImageReader.jumpToImage": ('int',), + "QImageReader.jumpToNextImage": (), + "QImageReader.loopCount": (), + "QImageReader.nextImageDelay": (), + "QImageReader.quality": (), + "QImageReader.read": (), + "QImageReader.scaledClipRect": (), + "QImageReader.scaledSize": (), + "QImageReader.setAutoDetectImageFormat": ('bool',), + "QImageReader.setAutoTransform": ('bool',), + "QImageReader.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QImageReader.setClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setDecideFormatFromContent": ('bool',), + "QImageReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageReader.setFileName": ('str',), + "QImageReader.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageReader.setGamma": ('float',), + "QImageReader.setQuality": ('int',), + "QImageReader.setScaledClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setScaledSize": ('PySide2.QtCore.QSize',), + "QImageReader.size": (), + "QImageReader.subType": (), + "QImageReader.supportedImageFormats": (), + "QImageReader.supportedMimeTypes": (), + "QImageReader.supportedSubTypes": (), + "QImageReader.supportsAnimation": (), + "QImageReader.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageReader.text": ('str',), + "QImageReader.textKeys": (), + "QImageReader.transformation": (), + + # class PySide2.QtGui.QImageWriter: + "QImageWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageWriter.canWrite": (), + "QImageWriter.compression": (), + "QImageWriter.description": (), + "QImageWriter.device": (), + "QImageWriter.error": (), + "QImageWriter.errorString": (), + "QImageWriter.fileName": (), + "QImageWriter.format": (), + "QImageWriter.gamma": (), + "QImageWriter.optimizedWrite": (), + "QImageWriter.progressiveScanWrite": (), + "QImageWriter.quality": (), + "QImageWriter.setCompression": ('int',), + "QImageWriter.setDescription": ('str',), + "QImageWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageWriter.setFileName": ('str',), + "QImageWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setGamma": ('float',), + "QImageWriter.setOptimizedWrite": ('bool',), + "QImageWriter.setProgressiveScanWrite": ('bool',), + "QImageWriter.setQuality": ('int',), + "QImageWriter.setSubType": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setText": ('str', 'str'), + "QImageWriter.setTransformation": ('Transformations',), + "QImageWriter.subType": (), + "QImageWriter.supportedImageFormats": (), + "QImageWriter.supportedMimeTypes": (), + "QImageWriter.supportedSubTypes": (), + "QImageWriter.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageWriter.transformation": (), + "QImageWriter.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QInputEvent: + "QInputEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'KeyboardModifiers'), + "QInputEvent.modifiers": (), + "QInputEvent.setModifiers": ('KeyboardModifiers',), + "QInputEvent.setTimestamp": ('int',), + "QInputEvent.timestamp": (), + + # class PySide2.QtGui.QInputMethodEvent: + "QInputMethodEvent.__init__": [(), ('PySide2.QtGui.QInputMethodEvent',), ('str', 'list')], + "QInputMethodEvent.attributes": (), + "QInputMethodEvent.commitString": (), + "QInputMethodEvent.preeditString": (), + "QInputMethodEvent.replacementLength": (), + "QInputMethodEvent.replacementStart": (), + "QInputMethodEvent.setCommitString": ('str', 'int', 'int'), + + # class PySide2.QtGui.QIntValidator: + "QIntValidator.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QIntValidator.bottom": (), + "QIntValidator.fixup": ('str',), + "QIntValidator.setBottom": ('int',), + "QIntValidator.setRange": ('int', 'int'), + "QIntValidator.setTop": ('int',), + "QIntValidator.top": (), + "QIntValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QKeyEvent: + "QKeyEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'int', 'KeyboardModifiers', 'int', 'int', 'int', 'str', 'bool', 'int'), ('PySide2.QtCore.QEvent.Type', 'int', 'KeyboardModifiers', 'str', 'bool', 'int')], + "QKeyEvent.count": (), + "QKeyEvent.isAutoRepeat": (), + "QKeyEvent.key": (), + "QKeyEvent.matches": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeyEvent.modifiers": (), + "QKeyEvent.nativeModifiers": (), + "QKeyEvent.nativeScanCode": (), + "QKeyEvent.nativeVirtualKey": (), + "QKeyEvent.text": (), + + # class PySide2.QtGui.QKeySequence: + "QKeySequence.__init__": [(), ('PySide2.QtGui.QKeySequence',), ('PySide2.QtGui.QKeySequence.StandardKey',), ('int', 'int', 'int', 'int'), ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat')], + "QKeySequence.__copy__": (), + "QKeySequence.__reduce__": (), + "QKeySequence.count": (), + "QKeySequence.fromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.isEmpty": (), + "QKeySequence.keyBindings": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeySequence.listFromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.listToString": ('list', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.matches": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.mnemonic": ('str',), + "QKeySequence.swap": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.toString": ('PySide2.QtGui.QKeySequence.SequenceFormat',), + + # class PySide2.QtGui.QLinearGradient: + "QLinearGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtGui.QLinearGradient',), ('float', 'float', 'float', 'float')], + "QLinearGradient.__copy__": (), + "QLinearGradient.finalStop": (), + "QLinearGradient.setFinalStop": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.setStart": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.start": (), + + # class PySide2.QtGui.QMatrix: + "QMatrix.__init__": [(), ('PySide2.QtGui.QMatrix',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix.__copy__": (), + "QMatrix.__reduce__": (), + "QMatrix.determinant": (), + "QMatrix.dx": (), + "QMatrix.dy": (), + "QMatrix.inverted": ('bool',), + "QMatrix.isIdentity": (), + "QMatrix.isInvertible": (), + "QMatrix.m11": (), + "QMatrix.m12": (), + "QMatrix.m21": (), + "QMatrix.m22": (), + "QMatrix.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QMatrix.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix.mapToPolygon": ('PySide2.QtCore.QRect',), + "QMatrix.reset": (), + "QMatrix.rotate": ('float',), + "QMatrix.scale": ('float', 'float'), + "QMatrix.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix.shear": ('float', 'float'), + "QMatrix.translate": ('float', 'float'), + + # class PySide2.QtGui.QMatrix2x2: + "QMatrix2x2.__init__": [('PySide2.QtGui.QMatrix2x2',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix2x2.__copy__": (), + "QMatrix2x2.__reduce__": (), + "QMatrix2x2.data": (), + "QMatrix2x2.fill": ('object',), + "QMatrix2x2.transposed": (), + + # class PySide2.QtGui.QMatrix2x3: + "QMatrix2x3.__init__": [('PySide2.QtGui.QMatrix2x3',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix2x3.__copy__": (), + "QMatrix2x3.__reduce__": (), + "QMatrix2x3.data": (), + "QMatrix2x3.fill": ('object',), + "QMatrix2x3.transposed": (), + + # class PySide2.QtGui.QMatrix2x4: + "QMatrix2x4.__init__": [('PySide2.QtGui.QMatrix2x4',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix2x4.__copy__": (), + "QMatrix2x4.__reduce__": (), + "QMatrix2x4.data": (), + "QMatrix2x4.fill": ('object',), + "QMatrix2x4.transposed": (), + + # class PySide2.QtGui.QMatrix3x2: + "QMatrix3x2.__init__": [('PySide2.QtGui.QMatrix3x2',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix3x2.__copy__": (), + "QMatrix3x2.__reduce__": (), + "QMatrix3x2.data": (), + "QMatrix3x2.fill": ('object',), + "QMatrix3x2.transposed": (), + + # class PySide2.QtGui.QMatrix3x3: + "QMatrix3x3.__init__": [('PySide2.QtGui.QMatrix3x3',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix3x3.__copy__": (), + "QMatrix3x3.__reduce__": (), + "QMatrix3x3.data": (), + "QMatrix3x3.fill": ('object',), + "QMatrix3x3.transposed": (), + + # class PySide2.QtGui.QMatrix3x4: + "QMatrix3x4.__init__": [('PySide2.QtGui.QMatrix3x4',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix3x4.__copy__": (), + "QMatrix3x4.__reduce__": (), + "QMatrix3x4.data": (), + "QMatrix3x4.fill": ('object',), + "QMatrix3x4.transposed": (), + + # class PySide2.QtGui.QMatrix4x2: + "QMatrix4x2.__init__": [('PySide2.QtGui.QMatrix4x2',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix4x2.__copy__": (), + "QMatrix4x2.__reduce__": (), + "QMatrix4x2.data": (), + "QMatrix4x2.fill": ('object',), + "QMatrix4x2.transposed": (), + + # class PySide2.QtGui.QMatrix4x3: + "QMatrix4x3.__init__": [('PySide2.QtGui.QMatrix4x3',), ('PySide2.support.signature.typing.Sequence',)], + "QMatrix4x3.__copy__": (), + "QMatrix4x3.__reduce__": (), + "QMatrix4x3.data": (), + "QMatrix4x3.fill": ('object',), + "QMatrix4x3.transposed": (), + + # class PySide2.QtGui.QMatrix4x4: + "QMatrix4x4.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QMatrix4x4',), ('PySide2.QtGui.QTransform',), ('float',), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.__copy__": (), + "QMatrix4x4.__reduce__": (), + "QMatrix4x4.column": ('int',), + "QMatrix4x4.copyDataTo": ('float',), + "QMatrix4x4.data": (), + "QMatrix4x4.determinant": (), + "QMatrix4x4.fill": ('float',), + "QMatrix4x4.flipCoordinates": (), + "QMatrix4x4.frustum": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix4x4.inverted": ('bool',), + "QMatrix4x4.isAffine": (), + "QMatrix4x4.isIdentity": (), + "QMatrix4x4.lookAt": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QMatrix4x4.map": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',)], + "QMatrix4x4.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix4x4.mapVector": ('PySide2.QtGui.QVector3D',), + "QMatrix4x4.normalMatrix": (), + "QMatrix4x4.optimize": (), + "QMatrix4x4.ortho": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.perspective": ('float', 'float', 'float', 'float'), + "QMatrix4x4.rotate": [('PySide2.QtGui.QQuaternion',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QMatrix4x4.row": ('int',), + "QMatrix4x4.scale": [('PySide2.QtGui.QVector3D',), ('float',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.setColumn": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setRow": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setToIdentity": (), + "QMatrix4x4.toAffine": (), + "QMatrix4x4.toTransform": [(), ('float',)], + "QMatrix4x4.translate": [('PySide2.QtGui.QVector3D',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.transposed": (), + "QMatrix4x4.viewport": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + + # class PySide2.QtGui.QMouseEvent: + "QMouseEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers')], + "QMouseEvent.button": (), + "QMouseEvent.buttons": (), + "QMouseEvent.flags": (), + "QMouseEvent.global"+"Y": (), + "QMouseEvent.globalPos": (), + "QMouseEvent.globalX": (), + "QMouseEvent.localPos": (), + "QMouseEvent.pos": (), + "QMouseEvent.screenPos": (), + "QMouseEvent.source": (), + "QMouseEvent.windowPos": (), + "QMouseEvent.x": (), + "QMouseEvent.y": (), + + # class PySide2.QtGui.QMoveEvent: + "QMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QMoveEvent.oldPos": (), + "QMoveEvent.pos": (), + + # class PySide2.QtGui.QMovie: + "QMovie.__init__": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QMovie.backgroundColor": (), + "QMovie.cacheMode": (), + "QMovie.currentFrameNumber": (), + "QMovie.currentImage": (), + "QMovie.currentPixmap": (), + "QMovie.device": (), + "QMovie.fileName": (), + "QMovie.format": (), + "QMovie.frameCount": (), + "QMovie.frameRect": (), + "QMovie.isValid": (), + "QMovie.jumpToFrame": ('int',), + "QMovie.jumpToNextFrame": (), + "QMovie.loopCount": (), + "QMovie.nextFrameDelay": (), + "QMovie.scaledSize": (), + "QMovie.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QMovie.setCacheMode": ('PySide2.QtGui.QMovie.CacheMode',), + "QMovie.setDevice": ('PySide2.QtCore.QIODevice',), + "QMovie.setFileName": ('str',), + "QMovie.setFormat": ('PySide2.QtCore.QByteArray',), + "QMovie.setPaused": ('bool',), + "QMovie.setScaledSize": ('PySide2.QtCore.QSize',), + "QMovie.setSpeed": ('int',), + "QMovie.speed": (), + "QMovie.start": (), + "QMovie.state": (), + "QMovie.stop": (), + "QMovie.supportedFormats": (), + + # class PySide2.QtGui.QOpenGLBuffer: + "QOpenGLBuffer.__init__": [(), ('PySide2.QtGui.QOpenGLBuffer',), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.allocate": [('int',), ('int', 'int')], + "QOpenGLBuffer.bind": (), + "QOpenGLBuffer.create": (), + "QOpenGLBuffer.destroy": (), + "QOpenGLBuffer.isCreated": (), + "QOpenGLBuffer.map": ('PySide2.QtGui.QOpenGLBuffer.Access',), + "QOpenGLBuffer.mapRange": ('int', 'int', 'RangeAccessFlags'), + "QOpenGLBuffer.read": ('int', 'int', 'int'), + "QOpenGLBuffer.release": [(), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.setUsagePattern": ('PySide2.QtGui.QOpenGLBuffer.UsagePattern',), + "QOpenGLBuffer.size": (), + "QOpenGLBuffer.type": (), + "QOpenGLBuffer.unmap": (), + "QOpenGLBuffer.usagePattern": (), + "QOpenGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtGui.QOpenGLContext: + "QOpenGLContext.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLContext.areSharing": ('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLContext.create": (), + "QOpenGLContext.currentContext": (), + "QOpenGLContext.doneCurrent": (), + "QOpenGLContext.extensions": (), + "QOpenGLContext.format": (), + "QOpenGLContext.globalShareContext": (), + "QOpenGLContext.hasExtension": ('PySide2.QtCore.QByteArray',), + "QOpenGLContext.isOpenGLES": (), + "QOpenGLContext.isValid": (), + "QOpenGLContext.makeCurrent": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.nativeHandle": (), + "QOpenGLContext.openGLModuleHandle": (), + "QOpenGLContext.openGLModuleType": (), + "QOpenGLContext.screen": (), + "QOpenGLContext.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLContext.setNativeHandle": ('PySide2.support.signature.typing.Any',), + "QOpenGLContext.setScreen": ('PySide2.QtGui.QScreen',), + "QOpenGLContext.setShareContext": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLContext.shareContext": (), + "QOpenGLContext.supportsThreadedOpenGL": (), + "QOpenGLContext.surface": (), + "QOpenGLContext.swapBuffers": ('PySide2.QtGui.QSurface',), + + # class PySide2.QtGui.QOpenGLFramebufferObject: + "QOpenGLFramebufferObject.isValid": (), + "QOpenGLFramebufferObject.attachment": (), + "QOpenGLFramebufferObject.bind": (), + "QOpenGLFramebufferObject.bindDefault": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QOpenGLFramebufferObject.height": (), + "QOpenGLFramebufferObject.isBound": (), + "QOpenGLFramebufferObject.release": (), + "QOpenGLFramebufferObject.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObject.size": (), + "QOpenGLFramebufferObject.sizes": (), + "QOpenGLFramebufferObject.toImage": [(), ('bool',), ('bool', 'int')], + "QOpenGLFramebufferObject.width": (), + + # class PySide2.QtGui.QOpenGLShader: + "QOpenGLShader.__init__": ('ShaderType', 'PySide2.QtCore.QObject'), + "QOpenGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShader.compileSourceFile": ('str',), + "QOpenGLShader.hasOpenGLShaders": ('ShaderType', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLShader.isCompiled": (), + "QOpenGLShader.log": (), + "QOpenGLShader.shaderType": (), + "QOpenGLShader.sourceCode": (), + + # class PySide2.QtGui.QPageLayout: + "QPageLayout.__init__": [(), ('PySide2.QtGui.QPageLayout',), ('PySide2.QtGui.QPageSize', 'PySide2.QtGui.QPageLayout.Orientation', 'PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit', 'PySide2.QtCore.QMarginsF')], + "QPageLayout.__copy__": (), + "QPageLayout.fullRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.fullRectPixels": ('int',), + "QPageLayout.fullRectPoints": (), + "QPageLayout.isEquivalentTo": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.isValid": (), + "QPageLayout.margins": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.marginsPixels": ('int',), + "QPageLayout.marginsPoints": (), + "QPageLayout.maximumMargins": (), + "QPageLayout.minimumMargins": (), + "QPageLayout.mode": (), + "QPageLayout.orientation": (), + "QPageLayout.pageSize": (), + "QPageLayout.paintRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.paintRectPixels": ('int',), + "QPageLayout.paintRectPoints": (), + "QPageLayout.setBottomMargin": ('float',), + "QPageLayout.setLeftMargin": ('float',), + "QPageLayout.setMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMinimumMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMode": ('PySide2.QtGui.QPageLayout.Mode',), + "QPageLayout.setOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPageLayout.setPageSize": ('PySide2.QtGui.QPageSize', 'PySide2.QtCore.QMarginsF'), + "QPageLayout.setRightMargin": ('float',), + "QPageLayout.setTopMargin": ('float',), + "QPageLayout.setUnits": ('PySide2.QtGui.QPageLayout.Unit',), + "QPageLayout.swap": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.units": (), + + # class PySide2.QtGui.QPageSize: + "QPageSize.__init__": [(), ('PySide2.QtCore.QSize', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.__copy__": (), + "QPageSize.definitionSize": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.definitionUnits": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.id": [(), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('int',)], + "QPageSize.isEquivalentTo": ('PySide2.QtGui.QPageSize',), + "QPageSize.isValid": (), + "QPageSize.key": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.name": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.rect": ('PySide2.QtGui.QPageSize.Unit',), + "QPageSize.rectPixels": ('int',), + "QPageSize.rectPoints": (), + "QPageSize.size": [('PySide2.QtGui.QPageSize.PageSizeId', 'PySide2.QtGui.QPageSize.Unit'), ('PySide2.QtGui.QPageSize.Unit',)], + "QPageSize.sizePixels": [('PySide2.QtGui.QPageSize.PageSizeId', 'int'), ('int',)], + "QPageSize.sizePoints": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.swap": ('PySide2.QtGui.QPageSize',), + "QPageSize.windowsId": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + + # class PySide2.QtGui.QPagedPaintDevice: + "QPagedPaintDevice.__init__": (), + "QPagedPaintDevice.devicePageLayout": [], + "QPagedPaintDevice.margins": (), + "QPagedPaintDevice.newPage": (), + "QPagedPaintDevice.pageLayout": (), + "QPagedPaintDevice.pageSize": (), + "QPagedPaintDevice.pageSizeMM": (), + "QPagedPaintDevice.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPagedPaintDevice.setPageLayout": ('PySide2.QtGui.QPageLayout',), + "QPagedPaintDevice.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit')], + "QPagedPaintDevice.setPageOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPagedPaintDevice.setPageSize": [('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPagedPaintDevice.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtGui.QPaintDevice: + "QPaintDevice.__init__": (), + "QPaintDevice.colorCount": (), + "QPaintDevice.depth": (), + "QPaintDevice.devType": (), + "QPaintDevice.devicePixelRatio": (), + "QPaintDevice.devicePixelRatioF": (), + "QPaintDevice.devicePixelRatioFScale": (), + "QPaintDevice.height": (), + "QPaintDevice.heightMM": (), + "QPaintDevice.initPainter": ('PySide2.QtGui.QPainter',), + "QPaintDevice.logicalDpiX": (), + "QPaintDevice.logicalDpiY": (), + "QPaintDevice.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDevice.paintEngine": (), + "QPaintDevice.paintingActive": (), + "QPaintDevice.physicalDpiX": (), + "QPaintDevice.physicalDpiY": (), + "QPaintDevice.redirected": ('PySide2.QtCore.QPoint',), + "QPaintDevice.sharedPainter": (), + "QPaintDevice.width": (), + "QPaintDevice.widthMM": (), + + # class PySide2.QtGui.QPaintDeviceWindow: + "QPaintDeviceWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDeviceWindow.event": ('PySide2.QtCore.QEvent',), + "QPaintDeviceWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QPaintDeviceWindow.paintEngine": (), + "QPaintDeviceWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPaintDeviceWindow.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + + # class PySide2.QtGui.QPaintEngine: + "QPaintEngine.__init__": ('PaintEngineFeatures',), + "QPaintEngine.begin": ('PySide2.QtGui.QPaintDevice',), + "QPaintEngine.clearDirty": ('DirtyFlags',), + "QPaintEngine.coordinateOffset": (), + "QPaintEngine.drawEllipse": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QPaintEngine.drawImage": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), + "QPaintEngine.drawLines": [('PySide2.QtCore.QLine', 'int'), ('PySide2.QtCore.QLineF', 'int')], + "QPaintEngine.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPaintEngine.drawPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), + "QPaintEngine.drawPoints": [('PySide2.QtCore.QPoint', 'int'), ('PySide2.QtCore.QPointF', 'int')], + "QPaintEngine.drawPolygon": [('PySide2.QtCore.QPoint', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode')], + "QPaintEngine.drawRects": [('PySide2.QtCore.QRect', 'int'), ('PySide2.QtCore.QRectF', 'int')], + "QPaintEngine.drawTextItem": ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), + "QPaintEngine.drawTiledPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), + "QPaintEngine.end": (), + "QPaintEngine.hasFeature": ('PaintEngineFeatures',), + "QPaintEngine.isActive": (), + "QPaintEngine.isExtended": (), + "QPaintEngine.paintDevice": (), + "QPaintEngine.painter": (), + "QPaintEngine.setActive": ('bool',), + "QPaintEngine.setDirty": ('DirtyFlags',), + "QPaintEngine.setSystemClip": ('PySide2.QtGui.QRegion',), + "QPaintEngine.setSystemRect": ('PySide2.QtCore.QRect',), + "QPaintEngine.syncState": (), + "QPaintEngine.systemClip": (), + "QPaintEngine.systemRect": (), + "QPaintEngine.testDirty": ('DirtyFlags',), + "QPaintEngine.type": (), + "QPaintEngine.updateState": ('PySide2.QtGui.QPaintEngineState',), + + # class PySide2.QtGui.QPaintEngineState: + "QPaintEngineState.__init__": (), + "QPaintEngineState.backgroundBrush": (), + "QPaintEngineState.backgroundMode": (), + "QPaintEngineState.brush": (), + "QPaintEngineState.brushNeedsResolving": (), + "QPaintEngineState.brushOrigin": (), + "QPaintEngineState.clipOperation": (), + "QPaintEngineState.clipPath": (), + "QPaintEngineState.clipRegion": (), + "QPaintEngineState.compositionMode": (), + "QPaintEngineState.font": (), + "QPaintEngineState.isClipEnabled": (), + "QPaintEngineState.matrix": (), + "QPaintEngineState.opacity": (), + "QPaintEngineState.painter": (), + "QPaintEngineState.pen": (), + "QPaintEngineState.penNeedsResolving": (), + "QPaintEngineState.renderHints": (), + "QPaintEngineState.state": (), + "QPaintEngineState.transform": (), + + # class PySide2.QtGui.QPaintEvent: + "QPaintEvent.__init__": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QPaintEvent.rect": (), + "QPaintEvent.region": (), + + # class PySide2.QtGui.QPainter: + "QPainter.__init__": [(), ('PySide2.QtGui.QPaintDevice',)], + "QPainter.background": (), + "QPainter.backgroundMode": (), + "QPainter.begin": ('PySide2.QtGui.QPaintDevice',), + "QPainter.beginNativePainting": (), + "QPainter.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str'), ('PySide2.QtCore.QRectF', 'int', 'str'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str')], + "QPainter.brush": (), + "QPainter.brushOrigin": (), + "QPainter.clipBoundingRect": (), + "QPainter.clipPath": (), + "QPainter.clipRegion": (), + "QPainter.combinedMatrix": (), + "QPainter.combinedTransform": (), + "QPainter.compositionMode": (), + "QPainter.device": (), + "QPainter.deviceMatrix": (), + "QPainter.deviceTransform": (), + "QPainter.drawArc": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawChord": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawConvexPolygon": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawEllipse": [('PySide2.QtCore.QPoint', 'int', 'int'), ('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawImage": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'ImageConversionFlags'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'ImageConversionFlags'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), ('int', 'int', 'PySide2.QtGui.QImage', 'int', 'int', 'int', 'int', 'ImageConversionFlags')], + "QPainter.drawLine": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int')], + "QPainter.drawLines": ['list'], + "QPainter.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPainter.drawPicture": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPicture'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPicture'), ('int', 'int', 'PySide2.QtGui.QPicture')], + "QPainter.drawPie": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmap": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmapFragments": ('PySide2.QtGui.QPainter.PixmapFragment', 'int', 'PySide2.QtGui.QPixmap', 'PixmapFragmentHints'), + "QPainter.drawPoint": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.drawPoints": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawPolygon": [('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.FillRule'), ('list', 'PySide2.QtCore.Qt.FillRule')], + "QPainter.drawPolyline": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawRects": ['list'], + "QPainter.drawRoundRect": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawRoundedRect": [('PySide2.QtCore.QRect', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('int', 'int', 'int', 'int', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainter.drawStaticText": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QStaticText'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QStaticText'), ('int', 'int', 'PySide2.QtGui.QStaticText')], + "QPainter.drawText": [('PySide2.QtCore.QPoint', 'str'), ('PySide2.QtCore.QPointF', 'str'), ('PySide2.QtCore.QRect', 'int', 'str', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'int', 'str', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str', 'PySide2.QtCore.QRect'), ('int', 'int', 'str')], + "QPainter.drawTextItem": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QTextItem'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), ('int', 'int', 'PySide2.QtGui.QTextItem')], + "QPainter.drawTiledPixmap": [('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int')], + "QPainter.end": (), + "QPainter.endNativePainting": (), + "QPainter.eraseRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.fillPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QBrush'), + "QPainter.fillRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.BrushStyle'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.GlobalColor'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QBrush'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QColor')], + "QPainter.font": (), + "QPainter.fontInfo": (), + "QPainter.fontMetrics": (), + "QPainter.hasClipping": (), + "QPainter.initFrom": ('PySide2.QtGui.QPaintDevice',), + "QPainter.isActive": (), + "QPainter.layoutDirection": (), + "QPainter.matrix": (), + "QPainter.matrixEnabled": (), + "QPainter.opacity": (), + "QPainter.paintEngine": (), + "QPainter.pen": (), + "QPainter.redirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.renderHints": (), + "QPainter.resetMatrix": (), + "QPainter.resetTransform": (), + "QPainter.restore": (), + "QPainter.restoreRedirected": ('PySide2.QtGui.QPaintDevice',), + "QPainter.rotate": ('float',), + "QPainter.save": (), + "QPainter.scale": ('float', 'float'), + "QPainter.setBackground": ('PySide2.QtGui.QBrush',), + "QPainter.setBackgroundMode": ('PySide2.QtCore.Qt.BGMode',), + "QPainter.setBrush": [('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtGui.QBrush',)], + "QPainter.setBrushOrigin": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.setClipPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ClipOperation'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ClipOperation'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ClipOperation')], + "QPainter.setClipRegion": ('PySide2.QtGui.QRegion', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipping": ('bool',), + "QPainter.setCompositionMode": ('PySide2.QtGui.QPainter.CompositionMode',), + "QPainter.setFont": ('PySide2.QtGui.QFont',), + "QPainter.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QPainter.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setMatrixEnabled": ('bool',), + "QPainter.setOpacity": ('float',), + "QPainter.setPen": [('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPainter.setRedirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QPainter.setRenderHints": ('RenderHints', 'bool'), + "QPainter.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.setViewTransformEnabled": ('bool',), + "QPainter.setViewport": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWindow": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWorldMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setWorldMatrixEnabled": ('bool',), + "QPainter.setWorldTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.shear": ('float', 'float'), + "QPainter.strokePath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen'), + "QPainter.testRenderHint": ('PySide2.QtGui.QPainter.RenderHint',), + "QPainter.transform": (), + "QPainter.translate": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainter.viewTransformEnabled": (), + "QPainter.viewport": (), + "QPainter.window": (), + "QPainter.worldMatrix": (), + "QPainter.worldMatrixEnabled": (), + "QPainter.worldTransform": (), + + # class PySide2.QtGui.QPainterPath: + "QPainterPath.__init__": [(), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.__copy__": (), + "QPainterPath.addEllipse": [('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.addPolygon": ('PySide2.QtGui.QPolygonF',), + "QPainterPath.addRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addRegion": ('PySide2.QtGui.QRegion',), + "QPainterPath.addRoundRect": [('PySide2.QtCore.QRectF', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QPainterPath.addRoundedRect": [('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('float', 'float', 'float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainterPath.addText": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QFont', 'str'), ('float', 'float', 'PySide2.QtGui.QFont', 'str')], + "QPainterPath.angleAtPercent": ('float',), + "QPainterPath.arcMoveTo": [('PySide2.QtCore.QRectF', 'float'), ('float', 'float', 'float', 'float', 'float')], + "QPainterPath.arcTo": [('PySide2.QtCore.QRectF', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.boundingRect": (), + "QPainterPath.closeSubpath": (), + "QPainterPath.connectPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.controlPointRect": (), + "QPainterPath.cubicTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.currentPosition": (), + "QPainterPath.elementAt": ('int',), + "QPainterPath.elementCount": (), + "QPainterPath.fillRule": (), + "QPainterPath.intersected": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.intersects": [('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.isEmpty": (), + "QPainterPath.length": (), + "QPainterPath.lineTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.percentAtLength": ('float',), + "QPainterPath.pointAtPercent": ('float',), + "QPainterPath.quadTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QPainterPath.setElementPositionAt": ('int', 'float', 'float'), + "QPainterPath.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QPainterPath.simplified": (), + "QPainterPath.slopeAtPercent": ('float',), + "QPainterPath.subtracted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.subtractedInverted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.swap": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.toFillPolygon": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toFillPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toReversed": (), + "QPainterPath.toSubpathPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.united": ('PySide2.QtGui.QPainterPath',), + + # class PySide2.QtGui.QPainterPathStroker: + "QPainterPathStroker.__init__": [(), ('PySide2.QtGui.QPen',)], + "QPainterPathStroker.capStyle": (), + "QPainterPathStroker.createStroke": ('PySide2.QtGui.QPainterPath',), + "QPainterPathStroker.curveThreshold": (), + "QPainterPathStroker.dashOffset": (), + "QPainterPathStroker.dashPattern": (), + "QPainterPathStroker.joinStyle": (), + "QPainterPathStroker.miterLimit": (), + "QPainterPathStroker.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPainterPathStroker.setCurveThreshold": ('float',), + "QPainterPathStroker.setDashOffset": ('float',), + "QPainterPathStroker.setDashPattern": [('PySide2.QtCore.Qt.PenStyle',), ('list',)], + "QPainterPathStroker.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPainterPathStroker.setMiterLimit": ('float',), + "QPainterPathStroker.setWidth": ('float',), + "QPainterPathStroker.width": (), + + # class PySide2.QtGui.QPalette: + "QPalette.__init__": [(), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette',)], + "QPalette.__copy__": (), + "QPalette.alternateBase": (), + "QPalette.background": (), + "QPalette.base": (), + "QPalette.brightText": (), + "QPalette.brush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.button": (), + "QPalette.buttonText": (), + "QPalette.cacheKey": (), + "QPalette.color": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.currentColorGroup": (), + "QPalette.dark": (), + "QPalette.foreground": (), + "QPalette.highlight": (), + "QPalette.highlightedText": (), + "QPalette.isBrushSet": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), + "QPalette.isCopyOf": ('PySide2.QtGui.QPalette',), + "QPalette.isEqual": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorGroup'), + "QPalette.light": (), + "QPalette.link": (), + "QPalette.linkVisited": (), + "QPalette.mid": (), + "QPalette.midlight": (), + "QPalette.resolve": [(), ('PySide2.QtGui.QPalette',), ('int',)], + "QPalette.setBrush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush')], + "QPalette.setColor": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor')], + "QPalette.setColorGroup": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), + "QPalette.setCurrentColorGroup": ('PySide2.QtGui.QPalette.ColorGroup',), + "QPalette.shadow": (), + "QPalette.swap": ('PySide2.QtGui.QPalette',), + "QPalette.text": (), + "QPalette.toolTipBase": (), + "QPalette.toolTipText": (), + "QPalette.window": (), + "QPalette.windowText": (), + + # class PySide2.QtGui.QPdfWriter: + "QPdfWriter.__init__": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPdfWriter.creator": (), + "QPdfWriter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPdfWriter.newPage": (), + "QPdfWriter.paintEngine": (), + "QPdfWriter.resolution": (), + "QPdfWriter.setCreator": ('str',), + "QPdfWriter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPdfWriter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPdfWriter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPdfWriter.setResolution": ('int',), + "QPdfWriter.setTitle": ('str',), + "QPdfWriter.title": (), + + # class PySide2.QtGui.QPen: + "QPen.__init__": [(), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QBrush', 'float', 'PySide2.QtCore.Qt.PenStyle', 'PySide2.QtCore.Qt.PenCapStyle', 'PySide2.QtCore.Qt.PenJoinStyle'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPen.__copy__": (), + "QPen.brush": (), + "QPen.capStyle": (), + "QPen.color": (), + "QPen.dashOffset": (), + "QPen.dashPattern": (), + "QPen.isCosmetic": (), + "QPen.isSolid": (), + "QPen.joinStyle": (), + "QPen.miterLimit": (), + "QPen.setBrush": ('PySide2.QtGui.QBrush',), + "QPen.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPen.setColor": ('PySide2.QtGui.QColor',), + "QPen.setCosmetic": ('bool',), + "QPen.setDashOffset": ('float',), + "QPen.setDashPattern": ('list',), + "QPen.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPen.setMiterLimit": ('float',), + "QPen.setStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QPen.setWidth": ('int',), + "QPen.setWidthF": ('float',), + "QPen.style": (), + "QPen.swap": ('PySide2.QtGui.QPen',), + "QPen.width": (), + "QPen.widthF": (), + + # class PySide2.QtGui.QPicture: + "QPicture.__init__": [('PySide2.QtGui.QPicture',), ('int',)], + "QPicture.__copy__": (), + "QPicture.boundingRect": (), + "QPicture.data": (), + "QPicture.devType": (), + "QPicture.inputFormatList": (), + "QPicture.inputFormats": (), + "QPicture.isNull": (), + "QPicture.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPicture.outputFormatList": (), + "QPicture.outputFormats": (), + "QPicture.paintEngine": (), + "QPicture.pictureFormat": ('str',), + "QPicture.play": ('PySide2.QtGui.QPainter',), + "QPicture.save": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.setBoundingRect": ('PySide2.QtCore.QRect',), + "QPicture.setData": ('str', 'int'), + "QPicture.size": (), + "QPicture.swap": ('PySide2.QtGui.QPicture',), + + # class PySide2.QtGui.QPictureIO: + "QPictureIO.__init__": [(), ('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPictureIO.description": (), + "QPictureIO.fileName": (), + "QPictureIO.format": (), + "QPictureIO.gamma": (), + "QPictureIO.inputFormats": (), + "QPictureIO.ioDevice": (), + "QPictureIO.outputFormats": (), + "QPictureIO.parameters": (), + "QPictureIO.picture": (), + "QPictureIO.pictureFormat": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPictureIO.quality": (), + "QPictureIO.read": (), + "QPictureIO.setDescription": ('str',), + "QPictureIO.setFileName": ('str',), + "QPictureIO.setFormat": ('str',), + "QPictureIO.setGamma": ('float',), + "QPictureIO.setIODevice": ('PySide2.QtCore.QIODevice',), + "QPictureIO.setParameters": ('str',), + "QPictureIO.setPicture": ('PySide2.QtGui.QPicture',), + "QPictureIO.setQuality": ('int',), + "QPictureIO.setStatus": ('int',), + "QPictureIO.status": (), + "QPictureIO.write": (), + + # class PySide2.QtGui.QPixelFormat: + "QPixelFormat.__init__": [(), ('PySide2.QtGui.QPixelFormat',), ('PySide2.QtGui.QPixelFormat.ColorModel', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.support.signature.typing.Union[str, int]', 'PySide2.QtGui.QPixelFormat.AlphaUsage', 'PySide2.QtGui.QPixelFormat.AlphaPosition', 'PySide2.QtGui.QPixelFormat.AlphaPremultiplied', 'PySide2.QtGui.QPixelFormat.TypeInterpretation', 'PySide2.QtGui.QPixelFormat.ByteOrder', 'PySide2.support.signature.typing.Union[str, int]')], + "QPixelFormat.__copy__": (), + "QPixelFormat.alphaPosition": (), + "QPixelFormat.alphaSize": (), + "QPixelFormat.alphaUsage": (), + "QPixelFormat.bitsPerPixel": (), + "QPixelFormat.blackSize": (), + "QPixelFormat.blueSize": (), + "QPixelFormat.brightnessSize": (), + "QPixelFormat.byteOrder": (), + "QPixelFormat.channelCount": (), + "QPixelFormat.colorModel": (), + "QPixelFormat.cyanSize": (), + "QPixelFormat.greenSize": (), + "QPixelFormat.hueSize": (), + "QPixelFormat.lightnessSize": (), + "QPixelFormat.magentaSize": (), + "QPixelFormat.premultiplied": (), + "QPixelFormat.redSize": (), + "QPixelFormat.saturationSize": (), + "QPixelFormat.subEnum": (), + "QPixelFormat.typeInterpretation": (), + "QPixelFormat.yellowSize": (), + "QPixelFormat.yuvLayout": (), + + # class PySide2.QtGui.QPixmap: + "QPixmap.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',), ('PySide2.support.signature.typing.List',), ('int', 'int'), ('str', 'str', 'ImageConversionFlags')], + "QPixmap.__copy__": (), + "QPixmap.cacheKey": (), + "QPixmap.convertFromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPixmap.createHeuristicMask": ('bool',), + "QPixmap.createMaskFromColor": ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.MaskMode'), + "QPixmap.defaultDepth": (), + "QPixmap.depth": (), + "QPixmap.devType": (), + "QPixmap.devicePixelRatio": (), + "QPixmap.fill": [('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QPaintDevice', 'int', 'int')], + "QPixmap.fromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.fromImageInPlace": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.fromImageReader": ('PySide2.QtGui.QImageReader', 'ImageConversionFlags'), + "QPixmap.grabWidget": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QObject', 'int', 'int', 'int', 'int')], + "QPixmap.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QPixmap.hasAlpha": (), + "QPixmap.hasAlphaChannel": (), + "QPixmap.height": (), + "QPixmap.isNull": (), + "QPixmap.isQBitmap": (), + "QPixmap.load": ('str', 'str', 'ImageConversionFlags'), + "QPixmap.loadFromData": [('PySide2.QtCore.QByteArray', 'str', 'ImageConversionFlags'), ('PySide2.support.signature.typing.Union[str, int]', 'int', 'str', 'ImageConversionFlags')], + "QPixmap.mask": (), + "QPixmap.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPixmap.paintEngine": (), + "QPixmap.rect": (), + "QPixmap.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QPixmap.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scroll": [('int', 'int', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion'), ('int', 'int', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion')], + "QPixmap.setDevicePixelRatio": ('float',), + "QPixmap.setMask": ('PySide2.QtGui.QBitmap',), + "QPixmap.size": (), + "QPixmap.swap": ('PySide2.QtGui.QPixmap',), + "QPixmap.toImage": (), + "QPixmap.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QPixmap.width": (), + + # class PySide2.QtGui.QPixmapCache: + "QPixmapCache.__init__": (), + "QPixmapCache.cacheLimit": (), + "QPixmapCache.clear": (), + "QPixmapCache.find": [('PySide2.QtGui.QPixmapCache.Key',), ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), ('str',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.insert": [('PySide2.QtGui.QPixmap',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.remove": [('PySide2.QtGui.QPixmapCache.Key',), ('str',)], + "QPixmapCache.replace": ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), + "QPixmapCache.setCacheLimit": ('int',), + + # class PySide2.QtGui.QPolygon: + "QPolygon.__init__": [(), ('PySide2.QtCore.QRect', 'bool'), ('PySide2.QtGui.QPolygon',), ('int',), ('list',)], + "QPolygon.__copy__": (), + "QPolygon.__reduce__": (), + "QPolygon.append": [('PySide2.QtCore.QPoint',), ('list',)], + "QPolygon.at": ('int',), + "QPolygon.boundingRect": (), + "QPolygon.capacity": (), + "QPolygon.clear": (), + "QPolygon.constData": (), + "QPolygon.constFirst": (), + "QPolygon.constLast": (), + "QPolygon.contains": ('PySide2.QtCore.QPoint',), + "QPolygon.containsPoint": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.Qt.FillRule'), + "QPolygon.count": [(), ('PySide2.QtCore.QPoint',)], + "QPolygon.data": [], + "QPolygon.empty": (), + "QPolygon.endsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.fill": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.first": [], + "QPolygon.fromList": ('list',), + "QPolygon.front": (), + "QPolygon.indexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.insert": [('int', 'PySide2.QtCore.QPoint'), ('int', 'int', 'PySide2.QtCore.QPoint')], + "QPolygon.intersected": ('PySide2.QtGui.QPolygon',), + "QPolygon.isEmpty": (), + "QPolygon.isSharedWith": ('list',), + "QPolygon.last": [], + "QPolygon.lastIndexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.length": (), + "QPolygon.mid": ('int', 'int'), + "QPolygon.move": ('int', 'int'), + "QPolygon.pop_back": (), + "QPolygon.pop_front": (), + "QPolygon.prepend": ('PySide2.QtCore.QPoint',), + "QPolygon.push_back": ('PySide2.QtCore.QPoint',), + "QPolygon.push_front": ('PySide2.QtCore.QPoint',), + "QPolygon.remove": [('int',), ('int', 'int')], + "QPolygon.removeAll": ('PySide2.QtCore.QPoint',), + "QPolygon.removeAt": ('int',), + "QPolygon.removeFirst": (), + "QPolygon.removeLast": (), + "QPolygon.removeOne": ('PySide2.QtCore.QPoint',), + "QPolygon.replace": ('int', 'PySide2.QtCore.QPoint'), + "QPolygon.reserve": ('int',), + "QPolygon.resize": ('int',), + "QPolygon.setSharable": ('bool',), + "QPolygon.size": (), + "QPolygon.squeeze": (), + "QPolygon.startsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.subtracted": ('PySide2.QtGui.QPolygon',), + "QPolygon.swap": ('PySide2.QtGui.QPolygon',), + "QPolygon.takeAt": ('int',), + "QPolygon.takeFirst": (), + "QPolygon.takeLast": (), + "QPolygon.toList": (), + "QPolygon.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.united": ('PySide2.QtGui.QPolygon',), + "QPolygon.value": [('int',), ('int', 'PySide2.QtCore.QPoint')], + + # class PySide2.QtGui.QPolygonF: + "QPolygonF.__init__": [(), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('int',), ('list',)], + "QPolygonF.__copy__": (), + "QPolygonF.append": [('PySide2.QtCore.QPointF',), ('list',)], + "QPolygonF.at": ('int',), + "QPolygonF.boundingRect": (), + "QPolygonF.capacity": (), + "QPolygonF.clear": (), + "QPolygonF.constData": (), + "QPolygonF.constFirst": (), + "QPolygonF.constLast": (), + "QPolygonF.contains": ('PySide2.QtCore.QPointF',), + "QPolygonF.containsPoint": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.FillRule'), + "QPolygonF.count": [(), ('PySide2.QtCore.QPointF',)], + "QPolygonF.data": [], + "QPolygonF.empty": (), + "QPolygonF.endsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.fill": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.first": [], + "QPolygonF.fromList": ('list',), + "QPolygonF.front": (), + "QPolygonF.indexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.insert": [('int', 'PySide2.QtCore.QPointF'), ('int', 'int', 'PySide2.QtCore.QPointF')], + "QPolygonF.intersected": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.isClosed": (), + "QPolygonF.isEmpty": (), + "QPolygonF.isSharedWith": ('list',), + "QPolygonF.last": [], + "QPolygonF.lastIndexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.length": (), + "QPolygonF.mid": ('int', 'int'), + "QPolygonF.move": ('int', 'int'), + "QPolygonF.pop_back": (), + "QPolygonF.pop_front": (), + "QPolygonF.prepend": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_back": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_front": ('PySide2.QtCore.QPointF',), + "QPolygonF.remove": [('int',), ('int', 'int')], + "QPolygonF.removeAll": ('PySide2.QtCore.QPointF',), + "QPolygonF.removeAt": ('int',), + "QPolygonF.removeFirst": (), + "QPolygonF.removeLast": (), + "QPolygonF.removeOne": ('PySide2.QtCore.QPointF',), + "QPolygonF.replace": ('int', 'PySide2.QtCore.QPointF'), + "QPolygonF.reserve": ('int',), + "QPolygonF.resize": ('int',), + "QPolygonF.setSharable": ('bool',), + "QPolygonF.size": (), + "QPolygonF.squeeze": (), + "QPolygonF.startsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.subtracted": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.swap": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.takeAt": ('int',), + "QPolygonF.takeFirst": (), + "QPolygonF.takeLast": (), + "QPolygonF.toList": (), + "QPolygonF.toPolygon": (), + "QPolygonF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.united": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.value": [('int',), ('int', 'PySide2.QtCore.QPointF')], + + # class PySide2.QtGui.QPyTextObject: + "QPyTextObject.__init__": ('PySide2.QtCore.QObject',), + "QPyTextObject.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QPyTextObject.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QQuaternion: + "QQuaternion.__init__": [(), ('PySide2.QtGui.QQuaternion',), ('PySide2.QtGui.QVector4D',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QQuaternion.__copy__": (), + "QQuaternion.__reduce__": (), + "QQuaternion.conjugate": (), + "QQuaternion.conjugated": (), + "QQuaternion.dotProduct": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion'), + "QQuaternion.fromAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromAxisAndAngle": [('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QQuaternion.fromDirection": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromEulerAngles": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.fromRotationMatrix": ('PySide2.QtGui.QMatrix3x3',), + "QQuaternion.getAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.inverted": (), + "QQuaternion.isIdentity": (), + "QQuaternion.isNull": (), + "QQuaternion.length": (), + "QQuaternion.lengthSquared": (), + "QQuaternion.nlerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.normalize": (), + "QQuaternion.normalized": (), + "QQuaternion.rotatedVector": ('PySide2.QtGui.QVector3D',), + "QQuaternion.rotationTo": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.scalar": (), + "QQuaternion.setScalar": ('float',), + "QQuaternion.setVector": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.setX": ('float',), + "QQuaternion.setY": ('float',), + "QQuaternion.setZ": ('float',), + "QQuaternion.slerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.toEulerAngles": (), + "QQuaternion.toRotationMatrix": (), + "QQuaternion.toVector4D": (), + "QQuaternion.vector": (), + "QQuaternion.x": (), + "QQuaternion.y": (), + "QQuaternion.z": (), + + # class PySide2.QtGui.QRadialGradient: + "QRadialGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QRadialGradient',), ('float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QRadialGradient.__copy__": (), + "QRadialGradient.center": (), + "QRadialGradient.centerRadius": (), + "QRadialGradient.focalPoint": (), + "QRadialGradient.focalRadius": (), + "QRadialGradient.radius": (), + "QRadialGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setCenterRadius": ('float',), + "QRadialGradient.setFocalPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setFocalRadius": ('float',), + "QRadialGradient.setRadius": ('float',), + + # class PySide2.QtGui.QRasterWindow: + "QRasterWindow.__init__": ('PySide2.QtGui.QWindow',), + "QRasterWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QRasterWindow.redirected": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtGui.QRawFont: + "QRawFont.__init__": [(), ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), ('PySide2.QtGui.QRawFont',), ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference')], + "QRawFont.__copy__": (), + "QRawFont.advancesForGlyphIndexes": [('list',), ('list', 'LayoutFlags')], + "QRawFont.alphaMapForGlyph": ('int', 'PySide2.QtGui.QRawFont.AntialiasingType', 'PySide2.QtGui.QTransform'), + "QRawFont.ascent": (), + "QRawFont.averageCharWidth": (), + "QRawFont.boundingRect": ('int',), + "QRawFont.descent": (), + "QRawFont.familyName": (), + "QRawFont.fontTable": ('str',), + "QRawFont.fromFont": ('PySide2.QtGui.QFont', 'PySide2.QtGui.QFontDatabase.WritingSystem'), + "QRawFont.glyphIndexesForString": ('str',), + "QRawFont.hintingPreference": (), + "QRawFont.isValid": (), + "QRawFont.leading": (), + "QRawFont.lineThickness": (), + "QRawFont.loadFromData": ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.loadFromFile": ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.maxCharWidth": (), + "QRawFont.pathForGlyph": ('int',), + "QRawFont.pixelSize": (), + "QRawFont.setPixelSize": ('float',), + "QRawFont.style": (), + "QRawFont.styleName": (), + "QRawFont.supportedWritingSystems": (), + "QRawFont.supportsCharacter": [('PySide2.support.signature.typing.Union[str, int]',), ('int',)], + "QRawFont.swap": ('PySide2.QtGui.QRawFont',), + "QRawFont.underlinePosition": (), + "QRawFont.unitsPerEm": (), + "QRawFont.weight": (), + "QRawFont.xHeight": (), + + # class PySide2.QtGui.QRegExpValidator: + "QRegExpValidator.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRegExp', 'PySide2.QtCore.QObject')], + "QRegExpValidator.regExp": (), + "QRegExpValidator.setRegExp": ('PySide2.QtCore.QRegExp',), + "QRegExpValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QRegion: + "QRegion.__init__": [(), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion.RegionType'), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion.RegionType')], + "QRegion.__copy__": (), + "QRegion.boundingRect": (), + "QRegion.contains": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',)], + "QRegion.intersected": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.intersects": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.isEmpty": (), + "QRegion.isNull": (), + "QRegion.rectCount": (), + "QRegion.rects": (), + "QRegion.setRects": ('PySide2.QtCore.QRect', 'int'), + "QRegion.subtracted": ('PySide2.QtGui.QRegion',), + "QRegion.swap": ('PySide2.QtGui.QRegion',), + "QRegion.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.united": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.xored": ('PySide2.QtGui.QRegion',), + + # class PySide2.QtGui.QResizeEvent: + "QResizeEvent.__init__": ('PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QResizeEvent.oldSize": (), + "QResizeEvent.size": (), + + # class PySide2.QtGui.QScreen: + "QScreen.physicalDotsPerInchX": (), + "QScreen.angleBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation'), + "QScreen.availableGeometry": (), + "QScreen.availableSize": (), + "QScreen.availableVirtualGeometry": (), + "QScreen.availableVirtualSize": (), + "QScreen.depth": (), + "QScreen.devicePixelRatio": (), + "QScreen.geometry": (), + "QScreen.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QScreen.isLandscape": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.isPortrait": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.logicalDotsPerInch": (), + "QScreen.logicalDotsPerInchX": (), + "QScreen.logicalDotsPerInchY": (), + "QScreen.mapBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.name": (), + "QScreen.nativeOrientation": (), + "QScreen.orientation": (), + "QScreen.orientationUpdateMask": (), + "QScreen.physicalDotsPerInch": (), + "QScreen.physicalDotsPerInchY": (), + "QScreen.physicalSize": (), + "QScreen.primaryOrientation": (), + "QScreen.refreshRate": (), + "QScreen.setOrientationUpdateMask": ('ScreenOrientations',), + "QScreen.size": (), + "QScreen.transformBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.virtualGeometry": (), + "QScreen.virtualSiblings": (), + "QScreen.virtualSize": (), + + # class PySide2.QtGui.QSessionManager: + "QSessionManager.cancel": (), + "QSessionManager.allowsErrorInteraction": (), + "QSessionManager.allowsInteraction": (), + "QSessionManager.discardCommand": (), + "QSessionManager.isPhase2": (), + "QSessionManager.release": (), + "QSessionManager.requestPhase2": (), + "QSessionManager.restartCommand": (), + "QSessionManager.restartHint": (), + "QSessionManager.sessionId": (), + "QSessionManager.sessionKey": (), + "QSessionManager.setDiscardCommand": ('PySide2.support.signature.typing.List',), + "QSessionManager.setManagerProperty": [('str', 'PySide2.support.signature.typing.List'), ('str', 'str')], + "QSessionManager.setRestartCommand": ('PySide2.support.signature.typing.List',), + "QSessionManager.setRestartHint": ('PySide2.QtGui.QSessionManager.RestartHint',), + + # class PySide2.QtGui.QShortcutEvent: + "QShortcutEvent.__init__": ('PySide2.QtGui.QKeySequence', 'int', 'bool'), + + # class PySide2.QtGui.QShowEvent: + "QShowEvent.__init__": (), + + # class PySide2.QtGui.QStandardItem: + "QStandardItem.__init__": [(), ('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QStandardItem',), ('int', 'int'), ('str',)], + "QStandardItem.accessibleDescription": (), + "QStandardItem.accessibleText": (), + "QStandardItem.appendColumn": ('list',), + "QStandardItem.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItem.appendRows": ('list',), + "QStandardItem.background": (), + "QStandardItem.checkState": (), + "QStandardItem.child": ('int', 'int'), + "QStandardItem.clone": (), + "QStandardItem.column": (), + "QStandardItem.columnCount": (), + "QStandardItem.data": ('int',), + "QStandardItem.emitDataChanged": (), + "QStandardItem.flags": (), + "QStandardItem.font": (), + "QStandardItem.foreground": (), + "QStandardItem.hasChildren": (), + "QStandardItem.icon": (), + "QStandardItem.index": (), + "QStandardItem.insertColumn": ('int', 'list'), + "QStandardItem.insertColumns": ('int', 'int'), + "QStandardItem.insertRow": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItem.insertRows": [('int', 'int'), ('int', 'list')], + "QStandardItem.isAutoTristate": (), + "QStandardItem.isCheckable": (), + "QStandardItem.isDragEnabled": (), + "QStandardItem.isDropEnabled": (), + "QStandardItem.isEditable": (), + "QStandardItem.isEnabled": (), + "QStandardItem.isSelectable": (), + "QStandardItem.isTristate": (), + "QStandardItem.isUserTristate": (), + "QStandardItem.model": (), + "QStandardItem.parent": (), + "QStandardItem.read": ('PySide2.QtCore.QDataStream',), + "QStandardItem.removeColumn": ('int',), + "QStandardItem.removeColumns": ('int', 'int'), + "QStandardItem.removeRow": ('int',), + "QStandardItem.removeRows": ('int', 'int'), + "QStandardItem.row": (), + "QStandardItem.rowCount": (), + "QStandardItem.setAccessibleDescription": ('str',), + "QStandardItem.setAccessibleText": ('str',), + "QStandardItem.setAutoTristate": ('bool',), + "QStandardItem.setBackground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QStandardItem.setCheckable": ('bool',), + "QStandardItem.setChild": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItem.setColumnCount": ('int',), + "QStandardItem.setData": ('PySide2.support.signature.typing.Any', 'int'), + "QStandardItem.setDragEnabled": ('bool',), + "QStandardItem.setDropEnabled": ('bool',), + "QStandardItem.setEditable": ('bool',), + "QStandardItem.setEnabled": ('bool',), + "QStandardItem.setFlags": ('ItemFlags',), + "QStandardItem.setFont": ('PySide2.QtGui.QFont',), + "QStandardItem.setForeground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setIcon": ('PySide2.QtGui.QIcon',), + "QStandardItem.setRowCount": ('int',), + "QStandardItem.setSelectable": ('bool',), + "QStandardItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QStandardItem.setStatusTip": ('str',), + "QStandardItem.setText": ('str',), + "QStandardItem.setTextAlignment": ('Alignment',), + "QStandardItem.setToolTip": ('str',), + "QStandardItem.setTristate": ('bool',), + "QStandardItem.setUserTristate": ('bool',), + "QStandardItem.setWhatsThis": ('str',), + "QStandardItem.sizeHint": (), + "QStandardItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItem.statusTip": (), + "QStandardItem.takeChild": ('int', 'int'), + "QStandardItem.takeColumn": ('int',), + "QStandardItem.takeRow": ('int',), + "QStandardItem.text": (), + "QStandardItem.textAlignment": (), + "QStandardItem.toolTip": (), + "QStandardItem.type": (), + "QStandardItem.whatsThis": (), + "QStandardItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QStandardItemModel: + "QStandardItemModel.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QStandardItemModel.appendColumn": ('list',), + "QStandardItemModel.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItemModel.clear": (), + "QStandardItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStandardItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.findItems": ('str', 'MatchFlags', 'int'), + "QStandardItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QStandardItemModel.horizontalHeaderItem": ('int',), + "QStandardItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.indexFromItem": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.insertColumn": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'list')], + "QStandardItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.insertRow": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.invisibleRootItem": (), + "QStandardItemModel.item": ('int', 'int'), + "QStandardItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemPrototype": (), + "QStandardItemModel.mimeData": ('PySide2.support.signature.typing.List',), + "QStandardItemModel.mimeTypes": (), + "QStandardItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QStandardItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.setColumnCount": ('int',), + "QStandardItemModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QStandardItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QStandardItemModel.setHorizontalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setHorizontalHeaderLabels": ('PySide2.support.signature.typing.List',), + "QStandardItemModel.setItem": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QStandardItemModel.setItemPrototype": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.setItemRoleNames": ('dict',), + "QStandardItemModel.setRowCount": ('int',), + "QStandardItemModel.setSortRole": ('int',), + "QStandardItemModel.setVerticalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setVerticalHeaderLabels": ('PySide2.support.signature.typing.List',), + "QStandardItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItemModel.sortRole": (), + "QStandardItemModel.supportedDropActions": (), + "QStandardItemModel.takeColumn": ('int',), + "QStandardItemModel.takeHorizontalHeaderItem": ('int',), + "QStandardItemModel.takeItem": ('int', 'int'), + "QStandardItemModel.takeRow": ('int',), + "QStandardItemModel.takeVerticalHeaderItem": ('int',), + "QStandardItemModel.verticalHeaderItem": ('int',), + + # class PySide2.QtGui.QStaticText: + "QStaticText.__init__": [(), ('PySide2.QtGui.QStaticText',), ('str',)], + "QStaticText.__copy__": (), + "QStaticText.performanceHint": (), + "QStaticText.prepare": ('PySide2.QtGui.QTransform', 'PySide2.QtGui.QFont'), + "QStaticText.setPerformanceHint": ('PySide2.QtGui.QStaticText.PerformanceHint',), + "QStaticText.setText": ('str',), + "QStaticText.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QStaticText.setTextOption": ('PySide2.QtGui.QTextOption',), + "QStaticText.setTextWidth": ('float',), + "QStaticText.size": (), + "QStaticText.swap": ('PySide2.QtGui.QStaticText',), + "QStaticText.text": (), + "QStaticText.textFormat": (), + "QStaticText.textOption": (), + "QStaticText.textWidth": (), + + # class PySide2.QtGui.QStatusTipEvent: + "QStatusTipEvent.__init__": ('str',), + "QStatusTipEvent.tip": (), + + # class PySide2.QtGui.QStringListModel: + "QStringListModel.__init__": [('PySide2.QtCore.QObject',), ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QObject')], + "QStringListModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStringListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QStringListModel.setStringList": ('PySide2.support.signature.typing.List',), + "QStringListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStringListModel.stringList": (), + "QStringListModel.supportedDropActions": (), + + # class PySide2.QtGui.QStyleHints: + "QStyleHints.setFocusOnTouchRelease": (), + "QStyleHints.cursorFlashTime": (), + "QStyleHints.fontSmoothingGamma": (), + "QStyleHints.keyboardAutoRepeatRate": (), + "QStyleHints.keyboardInputInterval": (), + "QStyleHints.mouseDoubleClickInterval": (), + "QStyleHints.mousePressAndHoldInterval": (), + "QStyleHints.passwordMaskCharacter": (), + "QStyleHints.passwordMaskDelay": (), + "QStyleHints.setCursorFlashTime": ('int',), + "QStyleHints.setKeyboardInputInterval": ('int',), + "QStyleHints.setMouseDoubleClickInterval": ('int',), + "QStyleHints.setStartDragDistance": ('int',), + "QStyleHints.setStartDragTime": ('int',), + "QStyleHints.showIsFullScreen": (), + "QStyleHints.showIsMaximized": (), + "QStyleHints.singleClickActivation": (), + "QStyleHints.startDragDistance": (), + "QStyleHints.startDragTime": (), + "QStyleHints.startDragVelocity": (), + "QStyleHints.tabFocusBehavior": (), + "QStyleHints.useRtlExtensions": (), + + # class PySide2.QtGui.QSurface: + "QSurface.__init__": ('PySide2.QtGui.QSurface.SurfaceClass',), + "QSurface.format": (), + "QSurface.size": (), + "QSurface.supportsOpenGL": (), + "QSurface.surfaceClass": (), + "QSurface.surfaceHandle": (), + "QSurface.surfaceType": (), + + # class PySide2.QtGui.QSurfaceFormat: + "QSurfaceFormat.__init__": [(), ('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat',)], + "QSurfaceFormat.__copy__": (), + "QSurfaceFormat.alphaBufferSize": (), + "QSurfaceFormat.blueBufferSize": (), + "QSurfaceFormat.defaultFormat": (), + "QSurfaceFormat.depthBufferSize": (), + "QSurfaceFormat.greenBufferSize": (), + "QSurfaceFormat.hasAlpha": (), + "QSurfaceFormat.majorVersion": (), + "QSurfaceFormat.minorVersion": (), + "QSurfaceFormat.options": (), + "QSurfaceFormat.profile": (), + "QSurfaceFormat.redBufferSize": (), + "QSurfaceFormat.renderableType": (), + "QSurfaceFormat.samples": (), + "QSurfaceFormat.setAlphaBufferSize": ('int',), + "QSurfaceFormat.setBlueBufferSize": ('int',), + "QSurfaceFormat.setDefaultFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QSurfaceFormat.setDepthBufferSize": ('int',), + "QSurfaceFormat.setGreenBufferSize": ('int',), + "QSurfaceFormat.setMajorVersion": ('int',), + "QSurfaceFormat.setMinorVersion": ('int',), + "QSurfaceFormat.setOption": [('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat.FormatOption', 'bool')], + "QSurfaceFormat.setOptions": ('FormatOptions',), + "QSurfaceFormat.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QSurfaceFormat.setRedBufferSize": ('int',), + "QSurfaceFormat.setRenderableType": ('PySide2.QtGui.QSurfaceFormat.RenderableType',), + "QSurfaceFormat.setSamples": ('int',), + "QSurfaceFormat.setStencilBufferSize": ('int',), + "QSurfaceFormat.setStereo": ('bool',), + "QSurfaceFormat.setSwapBehavior": ('PySide2.QtGui.QSurfaceFormat.SwapBehavior',), + "QSurfaceFormat.setSwapInterval": ('int',), + "QSurfaceFormat.setVersion": ('int', 'int'), + "QSurfaceFormat.stencilBufferSize": (), + "QSurfaceFormat.stereo": (), + "QSurfaceFormat.swapBehavior": (), + "QSurfaceFormat.swapInterval": (), + "QSurfaceFormat.testOption": [('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat.FormatOption',)], + "QSurfaceFormat.version": (), + + # class PySide2.QtGui.QSyntaxHighlighter: + "QSyntaxHighlighter.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QTextDocument',)], + "QSyntaxHighlighter.currentBlock": (), + "QSyntaxHighlighter.currentBlockState": (), + "QSyntaxHighlighter.currentBlockUserData": (), + "QSyntaxHighlighter.document": (), + "QSyntaxHighlighter.format": ('int',), + "QSyntaxHighlighter.highlightBlock": ('str',), + "QSyntaxHighlighter.previousBlockState": (), + "QSyntaxHighlighter.rehighlight": (), + "QSyntaxHighlighter.rehighlightBlock": ('PySide2.QtGui.QTextBlock',), + "QSyntaxHighlighter.setCurrentBlockState": ('int',), + "QSyntaxHighlighter.setCurrentBlockUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QSyntaxHighlighter.setDocument": ('PySide2.QtGui.QTextDocument',), + "QSyntaxHighlighter.setFormat": [('int', 'int', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QFont'), ('int', 'int', 'PySide2.QtGui.QTextCharFormat')], + + # class PySide2.QtGui.QTabletEvent: + "QTabletEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'KeyboardModifiers', 'int'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'KeyboardModifiers', 'int', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons')], + "QTabletEvent.button": (), + "QTabletEvent.buttons": (), + "QTabletEvent.device": (), + "QTabletEvent.global"+"Y": (), + "QTabletEvent.globalPos": (), + "QTabletEvent.globalPosF": (), + "QTabletEvent.globalX": (), + "QTabletEvent.hiResGlobal"+"Y": (), + "QTabletEvent.hiResGlobalX": (), + "QTabletEvent.pointerType": (), + "QTabletEvent.pos": (), + "QTabletEvent.posF": (), + "QTabletEvent.pressure": (), + "QTabletEvent.rotation": (), + "QTabletEvent.tangentialPressure": (), + "QTabletEvent.uniqueId": (), + "QTabletEvent.x": (), + "QTabletEvent.xTilt": (), + "QTabletEvent.y": (), + "QTabletEvent.yTilt": (), + "QTabletEvent.z": (), + + # class PySide2.QtGui.QTextBlock: + "QTextBlock.__init__": [(), ('PySide2.QtGui.QTextBlock',)], + "QTextBlock.__copy__": (), + "QTextBlock.begin": (), + "QTextBlock.blockFormat": (), + "QTextBlock.blockFormatIndex": (), + "QTextBlock.blockNumber": (), + "QTextBlock.charFormat": (), + "QTextBlock.charFormatIndex": (), + "QTextBlock.clearLayout": (), + "QTextBlock.contains": ('int',), + "QTextBlock.document": (), + "QTextBlock.end": (), + "QTextBlock.firstLineNumber": (), + "QTextBlock.fragmentIndex": (), + "QTextBlock.isValid": (), + "QTextBlock.isVisible": (), + "QTextBlock.layout": (), + "QTextBlock.length": (), + "QTextBlock.lineCount": (), + "QTextBlock.next": (), + "QTextBlock.position": (), + "QTextBlock.previous": (), + "QTextBlock.revision": (), + "QTextBlock.setLineCount": ('int',), + "QTextBlock.setRevision": ('int',), + "QTextBlock.setUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QTextBlock.setUserState": ('int',), + "QTextBlock.setVisible": ('bool',), + "QTextBlock.text": (), + "QTextBlock.textDirection": (), + "QTextBlock.textFormats": (), + "QTextBlock.textList": (), + "QTextBlock.userData": (), + "QTextBlock.userState": (), + + # class PySide2.QtGui.QTextBlockFormat: + "QTextBlockFormat.__init__": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextBlockFormat.__copy__": (), + "QTextBlockFormat.alignment": (), + "QTextBlockFormat.bottomMargin": (), + "QTextBlockFormat.indent": (), + "QTextBlockFormat.isValid": (), + "QTextBlockFormat.leftMargin": (), + "QTextBlockFormat.lineHeight": [(), ('float', 'float')], + "QTextBlockFormat.lineHeightType": (), + "QTextBlockFormat.nonBreakableLines": (), + "QTextBlockFormat.pageBreakPolicy": (), + "QTextBlockFormat.rightMargin": (), + "QTextBlockFormat.setAlignment": ('Alignment',), + "QTextBlockFormat.setBottomMargin": ('float',), + "QTextBlockFormat.setIndent": ('int',), + "QTextBlockFormat.setLeftMargin": ('float',), + "QTextBlockFormat.setLineHeight": ('float', 'int'), + "QTextBlockFormat.setNonBreakableLines": ('bool',), + "QTextBlockFormat.setPageBreakPolicy": ('PageBreakFlags',), + "QTextBlockFormat.setRightMargin": ('float',), + "QTextBlockFormat.setTabPositions": ('list',), + "QTextBlockFormat.setTextIndent": ('float',), + "QTextBlockFormat.setTopMargin": ('float',), + "QTextBlockFormat.tabPositions": (), + "QTextBlockFormat.textIndent": (), + "QTextBlockFormat.topMargin": (), + + # class PySide2.QtGui.QTextBlockGroup: + "QTextBlockGroup.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextBlockGroup.blockFormatChanged": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockInserted": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockList": (), + "QTextBlockGroup.blockRemoved": ('PySide2.QtGui.QTextBlock',), + + # class PySide2.QtGui.QTextBlockUserData: + "QTextBlockUserData.__init__": (), + + # class PySide2.QtGui.QTextCharFormat: + "QTextCharFormat.__init__": [(), ('PySide2.QtGui.QTextCharFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextCharFormat.__copy__": (), + "QTextCharFormat.anchorHref": (), + "QTextCharFormat.anchorName": (), + "QTextCharFormat.anchorNames": (), + "QTextCharFormat.font": (), + "QTextCharFormat.fontCapitalization": (), + "QTextCharFormat.fontFamily": (), + "QTextCharFormat.fontFixedPitch": (), + "QTextCharFormat.fontHintingPreference": (), + "QTextCharFormat.fontItalic": (), + "QTextCharFormat.fontKerning": (), + "QTextCharFormat.fontLetterSpacing": (), + "QTextCharFormat.fontLetterSpacingType": (), + "QTextCharFormat.fontOverline": (), + "QTextCharFormat.fontPointSize": (), + "QTextCharFormat.fontStretch": (), + "QTextCharFormat.fontStrikeOut": (), + "QTextCharFormat.fontStyleHint": (), + "QTextCharFormat.fontStyleStrategy": (), + "QTextCharFormat.fontUnderline": (), + "QTextCharFormat.fontWeight": (), + "QTextCharFormat.fontWordSpacing": (), + "QTextCharFormat.isAnchor": (), + "QTextCharFormat.isValid": (), + "QTextCharFormat.setAnchor": ('bool',), + "QTextCharFormat.setAnchorHref": ('str',), + "QTextCharFormat.setAnchorName": ('str',), + "QTextCharFormat.setAnchorNames": ('PySide2.support.signature.typing.List',), + "QTextCharFormat.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior')], + "QTextCharFormat.setFontCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QTextCharFormat.setFontFamily": ('str',), + "QTextCharFormat.setFontFixedPitch": ('bool',), + "QTextCharFormat.setFontHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QTextCharFormat.setFontItalic": ('bool',), + "QTextCharFormat.setFontKerning": ('bool',), + "QTextCharFormat.setFontLetterSpacing": ('float',), + "QTextCharFormat.setFontLetterSpacingType": ('PySide2.QtGui.QFont.SpacingType',), + "QTextCharFormat.setFontOverline": ('bool',), + "QTextCharFormat.setFontPointSize": ('float',), + "QTextCharFormat.setFontStretch": ('int',), + "QTextCharFormat.setFontStrikeOut": ('bool',), + "QTextCharFormat.setFontStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QTextCharFormat.setFontStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QTextCharFormat.setFontUnderline": ('bool',), + "QTextCharFormat.setFontWeight": ('int',), + "QTextCharFormat.setFontWordSpacing": ('float',), + "QTextCharFormat.setTableCellColumnSpan": ('int',), + "QTextCharFormat.setTableCellRowSpan": ('int',), + "QTextCharFormat.setTextOutline": ('PySide2.QtGui.QPen',), + "QTextCharFormat.setToolTip": ('str',), + "QTextCharFormat.setUnderlineColor": ('PySide2.QtGui.QColor',), + "QTextCharFormat.setUnderlineStyle": ('PySide2.QtGui.QTextCharFormat.UnderlineStyle',), + "QTextCharFormat.setVerticalAlignment": ('PySide2.QtGui.QTextCharFormat.VerticalAlignment',), + "QTextCharFormat.tableCellColumnSpan": (), + "QTextCharFormat.tableCellRowSpan": (), + "QTextCharFormat.textOutline": (), + "QTextCharFormat.toolTip": (), + "QTextCharFormat.underlineColor": (), + "QTextCharFormat.underlineStyle": (), + "QTextCharFormat.verticalAlignment": (), + + # class PySide2.QtGui.QTextCursor: + "QTextCursor.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextFrame',)], + "QTextCursor.__copy__": (), + "QTextCursor.anchor": (), + "QTextCursor.atBlockEnd": (), + "QTextCursor.atBlockStart": (), + "QTextCursor.atEnd": (), + "QTextCursor.atStart": (), + "QTextCursor.beginEditBlock": (), + "QTextCursor.block": (), + "QTextCursor.blockCharFormat": (), + "QTextCursor.blockFormat": (), + "QTextCursor.blockNumber": (), + "QTextCursor.charFormat": (), + "QTextCursor.clearSelection": (), + "QTextCursor.columnNumber": (), + "QTextCursor.createList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.currentFrame": (), + "QTextCursor.currentList": (), + "QTextCursor.currentTable": (), + "QTextCursor.deleteChar": (), + "QTextCursor.deletePreviousChar": (), + "QTextCursor.document": (), + "QTextCursor.endEditBlock": (), + "QTextCursor.hasComplexSelection": (), + "QTextCursor.hasSelection": (), + "QTextCursor.insertBlock": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextBlockFormat', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.insertFragment": ('PySide2.QtGui.QTextDocumentFragment',), + "QTextCursor.insertFrame": ('PySide2.QtGui.QTextFrameFormat',), + "QTextCursor.insertHtml": ('str',), + "QTextCursor.insertImage": [('PySide2.QtGui.QImage', 'str'), ('PySide2.QtGui.QTextImageFormat',), ('PySide2.QtGui.QTextImageFormat', 'PySide2.QtGui.QTextFrameFormat.Position'), ('str',)], + "QTextCursor.insertList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.insertTable": [('int', 'int'), ('int', 'int', 'PySide2.QtGui.QTextTableFormat')], + "QTextCursor.insertText": [('str',), ('str', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.isCopyOf": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.isNull": (), + "QTextCursor.joinPreviousEditBlock": (), + "QTextCursor.keepPositionOnInsert": (), + "QTextCursor.mergeBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.mergeBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.mergeCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.movePosition": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode', 'int'), + "QTextCursor.position": (), + "QTextCursor.positionInBlock": (), + "QTextCursor.removeSelectedText": (), + "QTextCursor.select": ('PySide2.QtGui.QTextCursor.SelectionType',), + "QTextCursor.selectedTableCells": ('int', 'int', 'int', 'int'), + "QTextCursor.selectedText": (), + "QTextCursor.selection": (), + "QTextCursor.selectionEnd": (), + "QTextCursor.selectionStart": (), + "QTextCursor.setBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.setCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setKeepPositionOnInsert": ('bool',), + "QTextCursor.setPosition": ('int', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextCursor.setVerticalMovementX": ('int',), + "QTextCursor.setVisualNavigation": ('bool',), + "QTextCursor.swap": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.verticalMovementX": (), + "QTextCursor.visualNavigation": (), + + # class PySide2.QtGui.QTextDocument: + "QTextDocument.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextDocument.addResource": ('int', 'PySide2.QtCore.QUrl', 'PySide2.support.signature.typing.Any'), + "QTextDocument.adjustSize": (), + "QTextDocument.allFormats": (), + "QTextDocument.availableRedoSteps": (), + "QTextDocument.availableUndoSteps": (), + "QTextDocument.baseUrl": (), + "QTextDocument.begin": (), + "QTextDocument.blockCount": (), + "QTextDocument.characterAt": ('int',), + "QTextDocument.characterCount": (), + "QTextDocument.clear": (), + "QTextDocument.clearUndoRedoStacks": ('PySide2.QtGui.QTextDocument.Stacks',), + "QTextDocument.clone": ('PySide2.QtCore.QObject',), + "QTextDocument.createObject": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.defaultCursorMoveStyle": (), + "QTextDocument.defaultFont": (), + "QTextDocument.defaultStyleSheet": (), + "QTextDocument.defaultTextOption": (), + "QTextDocument.documentLayout": (), + "QTextDocument.documentMargin": (), + "QTextDocument.drawContents": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QTextDocument.end": (), + "QTextDocument.find": [('PySide2.QtCore.QRegExp', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('PySide2.QtCore.QRegExp', 'int', 'FindFlags'), ('str', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('str', 'int', 'FindFlags')], + "QTextDocument.findBlock": ('int',), + "QTextDocument.findBlockByLineNumber": ('int',), + "QTextDocument.findBlockByNumber": ('int',), + "QTextDocument.firstBlock": (), + "QTextDocument.frameAt": ('int',), + "QTextDocument.idealWidth": (), + "QTextDocument.indentWidth": (), + "QTextDocument.isEmpty": (), + "QTextDocument.isModified": (), + "QTextDocument.isRedoAvailable": (), + "QTextDocument.isUndoAvailable": (), + "QTextDocument.isUndoRedoEnabled": (), + "QTextDocument.lastBlock": (), + "QTextDocument.lineCount": (), + "QTextDocument.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.markContentsDirty": ('int', 'int'), + "QTextDocument.maximumBlockCount": (), + "QTextDocument.metaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation',), + "QTextDocument.object": ('int',), + "QTextDocument.objectForFormat": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.pageCount": (), + "QTextDocument.pageSize": (), + "QTextDocument.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextDocument.redo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.resource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.revision": (), + "QTextDocument.rootFrame": (), + "QTextDocument.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QTextDocument.setDefaultCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextDocument.setDefaultFont": ('PySide2.QtGui.QFont',), + "QTextDocument.setDefaultStyleSheet": ('str',), + "QTextDocument.setDefaultTextOption": ('PySide2.QtGui.QTextOption',), + "QTextDocument.setDocumentLayout": ('PySide2.QtGui.QAbstractTextDocumentLayout',), + "QTextDocument.setDocumentMargin": ('float',), + "QTextDocument.setHtml": ('str',), + "QTextDocument.setIndentWidth": ('float',), + "QTextDocument.setMaximumBlockCount": ('int',), + "QTextDocument.setMetaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation', 'str'), + "QTextDocument.setModified": ('bool',), + "QTextDocument.setPageSize": ('PySide2.QtCore.QSizeF',), + "QTextDocument.setPlainText": ('str',), + "QTextDocument.setTextWidth": ('float',), + "QTextDocument.setUndoRedoEnabled": ('bool',), + "QTextDocument.setUseDesignMetrics": ('bool',), + "QTextDocument.size": (), + "QTextDocument.textWidth": (), + "QTextDocument.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocument.toPlainText": (), + "QTextDocument.undo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.useDesignMetrics": (), + + # class PySide2.QtGui.QTextDocumentFragment: + "QTextDocumentFragment.__init__": [(), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + "QTextDocumentFragment.__copy__": (), + "QTextDocumentFragment.fromHtml": [('str',), ('str', 'PySide2.QtGui.QTextDocument')], + "QTextDocumentFragment.fromPlainText": ('str',), + "QTextDocumentFragment.isEmpty": (), + "QTextDocumentFragment.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocumentFragment.toPlainText": (), + + # class PySide2.QtGui.QTextDocumentWriter: + "QTextDocumentWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QTextDocumentWriter.codec": (), + "QTextDocumentWriter.device": (), + "QTextDocumentWriter.fileName": (), + "QTextDocumentWriter.format": (), + "QTextDocumentWriter.setCodec": ('PySide2.QtCore.QTextCodec',), + "QTextDocumentWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextDocumentWriter.setFileName": ('str',), + "QTextDocumentWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QTextDocumentWriter.supportedDocumentFormats": (), + "QTextDocumentWriter.write": [('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + + # class PySide2.QtGui.QTextFormat: + "QTextFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('int',)], + "QTextFormat.__copy__": (), + "QTextFormat.background": (), + "QTextFormat.boolProperty": ('int',), + "QTextFormat.brushProperty": ('int',), + "QTextFormat.clearBackground": (), + "QTextFormat.clearForeground": (), + "QTextFormat.clearProperty": ('int',), + "QTextFormat.colorProperty": ('int',), + "QTextFormat.doubleProperty": ('int',), + "QTextFormat.foreground": (), + "QTextFormat.hasProperty": ('int',), + "QTextFormat.intProperty": ('int',), + "QTextFormat.isBlockFormat": (), + "QTextFormat.isCharFormat": (), + "QTextFormat.isEmpty": (), + "QTextFormat.isFrameFormat": (), + "QTextFormat.isImageFormat": (), + "QTextFormat.isListFormat": (), + "QTextFormat.isTableCellFormat": (), + "QTextFormat.isTableFormat": (), + "QTextFormat.isValid": (), + "QTextFormat.layoutDirection": (), + "QTextFormat.lengthProperty": ('int',), + "QTextFormat.lengthVectorProperty": ('int',), + "QTextFormat.merge": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.objectIndex": (), + "QTextFormat.objectType": (), + "QTextFormat.penProperty": ('int',), + "QTextFormat.properties": (), + "QTextFormat.property": ('int',), + "QTextFormat.propertyCount": (), + "QTextFormat.setBackground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setForeground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextFormat.setObjectIndex": ('int',), + "QTextFormat.setObjectType": ('int',), + "QTextFormat.setProperty": [('int', 'PySide2.support.signature.typing.Any'), ('int', 'list')], + "QTextFormat.stringProperty": ('int',), + "QTextFormat.swap": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.toBlockFormat": (), + "QTextFormat.toCharFormat": (), + "QTextFormat.toFrameFormat": (), + "QTextFormat.toImageFormat": (), + "QTextFormat.toListFormat": (), + "QTextFormat.toTableCellFormat": (), + "QTextFormat.toTableFormat": (), + "QTextFormat.type": (), + + # class PySide2.QtGui.QTextFragment: + "QTextFragment.__init__": [(), ('PySide2.QtGui.QTextFragment',)], + "QTextFragment.__copy__": (), + "QTextFragment.charFormat": (), + "QTextFragment.charFormatIndex": (), + "QTextFragment.contains": ('int',), + "QTextFragment.isValid": (), + "QTextFragment.length": (), + "QTextFragment.position": (), + "QTextFragment.text": (), + + # class PySide2.QtGui.QTextFrame: + "QTextFrame.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextFrame.begin": (), + "QTextFrame.childFrames": (), + "QTextFrame.end": (), + "QTextFrame.firstCursorPosition": (), + "QTextFrame.firstPosition": (), + "QTextFrame.frameFormat": (), + "QTextFrame.lastCursorPosition": (), + "QTextFrame.lastPosition": (), + "QTextFrame.parentFrame": (), + "QTextFrame.setFrameFormat": ('PySide2.QtGui.QTextFrameFormat',), + + # class PySide2.QtGui.QTextFrameFormat: + "QTextFrameFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextFrameFormat',)], + "QTextFrameFormat.__copy__": (), + "QTextFrameFormat.border": (), + "QTextFrameFormat.borderBrush": (), + "QTextFrameFormat.borderStyle": (), + "QTextFrameFormat.bottomMargin": (), + "QTextFrameFormat.height": (), + "QTextFrameFormat.isValid": (), + "QTextFrameFormat.leftMargin": (), + "QTextFrameFormat.margin": (), + "QTextFrameFormat.padding": (), + "QTextFrameFormat.pageBreakPolicy": (), + "QTextFrameFormat.position": (), + "QTextFrameFormat.rightMargin": (), + "QTextFrameFormat.setBorder": ('float',), + "QTextFrameFormat.setBorderBrush": ('PySide2.QtGui.QBrush',), + "QTextFrameFormat.setBorderStyle": ('PySide2.QtGui.QTextFrameFormat.BorderStyle',), + "QTextFrameFormat.setBottomMargin": ('float',), + "QTextFrameFormat.setHeight": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.setLeftMargin": ('float',), + "QTextFrameFormat.setMargin": ('float',), + "QTextFrameFormat.setPadding": ('float',), + "QTextFrameFormat.setPageBreakPolicy": ('PageBreakFlags',), + "QTextFrameFormat.setPosition": ('PySide2.QtGui.QTextFrameFormat.Position',), + "QTextFrameFormat.setRightMargin": ('float',), + "QTextFrameFormat.setTopMargin": ('float',), + "QTextFrameFormat.setWidth": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.topMargin": (), + "QTextFrameFormat.width": (), + + # class PySide2.QtGui.QTextImageFormat: + "QTextImageFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextImageFormat',)], + "QTextImageFormat.__copy__": (), + "QTextImageFormat.height": (), + "QTextImageFormat.isValid": (), + "QTextImageFormat.name": (), + "QTextImageFormat.setHeight": ('float',), + "QTextImageFormat.setName": ('str',), + "QTextImageFormat.setWidth": ('float',), + "QTextImageFormat.width": (), + + # class PySide2.QtGui.QTextInlineObject: + "QTextInlineObject.__init__": [(), ('PySide2.QtGui.QTextInlineObject',)], + "QTextInlineObject.__copy__": (), + "QTextInlineObject.ascent": (), + "QTextInlineObject.descent": (), + "QTextInlineObject.format": (), + "QTextInlineObject.formatIndex": (), + "QTextInlineObject.height": (), + "QTextInlineObject.isValid": (), + "QTextInlineObject.rect": (), + "QTextInlineObject.setAscent": ('float',), + "QTextInlineObject.setDescent": ('float',), + "QTextInlineObject.setWidth": ('float',), + "QTextInlineObject.textDirection": (), + "QTextInlineObject.textPosition": (), + "QTextInlineObject.width": (), + + # class PySide2.QtGui.QTextItem: + "QTextItem.__init__": (), + "QTextItem.ascent": (), + "QTextItem.descent": (), + "QTextItem.font": (), + "QTextItem.renderFlags": (), + "QTextItem.text": (), + "QTextItem.width": (), + + # class PySide2.QtGui.QTextLayout: + "QTextLayout.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('str',), ('str', 'PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice')], + "QTextLayout.additionalFormats": (), + "QTextLayout.beginLayout": (), + "QTextLayout.boundingRect": (), + "QTextLayout.cacheEnabled": (), + "QTextLayout.clearAdditionalFormats": (), + "QTextLayout.clearFormats": (), + "QTextLayout.clearLayout": (), + "QTextLayout.createLine": (), + "QTextLayout.cursorMoveStyle": (), + "QTextLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'list', 'PySide2.QtCore.QRectF'), + "QTextLayout.drawCursor": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int', 'int')], + "QTextLayout.endLayout": (), + "QTextLayout.font": (), + "QTextLayout.formats": (), + "QTextLayout.isValidCursorPosition": ('int',), + "QTextLayout.leftCursorPosition": ('int',), + "QTextLayout.lineAt": ('int',), + "QTextLayout.lineCount": (), + "QTextLayout.lineForTextPosition": ('int',), + "QTextLayout.maximumWidth": (), + "QTextLayout.minimumWidth": (), + "QTextLayout.nextCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.position": (), + "QTextLayout.preeditAreaPosition": (), + "QTextLayout.preeditAreaText": (), + "QTextLayout.previousCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.rightCursorPosition": ('int',), + "QTextLayout.setAdditionalFormats": ('list',), + "QTextLayout.setCacheEnabled": ('bool',), + "QTextLayout.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextLayout.setFlags": ('int',), + "QTextLayout.setFont": ('PySide2.QtGui.QFont',), + "QTextLayout.setFormats": ('list',), + "QTextLayout.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLayout.setPreeditArea": ('int', 'str'), + "QTextLayout.setRawFont": ('PySide2.QtGui.QRawFont',), + "QTextLayout.setText": ('str',), + "QTextLayout.setTextOption": ('PySide2.QtGui.QTextOption',), + "QTextLayout.text": (), + "QTextLayout.textOption": (), + + # class PySide2.QtGui.QTextLength: + "QTextLength.__init__": [(), ('PySide2.QtGui.QTextLength',), ('PySide2.QtGui.QTextLength.Type', 'float')], + "QTextLength.__copy__": (), + "QTextLength.rawValue": (), + "QTextLength.type": (), + "QTextLength.value": ('float',), + + # class PySide2.QtGui.QTextLine: + "QTextLine.__init__": [(), ('PySide2.QtGui.QTextLine',)], + "QTextLine.__copy__": (), + "QTextLine.ascent": (), + "QTextLine.cursorToX": ('int', 'PySide2.QtGui.QTextLine.Edge'), + "QTextLine.descent": (), + "QTextLine.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextLayout.FormatRange'), + "QTextLine.height": (), + "QTextLine.horizontalAdvance": (), + "QTextLine.isValid": (), + "QTextLine.leading": (), + "QTextLine.leadingIncluded": (), + "QTextLine.lineNumber": (), + "QTextLine.naturalTextRect": (), + "QTextLine.naturalTextWidth": (), + "QTextLine.position": (), + "QTextLine.rect": (), + "QTextLine.setLeadingIncluded": ('bool',), + "QTextLine.setLineWidth": ('float',), + "QTextLine.setNumColumns": [('int',), ('int', 'float')], + "QTextLine.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLine.textLength": (), + "QTextLine.textStart": (), + "QTextLine.width": (), + "QTextLine.x": (), + "QTextLine.xToCursor": ('float', 'PySide2.QtGui.QTextLine.CursorPosition'), + "QTextLine.y": (), + + # class PySide2.QtGui.QTextList: + "QTextList.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextList.add": ('PySide2.QtGui.QTextBlock',), + "QTextList.count": (), + "QTextList.format": (), + "QTextList.item": ('int',), + "QTextList.itemNumber": ('PySide2.QtGui.QTextBlock',), + "QTextList.itemText": ('PySide2.QtGui.QTextBlock',), + "QTextList.remove": ('PySide2.QtGui.QTextBlock',), + "QTextList.removeItem": ('int',), + "QTextList.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + + # class PySide2.QtGui.QTextListFormat: + "QTextListFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + "QTextListFormat.__copy__": (), + "QTextListFormat.indent": (), + "QTextListFormat.isValid": (), + "QTextListFormat.numberPrefix": (), + "QTextListFormat.numberSuffix": (), + "QTextListFormat.setIndent": ('int',), + "QTextListFormat.setNumberPrefix": ('str',), + "QTextListFormat.setNumberSuffix": ('str',), + "QTextListFormat.setStyle": ('PySide2.QtGui.QTextListFormat.Style',), + "QTextListFormat.style": (), + + # class PySide2.QtGui.QTextObject: + "QTextObject.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextObject.document": (), + "QTextObject.format": (), + "QTextObject.formatIndex": (), + "QTextObject.objectIndex": (), + "QTextObject.setFormat": ('PySide2.QtGui.QTextFormat',), + + # class PySide2.QtGui.QTextObjectInterface: + "QTextObjectInterface.__init__": (), + "QTextObjectInterface.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QTextObjectInterface.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QTextOption: + "QTextOption.__init__": [(), ('Alignment',), ('PySide2.QtGui.QTextOption',)], + "QTextOption.__copy__": (), + "QTextOption.alignment": (), + "QTextOption.flags": (), + "QTextOption.setAlignment": ('Alignment',), + "QTextOption.setFlags": ('Flags',), + "QTextOption.setTabArray": ('list',), + "QTextOption.setTabStop": ('float',), + "QTextOption.setTabs": ('list',), + "QTextOption.setTextDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextOption.setUseDesignMetrics": ('bool',), + "QTextOption.setWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextOption.tabArray": (), + "QTextOption.tabStop": (), + "QTextOption.tabs": (), + "QTextOption.textDirection": (), + "QTextOption.useDesignMetrics": (), + "QTextOption.wrapMode": (), + + # class PySide2.QtGui.QTextTable: + "QTextTable.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextTable.appendColumns": ('int',), + "QTextTable.appendRows": ('int',), + "QTextTable.cellAt": [('PySide2.QtGui.QTextCursor',), ('int',), ('int', 'int')], + "QTextTable.columns": (), + "QTextTable.format": (), + "QTextTable.insertColumns": ('int', 'int'), + "QTextTable.insertRows": ('int', 'int'), + "QTextTable.mergeCells": [('PySide2.QtGui.QTextCursor',), ('int', 'int', 'int', 'int')], + "QTextTable.removeColumns": ('int', 'int'), + "QTextTable.removeRows": ('int', 'int'), + "QTextTable.resize": ('int', 'int'), + "QTextTable.rowEnd": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rowStart": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rows": (), + "QTextTable.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTable.splitCell": ('int', 'int', 'int', 'int'), + + # class PySide2.QtGui.QTextTableCell: + "QTextTableCell.__init__": [(), ('PySide2.QtGui.QTextTableCell',)], + "QTextTableCell.__copy__": (), + "QTextTableCell.begin": (), + "QTextTableCell.column": (), + "QTextTableCell.columnSpan": (), + "QTextTableCell.end": (), + "QTextTableCell.firstCursorPosition": (), + "QTextTableCell.firstPosition": (), + "QTextTableCell.format": (), + "QTextTableCell.isValid": (), + "QTextTableCell.lastCursorPosition": (), + "QTextTableCell.lastPosition": (), + "QTextTableCell.row": (), + "QTextTableCell.rowSpan": (), + "QTextTableCell.setFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextTableCell.tableCellFormatIndex": (), + + # class PySide2.QtGui.QTextTableCellFormat: + "QTextTableCellFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableCellFormat',)], + "QTextTableCellFormat.__copy__": (), + "QTextTableCellFormat.bottomPadding": (), + "QTextTableCellFormat.isValid": (), + "QTextTableCellFormat.leftPadding": (), + "QTextTableCellFormat.rightPadding": (), + "QTextTableCellFormat.setBottomPadding": ('float',), + "QTextTableCellFormat.setLeftPadding": ('float',), + "QTextTableCellFormat.setPadding": ('float',), + "QTextTableCellFormat.setRightPadding": ('float',), + "QTextTableCellFormat.setTopPadding": ('float',), + "QTextTableCellFormat.topPadding": (), + + # class PySide2.QtGui.QTextTableFormat: + "QTextTableFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTableFormat.__copy__": (), + "QTextTableFormat.alignment": (), + "QTextTableFormat.cellPadding": (), + "QTextTableFormat.cellSpacing": (), + "QTextTableFormat.clearColumnWidthConstraints": (), + "QTextTableFormat.columnWidthConstraints": (), + "QTextTableFormat.columns": (), + "QTextTableFormat.headerRowCount": (), + "QTextTableFormat.isValid": (), + "QTextTableFormat.setAlignment": ('Alignment',), + "QTextTableFormat.setCellPadding": ('float',), + "QTextTableFormat.setCellSpacing": ('float',), + "QTextTableFormat.setColumnWidthConstraints": ('list',), + "QTextTableFormat.setColumns": ('int',), + "QTextTableFormat.setHeaderRowCount": ('int',), + + # class PySide2.QtGui.QToolBarChangeEvent: + "QToolBarChangeEvent.__init__": ('bool',), + "QToolBarChangeEvent.toggle": (), + + # class PySide2.QtGui.QTouchDevice: + "QTouchDevice.__init__": (), + "QTouchDevice.capabilities": (), + "QTouchDevice.devices": (), + "QTouchDevice.maximumTouchPoints": (), + "QTouchDevice.name": (), + "QTouchDevice.setCapabilities": ('Capabilities',), + "QTouchDevice.setMaximumTouchPoints": ('int',), + "QTouchDevice.setName": ('str',), + "QTouchDevice.setType": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTouchDevice.type": (), + + # class PySide2.QtGui.QTouchEvent: + "QTouchEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtGui.QTouchDevice', 'KeyboardModifiers', 'TouchPointStates', 'list'), + "QTouchEvent.device": (), + "QTouchEvent.setDevice": ('PySide2.QtGui.QTouchDevice',), + "QTouchEvent.setTarget": ('PySide2.QtCore.QObject',), + "QTouchEvent.setTouchPointStates": ('TouchPointStates',), + "QTouchEvent.setTouchPoints": ('list',), + "QTouchEvent.setWindow": ('PySide2.QtGui.QWindow',), + "QTouchEvent.target": (), + "QTouchEvent.touchPointStates": (), + "QTouchEvent.touchPoints": (), + "QTouchEvent.window": (), + + # class PySide2.QtGui.QTransform: + "QTransform.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float', 'float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QTransform.__copy__": (), + "QTransform.__reduce__": (), + "QTransform.adjoint": (), + "QTransform.det": (), + "QTransform.determinant": (), + "QTransform.dx": (), + "QTransform.dy": (), + "QTransform.fromScale": ('float', 'float'), + "QTransform.fromTranslate": ('float', 'float'), + "QTransform.inverted": ('bool',), + "QTransform.isAffine": (), + "QTransform.isIdentity": (), + "QTransform.isInvertible": (), + "QTransform.isRotating": (), + "QTransform.isScaling": (), + "QTransform.isTranslating": (), + "QTransform.m11": (), + "QTransform.m12": (), + "QTransform.m13": (), + "QTransform.m21": (), + "QTransform.m22": (), + "QTransform.m23": (), + "QTransform.m31": (), + "QTransform.m32": (), + "QTransform.m33": (), + "QTransform.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float')], + "QTransform.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QTransform.mapToPolygon": ('PySide2.QtCore.QRect',), + "QTransform.quadToQuad": [('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.quadToSquare": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.reset": (), + "QTransform.rotate": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.rotateRadians": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.scale": ('float', 'float'), + "QTransform.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float'), + "QTransform.shear": ('float', 'float'), + "QTransform.squareToQuad": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.toAffine": (), + "QTransform.translate": ('float', 'float'), + "QTransform.transposed": (), + "QTransform.type": (), + + # class PySide2.QtGui.QValidator: + "QValidator.__init__": ('PySide2.QtCore.QObject',), + "QValidator.fixup": ('str',), + "QValidator.locale": (), + "QValidator.setLocale": ('PySide2.QtCore.QLocale',), + "QValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QVector2D: + "QVector2D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',), ('float', 'float')], + "QVector2D.__copy__": (), + "QVector2D.__reduce__": (), + "QVector2D.distanceToLine": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.distanceToPoint": ('PySide2.QtGui.QVector2D',), + "QVector2D.dotProduct": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.isNull": (), + "QVector2D.length": (), + "QVector2D.lengthSquared": (), + "QVector2D.normalize": (), + "QVector2D.normalized": (), + "QVector2D.setX": ('float',), + "QVector2D.setY": ('float',), + "QVector2D.toPoint": (), + "QVector2D.toPointF": (), + "QVector2D.toTuple": (), + "QVector2D.toVector3D": (), + "QVector2D.toVector4D": (), + "QVector2D.x": (), + "QVector2D.y": (), + + # class PySide2.QtGui.QVector3D: + "QVector3D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float'), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',), ('float', 'float', 'float')], + "QVector3D.__copy__": (), + "QVector3D.__reduce__": (), + "QVector3D.crossProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToLine": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToPlane": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.distanceToPoint": ('PySide2.QtGui.QVector3D',), + "QVector3D.dotProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.isNull": (), + "QVector3D.length": (), + "QVector3D.lengthSquared": (), + "QVector3D.normal": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.normalize": (), + "QVector3D.normalized": (), + "QVector3D.project": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.setX": ('float',), + "QVector3D.setY": ('float',), + "QVector3D.setZ": ('float',), + "QVector3D.toPoint": (), + "QVector3D.toPointF": (), + "QVector3D.toTuple": (), + "QVector3D.toVector2D": (), + "QVector3D.toVector4D": (), + "QVector3D.unproject": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.x": (), + "QVector3D.y": (), + "QVector3D.z": (), + + # class PySide2.QtGui.QVector4D: + "QVector4D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float', 'float'), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector3D', 'float'), ('PySide2.QtGui.QVector4D',), ('float', 'float', 'float', 'float')], + "QVector4D.__copy__": (), + "QVector4D.__reduce__": (), + "QVector4D.dotProduct": ('PySide2.QtGui.QVector4D', 'PySide2.QtGui.QVector4D'), + "QVector4D.isNull": (), + "QVector4D.length": (), + "QVector4D.lengthSquared": (), + "QVector4D.normalize": (), + "QVector4D.normalized": (), + "QVector4D.setW": ('float',), + "QVector4D.setX": ('float',), + "QVector4D.setY": ('float',), + "QVector4D.setZ": ('float',), + "QVector4D.toPoint": (), + "QVector4D.toPointF": (), + "QVector4D.toTuple": (), + "QVector4D.toVector2D": (), + "QVector4D.toVector2DAffine": (), + "QVector4D.toVector3D": (), + "QVector4D.toVector3DAffine": (), + "QVector4D.w": (), + "QVector4D.x": (), + "QVector4D.y": (), + "QVector4D.z": (), + + # class PySide2.QtGui.QWhatsThisClickedEvent: + "QWhatsThisClickedEvent.__init__": ('str',), + "QWhatsThisClickedEvent.href": (), + + # class PySide2.QtGui.QWheelEvent: + "QWheelEvent.__init__": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation'), ('PySide2.QtCore.QPointF', 'int', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation')], + "QWheelEvent.angleDelta": (), + "QWheelEvent.buttons": (), + "QWheelEvent.delta": (), + "QWheelEvent.global"+"Y": (), + "QWheelEvent.globalPos": (), + "QWheelEvent.globalPosF": (), + "QWheelEvent.globalX": (), + "QWheelEvent.orientation": (), + "QWheelEvent.phase": (), + "QWheelEvent.pixelDelta": (), + "QWheelEvent.pos": (), + "QWheelEvent.posF": (), + "QWheelEvent.source": (), + "QWheelEvent.x": (), + "QWheelEvent.y": (), + + # class PySide2.QtGui.QWindow: + "QWindow.__init__": [('PySide2.QtGui.QScreen',), ('PySide2.QtGui.QWindow',)], + "QWindow.accessibleRoot": (), + "QWindow.alert": ('int',), + "QWindow.baseSize": (), + "QWindow.close": (), + "QWindow.contentOrientation": (), + "QWindow.create": (), + "QWindow.cursor": (), + "QWindow.destroy": (), + "QWindow.devicePixelRatio": (), + "QWindow.event": ('PySide2.QtCore.QEvent',), + "QWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QWindow.filePath": (), + "QWindow.flags": (), + "QWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.focusObject": (), + "QWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.format": (), + "QWindow.frameGeometry": (), + "QWindow.frameMargins": (), + "QWindow.framePosition": (), + "QWindow.fromWinId": ('int',), + "QWindow.geometry": (), + "QWindow.height": (), + "QWindow.hide": (), + "QWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWindow.icon": (), + "QWindow.isActive": (), + "QWindow.isAncestorOf": ('PySide2.QtGui.QWindow', 'PySide2.QtGui.QWindow.AncestorMode'), + "QWindow.isExposed": (), + "QWindow.isModal": (), + "QWindow.isTopLevel": (), + "QWindow.isVisible": (), + "QWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.lower": (), + "QWindow.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mask": (), + "QWindow.maximumHeight": (), + "QWindow.maximumSize": (), + "QWindow.maximumWidth": (), + "QWindow.minimumHeight": (), + "QWindow.minimumSize": (), + "QWindow.minimumWidth": (), + "QWindow.modality": (), + "QWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWindow.opacity": (), + "QWindow.parent": (), + "QWindow.position": (), + "QWindow.raise": (), + "QWindow.reportContentOrientationChange": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QWindow.requestActivate": (), + "QWindow.requestUpdate": (), + "QWindow.requestedFormat": (), + "QWindow.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWindow.screen": (), + "QWindow.setBaseSize": ('PySide2.QtCore.QSize',), + "QWindow.setCursor": ('PySide2.QtGui.QCursor',), + "QWindow.setFilePath": ('str',), + "QWindow.setFlags": ('WindowFlags',), + "QWindow.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QWindow.setFramePosition": ('PySide2.QtCore.QPoint',), + "QWindow.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWindow.setHeight": ('int',), + "QWindow.setIcon": ('PySide2.QtGui.QIcon',), + "QWindow.setKeyboardGrabEnabled": ('bool',), + "QWindow.setMask": ('PySide2.QtGui.QRegion',), + "QWindow.setMaximumHeight": ('int',), + "QWindow.setMaximumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMaximumWidth": ('int',), + "QWindow.setMinimumHeight": ('int',), + "QWindow.setMinimumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMinimumWidth": ('int',), + "QWindow.setModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWindow.setMouseGrabEnabled": ('bool',), + "QWindow.setOpacity": ('float',), + "QWindow.setParent": ('PySide2.QtGui.QWindow',), + "QWindow.setPosition": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWindow.setScreen": ('PySide2.QtGui.QScreen',), + "QWindow.setSizeIncrement": ('PySide2.QtCore.QSize',), + "QWindow.setSurfaceType": ('PySide2.QtGui.QSurface.SurfaceType',), + "QWindow.setTitle": ('str',), + "QWindow.setTransientParent": ('PySide2.QtGui.QWindow',), + "QWindow.setVisibility": ('PySide2.QtGui.QWindow.Visibility',), + "QWindow.setVisible": ('bool',), + "QWindow.setWidth": ('int',), + "QWindow.setWindowState": ('PySide2.QtCore.Qt.WindowState',), + "QWindow.setX": ('int',), + "QWindow.setY": ('int',), + "QWindow.show": (), + "QWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWindow.showFullScreen": (), + "QWindow.showMaximized": (), + "QWindow.showMinimized": (), + "QWindow.showNormal": (), + "QWindow.size": (), + "QWindow.sizeIncrement": (), + "QWindow.surfaceHandle": (), + "QWindow.surfaceType": (), + "QWindow.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWindow.title": (), + "QWindow.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QWindow.transientParent": (), + "QWindow.type": (), + "QWindow.unsetCursor": (), + "QWindow.visibility": (), + "QWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWindow.width": (), + "QWindow.winId": (), + "QWindow.windowState": (), + "QWindow.x": (), + "QWindow.y": (), + + # class PySide2.QtGui.QWindowStateChangeEvent: + "QWindowStateChangeEvent.__init__": ('WindowStates', 'bool'), + "QWindowStateChangeEvent.isOverride": (), + "QWindowStateChangeEvent.oldState": (), + }) + +# Module PySide2.QtWidgets +if "PySide2.QtWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWidgets.QAbstractButton: + "QAbstractButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractButton.animateClick": ('int',), + "QAbstractButton.autoExclusive": (), + "QAbstractButton.autoRepeat": (), + "QAbstractButton.autoRepeatDelay": (), + "QAbstractButton.autoRepeatInterval": (), + "QAbstractButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractButton.checkStateSet": (), + "QAbstractButton.click": (), + "QAbstractButton.event": ('PySide2.QtCore.QEvent',), + "QAbstractButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.group": (), + "QAbstractButton.hitButton": ('PySide2.QtCore.QPoint',), + "QAbstractButton.icon": (), + "QAbstractButton.iconSize": (), + "QAbstractButton.isCheckable": (), + "QAbstractButton.isChecked": (), + "QAbstractButton.isDown": (), + "QAbstractButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.nextCheckState": (), + "QAbstractButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractButton.setAutoExclusive": ('bool',), + "QAbstractButton.setAutoRepeat": ('bool',), + "QAbstractButton.setAutoRepeatDelay": ('int',), + "QAbstractButton.setAutoRepeatInterval": ('int',), + "QAbstractButton.setCheckable": ('bool',), + "QAbstractButton.setChecked": ('bool',), + "QAbstractButton.setDown": ('bool',), + "QAbstractButton.setIcon": ('PySide2.QtGui.QIcon',), + "QAbstractButton.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractButton.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAbstractButton.setText": ('str',), + "QAbstractButton.shortcut": (), + "QAbstractButton.text": (), + "QAbstractButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractButton.toggle": (), + + # class PySide2.QtWidgets.QAbstractGraphicsShapeItem: + "QAbstractGraphicsShapeItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.brush": (), + "QAbstractGraphicsShapeItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.opaqueArea": (), + "QAbstractGraphicsShapeItem.pen": (), + "QAbstractGraphicsShapeItem.setBrush": ('PySide2.QtGui.QBrush',), + "QAbstractGraphicsShapeItem.setPen": ('PySide2.QtGui.QPen',), + + # class PySide2.QtWidgets.QAbstractItemDelegate: + "QAbstractItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.destroyEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.elidedText": ('PySide2.QtGui.QFontMetrics', 'int', 'PySide2.QtCore.Qt.TextElideMode', 'str'), + "QAbstractItemDelegate.helpEvent": ('PySide2.QtGui.QHelpEvent', 'PySide2.QtWidgets.QAbstractItemView', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paintingRoles": (), + "QAbstractItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QAbstractItemView: + "QAbstractItemView.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.alternatingRowColors": (), + "QAbstractItemView.autoScrollMargin": (), + "QAbstractItemView.clearSelection": (), + "QAbstractItemView.closeEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QAbstractItemDelegate.EndEditHint'), + "QAbstractItemView.closePersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.commitData": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemView.currentIndex": (), + "QAbstractItemView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QAbstractItemView.defaultDropAction": (), + "QAbstractItemView.dirtyRegionOffset": (), + "QAbstractItemView.doAutoScroll": (), + "QAbstractItemView.doItemsLayout": (), + "QAbstractItemView.dragDropMode": (), + "QAbstractItemView.dragDropOverwriteMode": (), + "QAbstractItemView.dragEnabled": (), + "QAbstractItemView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractItemView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractItemView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractItemView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractItemView.dropIndicatorPosition": (), + "QAbstractItemView.edit": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.EditTrigger', 'PySide2.QtCore.QEvent')], + "QAbstractItemView.editTriggers": (), + "QAbstractItemView.editorDestroyed": ('PySide2.QtCore.QObject',), + "QAbstractItemView.event": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.executeDelayedItemsLayout": (), + "QAbstractItemView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.focusNextPrevChild": ('bool',), + "QAbstractItemView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.hasAutoScroll": (), + "QAbstractItemView.horizontalOffset": (), + "QAbstractItemView.horizontalScrollMode": (), + "QAbstractItemView.horizontalScrollbarAction": ('int',), + "QAbstractItemView.horizontalScrollbarValueChanged": ('int',), + "QAbstractItemView.horizontalStepsPerItem": (), + "QAbstractItemView.iconSize": (), + "QAbstractItemView.indexAt": ('PySide2.QtCore.QPoint',), + "QAbstractItemView.indexWidget": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QAbstractItemView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractItemView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.itemDelegate": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.itemDelegateForColumn": ('int',), + "QAbstractItemView.itemDelegateForRow": ('int',), + "QAbstractItemView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractItemView.keyboardSearch": ('str',), + "QAbstractItemView.model": (), + "QAbstractItemView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QAbstractItemView.openPersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.reset": (), + "QAbstractItemView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractItemView.rootIndex": (), + "QAbstractItemView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.scheduleDelayedItemsLayout": (), + "QAbstractItemView.scrollDirtyRegion": ('int', 'int'), + "QAbstractItemView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QAbstractItemView.scrollToBottom": (), + "QAbstractItemView.scrollToTop": (), + "QAbstractItemView.selectAll": (), + "QAbstractItemView.selectedIndexes": (), + "QAbstractItemView.selectionBehavior": (), + "QAbstractItemView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QAbstractItemView.selectionCommand": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QEvent'), + "QAbstractItemView.selectionMode": (), + "QAbstractItemView.selectionModel": (), + "QAbstractItemView.setAlternatingRowColors": ('bool',), + "QAbstractItemView.setAutoScroll": ('bool',), + "QAbstractItemView.setAutoScrollMargin": ('int',), + "QAbstractItemView.setCurrentIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setDefaultDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QAbstractItemView.setDirtyRegion": ('PySide2.QtGui.QRegion',), + "QAbstractItemView.setDragDropMode": ('PySide2.QtWidgets.QAbstractItemView.DragDropMode',), + "QAbstractItemView.setDragDropOverwriteMode": ('bool',), + "QAbstractItemView.setDragEnabled": ('bool',), + "QAbstractItemView.setDropIndicatorShown": ('bool',), + "QAbstractItemView.setEditTriggers": ('EditTriggers',), + "QAbstractItemView.setHorizontalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setHorizontalStepsPerItem": ('int',), + "QAbstractItemView.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractItemView.setIndexWidget": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QWidget'), + "QAbstractItemView.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QAbstractItemView.setItemDelegateForColumn": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setItemDelegateForRow": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractItemView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QAbstractItemView.setSelectionBehavior": ('PySide2.QtWidgets.QAbstractItemView.SelectionBehavior',), + "QAbstractItemView.setSelectionMode": ('PySide2.QtWidgets.QAbstractItemView.SelectionMode',), + "QAbstractItemView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QAbstractItemView.setState": ('PySide2.QtWidgets.QAbstractItemView.State',), + "QAbstractItemView.setTabKeyNavigation": ('bool',), + "QAbstractItemView.setTextElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QAbstractItemView.setVerticalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setVerticalStepsPerItem": ('int',), + "QAbstractItemView.showDropIndicator": (), + "QAbstractItemView.sizeHintForColumn": ('int',), + "QAbstractItemView.sizeHintForIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.sizeHintForRow": ('int',), + "QAbstractItemView.startAutoScroll": (), + "QAbstractItemView.startDrag": ('DropActions',), + "QAbstractItemView.state": (), + "QAbstractItemView.stopAutoScroll": (), + "QAbstractItemView.tabKeyNavigation": (), + "QAbstractItemView.textElideMode": (), + "QAbstractItemView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractItemView.update": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.updateEditorData": (), + "QAbstractItemView.updateEditorGeometries": (), + "QAbstractItemView.updateGeometries": (), + "QAbstractItemView.verticalOffset": (), + "QAbstractItemView.verticalScrollMode": (), + "QAbstractItemView.verticalScrollbarAction": ('int',), + "QAbstractItemView.verticalScrollbarValueChanged": ('int',), + "QAbstractItemView.verticalStepsPerItem": (), + "QAbstractItemView.viewOptions": (), + "QAbstractItemView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.viewportSizeHint": (), + "QAbstractItemView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QAbstractScrollArea: + "QAbstractScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.addScrollBarWidget": ('PySide2.QtWidgets.QWidget', 'Alignment'), + "QAbstractScrollArea.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractScrollArea.cornerWidget": (), + "QAbstractScrollArea.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractScrollArea.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractScrollArea.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractScrollArea.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractScrollArea.event": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QAbstractScrollArea.horizontalScrollBar": (), + "QAbstractScrollArea.horizontalScrollBarPolicy": (), + "QAbstractScrollArea.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractScrollArea.maximumViewportSize": (), + "QAbstractScrollArea.minimumSizeHint": (), + "QAbstractScrollArea.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractScrollArea.scrollBarWidgets": ('Alignment',), + "QAbstractScrollArea.scrollContentsBy": ('int', 'int'), + "QAbstractScrollArea.setCornerWidget": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setHorizontalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setHorizontalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setSizeAdjustPolicy": ('PySide2.QtWidgets.QAbstractScrollArea.SizeAdjustPolicy',), + "QAbstractScrollArea.setVerticalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setVerticalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setViewportMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QAbstractScrollArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.sizeAdjustPolicy": (), + "QAbstractScrollArea.sizeHint": (), + "QAbstractScrollArea.verticalScrollBar": (), + "QAbstractScrollArea.verticalScrollBarPolicy": (), + "QAbstractScrollArea.viewport": (), + "QAbstractScrollArea.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.viewportMargins": (), + "QAbstractScrollArea.viewportSizeHint": (), + "QAbstractScrollArea.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSlider: + "QAbstractSlider.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSlider.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.event": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.hasTracking": (), + "QAbstractSlider.invertedAppearance": (), + "QAbstractSlider.invertedControls": (), + "QAbstractSlider.isSliderDown": (), + "QAbstractSlider.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSlider.maximum": (), + "QAbstractSlider.minimum": (), + "QAbstractSlider.orientation": (), + "QAbstractSlider.pageStep": (), + "QAbstractSlider.repeatAction": (), + "QAbstractSlider.setInvertedAppearance": ('bool',), + "QAbstractSlider.setInvertedControls": ('bool',), + "QAbstractSlider.setMaximum": ('int',), + "QAbstractSlider.setMinimum": ('int',), + "QAbstractSlider.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QAbstractSlider.setPageStep": ('int',), + "QAbstractSlider.setRange": ('int', 'int'), + "QAbstractSlider.setRepeatAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction', 'int', 'int'), + "QAbstractSlider.setSingleStep": ('int',), + "QAbstractSlider.setSliderDown": ('bool',), + "QAbstractSlider.setSliderPosition": ('int',), + "QAbstractSlider.setTracking": ('bool',), + "QAbstractSlider.setValue": ('int',), + "QAbstractSlider.singleStep": (), + "QAbstractSlider.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QAbstractSlider.sliderPosition": (), + "QAbstractSlider.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSlider.triggerAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction',), + "QAbstractSlider.value": (), + "QAbstractSlider.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSpinBox: + "QAbstractSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSpinBox.alignment": (), + "QAbstractSpinBox.buttonSymbols": (), + "QAbstractSpinBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.clear": (), + "QAbstractSpinBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QAbstractSpinBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractSpinBox.correctionMode": (), + "QAbstractSpinBox.event": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.fixup": ('str',), + "QAbstractSpinBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.hasAcceptableInput": (), + "QAbstractSpinBox.hasFrame": (), + "QAbstractSpinBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QAbstractSpinBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QAbstractSpinBox.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractSpinBox.interpretText": (), + "QAbstractSpinBox.isAccelerated": (), + "QAbstractSpinBox.isGroupSeparatorShown": (), + "QAbstractSpinBox.isReadOnly": (), + "QAbstractSpinBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyboardTracking": (), + "QAbstractSpinBox.lineEdit": (), + "QAbstractSpinBox.minimumSizeHint": (), + "QAbstractSpinBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractSpinBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractSpinBox.selectAll": (), + "QAbstractSpinBox.setAccelerated": ('bool',), + "QAbstractSpinBox.setAlignment": ('Alignment',), + "QAbstractSpinBox.setButtonSymbols": ('PySide2.QtWidgets.QAbstractSpinBox.ButtonSymbols',), + "QAbstractSpinBox.setCorrectionMode": ('PySide2.QtWidgets.QAbstractSpinBox.CorrectionMode',), + "QAbstractSpinBox.setFrame": ('bool',), + "QAbstractSpinBox.setGroupSeparatorShown": ('bool',), + "QAbstractSpinBox.setKeyboardTracking": ('bool',), + "QAbstractSpinBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QAbstractSpinBox.setReadOnly": ('bool',), + "QAbstractSpinBox.setSpecialValueText": ('str',), + "QAbstractSpinBox.setWrapping": ('bool',), + "QAbstractSpinBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QAbstractSpinBox.sizeHint": (), + "QAbstractSpinBox.specialValueText": (), + "QAbstractSpinBox.stepBy": ('int',), + "QAbstractSpinBox.stepDown": (), + "QAbstractSpinBox.stepEnabled": (), + "QAbstractSpinBox.stepUp": (), + "QAbstractSpinBox.text": (), + "QAbstractSpinBox.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSpinBox.validate": ('str', 'int'), + "QAbstractSpinBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QAbstractSpinBox.wrapping": (), + + # class PySide2.QtWidgets.QAction: + "QAction.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QAction.actionGroup": (), + "QAction.activate": ('PySide2.QtWidgets.QAction.ActionEvent',), + "QAction.associatedGraphicsWidgets": (), + "QAction.associatedWidgets": (), + "QAction.autoRepeat": (), + "QAction.data": (), + "QAction.event": ('PySide2.QtCore.QEvent',), + "QAction.font": (), + "QAction.hover": (), + "QAction.icon": (), + "QAction.iconText": (), + "QAction.isCheckable": (), + "QAction.isChecked": (), + "QAction.isEnabled": (), + "QAction.isIconVisibleInMenu": (), + "QAction.isSeparator": (), + "QAction.isVisible": (), + "QAction.menu": (), + "QAction.menuRole": (), + "QAction.parentWidget": (), + "QAction.priority": (), + "QAction.setActionGroup": ('PySide2.QtWidgets.QActionGroup',), + "QAction.setAutoRepeat": ('bool',), + "QAction.setCheckable": ('bool',), + "QAction.setChecked": ('bool',), + "QAction.setData": ('PySide2.support.signature.typing.Any',), + "QAction.setDisabled": ('bool',), + "QAction.setEnabled": ('bool',), + "QAction.setFont": ('PySide2.QtGui.QFont',), + "QAction.setIcon": ('PySide2.QtGui.QIcon',), + "QAction.setIconText": ('str',), + "QAction.setIconVisibleInMenu": ('bool',), + "QAction.setMenu": ('PySide2.QtWidgets.QMenu',), + "QAction.setMenuRole": ('PySide2.QtWidgets.QAction.MenuRole',), + "QAction.setPriority": ('PySide2.QtWidgets.QAction.Priority',), + "QAction.setSeparator": ('bool',), + "QAction.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAction.setShortcutContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QAction.setShortcuts": [('PySide2.QtGui.QKeySequence.StandardKey',), ('list',)], + "QAction.setStatusTip": ('str',), + "QAction.setText": ('str',), + "QAction.setToolTip": ('str',), + "QAction.setVisible": ('bool',), + "QAction.setWhatsThis": ('str',), + "QAction.shortcut": (), + "QAction.shortcutContext": (), + "QAction.shortcuts": (), + "QAction.showStatusText": ('PySide2.QtWidgets.QWidget',), + "QAction.statusTip": (), + "QAction.text": (), + "QAction.toggle": (), + "QAction.toolTip": (), + "QAction.trigger": (), + "QAction.whatsThis": (), + + # class PySide2.QtWidgets.QActionGroup: + "QActionGroup.__init__": ('PySide2.QtCore.QObject',), + "QActionGroup.actions": (), + "QActionGroup.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction',), ('str',)], + "QActionGroup.checkedAction": (), + "QActionGroup.isEnabled": (), + "QActionGroup.isExclusive": (), + "QActionGroup.isVisible": (), + "QActionGroup.removeAction": ('PySide2.QtWidgets.QAction',), + "QActionGroup.setDisabled": ('bool',), + "QActionGroup.setEnabled": ('bool',), + "QActionGroup.setExclusive": ('bool',), + "QActionGroup.setVisible": ('bool',), + + # class PySide2.QtWidgets.QApplication: + "QApplication.__init__": ('PySide2.support.signature.typing.List',), + "QApplication.aboutQt": (), + "QApplication.activeModalWidget": (), + "QApplication.activePopupWidget": (), + "QApplication.activeWindow": (), + "QApplication.alert": ('PySide2.QtWidgets.QWidget', 'int'), + "QApplication.allWidgets": (), + "QApplication.autoSipEnabled": (), + "QApplication.beep": (), + "QApplication.closeAllWindows": (), + "QApplication.colorSpec": (), + "QApplication.cursorFlashTime": (), + "QApplication.desktop": (), + "QApplication.doubleClickInterval": (), + "QApplication.event": ('PySide2.QtCore.QEvent',), + "QApplication.exec_": (), + "QApplication.focusWidget": (), + "QApplication.font": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.fontMetrics": (), + "QApplication.globalStrut": (), + "QApplication.isEffectEnabled": ('PySide2.QtCore.Qt.UIEffect',), + "QApplication.keyboardInputInterval": (), + "QApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QApplication.palette": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.setActiveWindow": ('PySide2.QtWidgets.QWidget',), + "QApplication.setAutoSipEnabled": ('bool',), + "QApplication.setColorSpec": ('int',), + "QApplication.setCursorFlashTime": ('int',), + "QApplication.setDoubleClickInterval": ('int',), + "QApplication.setEffectEnabled": ('PySide2.QtCore.Qt.UIEffect', 'bool'), + "QApplication.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'str')], + "QApplication.setGlobalStrut": ('PySide2.QtCore.QSize',), + "QApplication.setKeyboardInputInterval": ('int',), + "QApplication.setPalette": [('PySide2.QtGui.QPalette',), ('PySide2.QtGui.QPalette', 'str')], + "QApplication.setStartDragDistance": ('int',), + "QApplication.setStartDragTime": ('int',), + "QApplication.setStyle": [('PySide2.QtWidgets.QStyle',), ('str',)], + "QApplication.setStyleSheet": ('str',), + "QApplication.setWheelScrollLines": ('int',), + "QApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QApplication.startDragDistance": (), + "QApplication.startDragTime": (), + "QApplication.style": (), + "QApplication.styleSheet": (), + "QApplication.topLevelAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.topLevelWidgets": (), + "QApplication.wheelScrollLines": (), + "QApplication.widgetAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.windowIcon": (), + + # class PySide2.QtWidgets.QBoxLayout: + "QBoxLayout.__init__": ('PySide2.QtWidgets.QBoxLayout.Direction', 'PySide2.QtWidgets.QWidget'), + "QBoxLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QBoxLayout.addLayout": ('PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.addSpacerItem": ('PySide2.QtWidgets.QSpacerItem',), + "QBoxLayout.addSpacing": ('int',), + "QBoxLayout.addStretch": ('int',), + "QBoxLayout.addStrut": ('int',), + "QBoxLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'Alignment')], + "QBoxLayout.count": (), + "QBoxLayout.direction": (), + "QBoxLayout.expandingDirections": (), + "QBoxLayout.hasHeightForWidth": (), + "QBoxLayout.heightForWidth": ('int',), + "QBoxLayout.insertItem": ('int', 'PySide2.QtWidgets.QLayoutItem'), + "QBoxLayout.insertLayout": ('int', 'PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.insertSpacerItem": ('int', 'PySide2.QtWidgets.QSpacerItem'), + "QBoxLayout.insertSpacing": ('int', 'int'), + "QBoxLayout.insertStretch": ('int', 'int'), + "QBoxLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int', 'Alignment'), + "QBoxLayout.invalidate": (), + "QBoxLayout.itemAt": ('int',), + "QBoxLayout.maximumSize": (), + "QBoxLayout.minimumHeightForWidth": ('int',), + "QBoxLayout.minimumSize": (), + "QBoxLayout.setDirection": ('PySide2.QtWidgets.QBoxLayout.Direction',), + "QBoxLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QBoxLayout.setSpacing": ('int',), + "QBoxLayout.setStretch": ('int', 'int'), + "QBoxLayout.setStretchFactor": [('PySide2.QtWidgets.QLayout', 'int'), ('PySide2.QtWidgets.QWidget', 'int')], + "QBoxLayout.sizeHint": (), + "QBoxLayout.spacing": (), + "QBoxLayout.stretch": ('int',), + "QBoxLayout.takeAt": ('int',), + + # class PySide2.QtWidgets.QButtonGroup: + "QButtonGroup.__init__": ('PySide2.QtCore.QObject',), + "QButtonGroup.addButton": ('PySide2.QtWidgets.QAbstractButton', 'int'), + "QButtonGroup.button": ('int',), + "QButtonGroup.buttons": (), + "QButtonGroup.checkedButton": (), + "QButtonGroup.checkedId": (), + "QButtonGroup.exclusive": (), + "QButtonGroup.id": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.setExclusive": ('bool',), + "QButtonGroup.setId": ('PySide2.QtWidgets.QAbstractButton', 'int'), + + # class PySide2.QtWidgets.QCalendarWidget: + "QCalendarWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QCalendarWidget.dateEditAcceptDelay": (), + "QCalendarWidget.dateTextFormat": [(), ('PySide2.QtCore.QDate',)], + "QCalendarWidget.event": ('PySide2.QtCore.QEvent',), + "QCalendarWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCalendarWidget.firstDayOfWeek": (), + "QCalendarWidget.headerTextFormat": (), + "QCalendarWidget.horizontalHeaderFormat": (), + "QCalendarWidget.isDateEditEnabled": (), + "QCalendarWidget.isGridVisible": (), + "QCalendarWidget.isNavigationBarVisible": (), + "QCalendarWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QCalendarWidget.maximumDate": (), + "QCalendarWidget.minimumDate": (), + "QCalendarWidget.minimumSizeHint": (), + "QCalendarWidget.monthShown": (), + "QCalendarWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QCalendarWidget.paintCell": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QDate'), + "QCalendarWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QCalendarWidget.selectedDate": (), + "QCalendarWidget.selectionMode": (), + "QCalendarWidget.setCurrentPage": ('int', 'int'), + "QCalendarWidget.setDateEditAcceptDelay": ('int',), + "QCalendarWidget.setDateEditEnabled": ('bool',), + "QCalendarWidget.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QCalendarWidget.setDateTextFormat": ('PySide2.QtCore.QDate', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.setFirstDayOfWeek": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.setGridVisible": ('bool',), + "QCalendarWidget.setHeaderTextFormat": ('PySide2.QtGui.QTextCharFormat',), + "QCalendarWidget.setHorizontalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.HorizontalHeaderFormat',), + "QCalendarWidget.setMaximumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setMinimumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setNavigationBarVisible": ('bool',), + "QCalendarWidget.setSelectedDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setSelectionMode": ('PySide2.QtWidgets.QCalendarWidget.SelectionMode',), + "QCalendarWidget.setVerticalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.VerticalHeaderFormat',), + "QCalendarWidget.setWeekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.showNextMonth": (), + "QCalendarWidget.showNextYear": (), + "QCalendarWidget.showPreviousMonth": (), + "QCalendarWidget.showPreviousYear": (), + "QCalendarWidget.showSelectedDate": (), + "QCalendarWidget.showToday": (), + "QCalendarWidget.sizeHint": (), + "QCalendarWidget.updateCell": ('PySide2.QtCore.QDate',), + "QCalendarWidget.updateCells": (), + "QCalendarWidget.verticalHeaderFormat": (), + "QCalendarWidget.weekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.yearShown": (), + + # class PySide2.QtWidgets.QCheckBox: + "QCheckBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QCheckBox.checkState": (), + "QCheckBox.checkStateSet": (), + "QCheckBox.event": ('PySide2.QtCore.QEvent',), + "QCheckBox.hitButton": ('PySide2.QtCore.QPoint',), + "QCheckBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QCheckBox.isTristate": (), + "QCheckBox.minimumSizeHint": (), + "QCheckBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QCheckBox.nextCheckState": (), + "QCheckBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCheckBox.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QCheckBox.setTristate": ('bool',), + "QCheckBox.sizeHint": (), + + # class PySide2.QtWidgets.QColorDialog: + "QColorDialog.__init__": [('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QColorDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QColorDialog.currentColor": (), + "QColorDialog.customColor": ('int',), + "QColorDialog.customCount": (), + "QColorDialog.done": ('int',), + "QColorDialog.getColor": ('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget', 'str', 'ColorDialogOptions'), + "QColorDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QColorDialog.options": (), + "QColorDialog.selectedColor": (), + "QColorDialog.setCurrentColor": ('PySide2.QtGui.QColor',), + "QColorDialog.setCustomColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption', 'bool'), + "QColorDialog.setOptions": ('ColorDialogOptions',), + "QColorDialog.setStandardColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setVisible": ('bool',), + "QColorDialog.standardColor": ('int',), + "QColorDialog.testOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption',), + + # class PySide2.QtWidgets.QColumnView: + "QColumnView.__init__": ('PySide2.QtWidgets.QWidget',), + "QColumnView.columnWidths": (), + "QColumnView.createColumn": ('PySide2.QtCore.QModelIndex',), + "QColumnView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QColumnView.horizontalOffset": (), + "QColumnView.indexAt": ('PySide2.QtCore.QPoint',), + "QColumnView.initializeColumn": ('PySide2.QtWidgets.QAbstractItemView',), + "QColumnView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QColumnView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QColumnView.previewWidget": (), + "QColumnView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QColumnView.resizeGripsVisible": (), + "QColumnView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QColumnView.scrollContentsBy": ('int', 'int'), + "QColumnView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QColumnView.selectAll": (), + "QColumnView.setColumnWidths": ('list',), + "QColumnView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QColumnView.setPreviewWidget": ('PySide2.QtWidgets.QWidget',), + "QColumnView.setResizeGripsVisible": ('bool',), + "QColumnView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QColumnView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QColumnView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QColumnView.sizeHint": (), + "QColumnView.verticalOffset": (), + "QColumnView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QColumnView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QComboBox: + "QComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QComboBox.addItem": [('PySide2.QtGui.QIcon', 'str', 'PySide2.support.signature.typing.Any'), ('str', 'PySide2.support.signature.typing.Any')], + "QComboBox.addItems": ('PySide2.support.signature.typing.List',), + "QComboBox.autoCompletion": (), + "QComboBox.autoCompletionCaseSensitivity": (), + "QComboBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QComboBox.clear": (), + "QComboBox.clearEditText": (), + "QComboBox.completer": (), + "QComboBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QComboBox.count": (), + "QComboBox.currentData": ('int',), + "QComboBox.currentIndex": (), + "QComboBox.currentText": (), + "QComboBox.duplicatesEnabled": (), + "QComboBox.event": ('PySide2.QtCore.QEvent',), + "QComboBox.findData": ('PySide2.support.signature.typing.Any', 'int', 'MatchFlags'), + "QComboBox.findText": ('str', 'MatchFlags'), + "QComboBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.hasFrame": (), + "QComboBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QComboBox.hidePopup": (), + "QComboBox.iconSize": (), + "QComboBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionComboBox',), + "QComboBox.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QComboBox.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QComboBox.insertItem": [('int', 'PySide2.QtGui.QIcon', 'str', 'PySide2.support.signature.typing.Any'), ('int', 'str', 'PySide2.support.signature.typing.Any')], + "QComboBox.insertItems": ('int', 'PySide2.support.signature.typing.List'), + "QComboBox.insertPolicy": (), + "QComboBox.insertSeparator": ('int',), + "QComboBox.isEditable": (), + "QComboBox.itemData": ('int', 'int'), + "QComboBox.itemDelegate": (), + "QComboBox.itemIcon": ('int',), + "QComboBox.itemText": ('int',), + "QComboBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.lineEdit": (), + "QComboBox.maxCount": (), + "QComboBox.maxVisibleItems": (), + "QComboBox.minimumContentsLength": (), + "QComboBox.minimumSizeHint": (), + "QComboBox.model": (), + "QComboBox.modelColumn": (), + "QComboBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QComboBox.removeItem": ('int',), + "QComboBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QComboBox.rootModelIndex": (), + "QComboBox.setAutoCompletion": ('bool',), + "QComboBox.setAutoCompletionCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QComboBox.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QComboBox.setCurrentIndex": ('int',), + "QComboBox.setCurrentText": ('str',), + "QComboBox.setDuplicatesEnabled": ('bool',), + "QComboBox.setEditText": ('str',), + "QComboBox.setEditable": ('bool',), + "QComboBox.setFrame": ('bool',), + "QComboBox.setIconSize": ('PySide2.QtCore.QSize',), + "QComboBox.setInsertPolicy": ('PySide2.QtWidgets.QComboBox.InsertPolicy',), + "QComboBox.setItemData": ('int', 'PySide2.support.signature.typing.Any', 'int'), + "QComboBox.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QComboBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QComboBox.setItemText": ('int', 'str'), + "QComboBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QComboBox.setMaxCount": ('int',), + "QComboBox.setMaxVisibleItems": ('int',), + "QComboBox.setMinimumContentsLength": ('int',), + "QComboBox.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QComboBox.setModelColumn": ('int',), + "QComboBox.setRootModelIndex": ('PySide2.QtCore.QModelIndex',), + "QComboBox.setSizeAdjustPolicy": ('PySide2.QtWidgets.QComboBox.SizeAdjustPolicy',), + "QComboBox.setValidator": ('PySide2.QtGui.QValidator',), + "QComboBox.setView": ('PySide2.QtWidgets.QAbstractItemView',), + "QComboBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QComboBox.showPopup": (), + "QComboBox.sizeAdjustPolicy": (), + "QComboBox.sizeHint": (), + "QComboBox.validator": (), + "QComboBox.view": (), + "QComboBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QCommandLinkButton: + "QCommandLinkButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget'), ('str', 'str', 'PySide2.QtWidgets.QWidget')], + "QCommandLinkButton.description": (), + "QCommandLinkButton.event": ('PySide2.QtCore.QEvent',), + "QCommandLinkButton.heightForWidth": ('int',), + "QCommandLinkButton.minimumSizeHint": (), + "QCommandLinkButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCommandLinkButton.setDescription": ('str',), + "QCommandLinkButton.sizeHint": (), + + # class PySide2.QtWidgets.QCommonStyle: + "QCommonStyle.__init__": (), + "QCommonStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QCommonStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QCommonStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QCommonStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QCompleter: + "QCompleter.__init__": [('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.support.signature.typing.List', 'PySide2.QtCore.QObject')], + "QCompleter.caseSensitivity": (), + "QCompleter.complete": ('PySide2.QtCore.QRect',), + "QCompleter.completionColumn": (), + "QCompleter.completionCount": (), + "QCompleter.completionMode": (), + "QCompleter.completionModel": (), + "QCompleter.completionPrefix": (), + "QCompleter.completionRole": (), + "QCompleter.currentCompletion": (), + "QCompleter.currentIndex": (), + "QCompleter.currentRow": (), + "QCompleter.event": ('PySide2.QtCore.QEvent',), + "QCompleter.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCompleter.filterMode": (), + "QCompleter.maxVisibleItems": (), + "QCompleter.model": (), + "QCompleter.modelSorting": (), + "QCompleter.pathFromIndex": ('PySide2.QtCore.QModelIndex',), + "QCompleter.popup": (), + "QCompleter.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCompleter.setCompletionColumn": ('int',), + "QCompleter.setCompletionMode": ('PySide2.QtWidgets.QCompleter.CompletionMode',), + "QCompleter.setCompletionPrefix": ('str',), + "QCompleter.setCompletionRole": ('int',), + "QCompleter.setCurrentRow": ('int',), + "QCompleter.setFilterMode": ('MatchFlags',), + "QCompleter.setMaxVisibleItems": ('int',), + "QCompleter.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QCompleter.setModelSorting": ('PySide2.QtWidgets.QCompleter.ModelSorting',), + "QCompleter.setPopup": ('PySide2.QtWidgets.QAbstractItemView',), + "QCompleter.setWidget": ('PySide2.QtWidgets.QWidget',), + "QCompleter.setWrapAround": ('bool',), + "QCompleter.splitPath": ('str',), + "QCompleter.widget": (), + "QCompleter.wrapAround": (), + + # class PySide2.QtWidgets.QDataWidgetMapper: + "QDataWidgetMapper.__init__": ('PySide2.QtCore.QObject',), + "QDataWidgetMapper.addMapping": [('PySide2.QtWidgets.QWidget', 'int'), ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtCore.QByteArray')], + "QDataWidgetMapper.clearMapping": (), + "QDataWidgetMapper.currentIndex": (), + "QDataWidgetMapper.itemDelegate": (), + "QDataWidgetMapper.mappedPropertyName": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedSection": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedWidgetAt": ('int',), + "QDataWidgetMapper.model": (), + "QDataWidgetMapper.orientation": (), + "QDataWidgetMapper.removeMapping": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.revert": (), + "QDataWidgetMapper.rootIndex": (), + "QDataWidgetMapper.setCurrentIndex": ('int',), + "QDataWidgetMapper.setCurrentModelIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QDataWidgetMapper.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QDataWidgetMapper.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDataWidgetMapper.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setSubmitPolicy": ('PySide2.QtWidgets.QDataWidgetMapper.SubmitPolicy',), + "QDataWidgetMapper.submit": (), + "QDataWidgetMapper.submitPolicy": (), + "QDataWidgetMapper.toFirst": (), + "QDataWidgetMapper.toLast": (), + "QDataWidgetMapper.toNext": (), + "QDataWidgetMapper.toPrevious": (), + + # class PySide2.QtWidgets.QDateEdit: + "QDateEdit.__init__": [('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDateTimeEdit: + "QDateTimeEdit.__init__": [('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDateTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('PySide2.support.signature.typing.Any', 'type', 'PySide2.QtWidgets.QWidget')], + "QDateTimeEdit.calendarPopup": (), + "QDateTimeEdit.calendarWidget": (), + "QDateTimeEdit.clear": (), + "QDateTimeEdit.clearMaximumDate": (), + "QDateTimeEdit.clearMaximumDateTime": (), + "QDateTimeEdit.clearMaximumTime": (), + "QDateTimeEdit.clearMinimumDate": (), + "QDateTimeEdit.clearMinimumDateTime": (), + "QDateTimeEdit.clearMinimumTime": (), + "QDateTimeEdit.currentSection": (), + "QDateTimeEdit.currentSectionIndex": (), + "QDateTimeEdit.date": (), + "QDateTimeEdit.dateTime": (), + "QDateTimeEdit.dateTimeFromText": ('str',), + "QDateTimeEdit.displayFormat": (), + "QDateTimeEdit.displayedSections": (), + "QDateTimeEdit.event": ('PySide2.QtCore.QEvent',), + "QDateTimeEdit.fixup": ('str',), + "QDateTimeEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QDateTimeEdit.focusNextPrevChild": ('bool',), + "QDateTimeEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QDateTimeEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDateTimeEdit.maximumDate": (), + "QDateTimeEdit.maximumDateTime": (), + "QDateTimeEdit.maximumTime": (), + "QDateTimeEdit.minimumDate": (), + "QDateTimeEdit.minimumDateTime": (), + "QDateTimeEdit.minimumTime": (), + "QDateTimeEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDateTimeEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDateTimeEdit.sectionAt": ('int',), + "QDateTimeEdit.sectionCount": (), + "QDateTimeEdit.sectionText": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCalendarPopup": ('bool',), + "QDateTimeEdit.setCalendarWidget": ('PySide2.QtWidgets.QCalendarWidget',), + "QDateTimeEdit.setCurrentSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCurrentSectionIndex": ('int',), + "QDateTimeEdit.setDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QDateTimeEdit.setDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setDateTimeRange": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QDateTimeEdit.setDisplayFormat": ('str',), + "QDateTimeEdit.setMaximumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMaximumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMaximumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setMinimumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMinimumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMinimumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setSelectedSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setTimeRange": ('PySide2.QtCore.QTime', 'PySide2.QtCore.QTime'), + "QDateTimeEdit.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTimeEdit.sizeHint": (), + "QDateTimeEdit.stepBy": ('int',), + "QDateTimeEdit.stepEnabled": (), + "QDateTimeEdit.textFromDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.time": (), + "QDateTimeEdit.timeSpec": (), + "QDateTimeEdit.validate": ('str', 'int'), + "QDateTimeEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QDesktopWidget: + "QDesktopWidget.__init__": (), + "QDesktopWidget.availableGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.isVirtualDesktop": (), + "QDesktopWidget.numScreens": (), + "QDesktopWidget.primaryScreen": (), + "QDesktopWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDesktopWidget.screen": ('int',), + "QDesktopWidget.screenCount": (), + "QDesktopWidget.screenGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.screenNumber": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDial: + "QDial.__init__": ('PySide2.QtWidgets.QWidget',), + "QDial.event": ('PySide2.QtCore.QEvent',), + "QDial.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QDial.minimumSizeHint": (), + "QDial.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.notchSize": (), + "QDial.notchTarget": (), + "QDial.notchesVisible": (), + "QDial.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDial.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDial.setNotchTarget": ('float',), + "QDial.setNotchesVisible": ('bool',), + "QDial.setWrapping": ('bool',), + "QDial.sizeHint": (), + "QDial.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QDial.wrapping": (), + + # class PySide2.QtWidgets.QDialog: + "QDialog.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QDialog.accept": (), + "QDialog.adjustPosition": ('PySide2.QtWidgets.QWidget',), + "QDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDialog.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QDialog.done": ('int',), + "QDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QDialog.exec_": (), + "QDialog.extension": (), + "QDialog.isSizeGripEnabled": (), + "QDialog.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDialog.minimumSizeHint": (), + "QDialog.open": (), + "QDialog.orientation": (), + "QDialog.reject": (), + "QDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDialog.result": (), + "QDialog.setExtension": ('PySide2.QtWidgets.QWidget',), + "QDialog.setModal": ('bool',), + "QDialog.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialog.setResult": ('int',), + "QDialog.setSizeGripEnabled": ('bool',), + "QDialog.setVisible": ('bool',), + "QDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QDialog.showExtension": ('bool',), + "QDialog.sizeHint": (), + + # class PySide2.QtWidgets.QDialogButtonBox: + "QDialogButtonBox.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('StandardButtons', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('StandardButtons', 'PySide2.QtWidgets.QWidget')], + "QDialogButtonBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole'), ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), ('str', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole')], + "QDialogButtonBox.button": ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), + "QDialogButtonBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.buttons": (), + "QDialogButtonBox.centerButtons": (), + "QDialogButtonBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.clear": (), + "QDialogButtonBox.event": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.orientation": (), + "QDialogButtonBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.setCenterButtons": ('bool',), + "QDialogButtonBox.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialogButtonBox.setStandardButtons": ('StandardButtons',), + "QDialogButtonBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.standardButtons": (), + + # class PySide2.QtWidgets.QDirModel: + "QDirModel.__init__": [('PySide2.QtCore.QObject',), ('PySide2.support.signature.typing.List', 'Filters', 'SortFlags', 'PySide2.QtCore.QObject')], + "QDirModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QDirModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QDirModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filter": (), + "QDirModel.flags": ('PySide2.QtCore.QModelIndex',), + "QDirModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QDirModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QDirModel.iconProvider": (), + "QDirModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QDirModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.isReadOnly": (), + "QDirModel.lazyChildCount": (), + "QDirModel.mimeData": ('PySide2.support.signature.typing.List',), + "QDirModel.mimeTypes": (), + "QDirModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QDirModel.nameFilters": (), + "QDirModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QDirModel.refresh": ('PySide2.QtCore.QModelIndex',), + "QDirModel.remove": ('PySide2.QtCore.QModelIndex',), + "QDirModel.resolveSymlinks": (), + "QDirModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QDirModel.setFilter": ('Filters',), + "QDirModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QDirModel.setLazyChildCount": ('bool',), + "QDirModel.setNameFilters": ('PySide2.support.signature.typing.List',), + "QDirModel.setReadOnly": ('bool',), + "QDirModel.setResolveSymlinks": ('bool',), + "QDirModel.setSorting": ('SortFlags',), + "QDirModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QDirModel.sorting": (), + "QDirModel.supportedDropActions": (), + + # class PySide2.QtWidgets.QDockWidget: + "QDockWidget.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QDockWidget.allowedAreas": (), + "QDockWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QDockWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDockWidget.event": ('PySide2.QtCore.QEvent',), + "QDockWidget.features": (), + "QDockWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionDockWidget',), + "QDockWidget.isAreaAllowed": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QDockWidget.isFloating": (), + "QDockWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDockWidget.setAllowedAreas": ('DockWidgetAreas',), + "QDockWidget.setFeatures": ('DockWidgetFeatures',), + "QDockWidget.setFloating": ('bool',), + "QDockWidget.setTitleBarWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.titleBarWidget": (), + "QDockWidget.toggleViewAction": (), + "QDockWidget.widget": (), + + # class PySide2.QtWidgets.QDoubleSpinBox: + "QDoubleSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QDoubleSpinBox.cleanText": (), + "QDoubleSpinBox.decimals": (), + "QDoubleSpinBox.fixup": ('str',), + "QDoubleSpinBox.maximum": (), + "QDoubleSpinBox.minimum": (), + "QDoubleSpinBox.prefix": (), + "QDoubleSpinBox.setDecimals": ('int',), + "QDoubleSpinBox.setMaximum": ('float',), + "QDoubleSpinBox.setMinimum": ('float',), + "QDoubleSpinBox.setPrefix": ('str',), + "QDoubleSpinBox.setRange": ('float', 'float'), + "QDoubleSpinBox.setSingleStep": ('float',), + "QDoubleSpinBox.setSuffix": ('str',), + "QDoubleSpinBox.setValue": ('float',), + "QDoubleSpinBox.singleStep": (), + "QDoubleSpinBox.suffix": (), + "QDoubleSpinBox.textFromValue": ('float',), + "QDoubleSpinBox.validate": ('str', 'int'), + "QDoubleSpinBox.value": (), + "QDoubleSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QErrorMessage: + "QErrorMessage.__init__": ('PySide2.QtWidgets.QWidget',), + "QErrorMessage.changeEvent": ('PySide2.QtCore.QEvent',), + "QErrorMessage.done": ('int',), + "QErrorMessage.qtHandler": (), + "QErrorMessage.showMessage": [('str',), ('str', 'str')], + + # class PySide2.QtWidgets.QFileDialog: + "QFileDialog.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str')], + "QFileDialog.accept": (), + "QFileDialog.acceptMode": (), + "QFileDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFileDialog.confirmOverwrite": (), + "QFileDialog.defaultSuffix": (), + "QFileDialog.directory": (), + "QFileDialog.directoryUrl": (), + "QFileDialog.done": ('int',), + "QFileDialog.fileMode": (), + "QFileDialog.filter": (), + "QFileDialog.getExistingDirectory": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'Options'), + "QFileDialog.getExistingDirectoryUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'Options', 'PySide2.support.signature.typing.List'), + "QFileDialog.getOpenFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getOpenFileNames": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getOpenFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'PySide2.support.signature.typing.List'), + "QFileDialog.getOpenFileUrls": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'PySide2.support.signature.typing.List'), + "QFileDialog.getSaveFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getSaveFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'PySide2.support.signature.typing.List'), + "QFileDialog.history": (), + "QFileDialog.iconProvider": (), + "QFileDialog.isNameFilterDetailsVisible": (), + "QFileDialog.isReadOnly": (), + "QFileDialog.itemDelegate": (), + "QFileDialog.labelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel',), + "QFileDialog.mimeTypeFilters": (), + "QFileDialog.nameFilters": (), + "QFileDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFileDialog.options": (), + "QFileDialog.proxyModel": (), + "QFileDialog.resolveSymlinks": (), + "QFileDialog.restoreState": ('PySide2.QtCore.QByteArray',), + "QFileDialog.saveState": (), + "QFileDialog.selectFile": ('str',), + "QFileDialog.selectMimeTypeFilter": ('str',), + "QFileDialog.selectNameFilter": ('str',), + "QFileDialog.selectUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.selectedFiles": (), + "QFileDialog.selectedNameFilter": (), + "QFileDialog.selectedUrls": (), + "QFileDialog.setAcceptMode": ('PySide2.QtWidgets.QFileDialog.AcceptMode',), + "QFileDialog.setConfirmOverwrite": ('bool',), + "QFileDialog.setDefaultSuffix": ('str',), + "QFileDialog.setDirectory": [('PySide2.QtCore.QDir',), ('str',)], + "QFileDialog.setDirectoryUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.setFileMode": ('PySide2.QtWidgets.QFileDialog.FileMode',), + "QFileDialog.setFilter": ('Filters',), + "QFileDialog.setHistory": ('PySide2.support.signature.typing.List',), + "QFileDialog.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileDialog.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QFileDialog.setLabelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel', 'str'), + "QFileDialog.setMimeTypeFilters": ('PySide2.support.signature.typing.List',), + "QFileDialog.setNameFilter": ('str',), + "QFileDialog.setNameFilterDetailsVisible": ('bool',), + "QFileDialog.setNameFilters": ('PySide2.support.signature.typing.List',), + "QFileDialog.setOption": ('PySide2.QtWidgets.QFileDialog.Option', 'bool'), + "QFileDialog.setOptions": ('Options',), + "QFileDialog.setProxyModel": ('PySide2.QtCore.QAbstractProxyModel',), + "QFileDialog.setReadOnly": ('bool',), + "QFileDialog.setResolveSymlinks": ('bool',), + "QFileDialog.setSidebarUrls": ('list',), + "QFileDialog.setSupportedSchemes": ('PySide2.support.signature.typing.List',), + "QFileDialog.setViewMode": ('PySide2.QtWidgets.QFileDialog.ViewMode',), + "QFileDialog.setVisible": ('bool',), + "QFileDialog.sidebarUrls": (), + "QFileDialog.supportedSchemes": (), + "QFileDialog.testOption": ('PySide2.QtWidgets.QFileDialog.Option',), + "QFileDialog.viewMode": (), + + # class PySide2.QtWidgets.QFileIconProvider: + "QFileIconProvider.__init__": (), + "QFileIconProvider.icon": [('PySide2.QtCore.QFileInfo',), ('PySide2.QtWidgets.QFileIconProvider.IconType',)], + "QFileIconProvider.options": (), + "QFileIconProvider.setOptions": ('Options',), + "QFileIconProvider.type": ('PySide2.QtCore.QFileInfo',), + + # class PySide2.QtWidgets.QFileSystemModel: + "QFileSystemModel.__init__": ('PySide2.QtCore.QObject',), + "QFileSystemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QFileSystemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.event": ('PySide2.QtCore.QEvent',), + "QFileSystemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filter": (), + "QFileSystemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QFileSystemModel.iconProvider": (), + "QFileSystemModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QFileSystemModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.isReadOnly": (), + "QFileSystemModel.lastModified": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.mimeData": ('PySide2.support.signature.typing.List',), + "QFileSystemModel.mimeTypes": (), + "QFileSystemModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QFileSystemModel.myComputer": ('int',), + "QFileSystemModel.nameFilterDisables": (), + "QFileSystemModel.nameFilters": (), + "QFileSystemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QFileSystemModel.remove": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.resolveSymlinks": (), + "QFileSystemModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.rootDirectory": (), + "QFileSystemModel.rootPath": (), + "QFileSystemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QFileSystemModel.setFilter": ('Filters',), + "QFileSystemModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileSystemModel.setNameFilterDisables": ('bool',), + "QFileSystemModel.setNameFilters": ('PySide2.support.signature.typing.List',), + "QFileSystemModel.setReadOnly": ('bool',), + "QFileSystemModel.setResolveSymlinks": ('bool',), + "QFileSystemModel.setRootPath": ('str',), + "QFileSystemModel.size": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QFileSystemModel.supportedDropActions": (), + "QFileSystemModel.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QFileSystemModel.type": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtWidgets.QFocusFrame: + "QFocusFrame.__init__": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.event": ('PySide2.QtCore.QEvent',), + "QFocusFrame.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFocusFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QFocusFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFocusFrame.setWidget": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.widget": (), + + # class PySide2.QtWidgets.QFontComboBox: + "QFontComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QFontComboBox.currentFont": (), + "QFontComboBox.event": ('PySide2.QtCore.QEvent',), + "QFontComboBox.fontFilters": (), + "QFontComboBox.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontComboBox.setFontFilters": ('FontFilters',), + "QFontComboBox.setWritingSystem": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontComboBox.sizeHint": (), + "QFontComboBox.writingSystem": (), + + # class PySide2.QtWidgets.QFontDialog: + "QFontDialog.__init__": [('PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QFontDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFontDialog.currentFont": (), + "QFontDialog.done": ('int',), + "QFontDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFontDialog.getFont": [('bool', 'PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget', 'str', 'FontDialogOptions'), ('bool', 'PySide2.QtWidgets.QWidget')], + "QFontDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFontDialog.options": (), + "QFontDialog.selectedFont": (), + "QFontDialog.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontDialog.setOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption', 'bool'), + "QFontDialog.setOptions": ('FontDialogOptions',), + "QFontDialog.setVisible": ('bool',), + "QFontDialog.testOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption',), + + # class PySide2.QtWidgets.QFormLayout: + "QFormLayout.__init__": ('PySide2.QtWidgets.QWidget',), + "QFormLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QFormLayout.addRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QLayout'), ('str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.count": (), + "QFormLayout.expandingDirections": (), + "QFormLayout.fieldGrowthPolicy": (), + "QFormLayout.formAlignment": (), + "QFormLayout.getItemPosition": ('int', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getLayoutPosition": ('PySide2.QtWidgets.QLayout', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getWidgetPosition": ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.hasHeightForWidth": (), + "QFormLayout.heightForWidth": ('int',), + "QFormLayout.horizontalSpacing": (), + "QFormLayout.insertRow": [('int', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('int', 'str', 'PySide2.QtWidgets.QLayout'), ('int', 'str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.invalidate": (), + "QFormLayout.itemAt": [('int',), ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole')], + "QFormLayout.labelAlignment": (), + "QFormLayout.labelForField": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QFormLayout.minimumSize": (), + "QFormLayout.rowCount": (), + "QFormLayout.rowWrapPolicy": (), + "QFormLayout.setFieldGrowthPolicy": ('PySide2.QtWidgets.QFormLayout.FieldGrowthPolicy',), + "QFormLayout.setFormAlignment": ('Alignment',), + "QFormLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QFormLayout.setHorizontalSpacing": ('int',), + "QFormLayout.setItem": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayoutItem'), + "QFormLayout.setLabelAlignment": ('Alignment',), + "QFormLayout.setLayout": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayout'), + "QFormLayout.setRowWrapPolicy": ('PySide2.QtWidgets.QFormLayout.RowWrapPolicy',), + "QFormLayout.setSpacing": ('int',), + "QFormLayout.setVerticalSpacing": ('int',), + "QFormLayout.setWidget": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QWidget'), + "QFormLayout.sizeHint": (), + "QFormLayout.spacing": (), + "QFormLayout.takeAt": ('int',), + "QFormLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QFrame: + "QFrame.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QFrame.changeEvent": ('PySide2.QtCore.QEvent',), + "QFrame.drawFrame": ('PySide2.QtGui.QPainter',), + "QFrame.event": ('PySide2.QtCore.QEvent',), + "QFrame.frameRect": (), + "QFrame.frameShadow": (), + "QFrame.frameShape": (), + "QFrame.frameStyle": (), + "QFrame.frameWidth": (), + "QFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QFrame.lineWidth": (), + "QFrame.midLineWidth": (), + "QFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFrame.setFrameRect": ('PySide2.QtCore.QRect',), + "QFrame.setFrameShadow": ('PySide2.QtWidgets.QFrame.Shadow',), + "QFrame.setFrameShape": ('PySide2.QtWidgets.QFrame.Shape',), + "QFrame.setFrameStyle": ('int',), + "QFrame.setLineWidth": ('int',), + "QFrame.setMidLineWidth": ('int',), + "QFrame.sizeHint": (), + + # class PySide2.QtWidgets.QGesture: + "QGesture.__init__": ('PySide2.QtCore.QObject',), + "QGesture.gestureCancelPolicy": (), + "QGesture.gestureType": (), + "QGesture.hasHotSpot": (), + "QGesture.hotSpot": (), + "QGesture.setGestureCancelPolicy": ('PySide2.QtWidgets.QGesture.GestureCancelPolicy',), + "QGesture.setHotSpot": ('PySide2.QtCore.QPointF',), + "QGesture.state": (), + "QGesture.unsetHotSpot": (), + + # class PySide2.QtWidgets.QGestureEvent: + "QGestureEvent.__init__": ('list',), + "QGestureEvent.accept": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.activeGestures": (), + "QGestureEvent.canceledGestures": (), + "QGestureEvent.gesture": ('PySide2.QtCore.Qt.GestureType',), + "QGestureEvent.gestures": (), + "QGestureEvent.ignore": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.isAccepted": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.mapToGraphicsScene": ('PySide2.QtCore.QPointF',), + "QGestureEvent.setAccepted": [('PySide2.QtCore.Qt.GestureType', 'bool'), ('PySide2.QtWidgets.QGesture', 'bool'), ('bool',)], + "QGestureEvent.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGestureEvent.widget": (), + + # class PySide2.QtWidgets.QGestureRecognizer: + "QGestureRecognizer.__init__": (), + "QGestureRecognizer.create": ('PySide2.QtCore.QObject',), + "QGestureRecognizer.recognize": ('PySide2.QtWidgets.QGesture', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGestureRecognizer.registerRecognizer": ('PySide2.QtWidgets.QGestureRecognizer',), + "QGestureRecognizer.reset": ('PySide2.QtWidgets.QGesture',), + "QGestureRecognizer.unregisterRecognizer": ('PySide2.QtCore.Qt.GestureType',), + + # class PySide2.QtWidgets.QGraphicsAnchor: + "QGraphicsAnchor.setSpacing": ('float',), + "QGraphicsAnchor.setSizePolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QGraphicsAnchor.sizePolicy": (), + "QGraphicsAnchor.spacing": (), + "QGraphicsAnchor.unsetSpacing": (), + + # class PySide2.QtWidgets.QGraphicsAnchorLayout: + "QGraphicsAnchorLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsAnchorLayout.addAnchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.addAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'Orientations'), + "QGraphicsAnchorLayout.addCornerAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner'), + "QGraphicsAnchorLayout.anchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.count": (), + "QGraphicsAnchorLayout.horizontalSpacing": (), + "QGraphicsAnchorLayout.invalidate": (), + "QGraphicsAnchorLayout.itemAt": ('int',), + "QGraphicsAnchorLayout.removeAt": ('int',), + "QGraphicsAnchorLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsAnchorLayout.setHorizontalSpacing": ('float',), + "QGraphicsAnchorLayout.setSpacing": ('float',), + "QGraphicsAnchorLayout.setVerticalSpacing": ('float',), + "QGraphicsAnchorLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsAnchorLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsBlurEffect: + "QGraphicsBlurEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsBlurEffect.blurHints": (), + "QGraphicsBlurEffect.blurRadius": (), + "QGraphicsBlurEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsBlurEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsBlurEffect.setBlurHints": ('BlurHints',), + "QGraphicsBlurEffect.setBlurRadius": ('float',), + + # class PySide2.QtWidgets.QGraphicsColorizeEffect: + "QGraphicsColorizeEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsColorizeEffect.color": (), + "QGraphicsColorizeEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsColorizeEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsColorizeEffect.setStrength": ('float',), + "QGraphicsColorizeEffect.strength": (), + + # class PySide2.QtWidgets.QGraphicsDropShadowEffect: + "QGraphicsDropShadowEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsDropShadowEffect.blurRadius": (), + "QGraphicsDropShadowEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsDropShadowEffect.color": (), + "QGraphicsDropShadowEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsDropShadowEffect.offset": (), + "QGraphicsDropShadowEffect.setBlurRadius": ('float',), + "QGraphicsDropShadowEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsDropShadowEffect.setOffset": [('PySide2.QtCore.QPointF',), ('float',), ('float', 'float')], + "QGraphicsDropShadowEffect.setXOffset": ('float',), + "QGraphicsDropShadowEffect.setYOffset": ('float',), + "QGraphicsDropShadowEffect.xOffset": (), + "QGraphicsDropShadowEffect.yOffset": (), + + # class PySide2.QtWidgets.QGraphicsEffect: + "QGraphicsEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsEffect.boundingRect": (), + "QGraphicsEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.drawSource": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.isEnabled": (), + "QGraphicsEffect.setEnabled": ('bool',), + "QGraphicsEffect.sourceBoundingRect": ('PySide2.QtCore.Qt.CoordinateSystem',), + "QGraphicsEffect.sourceChanged": ('ChangeFlags',), + "QGraphicsEffect.sourceIsPixmap": (), + "QGraphicsEffect.sourcePixmap": ('PySide2.QtCore.Qt.CoordinateSystem', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QGraphicsEffect.PixmapPadMode'), + "QGraphicsEffect.update": (), + "QGraphicsEffect.updateBoundingRect": (), + + # class PySide2.QtWidgets.QGraphicsEllipseItem: + "QGraphicsEllipseItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsEllipseItem.boundingRect": (), + "QGraphicsEllipseItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsEllipseItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsEllipseItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsEllipseItem.opaqueArea": (), + "QGraphicsEllipseItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsEllipseItem.rect": (), + "QGraphicsEllipseItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsEllipseItem.setSpanAngle": ('int',), + "QGraphicsEllipseItem.setStartAngle": ('int',), + "QGraphicsEllipseItem.shape": (), + "QGraphicsEllipseItem.spanAngle": (), + "QGraphicsEllipseItem.startAngle": (), + "QGraphicsEllipseItem.type": (), + + # class PySide2.QtWidgets.QGraphicsGridLayout: + "QGraphicsGridLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.addItem": [('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'int', 'int', 'Alignment')], + "QGraphicsGridLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.columnAlignment": ('int',), + "QGraphicsGridLayout.columnCount": (), + "QGraphicsGridLayout.columnMaximumWidth": ('int',), + "QGraphicsGridLayout.columnMinimumWidth": ('int',), + "QGraphicsGridLayout.columnPreferredWidth": ('int',), + "QGraphicsGridLayout.columnSpacing": ('int',), + "QGraphicsGridLayout.columnStretchFactor": ('int',), + "QGraphicsGridLayout.count": (), + "QGraphicsGridLayout.horizontalSpacing": (), + "QGraphicsGridLayout.invalidate": (), + "QGraphicsGridLayout.itemAt": [('int',), ('int', 'int')], + "QGraphicsGridLayout.removeAt": ('int',), + "QGraphicsGridLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.rowAlignment": ('int',), + "QGraphicsGridLayout.rowCount": (), + "QGraphicsGridLayout.rowMaximumHeight": ('int',), + "QGraphicsGridLayout.rowMinimumHeight": ('int',), + "QGraphicsGridLayout.rowPreferredHeight": ('int',), + "QGraphicsGridLayout.rowSpacing": ('int',), + "QGraphicsGridLayout.rowStretchFactor": ('int',), + "QGraphicsGridLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'Alignment'), + "QGraphicsGridLayout.setColumnAlignment": ('int', 'Alignment'), + "QGraphicsGridLayout.setColumnFixedWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMaximumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMinimumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnPreferredWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnSpacing": ('int', 'float'), + "QGraphicsGridLayout.setColumnStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsGridLayout.setHorizontalSpacing": ('float',), + "QGraphicsGridLayout.setRowAlignment": ('int', 'Alignment'), + "QGraphicsGridLayout.setRowFixedHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMaximumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMinimumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowPreferredHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowSpacing": ('int', 'float'), + "QGraphicsGridLayout.setRowStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setSpacing": ('float',), + "QGraphicsGridLayout.setVerticalSpacing": ('float',), + "QGraphicsGridLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsItem: + "QGraphicsItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.acceptDrops": (), + "QGraphicsItem.acceptHoverEvents": (), + "QGraphicsItem.acceptTouchEvents": (), + "QGraphicsItem.acceptedMouseButtons": (), + "QGraphicsItem.addToIndex": (), + "QGraphicsItem.advance": ('int',), + "QGraphicsItem.boundingRect": (), + "QGraphicsItem.boundingRegion": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.boundingRegionGranularity": (), + "QGraphicsItem.cacheMode": (), + "QGraphicsItem.childItems": (), + "QGraphicsItem.childrenBoundingRect": (), + "QGraphicsItem.clearFocus": (), + "QGraphicsItem.clipPath": (), + "QGraphicsItem.collidesWithItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidesWithPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidingItems": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsItem.commonAncestorItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsItem.cursor": (), + "QGraphicsItem.data": ('int',), + "QGraphicsItem.deviceTransform": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.effectiveOpacity": (), + "QGraphicsItem.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsItem.filtersChildEvents": (), + "QGraphicsItem.flags": (), + "QGraphicsItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusItem": (), + "QGraphicsItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusProxy": (), + "QGraphicsItem.focusScopeItem": (), + "QGraphicsItem.grabKeyboard": (), + "QGraphicsItem.grabMouse": (), + "QGraphicsItem.graphicsEffect": (), + "QGraphicsItem.group": (), + "QGraphicsItem.handlesChildEvents": (), + "QGraphicsItem.hasCursor": (), + "QGraphicsItem.hasFocus": (), + "QGraphicsItem.hide": (), + "QGraphicsItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsItem.inputMethodHints": (), + "QGraphicsItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsItem.installSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isActive": (), + "QGraphicsItem.isAncestorOf": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isBlockedByModalPanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isClipped": (), + "QGraphicsItem.isEnabled": (), + "QGraphicsItem.isObscured": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isPanel": (), + "QGraphicsItem.isSelected": (), + "QGraphicsItem.isUnderMouse": (), + "QGraphicsItem.isVisible": (), + "QGraphicsItem.isVisibleTo": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isWidget": (), + "QGraphicsItem.isWindow": (), + "QGraphicsItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'PySide2.support.signature.typing.Any'), + "QGraphicsItem.itemTransform": ('PySide2.QtWidgets.QGraphicsItem', 'bool'), + "QGraphicsItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.mapFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapToParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.matrix": (), + "QGraphicsItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.moveBy": ('float', 'float'), + "QGraphicsItem.opacity": (), + "QGraphicsItem.opaqueArea": (), + "QGraphicsItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItem.panel": (), + "QGraphicsItem.panelModality": (), + "QGraphicsItem.parentItem": (), + "QGraphicsItem.parentObject": (), + "QGraphicsItem.parentWidget": (), + "QGraphicsItem.pos": (), + "QGraphicsItem.prepareGeometryChange": (), + "QGraphicsItem.removeFromIndex": (), + "QGraphicsItem.removeSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.resetMatrix": (), + "QGraphicsItem.resetTransform": (), + "QGraphicsItem.rotation": (), + "QGraphicsItem.scale": (), + "QGraphicsItem.scene": (), + "QGraphicsItem.sceneBoundingRect": (), + "QGraphicsItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsItem.sceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsItem.sceneMatrix": (), + "QGraphicsItem.scenePos": (), + "QGraphicsItem.sceneTransform": (), + "QGraphicsItem.scroll": ('float', 'float', 'PySide2.QtCore.QRectF'), + "QGraphicsItem.setAcceptDrops": ('bool',), + "QGraphicsItem.setAcceptHoverEvents": ('bool',), + "QGraphicsItem.setAcceptTouchEvents": ('bool',), + "QGraphicsItem.setAcceptedMouseButtons": ('MouseButtons',), + "QGraphicsItem.setActive": ('bool',), + "QGraphicsItem.setBoundingRegionGranularity": ('float',), + "QGraphicsItem.setCacheMode": ('PySide2.QtWidgets.QGraphicsItem.CacheMode', 'PySide2.QtCore.QSize'), + "QGraphicsItem.setCursor": ('PySide2.QtGui.QCursor',), + "QGraphicsItem.setData": ('int', 'PySide2.support.signature.typing.Any'), + "QGraphicsItem.setEnabled": ('bool',), + "QGraphicsItem.setFiltersChildEvents": ('bool',), + "QGraphicsItem.setFlag": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemFlag', 'bool'), + "QGraphicsItem.setFlags": ('GraphicsItemFlags',), + "QGraphicsItem.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsItem.setFocusProxy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QGraphicsItem.setGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsItem.setHandlesChildEvents": ('bool',), + "QGraphicsItem.setInputMethodHints": ('InputMethodHints',), + "QGraphicsItem.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsItem.setOpacity": ('float',), + "QGraphicsItem.setPanelModality": ('PySide2.QtWidgets.QGraphicsItem.PanelModality',), + "QGraphicsItem.setParentItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setPos": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setRotation": ('float',), + "QGraphicsItem.setScale": ('float',), + "QGraphicsItem.setSelected": ('bool',), + "QGraphicsItem.setToolTip": ('str',), + "QGraphicsItem.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsItem.setTransformOriginPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setTransformations": ('list',), + "QGraphicsItem.setVisible": ('bool',), + "QGraphicsItem.setX": ('float',), + "QGraphicsItem.setY": ('float',), + "QGraphicsItem.setZValue": ('float',), + "QGraphicsItem.shape": (), + "QGraphicsItem.show": (), + "QGraphicsItem.stackBefore": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.toGraphicsObject": [], + "QGraphicsItem.toolTip": (), + "QGraphicsItem.topLevelItem": (), + "QGraphicsItem.topLevelWidget": (), + "QGraphicsItem.transform": (), + "QGraphicsItem.transformOriginPoint": (), + "QGraphicsItem.transformations": (), + "QGraphicsItem.type": (), + "QGraphicsItem.ungrabKeyboard": (), + "QGraphicsItem.ungrabMouse": (), + "QGraphicsItem.unsetCursor": (), + "QGraphicsItem.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.updateMicroFocus": (), + "QGraphicsItem.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsItem.window": (), + "QGraphicsItem.x": (), + "QGraphicsItem.y": (), + "QGraphicsItem.zValue": (), + + # class PySide2.QtWidgets.QGraphicsItemAnimation: + "QGraphicsItemAnimation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsItemAnimation.afterAnimationStep": ('float',), + "QGraphicsItemAnimation.beforeAnimationStep": ('float',), + "QGraphicsItemAnimation.clear": (), + "QGraphicsItemAnimation.horizontalScaleAt": ('float',), + "QGraphicsItemAnimation.horizontalShearAt": ('float',), + "QGraphicsItemAnimation.item": (), + "QGraphicsItemAnimation.matrixAt": ('float',), + "QGraphicsItemAnimation.posAt": ('float',), + "QGraphicsItemAnimation.posList": (), + "QGraphicsItemAnimation.reset": (), + "QGraphicsItemAnimation.rotationAt": ('float',), + "QGraphicsItemAnimation.rotationList": (), + "QGraphicsItemAnimation.scaleList": (), + "QGraphicsItemAnimation.setItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemAnimation.setPosAt": ('float', 'PySide2.QtCore.QPointF'), + "QGraphicsItemAnimation.setRotationAt": ('float', 'float'), + "QGraphicsItemAnimation.setScaleAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setShearAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setStep": ('float',), + "QGraphicsItemAnimation.setTimeLine": ('PySide2.QtCore.QTimeLine',), + "QGraphicsItemAnimation.setTranslationAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.shearList": (), + "QGraphicsItemAnimation.timeLine": (), + "QGraphicsItemAnimation.translationList": (), + "QGraphicsItemAnimation.verticalScaleAt": ('float',), + "QGraphicsItemAnimation.verticalShearAt": ('float',), + "QGraphicsItemAnimation.xTranslationAt": ('float',), + "QGraphicsItemAnimation.yTranslationAt": ('float',), + + # class PySide2.QtWidgets.QGraphicsItemGroup: + "QGraphicsItemGroup.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.addToGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.boundingRect": (), + "QGraphicsItemGroup.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.opaqueArea": (), + "QGraphicsItemGroup.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItemGroup.removeFromGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.type": (), + + # class PySide2.QtWidgets.QGraphicsLayout: + "QGraphicsLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.activate": (), + "QGraphicsLayout.addChildLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.count": (), + "QGraphicsLayout.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.instantInvalidatePropagation": (), + "QGraphicsLayout.invalidate": (), + "QGraphicsLayout.isActivated": (), + "QGraphicsLayout.itemAt": ('int',), + "QGraphicsLayout.removeAt": ('int',), + "QGraphicsLayout.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.setInstantInvalidatePropagation": ('bool',), + "QGraphicsLayout.updateGeometry": (), + "QGraphicsLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QGraphicsLayoutItem: + "QGraphicsLayoutItem.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'bool'), + "QGraphicsLayoutItem.contentsRect": (), + "QGraphicsLayoutItem.effectiveSizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.geometry": (), + "QGraphicsLayoutItem.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayoutItem.graphicsItem": (), + "QGraphicsLayoutItem.isLayout": (), + "QGraphicsLayoutItem.maximumHeight": (), + "QGraphicsLayoutItem.maximumSize": (), + "QGraphicsLayoutItem.maximumWidth": (), + "QGraphicsLayoutItem.minimumHeight": (), + "QGraphicsLayoutItem.minimumSize": (), + "QGraphicsLayoutItem.minimumWidth": (), + "QGraphicsLayoutItem.ownedByLayout": (), + "QGraphicsLayoutItem.parentLayoutItem": (), + "QGraphicsLayoutItem.preferredHeight": (), + "QGraphicsLayoutItem.preferredSize": (), + "QGraphicsLayoutItem.preferredWidth": (), + "QGraphicsLayoutItem.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLayoutItem.setGraphicsItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLayoutItem.setMaximumHeight": ('float',), + "QGraphicsLayoutItem.setMaximumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMaximumWidth": ('float',), + "QGraphicsLayoutItem.setMinimumHeight": ('float',), + "QGraphicsLayoutItem.setMinimumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMinimumWidth": ('float',), + "QGraphicsLayoutItem.setOwnedByLayout": ('bool',), + "QGraphicsLayoutItem.setParentLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayoutItem.setPreferredHeight": ('float',), + "QGraphicsLayoutItem.setPreferredSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setPreferredWidth": ('float',), + "QGraphicsLayoutItem.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QGraphicsLayoutItem.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.sizePolicy": (), + "QGraphicsLayoutItem.updateGeometry": (), + + # class PySide2.QtWidgets.QGraphicsLineItem: + "QGraphicsLineItem.__init__": [('PySide2.QtCore.QLineF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsLineItem.boundingRect": (), + "QGraphicsLineItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsLineItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsLineItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLineItem.line": (), + "QGraphicsLineItem.opaqueArea": (), + "QGraphicsLineItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsLineItem.pen": (), + "QGraphicsLineItem.setLine": [('PySide2.QtCore.QLineF',), ('float', 'float', 'float', 'float')], + "QGraphicsLineItem.setPen": ('PySide2.QtGui.QPen',), + "QGraphicsLineItem.shape": (), + "QGraphicsLineItem.type": (), + + # class PySide2.QtWidgets.QGraphicsLinearLayout: + "QGraphicsLinearLayout.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QGraphicsLayoutItem'), ('PySide2.QtWidgets.QGraphicsLayoutItem',)], + "QGraphicsLinearLayout.addItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.addStretch": ('int',), + "QGraphicsLinearLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.count": (), + "QGraphicsLinearLayout.dump": ('int',), + "QGraphicsLinearLayout.insertItem": ('int', 'PySide2.QtWidgets.QGraphicsLayoutItem'), + "QGraphicsLinearLayout.insertStretch": ('int', 'int'), + "QGraphicsLinearLayout.invalidate": (), + "QGraphicsLinearLayout.itemAt": ('int',), + "QGraphicsLinearLayout.itemSpacing": ('int',), + "QGraphicsLinearLayout.orientation": (), + "QGraphicsLinearLayout.removeAt": ('int',), + "QGraphicsLinearLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'Alignment'), + "QGraphicsLinearLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLinearLayout.setItemSpacing": ('int', 'float'), + "QGraphicsLinearLayout.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsLinearLayout.setSpacing": ('float',), + "QGraphicsLinearLayout.setStretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int'), + "QGraphicsLinearLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLinearLayout.spacing": (), + "QGraphicsLinearLayout.stretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + + # class PySide2.QtWidgets.QGraphicsObject: + "QGraphicsObject.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsObject.event": ('PySide2.QtCore.QEvent',), + "QGraphicsObject.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'GestureFlags'), + "QGraphicsObject.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QGraphicsObject.updateMicroFocus": (), + + # class PySide2.QtWidgets.QGraphicsOpacityEffect: + "QGraphicsOpacityEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsOpacityEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsOpacityEffect.opacity": (), + "QGraphicsOpacityEffect.opacityMask": (), + "QGraphicsOpacityEffect.setOpacity": ('float',), + "QGraphicsOpacityEffect.setOpacityMask": ('PySide2.QtGui.QBrush',), + + # class PySide2.QtWidgets.QGraphicsPathItem: + "QGraphicsPathItem.__init__": [('PySide2.QtGui.QPainterPath', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPathItem.boundingRect": (), + "QGraphicsPathItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPathItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsPathItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPathItem.opaqueArea": (), + "QGraphicsPathItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPathItem.path": (), + "QGraphicsPathItem.setPath": ('PySide2.QtGui.QPainterPath',), + "QGraphicsPathItem.shape": (), + "QGraphicsPathItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPixmapItem: + "QGraphicsPixmapItem.__init__": [('PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPixmapItem.boundingRect": (), + "QGraphicsPixmapItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPixmapItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsPixmapItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPixmapItem.offset": (), + "QGraphicsPixmapItem.opaqueArea": (), + "QGraphicsPixmapItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPixmapItem.pixmap": (), + "QGraphicsPixmapItem.setOffset": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsPixmapItem.setPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsPixmapItem.setShapeMode": ('PySide2.QtWidgets.QGraphicsPixmapItem.ShapeMode',), + "QGraphicsPixmapItem.setTransformationMode": ('PySide2.QtCore.Qt.TransformationMode',), + "QGraphicsPixmapItem.shape": (), + "QGraphicsPixmapItem.shapeMode": (), + "QGraphicsPixmapItem.transformationMode": (), + "QGraphicsPixmapItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPolygonItem: + "QGraphicsPolygonItem.__init__": [('PySide2.QtGui.QPolygonF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPolygonItem.boundingRect": (), + "QGraphicsPolygonItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPolygonItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsPolygonItem.fillRule": (), + "QGraphicsPolygonItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPolygonItem.opaqueArea": (), + "QGraphicsPolygonItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPolygonItem.polygon": (), + "QGraphicsPolygonItem.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QGraphicsPolygonItem.setPolygon": ('PySide2.QtGui.QPolygonF',), + "QGraphicsPolygonItem.shape": (), + "QGraphicsPolygonItem.type": (), + + # class PySide2.QtWidgets.QGraphicsProxyWidget: + "QGraphicsProxyWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'WindowFlags'), + "QGraphicsProxyWidget.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsProxyWidget.createProxyForChildWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsProxyWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.focusNextPrevChild": ('bool',), + "QGraphicsProxyWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsProxyWidget.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsProxyWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsProxyWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'PySide2.support.signature.typing.Any'), + "QGraphicsProxyWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.newProxyWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsProxyWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsProxyWidget.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsProxyWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsProxyWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsProxyWidget.subWidgetRect": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.type": (), + "QGraphicsProxyWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsProxyWidget.widget": (), + + # class PySide2.QtWidgets.QGraphicsRectItem: + "QGraphicsRectItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsRectItem.boundingRect": (), + "QGraphicsRectItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsRectItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsRectItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsRectItem.opaqueArea": (), + "QGraphicsRectItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsRectItem.rect": (), + "QGraphicsRectItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsRectItem.shape": (), + "QGraphicsRectItem.type": (), + + # class PySide2.QtWidgets.QGraphicsRotation: + "QGraphicsRotation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsRotation.angle": (), + "QGraphicsRotation.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsRotation.axis": (), + "QGraphicsRotation.origin": (), + "QGraphicsRotation.setAngle": ('float',), + "QGraphicsRotation.setAxis": [('PySide2.QtCore.Qt.Axis',), ('PySide2.QtGui.QVector3D',)], + "QGraphicsRotation.setOrigin": ('PySide2.QtGui.QVector3D',), + + # class PySide2.QtWidgets.QGraphicsScale: + "QGraphicsScale.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsScale.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsScale.origin": (), + "QGraphicsScale.setOrigin": ('PySide2.QtGui.QVector3D',), + "QGraphicsScale.setXScale": ('float',), + "QGraphicsScale.setYScale": ('float',), + "QGraphicsScale.setZScale": ('float',), + "QGraphicsScale.xScale": (), + "QGraphicsScale.yScale": (), + "QGraphicsScale.zScale": (), + + # class PySide2.QtWidgets.QGraphicsScene: + "QGraphicsScene.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QObject'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.QObject')], + "QGraphicsScene.activePanel": (), + "QGraphicsScene.activeWindow": (), + "QGraphicsScene.addEllipse": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.addLine": [('PySide2.QtCore.QLineF', 'PySide2.QtGui.QPen'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen')], + "QGraphicsScene.addPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsScene.addPolygon": ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addRect": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addSimpleText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addWidget": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QGraphicsScene.advance": (), + "QGraphicsScene.backgroundBrush": (), + "QGraphicsScene.bspTreeDepth": (), + "QGraphicsScene.clear": (), + "QGraphicsScene.clearFocus": (), + "QGraphicsScene.clearSelection": (), + "QGraphicsScene.collidingItems": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsScene.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsScene.createItemGroup": ('list',), + "QGraphicsScene.destroyItemGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsScene.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.event": ('PySide2.QtCore.QEvent',), + "QGraphicsScene.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.focusItem": (), + "QGraphicsScene.focusNextPrevChild": ('bool',), + "QGraphicsScene.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.font": (), + "QGraphicsScene.foregroundBrush": (), + "QGraphicsScene.hasFocus": (), + "QGraphicsScene.height": (), + "QGraphicsScene.helpEvent": ('PySide2.QtWidgets.QGraphicsSceneHelpEvent',), + "QGraphicsScene.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsScene.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsScene.invalidate": [('PySide2.QtCore.QRectF', 'SceneLayers'), ('float', 'float', 'float', 'float', 'SceneLayers')], + "QGraphicsScene.isActive": (), + "QGraphicsScene.isSortCacheEnabled": (), + "QGraphicsScene.itemAt": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTransform'), ('float', 'float', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemIndexMethod": (), + "QGraphicsScene.items": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemsBoundingRect": (), + "QGraphicsScene.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.minimumRenderSize": (), + "QGraphicsScene.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseGrabberItem": (), + "QGraphicsScene.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.palette": (), + "QGraphicsScene.removeItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.render": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), + "QGraphicsScene.sceneRect": (), + "QGraphicsScene.selectedItems": (), + "QGraphicsScene.selectionArea": (), + "QGraphicsScene.sendEvent": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.setActivePanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.setActiveWindow": ('PySide2.QtWidgets.QGraphicsWidget',), + "QGraphicsScene.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setBspTreeDepth": ('int',), + "QGraphicsScene.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsScene.setFocusItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.FocusReason'), + "QGraphicsScene.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsScene.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setItemIndexMethod": ('PySide2.QtWidgets.QGraphicsScene.ItemIndexMethod',), + "QGraphicsScene.setMinimumRenderSize": ('float',), + "QGraphicsScene.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsScene.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.setSelectionArea": [('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionOperation', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.setSortCacheEnabled": ('bool',), + "QGraphicsScene.setStickyFocus": ('bool',), + "QGraphicsScene.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsScene.stickyFocus": (), + "QGraphicsScene.style": (), + "QGraphicsScene.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.views": (), + "QGraphicsScene.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsScene.width": (), + + # class PySide2.QtWidgets.QGraphicsSceneContextMenuEvent: + "QGraphicsSceneContextMenuEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneContextMenuEvent.modifiers": (), + "QGraphicsSceneContextMenuEvent.pos": (), + "QGraphicsSceneContextMenuEvent.reason": (), + "QGraphicsSceneContextMenuEvent.scenePos": (), + "QGraphicsSceneContextMenuEvent.screenPos": (), + "QGraphicsSceneContextMenuEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneContextMenuEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setReason": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent.Reason',), + "QGraphicsSceneContextMenuEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneDragDropEvent: + "QGraphicsSceneDragDropEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneDragDropEvent.acceptProposedAction": (), + "QGraphicsSceneDragDropEvent.buttons": (), + "QGraphicsSceneDragDropEvent.dropAction": (), + "QGraphicsSceneDragDropEvent.mimeData": (), + "QGraphicsSceneDragDropEvent.modifiers": (), + "QGraphicsSceneDragDropEvent.pos": (), + "QGraphicsSceneDragDropEvent.possibleActions": (), + "QGraphicsSceneDragDropEvent.proposedAction": (), + "QGraphicsSceneDragDropEvent.scenePos": (), + "QGraphicsSceneDragDropEvent.screenPos": (), + "QGraphicsSceneDragDropEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneDragDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneDragDropEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setPossibleActions": ('DropActions',), + "QGraphicsSceneDragDropEvent.setProposedAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneDragDropEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneEvent: + "QGraphicsSceneEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneEvent.widget": (), + + # class PySide2.QtWidgets.QGraphicsSceneHelpEvent: + "QGraphicsSceneHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHelpEvent.scenePos": (), + "QGraphicsSceneHelpEvent.screenPos": (), + "QGraphicsSceneHelpEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHelpEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneHoverEvent: + "QGraphicsSceneHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHoverEvent.lastPos": (), + "QGraphicsSceneHoverEvent.lastScenePos": (), + "QGraphicsSceneHoverEvent.lastScreenPos": (), + "QGraphicsSceneHoverEvent.modifiers": (), + "QGraphicsSceneHoverEvent.pos": (), + "QGraphicsSceneHoverEvent.scenePos": (), + "QGraphicsSceneHoverEvent.screenPos": (), + "QGraphicsSceneHoverEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneHoverEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneHoverEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneMouseEvent: + "QGraphicsSceneMouseEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneMouseEvent.button": (), + "QGraphicsSceneMouseEvent.buttonDownPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScenePos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttons": (), + "QGraphicsSceneMouseEvent.flags": (), + "QGraphicsSceneMouseEvent.lastPos": (), + "QGraphicsSceneMouseEvent.lastScenePos": (), + "QGraphicsSceneMouseEvent.lastScreenPos": (), + "QGraphicsSceneMouseEvent.modifiers": (), + "QGraphicsSceneMouseEvent.pos": (), + "QGraphicsSceneMouseEvent.scenePos": (), + "QGraphicsSceneMouseEvent.screenPos": (), + "QGraphicsSceneMouseEvent.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.setButtonDownPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScenePos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPoint'), + "QGraphicsSceneMouseEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneMouseEvent.setFlags": ('MouseEventFlags',), + "QGraphicsSceneMouseEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneMouseEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setSource": ('PySide2.QtCore.Qt.MouseEventSource',), + "QGraphicsSceneMouseEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneMoveEvent: + "QGraphicsSceneMoveEvent.__init__": (), + "QGraphicsSceneMoveEvent.newPos": (), + "QGraphicsSceneMoveEvent.oldPos": (), + "QGraphicsSceneMoveEvent.setNewPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMoveEvent.setOldPos": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QGraphicsSceneResizeEvent: + "QGraphicsSceneResizeEvent.__init__": (), + "QGraphicsSceneResizeEvent.newSize": (), + "QGraphicsSceneResizeEvent.oldSize": (), + "QGraphicsSceneResizeEvent.setNewSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsSceneResizeEvent.setOldSize": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtWidgets.QGraphicsSceneWheelEvent: + "QGraphicsSceneWheelEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneWheelEvent.buttons": (), + "QGraphicsSceneWheelEvent.delta": (), + "QGraphicsSceneWheelEvent.modifiers": (), + "QGraphicsSceneWheelEvent.orientation": (), + "QGraphicsSceneWheelEvent.pos": (), + "QGraphicsSceneWheelEvent.scenePos": (), + "QGraphicsSceneWheelEvent.screenPos": (), + "QGraphicsSceneWheelEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneWheelEvent.setDelta": ('int',), + "QGraphicsSceneWheelEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneWheelEvent.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsSceneWheelEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSimpleTextItem: + "QGraphicsSimpleTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSimpleTextItem.boundingRect": (), + "QGraphicsSimpleTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsSimpleTextItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsSimpleTextItem.font": (), + "QGraphicsSimpleTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsSimpleTextItem.opaqueArea": (), + "QGraphicsSimpleTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSimpleTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsSimpleTextItem.setText": ('str',), + "QGraphicsSimpleTextItem.shape": (), + "QGraphicsSimpleTextItem.text": (), + "QGraphicsSimpleTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTextItem: + "QGraphicsTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsTextItem.adjustSize": (), + "QGraphicsTextItem.boundingRect": (), + "QGraphicsTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsTextItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsTextItem.defaultTextColor": (), + "QGraphicsTextItem.document": (), + "QGraphicsTextItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.extension": ('PySide2.support.signature.typing.Any',), + "QGraphicsTextItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.font": (), + "QGraphicsTextItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsTextItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsTextItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.opaqueArea": (), + "QGraphicsTextItem.openExternalLinks": (), + "QGraphicsTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsTextItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsTextItem.setDefaultTextColor": ('PySide2.QtGui.QColor',), + "QGraphicsTextItem.setDocument": ('PySide2.QtGui.QTextDocument',), + "QGraphicsTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsTextItem.setHtml": ('str',), + "QGraphicsTextItem.setOpenExternalLinks": ('bool',), + "QGraphicsTextItem.setPlainText": ('str',), + "QGraphicsTextItem.setTabChangesFocus": ('bool',), + "QGraphicsTextItem.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QGraphicsTextItem.setTextInteractionFlags": ('TextInteractionFlags',), + "QGraphicsTextItem.setTextWidth": ('float',), + "QGraphicsTextItem.shape": (), + "QGraphicsTextItem.tabChangesFocus": (), + "QGraphicsTextItem.textCursor": (), + "QGraphicsTextItem.textInteractionFlags": (), + "QGraphicsTextItem.textWidth": (), + "QGraphicsTextItem.toHtml": (), + "QGraphicsTextItem.toPlainText": (), + "QGraphicsTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTransform: + "QGraphicsTransform.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsTransform.update": (), + + # class PySide2.QtWidgets.QGraphicsView: + "QGraphicsView.__init__": [('PySide2.QtWidgets.QGraphicsScene', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QGraphicsView.alignment": (), + "QGraphicsView.backgroundBrush": (), + "QGraphicsView.cacheMode": (), + "QGraphicsView.centerOn": [('PySide2.QtCore.QPointF',), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float')], + "QGraphicsView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QGraphicsView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QGraphicsView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QGraphicsView.dragMode": (), + "QGraphicsView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QGraphicsView.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawItems": ('PySide2.QtGui.QPainter', 'int', 'PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtWidgets.QStyleOptionGraphicsItem'), + "QGraphicsView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QGraphicsView.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('PySide2.QtWidgets.QGraphicsItem', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsView.event": ('PySide2.QtCore.QEvent',), + "QGraphicsView.fitInView": [('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.focusNextPrevChild": ('bool',), + "QGraphicsView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.foregroundBrush": (), + "QGraphicsView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsView.invalidateScene": ('PySide2.QtCore.QRectF', 'SceneLayers'), + "QGraphicsView.isInteractive": (), + "QGraphicsView.isTransformed": (), + "QGraphicsView.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QGraphicsView.items": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ItemSelectionMode')], + "QGraphicsView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsView.mapToScene": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('int', 'int'), ('int', 'int', 'int', 'int')], + "QGraphicsView.matrix": (), + "QGraphicsView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.optimizationFlags": (), + "QGraphicsView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGraphicsView.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.renderHints": (), + "QGraphicsView.resetCachedContent": (), + "QGraphicsView.resetMatrix": (), + "QGraphicsView.resetTransform": (), + "QGraphicsView.resizeAnchor": (), + "QGraphicsView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGraphicsView.rotate": ('float',), + "QGraphicsView.rubberBandRect": (), + "QGraphicsView.rubberBandSelectionMode": (), + "QGraphicsView.scale": ('float', 'float'), + "QGraphicsView.scene": (), + "QGraphicsView.sceneRect": (), + "QGraphicsView.scrollContentsBy": ('int', 'int'), + "QGraphicsView.setAlignment": ('Alignment',), + "QGraphicsView.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setCacheMode": ('CacheMode',), + "QGraphicsView.setDragMode": ('PySide2.QtWidgets.QGraphicsView.DragMode',), + "QGraphicsView.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setInteractive": ('bool',), + "QGraphicsView.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsView.setOptimizationFlag": ('PySide2.QtWidgets.QGraphicsView.OptimizationFlag', 'bool'), + "QGraphicsView.setOptimizationFlags": ('OptimizationFlags',), + "QGraphicsView.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QGraphicsView.setRenderHints": ('RenderHints',), + "QGraphicsView.setResizeAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setRubberBandSelectionMode": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsView.setScene": ('PySide2.QtWidgets.QGraphicsScene',), + "QGraphicsView.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsView.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsView.setTransformationAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setViewportUpdateMode": ('PySide2.QtWidgets.QGraphicsView.ViewportUpdateMode',), + "QGraphicsView.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QGraphicsView.shear": ('float', 'float'), + "QGraphicsView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsView.sizeHint": (), + "QGraphicsView.transform": (), + "QGraphicsView.transformationAnchor": (), + "QGraphicsView.translate": ('float', 'float'), + "QGraphicsView.updateScene": ('list',), + "QGraphicsView.updateSceneRect": ('PySide2.QtCore.QRectF',), + "QGraphicsView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsView.viewportTransform": (), + "QGraphicsView.viewportUpdateMode": (), + "QGraphicsView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QGraphicsWidget: + "QGraphicsWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'WindowFlags'), + "QGraphicsWidget.actions": (), + "QGraphicsWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.addActions": ('list',), + "QGraphicsWidget.adjustSize": (), + "QGraphicsWidget.autoFillBackground": (), + "QGraphicsWidget.boundingRect": (), + "QGraphicsWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.close": (), + "QGraphicsWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QGraphicsWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusNextPrevChild": ('bool',), + "QGraphicsWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusPolicy": (), + "QGraphicsWidget.focusWidget": (), + "QGraphicsWidget.font": (), + "QGraphicsWidget.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.getWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.grabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QGraphicsWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QGraphicsWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QGraphicsWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QGraphicsWidget.isActiveWindow": (), + "QGraphicsWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'PySide2.support.signature.typing.Any'), + "QGraphicsWidget.layout": (), + "QGraphicsWidget.layoutDirection": (), + "QGraphicsWidget.moveEvent": ('PySide2.QtWidgets.QGraphicsSceneMoveEvent',), + "QGraphicsWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.paintWindowFrame": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.palette": (), + "QGraphicsWidget.polishEvent": (), + "QGraphicsWidget.propertyChange": ('str', 'PySide2.support.signature.typing.Any'), + "QGraphicsWidget.rect": (), + "QGraphicsWidget.releaseShortcut": ('int',), + "QGraphicsWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.resize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsWidget.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QGraphicsWidget.setAutoFillBackground": ('bool',), + "QGraphicsWidget.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QGraphicsWidget.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsWidget.setGeometry": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsWidget.setLayout": ('PySide2.QtWidgets.QGraphicsLayout',), + "QGraphicsWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGraphicsWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QGraphicsWidget.setShortcutEnabled": ('int', 'bool'), + "QGraphicsWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsWidget.setTabOrder": ('PySide2.QtWidgets.QGraphicsWidget', 'PySide2.QtWidgets.QGraphicsWidget'), + "QGraphicsWidget.setWindowFlags": ('WindowFlags',), + "QGraphicsWidget.setWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setWindowTitle": ('str',), + "QGraphicsWidget.shape": (), + "QGraphicsWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsWidget.size": (), + "QGraphicsWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsWidget.style": (), + "QGraphicsWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QGraphicsWidget.type": (), + "QGraphicsWidget.ungrabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.unsetLayoutDirection": (), + "QGraphicsWidget.unsetWindowFrameMargins": (), + "QGraphicsWidget.updateGeometry": (), + "QGraphicsWidget.windowFlags": (), + "QGraphicsWidget.windowFrameEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.windowFrameGeometry": (), + "QGraphicsWidget.windowFrameRect": (), + "QGraphicsWidget.windowFrameSectionAt": ('PySide2.QtCore.QPointF',), + "QGraphicsWidget.windowTitle": (), + "QGraphicsWidget.windowType": (), + + # class PySide2.QtWidgets.QGridLayout: + "QGridLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QGridLayout.addItem": [('PySide2.QtWidgets.QLayoutItem',), ('PySide2.QtWidgets.QLayoutItem', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.addLayout": [('PySide2.QtWidgets.QLayout', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QLayout', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.cellRect": ('int', 'int'), + "QGridLayout.columnCount": (), + "QGridLayout.columnMinimumWidth": ('int',), + "QGridLayout.columnStretch": ('int',), + "QGridLayout.count": (), + "QGridLayout.expandingDirections": (), + "QGridLayout.getItemPosition": ('int', 'int', 'int', 'int', 'int'), + "QGridLayout.hasHeightForWidth": (), + "QGridLayout.heightForWidth": ('int',), + "QGridLayout.horizontalSpacing": (), + "QGridLayout.invalidate": (), + "QGridLayout.itemAt": ('int',), + "QGridLayout.itemAtPosition": ('int', 'int'), + "QGridLayout.maximumSize": (), + "QGridLayout.minimumHeightForWidth": ('int',), + "QGridLayout.minimumSize": (), + "QGridLayout.originCorner": (), + "QGridLayout.rowCount": (), + "QGridLayout.rowMinimumHeight": ('int',), + "QGridLayout.rowStretch": ('int',), + "QGridLayout.setColumnMinimumWidth": ('int', 'int'), + "QGridLayout.setColumnStretch": ('int', 'int'), + "QGridLayout.setDefaultPositioning": ('int', 'PySide2.QtCore.Qt.Orientation'), + "QGridLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QGridLayout.setHorizontalSpacing": ('int',), + "QGridLayout.setOriginCorner": ('PySide2.QtCore.Qt.Corner',), + "QGridLayout.setRowMinimumHeight": ('int', 'int'), + "QGridLayout.setRowStretch": ('int', 'int'), + "QGridLayout.setSpacing": ('int',), + "QGridLayout.setVerticalSpacing": ('int',), + "QGridLayout.sizeHint": (), + "QGridLayout.spacing": (), + "QGridLayout.takeAt": ('int',), + "QGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGroupBox: + "QGroupBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QGroupBox.alignment": (), + "QGroupBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QGroupBox.childEvent": ('PySide2.QtCore.QChildEvent',), + "QGroupBox.event": ('PySide2.QtCore.QEvent',), + "QGroupBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGroupBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionGroupBox',), + "QGroupBox.isCheckable": (), + "QGroupBox.isChecked": (), + "QGroupBox.isFlat": (), + "QGroupBox.minimumSizeHint": (), + "QGroupBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGroupBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGroupBox.setAlignment": ('int',), + "QGroupBox.setCheckable": ('bool',), + "QGroupBox.setChecked": ('bool',), + "QGroupBox.setFlat": ('bool',), + "QGroupBox.setTitle": ('str',), + "QGroupBox.title": (), + + # class PySide2.QtWidgets.QHBoxLayout: + "QHBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QHeaderView: + "QHeaderView.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), + "QHeaderView.cascadingSectionResizes": (), + "QHeaderView.count": (), + "QHeaderView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QHeaderView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QHeaderView.defaultAlignment": (), + "QHeaderView.defaultSectionSize": (), + "QHeaderView.doItemsLayout": (), + "QHeaderView.event": ('PySide2.QtCore.QEvent',), + "QHeaderView.headerDataChanged": ('PySide2.QtCore.Qt.Orientation', 'int', 'int'), + "QHeaderView.hiddenSectionCount": (), + "QHeaderView.hideSection": ('int',), + "QHeaderView.highlightSections": (), + "QHeaderView.horizontalOffset": (), + "QHeaderView.indexAt": ('PySide2.QtCore.QPoint',), + "QHeaderView.initStyleOption": [('PySide2.QtWidgets.QStyleOptionFrame',), ('PySide2.QtWidgets.QStyleOptionHeader',)], + "QHeaderView.initialize": (), + "QHeaderView.initializeSections": [(), ('int', 'int')], + "QHeaderView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.isSectionHidden": ('int',), + "QHeaderView.isSortIndicatorShown": (), + "QHeaderView.length": (), + "QHeaderView.logicalIndex": ('int',), + "QHeaderView.logicalIndexAt": [('PySide2.QtCore.QPoint',), ('int',), ('int', 'int')], + "QHeaderView.maximumSectionSize": (), + "QHeaderView.minimumSectionSize": (), + "QHeaderView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QHeaderView.moveSection": ('int', 'int'), + "QHeaderView.offset": (), + "QHeaderView.orientation": (), + "QHeaderView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QHeaderView.paintSection": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int'), + "QHeaderView.reset": (), + "QHeaderView.resetDefaultSectionSize": (), + "QHeaderView.resizeContentsPrecision": (), + "QHeaderView.resizeSection": ('int', 'int'), + "QHeaderView.resizeSections": [(), ('PySide2.QtWidgets.QHeaderView.ResizeMode',)], + "QHeaderView.restoreState": ('PySide2.QtCore.QByteArray',), + "QHeaderView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.saveState": (), + "QHeaderView.scrollContentsBy": ('int', 'int'), + "QHeaderView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QHeaderView.sectionPosition": ('int',), + "QHeaderView.sectionResizeMode": ('int',), + "QHeaderView.sectionSize": ('int',), + "QHeaderView.sectionSizeFromContents": ('int',), + "QHeaderView.sectionSizeHint": ('int',), + "QHeaderView.sectionViewportPosition": ('int',), + "QHeaderView.sectionsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsClickable": (), + "QHeaderView.sectionsHidden": (), + "QHeaderView.sectionsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsMovable": (), + "QHeaderView.sectionsMoved": (), + "QHeaderView.setCascadingSectionResizes": ('bool',), + "QHeaderView.setDefaultAlignment": ('Alignment',), + "QHeaderView.setDefaultSectionSize": ('int',), + "QHeaderView.setHighlightSections": ('bool',), + "QHeaderView.setMaximumSectionSize": ('int',), + "QHeaderView.setMinimumSectionSize": ('int',), + "QHeaderView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QHeaderView.setOffset": ('int',), + "QHeaderView.setOffsetToLastSection": (), + "QHeaderView.setOffsetToSectionPosition": ('int',), + "QHeaderView.setResizeContentsPrecision": ('int',), + "QHeaderView.setSectionHidden": ('int', 'bool'), + "QHeaderView.setSectionResizeMode": [('PySide2.QtWidgets.QHeaderView.ResizeMode',), ('int', 'PySide2.QtWidgets.QHeaderView.ResizeMode')], + "QHeaderView.setSectionsClickable": ('bool',), + "QHeaderView.setSectionsMovable": ('bool',), + "QHeaderView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QHeaderView.setSortIndicator": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QHeaderView.setSortIndicatorShown": ('bool',), + "QHeaderView.setStretchLastSection": ('bool',), + "QHeaderView.setVisible": ('bool',), + "QHeaderView.showSection": ('int',), + "QHeaderView.sizeHint": (), + "QHeaderView.sortIndicatorOrder": (), + "QHeaderView.sortIndicatorSection": (), + "QHeaderView.stretchLastSection": (), + "QHeaderView.stretchSectionCount": (), + "QHeaderView.swapSections": ('int', 'int'), + "QHeaderView.updateGeometries": (), + "QHeaderView.updateSection": ('int',), + "QHeaderView.verticalOffset": (), + "QHeaderView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QHeaderView.visualIndex": ('int',), + "QHeaderView.visualIndexAt": ('int',), + "QHeaderView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QInputDialog: + "QInputDialog.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QInputDialog.cancelButtonText": (), + "QInputDialog.comboBoxItems": (), + "QInputDialog.done": ('int',), + "QInputDialog.doubleDecimals": (), + "QInputDialog.doubleMaximum": (), + "QInputDialog.doubleMinimum": (), + "QInputDialog.doubleValue": (), + "QInputDialog.getDouble": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'float', 'float', 'float', 'int', 'bool', 'WindowFlags'), + "QInputDialog.getInt": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'int', 'int', 'int', 'int', 'bool', 'WindowFlags'), + "QInputDialog.getItem": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.support.signature.typing.List', 'int', 'bool', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.getMultiLineText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.getText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QLineEdit.EchoMode', 'str', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.inputMode": (), + "QInputDialog.intMaximum": (), + "QInputDialog.intMinimum": (), + "QInputDialog.intStep": (), + "QInputDialog.intValue": (), + "QInputDialog.isComboBoxEditable": (), + "QInputDialog.labelText": (), + "QInputDialog.minimumSizeHint": (), + "QInputDialog.okButtonText": (), + "QInputDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QInputDialog.setCancelButtonText": ('str',), + "QInputDialog.setComboBoxEditable": ('bool',), + "QInputDialog.setComboBoxItems": ('PySide2.support.signature.typing.List',), + "QInputDialog.setDoubleDecimals": ('int',), + "QInputDialog.setDoubleMaximum": ('float',), + "QInputDialog.setDoubleMinimum": ('float',), + "QInputDialog.setDoubleRange": ('float', 'float'), + "QInputDialog.setDoubleValue": ('float',), + "QInputDialog.setInputMode": ('PySide2.QtWidgets.QInputDialog.InputMode',), + "QInputDialog.setIntMaximum": ('int',), + "QInputDialog.setIntMinimum": ('int',), + "QInputDialog.setIntRange": ('int', 'int'), + "QInputDialog.setIntStep": ('int',), + "QInputDialog.setIntValue": ('int',), + "QInputDialog.setLabelText": ('str',), + "QInputDialog.setOkButtonText": ('str',), + "QInputDialog.setOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption', 'bool'), + "QInputDialog.setTextEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QInputDialog.setTextValue": ('str',), + "QInputDialog.setVisible": ('bool',), + "QInputDialog.sizeHint": (), + "QInputDialog.testOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption',), + "QInputDialog.textEchoMode": (), + "QInputDialog.textValue": (), + + # class PySide2.QtWidgets.QItemDelegate: + "QItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.decoration": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.support.signature.typing.Any'), + "QItemDelegate.doCheck": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.support.signature.typing.Any'), + "QItemDelegate.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.drawCheck": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.CheckState'), + "QItemDelegate.drawDecoration": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), + "QItemDelegate.drawDisplay": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'str'), + "QItemDelegate.drawFocus": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect'), + "QItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QItemDelegate.hasClipping": (), + "QItemDelegate.itemEditorFactory": (), + "QItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.rect": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex', 'int'), + "QItemDelegate.setClipping": ('bool',), + "QItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setOptions": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QStyleOptionViewItem'), + "QItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.textRectangle": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QFont', 'str'), + "QItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QItemEditorCreatorBase: + "QItemEditorCreatorBase.__init__": (), + "QItemEditorCreatorBase.createWidget": ('PySide2.QtWidgets.QWidget',), + "QItemEditorCreatorBase.valuePropertyName": (), + + # class PySide2.QtWidgets.QItemEditorFactory: + "QItemEditorFactory.__init__": (), + "QItemEditorFactory.createEditor": ('int', 'PySide2.QtWidgets.QWidget'), + "QItemEditorFactory.defaultFactory": (), + "QItemEditorFactory.registerEditor": ('int', 'PySide2.QtWidgets.QItemEditorCreatorBase'), + "QItemEditorFactory.setDefaultFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemEditorFactory.valuePropertyName": ('int',), + + # class PySide2.QtWidgets.QKeyEventTransition: + "QKeyEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'int', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QKeyEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.key": (), + "QKeyEventTransition.modifierMask": (), + "QKeyEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.setKey": ('int',), + "QKeyEventTransition.setModifierMask": ('KeyboardModifiers',), + + # class PySide2.QtWidgets.QKeySequenceEdit: + "QKeySequenceEdit.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QKeySequenceEdit.clear": (), + "QKeySequenceEdit.event": ('PySide2.QtCore.QEvent',), + "QKeySequenceEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keySequence": (), + "QKeySequenceEdit.setKeySequence": ('PySide2.QtGui.QKeySequence',), + "QKeySequenceEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QLCDNumber: + "QLCDNumber.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'PySide2.QtWidgets.QWidget')], + "QLCDNumber.checkOverflow": [('float',), ('int',)], + "QLCDNumber.digitCount": (), + "QLCDNumber.display": [('float',), ('int',), ('str',)], + "QLCDNumber.event": ('PySide2.QtCore.QEvent',), + "QLCDNumber.intValue": (), + "QLCDNumber.mode": (), + "QLCDNumber.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLCDNumber.segmentStyle": (), + "QLCDNumber.setBinMode": (), + "QLCDNumber.setDecMode": (), + "QLCDNumber.setDigitCount": ('int',), + "QLCDNumber.setHexMode": (), + "QLCDNumber.setMode": ('PySide2.QtWidgets.QLCDNumber.Mode',), + "QLCDNumber.setOctMode": (), + "QLCDNumber.setSegmentStyle": ('PySide2.QtWidgets.QLCDNumber.SegmentStyle',), + "QLCDNumber.setSmallDecimalPoint": ('bool',), + "QLCDNumber.sizeHint": (), + "QLCDNumber.smallDecimalPoint": (), + "QLCDNumber.value": (), + + # class PySide2.QtWidgets.QLabel: + "QLabel.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QLabel.alignment": (), + "QLabel.buddy": (), + "QLabel.changeEvent": ('PySide2.QtCore.QEvent',), + "QLabel.clear": (), + "QLabel.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLabel.event": ('PySide2.QtCore.QEvent',), + "QLabel.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.focusNextPrevChild": ('bool',), + "QLabel.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.hasScaledContents": (), + "QLabel.hasSelectedText": (), + "QLabel.heightForWidth": ('int',), + "QLabel.indent": (), + "QLabel.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLabel.margin": (), + "QLabel.minimumSizeHint": (), + "QLabel.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.movie": (), + "QLabel.openExternalLinks": (), + "QLabel.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLabel.picture": (), + "QLabel.pixmap": (), + "QLabel.selectedText": (), + "QLabel.selectionStart": (), + "QLabel.setAlignment": ('Alignment',), + "QLabel.setBuddy": ('PySide2.QtWidgets.QWidget',), + "QLabel.setIndent": ('int',), + "QLabel.setMargin": ('int',), + "QLabel.setMovie": ('PySide2.QtGui.QMovie',), + "QLabel.setNum": [('float',), ('int',)], + "QLabel.setOpenExternalLinks": ('bool',), + "QLabel.setPicture": ('PySide2.QtGui.QPicture',), + "QLabel.setPixmap": ('PySide2.QtGui.QPixmap',), + "QLabel.setScaledContents": ('bool',), + "QLabel.setSelection": ('int', 'int'), + "QLabel.setText": ('str',), + "QLabel.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QLabel.setTextInteractionFlags": ('TextInteractionFlags',), + "QLabel.setWordWrap": ('bool',), + "QLabel.sizeHint": (), + "QLabel.text": (), + "QLabel.textFormat": (), + "QLabel.textInteractionFlags": (), + "QLabel.wordWrap": (), + + # class PySide2.QtWidgets.QLayout: + "QLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QLayout.activate": (), + "QLayout.addChildLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.addChildWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.adoptLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.alignmentRect": ('PySide2.QtCore.QRect',), + "QLayout.childEvent": ('PySide2.QtCore.QChildEvent',), + "QLayout.closestAcceptableSize": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QSize'), + "QLayout.contentsMargins": (), + "QLayout.contentsRect": (), + "QLayout.controlTypes": (), + "QLayout.count": (), + "QLayout.expandingDirections": (), + "QLayout.geometry": (), + "QLayout.getContentsMargins": ('int', 'int', 'int', 'int'), + "QLayout.indexOf": ('PySide2.QtWidgets.QWidget',), + "QLayout.invalidate": (), + "QLayout.isEmpty": (), + "QLayout.isEnabled": (), + "QLayout.itemAt": ('int',), + "QLayout.layout": (), + "QLayout.margin": (), + "QLayout.maximumSize": (), + "QLayout.menuBar": (), + "QLayout.minimumSize": (), + "QLayout.parentWidget": (), + "QLayout.removeItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.replaceWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget', 'FindChildOptions'), + "QLayout.setAlignment": [('Alignment',), ('PySide2.QtWidgets.QLayout', 'Alignment'), ('PySide2.QtWidgets.QWidget', 'Alignment')], + "QLayout.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLayout.setEnabled": ('bool',), + "QLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QLayout.setMargin": ('int',), + "QLayout.setMenuBar": ('PySide2.QtWidgets.QWidget',), + "QLayout.setSizeConstraint": ('PySide2.QtWidgets.QLayout.SizeConstraint',), + "QLayout.setSpacing": ('int',), + "QLayout.sizeConstraint": (), + "QLayout.spacing": (), + "QLayout.takeAt": ('int',), + "QLayout.totalHeightForWidth": ('int',), + "QLayout.totalMaximumSize": (), + "QLayout.totalMinimumSize": (), + "QLayout.totalSizeHint": (), + "QLayout.update": (), + "QLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QLayoutItem: + "QLayoutItem.__init__": ('Alignment',), + "QLayoutItem.alignment": (), + "QLayoutItem.controlTypes": (), + "QLayoutItem.expandingDirections": (), + "QLayoutItem.geometry": (), + "QLayoutItem.hasHeightForWidth": (), + "QLayoutItem.heightForWidth": ('int',), + "QLayoutItem.invalidate": (), + "QLayoutItem.isEmpty": (), + "QLayoutItem.layout": (), + "QLayoutItem.maximumSize": (), + "QLayoutItem.minimumHeightForWidth": ('int',), + "QLayoutItem.minimumSize": (), + "QLayoutItem.setAlignment": ('Alignment',), + "QLayoutItem.setGeometry": ('PySide2.QtCore.QRect',), + "QLayoutItem.sizeHint": (), + "QLayoutItem.spacerItem": (), + "QLayoutItem.widget": (), + + # class PySide2.QtWidgets.QLineEdit: + "QLineEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QLineEdit.addAction": [('PySide2.QtGui.QIcon', 'PySide2.QtWidgets.QLineEdit.ActionPosition'), ('PySide2.QtWidgets.QAction',), ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QLineEdit.ActionPosition')], + "QLineEdit.alignment": (), + "QLineEdit.backspace": (), + "QLineEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QLineEdit.clear": (), + "QLineEdit.completer": (), + "QLineEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLineEdit.copy": (), + "QLineEdit.createStandardContextMenu": (), + "QLineEdit.cursorBackward": ('bool', 'int'), + "QLineEdit.cursorForward": ('bool', 'int'), + "QLineEdit.cursorMoveStyle": (), + "QLineEdit.cursorPosition": (), + "QLineEdit.cursorPositionAt": ('PySide2.QtCore.QPoint',), + "QLineEdit.cursorRect": (), + "QLineEdit.cursorWordBackward": ('bool',), + "QLineEdit.cursorWordForward": ('bool',), + "QLineEdit.cut": (), + "QLineEdit.del_": (), + "QLineEdit.deselect": (), + "QLineEdit.displayText": (), + "QLineEdit.dragEnabled": (), + "QLineEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QLineEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QLineEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QLineEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QLineEdit.echoMode": (), + "QLineEdit.end": ('bool',), + "QLineEdit.event": ('PySide2.QtCore.QEvent',), + "QLineEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.getTextMargins": ('int', 'int', 'int', 'int'), + "QLineEdit.hasAcceptableInput": (), + "QLineEdit.hasFrame": (), + "QLineEdit.hasSelectedText": (), + "QLineEdit.home": ('bool',), + "QLineEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QLineEdit.inputMask": (), + "QLineEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QLineEdit.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QLineEdit.insert": ('str',), + "QLineEdit.isClearButtonEnabled": (), + "QLineEdit.isModified": (), + "QLineEdit.isReadOnly": (), + "QLineEdit.isRedoAvailable": (), + "QLineEdit.isUndoAvailable": (), + "QLineEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLineEdit.maxLength": (), + "QLineEdit.minimumSizeHint": (), + "QLineEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLineEdit.paste": (), + "QLineEdit.placeholderText": (), + "QLineEdit.redo": (), + "QLineEdit.selectAll": (), + "QLineEdit.selectedText": (), + "QLineEdit.selectionStart": (), + "QLineEdit.setAlignment": ('Alignment',), + "QLineEdit.setClearButtonEnabled": ('bool',), + "QLineEdit.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QLineEdit.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QLineEdit.setCursorPosition": ('int',), + "QLineEdit.setDragEnabled": ('bool',), + "QLineEdit.setEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QLineEdit.setFrame": ('bool',), + "QLineEdit.setInputMask": ('str',), + "QLineEdit.setMaxLength": ('int',), + "QLineEdit.setModified": ('bool',), + "QLineEdit.setPlaceholderText": ('str',), + "QLineEdit.setReadOnly": ('bool',), + "QLineEdit.setSelection": ('int', 'int'), + "QLineEdit.setText": ('str',), + "QLineEdit.setTextMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLineEdit.setValidator": ('PySide2.QtGui.QValidator',), + "QLineEdit.sizeHint": (), + "QLineEdit.text": (), + "QLineEdit.textMargins": (), + "QLineEdit.undo": (), + "QLineEdit.validator": (), + + # class PySide2.QtWidgets.QListView: + "QListView.__init__": ('PySide2.QtWidgets.QWidget',), + "QListView.batchSize": (), + "QListView.clearPropertyFlags": (), + "QListView.contentsSize": (), + "QListView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QListView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QListView.doItemsLayout": (), + "QListView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QListView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QListView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListView.event": ('PySide2.QtCore.QEvent',), + "QListView.flow": (), + "QListView.gridSize": (), + "QListView.horizontalOffset": (), + "QListView.indexAt": ('PySide2.QtCore.QPoint',), + "QListView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QListView.isRowHidden": ('int',), + "QListView.isSelectionRectVisible": (), + "QListView.isWrapping": (), + "QListView.layoutMode": (), + "QListView.modelColumn": (), + "QListView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QListView.movement": (), + "QListView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QListView.rectForIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.reset": (), + "QListView.resizeContents": ('int', 'int'), + "QListView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QListView.resizeMode": (), + "QListView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.scrollContentsBy": ('int', 'int'), + "QListView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListView.selectedIndexes": (), + "QListView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QListView.setBatchSize": ('int',), + "QListView.setFlow": ('PySide2.QtWidgets.QListView.Flow',), + "QListView.setGridSize": ('PySide2.QtCore.QSize',), + "QListView.setLayoutMode": ('PySide2.QtWidgets.QListView.LayoutMode',), + "QListView.setModelColumn": ('int',), + "QListView.setMovement": ('PySide2.QtWidgets.QListView.Movement',), + "QListView.setPositionForIndex": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QModelIndex'), + "QListView.setResizeMode": ('PySide2.QtWidgets.QListView.ResizeMode',), + "QListView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.setRowHidden": ('int', 'bool'), + "QListView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QListView.setSelectionRectVisible": ('bool',), + "QListView.setSpacing": ('int',), + "QListView.setUniformItemSizes": ('bool',), + "QListView.setViewMode": ('PySide2.QtWidgets.QListView.ViewMode',), + "QListView.setWordWrap": ('bool',), + "QListView.setWrapping": ('bool',), + "QListView.spacing": (), + "QListView.startDrag": ('DropActions',), + "QListView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QListView.uniformItemSizes": (), + "QListView.updateGeometries": (), + "QListView.verticalOffset": (), + "QListView.viewMode": (), + "QListView.viewOptions": (), + "QListView.viewportSizeHint": (), + "QListView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QListView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QListView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QListView.wordWrap": (), + + # class PySide2.QtWidgets.QListWidget: + "QListWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QListWidget.addItem": [('PySide2.QtWidgets.QListWidgetItem',), ('str',)], + "QListWidget.addItems": ('PySide2.support.signature.typing.List',), + "QListWidget.clear": (), + "QListWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.count": (), + "QListWidget.currentItem": (), + "QListWidget.currentRow": (), + "QListWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListWidget.dropMimeData": ('int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QListWidget.editItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.event": ('PySide2.QtCore.QEvent',), + "QListWidget.findItems": ('str', 'MatchFlags'), + "QListWidget.indexFromItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.insertItem": [('int', 'PySide2.QtWidgets.QListWidgetItem'), ('int', 'str')], + "QListWidget.insertItems": ('int', 'PySide2.support.signature.typing.List'), + "QListWidget.isItemHidden": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isItemSelected": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isSortingEnabled": (), + "QListWidget.item": ('int',), + "QListWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QListWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QListWidget.itemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.items": ('PySide2.QtCore.QMimeData',), + "QListWidget.mimeData": ('list',), + "QListWidget.mimeTypes": (), + "QListWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.removeItemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.row": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.scrollToItem": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListWidget.selectedItems": (), + "QListWidget.setCurrentItem": [('PySide2.QtWidgets.QListWidgetItem',), ('PySide2.QtWidgets.QListWidgetItem', 'SelectionFlags')], + "QListWidget.setCurrentRow": [('int',), ('int', 'SelectionFlags')], + "QListWidget.setItemHidden": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemSelected": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemWidget": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QWidget'), + "QListWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QListWidget.setSortingEnabled": ('bool',), + "QListWidget.sortItems": ('PySide2.QtCore.Qt.SortOrder',), + "QListWidget.supportedDropActions": (), + "QListWidget.takeItem": ('int',), + "QListWidget.visualItemRect": ('PySide2.QtWidgets.QListWidgetItem',), + + # class PySide2.QtWidgets.QListWidgetItem: + "QListWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidgetItem',), ('str', 'PySide2.QtWidgets.QListWidget', 'int')], + "QListWidgetItem.background": (), + "QListWidgetItem.backgroundColor": (), + "QListWidgetItem.checkState": (), + "QListWidgetItem.clone": (), + "QListWidgetItem.data": ('int',), + "QListWidgetItem.flags": (), + "QListWidgetItem.font": (), + "QListWidgetItem.foreground": (), + "QListWidgetItem.icon": (), + "QListWidgetItem.isHidden": (), + "QListWidgetItem.isSelected": (), + "QListWidgetItem.listWidget": (), + "QListWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QListWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QListWidgetItem.setData": ('int', 'PySide2.support.signature.typing.Any'), + "QListWidgetItem.setFlags": ('ItemFlags',), + "QListWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QListWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setHidden": ('bool',), + "QListWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QListWidgetItem.setSelected": ('bool',), + "QListWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QListWidgetItem.setStatusTip": ('str',), + "QListWidgetItem.setText": ('str',), + "QListWidgetItem.setTextAlignment": ('int',), + "QListWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setToolTip": ('str',), + "QListWidgetItem.setWhatsThis": ('str',), + "QListWidgetItem.sizeHint": (), + "QListWidgetItem.statusTip": (), + "QListWidgetItem.text": (), + "QListWidgetItem.textAlignment": (), + "QListWidgetItem.textColor": (), + "QListWidgetItem.toolTip": (), + "QListWidgetItem.type": (), + "QListWidgetItem.whatsThis": (), + "QListWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QMainWindow: + "QMainWindow.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMainWindow.addDockWidget": [('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget'), ('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation')], + "QMainWindow.addToolBar": [('PySide2.QtCore.Qt.ToolBarArea', 'PySide2.QtWidgets.QToolBar'), ('PySide2.QtWidgets.QToolBar',), ('str',)], + "QMainWindow.addToolBarBreak": ('PySide2.QtCore.Qt.ToolBarArea',), + "QMainWindow.centralWidget": (), + "QMainWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMainWindow.corner": ('PySide2.QtCore.Qt.Corner',), + "QMainWindow.createPopupMenu": (), + "QMainWindow.dockOptions": (), + "QMainWindow.dockWidgetArea": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.documentMode": (), + "QMainWindow.event": ('PySide2.QtCore.QEvent',), + "QMainWindow.iconSize": (), + "QMainWindow.insertToolBar": ('PySide2.QtWidgets.QToolBar', 'PySide2.QtWidgets.QToolBar'), + "QMainWindow.insertToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.isAnimated": (), + "QMainWindow.isDockNestingEnabled": (), + "QMainWindow.isSeparator": ('PySide2.QtCore.QPoint',), + "QMainWindow.menuBar": (), + "QMainWindow.menuWidget": (), + "QMainWindow.removeDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.removeToolBar": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.removeToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.resizeDocks": ('list', 'list', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.restoreDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.restoreState": ('PySide2.QtCore.QByteArray', 'int'), + "QMainWindow.saveState": ('int',), + "QMainWindow.setAnimated": ('bool',), + "QMainWindow.setCentralWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setCorner": ('PySide2.QtCore.Qt.Corner', 'PySide2.QtCore.Qt.DockWidgetArea'), + "QMainWindow.setDockNestingEnabled": ('bool',), + "QMainWindow.setDockOptions": ('DockOptions',), + "QMainWindow.setDocumentMode": ('bool',), + "QMainWindow.setIconSize": ('PySide2.QtCore.QSize',), + "QMainWindow.setMenuBar": ('PySide2.QtWidgets.QMenuBar',), + "QMainWindow.setMenuWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setStatusBar": ('PySide2.QtWidgets.QStatusBar',), + "QMainWindow.setTabPosition": ('DockWidgetAreas', 'PySide2.QtWidgets.QTabWidget.TabPosition'), + "QMainWindow.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMainWindow.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QMainWindow.setUnifiedTitleAndToolBarOnMac": ('bool',), + "QMainWindow.splitDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.statusBar": (), + "QMainWindow.tabPosition": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QMainWindow.tabShape": (), + "QMainWindow.tabifiedDockWidgets": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.tabifyDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget'), + "QMainWindow.takeCentralWidget": (), + "QMainWindow.toolBarArea": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolButtonStyle": (), + "QMainWindow.unifiedTitleAndToolBarOnMac": (), + + # class PySide2.QtWidgets.QMdiArea: + "QMdiArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.activateNextSubWindow": (), + "QMdiArea.activatePreviousSubWindow": (), + "QMdiArea.activationOrder": (), + "QMdiArea.activeSubWindow": (), + "QMdiArea.addSubWindow": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMdiArea.background": (), + "QMdiArea.cascadeSubWindows": (), + "QMdiArea.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiArea.closeActiveSubWindow": (), + "QMdiArea.closeAllSubWindows": (), + "QMdiArea.currentSubWindow": (), + "QMdiArea.documentMode": (), + "QMdiArea.event": ('PySide2.QtCore.QEvent',), + "QMdiArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiArea.minimumSizeHint": (), + "QMdiArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiArea.removeSubWindow": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiArea.scrollContentsBy": ('int', 'int'), + "QMdiArea.setActivationOrder": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.setActiveSubWindow": ('PySide2.QtWidgets.QMdiSubWindow',), + "QMdiArea.setBackground": ('PySide2.QtGui.QBrush',), + "QMdiArea.setDocumentMode": ('bool',), + "QMdiArea.setOption": ('PySide2.QtWidgets.QMdiArea.AreaOption', 'bool'), + "QMdiArea.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QMdiArea.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMdiArea.setTabsClosable": ('bool',), + "QMdiArea.setTabsMovable": ('bool',), + "QMdiArea.setViewMode": ('PySide2.QtWidgets.QMdiArea.ViewMode',), + "QMdiArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiArea.sizeHint": (), + "QMdiArea.subWindowList": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.tabPosition": (), + "QMdiArea.tabShape": (), + "QMdiArea.tabsClosable": (), + "QMdiArea.tabsMovable": (), + "QMdiArea.testOption": ('PySide2.QtWidgets.QMdiArea.AreaOption',), + "QMdiArea.tileSubWindows": (), + "QMdiArea.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiArea.viewMode": (), + "QMdiArea.viewportEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QMdiSubWindow: + "QMdiSubWindow.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMdiSubWindow.changeEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiSubWindow.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMdiSubWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMdiSubWindow.event": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiSubWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMdiSubWindow.isShaded": (), + "QMdiSubWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMdiSubWindow.keyboardPageStep": (), + "QMdiSubWindow.keyboardSingleStep": (), + "QMdiSubWindow.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.maximizedButtonsWidget": (), + "QMdiSubWindow.maximizedSystemMenuIconWidget": (), + "QMdiSubWindow.mdiArea": (), + "QMdiSubWindow.minimumSizeHint": (), + "QMdiSubWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QMdiSubWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiSubWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiSubWindow.setKeyboardPageStep": ('int',), + "QMdiSubWindow.setKeyboardSingleStep": ('int',), + "QMdiSubWindow.setOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption', 'bool'), + "QMdiSubWindow.setSystemMenu": ('PySide2.QtWidgets.QMenu',), + "QMdiSubWindow.setWidget": ('PySide2.QtWidgets.QWidget',), + "QMdiSubWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiSubWindow.showShaded": (), + "QMdiSubWindow.showSystemMenu": (), + "QMdiSubWindow.sizeHint": (), + "QMdiSubWindow.systemMenu": (), + "QMdiSubWindow.testOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption',), + "QMdiSubWindow.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiSubWindow.widget": (), + + # class PySide2.QtWidgets.QMenu: + "QMenu.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QMenu.actionAt": ('PySide2.QtCore.QPoint',), + "QMenu.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenu.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenu.activeAction": (), + "QMenu.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtGui.QIcon', 'str', 'object', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('str', 'object', 'PySide2.QtGui.QKeySequence')], + "QMenu.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenu.addSection": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QMenu.addSeparator": (), + "QMenu.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenu.clear": (), + "QMenu.columnCount": (), + "QMenu.defaultAction": (), + "QMenu.enterEvent": ('PySide2.QtCore.QEvent',), + "QMenu.event": ('PySide2.QtCore.QEvent',), + "QMenu.exec_": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), ('list', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget')], + "QMenu.focusNextPrevChild": ('bool',), + "QMenu.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMenu.hideTearOffMenu": (), + "QMenu.icon": (), + "QMenu.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenu.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenu.insertSection": [('PySide2.QtWidgets.QAction', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction', 'str')], + "QMenu.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenu.isEmpty": (), + "QMenu.isTearOffEnabled": (), + "QMenu.isTearOffMenuVisible": (), + "QMenu.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenu.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenu.menuAction": (), + "QMenu.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenu.popup": ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), + "QMenu.separatorsCollapsible": (), + "QMenu.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setIcon": ('PySide2.QtGui.QIcon',), + "QMenu.setSeparatorsCollapsible": ('bool',), + "QMenu.setTearOffEnabled": ('bool',), + "QMenu.setTitle": ('str',), + "QMenu.setToolTipsVisible": ('bool',), + "QMenu.sizeHint": (), + "QMenu.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMenu.title": (), + "QMenu.toolTipsVisible": (), + "QMenu.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QMenuBar: + "QMenuBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QMenuBar.actionAt": ('PySide2.QtCore.QPoint',), + "QMenuBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenuBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenuBar.activeAction": (), + "QMenuBar.addAction": [('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str'), ('str', 'object')], + "QMenuBar.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenuBar.addSeparator": (), + "QMenuBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.clear": (), + "QMenuBar.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QMenuBar.event": ('PySide2.QtCore.QEvent',), + "QMenuBar.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMenuBar.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.heightForWidth": ('int',), + "QMenuBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenuBar.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenuBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenuBar.isDefaultUp": (), + "QMenuBar.isNativeMenuBar": (), + "QMenuBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenuBar.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.minimumSizeHint": (), + "QMenuBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenuBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMenuBar.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenuBar.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QMenuBar.setDefaultUp": ('bool',), + "QMenuBar.setNativeMenuBar": ('bool',), + "QMenuBar.setVisible": ('bool',), + "QMenuBar.sizeHint": (), + "QMenuBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QMessageBox: + "QMessageBox.__init__": [('PySide2.QtWidgets.QMessageBox.Icon', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget',)], + "QMessageBox.about": ('PySide2.QtWidgets.QWidget', 'str', 'str'), + "QMessageBox.aboutQt": ('PySide2.QtWidgets.QWidget', 'str'), + "QMessageBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QMessageBox.ButtonRole'), ('PySide2.QtWidgets.QMessageBox.StandardButton',), ('str', 'PySide2.QtWidgets.QMessageBox.ButtonRole')], + "QMessageBox.button": ('PySide2.QtWidgets.QMessageBox.StandardButton',), + "QMessageBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.buttonText": ('int',), + "QMessageBox.buttons": (), + "QMessageBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QMessageBox.checkBox": (), + "QMessageBox.clickedButton": (), + "QMessageBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMessageBox.critical": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.defaultButton": (), + "QMessageBox.detailedText": (), + "QMessageBox.escapeButton": (), + "QMessageBox.event": ('PySide2.QtCore.QEvent',), + "QMessageBox.icon": (), + "QMessageBox.iconPixmap": (), + "QMessageBox.information": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.informativeText": (), + "QMessageBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMessageBox.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QMessageBox.question": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMessageBox.setButtonText": ('int', 'str'), + "QMessageBox.setCheckBox": ('PySide2.QtWidgets.QCheckBox',), + "QMessageBox.setDefaultButton": [('PySide2.QtWidgets.QMessageBox.StandardButton',), ('PySide2.QtWidgets.QPushButton',)], + "QMessageBox.setDetailedText": ('str',), + "QMessageBox.setEscapeButton": [('PySide2.QtWidgets.QAbstractButton',), ('PySide2.QtWidgets.QMessageBox.StandardButton',)], + "QMessageBox.setIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.setIconPixmap": ('PySide2.QtGui.QPixmap',), + "QMessageBox.setInformativeText": ('str',), + "QMessageBox.setStandardButtons": ('StandardButtons',), + "QMessageBox.setText": ('str',), + "QMessageBox.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QMessageBox.setTextInteractionFlags": ('TextInteractionFlags',), + "QMessageBox.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QMessageBox.setWindowTitle": ('str',), + "QMessageBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMessageBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.standardButtons": (), + "QMessageBox.standardIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.text": (), + "QMessageBox.textFormat": (), + "QMessageBox.textInteractionFlags": (), + "QMessageBox.warning": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + + # class PySide2.QtWidgets.QMouseEventTransition: + "QMouseEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QMouseEventTransition.button": (), + "QMouseEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.hitTestPath": (), + "QMouseEventTransition.modifierMask": (), + "QMouseEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QMouseEventTransition.setHitTestPath": ('PySide2.QtGui.QPainterPath',), + "QMouseEventTransition.setModifierMask": ('KeyboardModifiers',), + + # class PySide2.QtWidgets.QOpenGLWidget: + "QOpenGLWidget.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QOpenGLWidget.context": (), + "QOpenGLWidget.doneCurrent": (), + "QOpenGLWidget.event": ('PySide2.QtCore.QEvent',), + "QOpenGLWidget.format": (), + "QOpenGLWidget.grabFramebuffer": (), + "QOpenGLWidget.initializeGL": (), + "QOpenGLWidget.isValid": (), + "QOpenGLWidget.makeCurrent": (), + "QOpenGLWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWidget.paintEngine": (), + "QOpenGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWidget.paintGL": (), + "QOpenGLWidget.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWidget.resizeGL": ('int', 'int'), + "QOpenGLWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLWidget.setUpdateBehavior": ('PySide2.QtWidgets.QOpenGLWidget.UpdateBehavior',), + "QOpenGLWidget.updateBehavior": (), + + # class PySide2.QtWidgets.QPanGesture: + "QPanGesture.__init__": ('PySide2.QtCore.QObject',), + "QPanGesture.acceleration": (), + "QPanGesture.delta": (), + "QPanGesture.lastOffset": (), + "QPanGesture.offset": (), + "QPanGesture.setAcceleration": ('float',), + "QPanGesture.setLastOffset": ('PySide2.QtCore.QPointF',), + "QPanGesture.setOffset": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QPinchGesture: + "QPinchGesture.__init__": ('PySide2.QtCore.QObject',), + "QPinchGesture.centerPoint": (), + "QPinchGesture.changeFlags": (), + "QPinchGesture.lastCenterPoint": (), + "QPinchGesture.lastRotationAngle": (), + "QPinchGesture.lastScaleFactor": (), + "QPinchGesture.rotationAngle": (), + "QPinchGesture.scaleFactor": (), + "QPinchGesture.setCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setChangeFlags": ('ChangeFlags',), + "QPinchGesture.setLastCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setLastRotationAngle": ('float',), + "QPinchGesture.setLastScaleFactor": ('float',), + "QPinchGesture.setRotationAngle": ('float',), + "QPinchGesture.setScaleFactor": ('float',), + "QPinchGesture.setStartCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setTotalChangeFlags": ('ChangeFlags',), + "QPinchGesture.setTotalRotationAngle": ('float',), + "QPinchGesture.setTotalScaleFactor": ('float',), + "QPinchGesture.startCenterPoint": (), + "QPinchGesture.totalChangeFlags": (), + "QPinchGesture.totalRotationAngle": (), + "QPinchGesture.totalScaleFactor": (), + + # class PySide2.QtWidgets.QPlainTextDocumentLayout: + "QPlainTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QPlainTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.cursorWidth": (), + "QPlainTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QPlainTextDocumentLayout.documentSize": (), + "QPlainTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QPlainTextDocumentLayout.ensureBlockLayout": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QPlainTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QPlainTextDocumentLayout.pageCount": (), + "QPlainTextDocumentLayout.requestUpdate": (), + "QPlainTextDocumentLayout.setCursorWidth": ('int',), + + # class PySide2.QtWidgets.QPlainTextEdit: + "QPlainTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPlainTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.appendHtml": ('str',), + "QPlainTextEdit.appendPlainText": ('str',), + "QPlainTextEdit.backgroundVisible": (), + "QPlainTextEdit.blockBoundingGeometry": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockCount": (), + "QPlainTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.canPaste": (), + "QPlainTextEdit.centerCursor": (), + "QPlainTextEdit.centerOnScroll": (), + "QPlainTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.clear": (), + "QPlainTextEdit.contentOffset": (), + "QPlainTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QPlainTextEdit.copy": (), + "QPlainTextEdit.createMimeDataFromSelection": (), + "QPlainTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QPlainTextEdit.currentCharFormat": (), + "QPlainTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QPlainTextEdit.cursorWidth": (), + "QPlainTextEdit.cut": (), + "QPlainTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.document": (), + "QPlainTextEdit.documentTitle": (), + "QPlainTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QPlainTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QPlainTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QPlainTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QPlainTextEdit.ensureCursorVisible": (), + "QPlainTextEdit.event": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.extraSelections": (), + "QPlainTextEdit.find": [('PySide2.QtCore.QRegExp', 'FindFlags'), ('int',), ('str', 'FindFlags')], + "QPlainTextEdit.firstVisibleBlock": (), + "QPlainTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.focusNextPrevChild": ('bool',), + "QPlainTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.getPaintContext": (), + "QPlainTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QPlainTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'PySide2.support.signature.typing.Any')], + "QPlainTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.insertPlainText": ('str',), + "QPlainTextEdit.isReadOnly": (), + "QPlainTextEdit.isUndoRedoEnabled": (), + "QPlainTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.lineWrapMode": (), + "QPlainTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QPlainTextEdit.maximumBlockCount": (), + "QPlainTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QPlainTextEdit.overwriteMode": (), + "QPlainTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPlainTextEdit.paste": (), + "QPlainTextEdit.placeholderText": (), + "QPlainTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QPlainTextEdit.redo": (), + "QPlainTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QPlainTextEdit.scrollContentsBy": ('int', 'int'), + "QPlainTextEdit.selectAll": (), + "QPlainTextEdit.setBackgroundVisible": ('bool',), + "QPlainTextEdit.setCenterOnScroll": ('bool',), + "QPlainTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.setCursorWidth": ('int',), + "QPlainTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QPlainTextEdit.setDocumentTitle": ('str',), + "QPlainTextEdit.setExtraSelections": ('list',), + "QPlainTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QPlainTextEdit.LineWrapMode',), + "QPlainTextEdit.setMaximumBlockCount": ('int',), + "QPlainTextEdit.setOverwriteMode": ('bool',), + "QPlainTextEdit.setPlaceholderText": ('str',), + "QPlainTextEdit.setPlainText": ('str',), + "QPlainTextEdit.setReadOnly": ('bool',), + "QPlainTextEdit.setTabChangesFocus": ('bool',), + "QPlainTextEdit.setTabStopWidth": ('int',), + "QPlainTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.setTextInteractionFlags": ('TextInteractionFlags',), + "QPlainTextEdit.setUndoRedoEnabled": ('bool',), + "QPlainTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QPlainTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QPlainTextEdit.tabChangesFocus": (), + "QPlainTextEdit.tabStopWidth": (), + "QPlainTextEdit.textCursor": (), + "QPlainTextEdit.textInteractionFlags": (), + "QPlainTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QPlainTextEdit.toPlainText": (), + "QPlainTextEdit.undo": (), + "QPlainTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QPlainTextEdit.wordWrapMode": (), + "QPlainTextEdit.zoomIn": ('int',), + "QPlainTextEdit.zoomInF": ('float',), + "QPlainTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QProgressBar: + "QProgressBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QProgressBar.alignment": (), + "QProgressBar.event": ('PySide2.QtCore.QEvent',), + "QProgressBar.format": (), + "QProgressBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionProgressBar',), + "QProgressBar.invertedAppearance": (), + "QProgressBar.isTextVisible": (), + "QProgressBar.maximum": (), + "QProgressBar.minimum": (), + "QProgressBar.minimumSizeHint": (), + "QProgressBar.orientation": (), + "QProgressBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QProgressBar.reset": (), + "QProgressBar.resetFormat": (), + "QProgressBar.setAlignment": ('Alignment',), + "QProgressBar.setFormat": ('str',), + "QProgressBar.setInvertedAppearance": ('bool',), + "QProgressBar.setMaximum": ('int',), + "QProgressBar.setMinimum": ('int',), + "QProgressBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QProgressBar.setRange": ('int', 'int'), + "QProgressBar.setTextDirection": ('PySide2.QtWidgets.QProgressBar.Direction',), + "QProgressBar.setTextVisible": ('bool',), + "QProgressBar.setValue": ('int',), + "QProgressBar.sizeHint": (), + "QProgressBar.text": (), + "QProgressBar.textDirection": (), + "QProgressBar.value": (), + + # class PySide2.QtWidgets.QProgressDialog: + "QProgressDialog.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'str', 'int', 'int', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QProgressDialog.autoClose": (), + "QProgressDialog.autoReset": (), + "QProgressDialog.cancel": (), + "QProgressDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QProgressDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QProgressDialog.forceShow": (), + "QProgressDialog.labelText": (), + "QProgressDialog.maximum": (), + "QProgressDialog.minimum": (), + "QProgressDialog.minimumDuration": (), + "QProgressDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QProgressDialog.reset": (), + "QProgressDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QProgressDialog.setAutoClose": ('bool',), + "QProgressDialog.setAutoReset": ('bool',), + "QProgressDialog.setBar": ('PySide2.QtWidgets.QProgressBar',), + "QProgressDialog.setCancelButton": ('PySide2.QtWidgets.QPushButton',), + "QProgressDialog.setCancelButtonText": ('str',), + "QProgressDialog.setLabel": ('PySide2.QtWidgets.QLabel',), + "QProgressDialog.setLabelText": ('str',), + "QProgressDialog.setMaximum": ('int',), + "QProgressDialog.setMinimum": ('int',), + "QProgressDialog.setMinimumDuration": ('int',), + "QProgressDialog.setRange": ('int', 'int'), + "QProgressDialog.setValue": ('int',), + "QProgressDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QProgressDialog.sizeHint": (), + "QProgressDialog.value": (), + "QProgressDialog.wasCanceled": (), + + # class PySide2.QtWidgets.QPushButton: + "QPushButton.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPushButton.autoDefault": (), + "QPushButton.event": ('PySide2.QtCore.QEvent',), + "QPushButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QPushButton.isDefault": (), + "QPushButton.isFlat": (), + "QPushButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPushButton.menu": (), + "QPushButton.minimumSizeHint": (), + "QPushButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPushButton.setAutoDefault": ('bool',), + "QPushButton.setDefault": ('bool',), + "QPushButton.setFlat": ('bool',), + "QPushButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QPushButton.showMenu": (), + "QPushButton.sizeHint": (), + + # class PySide2.QtWidgets.QRadioButton: + "QRadioButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QRadioButton.event": ('PySide2.QtCore.QEvent',), + "QRadioButton.hitButton": ('PySide2.QtCore.QPoint',), + "QRadioButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QRadioButton.minimumSizeHint": (), + "QRadioButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QRadioButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRadioButton.sizeHint": (), + + # class PySide2.QtWidgets.QRubberBand: + "QRubberBand.__init__": ('PySide2.QtWidgets.QRubberBand.Shape', 'PySide2.QtWidgets.QWidget'), + "QRubberBand.changeEvent": ('PySide2.QtCore.QEvent',), + "QRubberBand.event": ('PySide2.QtCore.QEvent',), + "QRubberBand.initStyleOption": ('PySide2.QtWidgets.QStyleOptionRubberBand',), + "QRubberBand.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRubberBand.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QRubberBand.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRubberBand.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QRubberBand.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QRubberBand.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRubberBand.shape": (), + "QRubberBand.showEvent": ('PySide2.QtGui.QShowEvent',), + + # class PySide2.QtWidgets.QScrollArea: + "QScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.alignment": (), + "QScrollArea.ensureVisible": ('int', 'int', 'int', 'int'), + "QScrollArea.ensureWidgetVisible": ('PySide2.QtWidgets.QWidget', 'int', 'int'), + "QScrollArea.event": ('PySide2.QtCore.QEvent',), + "QScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QScrollArea.focusNextPrevChild": ('bool',), + "QScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QScrollArea.scrollContentsBy": ('int', 'int'), + "QScrollArea.setAlignment": ('Alignment',), + "QScrollArea.setWidget": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.setWidgetResizable": ('bool',), + "QScrollArea.sizeHint": (), + "QScrollArea.takeWidget": (), + "QScrollArea.viewportSizeHint": (), + "QScrollArea.widget": (), + "QScrollArea.widgetResizable": (), + + # class PySide2.QtWidgets.QScrollBar: + "QScrollBar.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QScrollBar.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QScrollBar.event": ('PySide2.QtCore.QEvent',), + "QScrollBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QScrollBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QScrollBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QScrollBar.sizeHint": (), + "QScrollBar.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QScrollBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QShortcut: + "QShortcut.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Callable', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtWidgets.QWidget',)], + "QShortcut.autoRepeat": (), + "QShortcut.context": (), + "QShortcut.event": ('PySide2.QtCore.QEvent',), + "QShortcut.id": (), + "QShortcut.isEnabled": (), + "QShortcut.key": (), + "QShortcut.parentWidget": (), + "QShortcut.setAutoRepeat": ('bool',), + "QShortcut.setContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QShortcut.setEnabled": ('bool',), + "QShortcut.setKey": ('PySide2.QtGui.QKeySequence',), + "QShortcut.setWhatsThis": ('str',), + "QShortcut.whatsThis": (), + + # class PySide2.QtWidgets.QSizeGrip: + "QSizeGrip.__init__": ('PySide2.QtWidgets.QWidget',), + "QSizeGrip.event": ('PySide2.QtCore.QEvent',), + "QSizeGrip.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QSizeGrip.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QSizeGrip.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QSizeGrip.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSizeGrip.setVisible": ('bool',), + "QSizeGrip.showEvent": ('PySide2.QtGui.QShowEvent',), + "QSizeGrip.sizeHint": (), + + # class PySide2.QtWidgets.QSizePolicy: + "QSizePolicy.__init__": [(), ('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QSizePolicy.__copy__": (), + "QSizePolicy.controlType": (), + "QSizePolicy.expandingDirections": (), + "QSizePolicy.hasHeightForWidth": (), + "QSizePolicy.hasWidthForHeight": (), + "QSizePolicy.horizontalPolicy": (), + "QSizePolicy.horizontalStretch": (), + "QSizePolicy.retainSizeWhenHidden": (), + "QSizePolicy.setControlType": ('PySide2.QtWidgets.QSizePolicy.ControlType',), + "QSizePolicy.setHeightForWidth": ('bool',), + "QSizePolicy.setHorizontalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setHorizontalStretch": ('int',), + "QSizePolicy.setRetainSizeWhenHidden": ('bool',), + "QSizePolicy.setVerticalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setVerticalStretch": ('int',), + "QSizePolicy.setWidthForHeight": ('bool',), + "QSizePolicy.transpose": (), + "QSizePolicy.verticalPolicy": (), + "QSizePolicy.verticalStretch": (), + + # class PySide2.QtWidgets.QSlider: + "QSlider.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSlider.event": ('PySide2.QtCore.QEvent',), + "QSlider.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QSlider.minimumSizeHint": (), + "QSlider.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSlider.setTickInterval": ('int',), + "QSlider.setTickPosition": ('PySide2.QtWidgets.QSlider.TickPosition',), + "QSlider.sizeHint": (), + "QSlider.tickInterval": (), + "QSlider.tickPosition": (), + + # class PySide2.QtWidgets.QSpacerItem: + "QSpacerItem.__init__": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.changeSize": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.expandingDirections": (), + "QSpacerItem.geometry": (), + "QSpacerItem.isEmpty": (), + "QSpacerItem.maximumSize": (), + "QSpacerItem.minimumSize": (), + "QSpacerItem.setGeometry": ('PySide2.QtCore.QRect',), + "QSpacerItem.sizeHint": (), + "QSpacerItem.sizePolicy": (), + "QSpacerItem.spacerItem": (), + + # class PySide2.QtWidgets.QSpinBox: + "QSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QSpinBox.cleanText": (), + "QSpinBox.displayIntegerBase": (), + "QSpinBox.event": ('PySide2.QtCore.QEvent',), + "QSpinBox.fixup": ('str',), + "QSpinBox.maximum": (), + "QSpinBox.minimum": (), + "QSpinBox.prefix": (), + "QSpinBox.setDisplayIntegerBase": ('int',), + "QSpinBox.setMaximum": ('int',), + "QSpinBox.setMinimum": ('int',), + "QSpinBox.setPrefix": ('str',), + "QSpinBox.setRange": ('int', 'int'), + "QSpinBox.setSingleStep": ('int',), + "QSpinBox.setSuffix": ('str',), + "QSpinBox.setValue": ('int',), + "QSpinBox.singleStep": (), + "QSpinBox.suffix": (), + "QSpinBox.textFromValue": ('int',), + "QSpinBox.validate": ('str', 'int'), + "QSpinBox.value": (), + "QSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QSplashScreen: + "QSplashScreen.__init__": [('PySide2.QtGui.QPixmap', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QPixmap', 'WindowFlags')], + "QSplashScreen.clearMessage": (), + "QSplashScreen.drawContents": ('PySide2.QtGui.QPainter',), + "QSplashScreen.event": ('PySide2.QtCore.QEvent',), + "QSplashScreen.finish": ('PySide2.QtWidgets.QWidget',), + "QSplashScreen.message": (), + "QSplashScreen.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplashScreen.pixmap": (), + "QSplashScreen.setPixmap": ('PySide2.QtGui.QPixmap',), + "QSplashScreen.showMessage": ('str', 'int', 'PySide2.QtGui.QColor'), + + # class PySide2.QtWidgets.QSplitter: + "QSplitter.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSplitter.addWidget": ('PySide2.QtWidgets.QWidget',), + "QSplitter.changeEvent": ('PySide2.QtCore.QEvent',), + "QSplitter.childEvent": ('PySide2.QtCore.QChildEvent',), + "QSplitter.childrenCollapsible": (), + "QSplitter.closestLegalPosition": ('int', 'int'), + "QSplitter.count": (), + "QSplitter.createHandle": (), + "QSplitter.event": ('PySide2.QtCore.QEvent',), + "QSplitter.getRange": ('int', 'int', 'int'), + "QSplitter.handle": ('int',), + "QSplitter.handleWidth": (), + "QSplitter.indexOf": ('PySide2.QtWidgets.QWidget',), + "QSplitter.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.isCollapsible": ('int',), + "QSplitter.minimumSizeHint": (), + "QSplitter.moveSplitter": ('int', 'int'), + "QSplitter.opaqueResize": (), + "QSplitter.orientation": (), + "QSplitter.refresh": (), + "QSplitter.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitter.restoreState": ('PySide2.QtCore.QByteArray',), + "QSplitter.saveState": (), + "QSplitter.setChildrenCollapsible": ('bool',), + "QSplitter.setCollapsible": ('int', 'bool'), + "QSplitter.setHandleWidth": ('int',), + "QSplitter.setOpaqueResize": ('bool',), + "QSplitter.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitter.setRubberBand": ('int',), + "QSplitter.setSizes": ('list',), + "QSplitter.setStretchFactor": ('int', 'int'), + "QSplitter.sizeHint": (), + "QSplitter.sizes": (), + "QSplitter.widget": ('int',), + + # class PySide2.QtWidgets.QSplitterHandle: + "QSplitterHandle.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QSplitter'), + "QSplitterHandle.closestLegalPosition": ('int',), + "QSplitterHandle.event": ('PySide2.QtCore.QEvent',), + "QSplitterHandle.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.moveSplitter": ('int',), + "QSplitterHandle.opaqueResize": (), + "QSplitterHandle.orientation": (), + "QSplitterHandle.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSplitterHandle.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitterHandle.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitterHandle.sizeHint": (), + "QSplitterHandle.splitter": (), + + # class PySide2.QtWidgets.QStackedLayout: + "QStackedLayout.__init__": [(), ('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QStackedLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QStackedLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.count": (), + "QStackedLayout.currentIndex": (), + "QStackedLayout.currentWidget": (), + "QStackedLayout.hasHeightForWidth": (), + "QStackedLayout.heightForWidth": ('int',), + "QStackedLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedLayout.itemAt": ('int',), + "QStackedLayout.minimumSize": (), + "QStackedLayout.setCurrentIndex": ('int',), + "QStackedLayout.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QStackedLayout.setStackingMode": ('PySide2.QtWidgets.QStackedLayout.StackingMode',), + "QStackedLayout.sizeHint": (), + "QStackedLayout.stackingMode": (), + "QStackedLayout.takeAt": ('int',), + "QStackedLayout.widget": [(), ('int',)], + + # class PySide2.QtWidgets.QStackedWidget: + "QStackedWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.count": (), + "QStackedWidget.currentIndex": (), + "QStackedWidget.currentWidget": (), + "QStackedWidget.event": ('PySide2.QtCore.QEvent',), + "QStackedWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedWidget.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.setCurrentIndex": ('int',), + "QStackedWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.widget": ('int',), + + # class PySide2.QtWidgets.QStatusBar: + "QStatusBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.addPermanentWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.addWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.clearMessage": (), + "QStatusBar.currentMessage": (), + "QStatusBar.event": ('PySide2.QtCore.QEvent',), + "QStatusBar.hideOrShow": (), + "QStatusBar.insertPermanentWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.isSizeGripEnabled": (), + "QStatusBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QStatusBar.reformat": (), + "QStatusBar.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QStatusBar.setSizeGripEnabled": ('bool',), + "QStatusBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QStatusBar.showMessage": ('str', 'int'), + + # class PySide2.QtWidgets.QStyle: + "QStyle.__init__": (), + "QStyle.alignedRect": ('PySide2.QtCore.Qt.LayoutDirection', 'Alignment', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QRect'), + "QStyle.combinedLayoutSpacing": ('ControlTypes', 'ControlTypes', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawItemPixmap": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.drawItemText": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QStyle.itemPixmapRect": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.itemTextRect": ('PySide2.QtGui.QFontMetrics', 'PySide2.QtCore.QRect', 'int', 'bool', 'str'), + "QStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.proxy": (), + "QStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QStyle.sliderPositionFromValue": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.sliderValueFromPosition": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.standardPalette": (), + "QStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.visualAlignment": ('PySide2.QtCore.Qt.LayoutDirection', 'Alignment'), + "QStyle.visualPos": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QPoint'), + "QStyle.visualRect": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QRect'), + + # class PySide2.QtWidgets.QStyleFactory: + "QStyleFactory.__init__": (), + "QStyleFactory.create": ('str',), + "QStyleFactory.keys": (), + + # class PySide2.QtWidgets.QStyleHintReturn: + "QStyleHintReturn.__init__": ('int', 'int'), + + # class PySide2.QtWidgets.QStyleHintReturnMask: + "QStyleHintReturnMask.__init__": (), + + # class PySide2.QtWidgets.QStyleHintReturnVariant: + "QStyleHintReturnVariant.__init__": (), + + # class PySide2.QtWidgets.QStyleOption: + "QStyleOption.__init__": [('PySide2.QtWidgets.QStyleOption',), ('int', 'int')], + "QStyleOption.init": ('PySide2.QtWidgets.QWidget',), + "QStyleOption.initFrom": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QStyleOptionButton: + "QStyleOptionButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComboBox: + "QStyleOptionComboBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionComboBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComplex: + "QStyleOptionComplex.__init__": [('PySide2.QtWidgets.QStyleOptionComplex',), ('int', 'int')], + + # class PySide2.QtWidgets.QStyleOptionDockWidget: + "QStyleOptionDockWidget.__init__": [(), ('PySide2.QtWidgets.QStyleOptionDockWidget',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFocusRect: + "QStyleOptionFocusRect.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFocusRect',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFrame: + "QStyleOptionFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionGraphicsItem: + "QStyleOptionGraphicsItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGraphicsItem',), ('int',)], + "QStyleOptionGraphicsItem.levelOfDetailFromTransform": ('PySide2.QtGui.QTransform',), + + # class PySide2.QtWidgets.QStyleOptionGroupBox: + "QStyleOptionGroupBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGroupBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionHeader: + "QStyleOptionHeader.__init__": [(), ('PySide2.QtWidgets.QStyleOptionHeader',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionMenuItem: + "QStyleOptionMenuItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionMenuItem',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionProgressBar: + "QStyleOptionProgressBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionProgressBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionRubberBand: + "QStyleOptionRubberBand.__init__": [(), ('PySide2.QtWidgets.QStyleOptionRubberBand',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSizeGrip: + "QStyleOptionSizeGrip.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSizeGrip',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSlider: + "QStyleOptionSlider.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSlider',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSpinBox: + "QStyleOptionSpinBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSpinBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTab: + "QStyleOptionTab.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTab',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabBarBase: + "QStyleOptionTabBarBase.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabBarBase',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabWidgetFrame: + "QStyleOptionTabWidgetFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTitleBar: + "QStyleOptionTitleBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTitleBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBar: + "QStyleOptionToolBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBox: + "QStyleOptionToolBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolButton: + "QStyleOptionToolButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionViewItem: + "QStyleOptionViewItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionViewItem',), ('int',)], + "QStyleOptionViewItem.__copy__": (), + + # class PySide2.QtWidgets.QStylePainter: + "QStylePainter.__init__": [(), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.begin": [('PySide2.QtGui.QPaintDevice',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex'), + "QStylePainter.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.drawItemPixmap": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStylePainter.drawItemText": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStylePainter.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.style": (), + + # class PySide2.QtWidgets.QStyledItemDelegate: + "QStyledItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QStyledItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.displayText": ('PySide2.support.signature.typing.Any', 'PySide2.QtCore.QLocale'), + "QStyledItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStyledItemDelegate.initStyleOption": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.itemEditorFactory": (), + "QStyledItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QStyledItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QSwipeGesture: + "QSwipeGesture.__init__": ('PySide2.QtCore.QObject',), + "QSwipeGesture.horizontalDirection": (), + "QSwipeGesture.setSwipeAngle": ('float',), + "QSwipeGesture.swipeAngle": (), + "QSwipeGesture.verticalDirection": (), + + # class PySide2.QtWidgets.QSystemTrayIcon: + "QSystemTrayIcon.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'PySide2.QtCore.QObject')], + "QSystemTrayIcon.contextMenu": (), + "QSystemTrayIcon.event": ('PySide2.QtCore.QEvent',), + "QSystemTrayIcon.geometry": (), + "QSystemTrayIcon.hide": (), + "QSystemTrayIcon.icon": (), + "QSystemTrayIcon.isSystemTrayAvailable": (), + "QSystemTrayIcon.isVisible": (), + "QSystemTrayIcon.setContextMenu": ('PySide2.QtWidgets.QMenu',), + "QSystemTrayIcon.setIcon": ('PySide2.QtGui.QIcon',), + "QSystemTrayIcon.setToolTip": ('str',), + "QSystemTrayIcon.setVisible": ('bool',), + "QSystemTrayIcon.show": (), + "QSystemTrayIcon.showMessage": ('str', 'str', 'PySide2.QtWidgets.QSystemTrayIcon.MessageIcon', 'int'), + "QSystemTrayIcon.supportsMessages": (), + "QSystemTrayIcon.toolTip": (), + + # class PySide2.QtWidgets.QTabBar: + "QTabBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabBar.addTab": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QTabBar.autoHide": (), + "QTabBar.changeCurrentOnDrag": (), + "QTabBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabBar.count": (), + "QTabBar.currentIndex": (), + "QTabBar.documentMode": (), + "QTabBar.drawBase": (), + "QTabBar.elideMode": (), + "QTabBar.event": ('PySide2.QtCore.QEvent',), + "QTabBar.expanding": (), + "QTabBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QTabBar.iconSize": (), + "QTabBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTab', 'int'), + "QTabBar.insertTab": [('int', 'PySide2.QtGui.QIcon', 'str'), ('int', 'str')], + "QTabBar.isMovable": (), + "QTabBar.isTabEnabled": ('int',), + "QTabBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabBar.minimumSizeHint": (), + "QTabBar.minimumTabSizeHint": ('int',), + "QTabBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.moveTab": ('int', 'int'), + "QTabBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabBar.removeTab": ('int',), + "QTabBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabBar.selectionBehaviorOnRemove": (), + "QTabBar.setAutoHide": ('bool',), + "QTabBar.setChangeCurrentOnDrag": ('bool',), + "QTabBar.setCurrentIndex": ('int',), + "QTabBar.setDocumentMode": ('bool',), + "QTabBar.setDrawBase": ('bool',), + "QTabBar.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabBar.setExpanding": ('bool',), + "QTabBar.setIconSize": ('PySide2.QtCore.QSize',), + "QTabBar.setMovable": ('bool',), + "QTabBar.setSelectionBehaviorOnRemove": ('PySide2.QtWidgets.QTabBar.SelectionBehavior',), + "QTabBar.setShape": ('PySide2.QtWidgets.QTabBar.Shape',), + "QTabBar.setTabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition', 'PySide2.QtWidgets.QWidget'), + "QTabBar.setTabData": ('int', 'PySide2.support.signature.typing.Any'), + "QTabBar.setTabEnabled": ('int', 'bool'), + "QTabBar.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabBar.setTabText": ('int', 'str'), + "QTabBar.setTabTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTabBar.setTabToolTip": ('int', 'str'), + "QTabBar.setTabWhatsThis": ('int', 'str'), + "QTabBar.setTabsClosable": ('bool',), + "QTabBar.setUsesScrollButtons": ('bool',), + "QTabBar.shape": (), + "QTabBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabBar.sizeHint": (), + "QTabBar.tabAt": ('PySide2.QtCore.QPoint',), + "QTabBar.tabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition'), + "QTabBar.tabData": ('int',), + "QTabBar.tabIcon": ('int',), + "QTabBar.tabInserted": ('int',), + "QTabBar.tabLayoutChange": (), + "QTabBar.tabRect": ('int',), + "QTabBar.tabRemoved": ('int',), + "QTabBar.tabSizeHint": ('int',), + "QTabBar.tabText": ('int',), + "QTabBar.tabTextColor": ('int',), + "QTabBar.tabToolTip": ('int',), + "QTabBar.tabWhatsThis": ('int',), + "QTabBar.tabsClosable": (), + "QTabBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTabBar.usesScrollButtons": (), + "QTabBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QTabWidget: + "QTabWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.addTab": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabWidget.clear": (), + "QTabWidget.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QTabWidget.count": (), + "QTabWidget.currentIndex": (), + "QTabWidget.currentWidget": (), + "QTabWidget.documentMode": (), + "QTabWidget.elideMode": (), + "QTabWidget.event": ('PySide2.QtCore.QEvent',), + "QTabWidget.hasHeightForWidth": (), + "QTabWidget.heightForWidth": ('int',), + "QTabWidget.iconSize": (), + "QTabWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), + "QTabWidget.insertTab": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.isMovable": (), + "QTabWidget.isTabEnabled": ('int',), + "QTabWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabWidget.minimumSizeHint": (), + "QTabWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabWidget.removeTab": ('int',), + "QTabWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabWidget.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QTabWidget.setCurrentIndex": ('int',), + "QTabWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.setDocumentMode": ('bool',), + "QTabWidget.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabWidget.setIconSize": ('PySide2.QtCore.QSize',), + "QTabWidget.setMovable": ('bool',), + "QTabWidget.setTabBar": ('PySide2.QtWidgets.QTabBar',), + "QTabWidget.setTabBarAutoHide": ('bool',), + "QTabWidget.setTabEnabled": ('int', 'bool'), + "QTabWidget.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabWidget.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QTabWidget.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QTabWidget.setTabText": ('int', 'str'), + "QTabWidget.setTabToolTip": ('int', 'str'), + "QTabWidget.setTabWhatsThis": ('int', 'str'), + "QTabWidget.setTabsClosable": ('bool',), + "QTabWidget.setUsesScrollButtons": ('bool',), + "QTabWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabWidget.sizeHint": (), + "QTabWidget.tabBar": (), + "QTabWidget.tabBarAutoHide": (), + "QTabWidget.tabIcon": ('int',), + "QTabWidget.tabInserted": ('int',), + "QTabWidget.tabPosition": (), + "QTabWidget.tabRemoved": ('int',), + "QTabWidget.tabShape": (), + "QTabWidget.tabText": ('int',), + "QTabWidget.tabToolTip": ('int',), + "QTabWidget.tabWhatsThis": ('int',), + "QTabWidget.tabsClosable": (), + "QTabWidget.usesScrollButtons": (), + "QTabWidget.widget": ('int',), + + # class PySide2.QtWidgets.QTableView: + "QTableView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTableView.clearSpans": (), + "QTableView.columnAt": ('int',), + "QTableView.columnCountChanged": ('int', 'int'), + "QTableView.columnMoved": ('int', 'int', 'int'), + "QTableView.columnResized": ('int', 'int', 'int'), + "QTableView.columnSpan": ('int', 'int'), + "QTableView.columnViewportPosition": ('int',), + "QTableView.columnWidth": ('int',), + "QTableView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTableView.doItemsLayout": (), + "QTableView.gridStyle": (), + "QTableView.hideColumn": ('int',), + "QTableView.hideRow": ('int',), + "QTableView.horizontalHeader": (), + "QTableView.horizontalOffset": (), + "QTableView.horizontalScrollbarAction": ('int',), + "QTableView.indexAt": ('PySide2.QtCore.QPoint',), + "QTableView.isColumnHidden": ('int',), + "QTableView.isCornerButtonEnabled": (), + "QTableView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTableView.isRowHidden": ('int',), + "QTableView.isSortingEnabled": (), + "QTableView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QTableView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTableView.resizeColumnToContents": ('int',), + "QTableView.resizeColumnsToContents": (), + "QTableView.resizeRowToContents": ('int',), + "QTableView.resizeRowsToContents": (), + "QTableView.rowAt": ('int',), + "QTableView.rowCountChanged": ('int', 'int'), + "QTableView.rowHeight": ('int',), + "QTableView.rowMoved": ('int', 'int', 'int'), + "QTableView.rowResized": ('int', 'int', 'int'), + "QTableView.rowSpan": ('int', 'int'), + "QTableView.rowViewportPosition": ('int',), + "QTableView.scrollContentsBy": ('int', 'int'), + "QTableView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableView.selectColumn": ('int',), + "QTableView.selectRow": ('int',), + "QTableView.selectedIndexes": (), + "QTableView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTableView.setColumnHidden": ('int', 'bool'), + "QTableView.setColumnWidth": ('int', 'int'), + "QTableView.setCornerButtonEnabled": ('bool',), + "QTableView.setGridStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QTableView.setHorizontalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTableView.setRowHeight": ('int', 'int'), + "QTableView.setRowHidden": ('int', 'bool'), + "QTableView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QTableView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTableView.setShowGrid": ('bool',), + "QTableView.setSortingEnabled": ('bool',), + "QTableView.setSpan": ('int', 'int', 'int', 'int'), + "QTableView.setVerticalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setWordWrap": ('bool',), + "QTableView.showColumn": ('int',), + "QTableView.showGrid": (), + "QTableView.showRow": ('int',), + "QTableView.sizeHintForColumn": ('int',), + "QTableView.sizeHintForRow": ('int',), + "QTableView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTableView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTableView.updateGeometries": (), + "QTableView.verticalHeader": (), + "QTableView.verticalOffset": (), + "QTableView.verticalScrollbarAction": ('int',), + "QTableView.viewOptions": (), + "QTableView.viewportSizeHint": (), + "QTableView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTableView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTableView.wordWrap": (), + + # class PySide2.QtWidgets.QTableWidget: + "QTableWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'int', 'PySide2.QtWidgets.QWidget')], + "QTableWidget.cellWidget": ('int', 'int'), + "QTableWidget.clear": (), + "QTableWidget.clearContents": (), + "QTableWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.column": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.columnCount": (), + "QTableWidget.currentColumn": (), + "QTableWidget.currentItem": (), + "QTableWidget.currentRow": (), + "QTableWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTableWidget.dropMimeData": ('int', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTableWidget.editItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.event": ('PySide2.QtCore.QEvent',), + "QTableWidget.findItems": ('str', 'MatchFlags'), + "QTableWidget.horizontalHeaderItem": ('int',), + "QTableWidget.indexFromItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.insertColumn": ('int',), + "QTableWidget.insertRow": ('int',), + "QTableWidget.isItemSelected": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.isSortingEnabled": (), + "QTableWidget.item": ('int', 'int'), + "QTableWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTableWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTableWidget.itemPrototype": (), + "QTableWidget.items": ('PySide2.QtCore.QMimeData',), + "QTableWidget.mimeData": ('list',), + "QTableWidget.mimeTypes": (), + "QTableWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.removeCellWidget": ('int', 'int'), + "QTableWidget.removeColumn": ('int',), + "QTableWidget.removeRow": ('int',), + "QTableWidget.row": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.rowCount": (), + "QTableWidget.scrollToItem": ('PySide2.QtWidgets.QTableWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableWidget.selectedItems": (), + "QTableWidget.selectedRanges": (), + "QTableWidget.setCellWidget": ('int', 'int', 'PySide2.QtWidgets.QWidget'), + "QTableWidget.setColumnCount": ('int',), + "QTableWidget.setCurrentCell": [('int', 'int'), ('int', 'int', 'SelectionFlags')], + "QTableWidget.setCurrentItem": [('PySide2.QtWidgets.QTableWidgetItem',), ('PySide2.QtWidgets.QTableWidgetItem', 'SelectionFlags')], + "QTableWidget.setHorizontalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setHorizontalHeaderLabels": ('PySide2.support.signature.typing.List',), + "QTableWidget.setItem": ('int', 'int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setItemPrototype": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.setItemSelected": ('PySide2.QtWidgets.QTableWidgetItem', 'bool'), + "QTableWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableWidget.setRangeSelected": ('PySide2.QtWidgets.QTableWidgetSelectionRange', 'bool'), + "QTableWidget.setRowCount": ('int',), + "QTableWidget.setSortingEnabled": ('bool',), + "QTableWidget.setVerticalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setVerticalHeaderLabels": ('PySide2.support.signature.typing.List',), + "QTableWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTableWidget.supportedDropActions": (), + "QTableWidget.takeHorizontalHeaderItem": ('int',), + "QTableWidget.takeItem": ('int', 'int'), + "QTableWidget.takeVerticalHeaderItem": ('int',), + "QTableWidget.verticalHeaderItem": ('int',), + "QTableWidget.visualColumn": ('int',), + "QTableWidget.visualItemRect": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.visualRow": ('int',), + + # class PySide2.QtWidgets.QTableWidgetItem: + "QTableWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'int'), ('PySide2.QtWidgets.QTableWidgetItem',), ('int',), ('str', 'int')], + "QTableWidgetItem.background": (), + "QTableWidgetItem.backgroundColor": (), + "QTableWidgetItem.checkState": (), + "QTableWidgetItem.clone": (), + "QTableWidgetItem.column": (), + "QTableWidgetItem.data": ('int',), + "QTableWidgetItem.flags": (), + "QTableWidgetItem.font": (), + "QTableWidgetItem.foreground": (), + "QTableWidgetItem.icon": (), + "QTableWidgetItem.isSelected": (), + "QTableWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTableWidgetItem.row": (), + "QTableWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QTableWidgetItem.setData": ('int', 'PySide2.support.signature.typing.Any'), + "QTableWidgetItem.setFlags": ('ItemFlags',), + "QTableWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QTableWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QTableWidgetItem.setSelected": ('bool',), + "QTableWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QTableWidgetItem.setStatusTip": ('str',), + "QTableWidgetItem.setText": ('str',), + "QTableWidgetItem.setTextAlignment": ('int',), + "QTableWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setToolTip": ('str',), + "QTableWidgetItem.setWhatsThis": ('str',), + "QTableWidgetItem.sizeHint": (), + "QTableWidgetItem.statusTip": (), + "QTableWidgetItem.tableWidget": (), + "QTableWidgetItem.text": (), + "QTableWidgetItem.textAlignment": (), + "QTableWidgetItem.textColor": (), + "QTableWidgetItem.toolTip": (), + "QTableWidgetItem.type": (), + "QTableWidgetItem.whatsThis": (), + "QTableWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTableWidgetSelectionRange: + "QTableWidgetSelectionRange.__init__": [(), ('PySide2.QtWidgets.QTableWidgetSelectionRange',), ('int', 'int', 'int', 'int')], + "QTableWidgetSelectionRange.__copy__": (), + "QTableWidgetSelectionRange.bottomRow": (), + "QTableWidgetSelectionRange.columnCount": (), + "QTableWidgetSelectionRange.leftColumn": (), + "QTableWidgetSelectionRange.rightColumn": (), + "QTableWidgetSelectionRange.rowCount": (), + "QTableWidgetSelectionRange.topRow": (), + + # class PySide2.QtWidgets.QTapAndHoldGesture: + "QTapAndHoldGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapAndHoldGesture.position": (), + "QTapAndHoldGesture.setPosition": ('PySide2.QtCore.QPointF',), + "QTapAndHoldGesture.setTimeout": ('int',), + "QTapAndHoldGesture.timeout": (), + + # class PySide2.QtWidgets.QTapGesture: + "QTapGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapGesture.position": (), + "QTapGesture.setPosition": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QTextBrowser: + "QTextBrowser.__init__": ('PySide2.QtWidgets.QWidget',), + "QTextBrowser.backward": (), + "QTextBrowser.backwardHistoryCount": (), + "QTextBrowser.clearHistory": (), + "QTextBrowser.event": ('PySide2.QtCore.QEvent',), + "QTextBrowser.focusNextPrevChild": ('bool',), + "QTextBrowser.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextBrowser.forward": (), + "QTextBrowser.forwardHistoryCount": (), + "QTextBrowser.historyTitle": ('int',), + "QTextBrowser.historyUrl": ('int',), + "QTextBrowser.home": (), + "QTextBrowser.isBackwardAvailable": (), + "QTextBrowser.isForwardAvailable": (), + "QTextBrowser.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextBrowser.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextBrowser.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.openExternalLinks": (), + "QTextBrowser.openLinks": (), + "QTextBrowser.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextBrowser.reload": (), + "QTextBrowser.searchPaths": (), + "QTextBrowser.setOpenExternalLinks": ('bool',), + "QTextBrowser.setOpenLinks": ('bool',), + "QTextBrowser.setSearchPaths": ('PySide2.support.signature.typing.List',), + "QTextBrowser.setSource": ('PySide2.QtCore.QUrl',), + "QTextBrowser.source": (), + + # class PySide2.QtWidgets.QTextEdit: + "QTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QTextEdit.acceptRichText": (), + "QTextEdit.alignment": (), + "QTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QTextEdit.append": ('str',), + "QTextEdit.autoFormatting": (), + "QTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.canPaste": (), + "QTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QTextEdit.clear": (), + "QTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QTextEdit.copy": (), + "QTextEdit.createMimeDataFromSelection": (), + "QTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QTextEdit.currentCharFormat": (), + "QTextEdit.currentFont": (), + "QTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextEdit.cursorWidth": (), + "QTextEdit.cut": (), + "QTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.document": (), + "QTextEdit.documentTitle": (), + "QTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTextEdit.ensureCursorVisible": (), + "QTextEdit.event": ('PySide2.QtCore.QEvent',), + "QTextEdit.extraSelections": (), + "QTextEdit.find": [('PySide2.QtCore.QRegExp', 'FindFlags'), ('int',), ('str', 'FindFlags')], + "QTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.focusNextPrevChild": ('bool',), + "QTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.fontFamily": (), + "QTextEdit.fontItalic": (), + "QTextEdit.fontPointSize": (), + "QTextEdit.fontUnderline": (), + "QTextEdit.fontWeight": (), + "QTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'PySide2.support.signature.typing.Any')], + "QTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.insertHtml": ('str',), + "QTextEdit.insertPlainText": ('str',), + "QTextEdit.isReadOnly": (), + "QTextEdit.isUndoRedoEnabled": (), + "QTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.lineWrapColumnOrWidth": (), + "QTextEdit.lineWrapMode": (), + "QTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextEdit.overwriteMode": (), + "QTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextEdit.paste": (), + "QTextEdit.placeholderText": (), + "QTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextEdit.redo": (), + "QTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTextEdit.scrollContentsBy": ('int', 'int'), + "QTextEdit.scrollToAnchor": ('str',), + "QTextEdit.selectAll": (), + "QTextEdit.setAcceptRichText": ('bool',), + "QTextEdit.setAlignment": ('Alignment',), + "QTextEdit.setAutoFormatting": ('AutoFormatting',), + "QTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.setCurrentFont": ('PySide2.QtGui.QFont',), + "QTextEdit.setCursorWidth": ('int',), + "QTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QTextEdit.setDocumentTitle": ('str',), + "QTextEdit.setExtraSelections": ('list',), + "QTextEdit.setFontFamily": ('str',), + "QTextEdit.setFontItalic": ('bool',), + "QTextEdit.setFontPointSize": ('float',), + "QTextEdit.setFontUnderline": ('bool',), + "QTextEdit.setFontWeight": ('int',), + "QTextEdit.setHtml": ('str',), + "QTextEdit.setLineWrapColumnOrWidth": ('int',), + "QTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QTextEdit.LineWrapMode',), + "QTextEdit.setOverwriteMode": ('bool',), + "QTextEdit.setPlaceholderText": ('str',), + "QTextEdit.setPlainText": ('str',), + "QTextEdit.setReadOnly": ('bool',), + "QTextEdit.setTabChangesFocus": ('bool',), + "QTextEdit.setTabStopWidth": ('int',), + "QTextEdit.setText": ('str',), + "QTextEdit.setTextBackgroundColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.setTextInteractionFlags": ('TextInteractionFlags',), + "QTextEdit.setUndoRedoEnabled": ('bool',), + "QTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTextEdit.tabChangesFocus": (), + "QTextEdit.tabStopWidth": (), + "QTextEdit.textBackgroundColor": (), + "QTextEdit.textColor": (), + "QTextEdit.textCursor": (), + "QTextEdit.textInteractionFlags": (), + "QTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTextEdit.toHtml": (), + "QTextEdit.toPlainText": (), + "QTextEdit.undo": (), + "QTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QTextEdit.wordWrapMode": (), + "QTextEdit.zoomIn": ('int',), + "QTextEdit.zoomInF": ('float',), + "QTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QTileRules: + "QTileRules.__init__": [('PySide2.QtCore.Qt.TileRule',), ('PySide2.QtCore.Qt.TileRule', 'PySide2.QtCore.Qt.TileRule'), ('PySide2.QtWidgets.QTileRules',)], + "QTileRules.__copy__": (), + + # class PySide2.QtWidgets.QTimeEdit: + "QTimeEdit.__init__": [('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QToolBar: + "QToolBar.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QToolBar.actionAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QToolBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QToolBar.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str')], + "QToolBar.addSeparator": (), + "QToolBar.addWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBar.allowedAreas": (), + "QToolBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBar.clear": (), + "QToolBar.event": ('PySide2.QtCore.QEvent',), + "QToolBar.iconSize": (), + "QToolBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolBar',), + "QToolBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QToolBar.insertWidget": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget'), + "QToolBar.isAreaAllowed": ('PySide2.QtCore.Qt.ToolBarArea',), + "QToolBar.isFloatable": (), + "QToolBar.isFloating": (), + "QToolBar.isMovable": (), + "QToolBar.orientation": (), + "QToolBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolBar.setAllowedAreas": ('ToolBarAreas',), + "QToolBar.setFloatable": ('bool',), + "QToolBar.setIconSize": ('PySide2.QtCore.QSize',), + "QToolBar.setMovable": ('bool',), + "QToolBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QToolBar.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolBar.toggleViewAction": (), + "QToolBar.toolButtonStyle": (), + "QToolBar.widgetForAction": ('PySide2.QtWidgets.QAction',), + + # class PySide2.QtWidgets.QToolBox: + "QToolBox.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QToolBox.addItem": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBox.count": (), + "QToolBox.currentIndex": (), + "QToolBox.currentWidget": (), + "QToolBox.event": ('PySide2.QtCore.QEvent',), + "QToolBox.indexOf": ('PySide2.QtWidgets.QWidget',), + "QToolBox.insertItem": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.isItemEnabled": ('int',), + "QToolBox.itemIcon": ('int',), + "QToolBox.itemInserted": ('int',), + "QToolBox.itemRemoved": ('int',), + "QToolBox.itemText": ('int',), + "QToolBox.itemToolTip": ('int',), + "QToolBox.removeItem": ('int',), + "QToolBox.setCurrentIndex": ('int',), + "QToolBox.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBox.setItemEnabled": ('int', 'bool'), + "QToolBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QToolBox.setItemText": ('int', 'str'), + "QToolBox.setItemToolTip": ('int', 'str'), + "QToolBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QToolBox.widget": ('int',), + + # class PySide2.QtWidgets.QToolButton: + "QToolButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QToolButton.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolButton.arrowType": (), + "QToolButton.autoRaise": (), + "QToolButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.defaultAction": (), + "QToolButton.enterEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.event": ('PySide2.QtCore.QEvent',), + "QToolButton.hitButton": ('PySide2.QtCore.QPoint',), + "QToolButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolButton',), + "QToolButton.leaveEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.menu": (), + "QToolButton.minimumSizeHint": (), + "QToolButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.nextCheckState": (), + "QToolButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolButton.popupMode": (), + "QToolButton.setArrowType": ('PySide2.QtCore.Qt.ArrowType',), + "QToolButton.setAutoRaise": ('bool',), + "QToolButton.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QToolButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QToolButton.setPopupMode": ('PySide2.QtWidgets.QToolButton.ToolButtonPopupMode',), + "QToolButton.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolButton.showMenu": (), + "QToolButton.sizeHint": (), + "QToolButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QToolButton.toolButtonStyle": (), + + # class PySide2.QtWidgets.QToolTip: + "QToolTip.palette": (), + "QToolTip.font": (), + "QToolTip.hideText": (), + "QToolTip.isVisible": (), + "QToolTip.setFont": ('PySide2.QtGui.QFont',), + "QToolTip.setPalette": ('PySide2.QtGui.QPalette',), + "QToolTip.showText": [('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect', 'int')], + "QToolTip.text": (), + + # class PySide2.QtWidgets.QTreeView: + "QTreeView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeView.allColumnsShowFocus": (), + "QTreeView.autoExpandDelay": (), + "QTreeView.collapse": ('PySide2.QtCore.QModelIndex',), + "QTreeView.collapseAll": (), + "QTreeView.columnAt": ('int',), + "QTreeView.columnCountChanged": ('int', 'int'), + "QTreeView.columnMoved": (), + "QTreeView.columnResized": ('int', 'int', 'int'), + "QTreeView.columnViewportPosition": ('int',), + "QTreeView.columnWidth": ('int',), + "QTreeView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTreeView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QTreeView.doItemsLayout": (), + "QTreeView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTreeView.drawBranches": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawRow": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawTree": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QRegion'), + "QTreeView.expand": ('PySide2.QtCore.QModelIndex',), + "QTreeView.expandAll": (), + "QTreeView.expandToDepth": ('int',), + "QTreeView.expandsOnDoubleClick": (), + "QTreeView.header": (), + "QTreeView.hideColumn": ('int',), + "QTreeView.horizontalOffset": (), + "QTreeView.horizontalScrollbarAction": ('int',), + "QTreeView.indentation": (), + "QTreeView.indexAbove": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexAt": ('PySide2.QtCore.QPoint',), + "QTreeView.indexBelow": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexRowSizeHint": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isAnimated": (), + "QTreeView.isColumnHidden": ('int',), + "QTreeView.isExpanded": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isHeaderHidden": (), + "QTreeView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isRowHidden": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isSortingEnabled": (), + "QTreeView.itemsExpandable": (), + "QTreeView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTreeView.keyboardSearch": ('str',), + "QTreeView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QTreeView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTreeView.reexpand": (), + "QTreeView.reset": (), + "QTreeView.resetIndentation": (), + "QTreeView.resizeColumnToContents": ('int',), + "QTreeView.rootIsDecorated": (), + "QTreeView.rowHeight": ('PySide2.QtCore.QModelIndex',), + "QTreeView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.scrollContentsBy": ('int', 'int'), + "QTreeView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeView.selectAll": (), + "QTreeView.selectedIndexes": (), + "QTreeView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTreeView.setAllColumnsShowFocus": ('bool',), + "QTreeView.setAnimated": ('bool',), + "QTreeView.setAutoExpandDelay": ('int',), + "QTreeView.setColumnHidden": ('int', 'bool'), + "QTreeView.setColumnWidth": ('int', 'int'), + "QTreeView.setExpanded": ('PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setExpandsOnDoubleClick": ('bool',), + "QTreeView.setFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTreeView.setHeaderHidden": ('bool',), + "QTreeView.setIndentation": ('int',), + "QTreeView.setItemsExpandable": ('bool',), + "QTreeView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeView.setRootIsDecorated": ('bool',), + "QTreeView.setRowHidden": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QTreeView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeView.setSortingEnabled": ('bool',), + "QTreeView.setTreePosition": ('int',), + "QTreeView.setUniformRowHeights": ('bool',), + "QTreeView.setWordWrap": ('bool',), + "QTreeView.showColumn": ('int',), + "QTreeView.sizeHintForColumn": ('int',), + "QTreeView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTreeView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTreeView.treePosition": (), + "QTreeView.uniformRowHeights": (), + "QTreeView.updateGeometries": (), + "QTreeView.verticalOffset": (), + "QTreeView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QTreeView.viewportSizeHint": (), + "QTreeView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTreeView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTreeView.wordWrap": (), + + # class PySide2.QtWidgets.QTreeWidget: + "QTreeWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeWidget.addTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.addTopLevelItems": ('list',), + "QTreeWidget.clear": (), + "QTreeWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.collapseItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.columnCount": (), + "QTreeWidget.currentColumn": (), + "QTreeWidget.currentItem": (), + "QTreeWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTreeWidget.dropMimeData": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTreeWidget.editItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.event": ('PySide2.QtCore.QEvent',), + "QTreeWidget.expandItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.findItems": ('str', 'MatchFlags', 'int'), + "QTreeWidget.headerItem": (), + "QTreeWidget.indexFromItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.indexOfTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.insertTopLevelItem": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidget.insertTopLevelItems": ('int', 'list'), + "QTreeWidget.invisibleRootItem": (), + "QTreeWidget.isFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAbove": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTreeWidget.itemBelow": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeWidget.itemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.items": ('PySide2.QtCore.QMimeData',), + "QTreeWidget.mimeData": ('list',), + "QTreeWidget.mimeTypes": (), + "QTreeWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.removeItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.scrollToItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeWidget.selectedItems": (), + "QTreeWidget.setColumnCount": ('int',), + "QTreeWidget.setCurrentItem": [('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'SelectionFlags')], + "QTreeWidget.setFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setHeaderItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.setHeaderLabel": ('str',), + "QTreeWidget.setHeaderLabels": ('PySide2.support.signature.typing.List',), + "QTreeWidget.setItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtWidgets.QWidget'), + "QTreeWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeWidget.sortColumn": (), + "QTreeWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidget.supportedDropActions": (), + "QTreeWidget.takeTopLevelItem": ('int',), + "QTreeWidget.topLevelItem": ('int',), + "QTreeWidget.topLevelItemCount": (), + "QTreeWidget.visualItemRect": ('PySide2.QtWidgets.QTreeWidgetItem',), + + # class PySide2.QtWidgets.QTreeWidgetItem: + "QTreeWidgetItem.__init__": [('PySide2.QtWidgets.QTreeWidget', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'PySide2.support.signature.typing.List', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.support.signature.typing.List', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.support.signature.typing.List', 'int'), ('int',)], + "QTreeWidgetItem.addChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.addChildren": ('list',), + "QTreeWidgetItem.background": ('int',), + "QTreeWidgetItem.backgroundColor": ('int',), + "QTreeWidgetItem.checkState": ('int',), + "QTreeWidgetItem.child": ('int',), + "QTreeWidgetItem.childCount": (), + "QTreeWidgetItem.childIndicatorPolicy": (), + "QTreeWidgetItem.clone": (), + "QTreeWidgetItem.columnCount": (), + "QTreeWidgetItem.data": ('int', 'int'), + "QTreeWidgetItem.emitDataChanged": (), + "QTreeWidgetItem.flags": (), + "QTreeWidgetItem.font": ('int',), + "QTreeWidgetItem.foreground": ('int',), + "QTreeWidgetItem.icon": ('int',), + "QTreeWidgetItem.indexOfChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.insertChild": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidgetItem.insertChildren": ('int', 'list'), + "QTreeWidgetItem.isDisabled": (), + "QTreeWidgetItem.isExpanded": (), + "QTreeWidgetItem.isFirstColumnSpanned": (), + "QTreeWidgetItem.isHidden": (), + "QTreeWidgetItem.isSelected": (), + "QTreeWidgetItem.parent": (), + "QTreeWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTreeWidgetItem.removeChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.setBackground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setBackgroundColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setCheckState": ('int', 'PySide2.QtCore.Qt.CheckState'), + "QTreeWidgetItem.setChildIndicatorPolicy": ('PySide2.QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy',), + "QTreeWidgetItem.setData": ('int', 'int', 'PySide2.support.signature.typing.Any'), + "QTreeWidgetItem.setDisabled": ('bool',), + "QTreeWidgetItem.setExpanded": ('bool',), + "QTreeWidgetItem.setFirstColumnSpanned": ('bool',), + "QTreeWidgetItem.setFlags": ('ItemFlags',), + "QTreeWidgetItem.setFont": ('int', 'PySide2.QtGui.QFont'), + "QTreeWidgetItem.setForeground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setHidden": ('bool',), + "QTreeWidgetItem.setIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTreeWidgetItem.setSelected": ('bool',), + "QTreeWidgetItem.setSizeHint": ('int', 'PySide2.QtCore.QSize'), + "QTreeWidgetItem.setStatusTip": ('int', 'str'), + "QTreeWidgetItem.setText": ('int', 'str'), + "QTreeWidgetItem.setTextAlignment": ('int', 'int'), + "QTreeWidgetItem.setTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setToolTip": ('int', 'str'), + "QTreeWidgetItem.setWhatsThis": ('int', 'str'), + "QTreeWidgetItem.sizeHint": ('int',), + "QTreeWidgetItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidgetItem.statusTip": ('int',), + "QTreeWidgetItem.takeChild": ('int',), + "QTreeWidgetItem.takeChildren": (), + "QTreeWidgetItem.text": ('int',), + "QTreeWidgetItem.textAlignment": ('int',), + "QTreeWidgetItem.textColor": ('int',), + "QTreeWidgetItem.toolTip": ('int',), + "QTreeWidgetItem.treeWidget": (), + "QTreeWidgetItem.type": (), + "QTreeWidgetItem.whatsThis": ('int',), + "QTreeWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTreeWidgetItemIterator: + "QTreeWidgetItemIterator.__init__": [('PySide2.QtWidgets.QTreeWidget', 'IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItem', 'IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItemIterator',)], + "QTreeWidgetItemIterator.__copy__": (), + "QTreeWidgetItemIterator.value": (), + + # class PySide2.QtWidgets.QUndoCommand: + "QUndoCommand.__init__": [('PySide2.QtWidgets.QUndoCommand',), ('str', 'PySide2.QtWidgets.QUndoCommand')], + "QUndoCommand.actionText": (), + "QUndoCommand.child": ('int',), + "QUndoCommand.childCount": (), + "QUndoCommand.id": (), + "QUndoCommand.mergeWith": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoCommand.redo": (), + "QUndoCommand.setText": ('str',), + "QUndoCommand.text": (), + "QUndoCommand.undo": (), + + # class PySide2.QtWidgets.QUndoGroup: + "QUndoGroup.__init__": ('PySide2.QtCore.QObject',), + "QUndoGroup.activeStack": (), + "QUndoGroup.addStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.canRedo": (), + "QUndoGroup.canUndo": (), + "QUndoGroup.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.isClean": (), + "QUndoGroup.redo": (), + "QUndoGroup.redoText": (), + "QUndoGroup.removeStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.setActiveStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.stacks": (), + "QUndoGroup.undo": (), + "QUndoGroup.undoText": (), + + # class PySide2.QtWidgets.QUndoStack: + "QUndoStack.__init__": ('PySide2.QtCore.QObject',), + "QUndoStack.beginMacro": ('str',), + "QUndoStack.canRedo": (), + "QUndoStack.canUndo": (), + "QUndoStack.cleanIndex": (), + "QUndoStack.clear": (), + "QUndoStack.command": ('int',), + "QUndoStack.count": (), + "QUndoStack.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.endMacro": (), + "QUndoStack.index": (), + "QUndoStack.isActive": (), + "QUndoStack.isClean": (), + "QUndoStack.push": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoStack.redo": (), + "QUndoStack.redoText": (), + "QUndoStack.setActive": ('bool',), + "QUndoStack.setClean": (), + "QUndoStack.setIndex": ('int',), + "QUndoStack.setUndoLimit": ('int',), + "QUndoStack.text": ('int',), + "QUndoStack.undo": (), + "QUndoStack.undoLimit": (), + "QUndoStack.undoText": (), + + # class PySide2.QtWidgets.QUndoView: + "QUndoView.__init__": [('PySide2.QtWidgets.QUndoGroup', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QUndoStack', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QUndoView.cleanIcon": (), + "QUndoView.emptyLabel": (), + "QUndoView.group": (), + "QUndoView.setCleanIcon": ('PySide2.QtGui.QIcon',), + "QUndoView.setEmptyLabel": ('str',), + "QUndoView.setGroup": ('PySide2.QtWidgets.QUndoGroup',), + "QUndoView.setStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoView.stack": (), + + # class PySide2.QtWidgets.QVBoxLayout: + "QVBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QWhatsThis: + "QWhatsThis.enterWhatsThisMode": (), + "QWhatsThis.createAction": ('PySide2.QtCore.QObject',), + "QWhatsThis.hideText": (), + "QWhatsThis.inWhatsThisMode": (), + "QWhatsThis.leaveWhatsThisMode": (), + "QWhatsThis.showText": ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), + + # class PySide2.QtWidgets.QWidget: + "QWidget.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWidget.acceptDrops": (), + "QWidget.accessibleDescription": (), + "QWidget.accessibleName": (), + "QWidget.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QWidget.actions": (), + "QWidget.activateWindow": (), + "QWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QWidget.addActions": ('list',), + "QWidget.adjustSize": (), + "QWidget.autoFillBackground": (), + "QWidget.backgroundRole": (), + "QWidget.backingStore": (), + "QWidget.baseSize": (), + "QWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QWidget.childAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.childrenRect": (), + "QWidget.childrenRegion": (), + "QWidget.clearFocus": (), + "QWidget.clearMask": (), + "QWidget.close": (), + "QWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QWidget.contentsMargins": (), + "QWidget.contentsRect": (), + "QWidget.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWidget.contextMenuPolicy": (), + "QWidget.create": ('int', 'bool', 'bool'), + "QWidget.createWinId": (), + "QWidget.createWindowContainer": ('PySide2.QtGui.QWindow', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWidget.cursor": (), + "QWidget.destroy": ('bool', 'bool'), + "QWidget.devType": (), + "QWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWidget.effectiveWinId": (), + "QWidget.ensurePolished": (), + "QWidget.enterEvent": ('PySide2.QtCore.QEvent',), + "QWidget.event": ('PySide2.QtCore.QEvent',), + "QWidget.find": ('int',), + "QWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusNextChild": (), + "QWidget.focusNextPrevChild": ('bool',), + "QWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusPolicy": (), + "QWidget.focusPreviousChild": (), + "QWidget.focusProxy": (), + "QWidget.focusWidget": (), + "QWidget.font": (), + "QWidget.fontInfo": (), + "QWidget.fontMetrics": (), + "QWidget.foregroundRole": (), + "QWidget.frameGeometry": (), + "QWidget.frameSize": (), + "QWidget.geometry": (), + "QWidget.getContentsMargins": ('int', 'int', 'int', 'int'), + "QWidget.grab": ('PySide2.QtCore.QRect',), + "QWidget.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'GestureFlags'), + "QWidget.grabKeyboard": (), + "QWidget.grabMouse": [(), ('PySide2.QtGui.QCursor',)], + "QWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QWidget.graphicsEffect": (), + "QWidget.graphicsProxyWidget": (), + "QWidget.hasFocus": (), + "QWidget.hasHeightForWidth": (), + "QWidget.hasMouseTracking": (), + "QWidget.height": (), + "QWidget.heightForWidth": ('int',), + "QWidget.hide": (), + "QWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWidget.initPainter": ('PySide2.QtGui.QPainter',), + "QWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QWidget.inputMethodHints": (), + "QWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QWidget.internalWinId": (), + "QWidget.isActiveWindow": (), + "QWidget.isAncestorOf": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabled": (), + "QWidget.isEnabledTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabledToTLW": (), + "QWidget.isFullScreen": (), + "QWidget.isHidden": (), + "QWidget.isLeftToRight": (), + "QWidget.isMaximized": (), + "QWidget.isMinimized": (), + "QWidget.isModal": (), + "QWidget.isRightToLeft": (), + "QWidget.isTopLevel": (), + "QWidget.isVisible": (), + "QWidget.isVisibleTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isWindow": (), + "QWidget.isWindowModified": (), + "QWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyboardGrabber": (), + "QWidget.layout": (), + "QWidget.layoutDirection": (), + "QWidget.leaveEvent": ('PySide2.QtCore.QEvent',), + "QWidget.locale": (), + "QWidget.lower": (), + "QWidget.mapFrom": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapFromParent": ('PySide2.QtCore.QPoint',), + "QWidget.mapTo": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapToParent": ('PySide2.QtCore.QPoint',), + "QWidget.mask": (), + "QWidget.maximumHeight": (), + "QWidget.maximumSize": (), + "QWidget.maximumWidth": (), + "QWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QWidget.minimumHeight": (), + "QWidget.minimumSize": (), + "QWidget.minimumSizeHint": (), + "QWidget.minimumWidth": (), + "QWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseGrabber": (), + "QWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWidget.nativeParentWidget": (), + "QWidget.nextInFocusChain": (), + "QWidget.normalGeometry": (), + "QWidget.overrideWindowFlags": ('WindowFlags',), + "QWidget.overrideWindowState": ('WindowStates',), + "QWidget.paintEngine": (), + "QWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWidget.palette": (), + "QWidget.parentWidget": (), + "QWidget.pos": (), + "QWidget.previousInFocusChain": (), + "QWidget.raise_": (), + "QWidget.rect": (), + "QWidget.redirected": ('PySide2.QtCore.QPoint',), + "QWidget.releaseKeyboard": (), + "QWidget.releaseMouse": (), + "QWidget.releaseShortcut": ('int',), + "QWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QWidget.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags')], + "QWidget.repaint": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWidget.restoreGeometry": ('PySide2.QtCore.QByteArray',), + "QWidget.saveGeometry": (), + "QWidget.scroll": [('int', 'int'), ('int', 'int', 'PySide2.QtCore.QRect')], + "QWidget.setAcceptDrops": ('bool',), + "QWidget.setAccessibleDescription": ('str',), + "QWidget.setAccessibleName": ('str',), + "QWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QWidget.setAutoFillBackground": ('bool',), + "QWidget.setBackgroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setBaseSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QWidget.setContextMenuPolicy": ('PySide2.QtCore.Qt.ContextMenuPolicy',), + "QWidget.setCursor": ('PySide2.QtGui.QCursor',), + "QWidget.setDisabled": ('bool',), + "QWidget.setEnabled": ('bool',), + "QWidget.setFixedHeight": ('int',), + "QWidget.setFixedSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setFixedWidth": ('int',), + "QWidget.setFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QWidget.setFocusProxy": ('PySide2.QtWidgets.QWidget',), + "QWidget.setFont": ('PySide2.QtGui.QFont',), + "QWidget.setForegroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWidget.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QWidget.setHidden": ('bool',), + "QWidget.setInputMethodHints": ('InputMethodHints',), + "QWidget.setLayout": ('PySide2.QtWidgets.QLayout',), + "QWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QWidget.setLocale": ('PySide2.QtCore.QLocale',), + "QWidget.setMask": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QRegion',)], + "QWidget.setMaximumHeight": ('int',), + "QWidget.setMaximumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMaximumWidth": ('int',), + "QWidget.setMinimumHeight": ('int',), + "QWidget.setMinimumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMinimumWidth": ('int',), + "QWidget.setMouseTracking": ('bool',), + "QWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QWidget.setParent": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QWidget.setShortcutEnabled": ('int', 'bool'), + "QWidget.setSizeIncrement": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy')], + "QWidget.setStatusTip": ('str',), + "QWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QWidget.setStyleSheet": ('str',), + "QWidget.setTabOrder": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), + "QWidget.setToolTip": ('str',), + "QWidget.setToolTipDuration": ('int',), + "QWidget.setUpdatesEnabled": ('bool',), + "QWidget.setVisible": ('bool',), + "QWidget.setWhatsThis": ('str',), + "QWidget.setWindowFilePath": ('str',), + "QWidget.setWindowFlags": ('WindowFlags',), + "QWidget.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QWidget.setWindowIconText": ('str',), + "QWidget.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWidget.setWindowModified": ('bool',), + "QWidget.setWindowOpacity": ('float',), + "QWidget.setWindowRole": ('str',), + "QWidget.setWindowState": ('WindowStates',), + "QWidget.setWindowTitle": ('str',), + "QWidget.sharedPainter": (), + "QWidget.show": (), + "QWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWidget.showFullScreen": (), + "QWidget.showMaximized": (), + "QWidget.showMinimized": (), + "QWidget.showNormal": (), + "QWidget.size": (), + "QWidget.sizeHint": (), + "QWidget.sizeIncrement": (), + "QWidget.sizePolicy": (), + "QWidget.stackUnder": ('PySide2.QtWidgets.QWidget',), + "QWidget.statusTip": (), + "QWidget.style": (), + "QWidget.styleSheet": (), + "QWidget.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QWidget.toolTip": (), + "QWidget.toolTipDuration": (), + "QWidget.topLevelWidget": (), + "QWidget.underMouse": (), + "QWidget.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QWidget.unsetCursor": (), + "QWidget.unsetLayoutDirection": (), + "QWidget.unsetLocale": (), + "QWidget.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.updateGeometry": (), + "QWidget.updateMicroFocus": (), + "QWidget.updatesEnabled": (), + "QWidget.visibleRegion": (), + "QWidget.whatsThis": (), + "QWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWidget.width": (), + "QWidget.winId": (), + "QWidget.window": (), + "QWidget.windowFilePath": (), + "QWidget.windowFlags": (), + "QWidget.windowHandle": (), + "QWidget.windowIcon": (), + "QWidget.windowIconText": (), + "QWidget.windowModality": (), + "QWidget.windowOpacity": (), + "QWidget.windowRole": (), + "QWidget.windowState": (), + "QWidget.windowTitle": (), + "QWidget.windowType": (), + "QWidget.x": (), + "QWidget.y": (), + + # class PySide2.QtWidgets.QWidgetAction: + "QWidgetAction.__init__": ('PySide2.QtCore.QObject',), + "QWidgetAction.createWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.createdWidgets": (), + "QWidgetAction.defaultWidget": (), + "QWidgetAction.deleteWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.event": ('PySide2.QtCore.QEvent',), + "QWidgetAction.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QWidgetAction.releaseWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.requestWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.setDefaultWidget": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QWidgetItem: + "QWidgetItem.__init__": ('PySide2.QtWidgets.QWidget',), + "QWidgetItem.controlTypes": (), + "QWidgetItem.expandingDirections": (), + "QWidgetItem.geometry": (), + "QWidgetItem.hasHeightForWidth": (), + "QWidgetItem.heightForWidth": ('int',), + "QWidgetItem.isEmpty": (), + "QWidgetItem.maximumSize": (), + "QWidgetItem.minimumSize": (), + "QWidgetItem.setGeometry": ('PySide2.QtCore.QRect',), + "QWidgetItem.sizeHint": (), + "QWidgetItem.widget": (), + + # class PySide2.QtWidgets.QWizard: + "QWizard.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWizard.addPage": ('PySide2.QtWidgets.QWizardPage',), + "QWizard.back": (), + "QWizard.button": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.cleanupPage": ('int',), + "QWizard.currentId": (), + "QWizard.currentPage": (), + "QWizard.done": ('int',), + "QWizard.event": ('PySide2.QtCore.QEvent',), + "QWizard.field": ('str',), + "QWizard.hasVisitedPage": ('int',), + "QWizard.initializePage": ('int',), + "QWizard.next": (), + "QWizard.nextId": (), + "QWizard.options": (), + "QWizard.page": ('int',), + "QWizard.pageIds": (), + "QWizard.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWizard.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizard.removePage": ('int',), + "QWizard.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWizard.restart": (), + "QWizard.setButton": ('PySide2.QtWidgets.QWizard.WizardButton', 'PySide2.QtWidgets.QAbstractButton'), + "QWizard.setButtonLayout": ('list',), + "QWizard.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizard.setDefaultProperty": ('str', 'str', 'str'), + "QWizard.setField": ('str', 'PySide2.support.signature.typing.Any'), + "QWizard.setOption": ('PySide2.QtWidgets.QWizard.WizardOption', 'bool'), + "QWizard.setOptions": ('WizardOptions',), + "QWizard.setPage": ('int', 'PySide2.QtWidgets.QWizardPage'), + "QWizard.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizard.setSideWidget": ('PySide2.QtWidgets.QWidget',), + "QWizard.setStartId": ('int',), + "QWizard.setSubTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setVisible": ('bool',), + "QWizard.setWizardStyle": ('PySide2.QtWidgets.QWizard.WizardStyle',), + "QWizard.sideWidget": (), + "QWizard.sizeHint": (), + "QWizard.startId": (), + "QWizard.subTitleFormat": (), + "QWizard.testOption": ('PySide2.QtWidgets.QWizard.WizardOption',), + "QWizard.titleFormat": (), + "QWizard.validateCurrentPage": (), + "QWizard.visitedPages": (), + "QWizard.wizardStyle": (), + + # class PySide2.QtWidgets.QWizardPage: + "QWizardPage.__init__": ('PySide2.QtWidgets.QWidget',), + "QWizardPage.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizardPage.cleanupPage": (), + "QWizardPage.field": ('str',), + "QWizardPage.initializePage": (), + "QWizardPage.isCommitPage": (), + "QWizardPage.isComplete": (), + "QWizardPage.isFinalPage": (), + "QWizardPage.nextId": (), + "QWizardPage.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizardPage.registerField": ('str', 'PySide2.QtWidgets.QWidget', 'str', 'str'), + "QWizardPage.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizardPage.setCommitPage": ('bool',), + "QWizardPage.setField": ('str', 'PySide2.support.signature.typing.Any'), + "QWizardPage.setFinalPage": ('bool',), + "QWizardPage.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizardPage.setSubTitle": ('str',), + "QWizardPage.setTitle": ('str',), + "QWizardPage.subTitle": (), + "QWizardPage.title": (), + "QWizardPage.validatePage": (), + "QWizardPage.wizard": (), + }) + +# Module PySide2.QtPrintSupport +if "PySide2.QtPrintSupport" in sys.modules: + dict.update({ + + # class PySide2.QtPrintSupport.QAbstractPrintDialog: + "QAbstractPrintDialog.__init__": ('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), + "QAbstractPrintDialog.addEnabledOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.enabledOptions": (), + "QAbstractPrintDialog.exec_": (), + "QAbstractPrintDialog.fromPage": (), + "QAbstractPrintDialog.isOptionEnabled": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.maxPage": (), + "QAbstractPrintDialog.minPage": (), + "QAbstractPrintDialog.printRange": (), + "QAbstractPrintDialog.printer": (), + "QAbstractPrintDialog.setEnabledOptions": ('PrintDialogOptions',), + "QAbstractPrintDialog.setFromTo": ('int', 'int'), + "QAbstractPrintDialog.setMinMax": ('int', 'int'), + "QAbstractPrintDialog.setOptionTabs": ('list',), + "QAbstractPrintDialog.setPrintRange": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintRange',), + "QAbstractPrintDialog.toPage": (), + + # class PySide2.QtPrintSupport.QPageSetupDialog: + "QPageSetupDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPageSetupDialog.done": ('int',), + "QPageSetupDialog.exec_": (), + "QPageSetupDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPageSetupDialog.printer": (), + "QPageSetupDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintDialog: + "QPrintDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPrintDialog.accept": (), + "QPrintDialog.done": ('int',), + "QPrintDialog.exec_": (), + "QPrintDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintDialog.options": (), + "QPrintDialog.printer": [], + "QPrintDialog.setOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption', 'bool'), + "QPrintDialog.setOptions": ('PrintDialogOptions',), + "QPrintDialog.setVisible": ('bool',), + "QPrintDialog.testOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + + # class PySide2.QtPrintSupport.QPrintEngine: + "QPrintEngine.__init__": (), + "QPrintEngine.abort": (), + "QPrintEngine.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrintEngine.newPage": (), + "QPrintEngine.printerState": (), + "QPrintEngine.property": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey',), + "QPrintEngine.setProperty": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtPrintSupport.QPrintPreviewDialog: + "QPrintPreviewDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QPrintPreviewDialog.done": ('int',), + "QPrintPreviewDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintPreviewDialog.printer": (), + "QPrintPreviewDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintPreviewWidget: + "QPrintPreviewWidget.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QPrintPreviewWidget.currentPage": (), + "QPrintPreviewWidget.fitInView": (), + "QPrintPreviewWidget.fitToWidth": (), + "QPrintPreviewWidget.orientation": (), + "QPrintPreviewWidget.pageCount": (), + "QPrintPreviewWidget.print_": (), + "QPrintPreviewWidget.setAllPagesViewMode": (), + "QPrintPreviewWidget.setCurrentPage": ('int',), + "QPrintPreviewWidget.setFacingPagesViewMode": (), + "QPrintPreviewWidget.setLandscapeOrientation": (), + "QPrintPreviewWidget.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrintPreviewWidget.setPortraitOrientation": (), + "QPrintPreviewWidget.setSinglePageViewMode": (), + "QPrintPreviewWidget.setViewMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ViewMode',), + "QPrintPreviewWidget.setVisible": ('bool',), + "QPrintPreviewWidget.setZoomFactor": ('float',), + "QPrintPreviewWidget.setZoomMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ZoomMode',), + "QPrintPreviewWidget.updatePreview": (), + "QPrintPreviewWidget.viewMode": (), + "QPrintPreviewWidget.zoomFactor": (), + "QPrintPreviewWidget.zoomIn": ('float',), + "QPrintPreviewWidget.zoomMode": (), + "QPrintPreviewWidget.zoomOut": ('float',), + + # class PySide2.QtPrintSupport.QPrinter: + "QPrinter.__init__": [('PySide2.QtPrintSupport.QPrinter.PrinterMode',), ('PySide2.QtPrintSupport.QPrinterInfo', 'PySide2.QtPrintSupport.QPrinter.PrinterMode')], + "QPrinter.abort": (), + "QPrinter.actualNumCopies": (), + "QPrinter.collateCopies": (), + "QPrinter.colorMode": (), + "QPrinter.copyCount": (), + "QPrinter.creator": (), + "QPrinter.devType": (), + "QPrinter.docName": (), + "QPrinter.doubleSidedPrinting": (), + "QPrinter.duplex": (), + "QPrinter.fontEmbeddingEnabled": (), + "QPrinter.fromPage": (), + "QPrinter.fullPage": (), + "QPrinter.getPageMargins": ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit'), + "QPrinter.isValid": (), + "QPrinter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrinter.newPage": (), + "QPrinter.numCopies": (), + "QPrinter.orientation": (), + "QPrinter.outputFileName": (), + "QPrinter.outputFormat": (), + "QPrinter.pageLayout": (), + "QPrinter.pageOrder": (), + "QPrinter.pageRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.pageSize": (), + "QPrinter.paintEngine": (), + "QPrinter.paperName": (), + "QPrinter.paperRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSize": ('PySide2.QtPrintSupport.QPrinter.Unit',), + "QPrinter.paperSource": (), + "QPrinter.printEngine": (), + "QPrinter.printProgram": (), + "QPrinter.printRange": (), + "QPrinter.printerName": (), + "QPrinter.printerState": (), + "QPrinter.resolution": (), + "QPrinter.setCollateCopies": ('bool',), + "QPrinter.setColorMode": ('PySide2.QtPrintSupport.QPrinter.ColorMode',), + "QPrinter.setCopyCount": ('int',), + "QPrinter.setCreator": ('str',), + "QPrinter.setDocName": ('str',), + "QPrinter.setDoubleSidedPrinting": ('bool',), + "QPrinter.setDuplex": ('PySide2.QtPrintSupport.QPrinter.DuplexMode',), + "QPrinter.setEngines": ('PySide2.QtPrintSupport.QPrintEngine', 'PySide2.QtGui.QPaintEngine'), + "QPrinter.setFontEmbeddingEnabled": ('bool',), + "QPrinter.setFromTo": ('int', 'int'), + "QPrinter.setFullPage": ('bool',), + "QPrinter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPrinter.setNumCopies": ('int',), + "QPrinter.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrinter.setOutputFileName": ('str',), + "QPrinter.setOutputFormat": ('PySide2.QtPrintSupport.QPrinter.OutputFormat',), + "QPrinter.setPageLayout": ('PySide2.QtGui.QPageLayout',), + "QPrinter.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit'), ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit')], + "QPrinter.setPageOrder": ('PySide2.QtPrintSupport.QPrinter.PageOrder',), + "QPrinter.setPageOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPrinter.setPageSize": [('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPrinter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPrinter.setPaperName": ('str',), + "QPrinter.setPaperSize": ('PySide2.QtCore.QSizeF', 'PySide2.QtPrintSupport.QPrinter.Unit'), + "QPrinter.setPaperSource": ('PySide2.QtPrintSupport.QPrinter.PaperSource',), + "QPrinter.setPrintProgram": ('str',), + "QPrinter.setPrintRange": ('PySide2.QtPrintSupport.QPrinter.PrintRange',), + "QPrinter.setPrinterName": ('str',), + "QPrinter.setResolution": ('int',), + "QPrinter.setWinPageSize": ('int',), + "QPrinter.supportedPaperSources": (), + "QPrinter.supportedResolutions": (), + "QPrinter.supportsMultipleCopies": (), + "QPrinter.toPage": (), + "QPrinter.winPageSize": (), + + # class PySide2.QtPrintSupport.QPrinterInfo: + "QPrinterInfo.__init__": [(), ('PySide2.QtPrintSupport.QPrinter',), ('PySide2.QtPrintSupport.QPrinterInfo',)], + "QPrinterInfo.__copy__": (), + "QPrinterInfo.availablePrinterNames": (), + "QPrinterInfo.availablePrinters": (), + "QPrinterInfo.defaultDuplexMode": (), + "QPrinterInfo.defaultPageSize": (), + "QPrinterInfo.defaultPrinter": (), + "QPrinterInfo.defaultPrinterName": (), + "QPrinterInfo.description": (), + "QPrinterInfo.isDefault": (), + "QPrinterInfo.isNull": (), + "QPrinterInfo.isRemote": (), + "QPrinterInfo.location": (), + "QPrinterInfo.makeAndModel": (), + "QPrinterInfo.maximumPhysicalPageSize": (), + "QPrinterInfo.minimumPhysicalPageSize": (), + "QPrinterInfo.printerInfo": ('str',), + "QPrinterInfo.printerName": (), + "QPrinterInfo.state": (), + "QPrinterInfo.supportedDuplexModes": (), + "QPrinterInfo.supportedPageSizes": (), + "QPrinterInfo.supportedResolutions": (), + "QPrinterInfo.supportedSizesWithNames": (), + "QPrinterInfo.supportsCustomPageSizes": (), + }) + +# Module PySide2.QtSql +if "PySide2.QtSql" in sys.modules: + dict.update({ + + # class PySide2.QtSql.QSql: + + # class PySide2.QtSql.QSqlDatabase: + "QSqlDatabase.__init__": [(), ('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlDriver',), ('str',)], + "QSqlDatabase.__copy__": (), + "QSqlDatabase.addDatabase": [('PySide2.QtSql.QSqlDriver', 'str'), ('str', 'str')], + "QSqlDatabase.cloneDatabase": ('PySide2.QtSql.QSqlDatabase', 'str'), + "QSqlDatabase.close": (), + "QSqlDatabase.commit": (), + "QSqlDatabase.connectOptions": (), + "QSqlDatabase.connectionName": (), + "QSqlDatabase.connectionNames": (), + "QSqlDatabase.contains": ('str',), + "QSqlDatabase.database": ('str', 'bool'), + "QSqlDatabase.databaseName": (), + "QSqlDatabase.driver": (), + "QSqlDatabase.driverName": (), + "QSqlDatabase.drivers": (), + "QSqlDatabase.exec_": ('str',), + "QSqlDatabase.hostName": (), + "QSqlDatabase.isDriverAvailable": ('str',), + "QSqlDatabase.isOpen": (), + "QSqlDatabase.isOpenError": (), + "QSqlDatabase.isValid": (), + "QSqlDatabase.lastError": (), + "QSqlDatabase.numericalPrecisionPolicy": (), + "QSqlDatabase.open": [(), ('str', 'str')], + "QSqlDatabase.password": (), + "QSqlDatabase.port": (), + "QSqlDatabase.primaryIndex": ('str',), + "QSqlDatabase.record": ('str',), + "QSqlDatabase.registerSqlDriver": ('str', 'PySide2.QtSql.QSqlDriverCreatorBase'), + "QSqlDatabase.removeDatabase": ('str',), + "QSqlDatabase.rollback": (), + "QSqlDatabase.setConnectOptions": ('str',), + "QSqlDatabase.setDatabaseName": ('str',), + "QSqlDatabase.setHostName": ('str',), + "QSqlDatabase.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDatabase.setPassword": ('str',), + "QSqlDatabase.setPort": ('int',), + "QSqlDatabase.setUserName": ('str',), + "QSqlDatabase.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDatabase.transaction": (), + "QSqlDatabase.userName": (), + + # class PySide2.QtSql.QSqlDriver: + "QSqlDriver.__init__": ('PySide2.QtCore.QObject',), + "QSqlDriver.beginTransaction": (), + "QSqlDriver.cancelQuery": (), + "QSqlDriver.close": (), + "QSqlDriver.commitTransaction": (), + "QSqlDriver.createResult": (), + "QSqlDriver.dbmsType": (), + "QSqlDriver.escapeIdentifier": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.formatValue": ('PySide2.QtSql.QSqlField', 'bool'), + "QSqlDriver.hasFeature": ('PySide2.QtSql.QSqlDriver.DriverFeature',), + "QSqlDriver.isIdentifierEscaped": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.isOpen": (), + "QSqlDriver.isOpenError": (), + "QSqlDriver.lastError": (), + "QSqlDriver.numericalPrecisionPolicy": (), + "QSqlDriver.open": ('str', 'str', 'str', 'str', 'int', 'str'), + "QSqlDriver.primaryIndex": ('str',), + "QSqlDriver.record": ('str',), + "QSqlDriver.rollbackTransaction": (), + "QSqlDriver.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlDriver.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDriver.setOpen": ('bool',), + "QSqlDriver.setOpenError": ('bool',), + "QSqlDriver.sqlStatement": ('PySide2.QtSql.QSqlDriver.StatementType', 'str', 'PySide2.QtSql.QSqlRecord', 'bool'), + "QSqlDriver.stripDelimiters": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.subscribeToNotification": ('str',), + "QSqlDriver.subscribedToNotifications": (), + "QSqlDriver.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDriver.unsubscribeFromNotification": ('str',), + + # class PySide2.QtSql.QSqlDriverCreatorBase: + "QSqlDriverCreatorBase.__init__": (), + "QSqlDriverCreatorBase.createObject": (), + + # class PySide2.QtSql.QSqlError: + "QSqlError.__init__": [('PySide2.QtSql.QSqlError',), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'int'), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'str')], + "QSqlError.__copy__": (), + "QSqlError.databaseText": (), + "QSqlError.driverText": (), + "QSqlError.isValid": (), + "QSqlError.nativeErrorCode": (), + "QSqlError.number": (), + "QSqlError.setDatabaseText": ('str',), + "QSqlError.setDriverText": ('str',), + "QSqlError.setNumber": ('int',), + "QSqlError.setType": ('PySide2.QtSql.QSqlError.ErrorType',), + "QSqlError.text": (), + "QSqlError.type": (), + + # class PySide2.QtSql.QSqlField: + "QSqlField.__init__": [('PySide2.QtSql.QSqlField',), ('str', 'type')], + "QSqlField.__copy__": (), + "QSqlField.clear": (), + "QSqlField.defaultValue": (), + "QSqlField.isAutoValue": (), + "QSqlField.isGenerated": (), + "QSqlField.isNull": (), + "QSqlField.isReadOnly": (), + "QSqlField.isValid": (), + "QSqlField.length": (), + "QSqlField.name": (), + "QSqlField.precision": (), + "QSqlField.requiredStatus": (), + "QSqlField.setAutoValue": ('bool',), + "QSqlField.setDefaultValue": ('PySide2.support.signature.typing.Any',), + "QSqlField.setGenerated": ('bool',), + "QSqlField.setLength": ('int',), + "QSqlField.setName": ('str',), + "QSqlField.setPrecision": ('int',), + "QSqlField.setReadOnly": ('bool',), + "QSqlField.setRequired": ('bool',), + "QSqlField.setRequiredStatus": ('PySide2.QtSql.QSqlField.RequiredStatus',), + "QSqlField.setSqlType": ('int',), + "QSqlField.setType": ('type',), + "QSqlField.setValue": ('PySide2.support.signature.typing.Any',), + "QSqlField.type": (), + "QSqlField.typeID": (), + "QSqlField.value": (), + + # class PySide2.QtSql.QSqlIndex: + "QSqlIndex.__init__": [('PySide2.QtSql.QSqlIndex',), ('str', 'str')], + "QSqlIndex.__copy__": (), + "QSqlIndex.append": [('PySide2.QtSql.QSqlField',), ('PySide2.QtSql.QSqlField', 'bool')], + "QSqlIndex.cursorName": (), + "QSqlIndex.isDescending": ('int',), + "QSqlIndex.name": (), + "QSqlIndex.setCursorName": ('str',), + "QSqlIndex.setDescending": ('int', 'bool'), + "QSqlIndex.setName": ('str',), + + # class PySide2.QtSql.QSqlQuery: + "QSqlQuery.__init__": [('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlQuery',), ('PySide2.QtSql.QSqlResult',), ('str', 'PySide2.QtSql.QSqlDatabase')], + "QSqlQuery.__copy__": (), + "QSqlQuery.addBindValue": ('PySide2.support.signature.typing.Any', 'ParamType'), + "QSqlQuery.at": (), + "QSqlQuery.bindValue": [('int', 'PySide2.support.signature.typing.Any', 'ParamType'), ('str', 'PySide2.support.signature.typing.Any', 'ParamType')], + "QSqlQuery.boundValue": [('int',), ('str',)], + "QSqlQuery.boundValues": (), + "QSqlQuery.clear": (), + "QSqlQuery.driver": (), + "QSqlQuery.execBatch": ('PySide2.QtSql.QSqlQuery.BatchExecutionMode',), + "QSqlQuery.exec_": [(), ('str',)], + "QSqlQuery.executedQuery": (), + "QSqlQuery.finish": (), + "QSqlQuery.first": (), + "QSqlQuery.isActive": (), + "QSqlQuery.isForwardOnly": (), + "QSqlQuery.isNull": [('int',), ('str',)], + "QSqlQuery.isSelect": (), + "QSqlQuery.isValid": (), + "QSqlQuery.last": (), + "QSqlQuery.lastError": (), + "QSqlQuery.lastInsertId": (), + "QSqlQuery.lastQuery": (), + "QSqlQuery.next": (), + "QSqlQuery.nextResult": (), + "QSqlQuery.numRowsAffected": (), + "QSqlQuery.numericalPrecisionPolicy": (), + "QSqlQuery.prepare": ('str',), + "QSqlQuery.previous": (), + "QSqlQuery.record": (), + "QSqlQuery.result": (), + "QSqlQuery.seek": ('int', 'bool'), + "QSqlQuery.setForwardOnly": ('bool',), + "QSqlQuery.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlQuery.size": (), + "QSqlQuery.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlQueryModel: + "QSqlQueryModel.__init__": ('PySide2.QtCore.QObject',), + "QSqlQueryModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginResetModel": (), + "QSqlQueryModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.clear": (), + "QSqlQueryModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlQueryModel.endInsertColumns": (), + "QSqlQueryModel.endInsertRows": (), + "QSqlQueryModel.endRemoveColumns": (), + "QSqlQueryModel.endRemoveRows": (), + "QSqlQueryModel.endResetModel": (), + "QSqlQueryModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlQueryModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.lastError": (), + "QSqlQueryModel.query": (), + "QSqlQueryModel.queryChange": (), + "QSqlQueryModel.record": [(), ('int',)], + "QSqlQueryModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'PySide2.support.signature.typing.Any', 'int'), + "QSqlQueryModel.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlQueryModel.setQuery": [('PySide2.QtSql.QSqlQuery',), ('str', 'PySide2.QtSql.QSqlDatabase')], + + # class PySide2.QtSql.QSqlRecord: + "QSqlRecord.__init__": [(), ('PySide2.QtSql.QSqlRecord',)], + "QSqlRecord.__copy__": (), + "QSqlRecord.append": ('PySide2.QtSql.QSqlField',), + "QSqlRecord.clear": (), + "QSqlRecord.clearValues": (), + "QSqlRecord.contains": ('str',), + "QSqlRecord.count": (), + "QSqlRecord.field": [('int',), ('str',)], + "QSqlRecord.fieldName": ('int',), + "QSqlRecord.indexOf": ('str',), + "QSqlRecord.insert": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.isEmpty": (), + "QSqlRecord.isGenerated": [('int',), ('str',)], + "QSqlRecord.isNull": [('int',), ('str',)], + "QSqlRecord.keyValues": ('PySide2.QtSql.QSqlRecord',), + "QSqlRecord.remove": ('int',), + "QSqlRecord.replace": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.setGenerated": [('int', 'bool'), ('str', 'bool')], + "QSqlRecord.setNull": [('int',), ('str',)], + "QSqlRecord.setValue": [('int', 'PySide2.support.signature.typing.Any'), ('str', 'PySide2.support.signature.typing.Any')], + "QSqlRecord.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlRelation: + "QSqlRelation.__init__": [(), ('PySide2.QtSql.QSqlRelation',), ('str', 'str', 'str')], + "QSqlRelation.__copy__": (), + "QSqlRelation.displayColumn": (), + "QSqlRelation.indexColumn": (), + "QSqlRelation.isValid": (), + "QSqlRelation.tableName": (), + + # class PySide2.QtSql.QSqlRelationalDelegate: + "QSqlRelationalDelegate.__init__": ('PySide2.QtCore.QObject',), + "QSqlRelationalDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtSql.QSqlRelationalTableModel: + "QSqlRelationalTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlRelationalTableModel.clear": (), + "QSqlRelationalTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlRelationalTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlRelationalTableModel.orderByClause": (), + "QSqlRelationalTableModel.relation": ('int',), + "QSqlRelationalTableModel.relationModel": ('int',), + "QSqlRelationalTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalTableModel.revertRow": ('int',), + "QSqlRelationalTableModel.select": (), + "QSqlRelationalTableModel.selectStatement": (), + "QSqlRelationalTableModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QSqlRelationalTableModel.setJoinMode": ('PySide2.QtSql.QSqlRelationalTableModel.JoinMode',), + "QSqlRelationalTableModel.setRelation": ('int', 'PySide2.QtSql.QSqlRelation'), + "QSqlRelationalTableModel.setTable": ('str',), + "QSqlRelationalTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + + # class PySide2.QtSql.QSqlResult: + "QSqlResult.__init__": ('PySide2.QtSql.QSqlDriver',), + "QSqlResult.addBindValue": ('PySide2.support.signature.typing.Any', 'ParamType'), + "QSqlResult.at": (), + "QSqlResult.bindValue": [('int', 'PySide2.support.signature.typing.Any', 'ParamType'), ('str', 'PySide2.support.signature.typing.Any', 'ParamType')], + "QSqlResult.bindValueType": [('int',), ('str',)], + "QSqlResult.bindingSyntax": (), + "QSqlResult.boundValue": [('int',), ('str',)], + "QSqlResult.boundValueCount": (), + "QSqlResult.boundValueName": ('int',), + "QSqlResult.boundValues": (), + "QSqlResult.clear": (), + "QSqlResult.data": ('int',), + "QSqlResult.detachFromResultSet": (), + "QSqlResult.driver": (), + "QSqlResult.execBatch": ('bool',), + "QSqlResult.exec_": (), + "QSqlResult.executedQuery": (), + "QSqlResult.fetch": ('int',), + "QSqlResult.fetchFirst": (), + "QSqlResult.fetchLast": (), + "QSqlResult.fetchNext": (), + "QSqlResult.fetchPrevious": (), + "QSqlResult.handle": (), + "QSqlResult.hasOutValues": (), + "QSqlResult.isActive": (), + "QSqlResult.isForwardOnly": (), + "QSqlResult.isNull": ('int',), + "QSqlResult.isSelect": (), + "QSqlResult.isValid": (), + "QSqlResult.lastError": (), + "QSqlResult.lastInsertId": (), + "QSqlResult.lastQuery": (), + "QSqlResult.nextResult": (), + "QSqlResult.numRowsAffected": (), + "QSqlResult.numericalPrecisionPolicy": (), + "QSqlResult.prepare": ('str',), + "QSqlResult.record": (), + "QSqlResult.reset": ('str',), + "QSqlResult.resetBindCount": (), + "QSqlResult.savePrepare": ('str',), + "QSqlResult.setActive": ('bool',), + "QSqlResult.setAt": ('int',), + "QSqlResult.setForwardOnly": ('bool',), + "QSqlResult.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlResult.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlResult.setQuery": ('str',), + "QSqlResult.setSelect": ('bool',), + "QSqlResult.size": (), + + # class PySide2.QtSql.QSqlTableModel: + "QSqlTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlTableModel.clear": (), + "QSqlTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlTableModel.database": (), + "QSqlTableModel.deleteRowFromTable": ('int',), + "QSqlTableModel.editStrategy": (), + "QSqlTableModel.fieldIndex": ('str',), + "QSqlTableModel.filter": (), + "QSqlTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlTableModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.insertRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlTableModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.isDirty": [(), ('PySide2.QtCore.QModelIndex',)], + "QSqlTableModel.orderByClause": (), + "QSqlTableModel.primaryKey": (), + "QSqlTableModel.primaryValues": ('int',), + "QSqlTableModel.record": [(), ('int',)], + "QSqlTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.revert": (), + "QSqlTableModel.revertAll": (), + "QSqlTableModel.revertRow": ('int',), + "QSqlTableModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.select": (), + "QSqlTableModel.selectRow": ('int',), + "QSqlTableModel.selectStatement": (), + "QSqlTableModel.setData": ('PySide2.QtCore.QModelIndex', 'PySide2.support.signature.typing.Any', 'int'), + "QSqlTableModel.setEditStrategy": ('PySide2.QtSql.QSqlTableModel.EditStrategy',), + "QSqlTableModel.setFilter": ('str',), + "QSqlTableModel.setPrimaryKey": ('PySide2.QtSql.QSqlIndex',), + "QSqlTableModel.setQuery": ('PySide2.QtSql.QSqlQuery',), + "QSqlTableModel.setRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.setSort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.setTable": ('str',), + "QSqlTableModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.submit": (), + "QSqlTableModel.submitAll": (), + "QSqlTableModel.tableName": (), + "QSqlTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + }) + +# Module PySide2.QtNetwork +if "PySide2.QtNetwork" in sys.modules: + dict.update({ + + # class PySide2.QtNetwork.QAbstractNetworkCache: + "QAbstractNetworkCache.__init__": ('PySide2.QtCore.QObject',), + "QAbstractNetworkCache.cacheSize": (), + "QAbstractNetworkCache.clear": (), + "QAbstractNetworkCache.data": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.insert": ('PySide2.QtCore.QIODevice',), + "QAbstractNetworkCache.metaData": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QAbstractNetworkCache.remove": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QAbstractSocket: + "QAbstractSocket.__init__": ('PySide2.QtNetwork.QAbstractSocket.SocketType', 'PySide2.QtCore.QObject'), + "QAbstractSocket.abort": (), + "QAbstractSocket.atEnd": (), + "QAbstractSocket.bind": [('PySide2.QtNetwork.QHostAddress', 'int', 'BindMode'), ('int', 'BindMode')], + "QAbstractSocket.bytesAvailable": (), + "QAbstractSocket.bytesToWrite": (), + "QAbstractSocket.canReadLine": (), + "QAbstractSocket.close": (), + "QAbstractSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'OpenMode'), ('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QAbstractSocket.disconnectFromHost": (), + "QAbstractSocket.flush": (), + "QAbstractSocket.isSequential": (), + "QAbstractSocket.isValid": (), + "QAbstractSocket.localAddress": (), + "QAbstractSocket.localPort": (), + "QAbstractSocket.pauseMode": (), + "QAbstractSocket.peerAddress": (), + "QAbstractSocket.peerName": (), + "QAbstractSocket.peerPort": (), + "QAbstractSocket.proxy": (), + "QAbstractSocket.readBufferSize": (), + "QAbstractSocket.readData": ('str', 'int'), + "QAbstractSocket.readLineData": ('str', 'int'), + "QAbstractSocket.resume": (), + "QAbstractSocket.setLocalAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setLocalPort": ('int',), + "QAbstractSocket.setPauseMode": ('PauseModes',), + "QAbstractSocket.setPeerAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setPeerName": ('str',), + "QAbstractSocket.setPeerPort": ('int',), + "QAbstractSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QAbstractSocket.setReadBufferSize": ('int',), + "QAbstractSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'OpenMode'), + "QAbstractSocket.setSocketError": ('PySide2.QtNetwork.QAbstractSocket.SocketError',), + "QAbstractSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'PySide2.support.signature.typing.Any'), + "QAbstractSocket.setSocketState": ('PySide2.QtNetwork.QAbstractSocket.SocketState',), + "QAbstractSocket.socketDescriptor": (), + "QAbstractSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QAbstractSocket.socketType": (), + "QAbstractSocket.state": (), + "QAbstractSocket.waitForBytesWritten": ('int',), + "QAbstractSocket.waitForConnected": ('int',), + "QAbstractSocket.waitForDisconnected": ('int',), + "QAbstractSocket.waitForReadyRead": ('int',), + "QAbstractSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QAuthenticator: + "QAuthenticator.__init__": [(), ('PySide2.QtNetwork.QAuthenticator',)], + "QAuthenticator.__copy__": (), + "QAuthenticator.isNull": (), + "QAuthenticator.option": ('str',), + "QAuthenticator.options": (), + "QAuthenticator.password": (), + "QAuthenticator.realm": (), + "QAuthenticator.setOption": ('str', 'PySide2.support.signature.typing.Any'), + "QAuthenticator.setPassword": ('str',), + "QAuthenticator.setRealm": ('str',), + "QAuthenticator.setUser": ('str',), + "QAuthenticator.user": (), + + # class PySide2.QtNetwork.QHostAddress: + "QHostAddress.__init__": [(), ('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.__copy__": (), + "QHostAddress.clear": (), + "QHostAddress.isInSubnet": [('PySide2.QtNetwork.QHostAddress', 'int'), ('PySide2.support.signature.typing.Tuple',)], + "QHostAddress.isLoopback": (), + "QHostAddress.isMulticast": (), + "QHostAddress.isNull": (), + "QHostAddress.parseSubnet": ('str',), + "QHostAddress.protocol": (), + "QHostAddress.scopeId": (), + "QHostAddress.setAddress": [('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.setScopeId": ('str',), + "QHostAddress.swap": ('PySide2.QtNetwork.QHostAddress',), + "QHostAddress.toIPv4Address": [(), ('bool',)], + "QHostAddress.toIPv6Address": (), + "QHostAddress.toString": (), + + # class PySide2.QtNetwork.QHostInfo: + "QHostInfo.__init__": [('PySide2.QtNetwork.QHostInfo',), ('int',)], + "QHostInfo.__copy__": (), + "QHostInfo.abortHostLookup": ('int',), + "QHostInfo.addresses": (), + "QHostInfo.error": (), + "QHostInfo.errorString": (), + "QHostInfo.fromName": ('str',), + "QHostInfo.hostName": (), + "QHostInfo.localDomainName": (), + "QHostInfo.localHostName": (), + "QHostInfo.lookupId": (), + "QHostInfo.setAddresses": ('list',), + "QHostInfo.setError": ('PySide2.QtNetwork.QHostInfo.HostInfoError',), + "QHostInfo.setErrorString": ('str',), + "QHostInfo.setHostName": ('str',), + "QHostInfo.setLookupId": ('int',), + + # class PySide2.QtNetwork.QIPv6Address: + "QIPv6Address.__init__": [(), ('PySide2.QtNetwork.QIPv6Address',)], + "QIPv6Address.__copy__": (), + + # class PySide2.QtNetwork.QLocalServer: + "QLocalServer.__init__": ('PySide2.QtCore.QObject',), + "QLocalServer.close": (), + "QLocalServer.errorString": (), + "QLocalServer.fullServerName": (), + "QLocalServer.hasPendingConnections": (), + "QLocalServer.incomingConnection": ('int',), + "QLocalServer.isListening": (), + "QLocalServer.listen": [('int',), ('str',)], + "QLocalServer.maxPendingConnections": (), + "QLocalServer.nextPendingConnection": (), + "QLocalServer.removeServer": ('str',), + "QLocalServer.serverError": (), + "QLocalServer.serverName": (), + "QLocalServer.setMaxPendingConnections": ('int',), + "QLocalServer.setSocketOptions": ('SocketOptions',), + "QLocalServer.socketOptions": (), + "QLocalServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QLocalSocket: + "QLocalSocket.__init__": ('PySide2.QtCore.QObject',), + "QLocalSocket.abort": (), + "QLocalSocket.bytesAvailable": (), + "QLocalSocket.bytesToWrite": (), + "QLocalSocket.canReadLine": (), + "QLocalSocket.close": (), + "QLocalSocket.connectToServer": [('OpenMode',), ('str', 'OpenMode')], + "QLocalSocket.disconnectFromServer": (), + "QLocalSocket.flush": (), + "QLocalSocket.fullServerName": (), + "QLocalSocket.isSequential": (), + "QLocalSocket.isValid": (), + "QLocalSocket.open": ('OpenMode',), + "QLocalSocket.readBufferSize": (), + "QLocalSocket.readData": ('str', 'int'), + "QLocalSocket.serverName": (), + "QLocalSocket.setReadBufferSize": ('int',), + "QLocalSocket.setServerName": ('str',), + "QLocalSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QLocalSocket.LocalSocketState', 'OpenMode'), + "QLocalSocket.socketDescriptor": (), + "QLocalSocket.state": (), + "QLocalSocket.waitForBytesWritten": ('int',), + "QLocalSocket.waitForConnected": ('int',), + "QLocalSocket.waitForDisconnected": ('int',), + "QLocalSocket.waitForReadyRead": ('int',), + "QLocalSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkAccessManager: + "QNetworkAccessManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkAccessManager.activeConfiguration": (), + "QNetworkAccessManager.cache": (), + "QNetworkAccessManager.clearAccessCache": (), + "QNetworkAccessManager.configuration": (), + "QNetworkAccessManager.connectToHost": ('str', 'int'), + "QNetworkAccessManager.connectToHostEncrypted": ('str', 'int', 'PySide2.QtNetwork.QSslConfiguration'), + "QNetworkAccessManager.cookieJar": (), + "QNetworkAccessManager.createRequest": ('PySide2.QtNetwork.QNetworkAccessManager.Operation', 'PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), + "QNetworkAccessManager.deleteResource": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.get": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.head": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.networkAccessible": (), + "QNetworkAccessManager.post": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice')], + "QNetworkAccessManager.proxy": (), + "QNetworkAccessManager.proxyFactory": (), + "QNetworkAccessManager.put": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice')], + "QNetworkAccessManager.sendCustomRequest": ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QIODevice'), + "QNetworkAccessManager.setCache": ('PySide2.QtNetwork.QAbstractNetworkCache',), + "QNetworkAccessManager.setConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkAccessManager.setCookieJar": ('PySide2.QtNetwork.QNetworkCookieJar',), + "QNetworkAccessManager.setNetworkAccessible": ('PySide2.QtNetwork.QNetworkAccessManager.NetworkAccessibility',), + "QNetworkAccessManager.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkAccessManager.setProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkAccessManager.supportedSchemes": (), + "QNetworkAccessManager.supportedSchemesImplementation": (), + + # class PySide2.QtNetwork.QNetworkAddressEntry: + "QNetworkAddressEntry.__init__": [(), ('PySide2.QtNetwork.QNetworkAddressEntry',)], + "QNetworkAddressEntry.__copy__": (), + "QNetworkAddressEntry.broadcast": (), + "QNetworkAddressEntry.ip": (), + "QNetworkAddressEntry.netmask": (), + "QNetworkAddressEntry.prefixLength": (), + "QNetworkAddressEntry.setBroadcast": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setIp": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setNetmask": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setPrefixLength": ('int',), + "QNetworkAddressEntry.swap": ('PySide2.QtNetwork.QNetworkAddressEntry',), + + # class PySide2.QtNetwork.QNetworkCacheMetaData: + "QNetworkCacheMetaData.__init__": [(), ('PySide2.QtNetwork.QNetworkCacheMetaData',)], + "QNetworkCacheMetaData.__copy__": (), + "QNetworkCacheMetaData.attributes": (), + "QNetworkCacheMetaData.expirationDate": (), + "QNetworkCacheMetaData.isValid": (), + "QNetworkCacheMetaData.lastModified": (), + "QNetworkCacheMetaData.rawHeaders": (), + "QNetworkCacheMetaData.saveToDisk": (), + "QNetworkCacheMetaData.setAttributes": ('dict',), + "QNetworkCacheMetaData.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setLastModified": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setRawHeaders": ('list',), + "QNetworkCacheMetaData.setSaveToDisk": ('bool',), + "QNetworkCacheMetaData.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCacheMetaData.swap": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkCacheMetaData.url": (), + + # class PySide2.QtNetwork.QNetworkConfiguration: + "QNetworkConfiguration.__init__": [(), ('PySide2.QtNetwork.QNetworkConfiguration',)], + "QNetworkConfiguration.__copy__": (), + "QNetworkConfiguration.bearerType": (), + "QNetworkConfiguration.bearerTypeFamily": (), + "QNetworkConfiguration.bearerTypeName": (), + "QNetworkConfiguration.children": (), + "QNetworkConfiguration.identifier": (), + "QNetworkConfiguration.isRoamingAvailable": (), + "QNetworkConfiguration.isValid": (), + "QNetworkConfiguration.name": (), + "QNetworkConfiguration.purpose": (), + "QNetworkConfiguration.state": (), + "QNetworkConfiguration.swap": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkConfiguration.type": (), + + # class PySide2.QtNetwork.QNetworkConfigurationManager: + "QNetworkConfigurationManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkConfigurationManager.allConfigurations": ('StateFlags',), + "QNetworkConfigurationManager.capabilities": (), + "QNetworkConfigurationManager.configurationFromIdentifier": ('str',), + "QNetworkConfigurationManager.defaultConfiguration": (), + "QNetworkConfigurationManager.isOnline": (), + "QNetworkConfigurationManager.updateConfigurations": (), + + # class PySide2.QtNetwork.QNetworkCookie: + "QNetworkCookie.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkCookie',)], + "QNetworkCookie.__copy__": (), + "QNetworkCookie.domain": (), + "QNetworkCookie.expirationDate": (), + "QNetworkCookie.hasSameIdentifier": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.isHttpOnly": (), + "QNetworkCookie.isSecure": (), + "QNetworkCookie.isSessionCookie": (), + "QNetworkCookie.name": (), + "QNetworkCookie.normalize": ('PySide2.QtCore.QUrl',), + "QNetworkCookie.parseCookies": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.path": (), + "QNetworkCookie.setDomain": ('str',), + "QNetworkCookie.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCookie.setHttpOnly": ('bool',), + "QNetworkCookie.setName": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.setPath": ('str',), + "QNetworkCookie.setSecure": ('bool',), + "QNetworkCookie.setValue": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.swap": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.toRawForm": ('PySide2.QtNetwork.QNetworkCookie.RawForm',), + "QNetworkCookie.value": (), + + # class PySide2.QtNetwork.QNetworkCookieJar: + "QNetworkCookieJar.__init__": ('PySide2.QtCore.QObject',), + "QNetworkCookieJar.allCookies": (), + "QNetworkCookieJar.cookiesForUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCookieJar.deleteCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.insertCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.setAllCookies": ('list',), + "QNetworkCookieJar.setCookiesFromUrl": ('list', 'PySide2.QtCore.QUrl'), + "QNetworkCookieJar.updateCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.validateCookie": ('PySide2.QtNetwork.QNetworkCookie', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtNetwork.QNetworkDiskCache: + "QNetworkDiskCache.__init__": ('PySide2.QtCore.QObject',), + "QNetworkDiskCache.cacheDirectory": (), + "QNetworkDiskCache.cacheSize": (), + "QNetworkDiskCache.clear": (), + "QNetworkDiskCache.data": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.expire": (), + "QNetworkDiskCache.fileMetaData": ('str',), + "QNetworkDiskCache.insert": ('PySide2.QtCore.QIODevice',), + "QNetworkDiskCache.maximumCacheSize": (), + "QNetworkDiskCache.metaData": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkDiskCache.remove": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.setCacheDirectory": ('str',), + "QNetworkDiskCache.setMaximumCacheSize": ('int',), + "QNetworkDiskCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QNetworkInterface: + "QNetworkInterface.__init__": [(), ('PySide2.QtNetwork.QNetworkInterface',)], + "QNetworkInterface.__copy__": (), + "QNetworkInterface.addressEntries": (), + "QNetworkInterface.allAddresses": (), + "QNetworkInterface.allInterfaces": (), + "QNetworkInterface.flags": (), + "QNetworkInterface.hardwareAddress": (), + "QNetworkInterface.humanReadableName": (), + "QNetworkInterface.index": (), + "QNetworkInterface.interfaceFromIndex": ('int',), + "QNetworkInterface.interfaceFromName": ('str',), + "QNetworkInterface.isValid": (), + "QNetworkInterface.name": (), + "QNetworkInterface.swap": ('PySide2.QtNetwork.QNetworkInterface',), + + # class PySide2.QtNetwork.QNetworkProxy: + "QNetworkProxy.__init__": [(), ('PySide2.QtNetwork.QNetworkProxy',), ('PySide2.QtNetwork.QNetworkProxy.ProxyType', 'str', 'int', 'str', 'str')], + "QNetworkProxy.__copy__": (), + "QNetworkProxy.applicationProxy": (), + "QNetworkProxy.capabilities": (), + "QNetworkProxy.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkProxy.hostName": (), + "QNetworkProxy.isCachingProxy": (), + "QNetworkProxy.isTransparentProxy": (), + "QNetworkProxy.password": (), + "QNetworkProxy.port": (), + "QNetworkProxy.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.rawHeaderList": (), + "QNetworkProxy.setApplicationProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.setCapabilities": ('Capabilities',), + "QNetworkProxy.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'PySide2.support.signature.typing.Any'), + "QNetworkProxy.setHostName": ('str',), + "QNetworkProxy.setPassword": ('str',), + "QNetworkProxy.setPort": ('int',), + "QNetworkProxy.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkProxy.setType": ('PySide2.QtNetwork.QNetworkProxy.ProxyType',), + "QNetworkProxy.setUser": ('str',), + "QNetworkProxy.swap": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.type": (), + "QNetworkProxy.user": (), + + # class PySide2.QtNetwork.QNetworkProxyFactory: + "QNetworkProxyFactory.__init__": (), + "QNetworkProxyFactory.proxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.queryProxy": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.setApplicationProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkProxyFactory.setUseSystemConfiguration": ('bool',), + "QNetworkProxyFactory.systemProxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + + # class PySide2.QtNetwork.QNetworkProxyQuery: + "QNetworkProxyQuery.__init__": [(), ('PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkProxyQuery',), ('int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType')], + "QNetworkProxyQuery.__copy__": (), + "QNetworkProxyQuery.localPort": (), + "QNetworkProxyQuery.networkConfiguration": (), + "QNetworkProxyQuery.peerHostName": (), + "QNetworkProxyQuery.peerPort": (), + "QNetworkProxyQuery.protocolTag": (), + "QNetworkProxyQuery.queryType": (), + "QNetworkProxyQuery.setLocalPort": ('int',), + "QNetworkProxyQuery.setNetworkConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkProxyQuery.setPeerHostName": ('str',), + "QNetworkProxyQuery.setPeerPort": ('int',), + "QNetworkProxyQuery.setProtocolTag": ('str',), + "QNetworkProxyQuery.setQueryType": ('PySide2.QtNetwork.QNetworkProxyQuery.QueryType',), + "QNetworkProxyQuery.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkProxyQuery.swap": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyQuery.url": (), + + # class PySide2.QtNetwork.QNetworkReply: + "QNetworkReply.__init__": ('PySide2.QtCore.QObject',), + "QNetworkReply.abort": (), + "QNetworkReply.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute',), + "QNetworkReply.close": (), + "QNetworkReply.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkReply.ignoreSslErrors": [(), ('list',)], + "QNetworkReply.ignoreSslErrorsImplementation": ('list',), + "QNetworkReply.isFinished": (), + "QNetworkReply.isRunning": (), + "QNetworkReply.isSequential": (), + "QNetworkReply.manager": (), + "QNetworkReply.operation": (), + "QNetworkReply.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.rawHeaderList": (), + "QNetworkReply.rawHeaderPairs": (), + "QNetworkReply.readBufferSize": (), + "QNetworkReply.request": (), + "QNetworkReply.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'PySide2.support.signature.typing.Any'), + "QNetworkReply.setError": ('PySide2.QtNetwork.QNetworkReply.NetworkError', 'str'), + "QNetworkReply.setFinished": ('bool',), + "QNetworkReply.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'PySide2.support.signature.typing.Any'), + "QNetworkReply.setOperation": ('PySide2.QtNetwork.QNetworkAccessManager.Operation',), + "QNetworkReply.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkReply.setReadBufferSize": ('int',), + "QNetworkReply.setRequest": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkReply.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setSslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkReply.sslConfiguration": (), + "QNetworkReply.sslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.url": (), + "QNetworkReply.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkRequest: + "QNetworkRequest.__init__": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QNetworkRequest.__copy__": (), + "QNetworkRequest.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'PySide2.support.signature.typing.Any'), + "QNetworkRequest.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkRequest.maximumRedirectsAllowed": (), + "QNetworkRequest.originatingObject": (), + "QNetworkRequest.priority": (), + "QNetworkRequest.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.rawHeaderList": (), + "QNetworkRequest.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'PySide2.support.signature.typing.Any'), + "QNetworkRequest.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'PySide2.support.signature.typing.Any'), + "QNetworkRequest.setMaximumRedirectsAllowed": ('int',), + "QNetworkRequest.setOriginatingObject": ('PySide2.QtCore.QObject',), + "QNetworkRequest.setPriority": ('PySide2.QtNetwork.QNetworkRequest.Priority',), + "QNetworkRequest.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkRequest.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkRequest.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkRequest.sslConfiguration": (), + "QNetworkRequest.swap": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkRequest.url": (), + + # class PySide2.QtNetwork.QNetworkSession: + "QNetworkSession.__init__": ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QObject'), + "QNetworkSession.accept": (), + "QNetworkSession.activeTime": (), + "QNetworkSession.bytesReceived": (), + "QNetworkSession.bytesWritten": (), + "QNetworkSession.close": (), + "QNetworkSession.configuration": (), + "QNetworkSession.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.errorString": (), + "QNetworkSession.ignore": (), + "QNetworkSession.interface": (), + "QNetworkSession.isOpen": (), + "QNetworkSession.migrate": (), + "QNetworkSession.open": (), + "QNetworkSession.reject": (), + "QNetworkSession.sessionProperty": ('str',), + "QNetworkSession.setSessionProperty": ('str', 'PySide2.support.signature.typing.Any'), + "QNetworkSession.state": (), + "QNetworkSession.stop": (), + "QNetworkSession.usagePolicies": (), + "QNetworkSession.waitForOpened": ('int',), + + # class PySide2.QtNetwork.QSsl: + + # class PySide2.QtNetwork.QSslCertificate: + "QSslCertificate.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtNetwork.QSslCertificate',)], + "QSslCertificate.__copy__": (), + "QSslCertificate.clear": (), + "QSslCertificate.digest": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QSslCertificate.effectiveDate": (), + "QSslCertificate.expiryDate": (), + "QSslCertificate.fromData": ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromDevice": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromPath": ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax'), + "QSslCertificate.handle": (), + "QSslCertificate.importPkcs12": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSslKey', 'PySide2.QtNetwork.QSslCertificate', 'list', 'PySide2.QtCore.QByteArray'), + "QSslCertificate.isBlacklisted": (), + "QSslCertificate.isNull": (), + "QSslCertificate.isSelfSigned": (), + "QSslCertificate.issuerInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.issuerInfoAttributes": (), + "QSslCertificate.publicKey": (), + "QSslCertificate.serialNumber": (), + "QSslCertificate.subjectAlternativeNames": (), + "QSslCertificate.subjectInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.subjectInfoAttributes": (), + "QSslCertificate.swap": ('PySide2.QtNetwork.QSslCertificate',), + "QSslCertificate.toDer": (), + "QSslCertificate.toPem": (), + "QSslCertificate.toText": (), + "QSslCertificate.verify": ('list', 'str'), + "QSslCertificate.version": (), + + # class PySide2.QtNetwork.QSslCipher: + "QSslCipher.__init__": [(), ('PySide2.QtNetwork.QSslCipher',), ('str',), ('str', 'PySide2.QtNetwork.QSsl.SslProtocol')], + "QSslCipher.__copy__": (), + "QSslCipher.authenticationMethod": (), + "QSslCipher.encryptionMethod": (), + "QSslCipher.isNull": (), + "QSslCipher.keyExchangeMethod": (), + "QSslCipher.name": (), + "QSslCipher.protocol": (), + "QSslCipher.protocolString": (), + "QSslCipher.supportedBits": (), + "QSslCipher.swap": ('PySide2.QtNetwork.QSslCipher',), + "QSslCipher.usedBits": (), + + # class PySide2.QtNetwork.QSslConfiguration: + "QSslConfiguration.__init__": [(), ('PySide2.QtNetwork.QSslConfiguration',)], + "QSslConfiguration.__copy__": (), + "QSslConfiguration.allowedNextProtocols": (), + "QSslConfiguration.caCertificates": (), + "QSslConfiguration.ciphers": (), + "QSslConfiguration.defaultConfiguration": (), + "QSslConfiguration.isNull": (), + "QSslConfiguration.localCertificate": (), + "QSslConfiguration.localCertificateChain": (), + "QSslConfiguration.nextNegotiatedProtocol": (), + "QSslConfiguration.nextProtocolNegotiationStatus": (), + "QSslConfiguration.peerCertificate": (), + "QSslConfiguration.peerCertificateChain": (), + "QSslConfiguration.peerVerifyDepth": (), + "QSslConfiguration.peerVerifyMode": (), + "QSslConfiguration.privateKey": (), + "QSslConfiguration.protocol": (), + "QSslConfiguration.sessionCipher": (), + "QSslConfiguration.sessionProtocol": (), + "QSslConfiguration.sessionTicket": (), + "QSslConfiguration.sessionTicketLifeTimeHint": (), + "QSslConfiguration.setAllowedNextProtocols": ('list',), + "QSslConfiguration.setCaCertificates": ('list',), + "QSslConfiguration.setCiphers": ('list',), + "QSslConfiguration.setDefaultConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.setLocalCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslConfiguration.setLocalCertificateChain": ('list',), + "QSslConfiguration.setPeerVerifyDepth": ('int',), + "QSslConfiguration.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslConfiguration.setPrivateKey": ('PySide2.QtNetwork.QSslKey',), + "QSslConfiguration.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslConfiguration.setSessionTicket": ('PySide2.QtCore.QByteArray',), + "QSslConfiguration.setSslOption": ('PySide2.QtNetwork.QSsl.SslOption', 'bool'), + "QSslConfiguration.supportedCiphers": (), + "QSslConfiguration.swap": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.systemCaCertificates": (), + "QSslConfiguration.testSslOption": ('PySide2.QtNetwork.QSsl.SslOption',), + + # class PySide2.QtNetwork.QSslError: + "QSslError.__init__": [(), ('PySide2.QtNetwork.QSslError',), ('PySide2.QtNetwork.QSslError.SslError',), ('PySide2.QtNetwork.QSslError.SslError', 'PySide2.QtNetwork.QSslCertificate')], + "QSslError.__copy__": (), + "QSslError.certificate": (), + "QSslError.error": (), + "QSslError.errorString": (), + "QSslError.swap": ('PySide2.QtNetwork.QSslError',), + + # class PySide2.QtNetwork.QSslKey: + "QSslKey.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QSslKey',), ('int', 'PySide2.QtNetwork.QSsl.KeyType')], + "QSslKey.__copy__": (), + "QSslKey.algorithm": (), + "QSslKey.clear": (), + "QSslKey.handle": (), + "QSslKey.isNull": (), + "QSslKey.length": (), + "QSslKey.swap": ('PySide2.QtNetwork.QSslKey',), + "QSslKey.toDer": ('PySide2.QtCore.QByteArray',), + "QSslKey.toPem": ('PySide2.QtCore.QByteArray',), + "QSslKey.type": (), + + # class PySide2.QtNetwork.QSslSocket: + "QSslSocket.__init__": ('PySide2.QtCore.QObject',), + "QSslSocket.abort": (), + "QSslSocket.addCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.addDefaultCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addDefaultCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.atEnd": (), + "QSslSocket.bytesAvailable": (), + "QSslSocket.bytesToWrite": (), + "QSslSocket.caCertificates": (), + "QSslSocket.canReadLine": (), + "QSslSocket.ciphers": (), + "QSslSocket.close": (), + "QSslSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'OpenMode'), ('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.connectToHostEncrypted": [('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol'), ('str', 'int', 'str', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.defaultCaCertificates": (), + "QSslSocket.defaultCiphers": (), + "QSslSocket.disconnectFromHost": (), + "QSslSocket.encryptedBytesAvailable": (), + "QSslSocket.encryptedBytesToWrite": (), + "QSslSocket.flush": (), + "QSslSocket.ignoreSslErrors": [(), ('list',)], + "QSslSocket.isEncrypted": (), + "QSslSocket.localCertificate": (), + "QSslSocket.localCertificateChain": (), + "QSslSocket.mode": (), + "QSslSocket.peerCertificate": (), + "QSslSocket.peerCertificateChain": (), + "QSslSocket.peerVerifyDepth": (), + "QSslSocket.peerVerifyMode": (), + "QSslSocket.peerVerifyName": (), + "QSslSocket.privateKey": (), + "QSslSocket.protocol": (), + "QSslSocket.readData": ('str', 'int'), + "QSslSocket.resume": (), + "QSslSocket.sessionCipher": (), + "QSslSocket.sessionProtocol": (), + "QSslSocket.setCaCertificates": ('list',), + "QSslSocket.setCiphers": [('list',), ('str',)], + "QSslSocket.setDefaultCaCertificates": ('list',), + "QSslSocket.setDefaultCiphers": ('list',), + "QSslSocket.setLocalCertificate": [('PySide2.QtNetwork.QSslCertificate',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat')], + "QSslSocket.setLocalCertificateChain": ('list',), + "QSslSocket.setPeerVerifyDepth": ('int',), + "QSslSocket.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslSocket.setPeerVerifyName": ('str',), + "QSslSocket.setPrivateKey": [('PySide2.QtNetwork.QSslKey',), ('str', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QByteArray')], + "QSslSocket.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslSocket.setReadBufferSize": ('int',), + "QSslSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'OpenMode'), + "QSslSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'PySide2.support.signature.typing.Any'), + "QSslSocket.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QSslSocket.sslConfiguration": (), + "QSslSocket.sslLibraryBuildVersionNumber": (), + "QSslSocket.sslLibraryBuildVersionString": (), + "QSslSocket.sslLibraryVersionNumber": (), + "QSslSocket.sslLibraryVersionString": (), + "QSslSocket.startClientEncryption": (), + "QSslSocket.startServerEncryption": (), + "QSslSocket.supportedCiphers": (), + "QSslSocket.supportsSsl": (), + "QSslSocket.systemCaCertificates": (), + "QSslSocket.waitForBytesWritten": ('int',), + "QSslSocket.waitForConnected": ('int',), + "QSslSocket.waitForDisconnected": ('int',), + "QSslSocket.waitForEncrypted": ('int',), + "QSslSocket.waitForReadyRead": ('int',), + "QSslSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QTcpServer: + "QTcpServer.__init__": ('PySide2.QtCore.QObject',), + "QTcpServer.addPendingConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QTcpServer.close": (), + "QTcpServer.errorString": (), + "QTcpServer.hasPendingConnections": (), + "QTcpServer.incomingConnection": ('int',), + "QTcpServer.isListening": (), + "QTcpServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QTcpServer.maxPendingConnections": (), + "QTcpServer.nextPendingConnection": (), + "QTcpServer.pauseAccepting": (), + "QTcpServer.proxy": (), + "QTcpServer.resumeAccepting": (), + "QTcpServer.serverAddress": (), + "QTcpServer.serverError": (), + "QTcpServer.serverPort": (), + "QTcpServer.setMaxPendingConnections": ('int',), + "QTcpServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QTcpServer.setSocketDescriptor": ('int',), + "QTcpServer.socketDescriptor": (), + "QTcpServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QTcpSocket: + "QTcpSocket.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtNetwork.QUdpSocket: + "QUdpSocket.__init__": ('PySide2.QtCore.QObject',), + "QUdpSocket.hasPendingDatagrams": (), + "QUdpSocket.joinMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.leaveMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.multicastInterface": (), + "QUdpSocket.pendingDatagramSize": (), + "QUdpSocket.readDatagram": ('str', 'int', 'PySide2.QtNetwork.QHostAddress', 'int'), + "QUdpSocket.setMulticastInterface": ('PySide2.QtNetwork.QNetworkInterface',), + "QUdpSocket.writeDatagram": ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHostAddress', 'int'), + }) + +# Module PySide2.QtTest +if "PySide2.QtTest" in sys.modules: + dict.update({ + + # class PySide2.QtTest.QTest: + "QTest.waitForEvents": (), + "QTest.addColumnInternal": ('int', 'str'), + "QTest.asciiToKey": ('PySide2.support.signature.typing.Union[str, int]',), + "QTest.compare_ptr_helper": ('int', 'int', 'str', 'str', 'str', 'int'), + "QTest.compare_string_helper": ('str', 'str', 'str', 'str', 'str', 'int'), + "QTest.currentAppName": (), + "QTest.currentDataTag": (), + "QTest.currentTestFailed": (), + "QTest.currentTestFunction": (), + "QTest.ignoreMessage": ('PySide2.QtCore.QtMsgType', 'str'), + "QTest.keyClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyClicks": ('PySide2.QtWidgets.QWidget', 'str', 'KeyboardModifiers', 'int'), + "QTest.keyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyPress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyToAscii": ('PySide2.QtCore.Qt.Key',), + "QTest.mouseClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseDClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseEvent": [('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseMove": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mousePress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.qElementData": ('str', 'int'), + "QTest.qExpectFail": ('str', 'str', 'PySide2.QtTest.QTest.TestFailMode', 'str', 'int'), + "QTest.qFindTestData": ['int', 'str', 'str', 'str'], + "QTest.qGlobalData": ('str', 'int'), + "QTest.qSkip": ('str', 'str', 'int'), + "QTest.qWaitForWindowActive": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.qWaitForWindowExposed": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.sendKeyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'str', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'PySide2.support.signature.typing.Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'str', 'KeyboardModifiers', 'int')], + "QTest.setBenchmarkResult": ('float', 'PySide2.QtTest.QTest.QBenchmarkMetric'), + "QTest.setMainSourcePath": ('str', 'str'), + "QTest.simulateEvent": [('PySide2.QtGui.QWindow', 'bool', 'int', 'KeyboardModifiers', 'str', 'bool', 'int'), ('PySide2.QtWidgets.QWidget', 'bool', 'int', 'KeyboardModifiers', 'str', 'bool', 'int')], + "QTest.testObject": (), + "QTest.toPrettyCString": ('str', 'int'), + "QTest.touchEvent": [('PySide2.QtGui.QWindow', 'PySide2.QtGui.QTouchDevice', 'bool'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QTouchDevice', 'bool')], + }) + +# Module PySide2.QtConcurrent +if "PySide2.QtConcurrent" in sys.modules: + dict.update({ + + # class PySide2.QtConcurrent.QtConcurrent: + }) + +# Module PySide2.QtWinExtras +if "PySide2.QtWinExtras" in sys.modules: + dict.update({ + + # class PySide2.QtWinExtras.QWinColorizationChangeEvent: + "QWinColorizationChangeEvent.__init__": ('int', 'bool'), + "QWinColorizationChangeEvent.color": (), + "QWinColorizationChangeEvent.opaqueBlend": (), + + # class PySide2.QtWinExtras.QWinCompositionChangeEvent: + "QWinCompositionChangeEvent.__init__": ('bool',), + "QWinCompositionChangeEvent.isCompositionEnabled": (), + + # class PySide2.QtWinExtras.QWinEvent: + "QWinEvent.__init__": ('int',), + + # class PySide2.QtWinExtras.QWinJumpList: + "QWinJumpList.__init__": ('PySide2.QtCore.QObject',), + "QWinJumpList.addCategory": [('PySide2.QtWinExtras.QWinJumpListCategory',), ('str', 'list')], + "QWinJumpList.categories": (), + "QWinJumpList.clear": (), + "QWinJumpList.frequent": (), + "QWinJumpList.identifier": (), + "QWinJumpList.recent": (), + "QWinJumpList.setIdentifier": ('str',), + "QWinJumpList.tasks": (), + + # class PySide2.QtWinExtras.QWinJumpListCategory: + "QWinJumpListCategory.__init__": ('str',), + "QWinJumpListCategory.addDestination": ('str',), + "QWinJumpListCategory.addItem": ('PySide2.QtWinExtras.QWinJumpListItem',), + "QWinJumpListCategory.addLink": [('PySide2.QtGui.QIcon', 'str', 'str', 'PySide2.support.signature.typing.List'), ('str', 'str', 'PySide2.support.signature.typing.List')], + "QWinJumpListCategory.addSeparator": (), + "QWinJumpListCategory.clear": (), + "QWinJumpListCategory.count": (), + "QWinJumpListCategory.isEmpty": (), + "QWinJumpListCategory.isVisible": (), + "QWinJumpListCategory.items": (), + "QWinJumpListCategory.setTitle": ('str',), + "QWinJumpListCategory.setVisible": ('bool',), + "QWinJumpListCategory.title": (), + "QWinJumpListCategory.type": (), + + # class PySide2.QtWinExtras.QWinJumpListItem: + "QWinJumpListItem.__init__": ('PySide2.QtWinExtras.QWinJumpListItem.Type',), + "QWinJumpListItem.arguments": (), + "QWinJumpListItem.description": (), + "QWinJumpListItem.filePath": (), + "QWinJumpListItem.icon": (), + "QWinJumpListItem.setArguments": ('PySide2.support.signature.typing.List',), + "QWinJumpListItem.setDescription": ('str',), + "QWinJumpListItem.setFilePath": ('str',), + "QWinJumpListItem.setIcon": ('PySide2.QtGui.QIcon',), + "QWinJumpListItem.setTitle": ('str',), + "QWinJumpListItem.setType": ('PySide2.QtWinExtras.QWinJumpListItem.Type',), + "QWinJumpListItem.setWorkingDirectory": ('str',), + "QWinJumpListItem.title": (), + "QWinJumpListItem.type": (), + "QWinJumpListItem.workingDirectory": (), + + # class PySide2.QtWinExtras.QWinTaskbarButton: + "QWinTaskbarButton.__init__": ('PySide2.QtCore.QObject',), + "QWinTaskbarButton.clearOverlayIcon": (), + "QWinTaskbarButton.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QWinTaskbarButton.overlayAccessibleDescription": (), + "QWinTaskbarButton.overlayIcon": (), + "QWinTaskbarButton.progress": (), + "QWinTaskbarButton.setOverlayAccessibleDescription": ('str',), + "QWinTaskbarButton.setOverlayIcon": ('PySide2.QtGui.QIcon',), + "QWinTaskbarButton.setWindow": ('PySide2.QtGui.QWindow',), + "QWinTaskbarButton.window": (), + + # class PySide2.QtWinExtras.QWinTaskbarProgress: + "QWinTaskbarProgress.__init__": ('PySide2.QtCore.QObject',), + "QWinTaskbarProgress.hide": (), + "QWinTaskbarProgress.isPaused": (), + "QWinTaskbarProgress.isStopped": (), + "QWinTaskbarProgress.isVisible": (), + "QWinTaskbarProgress.maximum": (), + "QWinTaskbarProgress.minimum": (), + "QWinTaskbarProgress.pause": (), + "QWinTaskbarProgress.reset": (), + "QWinTaskbarProgress.resume": (), + "QWinTaskbarProgress.setMaximum": ('int',), + "QWinTaskbarProgress.setMinimum": ('int',), + "QWinTaskbarProgress.setPaused": ('bool',), + "QWinTaskbarProgress.setRange": ('int', 'int'), + "QWinTaskbarProgress.setValue": ('int',), + "QWinTaskbarProgress.setVisible": ('bool',), + "QWinTaskbarProgress.show": (), + "QWinTaskbarProgress.stop": (), + "QWinTaskbarProgress.value": (), + + # class PySide2.QtWinExtras.QWinThumbnailToolBar: + "QWinThumbnailToolBar.__init__": ('PySide2.QtCore.QObject',), + "QWinThumbnailToolBar.addButton": ('PySide2.QtWinExtras.QWinThumbnailToolButton',), + "QWinThumbnailToolBar.buttons": (), + "QWinThumbnailToolBar.clear": (), + "QWinThumbnailToolBar.count": (), + "QWinThumbnailToolBar.iconicLivePreviewPixmap": (), + "QWinThumbnailToolBar.iconicPixmapNotificationsEnabled": (), + "QWinThumbnailToolBar.iconicThumbnailPixmap": (), + "QWinThumbnailToolBar.removeButton": ('PySide2.QtWinExtras.QWinThumbnailToolButton',), + "QWinThumbnailToolBar.setButtons": ('list',), + "QWinThumbnailToolBar.setIconicLivePreviewPixmap": ('PySide2.QtGui.QPixmap',), + "QWinThumbnailToolBar.setIconicPixmapNotificationsEnabled": ('bool',), + "QWinThumbnailToolBar.setIconicThumbnailPixmap": ('PySide2.QtGui.QPixmap',), + "QWinThumbnailToolBar.setWindow": ('PySide2.QtGui.QWindow',), + "QWinThumbnailToolBar.window": (), + + # class PySide2.QtWinExtras.QWinThumbnailToolButton: + "QWinThumbnailToolButton.__init__": ('PySide2.QtCore.QObject',), + "QWinThumbnailToolButton.click": (), + "QWinThumbnailToolButton.dismissOnClick": (), + "QWinThumbnailToolButton.icon": (), + "QWinThumbnailToolButton.isEnabled": (), + "QWinThumbnailToolButton.isFlat": (), + "QWinThumbnailToolButton.isInteractive": (), + "QWinThumbnailToolButton.isVisible": (), + "QWinThumbnailToolButton.setDismissOnClick": ('bool',), + "QWinThumbnailToolButton.setEnabled": ('bool',), + "QWinThumbnailToolButton.setFlat": ('bool',), + "QWinThumbnailToolButton.setIcon": ('PySide2.QtGui.QIcon',), + "QWinThumbnailToolButton.setInteractive": ('bool',), + "QWinThumbnailToolButton.setToolTip": ('str',), + "QWinThumbnailToolButton.setVisible": ('bool',), + "QWinThumbnailToolButton.toolTip": (), + }) + +# Module PySide2.QtXml +if "PySide2.QtXml" in sys.modules: + dict.update({ + + # class PySide2.QtXml.QDomAttr: + "QDomAttr.__init__": [(), ('PySide2.QtXml.QDomAttr',)], + "QDomAttr.__copy__": (), + "QDomAttr.name": (), + "QDomAttr.nodeType": (), + "QDomAttr.ownerElement": (), + "QDomAttr.setValue": ('str',), + "QDomAttr.specified": (), + "QDomAttr.value": (), + + # class PySide2.QtXml.QDomCDATASection: + "QDomCDATASection.__init__": [(), ('PySide2.QtXml.QDomCDATASection',)], + "QDomCDATASection.__copy__": (), + "QDomCDATASection.nodeType": (), + + # class PySide2.QtXml.QDomCharacterData: + "QDomCharacterData.__init__": [(), ('PySide2.QtXml.QDomCharacterData',)], + "QDomCharacterData.__copy__": (), + "QDomCharacterData.appendData": ('str',), + "QDomCharacterData.data": (), + "QDomCharacterData.deleteData": ('int', 'int'), + "QDomCharacterData.insertData": ('int', 'str'), + "QDomCharacterData.length": (), + "QDomCharacterData.nodeType": (), + "QDomCharacterData.replaceData": ('int', 'int', 'str'), + "QDomCharacterData.setData": ('str',), + "QDomCharacterData.substringData": ('int', 'int'), + + # class PySide2.QtXml.QDomComment: + "QDomComment.__init__": [(), ('PySide2.QtXml.QDomComment',)], + "QDomComment.__copy__": (), + "QDomComment.nodeType": (), + + # class PySide2.QtXml.QDomDocument: + "QDomDocument.__init__": [(), ('PySide2.QtXml.QDomDocument',), ('PySide2.QtXml.QDomDocumentType',), ('str',)], + "QDomDocument.__copy__": (), + "QDomDocument.createAttribute": ('str',), + "QDomDocument.createAttributeNS": ('str', 'str'), + "QDomDocument.createCDATASection": ('str',), + "QDomDocument.createComment": ('str',), + "QDomDocument.createDocumentFragment": (), + "QDomDocument.createElement": ('str',), + "QDomDocument.createElementNS": ('str', 'str'), + "QDomDocument.createEntityReference": ('str',), + "QDomDocument.createProcessingInstruction": ('str', 'str'), + "QDomDocument.createTextNode": ('str',), + "QDomDocument.doctype": (), + "QDomDocument.documentElement": (), + "QDomDocument.elementById": ('str',), + "QDomDocument.elementsByTagName": ('str',), + "QDomDocument.elementsByTagNameNS": ('str', 'str'), + "QDomDocument.implementation": (), + "QDomDocument.importNode": ('PySide2.QtXml.QDomNode', 'bool'), + "QDomDocument.nodeType": (), + "QDomDocument.setContent": [('PySide2.QtCore.QByteArray', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QByteArray', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'PySide2.QtXml.QXmlReader', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'bool', 'str', 'int', 'int'), ('str', 'bool', 'str', 'int', 'int'), ('str', 'str', 'int', 'int')], + "QDomDocument.toByteArray": ('int',), + "QDomDocument.toString": ('int',), + + # class PySide2.QtXml.QDomDocumentFragment: + "QDomDocumentFragment.__init__": [(), ('PySide2.QtXml.QDomDocumentFragment',)], + "QDomDocumentFragment.__copy__": (), + "QDomDocumentFragment.nodeType": (), + + # class PySide2.QtXml.QDomDocumentType: + "QDomDocumentType.__init__": [(), ('PySide2.QtXml.QDomDocumentType',)], + "QDomDocumentType.__copy__": (), + "QDomDocumentType.entities": (), + "QDomDocumentType.internalSubset": (), + "QDomDocumentType.name": (), + "QDomDocumentType.nodeType": (), + "QDomDocumentType.notations": (), + "QDomDocumentType.publicId": (), + "QDomDocumentType.systemId": (), + + # class PySide2.QtXml.QDomElement: + "QDomElement.__init__": [(), ('PySide2.QtXml.QDomElement',)], + "QDomElement.__copy__": (), + "QDomElement.attribute": ('str', 'str'), + "QDomElement.attributeNS": ('str', 'str', 'str'), + "QDomElement.attributeNode": ('str',), + "QDomElement.attributeNodeNS": ('str', 'str'), + "QDomElement.attributes": (), + "QDomElement.elementsByTagName": ('str',), + "QDomElement.elementsByTagNameNS": ('str', 'str'), + "QDomElement.hasAttribute": ('str',), + "QDomElement.hasAttributeNS": ('str', 'str'), + "QDomElement.nodeType": (), + "QDomElement.removeAttribute": ('str',), + "QDomElement.removeAttributeNS": ('str', 'str'), + "QDomElement.removeAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttribute": [('str', 'float'), ('str', 'int'), ('str', 'str')], + "QDomElement.setAttributeNS": [('str', 'str', 'float'), ('str', 'str', 'int'), ('str', 'str', 'str')], + "QDomElement.setAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttributeNodeNS": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setTagName": ('str',), + "QDomElement.tagName": (), + "QDomElement.text": (), + + # class PySide2.QtXml.QDomEntity: + "QDomEntity.__init__": [(), ('PySide2.QtXml.QDomEntity',)], + "QDomEntity.__copy__": (), + "QDomEntity.nodeType": (), + "QDomEntity.notationName": (), + "QDomEntity.publicId": (), + "QDomEntity.systemId": (), + + # class PySide2.QtXml.QDomEntityReference: + "QDomEntityReference.__init__": [(), ('PySide2.QtXml.QDomEntityReference',)], + "QDomEntityReference.__copy__": (), + "QDomEntityReference.nodeType": (), + + # class PySide2.QtXml.QDomImplementation: + "QDomImplementation.__init__": [(), ('PySide2.QtXml.QDomImplementation',)], + "QDomImplementation.__copy__": (), + "QDomImplementation.createDocument": ('str', 'str', 'PySide2.QtXml.QDomDocumentType'), + "QDomImplementation.createDocumentType": ('str', 'str', 'str'), + "QDomImplementation.hasFeature": ('str', 'str'), + "QDomImplementation.invalidDataPolicy": (), + "QDomImplementation.isNull": (), + "QDomImplementation.setInvalidDataPolicy": ('PySide2.QtXml.QDomImplementation.InvalidDataPolicy',), + + # class PySide2.QtXml.QDomNamedNodeMap: + "QDomNamedNodeMap.__init__": [(), ('PySide2.QtXml.QDomNamedNodeMap',)], + "QDomNamedNodeMap.__copy__": (), + "QDomNamedNodeMap.contains": ('str',), + "QDomNamedNodeMap.count": (), + "QDomNamedNodeMap.isEmpty": (), + "QDomNamedNodeMap.item": ('int',), + "QDomNamedNodeMap.length": (), + "QDomNamedNodeMap.namedItem": ('str',), + "QDomNamedNodeMap.namedItemNS": ('str', 'str'), + "QDomNamedNodeMap.removeNamedItem": ('str',), + "QDomNamedNodeMap.removeNamedItemNS": ('str', 'str'), + "QDomNamedNodeMap.setNamedItem": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.setNamedItemNS": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.size": (), + + # class PySide2.QtXml.QDomNode: + "QDomNode.__init__": [(), ('PySide2.QtXml.QDomNode',)], + "QDomNode.__copy__": (), + "QDomNode.appendChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.attributes": (), + "QDomNode.childNodes": (), + "QDomNode.clear": (), + "QDomNode.cloneNode": ('bool',), + "QDomNode.columnNumber": (), + "QDomNode.firstChild": (), + "QDomNode.firstChildElement": ('str',), + "QDomNode.hasAttributes": (), + "QDomNode.hasChildNodes": (), + "QDomNode.insertAfter": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.insertBefore": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.isAttr": (), + "QDomNode.isCDATASection": (), + "QDomNode.isCharacterData": (), + "QDomNode.isComment": (), + "QDomNode.isDocument": (), + "QDomNode.isDocumentFragment": (), + "QDomNode.isDocumentType": (), + "QDomNode.isElement": (), + "QDomNode.isEntity": (), + "QDomNode.isEntityReference": (), + "QDomNode.isNotation": (), + "QDomNode.isNull": (), + "QDomNode.isProcessingInstruction": (), + "QDomNode.isSupported": ('str', 'str'), + "QDomNode.isText": (), + "QDomNode.lastChild": (), + "QDomNode.lastChildElement": ('str',), + "QDomNode.lineNumber": (), + "QDomNode.localName": (), + "QDomNode.namedItem": ('str',), + "QDomNode.namespaceURI": (), + "QDomNode.nextSibling": (), + "QDomNode.nextSiblingElement": ('str',), + "QDomNode.nodeName": (), + "QDomNode.nodeType": (), + "QDomNode.nodeValue": (), + "QDomNode.normalize": (), + "QDomNode.ownerDocument": (), + "QDomNode.parentNode": (), + "QDomNode.prefix": (), + "QDomNode.previousSibling": (), + "QDomNode.previousSiblingElement": ('str',), + "QDomNode.removeChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.replaceChild": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.save": ('PySide2.QtCore.QTextStream', 'int', 'PySide2.QtXml.QDomNode.EncodingPolicy'), + "QDomNode.setNodeValue": ('str',), + "QDomNode.setPrefix": ('str',), + "QDomNode.toAttr": (), + "QDomNode.toCDATASection": (), + "QDomNode.toCharacterData": (), + "QDomNode.toComment": (), + "QDomNode.toDocument": (), + "QDomNode.toDocumentFragment": (), + "QDomNode.toDocumentType": (), + "QDomNode.toElement": (), + "QDomNode.toEntity": (), + "QDomNode.toEntityReference": (), + "QDomNode.toNotation": (), + "QDomNode.toProcessingInstruction": (), + "QDomNode.toText": (), + + # class PySide2.QtXml.QDomNodeList: + "QDomNodeList.__init__": [(), ('PySide2.QtXml.QDomNodeList',)], + "QDomNodeList.__copy__": (), + "QDomNodeList.at": ('int',), + "QDomNodeList.count": (), + "QDomNodeList.isEmpty": (), + "QDomNodeList.item": ('int',), + "QDomNodeList.length": (), + "QDomNodeList.size": (), + + # class PySide2.QtXml.QDomNotation: + "QDomNotation.__init__": [(), ('PySide2.QtXml.QDomNotation',)], + "QDomNotation.__copy__": (), + "QDomNotation.nodeType": (), + "QDomNotation.publicId": (), + "QDomNotation.systemId": (), + + # class PySide2.QtXml.QDomProcessingInstruction: + "QDomProcessingInstruction.__init__": [(), ('PySide2.QtXml.QDomProcessingInstruction',)], + "QDomProcessingInstruction.__copy__": (), + "QDomProcessingInstruction.data": (), + "QDomProcessingInstruction.nodeType": (), + "QDomProcessingInstruction.setData": ('str',), + "QDomProcessingInstruction.target": (), + + # class PySide2.QtXml.QDomText: + "QDomText.__init__": [(), ('PySide2.QtXml.QDomText',)], + "QDomText.__copy__": (), + "QDomText.nodeType": (), + "QDomText.splitText": ('int',), + + # class PySide2.QtXml.QXmlAttributes: + "QXmlAttributes.__init__": [(), ('PySide2.QtXml.QXmlAttributes',)], + "QXmlAttributes.__copy__": (), + "QXmlAttributes.append": ('str', 'str', 'str', 'str'), + "QXmlAttributes.clear": (), + "QXmlAttributes.count": (), + "QXmlAttributes.index": [('str',), ('str', 'str')], + "QXmlAttributes.length": (), + "QXmlAttributes.localName": ('int',), + "QXmlAttributes.qName": ('int',), + "QXmlAttributes.type": [('int',), ('str',), ('str', 'str')], + "QXmlAttributes.uri": ('int',), + "QXmlAttributes.value": [('int',), ('str',), ('str', 'str')], + + # class PySide2.QtXml.QXmlContentHandler: + "QXmlContentHandler.__init__": (), + "QXmlContentHandler.characters": ('str',), + "QXmlContentHandler.endDocument": (), + "QXmlContentHandler.endElement": ('str', 'str', 'str'), + "QXmlContentHandler.endPrefixMapping": ('str',), + "QXmlContentHandler.errorString": (), + "QXmlContentHandler.ignorableWhitespace": ('str',), + "QXmlContentHandler.processingInstruction": ('str', 'str'), + "QXmlContentHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlContentHandler.skippedEntity": ('str',), + "QXmlContentHandler.startDocument": (), + "QXmlContentHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlContentHandler.startPrefixMapping": ('str', 'str'), + + # class PySide2.QtXml.QXmlDTDHandler: + "QXmlDTDHandler.__init__": (), + "QXmlDTDHandler.errorString": (), + "QXmlDTDHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDTDHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + + # class PySide2.QtXml.QXmlDeclHandler: + "QXmlDeclHandler.__init__": (), + "QXmlDeclHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDeclHandler.errorString": (), + "QXmlDeclHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDeclHandler.internalEntityDecl": ('str', 'str'), + + # class PySide2.QtXml.QXmlDefaultHandler: + "QXmlDefaultHandler.__init__": (), + "QXmlDefaultHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDefaultHandler.characters": ('str',), + "QXmlDefaultHandler.comment": ('str',), + "QXmlDefaultHandler.endCDATA": (), + "QXmlDefaultHandler.endDTD": (), + "QXmlDefaultHandler.endDocument": (), + "QXmlDefaultHandler.endElement": ('str', 'str', 'str'), + "QXmlDefaultHandler.endEntity": ('str',), + "QXmlDefaultHandler.endPrefixMapping": ('str',), + "QXmlDefaultHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.errorString": (), + "QXmlDefaultHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.ignorableWhitespace": ('str',), + "QXmlDefaultHandler.internalEntityDecl": ('str', 'str'), + "QXmlDefaultHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.processingInstruction": ('str', 'str'), + "QXmlDefaultHandler.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + "QXmlDefaultHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlDefaultHandler.skippedEntity": ('str',), + "QXmlDefaultHandler.startCDATA": (), + "QXmlDefaultHandler.startDTD": ('str', 'str', 'str'), + "QXmlDefaultHandler.startDocument": (), + "QXmlDefaultHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlDefaultHandler.startEntity": ('str',), + "QXmlDefaultHandler.startPrefixMapping": ('str', 'str'), + "QXmlDefaultHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + "QXmlDefaultHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlEntityResolver: + "QXmlEntityResolver.__init__": (), + "QXmlEntityResolver.errorString": (), + "QXmlEntityResolver.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + + # class PySide2.QtXml.QXmlErrorHandler: + "QXmlErrorHandler.__init__": (), + "QXmlErrorHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.errorString": (), + "QXmlErrorHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlInputSource: + "QXmlInputSource.__init__": [(), ('PySide2.QtCore.QIODevice',)], + "QXmlInputSource.data": (), + "QXmlInputSource.fetchData": (), + "QXmlInputSource.fromRawData": ('PySide2.QtCore.QByteArray', 'bool'), + "QXmlInputSource.next": (), + "QXmlInputSource.reset": (), + "QXmlInputSource.setData": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtXml.QXmlLexicalHandler: + "QXmlLexicalHandler.__init__": (), + "QXmlLexicalHandler.comment": ('str',), + "QXmlLexicalHandler.endCDATA": (), + "QXmlLexicalHandler.endDTD": (), + "QXmlLexicalHandler.endEntity": ('str',), + "QXmlLexicalHandler.errorString": (), + "QXmlLexicalHandler.startCDATA": (), + "QXmlLexicalHandler.startDTD": ('str', 'str', 'str'), + "QXmlLexicalHandler.startEntity": ('str',), + + # class PySide2.QtXml.QXmlLocator: + "QXmlLocator.__init__": (), + "QXmlLocator.columnNumber": (), + "QXmlLocator.lineNumber": (), + + # class PySide2.QtXml.QXmlNamespaceSupport: + "QXmlNamespaceSupport.__init__": (), + "QXmlNamespaceSupport.popContext": (), + "QXmlNamespaceSupport.prefix": ('str',), + "QXmlNamespaceSupport.prefixes": [(), ('str',)], + "QXmlNamespaceSupport.processName": ('str', 'bool', 'str', 'str'), + "QXmlNamespaceSupport.pushContext": (), + "QXmlNamespaceSupport.reset": (), + "QXmlNamespaceSupport.setPrefix": ('str', 'str'), + "QXmlNamespaceSupport.splitName": ('str', 'str', 'str'), + "QXmlNamespaceSupport.uri": ('str',), + + # class PySide2.QtXml.QXmlParseException: + "QXmlParseException.__init__": [('PySide2.QtXml.QXmlParseException',), ('str', 'int', 'int', 'str', 'str')], + "QXmlParseException.columnNumber": (), + "QXmlParseException.lineNumber": (), + "QXmlParseException.message": (), + "QXmlParseException.publicId": (), + "QXmlParseException.systemId": (), + + # class PySide2.QtXml.QXmlReader: + "QXmlReader.__init__": (), + "QXmlReader.DTDHandler": (), + "QXmlReader.contentHandler": (), + "QXmlReader.declHandler": (), + "QXmlReader.entityResolver": (), + "QXmlReader.errorHandler": (), + "QXmlReader.feature": ('str', 'bool'), + "QXmlReader.hasFeature": ('str',), + "QXmlReader.hasProperty": ('str',), + "QXmlReader.lexicalHandler": (), + "QXmlReader.parse": ['PySide2.QtXml.QXmlInputSource'], + "QXmlReader.property": ('str', 'bool'), + "QXmlReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlReader.setFeature": ('str', 'bool'), + "QXmlReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlReader.setProperty": ('str', 'int'), + + # class PySide2.QtXml.QXmlSimpleReader: + "QXmlSimpleReader.__init__": (), + "QXmlSimpleReader.DTDHandler": (), + "QXmlSimpleReader.contentHandler": (), + "QXmlSimpleReader.declHandler": (), + "QXmlSimpleReader.entityResolver": (), + "QXmlSimpleReader.errorHandler": (), + "QXmlSimpleReader.feature": ('str', 'bool'), + "QXmlSimpleReader.hasFeature": ('str',), + "QXmlSimpleReader.hasProperty": ('str',), + "QXmlSimpleReader.lexicalHandler": (), + "QXmlSimpleReader.parse": [('PySide2.QtXml.QXmlInputSource',), ('PySide2.QtXml.QXmlInputSource', 'bool')], + "QXmlSimpleReader.parseContinue": (), + "QXmlSimpleReader.property": ('str', 'bool'), + "QXmlSimpleReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlSimpleReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlSimpleReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlSimpleReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlSimpleReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlSimpleReader.setFeature": ('str', 'bool'), + "QXmlSimpleReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlSimpleReader.setProperty": ('str', 'int'), + }) + +# Module PySide2.QtXmlPatterns +if "PySide2.QtXmlPatterns" in sys.modules: + dict.update({ + + # class PySide2.QtXmlPatterns.QAbstractMessageHandler: + "QAbstractMessageHandler.__init__": ('PySide2.QtCore.QObject',), + "QAbstractMessageHandler.handleMessage": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + "QAbstractMessageHandler.message": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + + # class PySide2.QtXmlPatterns.QAbstractUriResolver: + "QAbstractUriResolver.__init__": ('PySide2.QtCore.QObject',), + "QAbstractUriResolver.resolve": ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtXmlPatterns.QAbstractXmlNodeModel: + "QAbstractXmlNodeModel.__init__": (), + "QAbstractXmlNodeModel.attributes": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.baseUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.compareOrder": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.createIndex": [('int',), ('int', 'int')], + "QAbstractXmlNodeModel.documentUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.elementById": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.isDeepEqual": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.kind": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.name": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceBindings": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceForPrefix": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'Missing(PySide2.QtXmlPatterns.QXmlName.PrefixCode)'), + "QAbstractXmlNodeModel.nextFromSimpleAxis": ('PySide2.QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.nodesByIdref": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.root": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.sendNamespaces": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QAbstractXmlReceiver'), + "QAbstractXmlNodeModel.sourceLocation": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.stringValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.typedValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + + # class PySide2.QtXmlPatterns.QAbstractXmlReceiver: + "QAbstractXmlReceiver.__init__": (), + "QAbstractXmlReceiver.atomicValue": ('PySide2.support.signature.typing.Any',), + "QAbstractXmlReceiver.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.characters": ('str',), + "QAbstractXmlReceiver.comment": ('str',), + "QAbstractXmlReceiver.endDocument": (), + "QAbstractXmlReceiver.endElement": (), + "QAbstractXmlReceiver.endOfSequence": (), + "QAbstractXmlReceiver.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.startDocument": (), + "QAbstractXmlReceiver.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.startOfSequence": (), + "QAbstractXmlReceiver.whitespaceOnly": ('str',), + + # class PySide2.QtXmlPatterns.QSourceLocation: + "QSourceLocation.__init__": [(), ('PySide2.QtCore.QUrl', 'int', 'int'), ('PySide2.QtXmlPatterns.QSourceLocation',)], + "QSourceLocation.__copy__": (), + "QSourceLocation.column": (), + "QSourceLocation.isNull": (), + "QSourceLocation.line": (), + "QSourceLocation.setColumn": ('int',), + "QSourceLocation.setLine": ('int',), + "QSourceLocation.setUri": ('PySide2.QtCore.QUrl',), + "QSourceLocation.uri": (), + + # class PySide2.QtXmlPatterns.QXmlFormatter: + "QXmlFormatter.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlFormatter.atomicValue": ('PySide2.support.signature.typing.Any',), + "QXmlFormatter.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.characters": ('str',), + "QXmlFormatter.comment": ('str',), + "QXmlFormatter.endDocument": (), + "QXmlFormatter.endElement": (), + "QXmlFormatter.endOfSequence": (), + "QXmlFormatter.indentationDepth": (), + "QXmlFormatter.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.setIndentationDepth": ('int',), + "QXmlFormatter.startDocument": (), + "QXmlFormatter.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlFormatter.startOfSequence": (), + + # class PySide2.QtXmlPatterns.QXmlItem: + "QXmlItem.__init__": [(), ('PySide2.QtXmlPatterns.QXmlItem',), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), ('PySide2.support.signature.typing.Any',)], + "QXmlItem.__copy__": (), + "QXmlItem.isAtomicValue": (), + "QXmlItem.isNode": (), + "QXmlItem.isNull": (), + "QXmlItem.toAtomicValue": (), + "QXmlItem.toNodeModelIndex": (), + + # class PySide2.QtXmlPatterns.QXmlName: + "QXmlName.__init__": [(), ('PySide2.QtXmlPatterns.QXmlName',), ('PySide2.QtXmlPatterns.QXmlNamePool', 'str', 'str', 'str')], + "QXmlName.__copy__": (), + "QXmlName.fromClarkName": ('str', 'PySide2.QtXmlPatterns.QXmlNamePool'), + "QXmlName.isNCName": ('str',), + "QXmlName.isNull": (), + "QXmlName.localName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.namespaceUri": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.prefix": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.toClarkName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + + # class PySide2.QtXmlPatterns.QXmlNamePool: + "QXmlNamePool.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',)], + "QXmlNamePool.__copy__": (), + + # class PySide2.QtXmlPatterns.QXmlNodeModelIndex: + "QXmlNodeModelIndex.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlNodeModelIndex.__copy__": (), + "QXmlNodeModelIndex.additionalData": (), + "QXmlNodeModelIndex.data": (), + "QXmlNodeModelIndex.internalPointer": (), + "QXmlNodeModelIndex.isNull": (), + "QXmlNodeModelIndex.model": (), + + # class PySide2.QtXmlPatterns.QXmlQuery: + "QXmlQuery.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',), ('PySide2.QtXmlPatterns.QXmlQuery',), ('PySide2.QtXmlPatterns.QXmlQuery.QueryLanguage', 'PySide2.QtXmlPatterns.QXmlNamePool')], + "QXmlQuery.__copy__": (), + "QXmlQuery.bindVariable": [('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtCore.QIODevice'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlItem'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlQuery'), ('str', 'PySide2.QtCore.QIODevice'), ('str', 'PySide2.QtXmlPatterns.QXmlItem'), ('str', 'PySide2.QtXmlPatterns.QXmlQuery')], + "QXmlQuery.evaluateTo": [('PySide2.QtCore.QIODevice',), ('PySide2.QtXmlPatterns.QAbstractXmlReceiver',), ('PySide2.QtXmlPatterns.QXmlResultItems',)], + "QXmlQuery.initialTemplateName": (), + "QXmlQuery.isValid": (), + "QXmlQuery.messageHandler": (), + "QXmlQuery.namePool": (), + "QXmlQuery.queryLanguage": (), + "QXmlQuery.setFocus": [('PySide2.QtCore.QIODevice',), ('PySide2.QtCore.QUrl',), ('PySide2.QtXmlPatterns.QXmlItem',), ('str',)], + "QXmlQuery.setInitialTemplateName": [('PySide2.QtXmlPatterns.QXmlName',), ('str',)], + "QXmlQuery.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlQuery.setQuery": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), ('str', 'PySide2.QtCore.QUrl')], + "QXmlQuery.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlQuery.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlResultItems: + "QXmlResultItems.__init__": (), + "QXmlResultItems.current": (), + "QXmlResultItems.hasError": (), + "QXmlResultItems.next": (), + + # class PySide2.QtXmlPatterns.QXmlSchema: + "QXmlSchema.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchema.documentUri": (), + "QXmlSchema.isValid": (), + "QXmlSchema.load": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + "QXmlSchema.messageHandler": (), + "QXmlSchema.namePool": (), + "QXmlSchema.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchema.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchema.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlSchemaValidator: + "QXmlSchemaValidator.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchemaValidator.messageHandler": (), + "QXmlSchemaValidator.namePool": (), + "QXmlSchemaValidator.schema": (), + "QXmlSchemaValidator.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchemaValidator.setSchema": ('PySide2.QtXmlPatterns.QXmlSchema',), + "QXmlSchemaValidator.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchemaValidator.uriResolver": (), + "QXmlSchemaValidator.validate": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + + # class PySide2.QtXmlPatterns.QXmlSerializer: + "QXmlSerializer.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlSerializer.atomicValue": ('PySide2.support.signature.typing.Any',), + "QXmlSerializer.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.characters": ('str',), + "QXmlSerializer.codec": (), + "QXmlSerializer.comment": ('str',), + "QXmlSerializer.endDocument": (), + "QXmlSerializer.endElement": (), + "QXmlSerializer.endOfSequence": (), + "QXmlSerializer.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.outputDevice": (), + "QXmlSerializer.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.setCodec": ('PySide2.QtCore.QTextCodec',), + "QXmlSerializer.startDocument": (), + "QXmlSerializer.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.startOfSequence": (), + }) + +# Module PySide2.QtHelp +if "PySide2.QtHelp" in sys.modules: + dict.update({ + + # class PySide2.QtHelp.QHelpContentItem: + "QHelpContentItem.parent": (), + "QHelpContentItem.__copy__": (), + "QHelpContentItem.child": ('int',), + "QHelpContentItem.childCount": (), + "QHelpContentItem.childPosition": ('PySide2.QtHelp.QHelpContentItem',), + "QHelpContentItem.row": (), + "QHelpContentItem.title": (), + "QHelpContentItem.url": (), + + # class PySide2.QtHelp.QHelpContentModel: + "QHelpContentModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.contentItemAt": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.createContents": ('str',), + "QHelpContentModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QHelpContentModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QHelpContentModel.isCreatingContents": (), + "QHelpContentModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QHelpContentModel.rowCount": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtHelp.QHelpContentWidget: + "QHelpContentWidget.indexOf": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtHelp.QHelpEngine: + "QHelpEngine.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngine.contentModel": (), + "QHelpEngine.contentWidget": (), + "QHelpEngine.indexModel": (), + "QHelpEngine.indexWidget": (), + "QHelpEngine.searchEngine": (), + + # class PySide2.QtHelp.QHelpEngineCore: + "QHelpEngineCore.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngineCore.addCustomFilter": ('str', 'PySide2.support.signature.typing.List'), + "QHelpEngineCore.autoSaveFilter": (), + "QHelpEngineCore.collectionFile": (), + "QHelpEngineCore.copyCollectionFile": ('str',), + "QHelpEngineCore.currentFilter": (), + "QHelpEngineCore.customFilters": (), + "QHelpEngineCore.customValue": ('str', 'PySide2.support.signature.typing.Any'), + "QHelpEngineCore.documentationFileName": ('str',), + "QHelpEngineCore.error": (), + "QHelpEngineCore.fileData": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.files": ('str', 'PySide2.support.signature.typing.List', 'str'), + "QHelpEngineCore.filterAttributeSets": ('str',), + "QHelpEngineCore.filterAttributes": [(), ('str',)], + "QHelpEngineCore.findFile": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.linksForIdentifier": ('str',), + "QHelpEngineCore.metaData": ('str', 'str'), + "QHelpEngineCore.namespaceName": ('str',), + "QHelpEngineCore.registerDocumentation": ('str',), + "QHelpEngineCore.registeredDocumentations": (), + "QHelpEngineCore.removeCustomFilter": ('str',), + "QHelpEngineCore.removeCustomValue": ('str',), + "QHelpEngineCore.setAutoSaveFilter": ('bool',), + "QHelpEngineCore.setCollectionFile": ('str',), + "QHelpEngineCore.setCurrentFilter": ('str',), + "QHelpEngineCore.setCustomValue": ('str', 'PySide2.support.signature.typing.Any'), + "QHelpEngineCore.setupData": (), + "QHelpEngineCore.unregisterDocumentation": ('str',), + + # class PySide2.QtHelp.QHelpIndexModel: + "QHelpIndexModel.linksForKeyword": ('str',), + "QHelpIndexModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object'), ('str',)], + "QHelpIndexModel.filter": ('str', 'str'), + "QHelpIndexModel.isCreatingIndex": (), + + # class PySide2.QtHelp.QHelpIndexWidget: + "QHelpIndexWidget.activateCurrentItem": (), + "QHelpIndexWidget.filterIndices": ('str', 'str'), + + # class PySide2.QtHelp.QHelpSearchEngine: + "QHelpSearchEngine.__init__": ('PySide2.QtHelp.QHelpEngineCore', 'PySide2.QtCore.QObject'), + "QHelpSearchEngine.cancelIndexing": (), + "QHelpSearchEngine.cancelSearching": (), + "QHelpSearchEngine.hitCount": (), + "QHelpSearchEngine.hits": ('int', 'int'), + "QHelpSearchEngine.hitsCount": (), + "QHelpSearchEngine.query": (), + "QHelpSearchEngine.queryWidget": (), + "QHelpSearchEngine.reindexDocumentation": (), + "QHelpSearchEngine.resultWidget": (), + "QHelpSearchEngine.search": ('list',), + + # class PySide2.QtHelp.QHelpSearchQuery: + "QHelpSearchQuery.__init__": [(), ('PySide2.QtHelp.QHelpSearchQuery',), ('PySide2.QtHelp.QHelpSearchQuery.FieldName', 'PySide2.support.signature.typing.List')], + "QHelpSearchQuery.__copy__": (), + + # class PySide2.QtHelp.QHelpSearchQueryWidget: + "QHelpSearchQueryWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QHelpSearchQueryWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchQueryWidget.collapseExtendedSearch": (), + "QHelpSearchQueryWidget.expandExtendedSearch": (), + "QHelpSearchQueryWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QHelpSearchQueryWidget.isCompactMode": (), + "QHelpSearchQueryWidget.query": (), + "QHelpSearchQueryWidget.setCompactMode": ('bool',), + "QHelpSearchQueryWidget.setQuery": ('list',), + + # class PySide2.QtHelp.QHelpSearchResultWidget: + "QHelpSearchResultWidget.linkAt": ('PySide2.QtCore.QPoint',), + "QHelpSearchResultWidget.changeEvent": ('PySide2.QtCore.QEvent',), + }) + +# Module PySide2.QtMultimedia +if "PySide2.QtMultimedia" in sys.modules: + dict.update({ + + # class PySide2.QtMultimedia.QAbstractAudioDeviceInfo: + "QAbstractAudioDeviceInfo.__init__": (), + "QAbstractAudioDeviceInfo.deviceName": (), + "QAbstractAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioDeviceInfo.preferredFormat": (), + "QAbstractAudioDeviceInfo.supportedByteOrders": (), + "QAbstractAudioDeviceInfo.supportedChannelCounts": (), + "QAbstractAudioDeviceInfo.supportedCodecs": (), + "QAbstractAudioDeviceInfo.supportedSampleRates": (), + "QAbstractAudioDeviceInfo.supportedSampleSizes": (), + "QAbstractAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAbstractAudioInput: + "QAbstractAudioInput.__init__": (), + "QAbstractAudioInput.bufferSize": (), + "QAbstractAudioInput.bytesReady": (), + "QAbstractAudioInput.elapsedUSecs": (), + "QAbstractAudioInput.error": (), + "QAbstractAudioInput.format": (), + "QAbstractAudioInput.notifyInterval": (), + "QAbstractAudioInput.periodSize": (), + "QAbstractAudioInput.processedUSecs": (), + "QAbstractAudioInput.reset": (), + "QAbstractAudioInput.resume": (), + "QAbstractAudioInput.setBufferSize": ('int',), + "QAbstractAudioInput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioInput.setNotifyInterval": ('int',), + "QAbstractAudioInput.setVolume": ('float',), + "QAbstractAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioInput.state": (), + "QAbstractAudioInput.stop": (), + "QAbstractAudioInput.suspend": (), + "QAbstractAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAbstractAudioOutput: + "QAbstractAudioOutput.__init__": (), + "QAbstractAudioOutput.bufferSize": (), + "QAbstractAudioOutput.bytesFree": (), + "QAbstractAudioOutput.category": (), + "QAbstractAudioOutput.elapsedUSecs": (), + "QAbstractAudioOutput.error": (), + "QAbstractAudioOutput.format": (), + "QAbstractAudioOutput.notifyInterval": (), + "QAbstractAudioOutput.periodSize": (), + "QAbstractAudioOutput.processedUSecs": (), + "QAbstractAudioOutput.reset": (), + "QAbstractAudioOutput.resume": (), + "QAbstractAudioOutput.setBufferSize": ('int',), + "QAbstractAudioOutput.setCategory": ('str',), + "QAbstractAudioOutput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioOutput.setNotifyInterval": ('int',), + "QAbstractAudioOutput.setVolume": ('float',), + "QAbstractAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioOutput.state": (), + "QAbstractAudioOutput.stop": (), + "QAbstractAudioOutput.suspend": (), + "QAbstractAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAbstractVideoBuffer: + "QAbstractVideoBuffer.__init__": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoBuffer.handle": (), + "QAbstractVideoBuffer.handleType": (), + "QAbstractVideoBuffer.mapMode": (), + "QAbstractVideoBuffer.release": (), + "QAbstractVideoBuffer.unmap": (), + + # class PySide2.QtMultimedia.QAbstractVideoFilter: + "QAbstractVideoFilter.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoFilter.createFilterRunnable": (), + "QAbstractVideoFilter.isActive": (), + "QAbstractVideoFilter.setActive": ('bool',), + + # class PySide2.QtMultimedia.QAbstractVideoSurface: + "QAbstractVideoSurface.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoSurface.error": (), + "QAbstractVideoSurface.isActive": (), + "QAbstractVideoSurface.isFormatSupported": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.nativeResolution": (), + "QAbstractVideoSurface.nearestFormat": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.present": ('PySide2.QtMultimedia.QVideoFrame',), + "QAbstractVideoSurface.setError": ('PySide2.QtMultimedia.QAbstractVideoSurface.Error',), + "QAbstractVideoSurface.setNativeResolution": ('PySide2.QtCore.QSize',), + "QAbstractVideoSurface.start": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.stop": (), + "QAbstractVideoSurface.supportedPixelFormats": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoSurface.surfaceFormat": (), + + # class PySide2.QtMultimedia.QAudio: + + # class PySide2.QtMultimedia.QAudioBuffer: + "QAudioBuffer.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtMultimedia.QAudioFormat', 'int'), ('PySide2.QtMultimedia.QAudioBuffer',), ('int', 'PySide2.QtMultimedia.QAudioFormat', 'int')], + "QAudioBuffer.__copy__": (), + "QAudioBuffer.byteCount": (), + "QAudioBuffer.constData": (), + "QAudioBuffer.data": [], + "QAudioBuffer.duration": (), + "QAudioBuffer.format": (), + "QAudioBuffer.frameCount": (), + "QAudioBuffer.isValid": (), + "QAudioBuffer.sampleCount": (), + "QAudioBuffer.startTime": (), + + # class PySide2.QtMultimedia.QAudioDecoder: + "QAudioDecoder.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoder.audioFormat": (), + "QAudioDecoder.bind": ('PySide2.QtCore.QObject',), + "QAudioDecoder.bufferAvailable": (), + "QAudioDecoder.duration": (), + "QAudioDecoder.errorString": (), + "QAudioDecoder.hasSupport": ('str', 'PySide2.support.signature.typing.List'), + "QAudioDecoder.position": (), + "QAudioDecoder.read": (), + "QAudioDecoder.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoder.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoder.setSourceFilename": ('str',), + "QAudioDecoder.sourceDevice": (), + "QAudioDecoder.sourceFilename": (), + "QAudioDecoder.start": (), + "QAudioDecoder.state": (), + "QAudioDecoder.stop": (), + "QAudioDecoder.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QAudioDecoderControl: + "QAudioDecoderControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoderControl.audioFormat": (), + "QAudioDecoderControl.bufferAvailable": (), + "QAudioDecoderControl.duration": (), + "QAudioDecoderControl.position": (), + "QAudioDecoderControl.read": (), + "QAudioDecoderControl.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoderControl.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoderControl.setSourceFilename": ('str',), + "QAudioDecoderControl.sourceDevice": (), + "QAudioDecoderControl.sourceFilename": (), + "QAudioDecoderControl.start": (), + "QAudioDecoderControl.state": (), + "QAudioDecoderControl.stop": (), + + # class PySide2.QtMultimedia.QAudioDeviceInfo: + "QAudioDeviceInfo.__init__": [(), ('PySide2.QtMultimedia.QAudioDeviceInfo',)], + "QAudioDeviceInfo.__copy__": (), + "QAudioDeviceInfo.availableDevices": ('PySide2.QtMultimedia.QAudio.Mode',), + "QAudioDeviceInfo.defaultInputDevice": (), + "QAudioDeviceInfo.defaultOutputDevice": (), + "QAudioDeviceInfo.deviceName": (), + "QAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.isNull": (), + "QAudioDeviceInfo.nearestFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.preferredFormat": (), + "QAudioDeviceInfo.supportedByteOrders": (), + "QAudioDeviceInfo.supportedChannelCounts": (), + "QAudioDeviceInfo.supportedCodecs": (), + "QAudioDeviceInfo.supportedSampleRates": (), + "QAudioDeviceInfo.supportedSampleSizes": (), + "QAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAudioEncoderSettings: + "QAudioEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QAudioEncoderSettings',)], + "QAudioEncoderSettings.__copy__": (), + "QAudioEncoderSettings.bitRate": (), + "QAudioEncoderSettings.channelCount": (), + "QAudioEncoderSettings.codec": (), + "QAudioEncoderSettings.encodingMode": (), + "QAudioEncoderSettings.encodingOption": ('str',), + "QAudioEncoderSettings.encodingOptions": (), + "QAudioEncoderSettings.isNull": (), + "QAudioEncoderSettings.quality": (), + "QAudioEncoderSettings.sampleRate": (), + "QAudioEncoderSettings.setBitRate": ('int',), + "QAudioEncoderSettings.setChannelCount": ('int',), + "QAudioEncoderSettings.setCodec": ('str',), + "QAudioEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QAudioEncoderSettings.setEncodingOption": ('str', 'PySide2.support.signature.typing.Any'), + "QAudioEncoderSettings.setEncodingOptions": ('dict',), + "QAudioEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QAudioEncoderSettings.setSampleRate": ('int',), + + # class PySide2.QtMultimedia.QAudioEncoderSettingsControl: + "QAudioEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioEncoderSettingsControl.audioSettings": (), + "QAudioEncoderSettingsControl.codecDescription": ('str',), + "QAudioEncoderSettingsControl.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QAudioEncoderSettingsControl.supportedAudioCodecs": (), + + # class PySide2.QtMultimedia.QAudioFormat: + "QAudioFormat.__init__": [(), ('PySide2.QtMultimedia.QAudioFormat',)], + "QAudioFormat.__copy__": (), + "QAudioFormat.byteOrder": (), + "QAudioFormat.bytesForDuration": ('int',), + "QAudioFormat.bytesForFrames": ('int',), + "QAudioFormat.bytesPerFrame": (), + "QAudioFormat.channelCount": (), + "QAudioFormat.codec": (), + "QAudioFormat.durationForBytes": ('int',), + "QAudioFormat.durationForFrames": ('int',), + "QAudioFormat.framesForBytes": ('int',), + "QAudioFormat.framesForDuration": ('int',), + "QAudioFormat.isValid": (), + "QAudioFormat.sampleRate": (), + "QAudioFormat.sampleSize": (), + "QAudioFormat.sampleType": (), + "QAudioFormat.setByteOrder": ('PySide2.QtMultimedia.QAudioFormat.Endian',), + "QAudioFormat.setChannelCount": ('int',), + "QAudioFormat.setCodec": ('str',), + "QAudioFormat.setSampleRate": ('int',), + "QAudioFormat.setSampleSize": ('int',), + "QAudioFormat.setSampleType": ('PySide2.QtMultimedia.QAudioFormat.SampleType',), + + # class PySide2.QtMultimedia.QAudioInput: + "QAudioInput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioInput.bufferSize": (), + "QAudioInput.bytesReady": (), + "QAudioInput.elapsedUSecs": (), + "QAudioInput.error": (), + "QAudioInput.format": (), + "QAudioInput.notifyInterval": (), + "QAudioInput.periodSize": (), + "QAudioInput.processedUSecs": (), + "QAudioInput.reset": (), + "QAudioInput.resume": (), + "QAudioInput.setBufferSize": ('int',), + "QAudioInput.setNotifyInterval": ('int',), + "QAudioInput.setVolume": ('float',), + "QAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioInput.state": (), + "QAudioInput.stop": (), + "QAudioInput.suspend": (), + "QAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAudioInputSelectorControl: + "QAudioInputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioInputSelectorControl.activeInput": (), + "QAudioInputSelectorControl.availableInputs": (), + "QAudioInputSelectorControl.defaultInput": (), + "QAudioInputSelectorControl.inputDescription": ('str',), + "QAudioInputSelectorControl.setActiveInput": ('str',), + + # class PySide2.QtMultimedia.QAudioOutput: + "QAudioOutput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioOutput.bufferSize": (), + "QAudioOutput.bytesFree": (), + "QAudioOutput.category": (), + "QAudioOutput.elapsedUSecs": (), + "QAudioOutput.error": (), + "QAudioOutput.format": (), + "QAudioOutput.notifyInterval": (), + "QAudioOutput.periodSize": (), + "QAudioOutput.processedUSecs": (), + "QAudioOutput.reset": (), + "QAudioOutput.resume": (), + "QAudioOutput.setBufferSize": ('int',), + "QAudioOutput.setCategory": ('str',), + "QAudioOutput.setNotifyInterval": ('int',), + "QAudioOutput.setVolume": ('float',), + "QAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioOutput.state": (), + "QAudioOutput.stop": (), + "QAudioOutput.suspend": (), + "QAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAudioOutputSelectorControl: + "QAudioOutputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioOutputSelectorControl.activeOutput": (), + "QAudioOutputSelectorControl.availableOutputs": (), + "QAudioOutputSelectorControl.defaultOutput": (), + "QAudioOutputSelectorControl.outputDescription": ('str',), + "QAudioOutputSelectorControl.setActiveOutput": ('str',), + + # class PySide2.QtMultimedia.QAudioProbe: + "QAudioProbe.__init__": ('PySide2.QtCore.QObject',), + "QAudioProbe.isActive": (), + "QAudioProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QAudioRecorder: + "QAudioRecorder.__init__": ('PySide2.QtCore.QObject',), + "QAudioRecorder.audioInput": (), + "QAudioRecorder.audioInputDescription": ('str',), + "QAudioRecorder.audioInputs": (), + "QAudioRecorder.defaultAudioInput": (), + "QAudioRecorder.setAudioInput": ('str',), + + # class PySide2.QtMultimedia.QAudioRoleControl: + "QAudioRoleControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioRoleControl.audioRole": (), + "QAudioRoleControl.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QAudioRoleControl.supportedAudioRoles": (), + + # class PySide2.QtMultimedia.QCamera: + "QCamera.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtMultimedia.QCamera.Position', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QCameraInfo', 'PySide2.QtCore.QObject')], + "QCamera.availability": (), + "QCamera.availableDevices": (), + "QCamera.captureMode": (), + "QCamera.deviceDescription": ('PySide2.QtCore.QByteArray',), + "QCamera.errorString": (), + "QCamera.isCaptureModeSupported": ('CaptureModes',), + "QCamera.load": (), + "QCamera.lockStatus": [(), ('PySide2.QtMultimedia.QCamera.LockType',)], + "QCamera.requestedLocks": (), + "QCamera.searchAndLock": [(), ('LockTypes',)], + "QCamera.setCaptureMode": ('CaptureModes',), + "QCamera.setViewfinder": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QCamera.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.start": (), + "QCamera.state": (), + "QCamera.status": (), + "QCamera.stop": (), + "QCamera.supportedLocks": (), + "QCamera.supportedViewfinderFrameRateRanges": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderPixelFormats": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderResolutions": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.unload": (), + "QCamera.unlock": [(), ('LockTypes',)], + "QCamera.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraCaptureBufferFormatControl: + "QCameraCaptureBufferFormatControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureBufferFormatControl.bufferFormat": (), + "QCameraCaptureBufferFormatControl.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraCaptureBufferFormatControl.supportedBufferFormats": (), + + # class PySide2.QtMultimedia.QCameraCaptureDestinationControl: + "QCameraCaptureDestinationControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureDestinationControl.captureDestination": (), + "QCameraCaptureDestinationControl.isCaptureDestinationSupported": ('CaptureDestinations',), + "QCameraCaptureDestinationControl.setCaptureDestination": ('CaptureDestinations',), + + # class PySide2.QtMultimedia.QCameraControl: + "QCameraControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraControl.canChangeProperty": ('PySide2.QtMultimedia.QCameraControl.PropertyChangeType', 'PySide2.QtMultimedia.QCamera.Status'), + "QCameraControl.captureMode": (), + "QCameraControl.isCaptureModeSupported": ('CaptureModes',), + "QCameraControl.setCaptureMode": ('CaptureModes',), + "QCameraControl.setState": ('PySide2.QtMultimedia.QCamera.State',), + "QCameraControl.state": (), + "QCameraControl.status": (), + + # class PySide2.QtMultimedia.QCameraExposureControl: + "QCameraExposureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraExposureControl.actualValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.requestedValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.setValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtMultimedia.QCameraFocusZone: + "QCameraFocusZone.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus'), ('PySide2.QtMultimedia.QCameraFocusZone',)], + "QCameraFocusZone.__copy__": (), + "QCameraFocusZone.area": (), + "QCameraFocusZone.isValid": (), + "QCameraFocusZone.setStatus": ('PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus',), + "QCameraFocusZone.status": (), + + # class PySide2.QtMultimedia.QCameraImageCapture: + "QCameraImageCapture.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QCameraImageCapture.availability": (), + "QCameraImageCapture.bufferFormat": (), + "QCameraImageCapture.cancelCapture": (), + "QCameraImageCapture.capture": ('str',), + "QCameraImageCapture.captureDestination": (), + "QCameraImageCapture.encodingSettings": (), + "QCameraImageCapture.errorString": (), + "QCameraImageCapture.imageCodecDescription": ('str',), + "QCameraImageCapture.isAvailable": (), + "QCameraImageCapture.isCaptureDestinationSupported": ('CaptureDestinations',), + "QCameraImageCapture.isReadyForCapture": (), + "QCameraImageCapture.mediaObject": (), + "QCameraImageCapture.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraImageCapture.setCaptureDestination": ('CaptureDestinations',), + "QCameraImageCapture.setEncodingSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QCameraImageCapture.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QCameraImageCapture.supportedBufferFormats": (), + "QCameraImageCapture.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QCameraImageCaptureControl: + "QCameraImageCaptureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageCaptureControl.cancelCapture": (), + "QCameraImageCaptureControl.capture": ('str',), + "QCameraImageCaptureControl.driveMode": (), + "QCameraImageCaptureControl.isReadyForCapture": (), + "QCameraImageCaptureControl.setDriveMode": ('PySide2.QtMultimedia.QCameraImageCapture.DriveMode',), + + # class PySide2.QtMultimedia.QCameraImageProcessingControl: + "QCameraImageProcessingControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageProcessingControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.isParameterValueSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'PySide2.support.signature.typing.Any'), + "QCameraImageProcessingControl.parameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.setParameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'PySide2.support.signature.typing.Any'), + + # class PySide2.QtMultimedia.QCameraInfo: + "QCameraInfo.__init__": [('PySide2.QtCore.QByteArray',), ('PySide2.QtMultimedia.QCamera',), ('PySide2.QtMultimedia.QCameraInfo',)], + "QCameraInfo.__copy__": (), + "QCameraInfo.availableCameras": ('PySide2.QtMultimedia.QCamera.Position',), + "QCameraInfo.defaultCamera": (), + "QCameraInfo.description": (), + "QCameraInfo.deviceName": (), + "QCameraInfo.isNull": (), + "QCameraInfo.orientation": (), + "QCameraInfo.position": (), + + # class PySide2.QtMultimedia.QCameraInfoControl: + "QCameraInfoControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraInfoControl.cameraOrientation": ('str',), + "QCameraInfoControl.cameraPosition": ('str',), + + # class PySide2.QtMultimedia.QCameraLocksControl: + "QCameraLocksControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraLocksControl.lockStatus": ('PySide2.QtMultimedia.QCamera.LockType',), + "QCameraLocksControl.searchAndLock": ('LockTypes',), + "QCameraLocksControl.supportedLocks": (), + "QCameraLocksControl.unlock": ('LockTypes',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettings: + "QCameraViewfinderSettings.__init__": [(), ('PySide2.QtMultimedia.QCameraViewfinderSettings',)], + "QCameraViewfinderSettings.__copy__": (), + "QCameraViewfinderSettings.isNull": (), + "QCameraViewfinderSettings.maximumFrameRate": (), + "QCameraViewfinderSettings.minimumFrameRate": (), + "QCameraViewfinderSettings.pixelAspectRatio": (), + "QCameraViewfinderSettings.pixelFormat": (), + "QCameraViewfinderSettings.resolution": (), + "QCameraViewfinderSettings.setMaximumFrameRate": ('float',), + "QCameraViewfinderSettings.setMinimumFrameRate": ('float',), + "QCameraViewfinderSettings.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.setPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraViewfinderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.swap": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl: + "QCameraViewfinderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl.isViewfinderParameterSupported": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + "QCameraViewfinderSettingsControl.setViewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter', 'PySide2.support.signature.typing.Any'), + "QCameraViewfinderSettingsControl.viewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl2: + "QCameraViewfinderSettingsControl2.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl2.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCameraViewfinderSettingsControl2.supportedViewfinderSettings": (), + "QCameraViewfinderSettingsControl2.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraZoomControl: + "QCameraZoomControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraZoomControl.currentDigitalZoom": (), + "QCameraZoomControl.currentOpticalZoom": (), + "QCameraZoomControl.maximumDigitalZoom": (), + "QCameraZoomControl.maximumOpticalZoom": (), + "QCameraZoomControl.requestedDigitalZoom": (), + "QCameraZoomControl.requestedOpticalZoom": (), + "QCameraZoomControl.zoomTo": ('float', 'float'), + + # class PySide2.QtMultimedia.QImageEncoderControl: + "QImageEncoderControl.__init__": ('PySide2.QtCore.QObject',), + "QImageEncoderControl.imageCodecDescription": ('str',), + "QImageEncoderControl.imageSettings": (), + "QImageEncoderControl.setImageSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QImageEncoderControl.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QImageEncoderSettings: + "QImageEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QImageEncoderSettings',)], + "QImageEncoderSettings.__copy__": (), + "QImageEncoderSettings.codec": (), + "QImageEncoderSettings.encodingOption": ('str',), + "QImageEncoderSettings.encodingOptions": (), + "QImageEncoderSettings.isNull": (), + "QImageEncoderSettings.quality": (), + "QImageEncoderSettings.resolution": (), + "QImageEncoderSettings.setCodec": ('str',), + "QImageEncoderSettings.setEncodingOption": ('str', 'PySide2.support.signature.typing.Any'), + "QImageEncoderSettings.setEncodingOptions": ('dict',), + "QImageEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QImageEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QMediaAudioProbeControl: + "QMediaAudioProbeControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaAvailabilityControl: + "QMediaAvailabilityControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaAvailabilityControl.availability": (), + + # class PySide2.QtMultimedia.QMediaBindableInterface: + "QMediaBindableInterface.__init__": (), + "QMediaBindableInterface.mediaObject": (), + "QMediaBindableInterface.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimedia.QMediaContainerControl: + "QMediaContainerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaContainerControl.containerDescription": ('str',), + "QMediaContainerControl.containerFormat": (), + "QMediaContainerControl.setContainerFormat": ('str',), + "QMediaContainerControl.supportedContainers": (), + + # class PySide2.QtMultimedia.QMediaContent: + "QMediaContent.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtMultimedia.QMediaContent',), ('PySide2.QtMultimedia.QMediaPlaylist', 'PySide2.QtCore.QUrl', 'bool'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest',), ('list',)], + "QMediaContent.__copy__": (), + "QMediaContent.canonicalRequest": (), + "QMediaContent.canonicalResource": (), + "QMediaContent.canonicalUrl": (), + "QMediaContent.isNull": (), + "QMediaContent.playlist": (), + "QMediaContent.resources": (), + + # class PySide2.QtMultimedia.QMediaControl: + "QMediaControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaGaplessPlaybackControl: + "QMediaGaplessPlaybackControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaGaplessPlaybackControl.crossfadeTime": (), + "QMediaGaplessPlaybackControl.isCrossfadeSupported": (), + "QMediaGaplessPlaybackControl.nextMedia": (), + "QMediaGaplessPlaybackControl.setCrossfadeTime": ('float',), + "QMediaGaplessPlaybackControl.setNextMedia": ('PySide2.QtMultimedia.QMediaContent',), + + # class PySide2.QtMultimedia.QMediaNetworkAccessControl: + "QMediaNetworkAccessControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaNetworkAccessControl.currentConfiguration": (), + "QMediaNetworkAccessControl.setConfigurations": ('list',), + + # class PySide2.QtMultimedia.QMediaObject: + "QMediaObject.notifyInterval": (), + "QMediaObject.addPropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.availability": (), + "QMediaObject.availableMetaData": (), + "QMediaObject.bind": ('PySide2.QtCore.QObject',), + "QMediaObject.isAvailable": (), + "QMediaObject.isMetaDataAvailable": (), + "QMediaObject.metaData": ('str',), + "QMediaObject.removePropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.setNotifyInterval": ('int',), + "QMediaObject.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaPlayer: + "QMediaPlayer.__init__": ('PySide2.QtCore.QObject', 'Flags'), + "QMediaPlayer.audioRole": (), + "QMediaPlayer.availability": (), + "QMediaPlayer.bind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.bufferStatus": (), + "QMediaPlayer.currentMedia": (), + "QMediaPlayer.currentNetworkConfiguration": (), + "QMediaPlayer.duration": (), + "QMediaPlayer.errorString": (), + "QMediaPlayer.hasSupport": ('str', 'PySide2.support.signature.typing.List', 'Flags'), + "QMediaPlayer.isAudioAvailable": (), + "QMediaPlayer.isMuted": (), + "QMediaPlayer.isSeekable": (), + "QMediaPlayer.isVideoAvailable": (), + "QMediaPlayer.media": (), + "QMediaPlayer.mediaStatus": (), + "QMediaPlayer.mediaStream": (), + "QMediaPlayer.pause": (), + "QMediaPlayer.play": (), + "QMediaPlayer.playbackRate": (), + "QMediaPlayer.playlist": (), + "QMediaPlayer.position": (), + "QMediaPlayer.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QMediaPlayer.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayer.setMuted": ('bool',), + "QMediaPlayer.setNetworkConfigurations": ('list',), + "QMediaPlayer.setPlaybackRate": ('float',), + "QMediaPlayer.setPlaylist": ('PySide2.QtMultimedia.QMediaPlaylist',), + "QMediaPlayer.setPosition": ('int',), + "QMediaPlayer.setVideoOutput": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QMediaPlayer.setVolume": ('int',), + "QMediaPlayer.state": (), + "QMediaPlayer.stop": (), + "QMediaPlayer.supportedAudioRoles": (), + "QMediaPlayer.supportedMimeTypes": ('Flags',), + "QMediaPlayer.unbind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.volume": (), + + # class PySide2.QtMultimedia.QMediaPlayerControl: + "QMediaPlayerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlayerControl.availablePlaybackRanges": (), + "QMediaPlayerControl.bufferStatus": (), + "QMediaPlayerControl.duration": (), + "QMediaPlayerControl.isAudioAvailable": (), + "QMediaPlayerControl.isMuted": (), + "QMediaPlayerControl.isSeekable": (), + "QMediaPlayerControl.isVideoAvailable": (), + "QMediaPlayerControl.media": (), + "QMediaPlayerControl.mediaStatus": (), + "QMediaPlayerControl.mediaStream": (), + "QMediaPlayerControl.pause": (), + "QMediaPlayerControl.play": (), + "QMediaPlayerControl.playbackRate": (), + "QMediaPlayerControl.position": (), + "QMediaPlayerControl.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayerControl.setMuted": ('bool',), + "QMediaPlayerControl.setPlaybackRate": ('float',), + "QMediaPlayerControl.setPosition": ('int',), + "QMediaPlayerControl.setVolume": ('int',), + "QMediaPlayerControl.state": (), + "QMediaPlayerControl.stop": (), + "QMediaPlayerControl.volume": (), + + # class PySide2.QtMultimedia.QMediaPlaylist: + "QMediaPlaylist.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlaylist.addMedia": [('PySide2.QtMultimedia.QMediaContent',), ('list',)], + "QMediaPlaylist.clear": (), + "QMediaPlaylist.currentIndex": (), + "QMediaPlaylist.currentMedia": (), + "QMediaPlaylist.error": (), + "QMediaPlaylist.errorString": (), + "QMediaPlaylist.insertMedia": [('int', 'PySide2.QtMultimedia.QMediaContent'), ('int', 'list')], + "QMediaPlaylist.isEmpty": (), + "QMediaPlaylist.isReadOnly": (), + "QMediaPlaylist.load": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaPlaylist.media": ('int',), + "QMediaPlaylist.mediaCount": (), + "QMediaPlaylist.mediaObject": (), + "QMediaPlaylist.next": (), + "QMediaPlaylist.nextIndex": ('int',), + "QMediaPlaylist.playbackMode": (), + "QMediaPlaylist.previous": (), + "QMediaPlaylist.previousIndex": ('int',), + "QMediaPlaylist.removeMedia": [('int',), ('int', 'int')], + "QMediaPlaylist.save": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str')], + "QMediaPlaylist.setCurrentIndex": ('int',), + "QMediaPlaylist.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaPlaylist.setPlaybackMode": ('PySide2.QtMultimedia.QMediaPlaylist.PlaybackMode',), + "QMediaPlaylist.shuffle": (), + + # class PySide2.QtMultimedia.QMediaRecorder: + "QMediaRecorder.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QMediaRecorder.actualLocation": (), + "QMediaRecorder.audioCodecDescription": ('str',), + "QMediaRecorder.audioSettings": (), + "QMediaRecorder.availability": (), + "QMediaRecorder.availableMetaData": (), + "QMediaRecorder.containerDescription": ('str',), + "QMediaRecorder.containerFormat": (), + "QMediaRecorder.duration": (), + "QMediaRecorder.errorString": (), + "QMediaRecorder.isAvailable": (), + "QMediaRecorder.isMetaDataAvailable": (), + "QMediaRecorder.isMetaDataWritable": (), + "QMediaRecorder.isMuted": (), + "QMediaRecorder.mediaObject": (), + "QMediaRecorder.metaData": ('str',), + "QMediaRecorder.outputLocation": (), + "QMediaRecorder.pause": (), + "QMediaRecorder.record": (), + "QMediaRecorder.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QMediaRecorder.setContainerFormat": ('str',), + "QMediaRecorder.setEncodingSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings', 'PySide2.QtMultimedia.QVideoEncoderSettings', 'str'), + "QMediaRecorder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaRecorder.setMetaData": ('str', 'PySide2.support.signature.typing.Any'), + "QMediaRecorder.setMuted": ('bool',), + "QMediaRecorder.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorder.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QMediaRecorder.setVolume": ('float',), + "QMediaRecorder.state": (), + "QMediaRecorder.status": (), + "QMediaRecorder.stop": (), + "QMediaRecorder.supportedAudioCodecs": (), + "QMediaRecorder.supportedContainers": (), + "QMediaRecorder.supportedVideoCodecs": (), + "QMediaRecorder.videoCodecDescription": ('str',), + "QMediaRecorder.videoSettings": (), + "QMediaRecorder.volume": (), + + # class PySide2.QtMultimedia.QMediaRecorderControl: + "QMediaRecorderControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaRecorderControl.applySettings": (), + "QMediaRecorderControl.duration": (), + "QMediaRecorderControl.isMuted": (), + "QMediaRecorderControl.outputLocation": (), + "QMediaRecorderControl.setMuted": ('bool',), + "QMediaRecorderControl.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorderControl.setState": ('PySide2.QtMultimedia.QMediaRecorder.State',), + "QMediaRecorderControl.setVolume": ('float',), + "QMediaRecorderControl.state": (), + "QMediaRecorderControl.status": (), + "QMediaRecorderControl.volume": (), + + # class PySide2.QtMultimedia.QMediaResource: + "QMediaResource.__init__": [(), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaResource.__copy__": (), + "QMediaResource.audioBitRate": (), + "QMediaResource.audioCodec": (), + "QMediaResource.channelCount": (), + "QMediaResource.dataSize": (), + "QMediaResource.isNull": (), + "QMediaResource.language": (), + "QMediaResource.mimeType": (), + "QMediaResource.request": (), + "QMediaResource.resolution": (), + "QMediaResource.sampleRate": (), + "QMediaResource.setAudioBitRate": ('int',), + "QMediaResource.setAudioCodec": ('str',), + "QMediaResource.setChannelCount": ('int',), + "QMediaResource.setDataSize": ('int',), + "QMediaResource.setLanguage": ('str',), + "QMediaResource.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QMediaResource.setSampleRate": ('int',), + "QMediaResource.setVideoBitRate": ('int',), + "QMediaResource.setVideoCodec": ('str',), + "QMediaResource.url": (), + "QMediaResource.videoBitRate": (), + "QMediaResource.videoCodec": (), + + # class PySide2.QtMultimedia.QMediaTimeRange: + "QMediaTimeRange.__init__": [(), ('PySide2.QtMultimedia.QMediaTimeRange',), ('int', 'int')], + "QMediaTimeRange.__copy__": (), + "QMediaTimeRange.addInterval": ('int', 'int'), + "QMediaTimeRange.addTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + "QMediaTimeRange.clear": (), + "QMediaTimeRange.contains": ('int',), + "QMediaTimeRange.earliestTime": (), + "QMediaTimeRange.isContinuous": (), + "QMediaTimeRange.isEmpty": (), + "QMediaTimeRange.latestTime": (), + "QMediaTimeRange.removeInterval": ('int', 'int'), + "QMediaTimeRange.removeTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + + # class PySide2.QtMultimedia.QMultimedia: + + # class PySide2.QtMultimedia.QRadioData: + "QRadioData.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QRadioData.availability": (), + "QRadioData.errorString": (), + "QRadioData.isAlternativeFrequenciesEnabled": (), + "QRadioData.mediaObject": (), + "QRadioData.programType": (), + "QRadioData.programTypeName": (), + "QRadioData.radioText": (), + "QRadioData.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioData.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QRadioData.stationId": (), + "QRadioData.stationName": (), + + # class PySide2.QtMultimedia.QRadioDataControl: + "QRadioDataControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioDataControl.errorString": (), + "QRadioDataControl.isAlternativeFrequenciesEnabled": (), + "QRadioDataControl.programType": (), + "QRadioDataControl.programTypeName": (), + "QRadioDataControl.radioText": (), + "QRadioDataControl.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioDataControl.stationId": (), + "QRadioDataControl.stationName": (), + + # class PySide2.QtMultimedia.QRadioTuner: + "QRadioTuner.__init__": ('PySide2.QtCore.QObject',), + "QRadioTuner.availability": (), + "QRadioTuner.band": (), + "QRadioTuner.cancelSearch": (), + "QRadioTuner.errorString": (), + "QRadioTuner.frequency": (), + "QRadioTuner.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isAntennaConnected": (), + "QRadioTuner.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isMuted": (), + "QRadioTuner.isSearching": (), + "QRadioTuner.isStereo": (), + "QRadioTuner.radioData": (), + "QRadioTuner.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTuner.searchBackward": (), + "QRadioTuner.searchForward": (), + "QRadioTuner.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.setFrequency": ('int',), + "QRadioTuner.setMuted": ('bool',), + "QRadioTuner.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTuner.setVolume": ('int',), + "QRadioTuner.signalStrength": (), + "QRadioTuner.start": (), + "QRadioTuner.state": (), + "QRadioTuner.stereoMode": (), + "QRadioTuner.stop": (), + "QRadioTuner.volume": (), + + # class PySide2.QtMultimedia.QRadioTunerControl: + "QRadioTunerControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioTunerControl.band": (), + "QRadioTunerControl.cancelSearch": (), + "QRadioTunerControl.errorString": (), + "QRadioTunerControl.frequency": (), + "QRadioTunerControl.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isAntennaConnected": (), + "QRadioTunerControl.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isMuted": (), + "QRadioTunerControl.isSearching": (), + "QRadioTunerControl.isStereo": (), + "QRadioTunerControl.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTunerControl.searchBackward": (), + "QRadioTunerControl.searchForward": (), + "QRadioTunerControl.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.setFrequency": ('int',), + "QRadioTunerControl.setMuted": ('bool',), + "QRadioTunerControl.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTunerControl.setVolume": ('int',), + "QRadioTunerControl.signalStrength": (), + "QRadioTunerControl.start": (), + "QRadioTunerControl.state": (), + "QRadioTunerControl.stereoMode": (), + "QRadioTunerControl.stop": (), + "QRadioTunerControl.volume": (), + + # class PySide2.QtMultimedia.QSound: + "QSound.__init__": ('str', 'PySide2.QtCore.QObject'), + "QSound.fileName": (), + "QSound.isFinished": (), + "QSound.loops": (), + "QSound.loopsRemaining": (), + "QSound.play": [(), ('str',)], + "QSound.setLoops": ('int',), + "QSound.stop": (), + + # class PySide2.QtMultimedia.QSoundEffect: + "QSoundEffect.__init__": ('PySide2.QtCore.QObject',), + "QSoundEffect.category": (), + "QSoundEffect.isLoaded": (), + "QSoundEffect.isMuted": (), + "QSoundEffect.isPlaying": (), + "QSoundEffect.loopCount": (), + "QSoundEffect.loopsRemaining": (), + "QSoundEffect.play": (), + "QSoundEffect.setCategory": ('str',), + "QSoundEffect.setLoopCount": ('int',), + "QSoundEffect.setMuted": ('bool',), + "QSoundEffect.setSource": ('PySide2.QtCore.QUrl',), + "QSoundEffect.setVolume": ('float',), + "QSoundEffect.source": (), + "QSoundEffect.status": (), + "QSoundEffect.stop": (), + "QSoundEffect.supportedMimeTypes": (), + "QSoundEffect.volume": (), + + # class PySide2.QtMultimedia.QVideoDeviceSelectorControl: + "QVideoDeviceSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoDeviceSelectorControl.defaultDevice": (), + "QVideoDeviceSelectorControl.deviceCount": (), + "QVideoDeviceSelectorControl.deviceDescription": ('int',), + "QVideoDeviceSelectorControl.deviceName": ('int',), + "QVideoDeviceSelectorControl.selectedDevice": (), + "QVideoDeviceSelectorControl.setSelectedDevice": ('int',), + + # class PySide2.QtMultimedia.QVideoEncoderSettings: + "QVideoEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QVideoEncoderSettings',)], + "QVideoEncoderSettings.__copy__": (), + "QVideoEncoderSettings.bitRate": (), + "QVideoEncoderSettings.codec": (), + "QVideoEncoderSettings.encodingMode": (), + "QVideoEncoderSettings.encodingOption": ('str',), + "QVideoEncoderSettings.encodingOptions": (), + "QVideoEncoderSettings.frameRate": (), + "QVideoEncoderSettings.isNull": (), + "QVideoEncoderSettings.quality": (), + "QVideoEncoderSettings.resolution": (), + "QVideoEncoderSettings.setBitRate": ('int',), + "QVideoEncoderSettings.setCodec": ('str',), + "QVideoEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QVideoEncoderSettings.setEncodingOption": ('str', 'PySide2.support.signature.typing.Any'), + "QVideoEncoderSettings.setEncodingOptions": ('dict',), + "QVideoEncoderSettings.setFrameRate": ('float',), + "QVideoEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QVideoEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QVideoEncoderSettingsControl: + "QVideoEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoEncoderSettingsControl.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QVideoEncoderSettingsControl.supportedVideoCodecs": (), + "QVideoEncoderSettingsControl.videoCodecDescription": ('str',), + "QVideoEncoderSettingsControl.videoSettings": (), + + # class PySide2.QtMultimedia.QVideoFilterRunnable: + "QVideoFilterRunnable.__init__": (), + "QVideoFilterRunnable.run": ('PySide2.QtMultimedia.QVideoFrame', 'PySide2.QtMultimedia.QVideoSurfaceFormat', 'RunFlags'), + + # class PySide2.QtMultimedia.QVideoFrame: + "QVideoFrame.__init__": [(), ('PySide2.QtGui.QImage',), ('PySide2.QtMultimedia.QAbstractVideoBuffer', 'PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat'), ('PySide2.QtMultimedia.QVideoFrame',), ('int', 'PySide2.QtCore.QSize', 'int', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat')], + "QVideoFrame.__copy__": (), + "QVideoFrame.availableMetaData": (), + "QVideoFrame.bits": [], + "QVideoFrame.bytesPerLine": [(), ('int',)], + "QVideoFrame.endTime": (), + "QVideoFrame.fieldType": (), + "QVideoFrame.handle": (), + "QVideoFrame.handleType": (), + "QVideoFrame.height": (), + "QVideoFrame.imageFormatFromPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QVideoFrame.isMapped": (), + "QVideoFrame.isReadable": (), + "QVideoFrame.isValid": (), + "QVideoFrame.isWritable": (), + "QVideoFrame.map": ('PySide2.QtMultimedia.QAbstractVideoBuffer.MapMode',), + "QVideoFrame.mapMode": (), + "QVideoFrame.mappedBytes": (), + "QVideoFrame.metaData": ('str',), + "QVideoFrame.pixelFormat": (), + "QVideoFrame.pixelFormatFromImageFormat": ('PySide2.QtGui.QImage.Format',), + "QVideoFrame.planeCount": (), + "QVideoFrame.setEndTime": ('int',), + "QVideoFrame.setFieldType": ('PySide2.QtMultimedia.QVideoFrame.FieldType',), + "QVideoFrame.setMetaData": ('str', 'PySide2.support.signature.typing.Any'), + "QVideoFrame.setStartTime": ('int',), + "QVideoFrame.size": (), + "QVideoFrame.startTime": (), + "QVideoFrame.unmap": (), + "QVideoFrame.width": (), + + # class PySide2.QtMultimedia.QVideoProbe: + "QVideoProbe.__init__": ('PySide2.QtCore.QObject',), + "QVideoProbe.isActive": (), + "QVideoProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QVideoRendererControl: + "QVideoRendererControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoRendererControl.setSurface": ('PySide2.QtMultimedia.QAbstractVideoSurface',), + "QVideoRendererControl.surface": (), + + # class PySide2.QtMultimedia.QVideoSurfaceFormat: + "QVideoSurfaceFormat.__init__": [(), ('PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat', 'PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType'), ('PySide2.QtMultimedia.QVideoSurfaceFormat',)], + "QVideoSurfaceFormat.__copy__": (), + "QVideoSurfaceFormat.frameHeight": (), + "QVideoSurfaceFormat.frameRate": (), + "QVideoSurfaceFormat.frameSize": (), + "QVideoSurfaceFormat.frameWidth": (), + "QVideoSurfaceFormat.handleType": (), + "QVideoSurfaceFormat.isValid": (), + "QVideoSurfaceFormat.pixelAspectRatio": (), + "QVideoSurfaceFormat.pixelFormat": (), + "QVideoSurfaceFormat.property": ('str',), + "QVideoSurfaceFormat.propertyNames": (), + "QVideoSurfaceFormat.scanLineDirection": (), + "QVideoSurfaceFormat.setFrameRate": ('float',), + "QVideoSurfaceFormat.setFrameSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setProperty": ('str', 'PySide2.support.signature.typing.Any'), + "QVideoSurfaceFormat.setScanLineDirection": ('PySide2.QtMultimedia.QVideoSurfaceFormat.Direction',), + "QVideoSurfaceFormat.setViewport": ('PySide2.QtCore.QRect',), + "QVideoSurfaceFormat.setYCbCrColorSpace": ('PySide2.QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace',), + "QVideoSurfaceFormat.sizeHint": (), + "QVideoSurfaceFormat.viewport": (), + "QVideoSurfaceFormat.yCbCrColorSpace": (), + + # class PySide2.QtMultimedia.QVideoWindowControl: + "QVideoWindowControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWindowControl.aspectRatioMode": (), + "QVideoWindowControl.brightness": (), + "QVideoWindowControl.contrast": (), + "QVideoWindowControl.displayRect": (), + "QVideoWindowControl.hue": (), + "QVideoWindowControl.isFullScreen": (), + "QVideoWindowControl.nativeSize": (), + "QVideoWindowControl.repaint": (), + "QVideoWindowControl.saturation": (), + "QVideoWindowControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWindowControl.setBrightness": ('int',), + "QVideoWindowControl.setContrast": ('int',), + "QVideoWindowControl.setDisplayRect": ('PySide2.QtCore.QRect',), + "QVideoWindowControl.setFullScreen": ('bool',), + "QVideoWindowControl.setHue": ('int',), + "QVideoWindowControl.setSaturation": ('int',), + "QVideoWindowControl.setWinId": ('int',), + "QVideoWindowControl.winId": (), + }) + +# Module PySide2.QtMultimediaWidgets +if "PySide2.QtMultimediaWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtMultimediaWidgets.QCameraViewfinder: + "QCameraViewfinder.__init__": ('PySide2.QtWidgets.QWidget',), + "QCameraViewfinder.mediaObject": (), + "QCameraViewfinder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimediaWidgets.QGraphicsVideoItem: + "QGraphicsVideoItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsVideoItem.aspectRatioMode": (), + "QGraphicsVideoItem.boundingRect": (), + "QGraphicsVideoItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'PySide2.support.signature.typing.Any'), + "QGraphicsVideoItem.mediaObject": (), + "QGraphicsVideoItem.nativeSize": (), + "QGraphicsVideoItem.offset": (), + "QGraphicsVideoItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsVideoItem.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QGraphicsVideoItem.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QGraphicsVideoItem.setOffset": ('PySide2.QtCore.QPointF',), + "QGraphicsVideoItem.setSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsVideoItem.size": (), + "QGraphicsVideoItem.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtMultimediaWidgets.QVideoWidget: + "QVideoWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QVideoWidget.aspectRatioMode": (), + "QVideoWidget.brightness": (), + "QVideoWidget.contrast": (), + "QVideoWidget.event": ('PySide2.QtCore.QEvent',), + "QVideoWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QVideoWidget.hue": (), + "QVideoWidget.isFullScreen": (), + "QVideoWidget.mediaObject": (), + "QVideoWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QVideoWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QVideoWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QVideoWidget.saturation": (), + "QVideoWidget.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidget.setBrightness": ('int',), + "QVideoWidget.setContrast": ('int',), + "QVideoWidget.setFullScreen": ('bool',), + "QVideoWidget.setHue": ('int',), + "QVideoWidget.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QVideoWidget.setSaturation": ('int',), + "QVideoWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QVideoWidget.sizeHint": (), + + # class PySide2.QtMultimediaWidgets.QVideoWidgetControl: + "QVideoWidgetControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWidgetControl.aspectRatioMode": (), + "QVideoWidgetControl.brightness": (), + "QVideoWidgetControl.contrast": (), + "QVideoWidgetControl.hue": (), + "QVideoWidgetControl.isFullScreen": (), + "QVideoWidgetControl.saturation": (), + "QVideoWidgetControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidgetControl.setBrightness": ('int',), + "QVideoWidgetControl.setContrast": ('int',), + "QVideoWidgetControl.setFullScreen": ('bool',), + "QVideoWidgetControl.setHue": ('int',), + "QVideoWidgetControl.setSaturation": ('int',), + "QVideoWidgetControl.videoWidget": (), + }) + +# Module PySide2.QtOpenGL +if "PySide2.QtOpenGL" in sys.modules: + dict.update({ + + # class PySide2.QtOpenGL.QGL: + + # class PySide2.QtOpenGL.QGLBuffer: + "QGLBuffer.__init__": [(), ('PySide2.QtOpenGL.QGLBuffer',), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.allocate": [('int',), ('int', 'int')], + "QGLBuffer.bind": (), + "QGLBuffer.bufferId": (), + "QGLBuffer.create": (), + "QGLBuffer.destroy": (), + "QGLBuffer.isCreated": (), + "QGLBuffer.map": ('PySide2.QtOpenGL.QGLBuffer.Access',), + "QGLBuffer.read": ('int', 'int', 'int'), + "QGLBuffer.release": [(), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.setUsagePattern": ('PySide2.QtOpenGL.QGLBuffer.UsagePattern',), + "QGLBuffer.size": (), + "QGLBuffer.type": (), + "QGLBuffer.unmap": (), + "QGLBuffer.usagePattern": (), + "QGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtOpenGL.QGLColormap: + "QGLColormap.__init__": [(), ('PySide2.QtOpenGL.QGLColormap',)], + "QGLColormap.__copy__": (), + "QGLColormap.entryColor": ('int',), + "QGLColormap.entryRgb": ('int',), + "QGLColormap.find": ('int',), + "QGLColormap.findNearest": ('int',), + "QGLColormap.handle": (), + "QGLColormap.isEmpty": (), + "QGLColormap.setEntry": [('int', 'PySide2.QtGui.QColor'), ('int', 'int')], + "QGLColormap.setHandle": ('int',), + "QGLColormap.size": (), + + # class PySide2.QtOpenGL.QGLContext: + "QGLContext.__init__": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.areSharing": ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtOpenGL.QGLContext'), + "QGLContext.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'BindOptions'), ('str',)], + "QGLContext.chooseContext": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.colorIndex": ('PySide2.QtGui.QColor',), + "QGLContext.contextHandle": (), + "QGLContext.create": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.currentContext": (), + "QGLContext.deleteTexture": ('int',), + "QGLContext.device": (), + "QGLContext.deviceIsPixmap": (), + "QGLContext.doneCurrent": (), + "QGLContext.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLContext.format": (), + "QGLContext.fromOpenGLContext": ('PySide2.QtGui.QOpenGLContext',), + "QGLContext.initialized": (), + "QGLContext.isSharing": (), + "QGLContext.isValid": (), + "QGLContext.makeCurrent": (), + "QGLContext.moveToThread": ('PySide2.QtCore.QThread',), + "QGLContext.overlayTransparentColor": (), + "QGLContext.requestedFormat": (), + "QGLContext.reset": (), + "QGLContext.setDevice": ('PySide2.QtGui.QPaintDevice',), + "QGLContext.setFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.setInitialized": ('bool',), + "QGLContext.setTextureCacheLimit": ('int',), + "QGLContext.setValid": ('bool',), + "QGLContext.setWindowCreated": ('bool',), + "QGLContext.swapBuffers": (), + "QGLContext.textureCacheLimit": (), + "QGLContext.windowCreated": (), + + # class PySide2.QtOpenGL.QGLFormat: + "QGLFormat.__init__": [(), ('FormatOptions', 'int'), ('PySide2.QtOpenGL.QGLFormat',)], + "QGLFormat.__copy__": (), + "QGLFormat.accum": (), + "QGLFormat.accumBufferSize": (), + "QGLFormat.alpha": (), + "QGLFormat.alphaBufferSize": (), + "QGLFormat.blueBufferSize": (), + "QGLFormat.defaultFormat": (), + "QGLFormat.defaultOverlayFormat": (), + "QGLFormat.depth": (), + "QGLFormat.depthBufferSize": (), + "QGLFormat.directRendering": (), + "QGLFormat.doubleBuffer": (), + "QGLFormat.fromSurfaceFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QGLFormat.greenBufferSize": (), + "QGLFormat.hasOpenGL": (), + "QGLFormat.hasOpenGLOverlays": (), + "QGLFormat.hasOverlay": (), + "QGLFormat.majorVersion": (), + "QGLFormat.minorVersion": (), + "QGLFormat.openGLVersionFlags": (), + "QGLFormat.plane": (), + "QGLFormat.profile": (), + "QGLFormat.redBufferSize": (), + "QGLFormat.rgba": (), + "QGLFormat.sampleBuffers": (), + "QGLFormat.samples": (), + "QGLFormat.setAccum": ('bool',), + "QGLFormat.setAccumBufferSize": ('int',), + "QGLFormat.setAlpha": ('bool',), + "QGLFormat.setAlphaBufferSize": ('int',), + "QGLFormat.setBlueBufferSize": ('int',), + "QGLFormat.setDefaultFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDefaultOverlayFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDepth": ('bool',), + "QGLFormat.setDepthBufferSize": ('int',), + "QGLFormat.setDirectRendering": ('bool',), + "QGLFormat.setDoubleBuffer": ('bool',), + "QGLFormat.setGreenBufferSize": ('int',), + "QGLFormat.setOption": ('FormatOptions',), + "QGLFormat.setOverlay": ('bool',), + "QGLFormat.setPlane": ('int',), + "QGLFormat.setProfile": ('PySide2.QtOpenGL.QGLFormat.OpenGLContextProfile',), + "QGLFormat.setRedBufferSize": ('int',), + "QGLFormat.setRgba": ('bool',), + "QGLFormat.setSampleBuffers": ('bool',), + "QGLFormat.setSamples": ('int',), + "QGLFormat.setStencil": ('bool',), + "QGLFormat.setStencilBufferSize": ('int',), + "QGLFormat.setStereo": ('bool',), + "QGLFormat.setSwapInterval": ('int',), + "QGLFormat.setVersion": ('int', 'int'), + "QGLFormat.stencil": (), + "QGLFormat.stencilBufferSize": (), + "QGLFormat.stereo": (), + "QGLFormat.swapInterval": (), + "QGLFormat.testOption": ('FormatOptions',), + "QGLFormat.toSurfaceFormat": ('PySide2.QtOpenGL.QGLFormat',), + + # class PySide2.QtOpenGL.QGLFramebufferObject: + "QGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QGLFramebufferObject.attachment": (), + "QGLFramebufferObject.bind": (), + "QGLFramebufferObject.bindDefault": (), + "QGLFramebufferObject.blitFramebuffer": ('PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), + "QGLFramebufferObject.devType": (), + "QGLFramebufferObject.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLFramebufferObject.format": (), + "QGLFramebufferObject.handle": (), + "QGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QGLFramebufferObject.isBound": (), + "QGLFramebufferObject.isValid": (), + "QGLFramebufferObject.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLFramebufferObject.paintEngine": (), + "QGLFramebufferObject.release": (), + "QGLFramebufferObject.size": (), + "QGLFramebufferObject.texture": (), + "QGLFramebufferObject.toImage": (), + + # class PySide2.QtOpenGL.QGLFramebufferObjectFormat: + "QGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtOpenGL.QGLFramebufferObjectFormat',)], + "QGLFramebufferObjectFormat.__copy__": (), + "QGLFramebufferObjectFormat.attachment": (), + "QGLFramebufferObjectFormat.internalTextureFormat": (), + "QGLFramebufferObjectFormat.mipmap": (), + "QGLFramebufferObjectFormat.samples": (), + "QGLFramebufferObjectFormat.setAttachment": ('PySide2.QtOpenGL.QGLFramebufferObject.Attachment',), + "QGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QGLFramebufferObjectFormat.setMipmap": ('bool',), + "QGLFramebufferObjectFormat.setSamples": ('int',), + "QGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtOpenGL.QGLPixelBuffer: + "QGLPixelBuffer.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget'), ('int', 'int', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget')], + "QGLPixelBuffer.bindTexture": [('PySide2.QtGui.QImage', 'int'), ('PySide2.QtGui.QPixmap', 'int'), ('str',)], + "QGLPixelBuffer.bindToDynamicTexture": ('int',), + "QGLPixelBuffer.context": (), + "QGLPixelBuffer.deleteTexture": ('int',), + "QGLPixelBuffer.devType": (), + "QGLPixelBuffer.doneCurrent": (), + "QGLPixelBuffer.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLPixelBuffer.format": (), + "QGLPixelBuffer.generateDynamicTexture": (), + "QGLPixelBuffer.handle": (), + "QGLPixelBuffer.hasOpenGLPbuffers": (), + "QGLPixelBuffer.isValid": (), + "QGLPixelBuffer.makeCurrent": (), + "QGLPixelBuffer.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLPixelBuffer.paintEngine": (), + "QGLPixelBuffer.releaseFromDynamicTexture": (), + "QGLPixelBuffer.size": (), + "QGLPixelBuffer.toImage": (), + "QGLPixelBuffer.updateDynamicTexture": ('int',), + + # class PySide2.QtOpenGL.QGLShader: + "QGLShader.__init__": [('ShaderType', 'PySide2.QtCore.QObject'), ('ShaderType', 'PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShader.compileSourceFile": ('str',), + "QGLShader.hasOpenGLShaders": ('ShaderType', 'PySide2.QtOpenGL.QGLContext'), + "QGLShader.isCompiled": (), + "QGLShader.log": (), + "QGLShader.shaderId": (), + "QGLShader.shaderType": (), + "QGLShader.sourceCode": (), + + # class PySide2.QtOpenGL.QGLShaderProgram: + "QGLShaderProgram.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShaderProgram.addShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.addShaderFromSourceCode": [('ShaderType', 'PySide2.QtCore.QByteArray'), ('ShaderType', 'str')], + "QGLShaderProgram.addShaderFromSourceFile": ('ShaderType', 'str'), + "QGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShaderProgram.bind": (), + "QGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.geometryInputType": (), + "QGLShaderProgram.geometryOutputType": (), + "QGLShaderProgram.geometryOutputVertexCount": (), + "QGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtOpenGL.QGLContext',), + "QGLShaderProgram.isLinked": (), + "QGLShaderProgram.link": (), + "QGLShaderProgram.log": (), + "QGLShaderProgram.maxGeometryOutputVertices": (), + "QGLShaderProgram.programId": (), + "QGLShaderProgram.release": (), + "QGLShaderProgram.removeAllShaders": (), + "QGLShaderProgram.removeShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.setAttributeArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setAttributeArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setAttributeArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float')], + "QGLShaderProgram.setGeometryInputType": ('int',), + "QGLShaderProgram.setGeometryOutputType": ('int',), + "QGLShaderProgram.setGeometryOutputVertexCount": ('int',), + "QGLShaderProgram.setUniformValue": [('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QGLShaderProgram.setUniformValueArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setUniformValueArray2x2": [('int', 'PySide2.QtGui.QMatrix2x2', 'int'), ('str', 'PySide2.QtGui.QMatrix2x2', 'int')], + "QGLShaderProgram.setUniformValueArray2x3": [('int', 'PySide2.QtGui.QMatrix2x3', 'int'), ('str', 'PySide2.QtGui.QMatrix2x3', 'int')], + "QGLShaderProgram.setUniformValueArray2x4": [('int', 'PySide2.QtGui.QMatrix2x4', 'int'), ('str', 'PySide2.QtGui.QMatrix2x4', 'int')], + "QGLShaderProgram.setUniformValueArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setUniformValueArray3x2": [('int', 'PySide2.QtGui.QMatrix3x2', 'int'), ('str', 'PySide2.QtGui.QMatrix3x2', 'int')], + "QGLShaderProgram.setUniformValueArray3x3": [('int', 'PySide2.QtGui.QMatrix3x3', 'int'), ('str', 'PySide2.QtGui.QMatrix3x3', 'int')], + "QGLShaderProgram.setUniformValueArray3x4": [('int', 'PySide2.QtGui.QMatrix3x4', 'int'), ('str', 'PySide2.QtGui.QMatrix3x4', 'int')], + "QGLShaderProgram.setUniformValueArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setUniformValueArray4x2": [('int', 'PySide2.QtGui.QMatrix4x2', 'int'), ('str', 'PySide2.QtGui.QMatrix4x2', 'int')], + "QGLShaderProgram.setUniformValueArray4x3": [('int', 'PySide2.QtGui.QMatrix4x3', 'int'), ('str', 'PySide2.QtGui.QMatrix4x3', 'int')], + "QGLShaderProgram.setUniformValueArray4x4": [('int', 'PySide2.QtGui.QMatrix4x4', 'int'), ('str', 'PySide2.QtGui.QMatrix4x4', 'int')], + "QGLShaderProgram.setUniformValueArrayInt": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.setUniformValueArrayUint": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.shaders": (), + "QGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtOpenGL.QGLWidget: + "QGLWidget.__init__": [('PySide2.QtOpenGL.QGLContext', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags'), ('PySide2.QtOpenGL.QGLFormat', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags')], + "QGLWidget.autoBufferSwap": (), + "QGLWidget.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'BindOptions'), ('str',)], + "QGLWidget.colormap": (), + "QGLWidget.context": (), + "QGLWidget.convertToGLFormat": ('PySide2.QtGui.QImage',), + "QGLWidget.deleteTexture": ('int',), + "QGLWidget.doneCurrent": (), + "QGLWidget.doubleBuffer": (), + "QGLWidget.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLWidget.event": ('PySide2.QtCore.QEvent',), + "QGLWidget.format": (), + "QGLWidget.glDraw": (), + "QGLWidget.glInit": (), + "QGLWidget.grabFrameBuffer": ('bool',), + "QGLWidget.initializeGL": (), + "QGLWidget.initializeOverlayGL": (), + "QGLWidget.isSharing": (), + "QGLWidget.isValid": (), + "QGLWidget.makeCurrent": (), + "QGLWidget.makeOverlayCurrent": (), + "QGLWidget.overlayContext": (), + "QGLWidget.paintEngine": (), + "QGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGLWidget.paintGL": (), + "QGLWidget.paintOverlayGL": (), + "QGLWidget.qglClearColor": ('PySide2.QtGui.QColor',), + "QGLWidget.qglColor": ('PySide2.QtGui.QColor',), + "QGLWidget.renderPixmap": ('int', 'int', 'bool'), + "QGLWidget.renderText": [('float', 'float', 'float', 'str', 'PySide2.QtGui.QFont'), ('int', 'int', 'str', 'PySide2.QtGui.QFont')], + "QGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGLWidget.resizeGL": ('int', 'int'), + "QGLWidget.resizeOverlayGL": ('int', 'int'), + "QGLWidget.setAutoBufferSwap": ('bool',), + "QGLWidget.setColormap": ('PySide2.QtOpenGL.QGLColormap',), + "QGLWidget.swapBuffers": (), + "QGLWidget.updateGL": (), + "QGLWidget.updateOverlayGL": (), + }) + +# Module PySide2.QtQml +if "PySide2.QtQml" in sys.modules: + dict.update({ + + # class PySide2.QtQml.ListProperty: + + # class PySide2.QtQml.QJSEngine: + "QJSEngine.__init__": [(), ('PySide2.QtCore.QObject',)], + "QJSEngine.collectGarbage": (), + "QJSEngine.evaluate": ('str', 'str', 'int'), + "QJSEngine.globalObject": (), + "QJSEngine.installExtensions": ('Extensions', 'PySide2.QtQml.QJSValue'), + "QJSEngine.installTranslatorFunctions": ('PySide2.QtQml.QJSValue',), + "QJSEngine.newArray": ('int',), + "QJSEngine.newObject": (), + "QJSEngine.newQObject": ('PySide2.QtCore.QObject',), + "QJSEngine.toScriptValue": ('PySide2.support.signature.typing.Any',), + + # class PySide2.QtQml.QJSValue: + "QJSValue.__init__": [('PySide2.QtQml.QJSValue',), ('PySide2.QtQml.QJSValue.SpecialValue',), ('bool',), ('float',), ('int',), ('str',)], + "QJSValue.__copy__": (), + "QJSValue.call": ('list',), + "QJSValue.callAsConstructor": ('list',), + "QJSValue.callWithInstance": ('PySide2.QtQml.QJSValue', 'list'), + "QJSValue.deleteProperty": ('str',), + "QJSValue.engine": (), + "QJSValue.equals": ('PySide2.QtQml.QJSValue',), + "QJSValue.hasOwnProperty": ('str',), + "QJSValue.hasProperty": ('str',), + "QJSValue.isArray": (), + "QJSValue.isBool": (), + "QJSValue.isCallable": (), + "QJSValue.isDate": (), + "QJSValue.isError": (), + "QJSValue.isNull": (), + "QJSValue.isNumber": (), + "QJSValue.isObject": (), + "QJSValue.isQObject": (), + "QJSValue.isRegExp": (), + "QJSValue.isString": (), + "QJSValue.isUndefined": (), + "QJSValue.isVariant": (), + "QJSValue.property": [('int',), ('str',)], + "QJSValue.prototype": (), + "QJSValue.setProperty": [('int', 'PySide2.QtQml.QJSValue'), ('str', 'PySide2.QtQml.QJSValue')], + "QJSValue.setPrototype": ('PySide2.QtQml.QJSValue',), + "QJSValue.strictlyEquals": ('PySide2.QtQml.QJSValue',), + "QJSValue.toBool": (), + "QJSValue.toDateTime": (), + "QJSValue.toInt": (), + "QJSValue.toNumber": (), + "QJSValue.toQObject": (), + "QJSValue.toString": (), + "QJSValue.toUInt": (), + "QJSValue.toVariant": (), + + # class PySide2.QtQml.QJSValueIterator: + "QJSValueIterator.__init__": ('PySide2.QtQml.QJSValue',), + "QJSValueIterator.hasNext": (), + "QJSValueIterator.name": (), + "QJSValueIterator.next": (), + "QJSValueIterator.value": (), + + # class PySide2.QtQml.QQmlAbstractUrlInterceptor: + "QQmlAbstractUrlInterceptor.__init__": (), + "QQmlAbstractUrlInterceptor.intercept": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlAbstractUrlInterceptor.DataType'), + + # class PySide2.QtQml.QQmlApplicationEngine: + "QQmlApplicationEngine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QQmlApplicationEngine.load": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlApplicationEngine.loadData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlApplicationEngine.rootObjects": (), + + # class PySide2.QtQml.QQmlComponent: + "QQmlComponent.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject')], + "QQmlComponent.beginCreate": ('PySide2.QtQml.QQmlContext',), + "QQmlComponent.completeCreate": (), + "QQmlComponent.create": [('PySide2.QtQml.QQmlContext',), ('PySide2.QtQml.QQmlIncubator', 'PySide2.QtQml.QQmlContext', 'PySide2.QtQml.QQmlContext')], + "QQmlComponent.creationContext": (), + "QQmlComponent.errorString": (), + "QQmlComponent.errors": (), + "QQmlComponent.isError": (), + "QQmlComponent.isLoading": (), + "QQmlComponent.isNull": (), + "QQmlComponent.isReady": (), + "QQmlComponent.loadUrl": [('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode')], + "QQmlComponent.progress": (), + "QQmlComponent.setData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlComponent.status": (), + "QQmlComponent.url": (), + + # class PySide2.QtQml.QQmlContext: + "QQmlContext.__init__": [('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject')], + "QQmlContext.baseUrl": (), + "QQmlContext.contextObject": (), + "QQmlContext.contextProperty": ('str',), + "QQmlContext.engine": (), + "QQmlContext.isValid": (), + "QQmlContext.nameForObject": ('PySide2.QtCore.QObject',), + "QQmlContext.parentContext": (), + "QQmlContext.resolvedUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setContextObject": ('PySide2.QtCore.QObject',), + "QQmlContext.setContextProperty": [('str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.support.signature.typing.Any')], + + # class PySide2.QtQml.QQmlDebuggingEnabler: + "QQmlDebuggingEnabler.__init__": ('bool',), + "QQmlDebuggingEnabler.connectToLocalDebugger": ('str', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode'), + "QQmlDebuggingEnabler.startTcpDebugServer": ('int', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode', 'str'), + + # class PySide2.QtQml.QQmlEngine: + "QQmlEngine.__init__": ('PySide2.QtCore.QObject',), + "QQmlEngine.addImageProvider": ('str', 'PySide2.QtQml.QQmlImageProviderBase'), + "QQmlEngine.addImportPath": ('str',), + "QQmlEngine.addNamedBundle": ('str', 'str'), + "QQmlEngine.addPluginPath": ('str',), + "QQmlEngine.baseUrl": (), + "QQmlEngine.clearComponentCache": (), + "QQmlEngine.contextForObject": ('PySide2.QtCore.QObject',), + "QQmlEngine.event": ('PySide2.QtCore.QEvent',), + "QQmlEngine.imageProvider": ('str',), + "QQmlEngine.importPathList": (), + "QQmlEngine.importPlugin": ('str', 'str', 'list'), + "QQmlEngine.incubationController": (), + "QQmlEngine.networkAccessManager": (), + "QQmlEngine.networkAccessManagerFactory": (), + "QQmlEngine.objectOwnership": ('PySide2.QtCore.QObject',), + "QQmlEngine.offlineStoragePath": (), + "QQmlEngine.outputWarningsToStandardError": (), + "QQmlEngine.pluginPathList": (), + "QQmlEngine.removeImageProvider": ('str',), + "QQmlEngine.rootContext": (), + "QQmlEngine.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlEngine.setContextForObject": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), + "QQmlEngine.setImportPathList": ('PySide2.support.signature.typing.List',), + "QQmlEngine.setIncubationController": ('PySide2.QtQml.QQmlIncubationController',), + "QQmlEngine.setNetworkAccessManagerFactory": ('PySide2.QtQml.QQmlNetworkAccessManagerFactory',), + "QQmlEngine.setObjectOwnership": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine.ObjectOwnership'), + "QQmlEngine.setOfflineStoragePath": ('str',), + "QQmlEngine.setOutputWarningsToStandardError": ('bool',), + "QQmlEngine.setPluginPathList": ('PySide2.support.signature.typing.List',), + "QQmlEngine.setUrlInterceptor": ('PySide2.QtQml.QQmlAbstractUrlInterceptor',), + "QQmlEngine.trimComponentCache": (), + "QQmlEngine.urlInterceptor": (), + + # class PySide2.QtQml.QQmlError: + "QQmlError.__init__": [(), ('PySide2.QtQml.QQmlError',)], + "QQmlError.__copy__": (), + "QQmlError.column": (), + "QQmlError.description": (), + "QQmlError.isValid": (), + "QQmlError.line": (), + "QQmlError.object": (), + "QQmlError.setColumn": ('int',), + "QQmlError.setDescription": ('str',), + "QQmlError.setLine": ('int',), + "QQmlError.setObject": ('PySide2.QtCore.QObject',), + "QQmlError.setUrl": ('PySide2.QtCore.QUrl',), + "QQmlError.toString": (), + "QQmlError.url": (), + + # class PySide2.QtQml.QQmlExpression: + "QQmlExpression.__init__": [(), ('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlScriptString', 'PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QObject')], + "QQmlExpression.clearError": (), + "QQmlExpression.columnNumber": (), + "QQmlExpression.context": (), + "QQmlExpression.engine": (), + "QQmlExpression.error": (), + "QQmlExpression.evaluate": ('bool',), + "QQmlExpression.expression": (), + "QQmlExpression.hasError": (), + "QQmlExpression.lineNumber": (), + "QQmlExpression.notifyOnValueChanged": (), + "QQmlExpression.scopeObject": (), + "QQmlExpression.setExpression": ('str',), + "QQmlExpression.setNotifyOnValueChanged": ('bool',), + "QQmlExpression.setSourceLocation": ('str', 'int', 'int'), + "QQmlExpression.sourceFile": (), + + # class PySide2.QtQml.QQmlExtensionInterface: + "QQmlExtensionInterface.__init__": (), + "QQmlExtensionInterface.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + + # class PySide2.QtQml.QQmlExtensionPlugin: + "QQmlExtensionPlugin.__init__": ('PySide2.QtCore.QObject',), + "QQmlExtensionPlugin.baseUrl": (), + "QQmlExtensionPlugin.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + "QQmlExtensionPlugin.registerTypes": ('str',), + + # class PySide2.QtQml.QQmlFile: + "QQmlFile.__init__": [(), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.clear": [(), ('PySide2.QtCore.QObject',)], + "QQmlFile.connectDownloadProgress": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.connectFinished": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.data": (), + "QQmlFile.dataByteArray": (), + "QQmlFile.error": (), + "QQmlFile.isError": (), + "QQmlFile.isLoading": (), + "QQmlFile.isLocalFile": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.isNull": (), + "QQmlFile.isReady": (), + "QQmlFile.isSynchronous": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.load": [('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.size": (), + "QQmlFile.status": (), + "QQmlFile.url": (), + "QQmlFile.urlToLocalFileOrQrc": [('PySide2.QtCore.QUrl',), ('str',)], + + # class PySide2.QtQml.QQmlFileSelector: + "QQmlFileSelector.__init__": ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), + "QQmlFileSelector.get": ('PySide2.QtQml.QQmlEngine',), + "QQmlFileSelector.setExtraSelectors": ['PySide2.support.signature.typing.List'], + "QQmlFileSelector.setSelector": ('PySide2.QtCore.QFileSelector',), + + # class PySide2.QtQml.QQmlImageProviderBase: + "QQmlImageProviderBase.flags": (), + "QQmlImageProviderBase.imageType": (), + + # class PySide2.QtQml.QQmlIncubationController: + "QQmlIncubationController.__init__": (), + "QQmlIncubationController.engine": (), + "QQmlIncubationController.incubateFor": ('int',), + "QQmlIncubationController.incubateWhile": ('bool', 'int'), + "QQmlIncubationController.incubatingObjectCount": (), + "QQmlIncubationController.incubatingObjectCountChanged": ('int',), + + # class PySide2.QtQml.QQmlIncubator: + "QQmlIncubator.__init__": ('PySide2.QtQml.QQmlIncubator.IncubationMode',), + "QQmlIncubator.clear": (), + "QQmlIncubator.errors": (), + "QQmlIncubator.forceCompletion": (), + "QQmlIncubator.incubationMode": (), + "QQmlIncubator.isError": (), + "QQmlIncubator.isLoading": (), + "QQmlIncubator.isNull": (), + "QQmlIncubator.isReady": (), + "QQmlIncubator.object": (), + "QQmlIncubator.setInitialState": ('PySide2.QtCore.QObject',), + "QQmlIncubator.status": (), + "QQmlIncubator.statusChanged": ('PySide2.QtQml.QQmlIncubator.Status',), + + # class PySide2.QtQml.QQmlListReference: + "QQmlListReference.__init__": [(), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlListReference',)], + "QQmlListReference.__copy__": (), + "QQmlListReference.append": ('PySide2.QtCore.QObject',), + "QQmlListReference.at": ('int',), + "QQmlListReference.canAppend": (), + "QQmlListReference.canAt": (), + "QQmlListReference.canClear": (), + "QQmlListReference.canCount": (), + "QQmlListReference.clear": (), + "QQmlListReference.count": (), + "QQmlListReference.isManipulable": (), + "QQmlListReference.isReadable": (), + "QQmlListReference.isValid": (), + "QQmlListReference.listElementType": (), + "QQmlListReference.object": (), + + # class PySide2.QtQml.QQmlNetworkAccessManagerFactory: + "QQmlNetworkAccessManagerFactory.__init__": (), + "QQmlNetworkAccessManagerFactory.create": ('PySide2.QtCore.QObject',), + + # class PySide2.QtQml.QQmlParserStatus: + "QQmlParserStatus.__init__": (), + "QQmlParserStatus.classBegin": (), + "QQmlParserStatus.componentComplete": (), + + # class PySide2.QtQml.QQmlProperty: + "QQmlProperty.__init__": [(), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlProperty',)], + "QQmlProperty.__copy__": (), + "QQmlProperty.connectNotifySignal": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlProperty.hasNotifySignal": (), + "QQmlProperty.index": (), + "QQmlProperty.isDesignable": (), + "QQmlProperty.isProperty": (), + "QQmlProperty.isResettable": (), + "QQmlProperty.isSignalProperty": (), + "QQmlProperty.isValid": (), + "QQmlProperty.isWritable": (), + "QQmlProperty.method": (), + "QQmlProperty.name": (), + "QQmlProperty.needsNotifySignal": (), + "QQmlProperty.object": (), + "QQmlProperty.property": (), + "QQmlProperty.propertyType": (), + "QQmlProperty.propertyTypeCategory": (), + "QQmlProperty.propertyTypeName": (), + "QQmlProperty.read": [(), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine')], + "QQmlProperty.reset": (), + "QQmlProperty.type": (), + "QQmlProperty.write": [('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Any'), ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Any', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.support.signature.typing.Any', 'PySide2.QtQml.QQmlEngine'), ('PySide2.support.signature.typing.Any',)], + + # class PySide2.QtQml.QQmlPropertyMap: + "QQmlPropertyMap.__init__": ('PySide2.QtCore.QObject',), + "QQmlPropertyMap.clear": ('str',), + "QQmlPropertyMap.contains": ('str',), + "QQmlPropertyMap.count": (), + "QQmlPropertyMap.insert": ('str', 'PySide2.support.signature.typing.Any'), + "QQmlPropertyMap.isEmpty": (), + "QQmlPropertyMap.keys": (), + "QQmlPropertyMap.size": (), + "QQmlPropertyMap.updateValue": ('str', 'PySide2.support.signature.typing.Any'), + "QQmlPropertyMap.value": ('str',), + + # class PySide2.QtQml.QQmlPropertyValueSource: + "QQmlPropertyValueSource.__init__": (), + "QQmlPropertyValueSource.setTarget": ('PySide2.QtQml.QQmlProperty',), + + # class PySide2.QtQml.QQmlScriptString: + "QQmlScriptString.__init__": [(), ('PySide2.QtQml.QQmlScriptString',)], + "QQmlScriptString.__copy__": (), + "QQmlScriptString.booleanLiteral": ('bool',), + "QQmlScriptString.isEmpty": (), + "QQmlScriptString.isNullLiteral": (), + "QQmlScriptString.isUndefinedLiteral": (), + "QQmlScriptString.numberLiteral": ('bool',), + "QQmlScriptString.stringLiteral": (), + + # class PySide2.QtQml.QQmlTypesExtensionInterface: + "QQmlTypesExtensionInterface.__init__": (), + "QQmlTypesExtensionInterface.registerTypes": ('str',), + + # class PySide2.QtQml.VolatileBool: + }) + +# Module PySide2.QtQuick +if "PySide2.QtQuick" in sys.modules: + dict.update({ + + # class PySide2.QtQuick.QQuickAsyncImageProvider: + "QQuickAsyncImageProvider.__init__": (), + "QQuickAsyncImageProvider.requestImageResponse": ('str', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickFramebufferObject: + "QQuickFramebufferObject.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickFramebufferObject.createRenderer": (), + "QQuickFramebufferObject.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickFramebufferObject.isTextureProvider": (), + "QQuickFramebufferObject.mirrorVertically": (), + "QQuickFramebufferObject.releaseResources": (), + "QQuickFramebufferObject.setMirrorVertically": ('bool',), + "QQuickFramebufferObject.setTextureFollowsItemSize": ('bool',), + "QQuickFramebufferObject.textureFollowsItemSize": (), + "QQuickFramebufferObject.textureProvider": (), + "QQuickFramebufferObject.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickImageProvider: + "QQuickImageProvider.__init__": ('PySide2.QtQml.QQmlImageProviderBase.ImageType', 'Flags'), + "QQuickImageProvider.flags": (), + "QQuickImageProvider.imageType": (), + "QQuickImageProvider.requestImage": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestPixmap": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestTexture": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickImageResponse: + "QQuickImageResponse.__init__": (), + "QQuickImageResponse.cancel": (), + "QQuickImageResponse.errorString": (), + "QQuickImageResponse.textureFactory": (), + + # class PySide2.QtQuick.QQuickItem: + "QQuickItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.acceptHoverEvents": (), + "QQuickItem.acceptedMouseButtons": (), + "QQuickItem.activeFocusOnTab": (), + "QQuickItem.antialiasing": (), + "QQuickItem.baselineOffset": (), + "QQuickItem.boundingRect": (), + "QQuickItem.childAt": ('float', 'float'), + "QQuickItem.childItems": (), + "QQuickItem.childMouseEventFilter": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickItem.childrenRect": (), + "QQuickItem.classBegin": (), + "QQuickItem.clip": (), + "QQuickItem.clipRect": (), + "QQuickItem.componentComplete": (), + "QQuickItem.contains": ('PySide2.QtCore.QPointF',), + "QQuickItem.cursor": (), + "QQuickItem.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickItem.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickItem.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickItem.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickItem.event": ('PySide2.QtCore.QEvent',), + "QQuickItem.filtersChildMouseEvents": (), + "QQuickItem.flags": (), + "QQuickItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.forceActiveFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QQuickItem.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickItem.grabMouse": (), + "QQuickItem.grabToImage": [('PySide2.QtCore.QSize',), ('PySide2.QtQml.QJSValue', 'PySide2.QtCore.QSize')], + "QQuickItem.grabTouchPoints": ('list',), + "QQuickItem.hasActiveFocus": (), + "QQuickItem.hasFocus": (), + "QQuickItem.height": (), + "QQuickItem.heightValid": (), + "QQuickItem.hoverEnterEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverLeaveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverMoveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.implicitHeight": (), + "QQuickItem.implicitWidth": (), + "QQuickItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QQuickItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QQuickItem.isComponentComplete": (), + "QQuickItem.isEnabled": (), + "QQuickItem.isFocusScope": (), + "QQuickItem.isTextureProvider": (), + "QQuickItem.isUnderMouse": (), + "QQuickItem.isVisible": (), + "QQuickItem.itemTransform": ('PySide2.QtQuick.QQuickItem', 'bool'), + "QQuickItem.keepMouseGrab": (), + "QQuickItem.keepTouchGrab": (), + "QQuickItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.mapFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapFromScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapRectFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectFromScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapRectToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectToScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapToScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseUngrabEvent": (), + "QQuickItem.nextItemInFocusChain": ('bool',), + "QQuickItem.opacity": (), + "QQuickItem.parentItem": (), + "QQuickItem.polish": (), + "QQuickItem.position": (), + "QQuickItem.releaseResources": (), + "QQuickItem.resetAntialiasing": (), + "QQuickItem.resetHeight": (), + "QQuickItem.resetWidth": (), + "QQuickItem.rotation": (), + "QQuickItem.scale": (), + "QQuickItem.scopedFocusItem": (), + "QQuickItem.setAcceptHoverEvents": ('bool',), + "QQuickItem.setAcceptedMouseButtons": ('MouseButtons',), + "QQuickItem.setActiveFocusOnTab": ('bool',), + "QQuickItem.setAntialiasing": ('bool',), + "QQuickItem.setBaselineOffset": ('float',), + "QQuickItem.setClip": ('bool',), + "QQuickItem.setCursor": ('PySide2.QtGui.QCursor',), + "QQuickItem.setEnabled": ('bool',), + "QQuickItem.setFiltersChildMouseEvents": ('bool',), + "QQuickItem.setFlag": ('PySide2.QtQuick.QQuickItem.Flag', 'bool'), + "QQuickItem.setFlags": ('Flags',), + "QQuickItem.setFocus": [('bool',), ('bool', 'PySide2.QtCore.Qt.FocusReason')], + "QQuickItem.setHeight": ('float',), + "QQuickItem.setImplicitHeight": ('float',), + "QQuickItem.setImplicitSize": ('float', 'float'), + "QQuickItem.setImplicitWidth": ('float',), + "QQuickItem.setKeepMouseGrab": ('bool',), + "QQuickItem.setKeepTouchGrab": ('bool',), + "QQuickItem.setOpacity": ('float',), + "QQuickItem.setParentItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.setPosition": ('PySide2.QtCore.QPointF',), + "QQuickItem.setRotation": ('float',), + "QQuickItem.setScale": ('float',), + "QQuickItem.setSize": ('PySide2.QtCore.QSizeF',), + "QQuickItem.setSmooth": ('bool',), + "QQuickItem.setState": ('str',), + "QQuickItem.setTransformOrigin": ('PySide2.QtQuick.QQuickItem.TransformOrigin',), + "QQuickItem.setTransformOriginPoint": ('PySide2.QtCore.QPointF',), + "QQuickItem.setVisible": ('bool',), + "QQuickItem.setWidth": ('float',), + "QQuickItem.setX": ('float',), + "QQuickItem.setY": ('float',), + "QQuickItem.setZ": ('float',), + "QQuickItem.smooth": (), + "QQuickItem.stackAfter": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.stackBefore": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.state": (), + "QQuickItem.textureProvider": (), + "QQuickItem.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QQuickItem.touchUngrabEvent": (), + "QQuickItem.transformOrigin": (), + "QQuickItem.transformOriginPoint": (), + "QQuickItem.ungrabMouse": (), + "QQuickItem.ungrabTouchPoints": (), + "QQuickItem.unsetCursor": (), + "QQuickItem.update": (), + "QQuickItem.updateInputMethod": ('InputMethodQueries',), + "QQuickItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + "QQuickItem.updatePolish": (), + "QQuickItem.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QQuickItem.width": (), + "QQuickItem.widthValid": (), + "QQuickItem.window": (), + "QQuickItem.windowDeactivateEvent": (), + "QQuickItem.x": (), + "QQuickItem.y": (), + "QQuickItem.z": (), + + # class PySide2.QtQuick.QQuickItemGrabResult: + "QQuickItemGrabResult.saveToFile": ('str',), + "QQuickItemGrabResult.event": ('PySide2.QtCore.QEvent',), + "QQuickItemGrabResult.image": (), + "QQuickItemGrabResult.url": (), + + # class PySide2.QtQuick.QQuickPaintedItem: + "QQuickPaintedItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickPaintedItem.antialiasing": (), + "QQuickPaintedItem.contentsBoundingRect": (), + "QQuickPaintedItem.contentsScale": (), + "QQuickPaintedItem.contentsSize": (), + "QQuickPaintedItem.fillColor": (), + "QQuickPaintedItem.isTextureProvider": (), + "QQuickPaintedItem.mipmap": (), + "QQuickPaintedItem.opaquePainting": (), + "QQuickPaintedItem.paint": ('PySide2.QtGui.QPainter',), + "QQuickPaintedItem.performanceHints": (), + "QQuickPaintedItem.releaseResources": (), + "QQuickPaintedItem.renderTarget": (), + "QQuickPaintedItem.resetContentsSize": (), + "QQuickPaintedItem.setAntialiasing": ('bool',), + "QQuickPaintedItem.setContentsScale": ('float',), + "QQuickPaintedItem.setContentsSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.setFillColor": ('PySide2.QtGui.QColor',), + "QQuickPaintedItem.setMipmap": ('bool',), + "QQuickPaintedItem.setOpaquePainting": ('bool',), + "QQuickPaintedItem.setPerformanceHint": ('PySide2.QtQuick.QQuickPaintedItem.PerformanceHint', 'bool'), + "QQuickPaintedItem.setPerformanceHints": ('PerformanceHints',), + "QQuickPaintedItem.setRenderTarget": ('PySide2.QtQuick.QQuickPaintedItem.RenderTarget',), + "QQuickPaintedItem.setTextureSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.textureProvider": (), + "QQuickPaintedItem.textureSize": (), + "QQuickPaintedItem.update": [(), ('PySide2.QtCore.QRect',)], + "QQuickPaintedItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickRenderControl: + "QQuickRenderControl.__init__": ('PySide2.QtCore.QObject',), + "QQuickRenderControl.grab": (), + "QQuickRenderControl.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QQuickRenderControl.invalidate": (), + "QQuickRenderControl.polishItems": (), + "QQuickRenderControl.prepareThread": ('PySide2.QtCore.QThread',), + "QQuickRenderControl.render": (), + "QQuickRenderControl.renderWindow": ('PySide2.QtCore.QPoint',), + "QQuickRenderControl.renderWindowFor": ('PySide2.QtQuick.QQuickWindow', 'PySide2.QtCore.QPoint'), + "QQuickRenderControl.sync": (), + + # class PySide2.QtQuick.QQuickTextDocument: + "QQuickTextDocument.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickTextDocument.textDocument": (), + + # class PySide2.QtQuick.QQuickTextureFactory: + "QQuickTextureFactory.__init__": (), + "QQuickTextureFactory.createTexture": ('PySide2.QtQuick.QQuickWindow',), + "QQuickTextureFactory.image": (), + "QQuickTextureFactory.textureByteCount": (), + "QQuickTextureFactory.textureFactoryForImage": ('PySide2.QtGui.QImage',), + "QQuickTextureFactory.textureSize": (), + + # class PySide2.QtQuick.QQuickTransform: + "QQuickTransform.__init__": ('PySide2.QtCore.QObject',), + "QQuickTransform.appendToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QQuickTransform.prependToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.update": (), + + # class PySide2.QtQuick.QQuickView: + "QQuickView.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtGui.QWindow'), ('PySide2.QtGui.QWindow',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtGui.QWindow')], + "QQuickView.engine": (), + "QQuickView.errors": (), + "QQuickView.initialSize": (), + "QQuickView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickView.resizeMode": (), + "QQuickView.rootContext": (), + "QQuickView.rootObject": (), + "QQuickView.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickView.setResizeMode": ('PySide2.QtQuick.QQuickView.ResizeMode',), + "QQuickView.setSource": ('PySide2.QtCore.QUrl',), + "QQuickView.sizeHint": (), + "QQuickView.source": (), + "QQuickView.status": (), + "QQuickView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtQuick.QQuickWindow: + "QQuickWindow.__init__": [('PySide2.QtGui.QWindow',), ('PySide2.QtQuick.QQuickRenderControl',)], + "QQuickWindow.accessibleRoot": (), + "QQuickWindow.activeFocusItem": (), + "QQuickWindow.clearBeforeRendering": (), + "QQuickWindow.color": (), + "QQuickWindow.contentItem": (), + "QQuickWindow.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'CreateTextureOptions'), + "QQuickWindow.createTextureFromImage": [('PySide2.QtGui.QImage',), ('PySide2.QtGui.QImage', 'CreateTextureOptions')], + "QQuickWindow.effectiveDevicePixelRatio": (), + "QQuickWindow.event": ('PySide2.QtCore.QEvent',), + "QQuickWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QQuickWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.focusObject": (), + "QQuickWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.grabWindow": (), + "QQuickWindow.hasDefaultAlphaBuffer": (), + "QQuickWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWindow.incubationController": (), + "QQuickWindow.isPersistentOpenGLContext": (), + "QQuickWindow.isPersistentSceneGraph": (), + "QQuickWindow.isSceneGraphInitialized": (), + "QQuickWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseGrabberItem": (), + "QQuickWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.openglContext": (), + "QQuickWindow.releaseResources": (), + "QQuickWindow.renderTarget": (), + "QQuickWindow.renderTargetId": (), + "QQuickWindow.renderTargetSize": (), + "QQuickWindow.resetOpenGLState": (), + "QQuickWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWindow.scheduleRenderJob": ('PySide2.QtCore.QRunnable', 'PySide2.QtQuick.QQuickWindow.RenderStage'), + "QQuickWindow.sendEvent": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickWindow.setClearBeforeRendering": ('bool',), + "QQuickWindow.setColor": ('PySide2.QtGui.QColor',), + "QQuickWindow.setDefaultAlphaBuffer": ('bool',), + "QQuickWindow.setPersistentOpenGLContext": ('bool',), + "QQuickWindow.setPersistentSceneGraph": ('bool',), + "QQuickWindow.setRenderTarget": [('PySide2.QtGui.QOpenGLFramebufferObject',), ('int', 'PySide2.QtCore.QSize')], + "QQuickWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWindow.update": (), + "QQuickWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtQuick.QSGAbstractRenderer: + "QSGAbstractRenderer.__init__": ('PySide2.QtCore.QObject',), + "QSGAbstractRenderer.clearColor": (), + "QSGAbstractRenderer.clearMode": (), + "QSGAbstractRenderer.deviceRect": (), + "QSGAbstractRenderer.nodeChanged": ('PySide2.QtQuick.QSGNode', 'DirtyState'), + "QSGAbstractRenderer.projectionMatrix": (), + "QSGAbstractRenderer.renderScene": ('int',), + "QSGAbstractRenderer.setClearColor": ('PySide2.QtGui.QColor',), + "QSGAbstractRenderer.setClearMode": ('ClearMode',), + "QSGAbstractRenderer.setDeviceRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.setProjectionMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGAbstractRenderer.setProjectionMatrixToRect": ('PySide2.QtCore.QRectF',), + "QSGAbstractRenderer.setViewportRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.viewportRect": (), + + # class PySide2.QtQuick.QSGBasicGeometryNode: + "QSGBasicGeometryNode.__init__": ('PySide2.QtQuick.QSGNode.NodeType',), + "QSGBasicGeometryNode.clipList": (), + "QSGBasicGeometryNode.geometry": [], + "QSGBasicGeometryNode.matrix": (), + "QSGBasicGeometryNode.setGeometry": ('PySide2.QtQuick.QSGGeometry',), + + # class PySide2.QtQuick.QSGClipNode: + "QSGClipNode.__init__": (), + "QSGClipNode.clipRect": (), + "QSGClipNode.isRectangular": (), + "QSGClipNode.setClipRect": ('PySide2.QtCore.QRectF',), + "QSGClipNode.setIsRectangular": ('bool',), + + # class PySide2.QtQuick.QSGDynamicTexture: + "QSGDynamicTexture.__init__": (), + "QSGDynamicTexture.updateTexture": (), + + # class PySide2.QtQuick.QSGEngine: + "QSGEngine.__init__": ('PySide2.QtCore.QObject',), + "QSGEngine.createRenderer": (), + "QSGEngine.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'CreateTextureOptions'), + "QSGEngine.createTextureFromImage": ('PySide2.QtGui.QImage', 'CreateTextureOptions'), + "QSGEngine.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QSGEngine.invalidate": (), + + # class PySide2.QtQuick.QSGGeometry: + "QSGGeometry.__init__": ('PySide2.QtQuick.QSGGeometry.AttributeSet', 'int', 'int', 'int'), + "QSGGeometry.allocate": ('int', 'int'), + "QSGGeometry.attributeCount": (), + "QSGGeometry.attributes": (), + "QSGGeometry.defaultAttributes_ColoredPoint2D": (), + "QSGGeometry.defaultAttributes_Point2D": (), + "QSGGeometry.defaultAttributes_TexturedPoint2D": (), + "QSGGeometry.indexCount": (), + "QSGGeometry.indexData": [], + "QSGGeometry.indexDataAsUInt": [], + "QSGGeometry.indexDataAsUShort": [], + "QSGGeometry.indexDataPattern": (), + "QSGGeometry.indexType": (), + "QSGGeometry.lineWidth": (), + "QSGGeometry.markIndexDataDirty": (), + "QSGGeometry.markVertexDataDirty": (), + "QSGGeometry.setIndexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.setLineWidth": ('float',), + "QSGGeometry.setVertexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.sizeOfIndex": (), + "QSGGeometry.sizeOfVertex": (), + "QSGGeometry.updateRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateTexturedRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QSGGeometry.vertexCount": (), + "QSGGeometry.vertexData": [], + "QSGGeometry.vertexDataAsColoredPoint2D": [], + "QSGGeometry.vertexDataAsPoint2D": [], + "QSGGeometry.vertexDataAsTexturedPoint2D": [], + "QSGGeometry.vertexDataPattern": (), + + # class PySide2.QtQuick.QSGGeometryNode: + "QSGGeometryNode.__init__": (), + "QSGGeometryNode.inheritedOpacity": (), + "QSGGeometryNode.renderOrder": (), + "QSGGeometryNode.setInheritedOpacity": ('float',), + "QSGGeometryNode.setRenderOrder": ('int',), + + # class PySide2.QtQuick.QSGMaterialType: + "QSGMaterialType.__init__": (), + + # class PySide2.QtQuick.QSGNode: + "QSGNode.__init__": [(), ('PySide2.QtQuick.QSGNode.NodeType',)], + "QSGNode.appendChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.childAtIndex": ('int',), + "QSGNode.childCount": (), + "QSGNode.clearDirty": (), + "QSGNode.dirtyState": (), + "QSGNode.firstChild": (), + "QSGNode.flags": (), + "QSGNode.insertChildNodeAfter": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.insertChildNodeBefore": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.isSubtreeBlocked": (), + "QSGNode.lastChild": (), + "QSGNode.markDirty": ('DirtyState',), + "QSGNode.nextSibling": (), + "QSGNode.parent": (), + "QSGNode.prependChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.preprocess": (), + "QSGNode.previousSibling": (), + "QSGNode.removeAllChildNodes": (), + "QSGNode.removeChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.reparentChildNodesTo": ('PySide2.QtQuick.QSGNode',), + "QSGNode.setFlag": ('PySide2.QtQuick.QSGNode.Flag', 'bool'), + "QSGNode.setFlags": ('Flags', 'bool'), + "QSGNode.type": (), + + # class PySide2.QtQuick.QSGOpacityNode: + "QSGOpacityNode.__init__": (), + "QSGOpacityNode.combinedOpacity": (), + "QSGOpacityNode.isSubtreeBlocked": (), + "QSGOpacityNode.opacity": (), + "QSGOpacityNode.setCombinedOpacity": ('float',), + "QSGOpacityNode.setOpacity": ('float',), + + # class PySide2.QtQuick.QSGSimpleRectNode: + "QSGSimpleRectNode.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor')], + "QSGSimpleRectNode.color": (), + "QSGSimpleRectNode.rect": (), + "QSGSimpleRectNode.setColor": ('PySide2.QtGui.QColor',), + "QSGSimpleRectNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + + # class PySide2.QtQuick.QSGSimpleTextureNode: + "QSGSimpleTextureNode.__init__": (), + "QSGSimpleTextureNode.filtering": (), + "QSGSimpleTextureNode.ownsTexture": (), + "QSGSimpleTextureNode.rect": (), + "QSGSimpleTextureNode.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGSimpleTextureNode.setOwnsTexture": ('bool',), + "QSGSimpleTextureNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setSourceRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setTexture": ('PySide2.QtQuick.QSGTexture',), + "QSGSimpleTextureNode.setTextureCoordinatesTransform": ('TextureCoordinatesTransformMode',), + "QSGSimpleTextureNode.sourceRect": (), + "QSGSimpleTextureNode.texture": (), + "QSGSimpleTextureNode.textureCoordinatesTransform": (), + + # class PySide2.QtQuick.QSGTexture: + "QSGTexture.__init__": (), + "QSGTexture.bind": (), + "QSGTexture.convertToNormalizedSourceRect": ('PySide2.QtCore.QRectF',), + "QSGTexture.filtering": (), + "QSGTexture.hasAlphaChannel": (), + "QSGTexture.hasMipmaps": (), + "QSGTexture.horizontalWrapMode": (), + "QSGTexture.isAtlasTexture": (), + "QSGTexture.mipmapFiltering": (), + "QSGTexture.normalizedTextureSubRect": (), + "QSGTexture.removedFromAtlas": (), + "QSGTexture.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setHorizontalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.setMipmapFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setVerticalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.textureId": (), + "QSGTexture.textureSize": (), + "QSGTexture.updateBindOptions": ('bool',), + "QSGTexture.verticalWrapMode": (), + + # class PySide2.QtQuick.QSGTextureProvider: + "QSGTextureProvider.__init__": (), + "QSGTextureProvider.texture": (), + + # class PySide2.QtQuick.QSGTransformNode: + "QSGTransformNode.__init__": (), + "QSGTransformNode.combinedMatrix": (), + "QSGTransformNode.matrix": (), + "QSGTransformNode.setCombinedMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGTransformNode.setMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSharedPointer: + "QSharedPointer.__copy__": (), + "QSharedPointer.data": (), + }) + +# Module PySide2.QtQuickWidgets +if "PySide2.QtQuickWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtQuickWidgets.QQuickWidget: + "QQuickWidget.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QQuickWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickWidget.engine": (), + "QQuickWidget.errors": (), + "QQuickWidget.event": ('PySide2.QtCore.QEvent',), + "QQuickWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.format": (), + "QQuickWidget.grabFramebuffer": (), + "QQuickWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWidget.initialSize": (), + "QQuickWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.quickWindow": (), + "QQuickWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWidget.resizeMode": (), + "QQuickWidget.rootContext": (), + "QQuickWidget.rootObject": (), + "QQuickWidget.setClearColor": ('PySide2.QtGui.QColor',), + "QQuickWidget.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QQuickWidget.setResizeMode": ('PySide2.QtQuickWidgets.QQuickWidget.ResizeMode',), + "QQuickWidget.setSource": ('PySide2.QtCore.QUrl',), + "QQuickWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWidget.sizeHint": (), + "QQuickWidget.source": (), + "QQuickWidget.status": (), + "QQuickWidget.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QQuickWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + }) + +# Module PySide2.QtSvg +if "PySide2.QtSvg" in sys.modules: + dict.update({ + + # class PySide2.QtSvg.QGraphicsSvgItem: + "QGraphicsSvgItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSvgItem.boundingRect": (), + "QGraphicsSvgItem.elementId": (), + "QGraphicsSvgItem.isCachingEnabled": (), + "QGraphicsSvgItem.maximumCacheSize": (), + "QGraphicsSvgItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSvgItem.renderer": (), + "QGraphicsSvgItem.setCachingEnabled": ('bool',), + "QGraphicsSvgItem.setElementId": ('str',), + "QGraphicsSvgItem.setMaximumCacheSize": ('PySide2.QtCore.QSize',), + "QGraphicsSvgItem.setSharedRenderer": ('PySide2.QtSvg.QSvgRenderer',), + "QGraphicsSvgItem.type": (), + + # class PySide2.QtSvg.QSvgGenerator: + "QSvgGenerator.__init__": (), + "QSvgGenerator.description": (), + "QSvgGenerator.fileName": (), + "QSvgGenerator.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QSvgGenerator.outputDevice": (), + "QSvgGenerator.paintEngine": (), + "QSvgGenerator.resolution": (), + "QSvgGenerator.setDescription": ('str',), + "QSvgGenerator.setFileName": ('str',), + "QSvgGenerator.setOutputDevice": ('PySide2.QtCore.QIODevice',), + "QSvgGenerator.setResolution": ('int',), + "QSvgGenerator.setSize": ('PySide2.QtCore.QSize',), + "QSvgGenerator.setTitle": ('str',), + "QSvgGenerator.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgGenerator.size": (), + "QSvgGenerator.title": (), + "QSvgGenerator.viewBox": (), + "QSvgGenerator.viewBoxF": (), + + # class PySide2.QtSvg.QSvgRenderer: + "QSvgRenderer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QXmlStreamReader', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QSvgRenderer.animated": (), + "QSvgRenderer.animationDuration": (), + "QSvgRenderer.boundsOnElement": ('str',), + "QSvgRenderer.currentFrame": (), + "QSvgRenderer.defaultSize": (), + "QSvgRenderer.elementExists": ('str',), + "QSvgRenderer.framesPerSecond": (), + "QSvgRenderer.isValid": (), + "QSvgRenderer.load": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QXmlStreamReader',), ('str',)], + "QSvgRenderer.matrixForElement": ('str',), + "QSvgRenderer.render": [('PySide2.QtGui.QPainter',), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), ('PySide2.QtGui.QPainter', 'str', 'PySide2.QtCore.QRectF')], + "QSvgRenderer.setCurrentFrame": ('int',), + "QSvgRenderer.setFramesPerSecond": ('int',), + "QSvgRenderer.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgRenderer.viewBox": (), + "QSvgRenderer.viewBoxF": (), + + # class PySide2.QtSvg.QSvgWidget: + "QSvgWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QSvgWidget.load": [('PySide2.QtCore.QByteArray',), ('str',)], + "QSvgWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSvgWidget.renderer": (), + "QSvgWidget.sizeHint": (), + }) + +# Module PySide2.QtUiTools +if "PySide2.QtUiTools" in sys.modules: + dict.update({ + + # class PySide2.QtUiTools.QUiLoader: + "QUiLoader.__init__": ('PySide2.QtCore.QObject',), + "QUiLoader.addPluginPath": ('str',), + "QUiLoader.availableLayouts": (), + "QUiLoader.availableWidgets": (), + "QUiLoader.clearPluginPaths": (), + "QUiLoader.createAction": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createActionGroup": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createLayout": ('str', 'PySide2.QtCore.QObject', 'str'), + "QUiLoader.createWidget": ('str', 'PySide2.QtWidgets.QWidget', 'str'), + "QUiLoader.errorString": (), + "QUiLoader.isLanguageChangeEnabled": (), + "QUiLoader.isTranslationEnabled": (), + "QUiLoader.load": [('PySide2.QtCore.QIODevice', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QWidget')], + "QUiLoader.pluginPaths": (), + "QUiLoader.registerCustomWidget": ('object',), + "QUiLoader.setLanguageChangeEnabled": ('bool',), + "QUiLoader.setTranslationEnabled": ('bool',), + "QUiLoader.setWorkingDirectory": ('PySide2.QtCore.QDir',), + "QUiLoader.workingDirectory": (), + }) + +# Module PySide2.QtWebChannel +if "PySide2.QtWebChannel" in sys.modules: + dict.update({ + + # class PySide2.QtWebChannel.QWebChannel: + "QWebChannel.__init__": ('PySide2.QtCore.QObject',), + "QWebChannel.blockUpdates": (), + "QWebChannel.connectTo": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.deregisterObject": ('PySide2.QtCore.QObject',), + "QWebChannel.disconnectFrom": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.registerObject": ('str', 'PySide2.QtCore.QObject'), + "QWebChannel.registerObjects": ('dict',), + "QWebChannel.registeredObjects": (), + "QWebChannel.setBlockUpdates": ('bool',), + + # class PySide2.QtWebChannel.QWebChannelAbstractTransport: + "QWebChannelAbstractTransport.__init__": ('PySide2.QtCore.QObject',), + "QWebChannelAbstractTransport.sendMessage": ('dict',), + }) + +# Module PySide2.QtWebEngineWidgets +if "PySide2.QtWebEngineWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWebEngineWidgets.QWebEngineCertificateError: + "QWebEngineCertificateError.__init__": ('int', 'PySide2.QtCore.QUrl', 'bool', 'str'), + "QWebEngineCertificateError.error": (), + "QWebEngineCertificateError.errorDescription": (), + "QWebEngineCertificateError.isOverridable": (), + "QWebEngineCertificateError.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineDownloadItem: + "QWebEngineDownloadItem.mimeType": (), + "QWebEngineDownloadItem.accept": (), + "QWebEngineDownloadItem.cancel": (), + "QWebEngineDownloadItem.id": (), + "QWebEngineDownloadItem.isFinished": (), + "QWebEngineDownloadItem.path": (), + "QWebEngineDownloadItem.receivedBytes": (), + "QWebEngineDownloadItem.setPath": ('str',), + "QWebEngineDownloadItem.state": (), + "QWebEngineDownloadItem.totalBytes": (), + "QWebEngineDownloadItem.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineHistoryItem: + "QWebEngineHistoryItem.__init__": ('PySide2.QtWebEngineWidgets.QWebEngineHistoryItem',), + "QWebEngineHistoryItem.__copy__": (), + "QWebEngineHistoryItem.iconUrl": (), + "QWebEngineHistoryItem.isValid": (), + "QWebEngineHistoryItem.lastVisited": (), + "QWebEngineHistoryItem.originalUrl": (), + "QWebEngineHistoryItem.swap": ('PySide2.QtWebEngineWidgets.QWebEngineHistoryItem',), + "QWebEngineHistoryItem.title": (), + "QWebEngineHistoryItem.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEnginePage: + "QWebEnginePage.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtWebEngineWidgets.QWebEngineProfile', 'PySide2.QtCore.QObject')], + "QWebEnginePage.acceptNavigationRequest": ('PySide2.QtCore.QUrl', 'PySide2.QtWebEngineWidgets.QWebEnginePage.NavigationType', 'bool'), + "QWebEnginePage.action": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction',), + "QWebEnginePage.backgroundColor": (), + "QWebEnginePage.certificateError": ('PySide2.QtWebEngineWidgets.QWebEngineCertificateError',), + "QWebEnginePage.chooseFiles": ('PySide2.QtWebEngineWidgets.QWebEnginePage.FileSelectionMode', 'PySide2.support.signature.typing.List', 'PySide2.support.signature.typing.List'), + "QWebEnginePage.createStandardContextMenu": (), + "QWebEnginePage.createWindow": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebWindowType',), + "QWebEnginePage.event": ('PySide2.QtCore.QEvent',), + "QWebEnginePage.findText": ('str', 'FindFlags'), + "QWebEnginePage.hasSelection": (), + "QWebEnginePage.iconUrl": (), + "QWebEnginePage.javaScriptAlert": ('PySide2.QtCore.QUrl', 'str'), + "QWebEnginePage.javaScriptConfirm": ('PySide2.QtCore.QUrl', 'str'), + "QWebEnginePage.javaScriptConsoleMessage": ('PySide2.QtWebEngineWidgets.QWebEnginePage.JavaScriptConsoleMessageLevel', 'str', 'int', 'str'), + "QWebEnginePage.javaScriptPrompt": ('PySide2.QtCore.QUrl', 'str', 'str', 'str'), + "QWebEnginePage.load": ('PySide2.QtCore.QUrl',), + "QWebEnginePage.profile": (), + "QWebEnginePage.requestedUrl": (), + "QWebEnginePage.runJavaScript": ('str',), + "QWebEnginePage.selectedText": (), + "QWebEnginePage.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QWebEnginePage.setContent": ('PySide2.QtCore.QByteArray', 'str', 'PySide2.QtCore.QUrl'), + "QWebEnginePage.setFeaturePermission": ('PySide2.QtCore.QUrl', 'PySide2.QtWebEngineWidgets.QWebEnginePage.Feature', 'PySide2.QtWebEngineWidgets.QWebEnginePage.PermissionPolicy'), + "QWebEnginePage.setHtml": ('str', 'PySide2.QtCore.QUrl'), + "QWebEnginePage.setUrl": ('PySide2.QtCore.QUrl',), + "QWebEnginePage.setView": ('PySide2.QtWidgets.QWidget',), + "QWebEnginePage.setWebChannel": ('PySide2.QtWebChannel.QWebChannel',), + "QWebEnginePage.setZoomFactor": ('float',), + "QWebEnginePage.title": (), + "QWebEnginePage.triggerAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction', 'bool'), + "QWebEnginePage.url": (), + "QWebEnginePage.view": (), + "QWebEnginePage.webChannel": (), + "QWebEnginePage.zoomFactor": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineProfile: + "QWebEngineProfile.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QWebEngineProfile.cachePath": (), + "QWebEngineProfile.clearAllVisitedLinks": (), + "QWebEngineProfile.clearVisitedLinks": ('list',), + "QWebEngineProfile.defaultProfile": (), + "QWebEngineProfile.httpAcceptLanguage": (), + "QWebEngineProfile.httpCacheMaximumSize": (), + "QWebEngineProfile.httpCacheType": (), + "QWebEngineProfile.httpUserAgent": (), + "QWebEngineProfile.isOffTheRecord": (), + "QWebEngineProfile.persistentCookiesPolicy": (), + "QWebEngineProfile.persistentStoragePath": (), + "QWebEngineProfile.removeAllUrlSchemeHandlers": (), + "QWebEngineProfile.removeUrlScheme": ('PySide2.QtCore.QByteArray',), + "QWebEngineProfile.setCachePath": ('str',), + "QWebEngineProfile.setHttpAcceptLanguage": ('str',), + "QWebEngineProfile.setHttpCacheMaximumSize": ('int',), + "QWebEngineProfile.setHttpCacheType": ('PySide2.QtWebEngineWidgets.QWebEngineProfile.HttpCacheType',), + "QWebEngineProfile.setHttpUserAgent": ('str',), + "QWebEngineProfile.setPersistentCookiesPolicy": ('PySide2.QtWebEngineWidgets.QWebEngineProfile.PersistentCookiesPolicy',), + "QWebEngineProfile.setPersistentStoragePath": ('str',), + "QWebEngineProfile.storageName": (), + "QWebEngineProfile.visitedLinksContainsUrl": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtWebEngineWidgets.QWebEngineScript: + "QWebEngineScript.__init__": [(), ('PySide2.QtWebEngineWidgets.QWebEngineScript',)], + "QWebEngineScript.__copy__": (), + "QWebEngineScript.injectionPoint": (), + "QWebEngineScript.isNull": (), + "QWebEngineScript.name": (), + "QWebEngineScript.runsOnSubFrames": (), + "QWebEngineScript.setInjectionPoint": ('PySide2.QtWebEngineWidgets.QWebEngineScript.InjectionPoint',), + "QWebEngineScript.setName": ('str',), + "QWebEngineScript.setRunsOnSubFrames": ('bool',), + "QWebEngineScript.setSourceCode": ('str',), + "QWebEngineScript.setWorldId": ('int',), + "QWebEngineScript.sourceCode": (), + "QWebEngineScript.swap": ('PySide2.QtWebEngineWidgets.QWebEngineScript',), + "QWebEngineScript.worldId": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineView: + "QWebEngineView.__init__": ('PySide2.QtWidgets.QWidget',), + "QWebEngineView.back": (), + "QWebEngineView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWebEngineView.createWindow": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebWindowType',), + "QWebEngineView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWebEngineView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWebEngineView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWebEngineView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWebEngineView.event": ('PySide2.QtCore.QEvent',), + "QWebEngineView.findText": ('str', 'FindFlags'), + "QWebEngineView.forward": (), + "QWebEngineView.hasSelection": (), + "QWebEngineView.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWebEngineView.iconUrl": (), + "QWebEngineView.load": ('PySide2.QtCore.QUrl',), + "QWebEngineView.page": (), + "QWebEngineView.pageAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction',), + "QWebEngineView.reload": (), + "QWebEngineView.selectedText": (), + "QWebEngineView.setContent": ('PySide2.QtCore.QByteArray', 'str', 'PySide2.QtCore.QUrl'), + "QWebEngineView.setHtml": ('str', 'PySide2.QtCore.QUrl'), + "QWebEngineView.setPage": ('PySide2.QtWebEngineWidgets.QWebEnginePage',), + "QWebEngineView.setUrl": ('PySide2.QtCore.QUrl',), + "QWebEngineView.setZoomFactor": ('float',), + "QWebEngineView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWebEngineView.sizeHint": (), + "QWebEngineView.stop": (), + "QWebEngineView.title": (), + "QWebEngineView.triggerPageAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction', 'bool'), + "QWebEngineView.url": (), + "QWebEngineView.zoomFactor": (), + }) + +# Module PySide2.QtWebSockets +if "PySide2.QtWebSockets" in sys.modules: + dict.update({ + + # class PySide2.QtWebSockets.QMaskGenerator: + "QMaskGenerator.__init__": ('PySide2.QtCore.QObject',), + "QMaskGenerator.nextMask": (), + "QMaskGenerator.seed": (), + + # class PySide2.QtWebSockets.QWebSocket: + "QWebSocket.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketProtocol.Version', 'PySide2.QtCore.QObject'), + "QWebSocket.abort": (), + "QWebSocket.close": ('PySide2.QtWebSockets.QWebSocketProtocol.CloseCode', 'str'), + "QWebSocket.closeCode": (), + "QWebSocket.closeReason": (), + "QWebSocket.errorString": (), + "QWebSocket.flush": (), + "QWebSocket.isValid": (), + "QWebSocket.localAddress": (), + "QWebSocket.localPort": (), + "QWebSocket.maskGenerator": (), + "QWebSocket.open": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QWebSocket.origin": (), + "QWebSocket.pauseMode": (), + "QWebSocket.peerAddress": (), + "QWebSocket.peerName": (), + "QWebSocket.peerPort": (), + "QWebSocket.ping": ('PySide2.QtCore.QByteArray',), + "QWebSocket.proxy": (), + "QWebSocket.readBufferSize": (), + "QWebSocket.request": (), + "QWebSocket.requestUrl": (), + "QWebSocket.resourceName": (), + "QWebSocket.resume": (), + "QWebSocket.sendBinaryMessage": ('PySide2.QtCore.QByteArray',), + "QWebSocket.sendTextMessage": ('str',), + "QWebSocket.setMaskGenerator": ('PySide2.QtWebSockets.QMaskGenerator',), + "QWebSocket.setPauseMode": ('PauseModes',), + "QWebSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocket.setReadBufferSize": ('int',), + "QWebSocket.state": (), + "QWebSocket.version": (), + + # class PySide2.QtWebSockets.QWebSocketCorsAuthenticator: + "QWebSocketCorsAuthenticator.__init__": [('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), ('str',)], + "QWebSocketCorsAuthenticator.allowed": (), + "QWebSocketCorsAuthenticator.origin": (), + "QWebSocketCorsAuthenticator.setAllowed": ('bool',), + "QWebSocketCorsAuthenticator.swap": ('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), + + # class PySide2.QtWebSockets.QWebSocketProtocol: + + # class PySide2.QtWebSockets.QWebSocketServer: + "QWebSocketServer.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketServer.SslMode', 'PySide2.QtCore.QObject'), + "QWebSocketServer.close": (), + "QWebSocketServer.error": (), + "QWebSocketServer.errorString": (), + "QWebSocketServer.hasPendingConnections": (), + "QWebSocketServer.isListening": (), + "QWebSocketServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QWebSocketServer.maxPendingConnections": (), + "QWebSocketServer.nextPendingConnection": (), + "QWebSocketServer.pauseAccepting": (), + "QWebSocketServer.proxy": (), + "QWebSocketServer.resumeAccepting": (), + "QWebSocketServer.secureMode": (), + "QWebSocketServer.serverAddress": (), + "QWebSocketServer.serverName": (), + "QWebSocketServer.serverPort": (), + "QWebSocketServer.serverUrl": (), + "QWebSocketServer.setMaxPendingConnections": ('int',), + "QWebSocketServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocketServer.setServerName": ('str',), + "QWebSocketServer.setSocketDescriptor": ('int',), + "QWebSocketServer.socketDescriptor": (), + "QWebSocketServer.supportedVersions": (), + }) +# eof diff --git a/sources/pyside2/tests/registry/exists_win32_5_9_4_ci.py b/sources/pyside2/tests/registry/exists_win32_5_9_4_ci.py new file mode 100644 index 0000000..adf8538 --- /dev/null +++ b/sources/pyside2/tests/registry/exists_win32_5_9_4_ci.py @@ -0,0 +1,16652 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" +This file contains the simplified signatures for all functions in PySide +for module 'exists_win32_5_9_4_ci'. There are no default values, no variable +names and no self parameter. Only types are present after simplification. +The functions 'next' resp. '__next__' are removed +to make the output identical for Python 2 and 3. +""" + +import sys + +dict = {} + +# Module PySide2.QtCore +if "PySide2.QtCore" in sys.modules: + dict.update({ + + # class PySide2.QtCore.ClassInfo: + + # class PySide2.QtCore.MetaFunction: + + # class PySide2.QtCore.Property: + + # class PySide2.QtCore.QAbstractAnimation: + "QAbstractAnimation.__init__": ('PySide2.QtCore.QObject',), + "QAbstractAnimation.currentLoop": (), + "QAbstractAnimation.currentLoopTime": (), + "QAbstractAnimation.currentTime": (), + "QAbstractAnimation.direction": (), + "QAbstractAnimation.duration": (), + "QAbstractAnimation.event": ('PySide2.QtCore.QEvent',), + "QAbstractAnimation.group": (), + "QAbstractAnimation.loopCount": (), + "QAbstractAnimation.pause": (), + "QAbstractAnimation.resume": (), + "QAbstractAnimation.setCurrentTime": ('int',), + "QAbstractAnimation.setDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.setLoopCount": ('int',), + "QAbstractAnimation.setPaused": ('bool',), + "QAbstractAnimation.start": ('PySide2.QtCore.QAbstractAnimation.DeletionPolicy',), + "QAbstractAnimation.state": (), + "QAbstractAnimation.stop": (), + "QAbstractAnimation.totalDuration": (), + "QAbstractAnimation.updateCurrentTime": ('int',), + "QAbstractAnimation.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QAbstractAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QAbstractEventDispatcher: + "QAbstractEventDispatcher.__init__": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.closingDown": (), + "QAbstractEventDispatcher.flush": (), + "QAbstractEventDispatcher.hasPendingEvents": (), + "QAbstractEventDispatcher.instance": ('PySide2.QtCore.QThread',), + "QAbstractEventDispatcher.interrupt": (), + "QAbstractEventDispatcher.processEvents": ('ProcessEventsFlags',), + "QAbstractEventDispatcher.registerEventNotifier": ('PySide2.QtCore.QWinEventNotifier',), + "QAbstractEventDispatcher.registerSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.registerTimer": [('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject'), ('int', 'int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QAbstractEventDispatcher.registeredTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.remainingTime": ('int',), + "QAbstractEventDispatcher.startingUp": (), + "QAbstractEventDispatcher.unregisterEventNotifier": ('PySide2.QtCore.QWinEventNotifier',), + "QAbstractEventDispatcher.unregisterSocketNotifier": ('PySide2.QtCore.QSocketNotifier',), + "QAbstractEventDispatcher.unregisterTimer": ('int',), + "QAbstractEventDispatcher.unregisterTimers": ('PySide2.QtCore.QObject',), + "QAbstractEventDispatcher.wakeUp": (), + + # class PySide2.QtCore.QAbstractItemModel: + "QAbstractItemModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginMoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginMoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemModel.beginResetModel": (), + "QAbstractItemModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.changePersistentIndex": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.changePersistentIndexList": ('List[int]', 'List[int]'), + "QAbstractItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object')], + "QAbstractItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.decodeData": ('int', 'int', 'PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.encodeData": ('List[int]', 'PySide2.QtCore.QDataStream'), + "QAbstractItemModel.endInsertColumns": (), + "QAbstractItemModel.endInsertRows": (), + "QAbstractItemModel.endMoveColumns": (), + "QAbstractItemModel.endMoveRows": (), + "QAbstractItemModel.endRemoveColumns": (), + "QAbstractItemModel.endRemoveRows": (), + "QAbstractItemModel.endResetModel": (), + "QAbstractItemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.hasIndex": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'MatchFlags'), + "QAbstractItemModel.mimeData": ('List[int]',), + "QAbstractItemModel.mimeTypes": (), + "QAbstractItemModel.moveColumn": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRow": ('PySide2.QtCore.QModelIndex', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.moveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int', 'PySide2.QtCore.QModelIndex', 'int'), + "QAbstractItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemModel.persistentIndexList": (), + "QAbstractItemModel.removeColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.resetInternalData": (), + "QAbstractItemModel.revert": (), + "QAbstractItemModel.roleNames": (), + "QAbstractItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QAbstractItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QAbstractItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractItemModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemModel.submit": (), + "QAbstractItemModel.supportedDragActions": (), + "QAbstractItemModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractListModel: + "QAbstractListModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractListModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractListModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractListModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractProxyModel: + "QAbstractProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.canDropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QAbstractProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QAbstractProxyModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QAbstractProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.mimeData": ('List[int]',), + "QAbstractProxyModel.mimeTypes": (), + "QAbstractProxyModel.resetInternalData": (), + "QAbstractProxyModel.revert": (), + "QAbstractProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QAbstractProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QAbstractProxyModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QAbstractProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QAbstractProxyModel.sourceModel": (), + "QAbstractProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QAbstractProxyModel.submit": (), + "QAbstractProxyModel.supportedDragActions": (), + "QAbstractProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QAbstractState: + "QAbstractState.__init__": ('PySide2.QtCore.QState',), + "QAbstractState.active": (), + "QAbstractState.event": ('PySide2.QtCore.QEvent',), + "QAbstractState.machine": (), + "QAbstractState.onEntry": ('PySide2.QtCore.QEvent',), + "QAbstractState.onExit": ('PySide2.QtCore.QEvent',), + "QAbstractState.parentState": (), + + # class PySide2.QtCore.QAbstractTableModel: + "QAbstractTableModel.__init__": ('PySide2.QtCore.QObject',), + "QAbstractTableModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QAbstractTableModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QAbstractTableModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractTableModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtCore.QAbstractTransition: + "QAbstractTransition.__init__": ('PySide2.QtCore.QState',), + "QAbstractTransition.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.animations": (), + "QAbstractTransition.event": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.machine": (), + "QAbstractTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QAbstractTransition.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAbstractTransition.setTargetState": ('PySide2.QtCore.QAbstractState',), + "QAbstractTransition.setTargetStates": ('list',), + "QAbstractTransition.setTransitionType": ('PySide2.QtCore.QAbstractTransition.TransitionType',), + "QAbstractTransition.sourceState": (), + "QAbstractTransition.targetState": (), + "QAbstractTransition.targetStates": (), + "QAbstractTransition.transitionType": (), + + # class PySide2.QtCore.QAnimationGroup: + "QAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QAnimationGroup.addAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.animationAt": ('int',), + "QAnimationGroup.animationCount": (), + "QAnimationGroup.clear": (), + "QAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QAnimationGroup.indexOfAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.insertAnimation": ('int', 'PySide2.QtCore.QAbstractAnimation'), + "QAnimationGroup.removeAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QAnimationGroup.takeAnimation": ('int',), + + # class PySide2.QtCore.QBasicMutex: + "QBasicMutex.__init__": (), + "QBasicMutex.isRecursive": (), + "QBasicMutex.lock": (), + "QBasicMutex.tryLock": (), + "QBasicMutex.try_lock": (), + "QBasicMutex.unlock": (), + + # class PySide2.QtCore.QBasicTimer: + "QBasicTimer.__init__": [(), ('PySide2.QtCore.QBasicTimer',)], + "QBasicTimer.__copy__": (), + "QBasicTimer.isActive": (), + "QBasicTimer.start": [('int', 'PySide2.QtCore.QObject'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject')], + "QBasicTimer.stop": (), + "QBasicTimer.timerId": (), + + # class PySide2.QtCore.QBitArray: + "QBitArray.__init__": [(), ('PySide2.QtCore.QBitArray',), ('int', 'bool')], + "QBitArray.__copy__": (), + "QBitArray.at": ('int',), + "QBitArray.clear": (), + "QBitArray.clearBit": ('int',), + "QBitArray.count": [(), ('bool',)], + "QBitArray.fill": [('bool', 'int'), ('bool', 'int', 'int')], + "QBitArray.isEmpty": (), + "QBitArray.isNull": (), + "QBitArray.resize": ('int',), + "QBitArray.setBit": [('int',), ('int', 'bool')], + "QBitArray.size": (), + "QBitArray.swap": ('PySide2.QtCore.QBitArray',), + "QBitArray.testBit": ('int',), + "QBitArray.toggleBit": ('int',), + "QBitArray.truncate": ('int',), + + # class PySide2.QtCore.QBuffer: + "QBuffer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QBuffer.atEnd": (), + "QBuffer.buffer": (), + "QBuffer.canReadLine": (), + "QBuffer.close": (), + "QBuffer.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.data": (), + "QBuffer.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QBuffer.open": ('OpenMode',), + "QBuffer.pos": (), + "QBuffer.readData": ('str', 'int'), + "QBuffer.seek": ('int',), + "QBuffer.setBuffer": ('PySide2.QtCore.QByteArray',), + "QBuffer.setData": ('PySide2.QtCore.QByteArray',), + "QBuffer.size": (), + "QBuffer.writeData": ('str', 'int'), + + # class PySide2.QtCore.QByteArray: + "QByteArray.__init__": [(), ('PySide2.QtCore.QByteArray',), ('int', 'Union[str, int]'), ('bytes',), ('bytearray',)], + "QByteArray.__copy__": (), + "QByteArray.__reduce__": (), + "QByteArray.append": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',), ('int', 'Union[str, int]')], + "QByteArray.at": ('int',), + "QByteArray.capacity": (), + "QByteArray.cbegin": (), + "QByteArray.cend": (), + "QByteArray.chop": ('int',), + "QByteArray.clear": (), + "QByteArray.contains": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.count": [(), ('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.data": (), + "QByteArray.endsWith": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.fill": ('Union[str, int]', 'int'), + "QByteArray.fromBase64": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'Base64Options')], + "QByteArray.fromHex": ('PySide2.QtCore.QByteArray',), + "QByteArray.fromPercentEncoding": ('PySide2.QtCore.QByteArray', 'Union[str, int]'), + "QByteArray.fromRawData": ('str', 'int'), + "QByteArray.indexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.insert": [('int', 'PySide2.QtCore.QByteArray'), ('int', 'int', 'Union[str, int]')], + "QByteArray.isEmpty": (), + "QByteArray.isNull": (), + "QByteArray.isSharedWith": ('PySide2.QtCore.QByteArray',), + "QByteArray.lastIndexOf": ('PySide2.QtCore.QByteArray', 'int'), + "QByteArray.left": ('int',), + "QByteArray.leftJustified": ('int', 'Union[str, int]', 'bool'), + "QByteArray.length": (), + "QByteArray.mid": ('int', 'int'), + "QByteArray.number": [('float', 'Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.prepend": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',), ('int', 'Union[str, int]')], + "QByteArray.remove": ('int', 'int'), + "QByteArray.repeated": ('int',), + "QByteArray.replace": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('Union[str, int]', 'PySide2.QtCore.QByteArray'), ('Union[str, int]', 'Union[str, int]'), ('int', 'int', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QByteArray.reserve": ('int',), + "QByteArray.resize": ('int',), + "QByteArray.right": ('int',), + "QByteArray.rightJustified": ('int', 'Union[str, int]', 'bool'), + "QByteArray.setNum": [('float', 'Union[str, int]', 'int'), ('int', 'int')], + "QByteArray.setRawData": ('str', 'int'), + "QByteArray.simplified": (), + "QByteArray.size": (), + "QByteArray.split": ('Union[str, int]',), + "QByteArray.squeeze": (), + "QByteArray.startsWith": [('PySide2.QtCore.QByteArray',), ('Union[str, int]',)], + "QByteArray.swap": ('PySide2.QtCore.QByteArray',), + "QByteArray.toBase64": [(), ('Base64Options',)], + "QByteArray.toDouble": ('bool',), + "QByteArray.toFloat": ('bool',), + "QByteArray.toHex": [(), ('Union[str, int]',)], + "QByteArray.toInt": ('bool', 'int'), + "QByteArray.toLong": ('bool', 'int'), + "QByteArray.toLongLong": ('bool', 'int'), + "QByteArray.toLower": (), + "QByteArray.toPercentEncoding": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray', 'Union[str, int]'), + "QByteArray.toShort": ('bool', 'int'), + "QByteArray.toUInt": ('bool', 'int'), + "QByteArray.toULong": ('bool', 'int'), + "QByteArray.toULongLong": ('bool', 'int'), + "QByteArray.toUShort": ('bool', 'int'), + "QByteArray.toUpper": (), + "QByteArray.trimmed": (), + "QByteArray.truncate": ('int',), + + # class PySide2.QtCore.QByteArrayMatcher: + "QByteArrayMatcher.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArrayMatcher',), ('str', 'int')], + "QByteArrayMatcher.__copy__": (), + "QByteArrayMatcher.indexIn": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int', 'int')], + "QByteArrayMatcher.pattern": (), + "QByteArrayMatcher.setPattern": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QChildEvent: + "QChildEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QObject'), + "QChildEvent.added": (), + "QChildEvent.child": (), + "QChildEvent.polished": (), + "QChildEvent.removed": (), + + # class PySide2.QtCore.QCollator: + "QCollator.__init__": [('PySide2.QtCore.QCollator',), ('PySide2.QtCore.QLocale',)], + "QCollator.caseSensitivity": (), + "QCollator.compare": [('Union[str, int]', 'int', 'Union[str, int]', 'int'), ('str', 'str')], + "QCollator.ignorePunctuation": (), + "QCollator.locale": (), + "QCollator.numericMode": (), + "QCollator.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCollator.setIgnorePunctuation": ('bool',), + "QCollator.setLocale": ('PySide2.QtCore.QLocale',), + "QCollator.setNumericMode": ('bool',), + "QCollator.sortKey": ('str',), + "QCollator.swap": ('PySide2.QtCore.QCollator',), + + # class PySide2.QtCore.QCollatorSortKey: + "QCollatorSortKey.__init__": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.compare": ('PySide2.QtCore.QCollatorSortKey',), + "QCollatorSortKey.swap": ('PySide2.QtCore.QCollatorSortKey',), + + # class PySide2.QtCore.QCommandLineOption: + "QCommandLineOption.__init__": [('List[str]',), ('List[str]', 'str', 'str', 'str'), ('PySide2.QtCore.QCommandLineOption',), ('str',), ('str', 'str', 'str', 'str')], + "QCommandLineOption.defaultValues": (), + "QCommandLineOption.description": (), + "QCommandLineOption.flags": (), + "QCommandLineOption.isHidden": (), + "QCommandLineOption.names": (), + "QCommandLineOption.setDefaultValue": ('str',), + "QCommandLineOption.setDefaultValues": ('List[str]',), + "QCommandLineOption.setDescription": ('str',), + "QCommandLineOption.setFlags": ('Flags',), + "QCommandLineOption.setHidden": ('bool',), + "QCommandLineOption.setValueName": ('str',), + "QCommandLineOption.swap": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineOption.valueName": (), + + # class PySide2.QtCore.QCommandLineParser: + "QCommandLineParser.__init__": (), + "QCommandLineParser.addHelpOption": (), + "QCommandLineParser.addOption": ('PySide2.QtCore.QCommandLineOption',), + "QCommandLineParser.addOptions": ('list',), + "QCommandLineParser.addPositionalArgument": ('str', 'str', 'str'), + "QCommandLineParser.addVersionOption": (), + "QCommandLineParser.applicationDescription": (), + "QCommandLineParser.clearPositionalArguments": (), + "QCommandLineParser.errorText": (), + "QCommandLineParser.helpText": (), + "QCommandLineParser.isSet": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.optionNames": (), + "QCommandLineParser.parse": ('List[str]',), + "QCommandLineParser.positionalArguments": (), + "QCommandLineParser.process": [('List[str]',), ('PySide2.QtCore.QCoreApplication',)], + "QCommandLineParser.setApplicationDescription": ('str',), + "QCommandLineParser.setOptionsAfterPositionalArgumentsMode": ('PySide2.QtCore.QCommandLineParser.OptionsAfterPositionalArgumentsMode',), + "QCommandLineParser.setSingleDashWordOptionMode": ('PySide2.QtCore.QCommandLineParser.SingleDashWordOptionMode',), + "QCommandLineParser.showHelp": ('int',), + "QCommandLineParser.showVersion": (), + "QCommandLineParser.unknownOptionNames": (), + "QCommandLineParser.value": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + "QCommandLineParser.values": [('PySide2.QtCore.QCommandLineOption',), ('str',)], + + # class PySide2.QtCore.QCoreApplication: + "QCoreApplication.__init__": ('List[str]',), + "QCoreApplication.addLibraryPath": ('str',), + "QCoreApplication.applicationDirPath": (), + "QCoreApplication.applicationFilePath": (), + "QCoreApplication.applicationName": (), + "QCoreApplication.applicationPid": (), + "QCoreApplication.applicationVersion": (), + "QCoreApplication.arguments": (), + "QCoreApplication.closingDown": (), + "QCoreApplication.event": ('PySide2.QtCore.QEvent',), + "QCoreApplication.eventDispatcher": (), + "QCoreApplication.exec_": (), + "QCoreApplication.exit": ('int',), + "QCoreApplication.flush": (), + "QCoreApplication.hasPendingEvents": (), + "QCoreApplication.installTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.instance": (), + "QCoreApplication.isQuitLockEnabled": (), + "QCoreApplication.isSetuidAllowed": (), + "QCoreApplication.libraryPaths": (), + "QCoreApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.organizationDomain": (), + "QCoreApplication.organizationName": (), + "QCoreApplication.postEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent', 'int'), + "QCoreApplication.processEvents": [('ProcessEventsFlags',), ('ProcessEventsFlags', 'int')], + "QCoreApplication.quit": (), + "QCoreApplication.removeLibraryPath": ('str',), + "QCoreApplication.removePostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.removeTranslator": ('PySide2.QtCore.QTranslator',), + "QCoreApplication.sendEvent": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCoreApplication.sendPostedEvents": ('PySide2.QtCore.QObject', 'int'), + "QCoreApplication.setApplicationName": ('str',), + "QCoreApplication.setApplicationVersion": ('str',), + "QCoreApplication.setAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute', 'bool'), + "QCoreApplication.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QCoreApplication.setLibraryPaths": ('List[str]',), + "QCoreApplication.setOrganizationDomain": ('str',), + "QCoreApplication.setOrganizationName": ('str',), + "QCoreApplication.setQuitLockEnabled": ('bool',), + "QCoreApplication.setSetuidAllowed": ('bool',), + "QCoreApplication.startingUp": (), + "QCoreApplication.testAttribute": ('PySide2.QtCore.Qt.ApplicationAttribute',), + "QCoreApplication.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QCryptographicHash: + "QCryptographicHash.__init__": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QCryptographicHash.addData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str', 'int')], + "QCryptographicHash.hash": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QCryptographicHash.Algorithm'), + "QCryptographicHash.reset": (), + "QCryptographicHash.result": (), + + # class PySide2.QtCore.QDataStream: + "QDataStream.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QDataStream.abortTransaction": (), + "QDataStream.atEnd": (), + "QDataStream.byteOrder": (), + "QDataStream.commitTransaction": (), + "QDataStream.device": (), + "QDataStream.floatingPointPrecision": (), + "QDataStream.readBool": (), + "QDataStream.readDouble": (), + "QDataStream.readFloat": (), + "QDataStream.readInt16": (), + "QDataStream.readInt32": (), + "QDataStream.readInt64": (), + "QDataStream.readInt8": (), + "QDataStream.readQChar": (), + "QDataStream.readQString": (), + "QDataStream.readQStringList": (), + "QDataStream.readQVariant": (), + "QDataStream.readRawData": ('str', 'int'), + "QDataStream.readString": (), + "QDataStream.readUInt16": (), + "QDataStream.readUInt32": (), + "QDataStream.readUInt64": (), + "QDataStream.readUInt8": (), + "QDataStream.resetStatus": (), + "QDataStream.rollbackTransaction": (), + "QDataStream.setByteOrder": ('PySide2.QtCore.QDataStream.ByteOrder',), + "QDataStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QDataStream.setFloatingPointPrecision": ('PySide2.QtCore.QDataStream.FloatingPointPrecision',), + "QDataStream.setStatus": ('PySide2.QtCore.QDataStream.Status',), + "QDataStream.setVersion": ('int',), + "QDataStream.skipRawData": ('int',), + "QDataStream.startTransaction": (), + "QDataStream.status": (), + "QDataStream.unsetDevice": (), + "QDataStream.version": (), + "QDataStream.writeBool": ('bool',), + "QDataStream.writeDouble": ('float',), + "QDataStream.writeFloat": ('float',), + "QDataStream.writeInt16": ('int',), + "QDataStream.writeInt32": ('int',), + "QDataStream.writeInt64": ('int',), + "QDataStream.writeInt8": ('Union[str, int]',), + "QDataStream.writeQChar": ('Union[str, int]',), + "QDataStream.writeQString": ('str',), + "QDataStream.writeQStringList": ('List[str]',), + "QDataStream.writeQVariant": ('Any',), + "QDataStream.writeRawData": ('str', 'int'), + "QDataStream.writeString": ('str',), + "QDataStream.writeUInt16": ('int',), + "QDataStream.writeUInt32": ('int',), + "QDataStream.writeUInt64": ('int',), + "QDataStream.writeUInt8": ('Union[str, int]',), + + # class PySide2.QtCore.QDate: + "QDate.__init__": [(), ('PySide2.QtCore.QDate',), ('int', 'int', 'int')], + "QDate.__copy__": (), + "QDate.__reduce__": (), + "QDate.addDays": ('int',), + "QDate.addMonths": ('int',), + "QDate.addYears": ('int',), + "QDate.currentDate": (), + "QDate.day": (), + "QDate.dayOfWeek": (), + "QDate.dayOfYear": (), + "QDate.daysInMonth": (), + "QDate.daysInYear": (), + "QDate.daysTo": ('PySide2.QtCore.QDate',), + "QDate.fromJulianDay": ('int',), + "QDate.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDate.getDate": ('int', 'int', 'int'), + "QDate.isLeapYear": ('int',), + "QDate.isNull": (), + "QDate.isValid": [(), ('int', 'int', 'int')], + "QDate.longDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.longMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.month": (), + "QDate.setDate": ('int', 'int', 'int'), + "QDate.shortDayName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.shortMonthName": ('int', 'PySide2.QtCore.QDate.MonthNameType'), + "QDate.toJulianDay": (), + "QDate.toPython": (), + "QDate.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDate.weekNumber": ('int',), + "QDate.year": (), + + # class PySide2.QtCore.QDateTime: + "QDateTime.__init__": [(), ('PySide2.QtCore.QDate',), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.QTimeZone'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec'), ('PySide2.QtCore.QDate', 'PySide2.QtCore.QTime', 'PySide2.QtCore.Qt.TimeSpec', 'int'), ('PySide2.QtCore.QDateTime',), ('int', 'int', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int')], + "QDateTime.__copy__": (), + "QDateTime.__reduce__": (), + "QDateTime.addDays": ('int',), + "QDateTime.addMSecs": ('int',), + "QDateTime.addMonths": ('int',), + "QDateTime.addSecs": ('int',), + "QDateTime.addYears": ('int',), + "QDateTime.currentDateTime": (), + "QDateTime.currentDateTimeUtc": (), + "QDateTime.currentMSecsSinceEpoch": (), + "QDateTime.currentSecsSinceEpoch": (), + "QDateTime.date": (), + "QDateTime.daysTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.fromMSecsSinceEpoch": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromSecsSinceEpoch": [('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QDateTime.fromTime_t": [('int',), ('int', 'PySide2.QtCore.QTimeZone'), ('int', 'PySide2.QtCore.Qt.TimeSpec', 'int')], + "QDateTime.isDaylightTime": (), + "QDateTime.isNull": (), + "QDateTime.isValid": (), + "QDateTime.msecsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.offsetFromUtc": (), + "QDateTime.secsTo": ('PySide2.QtCore.QDateTime',), + "QDateTime.setDate": ('PySide2.QtCore.QDate',), + "QDateTime.setMSecsSinceEpoch": ('int',), + "QDateTime.setOffsetFromUtc": ('int',), + "QDateTime.setSecsSinceEpoch": ('int',), + "QDateTime.setTime": ('PySide2.QtCore.QTime',), + "QDateTime.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.setTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.setTime_t": ('int',), + "QDateTime.setUtcOffset": ('int',), + "QDateTime.swap": ('PySide2.QtCore.QDateTime',), + "QDateTime.time": (), + "QDateTime.timeSpec": (), + "QDateTime.timeZone": (), + "QDateTime.timeZoneAbbreviation": (), + "QDateTime.toLocalTime": (), + "QDateTime.toMSecsSinceEpoch": (), + "QDateTime.toOffsetFromUtc": ('int',), + "QDateTime.toPython": (), + "QDateTime.toSecsSinceEpoch": (), + "QDateTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + "QDateTime.toTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTime.toTimeZone": ('PySide2.QtCore.QTimeZone',), + "QDateTime.toTime_t": (), + "QDateTime.toUTC": (), + "QDateTime.utcOffset": (), + + # class PySide2.QtCore.QDir: + "QDir.__init__": [('PySide2.QtCore.QDir',), ('str',), ('str', 'str', 'SortFlags', 'Filters')], + "QDir.__copy__": (), + "QDir.__reduce__": (), + "QDir.absoluteFilePath": ('str',), + "QDir.absolutePath": (), + "QDir.addResourceSearchPath": ('str',), + "QDir.addSearchPath": ('str', 'str'), + "QDir.canonicalPath": (), + "QDir.cd": ('str',), + "QDir.cdUp": (), + "QDir.cleanPath": ('str',), + "QDir.count": (), + "QDir.current": (), + "QDir.currentPath": (), + "QDir.dirName": (), + "QDir.drives": (), + "QDir.entryInfoList": [('Filters', 'SortFlags'), ('List[str]', 'Filters', 'SortFlags')], + "QDir.entryList": [('Filters', 'SortFlags'), ('List[str]', 'Filters', 'SortFlags')], + "QDir.exists": [(), ('str',)], + "QDir.filePath": ('str',), + "QDir.filter": (), + "QDir.fromNativeSeparators": ('str',), + "QDir.home": (), + "QDir.homePath": (), + "QDir.isAbsolute": (), + "QDir.isAbsolutePath": ('str',), + "QDir.isEmpty": ('Filters',), + "QDir.isReadable": (), + "QDir.isRelative": (), + "QDir.isRelativePath": ('str',), + "QDir.isRoot": (), + "QDir.listSeparator": (), + "QDir.makeAbsolute": (), + "QDir.match": [('List[str]', 'str'), ('str', 'str')], + "QDir.mkdir": ('str',), + "QDir.mkpath": ('str',), + "QDir.nameFilters": (), + "QDir.nameFiltersFromString": ('str',), + "QDir.path": (), + "QDir.refresh": (), + "QDir.relativeFilePath": ('str',), + "QDir.remove": ('str',), + "QDir.removeRecursively": (), + "QDir.rename": ('str', 'str'), + "QDir.rmdir": ('str',), + "QDir.rmpath": ('str',), + "QDir.root": (), + "QDir.rootPath": (), + "QDir.searchPaths": ('str',), + "QDir.separator": (), + "QDir.setCurrent": ('str',), + "QDir.setFilter": ('Filters',), + "QDir.setNameFilters": ('List[str]',), + "QDir.setPath": ('str',), + "QDir.setSearchPaths": ('str', 'List[str]'), + "QDir.setSorting": ('SortFlags',), + "QDir.sorting": (), + "QDir.swap": ('PySide2.QtCore.QDir',), + "QDir.temp": (), + "QDir.tempPath": (), + "QDir.toNativeSeparators": ('str',), + + # class PySide2.QtCore.QDirIterator: + "QDirIterator.__init__": [('PySide2.QtCore.QDir', 'IteratorFlags'), ('str', 'Filters', 'IteratorFlags'), ('str', 'IteratorFlags'), ('str', 'List[str]', 'Filters', 'IteratorFlags')], + "QDirIterator.fileInfo": (), + "QDirIterator.fileName": (), + "QDirIterator.filePath": (), + "QDirIterator.hasNext": (), + "QDirIterator.path": (), + + # class PySide2.QtCore.QDynamicPropertyChangeEvent: + "QDynamicPropertyChangeEvent.__init__": ('PySide2.QtCore.QByteArray',), + "QDynamicPropertyChangeEvent.propertyName": (), + + # class PySide2.QtCore.QEasingCurve: + "QEasingCurve.__init__": [('PySide2.QtCore.QEasingCurve',), ('PySide2.QtCore.QEasingCurve.Type',)], + "QEasingCurve.__copy__": (), + "QEasingCurve.addCubicBezierSegment": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEasingCurve.addTCBSegment": ('PySide2.QtCore.QPointF', 'float', 'float', 'float'), + "QEasingCurve.amplitude": (), + "QEasingCurve.customType": (), + "QEasingCurve.overshoot": (), + "QEasingCurve.period": (), + "QEasingCurve.setAmplitude": ('float',), + "QEasingCurve.setCustomType": ('object',), + "QEasingCurve.setOvershoot": ('float',), + "QEasingCurve.setPeriod": ('float',), + "QEasingCurve.setType": ('PySide2.QtCore.QEasingCurve.Type',), + "QEasingCurve.swap": ('PySide2.QtCore.QEasingCurve',), + "QEasingCurve.toCubicSpline": (), + "QEasingCurve.type": (), + "QEasingCurve.valueForProgress": ('float',), + + # class PySide2.QtCore.QElapsedTimer: + "QElapsedTimer.__init__": [(), ('PySide2.QtCore.QElapsedTimer',)], + "QElapsedTimer.__copy__": (), + "QElapsedTimer.clockType": (), + "QElapsedTimer.elapsed": (), + "QElapsedTimer.hasExpired": ('int',), + "QElapsedTimer.invalidate": (), + "QElapsedTimer.isMonotonic": (), + "QElapsedTimer.isValid": (), + "QElapsedTimer.msecsSinceReference": (), + "QElapsedTimer.msecsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.nsecsElapsed": (), + "QElapsedTimer.restart": (), + "QElapsedTimer.secsTo": ('PySide2.QtCore.QElapsedTimer',), + "QElapsedTimer.start": (), + + # class PySide2.QtCore.QEvent: + "QEvent.__init__": [('PySide2.QtCore.QEvent',), ('PySide2.QtCore.QEvent.Type',)], + "QEvent.accept": (), + "QEvent.ignore": (), + "QEvent.isAccepted": (), + "QEvent.registerEventType": ('int',), + "QEvent.setAccepted": ('bool',), + "QEvent.spontaneous": (), + "QEvent.type": (), + + # class PySide2.QtCore.QEventLoop: + "QEventLoop.__init__": ('PySide2.QtCore.QObject',), + "QEventLoop.event": ('PySide2.QtCore.QEvent',), + "QEventLoop.exec_": ('ProcessEventsFlags',), + "QEventLoop.exit": ('int',), + "QEventLoop.isRunning": (), + "QEventLoop.processEvents": [('ProcessEventsFlags',), ('ProcessEventsFlags', 'int')], + "QEventLoop.quit": (), + "QEventLoop.wakeUp": (), + + # class PySide2.QtCore.QEventTransition: + "QEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QEventTransition.event": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventSource": (), + "QEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QEventTransition.eventType": (), + "QEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QEventTransition.setEventSource": ('PySide2.QtCore.QObject',), + "QEventTransition.setEventType": ('PySide2.QtCore.QEvent.Type',), + + # class PySide2.QtCore.QFactoryInterface: + "QFactoryInterface.__init__": (), + "QFactoryInterface.keys": (), + + # class PySide2.QtCore.QFile: + "QFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QFile.copy": [('str',), ('str', 'str')], + "QFile.decodeName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QFile.encodeName": ('str',), + "QFile.exists": [(), ('str',)], + "QFile.fileName": (), + "QFile.link": [('str',), ('str', 'str')], + "QFile.open": [('OpenMode',), ('int', 'OpenMode', 'FileHandleFlags')], + "QFile.permissions": [(), ('str',)], + "QFile.readLink": [(), ('str',)], + "QFile.remove": [(), ('str',)], + "QFile.rename": [('str',), ('str', 'str')], + "QFile.resize": [('int',), ('str', 'int')], + "QFile.setFileName": ('str',), + "QFile.setPermissions": [('Permissions',), ('str', 'Permissions')], + "QFile.size": (), + "QFile.symLinkTarget": [(), ('str',)], + + # class PySide2.QtCore.QFileDevice: + "QFileDevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QFileDevice.atEnd": (), + "QFileDevice.close": (), + "QFileDevice.error": (), + "QFileDevice.fileName": (), + "QFileDevice.flush": (), + "QFileDevice.handle": (), + "QFileDevice.isSequential": (), + "QFileDevice.map": ('int', 'int', 'PySide2.QtCore.QFileDevice.MemoryMapFlags'), + "QFileDevice.permissions": (), + "QFileDevice.pos": (), + "QFileDevice.readData": ('str', 'int'), + "QFileDevice.readLineData": ('str', 'int'), + "QFileDevice.resize": ('int',), + "QFileDevice.seek": ('int',), + "QFileDevice.setPermissions": ('Permissions',), + "QFileDevice.size": (), + "QFileDevice.unmap": ('Union[str, int]',), + "QFileDevice.unsetError": (), + "QFileDevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QFileInfo: + "QFileInfo.__init__": [(), ('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('PySide2.QtCore.QFileInfo',), ('str',)], + "QFileInfo.__copy__": (), + "QFileInfo.__reduce__": (), + "QFileInfo.absoluteDir": (), + "QFileInfo.absoluteFilePath": (), + "QFileInfo.absolutePath": (), + "QFileInfo.baseName": (), + "QFileInfo.bundleName": (), + "QFileInfo.caching": (), + "QFileInfo.canonicalFilePath": (), + "QFileInfo.canonicalPath": (), + "QFileInfo.completeBaseName": (), + "QFileInfo.completeSuffix": (), + "QFileInfo.created": (), + "QFileInfo.dir": (), + "QFileInfo.exists": [(), ('str',)], + "QFileInfo.fileName": (), + "QFileInfo.filePath": (), + "QFileInfo.group": (), + "QFileInfo.groupId": (), + "QFileInfo.isAbsolute": (), + "QFileInfo.isBundle": (), + "QFileInfo.isDir": (), + "QFileInfo.isExecutable": (), + "QFileInfo.isFile": (), + "QFileInfo.isHidden": (), + "QFileInfo.isNativePath": (), + "QFileInfo.isReadable": (), + "QFileInfo.isRelative": (), + "QFileInfo.isRoot": (), + "QFileInfo.isSymLink": (), + "QFileInfo.isWritable": (), + "QFileInfo.lastModified": (), + "QFileInfo.lastRead": (), + "QFileInfo.makeAbsolute": (), + "QFileInfo.owner": (), + "QFileInfo.ownerId": (), + "QFileInfo.path": (), + "QFileInfo.readLink": (), + "QFileInfo.refresh": (), + "QFileInfo.setCaching": ('bool',), + "QFileInfo.setFile": [('PySide2.QtCore.QDir', 'str'), ('PySide2.QtCore.QFile',), ('str',)], + "QFileInfo.size": (), + "QFileInfo.suffix": (), + "QFileInfo.swap": ('PySide2.QtCore.QFileInfo',), + "QFileInfo.symLinkTarget": (), + + # class PySide2.QtCore.QFileSelector: + "QFileSelector.__init__": ('PySide2.QtCore.QObject',), + "QFileSelector.allSelectors": (), + "QFileSelector.extraSelectors": (), + "QFileSelector.select": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileSelector.setExtraSelectors": ('List[str]',), + + # class PySide2.QtCore.QFileSystemWatcher: + "QFileSystemWatcher.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QFileSystemWatcher.addPath": ('str',), + "QFileSystemWatcher.addPaths": ('List[str]',), + "QFileSystemWatcher.directories": (), + "QFileSystemWatcher.files": (), + "QFileSystemWatcher.removePath": ('str',), + "QFileSystemWatcher.removePaths": ('List[str]',), + + # class PySide2.QtCore.QFinalState: + "QFinalState.__init__": ('PySide2.QtCore.QState',), + "QFinalState.event": ('PySide2.QtCore.QEvent',), + "QFinalState.onEntry": ('PySide2.QtCore.QEvent',), + "QFinalState.onExit": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtCore.QGenericArgument: + "QGenericArgument.__init__": [('PySide2.QtCore.QGenericArgument',), ('str', 'int')], + "QGenericArgument.__copy__": (), + "QGenericArgument.data": (), + "QGenericArgument.name": (), + + # class PySide2.QtCore.QGenericReturnArgument: + "QGenericReturnArgument.__init__": [('PySide2.QtCore.QGenericReturnArgument',), ('str', 'int')], + "QGenericReturnArgument.__copy__": (), + + # class PySide2.QtCore.QHistoryState: + "QHistoryState.__init__": [('PySide2.QtCore.QHistoryState.HistoryType', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QHistoryState.defaultState": (), + "QHistoryState.defaultTransition": (), + "QHistoryState.event": ('PySide2.QtCore.QEvent',), + "QHistoryState.historyType": (), + "QHistoryState.onEntry": ('PySide2.QtCore.QEvent',), + "QHistoryState.onExit": ('PySide2.QtCore.QEvent',), + "QHistoryState.setDefaultState": ('PySide2.QtCore.QAbstractState',), + "QHistoryState.setDefaultTransition": ('PySide2.QtCore.QAbstractTransition',), + "QHistoryState.setHistoryType": ('PySide2.QtCore.QHistoryState.HistoryType',), + + # class PySide2.QtCore.QIODevice: + "QIODevice.__init__": [(), ('PySide2.QtCore.QObject',)], + "QIODevice.atEnd": (), + "QIODevice.bytesAvailable": (), + "QIODevice.bytesToWrite": (), + "QIODevice.canReadLine": (), + "QIODevice.close": (), + "QIODevice.commitTransaction": (), + "QIODevice.currentReadChannel": (), + "QIODevice.currentWriteChannel": (), + "QIODevice.errorString": (), + "QIODevice.getChar": ('str',), + "QIODevice.isOpen": (), + "QIODevice.isReadable": (), + "QIODevice.isSequential": (), + "QIODevice.isTextModeEnabled": (), + "QIODevice.isTransactionStarted": (), + "QIODevice.isWritable": (), + "QIODevice.open": ('OpenMode',), + "QIODevice.openMode": (), + "QIODevice.peek": ('int',), + "QIODevice.pos": (), + "QIODevice.putChar": ('Union[str, int]',), + "QIODevice.read": ('int',), + "QIODevice.readAll": (), + "QIODevice.readChannelCount": (), + "QIODevice.readData": ('str', 'int'), + "QIODevice.readLine": ('int',), + "QIODevice.readLineData": ('str', 'int'), + "QIODevice.reset": (), + "QIODevice.rollbackTransaction": (), + "QIODevice.seek": ('int',), + "QIODevice.setCurrentReadChannel": ('int',), + "QIODevice.setCurrentWriteChannel": ('int',), + "QIODevice.setErrorString": ('str',), + "QIODevice.setOpenMode": ('OpenMode',), + "QIODevice.setTextModeEnabled": ('bool',), + "QIODevice.size": (), + "QIODevice.startTransaction": (), + "QIODevice.ungetChar": ('Union[str, int]',), + "QIODevice.waitForBytesWritten": ('int',), + "QIODevice.waitForReadyRead": ('int',), + "QIODevice.write": ('PySide2.QtCore.QByteArray',), + "QIODevice.writeChannelCount": (), + "QIODevice.writeData": ('str', 'int'), + + # class PySide2.QtCore.QItemSelection: + "QItemSelection.__init__": [(), ('PySide2.QtCore.QItemSelection',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelection.__copy__": (), + "QItemSelection.append": [('PySide2.QtCore.QItemSelectionRange',), ('list',)], + "QItemSelection.at": ('int',), + "QItemSelection.back": (), + "QItemSelection.clear": (), + "QItemSelection.constFirst": (), + "QItemSelection.constLast": (), + "QItemSelection.contains": ('PySide2.QtCore.QModelIndex',), + "QItemSelection.count": [(), ('PySide2.QtCore.QItemSelectionRange',)], + "QItemSelection.detachShared": (), + "QItemSelection.empty": (), + "QItemSelection.endsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.first": (), + "QItemSelection.fromSet": ('set',), + "QItemSelection.fromVector": ('list',), + "QItemSelection.front": (), + "QItemSelection.indexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.indexes": (), + "QItemSelection.insert": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.isEmpty": (), + "QItemSelection.isSharedWith": ('list',), + "QItemSelection.last": (), + "QItemSelection.lastIndexOf": ('PySide2.QtCore.QItemSelectionRange', 'int'), + "QItemSelection.length": (), + "QItemSelection.merge": ('PySide2.QtCore.QItemSelection', 'SelectionFlags'), + "QItemSelection.mid": ('int', 'int'), + "QItemSelection.move": ('int', 'int'), + "QItemSelection.pop_back": (), + "QItemSelection.pop_front": (), + "QItemSelection.prepend": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_back": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.push_front": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAll": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.removeAt": ('int',), + "QItemSelection.removeFirst": (), + "QItemSelection.removeLast": (), + "QItemSelection.removeOne": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.replace": ('int', 'PySide2.QtCore.QItemSelectionRange'), + "QItemSelection.reserve": ('int',), + "QItemSelection.select": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QItemSelection.setSharable": ('bool',), + "QItemSelection.size": (), + "QItemSelection.split": ('PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelectionRange', 'PySide2.QtCore.QItemSelection'), + "QItemSelection.startsWith": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelection.swap": [('int', 'int'), ('list',)], + "QItemSelection.takeAt": ('int',), + "QItemSelection.takeFirst": (), + "QItemSelection.takeLast": (), + "QItemSelection.toSet": (), + "QItemSelection.toVector": (), + "QItemSelection.value": [('int',), ('int', 'PySide2.QtCore.QItemSelectionRange')], + + # class PySide2.QtCore.QItemSelectionModel: + "QItemSelectionModel.__init__": [('PySide2.QtCore.QAbstractItemModel',), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject')], + "QItemSelectionModel.clear": (), + "QItemSelectionModel.clearCurrentIndex": (), + "QItemSelectionModel.clearSelection": (), + "QItemSelectionModel.columnIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.currentIndex": (), + "QItemSelectionModel.emitSelectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QItemSelectionModel.hasSelection": (), + "QItemSelectionModel.isColumnSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isRowSelected": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.isSelected": ('PySide2.QtCore.QModelIndex',), + "QItemSelectionModel.model": (), + "QItemSelectionModel.reset": (), + "QItemSelectionModel.rowIntersectsSelection": ('int', 'PySide2.QtCore.QModelIndex'), + "QItemSelectionModel.select": [('PySide2.QtCore.QItemSelection', 'SelectionFlags'), ('PySide2.QtCore.QModelIndex', 'SelectionFlags')], + "QItemSelectionModel.selectedColumns": ('int',), + "QItemSelectionModel.selectedIndexes": (), + "QItemSelectionModel.selectedRows": ('int',), + "QItemSelectionModel.selection": (), + "QItemSelectionModel.setCurrentIndex": ('PySide2.QtCore.QModelIndex', 'SelectionFlags'), + "QItemSelectionModel.setModel": ('PySide2.QtCore.QAbstractItemModel',), + + # class PySide2.QtCore.QItemSelectionRange: + "QItemSelectionRange.__init__": [(), ('PySide2.QtCore.QItemSelectionRange',), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.__copy__": (), + "QItemSelectionRange.bottom": (), + "QItemSelectionRange.bottomRight": (), + "QItemSelectionRange.contains": [('PySide2.QtCore.QModelIndex',), ('int', 'int', 'PySide2.QtCore.QModelIndex')], + "QItemSelectionRange.height": (), + "QItemSelectionRange.indexes": (), + "QItemSelectionRange.intersected": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.intersects": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.isEmpty": (), + "QItemSelectionRange.isValid": (), + "QItemSelectionRange.left": (), + "QItemSelectionRange.model": (), + "QItemSelectionRange.parent": (), + "QItemSelectionRange.right": (), + "QItemSelectionRange.swap": ('PySide2.QtCore.QItemSelectionRange',), + "QItemSelectionRange.top": (), + "QItemSelectionRange.topLeft": (), + "QItemSelectionRange.width": (), + + # class PySide2.QtCore.QJsonArray: + "QJsonArray.__init__": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonArray.__copy__": (), + "QJsonArray.append": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.at": ('int',), + "QJsonArray.contains": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.count": (), + "QJsonArray.empty": (), + "QJsonArray.first": (), + "QJsonArray.fromStringList": ('List[str]',), + "QJsonArray.fromVariantList": ('list',), + "QJsonArray.insert": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.isEmpty": (), + "QJsonArray.last": (), + "QJsonArray.pop_back": (), + "QJsonArray.pop_front": (), + "QJsonArray.prepend": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_back": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.push_front": ('PySide2.QtCore.QJsonValue',), + "QJsonArray.removeAt": ('int',), + "QJsonArray.removeFirst": (), + "QJsonArray.removeLast": (), + "QJsonArray.replace": ('int', 'PySide2.QtCore.QJsonValue'), + "QJsonArray.size": (), + "QJsonArray.takeAt": ('int',), + "QJsonArray.toVariantList": (), + + # class PySide2.QtCore.QJsonDocument: + "QJsonDocument.__init__": [(), ('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonDocument',), ('dict',)], + "QJsonDocument.__copy__": (), + "QJsonDocument.array": (), + "QJsonDocument.fromBinaryData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromJson": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QJsonParseError'), + "QJsonDocument.fromRawData": ('str', 'int', 'PySide2.QtCore.QJsonDocument.DataValidation'), + "QJsonDocument.fromVariant": ('Any',), + "QJsonDocument.isArray": (), + "QJsonDocument.isEmpty": (), + "QJsonDocument.isNull": (), + "QJsonDocument.isObject": (), + "QJsonDocument.object": (), + "QJsonDocument.rawData": ('int',), + "QJsonDocument.setArray": ('PySide2.QtCore.QJsonArray',), + "QJsonDocument.setObject": ('dict',), + "QJsonDocument.toBinaryData": (), + "QJsonDocument.toJson": [(), ('PySide2.QtCore.QJsonDocument.JsonFormat',)], + "QJsonDocument.toVariant": (), + + # class PySide2.QtCore.QJsonParseError: + "QJsonParseError.__init__": [(), ('PySide2.QtCore.QJsonParseError',)], + "QJsonParseError.__copy__": (), + "QJsonParseError.errorString": (), + + # class PySide2.QtCore.QJsonValue: + "QJsonValue.__init__": [('PySide2.QtCore.QJsonArray',), ('PySide2.QtCore.QJsonValue',), ('PySide2.QtCore.QJsonValue.Type',), ('bool',), ('dict',), ('float',), ('int',), ('str',)], + "QJsonValue.__copy__": (), + "QJsonValue.fromVariant": ('Any',), + "QJsonValue.isArray": (), + "QJsonValue.isBool": (), + "QJsonValue.isDouble": (), + "QJsonValue.isNull": (), + "QJsonValue.isObject": (), + "QJsonValue.isString": (), + "QJsonValue.isUndefined": (), + "QJsonValue.toArray": [(), ('PySide2.QtCore.QJsonArray',)], + "QJsonValue.toBool": ('bool',), + "QJsonValue.toDouble": ('float',), + "QJsonValue.toInt": ('int',), + "QJsonValue.toObject": [(), ('dict',)], + "QJsonValue.toString": [(), ('str',)], + "QJsonValue.toVariant": (), + "QJsonValue.type": (), + + # class PySide2.QtCore.QLibraryInfo: + "QLibraryInfo.build": (), + "QLibraryInfo.buildDate": (), + "QLibraryInfo.isDebugBuild": (), + "QLibraryInfo.licensedProducts": (), + "QLibraryInfo.licensee": (), + "QLibraryInfo.location": ('PySide2.QtCore.QLibraryInfo.LibraryLocation',), + "QLibraryInfo.platformPluginArguments": ('str',), + "QLibraryInfo.version": (), + + # class PySide2.QtCore.QLine: + "QLine.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('int', 'int', 'int', 'int')], + "QLine.__copy__": (), + "QLine.__reduce__": (), + "QLine.center": (), + "QLine.dx": (), + "QLine.dy": (), + "QLine.isNull": (), + "QLine.p1": (), + "QLine.p2": (), + "QLine.setLine": ('int', 'int', 'int', 'int'), + "QLine.setP1": ('PySide2.QtCore.QPoint',), + "QLine.setP2": ('PySide2.QtCore.QPoint',), + "QLine.setPoints": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QLine.toTuple": (), + "QLine.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QLine.x1": (), + "QLine.x2": (), + "QLine.y1": (), + "QLine.y2": (), + + # class PySide2.QtCore.QLineF: + "QLineF.__init__": [(), ('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QLineF.__copy__": (), + "QLineF.__reduce__": (), + "QLineF.angle": [(), ('PySide2.QtCore.QLineF',)], + "QLineF.angleTo": ('PySide2.QtCore.QLineF',), + "QLineF.center": (), + "QLineF.dx": (), + "QLineF.dy": (), + "QLineF.fromPolar": ('float', 'float'), + "QLineF.intersect": ('PySide2.QtCore.QLineF', 'PySide2.QtCore.QPointF'), + "QLineF.isNull": (), + "QLineF.length": (), + "QLineF.normalVector": (), + "QLineF.p1": (), + "QLineF.p2": (), + "QLineF.pointAt": ('float',), + "QLineF.setAngle": ('float',), + "QLineF.setLength": ('float',), + "QLineF.setLine": ('float', 'float', 'float', 'float'), + "QLineF.setP1": ('PySide2.QtCore.QPointF',), + "QLineF.setP2": ('PySide2.QtCore.QPointF',), + "QLineF.setPoints": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QLineF.toLine": (), + "QLineF.toTuple": (), + "QLineF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLineF.unitVector": (), + "QLineF.x1": (), + "QLineF.x2": (), + "QLineF.y1": (), + "QLineF.y2": (), + + # class PySide2.QtCore.QLocale: + "QLocale.__init__": [(), ('PySide2.QtCore.QLocale',), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Country'), ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), ('str',)], + "QLocale.__copy__": (), + "QLocale.amText": (), + "QLocale.bcp47Name": (), + "QLocale.c": (), + "QLocale.countriesForLanguage": ('PySide2.QtCore.QLocale.Language',), + "QLocale.country": (), + "QLocale.countryToString": ('PySide2.QtCore.QLocale.Country',), + "QLocale.createSeparatedList": ('List[str]',), + "QLocale.currencySymbol": ('PySide2.QtCore.QLocale.CurrencySymbolFormat',), + "QLocale.dateFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dateTimeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.dayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.decimalPoint": (), + "QLocale.exponential": (), + "QLocale.firstDayOfWeek": (), + "QLocale.groupSeparator": (), + "QLocale.language": (), + "QLocale.languageToString": ('PySide2.QtCore.QLocale.Language',), + "QLocale.matchingLocales": ('PySide2.QtCore.QLocale.Language', 'PySide2.QtCore.QLocale.Script', 'PySide2.QtCore.QLocale.Country'), + "QLocale.measurementSystem": (), + "QLocale.monthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.name": (), + "QLocale.nativeCountryName": (), + "QLocale.nativeLanguageName": (), + "QLocale.negativeSign": (), + "QLocale.numberOptions": (), + "QLocale.percent": (), + "QLocale.pmText": (), + "QLocale.positiveSign": (), + "QLocale.quoteString": ('str', 'PySide2.QtCore.QLocale.QuotationStyle'), + "QLocale.script": (), + "QLocale.scriptToString": ('PySide2.QtCore.QLocale.Script',), + "QLocale.setDefault": ('PySide2.QtCore.QLocale',), + "QLocale.setNumberOptions": ('NumberOptions',), + "QLocale.standaloneDayName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.standaloneMonthName": ('int', 'PySide2.QtCore.QLocale.FormatType'), + "QLocale.swap": ('PySide2.QtCore.QLocale',), + "QLocale.system": (), + "QLocale.textDirection": (), + "QLocale.timeFormat": ('PySide2.QtCore.QLocale.FormatType',), + "QLocale.toCurrencyString": [('float', 'str'), ('float', 'str', 'int'), ('int', 'str')], + "QLocale.toDate": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDateTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toDouble": ('str', 'bool'), + "QLocale.toFloat": ('str', 'bool'), + "QLocale.toInt": ('str', 'bool'), + "QLocale.toLongLong": ('str', 'bool'), + "QLocale.toLower": ('str',), + "QLocale.toShort": ('str', 'bool'), + "QLocale.toString": [('PySide2.QtCore.QDate', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDate', 'str'), ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QDateTime', 'str'), ('PySide2.QtCore.QTime', 'PySide2.QtCore.QLocale.FormatType'), ('PySide2.QtCore.QTime', 'str'), ('float', 'Union[str, int]', 'int'), ('int',)], + "QLocale.toTime": [('str', 'PySide2.QtCore.QLocale.FormatType'), ('str', 'str')], + "QLocale.toUInt": ('str', 'bool'), + "QLocale.toULongLong": ('str', 'bool'), + "QLocale.toUShort": ('str', 'bool'), + "QLocale.toUpper": ('str',), + "QLocale.uiLanguages": (), + "QLocale.weekdays": (), + "QLocale.zeroDigit": (), + + # class PySide2.QtCore.QMargins: + "QMargins.__init__": [(), ('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QMargins.__copy__": (), + "QMargins.bottom": (), + "QMargins.isNull": (), + "QMargins.left": (), + "QMargins.right": (), + "QMargins.setBottom": ('int',), + "QMargins.setLeft": ('int',), + "QMargins.setRight": ('int',), + "QMargins.setTop": ('int',), + "QMargins.top": (), + + # class PySide2.QtCore.QMarginsF: + "QMarginsF.__init__": [(), ('PySide2.QtCore.QMargins',), ('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float')], + "QMarginsF.__copy__": (), + "QMarginsF.bottom": (), + "QMarginsF.isNull": (), + "QMarginsF.left": (), + "QMarginsF.right": (), + "QMarginsF.setBottom": ('float',), + "QMarginsF.setLeft": ('float',), + "QMarginsF.setRight": ('float',), + "QMarginsF.setTop": ('float',), + "QMarginsF.toMargins": (), + "QMarginsF.top": (), + + # class PySide2.QtCore.QMessageLogContext: + "QMessageLogContext.__init__": [(), ('str', 'int', 'str', 'str')], + + # class PySide2.QtCore.QMetaClassInfo: + "QMetaClassInfo.__init__": [(), ('PySide2.QtCore.QMetaClassInfo',)], + "QMetaClassInfo.__copy__": (), + "QMetaClassInfo.name": (), + "QMetaClassInfo.value": (), + + # class PySide2.QtCore.QMetaEnum: + "QMetaEnum.__init__": [(), ('PySide2.QtCore.QMetaEnum',)], + "QMetaEnum.__copy__": (), + "QMetaEnum.isFlag": (), + "QMetaEnum.isScoped": (), + "QMetaEnum.isValid": (), + "QMetaEnum.key": ('int',), + "QMetaEnum.keyCount": (), + "QMetaEnum.keyToValue": ('str', 'bool'), + "QMetaEnum.keysToValue": ('str', 'bool'), + "QMetaEnum.name": (), + "QMetaEnum.scope": (), + "QMetaEnum.value": ('int',), + "QMetaEnum.valueToKey": ('int',), + "QMetaEnum.valueToKeys": ('int',), + + # class PySide2.QtCore.QMetaMethod: + "QMetaMethod.__init__": [(), ('PySide2.QtCore.QMetaMethod',)], + "QMetaMethod.__copy__": (), + "QMetaMethod.access": (), + "QMetaMethod.enclosingMetaObject": (), + "QMetaMethod.invoke": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.invokeOnGadget": [('int', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('int', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaMethod.isValid": (), + "QMetaMethod.methodIndex": (), + "QMetaMethod.methodSignature": (), + "QMetaMethod.methodType": (), + "QMetaMethod.name": (), + "QMetaMethod.parameterCount": (), + "QMetaMethod.parameterNames": (), + "QMetaMethod.parameterType": ('int',), + "QMetaMethod.parameterTypes": (), + "QMetaMethod.returnType": (), + "QMetaMethod.revision": (), + "QMetaMethod.tag": (), + "QMetaMethod.typeName": (), + + # class PySide2.QtCore.QMetaObject: + "QMetaObject.__init__": (), + "QMetaObject.cast": ('PySide2.QtCore.QObject',), + "QMetaObject.checkConnectArgs": [('PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QMetaMethod'), ('str', 'str')], + "QMetaObject.classInfo": ('int',), + "QMetaObject.classInfoCount": (), + "QMetaObject.classInfoOffset": (), + "QMetaObject.className": (), + "QMetaObject.connectSlotsByName": ('PySide2.QtCore.QObject',), + "QMetaObject.constructor": ('int',), + "QMetaObject.constructorCount": (), + "QMetaObject.disconnect": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.disconnectOne": ('PySide2.QtCore.QObject', 'int', 'PySide2.QtCore.QObject', 'int'), + "QMetaObject.enumerator": ('int',), + "QMetaObject.enumeratorCount": (), + "QMetaObject.enumeratorOffset": (), + "QMetaObject.indexOfClassInfo": ('str',), + "QMetaObject.indexOfConstructor": ('str',), + "QMetaObject.indexOfEnumerator": ('str',), + "QMetaObject.indexOfMethod": ('str',), + "QMetaObject.indexOfProperty": ('str',), + "QMetaObject.indexOfSignal": ('str',), + "QMetaObject.indexOfSlot": ('str',), + "QMetaObject.inherits": ('PySide2.QtCore.QMetaObject',), + "QMetaObject.invokeMethod": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType', 'PySide2.QtCore.QGenericReturnArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument')], + "QMetaObject.method": ('int',), + "QMetaObject.methodCount": (), + "QMetaObject.methodOffset": (), + "QMetaObject.newInstance": ('PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument', 'PySide2.QtCore.QGenericArgument'), + "QMetaObject.normalizedSignature": ('str',), + "QMetaObject.normalizedType": ('str',), + "QMetaObject.property": ('int',), + "QMetaObject.propertyCount": (), + "QMetaObject.propertyOffset": (), + "QMetaObject.superClass": (), + "QMetaObject.userProperty": (), + + # class PySide2.QtCore.QMetaProperty: + "QMetaProperty.__init__": [(), ('PySide2.QtCore.QMetaProperty',)], + "QMetaProperty.__copy__": (), + "QMetaProperty.enumerator": (), + "QMetaProperty.hasNotifySignal": (), + "QMetaProperty.hasStdCppSet": (), + "QMetaProperty.isConstant": (), + "QMetaProperty.isDesignable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEditable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isEnumType": (), + "QMetaProperty.isFinal": (), + "QMetaProperty.isFlagType": (), + "QMetaProperty.isReadable": (), + "QMetaProperty.isResettable": (), + "QMetaProperty.isScriptable": ('PySide2.QtCore.QObject',), + "QMetaProperty.isStored": ('PySide2.QtCore.QObject',), + "QMetaProperty.isUser": ('PySide2.QtCore.QObject',), + "QMetaProperty.isValid": (), + "QMetaProperty.isWritable": (), + "QMetaProperty.name": (), + "QMetaProperty.notifySignal": (), + "QMetaProperty.notifySignalIndex": (), + "QMetaProperty.propertyIndex": (), + "QMetaProperty.read": ('PySide2.QtCore.QObject',), + "QMetaProperty.readOnGadget": ('int',), + "QMetaProperty.reset": ('PySide2.QtCore.QObject',), + "QMetaProperty.resetOnGadget": ('int',), + "QMetaProperty.revision": (), + "QMetaProperty.type": (), + "QMetaProperty.typeName": (), + "QMetaProperty.userType": (), + "QMetaProperty.write": ('PySide2.QtCore.QObject', 'Any'), + "QMetaProperty.writeOnGadget": ('int', 'Any'), + + # class PySide2.QtCore.QMimeData: + "QMimeData.__init__": (), + "QMimeData.clear": (), + "QMimeData.colorData": (), + "QMimeData.data": ('str',), + "QMimeData.formats": (), + "QMimeData.hasColor": (), + "QMimeData.hasFormat": ('str',), + "QMimeData.hasHtml": (), + "QMimeData.hasImage": (), + "QMimeData.hasText": (), + "QMimeData.hasUrls": (), + "QMimeData.html": (), + "QMimeData.imageData": (), + "QMimeData.removeFormat": ('str',), + "QMimeData.retrieveData": ('str', 'type'), + "QMimeData.setColorData": ('Any',), + "QMimeData.setData": ('str', 'PySide2.QtCore.QByteArray'), + "QMimeData.setHtml": ('str',), + "QMimeData.setImageData": ('Any',), + "QMimeData.setText": ('str',), + "QMimeData.setUrls": ('list',), + "QMimeData.text": (), + "QMimeData.urls": (), + + # class PySide2.QtCore.QMimeDatabase: + "QMimeDatabase.__init__": (), + "QMimeDatabase.allMimeTypes": (), + "QMimeDatabase.mimeTypeForData": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QMimeDatabase.mimeTypeForFile": [('PySide2.QtCore.QFileInfo', 'PySide2.QtCore.QMimeDatabase.MatchMode'), ('str', 'PySide2.QtCore.QMimeDatabase.MatchMode')], + "QMimeDatabase.mimeTypeForFileNameAndData": [('str', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QIODevice')], + "QMimeDatabase.mimeTypeForName": ('str',), + "QMimeDatabase.mimeTypeForUrl": ('PySide2.QtCore.QUrl',), + "QMimeDatabase.mimeTypesForFileName": ('str',), + "QMimeDatabase.suffixForFileName": ('str',), + + # class PySide2.QtCore.QMimeType: + "QMimeType.__init__": [(), ('PySide2.QtCore.QMimeType',)], + "QMimeType.__copy__": (), + "QMimeType.aliases": (), + "QMimeType.allAncestors": (), + "QMimeType.comment": (), + "QMimeType.filterString": (), + "QMimeType.genericIconName": (), + "QMimeType.globPatterns": (), + "QMimeType.iconName": (), + "QMimeType.inherits": ('str',), + "QMimeType.isDefault": (), + "QMimeType.isValid": (), + "QMimeType.name": (), + "QMimeType.parentMimeTypes": (), + "QMimeType.preferredSuffix": (), + "QMimeType.suffixes": (), + "QMimeType.swap": ('PySide2.QtCore.QMimeType',), + + # class PySide2.QtCore.QModelIndex: + "QModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',)], + "QModelIndex.__copy__": (), + "QModelIndex.child": ('int', 'int'), + "QModelIndex.column": (), + "QModelIndex.data": ('int',), + "QModelIndex.flags": (), + "QModelIndex.internalId": (), + "QModelIndex.internalPointer": (), + "QModelIndex.isValid": (), + "QModelIndex.model": (), + "QModelIndex.parent": (), + "QModelIndex.row": (), + "QModelIndex.sibling": ('int', 'int'), + + # class PySide2.QtCore.QMutex: + "QMutex.__init__": ('PySide2.QtCore.QMutex.RecursionMode',), + "QMutex.isRecursive": (), + "QMutex.lock": (), + "QMutex.tryLock": [(), ('int',)], + "QMutex.try_lock": (), + "QMutex.unlock": (), + + # class PySide2.QtCore.QMutexLocker: + "QMutexLocker.__init__": ('PySide2.QtCore.QBasicMutex',), + "QMutexLocker.__enter__": (), + "QMutexLocker.__exit__": ('object', 'object', 'object'), + "QMutexLocker.mutex": (), + "QMutexLocker.relock": (), + "QMutexLocker.unlock": (), + + # class PySide2.QtCore.QObject: + "QObject.__init__": ('PySide2.QtCore.QObject',), + "QObject.blockSignals": ('bool',), + "QObject.childEvent": ('PySide2.QtCore.QChildEvent',), + "QObject.children": (), + "QObject.connect": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('PySide2.QtCore.QObject', 'str', 'str', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'Callable', 'PySide2.QtCore.Qt.ConnectionType'), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.Qt.ConnectionType')], + "QObject.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.customEvent": ('PySide2.QtCore.QEvent',), + "QObject.deleteLater": (), + "QObject.disconnect": [('PySide2.QtCore.QMetaObject.Connection',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QMetaMethod'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'Callable'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject', 'str'), ('str', 'Callable'), ('str', 'PySide2.QtCore.QObject', 'str')], + "QObject.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QObject.dumpObjectInfo": (), + "QObject.dumpObjectTree": (), + "QObject.dynamicPropertyNames": (), + "QObject.emit": ('str', '...'), + "QObject.event": ('PySide2.QtCore.QEvent',), + "QObject.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QObject.findChild": ('type', 'str'), + "QObject.findChildren": [('type', 'PySide2.QtCore.QRegExp'), ('type', 'str')], + "QObject.inherits": ('str',), + "QObject.installEventFilter": ('PySide2.QtCore.QObject',), + "QObject.isSignalConnected": ('PySide2.QtCore.QMetaMethod',), + "QObject.isWidgetType": (), + "QObject.isWindowType": (), + "QObject.killTimer": ('int',), + "QObject.metaObject": (), + "QObject.moveToThread": ('PySide2.QtCore.QThread',), + "QObject.objectName": (), + "QObject.parent": (), + "QObject.property": ('str',), + "QObject.receivers": ('str',), + "QObject.registerUserData": (), + "QObject.removeEventFilter": ('PySide2.QtCore.QObject',), + "QObject.sender": (), + "QObject.senderSignalIndex": (), + "QObject.setObjectName": ('str',), + "QObject.setParent": ('PySide2.QtCore.QObject',), + "QObject.setProperty": ('str', 'Any'), + "QObject.signalsBlocked": (), + "QObject.startTimer": ('int', 'PySide2.QtCore.Qt.TimerType'), + "QObject.thread": (), + "QObject.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QObject.tr": ('str', 'str', 'int'), + + # class PySide2.QtCore.QParallelAnimationGroup: + "QParallelAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QParallelAnimationGroup.duration": (), + "QParallelAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QParallelAnimationGroup.updateCurrentTime": ('int',), + "QParallelAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QParallelAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QPauseAnimation: + "QPauseAnimation.__init__": [('PySide2.QtCore.QObject',), ('int', 'PySide2.QtCore.QObject')], + "QPauseAnimation.duration": (), + "QPauseAnimation.event": ('PySide2.QtCore.QEvent',), + "QPauseAnimation.setDuration": ('int',), + "QPauseAnimation.updateCurrentTime": ('int',), + + # class PySide2.QtCore.QPersistentModelIndex: + "QPersistentModelIndex.__init__": [(), ('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QPersistentModelIndex',)], + "QPersistentModelIndex.__copy__": (), + "QPersistentModelIndex.child": ('int', 'int'), + "QPersistentModelIndex.column": (), + "QPersistentModelIndex.data": ('int',), + "QPersistentModelIndex.flags": (), + "QPersistentModelIndex.internalId": (), + "QPersistentModelIndex.internalPointer": (), + "QPersistentModelIndex.isValid": (), + "QPersistentModelIndex.model": (), + "QPersistentModelIndex.parent": (), + "QPersistentModelIndex.row": (), + "QPersistentModelIndex.sibling": ('int', 'int'), + "QPersistentModelIndex.swap": ('PySide2.QtCore.QPersistentModelIndex',), + + # class PySide2.QtCore.QPluginLoader: + "QPluginLoader.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QPluginLoader.errorString": (), + "QPluginLoader.fileName": (), + "QPluginLoader.instance": (), + "QPluginLoader.isLoaded": (), + "QPluginLoader.load": (), + "QPluginLoader.metaData": (), + "QPluginLoader.setFileName": ('str',), + "QPluginLoader.staticInstances": (), + "QPluginLoader.unload": (), + + # class PySide2.QtCore.QPoint: + "QPoint.__init__": [(), ('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPoint.__copy__": (), + "QPoint.__reduce__": (), + "QPoint.dotProduct": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QPoint.isNull": (), + "QPoint.manhattanLength": (), + "QPoint.setX": ('int',), + "QPoint.setY": ('int',), + "QPoint.toTuple": (), + "QPoint.x": (), + "QPoint.y": (), + + # class PySide2.QtCore.QPointF: + "QPointF.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPointF.__copy__": (), + "QPointF.__reduce__": (), + "QPointF.dotProduct": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QPointF.isNull": (), + "QPointF.manhattanLength": (), + "QPointF.setX": ('float',), + "QPointF.setY": ('float',), + "QPointF.toPoint": (), + "QPointF.toTuple": (), + "QPointF.x": (), + "QPointF.y": (), + + # class PySide2.QtCore.QProcess: + "QProcess.__init__": ('PySide2.QtCore.QObject',), + "QProcess.arguments": (), + "QProcess.atEnd": (), + "QProcess.bytesAvailable": (), + "QProcess.bytesToWrite": (), + "QProcess.canReadLine": (), + "QProcess.close": (), + "QProcess.closeReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.closeWriteChannel": (), + "QProcess.environment": (), + "QProcess.execute": [('str',), ('str', 'List[str]')], + "QProcess.exitCode": (), + "QProcess.exitStatus": (), + "QProcess.inputChannelMode": (), + "QProcess.isSequential": (), + "QProcess.kill": (), + "QProcess.nativeArguments": (), + "QProcess.nullDevice": (), + "QProcess.open": ('OpenMode',), + "QProcess.pid": (), + "QProcess.processChannelMode": (), + "QProcess.processEnvironment": (), + "QProcess.processId": (), + "QProcess.program": (), + "QProcess.readAllStandardError": (), + "QProcess.readAllStandardOutput": (), + "QProcess.readChannel": (), + "QProcess.readData": ('str', 'int'), + "QProcess.setArguments": ('List[str]',), + "QProcess.setEnvironment": ('List[str]',), + "QProcess.setInputChannelMode": ('PySide2.QtCore.QProcess.InputChannelMode',), + "QProcess.setNativeArguments": ('str',), + "QProcess.setProcessChannelMode": ('PySide2.QtCore.QProcess.ProcessChannelMode',), + "QProcess.setProcessEnvironment": ('PySide2.QtCore.QProcessEnvironment',), + "QProcess.setProcessState": ('PySide2.QtCore.QProcess.ProcessState',), + "QProcess.setProgram": ('str',), + "QProcess.setReadChannel": ('PySide2.QtCore.QProcess.ProcessChannel',), + "QProcess.setStandardErrorFile": ('str', 'OpenMode'), + "QProcess.setStandardInputFile": ('str',), + "QProcess.setStandardOutputFile": ('str', 'OpenMode'), + "QProcess.setStandardOutputProcess": ('PySide2.QtCore.QProcess',), + "QProcess.setWorkingDirectory": ('str',), + "QProcess.setupChildProcess": (), + "QProcess.start": [('OpenMode',), ('str', 'List[str]', 'OpenMode'), ('str', 'OpenMode')], + "QProcess.startDetached": [('str',), ('str', 'List[str]'), ('str', 'List[str]', 'str', 'int')], + "QProcess.state": (), + "QProcess.systemEnvironment": (), + "QProcess.terminate": (), + "QProcess.waitForBytesWritten": ('int',), + "QProcess.waitForFinished": ('int',), + "QProcess.waitForReadyRead": ('int',), + "QProcess.waitForStarted": ('int',), + "QProcess.workingDirectory": (), + "QProcess.writeData": ('str', 'int'), + + # class PySide2.QtCore.QProcessEnvironment: + "QProcessEnvironment.__init__": [(), ('PySide2.QtCore.QProcessEnvironment',)], + "QProcessEnvironment.__copy__": (), + "QProcessEnvironment.clear": (), + "QProcessEnvironment.contains": ('str',), + "QProcessEnvironment.insert": [('PySide2.QtCore.QProcessEnvironment',), ('str', 'str')], + "QProcessEnvironment.isEmpty": (), + "QProcessEnvironment.keys": (), + "QProcessEnvironment.remove": ('str',), + "QProcessEnvironment.swap": ('PySide2.QtCore.QProcessEnvironment',), + "QProcessEnvironment.systemEnvironment": (), + "QProcessEnvironment.toStringList": (), + "QProcessEnvironment.value": ('str', 'str'), + + # class PySide2.QtCore.QPropertyAnimation: + "QPropertyAnimation.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QPropertyAnimation.event": ('PySide2.QtCore.QEvent',), + "QPropertyAnimation.propertyName": (), + "QPropertyAnimation.setPropertyName": ('PySide2.QtCore.QByteArray',), + "QPropertyAnimation.setTargetObject": ('PySide2.QtCore.QObject',), + "QPropertyAnimation.targetObject": (), + "QPropertyAnimation.updateCurrentValue": ('Any',), + "QPropertyAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QReadLocker: + "QReadLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QReadLocker.__enter__": (), + "QReadLocker.__exit__": ('object', 'object', 'object'), + "QReadLocker.readWriteLock": (), + "QReadLocker.relock": (), + "QReadLocker.unlock": (), + + # class PySide2.QtCore.QReadWriteLock: + "QReadWriteLock.__init__": ('PySide2.QtCore.QReadWriteLock.RecursionMode',), + "QReadWriteLock.lockForRead": (), + "QReadWriteLock.lockForWrite": (), + "QReadWriteLock.tryLockForRead": [(), ('int',)], + "QReadWriteLock.tryLockForWrite": [(), ('int',)], + "QReadWriteLock.unlock": (), + + # class PySide2.QtCore.QRect: + "QRect.__init__": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QSize'), ('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRect.__copy__": (), + "QRect.__reduce__": (), + "QRect.adjust": ('int', 'int', 'int', 'int'), + "QRect.adjusted": ('int', 'int', 'int', 'int'), + "QRect.bottom": (), + "QRect.bottomLeft": (), + "QRect.bottomRight": (), + "QRect.center": (), + "QRect.contains": [('PySide2.QtCore.QPoint', 'bool'), ('PySide2.QtCore.QRect', 'bool'), ('int', 'int'), ('int', 'int', 'bool')], + "QRect.getCoords": ('int', 'int', 'int', 'int'), + "QRect.getRect": ('int', 'int', 'int', 'int'), + "QRect.height": (), + "QRect.intersected": ('PySide2.QtCore.QRect',), + "QRect.intersects": ('PySide2.QtCore.QRect',), + "QRect.isEmpty": (), + "QRect.isNull": (), + "QRect.isValid": (), + "QRect.left": (), + "QRect.marginsAdded": ('PySide2.QtCore.QMargins',), + "QRect.marginsRemoved": ('PySide2.QtCore.QMargins',), + "QRect.moveBottom": ('int',), + "QRect.moveBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.moveCenter": ('PySide2.QtCore.QPoint',), + "QRect.moveLeft": ('int',), + "QRect.moveRight": ('int',), + "QRect.moveTo": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.moveTop": ('int',), + "QRect.moveTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.moveTopRight": ('PySide2.QtCore.QPoint',), + "QRect.normalized": (), + "QRect.right": (), + "QRect.setBottom": ('int',), + "QRect.setBottomLeft": ('PySide2.QtCore.QPoint',), + "QRect.setBottomRight": ('PySide2.QtCore.QPoint',), + "QRect.setCoords": ('int', 'int', 'int', 'int'), + "QRect.setHeight": ('int',), + "QRect.setLeft": ('int',), + "QRect.setRect": ('int', 'int', 'int', 'int'), + "QRect.setRight": ('int',), + "QRect.setSize": ('PySide2.QtCore.QSize',), + "QRect.setTop": ('int',), + "QRect.setTopLeft": ('PySide2.QtCore.QPoint',), + "QRect.setTopRight": ('PySide2.QtCore.QPoint',), + "QRect.setWidth": ('int',), + "QRect.setX": ('int',), + "QRect.setY": ('int',), + "QRect.size": (), + "QRect.top": (), + "QRect.topLeft": (), + "QRect.topRight": (), + "QRect.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRect.transposed": (), + "QRect.united": ('PySide2.QtCore.QRect',), + "QRect.width": (), + "QRect.x": (), + "QRect.y": (), + + # class PySide2.QtCore.QRectF: + "QRectF.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QSizeF'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QRectF.__copy__": (), + "QRectF.__reduce__": (), + "QRectF.adjust": ('float', 'float', 'float', 'float'), + "QRectF.adjusted": ('float', 'float', 'float', 'float'), + "QRectF.bottom": (), + "QRectF.bottomLeft": (), + "QRectF.bottomRight": (), + "QRectF.center": (), + "QRectF.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('float', 'float')], + "QRectF.getCoords": ('float', 'float', 'float', 'float'), + "QRectF.getRect": ('float', 'float', 'float', 'float'), + "QRectF.height": (), + "QRectF.intersected": ('PySide2.QtCore.QRectF',), + "QRectF.intersects": ('PySide2.QtCore.QRectF',), + "QRectF.isEmpty": (), + "QRectF.isNull": (), + "QRectF.isValid": (), + "QRectF.left": (), + "QRectF.marginsAdded": ('PySide2.QtCore.QMarginsF',), + "QRectF.marginsRemoved": ('PySide2.QtCore.QMarginsF',), + "QRectF.moveBottom": ('float',), + "QRectF.moveBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.moveCenter": ('PySide2.QtCore.QPointF',), + "QRectF.moveLeft": ('float',), + "QRectF.moveRight": ('float',), + "QRectF.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.moveTop": ('float',), + "QRectF.moveTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.moveTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.normalized": (), + "QRectF.right": (), + "QRectF.setBottom": ('float',), + "QRectF.setBottomLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setBottomRight": ('PySide2.QtCore.QPointF',), + "QRectF.setCoords": ('float', 'float', 'float', 'float'), + "QRectF.setHeight": ('float',), + "QRectF.setLeft": ('float',), + "QRectF.setRect": ('float', 'float', 'float', 'float'), + "QRectF.setRight": ('float',), + "QRectF.setSize": ('PySide2.QtCore.QSizeF',), + "QRectF.setTop": ('float',), + "QRectF.setTopLeft": ('PySide2.QtCore.QPointF',), + "QRectF.setTopRight": ('PySide2.QtCore.QPointF',), + "QRectF.setWidth": ('float',), + "QRectF.setX": ('float',), + "QRectF.setY": ('float',), + "QRectF.size": (), + "QRectF.toAlignedRect": (), + "QRectF.toRect": (), + "QRectF.top": (), + "QRectF.topLeft": (), + "QRectF.topRight": (), + "QRectF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRectF.transposed": (), + "QRectF.united": ('PySide2.QtCore.QRectF',), + "QRectF.width": (), + "QRectF.x": (), + "QRectF.y": (), + + # class PySide2.QtCore.QRegExp: + "QRegExp.__init__": [(), ('PySide2.QtCore.QRegExp',), ('str', 'PySide2.QtCore.Qt.CaseSensitivity', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QRegExp.__copy__": (), + "QRegExp.__reduce__": (), + "QRegExp.cap": ('int',), + "QRegExp.captureCount": (), + "QRegExp.capturedTexts": (), + "QRegExp.caseSensitivity": (), + "QRegExp.errorString": (), + "QRegExp.escape": ('str',), + "QRegExp.exactMatch": ('str',), + "QRegExp.indexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.isEmpty": (), + "QRegExp.isMinimal": (), + "QRegExp.isValid": (), + "QRegExp.lastIndexIn": ('str', 'int', 'PySide2.QtCore.QRegExp.CaretMode'), + "QRegExp.matchedLength": (), + "QRegExp.pattern": (), + "QRegExp.patternSyntax": (), + "QRegExp.pos": ('int',), + "QRegExp.replace": ('str', 'str'), + "QRegExp.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QRegExp.setMinimal": ('bool',), + "QRegExp.setPattern": ('str',), + "QRegExp.setPatternSyntax": ('PySide2.QtCore.QRegExp.PatternSyntax',), + "QRegExp.swap": ('PySide2.QtCore.QRegExp',), + + # class PySide2.QtCore.QRegularExpression: + "QRegularExpression.__init__": [(), ('PySide2.QtCore.QRegularExpression',), ('str', 'PatternOptions')], + "QRegularExpression.__copy__": (), + "QRegularExpression.captureCount": (), + "QRegularExpression.errorString": (), + "QRegularExpression.escape": ('str',), + "QRegularExpression.globalMatch": ('str', 'int', 'PySide2.QtCore.QRegularExpression.MatchType', 'MatchOptions'), + "QRegularExpression.isValid": (), + "QRegularExpression.match": ('str', 'int', 'PySide2.QtCore.QRegularExpression.MatchType', 'MatchOptions'), + "QRegularExpression.namedCaptureGroups": (), + "QRegularExpression.optimize": (), + "QRegularExpression.pattern": (), + "QRegularExpression.patternErrorOffset": (), + "QRegularExpression.patternOptions": (), + "QRegularExpression.setPattern": ('str',), + "QRegularExpression.setPatternOptions": ('PatternOptions',), + "QRegularExpression.swap": ('PySide2.QtCore.QRegularExpression',), + + # class PySide2.QtCore.QRegularExpressionMatch: + "QRegularExpressionMatch.__init__": [(), ('PySide2.QtCore.QRegularExpressionMatch',)], + "QRegularExpressionMatch.__copy__": (), + "QRegularExpressionMatch.captured": [('int',), ('str',)], + "QRegularExpressionMatch.capturedEnd": [('int',), ('str',)], + "QRegularExpressionMatch.capturedLength": [('int',), ('str',)], + "QRegularExpressionMatch.capturedRef": [('int',), ('str',)], + "QRegularExpressionMatch.capturedStart": [('int',), ('str',)], + "QRegularExpressionMatch.capturedTexts": (), + "QRegularExpressionMatch.hasMatch": (), + "QRegularExpressionMatch.hasPartialMatch": (), + "QRegularExpressionMatch.isValid": (), + "QRegularExpressionMatch.lastCapturedIndex": (), + "QRegularExpressionMatch.matchOptions": (), + "QRegularExpressionMatch.matchType": (), + "QRegularExpressionMatch.regularExpression": (), + "QRegularExpressionMatch.swap": ('PySide2.QtCore.QRegularExpressionMatch',), + + # class PySide2.QtCore.QRegularExpressionMatchIterator: + "QRegularExpressionMatchIterator.__init__": [(), ('PySide2.QtCore.QRegularExpressionMatchIterator',)], + "QRegularExpressionMatchIterator.__copy__": (), + "QRegularExpressionMatchIterator.hasNext": (), + "QRegularExpressionMatchIterator.isValid": (), + "QRegularExpressionMatchIterator.matchOptions": (), + "QRegularExpressionMatchIterator.matchType": (), + "QRegularExpressionMatchIterator.peekNext": (), + "QRegularExpressionMatchIterator.regularExpression": (), + "QRegularExpressionMatchIterator.swap": ('PySide2.QtCore.QRegularExpressionMatchIterator',), + + # class PySide2.QtCore.QResource: + "QResource.__init__": ('str', 'PySide2.QtCore.QLocale'), + "QResource.absoluteFilePath": (), + "QResource.addSearchPath": ('str',), + "QResource.children": (), + "QResource.data": (), + "QResource.fileName": (), + "QResource.isCompressed": (), + "QResource.isDir": (), + "QResource.isFile": (), + "QResource.isValid": (), + "QResource.lastModified": (), + "QResource.locale": (), + "QResource.registerResource": ('str', 'str'), + "QResource.registerResourceData": ('Union[str, int]', 'str'), + "QResource.searchPaths": (), + "QResource.setFileName": ('str',), + "QResource.setLocale": ('PySide2.QtCore.QLocale',), + "QResource.size": (), + "QResource.unregisterResource": ('str', 'str'), + "QResource.unregisterResourceData": ('Union[str, int]', 'str'), + + # class PySide2.QtCore.QRunnable: + "QRunnable.__init__": (), + "QRunnable.autoDelete": (), + "QRunnable.run": (), + "QRunnable.setAutoDelete": ('bool',), + + # class PySide2.QtCore.QSaveFile: + "QSaveFile.__init__": [('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QSaveFile.cancelWriting": (), + "QSaveFile.close": (), + "QSaveFile.commit": (), + "QSaveFile.directWriteFallback": (), + "QSaveFile.fileName": (), + "QSaveFile.open": ('OpenMode',), + "QSaveFile.setDirectWriteFallback": ('bool',), + "QSaveFile.setFileName": ('str',), + "QSaveFile.writeData": ('str', 'int'), + + # class PySide2.QtCore.QSemaphore: + "QSemaphore.__init__": ('int',), + "QSemaphore.acquire": ('int',), + "QSemaphore.available": (), + "QSemaphore.release": ('int',), + "QSemaphore.tryAcquire": [('int',), ('int', 'int')], + + # class PySide2.QtCore.QSequentialAnimationGroup: + "QSequentialAnimationGroup.__init__": ('PySide2.QtCore.QObject',), + "QSequentialAnimationGroup.addPause": ('int',), + "QSequentialAnimationGroup.currentAnimation": (), + "QSequentialAnimationGroup.duration": (), + "QSequentialAnimationGroup.event": ('PySide2.QtCore.QEvent',), + "QSequentialAnimationGroup.insertPause": ('int', 'int'), + "QSequentialAnimationGroup.updateCurrentTime": ('int',), + "QSequentialAnimationGroup.updateDirection": ('PySide2.QtCore.QAbstractAnimation.Direction',), + "QSequentialAnimationGroup.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QSettings: + "QSettings.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QSettings.Scope', 'str', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QObject'), ('str', 'str', 'PySide2.QtCore.QObject')], + "QSettings.allKeys": (), + "QSettings.applicationName": (), + "QSettings.beginGroup": ('str',), + "QSettings.beginReadArray": ('str',), + "QSettings.beginWriteArray": ('str', 'int'), + "QSettings.childGroups": (), + "QSettings.childKeys": (), + "QSettings.clear": (), + "QSettings.contains": ('str',), + "QSettings.defaultFormat": (), + "QSettings.endArray": (), + "QSettings.endGroup": (), + "QSettings.event": ('PySide2.QtCore.QEvent',), + "QSettings.fallbacksEnabled": (), + "QSettings.fileName": (), + "QSettings.format": (), + "QSettings.group": (), + "QSettings.iniCodec": (), + "QSettings.isWritable": (), + "QSettings.organizationName": (), + "QSettings.remove": ('str',), + "QSettings.scope": (), + "QSettings.setArrayIndex": ('int',), + "QSettings.setDefaultFormat": ('PySide2.QtCore.QSettings.Format',), + "QSettings.setFallbacksEnabled": ('bool',), + "QSettings.setIniCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QSettings.setPath": ('PySide2.QtCore.QSettings.Format', 'PySide2.QtCore.QSettings.Scope', 'str'), + "QSettings.setValue": ('str', 'Any'), + "QSettings.status": (), + "QSettings.sync": (), + "QSettings.value": ('str', 'Any'), + + # class PySide2.QtCore.QSignalMapper: + "QSignalMapper.__init__": ('PySide2.QtCore.QObject',), + "QSignalMapper.map": [(), ('PySide2.QtCore.QObject',)], + "QSignalMapper.mapping": [('PySide2.QtCore.QObject',), ('int',), ('str',)], + "QSignalMapper.removeMappings": ('PySide2.QtCore.QObject',), + "QSignalMapper.setMapping": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + + # class PySide2.QtCore.QSignalTransition: + "QSignalTransition.__init__": [('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',), ('object', 'PySide2.QtCore.QState')], + "QSignalTransition.event": ('PySide2.QtCore.QEvent',), + "QSignalTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QSignalTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QSignalTransition.senderObject": (), + "QSignalTransition.setSenderObject": ('PySide2.QtCore.QObject',), + "QSignalTransition.setSignal": ('PySide2.QtCore.QByteArray',), + "QSignalTransition.signal": (), + + # class PySide2.QtCore.QSize: + "QSize.__init__": [(), ('PySide2.QtCore.QSize',), ('int', 'int')], + "QSize.__copy__": (), + "QSize.__reduce__": (), + "QSize.boundedTo": ('PySide2.QtCore.QSize',), + "QSize.expandedTo": ('PySide2.QtCore.QSize',), + "QSize.height": (), + "QSize.isEmpty": (), + "QSize.isNull": (), + "QSize.isValid": (), + "QSize.scale": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSize.setHeight": ('int',), + "QSize.setWidth": ('int',), + "QSize.toTuple": (), + "QSize.transpose": (), + "QSize.transposed": (), + "QSize.width": (), + + # class PySide2.QtCore.QSizeF: + "QSizeF.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QSizeF.__copy__": (), + "QSizeF.__reduce__": (), + "QSizeF.boundedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.expandedTo": ('PySide2.QtCore.QSizeF',), + "QSizeF.height": (), + "QSizeF.isEmpty": (), + "QSizeF.isNull": (), + "QSizeF.isValid": (), + "QSizeF.scale": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.scaled": [('PySide2.QtCore.QSizeF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QSizeF.setHeight": ('float',), + "QSizeF.setWidth": ('float',), + "QSizeF.toSize": (), + "QSizeF.toTuple": (), + "QSizeF.transpose": (), + "QSizeF.transposed": (), + "QSizeF.width": (), + + # class PySide2.QtCore.QSocketNotifier: + "QSocketNotifier.__init__": [('int', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject'), ('object', 'PySide2.QtCore.QSocketNotifier.Type', 'PySide2.QtCore.QObject')], + "QSocketNotifier.event": ('PySide2.QtCore.QEvent',), + "QSocketNotifier.isEnabled": (), + "QSocketNotifier.setEnabled": ('bool',), + "QSocketNotifier.socket": (), + "QSocketNotifier.type": (), + + # class PySide2.QtCore.QSortFilterProxyModel: + "QSortFilterProxyModel.__init__": ('PySide2.QtCore.QObject',), + "QSortFilterProxyModel.buddy": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSortFilterProxyModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.dynamicSortFilter": (), + "QSortFilterProxyModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.filterAcceptsColumn": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterAcceptsRow": ('int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.filterCaseSensitivity": (), + "QSortFilterProxyModel.filterKeyColumn": (), + "QSortFilterProxyModel.filterRegExp": (), + "QSortFilterProxyModel.filterRole": (), + "QSortFilterProxyModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSortFilterProxyModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.invalidate": (), + "QSortFilterProxyModel.invalidateFilter": (), + "QSortFilterProxyModel.isSortLocaleAware": (), + "QSortFilterProxyModel.lessThan": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.mapFromSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.mapSelectionFromSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapSelectionToSource": ('PySide2.QtCore.QItemSelection',), + "QSortFilterProxyModel.mapToSource": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.match": ('PySide2.QtCore.QModelIndex', 'int', 'Any', 'int', 'MatchFlags'), + "QSortFilterProxyModel.mimeData": ('List[int]',), + "QSortFilterProxyModel.mimeTypes": (), + "QSortFilterProxyModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QSortFilterProxyModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSortFilterProxyModel.setDynamicSortFilter": ('bool',), + "QSortFilterProxyModel.setFilterCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setFilterFixedString": ('str',), + "QSortFilterProxyModel.setFilterKeyColumn": ('int',), + "QSortFilterProxyModel.setFilterRegExp": [('PySide2.QtCore.QRegExp',), ('str',)], + "QSortFilterProxyModel.setFilterRole": ('int',), + "QSortFilterProxyModel.setFilterWildcard": ('str',), + "QSortFilterProxyModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QSortFilterProxyModel.setSortCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QSortFilterProxyModel.setSortLocaleAware": ('bool',), + "QSortFilterProxyModel.setSortRole": ('int',), + "QSortFilterProxyModel.setSourceModel": ('PySide2.QtCore.QAbstractItemModel',), + "QSortFilterProxyModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSortFilterProxyModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSortFilterProxyModel.sortCaseSensitivity": (), + "QSortFilterProxyModel.sortColumn": (), + "QSortFilterProxyModel.sortOrder": (), + "QSortFilterProxyModel.sortRole": (), + "QSortFilterProxyModel.span": ('PySide2.QtCore.QModelIndex',), + "QSortFilterProxyModel.supportedDropActions": (), + + # class PySide2.QtCore.QStandardPaths: + "QStandardPaths.displayName": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.enableTestMode": ('bool',), + "QStandardPaths.findExecutable": ('str', 'List[str]'), + "QStandardPaths.isTestModeEnabled": (), + "QStandardPaths.locate": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'LocateOptions'), + "QStandardPaths.locateAll": ('PySide2.QtCore.QStandardPaths.StandardLocation', 'str', 'LocateOptions'), + "QStandardPaths.setTestModeEnabled": ('bool',), + "QStandardPaths.standardLocations": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + "QStandardPaths.writableLocation": ('PySide2.QtCore.QStandardPaths.StandardLocation',), + + # class PySide2.QtCore.QState: + "QState.__init__": [('PySide2.QtCore.QState',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QState')], + "QState.addTransition": [('PySide2.QtCore.QAbstractState',), ('PySide2.QtCore.QAbstractTransition',), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QAbstractState'), ('object', 'PySide2.QtCore.QAbstractState')], + "QState.assignProperty": ('PySide2.QtCore.QObject', 'str', 'Any'), + "QState.childMode": (), + "QState.errorState": (), + "QState.event": ('PySide2.QtCore.QEvent',), + "QState.initialState": (), + "QState.onEntry": ('PySide2.QtCore.QEvent',), + "QState.onExit": ('PySide2.QtCore.QEvent',), + "QState.removeTransition": ('PySide2.QtCore.QAbstractTransition',), + "QState.setChildMode": ('PySide2.QtCore.QState.ChildMode',), + "QState.setErrorState": ('PySide2.QtCore.QAbstractState',), + "QState.setInitialState": ('PySide2.QtCore.QAbstractState',), + "QState.transitions": (), + + # class PySide2.QtCore.QStateMachine: + "QStateMachine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QState.ChildMode', 'PySide2.QtCore.QObject')], + "QStateMachine.addDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.addState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.beginMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.beginSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.cancelDelayedEvent": ('int',), + "QStateMachine.clearError": (), + "QStateMachine.configuration": (), + "QStateMachine.defaultAnimations": (), + "QStateMachine.endMicrostep": ('PySide2.QtCore.QEvent',), + "QStateMachine.endSelectTransitions": ('PySide2.QtCore.QEvent',), + "QStateMachine.error": (), + "QStateMachine.errorString": (), + "QStateMachine.event": ('PySide2.QtCore.QEvent',), + "QStateMachine.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStateMachine.globalRestorePolicy": (), + "QStateMachine.isAnimated": (), + "QStateMachine.isRunning": (), + "QStateMachine.onEntry": ('PySide2.QtCore.QEvent',), + "QStateMachine.onExit": ('PySide2.QtCore.QEvent',), + "QStateMachine.postDelayedEvent": ('PySide2.QtCore.QEvent', 'int'), + "QStateMachine.postEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QStateMachine.EventPriority'), + "QStateMachine.removeDefaultAnimation": ('PySide2.QtCore.QAbstractAnimation',), + "QStateMachine.removeState": ('PySide2.QtCore.QAbstractState',), + "QStateMachine.setAnimated": ('bool',), + "QStateMachine.setGlobalRestorePolicy": ('PySide2.QtCore.QState.RestorePolicy',), + "QStateMachine.setRunning": ('bool',), + "QStateMachine.start": (), + "QStateMachine.stop": (), + + # class PySide2.QtCore.QStorageInfo: + "QStorageInfo.__init__": [(), ('PySide2.QtCore.QDir',), ('PySide2.QtCore.QStorageInfo',), ('str',)], + "QStorageInfo.__copy__": (), + "QStorageInfo.blockSize": (), + "QStorageInfo.bytesAvailable": (), + "QStorageInfo.bytesFree": (), + "QStorageInfo.bytesTotal": (), + "QStorageInfo.device": (), + "QStorageInfo.displayName": (), + "QStorageInfo.fileSystemType": (), + "QStorageInfo.isReadOnly": (), + "QStorageInfo.isReady": (), + "QStorageInfo.isRoot": (), + "QStorageInfo.isValid": (), + "QStorageInfo.mountedVolumes": (), + "QStorageInfo.name": (), + "QStorageInfo.refresh": (), + "QStorageInfo.root": (), + "QStorageInfo.rootPath": (), + "QStorageInfo.setPath": ('str',), + "QStorageInfo.subvolume": (), + "QStorageInfo.swap": ('PySide2.QtCore.QStorageInfo',), + + # class PySide2.QtCore.QSysInfo: + "QSysInfo.__init__": (), + "QSysInfo.buildAbi": (), + "QSysInfo.buildCpuArchitecture": (), + "QSysInfo.currentCpuArchitecture": (), + "QSysInfo.kernelType": (), + "QSysInfo.kernelVersion": (), + "QSysInfo.machineHostName": (), + "QSysInfo.prettyProductName": (), + "QSysInfo.productType": (), + "QSysInfo.productVersion": (), + "QSysInfo.windowsVersion": (), + + # class PySide2.QtCore.QSystemSemaphore: + "QSystemSemaphore.__init__": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + "QSystemSemaphore.acquire": (), + "QSystemSemaphore.error": (), + "QSystemSemaphore.errorString": (), + "QSystemSemaphore.key": (), + "QSystemSemaphore.release": ('int',), + "QSystemSemaphore.setKey": ('str', 'int', 'PySide2.QtCore.QSystemSemaphore.AccessMode'), + + # class PySide2.QtCore.QTemporaryDir: + "QTemporaryDir.__init__": [(), ('str',)], + "QTemporaryDir.autoRemove": (), + "QTemporaryDir.errorString": (), + "QTemporaryDir.filePath": ('str',), + "QTemporaryDir.isValid": (), + "QTemporaryDir.path": (), + "QTemporaryDir.remove": (), + "QTemporaryDir.setAutoRemove": ('bool',), + + # class PySide2.QtCore.QTemporaryFile: + "QTemporaryFile.__init__": [(), ('PySide2.QtCore.QObject',), ('str',), ('str', 'PySide2.QtCore.QObject')], + "QTemporaryFile.autoRemove": (), + "QTemporaryFile.createLocalFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.createNativeFile": [('PySide2.QtCore.QFile',), ('str',)], + "QTemporaryFile.fileName": (), + "QTemporaryFile.fileTemplate": (), + "QTemporaryFile.open": [(), ('OpenMode',)], + "QTemporaryFile.setAutoRemove": ('bool',), + "QTemporaryFile.setFileTemplate": ('str',), + + # class PySide2.QtCore.QTextBoundaryFinder: + "QTextBoundaryFinder.__init__": [(), ('PySide2.QtCore.QTextBoundaryFinder',), ('PySide2.QtCore.QTextBoundaryFinder.BoundaryType', 'str')], + "QTextBoundaryFinder.__copy__": (), + "QTextBoundaryFinder.boundaryReasons": (), + "QTextBoundaryFinder.isAtBoundary": (), + "QTextBoundaryFinder.isValid": (), + "QTextBoundaryFinder.position": (), + "QTextBoundaryFinder.setPosition": ('int',), + "QTextBoundaryFinder.string": (), + "QTextBoundaryFinder.toEnd": (), + "QTextBoundaryFinder.toNextBoundary": (), + "QTextBoundaryFinder.toPreviousBoundary": (), + "QTextBoundaryFinder.toStart": (), + "QTextBoundaryFinder.type": (), + + # class PySide2.QtCore.QTextCodec: + "QTextCodec.__init__": (), + "QTextCodec.aliases": (), + "QTextCodec.availableCodecs": (), + "QTextCodec.availableMibs": (), + "QTextCodec.canEncode": [('Union[str, int]',), ('str',)], + "QTextCodec.codecForHtml": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.codecForLocale": (), + "QTextCodec.codecForMib": ('int',), + "QTextCodec.codecForName": [('PySide2.QtCore.QByteArray',), ('str',)], + "QTextCodec.codecForUtfText": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QTextCodec')], + "QTextCodec.convertToUnicode": ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState'), + "QTextCodec.fromUnicode": ('str',), + "QTextCodec.makeDecoder": ('ConversionFlags',), + "QTextCodec.makeEncoder": ('ConversionFlags',), + "QTextCodec.mibEnum": (), + "QTextCodec.name": (), + "QTextCodec.setCodecForLocale": ('PySide2.QtCore.QTextCodec',), + "QTextCodec.toUnicode": [('PySide2.QtCore.QByteArray',), ('str',), ('str', 'int', 'PySide2.QtCore.QTextCodec.ConverterState')], + + # class PySide2.QtCore.QTextDecoder: + "QTextDecoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'ConversionFlags')], + "QTextDecoder.hasFailure": (), + "QTextDecoder.toUnicode": ('PySide2.QtCore.QByteArray',), + + # class PySide2.QtCore.QTextEncoder: + "QTextEncoder.__init__": [('PySide2.QtCore.QTextCodec',), ('PySide2.QtCore.QTextCodec', 'ConversionFlags')], + "QTextEncoder.fromUnicode": ('str',), + "QTextEncoder.hasFailure": (), + + # class PySide2.QtCore.QTextStream: + "QTextStream.__init__": [(), ('PySide2.QtCore.QByteArray', 'OpenMode'), ('PySide2.QtCore.QIODevice',)], + "QTextStream.atEnd": (), + "QTextStream.autoDetectUnicode": (), + "QTextStream.codec": (), + "QTextStream.device": (), + "QTextStream.fieldAlignment": (), + "QTextStream.fieldWidth": (), + "QTextStream.flush": (), + "QTextStream.generateByteOrderMark": (), + "QTextStream.integerBase": (), + "QTextStream.locale": (), + "QTextStream.numberFlags": (), + "QTextStream.padChar": (), + "QTextStream.pos": (), + "QTextStream.read": ('int',), + "QTextStream.readAll": (), + "QTextStream.readLine": ('int',), + "QTextStream.realNumberNotation": (), + "QTextStream.realNumberPrecision": (), + "QTextStream.reset": (), + "QTextStream.resetStatus": (), + "QTextStream.seek": ('int',), + "QTextStream.setAutoDetectUnicode": ('bool',), + "QTextStream.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QTextStream.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextStream.setFieldAlignment": ('PySide2.QtCore.QTextStream.FieldAlignment',), + "QTextStream.setFieldWidth": ('int',), + "QTextStream.setGenerateByteOrderMark": ('bool',), + "QTextStream.setIntegerBase": ('int',), + "QTextStream.setLocale": ('PySide2.QtCore.QLocale',), + "QTextStream.setNumberFlags": ('NumberFlags',), + "QTextStream.setPadChar": ('Union[str, int]',), + "QTextStream.setRealNumberNotation": ('PySide2.QtCore.QTextStream.RealNumberNotation',), + "QTextStream.setRealNumberPrecision": ('int',), + "QTextStream.setStatus": ('PySide2.QtCore.QTextStream.Status',), + "QTextStream.skipWhiteSpace": (), + "QTextStream.status": (), + "QTextStream.string": (), + + # class PySide2.QtCore.QTextStreamManipulator: + "QTextStreamManipulator.__copy__": (), + "QTextStreamManipulator.exec_": ('PySide2.QtCore.QTextStream',), + + # class PySide2.QtCore.QThread: + "QThread.__init__": ('PySide2.QtCore.QObject',), + "QThread.currentThread": (), + "QThread.event": ('PySide2.QtCore.QEvent',), + "QThread.eventDispatcher": (), + "QThread.exec_": (), + "QThread.exit": ('int',), + "QThread.idealThreadCount": (), + "QThread.isFinished": (), + "QThread.isInterruptionRequested": (), + "QThread.isRunning": (), + "QThread.loopLevel": (), + "QThread.msleep": ('int',), + "QThread.priority": (), + "QThread.quit": (), + "QThread.requestInterruption": (), + "QThread.run": (), + "QThread.setEventDispatcher": ('PySide2.QtCore.QAbstractEventDispatcher',), + "QThread.setPriority": ('PySide2.QtCore.QThread.Priority',), + "QThread.setStackSize": ('int',), + "QThread.setTerminationEnabled": ('bool',), + "QThread.sleep": ('int',), + "QThread.stackSize": (), + "QThread.start": ('PySide2.QtCore.QThread.Priority',), + "QThread.terminate": (), + "QThread.usleep": ('int',), + "QThread.wait": ('int',), + "QThread.yieldCurrentThread": (), + + # class PySide2.QtCore.QThreadPool: + "QThreadPool.__init__": ('PySide2.QtCore.QObject',), + "QThreadPool.activeThreadCount": (), + "QThreadPool.cancel": ('PySide2.QtCore.QRunnable',), + "QThreadPool.clear": (), + "QThreadPool.expiryTimeout": (), + "QThreadPool.globalInstance": (), + "QThreadPool.maxThreadCount": (), + "QThreadPool.releaseThread": (), + "QThreadPool.reserveThread": (), + "QThreadPool.setExpiryTimeout": ('int',), + "QThreadPool.setMaxThreadCount": ('int',), + "QThreadPool.start": ('PySide2.QtCore.QRunnable', 'int'), + "QThreadPool.tryStart": ('PySide2.QtCore.QRunnable',), + "QThreadPool.tryTake": ('PySide2.QtCore.QRunnable',), + "QThreadPool.waitForDone": ('int',), + + # class PySide2.QtCore.QTime: + "QTime.__init__": [(), ('PySide2.QtCore.QTime',), ('int', 'int', 'int', 'int')], + "QTime.__copy__": (), + "QTime.__reduce__": (), + "QTime.addMSecs": ('int',), + "QTime.addSecs": ('int',), + "QTime.currentTime": (), + "QTime.elapsed": (), + "QTime.fromMSecsSinceStartOfDay": ('int',), + "QTime.fromString": [('str', 'PySide2.QtCore.Qt.DateFormat'), ('str', 'str')], + "QTime.hour": (), + "QTime.isNull": (), + "QTime.isValid": [(), ('int', 'int', 'int', 'int')], + "QTime.minute": (), + "QTime.msec": (), + "QTime.msecsSinceStartOfDay": (), + "QTime.msecsTo": ('PySide2.QtCore.QTime',), + "QTime.restart": (), + "QTime.second": (), + "QTime.secsTo": ('PySide2.QtCore.QTime',), + "QTime.setHMS": ('int', 'int', 'int', 'int'), + "QTime.start": (), + "QTime.toPython": (), + "QTime.toString": [('PySide2.QtCore.Qt.DateFormat',), ('str',)], + + # class PySide2.QtCore.QTimeLine: + "QTimeLine.__init__": ('int', 'PySide2.QtCore.QObject'), + "QTimeLine.currentFrame": (), + "QTimeLine.currentTime": (), + "QTimeLine.currentValue": (), + "QTimeLine.curveShape": (), + "QTimeLine.direction": (), + "QTimeLine.duration": (), + "QTimeLine.easingCurve": (), + "QTimeLine.endFrame": (), + "QTimeLine.frameForTime": ('int',), + "QTimeLine.loopCount": (), + "QTimeLine.resume": (), + "QTimeLine.setCurrentTime": ('int',), + "QTimeLine.setCurveShape": ('PySide2.QtCore.QTimeLine.CurveShape',), + "QTimeLine.setDirection": ('PySide2.QtCore.QTimeLine.Direction',), + "QTimeLine.setDuration": ('int',), + "QTimeLine.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QTimeLine.setEndFrame": ('int',), + "QTimeLine.setFrameRange": ('int', 'int'), + "QTimeLine.setLoopCount": ('int',), + "QTimeLine.setPaused": ('bool',), + "QTimeLine.setStartFrame": ('int',), + "QTimeLine.setUpdateInterval": ('int',), + "QTimeLine.start": (), + "QTimeLine.startFrame": (), + "QTimeLine.state": (), + "QTimeLine.stop": (), + "QTimeLine.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimeLine.toggleDirection": (), + "QTimeLine.updateInterval": (), + "QTimeLine.valueForTime": ('int',), + + # class PySide2.QtCore.QTimeZone: + "QTimeZone.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'int', 'str', 'str', 'PySide2.QtCore.QLocale.Country', 'str'), ('PySide2.QtCore.QTimeZone',), ('int',)], + "QTimeZone.__copy__": (), + "QTimeZone.abbreviation": ('PySide2.QtCore.QDateTime',), + "QTimeZone.availableTimeZoneIds": [(), ('PySide2.QtCore.QLocale.Country',), ('int',)], + "QTimeZone.comment": (), + "QTimeZone.country": (), + "QTimeZone.daylightTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.displayName": [('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale'), ('PySide2.QtCore.QTimeZone.TimeType', 'PySide2.QtCore.QTimeZone.NameType', 'PySide2.QtCore.QLocale')], + "QTimeZone.hasDaylightTime": (), + "QTimeZone.hasTransitions": (), + "QTimeZone.ianaIdToWindowsId": ('PySide2.QtCore.QByteArray',), + "QTimeZone.id": (), + "QTimeZone.isDaylightTime": ('PySide2.QtCore.QDateTime',), + "QTimeZone.isTimeZoneIdAvailable": ('PySide2.QtCore.QByteArray',), + "QTimeZone.isValid": (), + "QTimeZone.nextTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetData": ('PySide2.QtCore.QDateTime',), + "QTimeZone.offsetFromUtc": ('PySide2.QtCore.QDateTime',), + "QTimeZone.previousTransition": ('PySide2.QtCore.QDateTime',), + "QTimeZone.standardTimeOffset": ('PySide2.QtCore.QDateTime',), + "QTimeZone.swap": ('PySide2.QtCore.QTimeZone',), + "QTimeZone.systemTimeZone": (), + "QTimeZone.systemTimeZoneId": (), + "QTimeZone.transitions": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QTimeZone.utc": (), + "QTimeZone.windowsIdToDefaultIanaId": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + "QTimeZone.windowsIdToIanaIds": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QLocale.Country')], + + # class PySide2.QtCore.QTimer: + "QTimer.__init__": ('PySide2.QtCore.QObject',), + "QTimer.interval": (), + "QTimer.isActive": (), + "QTimer.isSingleShot": (), + "QTimer.killTimer": ('int',), + "QTimer.remainingTime": (), + "QTimer.setInterval": ('int',), + "QTimer.setSingleShot": ('bool',), + "QTimer.setTimerType": ('PySide2.QtCore.Qt.TimerType',), + "QTimer.singleShot": [('int', 'Callable'), ('int', 'PySide2.QtCore.QObject', 'str'), ('int', 'PySide2.QtCore.Qt.TimerType', 'PySide2.QtCore.QObject', 'str')], + "QTimer.start": [(), ('int',)], + "QTimer.stop": (), + "QTimer.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTimer.timerId": (), + "QTimer.timerType": (), + + # class PySide2.QtCore.QTimerEvent: + "QTimerEvent.__init__": ('int',), + "QTimerEvent.timerId": (), + + # class PySide2.QtCore.QTranslator: + "QTranslator.__init__": ('PySide2.QtCore.QObject',), + "QTranslator.isEmpty": (), + "QTranslator.load": [('PySide2.QtCore.QLocale', 'str', 'str', 'str', 'str'), ('Union[str, int]', 'int', 'str'), ('str', 'str', 'str', 'str')], + "QTranslator.translate": ('str', 'str', 'str', 'int'), + + # class PySide2.QtCore.QUrl: + "QUrl.__init__": [(), ('PySide2.QtCore.QUrl',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.__copy__": (), + "QUrl.__reduce__": (), + "QUrl.adjusted": ('FormattingOptions',), + "QUrl.authority": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.clear": (), + "QUrl.errorString": (), + "QUrl.fileName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fragment": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.fromAce": ('PySide2.QtCore.QByteArray',), + "QUrl.fromEncoded": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromLocalFile": ('str',), + "QUrl.fromPercentEncoding": ('PySide2.QtCore.QByteArray',), + "QUrl.fromStringList": ('List[str]', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.fromUserInput": [('str',), ('str', 'str', 'UserInputResolutionOptions')], + "QUrl.hasFragment": (), + "QUrl.hasQuery": (), + "QUrl.host": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.idnWhitelist": (), + "QUrl.isEmpty": (), + "QUrl.isLocalFile": (), + "QUrl.isParentOf": ('PySide2.QtCore.QUrl',), + "QUrl.isRelative": (), + "QUrl.isValid": (), + "QUrl.matches": ('PySide2.QtCore.QUrl', 'FormattingOptions'), + "QUrl.password": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.path": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.port": ('int',), + "QUrl.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.resolved": ('PySide2.QtCore.QUrl',), + "QUrl.scheme": (), + "QUrl.setAuthority": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setFragment": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setHost": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setIdnWhitelist": ('List[str]',), + "QUrl.setPassword": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPath": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setPort": ('int',), + "QUrl.setQuery": [('PySide2.QtCore.QUrlQuery',), ('str', 'PySide2.QtCore.QUrl.ParsingMode')], + "QUrl.setScheme": ('str',), + "QUrl.setUrl": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserInfo": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.setUserName": ('str', 'PySide2.QtCore.QUrl.ParsingMode'), + "QUrl.swap": ('PySide2.QtCore.QUrl',), + "QUrl.toAce": ('str',), + "QUrl.toDisplayString": ('FormattingOptions',), + "QUrl.toEncoded": ('FormattingOptions',), + "QUrl.toLocalFile": (), + "QUrl.toPercentEncoding": ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QUrl.toString": ('FormattingOptions',), + "QUrl.toStringList": ('list', 'FormattingOptions'), + "QUrl.topLevelDomain": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.url": ('FormattingOptions',), + "QUrl.userInfo": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrl.userName": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QUrlQuery: + "QUrlQuery.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrlQuery',), ('str',)], + "QUrlQuery.__copy__": (), + "QUrlQuery.addQueryItem": ('str', 'str'), + "QUrlQuery.allQueryItemValues": ('str', 'PySide2.QtCore.QUrl.ComponentFormattingOption'), + "QUrlQuery.clear": (), + "QUrlQuery.defaultQueryPairDelimiter": (), + "QUrlQuery.defaultQueryValueDelimiter": (), + "QUrlQuery.hasQueryItem": ('str',), + "QUrlQuery.isEmpty": (), + "QUrlQuery.query": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrlQuery.queryItemValue": ('str', 'PySide2.QtCore.QUrl.ComponentFormattingOption'), + "QUrlQuery.queryItems": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + "QUrlQuery.queryPairDelimiter": (), + "QUrlQuery.queryValueDelimiter": (), + "QUrlQuery.removeAllQueryItems": ('str',), + "QUrlQuery.removeQueryItem": ('str',), + "QUrlQuery.setQuery": ('str',), + "QUrlQuery.setQueryDelimiters": ('Union[str, int]', 'Union[str, int]'), + "QUrlQuery.setQueryItems": ('list',), + "QUrlQuery.swap": ('PySide2.QtCore.QUrlQuery',), + "QUrlQuery.toString": ('PySide2.QtCore.QUrl.ComponentFormattingOption',), + + # class PySide2.QtCore.QUuid: + "QUuid.__init__": [(), ('PySide2.QtCore.QByteArray',), ('int', 'int', 'int', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), ('str',)], + "QUuid.__copy__": (), + "QUuid.__reduce__": (), + "QUuid.createUuid": (), + "QUuid.createUuidV3": [('PySide2.QtCore.QUuid', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QUuid', 'str')], + "QUuid.createUuidV5": [('PySide2.QtCore.QUuid', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QUuid', 'str')], + "QUuid.fromRfc4122": ('PySide2.QtCore.QByteArray',), + "QUuid.isNull": (), + "QUuid.toByteArray": (), + "QUuid.toRfc4122": (), + "QUuid.toString": (), + "QUuid.variant": (), + "QUuid.version": (), + + # class PySide2.QtCore.QVariantAnimation: + "QVariantAnimation.__init__": ('PySide2.QtCore.QObject',), + "QVariantAnimation.currentValue": (), + "QVariantAnimation.duration": (), + "QVariantAnimation.easingCurve": (), + "QVariantAnimation.endValue": (), + "QVariantAnimation.event": ('PySide2.QtCore.QEvent',), + "QVariantAnimation.interpolated": ('Any', 'Any', 'float'), + "QVariantAnimation.keyValueAt": ('float',), + "QVariantAnimation.setDuration": ('int',), + "QVariantAnimation.setEasingCurve": ('PySide2.QtCore.QEasingCurve',), + "QVariantAnimation.setEndValue": ('Any',), + "QVariantAnimation.setKeyValueAt": ('float', 'Any'), + "QVariantAnimation.setStartValue": ('Any',), + "QVariantAnimation.startValue": (), + "QVariantAnimation.updateCurrentTime": ('int',), + "QVariantAnimation.updateCurrentValue": ('Any',), + "QVariantAnimation.updateState": ('PySide2.QtCore.QAbstractAnimation.State', 'PySide2.QtCore.QAbstractAnimation.State'), + + # class PySide2.QtCore.QVersionNumber: + "QVersionNumber.__init__": [(), ('int',), ('int', 'int'), ('int', 'int', 'int'), ('list',)], + "QVersionNumber.__copy__": (), + "QVersionNumber.commonPrefix": ('PySide2.QtCore.QVersionNumber', 'PySide2.QtCore.QVersionNumber'), + "QVersionNumber.compare": ('PySide2.QtCore.QVersionNumber', 'PySide2.QtCore.QVersionNumber'), + "QVersionNumber.fromString": ('str', 'int'), + "QVersionNumber.isNormalized": (), + "QVersionNumber.isNull": (), + "QVersionNumber.isPrefixOf": ('PySide2.QtCore.QVersionNumber',), + "QVersionNumber.majorVersion": (), + "QVersionNumber.microVersion": (), + "QVersionNumber.minorVersion": (), + "QVersionNumber.normalized": (), + "QVersionNumber.segmentAt": ('int',), + "QVersionNumber.segmentCount": (), + "QVersionNumber.segments": (), + "QVersionNumber.toString": (), + + # class PySide2.QtCore.QWaitCondition: + "QWaitCondition.__init__": (), + "QWaitCondition.notify_all": (), + "QWaitCondition.notify_one": (), + "QWaitCondition.wait": [('PySide2.QtCore.QMutex', 'int'), ('PySide2.QtCore.QReadWriteLock', 'int')], + "QWaitCondition.wakeAll": (), + "QWaitCondition.wakeOne": (), + + # class PySide2.QtCore.QWinEventNotifier: + "QWinEventNotifier.__init__": [('PySide2.QtCore.QObject',), ('int', 'PySide2.QtCore.QObject')], + "QWinEventNotifier.event": ('PySide2.QtCore.QEvent',), + "QWinEventNotifier.handle": (), + "QWinEventNotifier.isEnabled": (), + "QWinEventNotifier.setEnabled": ('bool',), + "QWinEventNotifier.setHandle": ('int',), + + # class PySide2.QtCore.QWriteLocker: + "QWriteLocker.__init__": ('PySide2.QtCore.QReadWriteLock',), + "QWriteLocker.__enter__": (), + "QWriteLocker.__exit__": ('object', 'object', 'object'), + "QWriteLocker.readWriteLock": (), + "QWriteLocker.relock": (), + "QWriteLocker.unlock": (), + + # class PySide2.QtCore.QXmlStreamAttribute: + "QXmlStreamAttribute.__init__": [(), ('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttribute.__copy__": (), + "QXmlStreamAttribute.isDefault": (), + "QXmlStreamAttribute.name": (), + "QXmlStreamAttribute.namespaceUri": (), + "QXmlStreamAttribute.prefix": (), + "QXmlStreamAttribute.qualifiedName": (), + "QXmlStreamAttribute.value": (), + + # class PySide2.QtCore.QXmlStreamAttributes: + "QXmlStreamAttributes.__init__": [(), ('PySide2.QtCore.QXmlStreamAttributes',)], + "QXmlStreamAttributes.__copy__": (), + "QXmlStreamAttributes.append": [('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamAttributes.at": ('int',), + "QXmlStreamAttributes.capacity": (), + "QXmlStreamAttributes.clear": (), + "QXmlStreamAttributes.constData": (), + "QXmlStreamAttributes.constFirst": (), + "QXmlStreamAttributes.constLast": (), + "QXmlStreamAttributes.contains": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.count": [(), ('PySide2.QtCore.QXmlStreamAttribute',)], + "QXmlStreamAttributes.data": (), + "QXmlStreamAttributes.empty": (), + "QXmlStreamAttributes.endsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.fill": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.first": (), + "QXmlStreamAttributes.front": (), + "QXmlStreamAttributes.hasAttribute": [('str',), ('str', 'str')], + "QXmlStreamAttributes.indexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.insert": [('int', 'PySide2.QtCore.QXmlStreamAttribute'), ('int', 'int', 'PySide2.QtCore.QXmlStreamAttribute')], + "QXmlStreamAttributes.isEmpty": (), + "QXmlStreamAttributes.isSharedWith": ('list',), + "QXmlStreamAttributes.last": (), + "QXmlStreamAttributes.lastIndexOf": ('PySide2.QtCore.QXmlStreamAttribute', 'int'), + "QXmlStreamAttributes.length": (), + "QXmlStreamAttributes.mid": ('int', 'int'), + "QXmlStreamAttributes.move": ('int', 'int'), + "QXmlStreamAttributes.prepend": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.remove": [('int',), ('int', 'int')], + "QXmlStreamAttributes.removeAll": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.removeAt": ('int',), + "QXmlStreamAttributes.removeFirst": (), + "QXmlStreamAttributes.removeLast": (), + "QXmlStreamAttributes.removeOne": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.replace": ('int', 'PySide2.QtCore.QXmlStreamAttribute'), + "QXmlStreamAttributes.reserve": ('int',), + "QXmlStreamAttributes.resize": ('int',), + "QXmlStreamAttributes.setSharable": ('bool',), + "QXmlStreamAttributes.size": (), + "QXmlStreamAttributes.squeeze": (), + "QXmlStreamAttributes.startsWith": ('PySide2.QtCore.QXmlStreamAttribute',), + "QXmlStreamAttributes.swap": ('list',), + "QXmlStreamAttributes.takeAt": ('int',), + "QXmlStreamAttributes.takeFirst": (), + "QXmlStreamAttributes.takeLast": (), + "QXmlStreamAttributes.value": [('str',), ('str', 'str')], + + # class PySide2.QtCore.QXmlStreamEntityDeclaration: + "QXmlStreamEntityDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamEntityDeclaration',)], + "QXmlStreamEntityDeclaration.__copy__": (), + "QXmlStreamEntityDeclaration.name": (), + "QXmlStreamEntityDeclaration.notationName": (), + "QXmlStreamEntityDeclaration.publicId": (), + "QXmlStreamEntityDeclaration.systemId": (), + "QXmlStreamEntityDeclaration.value": (), + + # class PySide2.QtCore.QXmlStreamEntityResolver: + "QXmlStreamEntityResolver.__init__": (), + "QXmlStreamEntityResolver.resolveEntity": ('str', 'str'), + "QXmlStreamEntityResolver.resolveUndeclaredEntity": ('str',), + + # class PySide2.QtCore.QXmlStreamNamespaceDeclaration: + "QXmlStreamNamespaceDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), ('str', 'str')], + "QXmlStreamNamespaceDeclaration.__copy__": (), + "QXmlStreamNamespaceDeclaration.namespaceUri": (), + "QXmlStreamNamespaceDeclaration.prefix": (), + + # class PySide2.QtCore.QXmlStreamNotationDeclaration: + "QXmlStreamNotationDeclaration.__init__": [(), ('PySide2.QtCore.QXmlStreamNotationDeclaration',)], + "QXmlStreamNotationDeclaration.__copy__": (), + "QXmlStreamNotationDeclaration.name": (), + "QXmlStreamNotationDeclaration.publicId": (), + "QXmlStreamNotationDeclaration.systemId": (), + + # class PySide2.QtCore.QXmlStreamReader: + "QXmlStreamReader.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',), ('str',)], + "QXmlStreamReader.addData": [('PySide2.QtCore.QByteArray',), ('str',)], + "QXmlStreamReader.addExtraNamespaceDeclaration": ('PySide2.QtCore.QXmlStreamNamespaceDeclaration',), + "QXmlStreamReader.addExtraNamespaceDeclarations": ('list',), + "QXmlStreamReader.atEnd": (), + "QXmlStreamReader.attributes": (), + "QXmlStreamReader.characterOffset": (), + "QXmlStreamReader.clear": (), + "QXmlStreamReader.columnNumber": (), + "QXmlStreamReader.device": (), + "QXmlStreamReader.documentEncoding": (), + "QXmlStreamReader.documentVersion": (), + "QXmlStreamReader.dtdName": (), + "QXmlStreamReader.dtdPublicId": (), + "QXmlStreamReader.dtdSystemId": (), + "QXmlStreamReader.entityDeclarations": (), + "QXmlStreamReader.entityResolver": (), + "QXmlStreamReader.error": (), + "QXmlStreamReader.errorString": (), + "QXmlStreamReader.hasError": (), + "QXmlStreamReader.isCDATA": (), + "QXmlStreamReader.isCharacters": (), + "QXmlStreamReader.isComment": (), + "QXmlStreamReader.isDTD": (), + "QXmlStreamReader.isEndDocument": (), + "QXmlStreamReader.isEndElement": (), + "QXmlStreamReader.isEntityReference": (), + "QXmlStreamReader.isProcessingInstruction": (), + "QXmlStreamReader.isStandaloneDocument": (), + "QXmlStreamReader.isStartDocument": (), + "QXmlStreamReader.isStartElement": (), + "QXmlStreamReader.isWhitespace": (), + "QXmlStreamReader.lineNumber": (), + "QXmlStreamReader.name": (), + "QXmlStreamReader.namespaceDeclarations": (), + "QXmlStreamReader.namespaceProcessing": (), + "QXmlStreamReader.namespaceUri": (), + "QXmlStreamReader.notationDeclarations": (), + "QXmlStreamReader.prefix": (), + "QXmlStreamReader.processingInstructionData": (), + "QXmlStreamReader.processingInstructionTarget": (), + "QXmlStreamReader.qualifiedName": (), + "QXmlStreamReader.raiseError": ('str',), + "QXmlStreamReader.readElementText": ('PySide2.QtCore.QXmlStreamReader.ReadElementTextBehaviour',), + "QXmlStreamReader.readNext": (), + "QXmlStreamReader.readNextStartElement": (), + "QXmlStreamReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamReader.setEntityResolver": ('PySide2.QtCore.QXmlStreamEntityResolver',), + "QXmlStreamReader.setNamespaceProcessing": ('bool',), + "QXmlStreamReader.skipCurrentElement": (), + "QXmlStreamReader.text": (), + "QXmlStreamReader.tokenString": (), + "QXmlStreamReader.tokenType": (), + + # class PySide2.QtCore.QXmlStreamWriter: + "QXmlStreamWriter.__init__": [(), ('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QIODevice',)], + "QXmlStreamWriter.autoFormatting": (), + "QXmlStreamWriter.autoFormattingIndent": (), + "QXmlStreamWriter.codec": (), + "QXmlStreamWriter.device": (), + "QXmlStreamWriter.hasError": (), + "QXmlStreamWriter.setAutoFormatting": ('bool',), + "QXmlStreamWriter.setAutoFormattingIndent": ('int',), + "QXmlStreamWriter.setCodec": [('PySide2.QtCore.QTextCodec',), ('str',)], + "QXmlStreamWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QXmlStreamWriter.writeAttribute": [('PySide2.QtCore.QXmlStreamAttribute',), ('str', 'str'), ('str', 'str', 'str')], + "QXmlStreamWriter.writeAttributes": ('PySide2.QtCore.QXmlStreamAttributes',), + "QXmlStreamWriter.writeCDATA": ('str',), + "QXmlStreamWriter.writeCharacters": ('str',), + "QXmlStreamWriter.writeComment": ('str',), + "QXmlStreamWriter.writeCurrentToken": ('PySide2.QtCore.QXmlStreamReader',), + "QXmlStreamWriter.writeDTD": ('str',), + "QXmlStreamWriter.writeDefaultNamespace": ('str',), + "QXmlStreamWriter.writeEmptyElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeEndDocument": (), + "QXmlStreamWriter.writeEndElement": (), + "QXmlStreamWriter.writeEntityReference": ('str',), + "QXmlStreamWriter.writeNamespace": ('str', 'str'), + "QXmlStreamWriter.writeProcessingInstruction": ('str', 'str'), + "QXmlStreamWriter.writeStartDocument": [(), ('str',), ('str', 'bool')], + "QXmlStreamWriter.writeStartElement": [('str',), ('str', 'str')], + "QXmlStreamWriter.writeTextElement": [('str', 'str'), ('str', 'str', 'str')], + + # class PySide2.QtCore.QtMsgType: + + # class PySide2.QtCore.Signal: + + # class PySide2.QtCore.Slot: + }) + +# Module PySide2.QtGui +if "PySide2.QtGui" in sys.modules: + dict.update({ + + # class PySide2.QtGui.QAbstractOpenGLFunctions: + "QAbstractOpenGLFunctions.__init__": (), + "QAbstractOpenGLFunctions.initializeOpenGLFunctions": (), + "QAbstractOpenGLFunctions.isInitialized": (), + "QAbstractOpenGLFunctions.owningContext": (), + "QAbstractOpenGLFunctions.setOwningContext": ('PySide2.QtGui.QOpenGLContext',), + + # class PySide2.QtGui.QAbstractTextDocumentLayout: + "QAbstractTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QAbstractTextDocumentLayout.anchorAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QAbstractTextDocumentLayout.document": (), + "QAbstractTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QAbstractTextDocumentLayout.documentSize": (), + "QAbstractTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QAbstractTextDocumentLayout.drawInlineObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.format": ('int',), + "QAbstractTextDocumentLayout.formatAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.formatIndex": ('int',), + "QAbstractTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QAbstractTextDocumentLayout.handlerForObject": ('int',), + "QAbstractTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QAbstractTextDocumentLayout.imageAt": ('PySide2.QtCore.QPointF',), + "QAbstractTextDocumentLayout.pageCount": (), + "QAbstractTextDocumentLayout.paintDevice": (), + "QAbstractTextDocumentLayout.positionInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.registerHandler": ('int', 'PySide2.QtCore.QObject'), + "QAbstractTextDocumentLayout.resizeInlineObject": ('PySide2.QtGui.QTextInlineObject', 'int', 'PySide2.QtGui.QTextFormat'), + "QAbstractTextDocumentLayout.setPaintDevice": ('PySide2.QtGui.QPaintDevice',), + "QAbstractTextDocumentLayout.unregisterHandler": ('int', 'PySide2.QtCore.QObject'), + + # class PySide2.QtGui.QAccessible: + "QAccessible.__copy__": (), + "QAccessible.accessibleInterface": ('int',), + "QAccessible.cleanup": (), + "QAccessible.deleteAccessibleInterface": ('int',), + "QAccessible.isActive": (), + "QAccessible.qAccessibleTextBoundaryHelper": ('PySide2.QtGui.QTextCursor', 'PySide2.QtGui.QAccessible.TextBoundaryType'), + "QAccessible.queryAccessibleInterface": ('PySide2.QtCore.QObject',), + "QAccessible.registerAccessibleInterface": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessible.setActive": ('bool',), + "QAccessible.setRootObject": ('PySide2.QtCore.QObject',), + "QAccessible.uniqueId": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessible.updateAccessibility": ('PySide2.QtGui.QAccessibleEvent',), + + # class PySide2.QtGui.QAccessibleEvent: + "QAccessibleEvent.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtGui.QAccessible.Event'), ('PySide2.QtGui.QAccessibleInterface', 'PySide2.QtGui.QAccessible.Event')], + "QAccessibleEvent.accessibleInterface": (), + "QAccessibleEvent.child": (), + "QAccessibleEvent.object": (), + "QAccessibleEvent.setChild": ('int',), + "QAccessibleEvent.type": (), + "QAccessibleEvent.uniqueId": (), + + # class PySide2.QtGui.QAccessibleInterface: + "QAccessibleInterface.__init__": (), + "QAccessibleInterface.backgroundColor": (), + "QAccessibleInterface.child": ('int',), + "QAccessibleInterface.childAt": ('int', 'int'), + "QAccessibleInterface.childCount": (), + "QAccessibleInterface.focusChild": (), + "QAccessibleInterface.foregroundColor": (), + "QAccessibleInterface.indexOfChild": ('PySide2.QtGui.QAccessibleInterface',), + "QAccessibleInterface.interface_cast": ('PySide2.QtGui.QAccessible.InterfaceType',), + "QAccessibleInterface.isValid": (), + "QAccessibleInterface.object": (), + "QAccessibleInterface.parent": (), + "QAccessibleInterface.rect": (), + "QAccessibleInterface.role": (), + "QAccessibleInterface.setText": ('PySide2.QtGui.QAccessible.Text', 'str'), + "QAccessibleInterface.state": (), + "QAccessibleInterface.text": ('PySide2.QtGui.QAccessible.Text',), + "QAccessibleInterface.virtual_hook": ('int', 'int'), + "QAccessibleInterface.window": (), + + # class PySide2.QtGui.QActionEvent: + + # class PySide2.QtGui.QBackingStore: + "QBackingStore.__init__": ('PySide2.QtGui.QWindow',), + "QBackingStore.beginPaint": ('PySide2.QtGui.QRegion',), + "QBackingStore.endPaint": (), + "QBackingStore.flush": ('PySide2.QtGui.QRegion', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint'), + "QBackingStore.hasStaticContents": (), + "QBackingStore.paintDevice": (), + "QBackingStore.resize": ('PySide2.QtCore.QSize',), + "QBackingStore.scroll": ('PySide2.QtGui.QRegion', 'int', 'int'), + "QBackingStore.setStaticContents": ('PySide2.QtGui.QRegion',), + "QBackingStore.size": (), + "QBackingStore.staticContents": (), + "QBackingStore.window": (), + + # class PySide2.QtGui.QBitmap: + "QBitmap.__init__": [(), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str')], + "QBitmap.__copy__": (), + "QBitmap.clear": (), + "QBitmap.fromData": ('PySide2.QtCore.QSize', 'Union[str, int]', 'PySide2.QtGui.QImage.Format'), + "QBitmap.fromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QBitmap.swap": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPixmap',)], + "QBitmap.transformed": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform',)], + + # class PySide2.QtGui.QBrush: + "QBrush.__init__": [(), ('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.Qt.GlobalColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QBrush',), ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QPixmap'), ('PySide2.QtGui.QGradient',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',)], + "QBrush.__copy__": (), + "QBrush.color": (), + "QBrush.gradient": (), + "QBrush.isOpaque": (), + "QBrush.matrix": (), + "QBrush.setColor": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',)], + "QBrush.setMatrix": ('PySide2.QtGui.QMatrix',), + "QBrush.setStyle": ('PySide2.QtCore.Qt.BrushStyle',), + "QBrush.setTexture": ('PySide2.QtGui.QPixmap',), + "QBrush.setTextureImage": ('PySide2.QtGui.QImage',), + "QBrush.setTransform": ('PySide2.QtGui.QTransform',), + "QBrush.style": (), + "QBrush.swap": ('PySide2.QtGui.QBrush',), + "QBrush.texture": (), + "QBrush.textureImage": (), + "QBrush.transform": (), + + # class PySide2.QtGui.QClipboard: + "QClipboard.clear": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.image": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.mimeData": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.ownsClipboard": (), + "QClipboard.ownsFindBuffer": (), + "QClipboard.ownsSelection": (), + "QClipboard.pixmap": ('PySide2.QtGui.QClipboard.Mode',), + "QClipboard.setImage": ('PySide2.QtGui.QImage', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.setText": ('str', 'PySide2.QtGui.QClipboard.Mode'), + "QClipboard.supportsFindBuffer": (), + "QClipboard.supportsSelection": (), + "QClipboard.text": [('PySide2.QtGui.QClipboard.Mode',), ('str', 'PySide2.QtGui.QClipboard.Mode')], + + # class PySide2.QtGui.QCloseEvent: + "QCloseEvent.__init__": (), + + # class PySide2.QtGui.QColor: + "QColor.__init__": [(), ('Any',), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',), ('int', 'int', 'int', 'int'), ('str',)], + "QColor.__copy__": (), + "QColor.__reduce__": (), + "QColor.__setstate__": ('object',), + "QColor.alpha": (), + "QColor.alphaF": (), + "QColor.black": (), + "QColor.blackF": (), + "QColor.blue": (), + "QColor.blueF": (), + "QColor.colorNames": (), + "QColor.convertTo": ('PySide2.QtGui.QColor.Spec',), + "QColor.cyan": (), + "QColor.cyanF": (), + "QColor.dark": ('int',), + "QColor.darker": ('int',), + "QColor.fromCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.fromCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.fromHsl": ('int', 'int', 'int', 'int'), + "QColor.fromHslF": ('float', 'float', 'float', 'float'), + "QColor.fromHsv": ('int', 'int', 'int', 'int'), + "QColor.fromHsvF": ('float', 'float', 'float', 'float'), + "QColor.fromRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.fromRgbF": ('float', 'float', 'float', 'float'), + "QColor.fromRgba": ('int',), + "QColor.fromRgba64": ('int', 'int', 'int', 'int'), + "QColor.getCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.getCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.getHsl": ('int', 'int', 'int', 'int'), + "QColor.getHslF": ('float', 'float', 'float', 'float'), + "QColor.getHsv": ('int', 'int', 'int', 'int'), + "QColor.getHsvF": ('float', 'float', 'float', 'float'), + "QColor.getRgb": ('int', 'int', 'int', 'int'), + "QColor.getRgbF": ('float', 'float', 'float', 'float'), + "QColor.green": (), + "QColor.greenF": (), + "QColor.hslHue": (), + "QColor.hslHueF": (), + "QColor.hslSaturation": (), + "QColor.hslSaturationF": (), + "QColor.hsvHue": (), + "QColor.hsvHueF": (), + "QColor.hsvSaturation": (), + "QColor.hsvSaturationF": (), + "QColor.hue": (), + "QColor.hueF": (), + "QColor.isValid": (), + "QColor.isValidColor": ('str',), + "QColor.light": ('int',), + "QColor.lighter": ('int',), + "QColor.lightness": (), + "QColor.lightnessF": (), + "QColor.magenta": (), + "QColor.magentaF": (), + "QColor.name": [(), ('PySide2.QtGui.QColor.NameFormat',)], + "QColor.red": (), + "QColor.redF": (), + "QColor.rgb": (), + "QColor.rgba": (), + "QColor.saturation": (), + "QColor.saturationF": (), + "QColor.setAlpha": ('int',), + "QColor.setAlphaF": ('float',), + "QColor.setBlue": ('int',), + "QColor.setBlueF": ('float',), + "QColor.setCmyk": ('int', 'int', 'int', 'int', 'int'), + "QColor.setCmykF": ('float', 'float', 'float', 'float', 'float'), + "QColor.setGreen": ('int',), + "QColor.setGreenF": ('float',), + "QColor.setHsl": ('int', 'int', 'int', 'int'), + "QColor.setHslF": ('float', 'float', 'float', 'float'), + "QColor.setHsv": ('int', 'int', 'int', 'int'), + "QColor.setHsvF": ('float', 'float', 'float', 'float'), + "QColor.setNamedColor": ('str',), + "QColor.setRed": ('int',), + "QColor.setRedF": ('float',), + "QColor.setRgb": [('int',), ('int', 'int', 'int', 'int')], + "QColor.setRgbF": ('float', 'float', 'float', 'float'), + "QColor.setRgba": ('int',), + "QColor.spec": (), + "QColor.toCmyk": (), + "QColor.toHsl": (), + "QColor.toHsv": (), + "QColor.toRgb": (), + "QColor.toTuple": (), + "QColor.value": (), + "QColor.valueF": (), + "QColor.yellow": (), + "QColor.yellowF": (), + + # class PySide2.QtGui.QConicalGradient: + "QConicalGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QConicalGradient',), ('float', 'float', 'float')], + "QConicalGradient.__copy__": (), + "QConicalGradient.angle": (), + "QConicalGradient.center": (), + "QConicalGradient.setAngle": ('float',), + "QConicalGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + + # class PySide2.QtGui.QContextMenuEvent: + "QContextMenuEvent.__init__": [('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QContextMenuEvent.Reason', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'KeyboardModifiers')], + "QContextMenuEvent.globalPos": (), + "QContextMenuEvent.globalX": (), + "QContextMenuEvent.global""Y": (), + "QContextMenuEvent.pos": (), + "QContextMenuEvent.reason": (), + "QContextMenuEvent.x": (), + "QContextMenuEvent.y": (), + + # class PySide2.QtGui.QCursor: + "QCursor.__init__": [(), ('PySide2.QtCore.Qt.CursorShape',), ('PySide2.QtGui.QBitmap', 'PySide2.QtGui.QBitmap', 'int', 'int'), ('PySide2.QtGui.QCursor',), ('PySide2.QtGui.QPixmap', 'int', 'int')], + "QCursor.__copy__": (), + "QCursor.bitmap": (), + "QCursor.hotSpot": (), + "QCursor.mask": (), + "QCursor.pixmap": (), + "QCursor.pos": [(), ('PySide2.QtGui.QScreen',)], + "QCursor.setPos": [('PySide2.QtCore.QPoint',), ('PySide2.QtGui.QScreen', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QScreen', 'int', 'int'), ('int', 'int')], + "QCursor.setShape": ('PySide2.QtCore.Qt.CursorShape',), + "QCursor.shape": (), + "QCursor.swap": ('PySide2.QtGui.QCursor',), + + # class PySide2.QtGui.QDesktopServices: + "QDesktopServices.__init__": (), + "QDesktopServices.openUrl": ('PySide2.QtCore.QUrl',), + "QDesktopServices.setUrlHandler": ('str', 'PySide2.QtCore.QObject', 'str'), + "QDesktopServices.unsetUrlHandler": ('str',), + + # class PySide2.QtGui.QDoubleValidator: + "QDoubleValidator.__init__": [('PySide2.QtCore.QObject',), ('float', 'float', 'int', 'PySide2.QtCore.QObject')], + "QDoubleValidator.bottom": (), + "QDoubleValidator.decimals": (), + "QDoubleValidator.notation": (), + "QDoubleValidator.setBottom": ('float',), + "QDoubleValidator.setDecimals": ('int',), + "QDoubleValidator.setNotation": ('PySide2.QtGui.QDoubleValidator.Notation',), + "QDoubleValidator.setRange": ('float', 'float', 'int'), + "QDoubleValidator.setTop": ('float',), + "QDoubleValidator.top": (), + "QDoubleValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QDrag: + "QDrag.__init__": ('PySide2.QtCore.QObject',), + "QDrag.cancel": (), + "QDrag.defaultAction": (), + "QDrag.dragCursor": ('PySide2.QtCore.Qt.DropAction',), + "QDrag.exec_": [('DropActions',), ('DropActions', 'PySide2.QtCore.Qt.DropAction')], + "QDrag.hotSpot": (), + "QDrag.mimeData": (), + "QDrag.pixmap": (), + "QDrag.setDragCursor": ('PySide2.QtGui.QPixmap', 'PySide2.QtCore.Qt.DropAction'), + "QDrag.setHotSpot": ('PySide2.QtCore.QPoint',), + "QDrag.setMimeData": ('PySide2.QtCore.QMimeData',), + "QDrag.setPixmap": ('PySide2.QtGui.QPixmap',), + "QDrag.source": (), + "QDrag.start": ('DropActions',), + "QDrag.supportedActions": (), + "QDrag.target": (), + + # class PySide2.QtGui.QDragEnterEvent: + "QDragEnterEvent.__init__": ('PySide2.QtCore.QPoint', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers'), + + # class PySide2.QtGui.QDragLeaveEvent: + "QDragLeaveEvent.__init__": (), + + # class PySide2.QtGui.QDragMoveEvent: + "QDragMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDragMoveEvent.accept": [(), ('PySide2.QtCore.QRect',)], + "QDragMoveEvent.answerRect": (), + "QDragMoveEvent.ignore": [(), ('PySide2.QtCore.QRect',)], + + # class PySide2.QtGui.QDropEvent: + "QDropEvent.__init__": ('PySide2.QtCore.QPointF', 'DropActions', 'PySide2.QtCore.QMimeData', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.QEvent.Type'), + "QDropEvent.acceptProposedAction": (), + "QDropEvent.dropAction": (), + "QDropEvent.keyboardModifiers": (), + "QDropEvent.mimeData": (), + "QDropEvent.mouseButtons": (), + "QDropEvent.pos": (), + "QDropEvent.posF": (), + "QDropEvent.possibleActions": (), + "QDropEvent.proposedAction": (), + "QDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QDropEvent.source": (), + + # class PySide2.QtGui.QEnterEvent: + "QEnterEvent.__init__": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), + "QEnterEvent.globalPos": (), + "QEnterEvent.globalX": (), + "QEnterEvent.global""Y": (), + "QEnterEvent.localPos": (), + "QEnterEvent.pos": (), + "QEnterEvent.screenPos": (), + "QEnterEvent.windowPos": (), + "QEnterEvent.x": (), + "QEnterEvent.y": (), + + # class PySide2.QtGui.QExposeEvent: + "QExposeEvent.__init__": ('PySide2.QtGui.QRegion',), + "QExposeEvent.region": (), + + # class PySide2.QtGui.QFileOpenEvent: + "QFileOpenEvent.__init__": [('PySide2.QtCore.QUrl',), ('str',)], + "QFileOpenEvent.file": (), + "QFileOpenEvent.openFile": ('PySide2.QtCore.QFile', 'OpenMode'), + "QFileOpenEvent.url": (), + + # class PySide2.QtGui.QFocusEvent: + "QFocusEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.FocusReason'), + "QFocusEvent.gotFocus": (), + "QFocusEvent.lostFocus": (), + "QFocusEvent.reason": (), + + # class PySide2.QtGui.QFont: + "QFont.__init__": [(), ('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('str', 'int', 'int', 'bool')], + "QFont.__copy__": (), + "QFont.bold": (), + "QFont.cacheStatistics": (), + "QFont.capitalization": (), + "QFont.cleanup": (), + "QFont.defaultFamily": (), + "QFont.exactMatch": (), + "QFont.family": (), + "QFont.fixedPitch": (), + "QFont.fromString": ('str',), + "QFont.hintingPreference": (), + "QFont.initialize": (), + "QFont.insertSubstitution": ('str', 'str'), + "QFont.insertSubstitutions": ('str', 'List[str]'), + "QFont.isCopyOf": ('PySide2.QtGui.QFont',), + "QFont.italic": (), + "QFont.kerning": (), + "QFont.key": (), + "QFont.lastResortFamily": (), + "QFont.lastResortFont": (), + "QFont.letterSpacing": (), + "QFont.letterSpacingType": (), + "QFont.overline": (), + "QFont.pixelSize": (), + "QFont.pointSize": (), + "QFont.pointSizeF": (), + "QFont.rawMode": (), + "QFont.rawName": (), + "QFont.removeSubstitutions": ('str',), + "QFont.resolve": [(), ('PySide2.QtGui.QFont',), ('int',)], + "QFont.setBold": ('bool',), + "QFont.setCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QFont.setFamily": ('str',), + "QFont.setFixedPitch": ('bool',), + "QFont.setHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QFont.setItalic": ('bool',), + "QFont.setKerning": ('bool',), + "QFont.setLetterSpacing": ('PySide2.QtGui.QFont.SpacingType', 'float'), + "QFont.setOverline": ('bool',), + "QFont.setPixelSize": ('int',), + "QFont.setPointSize": ('int',), + "QFont.setPointSizeF": ('float',), + "QFont.setRawMode": ('bool',), + "QFont.setRawName": ('str',), + "QFont.setStretch": ('int',), + "QFont.setStrikeOut": ('bool',), + "QFont.setStyle": ('PySide2.QtGui.QFont.Style',), + "QFont.setStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QFont.setStyleName": ('str',), + "QFont.setStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QFont.setUnderline": ('bool',), + "QFont.setWeight": ('int',), + "QFont.setWordSpacing": ('float',), + "QFont.stretch": (), + "QFont.strikeOut": (), + "QFont.style": (), + "QFont.styleHint": (), + "QFont.styleName": (), + "QFont.styleStrategy": (), + "QFont.substitute": ('str',), + "QFont.substitutes": ('str',), + "QFont.substitutions": (), + "QFont.swap": ('PySide2.QtGui.QFont',), + "QFont.toString": (), + "QFont.underline": (), + "QFont.weight": (), + "QFont.wordSpacing": (), + + # class PySide2.QtGui.QFontDatabase: + "QFontDatabase.__init__": [(), ('PySide2.QtGui.QFontDatabase',)], + "QFontDatabase.__copy__": (), + "QFontDatabase.addApplicationFont": ('str',), + "QFontDatabase.addApplicationFontFromData": ('PySide2.QtCore.QByteArray',), + "QFontDatabase.applicationFontFamilies": ('int',), + "QFontDatabase.bold": ('str', 'str'), + "QFontDatabase.families": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.font": ('str', 'str', 'int'), + "QFontDatabase.hasFamily": ('str',), + "QFontDatabase.isBitmapScalable": ('str', 'str'), + "QFontDatabase.isFixedPitch": ('str', 'str'), + "QFontDatabase.isPrivateFamily": ('str',), + "QFontDatabase.isScalable": ('str', 'str'), + "QFontDatabase.isSmoothlyScalable": ('str', 'str'), + "QFontDatabase.italic": ('str', 'str'), + "QFontDatabase.pointSizes": ('str', 'str'), + "QFontDatabase.removeAllApplicationFonts": (), + "QFontDatabase.removeApplicationFont": ('int',), + "QFontDatabase.smoothSizes": ('str', 'str'), + "QFontDatabase.standardSizes": (), + "QFontDatabase.styleString": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontDatabase.styles": ('str',), + "QFontDatabase.supportsThreadedFontRendering": (), + "QFontDatabase.systemFont": ('PySide2.QtGui.QFontDatabase.SystemFont',), + "QFontDatabase.weight": ('str', 'str'), + "QFontDatabase.writingSystemName": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystemSample": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontDatabase.writingSystems": [(), ('str',)], + + # class PySide2.QtGui.QFontInfo: + "QFontInfo.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFontInfo',)], + "QFontInfo.__copy__": (), + "QFontInfo.bold": (), + "QFontInfo.exactMatch": (), + "QFontInfo.family": (), + "QFontInfo.fixedPitch": (), + "QFontInfo.italic": (), + "QFontInfo.overline": (), + "QFontInfo.pixelSize": (), + "QFontInfo.pointSize": (), + "QFontInfo.pointSizeF": (), + "QFontInfo.rawMode": (), + "QFontInfo.strikeOut": (), + "QFontInfo.style": (), + "QFontInfo.styleHint": (), + "QFontInfo.styleName": (), + "QFontInfo.swap": ('PySide2.QtGui.QFontInfo',), + "QFontInfo.underline": (), + "QFontInfo.weight": (), + + # class PySide2.QtGui.QFontMetrics: + "QFontMetrics.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',)], + "QFontMetrics.__copy__": (), + "QFontMetrics.ascent": (), + "QFontMetrics.averageCharWidth": (), + "QFontMetrics.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetrics.boundingRectChar": ('Union[str, int]',), + "QFontMetrics.capHeight": (), + "QFontMetrics.charWidth": ('str', 'int'), + "QFontMetrics.descent": (), + "QFontMetrics.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'int', 'int'), + "QFontMetrics.height": (), + "QFontMetrics.inFont": ('Union[str, int]',), + "QFontMetrics.inFontUcs4": ('int',), + "QFontMetrics.leading": (), + "QFontMetrics.leftBearing": ('Union[str, int]',), + "QFontMetrics.lineSpacing": (), + "QFontMetrics.lineWidth": (), + "QFontMetrics.maxWidth": (), + "QFontMetrics.minLeftBearing": (), + "QFontMetrics.minRightBearing": (), + "QFontMetrics.overlinePos": (), + "QFontMetrics.rightBearing": ('Union[str, int]',), + "QFontMetrics.size": ('int', 'str', 'int', 'int'), + "QFontMetrics.strikeOutPos": (), + "QFontMetrics.swap": ('PySide2.QtGui.QFontMetrics',), + "QFontMetrics.tightBoundingRect": ('str',), + "QFontMetrics.underlinePos": (), + "QFontMetrics.width": [('str', 'int'), ('str', 'int', 'int')], + "QFontMetrics.widthChar": ('Union[str, int]',), + "QFontMetrics.xHeight": (), + + # class PySide2.QtGui.QFontMetricsF: + "QFontMetricsF.__init__": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice'), ('PySide2.QtGui.QFontMetrics',), ('PySide2.QtGui.QFontMetricsF',)], + "QFontMetricsF.__copy__": (), + "QFontMetricsF.ascent": (), + "QFontMetricsF.averageCharWidth": (), + "QFontMetricsF.boundingRect": [('PySide2.QtCore.QRectF', 'int', 'str', 'int', 'int'), ('str',)], + "QFontMetricsF.boundingRectChar": ('Union[str, int]',), + "QFontMetricsF.capHeight": (), + "QFontMetricsF.descent": (), + "QFontMetricsF.elidedText": ('str', 'PySide2.QtCore.Qt.TextElideMode', 'float', 'int'), + "QFontMetricsF.height": (), + "QFontMetricsF.inFont": ('Union[str, int]',), + "QFontMetricsF.inFontUcs4": ('int',), + "QFontMetricsF.leading": (), + "QFontMetricsF.leftBearing": ('Union[str, int]',), + "QFontMetricsF.lineSpacing": (), + "QFontMetricsF.lineWidth": (), + "QFontMetricsF.maxWidth": (), + "QFontMetricsF.minLeftBearing": (), + "QFontMetricsF.minRightBearing": (), + "QFontMetricsF.overlinePos": (), + "QFontMetricsF.rightBearing": ('Union[str, int]',), + "QFontMetricsF.size": ('int', 'str', 'int', 'int'), + "QFontMetricsF.strikeOutPos": (), + "QFontMetricsF.swap": ('PySide2.QtGui.QFontMetricsF',), + "QFontMetricsF.tightBoundingRect": ('str',), + "QFontMetricsF.underlinePos": (), + "QFontMetricsF.width": ('str',), + "QFontMetricsF.widthChar": ('Union[str, int]',), + "QFontMetricsF.xHeight": (), + + # class PySide2.QtGui.QGradient: + "QGradient.__init__": [(), ('PySide2.QtGui.QGradient',)], + "QGradient.__copy__": (), + "QGradient.coordinateMode": (), + "QGradient.interpolationMode": (), + "QGradient.setColorAt": ('float', 'PySide2.QtGui.QColor'), + "QGradient.setCoordinateMode": ('PySide2.QtGui.QGradient.CoordinateMode',), + "QGradient.setInterpolationMode": ('PySide2.QtGui.QGradient.InterpolationMode',), + "QGradient.setSpread": ('PySide2.QtGui.QGradient.Spread',), + "QGradient.setStops": ('list',), + "QGradient.spread": (), + "QGradient.stops": (), + "QGradient.type": (), + + # class PySide2.QtGui.QGuiApplication: + "QGuiApplication.__init__": ('List[str]',), + "QGuiApplication.allWindows": (), + "QGuiApplication.applicationDisplayName": (), + "QGuiApplication.applicationState": (), + "QGuiApplication.changeOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.clipboard": (), + "QGuiApplication.desktopFileName": (), + "QGuiApplication.desktopSettingsAware": (), + "QGuiApplication.devicePixelRatio": (), + "QGuiApplication.event": ('PySide2.QtCore.QEvent',), + "QGuiApplication.exec_": (), + "QGuiApplication.focusObject": (), + "QGuiApplication.focusWindow": (), + "QGuiApplication.font": (), + "QGuiApplication.isFallbackSessionManagementEnabled": (), + "QGuiApplication.isLeftToRight": (), + "QGuiApplication.isRightToLeft": (), + "QGuiApplication.isSavingSession": (), + "QGuiApplication.isSessionRestored": (), + "QGuiApplication.keyboardModifiers": (), + "QGuiApplication.layoutDirection": (), + "QGuiApplication.modalWindow": (), + "QGuiApplication.mouseButtons": (), + "QGuiApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGuiApplication.overrideCursor": (), + "QGuiApplication.palette": (), + "QGuiApplication.platformName": (), + "QGuiApplication.primaryScreen": (), + "QGuiApplication.queryKeyboardModifiers": (), + "QGuiApplication.quitOnLastWindowClosed": (), + "QGuiApplication.restoreOverrideCursor": (), + "QGuiApplication.screens": (), + "QGuiApplication.sessionId": (), + "QGuiApplication.sessionKey": (), + "QGuiApplication.setApplicationDisplayName": ('str',), + "QGuiApplication.setDesktopFileName": ('str',), + "QGuiApplication.setDesktopSettingsAware": ('bool',), + "QGuiApplication.setFallbackSessionManagementEnabled": ('bool',), + "QGuiApplication.setFont": ('PySide2.QtGui.QFont',), + "QGuiApplication.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGuiApplication.setOverrideCursor": ('PySide2.QtGui.QCursor',), + "QGuiApplication.setPalette": ('PySide2.QtGui.QPalette',), + "QGuiApplication.setQuitOnLastWindowClosed": ('bool',), + "QGuiApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QGuiApplication.styleHints": (), + "QGuiApplication.sync": (), + "QGuiApplication.topLevelAt": ('PySide2.QtCore.QPoint',), + "QGuiApplication.topLevelWindows": (), + "QGuiApplication.windowIcon": (), + + # class PySide2.QtGui.QHelpEvent: + "QHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QHelpEvent.globalPos": (), + "QHelpEvent.globalX": (), + "QHelpEvent.global""Y": (), + "QHelpEvent.pos": (), + "QHelpEvent.x": (), + "QHelpEvent.y": (), + + # class PySide2.QtGui.QHideEvent: + "QHideEvent.__init__": (), + + # class PySide2.QtGui.QHoverEvent: + "QHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'KeyboardModifiers'), + "QHoverEvent.oldPos": (), + "QHoverEvent.oldPosF": (), + "QHoverEvent.pos": (), + "QHoverEvent.posF": (), + + # class PySide2.QtGui.QIcon: + "QIcon.__init__": [(), ('PySide2.QtGui.QIcon',), ('PySide2.QtGui.QIconEngine',), ('PySide2.QtGui.QPixmap',), ('str',)], + "QIcon.__copy__": (), + "QIcon.actualSize": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIcon.cacheKey": (), + "QIcon.fromTheme": [('str',), ('str', 'PySide2.QtGui.QIcon')], + "QIcon.hasThemeIcon": ('str',), + "QIcon.isMask": (), + "QIcon.isNull": (), + "QIcon.name": (), + "QIcon.paint": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QPainter', 'int', 'int', 'int', 'int', 'Alignment', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.pixmap": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('PySide2.QtGui.QWindow', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), ('int', 'int', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State')], + "QIcon.setIsMask": ('bool',), + "QIcon.setThemeName": ('str',), + "QIcon.setThemeSearchPaths": ('List[str]',), + "QIcon.swap": ('PySide2.QtGui.QIcon',), + "QIcon.themeName": (), + "QIcon.themeSearchPaths": (), + + # class PySide2.QtGui.QIconDragEvent: + "QIconDragEvent.__init__": (), + + # class PySide2.QtGui.QIconEngine: + "QIconEngine.__init__": [(), ('PySide2.QtGui.QIconEngine',)], + "QIconEngine.actualSize": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addFile": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.addPixmap": ('PySide2.QtGui.QPixmap', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.availableSizes": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.clone": (), + "QIconEngine.iconName": (), + "QIconEngine.isNull": (), + "QIconEngine.key": (), + "QIconEngine.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.pixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State'), + "QIconEngine.read": ('PySide2.QtCore.QDataStream',), + "QIconEngine.scaledPixmap": ('PySide2.QtCore.QSize', 'PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QIcon.State', 'float'), + "QIconEngine.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QImage: + "QImage.__init__": [(), ('List[str]',), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QImage.Format'), ('PySide2.QtGui.QImage',), ('Union[str, int]', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'Callable', 'int'), ('Union[str, int]', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format', 'Callable', 'int'), ('int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'int', 'int', 'int', 'PySide2.QtGui.QImage.Format'), ('str', 'str')], + "QImage.__copy__": (), + "QImage.allGray": (), + "QImage.alphaChannel": (), + "QImage.bitPlaneCount": (), + "QImage.bits": (), + "QImage.byteCount": (), + "QImage.bytesPerLine": (), + "QImage.cacheKey": (), + "QImage.color": ('int',), + "QImage.colorCount": (), + "QImage.colorTable": (), + "QImage.constBits": (), + "QImage.constScanLine": ('int',), + "QImage.convertToFormat": [('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), ('PySide2.QtGui.QImage.Format', 'list', 'ImageConversionFlags')], + "QImage.convertToFormat_helper": ('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), + "QImage.convertToFormat_inplace": ('PySide2.QtGui.QImage.Format', 'ImageConversionFlags'), + "QImage.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QImage.createAlphaMask": ('ImageConversionFlags',), + "QImage.createHeuristicMask": ('bool',), + "QImage.createMaskFromColor": ('int', 'PySide2.QtCore.Qt.MaskMode'), + "QImage.depth": (), + "QImage.devType": (), + "QImage.devicePixelRatio": (), + "QImage.dotsPerMeterX": (), + "QImage.dotsPerMeterY": (), + "QImage.fill": [('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QColor',), ('int',)], + "QImage.format": (), + "QImage.fromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.hasAlphaChannel": (), + "QImage.height": (), + "QImage.invertPixels": ('PySide2.QtGui.QImage.InvertMode',), + "QImage.isGrayscale": (), + "QImage.isNull": (), + "QImage.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QImage.loadFromData": ('PySide2.QtCore.QByteArray', 'str'), + "QImage.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QImage.mirrored": ('bool', 'bool'), + "QImage.mirrored_helper": ('bool', 'bool'), + "QImage.mirrored_inplace": ('bool', 'bool'), + "QImage.offset": (), + "QImage.paintEngine": (), + "QImage.pixel": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelColor": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.pixelFormat": (), + "QImage.pixelIndex": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.rect": (), + "QImage.reinterpretAsFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.rgbSwapped": (), + "QImage.rgbSwapped_helper": (), + "QImage.rgbSwapped_inplace": (), + "QImage.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QImage.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QImage.scanLine": ('int',), + "QImage.setAlphaChannel": ('PySide2.QtGui.QImage',), + "QImage.setColor": ('int', 'int'), + "QImage.setColorCount": ('int',), + "QImage.setColorTable": ('list',), + "QImage.setDevicePixelRatio": ('float',), + "QImage.setDotsPerMeterX": ('int',), + "QImage.setDotsPerMeterY": ('int',), + "QImage.setOffset": ('PySide2.QtCore.QPoint',), + "QImage.setPixel": [('PySide2.QtCore.QPoint', 'int'), ('int', 'int', 'int')], + "QImage.setPixelColor": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QColor')], + "QImage.setText": ('str', 'str'), + "QImage.size": (), + "QImage.smoothScaled": ('int', 'int'), + "QImage.swap": ('PySide2.QtGui.QImage',), + "QImage.text": ('str',), + "QImage.textKeys": (), + "QImage.toImageFormat": ('PySide2.QtGui.QPixelFormat',), + "QImage.toPixelFormat": ('PySide2.QtGui.QImage.Format',), + "QImage.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QImage.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QImage.valid": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QImage.width": (), + + # class PySide2.QtGui.QImageIOHandler: + "QImageIOHandler.__init__": (), + "QImageIOHandler.canRead": (), + "QImageIOHandler.currentImageNumber": (), + "QImageIOHandler.currentImageRect": (), + "QImageIOHandler.device": (), + "QImageIOHandler.format": (), + "QImageIOHandler.imageCount": (), + "QImageIOHandler.jumpToImage": ('int',), + "QImageIOHandler.jumpToNextImage": (), + "QImageIOHandler.loopCount": (), + "QImageIOHandler.name": (), + "QImageIOHandler.nextImageDelay": (), + "QImageIOHandler.option": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.read": ('PySide2.QtGui.QImage',), + "QImageIOHandler.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageIOHandler.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageIOHandler.setOption": ('PySide2.QtGui.QImageIOHandler.ImageOption', 'Any'), + "QImageIOHandler.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageIOHandler.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QImageReader: + "QImageReader.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageReader.autoDetectImageFormat": (), + "QImageReader.autoTransform": (), + "QImageReader.backgroundColor": (), + "QImageReader.canRead": (), + "QImageReader.clipRect": (), + "QImageReader.currentImageNumber": (), + "QImageReader.currentImageRect": (), + "QImageReader.decideFormatFromContent": (), + "QImageReader.device": (), + "QImageReader.error": (), + "QImageReader.errorString": (), + "QImageReader.fileName": (), + "QImageReader.format": (), + "QImageReader.gamma": (), + "QImageReader.imageCount": (), + "QImageReader.imageFormat": [(), ('PySide2.QtCore.QIODevice',), ('str',)], + "QImageReader.jumpToImage": ('int',), + "QImageReader.jumpToNextImage": (), + "QImageReader.loopCount": (), + "QImageReader.nextImageDelay": (), + "QImageReader.quality": (), + "QImageReader.read": (), + "QImageReader.scaledClipRect": (), + "QImageReader.scaledSize": (), + "QImageReader.setAutoDetectImageFormat": ('bool',), + "QImageReader.setAutoTransform": ('bool',), + "QImageReader.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QImageReader.setClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setDecideFormatFromContent": ('bool',), + "QImageReader.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageReader.setFileName": ('str',), + "QImageReader.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageReader.setGamma": ('float',), + "QImageReader.setQuality": ('int',), + "QImageReader.setScaledClipRect": ('PySide2.QtCore.QRect',), + "QImageReader.setScaledSize": ('PySide2.QtCore.QSize',), + "QImageReader.size": (), + "QImageReader.subType": (), + "QImageReader.supportedImageFormats": (), + "QImageReader.supportedMimeTypes": (), + "QImageReader.supportedSubTypes": (), + "QImageReader.supportsAnimation": (), + "QImageReader.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageReader.text": ('str',), + "QImageReader.textKeys": (), + "QImageReader.transformation": (), + + # class PySide2.QtGui.QImageWriter: + "QImageWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QImageWriter.canWrite": (), + "QImageWriter.compression": (), + "QImageWriter.description": (), + "QImageWriter.device": (), + "QImageWriter.error": (), + "QImageWriter.errorString": (), + "QImageWriter.fileName": (), + "QImageWriter.format": (), + "QImageWriter.gamma": (), + "QImageWriter.optimizedWrite": (), + "QImageWriter.progressiveScanWrite": (), + "QImageWriter.quality": (), + "QImageWriter.setCompression": ('int',), + "QImageWriter.setDescription": ('str',), + "QImageWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QImageWriter.setFileName": ('str',), + "QImageWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setGamma": ('float',), + "QImageWriter.setOptimizedWrite": ('bool',), + "QImageWriter.setProgressiveScanWrite": ('bool',), + "QImageWriter.setQuality": ('int',), + "QImageWriter.setSubType": ('PySide2.QtCore.QByteArray',), + "QImageWriter.setText": ('str', 'str'), + "QImageWriter.setTransformation": ('Transformations',), + "QImageWriter.subType": (), + "QImageWriter.supportedImageFormats": (), + "QImageWriter.supportedMimeTypes": (), + "QImageWriter.supportedSubTypes": (), + "QImageWriter.supportsOption": ('PySide2.QtGui.QImageIOHandler.ImageOption',), + "QImageWriter.transformation": (), + "QImageWriter.write": ('PySide2.QtGui.QImage',), + + # class PySide2.QtGui.QInputEvent: + "QInputEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'KeyboardModifiers'), + "QInputEvent.modifiers": (), + "QInputEvent.setModifiers": ('KeyboardModifiers',), + "QInputEvent.setTimestamp": ('int',), + "QInputEvent.timestamp": (), + + # class PySide2.QtGui.QInputMethodEvent: + "QInputMethodEvent.__init__": [(), ('PySide2.QtGui.QInputMethodEvent',), ('str', 'list')], + "QInputMethodEvent.attributes": (), + "QInputMethodEvent.commitString": (), + "QInputMethodEvent.preeditString": (), + "QInputMethodEvent.replacementLength": (), + "QInputMethodEvent.replacementStart": (), + "QInputMethodEvent.setCommitString": ('str', 'int', 'int'), + + # class PySide2.QtGui.QIntValidator: + "QIntValidator.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QIntValidator.bottom": (), + "QIntValidator.fixup": ('str',), + "QIntValidator.setBottom": ('int',), + "QIntValidator.setRange": ('int', 'int'), + "QIntValidator.setTop": ('int',), + "QIntValidator.top": (), + "QIntValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QKeyEvent: + "QKeyEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'int', 'KeyboardModifiers', 'int', 'int', 'int', 'str', 'bool', 'int'), ('PySide2.QtCore.QEvent.Type', 'int', 'KeyboardModifiers', 'str', 'bool', 'int')], + "QKeyEvent.count": (), + "QKeyEvent.isAutoRepeat": (), + "QKeyEvent.key": (), + "QKeyEvent.matches": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeyEvent.modifiers": (), + "QKeyEvent.nativeModifiers": (), + "QKeyEvent.nativeScanCode": (), + "QKeyEvent.nativeVirtualKey": (), + "QKeyEvent.text": (), + + # class PySide2.QtGui.QKeySequence: + "QKeySequence.__init__": [(), ('PySide2.QtGui.QKeySequence',), ('PySide2.QtGui.QKeySequence.StandardKey',), ('int', 'int', 'int', 'int'), ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat')], + "QKeySequence.__copy__": (), + "QKeySequence.__reduce__": (), + "QKeySequence.count": (), + "QKeySequence.fromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.isEmpty": (), + "QKeySequence.keyBindings": ('PySide2.QtGui.QKeySequence.StandardKey',), + "QKeySequence.listFromString": ('str', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.listToString": ('list', 'PySide2.QtGui.QKeySequence.SequenceFormat'), + "QKeySequence.matches": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.mnemonic": ('str',), + "QKeySequence.swap": ('PySide2.QtGui.QKeySequence',), + "QKeySequence.toString": ('PySide2.QtGui.QKeySequence.SequenceFormat',), + + # class PySide2.QtGui.QLinearGradient: + "QLinearGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('PySide2.QtGui.QLinearGradient',), ('float', 'float', 'float', 'float')], + "QLinearGradient.__copy__": (), + "QLinearGradient.finalStop": (), + "QLinearGradient.setFinalStop": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.setStart": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QLinearGradient.start": (), + + # class PySide2.QtGui.QMatrix: + "QMatrix.__init__": [(), ('PySide2.QtGui.QMatrix',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix.__copy__": (), + "QMatrix.__reduce__": (), + "QMatrix.determinant": (), + "QMatrix.dx": (), + "QMatrix.dy": (), + "QMatrix.inverted": ('bool',), + "QMatrix.isIdentity": (), + "QMatrix.isInvertible": (), + "QMatrix.m11": (), + "QMatrix.m12": (), + "QMatrix.m21": (), + "QMatrix.m22": (), + "QMatrix.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QMatrix.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix.mapToPolygon": ('PySide2.QtCore.QRect',), + "QMatrix.reset": (), + "QMatrix.rotate": ('float',), + "QMatrix.scale": ('float', 'float'), + "QMatrix.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix.shear": ('float', 'float'), + "QMatrix.translate": ('float', 'float'), + + # class PySide2.QtGui.QMatrix2x2: + "QMatrix2x2.__init__": [('PySide2.QtGui.QMatrix2x2',), ('Sequence',)], + "QMatrix2x2.__copy__": (), + "QMatrix2x2.__reduce__": (), + "QMatrix2x2.data": (), + "QMatrix2x2.fill": ('object',), + "QMatrix2x2.transposed": (), + + # class PySide2.QtGui.QMatrix2x3: + "QMatrix2x3.__init__": [('PySide2.QtGui.QMatrix2x3',), ('Sequence',)], + "QMatrix2x3.__copy__": (), + "QMatrix2x3.__reduce__": (), + "QMatrix2x3.data": (), + "QMatrix2x3.fill": ('object',), + "QMatrix2x3.transposed": (), + + # class PySide2.QtGui.QMatrix2x4: + "QMatrix2x4.__init__": [('PySide2.QtGui.QMatrix2x4',), ('Sequence',)], + "QMatrix2x4.__copy__": (), + "QMatrix2x4.__reduce__": (), + "QMatrix2x4.data": (), + "QMatrix2x4.fill": ('object',), + "QMatrix2x4.transposed": (), + + # class PySide2.QtGui.QMatrix3x2: + "QMatrix3x2.__init__": [('PySide2.QtGui.QMatrix3x2',), ('Sequence',)], + "QMatrix3x2.__copy__": (), + "QMatrix3x2.__reduce__": (), + "QMatrix3x2.data": (), + "QMatrix3x2.fill": ('object',), + "QMatrix3x2.transposed": (), + + # class PySide2.QtGui.QMatrix3x3: + "QMatrix3x3.__init__": [('PySide2.QtGui.QMatrix3x3',), ('Sequence',)], + "QMatrix3x3.__copy__": (), + "QMatrix3x3.__reduce__": (), + "QMatrix3x3.data": (), + "QMatrix3x3.fill": ('object',), + "QMatrix3x3.transposed": (), + + # class PySide2.QtGui.QMatrix3x4: + "QMatrix3x4.__init__": [('PySide2.QtGui.QMatrix3x4',), ('Sequence',)], + "QMatrix3x4.__copy__": (), + "QMatrix3x4.__reduce__": (), + "QMatrix3x4.data": (), + "QMatrix3x4.fill": ('object',), + "QMatrix3x4.transposed": (), + + # class PySide2.QtGui.QMatrix4x2: + "QMatrix4x2.__init__": [('PySide2.QtGui.QMatrix4x2',), ('Sequence',)], + "QMatrix4x2.__copy__": (), + "QMatrix4x2.__reduce__": (), + "QMatrix4x2.data": (), + "QMatrix4x2.fill": ('object',), + "QMatrix4x2.transposed": (), + + # class PySide2.QtGui.QMatrix4x3: + "QMatrix4x3.__init__": [('PySide2.QtGui.QMatrix4x3',), ('Sequence',)], + "QMatrix4x3.__copy__": (), + "QMatrix4x3.__reduce__": (), + "QMatrix4x3.data": (), + "QMatrix4x3.fill": ('object',), + "QMatrix4x3.transposed": (), + + # class PySide2.QtGui.QMatrix4x4: + "QMatrix4x4.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float',), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.__copy__": (), + "QMatrix4x4.__reduce__": (), + "QMatrix4x4.column": ('int',), + "QMatrix4x4.copyDataTo": ('float',), + "QMatrix4x4.data": (), + "QMatrix4x4.determinant": (), + "QMatrix4x4.fill": ('float',), + "QMatrix4x4.flipCoordinates": (), + "QMatrix4x4.frustum": ('float', 'float', 'float', 'float', 'float', 'float'), + "QMatrix4x4.inverted": ('bool',), + "QMatrix4x4.isAffine": (), + "QMatrix4x4.isIdentity": (), + "QMatrix4x4.lookAt": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QMatrix4x4.map": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',)], + "QMatrix4x4.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QMatrix4x4.mapVector": ('PySide2.QtGui.QVector3D',), + "QMatrix4x4.normalMatrix": (), + "QMatrix4x4.optimize": (), + "QMatrix4x4.ortho": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + "QMatrix4x4.perspective": ('float', 'float', 'float', 'float'), + "QMatrix4x4.rotate": [('PySide2.QtGui.QQuaternion',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QMatrix4x4.row": ('int',), + "QMatrix4x4.scale": [('PySide2.QtGui.QVector3D',), ('float',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.setColumn": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setRow": ('int', 'PySide2.QtGui.QVector4D'), + "QMatrix4x4.setToIdentity": (), + "QMatrix4x4.toAffine": (), + "QMatrix4x4.toTransform": [(), ('float',)], + "QMatrix4x4.translate": [('PySide2.QtGui.QVector3D',), ('float', 'float'), ('float', 'float', 'float')], + "QMatrix4x4.transposed": (), + "QMatrix4x4.viewport": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float', 'float', 'float')], + + # class PySide2.QtGui.QMouseEvent: + "QMouseEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons', 'KeyboardModifiers')], + "QMouseEvent.button": (), + "QMouseEvent.buttons": (), + "QMouseEvent.flags": (), + "QMouseEvent.globalPos": (), + "QMouseEvent.globalX": (), + "QMouseEvent.global""Y": (), + "QMouseEvent.localPos": (), + "QMouseEvent.pos": (), + "QMouseEvent.screenPos": (), + "QMouseEvent.setLocalPos": ('PySide2.QtCore.QPointF',), + "QMouseEvent.source": (), + "QMouseEvent.windowPos": (), + "QMouseEvent.x": (), + "QMouseEvent.y": (), + + # class PySide2.QtGui.QMoveEvent: + "QMoveEvent.__init__": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), + "QMoveEvent.oldPos": (), + "QMoveEvent.pos": (), + + # class PySide2.QtGui.QMovie: + "QMovie.__init__": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject')], + "QMovie.backgroundColor": (), + "QMovie.cacheMode": (), + "QMovie.currentFrameNumber": (), + "QMovie.currentImage": (), + "QMovie.currentPixmap": (), + "QMovie.device": (), + "QMovie.fileName": (), + "QMovie.format": (), + "QMovie.frameCount": (), + "QMovie.frameRect": (), + "QMovie.isValid": (), + "QMovie.jumpToFrame": ('int',), + "QMovie.jumpToNextFrame": (), + "QMovie.loopCount": (), + "QMovie.nextFrameDelay": (), + "QMovie.scaledSize": (), + "QMovie.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QMovie.setCacheMode": ('PySide2.QtGui.QMovie.CacheMode',), + "QMovie.setDevice": ('PySide2.QtCore.QIODevice',), + "QMovie.setFileName": ('str',), + "QMovie.setFormat": ('PySide2.QtCore.QByteArray',), + "QMovie.setPaused": ('bool',), + "QMovie.setScaledSize": ('PySide2.QtCore.QSize',), + "QMovie.setSpeed": ('int',), + "QMovie.speed": (), + "QMovie.start": (), + "QMovie.state": (), + "QMovie.stop": (), + "QMovie.supportedFormats": (), + + # class PySide2.QtGui.QOffscreenSurface: + "QOffscreenSurface.__init__": ('PySide2.QtGui.QScreen',), + "QOffscreenSurface.create": (), + "QOffscreenSurface.destroy": (), + "QOffscreenSurface.format": (), + "QOffscreenSurface.isValid": (), + "QOffscreenSurface.nativeHandle": (), + "QOffscreenSurface.requestedFormat": (), + "QOffscreenSurface.screen": (), + "QOffscreenSurface.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOffscreenSurface.setNativeHandle": ('int',), + "QOffscreenSurface.setScreen": ('PySide2.QtGui.QScreen',), + "QOffscreenSurface.size": (), + "QOffscreenSurface.surfaceHandle": (), + "QOffscreenSurface.surfaceType": (), + + # class PySide2.QtGui.QOpenGLBuffer: + "QOpenGLBuffer.__init__": [(), ('PySide2.QtGui.QOpenGLBuffer',), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.allocate": [('int',), ('int', 'int')], + "QOpenGLBuffer.bind": (), + "QOpenGLBuffer.bufferId": (), + "QOpenGLBuffer.create": (), + "QOpenGLBuffer.destroy": (), + "QOpenGLBuffer.isCreated": (), + "QOpenGLBuffer.map": ('PySide2.QtGui.QOpenGLBuffer.Access',), + "QOpenGLBuffer.mapRange": ('int', 'int', 'RangeAccessFlags'), + "QOpenGLBuffer.read": ('int', 'int', 'int'), + "QOpenGLBuffer.release": [(), ('PySide2.QtGui.QOpenGLBuffer.Type',)], + "QOpenGLBuffer.setUsagePattern": ('PySide2.QtGui.QOpenGLBuffer.UsagePattern',), + "QOpenGLBuffer.size": (), + "QOpenGLBuffer.type": (), + "QOpenGLBuffer.unmap": (), + "QOpenGLBuffer.usagePattern": (), + "QOpenGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtGui.QOpenGLContext: + "QOpenGLContext.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLContext.areSharing": ('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLContext.create": (), + "QOpenGLContext.currentContext": (), + "QOpenGLContext.defaultFramebufferObject": (), + "QOpenGLContext.doneCurrent": (), + "QOpenGLContext.extensions": (), + "QOpenGLContext.extraFunctions": (), + "QOpenGLContext.format": (), + "QOpenGLContext.functions": (), + "QOpenGLContext.globalShareContext": (), + "QOpenGLContext.hasExtension": ('PySide2.QtCore.QByteArray',), + "QOpenGLContext.isOpenGLES": (), + "QOpenGLContext.isValid": (), + "QOpenGLContext.makeCurrent": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.nativeHandle": (), + "QOpenGLContext.openGLModuleHandle": (), + "QOpenGLContext.openGLModuleType": (), + "QOpenGLContext.screen": (), + "QOpenGLContext.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLContext.setNativeHandle": ('Any',), + "QOpenGLContext.setScreen": ('PySide2.QtGui.QScreen',), + "QOpenGLContext.setShareContext": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLContext.shareContext": (), + "QOpenGLContext.shareGroup": (), + "QOpenGLContext.supportsThreadedOpenGL": (), + "QOpenGLContext.surface": (), + "QOpenGLContext.swapBuffers": ('PySide2.QtGui.QSurface',), + "QOpenGLContext.versionFunctions": ('PySide2.QtGui.QOpenGLVersionProfile',), + + # class PySide2.QtGui.QOpenGLContextGroup: + "QOpenGLContextGroup.currentContextGroup": (), + "QOpenGLContextGroup.shares": (), + + # class PySide2.QtGui.QOpenGLDebugLogger: + "QOpenGLDebugLogger.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLDebugLogger.disableMessages": [('Sources', 'Types', 'Severities'), ('list', 'Sources', 'Types')], + "QOpenGLDebugLogger.enableMessages": [('Sources', 'Types', 'Severities'), ('list', 'Sources', 'Types')], + "QOpenGLDebugLogger.initialize": (), + "QOpenGLDebugLogger.isLogging": (), + "QOpenGLDebugLogger.logMessage": ('PySide2.QtGui.QOpenGLDebugMessage',), + "QOpenGLDebugLogger.loggedMessages": (), + "QOpenGLDebugLogger.loggingMode": (), + "QOpenGLDebugLogger.maximumMessageLength": (), + "QOpenGLDebugLogger.popGroup": (), + "QOpenGLDebugLogger.pushGroup": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Source'), + "QOpenGLDebugLogger.startLogging": ('PySide2.QtGui.QOpenGLDebugLogger.LoggingMode',), + "QOpenGLDebugLogger.stopLogging": (), + + # class PySide2.QtGui.QOpenGLDebugMessage: + "QOpenGLDebugMessage.__init__": [(), ('PySide2.QtGui.QOpenGLDebugMessage',)], + "QOpenGLDebugMessage.__copy__": (), + "QOpenGLDebugMessage.createApplicationMessage": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Severity', 'PySide2.QtGui.QOpenGLDebugMessage.Type'), + "QOpenGLDebugMessage.createThirdPartyMessage": ('str', 'int', 'PySide2.QtGui.QOpenGLDebugMessage.Severity', 'PySide2.QtGui.QOpenGLDebugMessage.Type'), + "QOpenGLDebugMessage.id": (), + "QOpenGLDebugMessage.message": (), + "QOpenGLDebugMessage.severity": (), + "QOpenGLDebugMessage.source": (), + "QOpenGLDebugMessage.swap": ('PySide2.QtGui.QOpenGLDebugMessage',), + "QOpenGLDebugMessage.type": (), + + # class PySide2.QtGui.QOpenGLExtraFunctions: + "QOpenGLExtraFunctions.__init__": [(), ('PySide2.QtGui.QOpenGLContext',)], + "QOpenGLExtraFunctions.glActiveShaderProgram": ('int', 'int'), + "QOpenGLExtraFunctions.glBeginQuery": ('int', 'int'), + "QOpenGLExtraFunctions.glBeginTransformFeedback": ('int',), + "QOpenGLExtraFunctions.glBindBufferBase": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glBindImageTexture": ('int', 'int', 'int', 'Union[str, int]', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glBindProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glBindSampler": ('int', 'int'), + "QOpenGLExtraFunctions.glBindTransformFeedback": ('int', 'int'), + "QOpenGLExtraFunctions.glBindVertexArray": ('int',), + "QOpenGLExtraFunctions.glBlitFramebuffer": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glClearBufferfi": ('int', 'int', 'float', 'int'), + "QOpenGLExtraFunctions.glClearBufferfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glClearBufferiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glClearBufferuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glCompressedTexImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCompressedTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glCopyTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDeleteProgramPipelines": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteQueries": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteSamplers": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteTransformFeedbacks": ('int', 'int'), + "QOpenGLExtraFunctions.glDeleteVertexArrays": ('int', 'int'), + "QOpenGLExtraFunctions.glDispatchCompute": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawArraysIndirect": ('int', 'int'), + "QOpenGLExtraFunctions.glDrawArraysInstanced": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawBuffers": ('int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsIndirect": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawElementsInstanced": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glDrawRangeElements": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glEndQuery": ('int',), + "QOpenGLExtraFunctions.glFramebufferParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glFramebufferTextureLayer": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGenProgramPipelines": ('int', 'int'), + "QOpenGLExtraFunctions.glGenQueries": ('int', 'int'), + "QOpenGLExtraFunctions.glGenSamplers": ('int', 'int'), + "QOpenGLExtraFunctions.glGenTransformFeedbacks": ('int', 'int'), + "QOpenGLExtraFunctions.glGenVertexArrays": ('int', 'int'), + "QOpenGLExtraFunctions.glGetActiveUniformBlockiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetActiveUniformsiv": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetBufferParameteri64v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetFragDataLocation": ('int', 'str'), + "QOpenGLExtraFunctions.glGetFramebufferParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInteger64i_v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInteger64v": ('int', 'int'), + "QOpenGLExtraFunctions.glGetIntegeri_v": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetInternalformativ": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetMultisamplefv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetProgramBinary": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramInterfaceiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramPipelineiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetProgramResourceIndex": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glGetProgramResourceLocation": ('int', 'int', 'str'), + "QOpenGLExtraFunctions.glGetProgramResourceiv": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetQueryObjectuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetQueryiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetSamplerParameterfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetSamplerParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetStringi": ('int', 'int'), + "QOpenGLExtraFunctions.glGetTexLevelParameterfv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glGetTexLevelParameteriv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetUniformBlockIndex": ('int', 'str'), + "QOpenGLExtraFunctions.glGetUniformuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetVertexAttribIiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glGetVertexAttribIuiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glInvalidateFramebuffer": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glInvalidateSubFramebuffer": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glIsProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glIsQuery": ('int',), + "QOpenGLExtraFunctions.glIsSampler": ('int',), + "QOpenGLExtraFunctions.glIsTransformFeedback": ('int',), + "QOpenGLExtraFunctions.glIsVertexArray": ('int',), + "QOpenGLExtraFunctions.glMemoryBarrier": ('int',), + "QOpenGLExtraFunctions.glMemoryBarrierByRegion": ('int',), + "QOpenGLExtraFunctions.glProgramBinary": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1f": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform1fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform1i": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1ui": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform1uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2f": ('int', 'int', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform2fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform2i": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2ui": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform2uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3f": ('int', 'int', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform3fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform3i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform3uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4f": ('int', 'int', 'float', 'float', 'float', 'float'), + "QOpenGLExtraFunctions.glProgramUniform4fv": ('int', 'int', 'int', 'float'), + "QOpenGLExtraFunctions.glProgramUniform4i": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4iv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4ui": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniform4uiv": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2x3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix2x4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3x2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix3x4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4x2fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glProgramUniformMatrix4x3fv": ('int', 'int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glReadBuffer": ('int',), + "QOpenGLExtraFunctions.glRenderbufferStorageMultisample": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glSampleMaski": ('int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameterf": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glSamplerParameterfv": ('int', 'int', 'float'), + "QOpenGLExtraFunctions.glSamplerParameteri": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glSamplerParameteriv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage2D": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexStorage2DMultisample": ('int', 'int', 'int', 'int', 'int', 'Union[str, int]'), + "QOpenGLExtraFunctions.glTexStorage3D": ('int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glTexSubImage3D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform1ui": ('int', 'int'), + "QOpenGLExtraFunctions.glUniform1uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform2ui": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform2uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform3ui": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform3uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform4ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniform4uiv": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniformBlockBinding": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glUniformMatrix2x3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix2x4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix3x2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix3x4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix4x2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUniformMatrix4x3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLExtraFunctions.glUnmapBuffer": ('int',), + "QOpenGLExtraFunctions.glUseProgramStages": ('int', 'int', 'int'), + "QOpenGLExtraFunctions.glValidateProgramPipeline": ('int',), + "QOpenGLExtraFunctions.glVertexAttribBinding": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribDivisor": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribFormat": ('int', 'int', 'int', 'Union[str, int]', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4iv": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4ui": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribI4uiv": ('int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribIFormat": ('int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexAttribIPointer": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLExtraFunctions.glVertexBindingDivisor": ('int', 'int'), + + # class PySide2.QtGui.QOpenGLFramebufferObject: + "QOpenGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QOpenGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.addColorAttachment": [('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'int')], + "QOpenGLFramebufferObject.attachment": (), + "QOpenGLFramebufferObject.bind": (), + "QOpenGLFramebufferObject.bindDefault": (), + "QOpenGLFramebufferObject.blitFramebuffer": [('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QOpenGLFramebufferObject.FramebufferRestorePolicy'), ('PySide2.QtGui.QOpenGLFramebufferObject', 'PySide2.QtGui.QOpenGLFramebufferObject', 'int', 'int')], + "QOpenGLFramebufferObject.format": (), + "QOpenGLFramebufferObject.handle": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QOpenGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QOpenGLFramebufferObject.height": (), + "QOpenGLFramebufferObject.isBound": (), + "QOpenGLFramebufferObject.isValid": (), + "QOpenGLFramebufferObject.release": (), + "QOpenGLFramebufferObject.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObject.size": (), + "QOpenGLFramebufferObject.sizes": (), + "QOpenGLFramebufferObject.takeTexture": [(), ('int',)], + "QOpenGLFramebufferObject.texture": (), + "QOpenGLFramebufferObject.textures": (), + "QOpenGLFramebufferObject.toImage": [(), ('bool',), ('bool', 'int')], + "QOpenGLFramebufferObject.width": (), + + # class PySide2.QtGui.QOpenGLFramebufferObjectFormat: + "QOpenGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtGui.QOpenGLFramebufferObjectFormat',)], + "QOpenGLFramebufferObjectFormat.__copy__": (), + "QOpenGLFramebufferObjectFormat.attachment": (), + "QOpenGLFramebufferObjectFormat.internalTextureFormat": (), + "QOpenGLFramebufferObjectFormat.mipmap": (), + "QOpenGLFramebufferObjectFormat.samples": (), + "QOpenGLFramebufferObjectFormat.setAttachment": ('PySide2.QtGui.QOpenGLFramebufferObject.Attachment',), + "QOpenGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QOpenGLFramebufferObjectFormat.setMipmap": ('bool',), + "QOpenGLFramebufferObjectFormat.setSamples": ('int',), + "QOpenGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QOpenGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtGui.QOpenGLFunctions: + "QOpenGLFunctions.__init__": [(), ('PySide2.QtGui.QOpenGLContext',)], + "QOpenGLFunctions.glActiveTexture": ('int',), + "QOpenGLFunctions.glAttachShader": ('int', 'int'), + "QOpenGLFunctions.glBindAttribLocation": ('int', 'int', 'str'), + "QOpenGLFunctions.glBindBuffer": ('int', 'int'), + "QOpenGLFunctions.glBindFramebuffer": ('int', 'int'), + "QOpenGLFunctions.glBindRenderbuffer": ('int', 'int'), + "QOpenGLFunctions.glBindTexture": ('int', 'int'), + "QOpenGLFunctions.glBlendColor": ('float', 'float', 'float', 'float'), + "QOpenGLFunctions.glBlendEquation": ('int',), + "QOpenGLFunctions.glBlendEquationSeparate": ('int', 'int'), + "QOpenGLFunctions.glBlendFunc": ('int', 'int'), + "QOpenGLFunctions.glBlendFuncSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCheckFramebufferStatus": ('int',), + "QOpenGLFunctions.glClear": ('int',), + "QOpenGLFunctions.glClearColor": ('float', 'float', 'float', 'float'), + "QOpenGLFunctions.glClearDepthf": ('float',), + "QOpenGLFunctions.glClearStencil": ('int',), + "QOpenGLFunctions.glColorMask": ('Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]'), + "QOpenGLFunctions.glCompileShader": ('int',), + "QOpenGLFunctions.glCompressedTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCompressedTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCopyTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCopyTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glCreateProgram": (), + "QOpenGLFunctions.glCreateShader": ('int',), + "QOpenGLFunctions.glCullFace": ('int',), + "QOpenGLFunctions.glDeleteBuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteFramebuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteProgram": ('int',), + "QOpenGLFunctions.glDeleteRenderbuffers": ('int', 'int'), + "QOpenGLFunctions.glDeleteShader": ('int',), + "QOpenGLFunctions.glDeleteTextures": ('int', 'int'), + "QOpenGLFunctions.glDepthFunc": ('int',), + "QOpenGLFunctions.glDepthMask": ('Union[str, int]',), + "QOpenGLFunctions.glDepthRangef": ('float', 'float'), + "QOpenGLFunctions.glDetachShader": ('int', 'int'), + "QOpenGLFunctions.glDisable": ('int',), + "QOpenGLFunctions.glDisableVertexAttribArray": ('int',), + "QOpenGLFunctions.glDrawArrays": ('int', 'int', 'int'), + "QOpenGLFunctions.glDrawElements": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glEnable": ('int',), + "QOpenGLFunctions.glEnableVertexAttribArray": ('int',), + "QOpenGLFunctions.glFinish": (), + "QOpenGLFunctions.glFlush": (), + "QOpenGLFunctions.glFramebufferRenderbuffer": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glFramebufferTexture2D": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glFrontFace": ('int',), + "QOpenGLFunctions.glGenBuffers": ('int', 'int'), + "QOpenGLFunctions.glGenFramebuffers": ('int', 'int'), + "QOpenGLFunctions.glGenRenderbuffers": ('int', 'int'), + "QOpenGLFunctions.glGenTextures": ('int', 'int'), + "QOpenGLFunctions.glGenerateMipmap": ('int',), + "QOpenGLFunctions.glGetAttachedShaders": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetAttribLocation": ('int', 'str'), + "QOpenGLFunctions.glGetBufferParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetError": (), + "QOpenGLFunctions.glGetFloatv": ('int', 'float'), + "QOpenGLFunctions.glGetFramebufferAttachmentParameteriv": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetIntegerv": ('int', 'int'), + "QOpenGLFunctions.glGetProgramiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetRenderbufferParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetShaderPrecisionFormat": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glGetShaderiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetString": ('int',), + "QOpenGLFunctions.glGetTexParameterfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetTexParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetUniformLocation": ('int', 'str'), + "QOpenGLFunctions.glGetUniformfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetUniformiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glGetVertexAttribfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glGetVertexAttribiv": ('int', 'int', 'int'), + "QOpenGLFunctions.glHint": ('int', 'int'), + "QOpenGLFunctions.glIsBuffer": ('int',), + "QOpenGLFunctions.glIsEnabled": ('int',), + "QOpenGLFunctions.glIsFramebuffer": ('int',), + "QOpenGLFunctions.glIsProgram": ('int',), + "QOpenGLFunctions.glIsRenderbuffer": ('int',), + "QOpenGLFunctions.glIsShader": ('int',), + "QOpenGLFunctions.glIsTexture": ('int',), + "QOpenGLFunctions.glLineWidth": ('float',), + "QOpenGLFunctions.glLinkProgram": ('int',), + "QOpenGLFunctions.glPixelStorei": ('int', 'int'), + "QOpenGLFunctions.glPolygonOffset": ('float', 'float'), + "QOpenGLFunctions.glReadPixels": ('int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glReleaseShaderCompiler": (), + "QOpenGLFunctions.glRenderbufferStorage": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glSampleCoverage": ('float', 'Union[str, int]'), + "QOpenGLFunctions.glScissor": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glShaderBinary": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glStencilFunc": ('int', 'int', 'int'), + "QOpenGLFunctions.glStencilFuncSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glStencilMask": ('int',), + "QOpenGLFunctions.glStencilMaskSeparate": ('int', 'int'), + "QOpenGLFunctions.glStencilOp": ('int', 'int', 'int'), + "QOpenGLFunctions.glStencilOpSeparate": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glTexImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glTexParameterf": ('int', 'int', 'float'), + "QOpenGLFunctions.glTexParameterfv": ('int', 'int', 'float'), + "QOpenGLFunctions.glTexParameteri": ('int', 'int', 'int'), + "QOpenGLFunctions.glTexParameteriv": ('int', 'int', 'int'), + "QOpenGLFunctions.glTexSubImage2D": ('int', 'int', 'int', 'int', 'int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform1f": ('int', 'float'), + "QOpenGLFunctions.glUniform1fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform1i": ('int', 'int'), + "QOpenGLFunctions.glUniform1iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform2f": ('int', 'float', 'float'), + "QOpenGLFunctions.glUniform2fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform2i": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform2iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform3f": ('int', 'float', 'float', 'float'), + "QOpenGLFunctions.glUniform3fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform3i": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform3iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniform4f": ('int', 'float', 'float', 'float', 'float'), + "QOpenGLFunctions.glUniform4fv": ('int', 'int', 'float'), + "QOpenGLFunctions.glUniform4i": ('int', 'int', 'int', 'int', 'int'), + "QOpenGLFunctions.glUniform4iv": ('int', 'int', 'int'), + "QOpenGLFunctions.glUniformMatrix2fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUniformMatrix3fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUniformMatrix4fv": ('int', 'int', 'Union[str, int]', 'float'), + "QOpenGLFunctions.glUseProgram": ('int',), + "QOpenGLFunctions.glValidateProgram": ('int',), + "QOpenGLFunctions.glVertexAttrib1f": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib1fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib2f": ('int', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib2fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib3f": ('int', 'float', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib3fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttrib4f": ('int', 'float', 'float', 'float', 'float'), + "QOpenGLFunctions.glVertexAttrib4fv": ('int', 'float'), + "QOpenGLFunctions.glVertexAttribPointer": ('int', 'int', 'int', 'Union[str, int]', 'int', 'int'), + "QOpenGLFunctions.glViewport": ('int', 'int', 'int', 'int'), + "QOpenGLFunctions.hasOpenGLFeature": ('PySide2.QtGui.QOpenGLFunctions.OpenGLFeature',), + "QOpenGLFunctions.initializeOpenGLFunctions": (), + "QOpenGLFunctions.openGLFeatures": (), + + # class PySide2.QtGui.QOpenGLPixelTransferOptions: + "QOpenGLPixelTransferOptions.__init__": [(), ('PySide2.QtGui.QOpenGLPixelTransferOptions',)], + "QOpenGLPixelTransferOptions.__copy__": (), + "QOpenGLPixelTransferOptions.alignment": (), + "QOpenGLPixelTransferOptions.imageHeight": (), + "QOpenGLPixelTransferOptions.isLeastSignificantBitFirst": (), + "QOpenGLPixelTransferOptions.isSwapBytesEnabled": (), + "QOpenGLPixelTransferOptions.rowLength": (), + "QOpenGLPixelTransferOptions.setAlignment": ('int',), + "QOpenGLPixelTransferOptions.setImageHeight": ('int',), + "QOpenGLPixelTransferOptions.setLeastSignificantByteFirst": ('bool',), + "QOpenGLPixelTransferOptions.setRowLength": ('int',), + "QOpenGLPixelTransferOptions.setSkipImages": ('int',), + "QOpenGLPixelTransferOptions.setSkipPixels": ('int',), + "QOpenGLPixelTransferOptions.setSkipRows": ('int',), + "QOpenGLPixelTransferOptions.setSwapBytesEnabled": ('bool',), + "QOpenGLPixelTransferOptions.skipImages": (), + "QOpenGLPixelTransferOptions.skipPixels": (), + "QOpenGLPixelTransferOptions.skipRows": (), + "QOpenGLPixelTransferOptions.swap": ('PySide2.QtGui.QOpenGLPixelTransferOptions',), + + # class PySide2.QtGui.QOpenGLShader: + "QOpenGLShader.__init__": ('ShaderType', 'PySide2.QtCore.QObject'), + "QOpenGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShader.compileSourceFile": ('str',), + "QOpenGLShader.hasOpenGLShaders": ('ShaderType', 'PySide2.QtGui.QOpenGLContext'), + "QOpenGLShader.isCompiled": (), + "QOpenGLShader.log": (), + "QOpenGLShader.shaderId": (), + "QOpenGLShader.shaderType": (), + "QOpenGLShader.sourceCode": (), + + # class PySide2.QtGui.QOpenGLShaderProgram: + "QOpenGLShaderProgram.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLShaderProgram.addCacheableShaderFromSourceCode": [('ShaderType', 'PySide2.QtCore.QByteArray'), ('ShaderType', 'str')], + "QOpenGLShaderProgram.addCacheableShaderFromSourceFile": ('ShaderType', 'str'), + "QOpenGLShaderProgram.addShader": ('PySide2.QtGui.QOpenGLShader',), + "QOpenGLShaderProgram.addShaderFromSourceCode": [('ShaderType', 'PySide2.QtCore.QByteArray'), ('ShaderType', 'str')], + "QOpenGLShaderProgram.addShaderFromSourceFile": ('ShaderType', 'str'), + "QOpenGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QOpenGLShaderProgram.bind": (), + "QOpenGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QOpenGLShaderProgram.create": (), + "QOpenGLShaderProgram.defaultInnerTessellationLevels": (), + "QOpenGLShaderProgram.defaultOuterTessellationLevels": (), + "QOpenGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QOpenGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QOpenGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtGui.QOpenGLContext',), + "QOpenGLShaderProgram.isLinked": (), + "QOpenGLShaderProgram.link": (), + "QOpenGLShaderProgram.log": (), + "QOpenGLShaderProgram.maxGeometryOutputVertices": (), + "QOpenGLShaderProgram.patchVertexCount": (), + "QOpenGLShaderProgram.programId": (), + "QOpenGLShaderProgram.release": (), + "QOpenGLShaderProgram.removeAllShaders": (), + "QOpenGLShaderProgram.removeShader": ('PySide2.QtGui.QOpenGLShader',), + "QOpenGLShaderProgram.setAttributeArray": [('int', 'float', 'int', 'int'), ('int', 'int', 'int', 'int', 'int'), ('str', 'float', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QOpenGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QOpenGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'float', 'int', 'int'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'float', 'int', 'int')], + "QOpenGLShaderProgram.setDefaultInnerTessellationLevels": ('list',), + "QOpenGLShaderProgram.setDefaultOuterTessellationLevels": ('list',), + "QOpenGLShaderProgram.setPatchVertexCount": ('int',), + "QOpenGLShaderProgram.setUniformValue": [('int', 'List[List[float]]'), ('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'List[List[float]]'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QOpenGLShaderProgram.setUniformValueArray": [('int', 'float', 'int', 'int'), ('int', 'int', 'int'), ('str', 'float', 'int', 'int'), ('str', 'int', 'int')], + "QOpenGLShaderProgram.shaders": (), + "QOpenGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtGui.QOpenGLTexture: + "QOpenGLTexture.__init__": [('PySide2.QtGui.QImage', 'PySide2.QtGui.QOpenGLTexture.MipMapGeneration'), ('PySide2.QtGui.QOpenGLTexture.Target',)], + "QOpenGLTexture.allocateStorage": [(), ('PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType')], + "QOpenGLTexture.bind": [(), ('int', 'PySide2.QtGui.QOpenGLTexture.TextureUnitReset')], + "QOpenGLTexture.borderColor": (), + "QOpenGLTexture.boundTextureId": [('PySide2.QtGui.QOpenGLTexture.BindingTarget',), ('int', 'PySide2.QtGui.QOpenGLTexture.BindingTarget')], + "QOpenGLTexture.comparisonFunction": (), + "QOpenGLTexture.comparisonMode": (), + "QOpenGLTexture.create": (), + "QOpenGLTexture.createTextureView": ('PySide2.QtGui.QOpenGLTexture.Target', 'PySide2.QtGui.QOpenGLTexture.TextureFormat', 'int', 'int', 'int', 'int'), + "QOpenGLTexture.depth": (), + "QOpenGLTexture.depthStencilMode": (), + "QOpenGLTexture.destroy": (), + "QOpenGLTexture.faces": (), + "QOpenGLTexture.format": (), + "QOpenGLTexture.generateMipMaps": [(), ('int', 'bool')], + "QOpenGLTexture.hasFeature": ('PySide2.QtGui.QOpenGLTexture.Feature',), + "QOpenGLTexture.height": (), + "QOpenGLTexture.isAutoMipMapGenerationEnabled": (), + "QOpenGLTexture.isBound": [(), ('int',)], + "QOpenGLTexture.isCreated": (), + "QOpenGLTexture.isFixedSamplePositions": (), + "QOpenGLTexture.isStorageAllocated": (), + "QOpenGLTexture.isTextureView": (), + "QOpenGLTexture.layers": (), + "QOpenGLTexture.levelOfDetailRange": (), + "QOpenGLTexture.levelofDetailBias": (), + "QOpenGLTexture.magnificationFilter": (), + "QOpenGLTexture.maximumAnisotropy": (), + "QOpenGLTexture.maximumLevelOfDetail": (), + "QOpenGLTexture.maximumMipLevels": (), + "QOpenGLTexture.minMagFilters": (), + "QOpenGLTexture.minificationFilter": (), + "QOpenGLTexture.minimumLevelOfDetail": (), + "QOpenGLTexture.mipBaseLevel": (), + "QOpenGLTexture.mipLevelRange": (), + "QOpenGLTexture.mipLevels": (), + "QOpenGLTexture.mipMaxLevel": (), + "QOpenGLTexture.release": [(), ('int', 'PySide2.QtGui.QOpenGLTexture.TextureUnitReset')], + "QOpenGLTexture.samples": (), + "QOpenGLTexture.setAutoMipMapGenerationEnabled": ('bool',), + "QOpenGLTexture.setBorderColor": [('PySide2.QtGui.QColor',), ('float', 'float', 'float', 'float'), ('int', 'int', 'int', 'int')], + "QOpenGLTexture.setComparisonFunction": ('PySide2.QtGui.QOpenGLTexture.ComparisonFunction',), + "QOpenGLTexture.setComparisonMode": ('PySide2.QtGui.QOpenGLTexture.ComparisonMode',), + "QOpenGLTexture.setCompressedData": [('int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions')], + "QOpenGLTexture.setData": [('PySide2.QtGui.QImage', 'PySide2.QtGui.QOpenGLTexture.MipMapGeneration'), ('PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions'), ('int', 'int', 'int', 'PySide2.QtGui.QOpenGLTexture.CubeMapFace', 'PySide2.QtGui.QOpenGLTexture.PixelFormat', 'PySide2.QtGui.QOpenGLTexture.PixelType', 'int', 'PySide2.QtGui.QOpenGLPixelTransferOptions')], + "QOpenGLTexture.setDepthStencilMode": ('PySide2.QtGui.QOpenGLTexture.DepthStencilMode',), + "QOpenGLTexture.setFixedSamplePositions": ('bool',), + "QOpenGLTexture.setFormat": ('PySide2.QtGui.QOpenGLTexture.TextureFormat',), + "QOpenGLTexture.setLayers": ('int',), + "QOpenGLTexture.setLevelOfDetailRange": ('float', 'float'), + "QOpenGLTexture.setLevelofDetailBias": ('float',), + "QOpenGLTexture.setMagnificationFilter": ('PySide2.QtGui.QOpenGLTexture.Filter',), + "QOpenGLTexture.setMaximumAnisotropy": ('float',), + "QOpenGLTexture.setMaximumLevelOfDetail": ('float',), + "QOpenGLTexture.setMinMagFilters": ('PySide2.QtGui.QOpenGLTexture.Filter', 'PySide2.QtGui.QOpenGLTexture.Filter'), + "QOpenGLTexture.setMinificationFilter": ('PySide2.QtGui.QOpenGLTexture.Filter',), + "QOpenGLTexture.setMinimumLevelOfDetail": ('float',), + "QOpenGLTexture.setMipBaseLevel": ('int',), + "QOpenGLTexture.setMipLevelRange": ('int', 'int'), + "QOpenGLTexture.setMipLevels": ('int',), + "QOpenGLTexture.setMipMaxLevel": ('int',), + "QOpenGLTexture.setSamples": ('int',), + "QOpenGLTexture.setSize": ('int', 'int', 'int'), + "QOpenGLTexture.setSwizzleMask": [('PySide2.QtGui.QOpenGLTexture.SwizzleComponent', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue'), ('PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue', 'PySide2.QtGui.QOpenGLTexture.SwizzleValue')], + "QOpenGLTexture.setWrapMode": [('PySide2.QtGui.QOpenGLTexture.CoordinateDirection', 'PySide2.QtGui.QOpenGLTexture.WrapMode'), ('PySide2.QtGui.QOpenGLTexture.WrapMode',)], + "QOpenGLTexture.swizzleMask": ('PySide2.QtGui.QOpenGLTexture.SwizzleComponent',), + "QOpenGLTexture.target": (), + "QOpenGLTexture.textureId": (), + "QOpenGLTexture.width": (), + "QOpenGLTexture.wrapMode": ('PySide2.QtGui.QOpenGLTexture.CoordinateDirection',), + + # class PySide2.QtGui.QOpenGLTimeMonitor: + "QOpenGLTimeMonitor.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLTimeMonitor.create": (), + "QOpenGLTimeMonitor.destroy": (), + "QOpenGLTimeMonitor.isCreated": (), + "QOpenGLTimeMonitor.isResultAvailable": (), + "QOpenGLTimeMonitor.objectIds": (), + "QOpenGLTimeMonitor.recordSample": (), + "QOpenGLTimeMonitor.reset": (), + "QOpenGLTimeMonitor.sampleCount": (), + "QOpenGLTimeMonitor.setSampleCount": ('int',), + "QOpenGLTimeMonitor.waitForIntervals": (), + "QOpenGLTimeMonitor.waitForSamples": (), + + # class PySide2.QtGui.QOpenGLTimerQuery: + "QOpenGLTimerQuery.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLTimerQuery.begin": (), + "QOpenGLTimerQuery.create": (), + "QOpenGLTimerQuery.destroy": (), + "QOpenGLTimerQuery.end": (), + "QOpenGLTimerQuery.isCreated": (), + "QOpenGLTimerQuery.isResultAvailable": (), + "QOpenGLTimerQuery.objectId": (), + "QOpenGLTimerQuery.recordTimestamp": (), + "QOpenGLTimerQuery.waitForResult": (), + "QOpenGLTimerQuery.waitForTimestamp": (), + + # class PySide2.QtGui.QOpenGLVersionProfile: + "QOpenGLVersionProfile.__init__": [(), ('PySide2.QtGui.QOpenGLVersionProfile',), ('PySide2.QtGui.QSurfaceFormat',)], + "QOpenGLVersionProfile.__copy__": (), + "QOpenGLVersionProfile.hasProfiles": (), + "QOpenGLVersionProfile.isLegacyVersion": (), + "QOpenGLVersionProfile.isValid": (), + "QOpenGLVersionProfile.profile": (), + "QOpenGLVersionProfile.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QOpenGLVersionProfile.setVersion": ('int', 'int'), + "QOpenGLVersionProfile.version": (), + + # class PySide2.QtGui.QOpenGLVertexArrayObject: + "QOpenGLVertexArrayObject.__init__": ('PySide2.QtCore.QObject',), + "QOpenGLVertexArrayObject.bind": (), + "QOpenGLVertexArrayObject.create": (), + "QOpenGLVertexArrayObject.destroy": (), + "QOpenGLVertexArrayObject.isCreated": (), + "QOpenGLVertexArrayObject.objectId": (), + "QOpenGLVertexArrayObject.release": (), + + # class PySide2.QtGui.QOpenGLWindow: + "QOpenGLWindow.__init__": [('PySide2.QtGui.QOpenGLContext', 'PySide2.QtGui.QOpenGLWindow.UpdateBehavior', 'PySide2.QtGui.QWindow'), ('PySide2.QtGui.QOpenGLWindow.UpdateBehavior', 'PySide2.QtGui.QWindow')], + "QOpenGLWindow.context": (), + "QOpenGLWindow.defaultFramebufferObject": (), + "QOpenGLWindow.doneCurrent": (), + "QOpenGLWindow.grabFramebuffer": (), + "QOpenGLWindow.initializeGL": (), + "QOpenGLWindow.isValid": (), + "QOpenGLWindow.makeCurrent": (), + "QOpenGLWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWindow.paintGL": (), + "QOpenGLWindow.paintOverGL": (), + "QOpenGLWindow.paintUnderGL": (), + "QOpenGLWindow.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWindow.resizeGL": ('int', 'int'), + "QOpenGLWindow.shareContext": (), + "QOpenGLWindow.updateBehavior": (), + + # class PySide2.QtGui.QPageLayout: + "QPageLayout.__init__": [(), ('PySide2.QtGui.QPageLayout',), ('PySide2.QtGui.QPageSize', 'PySide2.QtGui.QPageLayout.Orientation', 'PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit', 'PySide2.QtCore.QMarginsF')], + "QPageLayout.__copy__": (), + "QPageLayout.fullRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.fullRectPixels": ('int',), + "QPageLayout.fullRectPoints": (), + "QPageLayout.isEquivalentTo": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.isValid": (), + "QPageLayout.margins": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.marginsPixels": ('int',), + "QPageLayout.marginsPoints": (), + "QPageLayout.maximumMargins": (), + "QPageLayout.minimumMargins": (), + "QPageLayout.mode": (), + "QPageLayout.orientation": (), + "QPageLayout.pageSize": (), + "QPageLayout.paintRect": [(), ('PySide2.QtGui.QPageLayout.Unit',)], + "QPageLayout.paintRectPixels": ('int',), + "QPageLayout.paintRectPoints": (), + "QPageLayout.setBottomMargin": ('float',), + "QPageLayout.setLeftMargin": ('float',), + "QPageLayout.setMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMinimumMargins": ('PySide2.QtCore.QMarginsF',), + "QPageLayout.setMode": ('PySide2.QtGui.QPageLayout.Mode',), + "QPageLayout.setOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPageLayout.setPageSize": ('PySide2.QtGui.QPageSize', 'PySide2.QtCore.QMarginsF'), + "QPageLayout.setRightMargin": ('float',), + "QPageLayout.setTopMargin": ('float',), + "QPageLayout.setUnits": ('PySide2.QtGui.QPageLayout.Unit',), + "QPageLayout.swap": ('PySide2.QtGui.QPageLayout',), + "QPageLayout.units": (), + + # class PySide2.QtGui.QPageSize: + "QPageSize.__init__": [(), ('PySide2.QtCore.QSize', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'str', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.__copy__": (), + "QPageSize.definitionSize": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.definitionUnits": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.id": [(), ('PySide2.QtCore.QSize', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('PySide2.QtCore.QSizeF', 'PySide2.QtGui.QPageSize.Unit', 'PySide2.QtGui.QPageSize.SizeMatchPolicy'), ('int',)], + "QPageSize.isEquivalentTo": ('PySide2.QtGui.QPageSize',), + "QPageSize.isValid": (), + "QPageSize.key": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.name": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.rect": ('PySide2.QtGui.QPageSize.Unit',), + "QPageSize.rectPixels": ('int',), + "QPageSize.rectPoints": (), + "QPageSize.size": [('PySide2.QtGui.QPageSize.PageSizeId', 'PySide2.QtGui.QPageSize.Unit'), ('PySide2.QtGui.QPageSize.Unit',)], + "QPageSize.sizePixels": [('PySide2.QtGui.QPageSize.PageSizeId', 'int'), ('int',)], + "QPageSize.sizePoints": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + "QPageSize.swap": ('PySide2.QtGui.QPageSize',), + "QPageSize.windowsId": [(), ('PySide2.QtGui.QPageSize.PageSizeId',)], + + # class PySide2.QtGui.QPagedPaintDevice: + "QPagedPaintDevice.__init__": (), + "QPagedPaintDevice.devicePageLayout": (), + "QPagedPaintDevice.margins": (), + "QPagedPaintDevice.newPage": (), + "QPagedPaintDevice.pageLayout": (), + "QPagedPaintDevice.pageSize": (), + "QPagedPaintDevice.pageSizeMM": (), + "QPagedPaintDevice.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPagedPaintDevice.setPageLayout": ('PySide2.QtGui.QPageLayout',), + "QPagedPaintDevice.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('PySide2.QtCore.QMarginsF', 'PySide2.QtGui.QPageLayout.Unit')], + "QPagedPaintDevice.setPageOrientation": ('PySide2.QtGui.QPageLayout.Orientation',), + "QPagedPaintDevice.setPageSize": [('PySide2.QtGui.QPageSize',), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPagedPaintDevice.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtGui.QPaintDevice: + "QPaintDevice.__init__": (), + "QPaintDevice.colorCount": (), + "QPaintDevice.depth": (), + "QPaintDevice.devType": (), + "QPaintDevice.devicePixelRatio": (), + "QPaintDevice.devicePixelRatioF": (), + "QPaintDevice.devicePixelRatioFScale": (), + "QPaintDevice.height": (), + "QPaintDevice.heightMM": (), + "QPaintDevice.initPainter": ('PySide2.QtGui.QPainter',), + "QPaintDevice.logicalDpiX": (), + "QPaintDevice.logicalDpiY": (), + "QPaintDevice.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDevice.paintEngine": (), + "QPaintDevice.paintingActive": (), + "QPaintDevice.physicalDpiX": (), + "QPaintDevice.physicalDpiY": (), + "QPaintDevice.redirected": ('PySide2.QtCore.QPoint',), + "QPaintDevice.sharedPainter": (), + "QPaintDevice.width": (), + "QPaintDevice.widthMM": (), + + # class PySide2.QtGui.QPaintDeviceWindow: + "QPaintDeviceWindow.event": ('PySide2.QtCore.QEvent',), + "QPaintDeviceWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QPaintDeviceWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPaintDeviceWindow.paintEngine": (), + "QPaintDeviceWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPaintDeviceWindow.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + + # class PySide2.QtGui.QPaintEngine: + "QPaintEngine.__init__": ('PaintEngineFeatures',), + "QPaintEngine.begin": ('PySide2.QtGui.QPaintDevice',), + "QPaintEngine.clearDirty": ('DirtyFlags',), + "QPaintEngine.coordinateOffset": (), + "QPaintEngine.drawEllipse": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QPaintEngine.drawImage": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), + "QPaintEngine.drawLines": [('PySide2.QtCore.QLine', 'int'), ('PySide2.QtCore.QLineF', 'int')], + "QPaintEngine.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPaintEngine.drawPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), + "QPaintEngine.drawPoints": [('PySide2.QtCore.QPoint', 'int'), ('PySide2.QtCore.QPointF', 'int')], + "QPaintEngine.drawPolygon": [('PySide2.QtCore.QPoint', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode'), ('PySide2.QtCore.QPointF', 'int', 'PySide2.QtGui.QPaintEngine.PolygonDrawMode')], + "QPaintEngine.drawRects": [('PySide2.QtCore.QRect', 'int'), ('PySide2.QtCore.QRectF', 'int')], + "QPaintEngine.drawTextItem": ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), + "QPaintEngine.drawTiledPixmap": ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), + "QPaintEngine.end": (), + "QPaintEngine.hasFeature": ('PaintEngineFeatures',), + "QPaintEngine.isActive": (), + "QPaintEngine.isExtended": (), + "QPaintEngine.paintDevice": (), + "QPaintEngine.painter": (), + "QPaintEngine.setActive": ('bool',), + "QPaintEngine.setDirty": ('DirtyFlags',), + "QPaintEngine.setSystemClip": ('PySide2.QtGui.QRegion',), + "QPaintEngine.setSystemRect": ('PySide2.QtCore.QRect',), + "QPaintEngine.syncState": (), + "QPaintEngine.systemClip": (), + "QPaintEngine.systemRect": (), + "QPaintEngine.testDirty": ('DirtyFlags',), + "QPaintEngine.type": (), + "QPaintEngine.updateState": ('PySide2.QtGui.QPaintEngineState',), + + # class PySide2.QtGui.QPaintEngineState: + "QPaintEngineState.__init__": (), + "QPaintEngineState.backgroundBrush": (), + "QPaintEngineState.backgroundMode": (), + "QPaintEngineState.brush": (), + "QPaintEngineState.brushNeedsResolving": (), + "QPaintEngineState.brushOrigin": (), + "QPaintEngineState.clipOperation": (), + "QPaintEngineState.clipPath": (), + "QPaintEngineState.clipRegion": (), + "QPaintEngineState.compositionMode": (), + "QPaintEngineState.font": (), + "QPaintEngineState.isClipEnabled": (), + "QPaintEngineState.matrix": (), + "QPaintEngineState.opacity": (), + "QPaintEngineState.painter": (), + "QPaintEngineState.pen": (), + "QPaintEngineState.penNeedsResolving": (), + "QPaintEngineState.renderHints": (), + "QPaintEngineState.state": (), + "QPaintEngineState.transform": (), + + # class PySide2.QtGui.QPaintEvent: + "QPaintEvent.__init__": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QPaintEvent.rect": (), + "QPaintEvent.region": (), + + # class PySide2.QtGui.QPainter: + "QPainter.__init__": [(), ('PySide2.QtGui.QPaintDevice',)], + "QPainter.background": (), + "QPainter.backgroundMode": (), + "QPainter.begin": ('PySide2.QtGui.QPaintDevice',), + "QPainter.beginNativePainting": (), + "QPainter.boundingRect": [('PySide2.QtCore.QRect', 'int', 'str'), ('PySide2.QtCore.QRectF', 'int', 'str'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str')], + "QPainter.brush": (), + "QPainter.brushOrigin": (), + "QPainter.clipBoundingRect": (), + "QPainter.clipPath": (), + "QPainter.clipRegion": (), + "QPainter.combinedMatrix": (), + "QPainter.combinedTransform": (), + "QPainter.compositionMode": (), + "QPainter.device": (), + "QPainter.deviceMatrix": (), + "QPainter.deviceTransform": (), + "QPainter.drawArc": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawChord": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawConvexPolygon": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawEllipse": [('PySide2.QtCore.QPoint', 'int', 'int'), ('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawImage": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'ImageConversionFlags'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRect', 'ImageConversionFlags'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QImage', 'PySide2.QtCore.QRectF', 'ImageConversionFlags'), ('int', 'int', 'PySide2.QtGui.QImage', 'int', 'int', 'int', 'int', 'ImageConversionFlags')], + "QPainter.drawLine": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int')], + "QPainter.drawLines": ('list',), + "QPainter.drawPath": ('PySide2.QtGui.QPainterPath',), + "QPainter.drawPicture": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPicture'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPicture'), ('int', 'int', 'PySide2.QtGui.QPicture')], + "QPainter.drawPie": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmap": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPoint', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QRectF'), ('int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int', 'int', 'int')], + "QPainter.drawPixmapFragments": ('PySide2.QtGui.QPainter.PixmapFragment', 'int', 'PySide2.QtGui.QPixmap', 'PixmapFragmentHints'), + "QPainter.drawPoint": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.drawPoints": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawPolygon": [('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.FillRule'), ('list', 'PySide2.QtCore.Qt.FillRule')], + "QPainter.drawPolyline": [('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('list',)], + "QPainter.drawRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.drawRects": ('list',), + "QPainter.drawRoundRect": [('PySide2.QtCore.QRect', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('int', 'int', 'int', 'int', 'int', 'int')], + "QPainter.drawRoundedRect": [('PySide2.QtCore.QRect', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('int', 'int', 'int', 'int', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainter.drawStaticText": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QStaticText'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QStaticText'), ('int', 'int', 'PySide2.QtGui.QStaticText')], + "QPainter.drawText": [('PySide2.QtCore.QPoint', 'str'), ('PySide2.QtCore.QPointF', 'str'), ('PySide2.QtCore.QRect', 'int', 'str', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QRectF', 'int', 'str', 'PySide2.QtCore.QRectF'), ('PySide2.QtCore.QRectF', 'str', 'PySide2.QtGui.QTextOption'), ('int', 'int', 'int', 'int', 'int', 'str', 'PySide2.QtCore.QRect'), ('int', 'int', 'str')], + "QPainter.drawTextItem": [('PySide2.QtCore.QPoint', 'PySide2.QtGui.QTextItem'), ('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextItem'), ('int', 'int', 'PySide2.QtGui.QTextItem')], + "QPainter.drawTiledPixmap": [('PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPoint'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPixmap', 'PySide2.QtCore.QPointF'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QPixmap', 'int', 'int')], + "QPainter.end": (), + "QPainter.endNativePainting": (), + "QPainter.eraseRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',), ('int', 'int', 'int', 'int')], + "QPainter.fillPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QBrush'), + "QPainter.fillRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.BrushStyle'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.GlobalColor'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QBrush'), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.BrushStyle'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.GlobalColor'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QBrush'), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QColor')], + "QPainter.font": (), + "QPainter.fontInfo": (), + "QPainter.fontMetrics": (), + "QPainter.hasClipping": (), + "QPainter.initFrom": ('PySide2.QtGui.QPaintDevice',), + "QPainter.isActive": (), + "QPainter.layoutDirection": (), + "QPainter.matrix": (), + "QPainter.matrixEnabled": (), + "QPainter.opacity": (), + "QPainter.paintEngine": (), + "QPainter.pen": (), + "QPainter.redirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.renderHints": (), + "QPainter.resetMatrix": (), + "QPainter.resetTransform": (), + "QPainter.restore": (), + "QPainter.restoreRedirected": ('PySide2.QtGui.QPaintDevice',), + "QPainter.rotate": ('float',), + "QPainter.save": (), + "QPainter.scale": ('float', 'float'), + "QPainter.setBackground": ('PySide2.QtGui.QBrush',), + "QPainter.setBackgroundMode": ('PySide2.QtCore.Qt.BGMode',), + "QPainter.setBrush": [('PySide2.QtCore.Qt.BrushStyle',), ('PySide2.QtGui.QBrush',)], + "QPainter.setBrushOrigin": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('int', 'int')], + "QPainter.setClipPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipRect": [('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ClipOperation'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ClipOperation'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ClipOperation')], + "QPainter.setClipRegion": ('PySide2.QtGui.QRegion', 'PySide2.QtCore.Qt.ClipOperation'), + "QPainter.setClipping": ('bool',), + "QPainter.setCompositionMode": ('PySide2.QtGui.QPainter.CompositionMode',), + "QPainter.setFont": ('PySide2.QtGui.QFont',), + "QPainter.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QPainter.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setMatrixEnabled": ('bool',), + "QPainter.setOpacity": ('float',), + "QPainter.setPen": [('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPainter.setRedirected": ('PySide2.QtGui.QPaintDevice', 'PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), + "QPainter.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QPainter.setRenderHints": ('RenderHints', 'bool'), + "QPainter.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.setViewTransformEnabled": ('bool',), + "QPainter.setViewport": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWindow": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPainter.setWorldMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QPainter.setWorldMatrixEnabled": ('bool',), + "QPainter.setWorldTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QPainter.shear": ('float', 'float'), + "QPainter.strokePath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen'), + "QPainter.testRenderHint": ('PySide2.QtGui.QPainter.RenderHint',), + "QPainter.transform": (), + "QPainter.translate": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainter.viewTransformEnabled": (), + "QPainter.viewport": (), + "QPainter.window": (), + "QPainter.worldMatrix": (), + "QPainter.worldMatrixEnabled": (), + "QPainter.worldTransform": (), + + # class PySide2.QtGui.QPainterPath: + "QPainterPath.__init__": [(), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.__copy__": (), + "QPainterPath.addEllipse": [('PySide2.QtCore.QPointF', 'float', 'float'), ('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.addPolygon": ('PySide2.QtGui.QPolygonF',), + "QPainterPath.addRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QPainterPath.addRegion": ('PySide2.QtGui.QRegion',), + "QPainterPath.addRoundRect": [('PySide2.QtCore.QRectF', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QPainterPath.addRoundedRect": [('PySide2.QtCore.QRectF', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode'), ('float', 'float', 'float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.SizeMode')], + "QPainterPath.addText": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QFont', 'str'), ('float', 'float', 'PySide2.QtGui.QFont', 'str')], + "QPainterPath.angleAtPercent": ('float',), + "QPainterPath.arcMoveTo": [('PySide2.QtCore.QRectF', 'float'), ('float', 'float', 'float', 'float', 'float')], + "QPainterPath.arcTo": [('PySide2.QtCore.QRectF', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.boundingRect": (), + "QPainterPath.closeSubpath": (), + "QPainterPath.connectPath": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.contains": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.controlPointRect": (), + "QPainterPath.cubicTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QPainterPath.currentPosition": (), + "QPainterPath.elementAt": ('int',), + "QPainterPath.elementCount": (), + "QPainterPath.fillRule": (), + "QPainterPath.intersected": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.intersects": [('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',)], + "QPainterPath.isEmpty": (), + "QPainterPath.length": (), + "QPainterPath.lineTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.moveTo": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.percentAtLength": ('float',), + "QPainterPath.pointAtPercent": ('float',), + "QPainterPath.quadTo": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF'), ('float', 'float', 'float', 'float')], + "QPainterPath.setElementPositionAt": ('int', 'float', 'float'), + "QPainterPath.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QPainterPath.simplified": (), + "QPainterPath.slopeAtPercent": ('float',), + "QPainterPath.subtracted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.subtractedInverted": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.swap": ('PySide2.QtGui.QPainterPath',), + "QPainterPath.toFillPolygon": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toFillPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.toReversed": (), + "QPainterPath.toSubpathPolygons": [('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',)], + "QPainterPath.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPainterPath.united": ('PySide2.QtGui.QPainterPath',), + + # class PySide2.QtGui.QPainterPathStroker: + "QPainterPathStroker.__init__": [(), ('PySide2.QtGui.QPen',)], + "QPainterPathStroker.capStyle": (), + "QPainterPathStroker.createStroke": ('PySide2.QtGui.QPainterPath',), + "QPainterPathStroker.curveThreshold": (), + "QPainterPathStroker.dashOffset": (), + "QPainterPathStroker.dashPattern": (), + "QPainterPathStroker.joinStyle": (), + "QPainterPathStroker.miterLimit": (), + "QPainterPathStroker.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPainterPathStroker.setCurveThreshold": ('float',), + "QPainterPathStroker.setDashOffset": ('float',), + "QPainterPathStroker.setDashPattern": [('PySide2.QtCore.Qt.PenStyle',), ('list',)], + "QPainterPathStroker.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPainterPathStroker.setMiterLimit": ('float',), + "QPainterPathStroker.setWidth": ('float',), + "QPainterPathStroker.width": (), + + # class PySide2.QtGui.QPalette: + "QPalette.__init__": [(), ('PySide2.QtCore.Qt.GlobalColor',), ('PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette',)], + "QPalette.__copy__": (), + "QPalette.alternateBase": (), + "QPalette.background": (), + "QPalette.base": (), + "QPalette.brightText": (), + "QPalette.brush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.button": (), + "QPalette.buttonText": (), + "QPalette.cacheKey": (), + "QPalette.color": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), ('PySide2.QtGui.QPalette.ColorRole',)], + "QPalette.currentColorGroup": (), + "QPalette.dark": (), + "QPalette.foreground": (), + "QPalette.highlight": (), + "QPalette.highlightedText": (), + "QPalette.isBrushSet": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole'), + "QPalette.isCopyOf": ('PySide2.QtGui.QPalette',), + "QPalette.isEqual": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorGroup'), + "QPalette.light": (), + "QPalette.link": (), + "QPalette.linkVisited": (), + "QPalette.mid": (), + "QPalette.midlight": (), + "QPalette.resolve": [(), ('PySide2.QtGui.QPalette',), ('int',)], + "QPalette.setBrush": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QBrush')], + "QPalette.setColor": [('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor'), ('PySide2.QtGui.QPalette.ColorRole', 'PySide2.QtGui.QColor')], + "QPalette.setColorGroup": ('PySide2.QtGui.QPalette.ColorGroup', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush', 'PySide2.QtGui.QBrush'), + "QPalette.setCurrentColorGroup": ('PySide2.QtGui.QPalette.ColorGroup',), + "QPalette.shadow": (), + "QPalette.swap": ('PySide2.QtGui.QPalette',), + "QPalette.text": (), + "QPalette.toolTipBase": (), + "QPalette.toolTipText": (), + "QPalette.window": (), + "QPalette.windowText": (), + + # class PySide2.QtGui.QPdfWriter: + "QPdfWriter.__init__": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPdfWriter.creator": (), + "QPdfWriter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPdfWriter.newPage": (), + "QPdfWriter.paintEngine": (), + "QPdfWriter.resolution": (), + "QPdfWriter.setCreator": ('str',), + "QPdfWriter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPdfWriter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPdfWriter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPdfWriter.setResolution": ('int',), + "QPdfWriter.setTitle": ('str',), + "QPdfWriter.title": (), + + # class PySide2.QtGui.QPen: + "QPen.__init__": [(), ('PySide2.QtCore.Qt.PenStyle',), ('PySide2.QtGui.QBrush', 'float', 'PySide2.QtCore.Qt.PenStyle', 'PySide2.QtCore.Qt.PenCapStyle', 'PySide2.QtCore.Qt.PenJoinStyle'), ('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPen',)], + "QPen.__copy__": (), + "QPen.brush": (), + "QPen.capStyle": (), + "QPen.color": (), + "QPen.dashOffset": (), + "QPen.dashPattern": (), + "QPen.isCosmetic": (), + "QPen.isSolid": (), + "QPen.joinStyle": (), + "QPen.miterLimit": (), + "QPen.setBrush": ('PySide2.QtGui.QBrush',), + "QPen.setCapStyle": ('PySide2.QtCore.Qt.PenCapStyle',), + "QPen.setColor": ('PySide2.QtGui.QColor',), + "QPen.setCosmetic": ('bool',), + "QPen.setDashOffset": ('float',), + "QPen.setDashPattern": ('list',), + "QPen.setJoinStyle": ('PySide2.QtCore.Qt.PenJoinStyle',), + "QPen.setMiterLimit": ('float',), + "QPen.setStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QPen.setWidth": ('int',), + "QPen.setWidthF": ('float',), + "QPen.style": (), + "QPen.swap": ('PySide2.QtGui.QPen',), + "QPen.width": (), + "QPen.widthF": (), + + # class PySide2.QtGui.QPicture: + "QPicture.__init__": [('PySide2.QtGui.QPicture',), ('int',)], + "QPicture.__copy__": (), + "QPicture.boundingRect": (), + "QPicture.data": (), + "QPicture.devType": (), + "QPicture.inputFormatList": (), + "QPicture.inputFormats": (), + "QPicture.isNull": (), + "QPicture.load": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPicture.outputFormatList": (), + "QPicture.outputFormats": (), + "QPicture.paintEngine": (), + "QPicture.pictureFormat": ('str',), + "QPicture.play": ('PySide2.QtGui.QPainter',), + "QPicture.save": [('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPicture.setBoundingRect": ('PySide2.QtCore.QRect',), + "QPicture.setData": ('str', 'int'), + "QPicture.size": (), + "QPicture.swap": ('PySide2.QtGui.QPicture',), + + # class PySide2.QtGui.QPictureIO: + "QPictureIO.__init__": [(), ('PySide2.QtCore.QIODevice', 'str'), ('str', 'str')], + "QPictureIO.description": (), + "QPictureIO.fileName": (), + "QPictureIO.format": (), + "QPictureIO.gamma": (), + "QPictureIO.inputFormats": (), + "QPictureIO.ioDevice": (), + "QPictureIO.outputFormats": (), + "QPictureIO.parameters": (), + "QPictureIO.picture": (), + "QPictureIO.pictureFormat": [('PySide2.QtCore.QIODevice',), ('str',)], + "QPictureIO.quality": (), + "QPictureIO.read": (), + "QPictureIO.setDescription": ('str',), + "QPictureIO.setFileName": ('str',), + "QPictureIO.setFormat": ('str',), + "QPictureIO.setGamma": ('float',), + "QPictureIO.setIODevice": ('PySide2.QtCore.QIODevice',), + "QPictureIO.setParameters": ('str',), + "QPictureIO.setPicture": ('PySide2.QtGui.QPicture',), + "QPictureIO.setQuality": ('int',), + "QPictureIO.setStatus": ('int',), + "QPictureIO.status": (), + "QPictureIO.write": (), + + # class PySide2.QtGui.QPixelFormat: + "QPixelFormat.__init__": [(), ('PySide2.QtGui.QPixelFormat',), ('PySide2.QtGui.QPixelFormat.ColorModel', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'Union[str, int]', 'PySide2.QtGui.QPixelFormat.AlphaUsage', 'PySide2.QtGui.QPixelFormat.AlphaPosition', 'PySide2.QtGui.QPixelFormat.AlphaPremultiplied', 'PySide2.QtGui.QPixelFormat.TypeInterpretation', 'PySide2.QtGui.QPixelFormat.ByteOrder', 'Union[str, int]')], + "QPixelFormat.__copy__": (), + "QPixelFormat.alphaPosition": (), + "QPixelFormat.alphaSize": (), + "QPixelFormat.alphaUsage": (), + "QPixelFormat.bitsPerPixel": (), + "QPixelFormat.blackSize": (), + "QPixelFormat.blueSize": (), + "QPixelFormat.brightnessSize": (), + "QPixelFormat.byteOrder": (), + "QPixelFormat.channelCount": (), + "QPixelFormat.colorModel": (), + "QPixelFormat.cyanSize": (), + "QPixelFormat.greenSize": (), + "QPixelFormat.hueSize": (), + "QPixelFormat.lightnessSize": (), + "QPixelFormat.magentaSize": (), + "QPixelFormat.premultiplied": (), + "QPixelFormat.redSize": (), + "QPixelFormat.saturationSize": (), + "QPixelFormat.subEnum": (), + "QPixelFormat.typeInterpretation": (), + "QPixelFormat.yellowSize": (), + "QPixelFormat.yuvLayout": (), + + # class PySide2.QtGui.QPixmap: + "QPixmap.__init__": [(), ('List[str]',), ('PySide2.QtCore.QSize',), ('PySide2.QtGui.QImage',), ('PySide2.QtGui.QPixmap',), ('int', 'int'), ('str', 'str', 'ImageConversionFlags')], + "QPixmap.__copy__": (), + "QPixmap.cacheKey": (), + "QPixmap.convertFromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.copy": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QPixmap.createHeuristicMask": ('bool',), + "QPixmap.createMaskFromColor": ('PySide2.QtGui.QColor', 'PySide2.QtCore.Qt.MaskMode'), + "QPixmap.defaultDepth": (), + "QPixmap.depth": (), + "QPixmap.devType": (), + "QPixmap.devicePixelRatio": (), + "QPixmap.fill": [('PySide2.QtGui.QColor',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint'), ('PySide2.QtGui.QPaintDevice', 'int', 'int')], + "QPixmap.fromImage": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.fromImageInPlace": ('PySide2.QtGui.QImage', 'ImageConversionFlags'), + "QPixmap.fromImageReader": ('PySide2.QtGui.QImageReader', 'ImageConversionFlags'), + "QPixmap.grabWidget": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QObject', 'int', 'int', 'int', 'int')], + "QPixmap.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QPixmap.hasAlpha": (), + "QPixmap.hasAlphaChannel": (), + "QPixmap.height": (), + "QPixmap.isNull": (), + "QPixmap.isQBitmap": (), + "QPixmap.load": ('str', 'str', 'ImageConversionFlags'), + "QPixmap.loadFromData": [('PySide2.QtCore.QByteArray', 'str', 'ImageConversionFlags'), ('Union[str, int]', 'int', 'str', 'ImageConversionFlags')], + "QPixmap.mask": (), + "QPixmap.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPixmap.paintEngine": (), + "QPixmap.rect": (), + "QPixmap.save": [('PySide2.QtCore.QIODevice', 'str', 'int'), ('str', 'str', 'int')], + "QPixmap.scaled": [('PySide2.QtCore.QSize', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode'), ('int', 'int', 'PySide2.QtCore.Qt.AspectRatioMode', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.scaledToHeight": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scaledToWidth": ('int', 'PySide2.QtCore.Qt.TransformationMode'), + "QPixmap.scroll": [('int', 'int', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion'), ('int', 'int', 'int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion')], + "QPixmap.setDevicePixelRatio": ('float',), + "QPixmap.setMask": ('PySide2.QtGui.QBitmap',), + "QPixmap.size": (), + "QPixmap.swap": ('PySide2.QtGui.QPixmap',), + "QPixmap.toImage": (), + "QPixmap.transformed": [('PySide2.QtGui.QMatrix', 'PySide2.QtCore.Qt.TransformationMode'), ('PySide2.QtGui.QTransform', 'PySide2.QtCore.Qt.TransformationMode')], + "QPixmap.trueMatrix": [('PySide2.QtGui.QMatrix', 'int', 'int'), ('PySide2.QtGui.QTransform', 'int', 'int')], + "QPixmap.width": (), + + # class PySide2.QtGui.QPixmapCache: + "QPixmapCache.__init__": (), + "QPixmapCache.cacheLimit": (), + "QPixmapCache.clear": (), + "QPixmapCache.find": [('PySide2.QtGui.QPixmapCache.Key',), ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), ('str',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.insert": [('PySide2.QtGui.QPixmap',), ('str', 'PySide2.QtGui.QPixmap')], + "QPixmapCache.remove": [('PySide2.QtGui.QPixmapCache.Key',), ('str',)], + "QPixmapCache.replace": ('PySide2.QtGui.QPixmapCache.Key', 'PySide2.QtGui.QPixmap'), + "QPixmapCache.setCacheLimit": ('int',), + + # class PySide2.QtGui.QPolygon: + "QPolygon.__init__": [(), ('PySide2.QtCore.QRect', 'bool'), ('PySide2.QtGui.QPolygon',), ('int',), ('list',)], + "QPolygon.__copy__": (), + "QPolygon.__reduce__": (), + "QPolygon.append": [('PySide2.QtCore.QPoint',), ('list',)], + "QPolygon.at": ('int',), + "QPolygon.boundingRect": (), + "QPolygon.capacity": (), + "QPolygon.clear": (), + "QPolygon.constData": (), + "QPolygon.constFirst": (), + "QPolygon.constLast": (), + "QPolygon.contains": ('PySide2.QtCore.QPoint',), + "QPolygon.containsPoint": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.Qt.FillRule'), + "QPolygon.count": [(), ('PySide2.QtCore.QPoint',)], + "QPolygon.data": (), + "QPolygon.empty": (), + "QPolygon.endsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.fill": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.first": (), + "QPolygon.fromList": ('list',), + "QPolygon.front": (), + "QPolygon.indexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.insert": [('int', 'PySide2.QtCore.QPoint'), ('int', 'int', 'PySide2.QtCore.QPoint')], + "QPolygon.intersected": ('PySide2.QtGui.QPolygon',), + "QPolygon.isEmpty": (), + "QPolygon.isSharedWith": ('list',), + "QPolygon.last": (), + "QPolygon.lastIndexOf": ('PySide2.QtCore.QPoint', 'int'), + "QPolygon.length": (), + "QPolygon.mid": ('int', 'int'), + "QPolygon.move": ('int', 'int'), + "QPolygon.pop_back": (), + "QPolygon.pop_front": (), + "QPolygon.prepend": ('PySide2.QtCore.QPoint',), + "QPolygon.push_back": ('PySide2.QtCore.QPoint',), + "QPolygon.push_front": ('PySide2.QtCore.QPoint',), + "QPolygon.remove": [('int',), ('int', 'int')], + "QPolygon.removeAll": ('PySide2.QtCore.QPoint',), + "QPolygon.removeAt": ('int',), + "QPolygon.removeFirst": (), + "QPolygon.removeLast": (), + "QPolygon.removeOne": ('PySide2.QtCore.QPoint',), + "QPolygon.replace": ('int', 'PySide2.QtCore.QPoint'), + "QPolygon.reserve": ('int',), + "QPolygon.resize": ('int',), + "QPolygon.setSharable": ('bool',), + "QPolygon.size": (), + "QPolygon.squeeze": (), + "QPolygon.startsWith": ('PySide2.QtCore.QPoint',), + "QPolygon.subtracted": ('PySide2.QtGui.QPolygon',), + "QPolygon.swap": ('PySide2.QtGui.QPolygon',), + "QPolygon.takeAt": ('int',), + "QPolygon.takeFirst": (), + "QPolygon.takeLast": (), + "QPolygon.toList": (), + "QPolygon.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QPolygon.united": ('PySide2.QtGui.QPolygon',), + "QPolygon.value": [('int',), ('int', 'PySide2.QtCore.QPoint')], + + # class PySide2.QtGui.QPolygonF: + "QPolygonF.__init__": [(), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('int',), ('list',)], + "QPolygonF.__copy__": (), + "QPolygonF.append": [('PySide2.QtCore.QPointF',), ('list',)], + "QPolygonF.at": ('int',), + "QPolygonF.boundingRect": (), + "QPolygonF.capacity": (), + "QPolygonF.clear": (), + "QPolygonF.constData": (), + "QPolygonF.constFirst": (), + "QPolygonF.constLast": (), + "QPolygonF.contains": ('PySide2.QtCore.QPointF',), + "QPolygonF.containsPoint": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.FillRule'), + "QPolygonF.count": [(), ('PySide2.QtCore.QPointF',)], + "QPolygonF.data": (), + "QPolygonF.empty": (), + "QPolygonF.endsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.fill": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.first": (), + "QPolygonF.fromList": ('list',), + "QPolygonF.front": (), + "QPolygonF.indexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.insert": [('int', 'PySide2.QtCore.QPointF'), ('int', 'int', 'PySide2.QtCore.QPointF')], + "QPolygonF.intersected": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.isClosed": (), + "QPolygonF.isEmpty": (), + "QPolygonF.isSharedWith": ('list',), + "QPolygonF.last": (), + "QPolygonF.lastIndexOf": ('PySide2.QtCore.QPointF', 'int'), + "QPolygonF.length": (), + "QPolygonF.mid": ('int', 'int'), + "QPolygonF.move": ('int', 'int'), + "QPolygonF.pop_back": (), + "QPolygonF.pop_front": (), + "QPolygonF.prepend": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_back": ('PySide2.QtCore.QPointF',), + "QPolygonF.push_front": ('PySide2.QtCore.QPointF',), + "QPolygonF.remove": [('int',), ('int', 'int')], + "QPolygonF.removeAll": ('PySide2.QtCore.QPointF',), + "QPolygonF.removeAt": ('int',), + "QPolygonF.removeFirst": (), + "QPolygonF.removeLast": (), + "QPolygonF.removeOne": ('PySide2.QtCore.QPointF',), + "QPolygonF.replace": ('int', 'PySide2.QtCore.QPointF'), + "QPolygonF.reserve": ('int',), + "QPolygonF.resize": ('int',), + "QPolygonF.setSharable": ('bool',), + "QPolygonF.size": (), + "QPolygonF.squeeze": (), + "QPolygonF.startsWith": ('PySide2.QtCore.QPointF',), + "QPolygonF.subtracted": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.swap": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.takeAt": ('int',), + "QPolygonF.takeFirst": (), + "QPolygonF.takeLast": (), + "QPolygonF.toList": (), + "QPolygonF.toPolygon": (), + "QPolygonF.translate": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.translated": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QPolygonF.united": ('PySide2.QtGui.QPolygonF',), + "QPolygonF.value": [('int',), ('int', 'PySide2.QtCore.QPointF')], + + # class PySide2.QtGui.QPyTextObject: + "QPyTextObject.__init__": ('PySide2.QtCore.QObject',), + "QPyTextObject.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QPyTextObject.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QQuaternion: + "QQuaternion.__init__": [(), ('PySide2.QtGui.QVector4D',), ('float', 'PySide2.QtGui.QVector3D'), ('float', 'float', 'float', 'float')], + "QQuaternion.__copy__": (), + "QQuaternion.__reduce__": (), + "QQuaternion.conjugate": (), + "QQuaternion.conjugated": (), + "QQuaternion.dotProduct": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion'), + "QQuaternion.fromAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromAxisAndAngle": [('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QQuaternion.fromDirection": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.fromEulerAngles": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.fromRotationMatrix": ('PySide2.QtGui.QMatrix3x3',), + "QQuaternion.getAxes": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.inverted": (), + "QQuaternion.isIdentity": (), + "QQuaternion.isNull": (), + "QQuaternion.length": (), + "QQuaternion.lengthSquared": (), + "QQuaternion.nlerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.normalize": (), + "QQuaternion.normalized": (), + "QQuaternion.rotatedVector": ('PySide2.QtGui.QVector3D',), + "QQuaternion.rotationTo": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QQuaternion.scalar": (), + "QQuaternion.setScalar": ('float',), + "QQuaternion.setVector": [('PySide2.QtGui.QVector3D',), ('float', 'float', 'float')], + "QQuaternion.setX": ('float',), + "QQuaternion.setY": ('float',), + "QQuaternion.setZ": ('float',), + "QQuaternion.slerp": ('PySide2.QtGui.QQuaternion', 'PySide2.QtGui.QQuaternion', 'float'), + "QQuaternion.toEulerAngles": (), + "QQuaternion.toRotationMatrix": (), + "QQuaternion.toVector4D": (), + "QQuaternion.vector": (), + "QQuaternion.x": (), + "QQuaternion.y": (), + "QQuaternion.z": (), + + # class PySide2.QtGui.QRadialGradient: + "QRadialGradient.__init__": [(), ('PySide2.QtCore.QPointF', 'float'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF'), ('PySide2.QtCore.QPointF', 'float', 'PySide2.QtCore.QPointF', 'float'), ('PySide2.QtGui.QRadialGradient',), ('float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float')], + "QRadialGradient.__copy__": (), + "QRadialGradient.center": (), + "QRadialGradient.centerRadius": (), + "QRadialGradient.focalPoint": (), + "QRadialGradient.focalRadius": (), + "QRadialGradient.radius": (), + "QRadialGradient.setCenter": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setCenterRadius": ('float',), + "QRadialGradient.setFocalPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QRadialGradient.setFocalRadius": ('float',), + "QRadialGradient.setRadius": ('float',), + + # class PySide2.QtGui.QRasterWindow: + "QRasterWindow.__init__": ('PySide2.QtGui.QWindow',), + "QRasterWindow.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QRasterWindow.redirected": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtGui.QRawFont: + "QRawFont.__init__": [(), ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), ('PySide2.QtGui.QRawFont',), ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference')], + "QRawFont.__copy__": (), + "QRawFont.advancesForGlyphIndexes": [('list',), ('list', 'LayoutFlags')], + "QRawFont.alphaMapForGlyph": ('int', 'PySide2.QtGui.QRawFont.AntialiasingType', 'PySide2.QtGui.QTransform'), + "QRawFont.ascent": (), + "QRawFont.averageCharWidth": (), + "QRawFont.boundingRect": ('int',), + "QRawFont.capHeight": (), + "QRawFont.descent": (), + "QRawFont.familyName": (), + "QRawFont.fontTable": ('str',), + "QRawFont.fromFont": ('PySide2.QtGui.QFont', 'PySide2.QtGui.QFontDatabase.WritingSystem'), + "QRawFont.glyphIndexesForString": ('str',), + "QRawFont.hintingPreference": (), + "QRawFont.isValid": (), + "QRawFont.leading": (), + "QRawFont.lineThickness": (), + "QRawFont.loadFromData": ('PySide2.QtCore.QByteArray', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.loadFromFile": ('str', 'float', 'PySide2.QtGui.QFont.HintingPreference'), + "QRawFont.maxCharWidth": (), + "QRawFont.pathForGlyph": ('int',), + "QRawFont.pixelSize": (), + "QRawFont.setPixelSize": ('float',), + "QRawFont.style": (), + "QRawFont.styleName": (), + "QRawFont.supportedWritingSystems": (), + "QRawFont.supportsCharacter": [('Union[str, int]',), ('int',)], + "QRawFont.swap": ('PySide2.QtGui.QRawFont',), + "QRawFont.underlinePosition": (), + "QRawFont.unitsPerEm": (), + "QRawFont.weight": (), + "QRawFont.xHeight": (), + + # class PySide2.QtGui.QRegExpValidator: + "QRegExpValidator.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRegExp', 'PySide2.QtCore.QObject')], + "QRegExpValidator.regExp": (), + "QRegExpValidator.setRegExp": ('PySide2.QtCore.QRegExp',), + "QRegExpValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QRegion: + "QRegion.__init__": [(), ('PySide2.QtCore.QRect', 'PySide2.QtGui.QRegion.RegionType'), ('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.FillRule'), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int', 'PySide2.QtGui.QRegion.RegionType')], + "QRegion.__copy__": (), + "QRegion.begin": (), + "QRegion.boundingRect": (), + "QRegion.cbegin": (), + "QRegion.cend": (), + "QRegion.contains": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',)], + "QRegion.end": (), + "QRegion.intersected": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.intersects": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.isEmpty": (), + "QRegion.isNull": (), + "QRegion.rectCount": (), + "QRegion.rects": (), + "QRegion.setRects": ('PySide2.QtCore.QRect', 'int'), + "QRegion.subtracted": ('PySide2.QtGui.QRegion',), + "QRegion.swap": ('PySide2.QtGui.QRegion',), + "QRegion.translate": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.translated": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRegion.united": [('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',)], + "QRegion.xored": ('PySide2.QtGui.QRegion',), + + # class PySide2.QtGui.QResizeEvent: + "QResizeEvent.__init__": ('PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QResizeEvent.oldSize": (), + "QResizeEvent.size": (), + + # class PySide2.QtGui.QScreen: + "QScreen.angleBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation'), + "QScreen.availableGeometry": (), + "QScreen.availableSize": (), + "QScreen.availableVirtualGeometry": (), + "QScreen.availableVirtualSize": (), + "QScreen.depth": (), + "QScreen.devicePixelRatio": (), + "QScreen.geometry": (), + "QScreen.grabWindow": ('int', 'int', 'int', 'int', 'int'), + "QScreen.isLandscape": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.isPortrait": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QScreen.logicalDotsPerInch": (), + "QScreen.logicalDotsPerInchX": (), + "QScreen.logicalDotsPerInchY": (), + "QScreen.manufacturer": (), + "QScreen.mapBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.model": (), + "QScreen.name": (), + "QScreen.nativeOrientation": (), + "QScreen.orientation": (), + "QScreen.orientationUpdateMask": (), + "QScreen.physicalDotsPerInch": (), + "QScreen.physicalDotsPerInchX": (), + "QScreen.physicalDotsPerInchY": (), + "QScreen.physicalSize": (), + "QScreen.primaryOrientation": (), + "QScreen.refreshRate": (), + "QScreen.serialNumber": (), + "QScreen.setOrientationUpdateMask": ('ScreenOrientations',), + "QScreen.size": (), + "QScreen.transformBetween": ('PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.Qt.ScreenOrientation', 'PySide2.QtCore.QRect'), + "QScreen.virtualGeometry": (), + "QScreen.virtualSiblings": (), + "QScreen.virtualSize": (), + + # class PySide2.QtGui.QSessionManager: + "QSessionManager.allowsErrorInteraction": (), + "QSessionManager.allowsInteraction": (), + "QSessionManager.cancel": (), + "QSessionManager.discardCommand": (), + "QSessionManager.isPhase2": (), + "QSessionManager.release": (), + "QSessionManager.requestPhase2": (), + "QSessionManager.restartCommand": (), + "QSessionManager.restartHint": (), + "QSessionManager.sessionId": (), + "QSessionManager.sessionKey": (), + "QSessionManager.setDiscardCommand": ('List[str]',), + "QSessionManager.setManagerProperty": [('str', 'List[str]'), ('str', 'str')], + "QSessionManager.setRestartCommand": ('List[str]',), + "QSessionManager.setRestartHint": ('PySide2.QtGui.QSessionManager.RestartHint',), + + # class PySide2.QtGui.QShortcutEvent: + "QShortcutEvent.__init__": ('PySide2.QtGui.QKeySequence', 'int', 'bool'), + + # class PySide2.QtGui.QShowEvent: + "QShowEvent.__init__": (), + + # class PySide2.QtGui.QStandardItem: + "QStandardItem.__init__": [(), ('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QStandardItem',), ('int', 'int'), ('str',)], + "QStandardItem.accessibleDescription": (), + "QStandardItem.accessibleText": (), + "QStandardItem.appendColumn": ('list',), + "QStandardItem.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItem.appendRows": ('list',), + "QStandardItem.background": (), + "QStandardItem.checkState": (), + "QStandardItem.child": ('int', 'int'), + "QStandardItem.clone": (), + "QStandardItem.column": (), + "QStandardItem.columnCount": (), + "QStandardItem.data": ('int',), + "QStandardItem.emitDataChanged": (), + "QStandardItem.flags": (), + "QStandardItem.font": (), + "QStandardItem.foreground": (), + "QStandardItem.hasChildren": (), + "QStandardItem.icon": (), + "QStandardItem.index": (), + "QStandardItem.insertColumn": ('int', 'list'), + "QStandardItem.insertColumns": ('int', 'int'), + "QStandardItem.insertRow": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItem.insertRows": [('int', 'int'), ('int', 'list')], + "QStandardItem.isAutoTristate": (), + "QStandardItem.isCheckable": (), + "QStandardItem.isDragEnabled": (), + "QStandardItem.isDropEnabled": (), + "QStandardItem.isEditable": (), + "QStandardItem.isEnabled": (), + "QStandardItem.isSelectable": (), + "QStandardItem.isTristate": (), + "QStandardItem.isUserTristate": (), + "QStandardItem.model": (), + "QStandardItem.parent": (), + "QStandardItem.read": ('PySide2.QtCore.QDataStream',), + "QStandardItem.removeColumn": ('int',), + "QStandardItem.removeColumns": ('int', 'int'), + "QStandardItem.removeRow": ('int',), + "QStandardItem.removeRows": ('int', 'int'), + "QStandardItem.row": (), + "QStandardItem.rowCount": (), + "QStandardItem.setAccessibleDescription": ('str',), + "QStandardItem.setAccessibleText": ('str',), + "QStandardItem.setAutoTristate": ('bool',), + "QStandardItem.setBackground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QStandardItem.setCheckable": ('bool',), + "QStandardItem.setChild": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItem.setColumnCount": ('int',), + "QStandardItem.setData": ('Any', 'int'), + "QStandardItem.setDragEnabled": ('bool',), + "QStandardItem.setDropEnabled": ('bool',), + "QStandardItem.setEditable": ('bool',), + "QStandardItem.setEnabled": ('bool',), + "QStandardItem.setFlags": ('ItemFlags',), + "QStandardItem.setFont": ('PySide2.QtGui.QFont',), + "QStandardItem.setForeground": ('PySide2.QtGui.QBrush',), + "QStandardItem.setIcon": ('PySide2.QtGui.QIcon',), + "QStandardItem.setRowCount": ('int',), + "QStandardItem.setSelectable": ('bool',), + "QStandardItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QStandardItem.setStatusTip": ('str',), + "QStandardItem.setText": ('str',), + "QStandardItem.setTextAlignment": ('Alignment',), + "QStandardItem.setToolTip": ('str',), + "QStandardItem.setTristate": ('bool',), + "QStandardItem.setUserTristate": ('bool',), + "QStandardItem.setWhatsThis": ('str',), + "QStandardItem.sizeHint": (), + "QStandardItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItem.statusTip": (), + "QStandardItem.takeChild": ('int', 'int'), + "QStandardItem.takeColumn": ('int',), + "QStandardItem.takeRow": ('int',), + "QStandardItem.text": (), + "QStandardItem.textAlignment": (), + "QStandardItem.toolTip": (), + "QStandardItem.type": (), + "QStandardItem.whatsThis": (), + "QStandardItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtGui.QStandardItemModel: + "QStandardItemModel.__init__": [('PySide2.QtCore.QObject',), ('int', 'int', 'PySide2.QtCore.QObject')], + "QStandardItemModel.appendColumn": ('list',), + "QStandardItemModel.appendRow": [('PySide2.QtGui.QStandardItem',), ('list',)], + "QStandardItemModel.clear": (), + "QStandardItemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStandardItemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.findItems": ('str', 'MatchFlags', 'int'), + "QStandardItemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QStandardItemModel.horizontalHeaderItem": ('int',), + "QStandardItemModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.indexFromItem": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.insertColumn": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'list')], + "QStandardItemModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.insertRow": [('int', 'PySide2.QtCore.QModelIndex'), ('int', 'PySide2.QtGui.QStandardItem'), ('int', 'list')], + "QStandardItemModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.invisibleRootItem": (), + "QStandardItemModel.item": ('int', 'int'), + "QStandardItemModel.itemData": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.itemPrototype": (), + "QStandardItemModel.mimeData": ('List[int]',), + "QStandardItemModel.mimeTypes": (), + "QStandardItemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QStandardItemModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStandardItemModel.setColumnCount": ('int',), + "QStandardItemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QStandardItemModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QStandardItemModel.setHorizontalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setHorizontalHeaderLabels": ('List[str]',), + "QStandardItemModel.setItem": [('int', 'PySide2.QtGui.QStandardItem'), ('int', 'int', 'PySide2.QtGui.QStandardItem')], + "QStandardItemModel.setItemData": ('PySide2.QtCore.QModelIndex', 'dict'), + "QStandardItemModel.setItemPrototype": ('PySide2.QtGui.QStandardItem',), + "QStandardItemModel.setItemRoleNames": ('dict',), + "QStandardItemModel.setRowCount": ('int',), + "QStandardItemModel.setSortRole": ('int',), + "QStandardItemModel.setVerticalHeaderItem": ('int', 'PySide2.QtGui.QStandardItem'), + "QStandardItemModel.setVerticalHeaderLabels": ('List[str]',), + "QStandardItemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStandardItemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStandardItemModel.sortRole": (), + "QStandardItemModel.supportedDropActions": (), + "QStandardItemModel.takeColumn": ('int',), + "QStandardItemModel.takeHorizontalHeaderItem": ('int',), + "QStandardItemModel.takeItem": ('int', 'int'), + "QStandardItemModel.takeRow": ('int',), + "QStandardItemModel.takeVerticalHeaderItem": ('int',), + "QStandardItemModel.verticalHeaderItem": ('int',), + + # class PySide2.QtGui.QStaticText: + "QStaticText.__init__": [(), ('PySide2.QtGui.QStaticText',), ('str',)], + "QStaticText.__copy__": (), + "QStaticText.performanceHint": (), + "QStaticText.prepare": ('PySide2.QtGui.QTransform', 'PySide2.QtGui.QFont'), + "QStaticText.setPerformanceHint": ('PySide2.QtGui.QStaticText.PerformanceHint',), + "QStaticText.setText": ('str',), + "QStaticText.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QStaticText.setTextOption": ('PySide2.QtGui.QTextOption',), + "QStaticText.setTextWidth": ('float',), + "QStaticText.size": (), + "QStaticText.swap": ('PySide2.QtGui.QStaticText',), + "QStaticText.text": (), + "QStaticText.textFormat": (), + "QStaticText.textOption": (), + "QStaticText.textWidth": (), + + # class PySide2.QtGui.QStatusTipEvent: + "QStatusTipEvent.__init__": ('str',), + "QStatusTipEvent.tip": (), + + # class PySide2.QtGui.QStringListModel: + "QStringListModel.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QStringListModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QStringListModel.flags": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QStringListModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QStringListModel.setStringList": ('List[str]',), + "QStringListModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QStringListModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QStringListModel.stringList": (), + "QStringListModel.supportedDropActions": (), + + # class PySide2.QtGui.QStyleHints: + "QStyleHints.cursorFlashTime": (), + "QStyleHints.fontSmoothingGamma": (), + "QStyleHints.keyboardAutoRepeatRate": (), + "QStyleHints.keyboardInputInterval": (), + "QStyleHints.mouseDoubleClickInterval": (), + "QStyleHints.mousePressAndHoldInterval": (), + "QStyleHints.passwordMaskCharacter": (), + "QStyleHints.passwordMaskDelay": (), + "QStyleHints.setCursorFlashTime": ('int',), + "QStyleHints.setFocusOnTouchRelease": (), + "QStyleHints.setKeyboardInputInterval": ('int',), + "QStyleHints.setMouseDoubleClickInterval": ('int',), + "QStyleHints.setMousePressAndHoldInterval": ('int',), + "QStyleHints.setStartDragDistance": ('int',), + "QStyleHints.setStartDragTime": ('int',), + "QStyleHints.setTabFocusBehavior": ('PySide2.QtCore.Qt.TabFocusBehavior',), + "QStyleHints.setUseHoverEffects": ('bool',), + "QStyleHints.setWheelScrollLines": ('int',), + "QStyleHints.showIsFullScreen": (), + "QStyleHints.showIsMaximized": (), + "QStyleHints.singleClickActivation": (), + "QStyleHints.startDragDistance": (), + "QStyleHints.startDragTime": (), + "QStyleHints.startDragVelocity": (), + "QStyleHints.tabFocusBehavior": (), + "QStyleHints.useHoverEffects": (), + "QStyleHints.useRtlExtensions": (), + "QStyleHints.wheelScrollLines": (), + + # class PySide2.QtGui.QSurface: + "QSurface.__init__": ('PySide2.QtGui.QSurface.SurfaceClass',), + "QSurface.format": (), + "QSurface.size": (), + "QSurface.supportsOpenGL": (), + "QSurface.surfaceClass": (), + "QSurface.surfaceHandle": (), + "QSurface.surfaceType": (), + + # class PySide2.QtGui.QSurfaceFormat: + "QSurfaceFormat.__init__": [(), ('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat',)], + "QSurfaceFormat.__copy__": (), + "QSurfaceFormat.alphaBufferSize": (), + "QSurfaceFormat.blueBufferSize": (), + "QSurfaceFormat.defaultFormat": (), + "QSurfaceFormat.depthBufferSize": (), + "QSurfaceFormat.greenBufferSize": (), + "QSurfaceFormat.hasAlpha": (), + "QSurfaceFormat.majorVersion": (), + "QSurfaceFormat.minorVersion": (), + "QSurfaceFormat.options": (), + "QSurfaceFormat.profile": (), + "QSurfaceFormat.redBufferSize": (), + "QSurfaceFormat.renderableType": (), + "QSurfaceFormat.samples": (), + "QSurfaceFormat.setAlphaBufferSize": ('int',), + "QSurfaceFormat.setBlueBufferSize": ('int',), + "QSurfaceFormat.setDefaultFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QSurfaceFormat.setDepthBufferSize": ('int',), + "QSurfaceFormat.setGreenBufferSize": ('int',), + "QSurfaceFormat.setMajorVersion": ('int',), + "QSurfaceFormat.setMinorVersion": ('int',), + "QSurfaceFormat.setOption": [('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat.FormatOption', 'bool')], + "QSurfaceFormat.setOptions": ('FormatOptions',), + "QSurfaceFormat.setProfile": ('PySide2.QtGui.QSurfaceFormat.OpenGLContextProfile',), + "QSurfaceFormat.setRedBufferSize": ('int',), + "QSurfaceFormat.setRenderableType": ('PySide2.QtGui.QSurfaceFormat.RenderableType',), + "QSurfaceFormat.setSamples": ('int',), + "QSurfaceFormat.setStencilBufferSize": ('int',), + "QSurfaceFormat.setStereo": ('bool',), + "QSurfaceFormat.setSwapBehavior": ('PySide2.QtGui.QSurfaceFormat.SwapBehavior',), + "QSurfaceFormat.setSwapInterval": ('int',), + "QSurfaceFormat.setVersion": ('int', 'int'), + "QSurfaceFormat.stencilBufferSize": (), + "QSurfaceFormat.stereo": (), + "QSurfaceFormat.swapBehavior": (), + "QSurfaceFormat.swapInterval": (), + "QSurfaceFormat.testOption": [('FormatOptions',), ('PySide2.QtGui.QSurfaceFormat.FormatOption',)], + "QSurfaceFormat.version": (), + + # class PySide2.QtGui.QSyntaxHighlighter: + "QSyntaxHighlighter.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QTextDocument',)], + "QSyntaxHighlighter.currentBlock": (), + "QSyntaxHighlighter.currentBlockState": (), + "QSyntaxHighlighter.currentBlockUserData": (), + "QSyntaxHighlighter.document": (), + "QSyntaxHighlighter.format": ('int',), + "QSyntaxHighlighter.highlightBlock": ('str',), + "QSyntaxHighlighter.previousBlockState": (), + "QSyntaxHighlighter.rehighlight": (), + "QSyntaxHighlighter.rehighlightBlock": ('PySide2.QtGui.QTextBlock',), + "QSyntaxHighlighter.setCurrentBlockState": ('int',), + "QSyntaxHighlighter.setCurrentBlockUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QSyntaxHighlighter.setDocument": ('PySide2.QtGui.QTextDocument',), + "QSyntaxHighlighter.setFormat": [('int', 'int', 'PySide2.QtGui.QColor'), ('int', 'int', 'PySide2.QtGui.QFont'), ('int', 'int', 'PySide2.QtGui.QTextCharFormat')], + + # class PySide2.QtGui.QTabletEvent: + "QTabletEvent.__init__": [('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'KeyboardModifiers', 'int'), ('PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'int', 'float', 'int', 'int', 'float', 'float', 'int', 'KeyboardModifiers', 'int', 'PySide2.QtCore.Qt.MouseButton', 'MouseButtons')], + "QTabletEvent.button": (), + "QTabletEvent.buttons": (), + "QTabletEvent.device": (), + "QTabletEvent.globalPos": (), + "QTabletEvent.globalPosF": (), + "QTabletEvent.globalX": (), + "QTabletEvent.global""Y": (), + "QTabletEvent.hiResGlobalX": (), + "QTabletEvent.hiResGlobal""Y": (), + "QTabletEvent.pointerType": (), + "QTabletEvent.pos": (), + "QTabletEvent.posF": (), + "QTabletEvent.pressure": (), + "QTabletEvent.rotation": (), + "QTabletEvent.tangentialPressure": (), + "QTabletEvent.uniqueId": (), + "QTabletEvent.x": (), + "QTabletEvent.xTilt": (), + "QTabletEvent.y": (), + "QTabletEvent.yTilt": (), + "QTabletEvent.z": (), + + # class PySide2.QtGui.QTextBlock: + "QTextBlock.__init__": [(), ('PySide2.QtGui.QTextBlock',)], + "QTextBlock.__copy__": (), + "QTextBlock.begin": (), + "QTextBlock.blockFormat": (), + "QTextBlock.blockFormatIndex": (), + "QTextBlock.blockNumber": (), + "QTextBlock.charFormat": (), + "QTextBlock.charFormatIndex": (), + "QTextBlock.clearLayout": (), + "QTextBlock.contains": ('int',), + "QTextBlock.document": (), + "QTextBlock.end": (), + "QTextBlock.firstLineNumber": (), + "QTextBlock.fragmentIndex": (), + "QTextBlock.isValid": (), + "QTextBlock.isVisible": (), + "QTextBlock.layout": (), + "QTextBlock.length": (), + "QTextBlock.lineCount": (), + "QTextBlock.position": (), + "QTextBlock.previous": (), + "QTextBlock.revision": (), + "QTextBlock.setLineCount": ('int',), + "QTextBlock.setRevision": ('int',), + "QTextBlock.setUserData": ('PySide2.QtGui.QTextBlockUserData',), + "QTextBlock.setUserState": ('int',), + "QTextBlock.setVisible": ('bool',), + "QTextBlock.text": (), + "QTextBlock.textDirection": (), + "QTextBlock.textFormats": (), + "QTextBlock.textList": (), + "QTextBlock.userData": (), + "QTextBlock.userState": (), + + # class PySide2.QtGui.QTextBlockFormat: + "QTextBlockFormat.__init__": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextBlockFormat.__copy__": (), + "QTextBlockFormat.alignment": (), + "QTextBlockFormat.bottomMargin": (), + "QTextBlockFormat.indent": (), + "QTextBlockFormat.isValid": (), + "QTextBlockFormat.leftMargin": (), + "QTextBlockFormat.lineHeight": [(), ('float', 'float')], + "QTextBlockFormat.lineHeightType": (), + "QTextBlockFormat.nonBreakableLines": (), + "QTextBlockFormat.pageBreakPolicy": (), + "QTextBlockFormat.rightMargin": (), + "QTextBlockFormat.setAlignment": ('Alignment',), + "QTextBlockFormat.setBottomMargin": ('float',), + "QTextBlockFormat.setIndent": ('int',), + "QTextBlockFormat.setLeftMargin": ('float',), + "QTextBlockFormat.setLineHeight": ('float', 'int'), + "QTextBlockFormat.setNonBreakableLines": ('bool',), + "QTextBlockFormat.setPageBreakPolicy": ('PageBreakFlags',), + "QTextBlockFormat.setRightMargin": ('float',), + "QTextBlockFormat.setTabPositions": ('list',), + "QTextBlockFormat.setTextIndent": ('float',), + "QTextBlockFormat.setTopMargin": ('float',), + "QTextBlockFormat.tabPositions": (), + "QTextBlockFormat.textIndent": (), + "QTextBlockFormat.topMargin": (), + + # class PySide2.QtGui.QTextBlockGroup: + "QTextBlockGroup.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextBlockGroup.blockFormatChanged": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockInserted": ('PySide2.QtGui.QTextBlock',), + "QTextBlockGroup.blockList": (), + "QTextBlockGroup.blockRemoved": ('PySide2.QtGui.QTextBlock',), + + # class PySide2.QtGui.QTextBlockUserData: + "QTextBlockUserData.__init__": (), + + # class PySide2.QtGui.QTextCharFormat: + "QTextCharFormat.__init__": [(), ('PySide2.QtGui.QTextCharFormat',), ('PySide2.QtGui.QTextFormat',)], + "QTextCharFormat.__copy__": (), + "QTextCharFormat.anchorHref": (), + "QTextCharFormat.anchorName": (), + "QTextCharFormat.anchorNames": (), + "QTextCharFormat.font": (), + "QTextCharFormat.fontCapitalization": (), + "QTextCharFormat.fontFamily": (), + "QTextCharFormat.fontFixedPitch": (), + "QTextCharFormat.fontHintingPreference": (), + "QTextCharFormat.fontItalic": (), + "QTextCharFormat.fontKerning": (), + "QTextCharFormat.fontLetterSpacing": (), + "QTextCharFormat.fontLetterSpacingType": (), + "QTextCharFormat.fontOverline": (), + "QTextCharFormat.fontPointSize": (), + "QTextCharFormat.fontStretch": (), + "QTextCharFormat.fontStrikeOut": (), + "QTextCharFormat.fontStyleHint": (), + "QTextCharFormat.fontStyleStrategy": (), + "QTextCharFormat.fontUnderline": (), + "QTextCharFormat.fontWeight": (), + "QTextCharFormat.fontWordSpacing": (), + "QTextCharFormat.isAnchor": (), + "QTextCharFormat.isValid": (), + "QTextCharFormat.setAnchor": ('bool',), + "QTextCharFormat.setAnchorHref": ('str',), + "QTextCharFormat.setAnchorName": ('str',), + "QTextCharFormat.setAnchorNames": ('List[str]',), + "QTextCharFormat.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'PySide2.QtGui.QTextCharFormat.FontPropertiesInheritanceBehavior')], + "QTextCharFormat.setFontCapitalization": ('PySide2.QtGui.QFont.Capitalization',), + "QTextCharFormat.setFontFamily": ('str',), + "QTextCharFormat.setFontFixedPitch": ('bool',), + "QTextCharFormat.setFontHintingPreference": ('PySide2.QtGui.QFont.HintingPreference',), + "QTextCharFormat.setFontItalic": ('bool',), + "QTextCharFormat.setFontKerning": ('bool',), + "QTextCharFormat.setFontLetterSpacing": ('float',), + "QTextCharFormat.setFontLetterSpacingType": ('PySide2.QtGui.QFont.SpacingType',), + "QTextCharFormat.setFontOverline": ('bool',), + "QTextCharFormat.setFontPointSize": ('float',), + "QTextCharFormat.setFontStretch": ('int',), + "QTextCharFormat.setFontStrikeOut": ('bool',), + "QTextCharFormat.setFontStyleHint": ('PySide2.QtGui.QFont.StyleHint', 'PySide2.QtGui.QFont.StyleStrategy'), + "QTextCharFormat.setFontStyleStrategy": ('PySide2.QtGui.QFont.StyleStrategy',), + "QTextCharFormat.setFontUnderline": ('bool',), + "QTextCharFormat.setFontWeight": ('int',), + "QTextCharFormat.setFontWordSpacing": ('float',), + "QTextCharFormat.setTableCellColumnSpan": ('int',), + "QTextCharFormat.setTableCellRowSpan": ('int',), + "QTextCharFormat.setTextOutline": ('PySide2.QtGui.QPen',), + "QTextCharFormat.setToolTip": ('str',), + "QTextCharFormat.setUnderlineColor": ('PySide2.QtGui.QColor',), + "QTextCharFormat.setUnderlineStyle": ('PySide2.QtGui.QTextCharFormat.UnderlineStyle',), + "QTextCharFormat.setVerticalAlignment": ('PySide2.QtGui.QTextCharFormat.VerticalAlignment',), + "QTextCharFormat.tableCellColumnSpan": (), + "QTextCharFormat.tableCellRowSpan": (), + "QTextCharFormat.textOutline": (), + "QTextCharFormat.toolTip": (), + "QTextCharFormat.underlineColor": (), + "QTextCharFormat.underlineStyle": (), + "QTextCharFormat.verticalAlignment": (), + + # class PySide2.QtGui.QTextCursor: + "QTextCursor.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextFrame',)], + "QTextCursor.__copy__": (), + "QTextCursor.anchor": (), + "QTextCursor.atBlockEnd": (), + "QTextCursor.atBlockStart": (), + "QTextCursor.atEnd": (), + "QTextCursor.atStart": (), + "QTextCursor.beginEditBlock": (), + "QTextCursor.block": (), + "QTextCursor.blockCharFormat": (), + "QTextCursor.blockFormat": (), + "QTextCursor.blockNumber": (), + "QTextCursor.charFormat": (), + "QTextCursor.clearSelection": (), + "QTextCursor.columnNumber": (), + "QTextCursor.createList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.currentFrame": (), + "QTextCursor.currentList": (), + "QTextCursor.currentTable": (), + "QTextCursor.deleteChar": (), + "QTextCursor.deletePreviousChar": (), + "QTextCursor.document": (), + "QTextCursor.endEditBlock": (), + "QTextCursor.hasComplexSelection": (), + "QTextCursor.hasSelection": (), + "QTextCursor.insertBlock": [(), ('PySide2.QtGui.QTextBlockFormat',), ('PySide2.QtGui.QTextBlockFormat', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.insertFragment": ('PySide2.QtGui.QTextDocumentFragment',), + "QTextCursor.insertFrame": ('PySide2.QtGui.QTextFrameFormat',), + "QTextCursor.insertHtml": ('str',), + "QTextCursor.insertImage": [('PySide2.QtGui.QImage', 'str'), ('PySide2.QtGui.QTextImageFormat',), ('PySide2.QtGui.QTextImageFormat', 'PySide2.QtGui.QTextFrameFormat.Position'), ('str',)], + "QTextCursor.insertList": [('PySide2.QtGui.QTextListFormat',), ('PySide2.QtGui.QTextListFormat.Style',)], + "QTextCursor.insertTable": [('int', 'int'), ('int', 'int', 'PySide2.QtGui.QTextTableFormat')], + "QTextCursor.insertText": [('str',), ('str', 'PySide2.QtGui.QTextCharFormat')], + "QTextCursor.isCopyOf": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.isNull": (), + "QTextCursor.joinPreviousEditBlock": (), + "QTextCursor.keepPositionOnInsert": (), + "QTextCursor.mergeBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.mergeBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.mergeCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.movePosition": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode', 'int'), + "QTextCursor.position": (), + "QTextCursor.positionInBlock": (), + "QTextCursor.removeSelectedText": (), + "QTextCursor.select": ('PySide2.QtGui.QTextCursor.SelectionType',), + "QTextCursor.selectedTableCells": ('int', 'int', 'int', 'int'), + "QTextCursor.selectedText": (), + "QTextCursor.selection": (), + "QTextCursor.selectionEnd": (), + "QTextCursor.selectionStart": (), + "QTextCursor.setBlockCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setBlockFormat": ('PySide2.QtGui.QTextBlockFormat',), + "QTextCursor.setCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextCursor.setKeepPositionOnInsert": ('bool',), + "QTextCursor.setPosition": ('int', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextCursor.setVerticalMovementX": ('int',), + "QTextCursor.setVisualNavigation": ('bool',), + "QTextCursor.swap": ('PySide2.QtGui.QTextCursor',), + "QTextCursor.verticalMovementX": (), + "QTextCursor.visualNavigation": (), + + # class PySide2.QtGui.QTextDocument: + "QTextDocument.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextDocument.addResource": ('int', 'PySide2.QtCore.QUrl', 'Any'), + "QTextDocument.adjustSize": (), + "QTextDocument.allFormats": (), + "QTextDocument.availableRedoSteps": (), + "QTextDocument.availableUndoSteps": (), + "QTextDocument.baseUrl": (), + "QTextDocument.begin": (), + "QTextDocument.blockCount": (), + "QTextDocument.characterAt": ('int',), + "QTextDocument.characterCount": (), + "QTextDocument.clear": (), + "QTextDocument.clearUndoRedoStacks": ('PySide2.QtGui.QTextDocument.Stacks',), + "QTextDocument.clone": ('PySide2.QtCore.QObject',), + "QTextDocument.createObject": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.defaultCursorMoveStyle": (), + "QTextDocument.defaultFont": (), + "QTextDocument.defaultStyleSheet": (), + "QTextDocument.defaultTextOption": (), + "QTextDocument.documentLayout": (), + "QTextDocument.documentMargin": (), + "QTextDocument.drawContents": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QTextDocument.end": (), + "QTextDocument.find": [('PySide2.QtCore.QRegExp', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('PySide2.QtCore.QRegExp', 'int', 'FindFlags'), ('PySide2.QtCore.QRegularExpression', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('PySide2.QtCore.QRegularExpression', 'int', 'FindFlags'), ('str', 'PySide2.QtGui.QTextCursor', 'FindFlags'), ('str', 'int', 'FindFlags')], + "QTextDocument.findBlock": ('int',), + "QTextDocument.findBlockByLineNumber": ('int',), + "QTextDocument.findBlockByNumber": ('int',), + "QTextDocument.firstBlock": (), + "QTextDocument.frameAt": ('int',), + "QTextDocument.idealWidth": (), + "QTextDocument.indentWidth": (), + "QTextDocument.isEmpty": (), + "QTextDocument.isModified": (), + "QTextDocument.isRedoAvailable": (), + "QTextDocument.isUndoAvailable": (), + "QTextDocument.isUndoRedoEnabled": (), + "QTextDocument.lastBlock": (), + "QTextDocument.lineCount": (), + "QTextDocument.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.markContentsDirty": ('int', 'int'), + "QTextDocument.maximumBlockCount": (), + "QTextDocument.metaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation',), + "QTextDocument.object": ('int',), + "QTextDocument.objectForFormat": ('PySide2.QtGui.QTextFormat',), + "QTextDocument.pageCount": (), + "QTextDocument.pageSize": (), + "QTextDocument.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextDocument.redo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.resource": ('int', 'PySide2.QtCore.QUrl'), + "QTextDocument.revision": (), + "QTextDocument.rootFrame": (), + "QTextDocument.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QTextDocument.setDefaultCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextDocument.setDefaultFont": ('PySide2.QtGui.QFont',), + "QTextDocument.setDefaultStyleSheet": ('str',), + "QTextDocument.setDefaultTextOption": ('PySide2.QtGui.QTextOption',), + "QTextDocument.setDocumentLayout": ('PySide2.QtGui.QAbstractTextDocumentLayout',), + "QTextDocument.setDocumentMargin": ('float',), + "QTextDocument.setHtml": ('str',), + "QTextDocument.setIndentWidth": ('float',), + "QTextDocument.setMaximumBlockCount": ('int',), + "QTextDocument.setMetaInformation": ('PySide2.QtGui.QTextDocument.MetaInformation', 'str'), + "QTextDocument.setModified": ('bool',), + "QTextDocument.setPageSize": ('PySide2.QtCore.QSizeF',), + "QTextDocument.setPlainText": ('str',), + "QTextDocument.setTextWidth": ('float',), + "QTextDocument.setUndoRedoEnabled": ('bool',), + "QTextDocument.setUseDesignMetrics": ('bool',), + "QTextDocument.size": (), + "QTextDocument.textWidth": (), + "QTextDocument.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocument.toPlainText": (), + "QTextDocument.toRawText": (), + "QTextDocument.undo": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextDocument.useDesignMetrics": (), + + # class PySide2.QtGui.QTextDocumentFragment: + "QTextDocumentFragment.__init__": [(), ('PySide2.QtGui.QTextCursor',), ('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + "QTextDocumentFragment.__copy__": (), + "QTextDocumentFragment.fromHtml": [('str',), ('str', 'PySide2.QtGui.QTextDocument')], + "QTextDocumentFragment.fromPlainText": ('str',), + "QTextDocumentFragment.isEmpty": (), + "QTextDocumentFragment.toHtml": ('PySide2.QtCore.QByteArray',), + "QTextDocumentFragment.toPlainText": (), + + # class PySide2.QtGui.QTextDocumentWriter: + "QTextDocumentWriter.__init__": [(), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QByteArray'), ('str', 'PySide2.QtCore.QByteArray')], + "QTextDocumentWriter.codec": (), + "QTextDocumentWriter.device": (), + "QTextDocumentWriter.fileName": (), + "QTextDocumentWriter.format": (), + "QTextDocumentWriter.setCodec": ('PySide2.QtCore.QTextCodec',), + "QTextDocumentWriter.setDevice": ('PySide2.QtCore.QIODevice',), + "QTextDocumentWriter.setFileName": ('str',), + "QTextDocumentWriter.setFormat": ('PySide2.QtCore.QByteArray',), + "QTextDocumentWriter.supportedDocumentFormats": (), + "QTextDocumentWriter.write": [('PySide2.QtGui.QTextDocument',), ('PySide2.QtGui.QTextDocumentFragment',)], + + # class PySide2.QtGui.QTextFormat: + "QTextFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('int',)], + "QTextFormat.__copy__": (), + "QTextFormat.background": (), + "QTextFormat.boolProperty": ('int',), + "QTextFormat.brushProperty": ('int',), + "QTextFormat.clearBackground": (), + "QTextFormat.clearForeground": (), + "QTextFormat.clearProperty": ('int',), + "QTextFormat.colorProperty": ('int',), + "QTextFormat.doubleProperty": ('int',), + "QTextFormat.foreground": (), + "QTextFormat.hasProperty": ('int',), + "QTextFormat.intProperty": ('int',), + "QTextFormat.isBlockFormat": (), + "QTextFormat.isCharFormat": (), + "QTextFormat.isEmpty": (), + "QTextFormat.isFrameFormat": (), + "QTextFormat.isImageFormat": (), + "QTextFormat.isListFormat": (), + "QTextFormat.isTableCellFormat": (), + "QTextFormat.isTableFormat": (), + "QTextFormat.isValid": (), + "QTextFormat.layoutDirection": (), + "QTextFormat.lengthProperty": ('int',), + "QTextFormat.lengthVectorProperty": ('int',), + "QTextFormat.merge": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.objectIndex": (), + "QTextFormat.objectType": (), + "QTextFormat.penProperty": ('int',), + "QTextFormat.properties": (), + "QTextFormat.property": ('int',), + "QTextFormat.propertyCount": (), + "QTextFormat.setBackground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setForeground": ('PySide2.QtGui.QBrush',), + "QTextFormat.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextFormat.setObjectIndex": ('int',), + "QTextFormat.setObjectType": ('int',), + "QTextFormat.setProperty": [('int', 'Any'), ('int', 'list')], + "QTextFormat.stringProperty": ('int',), + "QTextFormat.swap": ('PySide2.QtGui.QTextFormat',), + "QTextFormat.toBlockFormat": (), + "QTextFormat.toCharFormat": (), + "QTextFormat.toFrameFormat": (), + "QTextFormat.toImageFormat": (), + "QTextFormat.toListFormat": (), + "QTextFormat.toTableCellFormat": (), + "QTextFormat.toTableFormat": (), + "QTextFormat.type": (), + + # class PySide2.QtGui.QTextFragment: + "QTextFragment.__init__": [(), ('PySide2.QtGui.QTextFragment',)], + "QTextFragment.__copy__": (), + "QTextFragment.charFormat": (), + "QTextFragment.charFormatIndex": (), + "QTextFragment.contains": ('int',), + "QTextFragment.isValid": (), + "QTextFragment.length": (), + "QTextFragment.position": (), + "QTextFragment.text": (), + + # class PySide2.QtGui.QTextFrame: + "QTextFrame.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextFrame.begin": (), + "QTextFrame.childFrames": (), + "QTextFrame.end": (), + "QTextFrame.firstCursorPosition": (), + "QTextFrame.firstPosition": (), + "QTextFrame.frameFormat": (), + "QTextFrame.lastCursorPosition": (), + "QTextFrame.lastPosition": (), + "QTextFrame.parentFrame": (), + "QTextFrame.setFrameFormat": ('PySide2.QtGui.QTextFrameFormat',), + + # class PySide2.QtGui.QTextFrameFormat: + "QTextFrameFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextFrameFormat',)], + "QTextFrameFormat.__copy__": (), + "QTextFrameFormat.border": (), + "QTextFrameFormat.borderBrush": (), + "QTextFrameFormat.borderStyle": (), + "QTextFrameFormat.bottomMargin": (), + "QTextFrameFormat.height": (), + "QTextFrameFormat.isValid": (), + "QTextFrameFormat.leftMargin": (), + "QTextFrameFormat.margin": (), + "QTextFrameFormat.padding": (), + "QTextFrameFormat.pageBreakPolicy": (), + "QTextFrameFormat.position": (), + "QTextFrameFormat.rightMargin": (), + "QTextFrameFormat.setBorder": ('float',), + "QTextFrameFormat.setBorderBrush": ('PySide2.QtGui.QBrush',), + "QTextFrameFormat.setBorderStyle": ('PySide2.QtGui.QTextFrameFormat.BorderStyle',), + "QTextFrameFormat.setBottomMargin": ('float',), + "QTextFrameFormat.setHeight": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.setLeftMargin": ('float',), + "QTextFrameFormat.setMargin": ('float',), + "QTextFrameFormat.setPadding": ('float',), + "QTextFrameFormat.setPageBreakPolicy": ('PageBreakFlags',), + "QTextFrameFormat.setPosition": ('PySide2.QtGui.QTextFrameFormat.Position',), + "QTextFrameFormat.setRightMargin": ('float',), + "QTextFrameFormat.setTopMargin": ('float',), + "QTextFrameFormat.setWidth": [('PySide2.QtGui.QTextLength',), ('float',)], + "QTextFrameFormat.topMargin": (), + "QTextFrameFormat.width": (), + + # class PySide2.QtGui.QTextImageFormat: + "QTextImageFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextImageFormat',)], + "QTextImageFormat.__copy__": (), + "QTextImageFormat.height": (), + "QTextImageFormat.isValid": (), + "QTextImageFormat.name": (), + "QTextImageFormat.setHeight": ('float',), + "QTextImageFormat.setName": ('str',), + "QTextImageFormat.setWidth": ('float',), + "QTextImageFormat.width": (), + + # class PySide2.QtGui.QTextInlineObject: + "QTextInlineObject.__init__": (), + "QTextInlineObject.__copy__": (), + "QTextInlineObject.ascent": (), + "QTextInlineObject.descent": (), + "QTextInlineObject.format": (), + "QTextInlineObject.formatIndex": (), + "QTextInlineObject.height": (), + "QTextInlineObject.isValid": (), + "QTextInlineObject.rect": (), + "QTextInlineObject.setAscent": ('float',), + "QTextInlineObject.setDescent": ('float',), + "QTextInlineObject.setWidth": ('float',), + "QTextInlineObject.textDirection": (), + "QTextInlineObject.textPosition": (), + "QTextInlineObject.width": (), + + # class PySide2.QtGui.QTextItem: + "QTextItem.__init__": (), + "QTextItem.ascent": (), + "QTextItem.descent": (), + "QTextItem.font": (), + "QTextItem.renderFlags": (), + "QTextItem.text": (), + "QTextItem.width": (), + + # class PySide2.QtGui.QTextLayout: + "QTextLayout.__init__": [(), ('PySide2.QtGui.QTextBlock',), ('str',), ('str', 'PySide2.QtGui.QFont', 'PySide2.QtGui.QPaintDevice')], + "QTextLayout.additionalFormats": (), + "QTextLayout.beginLayout": (), + "QTextLayout.boundingRect": (), + "QTextLayout.cacheEnabled": (), + "QTextLayout.clearAdditionalFormats": (), + "QTextLayout.clearFormats": (), + "QTextLayout.clearLayout": (), + "QTextLayout.createLine": (), + "QTextLayout.cursorMoveStyle": (), + "QTextLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'list', 'PySide2.QtCore.QRectF'), + "QTextLayout.drawCursor": [('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'int', 'int')], + "QTextLayout.endLayout": (), + "QTextLayout.font": (), + "QTextLayout.formats": (), + "QTextLayout.isValidCursorPosition": ('int',), + "QTextLayout.leftCursorPosition": ('int',), + "QTextLayout.lineAt": ('int',), + "QTextLayout.lineCount": (), + "QTextLayout.lineForTextPosition": ('int',), + "QTextLayout.maximumWidth": (), + "QTextLayout.minimumWidth": (), + "QTextLayout.nextCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.position": (), + "QTextLayout.preeditAreaPosition": (), + "QTextLayout.preeditAreaText": (), + "QTextLayout.previousCursorPosition": ('int', 'PySide2.QtGui.QTextLayout.CursorMode'), + "QTextLayout.rightCursorPosition": ('int',), + "QTextLayout.setAdditionalFormats": ('list',), + "QTextLayout.setCacheEnabled": ('bool',), + "QTextLayout.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QTextLayout.setFlags": ('int',), + "QTextLayout.setFont": ('PySide2.QtGui.QFont',), + "QTextLayout.setFormats": ('list',), + "QTextLayout.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLayout.setPreeditArea": ('int', 'str'), + "QTextLayout.setRawFont": ('PySide2.QtGui.QRawFont',), + "QTextLayout.setText": ('str',), + "QTextLayout.setTextOption": ('PySide2.QtGui.QTextOption',), + "QTextLayout.text": (), + "QTextLayout.textOption": (), + + # class PySide2.QtGui.QTextLength: + "QTextLength.__init__": [(), ('PySide2.QtGui.QTextLength',), ('PySide2.QtGui.QTextLength.Type', 'float')], + "QTextLength.__copy__": (), + "QTextLength.rawValue": (), + "QTextLength.type": (), + "QTextLength.value": ('float',), + + # class PySide2.QtGui.QTextLine: + "QTextLine.__init__": (), + "QTextLine.__copy__": (), + "QTextLine.ascent": (), + "QTextLine.cursorToX": ('int', 'PySide2.QtGui.QTextLine.Edge'), + "QTextLine.descent": (), + "QTextLine.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPointF', 'PySide2.QtGui.QTextLayout.FormatRange'), + "QTextLine.height": (), + "QTextLine.horizontalAdvance": (), + "QTextLine.isValid": (), + "QTextLine.leading": (), + "QTextLine.leadingIncluded": (), + "QTextLine.lineNumber": (), + "QTextLine.naturalTextRect": (), + "QTextLine.naturalTextWidth": (), + "QTextLine.position": (), + "QTextLine.rect": (), + "QTextLine.setLeadingIncluded": ('bool',), + "QTextLine.setLineWidth": ('float',), + "QTextLine.setNumColumns": [('int',), ('int', 'float')], + "QTextLine.setPosition": ('PySide2.QtCore.QPointF',), + "QTextLine.textLength": (), + "QTextLine.textStart": (), + "QTextLine.width": (), + "QTextLine.x": (), + "QTextLine.xToCursor": ('float', 'PySide2.QtGui.QTextLine.CursorPosition'), + "QTextLine.y": (), + + # class PySide2.QtGui.QTextList: + "QTextList.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextList.add": ('PySide2.QtGui.QTextBlock',), + "QTextList.count": (), + "QTextList.format": (), + "QTextList.item": ('int',), + "QTextList.itemNumber": ('PySide2.QtGui.QTextBlock',), + "QTextList.itemText": ('PySide2.QtGui.QTextBlock',), + "QTextList.remove": ('PySide2.QtGui.QTextBlock',), + "QTextList.removeItem": ('int',), + "QTextList.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + + # class PySide2.QtGui.QTextListFormat: + "QTextListFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextListFormat',)], + "QTextListFormat.__copy__": (), + "QTextListFormat.indent": (), + "QTextListFormat.isValid": (), + "QTextListFormat.numberPrefix": (), + "QTextListFormat.numberSuffix": (), + "QTextListFormat.setIndent": ('int',), + "QTextListFormat.setNumberPrefix": ('str',), + "QTextListFormat.setNumberSuffix": ('str',), + "QTextListFormat.setStyle": ('PySide2.QtGui.QTextListFormat.Style',), + "QTextListFormat.style": (), + + # class PySide2.QtGui.QTextObject: + "QTextObject.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextObject.document": (), + "QTextObject.format": (), + "QTextObject.formatIndex": (), + "QTextObject.objectIndex": (), + "QTextObject.setFormat": ('PySide2.QtGui.QTextFormat',), + + # class PySide2.QtGui.QTextObjectInterface: + "QTextObjectInterface.__init__": (), + "QTextObjectInterface.drawObject": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + "QTextObjectInterface.intrinsicSize": ('PySide2.QtGui.QTextDocument', 'int', 'PySide2.QtGui.QTextFormat'), + + # class PySide2.QtGui.QTextOption: + "QTextOption.__init__": [(), ('Alignment',), ('PySide2.QtGui.QTextOption',)], + "QTextOption.__copy__": (), + "QTextOption.alignment": (), + "QTextOption.flags": (), + "QTextOption.setAlignment": ('Alignment',), + "QTextOption.setFlags": ('Flags',), + "QTextOption.setTabArray": ('list',), + "QTextOption.setTabStop": ('float',), + "QTextOption.setTabs": ('list',), + "QTextOption.setTextDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QTextOption.setUseDesignMetrics": ('bool',), + "QTextOption.setWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextOption.tabArray": (), + "QTextOption.tabStop": (), + "QTextOption.tabs": (), + "QTextOption.textDirection": (), + "QTextOption.useDesignMetrics": (), + "QTextOption.wrapMode": (), + + # class PySide2.QtGui.QTextTable: + "QTextTable.__init__": ('PySide2.QtGui.QTextDocument',), + "QTextTable.appendColumns": ('int',), + "QTextTable.appendRows": ('int',), + "QTextTable.cellAt": [('PySide2.QtGui.QTextCursor',), ('int',), ('int', 'int')], + "QTextTable.columns": (), + "QTextTable.format": (), + "QTextTable.insertColumns": ('int', 'int'), + "QTextTable.insertRows": ('int', 'int'), + "QTextTable.mergeCells": [('PySide2.QtGui.QTextCursor',), ('int', 'int', 'int', 'int')], + "QTextTable.removeColumns": ('int', 'int'), + "QTextTable.removeRows": ('int', 'int'), + "QTextTable.resize": ('int', 'int'), + "QTextTable.rowEnd": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rowStart": ('PySide2.QtGui.QTextCursor',), + "QTextTable.rows": (), + "QTextTable.setFormat": [('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTable.splitCell": ('int', 'int', 'int', 'int'), + + # class PySide2.QtGui.QTextTableCell: + "QTextTableCell.__init__": [(), ('PySide2.QtGui.QTextTableCell',)], + "QTextTableCell.__copy__": (), + "QTextTableCell.begin": (), + "QTextTableCell.column": (), + "QTextTableCell.columnSpan": (), + "QTextTableCell.end": (), + "QTextTableCell.firstCursorPosition": (), + "QTextTableCell.firstPosition": (), + "QTextTableCell.format": (), + "QTextTableCell.isValid": (), + "QTextTableCell.lastCursorPosition": (), + "QTextTableCell.lastPosition": (), + "QTextTableCell.row": (), + "QTextTableCell.rowSpan": (), + "QTextTableCell.setFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextTableCell.tableCellFormatIndex": (), + + # class PySide2.QtGui.QTextTableCellFormat: + "QTextTableCellFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableCellFormat',)], + "QTextTableCellFormat.__copy__": (), + "QTextTableCellFormat.bottomPadding": (), + "QTextTableCellFormat.isValid": (), + "QTextTableCellFormat.leftPadding": (), + "QTextTableCellFormat.rightPadding": (), + "QTextTableCellFormat.setBottomPadding": ('float',), + "QTextTableCellFormat.setLeftPadding": ('float',), + "QTextTableCellFormat.setPadding": ('float',), + "QTextTableCellFormat.setRightPadding": ('float',), + "QTextTableCellFormat.setTopPadding": ('float',), + "QTextTableCellFormat.topPadding": (), + + # class PySide2.QtGui.QTextTableFormat: + "QTextTableFormat.__init__": [(), ('PySide2.QtGui.QTextFormat',), ('PySide2.QtGui.QTextTableFormat',)], + "QTextTableFormat.__copy__": (), + "QTextTableFormat.alignment": (), + "QTextTableFormat.cellPadding": (), + "QTextTableFormat.cellSpacing": (), + "QTextTableFormat.clearColumnWidthConstraints": (), + "QTextTableFormat.columnWidthConstraints": (), + "QTextTableFormat.columns": (), + "QTextTableFormat.headerRowCount": (), + "QTextTableFormat.isValid": (), + "QTextTableFormat.setAlignment": ('Alignment',), + "QTextTableFormat.setCellPadding": ('float',), + "QTextTableFormat.setCellSpacing": ('float',), + "QTextTableFormat.setColumnWidthConstraints": ('list',), + "QTextTableFormat.setColumns": ('int',), + "QTextTableFormat.setHeaderRowCount": ('int',), + + # class PySide2.QtGui.QToolBarChangeEvent: + "QToolBarChangeEvent.__init__": ('bool',), + "QToolBarChangeEvent.toggle": (), + + # class PySide2.QtGui.QTouchDevice: + "QTouchDevice.__init__": (), + "QTouchDevice.capabilities": (), + "QTouchDevice.devices": (), + "QTouchDevice.maximumTouchPoints": (), + "QTouchDevice.name": (), + "QTouchDevice.setCapabilities": ('Capabilities',), + "QTouchDevice.setMaximumTouchPoints": ('int',), + "QTouchDevice.setName": ('str',), + "QTouchDevice.setType": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTouchDevice.type": (), + + # class PySide2.QtGui.QTouchEvent: + "QTouchEvent.__init__": ('PySide2.QtCore.QEvent.Type', 'PySide2.QtGui.QTouchDevice', 'KeyboardModifiers', 'TouchPointStates', 'list'), + "QTouchEvent.device": (), + "QTouchEvent.setDevice": ('PySide2.QtGui.QTouchDevice',), + "QTouchEvent.setTarget": ('PySide2.QtCore.QObject',), + "QTouchEvent.setTouchPointStates": ('TouchPointStates',), + "QTouchEvent.setTouchPoints": ('list',), + "QTouchEvent.setWindow": ('PySide2.QtGui.QWindow',), + "QTouchEvent.target": (), + "QTouchEvent.touchPointStates": (), + "QTouchEvent.touchPoints": (), + "QTouchEvent.window": (), + + # class PySide2.QtGui.QTransform: + "QTransform.__init__": [(), ('PySide2.QtGui.QMatrix',), ('PySide2.QtGui.QTransform',), ('float', 'float', 'float', 'float', 'float', 'float'), ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float')], + "QTransform.__copy__": (), + "QTransform.__reduce__": (), + "QTransform.adjoint": (), + "QTransform.det": (), + "QTransform.determinant": (), + "QTransform.dx": (), + "QTransform.dy": (), + "QTransform.fromScale": ('float', 'float'), + "QTransform.fromTranslate": ('float', 'float'), + "QTransform.inverted": ('bool',), + "QTransform.isAffine": (), + "QTransform.isIdentity": (), + "QTransform.isInvertible": (), + "QTransform.isRotating": (), + "QTransform.isScaling": (), + "QTransform.isTranslating": (), + "QTransform.m11": (), + "QTransform.m12": (), + "QTransform.m13": (), + "QTransform.m21": (), + "QTransform.m22": (), + "QTransform.m23": (), + "QTransform.m31": (), + "QTransform.m32": (), + "QTransform.m33": (), + "QTransform.map": [('PySide2.QtCore.QLine',), ('PySide2.QtCore.QLineF',), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QRegion',), ('float', 'float', 'float', 'float')], + "QTransform.mapRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QTransform.mapToPolygon": ('PySide2.QtCore.QRect',), + "QTransform.quadToQuad": [('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.quadToSquare": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.reset": (), + "QTransform.rotate": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.rotateRadians": ('float', 'PySide2.QtCore.Qt.Axis'), + "QTransform.scale": ('float', 'float'), + "QTransform.setMatrix": ('float', 'float', 'float', 'float', 'float', 'float', 'float', 'float', 'float'), + "QTransform.shear": ('float', 'float'), + "QTransform.squareToQuad": [('PySide2.QtGui.QPolygonF',), ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QTransform')], + "QTransform.toAffine": (), + "QTransform.translate": ('float', 'float'), + "QTransform.transposed": (), + "QTransform.type": (), + + # class PySide2.QtGui.QValidator: + "QValidator.__init__": ('PySide2.QtCore.QObject',), + "QValidator.fixup": ('str',), + "QValidator.locale": (), + "QValidator.setLocale": ('PySide2.QtCore.QLocale',), + "QValidator.validate": ('str', 'int'), + + # class PySide2.QtGui.QVector2D: + "QVector2D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector4D',), ('float', 'float')], + "QVector2D.__copy__": (), + "QVector2D.__reduce__": (), + "QVector2D.distanceToLine": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.distanceToPoint": ('PySide2.QtGui.QVector2D',), + "QVector2D.dotProduct": ('PySide2.QtGui.QVector2D', 'PySide2.QtGui.QVector2D'), + "QVector2D.isNull": (), + "QVector2D.length": (), + "QVector2D.lengthSquared": (), + "QVector2D.normalize": (), + "QVector2D.normalized": (), + "QVector2D.setX": ('float',), + "QVector2D.setY": ('float',), + "QVector2D.toPoint": (), + "QVector2D.toPointF": (), + "QVector2D.toTuple": (), + "QVector2D.toVector3D": (), + "QVector2D.toVector4D": (), + "QVector2D.x": (), + "QVector2D.y": (), + + # class PySide2.QtGui.QVector3D: + "QVector3D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float'), ('PySide2.QtGui.QVector4D',), ('float', 'float', 'float')], + "QVector3D.__copy__": (), + "QVector3D.__reduce__": (), + "QVector3D.crossProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToLine": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.distanceToPlane": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.distanceToPoint": ('PySide2.QtGui.QVector3D',), + "QVector3D.dotProduct": ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), + "QVector3D.isNull": (), + "QVector3D.length": (), + "QVector3D.lengthSquared": (), + "QVector3D.normal": [('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D'), ('PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D', 'PySide2.QtGui.QVector3D')], + "QVector3D.normalize": (), + "QVector3D.normalized": (), + "QVector3D.project": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.setX": ('float',), + "QVector3D.setY": ('float',), + "QVector3D.setZ": ('float',), + "QVector3D.toPoint": (), + "QVector3D.toPointF": (), + "QVector3D.toTuple": (), + "QVector3D.toVector2D": (), + "QVector3D.toVector4D": (), + "QVector3D.unproject": ('PySide2.QtGui.QMatrix4x4', 'PySide2.QtGui.QMatrix4x4', 'PySide2.QtCore.QRect'), + "QVector3D.x": (), + "QVector3D.y": (), + "QVector3D.z": (), + + # class PySide2.QtGui.QVector4D: + "QVector4D.__init__": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QPointF',), ('PySide2.QtGui.QVector2D',), ('PySide2.QtGui.QVector2D', 'float', 'float'), ('PySide2.QtGui.QVector3D',), ('PySide2.QtGui.QVector3D', 'float'), ('float', 'float', 'float', 'float')], + "QVector4D.__copy__": (), + "QVector4D.__reduce__": (), + "QVector4D.dotProduct": ('PySide2.QtGui.QVector4D', 'PySide2.QtGui.QVector4D'), + "QVector4D.isNull": (), + "QVector4D.length": (), + "QVector4D.lengthSquared": (), + "QVector4D.normalize": (), + "QVector4D.normalized": (), + "QVector4D.setW": ('float',), + "QVector4D.setX": ('float',), + "QVector4D.setY": ('float',), + "QVector4D.setZ": ('float',), + "QVector4D.toPoint": (), + "QVector4D.toPointF": (), + "QVector4D.toTuple": (), + "QVector4D.toVector2D": (), + "QVector4D.toVector2DAffine": (), + "QVector4D.toVector3D": (), + "QVector4D.toVector3DAffine": (), + "QVector4D.w": (), + "QVector4D.x": (), + "QVector4D.y": (), + "QVector4D.z": (), + + # class PySide2.QtGui.QWhatsThisClickedEvent: + "QWhatsThisClickedEvent.__init__": ('str',), + "QWhatsThisClickedEvent.href": (), + + # class PySide2.QtGui.QWheelEvent: + "QWheelEvent.__init__": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'PySide2.QtCore.QPoint', 'PySide2.QtCore.QPoint', 'int', 'PySide2.QtCore.Qt.Orientation', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.ScrollPhase', 'PySide2.QtCore.Qt.MouseEventSource', 'bool'), ('PySide2.QtCore.QPointF', 'PySide2.QtCore.QPointF', 'int', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation'), ('PySide2.QtCore.QPointF', 'int', 'MouseButtons', 'KeyboardModifiers', 'PySide2.QtCore.Qt.Orientation')], + "QWheelEvent.angleDelta": (), + "QWheelEvent.buttons": (), + "QWheelEvent.delta": (), + "QWheelEvent.globalPos": (), + "QWheelEvent.globalPosF": (), + "QWheelEvent.globalX": (), + "QWheelEvent.global""Y": (), + "QWheelEvent.inverted": (), + "QWheelEvent.orientation": (), + "QWheelEvent.phase": (), + "QWheelEvent.pixelDelta": (), + "QWheelEvent.pos": (), + "QWheelEvent.posF": (), + "QWheelEvent.source": (), + "QWheelEvent.x": (), + "QWheelEvent.y": (), + + # class PySide2.QtGui.QWindow: + "QWindow.__init__": [('PySide2.QtGui.QScreen',), ('PySide2.QtGui.QWindow',)], + "QWindow.accessibleRoot": (), + "QWindow.alert": ('int',), + "QWindow.baseSize": (), + "QWindow.close": (), + "QWindow.contentOrientation": (), + "QWindow.create": (), + "QWindow.cursor": (), + "QWindow.destroy": (), + "QWindow.devicePixelRatio": (), + "QWindow.event": ('PySide2.QtCore.QEvent',), + "QWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QWindow.filePath": (), + "QWindow.flags": (), + "QWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.focusObject": (), + "QWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWindow.format": (), + "QWindow.frameGeometry": (), + "QWindow.frameMargins": (), + "QWindow.framePosition": (), + "QWindow.fromWinId": ('int',), + "QWindow.geometry": (), + "QWindow.height": (), + "QWindow.hide": (), + "QWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWindow.icon": (), + "QWindow.isActive": (), + "QWindow.isAncestorOf": ('PySide2.QtGui.QWindow', 'PySide2.QtGui.QWindow.AncestorMode'), + "QWindow.isExposed": (), + "QWindow.isModal": (), + "QWindow.isTopLevel": (), + "QWindow.isVisible": (), + "QWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWindow.lower": (), + "QWindow.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWindow.mask": (), + "QWindow.maximumHeight": (), + "QWindow.maximumSize": (), + "QWindow.maximumWidth": (), + "QWindow.minimumHeight": (), + "QWindow.minimumSize": (), + "QWindow.minimumWidth": (), + "QWindow.modality": (), + "QWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWindow.opacity": (), + "QWindow.parent": [(), ('PySide2.QtGui.QWindow.AncestorMode',)], + "QWindow.position": (), + "QWindow.raise": (), + "QWindow.reportContentOrientationChange": ('PySide2.QtCore.Qt.ScreenOrientation',), + "QWindow.requestActivate": (), + "QWindow.requestUpdate": (), + "QWindow.requestedFormat": (), + "QWindow.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWindow.screen": (), + "QWindow.setBaseSize": ('PySide2.QtCore.QSize',), + "QWindow.setCursor": ('PySide2.QtGui.QCursor',), + "QWindow.setFilePath": ('str',), + "QWindow.setFlag": ('PySide2.QtCore.Qt.WindowType', 'bool'), + "QWindow.setFlags": ('WindowFlags',), + "QWindow.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QWindow.setFramePosition": ('PySide2.QtCore.QPoint',), + "QWindow.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWindow.setHeight": ('int',), + "QWindow.setIcon": ('PySide2.QtGui.QIcon',), + "QWindow.setKeyboardGrabEnabled": ('bool',), + "QWindow.setMask": ('PySide2.QtGui.QRegion',), + "QWindow.setMaximumHeight": ('int',), + "QWindow.setMaximumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMaximumWidth": ('int',), + "QWindow.setMinimumHeight": ('int',), + "QWindow.setMinimumSize": ('PySide2.QtCore.QSize',), + "QWindow.setMinimumWidth": ('int',), + "QWindow.setModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWindow.setMouseGrabEnabled": ('bool',), + "QWindow.setOpacity": ('float',), + "QWindow.setParent": ('PySide2.QtGui.QWindow',), + "QWindow.setPosition": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWindow.setScreen": ('PySide2.QtGui.QScreen',), + "QWindow.setSizeIncrement": ('PySide2.QtCore.QSize',), + "QWindow.setSurfaceType": ('PySide2.QtGui.QSurface.SurfaceType',), + "QWindow.setTitle": ('str',), + "QWindow.setTransientParent": ('PySide2.QtGui.QWindow',), + "QWindow.setVisibility": ('PySide2.QtGui.QWindow.Visibility',), + "QWindow.setVisible": ('bool',), + "QWindow.setWidth": ('int',), + "QWindow.setWindowState": ('PySide2.QtCore.Qt.WindowState',), + "QWindow.setX": ('int',), + "QWindow.setY": ('int',), + "QWindow.show": (), + "QWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWindow.showFullScreen": (), + "QWindow.showMaximized": (), + "QWindow.showMinimized": (), + "QWindow.showNormal": (), + "QWindow.size": (), + "QWindow.sizeIncrement": (), + "QWindow.surfaceHandle": (), + "QWindow.surfaceType": (), + "QWindow.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWindow.title": (), + "QWindow.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QWindow.transientParent": (), + "QWindow.type": (), + "QWindow.unsetCursor": (), + "QWindow.visibility": (), + "QWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWindow.width": (), + "QWindow.winId": (), + "QWindow.windowState": (), + "QWindow.x": (), + "QWindow.y": (), + + # class PySide2.QtGui.QWindowStateChangeEvent: + "QWindowStateChangeEvent.__init__": ('WindowStates', 'bool'), + "QWindowStateChangeEvent.isOverride": (), + "QWindowStateChangeEvent.oldState": (), + }) + +# Module PySide2.QtWidgets +if "PySide2.QtWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWidgets.QAbstractButton: + "QAbstractButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractButton.animateClick": ('int',), + "QAbstractButton.autoExclusive": (), + "QAbstractButton.autoRepeat": (), + "QAbstractButton.autoRepeatDelay": (), + "QAbstractButton.autoRepeatInterval": (), + "QAbstractButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractButton.checkStateSet": (), + "QAbstractButton.click": (), + "QAbstractButton.event": ('PySide2.QtCore.QEvent',), + "QAbstractButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractButton.group": (), + "QAbstractButton.hitButton": ('PySide2.QtCore.QPoint',), + "QAbstractButton.icon": (), + "QAbstractButton.iconSize": (), + "QAbstractButton.isCheckable": (), + "QAbstractButton.isChecked": (), + "QAbstractButton.isDown": (), + "QAbstractButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractButton.nextCheckState": (), + "QAbstractButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractButton.setAutoExclusive": ('bool',), + "QAbstractButton.setAutoRepeat": ('bool',), + "QAbstractButton.setAutoRepeatDelay": ('int',), + "QAbstractButton.setAutoRepeatInterval": ('int',), + "QAbstractButton.setCheckable": ('bool',), + "QAbstractButton.setChecked": ('bool',), + "QAbstractButton.setDown": ('bool',), + "QAbstractButton.setIcon": ('PySide2.QtGui.QIcon',), + "QAbstractButton.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractButton.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAbstractButton.setText": ('str',), + "QAbstractButton.shortcut": (), + "QAbstractButton.text": (), + "QAbstractButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractButton.toggle": (), + + # class PySide2.QtWidgets.QAbstractGraphicsShapeItem: + "QAbstractGraphicsShapeItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.brush": (), + "QAbstractGraphicsShapeItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QAbstractGraphicsShapeItem.opaqueArea": (), + "QAbstractGraphicsShapeItem.pen": (), + "QAbstractGraphicsShapeItem.setBrush": ('PySide2.QtGui.QBrush',), + "QAbstractGraphicsShapeItem.setPen": ('PySide2.QtGui.QPen',), + + # class PySide2.QtWidgets.QAbstractItemDelegate: + "QAbstractItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QAbstractItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.destroyEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.elidedText": ('PySide2.QtGui.QFontMetrics', 'int', 'PySide2.QtCore.Qt.TextElideMode', 'str'), + "QAbstractItemDelegate.helpEvent": ('PySide2.QtGui.QHelpEvent', 'PySide2.QtWidgets.QAbstractItemView', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.paintingRoles": (), + "QAbstractItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QAbstractItemView: + "QAbstractItemView.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.alternatingRowColors": (), + "QAbstractItemView.autoScrollMargin": (), + "QAbstractItemView.clearSelection": (), + "QAbstractItemView.closeEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QAbstractItemDelegate.EndEditHint'), + "QAbstractItemView.closePersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.commitData": ('PySide2.QtWidgets.QWidget',), + "QAbstractItemView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QAbstractItemView.currentIndex": (), + "QAbstractItemView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QAbstractItemView.defaultDropAction": (), + "QAbstractItemView.dirtyRegionOffset": (), + "QAbstractItemView.doAutoScroll": (), + "QAbstractItemView.doItemsLayout": (), + "QAbstractItemView.dragDropMode": (), + "QAbstractItemView.dragDropOverwriteMode": (), + "QAbstractItemView.dragEnabled": (), + "QAbstractItemView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractItemView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractItemView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractItemView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractItemView.dropIndicatorPosition": (), + "QAbstractItemView.edit": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.EditTrigger', 'PySide2.QtCore.QEvent')], + "QAbstractItemView.editTriggers": (), + "QAbstractItemView.editorDestroyed": ('PySide2.QtCore.QObject',), + "QAbstractItemView.event": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.executeDelayedItemsLayout": (), + "QAbstractItemView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.focusNextPrevChild": ('bool',), + "QAbstractItemView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractItemView.hasAutoScroll": (), + "QAbstractItemView.horizontalOffset": (), + "QAbstractItemView.horizontalScrollMode": (), + "QAbstractItemView.horizontalScrollbarAction": ('int',), + "QAbstractItemView.horizontalScrollbarValueChanged": ('int',), + "QAbstractItemView.horizontalStepsPerItem": (), + "QAbstractItemView.iconSize": (), + "QAbstractItemView.indexAt": ('PySide2.QtCore.QPoint',), + "QAbstractItemView.indexWidget": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QAbstractItemView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractItemView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.itemDelegate": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.itemDelegateForColumn": ('int',), + "QAbstractItemView.itemDelegateForRow": ('int',), + "QAbstractItemView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractItemView.keyboardSearch": ('str',), + "QAbstractItemView.model": (), + "QAbstractItemView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractItemView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QAbstractItemView.openPersistentEditor": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.reset": (), + "QAbstractItemView.resetHorizontalScrollMode": (), + "QAbstractItemView.resetVerticalScrollMode": (), + "QAbstractItemView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractItemView.rootIndex": (), + "QAbstractItemView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QAbstractItemView.scheduleDelayedItemsLayout": (), + "QAbstractItemView.scrollDirtyRegion": ('int', 'int'), + "QAbstractItemView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QAbstractItemView.scrollToBottom": (), + "QAbstractItemView.scrollToTop": (), + "QAbstractItemView.selectAll": (), + "QAbstractItemView.selectedIndexes": (), + "QAbstractItemView.selectionBehavior": (), + "QAbstractItemView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QAbstractItemView.selectionCommand": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QEvent'), + "QAbstractItemView.selectionMode": (), + "QAbstractItemView.selectionModel": (), + "QAbstractItemView.setAlternatingRowColors": ('bool',), + "QAbstractItemView.setAutoScroll": ('bool',), + "QAbstractItemView.setAutoScrollMargin": ('int',), + "QAbstractItemView.setCurrentIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setDefaultDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QAbstractItemView.setDirtyRegion": ('PySide2.QtGui.QRegion',), + "QAbstractItemView.setDragDropMode": ('PySide2.QtWidgets.QAbstractItemView.DragDropMode',), + "QAbstractItemView.setDragDropOverwriteMode": ('bool',), + "QAbstractItemView.setDragEnabled": ('bool',), + "QAbstractItemView.setDropIndicatorShown": ('bool',), + "QAbstractItemView.setEditTriggers": ('EditTriggers',), + "QAbstractItemView.setHorizontalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setHorizontalStepsPerItem": ('int',), + "QAbstractItemView.setIconSize": ('PySide2.QtCore.QSize',), + "QAbstractItemView.setIndexWidget": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QWidget'), + "QAbstractItemView.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QAbstractItemView.setItemDelegateForColumn": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setItemDelegateForRow": ('int', 'PySide2.QtWidgets.QAbstractItemDelegate'), + "QAbstractItemView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QAbstractItemView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QAbstractItemView.setSelectionBehavior": ('PySide2.QtWidgets.QAbstractItemView.SelectionBehavior',), + "QAbstractItemView.setSelectionMode": ('PySide2.QtWidgets.QAbstractItemView.SelectionMode',), + "QAbstractItemView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QAbstractItemView.setState": ('PySide2.QtWidgets.QAbstractItemView.State',), + "QAbstractItemView.setTabKeyNavigation": ('bool',), + "QAbstractItemView.setTextElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QAbstractItemView.setVerticalScrollMode": ('PySide2.QtWidgets.QAbstractItemView.ScrollMode',), + "QAbstractItemView.setVerticalStepsPerItem": ('int',), + "QAbstractItemView.showDropIndicator": (), + "QAbstractItemView.sizeHintForColumn": ('int',), + "QAbstractItemView.sizeHintForIndex": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.sizeHintForRow": ('int',), + "QAbstractItemView.startAutoScroll": (), + "QAbstractItemView.startDrag": ('DropActions',), + "QAbstractItemView.state": (), + "QAbstractItemView.stopAutoScroll": (), + "QAbstractItemView.tabKeyNavigation": (), + "QAbstractItemView.textElideMode": (), + "QAbstractItemView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractItemView.update": [(), ('PySide2.QtCore.QModelIndex',)], + "QAbstractItemView.updateEditorData": (), + "QAbstractItemView.updateEditorGeometries": (), + "QAbstractItemView.updateGeometries": (), + "QAbstractItemView.verticalOffset": (), + "QAbstractItemView.verticalScrollMode": (), + "QAbstractItemView.verticalScrollbarAction": ('int',), + "QAbstractItemView.verticalScrollbarValueChanged": ('int',), + "QAbstractItemView.verticalStepsPerItem": (), + "QAbstractItemView.viewOptions": (), + "QAbstractItemView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractItemView.viewportSizeHint": (), + "QAbstractItemView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QAbstractItemView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QAbstractScrollArea: + "QAbstractScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.addScrollBarWidget": ('PySide2.QtWidgets.QWidget', 'Alignment'), + "QAbstractScrollArea.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractScrollArea.cornerWidget": (), + "QAbstractScrollArea.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QAbstractScrollArea.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QAbstractScrollArea.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QAbstractScrollArea.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QAbstractScrollArea.event": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QAbstractScrollArea.horizontalScrollBar": (), + "QAbstractScrollArea.horizontalScrollBarPolicy": (), + "QAbstractScrollArea.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractScrollArea.maximumViewportSize": (), + "QAbstractScrollArea.minimumSizeHint": (), + "QAbstractScrollArea.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractScrollArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractScrollArea.scrollBarWidgets": ('Alignment',), + "QAbstractScrollArea.scrollContentsBy": ('int', 'int'), + "QAbstractScrollArea.setCornerWidget": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setHorizontalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setHorizontalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setSizeAdjustPolicy": ('PySide2.QtWidgets.QAbstractScrollArea.SizeAdjustPolicy',), + "QAbstractScrollArea.setVerticalScrollBar": ('PySide2.QtWidgets.QScrollBar',), + "QAbstractScrollArea.setVerticalScrollBarPolicy": ('PySide2.QtCore.Qt.ScrollBarPolicy',), + "QAbstractScrollArea.setViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.setViewportMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QAbstractScrollArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QAbstractScrollArea.sizeAdjustPolicy": (), + "QAbstractScrollArea.sizeHint": (), + "QAbstractScrollArea.verticalScrollBar": (), + "QAbstractScrollArea.verticalScrollBarPolicy": (), + "QAbstractScrollArea.viewport": (), + "QAbstractScrollArea.viewportEvent": ('PySide2.QtCore.QEvent',), + "QAbstractScrollArea.viewportMargins": (), + "QAbstractScrollArea.viewportSizeHint": (), + "QAbstractScrollArea.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSlider: + "QAbstractSlider.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSlider.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.event": ('PySide2.QtCore.QEvent',), + "QAbstractSlider.hasTracking": (), + "QAbstractSlider.invertedAppearance": (), + "QAbstractSlider.invertedControls": (), + "QAbstractSlider.isSliderDown": (), + "QAbstractSlider.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSlider.maximum": (), + "QAbstractSlider.minimum": (), + "QAbstractSlider.orientation": (), + "QAbstractSlider.pageStep": (), + "QAbstractSlider.repeatAction": (), + "QAbstractSlider.setInvertedAppearance": ('bool',), + "QAbstractSlider.setInvertedControls": ('bool',), + "QAbstractSlider.setMaximum": ('int',), + "QAbstractSlider.setMinimum": ('int',), + "QAbstractSlider.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QAbstractSlider.setPageStep": ('int',), + "QAbstractSlider.setRange": ('int', 'int'), + "QAbstractSlider.setRepeatAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction', 'int', 'int'), + "QAbstractSlider.setSingleStep": ('int',), + "QAbstractSlider.setSliderDown": ('bool',), + "QAbstractSlider.setSliderPosition": ('int',), + "QAbstractSlider.setTracking": ('bool',), + "QAbstractSlider.setValue": ('int',), + "QAbstractSlider.singleStep": (), + "QAbstractSlider.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QAbstractSlider.sliderPosition": (), + "QAbstractSlider.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSlider.triggerAction": ('PySide2.QtWidgets.QAbstractSlider.SliderAction',), + "QAbstractSlider.value": (), + "QAbstractSlider.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QAbstractSpinBox: + "QAbstractSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QAbstractSpinBox.alignment": (), + "QAbstractSpinBox.buttonSymbols": (), + "QAbstractSpinBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.clear": (), + "QAbstractSpinBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QAbstractSpinBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QAbstractSpinBox.correctionMode": (), + "QAbstractSpinBox.event": ('PySide2.QtCore.QEvent',), + "QAbstractSpinBox.fixup": ('str',), + "QAbstractSpinBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QAbstractSpinBox.hasAcceptableInput": (), + "QAbstractSpinBox.hasFrame": (), + "QAbstractSpinBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QAbstractSpinBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QAbstractSpinBox.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QAbstractSpinBox.interpretText": (), + "QAbstractSpinBox.isAccelerated": (), + "QAbstractSpinBox.isGroupSeparatorShown": (), + "QAbstractSpinBox.isReadOnly": (), + "QAbstractSpinBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QAbstractSpinBox.keyboardTracking": (), + "QAbstractSpinBox.lineEdit": (), + "QAbstractSpinBox.minimumSizeHint": (), + "QAbstractSpinBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QAbstractSpinBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QAbstractSpinBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAbstractSpinBox.selectAll": (), + "QAbstractSpinBox.setAccelerated": ('bool',), + "QAbstractSpinBox.setAlignment": ('Alignment',), + "QAbstractSpinBox.setButtonSymbols": ('PySide2.QtWidgets.QAbstractSpinBox.ButtonSymbols',), + "QAbstractSpinBox.setCorrectionMode": ('PySide2.QtWidgets.QAbstractSpinBox.CorrectionMode',), + "QAbstractSpinBox.setFrame": ('bool',), + "QAbstractSpinBox.setGroupSeparatorShown": ('bool',), + "QAbstractSpinBox.setKeyboardTracking": ('bool',), + "QAbstractSpinBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QAbstractSpinBox.setReadOnly": ('bool',), + "QAbstractSpinBox.setSpecialValueText": ('str',), + "QAbstractSpinBox.setWrapping": ('bool',), + "QAbstractSpinBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QAbstractSpinBox.sizeHint": (), + "QAbstractSpinBox.specialValueText": (), + "QAbstractSpinBox.stepBy": ('int',), + "QAbstractSpinBox.stepDown": (), + "QAbstractSpinBox.stepEnabled": (), + "QAbstractSpinBox.stepUp": (), + "QAbstractSpinBox.text": (), + "QAbstractSpinBox.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QAbstractSpinBox.validate": ('str', 'int'), + "QAbstractSpinBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QAbstractSpinBox.wrapping": (), + + # class PySide2.QtWidgets.QAction: + "QAction.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QAction.actionGroup": (), + "QAction.activate": ('PySide2.QtWidgets.QAction.ActionEvent',), + "QAction.associatedGraphicsWidgets": (), + "QAction.associatedWidgets": (), + "QAction.autoRepeat": (), + "QAction.data": (), + "QAction.event": ('PySide2.QtCore.QEvent',), + "QAction.font": (), + "QAction.hover": (), + "QAction.icon": (), + "QAction.iconText": (), + "QAction.isCheckable": (), + "QAction.isChecked": (), + "QAction.isEnabled": (), + "QAction.isIconVisibleInMenu": (), + "QAction.isSeparator": (), + "QAction.isVisible": (), + "QAction.menu": (), + "QAction.menuRole": (), + "QAction.parentWidget": (), + "QAction.priority": (), + "QAction.setActionGroup": ('PySide2.QtWidgets.QActionGroup',), + "QAction.setAutoRepeat": ('bool',), + "QAction.setCheckable": ('bool',), + "QAction.setChecked": ('bool',), + "QAction.setData": ('Any',), + "QAction.setDisabled": ('bool',), + "QAction.setEnabled": ('bool',), + "QAction.setFont": ('PySide2.QtGui.QFont',), + "QAction.setIcon": ('PySide2.QtGui.QIcon',), + "QAction.setIconText": ('str',), + "QAction.setIconVisibleInMenu": ('bool',), + "QAction.setMenu": ('PySide2.QtWidgets.QMenu',), + "QAction.setMenuRole": ('PySide2.QtWidgets.QAction.MenuRole',), + "QAction.setPriority": ('PySide2.QtWidgets.QAction.Priority',), + "QAction.setSeparator": ('bool',), + "QAction.setShortcut": ('PySide2.QtGui.QKeySequence',), + "QAction.setShortcutContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QAction.setShortcuts": [('PySide2.QtGui.QKeySequence.StandardKey',), ('list',)], + "QAction.setStatusTip": ('str',), + "QAction.setText": ('str',), + "QAction.setToolTip": ('str',), + "QAction.setVisible": ('bool',), + "QAction.setWhatsThis": ('str',), + "QAction.shortcut": (), + "QAction.shortcutContext": (), + "QAction.shortcuts": (), + "QAction.showStatusText": ('PySide2.QtWidgets.QWidget',), + "QAction.statusTip": (), + "QAction.text": (), + "QAction.toggle": (), + "QAction.toolTip": (), + "QAction.trigger": (), + "QAction.whatsThis": (), + + # class PySide2.QtWidgets.QActionGroup: + "QActionGroup.__init__": ('PySide2.QtCore.QObject',), + "QActionGroup.actions": (), + "QActionGroup.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction',), ('str',)], + "QActionGroup.checkedAction": (), + "QActionGroup.isEnabled": (), + "QActionGroup.isExclusive": (), + "QActionGroup.isVisible": (), + "QActionGroup.removeAction": ('PySide2.QtWidgets.QAction',), + "QActionGroup.setDisabled": ('bool',), + "QActionGroup.setEnabled": ('bool',), + "QActionGroup.setExclusive": ('bool',), + "QActionGroup.setVisible": ('bool',), + + # class PySide2.QtWidgets.QApplication: + "QApplication.__init__": ('List[str]',), + "QApplication.aboutQt": (), + "QApplication.activeModalWidget": (), + "QApplication.activePopupWidget": (), + "QApplication.activeWindow": (), + "QApplication.alert": ('PySide2.QtWidgets.QWidget', 'int'), + "QApplication.allWidgets": (), + "QApplication.autoSipEnabled": (), + "QApplication.beep": (), + "QApplication.closeAllWindows": (), + "QApplication.colorSpec": (), + "QApplication.cursorFlashTime": (), + "QApplication.desktop": (), + "QApplication.doubleClickInterval": (), + "QApplication.event": ('PySide2.QtCore.QEvent',), + "QApplication.exec_": (), + "QApplication.focusWidget": (), + "QApplication.font": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.fontMetrics": (), + "QApplication.globalStrut": (), + "QApplication.isEffectEnabled": ('PySide2.QtCore.Qt.UIEffect',), + "QApplication.keyboardInputInterval": (), + "QApplication.notify": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QApplication.palette": [(), ('PySide2.QtWidgets.QWidget',), ('str',)], + "QApplication.setActiveWindow": ('PySide2.QtWidgets.QWidget',), + "QApplication.setAutoSipEnabled": ('bool',), + "QApplication.setColorSpec": ('int',), + "QApplication.setCursorFlashTime": ('int',), + "QApplication.setDoubleClickInterval": ('int',), + "QApplication.setEffectEnabled": ('PySide2.QtCore.Qt.UIEffect', 'bool'), + "QApplication.setFont": [('PySide2.QtGui.QFont',), ('PySide2.QtGui.QFont', 'str')], + "QApplication.setGlobalStrut": ('PySide2.QtCore.QSize',), + "QApplication.setKeyboardInputInterval": ('int',), + "QApplication.setPalette": [('PySide2.QtGui.QPalette',), ('PySide2.QtGui.QPalette', 'str')], + "QApplication.setStartDragDistance": ('int',), + "QApplication.setStartDragTime": ('int',), + "QApplication.setStyle": [('PySide2.QtWidgets.QStyle',), ('str',)], + "QApplication.setStyleSheet": ('str',), + "QApplication.setWheelScrollLines": ('int',), + "QApplication.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QApplication.startDragDistance": (), + "QApplication.startDragTime": (), + "QApplication.style": (), + "QApplication.styleSheet": (), + "QApplication.topLevelAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.topLevelWidgets": (), + "QApplication.wheelScrollLines": (), + "QApplication.widgetAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QApplication.windowIcon": (), + + # class PySide2.QtWidgets.QBoxLayout: + "QBoxLayout.__init__": ('PySide2.QtWidgets.QBoxLayout.Direction', 'PySide2.QtWidgets.QWidget'), + "QBoxLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QBoxLayout.addLayout": ('PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.addSpacerItem": ('PySide2.QtWidgets.QSpacerItem',), + "QBoxLayout.addSpacing": ('int',), + "QBoxLayout.addStretch": ('int',), + "QBoxLayout.addStrut": ('int',), + "QBoxLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'Alignment')], + "QBoxLayout.count": (), + "QBoxLayout.direction": (), + "QBoxLayout.expandingDirections": (), + "QBoxLayout.hasHeightForWidth": (), + "QBoxLayout.heightForWidth": ('int',), + "QBoxLayout.insertItem": ('int', 'PySide2.QtWidgets.QLayoutItem'), + "QBoxLayout.insertLayout": ('int', 'PySide2.QtWidgets.QLayout', 'int'), + "QBoxLayout.insertSpacerItem": ('int', 'PySide2.QtWidgets.QSpacerItem'), + "QBoxLayout.insertSpacing": ('int', 'int'), + "QBoxLayout.insertStretch": ('int', 'int'), + "QBoxLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int', 'Alignment'), + "QBoxLayout.invalidate": (), + "QBoxLayout.itemAt": ('int',), + "QBoxLayout.maximumSize": (), + "QBoxLayout.minimumHeightForWidth": ('int',), + "QBoxLayout.minimumSize": (), + "QBoxLayout.setDirection": ('PySide2.QtWidgets.QBoxLayout.Direction',), + "QBoxLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QBoxLayout.setSpacing": ('int',), + "QBoxLayout.setStretch": ('int', 'int'), + "QBoxLayout.setStretchFactor": [('PySide2.QtWidgets.QLayout', 'int'), ('PySide2.QtWidgets.QWidget', 'int')], + "QBoxLayout.sizeHint": (), + "QBoxLayout.spacing": (), + "QBoxLayout.stretch": ('int',), + "QBoxLayout.takeAt": ('int',), + + # class PySide2.QtWidgets.QButtonGroup: + "QButtonGroup.__init__": ('PySide2.QtCore.QObject',), + "QButtonGroup.addButton": ('PySide2.QtWidgets.QAbstractButton', 'int'), + "QButtonGroup.button": ('int',), + "QButtonGroup.buttons": (), + "QButtonGroup.checkedButton": (), + "QButtonGroup.checkedId": (), + "QButtonGroup.exclusive": (), + "QButtonGroup.id": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QButtonGroup.setExclusive": ('bool',), + "QButtonGroup.setId": ('PySide2.QtWidgets.QAbstractButton', 'int'), + + # class PySide2.QtWidgets.QCalendarWidget: + "QCalendarWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QCalendarWidget.dateEditAcceptDelay": (), + "QCalendarWidget.dateTextFormat": [(), ('PySide2.QtCore.QDate',)], + "QCalendarWidget.event": ('PySide2.QtCore.QEvent',), + "QCalendarWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCalendarWidget.firstDayOfWeek": (), + "QCalendarWidget.headerTextFormat": (), + "QCalendarWidget.horizontalHeaderFormat": (), + "QCalendarWidget.isDateEditEnabled": (), + "QCalendarWidget.isGridVisible": (), + "QCalendarWidget.isNavigationBarVisible": (), + "QCalendarWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QCalendarWidget.maximumDate": (), + "QCalendarWidget.minimumDate": (), + "QCalendarWidget.minimumSizeHint": (), + "QCalendarWidget.monthShown": (), + "QCalendarWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QCalendarWidget.paintCell": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QDate'), + "QCalendarWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QCalendarWidget.selectedDate": (), + "QCalendarWidget.selectionMode": (), + "QCalendarWidget.setCurrentPage": ('int', 'int'), + "QCalendarWidget.setDateEditAcceptDelay": ('int',), + "QCalendarWidget.setDateEditEnabled": ('bool',), + "QCalendarWidget.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QCalendarWidget.setDateTextFormat": ('PySide2.QtCore.QDate', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.setFirstDayOfWeek": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.setGridVisible": ('bool',), + "QCalendarWidget.setHeaderTextFormat": ('PySide2.QtGui.QTextCharFormat',), + "QCalendarWidget.setHorizontalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.HorizontalHeaderFormat',), + "QCalendarWidget.setMaximumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setMinimumDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setNavigationBarVisible": ('bool',), + "QCalendarWidget.setSelectedDate": ('PySide2.QtCore.QDate',), + "QCalendarWidget.setSelectionMode": ('PySide2.QtWidgets.QCalendarWidget.SelectionMode',), + "QCalendarWidget.setVerticalHeaderFormat": ('PySide2.QtWidgets.QCalendarWidget.VerticalHeaderFormat',), + "QCalendarWidget.setWeekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek', 'PySide2.QtGui.QTextCharFormat'), + "QCalendarWidget.showNextMonth": (), + "QCalendarWidget.showNextYear": (), + "QCalendarWidget.showPreviousMonth": (), + "QCalendarWidget.showPreviousYear": (), + "QCalendarWidget.showSelectedDate": (), + "QCalendarWidget.showToday": (), + "QCalendarWidget.sizeHint": (), + "QCalendarWidget.updateCell": ('PySide2.QtCore.QDate',), + "QCalendarWidget.updateCells": (), + "QCalendarWidget.verticalHeaderFormat": (), + "QCalendarWidget.weekdayTextFormat": ('PySide2.QtCore.Qt.DayOfWeek',), + "QCalendarWidget.yearShown": (), + + # class PySide2.QtWidgets.QCheckBox: + "QCheckBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QCheckBox.checkState": (), + "QCheckBox.checkStateSet": (), + "QCheckBox.event": ('PySide2.QtCore.QEvent',), + "QCheckBox.hitButton": ('PySide2.QtCore.QPoint',), + "QCheckBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QCheckBox.isTristate": (), + "QCheckBox.minimumSizeHint": (), + "QCheckBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QCheckBox.nextCheckState": (), + "QCheckBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCheckBox.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QCheckBox.setTristate": ('bool',), + "QCheckBox.sizeHint": (), + + # class PySide2.QtWidgets.QColorDialog: + "QColorDialog.__init__": [('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QColorDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QColorDialog.currentColor": (), + "QColorDialog.customColor": ('int',), + "QColorDialog.customCount": (), + "QColorDialog.done": ('int',), + "QColorDialog.getColor": ('PySide2.QtGui.QColor', 'PySide2.QtWidgets.QWidget', 'str', 'ColorDialogOptions'), + "QColorDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QColorDialog.options": (), + "QColorDialog.selectedColor": (), + "QColorDialog.setCurrentColor": ('PySide2.QtGui.QColor',), + "QColorDialog.setCustomColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption', 'bool'), + "QColorDialog.setOptions": ('ColorDialogOptions',), + "QColorDialog.setStandardColor": ('int', 'PySide2.QtGui.QColor'), + "QColorDialog.setVisible": ('bool',), + "QColorDialog.standardColor": ('int',), + "QColorDialog.testOption": ('PySide2.QtWidgets.QColorDialog.ColorDialogOption',), + + # class PySide2.QtWidgets.QColormap: + "QColormap.__init__": ('PySide2.QtWidgets.QColormap',), + "QColormap.__copy__": (), + "QColormap.cleanup": (), + "QColormap.colorAt": ('int',), + "QColormap.colormap": (), + "QColormap.depth": (), + "QColormap.initialize": (), + "QColormap.instance": ('int',), + "QColormap.mode": (), + "QColormap.pixel": ('PySide2.QtGui.QColor',), + "QColormap.size": (), + + # class PySide2.QtWidgets.QColumnView: + "QColumnView.__init__": ('PySide2.QtWidgets.QWidget',), + "QColumnView.columnWidths": (), + "QColumnView.createColumn": ('PySide2.QtCore.QModelIndex',), + "QColumnView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QColumnView.horizontalOffset": (), + "QColumnView.indexAt": ('PySide2.QtCore.QPoint',), + "QColumnView.initializeColumn": ('PySide2.QtWidgets.QAbstractItemView',), + "QColumnView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QColumnView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QColumnView.previewWidget": (), + "QColumnView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QColumnView.resizeGripsVisible": (), + "QColumnView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QColumnView.scrollContentsBy": ('int', 'int'), + "QColumnView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QColumnView.selectAll": (), + "QColumnView.setColumnWidths": ('list',), + "QColumnView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QColumnView.setPreviewWidget": ('PySide2.QtWidgets.QWidget',), + "QColumnView.setResizeGripsVisible": ('bool',), + "QColumnView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QColumnView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QColumnView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QColumnView.sizeHint": (), + "QColumnView.verticalOffset": (), + "QColumnView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QColumnView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QComboBox: + "QComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QComboBox.addItem": [('PySide2.QtGui.QIcon', 'str', 'Any'), ('str', 'Any')], + "QComboBox.addItems": ('List[str]',), + "QComboBox.autoCompletion": (), + "QComboBox.autoCompletionCaseSensitivity": (), + "QComboBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QComboBox.clear": (), + "QComboBox.clearEditText": (), + "QComboBox.completer": (), + "QComboBox.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QComboBox.count": (), + "QComboBox.currentData": ('int',), + "QComboBox.currentIndex": (), + "QComboBox.currentText": (), + "QComboBox.duplicatesEnabled": (), + "QComboBox.event": ('PySide2.QtCore.QEvent',), + "QComboBox.findData": ('Any', 'int', 'MatchFlags'), + "QComboBox.findText": ('str', 'MatchFlags'), + "QComboBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QComboBox.hasFrame": (), + "QComboBox.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QComboBox.hidePopup": (), + "QComboBox.iconSize": (), + "QComboBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionComboBox',), + "QComboBox.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QComboBox.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QComboBox.insertItem": [('int', 'PySide2.QtGui.QIcon', 'str', 'Any'), ('int', 'str', 'Any')], + "QComboBox.insertItems": ('int', 'List[str]'), + "QComboBox.insertPolicy": (), + "QComboBox.insertSeparator": ('int',), + "QComboBox.isEditable": (), + "QComboBox.itemData": ('int', 'int'), + "QComboBox.itemDelegate": (), + "QComboBox.itemIcon": ('int',), + "QComboBox.itemText": ('int',), + "QComboBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QComboBox.lineEdit": (), + "QComboBox.maxCount": (), + "QComboBox.maxVisibleItems": (), + "QComboBox.minimumContentsLength": (), + "QComboBox.minimumSizeHint": (), + "QComboBox.model": (), + "QComboBox.modelColumn": (), + "QComboBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QComboBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QComboBox.removeItem": ('int',), + "QComboBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QComboBox.rootModelIndex": (), + "QComboBox.setAutoCompletion": ('bool',), + "QComboBox.setAutoCompletionCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QComboBox.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QComboBox.setCurrentIndex": ('int',), + "QComboBox.setCurrentText": ('str',), + "QComboBox.setDuplicatesEnabled": ('bool',), + "QComboBox.setEditText": ('str',), + "QComboBox.setEditable": ('bool',), + "QComboBox.setFrame": ('bool',), + "QComboBox.setIconSize": ('PySide2.QtCore.QSize',), + "QComboBox.setInsertPolicy": ('PySide2.QtWidgets.QComboBox.InsertPolicy',), + "QComboBox.setItemData": ('int', 'Any', 'int'), + "QComboBox.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QComboBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QComboBox.setItemText": ('int', 'str'), + "QComboBox.setLineEdit": ('PySide2.QtWidgets.QLineEdit',), + "QComboBox.setMaxCount": ('int',), + "QComboBox.setMaxVisibleItems": ('int',), + "QComboBox.setMinimumContentsLength": ('int',), + "QComboBox.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QComboBox.setModelColumn": ('int',), + "QComboBox.setRootModelIndex": ('PySide2.QtCore.QModelIndex',), + "QComboBox.setSizeAdjustPolicy": ('PySide2.QtWidgets.QComboBox.SizeAdjustPolicy',), + "QComboBox.setValidator": ('PySide2.QtGui.QValidator',), + "QComboBox.setView": ('PySide2.QtWidgets.QAbstractItemView',), + "QComboBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QComboBox.showPopup": (), + "QComboBox.sizeAdjustPolicy": (), + "QComboBox.sizeHint": (), + "QComboBox.validator": (), + "QComboBox.view": (), + "QComboBox.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QCommandLinkButton: + "QCommandLinkButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget'), ('str', 'str', 'PySide2.QtWidgets.QWidget')], + "QCommandLinkButton.description": (), + "QCommandLinkButton.event": ('PySide2.QtCore.QEvent',), + "QCommandLinkButton.heightForWidth": ('int',), + "QCommandLinkButton.minimumSizeHint": (), + "QCommandLinkButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QCommandLinkButton.setDescription": ('str',), + "QCommandLinkButton.sizeHint": (), + + # class PySide2.QtWidgets.QCommonStyle: + "QCommonStyle.__init__": (), + "QCommonStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QCommonStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QCommonStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QCommonStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QCommonStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QCompleter: + "QCompleter.__init__": [('List[str]', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QCompleter.caseSensitivity": (), + "QCompleter.complete": ('PySide2.QtCore.QRect',), + "QCompleter.completionColumn": (), + "QCompleter.completionCount": (), + "QCompleter.completionMode": (), + "QCompleter.completionModel": (), + "QCompleter.completionPrefix": (), + "QCompleter.completionRole": (), + "QCompleter.currentCompletion": (), + "QCompleter.currentIndex": (), + "QCompleter.currentRow": (), + "QCompleter.event": ('PySide2.QtCore.QEvent',), + "QCompleter.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QCompleter.filterMode": (), + "QCompleter.maxVisibleItems": (), + "QCompleter.model": (), + "QCompleter.modelSorting": (), + "QCompleter.pathFromIndex": ('PySide2.QtCore.QModelIndex',), + "QCompleter.popup": (), + "QCompleter.setCaseSensitivity": ('PySide2.QtCore.Qt.CaseSensitivity',), + "QCompleter.setCompletionColumn": ('int',), + "QCompleter.setCompletionMode": ('PySide2.QtWidgets.QCompleter.CompletionMode',), + "QCompleter.setCompletionPrefix": ('str',), + "QCompleter.setCompletionRole": ('int',), + "QCompleter.setCurrentRow": ('int',), + "QCompleter.setFilterMode": ('MatchFlags',), + "QCompleter.setMaxVisibleItems": ('int',), + "QCompleter.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QCompleter.setModelSorting": ('PySide2.QtWidgets.QCompleter.ModelSorting',), + "QCompleter.setPopup": ('PySide2.QtWidgets.QAbstractItemView',), + "QCompleter.setWidget": ('PySide2.QtWidgets.QWidget',), + "QCompleter.setWrapAround": ('bool',), + "QCompleter.splitPath": ('str',), + "QCompleter.widget": (), + "QCompleter.wrapAround": (), + + # class PySide2.QtWidgets.QDataWidgetMapper: + "QDataWidgetMapper.__init__": ('PySide2.QtCore.QObject',), + "QDataWidgetMapper.addMapping": [('PySide2.QtWidgets.QWidget', 'int'), ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtCore.QByteArray')], + "QDataWidgetMapper.clearMapping": (), + "QDataWidgetMapper.currentIndex": (), + "QDataWidgetMapper.itemDelegate": (), + "QDataWidgetMapper.mappedPropertyName": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedSection": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.mappedWidgetAt": ('int',), + "QDataWidgetMapper.model": (), + "QDataWidgetMapper.orientation": (), + "QDataWidgetMapper.removeMapping": ('PySide2.QtWidgets.QWidget',), + "QDataWidgetMapper.revert": (), + "QDataWidgetMapper.rootIndex": (), + "QDataWidgetMapper.setCurrentIndex": ('int',), + "QDataWidgetMapper.setCurrentModelIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QDataWidgetMapper.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QDataWidgetMapper.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDataWidgetMapper.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QDataWidgetMapper.setSubmitPolicy": ('PySide2.QtWidgets.QDataWidgetMapper.SubmitPolicy',), + "QDataWidgetMapper.submit": (), + "QDataWidgetMapper.submitPolicy": (), + "QDataWidgetMapper.toFirst": (), + "QDataWidgetMapper.toLast": (), + "QDataWidgetMapper.toNext": (), + "QDataWidgetMapper.toPrevious": (), + + # class PySide2.QtWidgets.QDateEdit: + "QDateEdit.__init__": [('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDateTimeEdit: + "QDateTimeEdit.__init__": [('Any', 'type', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDate', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QDateTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QDateTimeEdit.calendarPopup": (), + "QDateTimeEdit.calendarWidget": (), + "QDateTimeEdit.clear": (), + "QDateTimeEdit.clearMaximumDate": (), + "QDateTimeEdit.clearMaximumDateTime": (), + "QDateTimeEdit.clearMaximumTime": (), + "QDateTimeEdit.clearMinimumDate": (), + "QDateTimeEdit.clearMinimumDateTime": (), + "QDateTimeEdit.clearMinimumTime": (), + "QDateTimeEdit.currentSection": (), + "QDateTimeEdit.currentSectionIndex": (), + "QDateTimeEdit.date": (), + "QDateTimeEdit.dateTime": (), + "QDateTimeEdit.dateTimeFromText": ('str',), + "QDateTimeEdit.displayFormat": (), + "QDateTimeEdit.displayedSections": (), + "QDateTimeEdit.event": ('PySide2.QtCore.QEvent',), + "QDateTimeEdit.fixup": ('str',), + "QDateTimeEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QDateTimeEdit.focusNextPrevChild": ('bool',), + "QDateTimeEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSpinBox',), + "QDateTimeEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDateTimeEdit.maximumDate": (), + "QDateTimeEdit.maximumDateTime": (), + "QDateTimeEdit.maximumTime": (), + "QDateTimeEdit.minimumDate": (), + "QDateTimeEdit.minimumDateTime": (), + "QDateTimeEdit.minimumTime": (), + "QDateTimeEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDateTimeEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDateTimeEdit.sectionAt": ('int',), + "QDateTimeEdit.sectionCount": (), + "QDateTimeEdit.sectionText": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCalendarPopup": ('bool',), + "QDateTimeEdit.setCalendarWidget": ('PySide2.QtWidgets.QCalendarWidget',), + "QDateTimeEdit.setCurrentSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setCurrentSectionIndex": ('int',), + "QDateTimeEdit.setDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setDateRange": ('PySide2.QtCore.QDate', 'PySide2.QtCore.QDate'), + "QDateTimeEdit.setDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setDateTimeRange": ('PySide2.QtCore.QDateTime', 'PySide2.QtCore.QDateTime'), + "QDateTimeEdit.setDisplayFormat": ('str',), + "QDateTimeEdit.setMaximumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMaximumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMaximumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setMinimumDate": ('PySide2.QtCore.QDate',), + "QDateTimeEdit.setMinimumDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.setMinimumTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setSelectedSection": ('PySide2.QtWidgets.QDateTimeEdit.Section',), + "QDateTimeEdit.setTime": ('PySide2.QtCore.QTime',), + "QDateTimeEdit.setTimeRange": ('PySide2.QtCore.QTime', 'PySide2.QtCore.QTime'), + "QDateTimeEdit.setTimeSpec": ('PySide2.QtCore.Qt.TimeSpec',), + "QDateTimeEdit.sizeHint": (), + "QDateTimeEdit.stepBy": ('int',), + "QDateTimeEdit.stepEnabled": (), + "QDateTimeEdit.textFromDateTime": ('PySide2.QtCore.QDateTime',), + "QDateTimeEdit.time": (), + "QDateTimeEdit.timeSpec": (), + "QDateTimeEdit.validate": ('str', 'int'), + "QDateTimeEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QDesktopWidget: + "QDesktopWidget.__init__": (), + "QDesktopWidget.availableGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.isVirtualDesktop": (), + "QDesktopWidget.numScreens": (), + "QDesktopWidget.primaryScreen": (), + "QDesktopWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDesktopWidget.screen": ('int',), + "QDesktopWidget.screenCount": (), + "QDesktopWidget.screenGeometry": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QDesktopWidget.screenNumber": [('PySide2.QtCore.QPoint',), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QDial: + "QDial.__init__": ('PySide2.QtWidgets.QWidget',), + "QDial.event": ('PySide2.QtCore.QEvent',), + "QDial.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QDial.minimumSizeHint": (), + "QDial.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QDial.notchSize": (), + "QDial.notchTarget": (), + "QDial.notchesVisible": (), + "QDial.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDial.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDial.setNotchTarget": ('float',), + "QDial.setNotchesVisible": ('bool',), + "QDial.setWrapping": ('bool',), + "QDial.sizeHint": (), + "QDial.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QDial.wrapping": (), + + # class PySide2.QtWidgets.QDialog: + "QDialog.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QDialog.accept": (), + "QDialog.adjustPosition": ('PySide2.QtWidgets.QWidget',), + "QDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDialog.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QDialog.done": ('int',), + "QDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QDialog.exec_": (), + "QDialog.extension": (), + "QDialog.isSizeGripEnabled": (), + "QDialog.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QDialog.minimumSizeHint": (), + "QDialog.open": (), + "QDialog.orientation": (), + "QDialog.reject": (), + "QDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QDialog.result": (), + "QDialog.setExtension": ('PySide2.QtWidgets.QWidget',), + "QDialog.setModal": ('bool',), + "QDialog.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialog.setResult": ('int',), + "QDialog.setSizeGripEnabled": ('bool',), + "QDialog.setVisible": ('bool',), + "QDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QDialog.showExtension": ('bool',), + "QDialog.sizeHint": (), + + # class PySide2.QtWidgets.QDialogButtonBox: + "QDialogButtonBox.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('StandardButtons', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('StandardButtons', 'PySide2.QtWidgets.QWidget')], + "QDialogButtonBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole'), ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), ('str', 'PySide2.QtWidgets.QDialogButtonBox.ButtonRole')], + "QDialogButtonBox.button": ('PySide2.QtWidgets.QDialogButtonBox.StandardButton',), + "QDialogButtonBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.buttons": (), + "QDialogButtonBox.centerButtons": (), + "QDialogButtonBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.clear": (), + "QDialogButtonBox.event": ('PySide2.QtCore.QEvent',), + "QDialogButtonBox.orientation": (), + "QDialogButtonBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.setCenterButtons": ('bool',), + "QDialogButtonBox.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QDialogButtonBox.setStandardButtons": ('StandardButtons',), + "QDialogButtonBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QDialogButtonBox.standardButtons": (), + + # class PySide2.QtWidgets.QDirModel: + "QDirModel.__init__": [('List[str]', 'Filters', 'SortFlags', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',)], + "QDirModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QDirModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QDirModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QDirModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QDirModel.filter": (), + "QDirModel.flags": ('PySide2.QtCore.QModelIndex',), + "QDirModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QDirModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QDirModel.iconProvider": (), + "QDirModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QDirModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.isReadOnly": (), + "QDirModel.lazyChildCount": (), + "QDirModel.mimeData": ('List[int]',), + "QDirModel.mimeTypes": (), + "QDirModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QDirModel.nameFilters": (), + "QDirModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QDirModel.refresh": ('PySide2.QtCore.QModelIndex',), + "QDirModel.remove": ('PySide2.QtCore.QModelIndex',), + "QDirModel.resolveSymlinks": (), + "QDirModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QDirModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QDirModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QDirModel.setFilter": ('Filters',), + "QDirModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QDirModel.setLazyChildCount": ('bool',), + "QDirModel.setNameFilters": ('List[str]',), + "QDirModel.setReadOnly": ('bool',), + "QDirModel.setResolveSymlinks": ('bool',), + "QDirModel.setSorting": ('SortFlags',), + "QDirModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QDirModel.sorting": (), + "QDirModel.supportedDropActions": (), + + # class PySide2.QtWidgets.QDockWidget: + "QDockWidget.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QDockWidget.allowedAreas": (), + "QDockWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QDockWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QDockWidget.event": ('PySide2.QtCore.QEvent',), + "QDockWidget.features": (), + "QDockWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionDockWidget',), + "QDockWidget.isAreaAllowed": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QDockWidget.isFloating": (), + "QDockWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QDockWidget.setAllowedAreas": ('DockWidgetAreas',), + "QDockWidget.setFeatures": ('DockWidgetFeatures',), + "QDockWidget.setFloating": ('bool',), + "QDockWidget.setTitleBarWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QDockWidget.titleBarWidget": (), + "QDockWidget.toggleViewAction": (), + "QDockWidget.widget": (), + + # class PySide2.QtWidgets.QDoubleSpinBox: + "QDoubleSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QDoubleSpinBox.cleanText": (), + "QDoubleSpinBox.decimals": (), + "QDoubleSpinBox.fixup": ('str',), + "QDoubleSpinBox.maximum": (), + "QDoubleSpinBox.minimum": (), + "QDoubleSpinBox.prefix": (), + "QDoubleSpinBox.setDecimals": ('int',), + "QDoubleSpinBox.setMaximum": ('float',), + "QDoubleSpinBox.setMinimum": ('float',), + "QDoubleSpinBox.setPrefix": ('str',), + "QDoubleSpinBox.setRange": ('float', 'float'), + "QDoubleSpinBox.setSingleStep": ('float',), + "QDoubleSpinBox.setSuffix": ('str',), + "QDoubleSpinBox.setValue": ('float',), + "QDoubleSpinBox.singleStep": (), + "QDoubleSpinBox.suffix": (), + "QDoubleSpinBox.textFromValue": ('float',), + "QDoubleSpinBox.validate": ('str', 'int'), + "QDoubleSpinBox.value": (), + "QDoubleSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QErrorMessage: + "QErrorMessage.__init__": ('PySide2.QtWidgets.QWidget',), + "QErrorMessage.changeEvent": ('PySide2.QtCore.QEvent',), + "QErrorMessage.done": ('int',), + "QErrorMessage.qtHandler": (), + "QErrorMessage.showMessage": [('str',), ('str', 'str')], + + # class PySide2.QtWidgets.QFileDialog: + "QFileDialog.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str')], + "QFileDialog.accept": (), + "QFileDialog.acceptMode": (), + "QFileDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFileDialog.confirmOverwrite": (), + "QFileDialog.defaultSuffix": (), + "QFileDialog.directory": (), + "QFileDialog.directoryUrl": (), + "QFileDialog.done": ('int',), + "QFileDialog.fileMode": (), + "QFileDialog.filter": (), + "QFileDialog.getExistingDirectory": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'Options'), + "QFileDialog.getExistingDirectoryUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'Options', 'List[str]'), + "QFileDialog.getOpenFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getOpenFileNames": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getOpenFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'List[str]'), + "QFileDialog.getOpenFileUrls": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'List[str]'), + "QFileDialog.getSaveFileName": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'str', 'Options'), + "QFileDialog.getSaveFileUrl": ('PySide2.QtWidgets.QWidget', 'str', 'PySide2.QtCore.QUrl', 'str', 'str', 'Options', 'List[str]'), + "QFileDialog.history": (), + "QFileDialog.iconProvider": (), + "QFileDialog.isNameFilterDetailsVisible": (), + "QFileDialog.isReadOnly": (), + "QFileDialog.itemDelegate": (), + "QFileDialog.labelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel',), + "QFileDialog.mimeTypeFilters": (), + "QFileDialog.nameFilters": (), + "QFileDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFileDialog.options": (), + "QFileDialog.proxyModel": (), + "QFileDialog.resolveSymlinks": (), + "QFileDialog.restoreState": ('PySide2.QtCore.QByteArray',), + "QFileDialog.saveState": (), + "QFileDialog.selectFile": ('str',), + "QFileDialog.selectMimeTypeFilter": ('str',), + "QFileDialog.selectNameFilter": ('str',), + "QFileDialog.selectUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.selectedFiles": (), + "QFileDialog.selectedMimeTypeFilter": (), + "QFileDialog.selectedNameFilter": (), + "QFileDialog.selectedUrls": (), + "QFileDialog.setAcceptMode": ('PySide2.QtWidgets.QFileDialog.AcceptMode',), + "QFileDialog.setConfirmOverwrite": ('bool',), + "QFileDialog.setDefaultSuffix": ('str',), + "QFileDialog.setDirectory": [('PySide2.QtCore.QDir',), ('str',)], + "QFileDialog.setDirectoryUrl": ('PySide2.QtCore.QUrl',), + "QFileDialog.setFileMode": ('PySide2.QtWidgets.QFileDialog.FileMode',), + "QFileDialog.setFilter": ('Filters',), + "QFileDialog.setHistory": ('List[str]',), + "QFileDialog.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileDialog.setItemDelegate": ('PySide2.QtWidgets.QAbstractItemDelegate',), + "QFileDialog.setLabelText": ('PySide2.QtWidgets.QFileDialog.DialogLabel', 'str'), + "QFileDialog.setMimeTypeFilters": ('List[str]',), + "QFileDialog.setNameFilter": ('str',), + "QFileDialog.setNameFilterDetailsVisible": ('bool',), + "QFileDialog.setNameFilters": ('List[str]',), + "QFileDialog.setOption": ('PySide2.QtWidgets.QFileDialog.Option', 'bool'), + "QFileDialog.setOptions": ('Options',), + "QFileDialog.setProxyModel": ('PySide2.QtCore.QAbstractProxyModel',), + "QFileDialog.setReadOnly": ('bool',), + "QFileDialog.setResolveSymlinks": ('bool',), + "QFileDialog.setSidebarUrls": ('list',), + "QFileDialog.setSupportedSchemes": ('List[str]',), + "QFileDialog.setViewMode": ('PySide2.QtWidgets.QFileDialog.ViewMode',), + "QFileDialog.setVisible": ('bool',), + "QFileDialog.sidebarUrls": (), + "QFileDialog.supportedSchemes": (), + "QFileDialog.testOption": ('PySide2.QtWidgets.QFileDialog.Option',), + "QFileDialog.viewMode": (), + + # class PySide2.QtWidgets.QFileIconProvider: + "QFileIconProvider.__init__": (), + "QFileIconProvider.icon": [('PySide2.QtCore.QFileInfo',), ('PySide2.QtWidgets.QFileIconProvider.IconType',)], + "QFileIconProvider.options": (), + "QFileIconProvider.setOptions": ('Options',), + "QFileIconProvider.type": ('PySide2.QtCore.QFileInfo',), + + # class PySide2.QtWidgets.QFileSystemModel: + "QFileSystemModel.__init__": ('PySide2.QtCore.QObject',), + "QFileSystemModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QFileSystemModel.dropMimeData": ('PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction', 'int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.event": ('PySide2.QtCore.QEvent',), + "QFileSystemModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileIcon": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileInfo": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.fileName": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filePath": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.filter": (), + "QFileSystemModel.flags": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.hasChildren": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QFileSystemModel.iconProvider": (), + "QFileSystemModel.index": [('int', 'int', 'PySide2.QtCore.QModelIndex'), ('str', 'int')], + "QFileSystemModel.isDir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.isReadOnly": (), + "QFileSystemModel.lastModified": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.mimeData": ('List[int]',), + "QFileSystemModel.mimeTypes": (), + "QFileSystemModel.mkdir": ('PySide2.QtCore.QModelIndex', 'str'), + "QFileSystemModel.myComputer": ('int',), + "QFileSystemModel.nameFilterDisables": (), + "QFileSystemModel.nameFilters": (), + "QFileSystemModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QFileSystemModel.remove": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.resolveSymlinks": (), + "QFileSystemModel.rmdir": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.rootDirectory": (), + "QFileSystemModel.rootPath": (), + "QFileSystemModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QFileSystemModel.setFilter": ('Filters',), + "QFileSystemModel.setIconProvider": ('PySide2.QtWidgets.QFileIconProvider',), + "QFileSystemModel.setNameFilterDisables": ('bool',), + "QFileSystemModel.setNameFilters": ('List[str]',), + "QFileSystemModel.setReadOnly": ('bool',), + "QFileSystemModel.setResolveSymlinks": ('bool',), + "QFileSystemModel.setRootPath": ('str',), + "QFileSystemModel.sibling": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QFileSystemModel.size": ('PySide2.QtCore.QModelIndex',), + "QFileSystemModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QFileSystemModel.supportedDropActions": (), + "QFileSystemModel.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QFileSystemModel.type": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtWidgets.QFocusFrame: + "QFocusFrame.__init__": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.event": ('PySide2.QtCore.QEvent',), + "QFocusFrame.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFocusFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QFocusFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFocusFrame.setWidget": ('PySide2.QtWidgets.QWidget',), + "QFocusFrame.widget": (), + + # class PySide2.QtWidgets.QFontComboBox: + "QFontComboBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QFontComboBox.currentFont": (), + "QFontComboBox.event": ('PySide2.QtCore.QEvent',), + "QFontComboBox.fontFilters": (), + "QFontComboBox.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontComboBox.setFontFilters": ('FontFilters',), + "QFontComboBox.setWritingSystem": ('PySide2.QtGui.QFontDatabase.WritingSystem',), + "QFontComboBox.sizeHint": (), + "QFontComboBox.writingSystem": (), + + # class PySide2.QtWidgets.QFontDialog: + "QFontDialog.__init__": [('PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QFontDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QFontDialog.currentFont": (), + "QFontDialog.done": ('int',), + "QFontDialog.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QFontDialog.getFont": [('bool', 'PySide2.QtGui.QFont', 'PySide2.QtWidgets.QWidget', 'str', 'FontDialogOptions'), ('bool', 'PySide2.QtWidgets.QWidget')], + "QFontDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QFontDialog.options": (), + "QFontDialog.selectedFont": (), + "QFontDialog.setCurrentFont": ('PySide2.QtGui.QFont',), + "QFontDialog.setOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption', 'bool'), + "QFontDialog.setOptions": ('FontDialogOptions',), + "QFontDialog.setVisible": ('bool',), + "QFontDialog.testOption": ('PySide2.QtWidgets.QFontDialog.FontDialogOption',), + + # class PySide2.QtWidgets.QFormLayout: + "QFormLayout.__init__": ('PySide2.QtWidgets.QWidget',), + "QFormLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QFormLayout.addRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QLayout'), ('str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.count": (), + "QFormLayout.expandingDirections": (), + "QFormLayout.fieldGrowthPolicy": (), + "QFormLayout.formAlignment": (), + "QFormLayout.getItemPosition": ('int', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getLayoutPosition": ('PySide2.QtWidgets.QLayout', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.getWidgetPosition": ('PySide2.QtWidgets.QWidget', 'int', 'PySide2.QtWidgets.QFormLayout.ItemRole'), + "QFormLayout.hasHeightForWidth": (), + "QFormLayout.heightForWidth": ('int',), + "QFormLayout.horizontalSpacing": (), + "QFormLayout.insertRow": [('int', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QLayout'), ('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), ('int', 'str', 'PySide2.QtWidgets.QLayout'), ('int', 'str', 'PySide2.QtWidgets.QWidget')], + "QFormLayout.invalidate": (), + "QFormLayout.itemAt": [('int',), ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole')], + "QFormLayout.labelAlignment": (), + "QFormLayout.labelForField": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QFormLayout.minimumSize": (), + "QFormLayout.removeRow": [('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',), ('int',)], + "QFormLayout.rowCount": (), + "QFormLayout.rowWrapPolicy": (), + "QFormLayout.setFieldGrowthPolicy": ('PySide2.QtWidgets.QFormLayout.FieldGrowthPolicy',), + "QFormLayout.setFormAlignment": ('Alignment',), + "QFormLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QFormLayout.setHorizontalSpacing": ('int',), + "QFormLayout.setItem": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayoutItem'), + "QFormLayout.setLabelAlignment": ('Alignment',), + "QFormLayout.setLayout": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QLayout'), + "QFormLayout.setRowWrapPolicy": ('PySide2.QtWidgets.QFormLayout.RowWrapPolicy',), + "QFormLayout.setSpacing": ('int',), + "QFormLayout.setVerticalSpacing": ('int',), + "QFormLayout.setWidget": ('int', 'PySide2.QtWidgets.QFormLayout.ItemRole', 'PySide2.QtWidgets.QWidget'), + "QFormLayout.sizeHint": (), + "QFormLayout.spacing": (), + "QFormLayout.takeAt": ('int',), + "QFormLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QFrame: + "QFrame.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QFrame.changeEvent": ('PySide2.QtCore.QEvent',), + "QFrame.drawFrame": ('PySide2.QtGui.QPainter',), + "QFrame.event": ('PySide2.QtCore.QEvent',), + "QFrame.frameRect": (), + "QFrame.frameShadow": (), + "QFrame.frameShape": (), + "QFrame.frameStyle": (), + "QFrame.frameWidth": (), + "QFrame.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QFrame.lineWidth": (), + "QFrame.midLineWidth": (), + "QFrame.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QFrame.setFrameRect": ('PySide2.QtCore.QRect',), + "QFrame.setFrameShadow": ('PySide2.QtWidgets.QFrame.Shadow',), + "QFrame.setFrameShape": ('PySide2.QtWidgets.QFrame.Shape',), + "QFrame.setFrameStyle": ('int',), + "QFrame.setLineWidth": ('int',), + "QFrame.setMidLineWidth": ('int',), + "QFrame.sizeHint": (), + + # class PySide2.QtWidgets.QGesture: + "QGesture.__init__": ('PySide2.QtCore.QObject',), + "QGesture.gestureCancelPolicy": (), + "QGesture.gestureType": (), + "QGesture.hasHotSpot": (), + "QGesture.hotSpot": (), + "QGesture.setGestureCancelPolicy": ('PySide2.QtWidgets.QGesture.GestureCancelPolicy',), + "QGesture.setHotSpot": ('PySide2.QtCore.QPointF',), + "QGesture.state": (), + "QGesture.unsetHotSpot": (), + + # class PySide2.QtWidgets.QGestureEvent: + "QGestureEvent.__init__": ('list',), + "QGestureEvent.accept": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.activeGestures": (), + "QGestureEvent.canceledGestures": (), + "QGestureEvent.gesture": ('PySide2.QtCore.Qt.GestureType',), + "QGestureEvent.gestures": (), + "QGestureEvent.ignore": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.isAccepted": [(), ('PySide2.QtCore.Qt.GestureType',), ('PySide2.QtWidgets.QGesture',)], + "QGestureEvent.mapToGraphicsScene": ('PySide2.QtCore.QPointF',), + "QGestureEvent.setAccepted": [('PySide2.QtCore.Qt.GestureType', 'bool'), ('PySide2.QtWidgets.QGesture', 'bool'), ('bool',)], + "QGestureEvent.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGestureEvent.widget": (), + + # class PySide2.QtWidgets.QGestureRecognizer: + "QGestureRecognizer.__init__": (), + "QGestureRecognizer.create": ('PySide2.QtCore.QObject',), + "QGestureRecognizer.recognize": ('PySide2.QtWidgets.QGesture', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGestureRecognizer.registerRecognizer": ('PySide2.QtWidgets.QGestureRecognizer',), + "QGestureRecognizer.reset": ('PySide2.QtWidgets.QGesture',), + "QGestureRecognizer.unregisterRecognizer": ('PySide2.QtCore.Qt.GestureType',), + + # class PySide2.QtWidgets.QGraphicsAnchor: + "QGraphicsAnchor.setSizePolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QGraphicsAnchor.setSpacing": ('float',), + "QGraphicsAnchor.sizePolicy": (), + "QGraphicsAnchor.spacing": (), + "QGraphicsAnchor.unsetSpacing": (), + + # class PySide2.QtWidgets.QGraphicsAnchorLayout: + "QGraphicsAnchorLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsAnchorLayout.addAnchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.addAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'Orientations'), + "QGraphicsAnchorLayout.addCornerAnchors": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.Corner'), + "QGraphicsAnchorLayout.anchor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint', 'PySide2.QtWidgets.QGraphicsLayoutItem', 'PySide2.QtCore.Qt.AnchorPoint'), + "QGraphicsAnchorLayout.count": (), + "QGraphicsAnchorLayout.horizontalSpacing": (), + "QGraphicsAnchorLayout.invalidate": (), + "QGraphicsAnchorLayout.itemAt": ('int',), + "QGraphicsAnchorLayout.removeAt": ('int',), + "QGraphicsAnchorLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsAnchorLayout.setHorizontalSpacing": ('float',), + "QGraphicsAnchorLayout.setSpacing": ('float',), + "QGraphicsAnchorLayout.setVerticalSpacing": ('float',), + "QGraphicsAnchorLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsAnchorLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsBlurEffect: + "QGraphicsBlurEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsBlurEffect.blurHints": (), + "QGraphicsBlurEffect.blurRadius": (), + "QGraphicsBlurEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsBlurEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsBlurEffect.setBlurHints": ('BlurHints',), + "QGraphicsBlurEffect.setBlurRadius": ('float',), + + # class PySide2.QtWidgets.QGraphicsColorizeEffect: + "QGraphicsColorizeEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsColorizeEffect.color": (), + "QGraphicsColorizeEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsColorizeEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsColorizeEffect.setStrength": ('float',), + "QGraphicsColorizeEffect.strength": (), + + # class PySide2.QtWidgets.QGraphicsDropShadowEffect: + "QGraphicsDropShadowEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsDropShadowEffect.blurRadius": (), + "QGraphicsDropShadowEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsDropShadowEffect.color": (), + "QGraphicsDropShadowEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsDropShadowEffect.offset": (), + "QGraphicsDropShadowEffect.setBlurRadius": ('float',), + "QGraphicsDropShadowEffect.setColor": ('PySide2.QtGui.QColor',), + "QGraphicsDropShadowEffect.setOffset": [('PySide2.QtCore.QPointF',), ('float',), ('float', 'float')], + "QGraphicsDropShadowEffect.setXOffset": ('float',), + "QGraphicsDropShadowEffect.setYOffset": ('float',), + "QGraphicsDropShadowEffect.xOffset": (), + "QGraphicsDropShadowEffect.yOffset": (), + + # class PySide2.QtWidgets.QGraphicsEffect: + "QGraphicsEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsEffect.boundingRect": (), + "QGraphicsEffect.boundingRectFor": ('PySide2.QtCore.QRectF',), + "QGraphicsEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.drawSource": ('PySide2.QtGui.QPainter',), + "QGraphicsEffect.isEnabled": (), + "QGraphicsEffect.setEnabled": ('bool',), + "QGraphicsEffect.sourceBoundingRect": ('PySide2.QtCore.Qt.CoordinateSystem',), + "QGraphicsEffect.sourceChanged": ('ChangeFlags',), + "QGraphicsEffect.sourceIsPixmap": (), + "QGraphicsEffect.sourcePixmap": ('PySide2.QtCore.Qt.CoordinateSystem', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QGraphicsEffect.PixmapPadMode'), + "QGraphicsEffect.update": (), + "QGraphicsEffect.updateBoundingRect": (), + + # class PySide2.QtWidgets.QGraphicsEllipseItem: + "QGraphicsEllipseItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsEllipseItem.boundingRect": (), + "QGraphicsEllipseItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsEllipseItem.extension": ('Any',), + "QGraphicsEllipseItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsEllipseItem.opaqueArea": (), + "QGraphicsEllipseItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsEllipseItem.rect": (), + "QGraphicsEllipseItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsEllipseItem.setSpanAngle": ('int',), + "QGraphicsEllipseItem.setStartAngle": ('int',), + "QGraphicsEllipseItem.shape": (), + "QGraphicsEllipseItem.spanAngle": (), + "QGraphicsEllipseItem.startAngle": (), + "QGraphicsEllipseItem.type": (), + + # class PySide2.QtWidgets.QGraphicsGridLayout: + "QGraphicsGridLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.addItem": [('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int', 'int', 'int', 'int', 'Alignment')], + "QGraphicsGridLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.columnAlignment": ('int',), + "QGraphicsGridLayout.columnCount": (), + "QGraphicsGridLayout.columnMaximumWidth": ('int',), + "QGraphicsGridLayout.columnMinimumWidth": ('int',), + "QGraphicsGridLayout.columnPreferredWidth": ('int',), + "QGraphicsGridLayout.columnSpacing": ('int',), + "QGraphicsGridLayout.columnStretchFactor": ('int',), + "QGraphicsGridLayout.count": (), + "QGraphicsGridLayout.horizontalSpacing": (), + "QGraphicsGridLayout.invalidate": (), + "QGraphicsGridLayout.itemAt": [('int',), ('int', 'int')], + "QGraphicsGridLayout.removeAt": ('int',), + "QGraphicsGridLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsGridLayout.rowAlignment": ('int',), + "QGraphicsGridLayout.rowCount": (), + "QGraphicsGridLayout.rowMaximumHeight": ('int',), + "QGraphicsGridLayout.rowMinimumHeight": ('int',), + "QGraphicsGridLayout.rowPreferredHeight": ('int',), + "QGraphicsGridLayout.rowSpacing": ('int',), + "QGraphicsGridLayout.rowStretchFactor": ('int',), + "QGraphicsGridLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'Alignment'), + "QGraphicsGridLayout.setColumnAlignment": ('int', 'Alignment'), + "QGraphicsGridLayout.setColumnFixedWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMaximumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnMinimumWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnPreferredWidth": ('int', 'float'), + "QGraphicsGridLayout.setColumnSpacing": ('int', 'float'), + "QGraphicsGridLayout.setColumnStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsGridLayout.setHorizontalSpacing": ('float',), + "QGraphicsGridLayout.setRowAlignment": ('int', 'Alignment'), + "QGraphicsGridLayout.setRowFixedHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMaximumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowMinimumHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowPreferredHeight": ('int', 'float'), + "QGraphicsGridLayout.setRowSpacing": ('int', 'float'), + "QGraphicsGridLayout.setRowStretchFactor": ('int', 'int'), + "QGraphicsGridLayout.setSpacing": ('float',), + "QGraphicsGridLayout.setVerticalSpacing": ('float',), + "QGraphicsGridLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGraphicsItem: + "QGraphicsItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.acceptDrops": (), + "QGraphicsItem.acceptHoverEvents": (), + "QGraphicsItem.acceptTouchEvents": (), + "QGraphicsItem.acceptedMouseButtons": (), + "QGraphicsItem.addToIndex": (), + "QGraphicsItem.advance": ('int',), + "QGraphicsItem.boundingRect": (), + "QGraphicsItem.boundingRegion": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.boundingRegionGranularity": (), + "QGraphicsItem.cacheMode": (), + "QGraphicsItem.childItems": (), + "QGraphicsItem.childrenBoundingRect": (), + "QGraphicsItem.clearFocus": (), + "QGraphicsItem.clipPath": (), + "QGraphicsItem.collidesWithItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidesWithPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsItem.collidingItems": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsItem.commonAncestorItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsItem.cursor": (), + "QGraphicsItem.data": ('int',), + "QGraphicsItem.deviceTransform": ('PySide2.QtGui.QTransform',), + "QGraphicsItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsItem.effectiveOpacity": (), + "QGraphicsItem.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsItem.extension": ('Any',), + "QGraphicsItem.filtersChildEvents": (), + "QGraphicsItem.flags": (), + "QGraphicsItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusItem": (), + "QGraphicsItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsItem.focusProxy": (), + "QGraphicsItem.focusScopeItem": (), + "QGraphicsItem.grabKeyboard": (), + "QGraphicsItem.grabMouse": (), + "QGraphicsItem.graphicsEffect": (), + "QGraphicsItem.group": (), + "QGraphicsItem.handlesChildEvents": (), + "QGraphicsItem.hasCursor": (), + "QGraphicsItem.hasFocus": (), + "QGraphicsItem.hide": (), + "QGraphicsItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsItem.inputMethodHints": (), + "QGraphicsItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsItem.installSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isActive": (), + "QGraphicsItem.isAncestorOf": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isBlockedByModalPanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isClipped": (), + "QGraphicsItem.isEnabled": (), + "QGraphicsItem.isObscured": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isPanel": (), + "QGraphicsItem.isSelected": (), + "QGraphicsItem.isUnderMouse": (), + "QGraphicsItem.isVisible": (), + "QGraphicsItem.isVisibleTo": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.isWidget": (), + "QGraphicsItem.isWindow": (), + "QGraphicsItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsItem.itemTransform": ('PySide2.QtWidgets.QGraphicsItem', 'bool'), + "QGraphicsItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsItem.mapFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectFromScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToParent": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapRectToScene": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToItem": [('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QPointF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QRectF'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPainterPath'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtGui.QPolygonF'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float'), ('PySide2.QtWidgets.QGraphicsItem', 'float', 'float', 'float', 'float')], + "QGraphicsItem.mapToParent": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.mapToScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsItem.matrix": (), + "QGraphicsItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsItem.moveBy": ('float', 'float'), + "QGraphicsItem.opacity": (), + "QGraphicsItem.opaqueArea": (), + "QGraphicsItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItem.panel": (), + "QGraphicsItem.panelModality": (), + "QGraphicsItem.parentItem": (), + "QGraphicsItem.parentObject": (), + "QGraphicsItem.parentWidget": (), + "QGraphicsItem.pos": (), + "QGraphicsItem.prepareGeometryChange": (), + "QGraphicsItem.removeFromIndex": (), + "QGraphicsItem.removeSceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.resetMatrix": (), + "QGraphicsItem.resetTransform": (), + "QGraphicsItem.rotation": (), + "QGraphicsItem.scale": (), + "QGraphicsItem.scene": (), + "QGraphicsItem.sceneBoundingRect": (), + "QGraphicsItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsItem.sceneEventFilter": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsItem.sceneMatrix": (), + "QGraphicsItem.scenePos": (), + "QGraphicsItem.sceneTransform": (), + "QGraphicsItem.scroll": ('float', 'float', 'PySide2.QtCore.QRectF'), + "QGraphicsItem.setAcceptDrops": ('bool',), + "QGraphicsItem.setAcceptHoverEvents": ('bool',), + "QGraphicsItem.setAcceptTouchEvents": ('bool',), + "QGraphicsItem.setAcceptedMouseButtons": ('MouseButtons',), + "QGraphicsItem.setActive": ('bool',), + "QGraphicsItem.setBoundingRegionGranularity": ('float',), + "QGraphicsItem.setCacheMode": ('PySide2.QtWidgets.QGraphicsItem.CacheMode', 'PySide2.QtCore.QSize'), + "QGraphicsItem.setCursor": ('PySide2.QtGui.QCursor',), + "QGraphicsItem.setData": ('int', 'Any'), + "QGraphicsItem.setEnabled": ('bool',), + "QGraphicsItem.setFiltersChildEvents": ('bool',), + "QGraphicsItem.setFlag": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemFlag', 'bool'), + "QGraphicsItem.setFlags": ('GraphicsItemFlags',), + "QGraphicsItem.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsItem.setFocusProxy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QGraphicsItem.setGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsItem.setHandlesChildEvents": ('bool',), + "QGraphicsItem.setInputMethodHints": ('InputMethodHints',), + "QGraphicsItem.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsItem.setOpacity": ('float',), + "QGraphicsItem.setPanelModality": ('PySide2.QtWidgets.QGraphicsItem.PanelModality',), + "QGraphicsItem.setParentItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.setPos": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setRotation": ('float',), + "QGraphicsItem.setScale": ('float',), + "QGraphicsItem.setSelected": ('bool',), + "QGraphicsItem.setToolTip": ('str',), + "QGraphicsItem.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsItem.setTransformOriginPoint": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsItem.setTransformations": ('list',), + "QGraphicsItem.setVisible": ('bool',), + "QGraphicsItem.setX": ('float',), + "QGraphicsItem.setY": ('float',), + "QGraphicsItem.setZValue": ('float',), + "QGraphicsItem.shape": (), + "QGraphicsItem.show": (), + "QGraphicsItem.stackBefore": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItem.toGraphicsObject": (), + "QGraphicsItem.toolTip": (), + "QGraphicsItem.topLevelItem": (), + "QGraphicsItem.topLevelWidget": (), + "QGraphicsItem.transform": (), + "QGraphicsItem.transformOriginPoint": (), + "QGraphicsItem.transformations": (), + "QGraphicsItem.type": (), + "QGraphicsItem.ungrabKeyboard": (), + "QGraphicsItem.ungrabMouse": (), + "QGraphicsItem.unsetCursor": (), + "QGraphicsItem.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsItem.updateMicroFocus": (), + "QGraphicsItem.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsItem.window": (), + "QGraphicsItem.x": (), + "QGraphicsItem.y": (), + "QGraphicsItem.zValue": (), + + # class PySide2.QtWidgets.QGraphicsItemAnimation: + "QGraphicsItemAnimation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsItemAnimation.afterAnimationStep": ('float',), + "QGraphicsItemAnimation.beforeAnimationStep": ('float',), + "QGraphicsItemAnimation.clear": (), + "QGraphicsItemAnimation.horizontalScaleAt": ('float',), + "QGraphicsItemAnimation.horizontalShearAt": ('float',), + "QGraphicsItemAnimation.item": (), + "QGraphicsItemAnimation.matrixAt": ('float',), + "QGraphicsItemAnimation.posAt": ('float',), + "QGraphicsItemAnimation.posList": (), + "QGraphicsItemAnimation.reset": (), + "QGraphicsItemAnimation.rotationAt": ('float',), + "QGraphicsItemAnimation.rotationList": (), + "QGraphicsItemAnimation.scaleList": (), + "QGraphicsItemAnimation.setItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemAnimation.setPosAt": ('float', 'PySide2.QtCore.QPointF'), + "QGraphicsItemAnimation.setRotationAt": ('float', 'float'), + "QGraphicsItemAnimation.setScaleAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setShearAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.setStep": ('float',), + "QGraphicsItemAnimation.setTimeLine": ('PySide2.QtCore.QTimeLine',), + "QGraphicsItemAnimation.setTranslationAt": ('float', 'float', 'float'), + "QGraphicsItemAnimation.shearList": (), + "QGraphicsItemAnimation.timeLine": (), + "QGraphicsItemAnimation.translationList": (), + "QGraphicsItemAnimation.verticalScaleAt": ('float',), + "QGraphicsItemAnimation.verticalShearAt": ('float',), + "QGraphicsItemAnimation.xTranslationAt": ('float',), + "QGraphicsItemAnimation.yTranslationAt": ('float',), + + # class PySide2.QtWidgets.QGraphicsItemGroup: + "QGraphicsItemGroup.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.addToGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.boundingRect": (), + "QGraphicsItemGroup.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.opaqueArea": (), + "QGraphicsItemGroup.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsItemGroup.removeFromGroup": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsItemGroup.type": (), + + # class PySide2.QtWidgets.QGraphicsLayout: + "QGraphicsLayout.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.activate": (), + "QGraphicsLayout.addChildLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayout.count": (), + "QGraphicsLayout.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.instantInvalidatePropagation": (), + "QGraphicsLayout.invalidate": (), + "QGraphicsLayout.isActivated": (), + "QGraphicsLayout.itemAt": ('int',), + "QGraphicsLayout.removeAt": ('int',), + "QGraphicsLayout.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayout.setInstantInvalidatePropagation": ('bool',), + "QGraphicsLayout.updateGeometry": (), + "QGraphicsLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QGraphicsLayoutItem: + "QGraphicsLayoutItem.__init__": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'bool'), + "QGraphicsLayoutItem.contentsRect": (), + "QGraphicsLayoutItem.effectiveSizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.geometry": (), + "QGraphicsLayoutItem.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsLayoutItem.graphicsItem": (), + "QGraphicsLayoutItem.isLayout": (), + "QGraphicsLayoutItem.maximumHeight": (), + "QGraphicsLayoutItem.maximumSize": (), + "QGraphicsLayoutItem.maximumWidth": (), + "QGraphicsLayoutItem.minimumHeight": (), + "QGraphicsLayoutItem.minimumSize": (), + "QGraphicsLayoutItem.minimumWidth": (), + "QGraphicsLayoutItem.ownedByLayout": (), + "QGraphicsLayoutItem.parentLayoutItem": (), + "QGraphicsLayoutItem.preferredHeight": (), + "QGraphicsLayoutItem.preferredSize": (), + "QGraphicsLayoutItem.preferredWidth": (), + "QGraphicsLayoutItem.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLayoutItem.setGraphicsItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLayoutItem.setMaximumHeight": ('float',), + "QGraphicsLayoutItem.setMaximumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMaximumWidth": ('float',), + "QGraphicsLayoutItem.setMinimumHeight": ('float',), + "QGraphicsLayoutItem.setMinimumSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setMinimumWidth": ('float',), + "QGraphicsLayoutItem.setOwnedByLayout": ('bool',), + "QGraphicsLayoutItem.setParentLayoutItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLayoutItem.setPreferredHeight": ('float',), + "QGraphicsLayoutItem.setPreferredSize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsLayoutItem.setPreferredWidth": ('float',), + "QGraphicsLayoutItem.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QGraphicsLayoutItem.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLayoutItem.sizePolicy": (), + "QGraphicsLayoutItem.updateGeometry": (), + + # class PySide2.QtWidgets.QGraphicsLineItem: + "QGraphicsLineItem.__init__": [('PySide2.QtCore.QLineF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsLineItem.boundingRect": (), + "QGraphicsLineItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsLineItem.extension": ('Any',), + "QGraphicsLineItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsLineItem.line": (), + "QGraphicsLineItem.opaqueArea": (), + "QGraphicsLineItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsLineItem.pen": (), + "QGraphicsLineItem.setLine": [('PySide2.QtCore.QLineF',), ('float', 'float', 'float', 'float')], + "QGraphicsLineItem.setPen": ('PySide2.QtGui.QPen',), + "QGraphicsLineItem.shape": (), + "QGraphicsLineItem.type": (), + + # class PySide2.QtWidgets.QGraphicsLinearLayout: + "QGraphicsLinearLayout.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QGraphicsLayoutItem'), ('PySide2.QtWidgets.QGraphicsLayoutItem',)], + "QGraphicsLinearLayout.addItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.addStretch": ('int',), + "QGraphicsLinearLayout.alignment": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.count": (), + "QGraphicsLinearLayout.dump": ('int',), + "QGraphicsLinearLayout.insertItem": ('int', 'PySide2.QtWidgets.QGraphicsLayoutItem'), + "QGraphicsLinearLayout.insertStretch": ('int', 'int'), + "QGraphicsLinearLayout.invalidate": (), + "QGraphicsLinearLayout.itemAt": ('int',), + "QGraphicsLinearLayout.itemSpacing": ('int',), + "QGraphicsLinearLayout.orientation": (), + "QGraphicsLinearLayout.removeAt": ('int',), + "QGraphicsLinearLayout.removeItem": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + "QGraphicsLinearLayout.setAlignment": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'Alignment'), + "QGraphicsLinearLayout.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsLinearLayout.setItemSpacing": ('int', 'float'), + "QGraphicsLinearLayout.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsLinearLayout.setSpacing": ('float',), + "QGraphicsLinearLayout.setStretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem', 'int'), + "QGraphicsLinearLayout.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsLinearLayout.spacing": (), + "QGraphicsLinearLayout.stretchFactor": ('PySide2.QtWidgets.QGraphicsLayoutItem',), + + # class PySide2.QtWidgets.QGraphicsObject: + "QGraphicsObject.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsObject.event": ('PySide2.QtCore.QEvent',), + "QGraphicsObject.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'GestureFlags'), + "QGraphicsObject.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QGraphicsObject.updateMicroFocus": (), + + # class PySide2.QtWidgets.QGraphicsOpacityEffect: + "QGraphicsOpacityEffect.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsOpacityEffect.draw": ('PySide2.QtGui.QPainter',), + "QGraphicsOpacityEffect.opacity": (), + "QGraphicsOpacityEffect.opacityMask": (), + "QGraphicsOpacityEffect.setOpacity": ('float',), + "QGraphicsOpacityEffect.setOpacityMask": ('PySide2.QtGui.QBrush',), + + # class PySide2.QtWidgets.QGraphicsPathItem: + "QGraphicsPathItem.__init__": [('PySide2.QtGui.QPainterPath', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPathItem.boundingRect": (), + "QGraphicsPathItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPathItem.extension": ('Any',), + "QGraphicsPathItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPathItem.opaqueArea": (), + "QGraphicsPathItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPathItem.path": (), + "QGraphicsPathItem.setPath": ('PySide2.QtGui.QPainterPath',), + "QGraphicsPathItem.shape": (), + "QGraphicsPathItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPixmapItem: + "QGraphicsPixmapItem.__init__": [('PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPixmapItem.boundingRect": (), + "QGraphicsPixmapItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPixmapItem.extension": ('Any',), + "QGraphicsPixmapItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPixmapItem.offset": (), + "QGraphicsPixmapItem.opaqueArea": (), + "QGraphicsPixmapItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPixmapItem.pixmap": (), + "QGraphicsPixmapItem.setOffset": [('PySide2.QtCore.QPointF',), ('float', 'float')], + "QGraphicsPixmapItem.setPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsPixmapItem.setShapeMode": ('PySide2.QtWidgets.QGraphicsPixmapItem.ShapeMode',), + "QGraphicsPixmapItem.setTransformationMode": ('PySide2.QtCore.Qt.TransformationMode',), + "QGraphicsPixmapItem.shape": (), + "QGraphicsPixmapItem.shapeMode": (), + "QGraphicsPixmapItem.transformationMode": (), + "QGraphicsPixmapItem.type": (), + + # class PySide2.QtWidgets.QGraphicsPolygonItem: + "QGraphicsPolygonItem.__init__": [('PySide2.QtGui.QPolygonF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',)], + "QGraphicsPolygonItem.boundingRect": (), + "QGraphicsPolygonItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsPolygonItem.extension": ('Any',), + "QGraphicsPolygonItem.fillRule": (), + "QGraphicsPolygonItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsPolygonItem.opaqueArea": (), + "QGraphicsPolygonItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsPolygonItem.polygon": (), + "QGraphicsPolygonItem.setFillRule": ('PySide2.QtCore.Qt.FillRule',), + "QGraphicsPolygonItem.setPolygon": ('PySide2.QtGui.QPolygonF',), + "QGraphicsPolygonItem.shape": (), + "QGraphicsPolygonItem.type": (), + + # class PySide2.QtWidgets.QGraphicsProxyWidget: + "QGraphicsProxyWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'WindowFlags'), + "QGraphicsProxyWidget.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsProxyWidget.createProxyForChildWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsProxyWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsProxyWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.focusNextPrevChild": ('bool',), + "QGraphicsProxyWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsProxyWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsProxyWidget.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsProxyWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsProxyWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsProxyWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsProxyWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsProxyWidget.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsProxyWidget.newProxyWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsProxyWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsProxyWidget.setGeometry": ('PySide2.QtCore.QRectF',), + "QGraphicsProxyWidget.setWidget": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsProxyWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsProxyWidget.subWidgetRect": ('PySide2.QtWidgets.QWidget',), + "QGraphicsProxyWidget.type": (), + "QGraphicsProxyWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsProxyWidget.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsProxyWidget.widget": (), + + # class PySide2.QtWidgets.QGraphicsRectItem: + "QGraphicsRectItem.__init__": [('PySide2.QtCore.QRectF', 'PySide2.QtWidgets.QGraphicsItem'), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float', 'float', 'float', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsRectItem.boundingRect": (), + "QGraphicsRectItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsRectItem.extension": ('Any',), + "QGraphicsRectItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsRectItem.opaqueArea": (), + "QGraphicsRectItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsRectItem.rect": (), + "QGraphicsRectItem.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsRectItem.shape": (), + "QGraphicsRectItem.type": (), + + # class PySide2.QtWidgets.QGraphicsRotation: + "QGraphicsRotation.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsRotation.angle": (), + "QGraphicsRotation.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsRotation.axis": (), + "QGraphicsRotation.origin": (), + "QGraphicsRotation.setAngle": ('float',), + "QGraphicsRotation.setAxis": [('PySide2.QtCore.Qt.Axis',), ('PySide2.QtGui.QVector3D',)], + "QGraphicsRotation.setOrigin": ('PySide2.QtGui.QVector3D',), + + # class PySide2.QtWidgets.QGraphicsScale: + "QGraphicsScale.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsScale.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsScale.origin": (), + "QGraphicsScale.setOrigin": ('PySide2.QtGui.QVector3D',), + "QGraphicsScale.setXScale": ('float',), + "QGraphicsScale.setYScale": ('float',), + "QGraphicsScale.setZScale": ('float',), + "QGraphicsScale.xScale": (), + "QGraphicsScale.yScale": (), + "QGraphicsScale.zScale": (), + + # class PySide2.QtWidgets.QGraphicsScene: + "QGraphicsScene.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QObject'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.QObject')], + "QGraphicsScene.activePanel": (), + "QGraphicsScene.activeWindow": (), + "QGraphicsScene.addEllipse": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.addLine": [('PySide2.QtCore.QLineF', 'PySide2.QtGui.QPen'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen')], + "QGraphicsScene.addPath": ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addPixmap": ('PySide2.QtGui.QPixmap',), + "QGraphicsScene.addPolygon": ('PySide2.QtGui.QPolygonF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), + "QGraphicsScene.addRect": [('PySide2.QtCore.QRectF', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush'), ('float', 'float', 'float', 'float', 'PySide2.QtGui.QPen', 'PySide2.QtGui.QBrush')], + "QGraphicsScene.addSimpleText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addText": ('str', 'PySide2.QtGui.QFont'), + "QGraphicsScene.addWidget": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QGraphicsScene.advance": (), + "QGraphicsScene.backgroundBrush": (), + "QGraphicsScene.bspTreeDepth": (), + "QGraphicsScene.clear": (), + "QGraphicsScene.clearFocus": (), + "QGraphicsScene.clearSelection": (), + "QGraphicsScene.collidingItems": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.ItemSelectionMode'), + "QGraphicsScene.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsScene.createItemGroup": ('list',), + "QGraphicsScene.destroyItemGroup": ('PySide2.QtWidgets.QGraphicsItemGroup',), + "QGraphicsScene.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsScene.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsScene.event": ('PySide2.QtCore.QEvent',), + "QGraphicsScene.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.focusItem": (), + "QGraphicsScene.focusNextPrevChild": ('bool',), + "QGraphicsScene.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsScene.font": (), + "QGraphicsScene.foregroundBrush": (), + "QGraphicsScene.hasFocus": (), + "QGraphicsScene.height": (), + "QGraphicsScene.helpEvent": ('PySide2.QtWidgets.QGraphicsSceneHelpEvent',), + "QGraphicsScene.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsScene.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsScene.invalidate": [('PySide2.QtCore.QRectF', 'SceneLayers'), ('float', 'float', 'float', 'float', 'SceneLayers')], + "QGraphicsScene.isActive": (), + "QGraphicsScene.isSortCacheEnabled": (), + "QGraphicsScene.itemAt": [('PySide2.QtCore.QPointF', 'PySide2.QtGui.QTransform'), ('float', 'float', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemIndexMethod": (), + "QGraphicsScene.items": [('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtCore.Qt.SortOrder',), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPolygonF', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtCore.Qt.SortOrder', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.itemsBoundingRect": (), + "QGraphicsScene.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsScene.minimumRenderSize": (), + "QGraphicsScene.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseGrabberItem": (), + "QGraphicsScene.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsScene.palette": (), + "QGraphicsScene.removeItem": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.render": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), + "QGraphicsScene.sceneRect": (), + "QGraphicsScene.selectedItems": (), + "QGraphicsScene.selectionArea": (), + "QGraphicsScene.sendEvent": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.QEvent'), + "QGraphicsScene.setActivePanel": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsScene.setActiveWindow": ('PySide2.QtWidgets.QGraphicsWidget',), + "QGraphicsScene.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setBspTreeDepth": ('int',), + "QGraphicsScene.setFocus": ('PySide2.QtCore.Qt.FocusReason',), + "QGraphicsScene.setFocusItem": ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.FocusReason'), + "QGraphicsScene.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsScene.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsScene.setItemIndexMethod": ('PySide2.QtWidgets.QGraphicsScene.ItemIndexMethod',), + "QGraphicsScene.setMinimumRenderSize": ('float',), + "QGraphicsScene.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsScene.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.setSelectionArea": [('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionOperation', 'PySide2.QtCore.Qt.ItemSelectionMode', 'PySide2.QtGui.QTransform'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtGui.QTransform')], + "QGraphicsScene.setSortCacheEnabled": ('bool',), + "QGraphicsScene.setStickyFocus": ('bool',), + "QGraphicsScene.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsScene.stickyFocus": (), + "QGraphicsScene.style": (), + "QGraphicsScene.update": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsScene.views": (), + "QGraphicsScene.wheelEvent": ('PySide2.QtWidgets.QGraphicsSceneWheelEvent',), + "QGraphicsScene.width": (), + + # class PySide2.QtWidgets.QGraphicsSceneContextMenuEvent: + "QGraphicsSceneContextMenuEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneContextMenuEvent.modifiers": (), + "QGraphicsSceneContextMenuEvent.pos": (), + "QGraphicsSceneContextMenuEvent.reason": (), + "QGraphicsSceneContextMenuEvent.scenePos": (), + "QGraphicsSceneContextMenuEvent.screenPos": (), + "QGraphicsSceneContextMenuEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneContextMenuEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setReason": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent.Reason',), + "QGraphicsSceneContextMenuEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneContextMenuEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneDragDropEvent: + "QGraphicsSceneDragDropEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneDragDropEvent.acceptProposedAction": (), + "QGraphicsSceneDragDropEvent.buttons": (), + "QGraphicsSceneDragDropEvent.dropAction": (), + "QGraphicsSceneDragDropEvent.mimeData": (), + "QGraphicsSceneDragDropEvent.modifiers": (), + "QGraphicsSceneDragDropEvent.pos": (), + "QGraphicsSceneDragDropEvent.possibleActions": (), + "QGraphicsSceneDragDropEvent.proposedAction": (), + "QGraphicsSceneDragDropEvent.scenePos": (), + "QGraphicsSceneDragDropEvent.screenPos": (), + "QGraphicsSceneDragDropEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneDragDropEvent.setDropAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneDragDropEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setPossibleActions": ('DropActions',), + "QGraphicsSceneDragDropEvent.setProposedAction": ('PySide2.QtCore.Qt.DropAction',), + "QGraphicsSceneDragDropEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneDragDropEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneDragDropEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneEvent: + "QGraphicsSceneEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneEvent.widget": (), + + # class PySide2.QtWidgets.QGraphicsSceneHelpEvent: + "QGraphicsSceneHelpEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHelpEvent.scenePos": (), + "QGraphicsSceneHelpEvent.screenPos": (), + "QGraphicsSceneHelpEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHelpEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneHoverEvent: + "QGraphicsSceneHoverEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneHoverEvent.lastPos": (), + "QGraphicsSceneHoverEvent.lastScenePos": (), + "QGraphicsSceneHoverEvent.lastScreenPos": (), + "QGraphicsSceneHoverEvent.modifiers": (), + "QGraphicsSceneHoverEvent.pos": (), + "QGraphicsSceneHoverEvent.scenePos": (), + "QGraphicsSceneHoverEvent.screenPos": (), + "QGraphicsSceneHoverEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneHoverEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneHoverEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneHoverEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSceneMouseEvent: + "QGraphicsSceneMouseEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneMouseEvent.button": (), + "QGraphicsSceneMouseEvent.buttonDownPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScenePos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.buttons": (), + "QGraphicsSceneMouseEvent.flags": (), + "QGraphicsSceneMouseEvent.lastPos": (), + "QGraphicsSceneMouseEvent.lastScenePos": (), + "QGraphicsSceneMouseEvent.lastScreenPos": (), + "QGraphicsSceneMouseEvent.modifiers": (), + "QGraphicsSceneMouseEvent.pos": (), + "QGraphicsSceneMouseEvent.scenePos": (), + "QGraphicsSceneMouseEvent.screenPos": (), + "QGraphicsSceneMouseEvent.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QGraphicsSceneMouseEvent.setButtonDownPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScenePos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPointF'), + "QGraphicsSceneMouseEvent.setButtonDownScreenPos": ('PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QPoint'), + "QGraphicsSceneMouseEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneMouseEvent.setFlags": ('MouseEventFlags',), + "QGraphicsSceneMouseEvent.setLastPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setLastScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneMouseEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMouseEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + "QGraphicsSceneMouseEvent.setSource": ('PySide2.QtCore.Qt.MouseEventSource',), + "QGraphicsSceneMouseEvent.source": (), + + # class PySide2.QtWidgets.QGraphicsSceneMoveEvent: + "QGraphicsSceneMoveEvent.__init__": (), + "QGraphicsSceneMoveEvent.newPos": (), + "QGraphicsSceneMoveEvent.oldPos": (), + "QGraphicsSceneMoveEvent.setNewPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneMoveEvent.setOldPos": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QGraphicsSceneResizeEvent: + "QGraphicsSceneResizeEvent.__init__": (), + "QGraphicsSceneResizeEvent.newSize": (), + "QGraphicsSceneResizeEvent.oldSize": (), + "QGraphicsSceneResizeEvent.setNewSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsSceneResizeEvent.setOldSize": ('PySide2.QtCore.QSizeF',), + + # class PySide2.QtWidgets.QGraphicsSceneWheelEvent: + "QGraphicsSceneWheelEvent.__init__": ('PySide2.QtCore.QEvent.Type',), + "QGraphicsSceneWheelEvent.buttons": (), + "QGraphicsSceneWheelEvent.delta": (), + "QGraphicsSceneWheelEvent.modifiers": (), + "QGraphicsSceneWheelEvent.orientation": (), + "QGraphicsSceneWheelEvent.pos": (), + "QGraphicsSceneWheelEvent.scenePos": (), + "QGraphicsSceneWheelEvent.screenPos": (), + "QGraphicsSceneWheelEvent.setButtons": ('MouseButtons',), + "QGraphicsSceneWheelEvent.setDelta": ('int',), + "QGraphicsSceneWheelEvent.setModifiers": ('KeyboardModifiers',), + "QGraphicsSceneWheelEvent.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QGraphicsSceneWheelEvent.setPos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScenePos": ('PySide2.QtCore.QPointF',), + "QGraphicsSceneWheelEvent.setScreenPos": ('PySide2.QtCore.QPoint',), + + # class PySide2.QtWidgets.QGraphicsSimpleTextItem: + "QGraphicsSimpleTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSimpleTextItem.boundingRect": (), + "QGraphicsSimpleTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsSimpleTextItem.extension": ('Any',), + "QGraphicsSimpleTextItem.font": (), + "QGraphicsSimpleTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsSimpleTextItem.opaqueArea": (), + "QGraphicsSimpleTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSimpleTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsSimpleTextItem.setText": ('str',), + "QGraphicsSimpleTextItem.shape": (), + "QGraphicsSimpleTextItem.text": (), + "QGraphicsSimpleTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTextItem: + "QGraphicsTextItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsTextItem.adjustSize": (), + "QGraphicsTextItem.boundingRect": (), + "QGraphicsTextItem.contains": ('PySide2.QtCore.QPointF',), + "QGraphicsTextItem.contextMenuEvent": ('PySide2.QtWidgets.QGraphicsSceneContextMenuEvent',), + "QGraphicsTextItem.defaultTextColor": (), + "QGraphicsTextItem.document": (), + "QGraphicsTextItem.dragEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dragMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.dropEvent": ('PySide2.QtWidgets.QGraphicsSceneDragDropEvent',), + "QGraphicsTextItem.extension": ('Any',), + "QGraphicsTextItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsTextItem.font": (), + "QGraphicsTextItem.hoverEnterEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsTextItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsTextItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsTextItem.isObscuredBy": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsTextItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsTextItem.mouseDoubleClickEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mousePressEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.mouseReleaseEvent": ('PySide2.QtWidgets.QGraphicsSceneMouseEvent',), + "QGraphicsTextItem.opaqueArea": (), + "QGraphicsTextItem.openExternalLinks": (), + "QGraphicsTextItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsTextItem.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsTextItem.setDefaultTextColor": ('PySide2.QtGui.QColor',), + "QGraphicsTextItem.setDocument": ('PySide2.QtGui.QTextDocument',), + "QGraphicsTextItem.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsTextItem.setHtml": ('str',), + "QGraphicsTextItem.setOpenExternalLinks": ('bool',), + "QGraphicsTextItem.setPlainText": ('str',), + "QGraphicsTextItem.setTabChangesFocus": ('bool',), + "QGraphicsTextItem.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QGraphicsTextItem.setTextInteractionFlags": ('TextInteractionFlags',), + "QGraphicsTextItem.setTextWidth": ('float',), + "QGraphicsTextItem.shape": (), + "QGraphicsTextItem.tabChangesFocus": (), + "QGraphicsTextItem.textCursor": (), + "QGraphicsTextItem.textInteractionFlags": (), + "QGraphicsTextItem.textWidth": (), + "QGraphicsTextItem.toHtml": (), + "QGraphicsTextItem.toPlainText": (), + "QGraphicsTextItem.type": (), + + # class PySide2.QtWidgets.QGraphicsTransform: + "QGraphicsTransform.__init__": ('PySide2.QtCore.QObject',), + "QGraphicsTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QGraphicsTransform.update": (), + + # class PySide2.QtWidgets.QGraphicsView: + "QGraphicsView.__init__": [('PySide2.QtWidgets.QGraphicsScene', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QGraphicsView.alignment": (), + "QGraphicsView.backgroundBrush": (), + "QGraphicsView.cacheMode": (), + "QGraphicsView.centerOn": [('PySide2.QtCore.QPointF',), ('PySide2.QtWidgets.QGraphicsItem',), ('float', 'float')], + "QGraphicsView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QGraphicsView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QGraphicsView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QGraphicsView.dragMode": (), + "QGraphicsView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QGraphicsView.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawForeground": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), + "QGraphicsView.drawItems": ('PySide2.QtGui.QPainter', 'int', 'List[PySide2.QtWidgets.QGraphicsItem]', 'List[PySide2.QtWidgets.QStyleOptionGraphicsItem]'), + "QGraphicsView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QGraphicsView.ensureVisible": [('PySide2.QtCore.QRectF', 'int', 'int'), ('PySide2.QtWidgets.QGraphicsItem', 'int', 'int'), ('float', 'float', 'float', 'float', 'int', 'int')], + "QGraphicsView.event": ('PySide2.QtCore.QEvent',), + "QGraphicsView.fitInView": [('PySide2.QtCore.QRectF', 'PySide2.QtCore.Qt.AspectRatioMode'), ('PySide2.QtWidgets.QGraphicsItem', 'PySide2.QtCore.Qt.AspectRatioMode'), ('float', 'float', 'float', 'float', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.focusNextPrevChild": ('bool',), + "QGraphicsView.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsView.foregroundBrush": (), + "QGraphicsView.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QGraphicsView.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QGraphicsView.invalidateScene": ('PySide2.QtCore.QRectF', 'SceneLayers'), + "QGraphicsView.isInteractive": (), + "QGraphicsView.isTransformed": (), + "QGraphicsView.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QGraphicsView.items": [(), ('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPainterPath', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('PySide2.QtGui.QPolygon', 'PySide2.QtCore.Qt.ItemSelectionMode'), ('int', 'int'), ('int', 'int', 'int', 'int', 'PySide2.QtCore.Qt.ItemSelectionMode')], + "QGraphicsView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QGraphicsView.mapFromScene": [('PySide2.QtCore.QPointF',), ('PySide2.QtCore.QRectF',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygonF',), ('float', 'float'), ('float', 'float', 'float', 'float')], + "QGraphicsView.mapToScene": [('PySide2.QtCore.QPoint',), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QPainterPath',), ('PySide2.QtGui.QPolygon',), ('int', 'int'), ('int', 'int', 'int', 'int')], + "QGraphicsView.matrix": (), + "QGraphicsView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGraphicsView.optimizationFlags": (), + "QGraphicsView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGraphicsView.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.AspectRatioMode')], + "QGraphicsView.renderHints": (), + "QGraphicsView.resetCachedContent": (), + "QGraphicsView.resetMatrix": (), + "QGraphicsView.resetTransform": (), + "QGraphicsView.resizeAnchor": (), + "QGraphicsView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGraphicsView.rotate": ('float',), + "QGraphicsView.rubberBandRect": (), + "QGraphicsView.rubberBandSelectionMode": (), + "QGraphicsView.scale": ('float', 'float'), + "QGraphicsView.scene": (), + "QGraphicsView.sceneRect": (), + "QGraphicsView.scrollContentsBy": ('int', 'int'), + "QGraphicsView.setAlignment": ('Alignment',), + "QGraphicsView.setBackgroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setCacheMode": ('CacheMode',), + "QGraphicsView.setDragMode": ('PySide2.QtWidgets.QGraphicsView.DragMode',), + "QGraphicsView.setForegroundBrush": ('PySide2.QtGui.QBrush',), + "QGraphicsView.setInteractive": ('bool',), + "QGraphicsView.setMatrix": ('PySide2.QtGui.QMatrix', 'bool'), + "QGraphicsView.setOptimizationFlag": ('PySide2.QtWidgets.QGraphicsView.OptimizationFlag', 'bool'), + "QGraphicsView.setOptimizationFlags": ('OptimizationFlags',), + "QGraphicsView.setRenderHint": ('PySide2.QtGui.QPainter.RenderHint', 'bool'), + "QGraphicsView.setRenderHints": ('RenderHints',), + "QGraphicsView.setResizeAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setRubberBandSelectionMode": ('PySide2.QtCore.Qt.ItemSelectionMode',), + "QGraphicsView.setScene": ('PySide2.QtWidgets.QGraphicsScene',), + "QGraphicsView.setSceneRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsView.setTransform": ('PySide2.QtGui.QTransform', 'bool'), + "QGraphicsView.setTransformationAnchor": ('PySide2.QtWidgets.QGraphicsView.ViewportAnchor',), + "QGraphicsView.setViewportUpdateMode": ('PySide2.QtWidgets.QGraphicsView.ViewportUpdateMode',), + "QGraphicsView.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QGraphicsView.shear": ('float', 'float'), + "QGraphicsView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsView.sizeHint": (), + "QGraphicsView.transform": (), + "QGraphicsView.transformationAnchor": (), + "QGraphicsView.translate": ('float', 'float'), + "QGraphicsView.updateScene": ('list',), + "QGraphicsView.updateSceneRect": ('PySide2.QtCore.QRectF',), + "QGraphicsView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsView.viewportTransform": (), + "QGraphicsView.viewportUpdateMode": (), + "QGraphicsView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QGraphicsWidget: + "QGraphicsWidget.__init__": ('PySide2.QtWidgets.QGraphicsItem', 'WindowFlags'), + "QGraphicsWidget.actions": (), + "QGraphicsWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.addActions": ('list',), + "QGraphicsWidget.adjustSize": (), + "QGraphicsWidget.autoFillBackground": (), + "QGraphicsWidget.boundingRect": (), + "QGraphicsWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.close": (), + "QGraphicsWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QGraphicsWidget.event": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusNextPrevChild": ('bool',), + "QGraphicsWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QGraphicsWidget.focusPolicy": (), + "QGraphicsWidget.focusWidget": (), + "QGraphicsWidget.font": (), + "QGraphicsWidget.getContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.getWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.grabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QGraphicsWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QGraphicsWidget.hoverLeaveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.hoverMoveEvent": ('PySide2.QtWidgets.QGraphicsSceneHoverEvent',), + "QGraphicsWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOption',), + "QGraphicsWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QGraphicsWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QGraphicsWidget.isActiveWindow": (), + "QGraphicsWidget.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsWidget.layout": (), + "QGraphicsWidget.layoutDirection": (), + "QGraphicsWidget.moveEvent": ('PySide2.QtWidgets.QGraphicsSceneMoveEvent',), + "QGraphicsWidget.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.paintWindowFrame": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsWidget.palette": (), + "QGraphicsWidget.polishEvent": (), + "QGraphicsWidget.propertyChange": ('str', 'Any'), + "QGraphicsWidget.rect": (), + "QGraphicsWidget.releaseShortcut": ('int',), + "QGraphicsWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QGraphicsWidget.resize": [('PySide2.QtCore.QSizeF',), ('float', 'float')], + "QGraphicsWidget.resizeEvent": ('PySide2.QtWidgets.QGraphicsSceneResizeEvent',), + "QGraphicsWidget.sceneEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QGraphicsWidget.setAutoFillBackground": ('bool',), + "QGraphicsWidget.setContentsMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QGraphicsWidget.setFont": ('PySide2.QtGui.QFont',), + "QGraphicsWidget.setGeometry": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QGraphicsWidget.setLayout": ('PySide2.QtWidgets.QGraphicsLayout',), + "QGraphicsWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QGraphicsWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QGraphicsWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QGraphicsWidget.setShortcutEnabled": ('int', 'bool'), + "QGraphicsWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QGraphicsWidget.setTabOrder": ('PySide2.QtWidgets.QGraphicsWidget', 'PySide2.QtWidgets.QGraphicsWidget'), + "QGraphicsWidget.setWindowFlags": ('WindowFlags',), + "QGraphicsWidget.setWindowFrameMargins": ('float', 'float', 'float', 'float'), + "QGraphicsWidget.setWindowTitle": ('str',), + "QGraphicsWidget.shape": (), + "QGraphicsWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QGraphicsWidget.size": (), + "QGraphicsWidget.sizeHint": ('PySide2.QtCore.Qt.SizeHint', 'PySide2.QtCore.QSizeF'), + "QGraphicsWidget.style": (), + "QGraphicsWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QGraphicsWidget.type": (), + "QGraphicsWidget.ungrabKeyboardEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.ungrabMouseEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.unsetLayoutDirection": (), + "QGraphicsWidget.unsetWindowFrameMargins": (), + "QGraphicsWidget.updateGeometry": (), + "QGraphicsWidget.windowFlags": (), + "QGraphicsWidget.windowFrameEvent": ('PySide2.QtCore.QEvent',), + "QGraphicsWidget.windowFrameGeometry": (), + "QGraphicsWidget.windowFrameRect": (), + "QGraphicsWidget.windowFrameSectionAt": ('PySide2.QtCore.QPointF',), + "QGraphicsWidget.windowTitle": (), + "QGraphicsWidget.windowType": (), + + # class PySide2.QtWidgets.QGridLayout: + "QGridLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QGridLayout.addItem": [('PySide2.QtWidgets.QLayoutItem',), ('PySide2.QtWidgets.QLayoutItem', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.addLayout": [('PySide2.QtWidgets.QLayout', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QLayout', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.addWidget": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'Alignment'), ('PySide2.QtWidgets.QWidget', 'int', 'int', 'int', 'int', 'Alignment')], + "QGridLayout.cellRect": ('int', 'int'), + "QGridLayout.columnCount": (), + "QGridLayout.columnMinimumWidth": ('int',), + "QGridLayout.columnStretch": ('int',), + "QGridLayout.count": (), + "QGridLayout.expandingDirections": (), + "QGridLayout.getItemPosition": ('int', 'int', 'int', 'int', 'int'), + "QGridLayout.hasHeightForWidth": (), + "QGridLayout.heightForWidth": ('int',), + "QGridLayout.horizontalSpacing": (), + "QGridLayout.invalidate": (), + "QGridLayout.itemAt": ('int',), + "QGridLayout.itemAtPosition": ('int', 'int'), + "QGridLayout.maximumSize": (), + "QGridLayout.minimumHeightForWidth": ('int',), + "QGridLayout.minimumSize": (), + "QGridLayout.originCorner": (), + "QGridLayout.rowCount": (), + "QGridLayout.rowMinimumHeight": ('int',), + "QGridLayout.rowStretch": ('int',), + "QGridLayout.setColumnMinimumWidth": ('int', 'int'), + "QGridLayout.setColumnStretch": ('int', 'int'), + "QGridLayout.setDefaultPositioning": ('int', 'PySide2.QtCore.Qt.Orientation'), + "QGridLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QGridLayout.setHorizontalSpacing": ('int',), + "QGridLayout.setOriginCorner": ('PySide2.QtCore.Qt.Corner',), + "QGridLayout.setRowMinimumHeight": ('int', 'int'), + "QGridLayout.setRowStretch": ('int', 'int'), + "QGridLayout.setSpacing": ('int',), + "QGridLayout.setVerticalSpacing": ('int',), + "QGridLayout.sizeHint": (), + "QGridLayout.spacing": (), + "QGridLayout.takeAt": ('int',), + "QGridLayout.verticalSpacing": (), + + # class PySide2.QtWidgets.QGroupBox: + "QGroupBox.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QGroupBox.alignment": (), + "QGroupBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QGroupBox.childEvent": ('PySide2.QtCore.QChildEvent',), + "QGroupBox.event": ('PySide2.QtCore.QEvent',), + "QGroupBox.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QGroupBox.initStyleOption": ('PySide2.QtWidgets.QStyleOptionGroupBox',), + "QGroupBox.isCheckable": (), + "QGroupBox.isChecked": (), + "QGroupBox.isFlat": (), + "QGroupBox.minimumSizeHint": (), + "QGroupBox.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QGroupBox.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGroupBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGroupBox.setAlignment": ('int',), + "QGroupBox.setCheckable": ('bool',), + "QGroupBox.setChecked": ('bool',), + "QGroupBox.setFlat": ('bool',), + "QGroupBox.setTitle": ('str',), + "QGroupBox.title": (), + + # class PySide2.QtWidgets.QHBoxLayout: + "QHBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QHeaderView: + "QHeaderView.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), + "QHeaderView.cascadingSectionResizes": (), + "QHeaderView.count": (), + "QHeaderView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QHeaderView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QHeaderView.defaultAlignment": (), + "QHeaderView.defaultSectionSize": (), + "QHeaderView.doItemsLayout": (), + "QHeaderView.event": ('PySide2.QtCore.QEvent',), + "QHeaderView.headerDataChanged": ('PySide2.QtCore.Qt.Orientation', 'int', 'int'), + "QHeaderView.hiddenSectionCount": (), + "QHeaderView.hideSection": ('int',), + "QHeaderView.highlightSections": (), + "QHeaderView.horizontalOffset": (), + "QHeaderView.indexAt": ('PySide2.QtCore.QPoint',), + "QHeaderView.initStyleOption": [('PySide2.QtWidgets.QStyleOptionFrame',), ('PySide2.QtWidgets.QStyleOptionHeader',)], + "QHeaderView.initialize": (), + "QHeaderView.initializeSections": [(), ('int', 'int')], + "QHeaderView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.isSectionHidden": ('int',), + "QHeaderView.isSortIndicatorShown": (), + "QHeaderView.length": (), + "QHeaderView.logicalIndex": ('int',), + "QHeaderView.logicalIndexAt": [('PySide2.QtCore.QPoint',), ('int',), ('int', 'int')], + "QHeaderView.maximumSectionSize": (), + "QHeaderView.minimumSectionSize": (), + "QHeaderView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QHeaderView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QHeaderView.moveSection": ('int', 'int'), + "QHeaderView.offset": (), + "QHeaderView.orientation": (), + "QHeaderView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QHeaderView.paintSection": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int'), + "QHeaderView.reset": (), + "QHeaderView.resetDefaultSectionSize": (), + "QHeaderView.resizeContentsPrecision": (), + "QHeaderView.resizeSection": ('int', 'int'), + "QHeaderView.resizeSections": [(), ('PySide2.QtWidgets.QHeaderView.ResizeMode',)], + "QHeaderView.restoreState": ('PySide2.QtCore.QByteArray',), + "QHeaderView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.saveState": (), + "QHeaderView.scrollContentsBy": ('int', 'int'), + "QHeaderView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QHeaderView.sectionPosition": ('int',), + "QHeaderView.sectionResizeMode": ('int',), + "QHeaderView.sectionSize": ('int',), + "QHeaderView.sectionSizeFromContents": ('int',), + "QHeaderView.sectionSizeHint": ('int',), + "QHeaderView.sectionViewportPosition": ('int',), + "QHeaderView.sectionsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsClickable": (), + "QHeaderView.sectionsHidden": (), + "QHeaderView.sectionsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QHeaderView.sectionsMovable": (), + "QHeaderView.sectionsMoved": (), + "QHeaderView.setCascadingSectionResizes": ('bool',), + "QHeaderView.setDefaultAlignment": ('Alignment',), + "QHeaderView.setDefaultSectionSize": ('int',), + "QHeaderView.setHighlightSections": ('bool',), + "QHeaderView.setMaximumSectionSize": ('int',), + "QHeaderView.setMinimumSectionSize": ('int',), + "QHeaderView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QHeaderView.setOffset": ('int',), + "QHeaderView.setOffsetToLastSection": (), + "QHeaderView.setOffsetToSectionPosition": ('int',), + "QHeaderView.setResizeContentsPrecision": ('int',), + "QHeaderView.setSectionHidden": ('int', 'bool'), + "QHeaderView.setSectionResizeMode": [('PySide2.QtWidgets.QHeaderView.ResizeMode',), ('int', 'PySide2.QtWidgets.QHeaderView.ResizeMode')], + "QHeaderView.setSectionsClickable": ('bool',), + "QHeaderView.setSectionsMovable": ('bool',), + "QHeaderView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QHeaderView.setSortIndicator": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QHeaderView.setSortIndicatorShown": ('bool',), + "QHeaderView.setStretchLastSection": ('bool',), + "QHeaderView.setVisible": ('bool',), + "QHeaderView.showSection": ('int',), + "QHeaderView.sizeHint": (), + "QHeaderView.sortIndicatorOrder": (), + "QHeaderView.sortIndicatorSection": (), + "QHeaderView.stretchLastSection": (), + "QHeaderView.stretchSectionCount": (), + "QHeaderView.swapSections": ('int', 'int'), + "QHeaderView.updateGeometries": (), + "QHeaderView.updateSection": ('int',), + "QHeaderView.verticalOffset": (), + "QHeaderView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QHeaderView.visualIndex": ('int',), + "QHeaderView.visualIndexAt": ('int',), + "QHeaderView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QHeaderView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + + # class PySide2.QtWidgets.QInputDialog: + "QInputDialog.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QInputDialog.cancelButtonText": (), + "QInputDialog.comboBoxItems": (), + "QInputDialog.done": ('int',), + "QInputDialog.doubleDecimals": (), + "QInputDialog.doubleMaximum": (), + "QInputDialog.doubleMinimum": (), + "QInputDialog.doubleValue": (), + "QInputDialog.getDouble": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'float', 'float', 'float', 'int', 'bool', 'WindowFlags'), + "QInputDialog.getInt": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'int', 'int', 'int', 'int', 'bool', 'WindowFlags'), + "QInputDialog.getItem": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'List[str]', 'int', 'bool', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.getMultiLineText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'str', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.getText": ('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QLineEdit.EchoMode', 'str', 'bool', 'WindowFlags', 'InputMethodHints'), + "QInputDialog.inputMode": (), + "QInputDialog.intMaximum": (), + "QInputDialog.intMinimum": (), + "QInputDialog.intStep": (), + "QInputDialog.intValue": (), + "QInputDialog.isComboBoxEditable": (), + "QInputDialog.labelText": (), + "QInputDialog.minimumSizeHint": (), + "QInputDialog.okButtonText": (), + "QInputDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QInputDialog.setCancelButtonText": ('str',), + "QInputDialog.setComboBoxEditable": ('bool',), + "QInputDialog.setComboBoxItems": ('List[str]',), + "QInputDialog.setDoubleDecimals": ('int',), + "QInputDialog.setDoubleMaximum": ('float',), + "QInputDialog.setDoubleMinimum": ('float',), + "QInputDialog.setDoubleRange": ('float', 'float'), + "QInputDialog.setDoubleValue": ('float',), + "QInputDialog.setInputMode": ('PySide2.QtWidgets.QInputDialog.InputMode',), + "QInputDialog.setIntMaximum": ('int',), + "QInputDialog.setIntMinimum": ('int',), + "QInputDialog.setIntRange": ('int', 'int'), + "QInputDialog.setIntStep": ('int',), + "QInputDialog.setIntValue": ('int',), + "QInputDialog.setLabelText": ('str',), + "QInputDialog.setOkButtonText": ('str',), + "QInputDialog.setOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption', 'bool'), + "QInputDialog.setTextEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QInputDialog.setTextValue": ('str',), + "QInputDialog.setVisible": ('bool',), + "QInputDialog.sizeHint": (), + "QInputDialog.testOption": ('PySide2.QtWidgets.QInputDialog.InputDialogOption',), + "QInputDialog.textEchoMode": (), + "QInputDialog.textValue": (), + + # class PySide2.QtWidgets.QItemDelegate: + "QItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.decoration": ('PySide2.QtWidgets.QStyleOptionViewItem', 'Any'), + "QItemDelegate.doCheck": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'Any'), + "QItemDelegate.drawBackground": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.drawCheck": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtCore.Qt.CheckState'), + "QItemDelegate.drawDecoration": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QPixmap'), + "QItemDelegate.drawDisplay": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect', 'str'), + "QItemDelegate.drawFocus": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QRect'), + "QItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QItemDelegate.hasClipping": (), + "QItemDelegate.itemEditorFactory": (), + "QItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.rect": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex', 'int'), + "QItemDelegate.setClipping": ('bool',), + "QItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.setOptions": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QStyleOptionViewItem'), + "QItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QItemDelegate.textRectangle": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtGui.QFont', 'str'), + "QItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QItemEditorCreatorBase: + "QItemEditorCreatorBase.__init__": (), + "QItemEditorCreatorBase.createWidget": ('PySide2.QtWidgets.QWidget',), + "QItemEditorCreatorBase.valuePropertyName": (), + + # class PySide2.QtWidgets.QItemEditorFactory: + "QItemEditorFactory.__init__": (), + "QItemEditorFactory.createEditor": ('int', 'PySide2.QtWidgets.QWidget'), + "QItemEditorFactory.defaultFactory": (), + "QItemEditorFactory.registerEditor": ('int', 'PySide2.QtWidgets.QItemEditorCreatorBase'), + "QItemEditorFactory.setDefaultFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QItemEditorFactory.valuePropertyName": ('int',), + + # class PySide2.QtWidgets.QKeyEventTransition: + "QKeyEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'int', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QKeyEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.key": (), + "QKeyEventTransition.modifierMask": (), + "QKeyEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QKeyEventTransition.setKey": ('int',), + "QKeyEventTransition.setModifierMask": ('KeyboardModifiers',), + + # class PySide2.QtWidgets.QKeySequenceEdit: + "QKeySequenceEdit.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QKeySequenceEdit.clear": (), + "QKeySequenceEdit.event": ('PySide2.QtCore.QEvent',), + "QKeySequenceEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QKeySequenceEdit.keySequence": (), + "QKeySequenceEdit.setKeySequence": ('PySide2.QtGui.QKeySequence',), + "QKeySequenceEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QLCDNumber: + "QLCDNumber.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'PySide2.QtWidgets.QWidget')], + "QLCDNumber.checkOverflow": [('float',), ('int',)], + "QLCDNumber.digitCount": (), + "QLCDNumber.display": [('float',), ('int',), ('str',)], + "QLCDNumber.event": ('PySide2.QtCore.QEvent',), + "QLCDNumber.intValue": (), + "QLCDNumber.mode": (), + "QLCDNumber.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLCDNumber.segmentStyle": (), + "QLCDNumber.setBinMode": (), + "QLCDNumber.setDecMode": (), + "QLCDNumber.setDigitCount": ('int',), + "QLCDNumber.setHexMode": (), + "QLCDNumber.setMode": ('PySide2.QtWidgets.QLCDNumber.Mode',), + "QLCDNumber.setOctMode": (), + "QLCDNumber.setSegmentStyle": ('PySide2.QtWidgets.QLCDNumber.SegmentStyle',), + "QLCDNumber.setSmallDecimalPoint": ('bool',), + "QLCDNumber.sizeHint": (), + "QLCDNumber.smallDecimalPoint": (), + "QLCDNumber.value": (), + + # class PySide2.QtWidgets.QLabel: + "QLabel.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QLabel.alignment": (), + "QLabel.buddy": (), + "QLabel.changeEvent": ('PySide2.QtCore.QEvent',), + "QLabel.clear": (), + "QLabel.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLabel.event": ('PySide2.QtCore.QEvent',), + "QLabel.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.focusNextPrevChild": ('bool',), + "QLabel.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLabel.hasScaledContents": (), + "QLabel.hasSelectedText": (), + "QLabel.heightForWidth": ('int',), + "QLabel.indent": (), + "QLabel.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLabel.margin": (), + "QLabel.minimumSizeHint": (), + "QLabel.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLabel.movie": (), + "QLabel.openExternalLinks": (), + "QLabel.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLabel.picture": (), + "QLabel.pixmap": (), + "QLabel.selectedText": (), + "QLabel.selectionStart": (), + "QLabel.setAlignment": ('Alignment',), + "QLabel.setBuddy": ('PySide2.QtWidgets.QWidget',), + "QLabel.setIndent": ('int',), + "QLabel.setMargin": ('int',), + "QLabel.setMovie": ('PySide2.QtGui.QMovie',), + "QLabel.setNum": [('float',), ('int',)], + "QLabel.setOpenExternalLinks": ('bool',), + "QLabel.setPicture": ('PySide2.QtGui.QPicture',), + "QLabel.setPixmap": ('PySide2.QtGui.QPixmap',), + "QLabel.setScaledContents": ('bool',), + "QLabel.setSelection": ('int', 'int'), + "QLabel.setText": ('str',), + "QLabel.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QLabel.setTextInteractionFlags": ('TextInteractionFlags',), + "QLabel.setWordWrap": ('bool',), + "QLabel.sizeHint": (), + "QLabel.text": (), + "QLabel.textFormat": (), + "QLabel.textInteractionFlags": (), + "QLabel.wordWrap": (), + + # class PySide2.QtWidgets.QLayout: + "QLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + "QLayout.activate": (), + "QLayout.addChildLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.addChildWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.adoptLayout": ('PySide2.QtWidgets.QLayout',), + "QLayout.alignmentRect": ('PySide2.QtCore.QRect',), + "QLayout.childEvent": ('PySide2.QtCore.QChildEvent',), + "QLayout.closestAcceptableSize": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QSize'), + "QLayout.contentsMargins": (), + "QLayout.contentsRect": (), + "QLayout.controlTypes": (), + "QLayout.count": (), + "QLayout.expandingDirections": (), + "QLayout.geometry": (), + "QLayout.getContentsMargins": ('int', 'int', 'int', 'int'), + "QLayout.indexOf": ('PySide2.QtWidgets.QWidget',), + "QLayout.invalidate": (), + "QLayout.isEmpty": (), + "QLayout.isEnabled": (), + "QLayout.itemAt": ('int',), + "QLayout.layout": (), + "QLayout.margin": (), + "QLayout.maximumSize": (), + "QLayout.menuBar": (), + "QLayout.minimumSize": (), + "QLayout.parentWidget": (), + "QLayout.removeItem": ('PySide2.QtWidgets.QLayoutItem',), + "QLayout.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QLayout.replaceWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget', 'FindChildOptions'), + "QLayout.setAlignment": [('Alignment',), ('PySide2.QtWidgets.QLayout', 'Alignment'), ('PySide2.QtWidgets.QWidget', 'Alignment')], + "QLayout.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLayout.setEnabled": ('bool',), + "QLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QLayout.setMargin": ('int',), + "QLayout.setMenuBar": ('PySide2.QtWidgets.QWidget',), + "QLayout.setSizeConstraint": ('PySide2.QtWidgets.QLayout.SizeConstraint',), + "QLayout.setSpacing": ('int',), + "QLayout.sizeConstraint": (), + "QLayout.spacing": (), + "QLayout.takeAt": ('int',), + "QLayout.totalHeightForWidth": ('int',), + "QLayout.totalMaximumSize": (), + "QLayout.totalMinimumSize": (), + "QLayout.totalSizeHint": (), + "QLayout.update": (), + "QLayout.widgetEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QLayoutItem: + "QLayoutItem.__init__": ('Alignment',), + "QLayoutItem.alignment": (), + "QLayoutItem.controlTypes": (), + "QLayoutItem.expandingDirections": (), + "QLayoutItem.geometry": (), + "QLayoutItem.hasHeightForWidth": (), + "QLayoutItem.heightForWidth": ('int',), + "QLayoutItem.invalidate": (), + "QLayoutItem.isEmpty": (), + "QLayoutItem.layout": (), + "QLayoutItem.maximumSize": (), + "QLayoutItem.minimumHeightForWidth": ('int',), + "QLayoutItem.minimumSize": (), + "QLayoutItem.setAlignment": ('Alignment',), + "QLayoutItem.setGeometry": ('PySide2.QtCore.QRect',), + "QLayoutItem.sizeHint": (), + "QLayoutItem.spacerItem": (), + "QLayoutItem.widget": (), + + # class PySide2.QtWidgets.QLineEdit: + "QLineEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QLineEdit.addAction": [('PySide2.QtGui.QIcon', 'PySide2.QtWidgets.QLineEdit.ActionPosition'), ('PySide2.QtWidgets.QAction',), ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QLineEdit.ActionPosition')], + "QLineEdit.alignment": (), + "QLineEdit.backspace": (), + "QLineEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QLineEdit.clear": (), + "QLineEdit.completer": (), + "QLineEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QLineEdit.copy": (), + "QLineEdit.createStandardContextMenu": (), + "QLineEdit.cursorBackward": ('bool', 'int'), + "QLineEdit.cursorForward": ('bool', 'int'), + "QLineEdit.cursorMoveStyle": (), + "QLineEdit.cursorPosition": (), + "QLineEdit.cursorPositionAt": ('PySide2.QtCore.QPoint',), + "QLineEdit.cursorRect": (), + "QLineEdit.cursorWordBackward": ('bool',), + "QLineEdit.cursorWordForward": ('bool',), + "QLineEdit.cut": (), + "QLineEdit.del_": (), + "QLineEdit.deselect": (), + "QLineEdit.displayText": (), + "QLineEdit.dragEnabled": (), + "QLineEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QLineEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QLineEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QLineEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QLineEdit.echoMode": (), + "QLineEdit.end": ('bool',), + "QLineEdit.event": ('PySide2.QtCore.QEvent',), + "QLineEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QLineEdit.getTextMargins": ('int', 'int', 'int', 'int'), + "QLineEdit.hasAcceptableInput": (), + "QLineEdit.hasFrame": (), + "QLineEdit.hasSelectedText": (), + "QLineEdit.home": ('bool',), + "QLineEdit.initStyleOption": ('PySide2.QtWidgets.QStyleOptionFrame',), + "QLineEdit.inputMask": (), + "QLineEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QLineEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QLineEdit.insert": ('str',), + "QLineEdit.isClearButtonEnabled": (), + "QLineEdit.isModified": (), + "QLineEdit.isReadOnly": (), + "QLineEdit.isRedoAvailable": (), + "QLineEdit.isUndoAvailable": (), + "QLineEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QLineEdit.maxLength": (), + "QLineEdit.minimumSizeHint": (), + "QLineEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QLineEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QLineEdit.paste": (), + "QLineEdit.placeholderText": (), + "QLineEdit.redo": (), + "QLineEdit.selectAll": (), + "QLineEdit.selectedText": (), + "QLineEdit.selectionStart": (), + "QLineEdit.setAlignment": ('Alignment',), + "QLineEdit.setClearButtonEnabled": ('bool',), + "QLineEdit.setCompleter": ('PySide2.QtWidgets.QCompleter',), + "QLineEdit.setCursorMoveStyle": ('PySide2.QtCore.Qt.CursorMoveStyle',), + "QLineEdit.setCursorPosition": ('int',), + "QLineEdit.setDragEnabled": ('bool',), + "QLineEdit.setEchoMode": ('PySide2.QtWidgets.QLineEdit.EchoMode',), + "QLineEdit.setFrame": ('bool',), + "QLineEdit.setInputMask": ('str',), + "QLineEdit.setMaxLength": ('int',), + "QLineEdit.setModified": ('bool',), + "QLineEdit.setPlaceholderText": ('str',), + "QLineEdit.setReadOnly": ('bool',), + "QLineEdit.setSelection": ('int', 'int'), + "QLineEdit.setText": ('str',), + "QLineEdit.setTextMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QLineEdit.setValidator": ('PySide2.QtGui.QValidator',), + "QLineEdit.sizeHint": (), + "QLineEdit.text": (), + "QLineEdit.textMargins": (), + "QLineEdit.undo": (), + "QLineEdit.validator": (), + + # class PySide2.QtWidgets.QListView: + "QListView.__init__": ('PySide2.QtWidgets.QWidget',), + "QListView.batchSize": (), + "QListView.clearPropertyFlags": (), + "QListView.contentsSize": (), + "QListView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QListView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QListView.doItemsLayout": (), + "QListView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QListView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QListView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListView.event": ('PySide2.QtCore.QEvent',), + "QListView.flow": (), + "QListView.gridSize": (), + "QListView.horizontalOffset": (), + "QListView.indexAt": ('PySide2.QtCore.QPoint',), + "QListView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QListView.isRowHidden": ('int',), + "QListView.isSelectionRectVisible": (), + "QListView.isWrapping": (), + "QListView.layoutMode": (), + "QListView.modelColumn": (), + "QListView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QListView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QListView.movement": (), + "QListView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QListView.rectForIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.reset": (), + "QListView.resizeContents": ('int', 'int'), + "QListView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QListView.resizeMode": (), + "QListView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QListView.scrollContentsBy": ('int', 'int'), + "QListView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListView.selectedIndexes": (), + "QListView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QListView.setBatchSize": ('int',), + "QListView.setFlow": ('PySide2.QtWidgets.QListView.Flow',), + "QListView.setGridSize": ('PySide2.QtCore.QSize',), + "QListView.setLayoutMode": ('PySide2.QtWidgets.QListView.LayoutMode',), + "QListView.setModelColumn": ('int',), + "QListView.setMovement": ('PySide2.QtWidgets.QListView.Movement',), + "QListView.setPositionForIndex": ('PySide2.QtCore.QPoint', 'PySide2.QtCore.QModelIndex'), + "QListView.setResizeMode": ('PySide2.QtWidgets.QListView.ResizeMode',), + "QListView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QListView.setRowHidden": ('int', 'bool'), + "QListView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QListView.setSelectionRectVisible": ('bool',), + "QListView.setSpacing": ('int',), + "QListView.setUniformItemSizes": ('bool',), + "QListView.setViewMode": ('PySide2.QtWidgets.QListView.ViewMode',), + "QListView.setWordWrap": ('bool',), + "QListView.setWrapping": ('bool',), + "QListView.spacing": (), + "QListView.startDrag": ('DropActions',), + "QListView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QListView.uniformItemSizes": (), + "QListView.updateGeometries": (), + "QListView.verticalOffset": (), + "QListView.viewMode": (), + "QListView.viewOptions": (), + "QListView.viewportSizeHint": (), + "QListView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QListView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QListView.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QListView.wordWrap": (), + + # class PySide2.QtWidgets.QListWidget: + "QListWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QListWidget.addItem": [('PySide2.QtWidgets.QListWidgetItem',), ('str',)], + "QListWidget.addItems": ('List[str]',), + "QListWidget.clear": (), + "QListWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.count": (), + "QListWidget.currentItem": (), + "QListWidget.currentRow": (), + "QListWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QListWidget.dropMimeData": ('int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QListWidget.editItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.event": ('PySide2.QtCore.QEvent',), + "QListWidget.findItems": ('str', 'MatchFlags'), + "QListWidget.indexFromItem": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.insertItem": [('int', 'PySide2.QtWidgets.QListWidgetItem'), ('int', 'str')], + "QListWidget.insertItems": ('int', 'List[str]'), + "QListWidget.isItemHidden": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isItemSelected": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.isSortingEnabled": (), + "QListWidget.item": ('int',), + "QListWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QListWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QListWidget.itemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.items": ('PySide2.QtCore.QMimeData',), + "QListWidget.mimeData": ('list',), + "QListWidget.mimeTypes": (), + "QListWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QListWidgetItem',)], + "QListWidget.removeItemWidget": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.row": ('PySide2.QtWidgets.QListWidgetItem',), + "QListWidget.scrollToItem": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QListWidget.selectedItems": (), + "QListWidget.setCurrentItem": [('PySide2.QtWidgets.QListWidgetItem',), ('PySide2.QtWidgets.QListWidgetItem', 'SelectionFlags')], + "QListWidget.setCurrentRow": [('int',), ('int', 'SelectionFlags')], + "QListWidget.setItemHidden": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemSelected": ('PySide2.QtWidgets.QListWidgetItem', 'bool'), + "QListWidget.setItemWidget": ('PySide2.QtWidgets.QListWidgetItem', 'PySide2.QtWidgets.QWidget'), + "QListWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QListWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QListWidget.setSortingEnabled": ('bool',), + "QListWidget.sortItems": ('PySide2.QtCore.Qt.SortOrder',), + "QListWidget.supportedDropActions": (), + "QListWidget.takeItem": ('int',), + "QListWidget.visualItemRect": ('PySide2.QtWidgets.QListWidgetItem',), + + # class PySide2.QtWidgets.QListWidgetItem: + "QListWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidget', 'int'), ('PySide2.QtWidgets.QListWidgetItem',), ('str', 'PySide2.QtWidgets.QListWidget', 'int')], + "QListWidgetItem.background": (), + "QListWidgetItem.backgroundColor": (), + "QListWidgetItem.checkState": (), + "QListWidgetItem.clone": (), + "QListWidgetItem.data": ('int',), + "QListWidgetItem.flags": (), + "QListWidgetItem.font": (), + "QListWidgetItem.foreground": (), + "QListWidgetItem.icon": (), + "QListWidgetItem.isHidden": (), + "QListWidgetItem.isSelected": (), + "QListWidgetItem.listWidget": (), + "QListWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QListWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QListWidgetItem.setData": ('int', 'Any'), + "QListWidgetItem.setFlags": ('ItemFlags',), + "QListWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QListWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QListWidgetItem.setHidden": ('bool',), + "QListWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QListWidgetItem.setSelected": ('bool',), + "QListWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QListWidgetItem.setStatusTip": ('str',), + "QListWidgetItem.setText": ('str',), + "QListWidgetItem.setTextAlignment": ('int',), + "QListWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QListWidgetItem.setToolTip": ('str',), + "QListWidgetItem.setWhatsThis": ('str',), + "QListWidgetItem.sizeHint": (), + "QListWidgetItem.statusTip": (), + "QListWidgetItem.text": (), + "QListWidgetItem.textAlignment": (), + "QListWidgetItem.textColor": (), + "QListWidgetItem.toolTip": (), + "QListWidgetItem.type": (), + "QListWidgetItem.whatsThis": (), + "QListWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QMainWindow: + "QMainWindow.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMainWindow.addDockWidget": [('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget'), ('PySide2.QtCore.Qt.DockWidgetArea', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation')], + "QMainWindow.addToolBar": [('PySide2.QtCore.Qt.ToolBarArea', 'PySide2.QtWidgets.QToolBar'), ('PySide2.QtWidgets.QToolBar',), ('str',)], + "QMainWindow.addToolBarBreak": ('PySide2.QtCore.Qt.ToolBarArea',), + "QMainWindow.centralWidget": (), + "QMainWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMainWindow.corner": ('PySide2.QtCore.Qt.Corner',), + "QMainWindow.createPopupMenu": (), + "QMainWindow.dockOptions": (), + "QMainWindow.dockWidgetArea": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.documentMode": (), + "QMainWindow.event": ('PySide2.QtCore.QEvent',), + "QMainWindow.iconSize": (), + "QMainWindow.insertToolBar": ('PySide2.QtWidgets.QToolBar', 'PySide2.QtWidgets.QToolBar'), + "QMainWindow.insertToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.isAnimated": (), + "QMainWindow.isDockNestingEnabled": (), + "QMainWindow.isSeparator": ('PySide2.QtCore.QPoint',), + "QMainWindow.menuBar": (), + "QMainWindow.menuWidget": (), + "QMainWindow.removeDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.removeToolBar": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.removeToolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.resizeDocks": ('list', 'list', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.restoreDockWidget": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.restoreState": ('PySide2.QtCore.QByteArray', 'int'), + "QMainWindow.saveState": ('int',), + "QMainWindow.setAnimated": ('bool',), + "QMainWindow.setCentralWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setCorner": ('PySide2.QtCore.Qt.Corner', 'PySide2.QtCore.Qt.DockWidgetArea'), + "QMainWindow.setDockNestingEnabled": ('bool',), + "QMainWindow.setDockOptions": ('DockOptions',), + "QMainWindow.setDocumentMode": ('bool',), + "QMainWindow.setIconSize": ('PySide2.QtCore.QSize',), + "QMainWindow.setMenuBar": ('PySide2.QtWidgets.QMenuBar',), + "QMainWindow.setMenuWidget": ('PySide2.QtWidgets.QWidget',), + "QMainWindow.setStatusBar": ('PySide2.QtWidgets.QStatusBar',), + "QMainWindow.setTabPosition": ('DockWidgetAreas', 'PySide2.QtWidgets.QTabWidget.TabPosition'), + "QMainWindow.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMainWindow.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QMainWindow.setUnifiedTitleAndToolBarOnMac": ('bool',), + "QMainWindow.splitDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget', 'PySide2.QtCore.Qt.Orientation'), + "QMainWindow.statusBar": (), + "QMainWindow.tabPosition": ('PySide2.QtCore.Qt.DockWidgetArea',), + "QMainWindow.tabShape": (), + "QMainWindow.tabifiedDockWidgets": ('PySide2.QtWidgets.QDockWidget',), + "QMainWindow.tabifyDockWidget": ('PySide2.QtWidgets.QDockWidget', 'PySide2.QtWidgets.QDockWidget'), + "QMainWindow.takeCentralWidget": (), + "QMainWindow.toolBarArea": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolBarBreak": ('PySide2.QtWidgets.QToolBar',), + "QMainWindow.toolButtonStyle": (), + "QMainWindow.unifiedTitleAndToolBarOnMac": (), + + # class PySide2.QtWidgets.QMdiArea: + "QMdiArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.activateNextSubWindow": (), + "QMdiArea.activatePreviousSubWindow": (), + "QMdiArea.activationOrder": (), + "QMdiArea.activeSubWindow": (), + "QMdiArea.addSubWindow": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMdiArea.background": (), + "QMdiArea.cascadeSubWindows": (), + "QMdiArea.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiArea.closeActiveSubWindow": (), + "QMdiArea.closeAllSubWindows": (), + "QMdiArea.currentSubWindow": (), + "QMdiArea.documentMode": (), + "QMdiArea.event": ('PySide2.QtCore.QEvent',), + "QMdiArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiArea.minimumSizeHint": (), + "QMdiArea.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiArea.removeSubWindow": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiArea.scrollContentsBy": ('int', 'int'), + "QMdiArea.setActivationOrder": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.setActiveSubWindow": ('PySide2.QtWidgets.QMdiSubWindow',), + "QMdiArea.setBackground": ('PySide2.QtGui.QBrush',), + "QMdiArea.setDocumentMode": ('bool',), + "QMdiArea.setOption": ('PySide2.QtWidgets.QMdiArea.AreaOption', 'bool'), + "QMdiArea.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QMdiArea.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QMdiArea.setTabsClosable": ('bool',), + "QMdiArea.setTabsMovable": ('bool',), + "QMdiArea.setViewMode": ('PySide2.QtWidgets.QMdiArea.ViewMode',), + "QMdiArea.setupViewport": ('PySide2.QtWidgets.QWidget',), + "QMdiArea.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiArea.sizeHint": (), + "QMdiArea.subWindowList": ('PySide2.QtWidgets.QMdiArea.WindowOrder',), + "QMdiArea.tabPosition": (), + "QMdiArea.tabShape": (), + "QMdiArea.tabsClosable": (), + "QMdiArea.tabsMovable": (), + "QMdiArea.testOption": ('PySide2.QtWidgets.QMdiArea.AreaOption',), + "QMdiArea.tileSubWindows": (), + "QMdiArea.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiArea.viewMode": (), + "QMdiArea.viewportEvent": ('PySide2.QtCore.QEvent',), + + # class PySide2.QtWidgets.QMdiSubWindow: + "QMdiSubWindow.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QMdiSubWindow.changeEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.childEvent": ('PySide2.QtCore.QChildEvent',), + "QMdiSubWindow.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMdiSubWindow.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QMdiSubWindow.event": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMdiSubWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMdiSubWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMdiSubWindow.isShaded": (), + "QMdiSubWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMdiSubWindow.keyboardPageStep": (), + "QMdiSubWindow.keyboardSingleStep": (), + "QMdiSubWindow.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMdiSubWindow.maximizedButtonsWidget": (), + "QMdiSubWindow.maximizedSystemMenuIconWidget": (), + "QMdiSubWindow.mdiArea": (), + "QMdiSubWindow.minimumSizeHint": (), + "QMdiSubWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMdiSubWindow.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QMdiSubWindow.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMdiSubWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMdiSubWindow.setKeyboardPageStep": ('int',), + "QMdiSubWindow.setKeyboardSingleStep": ('int',), + "QMdiSubWindow.setOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption', 'bool'), + "QMdiSubWindow.setSystemMenu": ('PySide2.QtWidgets.QMenu',), + "QMdiSubWindow.setWidget": ('PySide2.QtWidgets.QWidget',), + "QMdiSubWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMdiSubWindow.showShaded": (), + "QMdiSubWindow.showSystemMenu": (), + "QMdiSubWindow.sizeHint": (), + "QMdiSubWindow.systemMenu": (), + "QMdiSubWindow.testOption": ('PySide2.QtWidgets.QMdiSubWindow.SubWindowOption',), + "QMdiSubWindow.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMdiSubWindow.widget": (), + + # class PySide2.QtWidgets.QMenu: + "QMenu.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QMenu.actionAt": ('PySide2.QtCore.QPoint',), + "QMenu.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenu.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenu.activeAction": (), + "QMenu.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtGui.QIcon', 'str', 'object', 'PySide2.QtGui.QKeySequence'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtGui.QKeySequence'), ('str', 'object', 'PySide2.QtGui.QKeySequence')], + "QMenu.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenu.addSection": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QMenu.addSeparator": (), + "QMenu.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenu.clear": (), + "QMenu.columnCount": (), + "QMenu.defaultAction": (), + "QMenu.enterEvent": ('PySide2.QtCore.QEvent',), + "QMenu.event": ('PySide2.QtCore.QEvent',), + "QMenu.exec_": [(), ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), ('list', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget')], + "QMenu.focusNextPrevChild": ('bool',), + "QMenu.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QMenu.hideTearOffMenu": (), + "QMenu.icon": (), + "QMenu.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenu.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenu.insertSection": [('PySide2.QtWidgets.QAction', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QAction', 'str')], + "QMenu.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenu.isEmpty": (), + "QMenu.isTearOffEnabled": (), + "QMenu.isTearOffMenuVisible": (), + "QMenu.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenu.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenu.menuAction": (), + "QMenu.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenu.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenu.popup": ('PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QAction'), + "QMenu.separatorsCollapsible": (), + "QMenu.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QMenu.setIcon": ('PySide2.QtGui.QIcon',), + "QMenu.setSeparatorsCollapsible": ('bool',), + "QMenu.setTearOffEnabled": ('bool',), + "QMenu.setTitle": ('str',), + "QMenu.setToolTipsVisible": ('bool',), + "QMenu.showTearOffMenu": [(), ('PySide2.QtCore.QPoint',)], + "QMenu.sizeHint": (), + "QMenu.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QMenu.title": (), + "QMenu.toolTipsVisible": (), + "QMenu.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QMenuBar: + "QMenuBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QMenuBar.actionAt": ('PySide2.QtCore.QPoint',), + "QMenuBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QMenuBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QMenuBar.activeAction": (), + "QMenuBar.addAction": [('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str'), ('str', 'object')], + "QMenuBar.addMenu": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QMenu',), ('str',)], + "QMenuBar.addSeparator": (), + "QMenuBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.clear": (), + "QMenuBar.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QMenuBar.event": ('PySide2.QtCore.QEvent',), + "QMenuBar.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QMenuBar.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QMenuBar.heightForWidth": ('int',), + "QMenuBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionMenuItem', 'PySide2.QtWidgets.QAction'), + "QMenuBar.insertMenu": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QMenu'), + "QMenuBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QMenuBar.isDefaultUp": (), + "QMenuBar.isNativeMenuBar": (), + "QMenuBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMenuBar.leaveEvent": ('PySide2.QtCore.QEvent',), + "QMenuBar.minimumSizeHint": (), + "QMenuBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QMenuBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QMenuBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMenuBar.setActiveAction": ('PySide2.QtWidgets.QAction',), + "QMenuBar.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QMenuBar.setDefaultUp": ('bool',), + "QMenuBar.setNativeMenuBar": ('bool',), + "QMenuBar.setVisible": ('bool',), + "QMenuBar.sizeHint": (), + "QMenuBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtWidgets.QMessageBox: + "QMessageBox.__init__": [('PySide2.QtWidgets.QMessageBox.Icon', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget',)], + "QMessageBox.about": ('PySide2.QtWidgets.QWidget', 'str', 'str'), + "QMessageBox.aboutQt": ('PySide2.QtWidgets.QWidget', 'str'), + "QMessageBox.addButton": [('PySide2.QtWidgets.QAbstractButton', 'PySide2.QtWidgets.QMessageBox.ButtonRole'), ('PySide2.QtWidgets.QMessageBox.StandardButton',), ('str', 'PySide2.QtWidgets.QMessageBox.ButtonRole')], + "QMessageBox.button": ('PySide2.QtWidgets.QMessageBox.StandardButton',), + "QMessageBox.buttonRole": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.buttonText": ('int',), + "QMessageBox.buttons": (), + "QMessageBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QMessageBox.checkBox": (), + "QMessageBox.clickedButton": (), + "QMessageBox.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QMessageBox.critical": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.defaultButton": (), + "QMessageBox.detailedText": (), + "QMessageBox.escapeButton": (), + "QMessageBox.event": ('PySide2.QtCore.QEvent',), + "QMessageBox.icon": (), + "QMessageBox.iconPixmap": (), + "QMessageBox.information": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.informativeText": (), + "QMessageBox.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QMessageBox.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QMessageBox.question": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + "QMessageBox.removeButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QMessageBox.setButtonText": ('int', 'str'), + "QMessageBox.setCheckBox": ('PySide2.QtWidgets.QCheckBox',), + "QMessageBox.setDefaultButton": [('PySide2.QtWidgets.QMessageBox.StandardButton',), ('PySide2.QtWidgets.QPushButton',)], + "QMessageBox.setDetailedText": ('str',), + "QMessageBox.setEscapeButton": [('PySide2.QtWidgets.QAbstractButton',), ('PySide2.QtWidgets.QMessageBox.StandardButton',)], + "QMessageBox.setIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.setIconPixmap": ('PySide2.QtGui.QPixmap',), + "QMessageBox.setInformativeText": ('str',), + "QMessageBox.setStandardButtons": ('StandardButtons',), + "QMessageBox.setText": ('str',), + "QMessageBox.setTextFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QMessageBox.setTextInteractionFlags": ('TextInteractionFlags',), + "QMessageBox.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QMessageBox.setWindowTitle": ('str',), + "QMessageBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QMessageBox.standardButton": ('PySide2.QtWidgets.QAbstractButton',), + "QMessageBox.standardButtons": (), + "QMessageBox.standardIcon": ('PySide2.QtWidgets.QMessageBox.Icon',), + "QMessageBox.text": (), + "QMessageBox.textFormat": (), + "QMessageBox.textInteractionFlags": (), + "QMessageBox.warning": [('PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtWidgets.QMessageBox.StandardButton', 'PySide2.QtWidgets.QMessageBox.StandardButton'), ('PySide2.QtWidgets.QWidget', 'str', 'str', 'StandardButtons', 'PySide2.QtWidgets.QMessageBox.StandardButton')], + + # class PySide2.QtWidgets.QMouseEventTransition: + "QMouseEventTransition.__init__": [('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent.Type', 'PySide2.QtCore.Qt.MouseButton', 'PySide2.QtCore.QState'), ('PySide2.QtCore.QState',)], + "QMouseEventTransition.button": (), + "QMouseEventTransition.eventTest": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.hitTestPath": (), + "QMouseEventTransition.modifierMask": (), + "QMouseEventTransition.onTransition": ('PySide2.QtCore.QEvent',), + "QMouseEventTransition.setButton": ('PySide2.QtCore.Qt.MouseButton',), + "QMouseEventTransition.setHitTestPath": ('PySide2.QtGui.QPainterPath',), + "QMouseEventTransition.setModifierMask": ('KeyboardModifiers',), + + # class PySide2.QtWidgets.QOpenGLWidget: + "QOpenGLWidget.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QOpenGLWidget.context": (), + "QOpenGLWidget.defaultFramebufferObject": (), + "QOpenGLWidget.doneCurrent": (), + "QOpenGLWidget.event": ('PySide2.QtCore.QEvent',), + "QOpenGLWidget.format": (), + "QOpenGLWidget.grabFramebuffer": (), + "QOpenGLWidget.initializeGL": (), + "QOpenGLWidget.isValid": (), + "QOpenGLWidget.makeCurrent": (), + "QOpenGLWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QOpenGLWidget.paintEngine": (), + "QOpenGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QOpenGLWidget.paintGL": (), + "QOpenGLWidget.redirected": ('PySide2.QtCore.QPoint',), + "QOpenGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QOpenGLWidget.resizeGL": ('int', 'int'), + "QOpenGLWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QOpenGLWidget.setUpdateBehavior": ('PySide2.QtWidgets.QOpenGLWidget.UpdateBehavior',), + "QOpenGLWidget.updateBehavior": (), + + # class PySide2.QtWidgets.QPanGesture: + "QPanGesture.__init__": ('PySide2.QtCore.QObject',), + "QPanGesture.acceleration": (), + "QPanGesture.delta": (), + "QPanGesture.lastOffset": (), + "QPanGesture.offset": (), + "QPanGesture.setAcceleration": ('float',), + "QPanGesture.setLastOffset": ('PySide2.QtCore.QPointF',), + "QPanGesture.setOffset": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QPinchGesture: + "QPinchGesture.__init__": ('PySide2.QtCore.QObject',), + "QPinchGesture.centerPoint": (), + "QPinchGesture.changeFlags": (), + "QPinchGesture.lastCenterPoint": (), + "QPinchGesture.lastRotationAngle": (), + "QPinchGesture.lastScaleFactor": (), + "QPinchGesture.rotationAngle": (), + "QPinchGesture.scaleFactor": (), + "QPinchGesture.setCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setChangeFlags": ('ChangeFlags',), + "QPinchGesture.setLastCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setLastRotationAngle": ('float',), + "QPinchGesture.setLastScaleFactor": ('float',), + "QPinchGesture.setRotationAngle": ('float',), + "QPinchGesture.setScaleFactor": ('float',), + "QPinchGesture.setStartCenterPoint": ('PySide2.QtCore.QPointF',), + "QPinchGesture.setTotalChangeFlags": ('ChangeFlags',), + "QPinchGesture.setTotalRotationAngle": ('float',), + "QPinchGesture.setTotalScaleFactor": ('float',), + "QPinchGesture.startCenterPoint": (), + "QPinchGesture.totalChangeFlags": (), + "QPinchGesture.totalRotationAngle": (), + "QPinchGesture.totalScaleFactor": (), + + # class PySide2.QtWidgets.QPlainTextDocumentLayout: + "QPlainTextDocumentLayout.__init__": ('PySide2.QtGui.QTextDocument',), + "QPlainTextDocumentLayout.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.cursorWidth": (), + "QPlainTextDocumentLayout.documentChanged": ('int', 'int', 'int'), + "QPlainTextDocumentLayout.documentSize": (), + "QPlainTextDocumentLayout.draw": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QAbstractTextDocumentLayout.PaintContext'), + "QPlainTextDocumentLayout.ensureBlockLayout": ('PySide2.QtGui.QTextBlock',), + "QPlainTextDocumentLayout.frameBoundingRect": ('PySide2.QtGui.QTextFrame',), + "QPlainTextDocumentLayout.hitTest": ('PySide2.QtCore.QPointF', 'PySide2.QtCore.Qt.HitTestAccuracy'), + "QPlainTextDocumentLayout.pageCount": (), + "QPlainTextDocumentLayout.requestUpdate": (), + "QPlainTextDocumentLayout.setCursorWidth": ('int',), + + # class PySide2.QtWidgets.QPlainTextEdit: + "QPlainTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPlainTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.appendHtml": ('str',), + "QPlainTextEdit.appendPlainText": ('str',), + "QPlainTextEdit.backgroundVisible": (), + "QPlainTextEdit.blockBoundingGeometry": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockBoundingRect": ('PySide2.QtGui.QTextBlock',), + "QPlainTextEdit.blockCount": (), + "QPlainTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.canPaste": (), + "QPlainTextEdit.centerCursor": (), + "QPlainTextEdit.centerOnScroll": (), + "QPlainTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.clear": (), + "QPlainTextEdit.contentOffset": (), + "QPlainTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QPlainTextEdit.copy": (), + "QPlainTextEdit.createMimeDataFromSelection": (), + "QPlainTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QPlainTextEdit.currentCharFormat": (), + "QPlainTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QPlainTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QPlainTextEdit.cursorWidth": (), + "QPlainTextEdit.cut": (), + "QPlainTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.document": (), + "QPlainTextEdit.documentTitle": (), + "QPlainTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QPlainTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QPlainTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QPlainTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QPlainTextEdit.ensureCursorVisible": (), + "QPlainTextEdit.event": ('PySide2.QtCore.QEvent',), + "QPlainTextEdit.extraSelections": (), + "QPlainTextEdit.find": [('PySide2.QtCore.QRegExp', 'FindFlags'), ('int',), ('str', 'FindFlags')], + "QPlainTextEdit.firstVisibleBlock": (), + "QPlainTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.focusNextPrevChild": ('bool',), + "QPlainTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPlainTextEdit.getPaintContext": (), + "QPlainTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QPlainTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QPlainTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QPlainTextEdit.insertPlainText": ('str',), + "QPlainTextEdit.isReadOnly": (), + "QPlainTextEdit.isUndoRedoEnabled": (), + "QPlainTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QPlainTextEdit.lineWrapMode": (), + "QPlainTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QPlainTextEdit.maximumBlockCount": (), + "QPlainTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QPlainTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QPlainTextEdit.overwriteMode": (), + "QPlainTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPlainTextEdit.paste": (), + "QPlainTextEdit.placeholderText": (), + "QPlainTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QPlainTextEdit.redo": (), + "QPlainTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QPlainTextEdit.scrollContentsBy": ('int', 'int'), + "QPlainTextEdit.selectAll": (), + "QPlainTextEdit.setBackgroundVisible": ('bool',), + "QPlainTextEdit.setCenterOnScroll": ('bool',), + "QPlainTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QPlainTextEdit.setCursorWidth": ('int',), + "QPlainTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QPlainTextEdit.setDocumentTitle": ('str',), + "QPlainTextEdit.setExtraSelections": ('list',), + "QPlainTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QPlainTextEdit.LineWrapMode',), + "QPlainTextEdit.setMaximumBlockCount": ('int',), + "QPlainTextEdit.setOverwriteMode": ('bool',), + "QPlainTextEdit.setPlaceholderText": ('str',), + "QPlainTextEdit.setPlainText": ('str',), + "QPlainTextEdit.setReadOnly": ('bool',), + "QPlainTextEdit.setTabChangesFocus": ('bool',), + "QPlainTextEdit.setTabStopWidth": ('int',), + "QPlainTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QPlainTextEdit.setTextInteractionFlags": ('TextInteractionFlags',), + "QPlainTextEdit.setUndoRedoEnabled": ('bool',), + "QPlainTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QPlainTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QPlainTextEdit.tabChangesFocus": (), + "QPlainTextEdit.tabStopWidth": (), + "QPlainTextEdit.textCursor": (), + "QPlainTextEdit.textInteractionFlags": (), + "QPlainTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QPlainTextEdit.toPlainText": (), + "QPlainTextEdit.undo": (), + "QPlainTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QPlainTextEdit.wordWrapMode": (), + "QPlainTextEdit.zoomIn": ('int',), + "QPlainTextEdit.zoomInF": ('float',), + "QPlainTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QProgressBar: + "QProgressBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QProgressBar.alignment": (), + "QProgressBar.event": ('PySide2.QtCore.QEvent',), + "QProgressBar.format": (), + "QProgressBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionProgressBar',), + "QProgressBar.invertedAppearance": (), + "QProgressBar.isTextVisible": (), + "QProgressBar.maximum": (), + "QProgressBar.minimum": (), + "QProgressBar.minimumSizeHint": (), + "QProgressBar.orientation": (), + "QProgressBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QProgressBar.reset": (), + "QProgressBar.resetFormat": (), + "QProgressBar.setAlignment": ('Alignment',), + "QProgressBar.setFormat": ('str',), + "QProgressBar.setInvertedAppearance": ('bool',), + "QProgressBar.setMaximum": ('int',), + "QProgressBar.setMinimum": ('int',), + "QProgressBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QProgressBar.setRange": ('int', 'int'), + "QProgressBar.setTextDirection": ('PySide2.QtWidgets.QProgressBar.Direction',), + "QProgressBar.setTextVisible": ('bool',), + "QProgressBar.setValue": ('int',), + "QProgressBar.sizeHint": (), + "QProgressBar.text": (), + "QProgressBar.textDirection": (), + "QProgressBar.value": (), + + # class PySide2.QtWidgets.QProgressDialog: + "QProgressDialog.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'str', 'int', 'int', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QProgressDialog.autoClose": (), + "QProgressDialog.autoReset": (), + "QProgressDialog.cancel": (), + "QProgressDialog.changeEvent": ('PySide2.QtCore.QEvent',), + "QProgressDialog.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QProgressDialog.forceShow": (), + "QProgressDialog.labelText": (), + "QProgressDialog.maximum": (), + "QProgressDialog.minimum": (), + "QProgressDialog.minimumDuration": (), + "QProgressDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QProgressDialog.reset": (), + "QProgressDialog.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QProgressDialog.setAutoClose": ('bool',), + "QProgressDialog.setAutoReset": ('bool',), + "QProgressDialog.setBar": ('PySide2.QtWidgets.QProgressBar',), + "QProgressDialog.setCancelButton": ('PySide2.QtWidgets.QPushButton',), + "QProgressDialog.setCancelButtonText": ('str',), + "QProgressDialog.setLabel": ('PySide2.QtWidgets.QLabel',), + "QProgressDialog.setLabelText": ('str',), + "QProgressDialog.setMaximum": ('int',), + "QProgressDialog.setMinimum": ('int',), + "QProgressDialog.setMinimumDuration": ('int',), + "QProgressDialog.setRange": ('int', 'int'), + "QProgressDialog.setValue": ('int',), + "QProgressDialog.showEvent": ('PySide2.QtGui.QShowEvent',), + "QProgressDialog.sizeHint": (), + "QProgressDialog.value": (), + "QProgressDialog.wasCanceled": (), + + # class PySide2.QtWidgets.QPushButton: + "QPushButton.__init__": [('PySide2.QtGui.QIcon', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QPushButton.autoDefault": (), + "QPushButton.event": ('PySide2.QtCore.QEvent',), + "QPushButton.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QPushButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QPushButton.isDefault": (), + "QPushButton.isFlat": (), + "QPushButton.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QPushButton.menu": (), + "QPushButton.minimumSizeHint": (), + "QPushButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QPushButton.setAutoDefault": ('bool',), + "QPushButton.setDefault": ('bool',), + "QPushButton.setFlat": ('bool',), + "QPushButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QPushButton.showMenu": (), + "QPushButton.sizeHint": (), + + # class PySide2.QtWidgets.QRadioButton: + "QRadioButton.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QRadioButton.event": ('PySide2.QtCore.QEvent',), + "QRadioButton.hitButton": ('PySide2.QtCore.QPoint',), + "QRadioButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionButton',), + "QRadioButton.minimumSizeHint": (), + "QRadioButton.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QRadioButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRadioButton.sizeHint": (), + + # class PySide2.QtWidgets.QRubberBand: + "QRubberBand.__init__": ('PySide2.QtWidgets.QRubberBand.Shape', 'PySide2.QtWidgets.QWidget'), + "QRubberBand.changeEvent": ('PySide2.QtCore.QEvent',), + "QRubberBand.event": ('PySide2.QtCore.QEvent',), + "QRubberBand.initStyleOption": ('PySide2.QtWidgets.QStyleOptionRubberBand',), + "QRubberBand.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QRubberBand.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QRubberBand.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QRubberBand.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QRubberBand.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QRubberBand.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QRubberBand.shape": (), + "QRubberBand.showEvent": ('PySide2.QtGui.QShowEvent',), + + # class PySide2.QtWidgets.QScrollArea: + "QScrollArea.__init__": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.alignment": (), + "QScrollArea.ensureVisible": ('int', 'int', 'int', 'int'), + "QScrollArea.ensureWidgetVisible": ('PySide2.QtWidgets.QWidget', 'int', 'int'), + "QScrollArea.event": ('PySide2.QtCore.QEvent',), + "QScrollArea.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QScrollArea.focusNextPrevChild": ('bool',), + "QScrollArea.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QScrollArea.scrollContentsBy": ('int', 'int'), + "QScrollArea.setAlignment": ('Alignment',), + "QScrollArea.setWidget": ('PySide2.QtWidgets.QWidget',), + "QScrollArea.setWidgetResizable": ('bool',), + "QScrollArea.sizeHint": (), + "QScrollArea.takeWidget": (), + "QScrollArea.viewportSizeHint": (), + "QScrollArea.widget": (), + "QScrollArea.widgetResizable": (), + + # class PySide2.QtWidgets.QScrollBar: + "QScrollBar.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QScrollBar.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QScrollBar.event": ('PySide2.QtCore.QEvent',), + "QScrollBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QScrollBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QScrollBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QScrollBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QScrollBar.sizeHint": (), + "QScrollBar.sliderChange": ('PySide2.QtWidgets.QAbstractSlider.SliderChange',), + "QScrollBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QShortcut: + "QShortcut.__init__": [('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'Callable', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtGui.QKeySequence', 'PySide2.QtWidgets.QWidget', 'str', 'str', 'PySide2.QtCore.Qt.ShortcutContext'), ('PySide2.QtWidgets.QWidget',)], + "QShortcut.autoRepeat": (), + "QShortcut.context": (), + "QShortcut.event": ('PySide2.QtCore.QEvent',), + "QShortcut.id": (), + "QShortcut.isEnabled": (), + "QShortcut.key": (), + "QShortcut.parentWidget": (), + "QShortcut.setAutoRepeat": ('bool',), + "QShortcut.setContext": ('PySide2.QtCore.Qt.ShortcutContext',), + "QShortcut.setEnabled": ('bool',), + "QShortcut.setKey": ('PySide2.QtGui.QKeySequence',), + "QShortcut.setWhatsThis": ('str',), + "QShortcut.whatsThis": (), + + # class PySide2.QtWidgets.QSizeGrip: + "QSizeGrip.__init__": ('PySide2.QtWidgets.QWidget',), + "QSizeGrip.event": ('PySide2.QtCore.QEvent',), + "QSizeGrip.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QSizeGrip.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QSizeGrip.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSizeGrip.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QSizeGrip.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSizeGrip.setVisible": ('bool',), + "QSizeGrip.showEvent": ('PySide2.QtGui.QShowEvent',), + "QSizeGrip.sizeHint": (), + + # class PySide2.QtWidgets.QSizePolicy: + "QSizePolicy.__init__": [(), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.ControlType')], + "QSizePolicy.__copy__": (), + "QSizePolicy.controlType": (), + "QSizePolicy.expandingDirections": (), + "QSizePolicy.hasHeightForWidth": (), + "QSizePolicy.hasWidthForHeight": (), + "QSizePolicy.horizontalPolicy": (), + "QSizePolicy.horizontalStretch": (), + "QSizePolicy.retainSizeWhenHidden": (), + "QSizePolicy.setControlType": ('PySide2.QtWidgets.QSizePolicy.ControlType',), + "QSizePolicy.setHeightForWidth": ('bool',), + "QSizePolicy.setHorizontalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setHorizontalStretch": ('int',), + "QSizePolicy.setRetainSizeWhenHidden": ('bool',), + "QSizePolicy.setVerticalPolicy": ('PySide2.QtWidgets.QSizePolicy.Policy',), + "QSizePolicy.setVerticalStretch": ('int',), + "QSizePolicy.setWidthForHeight": ('bool',), + "QSizePolicy.transpose": (), + "QSizePolicy.transposed": (), + "QSizePolicy.verticalPolicy": (), + "QSizePolicy.verticalStretch": (), + + # class PySide2.QtWidgets.QSlider: + "QSlider.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSlider.event": ('PySide2.QtCore.QEvent',), + "QSlider.initStyleOption": ('PySide2.QtWidgets.QStyleOptionSlider',), + "QSlider.minimumSizeHint": (), + "QSlider.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSlider.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSlider.setTickInterval": ('int',), + "QSlider.setTickPosition": ('PySide2.QtWidgets.QSlider.TickPosition',), + "QSlider.sizeHint": (), + "QSlider.tickInterval": (), + "QSlider.tickPosition": (), + + # class PySide2.QtWidgets.QSpacerItem: + "QSpacerItem.__init__": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.changeSize": ('int', 'int', 'PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy'), + "QSpacerItem.expandingDirections": (), + "QSpacerItem.geometry": (), + "QSpacerItem.isEmpty": (), + "QSpacerItem.maximumSize": (), + "QSpacerItem.minimumSize": (), + "QSpacerItem.setGeometry": ('PySide2.QtCore.QRect',), + "QSpacerItem.sizeHint": (), + "QSpacerItem.sizePolicy": (), + "QSpacerItem.spacerItem": (), + + # class PySide2.QtWidgets.QSpinBox: + "QSpinBox.__init__": ('PySide2.QtWidgets.QWidget',), + "QSpinBox.cleanText": (), + "QSpinBox.displayIntegerBase": (), + "QSpinBox.event": ('PySide2.QtCore.QEvent',), + "QSpinBox.fixup": ('str',), + "QSpinBox.maximum": (), + "QSpinBox.minimum": (), + "QSpinBox.prefix": (), + "QSpinBox.setDisplayIntegerBase": ('int',), + "QSpinBox.setMaximum": ('int',), + "QSpinBox.setMinimum": ('int',), + "QSpinBox.setPrefix": ('str',), + "QSpinBox.setRange": ('int', 'int'), + "QSpinBox.setSingleStep": ('int',), + "QSpinBox.setSuffix": ('str',), + "QSpinBox.setValue": ('int',), + "QSpinBox.singleStep": (), + "QSpinBox.suffix": (), + "QSpinBox.textFromValue": ('int',), + "QSpinBox.validate": ('str', 'int'), + "QSpinBox.value": (), + "QSpinBox.valueFromText": ('str',), + + # class PySide2.QtWidgets.QSplashScreen: + "QSplashScreen.__init__": [('PySide2.QtGui.QPixmap', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QPixmap', 'WindowFlags')], + "QSplashScreen.clearMessage": (), + "QSplashScreen.drawContents": ('PySide2.QtGui.QPainter',), + "QSplashScreen.event": ('PySide2.QtCore.QEvent',), + "QSplashScreen.finish": ('PySide2.QtWidgets.QWidget',), + "QSplashScreen.message": (), + "QSplashScreen.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplashScreen.pixmap": (), + "QSplashScreen.setPixmap": ('PySide2.QtGui.QPixmap',), + "QSplashScreen.showMessage": ('str', 'int', 'PySide2.QtGui.QColor'), + + # class PySide2.QtWidgets.QSplitter: + "QSplitter.__init__": [('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QSplitter.addWidget": ('PySide2.QtWidgets.QWidget',), + "QSplitter.changeEvent": ('PySide2.QtCore.QEvent',), + "QSplitter.childEvent": ('PySide2.QtCore.QChildEvent',), + "QSplitter.childrenCollapsible": (), + "QSplitter.closestLegalPosition": ('int', 'int'), + "QSplitter.count": (), + "QSplitter.createHandle": (), + "QSplitter.event": ('PySide2.QtCore.QEvent',), + "QSplitter.getRange": ('int', 'int', 'int'), + "QSplitter.handle": ('int',), + "QSplitter.handleWidth": (), + "QSplitter.indexOf": ('PySide2.QtWidgets.QWidget',), + "QSplitter.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.isCollapsible": ('int',), + "QSplitter.minimumSizeHint": (), + "QSplitter.moveSplitter": ('int', 'int'), + "QSplitter.opaqueResize": (), + "QSplitter.orientation": (), + "QSplitter.refresh": (), + "QSplitter.replaceWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QSplitter.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitter.restoreState": ('PySide2.QtCore.QByteArray',), + "QSplitter.saveState": (), + "QSplitter.setChildrenCollapsible": ('bool',), + "QSplitter.setCollapsible": ('int', 'bool'), + "QSplitter.setHandleWidth": ('int',), + "QSplitter.setOpaqueResize": ('bool',), + "QSplitter.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitter.setRubberBand": ('int',), + "QSplitter.setSizes": ('list',), + "QSplitter.setStretchFactor": ('int', 'int'), + "QSplitter.sizeHint": (), + "QSplitter.sizes": (), + "QSplitter.widget": ('int',), + + # class PySide2.QtWidgets.QSplitterHandle: + "QSplitterHandle.__init__": ('PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QSplitter'), + "QSplitterHandle.closestLegalPosition": ('int',), + "QSplitterHandle.event": ('PySide2.QtCore.QEvent',), + "QSplitterHandle.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QSplitterHandle.moveSplitter": ('int',), + "QSplitterHandle.opaqueResize": (), + "QSplitterHandle.orientation": (), + "QSplitterHandle.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSplitterHandle.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QSplitterHandle.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QSplitterHandle.sizeHint": (), + "QSplitterHandle.splitter": (), + + # class PySide2.QtWidgets.QStackedLayout: + "QStackedLayout.__init__": [(), ('PySide2.QtWidgets.QLayout',), ('PySide2.QtWidgets.QWidget',)], + "QStackedLayout.addItem": ('PySide2.QtWidgets.QLayoutItem',), + "QStackedLayout.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.count": (), + "QStackedLayout.currentIndex": (), + "QStackedLayout.currentWidget": (), + "QStackedLayout.hasHeightForWidth": (), + "QStackedLayout.heightForWidth": ('int',), + "QStackedLayout.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedLayout.itemAt": ('int',), + "QStackedLayout.minimumSize": (), + "QStackedLayout.setCurrentIndex": ('int',), + "QStackedLayout.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedLayout.setGeometry": ('PySide2.QtCore.QRect',), + "QStackedLayout.setStackingMode": ('PySide2.QtWidgets.QStackedLayout.StackingMode',), + "QStackedLayout.sizeHint": (), + "QStackedLayout.stackingMode": (), + "QStackedLayout.takeAt": ('int',), + "QStackedLayout.widget": [(), ('int',)], + + # class PySide2.QtWidgets.QStackedWidget: + "QStackedWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.addWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.count": (), + "QStackedWidget.currentIndex": (), + "QStackedWidget.currentWidget": (), + "QStackedWidget.event": ('PySide2.QtCore.QEvent',), + "QStackedWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.insertWidget": ('int', 'PySide2.QtWidgets.QWidget'), + "QStackedWidget.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.setCurrentIndex": ('int',), + "QStackedWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QStackedWidget.widget": ('int',), + + # class PySide2.QtWidgets.QStatusBar: + "QStatusBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.addPermanentWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.addWidget": ('PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.clearMessage": (), + "QStatusBar.currentMessage": (), + "QStatusBar.event": ('PySide2.QtCore.QEvent',), + "QStatusBar.hideOrShow": (), + "QStatusBar.insertPermanentWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.insertWidget": ('int', 'PySide2.QtWidgets.QWidget', 'int'), + "QStatusBar.isSizeGripEnabled": (), + "QStatusBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QStatusBar.reformat": (), + "QStatusBar.removeWidget": ('PySide2.QtWidgets.QWidget',), + "QStatusBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QStatusBar.setSizeGripEnabled": ('bool',), + "QStatusBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QStatusBar.showMessage": ('str', 'int'), + + # class PySide2.QtWidgets.QStyle: + "QStyle.__init__": (), + "QStyle.alignedRect": ('PySide2.QtCore.Qt.LayoutDirection', 'Alignment', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QRect'), + "QStyle.combinedLayoutSpacing": ('ControlTypes', 'ControlTypes', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.drawItemPixmap": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.drawItemText": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStyle.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QWidget'), + "QStyle.generatedIconPixmap": ('PySide2.QtGui.QIcon.Mode', 'PySide2.QtGui.QPixmap', 'PySide2.QtWidgets.QStyleOption'), + "QStyle.hitTestComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtCore.QPoint', 'PySide2.QtWidgets.QWidget'), + "QStyle.itemPixmapRect": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStyle.itemTextRect": ('PySide2.QtGui.QFontMetrics', 'PySide2.QtCore.QRect', 'int', 'bool', 'str'), + "QStyle.layoutSpacing": ('PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtWidgets.QSizePolicy.ControlType', 'PySide2.QtCore.Qt.Orientation', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.pixelMetric": ('PySide2.QtWidgets.QStyle.PixelMetric', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.polish": [('PySide2.QtGui.QPalette',), ('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.proxy": (), + "QStyle.sizeFromContents": ('PySide2.QtWidgets.QStyle.ContentsType', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtCore.QSize', 'PySide2.QtWidgets.QWidget'), + "QStyle.sliderPositionFromValue": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.sliderValueFromPosition": ('int', 'int', 'int', 'int', 'bool'), + "QStyle.standardIcon": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.standardPalette": (), + "QStyle.standardPixmap": ('PySide2.QtWidgets.QStyle.StandardPixmap', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.styleHint": ('PySide2.QtWidgets.QStyle.StyleHint', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleHintReturn'), + "QStyle.subControlRect": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex', 'PySide2.QtWidgets.QStyle.SubControl', 'PySide2.QtWidgets.QWidget'), + "QStyle.subElementRect": ('PySide2.QtWidgets.QStyle.SubElement', 'PySide2.QtWidgets.QStyleOption', 'PySide2.QtWidgets.QWidget'), + "QStyle.unpolish": [('PySide2.QtWidgets.QApplication',), ('PySide2.QtWidgets.QWidget',)], + "QStyle.visualAlignment": ('PySide2.QtCore.Qt.LayoutDirection', 'Alignment'), + "QStyle.visualPos": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QPoint'), + "QStyle.visualRect": ('PySide2.QtCore.Qt.LayoutDirection', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QRect'), + + # class PySide2.QtWidgets.QStyleFactory: + "QStyleFactory.__init__": (), + "QStyleFactory.create": ('str',), + "QStyleFactory.keys": (), + + # class PySide2.QtWidgets.QStyleHintReturn: + "QStyleHintReturn.__init__": ('int', 'int'), + + # class PySide2.QtWidgets.QStyleHintReturnMask: + "QStyleHintReturnMask.__init__": (), + + # class PySide2.QtWidgets.QStyleHintReturnVariant: + "QStyleHintReturnVariant.__init__": (), + + # class PySide2.QtWidgets.QStyleOption: + "QStyleOption.__init__": [('PySide2.QtWidgets.QStyleOption',), ('int', 'int')], + "QStyleOption.init": ('PySide2.QtWidgets.QWidget',), + "QStyleOption.initFrom": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QStyleOptionButton: + "QStyleOptionButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComboBox: + "QStyleOptionComboBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionComboBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionComplex: + "QStyleOptionComplex.__init__": [('PySide2.QtWidgets.QStyleOptionComplex',), ('int', 'int')], + + # class PySide2.QtWidgets.QStyleOptionDockWidget: + "QStyleOptionDockWidget.__init__": [(), ('PySide2.QtWidgets.QStyleOptionDockWidget',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFocusRect: + "QStyleOptionFocusRect.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFocusRect',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionFrame: + "QStyleOptionFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionGraphicsItem: + "QStyleOptionGraphicsItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGraphicsItem',), ('int',)], + "QStyleOptionGraphicsItem.levelOfDetailFromTransform": ('PySide2.QtGui.QTransform',), + + # class PySide2.QtWidgets.QStyleOptionGroupBox: + "QStyleOptionGroupBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionGroupBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionHeader: + "QStyleOptionHeader.__init__": [(), ('PySide2.QtWidgets.QStyleOptionHeader',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionMenuItem: + "QStyleOptionMenuItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionMenuItem',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionProgressBar: + "QStyleOptionProgressBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionProgressBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionRubberBand: + "QStyleOptionRubberBand.__init__": [(), ('PySide2.QtWidgets.QStyleOptionRubberBand',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSizeGrip: + "QStyleOptionSizeGrip.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSizeGrip',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSlider: + "QStyleOptionSlider.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSlider',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionSpinBox: + "QStyleOptionSpinBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionSpinBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTab: + "QStyleOptionTab.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTab',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabBarBase: + "QStyleOptionTabBarBase.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabBarBase',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTabWidgetFrame: + "QStyleOptionTabWidgetFrame.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionTitleBar: + "QStyleOptionTitleBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionTitleBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBar: + "QStyleOptionToolBar.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBar',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolBox: + "QStyleOptionToolBox.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolBox',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionToolButton: + "QStyleOptionToolButton.__init__": [(), ('PySide2.QtWidgets.QStyleOptionToolButton',), ('int',)], + + # class PySide2.QtWidgets.QStyleOptionViewItem: + "QStyleOptionViewItem.__init__": [(), ('PySide2.QtWidgets.QStyleOptionViewItem',), ('int',)], + "QStyleOptionViewItem.__copy__": (), + + # class PySide2.QtWidgets.QStylePainter: + "QStylePainter.__init__": [(), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.begin": [('PySide2.QtGui.QPaintDevice',), ('PySide2.QtGui.QPaintDevice', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QStylePainter.drawComplexControl": ('PySide2.QtWidgets.QStyle.ComplexControl', 'PySide2.QtWidgets.QStyleOptionComplex'), + "QStylePainter.drawControl": ('PySide2.QtWidgets.QStyle.ControlElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.drawItemPixmap": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPixmap'), + "QStylePainter.drawItemText": ('PySide2.QtCore.QRect', 'int', 'PySide2.QtGui.QPalette', 'bool', 'str', 'PySide2.QtGui.QPalette.ColorRole'), + "QStylePainter.drawPrimitive": ('PySide2.QtWidgets.QStyle.PrimitiveElement', 'PySide2.QtWidgets.QStyleOption'), + "QStylePainter.style": (), + + # class PySide2.QtWidgets.QStyledItemDelegate: + "QStyledItemDelegate.__init__": ('PySide2.QtCore.QObject',), + "QStyledItemDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.displayText": ('Any', 'PySide2.QtCore.QLocale'), + "QStyledItemDelegate.editorEvent": ('PySide2.QtCore.QEvent', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QStyledItemDelegate.initStyleOption": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.itemEditorFactory": (), + "QStyledItemDelegate.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setEditorData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.setItemEditorFactory": ('PySide2.QtWidgets.QItemEditorFactory',), + "QStyledItemDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.sizeHint": ('PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QStyledItemDelegate.updateEditorGeometry": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtWidgets.QSwipeGesture: + "QSwipeGesture.__init__": ('PySide2.QtCore.QObject',), + "QSwipeGesture.horizontalDirection": (), + "QSwipeGesture.setSwipeAngle": ('float',), + "QSwipeGesture.swipeAngle": (), + "QSwipeGesture.verticalDirection": (), + + # class PySide2.QtWidgets.QSystemTrayIcon: + "QSystemTrayIcon.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtGui.QIcon', 'PySide2.QtCore.QObject')], + "QSystemTrayIcon.contextMenu": (), + "QSystemTrayIcon.event": ('PySide2.QtCore.QEvent',), + "QSystemTrayIcon.geometry": (), + "QSystemTrayIcon.hide": (), + "QSystemTrayIcon.icon": (), + "QSystemTrayIcon.isSystemTrayAvailable": (), + "QSystemTrayIcon.isVisible": (), + "QSystemTrayIcon.setContextMenu": ('PySide2.QtWidgets.QMenu',), + "QSystemTrayIcon.setIcon": ('PySide2.QtGui.QIcon',), + "QSystemTrayIcon.setToolTip": ('str',), + "QSystemTrayIcon.setVisible": ('bool',), + "QSystemTrayIcon.show": (), + "QSystemTrayIcon.showMessage": [('str', 'str', 'PySide2.QtGui.QIcon', 'int'), ('str', 'str', 'PySide2.QtWidgets.QSystemTrayIcon.MessageIcon', 'int')], + "QSystemTrayIcon.supportsMessages": (), + "QSystemTrayIcon.toolTip": (), + + # class PySide2.QtWidgets.QTabBar: + "QTabBar.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabBar.accessibleTabName": ('int',), + "QTabBar.addTab": [('PySide2.QtGui.QIcon', 'str'), ('str',)], + "QTabBar.autoHide": (), + "QTabBar.changeCurrentOnDrag": (), + "QTabBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabBar.count": (), + "QTabBar.currentIndex": (), + "QTabBar.documentMode": (), + "QTabBar.drawBase": (), + "QTabBar.elideMode": (), + "QTabBar.event": ('PySide2.QtCore.QEvent',), + "QTabBar.expanding": (), + "QTabBar.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QTabBar.iconSize": (), + "QTabBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTab', 'int'), + "QTabBar.insertTab": [('int', 'PySide2.QtGui.QIcon', 'str'), ('int', 'str')], + "QTabBar.isMovable": (), + "QTabBar.isTabEnabled": ('int',), + "QTabBar.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabBar.minimumSizeHint": (), + "QTabBar.minimumTabSizeHint": ('int',), + "QTabBar.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTabBar.moveTab": ('int', 'int'), + "QTabBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabBar.removeTab": ('int',), + "QTabBar.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabBar.selectionBehaviorOnRemove": (), + "QTabBar.setAccessibleTabName": ('int', 'str'), + "QTabBar.setAutoHide": ('bool',), + "QTabBar.setChangeCurrentOnDrag": ('bool',), + "QTabBar.setCurrentIndex": ('int',), + "QTabBar.setDocumentMode": ('bool',), + "QTabBar.setDrawBase": ('bool',), + "QTabBar.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabBar.setExpanding": ('bool',), + "QTabBar.setIconSize": ('PySide2.QtCore.QSize',), + "QTabBar.setMovable": ('bool',), + "QTabBar.setSelectionBehaviorOnRemove": ('PySide2.QtWidgets.QTabBar.SelectionBehavior',), + "QTabBar.setShape": ('PySide2.QtWidgets.QTabBar.Shape',), + "QTabBar.setTabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition', 'PySide2.QtWidgets.QWidget'), + "QTabBar.setTabData": ('int', 'Any'), + "QTabBar.setTabEnabled": ('int', 'bool'), + "QTabBar.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabBar.setTabText": ('int', 'str'), + "QTabBar.setTabTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTabBar.setTabToolTip": ('int', 'str'), + "QTabBar.setTabWhatsThis": ('int', 'str'), + "QTabBar.setTabsClosable": ('bool',), + "QTabBar.setUsesScrollButtons": ('bool',), + "QTabBar.shape": (), + "QTabBar.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabBar.sizeHint": (), + "QTabBar.tabAt": ('PySide2.QtCore.QPoint',), + "QTabBar.tabButton": ('int', 'PySide2.QtWidgets.QTabBar.ButtonPosition'), + "QTabBar.tabData": ('int',), + "QTabBar.tabIcon": ('int',), + "QTabBar.tabInserted": ('int',), + "QTabBar.tabLayoutChange": (), + "QTabBar.tabRect": ('int',), + "QTabBar.tabRemoved": ('int',), + "QTabBar.tabSizeHint": ('int',), + "QTabBar.tabText": ('int',), + "QTabBar.tabTextColor": ('int',), + "QTabBar.tabToolTip": ('int',), + "QTabBar.tabWhatsThis": ('int',), + "QTabBar.tabsClosable": (), + "QTabBar.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTabBar.usesScrollButtons": (), + "QTabBar.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtWidgets.QTabWidget: + "QTabWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.addTab": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QTabWidget.clear": (), + "QTabWidget.cornerWidget": ('PySide2.QtCore.Qt.Corner',), + "QTabWidget.count": (), + "QTabWidget.currentIndex": (), + "QTabWidget.currentWidget": (), + "QTabWidget.documentMode": (), + "QTabWidget.elideMode": (), + "QTabWidget.event": ('PySide2.QtCore.QEvent',), + "QTabWidget.hasHeightForWidth": (), + "QTabWidget.heightForWidth": ('int',), + "QTabWidget.iconSize": (), + "QTabWidget.indexOf": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.initStyleOption": ('PySide2.QtWidgets.QStyleOptionTabWidgetFrame',), + "QTabWidget.insertTab": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QTabWidget.isMovable": (), + "QTabWidget.isTabEnabled": ('int',), + "QTabWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTabWidget.minimumSizeHint": (), + "QTabWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTabWidget.removeTab": ('int',), + "QTabWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTabWidget.setCornerWidget": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Corner'), + "QTabWidget.setCurrentIndex": ('int',), + "QTabWidget.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QTabWidget.setDocumentMode": ('bool',), + "QTabWidget.setElideMode": ('PySide2.QtCore.Qt.TextElideMode',), + "QTabWidget.setIconSize": ('PySide2.QtCore.QSize',), + "QTabWidget.setMovable": ('bool',), + "QTabWidget.setTabBar": ('PySide2.QtWidgets.QTabBar',), + "QTabWidget.setTabBarAutoHide": ('bool',), + "QTabWidget.setTabEnabled": ('int', 'bool'), + "QTabWidget.setTabIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTabWidget.setTabPosition": ('PySide2.QtWidgets.QTabWidget.TabPosition',), + "QTabWidget.setTabShape": ('PySide2.QtWidgets.QTabWidget.TabShape',), + "QTabWidget.setTabText": ('int', 'str'), + "QTabWidget.setTabToolTip": ('int', 'str'), + "QTabWidget.setTabWhatsThis": ('int', 'str'), + "QTabWidget.setTabsClosable": ('bool',), + "QTabWidget.setUsesScrollButtons": ('bool',), + "QTabWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTabWidget.sizeHint": (), + "QTabWidget.tabBar": (), + "QTabWidget.tabBarAutoHide": (), + "QTabWidget.tabIcon": ('int',), + "QTabWidget.tabInserted": ('int',), + "QTabWidget.tabPosition": (), + "QTabWidget.tabRemoved": ('int',), + "QTabWidget.tabShape": (), + "QTabWidget.tabText": ('int',), + "QTabWidget.tabToolTip": ('int',), + "QTabWidget.tabWhatsThis": ('int',), + "QTabWidget.tabsClosable": (), + "QTabWidget.usesScrollButtons": (), + "QTabWidget.widget": ('int',), + + # class PySide2.QtWidgets.QTableView: + "QTableView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTableView.clearSpans": (), + "QTableView.columnAt": ('int',), + "QTableView.columnCountChanged": ('int', 'int'), + "QTableView.columnMoved": ('int', 'int', 'int'), + "QTableView.columnResized": ('int', 'int', 'int'), + "QTableView.columnSpan": ('int', 'int'), + "QTableView.columnViewportPosition": ('int',), + "QTableView.columnWidth": ('int',), + "QTableView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTableView.doItemsLayout": (), + "QTableView.gridStyle": (), + "QTableView.hideColumn": ('int',), + "QTableView.hideRow": ('int',), + "QTableView.horizontalHeader": (), + "QTableView.horizontalOffset": (), + "QTableView.horizontalScrollbarAction": ('int',), + "QTableView.indexAt": ('PySide2.QtCore.QPoint',), + "QTableView.isColumnHidden": ('int',), + "QTableView.isCornerButtonEnabled": (), + "QTableView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTableView.isRowHidden": ('int',), + "QTableView.isSortingEnabled": (), + "QTableView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QTableView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTableView.resizeColumnToContents": ('int',), + "QTableView.resizeColumnsToContents": (), + "QTableView.resizeRowToContents": ('int',), + "QTableView.resizeRowsToContents": (), + "QTableView.rowAt": ('int',), + "QTableView.rowCountChanged": ('int', 'int'), + "QTableView.rowHeight": ('int',), + "QTableView.rowMoved": ('int', 'int', 'int'), + "QTableView.rowResized": ('int', 'int', 'int'), + "QTableView.rowSpan": ('int', 'int'), + "QTableView.rowViewportPosition": ('int',), + "QTableView.scrollContentsBy": ('int', 'int'), + "QTableView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableView.selectColumn": ('int',), + "QTableView.selectRow": ('int',), + "QTableView.selectedIndexes": (), + "QTableView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTableView.setColumnHidden": ('int', 'bool'), + "QTableView.setColumnWidth": ('int', 'int'), + "QTableView.setCornerButtonEnabled": ('bool',), + "QTableView.setGridStyle": ('PySide2.QtCore.Qt.PenStyle',), + "QTableView.setHorizontalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTableView.setRowHeight": ('int', 'int'), + "QTableView.setRowHidden": ('int', 'bool'), + "QTableView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QTableView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTableView.setShowGrid": ('bool',), + "QTableView.setSortingEnabled": ('bool',), + "QTableView.setSpan": ('int', 'int', 'int', 'int'), + "QTableView.setVerticalHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTableView.setWordWrap": ('bool',), + "QTableView.showColumn": ('int',), + "QTableView.showGrid": (), + "QTableView.showRow": ('int',), + "QTableView.sizeHintForColumn": ('int',), + "QTableView.sizeHintForRow": ('int',), + "QTableView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTableView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTableView.updateGeometries": (), + "QTableView.verticalHeader": (), + "QTableView.verticalOffset": (), + "QTableView.verticalScrollbarAction": ('int',), + "QTableView.viewOptions": (), + "QTableView.viewportSizeHint": (), + "QTableView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTableView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTableView.wordWrap": (), + + # class PySide2.QtWidgets.QTableWidget: + "QTableWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('int', 'int', 'PySide2.QtWidgets.QWidget')], + "QTableWidget.cellWidget": ('int', 'int'), + "QTableWidget.clear": (), + "QTableWidget.clearContents": (), + "QTableWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.column": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.columnCount": (), + "QTableWidget.currentColumn": (), + "QTableWidget.currentItem": (), + "QTableWidget.currentRow": (), + "QTableWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTableWidget.dropMimeData": ('int', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTableWidget.editItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.event": ('PySide2.QtCore.QEvent',), + "QTableWidget.findItems": ('str', 'MatchFlags'), + "QTableWidget.horizontalHeaderItem": ('int',), + "QTableWidget.indexFromItem": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.insertColumn": ('int',), + "QTableWidget.insertRow": ('int',), + "QTableWidget.isItemSelected": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.isSortingEnabled": (), + "QTableWidget.item": ('int', 'int'), + "QTableWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTableWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTableWidget.itemPrototype": (), + "QTableWidget.items": ('PySide2.QtCore.QMimeData',), + "QTableWidget.mimeData": ('list',), + "QTableWidget.mimeTypes": (), + "QTableWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTableWidgetItem',)], + "QTableWidget.removeCellWidget": ('int', 'int'), + "QTableWidget.removeColumn": ('int',), + "QTableWidget.removeRow": ('int',), + "QTableWidget.row": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.rowCount": (), + "QTableWidget.scrollToItem": ('PySide2.QtWidgets.QTableWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTableWidget.selectedItems": (), + "QTableWidget.selectedRanges": (), + "QTableWidget.setCellWidget": ('int', 'int', 'PySide2.QtWidgets.QWidget'), + "QTableWidget.setColumnCount": ('int',), + "QTableWidget.setCurrentCell": [('int', 'int'), ('int', 'int', 'SelectionFlags')], + "QTableWidget.setCurrentItem": [('PySide2.QtWidgets.QTableWidgetItem',), ('PySide2.QtWidgets.QTableWidgetItem', 'SelectionFlags')], + "QTableWidget.setHorizontalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setHorizontalHeaderLabels": ('List[str]',), + "QTableWidget.setItem": ('int', 'int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setItemPrototype": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.setItemSelected": ('PySide2.QtWidgets.QTableWidgetItem', 'bool'), + "QTableWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTableWidget.setRangeSelected": ('PySide2.QtWidgets.QTableWidgetSelectionRange', 'bool'), + "QTableWidget.setRowCount": ('int',), + "QTableWidget.setSortingEnabled": ('bool',), + "QTableWidget.setVerticalHeaderItem": ('int', 'PySide2.QtWidgets.QTableWidgetItem'), + "QTableWidget.setVerticalHeaderLabels": ('List[str]',), + "QTableWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTableWidget.supportedDropActions": (), + "QTableWidget.takeHorizontalHeaderItem": ('int',), + "QTableWidget.takeItem": ('int', 'int'), + "QTableWidget.takeVerticalHeaderItem": ('int',), + "QTableWidget.verticalHeaderItem": ('int',), + "QTableWidget.visualColumn": ('int',), + "QTableWidget.visualItemRect": ('PySide2.QtWidgets.QTableWidgetItem',), + "QTableWidget.visualRow": ('int',), + + # class PySide2.QtWidgets.QTableWidgetItem: + "QTableWidgetItem.__init__": [('PySide2.QtGui.QIcon', 'str', 'int'), ('PySide2.QtWidgets.QTableWidgetItem',), ('int',), ('str', 'int')], + "QTableWidgetItem.background": (), + "QTableWidgetItem.backgroundColor": (), + "QTableWidgetItem.checkState": (), + "QTableWidgetItem.clone": (), + "QTableWidgetItem.column": (), + "QTableWidgetItem.data": ('int',), + "QTableWidgetItem.flags": (), + "QTableWidgetItem.font": (), + "QTableWidgetItem.foreground": (), + "QTableWidgetItem.icon": (), + "QTableWidgetItem.isSelected": (), + "QTableWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTableWidgetItem.row": (), + "QTableWidgetItem.setBackground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setCheckState": ('PySide2.QtCore.Qt.CheckState',), + "QTableWidgetItem.setData": ('int', 'Any'), + "QTableWidgetItem.setFlags": ('ItemFlags',), + "QTableWidgetItem.setFont": ('PySide2.QtGui.QFont',), + "QTableWidgetItem.setForeground": ('PySide2.QtGui.QBrush',), + "QTableWidgetItem.setIcon": ('PySide2.QtGui.QIcon',), + "QTableWidgetItem.setSelected": ('bool',), + "QTableWidgetItem.setSizeHint": ('PySide2.QtCore.QSize',), + "QTableWidgetItem.setStatusTip": ('str',), + "QTableWidgetItem.setText": ('str',), + "QTableWidgetItem.setTextAlignment": ('int',), + "QTableWidgetItem.setTextColor": ('PySide2.QtGui.QColor',), + "QTableWidgetItem.setToolTip": ('str',), + "QTableWidgetItem.setWhatsThis": ('str',), + "QTableWidgetItem.sizeHint": (), + "QTableWidgetItem.statusTip": (), + "QTableWidgetItem.tableWidget": (), + "QTableWidgetItem.text": (), + "QTableWidgetItem.textAlignment": (), + "QTableWidgetItem.textColor": (), + "QTableWidgetItem.toolTip": (), + "QTableWidgetItem.type": (), + "QTableWidgetItem.whatsThis": (), + "QTableWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTableWidgetSelectionRange: + "QTableWidgetSelectionRange.__init__": [(), ('PySide2.QtWidgets.QTableWidgetSelectionRange',), ('int', 'int', 'int', 'int')], + "QTableWidgetSelectionRange.__copy__": (), + "QTableWidgetSelectionRange.bottomRow": (), + "QTableWidgetSelectionRange.columnCount": (), + "QTableWidgetSelectionRange.leftColumn": (), + "QTableWidgetSelectionRange.rightColumn": (), + "QTableWidgetSelectionRange.rowCount": (), + "QTableWidgetSelectionRange.topRow": (), + + # class PySide2.QtWidgets.QTapAndHoldGesture: + "QTapAndHoldGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapAndHoldGesture.position": (), + "QTapAndHoldGesture.setPosition": ('PySide2.QtCore.QPointF',), + "QTapAndHoldGesture.setTimeout": ('int',), + "QTapAndHoldGesture.timeout": (), + + # class PySide2.QtWidgets.QTapGesture: + "QTapGesture.__init__": ('PySide2.QtCore.QObject',), + "QTapGesture.position": (), + "QTapGesture.setPosition": ('PySide2.QtCore.QPointF',), + + # class PySide2.QtWidgets.QTextBrowser: + "QTextBrowser.__init__": ('PySide2.QtWidgets.QWidget',), + "QTextBrowser.backward": (), + "QTextBrowser.backwardHistoryCount": (), + "QTextBrowser.clearHistory": (), + "QTextBrowser.event": ('PySide2.QtCore.QEvent',), + "QTextBrowser.focusNextPrevChild": ('bool',), + "QTextBrowser.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextBrowser.forward": (), + "QTextBrowser.forwardHistoryCount": (), + "QTextBrowser.historyTitle": ('int',), + "QTextBrowser.historyUrl": ('int',), + "QTextBrowser.home": (), + "QTextBrowser.isBackwardAvailable": (), + "QTextBrowser.isForwardAvailable": (), + "QTextBrowser.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextBrowser.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextBrowser.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextBrowser.openExternalLinks": (), + "QTextBrowser.openLinks": (), + "QTextBrowser.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextBrowser.reload": (), + "QTextBrowser.searchPaths": (), + "QTextBrowser.setOpenExternalLinks": ('bool',), + "QTextBrowser.setOpenLinks": ('bool',), + "QTextBrowser.setSearchPaths": ('List[str]',), + "QTextBrowser.setSource": ('PySide2.QtCore.QUrl',), + "QTextBrowser.source": (), + + # class PySide2.QtWidgets.QTextEdit: + "QTextEdit.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QTextEdit.acceptRichText": (), + "QTextEdit.alignment": (), + "QTextEdit.anchorAt": ('PySide2.QtCore.QPoint',), + "QTextEdit.append": ('str',), + "QTextEdit.autoFormatting": (), + "QTextEdit.canInsertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.canPaste": (), + "QTextEdit.changeEvent": ('PySide2.QtCore.QEvent',), + "QTextEdit.clear": (), + "QTextEdit.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QTextEdit.copy": (), + "QTextEdit.createMimeDataFromSelection": (), + "QTextEdit.createStandardContextMenu": [(), ('PySide2.QtCore.QPoint',)], + "QTextEdit.currentCharFormat": (), + "QTextEdit.currentFont": (), + "QTextEdit.cursorForPosition": ('PySide2.QtCore.QPoint',), + "QTextEdit.cursorRect": [(), ('PySide2.QtGui.QTextCursor',)], + "QTextEdit.cursorWidth": (), + "QTextEdit.cut": (), + "QTextEdit.doSetTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.document": (), + "QTextEdit.documentTitle": (), + "QTextEdit.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QTextEdit.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QTextEdit.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTextEdit.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTextEdit.ensureCursorVisible": (), + "QTextEdit.event": ('PySide2.QtCore.QEvent',), + "QTextEdit.extraSelections": (), + "QTextEdit.find": [('PySide2.QtCore.QRegExp', 'FindFlags'), ('int',), ('str', 'FindFlags')], + "QTextEdit.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.focusNextPrevChild": ('bool',), + "QTextEdit.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QTextEdit.fontFamily": (), + "QTextEdit.fontItalic": (), + "QTextEdit.fontPointSize": (), + "QTextEdit.fontUnderline": (), + "QTextEdit.fontWeight": (), + "QTextEdit.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QTextEdit.inputMethodQuery": [('PySide2.QtCore.Qt.InputMethodQuery',), ('PySide2.QtCore.Qt.InputMethodQuery', 'Any')], + "QTextEdit.insertFromMimeData": ('PySide2.QtCore.QMimeData',), + "QTextEdit.insertHtml": ('str',), + "QTextEdit.insertPlainText": ('str',), + "QTextEdit.isReadOnly": (), + "QTextEdit.isUndoRedoEnabled": (), + "QTextEdit.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QTextEdit.lineWrapColumnOrWidth": (), + "QTextEdit.lineWrapMode": (), + "QTextEdit.loadResource": ('int', 'PySide2.QtCore.QUrl'), + "QTextEdit.mergeCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTextEdit.moveCursor": ('PySide2.QtGui.QTextCursor.MoveOperation', 'PySide2.QtGui.QTextCursor.MoveMode'), + "QTextEdit.overwriteMode": (), + "QTextEdit.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTextEdit.paste": (), + "QTextEdit.placeholderText": (), + "QTextEdit.print_": ('PySide2.QtGui.QPagedPaintDevice',), + "QTextEdit.redo": (), + "QTextEdit.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QTextEdit.scrollContentsBy": ('int', 'int'), + "QTextEdit.scrollToAnchor": ('str',), + "QTextEdit.selectAll": (), + "QTextEdit.setAcceptRichText": ('bool',), + "QTextEdit.setAlignment": ('Alignment',), + "QTextEdit.setAutoFormatting": ('AutoFormatting',), + "QTextEdit.setCurrentCharFormat": ('PySide2.QtGui.QTextCharFormat',), + "QTextEdit.setCurrentFont": ('PySide2.QtGui.QFont',), + "QTextEdit.setCursorWidth": ('int',), + "QTextEdit.setDocument": ('PySide2.QtGui.QTextDocument',), + "QTextEdit.setDocumentTitle": ('str',), + "QTextEdit.setExtraSelections": ('list',), + "QTextEdit.setFontFamily": ('str',), + "QTextEdit.setFontItalic": ('bool',), + "QTextEdit.setFontPointSize": ('float',), + "QTextEdit.setFontUnderline": ('bool',), + "QTextEdit.setFontWeight": ('int',), + "QTextEdit.setHtml": ('str',), + "QTextEdit.setLineWrapColumnOrWidth": ('int',), + "QTextEdit.setLineWrapMode": ('PySide2.QtWidgets.QTextEdit.LineWrapMode',), + "QTextEdit.setOverwriteMode": ('bool',), + "QTextEdit.setPlaceholderText": ('str',), + "QTextEdit.setPlainText": ('str',), + "QTextEdit.setReadOnly": ('bool',), + "QTextEdit.setTabChangesFocus": ('bool',), + "QTextEdit.setTabStopWidth": ('int',), + "QTextEdit.setText": ('str',), + "QTextEdit.setTextBackgroundColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextColor": ('PySide2.QtGui.QColor',), + "QTextEdit.setTextCursor": ('PySide2.QtGui.QTextCursor',), + "QTextEdit.setTextInteractionFlags": ('TextInteractionFlags',), + "QTextEdit.setUndoRedoEnabled": ('bool',), + "QTextEdit.setWordWrapMode": ('PySide2.QtGui.QTextOption.WrapMode',), + "QTextEdit.showEvent": ('PySide2.QtGui.QShowEvent',), + "QTextEdit.tabChangesFocus": (), + "QTextEdit.tabStopWidth": (), + "QTextEdit.textBackgroundColor": (), + "QTextEdit.textColor": (), + "QTextEdit.textCursor": (), + "QTextEdit.textInteractionFlags": (), + "QTextEdit.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTextEdit.toHtml": (), + "QTextEdit.toPlainText": (), + "QTextEdit.undo": (), + "QTextEdit.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QTextEdit.wordWrapMode": (), + "QTextEdit.zoomIn": ('int',), + "QTextEdit.zoomInF": ('float',), + "QTextEdit.zoomOut": ('int',), + + # class PySide2.QtWidgets.QTileRules: + "QTileRules.__init__": [('PySide2.QtCore.Qt.TileRule',), ('PySide2.QtCore.Qt.TileRule', 'PySide2.QtCore.Qt.TileRule'), ('PySide2.QtWidgets.QTileRules',)], + "QTileRules.__copy__": (), + + # class PySide2.QtWidgets.QTimeEdit: + "QTimeEdit.__init__": [('PySide2.QtCore.QTime', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QToolBar: + "QToolBar.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QToolBar.actionAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QToolBar.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolBar.actionGeometry": ('PySide2.QtWidgets.QAction',), + "QToolBar.addAction": [('PySide2.QtGui.QIcon', 'str'), ('PySide2.QtGui.QIcon', 'str', 'PySide2.QtCore.QObject', 'str'), ('PySide2.QtWidgets.QAction',), ('str',), ('str', 'PySide2.QtCore.QObject', 'str')], + "QToolBar.addSeparator": (), + "QToolBar.addWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBar.allowedAreas": (), + "QToolBar.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBar.clear": (), + "QToolBar.event": ('PySide2.QtCore.QEvent',), + "QToolBar.iconSize": (), + "QToolBar.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolBar',), + "QToolBar.insertSeparator": ('PySide2.QtWidgets.QAction',), + "QToolBar.insertWidget": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QWidget'), + "QToolBar.isAreaAllowed": ('PySide2.QtCore.Qt.ToolBarArea',), + "QToolBar.isFloatable": (), + "QToolBar.isFloating": (), + "QToolBar.isMovable": (), + "QToolBar.orientation": (), + "QToolBar.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolBar.setAllowedAreas": ('ToolBarAreas',), + "QToolBar.setFloatable": ('bool',), + "QToolBar.setIconSize": ('PySide2.QtCore.QSize',), + "QToolBar.setMovable": ('bool',), + "QToolBar.setOrientation": ('PySide2.QtCore.Qt.Orientation',), + "QToolBar.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolBar.toggleViewAction": (), + "QToolBar.toolButtonStyle": (), + "QToolBar.widgetForAction": ('PySide2.QtWidgets.QAction',), + + # class PySide2.QtWidgets.QToolBox: + "QToolBox.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QToolBox.addItem": [('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolBox.count": (), + "QToolBox.currentIndex": (), + "QToolBox.currentWidget": (), + "QToolBox.event": ('PySide2.QtCore.QEvent',), + "QToolBox.indexOf": ('PySide2.QtWidgets.QWidget',), + "QToolBox.insertItem": [('int', 'PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QIcon', 'str'), ('int', 'PySide2.QtWidgets.QWidget', 'str')], + "QToolBox.isItemEnabled": ('int',), + "QToolBox.itemIcon": ('int',), + "QToolBox.itemInserted": ('int',), + "QToolBox.itemRemoved": ('int',), + "QToolBox.itemText": ('int',), + "QToolBox.itemToolTip": ('int',), + "QToolBox.removeItem": ('int',), + "QToolBox.setCurrentIndex": ('int',), + "QToolBox.setCurrentWidget": ('PySide2.QtWidgets.QWidget',), + "QToolBox.setItemEnabled": ('int', 'bool'), + "QToolBox.setItemIcon": ('int', 'PySide2.QtGui.QIcon'), + "QToolBox.setItemText": ('int', 'str'), + "QToolBox.setItemToolTip": ('int', 'str'), + "QToolBox.showEvent": ('PySide2.QtGui.QShowEvent',), + "QToolBox.widget": ('int',), + + # class PySide2.QtWidgets.QToolButton: + "QToolButton.__init__": ('PySide2.QtWidgets.QWidget',), + "QToolButton.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QToolButton.arrowType": (), + "QToolButton.autoRaise": (), + "QToolButton.changeEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.defaultAction": (), + "QToolButton.enterEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.event": ('PySide2.QtCore.QEvent',), + "QToolButton.hitButton": ('PySide2.QtCore.QPoint',), + "QToolButton.initStyleOption": ('PySide2.QtWidgets.QStyleOptionToolButton',), + "QToolButton.leaveEvent": ('PySide2.QtCore.QEvent',), + "QToolButton.menu": (), + "QToolButton.minimumSizeHint": (), + "QToolButton.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QToolButton.nextCheckState": (), + "QToolButton.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QToolButton.popupMode": (), + "QToolButton.setArrowType": ('PySide2.QtCore.Qt.ArrowType',), + "QToolButton.setAutoRaise": ('bool',), + "QToolButton.setDefaultAction": ('PySide2.QtWidgets.QAction',), + "QToolButton.setMenu": ('PySide2.QtWidgets.QMenu',), + "QToolButton.setPopupMode": ('PySide2.QtWidgets.QToolButton.ToolButtonPopupMode',), + "QToolButton.setToolButtonStyle": ('PySide2.QtCore.Qt.ToolButtonStyle',), + "QToolButton.showMenu": (), + "QToolButton.sizeHint": (), + "QToolButton.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QToolButton.toolButtonStyle": (), + + # class PySide2.QtWidgets.QToolTip: + "QToolTip.font": (), + "QToolTip.hideText": (), + "QToolTip.isVisible": (), + "QToolTip.palette": (), + "QToolTip.setFont": ('PySide2.QtGui.QFont',), + "QToolTip.setPalette": ('PySide2.QtGui.QPalette',), + "QToolTip.showText": [('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect'), ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QRect', 'int')], + "QToolTip.text": (), + + # class PySide2.QtWidgets.QTreeView: + "QTreeView.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeView.allColumnsShowFocus": (), + "QTreeView.autoExpandDelay": (), + "QTreeView.collapse": ('PySide2.QtCore.QModelIndex',), + "QTreeView.collapseAll": (), + "QTreeView.columnAt": ('int',), + "QTreeView.columnCountChanged": ('int', 'int'), + "QTreeView.columnMoved": (), + "QTreeView.columnResized": ('int', 'int', 'int'), + "QTreeView.columnViewportPosition": ('int',), + "QTreeView.columnWidth": ('int',), + "QTreeView.currentChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex'), + "QTreeView.dataChanged": ('PySide2.QtCore.QModelIndex', 'PySide2.QtCore.QModelIndex', 'list'), + "QTreeView.doItemsLayout": (), + "QTreeView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QTreeView.drawBranches": ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRect', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawRow": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QTreeView.drawTree": ('PySide2.QtGui.QPainter', 'PySide2.QtGui.QRegion'), + "QTreeView.expand": ('PySide2.QtCore.QModelIndex',), + "QTreeView.expandAll": (), + "QTreeView.expandToDepth": ('int',), + "QTreeView.expandsOnDoubleClick": (), + "QTreeView.header": (), + "QTreeView.hideColumn": ('int',), + "QTreeView.horizontalOffset": (), + "QTreeView.horizontalScrollbarAction": ('int',), + "QTreeView.indentation": (), + "QTreeView.indexAbove": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexAt": ('PySide2.QtCore.QPoint',), + "QTreeView.indexBelow": ('PySide2.QtCore.QModelIndex',), + "QTreeView.indexRowSizeHint": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isAnimated": (), + "QTreeView.isColumnHidden": ('int',), + "QTreeView.isExpanded": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isHeaderHidden": (), + "QTreeView.isIndexHidden": ('PySide2.QtCore.QModelIndex',), + "QTreeView.isRowHidden": ('int', 'PySide2.QtCore.QModelIndex'), + "QTreeView.isSortingEnabled": (), + "QTreeView.itemsExpandable": (), + "QTreeView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QTreeView.keyboardSearch": ('str',), + "QTreeView.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QTreeView.moveCursor": ('PySide2.QtWidgets.QAbstractItemView.CursorAction', 'KeyboardModifiers'), + "QTreeView.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QTreeView.reexpand": (), + "QTreeView.reset": (), + "QTreeView.resetIndentation": (), + "QTreeView.resizeColumnToContents": ('int',), + "QTreeView.rootIsDecorated": (), + "QTreeView.rowHeight": ('PySide2.QtCore.QModelIndex',), + "QTreeView.rowsAboutToBeRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsInserted": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.rowsRemoved": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QTreeView.scrollContentsBy": ('int', 'int'), + "QTreeView.scrollTo": ('PySide2.QtCore.QModelIndex', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeView.selectAll": (), + "QTreeView.selectedIndexes": (), + "QTreeView.selectionChanged": ('PySide2.QtCore.QItemSelection', 'PySide2.QtCore.QItemSelection'), + "QTreeView.setAllColumnsShowFocus": ('bool',), + "QTreeView.setAnimated": ('bool',), + "QTreeView.setAutoExpandDelay": ('int',), + "QTreeView.setColumnHidden": ('int', 'bool'), + "QTreeView.setColumnWidth": ('int', 'int'), + "QTreeView.setExpanded": ('PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setExpandsOnDoubleClick": ('bool',), + "QTreeView.setFirstColumnSpanned": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setHeader": ('PySide2.QtWidgets.QHeaderView',), + "QTreeView.setHeaderHidden": ('bool',), + "QTreeView.setIndentation": ('int',), + "QTreeView.setItemsExpandable": ('bool',), + "QTreeView.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeView.setRootIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeView.setRootIsDecorated": ('bool',), + "QTreeView.setRowHidden": ('int', 'PySide2.QtCore.QModelIndex', 'bool'), + "QTreeView.setSelection": ('PySide2.QtCore.QRect', 'SelectionFlags'), + "QTreeView.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeView.setSortingEnabled": ('bool',), + "QTreeView.setTreePosition": ('int',), + "QTreeView.setUniformRowHeights": ('bool',), + "QTreeView.setWordWrap": ('bool',), + "QTreeView.showColumn": ('int',), + "QTreeView.sizeHintForColumn": ('int',), + "QTreeView.sortByColumn": [('int',), ('int', 'PySide2.QtCore.Qt.SortOrder')], + "QTreeView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QTreeView.treePosition": (), + "QTreeView.uniformRowHeights": (), + "QTreeView.updateGeometries": (), + "QTreeView.verticalOffset": (), + "QTreeView.viewportEvent": ('PySide2.QtCore.QEvent',), + "QTreeView.viewportSizeHint": (), + "QTreeView.visualRect": ('PySide2.QtCore.QModelIndex',), + "QTreeView.visualRegionForSelection": ('PySide2.QtCore.QItemSelection',), + "QTreeView.wordWrap": (), + + # class PySide2.QtWidgets.QTreeWidget: + "QTreeWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QTreeWidget.addTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.addTopLevelItems": ('list',), + "QTreeWidget.clear": (), + "QTreeWidget.closePersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.collapseItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.columnCount": (), + "QTreeWidget.currentColumn": (), + "QTreeWidget.currentItem": (), + "QTreeWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QTreeWidget.dropMimeData": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtCore.QMimeData', 'PySide2.QtCore.Qt.DropAction'), + "QTreeWidget.editItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.event": ('PySide2.QtCore.QEvent',), + "QTreeWidget.expandItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.findItems": ('str', 'MatchFlags', 'int'), + "QTreeWidget.headerItem": (), + "QTreeWidget.indexFromItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.indexOfTopLevelItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.insertTopLevelItem": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidget.insertTopLevelItems": ('int', 'list'), + "QTreeWidget.invisibleRootItem": (), + "QTreeWidget.isFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.isItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAbove": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QTreeWidget.itemBelow": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.itemFromIndex": ('PySide2.QtCore.QModelIndex',), + "QTreeWidget.itemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.items": ('PySide2.QtCore.QMimeData',), + "QTreeWidget.mimeData": ('list',), + "QTreeWidget.mimeTypes": (), + "QTreeWidget.openPersistentEditor": [('PySide2.QtCore.QModelIndex',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int')], + "QTreeWidget.removeItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), + "QTreeWidget.scrollToItem": ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QAbstractItemView.ScrollHint'), + "QTreeWidget.selectedItems": (), + "QTreeWidget.setColumnCount": ('int',), + "QTreeWidget.setCurrentItem": [('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'SelectionFlags')], + "QTreeWidget.setFirstItemColumnSpanned": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setHeaderItem": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidget.setHeaderLabel": ('str',), + "QTreeWidget.setHeaderLabels": ('List[str]',), + "QTreeWidget.setItemExpanded": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemHidden": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemSelected": ('PySide2.QtWidgets.QTreeWidgetItem', 'bool'), + "QTreeWidget.setItemWidget": ('PySide2.QtWidgets.QTreeWidgetItem', 'int', 'PySide2.QtWidgets.QWidget'), + "QTreeWidget.setModel": ('PySide2.QtCore.QAbstractItemModel',), + "QTreeWidget.setSelectionModel": ('PySide2.QtCore.QItemSelectionModel',), + "QTreeWidget.sortColumn": (), + "QTreeWidget.sortItems": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidget.supportedDropActions": (), + "QTreeWidget.takeTopLevelItem": ('int',), + "QTreeWidget.topLevelItem": ('int',), + "QTreeWidget.topLevelItemCount": (), + "QTreeWidget.visualItemRect": ('PySide2.QtWidgets.QTreeWidgetItem',), + + # class PySide2.QtWidgets.QTreeWidgetItem: + "QTreeWidgetItem.__init__": [('List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidget', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem',), ('PySide2.QtWidgets.QTreeWidgetItem', 'List[str]', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('PySide2.QtWidgets.QTreeWidgetItem', 'int'), ('int',)], + "QTreeWidgetItem.addChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.addChildren": ('list',), + "QTreeWidgetItem.background": ('int',), + "QTreeWidgetItem.backgroundColor": ('int',), + "QTreeWidgetItem.checkState": ('int',), + "QTreeWidgetItem.child": ('int',), + "QTreeWidgetItem.childCount": (), + "QTreeWidgetItem.childIndicatorPolicy": (), + "QTreeWidgetItem.clone": (), + "QTreeWidgetItem.columnCount": (), + "QTreeWidgetItem.data": ('int', 'int'), + "QTreeWidgetItem.emitDataChanged": (), + "QTreeWidgetItem.flags": (), + "QTreeWidgetItem.font": ('int',), + "QTreeWidgetItem.foreground": ('int',), + "QTreeWidgetItem.icon": ('int',), + "QTreeWidgetItem.indexOfChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.insertChild": ('int', 'PySide2.QtWidgets.QTreeWidgetItem'), + "QTreeWidgetItem.insertChildren": ('int', 'list'), + "QTreeWidgetItem.isDisabled": (), + "QTreeWidgetItem.isExpanded": (), + "QTreeWidgetItem.isFirstColumnSpanned": (), + "QTreeWidgetItem.isHidden": (), + "QTreeWidgetItem.isSelected": (), + "QTreeWidgetItem.parent": (), + "QTreeWidgetItem.read": ('PySide2.QtCore.QDataStream',), + "QTreeWidgetItem.removeChild": ('PySide2.QtWidgets.QTreeWidgetItem',), + "QTreeWidgetItem.setBackground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setBackgroundColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setCheckState": ('int', 'PySide2.QtCore.Qt.CheckState'), + "QTreeWidgetItem.setChildIndicatorPolicy": ('PySide2.QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy',), + "QTreeWidgetItem.setData": ('int', 'int', 'Any'), + "QTreeWidgetItem.setDisabled": ('bool',), + "QTreeWidgetItem.setExpanded": ('bool',), + "QTreeWidgetItem.setFirstColumnSpanned": ('bool',), + "QTreeWidgetItem.setFlags": ('ItemFlags',), + "QTreeWidgetItem.setFont": ('int', 'PySide2.QtGui.QFont'), + "QTreeWidgetItem.setForeground": ('int', 'PySide2.QtGui.QBrush'), + "QTreeWidgetItem.setHidden": ('bool',), + "QTreeWidgetItem.setIcon": ('int', 'PySide2.QtGui.QIcon'), + "QTreeWidgetItem.setSelected": ('bool',), + "QTreeWidgetItem.setSizeHint": ('int', 'PySide2.QtCore.QSize'), + "QTreeWidgetItem.setStatusTip": ('int', 'str'), + "QTreeWidgetItem.setText": ('int', 'str'), + "QTreeWidgetItem.setTextAlignment": ('int', 'int'), + "QTreeWidgetItem.setTextColor": ('int', 'PySide2.QtGui.QColor'), + "QTreeWidgetItem.setToolTip": ('int', 'str'), + "QTreeWidgetItem.setWhatsThis": ('int', 'str'), + "QTreeWidgetItem.sizeHint": ('int',), + "QTreeWidgetItem.sortChildren": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QTreeWidgetItem.statusTip": ('int',), + "QTreeWidgetItem.takeChild": ('int',), + "QTreeWidgetItem.takeChildren": (), + "QTreeWidgetItem.text": ('int',), + "QTreeWidgetItem.textAlignment": ('int',), + "QTreeWidgetItem.textColor": ('int',), + "QTreeWidgetItem.toolTip": ('int',), + "QTreeWidgetItem.treeWidget": (), + "QTreeWidgetItem.type": (), + "QTreeWidgetItem.whatsThis": ('int',), + "QTreeWidgetItem.write": ('PySide2.QtCore.QDataStream',), + + # class PySide2.QtWidgets.QTreeWidgetItemIterator: + "QTreeWidgetItemIterator.__init__": [('PySide2.QtWidgets.QTreeWidget', 'IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItem', 'IteratorFlags'), ('PySide2.QtWidgets.QTreeWidgetItemIterator',)], + "QTreeWidgetItemIterator.__copy__": (), + "QTreeWidgetItemIterator.value": (), + + # class PySide2.QtWidgets.QUndoCommand: + "QUndoCommand.__init__": [('PySide2.QtWidgets.QUndoCommand',), ('str', 'PySide2.QtWidgets.QUndoCommand')], + "QUndoCommand.actionText": (), + "QUndoCommand.child": ('int',), + "QUndoCommand.childCount": (), + "QUndoCommand.id": (), + "QUndoCommand.isObsolete": (), + "QUndoCommand.mergeWith": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoCommand.redo": (), + "QUndoCommand.setObsolete": ('bool',), + "QUndoCommand.setText": ('str',), + "QUndoCommand.text": (), + "QUndoCommand.undo": (), + + # class PySide2.QtWidgets.QUndoGroup: + "QUndoGroup.__init__": ('PySide2.QtCore.QObject',), + "QUndoGroup.activeStack": (), + "QUndoGroup.addStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.canRedo": (), + "QUndoGroup.canUndo": (), + "QUndoGroup.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoGroup.isClean": (), + "QUndoGroup.redo": (), + "QUndoGroup.redoText": (), + "QUndoGroup.removeStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.setActiveStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoGroup.stacks": (), + "QUndoGroup.undo": (), + "QUndoGroup.undoText": (), + + # class PySide2.QtWidgets.QUndoStack: + "QUndoStack.__init__": ('PySide2.QtCore.QObject',), + "QUndoStack.beginMacro": ('str',), + "QUndoStack.canRedo": (), + "QUndoStack.canUndo": (), + "QUndoStack.cleanIndex": (), + "QUndoStack.clear": (), + "QUndoStack.command": ('int',), + "QUndoStack.count": (), + "QUndoStack.createRedoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.createUndoAction": ('PySide2.QtCore.QObject', 'str'), + "QUndoStack.endMacro": (), + "QUndoStack.index": (), + "QUndoStack.isActive": (), + "QUndoStack.isClean": (), + "QUndoStack.push": ('PySide2.QtWidgets.QUndoCommand',), + "QUndoStack.redo": (), + "QUndoStack.redoText": (), + "QUndoStack.resetClean": (), + "QUndoStack.setActive": ('bool',), + "QUndoStack.setClean": (), + "QUndoStack.setIndex": ('int',), + "QUndoStack.setUndoLimit": ('int',), + "QUndoStack.text": ('int',), + "QUndoStack.undo": (), + "QUndoStack.undoLimit": (), + "QUndoStack.undoText": (), + + # class PySide2.QtWidgets.QUndoView: + "QUndoView.__init__": [('PySide2.QtWidgets.QUndoGroup', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QUndoStack', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QUndoView.cleanIcon": (), + "QUndoView.emptyLabel": (), + "QUndoView.group": (), + "QUndoView.setCleanIcon": ('PySide2.QtGui.QIcon',), + "QUndoView.setEmptyLabel": ('str',), + "QUndoView.setGroup": ('PySide2.QtWidgets.QUndoGroup',), + "QUndoView.setStack": ('PySide2.QtWidgets.QUndoStack',), + "QUndoView.stack": (), + + # class PySide2.QtWidgets.QVBoxLayout: + "QVBoxLayout.__init__": [(), ('PySide2.QtWidgets.QWidget',)], + + # class PySide2.QtWidgets.QWhatsThis: + "QWhatsThis.createAction": ('PySide2.QtCore.QObject',), + "QWhatsThis.enterWhatsThisMode": (), + "QWhatsThis.hideText": (), + "QWhatsThis.inWhatsThisMode": (), + "QWhatsThis.leaveWhatsThisMode": (), + "QWhatsThis.showText": ('PySide2.QtCore.QPoint', 'str', 'PySide2.QtWidgets.QWidget'), + + # class PySide2.QtWidgets.QWidget: + "QWidget.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWidget.acceptDrops": (), + "QWidget.accessibleDescription": (), + "QWidget.accessibleName": (), + "QWidget.actionEvent": ('PySide2.QtGui.QActionEvent',), + "QWidget.actions": (), + "QWidget.activateWindow": (), + "QWidget.addAction": ('PySide2.QtWidgets.QAction',), + "QWidget.addActions": ('list',), + "QWidget.adjustSize": (), + "QWidget.autoFillBackground": (), + "QWidget.backgroundRole": (), + "QWidget.backingStore": (), + "QWidget.baseSize": (), + "QWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QWidget.childAt": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.childrenRect": (), + "QWidget.childrenRegion": (), + "QWidget.clearFocus": (), + "QWidget.clearMask": (), + "QWidget.close": (), + "QWidget.closeEvent": ('PySide2.QtGui.QCloseEvent',), + "QWidget.contentsMargins": (), + "QWidget.contentsRect": (), + "QWidget.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWidget.contextMenuPolicy": (), + "QWidget.create": ('int', 'bool', 'bool'), + "QWidget.createWinId": (), + "QWidget.createWindowContainer": ('PySide2.QtGui.QWindow', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWidget.cursor": (), + "QWidget.destroy": ('bool', 'bool'), + "QWidget.devType": (), + "QWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWidget.effectiveWinId": (), + "QWidget.ensurePolished": (), + "QWidget.enterEvent": ('PySide2.QtCore.QEvent',), + "QWidget.event": ('PySide2.QtCore.QEvent',), + "QWidget.find": ('int',), + "QWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusNextChild": (), + "QWidget.focusNextPrevChild": ('bool',), + "QWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QWidget.focusPolicy": (), + "QWidget.focusPreviousChild": (), + "QWidget.focusProxy": (), + "QWidget.focusWidget": (), + "QWidget.font": (), + "QWidget.fontInfo": (), + "QWidget.fontMetrics": (), + "QWidget.foregroundRole": (), + "QWidget.frameGeometry": (), + "QWidget.frameSize": (), + "QWidget.geometry": (), + "QWidget.getContentsMargins": ('int', 'int', 'int', 'int'), + "QWidget.grab": ('PySide2.QtCore.QRect',), + "QWidget.grabGesture": ('PySide2.QtCore.Qt.GestureType', 'GestureFlags'), + "QWidget.grabKeyboard": (), + "QWidget.grabMouse": [(), ('PySide2.QtGui.QCursor',)], + "QWidget.grabShortcut": ('PySide2.QtGui.QKeySequence', 'PySide2.QtCore.Qt.ShortcutContext'), + "QWidget.graphicsEffect": (), + "QWidget.graphicsProxyWidget": (), + "QWidget.hasFocus": (), + "QWidget.hasHeightForWidth": (), + "QWidget.hasMouseTracking": (), + "QWidget.hasTabletTracking": (), + "QWidget.height": (), + "QWidget.heightForWidth": ('int',), + "QWidget.hide": (), + "QWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWidget.initPainter": ('PySide2.QtGui.QPainter',), + "QWidget.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QWidget.inputMethodHints": (), + "QWidget.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QWidget.insertAction": ('PySide2.QtWidgets.QAction', 'PySide2.QtWidgets.QAction'), + "QWidget.insertActions": ('PySide2.QtWidgets.QAction', 'list'), + "QWidget.internalWinId": (), + "QWidget.isActiveWindow": (), + "QWidget.isAncestorOf": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabled": (), + "QWidget.isEnabledTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isEnabledToTLW": (), + "QWidget.isFullScreen": (), + "QWidget.isHidden": (), + "QWidget.isLeftToRight": (), + "QWidget.isMaximized": (), + "QWidget.isMinimized": (), + "QWidget.isModal": (), + "QWidget.isRightToLeft": (), + "QWidget.isTopLevel": (), + "QWidget.isVisible": (), + "QWidget.isVisibleTo": ('PySide2.QtWidgets.QWidget',), + "QWidget.isWindow": (), + "QWidget.isWindowModified": (), + "QWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QWidget.keyboardGrabber": (), + "QWidget.layout": (), + "QWidget.layoutDirection": (), + "QWidget.leaveEvent": ('PySide2.QtCore.QEvent',), + "QWidget.locale": (), + "QWidget.lower": (), + "QWidget.mapFrom": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapFromGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapFromParent": ('PySide2.QtCore.QPoint',), + "QWidget.mapTo": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint'), + "QWidget.mapToGlobal": ('PySide2.QtCore.QPoint',), + "QWidget.mapToParent": ('PySide2.QtCore.QPoint',), + "QWidget.mask": (), + "QWidget.maximumHeight": (), + "QWidget.maximumSize": (), + "QWidget.maximumWidth": (), + "QWidget.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QWidget.minimumHeight": (), + "QWidget.minimumSize": (), + "QWidget.minimumSizeHint": (), + "QWidget.minimumWidth": (), + "QWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseGrabber": (), + "QWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QWidget.move": [('PySide2.QtCore.QPoint',), ('int', 'int')], + "QWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QWidget.nativeParentWidget": (), + "QWidget.nextInFocusChain": (), + "QWidget.normalGeometry": (), + "QWidget.overrideWindowFlags": ('WindowFlags',), + "QWidget.overrideWindowState": ('WindowStates',), + "QWidget.paintEngine": (), + "QWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWidget.palette": (), + "QWidget.parentWidget": (), + "QWidget.pos": (), + "QWidget.previousInFocusChain": (), + "QWidget.raise_": (), + "QWidget.rect": (), + "QWidget.redirected": ('PySide2.QtCore.QPoint',), + "QWidget.releaseKeyboard": (), + "QWidget.releaseMouse": (), + "QWidget.releaseShortcut": ('int',), + "QWidget.removeAction": ('PySide2.QtWidgets.QAction',), + "QWidget.render": [('PySide2.QtGui.QPaintDevice', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags'), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QPoint', 'PySide2.QtGui.QRegion', 'RenderFlags')], + "QWidget.repaint": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.resize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWidget.restoreGeometry": ('PySide2.QtCore.QByteArray',), + "QWidget.saveGeometry": (), + "QWidget.scroll": [('int', 'int'), ('int', 'int', 'PySide2.QtCore.QRect')], + "QWidget.setAcceptDrops": ('bool',), + "QWidget.setAccessibleDescription": ('str',), + "QWidget.setAccessibleName": ('str',), + "QWidget.setAttribute": ('PySide2.QtCore.Qt.WidgetAttribute', 'bool'), + "QWidget.setAutoFillBackground": ('bool',), + "QWidget.setBackgroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setBaseSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setContentsMargins": [('PySide2.QtCore.QMargins',), ('int', 'int', 'int', 'int')], + "QWidget.setContextMenuPolicy": ('PySide2.QtCore.Qt.ContextMenuPolicy',), + "QWidget.setCursor": ('PySide2.QtGui.QCursor',), + "QWidget.setDisabled": ('bool',), + "QWidget.setEnabled": ('bool',), + "QWidget.setFixedHeight": ('int',), + "QWidget.setFixedSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setFixedWidth": ('int',), + "QWidget.setFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QWidget.setFocusPolicy": ('PySide2.QtCore.Qt.FocusPolicy',), + "QWidget.setFocusProxy": ('PySide2.QtWidgets.QWidget',), + "QWidget.setFont": ('PySide2.QtGui.QFont',), + "QWidget.setForegroundRole": ('PySide2.QtGui.QPalette.ColorRole',), + "QWidget.setGeometry": [('PySide2.QtCore.QRect',), ('int', 'int', 'int', 'int')], + "QWidget.setGraphicsEffect": ('PySide2.QtWidgets.QGraphicsEffect',), + "QWidget.setHidden": ('bool',), + "QWidget.setInputMethodHints": ('InputMethodHints',), + "QWidget.setLayout": ('PySide2.QtWidgets.QLayout',), + "QWidget.setLayoutDirection": ('PySide2.QtCore.Qt.LayoutDirection',), + "QWidget.setLocale": ('PySide2.QtCore.QLocale',), + "QWidget.setMask": [('PySide2.QtGui.QBitmap',), ('PySide2.QtGui.QRegion',)], + "QWidget.setMaximumHeight": ('int',), + "QWidget.setMaximumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMaximumWidth": ('int',), + "QWidget.setMinimumHeight": ('int',), + "QWidget.setMinimumSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setMinimumWidth": ('int',), + "QWidget.setMouseTracking": ('bool',), + "QWidget.setPalette": ('PySide2.QtGui.QPalette',), + "QWidget.setParent": [('PySide2.QtWidgets.QWidget',), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QWidget.setShortcutAutoRepeat": ('int', 'bool'), + "QWidget.setShortcutEnabled": ('int', 'bool'), + "QWidget.setSizeIncrement": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QWidget.setSizePolicy": [('PySide2.QtWidgets.QSizePolicy',), ('PySide2.QtWidgets.QSizePolicy.Policy', 'PySide2.QtWidgets.QSizePolicy.Policy')], + "QWidget.setStatusTip": ('str',), + "QWidget.setStyle": ('PySide2.QtWidgets.QStyle',), + "QWidget.setStyleSheet": ('str',), + "QWidget.setTabOrder": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QWidget'), + "QWidget.setTabletTracking": ('bool',), + "QWidget.setToolTip": ('str',), + "QWidget.setToolTipDuration": ('int',), + "QWidget.setUpdatesEnabled": ('bool',), + "QWidget.setVisible": ('bool',), + "QWidget.setWhatsThis": ('str',), + "QWidget.setWindowFilePath": ('str',), + "QWidget.setWindowFlag": ('PySide2.QtCore.Qt.WindowType', 'bool'), + "QWidget.setWindowFlags": ('WindowFlags',), + "QWidget.setWindowIcon": ('PySide2.QtGui.QIcon',), + "QWidget.setWindowIconText": ('str',), + "QWidget.setWindowModality": ('PySide2.QtCore.Qt.WindowModality',), + "QWidget.setWindowModified": ('bool',), + "QWidget.setWindowOpacity": ('float',), + "QWidget.setWindowRole": ('str',), + "QWidget.setWindowState": ('WindowStates',), + "QWidget.setWindowTitle": ('str',), + "QWidget.sharedPainter": (), + "QWidget.show": (), + "QWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWidget.showFullScreen": (), + "QWidget.showMaximized": (), + "QWidget.showMinimized": (), + "QWidget.showNormal": (), + "QWidget.size": (), + "QWidget.sizeHint": (), + "QWidget.sizeIncrement": (), + "QWidget.sizePolicy": (), + "QWidget.stackUnder": ('PySide2.QtWidgets.QWidget',), + "QWidget.statusTip": (), + "QWidget.style": (), + "QWidget.styleSheet": (), + "QWidget.tabletEvent": ('PySide2.QtGui.QTabletEvent',), + "QWidget.testAttribute": ('PySide2.QtCore.Qt.WidgetAttribute',), + "QWidget.toolTip": (), + "QWidget.toolTipDuration": (), + "QWidget.topLevelWidget": (), + "QWidget.underMouse": (), + "QWidget.ungrabGesture": ('PySide2.QtCore.Qt.GestureType',), + "QWidget.unsetCursor": (), + "QWidget.unsetLayoutDirection": (), + "QWidget.unsetLocale": (), + "QWidget.update": [(), ('PySide2.QtCore.QRect',), ('PySide2.QtGui.QRegion',), ('int', 'int', 'int', 'int')], + "QWidget.updateGeometry": (), + "QWidget.updateMicroFocus": (), + "QWidget.updatesEnabled": (), + "QWidget.visibleRegion": (), + "QWidget.whatsThis": (), + "QWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QWidget.width": (), + "QWidget.winId": (), + "QWidget.window": (), + "QWidget.windowFilePath": (), + "QWidget.windowFlags": (), + "QWidget.windowHandle": (), + "QWidget.windowIcon": (), + "QWidget.windowIconText": (), + "QWidget.windowModality": (), + "QWidget.windowOpacity": (), + "QWidget.windowRole": (), + "QWidget.windowState": (), + "QWidget.windowTitle": (), + "QWidget.windowType": (), + "QWidget.x": (), + "QWidget.y": (), + + # class PySide2.QtWidgets.QWidgetAction: + "QWidgetAction.__init__": ('PySide2.QtCore.QObject',), + "QWidgetAction.createWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.createdWidgets": (), + "QWidgetAction.defaultWidget": (), + "QWidgetAction.deleteWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.event": ('PySide2.QtCore.QEvent',), + "QWidgetAction.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QWidgetAction.releaseWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.requestWidget": ('PySide2.QtWidgets.QWidget',), + "QWidgetAction.setDefaultWidget": ('PySide2.QtWidgets.QWidget',), + + # class PySide2.QtWidgets.QWidgetItem: + "QWidgetItem.__init__": ('PySide2.QtWidgets.QWidget',), + "QWidgetItem.controlTypes": (), + "QWidgetItem.expandingDirections": (), + "QWidgetItem.geometry": (), + "QWidgetItem.hasHeightForWidth": (), + "QWidgetItem.heightForWidth": ('int',), + "QWidgetItem.isEmpty": (), + "QWidgetItem.maximumSize": (), + "QWidgetItem.minimumSize": (), + "QWidgetItem.setGeometry": ('PySide2.QtCore.QRect',), + "QWidgetItem.sizeHint": (), + "QWidgetItem.widget": (), + + # class PySide2.QtWidgets.QWizard: + "QWizard.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QWizard.addPage": ('PySide2.QtWidgets.QWizardPage',), + "QWizard.back": (), + "QWizard.button": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizard.cleanupPage": ('int',), + "QWizard.currentId": (), + "QWizard.currentPage": (), + "QWizard.done": ('int',), + "QWizard.event": ('PySide2.QtCore.QEvent',), + "QWizard.field": ('str',), + "QWizard.hasVisitedPage": ('int',), + "QWizard.initializePage": ('int',), + "QWizard.nextId": (), + "QWizard.options": (), + "QWizard.page": ('int',), + "QWizard.pageIds": (), + "QWizard.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QWizard.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizard.removePage": ('int',), + "QWizard.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QWizard.restart": (), + "QWizard.setButton": ('PySide2.QtWidgets.QWizard.WizardButton', 'PySide2.QtWidgets.QAbstractButton'), + "QWizard.setButtonLayout": ('list',), + "QWizard.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizard.setDefaultProperty": ('str', 'str', 'str'), + "QWizard.setField": ('str', 'Any'), + "QWizard.setOption": ('PySide2.QtWidgets.QWizard.WizardOption', 'bool'), + "QWizard.setOptions": ('WizardOptions',), + "QWizard.setPage": ('int', 'PySide2.QtWidgets.QWizardPage'), + "QWizard.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizard.setSideWidget": ('PySide2.QtWidgets.QWidget',), + "QWizard.setStartId": ('int',), + "QWizard.setSubTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setTitleFormat": ('PySide2.QtCore.Qt.TextFormat',), + "QWizard.setVisible": ('bool',), + "QWizard.setWizardStyle": ('PySide2.QtWidgets.QWizard.WizardStyle',), + "QWizard.sideWidget": (), + "QWizard.sizeHint": (), + "QWizard.startId": (), + "QWizard.subTitleFormat": (), + "QWizard.testOption": ('PySide2.QtWidgets.QWizard.WizardOption',), + "QWizard.titleFormat": (), + "QWizard.validateCurrentPage": (), + "QWizard.visitedPages": (), + "QWizard.wizardStyle": (), + + # class PySide2.QtWidgets.QWizardPage: + "QWizardPage.__init__": ('PySide2.QtWidgets.QWidget',), + "QWizardPage.buttonText": ('PySide2.QtWidgets.QWizard.WizardButton',), + "QWizardPage.cleanupPage": (), + "QWizardPage.field": ('str',), + "QWizardPage.initializePage": (), + "QWizardPage.isCommitPage": (), + "QWizardPage.isComplete": (), + "QWizardPage.isFinalPage": (), + "QWizardPage.nextId": (), + "QWizardPage.pixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap',), + "QWizardPage.registerField": ('str', 'PySide2.QtWidgets.QWidget', 'str', 'str'), + "QWizardPage.setButtonText": ('PySide2.QtWidgets.QWizard.WizardButton', 'str'), + "QWizardPage.setCommitPage": ('bool',), + "QWizardPage.setField": ('str', 'Any'), + "QWizardPage.setFinalPage": ('bool',), + "QWizardPage.setPixmap": ('PySide2.QtWidgets.QWizard.WizardPixmap', 'PySide2.QtGui.QPixmap'), + "QWizardPage.setSubTitle": ('str',), + "QWizardPage.setTitle": ('str',), + "QWizardPage.subTitle": (), + "QWizardPage.title": (), + "QWizardPage.validatePage": (), + "QWizardPage.wizard": (), + }) + +# Module PySide2.QtPrintSupport +if "PySide2.QtPrintSupport" in sys.modules: + dict.update({ + + # class PySide2.QtPrintSupport.QAbstractPrintDialog: + "QAbstractPrintDialog.__init__": ('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), + "QAbstractPrintDialog.addEnabledOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.enabledOptions": (), + "QAbstractPrintDialog.exec_": (), + "QAbstractPrintDialog.fromPage": (), + "QAbstractPrintDialog.isOptionEnabled": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + "QAbstractPrintDialog.maxPage": (), + "QAbstractPrintDialog.minPage": (), + "QAbstractPrintDialog.printRange": (), + "QAbstractPrintDialog.printer": (), + "QAbstractPrintDialog.setEnabledOptions": ('PrintDialogOptions',), + "QAbstractPrintDialog.setFromTo": ('int', 'int'), + "QAbstractPrintDialog.setMinMax": ('int', 'int'), + "QAbstractPrintDialog.setOptionTabs": ('list',), + "QAbstractPrintDialog.setPrintRange": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintRange',), + "QAbstractPrintDialog.toPage": (), + + # class PySide2.QtPrintSupport.QPageSetupDialog: + "QPageSetupDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPageSetupDialog.done": ('int',), + "QPageSetupDialog.exec_": (), + "QPageSetupDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPageSetupDialog.printer": (), + "QPageSetupDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintDialog: + "QPrintDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QPrintDialog.done": ('int',), + "QPrintDialog.exec_": (), + "QPrintDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintDialog.options": (), + "QPrintDialog.setOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption', 'bool'), + "QPrintDialog.setOptions": ('PrintDialogOptions',), + "QPrintDialog.setVisible": ('bool',), + "QPrintDialog.testOption": ('PySide2.QtPrintSupport.QAbstractPrintDialog.PrintDialogOption',), + + # class PySide2.QtPrintSupport.QPrintEngine: + "QPrintEngine.__init__": (), + "QPrintEngine.abort": (), + "QPrintEngine.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrintEngine.newPage": (), + "QPrintEngine.printerState": (), + "QPrintEngine.property": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey',), + "QPrintEngine.setProperty": ('PySide2.QtPrintSupport.QPrintEngine.PrintEnginePropertyKey', 'Any'), + + # class PySide2.QtPrintSupport.QPrintPreviewDialog: + "QPrintPreviewDialog.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QPrintPreviewDialog.done": ('int',), + "QPrintPreviewDialog.open": [(), ('PySide2.QtCore.QObject', 'str')], + "QPrintPreviewDialog.printer": (), + "QPrintPreviewDialog.setVisible": ('bool',), + + # class PySide2.QtPrintSupport.QPrintPreviewWidget: + "QPrintPreviewWidget.__init__": [('PySide2.QtPrintSupport.QPrinter', 'PySide2.QtWidgets.QWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QPrintPreviewWidget.currentPage": (), + "QPrintPreviewWidget.fitInView": (), + "QPrintPreviewWidget.fitToWidth": (), + "QPrintPreviewWidget.orientation": (), + "QPrintPreviewWidget.pageCount": (), + "QPrintPreviewWidget.print_": (), + "QPrintPreviewWidget.setAllPagesViewMode": (), + "QPrintPreviewWidget.setCurrentPage": ('int',), + "QPrintPreviewWidget.setFacingPagesViewMode": (), + "QPrintPreviewWidget.setLandscapeOrientation": (), + "QPrintPreviewWidget.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrintPreviewWidget.setPortraitOrientation": (), + "QPrintPreviewWidget.setSinglePageViewMode": (), + "QPrintPreviewWidget.setViewMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ViewMode',), + "QPrintPreviewWidget.setVisible": ('bool',), + "QPrintPreviewWidget.setZoomFactor": ('float',), + "QPrintPreviewWidget.setZoomMode": ('PySide2.QtPrintSupport.QPrintPreviewWidget.ZoomMode',), + "QPrintPreviewWidget.updatePreview": (), + "QPrintPreviewWidget.viewMode": (), + "QPrintPreviewWidget.zoomFactor": (), + "QPrintPreviewWidget.zoomIn": ('float',), + "QPrintPreviewWidget.zoomMode": (), + "QPrintPreviewWidget.zoomOut": ('float',), + + # class PySide2.QtPrintSupport.QPrinter: + "QPrinter.__init__": [('PySide2.QtPrintSupport.QPrinter.PrinterMode',), ('PySide2.QtPrintSupport.QPrinterInfo', 'PySide2.QtPrintSupport.QPrinter.PrinterMode')], + "QPrinter.abort": (), + "QPrinter.actualNumCopies": (), + "QPrinter.collateCopies": (), + "QPrinter.colorMode": (), + "QPrinter.copyCount": (), + "QPrinter.creator": (), + "QPrinter.devType": (), + "QPrinter.docName": (), + "QPrinter.doubleSidedPrinting": (), + "QPrinter.duplex": (), + "QPrinter.fontEmbeddingEnabled": (), + "QPrinter.fromPage": (), + "QPrinter.fullPage": (), + "QPrinter.getPageMargins": ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit'), + "QPrinter.isValid": (), + "QPrinter.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QPrinter.newPage": (), + "QPrinter.numCopies": (), + "QPrinter.orientation": (), + "QPrinter.outputFileName": (), + "QPrinter.outputFormat": (), + "QPrinter.pageOrder": (), + "QPrinter.pageRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.pageSize": (), + "QPrinter.paintEngine": (), + "QPrinter.paperName": (), + "QPrinter.paperRect": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSize": [(), ('PySide2.QtPrintSupport.QPrinter.Unit',)], + "QPrinter.paperSource": (), + "QPrinter.printEngine": (), + "QPrinter.printProgram": (), + "QPrinter.printRange": (), + "QPrinter.printerName": (), + "QPrinter.printerState": (), + "QPrinter.resolution": (), + "QPrinter.setCollateCopies": ('bool',), + "QPrinter.setColorMode": ('PySide2.QtPrintSupport.QPrinter.ColorMode',), + "QPrinter.setCopyCount": ('int',), + "QPrinter.setCreator": ('str',), + "QPrinter.setDocName": ('str',), + "QPrinter.setDoubleSidedPrinting": ('bool',), + "QPrinter.setDuplex": ('PySide2.QtPrintSupport.QPrinter.DuplexMode',), + "QPrinter.setEngines": ('PySide2.QtPrintSupport.QPrintEngine', 'PySide2.QtGui.QPaintEngine'), + "QPrinter.setFontEmbeddingEnabled": ('bool',), + "QPrinter.setFromTo": ('int', 'int'), + "QPrinter.setFullPage": ('bool',), + "QPrinter.setMargins": ('PySide2.QtGui.QPagedPaintDevice.Margins',), + "QPrinter.setNumCopies": ('int',), + "QPrinter.setOrientation": ('PySide2.QtPrintSupport.QPrinter.Orientation',), + "QPrinter.setOutputFileName": ('str',), + "QPrinter.setOutputFormat": ('PySide2.QtPrintSupport.QPrinter.OutputFormat',), + "QPrinter.setPageMargins": [('PySide2.QtCore.QMarginsF',), ('float', 'float', 'float', 'float', 'PySide2.QtPrintSupport.QPrinter.Unit')], + "QPrinter.setPageOrder": ('PySide2.QtPrintSupport.QPrinter.PageOrder',), + "QPrinter.setPageSize": ('PySide2.QtGui.QPagedPaintDevice.PageSize',), + "QPrinter.setPageSizeMM": ('PySide2.QtCore.QSizeF',), + "QPrinter.setPaperName": ('str',), + "QPrinter.setPaperSize": [('PySide2.QtCore.QSizeF', 'PySide2.QtPrintSupport.QPrinter.Unit'), ('PySide2.QtGui.QPagedPaintDevice.PageSize',)], + "QPrinter.setPaperSource": ('PySide2.QtPrintSupport.QPrinter.PaperSource',), + "QPrinter.setPrintProgram": ('str',), + "QPrinter.setPrintRange": ('PySide2.QtPrintSupport.QPrinter.PrintRange',), + "QPrinter.setPrinterName": ('str',), + "QPrinter.setResolution": ('int',), + "QPrinter.setWinPageSize": ('int',), + "QPrinter.supportedPaperSources": (), + "QPrinter.supportedResolutions": (), + "QPrinter.supportsMultipleCopies": (), + "QPrinter.toPage": (), + "QPrinter.winPageSize": (), + + # class PySide2.QtPrintSupport.QPrinterInfo: + "QPrinterInfo.__init__": [(), ('PySide2.QtPrintSupport.QPrinter',), ('PySide2.QtPrintSupport.QPrinterInfo',)], + "QPrinterInfo.__copy__": (), + "QPrinterInfo.availablePrinterNames": (), + "QPrinterInfo.availablePrinters": (), + "QPrinterInfo.defaultDuplexMode": (), + "QPrinterInfo.defaultPageSize": (), + "QPrinterInfo.defaultPrinter": (), + "QPrinterInfo.defaultPrinterName": (), + "QPrinterInfo.description": (), + "QPrinterInfo.isDefault": (), + "QPrinterInfo.isNull": (), + "QPrinterInfo.isRemote": (), + "QPrinterInfo.location": (), + "QPrinterInfo.makeAndModel": (), + "QPrinterInfo.maximumPhysicalPageSize": (), + "QPrinterInfo.minimumPhysicalPageSize": (), + "QPrinterInfo.printerInfo": ('str',), + "QPrinterInfo.printerName": (), + "QPrinterInfo.state": (), + "QPrinterInfo.supportedDuplexModes": (), + "QPrinterInfo.supportedPageSizes": (), + "QPrinterInfo.supportedPaperSizes": (), + "QPrinterInfo.supportedResolutions": (), + "QPrinterInfo.supportedSizesWithNames": (), + "QPrinterInfo.supportsCustomPageSizes": (), + }) + +# Module PySide2.QtSql +if "PySide2.QtSql" in sys.modules: + dict.update({ + + # class PySide2.QtSql.QSql: + + # class PySide2.QtSql.QSqlDatabase: + "QSqlDatabase.__init__": [(), ('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlDriver',), ('str',)], + "QSqlDatabase.__copy__": (), + "QSqlDatabase.addDatabase": [('PySide2.QtSql.QSqlDriver', 'str'), ('str', 'str')], + "QSqlDatabase.cloneDatabase": ('PySide2.QtSql.QSqlDatabase', 'str'), + "QSqlDatabase.close": (), + "QSqlDatabase.commit": (), + "QSqlDatabase.connectOptions": (), + "QSqlDatabase.connectionName": (), + "QSqlDatabase.connectionNames": (), + "QSqlDatabase.contains": ('str',), + "QSqlDatabase.database": ('str', 'bool'), + "QSqlDatabase.databaseName": (), + "QSqlDatabase.driver": (), + "QSqlDatabase.driverName": (), + "QSqlDatabase.drivers": (), + "QSqlDatabase.exec_": ('str',), + "QSqlDatabase.hostName": (), + "QSqlDatabase.isDriverAvailable": ('str',), + "QSqlDatabase.isOpen": (), + "QSqlDatabase.isOpenError": (), + "QSqlDatabase.isValid": (), + "QSqlDatabase.lastError": (), + "QSqlDatabase.numericalPrecisionPolicy": (), + "QSqlDatabase.open": [(), ('str', 'str')], + "QSqlDatabase.password": (), + "QSqlDatabase.port": (), + "QSqlDatabase.primaryIndex": ('str',), + "QSqlDatabase.record": ('str',), + "QSqlDatabase.registerSqlDriver": ('str', 'PySide2.QtSql.QSqlDriverCreatorBase'), + "QSqlDatabase.removeDatabase": ('str',), + "QSqlDatabase.rollback": (), + "QSqlDatabase.setConnectOptions": ('str',), + "QSqlDatabase.setDatabaseName": ('str',), + "QSqlDatabase.setHostName": ('str',), + "QSqlDatabase.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDatabase.setPassword": ('str',), + "QSqlDatabase.setPort": ('int',), + "QSqlDatabase.setUserName": ('str',), + "QSqlDatabase.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDatabase.transaction": (), + "QSqlDatabase.userName": (), + + # class PySide2.QtSql.QSqlDriver: + "QSqlDriver.__init__": ('PySide2.QtCore.QObject',), + "QSqlDriver.beginTransaction": (), + "QSqlDriver.cancelQuery": (), + "QSqlDriver.close": (), + "QSqlDriver.commitTransaction": (), + "QSqlDriver.createResult": (), + "QSqlDriver.dbmsType": (), + "QSqlDriver.escapeIdentifier": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.formatValue": ('PySide2.QtSql.QSqlField', 'bool'), + "QSqlDriver.hasFeature": ('PySide2.QtSql.QSqlDriver.DriverFeature',), + "QSqlDriver.isIdentifierEscaped": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.isOpen": (), + "QSqlDriver.isOpenError": (), + "QSqlDriver.lastError": (), + "QSqlDriver.numericalPrecisionPolicy": (), + "QSqlDriver.open": ('str', 'str', 'str', 'str', 'int', 'str'), + "QSqlDriver.primaryIndex": ('str',), + "QSqlDriver.record": ('str',), + "QSqlDriver.rollbackTransaction": (), + "QSqlDriver.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlDriver.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlDriver.setOpen": ('bool',), + "QSqlDriver.setOpenError": ('bool',), + "QSqlDriver.sqlStatement": ('PySide2.QtSql.QSqlDriver.StatementType', 'str', 'PySide2.QtSql.QSqlRecord', 'bool'), + "QSqlDriver.stripDelimiters": ('str', 'PySide2.QtSql.QSqlDriver.IdentifierType'), + "QSqlDriver.subscribeToNotification": ('str',), + "QSqlDriver.subscribedToNotifications": (), + "QSqlDriver.tables": ('PySide2.QtSql.QSql.TableType',), + "QSqlDriver.unsubscribeFromNotification": ('str',), + + # class PySide2.QtSql.QSqlDriverCreatorBase: + "QSqlDriverCreatorBase.__init__": (), + "QSqlDriverCreatorBase.createObject": (), + + # class PySide2.QtSql.QSqlError: + "QSqlError.__init__": [('PySide2.QtSql.QSqlError',), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'int'), ('str', 'str', 'PySide2.QtSql.QSqlError.ErrorType', 'str')], + "QSqlError.__copy__": (), + "QSqlError.databaseText": (), + "QSqlError.driverText": (), + "QSqlError.isValid": (), + "QSqlError.nativeErrorCode": (), + "QSqlError.number": (), + "QSqlError.setDatabaseText": ('str',), + "QSqlError.setDriverText": ('str',), + "QSqlError.setNumber": ('int',), + "QSqlError.setType": ('PySide2.QtSql.QSqlError.ErrorType',), + "QSqlError.text": (), + "QSqlError.type": (), + + # class PySide2.QtSql.QSqlField: + "QSqlField.__init__": [('PySide2.QtSql.QSqlField',), ('str', 'type')], + "QSqlField.__copy__": (), + "QSqlField.clear": (), + "QSqlField.defaultValue": (), + "QSqlField.isAutoValue": (), + "QSqlField.isGenerated": (), + "QSqlField.isNull": (), + "QSqlField.isReadOnly": (), + "QSqlField.isValid": (), + "QSqlField.length": (), + "QSqlField.name": (), + "QSqlField.precision": (), + "QSqlField.requiredStatus": (), + "QSqlField.setAutoValue": ('bool',), + "QSqlField.setDefaultValue": ('Any',), + "QSqlField.setGenerated": ('bool',), + "QSqlField.setLength": ('int',), + "QSqlField.setName": ('str',), + "QSqlField.setPrecision": ('int',), + "QSqlField.setReadOnly": ('bool',), + "QSqlField.setRequired": ('bool',), + "QSqlField.setRequiredStatus": ('PySide2.QtSql.QSqlField.RequiredStatus',), + "QSqlField.setSqlType": ('int',), + "QSqlField.setType": ('type',), + "QSqlField.setValue": ('Any',), + "QSqlField.type": (), + "QSqlField.typeID": (), + "QSqlField.value": (), + + # class PySide2.QtSql.QSqlIndex: + "QSqlIndex.__init__": [('PySide2.QtSql.QSqlIndex',), ('str', 'str')], + "QSqlIndex.__copy__": (), + "QSqlIndex.append": [('PySide2.QtSql.QSqlField',), ('PySide2.QtSql.QSqlField', 'bool')], + "QSqlIndex.cursorName": (), + "QSqlIndex.isDescending": ('int',), + "QSqlIndex.name": (), + "QSqlIndex.setCursorName": ('str',), + "QSqlIndex.setDescending": ('int', 'bool'), + "QSqlIndex.setName": ('str',), + + # class PySide2.QtSql.QSqlQuery: + "QSqlQuery.__init__": [('PySide2.QtSql.QSqlDatabase',), ('PySide2.QtSql.QSqlQuery',), ('PySide2.QtSql.QSqlResult',), ('str', 'PySide2.QtSql.QSqlDatabase')], + "QSqlQuery.__copy__": (), + "QSqlQuery.addBindValue": ('Any', 'ParamType'), + "QSqlQuery.at": (), + "QSqlQuery.bindValue": [('int', 'Any', 'ParamType'), ('str', 'Any', 'ParamType')], + "QSqlQuery.boundValue": [('int',), ('str',)], + "QSqlQuery.boundValues": (), + "QSqlQuery.clear": (), + "QSqlQuery.driver": (), + "QSqlQuery.execBatch": ('PySide2.QtSql.QSqlQuery.BatchExecutionMode',), + "QSqlQuery.exec_": [(), ('str',)], + "QSqlQuery.executedQuery": (), + "QSqlQuery.finish": (), + "QSqlQuery.first": (), + "QSqlQuery.isActive": (), + "QSqlQuery.isForwardOnly": (), + "QSqlQuery.isNull": [('int',), ('str',)], + "QSqlQuery.isSelect": (), + "QSqlQuery.isValid": (), + "QSqlQuery.last": (), + "QSqlQuery.lastError": (), + "QSqlQuery.lastInsertId": (), + "QSqlQuery.lastQuery": (), + "QSqlQuery.nextResult": (), + "QSqlQuery.numRowsAffected": (), + "QSqlQuery.numericalPrecisionPolicy": (), + "QSqlQuery.prepare": ('str',), + "QSqlQuery.previous": (), + "QSqlQuery.record": (), + "QSqlQuery.result": (), + "QSqlQuery.seek": ('int', 'bool'), + "QSqlQuery.setForwardOnly": ('bool',), + "QSqlQuery.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlQuery.size": (), + "QSqlQuery.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlQueryModel: + "QSqlQueryModel.__init__": ('PySide2.QtCore.QObject',), + "QSqlQueryModel.beginInsertColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginInsertRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveColumns": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginRemoveRows": ('PySide2.QtCore.QModelIndex', 'int', 'int'), + "QSqlQueryModel.beginResetModel": (), + "QSqlQueryModel.canFetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.clear": (), + "QSqlQueryModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlQueryModel.endInsertColumns": (), + "QSqlQueryModel.endInsertRows": (), + "QSqlQueryModel.endRemoveColumns": (), + "QSqlQueryModel.endRemoveRows": (), + "QSqlQueryModel.endResetModel": (), + "QSqlQueryModel.fetchMore": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlQueryModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.insertColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.lastError": (), + "QSqlQueryModel.query": (), + "QSqlQueryModel.queryChange": (), + "QSqlQueryModel.record": [(), ('int',)], + "QSqlQueryModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlQueryModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlQueryModel.setHeaderData": ('int', 'PySide2.QtCore.Qt.Orientation', 'Any', 'int'), + "QSqlQueryModel.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlQueryModel.setQuery": [('PySide2.QtSql.QSqlQuery',), ('str', 'PySide2.QtSql.QSqlDatabase')], + + # class PySide2.QtSql.QSqlRecord: + "QSqlRecord.__init__": [(), ('PySide2.QtSql.QSqlRecord',)], + "QSqlRecord.__copy__": (), + "QSqlRecord.append": ('PySide2.QtSql.QSqlField',), + "QSqlRecord.clear": (), + "QSqlRecord.clearValues": (), + "QSqlRecord.contains": ('str',), + "QSqlRecord.count": (), + "QSqlRecord.field": [('int',), ('str',)], + "QSqlRecord.fieldName": ('int',), + "QSqlRecord.indexOf": ('str',), + "QSqlRecord.insert": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.isEmpty": (), + "QSqlRecord.isGenerated": [('int',), ('str',)], + "QSqlRecord.isNull": [('int',), ('str',)], + "QSqlRecord.keyValues": ('PySide2.QtSql.QSqlRecord',), + "QSqlRecord.remove": ('int',), + "QSqlRecord.replace": ('int', 'PySide2.QtSql.QSqlField'), + "QSqlRecord.setGenerated": [('int', 'bool'), ('str', 'bool')], + "QSqlRecord.setNull": [('int',), ('str',)], + "QSqlRecord.setValue": [('int', 'Any'), ('str', 'Any')], + "QSqlRecord.value": [('int',), ('str',)], + + # class PySide2.QtSql.QSqlRelation: + "QSqlRelation.__init__": [(), ('PySide2.QtSql.QSqlRelation',), ('str', 'str', 'str')], + "QSqlRelation.__copy__": (), + "QSqlRelation.displayColumn": (), + "QSqlRelation.indexColumn": (), + "QSqlRelation.isValid": (), + "QSqlRelation.swap": ('PySide2.QtSql.QSqlRelation',), + "QSqlRelation.tableName": (), + + # class PySide2.QtSql.QSqlRelationalDelegate: + "QSqlRelationalDelegate.__init__": ('PySide2.QtCore.QObject',), + "QSqlRelationalDelegate.createEditor": ('PySide2.QtWidgets.QWidget', 'PySide2.QtWidgets.QStyleOptionViewItem', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalDelegate.setModelData": ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QAbstractItemModel', 'PySide2.QtCore.QModelIndex'), + + # class PySide2.QtSql.QSqlRelationalTableModel: + "QSqlRelationalTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlRelationalTableModel.clear": (), + "QSqlRelationalTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlRelationalTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlRelationalTableModel.orderByClause": (), + "QSqlRelationalTableModel.relation": ('int',), + "QSqlRelationalTableModel.relationModel": ('int',), + "QSqlRelationalTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlRelationalTableModel.revertRow": ('int',), + "QSqlRelationalTableModel.select": (), + "QSqlRelationalTableModel.selectStatement": (), + "QSqlRelationalTableModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSqlRelationalTableModel.setJoinMode": ('PySide2.QtSql.QSqlRelationalTableModel.JoinMode',), + "QSqlRelationalTableModel.setRelation": ('int', 'PySide2.QtSql.QSqlRelation'), + "QSqlRelationalTableModel.setTable": ('str',), + "QSqlRelationalTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + + # class PySide2.QtSql.QSqlResult: + "QSqlResult.__init__": ('PySide2.QtSql.QSqlDriver',), + "QSqlResult.addBindValue": ('Any', 'ParamType'), + "QSqlResult.at": (), + "QSqlResult.bindValue": [('int', 'Any', 'ParamType'), ('str', 'Any', 'ParamType')], + "QSqlResult.bindValueType": [('int',), ('str',)], + "QSqlResult.bindingSyntax": (), + "QSqlResult.boundValue": [('int',), ('str',)], + "QSqlResult.boundValueCount": (), + "QSqlResult.boundValueName": ('int',), + "QSqlResult.boundValues": (), + "QSqlResult.clear": (), + "QSqlResult.data": ('int',), + "QSqlResult.detachFromResultSet": (), + "QSqlResult.driver": (), + "QSqlResult.execBatch": ('bool',), + "QSqlResult.exec_": (), + "QSqlResult.executedQuery": (), + "QSqlResult.fetch": ('int',), + "QSqlResult.fetchFirst": (), + "QSqlResult.fetchLast": (), + "QSqlResult.fetchNext": (), + "QSqlResult.fetchPrevious": (), + "QSqlResult.handle": (), + "QSqlResult.hasOutValues": (), + "QSqlResult.isActive": (), + "QSqlResult.isForwardOnly": (), + "QSqlResult.isNull": ('int',), + "QSqlResult.isSelect": (), + "QSqlResult.isValid": (), + "QSqlResult.lastError": (), + "QSqlResult.lastInsertId": (), + "QSqlResult.lastQuery": (), + "QSqlResult.nextResult": (), + "QSqlResult.numRowsAffected": (), + "QSqlResult.numericalPrecisionPolicy": (), + "QSqlResult.prepare": ('str',), + "QSqlResult.record": (), + "QSqlResult.reset": ('str',), + "QSqlResult.resetBindCount": (), + "QSqlResult.savePrepare": ('str',), + "QSqlResult.setActive": ('bool',), + "QSqlResult.setAt": ('int',), + "QSqlResult.setForwardOnly": ('bool',), + "QSqlResult.setLastError": ('PySide2.QtSql.QSqlError',), + "QSqlResult.setNumericalPrecisionPolicy": ('PySide2.QtSql.QSql.NumericalPrecisionPolicy',), + "QSqlResult.setQuery": ('str',), + "QSqlResult.setSelect": ('bool',), + "QSqlResult.size": (), + + # class PySide2.QtSql.QSqlTableModel: + "QSqlTableModel.__init__": ('PySide2.QtCore.QObject', 'PySide2.QtSql.QSqlDatabase'), + "QSqlTableModel.clear": (), + "QSqlTableModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QSqlTableModel.database": (), + "QSqlTableModel.deleteRowFromTable": ('int',), + "QSqlTableModel.editStrategy": (), + "QSqlTableModel.fieldIndex": ('str',), + "QSqlTableModel.filter": (), + "QSqlTableModel.flags": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.headerData": ('int', 'PySide2.QtCore.Qt.Orientation', 'int'), + "QSqlTableModel.indexInQuery": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.insertRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.insertRowIntoTable": ('PySide2.QtSql.QSqlRecord',), + "QSqlTableModel.insertRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.isDirty": [(), ('PySide2.QtCore.QModelIndex',)], + "QSqlTableModel.orderByClause": (), + "QSqlTableModel.primaryKey": (), + "QSqlTableModel.primaryValues": ('int',), + "QSqlTableModel.record": [(), ('int',)], + "QSqlTableModel.removeColumns": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.removeRows": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QSqlTableModel.revert": (), + "QSqlTableModel.revertAll": (), + "QSqlTableModel.revertRow": ('int',), + "QSqlTableModel.rowCount": ('PySide2.QtCore.QModelIndex',), + "QSqlTableModel.select": (), + "QSqlTableModel.selectRow": ('int',), + "QSqlTableModel.selectStatement": (), + "QSqlTableModel.setData": ('PySide2.QtCore.QModelIndex', 'Any', 'int'), + "QSqlTableModel.setEditStrategy": ('PySide2.QtSql.QSqlTableModel.EditStrategy',), + "QSqlTableModel.setFilter": ('str',), + "QSqlTableModel.setPrimaryKey": ('PySide2.QtSql.QSqlIndex',), + "QSqlTableModel.setQuery": ('PySide2.QtSql.QSqlQuery',), + "QSqlTableModel.setRecord": ('int', 'PySide2.QtSql.QSqlRecord'), + "QSqlTableModel.setSort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.setTable": ('str',), + "QSqlTableModel.sort": ('int', 'PySide2.QtCore.Qt.SortOrder'), + "QSqlTableModel.submit": (), + "QSqlTableModel.submitAll": (), + "QSqlTableModel.tableName": (), + "QSqlTableModel.updateRowInTable": ('int', 'PySide2.QtSql.QSqlRecord'), + }) + +# Module PySide2.QtNetwork +if "PySide2.QtNetwork" in sys.modules: + dict.update({ + + # class PySide2.QtNetwork.QAbstractNetworkCache: + "QAbstractNetworkCache.__init__": ('PySide2.QtCore.QObject',), + "QAbstractNetworkCache.cacheSize": (), + "QAbstractNetworkCache.clear": (), + "QAbstractNetworkCache.data": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.insert": ('PySide2.QtCore.QIODevice',), + "QAbstractNetworkCache.metaData": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QAbstractNetworkCache.remove": ('PySide2.QtCore.QUrl',), + "QAbstractNetworkCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QAbstractSocket: + "QAbstractSocket.__init__": ('PySide2.QtNetwork.QAbstractSocket.SocketType', 'PySide2.QtCore.QObject'), + "QAbstractSocket.abort": (), + "QAbstractSocket.atEnd": (), + "QAbstractSocket.bind": [('PySide2.QtNetwork.QHostAddress', 'int', 'BindMode'), ('int', 'BindMode')], + "QAbstractSocket.bytesAvailable": (), + "QAbstractSocket.bytesToWrite": (), + "QAbstractSocket.canReadLine": (), + "QAbstractSocket.close": (), + "QAbstractSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'OpenMode'), ('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QAbstractSocket.disconnectFromHost": (), + "QAbstractSocket.flush": (), + "QAbstractSocket.isSequential": (), + "QAbstractSocket.isValid": (), + "QAbstractSocket.localAddress": (), + "QAbstractSocket.localPort": (), + "QAbstractSocket.pauseMode": (), + "QAbstractSocket.peerAddress": (), + "QAbstractSocket.peerName": (), + "QAbstractSocket.peerPort": (), + "QAbstractSocket.proxy": (), + "QAbstractSocket.readBufferSize": (), + "QAbstractSocket.readData": ('str', 'int'), + "QAbstractSocket.readLineData": ('str', 'int'), + "QAbstractSocket.resume": (), + "QAbstractSocket.setLocalAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setLocalPort": ('int',), + "QAbstractSocket.setPauseMode": ('PauseModes',), + "QAbstractSocket.setPeerAddress": ('PySide2.QtNetwork.QHostAddress',), + "QAbstractSocket.setPeerName": ('str',), + "QAbstractSocket.setPeerPort": ('int',), + "QAbstractSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QAbstractSocket.setReadBufferSize": ('int',), + "QAbstractSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'OpenMode'), + "QAbstractSocket.setSocketError": ('PySide2.QtNetwork.QAbstractSocket.SocketError',), + "QAbstractSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'Any'), + "QAbstractSocket.setSocketState": ('PySide2.QtNetwork.QAbstractSocket.SocketState',), + "QAbstractSocket.socketDescriptor": (), + "QAbstractSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QAbstractSocket.socketType": (), + "QAbstractSocket.state": (), + "QAbstractSocket.waitForBytesWritten": ('int',), + "QAbstractSocket.waitForConnected": ('int',), + "QAbstractSocket.waitForDisconnected": ('int',), + "QAbstractSocket.waitForReadyRead": ('int',), + "QAbstractSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QAuthenticator: + "QAuthenticator.__init__": [(), ('PySide2.QtNetwork.QAuthenticator',)], + "QAuthenticator.__copy__": (), + "QAuthenticator.isNull": (), + "QAuthenticator.option": ('str',), + "QAuthenticator.options": (), + "QAuthenticator.password": (), + "QAuthenticator.realm": (), + "QAuthenticator.setOption": ('str', 'Any'), + "QAuthenticator.setPassword": ('str',), + "QAuthenticator.setRealm": ('str',), + "QAuthenticator.setUser": ('str',), + "QAuthenticator.user": (), + + # class PySide2.QtNetwork.QHostAddress: + "QHostAddress.__init__": [(), ('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.__copy__": (), + "QHostAddress.clear": (), + "QHostAddress.isEqual": ('PySide2.QtNetwork.QHostAddress', 'ConversionMode'), + "QHostAddress.isInSubnet": [('PySide2.QtNetwork.QHostAddress', 'int'), ('Tuple[Any, Any]',)], + "QHostAddress.isLoopback": (), + "QHostAddress.isMulticast": (), + "QHostAddress.isNull": (), + "QHostAddress.parseSubnet": ('str',), + "QHostAddress.protocol": (), + "QHostAddress.scopeId": (), + "QHostAddress.setAddress": [('PySide2.QtNetwork.QHostAddress.SpecialAddress',), ('PySide2.QtNetwork.QIPv6Address',), ('int',), ('str',)], + "QHostAddress.setScopeId": ('str',), + "QHostAddress.swap": ('PySide2.QtNetwork.QHostAddress',), + "QHostAddress.toIPv4Address": [(), ('bool',)], + "QHostAddress.toIPv6Address": (), + "QHostAddress.toString": (), + + # class PySide2.QtNetwork.QHostInfo: + "QHostInfo.__init__": [('PySide2.QtNetwork.QHostInfo',), ('int',)], + "QHostInfo.__copy__": (), + "QHostInfo.abortHostLookup": ('int',), + "QHostInfo.addresses": (), + "QHostInfo.error": (), + "QHostInfo.errorString": (), + "QHostInfo.fromName": ('str',), + "QHostInfo.hostName": (), + "QHostInfo.localDomainName": (), + "QHostInfo.localHostName": (), + "QHostInfo.lookupId": (), + "QHostInfo.setAddresses": ('list',), + "QHostInfo.setError": ('PySide2.QtNetwork.QHostInfo.HostInfoError',), + "QHostInfo.setErrorString": ('str',), + "QHostInfo.setHostName": ('str',), + "QHostInfo.setLookupId": ('int',), + + # class PySide2.QtNetwork.QIPv6Address: + "QIPv6Address.__init__": [(), ('PySide2.QtNetwork.QIPv6Address',)], + "QIPv6Address.__copy__": (), + + # class PySide2.QtNetwork.QLocalServer: + "QLocalServer.__init__": ('PySide2.QtCore.QObject',), + "QLocalServer.close": (), + "QLocalServer.errorString": (), + "QLocalServer.fullServerName": (), + "QLocalServer.hasPendingConnections": (), + "QLocalServer.incomingConnection": ('int',), + "QLocalServer.isListening": (), + "QLocalServer.listen": [('int',), ('str',)], + "QLocalServer.maxPendingConnections": (), + "QLocalServer.nextPendingConnection": (), + "QLocalServer.removeServer": ('str',), + "QLocalServer.serverError": (), + "QLocalServer.serverName": (), + "QLocalServer.setMaxPendingConnections": ('int',), + "QLocalServer.setSocketOptions": ('SocketOptions',), + "QLocalServer.socketOptions": (), + "QLocalServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QLocalSocket: + "QLocalSocket.__init__": ('PySide2.QtCore.QObject',), + "QLocalSocket.abort": (), + "QLocalSocket.bytesAvailable": (), + "QLocalSocket.bytesToWrite": (), + "QLocalSocket.canReadLine": (), + "QLocalSocket.close": (), + "QLocalSocket.connectToServer": [('OpenMode',), ('str', 'OpenMode')], + "QLocalSocket.disconnectFromServer": (), + "QLocalSocket.flush": (), + "QLocalSocket.fullServerName": (), + "QLocalSocket.isSequential": (), + "QLocalSocket.isValid": (), + "QLocalSocket.open": ('OpenMode',), + "QLocalSocket.readBufferSize": (), + "QLocalSocket.readData": ('str', 'int'), + "QLocalSocket.serverName": (), + "QLocalSocket.setReadBufferSize": ('int',), + "QLocalSocket.setServerName": ('str',), + "QLocalSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QLocalSocket.LocalSocketState', 'OpenMode'), + "QLocalSocket.socketDescriptor": (), + "QLocalSocket.state": (), + "QLocalSocket.waitForBytesWritten": ('int',), + "QLocalSocket.waitForConnected": ('int',), + "QLocalSocket.waitForDisconnected": ('int',), + "QLocalSocket.waitForReadyRead": ('int',), + "QLocalSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkAccessManager: + "QNetworkAccessManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkAccessManager.activeConfiguration": (), + "QNetworkAccessManager.cache": (), + "QNetworkAccessManager.clearAccessCache": (), + "QNetworkAccessManager.clearConnectionCache": (), + "QNetworkAccessManager.configuration": (), + "QNetworkAccessManager.connectToHost": ('str', 'int'), + "QNetworkAccessManager.connectToHostEncrypted": ('str', 'int', 'PySide2.QtNetwork.QSslConfiguration'), + "QNetworkAccessManager.cookieJar": (), + "QNetworkAccessManager.createRequest": ('PySide2.QtNetwork.QNetworkAccessManager.Operation', 'PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), + "QNetworkAccessManager.deleteResource": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.get": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.head": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkAccessManager.isStrictTransportSecurityEnabled": (), + "QNetworkAccessManager.networkAccessible": (), + "QNetworkAccessManager.post": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.proxy": (), + "QNetworkAccessManager.proxyFactory": (), + "QNetworkAccessManager.put": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.redirectPolicy": (), + "QNetworkAccessManager.sendCustomRequest": [('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtCore.QIODevice'), ('PySide2.QtNetwork.QNetworkRequest', 'PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHttpMultiPart')], + "QNetworkAccessManager.setCache": ('PySide2.QtNetwork.QAbstractNetworkCache',), + "QNetworkAccessManager.setConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkAccessManager.setCookieJar": ('PySide2.QtNetwork.QNetworkCookieJar',), + "QNetworkAccessManager.setNetworkAccessible": ('PySide2.QtNetwork.QNetworkAccessManager.NetworkAccessibility',), + "QNetworkAccessManager.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkAccessManager.setProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkAccessManager.setRedirectPolicy": ('PySide2.QtNetwork.QNetworkRequest.RedirectPolicy',), + "QNetworkAccessManager.setStrictTransportSecurityEnabled": ('bool',), + "QNetworkAccessManager.supportedSchemes": (), + "QNetworkAccessManager.supportedSchemesImplementation": (), + + # class PySide2.QtNetwork.QNetworkAddressEntry: + "QNetworkAddressEntry.__init__": [(), ('PySide2.QtNetwork.QNetworkAddressEntry',)], + "QNetworkAddressEntry.__copy__": (), + "QNetworkAddressEntry.broadcast": (), + "QNetworkAddressEntry.ip": (), + "QNetworkAddressEntry.netmask": (), + "QNetworkAddressEntry.prefixLength": (), + "QNetworkAddressEntry.setBroadcast": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setIp": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setNetmask": ('PySide2.QtNetwork.QHostAddress',), + "QNetworkAddressEntry.setPrefixLength": ('int',), + "QNetworkAddressEntry.swap": ('PySide2.QtNetwork.QNetworkAddressEntry',), + + # class PySide2.QtNetwork.QNetworkCacheMetaData: + "QNetworkCacheMetaData.__init__": [(), ('PySide2.QtNetwork.QNetworkCacheMetaData',)], + "QNetworkCacheMetaData.__copy__": (), + "QNetworkCacheMetaData.attributes": (), + "QNetworkCacheMetaData.expirationDate": (), + "QNetworkCacheMetaData.isValid": (), + "QNetworkCacheMetaData.lastModified": (), + "QNetworkCacheMetaData.saveToDisk": (), + "QNetworkCacheMetaData.setAttributes": ('dict',), + "QNetworkCacheMetaData.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setLastModified": ('PySide2.QtCore.QDateTime',), + "QNetworkCacheMetaData.setSaveToDisk": ('bool',), + "QNetworkCacheMetaData.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCacheMetaData.swap": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkCacheMetaData.url": (), + + # class PySide2.QtNetwork.QNetworkConfiguration: + "QNetworkConfiguration.__init__": [(), ('PySide2.QtNetwork.QNetworkConfiguration',)], + "QNetworkConfiguration.__copy__": (), + "QNetworkConfiguration.bearerType": (), + "QNetworkConfiguration.bearerTypeFamily": (), + "QNetworkConfiguration.bearerTypeName": (), + "QNetworkConfiguration.children": (), + "QNetworkConfiguration.connectTimeout": (), + "QNetworkConfiguration.identifier": (), + "QNetworkConfiguration.isRoamingAvailable": (), + "QNetworkConfiguration.isValid": (), + "QNetworkConfiguration.name": (), + "QNetworkConfiguration.purpose": (), + "QNetworkConfiguration.setConnectTimeout": ('int',), + "QNetworkConfiguration.state": (), + "QNetworkConfiguration.swap": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkConfiguration.type": (), + + # class PySide2.QtNetwork.QNetworkConfigurationManager: + "QNetworkConfigurationManager.__init__": ('PySide2.QtCore.QObject',), + "QNetworkConfigurationManager.allConfigurations": ('StateFlags',), + "QNetworkConfigurationManager.capabilities": (), + "QNetworkConfigurationManager.configurationFromIdentifier": ('str',), + "QNetworkConfigurationManager.defaultConfiguration": (), + "QNetworkConfigurationManager.isOnline": (), + "QNetworkConfigurationManager.updateConfigurations": (), + + # class PySide2.QtNetwork.QNetworkCookie: + "QNetworkCookie.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QNetworkCookie',)], + "QNetworkCookie.__copy__": (), + "QNetworkCookie.domain": (), + "QNetworkCookie.expirationDate": (), + "QNetworkCookie.hasSameIdentifier": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.isHttpOnly": (), + "QNetworkCookie.isSecure": (), + "QNetworkCookie.isSessionCookie": (), + "QNetworkCookie.name": (), + "QNetworkCookie.normalize": ('PySide2.QtCore.QUrl',), + "QNetworkCookie.parseCookies": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.path": (), + "QNetworkCookie.setDomain": ('str',), + "QNetworkCookie.setExpirationDate": ('PySide2.QtCore.QDateTime',), + "QNetworkCookie.setHttpOnly": ('bool',), + "QNetworkCookie.setName": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.setPath": ('str',), + "QNetworkCookie.setSecure": ('bool',), + "QNetworkCookie.setValue": ('PySide2.QtCore.QByteArray',), + "QNetworkCookie.swap": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookie.toRawForm": ('PySide2.QtNetwork.QNetworkCookie.RawForm',), + "QNetworkCookie.value": (), + + # class PySide2.QtNetwork.QNetworkCookieJar: + "QNetworkCookieJar.__init__": ('PySide2.QtCore.QObject',), + "QNetworkCookieJar.allCookies": (), + "QNetworkCookieJar.cookiesForUrl": ('PySide2.QtCore.QUrl',), + "QNetworkCookieJar.deleteCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.insertCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.setAllCookies": ('list',), + "QNetworkCookieJar.setCookiesFromUrl": ('list', 'PySide2.QtCore.QUrl'), + "QNetworkCookieJar.updateCookie": ('PySide2.QtNetwork.QNetworkCookie',), + "QNetworkCookieJar.validateCookie": ('PySide2.QtNetwork.QNetworkCookie', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtNetwork.QNetworkDiskCache: + "QNetworkDiskCache.__init__": ('PySide2.QtCore.QObject',), + "QNetworkDiskCache.cacheDirectory": (), + "QNetworkDiskCache.cacheSize": (), + "QNetworkDiskCache.clear": (), + "QNetworkDiskCache.data": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.expire": (), + "QNetworkDiskCache.fileMetaData": ('str',), + "QNetworkDiskCache.insert": ('PySide2.QtCore.QIODevice',), + "QNetworkDiskCache.maximumCacheSize": (), + "QNetworkDiskCache.metaData": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.prepare": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + "QNetworkDiskCache.remove": ('PySide2.QtCore.QUrl',), + "QNetworkDiskCache.setCacheDirectory": ('str',), + "QNetworkDiskCache.setMaximumCacheSize": ('int',), + "QNetworkDiskCache.updateMetaData": ('PySide2.QtNetwork.QNetworkCacheMetaData',), + + # class PySide2.QtNetwork.QNetworkInterface: + "QNetworkInterface.__init__": [(), ('PySide2.QtNetwork.QNetworkInterface',)], + "QNetworkInterface.__copy__": (), + "QNetworkInterface.addressEntries": (), + "QNetworkInterface.allAddresses": (), + "QNetworkInterface.allInterfaces": (), + "QNetworkInterface.flags": (), + "QNetworkInterface.hardwareAddress": (), + "QNetworkInterface.humanReadableName": (), + "QNetworkInterface.index": (), + "QNetworkInterface.interfaceFromIndex": ('int',), + "QNetworkInterface.interfaceFromName": ('str',), + "QNetworkInterface.interfaceIndexFromName": ('str',), + "QNetworkInterface.interfaceNameFromIndex": ('int',), + "QNetworkInterface.isValid": (), + "QNetworkInterface.name": (), + "QNetworkInterface.swap": ('PySide2.QtNetwork.QNetworkInterface',), + + # class PySide2.QtNetwork.QNetworkProxy: + "QNetworkProxy.__init__": [(), ('PySide2.QtNetwork.QNetworkProxy',), ('PySide2.QtNetwork.QNetworkProxy.ProxyType', 'str', 'int', 'str', 'str')], + "QNetworkProxy.__copy__": (), + "QNetworkProxy.applicationProxy": (), + "QNetworkProxy.capabilities": (), + "QNetworkProxy.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkProxy.hostName": (), + "QNetworkProxy.isCachingProxy": (), + "QNetworkProxy.isTransparentProxy": (), + "QNetworkProxy.password": (), + "QNetworkProxy.port": (), + "QNetworkProxy.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkProxy.rawHeaderList": (), + "QNetworkProxy.setApplicationProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.setCapabilities": ('Capabilities',), + "QNetworkProxy.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkProxy.setHostName": ('str',), + "QNetworkProxy.setPassword": ('str',), + "QNetworkProxy.setPort": ('int',), + "QNetworkProxy.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkProxy.setType": ('PySide2.QtNetwork.QNetworkProxy.ProxyType',), + "QNetworkProxy.setUser": ('str',), + "QNetworkProxy.swap": ('PySide2.QtNetwork.QNetworkProxy',), + "QNetworkProxy.type": (), + "QNetworkProxy.user": (), + + # class PySide2.QtNetwork.QNetworkProxyFactory: + "QNetworkProxyFactory.__init__": (), + "QNetworkProxyFactory.proxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.queryProxy": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.setApplicationProxyFactory": ('PySide2.QtNetwork.QNetworkProxyFactory',), + "QNetworkProxyFactory.setUseSystemConfiguration": ('bool',), + "QNetworkProxyFactory.systemProxyForQuery": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyFactory.usesSystemConfiguration": (), + + # class PySide2.QtNetwork.QNetworkProxyQuery: + "QNetworkProxyQuery.__init__": [(), ('PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QUrl', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkConfiguration', 'str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('PySide2.QtNetwork.QNetworkProxyQuery',), ('int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType'), ('str', 'int', 'str', 'PySide2.QtNetwork.QNetworkProxyQuery.QueryType')], + "QNetworkProxyQuery.__copy__": (), + "QNetworkProxyQuery.localPort": (), + "QNetworkProxyQuery.networkConfiguration": (), + "QNetworkProxyQuery.peerHostName": (), + "QNetworkProxyQuery.peerPort": (), + "QNetworkProxyQuery.protocolTag": (), + "QNetworkProxyQuery.queryType": (), + "QNetworkProxyQuery.setLocalPort": ('int',), + "QNetworkProxyQuery.setNetworkConfiguration": ('PySide2.QtNetwork.QNetworkConfiguration',), + "QNetworkProxyQuery.setPeerHostName": ('str',), + "QNetworkProxyQuery.setPeerPort": ('int',), + "QNetworkProxyQuery.setProtocolTag": ('str',), + "QNetworkProxyQuery.setQueryType": ('PySide2.QtNetwork.QNetworkProxyQuery.QueryType',), + "QNetworkProxyQuery.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkProxyQuery.swap": ('PySide2.QtNetwork.QNetworkProxyQuery',), + "QNetworkProxyQuery.url": (), + + # class PySide2.QtNetwork.QNetworkReply: + "QNetworkReply.__init__": ('PySide2.QtCore.QObject',), + "QNetworkReply.abort": (), + "QNetworkReply.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute',), + "QNetworkReply.close": (), + "QNetworkReply.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkReply.ignoreSslErrors": [(), ('list',)], + "QNetworkReply.ignoreSslErrorsImplementation": ('list',), + "QNetworkReply.isFinished": (), + "QNetworkReply.isRunning": (), + "QNetworkReply.isSequential": (), + "QNetworkReply.manager": (), + "QNetworkReply.operation": (), + "QNetworkReply.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkReply.rawHeaderList": (), + "QNetworkReply.readBufferSize": (), + "QNetworkReply.request": (), + "QNetworkReply.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkReply.setError": ('PySide2.QtNetwork.QNetworkReply.NetworkError', 'str'), + "QNetworkReply.setFinished": ('bool',), + "QNetworkReply.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkReply.setOperation": ('PySide2.QtNetwork.QNetworkAccessManager.Operation',), + "QNetworkReply.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkReply.setReadBufferSize": ('int',), + "QNetworkReply.setRequest": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkReply.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setSslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkReply.sslConfiguration": (), + "QNetworkReply.sslConfigurationImplementation": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkReply.url": (), + "QNetworkReply.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QNetworkRequest: + "QNetworkRequest.__init__": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QNetworkRequest.__copy__": (), + "QNetworkRequest.attribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkRequest.hasRawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.header": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders',), + "QNetworkRequest.maximumRedirectsAllowed": (), + "QNetworkRequest.originatingObject": (), + "QNetworkRequest.priority": (), + "QNetworkRequest.rawHeader": ('PySide2.QtCore.QByteArray',), + "QNetworkRequest.rawHeaderList": (), + "QNetworkRequest.setAttribute": ('PySide2.QtNetwork.QNetworkRequest.Attribute', 'Any'), + "QNetworkRequest.setHeader": ('PySide2.QtNetwork.QNetworkRequest.KnownHeaders', 'Any'), + "QNetworkRequest.setMaximumRedirectsAllowed": ('int',), + "QNetworkRequest.setOriginatingObject": ('PySide2.QtCore.QObject',), + "QNetworkRequest.setPriority": ('PySide2.QtNetwork.QNetworkRequest.Priority',), + "QNetworkRequest.setRawHeader": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QByteArray'), + "QNetworkRequest.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QNetworkRequest.setUrl": ('PySide2.QtCore.QUrl',), + "QNetworkRequest.sslConfiguration": (), + "QNetworkRequest.swap": ('PySide2.QtNetwork.QNetworkRequest',), + "QNetworkRequest.url": (), + + # class PySide2.QtNetwork.QNetworkSession: + "QNetworkSession.__init__": ('PySide2.QtNetwork.QNetworkConfiguration', 'PySide2.QtCore.QObject'), + "QNetworkSession.accept": (), + "QNetworkSession.activeTime": (), + "QNetworkSession.bytesReceived": (), + "QNetworkSession.bytesWritten": (), + "QNetworkSession.close": (), + "QNetworkSession.configuration": (), + "QNetworkSession.connectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.disconnectNotify": ('PySide2.QtCore.QMetaMethod',), + "QNetworkSession.errorString": (), + "QNetworkSession.ignore": (), + "QNetworkSession.interface": (), + "QNetworkSession.isOpen": (), + "QNetworkSession.migrate": (), + "QNetworkSession.open": (), + "QNetworkSession.reject": (), + "QNetworkSession.sessionProperty": ('str',), + "QNetworkSession.setSessionProperty": ('str', 'Any'), + "QNetworkSession.state": (), + "QNetworkSession.stop": (), + "QNetworkSession.usagePolicies": (), + "QNetworkSession.waitForOpened": ('int',), + + # class PySide2.QtNetwork.QSsl: + + # class PySide2.QtNetwork.QSslCertificate: + "QSslCertificate.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), ('PySide2.QtNetwork.QSslCertificate',)], + "QSslCertificate.__copy__": (), + "QSslCertificate.clear": (), + "QSslCertificate.digest": ('PySide2.QtCore.QCryptographicHash.Algorithm',), + "QSslCertificate.effectiveDate": (), + "QSslCertificate.expiryDate": (), + "QSslCertificate.fromData": ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromDevice": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.EncodingFormat'), + "QSslCertificate.fromPath": ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax'), + "QSslCertificate.handle": (), + "QSslCertificate.importPkcs12": ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSslKey', 'PySide2.QtNetwork.QSslCertificate', 'list', 'PySide2.QtCore.QByteArray'), + "QSslCertificate.isBlacklisted": (), + "QSslCertificate.isNull": (), + "QSslCertificate.isSelfSigned": (), + "QSslCertificate.issuerInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.issuerInfoAttributes": (), + "QSslCertificate.publicKey": (), + "QSslCertificate.serialNumber": (), + "QSslCertificate.subjectAlternativeNames": (), + "QSslCertificate.subjectInfo": [('PySide2.QtCore.QByteArray',), ('PySide2.QtNetwork.QSslCertificate.SubjectInfo',)], + "QSslCertificate.subjectInfoAttributes": (), + "QSslCertificate.swap": ('PySide2.QtNetwork.QSslCertificate',), + "QSslCertificate.toDer": (), + "QSslCertificate.toPem": (), + "QSslCertificate.toText": (), + "QSslCertificate.verify": ('list', 'str'), + "QSslCertificate.version": (), + + # class PySide2.QtNetwork.QSslCipher: + "QSslCipher.__init__": [(), ('PySide2.QtNetwork.QSslCipher',), ('str',), ('str', 'PySide2.QtNetwork.QSsl.SslProtocol')], + "QSslCipher.__copy__": (), + "QSslCipher.authenticationMethod": (), + "QSslCipher.encryptionMethod": (), + "QSslCipher.isNull": (), + "QSslCipher.keyExchangeMethod": (), + "QSslCipher.name": (), + "QSslCipher.protocol": (), + "QSslCipher.protocolString": (), + "QSslCipher.supportedBits": (), + "QSslCipher.swap": ('PySide2.QtNetwork.QSslCipher',), + "QSslCipher.usedBits": (), + + # class PySide2.QtNetwork.QSslConfiguration: + "QSslConfiguration.__init__": [(), ('PySide2.QtNetwork.QSslConfiguration',)], + "QSslConfiguration.__copy__": (), + "QSslConfiguration.allowedNextProtocols": (), + "QSslConfiguration.caCertificates": (), + "QSslConfiguration.ciphers": (), + "QSslConfiguration.defaultConfiguration": (), + "QSslConfiguration.ephemeralServerKey": (), + "QSslConfiguration.isNull": (), + "QSslConfiguration.localCertificate": (), + "QSslConfiguration.localCertificateChain": (), + "QSslConfiguration.nextNegotiatedProtocol": (), + "QSslConfiguration.nextProtocolNegotiationStatus": (), + "QSslConfiguration.peerCertificate": (), + "QSslConfiguration.peerCertificateChain": (), + "QSslConfiguration.peerVerifyDepth": (), + "QSslConfiguration.peerVerifyMode": (), + "QSslConfiguration.preSharedKeyIdentityHint": (), + "QSslConfiguration.privateKey": (), + "QSslConfiguration.protocol": (), + "QSslConfiguration.sessionCipher": (), + "QSslConfiguration.sessionProtocol": (), + "QSslConfiguration.sessionTicket": (), + "QSslConfiguration.sessionTicketLifeTimeHint": (), + "QSslConfiguration.setAllowedNextProtocols": ('list',), + "QSslConfiguration.setCaCertificates": ('list',), + "QSslConfiguration.setCiphers": ('list',), + "QSslConfiguration.setDefaultConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.setLocalCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslConfiguration.setLocalCertificateChain": ('list',), + "QSslConfiguration.setPeerVerifyDepth": ('int',), + "QSslConfiguration.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslConfiguration.setPreSharedKeyIdentityHint": ('PySide2.QtCore.QByteArray',), + "QSslConfiguration.setPrivateKey": ('PySide2.QtNetwork.QSslKey',), + "QSslConfiguration.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslConfiguration.setSessionTicket": ('PySide2.QtCore.QByteArray',), + "QSslConfiguration.setSslOption": ('PySide2.QtNetwork.QSsl.SslOption', 'bool'), + "QSslConfiguration.supportedCiphers": (), + "QSslConfiguration.swap": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslConfiguration.systemCaCertificates": (), + "QSslConfiguration.testSslOption": ('PySide2.QtNetwork.QSsl.SslOption',), + + # class PySide2.QtNetwork.QSslError: + "QSslError.__init__": [(), ('PySide2.QtNetwork.QSslError',), ('PySide2.QtNetwork.QSslError.SslError',), ('PySide2.QtNetwork.QSslError.SslError', 'PySide2.QtNetwork.QSslCertificate')], + "QSslError.__copy__": (), + "QSslError.certificate": (), + "QSslError.error": (), + "QSslError.errorString": (), + "QSslError.swap": ('PySide2.QtNetwork.QSslError',), + + # class PySide2.QtNetwork.QSslKey: + "QSslKey.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtCore.QIODevice', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtNetwork.QSsl.KeyType', 'PySide2.QtCore.QByteArray'), ('PySide2.QtNetwork.QSslKey',), ('int', 'PySide2.QtNetwork.QSsl.KeyType')], + "QSslKey.__copy__": (), + "QSslKey.algorithm": (), + "QSslKey.clear": (), + "QSslKey.handle": (), + "QSslKey.isNull": (), + "QSslKey.length": (), + "QSslKey.swap": ('PySide2.QtNetwork.QSslKey',), + "QSslKey.toDer": ('PySide2.QtCore.QByteArray',), + "QSslKey.toPem": ('PySide2.QtCore.QByteArray',), + "QSslKey.type": (), + + # class PySide2.QtNetwork.QSslSocket: + "QSslSocket.__init__": ('PySide2.QtCore.QObject',), + "QSslSocket.abort": (), + "QSslSocket.addCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.addDefaultCaCertificate": ('PySide2.QtNetwork.QSslCertificate',), + "QSslSocket.addDefaultCaCertificates": [('list',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QRegExp.PatternSyntax')], + "QSslSocket.atEnd": (), + "QSslSocket.bytesAvailable": (), + "QSslSocket.bytesToWrite": (), + "QSslSocket.caCertificates": (), + "QSslSocket.canReadLine": (), + "QSslSocket.ciphers": (), + "QSslSocket.close": (), + "QSslSocket.connectToHost": [('PySide2.QtNetwork.QHostAddress', 'int', 'OpenMode'), ('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.connectToHostEncrypted": [('str', 'int', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol'), ('str', 'int', 'str', 'OpenMode', 'PySide2.QtNetwork.QAbstractSocket.NetworkLayerProtocol')], + "QSslSocket.defaultCaCertificates": (), + "QSslSocket.defaultCiphers": (), + "QSslSocket.disconnectFromHost": (), + "QSslSocket.encryptedBytesAvailable": (), + "QSslSocket.encryptedBytesToWrite": (), + "QSslSocket.flush": (), + "QSslSocket.ignoreSslErrors": [(), ('list',)], + "QSslSocket.isEncrypted": (), + "QSslSocket.localCertificate": (), + "QSslSocket.localCertificateChain": (), + "QSslSocket.mode": (), + "QSslSocket.peerCertificate": (), + "QSslSocket.peerCertificateChain": (), + "QSslSocket.peerVerifyDepth": (), + "QSslSocket.peerVerifyMode": (), + "QSslSocket.peerVerifyName": (), + "QSslSocket.privateKey": (), + "QSslSocket.protocol": (), + "QSslSocket.readData": ('str', 'int'), + "QSslSocket.resume": (), + "QSslSocket.sessionCipher": (), + "QSslSocket.sessionProtocol": (), + "QSslSocket.setCaCertificates": ('list',), + "QSslSocket.setCiphers": [('list',), ('str',)], + "QSslSocket.setDefaultCaCertificates": ('list',), + "QSslSocket.setDefaultCiphers": ('list',), + "QSslSocket.setLocalCertificate": [('PySide2.QtNetwork.QSslCertificate',), ('str', 'PySide2.QtNetwork.QSsl.EncodingFormat')], + "QSslSocket.setLocalCertificateChain": ('list',), + "QSslSocket.setPeerVerifyDepth": ('int',), + "QSslSocket.setPeerVerifyMode": ('PySide2.QtNetwork.QSslSocket.PeerVerifyMode',), + "QSslSocket.setPeerVerifyName": ('str',), + "QSslSocket.setPrivateKey": [('PySide2.QtNetwork.QSslKey',), ('str', 'PySide2.QtNetwork.QSsl.KeyAlgorithm', 'PySide2.QtNetwork.QSsl.EncodingFormat', 'PySide2.QtCore.QByteArray')], + "QSslSocket.setProtocol": ('PySide2.QtNetwork.QSsl.SslProtocol',), + "QSslSocket.setReadBufferSize": ('int',), + "QSslSocket.setSocketDescriptor": ('int', 'PySide2.QtNetwork.QAbstractSocket.SocketState', 'OpenMode'), + "QSslSocket.setSocketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption', 'Any'), + "QSslSocket.setSslConfiguration": ('PySide2.QtNetwork.QSslConfiguration',), + "QSslSocket.socketOption": ('PySide2.QtNetwork.QAbstractSocket.SocketOption',), + "QSslSocket.sslConfiguration": (), + "QSslSocket.sslLibraryBuildVersionNumber": (), + "QSslSocket.sslLibraryBuildVersionString": (), + "QSslSocket.sslLibraryVersionNumber": (), + "QSslSocket.sslLibraryVersionString": (), + "QSslSocket.startClientEncryption": (), + "QSslSocket.startServerEncryption": (), + "QSslSocket.supportedCiphers": (), + "QSslSocket.supportsSsl": (), + "QSslSocket.systemCaCertificates": (), + "QSslSocket.waitForBytesWritten": ('int',), + "QSslSocket.waitForConnected": ('int',), + "QSslSocket.waitForDisconnected": ('int',), + "QSslSocket.waitForEncrypted": ('int',), + "QSslSocket.waitForReadyRead": ('int',), + "QSslSocket.writeData": ('str', 'int'), + + # class PySide2.QtNetwork.QTcpServer: + "QTcpServer.__init__": ('PySide2.QtCore.QObject',), + "QTcpServer.addPendingConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QTcpServer.close": (), + "QTcpServer.errorString": (), + "QTcpServer.hasPendingConnections": (), + "QTcpServer.incomingConnection": ('int',), + "QTcpServer.isListening": (), + "QTcpServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QTcpServer.maxPendingConnections": (), + "QTcpServer.nextPendingConnection": (), + "QTcpServer.pauseAccepting": (), + "QTcpServer.proxy": (), + "QTcpServer.resumeAccepting": (), + "QTcpServer.serverAddress": (), + "QTcpServer.serverError": (), + "QTcpServer.serverPort": (), + "QTcpServer.setMaxPendingConnections": ('int',), + "QTcpServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QTcpServer.setSocketDescriptor": ('int',), + "QTcpServer.socketDescriptor": (), + "QTcpServer.waitForNewConnection": ('int', 'bool'), + + # class PySide2.QtNetwork.QTcpSocket: + "QTcpSocket.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtNetwork.QUdpSocket: + "QUdpSocket.__init__": ('PySide2.QtCore.QObject',), + "QUdpSocket.hasPendingDatagrams": (), + "QUdpSocket.joinMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.leaveMulticastGroup": [('PySide2.QtNetwork.QHostAddress',), ('PySide2.QtNetwork.QHostAddress', 'PySide2.QtNetwork.QNetworkInterface')], + "QUdpSocket.multicastInterface": (), + "QUdpSocket.pendingDatagramSize": (), + "QUdpSocket.readDatagram": ('str', 'int', 'PySide2.QtNetwork.QHostAddress', 'int'), + "QUdpSocket.setMulticastInterface": ('PySide2.QtNetwork.QNetworkInterface',), + "QUdpSocket.writeDatagram": ('PySide2.QtCore.QByteArray', 'PySide2.QtNetwork.QHostAddress', 'int'), + }) + +# Module PySide2.QtTest +if "PySide2.QtTest" in sys.modules: + dict.update({ + + # class PySide2.QtTest.QTest: + "QTest.addColumnInternal": ('int', 'str'), + "QTest.asciiToKey": ('Union[str, int]',), + "QTest.compare_string_helper": ('str', 'str', 'str', 'str', 'str', 'int'), + "QTest.createTouchDevice": ('PySide2.QtGui.QTouchDevice.DeviceType',), + "QTest.currentAppName": (), + "QTest.currentDataTag": (), + "QTest.currentTestFailed": (), + "QTest.currentTestFunction": (), + "QTest.ignoreMessage": [('PySide2.QtCore.QtMsgType', 'PySide2.QtCore.QRegularExpression'), ('PySide2.QtCore.QtMsgType', 'str')], + "QTest.keyClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyClicks": ('PySide2.QtWidgets.QWidget', 'str', 'KeyboardModifiers', 'int'), + "QTest.keyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyPress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtGui.QWindow', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'KeyboardModifiers', 'int'), ('PySide2.QtWidgets.QWidget', 'Union[str, int]', 'KeyboardModifiers', 'int')], + "QTest.keyToAscii": ('PySide2.QtCore.Qt.Key',), + "QTest.mouseClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseDClick": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseEvent": [('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtTest.QTest.MouseAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseMove": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mousePress": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.mouseRelease": [('PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.MouseButton', 'KeyboardModifiers', 'PySide2.QtCore.QPoint', 'int')], + "QTest.qElementData": ('str', 'int'), + "QTest.qExpectFail": ('str', 'str', 'PySide2.QtTest.QTest.TestFailMode', 'str', 'int'), + "QTest.qFindTestData": ('str', 'str', 'int', 'str'), + "QTest.qGlobalData": ('str', 'int'), + "QTest.qSkip": ('str', 'str', 'int'), + "QTest.qWaitForWindowActive": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.qWaitForWindowExposed": ('PySide2.QtWidgets.QWidget', 'int'), + "QTest.sendKeyEvent": [('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtGui.QWindow', 'PySide2.QtCore.Qt.Key', 'str', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'Union[str, int]', 'KeyboardModifiers', 'int'), ('PySide2.QtTest.QTest.KeyAction', 'PySide2.QtWidgets.QWidget', 'PySide2.QtCore.Qt.Key', 'str', 'KeyboardModifiers', 'int')], + "QTest.setBenchmarkResult": ('float', 'PySide2.QtTest.QTest.QBenchmarkMetric'), + "QTest.setMainSourcePath": ('str', 'str'), + "QTest.simulateEvent": [('PySide2.QtGui.QWindow', 'bool', 'int', 'KeyboardModifiers', 'str', 'bool', 'int'), ('PySide2.QtWidgets.QWidget', 'bool', 'int', 'KeyboardModifiers', 'str', 'bool', 'int')], + "QTest.testObject": (), + "QTest.toPrettyCString": ('str', 'int'), + "QTest.touchEvent": [('PySide2.QtGui.QWindow', 'PySide2.QtGui.QTouchDevice', 'bool'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtGui.QTouchDevice', 'bool')], + "QTest.waitForEvents": (), + }) + +# Module PySide2.QtConcurrent +if "PySide2.QtConcurrent" in sys.modules: + dict.update({ + + # class PySide2.QtConcurrent.QtConcurrent: + }) + +# Module PySide2.QtWinExtras +if "PySide2.QtWinExtras" in sys.modules: + dict.update({ + + # class PySide2.QtWinExtras.QWinColorizationChangeEvent: + "QWinColorizationChangeEvent.__init__": ('int', 'bool'), + "QWinColorizationChangeEvent.color": (), + "QWinColorizationChangeEvent.opaqueBlend": (), + + # class PySide2.QtWinExtras.QWinCompositionChangeEvent: + "QWinCompositionChangeEvent.__init__": ('bool',), + "QWinCompositionChangeEvent.isCompositionEnabled": (), + + # class PySide2.QtWinExtras.QWinEvent: + "QWinEvent.__init__": ('int',), + + # class PySide2.QtWinExtras.QWinJumpList: + "QWinJumpList.__init__": ('PySide2.QtCore.QObject',), + "QWinJumpList.addCategory": [('PySide2.QtWinExtras.QWinJumpListCategory',), ('str', 'list')], + "QWinJumpList.categories": (), + "QWinJumpList.clear": (), + "QWinJumpList.frequent": (), + "QWinJumpList.identifier": (), + "QWinJumpList.recent": (), + "QWinJumpList.setIdentifier": ('str',), + "QWinJumpList.tasks": (), + + # class PySide2.QtWinExtras.QWinJumpListCategory: + "QWinJumpListCategory.__init__": ('str',), + "QWinJumpListCategory.addDestination": ('str',), + "QWinJumpListCategory.addItem": ('PySide2.QtWinExtras.QWinJumpListItem',), + "QWinJumpListCategory.addLink": [('PySide2.QtGui.QIcon', 'str', 'str', 'List[str]'), ('str', 'str', 'List[str]')], + "QWinJumpListCategory.addSeparator": (), + "QWinJumpListCategory.clear": (), + "QWinJumpListCategory.count": (), + "QWinJumpListCategory.isEmpty": (), + "QWinJumpListCategory.isVisible": (), + "QWinJumpListCategory.items": (), + "QWinJumpListCategory.setTitle": ('str',), + "QWinJumpListCategory.setVisible": ('bool',), + "QWinJumpListCategory.title": (), + "QWinJumpListCategory.type": (), + + # class PySide2.QtWinExtras.QWinJumpListItem: + "QWinJumpListItem.__init__": ('PySide2.QtWinExtras.QWinJumpListItem.Type',), + "QWinJumpListItem.arguments": (), + "QWinJumpListItem.description": (), + "QWinJumpListItem.filePath": (), + "QWinJumpListItem.icon": (), + "QWinJumpListItem.setArguments": ('List[str]',), + "QWinJumpListItem.setDescription": ('str',), + "QWinJumpListItem.setFilePath": ('str',), + "QWinJumpListItem.setIcon": ('PySide2.QtGui.QIcon',), + "QWinJumpListItem.setTitle": ('str',), + "QWinJumpListItem.setType": ('PySide2.QtWinExtras.QWinJumpListItem.Type',), + "QWinJumpListItem.setWorkingDirectory": ('str',), + "QWinJumpListItem.title": (), + "QWinJumpListItem.type": (), + "QWinJumpListItem.workingDirectory": (), + + # class PySide2.QtWinExtras.QWinTaskbarButton: + "QWinTaskbarButton.__init__": ('PySide2.QtCore.QObject',), + "QWinTaskbarButton.clearOverlayIcon": (), + "QWinTaskbarButton.eventFilter": ('PySide2.QtCore.QObject', 'PySide2.QtCore.QEvent'), + "QWinTaskbarButton.overlayAccessibleDescription": (), + "QWinTaskbarButton.overlayIcon": (), + "QWinTaskbarButton.progress": (), + "QWinTaskbarButton.setOverlayAccessibleDescription": ('str',), + "QWinTaskbarButton.setOverlayIcon": ('PySide2.QtGui.QIcon',), + "QWinTaskbarButton.setWindow": ('PySide2.QtGui.QWindow',), + "QWinTaskbarButton.window": (), + + # class PySide2.QtWinExtras.QWinTaskbarProgress: + "QWinTaskbarProgress.__init__": ('PySide2.QtCore.QObject',), + "QWinTaskbarProgress.hide": (), + "QWinTaskbarProgress.isPaused": (), + "QWinTaskbarProgress.isStopped": (), + "QWinTaskbarProgress.isVisible": (), + "QWinTaskbarProgress.maximum": (), + "QWinTaskbarProgress.minimum": (), + "QWinTaskbarProgress.pause": (), + "QWinTaskbarProgress.reset": (), + "QWinTaskbarProgress.resume": (), + "QWinTaskbarProgress.setMaximum": ('int',), + "QWinTaskbarProgress.setMinimum": ('int',), + "QWinTaskbarProgress.setPaused": ('bool',), + "QWinTaskbarProgress.setRange": ('int', 'int'), + "QWinTaskbarProgress.setValue": ('int',), + "QWinTaskbarProgress.setVisible": ('bool',), + "QWinTaskbarProgress.show": (), + "QWinTaskbarProgress.stop": (), + "QWinTaskbarProgress.value": (), + + # class PySide2.QtWinExtras.QWinThumbnailToolBar: + "QWinThumbnailToolBar.__init__": ('PySide2.QtCore.QObject',), + "QWinThumbnailToolBar.addButton": ('PySide2.QtWinExtras.QWinThumbnailToolButton',), + "QWinThumbnailToolBar.buttons": (), + "QWinThumbnailToolBar.clear": (), + "QWinThumbnailToolBar.count": (), + "QWinThumbnailToolBar.iconicLivePreviewPixmap": (), + "QWinThumbnailToolBar.iconicPixmapNotificationsEnabled": (), + "QWinThumbnailToolBar.iconicThumbnailPixmap": (), + "QWinThumbnailToolBar.removeButton": ('PySide2.QtWinExtras.QWinThumbnailToolButton',), + "QWinThumbnailToolBar.setButtons": ('list',), + "QWinThumbnailToolBar.setIconicLivePreviewPixmap": ('PySide2.QtGui.QPixmap',), + "QWinThumbnailToolBar.setIconicPixmapNotificationsEnabled": ('bool',), + "QWinThumbnailToolBar.setIconicThumbnailPixmap": ('PySide2.QtGui.QPixmap',), + "QWinThumbnailToolBar.setWindow": ('PySide2.QtGui.QWindow',), + "QWinThumbnailToolBar.window": (), + + # class PySide2.QtWinExtras.QWinThumbnailToolButton: + "QWinThumbnailToolButton.__init__": ('PySide2.QtCore.QObject',), + "QWinThumbnailToolButton.click": (), + "QWinThumbnailToolButton.dismissOnClick": (), + "QWinThumbnailToolButton.icon": (), + "QWinThumbnailToolButton.isEnabled": (), + "QWinThumbnailToolButton.isFlat": (), + "QWinThumbnailToolButton.isInteractive": (), + "QWinThumbnailToolButton.isVisible": (), + "QWinThumbnailToolButton.setDismissOnClick": ('bool',), + "QWinThumbnailToolButton.setEnabled": ('bool',), + "QWinThumbnailToolButton.setFlat": ('bool',), + "QWinThumbnailToolButton.setIcon": ('PySide2.QtGui.QIcon',), + "QWinThumbnailToolButton.setInteractive": ('bool',), + "QWinThumbnailToolButton.setToolTip": ('str',), + "QWinThumbnailToolButton.setVisible": ('bool',), + "QWinThumbnailToolButton.toolTip": (), + }) + +# Module PySide2.QtXml +if "PySide2.QtXml" in sys.modules: + dict.update({ + + # class PySide2.QtXml.QDomAttr: + "QDomAttr.__init__": [(), ('PySide2.QtXml.QDomAttr',)], + "QDomAttr.__copy__": (), + "QDomAttr.name": (), + "QDomAttr.nodeType": (), + "QDomAttr.ownerElement": (), + "QDomAttr.setValue": ('str',), + "QDomAttr.specified": (), + "QDomAttr.value": (), + + # class PySide2.QtXml.QDomCDATASection: + "QDomCDATASection.__init__": [(), ('PySide2.QtXml.QDomCDATASection',)], + "QDomCDATASection.__copy__": (), + "QDomCDATASection.nodeType": (), + + # class PySide2.QtXml.QDomCharacterData: + "QDomCharacterData.__init__": [(), ('PySide2.QtXml.QDomCharacterData',)], + "QDomCharacterData.__copy__": (), + "QDomCharacterData.appendData": ('str',), + "QDomCharacterData.data": (), + "QDomCharacterData.deleteData": ('int', 'int'), + "QDomCharacterData.insertData": ('int', 'str'), + "QDomCharacterData.length": (), + "QDomCharacterData.nodeType": (), + "QDomCharacterData.replaceData": ('int', 'int', 'str'), + "QDomCharacterData.setData": ('str',), + "QDomCharacterData.substringData": ('int', 'int'), + + # class PySide2.QtXml.QDomComment: + "QDomComment.__init__": [(), ('PySide2.QtXml.QDomComment',)], + "QDomComment.__copy__": (), + "QDomComment.nodeType": (), + + # class PySide2.QtXml.QDomDocument: + "QDomDocument.__init__": [(), ('PySide2.QtXml.QDomDocument',), ('PySide2.QtXml.QDomDocumentType',), ('str',)], + "QDomDocument.__copy__": (), + "QDomDocument.createAttribute": ('str',), + "QDomDocument.createAttributeNS": ('str', 'str'), + "QDomDocument.createCDATASection": ('str',), + "QDomDocument.createComment": ('str',), + "QDomDocument.createDocumentFragment": (), + "QDomDocument.createElement": ('str',), + "QDomDocument.createElementNS": ('str', 'str'), + "QDomDocument.createEntityReference": ('str',), + "QDomDocument.createProcessingInstruction": ('str', 'str'), + "QDomDocument.createTextNode": ('str',), + "QDomDocument.doctype": (), + "QDomDocument.documentElement": (), + "QDomDocument.elementById": ('str',), + "QDomDocument.elementsByTagName": ('str',), + "QDomDocument.elementsByTagNameNS": ('str', 'str'), + "QDomDocument.implementation": (), + "QDomDocument.importNode": ('PySide2.QtXml.QDomNode', 'bool'), + "QDomDocument.nodeType": (), + "QDomDocument.setContent": [('PySide2.QtCore.QByteArray', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QByteArray', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'bool', 'str', 'int', 'int'), ('PySide2.QtCore.QIODevice', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'PySide2.QtXml.QXmlReader', 'str', 'int', 'int'), ('PySide2.QtXml.QXmlInputSource', 'bool', 'str', 'int', 'int'), ('str', 'bool', 'str', 'int', 'int'), ('str', 'str', 'int', 'int')], + "QDomDocument.toByteArray": ('int',), + "QDomDocument.toString": ('int',), + + # class PySide2.QtXml.QDomDocumentFragment: + "QDomDocumentFragment.__init__": [(), ('PySide2.QtXml.QDomDocumentFragment',)], + "QDomDocumentFragment.__copy__": (), + "QDomDocumentFragment.nodeType": (), + + # class PySide2.QtXml.QDomDocumentType: + "QDomDocumentType.__init__": [(), ('PySide2.QtXml.QDomDocumentType',)], + "QDomDocumentType.__copy__": (), + "QDomDocumentType.entities": (), + "QDomDocumentType.internalSubset": (), + "QDomDocumentType.name": (), + "QDomDocumentType.nodeType": (), + "QDomDocumentType.notations": (), + "QDomDocumentType.publicId": (), + "QDomDocumentType.systemId": (), + + # class PySide2.QtXml.QDomElement: + "QDomElement.__init__": [(), ('PySide2.QtXml.QDomElement',)], + "QDomElement.__copy__": (), + "QDomElement.attribute": ('str', 'str'), + "QDomElement.attributeNS": ('str', 'str', 'str'), + "QDomElement.attributeNode": ('str',), + "QDomElement.attributeNodeNS": ('str', 'str'), + "QDomElement.attributes": (), + "QDomElement.elementsByTagName": ('str',), + "QDomElement.elementsByTagNameNS": ('str', 'str'), + "QDomElement.hasAttribute": ('str',), + "QDomElement.hasAttributeNS": ('str', 'str'), + "QDomElement.nodeType": (), + "QDomElement.removeAttribute": ('str',), + "QDomElement.removeAttributeNS": ('str', 'str'), + "QDomElement.removeAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttribute": [('str', 'float'), ('str', 'int'), ('str', 'str')], + "QDomElement.setAttributeNS": [('str', 'str', 'float'), ('str', 'str', 'int'), ('str', 'str', 'str')], + "QDomElement.setAttributeNode": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setAttributeNodeNS": ('PySide2.QtXml.QDomAttr',), + "QDomElement.setTagName": ('str',), + "QDomElement.tagName": (), + "QDomElement.text": (), + + # class PySide2.QtXml.QDomEntity: + "QDomEntity.__init__": [(), ('PySide2.QtXml.QDomEntity',)], + "QDomEntity.__copy__": (), + "QDomEntity.nodeType": (), + "QDomEntity.notationName": (), + "QDomEntity.publicId": (), + "QDomEntity.systemId": (), + + # class PySide2.QtXml.QDomEntityReference: + "QDomEntityReference.__init__": [(), ('PySide2.QtXml.QDomEntityReference',)], + "QDomEntityReference.__copy__": (), + "QDomEntityReference.nodeType": (), + + # class PySide2.QtXml.QDomImplementation: + "QDomImplementation.__init__": [(), ('PySide2.QtXml.QDomImplementation',)], + "QDomImplementation.__copy__": (), + "QDomImplementation.createDocument": ('str', 'str', 'PySide2.QtXml.QDomDocumentType'), + "QDomImplementation.createDocumentType": ('str', 'str', 'str'), + "QDomImplementation.hasFeature": ('str', 'str'), + "QDomImplementation.invalidDataPolicy": (), + "QDomImplementation.isNull": (), + "QDomImplementation.setInvalidDataPolicy": ('PySide2.QtXml.QDomImplementation.InvalidDataPolicy',), + + # class PySide2.QtXml.QDomNamedNodeMap: + "QDomNamedNodeMap.__init__": [(), ('PySide2.QtXml.QDomNamedNodeMap',)], + "QDomNamedNodeMap.__copy__": (), + "QDomNamedNodeMap.contains": ('str',), + "QDomNamedNodeMap.count": (), + "QDomNamedNodeMap.isEmpty": (), + "QDomNamedNodeMap.item": ('int',), + "QDomNamedNodeMap.length": (), + "QDomNamedNodeMap.namedItem": ('str',), + "QDomNamedNodeMap.namedItemNS": ('str', 'str'), + "QDomNamedNodeMap.removeNamedItem": ('str',), + "QDomNamedNodeMap.removeNamedItemNS": ('str', 'str'), + "QDomNamedNodeMap.setNamedItem": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.setNamedItemNS": ('PySide2.QtXml.QDomNode',), + "QDomNamedNodeMap.size": (), + + # class PySide2.QtXml.QDomNode: + "QDomNode.__init__": [(), ('PySide2.QtXml.QDomNode',)], + "QDomNode.__copy__": (), + "QDomNode.appendChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.attributes": (), + "QDomNode.childNodes": (), + "QDomNode.clear": (), + "QDomNode.cloneNode": ('bool',), + "QDomNode.columnNumber": (), + "QDomNode.firstChild": (), + "QDomNode.firstChildElement": ('str',), + "QDomNode.hasAttributes": (), + "QDomNode.hasChildNodes": (), + "QDomNode.insertAfter": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.insertBefore": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.isAttr": (), + "QDomNode.isCDATASection": (), + "QDomNode.isCharacterData": (), + "QDomNode.isComment": (), + "QDomNode.isDocument": (), + "QDomNode.isDocumentFragment": (), + "QDomNode.isDocumentType": (), + "QDomNode.isElement": (), + "QDomNode.isEntity": (), + "QDomNode.isEntityReference": (), + "QDomNode.isNotation": (), + "QDomNode.isNull": (), + "QDomNode.isProcessingInstruction": (), + "QDomNode.isSupported": ('str', 'str'), + "QDomNode.isText": (), + "QDomNode.lastChild": (), + "QDomNode.lastChildElement": ('str',), + "QDomNode.lineNumber": (), + "QDomNode.localName": (), + "QDomNode.namedItem": ('str',), + "QDomNode.namespaceURI": (), + "QDomNode.nextSibling": (), + "QDomNode.nextSiblingElement": ('str',), + "QDomNode.nodeName": (), + "QDomNode.nodeType": (), + "QDomNode.nodeValue": (), + "QDomNode.normalize": (), + "QDomNode.ownerDocument": (), + "QDomNode.parentNode": (), + "QDomNode.prefix": (), + "QDomNode.previousSibling": (), + "QDomNode.previousSiblingElement": ('str',), + "QDomNode.removeChild": ('PySide2.QtXml.QDomNode',), + "QDomNode.replaceChild": ('PySide2.QtXml.QDomNode', 'PySide2.QtXml.QDomNode'), + "QDomNode.save": ('PySide2.QtCore.QTextStream', 'int', 'PySide2.QtXml.QDomNode.EncodingPolicy'), + "QDomNode.setNodeValue": ('str',), + "QDomNode.setPrefix": ('str',), + "QDomNode.toAttr": (), + "QDomNode.toCDATASection": (), + "QDomNode.toCharacterData": (), + "QDomNode.toComment": (), + "QDomNode.toDocument": (), + "QDomNode.toDocumentFragment": (), + "QDomNode.toDocumentType": (), + "QDomNode.toElement": (), + "QDomNode.toEntity": (), + "QDomNode.toEntityReference": (), + "QDomNode.toNotation": (), + "QDomNode.toProcessingInstruction": (), + "QDomNode.toText": (), + + # class PySide2.QtXml.QDomNodeList: + "QDomNodeList.__init__": [(), ('PySide2.QtXml.QDomNodeList',)], + "QDomNodeList.__copy__": (), + "QDomNodeList.at": ('int',), + "QDomNodeList.count": (), + "QDomNodeList.isEmpty": (), + "QDomNodeList.item": ('int',), + "QDomNodeList.length": (), + "QDomNodeList.size": (), + + # class PySide2.QtXml.QDomNotation: + "QDomNotation.__init__": [(), ('PySide2.QtXml.QDomNotation',)], + "QDomNotation.__copy__": (), + "QDomNotation.nodeType": (), + "QDomNotation.publicId": (), + "QDomNotation.systemId": (), + + # class PySide2.QtXml.QDomProcessingInstruction: + "QDomProcessingInstruction.__init__": [(), ('PySide2.QtXml.QDomProcessingInstruction',)], + "QDomProcessingInstruction.__copy__": (), + "QDomProcessingInstruction.data": (), + "QDomProcessingInstruction.nodeType": (), + "QDomProcessingInstruction.setData": ('str',), + "QDomProcessingInstruction.target": (), + + # class PySide2.QtXml.QDomText: + "QDomText.__init__": [(), ('PySide2.QtXml.QDomText',)], + "QDomText.__copy__": (), + "QDomText.nodeType": (), + "QDomText.splitText": ('int',), + + # class PySide2.QtXml.QXmlAttributes: + "QXmlAttributes.__init__": [(), ('PySide2.QtXml.QXmlAttributes',)], + "QXmlAttributes.__copy__": (), + "QXmlAttributes.append": ('str', 'str', 'str', 'str'), + "QXmlAttributes.clear": (), + "QXmlAttributes.count": (), + "QXmlAttributes.index": [('str',), ('str', 'str')], + "QXmlAttributes.length": (), + "QXmlAttributes.localName": ('int',), + "QXmlAttributes.qName": ('int',), + "QXmlAttributes.swap": ('PySide2.QtXml.QXmlAttributes',), + "QXmlAttributes.type": [('int',), ('str',), ('str', 'str')], + "QXmlAttributes.uri": ('int',), + "QXmlAttributes.value": [('int',), ('str',), ('str', 'str')], + + # class PySide2.QtXml.QXmlContentHandler: + "QXmlContentHandler.__init__": (), + "QXmlContentHandler.characters": ('str',), + "QXmlContentHandler.endDocument": (), + "QXmlContentHandler.endElement": ('str', 'str', 'str'), + "QXmlContentHandler.endPrefixMapping": ('str',), + "QXmlContentHandler.errorString": (), + "QXmlContentHandler.ignorableWhitespace": ('str',), + "QXmlContentHandler.processingInstruction": ('str', 'str'), + "QXmlContentHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlContentHandler.skippedEntity": ('str',), + "QXmlContentHandler.startDocument": (), + "QXmlContentHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlContentHandler.startPrefixMapping": ('str', 'str'), + + # class PySide2.QtXml.QXmlDTDHandler: + "QXmlDTDHandler.__init__": (), + "QXmlDTDHandler.errorString": (), + "QXmlDTDHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDTDHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + + # class PySide2.QtXml.QXmlDeclHandler: + "QXmlDeclHandler.__init__": (), + "QXmlDeclHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDeclHandler.errorString": (), + "QXmlDeclHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDeclHandler.internalEntityDecl": ('str', 'str'), + + # class PySide2.QtXml.QXmlDefaultHandler: + "QXmlDefaultHandler.__init__": (), + "QXmlDefaultHandler.attributeDecl": ('str', 'str', 'str', 'str', 'str'), + "QXmlDefaultHandler.characters": ('str',), + "QXmlDefaultHandler.comment": ('str',), + "QXmlDefaultHandler.endCDATA": (), + "QXmlDefaultHandler.endDTD": (), + "QXmlDefaultHandler.endDocument": (), + "QXmlDefaultHandler.endElement": ('str', 'str', 'str'), + "QXmlDefaultHandler.endEntity": ('str',), + "QXmlDefaultHandler.endPrefixMapping": ('str',), + "QXmlDefaultHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.errorString": (), + "QXmlDefaultHandler.externalEntityDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlDefaultHandler.ignorableWhitespace": ('str',), + "QXmlDefaultHandler.internalEntityDecl": ('str', 'str'), + "QXmlDefaultHandler.notationDecl": ('str', 'str', 'str'), + "QXmlDefaultHandler.processingInstruction": ('str', 'str'), + "QXmlDefaultHandler.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + "QXmlDefaultHandler.setDocumentLocator": ('PySide2.QtXml.QXmlLocator',), + "QXmlDefaultHandler.skippedEntity": ('str',), + "QXmlDefaultHandler.startCDATA": (), + "QXmlDefaultHandler.startDTD": ('str', 'str', 'str'), + "QXmlDefaultHandler.startDocument": (), + "QXmlDefaultHandler.startElement": ('str', 'str', 'str', 'PySide2.QtXml.QXmlAttributes'), + "QXmlDefaultHandler.startEntity": ('str',), + "QXmlDefaultHandler.startPrefixMapping": ('str', 'str'), + "QXmlDefaultHandler.unparsedEntityDecl": ('str', 'str', 'str', 'str'), + "QXmlDefaultHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlEntityResolver: + "QXmlEntityResolver.__init__": (), + "QXmlEntityResolver.errorString": (), + "QXmlEntityResolver.resolveEntity": ('str', 'str', 'PySide2.QtXml.QXmlInputSource'), + + # class PySide2.QtXml.QXmlErrorHandler: + "QXmlErrorHandler.__init__": (), + "QXmlErrorHandler.error": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.errorString": (), + "QXmlErrorHandler.fatalError": ('PySide2.QtXml.QXmlParseException',), + "QXmlErrorHandler.warning": ('PySide2.QtXml.QXmlParseException',), + + # class PySide2.QtXml.QXmlInputSource: + "QXmlInputSource.__init__": [(), ('PySide2.QtCore.QIODevice',)], + "QXmlInputSource.data": (), + "QXmlInputSource.fetchData": (), + "QXmlInputSource.fromRawData": ('PySide2.QtCore.QByteArray', 'bool'), + "QXmlInputSource.reset": (), + "QXmlInputSource.setData": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtXml.QXmlLexicalHandler: + "QXmlLexicalHandler.__init__": (), + "QXmlLexicalHandler.comment": ('str',), + "QXmlLexicalHandler.endCDATA": (), + "QXmlLexicalHandler.endDTD": (), + "QXmlLexicalHandler.endEntity": ('str',), + "QXmlLexicalHandler.errorString": (), + "QXmlLexicalHandler.startCDATA": (), + "QXmlLexicalHandler.startDTD": ('str', 'str', 'str'), + "QXmlLexicalHandler.startEntity": ('str',), + + # class PySide2.QtXml.QXmlLocator: + "QXmlLocator.__init__": (), + "QXmlLocator.columnNumber": (), + "QXmlLocator.lineNumber": (), + + # class PySide2.QtXml.QXmlNamespaceSupport: + "QXmlNamespaceSupport.__init__": (), + "QXmlNamespaceSupport.popContext": (), + "QXmlNamespaceSupport.prefix": ('str',), + "QXmlNamespaceSupport.prefixes": [(), ('str',)], + "QXmlNamespaceSupport.processName": ('str', 'bool', 'str', 'str'), + "QXmlNamespaceSupport.pushContext": (), + "QXmlNamespaceSupport.reset": (), + "QXmlNamespaceSupport.setPrefix": ('str', 'str'), + "QXmlNamespaceSupport.splitName": ('str', 'str', 'str'), + "QXmlNamespaceSupport.uri": ('str',), + + # class PySide2.QtXml.QXmlParseException: + "QXmlParseException.__init__": [('PySide2.QtXml.QXmlParseException',), ('str', 'int', 'int', 'str', 'str')], + "QXmlParseException.columnNumber": (), + "QXmlParseException.lineNumber": (), + "QXmlParseException.message": (), + "QXmlParseException.publicId": (), + "QXmlParseException.systemId": (), + + # class PySide2.QtXml.QXmlReader: + "QXmlReader.__init__": (), + "QXmlReader.DTDHandler": (), + "QXmlReader.contentHandler": (), + "QXmlReader.declHandler": (), + "QXmlReader.entityResolver": (), + "QXmlReader.errorHandler": (), + "QXmlReader.feature": ('str', 'bool'), + "QXmlReader.hasFeature": ('str',), + "QXmlReader.hasProperty": ('str',), + "QXmlReader.lexicalHandler": (), + "QXmlReader.parse": ('PySide2.QtXml.QXmlInputSource',), + "QXmlReader.property": ('str', 'bool'), + "QXmlReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlReader.setFeature": ('str', 'bool'), + "QXmlReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlReader.setProperty": ('str', 'int'), + + # class PySide2.QtXml.QXmlSimpleReader: + "QXmlSimpleReader.__init__": (), + "QXmlSimpleReader.DTDHandler": (), + "QXmlSimpleReader.contentHandler": (), + "QXmlSimpleReader.declHandler": (), + "QXmlSimpleReader.entityResolver": (), + "QXmlSimpleReader.errorHandler": (), + "QXmlSimpleReader.feature": ('str', 'bool'), + "QXmlSimpleReader.hasFeature": ('str',), + "QXmlSimpleReader.hasProperty": ('str',), + "QXmlSimpleReader.lexicalHandler": (), + "QXmlSimpleReader.parse": [('PySide2.QtXml.QXmlInputSource',), ('PySide2.QtXml.QXmlInputSource', 'bool')], + "QXmlSimpleReader.parseContinue": (), + "QXmlSimpleReader.property": ('str', 'bool'), + "QXmlSimpleReader.setContentHandler": ('PySide2.QtXml.QXmlContentHandler',), + "QXmlSimpleReader.setDTDHandler": ('PySide2.QtXml.QXmlDTDHandler',), + "QXmlSimpleReader.setDeclHandler": ('PySide2.QtXml.QXmlDeclHandler',), + "QXmlSimpleReader.setEntityResolver": ('PySide2.QtXml.QXmlEntityResolver',), + "QXmlSimpleReader.setErrorHandler": ('PySide2.QtXml.QXmlErrorHandler',), + "QXmlSimpleReader.setFeature": ('str', 'bool'), + "QXmlSimpleReader.setLexicalHandler": ('PySide2.QtXml.QXmlLexicalHandler',), + "QXmlSimpleReader.setProperty": ('str', 'int'), + }) + +# Module PySide2.QtXmlPatterns +if "PySide2.QtXmlPatterns" in sys.modules: + dict.update({ + + # class PySide2.QtXmlPatterns.QAbstractMessageHandler: + "QAbstractMessageHandler.__init__": ('PySide2.QtCore.QObject',), + "QAbstractMessageHandler.handleMessage": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + "QAbstractMessageHandler.message": ('PySide2.QtCore.QtMsgType', 'str', 'PySide2.QtCore.QUrl', 'PySide2.QtXmlPatterns.QSourceLocation'), + + # class PySide2.QtXmlPatterns.QAbstractUriResolver: + "QAbstractUriResolver.__init__": ('PySide2.QtCore.QObject',), + "QAbstractUriResolver.resolve": ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), + + # class PySide2.QtXmlPatterns.QAbstractXmlNodeModel: + "QAbstractXmlNodeModel.__init__": (), + "QAbstractXmlNodeModel.attributes": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.baseUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.compareOrder": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.createIndex": [('int',), ('int', 'int')], + "QAbstractXmlNodeModel.documentUri": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.elementById": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.isDeepEqual": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.kind": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.name": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceBindings": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.namespaceForPrefix": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'Missing(PySide2.QtXmlPatterns.QXmlName.PrefixCode)'), + "QAbstractXmlNodeModel.nextFromSimpleAxis": ('PySide2.QtXmlPatterns.QAbstractXmlNodeModel.SimpleAxis', 'PySide2.QtXmlPatterns.QXmlNodeModelIndex'), + "QAbstractXmlNodeModel.nodesByIdref": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlNodeModel.root": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.sendNamespaces": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex', 'PySide2.QtXmlPatterns.QAbstractXmlReceiver'), + "QAbstractXmlNodeModel.sourceLocation": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.stringValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + "QAbstractXmlNodeModel.typedValue": ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',), + + # class PySide2.QtXmlPatterns.QAbstractXmlReceiver: + "QAbstractXmlReceiver.__init__": (), + "QAbstractXmlReceiver.atomicValue": ('Any',), + "QAbstractXmlReceiver.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.characters": ('str',), + "QAbstractXmlReceiver.comment": ('str',), + "QAbstractXmlReceiver.endDocument": (), + "QAbstractXmlReceiver.endElement": (), + "QAbstractXmlReceiver.endOfSequence": (), + "QAbstractXmlReceiver.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QAbstractXmlReceiver.startDocument": (), + "QAbstractXmlReceiver.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QAbstractXmlReceiver.startOfSequence": (), + "QAbstractXmlReceiver.whitespaceOnly": ('str',), + + # class PySide2.QtXmlPatterns.QSourceLocation: + "QSourceLocation.__init__": [(), ('PySide2.QtCore.QUrl', 'int', 'int'), ('PySide2.QtXmlPatterns.QSourceLocation',)], + "QSourceLocation.__copy__": (), + "QSourceLocation.column": (), + "QSourceLocation.isNull": (), + "QSourceLocation.line": (), + "QSourceLocation.setColumn": ('int',), + "QSourceLocation.setLine": ('int',), + "QSourceLocation.setUri": ('PySide2.QtCore.QUrl',), + "QSourceLocation.uri": (), + + # class PySide2.QtXmlPatterns.QXmlFormatter: + "QXmlFormatter.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlFormatter.atomicValue": ('Any',), + "QXmlFormatter.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.characters": ('str',), + "QXmlFormatter.comment": ('str',), + "QXmlFormatter.endDocument": (), + "QXmlFormatter.endElement": (), + "QXmlFormatter.endOfSequence": (), + "QXmlFormatter.indentationDepth": (), + "QXmlFormatter.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlFormatter.setIndentationDepth": ('int',), + "QXmlFormatter.startDocument": (), + "QXmlFormatter.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlFormatter.startOfSequence": (), + + # class PySide2.QtXmlPatterns.QXmlItem: + "QXmlItem.__init__": [(), ('Any',), ('PySide2.QtXmlPatterns.QXmlItem',), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlItem.__copy__": (), + "QXmlItem.isAtomicValue": (), + "QXmlItem.isNode": (), + "QXmlItem.isNull": (), + "QXmlItem.toAtomicValue": (), + "QXmlItem.toNodeModelIndex": (), + + # class PySide2.QtXmlPatterns.QXmlName: + "QXmlName.__init__": [(), ('PySide2.QtXmlPatterns.QXmlName',), ('PySide2.QtXmlPatterns.QXmlNamePool', 'str', 'str', 'str')], + "QXmlName.__copy__": (), + "QXmlName.fromClarkName": ('str', 'PySide2.QtXmlPatterns.QXmlNamePool'), + "QXmlName.isNCName": ('str',), + "QXmlName.isNull": (), + "QXmlName.localName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.namespaceUri": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.prefix": ('PySide2.QtXmlPatterns.QXmlNamePool',), + "QXmlName.toClarkName": ('PySide2.QtXmlPatterns.QXmlNamePool',), + + # class PySide2.QtXmlPatterns.QXmlNamePool: + "QXmlNamePool.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',)], + "QXmlNamePool.__copy__": (), + + # class PySide2.QtXmlPatterns.QXmlNodeModelIndex: + "QXmlNodeModelIndex.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNodeModelIndex',)], + "QXmlNodeModelIndex.__copy__": (), + "QXmlNodeModelIndex.additionalData": (), + "QXmlNodeModelIndex.data": (), + "QXmlNodeModelIndex.internalPointer": (), + "QXmlNodeModelIndex.isNull": (), + "QXmlNodeModelIndex.model": (), + + # class PySide2.QtXmlPatterns.QXmlQuery: + "QXmlQuery.__init__": [(), ('PySide2.QtXmlPatterns.QXmlNamePool',), ('PySide2.QtXmlPatterns.QXmlQuery',), ('PySide2.QtXmlPatterns.QXmlQuery.QueryLanguage', 'PySide2.QtXmlPatterns.QXmlNamePool')], + "QXmlQuery.__copy__": (), + "QXmlQuery.bindVariable": [('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtCore.QIODevice'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlItem'), ('PySide2.QtXmlPatterns.QXmlName', 'PySide2.QtXmlPatterns.QXmlQuery'), ('str', 'PySide2.QtCore.QIODevice'), ('str', 'PySide2.QtXmlPatterns.QXmlItem'), ('str', 'PySide2.QtXmlPatterns.QXmlQuery')], + "QXmlQuery.evaluateTo": [('PySide2.QtCore.QIODevice',), ('PySide2.QtXmlPatterns.QAbstractXmlReceiver',), ('PySide2.QtXmlPatterns.QXmlResultItems',)], + "QXmlQuery.initialTemplateName": (), + "QXmlQuery.isValid": (), + "QXmlQuery.messageHandler": (), + "QXmlQuery.namePool": (), + "QXmlQuery.queryLanguage": (), + "QXmlQuery.setFocus": [('PySide2.QtCore.QIODevice',), ('PySide2.QtCore.QUrl',), ('PySide2.QtXmlPatterns.QXmlItem',), ('str',)], + "QXmlQuery.setInitialTemplateName": [('PySide2.QtXmlPatterns.QXmlName',), ('str',)], + "QXmlQuery.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlQuery.setQuery": [('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QUrl'), ('str', 'PySide2.QtCore.QUrl')], + "QXmlQuery.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlQuery.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlResultItems: + "QXmlResultItems.__init__": (), + "QXmlResultItems.current": (), + "QXmlResultItems.hasError": (), + + # class PySide2.QtXmlPatterns.QXmlSchema: + "QXmlSchema.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchema.documentUri": (), + "QXmlSchema.isValid": (), + "QXmlSchema.load": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + "QXmlSchema.messageHandler": (), + "QXmlSchema.namePool": (), + "QXmlSchema.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchema.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchema.uriResolver": (), + + # class PySide2.QtXmlPatterns.QXmlSchemaValidator: + "QXmlSchemaValidator.__init__": [(), ('PySide2.QtXmlPatterns.QXmlSchema',)], + "QXmlSchemaValidator.messageHandler": (), + "QXmlSchemaValidator.namePool": (), + "QXmlSchemaValidator.schema": (), + "QXmlSchemaValidator.setMessageHandler": ('PySide2.QtXmlPatterns.QAbstractMessageHandler',), + "QXmlSchemaValidator.setSchema": ('PySide2.QtXmlPatterns.QXmlSchema',), + "QXmlSchemaValidator.setUriResolver": ('PySide2.QtXmlPatterns.QAbstractUriResolver',), + "QXmlSchemaValidator.uriResolver": (), + "QXmlSchemaValidator.validate": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QIODevice', 'PySide2.QtCore.QUrl'), ('PySide2.QtCore.QUrl',)], + + # class PySide2.QtXmlPatterns.QXmlSerializer: + "QXmlSerializer.__init__": ('PySide2.QtXmlPatterns.QXmlQuery', 'PySide2.QtCore.QIODevice'), + "QXmlSerializer.atomicValue": ('Any',), + "QXmlSerializer.attribute": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.characters": ('str',), + "QXmlSerializer.codec": (), + "QXmlSerializer.comment": ('str',), + "QXmlSerializer.endDocument": (), + "QXmlSerializer.endElement": (), + "QXmlSerializer.endOfSequence": (), + "QXmlSerializer.namespaceBinding": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.outputDevice": (), + "QXmlSerializer.processingInstruction": ('PySide2.QtXmlPatterns.QXmlName', 'str'), + "QXmlSerializer.setCodec": ('PySide2.QtCore.QTextCodec',), + "QXmlSerializer.startDocument": (), + "QXmlSerializer.startElement": ('PySide2.QtXmlPatterns.QXmlName',), + "QXmlSerializer.startOfSequence": (), + }) + +# Module PySide2.QtHelp +if "PySide2.QtHelp" in sys.modules: + dict.update({ + + # class PySide2.QtHelp.QHelpContentItem: + "QHelpContentItem.__copy__": (), + "QHelpContentItem.child": ('int',), + "QHelpContentItem.childCount": (), + "QHelpContentItem.childPosition": ('PySide2.QtHelp.QHelpContentItem',), + "QHelpContentItem.parent": (), + "QHelpContentItem.row": (), + "QHelpContentItem.title": (), + "QHelpContentItem.url": (), + + # class PySide2.QtHelp.QHelpContentModel: + "QHelpContentModel.columnCount": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.contentItemAt": ('PySide2.QtCore.QModelIndex',), + "QHelpContentModel.createContents": ('str',), + "QHelpContentModel.data": ('PySide2.QtCore.QModelIndex', 'int'), + "QHelpContentModel.index": ('int', 'int', 'PySide2.QtCore.QModelIndex'), + "QHelpContentModel.isCreatingContents": (), + "QHelpContentModel.parent": [(), ('PySide2.QtCore.QModelIndex',)], + "QHelpContentModel.rowCount": ('PySide2.QtCore.QModelIndex',), + + # class PySide2.QtHelp.QHelpContentWidget: + "QHelpContentWidget.indexOf": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtHelp.QHelpEngine: + "QHelpEngine.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngine.contentModel": (), + "QHelpEngine.contentWidget": (), + "QHelpEngine.indexModel": (), + "QHelpEngine.indexWidget": (), + "QHelpEngine.searchEngine": (), + + # class PySide2.QtHelp.QHelpEngineCore: + "QHelpEngineCore.__init__": ('str', 'PySide2.QtCore.QObject'), + "QHelpEngineCore.addCustomFilter": ('str', 'List[str]'), + "QHelpEngineCore.autoSaveFilter": (), + "QHelpEngineCore.collectionFile": (), + "QHelpEngineCore.copyCollectionFile": ('str',), + "QHelpEngineCore.currentFilter": (), + "QHelpEngineCore.customFilters": (), + "QHelpEngineCore.customValue": ('str', 'Any'), + "QHelpEngineCore.documentationFileName": ('str',), + "QHelpEngineCore.error": (), + "QHelpEngineCore.fileData": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.files": ('str', 'List[str]', 'str'), + "QHelpEngineCore.filterAttributeSets": ('str',), + "QHelpEngineCore.filterAttributes": [(), ('str',)], + "QHelpEngineCore.findFile": ('PySide2.QtCore.QUrl',), + "QHelpEngineCore.linksForIdentifier": ('str',), + "QHelpEngineCore.linksForKeyword": ('str',), + "QHelpEngineCore.metaData": ('str', 'str'), + "QHelpEngineCore.namespaceName": ('str',), + "QHelpEngineCore.registerDocumentation": ('str',), + "QHelpEngineCore.registeredDocumentations": (), + "QHelpEngineCore.removeCustomFilter": ('str',), + "QHelpEngineCore.removeCustomValue": ('str',), + "QHelpEngineCore.setAutoSaveFilter": ('bool',), + "QHelpEngineCore.setCollectionFile": ('str',), + "QHelpEngineCore.setCurrentFilter": ('str',), + "QHelpEngineCore.setCustomValue": ('str', 'Any'), + "QHelpEngineCore.setupData": (), + "QHelpEngineCore.unregisterDocumentation": ('str',), + + # class PySide2.QtHelp.QHelpIndexModel: + "QHelpIndexModel.createIndex": [('int', 'int', 'int'), ('int', 'int', 'object'), ('str',)], + "QHelpIndexModel.filter": ('str', 'str'), + "QHelpIndexModel.isCreatingIndex": (), + "QHelpIndexModel.linksForKeyword": ('str',), + + # class PySide2.QtHelp.QHelpIndexWidget: + "QHelpIndexWidget.activateCurrentItem": (), + "QHelpIndexWidget.filterIndices": ('str', 'str'), + + # class PySide2.QtHelp.QHelpSearchEngine: + "QHelpSearchEngine.__init__": ('PySide2.QtHelp.QHelpEngineCore', 'PySide2.QtCore.QObject'), + "QHelpSearchEngine.cancelIndexing": (), + "QHelpSearchEngine.cancelSearching": (), + "QHelpSearchEngine.hitCount": (), + "QHelpSearchEngine.hitsCount": (), + "QHelpSearchEngine.query": (), + "QHelpSearchEngine.queryWidget": (), + "QHelpSearchEngine.reindexDocumentation": (), + "QHelpSearchEngine.resultWidget": (), + "QHelpSearchEngine.scheduleIndexDocumentation": (), + "QHelpSearchEngine.search": [('list',), ('str',)], + "QHelpSearchEngine.searchInput": (), + "QHelpSearchEngine.searchResultCount": (), + "QHelpSearchEngine.searchResults": ('int', 'int'), + + # class PySide2.QtHelp.QHelpSearchQuery: + "QHelpSearchQuery.__init__": [(), ('PySide2.QtHelp.QHelpSearchQuery',), ('PySide2.QtHelp.QHelpSearchQuery.FieldName', 'List[str]')], + "QHelpSearchQuery.__copy__": (), + + # class PySide2.QtHelp.QHelpSearchQueryWidget: + "QHelpSearchQueryWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QHelpSearchQueryWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchQueryWidget.collapseExtendedSearch": (), + "QHelpSearchQueryWidget.expandExtendedSearch": (), + "QHelpSearchQueryWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QHelpSearchQueryWidget.isCompactMode": (), + "QHelpSearchQueryWidget.query": (), + "QHelpSearchQueryWidget.searchInput": (), + "QHelpSearchQueryWidget.setCompactMode": ('bool',), + "QHelpSearchQueryWidget.setQuery": ('list',), + "QHelpSearchQueryWidget.setSearchInput": ('str',), + + # class PySide2.QtHelp.QHelpSearchResult: + "QHelpSearchResult.__init__": [(), ('PySide2.QtCore.QUrl', 'str', 'str'), ('PySide2.QtHelp.QHelpSearchResult',)], + "QHelpSearchResult.snippet": (), + "QHelpSearchResult.title": (), + "QHelpSearchResult.url": (), + + # class PySide2.QtHelp.QHelpSearchResultWidget: + "QHelpSearchResultWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QHelpSearchResultWidget.linkAt": ('PySide2.QtCore.QPoint',), + }) + +# Module PySide2.QtMultimedia +if "PySide2.QtMultimedia" in sys.modules: + dict.update({ + + # class PySide2.QtMultimedia.QAbstractAudioDeviceInfo: + "QAbstractAudioDeviceInfo.__init__": (), + "QAbstractAudioDeviceInfo.deviceName": (), + "QAbstractAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioDeviceInfo.preferredFormat": (), + "QAbstractAudioDeviceInfo.supportedByteOrders": (), + "QAbstractAudioDeviceInfo.supportedChannelCounts": (), + "QAbstractAudioDeviceInfo.supportedCodecs": (), + "QAbstractAudioDeviceInfo.supportedSampleRates": (), + "QAbstractAudioDeviceInfo.supportedSampleSizes": (), + "QAbstractAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAbstractAudioInput: + "QAbstractAudioInput.__init__": (), + "QAbstractAudioInput.bufferSize": (), + "QAbstractAudioInput.bytesReady": (), + "QAbstractAudioInput.elapsedUSecs": (), + "QAbstractAudioInput.error": (), + "QAbstractAudioInput.format": (), + "QAbstractAudioInput.notifyInterval": (), + "QAbstractAudioInput.periodSize": (), + "QAbstractAudioInput.processedUSecs": (), + "QAbstractAudioInput.reset": (), + "QAbstractAudioInput.resume": (), + "QAbstractAudioInput.setBufferSize": ('int',), + "QAbstractAudioInput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioInput.setNotifyInterval": ('int',), + "QAbstractAudioInput.setVolume": ('float',), + "QAbstractAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioInput.state": (), + "QAbstractAudioInput.stop": (), + "QAbstractAudioInput.suspend": (), + "QAbstractAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAbstractAudioOutput: + "QAbstractAudioOutput.__init__": (), + "QAbstractAudioOutput.bufferSize": (), + "QAbstractAudioOutput.bytesFree": (), + "QAbstractAudioOutput.category": (), + "QAbstractAudioOutput.elapsedUSecs": (), + "QAbstractAudioOutput.error": (), + "QAbstractAudioOutput.format": (), + "QAbstractAudioOutput.notifyInterval": (), + "QAbstractAudioOutput.periodSize": (), + "QAbstractAudioOutput.processedUSecs": (), + "QAbstractAudioOutput.reset": (), + "QAbstractAudioOutput.resume": (), + "QAbstractAudioOutput.setBufferSize": ('int',), + "QAbstractAudioOutput.setCategory": ('str',), + "QAbstractAudioOutput.setFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAbstractAudioOutput.setNotifyInterval": ('int',), + "QAbstractAudioOutput.setVolume": ('float',), + "QAbstractAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAbstractAudioOutput.state": (), + "QAbstractAudioOutput.stop": (), + "QAbstractAudioOutput.suspend": (), + "QAbstractAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAbstractVideoBuffer: + "QAbstractVideoBuffer.__init__": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoBuffer.handle": (), + "QAbstractVideoBuffer.handleType": (), + "QAbstractVideoBuffer.mapMode": (), + "QAbstractVideoBuffer.release": (), + "QAbstractVideoBuffer.unmap": (), + + # class PySide2.QtMultimedia.QAbstractVideoFilter: + "QAbstractVideoFilter.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoFilter.createFilterRunnable": (), + "QAbstractVideoFilter.isActive": (), + "QAbstractVideoFilter.setActive": ('bool',), + + # class PySide2.QtMultimedia.QAbstractVideoSurface: + "QAbstractVideoSurface.__init__": ('PySide2.QtCore.QObject',), + "QAbstractVideoSurface.error": (), + "QAbstractVideoSurface.isActive": (), + "QAbstractVideoSurface.isFormatSupported": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.nativeResolution": (), + "QAbstractVideoSurface.nearestFormat": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.present": ('PySide2.QtMultimedia.QVideoFrame',), + "QAbstractVideoSurface.setError": ('PySide2.QtMultimedia.QAbstractVideoSurface.Error',), + "QAbstractVideoSurface.setNativeResolution": ('PySide2.QtCore.QSize',), + "QAbstractVideoSurface.start": ('PySide2.QtMultimedia.QVideoSurfaceFormat',), + "QAbstractVideoSurface.stop": (), + "QAbstractVideoSurface.supportedPixelFormats": ('PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType',), + "QAbstractVideoSurface.surfaceFormat": (), + + # class PySide2.QtMultimedia.QAudio: + "QAudio.convertVolume": ('float', 'PySide2.QtMultimedia.QAudio.VolumeScale', 'PySide2.QtMultimedia.QAudio.VolumeScale'), + + # class PySide2.QtMultimedia.QAudioBuffer: + "QAudioBuffer.__init__": [(), ('PySide2.QtCore.QByteArray', 'PySide2.QtMultimedia.QAudioFormat', 'int'), ('PySide2.QtMultimedia.QAudioBuffer',), ('int', 'PySide2.QtMultimedia.QAudioFormat', 'int')], + "QAudioBuffer.__copy__": (), + "QAudioBuffer.byteCount": (), + "QAudioBuffer.constData": (), + "QAudioBuffer.data": (), + "QAudioBuffer.duration": (), + "QAudioBuffer.format": (), + "QAudioBuffer.frameCount": (), + "QAudioBuffer.isValid": (), + "QAudioBuffer.sampleCount": (), + "QAudioBuffer.startTime": (), + + # class PySide2.QtMultimedia.QAudioDecoder: + "QAudioDecoder.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoder.audioFormat": (), + "QAudioDecoder.bind": ('PySide2.QtCore.QObject',), + "QAudioDecoder.bufferAvailable": (), + "QAudioDecoder.duration": (), + "QAudioDecoder.errorString": (), + "QAudioDecoder.hasSupport": ('str', 'List[str]'), + "QAudioDecoder.position": (), + "QAudioDecoder.read": (), + "QAudioDecoder.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoder.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoder.setSourceFilename": ('str',), + "QAudioDecoder.sourceDevice": (), + "QAudioDecoder.sourceFilename": (), + "QAudioDecoder.start": (), + "QAudioDecoder.state": (), + "QAudioDecoder.stop": (), + "QAudioDecoder.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QAudioDecoderControl: + "QAudioDecoderControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioDecoderControl.audioFormat": (), + "QAudioDecoderControl.bufferAvailable": (), + "QAudioDecoderControl.duration": (), + "QAudioDecoderControl.position": (), + "QAudioDecoderControl.read": (), + "QAudioDecoderControl.setAudioFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDecoderControl.setSourceDevice": ('PySide2.QtCore.QIODevice',), + "QAudioDecoderControl.setSourceFilename": ('str',), + "QAudioDecoderControl.sourceDevice": (), + "QAudioDecoderControl.sourceFilename": (), + "QAudioDecoderControl.start": (), + "QAudioDecoderControl.state": (), + "QAudioDecoderControl.stop": (), + + # class PySide2.QtMultimedia.QAudioDeviceInfo: + "QAudioDeviceInfo.__init__": [(), ('PySide2.QtMultimedia.QAudioDeviceInfo',)], + "QAudioDeviceInfo.__copy__": (), + "QAudioDeviceInfo.availableDevices": ('PySide2.QtMultimedia.QAudio.Mode',), + "QAudioDeviceInfo.defaultInputDevice": (), + "QAudioDeviceInfo.defaultOutputDevice": (), + "QAudioDeviceInfo.deviceName": (), + "QAudioDeviceInfo.isFormatSupported": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.isNull": (), + "QAudioDeviceInfo.nearestFormat": ('PySide2.QtMultimedia.QAudioFormat',), + "QAudioDeviceInfo.preferredFormat": (), + "QAudioDeviceInfo.supportedByteOrders": (), + "QAudioDeviceInfo.supportedChannelCounts": (), + "QAudioDeviceInfo.supportedCodecs": (), + "QAudioDeviceInfo.supportedSampleRates": (), + "QAudioDeviceInfo.supportedSampleSizes": (), + "QAudioDeviceInfo.supportedSampleTypes": (), + + # class PySide2.QtMultimedia.QAudioEncoderSettings: + "QAudioEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QAudioEncoderSettings',)], + "QAudioEncoderSettings.__copy__": (), + "QAudioEncoderSettings.bitRate": (), + "QAudioEncoderSettings.channelCount": (), + "QAudioEncoderSettings.codec": (), + "QAudioEncoderSettings.encodingMode": (), + "QAudioEncoderSettings.encodingOption": ('str',), + "QAudioEncoderSettings.encodingOptions": (), + "QAudioEncoderSettings.isNull": (), + "QAudioEncoderSettings.quality": (), + "QAudioEncoderSettings.sampleRate": (), + "QAudioEncoderSettings.setBitRate": ('int',), + "QAudioEncoderSettings.setChannelCount": ('int',), + "QAudioEncoderSettings.setCodec": ('str',), + "QAudioEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QAudioEncoderSettings.setEncodingOption": ('str', 'Any'), + "QAudioEncoderSettings.setEncodingOptions": ('dict',), + "QAudioEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QAudioEncoderSettings.setSampleRate": ('int',), + + # class PySide2.QtMultimedia.QAudioEncoderSettingsControl: + "QAudioEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioEncoderSettingsControl.audioSettings": (), + "QAudioEncoderSettingsControl.codecDescription": ('str',), + "QAudioEncoderSettingsControl.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QAudioEncoderSettingsControl.supportedAudioCodecs": (), + + # class PySide2.QtMultimedia.QAudioFormat: + "QAudioFormat.__init__": [(), ('PySide2.QtMultimedia.QAudioFormat',)], + "QAudioFormat.__copy__": (), + "QAudioFormat.byteOrder": (), + "QAudioFormat.bytesForDuration": ('int',), + "QAudioFormat.bytesForFrames": ('int',), + "QAudioFormat.bytesPerFrame": (), + "QAudioFormat.channelCount": (), + "QAudioFormat.codec": (), + "QAudioFormat.durationForBytes": ('int',), + "QAudioFormat.durationForFrames": ('int',), + "QAudioFormat.framesForBytes": ('int',), + "QAudioFormat.framesForDuration": ('int',), + "QAudioFormat.isValid": (), + "QAudioFormat.sampleRate": (), + "QAudioFormat.sampleSize": (), + "QAudioFormat.sampleType": (), + "QAudioFormat.setByteOrder": ('PySide2.QtMultimedia.QAudioFormat.Endian',), + "QAudioFormat.setChannelCount": ('int',), + "QAudioFormat.setCodec": ('str',), + "QAudioFormat.setSampleRate": ('int',), + "QAudioFormat.setSampleSize": ('int',), + "QAudioFormat.setSampleType": ('PySide2.QtMultimedia.QAudioFormat.SampleType',), + + # class PySide2.QtMultimedia.QAudioInput: + "QAudioInput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioInput.bufferSize": (), + "QAudioInput.bytesReady": (), + "QAudioInput.elapsedUSecs": (), + "QAudioInput.error": (), + "QAudioInput.format": (), + "QAudioInput.notifyInterval": (), + "QAudioInput.periodSize": (), + "QAudioInput.processedUSecs": (), + "QAudioInput.reset": (), + "QAudioInput.resume": (), + "QAudioInput.setBufferSize": ('int',), + "QAudioInput.setNotifyInterval": ('int',), + "QAudioInput.setVolume": ('float',), + "QAudioInput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioInput.state": (), + "QAudioInput.stop": (), + "QAudioInput.suspend": (), + "QAudioInput.volume": (), + + # class PySide2.QtMultimedia.QAudioInputSelectorControl: + "QAudioInputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioInputSelectorControl.activeInput": (), + "QAudioInputSelectorControl.availableInputs": (), + "QAudioInputSelectorControl.defaultInput": (), + "QAudioInputSelectorControl.inputDescription": ('str',), + "QAudioInputSelectorControl.setActiveInput": ('str',), + + # class PySide2.QtMultimedia.QAudioOutput: + "QAudioOutput.__init__": [('PySide2.QtMultimedia.QAudioDeviceInfo', 'PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QAudioFormat', 'PySide2.QtCore.QObject')], + "QAudioOutput.bufferSize": (), + "QAudioOutput.bytesFree": (), + "QAudioOutput.category": (), + "QAudioOutput.elapsedUSecs": (), + "QAudioOutput.error": (), + "QAudioOutput.format": (), + "QAudioOutput.notifyInterval": (), + "QAudioOutput.periodSize": (), + "QAudioOutput.processedUSecs": (), + "QAudioOutput.reset": (), + "QAudioOutput.resume": (), + "QAudioOutput.setBufferSize": ('int',), + "QAudioOutput.setCategory": ('str',), + "QAudioOutput.setNotifyInterval": ('int',), + "QAudioOutput.setVolume": ('float',), + "QAudioOutput.start": [(), ('PySide2.QtCore.QIODevice',)], + "QAudioOutput.state": (), + "QAudioOutput.stop": (), + "QAudioOutput.suspend": (), + "QAudioOutput.volume": (), + + # class PySide2.QtMultimedia.QAudioOutputSelectorControl: + "QAudioOutputSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioOutputSelectorControl.activeOutput": (), + "QAudioOutputSelectorControl.availableOutputs": (), + "QAudioOutputSelectorControl.defaultOutput": (), + "QAudioOutputSelectorControl.outputDescription": ('str',), + "QAudioOutputSelectorControl.setActiveOutput": ('str',), + + # class PySide2.QtMultimedia.QAudioProbe: + "QAudioProbe.__init__": ('PySide2.QtCore.QObject',), + "QAudioProbe.isActive": (), + "QAudioProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QAudioRecorder: + "QAudioRecorder.__init__": ('PySide2.QtCore.QObject',), + "QAudioRecorder.audioInput": (), + "QAudioRecorder.audioInputDescription": ('str',), + "QAudioRecorder.audioInputs": (), + "QAudioRecorder.defaultAudioInput": (), + "QAudioRecorder.setAudioInput": ('str',), + + # class PySide2.QtMultimedia.QAudioRoleControl: + "QAudioRoleControl.__init__": ('PySide2.QtCore.QObject',), + "QAudioRoleControl.audioRole": (), + "QAudioRoleControl.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QAudioRoleControl.supportedAudioRoles": (), + + # class PySide2.QtMultimedia.QCamera: + "QCamera.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtMultimedia.QCamera.Position', 'PySide2.QtCore.QObject'), ('PySide2.QtMultimedia.QCameraInfo', 'PySide2.QtCore.QObject')], + "QCamera.availability": (), + "QCamera.availableDevices": (), + "QCamera.captureMode": (), + "QCamera.deviceDescription": ('PySide2.QtCore.QByteArray',), + "QCamera.errorString": (), + "QCamera.isCaptureModeSupported": ('CaptureModes',), + "QCamera.load": (), + "QCamera.lockStatus": [(), ('PySide2.QtMultimedia.QCamera.LockType',)], + "QCamera.requestedLocks": (), + "QCamera.searchAndLock": [(), ('LockTypes',)], + "QCamera.setCaptureMode": ('CaptureModes',), + "QCamera.setViewfinder": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QCamera.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.start": (), + "QCamera.state": (), + "QCamera.status": (), + "QCamera.stop": (), + "QCamera.supportedLocks": (), + "QCamera.supportedViewfinderFrameRateRanges": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderPixelFormats": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderResolutions": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.supportedViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCamera.unload": (), + "QCamera.unlock": [(), ('LockTypes',)], + "QCamera.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraCaptureBufferFormatControl: + "QCameraCaptureBufferFormatControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureBufferFormatControl.bufferFormat": (), + "QCameraCaptureBufferFormatControl.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraCaptureBufferFormatControl.supportedBufferFormats": (), + + # class PySide2.QtMultimedia.QCameraCaptureDestinationControl: + "QCameraCaptureDestinationControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraCaptureDestinationControl.captureDestination": (), + "QCameraCaptureDestinationControl.isCaptureDestinationSupported": ('CaptureDestinations',), + "QCameraCaptureDestinationControl.setCaptureDestination": ('CaptureDestinations',), + + # class PySide2.QtMultimedia.QCameraControl: + "QCameraControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraControl.canChangeProperty": ('PySide2.QtMultimedia.QCameraControl.PropertyChangeType', 'PySide2.QtMultimedia.QCamera.Status'), + "QCameraControl.captureMode": (), + "QCameraControl.isCaptureModeSupported": ('CaptureModes',), + "QCameraControl.setCaptureMode": ('CaptureModes',), + "QCameraControl.setState": ('PySide2.QtMultimedia.QCamera.State',), + "QCameraControl.state": (), + "QCameraControl.status": (), + + # class PySide2.QtMultimedia.QCameraExposureControl: + "QCameraExposureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraExposureControl.actualValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.requestedValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter',), + "QCameraExposureControl.setValue": ('PySide2.QtMultimedia.QCameraExposureControl.ExposureParameter', 'Any'), + + # class PySide2.QtMultimedia.QCameraFocusZone: + "QCameraFocusZone.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus'), ('PySide2.QtMultimedia.QCameraFocusZone',)], + "QCameraFocusZone.__copy__": (), + "QCameraFocusZone.area": (), + "QCameraFocusZone.isValid": (), + "QCameraFocusZone.setStatus": ('PySide2.QtMultimedia.QCameraFocusZone.FocusZoneStatus',), + "QCameraFocusZone.status": (), + + # class PySide2.QtMultimedia.QCameraImageCapture: + "QCameraImageCapture.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QCameraImageCapture.availability": (), + "QCameraImageCapture.bufferFormat": (), + "QCameraImageCapture.cancelCapture": (), + "QCameraImageCapture.capture": ('str',), + "QCameraImageCapture.captureDestination": (), + "QCameraImageCapture.encodingSettings": (), + "QCameraImageCapture.errorString": (), + "QCameraImageCapture.imageCodecDescription": ('str',), + "QCameraImageCapture.isAvailable": (), + "QCameraImageCapture.isCaptureDestinationSupported": ('CaptureDestinations',), + "QCameraImageCapture.isReadyForCapture": (), + "QCameraImageCapture.mediaObject": (), + "QCameraImageCapture.setBufferFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraImageCapture.setCaptureDestination": ('CaptureDestinations',), + "QCameraImageCapture.setEncodingSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QCameraImageCapture.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QCameraImageCapture.supportedBufferFormats": (), + "QCameraImageCapture.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QCameraImageCaptureControl: + "QCameraImageCaptureControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageCaptureControl.cancelCapture": (), + "QCameraImageCaptureControl.capture": ('str',), + "QCameraImageCaptureControl.driveMode": (), + "QCameraImageCaptureControl.isReadyForCapture": (), + "QCameraImageCaptureControl.setDriveMode": ('PySide2.QtMultimedia.QCameraImageCapture.DriveMode',), + + # class PySide2.QtMultimedia.QCameraImageProcessingControl: + "QCameraImageProcessingControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraImageProcessingControl.isParameterSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.isParameterValueSupported": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'Any'), + "QCameraImageProcessingControl.parameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter',), + "QCameraImageProcessingControl.setParameter": ('PySide2.QtMultimedia.QCameraImageProcessingControl.ProcessingParameter', 'Any'), + + # class PySide2.QtMultimedia.QCameraInfo: + "QCameraInfo.__init__": [('PySide2.QtCore.QByteArray',), ('PySide2.QtMultimedia.QCamera',), ('PySide2.QtMultimedia.QCameraInfo',)], + "QCameraInfo.__copy__": (), + "QCameraInfo.availableCameras": ('PySide2.QtMultimedia.QCamera.Position',), + "QCameraInfo.defaultCamera": (), + "QCameraInfo.description": (), + "QCameraInfo.deviceName": (), + "QCameraInfo.isNull": (), + "QCameraInfo.orientation": (), + "QCameraInfo.position": (), + + # class PySide2.QtMultimedia.QCameraInfoControl: + "QCameraInfoControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraInfoControl.cameraOrientation": ('str',), + "QCameraInfoControl.cameraPosition": ('str',), + + # class PySide2.QtMultimedia.QCameraLocksControl: + "QCameraLocksControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraLocksControl.lockStatus": ('PySide2.QtMultimedia.QCamera.LockType',), + "QCameraLocksControl.searchAndLock": ('LockTypes',), + "QCameraLocksControl.supportedLocks": (), + "QCameraLocksControl.unlock": ('LockTypes',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettings: + "QCameraViewfinderSettings.__init__": [(), ('PySide2.QtMultimedia.QCameraViewfinderSettings',)], + "QCameraViewfinderSettings.__copy__": (), + "QCameraViewfinderSettings.isNull": (), + "QCameraViewfinderSettings.maximumFrameRate": (), + "QCameraViewfinderSettings.minimumFrameRate": (), + "QCameraViewfinderSettings.pixelAspectRatio": (), + "QCameraViewfinderSettings.pixelFormat": (), + "QCameraViewfinderSettings.resolution": (), + "QCameraViewfinderSettings.setMaximumFrameRate": ('float',), + "QCameraViewfinderSettings.setMinimumFrameRate": ('float',), + "QCameraViewfinderSettings.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.setPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QCameraViewfinderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QCameraViewfinderSettings.swap": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl: + "QCameraViewfinderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl.isViewfinderParameterSupported": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + "QCameraViewfinderSettingsControl.setViewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter', 'Any'), + "QCameraViewfinderSettingsControl.viewfinderParameter": ('PySide2.QtMultimedia.QCameraViewfinderSettingsControl.ViewfinderParameter',), + + # class PySide2.QtMultimedia.QCameraViewfinderSettingsControl2: + "QCameraViewfinderSettingsControl2.__init__": ('PySide2.QtCore.QObject',), + "QCameraViewfinderSettingsControl2.setViewfinderSettings": ('PySide2.QtMultimedia.QCameraViewfinderSettings',), + "QCameraViewfinderSettingsControl2.supportedViewfinderSettings": (), + "QCameraViewfinderSettingsControl2.viewfinderSettings": (), + + # class PySide2.QtMultimedia.QCameraZoomControl: + "QCameraZoomControl.__init__": ('PySide2.QtCore.QObject',), + "QCameraZoomControl.currentDigitalZoom": (), + "QCameraZoomControl.currentOpticalZoom": (), + "QCameraZoomControl.maximumDigitalZoom": (), + "QCameraZoomControl.maximumOpticalZoom": (), + "QCameraZoomControl.requestedDigitalZoom": (), + "QCameraZoomControl.requestedOpticalZoom": (), + "QCameraZoomControl.zoomTo": ('float', 'float'), + + # class PySide2.QtMultimedia.QImageEncoderControl: + "QImageEncoderControl.__init__": ('PySide2.QtCore.QObject',), + "QImageEncoderControl.imageCodecDescription": ('str',), + "QImageEncoderControl.imageSettings": (), + "QImageEncoderControl.setImageSettings": ('PySide2.QtMultimedia.QImageEncoderSettings',), + "QImageEncoderControl.supportedImageCodecs": (), + + # class PySide2.QtMultimedia.QImageEncoderSettings: + "QImageEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QImageEncoderSettings',)], + "QImageEncoderSettings.__copy__": (), + "QImageEncoderSettings.codec": (), + "QImageEncoderSettings.encodingOption": ('str',), + "QImageEncoderSettings.encodingOptions": (), + "QImageEncoderSettings.isNull": (), + "QImageEncoderSettings.quality": (), + "QImageEncoderSettings.resolution": (), + "QImageEncoderSettings.setCodec": ('str',), + "QImageEncoderSettings.setEncodingOption": ('str', 'Any'), + "QImageEncoderSettings.setEncodingOptions": ('dict',), + "QImageEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QImageEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QMediaAudioProbeControl: + "QMediaAudioProbeControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaAvailabilityControl: + "QMediaAvailabilityControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaAvailabilityControl.availability": (), + + # class PySide2.QtMultimedia.QMediaBindableInterface: + "QMediaBindableInterface.__init__": (), + "QMediaBindableInterface.mediaObject": (), + "QMediaBindableInterface.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimedia.QMediaContainerControl: + "QMediaContainerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaContainerControl.containerDescription": ('str',), + "QMediaContainerControl.containerFormat": (), + "QMediaContainerControl.setContainerFormat": ('str',), + "QMediaContainerControl.supportedContainers": (), + + # class PySide2.QtMultimedia.QMediaContent: + "QMediaContent.__init__": [(), ('PySide2.QtCore.QUrl',), ('PySide2.QtMultimedia.QMediaContent',), ('PySide2.QtMultimedia.QMediaPlaylist', 'PySide2.QtCore.QUrl', 'bool'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest',), ('list',)], + "QMediaContent.__copy__": (), + "QMediaContent.canonicalRequest": (), + "QMediaContent.canonicalResource": (), + "QMediaContent.canonicalUrl": (), + "QMediaContent.isNull": (), + "QMediaContent.playlist": (), + "QMediaContent.resources": (), + + # class PySide2.QtMultimedia.QMediaControl: + "QMediaControl.__init__": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaGaplessPlaybackControl: + "QMediaGaplessPlaybackControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaGaplessPlaybackControl.crossfadeTime": (), + "QMediaGaplessPlaybackControl.isCrossfadeSupported": (), + "QMediaGaplessPlaybackControl.nextMedia": (), + "QMediaGaplessPlaybackControl.setCrossfadeTime": ('float',), + "QMediaGaplessPlaybackControl.setNextMedia": ('PySide2.QtMultimedia.QMediaContent',), + + # class PySide2.QtMultimedia.QMediaNetworkAccessControl: + "QMediaNetworkAccessControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaNetworkAccessControl.currentConfiguration": (), + "QMediaNetworkAccessControl.setConfigurations": ('list',), + + # class PySide2.QtMultimedia.QMediaObject: + "QMediaObject.addPropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.availability": (), + "QMediaObject.availableMetaData": (), + "QMediaObject.bind": ('PySide2.QtCore.QObject',), + "QMediaObject.isAvailable": (), + "QMediaObject.isMetaDataAvailable": (), + "QMediaObject.metaData": ('str',), + "QMediaObject.notifyInterval": (), + "QMediaObject.removePropertyWatch": ('PySide2.QtCore.QByteArray',), + "QMediaObject.setNotifyInterval": ('int',), + "QMediaObject.unbind": ('PySide2.QtCore.QObject',), + + # class PySide2.QtMultimedia.QMediaPlayer: + "QMediaPlayer.__init__": ('PySide2.QtCore.QObject', 'Flags'), + "QMediaPlayer.audioRole": (), + "QMediaPlayer.availability": (), + "QMediaPlayer.bind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.bufferStatus": (), + "QMediaPlayer.currentMedia": (), + "QMediaPlayer.currentNetworkConfiguration": (), + "QMediaPlayer.duration": (), + "QMediaPlayer.errorString": (), + "QMediaPlayer.hasSupport": ('str', 'List[str]', 'Flags'), + "QMediaPlayer.isAudioAvailable": (), + "QMediaPlayer.isMuted": (), + "QMediaPlayer.isSeekable": (), + "QMediaPlayer.isVideoAvailable": (), + "QMediaPlayer.media": (), + "QMediaPlayer.mediaStatus": (), + "QMediaPlayer.mediaStream": (), + "QMediaPlayer.pause": (), + "QMediaPlayer.play": (), + "QMediaPlayer.playbackRate": (), + "QMediaPlayer.playlist": (), + "QMediaPlayer.position": (), + "QMediaPlayer.setAudioRole": ('PySide2.QtMultimedia.QAudio.Role',), + "QMediaPlayer.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayer.setMuted": ('bool',), + "QMediaPlayer.setNetworkConfigurations": ('list',), + "QMediaPlayer.setPlaybackRate": ('float',), + "QMediaPlayer.setPlaylist": ('PySide2.QtMultimedia.QMediaPlaylist',), + "QMediaPlayer.setPosition": ('int',), + "QMediaPlayer.setVideoOutput": [('PySide2.QtMultimedia.QAbstractVideoSurface',), ('PySide2.QtMultimediaWidgets.QGraphicsVideoItem',), ('PySide2.QtMultimediaWidgets.QVideoWidget',)], + "QMediaPlayer.setVolume": ('int',), + "QMediaPlayer.state": (), + "QMediaPlayer.stop": (), + "QMediaPlayer.supportedAudioRoles": (), + "QMediaPlayer.supportedMimeTypes": ('Flags',), + "QMediaPlayer.unbind": ('PySide2.QtCore.QObject',), + "QMediaPlayer.volume": (), + + # class PySide2.QtMultimedia.QMediaPlayerControl: + "QMediaPlayerControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlayerControl.availablePlaybackRanges": (), + "QMediaPlayerControl.bufferStatus": (), + "QMediaPlayerControl.duration": (), + "QMediaPlayerControl.isAudioAvailable": (), + "QMediaPlayerControl.isMuted": (), + "QMediaPlayerControl.isSeekable": (), + "QMediaPlayerControl.isVideoAvailable": (), + "QMediaPlayerControl.media": (), + "QMediaPlayerControl.mediaStatus": (), + "QMediaPlayerControl.mediaStream": (), + "QMediaPlayerControl.pause": (), + "QMediaPlayerControl.play": (), + "QMediaPlayerControl.playbackRate": (), + "QMediaPlayerControl.position": (), + "QMediaPlayerControl.setMedia": ('PySide2.QtMultimedia.QMediaContent', 'PySide2.QtCore.QIODevice'), + "QMediaPlayerControl.setMuted": ('bool',), + "QMediaPlayerControl.setPlaybackRate": ('float',), + "QMediaPlayerControl.setPosition": ('int',), + "QMediaPlayerControl.setVolume": ('int',), + "QMediaPlayerControl.state": (), + "QMediaPlayerControl.stop": (), + "QMediaPlayerControl.volume": (), + + # class PySide2.QtMultimedia.QMediaPlaylist: + "QMediaPlaylist.__init__": ('PySide2.QtCore.QObject',), + "QMediaPlaylist.addMedia": [('PySide2.QtMultimedia.QMediaContent',), ('list',)], + "QMediaPlaylist.clear": (), + "QMediaPlaylist.currentIndex": (), + "QMediaPlaylist.currentMedia": (), + "QMediaPlaylist.error": (), + "QMediaPlaylist.errorString": (), + "QMediaPlaylist.insertMedia": [('int', 'PySide2.QtMultimedia.QMediaContent'), ('int', 'list')], + "QMediaPlaylist.isEmpty": (), + "QMediaPlaylist.isReadOnly": (), + "QMediaPlaylist.load": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaPlaylist.media": ('int',), + "QMediaPlaylist.mediaCount": (), + "QMediaPlaylist.mediaObject": (), + "QMediaPlaylist.moveMedia": ('int', 'int'), + "QMediaPlaylist.nextIndex": ('int',), + "QMediaPlaylist.playbackMode": (), + "QMediaPlaylist.previous": (), + "QMediaPlaylist.previousIndex": ('int',), + "QMediaPlaylist.removeMedia": [('int',), ('int', 'int')], + "QMediaPlaylist.save": [('PySide2.QtCore.QIODevice', 'str'), ('PySide2.QtCore.QUrl', 'str')], + "QMediaPlaylist.setCurrentIndex": ('int',), + "QMediaPlaylist.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaPlaylist.setPlaybackMode": ('PySide2.QtMultimedia.QMediaPlaylist.PlaybackMode',), + "QMediaPlaylist.shuffle": (), + + # class PySide2.QtMultimedia.QMediaRecorder: + "QMediaRecorder.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QMediaRecorder.actualLocation": (), + "QMediaRecorder.audioCodecDescription": ('str',), + "QMediaRecorder.audioSettings": (), + "QMediaRecorder.availability": (), + "QMediaRecorder.availableMetaData": (), + "QMediaRecorder.containerDescription": ('str',), + "QMediaRecorder.containerFormat": (), + "QMediaRecorder.duration": (), + "QMediaRecorder.errorString": (), + "QMediaRecorder.isAvailable": (), + "QMediaRecorder.isMetaDataAvailable": (), + "QMediaRecorder.isMetaDataWritable": (), + "QMediaRecorder.isMuted": (), + "QMediaRecorder.mediaObject": (), + "QMediaRecorder.metaData": ('str',), + "QMediaRecorder.outputLocation": (), + "QMediaRecorder.pause": (), + "QMediaRecorder.record": (), + "QMediaRecorder.setAudioSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings',), + "QMediaRecorder.setContainerFormat": ('str',), + "QMediaRecorder.setEncodingSettings": ('PySide2.QtMultimedia.QAudioEncoderSettings', 'PySide2.QtMultimedia.QVideoEncoderSettings', 'str'), + "QMediaRecorder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QMediaRecorder.setMetaData": ('str', 'Any'), + "QMediaRecorder.setMuted": ('bool',), + "QMediaRecorder.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorder.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QMediaRecorder.setVolume": ('float',), + "QMediaRecorder.state": (), + "QMediaRecorder.status": (), + "QMediaRecorder.stop": (), + "QMediaRecorder.supportedAudioCodecs": (), + "QMediaRecorder.supportedContainers": (), + "QMediaRecorder.supportedVideoCodecs": (), + "QMediaRecorder.videoCodecDescription": ('str',), + "QMediaRecorder.videoSettings": (), + "QMediaRecorder.volume": (), + + # class PySide2.QtMultimedia.QMediaRecorderControl: + "QMediaRecorderControl.__init__": ('PySide2.QtCore.QObject',), + "QMediaRecorderControl.applySettings": (), + "QMediaRecorderControl.duration": (), + "QMediaRecorderControl.isMuted": (), + "QMediaRecorderControl.outputLocation": (), + "QMediaRecorderControl.setMuted": ('bool',), + "QMediaRecorderControl.setOutputLocation": ('PySide2.QtCore.QUrl',), + "QMediaRecorderControl.setState": ('PySide2.QtMultimedia.QMediaRecorder.State',), + "QMediaRecorderControl.setVolume": ('float',), + "QMediaRecorderControl.state": (), + "QMediaRecorderControl.status": (), + "QMediaRecorderControl.volume": (), + + # class PySide2.QtMultimedia.QMediaResource: + "QMediaResource.__init__": [(), ('PySide2.QtCore.QUrl', 'str'), ('PySide2.QtMultimedia.QMediaResource',), ('PySide2.QtNetwork.QNetworkRequest', 'str')], + "QMediaResource.__copy__": (), + "QMediaResource.audioBitRate": (), + "QMediaResource.audioCodec": (), + "QMediaResource.channelCount": (), + "QMediaResource.dataSize": (), + "QMediaResource.isNull": (), + "QMediaResource.language": (), + "QMediaResource.mimeType": (), + "QMediaResource.request": (), + "QMediaResource.resolution": (), + "QMediaResource.sampleRate": (), + "QMediaResource.setAudioBitRate": ('int',), + "QMediaResource.setAudioCodec": ('str',), + "QMediaResource.setChannelCount": ('int',), + "QMediaResource.setDataSize": ('int',), + "QMediaResource.setLanguage": ('str',), + "QMediaResource.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QMediaResource.setSampleRate": ('int',), + "QMediaResource.setVideoBitRate": ('int',), + "QMediaResource.setVideoCodec": ('str',), + "QMediaResource.url": (), + "QMediaResource.videoBitRate": (), + "QMediaResource.videoCodec": (), + + # class PySide2.QtMultimedia.QMediaTimeRange: + "QMediaTimeRange.__init__": [(), ('PySide2.QtMultimedia.QMediaTimeInterval',), ('PySide2.QtMultimedia.QMediaTimeRange',), ('int', 'int')], + "QMediaTimeRange.__copy__": (), + "QMediaTimeRange.addInterval": ('int', 'int'), + "QMediaTimeRange.addTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + "QMediaTimeRange.clear": (), + "QMediaTimeRange.contains": ('int',), + "QMediaTimeRange.earliestTime": (), + "QMediaTimeRange.isContinuous": (), + "QMediaTimeRange.isEmpty": (), + "QMediaTimeRange.latestTime": (), + "QMediaTimeRange.removeInterval": ('int', 'int'), + "QMediaTimeRange.removeTimeRange": ('PySide2.QtMultimedia.QMediaTimeRange',), + + # class PySide2.QtMultimedia.QMultimedia: + + # class PySide2.QtMultimedia.QRadioData: + "QRadioData.__init__": ('PySide2.QtMultimedia.QMediaObject', 'PySide2.QtCore.QObject'), + "QRadioData.availability": (), + "QRadioData.errorString": (), + "QRadioData.isAlternativeFrequenciesEnabled": (), + "QRadioData.mediaObject": (), + "QRadioData.programType": (), + "QRadioData.programTypeName": (), + "QRadioData.radioText": (), + "QRadioData.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioData.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QRadioData.stationId": (), + "QRadioData.stationName": (), + + # class PySide2.QtMultimedia.QRadioDataControl: + "QRadioDataControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioDataControl.errorString": (), + "QRadioDataControl.isAlternativeFrequenciesEnabled": (), + "QRadioDataControl.programType": (), + "QRadioDataControl.programTypeName": (), + "QRadioDataControl.radioText": (), + "QRadioDataControl.setAlternativeFrequenciesEnabled": ('bool',), + "QRadioDataControl.stationId": (), + "QRadioDataControl.stationName": (), + + # class PySide2.QtMultimedia.QRadioTuner: + "QRadioTuner.__init__": ('PySide2.QtCore.QObject',), + "QRadioTuner.availability": (), + "QRadioTuner.band": (), + "QRadioTuner.cancelSearch": (), + "QRadioTuner.errorString": (), + "QRadioTuner.frequency": (), + "QRadioTuner.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isAntennaConnected": (), + "QRadioTuner.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.isMuted": (), + "QRadioTuner.isSearching": (), + "QRadioTuner.isStereo": (), + "QRadioTuner.radioData": (), + "QRadioTuner.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTuner.searchBackward": (), + "QRadioTuner.searchForward": (), + "QRadioTuner.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTuner.setFrequency": ('int',), + "QRadioTuner.setMuted": ('bool',), + "QRadioTuner.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTuner.setVolume": ('int',), + "QRadioTuner.signalStrength": (), + "QRadioTuner.start": (), + "QRadioTuner.state": (), + "QRadioTuner.stereoMode": (), + "QRadioTuner.stop": (), + "QRadioTuner.volume": (), + + # class PySide2.QtMultimedia.QRadioTunerControl: + "QRadioTunerControl.__init__": ('PySide2.QtCore.QObject',), + "QRadioTunerControl.band": (), + "QRadioTunerControl.cancelSearch": (), + "QRadioTunerControl.errorString": (), + "QRadioTunerControl.frequency": (), + "QRadioTunerControl.frequencyRange": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.frequencyStep": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isAntennaConnected": (), + "QRadioTunerControl.isBandSupported": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.isMuted": (), + "QRadioTunerControl.isSearching": (), + "QRadioTunerControl.isStereo": (), + "QRadioTunerControl.searchAllStations": ('PySide2.QtMultimedia.QRadioTuner.SearchMode',), + "QRadioTunerControl.searchBackward": (), + "QRadioTunerControl.searchForward": (), + "QRadioTunerControl.setBand": ('PySide2.QtMultimedia.QRadioTuner.Band',), + "QRadioTunerControl.setFrequency": ('int',), + "QRadioTunerControl.setMuted": ('bool',), + "QRadioTunerControl.setStereoMode": ('PySide2.QtMultimedia.QRadioTuner.StereoMode',), + "QRadioTunerControl.setVolume": ('int',), + "QRadioTunerControl.signalStrength": (), + "QRadioTunerControl.start": (), + "QRadioTunerControl.state": (), + "QRadioTunerControl.stereoMode": (), + "QRadioTunerControl.stop": (), + "QRadioTunerControl.volume": (), + + # class PySide2.QtMultimedia.QSound: + "QSound.__init__": ('str', 'PySide2.QtCore.QObject'), + "QSound.fileName": (), + "QSound.isFinished": (), + "QSound.loops": (), + "QSound.loopsRemaining": (), + "QSound.play": [(), ('str',)], + "QSound.setLoops": ('int',), + "QSound.stop": (), + + # class PySide2.QtMultimedia.QSoundEffect: + "QSoundEffect.__init__": ('PySide2.QtCore.QObject',), + "QSoundEffect.category": (), + "QSoundEffect.isLoaded": (), + "QSoundEffect.isMuted": (), + "QSoundEffect.isPlaying": (), + "QSoundEffect.loopCount": (), + "QSoundEffect.loopsRemaining": (), + "QSoundEffect.play": (), + "QSoundEffect.setCategory": ('str',), + "QSoundEffect.setLoopCount": ('int',), + "QSoundEffect.setMuted": ('bool',), + "QSoundEffect.setSource": ('PySide2.QtCore.QUrl',), + "QSoundEffect.setVolume": ('float',), + "QSoundEffect.source": (), + "QSoundEffect.status": (), + "QSoundEffect.stop": (), + "QSoundEffect.supportedMimeTypes": (), + "QSoundEffect.volume": (), + + # class PySide2.QtMultimedia.QVideoDeviceSelectorControl: + "QVideoDeviceSelectorControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoDeviceSelectorControl.defaultDevice": (), + "QVideoDeviceSelectorControl.deviceCount": (), + "QVideoDeviceSelectorControl.deviceDescription": ('int',), + "QVideoDeviceSelectorControl.deviceName": ('int',), + "QVideoDeviceSelectorControl.selectedDevice": (), + "QVideoDeviceSelectorControl.setSelectedDevice": ('int',), + + # class PySide2.QtMultimedia.QVideoEncoderSettings: + "QVideoEncoderSettings.__init__": [(), ('PySide2.QtMultimedia.QVideoEncoderSettings',)], + "QVideoEncoderSettings.__copy__": (), + "QVideoEncoderSettings.bitRate": (), + "QVideoEncoderSettings.codec": (), + "QVideoEncoderSettings.encodingMode": (), + "QVideoEncoderSettings.encodingOption": ('str',), + "QVideoEncoderSettings.encodingOptions": (), + "QVideoEncoderSettings.frameRate": (), + "QVideoEncoderSettings.isNull": (), + "QVideoEncoderSettings.quality": (), + "QVideoEncoderSettings.resolution": (), + "QVideoEncoderSettings.setBitRate": ('int',), + "QVideoEncoderSettings.setCodec": ('str',), + "QVideoEncoderSettings.setEncodingMode": ('PySide2.QtMultimedia.QMultimedia.EncodingMode',), + "QVideoEncoderSettings.setEncodingOption": ('str', 'Any'), + "QVideoEncoderSettings.setEncodingOptions": ('dict',), + "QVideoEncoderSettings.setFrameRate": ('float',), + "QVideoEncoderSettings.setQuality": ('PySide2.QtMultimedia.QMultimedia.EncodingQuality',), + "QVideoEncoderSettings.setResolution": [('PySide2.QtCore.QSize',), ('int', 'int')], + + # class PySide2.QtMultimedia.QVideoEncoderSettingsControl: + "QVideoEncoderSettingsControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoEncoderSettingsControl.setVideoSettings": ('PySide2.QtMultimedia.QVideoEncoderSettings',), + "QVideoEncoderSettingsControl.supportedVideoCodecs": (), + "QVideoEncoderSettingsControl.videoCodecDescription": ('str',), + "QVideoEncoderSettingsControl.videoSettings": (), + + # class PySide2.QtMultimedia.QVideoFilterRunnable: + "QVideoFilterRunnable.__init__": (), + "QVideoFilterRunnable.run": ('PySide2.QtMultimedia.QVideoFrame', 'PySide2.QtMultimedia.QVideoSurfaceFormat', 'RunFlags'), + + # class PySide2.QtMultimedia.QVideoFrame: + "QVideoFrame.__init__": [(), ('PySide2.QtGui.QImage',), ('PySide2.QtMultimedia.QAbstractVideoBuffer', 'PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat'), ('PySide2.QtMultimedia.QVideoFrame',), ('int', 'PySide2.QtCore.QSize', 'int', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat')], + "QVideoFrame.__copy__": (), + "QVideoFrame.availableMetaData": (), + "QVideoFrame.bits": (), + "QVideoFrame.bytesPerLine": [(), ('int',)], + "QVideoFrame.endTime": (), + "QVideoFrame.fieldType": (), + "QVideoFrame.handle": (), + "QVideoFrame.handleType": (), + "QVideoFrame.height": (), + "QVideoFrame.imageFormatFromPixelFormat": ('PySide2.QtMultimedia.QVideoFrame.PixelFormat',), + "QVideoFrame.isMapped": (), + "QVideoFrame.isReadable": (), + "QVideoFrame.isValid": (), + "QVideoFrame.isWritable": (), + "QVideoFrame.map": ('PySide2.QtMultimedia.QAbstractVideoBuffer.MapMode',), + "QVideoFrame.mapMode": (), + "QVideoFrame.mappedBytes": (), + "QVideoFrame.metaData": ('str',), + "QVideoFrame.pixelFormat": (), + "QVideoFrame.pixelFormatFromImageFormat": ('PySide2.QtGui.QImage.Format',), + "QVideoFrame.planeCount": (), + "QVideoFrame.setEndTime": ('int',), + "QVideoFrame.setFieldType": ('PySide2.QtMultimedia.QVideoFrame.FieldType',), + "QVideoFrame.setMetaData": ('str', 'Any'), + "QVideoFrame.setStartTime": ('int',), + "QVideoFrame.size": (), + "QVideoFrame.startTime": (), + "QVideoFrame.unmap": (), + "QVideoFrame.width": (), + + # class PySide2.QtMultimedia.QVideoProbe: + "QVideoProbe.__init__": ('PySide2.QtCore.QObject',), + "QVideoProbe.isActive": (), + "QVideoProbe.setSource": [('PySide2.QtMultimedia.QMediaObject',), ('PySide2.QtMultimedia.QMediaRecorder',)], + + # class PySide2.QtMultimedia.QVideoRendererControl: + "QVideoRendererControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoRendererControl.setSurface": ('PySide2.QtMultimedia.QAbstractVideoSurface',), + "QVideoRendererControl.surface": (), + + # class PySide2.QtMultimedia.QVideoSurfaceFormat: + "QVideoSurfaceFormat.__init__": [(), ('PySide2.QtCore.QSize', 'PySide2.QtMultimedia.QVideoFrame.PixelFormat', 'PySide2.QtMultimedia.QAbstractVideoBuffer.HandleType'), ('PySide2.QtMultimedia.QVideoSurfaceFormat',)], + "QVideoSurfaceFormat.__copy__": (), + "QVideoSurfaceFormat.frameHeight": (), + "QVideoSurfaceFormat.frameRate": (), + "QVideoSurfaceFormat.frameSize": (), + "QVideoSurfaceFormat.frameWidth": (), + "QVideoSurfaceFormat.handleType": (), + "QVideoSurfaceFormat.isValid": (), + "QVideoSurfaceFormat.pixelAspectRatio": (), + "QVideoSurfaceFormat.pixelFormat": (), + "QVideoSurfaceFormat.property": ('str',), + "QVideoSurfaceFormat.propertyNames": (), + "QVideoSurfaceFormat.scanLineDirection": (), + "QVideoSurfaceFormat.setFrameRate": ('float',), + "QVideoSurfaceFormat.setFrameSize": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setPixelAspectRatio": [('PySide2.QtCore.QSize',), ('int', 'int')], + "QVideoSurfaceFormat.setProperty": ('str', 'Any'), + "QVideoSurfaceFormat.setScanLineDirection": ('PySide2.QtMultimedia.QVideoSurfaceFormat.Direction',), + "QVideoSurfaceFormat.setViewport": ('PySide2.QtCore.QRect',), + "QVideoSurfaceFormat.setYCbCrColorSpace": ('PySide2.QtMultimedia.QVideoSurfaceFormat.YCbCrColorSpace',), + "QVideoSurfaceFormat.sizeHint": (), + "QVideoSurfaceFormat.viewport": (), + "QVideoSurfaceFormat.yCbCrColorSpace": (), + + # class PySide2.QtMultimedia.QVideoWindowControl: + "QVideoWindowControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWindowControl.aspectRatioMode": (), + "QVideoWindowControl.brightness": (), + "QVideoWindowControl.contrast": (), + "QVideoWindowControl.displayRect": (), + "QVideoWindowControl.hue": (), + "QVideoWindowControl.isFullScreen": (), + "QVideoWindowControl.nativeSize": (), + "QVideoWindowControl.repaint": (), + "QVideoWindowControl.saturation": (), + "QVideoWindowControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWindowControl.setBrightness": ('int',), + "QVideoWindowControl.setContrast": ('int',), + "QVideoWindowControl.setDisplayRect": ('PySide2.QtCore.QRect',), + "QVideoWindowControl.setFullScreen": ('bool',), + "QVideoWindowControl.setHue": ('int',), + "QVideoWindowControl.setSaturation": ('int',), + "QVideoWindowControl.setWinId": ('int',), + "QVideoWindowControl.winId": (), + }) + +# Module PySide2.QtMultimediaWidgets +if "PySide2.QtMultimediaWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtMultimediaWidgets.QCameraViewfinder: + "QCameraViewfinder.__init__": ('PySide2.QtWidgets.QWidget',), + "QCameraViewfinder.mediaObject": (), + "QCameraViewfinder.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + + # class PySide2.QtMultimediaWidgets.QGraphicsVideoItem: + "QGraphicsVideoItem.__init__": ('PySide2.QtWidgets.QGraphicsItem',), + "QGraphicsVideoItem.aspectRatioMode": (), + "QGraphicsVideoItem.boundingRect": (), + "QGraphicsVideoItem.itemChange": ('PySide2.QtWidgets.QGraphicsItem.GraphicsItemChange', 'Any'), + "QGraphicsVideoItem.mediaObject": (), + "QGraphicsVideoItem.nativeSize": (), + "QGraphicsVideoItem.offset": (), + "QGraphicsVideoItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsVideoItem.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QGraphicsVideoItem.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QGraphicsVideoItem.setOffset": ('PySide2.QtCore.QPointF',), + "QGraphicsVideoItem.setSize": ('PySide2.QtCore.QSizeF',), + "QGraphicsVideoItem.size": (), + "QGraphicsVideoItem.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtMultimediaWidgets.QVideoWidget: + "QVideoWidget.__init__": ('PySide2.QtWidgets.QWidget',), + "QVideoWidget.aspectRatioMode": (), + "QVideoWidget.brightness": (), + "QVideoWidget.contrast": (), + "QVideoWidget.event": ('PySide2.QtCore.QEvent',), + "QVideoWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QVideoWidget.hue": (), + "QVideoWidget.mediaObject": (), + "QVideoWidget.moveEvent": ('PySide2.QtGui.QMoveEvent',), + "QVideoWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QVideoWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QVideoWidget.saturation": (), + "QVideoWidget.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidget.setBrightness": ('int',), + "QVideoWidget.setContrast": ('int',), + "QVideoWidget.setFullScreen": ('bool',), + "QVideoWidget.setHue": ('int',), + "QVideoWidget.setMediaObject": ('PySide2.QtMultimedia.QMediaObject',), + "QVideoWidget.setSaturation": ('int',), + "QVideoWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QVideoWidget.sizeHint": (), + + # class PySide2.QtMultimediaWidgets.QVideoWidgetControl: + "QVideoWidgetControl.__init__": ('PySide2.QtCore.QObject',), + "QVideoWidgetControl.aspectRatioMode": (), + "QVideoWidgetControl.brightness": (), + "QVideoWidgetControl.contrast": (), + "QVideoWidgetControl.hue": (), + "QVideoWidgetControl.isFullScreen": (), + "QVideoWidgetControl.saturation": (), + "QVideoWidgetControl.setAspectRatioMode": ('PySide2.QtCore.Qt.AspectRatioMode',), + "QVideoWidgetControl.setBrightness": ('int',), + "QVideoWidgetControl.setContrast": ('int',), + "QVideoWidgetControl.setFullScreen": ('bool',), + "QVideoWidgetControl.setHue": ('int',), + "QVideoWidgetControl.setSaturation": ('int',), + "QVideoWidgetControl.videoWidget": (), + }) + +# Module PySide2.QtOpenGL +if "PySide2.QtOpenGL" in sys.modules: + dict.update({ + + # class PySide2.QtOpenGL.QGL: + + # class PySide2.QtOpenGL.QGLBuffer: + "QGLBuffer.__init__": [(), ('PySide2.QtOpenGL.QGLBuffer',), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.allocate": [('int',), ('int', 'int')], + "QGLBuffer.bind": (), + "QGLBuffer.bufferId": (), + "QGLBuffer.create": (), + "QGLBuffer.destroy": (), + "QGLBuffer.isCreated": (), + "QGLBuffer.map": ('PySide2.QtOpenGL.QGLBuffer.Access',), + "QGLBuffer.read": ('int', 'int', 'int'), + "QGLBuffer.release": [(), ('PySide2.QtOpenGL.QGLBuffer.Type',)], + "QGLBuffer.setUsagePattern": ('PySide2.QtOpenGL.QGLBuffer.UsagePattern',), + "QGLBuffer.size": (), + "QGLBuffer.type": (), + "QGLBuffer.unmap": (), + "QGLBuffer.usagePattern": (), + "QGLBuffer.write": ('int', 'int', 'int'), + + # class PySide2.QtOpenGL.QGLColormap: + "QGLColormap.__init__": [(), ('PySide2.QtOpenGL.QGLColormap',)], + "QGLColormap.__copy__": (), + "QGLColormap.entryColor": ('int',), + "QGLColormap.entryRgb": ('int',), + "QGLColormap.find": ('int',), + "QGLColormap.findNearest": ('int',), + "QGLColormap.handle": (), + "QGLColormap.isEmpty": (), + "QGLColormap.setEntry": [('int', 'PySide2.QtGui.QColor'), ('int', 'int')], + "QGLColormap.setHandle": ('int',), + "QGLColormap.size": (), + + # class PySide2.QtOpenGL.QGLContext: + "QGLContext.__init__": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.areSharing": ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtOpenGL.QGLContext'), + "QGLContext.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'BindOptions'), ('str',)], + "QGLContext.chooseContext": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.colorIndex": ('PySide2.QtGui.QColor',), + "QGLContext.contextHandle": (), + "QGLContext.create": ('PySide2.QtOpenGL.QGLContext',), + "QGLContext.currentContext": (), + "QGLContext.deleteTexture": ('int',), + "QGLContext.device": (), + "QGLContext.deviceIsPixmap": (), + "QGLContext.doneCurrent": (), + "QGLContext.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLContext.format": (), + "QGLContext.fromOpenGLContext": ('PySide2.QtGui.QOpenGLContext',), + "QGLContext.initialized": (), + "QGLContext.isSharing": (), + "QGLContext.isValid": (), + "QGLContext.makeCurrent": (), + "QGLContext.moveToThread": ('PySide2.QtCore.QThread',), + "QGLContext.overlayTransparentColor": (), + "QGLContext.requestedFormat": (), + "QGLContext.reset": (), + "QGLContext.setDevice": ('PySide2.QtGui.QPaintDevice',), + "QGLContext.setFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLContext.setInitialized": ('bool',), + "QGLContext.setTextureCacheLimit": ('int',), + "QGLContext.setValid": ('bool',), + "QGLContext.setWindowCreated": ('bool',), + "QGLContext.swapBuffers": (), + "QGLContext.textureCacheLimit": (), + "QGLContext.windowCreated": (), + + # class PySide2.QtOpenGL.QGLFormat: + "QGLFormat.__init__": [(), ('FormatOptions', 'int'), ('PySide2.QtOpenGL.QGLFormat',)], + "QGLFormat.__copy__": (), + "QGLFormat.accum": (), + "QGLFormat.accumBufferSize": (), + "QGLFormat.alpha": (), + "QGLFormat.alphaBufferSize": (), + "QGLFormat.blueBufferSize": (), + "QGLFormat.defaultFormat": (), + "QGLFormat.defaultOverlayFormat": (), + "QGLFormat.depth": (), + "QGLFormat.depthBufferSize": (), + "QGLFormat.directRendering": (), + "QGLFormat.doubleBuffer": (), + "QGLFormat.fromSurfaceFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QGLFormat.greenBufferSize": (), + "QGLFormat.hasOpenGL": (), + "QGLFormat.hasOpenGLOverlays": (), + "QGLFormat.hasOverlay": (), + "QGLFormat.majorVersion": (), + "QGLFormat.minorVersion": (), + "QGLFormat.openGLVersionFlags": (), + "QGLFormat.plane": (), + "QGLFormat.profile": (), + "QGLFormat.redBufferSize": (), + "QGLFormat.rgba": (), + "QGLFormat.sampleBuffers": (), + "QGLFormat.samples": (), + "QGLFormat.setAccum": ('bool',), + "QGLFormat.setAccumBufferSize": ('int',), + "QGLFormat.setAlpha": ('bool',), + "QGLFormat.setAlphaBufferSize": ('int',), + "QGLFormat.setBlueBufferSize": ('int',), + "QGLFormat.setDefaultFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDefaultOverlayFormat": ('PySide2.QtOpenGL.QGLFormat',), + "QGLFormat.setDepth": ('bool',), + "QGLFormat.setDepthBufferSize": ('int',), + "QGLFormat.setDirectRendering": ('bool',), + "QGLFormat.setDoubleBuffer": ('bool',), + "QGLFormat.setGreenBufferSize": ('int',), + "QGLFormat.setOption": ('FormatOptions',), + "QGLFormat.setOverlay": ('bool',), + "QGLFormat.setPlane": ('int',), + "QGLFormat.setProfile": ('PySide2.QtOpenGL.QGLFormat.OpenGLContextProfile',), + "QGLFormat.setRedBufferSize": ('int',), + "QGLFormat.setRgba": ('bool',), + "QGLFormat.setSampleBuffers": ('bool',), + "QGLFormat.setSamples": ('int',), + "QGLFormat.setStencil": ('bool',), + "QGLFormat.setStencilBufferSize": ('int',), + "QGLFormat.setStereo": ('bool',), + "QGLFormat.setSwapInterval": ('int',), + "QGLFormat.setVersion": ('int', 'int'), + "QGLFormat.stencil": (), + "QGLFormat.stencilBufferSize": (), + "QGLFormat.stereo": (), + "QGLFormat.swapInterval": (), + "QGLFormat.testOption": ('FormatOptions',), + "QGLFormat.toSurfaceFormat": ('PySide2.QtOpenGL.QGLFormat',), + + # class PySide2.QtOpenGL.QGLFramebufferObject: + "QGLFramebufferObject.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('PySide2.QtCore.QSize', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObject.Attachment', 'int', 'int'), ('int', 'int', 'PySide2.QtOpenGL.QGLFramebufferObjectFormat'), ('int', 'int', 'int')], + "QGLFramebufferObject.attachment": (), + "QGLFramebufferObject.bind": (), + "QGLFramebufferObject.bindDefault": (), + "QGLFramebufferObject.blitFramebuffer": ('PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'PySide2.QtOpenGL.QGLFramebufferObject', 'PySide2.QtCore.QRect', 'int', 'int'), + "QGLFramebufferObject.devType": (), + "QGLFramebufferObject.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLFramebufferObject.format": (), + "QGLFramebufferObject.handle": (), + "QGLFramebufferObject.hasOpenGLFramebufferBlit": (), + "QGLFramebufferObject.hasOpenGLFramebufferObjects": (), + "QGLFramebufferObject.isBound": (), + "QGLFramebufferObject.isValid": (), + "QGLFramebufferObject.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLFramebufferObject.paintEngine": (), + "QGLFramebufferObject.release": (), + "QGLFramebufferObject.size": (), + "QGLFramebufferObject.texture": (), + "QGLFramebufferObject.toImage": (), + + # class PySide2.QtOpenGL.QGLFramebufferObjectFormat: + "QGLFramebufferObjectFormat.__init__": [(), ('PySide2.QtOpenGL.QGLFramebufferObjectFormat',)], + "QGLFramebufferObjectFormat.__copy__": (), + "QGLFramebufferObjectFormat.attachment": (), + "QGLFramebufferObjectFormat.internalTextureFormat": (), + "QGLFramebufferObjectFormat.mipmap": (), + "QGLFramebufferObjectFormat.samples": (), + "QGLFramebufferObjectFormat.setAttachment": ('PySide2.QtOpenGL.QGLFramebufferObject.Attachment',), + "QGLFramebufferObjectFormat.setInternalTextureFormat": ('int',), + "QGLFramebufferObjectFormat.setMipmap": ('bool',), + "QGLFramebufferObjectFormat.setSamples": ('int',), + "QGLFramebufferObjectFormat.setTextureTarget": ('int',), + "QGLFramebufferObjectFormat.textureTarget": (), + + # class PySide2.QtOpenGL.QGLPixelBuffer: + "QGLPixelBuffer.__init__": [('PySide2.QtCore.QSize', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget'), ('int', 'int', 'PySide2.QtOpenGL.QGLFormat', 'PySide2.QtOpenGL.QGLWidget')], + "QGLPixelBuffer.bindTexture": [('PySide2.QtGui.QImage', 'int'), ('PySide2.QtGui.QPixmap', 'int'), ('str',)], + "QGLPixelBuffer.bindToDynamicTexture": ('int',), + "QGLPixelBuffer.context": (), + "QGLPixelBuffer.deleteTexture": ('int',), + "QGLPixelBuffer.devType": (), + "QGLPixelBuffer.doneCurrent": (), + "QGLPixelBuffer.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLPixelBuffer.format": (), + "QGLPixelBuffer.generateDynamicTexture": (), + "QGLPixelBuffer.handle": (), + "QGLPixelBuffer.hasOpenGLPbuffers": (), + "QGLPixelBuffer.isValid": (), + "QGLPixelBuffer.makeCurrent": (), + "QGLPixelBuffer.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QGLPixelBuffer.paintEngine": (), + "QGLPixelBuffer.releaseFromDynamicTexture": (), + "QGLPixelBuffer.size": (), + "QGLPixelBuffer.toImage": (), + "QGLPixelBuffer.updateDynamicTexture": ('int',), + + # class PySide2.QtOpenGL.QGLShader: + "QGLShader.__init__": [('ShaderType', 'PySide2.QtCore.QObject'), ('ShaderType', 'PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShader.compileSourceCode": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShader.compileSourceFile": ('str',), + "QGLShader.hasOpenGLShaders": ('ShaderType', 'PySide2.QtOpenGL.QGLContext'), + "QGLShader.isCompiled": (), + "QGLShader.log": (), + "QGLShader.shaderId": (), + "QGLShader.shaderType": (), + "QGLShader.sourceCode": (), + + # class PySide2.QtOpenGL.QGLShaderProgram: + "QGLShaderProgram.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtOpenGL.QGLContext', 'PySide2.QtCore.QObject')], + "QGLShaderProgram.addShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.addShaderFromSourceCode": [('ShaderType', 'PySide2.QtCore.QByteArray'), ('ShaderType', 'str')], + "QGLShaderProgram.addShaderFromSourceFile": ('ShaderType', 'str'), + "QGLShaderProgram.attributeLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + "QGLShaderProgram.bind": (), + "QGLShaderProgram.bindAttributeLocation": [('PySide2.QtCore.QByteArray', 'int'), ('str', 'int')], + "QGLShaderProgram.disableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.enableAttributeArray": [('int',), ('str',)], + "QGLShaderProgram.geometryInputType": (), + "QGLShaderProgram.geometryOutputType": (), + "QGLShaderProgram.geometryOutputVertexCount": (), + "QGLShaderProgram.hasOpenGLShaderPrograms": ('PySide2.QtOpenGL.QGLContext',), + "QGLShaderProgram.isLinked": (), + "QGLShaderProgram.link": (), + "QGLShaderProgram.log": (), + "QGLShaderProgram.maxGeometryOutputVertices": (), + "QGLShaderProgram.programId": (), + "QGLShaderProgram.release": (), + "QGLShaderProgram.removeAllShaders": (), + "QGLShaderProgram.removeShader": ('PySide2.QtOpenGL.QGLShader',), + "QGLShaderProgram.setAttributeArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setAttributeArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setAttributeArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setAttributeBuffer": [('int', 'int', 'int', 'int', 'int'), ('str', 'int', 'int', 'int', 'int')], + "QGLShaderProgram.setAttributeValue": [('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float')], + "QGLShaderProgram.setGeometryInputType": ('int',), + "QGLShaderProgram.setGeometryOutputType": ('int',), + "QGLShaderProgram.setGeometryOutputVertexCount": ('int',), + "QGLShaderProgram.setUniformValue": [('int', 'PySide2.QtCore.QPoint'), ('int', 'PySide2.QtCore.QPointF'), ('int', 'PySide2.QtCore.QSize'), ('int', 'PySide2.QtCore.QSizeF'), ('int', 'PySide2.QtGui.QColor'), ('int', 'PySide2.QtGui.QMatrix2x2'), ('int', 'PySide2.QtGui.QMatrix2x3'), ('int', 'PySide2.QtGui.QMatrix2x4'), ('int', 'PySide2.QtGui.QMatrix3x2'), ('int', 'PySide2.QtGui.QMatrix3x3'), ('int', 'PySide2.QtGui.QMatrix3x4'), ('int', 'PySide2.QtGui.QMatrix4x2'), ('int', 'PySide2.QtGui.QMatrix4x3'), ('int', 'PySide2.QtGui.QMatrix4x4'), ('int', 'PySide2.QtGui.QTransform'), ('int', 'PySide2.QtGui.QVector2D'), ('int', 'PySide2.QtGui.QVector3D'), ('int', 'PySide2.QtGui.QVector4D'), ('int', 'float'), ('int', 'float', 'float'), ('int', 'float', 'float', 'float'), ('int', 'float', 'float', 'float', 'float'), ('int', 'int'), ('str', 'PySide2.QtCore.QPoint'), ('str', 'PySide2.QtCore.QPointF'), ('str', 'PySide2.QtCore.QSize'), ('str', 'PySide2.QtCore.QSizeF'), ('str', 'PySide2.QtGui.QColor'), ('str', 'PySide2.QtGui.QMatrix2x2'), ('str', 'PySide2.QtGui.QMatrix2x3'), ('str', 'PySide2.QtGui.QMatrix2x4'), ('str', 'PySide2.QtGui.QMatrix3x2'), ('str', 'PySide2.QtGui.QMatrix3x3'), ('str', 'PySide2.QtGui.QMatrix3x4'), ('str', 'PySide2.QtGui.QMatrix4x2'), ('str', 'PySide2.QtGui.QMatrix4x3'), ('str', 'PySide2.QtGui.QMatrix4x4'), ('str', 'PySide2.QtGui.QTransform'), ('str', 'PySide2.QtGui.QVector2D'), ('str', 'PySide2.QtGui.QVector3D'), ('str', 'PySide2.QtGui.QVector4D'), ('str', 'float'), ('str', 'float', 'float'), ('str', 'float', 'float', 'float'), ('str', 'float', 'float', 'float', 'float'), ('str', 'int')], + "QGLShaderProgram.setUniformValueArray2D": [('int', 'PySide2.QtGui.QVector2D', 'int'), ('str', 'PySide2.QtGui.QVector2D', 'int')], + "QGLShaderProgram.setUniformValueArray2x2": [('int', 'PySide2.QtGui.QMatrix2x2', 'int'), ('str', 'PySide2.QtGui.QMatrix2x2', 'int')], + "QGLShaderProgram.setUniformValueArray2x3": [('int', 'PySide2.QtGui.QMatrix2x3', 'int'), ('str', 'PySide2.QtGui.QMatrix2x3', 'int')], + "QGLShaderProgram.setUniformValueArray2x4": [('int', 'PySide2.QtGui.QMatrix2x4', 'int'), ('str', 'PySide2.QtGui.QMatrix2x4', 'int')], + "QGLShaderProgram.setUniformValueArray3D": [('int', 'PySide2.QtGui.QVector3D', 'int'), ('str', 'PySide2.QtGui.QVector3D', 'int')], + "QGLShaderProgram.setUniformValueArray3x2": [('int', 'PySide2.QtGui.QMatrix3x2', 'int'), ('str', 'PySide2.QtGui.QMatrix3x2', 'int')], + "QGLShaderProgram.setUniformValueArray3x3": [('int', 'PySide2.QtGui.QMatrix3x3', 'int'), ('str', 'PySide2.QtGui.QMatrix3x3', 'int')], + "QGLShaderProgram.setUniformValueArray3x4": [('int', 'PySide2.QtGui.QMatrix3x4', 'int'), ('str', 'PySide2.QtGui.QMatrix3x4', 'int')], + "QGLShaderProgram.setUniformValueArray4D": [('int', 'PySide2.QtGui.QVector4D', 'int'), ('str', 'PySide2.QtGui.QVector4D', 'int')], + "QGLShaderProgram.setUniformValueArray4x2": [('int', 'PySide2.QtGui.QMatrix4x2', 'int'), ('str', 'PySide2.QtGui.QMatrix4x2', 'int')], + "QGLShaderProgram.setUniformValueArray4x3": [('int', 'PySide2.QtGui.QMatrix4x3', 'int'), ('str', 'PySide2.QtGui.QMatrix4x3', 'int')], + "QGLShaderProgram.setUniformValueArray4x4": [('int', 'PySide2.QtGui.QMatrix4x4', 'int'), ('str', 'PySide2.QtGui.QMatrix4x4', 'int')], + "QGLShaderProgram.setUniformValueArrayInt": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.setUniformValueArrayUint": [('int', 'int', 'int'), ('str', 'int', 'int')], + "QGLShaderProgram.shaders": (), + "QGLShaderProgram.uniformLocation": [('PySide2.QtCore.QByteArray',), ('str',)], + + # class PySide2.QtOpenGL.QGLWidget: + "QGLWidget.__init__": [('PySide2.QtOpenGL.QGLContext', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags'), ('PySide2.QtOpenGL.QGLFormat', 'PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags'), ('PySide2.QtWidgets.QWidget', 'PySide2.QtOpenGL.QGLWidget', 'WindowFlags')], + "QGLWidget.autoBufferSwap": (), + "QGLWidget.bindTexture": [('PySide2.QtGui.QImage', 'int', 'int'), ('PySide2.QtGui.QImage', 'int', 'int', 'BindOptions'), ('PySide2.QtGui.QPixmap', 'int', 'int'), ('PySide2.QtGui.QPixmap', 'int', 'int', 'BindOptions'), ('str',)], + "QGLWidget.colormap": (), + "QGLWidget.context": (), + "QGLWidget.convertToGLFormat": ('PySide2.QtGui.QImage',), + "QGLWidget.deleteTexture": ('int',), + "QGLWidget.doneCurrent": (), + "QGLWidget.doubleBuffer": (), + "QGLWidget.drawTexture": [('PySide2.QtCore.QPointF', 'int', 'int'), ('PySide2.QtCore.QRectF', 'int', 'int')], + "QGLWidget.event": ('PySide2.QtCore.QEvent',), + "QGLWidget.format": (), + "QGLWidget.glDraw": (), + "QGLWidget.glInit": (), + "QGLWidget.grabFrameBuffer": ('bool',), + "QGLWidget.initializeGL": (), + "QGLWidget.initializeOverlayGL": (), + "QGLWidget.isSharing": (), + "QGLWidget.isValid": (), + "QGLWidget.makeCurrent": (), + "QGLWidget.makeOverlayCurrent": (), + "QGLWidget.overlayContext": (), + "QGLWidget.paintEngine": (), + "QGLWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QGLWidget.paintGL": (), + "QGLWidget.paintOverlayGL": (), + "QGLWidget.qglClearColor": ('PySide2.QtGui.QColor',), + "QGLWidget.qglColor": ('PySide2.QtGui.QColor',), + "QGLWidget.renderPixmap": ('int', 'int', 'bool'), + "QGLWidget.renderText": [('float', 'float', 'float', 'str', 'PySide2.QtGui.QFont'), ('int', 'int', 'str', 'PySide2.QtGui.QFont')], + "QGLWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QGLWidget.resizeGL": ('int', 'int'), + "QGLWidget.resizeOverlayGL": ('int', 'int'), + "QGLWidget.setAutoBufferSwap": ('bool',), + "QGLWidget.setColormap": ('PySide2.QtOpenGL.QGLColormap',), + "QGLWidget.swapBuffers": (), + "QGLWidget.updateGL": (), + "QGLWidget.updateOverlayGL": (), + }) + +# Module PySide2.QtQml +if "PySide2.QtQml" in sys.modules: + dict.update({ + + # class PySide2.QtQml.ListProperty: + + # class PySide2.QtQml.QJSEngine: + "QJSEngine.__init__": [(), ('PySide2.QtCore.QObject',)], + "QJSEngine.collectGarbage": (), + "QJSEngine.evaluate": ('str', 'str', 'int'), + "QJSEngine.globalObject": (), + "QJSEngine.installExtensions": ('Extensions', 'PySide2.QtQml.QJSValue'), + "QJSEngine.installTranslatorFunctions": ('PySide2.QtQml.QJSValue',), + "QJSEngine.newArray": ('int',), + "QJSEngine.newObject": (), + "QJSEngine.newQMetaObject": ('PySide2.QtCore.QMetaObject',), + "QJSEngine.newQObject": ('PySide2.QtCore.QObject',), + "QJSEngine.toScriptValue": ('Any',), + + # class PySide2.QtQml.QJSValue: + "QJSValue.__init__": [('PySide2.QtQml.QJSValue',), ('PySide2.QtQml.QJSValue.SpecialValue',), ('bool',), ('float',), ('int',), ('str',)], + "QJSValue.__copy__": (), + "QJSValue.call": ('list',), + "QJSValue.callAsConstructor": ('list',), + "QJSValue.callWithInstance": ('PySide2.QtQml.QJSValue', 'list'), + "QJSValue.deleteProperty": ('str',), + "QJSValue.engine": (), + "QJSValue.equals": ('PySide2.QtQml.QJSValue',), + "QJSValue.hasOwnProperty": ('str',), + "QJSValue.hasProperty": ('str',), + "QJSValue.isArray": (), + "QJSValue.isBool": (), + "QJSValue.isCallable": (), + "QJSValue.isDate": (), + "QJSValue.isError": (), + "QJSValue.isNull": (), + "QJSValue.isNumber": (), + "QJSValue.isObject": (), + "QJSValue.isQMetaObject": (), + "QJSValue.isQObject": (), + "QJSValue.isRegExp": (), + "QJSValue.isString": (), + "QJSValue.isUndefined": (), + "QJSValue.isVariant": (), + "QJSValue.property": [('int',), ('str',)], + "QJSValue.prototype": (), + "QJSValue.setProperty": [('int', 'PySide2.QtQml.QJSValue'), ('str', 'PySide2.QtQml.QJSValue')], + "QJSValue.setPrototype": ('PySide2.QtQml.QJSValue',), + "QJSValue.strictlyEquals": ('PySide2.QtQml.QJSValue',), + "QJSValue.toBool": (), + "QJSValue.toDateTime": (), + "QJSValue.toInt": (), + "QJSValue.toNumber": (), + "QJSValue.toQMetaObject": (), + "QJSValue.toQObject": (), + "QJSValue.toString": (), + "QJSValue.toUInt": (), + "QJSValue.toVariant": (), + + # class PySide2.QtQml.QJSValueIterator: + "QJSValueIterator.__init__": ('PySide2.QtQml.QJSValue',), + "QJSValueIterator.hasNext": (), + "QJSValueIterator.name": (), + "QJSValueIterator.value": (), + + # class PySide2.QtQml.QQmlAbstractUrlInterceptor: + "QQmlAbstractUrlInterceptor.__init__": (), + "QQmlAbstractUrlInterceptor.intercept": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlAbstractUrlInterceptor.DataType'), + + # class PySide2.QtQml.QQmlApplicationEngine: + "QQmlApplicationEngine.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QQmlApplicationEngine.load": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlApplicationEngine.loadData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlApplicationEngine.rootObjects": (), + + # class PySide2.QtQml.QQmlComponent: + "QQmlComponent.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'str', 'PySide2.QtQml.QQmlComponent.CompilationMode', 'PySide2.QtCore.QObject')], + "QQmlComponent.beginCreate": ('PySide2.QtQml.QQmlContext',), + "QQmlComponent.completeCreate": (), + "QQmlComponent.create": [('PySide2.QtQml.QQmlContext',), ('PySide2.QtQml.QQmlIncubator', 'PySide2.QtQml.QQmlContext', 'PySide2.QtQml.QQmlContext')], + "QQmlComponent.creationContext": (), + "QQmlComponent.errorString": (), + "QQmlComponent.errors": (), + "QQmlComponent.isError": (), + "QQmlComponent.isLoading": (), + "QQmlComponent.isNull": (), + "QQmlComponent.isReady": (), + "QQmlComponent.loadUrl": [('PySide2.QtCore.QUrl',), ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent.CompilationMode')], + "QQmlComponent.progress": (), + "QQmlComponent.setData": ('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QUrl'), + "QQmlComponent.status": (), + "QQmlComponent.url": (), + + # class PySide2.QtQml.QQmlContext: + "QQmlContext.__init__": [('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject')], + "QQmlContext.baseUrl": (), + "QQmlContext.contextObject": (), + "QQmlContext.contextProperty": ('str',), + "QQmlContext.engine": (), + "QQmlContext.isValid": (), + "QQmlContext.nameForObject": ('PySide2.QtCore.QObject',), + "QQmlContext.parentContext": (), + "QQmlContext.resolvedUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlContext.setContextObject": ('PySide2.QtCore.QObject',), + "QQmlContext.setContextProperty": [('str', 'Any'), ('str', 'PySide2.QtCore.QObject')], + + # class PySide2.QtQml.QQmlDebuggingEnabler: + "QQmlDebuggingEnabler.__init__": ('bool',), + "QQmlDebuggingEnabler.connectToLocalDebugger": ('str', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode'), + "QQmlDebuggingEnabler.debuggerServices": (), + "QQmlDebuggingEnabler.inspectorServices": (), + "QQmlDebuggingEnabler.nativeDebuggerServices": (), + "QQmlDebuggingEnabler.profilerServices": (), + "QQmlDebuggingEnabler.setServices": ('List[str]',), + "QQmlDebuggingEnabler.startDebugConnector": ('str', 'dict'), + "QQmlDebuggingEnabler.startTcpDebugServer": ('int', 'PySide2.QtQml.QQmlDebuggingEnabler.StartMode', 'str'), + + # class PySide2.QtQml.QQmlEngine: + "QQmlEngine.__init__": ('PySide2.QtCore.QObject',), + "QQmlEngine.addImageProvider": ('str', 'PySide2.QtQml.QQmlImageProviderBase'), + "QQmlEngine.addImportPath": ('str',), + "QQmlEngine.addNamedBundle": ('str', 'str'), + "QQmlEngine.addPluginPath": ('str',), + "QQmlEngine.baseUrl": (), + "QQmlEngine.clearComponentCache": (), + "QQmlEngine.contextForObject": ('PySide2.QtCore.QObject',), + "QQmlEngine.event": ('PySide2.QtCore.QEvent',), + "QQmlEngine.imageProvider": ('str',), + "QQmlEngine.importPathList": (), + "QQmlEngine.importPlugin": ('str', 'str', 'list'), + "QQmlEngine.incubationController": (), + "QQmlEngine.networkAccessManager": (), + "QQmlEngine.networkAccessManagerFactory": (), + "QQmlEngine.objectOwnership": ('PySide2.QtCore.QObject',), + "QQmlEngine.offlineStorageDatabaseFilePath": ('str',), + "QQmlEngine.offlineStoragePath": (), + "QQmlEngine.outputWarningsToStandardError": (), + "QQmlEngine.pluginPathList": (), + "QQmlEngine.removeImageProvider": ('str',), + "QQmlEngine.rootContext": (), + "QQmlEngine.setBaseUrl": ('PySide2.QtCore.QUrl',), + "QQmlEngine.setContextForObject": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), + "QQmlEngine.setImportPathList": ('List[str]',), + "QQmlEngine.setIncubationController": ('PySide2.QtQml.QQmlIncubationController',), + "QQmlEngine.setNetworkAccessManagerFactory": ('PySide2.QtQml.QQmlNetworkAccessManagerFactory',), + "QQmlEngine.setObjectOwnership": ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine.ObjectOwnership'), + "QQmlEngine.setOfflineStoragePath": ('str',), + "QQmlEngine.setOutputWarningsToStandardError": ('bool',), + "QQmlEngine.setPluginPathList": ('List[str]',), + "QQmlEngine.setUrlInterceptor": ('PySide2.QtQml.QQmlAbstractUrlInterceptor',), + "QQmlEngine.trimComponentCache": (), + "QQmlEngine.urlInterceptor": (), + + # class PySide2.QtQml.QQmlError: + "QQmlError.__init__": [(), ('PySide2.QtQml.QQmlError',)], + "QQmlError.__copy__": (), + "QQmlError.column": (), + "QQmlError.description": (), + "QQmlError.isValid": (), + "QQmlError.line": (), + "QQmlError.messageType": (), + "QQmlError.object": (), + "QQmlError.setColumn": ('int',), + "QQmlError.setDescription": ('str',), + "QQmlError.setLine": ('int',), + "QQmlError.setMessageType": ('PySide2.QtCore.QtMsgType',), + "QQmlError.setObject": ('PySide2.QtCore.QObject',), + "QQmlError.setUrl": ('PySide2.QtCore.QUrl',), + "QQmlError.toString": (), + "QQmlError.url": (), + + # class PySide2.QtQml.QQmlExpression: + "QQmlExpression.__init__": [(), ('PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'str', 'PySide2.QtCore.QObject'), ('PySide2.QtQml.QQmlScriptString', 'PySide2.QtQml.QQmlContext', 'PySide2.QtCore.QObject', 'PySide2.QtCore.QObject')], + "QQmlExpression.clearError": (), + "QQmlExpression.columnNumber": (), + "QQmlExpression.context": (), + "QQmlExpression.engine": (), + "QQmlExpression.error": (), + "QQmlExpression.evaluate": ('bool',), + "QQmlExpression.expression": (), + "QQmlExpression.hasError": (), + "QQmlExpression.lineNumber": (), + "QQmlExpression.notifyOnValueChanged": (), + "QQmlExpression.scopeObject": (), + "QQmlExpression.setExpression": ('str',), + "QQmlExpression.setNotifyOnValueChanged": ('bool',), + "QQmlExpression.setSourceLocation": ('str', 'int', 'int'), + "QQmlExpression.sourceFile": (), + + # class PySide2.QtQml.QQmlExtensionInterface: + "QQmlExtensionInterface.__init__": (), + "QQmlExtensionInterface.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + + # class PySide2.QtQml.QQmlExtensionPlugin: + "QQmlExtensionPlugin.__init__": ('PySide2.QtCore.QObject',), + "QQmlExtensionPlugin.baseUrl": (), + "QQmlExtensionPlugin.initializeEngine": ('PySide2.QtQml.QQmlEngine', 'str'), + "QQmlExtensionPlugin.registerTypes": ('str',), + + # class PySide2.QtQml.QQmlFile: + "QQmlFile.__init__": [(), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.clear": [(), ('PySide2.QtCore.QObject',)], + "QQmlFile.connectDownloadProgress": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.connectFinished": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlFile.data": (), + "QQmlFile.dataByteArray": (), + "QQmlFile.error": (), + "QQmlFile.isError": (), + "QQmlFile.isLoading": (), + "QQmlFile.isLocalFile": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.isNull": (), + "QQmlFile.isReady": (), + "QQmlFile.isSynchronous": [('PySide2.QtCore.QUrl',), ('str',)], + "QQmlFile.load": [('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QUrl'), ('PySide2.QtQml.QQmlEngine', 'str')], + "QQmlFile.size": (), + "QQmlFile.status": (), + "QQmlFile.url": (), + "QQmlFile.urlToLocalFileOrQrc": [('PySide2.QtCore.QUrl',), ('str',)], + + # class PySide2.QtQml.QQmlFileSelector: + "QQmlFileSelector.__init__": ('PySide2.QtQml.QQmlEngine', 'PySide2.QtCore.QObject'), + "QQmlFileSelector.get": ('PySide2.QtQml.QQmlEngine',), + "QQmlFileSelector.selector": (), + "QQmlFileSelector.setExtraSelectors": ('List[str]',), + "QQmlFileSelector.setSelector": ('PySide2.QtCore.QFileSelector',), + + # class PySide2.QtQml.QQmlImageProviderBase: + "QQmlImageProviderBase.flags": (), + "QQmlImageProviderBase.imageType": (), + + # class PySide2.QtQml.QQmlIncubationController: + "QQmlIncubationController.__init__": (), + "QQmlIncubationController.engine": (), + "QQmlIncubationController.incubateFor": ('int',), + "QQmlIncubationController.incubateWhile": ('bool', 'int'), + "QQmlIncubationController.incubatingObjectCount": (), + "QQmlIncubationController.incubatingObjectCountChanged": ('int',), + + # class PySide2.QtQml.QQmlIncubator: + "QQmlIncubator.__init__": ('PySide2.QtQml.QQmlIncubator.IncubationMode',), + "QQmlIncubator.clear": (), + "QQmlIncubator.errors": (), + "QQmlIncubator.forceCompletion": (), + "QQmlIncubator.incubationMode": (), + "QQmlIncubator.isError": (), + "QQmlIncubator.isLoading": (), + "QQmlIncubator.isNull": (), + "QQmlIncubator.isReady": (), + "QQmlIncubator.object": (), + "QQmlIncubator.setInitialState": ('PySide2.QtCore.QObject',), + "QQmlIncubator.status": (), + "QQmlIncubator.statusChanged": ('PySide2.QtQml.QQmlIncubator.Status',), + + # class PySide2.QtQml.QQmlListReference: + "QQmlListReference.__init__": [(), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlListReference',)], + "QQmlListReference.__copy__": (), + "QQmlListReference.append": ('PySide2.QtCore.QObject',), + "QQmlListReference.at": ('int',), + "QQmlListReference.canAppend": (), + "QQmlListReference.canAt": (), + "QQmlListReference.canClear": (), + "QQmlListReference.canCount": (), + "QQmlListReference.clear": (), + "QQmlListReference.count": (), + "QQmlListReference.isManipulable": (), + "QQmlListReference.isReadable": (), + "QQmlListReference.isValid": (), + "QQmlListReference.listElementType": (), + "QQmlListReference.object": (), + + # class PySide2.QtQml.QQmlNetworkAccessManagerFactory: + "QQmlNetworkAccessManagerFactory.__init__": (), + "QQmlNetworkAccessManagerFactory.create": ('PySide2.QtCore.QObject',), + + # class PySide2.QtQml.QQmlParserStatus: + "QQmlParserStatus.__init__": (), + "QQmlParserStatus.classBegin": (), + "QQmlParserStatus.componentComplete": (), + + # class PySide2.QtQml.QQmlProperty: + "QQmlProperty.__init__": [(), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine'), ('PySide2.QtQml.QQmlProperty',)], + "QQmlProperty.__copy__": (), + "QQmlProperty.connectNotifySignal": [('PySide2.QtCore.QObject', 'int'), ('PySide2.QtCore.QObject', 'str')], + "QQmlProperty.hasNotifySignal": (), + "QQmlProperty.index": (), + "QQmlProperty.isDesignable": (), + "QQmlProperty.isProperty": (), + "QQmlProperty.isResettable": (), + "QQmlProperty.isSignalProperty": (), + "QQmlProperty.isValid": (), + "QQmlProperty.isWritable": (), + "QQmlProperty.method": (), + "QQmlProperty.name": (), + "QQmlProperty.needsNotifySignal": (), + "QQmlProperty.object": (), + "QQmlProperty.property": (), + "QQmlProperty.propertyType": (), + "QQmlProperty.propertyTypeCategory": (), + "QQmlProperty.propertyTypeName": (), + "QQmlProperty.read": [(), ('PySide2.QtCore.QObject', 'str'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'PySide2.QtQml.QQmlEngine')], + "QQmlProperty.reset": (), + "QQmlProperty.type": (), + "QQmlProperty.write": [('Any',), ('PySide2.QtCore.QObject', 'str', 'Any'), ('PySide2.QtCore.QObject', 'str', 'Any', 'PySide2.QtQml.QQmlContext'), ('PySide2.QtCore.QObject', 'str', 'Any', 'PySide2.QtQml.QQmlEngine')], + + # class PySide2.QtQml.QQmlPropertyMap: + "QQmlPropertyMap.__init__": ('PySide2.QtCore.QObject',), + "QQmlPropertyMap.clear": ('str',), + "QQmlPropertyMap.contains": ('str',), + "QQmlPropertyMap.count": (), + "QQmlPropertyMap.insert": ('str', 'Any'), + "QQmlPropertyMap.isEmpty": (), + "QQmlPropertyMap.keys": (), + "QQmlPropertyMap.size": (), + "QQmlPropertyMap.updateValue": ('str', 'Any'), + "QQmlPropertyMap.value": ('str',), + + # class PySide2.QtQml.QQmlPropertyValueSource: + "QQmlPropertyValueSource.__init__": (), + "QQmlPropertyValueSource.setTarget": ('PySide2.QtQml.QQmlProperty',), + + # class PySide2.QtQml.QQmlScriptString: + "QQmlScriptString.__init__": [(), ('PySide2.QtQml.QQmlScriptString',)], + "QQmlScriptString.__copy__": (), + "QQmlScriptString.booleanLiteral": ('bool',), + "QQmlScriptString.isEmpty": (), + "QQmlScriptString.isNullLiteral": (), + "QQmlScriptString.isUndefinedLiteral": (), + "QQmlScriptString.numberLiteral": ('bool',), + "QQmlScriptString.stringLiteral": (), + + # class PySide2.QtQml.QQmlTypesExtensionInterface: + "QQmlTypesExtensionInterface.__init__": (), + "QQmlTypesExtensionInterface.registerTypes": ('str',), + + # class PySide2.QtQml.VolatileBool: + }) + +# Module PySide2.QtQuick +if "PySide2.QtQuick" in sys.modules: + dict.update({ + + # class PySide2.QtQuick.QQuickAsyncImageProvider: + "QQuickAsyncImageProvider.__init__": (), + "QQuickAsyncImageProvider.requestImageResponse": ('str', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickFramebufferObject: + "QQuickFramebufferObject.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickFramebufferObject.createRenderer": (), + "QQuickFramebufferObject.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickFramebufferObject.isTextureProvider": (), + "QQuickFramebufferObject.mirrorVertically": (), + "QQuickFramebufferObject.releaseResources": (), + "QQuickFramebufferObject.setMirrorVertically": ('bool',), + "QQuickFramebufferObject.setTextureFollowsItemSize": ('bool',), + "QQuickFramebufferObject.textureFollowsItemSize": (), + "QQuickFramebufferObject.textureProvider": (), + "QQuickFramebufferObject.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickImageProvider: + "QQuickImageProvider.__init__": ('PySide2.QtQml.QQmlImageProviderBase.ImageType', 'Flags'), + "QQuickImageProvider.flags": (), + "QQuickImageProvider.imageType": (), + "QQuickImageProvider.requestImage": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestPixmap": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + "QQuickImageProvider.requestTexture": ('str', 'PySide2.QtCore.QSize', 'PySide2.QtCore.QSize'), + + # class PySide2.QtQuick.QQuickImageResponse: + "QQuickImageResponse.__init__": (), + "QQuickImageResponse.cancel": (), + "QQuickImageResponse.errorString": (), + "QQuickImageResponse.textureFactory": (), + + # class PySide2.QtQuick.QQuickItem: + "QQuickItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.acceptHoverEvents": (), + "QQuickItem.acceptedMouseButtons": (), + "QQuickItem.activeFocusOnTab": (), + "QQuickItem.antialiasing": (), + "QQuickItem.baselineOffset": (), + "QQuickItem.boundingRect": (), + "QQuickItem.childAt": ('float', 'float'), + "QQuickItem.childItems": (), + "QQuickItem.childMouseEventFilter": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickItem.childrenRect": (), + "QQuickItem.classBegin": (), + "QQuickItem.clip": (), + "QQuickItem.clipRect": (), + "QQuickItem.componentComplete": (), + "QQuickItem.contains": ('PySide2.QtCore.QPointF',), + "QQuickItem.cursor": (), + "QQuickItem.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickItem.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickItem.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickItem.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickItem.event": ('PySide2.QtCore.QEvent',), + "QQuickItem.filtersChildMouseEvents": (), + "QQuickItem.flags": (), + "QQuickItem.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickItem.forceActiveFocus": [(), ('PySide2.QtCore.Qt.FocusReason',)], + "QQuickItem.geometryChanged": ('PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QQuickItem.grabMouse": (), + "QQuickItem.grabToImage": [('PySide2.QtCore.QSize',), ('PySide2.QtQml.QJSValue', 'PySide2.QtCore.QSize')], + "QQuickItem.grabTouchPoints": ('list',), + "QQuickItem.hasActiveFocus": (), + "QQuickItem.hasFocus": (), + "QQuickItem.height": (), + "QQuickItem.heightValid": (), + "QQuickItem.hoverEnterEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverLeaveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.hoverMoveEvent": ('PySide2.QtGui.QHoverEvent',), + "QQuickItem.implicitHeight": (), + "QQuickItem.implicitWidth": (), + "QQuickItem.inputMethodEvent": ('PySide2.QtGui.QInputMethodEvent',), + "QQuickItem.inputMethodQuery": ('PySide2.QtCore.Qt.InputMethodQuery',), + "QQuickItem.isAncestorOf": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.isComponentComplete": (), + "QQuickItem.isEnabled": (), + "QQuickItem.isFocusScope": (), + "QQuickItem.isTextureProvider": (), + "QQuickItem.isUnderMouse": (), + "QQuickItem.isVisible": (), + "QQuickItem.itemTransform": ('PySide2.QtQuick.QQuickItem', 'bool'), + "QQuickItem.keepMouseGrab": (), + "QQuickItem.keepTouchGrab": (), + "QQuickItem.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickItem.mapFromGlobal": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapFromScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapRectFromItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectFromScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapRectToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QRectF'), + "QQuickItem.mapRectToScene": ('PySide2.QtCore.QRectF',), + "QQuickItem.mapToGlobal": ('PySide2.QtCore.QPointF',), + "QQuickItem.mapToItem": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QPointF'), + "QQuickItem.mapToScene": ('PySide2.QtCore.QPointF',), + "QQuickItem.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickItem.mouseUngrabEvent": (), + "QQuickItem.nextItemInFocusChain": ('bool',), + "QQuickItem.opacity": (), + "QQuickItem.parentItem": (), + "QQuickItem.polish": (), + "QQuickItem.position": (), + "QQuickItem.releaseResources": (), + "QQuickItem.resetAntialiasing": (), + "QQuickItem.resetHeight": (), + "QQuickItem.resetWidth": (), + "QQuickItem.rotation": (), + "QQuickItem.scale": (), + "QQuickItem.scopedFocusItem": (), + "QQuickItem.setAcceptHoverEvents": ('bool',), + "QQuickItem.setAcceptedMouseButtons": ('MouseButtons',), + "QQuickItem.setActiveFocusOnTab": ('bool',), + "QQuickItem.setAntialiasing": ('bool',), + "QQuickItem.setBaselineOffset": ('float',), + "QQuickItem.setClip": ('bool',), + "QQuickItem.setCursor": ('PySide2.QtGui.QCursor',), + "QQuickItem.setEnabled": ('bool',), + "QQuickItem.setFiltersChildMouseEvents": ('bool',), + "QQuickItem.setFlag": ('PySide2.QtQuick.QQuickItem.Flag', 'bool'), + "QQuickItem.setFlags": ('Flags',), + "QQuickItem.setFocus": [('bool',), ('bool', 'PySide2.QtCore.Qt.FocusReason')], + "QQuickItem.setHeight": ('float',), + "QQuickItem.setImplicitHeight": ('float',), + "QQuickItem.setImplicitSize": ('float', 'float'), + "QQuickItem.setImplicitWidth": ('float',), + "QQuickItem.setKeepMouseGrab": ('bool',), + "QQuickItem.setKeepTouchGrab": ('bool',), + "QQuickItem.setOpacity": ('float',), + "QQuickItem.setParentItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.setPosition": ('PySide2.QtCore.QPointF',), + "QQuickItem.setRotation": ('float',), + "QQuickItem.setScale": ('float',), + "QQuickItem.setSize": ('PySide2.QtCore.QSizeF',), + "QQuickItem.setSmooth": ('bool',), + "QQuickItem.setState": ('str',), + "QQuickItem.setTransformOrigin": ('PySide2.QtQuick.QQuickItem.TransformOrigin',), + "QQuickItem.setTransformOriginPoint": ('PySide2.QtCore.QPointF',), + "QQuickItem.setVisible": ('bool',), + "QQuickItem.setWidth": ('float',), + "QQuickItem.setX": ('float',), + "QQuickItem.setY": ('float',), + "QQuickItem.setZ": ('float',), + "QQuickItem.smooth": (), + "QQuickItem.stackAfter": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.stackBefore": ('PySide2.QtQuick.QQuickItem',), + "QQuickItem.state": (), + "QQuickItem.textureProvider": (), + "QQuickItem.touchEvent": ('PySide2.QtGui.QTouchEvent',), + "QQuickItem.touchUngrabEvent": (), + "QQuickItem.transformOrigin": (), + "QQuickItem.transformOriginPoint": (), + "QQuickItem.ungrabMouse": (), + "QQuickItem.ungrabTouchPoints": (), + "QQuickItem.unsetCursor": (), + "QQuickItem.update": (), + "QQuickItem.updateInputMethod": ('InputMethodQueries',), + "QQuickItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + "QQuickItem.updatePolish": (), + "QQuickItem.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + "QQuickItem.width": (), + "QQuickItem.widthValid": (), + "QQuickItem.window": (), + "QQuickItem.windowDeactivateEvent": (), + "QQuickItem.x": (), + "QQuickItem.y": (), + "QQuickItem.z": (), + + # class PySide2.QtQuick.QQuickItemGrabResult: + "QQuickItemGrabResult.event": ('PySide2.QtCore.QEvent',), + "QQuickItemGrabResult.image": (), + "QQuickItemGrabResult.saveToFile": ('str',), + "QQuickItemGrabResult.url": (), + + # class PySide2.QtQuick.QQuickPaintedItem: + "QQuickPaintedItem.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickPaintedItem.antialiasing": (), + "QQuickPaintedItem.contentsBoundingRect": (), + "QQuickPaintedItem.contentsScale": (), + "QQuickPaintedItem.contentsSize": (), + "QQuickPaintedItem.fillColor": (), + "QQuickPaintedItem.isTextureProvider": (), + "QQuickPaintedItem.mipmap": (), + "QQuickPaintedItem.opaquePainting": (), + "QQuickPaintedItem.paint": ('PySide2.QtGui.QPainter',), + "QQuickPaintedItem.performanceHints": (), + "QQuickPaintedItem.releaseResources": (), + "QQuickPaintedItem.renderTarget": (), + "QQuickPaintedItem.resetContentsSize": (), + "QQuickPaintedItem.setAntialiasing": ('bool',), + "QQuickPaintedItem.setContentsScale": ('float',), + "QQuickPaintedItem.setContentsSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.setFillColor": ('PySide2.QtGui.QColor',), + "QQuickPaintedItem.setMipmap": ('bool',), + "QQuickPaintedItem.setOpaquePainting": ('bool',), + "QQuickPaintedItem.setPerformanceHint": ('PySide2.QtQuick.QQuickPaintedItem.PerformanceHint', 'bool'), + "QQuickPaintedItem.setPerformanceHints": ('PerformanceHints',), + "QQuickPaintedItem.setRenderTarget": ('PySide2.QtQuick.QQuickPaintedItem.RenderTarget',), + "QQuickPaintedItem.setTextureSize": ('PySide2.QtCore.QSize',), + "QQuickPaintedItem.textureProvider": (), + "QQuickPaintedItem.textureSize": (), + "QQuickPaintedItem.update": [(), ('PySide2.QtCore.QRect',)], + "QQuickPaintedItem.updatePaintNode": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QQuickItem.UpdatePaintNodeData'), + + # class PySide2.QtQuick.QQuickRenderControl: + "QQuickRenderControl.__init__": ('PySide2.QtCore.QObject',), + "QQuickRenderControl.grab": (), + "QQuickRenderControl.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QQuickRenderControl.invalidate": (), + "QQuickRenderControl.polishItems": (), + "QQuickRenderControl.prepareThread": ('PySide2.QtCore.QThread',), + "QQuickRenderControl.render": (), + "QQuickRenderControl.renderWindow": ('PySide2.QtCore.QPoint',), + "QQuickRenderControl.renderWindowFor": ('PySide2.QtQuick.QQuickWindow', 'PySide2.QtCore.QPoint'), + "QQuickRenderControl.sync": (), + + # class PySide2.QtQuick.QQuickTextDocument: + "QQuickTextDocument.__init__": ('PySide2.QtQuick.QQuickItem',), + "QQuickTextDocument.textDocument": (), + + # class PySide2.QtQuick.QQuickTextureFactory: + "QQuickTextureFactory.__init__": (), + "QQuickTextureFactory.createTexture": ('PySide2.QtQuick.QQuickWindow',), + "QQuickTextureFactory.image": (), + "QQuickTextureFactory.textureByteCount": (), + "QQuickTextureFactory.textureFactoryForImage": ('PySide2.QtGui.QImage',), + "QQuickTextureFactory.textureSize": (), + + # class PySide2.QtQuick.QQuickTransform: + "QQuickTransform.__init__": ('PySide2.QtCore.QObject',), + "QQuickTransform.appendToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.applyTo": ('PySide2.QtGui.QMatrix4x4',), + "QQuickTransform.prependToItem": ('PySide2.QtQuick.QQuickItem',), + "QQuickTransform.update": (), + + # class PySide2.QtQuick.QQuickView: + "QQuickView.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtGui.QWindow'), ('PySide2.QtGui.QWindow',), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtGui.QWindow')], + "QQuickView.engine": (), + "QQuickView.errors": (), + "QQuickView.initialSize": (), + "QQuickView.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickView.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickView.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickView.resizeMode": (), + "QQuickView.rootContext": (), + "QQuickView.rootObject": (), + "QQuickView.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickView.setResizeMode": ('PySide2.QtQuick.QQuickView.ResizeMode',), + "QQuickView.setSource": ('PySide2.QtCore.QUrl',), + "QQuickView.sizeHint": (), + "QQuickView.source": (), + "QQuickView.status": (), + "QQuickView.timerEvent": ('PySide2.QtCore.QTimerEvent',), + + # class PySide2.QtQuick.QQuickWindow: + "QQuickWindow.__init__": [('PySide2.QtGui.QWindow',), ('PySide2.QtQuick.QQuickRenderControl',)], + "QQuickWindow.accessibleRoot": (), + "QQuickWindow.activeFocusItem": (), + "QQuickWindow.clearBeforeRendering": (), + "QQuickWindow.color": (), + "QQuickWindow.contentItem": (), + "QQuickWindow.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'CreateTextureOptions'), + "QQuickWindow.createTextureFromImage": [('PySide2.QtGui.QImage',), ('PySide2.QtGui.QImage', 'CreateTextureOptions')], + "QQuickWindow.effectiveDevicePixelRatio": (), + "QQuickWindow.event": ('PySide2.QtCore.QEvent',), + "QQuickWindow.exposeEvent": ('PySide2.QtGui.QExposeEvent',), + "QQuickWindow.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.focusObject": (), + "QQuickWindow.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWindow.grabWindow": (), + "QQuickWindow.hasDefaultAlphaBuffer": (), + "QQuickWindow.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWindow.incubationController": (), + "QQuickWindow.isPersistentOpenGLContext": (), + "QQuickWindow.isPersistentSceneGraph": (), + "QQuickWindow.isSceneGraphInitialized": (), + "QQuickWindow.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWindow.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseGrabberItem": (), + "QQuickWindow.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWindow.openglContext": (), + "QQuickWindow.releaseResources": (), + "QQuickWindow.renderTarget": (), + "QQuickWindow.renderTargetId": (), + "QQuickWindow.renderTargetSize": (), + "QQuickWindow.resetOpenGLState": (), + "QQuickWindow.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWindow.sceneGraphBackend": (), + "QQuickWindow.scheduleRenderJob": ('PySide2.QtCore.QRunnable', 'PySide2.QtQuick.QQuickWindow.RenderStage'), + "QQuickWindow.sendEvent": ('PySide2.QtQuick.QQuickItem', 'PySide2.QtCore.QEvent'), + "QQuickWindow.setClearBeforeRendering": ('bool',), + "QQuickWindow.setColor": ('PySide2.QtGui.QColor',), + "QQuickWindow.setDefaultAlphaBuffer": ('bool',), + "QQuickWindow.setPersistentOpenGLContext": ('bool',), + "QQuickWindow.setPersistentSceneGraph": ('bool',), + "QQuickWindow.setRenderTarget": [('PySide2.QtGui.QOpenGLFramebufferObject',), ('int', 'PySide2.QtCore.QSize')], + "QQuickWindow.setSceneGraphBackend": ('str',), + "QQuickWindow.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWindow.update": (), + "QQuickWindow.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + + # class PySide2.QtQuick.QSGAbstractRenderer: + "QSGAbstractRenderer.__init__": ('PySide2.QtCore.QObject',), + "QSGAbstractRenderer.clearColor": (), + "QSGAbstractRenderer.clearMode": (), + "QSGAbstractRenderer.deviceRect": (), + "QSGAbstractRenderer.nodeChanged": ('PySide2.QtQuick.QSGNode', 'DirtyState'), + "QSGAbstractRenderer.projectionMatrix": (), + "QSGAbstractRenderer.renderScene": ('int',), + "QSGAbstractRenderer.setClearColor": ('PySide2.QtGui.QColor',), + "QSGAbstractRenderer.setClearMode": ('ClearMode',), + "QSGAbstractRenderer.setDeviceRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.setProjectionMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGAbstractRenderer.setProjectionMatrixToRect": ('PySide2.QtCore.QRectF',), + "QSGAbstractRenderer.setViewportRect": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QSize',)], + "QSGAbstractRenderer.viewportRect": (), + + # class PySide2.QtQuick.QSGBasicGeometryNode: + "QSGBasicGeometryNode.__init__": ('PySide2.QtQuick.QSGNode.NodeType',), + "QSGBasicGeometryNode.clipList": (), + "QSGBasicGeometryNode.geometry": (), + "QSGBasicGeometryNode.matrix": (), + "QSGBasicGeometryNode.setGeometry": ('PySide2.QtQuick.QSGGeometry',), + "QSGBasicGeometryNode.setRendererClipList": ('PySide2.QtQuick.QSGClipNode',), + "QSGBasicGeometryNode.setRendererMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSGClipNode: + "QSGClipNode.__init__": (), + "QSGClipNode.clipRect": (), + "QSGClipNode.isRectangular": (), + "QSGClipNode.setClipRect": ('PySide2.QtCore.QRectF',), + "QSGClipNode.setIsRectangular": ('bool',), + + # class PySide2.QtQuick.QSGDynamicTexture: + "QSGDynamicTexture.__init__": (), + "QSGDynamicTexture.updateTexture": (), + + # class PySide2.QtQuick.QSGEngine: + "QSGEngine.__init__": ('PySide2.QtCore.QObject',), + "QSGEngine.createRenderer": (), + "QSGEngine.createTextureFromId": ('int', 'PySide2.QtCore.QSize', 'CreateTextureOptions'), + "QSGEngine.createTextureFromImage": ('PySide2.QtGui.QImage', 'CreateTextureOptions'), + "QSGEngine.initialize": ('PySide2.QtGui.QOpenGLContext',), + "QSGEngine.invalidate": (), + + # class PySide2.QtQuick.QSGGeometry: + "QSGGeometry.__init__": ('PySide2.QtQuick.QSGGeometry.AttributeSet', 'int', 'int', 'int'), + "QSGGeometry.allocate": ('int', 'int'), + "QSGGeometry.attributeCount": (), + "QSGGeometry.attributes": (), + "QSGGeometry.defaultAttributes_ColoredPoint2D": (), + "QSGGeometry.defaultAttributes_Point2D": (), + "QSGGeometry.defaultAttributes_TexturedPoint2D": (), + "QSGGeometry.drawingMode": (), + "QSGGeometry.indexCount": (), + "QSGGeometry.indexData": (), + "QSGGeometry.indexDataAsUInt": (), + "QSGGeometry.indexDataAsUShort": (), + "QSGGeometry.indexDataPattern": (), + "QSGGeometry.indexType": (), + "QSGGeometry.lineWidth": (), + "QSGGeometry.markIndexDataDirty": (), + "QSGGeometry.markVertexDataDirty": (), + "QSGGeometry.setDrawingMode": ('int',), + "QSGGeometry.setIndexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.setLineWidth": ('float',), + "QSGGeometry.setVertexDataPattern": ('PySide2.QtQuick.QSGGeometry.DataPattern',), + "QSGGeometry.sizeOfIndex": (), + "QSGGeometry.sizeOfVertex": (), + "QSGGeometry.updateColoredRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF'), + "QSGGeometry.updateTexturedRectGeometry": ('PySide2.QtQuick.QSGGeometry', 'PySide2.QtCore.QRectF', 'PySide2.QtCore.QRectF'), + "QSGGeometry.vertexCount": (), + "QSGGeometry.vertexData": (), + "QSGGeometry.vertexDataAsColoredPoint2D": (), + "QSGGeometry.vertexDataAsPoint2D": (), + "QSGGeometry.vertexDataAsTexturedPoint2D": (), + "QSGGeometry.vertexDataPattern": (), + + # class PySide2.QtQuick.QSGGeometryNode: + "QSGGeometryNode.__init__": (), + "QSGGeometryNode.inheritedOpacity": (), + "QSGGeometryNode.renderOrder": (), + "QSGGeometryNode.setInheritedOpacity": ('float',), + "QSGGeometryNode.setRenderOrder": ('int',), + + # class PySide2.QtQuick.QSGMaterialType: + "QSGMaterialType.__init__": (), + + # class PySide2.QtQuick.QSGNode: + "QSGNode.__init__": [(), ('PySide2.QtQuick.QSGNode.NodeType',)], + "QSGNode.appendChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.childAtIndex": ('int',), + "QSGNode.childCount": (), + "QSGNode.clearDirty": (), + "QSGNode.dirtyState": (), + "QSGNode.firstChild": (), + "QSGNode.flags": (), + "QSGNode.insertChildNodeAfter": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.insertChildNodeBefore": ('PySide2.QtQuick.QSGNode', 'PySide2.QtQuick.QSGNode'), + "QSGNode.isSubtreeBlocked": (), + "QSGNode.lastChild": (), + "QSGNode.markDirty": ('DirtyState',), + "QSGNode.nextSibling": (), + "QSGNode.parent": (), + "QSGNode.prependChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.preprocess": (), + "QSGNode.previousSibling": (), + "QSGNode.removeAllChildNodes": (), + "QSGNode.removeChildNode": ('PySide2.QtQuick.QSGNode',), + "QSGNode.reparentChildNodesTo": ('PySide2.QtQuick.QSGNode',), + "QSGNode.setFlag": ('PySide2.QtQuick.QSGNode.Flag', 'bool'), + "QSGNode.setFlags": ('Flags', 'bool'), + "QSGNode.type": (), + + # class PySide2.QtQuick.QSGOpacityNode: + "QSGOpacityNode.__init__": (), + "QSGOpacityNode.combinedOpacity": (), + "QSGOpacityNode.isSubtreeBlocked": (), + "QSGOpacityNode.opacity": (), + "QSGOpacityNode.setCombinedOpacity": ('float',), + "QSGOpacityNode.setOpacity": ('float',), + + # class PySide2.QtQuick.QSGSimpleRectNode: + "QSGSimpleRectNode.__init__": [(), ('PySide2.QtCore.QRectF', 'PySide2.QtGui.QColor')], + "QSGSimpleRectNode.color": (), + "QSGSimpleRectNode.rect": (), + "QSGSimpleRectNode.setColor": ('PySide2.QtGui.QColor',), + "QSGSimpleRectNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + + # class PySide2.QtQuick.QSGSimpleTextureNode: + "QSGSimpleTextureNode.__init__": (), + "QSGSimpleTextureNode.filtering": (), + "QSGSimpleTextureNode.ownsTexture": (), + "QSGSimpleTextureNode.rect": (), + "QSGSimpleTextureNode.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGSimpleTextureNode.setOwnsTexture": ('bool',), + "QSGSimpleTextureNode.setRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setSourceRect": [('PySide2.QtCore.QRectF',), ('float', 'float', 'float', 'float')], + "QSGSimpleTextureNode.setTexture": ('PySide2.QtQuick.QSGTexture',), + "QSGSimpleTextureNode.setTextureCoordinatesTransform": ('TextureCoordinatesTransformMode',), + "QSGSimpleTextureNode.sourceRect": (), + "QSGSimpleTextureNode.texture": (), + "QSGSimpleTextureNode.textureCoordinatesTransform": (), + + # class PySide2.QtQuick.QSGTexture: + "QSGTexture.__init__": (), + "QSGTexture.anisotropyLevel": (), + "QSGTexture.bind": (), + "QSGTexture.convertToNormalizedSourceRect": ('PySide2.QtCore.QRectF',), + "QSGTexture.filtering": (), + "QSGTexture.hasAlphaChannel": (), + "QSGTexture.hasMipmaps": (), + "QSGTexture.horizontalWrapMode": (), + "QSGTexture.isAtlasTexture": (), + "QSGTexture.mipmapFiltering": (), + "QSGTexture.normalizedTextureSubRect": (), + "QSGTexture.removedFromAtlas": (), + "QSGTexture.setAnisotropyLevel": ('PySide2.QtQuick.QSGTexture.AnisotropyLevel',), + "QSGTexture.setFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setHorizontalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.setMipmapFiltering": ('PySide2.QtQuick.QSGTexture.Filtering',), + "QSGTexture.setVerticalWrapMode": ('PySide2.QtQuick.QSGTexture.WrapMode',), + "QSGTexture.textureId": (), + "QSGTexture.textureSize": (), + "QSGTexture.updateBindOptions": ('bool',), + "QSGTexture.verticalWrapMode": (), + + # class PySide2.QtQuick.QSGTextureProvider: + "QSGTextureProvider.__init__": (), + "QSGTextureProvider.texture": (), + + # class PySide2.QtQuick.QSGTransformNode: + "QSGTransformNode.__init__": (), + "QSGTransformNode.combinedMatrix": (), + "QSGTransformNode.matrix": (), + "QSGTransformNode.setCombinedMatrix": ('PySide2.QtGui.QMatrix4x4',), + "QSGTransformNode.setMatrix": ('PySide2.QtGui.QMatrix4x4',), + + # class PySide2.QtQuick.QSharedPointer: + "QSharedPointer.__copy__": (), + "QSharedPointer.data": (), + }) + +# Module PySide2.QtQuickWidgets +if "PySide2.QtQuickWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtQuickWidgets.QQuickWidget: + "QQuickWidget.__init__": [('PySide2.QtCore.QUrl', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtQml.QQmlEngine', 'PySide2.QtWidgets.QWidget'), ('PySide2.QtWidgets.QWidget',)], + "QQuickWidget.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QQuickWidget.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QQuickWidget.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QQuickWidget.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QQuickWidget.engine": (), + "QQuickWidget.errors": (), + "QQuickWidget.event": ('PySide2.QtCore.QEvent',), + "QQuickWidget.focusInEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.focusOutEvent": ('PySide2.QtGui.QFocusEvent',), + "QQuickWidget.format": (), + "QQuickWidget.grabFramebuffer": (), + "QQuickWidget.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QQuickWidget.initialSize": (), + "QQuickWidget.keyPressEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.keyReleaseEvent": ('PySide2.QtGui.QKeyEvent',), + "QQuickWidget.mouseDoubleClickEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseMoveEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mousePressEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.mouseReleaseEvent": ('PySide2.QtGui.QMouseEvent',), + "QQuickWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QQuickWidget.quickWindow": (), + "QQuickWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QQuickWidget.resizeMode": (), + "QQuickWidget.rootContext": (), + "QQuickWidget.rootObject": (), + "QQuickWidget.setClearColor": ('PySide2.QtGui.QColor',), + "QQuickWidget.setContent": ('PySide2.QtCore.QUrl', 'PySide2.QtQml.QQmlComponent', 'PySide2.QtCore.QObject'), + "QQuickWidget.setFormat": ('PySide2.QtGui.QSurfaceFormat',), + "QQuickWidget.setResizeMode": ('PySide2.QtQuickWidgets.QQuickWidget.ResizeMode',), + "QQuickWidget.setSource": ('PySide2.QtCore.QUrl',), + "QQuickWidget.showEvent": ('PySide2.QtGui.QShowEvent',), + "QQuickWidget.sizeHint": (), + "QQuickWidget.source": (), + "QQuickWidget.status": (), + "QQuickWidget.timerEvent": ('PySide2.QtCore.QTimerEvent',), + "QQuickWidget.wheelEvent": ('PySide2.QtGui.QWheelEvent',), + }) + +# Module PySide2.QtTextToSpeech +if "PySide2.QtTextToSpeech" in sys.modules: + dict.update({ + + # class PySide2.QtTextToSpeech.QTextToSpeech: + "QTextToSpeech.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QTextToSpeech.availableEngines": (), + "QTextToSpeech.availableLocales": (), + "QTextToSpeech.availableVoices": (), + "QTextToSpeech.locale": (), + "QTextToSpeech.pause": (), + "QTextToSpeech.pitch": (), + "QTextToSpeech.rate": (), + "QTextToSpeech.resume": (), + "QTextToSpeech.say": ('str',), + "QTextToSpeech.setLocale": ('PySide2.QtCore.QLocale',), + "QTextToSpeech.setPitch": ('float',), + "QTextToSpeech.setRate": ('float',), + "QTextToSpeech.setVoice": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeech.setVolume": ('float',), + "QTextToSpeech.state": (), + "QTextToSpeech.stop": (), + "QTextToSpeech.voice": (), + "QTextToSpeech.volume": (), + + # class PySide2.QtTextToSpeech.QTextToSpeechEngine: + "QTextToSpeechEngine.__init__": ('PySide2.QtCore.QObject',), + "QTextToSpeechEngine.availableLocales": (), + "QTextToSpeechEngine.availableVoices": (), + "QTextToSpeechEngine.createVoice": ('str', 'PySide2.QtTextToSpeech.QVoice.Gender', 'PySide2.QtTextToSpeech.QVoice.Age', 'Any'), + "QTextToSpeechEngine.locale": (), + "QTextToSpeechEngine.pause": (), + "QTextToSpeechEngine.pitch": (), + "QTextToSpeechEngine.rate": (), + "QTextToSpeechEngine.resume": (), + "QTextToSpeechEngine.say": ('str',), + "QTextToSpeechEngine.setLocale": ('PySide2.QtCore.QLocale',), + "QTextToSpeechEngine.setPitch": ('float',), + "QTextToSpeechEngine.setRate": ('float',), + "QTextToSpeechEngine.setVoice": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeechEngine.setVolume": ('float',), + "QTextToSpeechEngine.state": (), + "QTextToSpeechEngine.stop": (), + "QTextToSpeechEngine.voice": (), + "QTextToSpeechEngine.voiceData": ('PySide2.QtTextToSpeech.QVoice',), + "QTextToSpeechEngine.volume": (), + + # class PySide2.QtTextToSpeech.QVoice: + "QVoice.__init__": [(), ('PySide2.QtTextToSpeech.QVoice',)], + "QVoice.__copy__": (), + "QVoice.age": (), + "QVoice.ageName": ('PySide2.QtTextToSpeech.QVoice.Age',), + "QVoice.gender": (), + "QVoice.genderName": ('PySide2.QtTextToSpeech.QVoice.Gender',), + "QVoice.name": (), + }) + +# Module PySide2.QtCharts +if "PySide2.QtCharts" in sys.modules: + dict.update({ + + # class PySide2.QtCharts.QtCharts: + }) + +# Module PySide2.QtSvg +if "PySide2.QtSvg" in sys.modules: + dict.update({ + + # class PySide2.QtSvg.QGraphicsSvgItem: + "QGraphicsSvgItem.__init__": [('PySide2.QtWidgets.QGraphicsItem',), ('str', 'PySide2.QtWidgets.QGraphicsItem')], + "QGraphicsSvgItem.boundingRect": (), + "QGraphicsSvgItem.elementId": (), + "QGraphicsSvgItem.isCachingEnabled": (), + "QGraphicsSvgItem.maximumCacheSize": (), + "QGraphicsSvgItem.paint": ('PySide2.QtGui.QPainter', 'PySide2.QtWidgets.QStyleOptionGraphicsItem', 'PySide2.QtWidgets.QWidget'), + "QGraphicsSvgItem.renderer": (), + "QGraphicsSvgItem.setCachingEnabled": ('bool',), + "QGraphicsSvgItem.setElementId": ('str',), + "QGraphicsSvgItem.setMaximumCacheSize": ('PySide2.QtCore.QSize',), + "QGraphicsSvgItem.setSharedRenderer": ('PySide2.QtSvg.QSvgRenderer',), + "QGraphicsSvgItem.type": (), + + # class PySide2.QtSvg.QSvgGenerator: + "QSvgGenerator.__init__": (), + "QSvgGenerator.description": (), + "QSvgGenerator.fileName": (), + "QSvgGenerator.metric": ('PySide2.QtGui.QPaintDevice.PaintDeviceMetric',), + "QSvgGenerator.outputDevice": (), + "QSvgGenerator.paintEngine": (), + "QSvgGenerator.resolution": (), + "QSvgGenerator.setDescription": ('str',), + "QSvgGenerator.setFileName": ('str',), + "QSvgGenerator.setOutputDevice": ('PySide2.QtCore.QIODevice',), + "QSvgGenerator.setResolution": ('int',), + "QSvgGenerator.setSize": ('PySide2.QtCore.QSize',), + "QSvgGenerator.setTitle": ('str',), + "QSvgGenerator.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgGenerator.size": (), + "QSvgGenerator.title": (), + "QSvgGenerator.viewBox": (), + "QSvgGenerator.viewBoxF": (), + + # class PySide2.QtSvg.QSvgRenderer: + "QSvgRenderer.__init__": [('PySide2.QtCore.QByteArray', 'PySide2.QtCore.QObject'), ('PySide2.QtCore.QObject',), ('PySide2.QtCore.QXmlStreamReader', 'PySide2.QtCore.QObject'), ('str', 'PySide2.QtCore.QObject')], + "QSvgRenderer.animated": (), + "QSvgRenderer.animationDuration": (), + "QSvgRenderer.boundsOnElement": ('str',), + "QSvgRenderer.currentFrame": (), + "QSvgRenderer.defaultSize": (), + "QSvgRenderer.elementExists": ('str',), + "QSvgRenderer.framesPerSecond": (), + "QSvgRenderer.isValid": (), + "QSvgRenderer.load": [('PySide2.QtCore.QByteArray',), ('PySide2.QtCore.QXmlStreamReader',), ('str',)], + "QSvgRenderer.matrixForElement": ('str',), + "QSvgRenderer.render": [('PySide2.QtGui.QPainter',), ('PySide2.QtGui.QPainter', 'PySide2.QtCore.QRectF'), ('PySide2.QtGui.QPainter', 'str', 'PySide2.QtCore.QRectF')], + "QSvgRenderer.setCurrentFrame": ('int',), + "QSvgRenderer.setFramesPerSecond": ('int',), + "QSvgRenderer.setViewBox": [('PySide2.QtCore.QRect',), ('PySide2.QtCore.QRectF',)], + "QSvgRenderer.viewBox": (), + "QSvgRenderer.viewBoxF": (), + + # class PySide2.QtSvg.QSvgWidget: + "QSvgWidget.__init__": [('PySide2.QtWidgets.QWidget',), ('str', 'PySide2.QtWidgets.QWidget')], + "QSvgWidget.load": [('PySide2.QtCore.QByteArray',), ('str',)], + "QSvgWidget.paintEvent": ('PySide2.QtGui.QPaintEvent',), + "QSvgWidget.renderer": (), + "QSvgWidget.sizeHint": (), + }) + +# Module PySide2.QtDataVisualization +if "PySide2.QtDataVisualization" in sys.modules: + dict.update({ + + # class PySide2.QtDataVisualization.QtDataVisualization: + "QtDataVisualization.qDefaultSurfaceFormat": ('bool',), + }) + +# Module PySide2.QtUiTools +if "PySide2.QtUiTools" in sys.modules: + dict.update({ + + # class PySide2.QtUiTools.QUiLoader: + "QUiLoader.__init__": ('PySide2.QtCore.QObject',), + "QUiLoader.addPluginPath": ('str',), + "QUiLoader.availableLayouts": (), + "QUiLoader.availableWidgets": (), + "QUiLoader.clearPluginPaths": (), + "QUiLoader.createAction": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createActionGroup": ('PySide2.QtCore.QObject', 'str'), + "QUiLoader.createLayout": ('str', 'PySide2.QtCore.QObject', 'str'), + "QUiLoader.createWidget": ('str', 'PySide2.QtWidgets.QWidget', 'str'), + "QUiLoader.errorString": (), + "QUiLoader.isLanguageChangeEnabled": (), + "QUiLoader.isTranslationEnabled": (), + "QUiLoader.load": [('PySide2.QtCore.QIODevice', 'PySide2.QtWidgets.QWidget'), ('str', 'PySide2.QtWidgets.QWidget')], + "QUiLoader.pluginPaths": (), + "QUiLoader.registerCustomWidget": ('object',), + "QUiLoader.setLanguageChangeEnabled": ('bool',), + "QUiLoader.setTranslationEnabled": ('bool',), + "QUiLoader.setWorkingDirectory": ('PySide2.QtCore.QDir',), + "QUiLoader.workingDirectory": (), + }) + +# Module PySide2.QtAxContainer +if "PySide2.QtAxContainer" in sys.modules: + dict.update({ + + # class PySide2.QtAxContainer.QAxBase: + "QAxBase.argumentsToList": ('Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any'), + "QAxBase.asVariant": (), + "QAxBase.className": (), + "QAxBase.clear": (), + "QAxBase.control": (), + "QAxBase.disableClassInfo": (), + "QAxBase.disableEventSink": (), + "QAxBase.disableMetaObject": (), + "QAxBase.dynamicCall": [('str', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any'), ('str', 'list'), ('str', 'list', 'int')], + "QAxBase.fallbackMetaObject": (), + "QAxBase.generateDocumentation": (), + "QAxBase.indexOfVerb": ('str',), + "QAxBase.initializeFrom": ('PySide2.QtAxContainer.QAxBase',), + "QAxBase.internalRelease": (), + "QAxBase.isNull": (), + "QAxBase.propertyBag": (), + "QAxBase.propertyWritable": ('str',), + "QAxBase.qObject": (), + "QAxBase.querySubObject": [('str', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any'), ('str', 'list')], + "QAxBase.setControl": ('str',), + "QAxBase.setPropertyBag": ('dict',), + "QAxBase.setPropertyWritable": ('str', 'bool'), + "QAxBase.verbs": (), + + # class PySide2.QtAxContainer.QAxObject: + "QAxObject.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QAxObject.className": (), + "QAxObject.doVerb": ('str',), + "QAxObject.fallbackMetaObject": (), + "QAxObject.qObject": (), + + # class PySide2.QtAxContainer.QAxScript: + "QAxScript.__init__": ('str', 'PySide2.QtAxContainer.QAxScriptManager'), + "QAxScript.call": [('str', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any'), ('str', 'list')], + "QAxScript.functions": ('PySide2.QtAxContainer.QAxScript.FunctionFlags',), + "QAxScript.load": ('str', 'str'), + "QAxScript.scriptCode": (), + "QAxScript.scriptEngine": (), + "QAxScript.scriptName": (), + + # class PySide2.QtAxContainer.QAxScriptEngine: + "QAxScriptEngine.__init__": ('str', 'PySide2.QtAxContainer.QAxScript'), + "QAxScriptEngine.addItem": ('str',), + "QAxScriptEngine.hasIntrospection": (), + "QAxScriptEngine.isValid": (), + "QAxScriptEngine.scriptLanguage": (), + + # class PySide2.QtAxContainer.QAxScriptManager: + "QAxScriptManager.__init__": ('PySide2.QtCore.QObject',), + "QAxScriptManager.addObject": ('PySide2.QtAxContainer.QAxBase',), + "QAxScriptManager.call": [('str', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any', 'Any'), ('str', 'list')], + "QAxScriptManager.functions": ('PySide2.QtAxContainer.QAxScript.FunctionFlags',), + "QAxScriptManager.load": [('str', 'str'), ('str', 'str', 'str')], + "QAxScriptManager.registerEngine": ('str', 'str', 'str'), + "QAxScriptManager.script": ('str',), + "QAxScriptManager.scriptFileFilter": (), + "QAxScriptManager.scriptNames": (), + + # class PySide2.QtAxContainer.QAxSelect: + "QAxSelect.__init__": ('PySide2.QtWidgets.QWidget', 'WindowFlags'), + "QAxSelect.clsid": (), + + # class PySide2.QtAxContainer.QAxWidget: + "QAxWidget.__init__": [('PySide2.QtWidgets.QWidget', 'WindowFlags'), ('str', 'PySide2.QtWidgets.QWidget', 'WindowFlags')], + "QAxWidget.changeEvent": ('PySide2.QtCore.QEvent',), + "QAxWidget.className": (), + "QAxWidget.clear": (), + "QAxWidget.createHostWindow": [('bool',), ('bool', 'PySide2.QtCore.QByteArray')], + "QAxWidget.doVerb": ('str',), + "QAxWidget.fallbackMetaObject": (), + "QAxWidget.minimumSizeHint": (), + "QAxWidget.qObject": (), + "QAxWidget.resizeEvent": ('PySide2.QtGui.QResizeEvent',), + "QAxWidget.sizeHint": (), + "QAxWidget.translateKeyEvent": ('int', 'int'), + }) + +# Module PySide2.QtWebChannel +if "PySide2.QtWebChannel" in sys.modules: + dict.update({ + + # class PySide2.QtWebChannel.QWebChannel: + "QWebChannel.__init__": ('PySide2.QtCore.QObject',), + "QWebChannel.blockUpdates": (), + "QWebChannel.connectTo": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.deregisterObject": ('PySide2.QtCore.QObject',), + "QWebChannel.disconnectFrom": ('PySide2.QtWebChannel.QWebChannelAbstractTransport',), + "QWebChannel.registerObject": ('str', 'PySide2.QtCore.QObject'), + "QWebChannel.registerObjects": ('dict',), + "QWebChannel.registeredObjects": (), + "QWebChannel.setBlockUpdates": ('bool',), + + # class PySide2.QtWebChannel.QWebChannelAbstractTransport: + "QWebChannelAbstractTransport.__init__": ('PySide2.QtCore.QObject',), + "QWebChannelAbstractTransport.sendMessage": ('dict',), + }) + +# Module PySide2.QtWebEngineWidgets +if "PySide2.QtWebEngineWidgets" in sys.modules: + dict.update({ + + # class PySide2.QtWebEngineWidgets.QWebEngineCertificateError: + "QWebEngineCertificateError.__init__": ('int', 'PySide2.QtCore.QUrl', 'bool', 'str'), + "QWebEngineCertificateError.error": (), + "QWebEngineCertificateError.errorDescription": (), + "QWebEngineCertificateError.isOverridable": (), + "QWebEngineCertificateError.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineDownloadItem: + "QWebEngineDownloadItem.accept": (), + "QWebEngineDownloadItem.cancel": (), + "QWebEngineDownloadItem.id": (), + "QWebEngineDownloadItem.interruptReasonString": (), + "QWebEngineDownloadItem.isFinished": (), + "QWebEngineDownloadItem.mimeType": (), + "QWebEngineDownloadItem.path": (), + "QWebEngineDownloadItem.receivedBytes": (), + "QWebEngineDownloadItem.setPath": ('str',), + "QWebEngineDownloadItem.state": (), + "QWebEngineDownloadItem.totalBytes": (), + "QWebEngineDownloadItem.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineHistoryItem: + "QWebEngineHistoryItem.__init__": ('PySide2.QtWebEngineWidgets.QWebEngineHistoryItem',), + "QWebEngineHistoryItem.iconUrl": (), + "QWebEngineHistoryItem.isValid": (), + "QWebEngineHistoryItem.lastVisited": (), + "QWebEngineHistoryItem.originalUrl": (), + "QWebEngineHistoryItem.swap": ('PySide2.QtWebEngineWidgets.QWebEngineHistoryItem',), + "QWebEngineHistoryItem.title": (), + "QWebEngineHistoryItem.url": (), + + # class PySide2.QtWebEngineWidgets.QWebEnginePage: + "QWebEnginePage.__init__": [('PySide2.QtCore.QObject',), ('PySide2.QtWebEngineWidgets.QWebEngineProfile', 'PySide2.QtCore.QObject')], + "QWebEnginePage.acceptNavigationRequest": ('PySide2.QtCore.QUrl', 'PySide2.QtWebEngineWidgets.QWebEnginePage.NavigationType', 'bool'), + "QWebEnginePage.action": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction',), + "QWebEnginePage.backgroundColor": (), + "QWebEnginePage.certificateError": ('PySide2.QtWebEngineWidgets.QWebEngineCertificateError',), + "QWebEnginePage.chooseFiles": ('PySide2.QtWebEngineWidgets.QWebEnginePage.FileSelectionMode', 'List[str]', 'List[str]'), + "QWebEnginePage.contentsSize": (), + "QWebEnginePage.createStandardContextMenu": (), + "QWebEnginePage.createWindow": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebWindowType',), + "QWebEnginePage.event": ('PySide2.QtCore.QEvent',), + "QWebEnginePage.hasSelection": (), + "QWebEnginePage.icon": (), + "QWebEnginePage.iconUrl": (), + "QWebEnginePage.isAudioMuted": (), + "QWebEnginePage.javaScriptAlert": ('PySide2.QtCore.QUrl', 'str'), + "QWebEnginePage.javaScriptConfirm": ('PySide2.QtCore.QUrl', 'str'), + "QWebEnginePage.javaScriptConsoleMessage": ('PySide2.QtWebEngineWidgets.QWebEnginePage.JavaScriptConsoleMessageLevel', 'str', 'int', 'str'), + "QWebEnginePage.javaScriptPrompt": ('PySide2.QtCore.QUrl', 'str', 'str', 'str'), + "QWebEnginePage.load": ('PySide2.QtCore.QUrl',), + "QWebEnginePage.printToPdf": ('str', 'PySide2.QtGui.QPageLayout'), + "QWebEnginePage.profile": (), + "QWebEnginePage.recentlyAudible": (), + "QWebEnginePage.replaceMisspelledWord": ('str',), + "QWebEnginePage.requestedUrl": (), + "QWebEnginePage.runJavaScript": [('str',), ('str', 'int')], + "QWebEnginePage.scrollPosition": (), + "QWebEnginePage.selectedText": (), + "QWebEnginePage.setAudioMuted": ('bool',), + "QWebEnginePage.setBackgroundColor": ('PySide2.QtGui.QColor',), + "QWebEnginePage.setContent": ('PySide2.QtCore.QByteArray', 'str', 'PySide2.QtCore.QUrl'), + "QWebEnginePage.setFeaturePermission": ('PySide2.QtCore.QUrl', 'PySide2.QtWebEngineWidgets.QWebEnginePage.Feature', 'PySide2.QtWebEngineWidgets.QWebEnginePage.PermissionPolicy'), + "QWebEnginePage.setHtml": ('str', 'PySide2.QtCore.QUrl'), + "QWebEnginePage.setUrl": ('PySide2.QtCore.QUrl',), + "QWebEnginePage.setView": ('PySide2.QtWidgets.QWidget',), + "QWebEnginePage.setWebChannel": [('PySide2.QtWebChannel.QWebChannel',), ('PySide2.QtWebChannel.QWebChannel', 'int')], + "QWebEnginePage.setZoomFactor": ('float',), + "QWebEnginePage.title": (), + "QWebEnginePage.triggerAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction', 'bool'), + "QWebEnginePage.url": (), + "QWebEnginePage.view": (), + "QWebEnginePage.webChannel": (), + "QWebEnginePage.zoomFactor": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineProfile: + "QWebEngineProfile.__init__": [('PySide2.QtCore.QObject',), ('str', 'PySide2.QtCore.QObject')], + "QWebEngineProfile.cachePath": (), + "QWebEngineProfile.clearAllVisitedLinks": (), + "QWebEngineProfile.clearHttpCache": (), + "QWebEngineProfile.clearVisitedLinks": ('list',), + "QWebEngineProfile.defaultProfile": (), + "QWebEngineProfile.httpAcceptLanguage": (), + "QWebEngineProfile.httpCacheMaximumSize": (), + "QWebEngineProfile.httpCacheType": (), + "QWebEngineProfile.httpUserAgent": (), + "QWebEngineProfile.isOffTheRecord": (), + "QWebEngineProfile.isSpellCheckEnabled": (), + "QWebEngineProfile.persistentCookiesPolicy": (), + "QWebEngineProfile.persistentStoragePath": (), + "QWebEngineProfile.removeAllUrlSchemeHandlers": (), + "QWebEngineProfile.removeUrlScheme": ('PySide2.QtCore.QByteArray',), + "QWebEngineProfile.setCachePath": ('str',), + "QWebEngineProfile.setHttpAcceptLanguage": ('str',), + "QWebEngineProfile.setHttpCacheMaximumSize": ('int',), + "QWebEngineProfile.setHttpCacheType": ('PySide2.QtWebEngineWidgets.QWebEngineProfile.HttpCacheType',), + "QWebEngineProfile.setHttpUserAgent": ('str',), + "QWebEngineProfile.setPersistentCookiesPolicy": ('PySide2.QtWebEngineWidgets.QWebEngineProfile.PersistentCookiesPolicy',), + "QWebEngineProfile.setPersistentStoragePath": ('str',), + "QWebEngineProfile.setSpellCheckEnabled": ('bool',), + "QWebEngineProfile.setSpellCheckLanguages": ('List[str]',), + "QWebEngineProfile.spellCheckLanguages": (), + "QWebEngineProfile.storageName": (), + "QWebEngineProfile.visitedLinksContainsUrl": ('PySide2.QtCore.QUrl',), + + # class PySide2.QtWebEngineWidgets.QWebEngineScript: + "QWebEngineScript.__init__": [(), ('PySide2.QtWebEngineWidgets.QWebEngineScript',)], + "QWebEngineScript.__copy__": (), + "QWebEngineScript.injectionPoint": (), + "QWebEngineScript.isNull": (), + "QWebEngineScript.name": (), + "QWebEngineScript.runsOnSubFrames": (), + "QWebEngineScript.setInjectionPoint": ('PySide2.QtWebEngineWidgets.QWebEngineScript.InjectionPoint',), + "QWebEngineScript.setName": ('str',), + "QWebEngineScript.setRunsOnSubFrames": ('bool',), + "QWebEngineScript.setSourceCode": ('str',), + "QWebEngineScript.setWorldId": ('int',), + "QWebEngineScript.sourceCode": (), + "QWebEngineScript.swap": ('PySide2.QtWebEngineWidgets.QWebEngineScript',), + "QWebEngineScript.worldId": (), + + # class PySide2.QtWebEngineWidgets.QWebEngineView: + "QWebEngineView.__init__": ('PySide2.QtWidgets.QWidget',), + "QWebEngineView.back": (), + "QWebEngineView.contextMenuEvent": ('PySide2.QtGui.QContextMenuEvent',), + "QWebEngineView.createWindow": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebWindowType',), + "QWebEngineView.dragEnterEvent": ('PySide2.QtGui.QDragEnterEvent',), + "QWebEngineView.dragLeaveEvent": ('PySide2.QtGui.QDragLeaveEvent',), + "QWebEngineView.dragMoveEvent": ('PySide2.QtGui.QDragMoveEvent',), + "QWebEngineView.dropEvent": ('PySide2.QtGui.QDropEvent',), + "QWebEngineView.event": ('PySide2.QtCore.QEvent',), + "QWebEngineView.forward": (), + "QWebEngineView.hasSelection": (), + "QWebEngineView.hideEvent": ('PySide2.QtGui.QHideEvent',), + "QWebEngineView.icon": (), + "QWebEngineView.iconUrl": (), + "QWebEngineView.load": ('PySide2.QtCore.QUrl',), + "QWebEngineView.page": (), + "QWebEngineView.pageAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction',), + "QWebEngineView.reload": (), + "QWebEngineView.selectedText": (), + "QWebEngineView.setContent": ('PySide2.QtCore.QByteArray', 'str', 'PySide2.QtCore.QUrl'), + "QWebEngineView.setHtml": ('str', 'PySide2.QtCore.QUrl'), + "QWebEngineView.setPage": ('PySide2.QtWebEngineWidgets.QWebEnginePage',), + "QWebEngineView.setUrl": ('PySide2.QtCore.QUrl',), + "QWebEngineView.setZoomFactor": ('float',), + "QWebEngineView.showEvent": ('PySide2.QtGui.QShowEvent',), + "QWebEngineView.sizeHint": (), + "QWebEngineView.stop": (), + "QWebEngineView.title": (), + "QWebEngineView.triggerPageAction": ('PySide2.QtWebEngineWidgets.QWebEnginePage.WebAction', 'bool'), + "QWebEngineView.url": (), + "QWebEngineView.zoomFactor": (), + }) + +# Module PySide2.QtWebSockets +if "PySide2.QtWebSockets" in sys.modules: + dict.update({ + + # class PySide2.QtWebSockets.QMaskGenerator: + "QMaskGenerator.__init__": ('PySide2.QtCore.QObject',), + "QMaskGenerator.nextMask": (), + "QMaskGenerator.seed": (), + + # class PySide2.QtWebSockets.QWebSocket: + "QWebSocket.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketProtocol.Version', 'PySide2.QtCore.QObject'), + "QWebSocket.abort": (), + "QWebSocket.close": ('PySide2.QtWebSockets.QWebSocketProtocol.CloseCode', 'str'), + "QWebSocket.closeCode": (), + "QWebSocket.closeReason": (), + "QWebSocket.errorString": (), + "QWebSocket.flush": (), + "QWebSocket.isValid": (), + "QWebSocket.localAddress": (), + "QWebSocket.localPort": (), + "QWebSocket.maskGenerator": (), + "QWebSocket.open": [('PySide2.QtCore.QUrl',), ('PySide2.QtNetwork.QNetworkRequest',)], + "QWebSocket.origin": (), + "QWebSocket.pauseMode": (), + "QWebSocket.peerAddress": (), + "QWebSocket.peerName": (), + "QWebSocket.peerPort": (), + "QWebSocket.ping": ('PySide2.QtCore.QByteArray',), + "QWebSocket.proxy": (), + "QWebSocket.readBufferSize": (), + "QWebSocket.request": (), + "QWebSocket.requestUrl": (), + "QWebSocket.resourceName": (), + "QWebSocket.resume": (), + "QWebSocket.sendBinaryMessage": ('PySide2.QtCore.QByteArray',), + "QWebSocket.sendTextMessage": ('str',), + "QWebSocket.setMaskGenerator": ('PySide2.QtWebSockets.QMaskGenerator',), + "QWebSocket.setPauseMode": ('PauseModes',), + "QWebSocket.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocket.setReadBufferSize": ('int',), + "QWebSocket.state": (), + "QWebSocket.version": (), + + # class PySide2.QtWebSockets.QWebSocketCorsAuthenticator: + "QWebSocketCorsAuthenticator.__init__": [('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), ('str',)], + "QWebSocketCorsAuthenticator.allowed": (), + "QWebSocketCorsAuthenticator.origin": (), + "QWebSocketCorsAuthenticator.setAllowed": ('bool',), + "QWebSocketCorsAuthenticator.swap": ('PySide2.QtWebSockets.QWebSocketCorsAuthenticator',), + + # class PySide2.QtWebSockets.QWebSocketProtocol: + + # class PySide2.QtWebSockets.QWebSocketServer: + "QWebSocketServer.__init__": ('str', 'PySide2.QtWebSockets.QWebSocketServer.SslMode', 'PySide2.QtCore.QObject'), + "QWebSocketServer.close": (), + "QWebSocketServer.error": (), + "QWebSocketServer.errorString": (), + "QWebSocketServer.handleConnection": ('PySide2.QtNetwork.QTcpSocket',), + "QWebSocketServer.hasPendingConnections": (), + "QWebSocketServer.isListening": (), + "QWebSocketServer.listen": ('PySide2.QtNetwork.QHostAddress', 'int'), + "QWebSocketServer.maxPendingConnections": (), + "QWebSocketServer.nextPendingConnection": (), + "QWebSocketServer.pauseAccepting": (), + "QWebSocketServer.proxy": (), + "QWebSocketServer.resumeAccepting": (), + "QWebSocketServer.secureMode": (), + "QWebSocketServer.serverAddress": (), + "QWebSocketServer.serverName": (), + "QWebSocketServer.serverPort": (), + "QWebSocketServer.serverUrl": (), + "QWebSocketServer.setMaxPendingConnections": ('int',), + "QWebSocketServer.setProxy": ('PySide2.QtNetwork.QNetworkProxy',), + "QWebSocketServer.setServerName": ('str',), + "QWebSocketServer.setSocketDescriptor": ('int',), + "QWebSocketServer.socketDescriptor": (), + "QWebSocketServer.supportedVersions": (), + }) +# eof diff --git a/sources/pyside2/tests/registry/init_platform.py b/sources/pyside2/tests/registry/init_platform.py new file mode 100644 index 0000000..93f0d6e --- /dev/null +++ b/sources/pyside2/tests/registry/init_platform.py @@ -0,0 +1,263 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function, absolute_import + +""" +Existence registry + +This is a registry for all existing function signatures. +One file is generated with all signatures of a platform and version. +""" + +import sys +import os +import PySide2 +from contextlib import contextmanager +from textwrap import dedent + +all_modules = list("PySide2." + x for x in PySide2.__all__) + +from PySide2.support.signature import inspect +from PySide2.QtCore import __version__ + +is_py3 = sys.version_info[0] == 3 +is_ci = os.environ.get("QTEST_ENVIRONMENT", "") == "ci" +# Python2 legacy: Correct 'linux2' to 'linux', recommended way. +platform = 'linux' if sys.platform.startswith('linux') else sys.platform +# Make sure not to get .pyc in Python2. +sourcepath = os.path.splitext(__file__)[0] + ".py" + +def qtVersion(): + return tuple(map(int, __version__.split("."))) + +# Format a registry file name for version +def _registryFileName(version): + name = "exists_{}_{}_{}_{}{}.py".format(platform, + version[0], version[1], version[2], "_ci" if is_ci else "") + return os.path.join(os.path.dirname(__file__), name) + +# Return the expected registry file name +def getRefPath(): + return _registryFileName(qtVersion()) + +# Return the registry file name, either that of the current +# version or fall back to a previous patch release +def getEffectiveRefPath(): + refpath = getRefPath() + if os.path.exists(refpath): + return refpath + version = qtVersion() + majorVersion = version[0] + minorVersion = version[1] + patchVersion = version[2] + while patchVersion >= 0: + file = _registryFileName((majorVersion, minorVersion, patchVersion)) + if os.path.exists(file): + return file + patchVersion = patchVersion - 1 + return refpath + +class Formatter(object): + """ + Formatter is formatting the signature listing of an enumerator. + + It is written as context managers in order to avoid many callbacks. + The division in formatter and enumerator is done to keep the + unrelated tasks of enumeration and formatting apart. + """ + def __init__(self, outfile): + self.outfile = outfile + + def print(self, *args, **kw): + print(*args, file=self.outfile, **kw) if self.outfile else None + + @contextmanager + def module(self, mod_name): + self.mod_name = mod_name + self.print("") + self.print("# Module", mod_name) + self.print('if "{}" in sys.modules:'.format(mod_name)) + self.print(" dict.update({") + yield + self.print(" })") + + @contextmanager + def klass(self, class_name): + self.class_name = class_name + self.print() + self.print(" # class {}.{}:".format(self.mod_name, class_name)) + yield + + @contextmanager + def function(self, func_name, signature): + key = viskey = "{}.{}".format(self.class_name, func_name) + if key.endswith("lY"): + # Some classes like PySide2.QtGui.QContextMenuEvent have functions + # globalX and the same with Y. The gerrit robot thinks that this + # is a badly written "globally". Convince it by hiding this word. + viskey = viskey[:-1] + '""Y' + self.print(' "{}": {},'.format(viskey, signature)) + yield key + + +class ExactEnumerator(object): + """ + ExactEnumerator enumerates all signatures in a module as they are. + + This class is used for generating complete listings of all signatures. + An appropriate formatter should be supplied, if printable output + is desired. + """ + def __init__(self, formatter, result_type=dict): + self.fmt = formatter + self.result_type = result_type + + def module(self, mod_name): + __import__(mod_name) + with self.fmt.module(mod_name): + module = sys.modules[mod_name] + members = inspect.getmembers(module, inspect.isclass) + ret = self.result_type() + for class_name, klass in members: + ret.update(self.klass(class_name, klass)) + return ret + + def klass(self, class_name, klass): + with self.fmt.klass(class_name): + ret = self.function("__init__", klass) + # class_members = inspect.getmembers(klass) + # gives us also the inherited things. + class_members = sorted(list(klass.__dict__.items())) + for func_name, func in class_members: + ret.update(self.function(func_name, func)) + return ret + + def function(self, func_name, func): + ret = self.result_type() + signature = getattr(func, '__signature__', None) + if signature is not None: + with self.fmt.function(func_name, signature) as key: + ret[key] = signature + return ret + + +def simplify(signature): + if isinstance(signature, list): + # remove duplicates which still sometimes occour: + ret = set(simplify(sig) for sig in signature) + return sorted(ret) if len(ret) > 1 else list(ret)[0] + ret = [] + for pv in signature.parameters.values(): + txt = str(pv) + if txt == "self": + continue + txt = txt[txt.index(":") + 1:] + if "=" in txt: + txt = txt[:txt.index("=")] + quote = txt[0] + if quote in ("'", '"') and txt[-1] == quote: + txt = txt[1:-1] + ret.append(txt) + return tuple(ret) + + +class SimplifyingEnumerator(ExactEnumerator): + """ + SimplifyingEnumerator enumerates all signatures in a module filtered. + + There are no default values, no variable + names and no self parameter. Only types are present after simplification. + The functions 'next' resp. '__next__' are removed + to make the output identical for Python 2 and 3. + An appropriate formatter should be supplied, if printable output + is desired. + """ + + def function(self, func_name, func): + ret = self.result_type() + signature = getattr(func, '__signature__', None) + sig = simplify(signature) if signature is not None else None + if sig is not None and func_name not in ("next", "__next__"): + with self.fmt.function(func_name, sig) as key: + ret[key] = sig + return ret + + +def enum_all(): + fmt = Formatter(None) + enu = SimplifyingEnumerator(fmt) + ret = enu.result_type() + for mod_name in all_modules: + ret.update(enu.module(mod_name)) + return ret + +def generate_all(): + refPath = getRefPath() + module = os.path.basename(os.path.splitext(refPath)[0]) + with open(refPath, "w") as outfile, open(sourcepath) as f: + fmt = Formatter(outfile) + enu = SimplifyingEnumerator(fmt) + lines = f.readlines() + license_line = next((lno for lno, line in enumerate(lines) + if "$QT_END_LICENSE$" in line)) + fmt.print("".join(lines[:license_line + 3])) + fmt.print(dedent('''\ + """ + This file contains the simplified signatures for all functions in PySide + for module '{}'. There are no default values, no variable + names and no self parameter. Only types are present after simplification. + The functions 'next' resp. '__next__' are removed + to make the output identical for Python 2 and 3. + """ + '''.format(module))) + fmt.print("import sys") + fmt.print("") + fmt.print("dict = {}") + for mod_name in all_modules: + enu.module(mod_name) + fmt.print("# eof") + +def __main__(): + print("+++ generating {}. You should probably check this file in." + .format(getRefPath())) + generate_all() + +if __name__ == "__main__": + __main__() diff --git a/sources/pyside2/tests/registry/util.py b/sources/pyside2/tests/registry/util.py new file mode 100644 index 0000000..b2a2464 --- /dev/null +++ b/sources/pyside2/tests/registry/util.py @@ -0,0 +1,100 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function, absolute_import + +""" +Supporting isolation of warnings + +Warnings in unittests are not isolated. +We sometimes use warnings to conveniently accumulate error messages +and eventually report them afterwards as error. +""" + +import sys +import warnings +import re +from contextlib import contextmanager + +warn_name = "__warningregistry__" +ignore_re = 'Not importing directory .*' + +@contextmanager +def isolate_warnings(): + save_warnings = {} + for name, mod in sys.modules.items(): + if mod and hasattr(mod, warn_name): + save_warnings[name] = mod.__dict__[warn_name] + delattr(mod, warn_name) + else: + save_warnings[name] = None + yield + for name, warn in save_warnings.items(): + mod = sys.modules[name] + if mod: + setattr(mod, warn_name, warn) + if warn is None: + delattr(mod, warn_name) + +@contextmanager +def suppress_warnings(): + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + yield + +def check_warnings(): + for name, mod in sys.modules.items(): + if mod: + reg = getattr(mod, warn_name, None) + if reg: + # XXX We need to filter warnings for Python 2. + # This should be avoided by renaming the duplicate folders. + for k in reg: + if type(k) == tuple and re.match(ignore_re, k[0]): + continue + return True + return False + +def warn(message, category=None, stacklevel=1): + """Issue a warning with the default 'RuntimeWarning'""" + if category is None: + category = UserWarning + warnings.warn(message, category, stacklevel) + +# eof diff --git a/sources/pyside2/tests/run_test.sh b/sources/pyside2/tests/run_test.sh new file mode 100755 index 0000000..f059ac0 --- /dev/null +++ b/sources/pyside2/tests/run_test.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +# This is a nasty workaround of a CTest limitation +# of setting the environment variables for the test. + +# $1: LD_LIBRARY_PATH +# $2: $PYTHONPATH +# $3: python executable +# $4: test file + +export LD_LIBRARY_PATH=$1:$LD_LIBRARY_PATH +export PYTHONPATH=$2:$PYTHONPATH +$3 $4 diff --git a/sources/pyside2/tests/signals/CMakeLists.txt b/sources/pyside2/tests/signals/CMakeLists.txt new file mode 100644 index 0000000..fe06a34 --- /dev/null +++ b/sources/pyside2/tests/signals/CMakeLists.txt @@ -0,0 +1,40 @@ +PYSIDE_TEST(args_dont_match_test.py) +PYSIDE_TEST(bug_79.py) +PYSIDE_TEST(bug_189.py) +PYSIDE_TEST(bug_311.py) +PYSIDE_TEST(bug_312.py) +PYSIDE_TEST(bug_319.py) +PYSIDE_TEST(decorators_test.py) +PYSIDE_TEST(disconnect_test.py) +PYSIDE_TEST(invalid_callback_test.py) +PYSIDE_TEST(lambda_gui_test.py) +PYSIDE_TEST(lambda_test.py) +PYSIDE_TEST(leaking_signal_test.py) +PYSIDE_TEST(multiple_connections_gui_test.py) +PYSIDE_TEST(multiple_connections_test.py) +PYSIDE_TEST(pysignal_test.py) +PYSIDE_TEST(qobject_destroyed_test.py) +PYSIDE_TEST(qobject_receivers_test.py) +PYSIDE_TEST(qobject_sender_test.py) +PYSIDE_TEST(ref01_test.py) +PYSIDE_TEST(ref02_test.py) +PYSIDE_TEST(ref03_test.py) +PYSIDE_TEST(ref04_test.py) +PYSIDE_TEST(ref05_test.py) +PYSIDE_TEST(ref06_test.py) +PYSIDE_TEST(segfault_proxyparent_test.py) +PYSIDE_TEST(self_connect_test.py) +PYSIDE_TEST(short_circuit_test.py) +PYSIDE_TEST(signal2signal_connect_test.py) +PYSIDE_TEST(signal_autoconnect_test.py) +PYSIDE_TEST(signal_connectiontype_support_test.py) +PYSIDE_TEST(signal_emission_gui_test.py) +PYSIDE_TEST(signal_emission_test.py) +PYSIDE_TEST(signal_func_test.py) +PYSIDE_TEST(signal_manager_refcount_test.py) +PYSIDE_TEST(signal_number_limit_test.py) +PYSIDE_TEST(signal_object_test.py) +PYSIDE_TEST(signal_signature_test.py) +PYSIDE_TEST(signal_with_primitive_type_test.py) +PYSIDE_TEST(slot_reference_count_test.py) +PYSIDE_TEST(static_metaobject_test.py) diff --git a/sources/pyside2/tests/signals/args_dont_match_test.py b/sources/pyside2/tests/signals/args_dont_match_test.py new file mode 100644 index 0000000..f50611a --- /dev/null +++ b/sources/pyside2/tests/signals/args_dont_match_test.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import * + +class ArgsDontMatch(unittest.TestCase): + + def callback(self, arg1): + self.ok = True + + def testConnectSignalToSlotWithLessArgs(self): + self.ok = False + obj1 = QObject() + QObject.connect(obj1, SIGNAL('the_signal(int, int, int)'), self.callback) + obj1.emit(SIGNAL('the_signal(int, int, int)'), 1, 2, 3) + + self.assertTrue(self.ok) + + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/bug_189.py b/sources/pyside2/tests/signals/bug_189.py new file mode 100644 index 0000000..51810b6 --- /dev/null +++ b/sources/pyside2/tests/signals/bug_189.py @@ -0,0 +1,54 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2 import QtCore, QtWidgets +from helper import UsesQApplication + +class TestBugPYSIDE189(UsesQApplication): + + def testDisconnect(self): + # Disconnecting from a signal owned by a destroyed object + # should raise an exception, not segfault. + def onValueChanged(self, value): + pass + + sld = QtWidgets.QSlider() + sld.valueChanged.connect(onValueChanged) + + sld.deleteLater() + + QtCore.QTimer.singleShot(0, self.app.quit) + self.app.exec_() + + self.assertRaises(RuntimeError, sld.valueChanged.disconnect, onValueChanged) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/bug_311.py b/sources/pyside2/tests/signals/bug_311.py new file mode 100644 index 0000000..2f77bb9 --- /dev/null +++ b/sources/pyside2/tests/signals/bug_311.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2 import QtCore +from helper import UsesQCoreApplication + +class DerivedDate(QtCore.QDate): + def __init__(self,y,m,d): + super(DerivedDate,self).__init__(y,m,d) + +class Emitter(QtCore.QObject): + dateSignal1 = QtCore.Signal(QtCore.QDate) + dateSignal2 = QtCore.Signal(DerivedDate) + tupleSignal = QtCore.Signal(tuple) + +class SignaltoSignalTest(UsesQCoreApplication): + def myCb(self, dt): + self._dt = dt + + def testBug(self): + e = Emitter() + d = DerivedDate(2010,8,24) + self._dt = None + e.dateSignal1.connect(self.myCb) + e.dateSignal1.emit(d) + self.assertEqual(self._dt, d) + + self._dt = None + e.dateSignal2.connect(self.myCb) + e.dateSignal2.emit(d) + self.assertEqual(self._dt, d) + + myTuple = (5, 6, 7) + self._dt = None + e.tupleSignal.connect(self.myCb) + e.tupleSignal.emit(myTuple) + self.assertEqual(myTuple, self._dt) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/signals/bug_312.py b/sources/pyside2/tests/signals/bug_312.py new file mode 100644 index 0000000..0801965 --- /dev/null +++ b/sources/pyside2/tests/signals/bug_312.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sys +from PySide2.QtCore import QObject, SIGNAL + +MAX_LOOPS = 5 +MAX_OBJECTS = 200 + +class Dummy(object): + def __init__(self, parent): + self._parent = parent + + def callback(self): + self._called = True + +class MultipleSlots(unittest.TestCase): + def myCB(self): + self._count += 1 + + """ + def testUnboundSignal(self): + o = QObject() + self._count = 0 + for i in range(MAX_OBJECTS): + QObject.connect(o, SIGNAL("fire()"), lambda: self.myCB()) + + o.emit(SIGNAL("fire()")) + self.assertEqual(self._count, MAX_OBJECTS) + + """ + def testDisconnectCleanup(self): + for c in range(MAX_LOOPS): + self._count = 0 + self._senders = [] + for i in range(MAX_OBJECTS): + o = QObject() + QObject.connect(o, SIGNAL("fire()"), lambda: self.myCB()) + self._senders.append(o) + o.emit(SIGNAL("fire()")) + + self.assertEqual(self._count, MAX_OBJECTS) + + #delete all senders will disconnect the signals + self._senders = [] + +if __name__ == '__main__': + unittest.main() + + diff --git a/sources/pyside2/tests/signals/bug_319.py b/sources/pyside2/tests/signals/bug_319.py new file mode 100644 index 0000000..7210af0 --- /dev/null +++ b/sources/pyside2/tests/signals/bug_319.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2 import QtCore +from helper import UsesQCoreApplication + +class Listener(QtCore.QObject): + def __init__(self): + QtCore.QObject.__init__(self, None) + self._phrase = [] + + @QtCore.Slot(tuple) + def listen(self, words): + for w in words: + self._phrase.append(w) + +class Communicate(QtCore.QObject): + # create a new signal on the fly and name it 'speak' + speak = QtCore.Signal(tuple) + +class SignaltoSignalTest(UsesQCoreApplication): + def testBug(self): + someone = Communicate() + someone2 = Listener() + # connect signal and slot + someone.speak.connect(someone2.listen) + # emit 'speak' signal + talk = ("one","two","three") + someone.speak.emit(talk) + self.assertEqual(someone2._phrase, list(talk)) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/signals/bug_79.py b/sources/pyside2/tests/signals/bug_79.py new file mode 100644 index 0000000..9eb783d --- /dev/null +++ b/sources/pyside2/tests/signals/bug_79.py @@ -0,0 +1,69 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function +import unittest +import sys +import gc + +from PySide2 import QtGui, QtWidgets + +try: + from sys import gettotalrefcount + skiptest = False +except ImportError: + skiptest = True + +class ConnectTest(unittest.TestCase): + + def callback(self, o): + print("callback") + self._called = o + + def testNoLeaks_ConnectAndDisconnect(self): + self._called = None + app = QtWidgets.QApplication([]) + o = QtWidgets.QTreeView() + o.setModel(QtGui.QStandardItemModel()) + o.selectionModel().destroyed.connect(self.callback) + o.selectionModel().destroyed.disconnect(self.callback) + gc.collect() + # if this is no debug build, then we check at least that + # we do not crash any longer. + if not skiptest: + total = sys.gettotalrefcount() + for idx in range(1000): + o.selectionModel().destroyed.connect(self.callback) + o.selectionModel().destroyed.disconnect(self.callback) + gc.collect() + if not skiptest: + self.assertTrue(abs(gettotalrefcount() - total) < 10) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/decorators_test.py b/sources/pyside2/tests/signals/decorators_test.py new file mode 100644 index 0000000..e5a8be4 --- /dev/null +++ b/sources/pyside2/tests/signals/decorators_test.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QObject, Slot, SIGNAL, SLOT + +class MyObject(QObject): + def __init__(self, parent=None): + QObject.__init__(self, parent) + self._slotCalledCount = 0 + + @Slot() + def mySlot(self): + self._slotCalledCount = self._slotCalledCount + 1 + + @Slot(int) + @Slot('QString') + def mySlot2(self, arg0): + self._slotCalledCount = self._slotCalledCount + 1 + + @Slot(name='mySlot3') + def foo(self): + self._slotCalledCount = self._slotCalledCount + 1 + + @Slot(str, int) + def mySlot4(self, a, b): + self._slotCalledCount = self._slotCalledCount + 1 + + @Slot(result=int) + def mySlot5(self): + self._slotCalledCount = self._slotCalledCount + 1 + + @Slot(result=QObject) + def mySlot6(self): + self._slotCalledCount = self._slotCalledCount + 1 + +class StaticMetaObjectTest(unittest.TestCase): + + def testSignalPropagation(self): + o = MyObject() + m = o.metaObject() + self.assertTrue(m.indexOfSlot('mySlot()') > 0) + self.assertTrue(m.indexOfSlot('mySlot2(int)') > 0) + self.assertTrue(m.indexOfSlot('mySlot2(QString)') > 0) + self.assertTrue(m.indexOfSlot('mySlot3()') > 0) + self.assertTrue(m.indexOfSlot('mySlot4(QString,int)') > 0) + + def testEmission(self): + o = MyObject() + o.connect(SIGNAL("mySignal()"), o, SLOT("mySlot()")) + o.emit(SIGNAL("mySignal()")) + self.assertTrue(o._slotCalledCount == 1) + + def testResult(self): + o = MyObject() + mo = o.metaObject() + i = mo.indexOfSlot('mySlot5()') + m = mo.method(i) + self.assertEqual(m.typeName(), "int") + + def testResultObject(self): + o = MyObject() + mo = o.metaObject() + i = mo.indexOfSlot('mySlot6()') + m = mo.method(i) + self.assertEqual(m.typeName(), "QObject*") + +class SlotWithoutArgs(unittest.TestCase): + + def testError(self): + # It should be an error to call the slot without the + # arguments, as just @Slot would end up in a slot + # accepting argument functions + self.assertRaises(TypeError, Slot, lambda: 3) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/disconnect_test.py b/sources/pyside2/tests/signals/disconnect_test.py new file mode 100644 index 0000000..79c33ed --- /dev/null +++ b/sources/pyside2/tests/signals/disconnect_test.py @@ -0,0 +1,88 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import os, sys +sys.path.insert(0, os.path.join("..", "pysidetest")) + +import unittest +from PySide2.QtCore import * +from testbinding import TestObject + + +class Foo(QObject): + bar = Signal() + +class TestDisconnect(unittest.TestCase): + def theSlot1(self): + self.called1 = True + + def theSlot2(self): + self.called2 = True + + def testIt(self): + self.called1 = False + self.called2 = False + f = Foo() + f.bar.connect(self.theSlot1) + f.bar.connect(self.theSlot2) + f.bar.emit() + self.assertTrue(self.called1) + self.assertTrue(self.called2) + + self.called1 = False + self.called2 = False + f.bar.disconnect() + f.bar.emit() + self.assertFalse(self.called1) + self.assertFalse(self.called2) + + def testDuringCallback(self): + """ Test to see if the C++ object for a connection is accessed after the + method returns. This causes a segfault if the memory that was used by the + C++ object has been reused. """ + + self.called = False + obj = TestObject(0) + def callback(): + obj.signalWithDefaultValue.disconnect(callback) + + # Connect more callbacks to try to overwrite memory + for i in range(1000): + obj.signalWithDefaultValue.connect(lambda: None) + + self.called = True + + # A non-None return value is needed + return True + obj.signalWithDefaultValue.connect(callback) + obj.signalWithDefaultValue.emit() + self.assertTrue(self.called) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/invalid_callback_test.py b/sources/pyside2/tests/signals/invalid_callback_test.py new file mode 100644 index 0000000..b3b301d --- /dev/null +++ b/sources/pyside2/tests/signals/invalid_callback_test.py @@ -0,0 +1,56 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for passing invalid callbacks to QObject.connect''' + +import unittest + +from PySide2.QtCore import QObject, SIGNAL + +class InvalidCallback(unittest.TestCase): + '''Test case for passing an invalid callback to QObject.connect''' + + def setUp(self): + #Acquire resources + self.obj = QObject() + + def tearDown(self): + #Release resources + try: + del self.obj + except AttributeError: + pass + + def testIntegerCb(self): + #Test passing an int as callback to QObject.connect + self.assertRaises(TypeError, QObject.connect, self.obj, + SIGNAL('destroyed()'), 42) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/signals/lambda_gui_test.py b/sources/pyside2/tests/signals/lambda_gui_test.py new file mode 100644 index 0000000..f6eb7b3 --- /dev/null +++ b/sources/pyside2/tests/signals/lambda_gui_test.py @@ -0,0 +1,73 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Connecting lambda to gui signals''' + +import unittest + +from PySide2.QtCore import QObject, SIGNAL + +try: + from PySide2.QtWidgets import QSpinBox, QPushButton + hasQtGui = True +except ImportError: + hasQtGui = False + +from helper import UsesQApplication + +if hasQtGui: + class Control: + def __init__(self): + self.arg = False + + class QtGuiSigLambda(UsesQApplication): + + def testButton(self): + #Connecting a lambda to a QPushButton.clicked() + obj = QPushButton('label') + ctr = Control() + func = lambda: setattr(ctr, 'arg', True) + QObject.connect(obj, SIGNAL('clicked()'), func) + obj.click() + self.assertTrue(ctr.arg) + QObject.disconnect(obj, SIGNAL('clicked()'), func) + + + def testSpinButton(self): + #Connecting a lambda to a QPushButton.clicked() + obj = QSpinBox() + ctr = Control() + arg = 444 + func = lambda x: setattr(ctr, 'arg', 444) + QObject.connect(obj, SIGNAL('valueChanged(int)'), func) + obj.setValue(444) + self.assertEqual(ctr.arg, arg) + QObject.disconnect(obj, SIGNAL('valueChanged(int)'), func) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/lambda_test.py b/sources/pyside2/tests/signals/lambda_test.py new file mode 100644 index 0000000..c22674f --- /dev/null +++ b/sources/pyside2/tests/signals/lambda_test.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Connecting lambda to signals''' + +import sys +import unittest + +from PySide2.QtCore import QObject, SIGNAL, QProcess + +from helper import UsesQCoreApplication + + +class Dummy(QObject): + + def __init__(self, *args): + super(Dummy, self).__init__(*args) + + +class BasicCase(unittest.TestCase): + + def testSimplePythonSignalNoArgs(self): + #Connecting a lambda to a simple python signal without arguments + obj = Dummy() + QObject.connect(obj, SIGNAL('foo()'), + lambda: setattr(obj, 'called', True)) + obj.emit(SIGNAL('foo()')) + self.assertTrue(obj.called) + + def testSimplePythonSignal(self): + #Connecting a lambda to a simple python signal witharguments + obj = Dummy() + arg = 42 + QObject.connect(obj, SIGNAL('foo(int)'), + lambda x: setattr(obj, 'arg', 42)) + obj.emit(SIGNAL('foo(int)'), arg) + self.assertEqual(obj.arg, arg) + + +class QtSigLambda(UsesQCoreApplication): + + qapplication = True + + def testNoArgs(self): + '''Connecting a lambda to a signal without arguments''' + proc = QProcess() + dummy = Dummy() + QObject.connect(proc, SIGNAL('started()'), + lambda: setattr(dummy, 'called', True)) + proc.start(sys.executable, ['-c', '""']) + proc.waitForFinished() + self.assertTrue(dummy.called) + + def testWithArgs(self): + '''Connecting a lambda to a signal with arguments''' + proc = QProcess() + dummy = Dummy() + QObject.connect(proc, SIGNAL('finished(int)'), + lambda x: setattr(dummy, 'called', x)) + proc.start(sys.executable, ['-c', '""']) + proc.waitForFinished() + self.assertEqual(dummy.called, proc.exitCode()) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/leaking_signal_test.py b/sources/pyside2/tests/signals/leaking_signal_test.py new file mode 100644 index 0000000..f8ac041 --- /dev/null +++ b/sources/pyside2/tests/signals/leaking_signal_test.py @@ -0,0 +1,43 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2 import QtCore +import weakref + +class LeakingSignal(unittest.TestCase): + + def testLeakingSignal(self): + # Was segfaulting when the signal was garbage collected. + class Emitter(QtCore.QObject): + my_signal = QtCore.Signal(object) + + emitter = Emitter() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/multiple_connections_gui_test.py b/sources/pyside2/tests/signals/multiple_connections_gui_test.py new file mode 100644 index 0000000..a80f627 --- /dev/null +++ b/sources/pyside2/tests/signals/multiple_connections_gui_test.py @@ -0,0 +1,88 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import random +from functools import partial + +from PySide2.QtCore import QObject, SIGNAL + +try: + from PySide2.QtWidgets import QPushButton, QSpinBox + hasQtGui = True +except ImportError: + hasQtGui = False + +from helper import BasicPySlotCase, UsesQApplication + +class MultipleSignalConnections(unittest.TestCase): + '''Base class for multiple signal connection testing''' + + def run_many(self, sender, signal, emitter, receivers, args=None): + """Utility method to connect a list of receivers to a signal. + sender - QObject that will emit the signal + signal - string with the signal signature + emitter - the callable that will trigger the signal + receivers - list of BasicPySlotCase instances + args - tuple with the arguments to be sent. + """ + + if args is None: + args = tuple() + + for rec in receivers: + rec.setUp() + QObject.connect(sender, SIGNAL(signal), rec.cb) + rec.args = tuple(args) + + emitter(*args) + + for rec in receivers: + self.assertTrue(rec.called) + + +if hasQtGui: + class QtGuiMultipleSlots(UsesQApplication, MultipleSignalConnections): + '''Multiple connections to QtGui signals''' + + def testButtonClick(self): + """Multiple connections to QPushButton.clicked()""" + sender = QPushButton('button') + receivers = [BasicPySlotCase() for x in range(30)] + self.run_many(sender, 'clicked()', sender.click, receivers) + + def testSpinBoxValueChanged(self): + """Multiple connections to QSpinBox.valueChanged(int)""" + sender = QSpinBox() + #FIXME if number of receivers if higher than 50, segfaults + receivers = [BasicPySlotCase() for x in range(10)] + self.run_many(sender, 'valueChanged(int)', sender.setValue, + receivers, (1,)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/multiple_connections_test.py b/sources/pyside2/tests/signals/multiple_connections_test.py new file mode 100644 index 0000000..2ce780e --- /dev/null +++ b/sources/pyside2/tests/signals/multiple_connections_test.py @@ -0,0 +1,103 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +import unittest +from functools import partial + +from PySide2.QtCore import QObject, SIGNAL, QProcess + +from helper import BasicPySlotCase, UsesQCoreApplication + + +class MultipleSignalConnections(unittest.TestCase): + '''Base class for multiple signal connection testing''' + + def run_many(self, sender, signal, emitter, receivers, args=None): + """Utility method to connect a list of receivers to a signal. + sender - QObject that will emit the signal + signal - string with the signal signature + emitter - the callable that will trigger the signal + receivers - list of BasicPySlotCase instances + args - tuple with the arguments to be sent. + """ + + if args is None: + args = tuple() + for rec in receivers: + rec.setUp() + self.assertTrue(QObject.connect(sender, SIGNAL(signal), rec.cb)) + rec.args = tuple(args) + + emitter(*args) + + for rec in receivers: + self.assertTrue(rec.called) + + +class PythonMultipleSlots(UsesQCoreApplication, MultipleSignalConnections): + '''Multiple connections to python signals''' + + def testPythonSignal(self): + """Multiple connections to a python signal (short-circuit)""" + + class Dummy(QObject): + pass + + sender = Dummy() + receivers = [BasicPySlotCase() for x in range(10)] + self.run_many(sender, 'foobar(int)', partial(sender.emit,SIGNAL('foobar(int)')), receivers, (0, )) + + +class QProcessMultipleSlots(UsesQCoreApplication, MultipleSignalConnections): + '''Multiple connections to QProcess signals''' + + def testQProcessStarted(self): + '''Multiple connections to QProcess.started()''' + sender = QProcess() + receivers = [BasicPySlotCase() for x in range(10)] + + def start_proc(*args): + sender.start(sys.executable, ['-c', '""']) + sender.waitForFinished() + + self.run_many(sender, 'started()', start_proc, receivers) + + def testQProcessFinished(self): + '''Multiple connections to QProcess.finished(int)''' + sender = QProcess() + receivers = [BasicPySlotCase() for x in range(10)] + + def start_proc(*args): + sender.start(sys.executable, ['-c', '""']) + sender.waitForFinished() + + self.run_many(sender, 'finished(int)', start_proc, receivers, (0,)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/pysignal_test.py b/sources/pyside2/tests/signals/pysignal_test.py new file mode 100644 index 0000000..a5f2d8c --- /dev/null +++ b/sources/pyside2/tests/signals/pysignal_test.py @@ -0,0 +1,214 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QObject, SIGNAL, SLOT, Qt + +try: + from PySide2.QtWidgets import QSpinBox, QApplication, QWidget + hasQtGui = True +except ImportError: + hasQtGui = False + +from helper import UsesQApplication + +class Dummy(QObject): + """Dummy class used in this test.""" + def __init__(self, parent=None): + QObject.__init__(self, parent) + + def callDummy(self): + self.emit(SIGNAL("dummy(PyObject)"), "PyObject") + + def callDummy2(self): + lst = [] + lst.append("item1") + lst.append("item2") + lst.append("item3") + self.emit(SIGNAL("dummy2(PyObject, PyObject)"), "PyObject0", lst) + + +class PyObjectType(UsesQApplication): + def mySlot(self, arg): + self.assertEqual(arg, "PyObject") + self.called = True + self.callCount += 1 + + def mySlot2(self, arg0, arg1): + self.assertEqual(arg0, "PyObject0") + self.assertEqual(arg1[0], "item1") + self.assertEqual(arg1[1], "item2") + self.assertEqual(arg1[2], "item3") + self.callCount += 1 + if self.running: + self.app.quit() + + def setUp(self): + super(PyObjectType, self).setUp() + self.callCount = 0 + self.running = False + + def testWithOneArg(self): + o = Dummy() + o.connect(SIGNAL("dummy(PyObject)"), self.mySlot) + o.callDummy() + self.assertEqual(self.callCount, 1) + + def testWithTwoArg(self): + o = Dummy() + o.connect(SIGNAL("dummy2(PyObject,PyObject)"), self.mySlot2) + o.callDummy2() + self.assertEqual(self.callCount, 1) + + def testAsyncSignal(self): + self.called = False + self.running = True + o = Dummy() + o.connect(SIGNAL("dummy2(PyObject,PyObject)"), self.mySlot2, Qt.QueuedConnection) + o.callDummy2() + self.app.exec_() + self.assertEqual(self.callCount, 1) + + def testTwice(self): + self.called = False + self.running = True + o = Dummy() + o.connect(SIGNAL("dummy2(PyObject,PyObject)"), self.mySlot2, Qt.QueuedConnection) + o.callDummy2() + o.callDummy2() + self.app.exec_() + self.assertEqual(self.callCount, 2) + +class PythonSigSlot(unittest.TestCase): + def setUp(self): + self.called = False + + def tearDown(self): + try: + del self.args + except: + pass + + def callback(self, *args): + if tuple(self.args) == args: + self.called = True + + def testNoArgs(self): + """Python signal and slots without arguments""" + obj1 = Dummy() + + QObject.connect(obj1, SIGNAL('foo()'), self.callback) + self.args = tuple() + obj1.emit(SIGNAL('foo()'), *self.args) + + self.assertTrue(self.called) + + def testWithArgs(self): + """Python signal and slots with integer arguments""" + obj1 = Dummy() + + QObject.connect(obj1, SIGNAL('foo(int)'), self.callback) + self.args = (42,) + obj1.emit(SIGNAL('foo(int)'), *self.args) + + self.assertTrue(self.called) + + + def testDisconnect(self): + obj1 = Dummy() + + QObject.connect(obj1, SIGNAL('foo(int)'), self.callback) + QObject.disconnect(obj1, SIGNAL('foo(int)'), self.callback) + + self.args = (42, ) + obj1.emit(SIGNAL('foo(int)'), *self.args) + + self.assertTrue(not self.called) + + +if hasQtGui: + class SpinBoxPySignal(UsesQApplication): + """Tests the connection of python signals to QSpinBox qt slots.""" + + def setUp(self): + super(SpinBoxPySignal, self).setUp() + self.obj = Dummy() + self.spin = QSpinBox() + self.spin.setValue(0) + + def tearDown(self): + super(SpinBoxPySignal, self).tearDown() + del self.obj + del self.spin + + def testValueChanged(self): + """Emission of a python signal to QSpinBox setValue(int)""" + QObject.connect(self.obj, SIGNAL('dummy(int)'), self.spin, SLOT('setValue(int)')) + self.assertEqual(self.spin.value(), 0) + + self.obj.emit(SIGNAL('dummy(int)'), 4) + self.assertEqual(self.spin.value(), 4) + + def testValueChangedMultiple(self): + """Multiple emissions of a python signal to QSpinBox setValue(int)""" + QObject.connect(self.obj, SIGNAL('dummy(int)'), self.spin, SLOT('setValue(int)')) + self.assertEqual(self.spin.value(), 0) + + self.obj.emit(SIGNAL('dummy(int)'), 4) + self.assertEqual(self.spin.value(), 4) + + self.obj.emit(SIGNAL('dummy(int)'), 77) + self.assertEqual(self.spin.value(), 77) + + +if hasQtGui: + class WidgetPySignal(UsesQApplication): + """Tests the connection of python signals to QWidget qt slots.""" + + def setUp(self): + super(WidgetPySignal, self).setUp() + self.obj = Dummy() + self.widget = QWidget() + + def tearDown(self): + super(WidgetPySignal, self).tearDown() + del self.obj + del self.widget + + def testShow(self): + """Emission of a python signal to QWidget slot show()""" + self.widget.hide() + + QObject.connect(self.obj, SIGNAL('dummy()'), self.widget, SLOT('show()')) + self.assertTrue(not self.widget.isVisible()) + + self.obj.emit(SIGNAL('dummy()')) + self.assertTrue(self.widget.isVisible()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/qobject_destroyed_test.py b/sources/pyside2/tests/signals/qobject_destroyed_test.py new file mode 100644 index 0000000..87e78c2 --- /dev/null +++ b/sources/pyside2/tests/signals/qobject_destroyed_test.py @@ -0,0 +1,50 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QObject, SIGNAL + +class QObjectDestroyed(unittest.TestCase): + """Very simple test case for the destroyed() signal of QObject""" + + def setUp(self): + self.called = False + + def destroyed_cb(self): + self.called = True + + def testDestroyed(self): + """Emission of QObject.destroyed() to a python slot""" + obj = QObject() + QObject.connect(obj, SIGNAL('destroyed()'), self.destroyed_cb) + del obj + self.assertTrue(self.called) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/qobject_receivers_test.py b/sources/pyside2/tests/signals/qobject_receivers_test.py new file mode 100644 index 0000000..629fda5 --- /dev/null +++ b/sources/pyside2/tests/signals/qobject_receivers_test.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test case for QObject.receivers()''' + +import unittest +from PySide2.QtCore import * + +def cute_slot(): + pass + +class TestQObjectReceivers(unittest.TestCase): + '''Test case for QObject::receivers''' + + def testBasic(self): + sender = QObject() + receiver1 = QObject() + receiver2 = QObject() + self.assertEqual(sender.receivers(SIGNAL("")), 0) + sender.connect(sender, SIGNAL("destroyed()"), receiver1, SLOT("deleteLater()")) + self.assertEqual(sender.receivers(SIGNAL("destroyed()")), 1) + sender.connect(sender, SIGNAL("destroyed()"), receiver2, SLOT("deleteLater()")) + self.assertEqual(sender.receivers(SIGNAL("destroyed()")), 2) + sender.disconnect(sender, SIGNAL("destroyed()"), receiver2, SLOT("deleteLater()")) + self.assertEqual(sender.receivers(SIGNAL("destroyed()")), 1) + del receiver2 + del receiver1 + del sender + + def testPySlots(self): + sender = QObject() + receiver = QObject() + sender.connect(sender, SIGNAL("destroyed()"), cute_slot) + self.assertEqual(sender.receivers(SIGNAL("destroyed( )")), 1) + sender.connect(sender, SIGNAL("destroyed()"), receiver, SLOT("deleteLater()")) + self.assertEqual(sender.receivers(SIGNAL("destroyed()")), 2) + del sender + del receiver + + def testPySignals(self): + sender = QObject() + receiver = QObject() + sender.connect(sender, SIGNAL("some_dynamic_signal()"), cute_slot) + self.assertEqual(sender.receivers(SIGNAL("some_dynamic_signal( )")), 1) + sender.connect(sender, SIGNAL("some_dynamic_signal()"), receiver, SLOT("deleteLater()")) + self.assertEqual(sender.receivers(SIGNAL("some_dynamic_signal( )")), 2) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/qobject_sender_test.py b/sources/pyside2/tests/signals/qobject_sender_test.py new file mode 100644 index 0000000..432450b --- /dev/null +++ b/sources/pyside2/tests/signals/qobject_sender_test.py @@ -0,0 +1,120 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for QObject.sender()''' + +import unittest +from PySide2.QtCore import * +from helper import UsesQCoreApplication + +class ExtQTimer(QTimer): + def __init__(self): + QTimer.__init__(self) + +class Receiver(QObject): + def __init__(self): + QObject.__init__(self) + self.the_sender = None + + def callback(self): + self.the_sender = self.sender() + if QCoreApplication.instance(): + QCoreApplication.instance().exit() + +class ObjectSenderTest(unittest.TestCase): + '''Test case for QObject.sender() method.''' + + def testSenderPythonSignal(self): + sender = QObject() + recv = Receiver() + QObject.connect(sender, SIGNAL('foo()'), recv.callback) + sender.emit(SIGNAL('foo()')) + self.assertEqual(sender, recv.the_sender) + +class ObjectSenderCheckOnReceiverTest(unittest.TestCase): + '''Test case for QObject.sender() method, this one tests the equality on the Receiver object.''' + + def testSenderPythonSignal(self): + sender = QObject() + recv = Receiver() + QObject.connect(sender, SIGNAL('foo()'), recv.callback) + sender.emit(SIGNAL('foo()')) + self.assertEqual(sender, recv.the_sender) + +class ObjectSenderWithQAppTest(UsesQCoreApplication): + '''Test case for QObject.sender() method with QApplication.''' + + def testSenderCppSignal(self): + sender = QTimer() + sender.setObjectName('foo') + recv = Receiver() + QObject.connect(sender, SIGNAL('timeout()'), recv.callback) + sender.start(10) + self.app.exec_() + self.assertEqual(sender, recv.the_sender) + + def testSenderCppSignalSingleShotTimer(self): + recv = Receiver() + QTimer.singleShot(10, recv.callback) + self.app.exec_() + self.assertTrue(isinstance(recv.the_sender, QObject)) + + def testSenderCppSignalWithPythonExtendedClass(self): + sender = ExtQTimer() + recv = Receiver() + QObject.connect(sender, SIGNAL('timeout()'), recv.callback) + sender.start(10) + self.app.exec_() + self.assertEqual(sender, recv.the_sender) + +class ObjectSenderWithQAppCheckOnReceiverTest(UsesQCoreApplication): + '''Test case for QObject.sender() method with QApplication.''' + + def testSenderCppSignal(self): + sender = QTimer() + sender.setObjectName('foo') + recv = Receiver() + QObject.connect(sender, SIGNAL('timeout()'), recv.callback) + sender.start(10) + self.app.exec_() + self.assertEqual(sender, recv.the_sender) + + def testSenderCppSignalWithPythonExtendedClass(self): + sender = ExtQTimer() + recv = Receiver() + QObject.connect(sender, SIGNAL('timeout()'), recv.callback) + sender.start(10) + self.app.exec_() + self.assertEqual(sender, recv.the_sender) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/signals/ref01_test.py b/sources/pyside2/tests/signals/ref01_test.py new file mode 100644 index 0000000..e12dfc9 --- /dev/null +++ b/sources/pyside2/tests/signals/ref01_test.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QObject, Signal + +class BoundAndUnboundSignalsTest(unittest.TestCase): + + def setUp(self): + self.methods = set(('connect', 'disconnect', 'emit')) + + def tearDown(self): + del self.methods + + def testUnboundSignal(self): + self.assertEqual(type(QObject.destroyed), Signal) + self.assertFalse(self.methods.issubset(dir(QObject.destroyed))) + + def testBoundSignal(self): + obj = QObject() + self.assertNotEqual(type(obj.destroyed), Signal) + self.assertTrue(self.methods.issubset(dir(obj.destroyed))) + +if __name__ == '__main__': + unittest.main() + + diff --git a/sources/pyside2/tests/signals/ref02_test.py b/sources/pyside2/tests/signals/ref02_test.py new file mode 100644 index 0000000..5449d6a --- /dev/null +++ b/sources/pyside2/tests/signals/ref02_test.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QCoreApplication, QTimeLine +from helper import UsesQCoreApplication + +class NativeSignalsTest(UsesQCoreApplication): + + def setUp(self): + UsesQCoreApplication.setUp(self) + self.called = False + self.timeline = QTimeLine(100) + + def tearDown(self): + del self.called + del self.timeline + UsesQCoreApplication.tearDown(self) + + def testSignalWithIntArgument(self): + + def valueChangedSlot(value): + self.called = True + self.assertEqual(type(value), float) + self.app.quit() + + self.timeline.valueChanged.connect(valueChangedSlot) + self.timeline.start() + + self.app.exec_() + self.assertTrue(self.called) + + def testSignalWithoutArguments(self): + + def finishedSlot(): + self.called = True + self.app.quit() + + self.timeline.finished.connect(finishedSlot) + self.timeline.start() + + self.app.exec_() + self.assertTrue(self.called) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/signals/ref03_test.py b/sources/pyside2/tests/signals/ref03_test.py new file mode 100644 index 0000000..da24da6 --- /dev/null +++ b/sources/pyside2/tests/signals/ref03_test.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from sys import getrefcount +from PySide2.QtCore import QObject + +class DisconnectSignalsTest(unittest.TestCase): + + def setUp(self): + self.emitter = QObject() + + def tearDown(self): + del self.emitter + + def testConnectionRefCount(self): + + def destroyedSlot(): + pass + + self.assertEqual(getrefcount(destroyedSlot), 2) + self.emitter.destroyed.connect(destroyedSlot) + self.assertEqual(getrefcount(destroyedSlot), 3) + self.emitter.destroyed.disconnect(destroyedSlot) + self.assertEqual(getrefcount(destroyedSlot), 2) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/signals/ref04_test.py b/sources/pyside2/tests/signals/ref04_test.py new file mode 100644 index 0000000..033449c --- /dev/null +++ b/sources/pyside2/tests/signals/ref04_test.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QObject, Signal + +class ExtQObject(QObject): + + mySignal = Signal() + + def __init__(self): + QObject.__init__(self) + + +class UserSignalTest(unittest.TestCase): + + def setUp(self): + self.emitter = ExtQObject() + self.counter = 0 + + def tearDown(self): + del self.emitter + del self.counter + + def testConnectEmitDisconnect(self): + + def slot(): + self.counter += 1 + + self.emitter.mySignal.connect(slot) + + self.assertEqual(self.counter, 0) + self.emitter.mySignal.emit() + self.assertEqual(self.counter, 1) + self.emitter.mySignal.emit() + self.assertEqual(self.counter, 2) + + self.emitter.mySignal.disconnect(slot) + + self.emitter.mySignal.emit() + self.assertEqual(self.counter, 2) + +# def testConnectWithConfigureMethod(self): +# +# def slot(): +# self.counter += 1 +# +# self.emitter.pyqtConfigure(mySignal=slot) +# self.assertEqual(self.counter, 0) +# self.emitter.mySignal.emit() +# self.assertEqual(self.counter, 1) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/signals/ref05_test.py b/sources/pyside2/tests/signals/ref05_test.py new file mode 100644 index 0000000..9bc2993 --- /dev/null +++ b/sources/pyside2/tests/signals/ref05_test.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QObject, QCoreApplication, QTimeLine, Slot +from helper import UsesQCoreApplication + +class ExtQObject(QObject): + + def __init__(self): + QObject.__init__(self) + self.counter = 0 + + @Slot('qreal') + def foo(self, value): + self.counter += 1 + + +class UserSlotTest(UsesQCoreApplication): + + def setUp(self): + UsesQCoreApplication.setUp(self) + self.receiver = ExtQObject() + self.timeline = QTimeLine(100) + + def tearDown(self): + del self.timeline + del self.receiver + UsesQCoreApplication.tearDown(self) + + def testUserSlot(self): + self.timeline.setUpdateInterval(10) + + self.timeline.finished.connect(self.app.quit) + + self.timeline.valueChanged.connect(self.receiver.foo) + self.timeline.start() + + self.app.exec_() + + self.assertTrue(self.receiver.counter > 1) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/signals/ref06_test.py b/sources/pyside2/tests/signals/ref06_test.py new file mode 100644 index 0000000..a5b26b3 --- /dev/null +++ b/sources/pyside2/tests/signals/ref06_test.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import QObject, QCoreApplication, QTimeLine, Signal, Slot +from helper import UsesQCoreApplication + +class ExtQObject(QObject): + signalbetween = Signal('qreal') + + def __init__(self): + QObject.__init__(self) + self.counter = 0 + + @Slot('qreal') + def foo(self, value): + self.counter += 1 + + +class SignaltoSignalTest(UsesQCoreApplication): + + def setUp(self): + UsesQCoreApplication.setUp(self) + self.receiver = ExtQObject() + self.timeline = QTimeLine(100) + + def tearDown(self): + del self.timeline + del self.receiver + UsesQCoreApplication.tearDown(self) + + def testSignaltoSignal(self): + self.timeline.setUpdateInterval(10) + + self.timeline.finished.connect(self.app.quit) + + self.timeline.valueChanged.connect(self.receiver.signalbetween) + self.receiver.signalbetween.connect(self.receiver.foo) + + self.timeline.start() + + self.app.exec_() + + self.assertTrue(self.receiver.counter > 1) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/signals/segfault_proxyparent_test.py b/sources/pyside2/tests/signals/segfault_proxyparent_test.py new file mode 100644 index 0000000..758c788 --- /dev/null +++ b/sources/pyside2/tests/signals/segfault_proxyparent_test.py @@ -0,0 +1,86 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QObject, SIGNAL + +# Description of the problem +# After creating an PyObject that inherits from QObject, connecting it, +# deleting it and later creating another Python QObject-based object, this +# new object will point to the same memory position as the first one. + +# Somehow the underlying QObject also points to the same position. + +# In PyQt4, the connection works fine with the same memory behavior, +# so it looks like specific to SIP. + +class Dummy(QObject): + def __init__(self, parent=None): + QObject.__init__(self, parent) + +class Joe(QObject): + def __init__(self, parent=None): + QObject.__init__(self, parent) + +class SegfaultCase(unittest.TestCase): + """Test case for the segfault happening when parent() is called inside + ProxyObject""" + + def setUp(self): + self.called = False + + def tearDown(self): + try: + del self.args + except: + pass + + def callback(self, *args): + if tuple(self.args) == args: + self.called = True + + def testSegfault(self): + """Regression: Segfault for qobjects in the same memory position.""" + obj = Dummy() + QObject.connect(obj, SIGNAL('bar(int)'), self.callback) + self.args = (33,) + obj.emit(SIGNAL('bar(int)'), self.args[0]) + self.assertTrue(self.called) + del obj + + obj = Joe() + QObject.connect(obj, SIGNAL('bar(int)'), self.callback) + self.args = (33,) + obj.emit(SIGNAL('bar(int)'), self.args[0]) + self.assertTrue(self.called) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/signals/self_connect_test.py b/sources/pyside2/tests/signals/self_connect_test.py new file mode 100644 index 0000000..ee84a75 --- /dev/null +++ b/sources/pyside2/tests/signals/self_connect_test.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Using self.connect(signal, method)''' + +import unittest + +from PySide2.QtCore import QObject, SIGNAL, SLOT +from PySide2.QtWidgets import QPushButton, QWidget + +from helper import UsesQApplication + + +class SelfConnect(UsesQApplication): + + def testButtonClickClose(self): + button = QPushButton() + button.connect(button, SIGNAL('clicked()'), SLOT('close()')) + + button.show() + self.assertTrue(button.isVisible()) + button.click() + self.assertTrue(not button.isVisible()) + + def testWindowButtonClickClose(self): + button = QPushButton() + window = QWidget() + window.connect(button, SIGNAL('clicked()'), SLOT('close()')) + + window.show() + self.assertTrue(window.isVisible()) + button.click() + self.assertTrue(not window.isVisible()) + + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/short_circuit_test.py b/sources/pyside2/tests/signals/short_circuit_test.py new file mode 100644 index 0000000..e181b64 --- /dev/null +++ b/sources/pyside2/tests/signals/short_circuit_test.py @@ -0,0 +1,91 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QObject, SIGNAL, SLOT + +class Dummy(QObject): + """Dummy class used in this test.""" + def __init__(self, parent=None): + QObject.__init__(self, parent) + +class ShortCircuitSignals(unittest.TestCase): + def setUp(self): + self.called = False + + def tearDown(self): + try: + del self.args + except: + pass + + def callback(self, *args): + if tuple(self.args) == args: + self.called = True + + def testNoArgs(self): + """Short circuit signal without arguments""" + obj1 = Dummy() + QObject.connect(obj1, SIGNAL('foo()'), self.callback) + self.args = tuple() + obj1.emit(SIGNAL('foo()'), *self.args) + self.assertTrue(self.called) + + def testWithArgs(self): + """Short circuit signal with integer arguments""" + obj1 = Dummy() + + QObject.connect(obj1, SIGNAL('foo(int)'), self.callback) + self.args = (42,) + obj1.emit(SIGNAL('foo(int)'), *self.args) + + self.assertTrue(self.called) + + def testMultipleArgs(self): + """Short circuit signal with multiple arguments""" + obj1 = Dummy() + + QObject.connect(obj1, SIGNAL('foo(int,int,QString)'), self.callback) + self.args = (42,33,'char') + obj1.emit(SIGNAL('foo(int,int,QString)'), *self.args) + + self.assertTrue(self.called) + + def testComplexArgs(self): + """Short circuit signal with complex arguments""" + obj1 = Dummy() + + QObject.connect(obj1, SIGNAL('foo(int,QObject*)'), self.callback) + self.args = (42, obj1) + obj1.emit(SIGNAL('foo(int,QObject*)'), *self.args) + + self.assertTrue(self.called) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/signal2signal_connect_test.py b/sources/pyside2/tests/signals/signal2signal_connect_test.py new file mode 100644 index 0000000..4619a86 --- /dev/null +++ b/sources/pyside2/tests/signals/signal2signal_connect_test.py @@ -0,0 +1,135 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test case for signal to signal connections.''' + +import unittest +from PySide2.QtCore import * + +def cute_slot(): + pass + +class TestSignal2SignalConnect(unittest.TestCase): + '''Test case for signal to signal connections''' + + def setUp(self): + #Set up the basic resources needed + self.sender = QObject() + self.forwarder = QObject() + self.args = None + self.called = False + + def tearDown(self): + #Delete used resources + try: + del self.sender + except: + pass + try: + del self.forwarder + except: + pass + del self.args + + def callback_noargs(self): + #Default callback without arguments + self.called = True + + def callback_args(self, *args): + #Default callback with arguments + if args == self.args: + self.called = True + else: + raise TypeError("Invalid arguments") + + def callback_qobject(self, *args): + #Default callback for QObject as argument + if args[0].objectName() == self.args[0]: + self.called = True + else: + raise TypeError("Invalid arguments") + + + def testSignalWithoutArguments(self): + QObject.connect(self.sender, SIGNAL("destroyed()"), + self.forwarder, SIGNAL("forward()")) + QObject.connect(self.forwarder, SIGNAL("forward()"), + self.callback_noargs) + del self.sender + self.assertTrue(self.called) + + + def testSignalWithOnePrimitiveTypeArgument(self): + QObject.connect(self.sender, SIGNAL("mysignal(int)"), + self.forwarder, SIGNAL("mysignal(int)")) + QObject.connect(self.forwarder, SIGNAL("mysignal(int)"), + self.callback_args) + self.args = (19,) + self.sender.emit(SIGNAL('mysignal(int)'), *self.args) + self.assertTrue(self.called) + + + def testSignalWithMultiplePrimitiveTypeArguments(self): + QObject.connect(self.sender, SIGNAL("mysignal(int,int)"), + self.forwarder, SIGNAL("mysignal(int,int)")) + QObject.connect(self.forwarder, SIGNAL("mysignal(int,int)"), + self.callback_args) + self.args = (23, 29) + self.sender.emit(SIGNAL('mysignal(int,int)'), *self.args) + self.assertTrue(self.called) + + + def testSignalWithOneStringArgument(self): + QObject.connect(self.sender, SIGNAL("mysignal(QString)"), + self.forwarder, SIGNAL("mysignal(QString)")) + QObject.connect(self.forwarder, SIGNAL("mysignal(QString)"), + self.callback_args) + self.args = ('myargument',) + self.sender.emit(SIGNAL('mysignal(QString)'), *self.args) + self.assertTrue(self.called) + + + def testSignalWithOneQObjectArgument(self): + QObject.connect(self.sender, SIGNAL('destroyed(QObject*)'), + self.forwarder, SIGNAL('forward(QObject*)')) + QObject.connect(self.forwarder, SIGNAL('forward(QObject*)'), + self.callback_qobject) + + obj_name = 'sender' + self.sender.setObjectName(obj_name) + self.args = (obj_name, ) + del self.sender + self.assertTrue(self.called) + + +if __name__ == '__main__': + unittest.main() + + diff --git a/sources/pyside2/tests/signals/signal_autoconnect_test.py b/sources/pyside2/tests/signals/signal_autoconnect_test.py new file mode 100644 index 0000000..9fe8f94 --- /dev/null +++ b/sources/pyside2/tests/signals/signal_autoconnect_test.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import * +from PySide2.QtWidgets import * + +class MyObject(QWidget): + def __init__(self, parent=None): + QWidget.__init__(self, parent) + self._method_called = False + + @Slot() + def on_button_clicked(self): + self._method_called = True + + +class AutoConnectionTest(unittest.TestCase): + + def testConnection(self): + app = QApplication([]) + + win = MyObject() + btn = QPushButton("click", win) + btn.setObjectName("button") + QMetaObject.connectSlotsByName(win) + btn.click() + self.assertTrue(win._method_called) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/signal_connectiontype_support_test.py b/sources/pyside2/tests/signals/signal_connectiontype_support_test.py new file mode 100644 index 0000000..d8dee94 --- /dev/null +++ b/sources/pyside2/tests/signals/signal_connectiontype_support_test.py @@ -0,0 +1,55 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QObject, SIGNAL, Qt + +class Dummy(QObject): + """Dummy class used in this test.""" + def __init__(self, parent=None): + QObject.__init__(self, parent) + +class TestConnectionTypeSupport(unittest.TestCase): + def callback(self, *args): + if tuple(self.args) == args: + self.called = True + + def testNoArgs(self): + """Connect signal using a Qt.ConnectionType as argument""" + obj1 = Dummy() + + QObject.connect(obj1, SIGNAL('foo()'), self.callback, Qt.DirectConnection) + self.args = tuple() + obj1.emit(SIGNAL('foo()'), *self.args) + + self.assertTrue(self.called) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/signal_emission_gui_test.py b/sources/pyside2/tests/signals/signal_emission_gui_test.py new file mode 100644 index 0000000..a357b15 --- /dev/null +++ b/sources/pyside2/tests/signals/signal_emission_gui_test.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""Tests covering signal emission and receiving to python slots""" + +import unittest + +from PySide2.QtCore import QObject, SIGNAL, SLOT + +try: + from PySide2.QtWidgets import QSpinBox, QPushButton + hasQtGui = True +except ImportError: + hasQtGui = False + +from helper import BasicPySlotCase, UsesQApplication + +if hasQtGui: + class ButtonPySlot(UsesQApplication, BasicPySlotCase): + """Tests the connection of python slots to QPushButton signals""" + + def testButtonClicked(self): + """Connection of a python slot to QPushButton.clicked()""" + button = QPushButton('Mylabel') + QObject.connect(button, SIGNAL('clicked()'), self.cb) + self.args = tuple() + button.emit(SIGNAL('clicked(bool)'), False) + self.assertTrue(self.called) + + def testButtonClick(self): + """Indirect qt signal emission using the QPushButton.click() method """ + button = QPushButton('label') + QObject.connect(button, SIGNAL('clicked()'), self.cb) + self.args = tuple() + button.click() + self.assertTrue(self.called) + + +if hasQtGui: + class SpinBoxPySlot(UsesQApplication, BasicPySlotCase): + """Tests the connection of python slots to QSpinBox signals""" + + def setUp(self): + super(SpinBoxPySlot, self).setUp() + self.spin = QSpinBox() + + def tearDown(self): + del self.spin + super(SpinBoxPySlot, self).tearDown() + + def testSpinBoxValueChanged(self): + """Connection of a python slot to QSpinBox.valueChanged(int)""" + QObject.connect(self.spin, SIGNAL('valueChanged(int)'), self.cb) + self.args = [3] + self.spin.emit(SIGNAL('valueChanged(int)'), *self.args) + self.assertTrue(self.called) + + def testSpinBoxValueChangedImplicit(self): + """Indirect qt signal emission using QSpinBox.setValue(int)""" + QObject.connect(self.spin, SIGNAL('valueChanged(int)'), self.cb) + self.args = [42] + self.spin.setValue(self.args[0]) + self.assertTrue(self.called) + + def atestSpinBoxValueChangedFewArgs(self): + """Emission of signals with fewer arguments than needed""" + # XXX: PyQt4 crashes on the assertRaises + QObject.connect(self.spin, SIGNAL('valueChanged(int)'), self.cb) + self.args = (554,) + self.assertRaises(TypeError, self.spin.emit, SIGNAL('valueChanged(int)')) + +if hasQtGui: + class QSpinBoxQtSlots(UsesQApplication): + """Tests the connection to QSpinBox qt slots""" + + qapplication = True + + def testSetValueIndirect(self): + """Indirect signal emission: QSpinBox using valueChanged(int)/setValue(int)""" + spinSend = QSpinBox() + spinRec = QSpinBox() + + spinRec.setValue(5) + + QObject.connect(spinSend, SIGNAL('valueChanged(int)'), spinRec, SLOT('setValue(int)')) + self.assertEqual(spinRec.value(), 5) + spinSend.setValue(3) + self.assertEqual(spinRec.value(), 3) + self.assertEqual(spinSend.value(), 3) + + def testSetValue(self): + """Direct signal emission: QSpinBox using valueChanged(int)/setValue(int)""" + spinSend = QSpinBox() + spinRec = QSpinBox() + + spinRec.setValue(5) + spinSend.setValue(42) + + QObject.connect(spinSend, SIGNAL('valueChanged(int)'), spinRec, SLOT('setValue(int)')) + self.assertEqual(spinRec.value(), 5) + self.assertEqual(spinSend.value(), 42) + spinSend.emit(SIGNAL('valueChanged(int)'), 3) + + self.assertEqual(spinRec.value(), 3) + #Direct emission shouldn't change the value of the emitter + self.assertEqual(spinSend.value(), 42) + + spinSend.emit(SIGNAL('valueChanged(int)'), 66) + self.assertEqual(spinRec.value(), 66) + self.assertEqual(spinSend.value(), 42) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/signal_emission_test.py b/sources/pyside2/tests/signals/signal_emission_test.py new file mode 100644 index 0000000..d4f1770 --- /dev/null +++ b/sources/pyside2/tests/signals/signal_emission_test.py @@ -0,0 +1,152 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""Tests covering signal emission and receiving to python slots""" + +import sys +import unittest +import functools + +from PySide2.QtCore import QObject, SIGNAL, SLOT, QProcess, QTimeLine + +from helper import BasicPySlotCase, UsesQCoreApplication + + +class ArgsOnEmptySignal(UsesQCoreApplication): + '''Trying to emit a signal without arguments passing some arguments''' + + def testArgsToNoArgsSignal(self): + '''Passing arguments to a signal without arguments''' + process = QProcess() + self.assertRaises(TypeError, process.emit, SIGNAL('started()'), 42) + + +class MoreArgsOnEmit(UsesQCoreApplication): + '''Trying to pass more args than needed to emit (signals with args)''' + + def testMoreArgs(self): + '''Passing more arguments than needed''' + process = QProcess() + self.assertRaises(TypeError, process.emit, SIGNAL('finished(int)'), 55, 55) + +class Dummy(QObject): + '''Dummy class''' + pass + +class PythonSignalToCppSlots(UsesQCoreApplication): + '''Connect python signals to C++ slots''' + + def testWithoutArgs(self): + '''Connect python signal to QTimeLine.toggleDirection()''' + timeline = QTimeLine() + dummy = Dummy() + QObject.connect(dummy, SIGNAL('dummy()'), + timeline, SLOT('toggleDirection()')) + + orig_dir = timeline.direction() + dummy.emit(SIGNAL('dummy()')) + new_dir = timeline.direction() + + if orig_dir == QTimeLine.Forward: + self.assertEqual(new_dir, QTimeLine.Backward) + else: + self.assertEqual(new_dir, QTimeLine.Forward) + + def testWithArgs(self): + '''Connect python signals to QTimeLine.setCurrentTime(int)''' + timeline = QTimeLine() + dummy = Dummy() + + QObject.connect(dummy, SIGNAL('dummy(int)'), + timeline, SLOT('setCurrentTime(int)')) + + current = timeline.currentTime() + dummy.emit(SIGNAL('dummy(int)'), current+42) + self.assertEqual(timeline.currentTime(), current+42) + +class CppSignalsToCppSlots(UsesQCoreApplication): + '''Connection between C++ slots and signals''' + + def testWithoutArgs(self): + '''Connect QProcess.started() to QTimeLine.togglePaused()''' + process = QProcess() + timeline = QTimeLine() + + QObject.connect(process, SIGNAL('finished(int, QProcess::ExitStatus)'), + timeline, SLOT('toggleDirection()')) + + orig_dir = timeline.direction() + + process.start(sys.executable, ['-c', '"print 42"']) + process.waitForFinished() + + new_dir = timeline.direction() + + if orig_dir == QTimeLine.Forward: + self.assertEqual(new_dir, QTimeLine.Backward) + else: + self.assertEqual(new_dir, QTimeLine.Forward) + +called = False +def someSlot(args=None): + global called + called = True + +class DynamicSignalsToFuncPartial(UsesQCoreApplication): + + def testIt(self): + global called + called = False + o = QObject() + o.connect(o, SIGNAL("ASignal()"), functools.partial(someSlot, "partial ..")) + o.emit(SIGNAL("ASignal()")) + self.assertTrue(called) + +class EmitUnknownType(UsesQCoreApplication): + def testIt(self): + a = QObject() + a.connect(SIGNAL('foobar(Dummy)'), lambda x: 42) # Just connect with an unknown type + self.assertRaises(TypeError, a.emit, SIGNAL('foobar(Dummy)'), 22) + +class EmitEnum(UsesQCoreApplication): + """Test emission of enum arguments""" + + def slot(self, arg): + self.arg = arg + + def testIt(self): + self.arg = None + p = QProcess() + p.stateChanged.connect(self.slot) + p.stateChanged.emit(QProcess.NotRunning) + self.assertEqual(self.arg, QProcess.NotRunning) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/signal_func_test.py b/sources/pyside2/tests/signals/signal_func_test.py new file mode 100644 index 0000000..37bb191 --- /dev/null +++ b/sources/pyside2/tests/signals/signal_func_test.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import SIGNAL, SLOT + +class SIGNALSLOTTests(unittest.TestCase): + '''Test the output of SIGNAL and SLOT.''' + + def testSIGNAL(self): + #SIGNAL function + a = "foobar" + self.assertEqual(str(SIGNAL(a)), "2foobar") + + def testSLOT(self): + #SLOT function + a = "foobar" + self.assertEqual(str(SLOT(a)), "1foobar") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/signal_manager_refcount_test.py b/sources/pyside2/tests/signals/signal_manager_refcount_test.py new file mode 100644 index 0000000..ece9a3c --- /dev/null +++ b/sources/pyside2/tests/signals/signal_manager_refcount_test.py @@ -0,0 +1,51 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from sys import getrefcount +import unittest +from PySide2.QtCore import QObject, SIGNAL + +class SignalManagerRefCount(unittest.TestCase): + """Simple test case to check if the signal_manager is erroneously incrementing the object refcounter""" + + def testObjectRefcount(self): + """Emission of QObject.destroyed() to a python slot""" + def callback(): + pass + obj = QObject() + refcount = getrefcount(obj) + QObject.connect(obj, SIGNAL('destroyed()'), callback) + self.assertEqual(refcount, getrefcount(obj)) + QObject.disconnect(obj, SIGNAL('destroyed()'), callback) + self.assertEqual(refcount, getrefcount(obj)) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/signals/signal_number_limit_test.py b/sources/pyside2/tests/signals/signal_number_limit_test.py new file mode 100644 index 0000000..ba1edac --- /dev/null +++ b/sources/pyside2/tests/signals/signal_number_limit_test.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2 import QtCore + +class Emitter(QtCore.QObject): + s1 = QtCore.Signal() + s2 = QtCore.Signal() + s3 = QtCore.Signal() + s4 = QtCore.Signal() + s5 = QtCore.Signal() + s6 = QtCore.Signal() + s7 = QtCore.Signal() + s8 = QtCore.Signal() + s9 = QtCore.Signal() + s10 = QtCore.Signal() + s11 = QtCore.Signal() + s12 = QtCore.Signal() + s13 = QtCore.Signal() + s14 = QtCore.Signal() + +class SignalNumberLimitTest(unittest.TestCase): + def myCb(self): + self._count += 1 + + def testBug(self): + e = Emitter() + e.s1.connect(self.myCb) + e.s2.connect(self.myCb) + e.s3.connect(self.myCb) + e.s4.connect(self.myCb) + e.s5.connect(self.myCb) + e.s6.connect(self.myCb) + e.s7.connect(self.myCb) + e.s8.connect(self.myCb) + e.s9.connect(self.myCb) + e.s10.connect(self.myCb) + e.s11.connect(self.myCb) + e.s12.connect(self.myCb) + e.s13.connect(self.myCb) + e.s14.connect(self.myCb) + + self._count = 0 + e.s1.emit() + e.s2.emit() + e.s3.emit() + e.s4.emit() + e.s5.emit() + e.s6.emit() + e.s7.emit() + e.s8.emit() + e.s9.emit() + e.s10.emit() + e.s11.emit() + e.s12.emit() + e.s13.emit() + e.s14.emit() + self.assertEqual(self._count, 14) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/signal_object_test.py b/sources/pyside2/tests/signals/signal_object_test.py new file mode 100644 index 0000000..ab9522b --- /dev/null +++ b/sources/pyside2/tests/signals/signal_object_test.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from PySide2.QtCore import QTimer, Signal, QObject, Slot, Qt +from helper import UsesQCoreApplication + +class MyObject(QTimer): + sig1 = Signal() + sig2 = Signal(int, name='rangeChanged') + sig3 = Signal(int) + sig4 = Signal((int,), (str,)) + sig5 = Signal((str,), (int,)) + sig6 = Signal(QObject) + + @Slot(int) + def myRange(self, r): + self._range = r + + def slot1(self): + self._called = True + + def slotString(self, s): + self._s = s + + def slotObject(self, o): + self._o = o + + +class SignalObjectTest(UsesQCoreApplication): + def cb(self): + self._cb_called = True + self.app.exit() + + def testsingleConnect(self): + o = MyObject() + o.sig1.connect(o.slot1) + o.sig1.emit() + self.assertTrue(o._called) + + def testSignalWithArgs(self): + o = MyObject() + o.sig3.connect(o.myRange) + o.sig3.emit(10) + self.assertEqual(o._range, 10) + + def testSignatureParse(self): + o = MyObject() + o.sig2.connect(o.myRange) + o.sig2.emit(10) + + def testDictOperator(self): + o = MyObject() + o.sig4[str].connect(o.slotString) + o.sig4[str].emit("PySide") + self.assertEqual(o._s, "PySide") + + def testGeneretedSignal(self): + o = MyObject() + o.timeout.connect(self.cb) + o.start(100) + self.app.exec_() + self.assertTrue(self._cb_called) + + def testConnectionType(self): + o = MyObject() + o.timeout.connect(self.cb, type=Qt.DirectConnection) + o.start(100) + self.app.exec_() + self.assertTrue(self._cb_called) + + def testSignalWithSignal(self): + o = MyObject() + o.sig2.connect(o.myRange) + o.sig5.connect(o.sig2) + o.sig5[int].emit(10) + self.assertEqual(o._range, 10) + + def testSignalWithObject(self): + o = MyObject() + o.sig6.connect(o.slotObject) + arg = QObject() + o.sig6.emit(arg) + self.assertEqual(arg, o._o) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/signal_signature_test.py b/sources/pyside2/tests/signals/signal_signature_test.py new file mode 100644 index 0000000..191f209 --- /dev/null +++ b/sources/pyside2/tests/signals/signal_signature_test.py @@ -0,0 +1,114 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for signal signature received by QObject::connectNotify().''' + +import unittest +from PySide2.QtCore import * +from helper import UsesQCoreApplication + +called = False +name = "Old" +class Obj(QObject): + dummySignalArgs = Signal(str) + numberSignal = Signal(int) + def __init__(self): + QObject.__init__(self) + self.signal = '' + + def connectNotify(self, signal): + self.signal = signal + + @staticmethod + def static_method(): + global called + called = True + + @staticmethod + def static_method_args(arg="default"): + global name + name = arg + +def callback(arg=None): + pass +def callback_empty(): + pass + +class TestConnectNotifyWithNewStyleSignals(UsesQCoreApplication): + '''Test case for signal signature received by QObject::connectNotify().''' + + def testOldStyle(self): + sender = Obj() + receiver = QObject() + sender.connect(SIGNAL('destroyed()'), receiver, SLOT('deleteLater()')) + # When connecting to a regular slot, and not a python callback function, QObject::connect + # will use the non-cloned method signature, so connectinc to destroyed() will actually + # connect to destroyed(QObject*). + self.assertEqual(sender.signal.methodSignature(), 'destroyed(QObject*)') + + def testOldStyleWithPythonCallback(self): + sender = Obj() + sender.connect(SIGNAL('destroyed()'), callback) + self.assertEqual(sender.signal.methodSignature(), 'destroyed()') + + def testNewStyle(self): + sender = Obj() + + sender.destroyed.connect(callback_empty) + self.assertEqual(sender.signal.methodSignature(), 'destroyed()') + + sender.destroyed[QObject].connect(callback) + self.assertEqual(sender.signal.methodSignature(), 'destroyed(QObject*)') + + def testStaticSlot(self): + global called + sender = Obj() + sender.connect(sender, SIGNAL("dummySignal()"), Obj.static_method) + sender.emit(SIGNAL("dummySignal()")) + self.assertTrue(called) + + + def testStaticSlotArgs(self): + global name + sender = Obj() + sender.dummySignalArgs.connect(Obj.static_method_args) + sender.dummySignalArgs[str].emit("New") + self.assertEqual(name, "New") + + def testLambdaSlot(self): + sender = Obj() + sender.numberSignal[int].connect(lambda x: 42) + with self.assertRaises(IndexError): + sender.numberSignal[str].emit("test") + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/signals/signal_with_primitive_type_test.py b/sources/pyside2/tests/signals/signal_with_primitive_type_test.py new file mode 100644 index 0000000..cc3f084 --- /dev/null +++ b/sources/pyside2/tests/signals/signal_with_primitive_type_test.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2.QtCore import * + + +class SignalPrimitiveTypeTest(unittest.TestCase): + + def signalValueChanged(self, v): + self.called = True + self._app.quit() + + def createTimeLine(self): + self.called = False + tl = QTimeLine(10000) + QObject.connect(tl, SIGNAL("valueChanged(qreal)"), self.signalValueChanged) + return tl + + def testTimeLine(self): + self._valueChangedCount = 0 + self._app = QCoreApplication([]) + tl = self.createTimeLine() + tl.start() + self._app.exec_() + self.assertTrue(self.called) + +if __name__ == '__main__': + unittest.main() + + diff --git a/sources/pyside2/tests/signals/slot_reference_count_test.py b/sources/pyside2/tests/signals/slot_reference_count_test.py new file mode 100644 index 0000000..e6bcda0 --- /dev/null +++ b/sources/pyside2/tests/signals/slot_reference_count_test.py @@ -0,0 +1,81 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Forced disconnection: Delete one end of the signal connection''' + +import unittest +from sys import getrefcount + +from PySide2.QtCore import QObject, SIGNAL, SLOT + +class Dummy(QObject): + def dispatch(self): + self.emit(SIGNAL('foo()')) + +class PythonSignalRefCount(unittest.TestCase): + + def setUp(self): + self.emitter = Dummy() + + def tearDown(self): + self.emitter + + def testRefCount(self): + def cb(*args): + pass + + self.assertEqual(getrefcount(cb), 2) + + QObject.connect(self.emitter, SIGNAL('foo()'), cb) + self.assertEqual(getrefcount(cb), 3) + + QObject.disconnect(self.emitter, SIGNAL('foo()'), cb) + self.assertEqual(getrefcount(cb), 2) + +class CppSignalRefCount(unittest.TestCase): + + def setUp(self): + self.emitter = QObject() + + def tearDown(self): + self.emitter + + def testRefCount(self): + def cb(*args): + pass + + self.assertEqual(getrefcount(cb), 2) + + QObject.connect(self.emitter, SIGNAL('destroyed()'), cb) + self.assertEqual(getrefcount(cb), 3) + + QObject.disconnect(self.emitter, SIGNAL('destroyed()'), cb) + self.assertEqual(getrefcount(cb), 2) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/signals/static_metaobject_test.py b/sources/pyside2/tests/signals/static_metaobject_test.py new file mode 100644 index 0000000..b66610f --- /dev/null +++ b/sources/pyside2/tests/signals/static_metaobject_test.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +"""Tests covering signal emission and receiving to python slots""" + +import unittest + +from PySide2.QtCore import QObject, SIGNAL, Slot +from helper import UsesQCoreApplication + +class MyObject(QObject): + def __init__(self, parent=None): + QObject.__init__(self, parent) + self._slotCalledCount = 0 + + # this '@Slot()' is needed to get the right sort order in testSharedSignalEmission. + # For some reason, it also makes the tests actually work! + @Slot() + def mySlot(self): + self._slotCalledCount = self._slotCalledCount + 1 + + +class StaticMetaObjectTest(UsesQCoreApplication): + + def testSignalPropagation(self): + o = MyObject() + o2 = MyObject() + + # SIGNAL foo not created yet + self.assertEqual(o.metaObject().indexOfSignal("foo()"), -1) + + o.connect(SIGNAL("foo()"), o2.mySlot) + # SIGNAL foo create after connect + self.assertTrue(o.metaObject().indexOfSignal("foo()") > 0) + + # SIGNAL does not propagate to others objects of the same type + self.assertEqual(o2.metaObject().indexOfSignal("foo()"), -1) + + del o + del o2 + o = MyObject() + # The SIGNAL was destroyed with old objects + self.assertEqual(o.metaObject().indexOfSignal("foo()"), -1) + + + def testSharedSignalEmission(self): + o = QObject() + m = MyObject() + + o.connect(SIGNAL("foo2()"), m.mySlot) + m.connect(SIGNAL("foo2()"), m.mySlot) + o.emit(SIGNAL("foo2()")) + self.assertEqual(m._slotCalledCount, 1) + del o + m.emit(SIGNAL("foo2()")) + self.assertEqual(m._slotCalledCount, 2) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/support/CMakeLists.txt b/sources/pyside2/tests/support/CMakeLists.txt new file mode 100644 index 0000000..1f18ecf --- /dev/null +++ b/sources/pyside2/tests/support/CMakeLists.txt @@ -0,0 +1 @@ +PYSIDE_TEST(voidptr_test.py) diff --git a/sources/pyside2/tests/support/voidptr_test.py b/sources/pyside2/tests/support/voidptr_test.py new file mode 100644 index 0000000..8179407 --- /dev/null +++ b/sources/pyside2/tests/support/voidptr_test.py @@ -0,0 +1,47 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from PySide2 import shiboken2 +from PySide2.support import VoidPtr +from PySide2.QtCore import QByteArray + +class PySide2Support(unittest.TestCase): + + def testVoidPtr(self): + # Creating a VoidPtr object requires an address of + # a C++ object, a wrapped Shiboken Object type, + # an object implementing the Python Buffer interface, + # or another VoidPtr object. + ba = QByteArray(b"Hello world") + voidptr = VoidPtr(ba) + self.assertIsInstance(voidptr, shiboken2.VoidPtr) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/pyside2/tests/tools/list-class-hierarchy.py b/sources/pyside2/tests/tools/list-class-hierarchy.py new file mode 100755 index 0000000..b734ae6 --- /dev/null +++ b/sources/pyside2/tests/tools/list-class-hierarchy.py @@ -0,0 +1,117 @@ +#!/usr/bin/python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + + +# This is a small script printing out Qt binding class hierarchies +# for comparison purposes. +# +# Usage: +# +# ./list-class-hierarchy.py PySide2 > pyside2.list +# ./list-class-hierarchy.py PyQt5 > pyqt5.list +# +# meld pyside.list pyqt5.list + +from __future__ import print_function + +import sys +import pdb +from inspect import isclass + +ignore = ["staticMetaObject", + "pyqtConfigure", + "registerUserData", + "thread", + ] + +def recurse_into(el,obj): + #s = el.split('.')[-1] + #pdb.set_trace() + symbols = [] + for item in sorted(dir(obj)): + if item[0]=='_': + continue + mel = el + '.' + item + try: + mobj = eval(mel) + except Exception: + continue + + if item in ignore: + continue + else: + symbols.append(mel) + + if isclass(mobj): + symbols += recurse_into(mel,mobj) + + return symbols + +if __name__=='__main__': + modules = [ 'QtCore', + 'QtGui', + 'QtHelp', + #'QtMultimedia', + 'QtNetwork', + #'QtOpenGL', + 'QtScript', + 'QtScriptTools', + 'QtSql', + 'QtSvg', + 'QtTest', + #'QtUiTools', + 'QtWebKit', + 'QtXml', + 'QtXmlPatterns' ] + + libraries = ["PySide2", "PyQt5"] + librarySymbols = {} + for l in libraries: + dictionary = [] + if l =="PyQt5": + import sip + sip.setapi('QDate',2) + sip.setapi('QDateTime',2) + sip.setapi('QString',2) + sip.setapi('QTextStream',2) + sip.setapi('QTime',2) + sip.setapi('QUrl',2) + sip.setapi('QVariant',2) + + for m in modules: + exec("from %s import %s" % (l,m), globals(), locals()) + dictionary += recurse_into(m, eval(m)) + librarySymbols[l] = dictionary + + print("PyQt5: ", len(librarySymbols["PyQt5"]), " PySide2: ", len(librarySymbols["PySide2"])) + + for symbol in librarySymbols["PyQt5"]: + if not (symbol in librarySymbols["PySide2"]): + print("Symbol not found in PySide2:", symbol) diff --git a/sources/pyside2/tests/util/color.py b/sources/pyside2/tests/util/color.py new file mode 100644 index 0000000..37c2c86 --- /dev/null +++ b/sources/pyside2/tests/util/color.py @@ -0,0 +1,41 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +'''Function to print a colored line to terminal''' + +RED='\033[0;31m%s\033[m' + +def print_colored(message, color=RED): + print(color % message) + +if __name__ == '__main__': + print('42 - the answer') + print_colored("But what's the question?") + print('Hum?') diff --git a/sources/pyside2/tests/util/helper/__init__.py b/sources/pyside2/tests/util/helper/__init__.py new file mode 100644 index 0000000..084b3e7 --- /dev/null +++ b/sources/pyside2/tests/util/helper/__init__.py @@ -0,0 +1,171 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Helper classes and functions''' + +import os +import unittest + +from random import randint + +from PySide2.QtCore import QCoreApplication, QTimer + +try: + from PySide2.QtGui import QGuiApplication +except ImportError: + has_gui = False +else: + has_gui = True + +try: + from PySide2.QtWidgets import QApplication +except ImportError: + has_widgets = False +else: + has_widgets = True + +def adjust_filename(filename, orig_mod_filename): + dirpath = os.path.dirname(os.path.abspath(orig_mod_filename)) + return os.path.join(dirpath, filename) + +class NoQtGuiError(Exception): + def __init__(self): + Exception.__init__(self, 'No QtGui found') + +class BasicPySlotCase(object): + '''Base class that tests python slots and signal emissions. + + Python slots are defined as any callable passed to QObject.connect(). + ''' + def setUp(self): + self.called = False + + def tearDown(self): + try: + del self.args + except: + pass + + def cb(self, *args): + '''Simple callback with arbitrary arguments. + + The test function must setup the 'args' attribute with a sequence + containing the arguments expected to be received by this slot. + Currently only a single connection is supported. + ''' + if tuple(self.args) == args: + self.called = True + else: + raise ValueError('Invalid arguments for callback') + +if has_gui: + class UsesQGuiApplication(unittest.TestCase): + '''Helper class to provide QGuiApplication instances''' + + def setUp(self): + '''Creates the QGuiApplication instance''' + + # Simple way of making instance a singleton + super(UsesQGuiApplication, self).setUp() + self.app = QGuiApplication.instance() or QGuiApplication([]) + + def tearDown(self): + '''Deletes the reference owned by self''' + del self.app + super(UsesQGuiApplication, self).tearDown() + +if has_widgets: + class UsesQApplication(unittest.TestCase): + '''Helper class to provide QApplication instances''' + + qapplication = True + + def setUp(self): + '''Creates the QApplication instance''' + + # Simple way of making instance a singleton + super(UsesQApplication, self).setUp() + self.app = QApplication.instance() or QApplication([]) + + def tearDown(self): + '''Deletes the reference owned by self''' + del self.app + super(UsesQApplication, self).tearDown() + + + class TimedQApplication(unittest.TestCase): + '''Helper class with timed QApplication exec loop''' + + def setUp(self, timeout=100): + '''Setups this Application. + + timeout - timeout in milisseconds''' + self.app = QApplication.instance() or QApplication([]) + QTimer.singleShot(timeout, self.app.quit) + + def tearDown(self): + '''Delete resources''' + del self.app +else: + class UsesQApplication(unittest.TestCase): + def setUp(self): + raise NoQtGuiError() + class TimedQapplication(unittest.TestCase): + def setUp(self): + raise NoQtGuiError() + + +_core_instance = None + +class UsesQCoreApplication(unittest.TestCase): + '''Helper class for test cases that require an QCoreApplication + Just connect or call self.exit_app_cb. When called, will ask + self.app to exit. + ''' + + def setUp(self): + '''Set up resources''' + + global _core_instance + if _core_instance is None: + _core_instance = QCoreApplication([]) + + self.app = _core_instance + + def tearDown(self): + '''Release resources''' + del self.app + + def exit_app_cb(self): + '''Quits the application''' + self.app.exit(0) + + +def random_string(size=5): + '''Generate random string with the given size''' + return ''.join(map(chr, [randint(33, 126) for x in range(size)])) diff --git a/sources/pyside2/tests/util/helper/docmodifier.py b/sources/pyside2/tests/util/helper/docmodifier.py new file mode 100644 index 0000000..5db344f --- /dev/null +++ b/sources/pyside2/tests/util/helper/docmodifier.py @@ -0,0 +1,116 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Helper metaclass do 'decorate' docstrings from base test case classes''' + +import types + + +def copy_func(func): + '''Helper function to copy a function object (except docstring)''' + return types.FunctionType(func.func_code, func.func_globals, func.func_name, + func.func_defaults, func.func_closure) + + +class DocModifier(type): + '''Metaclass for modifiying method documentation. + + It allows the managed class to modify the method documentation, adding + prefixes and suffixes to a given set of methods. + + For example, you have some unittest.TestCases that run on different set + of data. These methods could be written once in a base class and the + inheriting class just setup different setUp/tearDown methods with the + proper data. To differentiate the methods when using docstrings, you + can add a suffix or prefix to the docstring. + + Variables in the implementing class: + + doc_prefix - The prefix to the docstring + doc_suffix - The suffix to the docstring + doc_filter - The function to filter the methods. If not provided, this + no docstrings are changed.''' + + def __new__(mcs, name, bases, dct): + + # FIXME currently we have to define doc_filter on each subclass + filter_function = dct.get('doc_filter') + if not filter_function: + filter_function = lambda x: False + + for base in bases: + for attr in [x for x in base.__dict__ if filter_function(x)]: + original = getattr(base, attr) + + if original.__doc__: + copy = copy_func(original) + copy.__doc__ = (dct.get('doc_prefix', '') + + original.__doc__ + + dct.get('doc_suffix', '')) + dct[attr] = copy + + return type.__new__(mcs, name, bases, dct) + + def __init__(mcs, name, bases, dct): + super(DocModifier, mcs).__init__(name, bases, dct) + + +if __name__ == '__main__': + + # tests + class BaseTest(object): + __metaclass__ = DocModifier + + def testBase(self): + '''base''' + + def testWithoutDoc(self): + pass + + class Implementing(BaseTest): + + doc_filter = lambda x: x.startswith('test') + doc_prefix = 'prefix' + doc_suffix = 'suffix' + + class OnlyPrefix(BaseTest): + + doc_filter = lambda x: x.startswith('test') + doc_prefix = 'prefix' + + class OnlySuffix(BaseTest): + + doc_filter = lambda x: x.startswith('test') + doc_suffix = 'suffix' + + assert(Implementing.testBase.__doc__ == 'prefixbasesuffix') + assert(Implementing.testWithoutDoc.__doc__ == None) + assert(OnlySuffix.testBase.__doc__ == 'basesuffix') + assert(OnlySuffix.testWithoutDoc.__doc__ == None) + assert(OnlyPrefix.testBase.__doc__ == 'prefixbase') + assert(OnlyPrefix.testWithoutDoc.__doc__ == None) diff --git a/sources/pyside2/tests/util/httpd.py b/sources/pyside2/tests/util/httpd.py new file mode 100644 index 0000000..4cf74a2 --- /dev/null +++ b/sources/pyside2/tests/util/httpd.py @@ -0,0 +1,177 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import os +import sys +import threading +import select +import random +import py3kcompat as py3k + +if py3k.IS_PY3K: + import socketserver as SocketServer + import http.server as BaseHTTPServer +else: + import SocketServer + import BaseHTTPServer + +class TestHandler(BaseHTTPServer.BaseHTTPRequestHandler): + DATA = "PySide Server" + allow_reuse_address = True + + def do_GET(self): + self.send_head() + self.wfile.write(TestHandler.DATA) + + def do_HEAD(self): + self.send_head() + + def send_head(self): + self.send_response(200) + self.send_header("Content-type", "text/plain") + self.send_header("Content-Length", str(len(TestHandler.DATA))) + self.end_headers() + +class TestSecureHandler(BaseHTTPServer.BaseHTTPRequestHandler): + DATA = "PySide" + allow_reuse_address = True + + def do_GET(self): + self.send_head() + self.wfile.write(py3k.b(TestHandler.DATA)) + + def do_HEAD(self): + self.send_head() + + def send_head(self): + try: + handler = self.marshall_handler() + handler.do_request(self) + except: + self.send_response(401) + self.send_header("WWW-Authenticate", "Basic realm='Secure Area'") + self.send_header("Content-type", "text/plain") + self.send_header("Content-Length", str(len(TestHandler.DATA))) + self.end_headers() + +# Workaround for the missing shutdown method in python2.5 +class CompatTCPServer(SocketServer.TCPServer): + def __init__(self, server_address, RequestHandlerClass): + SocketServer.TCPServer.__init__(self, server_address, RequestHandlerClass) + + self.isPy25 = sys.version_info[0] == 2 and sys.version_info[1] == 5 + if self.isPy25: + self.__is_shut_down = threading.Event() + self.__serving = False + + def serve_forever(self, poll_interval=0.5): + """Handle one request at a time until shutdown. + + Polls for shutdown every poll_interval seconds. Ignores + self.timeout. If you need to do periodic tasks, do them in + another thread. + """ + if self.isPy25: + self.__serving = True + self.__is_shut_down.clear() + while self.__serving: + # XXX: Consider using another file descriptor or + # connecting to the socket to wake this up instead of + # polling. Polling reduces our responsiveness to a + # shutdown request and wastes cpu at all other times. + r, w, e = select.select([self], [], [], poll_interval) + if r: + self.py25_handle_request_noblock() + self.__is_shut_down.set() + else: + SocketServer.TCPServer.serve_forever(self, poll_interval) + + def py25_handle_request_noblock(self): + """Handle one request, without blocking. + + I assume that select.select has returned that the socket is + readable before this function was called, so there should be + no risk of blocking in get_request(). + """ + if self.isPy25: + try: + request, client_address = self.get_request() + except socket.error: + return + if self.verify_request(request, client_address): + try: + self.process_request(request, client_address) + except: + self.handle_error(request, client_address) + self.close_request(request) + + def shutdown(self): + """Stops the serve_forever loop. + + Blocks until the loop has finished. This must be called while + serve_forever() is running in another thread, or it will + deadlock. + """ + if self.isPy25: + self.__serving = False + if not self.__is_shut_down: + self.__is_shut_down.wait() + else: + SocketServer.TCPServer.shutdown(self) + + +class TestServer(threading.Thread): + + def __init__(self, secure=False): + threading.Thread.__init__(self) + + self._port = int(os.getenv("PYSIDE_TESTSERVER_PORT") or 12321) + self.keep_running = True + + if secure: + handle = TestSecureHandler + else: + handle = TestHandler + + while True: + try: + self.httpd = CompatTCPServer(('' , self._port), handle) + break + except: + self._port = self._port + random.randint(1, 100) + + def port(self): + return self._port + + def run(self): + self.httpd.serve_forever() + + def shutdown(self): + self.httpd.shutdown() + self.join() + diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/QtAssistant.py b/sources/pyside2/tests/util/module_wrapper/PySide/QtAssistant.py new file mode 100644 index 0000000..d0975d5 --- /dev/null +++ b/sources/pyside2/tests/util/module_wrapper/PySide/QtAssistant.py @@ -0,0 +1,2 @@ + +from PyQt4.QtAssistant import * diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/QtCore.py b/sources/pyside2/tests/util/module_wrapper/PySide/QtCore.py new file mode 100644 index 0000000..a6a2256 --- /dev/null +++ b/sources/pyside2/tests/util/module_wrapper/PySide/QtCore.py @@ -0,0 +1,2 @@ + +from PyQt4.QtCore import * diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/QtDesigner.py b/sources/pyside2/tests/util/module_wrapper/PySide/QtDesigner.py new file mode 100644 index 0000000..5cf9d5f --- /dev/null +++ b/sources/pyside2/tests/util/module_wrapper/PySide/QtDesigner.py @@ -0,0 +1,2 @@ + +from PyQt4.QtDesigner import * diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/QtGui.py b/sources/pyside2/tests/util/module_wrapper/PySide/QtGui.py new file mode 100644 index 0000000..0b8b4e9 --- /dev/null +++ b/sources/pyside2/tests/util/module_wrapper/PySide/QtGui.py @@ -0,0 +1,2 @@ + +from PyQt4.QtGui import * diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/QtHelp.py b/sources/pyside2/tests/util/module_wrapper/PySide/QtHelp.py new file mode 100644 index 0000000..dd3fd6c --- /dev/null +++ b/sources/pyside2/tests/util/module_wrapper/PySide/QtHelp.py @@ -0,0 +1,2 @@ + +from PyQt4.QtHelp import * diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/QtNetwork.py b/sources/pyside2/tests/util/module_wrapper/PySide/QtNetwork.py new file mode 100644 index 0000000..1a669a4 --- /dev/null +++ b/sources/pyside2/tests/util/module_wrapper/PySide/QtNetwork.py @@ -0,0 +1,2 @@ + +from PyQt4.QtNetwork import * diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/QtScript.py b/sources/pyside2/tests/util/module_wrapper/PySide/QtScript.py new file mode 100644 index 0000000..4f6b30e --- /dev/null +++ b/sources/pyside2/tests/util/module_wrapper/PySide/QtScript.py @@ -0,0 +1,2 @@ + +from PyQt4.QtScript import * diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/QtSql.py b/sources/pyside2/tests/util/module_wrapper/PySide/QtSql.py new file mode 100644 index 0000000..35dd0a1 --- /dev/null +++ b/sources/pyside2/tests/util/module_wrapper/PySide/QtSql.py @@ -0,0 +1,2 @@ + +from PyQt4.QtSql import * diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/QtSvg.py b/sources/pyside2/tests/util/module_wrapper/PySide/QtSvg.py new file mode 100644 index 0000000..f308222 --- /dev/null +++ b/sources/pyside2/tests/util/module_wrapper/PySide/QtSvg.py @@ -0,0 +1,2 @@ + +from PyQt4.QtSvg import * diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/QtTest.py b/sources/pyside2/tests/util/module_wrapper/PySide/QtTest.py new file mode 100644 index 0000000..95f6400 --- /dev/null +++ b/sources/pyside2/tests/util/module_wrapper/PySide/QtTest.py @@ -0,0 +1,2 @@ + +from PyQt4.QtTest import * diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/QtWebKit.py b/sources/pyside2/tests/util/module_wrapper/PySide/QtWebKit.py new file mode 100644 index 0000000..bffc799 --- /dev/null +++ b/sources/pyside2/tests/util/module_wrapper/PySide/QtWebKit.py @@ -0,0 +1,2 @@ + +from PyQt4.QtWebKit import * diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/QtXml.py b/sources/pyside2/tests/util/module_wrapper/PySide/QtXml.py new file mode 100644 index 0000000..2888a4e --- /dev/null +++ b/sources/pyside2/tests/util/module_wrapper/PySide/QtXml.py @@ -0,0 +1,2 @@ + +from PyQt4.QtXml import * diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/QtXmlPatterns.py b/sources/pyside2/tests/util/module_wrapper/PySide/QtXmlPatterns.py new file mode 100644 index 0000000..6de76d8 --- /dev/null +++ b/sources/pyside2/tests/util/module_wrapper/PySide/QtXmlPatterns.py @@ -0,0 +1,2 @@ + +from PyQt4.QtXmlPatterns import * diff --git a/sources/pyside2/tests/util/module_wrapper/PySide/__init__.py b/sources/pyside2/tests/util/module_wrapper/PySide/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sources/pyside2/tests/util/processtimer.py b/sources/pyside2/tests/util/processtimer.py new file mode 100644 index 0000000..61a39db --- /dev/null +++ b/sources/pyside2/tests/util/processtimer.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import time,os + +class TimeoutException(Exception): + def __init__(self, msg): + self.msg = msg + + def __str__(self): + return repr(self.msg) + +class ProcessTimer(object): + '''Timeout function for controlling a subprocess.Popen instance. + + Naive implementation using busy loop, see later other means + of doing this. + ''' + + def __init__(self, proc, timeout): + self.proc = proc + self.timeout = timeout + + def waitfor(self): + time_passed = 0 + while(self.proc.poll() is None and time_passed < self.timeout): + time_passed = time_passed + 1 + time.sleep(1) + + if time_passed >= self.timeout: + raise TimeoutException("Timeout expired, possible deadlock") + +if __name__ == "__main__": + #simple example + + from subprocess import Popen + + proc = Popen(['sleep','10']) + t = ProcessTimer(proc,5) + try: + t.waitfor() + except TimeoutException: + print "timeout - PID: %d" % (t.proc.pid) + #TODO: detect SO and kill accordingly + #Linux + os.kill(t.proc.pid, 9) + #Windows (not tested) + #subprocess.Popen("taskkill /F /T /PID %i"%handle.pid , shell=True) + print "exit code: %d" % (t.proc.poll()) + diff --git a/sources/pyside2/tests/util/py2xfunctions.py b/sources/pyside2/tests/util/py2xfunctions.py new file mode 100644 index 0000000..11bc682 --- /dev/null +++ b/sources/pyside2/tests/util/py2xfunctions.py @@ -0,0 +1,46 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +def b(s): + return s + +def l(n): + return long(n) + +def unicode_(s): + if type(s) == str: + import codecs + c = codecs.lookup('utf-8') + s2 = c.decode(s, 'ignore') + return s2[0] + return u'%s' % s + +unicode = unicode +unichr = unichr +long = long +buffer = buffer diff --git a/sources/pyside2/tests/util/py3kcompat.py b/sources/pyside2/tests/util/py3kcompat.py new file mode 100644 index 0000000..b58181f --- /dev/null +++ b/sources/pyside2/tests/util/py3kcompat.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys + +IS_PY3K = sys.version_info[0] == 3 + +if IS_PY3K: + from py3xfunctions import b, l, unicode_, unicode, unichr, long, unichr, buffer +else: + from py2xfunctions import b, l, unicode_, unicode, unichr, long, unichr, buffer + diff --git a/sources/pyside2/tests/util/py3xfunctions.py b/sources/pyside2/tests/util/py3xfunctions.py new file mode 100644 index 0000000..2d84c47 --- /dev/null +++ b/sources/pyside2/tests/util/py3xfunctions.py @@ -0,0 +1,54 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +def b(s): + if type(s) == bytes: + return s + return bytes(s, "UTF8") + +def buffer_(s): + if s == None: + return None + elif type(s) == str: + return bytes(s, "UTF8") + elif type(s) == bytes: + return s + else: + memoryview(s) + +def l(n): + return n + +def unicode_(s): + return s + +unicode = str +unichr = chr +long = int +unichr = chr +buffer = buffer_ diff --git a/sources/pyside2/tests/util/pyqt_diff.py b/sources/pyside2/tests/util/pyqt_diff.py new file mode 100644 index 0000000..bf755b1 --- /dev/null +++ b/sources/pyside2/tests/util/pyqt_diff.py @@ -0,0 +1,64 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +'''Script to show the difference between PyQt5 and ours''' + +import sys + +from color import print_colored + +def check_module_diff(module_name): + '''Difference between PySide2 and PyQt5 versions of qt bindings. + Returns a tuple with the members present only on PySide2 and only on PyQt5''' + shiboken_module = getattr(__import__('PySide2.' + module_name), module_name) + orig_module = getattr(__import__('PyQt5.' + module_name), module_name) + + shiboken_set = set(dir(shiboken_module)) + orig_set = set(dir(orig_module)) + + return sorted(shiboken_set - orig_set), sorted(orig_set - shiboken_set) + + +def main(argv=None): + if argv is None: + argv = sys.argv + + module_name = argv[1] if len(argv) >= 2 else 'QtCore' + + only_shiboken, only_orig = check_module_diff(module_name) + + print_colored('Only on Shiboken version') + print(only_shiboken) + + print_colored('Only on SIP version') + print(only_orig) + +if __name__ == '__main__': + main() diff --git a/sources/pyside2/tests/util/pyqtcheck.py b/sources/pyside2/tests/util/pyqtcheck.py new file mode 100644 index 0000000..d6cac92 --- /dev/null +++ b/sources/pyside2/tests/util/pyqtcheck.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys +from optparse import OptionParser + +import PyQt4 +from PyQt4 import QtCore, QtGui, QtNetwork + +modules = [QtCore, QtGui, QtNetwork] + +def search(klass, method=None): + for module in modules: + try: + klass_obj = getattr(module, klass) + print "%s *found* on module %s" % (klass, module.__name__) + except AttributeError: + print "%s not found on module %s" % (klass, module.__name__) + continue + + if method is None: + continue + + try: + meth_obj = getattr(klass_obj, method) + + meth_name = ".".join([klass, method]) + klass_name = ".".join([module.__name__, klass]) + print "\"%s\" *found* on class %s" % (meth_name, klass_name) + except AttributeError: + print "\"%s\" not found on class %s" % (method, klass) + + +def main(argv=None): + if argv is None: + argv = sys.argv[1:] + + try: + klass, method = argv[0].split(".") + except: + klass = argv[0] + method = None + + search(klass, method) + +if __name__ == '__main__': + main() diff --git a/sources/pyside2/tests/util/rename_imports.sh b/sources/pyside2/tests/util/rename_imports.sh new file mode 100755 index 0000000..64b1123 --- /dev/null +++ b/sources/pyside2/tests/util/rename_imports.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +# Rename import statements from .py script to use a specific module name +set -e + +if [ $# -lt 3 ]; then + echo "Usage: $0 " + exit 1 +fi + +old_name=$1; shift +new_name=$1; shift + +find "$@" -name "*.py" -exec sed -ri "s/(import|from) $old_name/\1 $new_name/" '{}' \; diff --git a/sources/pyside2/tests/util/test_processtimer.py b/sources/pyside2/tests/util/test_processtimer.py new file mode 100644 index 0000000..ba3e997 --- /dev/null +++ b/sources/pyside2/tests/util/test_processtimer.py @@ -0,0 +1,93 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'Tests for processtimer.py' + +import unittest +import os + +from subprocess import Popen, PIPE +from processtimer import TimeoutException, ProcessTimer + +class TimeoutTest(unittest.TestCase): + + def tearDown(self): + try: + os.kill(self.proc.pid, 9) + except OSError: + pass + + def testRaise(self): + self.proc = Popen(['python2.5', '-c', 'while True: pass' ], stdout=PIPE, stderr=PIPE) + timer = ProcessTimer(self.proc, 1) + self.assertRaises(TimeoutException, timer.waitfor) + +class SimpleTest(unittest.TestCase): + + def tearDown(self): + try: + os.kill(self.proc.pid, 9) + except OSError: + pass + def testSimple(self): + self.proc = Popen(['python2.5', '-c', '"print"'], stdout=PIPE, stderr=PIPE) + timer = ProcessTimer(self.proc, 10) + timer.waitfor() + +class TestEchoOutput(unittest.TestCase): + + def tearDown(self): + try: + os.kill(self.proc.pid, 9) + except OSError: + pass + + def testOutput(self): + self.proc = Popen(['python2.5', '-c', 'print 1',], stdout=PIPE, stderr=PIPE) + timer = ProcessTimer(self.proc, 1) + timer.waitfor() + self.assertEqual(self.proc.stdout.read().strip(), '1') + +class TestRetCode(unittest.TestCase): + + def tearDown(self): + try: + os.kill(self.proc.pid, 9) + except OSError: + pass + + def testSimple(self): + self.proc = Popen(['python2.5', '-c', 'print 1'], stdout=PIPE, stderr=PIPE) + timer = ProcessTimer(self.proc, 10) + timer.waitfor() + + self.assertEqual(self.proc.poll(), 0) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/pyside2/tests/util/use_pyqt4.sh b/sources/pyside2/tests/util/use_pyqt4.sh new file mode 100644 index 0000000..5b88fa5 --- /dev/null +++ b/sources/pyside2/tests/util/use_pyqt4.sh @@ -0,0 +1,3 @@ + +OLD_PYTHONPATH=$PYTHONPATH +PYTHONPATH=`pwd`/util/module_wrapper:$PYTHONPATH diff --git a/sources/pyside2/tests/util/use_pyside.sh b/sources/pyside2/tests/util/use_pyside.sh new file mode 100644 index 0000000..5162074 --- /dev/null +++ b/sources/pyside2/tests/util/use_pyside.sh @@ -0,0 +1,3 @@ + +PYTHONPATH=$OLD_PYTHONPATH +unset OLD_PYTHONPATH diff --git a/sources/pyside2/tests/util/valgrind-python.supp b/sources/pyside2/tests/util/valgrind-python.supp new file mode 100644 index 0000000..a54b451 --- /dev/null +++ b/sources/pyside2/tests/util/valgrind-python.supp @@ -0,0 +1,349 @@ +# +# This is a valgrind suppression file that should be used when using valgrind. +# +# Here's an example of running valgrind: +# +# cd python/dist/src +# valgrind --tool=memcheck --suppressions=Misc/valgrind-python.supp \ +# ./python -E -tt ./Lib/test/regrtest.py -u bsddb,network +# +# You must edit Objects/obmalloc.c and uncomment Py_USING_MEMORY_DEBUGGER +# to use the preferred suppressions with Py_ADDRESS_IN_RANGE. +# +# If you do not want to recompile Python, you can uncomment +# suppressions for PyObject_Free and PyObject_Realloc. +# +# See Misc/README.valgrind for more information. + +# all tool names: Addrcheck,Memcheck,cachegrind,helgrind,massif +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Addr4 + fun:Py_ADDRESS_IN_RANGE +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Value4 + fun:Py_ADDRESS_IN_RANGE +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64 aka amd64) + Memcheck:Value8 + fun:Py_ADDRESS_IN_RANGE +} + +{ + ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value + Memcheck:Cond + fun:Py_ADDRESS_IN_RANGE +} + +# +# Leaks (including possible leaks) +# Hmmm, I wonder if this masks some real leaks. I think it does. +# Will need to fix that. +# + +{ + Handle PyMalloc confusing valgrind (possibly leaked) + Memcheck:Leak + fun:realloc + fun:_PyObject_GC_Resize + fun:COMMENT_THIS_LINE_TO_DISABLE_LEAK_WARNING +} + +{ + Handle PyMalloc confusing valgrind (possibly leaked) + Memcheck:Leak + fun:malloc + fun:_PyObject_GC_New + fun:COMMENT_THIS_LINE_TO_DISABLE_LEAK_WARNING +} + +{ + Handle PyMalloc confusing valgrind (possibly leaked) + Memcheck:Leak + fun:malloc + fun:_PyObject_GC_NewVar + fun:COMMENT_THIS_LINE_TO_DISABLE_LEAK_WARNING +} + +# +# Non-python specific leaks +# + +{ + Handle pthread issue (possibly leaked) + Memcheck:Leak + fun:calloc + fun:allocate_dtv + fun:_dl_allocate_tls_storage + fun:_dl_allocate_tls +} + +{ + Handle pthread issue (possibly leaked) + Memcheck:Leak + fun:memalign + fun:_dl_allocate_tls_storage + fun:_dl_allocate_tls +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Addr4 + fun:PyObject_Free +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Value4 + fun:PyObject_Free +} + +{ + ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value + Memcheck:Cond + fun:PyObject_Free +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Addr4 + fun:PyObject_Realloc +} + +{ + ADDRESS_IN_RANGE/Invalid read of size 4 + Memcheck:Value4 + fun:PyObject_Realloc +} + +{ + ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value + Memcheck:Cond + fun:PyObject_Realloc +} + +### +### All the suppressions below are for errors that occur within libraries +### that Python uses. The problems to not appear to be related to Python's +### use of the libraries. +### + +{ + Generic gentoo ld problems + Memcheck:Cond + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so + obj:/lib/ld-2.3.4.so +} + +{ + DBM problems, see test_dbm + Memcheck:Param + write(buf) + fun:write + obj:/usr/lib/libdb1.so.2 + obj:/usr/lib/libdb1.so.2 + obj:/usr/lib/libdb1.so.2 + obj:/usr/lib/libdb1.so.2 + fun:dbm_close +} + +{ + DBM problems, see test_dbm + Memcheck:Value8 + fun:memmove + obj:/usr/lib/libdb1.so.2 + obj:/usr/lib/libdb1.so.2 + obj:/usr/lib/libdb1.so.2 + obj:/usr/lib/libdb1.so.2 + fun:dbm_store + fun:dbm_ass_sub +} + +{ + DBM problems, see test_dbm + Memcheck:Cond + obj:/usr/lib/libdb1.so.2 + obj:/usr/lib/libdb1.so.2 + obj:/usr/lib/libdb1.so.2 + fun:dbm_store + fun:dbm_ass_sub +} + +{ + DBM problems, see test_dbm + Memcheck:Cond + fun:memmove + obj:/usr/lib/libdb1.so.2 + obj:/usr/lib/libdb1.so.2 + obj:/usr/lib/libdb1.so.2 + obj:/usr/lib/libdb1.so.2 + fun:dbm_store + fun:dbm_ass_sub +} + +{ + GDBM problems, see test_gdbm + Memcheck:Param + write(buf) + fun:write + fun:gdbm_open + +} + +{ + ZLIB problems, see test_gzip + Memcheck:Cond + obj:/lib/libz.so.1.2.3 + obj:/lib/libz.so.1.2.3 + fun:deflate +} + +{ + Avoid problems w/readline doing a putenv and leaking on exit + Memcheck:Leak + fun:malloc + fun:xmalloc + fun:sh_set_lines_and_columns + fun:_rl_get_screen_size + fun:_rl_init_terminal_io + obj:/lib/libreadline.so.4.3 + fun:rl_initialize +} + +### +### These occur from somewhere within the SSL, when running +### test_socket_sll. They are too general to leave on by default. +### +###{ +### somewhere in SSL stuff +### Memcheck:Cond +### fun:memset +###} +###{ +### somewhere in SSL stuff +### Memcheck:Value4 +### fun:memset +###} +### +###{ +### somewhere in SSL stuff +### Memcheck:Cond +### fun:MD5_Update +###} +### +###{ +### somewhere in SSL stuff +### Memcheck:Value4 +### fun:MD5_Update +###} + +# +# All of these problems come from using test_socket_ssl +# +{ + from test_socket_ssl + Memcheck:Cond + fun:BN_bin2bn +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:BN_num_bits_word +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:BN_num_bits_word +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:BN_mod_exp_mont_word +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:BN_mod_exp_mont +} + +{ + from test_socket_ssl + Memcheck:Param + write(buf) + fun:write + obj:/usr/lib/libcrypto.so.0.9.7 +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:RSA_verify +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:RSA_verify +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:DES_set_key_unchecked +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:DES_encrypt2 +} + +{ + from test_socket_ssl + Memcheck:Cond + obj:/usr/lib/libssl.so.0.9.7 +} + +{ + from test_socket_ssl + Memcheck:Value4 + obj:/usr/lib/libssl.so.0.9.7 +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:BUF_MEM_grow_clean +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:memcpy + fun:ssl3_read_bytes +} + +{ + from test_socket_ssl + Memcheck:Cond + fun:SHA1_Update +} + +{ + from test_socket_ssl + Memcheck:Value4 + fun:SHA1_Update +} + + diff --git a/sources/shiboken2/AUTHORS b/sources/shiboken2/AUTHORS new file mode 100644 index 0000000..4bb16b2 --- /dev/null +++ b/sources/shiboken2/AUTHORS @@ -0,0 +1,12 @@ +John Cummings +John Ehresman +Roman Lacko +Matthew Woehlke +Anderson Lizardo +Bruno Araujo +Hugo Parente Lima +Lauro Moura +Luciano Wolf +Marcelo Lira +Renato Araujo Oliveira Filho + diff --git a/sources/shiboken2/ApiExtractor/AUTHORS b/sources/shiboken2/ApiExtractor/AUTHORS new file mode 100644 index 0000000..6e802fb --- /dev/null +++ b/sources/shiboken2/ApiExtractor/AUTHORS @@ -0,0 +1,8 @@ +Anderson Lizardo +Bruno Araujo +Hugo Parente Lima +Lauro Moura +Luciano Wolf +Marcelo Lira +Renato Araujo Oliveira Filho + diff --git a/sources/shiboken2/ApiExtractor/CMakeLists.txt b/sources/shiboken2/ApiExtractor/CMakeLists.txt new file mode 100644 index 0000000..b67a352 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/CMakeLists.txt @@ -0,0 +1,98 @@ +project(apiextractor) + +cmake_minimum_required(VERSION 3.1) +cmake_policy(VERSION 3.1) +find_package(LibXml2 2.6.32) +find_package(LibXslt 1.1.19) + +option(DISABLE_DOCSTRINGS "Disable documentation extraction." FALSE) + +set (USE_LIBXSLT 0) +if (NOT DISABLE_DOCSTRINGS) + if (LIBXSLT_FOUND AND LIBXML2_FOUND) + add_definitions(-DHAVE_LIBXSLT) + set (USE_LIBXSLT 1) + else() + message(WARNING "libxslt and/or libxml not found, falling back to QtXmlPatterns (QTBUG-66925)") + endif() +endif() + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +if(BUILD_TESTS) + set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/tests) +endif () + +set(QT_USE_QTCORE 1) +set(QT_USE_QTXML 1) +add_definitions(-DQT_PLUGIN) +add_definitions(-DQT_SHARED) +add_definitions(-DRXX_ALLOCATOR_INIT_0) + +set(apiextractor_SRC +apiextractor.cpp +abstractmetabuilder.cpp +abstractmetalang.cpp +fileout.cpp +graph.cpp +reporthandler.cpp +typeparser.cpp +typesystem.cpp +include.cpp +typedatabase.cpp +# Clang +clangparser/compilersupport.cpp +clangparser/clangparser.cpp +clangparser/clangbuilder.cpp +clangparser/clangdebugutils.cpp +clangparser/clangutils.cpp +# Old parser +parser/codemodel.cpp +parser/enumvalue.cpp +) + +set(APIEXTRACTOR_EXTRA_INCLUDES ${CLANG_EXTRA_INCLUDES}) +set(APIEXTRACTOR_EXTRA_LIBRARIES ${CLANG_EXTRA_LIBRARIES}) + +if (NOT DISABLE_DOCSTRINGS) + set(apiextractor_SRC + ${apiextractor_SRC} + docparser.cpp + doxygenparser.cpp + qtdocparser.cpp + ) + set(APIEXTRACTOR_EXTRA_INCLUDES ${APIEXTRACTOR_EXTRA_INCLUDES}) + set(APIEXTRACTOR_EXTRA_LIBRARIES ${APIEXTRACTOR_EXTRA_LIBRARIES}) + if (USE_LIBXSLT) + list(APPEND APIEXTRACTOR_EXTRA_INCLUDES ${LIBXSLT_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR}) + list(APPEND APIEXTRACTOR_EXTRA_LIBRARIES ${LIBXSLT_LIBRARIES} ${LIBXML2_LIBRARIES}) + endif() +endif() + +set(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is /lib${LIB_SUFFIX})" FORCE) + +set(CMAKE_AUTOMOC ON) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/parser + ${CMAKE_CURRENT_SOURCE_DIR}/parser/rpp + ${APIEXTRACTOR_EXTRA_INCLUDES} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5Xml_INCLUDE_DIRS} + ) + +add_subdirectory(doc) +add_library(apiextractor STATIC ${apiextractor_SRC} ${apiextractor_RCCS_SRC}) +target_link_libraries(apiextractor + ${Qt5Xml_LIBRARIES} + ${Qt5XmlPatterns_LIBRARIES} + ${APIEXTRACTOR_EXTRA_LIBRARIES} + ) + +if (BUILD_TESTS) + enable_testing() + add_subdirectory(tests) +endif() diff --git a/sources/shiboken2/ApiExtractor/COPYING b/sources/shiboken2/ApiExtractor/COPYING new file mode 100644 index 0000000..4ccd714 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/COPYING @@ -0,0 +1,342 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +------------------------------------------------------------------------- diff --git a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp new file mode 100644 index 0000000..84c1167 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp @@ -0,0 +1,3245 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "abstractmetabuilder_p.h" +#include "reporthandler.h" +#include "typedatabase.h" + +#include +#include +#include + +#include "parser/codemodel.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include "graph.h" +#include + +static inline QString colonColon() { return QStringLiteral("::"); } + +static QString stripTemplateArgs(const QString &name) +{ + int pos = name.indexOf(QLatin1Char('<')); + return pos < 0 ? name : name.left(pos); +} + +static QStringList parseTemplateType(const QString& name) { + int n = name.indexOf(QLatin1Char('<')); + if (n <= 0) { + // If name starts with '<' or contains an unmatched (i.e. any) '>', we + // reject it + if (n == 0 || name.count(QLatin1Char('>'))) + return QStringList(); + // Doesn't look like a template instantiation; just return the name + return QStringList() << name; + } + + // Split the type name into the template name and template arguments; the + // part before the opening '<' is the template name + // + // Example: + // "foo, D>" -> ( "foo", "A", "bar", "D" ) + QStringList result; + result << name.left(n).trimmed(); + + // Extract template arguments + int i, depth = 1; + const int l = name.length(); + for (i = n + 1; i < l; ++i) { + // Consume balanced '<'/'>' within a single argument so that we won't + // split on ',' as part of a single argument which is itself a + // multi-argument template type + if (name[i] == QLatin1Char('<')) { + ++depth; + } else if (name[i] == QLatin1Char('>')) { + if (--depth == 0) + break; + } else if (name[i] == QLatin1Char(',') && depth == 1) { + // Encountered ',' in template argument list that is not within + // another template name; add current argument to result and start + // working on the next argument + result << name.mid(n + 1, i - n - 1).trimmed(); + n = i; + } + } + if (i >= l) // arg list not closed + return QStringList(); + if (i + 1 < l) // arg list closed before end of name + return QStringList(); + + // Add final argument and return result + result << name.mid(n + 1, i - n - 1).trimmed(); + return result; +} + +AbstractMetaBuilderPrivate::AbstractMetaBuilderPrivate() : m_currentClass(0), + m_logDirectory(QLatin1String(".") + QDir::separator()) +{ +} + +AbstractMetaBuilderPrivate::~AbstractMetaBuilderPrivate() +{ + qDeleteAll(m_globalEnums); + qDeleteAll(m_globalFunctions); + qDeleteAll(m_templates); + qDeleteAll(m_smartPointers); + qDeleteAll(m_metaClasses); +} + +AbstractMetaBuilder::AbstractMetaBuilder() : d(new AbstractMetaBuilderPrivate) +{ + d->q = this; +} + +AbstractMetaBuilder::~AbstractMetaBuilder() +{ + delete d; +} + +AbstractMetaClassList AbstractMetaBuilder::classes() const +{ + return d->m_metaClasses; +} + +AbstractMetaClassList AbstractMetaBuilder::templates() const +{ + return d->m_templates; +} + +AbstractMetaClassList AbstractMetaBuilder::smartPointers() const +{ + return d->m_smartPointers; +} + +AbstractMetaFunctionList AbstractMetaBuilder::globalFunctions() const +{ + return d->m_globalFunctions; +} + +AbstractMetaEnumList AbstractMetaBuilder::globalEnums() const +{ + return d->m_globalEnums; +} + +static QString msgNoFunctionForModification(const QString &signature, + const QString &originalSignature, + const QString &className, + const QStringList &possibleSignatures, + const AbstractMetaFunctionList &allFunctions) +{ + QString result; + QTextStream str(&result); + str << "signature '" << signature << '\''; + if (!originalSignature.isEmpty() && originalSignature != signature) + str << " (specified as '" << originalSignature << "')"; + str << " for function modification in '" + << className << "' not found."; + if (possibleSignatures.isEmpty()) { + str << " No candidates were found. Member functions: "; + for (int f = 0, size = allFunctions.size(); f < size; ++f) { + if (f) + str << ", "; + str << allFunctions.at(f)->minimalSignature(); + } + } else { + str << " Possible candidates: " << possibleSignatures.join(QLatin1String(", ")); + } + return result; +} + +void AbstractMetaBuilderPrivate::checkFunctionModifications() +{ + TypeDatabase *types = TypeDatabase::instance(); + const SingleTypeEntryHash entryHash = types->entries(); + + for (SingleTypeEntryHash::const_iterator it = entryHash.cbegin(), end = entryHash.cend(); it != end; ++it) { + const TypeEntry *entry = it.value(); + if (!entry) + continue; + if (!entry->isComplex() || entry->codeGeneration() == TypeEntry::GenerateNothing) + continue; + + const ComplexTypeEntry* centry = static_cast(entry); + + if (!(centry->codeGeneration() & TypeEntry::GenerateTargetLang)) + continue; + + FunctionModificationList modifications = centry->functionModifications(); + + for (const FunctionModification &modification : qAsConst(modifications)) { + QString signature = modification.signature(); + + QString name = signature.trimmed(); + name.truncate(name.indexOf(QLatin1Char('('))); + + AbstractMetaClass *clazz = AbstractMetaClass::findClass(m_metaClasses, centry->qualifiedCppName()); + if (!clazz) + continue; + + const AbstractMetaFunctionList functions = clazz->functions(); + bool found = false; + QStringList possibleSignatures; + for (AbstractMetaFunction *function : functions) { + if (function->implementingClass() == clazz + && modification.matches(function->minimalSignature())) { + found = true; + break; + } + + if (function->originalName() == name) { + possibleSignatures.append(function->minimalSignature() + QLatin1String(" in ") + + function->implementingClass()->name()); + } + } + + if (!found) { + qCWarning(lcShiboken).noquote().nospace() + << msgNoFunctionForModification(signature, + modification.originalSignature(), + clazz->qualifiedCppName(), + possibleSignatures, functions); + } + } + } +} + +AbstractMetaClass *AbstractMetaBuilderPrivate::argumentToClass(ArgumentModelItem argument) +{ + AbstractMetaClass* returned = 0; + AbstractMetaType *type = translateType(argument->type()); + if (type && type->typeEntry() && type->typeEntry()->isComplex()) { + const TypeEntry *entry = type->typeEntry(); + returned = AbstractMetaClass::findClass(m_metaClasses, entry->name()); + } + delete type; + return returned; +} + +/** + * Checks the argument of a hash function and flags the type if it is a complex type + */ +void AbstractMetaBuilderPrivate::registerHashFunction(FunctionModelItem function_item) +{ + ArgumentList arguments = function_item->arguments(); + if (arguments.size() == 1) { + if (AbstractMetaClass *cls = argumentToClass(arguments.at(0))) + cls->setHasHashFunction(true); + } +} + +/** + * Check if a class has a debug stream operator that can be used as toString + */ + +void AbstractMetaBuilderPrivate::registerToStringCapability(FunctionModelItem function_item) +{ + ArgumentList arguments = function_item->arguments(); + if (arguments.size() == 2) { + if (arguments.at(0)->type().toString() == QLatin1String("QDebug")) { + ArgumentModelItem arg = arguments.at(1); + if (AbstractMetaClass *cls = argumentToClass(arg)) { + if (arg->type().indirections() < 2) + cls->setToStringCapability(true); + } + } + } +} + +void AbstractMetaBuilderPrivate::traverseOperatorFunction(FunctionModelItem item) +{ + if (item->accessPolicy() != CodeModel::Public) + return; + + ArgumentList arguments = item->arguments(); + AbstractMetaClass* baseoperandClass; + bool firstArgumentIsSelf = true; + bool unaryOperator = false; + + baseoperandClass = argumentToClass(arguments.at(0)); + + if (arguments.size() == 1) { + unaryOperator = true; + } else if (!baseoperandClass + || !(baseoperandClass->typeEntry()->codeGeneration() & TypeEntry::GenerateTargetLang)) { + baseoperandClass = argumentToClass(arguments.at(1)); + firstArgumentIsSelf = false; + } else { + AbstractMetaType *type = translateType(item->type()); + const TypeEntry *retType = type ? type->typeEntry() : nullptr; + AbstractMetaClass* otherArgClass = argumentToClass(arguments.at(1)); + if (otherArgClass && retType + && (retType->isValue() || retType->isObject()) + && retType != baseoperandClass->typeEntry() + && retType == otherArgClass->typeEntry()) { + baseoperandClass = AbstractMetaClass::findClass(m_metaClasses, retType); + firstArgumentIsSelf = false; + } + delete type; + } + + if (baseoperandClass) { + AbstractMetaClass* oldCurrentClass = m_currentClass; + m_currentClass = baseoperandClass; + AbstractMetaFunction *metaFunction = traverseFunction(item); + if (metaFunction) { + // Strip away first argument, since that is the containing object + AbstractMetaArgumentList arguments = metaFunction->arguments(); + if (firstArgumentIsSelf || unaryOperator) { + AbstractMetaArgument* first = arguments.takeFirst(); + if (!unaryOperator && first->type()->indirections()) + metaFunction->setPointerOperator(true); + delete first; + metaFunction->setArguments(arguments); + } else { + // If the operator method is not unary and the first operator is + // not of the same type of its owning class we suppose that it + // must be an reverse operator (e.g. CLASS::operator(TYPE, CLASS)). + // All operator overloads that operate over a class are already + // being added as member functions of that class by the API Extractor. + AbstractMetaArgument* last = arguments.takeLast(); + if (last->type()->indirections()) + metaFunction->setPointerOperator(true); + delete last; + + metaFunction->setArguments(arguments); + metaFunction->setReverseOperator(true); + } + metaFunction->setFunctionType(AbstractMetaFunction::NormalFunction); + metaFunction->setVisibility(AbstractMetaFunction::Public); + metaFunction->setOriginalAttributes(metaFunction->attributes()); + setupFunctionDefaults(metaFunction, baseoperandClass); + baseoperandClass->addFunction(metaFunction); + Q_ASSERT(!metaFunction->wasPrivate()); + } else if (metaFunction) { + delete metaFunction; + } + + m_currentClass = oldCurrentClass; + } +} + +void AbstractMetaBuilderPrivate::traverseStreamOperator(FunctionModelItem item) +{ + ArgumentList arguments = item->arguments(); + if (arguments.size() == 2 && item->accessPolicy() == CodeModel::Public) { + AbstractMetaClass* streamClass = argumentToClass(arguments.at(0)); + AbstractMetaClass* streamedClass = argumentToClass(arguments.at(1)); + + if (streamClass && streamedClass && (streamClass->isStream())) { + AbstractMetaClass *oldCurrentClass = m_currentClass; + m_currentClass = streamedClass; + AbstractMetaFunction *streamFunction = traverseFunction(item); + + if (streamFunction) { + streamFunction->setFunctionType(AbstractMetaFunction::GlobalScopeFunction); + // Strip first argument, since that is the containing object + AbstractMetaArgumentList arguments = streamFunction->arguments(); + if (!streamClass->typeEntry()->generateCode()) + delete arguments.takeLast(); + else + delete arguments.takeFirst(); + + streamFunction->setArguments(arguments); + + *streamFunction += AbstractMetaAttributes::FinalInTargetLang; + *streamFunction += AbstractMetaAttributes::Public; + streamFunction->setOriginalAttributes(streamFunction->attributes()); + +// streamFunction->setType(0); + + AbstractMetaClass *funcClass; + + if (!streamClass->typeEntry()->generateCode()) { + AbstractMetaArgumentList reverseArgs = reverseList(streamFunction->arguments()); + streamFunction->setArguments(reverseArgs); + streamFunction->setReverseOperator(true); + funcClass = streamedClass; + } else { + funcClass = streamClass; + } + + setupFunctionDefaults(streamFunction, funcClass); + funcClass->addFunction(streamFunction); + if (funcClass == streamClass) + funcClass->typeEntry()->addExtraInclude(streamedClass->typeEntry()->include()); + else + funcClass->typeEntry()->addExtraInclude(streamClass->typeEntry()->include()); + + m_currentClass = oldCurrentClass; + } else if (streamFunction) { + delete streamFunction; + } + + } + } +} + +void AbstractMetaBuilderPrivate::fixQObjectForScope(const FileModelItem &dom, + const TypeDatabase *types, + const NamespaceModelItem &scope) +{ + const ClassList &scopeClasses = scope->classes(); + for (const ClassModelItem &item : scopeClasses) { + QString qualifiedName = item->qualifiedName().join(colonColon()); + TypeEntry* entry = types->findType(qualifiedName); + if (entry) { + if (isQObject(dom, qualifiedName) && entry->isComplex()) + ((ComplexTypeEntry*) entry)->setQObject(true); + } + } + + const NamespaceList &namespaces = scope->namespaces(); + for (const NamespaceModelItem &n : namespaces) { + if (scope != n) + fixQObjectForScope(dom, types, n); + } +} + +void AbstractMetaBuilderPrivate::sortLists() +{ + for (AbstractMetaClass *cls : qAsConst(m_metaClasses)) + cls->sortFunctions(); +} + +FileModelItem AbstractMetaBuilderPrivate::buildDom(QByteArrayList arguments, + LanguageLevel level, + unsigned clangFlags) +{ + clang::Builder builder; + if (level == LanguageLevel::Default) + level = clang::emulatedCompilerLanguageLevel(); + arguments.prepend(QByteArrayLiteral("-std=") + + clang::languageLevelOption(level)); + FileModelItem result = clang::parse(arguments, clangFlags, builder) + ? builder.dom() : FileModelItem(); + const clang::BaseVisitor::Diagnostics &diagnostics = builder.diagnostics(); + if (const int diagnosticsCount = diagnostics.size()) { + QDebug d = qWarning(); + d.nospace(); + d.noquote(); + d << "Clang: " << diagnosticsCount << " diagnostic messages:\n"; + for (int i = 0; i < diagnosticsCount; ++i) + d << " " << diagnostics.at(i) << '\n'; + } + return result; +} + +void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom) +{ + const TypeDatabase *types = TypeDatabase::instance(); + + pushScope(dom); + + // fix up QObject's in the type system.. + fixQObjectForScope(dom, types, dom); + + // Start the generation... + const ClassList &typeValues = dom->classes(); + ReportHandler::setProgressReference(typeValues); + for (const ClassModelItem &item : typeValues) { + ReportHandler::progress(QLatin1String("Generating class model...")); + AbstractMetaClass *cls = traverseClass(dom, item); + if (!cls) + continue; + + addAbstractMetaClass(cls); + } + + // We need to know all global enums + const EnumList &enums = dom->enums(); + ReportHandler::setProgressReference(enums); + for (const EnumModelItem &item : enums) { + ReportHandler::progress(QLatin1String("Generating enum model...")); + AbstractMetaEnum *metaEnum = traverseEnum(item, 0, QSet()); + if (metaEnum) { + if (metaEnum->typeEntry()->generateCode()) + m_globalEnums << metaEnum; + } + } + + const QSet &namespaceTypeValues = dom->uniqueNamespaces(); + ReportHandler::setProgressReference(namespaceTypeValues); + for (const NamespaceModelItem &item : namespaceTypeValues) { + ReportHandler::progress(QLatin1String("Generating namespace model...")); + AbstractMetaClass *metaClass = traverseNamespace(dom, item); + if (metaClass) + m_metaClasses << metaClass; + } + + // Go through all typedefs to see if we have defined any + // specific typedefs to be used as classes. + const TypeDefList typeDefs = dom->typeDefs(); + ReportHandler::setProgressReference(typeDefs); + for (const TypeDefModelItem &typeDef : typeDefs) { + ReportHandler::progress(QLatin1String("Resolving typedefs...")); + AbstractMetaClass* cls = traverseTypeDef(dom, typeDef); + addAbstractMetaClass(cls); + } + + for (const ClassModelItem &item : typeValues) + traverseClassMembers(item); + + for (const NamespaceModelItem &item : namespaceTypeValues) + traverseNamespaceMembers(item); + + // Global functions + const FunctionList &functions = dom->functions(); + for (const FunctionModelItem &func : functions) { + if (func->accessPolicy() != CodeModel::Public || func->name().startsWith(QLatin1String("operator"))) + continue; + + FunctionTypeEntry* funcEntry = types->findFunctionType(func->name()); + if (!funcEntry || !funcEntry->generateCode()) + continue; + + AbstractMetaFunction* metaFunc = traverseFunction(func); + if (!metaFunc) + continue; + + if (!funcEntry->hasSignature(metaFunc->minimalSignature())) { + delete metaFunc; + continue; + } + + applyFunctionModifications(metaFunc); + + setInclude(funcEntry, func->fileName()); + if (metaFunc->typeEntry()) + delete metaFunc->typeEntry(); + + metaFunc->setTypeEntry(funcEntry); + m_globalFunctions << metaFunc; + } + + ReportHandler::setProgressReference(m_metaClasses); + for (AbstractMetaClass *cls : qAsConst(m_metaClasses)) { + ReportHandler::progress(QLatin1String("Fixing class inheritance...")); + if (!cls->isInterface() && !cls->isNamespace()) + setupInheritance(cls); + } + + ReportHandler::setProgressReference(m_metaClasses); + for (AbstractMetaClass *cls : qAsConst(m_metaClasses)) { + ReportHandler::progress(QLatin1String("Detecting inconsistencies in class model...")); + cls->fixFunctions(); + + if (!cls->typeEntry()) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("class '%1' does not have an entry in the type system") + .arg(cls->name()); + } else { + const bool couldAddDefaultCtors = cls->isConstructible() + && !cls->isInterface() && !cls->isNamespace() + && (cls->attributes() & AbstractMetaAttributes::HasRejectedConstructor) == 0; + if (couldAddDefaultCtors) { + if (!cls->hasConstructors()) + cls->addDefaultConstructor(); + if (cls->typeEntry()->isValue() && !cls->isAbstract() && !cls->hasCopyConstructor()) + cls->addDefaultCopyConstructor(ancestorHasPrivateCopyConstructor(cls)); + } + } + + if (cls->isAbstract() && !cls->isInterface()) + cls->typeEntry()->setLookupName(cls->typeEntry()->targetLangName() + QLatin1String("$ConcreteWrapper")); + } + const TypeEntryHash allEntries = types->allEntries(); + ReportHandler::progress(QLatin1String("Detecting inconsistencies in typesystem...")); + for (TypeEntryHash::const_iterator it = allEntries.cbegin(), end = allEntries.cend(); it != end; ++it) { + for (TypeEntry *entry : it.value()) { + if (entry->isPrimitive()) + continue; + + if ((entry->isValue() || entry->isObject()) + && !entry->isString() + && !entry->isChar() + && !entry->isContainer() + && !entry->isCustom() + && !entry->isVariant() + && (entry->generateCode() & TypeEntry::GenerateTargetLang) + && !AbstractMetaClass::findClass(m_metaClasses, entry->qualifiedCppName())) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("type '%1' is specified in typesystem, but not defined. This could potentially lead to compilation errors.") + .arg(entry->qualifiedCppName()); + } else if (entry->generateCode() && entry->type() == TypeEntry::FunctionType) { + const FunctionTypeEntry* fte = static_cast(entry); + const QStringList &signatures = fte->signatures(); + for (const QString &signature : signatures) { + bool ok = false; + for (AbstractMetaFunction* func : qAsConst(m_globalFunctions)) { + if (signature == func->minimalSignature()) { + ok = true; + break; + } + } + if (!ok) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("Global function '%1' is specified in typesystem, but not defined. This could potentially lead to compilation errors.") + .arg(signature); + } + } + } else if (entry->isEnum() && (entry->generateCode() & TypeEntry::GenerateTargetLang)) { + const QString name = ((EnumTypeEntry*) entry)->targetLangQualifier(); + AbstractMetaClass *cls = AbstractMetaClass::findClass(m_metaClasses, name); + + bool enumFound = false; + if (cls) { + enumFound = cls->findEnum(entry->targetLangName()); + } else { // Global enum + for (AbstractMetaEnum *metaEnum : qAsConst(m_enums)) { + if (metaEnum->typeEntry() == entry) { + enumFound = true; + break; + } + } + } + if (!enumFound) { + entry->setCodeGeneration(TypeEntry::GenerateNothing); + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("enum '%1' is specified in typesystem, but not declared") + .arg(entry->qualifiedCppName()); + } + + } + } + } + + { + const FunctionList &hashFunctions = dom->findFunctions(QLatin1String("qHash")); + for (const FunctionModelItem &item : hashFunctions) + registerHashFunction(item); + } + + { + const FunctionList &streamOps = dom->findFunctions(QLatin1String("operator<<")); + for (const FunctionModelItem &item : streamOps) + registerToStringCapability(item); + } + + { + FunctionList binaryOperators = dom->findFunctions(QStringLiteral("operator==")); + binaryOperators.append(dom->findFunctions(QStringLiteral("operator!="))); + binaryOperators.append(dom->findFunctions(QStringLiteral("operator<="))); + binaryOperators.append(dom->findFunctions(QStringLiteral("operator>="))); + binaryOperators.append(dom->findFunctions(QStringLiteral("operator<"))); + binaryOperators.append(dom->findFunctions(QStringLiteral("operator+"))); + binaryOperators.append(dom->findFunctions(QStringLiteral("operator/"))); + // Filter binary operators, skipping for example + // class Iterator { ... Value *operator*() ... }; + const FunctionList potentiallyBinaryOperators = + dom->findFunctions(QStringLiteral("operator*")) + + dom->findFunctions(QStringLiteral("operator&")); + for (const FunctionModelItem &item : potentiallyBinaryOperators) { + if (!item->arguments().isEmpty()) + binaryOperators.append(item); + } + binaryOperators.append(dom->findFunctions(QStringLiteral("operator-"))); + binaryOperators.append(dom->findFunctions(QStringLiteral("operator&"))); + binaryOperators.append(dom->findFunctions(QStringLiteral("operator|"))); + binaryOperators.append(dom->findFunctions(QStringLiteral("operator^"))); + binaryOperators.append(dom->findFunctions(QStringLiteral("operator~"))); + binaryOperators.append(dom->findFunctions(QStringLiteral("operator>"))); + + for (const FunctionModelItem &item : qAsConst(binaryOperators)) + traverseOperatorFunction(item); + } + + { + const FunctionList streamOperators = dom->findFunctions(QLatin1String("operator<<")) + + dom->findFunctions(QLatin1String("operator>>")); + for (const FunctionModelItem &item : streamOperators) + traverseStreamOperator(item); + } + + checkFunctionModifications(); + + // sort all classes topologically + m_metaClasses = classesTopologicalSorted(); + + for (AbstractMetaClass* cls : qAsConst(m_metaClasses)) { +// setupEquals(cls); +// setupComparable(cls); + setupClonable(cls); + setupExternalConversion(cls); + + // sort all inner classes topologically + if (!cls->typeEntry()->codeGeneration() || cls->innerClasses().size() < 2) + continue; + + cls->setInnerClasses(classesTopologicalSorted(cls)); + } + + dumpLog(); + + sortLists(); + + m_currentClass = 0; + + // Functions added to the module on the type system. + const AddedFunctionList &globalUserFunctions = types->globalUserFunctions(); + for (const AddedFunction &addedFunc : globalUserFunctions) { + AbstractMetaFunction* metaFunc = traverseFunction(addedFunc); + if (Q_UNLIKELY(!metaFunc)) { + qFatal("Unable to traverse added global function \"%s\".", + qPrintable(addedFunc.name())); + } + metaFunc->setFunctionType(AbstractMetaFunction::NormalFunction); + m_globalFunctions << metaFunc; + } + + std::puts(""); +} + +bool AbstractMetaBuilder::build(const QByteArrayList &arguments, + LanguageLevel level, + unsigned clangFlags) +{ + const FileModelItem dom = d->buildDom(arguments, level, clangFlags); + if (dom.isNull()) + return false; + if (ReportHandler::isDebug(ReportHandler::MediumDebug)) + qCDebug(lcShiboken) << dom.data(); + d->traverseDom(dom); + return true; +} + +void AbstractMetaBuilder::setLogDirectory(const QString& logDir) +{ + d->m_logDirectory = logDir; + if (!d->m_logDirectory.endsWith(QDir::separator())) + d->m_logDirectory.append(QDir::separator()); +} + +void AbstractMetaBuilderPrivate::addAbstractMetaClass(AbstractMetaClass *cls) +{ + if (!cls) + return; + + cls->setOriginalAttributes(cls->attributes()); + if (cls->typeEntry()->isContainer()) { + m_templates << cls; + } else if (cls->typeEntry()->isSmartPointer()) { + m_smartPointers << cls; + } else { + m_metaClasses << cls; + if (cls->typeEntry()->designatedInterface()) { + AbstractMetaClass* interface = cls->extractInterface(); + m_metaClasses << interface; + if (ReportHandler::isDebug(ReportHandler::SparseDebug)) + qCDebug(lcShiboken) << QStringLiteral(" -> interface '%1'").arg(interface->name()); + } + } +} + +AbstractMetaClass *AbstractMetaBuilderPrivate::traverseNamespace(const FileModelItem &dom, + const NamespaceModelItem &namespaceItem) +{ + QString namespaceName = + (!m_namespacePrefix.isEmpty() ? m_namespacePrefix + colonColon() : QString()) + + namespaceItem->name(); + NamespaceTypeEntry *type = TypeDatabase::instance()->findNamespaceType(namespaceName); + + if (TypeDatabase::instance()->isClassRejected(namespaceName)) { + m_rejectedClasses.insert(namespaceName, AbstractMetaBuilder::GenerationDisabled); + return 0; + } + + if (!type) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("namespace '%1' does not have a type entry").arg(namespaceName); + return 0; + } + + AbstractMetaClass* metaClass = new AbstractMetaClass; + metaClass->setTypeEntry(type); + + *metaClass += AbstractMetaAttributes::Public; + + m_currentClass = metaClass; + + if (ReportHandler::isDebug(ReportHandler::SparseDebug)) { + qCDebug(lcShiboken) + << QStringLiteral("namespace '%1.%2'").arg(metaClass->package(), namespaceItem->name()); + } + + traverseEnums(namespaceItem, metaClass, namespaceItem->enumsDeclarations()); + + pushScope(namespaceItem); + m_namespacePrefix = currentScope()->qualifiedName().join(colonColon()); + + const ClassList &classes = namespaceItem->classes(); + for (const ClassModelItem &cls : classes) { + AbstractMetaClass* mjc = traverseClass(dom, cls); + if (mjc) { + metaClass->addInnerClass(mjc); + mjc->setEnclosingClass(metaClass); + addAbstractMetaClass(mjc); + } + } + + // Go through all typedefs to see if we have defined any + // specific typedefs to be used as classes. + const TypeDefList typeDefs = namespaceItem->typeDefs(); + for (const TypeDefModelItem &typeDef : typeDefs) { + AbstractMetaClass *cls = traverseTypeDef(dom, typeDef); + if (cls) { + metaClass->addInnerClass(cls); + cls->setEnclosingClass(metaClass); + addAbstractMetaClass(cls); + } + } + + // Traverse namespaces recursively + const QSet &innerNamespaces = namespaceItem->uniqueNamespaces(); + for (const NamespaceModelItem &ni : innerNamespaces) { + AbstractMetaClass* mjc = traverseNamespace(dom, ni); + if (mjc) { + metaClass->addInnerClass(mjc); + mjc->setEnclosingClass(metaClass); + addAbstractMetaClass(mjc); + } + } + + m_currentClass = 0; + + popScope(); + m_namespacePrefix = currentScope()->qualifiedName().join(colonColon()); + + if (!type->include().isValid()) + setInclude(type, namespaceItem->fileName()); + + return metaClass; +} + +AbstractMetaEnum *AbstractMetaBuilderPrivate::traverseEnum(EnumModelItem enumItem, + AbstractMetaClass *enclosing, + const QSet &enumsDeclarations) +{ + QString qualifiedName = enumItem->qualifiedName().join(colonColon()); + + TypeEntry* typeEntry = 0; + if (enumItem->accessPolicy() == CodeModel::Private) { + QStringList names = enumItem->qualifiedName(); + QString enumName = names.constLast(); + QString nspace; + if (names.size() > 1) + nspace = QStringList(names.mid(0, names.size() - 1)).join(colonColon()); + typeEntry = new EnumTypeEntry(nspace, enumName, QVersionNumber(0, 0)); + TypeDatabase::instance()->addType(typeEntry); + } else if (enumItem->enumKind() != AnonymousEnum) { + typeEntry = TypeDatabase::instance()->findType(qualifiedName); + } else { + QStringList tmpQualifiedName = enumItem->qualifiedName(); + const EnumeratorList &enums = enumItem->enumerators(); + for (const EnumeratorModelItem& enumValue : enums) { + tmpQualifiedName.removeLast(); + tmpQualifiedName << enumValue->name(); + qualifiedName = tmpQualifiedName.join(colonColon()); + typeEntry = TypeDatabase::instance()->findType(qualifiedName); + if (typeEntry) + break; + } + } + + QString enumName = enumItem->name(); + + QString className; + if (m_currentClass) + className = m_currentClass->typeEntry()->qualifiedCppName(); + + QString rejectReason; + if (TypeDatabase::instance()->isEnumRejected(className, enumName, &rejectReason)) { + if (typeEntry) + typeEntry->setCodeGeneration(TypeEntry::GenerateNothing); + m_rejectedEnums.insert(qualifiedName + rejectReason, AbstractMetaBuilder::GenerationDisabled); + return 0; + } + + if ((!typeEntry || !typeEntry->isEnum())) { + if (!m_currentClass || + (m_currentClass->typeEntry()->codeGeneration() & TypeEntry::GenerateTargetLang)) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("enum '%1' does not have a type entry or is not an enum") + .arg(qualifiedName); + } + m_rejectedEnums.insert(qualifiedName, AbstractMetaBuilder::NotInTypeSystem); + return 0; + } + + AbstractMetaEnum *metaEnum = new AbstractMetaEnum; + metaEnum->setEnumKind(enumItem->enumKind()); + metaEnum->setSigned(enumItem->isSigned()); + if (enumsDeclarations.contains(qualifiedName) + || enumsDeclarations.contains(enumName)) { + metaEnum->setHasQEnumsDeclaration(true); + } + + EnumTypeEntry *enumTypeEntry = static_cast(typeEntry); + metaEnum->setTypeEntry(enumTypeEntry); + switch (enumItem->accessPolicy()) { + case CodeModel::Public: + *metaEnum += AbstractMetaAttributes::Public; + break; + case CodeModel::Protected: + *metaEnum += AbstractMetaAttributes::Protected; + break; + case CodeModel::Private: + *metaEnum += AbstractMetaAttributes::Private; + typeEntry->setCodeGeneration(TypeEntry::GenerateNothing); + break; + default: + break; + } + + if (ReportHandler::isDebug(ReportHandler::MediumDebug)) + qCDebug(lcShiboken) << " - traversing enum " << metaEnum->fullName(); + + const EnumeratorList &enums = enumItem->enumerators(); + for (const EnumeratorModelItem &value : enums) { + + AbstractMetaEnumValue *metaEnumValue = new AbstractMetaEnumValue; + metaEnumValue->setName(value->name()); + // Deciding the enum value... + + metaEnumValue->setStringValue(value->stringValue()); + metaEnumValue->setValue(value->value()); + metaEnum->addEnumValue(metaEnumValue); + + if (ReportHandler::isDebug(ReportHandler::FullDebug)) { + qCDebug(lcShiboken) << " - " << metaEnumValue->name() << " = " + << metaEnumValue->value() << " = " << metaEnumValue->value(); + } + + // Add into global register... + if (enclosing) + m_enumValues[enclosing->name() + colonColon() + metaEnumValue->name()] = metaEnumValue; + else + m_enumValues[metaEnumValue->name()] = metaEnumValue; + } + + m_enums << metaEnum; + + if (!metaEnum->typeEntry()->include().isValid()) + setInclude(metaEnum->typeEntry(), enumItem->fileName()); + + metaEnum->setOriginalAttributes(metaEnum->attributes()); + + // Register all enum values on Type database + const EnumeratorList &enumerators = enumItem->enumerators(); + for (const EnumeratorModelItem &e : enumerators) { + QString name; + if (enclosing) { + name += enclosing->name(); + name += colonColon(); + } + name += e->name(); + EnumValueTypeEntry *enumValue = + new EnumValueTypeEntry(name, e->stringValue(), + enumTypeEntry, enumTypeEntry->version()); + TypeDatabase::instance()->addType(enumValue); + } + + return metaEnum; +} + +AbstractMetaClass* AbstractMetaBuilderPrivate::traverseTypeDef(const FileModelItem &dom, + const TypeDefModelItem &typeDef) +{ + TypeDatabase* types = TypeDatabase::instance(); + QString className = stripTemplateArgs(typeDef->name()); + + QString fullClassName = className; + // we have an inner class + if (m_currentClass) { + fullClassName = stripTemplateArgs(m_currentClass->typeEntry()->qualifiedCppName()) + + colonColon() + fullClassName; + } + + // If this is the alias for a primitive type + // we store the aliased type on the alias + // TypeEntry + PrimitiveTypeEntry* ptype = types->findPrimitiveType(className); + if (ptype) { + QString typeDefName = typeDef->type().qualifiedName()[0]; + ptype->setReferencedTypeEntry(types->findPrimitiveType(typeDefName)); + return 0; + } + + + // If we haven't specified anything for the typedef, then we don't care + ComplexTypeEntry* type = types->findComplexType(fullClassName); + if (!type) + return 0; + + if (type->isObject()) + static_cast(type)->setQObject(isQObject(dom, stripTemplateArgs(typeDef->type().qualifiedName().join(colonColon())))); + + AbstractMetaClass *metaClass = new AbstractMetaClass; + metaClass->setTypeDef(true); + metaClass->setTypeEntry(type); + metaClass->setBaseClassNames(QStringList() << typeDef->type().qualifiedName().join(colonColon())); + *metaClass += AbstractMetaAttributes::Public; + + // Set the default include file name + if (!type->include().isValid()) + setInclude(type, typeDef->fileName()); + + fillAddedFunctions(metaClass); + + return metaClass; +} + +AbstractMetaClass *AbstractMetaBuilderPrivate::traverseClass(const FileModelItem &dom, + const ClassModelItem &classItem) +{ + QString className = stripTemplateArgs(classItem->name()); + QString fullClassName = className; + + // we have inner an class + if (m_currentClass) { + fullClassName = stripTemplateArgs(m_currentClass->typeEntry()->qualifiedCppName()) + + colonColon() + fullClassName; + } + + ComplexTypeEntry* type = TypeDatabase::instance()->findComplexType(fullClassName); + AbstractMetaBuilder::RejectReason reason = AbstractMetaBuilder::NoReason; + + if (TypeDatabase::instance()->isClassRejected(fullClassName)) { + reason = AbstractMetaBuilder::GenerationDisabled; + } else if (!type) { + TypeEntry *te = TypeDatabase::instance()->findType(fullClassName); + if (te && !te->isComplex()) + reason = AbstractMetaBuilder::RedefinedToNotClass; + else + reason = AbstractMetaBuilder::NotInTypeSystem; + } else if (type->codeGeneration() == TypeEntry::GenerateNothing) { + reason = AbstractMetaBuilder::GenerationDisabled; + } + if (reason != AbstractMetaBuilder::NoReason) { + m_rejectedClasses.insert(fullClassName, reason); + return 0; + } + + if (type->isObject()) + ((ObjectTypeEntry*)type)->setQObject(isQObject(dom, fullClassName)); + + AbstractMetaClass *metaClass = new AbstractMetaClass; + metaClass->setTypeEntry(type); + + if (classItem->isFinal()) + *metaClass += AbstractMetaAttributes::FinalCppClass; + + QStringList baseClassNames; + const QVector<_ClassModelItem::BaseClass> &baseClasses = classItem->baseClasses(); + for (const _ClassModelItem::BaseClass &baseClass : baseClasses) { + if (baseClass.accessPolicy == CodeModel::Public) + baseClassNames.append(baseClass.name); + } + + metaClass->setBaseClassNames(baseClassNames); + *metaClass += AbstractMetaAttributes::Public; + if (type->stream()) + metaClass->setStream(true); + + AbstractMetaClass* oldCurrentClass = m_currentClass; + m_currentClass = metaClass; + + if (ReportHandler::isDebug(ReportHandler::SparseDebug)) { + const QString message = type->isContainer() + ? QStringLiteral("container: '%1'").arg(fullClassName) + : QStringLiteral("class: '%1'").arg(metaClass->fullName()); + qCDebug(lcShiboken) << message; + } + + TemplateParameterList template_parameters = classItem->templateParameters(); + QVector template_args; + template_args.clear(); + for (int i = 0; i < template_parameters.size(); ++i) { + const TemplateParameterModelItem ¶m = template_parameters.at(i); + TemplateArgumentEntry *param_type = new TemplateArgumentEntry(param->name(), type->version()); + param_type->setOrdinal(i); + template_args.append(param_type); + } + metaClass->setTemplateArguments(template_args); + + parseQ_Property(metaClass, classItem->propertyDeclarations()); + + traverseEnums(classItem, metaClass, classItem->enumsDeclarations()); + + // Inner classes + { + const ClassList &innerClasses = classItem->classes(); + for (const ClassModelItem &ci : innerClasses) { + AbstractMetaClass *cl = traverseClass(dom, ci); + if (cl) { + cl->setEnclosingClass(metaClass); + metaClass->addInnerClass(cl); + m_metaClasses << cl; + } + } + + } + + // Go through all typedefs to see if we have defined any + // specific typedefs to be used as classes. + const TypeDefList typeDefs = classItem->typeDefs(); + for (const TypeDefModelItem &typeDef : typeDefs) { + AbstractMetaClass *cls = traverseTypeDef(dom, typeDef); + if (cls) { + cls->setEnclosingClass(metaClass); + addAbstractMetaClass(cls); + } + } + + + m_currentClass = oldCurrentClass; + + // Set the default include file name + if (!type->include().isValid()) + setInclude(type, classItem->fileName()); + + return metaClass; +} + +void AbstractMetaBuilderPrivate::traverseScopeMembers(ScopeModelItem item, + AbstractMetaClass *metaClass) +{ + // Classes/Namespace members + traverseFields(item, metaClass); + traverseFunctions(item, metaClass); + + // Inner classes + const ClassList &innerClasses = item->classes(); + for (const ClassModelItem& ci : innerClasses) + traverseClassMembers(ci); +} + +AbstractMetaClass* AbstractMetaBuilderPrivate::currentTraversedClass(ScopeModelItem item) +{ + QString className = stripTemplateArgs(item->name()); + QString fullClassName = className; + + // This is an inner class + if (m_currentClass) + fullClassName = stripTemplateArgs(m_currentClass->typeEntry()->qualifiedCppName()) + colonColon() + fullClassName; + + AbstractMetaClass *metaClass = AbstractMetaClass::findClass(m_metaClasses, fullClassName); + if (!metaClass) + metaClass = AbstractMetaClass::findClass(m_templates, fullClassName); + + if (!metaClass) + metaClass = AbstractMetaClass::findClass(m_smartPointers, fullClassName); + return metaClass; +} + +void AbstractMetaBuilderPrivate::traverseClassMembers(ClassModelItem item) +{ + AbstractMetaClass* metaClass = currentTraversedClass(item); + if (!metaClass) + return; + + AbstractMetaClass* oldCurrentClass = m_currentClass; + m_currentClass = metaClass; + + // Class members + traverseScopeMembers(item, metaClass); + + m_currentClass = oldCurrentClass; +} + +void AbstractMetaBuilderPrivate::traverseNamespaceMembers(NamespaceModelItem item) +{ + AbstractMetaClass* metaClass = currentTraversedClass(item); + if (!metaClass) + return; + + AbstractMetaClass* oldCurrentClass = m_currentClass; + m_currentClass = metaClass; + + // Namespace members + traverseScopeMembers(item, metaClass); + + // Inner namespaces + const QSet &innerNamespaces = item->uniqueNamespaces(); + for (const NamespaceModelItem &ni : innerNamespaces) + traverseNamespaceMembers(ni); + + m_currentClass = oldCurrentClass; +} + +static inline QString fieldSignatureWithType(VariableModelItem field) +{ + return field->name() + QStringLiteral(" -> ") + field->type().toString(); +} + +static inline QString qualifiedFieldSignatureWithType(const QString &className, + VariableModelItem field) +{ + return className + colonColon() + fieldSignatureWithType(field); +} + +AbstractMetaField *AbstractMetaBuilderPrivate::traverseField(VariableModelItem field, + const AbstractMetaClass *cls) +{ + QString fieldName = field->name(); + QString className = m_currentClass->typeEntry()->qualifiedCppName(); + + // Ignore friend decl. + if (field->isFriend()) + return 0; + + if (field->accessPolicy() == CodeModel::Private) + return 0; + + QString rejectReason; + if (TypeDatabase::instance()->isFieldRejected(className, fieldName, &rejectReason)) { + m_rejectedFields.insert(qualifiedFieldSignatureWithType(className, field) + rejectReason, + AbstractMetaBuilder::GenerationDisabled); + return 0; + } + + + AbstractMetaField *metaField = new AbstractMetaField; + metaField->setName(fieldName); + metaField->setEnclosingClass(cls); + + TypeInfo fieldType = field->type(); + AbstractMetaType *metaType = translateType(fieldType); + + if (!metaType) { + const QString type = TypeInfo::resolveType(fieldType, currentScope()).qualifiedName().join(colonColon()); + if (m_currentClass->typeEntry()->codeGeneration() & TypeEntry::GenerateTargetLang) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("skipping field '%1::%2' with unmatched type '%3'") + .arg(m_currentClass->name(), fieldName, type); + } + delete metaField; + return 0; + } + + metaField->setType(metaType); + + AbstractMetaAttributes::Attributes attr = 0; + if (field->isStatic()) + attr |= AbstractMetaAttributes::Static; + + CodeModel::AccessPolicy policy = field->accessPolicy(); + if (policy == CodeModel::Public) + attr |= AbstractMetaAttributes::Public; + else if (policy == CodeModel::Protected) + attr |= AbstractMetaAttributes::Protected; + else + attr |= AbstractMetaAttributes::Private; + metaField->setAttributes(attr); + + return metaField; +} + +void AbstractMetaBuilderPrivate::traverseFields(ScopeModelItem scope_item, + AbstractMetaClass *metaClass) +{ + const VariableList &variables = scope_item->variables(); + for (const VariableModelItem &field : variables) { + AbstractMetaField* metaField = traverseField(field, metaClass); + + if (metaField && !metaField->isModifiedRemoved()) { + metaField->setOriginalAttributes(metaField->attributes()); + metaClass->addField(metaField); + } + } +} + +void AbstractMetaBuilderPrivate::setupFunctionDefaults(AbstractMetaFunction *metaFunction, + AbstractMetaClass *metaClass) +{ + // Set the default value of the declaring class. This may be changed + // in fixFunctions later on + metaFunction->setDeclaringClass(metaClass); + + // Some of the queries below depend on the implementing class being set + // to function properly. Such as function modifications + metaFunction->setImplementingClass(metaClass); + + if (metaFunction->name() == QLatin1String("operator_equal")) + metaClass->setHasEqualsOperator(true); +} + +void AbstractMetaBuilderPrivate::fixReturnTypeOfConversionOperator(AbstractMetaFunction *metaFunction) +{ + if (!metaFunction->isConversionOperator()) + return; + + TypeDatabase* types = TypeDatabase::instance(); + static const QRegularExpression operatorRegExp(QStringLiteral("^operator ")); + Q_ASSERT(operatorRegExp.isValid()); + QString castTo = metaFunction->name().remove(operatorRegExp).trimmed(); + + if (castTo.endsWith(QLatin1Char('&'))) + castTo.chop(1); + if (castTo.startsWith(QLatin1String("const "))) + castTo.remove(0, 6); + + TypeEntry* retType = types->findType(castTo); + if (!retType) + return; + + AbstractMetaType* metaType = new AbstractMetaType; + metaType->setTypeEntry(retType); + metaFunction->replaceType(metaType); +} + +static bool _compareAbstractMetaTypes(const AbstractMetaType* type, const AbstractMetaType* other) +{ + if (!type && !other) + return true; + if (!type || !other) + return false; + return type->typeEntry() == other->typeEntry() + && type->isConstant() == other->isConstant() + && type->referenceType() == other->referenceType() + && type->indirections() == other->indirections(); +} + +static bool _compareAbstractMetaFunctions(const AbstractMetaFunction* func, const AbstractMetaFunction* other) +{ + if (!func && !other) + return true; + if (!func || !other) + return false; + if (func->arguments().count() != other->arguments().count() + || func->isConstant() != other->isConstant() + || func->isStatic() != other->isStatic() + || !_compareAbstractMetaTypes(func->type(), other->type())) { + return false; + } + for (int i = 0; i < func->arguments().count(); ++i) { + if (!_compareAbstractMetaTypes(func->arguments().at(i)->type(), other->arguments().at(i)->type())) + return false; + } + return true; +} + +AbstractMetaFunctionList AbstractMetaBuilderPrivate::classFunctionList(const ScopeModelItem &scopeItem, + bool *constructorRejected) +{ + *constructorRejected = false; + AbstractMetaFunctionList result; + const FunctionList &scopeFunctionList = scopeItem->functions(); + result.reserve(scopeFunctionList.size()); + for (const FunctionModelItem &function : scopeFunctionList) { + if (AbstractMetaFunction *metaFunction = traverseFunction(function)) + result.append(metaFunction); + else if (function->functionType() == CodeModel::Constructor) + *constructorRejected = true; + } + return result; +} + +// For template classes, entries with more specific types may exist from out-of- +// line definitions. If there is a declaration which matches it after fixing +// the parameters, remove it as duplicate. For example: +// template class Vector { public: +// Vector(const Vector &rhs); +// }; +// template class +// Vector::Vector(const Vector&) {} // More specific, remove declaration. + +class DuplicatingFunctionPredicate : public std::unary_function { +public: + explicit DuplicatingFunctionPredicate(const AbstractMetaFunction *f) : m_function(f) {} + + bool operator()(const AbstractMetaFunction *rhs) const + { + return rhs != m_function && rhs->name() == m_function->name() + && _compareAbstractMetaFunctions(m_function, rhs); + } + +private: + const AbstractMetaFunction *m_function; +}; + +void AbstractMetaBuilderPrivate::traverseFunctions(ScopeModelItem scopeItem, + AbstractMetaClass *metaClass) +{ + bool constructorRejected = false; + const AbstractMetaFunctionList functions = + classFunctionList(scopeItem, &constructorRejected); + + if (constructorRejected) + *metaClass += AbstractMetaAttributes::HasRejectedConstructor; + + for (AbstractMetaFunction *metaFunction : functions){ + metaFunction->setOriginalAttributes(metaFunction->attributes()); + if (metaClass->isNamespace()) + *metaFunction += AbstractMetaAttributes::Static; + + QPropertySpec *read = 0; + if (!metaFunction->isSignal() && (read = metaClass->propertySpecForRead(metaFunction->name()))) { + // Property reader must be in the form " name()" + if (metaFunction->type() && (read->type() == metaFunction->type()->typeEntry()) && (metaFunction->arguments().size() == 0)) { + *metaFunction += AbstractMetaAttributes::PropertyReader; + metaFunction->setPropertySpec(read); + } + } else if (QPropertySpec* write = metaClass->propertySpecForWrite(metaFunction->name())) { + // Property setter must be in the form "void name()" + // make sure the function was created with all aguments, some argument can be missing during the pareser because of errors on typesystem + if ((!metaFunction->type()) && (metaFunction->arguments().size() == 1) && (write->type() == metaFunction->arguments().at(0)->type()->typeEntry())) { + *metaFunction += AbstractMetaAttributes::PropertyWriter; + metaFunction->setPropertySpec(write); + } + } else if (QPropertySpec* reset = metaClass->propertySpecForReset(metaFunction->name())) { + // Property resetter must be in the form "void name()" + if ((!metaFunction->type()) && (metaFunction->arguments().size() == 0)) { + *metaFunction += AbstractMetaAttributes::PropertyResetter; + metaFunction->setPropertySpec(reset); + } + } + + const bool isInvalidDestructor = metaFunction->isDestructor() && metaFunction->isPrivate(); + const bool isInvalidConstructor = metaFunction->functionType() == AbstractMetaFunction::ConstructorFunction + && metaFunction->isPrivate(); + if (isInvalidConstructor) + metaClass->setHasPrivateConstructor(true); + if ((isInvalidDestructor || isInvalidConstructor) + && !metaClass->hasNonPrivateConstructor()) { + *metaClass += AbstractMetaAttributes::FinalInTargetLang; + } else if (metaFunction->isConstructor() && !metaFunction->isPrivate()) { + *metaClass -= AbstractMetaAttributes::FinalInTargetLang; + metaClass->setHasNonPrivateConstructor(true); + } + + // Classes with virtual destructors should always have a shell class + // (since we aren't registering the destructors, we need this extra check) + if (metaFunction->isDestructor() && metaFunction->isVirtual() + && metaFunction->visibility() != AbstractMetaAttributes::Private) { + metaClass->setForceShellClass(true); + } + + if (!metaFunction->isDestructor() + && !(metaFunction->isPrivate() && metaFunction->functionType() == AbstractMetaFunction::ConstructorFunction)) { + + setupFunctionDefaults(metaFunction, metaClass); + + if (metaFunction->isSignal() && metaClass->hasSignal(metaFunction)) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("signal '%1' in class '%2' is overloaded.") + .arg(metaFunction->name(), metaClass->name()); + } + + if (metaFunction->isSignal() && !metaClass->isQObject()) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("signal '%1' in non-QObject class '%2'") + .arg(metaFunction->name(), metaClass->name()); + } + + if (metaFunction->isConversionOperator()) + fixReturnTypeOfConversionOperator(metaFunction); + + metaClass->addFunction(metaFunction); + applyFunctionModifications(metaFunction); + } else if (metaFunction->isDestructor()) { + metaClass->setHasPrivateDestructor(metaFunction->isPrivate()); + metaClass->setHasProtectedDestructor(metaFunction->isProtected()); + metaClass->setHasVirtualDestructor(metaFunction->isVirtual()); + } + if (!metaFunction->ownerClass()) { + delete metaFunction; + metaFunction = 0; + } + } + + fillAddedFunctions(metaClass); +} + +void AbstractMetaBuilderPrivate::fillAddedFunctions(AbstractMetaClass *metaClass) +{ + // Add the functions added by the typesystem + const AddedFunctionList &addedFunctions = metaClass->typeEntry()->addedFunctions(); + for (const AddedFunction &addedFunc : addedFunctions) { + if (!traverseFunction(addedFunc, metaClass)) { + qFatal("Unable to traverse function \"%s\" added to \"%s\".", + qPrintable(addedFunc.name()), qPrintable(metaClass->name())); + } + } +} + +void AbstractMetaBuilderPrivate::applyFunctionModifications(AbstractMetaFunction *func) +{ + const FunctionModificationList &mods = func->modifications(func->implementingClass()); + AbstractMetaFunction& funcRef = *func; + for (const FunctionModification &mod : mods) { + if (mod.isRenameModifier()) { + func->setOriginalName(func->name()); + func->setName(mod.renamedTo()); + } else if (mod.isAccessModifier()) { + funcRef -= AbstractMetaAttributes::Public; + funcRef -= AbstractMetaAttributes::Protected; + funcRef -= AbstractMetaAttributes::Private; + funcRef -= AbstractMetaAttributes::Friendly; + + if (mod.isPublic()) + funcRef += AbstractMetaAttributes::Public; + else if (mod.isProtected()) + funcRef += AbstractMetaAttributes::Protected; + else if (mod.isPrivate()) + funcRef += AbstractMetaAttributes::Private; + else if (mod.isFriendly()) + funcRef += AbstractMetaAttributes::Friendly; + } + + if (mod.isFinal()) + funcRef += AbstractMetaAttributes::FinalInTargetLang; + else if (mod.isNonFinal()) + funcRef -= AbstractMetaAttributes::FinalInTargetLang; + } +} + +bool AbstractMetaBuilderPrivate::setupInheritance(AbstractMetaClass *metaClass) +{ + Q_ASSERT(!metaClass->isInterface()); + + if (m_setupInheritanceDone.contains(metaClass)) + return true; + + m_setupInheritanceDone.insert(metaClass); + + QStringList baseClasses = metaClass->baseClassNames(); + + // we only support our own containers and ONLY if there is only one baseclass + if (baseClasses.size() == 1 && baseClasses.constFirst().contains(QLatin1Char('<'))) { + TypeInfo info; + ComplexTypeEntry* baseContainerType; + AbstractMetaClass* templ = findTemplateClass(baseClasses.constFirst(), metaClass, &info, &baseContainerType); + if (templ) { + setupInheritance(templ); + inheritTemplate(metaClass, templ, info); + metaClass->typeEntry()->setBaseContainerType(templ->typeEntry()); + return true; + } + + if (baseContainerType) { + // Container types are not necessarily wrapped as 'real' classes, + // but there may still be classes derived from them. In such case, + // we still need to set the base container type in order to + // generate correct code for type conversion checking. + // + // Additionally, we consider this case as successfully setting up + // inheritance. + metaClass->typeEntry()->setBaseContainerType(baseContainerType); + return true; + } + + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("template baseclass '%1' of '%2' is not known") + .arg(baseClasses.constFirst(), metaClass->name()); + return false; + } + + TypeDatabase* types = TypeDatabase::instance(); + + int primary = -1; + int primaries = 0; + for (int i = 0; i < baseClasses.size(); ++i) { + + if (types->isClassRejected(baseClasses.at(i))) + continue; + + TypeEntry* baseClassEntry = types->findType(baseClasses.at(i)); + if (!baseClassEntry) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("class '%1' inherits from unknown base class '%2'") + .arg(metaClass->name(), baseClasses.at(i)); + } else if (!baseClassEntry->designatedInterface()) { // true for primary base class + primaries++; + primary = i; + } + } + + if (primary >= 0) { + AbstractMetaClass *baseClass = AbstractMetaClass::findClass(m_metaClasses, baseClasses.at(primary)); + if (!baseClass) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("unknown baseclass for '%1': '%2'") + .arg(metaClass->name(), baseClasses.at(primary)); + return false; + } + metaClass->setBaseClass(baseClass); + } + + for (int i = 0; i < baseClasses.size(); ++i) { + if (types->isClassRejected(baseClasses.at(i))) + continue; + + if (i != primary) { + AbstractMetaClass *baseClass = AbstractMetaClass::findClass(m_metaClasses, baseClasses.at(i)); + if (!baseClass) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("class not found for setup inheritance '%1'").arg(baseClasses.at(i)); + return false; + } + + setupInheritance(baseClass); + + QString interfaceName = baseClass->isInterface() ? InterfaceTypeEntry::interfaceName(baseClass->name()) : baseClass->name(); + AbstractMetaClass *iface = AbstractMetaClass::findClass(m_metaClasses, interfaceName); + if (!iface) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("unknown interface for '%1': '%2'").arg(metaClass->name(), interfaceName); + return false; + } + metaClass->addInterface(iface); + + const AbstractMetaClassList &interfaces = iface->interfaces(); + for (AbstractMetaClass* iface : interfaces) + metaClass->addInterface(iface); + } + } + + return true; +} + +void AbstractMetaBuilderPrivate::traverseEnums(ScopeModelItem scopeItem, + AbstractMetaClass *metaClass, + const QStringList &enumsDeclarations) +{ + const EnumList &enums = scopeItem->enums(); + for (const EnumModelItem &enumItem : enums) { + AbstractMetaEnum* metaEnum = traverseEnum(enumItem, metaClass, QSet::fromList(enumsDeclarations)); + if (metaEnum) { + metaClass->addEnum(metaEnum); + metaEnum->setEnclosingClass(metaClass); + } + } +} + +AbstractMetaFunction* AbstractMetaBuilderPrivate::traverseFunction(const AddedFunction& addedFunc) +{ + return traverseFunction(addedFunc, 0); +} + +AbstractMetaFunction* AbstractMetaBuilderPrivate::traverseFunction(const AddedFunction& addedFunc, + AbstractMetaClass *metaClass) +{ + AbstractMetaFunction *metaFunction = new AbstractMetaFunction; + metaFunction->setConstant(addedFunc.isConstant()); + metaFunction->setName(addedFunc.name()); + metaFunction->setOriginalName(addedFunc.name()); + AbstractMetaClass::Attributes visibility = + addedFunc.access() == AddedFunction::Public + ? AbstractMetaAttributes::Public : AbstractMetaAttributes::Protected; + metaFunction->setVisibility(visibility); + metaFunction->setUserAdded(true); + AbstractMetaAttributes::Attribute isStatic = addedFunc.isStatic() ? AbstractMetaFunction::Static : AbstractMetaFunction::None; + metaFunction->setAttributes(metaFunction->attributes() | AbstractMetaAttributes::FinalInTargetLang | isStatic); + metaFunction->setType(translateType(addedFunc.returnType())); + + + QVector args = addedFunc.arguments(); + AbstractMetaArgumentList metaArguments; + + for (int i = 0; i < args.count(); ++i) { + AddedFunction::TypeInfo& typeInfo = args[i]; + AbstractMetaArgument *metaArg = new AbstractMetaArgument; + AbstractMetaType *type = translateType(typeInfo); + if (Q_UNLIKELY(!type)) { + qCWarning(lcShiboken, + "Unable to translate type \"%s\" of argument %d of added function \"%s\".", + qPrintable(typeInfo.name), i + 1, qPrintable(addedFunc.name())); + delete metaFunction; + return nullptr; + } + type->decideUsagePattern(); + metaArg->setType(type); + metaArg->setArgumentIndex(i); + metaArg->setDefaultValueExpression(typeInfo.defaultValue); + metaArg->setOriginalDefaultValueExpression(typeInfo.defaultValue); + metaArguments.append(metaArg); + } + + metaFunction->setArguments(metaArguments); + if (metaFunction->isOperatorOverload() && !metaFunction->isCallOperator()) { + if (metaArguments.size() > 2) { + qCWarning(lcShiboken) << "An operator overload need to have 0, 1 or 2 arguments if it's reverse."; + } else if (metaArguments.size() == 2) { + // Check if it's a reverse operator + if (metaArguments[1]->type()->typeEntry() == metaClass->typeEntry()) { + metaFunction->setReverseOperator(true); + // we need to call these two function to cache the old signature (with two args) + // we do this buggy behaviour to comply with the original apiextractor buggy behaviour. + metaFunction->signature(); + metaFunction->minimalSignature(); + metaArguments.removeLast(); + metaFunction->setArguments(metaArguments); + } else { + qCWarning(lcShiboken) << "Operator overload can have two arguments only if it's a reverse operator!"; + } + } + } + + + // Find the correct default values + for (int i = 0; i < metaArguments.size(); ++i) { + AbstractMetaArgument* metaArg = metaArguments.at(i); + + //use relace-default-expression for set default value + QString replacedExpression; + if (m_currentClass) + replacedExpression = metaFunction->replacedDefaultExpression(m_currentClass, i + 1); + + if (!replacedExpression.isEmpty()) { + QString expr = replacedExpression; + if (!metaFunction->removedDefaultExpression(m_currentClass, i + 1)) { + metaArg->setDefaultValueExpression(expr); + metaArg->setOriginalDefaultValueExpression(expr); + + if (metaArg->type()->isEnum() || metaArg->type()->isFlags()) + m_enumDefaultArguments << QPair(metaArg, metaFunction); + } + } + } + + metaFunction->setOriginalAttributes(metaFunction->attributes()); + if (!metaArguments.isEmpty()) + fixArgumentNames(metaFunction, metaFunction->modifications(m_currentClass)); + + if (metaClass) { + const AbstractMetaArgumentList fargs = metaFunction->arguments(); + if (metaClass->isNamespace()) + *metaFunction += AbstractMetaFunction::Static; + if (metaFunction->name() == metaClass->name()) { + metaFunction->setFunctionType(AbstractMetaFunction::ConstructorFunction); + if (fargs.size() == 1) { + const TypeEntry *te = fargs.constFirst()->type()->typeEntry(); + if (te->isCustom()) + metaFunction->setExplicit(true); + if (te->name() == metaFunction->name()) + metaFunction->setFunctionType(AbstractMetaFunction::CopyConstructorFunction); + } + } else { + metaFunction->setFunctionType(AbstractMetaFunction::NormalFunction); + } + + metaFunction->setDeclaringClass(metaClass); + metaFunction->setImplementingClass(metaClass); + metaClass->addFunction(metaFunction); + metaClass->setHasNonPrivateConstructor(true); + } + + return metaFunction; +} + +void AbstractMetaBuilderPrivate::fixArgumentNames(AbstractMetaFunction *func, const FunctionModificationList &mods) +{ + for (const FunctionModification &mod : mods) { + for (const ArgumentModification &argMod : mod.argument_mods) { + if (!argMod.renamed_to.isEmpty()) { + AbstractMetaArgument* arg = func->arguments().at(argMod.index - 1); + arg->setOriginalName(arg->name()); + arg->setName(argMod.renamed_to, false); + } + } + } + + AbstractMetaArgumentList arguments = func->arguments(); + for (int i = 0, size = arguments.size(); i < size; ++i) { + if (arguments.at(i)->name().isEmpty()) + arguments[i]->setName(QLatin1String("arg__") + QString::number(i + 1), false); + } +} + +static QString functionSignature(FunctionModelItem functionItem) +{ + QStringList args; + const ArgumentList &arguments = functionItem->arguments(); + for (const ArgumentModelItem &arg : arguments) + args << arg->type().toString(); + return functionItem->name() + QLatin1Char('(') + args.join(QLatin1Char(',')) + QLatin1Char(')'); +} + +static inline QString qualifiedFunctionSignatureWithType(const FunctionModelItem &functionItem, + const QString &className = QString()) +{ + QString result = functionItem->type().toString() + QLatin1Char(' '); + if (!className.isEmpty()) + result += className + colonColon(); + result += functionSignature(functionItem); + return result; +} + +static inline QString msgUnmatchedParameterType(const ArgumentModelItem &arg, int n) +{ + QString result; + QTextStream str(&result); + str << "unmatched type '" << arg->type().toString() << "' in parameter #" + << (n + 1); + if (!arg->name().isEmpty()) + str << " \"" << arg->name() << '"'; + return result; +} + +static inline QString msgUnmatchedReturnType(const FunctionModelItem &functionItem) +{ + return QLatin1String("unmatched return type '") + + functionItem->type().toString() + QLatin1Char('\''); +} + +static inline QString msgVoidParameterType(const ArgumentModelItem &arg, int n) +{ + QString result; + QTextStream str(&result); + str << "'void' encountered at parameter #" << (n + 1); + if (!arg->name().isEmpty()) + str << " \"" << arg->name() << '"'; + return result; +} + +static QString msgSkippingFunction(const FunctionModelItem &functionItem, + const QString &signature, const QString &why) +{ + QString result; + QTextStream str(&result); + str << "skipping "; + if (functionItem->isAbstract()) + str << "abstract "; + str << "function '" << signature << "', " << why; + if (functionItem->isAbstract()) { + str << "\nThis will lead to compilation errors due to not " + "being able to instantiate the wrapper."; + } + return result; +} + +static inline AbstractMetaFunction::FunctionType functionTypeFromCodeModel(CodeModel::FunctionType ft) +{ + AbstractMetaFunction::FunctionType result = AbstractMetaFunction::NormalFunction; + switch (ft) { + case CodeModel::Constructor: + result = AbstractMetaFunction::ConstructorFunction; + break; + case CodeModel::CopyConstructor: + result = AbstractMetaFunction::CopyConstructorFunction; + break; + case CodeModel::MoveConstructor: + result = AbstractMetaFunction::MoveConstructorFunction; + break; + case CodeModel::Destructor: + result = AbstractMetaFunction::DestructorFunction; + break; + case CodeModel::Normal: + break; + case CodeModel::Signal: + result = AbstractMetaFunction::SignalFunction; + break; + case CodeModel::Slot: + result = AbstractMetaFunction::SlotFunction; + break; + } + return result; +} + +static inline QString msgCannotSetArrayUsage(const QString &function, int i, const QString &reason) +{ + return function + QLatin1String(": Cannot use parameter ") + QString::number(i + 1) + + QLatin1String(" as an array: ") + reason; +} + +bool AbstractMetaBuilderPrivate::setArrayArgumentType(AbstractMetaFunction *func, + const FunctionModelItem &functionItem, + int i) +{ + if (i < 0 || i >= func->arguments().size()) { + qCWarning(lcShiboken).noquote() + << msgCannotSetArrayUsage(func->minimalSignature(), i, + QLatin1String("Index out of range.")); + return false; + } + AbstractMetaType *metaType = func->arguments().at(i)->type(); + if (metaType->indirections() == 0) { + qCWarning(lcShiboken).noquote() + << msgCannotSetArrayUsage(func->minimalSignature(), i, + QLatin1String("Type does not have indirections.")); + return false; + } + TypeInfo elementType = functionItem->arguments().at(i)->type(); + elementType.setIndirections(elementType.indirections() - 1); + AbstractMetaType *element = translateType(elementType); + if (element == nullptr) { + qCWarning(lcShiboken).noquote() + << msgCannotSetArrayUsage(func->minimalSignature(), i, + QLatin1String("Cannot translate element type ") + elementType.toString()); + return false; + } + metaType->setArrayElementType(element); + metaType->setTypeUsagePattern(AbstractMetaType::NativePointerAsArrayPattern); + return true; +} + +AbstractMetaFunction *AbstractMetaBuilderPrivate::traverseFunction(FunctionModelItem functionItem) +{ + if (functionItem->isDeleted() || !functionItem->templateParameters().isEmpty()) + return nullptr; + QString functionName = functionItem->name(); + QString className; + if (m_currentClass) { + // Clang: Skip qt_metacast(), qt_metacall(), expanded from Q_OBJECT + // and overridden metaObject(), QGADGET helpers + if (functionName == QLatin1String("qt_check_for_QGADGET_macro") + || functionName.startsWith(QLatin1String("qt_meta"))) { + return nullptr; + } + className = m_currentClass->typeEntry()->qualifiedCppName(); + if (functionName == QLatin1String("metaObject") && className != QLatin1String("QObject")) + return nullptr; + } + + // Store original signature with unresolved typedefs for message/log purposes + const QString originalQualifiedSignatureWithReturn = + qualifiedFunctionSignatureWithType(functionItem, className); + + QString rejectReason; + if (TypeDatabase::instance()->isFunctionRejected(className, functionName, &rejectReason)) { + m_rejectedFunctions.insert(originalQualifiedSignatureWithReturn + rejectReason, AbstractMetaBuilder::GenerationDisabled); + return 0; + } + else if (TypeDatabase::instance()->isFunctionRejected(className, + functionSignature(functionItem), &rejectReason)) { + m_rejectedFunctions.insert(originalQualifiedSignatureWithReturn + rejectReason, AbstractMetaBuilder::GenerationDisabled); + return 0; + } + + if (functionItem->isFriend()) + return 0; + + AbstractMetaFunction *metaFunction = new AbstractMetaFunction; + // Additional check for assignment/move assignment down below + metaFunction->setFunctionType(functionTypeFromCodeModel(functionItem->functionType())); + metaFunction->setConstant(functionItem->isConstant()); + + if (ReportHandler::isDebug(ReportHandler::MediumDebug)) + qCDebug(lcShiboken).noquote().nospace() << " - " << functionName << "()"; + + metaFunction->setName(functionName); + metaFunction->setOriginalName(functionItem->name()); + + if (functionItem->isAbstract()) + *metaFunction += AbstractMetaAttributes::Abstract; + + if (functionItem->isVirtual()) { + *metaFunction += AbstractMetaAttributes::VirtualCppMethod; + if (functionItem->isOverride()) + *metaFunction += AbstractMetaAttributes::OverriddenCppMethod; + if (functionItem->isFinal()) + *metaFunction += AbstractMetaAttributes::FinalCppMethod; + } else { + *metaFunction += AbstractMetaAttributes::FinalInTargetLang; + } + + if (functionItem->isInvokable()) + *metaFunction += AbstractMetaAttributes::Invokable; + + if (functionItem->isStatic()) { + *metaFunction += AbstractMetaAttributes::Static; + *metaFunction += AbstractMetaAttributes::FinalInTargetLang; + } + + // Access rights + if (functionItem->accessPolicy() == CodeModel::Public) + *metaFunction += AbstractMetaAttributes::Public; + else if (functionItem->accessPolicy() == CodeModel::Private) + *metaFunction += AbstractMetaAttributes::Private; + else + *metaFunction += AbstractMetaAttributes::Protected; + + switch (metaFunction->functionType()) { + case AbstractMetaFunction::DestructorFunction: + break; + case AbstractMetaFunction::ConstructorFunction: + metaFunction->setExplicit(functionItem->isExplicit()); + metaFunction->setName(m_currentClass->name()); + break; + default: { + TypeInfo returnType = functionItem->type(); + + if (TypeDatabase::instance()->isReturnTypeRejected(className, returnType.toString(), &rejectReason)) { + m_rejectedFunctions.insert(originalQualifiedSignatureWithReturn + rejectReason, AbstractMetaBuilder::GenerationDisabled); + delete metaFunction; + return nullptr; + } + + AbstractMetaType *type = nullptr; + if (!returnType.isVoid()) { + type = translateType(returnType); + if (!type) { + const QString reason = msgUnmatchedReturnType(functionItem); + qCWarning(lcShiboken, "%s", + qPrintable(msgSkippingFunction(functionItem, originalQualifiedSignatureWithReturn, reason))); + m_rejectedFunctions.insert(originalQualifiedSignatureWithReturn, AbstractMetaBuilder::UnmatchedReturnType); + delete metaFunction; + return nullptr; + } + } + + metaFunction->setType(type); + } + break; + } + + ArgumentList arguments = functionItem->arguments(); + + if (arguments.size() == 1) { + ArgumentModelItem arg = arguments.at(0); + TypeInfo type = arg->type(); + if (type.qualifiedName().constFirst() == QLatin1String("void") && type.indirections() == 0) + arguments.pop_front(); + } + + AbstractMetaArgumentList metaArguments; + + for (int i = 0; i < arguments.size(); ++i) { + ArgumentModelItem arg = arguments.at(i); + + if (TypeDatabase::instance()->isArgumentTypeRejected(className, arg->type().toString(), &rejectReason)) { + m_rejectedFunctions.insert(originalQualifiedSignatureWithReturn + rejectReason, AbstractMetaBuilder::GenerationDisabled); + delete metaFunction; + return nullptr; + } + + AbstractMetaType *metaType = translateType(arg->type()); + if (!metaType) { + // If an invalid argument has a default value, simply remove it + if (arg->defaultValue()) { + if (!m_currentClass + || (m_currentClass->typeEntry()->codeGeneration() + & TypeEntry::GenerateTargetLang)) { + qCWarning(lcShiboken).noquote().nospace() + << "Stripping argument #" << (i + 1) << " of " + << originalQualifiedSignatureWithReturn + << " due to unmatched type \"" << arg->type().toString() + << "\" with default expression \"" + << arg->defaultValueExpression() << "\"."; + } + break; + } + Q_ASSERT(metaType == 0); + const QString reason = msgUnmatchedParameterType(arg, i); + qCWarning(lcShiboken, "%s", + qPrintable(msgSkippingFunction(functionItem, originalQualifiedSignatureWithReturn, reason))); + const QString rejectedFunctionSignature = originalQualifiedSignatureWithReturn + + QLatin1String(": ") + reason; + m_rejectedFunctions.insert(rejectedFunctionSignature, AbstractMetaBuilder::UnmatchedArgumentType); + delete metaFunction; + return nullptr; + } + + if (metaType == Q_NULLPTR) { + const QString reason = msgVoidParameterType(arg, i); + qCWarning(lcShiboken, "%s", + qPrintable(msgSkippingFunction(functionItem, originalQualifiedSignatureWithReturn, reason))); + const QString rejectedFunctionSignature = originalQualifiedSignatureWithReturn + + QLatin1String(": ") + reason; + m_rejectedFunctions.insert(rejectedFunctionSignature, AbstractMetaBuilder::UnmatchedArgumentType); + delete metaFunction; + return nullptr; + } + + AbstractMetaArgument *metaArgument = new AbstractMetaArgument; + + metaArgument->setType(metaType); + metaArgument->setName(arg->name()); + metaArgument->setArgumentIndex(i); + metaArguments << metaArgument; + } + + metaFunction->setArguments(metaArguments); + + // Find the correct default values + for (int i = 0, size = metaArguments.size(); i < size; ++i) { + ArgumentModelItem arg = arguments.at(i); + AbstractMetaArgument* metaArg = metaArguments.at(i); + + //use relace-default-expression for set default value + QString replacedExpression; + if (m_currentClass) { + replacedExpression = metaFunction->replacedDefaultExpression(m_currentClass, i + 1); + } else { + FunctionModificationList mods = TypeDatabase::instance()->functionModifications(metaFunction->minimalSignature()); + if (!mods.isEmpty()) { + QVector argMods = mods.constFirst().argument_mods; + if (!argMods.isEmpty()) + replacedExpression = argMods.constFirst().replacedDefaultExpression; + } + } + + bool hasDefaultValue = false; + if (arg->defaultValue() || !replacedExpression.isEmpty()) { + QString expr = arg->defaultValueExpression(); + expr = fixDefaultValue(arg, metaArg->type(), metaFunction, m_currentClass, i); + metaArg->setOriginalDefaultValueExpression(expr); + + if (metaFunction->removedDefaultExpression(m_currentClass, i + 1)) { + expr.clear(); + } else if (!replacedExpression.isEmpty()) { + expr = replacedExpression; + } + metaArg->setDefaultValueExpression(expr); + + if (metaArg->type()->isEnum() || metaArg->type()->isFlags()) + m_enumDefaultArguments << QPair(metaArg, metaFunction); + + hasDefaultValue = !expr.isEmpty(); + } + + //Check for missing argument name + if (hasDefaultValue + && !metaArg->hasName() + && !metaFunction->isOperatorOverload() + && !metaFunction->isSignal() + && metaFunction->argumentName(i+1, false, m_currentClass).isEmpty()) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("Argument %1 on function '%2::%3' has default expression but does not have name.") + .arg(i+1).arg(className, metaFunction->minimalSignature()); + } + + } + + if (!metaArguments.isEmpty()) { + const FunctionModificationList &mods = metaFunction->modifications(m_currentClass); + fixArgumentNames(metaFunction, mods); + for (const FunctionModification &mod : mods) { + for (const ArgumentModification &argMod : mod.argument_mods) { + if (argMod.array) + setArrayArgumentType(metaFunction, functionItem, argMod.index - 1); + } + } + } + + // Determine class special functions + if (m_currentClass && metaFunction->arguments().size() == 1) { + const AbstractMetaType *argType = metaFunction->arguments().constFirst()->type(); + if (argType->typeEntry() == m_currentClass->typeEntry() && argType->indirections() == 0) { + if (metaFunction->name() == QLatin1String("operator=")) { + switch (argType->referenceType()) { + case NoReference: + metaFunction->setFunctionType(AbstractMetaFunction::AssignmentOperatorFunction); + break; + case LValueReference: + if (argType->isConstant()) + metaFunction->setFunctionType(AbstractMetaFunction::AssignmentOperatorFunction); + break; + case RValueReference: + metaFunction->setFunctionType(AbstractMetaFunction::MoveAssignmentOperatorFunction); + break; + } + } + } + } + return metaFunction; +} + +AbstractMetaType *AbstractMetaBuilderPrivate::translateType(const AddedFunction::TypeInfo &typeInfo) +{ + Q_ASSERT(!typeInfo.name.isEmpty()); + TypeDatabase* typeDb = TypeDatabase::instance(); + TypeEntry* type; + + QString typeName = typeInfo.name; + + if (typeName == QLatin1String("void")) + return 0; + + type = typeDb->findType(typeName); + + // test if the type is a template, like a container + bool isTemplate = false; + QStringList templateArgs; + if (!type && typeInfo.name.contains(QLatin1Char('<'))) { + const QStringList& parsedType = parseTemplateType(typeInfo.name); + if (parsedType.isEmpty()) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("Template type parsing failed for '%1'").arg(typeInfo.name); + } else { + templateArgs = parsedType.mid(1); + isTemplate = (type = typeDb->findContainerType(parsedType[0])); + } + } + + if (!type) { + QStringList candidates; + SingleTypeEntryHash entries = typeDb->entries(); + for (SingleTypeEntryHash::const_iterator it = entries.cbegin(), end = entries.cend(); it != end; ++it) { + // Let's try to find the type in different scopes. + if (it.key().endsWith(colonColon() + typeName)) + candidates.append(it.key()); + } + + QString msg = QStringLiteral("Type '%1' wasn't found in the type database.\n").arg(typeName); + + if (candidates.isEmpty()) + qFatal(qPrintable(QString(msg + QLatin1String("Declare it in the type system using the proper <*-type> tag."))), NULL); + + msg += QLatin1String("Remember to inform the full qualified name for the type you want to use.\nCandidates are:\n"); + candidates.sort(); + for (const QString& candidate : qAsConst(candidates)) { + msg += QLatin1String(" ") + candidate + QLatin1Char('\n'); + } + qFatal(qPrintable(msg), NULL); + } + + AbstractMetaType *metaType = new AbstractMetaType; + metaType->setTypeEntry(type); + metaType->setIndirections(typeInfo.indirections); + if (typeInfo.isReference) + metaType->setReferenceType(LValueReference); + metaType->setConstant(typeInfo.isConstant); + if (isTemplate) { + for (const QString& templateArg : qAsConst(templateArgs)) { + AbstractMetaType *metaArgType = translateType(AddedFunction::TypeInfo::fromSignature(templateArg)); + metaType->addInstantiation(metaArgType); + } + metaType->setTypeUsagePattern(AbstractMetaType::ContainerPattern); + } + + return metaType; +} + +static const TypeEntry* findTypeEntryUsingContext(const AbstractMetaClass* metaClass, const QString& qualifiedName) +{ + const TypeEntry* type = 0; + QStringList context = metaClass->qualifiedCppName().split(colonColon()); + while(!type && (context.size() > 0) ) { + type = TypeDatabase::instance()->findType(context.join(colonColon()) + colonColon() + qualifiedName); + context.removeLast(); + } + return type; +} + +AbstractMetaType *AbstractMetaBuilderPrivate::translateType(const TypeInfo &_typei, + bool resolveType) +{ + // 1. Test the type info without resolving typedefs in case this is present in the + // type system + TypeInfo typei; + if (resolveType) { + if (AbstractMetaType *resolved = translateType(_typei, false)) + return resolved; + } + + if (!resolveType) { + typei = _typei; + } else { + // Go through all parts of the current scope (including global namespace) + // to resolve typedefs. The parser does not properly resolve typedefs in + // the global scope when they are referenced from inside a namespace. + // This is a work around to fix this bug since fixing it in resolveType + // seemed non-trivial + int i = m_scopes.size() - 1; + while (i >= 0) { + typei = TypeInfo::resolveType(_typei, m_scopes.at(i--)); + if (typei.qualifiedName().join(colonColon()) != _typei.qualifiedName().join(colonColon())) + break; + } + + } + + if (typei.isFunctionPointer()) + return nullptr; + + QString errorMessage; + TypeInfo typeInfo = TypeParser::parse(typei.toString(), &errorMessage); + if (typeInfo.qualifiedName().isEmpty()) { + qWarning().noquote().nospace() << "Unable to translate type \"" << _typei.toString() + << "\": " << errorMessage; + return 0; + } + + // 2. Handle arrays. + // 2.1 Handle char arrays with unspecified size (aka "const char[]") as "const char*" with + // NativePointerPattern usage. + bool oneDimensionalArrayOfUnspecifiedSize = + typeInfo.arrayElements().size() == 1 + && typeInfo.arrayElements().at(0).isEmpty(); + + bool isConstCharStarCase = + oneDimensionalArrayOfUnspecifiedSize + && typeInfo.qualifiedName().size() == 1 + && typeInfo.qualifiedName().at(0) == QStringLiteral("char") + && typeInfo.indirections() == 0 + && typeInfo.isConstant() + && typeInfo.referenceType() == NoReference + && typeInfo.arguments().isEmpty(); + + if (isConstCharStarCase) + typeInfo.setIndirections(typeInfo.indirections() + typeInfo.arrayElements().size()); + + // 2.2 Handle regular arrays. + if (!typeInfo.arrayElements().isEmpty() && !isConstCharStarCase) { + TypeInfo newInfo; + //newInfo.setArguments(typeInfo.arguments()); + newInfo.setIndirections(typeInfo.indirections()); + newInfo.setConstant(typeInfo.isConstant()); + newInfo.setFunctionPointer(typeInfo.isFunctionPointer()); + newInfo.setQualifiedName(typeInfo.qualifiedName()); + newInfo.setReferenceType(typeInfo.referenceType()); + newInfo.setVolatile(typeInfo.isVolatile()); + + AbstractMetaType *elementType = translateType(newInfo); + if (!elementType) + return nullptr; + + for (int i = typeInfo.arrayElements().size() - 1; i >= 0; --i) { + AbstractMetaType *arrayType = new AbstractMetaType; + arrayType->setArrayElementType(elementType); + const QString &arrayElement = typeInfo.arrayElements().at(i); + if (!arrayElement.isEmpty()) { + bool _ok; + const qint64 elems = findOutValueFromString(arrayElement, _ok); + if (_ok) + arrayType->setArrayElementCount(int(elems)); + } + arrayType->setTypeEntry(new ArrayTypeEntry(elementType->typeEntry() , elementType->typeEntry()->version())); + arrayType->decideUsagePattern(); + + elementType = arrayType; + } + + return elementType; + } + + QStringList qualifierList = typeInfo.qualifiedName(); + if (qualifierList.isEmpty()) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("horribly broken type '%1'").arg(_typei.toString()); + return nullptr; + } + + QString qualifiedName = qualifierList.join(colonColon()); + QString name = qualifierList.takeLast(); + + // 4. Special case QFlags (include instantiation in name) + if (qualifiedName == QLatin1String("QFlags")) + qualifiedName = typeInfo.toString(); + + const TypeEntry *type = 0; + // 5. Try to find the type + + // 5.1 - Try first using the current scope + if (m_currentClass) { + type = findTypeEntryUsingContext(m_currentClass, qualifiedName); + + // 5.1.1 - Try using the class parents' scopes + if (!type && !m_currentClass->baseClassNames().isEmpty()) { + const AbstractMetaClassList &baseClasses = getBaseClasses(m_currentClass); + for (const AbstractMetaClass *cls : baseClasses) { + type = findTypeEntryUsingContext(cls, qualifiedName); + if (type) + break; + } + } + } + + // 5.2 - Try without scope + if (!type) + type = TypeDatabase::instance()->findType(qualifiedName); + + // 6. No? Try looking it up as a flags type + if (!type) + type = TypeDatabase::instance()->findFlagsType(qualifiedName); + + // 7. No? Try looking it up as a container type + if (!type) + type = TypeDatabase::instance()->findContainerType(name); + + // 8. No? Check if the current class is a template and this type is one + // of the parameters. + if (!type && m_currentClass) { + const QVector &template_args = m_currentClass->templateArguments(); + for (TypeEntry *te : template_args) { + if (te->name() == qualifiedName) + type = te; + } + } + + if (!type) + return nullptr; + + // Used to for diagnostics later... + m_usedTypes << type; + + // These are only implicit and should not appear in code... + Q_ASSERT(!type->isInterface()); + + AbstractMetaType *metaType = new AbstractMetaType; + metaType->setTypeEntry(type); + metaType->setIndirections(typeInfo.indirections()); + metaType->setReferenceType(typeInfo.referenceType()); + metaType->setConstant(typeInfo.isConstant()); + metaType->setOriginalTypeDescription(_typei.toString()); + + const auto &templateArguments = typeInfo.arguments(); + for (int t = 0, size = templateArguments.size(); t < size; ++t) { + TypeInfo ti = templateArguments.at(t); + ti.setQualifiedName(ti.instantiationName()); + AbstractMetaType *targType = translateType(ti); + if (!targType) { + delete metaType; + return nullptr; + } + + metaType->addInstantiation(targType, true); + } + + // The usage pattern *must* be decided *after* the possible template + // instantiations have been determined, or else the absence of + // such instantiations will break the caching scheme of + // AbstractMetaType::cppSignature(). + metaType->decideUsagePattern(); + + return metaType; +} + + +qint64 AbstractMetaBuilderPrivate::findOutValueFromString(const QString &stringValue, bool &ok) +{ + qint64 value = stringValue.toLongLong(&ok); + if (ok) + return value; + + if (stringValue == QLatin1String("true") || stringValue == QLatin1String("false")) { + ok = true; + return (stringValue == QLatin1String("true")); + } + + // This is a very lame way to handle expression evaluation, + // but it is not critical and will do for the time being. + static const QRegularExpression variableNameRegExp(QStringLiteral("^[a-zA-Z_][a-zA-Z0-9_]*$")); + Q_ASSERT(variableNameRegExp.isValid()); + if (!variableNameRegExp.match(stringValue).hasMatch()) { + ok = true; + return 0; + } + + AbstractMetaEnumValue *enumValue = AbstractMetaClass::findEnumValue(m_metaClasses, stringValue); + if (enumValue) { + ok = true; + return enumValue->value().value(); + } + + for (AbstractMetaEnum *metaEnum : qAsConst(m_globalEnums)) { + if (const AbstractMetaEnumValue *ev = metaEnum->findEnumValue(stringValue)) { + ok = true; + return ev->value().value(); + } + } + + ok = false; + return 0; +} + +QString AbstractMetaBuilderPrivate::fixDefaultValue(ArgumentModelItem item, + AbstractMetaType *type, + AbstractMetaFunction *fnc, + AbstractMetaClass *implementingClass, + int /* argumentIndex */) +{ + QString functionName = fnc->name(); + QString className = implementingClass ? implementingClass->qualifiedCppName() : QString(); + + QString expr = item->defaultValueExpression(); + if (type) { + if (type->isPrimitive()) { + if (type->name() == QLatin1String("boolean")) { + if (expr != QLatin1String("false") && expr != QLatin1String("true")) { + bool ok = false; + int number = expr.toInt(&ok); + if (ok && number) + expr = QLatin1String("true"); + else + expr = QLatin1String("false"); + } + } else { + // This can be an enum or flag so I need to delay the + // translation untill all namespaces are completly + // processed. This is done in figureOutEnumValues() + } + } else if (type->isFlags() || type->isEnum()) { + bool isNumber; + expr.toInt(&isNumber); + if (!isNumber && expr.indexOf(colonColon()) < 0) { + // Add the enum/flag scope to default value, making it usable + // from other contexts beside its owner class hierarchy + static const QRegularExpression typeRegEx(QStringLiteral("[^<]*[<]([^:]*::).*")); + Q_ASSERT(typeRegEx.isValid()); + const QRegularExpressionMatch match = typeRegEx.match(type->minimalSignature()); + if (match.hasMatch()) + expr.prepend(match.captured(1)); + } + } else if (type->isContainer() && expr.contains(QLatin1Char('<'))) { + static const QRegularExpression typeRegEx(QStringLiteral("[^<]*<(.*)>")); + Q_ASSERT(typeRegEx.isValid()); + const QRegularExpressionMatch typeMatch = typeRegEx.match(type->minimalSignature()); + static const QRegularExpression defaultRegEx(QLatin1String("([^<]*<).*(>[^>]*)")); + Q_ASSERT(defaultRegEx.isValid()); + const QRegularExpressionMatch defaultMatch = defaultRegEx.match(expr); + if (typeMatch.hasMatch() && defaultMatch.hasMatch()) + expr = defaultMatch.captured(1) + typeMatch.captured(1) + defaultMatch.captured(2); + } else { + // Here the default value is supposed to be a constructor, + // a class field, or a constructor receiving a class field + static const QRegularExpression defaultRegEx(QStringLiteral("([^\\(]*\\(|)([^\\)]*)(\\)|)")); + Q_ASSERT(defaultRegEx.isValid()); + const QRegularExpressionMatch defaultMatch = defaultRegEx.match(expr); + QString defaultValueCtorName = defaultMatch.hasMatch() ? defaultMatch.captured(1) : QString(); + if (defaultValueCtorName.endsWith(QLatin1Char('('))) + defaultValueCtorName.chop(1); + + // Fix the scope for constructor using the already + // resolved argument type as a reference. + // The following regular expression extracts any + // use of namespaces/scopes from the type string. + static const QRegularExpression typeRegEx(QLatin1String("^(?:const[\\s]+|)([\\w:]*::|)([A-Za-z_]\\w*)\\s*[&\\*]?$")); + Q_ASSERT(typeRegEx.isValid()); + const QRegularExpressionMatch typeMatch = typeRegEx.match(type->minimalSignature()); + + QString typeNamespace = typeMatch.hasMatch() ? typeMatch.captured(1) : QString(); + QString typeCtorName = typeMatch.hasMatch() ? typeMatch.captured(2) : QString(); + if (!typeNamespace.isEmpty() && defaultValueCtorName == typeCtorName) + expr.prepend(typeNamespace); + + // Fix scope if the parameter is a field of the current class + if (implementingClass) { + const AbstractMetaFieldList &fields = implementingClass->fields(); + for (const AbstractMetaField *field : fields) { + if (defaultMatch.hasMatch() && defaultMatch.captured(2) == field->name()) { + expr = defaultMatch.captured(1) + implementingClass->name() + + colonColon() + defaultMatch.captured(2) + defaultMatch.captured(3); + break; + } + } + } + } + } else { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("undefined type for default value '%3' of argument in function '%1', class '%2'") + .arg(functionName, className, item->defaultValueExpression()); + + expr = QString(); + } + + return expr; +} + +bool AbstractMetaBuilderPrivate::isQObject(const FileModelItem &dom, const QString &qualifiedName) +{ + if (qualifiedName == QLatin1String("QObject")) + return true; + + ClassModelItem classItem = dom->findClass(qualifiedName); + + if (!classItem) { + QStringList names = qualifiedName.split(colonColon()); + NamespaceModelItem ns = dom; + for (int i = 0; i < names.size() - 1 && ns; ++i) + ns = ns->findNamespace(names.at(i)); + if (ns && names.size() >= 2) + classItem = ns->findClass(names.at(names.size() - 1)); + } + + if (!classItem) + return false; + + if (classItem->extendsClass(QLatin1String("QObject"))) + return true; + + const QVector<_ClassModelItem::BaseClass> &baseClasses = classItem->baseClasses(); + for (const _ClassModelItem::BaseClass &baseClass : baseClasses) { + if (isQObject(dom, baseClass.name)) + return true; + } + + return false; +} + + +bool AbstractMetaBuilderPrivate::isEnum(const FileModelItem &dom, const QStringList& qualified_name) +{ + CodeModelItem item = dom->model()->findItem(qualified_name, dom); + return item && item->kind() == _EnumModelItem::__node_kind; +} + +AbstractMetaClass* AbstractMetaBuilderPrivate::findTemplateClass(const QString &name, + const AbstractMetaClass *context, + TypeInfo *info, + ComplexTypeEntry **baseContainerType) const +{ + TypeDatabase* types = TypeDatabase::instance(); + + QStringList scope = context->typeEntry()->qualifiedCppName().split(colonColon()); + QString errorMessage; + scope.removeLast(); + for (int i = scope.size(); i >= 0; --i) { + QString prefix = i > 0 ? QStringList(scope.mid(0, i)).join(colonColon()) + colonColon() : QString(); + QString completeName = prefix + name; + const TypeInfo parsed = TypeParser::parse(completeName, &errorMessage); + QString qualifiedName = parsed.qualifiedName().join(colonColon()); + if (qualifiedName.isEmpty()) { + qWarning().noquote().nospace() << "Unable to parse type \"" << completeName + << "\" while looking for template \"" << name << "\": " << errorMessage; + continue; + } + if (info) + *info = parsed; + + AbstractMetaClass* templ = 0; + for (AbstractMetaClass *c : qAsConst(m_templates)) { + if (c->typeEntry()->name() == qualifiedName) { + templ = c; + break; + } + } + + if (!templ) + templ = AbstractMetaClass::findClass(m_metaClasses, qualifiedName); + + if (templ) + return templ; + + if (baseContainerType) + *baseContainerType = types->findContainerType(qualifiedName); + } + + return 0; +} + +AbstractMetaClassList AbstractMetaBuilderPrivate::getBaseClasses(const AbstractMetaClass *metaClass) const +{ + AbstractMetaClassList baseClasses; + const QStringList &baseClassNames = metaClass->baseClassNames(); + for (const QString& parent : baseClassNames) { + AbstractMetaClass* cls = 0; + if (parent.contains(QLatin1Char('<'))) + cls = findTemplateClass(parent, metaClass); + else + cls = AbstractMetaClass::findClass(m_metaClasses, parent); + + if (cls) + baseClasses << cls; + } + return baseClasses; +} + +bool AbstractMetaBuilderPrivate::ancestorHasPrivateCopyConstructor(const AbstractMetaClass *metaClass) const +{ + if (metaClass->hasPrivateCopyConstructor()) + return true; + const AbstractMetaClassList &baseClasses = getBaseClasses(metaClass); + for (const AbstractMetaClass *cls : baseClasses) { + if (ancestorHasPrivateCopyConstructor(cls)) + return true; + } + return false; +} + +AbstractMetaType* AbstractMetaBuilderPrivate::inheritTemplateType(const QVector &templateTypes, + const AbstractMetaType *metaType, + bool *ok) +{ + if (ok) + *ok = true; + if (!metaType || (!metaType->typeEntry()->isTemplateArgument() && !metaType->hasInstantiations())) + return metaType ? metaType->copy() : 0; + + AbstractMetaType *returned = metaType->copy(); + returned->setOriginalTemplateType(metaType->copy()); + + if (returned->typeEntry()->isTemplateArgument()) { + const TemplateArgumentEntry* tae = static_cast(returned->typeEntry()); + + // If the template is intantiated with void we special case this as rejecting the functions that use this + // parameter from the instantiation. + if (templateTypes.size() <= tae->ordinal() || templateTypes.at(tae->ordinal())->typeEntry()->name() == QLatin1String("void")) { + if (ok) + *ok = false; + return 0; + } + + AbstractMetaType* t = returned->copy(); + t->setTypeEntry(templateTypes.at(tae->ordinal())->typeEntry()); + t->setIndirections(templateTypes.at(tae->ordinal())->indirections() + t->indirections() ? 1 : 0); + t->decideUsagePattern(); + + delete returned; + returned = inheritTemplateType(templateTypes, t, ok); + if (ok && !(*ok)) + return 0; + } + + if (returned->hasInstantiations()) { + AbstractMetaTypeList instantiations = returned->instantiations(); + for (int i = 0; i < instantiations.count(); ++i) { + AbstractMetaType *type = instantiations[i]; + instantiations[i] = inheritTemplateType(templateTypes, type, ok); + if (ok && !(*ok)) + return 0; + } + returned->setInstantiations(instantiations, true); + } + + return returned; +} + +bool AbstractMetaBuilderPrivate::inheritTemplate(AbstractMetaClass *subclass, + const AbstractMetaClass *templateClass, + const TypeInfo &info) +{ + QVector targs = info.arguments(); + QVector templateTypes; + + if (subclass->isTypeDef()) { + subclass->setHasCloneOperator(templateClass->hasCloneOperator()); + subclass->setHasEqualsOperator(templateClass->hasEqualsOperator()); + subclass->setHasHashFunction(templateClass->hasHashFunction()); + subclass->setHasNonPrivateConstructor(templateClass->hasNonPrivateConstructor()); + subclass->setHasPrivateDestructor(templateClass->hasPrivateDestructor()); + subclass->setHasProtectedDestructor(templateClass->hasProtectedDestructor()); + subclass->setHasVirtualDestructor(templateClass->hasVirtualDestructor()); + } + + for (const TypeInfo &i : qAsConst(targs)) { + QString typeName = i.qualifiedName().join(colonColon()); + QStringList possibleNames; + possibleNames << subclass->qualifiedCppName() + colonColon() + typeName; + possibleNames << templateClass->qualifiedCppName() + colonColon() + typeName; + if (subclass->enclosingClass()) + possibleNames << subclass->enclosingClass()->qualifiedCppName() + colonColon() + typeName; + possibleNames << typeName; + + TypeDatabase* typeDb = TypeDatabase::instance(); + TypeEntry* t = 0; + QString templateParamName; + for (const QString &possibleName : qAsConst(possibleNames)) { + t = typeDb->findType(possibleName); + if (t) + break; + } + + if (t) { + AbstractMetaType *temporaryType = new AbstractMetaType; + temporaryType->setTypeEntry(t); + temporaryType->setConstant(i.isConstant()); + temporaryType->setReferenceType(i.referenceType()); + temporaryType->setIndirections(i.indirections()); + temporaryType->decideUsagePattern(); + templateTypes << temporaryType; + } else { + qCWarning(lcShiboken).noquote().nospace() + << "Ignoring template parameter " << templateParamName << " from " + << info.instantiationName() << ", because I don't know what it is."; + } + } + + AbstractMetaFunctionList funcs = subclass->functions(); + const AbstractMetaFunctionList &templateClassFunctions = templateClass->functions(); + for (const AbstractMetaFunction *function : templateClassFunctions) { + if (function->isModifiedRemoved(TypeSystem::All)) + continue; + + AbstractMetaFunction *f = function->copy(); + f->setArguments(AbstractMetaArgumentList()); + + bool ok = true; + AbstractMetaType *ftype = function->type(); + f->replaceType(inheritTemplateType(templateTypes, ftype, &ok)); + if (!ok) { + delete f; + continue; + } + + const AbstractMetaArgumentList &arguments = function->arguments(); + for (AbstractMetaArgument *argument : arguments) { + AbstractMetaType* atype = argument->type(); + + AbstractMetaArgument *arg = argument->copy(); + arg->replaceType(inheritTemplateType(templateTypes, atype, &ok)); + if (!ok) + break; + f->addArgument(arg); + } + + if (!ok) { + delete f; + continue; + } + + // There is no base class in the target language to inherit from here, so + // the template instantiation is the class that implements the function. + f->setImplementingClass(subclass); + + // We also set it as the declaring class, since the superclass is + // supposed to disappear. This allows us to make certain function modifications + // on the inherited functions. + f->setDeclaringClass(subclass); + + + if (f->isConstructor() && subclass->isTypeDef()) { + f->setName(subclass->name()); + f->setOriginalName(subclass->name()); + } else if (f->isConstructor()) { + delete f; + continue; + } + + // if the instantiation has a function named the same as an existing + // function we have shadowing so we need to skip it. + bool found = false; + for (int i = 0; i < funcs.size(); ++i) { + if (funcs.at(i)->name() == f->name()) { + found = true; + continue; + } + } + if (found) { + delete f; + continue; + } + + ComplexTypeEntry* te = subclass->typeEntry(); + FunctionModificationList mods = function->modifications(templateClass); + for (int i = 0; i < mods.size(); ++i) { + FunctionModification mod = mods.at(i); + mod.setSignature(f->minimalSignature()); + + // If we ever need it... Below is the code to do + // substitution of the template instantation type inside + // injected code.. +#if 0 + if (mod.modifiers & Modification::CodeInjection) { + for (int j = 0; j < template_types.size(); ++j) { + CodeSnip &snip = mod.snips.last(); + QString code = snip.code(); + code.replace(QString::fromLatin1("$$QT_TEMPLATE_%1$$").arg(j), + template_types.at(j)->typeEntry()->qualifiedCppName()); + snip.codeList.clear(); + snip.addCode(code); + } + } +#endif + te->addFunctionModification(mod); + } + + subclass->addFunction(f); + } + + subclass->setTemplateBaseClass(templateClass); + subclass->setTemplateBaseClassInstantiations(templateTypes); + subclass->setInterfaces(templateClass->interfaces()); + subclass->setBaseClass(templateClass->baseClass()); + + return true; +} + +void AbstractMetaBuilderPrivate::parseQ_Property(AbstractMetaClass *metaClass, + const QStringList &declarations) +{ + for (int i = 0; i < declarations.size(); ++i) { + QString p = declarations.at(i); + + QStringList l = p.split(QLatin1String(" ")); + + + QStringList qualifiedScopeName = currentScope()->qualifiedName(); + AbstractMetaType* type = 0; + QString scope; + for (int j = qualifiedScopeName.size(); j >= 0; --j) { + scope = j > 0 ? QStringList(qualifiedScopeName.mid(0, j)).join(colonColon()) + colonColon() : QString(); + TypeInfo info; + info.setQualifiedName((scope + l.at(0)).split(colonColon())); + + type = translateType(info); + if (type) + break; + } + + if (!type) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("Unable to decide type of property: '%1' in class '%2'") + .arg(l.at(0), metaClass->name()); + continue; + } + + QPropertySpec* spec = new QPropertySpec(type->typeEntry()); + spec->setName(l.at(1)); + spec->setIndex(i); + + for (int pos = 2; pos + 1 < l.size(); pos += 2) { + if (l.at(pos) == QLatin1String("READ")) + spec->setRead(l.at(pos + 1)); + else if (l.at(pos) == QLatin1String("WRITE")) + spec->setWrite(l.at(pos + 1)); + else if (l.at(pos) == QLatin1String("DESIGNABLE")) + spec->setDesignable(l.at(pos + 1)); + else if (l.at(pos) == QLatin1String("RESET")) + spec->setReset(l.at(pos + 1)); + } + + metaClass->addPropertySpec(spec); + delete type; + } +} + +static AbstractMetaFunction* findCopyCtor(AbstractMetaClass* cls) +{ + AbstractMetaFunctionList functions = cls->queryFunctions(AbstractMetaClass::Invisible); + functions << cls->queryFunctions(AbstractMetaClass::Visible); + + for (AbstractMetaFunction *f : qAsConst(functions)) { + const AbstractMetaFunction::FunctionType t = f->functionType(); + if (t == AbstractMetaFunction::CopyConstructorFunction || t == AbstractMetaFunction::AssignmentOperatorFunction) + return f; + } + return 0; +} + +void AbstractMetaBuilderPrivate::setupClonable(AbstractMetaClass *cls) +{ + bool result = true; + + // find copy ctor for the current class + AbstractMetaFunction* copyCtor = findCopyCtor(cls); + if (copyCtor) { // if exists a copy ctor in this class + result = copyCtor->isPublic(); + } else { // else... lets find one in the parent class + QQueue baseClasses; + if (cls->baseClass()) + baseClasses.enqueue(cls->baseClass()); + baseClasses << cls->interfaces().toList(); + + while (!baseClasses.isEmpty()) { + AbstractMetaClass* currentClass = baseClasses.dequeue(); + baseClasses << currentClass->interfaces().toList(); + if (currentClass->baseClass()) + baseClasses.enqueue(currentClass->baseClass()); + + copyCtor = findCopyCtor(currentClass); + if (copyCtor) { + result = copyCtor->isPublic(); + break; + } + } + } + cls->setHasCloneOperator(result); +} + +void AbstractMetaBuilderPrivate::setupExternalConversion(AbstractMetaClass *cls) +{ + const AbstractMetaFunctionList &convOps = cls->operatorOverloads(AbstractMetaClass::ConversionOp); + for (AbstractMetaFunction *func : convOps) { + if (func->isModifiedRemoved()) + continue; + AbstractMetaClass *metaClass = AbstractMetaClass::findClass(m_metaClasses, func->type()->typeEntry()); + if (!metaClass) + continue; + metaClass->addExternalConversionOperator(func); + } + const AbstractMetaClassList &innerClasses = cls->innerClasses(); + for (AbstractMetaClass *innerClass : innerClasses) + setupExternalConversion(innerClass); +} + +static void writeRejectLogFile(const QString &name, + const QMap &rejects) +{ + QFile f(name); + if (!f.open(QIODevice::WriteOnly | QIODevice::Text)) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("failed to write log file: '%1'") + .arg(QDir::toNativeSeparators(f.fileName())); + return; + } + + QTextStream s(&f); + + + for (int reason = 0; reason < AbstractMetaBuilder::NoReason; ++reason) { + s << QString(72, QLatin1Char('*')) << endl; + switch (reason) { + case AbstractMetaBuilder::NotInTypeSystem: + s << "Not in type system"; + break; + case AbstractMetaBuilder::GenerationDisabled: + s << "Generation disabled by type system"; + break; + case AbstractMetaBuilder::RedefinedToNotClass: + s << "Type redefined to not be a class"; + break; + + case AbstractMetaBuilder::UnmatchedReturnType: + s << "Unmatched return type"; + break; + + case AbstractMetaBuilder::UnmatchedArgumentType: + s << "Unmatched argument type"; + break; + + case AbstractMetaBuilder::ApiIncompatible: + s << "Incompatible API"; + break; + + default: + s << "unknown reason"; + break; + } + + s << endl; + + for (QMap::const_iterator it = rejects.constBegin(); + it != rejects.constEnd(); ++it) { + if (it.value() != reason) + continue; + s << " - " << it.key() << endl; + } + + s << QString(72, QLatin1Char('*')) << endl << endl; + } + +} + +void AbstractMetaBuilderPrivate::dumpLog() const +{ + writeRejectLogFile(m_logDirectory + QLatin1String("mjb_rejected_classes.log"), m_rejectedClasses); + writeRejectLogFile(m_logDirectory + QLatin1String("mjb_rejected_enums.log"), m_rejectedEnums); + writeRejectLogFile(m_logDirectory + QLatin1String("mjb_rejected_functions.log"), m_rejectedFunctions); + writeRejectLogFile(m_logDirectory + QLatin1String("mjb_rejected_fields.log"), m_rejectedFields); +} + +AbstractMetaClassList AbstractMetaBuilderPrivate::classesTopologicalSorted(const AbstractMetaClass *cppClass, + const Dependencies &additionalDependencies) const +{ + QLinkedList unmappedResult; + QHash map; + QHash reverseMap; + + const AbstractMetaClassList& classList = cppClass ? cppClass->innerClasses() : m_metaClasses; + + int i = 0; + for (AbstractMetaClass *clazz : classList) { + if (map.contains(clazz->qualifiedCppName())) + continue; + map[clazz->qualifiedCppName()] = i; + reverseMap[i] = clazz; + i++; + } + + Graph graph(map.count()); + + for (const Dependency &dep : additionalDependencies) { + const int parentIndex = map.value(dep.parent, -1); + const int childIndex = map.value(dep.child, -1); + if (parentIndex >= 0 && childIndex >= 0) { + graph.addEdge(parentIndex, childIndex); + } else { + qCWarning(lcShiboken).noquote().nospace() + << "AbstractMetaBuilder::classesTopologicalSorted(): Invalid additional dependency: " + << dep.child << " -> " << dep.parent << '.'; + } + } + + // TODO choose a better name to these regexs + static const QRegularExpression regex1(QStringLiteral("\\(.*\\)")); + Q_ASSERT(regex1.isValid()); + static const QRegularExpression regex2(QStringLiteral("::.*")); + Q_ASSERT(regex2.isValid()); + for (AbstractMetaClass *clazz : classList) { + if (clazz->enclosingClass() && map.contains(clazz->enclosingClass()->qualifiedCppName())) + graph.addEdge(map[clazz->enclosingClass()->qualifiedCppName()], map[clazz->qualifiedCppName()]); + + const AbstractMetaClassList &bases = getBaseClasses(clazz); + for (AbstractMetaClass *baseClass : bases) { + // Fix polymorphic expression + if (clazz->baseClass() == baseClass) + clazz->setBaseClass(baseClass); + + if (map.contains(baseClass->qualifiedCppName())) + graph.addEdge(map[baseClass->qualifiedCppName()], map[clazz->qualifiedCppName()]); + } + + const AbstractMetaFunctionList &functions = clazz->functions(); + for (AbstractMetaFunction *func : functions) { + const AbstractMetaArgumentList &arguments = func->arguments(); + for (AbstractMetaArgument *arg : arguments) { + // check methods with default args + QString defaultExpression = arg->originalDefaultValueExpression(); + if (!defaultExpression.isEmpty()) { + if (defaultExpression == QLatin1String("0") && arg->type()->isValue()) + defaultExpression = arg->type()->name(); + + defaultExpression.remove(regex1); + defaultExpression.remove(regex2); + } + if (!defaultExpression.isEmpty()) { + QString exprClassName = clazz->qualifiedCppName() + colonColon() + defaultExpression; + if (!map.contains(exprClassName)) { + bool found = false; + for (AbstractMetaClass *baseClass : bases) { + exprClassName = baseClass->qualifiedCppName() + colonColon() + defaultExpression; + if (map.contains(exprClassName)) { + found = true; + break; + } + } + if (!found) { + if (map.contains(defaultExpression)) + exprClassName = defaultExpression; + else + exprClassName.clear(); + } + } + if (!exprClassName.isEmpty() && exprClassName != clazz->qualifiedCppName()) + graph.addEdge(map[exprClassName], map[clazz->qualifiedCppName()]); + } + } + } + } + + AbstractMetaClassList result; + unmappedResult = graph.topologicalSort(); + if (unmappedResult.isEmpty() && graph.nodeCount()) { + QTemporaryFile tempFile; + tempFile.setAutoRemove(false); + tempFile.open(); + QHash hash; + QHash::iterator it = map.begin(); + for (; it != map.end(); ++it) + hash[it.value()] = it.key(); + graph.dumpDot(hash, tempFile.fileName()); + qCWarning(lcShiboken).noquote().nospace() + << "Cyclic dependency found! Graph can be found at " + << QDir::toNativeSeparators(tempFile.fileName()); + } else { + for (int i : qAsConst(unmappedResult)) { + Q_ASSERT(reverseMap.contains(i)); + if (!reverseMap[i]->isInterface()) + result << reverseMap[i]; + } + } + + return result; +} + +AbstractMetaClassList AbstractMetaBuilder::classesTopologicalSorted(const AbstractMetaClass *cppClass, + const Dependencies &additionalDependencies) const +{ + return d->classesTopologicalSorted(cppClass, additionalDependencies); +} + +AbstractMetaArgumentList AbstractMetaBuilderPrivate::reverseList(const AbstractMetaArgumentList &list) +{ + AbstractMetaArgumentList ret; + + int index = list.size(); + for (AbstractMetaArgument *arg : list) { + arg->setArgumentIndex(index); + ret.prepend(arg); + index--; + } + + return ret; +} + +void AbstractMetaBuilder::setGlobalHeader(const QString& globalHeader) +{ + d->m_globalHeader = QFileInfo(globalHeader); +} + +void AbstractMetaBuilderPrivate::setInclude(TypeEntry *te, const QString &fileName) const +{ + QFileInfo info(fileName); + if (m_globalHeader.fileName() != info.fileName()) + te->setInclude(Include(Include::IncludePath, info.fileName())); +} + +#ifndef QT_NO_DEBUG_STREAM +template +static void debugFormatSequence(QDebug &d, const char *key, const Container& c, + const char *separator = ", ") +{ + typedef typename Container::const_iterator ConstIt; + if (c.isEmpty()) + return; + const ConstIt begin = c.begin(); + const ConstIt end = c.end(); + d << "\n " << key << '[' << c.size() << "]=("; + for (ConstIt it = begin; it != end; ++it) { + if (it != begin) + d << separator; + d << *it; + } + d << ')'; +} + +void AbstractMetaBuilder::formatDebug(QDebug &debug) const +{ + debug << "m_globalHeader=" << d->m_globalHeader.absoluteFilePath(); + debugFormatSequence(debug, "globalEnums", d->m_globalEnums, "\n"); + debugFormatSequence(debug, "globalFunctions", d->m_globalFunctions, "\n"); + if (const int scopeCount = d->m_scopes.size()) { + debug << "\n scopes[" << scopeCount << "]=("; + for (int i = 0; i < scopeCount; ++i) { + if (i) + debug << ", "; + _CodeModelItem::formatKind(debug, d->m_scopes.at(i)->kind()); + debug << " \"" << d->m_scopes.at(i)->name() << '"'; + } + debug << ')'; + } + debugFormatSequence(debug, "classes", d->m_metaClasses, "\n"); + debugFormatSequence(debug, "templates", d->m_templates, "\n"); +} + +QDebug operator<<(QDebug d, const AbstractMetaBuilder &ab) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "AbstractMetaBuilder("; + ab.formatDebug(d); + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM diff --git a/sources/shiboken2/ApiExtractor/abstractmetabuilder.h b/sources/shiboken2/ApiExtractor/abstractmetabuilder.h new file mode 100644 index 0000000..a0ca71b --- /dev/null +++ b/sources/shiboken2/ApiExtractor/abstractmetabuilder.h @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ABSTRACTMETABUILDER_H +#define ABSTRACTMETABUILDER_H + +#include "abstractmetalang_typedefs.h" +#include "dependency.h" + +#include "clangparser/compilersupport.h" + +QT_FORWARD_DECLARE_CLASS(QIODevice) + +class AbstractMetaBuilderPrivate; +class AbstractMetaClass; +class AbstractMetaEnumValue; + +class AbstractMetaBuilder +{ +public: + enum RejectReason { + NotInTypeSystem, + GenerationDisabled, + RedefinedToNotClass, + UnmatchedArgumentType, + UnmatchedReturnType, + ApiIncompatible, + NoReason + }; + + AbstractMetaBuilder(); + virtual ~AbstractMetaBuilder(); + + AbstractMetaClassList classes() const; + AbstractMetaClassList templates() const; + AbstractMetaClassList smartPointers() const; + AbstractMetaFunctionList globalFunctions() const; + AbstractMetaEnumList globalEnums() const; + + /** + * Sorts a list of classes topologically, if an AbstractMetaClass object + * is passed the list of classes will be its inner classes, otherwise + * the list will be the module global classes. + * \return a list of classes sorted topologically + */ + AbstractMetaClassList classesTopologicalSorted(const AbstractMetaClass *cppClass = Q_NULLPTR, + const Dependencies &additionalDependencies = Dependencies()) const; + + bool build(const QByteArrayList &arguments, + LanguageLevel level = LanguageLevel::Default, + unsigned clangFlags = 0); + void setLogDirectory(const QString& logDir); + + /** + * AbstractMetaBuilder should know what's the global header being used, + * so any class declared under this header wont have the include file + * filled. + */ + void setGlobalHeader(const QString& globalHeader); + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &d) const; +#endif + +private: + friend class AbstractMetaBuilderPrivate; + AbstractMetaBuilderPrivate *d; +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AbstractMetaBuilder &ab); +#endif + +#endif // ABSTRACTMETBUILDER_H diff --git a/sources/shiboken2/ApiExtractor/abstractmetabuilder_p.h b/sources/shiboken2/ApiExtractor/abstractmetabuilder_p.h new file mode 100644 index 0000000..59e3cfc --- /dev/null +++ b/sources/shiboken2/ApiExtractor/abstractmetabuilder_p.h @@ -0,0 +1,189 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ABSTRACTMETABUILDER_P_H +#define ABSTRACTMETABUILDER_P_H + +#include "abstractmetabuilder.h" +#include "parser/codemodel_fwd.h" +#include "abstractmetalang.h" +#include "typesystem.h" +#include "typeparser.h" + +#include +#include + +class TypeDatabase; + +class AbstractMetaBuilderPrivate +{ +public: + AbstractMetaBuilderPrivate(); + ~AbstractMetaBuilderPrivate(); + + static FileModelItem buildDom(QByteArrayList arguments, + LanguageLevel level, + unsigned clangFlags); + void traverseDom(const FileModelItem &dom); + + void dumpLog() const; + AbstractMetaClassList classesTopologicalSorted(const AbstractMetaClass *cppClass = Q_NULLPTR, + const Dependencies &additionalDependencies = Dependencies()) const; + ScopeModelItem popScope() { return m_scopes.takeLast(); } + + void pushScope(ScopeModelItem item) { m_scopes << item; } + + ScopeModelItem currentScope() const { return m_scopes.constLast(); } + + AbstractMetaClass *argumentToClass(ArgumentModelItem); + + void addAbstractMetaClass(AbstractMetaClass *cls); + AbstractMetaClass *traverseTypeDef(const FileModelItem &dom, + const TypeDefModelItem &typeDef); + AbstractMetaClass *traverseClass(const FileModelItem &dom, + const ClassModelItem &item); + AbstractMetaClass *currentTraversedClass(ScopeModelItem item); + void traverseScopeMembers(ScopeModelItem item, AbstractMetaClass *metaClass); + void traverseClassMembers(ClassModelItem scopeItem); + void traverseNamespaceMembers(NamespaceModelItem scopeItem); + bool setupInheritance(AbstractMetaClass *metaClass); + AbstractMetaClass *traverseNamespace(const FileModelItem &dom, + const NamespaceModelItem &item); + AbstractMetaEnum *traverseEnum(EnumModelItem item, AbstractMetaClass *enclosing, + const QSet &enumsDeclarations); + void traverseEnums(ScopeModelItem item, AbstractMetaClass *parent, + const QStringList &enumsDeclarations); + AbstractMetaFunctionList classFunctionList(const ScopeModelItem &scopeItem, + bool *constructorRejected); + AbstractMetaFunctionList templateClassFunctionList(const ScopeModelItem &scopeItem, + AbstractMetaClass *metaClass, + bool *constructorRejected); + void traverseFunctions(ScopeModelItem item, AbstractMetaClass *parent); + void applyFunctionModifications(AbstractMetaFunction* func); + void traverseFields(ScopeModelItem item, AbstractMetaClass *parent); + void traverseStreamOperator(FunctionModelItem functionItem); + void traverseOperatorFunction(FunctionModelItem item); + AbstractMetaFunction* traverseFunction(const AddedFunction &addedFunc); + AbstractMetaFunction* traverseFunction(const AddedFunction &addedFunc, + AbstractMetaClass *metaClass); + AbstractMetaFunction *traverseFunction(FunctionModelItem function); + AbstractMetaField *traverseField(VariableModelItem field, + const AbstractMetaClass *cls); + void checkFunctionModifications(); + void registerHashFunction(FunctionModelItem functionItem); + void registerToStringCapability(FunctionModelItem functionItem); + + /** + * A conversion operator function should not have its owner class as + * its return type, but unfortunately it does. This function fixes the + * return type of operator functions of this kind making the return type + * be the same as it is supposed to generate when used in C++. + * If the returned type is a wrapped C++ class, this method also adds the + * conversion operator to the collection of external conversions of the + * said class. + * \param metaFunction conversion operator function to be fixed. + */ + void fixReturnTypeOfConversionOperator(AbstractMetaFunction *metaFunction); + + void parseQ_Property(AbstractMetaClass *metaClass, const QStringList &declarations); + void setupEquals(AbstractMetaClass *metaClass); + void setupComparable(AbstractMetaClass *metaClass); + void setupClonable(AbstractMetaClass *cls); + void setupExternalConversion(AbstractMetaClass *cls); + void setupFunctionDefaults(AbstractMetaFunction *metaFunction, + AbstractMetaClass *metaClass); + + QString fixDefaultValue(ArgumentModelItem item, AbstractMetaType *type, + AbstractMetaFunction *fnc, AbstractMetaClass *, + int argumentIndex); + AbstractMetaType *translateType(const AddedFunction::TypeInfo &typeInfo); + AbstractMetaType *translateType(const TypeInfo &type, + bool resolveType = true); + qint64 findOutValueFromString(const QString &stringValue, bool &ok); + + AbstractMetaClass *findTemplateClass(const QString& name, const AbstractMetaClass *context, + TypeInfo *info = Q_NULLPTR, + ComplexTypeEntry **baseContainerType = Q_NULLPTR) const; + AbstractMetaClassList getBaseClasses(const AbstractMetaClass *metaClass) const; + bool ancestorHasPrivateCopyConstructor(const AbstractMetaClass *metaClass) const; + + bool inheritTemplate(AbstractMetaClass *subclass, + const AbstractMetaClass *templateClass, + const TypeInfo &info); + AbstractMetaType *inheritTemplateType(const QVector &templateTypes, + const AbstractMetaType *metaType, + bool *ok = Q_NULLPTR); + + bool isQObject(const FileModelItem &dom, const QString &qualifiedName); + bool isEnum(const FileModelItem &dom, const QStringList &qualifiedName); + + void fixQObjectForScope(const FileModelItem &dom, const TypeDatabase *types, + const NamespaceModelItem &item); + + void sortLists(); + AbstractMetaArgumentList reverseList(const AbstractMetaArgumentList &list); + void setInclude(TypeEntry *te, const QString &fileName) const; + void fixArgumentNames(AbstractMetaFunction *func, const FunctionModificationList &mods); + bool setArrayArgumentType(AbstractMetaFunction *func, + const FunctionModelItem &functionItem, int i); + + void fillAddedFunctions(AbstractMetaClass *metaClass); + + AbstractMetaBuilder *q; + AbstractMetaClassList m_metaClasses; + AbstractMetaClassList m_templates; + AbstractMetaClassList m_smartPointers; + AbstractMetaFunctionList m_globalFunctions; + AbstractMetaEnumList m_globalEnums; + + QSet m_usedTypes; + + typedef QMap RejectMap; + + RejectMap m_rejectedClasses; + RejectMap m_rejectedEnums; + RejectMap m_rejectedFunctions; + RejectMap m_rejectedFields; + + QList m_enums; + + QList > m_enumDefaultArguments; + + QHash m_enumValues; + + AbstractMetaClass *m_currentClass; + QList m_scopes; + QString m_namespacePrefix; + + QSet m_setupInheritanceDone; + + QString m_logDirectory; + QFileInfo m_globalHeader; +}; + +#endif // ABSTRACTMETBUILDER_P_H diff --git a/sources/shiboken2/ApiExtractor/abstractmetalang.cpp b/sources/shiboken2/ApiExtractor/abstractmetalang.cpp new file mode 100644 index 0000000..5be7050 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/abstractmetalang.cpp @@ -0,0 +1,2467 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "abstractmetalang.h" +#include "reporthandler.h" +#include "typedatabase.h" +#include "typesystem.h" + +#ifndef QT_NO_DEBUG_STREAM +# include +# include +#endif + +#include +#include + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AbstractMetaAttributes *aa) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "AbstractMetaAttributes("; + if (aa) + d << aa->attributes(); + else + d << '0'; + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM + +/******************************************************************************* + * AbstractMetaVariable + */ + +AbstractMetaVariable::AbstractMetaVariable() = default; + +AbstractMetaVariable::~AbstractMetaVariable() +{ + delete m_type; +} + +void AbstractMetaVariable::assignMetaVariable(const AbstractMetaVariable &other) +{ + m_originalName = other.m_originalName; + m_name = other.m_name; + m_type = other.m_type->copy(); + m_hasName = other.m_hasName; + m_doc = other.m_doc; +} + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AbstractMetaVariable *av) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "AbstractMetaVariable("; + if (av) { + d << av->type()->name() << ' ' << av->name(); + } else { + d << '0'; + } + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM + +/******************************************************************************* + * AbstractMetaAttributes + */ + +AbstractMetaAttributes::AbstractMetaAttributes() = default; +AbstractMetaAttributes::~AbstractMetaAttributes() = default; + +void AbstractMetaAttributes::assignMetaAttributes(const AbstractMetaAttributes &other) +{ + m_attributes = other.m_attributes; + m_originalAttributes = other.m_originalAttributes; + m_doc = other.m_doc; +} + +/******************************************************************************* + * AbstractMetaType + */ + +AbstractMetaType::AbstractMetaType() : + m_constant(false), + m_cppInstantiation(true), + m_indirections(0), + m_reserved(0) +{ +} + +AbstractMetaType::~AbstractMetaType() +{ + qDeleteAll(m_children); + m_instantiations.clear(); +} + +QString AbstractMetaType::package() const +{ + return m_typeEntry->targetLangPackage(); +} + +static QString lastNameSegment(QString name) +{ + const int index = name.lastIndexOf(QStringLiteral("::")); + if (index >= 0) + name.remove(0, index + 2); + return name; +} + +QString AbstractMetaType::name() const +{ + if (m_name.isNull()) + m_name = lastNameSegment(m_typeEntry->targetLangName()); + return m_name; +} + +QString AbstractMetaType::fullName() const +{ + return m_typeEntry->qualifiedTargetLangName(); +} + +AbstractMetaType *AbstractMetaType::copy() const +{ + AbstractMetaType *cpy = new AbstractMetaType; + + cpy->setTypeUsagePattern(typeUsagePattern()); + cpy->setConstant(isConstant()); + cpy->setReferenceType(referenceType()); + cpy->setIndirections(indirections()); + cpy->setInstantiations(instantiations()); + cpy->setArrayElementCount(arrayElementCount()); + cpy->setOriginalTypeDescription(originalTypeDescription()); + cpy->setOriginalTemplateType(originalTemplateType() ? originalTemplateType()->copy() : 0); + + cpy->setArrayElementType(arrayElementType() ? arrayElementType()->copy() : 0); + + cpy->setTypeEntry(typeEntry()); + + return cpy; +} + +AbstractMetaTypeCList AbstractMetaType::nestedArrayTypes() const +{ + AbstractMetaTypeCList result; + switch (m_pattern) { + case ArrayPattern: + for (const AbstractMetaType *t = this; t->typeUsagePattern() == ArrayPattern; ) { + const AbstractMetaType *elt = t->arrayElementType(); + result.append(elt); + t = elt; + } + break; + case NativePointerAsArrayPattern: + result.append(m_arrayElementType); + break; + default: + break; + } + return result; +} + +bool AbstractMetaType::isConstRef() const +{ + return isConstant() && m_referenceType == LValueReference && indirections() == 0; +} + +QString AbstractMetaType::cppSignature() const +{ + if (m_cachedCppSignature.isEmpty()) + m_cachedCppSignature = formatSignature(false); + return m_cachedCppSignature; +} + +AbstractMetaType::TypeUsagePattern AbstractMetaType::determineUsagePattern() const +{ + if (m_typeEntry->isTemplateArgument() || m_referenceType == RValueReference) + return InvalidPattern; + + if (m_typeEntry->isPrimitive() && (actualIndirections() == 0 || isConstRef())) + return PrimitivePattern; + + if (m_typeEntry->isVoid()) + return NativePointerPattern; + + if (m_typeEntry->isVarargs()) + return VarargsPattern; + + if (m_typeEntry->isEnum() && (actualIndirections() == 0 || isConstRef())) + return EnumPattern; + + if (m_typeEntry->isObject()) { + if (indirections() == 0 && m_referenceType == NoReference) + return ValuePattern; + return static_cast(m_typeEntry)->isQObject() + ? QObjectPattern : ObjectPattern; + } + + if (m_typeEntry->isContainer() && indirections() == 0) + return ContainerPattern; + + if (m_typeEntry->isSmartPointer() && indirections() == 0) + return SmartPointerPattern; + + if (m_typeEntry->isFlags() && (actualIndirections() == 0 || isConstRef())) + return FlagsPattern; + + if (m_typeEntry->isArray()) + return ArrayPattern; + + if (m_typeEntry->isValue()) + return indirections() == 1 ? ValuePointerPattern : ValuePattern; + + if (ReportHandler::isDebug(ReportHandler::FullDebug)) { + qCDebug(lcShiboken) + << QStringLiteral("native pointer pattern for '%1'").arg(cppSignature()); + } + return NativePointerPattern; +} + +void AbstractMetaType::decideUsagePattern() +{ + TypeUsagePattern pattern = determineUsagePattern(); + if (m_typeEntry->isObject() && indirections() == 1 + && m_referenceType == LValueReference && isConstant()) { + // const-references to pointers can be passed as pointers + setReferenceType(NoReference); + setConstant(false); + pattern = static_cast(m_typeEntry)->isQObject() + ? QObjectPattern : ObjectPattern; + } + setTypeUsagePattern(pattern); +} + +bool AbstractMetaType::hasTemplateChildren() const +{ + QStack children; + children << m_children; + + // Recursively iterate over the children / descendants of the type, to check if any of them + // corresponds to a template argument type. + while (!children.isEmpty()) { + AbstractMetaType *child = children.pop(); + if (child->typeEntry()->isTemplateArgument()) + return true; + children << child->m_children; + } + + return false; +} + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AbstractMetaType *at) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "AbstractMetaType("; + if (at) { + d << at->name(); + if (d.verbosity() > 2) { + d << ", typeEntry=" << at->typeEntry() << ", signature=\"" + << at->cppSignature() << "\", pattern=" + << at->typeUsagePattern(); + if (at->indirections()) + d << ", indirections=" << at->indirections(); + if (at->referenceType()) + d << ", reftype=" << at->referenceType(); + if (at->isConstant()) + d << ", [const]"; + if (at->isArray()) { + d << ", array of \"" << at->arrayElementType()->cppSignature() + << "\", arrayElementCount=" << at->arrayElementCount(); + } + } + } else { + d << '0'; + } + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM + +/******************************************************************************* + * AbstractMetaArgument + */ + +AbstractMetaArgument::AbstractMetaArgument() = default; + +void AbstractMetaArgument::assignMetaArgument(const AbstractMetaArgument &other) +{ + assignMetaVariable(other); + m_expression = other.m_expression; + m_originalExpression = other.m_originalExpression; + m_argumentIndex = other.m_argumentIndex; +} + +AbstractMetaArgument *AbstractMetaArgument::copy() const +{ + AbstractMetaArgument *copy = new AbstractMetaArgument; + copy->assignMetaArgument(*this); + return copy; +} + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AbstractMetaArgument *aa) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "AbstractMetaArgument("; + if (aa) + d << aa->toString(); + else + d << '0'; + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM + +/******************************************************************************* + * AbstractMetaFunction + */ + +AbstractMetaFunction::AbstractMetaFunction() + : m_constant(false), + m_reverse(false), + m_userAdded(false), + m_explicit(false), + m_pointerOperator(false), + m_isCallOperator(false) +{ +} + +AbstractMetaFunction::~AbstractMetaFunction() +{ + qDeleteAll(m_arguments); + delete m_type; +} + +/******************************************************************************* + * Indicates that this function has a modification that removes it + */ +bool AbstractMetaFunction::isModifiedRemoved(int types) const +{ + const FunctionModificationList &mods = modifications(implementingClass()); + for (const FunctionModification &mod : mods) { + if (!mod.isRemoveModifier()) + continue; + + if ((mod.removal & types) == types) + return true; + } + + return false; +} + +bool AbstractMetaFunction::operator<(const AbstractMetaFunction &other) const +{ + return compareTo(&other) & NameLessThan; +} + + +/*! + Returns a mask of CompareResult describing how this function is + compares to another function +*/ +AbstractMetaFunction::CompareResult AbstractMetaFunction::compareTo(const AbstractMetaFunction *other) const +{ + CompareResult result = 0; + + // Enclosing class... + if (ownerClass() == other->ownerClass()) + result |= EqualImplementor; + + // Attributes + if (attributes() == other->attributes()) + result |= EqualAttributes; + + // Compare types + AbstractMetaType *t = type(); + AbstractMetaType *ot = other->type(); + if ((!t && !ot) || ((t && ot && t->name() == ot->name()))) + result |= EqualReturnType; + + // Compare names + int cmp = originalName().compare(other->originalName()); + + if (cmp < 0) + result |= NameLessThan; + else if (!cmp) + result |= EqualName; + + // compare name after modification... + cmp = modifiedName().compare(other->modifiedName()); + if (!cmp) + result |= EqualModifiedName; + + // Compare arguments... + AbstractMetaArgumentList minArguments; + AbstractMetaArgumentList maxArguments; + if (arguments().size() < other->arguments().size()) { + minArguments = arguments(); + maxArguments = other->arguments(); + } else { + minArguments = other->arguments(); + maxArguments = arguments(); + } + + int minCount = minArguments.size(); + int maxCount = maxArguments.size(); + bool same = true; + for (int i = 0; i < maxCount; ++i) { + if (i < minCount) { + const AbstractMetaArgument *min_arg = minArguments.at(i); + const AbstractMetaArgument *max_arg = maxArguments.at(i); + if (min_arg->type()->name() != max_arg->type()->name() + && (min_arg->defaultValueExpression().isEmpty() || max_arg->defaultValueExpression().isEmpty())) { + same = false; + break; + } + } else { + if (maxArguments.at(i)->defaultValueExpression().isEmpty()) { + same = false; + break; + } + } + } + + if (same) + result |= minCount == maxCount ? EqualArguments : EqualDefaultValueOverload; + + return result; +} + +AbstractMetaFunction *AbstractMetaFunction::copy() const +{ + AbstractMetaFunction *cpy = new AbstractMetaFunction; + cpy->assignMetaAttributes(*this); + cpy->setName(name()); + cpy->setOriginalName(originalName()); + cpy->setOwnerClass(ownerClass()); + cpy->setImplementingClass(implementingClass()); + cpy->setFunctionType(functionType()); + cpy->setDeclaringClass(declaringClass()); + if (type()) + cpy->setType(type()->copy()); + cpy->setConstant(isConstant()); + + for (AbstractMetaArgument *arg : m_arguments) + cpy->addArgument(arg->copy()); + + Q_ASSERT((!type() && !cpy->type()) + || (type()->instantiations() == cpy->type()->instantiations())); + + return cpy; +} + +bool AbstractMetaFunction::usesRValueReferences() const +{ + if (m_functionType == MoveConstructorFunction || m_functionType == MoveAssignmentOperatorFunction) + return true; + if (m_type && m_type->referenceType() == RValueReference) + return true; + for (const AbstractMetaArgument *a : m_arguments) { + if (a->type()->referenceType() == RValueReference) + return true; + } + return false; +} + +QStringList AbstractMetaFunction::introspectionCompatibleSignatures(const QStringList &resolvedArguments) const +{ + AbstractMetaArgumentList arguments = this->arguments(); + if (arguments.size() == resolvedArguments.size()) { + QString signature = name() + QLatin1Char('(') + resolvedArguments.join(QLatin1Char(',')) + QLatin1Char(')'); + return QStringList(TypeDatabase::normalizedSignature(signature)); + } else { + QStringList returned; + + AbstractMetaArgument *argument = arguments.at(resolvedArguments.size()); + QStringList minimalTypeSignature = argument->type()->minimalSignature().split(QLatin1String("::")); + for (int i = 0; i < minimalTypeSignature.size(); ++i) { + returned += introspectionCompatibleSignatures(QStringList(resolvedArguments) + << QStringList(minimalTypeSignature.mid(minimalTypeSignature.size() - i - 1)).join(QLatin1String("::"))); + } + + return returned; + } +} + +QString AbstractMetaFunction::signature() const +{ + if (m_cachedSignature.isEmpty()) { + m_cachedSignature = m_originalName; + + m_cachedSignature += QLatin1Char('('); + + for (int i = 0; i < m_arguments.count(); ++i) { + AbstractMetaArgument *a = m_arguments.at(i); + AbstractMetaType *t = a->type(); + if (t) { + if (i > 0) + m_cachedSignature += QLatin1String(", "); + m_cachedSignature += t->cppSignature(); + // We need to have the argument names in the qdoc files + m_cachedSignature += QLatin1Char(' '); + m_cachedSignature += a->name(); + } else { + qCWarning(lcShiboken).noquote().nospace() + << QString::fromLatin1("No abstract meta type found for argument '%1' while" + "constructing signature for function '%2'.") + .arg(a->name(), name()); + } + } + m_cachedSignature += QLatin1Char(')'); + + if (isConstant()) + m_cachedSignature += QLatin1String(" const"); + } + return m_cachedSignature; +} + +int AbstractMetaFunction::actualMinimumArgumentCount() const +{ + AbstractMetaArgumentList arguments = this->arguments(); + + int count = 0; + for (int i = 0; i < arguments.size(); ++i && ++count) { + if (argumentRemoved(i + 1)) + --count; + else if (!arguments.at(i)->defaultValueExpression().isEmpty()) + break; + } + + return count; +} + +// Returns reference counts for argument at idx, or all arguments if idx == -2 +QVector AbstractMetaFunction::referenceCounts(const AbstractMetaClass *cls, int idx) const +{ + QVector returned; + + const FunctionModificationList &mods = this->modifications(cls); + for (const FunctionModification &mod : mods) { + for (const ArgumentModification &argumentMod : mod.argument_mods) { + if (argumentMod.index != idx && idx != -2) + continue; + returned += argumentMod.referenceCounts; + } + } + + return returned; +} + + +ArgumentOwner AbstractMetaFunction::argumentOwner(const AbstractMetaClass *cls, int idx) const +{ + const FunctionModificationList &mods = this->modifications(cls); + for (const FunctionModification &mod : mods) { + for (const ArgumentModification &argumentMod : mod.argument_mods) { + if (argumentMod.index != idx) + continue; + return argumentMod.owner; + } + } + return ArgumentOwner(); +} + + +QString AbstractMetaFunction::replacedDefaultExpression(const AbstractMetaClass *cls, int key) const +{ + const FunctionModificationList &modifications = this->modifications(cls); + for (const FunctionModification &modification : modifications) { + for (const ArgumentModification &argumentModification : modification.argument_mods) { + if (argumentModification.index == key + && !argumentModification.replacedDefaultExpression.isEmpty()) { + return argumentModification.replacedDefaultExpression; + } + } + } + + return QString(); +} + +bool AbstractMetaFunction::removedDefaultExpression(const AbstractMetaClass *cls, int key) const +{ + const FunctionModificationList &modifications = this->modifications(cls); + for (const FunctionModification &modification : modifications) { + for (const ArgumentModification &argumentModification : modification.argument_mods) { + if (argumentModification.index == key + && argumentModification.removedDefaultExpression) { + return true; + } + } + } + + return false; +} + +QString AbstractMetaFunction::conversionRule(TypeSystem::Language language, int key) const +{ + const FunctionModificationList &modifications = this->modifications(declaringClass()); + for (const FunctionModification &modification : modifications) { + for (const ArgumentModification &argumentModification : modification.argument_mods) { + if (argumentModification.index != key) + continue; + + for (const CodeSnip &snip : argumentModification.conversion_rules) { + if (snip.language == language && !snip.code().isEmpty()) + return snip.code(); + } + } + } + + return QString(); +} + +QString AbstractMetaFunction::argumentReplaced(int key) const +{ + const FunctionModificationList &modifications = this->modifications(declaringClass()); + for (const FunctionModification &modification : modifications) { + for (const ArgumentModification &argumentModification : modification.argument_mods) { + if (argumentModification.index == key && !argumentModification.replace_value.isEmpty()) + return argumentModification.replace_value; + } + } + + return QString(); +} + +// FIXME If we remove a arg. in the method at the base class, it will not reflect here. +bool AbstractMetaFunction::argumentRemoved(int key) const +{ + const FunctionModificationList &modifications = this->modifications(declaringClass()); + for (const FunctionModification &modification : modifications) { + for (const ArgumentModification &argumentModification : modification.argument_mods) { + if (argumentModification.index == key) { + if (argumentModification.removed) + return true; + } + } + } + + return false; +} + +bool AbstractMetaFunction::isVirtualSlot() const +{ + const FunctionModificationList &modifications = this->modifications(declaringClass()); + for (const FunctionModification &modification : modifications) { + if (modification.isVirtualSlot()) + return true; + } + + return false; +} + +bool AbstractMetaFunction::isDeprecated() const +{ + const FunctionModificationList &modifications = this->modifications(declaringClass()); + for (const FunctionModification &modification : modifications) { + if (modification.isDeprecated()) + return true; + } + return false; +} + +bool AbstractMetaFunction::allowThread() const +{ + const FunctionModificationList &modifications = this->modifications(declaringClass()); + for (const FunctionModification &modification : modifications) { + if (modification.allowThread()) + return true; + } + return false; +} + + +TypeSystem::Ownership AbstractMetaFunction::ownership(const AbstractMetaClass *cls, TypeSystem::Language language, int key) const +{ + const FunctionModificationList &modifications = this->modifications(cls); + for (const FunctionModification &modification : modifications) { + for (const ArgumentModification &argumentModification : modification.argument_mods) { + if (argumentModification.index == key) + return argumentModification.ownerships.value(language, TypeSystem::InvalidOwnership); + } + } + + return TypeSystem::InvalidOwnership; +} + +bool AbstractMetaFunction::isRemovedFromAllLanguages(const AbstractMetaClass *cls) const +{ + return isRemovedFrom(cls, TypeSystem::All); +} + +bool AbstractMetaFunction::isRemovedFrom(const AbstractMetaClass *cls, TypeSystem::Language language) const +{ + const FunctionModificationList &modifications = this->modifications(cls); + for (const FunctionModification &modification : modifications) { + if ((modification.removal & language) == language) + return true; + } + + return false; + +} + +QString AbstractMetaFunction::typeReplaced(int key) const +{ + const FunctionModificationList &modifications = this->modifications(declaringClass()); + for (const FunctionModification &modification : modifications) { + for (const ArgumentModification &argumentModification : modification.argument_mods) { + if (argumentModification.index == key + && !argumentModification.modified_type.isEmpty()) { + return argumentModification.modified_type; + } + } + } + + return QString(); +} + +QString AbstractMetaFunction::minimalSignature() const +{ + if (!m_cachedMinimalSignature.isEmpty()) + return m_cachedMinimalSignature; + + QString minimalSignature = originalName() + QLatin1Char('('); + AbstractMetaArgumentList arguments = this->arguments(); + + for (int i = 0; i < arguments.count(); ++i) { + AbstractMetaType *t = arguments.at(i)->type(); + if (t) { + if (i > 0) + minimalSignature += QLatin1Char(','); + minimalSignature += t->minimalSignature(); + } else { + qCWarning(lcShiboken).noquote().nospace() + << QString::fromLatin1("No abstract meta type found for argument '%1' while constructing" + " minimal signature for function '%2'.") + .arg(arguments.at(i)->name(), name()); + } + } + minimalSignature += QLatin1Char(')'); + if (isConstant()) + minimalSignature += QLatin1String("const"); + + minimalSignature = TypeDatabase::normalizedSignature(minimalSignature); + m_cachedMinimalSignature = minimalSignature; + + return minimalSignature; +} + +QString AbstractMetaFunction::debugSignature() const +{ + QString result; + const bool isOverride = attributes() & AbstractMetaFunction::OverriddenCppMethod; + const bool isFinal = attributes() & AbstractMetaFunction::FinalCppMethod; + if (!isOverride && !isFinal && (attributes() & AbstractMetaFunction::VirtualCppMethod)) + result += QLatin1String("virtual "); + result += minimalSignature(); + if (isOverride) + result += QLatin1String(" override"); + if (isFinal) + result += QLatin1String(" final"); + return result; +} + +FunctionModificationList AbstractMetaFunction::modifications(const AbstractMetaClass* implementor) const +{ + if (!implementor) + implementor = ownerClass(); + + if (!implementor) + return TypeDatabase::instance()->functionModifications(minimalSignature()); + + FunctionModificationList mods; + while (implementor) { + mods += implementor->typeEntry()->functionModifications(minimalSignature()); + if ((implementor == implementor->baseClass()) || + (implementor == implementingClass() && (mods.size() > 0))) + break; + const AbstractMetaClassList &interfaces = implementor->interfaces(); + for (const AbstractMetaClass *interface : interfaces) + mods += this->modifications(interface); + implementor = implementor->baseClass(); + } + return mods; +} + +QString AbstractMetaFunction::argumentName(int index, + bool /* create */, + const AbstractMetaClass * /* implementor */) const +{ + return m_arguments[--index]->name(); +} + +bool AbstractMetaFunction::isCallOperator() const +{ + return m_name == QLatin1String("operator()"); +} + +bool AbstractMetaFunction::hasInjectedCode() const +{ + const FunctionModificationList &mods = modifications(ownerClass()); + for (const FunctionModification &mod : mods) { + if (mod.isCodeInjection()) + return true; + } + return false; +} + +CodeSnipList AbstractMetaFunction::injectedCodeSnips(TypeSystem::CodeSnipPosition position, TypeSystem::Language language) const +{ + CodeSnipList result; + const FunctionModificationList &mods = modifications(ownerClass()); + for (const FunctionModification &mod : mods) { + if (mod.isCodeInjection()) { + for (const CodeSnip &snip : mod.snips) { + if ((snip.language & language) && (snip.position == position || position == TypeSystem::CodeSnipPositionAny)) + result << snip; + } + } + } + return result; +} + +bool AbstractMetaFunction::hasSignatureModifications() const +{ + const FunctionModificationList &mods = modifications(); + for (const FunctionModification &mod : mods) { + if (mod.isRenameModifier()) + return true; + for (const ArgumentModification &argmod : mod.argument_mods) { + // since zero represents the return type and we're + // interested only in checking the function arguments, + // it will be ignored. + if (argmod.index > 0) + return true; + } + } + return false; +} + +bool AbstractMetaFunction::isConversionOperator(QString funcName) +{ + static const QRegularExpression opRegEx(QStringLiteral("^operator(?:\\s+(?:const|volatile))?\\s+(\\w+\\s*)&?$")); + Q_ASSERT(opRegEx.isValid()); + return opRegEx.match(funcName).hasMatch(); +} + +bool AbstractMetaFunction::isOperatorOverload(QString funcName) +{ + if (isConversionOperator(funcName)) + return true; + + static const QRegularExpression opRegEx(QLatin1String("^operator([+\\-\\*/%=&\\|\\^\\<>!][=]?" + "|\\+\\+|\\-\\-|&&|\\|\\||<<[=]?|>>[=]?|~" + "|\\[\\]|\\s+delete\\[?\\]?" + "|\\(\\)" + "|\\s+new\\[?\\]?)$")); + Q_ASSERT(opRegEx.isValid()); + return opRegEx.match(funcName).hasMatch(); +} + +bool AbstractMetaFunction::isCastOperator() const +{ + return originalName().startsWith(QLatin1String("operator ")); +} + +bool AbstractMetaFunction::isArithmeticOperator() const +{ + if (!isOperatorOverload()) + return false; + + QString name = originalName(); + + // It's a dereference operator! + if (name == QLatin1String("operator*") && m_arguments.isEmpty()) + return false; + + return name == QLatin1String("operator+") || name == QLatin1String("operator+=") + || name == QLatin1String("operator-") || name == QLatin1String("operator-=") + || name == QLatin1String("operator*") || name == QLatin1String("operator*=") + || name == QLatin1String("operator/") || name == QLatin1String("operator/=") + || name == QLatin1String("operator%") || name == QLatin1String("operator%=") + || name == QLatin1String("operator++") || name == QLatin1String("operator--"); +} + +bool AbstractMetaFunction::isBitwiseOperator() const +{ + if (!isOperatorOverload()) + return false; + + QString name = originalName(); + return name == QLatin1String("operator<<") || name == QLatin1String("operator<<=") + || name == QLatin1String("operator>>") || name == QLatin1String("operator>>=") + || name == QLatin1String("operator&") || name == QLatin1String("operator&=") + || name == QLatin1String("operator|") || name == QLatin1String("operator|=") + || name == QLatin1String("operator^") || name == QLatin1String("operator^=") + || name == QLatin1String("operator~"); +} + +bool AbstractMetaFunction::isComparisonOperator() const +{ + if (!isOperatorOverload()) + return false; + + QString name = originalName(); + return name == QLatin1String("operator<") || name == QLatin1String("operator<=") + || name == QLatin1String("operator>") || name == QLatin1String("operator>=") + || name == QLatin1String("operator==") || name == QLatin1String("operator!="); +} + +bool AbstractMetaFunction::isLogicalOperator() const +{ + if (!isOperatorOverload()) + return false; + + QString name = originalName(); + return name == QLatin1String("operator!") + || name == QLatin1String("operator&&") + || name == QLatin1String("operator||"); +} + +bool AbstractMetaFunction::isSubscriptOperator() const +{ + if (!isOperatorOverload()) + return false; + + return originalName() == QLatin1String("operator[]"); +} + +bool AbstractMetaFunction::isAssignmentOperator() const +{ + return m_functionType == AssignmentOperatorFunction + || m_functionType == MoveAssignmentOperatorFunction; +} + +bool AbstractMetaFunction::isOtherOperator() const +{ + if (!isOperatorOverload()) + return false; + + return !isArithmeticOperator() + && !isBitwiseOperator() + && !isComparisonOperator() + && !isLogicalOperator() + && !isConversionOperator() + && !isSubscriptOperator() + && !isAssignmentOperator(); +} + +int AbstractMetaFunction::arityOfOperator() const +{ + if (!isOperatorOverload() || isCallOperator()) + return -1; + + int arity = m_arguments.size(); + + // Operator overloads that are class members + // implicitly includes the instance and have + // one parameter less than their arity, + // so we increment it. + if (ownerClass() && arity < 2) + arity++; + + return arity; +} + +bool AbstractMetaFunction::isInplaceOperator() const +{ + if (!isOperatorOverload()) + return false; + + QString name = originalName(); + return name == QLatin1String("operator+=") || name == QLatin1String("operator&=") + || name == QLatin1String("operator-=") || name == QLatin1String("operator|=") + || name == QLatin1String("operator*=") || name == QLatin1String("operator^=") + || name == QLatin1String("operator/=") || name == QLatin1String("operator<<=") + || name == QLatin1String("operator%=") || name == QLatin1String("operator>>="); +} + +bool AbstractMetaFunction::isVirtual() const +{ + return attributes() & AbstractMetaAttributes::VirtualCppMethod; +} + +QString AbstractMetaFunction::modifiedName() const +{ + if (m_cachedModifiedName.isEmpty()) { + const FunctionModificationList &mods = modifications(implementingClass()); + for (const FunctionModification &mod : mods) { + if (mod.isRenameModifier()) { + m_cachedModifiedName = mod.renamedToName; + break; + } + } + if (m_cachedModifiedName.isEmpty()) + m_cachedModifiedName = name(); + } + return m_cachedModifiedName; +} + +bool function_sorter(AbstractMetaFunction *a, AbstractMetaFunction *b) +{ + return a->signature() < b->signature(); +} + +#ifndef QT_NO_DEBUG_STREAM +static inline void formatMetaFunctionBrief(QDebug &d, const AbstractMetaFunction *af) +{ + d << '"' << af->debugSignature() << '"'; +} + +void AbstractMetaFunction::formatDebugVerbose(QDebug &d) const +{ + d << m_functionType << ' ' << m_type << ' ' << m_name << '('; + for (int i = 0, count = m_arguments.size(); i < count; ++i) { + if (i) + d << ", "; + d << m_arguments.at(i); + } + d << "), signature=\"" << minimalSignature() << '"'; + if (m_constant) + d << " [const]"; + if (m_reverse) + d << " [reverse]"; + if (m_userAdded) + d << " [userAdded]"; + if (m_explicit) + d << " [explicit]"; + if (m_pointerOperator) + d << " [operator->]"; + if (m_isCallOperator) + d << " [operator()]"; + if (m_class) + d << " class: " << m_class->name(); + if (m_implementingClass) + d << " implementing class: " << m_implementingClass->name(); + if (m_declaringClass) + d << " declaring class: " << m_declaringClass->name(); +} + +QDebug operator<<(QDebug d, const AbstractMetaFunction *af) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "AbstractMetaFunction("; + if (af) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) + if (d.verbosity() > 2) { + af->formatDebugVerbose(d); + } else { +#endif + d << "signature="; + formatMetaFunctionBrief(d, af); +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) + } +#endif + } else { + d << '0'; + } + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM + +/******************************************************************************* + * AbstractMetaClass + */ + +AbstractMetaClass::AbstractMetaClass() + : m_hasVirtuals(false), + m_isPolymorphic(false), + m_hasNonpublic(false), + m_hasVirtualSlots(false), + m_hasNonPrivateConstructor(false), + m_hasPrivateConstructor(false), + m_functionsFixed(false), + m_hasPrivateDestructor(false), + m_hasProtectedDestructor(false), + m_hasVirtualDestructor(false), + m_forceShellClass(false), + m_hasHashFunction(false), + m_hasEqualsOperator(false), + m_hasCloneOperator(false), + m_isTypeDef(false), + m_hasToStringCapability(false) +{ +} + +AbstractMetaClass::~AbstractMetaClass() +{ + qDeleteAll(m_functions); + qDeleteAll(m_fields); + qDeleteAll(m_enums); + if (hasTemplateBaseClassInstantiations()) + qDeleteAll(templateBaseClassInstantiations()); +} + +/******************************************************************************* + * Returns true if this class is a subclass of the given class + */ +bool AbstractMetaClass::inheritsFrom(const AbstractMetaClass *cls) const +{ + Q_ASSERT(cls); + + const AbstractMetaClass *clazz = this; + while (clazz) { + if (clazz == cls) + return true; + + clazz = clazz->baseClass(); + } + + return false; +} + +/******************************************************************************* + * Constructs an interface based on the functions and enums in this + * class and returns it... + */ +AbstractMetaClass *AbstractMetaClass::extractInterface() +{ + Q_ASSERT(typeEntry()->designatedInterface()); + + if (!m_extractedInterface) { + AbstractMetaClass *iface = new AbstractMetaClass; + iface->setAttributes(attributes()); + iface->setBaseClass(0); + + iface->setTypeEntry(typeEntry()->designatedInterface()); + + for (AbstractMetaFunction *function : qAsConst(m_functions)) { + if (!function->isConstructor()) + iface->addFunction(function->copy()); + } + +// iface->setEnums(enums()); +// setEnums(AbstractMetaEnumList()); + + for (const AbstractMetaField *field : qAsConst(m_fields)) { + if (field->isPublic()) { + AbstractMetaField *new_field = field->copy(); + new_field->setEnclosingClass(iface); + iface->addField(new_field); + } + } + + m_extractedInterface = iface; + addInterface(iface); + } + + return m_extractedInterface; +} + +/******************************************************************************* + * Returns a list of all the functions with a given name + */ +AbstractMetaFunctionList AbstractMetaClass::queryFunctionsByName(const QString &name) const +{ + AbstractMetaFunctionList returned; + for (AbstractMetaFunction *function : m_functions) { + if (function->name() == name) + returned.append(function); + } + + return returned; +} + +/******************************************************************************* + * Returns a list of all the functions retrieved during parsing which should + * be added to the API. + */ +AbstractMetaFunctionList AbstractMetaClass::functionsInTargetLang() const +{ + FunctionQueryOptions default_flags = NormalFunctions | Visible | NotRemovedFromTargetLang; + + // Interfaces don't implement functions + if (isInterface()) + default_flags |= ClassImplements; + + // Only public functions in final classes + // default_flags |= isFinal() ? WasPublic : 0; + FunctionQueryOptions public_flags; + if (isFinalInTargetLang()) + public_flags |= WasPublic; + + // Constructors + AbstractMetaFunctionList returned = queryFunctions(Constructors | default_flags | public_flags); + + // Final functions + returned += queryFunctions(FinalInTargetLangFunctions | NonStaticFunctions | default_flags | public_flags); + + // Virtual functions + returned += queryFunctions(VirtualInTargetLangFunctions | NonStaticFunctions | default_flags | public_flags); + + // Static functions + returned += queryFunctions(StaticFunctions | default_flags | public_flags); + + // Empty, private functions, since they aren't caught by the other ones + returned += queryFunctions(Empty | Invisible); + + return returned; +} + +AbstractMetaFunctionList AbstractMetaClass::implicitConversions() const +{ + if (!hasCloneOperator() && !hasExternalConversionOperators()) + return AbstractMetaFunctionList(); + + AbstractMetaFunctionList returned; + const AbstractMetaFunctionList list = queryFunctions(Constructors) + externalConversionOperators(); + + // Exclude anything that uses rvalue references, be it a move + // constructor "QPolygon(QPolygon &&)" or something else like + // "QPolygon(QVector &&)". + for (AbstractMetaFunction *f : list) { + if ((f->actualMinimumArgumentCount() == 1 || f->arguments().size() == 1 || f->isConversionOperator()) + && !f->isExplicit() + && f->functionType() != AbstractMetaFunction::CopyConstructorFunction + && !f->usesRValueReferences() + && !f->isModifiedRemoved() + && (f->originalAttributes() & Public)) { + returned += f; + } + } + return returned; +} + +AbstractMetaFunctionList AbstractMetaClass::operatorOverloads(OperatorQueryOptions query) const +{ + const AbstractMetaFunctionList &list = queryFunctions(OperatorOverloads | Visible); + AbstractMetaFunctionList returned; + for (AbstractMetaFunction *f : list) { + if (((query & ArithmeticOp) && f->isArithmeticOperator()) + || ((query & BitwiseOp) && f->isBitwiseOperator()) + || ((query & ComparisonOp) && f->isComparisonOperator()) + || ((query & LogicalOp) && f->isLogicalOperator()) + || ((query & SubscriptionOp) && f->isSubscriptOperator()) + || ((query & AssignmentOp) && f->isAssignmentOperator()) + || ((query & ConversionOp) && f->isConversionOperator()) + || ((query & OtherOp) && f->isOtherOperator())) + returned += f; + } + + return returned; +} + +bool AbstractMetaClass::hasArithmeticOperatorOverload() const +{ + for (const AbstractMetaFunction *f : m_functions) { + if (f->ownerClass() == f->implementingClass() && f->isArithmeticOperator() && !f->isPrivate()) + return true; + } + return false; +} + +bool AbstractMetaClass::hasBitwiseOperatorOverload() const +{ + for (const AbstractMetaFunction *f : m_functions) { + if (f->ownerClass() == f->implementingClass() && f->isBitwiseOperator() && !f->isPrivate()) + return true; + } + return false; +} + +bool AbstractMetaClass::hasComparisonOperatorOverload() const +{ + for (const AbstractMetaFunction *f : m_functions) { + if (f->ownerClass() == f->implementingClass() && f->isComparisonOperator() && !f->isPrivate()) + return true; + } + return false; +} + +bool AbstractMetaClass::hasLogicalOperatorOverload() const +{ + for (const AbstractMetaFunction *f : m_functions) { + if (f->ownerClass() == f->implementingClass() && f->isLogicalOperator() && !f->isPrivate()) + return true; + } + return false; +} + +void AbstractMetaClass::sortFunctions() +{ + qSort(m_functions.begin(), m_functions.end(), function_sorter); +} + +void AbstractMetaClass::setFunctions(const AbstractMetaFunctionList &functions) +{ + m_functions = functions; + + // Functions must be sorted by name before next loop + sortFunctions(); + + for (AbstractMetaFunction *f : qAsConst(m_functions)) { + f->setOwnerClass(this); + + m_hasVirtualSlots = m_hasVirtualSlots || f->isVirtualSlot(); + m_hasVirtuals = m_hasVirtuals || f->isVirtualSlot() || hasVirtualDestructor(); + m_isPolymorphic = m_isPolymorphic || m_hasVirtuals; + m_hasNonpublic = m_hasNonpublic || !f->isPublic(); + } +} + +bool AbstractMetaClass::hasFieldAccessors() const +{ + for (const AbstractMetaField *field : m_fields) { + if (field->getter() || field->setter()) + return true; + } + + return false; +} + +bool AbstractMetaClass::hasDefaultToStringFunction() const +{ + const AbstractMetaFunctionList &funcs = queryFunctionsByName(QLatin1String("toString")); + for (const AbstractMetaFunction *f : funcs) { + if (!f->actualMinimumArgumentCount()) + return true; + } + return false; +} + +void AbstractMetaClass::addFunction(AbstractMetaFunction *function) +{ + Q_ASSERT(!function->signature().startsWith(QLatin1Char('('))); + function->setOwnerClass(this); + + if (!function->isDestructor()) + m_functions << function; + else + Q_ASSERT(false); //memory leak + + m_hasVirtualSlots |= function->isVirtualSlot(); + m_hasVirtuals |= function->isVirtual() || function->isVirtualSlot() || hasVirtualDestructor(); + m_isPolymorphic |= m_hasVirtuals; + m_hasNonpublic |= !function->isPublic(); +} + +bool AbstractMetaClass::hasSignal(const AbstractMetaFunction *other) const +{ + if (!other->isSignal()) + return false; + + for (const AbstractMetaFunction *f : m_functions) { + if (f->isSignal() && f->compareTo(other) & AbstractMetaFunction::EqualName) + return other->modifiedName() == f->modifiedName(); + } + + return false; +} + + +QString AbstractMetaClass::name() const +{ + return lastNameSegment(m_typeEntry->targetLangName()); +} + +void AbstractMetaClass::setBaseClass(AbstractMetaClass *baseClass) +{ + m_baseClass = baseClass; + if (baseClass) + m_isPolymorphic |= baseClass->isPolymorphic(); +} + +QString AbstractMetaClass::package() const +{ + return m_typeEntry->targetLangPackage(); +} + +bool AbstractMetaClass::isInterface() const +{ + return m_typeEntry->isInterface(); +} + +bool AbstractMetaClass::isNamespace() const +{ + return m_typeEntry->isNamespace(); +} + +bool AbstractMetaClass::isQObject() const +{ + return m_typeEntry->isQObject(); +} + +QString AbstractMetaClass::qualifiedCppName() const +{ + return m_typeEntry->qualifiedCppName(); +} + +bool AbstractMetaClass::hasFunction(const QString &str) const +{ + return findFunction(str); +} + +const AbstractMetaFunction* AbstractMetaClass::findFunction(const QString& functionName) const +{ + for (const AbstractMetaFunction *f : m_functions) { + if (f->name() == functionName) + return f; + } + return 0; +} + +bool AbstractMetaClass::hasProtectedFunctions() const +{ + for (AbstractMetaFunction *func : m_functions) { + if (func->isProtected()) + return true; + } + return false; +} + +bool AbstractMetaClass::hasProtectedFields() const +{ + for (const AbstractMetaField *field : m_fields) { + if (field->isProtected()) + return true; + } + return false; +} + +bool AbstractMetaClass::hasProtectedMembers() const +{ + return hasProtectedFields() || hasProtectedFunctions(); +} + +QPropertySpec *AbstractMetaClass::propertySpecForRead(const QString &name) const +{ + for (int i = 0; i < m_propertySpecs.size(); ++i) + if (name == m_propertySpecs.at(i)->read()) + return m_propertySpecs.at(i); + return 0; +} + +QPropertySpec *AbstractMetaClass::propertySpecForWrite(const QString &name) const +{ + for (int i = 0; i < m_propertySpecs.size(); ++i) + if (name == m_propertySpecs.at(i)->write()) + return m_propertySpecs.at(i); + return 0; +} + +QPropertySpec *AbstractMetaClass::propertySpecForReset(const QString &name) const +{ + for (int i = 0; i < m_propertySpecs.size(); ++i) { + if (name == m_propertySpecs.at(i)->reset()) + return m_propertySpecs.at(i); + } + return 0; +} + +typedef QHash AbstractMetaClassBaseTemplateInstantiationsMap; +Q_GLOBAL_STATIC(AbstractMetaClassBaseTemplateInstantiationsMap, metaClassBaseTemplateInstantiations); + +bool AbstractMetaClass::hasTemplateBaseClassInstantiations() const +{ + if (!templateBaseClass()) + return false; + return metaClassBaseTemplateInstantiations()->contains(this); +} + +AbstractMetaTypeList AbstractMetaClass::templateBaseClassInstantiations() const +{ + if (!templateBaseClass()) + return AbstractMetaTypeList(); + return metaClassBaseTemplateInstantiations()->value(this); +} + +void AbstractMetaClass::setTemplateBaseClassInstantiations(AbstractMetaTypeList& instantiations) +{ + if (!templateBaseClass()) + return; + metaClassBaseTemplateInstantiations()->insert(this, instantiations); +} + +static bool functions_contains(const AbstractMetaFunctionList &l, const AbstractMetaFunction *func) +{ + for (const AbstractMetaFunction *f : l) { + if ((f->compareTo(func) & AbstractMetaFunction::PrettySimilar) == AbstractMetaFunction::PrettySimilar) + return true; + } + return false; +} + +AbstractMetaField::AbstractMetaField() = default; + +AbstractMetaField::~AbstractMetaField() +{ + delete m_setter; + delete m_getter; +} + +AbstractMetaField *AbstractMetaField::copy() const +{ + AbstractMetaField *returned = new AbstractMetaField; + returned->assignMetaVariable(*this); + returned->assignMetaAttributes(*this); + returned->setEnclosingClass(nullptr); + return returned; +} + +/******************************************************************************* + * Indicates that this field has a modification that removes it + */ +bool AbstractMetaField::isModifiedRemoved(int types) const +{ + const FieldModificationList &mods = modifications(); + for (const FieldModification &mod : mods) { + if (!mod.isRemoveModifier()) + continue; + + if ((mod.removal & types) == types) + return true; + } + + return false; +} + +static QString upCaseFirst(const QString &str) +{ + Q_ASSERT(!str.isEmpty()); + QString s = str; + s[0] = s.at(0).toUpper(); + return s; +} + +static AbstractMetaFunction *createXetter(const AbstractMetaField *g, const QString &name, + AbstractMetaAttributes::Attributes type) +{ + AbstractMetaFunction *f = new AbstractMetaFunction; + + f->setName(name); + f->setOriginalName(name); + f->setOwnerClass(g->enclosingClass()); + f->setImplementingClass(g->enclosingClass()); + f->setDeclaringClass(g->enclosingClass()); + + AbstractMetaAttributes::Attributes attr = AbstractMetaAttributes::FinalInTargetLang | type; + if (g->isStatic()) + attr |= AbstractMetaAttributes::Static; + if (g->isPublic()) + attr |= AbstractMetaAttributes::Public; + else if (g->isProtected()) + attr |= AbstractMetaAttributes::Protected; + else + attr |= AbstractMetaAttributes::Private; + f->setAttributes(attr); + f->setOriginalAttributes(attr); + + const FieldModificationList &mods = g->modifications(); + for (const FieldModification &mod : mods) { + if (mod.isRenameModifier()) + f->setName(mod.renamedTo()); + if (mod.isAccessModifier()) { + if (mod.isPrivate()) + f->setVisibility(AbstractMetaAttributes::Private); + else if (mod.isProtected()) + f->setVisibility(AbstractMetaAttributes::Protected); + else if (mod.isPublic()) + f->setVisibility(AbstractMetaAttributes::Public); + else if (mod.isFriendly()) + f->setVisibility(AbstractMetaAttributes::Friendly); + } + } + return f; +} + +FieldModificationList AbstractMetaField::modifications() const +{ + const FieldModificationList &mods = enclosingClass()->typeEntry()->fieldModifications(); + FieldModificationList returned; + + for (const FieldModification &mod : mods) { + if (mod.name == name()) + returned += mod; + } + + return returned; +} + +const AbstractMetaFunction *AbstractMetaField::setter() const +{ + if (!m_setter) { + m_setter = createXetter(this, + QLatin1String("set") + upCaseFirst(name()), + AbstractMetaAttributes::SetterFunction); + AbstractMetaArgumentList arguments; + AbstractMetaArgument *argument = new AbstractMetaArgument; + argument->setType(type()->copy()); + argument->setName(name()); + arguments.append(argument); + m_setter->setArguments(arguments); + } + return m_setter; +} + +const AbstractMetaFunction *AbstractMetaField::getter() const +{ + if (!m_getter) { + m_getter = createXetter(this, + name(), + AbstractMetaAttributes::GetterFunction); + m_getter->setType(type()); + } + + return m_getter; +} + +#ifndef QT_NO_DEBUG_STREAM +static void formatMetaAttributes(QDebug &d, AbstractMetaAttributes::Attributes value) +{ + static const int meIndex = AbstractMetaAttributes::staticMetaObject.indexOfEnumerator("Attribute"); + Q_ASSERT(meIndex >= 0); + const QMetaEnum me = AbstractMetaAttributes::staticMetaObject.enumerator(meIndex); + d << me.valueToKeys(value); +} + +static void formatMetaField(QDebug &d, const AbstractMetaField *af) +{ + formatMetaAttributes(d, af->attributes()); + d << ' ' << af->type()->name() << " \"" << af->name() << '"'; +} + +QDebug operator<<(QDebug d, const AbstractMetaField *af) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "AbstractMetaField("; + if (af) + formatMetaField(d, af); + else + d << '0'; + d << ')'; + return d; +} + +static void formatMetaEnumValue(QDebug &d, const AbstractMetaEnumValue *v) +{ + const QString &name = v->stringValue(); + if (!name.isEmpty()) + d << name << '='; + d << v->value(); +} + +QDebug operator<<(QDebug d, const AbstractMetaEnumValue *v) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "AbstractMetaEnumValue("; + if (v) + formatMetaEnumValue(d, v); + else + d << '0'; + d << ')'; + return d; +} + +QDebug operator<<(QDebug d, const AbstractMetaEnum *ae) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "AbstractMetaEnum("; + if (ae) { + d << ae->fullName(); + if (!ae->isSigned()) + d << " (unsigned) "; + d << '['; + const AbstractMetaEnumValueList &values = ae->values(); + for (int i = 0, count = values.size(); i < count; ++i) { + if (i) + d << ' '; + formatMetaEnumValue(d, values.at(i)); + } + d << ']'; + } else { + d << '0'; + } + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM + +bool AbstractMetaClass::hasConstructors() const +{ + return queryFunctions(Constructors).size(); +} + +bool AbstractMetaClass::hasCopyConstructor() const +{ + const AbstractMetaFunctionList &ctors = queryFunctions(Constructors); + for (const AbstractMetaFunction* ctor : ctors) { + if (ctor->functionType() == AbstractMetaFunction::CopyConstructorFunction) + return true; + } + return false; +} + +bool AbstractMetaClass::hasPrivateCopyConstructor() const +{ + const AbstractMetaFunctionList &ctors = queryFunctions(Constructors); + for (const AbstractMetaFunction *ctor : ctors) { + if (ctor->functionType() == AbstractMetaFunction::CopyConstructorFunction && ctor->isPrivate()) + return true; + } + return false; +} + +void AbstractMetaClass::addDefaultConstructor() +{ + AbstractMetaFunction *f = new AbstractMetaFunction; + f->setOriginalName(name()); + f->setName(name()); + f->setOwnerClass(this); + f->setFunctionType(AbstractMetaFunction::ConstructorFunction); + f->setArguments(AbstractMetaArgumentList()); + f->setDeclaringClass(this); + + f->setAttributes(Public | FinalInTargetLang | AddedMethod); + f->setImplementingClass(this); + f->setOriginalAttributes(f->attributes()); + + addFunction(f); + this->setHasNonPrivateConstructor(true); +} + +void AbstractMetaClass::addDefaultCopyConstructor(bool isPrivate) +{ + AbstractMetaFunction* f = new AbstractMetaFunction; + f->setOriginalName(name()); + f->setName(name()); + f->setOwnerClass(this); + f->setFunctionType(AbstractMetaFunction::CopyConstructorFunction); + f->setDeclaringClass(this); + + AbstractMetaType* argType = new AbstractMetaType; + argType->setTypeEntry(typeEntry()); + argType->setReferenceType(LValueReference); + argType->setConstant(true); + argType->setTypeUsagePattern(AbstractMetaType::ValuePattern); + + AbstractMetaArgument* arg = new AbstractMetaArgument; + arg->setType(argType); + arg->setName(name()); + f->addArgument(arg); + + AbstractMetaAttributes::Attributes attr = FinalInTargetLang | AddedMethod; + if (isPrivate) + attr |= AbstractMetaAttributes::Private; + else + attr |= AbstractMetaAttributes::Public; + f->setAttributes(attr); + f->setImplementingClass(this); + f->setOriginalAttributes(f->attributes()); + + addFunction(f); +} + +bool AbstractMetaClass::hasFunction(const AbstractMetaFunction *f) const +{ + return functions_contains(m_functions, f); +} + +/* Goes through the list of functions and returns a list of all + functions matching all of the criteria in \a query. + */ + +AbstractMetaFunctionList AbstractMetaClass::queryFunctions(FunctionQueryOptions query) const +{ + AbstractMetaFunctionList functions; + + for (AbstractMetaFunction *f : m_functions) { + if ((query & NotRemovedFromTargetLang) && f->isRemovedFrom(f->implementingClass(), TypeSystem::TargetLangCode)) + continue; + + if ((query & NotRemovedFromTargetLang) && f->isVirtual() && f->isRemovedFrom(f->declaringClass(), TypeSystem::TargetLangCode)) + continue; + + if ((query & Visible) && f->isPrivate()) + continue; + + if ((query & VirtualInTargetLangFunctions) && f->isFinalInTargetLang()) + continue; + + if ((query & Invisible) && !f->isPrivate()) + continue; + + if ((query & Empty) && !f->isEmptyFunction()) + continue; + + if ((query & WasPublic) && !f->wasPublic()) + continue; + + if ((query & ClassImplements) && f->ownerClass() != f->implementingClass()) + continue; + + if ((query & FinalInTargetLangFunctions) && !f->isFinalInTargetLang()) + continue; + + if ((query & VirtualInCppFunctions) && !f->isVirtual()) + continue; + + if ((query & Signals) && (!f->isSignal())) + continue; + + if ((query & Constructors) && (!f->isConstructor() || f->ownerClass() != f->implementingClass())) + continue; + + if (!(query & Constructors) && f->isConstructor()) + continue; + + // Destructors are never included in the functions of a class currently + /* + if ((query & Destructors) && (!f->isDestructor() + || f->ownerClass() != f->implementingClass()) + || f->isDestructor() && (query & Destructors) == 0) { + continue; + }*/ + + if ((query & StaticFunctions) && (!f->isStatic() || f->isSignal())) + continue; + + if ((query & NonStaticFunctions) && (f->isStatic())) + continue; + + if ((query & NormalFunctions) && (f->isSignal())) + continue; + + if ((query & OperatorOverloads) && !f->isOperatorOverload()) + continue; + + functions << f; + } + + return functions; +} + +bool AbstractMetaClass::hasSignals() const +{ + return cppSignalFunctions().size() > 0; +} + + +/** + * Adds the specified interface to this class by adding all the + * functions in the interface to this class. + */ +void AbstractMetaClass::addInterface(AbstractMetaClass *interface) +{ + Q_ASSERT(!m_interfaces.contains(interface)); + m_interfaces << interface; + + m_isPolymorphic |= interface->isPolymorphic(); + + if (m_extractedInterface && m_extractedInterface != interface) + m_extractedInterface->addInterface(interface); + + +#if 0 + const AbstractMetaFunctionList &funcs = interface->functions(); + for (AbstractMetaFunction *function : funcs) + if (!hasFunction(function) && !function->isConstructor()) { + AbstractMetaFunction *cpy = function->copy(); + cpy->setImplementingClass(this); + + // Setup that this function is an interface class. + cpy->setInterfaceClass(interface); + *cpy += AbstractMetaAttributes::InterfaceFunction; + + // Copy the modifications in interface into the implementing classes. + const FunctionModificationList &mods = function->modifications(interface); + for (const FunctionModification &mod : mods) + m_typeEntry->addFunctionModification(mod); + + // It should be mostly safe to assume that when we implement an interface + // we don't "pass on" pure virtual functions to our sublcasses... +// *cpy -= AbstractMetaAttributes::Abstract; + + addFunction(cpy); + } +#endif + +} + + +void AbstractMetaClass::setInterfaces(const AbstractMetaClassList &interfaces) +{ + m_interfaces = interfaces; + for (const AbstractMetaClass *interface : interfaces) { + if (interface) + m_isPolymorphic |= interface->isPolymorphic(); + } +} + + +AbstractMetaEnum *AbstractMetaClass::findEnum(const QString &enumName) +{ + for (AbstractMetaEnum *e : qAsConst(m_enums)) { + if (e->name() == enumName) + return e; + } + + if (typeEntry()->designatedInterface()) + return extractInterface()->findEnum(enumName); + + return nullptr; +} + +/*! Recursively searches for the enum value named \a enumValueName in + this class and its superclasses and interfaces. +*/ +AbstractMetaEnumValue *AbstractMetaClass::findEnumValue(const QString &enumValueName) +{ + for (AbstractMetaEnum *e : qAsConst(m_enums)) { + if (AbstractMetaEnumValue *v = e->findEnumValue(enumValueName)) + return v; + } + + if (typeEntry()->designatedInterface()) + return extractInterface()->findEnumValue(enumValueName); + + if (baseClass()) + return baseClass()->findEnumValue(enumValueName); + + return nullptr; +} + + +static void addExtraIncludeForType(AbstractMetaClass *metaClass, const AbstractMetaType *type) +{ + if (!type) + return; + + Q_ASSERT(metaClass); + const TypeEntry *entry = (type ? type->typeEntry() : 0); + if (entry && entry->isComplex()) { + const ComplexTypeEntry *centry = static_cast(entry); + ComplexTypeEntry *class_entry = metaClass->typeEntry(); + if (class_entry && centry->include().isValid()) + class_entry->addExtraInclude(centry->include()); + } + + if (type->hasInstantiations()) { + const AbstractMetaTypeList &instantiations = type->instantiations(); + for (const AbstractMetaType *instantiation : instantiations) + addExtraIncludeForType(metaClass, instantiation); + } +} + +static void addExtraIncludesForFunction(AbstractMetaClass *metaClass, const AbstractMetaFunction *meta_function) +{ + Q_ASSERT(metaClass); + Q_ASSERT(meta_function); + addExtraIncludeForType(metaClass, meta_function->type()); + + const AbstractMetaArgumentList &arguments = meta_function->arguments(); + for (AbstractMetaArgument *argument : arguments) + addExtraIncludeForType(metaClass, argument->type()); +} + +void AbstractMetaClass::fixFunctions() +{ + if (m_functionsFixed) + return; + else + m_functionsFixed = true; + + AbstractMetaClass *superClass = baseClass(); + AbstractMetaFunctionList funcs = functions(); + + if (superClass) + superClass->fixFunctions(); + int iface_idx = 0; + while (superClass || iface_idx < interfaces().size()) { + // Since we always traverse the complete hierarchy we are only + // interrested in what each super class implements, not what + // we may have propagated from their base classes again. + AbstractMetaFunctionList superFuncs; + if (superClass) { + // Super classes can never be final + if (superClass->isFinalInTargetLang()) { + qCWarning(lcShiboken).noquote().nospace() + << "Final class '" << superClass->name() << "' set to non-final, as it is extended by other classes"; + *superClass -= AbstractMetaAttributes::FinalInTargetLang; + } + superFuncs = superClass->queryFunctions(AbstractMetaClass::ClassImplements); + AbstractMetaFunctionList virtuals = superClass->queryFunctions(AbstractMetaClass::VirtualInCppFunctions); + superFuncs += virtuals; + } else { + superFuncs = interfaces().at(iface_idx)->queryFunctions(AbstractMetaClass::NormalFunctions); + AbstractMetaFunctionList virtuals = interfaces().at(iface_idx)->queryFunctions(AbstractMetaClass::VirtualInCppFunctions); + superFuncs += virtuals; + } + + QSet funcsToAdd; + for (int sfi = 0; sfi < superFuncs.size(); ++sfi) { + AbstractMetaFunction *sf = superFuncs.at(sfi); + + if (sf->isRemovedFromAllLanguages(sf->implementingClass())) + continue; + + // skip functions added in base classes + if (sf->isUserAdded() && sf->declaringClass() != this) + continue; + + // we generally don't care about private functions, but we have to get the ones that are + // virtual in case they override abstract functions. + bool add = (sf->isNormal() || sf->isSignal() || sf->isEmptyFunction()); + for (int fi = 0; fi < funcs.size(); ++fi) { + AbstractMetaFunction *f = funcs.at(fi); + if (f->isRemovedFromAllLanguages(f->implementingClass())) + continue; + + + const AbstractMetaFunction::CompareResult cmp = f->compareTo(sf); + + if (cmp & AbstractMetaFunction::EqualModifiedName) { + add = false; + if (cmp & AbstractMetaFunction::EqualArguments) { + // Same function, propegate virtual... + if (!(cmp & AbstractMetaFunction::EqualAttributes)) { + if (!f->isEmptyFunction()) { + if (!sf->isFinalInTargetLang() && f->isFinalInTargetLang()) { + *f -= AbstractMetaAttributes::FinalInTargetLang; + } +#if 0 + if (!f->isFinalInTargetLang() && f->isPrivate()) { + f->setFunctionType(AbstractMetaFunction::EmptyFunction); + f->setVisibility(AbstractMetaAttributes::Protected); + *f += AbstractMetaAttributes::FinalInTargetLang; + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("private virtual function '%1' in '%2'") + .arg(f->signature(), f->implementingClass()->name()); + } +#endif + } + } + + if (f->visibility() != sf->visibility()) { + QString warn = QStringLiteral("visibility of function '%1' modified in class '%2'") + .arg(f->name(), name()); + qCWarning(lcShiboken).noquote().nospace() << warn; +#if 0 + // If new visibility is private, we can't + // do anything. If it isn't, then we + // prefer the parent class's visibility + // setting for the function. + if (!f->isPrivate() && !sf->isPrivate()) + f->setVisibility(sf->visibility()); +#endif + // Private overrides of abstract functions have to go into the class or + // the subclasses will not compile as non-abstract classes. + // But they don't need to be implemented, since they can never be called. + if (f->isPrivate()) { + f->setFunctionType(AbstractMetaFunction::EmptyFunction); + *f += AbstractMetaAttributes::FinalInTargetLang; + } + } + + // Set the class which first declares this function, afawk + f->setDeclaringClass(sf->declaringClass()); + + if (sf->isFinalInTargetLang() && !sf->isPrivate() && !f->isPrivate() && !sf->isStatic() && !f->isStatic()) { + // Shadowed funcion, need to make base class + // function non-virtual + if (f->implementingClass() != sf->implementingClass() && f->implementingClass()->inheritsFrom(sf->implementingClass())) { + + // Check whether the superclass method has been redefined to non-final + + bool hasNonFinalModifier = false; + bool isBaseImplPrivate = false; + const FunctionModificationList &mods = sf->modifications(sf->implementingClass()); + for (const FunctionModification &mod : mods) { + if (mod.isNonFinal()) { + hasNonFinalModifier = true; + break; + } else if (mod.isPrivate()) { + isBaseImplPrivate = true; + break; + } + } + + if (!hasNonFinalModifier && !isBaseImplPrivate) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("Shadowing: %1::%2 and %3::%4") + .arg(sf->implementingClass()->name(), sf->signature(), + f->implementingClass()->name(), f->signature()); + } + } + } + + } + + if (cmp & AbstractMetaFunction::EqualDefaultValueOverload) { + AbstractMetaArgumentList arguments; + if (f->arguments().size() < sf->arguments().size()) + arguments = sf->arguments(); + else + arguments = f->arguments(); + //TODO: fix this + //for (int i=0; isetDefaultValueExpression("<#>" + QString()); + } + + + // Otherwise we have function shadowing and we can + // skip the thing... + } else if (cmp & AbstractMetaFunction::EqualName && !sf->isSignal()) { + // In the case of function shadowing where the function name has been altered to + // avoid conflict, we don't copy in the original. + add = false; + } + } + + if (add) + funcsToAdd << sf; + } + + for (AbstractMetaFunction *f : qAsConst(funcsToAdd)) { + AbstractMetaFunction *copy = f->copy(); + (*copy) += AddedMethod; + funcs.append(copy); + } + + if (superClass) + superClass = superClass->baseClass(); + else + iface_idx++; + } + + bool hasPrivateConstructors = false; + bool hasPublicConstructors = false; + for (AbstractMetaFunction *func : qAsConst(funcs)) { + const FunctionModificationList &mods = func->modifications(this); + for (const FunctionModification &mod : mods) { + if (mod.isRenameModifier()) { + func->setName(mod.renamedTo()); + } + } + + // Make sure class is abstract if one of the functions is + if (func->isAbstract()) { + (*this) += AbstractMetaAttributes::Abstract; + (*this) -= AbstractMetaAttributes::FinalInTargetLang; + } + + if (func->isConstructor()) { + if (func->isPrivate()) + hasPrivateConstructors = true; + else + hasPublicConstructors = true; + } + + + + // Make sure that we include files for all classes that are in use + + if (!func->isRemovedFrom(this, TypeSystem::ShellCode)) + addExtraIncludesForFunction(this, func); + } + + if (hasPrivateConstructors && !hasPublicConstructors) { + (*this) += AbstractMetaAttributes::Abstract; + (*this) -= AbstractMetaAttributes::FinalInTargetLang; + } + + setFunctions(funcs); +} + +static inline QString formatArraySize(int e) +{ + QString result; + result += QLatin1Char('['); + if (e >= 0) + result += QString::number(e); + result += QLatin1Char(']'); + return result; +} + +QString AbstractMetaType::formatSignature(bool minimal) const +{ + QString result; + if (isConstant()) + result += QLatin1String("const "); + if (isArray()) { + // Build nested array dimensions a[2][3] in correct order + result += m_arrayElementType->minimalSignature(); + const int arrayPos = result.indexOf(QLatin1Char('[')); + if (arrayPos != -1) + result.insert(arrayPos, formatArraySize(m_arrayElementCount)); + else + result.append(formatArraySize(m_arrayElementCount)); + } else { + result += typeEntry()->qualifiedCppName(); + } + if (!m_instantiations.isEmpty()) { + result += QLatin1Char('<'); + if (minimal) + result += QLatin1Char(' '); + for (int i = 0, size = m_instantiations.size(); i < size; ++i) { + if (i > 0) + result += QLatin1Char(','); + result += m_instantiations.at(i)->minimalSignature(); + } + result += QLatin1String(" >"); + } + + if (!minimal && (m_indirections != 0 || m_referenceType != NoReference)) + result += QLatin1Char(' '); + if (m_indirections) + result += QString(m_indirections, QLatin1Char('*')); + switch (referenceType()) { + case NoReference: + break; + case LValueReference: + result += QLatin1Char('&'); + break; + case RValueReference: + result += QLatin1String("&&"); + break; + } + return result; +} + +bool AbstractMetaType::isCppPrimitive() const +{ + return m_pattern == PrimitivePattern && m_typeEntry->isCppPrimitive(); +} + +/******************************************************************************* + * Other stuff... + */ + + +AbstractMetaEnum *AbstractMetaClass::findEnum(const AbstractMetaClassList &classes, + const EnumTypeEntry *entry) +{ + Q_ASSERT(entry->isEnum()); + + QString qualifiedName = entry->qualifiedCppName(); + int pos = qualifiedName.lastIndexOf(QLatin1String("::")); + + QString enumName; + QString className; + + if (pos > 0) { + enumName = qualifiedName.mid(pos + 2); + className = qualifiedName.mid(0, pos); + } else { + enumName = qualifiedName; + className = TypeDatabase::globalNamespaceClassName(entry); + } + + AbstractMetaClass *metaClass = AbstractMetaClass::findClass(classes, className); + if (!metaClass) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("AbstractMeta::findEnum(), unknown class '%1' in '%2'") + .arg(className, entry->qualifiedCppName()); + return 0; + } + + return metaClass->findEnum(enumName); +} + +AbstractMetaEnumValue *AbstractMetaClass::findEnumValue(const AbstractMetaClassList &classes, + const QString &name) +{ + const QVector lst = name.splitRef(QLatin1String("::")); + + if (lst.size() > 1) { + const QStringRef prefixName = lst.at(0); + const QStringRef enumName = lst.at(1); + if (AbstractMetaClass *cl = findClass(classes, prefixName.toString())) + return cl->findEnumValue(enumName.toString()); + } + + for (AbstractMetaClass *metaClass : classes) { + if (AbstractMetaEnumValue *enumValue = metaClass->findEnumValue(name)) + return enumValue; + } + + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("no matching enum '%1'").arg(name); + return nullptr; +} + +/*! + * Searches the list after a class that mathces \a name; either as + * C++, Target language base name or complete Target language package.class name. + */ + +AbstractMetaClass *AbstractMetaClass::findClass(const AbstractMetaClassList &classes, + const QString &name) +{ + if (name.isEmpty()) + return 0; + + for (AbstractMetaClass *c : classes) { + if (c->qualifiedCppName() == name) + return c; + } + + for (AbstractMetaClass *c : classes) { + if (c->fullName() == name) + return c; + } + + for (AbstractMetaClass *c : classes) { + if (c->name() == name) + return c; + } + + return 0; +} + +AbstractMetaClass *AbstractMetaClass::findClass(const AbstractMetaClassList &classes, + const TypeEntry* typeEntry) +{ + for (AbstractMetaClass* c : classes) { + if (c->typeEntry() == typeEntry) + return c; + } + return 0; +} + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AbstractMetaClass *ac) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "AbstractMetaClass("; + if (ac) { + d << '"' << ac->fullName() << '"'; + if (ac->attributes() & AbstractMetaAttributes::FinalCppClass) + d << " [final]"; + if (ac->m_baseClass) + d << ", inherits \"" << ac->m_baseClass->name() << '"'; + const AbstractMetaEnumList &enums = ac->enums(); + if (!enums.isEmpty()) + d << ", enums[" << enums.size() << "]=" << enums; + const AbstractMetaFunctionList &functions = ac->functions(); + if (!functions.isEmpty()) { + const int count = functions.size(); + d << ", functions=[" << count << "]("; + for (int i = 0; i < count; ++i) { + if (i) + d << ", "; +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) + if (d.verbosity() > 2) + d << functions.at(i); + else +#endif + formatMetaFunctionBrief(d, functions.at(i)); + } + d << ')'; + } + const AbstractMetaFieldList &fields = ac->fields(); + if (!fields.isEmpty()) { + const int count = fields.size(); + d << ", fields=[" << count << "]("; + for (int i = 0; i < count; ++i) { + if (i) + d << ", "; + formatMetaField(d, fields.at(i)); + } + d << ')'; + } + } else { + d << '0'; + } + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM + +/******************************************************************************* +* AbstractMetaEnum +*/ + +AbstractMetaEnum::AbstractMetaEnum() : + m_hasQenumsDeclaration(false), m_signed(true) +{ +} + +AbstractMetaEnum::~AbstractMetaEnum() +{ + qDeleteAll(m_enumValues); +} + +template +AbstractMetaEnumValue *findMatchingEnumValue(const AbstractMetaEnumValueList &list, const String &value) +{ + for (AbstractMetaEnumValue *enumValue : list) { + if (enumValue->name() == value) + return enumValue; + } + return nullptr; +} + +// Find enum values for "enum Enum { e1 }" either for "e1" or "Enum::e1" +AbstractMetaEnumValue *AbstractMetaEnum::findEnumValue(const QString &value) const +{ + if (isAnonymous()) + return findMatchingEnumValue(m_enumValues, value); + const int sepPos = value.indexOf(QLatin1String("::")); + if (sepPos == -1) + return findMatchingEnumValue(m_enumValues, value); + return name() == value.leftRef(sepPos) + ? findMatchingEnumValue(m_enumValues, value.rightRef(value.size() - sepPos - 2)) + : nullptr; +} + +QString AbstractMetaEnum::name() const +{ + return m_typeEntry->targetLangName(); +} + +QString AbstractMetaEnum::qualifier() const +{ + return m_typeEntry->targetLangQualifier(); +} + +QString AbstractMetaEnum::package() const +{ + return m_typeEntry->targetLangPackage(); +} diff --git a/sources/shiboken2/ApiExtractor/abstractmetalang.h b/sources/shiboken2/ApiExtractor/abstractmetalang.h new file mode 100644 index 0000000..d1a0fbf --- /dev/null +++ b/sources/shiboken2/ApiExtractor/abstractmetalang.h @@ -0,0 +1,1794 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ABSTRACTMETALANG_H +#define ABSTRACTMETALANG_H + +#include "abstractmetalang_typedefs.h" +#include "typesystem_enums.h" +#include "typesystem_typedefs.h" + +#include "parser/codemodel_enums.h" +#include "parser/enumvalue.h" + +#include +#include + +QT_FORWARD_DECLARE_CLASS(QDebug) + +class AbstractMeta; +class AbstractMetaClass; +class AbstractMetaField; +class AbstractMetaFunction; +class AbstractMetaType; +class AbstractMetaVariable; +class AbstractMetaArgument; +class AbstractMetaEnumValue; +class AbstractMetaEnum; +class QPropertySpec; + +class CodeSnip; +class ComplexTypeEntry; +class EnumTypeEntry; +class FlagsTypeEntry; +class FunctionTypeEntry; +class TypeEntry; + +struct ArgumentOwner; +struct FieldModification; +struct FunctionModification; +struct ReferenceCount; + +class Documentation +{ +public: + enum Format { + Native, + Target + }; + + Documentation() {} + + Documentation(const QString& value, Format fmt = Documentation::Native) + : m_data(value.trimmed()), m_format(fmt) {} + + bool isEmpty() const { return m_data.isEmpty(); } + + QString value() const + { + return m_data; + } + + void setValue(const QString& value, Format fmt = Documentation::Native) + { + m_data = value.trimmed(); + m_format = fmt; + } + + Documentation::Format format() const + { + return m_format; + } + +private: + QString m_data; + Format m_format = Documentation::Native; + +}; + +class AbstractMetaAttributes +{ + Q_DISABLE_COPY(AbstractMetaAttributes) + Q_GADGET +public: + AbstractMetaAttributes(); + virtual ~AbstractMetaAttributes(); + + enum Attribute { + None = 0x00000000, + + Private = 0x00000001, + Protected = 0x00000002, + Public = 0x00000004, + Friendly = 0x00000008, + Visibility = 0x0000000f, + + Abstract = 0x00000020, + Static = 0x00000040, + + FinalInTargetLang = 0x00000080, + + GetterFunction = 0x00000400, + SetterFunction = 0x00000800, + + PropertyReader = 0x00004000, + PropertyWriter = 0x00008000, + PropertyResetter = 0x00010000, + + Invokable = 0x00040000, + + HasRejectedConstructor = 0x00080000, + + FinalCppClass = 0x00100000, + VirtualCppMethod = 0x00200000, + OverriddenCppMethod = 0x00400000, + FinalCppMethod = 0x00800000, + // Add by meta builder (implicit constructors, inherited methods, etc) + AddedMethod = 0x01000000 + }; + Q_DECLARE_FLAGS(Attributes, Attribute) + Q_FLAG(Attribute) + + Attributes attributes() const + { + return m_attributes; + } + + void setAttributes(Attributes attributes) + { + m_attributes = attributes; + } + + Attributes originalAttributes() const + { + return m_originalAttributes; + } + + void setOriginalAttributes(Attributes attributes) + { + m_originalAttributes = attributes; + } + + Attributes visibility() const + { + return m_attributes & Visibility; + } + + void setVisibility(Attributes visi) + { + m_attributes = (m_attributes & ~Visibility) | visi; + } + + void operator+=(Attribute attribute) + { + m_attributes |= attribute; + } + + void operator-=(Attribute attribute) + { + m_attributes &= ~attribute; + } + + bool isFinalInTargetLang() const + { + return m_attributes & FinalInTargetLang; + } + + bool isAbstract() const + { + return m_attributes & Abstract; + } + + bool isStatic() const + { + return m_attributes & Static; + } + + bool isInvokable() const + { + return m_attributes & Invokable; + } + + bool isPropertyReader() const + { + return m_attributes & PropertyReader; + } + + bool isPropertyWriter() const + { + return m_attributes & PropertyWriter; + } + + bool isPropertyResetter() const + { + return m_attributes & PropertyResetter; + } + + bool isPrivate() const + { + return m_attributes & Private; + } + + bool isProtected() const + { + return m_attributes & Protected; + } + + bool isPublic() const + { + return m_attributes & Public; + } + + bool isFriendly() const + { + return m_attributes & Friendly; + } + + bool wasPrivate() const + { + return m_originalAttributes & Private; + } + + bool wasProtected() const + { + return m_originalAttributes & Protected; + } + + bool wasPublic() const + { + return m_originalAttributes & Public; + } + + bool wasFriendly() const + { + return m_originalAttributes & Friendly; + } + + void setDocumentation(const Documentation& doc) + { + m_doc = doc; + } + + Documentation documentation() const + { + return m_doc; + } + +protected: + void assignMetaAttributes(const AbstractMetaAttributes &other); + +private: + Attributes m_attributes; + Attributes m_originalAttributes; + Documentation m_doc; +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractMetaAttributes::Attributes) + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AbstractMetaAttributes *aa); +#endif + +class AbstractMetaType +{ + Q_GADGET +public: + + enum TypeUsagePattern { + InvalidPattern, + PrimitivePattern, + FlagsPattern, + EnumPattern, + ValuePattern, + ObjectPattern, + QObjectPattern, + ValuePointerPattern, + NativePointerPattern, + NativePointerAsArrayPattern, // "int*" as "int[]" + ContainerPattern, + SmartPointerPattern, + VarargsPattern, + ArrayPattern + }; + Q_ENUM(TypeUsagePattern) + + AbstractMetaType(); + ~AbstractMetaType(); + + QString package() const; + QString name() const; + QString fullName() const; + + void setTypeUsagePattern(TypeUsagePattern pattern) + { + m_pattern = pattern; + } + TypeUsagePattern typeUsagePattern() const + { + return m_pattern; + } + + // true when use pattern is container + bool hasInstantiations() const + { + return !m_instantiations.isEmpty(); + } + + void addInstantiation(AbstractMetaType* inst, bool owner = false) + { + if (owner) + m_children << inst; + m_instantiations << inst; + } + + void setInstantiations(const AbstractMetaTypeList &insts, bool owner = false) + { + m_instantiations = insts; + if (owner) { + m_children.clear(); + m_children = insts; + } + } + + AbstractMetaTypeList instantiations() const + { + return m_instantiations; + } + + void setInstantiationInCpp(bool incpp) + { + m_cppInstantiation = incpp; + } + + QString minimalSignature() const { return formatSignature(true); } + + // returns true if the typs is used as a non complex primitive, no & or *'s + bool isPrimitive() const + { + return m_pattern == PrimitivePattern; + } + + bool isCppPrimitive() const; + + // returns true if the type is used as an enum + bool isEnum() const + { + return m_pattern == EnumPattern; + } + + // returns true if the type is used as a QObject * + bool isQObject() const + { + return m_pattern == QObjectPattern; + } + + // returns true if the type is used as an object, e.g. Xxx * + bool isObject() const + { + return m_pattern == ObjectPattern; + } + + // returns true if the type is used as an array, e.g. Xxx[42] + bool isArray() const + { + return m_pattern == ArrayPattern; + } + + // returns true if the type is used as a value type (X or const X &) + bool isValue() const + { + return m_pattern == ValuePattern; + } + + bool isValuePointer() const + { + return m_pattern == ValuePointerPattern; + } + + // returns true for more complex types... + bool isNativePointer() const + { + return m_pattern == NativePointerPattern; + } + + // return true if the type was originally a varargs + bool isVarargs() const + { + return m_pattern == VarargsPattern; + } + + // returns true if the type was used as a container + bool isContainer() const + { + return m_pattern == ContainerPattern; + } + + // returns true if the type was used as a smart pointer + bool isSmartPointer() const { return m_pattern == SmartPointerPattern; } + + // returns true if the type was used as a flag + bool isFlags() const + { + return m_pattern == FlagsPattern; + } + + bool isConstant() const + { + return m_constant; + } + void setConstant(bool constant) + { + m_constant = constant; + } + + bool isConstRef() const; + + ReferenceType referenceType() const { return m_referenceType; } + void setReferenceType(ReferenceType ref) { m_referenceType = ref; } + + int actualIndirections() const + { + return m_indirections + (m_referenceType == LValueReference ? 1 : 0); + } + int indirections() const + { + return m_indirections; + } + void setIndirections(int indirections) + { + m_indirections = indirections; + } + + void setArrayElementCount(int n) + { + m_arrayElementCount = n; + } + int arrayElementCount() const + { + return m_arrayElementCount; + } + + const AbstractMetaType *arrayElementType() const + { + return m_arrayElementType; + } + void setArrayElementType(const AbstractMetaType *t) + { + m_arrayElementType = t; + } + + AbstractMetaTypeCList nestedArrayTypes() const; + + QString cppSignature() const; + + AbstractMetaType *copy() const; + + const TypeEntry *typeEntry() const + { + return m_typeEntry; + } + void setTypeEntry(const TypeEntry *type) + { + m_typeEntry = type; + } + + void setOriginalTypeDescription(const QString &otd) + { + m_originalTypeDescription = otd; + } + QString originalTypeDescription() const + { + return m_originalTypeDescription; + } + + void setOriginalTemplateType(const AbstractMetaType *type) + { + m_originalTemplateType = type; + } + const AbstractMetaType *originalTemplateType() const + { + return m_originalTemplateType; + } + + AbstractMetaType *getSmartPointerInnerType() const + { + Q_ASSERT(isSmartPointer()); + AbstractMetaTypeList instantiations = this->instantiations(); + Q_ASSERT(!instantiations.isEmpty()); + AbstractMetaType *innerType = instantiations.at(0); + return innerType; + } + + QString getSmartPointerInnerTypeName() const + { + Q_ASSERT(isSmartPointer()); + AbstractMetaType *innerType = getSmartPointerInnerType(); + Q_ASSERT(innerType); + return innerType->name(); + } + + /// Decides and sets the proper usage patter for the current meta type. + void decideUsagePattern(); + + bool hasTemplateChildren() const; + +private: + TypeUsagePattern determineUsagePattern() const; + QString formatSignature(bool minimal) const; + + const TypeEntry *m_typeEntry = nullptr; + AbstractMetaTypeList m_instantiations; + QString m_package; + mutable QString m_name; + mutable QString m_cachedCppSignature; + QString m_originalTypeDescription; + + int m_arrayElementCount = -1; + const AbstractMetaType *m_arrayElementType = nullptr; + const AbstractMetaType *m_originalTemplateType = nullptr; + + TypeUsagePattern m_pattern = InvalidPattern; + uint m_constant : 1; + uint m_cppInstantiation : 1; + int m_indirections : 4; + uint m_reserved : 26; // unused + ReferenceType m_referenceType = NoReference; + AbstractMetaTypeList m_children; + + Q_DISABLE_COPY(AbstractMetaType) +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AbstractMetaType *at); +#endif + +class AbstractMetaVariable +{ + Q_DISABLE_COPY(AbstractMetaVariable) +public: + AbstractMetaVariable(); + + virtual ~AbstractMetaVariable(); + + AbstractMetaType *type() const + { + return m_type; + } + void setType(AbstractMetaType *type) + { + Q_ASSERT(m_type == 0); + m_type = type; + } + void replaceType(AbstractMetaType *type) + { + if (m_type) + delete m_type; + m_type = type; + } + + QString name() const + { + return m_name; + } + void setName(const QString &name, bool realName = true) + { + m_name = name; + m_hasName = realName; + } + bool hasName() const + { + return m_hasName; + } + QString originalName() const + { + return m_originalName; + } + void setOriginalName(const QString& name) + { + m_originalName = name; + } + void setDocumentation(const Documentation& doc) + { + m_doc = doc; + } + Documentation documentation() const + { + return m_doc; + } + +protected: + void assignMetaVariable(const AbstractMetaVariable &other); + +private: + QString m_originalName; + QString m_name; + AbstractMetaType *m_type = nullptr; + bool m_hasName = false; + + Documentation m_doc; +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AbstractMetaVariable *av); +#endif + +class AbstractMetaArgument : public AbstractMetaVariable +{ +public: + AbstractMetaArgument(); + + QString defaultValueExpression() const + { + return m_expression; + } + void setDefaultValueExpression(const QString &expr) + { + m_expression = expr; + } + + QString originalDefaultValueExpression() const + { + return m_originalExpression; + } + void setOriginalDefaultValueExpression(const QString &expr) + { + m_originalExpression = expr; + } + + QString toString() const + { + return type()->name() + QLatin1Char(' ') + AbstractMetaVariable::name() + + (m_expression.isEmpty() ? QString() : QLatin1String(" = ") + m_expression); + } + + int argumentIndex() const + { + return m_argumentIndex; + } + void setArgumentIndex(int argIndex) + { + m_argumentIndex = argIndex; + } + + AbstractMetaArgument *copy() const; + +protected: + void assignMetaArgument(const AbstractMetaArgument &other); + +private: + QString m_expression; + QString m_originalExpression; + int m_argumentIndex = 0; + + friend class AbstractMetaClass; +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AbstractMetaArgument *aa); +#endif + +class AbstractMetaField : public AbstractMetaVariable, public AbstractMetaAttributes +{ +public: + AbstractMetaField(); + ~AbstractMetaField(); + + const AbstractMetaClass *enclosingClass() const + { + return m_class; + } + void setEnclosingClass(const AbstractMetaClass *cls) + { + m_class = cls; + } + + const AbstractMetaFunction *getter() const; + const AbstractMetaFunction *setter() const; + + FieldModificationList modifications() const; + + bool isModifiedRemoved(int types = TypeSystem::All) const; + + using AbstractMetaVariable::setDocumentation; + using AbstractMetaVariable::documentation; + + AbstractMetaField *copy() const; + +private: + mutable AbstractMetaFunction *m_getter = nullptr; + mutable AbstractMetaFunction *m_setter = nullptr; + const AbstractMetaClass *m_class = nullptr; +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AbstractMetaField *af); +#endif + +class AbstractMetaFunction : public AbstractMetaAttributes +{ + Q_GADGET +public: + enum FunctionType { + ConstructorFunction, + CopyConstructorFunction, + MoveConstructorFunction, + AssignmentOperatorFunction, + MoveAssignmentOperatorFunction, + DestructorFunction, + NormalFunction, + SignalFunction, + EmptyFunction, + SlotFunction, + GlobalScopeFunction + }; + Q_ENUM(FunctionType) + + enum CompareResultFlag { + EqualName = 0x00000001, + EqualArguments = 0x00000002, + EqualAttributes = 0x00000004, + EqualImplementor = 0x00000008, + EqualReturnType = 0x00000010, + EqualDefaultValueOverload = 0x00000020, + EqualModifiedName = 0x00000040, + + NameLessThan = 0x00001000, + + PrettySimilar = EqualName | EqualArguments, + Equal = 0x0000001f, + NotEqual = 0x00001000 + }; + Q_DECLARE_FLAGS(CompareResult, CompareResultFlag) + Q_FLAG(CompareResultFlag) + + AbstractMetaFunction(); + ~AbstractMetaFunction(); + + QString name() const + { + return m_name; + } + + void setName(const QString &name) + { + m_name = name; + } + + QString originalName() const + { + return m_originalName.isEmpty() ? name() : m_originalName; + } + + void setOriginalName(const QString &name) + { + m_originalName = name; + } + + void setReverseOperator(bool reverse) + { + m_reverse = reverse; + } + + bool isReverseOperator() const + { + return m_reverse; + } + + /** + * Returns true if this is a operator and the "self" operand is a pointer. + * e.g. class Foo {}; operator+(SomeEnum, Foo*); + */ + bool isPointerOperator() const + { + return m_pointerOperator; + } + + void setPointerOperator(bool value) + { + m_pointerOperator = value; + } + + void setExplicit(bool isExplicit) + { + m_explicit = isExplicit; + } + /** + * Says if the function (a constructor) was declared as explicit in C++. + * \return true if the function was declared as explicit in C++ + */ + bool isExplicit() const + { + return m_explicit; + } + + static bool isConversionOperator(QString funcName); + bool isConversionOperator() const + { + return isConversionOperator(originalName()); + } + + static bool isOperatorOverload(QString funcName); + bool isOperatorOverload() const + { + return isOperatorOverload(originalName()); + } + bool isCastOperator() const; + + bool isArithmeticOperator() const; + bool isBitwiseOperator() const; + bool isComparisonOperator() const; + bool isLogicalOperator() const; + bool isSubscriptOperator() const; + bool isAssignmentOperator() const; // Assignment or move assignment + bool isOtherOperator() const; + + /** + * Informs the arity of the operator or -1 if the function is not + * an operator overload. + * /return the arity of the operator or -1 + */ + int arityOfOperator() const; + bool isUnaryOperator() const { return arityOfOperator() == 1; } + bool isBinaryOperator() const { return arityOfOperator() == 2; } + bool isInplaceOperator() const; + + bool isVirtual() const; + bool allowThread() const; + QString modifiedName() const; + + QString minimalSignature() const; + QString debugSignature() const; // including virtual/override/final, etc., for debugging only. + QStringList possibleIntrospectionCompatibleSignatures() const; + + bool isModifiedRemoved(int types = TypeSystem::All) const; + + AbstractMetaType *type() const + { + return m_type; + } + void setType(AbstractMetaType *type) + { + Q_ASSERT(m_type == 0); + m_type = type; + } + + void replaceType(AbstractMetaType *type) + { + if (m_type) + delete m_type; + m_type = type; + } + + // The class that has this function as a member. + const AbstractMetaClass *ownerClass() const + { + return m_class; + } + void setOwnerClass(const AbstractMetaClass *cls) + { + m_class = cls; + } + + // The first class in a hierarchy that declares the function + const AbstractMetaClass *declaringClass() const + { + return m_declaringClass; + } + void setDeclaringClass(const AbstractMetaClass *cls) + { + m_declaringClass = cls; + } + + // The class that actually implements this function + const AbstractMetaClass *implementingClass() const + { + return m_implementingClass; + } + void setImplementingClass(const AbstractMetaClass *cls) + { + m_implementingClass = cls; + } + + AbstractMetaArgumentList arguments() const + { + return m_arguments; + } + void setArguments(const AbstractMetaArgumentList &arguments) + { + m_arguments = arguments; + } + void addArgument(AbstractMetaArgument *argument) + { + m_arguments << argument; + } + int actualMinimumArgumentCount() const; + + bool isDeprecated() const; + bool isDestructor() const + { + return functionType() == DestructorFunction; + } + bool isConstructor() const + { + return m_functionType == ConstructorFunction || m_functionType == CopyConstructorFunction + || m_functionType == MoveConstructorFunction; + } + bool isNormal() const + { + return functionType() == NormalFunction || isSlot() || isInGlobalScope(); + } + bool isInGlobalScope() const + { + return functionType() == GlobalScopeFunction; + } + bool isSignal() const + { + return functionType() == SignalFunction; + } + bool isSlot() const + { + return functionType() == SlotFunction; + } + bool isEmptyFunction() const + { + return functionType() == EmptyFunction; + } + FunctionType functionType() const + { + return m_functionType; + } + void setFunctionType(FunctionType type) + { + m_functionType = type; + } + + bool usesRValueReferences() const; + QStringList introspectionCompatibleSignatures(const QStringList &resolvedArguments = QStringList()) const; + QString signature() const; + + bool isConstant() const + { + return m_constant; + } + void setConstant(bool constant) + { + m_constant = constant; + } + + /// Returns true if the AbstractMetaFunction was added by the user via the type system description. + bool isUserAdded() const + { + return m_userAdded; + } + void setUserAdded(bool userAdded) + { + m_userAdded = userAdded; + } + + QString toString() const + { + return m_name; + } + + CompareResult compareTo(const AbstractMetaFunction *other) const; + + bool operator <(const AbstractMetaFunction &a) const; + + AbstractMetaFunction *copy() const; + + QString replacedDefaultExpression(const AbstractMetaClass *cls, int idx) const; + bool removedDefaultExpression(const AbstractMetaClass *cls, int idx) const; + QString conversionRule(TypeSystem::Language language, int idx) const; + QVector referenceCounts(const AbstractMetaClass *cls, int idx = -2) const; + ArgumentOwner argumentOwner(const AbstractMetaClass *cls, int idx) const; + + // Returns the ownership rules for the given argument in the given context + TypeSystem::Ownership ownership(const AbstractMetaClass *cls, TypeSystem::Language language, int idx) const; + + bool isVirtualSlot() const; + + QString typeReplaced(int argument_index) const; + bool isRemovedFromAllLanguages(const AbstractMetaClass *) const; + bool isRemovedFrom(const AbstractMetaClass *, TypeSystem::Language language) const; + bool argumentRemoved(int) const; + + QString argumentReplaced(int key) const; + + /** + * Verifies if any modification to the function is an inject code. + * \return true if there is inject code modifications to the function. + */ + bool hasInjectedCode() const; + /** + * Returns a list of code snips for this function. + * The code snips can be filtered by position and language. + * \return list of code snips + */ + CodeSnipList injectedCodeSnips(TypeSystem::CodeSnipPosition position = TypeSystem::CodeSnipPositionAny, + TypeSystem::Language language = TypeSystem::All) const; + + /** + * Verifies if any modification to the function alters/removes its + * arguments types or default values. + * \return true if there is some modification to function signature + */ + bool hasSignatureModifications() const; + FunctionModificationList modifications(const AbstractMetaClass* implementor = 0) const; + + /** + * Return the argument name if there is a modification the renamed value will be returned + */ + QString argumentName(int index, bool create = true, const AbstractMetaClass *cl = 0) const; + + void setPropertySpec(QPropertySpec *spec) + { + m_propertySpec = spec; + } + + QPropertySpec *propertySpec() const + { + return m_propertySpec; + } + + FunctionTypeEntry* typeEntry() const + { + return m_typeEntry; + } + + void setTypeEntry(FunctionTypeEntry* typeEntry) + { + m_typeEntry = typeEntry; + } + + bool isCallOperator() const; + +#ifndef QT_NO_DEBUG_STREAM + void formatDebugVerbose(QDebug &d) const; +#endif + +private: + QString m_name; + QString m_originalName; + mutable QString m_cachedMinimalSignature; + mutable QString m_cachedSignature; + mutable QString m_cachedModifiedName; + + FunctionTypeEntry* m_typeEntry = nullptr; + FunctionType m_functionType = NormalFunction; + AbstractMetaType *m_type = nullptr; + const AbstractMetaClass *m_class = nullptr; + const AbstractMetaClass *m_implementingClass = nullptr; + const AbstractMetaClass *m_declaringClass = nullptr; + QPropertySpec *m_propertySpec = nullptr; + AbstractMetaArgumentList m_arguments; + uint m_constant : 1; + uint m_reverse : 1; + uint m_userAdded : 1; + uint m_explicit : 1; + uint m_pointerOperator : 1; + uint m_isCallOperator : 1; +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractMetaFunction::CompareResult) + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AbstractMetaFunction *af); +#endif + +class AbstractMetaEnumValue +{ +public: + AbstractMetaEnumValue() {} + + EnumValue value() const + { + return m_value; + } + + void setValue(EnumValue value) + { + m_value = value; + } + + QString stringValue() const + { + return m_stringValue; + } + + void setStringValue(const QString &v) + { + m_stringValue = v; + } + + QString name() const + { + return m_name; + } + + void setName(const QString &name) + { + m_name = name; + } + + void setDocumentation(const Documentation& doc) + { + m_doc = doc; + } + + Documentation documentation() const + { + return m_doc; + } + +private: + QString m_name; + QString m_stringValue; + + EnumValue m_value; + + Documentation m_doc; +}; + +class AbstractMetaEnum : public AbstractMetaAttributes +{ +public: + AbstractMetaEnum(); + ~AbstractMetaEnum(); + + AbstractMetaEnumValueList values() const + { + return m_enumValues; + } + + void addEnumValue(AbstractMetaEnumValue *enumValue) + { + m_enumValues << enumValue; + } + + AbstractMetaEnumValue *findEnumValue(const QString &value) const; + + QString name() const; + + QString qualifier() const; + + QString package() const; + + QString fullName() const + { + return package() + QLatin1Char('.') + qualifier() + QLatin1Char('.') + name(); + } + + EnumKind enumKind() const { return m_enumKind; } + void setEnumKind(EnumKind kind) { m_enumKind = kind; } + + bool isAnonymous() const { return m_enumKind == AnonymousEnum; } + + // Has the enum been declared inside a Q_ENUMS() macro in its enclosing class? + void setHasQEnumsDeclaration(bool on) + { + m_hasQenumsDeclaration = on; + } + + bool hasQEnumsDeclaration() const + { + return m_hasQenumsDeclaration; + } + + EnumTypeEntry *typeEntry() const + { + return m_typeEntry; + } + + void setTypeEntry(EnumTypeEntry *entry) + { + m_typeEntry = entry; + } + + AbstractMetaClass *enclosingClass() const + { + return m_class; + } + + void setEnclosingClass(AbstractMetaClass *c) + { + m_class = c; + } + + bool isSigned() const { return m_signed; } + void setSigned(bool s) { m_signed = s; } + +private: + AbstractMetaEnumValueList m_enumValues; + EnumTypeEntry *m_typeEntry = nullptr; + AbstractMetaClass *m_class = nullptr; + + EnumKind m_enumKind = CEnum; + uint m_hasQenumsDeclaration : 1; + uint m_signed : 1; +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AbstractMetaEnum *ae); +#endif + +class AbstractMetaClass : public AbstractMetaAttributes +{ + Q_GADGET +public: + enum FunctionQueryOption { + Constructors = 0x0000001, // Only constructors + //Destructors = 0x0000002, // Only destructors. Not included in class. + FinalInTargetLangFunctions = 0x0000008, // Only functions that are non-virtual in TargetLang + ClassImplements = 0x0000020, // Only functions implemented by the current class + StaticFunctions = 0x0000080, // Only static functions + Signals = 0x0000100, // Only signals + NormalFunctions = 0x0000200, // Only functions that aren't signals + Visible = 0x0000400, // Only public and protected functions + WasPublic = 0x0001000, // Only functions that were originally public + NonStaticFunctions = 0x0004000, // No static functions + Empty = 0x0008000, // Empty overrides of abstract functions + Invisible = 0x0010000, // Only private functions + VirtualInCppFunctions = 0x0020000, // Only functions that are virtual in C++ + VirtualInTargetLangFunctions = 0x0080000, // Only functions which are virtual in TargetLang + NotRemovedFromTargetLang = 0x0400000, // Only functions that have not been removed from TargetLang + OperatorOverloads = 0x2000000 // Only functions that are operator overloads + }; + Q_DECLARE_FLAGS(FunctionQueryOptions, FunctionQueryOption) + Q_FLAG(FunctionQueryOption) + + enum OperatorQueryOption { + ArithmeticOp = 0x01, // Arithmetic: +, -, *, /, %, +=, -=, *=, /=, %=, ++, --, unary+, unary- + BitwiseOp = 0x02, // Bitwise: <<, <<=, >>, >>=, ~, &, &=, |, |=, ^, ^= + ComparisonOp = 0x04, // Comparison: <, <=, >, >=, !=, == + LogicalOp = 0x08, // Logical: !, &&, || + ConversionOp = 0x10, // Conversion: operator [const] TYPE() + SubscriptionOp = 0x20, // Subscription: [] + AssignmentOp = 0x40, // Assignment: = + OtherOp = 0x80, // The remaining operators: call(), etc + AllOperators = ArithmeticOp | BitwiseOp | ComparisonOp + | LogicalOp | ConversionOp | SubscriptionOp + | AssignmentOp | OtherOp + }; + Q_DECLARE_FLAGS(OperatorQueryOptions, OperatorQueryOption) + Q_FLAG(OperatorQueryOption) + + AbstractMetaClass(); + ~AbstractMetaClass(); + + AbstractMetaClass *extractInterface(); + void fixFunctions(); + + AbstractMetaFunctionList functions() const + { + return m_functions; + } + + void setFunctions(const AbstractMetaFunctionList &functions); + void addFunction(AbstractMetaFunction *function); + bool hasFunction(const AbstractMetaFunction *f) const; + bool hasFunction(const QString &str) const; + const AbstractMetaFunction* findFunction(const QString& functionName) const; + bool hasSignal(const AbstractMetaFunction *f) const; + + bool hasConstructors() const; + bool hasCopyConstructor() const; + bool hasPrivateCopyConstructor() const; + + void addDefaultConstructor(); + void addDefaultCopyConstructor(bool isPrivate = false); + + bool hasNonPrivateConstructor() const + { + return m_hasNonPrivateConstructor; + } + + void setHasNonPrivateConstructor(bool value) + { + m_hasNonPrivateConstructor = value; + } + + bool hasPrivateConstructor() const + { + return m_hasPrivateConstructor; + } + + void setHasPrivateConstructor(bool value) + { + m_hasPrivateConstructor = value; + } + + bool hasPrivateDestructor() const + { + return m_hasPrivateDestructor; + } + + void setHasPrivateDestructor(bool value) + { + m_hasPrivateDestructor = value; + } + + bool hasProtectedDestructor() const + { + return m_hasProtectedDestructor; + } + + void setHasProtectedDestructor(bool value) + { + m_hasProtectedDestructor = value; + } + + bool hasVirtualDestructor() const + { + return m_hasVirtualDestructor; + } + + void setHasVirtualDestructor(bool value) + { + m_hasVirtualDestructor = value; + } + + bool isConstructible() const + { + return (hasNonPrivateConstructor() || !hasPrivateConstructor()) && !hasPrivateDestructor(); + } + + AbstractMetaFunctionList queryFunctionsByName(const QString &name) const; + AbstractMetaFunctionList queryFunctions(FunctionQueryOptions query) const; + AbstractMetaFunctionList functionsInTargetLang() const; + inline AbstractMetaFunctionList cppSignalFunctions() const; + AbstractMetaFunctionList implicitConversions() const; + + /** + * Retrieves all class' operator overloads that meet + * query criteria defined with the OperatorQueryOption + * enum. + * /param query composition of OperatorQueryOption enum values + * /return list of operator overload methods that meet the + * query criteria + */ + AbstractMetaFunctionList operatorOverloads(OperatorQueryOptions query = AllOperators) const; + + bool hasArithmeticOperatorOverload() const; + bool hasBitwiseOperatorOverload() const; + bool hasComparisonOperatorOverload() const; + bool hasLogicalOperatorOverload() const; + + AbstractMetaFieldList fields() const + { + return m_fields; + } + + void setFields(const AbstractMetaFieldList &fields) + { + m_fields = fields; + } + + void addField(AbstractMetaField *field) + { + m_fields << field; + } + + AbstractMetaEnumList enums() const + { + return m_enums; + } + void setEnums(const AbstractMetaEnumList &enums) + { + m_enums = enums; + } + + void addEnum(AbstractMetaEnum *e) + { + m_enums << e; + } + + AbstractMetaEnum *findEnum(const QString &enumName); + AbstractMetaEnumValue *findEnumValue(const QString &enumName); + + AbstractMetaClassList interfaces() const + { + return m_interfaces; + } + void addInterface(AbstractMetaClass *interface); + void setInterfaces(const AbstractMetaClassList &interface); + + QString fullName() const + { + return package() + QLatin1Char('.') + name(); + } + + /** + * Retrieves the class name without any namespace/scope information. + * /return the class name without scope information + */ + QString name() const; + + QString baseClassName() const + { + return m_baseClass ? m_baseClass->name() : QString(); + } + + AbstractMetaClass *baseClass() const + { + return m_baseClass; + } + + void setBaseClass(AbstractMetaClass *base_class); + + const AbstractMetaClass *enclosingClass() const + { + return m_enclosingClass; + } + + void setEnclosingClass(AbstractMetaClass *cl) + { + m_enclosingClass = cl; + } + + const AbstractMetaClassList& innerClasses() const + { + return m_innerClasses; + } + + void addInnerClass(AbstractMetaClass* cl) + { + m_innerClasses << cl; + } + + void setInnerClasses(AbstractMetaClassList innerClasses) + { + m_innerClasses = innerClasses; + } + + QString package() const; + + bool isInterface() const; + + bool isNamespace() const; + + bool isQObject() const; + + bool isQtNamespace() const + { + return isNamespace() && name() == QLatin1String("Qt"); + } + + QString qualifiedCppName() const; + + bool hasSignals() const; + bool inheritsFrom(const AbstractMetaClass *other) const; + + void setForceShellClass(bool on) + { + m_forceShellClass = on; + } + + bool hasVirtualSlots() const + { + return m_hasVirtualSlots; + } + + /** + * Says if the class that declares or inherits a virtual function. + * \return true if the class implements or inherits any virtual methods + */ + bool isPolymorphic() const + { + return m_isPolymorphic; + } + + /** + * Tells if this class has one or more functions that are protected. + * \return true if the class has protected functions. + */ + bool hasProtectedFunctions() const; + + /** + * Tells if this class has one or more fields (member variables) that are protected. + * \return true if the class has protected fields. + */ + bool hasProtectedFields() const; + + /** + * Tells if this class has one or more members (functions or fields) that are protected. + * \return true if the class has protected members. + */ + bool hasProtectedMembers() const; + + + QVector templateArguments() const + { + return m_templateArgs; + } + + void setTemplateArguments(const QVector &args) + { + m_templateArgs = args; + } + + bool hasFieldAccessors() const; + + // only valid during metabuilder's run + QStringList baseClassNames() const + { + return m_baseClassNames; + } + + void setBaseClassNames(const QStringList &names) + { + m_baseClassNames = names; + } + + const ComplexTypeEntry *typeEntry() const + { + return m_typeEntry; + } + + ComplexTypeEntry *typeEntry() + { + return m_typeEntry; + } + + void setTypeEntry(ComplexTypeEntry *type) + { + m_typeEntry = type; + } + + void setHasHashFunction(bool on) + { + m_hasHashFunction = on; + } + + bool hasHashFunction() const + { + return m_hasHashFunction; + } + virtual bool hasDefaultToStringFunction() const; + + void setHasEqualsOperator(bool on) + { + m_hasEqualsOperator = on; + } + + bool hasEqualsOperator() const + { + return m_hasEqualsOperator; + } + + void setHasCloneOperator(bool on) + { + m_hasCloneOperator = on; + } + + bool hasCloneOperator() const + { + return m_hasCloneOperator; + } + + void addPropertySpec(QPropertySpec *spec) + { + m_propertySpecs << spec; + } + + QVector propertySpecs() const + { + return m_propertySpecs; + } + + QPropertySpec *propertySpecForRead(const QString &name) const; + QPropertySpec *propertySpecForWrite(const QString &name) const; + QPropertySpec *propertySpecForReset(const QString &name) const; + + /// Returns a list of conversion operators for this class. The conversion operators are defined in other classes of the same module. + AbstractMetaFunctionList externalConversionOperators() const + { + return m_externalConversionOperators; + } + /// Adds a converter operator for this class. + void addExternalConversionOperator(AbstractMetaFunction* conversionOp) + { + if (!m_externalConversionOperators.contains(conversionOp)) + m_externalConversionOperators.append(conversionOp); + } + /// Returns true if this class has any converter operators defined elsewhere. + bool hasExternalConversionOperators() const + { + return !m_externalConversionOperators.isEmpty(); + } + + void sortFunctions(); + + const AbstractMetaClass *templateBaseClass() const + { + return m_templateBaseClass; + } + + void setTemplateBaseClass(const AbstractMetaClass *cls) + { + m_templateBaseClass = cls; + } + + bool hasTemplateBaseClassInstantiations() const; + AbstractMetaTypeList templateBaseClassInstantiations() const; + void setTemplateBaseClassInstantiations(AbstractMetaTypeList& instantiations); + + void setTypeDef(bool typeDef) { m_isTypeDef = typeDef; } + bool isTypeDef() const { return m_isTypeDef; } + + void setStream(bool stream) + { + m_stream = stream; + } + + bool isStream() const + { + return m_stream; + } + + void setToStringCapability(bool value) + { + m_hasToStringCapability = value; + } + + bool hasToStringCapability() const + { + return m_hasToStringCapability; + } + + static AbstractMetaClass *findClass(const AbstractMetaClassList &classes, + const QString &name); + static AbstractMetaClass *findClass(const AbstractMetaClassList &classes, + const TypeEntry* typeEntry); + static AbstractMetaEnumValue *findEnumValue(const AbstractMetaClassList &classes, + const QString &string); + static AbstractMetaEnum *findEnum(const AbstractMetaClassList &classes, + const EnumTypeEntry *entry); + +private: +#ifndef QT_NO_DEBUG_STREAM + friend QDebug operator<<(QDebug d, const AbstractMetaClass *ac); +#endif + uint m_hasVirtuals : 1; + uint m_isPolymorphic : 1; + uint m_hasNonpublic : 1; + uint m_hasVirtualSlots : 1; + uint m_hasNonPrivateConstructor : 1; + uint m_hasPrivateConstructor : 1; + uint m_functionsFixed : 1; + uint m_hasPrivateDestructor : 1; + uint m_hasProtectedDestructor : 1; + uint m_hasVirtualDestructor : 1; + uint m_forceShellClass : 1; + uint m_hasHashFunction : 1; + uint m_hasEqualsOperator : 1; + uint m_hasCloneOperator : 1; + uint m_isTypeDef : 1; + uint m_hasToStringCapability : 1; + + const AbstractMetaClass *m_enclosingClass = nullptr; + AbstractMetaClass *m_baseClass = nullptr; + const AbstractMetaClass *m_templateBaseClass = nullptr; + AbstractMetaFunctionList m_functions; + AbstractMetaFieldList m_fields; + AbstractMetaEnumList m_enums; + AbstractMetaClassList m_interfaces; + AbstractMetaClass *m_extractedInterface = nullptr; + QVector m_propertySpecs; + AbstractMetaClassList m_innerClasses; + + AbstractMetaFunctionList m_externalConversionOperators; + + QStringList m_baseClassNames; + QVector m_templateArgs; + ComplexTypeEntry *m_typeEntry = nullptr; +// FunctionModelItem m_qDebugStreamFunction; + + bool m_stream = false; +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractMetaClass::FunctionQueryOptions) +Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractMetaClass::OperatorQueryOptions) + +class QPropertySpec +{ +public: + explicit QPropertySpec(const TypeEntry *type) : m_type(type) {} + + const TypeEntry *type() const + { + return m_type; + } + + QString name() const + { + return m_name; + } + + void setName(const QString &name) + { + m_name = name; + } + + QString read() const + { + return m_read; + } + + void setRead(const QString &read) + { + m_read = read; + } + + QString write() const + { + return m_write; + } + + void setWrite(const QString &write) + { + m_write = write; + } + + QString designable() const + { + return m_designable; + } + + void setDesignable(const QString &designable) + { + m_designable = designable; + } + + QString reset() const + { + return m_reset; + } + + void setReset(const QString &reset) + { + m_reset = reset; + } + + int index() const + { + return m_index; + } + + void setIndex(int index) + { + m_index = index; + } + +private: + QString m_name; + QString m_read; + QString m_write; + QString m_designable; + QString m_reset; + const TypeEntry *m_type; + int m_index = -1; +}; + +inline AbstractMetaFunctionList AbstractMetaClass::cppSignalFunctions() const +{ + return queryFunctions(Signals + | Visible + | NotRemovedFromTargetLang); +} + +#endif // ABSTRACTMETALANG_H diff --git a/sources/shiboken2/ApiExtractor/abstractmetalang_typedefs.h b/sources/shiboken2/ApiExtractor/abstractmetalang_typedefs.h new file mode 100644 index 0000000..9ff11d4 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/abstractmetalang_typedefs.h @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ABSTRACTMETALANG_TYPEDEFS_H +#define ABSTRACTMETALANG_TYPEDEFS_H + +#include + +class AbstractMetaClass; +class AbstractMetaField; +class AbstractMetaArgument; +class AbstractMetaEnum; +class AbstractMetaEnumValue; +class AbstractMetaFunction; +class AbstractMetaType; + +typedef QVector AbstractMetaArgumentList; +typedef QVector AbstractMetaClassList; +typedef QVector AbstractMetaEnumList; +typedef QVector AbstractMetaEnumValueList; +typedef QVector AbstractMetaFieldList; +typedef QVector AbstractMetaFunctionList; +typedef QVector AbstractMetaTypeList; +typedef QVector AbstractMetaTypeCList; + +#endif // ABSTRACTMETALANG_TYPEDEFS_H diff --git a/sources/shiboken2/ApiExtractor/apiextractor.cpp b/sources/shiboken2/ApiExtractor/apiextractor.cpp new file mode 100644 index 0000000..171011c --- /dev/null +++ b/sources/shiboken2/ApiExtractor/apiextractor.cpp @@ -0,0 +1,307 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "apiextractor.h" +#include "abstractmetalang.h" + +#include +#include +#include +#include +#include +#include + +#include "reporthandler.h" +#include "typesystem.h" +#include "fileout.h" +#include "abstractmetabuilder.h" +#include "typedatabase.h" +#include "typesystem.h" + +ApiExtractor::ApiExtractor() : m_builder(0) +{ + // Environment TYPESYSTEMPATH + QString envTypesystemPaths = QFile::decodeName(qgetenv("TYPESYSTEMPATH")); + if (!envTypesystemPaths.isEmpty()) + TypeDatabase::instance()->addTypesystemPath(envTypesystemPaths); +} + +ApiExtractor::~ApiExtractor() +{ + delete m_builder; +} + +void ApiExtractor::addTypesystemSearchPath (const QString& path) +{ + TypeDatabase::instance()->addTypesystemPath(path); +} + +void ApiExtractor::addTypesystemSearchPath(const QStringList& paths) +{ + for (const QString &path : paths) + addTypesystemSearchPath(path); +} + +void ApiExtractor::addIncludePath(const HeaderPath& path) +{ + m_includePaths << path; +} + +void ApiExtractor::addIncludePath(const HeaderPaths& paths) +{ + m_includePaths << paths; +} + +void ApiExtractor::setLogDirectory(const QString& logDir) +{ + m_logDirectory = logDir; +} + +void ApiExtractor::setCppFileName(const QString& cppFileName) +{ + m_cppFileName = cppFileName; +} + +void ApiExtractor::setTypeSystem(const QString& typeSystemFileName) +{ + m_typeSystemFileName = typeSystemFileName; +} + +void ApiExtractor::setDebugLevel(ReportHandler::DebugLevel debugLevel) +{ + ReportHandler::setDebugLevel(debugLevel); +} + +void ApiExtractor::setSuppressWarnings ( bool value ) +{ + TypeDatabase::instance()->setSuppressWarnings(value); +} + +void ApiExtractor::setSilent ( bool value ) +{ + ReportHandler::setSilent(value); +} + +bool ApiExtractor::setApiVersion(const QString& package, const QString &version) +{ + return TypeDatabase::instance()->setApiVersion(package, version); +} + +void ApiExtractor::setDropTypeEntries(QString dropEntries) +{ + dropEntries.remove(QLatin1Char(' ')); + QStringList entries = dropEntries.split(QLatin1Char(';')); + TypeDatabase::instance()->setDropTypeEntries(entries); +} + +AbstractMetaEnumList ApiExtractor::globalEnums() const +{ + Q_ASSERT(m_builder); + return m_builder->globalEnums(); +} + +AbstractMetaFunctionList ApiExtractor::globalFunctions() const +{ + Q_ASSERT(m_builder); + return m_builder->globalFunctions(); +} + +AbstractMetaClassList ApiExtractor::classes() const +{ + Q_ASSERT(m_builder); + return m_builder->classes(); +} + +AbstractMetaClassList ApiExtractor::smartPointers() const +{ + Q_ASSERT(m_builder); + return m_builder->smartPointers(); +} + +AbstractMetaClassList ApiExtractor::classesTopologicalSorted(const Dependencies &additionalDependencies) const +{ + Q_ASSERT(m_builder); + return m_builder->classesTopologicalSorted(Q_NULLPTR, additionalDependencies); +} + +PrimitiveTypeEntryList ApiExtractor::primitiveTypes() const +{ + return TypeDatabase::instance()->primitiveTypes(); +} + +ContainerTypeEntryList ApiExtractor::containerTypes() const +{ + return TypeDatabase::instance()->containerTypes(); +} + +static const AbstractMetaEnum* findEnumOnClasses(AbstractMetaClassList metaClasses, const EnumTypeEntry* typeEntry) +{ + const AbstractMetaEnum* result = 0; + for (const AbstractMetaClass* metaClass : qAsConst(metaClasses)) { + const AbstractMetaEnumList &enums = metaClass->enums(); + for (const AbstractMetaEnum *metaEnum : enums) { + if (metaEnum->typeEntry() == typeEntry) { + result = metaEnum; + break; + } + } + if (result) + break; + result = findEnumOnClasses(metaClass->innerClasses(), typeEntry); + } + return result; +} + +const AbstractMetaEnum* ApiExtractor::findAbstractMetaEnum(const EnumTypeEntry* typeEntry) const +{ + if (!typeEntry) + return 0; + const AbstractMetaEnumList &globalEnums = m_builder->globalEnums(); + for (AbstractMetaEnum* metaEnum : globalEnums) { + if (metaEnum->typeEntry() == typeEntry) + return metaEnum; + } + return findEnumOnClasses(m_builder->classes(), typeEntry); +} + +const AbstractMetaEnum* ApiExtractor::findAbstractMetaEnum(const TypeEntry* typeEntry) const +{ + if (!typeEntry) + return 0; + if (typeEntry->isFlags()) + return findAbstractMetaEnum(reinterpret_cast(typeEntry)); + if (typeEntry->isEnum()) + return findAbstractMetaEnum(reinterpret_cast(typeEntry)); + return 0; +} + +const AbstractMetaEnum* ApiExtractor::findAbstractMetaEnum(const FlagsTypeEntry* typeEntry) const +{ + if (!typeEntry) + return 0; + return findAbstractMetaEnum(typeEntry->originator()); +} + +const AbstractMetaEnum* ApiExtractor::findAbstractMetaEnum(const AbstractMetaType* metaType) const +{ + if (!metaType) + return 0; + return findAbstractMetaEnum(metaType->typeEntry()); +} + +int ApiExtractor::classCount() const +{ + Q_ASSERT(m_builder); + return m_builder->classes().count(); +} + +bool ApiExtractor::run() +{ + if (m_builder) + return false; + + if (!TypeDatabase::instance()->parseFile(m_typeSystemFileName)) { + std::cerr << "Cannot parse file: " << qPrintable(m_typeSystemFileName); + return false; + } + + const QString pattern = QDir::tempPath() + QLatin1Char('/') + + QFileInfo(m_cppFileName).baseName() + QStringLiteral("_XXXXXX.hpp"); + QTemporaryFile ppFile(pattern); + bool autoRemove = !qEnvironmentVariableIsSet("KEEP_TEMP_FILES"); + // make sure that a tempfile can be written + if (!ppFile.open()) { + std::cerr << "could not create tempfile " << qPrintable(pattern) + << ": " << qPrintable(ppFile.errorString()) << '\n'; + return false; + } + ppFile.write("#include \""); + ppFile.write(m_cppFileName.toLocal8Bit()); + ppFile.write("\"\n"); + const QString preprocessedCppFileName = ppFile.fileName(); + ppFile.close(); + m_builder = new AbstractMetaBuilder; + m_builder->setLogDirectory(m_logDirectory); + m_builder->setGlobalHeader(m_cppFileName); + QByteArrayList arguments; + arguments.reserve(m_includePaths.size() + 1); + for (const HeaderPath &headerPath : qAsConst(m_includePaths)) + arguments.append(HeaderPath::includeOption(headerPath)); + arguments.append(QFile::encodeName(preprocessedCppFileName)); + qCDebug(lcShiboken) << __FUNCTION__ << arguments + << "level=" << int(m_languageLevel); + const bool result = m_builder->build(arguments, m_languageLevel); + if (!result) + autoRemove = false; + if (!autoRemove) { + ppFile.setAutoRemove(false); + std::cerr << "Keeping temporary file: " << qPrintable(QDir::toNativeSeparators(preprocessedCppFileName)) << '\n'; + } + return result; +} + +LanguageLevel ApiExtractor::languageLevel() const +{ + return m_languageLevel; +} + +void ApiExtractor::setLanguageLevel(const LanguageLevel languageLevel) +{ + m_languageLevel = languageLevel; +} + +#ifndef QT_NO_DEBUG_STREAM +template +static void debugFormatSequence(QDebug &d, const char *key, const Container& c) +{ + typedef typename Container::const_iterator ConstIt; + if (c.isEmpty()) + return; + const ConstIt begin = c.begin(); + const ConstIt end = c.end(); + d << "\n " << key << '[' << c.size() << "]=("; + for (ConstIt it = begin; it != end; ++it) { + if (it != begin) + d << ", "; + d << *it; + } + d << ')'; +} + +QDebug operator<<(QDebug d, const ApiExtractor &ae) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "ApiExtractor(typeSystem=\"" << ae.typeSystem() << "\", cppFileName=\"" + << ae.cppFileName() << ", "; + ae.m_builder->formatDebug(d); + d << ')'; + return d; +} +#endif // QT_NO_DEBUG_STREAM diff --git a/sources/shiboken2/ApiExtractor/apiextractor.h b/sources/shiboken2/ApiExtractor/apiextractor.h new file mode 100644 index 0000000..674e5a7 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/apiextractor.h @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef APIEXTRACTOR_H +#define APIEXTRACTOR_H + +#include "reporthandler.h" +#include "dependency.h" +#include "abstractmetalang_typedefs.h" +#include "apiextractormacros.h" +#include "header_paths.h" +#include "typedatabase_typedefs.h" +#include "typesystem_typedefs.h" +#include "clangparser/compilersupport.h" +#include + +class AbstractMetaBuilder; +class AbstractMetaClass; +class AbstractMetaEnum; +class AbstractMetaFunction; +class AbstractMetaType; +class ContainerTypeEntry; +class EnumTypeEntry; +class FlagsTypeEntry; +class PrimitiveTypeEntry; +class TypeEntry; + +QT_BEGIN_NAMESPACE +class QDebug; +class QIODevice; +QT_END_NAMESPACE + +class ApiExtractor +{ +public: + ApiExtractor(); + ~ApiExtractor(); + + void setTypeSystem(const QString& typeSystemFileName); + QString typeSystem() const { return m_typeSystemFileName; } + void setCppFileName(const QString& cppFileName); + QString cppFileName() const { return m_cppFileName; } + void setDebugLevel(ReportHandler::DebugLevel debugLevel); + void setSuppressWarnings(bool value); + void setSilent(bool value); + void addTypesystemSearchPath(const QString& path); + void addTypesystemSearchPath(const QStringList& paths); + void addIncludePath(const HeaderPath& path); + void addIncludePath(const HeaderPaths& paths); + HeaderPaths includePaths() const { return m_includePaths; } + void setLogDirectory(const QString& logDir); + bool setApiVersion(const QString& package, const QString& version); + void setDropTypeEntries(QString dropEntries); + LanguageLevel languageLevel() const; + void setLanguageLevel(const LanguageLevel languageLevel); + + AbstractMetaEnumList globalEnums() const; + AbstractMetaFunctionList globalFunctions() const; + AbstractMetaClassList classes() const; + AbstractMetaClassList smartPointers() const; + AbstractMetaClassList classesTopologicalSorted(const Dependencies &additionalDependencies = Dependencies()) const; + PrimitiveTypeEntryList primitiveTypes() const; + ContainerTypeEntryList containerTypes() const; + + const AbstractMetaEnum* findAbstractMetaEnum(const EnumTypeEntry* typeEntry) const; + const AbstractMetaEnum* findAbstractMetaEnum(const TypeEntry* typeEntry) const; + const AbstractMetaEnum* findAbstractMetaEnum(const FlagsTypeEntry* typeEntry) const; + const AbstractMetaEnum* findAbstractMetaEnum(const AbstractMetaType* metaType) const; + + int classCount() const; + + bool run(); +private: + QString m_typeSystemFileName; + QString m_cppFileName; + HeaderPaths m_includePaths; + AbstractMetaBuilder* m_builder; + QString m_logDirectory; + LanguageLevel m_languageLevel = LanguageLevel::Default; + + // disable copy + ApiExtractor(const ApiExtractor&); + ApiExtractor& operator=(const ApiExtractor&); +#ifndef QT_NO_DEBUG_STREAM + friend QDebug operator<<(QDebug d, const ApiExtractor &ae); +#endif +}; + +#endif // APIEXTRACTOR_H diff --git a/sources/shiboken2/ApiExtractor/apiextractormacros.h b/sources/shiboken2/ApiExtractor/apiextractormacros.h new file mode 100644 index 0000000..026cd5a --- /dev/null +++ b/sources/shiboken2/ApiExtractor/apiextractormacros.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef APIEXTRACTORMACROS_H +#define APIEXTRACTORMACROS_H + + +// APIEXTRACTOR_API is used for the public API symbols. +#if defined _WIN32 + #define APIEXTRACTOR_DEPRECATED(func) __declspec(deprecated) func +#elif __GNUC__ >= 4 + #define APIEXTRACTOR_DEPRECATED(func) func __attribute__ ((deprecated)) +#else + #define APIEXTRACTOR_DEPRECATED(func) func +#endif +#endif diff --git a/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp b/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp new file mode 100644 index 0000000..af7f960 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp @@ -0,0 +1,958 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "clangbuilder.h" +#include "compilersupport.h" +#include "clangutils.h" + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#if QT_VERSION < 0x050800 +# define Q_FALLTHROUGH() (void)0 +#endif + +namespace clang { + +static inline QString colonColon() { return QStringLiteral("::"); } +static inline QString templateBrackets() { return QStringLiteral("<>"); } + +static inline bool isClassCursor(const CXCursor &c) +{ + return c.kind == CXCursor_ClassDecl || c.kind == CXCursor_StructDecl + || c.kind == CXCursor_ClassTemplate + || c.kind == CXCursor_ClassTemplatePartialSpecialization; +} + +static inline bool withinClassDeclaration(const CXCursor &cursor) +{ + return isClassCursor(clang_getCursorLexicalParent(cursor)); +} + +static QString fixTypeName(QString t) +{ + // Fix "Foo &" -> "Foo&", similarly "Bar **" -> "Bar**" + int pos = t.size() - 1; + for (; pos >= 0 && (t.at(pos) == QLatin1Char('&') || t.at(pos) == QLatin1Char('*')); --pos) {} + if (pos > 0 && t.at(pos) == QLatin1Char(' ')) + t.remove(pos, 1); + return t; +} + +// Insert template parameter to class name: "Foo<>" -> "Foo" -> "Foo" +// This needs to be done immediately when template parameters are encountered since +// the class name "Foo" is the scope for nested items. +static bool insertTemplateParameterIntoClassName(const QString &parmName, QString *name) +{ + if (Q_UNLIKELY(!name->endsWith(QLatin1Char('>')))) + return false; + const bool needsComma = name->at(name->size() - 2) != QLatin1Char('<'); + const int insertionPos = name->size() - 1; + name->insert(insertionPos, parmName); + if (needsComma) + name->insert(insertionPos, QLatin1Char(',')); + return true; +} + +static inline bool insertTemplateParameterIntoClassName(const QString &parmName, + const ClassModelItem &item) +{ + QString name = item->name(); + const bool result = insertTemplateParameterIntoClassName(parmName, &name); + item->setName(name); + return result; +} + +static inline CodeModel::AccessPolicy accessPolicy(CX_CXXAccessSpecifier access) +{ + CodeModel::AccessPolicy result = CodeModel::Public; + switch (access) { + case CX_CXXProtected: + result = CodeModel::Protected; + break; + case CX_CXXPrivate: + result = CodeModel::Private; + break; + default: + break; + } + return result; +} + +static void setFileName(const CXCursor &cursor, _CodeModelItem *item) +{ + const SourceRange range = getCursorRange(cursor); + if (!range.first.file.isEmpty()) { // Has been observed to be 0 for invalid locations + item->setFileName(QDir::cleanPath(range.first.file)); + item->setStartPosition(int(range.first.line), int(range.first.column)); + item->setEndPosition(int(range.second.line), int(range.second.column)); + } +} + +static bool isSigned(CXTypeKind kind) +{ + switch (kind) { + case CXType_UChar: + case CXType_Char16: + case CXType_Char32: + case CXType_UShort: + case CXType_UInt: + case CXType_ULong: + case CXType_ULongLong: + case CXType_UInt128: + return false; + default: + break; + } + return true; +} + +class BuilderPrivate { +public: + typedef QHash CursorClassHash; + typedef QHash CursorTypedefHash; + + explicit BuilderPrivate(BaseVisitor *bv) : m_baseVisitor(bv), m_model(new CodeModel) + { + m_scopeStack.push(NamespaceModelItem(new _FileModelItem(m_model))); + } + + // Determine scope from top item. Note that the scope list does not necessarily + // match the scope stack in case of forward-declared inner classes whose definition + // appears in the translation unit while the scope is the outer class. + void updateScope() + { + if (m_scopeStack.size() <= 1) + m_scope.clear(); + else + m_scope = m_scopeStack.back()->scope() << m_scopeStack.back()->name(); + } + + void pushScope(const ScopeModelItem &i) + { + m_scopeStack.push(i); + updateScope(); + } + + void popScope() + { + m_scopeStack.pop(); + updateScope(); + } + + bool addClass(const CXCursor &cursor, CodeModel::ClassType t); + FunctionModelItem createFunction(const CXCursor &cursor, + CodeModel::FunctionType t = CodeModel::Normal) const; + FunctionModelItem createMemberFunction(const CXCursor &cursor) const; + void qualifyConstructor(const CXCursor &cursor); + TypeInfo createTypeInfo(const CXType &type) const; + TypeInfo createTypeInfo(const CXCursor &cursor) const + { return createTypeInfo(clang_getCursorType(cursor)); } + + TemplateParameterModelItem createTemplateParameter(const CXCursor &cursor) const; + TemplateParameterModelItem createNonTypeTemplateParameter(const CXCursor &cursor) const; + void addField(const CXCursor &cursor); + + QString cursorValueExpression(BaseVisitor *bv, const CXCursor &cursor) const; + void addBaseClass(const CXCursor &cursor); + + template + void qualifyTypeDef(const CXCursor &typeRefCursor, const QSharedPointer &item) const; + + BaseVisitor *m_baseVisitor; + CodeModel *m_model; + + QStack m_scopeStack; + QStringList m_scope; + // Store all classes by cursor so that base classes can be found and inner + // classes can be correctly parented in case of forward-declared inner classes + // (QMetaObject::Connection) + CursorClassHash m_cursorClassHash; + CursorTypedefHash m_cursorTypedefHash; + + ClassModelItem m_currentClass; + EnumModelItem m_currentEnum; + FunctionModelItem m_currentFunction; + ArgumentModelItem m_currentArgument; + VariableModelItem m_currentField; + + int m_anonymousEnumCount = 0; + CodeModel::FunctionType m_currentFunctionType = CodeModel::Normal; +}; + +bool BuilderPrivate::addClass(const CXCursor &cursor, CodeModel::ClassType t) +{ + QString className = getCursorSpelling(cursor); + m_currentClass.reset(new _ClassModelItem(m_model, className)); + setFileName(cursor, m_currentClass.data()); + m_currentClass->setClassType(t); + // Some inner class? Note that it does not need to be (lexically) contained in a + // class since it is possible to forward declare an inner class: + // class QMetaObject { class Connection; } + // class QMetaObject::Connection {} + const CXCursor semPar = clang_getCursorSemanticParent(cursor); + if (isClassCursor(semPar)) { + const CursorClassHash::const_iterator it = m_cursorClassHash.constFind(semPar); + if (it == m_cursorClassHash.constEnd()) { + const QString message = QStringLiteral("Unable to find parent of inner class ") + className; + const Diagnostic d(message, cursor, CXDiagnostic_Error); + qWarning() << d; + m_baseVisitor->appendDiagnostic(d); + return false; + } + const ClassModelItem &containingClass = it.value(); + containingClass->addClass(m_currentClass); + m_currentClass->setScope(containingClass->scope() << containingClass->name()); + } else { + m_currentClass->setScope(m_scope); + m_scopeStack.back()->addClass(m_currentClass); + } + pushScope(m_currentClass); + m_cursorClassHash.insert(cursor, m_currentClass); + return true; +} + +FunctionModelItem BuilderPrivate::createFunction(const CXCursor &cursor, + CodeModel::FunctionType t) const +{ + QString name = getCursorSpelling(cursor); + // Apply type fixes to "operator X &" -> "operator X&" + if (name.startsWith(QLatin1String("operator "))) + name = fixTypeName(name); + FunctionModelItem result(new _FunctionModelItem(m_model, name)); + setFileName(cursor, result.data()); + result->setType(createTypeInfo(clang_getCursorResultType(cursor))); + result->setFunctionType(t); + result->setScope(m_scope); + result->setStatic(clang_Cursor_getStorageClass(cursor) == CX_SC_Static); + switch (clang_getCursorAvailability(cursor)) { + case CXAvailability_Available: + break; + case CXAvailability_Deprecated: + result->setDeprecated(true); + break; + case CXAvailability_NotAvailable: // "Foo(const Foo&) = delete;" + result->setDeleted(true); + break; + case CXAvailability_NotAccessible: + break; + } + return result; +} + +static inline CodeModel::FunctionType functionTypeFromCursor(const CXCursor &cursor) +{ + CodeModel::FunctionType result = CodeModel::Normal; + switch (cursor.kind) { + case CXCursor_Constructor: + if (clang_CXXConstructor_isCopyConstructor(cursor) != 0) + result = CodeModel::CopyConstructor; + else if (clang_CXXConstructor_isMoveConstructor(cursor) != 0) + result = CodeModel::MoveConstructor; + else + result = CodeModel::Constructor; + break; + case CXCursor_Destructor: + result = CodeModel::Destructor; + break; + default: + break; + } + return result; +} + +FunctionModelItem BuilderPrivate::createMemberFunction(const CXCursor &cursor) const +{ + const CodeModel::FunctionType functionType = + m_currentFunctionType == CodeModel::Signal || m_currentFunctionType == CodeModel::Slot + ? m_currentFunctionType // by annotation + : functionTypeFromCursor(cursor); + FunctionModelItem result = createFunction(cursor, functionType); + result->setAccessPolicy(accessPolicy(clang_getCXXAccessSpecifier(cursor))); + result->setConstant(clang_CXXMethod_isConst(cursor) != 0); + result->setStatic(clang_CXXMethod_isStatic(cursor) != 0); + result->setVirtual(clang_CXXMethod_isVirtual(cursor) != 0); + result->setAbstract(clang_CXXMethod_isPureVirtual(cursor) != 0); + return result; +} + +// For CXCursor_Constructor, on endToken(). +void BuilderPrivate::qualifyConstructor(const CXCursor &cursor) +{ + // Clang does not tell us whether a constructor is explicit, preventing it + // from being used for implicit conversions. Try to guess whether a + // constructor is explicit in the C++99 sense (1 parameter) by checking for + // isConvertingConstructor() == 0. Fixme: The notion of "isConvertingConstructor" + // should be used in the code model instead of "explicit" + if (clang_CXXConstructor_isDefaultConstructor(cursor) == 0 + && m_currentFunction->arguments().size() == 1 + && clang_CXXConstructor_isCopyConstructor(cursor) == 0 + && clang_CXXConstructor_isMoveConstructor(cursor) == 0) { + m_currentFunction->setExplicit(clang_CXXConstructor_isConvertingConstructor(cursor) == 0); + } +} + +TemplateParameterModelItem BuilderPrivate::createTemplateParameter(const CXCursor &cursor) const +{ + return TemplateParameterModelItem(new _TemplateParameterModelItem(m_model, getCursorSpelling(cursor))); +} + +TemplateParameterModelItem BuilderPrivate::createNonTypeTemplateParameter(const CXCursor &cursor) const +{ + TemplateParameterModelItem result = createTemplateParameter(cursor); + result->setType(createTypeInfo(cursor)); + return result; +} + +// CXCursor_VarDecl, CXCursor_FieldDecl cursors +void BuilderPrivate::addField(const CXCursor &cursor) +{ + VariableModelItem field(new _VariableModelItem(m_model, getCursorSpelling(cursor))); + field->setAccessPolicy(accessPolicy(clang_getCXXAccessSpecifier(cursor))); + field->setScope(m_scope); + field->setType(createTypeInfo(cursor)); + field->setMutable(clang_CXXField_isMutable(cursor) != 0); + m_currentField = field; + m_scopeStack.back()->addVariable(field); +} + +// Array helpers: Parse "a[2][4]" into a list of dimensions + +struct ArrayDimensionResult +{ + QVector dimensions; + int position; +}; + +static ArrayDimensionResult arrayDimensions(const QString &typeName) +{ + ArrayDimensionResult result; + result.position = typeName.indexOf(QLatin1Char('[')); + for (int openingPos = result.position; openingPos != -1; ) { + const int closingPos = typeName.indexOf(QLatin1Char(']'), openingPos + 1); + if (closingPos == -1) + break; + result.dimensions.append(typeName.midRef(openingPos + 1, closingPos - openingPos - 1)); + openingPos = typeName.indexOf(QLatin1Char('['), closingPos + 1); + } + return result; +} + +// Array helpers: Parse "a[2][4]" into a list of dimensions or "" for none +static QStringList parseArrayArgs(const CXType &type, QString *typeName) +{ + const ArrayDimensionResult dimensions = arrayDimensions(*typeName); + Q_ASSERT(!dimensions.dimensions.isEmpty()); + + QStringList result; + // get first dimension from clang, preferably. + // "a[]" is seen as pointer by Clang, set special indicator "" + const long long size = clang_getArraySize(type); + result.append(size >= 0 ? QString::number(size) : QString()); + // Parse out remaining dimensions + for (int i = 1, count = dimensions.dimensions.size(); i < count; ++i) + result.append(dimensions.dimensions.at(i).toString()); + typeName->truncate(dimensions.position); + return result; +} + +// Create qualified name "std::list" -> ("std", "list") +static QStringList qualifiedName(const QString &t) +{ + QStringList result; + int end = t.indexOf(QLatin1Char('<')); + if (end == -1) + end = t.indexOf(QLatin1Char('(')); + if (end == -1) + end = t.size(); + int lastPos = 0; + while (true) { + const int nextPos = t.indexOf(colonColon(), lastPos); + if (nextPos < 0 || nextPos >= end) + break; + result.append(t.mid(lastPos, nextPos - lastPos)); + lastPos = nextPos + 2; + } + result.append(t.right(t.size() - lastPos)); + return result; +} + +TypeInfo BuilderPrivate::createTypeInfo(const CXType &type) const +{ + if (type.kind == CXType_Pointer) { // Check for function pointers, first. + const CXType pointeeType = clang_getPointeeType(type); + const int argCount = clang_getNumArgTypes(pointeeType); + if (argCount >= 0) { + TypeInfo result = createTypeInfo(clang_getResultType(pointeeType)); + result.setFunctionPointer(true); + for (int a = 0; a < argCount; ++a) + result.addArgument(createTypeInfo(clang_getArgType(pointeeType, unsigned(a)))); + return result; + } + } + + TypeInfo typeInfo; + QString typeName = fixTypeName(getTypeName(type)); + + int indirections = 0; + // "int **" + for ( ; typeName.endsWith(QLatin1Char('*')) ; ++indirections) + typeName.chop(1); + typeInfo.setIndirections(indirections); + // "int &&" + if (typeName.endsWith(QLatin1String("&&"))) { + typeName.chop(2); + typeInfo.setReferenceType(RValueReference); + } else if (typeName.endsWith(QLatin1Char('&'))) { // "int &" + typeName.chop(1); + typeInfo.setReferenceType(LValueReference); + } + + // "int [3], int[]" + if (type.kind == CXType_ConstantArray || type.kind == CXType_IncompleteArray + || type.kind == CXType_VariableArray || type.kind == CXType_DependentSizedArray) { + typeInfo.setArrayElements(parseArrayArgs(type, &typeName)); + } + + bool isConstant = clang_isConstQualifiedType(type) != 0; + // A "char *const" parameter, is considered to be const-qualified by Clang, but + // not in the TypeInfo sense (corresponds to "char *" and not "const char *"). + if (type.kind == CXType_Pointer && isConstant && typeName.endsWith(QLatin1String("const"))) { + typeName.chop(5); + typeName = typeName.trimmed(); + isConstant = false; + } + // Clang has been observed to return false for "const int .." + if (!isConstant && typeName.startsWith(QLatin1String("const "))) { + typeName.remove(0, 6); + isConstant = true; + } + typeInfo.setConstant(isConstant); + + // clang_isVolatileQualifiedType() returns true for "volatile int", but not for "volatile int *" + if (typeName.startsWith(QLatin1String("volatile "))) { + typeName.remove(0, 9); + typeInfo.setVolatile(true); + } + + typeName = typeName.trimmed(); + + typeInfo.setQualifiedName(qualifiedName(typeName)); + // 3320:CINDEX_LINKAGE int clang_getNumArgTypes(CXType T); function ptr types? + return typeInfo; +} + +// extract an expression from the cursor via source +// CXCursor_EnumConstantDecl, ParmDecl (a = Flag1 | Flag2) +QString BuilderPrivate::cursorValueExpression(BaseVisitor *bv, const CXCursor &cursor) const +{ + BaseVisitor::CodeSnippet snippet = bv->getCodeSnippet(cursor); + const char *equalSign = std::find(snippet.first, snippet.second, '='); + if (equalSign == snippet.second) + return QString(); + ++equalSign; + return QString::fromLocal8Bit(equalSign, int(snippet.second - equalSign)).trimmed(); +} + +// A hacky reimplementation of clang_EnumDecl_isScoped() for Clang < 5.0 +// which simply checks for a blank-delimited " class " keyword in the enum snippet. + +#define CLANG_NO_ENUMDECL_ISSCOPED \ + (CINDEX_VERSION_MAJOR == 0 && CINDEX_VERSION_MINOR < 43) + +#if CLANG_NO_ENUMDECL_ISSCOPED +static const char *indexOf(const BaseVisitor::CodeSnippet &snippet, const char *needle) +{ + const size_t snippetLength = snippet.first ? size_t(snippet.second - snippet.first) : 0; + const size_t needleLength = strlen(needle); + if (needleLength > snippetLength) + return nullptr; + for (const char *c = snippet.first, *end = snippet.second - needleLength; c < end; ++c) { + if (memcmp(c, needle, needleLength) == 0) + return c; + } + return nullptr; +} + +long clang_EnumDecl_isScoped4(BaseVisitor *bv, const CXCursor &cursor) +{ + BaseVisitor::CodeSnippet snippet = bv->getCodeSnippet(cursor); + const char *classSpec = indexOf(snippet, "class"); + const bool isClass = classSpec && classSpec > snippet.first + && isspace(*(classSpec - 1)) && isspace(*(classSpec + 5)); + return isClass ? 1 : 0; +} +#endif // CLANG_NO_ENUMDECL_ISSCOPED + +// Add a base class to the current class from CXCursor_CXXBaseSpecifier +void BuilderPrivate::addBaseClass(const CXCursor &cursor) +{ + const CXType inheritedType = clang_getCursorType(cursor); // Note spelling has "struct baseClass", + QString baseClassName = getTypeName(inheritedType); // use type. + const CXCursor declCursor = clang_getTypeDeclaration(inheritedType); + const CursorClassHash::const_iterator it = m_cursorClassHash.constFind(declCursor); + const CodeModel::AccessPolicy access = accessPolicy(clang_getCXXAccessSpecifier(cursor)); + if (it == m_cursorClassHash.constEnd()) { + // Set unqualified name. This happens in cases like "class X : public std::list<...>" + // "template class Foo : public T" and standard types like true_type, false_type. + m_currentClass->addBaseClass(baseClassName, access); + return; + } + // Completely qualify the class name by looking it up and taking its scope + // plus the actual baseClass stripped off any scopes. Consider: + // namespace std { + // template class vector {}; + // namespace n { + // class Foo : public vector {}; + // } + // } + // should have "std::vector" as base class (whereas the type of the base class is + // "std::vector"). + const QStringList &baseScope = it.value()->scope(); + if (!baseScope.isEmpty()) { + const int lastSep = baseClassName.lastIndexOf(colonColon()); + if (lastSep >= 0) + baseClassName.remove(0, lastSep + colonColon().size()); + baseClassName.prepend(colonColon()); + baseClassName.prepend(baseScope.join(colonColon())); + } + m_currentClass->addBaseClass(baseClassName, access); +} + +static inline CXCursor definitionFromTypeRef(const CXCursor &typeRefCursor) +{ + Q_ASSERT(typeRefCursor.kind == CXCursor_TypeRef); + return clang_getTypeDeclaration(clang_getCursorType(typeRefCursor)); +} + +// Qualify function arguments or fields that are typedef'ed from another scope: +// enum ConversionFlag {}; +// typedef QFlags ConversionFlags; +// class QTextCodec { +// enum ConversionFlag {}; +// typedef QFlags ConversionFlags; +// struct ConverterState { +// explicit ConverterState(ConversionFlags); +// ^^ qualify to QTextCodec::ConversionFlags +// ConversionFlags m_flags; +// ^^ ditto + +template // ArgumentModelItem, VariableModelItem +void BuilderPrivate::qualifyTypeDef(const CXCursor &typeRefCursor, const QSharedPointer &item) const +{ + typedef typename CursorTypedefHash::const_iterator ConstIt; + + TypeInfo type = item->type(); + if (type.qualifiedName().size() == 1) { // item's type is unqualified. + const ConstIt it = m_cursorTypedefHash.constFind(definitionFromTypeRef(typeRefCursor)); + if (it != m_cursorTypedefHash.constEnd() && !it.value()->scope().isEmpty()) { + type.setQualifiedName(it.value()->scope() + type.qualifiedName()); + item->setType(type); + } + } +} + +Builder::Builder() +{ + d = new BuilderPrivate(this); +} + +Builder::~Builder() +{ + delete d; +} + +static inline bool compareHeaderName(const char *haystack, const char *needle) +{ + const char *lastSlash = strrchr(haystack, '/'); +#ifdef Q_OS_WIN + if (lastSlash == nullptr) + lastSlash = strrchr(haystack, '\\'); +#endif + if (lastSlash == nullptr) + lastSlash = haystack; + else + ++lastSlash; +#ifdef Q_OS_WIN + return _stricmp(lastSlash, needle) == 0; +#else + return strcmp(lastSlash, needle) == 0; +#endif +} + +#ifdef Q_OS_UNIX +static bool cStringStartsWith(const char *prefix, const char *str) +{ + return strncmp(prefix, str, strlen(prefix)) == 0; +} +#endif + +bool Builder::visitLocation(const CXSourceLocation &location) const +{ + if (clang_Location_isInSystemHeader(location) == 0) + return true; + CXFile file; // void * + unsigned line; + unsigned column; + unsigned offset; + clang_getExpansionLocation(location, &file, &line, &column, &offset); + const CXString cxFileName = clang_getFileName(file); + // Has been observed to be 0 for invalid locations + if (const char *cFileName = clang_getCString(cxFileName)) { + // Resolve OpenGL typedefs although the header is considered a system header. + const bool visitHeader = compareHeaderName(cFileName, "gl.h") +#if defined(Q_OS_LINUX) || defined(Q_OS_MACOS) + || cStringStartsWith("/usr/include/stdint.h", cFileName) +#endif +#if defined(Q_OS_LINUX) + || cStringStartsWith("/usr/include/stdlib.h", cFileName) + || cStringStartsWith("/usr/include/sys/types.h", cFileName) +#elif defined(Q_OS_MACOS) + // Parse the following system headers to get the correct typdefs for types like + // int32_t, which are used in the macOS implementation of OpenGL framework. + || compareHeaderName(cFileName, "gltypes.h") + || cStringStartsWith("/usr/include/_types", cFileName) + || cStringStartsWith("/usr/include/sys/_types", cFileName) +#endif + ; + clang_disposeString(cxFileName); + if (visitHeader) + return true; + } + return false; +} + +FileModelItem Builder::dom() const +{ + Q_ASSERT(!d->m_scopeStack.isEmpty()); + return qSharedPointerDynamicCast<_FileModelItem>(d->m_scopeStack.constFirst()); +} + +static QString msgOutOfOrder(const CXCursor &cursor, const char *expectedScope) +{ + return getCursorKindName(cursor.kind) + QLatin1Char(' ') + + getCursorSpelling(cursor) + QLatin1String(" encountered outside ") + + QLatin1String(expectedScope) + QLatin1Char('.'); +} + +static CodeModel::ClassType codeModelClassTypeFromCursor(CXCursorKind kind) +{ + CodeModel::ClassType result = CodeModel::Class; + if (kind == CXCursor_UnionDecl) + result = CodeModel::Union; + else if (kind == CXCursor_StructDecl) + result = CodeModel::Struct; + return result; +} + +BaseVisitor::StartTokenResult Builder::startToken(const CXCursor &cursor) +{ + switch (cursor.kind) { + case CXCursor_CXXAccessSpecifier: + d->m_currentFunctionType = CodeModel::Normal; + break; + case CXCursor_AnnotateAttr: { + const QString annotation = getCursorSpelling(cursor); + if (annotation == QLatin1String("qt_slot")) + d->m_currentFunctionType = CodeModel::Slot; + else if (annotation == QLatin1String("qt_signal")) + d->m_currentFunctionType = CodeModel::Signal; + else + d->m_currentFunctionType = CodeModel::Normal; + } + break; + case CXCursor_CXXBaseSpecifier: + if (d->m_currentClass.isNull()) { + const Diagnostic d(msgOutOfOrder(cursor, "class"), cursor, CXDiagnostic_Error); + qWarning() << d; + appendDiagnostic(d); + return Error; + } + d->addBaseClass(cursor); + break; + case CXCursor_ClassDecl: + case CXCursor_UnionDecl: + case CXCursor_StructDecl: + if (clang_isCursorDefinition(cursor) == 0) + return Skip; + if (!d->addClass(cursor, codeModelClassTypeFromCursor(cursor.kind))) + return Error; + break; + case CXCursor_ClassTemplate: + case CXCursor_ClassTemplatePartialSpecialization: + if (clang_isCursorDefinition(cursor) == 0) + return Skip; + d->addClass(cursor, CodeModel::Class); + d->m_currentClass->setName(d->m_currentClass->name() + templateBrackets()); + d->m_scope.back() += templateBrackets(); + break; + case CXCursor_EnumDecl: { + QString name = getCursorSpelling(cursor); + EnumKind kind = CEnum; + if (name.isEmpty()) { + kind = AnonymousEnum; + name = QStringLiteral("enum_") + QString::number(++d->m_anonymousEnumCount); +#if !CLANG_NO_ENUMDECL_ISSCOPED + } else if (clang_EnumDecl_isScoped(cursor) != 0) { +#else + } else if (clang_EnumDecl_isScoped4(this, cursor) != 0) { +#endif + kind = EnumClass; + } + d->m_currentEnum.reset(new _EnumModelItem(d->m_model, name)); + setFileName(cursor, d->m_currentEnum.data()); + d->m_currentEnum->setScope(d->m_scope); + d->m_currentEnum->setEnumKind(kind); + d->m_currentEnum->setSigned(isSigned(clang_getEnumDeclIntegerType(cursor).kind)); + if (!qSharedPointerDynamicCast<_ClassModelItem>(d->m_scopeStack.back()).isNull()) + d->m_currentEnum->setAccessPolicy(accessPolicy(clang_getCXXAccessSpecifier(cursor))); + } + break; + case CXCursor_EnumConstantDecl: { + const QString name = getCursorSpelling(cursor); + if (d->m_currentEnum.isNull()) { + const Diagnostic d(msgOutOfOrder(cursor, "enum"), cursor, CXDiagnostic_Error); + qWarning() << d; + appendDiagnostic(d); + return Error; + } + EnumValue enumValue; + if (d->m_currentEnum->isSigned()) + enumValue.setValue(clang_getEnumConstantDeclValue(cursor)); + else + enumValue.setUnsignedValue(clang_getEnumConstantDeclUnsignedValue(cursor)); + EnumeratorModelItem enumConstant(new _EnumeratorModelItem(d->m_model, name)); + enumConstant->setStringValue(d->cursorValueExpression(this, cursor)); + enumConstant->setValue(enumValue); + d->m_currentEnum->addEnumerator(enumConstant); + } + break; + case CXCursor_VarDecl: + // static class members are seen as CXCursor_VarDecl + if (!d->m_currentClass.isNull() && isClassCursor(clang_getCursorSemanticParent(cursor))) { + d->addField(cursor); + d->m_currentField->setStatic(true); + } + break; + case CXCursor_FieldDecl: + d->addField(cursor); + break; +#if CINDEX_VERSION_MAJOR > 0 || CINDEX_VERSION_MINOR >= 37 // Clang 4.0 + case CXCursor_FriendDecl: + return Skip; +#endif + case CXCursor_Constructor: + case CXCursor_Destructor: // Note: Also use clang_CXXConstructor_is..Constructor? + case CXCursor_CXXMethod: + case CXCursor_ConversionFunction: + // Skip inline member functions outside class, only go by declarations inside class + if (!withinClassDeclaration(cursor)) + return Skip; + d->m_currentFunction = d->createMemberFunction(cursor); + d->m_scopeStack.back()->addFunction(d->m_currentFunction); + break; + // Not fully supported, currently, seen as normal function + // Note: May appear inside class (member template) or outside (free template). + case CXCursor_FunctionTemplate: { + const CXCursor semParent = clang_getCursorSemanticParent(cursor); + if (isClassCursor(semParent)) { + if (semParent == clang_getCursorLexicalParent(cursor)) { + d->m_currentFunction = d->createMemberFunction(cursor); + d->m_scopeStack.back()->addFunction(d->m_currentFunction); + break; + } else { + return Skip; // inline member functions outside class + } + } + } + Q_FALLTHROUGH(); // fall through to free template function. + case CXCursor_FunctionDecl: + d->m_currentFunction = d->createFunction(cursor); + d->m_scopeStack.back()->addFunction(d->m_currentFunction); + break; + case CXCursor_Namespace: { + const QString name = getCursorSpelling(cursor); + const NamespaceModelItem parentNamespaceItem = qSharedPointerDynamicCast<_NamespaceModelItem>(d->m_scopeStack.back()); + if (parentNamespaceItem.isNull()) { + const QString message = msgOutOfOrder(cursor, "namespace") + + QLatin1String(" (current scope: ") + d->m_scopeStack.back()->name() + QLatin1Char(')'); + const Diagnostic d(message, cursor, CXDiagnostic_Error); + qWarning() << d; + appendDiagnostic(d); + return Error; + } + // If possible, continue existing namespace (as otherwise, all headers + // where a namespace is continued show up in the type database). + NamespaceModelItem namespaceItem = parentNamespaceItem->findNamespace(name); + if (namespaceItem.isNull()) { + namespaceItem.reset(new _NamespaceModelItem(d->m_model, name)); + setFileName(cursor, namespaceItem.data()); + namespaceItem->setScope(d->m_scope); + parentNamespaceItem->addNamespace(namespaceItem); + } + d->pushScope(namespaceItem); + } + break; + case CXCursor_ParmDecl: + // Skip in case of nested CXCursor_ParmDecls in case one parameter is a function pointer + // and function pointer typedefs. + if (d->m_currentArgument.isNull() && !d->m_currentFunction.isNull()) { + const QString name = getCursorSpelling(cursor); + d->m_currentArgument.reset(new _ArgumentModelItem(d->m_model, name)); + d->m_currentArgument->setType(d->createTypeInfo(cursor)); + d->m_currentFunction->addArgument(d->m_currentArgument); + QString defaultValueExpression = d->cursorValueExpression(this, cursor); + if (!defaultValueExpression.isEmpty()) { + d->m_currentArgument->setDefaultValueExpression(defaultValueExpression); + d->m_currentArgument->setDefaultValue(true); + } + } else { + return Skip; + } + break; + case CXCursor_TemplateTypeParameter: + case CXCursor_NonTypeTemplateParameter: { + const TemplateParameterModelItem tItem = cursor.kind == CXCursor_TemplateTemplateParameter + ? d->createTemplateParameter(cursor) : d->createNonTypeTemplateParameter(cursor); + // Apply to function/member template? + if (!d->m_currentFunction.isNull()) { + d->m_currentFunction->setTemplateParameters(d->m_currentFunction->templateParameters() << tItem); + } else if (!d->m_currentClass.isNull()) { // Apply to class + const QString &tplParmName = tItem->name(); + if (Q_UNLIKELY(!insertTemplateParameterIntoClassName(tplParmName, d->m_currentClass) + || !insertTemplateParameterIntoClassName(tplParmName, &d->m_scope.back()))) { + const QString message = QStringLiteral("Error inserting template parameter \"") + tplParmName + + QStringLiteral("\" into ") + d->m_currentClass->name(); + const Diagnostic d(message, cursor, CXDiagnostic_Error); + qWarning() << d; + appendDiagnostic(d); + return Error; + } + d->m_currentClass->setTemplateParameters(d->m_currentClass->templateParameters() << tItem); + } + } + break; + case CXCursor_TypeAliasDecl: + case CXCursor_TypeAliasTemplateDecl: // May contain nested CXCursor_TemplateTypeParameter + return Skip; + case CXCursor_TypedefDecl: { + const QString name = getCursorSpelling(cursor); + TypeDefModelItem item(new _TypeDefModelItem(d->m_model, name)); + setFileName(cursor, item.data()); + item->setType(d->createTypeInfo(clang_getTypedefDeclUnderlyingType(cursor))); + item->setScope(d->m_scope); + d->m_scopeStack.back()->addTypeDef(item); + d->m_cursorTypedefHash.insert(cursor, item); + } + break; + case CXCursor_TypeRef: + if (!d->m_currentFunction.isNull()) { + if (d->m_currentArgument.isNull()) + d->qualifyTypeDef(cursor, d->m_currentFunction); // return type + else + d->qualifyTypeDef(cursor, d->m_currentArgument); + } else if (!d->m_currentField.isNull()) { + d->qualifyTypeDef(cursor, d->m_currentField); + } + break; + case CXCursor_CXXFinalAttr: + if (!d->m_currentFunction.isNull()) + d->m_currentFunction->setFinal(true); + else if (!d->m_currentClass.isNull()) + d->m_currentClass->setFinal(true); + break; + case CXCursor_CXXOverrideAttr: + if (!d->m_currentFunction.isNull()) + d->m_currentFunction->setOverride(true); + break; + default: + break; + } + return BaseVisitor::Recurse; +} + +bool Builder::endToken(const CXCursor &cursor) +{ + switch (cursor.kind) { + case CXCursor_UnionDecl: + case CXCursor_ClassDecl: + case CXCursor_StructDecl: + case CXCursor_ClassTemplate: + case CXCursor_ClassTemplatePartialSpecialization: + d->popScope(); + // Continue in outer class after leaving inner class? + if (ClassModelItem lastClass = qSharedPointerDynamicCast<_ClassModelItem>(d->m_scopeStack.back())) + d->m_currentClass = lastClass; + else + d->m_currentClass.clear(); + d->m_currentFunctionType = CodeModel::Normal; + break; + case CXCursor_EnumDecl: + // Add enum only if values were encountered, otherwise assume it + // is a forward declaration of an enum class. + if (!d->m_currentEnum.isNull() && d->m_currentEnum->hasValues()) + d->m_scopeStack.back()->addEnum(d->m_currentEnum); + d->m_currentEnum.clear(); + break; + case CXCursor_VarDecl: + case CXCursor_FieldDecl: + d->m_currentField.clear(); + break; + case CXCursor_Constructor: + d->qualifyConstructor(cursor); + d->m_currentFunction.clear(); + break; + case CXCursor_Destructor: + case CXCursor_CXXMethod: + case CXCursor_FunctionDecl: + case CXCursor_FunctionTemplate: + d->m_currentFunction.clear(); + break; + case CXCursor_Namespace: + d->popScope(); + break; + case CXCursor_ParmDecl: + d->m_currentArgument.clear(); + break; + default: + break; + } + return true; +} + +} // namespace clang diff --git a/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.h b/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.h new file mode 100644 index 0000000..2c4dd0e --- /dev/null +++ b/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.h @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CLANGBUILDER_H +#define CLANGBUILDER_H + +#include "clangparser.h" + +#include + +namespace clang { + +class BuilderPrivate; + +class Builder : public BaseVisitor { +public: + Builder(); + ~Builder(); + + bool visitLocation(const CXSourceLocation &location) const override; + + StartTokenResult startToken(const CXCursor &cursor) override; + bool endToken(const CXCursor &cursor) override; + + FileModelItem dom() const; + +private: + BuilderPrivate *d; +}; + +} // namespace clang + +#endif // CLANGBUILDER_H diff --git a/sources/shiboken2/ApiExtractor/clangparser/clangdebugutils.cpp b/sources/shiboken2/ApiExtractor/clangparser/clangdebugutils.cpp new file mode 100644 index 0000000..d6915da --- /dev/null +++ b/sources/shiboken2/ApiExtractor/clangparser/clangdebugutils.cpp @@ -0,0 +1,150 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "clangdebugutils.h" +#include "clangutils.h" + +#include +#include + +#include + +#ifndef QT_NO_DEBUG_STREAM + +#ifdef Q_OS_WIN +const char pathSep = '\\'; +#else +const char pathSep = '/'; +#endif + +static const char *baseName(const char *fileName) +{ + const char *b = strrchr(fileName, pathSep); + return b ? b + 1 : fileName; +} + +QDebug operator<<(QDebug s, const CXString &cs) +{ + s << clang_getCString(cs); + return s; +} + +QDebug operator<<(QDebug s, CXCursorKind cursorKind) // Enum +{ + const CXString kindName = clang_getCursorKindSpelling(cursorKind); + s << kindName; + clang_disposeString(kindName); + return s; +} + +static const char *accessSpecsStrings[] +{ + // CX_CXXInvalidAccessSpecifier, CX_CXXPublic, CX_CXXProtected, CX_CXXPrivate + "invalid", "public", "protected", "private" +}; + +QDebug operator<<(QDebug s, CX_CXXAccessSpecifier ac) +{ + s << accessSpecsStrings[ac]; + return s; +} + +QDebug operator<<(QDebug s, const CXType &t) +{ + CXString typeSpelling = clang_getTypeSpelling(t); + s << typeSpelling; + clang_disposeString(typeSpelling); + return s; +} + +QDebug operator<<(QDebug s, const CXCursor &cursor) +{ + QDebugStateSaver saver(s); + s.nospace(); + s.noquote(); + const CXCursorKind kind = clang_getCursorKind(cursor); + s << kind; + if (kind >= CXCursor_FirstInvalid && kind <= CXCursor_LastInvalid) + return s; + const CXType type = clang_getCursorType(cursor); + switch (kind) { + case CXCursor_CXXAccessSpecifier: + s << ' ' << clang_getCXXAccessSpecifier(cursor); + break; + case CXCursor_CXXBaseSpecifier: + s << ", inherits=\"" << clang::getCursorSpelling(clang_getTypeDeclaration(type)) << '"'; + break; + case CXCursor_CXXMethod: + case CXCursor_FunctionDecl: + case CXCursor_ConversionFunction: + s << ", result type=\"" << clang_getCursorResultType(cursor) << '"'; + break; + case CXCursor_TypedefDecl: + s << ", underlyingType=\"" << clang_getTypedefDeclUnderlyingType(cursor) << '"'; + break; + default: + break; + } + + if (type.kind != CXType_Invalid) + s << ", type=\"" << type << '"'; + if (clang_Cursor_hasAttrs(cursor)) + s << ", [attrs]"; + + const QString cursorSpelling = clang::getCursorSpelling(cursor); + if (!cursorSpelling.isEmpty()) + s << ", spelling=\"" << cursorSpelling << '"'; + CXString cursorDisplay = clang_getCursorDisplayName(cursor); + if (const char *dpy = clang_getCString(cursorDisplay)) { + const QString display = QString::fromUtf8(dpy); + if (display != cursorSpelling) + s << ", display=\"" << dpy << '"'; + } + clang_disposeString(cursorDisplay); + return s; +} + +QDebug operator<<(QDebug s, const CXSourceLocation &location) +{ + QDebugStateSaver saver(s); + s.nospace(); + CXFile file; // void * + unsigned line; + unsigned column; + unsigned offset; + clang_getExpansionLocation(location, &file, &line, &column, &offset); + const CXString cxFileName = clang_getFileName(file); + // Has been observed to be 0 for invalid locations + if (const char *cFileName = clang_getCString(cxFileName)) + s << baseName(cFileName) << ':'; + s << line << ':' << column; + clang_disposeString(cxFileName); + return s; +} + +#endif // !QT_NO_DEBUG_STREAM diff --git a/sources/shiboken2/ApiExtractor/clangparser/clangdebugutils.h b/sources/shiboken2/ApiExtractor/clangparser/clangdebugutils.h new file mode 100644 index 0000000..2bbe526 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/clangparser/clangdebugutils.h @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CLANGDEBUGUTILS_H +#define CLANGDEBUGUTILS_H + +#include + +#include + +QT_FORWARD_DECLARE_CLASS(QDebug) +QT_FORWARD_DECLARE_CLASS(QString) + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug s, const CXString &cs); +QDebug operator<<(QDebug s, CXCursorKind cursorKind); +QDebug operator<<(QDebug s, CX_CXXAccessSpecifier ac); +QDebug operator<<(QDebug s, const CXType &t); +QDebug operator<<(QDebug s, const CXCursor &cursor); +QDebug operator<<(QDebug s, const CXSourceLocation &location); +#endif // !QT_NO_DEBUG_STREAM + +#endif // CLANGDEBUGUTILS_H diff --git a/sources/shiboken2/ApiExtractor/clangparser/clangparser.cpp b/sources/shiboken2/ApiExtractor/clangparser/clangparser.cpp new file mode 100644 index 0000000..ce0b655 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/clangparser/clangparser.cpp @@ -0,0 +1,266 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "clangparser.h" +#include "clangutils.h" +#include "clangdebugutils.h" +#include "compilersupport.h" + +#include +#include +#include +#include +#include +#include + +namespace clang { + +SourceFileCache::Snippet SourceFileCache::getCodeSnippet(const CXCursor &cursor) +{ + Snippet result(nullptr, nullptr); + const SourceRange range = getCursorRange(cursor); + if (range.first.file.isEmpty() || range.second.file != range.first.file) + return result; + FileBufferCache::Iterator it = m_fileBufferCache.find(range.first.file); + if (it == m_fileBufferCache.end()) { + QFile file(range.first.file); + if (!file.open(QIODevice::ReadOnly)) { + qWarning().noquote().nospace() + << "Can't open " << QDir::toNativeSeparators(range.first.file) + << ": " << file.errorString(); + return result; + } + it = m_fileBufferCache.insert(range.first.file, file.readAll()); + } + + const unsigned pos = range.first.offset; + const unsigned end = range.second.offset; + const QByteArray &contents = it.value(); + if (end >= unsigned(contents.size())) { + qWarning().noquote().nospace() << "Range end " << end << " is above size of " + << range.first.file << " (" << contents.size() << ')'; + return result; + } + result.first = contents.constData() + pos; + result.second = contents.constData() + end; + return result; +} + +BaseVisitor::BaseVisitor() = default; +BaseVisitor::~BaseVisitor() = default; + +bool BaseVisitor::visitLocation(const CXSourceLocation &location) const +{ + return clang_Location_isFromMainFile(location) != 0; +} + +BaseVisitor::StartTokenResult BaseVisitor::cbHandleStartToken(const CXCursor &cursor) +{ + switch (cursor.kind) { + default: + break; + } + + return startToken(cursor); +} + +bool BaseVisitor::cbHandleEndToken(const CXCursor &cursor, StartTokenResult startResult) +{ + const bool result = startResult != Recurse || endToken(cursor); + switch (cursor.kind) { + default: + break; + } + + return result; +} + +BaseVisitor::CodeSnippet BaseVisitor::getCodeSnippet(const CXCursor &cursor) +{ + CodeSnippet result = m_fileCache.getCodeSnippet(cursor); + if (result.first == nullptr) + appendDiagnostic(Diagnostic(QStringLiteral("Unable to retrieve code snippet."), cursor, CXDiagnostic_Error)); + return result; +} + +QString BaseVisitor::getCodeSnippetString(const CXCursor &cursor) +{ + CodeSnippet result = m_fileCache.getCodeSnippet(cursor); + return result.first != nullptr + ? QString::fromUtf8(result.first, int(result.second - result.first)) + : QString(); +} + +static CXChildVisitResult + visitorCallback(CXCursor cursor, CXCursor /* parent */, CXClientData clientData) +{ + BaseVisitor *bv = reinterpret_cast(clientData); + + const CXSourceLocation location = clang_getCursorLocation(cursor); + if (!bv->visitLocation(location)) + return CXChildVisit_Continue; + + const BaseVisitor::StartTokenResult startResult = bv->cbHandleStartToken(cursor); + switch (startResult) { + case clang::BaseVisitor::Error: + return CXChildVisit_Break; + case clang::BaseVisitor::Skip: + break; + case clang::BaseVisitor::Recurse: + clang_visitChildren(cursor, visitorCallback, clientData); + break; + } + + if (!bv->cbHandleEndToken(cursor, startResult)) + return CXChildVisit_Break; + + return CXChildVisit_Continue; +} + +BaseVisitor::Diagnostics BaseVisitor::diagnostics() const +{ + return m_diagnostics; +} + +void BaseVisitor::setDiagnostics(const Diagnostics &d) +{ + m_diagnostics = d; +} + +void BaseVisitor::appendDiagnostic(const Diagnostic &d) +{ + m_diagnostics.append(d); +} + +static inline const char **byteArrayListToFlatArgV(const QByteArrayList &bl) +{ + const char **result = new const char *[bl.size() + 1]; + result[bl.size()] = nullptr; + std::transform(bl.cbegin(), bl.cend(), result, + [] (const QByteArray &a) { return a.constData(); }); + return result; +} + +static QByteArray msgCreateTranslationUnit(const QByteArrayList clangArgs, unsigned flags) +{ + QByteArray result = "clang_parseTranslationUnit2(0x"; + result += QByteArray::number(flags, 16); + const int count = clangArgs.size(); + result += ", cmd[" + QByteArray::number(count) + "]="; + for (int i = 0; i < count; ++i) { + const QByteArray &arg = clangArgs.at(i); + if (i) + result += ' '; + const bool quote = arg.contains(' ') || arg.contains('('); + if (quote) + result += '"'; + result += arg; + if (quote) + result += '"'; + } + result += ')'; + return result; +} + +static CXTranslationUnit createTranslationUnit(CXIndex index, + const QByteArrayList &args, + unsigned flags = 0) +{ + // courtesy qdoc + const unsigned defaultFlags = CXTranslationUnit_SkipFunctionBodies + | CXTranslationUnit_Incomplete; + + static const QByteArrayList defaultArgs = { +#ifndef Q_OS_WIN + "-fPIC", +#endif +#ifdef Q_OS_MACOS + "-Wno-expansion-to-defined", // Workaround for warnings in Darwin stdlib, see + // https://github.com/darlinghq/darling/issues/204 +#endif + "-Wno-constant-logical-operand" + }; + + const QByteArrayList clangArgs = emulatedCompilerOptions() + defaultArgs + args; + QScopedArrayPointer argv(byteArrayListToFlatArgV(clangArgs)); + qDebug().noquote().nospace() << msgCreateTranslationUnit(clangArgs, flags); + + CXTranslationUnit tu; + CXErrorCode err = clang_parseTranslationUnit2(index, nullptr, argv.data(), + clangArgs.size(), nullptr, 0, + defaultFlags | flags, &tu); + if (err || !tu) { + qWarning().noquote().nospace() << "Could not parse " + << clangArgs.constLast().constData() << ", error code: " << err; + return nullptr; + } + return tu; +} + +/* clangFlags are flags to clang_parseTranslationUnit2() such as + * CXTranslationUnit_KeepGoing (from CINDEX_VERSION_MAJOR/CINDEX_VERSION_MINOR 0.35) + */ + +bool parse(const QByteArrayList &clangArgs, unsigned clangFlags, BaseVisitor &bv) +{ + CXIndex index = clang_createIndex(0 /* excludeDeclarationsFromPCH */, + 1 /* displayDiagnostics */); + if (!index) { + qWarning() << "clang_createIndex() failed!"; + return false; + } + + CXTranslationUnit translationUnit = createTranslationUnit(index, clangArgs, clangFlags); + if (!translationUnit) + return false; + + CXCursor rootCursor = clang_getTranslationUnitCursor(translationUnit); + + clang_visitChildren(rootCursor, visitorCallback, reinterpret_cast(&bv)); + + QVector diagnostics = getDiagnostics(translationUnit); + diagnostics.append(bv.diagnostics()); + bv.setDiagnostics(diagnostics); + + const bool ok = maxSeverity(diagnostics) < CXDiagnostic_Error; + if (!ok) { + QDebug debug = qWarning(); + debug.noquote(); + debug.nospace(); + debug << "Errors in " + << QDir::toNativeSeparators(QFile::decodeName(clangArgs.constLast())) << ":\n"; + for (const Diagnostic &diagnostic : qAsConst(diagnostics)) + debug << diagnostic << '\n'; + } + + clang_disposeTranslationUnit(translationUnit); + clang_disposeIndex(index); + return ok; +} + +} // namespace clang diff --git a/sources/shiboken2/ApiExtractor/clangparser/clangparser.h b/sources/shiboken2/ApiExtractor/clangparser/clangparser.h new file mode 100644 index 0000000..36b9e0b --- /dev/null +++ b/sources/shiboken2/ApiExtractor/clangparser/clangparser.h @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CLANGPARSER_H +#define CLANGPARSER_H + +#include + +#include +#include +#include +#include +#include + +namespace clang { + +struct Diagnostic; + +class SourceFileCache { +public: + typedef QPair Snippet; + + Snippet getCodeSnippet(const CXCursor &cursor); + +private: + typedef QHash FileBufferCache; + + FileBufferCache m_fileBufferCache; +}; + +class BaseVisitor { + Q_DISABLE_COPY(BaseVisitor) +public: + typedef QVector Diagnostics; + typedef SourceFileCache::Snippet CodeSnippet; + + enum StartTokenResult { Error, Skip, Recurse }; + + BaseVisitor(); + virtual ~BaseVisitor(); + + // Whether location should be visited. + // defaults to clang_Location_isFromMainFile() + virtual bool visitLocation(const CXSourceLocation &location) const; + + virtual StartTokenResult startToken(const CXCursor &cursor) = 0; + virtual bool endToken(const CXCursor &cursor) = 0; + + StartTokenResult cbHandleStartToken(const CXCursor &cursor); + bool cbHandleEndToken(const CXCursor &cursor, StartTokenResult startResult); + + CodeSnippet getCodeSnippet(const CXCursor &cursor); + QString getCodeSnippetString(const CXCursor &cursor); + + Diagnostics diagnostics() const; + void setDiagnostics(const Diagnostics &d); + void appendDiagnostic(const Diagnostic &d); + +private: + SourceFileCache m_fileCache; + Diagnostics m_diagnostics; +}; + +bool parse(const QByteArrayList &clangArgs, unsigned clangFlags, BaseVisitor &ctx); + +} // namespace clang + +#endif // !CLANGPARSER_H diff --git a/sources/shiboken2/ApiExtractor/clangparser/clangutils.cpp b/sources/shiboken2/ApiExtractor/clangparser/clangutils.cpp new file mode 100644 index 0000000..2ff18b2 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/clangparser/clangutils.cpp @@ -0,0 +1,227 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "clangutils.h" + +#include +#include +#include +#include + +bool operator==(const CXCursor &c1, const CXCursor &c2) +{ + return c1.kind == c2.kind + && c1.xdata == c2.xdata + && std::equal(c1.data, c1.data + sizeof(c1.data) / sizeof(c1.data[0]), c2.data); +} + +uint qHash(const CXCursor &c, uint seed) +{ + return qHash(c.kind) ^ qHash(c.xdata) ^ qHash(c.data[0]) + ^ qHash(c.data[1]) ^ qHash(c.data[2]) ^ seed; +} + +namespace clang { + +SourceLocation getExpansionLocation(const CXSourceLocation &location) +{ + SourceLocation result; + CXFile file; // void * + clang_getExpansionLocation(location, &file, &result.line, &result.column, &result.offset); + const CXString cxFileName = clang_getFileName(file); + // Has been observed to be 0 for invalid locations + if (const char *cFileName = clang_getCString(cxFileName)) + result.file = QString::fromUtf8(cFileName); + clang_disposeString(cxFileName); + return result; +} + +SourceLocation getCursorLocation(const CXCursor &cursor) +{ + const CXSourceRange extent = clang_getCursorExtent(cursor); + return getExpansionLocation(clang_getRangeStart(extent)); +} + +CXString getFileNameFromLocation(const CXSourceLocation &location) +{ + CXFile file; + unsigned line; + unsigned column; + unsigned offset; + clang_getExpansionLocation(location, &file, &line, &column, &offset); + return clang_getFileName(file); +} + +SourceRange getCursorRange(const CXCursor &cursor) +{ + const CXSourceRange extent = clang_getCursorExtent(cursor); + return qMakePair(getExpansionLocation(clang_getRangeStart(extent)), + getExpansionLocation(clang_getRangeEnd(extent))); +} + +QString getCursorKindName(CXCursorKind cursorKind) +{ + CXString kindName = clang_getCursorKindSpelling(cursorKind); + const QString result = QString::fromUtf8(clang_getCString(kindName)); + clang_disposeString(kindName); + return result; +} + +QString getCursorSpelling(const CXCursor &cursor) +{ + CXString cursorSpelling = clang_getCursorSpelling(cursor); + const QString result = QString::fromUtf8(clang_getCString(cursorSpelling)); + clang_disposeString(cursorSpelling); + return result; +} + +QString getCursorDisplayName(const CXCursor &cursor) +{ + CXString displayName = clang_getCursorDisplayName(cursor); + const QString result = QString::fromUtf8(clang_getCString(displayName)); + clang_disposeString(displayName); + return result; +} + +QString getTypeName(const CXType &type) +{ + CXString typeSpelling = clang_getTypeSpelling(type); + const QString result = QString::fromUtf8(clang_getCString(typeSpelling)); + clang_disposeString(typeSpelling); + return result; +} + +Diagnostic::Diagnostic(const QString &m, const CXCursor &c, CXDiagnosticSeverity s) + : message(m), location(getCursorLocation(c)), source(Other), severity(s) +{ +} + +Diagnostic Diagnostic::fromCXDiagnostic(CXDiagnostic cd) +{ + Diagnostic result; + result.source = Clang; + CXString spelling = clang_getDiagnosticSpelling(cd); + result.message = QString::fromUtf8(clang_getCString(spelling)); + clang_disposeString(spelling); + result.severity = clang_getDiagnosticSeverity(cd); + result.location = getExpansionLocation(clang_getDiagnosticLocation(cd)); + + CXDiagnosticSet childDiagnostics = clang_getChildDiagnostics(cd); + if (const unsigned childCount = clang_getNumDiagnosticsInSet(childDiagnostics)) { + result.childMessages.reserve(int(childCount)); + const unsigned format = clang_defaultDiagnosticDisplayOptions(); + for (unsigned i = 0; i < childCount; ++i) { + CXDiagnostic childDiagnostic = clang_getDiagnosticInSet(childDiagnostics, i); + CXString cdm = clang_formatDiagnostic(childDiagnostic, format); + result.childMessages.append(QString::fromUtf8(clang_getCString(cdm))); + clang_disposeString(cdm); + clang_disposeDiagnostic(childDiagnostic); + } + } + + return result; +} + +QVector getDiagnostics(CXTranslationUnit tu) +{ + QVector result; + const unsigned count = clang_getNumDiagnostics(tu); + result.reserve(int(count)); + for (unsigned i = 0; i < count; ++i) { + const CXDiagnostic d = clang_getDiagnostic(tu, i); + result.append(Diagnostic::fromCXDiagnostic(d)); + clang_disposeDiagnostic(d); + } + return result; +} + +CXDiagnosticSeverity maxSeverity(const QVector &ds) +{ + CXDiagnosticSeverity result = CXDiagnostic_Ignored; + for (const Diagnostic& d : ds) { + if (d.severity > result) + result = d.severity; + } + return result; +} + +#ifndef QT_NO_DEBUG_STREAM + +QDebug operator<<(QDebug s, const SourceLocation &l) +{ + QDebugStateSaver saver(s); + s.nospace(); + s.noquote(); + s << QDir::toNativeSeparators(l.file) << ':' << l.line; + if (l.column) + s << ':' << l.column; + return s; +} + +// Roughly follow g++ format: +// file.cpp:214:37: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] +QDebug operator<<(QDebug s, const Diagnostic &d) +{ + QDebugStateSaver saver(s); + s.nospace(); + s.noquote(); + s << d.location << ": "; + switch (d.severity) { + case CXDiagnostic_Ignored: + s << "ignored"; + break; + case CXDiagnostic_Note: + s << "note"; + break; + case CXDiagnostic_Warning: + s << "warning"; + break; + case CXDiagnostic_Error: + s << "error"; + break; + case CXDiagnostic_Fatal: + s << "fatal"; + break; + } + s << ": " << d.message; + + if (d.source != Diagnostic::Clang) + s << " [other]"; + + if (const int childMessagesCount = d.childMessages.size()) { + s << '\n'; + for (int i = 0; i < childMessagesCount; ++i) + s << " " << d.childMessages.at(i) << '\n'; + } + + return s; +} + +#endif // QT_NO_DEBUG_STREAM + +} // namespace clang diff --git a/sources/shiboken2/ApiExtractor/clangparser/clangutils.h b/sources/shiboken2/ApiExtractor/clangparser/clangutils.h new file mode 100644 index 0000000..98d0c97 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/clangparser/clangutils.h @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CLANGUTILS_H +#define CLANGUTILS_H + +#include +#include +#include +#include + +QT_FORWARD_DECLARE_CLASS(QDebug) + +bool operator==(const CXCursor &c1, const CXCursor &c2); +uint qHash(const CXCursor &c, uint seed = 0); + +namespace clang { + +QString getCursorKindName(CXCursorKind cursorKind); +QString getCursorSpelling(const CXCursor &cursor); +QString getCursorDisplayName(const CXCursor &cursor); +QString getTypeName(const CXType &type); +inline QString getCursorTypeName(const CXCursor &cursor) + { return getTypeName(clang_getCursorType(cursor)); } +inline QString getCursorResultTypeName(const CXCursor &cursor) + { return getTypeName(clang_getCursorResultType(cursor)); } + +inline bool isCursorValid(const CXCursor &c) +{ + return c.kind < CXCursor_FirstInvalid || c.kind > CXCursor_LastInvalid; +} + +struct SourceLocation +{ + int compare(const SourceLocation &rhs) const; + + QString file; + unsigned line = 0; + unsigned column = 0; + unsigned offset = 0; +}; + +SourceLocation getExpansionLocation(const CXSourceLocation &location); + +typedef QPair SourceRange; + +SourceLocation getCursorLocation(const CXCursor &cursor); +CXString getFileNameFromLocation(const CXSourceLocation &location); +SourceRange getCursorRange(const CXCursor &cursor); + +struct Diagnostic { + enum Source { Clang, Other }; + + Diagnostic() : source(Clang) {} + // Clang + static Diagnostic fromCXDiagnostic(CXDiagnostic cd); + // Other + explicit Diagnostic(const QString &m, const CXCursor &c, CXDiagnosticSeverity s = CXDiagnostic_Warning); + + QString message; + QStringList childMessages; + SourceLocation location; + Source source; + CXDiagnosticSeverity severity; +}; + +QVector getDiagnostics(CXTranslationUnit tu); +CXDiagnosticSeverity maxSeverity(const QVector &ds); + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug, const SourceLocation &); +QDebug operator<<(QDebug, const Diagnostic &); +#endif // QT_NO_DEBUG_STREAM +} // namespace clang + +#endif // CLANGUTILS_H diff --git a/sources/shiboken2/ApiExtractor/clangparser/compilersupport.cpp b/sources/shiboken2/ApiExtractor/clangparser/compilersupport.cpp new file mode 100644 index 0000000..74cad05 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/clangparser/compilersupport.cpp @@ -0,0 +1,383 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "compilersupport.h" +#include "header_paths.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +namespace clang { + +QVersionNumber libClangVersion() +{ + return QVersionNumber(CINDEX_VERSION_MAJOR, CINDEX_VERSION_MINOR); +} + +static bool runProcess(const QString &program, const QStringList &arguments, + QByteArray *stdOutIn = nullptr, QByteArray *stdErrIn = nullptr) +{ + QProcess process; + process.start(program, arguments, QProcess::ReadWrite); + if (!process.waitForStarted()) { + qWarning().noquote().nospace() << "Unable to start " + << process.program() << ": " << process.errorString(); + return false; + } + process.closeWriteChannel(); + const bool finished = process.waitForFinished(); + const QByteArray stdErr = process.readAllStandardError(); + if (stdErrIn) + *stdErrIn = stdErr; + if (stdOutIn) + *stdOutIn = process.readAllStandardOutput(); + + if (!finished) { + qWarning().noquote().nospace() << process.program() << " timed out: " << stdErr; + process.kill(); + return false; + } + + if (process.exitStatus() != QProcess::NormalExit) { + qWarning().noquote().nospace() << process.program() << " crashed: " << stdErr; + return false; + } + + if (process.exitCode() != 0) { + qWarning().noquote().nospace() << process.program() << " exited " + << process.exitCode() << ": " << stdErr; + return false; + } + + return true; +} + +#if defined(Q_CC_GNU) + +static QByteArray frameworkPath() { return QByteArrayLiteral(" (framework directory)"); } + +#if defined(Q_OS_MACOS) +static void filterHomebrewHeaderPaths(HeaderPaths &headerPaths) +{ + QByteArray homebrewPrefix = qgetenv("HOMEBREW_OPT"); + + // If HOMEBREW_OPT is found we assume that the build is happening + // inside a brew environment, which means we need to filter out + // the -isystem flags added by the brew clang shim. This is needed + // because brew passes the Qt include paths as system include paths + // and because our parser ignores system headers, Qt classes won't + // be found and thus compilation errors will occur. + if (homebrewPrefix.isEmpty()) + return; + + qCInfo(lcShiboken) << "Found HOMEBREW_OPT with value:" << homebrewPrefix + << "Assuming homebrew build environment."; + + HeaderPaths::iterator it = headerPaths.begin(); + while (it != headerPaths.end()) { + if (it->path.startsWith(homebrewPrefix)) { + qCInfo(lcShiboken) << "Filtering out homebrew include path: " + << it->path; + it = headerPaths.erase(it); + } else { + ++it; + } + } +} +#endif + +// Determine g++'s internal include paths from the output of +// g++ -E -x c++ - -v search starts here: +// /usr/local/include +// /System/Library/Frameworks (framework directory) +// End of search list. +static HeaderPaths gppInternalIncludePaths(const QString &compiler) +{ + HeaderPaths result; + QStringList arguments; + arguments << QStringLiteral("-E") << QStringLiteral("-x") << QStringLiteral("c++") + << QStringLiteral("-") << QStringLiteral("-v"); + QByteArray stdOut; + QByteArray stdErr; + if (!runProcess(compiler, arguments, &stdOut, &stdErr)) + return result; + const QByteArrayList stdErrLines = stdErr.split('\n'); + bool isIncludeDir = false; + for (const QByteArray &line : stdErrLines) { + if (isIncludeDir) { + if (line.startsWith(QByteArrayLiteral("End of search list"))) { + isIncludeDir = false; + } else { + HeaderPath headerPath{line.trimmed(), HeaderType::System}; + if (headerPath.path.endsWith(frameworkPath())) { + headerPath.type = HeaderType::FrameworkSystem; + headerPath.path.truncate(headerPath.path.size() - frameworkPath().size()); + } + result.append(headerPath); + } + } else if (line.startsWith(QByteArrayLiteral("#include <...> search starts here"))) { + isIncludeDir = true; + } + } + +#if defined(Q_OS_MACOS) + filterHomebrewHeaderPaths(result); +#endif + return result; +} +#endif // Q_CC_MSVC + +// Detect Vulkan as supported from Qt 5.10 by checking the environment variables. +static void detectVulkan(HeaderPaths *headerPaths) +{ + static const char *vulkanVariables[] = {"VULKAN_SDK", "VK_SDK_PATH"}; + for (const char *vulkanVariable : vulkanVariables) { + if (qEnvironmentVariableIsSet(vulkanVariable)) { + const QByteArray path = qgetenv(vulkanVariable) + QByteArrayLiteral("/include"); + headerPaths->append(HeaderPath{path, HeaderType::System}); + break; + } + } +} + +#if defined(Q_CC_GNU) +enum class LinuxDistribution { RedHat, CentOs, Other }; + +static LinuxDistribution linuxDistribution() +{ + const QString &productType = QSysInfo::productType(); + if (productType == QLatin1String("rhel")) + return LinuxDistribution::RedHat; + if (productType == QLatin1String("centos")) + return LinuxDistribution::CentOs; + return LinuxDistribution::Other; +} + +static bool checkProductVersion(const QVersionNumber &minimum, + const QVersionNumber &excludedMaximum) +{ + const QVersionNumber osVersion = QVersionNumber::fromString(QSysInfo::productVersion()); + return osVersion.isNull() || (osVersion >= minimum && osVersion < excludedMaximum); +} + +static inline bool needsGppInternalHeaders() +{ + const LinuxDistribution distro = linuxDistribution(); + switch (distro) { + case LinuxDistribution::RedHat: + case LinuxDistribution::CentOs: + return checkProductVersion(QVersionNumber(7), QVersionNumber(8)); + case LinuxDistribution::Other: + break; + } + return false; +} +#endif // Q_CC_GNU + +// For MSVC, we set the MS compatibility version and let Clang figure out its own +// options and include paths. +// For the others, we pass "-nostdinc" since libclang tries to add it's own system +// include paths, which together with the clang compiler paths causes some clash +// which causes std types not being found and construct -I/-F options from the +// include paths of the host compiler. + +#ifdef Q_CC_CLANG +static QByteArray noStandardIncludeOption() { return QByteArrayLiteral("-nostdinc"); } +#endif + +// The clang builtin includes directory is used to find the definitions for +// intrinsic functions and builtin types. It is necessary to use the clang +// includes to prevent redefinition errors. The default toolchain includes +// should be picked up automatically by clang without specifying +// them implicitly. + +#if defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) +# define NEED_CLANG_BUILTIN_INCLUDES 1 +#else +# define NEED_CLANG_BUILTIN_INCLUDES 0 +#endif + +#if NEED_CLANG_BUILTIN_INCLUDES +static QString findClang() +{ + for (const char *envVar : {"LLVM_INSTALL_DIR", "CLANG_INSTALL_DIR"}) { + if (qEnvironmentVariableIsSet(envVar)) { + const QString path = QFile::decodeName(qgetenv(envVar)); + if (QFileInfo::exists(path)) + return path; + } + } + const QString llvmConfig = + QStandardPaths::findExecutable(QLatin1String("llvm-config")); + if (!llvmConfig.isEmpty()) { + QByteArray stdOut; + if (runProcess(llvmConfig, QStringList{QLatin1String("--prefix")}, &stdOut)) { + const QString path = QFile::decodeName(stdOut.trimmed()); + if (QFileInfo::exists(path)) + return path; + } + } + return QString(); +} + +static QString findClangBuiltInIncludesDir() +{ + // Find the include directory of the highest version. + const QString clangPath = findClang(); + if (!clangPath.isEmpty()) { + QString candidate; + QVersionNumber lastVersionNumber(1, 0, 0); + QDir clangDir(clangPath + QLatin1String("/lib/clang")); + const QFileInfoList versionDirs = + clangDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); + for (const QFileInfo &fi : versionDirs) { + const QString fileName = fi.fileName(); + if (fileName.at(0).isDigit()) { + const QVersionNumber versionNumber = QVersionNumber::fromString(fileName.at(0)); + if (!versionNumber.isNull() && versionNumber > lastVersionNumber) { + candidate = fi.absoluteFilePath(); + lastVersionNumber = versionNumber; + } + } + } + if (!candidate.isEmpty()) + return candidate + QStringLiteral("/include"); + } + return QString(); +} +#endif // NEED_CLANG_BUILTIN_INCLUDES + +// Returns clang options needed for emulating the host compiler +QByteArrayList emulatedCompilerOptions() +{ + QByteArrayList result; +#if defined(Q_CC_MSVC) + HeaderPaths headerPaths; + result.append(QByteArrayLiteral("-fms-compatibility-version=19")); + result.append(QByteArrayLiteral("-Wno-microsoft-enum-value")); +#elif defined(Q_CC_CLANG) + HeaderPaths headerPaths = gppInternalIncludePaths(QStringLiteral("clang++")); + result.append(noStandardIncludeOption()); +#elif defined(Q_CC_GNU) + HeaderPaths headerPaths; + +#if NEED_CLANG_BUILTIN_INCLUDES + const QString clangBuiltinIncludesDir = + QDir::toNativeSeparators(findClangBuiltInIncludesDir()); + if (clangBuiltinIncludesDir.isEmpty()) { + qCWarning(lcShiboken, "Unable to locate Clang's built-in include directory " + "(neither by checking the environment variables LLVM_INSTALL_DIR, CLANG_INSTALL_DIR " + " nor running llvm-config). This may lead to parse errors."); + } else { + qCInfo(lcShiboken, "CLANG builtins includes directory: %s", + qPrintable(clangBuiltinIncludesDir)); + headerPaths.append(HeaderPath{QFile::encodeName(clangBuiltinIncludesDir), + HeaderType::System}); + } +#endif // NEED_CLANG_BUILTIN_INCLUDES + + // Append the c++ include paths since Clang is unable to find etc + // on RHEL 7 with g++ 6.3 or CentOS 7.2. + // A fix for this has been added to Clang 5.0, so, the code can be removed + // once Clang 5.0 is the minimum version. + if (needsGppInternalHeaders()) { + const HeaderPaths gppPaths = gppInternalIncludePaths(QStringLiteral("g++")); + for (const HeaderPath &h : gppPaths) { + if (h.path.contains("c++")) + headerPaths.append(h); + } + } +#else + HeaderPaths headerPaths; +#endif + detectVulkan(&headerPaths); + std::transform(headerPaths.cbegin(), headerPaths.cend(), + std::back_inserter(result), HeaderPath::includeOption); + return result; +} + +LanguageLevel emulatedCompilerLanguageLevel() +{ +#if defined(Q_CC_MSVC) && _MSC_VER > 1900 + // Fixes constexpr errors in MSVC2017 library headers with Clang 4.1..5.X (0.45 == Clang 6). + if (libClangVersion() < QVersionNumber(0, 45)) + return LanguageLevel::Cpp1Z; +#endif // Q_CC_MSVC && _MSC_VER > 1900 + return LanguageLevel::Cpp14; // otherwise, t.h is parsed as "C" +} + +struct LanguageLevelMapping +{ + const char *option; + LanguageLevel level; +}; + +static const LanguageLevelMapping languageLevelMapping[] = +{ + {"c++11", LanguageLevel::Cpp11}, + {"c++14", LanguageLevel::Cpp14}, + {"c++17", LanguageLevel::Cpp17}, + {"c++20", LanguageLevel::Cpp20}, + {"c++1z", LanguageLevel::Cpp1Z} +}; + +const char *languageLevelOption(LanguageLevel l) +{ + for (const LanguageLevelMapping &m : languageLevelMapping) { + if (m.level == l) + return m.option; + } + return nullptr; +} + +LanguageLevel languageLevelFromOption(const char *o) +{ + for (const LanguageLevelMapping &m : languageLevelMapping) { + if (!strcmp(m.option, o)) + return m.level; + } + return LanguageLevel::Default; +} + +} // namespace clang diff --git a/sources/shiboken2/ApiExtractor/clangparser/compilersupport.h b/sources/shiboken2/ApiExtractor/clangparser/compilersupport.h new file mode 100644 index 0000000..d9e213e --- /dev/null +++ b/sources/shiboken2/ApiExtractor/clangparser/compilersupport.h @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef COMPILERSUPPORT_H +#define COMPILERSUPPORT_H + +#include + +QT_FORWARD_DECLARE_CLASS(QVersionNumber) + +enum class LanguageLevel { + Default, + Cpp11, + Cpp14, + Cpp17, + Cpp20, + Cpp1Z +}; + +namespace clang { +QVersionNumber libClangVersion(); + +QByteArrayList emulatedCompilerOptions(); +LanguageLevel emulatedCompilerLanguageLevel(); + +const char *languageLevelOption(LanguageLevel l); +LanguageLevel languageLevelFromOption(const char *); +} // namespace clang + +#endif // COMPILERSUPPORT_H diff --git a/sources/shiboken2/ApiExtractor/cmake_uninstall.cmake b/sources/shiboken2/ApiExtractor/cmake_uninstall.cmake new file mode 100644 index 0000000..df95fb9 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/cmake_uninstall.cmake @@ -0,0 +1,21 @@ +IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") +ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + +FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +STRING(REGEX REPLACE "\n" ";" files "${files}") +FOREACH(file ${files}) + MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") + IF(EXISTS "$ENV{DESTDIR}${file}") + EXEC_PROGRAM( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + IF(NOT "${rm_retval}" STREQUAL 0) + MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") + ENDIF(NOT "${rm_retval}" STREQUAL 0) + ELSE(EXISTS "$ENV{DESTDIR}${file}") + MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") + ENDIF(EXISTS "$ENV{DESTDIR}${file}") +ENDFOREACH(file) diff --git a/sources/shiboken2/ApiExtractor/dependency.h b/sources/shiboken2/ApiExtractor/dependency.h new file mode 100644 index 0000000..97ae32d --- /dev/null +++ b/sources/shiboken2/ApiExtractor/dependency.h @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DEPENDENCY_H +#define DEPENDENCY_H + +#include +#include + +// Dependencies for topologically sorting classes +struct Dependency { + QString parent; + QString child; +}; + +typedef QVector Dependencies; + +#endif // DEPENDENCY_H diff --git a/sources/shiboken2/ApiExtractor/doc/CMakeLists.txt b/sources/shiboken2/ApiExtractor/doc/CMakeLists.txt new file mode 100644 index 0000000..a1995e9 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/CMakeLists.txt @@ -0,0 +1,10 @@ +message("Building ApiExtractor documentation") +find_program(SPHINX sphinx-build DOC "Path to sphinx-build binary.") + +if (SPHINX) + message(STATUS "sphinx-build - found") + configure_file(conf.py.in conf.py @ONLY) + add_custom_target(doc_apiextractor ${SPHINX} -b html -c . ${CMAKE_CURRENT_SOURCE_DIR} html ) +else() + message(STATUS "sphinx-build - not found! doc_apiextractor target disabled") +endif() diff --git a/sources/shiboken2/ApiExtractor/doc/_templates/index.html b/sources/shiboken2/ApiExtractor/doc/_templates/index.html new file mode 100644 index 0000000..4aa14ed --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/_templates/index.html @@ -0,0 +1,27 @@ +{% extends "layout.html" %} +{% set title = 'Overview' %} +{% block body %} + +{% endblock %} diff --git a/sources/shiboken2/ApiExtractor/doc/_templates/layout.html b/sources/shiboken2/ApiExtractor/doc/_templates/layout.html new file mode 100644 index 0000000..d99d3f0 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/_templates/layout.html @@ -0,0 +1,39 @@ +{% extends "!layout.html" %} + +# Invert sidebars +{%- block sidebar1 %}{{ sidebar() }}{%- endblock %} +{%- block sidebar2 %}{%- endblock %} + +{%- block header %} +
+
+
+ + +
+
+{%- endblock -%} + +{%- block footer %} + +
+{%- endblock %} + +# No top relbar. +{%- block relbar1 %}{%- endblock %} + +# No bottom relbar. +{%- block relbar2 %}{%- endblock %} diff --git a/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/searchbox.html b/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/searchbox.html new file mode 100644 index 0000000..55a9721 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/searchbox.html @@ -0,0 +1,12 @@ +{%- if pagename != "search" %} + + +{%- endif %} diff --git a/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/bg_header.png b/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/bg_header.png new file mode 100644 index 0000000000000000000000000000000000000000..843e7e2c5a85f4ced9bc4d4f90dab4a6d82aa3f3 GIT binary patch literal 36012 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 literal 0 HcmV?d00001 diff --git a/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/bg_topo.jpg b/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/bg_topo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4229ae8db5242e11c8fc52dd1122735d198a3545 GIT binary patch literal 14237 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 literal 0 HcmV?d00001 diff --git a/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/fakebar.png b/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/fakebar.png new file mode 100644 index 0000000000000000000000000000000000000000..b45830e000eb123c3efab6bfc3b17809a3a08530 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0y~yVB`m~89A7Mq`$$QwLprqz$3Dlfr0M`2s2LA=92~r xihH^^hG*5B1h}~tn49EFcPMuw|ksYXn!PC{xWt~$(69Du$7_a~U literal 0 HcmV?d00001 diff --git a/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/logo_indt.jpg b/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/logo_indt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a1fbe7a1b279936b352f5051ed77762af8ab7bb GIT binary patch literal 3138 zcma)82{7AR7ypL{MeV!dwH|`dhoZ47t-Y-!wxCr?pEQYBn_603s4cCXpo$WLw6qVg zwTMz{^-(1#4^{iVM&2EvKJFjjO#1ra~zfZcCub6!ui+k zX%xyKM8rgo>Vp0}$PQ-xcQFtPKkG>~0kE;HCobv~oA7E<^P0MyV18x)y~%SB<_N%j z#Na50A20;wi6A2=8}LksXiRFr9EVTU4-CEm3P*o=2dW6%?y?3mWC~TaooaviO zkOA)e+SpP^l}{JX^i3q_NZPFnT(8SW*g3tSw!Q=1hL$X%2kRQ9H^Q&%eiKlgZ%#70 z23u^!STQEf!f^D3uQYaSZNQLD4{_Nyu;6jq!ErlU*O2Mwe>@w@I79ZjC$H-=B32L5 z^z$BYHt(Uy9UPbKpth-Joyczawl?&mN@4nq*Rb-Ui!pE4NzWpP+(O1w6MB>u?0UZhP(H<@RT#Yk2RXRlhVf$KFc z`kOwJ%q~59nm3Ivy!+Bi9vG@(#=~jXF>{v$YxU!-$Y~!NUm9OYxJRcek4&hDWg{I8 zN@ZFrpeNw3_sk|`B)04IiLc3r#r``;60Sc&4k=SFdh2*%Z8dFXT$hfA$h~{sc4ps9 zY2ihYr5bL!l`$C4(9}&LPONEo1s4d!FaOd=e#->hmqmD`yZU$s$~O|v230g?HSh2d z!~NXHdPJUgRKFa=$yU^y#%&vnWaksRno+oCUKn^$D(i$bPPukyxa0*Kg$|hgNDif3 zd0^IZlz?__kk}T=zf#C?SxH{G)3Zd(IfVQTEt!fKl zCG^<2q+3;NBVDO|SG9RMyXO7pe6_BPFRp26j6{`_c_%PvG1R_|+gOD_V#jv`32jMt zqNv~ROk30>%67~@D$0F?Ku9EC0s!Ig0u0*$B@|pD&jf^?Ct7AvG^LkCzEYo-p;F&m zn*Meh-HW2vj=4Ww+8S>kS@(J|9ewj*Ti2+Y6~?9T1Gxa|>rB5#%7~>n?)X!B%ao*4 ziefNA_!M%9%b%Z=1Xobxjl-v?Y&{++?_`BrAGhb-z4V@!cnVz=;CHb%curw10S{h9}>w~SLm(tU2 z5%23h=$LpVdMhC{LYc0}ZLjdkmZqNP_wqyOcHA7jmLx2f0{{Jf0uf&jIubt|GR_se z;{0~MJfi&80qPfUgw5jJKp@=O??`D5J4r)O`qz0ze3(;#dLB#^FGNRT{a4WM)V5W& z;JQut;@aB4;`;;Z=Chf*OaSdtAEH(0l;kl+bx#xV?U{X5Rc~^}f6wBl z>36%dgMoRw>q5ngo^AdtRUXaTh-f)b?!#hG^$JT- zqa&?0uOG#H6|KHAgp=96>83MNnUq&%DqXtd6w7cu&A&W=N93uF-AIqwd^7r@iM~K6 zB5G2w=xMb#8Rh!jIPFU(Q{miECxR}RMUPg>+FWx(Ip&lB*@0M#*(Yf)iP5hi6Zz>_p^>99fcyI@~ z7r7KFVIyBMXuhq${u+kOkc(~cDpysROuykv7_**x=6x0KBF-i2KS|R(cQC$0JMfTF znTl^El1UKi06}Xa*Up^81o9SJp^4SYvUw$5Nll5!7S*zsTakiu3_q;x=qFL!$Rb~W=wY$hms zhB?SOT(KkXJ10*AN*4IWCH~u`imIBE@2_qYXzZ$dFB|n3Mdy-;gekd{mZ@UmCxhgy zs}{K;fSID+$T#@K`^Hw%UZHE9maYz{7@y$wU9FIOn5$XSDelNG7B_L}A!ol)r%;cc zC7jFs^<1po#6sKL_!w6?Tm_7ODWMOABovu!r_46k>ev%$1VjKtdK1qKk z54LloE|mr$zRj;m#5Z`@h1JKzIk%8$1PUv#L^F5tU<=+0(lnq4DkuL+;d-japo&|+ RADr_1A5-an&#KJfe*p-Ft{(sZ literal 0 HcmV?d00001 diff --git a/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/logo_openbossa.png b/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/logo_openbossa.png new file mode 100644 index 0000000000000000000000000000000000000000..51e868d6e6ae84544a50d5b3242ba211f6a128f2 GIT binary patch literal 4702 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 gL4(p07*qoM6N<$g2h_o0ssI2 literal 0 HcmV?d00001 diff --git a/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/logo_python.jpg b/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/logo_python.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd474efbaa633dde7998c09170e4500acc4a13ce GIT binary patch literal 2660 zcmb`IXHe5w7sme~g$OYaK&6YcMRr390r3+A|xavB_t5ih(D1=Af=?GkO)~>IXPKbWhEsg<%53%5*HWWi`XkK zEiJFO54BJ6Z{vSmh+Y9GIDiN0z#tSLh5~_6AW=I|u-mp67z6_CHu@J(m>5JH41(`! zUyXk_5GV{R1`?MBKwz*KL`+-^F7@Y`uPIOvs0{3op{)3MbzG!5y=N&o#g`K~VJ*6)Dq`KvT zk7yJ?fOo@DU=&~t2rnf4Uq}Xr&&_ps5U%Od5m+;`D@y2KU7y?K!B6dR!KI2x1LxVN zThjDpjo~?pE3=`Ze=@Jb4EMm#&Z{c%ktEbwOmjVc58a)c_v7 z^2MlLFz3o;viH}U20@|{zs+hPXm(CKkc{ah^>dxHUMB&Rz}^K5mOOeIT0MSp1h4W| z{KZjc8cj#1DX*cvzU5;{ea_mO#ks(Hwg>7&fPbG|8Lt1F^jAndImrqQ;f70!cj8Lz zf=*zz_gKE{4KUT8y|%vM)PKT{;Mp&@dekLDmofk)#)iE0fA8y%i}m0+U~I3oD$T(1 zA5XhUtWFjOtuwp1a2Ayt8a|EoZeXRPj%U;cpO7`SDT~c2j2PaDsE9ni%yz~{G1-;5 zbKH%~b6gIZdU5Mh-xOBlT*j1n4fS#I59QCk)ILI-#t+ z7_$S3!rDC|;1GE^zmZ69<;l#~X7#=_5TaCLh37`_yoV-QH9zgd+-o*z6DUQtdsYvP zkGK;RuhS0aJac)*>WJ>BEqsxY+skV1?DT$Ki$suO^i_$p<5h5tN`C=MpBmL!?erh0 z2mpADBDK&#)zhSCUh+jh!D3KP8unV&lW@rfm#B8miLFo8X$f$QMJy{M+R8|Y2I&OSoy*3L*Pf`l%ShmbEk&INIUFHoB73zAug?mpSwf~kJ&nRB0763oO#yn zm+u$RspIu*Zm4!MIxRM0^BrWpD{A)WqtG0`!XRk5H6$qg)^RTQ_xw#4M>Dl2QME_t zlzp+@Kd`^}wF#&if|5k1Q8j!&nA+1jwRCg8e@I4G>bPkPb%+omXC|gVj`yF-4b(JE zamB1jOX-H=j2p2Oga0s@%p~5-GI!`XgH-HDD(mPUr8hxrX3sX@yKQ|16``D{0c0^d zr~XHWVI;aR3yfRDS!D6>ceuX@*$USgX;`b6c~|*aDP#BwPRg4)VR5Uc9)W4fv{upo zUWJo+&(%}WKG6MOPUCTeDQ~@p+AFN8%VH8Z-x8z&Igm4g28Q1$xx$4_4t3g(0N>K__+vw>T|k23p)P0^n-=+A3i zY+H*fVf1`O%9E&$-#lDCTJxG9FfS1h-1_Cd@Lel1GbxF3e|-sn4kaf5_V0Db`*qBCX|R@#Ejf zKhjI7!&GMUh8DVM`Po^=Eh`~%sp=$S>kTjL#29|AYS43dCr-Hb!f8Mm^Q^bP(Gsd# z!WTBvI9VeqCj9AxQ@uM2Hi@c6FOqZ)B%TC>cjzYy&9Y9fcnicbJ&^Rq&P_G zrRg(kUMFj2KM0JkMi#k~O156rJV>u2RJ6>LV}7*`Pup9`TbehWH7D{;YrpZbw2#$@ zxp8Lxs#SiVCS4}EIi)Q`|9*BOMIlq+vDP>hpWo#!mrXm~&}1?ha~|Rnf!^>FXut8G znJWjSvIstupS7uj`>k%~Zh<2xZTUz_6LV=qSRI;vngJxvcdWnjN*h1HEdczWqS~ zku}LHT9*4G6hHzJ1wX#8>mK(U>Ui&EJJ@g|OQyrQ;b!L?QeQJnN8QLG+7KI29osqi zE}dBuaq(;!#lBlxZqTXl^{H*?D__4LTmK4e+J5sxWdrw}Gkp(2?G_(d%oaInxK{Z% zb2Ob})}LK8b+)k2n`OO9mT3Rj5!ZWPR(7(synXcyf$!M1G~Vrk>%Sf`#JbfG6Z30@ zY8!cnD92GAdKy_%THEI}C1vWA$7FIm&sFP({eSF&u3fno=skRc?{_0a8;-N|DqjT|?_BFWCv45f9)3Jho Lk^f!7iAMelGjO_W literal 0 HcmV?d00001 diff --git a/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/logo_qt.png b/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/logo_qt.png new file mode 100644 index 0000000000000000000000000000000000000000..37800f4542f4145e938dbbefa508e2c3d8f0c37d GIT binary patch literal 4618 zcmV+l67}tgP)S^n?7O4K&txnG~lB2#8W75c+^_6WNWZb`fKHO4J@d z^Z@a7t6oeWqcNRSC>HRAcsZ}_F_gM9Qy|oYJ>2!)CaObvev4TcflN~|6sjNCFVKOa z-Ne`-2JMm9;qLF=(3yO@o0?()-?iwoDDBaSTTQ`7uWh95RDZre6{QJyqQ1*^f<#cN zOGI`lCA&;h?b1Bb5tGz`M=swqT0+k!6!`+at*sRwTT!ZMqG(aGpWCl%bhjE#RI(DF z)3b@^h0k&(MFauTf{ZKF0hF|humhnzjj_iY*1FeS_~O9Hrt$f5yR+@nXzE*&_aeOi zs(Q{_6q=biaI58Z!k=zZm|P8#3dRIEBBJ)7WIIB;(xoG1n1{T*0|V{m71NlSyQ*yYA3Vfq}9_y1ky?o5uslpdrVR7 zN@Itak`B$6Jh=1lrrzW2)p#bas#>ctwWYZaLw=1=Kr0xKjR)bj%;~w)y*rOR7fOK_ zp+P|ds3n@>CIobkGBN!lOB=7c7GB&^GUXC5<;=zdA&^k+L$9vTwW2mz_6zSzm%xm0 zY%Ht>)M#Gu9usQQbTkEJr6&bNQt)@8idc+Xsr=@%nS)6a<$}(1brfY&h$#UF9coR- zi=9>#3Vp&&v!g%Leyr*_)s<3+%??HJt|gp!vC|e89zYR&y9sd1%Si~2<5M@Uq7+=K zjMF+HEW?0U!oV=0!WSa!590UvF(gSM9V2DNv(2-exd}$xcqC3dPS7YrRwQ4*mI5tM zt3oCzyv{@fZ}lg6V|NsiHLN**4c9Eaf`yHzQxOQ^_xdr+B=K~V{_$?QhPKc?u#w?J zU#6#01Zc;94v&)~I04%4tih$aUJ6EI1{+=;X5XO{pSkufK6Ar8)P}2z>*@i5-YRN? zEu2~RPFBson{9p1@i75e(13oOcalu|zyN*WE z{M#S;F_Iphy5}Fb`NHd6GvfDzSkdx6&Z@tZXWGBa!I2%dFVygu!T-D#p(+q&-7TLa z$tcmpAj63xbdPLD#B|5Avw9s9Omz`t<~B(nmN5CrhJME5!cXt{d){}!bu%JWq8RM$9Gr3~^hfqo(BE(V=zO&_al19uG?>24fdS z`r z%k>NIM^k!UUmzUpO#s4Wi!Ze9#I0YQPEAu`_HZX)uwC3t6EEpM%o@Mnn?qvPe4VFS~t6NE1?L~PD*=WpUD4M1w5N6qFXWR4Y zxckZv+PQ%Z!$f%3*%vdf zy3w|I&**NtN8X&8CxN!s0L}G&4i5M6)TZ^8?M|yYho;bcG^J1q_8*CXX|m#sW%xX^ zT%^jd3pgdA7bN6m3;H&$N2aAzRf4Ey|bvUu6by#SWI28m9VcCuO2|D0v*cnrOUC)>g=Ye z>@OSpI~p?>7)|3*ip$Pg;n>mP(GIL;skO<6rWAYn_R|yT=hWI$is~$ByojSCX~xDi zRxVt@#fz*b(yxcPW7(sKmi!oYa<QtB^AO<5Q4tVpHb=$`5ICd$R7VQ&^cYgOz~yYohXNX) zI669H*_2AgBV{@ZJ18+HY67YoaXx=Frxg?b$k<5hLH9?z{qzEI4{+TaKcI{4hpaJA@ zSD+mYRbCL-+iRU>oPbvk;Mc=bG}P3ODMBo6f(VT^8>WH~N%UEskS&G%+mw|gA4Dm|e|NmhVAOg?0-!0hfO+9XndaGn8YXP-iUGoh zE?#5lE63AO_6@&=BIA1ln5JntnO;3eQ+OfCw8_3BadsVuV@|Br!%jT^yb(rC77*bDXB#&L#Et@wv+%?0)`WSz4&7X0>8Rw#FdNK1S#7(1^k7?bR?DM4yLY&&*V^{Bf z9)ICy_FAlTRxiAln-+YP)3h~w`@?_7D-ZsPb6c$s@on$>BZs3Md9pZXLFOco)7w&v z!rcPO=BkyxZEumC(lxm8(mK4l&O^WXN8UWxZr`EOc}MFdJhb-n+;`0#G*;DH+TOwO zLp- zv2tkznhOuVGOSY-(s^TFgqQbh<;L^hMU`FXI}M`AL4LOLZyAgq$;;y^!0%O@*&1YE zB*A}deh!b)X|8F&qbW?%#8MG@qMf|a_XnQc_d~Y!{071Le1uZze|h1F1I}^&EaBq6 zj9fxs`Qk7r#ecor$<5!shbQm(21{BNyFPs`BJ_^!<(C}~(-+&9pWMlLrR%CZti7h5 z@r23l#1njf>r>Q*tMPd}jHja{jf_h)(cZTAG6Whf&P9|Ubp^{8hiI<%^4$OKXVup~ z%meSamyccj5h?=}wt^NBB8gsJIlP`NJ-;Gp#HY`kN#+d;`ZT~KZVVAOGCX8H2$19b zoS;k^l#+{ZgY4olug=SD*ERBi)fN1<^Pf2LfmPi7_+Qg~)c$S!Wyiy8I`nf=M%+5* zP?)H(^muakC@jmRVfE}dp|o^mDG+F?^>Eb%HJF|lKYHmu`Q5e`EUPM|Xscam-(~KB z5vyD;Hsurb3(t2<&?{@GY^%X;w~j6BrDR_JMJ)kPisyFNhttdFT}P#_VcKBQ@_stl zv`?j(;XagmxDPa@L$2ToUe~kd2T>?CcD_ol%?Zj%e*+&q=V6vNt)?Y>9@YL+@^_o< z=Go4i*z!4f6$@(SarGdel#@NBB4?1N&-2q*?V)#cko8-CZ&O{-T(Ov&&-y$czu;S( zKkwRnK1$)mUEOV8ykg_g5~$7y&gUWkTXiTwqcjCqF0Vo}4T-acnINpvmoAPrOgg9?uh~0e$dEn`A=aG+mk>;9t?*9$esvoO9bL$mP zj;WOPm9Jg$e6PDsXNQ?PD!HzYl`CXX-J`+k71gXM}m>>yCXh(6o1ZOI@k@U1Xrr2LTBaDiS*j-IdS3R*r=&7cM@?QGn?NIMdiax1Ey>oyz}XRd+?HOd$cy}x&ITlHtRWGU^N92AR~g>ry)B9c9_cC zrHQ#Wq?tz^cpH8GyBx5Nf+m3 zbC|;%<}imj%wZ05n8O_AFo!wJVGeVc!~Y}vACuqGSfw4y-v9sr07*qoM6N<$f?xvu A9{>OV literal 0 HcmV?d00001 diff --git a/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/pysidedocs.css b/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/pysidedocs.css new file mode 100644 index 0000000..fd81f43 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/pysidedocs.css @@ -0,0 +1,409 @@ +* { + font: 100% Verdana, Arial, Helvetica, sans-serif; + font-size:12px; +} + +html { + height: 100%; +} + +body { + margin: 0; + padding: 0; + text-align: center; + background-color: #EBEBEB; + height: 100%; + color: #333; +} + +strong { + font-weight:bold; +} + +.document { + padding-bottom: 90px; +} + +#container { + position: relative; + min-height: 100%; + background-image: url(fakebar.png); + background-repeat: repeat-y; + background-color: white; +} + +.footer { + position: absolute; + bottom: 0px; + margin-top: 50px; + text-align:center; + background-color: white; + border-top: 2px solid #e0e0e0; + white-space: nowrap; + height: 90px; + width: 100%; +} + +.footer img { + margin-left: 8px; + margin-right: 8px; +} + +.sphinxsidebar { + float: left; + width: 250px; + padding: 0px 10px 0px 10px; + text-align: left; +} + +.sphinxsidebar ul { + padding: 0px; + margin: 0px; + list-style-position: inside; +} + +.sphinxsidebar > ul { + padding: 0px; + margin: 0px; +} + +.sphinxsidebar ul li { + margin-left: 10px; + padding: 0px; +} + +.sphinxsidebar h3, .sphinxsidebar h3 a { + font-weight: bold; + color: #333; +} + +.documentwrapper { + margin-left: 270px; + text-align: left; + background-color: #ffffff; + border-left: 1px solid #989898; + font-size:18px; + padding: 10px 50px 15px 50px; + height: 100%; +} + +h1 { + font-size:18px; + padding-left: 50px; + padding-bottom: 15px; + padding-top: 15px; + border-bottom: 1px solid #c2c2c2; + text-transform:uppercase; + margin-right: -100px; + position: relative; + left: -50px; + top: -10px; +} + +h2 { + font-size:12px; + font-weight:bold; + border-left-width: 1px; + border-right-width: 1px; + border-top-width: 1px; + border-bottom-width: 2px; + border-style: solid; + border-left-color: #b1b1b1; + border-right-color: #b1b1b1; + border-top-color: #b1b1b1; + border-bottom-color: #009491; + background-color: #e0e0e0; + padding:5px; + margin-top: 20px; + -moz-border-radius:5px; + -webkit-border-radius:5px; + -khtml-border-radius:5px; +} + +h3, h4 { + font-weight: bolder; +} + +pre { + border-top: 1px solid #e0e0e0; + border-bottom: 1px solid #e0e0e0; + background-color: #fafafa; + padding: 5px; + font: 100% monospace; + overflow: auto; +} + +pre * { + font: 100% monospace; +} + +.headerlink { + font-size: 100%; + color: inherit; + float: right; + visibility: Hidden; +} + +h1 .headerlink { + padding-right: 50px; +} + +h1:hover .headerlink, h2:hover .headerlink, h3:hover .headerlink { + visibility: Visible; +} + +a, a:visited { + color: #009491; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +div.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +div.note { + border: 1px solid #e3e3e3; +} + +table.docutils { + margin-left: auto; + margin-right: auto; + margin-bottom: 10px; + border: none; +} + +table.docutils td { + border: none; +} + +table.docutils th { + border: none; + font-weight: bold; + vertical-align: top; +} + +h2 em { + float: right; + font-size: 10px; + position: relative; + top: -20px; +} + +/* Table of pymaemo components */ + +#development table.docutils td { + border-bottom: 1px solid #EBEBEB; +} + +#development th { + background-color: #EBEBEB; + color: #FC7E00; + padding: 5px; +} + +#development th:first-child { + -moz-border-radius: 20px 0px 0px 0px; + -webkit-border-radius: 20px 0px 0px 0px; + -khtml-border-radius: 20px 0px 0px 0px; + padding-left: 10px; +} +#development th:last-child { + -moz-border-radius: 0px 20px 0px 0px; + -webkit-border-radius: 0px 20px 0px 0px; + -khtml-border-radius: 0px 20px 0px 0px; + padding-right: 10px; + width: 100px; +} + +hr { + border: none; + border-bottom: 1px dashed #EBEBEB; + width: 70% +} + +.oldnews { + text-align: right; +} + +/******************* TOPO *****************************/ +.header { + background-image: url(bg_topo.jpg); + background-repeat: repeat-x; + height: 147px; +} + +.header_container { + background-image: url(bg_header.png); + background-repeat: no-repeat; + background-position: 100px 0px; +} + +.logo { + text-align: left; + margin-bottom: 10px; +} + +#searchbox { + border-top: 1px solid #989898; + padding-top: 10px; + margin-left: -10px; + margin-right: -10px; + padding-left: 10px; + padding-right: 10px; +} + +#search_button { + border: 1px solid #3A393A; + background-color: #3A393A; + color: white; + cursor: pointer; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + -khtml-border-radius: 5px; + +} + +form { + margin: 0px; + padding: 0px; +} + +/* search field */ +form #q { + width: 136px; +/* height: 22px; */ + border: none; + margin: 0px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + -khtml-border-radius: 5px; + margin-top: 2px; + padding: 4px; + line-height: 22px +} + +#search-results h2 { + display: none; +} + +#search-results h2 { + display: none; +} + +#search-results ul.search { + margin: 0px; + padding: 0px; +} + +ul.search div.context { + padding-left: 40px; +} + +#installation td { + text-align: center; + font-weight: bold; +} + +em { + color: inherit; + font-style:italic; +} + +/******** REL bar *********/ + +.related { + display: inline; +} + +.related ul { + padding: 0px 0px 0px 10px; + margin: 0px; + text-align: left; + background-image: url(relbar_bg.png); +} + +.related li { + display: inline; + color: white; + font-weight: bold; +} + +.related li a { + color: inherit; + line-height: 35px; + font-weight: bold; + vertical-align: middle; +} + +.related li.right { + float: right; + margin-right: 5px; +} + +.related h3 { + display: none; +} + +.align-center { + text-align: center; +} + +.contentstable { + width: 100%; +} + +.contentstable td { + padding-left: 30px; + vertical-align: top; +} + +p.biglink a { + font-size: 20px; +} + +dt:target, .highlight { + background-color: #fbe54e; +} + +img { + border: 0px; +} + +.figure .caption { + font-style:italic; +} + +table.footnote { + margin: 0px; +} diff --git a/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/pysidelogo.png b/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/pysidelogo.png new file mode 100644 index 0000000000000000000000000000000000000000..076c1057c094e024bd6cb9cf08f8720c8b686ec9 GIT binary patch literal 12969 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 k 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 literal 0 HcmV?d00001 diff --git a/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/relbar_bg.png b/sources/shiboken2/ApiExtractor/doc/_themes/pysidedocs/static/relbar_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..4036733a7bad6f210ffe961dbc394fce33800be6 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^{6MVC!3HF~cLcBlDNj!q#}JRsx6=-CG8k|$i|$$w zTw?G%WViDYU8g_t)58~aoe=wQ v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +#html_static_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = { '' : ''} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +html_additional_pages = { 'index' : 'index.html'} + +# If false, no index is generated. +html_use_index = False + +# If true, the index is split into individual pages for each letter. +html_split_index = False + +# If true, links to the reST sources are added to the pages. +html_show_sourcelink = False + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = '' + diff --git a/sources/shiboken2/ApiExtractor/doc/contents.rst b/sources/shiboken2/ApiExtractor/doc/contents.rst new file mode 100644 index 0000000..83a4889 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/contents.rst @@ -0,0 +1,9 @@ +Table of contents +***************** +.. toctree:: + :numbered: + :maxdepth: 3 + + overview.rst + ownership.rst + typesystem.rst diff --git a/sources/shiboken2/ApiExtractor/doc/dependency-apiextractor.svg b/sources/shiboken2/ApiExtractor/doc/dependency-apiextractor.svg new file mode 100644 index 0000000..6bec8b5 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/dependency-apiextractor.svg @@ -0,0 +1,360 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + Boost + Qt Software + INdT/Nokia + + + + + + + + Qt 4.5 + 4.5 + headers and libraries - compile-time and run-time + GNU General Public License v3 /GNU Lesser General Public Licence v2.1 + + + + libapiextractor + 0.2 + headers and libraries - compile-time and run-time + LGPL version 2.1 + + + + boost::graph + 1.38.0 + headers and libraries - compile-time and run-time + Boost Software License 1.0 + + + diff --git a/sources/shiboken2/ApiExtractor/doc/overview.rst b/sources/shiboken2/ApiExtractor/doc/overview.rst new file mode 100644 index 0000000..89c0d2c --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/overview.rst @@ -0,0 +1,15 @@ +.. _gen-overview: + +********************** +API Extractor Overview +********************** + +The **API Extractor** library is used by the binding generator to parse headers +of a given library and merge this data with information provided by +typesystem (XML) files, resulting in a representation of how the API should be +exported to the chosen target language. The generation of source code for the +bindings is performed by specific generators using the API Extractor library. + +The API Extractor is based on QtScriptGenerator_ codebase. + +.. _QtScriptGenerator: http://code.qt.io/cgit/qt-labs/qtscriptgenerator.git/ diff --git a/sources/shiboken2/ApiExtractor/doc/ownership.rst b/sources/shiboken2/ApiExtractor/doc/ownership.rst new file mode 100644 index 0000000..4e28f14 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/ownership.rst @@ -0,0 +1,85 @@ +Ownership Management +******************** + +Among the various types of instances interactions, sometimes an object +may be *owned* by another object, so that the owner is responsible for +destroying the owned object, like in Qt's object system [#]_. +This kind of relationship has a big role on interfacing with the target language, like +with Python's reference counting. + + +Ownership transfers +------------------- + +From C++ to target +^^^^^^^^^^^^^^^^^^ + + When an object currently owned by C++ has its ownership transferred + back to the target language, the binding can know for sure when the object will be deleted and + tie the C++ instance existence to the wrapper, calling the C++ destructor normally when the + wrapper is deleted. + + .. code-block:: xml + + + + + + +From target to C++ +^^^^^^^^^^^^^^^^^^ + + In the opposite direction, when an object ownership is transferred from the target language + to C++, the native code takes full control of the object life and you don't + know when that object will be deleted, rendering the wrapper object invalid, + unless you're wrapping an object with a virtual destructor, + so you can override it and be notified of its destruction. + + By default it's safer to just render the wrapper + object invalid and raise some error if the user tries to access + one of this objects members or pass it as argument to some function, to avoid unpleasant segfaults. + Also you should avoid calling the C++ destructor when deleting the wrapper. + + .. code-block:: xml + + + + + + +Parent-child relationship +------------------------- + +One special type of relationship is the parent-child. When an object is called +the parent of another object (the child), the former is in charge of deleting its +child when deleted and the target language can trust that the child will be alive +as long as the parent is, unless some other method can take the C++ ownership away from the parent. + +One of the main uses of this scheme is Qt's object system, with ownership among QObject-derived +classes, creating "trees" of instances. + + .. code-block:: xml + + + + + +In this example, the instance with the method that is being invoked (indicated by 'index="this"' on +modify-argument) will be marked as a child +of the first argument using the `parent` tag. To remove ownership, just use "remove" in the action attribute. **Removing +parentship also transfers the ownership back to python.** + +Invalidation after use +---------------------- + +Sometimes an object is created as a virtual method call argument and destroyed after the +call returned. In this case, you should use the ``invalidate-after-use`` attribute in the +``modify-argument`` tag to mark the wrapper as invalid right after the virtual method returns. + + .. code-block:: xml + + + +In this example the second argument will be invalidated after this method call. + +.. [#] See *Object Trees and Object Ownership* http://doc.qt.io/qt-5/objecttrees.html diff --git a/sources/shiboken2/ApiExtractor/doc/typesystem.rst b/sources/shiboken2/ApiExtractor/doc/typesystem.rst new file mode 100644 index 0000000..b56d211 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/typesystem.rst @@ -0,0 +1,29 @@ +The API Extractor Type System +***************************** + +The typesystem is used by a binding generator or any other software using the APIExtractor library +to map a C++ library API onto a higher level language. + +The typesystem specification is a handwritten XML document listing the types +that will be available in the generated target language API; types that are not +declared in the specification will be ignored along with everything depending on +them. In addition, it is possible to manipulate and modify types and functions. +It is even possible to use the typesystem specification to inject arbitrary +code into the source files, such as an extra member function. + +Below there is a complete reference guide to the various nodes (XML tags) of the typesystem. +For usage examples, take a look at the typesystem files used to generate PySide2. These files +can be found in the PySide2/ directory of the PySide2 package. + +.. toctree:: + + typesystem_specifying_types + typesystem_manipulating_objects + typesystem_modify_function + typesystem_arguments + typesystem_solving_compilation + typesystem_templates + typesystem_conversionrule + typesystem_documentation + + diff --git a/sources/shiboken2/ApiExtractor/doc/typesystem_arguments.rst b/sources/shiboken2/ApiExtractor/doc/typesystem_arguments.rst new file mode 100644 index 0000000..28a5c80 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/typesystem_arguments.rst @@ -0,0 +1,206 @@ +.. _modifying-arguments: + +Modifying Arguments +------------------- + +.. _conversionrule: + +conversion-rule +^^^^^^^^^^^^^^^ + + The conversion-rule node allows you to write customized code to convert + the given argument between the target language and C++, and it is a child of the modify-argument node: + + .. code-block:: xml + + + + + // the code + + + + This node is typically used in combination with the replace-type and + remove-argument nodes. The given code is used instead of the generator's + conversion code. + + Writing %N in the code (where N is a number), will insert the name of the + nth argument. Alternatively, %in and %out which will be replaced with the + name of the conversion's input and output variable, respectively. Note the + output variable must be declared explicitly, for example: + + .. code-block:: xml + + + bool %out = (bool) %in; + + + .. note:: You can also use the conversion-rule node to specify :ref:`a conversion code which will be used instead of the generator's conversion code everywhere for a given type `. + +.. _remove-argument: + +remove-argument +^^^^^^^^^^^^^^^ + + The remove-argument node removes the given argument from the function's + signature, and it is a child of the modify-argument node. + + .. code-block:: xml + + + + + +.. _rename-to: + +rename to +^^^^^^^^^ + + The 'rename to' node is used to rename a argument and use this new name in the generated code. + + .. code-block:: xml + + + + + +.. _remove-default-expression: + +remove-default-expression +^^^^^^^^^^^^^^^^^^^^^^^^^ + + The remove-default-expression node disables the use of the default expression + for the given argument, and it is a child of the modify-argument node. + + .. code-block:: xml + + + + + +.. _replace-default-expression: + +replace-default-expression +^^^^^^^^^^^^^^^^^^^^^^^^^^ + + The replace-default-expression node replaces the specified argument with the + expression specified by the ``with`` attribute, and it is a child of the + modify-argument node. + + .. code-block:: xml + + + + + +.. _replace-type: + +replace-type +^^^^^^^^^^^^ + + The replace-type node replaces the type of the given argument to the one + specified by the ``modified-type`` attribute, and it is a child of the + modify-argument node. + + .. code-block:: xml + + + + + + If the new type is a class, the ``modified-type`` attribute must be set to + the fully qualified name (including name of the package as well as the class + name). + +.. _define-ownership: + +define-ownership +^^^^^^^^^^^^^^^^ + + The define-ownership tag indicates that the function changes the ownership + rules of the argument object. The ``class`` attribute specifies the class of + function where to inject the ownership altering code. The ``owner`` attribute + specifies the new ownership of the object. It accepts the following values: + + * target: the target language will assume full ownership of the object. + The native resources will be deleted when the target language + object is finalized. + * c++: The native code assumes full ownership of the object. The target + language object will not be garbage collected. + * default: The object will get default ownership, depending on how it + was created. + + .. code-block:: xml + + + + + +.. _reference-count: + +reference-count +^^^^^^^^^^^^^^^ + + The reference-count tag dictates how an argument should be handled by the + target language reference counting system (if there is any), it also indicates + the kind of relationship the class owning the function being modified has with + the argument. For instance, in a model/view relation a view receiving a model + as argument for a **setModel** method should increment the model's reference + counting, since the model should be kept alive as much as the view lives. + Remember that out hypothetical view could not become parent of the model, + since the said model could be used by other views as well. + The ``action`` attribute specifies what should be done to the argument + reference counting when the modified method is called. It accepts the + following values: + + * add: increments the argument reference counter. + * add-all: increments the reference counter for each item in a collection. + * remove: decrements the argument reference counter. + * set: will assign the argument to the variable containing the reference. + * ignore: does nothing with the argument reference counter + (sounds worthless, but could be used in situations + where the reference counter increase is mandatory + by default). + + .. code-block:: xml + + + + + + + The variable-name attribute specifies the name used for the variable that + holds the reference(s). + +.. _replace-value: + +replace-value +^^^^^^^^^^^^^ + + The ``replace-value`` attribute lets you replace the return statement of a + function with a fixed string. This attribute can only be used for the + argument at ``index`` 0, which is always the function's return value. + + .. code-block:: xml + + + +.. _parent: + +parent +^^^^^^ + + The parent node lets you define the argument parent which will + take ownership of argument and will destroy the C++ child object when the + parent is destroyed. + + .. code-block:: xml + + + + + + In the ``index`` argument you must specify the parent argument. The action + *add* creates a parent link between objects, while *remove* will undo the + parentage relationship. diff --git a/sources/shiboken2/ApiExtractor/doc/typesystem_conversionrule.rst b/sources/shiboken2/ApiExtractor/doc/typesystem_conversionrule.rst new file mode 100644 index 0000000..c62d5bb --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/typesystem_conversionrule.rst @@ -0,0 +1,113 @@ +.. _conversion-rule-tag: + +Conversion Rule Tag +------------------- + +.. _conversion-rule: + +conversion-rule +^^^^^^^^^^^^^^^ + + The **conversion-rule** tag specifies how a **primitive-type**, a **container-type**, + or a **value-type** may be converted to and from the native C++ language types to the + target language types. + + .. code-block:: xml + + + + + // Code to convert a native value to a target language object. + + + + // Code to convert target language type object of type TARGETTYPEA + // to the C++ native type represented by the value/primitive/container-type. + + + // Code to convert target language type object of type TARGETTYPEB + // to the C++ native type represented by the value/primitive/container-type. + + + + + + The example above show the structure of a complete conversion rule. Each of the + child tags comprising the conversion rule are described in their own sections + below. + + +.. _native-to-target: + +native-to-target +^^^^^^^^^^^^^^^^ + + The **native-to-target** tag tells how to convert a native C++ value to its + target language equivalent. The text inside the tag is a C++ code the takes + an input value an does what's needed to convert it to the output value. + ``insert-template`` tags may be used to insert commonly repeating code. + + .. code-block:: xml + + + + // Code to convert a native value to a target language object. + + + + Use the replace node to modify the template code. + Notice that the generator must provide type system variables for the input + and output values and types, namely **%in**, **%out**, **%INTYPE** and + **%OUTTYPE**. In the case of container types, **%INTYPE** refers to the + full container type (e.g. **"list"**) and **%INTYPE_0**, **%INTYPE_1**, + **%INTYPE_#**, should be replaced by the types used in the container template + (e.g. **%INTYPE_0** correspondes to **"int"** for **"list"**). + + +.. _target-to-native: + +target-to-native +^^^^^^^^^^^^^^^^ + + The **target-to-native** tag encloses at least one, but usually many, conversions + from target language values to C++ native values. The *optional* attribute + ``replace`` tells if the target language to C++ conversions will be added to, or if + they will replace the implicit conversions collected by *ApiExtractor*. The default + value for it is *yes*. + + + .. code-block:: xml + + + \ + // List of target to native conversions meant to replace or expand + // the already existing implicit conversions. + + + + +.. _add-conversion: + +add-conversion +^^^^^^^^^^^^^^ + + Each **add-conversion** tag adds a rule for conversion of a target language type, + indicated by the ``type`` attribute, to the C++ native type represented by the + **primitive-type**, a **container-type**, or **value-type**, to which the parent + **conversion-rule** belongs. + + .. code-block:: xml + + + + // Code to convert target language type object of type TARGETTYPE_A + // to the C++ native type represented by the value/primitive/container-type. + + + + The ``check`` attribute tells how a target value should be checked to see if it belongs to + the type expected. This attribute is *optional*, for it can be derived from the ``type`` + attribute, but it isn't unusual that some special check is needed. The variables + **%in**, **%out**, **%INTYPE**, **%INTYPE_#**, and **%OUTTYPE**, must be provided by + the generator as in the ``native-to-target`` tag. + diff --git a/sources/shiboken2/ApiExtractor/doc/typesystem_documentation.rst b/sources/shiboken2/ApiExtractor/doc/typesystem_documentation.rst new file mode 100644 index 0000000..43f72a1 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/typesystem_documentation.rst @@ -0,0 +1,43 @@ +Manipulating Documentation +-------------------------- + +inject-documentation +^^^^^^^^^^^^^^^^^^^^ + + The inject-documentation node inserts the documentation into the generated + documentation. This node is a child of the object-type, value-type and + modify-function nodes. + + .. code-block:: xml + + + + // the documentation + + + + The **mode** attribute default value is *replace*. + + The **format** attribute specifies when the documentation injection will + occur and it accepts the following values: + + * native: Before XML<->Backend transformation occur, so the injected code *must* be a valid XML. + * target: After XML<->Backend transformation occur, so the injected code *must* be a valid backend format. + + At the moment the only supported backend is Sphinx. + +modify-documentation +^^^^^^^^^^^^^^^^^^^^ + + The modify-documentation node allows you to change the auto-generated + documentation. API Extractor transforms XML's from qdoc3 (the Qt documentation + tool) into .rst files to be processed later using Sphinx. So you can modify + the XML before the transformation occur. + + .. code-block:: xml + + + + + + The **xpath** attribute is the XPath to the node that you want to modify. diff --git a/sources/shiboken2/ApiExtractor/doc/typesystem_manipulating_objects.rst b/sources/shiboken2/ApiExtractor/doc/typesystem_manipulating_objects.rst new file mode 100644 index 0000000..ff6ea53 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/typesystem_manipulating_objects.rst @@ -0,0 +1,132 @@ +.. _manipulating-object-and-value-types: + +Manipulating Object and Value Types +----------------------------------- + +.. _inject-code: + +inject-code +^^^^^^^^^^^ + The inject-code node inserts the given code into the generated code for the + given type or function, and it is a child of the :ref:`object-type`, :ref:`value-type`, + :ref:`modify-function` and :ref:`add-function` nodes. + + .. code-block:: xml + + + + // the code + + + + The ``class`` attribute specifies which module of the generated code that + will be affected by the code injection. The ``class`` attribute accepts the + following values: + + * native: The c++ code + * target: The binding code + * target-declaration: The code will be injected into the generated header + file containing the c++ wrapper class definition. + + If the ``position`` attribute is set to *beginning* (the default), the code + is inserted at the beginning of the function. If it is set to *end*, the code + is inserted at the end of the function. + + The ``since`` attribute specify the API version where this code was injected. + +modify-field +^^^^^^^^^^^^ + + The modify-field node allows you to alter the access privileges for a given + C++ field when mapping it onto the target language, and it is a child of an + :ref:`object-type` or a :ref:`value-type` node. + + .. code-block:: xml + + + + + + The ``name`` attribute is the name of the field, the *optional* ``write`` + and ``read`` attributes specify the field's access privileges in the target + language API (both are set to true by default). + The ``remove`` attribute is an *optional* attribute, which can mark the field + to be discarded on generation; it has the same purpose of the deprecated tag + :ref:`remove`. + +.. _modify-function: + +modify-function +^^^^^^^^^^^^^^^ + + The modify-function node allows you to modify a given C++ function when mapping + it onto the target language, and it is a child of an :ref:`object-type` or a :ref:`value-type` + node. Use the :ref:`modify-argument` node to specify which argument the modification + affects. + + .. code-block:: xml + + + + + + The ``signature`` attribute is a normalized C++ signature, excluding return + values but including potential const declarations. + + The ``since`` attribute specify the API version when this function was modified. + + The ``remove``, ``access`` and ``rename`` attributes are *optional* attributes + for added convenience; they serve the same purpose as the deprecated tags :ref:`remove`, :ref:`access` and :ref:`rename`. + +.. _add-function: + +add-function +^^^^^^^^^^^^ + + The add-function node allows you to add a given function onto the target language, + and it is a child of an :ref:`object-type` or :ref:`value-type` nodes if the + function is supposed to be a method, or :ref:`namespace` and :ref:`typesystem` if + the function is supposed to be a function inside a namespace or a global function. + + Typically when adding a function some code must be injected to provide the function + logic. This can be done using the :ref:`inject-code` node. + + .. code-block:: xml + + + + + + The ``return-type`` attribute defaults to *void*, the ``access`` to *public* and the ``static`` one to *no*. + + The ``since`` attribute specify the API version when this function was added. + +.. _conversion-rule-on-types: + +conversion-rule +^^^^^^^^^^^^^^^ + + The conversion-rule node allows you to write customized code to convert the given argument between the target + language and C++, and is a child of the :ref:`value-type`, :ref:`object-type`, :ref:`primitive-type` and + :ref:`container-type` nodes. + + The code pointed by the file attribute is very tied to the generator using APIExtractor, so it don't follow any + rules, but the generator rules.. + + .. code-block:: xml + + + + + + The ``since`` attribute specify the API version when this conversion rule became valid. + + .. note:: You can also use the conversion-rule node to specify :ref:`how the conversion of a single function argument should be done in a function `. + diff --git a/sources/shiboken2/ApiExtractor/doc/typesystem_modify_function.rst b/sources/shiboken2/ApiExtractor/doc/typesystem_modify_function.rst new file mode 100644 index 0000000..071cea4 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/typesystem_modify_function.rst @@ -0,0 +1,78 @@ +.. _modifying-functions: + +Modifying Functions +------------------- + +.. _modify-argument: + +modify-argument +^^^^^^^^^^^^^^^ + + The modify-argument node specifies which of the given function's arguments the + modification affects, and is a child of the modify-function node. Use the + remove-argument, replace-default-expression, remove-default-expression, + replace-type, reference-count and define-ownership nodes to specify the details + of the modification. + + .. code-block:: xml + + + + // modifications + + + + Set the ``index`` attribute to "1" for the first argument, "2" for the second + one and so on. Alternatively, set it to "return" or "this" if you want to + modify the function's return value or the object the function is called upon, + respectively. + +.. _remove: + +remove +^^^^^^ + + The remove node removes the given method from the generated target language + API, and it is a child of the modify-function node. + + .. code-block:: xml + + + + + + .. warning:: This tag is deprecated, use the ``remove`` attribute from :ref:`modify-function` tag instead. + +.. _access: + +access +^^^^^^ + + The access node changes the access privileges of the given function in the + generated target language API, and it is a child of the modify-function node. + + .. code-block:: xml + + + + + + .. warning:: This tag is deprecated, use the ``access`` attribute from :ref:`modify-function` tag instead. + +.. _rename: + +rename +^^^^^^ + + The rename node changes the name of the given function in the generated target + language API, and it is a child of the modify-function node. + + .. code-block:: xml + + + + + + The ``to`` attribute is the new name of the function. + + .. warning:: This tag is deprecated, use the ``rename`` attribute from :ref:`modify-function` tag instead. diff --git a/sources/shiboken2/ApiExtractor/doc/typesystem_solving_compilation.rst b/sources/shiboken2/ApiExtractor/doc/typesystem_solving_compilation.rst new file mode 100644 index 0000000..23ab901 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/typesystem_solving_compilation.rst @@ -0,0 +1,70 @@ +Solving compilation problems +---------------------------- + +suppress-warning +^^^^^^^^^^^^^^^^ + + The generator will generate several warnings which may be irrelevant to the + user. The suppress-warning node suppresses the specified warning, and it is + a child of the typesystem node. + + .. code-block:: xml + + + + + + The **text** attribute is the warning text to suppress, and may contain the * + wildcard (use "" to escape regular expression matching if the warning contain + a regular "*"). + +extra-includes +^^^^^^^^^^^^^^ + + The extra-includes node contains declarations of additional include files, + and it can be a child of the interface-type, namespace-type, value-type and + object-type nodes. + + The generator automatically tries to read the global header for each type but + sometimes it is required to include extra files in the generated C++ code to + make sure that the code compiles. These files must be listed using include + nodes within the extra-include node: + + .. code-block:: xml + + + + + + + + The **file-name** attribute is the file to include, such as "QStringList". + The **location** attribute is where the file is located: *global* means that + the file is located in $INCLUDEPATH and will be included using #include <...>, + *local* means that the file is in a local directory and will be included + using #include "...". + + +include +^^^^^^^ + + The include node specifies the name and location of a file that must be + included, and it is a child of the interface-type, namespace-type, value-type, + object-type or extra-includes nodes + + The generator automatically tries to read the global header for each type. Use + the include node to override this behavior, providing an alternative file. The + include node can also be used to specify extra include files. + + .. code-block:: xml + + + + + + The **file-name** attribute is the file to include, such as "QStringList". + The **location** attribute is where the file is located: *global* means that + the file is located in $INCLUDEPATH and will be included using #include <...>, + *local* means that the file is in a local directory and will be included + using #include "...". diff --git a/sources/shiboken2/ApiExtractor/doc/typesystem_specifying_types.rst b/sources/shiboken2/ApiExtractor/doc/typesystem_specifying_types.rst new file mode 100644 index 0000000..322f9bc --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/typesystem_specifying_types.rst @@ -0,0 +1,372 @@ +Specifying Types +---------------- + +.. _typesystem: + +typesystem +^^^^^^^^^^ + + This is the root node containing all the type system information. It can + have a number of attributes, described below. + + .. code-block:: xml + + + + + The **package** attribute is a string describing the package to be used, + e.g. "QtCore". + The *optional* **default-superclass** attribute is the canonical C++ base class + name of all objects, e.g., "object". + +load-typesystem +^^^^^^^^^^^^^^^ + + The load-typesystem node specifies which type systems to load when mapping + multiple libraries to another language or basing one library on another, and + it is a child of the typesystem node. + + .. code-block:: xml + + + + + + The **name** attribute is the filename of the typesystem to load, the + **generate** attribute specifies whether code should be generated or not. The + later must be specified when basing one library on another, making the generator + able to understand inheritance hierarchies, primitive mapping, parameter types + in functions, etc. + + Most libraries will be based on both the QtCore and QtGui modules, in which + case code generation for these libraries will be disabled. + + +rejection +^^^^^^^^^ + + The rejection node rejects the given class, or the specified function or + field, and it is a child of the typesystem node. + + .. code-block:: xml + + + + + + The **class** attribute is the C++ class name of the class to reject. Use the + *optional* **function-name** or **field-name** attributes to reject a particular + function or field. Note that the **field-name** and **function-name** cannot + be specified at the same time. To remove all occurrences of a given field or + function, set the class attribute to \*. + +.. _primitive-type: + +primitive-type +^^^^^^^^^^^^^^ + + The primitive-type node describes how a primitive type is mapped from C++ to + the target language, and is a child of the typesystem node. Note that most + primitives are already specified in the QtCore typesystem. + + .. code-block:: xml + + + + + + The **name** attribute is the name of the primitive in C++, the optional, + **target-name** attribute is the name of the primitive type in the target + language. If the later two attributes are not specified their default value + will be the same as the **name** attribute. + + The *optional* **since** value is used to specify the API version of this type. + + If the *optional* **preferred-conversion** attribute is set to *no*, it + indicates that this version of the primitive type is not the preferred C++ + equivalent of the target language type. For example, in Python both "qint64" + and "long long" become "long" but we should prefer the "qint64" version. For + this reason we mark "long long" with preferred-conversion="no". + + The *optional* **default-constructor** specifies the minimal constructor + call to build one value of the primitive-type. This is not needed when the + primitive-type may be built with a default constructor (the one without + arguments). + + The *optional* **preferred-conversion** attribute tells how to build a default + instance of the primitive type. It should be a constructor call capable of + creating a instance of the primitive type. Example: a class "Foo" could have + a **preferred-conversion** value set to "Foo()". Usually this attribute is + used only for classes declared as primitive types and not for primitive C++ + types, but that depends on the application using *ApiExtractor*. + + +.. _namespace: + +namespace-type +^^^^^^^^^^^^^^ + + The namespace-type node maps the given C++ namespace to the target language, + and it is a child of the typesystem node. Note that within namespaces, the + generator only supports enums (i.e., no functions or classes). + + .. code-block:: xml + + + + + + The **name** attribute is the name of the namespace, e.g., "Qt". + + The *optional* **generate** attribute is used to inform if you need to prepend + the given namespace into each generated class. Its default value is **yes**. + + The **package** attribute can be used to override the package of the type system. + + The *optional* **since** value is used to specify the API version of this type. + + The **revision** attribute can be used to specify a revision for each type, easing the + production of ABI compatible bindings. + +enum-type +^^^^^^^^^ + + The enum-type node maps the given enum from C++ to the target language, + and it is a child of the typesystem node. Use the reject-enum-value to + reject values. + + .. code-block:: xml + + + + + + The **name** attribute is the fully qualified C++ name of the enum + (e.g.,"Qt::FillRule"). If the *optional* **flags** attribute is set to *yes* + (the default is *no*), the generator will expect an existing QFlags for the + given enum type. The **lower-bound** and **upper-bound** attributes are used + to specify runtime bounds checking for the enum value. The value must be a + compilable target language statement, such as "QGradient.Spread.PadSpread" + (taking again Python as an example). If the **force-integer** attribute is + set to *yes* (the default is *no*), the generated target language code will + use the target language integers instead of enums. And finally, the + **extensible** attribute specifies whether the given enum can be extended + with user values (the default is *no*). + + The *optional* **since** value is used to specify the API version of this type. + + The attribute **identified-by-value** helps to specify anonymous enums using the + name of one of their values, which is unique for the anonymous enum scope. + Notice that the **enum-type** tag can either have **name** or **identified-by-value** + but not both. + + The **revision** attribute can be used to specify a revision for each type, easing the + production of ABI compatible bindings. + + The **flags-revision** attribute has the same purposes of **revision** attribute but + is used for the QFlag related to this enum. + + +reject-enum-value +^^^^^^^^^^^^^^^^^ + + The reject-enum-value node rejects the enum value specified by the **name** + attribute, and it is a child of the enum-type node. + + .. code-block:: xml + + + + + + This node is used when a C++ enum implementation has several identical numeric + values, some of which are typically obsolete. + +.. _value-type: + +value-type +^^^^^^^^^^ + + The value-type node indicates that the given C++ type is mapped onto the target + language as a value type. This means that it is an object passed by value on C++, + i.e. it is stored in the function call stack. It is a child of the :ref:`typesystem` node. + + .. code-block:: xml + + + + + + The **name** attribute is the fully qualified C++ class name, such as + "QMatrix" or "QPainterPath::Element". The **copyable** attribute is used to + force or not specify if this type is copyable. The *optional* **hash-function** + attribute informs the function name of a hash function for the type. + + The *optional* attribute **stream** specifies whether this type will be able to + use externally defined operators, like QDataStream << and >>. If equals to **yes**, + these operators will be called as normal methods within the current class. + + The *optional* **since** value is used to specify the API version of this type. + + The *optional* **default-constructor** specifies the minimal constructor + call to build one instance of the value-type. This is not needed when the + value-type may be built with a default constructor (the one without arguments). + Usually a code generator may guess a minimal constructor for a value-type based + on its constructor signatures, thus **default-constructor** is used only in + very odd cases. + + The **revision** attribute can be used to specify a revision for each type, easing the + production of ABI compatible bindings. + +.. _object-type: + +object-type +^^^^^^^^^^^ + + The object-type node indicates that the given C++ type is mapped onto the target + language as an object type. This means that it is an object passed by pointer on + C++ and it is stored on the heap. It is a child of the :ref:`typesystem` node. + + .. code-block:: xml + + + + + + The **name** attribute is the fully qualified C++ class name. If there is no + C++ base class, the default-superclass attribute can be used to specify a + superclass for the given type, in the generated target language API. The + **copyable** and **hash-function** attributes are the same as described for + :ref:`value-type`. + + The *optional* attribute **stream** specifies whether this type will be able to + use externally defined operators, like QDataStream << and >>. If equals to **yes**, + these operators will be called as normal methods within the current class. + + The *optional* **since** value is used to specify the API version of this type. + + The **revision** attribute can be used to specify a revision for each type, easing the + production of ABI compatible bindings. + +interface-type +^^^^^^^^^^^^^^ + + The interface-type node indicates that the given class is replaced by an + interface pattern when mapping from C++ to the target language. Using the + interface-type node implicitly makes the given type an :ref:`object-type`. + + .. code-block:: xml + + + + + + The **name** attribute is the fully qualified C++ class name. The *optional* + **package** attribute can be used to override the package of the type system. + If there is no C++ base class, the *optional* **default-superclass** attribute + can be used to specify a superclass in the generated target language API, for + the given class. + + The *optional* **since** value is used to specify the API version of this interface. + + The **revision** attribute can be used to specify a revision for each type, easing the + production of ABI compatible bindings. + +.. _container-type: + +container-type +^^^^^^^^^^^^^^ + + The container-type node indicates that the given class is a container and + must be handled using one of the conversion helpers provided by attribute **type**. + + .. code-block:: xml + + + + + + The **name** attribute is the fully qualified C++ class name. The **type** + attribute is used to indicate what conversion rule will be applied to the + container. It can be: *list*, *string-list*, *linked-list*, *vector*, *stack*, + *queue*, *set*, *map*, *multi-map*, *hash*, *multi-hash* or *pair*. + + The *optional* **since** value is used to specify the API version of this container. + + +.. _custom-type: + +custom-type +^^^^^^^^^^^ + + The custom-type node simply makes the parser aware of the existence of a target + language type, thus avoiding errors when trying to find a type used in function + signatures and other places. The proper handling of the custom type is meant to + be done by a generator using the APIExractor. + + .. code-block:: xml + + + + + + The **name** attribute is the name of the custom type, e.g., "PyObject". + + +.. _function: + +function +^^^^^^^^ + + The function node indicates that the given C++ global function is mapped onto + the target language. + + .. code-block:: xml + + + + + + This tag has some limitations, it doesn't support function modifications, besides you + can't add a function overload using :ref:`add-function` tag to an existent function. + These limitation will be addressed in future versions of ApiExtractor. + + The function tag has two *optional* attributes: **since**, whose value is used to specify + the API version of this function, and **rename**, to modify the function name. + diff --git a/sources/shiboken2/ApiExtractor/doc/typesystem_templates.rst b/sources/shiboken2/ApiExtractor/doc/typesystem_templates.rst new file mode 100644 index 0000000..31b155c --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doc/typesystem_templates.rst @@ -0,0 +1,55 @@ +.. _using-code-templates: + +Using Code Templates +-------------------- + +template +^^^^^^^^ + + The template node registers a template that can be used to avoid duplicate + code when extending the generated code, and it is a child of the typesystem + node. + + .. code-block:: xml + + + + + + Use the insert-template node to insert the template code (identified by the + template's ``name`` attribute) into the generated code base. + + +insert-template +^^^^^^^^^^^^^^^ + + The insert-template node includes the code template identified by the name + attribute, and it can be a child of the inject-code, conversion-rule, template, + custom-constructor and custom-destructor nodes. + + .. code-block:: xml + + + + + + Use the replace node to modify the template code. + + +replace +^^^^^^^ + + The replace node allows you to modify template code before inserting it into + the generated code, and it can be a child of the insert-template node. + + .. code-block:: xml + + + + + + This node will replace the attribute ``from`` with the value pointed by + ``to``. + diff --git a/sources/shiboken2/ApiExtractor/docparser.cpp b/sources/shiboken2/ApiExtractor/docparser.cpp new file mode 100644 index 0000000..9305332 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/docparser.cpp @@ -0,0 +1,336 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "docparser.h" +#include "abstractmetalang.h" +#include "reporthandler.h" +#include "typesystem.h" +#include +#include +#include +#include +#include + +#include +#ifdef HAVE_LIBXSLT +# include +# include +#endif + +#include + +DocParser::DocParser() +{ +#ifdef HAVE_LIBXSLT + xmlSubstituteEntitiesDefault(1); +#endif +} + +DocParser::~DocParser() +{ +} + +QString DocParser::getDocumentation(QXmlQuery& xquery, const QString& query, + const DocModificationList& mods) const +{ + QString doc = execXQuery(xquery, query); + return applyDocModifications(mods, doc.trimmed()); +} + +QString DocParser::execXQuery(QXmlQuery& xquery, const QString& query) const +{ + QString escapedQuery(query); + // XQuery can't have invalid XML characters + escapedQuery.replace(QLatin1Char('&'), QLatin1String("&")); + escapedQuery.replace(QLatin1Char('<'), QLatin1String("<")); + xquery.setQuery(escapedQuery); + if (!xquery.isValid()) { + qWarning() << "Bad XQuery: " << escapedQuery; + return QString(); + } + + QString result; + xquery.evaluateTo(&result); + return result; +} + +bool DocParser::skipForQuery(const AbstractMetaFunction *func) +{ + // Skip private functions and copies created by AbstractMetaClass::fixFunctions() + if (!func || func->isPrivate() + || (func->attributes() & AbstractMetaAttributes::AddedMethod) != 0 + || func->isModifiedRemoved() + || func->declaringClass() != func->ownerClass() + || func->isCastOperator()) { + return true; + } + switch (func->functionType()) { + case AbstractMetaFunction::MoveConstructorFunction: + case AbstractMetaFunction::AssignmentOperatorFunction: + case AbstractMetaFunction::MoveAssignmentOperatorFunction: + return true; + default: + break; + } + return false; +} + +AbstractMetaFunctionList DocParser::documentableFunctions(const AbstractMetaClass *metaClass) +{ + AbstractMetaFunctionList result = metaClass->functionsInTargetLang(); + for (int i = result.size() - 1; i >= 0; --i) { + if (DocParser::skipForQuery(result.at(i)) || result.at(i)->isUserAdded()) + result.removeAt(i); + } + return result; +} + +QString DocParser::msgCannotFindDocumentation(const QString &fileName, + const char *what, const QString &name, + const QString &query) +{ + QString result; + QTextStream(&result) << "Cannot find documentation for " << what + << ' ' << name << " in:\n " << QDir::toNativeSeparators(fileName) + << "\n using query:\n " << query; + return result; +} + +QString DocParser::msgCannotFindDocumentation(const QString &fileName, + const AbstractMetaClass *metaClass, + const AbstractMetaFunction *function, + const QString &query) +{ + const QString name = metaClass->name() + QLatin1String("::") + + function->minimalSignature(); + return msgCannotFindDocumentation(fileName, "function", name, query); +} + +QString DocParser::msgCannotFindDocumentation(const QString &fileName, + const AbstractMetaClass *metaClass, + const AbstractMetaEnum *e, + const QString &query) +{ + return msgCannotFindDocumentation(fileName, "enum", + metaClass->name() + QLatin1String("::") + e->name(), + query); +} + +QString DocParser::msgCannotFindDocumentation(const QString &fileName, + const AbstractMetaClass *metaClass, + const AbstractMetaField *f, + const QString &query) +{ + return msgCannotFindDocumentation(fileName, "field", + metaClass->name() + QLatin1String("::") + f->name(), + query); +} + +#ifdef HAVE_LIBXSLT +namespace +{ + +struct XslResources +{ + xmlDocPtr xmlDoc; + xsltStylesheetPtr xslt; + xmlDocPtr xslResult; + + XslResources() : xmlDoc(0), xslt(0), xslResult(0) {} + + ~XslResources() + { + if (xslt) + xsltFreeStylesheet(xslt); + + if (xslResult) + xmlFreeDoc(xslResult); + + if (xmlDoc) + xmlFreeDoc(xmlDoc); + + xsltCleanupGlobals(); + xmlCleanupParser(); + } +}; + +} // namespace +#endif // HAVE_LIBXSLT + +static inline bool isXpathDocModification(const DocModification &mod) +{ + return mod.mode() == TypeSystem::DocModificationXPathReplace; +} + +QString msgXpathDocModificationError(const DocModificationList& mods, + const QString &what) +{ + QString result; + QTextStream str(&result); + str << "Error when applying modifications ("; + for (const DocModification &mod : mods) { + if (isXpathDocModification(mod)) { + str << '"' << mod.xpath() << "\" -> \""; + const QString simplified = mod.code().simplified(); + if (simplified.size() > 20) + str << simplified.leftRef(20) << "..."; + else + str << simplified; + str << '"'; + } + } + str << "): " << what; + return result; +} + +QString DocParser::applyDocModifications(const DocModificationList& mods, const QString& xml) const +{ + if (mods.isEmpty() || xml.isEmpty() + || !std::any_of(mods.cbegin(), mods.cend(), isXpathDocModification)) { + return xml; + } +#ifdef HAVE_LIBXSLT + const QString result = applyDocModificationsLibXsl(mods, xml); +#else + const QString result = applyDocModificationsQt(mods, xml); +#endif + if (result == xml) { + const QString message = QLatin1String("Query did not result in any modifications to \"") + + xml + QLatin1Char('"'); + qCWarning(lcShiboken, "%s", + qPrintable(msgXpathDocModificationError(mods, message))); + } + return result; +} + +QString DocParser::applyDocModificationsLibXsl(const DocModificationList& mods, const QString& xml) const +{ +#ifdef HAVE_LIBXSLT + QString xsl = QLatin1String("\n" + "\n" + "\n" + " \n" + "\n" + "\n" + "\n" + " \n" + " \n" + "\n" + "\n" + ); + for (const DocModification &mod : mods) { + if (isXpathDocModification(mod)) { + QString xpath = mod.xpath(); + xpath.replace(QLatin1Char('"'), QLatin1String(""")); + xsl += QLatin1String("") + + mod.code() + QLatin1String("\n"); + } + } + xsl += QLatin1String(""); + + XslResources res; + // Read XML data + QByteArray xmlData = xml.toUtf8(); + res.xmlDoc = xmlParseMemory(xmlData.constData(), xmlData.size()); + if (!res.xmlDoc) + return xml; + + // Read XSL data as a XML file + QByteArray xslData = xsl.toUtf8(); + // xsltFreeStylesheet will delete this pointer + xmlDocPtr xslDoc = xmlParseMemory(xslData.constData(), xslData.size()); + if (!xslDoc) + return xml; + + // Parse XSL data + res.xslt = xsltParseStylesheetDoc(xslDoc); + if (!res.xslt) + return xml; + + // Apply XSL + res.xslResult = xsltApplyStylesheet(res.xslt, res.xmlDoc, 0); + xmlChar* buffer = 0; + int bufferSize; + QString result; + if (!xsltSaveResultToString(&buffer, &bufferSize, res.xslResult, res.xslt)) { + result = QString::fromUtf8(reinterpret_cast(buffer), bufferSize); + std::free(buffer); + } else { + result = xml; + } + return result.trimmed(); +#else // HAVE_LIBXSLT + Q_UNUSED(mods) + return xml; +#endif // !HAVE_LIBXSLT +} + +QString DocParser::applyDocModificationsQt(const DocModificationList& mods, const QString& xml) const +{ + const char xslPrefix[] = +R"( + + + \n" + + + + + + + +)"; + + QString xsl = QLatin1String(xslPrefix); + for (const DocModification &mod : mods) { + if (isXpathDocModification(mod)) { + QString xpath = mod.xpath(); + xpath.replace(QLatin1Char('"'), QLatin1String(""")); + xsl += QLatin1String("") + + mod.code() + QLatin1String("\n"); + } + } + xsl += QLatin1String(""); + + QXmlQuery query(QXmlQuery::XSLT20); + query.setFocus(xml); + query.setQuery(xsl); + if (!query.isValid()) { + qCWarning(lcShiboken, "%s", + qPrintable(msgXpathDocModificationError(mods, QLatin1String("Invalid query.")))); + return xml; + } + QString result; + if (!query.evaluateTo(&result)) { + qCWarning(lcShiboken, "%s", + qPrintable(msgXpathDocModificationError(mods, QLatin1String("evaluate() failed.")))); + return xml; + } + return result.trimmed(); +} diff --git a/sources/shiboken2/ApiExtractor/docparser.h b/sources/shiboken2/ApiExtractor/docparser.h new file mode 100644 index 0000000..fff71a8 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/docparser.h @@ -0,0 +1,151 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef DOCPARSER_H +#define DOCPARSER_H + +#include "typesystem_typedefs.h" +#include "abstractmetalang_typedefs.h" + +#include + +QT_BEGIN_NAMESPACE +class QDomDocument; +class QDomNode; +class QXmlQuery; +QT_END_NAMESPACE + +class AbstractMetaClass; +class DocModification; +class Documentation; + +class DocParser +{ +public: + DocParser(); + virtual ~DocParser(); + virtual void fillDocumentation(AbstractMetaClass* metaClass) = 0; + + /** + * Process and retrieves documentation concerning the entire + * module or library. + * \return object containing module/library documentation information + */ + virtual Documentation retrieveModuleDocumentation() = 0; + + void setDocumentationDataDirectory(const QString& dir) + { + m_docDataDir = dir; + } + + /** + * Informs the location of the XML data generated by the tool + * (e.g.: DoxyGen, qdoc) used to extract the library's documentation + * comment. + * \return the path for the directory containing the XML data created + * from the library's documentation beign parsed. + */ + QString documentationDataDirectory() const + { + return m_docDataDir; + } + + void setLibrarySourceDirectory(const QString& dir) + { + m_libSourceDir = dir; + } + /** + * Informs the location of the library being parsed. The library + * source code is parsed for the documentation comments. + * \return the path for the directory containing the source code of + * the library beign parsed. + */ + QString librarySourceDirectory() const + { + return m_libSourceDir; + } + + void setPackageName(const QString& packageName) + { + m_packageName = packageName; + } + /** + * Retrieves the name of the package (or module or library) being parsed. + * \return the name of the package (module/library) being parsed + */ + QString packageName() const + { + return m_packageName; + } + + /** + * Process and retrieves documentation concerning the entire + * module or library. + * \param name module name + * \return object containing module/library documentation information + * \todo Merge with retrieveModuleDocumentation() on next ABI change. + */ + virtual Documentation retrieveModuleDocumentation(const QString& name) = 0; + + static bool skipForQuery(const AbstractMetaFunction *func); + +protected: + QString getDocumentation(QXmlQuery& xquery, const QString& query, + const DocModificationList& mods) const; + + + static AbstractMetaFunctionList documentableFunctions(const AbstractMetaClass *metaClass); + + static QString msgCannotFindDocumentation(const QString &fileName, + const char *what, const QString &name, + const QString &query); + static QString msgCannotFindDocumentation(const QString &fileName, + const AbstractMetaClass *metaClass, + const AbstractMetaFunction *function, + const QString &query); + static QString msgCannotFindDocumentation(const QString &fileName, + const AbstractMetaClass *metaClass, + const AbstractMetaEnum *e, + const QString &query); + static QString msgCannotFindDocumentation(const QString &fileName, + const AbstractMetaClass *metaClass, + const AbstractMetaField *f, + const QString &query); + +private: + QString m_packageName; + QString m_docDataDir; + QString m_libSourceDir; + + QString execXQuery(QXmlQuery& xquery, const QString& query) const; + QString applyDocModifications(const DocModificationList& mods, const QString& xml) const; + QString applyDocModificationsLibXsl(const DocModificationList& mods, const QString& xml) const; + QString applyDocModificationsQt(const DocModificationList& mods, const QString& xml) const; +}; + +#endif // DOCPARSER_H + diff --git a/sources/shiboken2/ApiExtractor/doxygenparser.cpp b/sources/shiboken2/ApiExtractor/doxygenparser.cpp new file mode 100644 index 0000000..dfdb37a --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doxygenparser.cpp @@ -0,0 +1,206 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "doxygenparser.h" +#include "abstractmetalang.h" +#include "reporthandler.h" +#include "typesystem.h" + +#include +#include +#include + +namespace +{ + +QString getSectionKindAttr(const AbstractMetaFunction* func) +{ + if (func->isSignal()) { + return QLatin1String("signal"); + } else { + QString kind = func->isPublic() ? QLatin1String("public") : QLatin1String("protected"); + if (func->isStatic()) + kind += QLatin1String("-static"); + else if (func->isSlot()) + kind += QLatin1String("-slot"); + return kind; + } +} + +} + +Documentation DoxygenParser::retrieveModuleDocumentation() +{ + return retrieveModuleDocumentation(packageName()); +} + +void DoxygenParser::fillDocumentation(AbstractMetaClass* metaClass) +{ + if (!metaClass) + return; + + QString doxyFileSuffix; + if (metaClass->enclosingClass()) { + doxyFileSuffix += metaClass->enclosingClass()->name(); + doxyFileSuffix += QLatin1String("_1_1"); // FIXME: Check why _1_1!! + } + doxyFileSuffix += metaClass->name(); + doxyFileSuffix += QLatin1String(".xml"); + + const char* prefixes[] = { "class", "struct", "namespace" }; + const int numPrefixes = sizeof(prefixes) / sizeof(const char*); + bool isProperty = false; + + QString doxyFilePath; + for (int i = 0; i < numPrefixes; ++i) { + doxyFilePath = documentationDataDirectory() + QLatin1Char('/') + + QLatin1String(prefixes[i]) + doxyFileSuffix; + if (QFile::exists(doxyFilePath)) + break; + doxyFilePath.clear(); + } + + if (doxyFilePath.isEmpty()) { + qCWarning(lcShiboken).noquote().nospace() + << "Can't find doxygen file for class " << metaClass->name() << ", tried: " + << QDir::toNativeSeparators(documentationDataDirectory()) + << "/{struct|class|namespace}"<< doxyFileSuffix; + return; + } + QXmlQuery xquery; + xquery.setFocus(QUrl(doxyFilePath)); + + // Get class documentation + const QString classQuery = QLatin1String("/doxygen/compounddef/detaileddescription"); + QString classDoc = getDocumentation(xquery, classQuery, + metaClass->typeEntry()->docModifications()); + if (classDoc.isEmpty()) + qCWarning(lcShiboken(), "%s", qPrintable(msgCannotFindDocumentation(doxyFilePath, "class", metaClass->name(), classQuery))); + metaClass->setDocumentation(classDoc); + + //Functions Documentation + const AbstractMetaFunctionList &funcs = DocParser::documentableFunctions(metaClass); + for (AbstractMetaFunction *func : funcs) { + QString query = QLatin1String("/doxygen/compounddef/sectiondef"); + // properties + if (func->isPropertyReader() || func->isPropertyWriter() + || func->isPropertyResetter()) { + query += QLatin1String("[@kind=\"property\"]/memberdef/name[text()=\"") + + func->propertySpec()->name() + QLatin1String("\"]"); + isProperty = true; + } else { // normal methods + QString kind = getSectionKindAttr(func); + query += QLatin1String("[@kind=\"") + kind + + QLatin1String("-func\"]/memberdef/name[text()=\"") + + func->originalName() + QLatin1String("\"]"); + + if (func->arguments().isEmpty()) { + QString args = func->isConstant() ? QLatin1String("() const ") : QLatin1String("()"); + query += QLatin1String("/../argsstring[text()=\"") + args + QLatin1String("\"]"); + } else { + int i = 1; + const AbstractMetaArgumentList &arguments = func->arguments(); + for (AbstractMetaArgument *arg : arguments) { + if (!arg->type()->isPrimitive()) { + query += QLatin1String("/../param[") + QString::number(i) + + QLatin1String("]/type/ref[text()=\"") + + arg->type()->name() + QLatin1String("\"]/../.."); + } else { + query += QLatin1String("/../param[") + QString::number(i) + + QLatin1String("]/type[text()=\"") + + arg->type()->name() + QLatin1String("\"]/.."); + } + ++i; + } + } + } + if (!isProperty) { + query += QLatin1String("/../detaileddescription"); + } else { + query = QLatin1Char('(') + query; + query += QLatin1String("/../detaileddescription)[1]"); + } + QString doc = getDocumentation(xquery, query, DocModificationList()); + if (doc.isEmpty()) { + qCWarning(lcShiboken(), "%s", + qPrintable(msgCannotFindDocumentation(doxyFilePath, metaClass, func, query))); + } + func->setDocumentation(doc); + isProperty = false; + } + + //Fields + const AbstractMetaFieldList &fields = metaClass->fields(); + for (AbstractMetaField *field : fields) { + if (field->isPrivate()) + return; + + QString query = QLatin1String("/doxygen/compounddef/sectiondef/memberdef/name[text()=\"") + + field->name() + QLatin1String("\"]/../detaileddescription"); + QString doc = getDocumentation(xquery, query, DocModificationList()); + if (doc.isEmpty()) { + qCWarning(lcShiboken(), "%s", + qPrintable(msgCannotFindDocumentation(doxyFilePath, metaClass, field, query))); + } + field->setDocumentation(doc); + } + + //Enums + const AbstractMetaEnumList &enums = metaClass->enums(); + for (AbstractMetaEnum *meta_enum : enums) { + QString query = QLatin1String("/doxygen/compounddef/sectiondef/memberdef[@kind=\"enum\"]/name[text()=\"") + + meta_enum->name() + QLatin1String("\"]/.."); + QString doc = getDocumentation(xquery, query, DocModificationList()); + if (doc.isEmpty()) { + qCWarning(lcShiboken(), "%s", + qPrintable(msgCannotFindDocumentation(doxyFilePath, metaClass, meta_enum, query))); + } + meta_enum->setDocumentation(doc); + } + +} + +Documentation DoxygenParser::retrieveModuleDocumentation(const QString& name){ + + QString sourceFile = documentationDataDirectory() + QLatin1String("/indexpage.xml"); + + if (!QFile::exists(sourceFile)) { + qCWarning(lcShiboken).noquote().nospace() + << "Can't find doxygen XML file for module " << name << ", tried: " + << QDir::toNativeSeparators(sourceFile); + return Documentation(); + } + + QXmlQuery xquery; + xquery.setFocus(QUrl(sourceFile)); + + // Module documentation + QString query = QLatin1String("/doxygen/compounddef/detaileddescription"); + return Documentation(getDocumentation(xquery, query, DocModificationList())); +} + diff --git a/sources/shiboken2/ApiExtractor/doxygenparser.h b/sources/shiboken2/ApiExtractor/doxygenparser.h new file mode 100644 index 0000000..ed3a7bf --- /dev/null +++ b/sources/shiboken2/ApiExtractor/doxygenparser.h @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DOXYGENPARSER_H +#define DOXYGENPARSER_H + +#include "docparser.h" + +class DoxygenParser : public DocParser +{ +public: + DoxygenParser() {} + void fillDocumentation(AbstractMetaClass *metaClass) override; + Documentation retrieveModuleDocumentation() override; + Documentation retrieveModuleDocumentation(const QString& name) override; +}; + +#endif // DOXYGENPARSER_H diff --git a/sources/shiboken2/ApiExtractor/fileout.cpp b/sources/shiboken2/ApiExtractor/fileout.cpp new file mode 100644 index 0000000..e3c96d5 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/fileout.cpp @@ -0,0 +1,247 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "fileout.h" +#include "reporthandler.h" + +#include +#include +#include + +#include + +bool FileOut::dummy = false; +bool FileOut::diff = false; + +#ifdef Q_OS_LINUX +static const char colorDelete[] = "\033[31m"; +static const char colorAdd[] = "\033[32m"; +static const char colorInfo[] = "\033[36m"; +static const char colorReset[] = "\033[0m"; +#else +static const char colorDelete[] = ""; +static const char colorAdd[] = ""; +static const char colorInfo[] = ""; +static const char colorReset[] = ""; +#endif + +FileOut::FileOut(QString n): + name(n), + stream(&tmp), + isDone(false) +{} + +static int* lcsLength(QList a, QList b) +{ + const int height = a.size() + 1; + const int width = b.size() + 1; + + int *res = new int[width * height]; + + for (int row = 0; row < height; row++) + res[width * row] = 0; + + for (int col = 0; col < width; col++) + res[col] = 0; + + for (int row = 1; row < height; row++) { + for (int col = 1; col < width; col++) { + if (a[row-1] == b[col-1]) + res[width * row + col] = res[width * (row-1) + col-1] + 1; + else + res[width * row + col] = qMax(res[width * row + col-1], + res[width * (row-1) + col]); + } + } + return res; +} + +enum Type { + Add, + Delete, + Unchanged +}; + +struct Unit +{ + Unit(Type type, int pos) : + type(type), + start(pos), + end(pos) {} + + Type type; + int start; + int end; + + void print(QList a, QList b) + { + if (type == Unchanged) { + if ((end - start) > 9) { + for (int i = start; i <= start + 2; i++) + std::printf(" %s\n", a[i].data()); + std::printf("%s=\n= %d more lines\n=%s\n", colorInfo, end - start - 6, colorReset); + for (int i = end - 2; i <= end; i++) + std::printf(" %s\n", a[i].data()); + } else { + for (int i = start; i <= end; i++) + std::printf(" %s\n", a[i].data()); + } + } else if (type == Add) { + std::printf("%s", colorAdd); + for (int i = start; i <= end; i++) + std::printf("+ %s\n", b[i].data()); + std::printf("%s", colorReset); + } else if (type == Delete) { + std::printf("%s", colorDelete); + for (int i = start; i <= end; i++) + std::printf("- %s\n", a[i].data()); + std::printf("%s", colorReset); + } + } +}; + +static QList *unitAppend(QList *res, Type type, int pos) +{ + if (!res) { + res = new QList; + res->append(new Unit(type, pos)); + return res; + } + + Unit *last = res->last(); + if (last->type == type) + last->end = pos; + else + res->append(new Unit(type, pos)); + + return res; +} + +static QList *diffHelper(int *lcs, QList a, QList b, int row, int col) +{ + if (row > 0 && col > 0 && (a[row-1] == b[col-1])) { + return unitAppend(diffHelper(lcs, a, b, row - 1, col - 1), Unchanged, row - 1); + } else { + int width = b.size() + 1; + if ((col > 0) + && (row == 0 || lcs[width * row + col-1] >= lcs[width *(row-1) + col])) { + return unitAppend(diffHelper(lcs, a, b, row, col - 1), Add, col - 1); + } else if ((row > 0) + && (col == 0 || lcs[width * row + col-1] < lcs[width *(row-1) + col])) { + return unitAppend(diffHelper(lcs, a, b, row - 1, col), Delete, row - 1); + } + } + delete lcs; + return 0; +} + +static void diff(QList a, QList b) +{ + QList *res = diffHelper(lcsLength(a, b), a, b, a.size(), b.size()); + for (int i = 0; i < res->size(); i++) { + Unit *unit = res->at(i); + unit->print(a, b); + delete(unit); + } + delete(res); +} + + +FileOut::State FileOut::done() +{ + QString errorMessage; + const State result = done(&errorMessage); + if (result == Failure) + qCWarning(lcShiboken, "%s", qPrintable(errorMessage)); + return result; +} + +QString FileOut::msgCannotOpenForReading(const QFile &f) +{ + return QStringLiteral("Failed to open file '%1' for reading: %2") + .arg(QDir::toNativeSeparators(f.fileName()), f.errorString()); +} + +QString FileOut::msgCannotOpenForWriting(const QFile &f) +{ + return QStringLiteral("Failed to open file '%1' for writing: %2") + .arg(QDir::toNativeSeparators(f.fileName()), f.errorString()); +} + +FileOut::State FileOut::done(QString *errorMessage) +{ + Q_ASSERT(!isDone); + if (name.isEmpty()) + return Failure; + + isDone = true; + bool fileEqual = false; + QFile fileRead(name); + QFileInfo info(fileRead); + stream.flush(); + QByteArray original; + if (info.exists() && (diff || (info.size() == tmp.size()))) { + if (!fileRead.open(QIODevice::ReadOnly)) { + *errorMessage = msgCannotOpenForReading(fileRead); + return Failure; + } + + original = fileRead.readAll(); + fileRead.close(); + fileEqual = (original == tmp); + } + + if (fileEqual) + return Unchanged; + + if (!FileOut::dummy) { + QDir dir(info.absolutePath()); + if (!dir.mkpath(dir.absolutePath())) { + *errorMessage = QStringLiteral("unable to create directory '%1'") + .arg(QDir::toNativeSeparators(dir.absolutePath())); + return Failure; + } + + QFile fileWrite(name); + if (!fileWrite.open(QIODevice::WriteOnly)) { + *errorMessage = msgCannotOpenForWriting(fileWrite); + return Failure; + } + QTextCodec *codec = QTextCodec::codecForName("UTF-8"); + stream.setCodec(codec); + stream.setDevice(&fileWrite); + stream << tmp; + } + if (diff) { + std::printf("%sFile: %s%s\n", colorInfo, qPrintable(name), colorReset); + ::diff(original.split('\n'), tmp.split('\n')); + std::printf("\n"); + } + + return Success; +} diff --git a/sources/shiboken2/ApiExtractor/fileout.h b/sources/shiboken2/ApiExtractor/fileout.h new file mode 100644 index 0000000..539ae7a --- /dev/null +++ b/sources/shiboken2/ApiExtractor/fileout.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef FILEOUT_H +#define FILEOUT_H + +#include +#include + +QT_FORWARD_DECLARE_CLASS(QFile) + +class FileOut : public QObject +{ +private: + QByteArray tmp; + QString name; + +public: + enum State { Failure, Unchanged, Success }; + + FileOut(QString name); + ~FileOut() + { + if (!isDone) + done(); + } + + State done(); + State done(QString *errorMessage); + + static QString msgCannotOpenForReading(const QFile &f); + static QString msgCannotOpenForWriting(const QFile &f); + + QTextStream stream; + + static bool dummy; + static bool diff; + +private: + bool isDone; +}; + +#endif // FILEOUT_H diff --git a/sources/shiboken2/ApiExtractor/graph.cpp b/sources/shiboken2/ApiExtractor/graph.cpp new file mode 100644 index 0000000..65f33e3 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/graph.cpp @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "graph.h" +#include +#include +#include +#include +#include +#include +#include +#include + +struct Graph::GraphPrivate +{ + enum Color { WHITE, GRAY, BLACK }; + typedef QVector > Edges; + typedef QSet::const_iterator EdgeIterator; + + Edges edges; + + GraphPrivate(int numNodes) : edges(numNodes) + { + } + + void dfsVisit(int node, QLinkedList& result, QVector& colors) const + { + colors[node] = GRAY; + EdgeIterator it = edges[node].begin(); + for (; it != edges[node].end(); ++it) { + if (colors[*it] == WHITE) + dfsVisit(*it, result, colors); + else if (colors[*it] == GRAY) // This is not a DAG! + return; + } + colors[node] = BLACK; + result.push_front(node); + } +}; + +Graph::Graph(int numNodes) : m_d(new GraphPrivate(numNodes)) +{ +} + +Graph::~Graph() +{ + delete m_d; +} + +int Graph::nodeCount() const +{ + return m_d->edges.size(); +} + +QLinkedList Graph::topologicalSort() const +{ + int nodeCount = Graph::nodeCount(); + QLinkedList result; + QVector colors(nodeCount, GraphPrivate::WHITE); + + for (int i = 0; i < nodeCount; ++i) { + if (colors[i] == GraphPrivate::WHITE) + m_d->dfsVisit(i, result, colors); + } + + // Not a DAG! + if (result.size() != nodeCount) + return QLinkedList(); + return result; +} + +bool Graph::containsEdge(int from, int to) +{ + return m_d->edges[from].contains(to); +} + +void Graph::addEdge(int from, int to) +{ + Q_ASSERT(to < (int)m_d->edges.size()); + m_d->edges[from].insert(to); +} + +void Graph::removeEdge(int from, int to) +{ + m_d->edges[from].remove(to); +} + +void Graph::dump() const +{ + for (int i = 0; i < m_d->edges.size(); ++i) { + std::cout << i << " -> "; + std::copy(m_d->edges[i].begin(), m_d->edges[i].end(), std::ostream_iterator(std::cout, " ")); + std::cout << std::endl; + } +} + +void Graph::dumpDot(const QHash< int, QString >& nodeNames, const QString& fileName) const +{ + QFile output(fileName); + if (!output.open(QIODevice::WriteOnly)) + return; + QTextStream s(&output); + s << "digraph D {\n"; + for (int i = 0; i < m_d->edges.size(); ++i) { + for (auto it = m_d->edges[i].cbegin(), end = m_d->edges[i].cend(); it != end; ++it) + s << '"' << nodeNames[i] << "\" -> \"" << nodeNames[*it] << "\"\n"; + } + s << "}\n"; +} diff --git a/sources/shiboken2/ApiExtractor/graph.h b/sources/shiboken2/ApiExtractor/graph.h new file mode 100644 index 0000000..879ac97 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/graph.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef GRAPH_H +#define GRAPH_H + +#include +#include +#include + +/// A graph that can have their nodes topologically sorted. +class Graph +{ +public: + /// Create a new graph with \p numNodes nodes. + Graph(int numNodes); + ~Graph(); + + /// Returns the numbed of nodes in this graph. + int nodeCount() const; + /// Returns true if the graph contains the edge from -> to + bool containsEdge(int from, int to); + /// Adds an edge to this graph. + void addEdge(int from, int to); + /// Removes an edge out of this graph. + void removeEdge(int from, int to); + /// Print this graph to stdout. + void dump() const; + /** + * Dumps a dot graph to a file named \p filename. + * \param nodeNames map used to translate node ids to human readable text. + * \param fileName file name where the output should be written. + */ + void dumpDot(const QHash& nodeNames, const QString& fileName) const; + + /** + * Topologically sort this graph. + * \return A collection with all nodes topologically sorted or an empty collection if a ciclic dependency was found. + */ + QLinkedList topologicalSort() const; +private: + + struct GraphPrivate; + GraphPrivate* m_d; +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/header_paths.h b/sources/shiboken2/ApiExtractor/header_paths.h new file mode 100644 index 0000000..01d8309 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/header_paths.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef HEADER_PATHS_H +#define HEADER_PATHS_H + +#include +#include +#include + +enum class HeaderType +{ + Standard, + System, // -isystem + Framework, // macOS framework path + FrameworkSystem // macOS framework system path +}; + +class HeaderPath { +public: + QByteArray path; + HeaderType type; + + static QByteArray includeOption(const HeaderPath &p) + { + QByteArray option; + switch (p.type) { + case HeaderType::Standard: + option = QByteArrayLiteral("-I"); + break; + case HeaderType::System: + option = QByteArrayLiteral("-isystem"); + break; + case HeaderType::Framework: + option = QByteArrayLiteral("-F"); + break; + case HeaderType::FrameworkSystem: + option = QByteArrayLiteral("-iframework"); + break; + } + return option + p.path; + } +}; + +typedef QList HeaderPaths; + +#endif // HEADER_PATHS_H diff --git a/sources/shiboken2/ApiExtractor/icecc.cmake b/sources/shiboken2/ApiExtractor/icecc.cmake new file mode 100644 index 0000000..b2bf071 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/icecc.cmake @@ -0,0 +1,11 @@ +include (CMakeForceCompiler) +option(ENABLE_ICECC "Enable icecc checking, for distributed compilation") +if (ENABLE_ICECC) + find_program(ICECC icecc) + if (ICECC) + message(STATUS "icecc found! Distributed compilation for all!! huhuhu.") + cmake_force_cxx_compiler(${ICECC} icecc) + else(ICECC) + message(FATAL_ERROR "icecc NOT found! re-run cmake without -DENABLE_ICECC") + endif(ICECC) +endif(ENABLE_ICECC) diff --git a/sources/shiboken2/ApiExtractor/include.cpp b/sources/shiboken2/ApiExtractor/include.cpp new file mode 100644 index 0000000..963999b --- /dev/null +++ b/sources/shiboken2/ApiExtractor/include.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "include.h" +#include +#include +#include +#include + +QString Include::toString() const +{ + if (m_type == IncludePath) + return QLatin1String("#include <") + m_name + QLatin1Char('>'); + else if (m_type == LocalPath) + return QLatin1String("#include \"") + m_name + QLatin1Char('"'); + else + return QLatin1String("import ") + m_name + QLatin1Char(';'); +} + +uint qHash(const Include& inc) +{ + return qHash(inc.m_name); +} + +QTextStream& operator<<(QTextStream& out, const Include& include) +{ + if (include.isValid()) + out << include.toString() << endl; + return out; +} + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const Include &i) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "Include("; + if (i.isValid()) + d << "type=" << i.type() << ", file=\"" << QDir::toNativeSeparators(i.name()) << '"'; + else + d << "invalid"; + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM diff --git a/sources/shiboken2/ApiExtractor/include.h b/sources/shiboken2/ApiExtractor/include.h new file mode 100644 index 0000000..1605987 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/include.h @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef INCLUDE_H +#define INCLUDE_H + +#include +#include + +QT_BEGIN_NAMESPACE +class QTextStream; +QT_END_NAMESPACE + +class Include +{ +public: + enum IncludeType { + IncludePath, + LocalPath, + TargetLangImport + }; + + Include() : m_type(IncludePath) {} + Include(IncludeType t, const QString &nam) : m_type(t), m_name(nam) {}; + + bool isValid() const + { + return !m_name.isEmpty(); + } + + IncludeType type() const + { + return m_type; + } + + QString name() const + { + return m_name; + } + + QString toString() const; + + bool operator<(const Include& other) const + { + return m_name < other.m_name; + } + + bool operator==(const Include& other) const + { + return m_type == other.m_type && m_name == other.m_name; + } + + friend uint qHash(const Include&); + private: + IncludeType m_type; + QString m_name; +}; + +uint qHash(const Include& inc); +QTextStream& operator<<(QTextStream& out, const Include& include); +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const Include &i); +#endif + +typedef QVector IncludeList; + +#endif diff --git a/sources/shiboken2/ApiExtractor/merge.xsl b/sources/shiboken2/ApiExtractor/merge.xsl new file mode 100644 index 0000000..d0b7eaf --- /dev/null +++ b/sources/shiboken2/ApiExtractor/merge.xsl @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/shiboken2/ApiExtractor/parser/codemodel.cpp b/sources/shiboken2/ApiExtractor/parser/codemodel.cpp new file mode 100644 index 0000000..d862692 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/parser/codemodel.cpp @@ -0,0 +1,1294 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2002-2005 Roberto Raggi +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include "codemodel.h" +#include +#include +#include +#include +#include + +// Predicate to find an item by name in a list of QSharedPointer +template class ModelItemNamePredicate : public std::unary_function > +{ +public: + explicit ModelItemNamePredicate(const QString &name) : m_name(name) {} + bool operator()(const QSharedPointer &item) const { return item->name() == m_name; } + +private: + const QString m_name; +}; + +template +static QSharedPointer findModelItem(const QVector > &list, const QString &name) +{ + typedef typename QVector >::const_iterator It; + const It it = std::find_if(list.begin(), list.end(), ModelItemNamePredicate(name)); + return it != list.end() ? *it : QSharedPointer(); +} + +// --------------------------------------------------------------------------- + +CodeModel::CodeModel() : m_globalNamespace(new _NamespaceModelItem(this)) +{ +} + +CodeModel::~CodeModel() +{ +} + +NamespaceModelItem CodeModel::globalNamespace() const +{ + return m_globalNamespace; +} + +void CodeModel::addFile(FileModelItem item) +{ + m_files.append(item); +} + +FileModelItem CodeModel::findFile(const QString &name) const +{ + return findModelItem(m_files, name); +} + +CodeModelItem CodeModel::findItem(const QStringList &qualifiedName, CodeModelItem scope) const +{ + for (int i = 0; i < qualifiedName.size(); ++i) { + // ### Extend to look for members etc too. + const QString &name = qualifiedName.at(i); + + if (NamespaceModelItem ns = qSharedPointerDynamicCast<_NamespaceModelItem>(scope)) { + if (NamespaceModelItem tmp_ns = ns->findNamespace(name)) { + scope = tmp_ns; + continue; + } + } + + if (ScopeModelItem ss = qSharedPointerDynamicCast<_ScopeModelItem>(scope)) { + if (ClassModelItem cs = ss->findClass(name)) { + scope = cs; + } else if (EnumModelItem es = ss->findEnum(name)) { + if (i == qualifiedName.size() - 1) + return es; + } else if (TypeDefModelItem tp = ss->findTypeDef(name)) { + if (i == qualifiedName.size() - 1) + return tp; + } else { + // If we don't find the name in the scope chain we + // need to return an empty item to indicate failure... + return CodeModelItem(); + } + } + } + + return scope; +} + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const CodeModel *m) +{ + QDebugStateSaver s(d); + d.noquote(); + d.nospace(); + d << "CodeModel("; + if (m) { + const NamespaceModelItem globalNamespaceP = m->globalNamespace(); + if (globalNamespaceP.data()) + globalNamespaceP->formatDebug(d); + } else { + d << '0'; + } + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM + +// --------------------------------------------------------------------------- +TypeInfo TypeInfo::combine(const TypeInfo &__lhs, const TypeInfo &__rhs) +{ + TypeInfo __result = __lhs; + + __result.setConstant(__result.isConstant() || __rhs.isConstant()); + __result.setVolatile(__result.isVolatile() || __rhs.isVolatile()); + if (__rhs.referenceType() > __result.referenceType()) + __result.setReferenceType(__rhs.referenceType()); + __result.setIndirections(__result.indirections() + __rhs.indirections()); + __result.setArrayElements(__result.arrayElements() + __rhs.arrayElements()); + + return __result; +} + +bool TypeInfo::isVoid() const +{ + return m_indirections == 0 && m_referenceType == NoReference + && m_arguments.isEmpty() && m_arrayElements.isEmpty() + && m_qualifiedName.size() == 1 + && m_qualifiedName.constFirst() == QLatin1String("void"); +} + +TypeInfo TypeInfo::resolveType(TypeInfo const &__type, CodeModelItem __scope) +{ + CodeModel *__model = __scope->model(); + Q_ASSERT(__model != 0); + + return TypeInfo::resolveType(__model->findItem(__type.qualifiedName(), __scope), __type, __scope); +} + +TypeInfo TypeInfo::resolveType(CodeModelItem __item, TypeInfo const &__type, CodeModelItem __scope) +{ + // Copy the type and replace with the proper qualified name. This + // only makes sence to do if we're actually getting a resolved + // type with a namespace. We only get this if the returned type + // has more than 2 entries in the qualified name... This test + // could be improved by returning if the type was found or not. + TypeInfo otherType(__type); + if (__item && __item->qualifiedName().size() > 1) { + otherType.setQualifiedName(__item->qualifiedName()); + } + + if (TypeDefModelItem __typedef = qSharedPointerDynamicCast<_TypeDefModelItem>(__item)) { + const TypeInfo combined = TypeInfo::combine(__typedef->type(), otherType); + const CodeModelItem nextItem = __scope->model()->findItem(combined.qualifiedName(), __scope); + if (!nextItem) + return combined; + // PYSIDE-362, prevent recursion on opaque structs like + // typedef struct xcb_connection_t xcb_connection_t; + if (nextItem.data() ==__item.data()) { + std::cerr << "** WARNING Bailing out recursion of " << __FUNCTION__ + << "() on " << qPrintable(__type.qualifiedName().join(QLatin1String("::"))) + << std::endl; + return otherType; + } + return resolveType(nextItem, combined, __scope); + } + + return otherType; +} + +QString TypeInfo::toString() const +{ + QString tmp; + + tmp += m_qualifiedName.join(QLatin1String("::")); + if (isConstant()) + tmp += QLatin1String(" const"); + + if (isVolatile()) + tmp += QLatin1String(" volatile"); + + if (indirections()) + tmp += QString(indirections(), QLatin1Char('*')); + + switch (referenceType()) { + case NoReference: + break; + case LValueReference: + tmp += QLatin1Char('&'); + break; + case RValueReference: + tmp += QLatin1String("&&"); + break; + } + + if (isFunctionPointer()) { + tmp += QLatin1String(" (*)("); + for (int i = 0; i < m_arguments.count(); ++i) { + if (i != 0) + tmp += QLatin1String(", "); + + tmp += m_arguments.at(i).toString(); + } + tmp += QLatin1Char(')'); + } + + for (const QString &elt : m_arrayElements) { + tmp += QLatin1Char('['); + tmp += elt; + tmp += QLatin1Char(']'); + } + + return tmp; +} + +QStringList TypeInfo::instantiationName() const +{ + QStringList result = m_qualifiedName; + if (const int argumentCount = m_arguments.size()) { + QString &last = result.last(); + for (int i = 0; i < argumentCount; ++i) { + last += i ? QLatin1String(", ") : QLatin1String("< "); + last += m_arguments.at(i).toString(); + } + last += QLatin1String(" >"); + } + return result; +} + +bool TypeInfo::operator==(const TypeInfo &other) const +{ + if (arrayElements().count() != other.arrayElements().count()) + return false; + +#if defined (RXX_CHECK_ARRAY_ELEMENTS) // ### it'll break + for (int i = 0; i < arrayElements().count(); ++i) { + QString elt1 = arrayElements().at(i).trimmed(); + QString elt2 = other.arrayElements().at(i).trimmed(); + + if (elt1 != elt2) + return false; + } +#endif + + return flags == other.flags + && m_qualifiedName == other.m_qualifiedName + && (!m_functionPointer || m_arguments == other.m_arguments); +} + +#ifndef QT_NO_DEBUG_STREAM +template +void formatSequence(QDebug &d, It i1, It i2, const char *separator=", ") +{ + for (It i = i1; i != i2; ++i) { + if (i != i1) + d << separator; + d << *i; + } +} + +void TypeInfo::formatDebug(QDebug &d) const +{ + d << '"'; + formatSequence(d, m_qualifiedName.begin(), m_qualifiedName.end(), "\", \""); + d << '"'; + if (m_constant) + d << ", [const]"; + if (m_volatile) + d << ", [volatile]"; + if (m_indirections) + d << ", indirections=" << m_indirections; + switch (m_referenceType) { + case NoReference: + break; + case LValueReference: + d << ", [ref]"; + break; + case RValueReference: + d << ", [rvalref]"; + break; + } + if (m_functionPointer) { + d << ", function ptr("; + formatSequence(d, m_arguments.begin(), m_arguments.end()); + d << ')'; + } + if (!m_arrayElements.isEmpty()) { + d << ", array[" << m_arrayElements.size() << "]["; + formatSequence(d, m_arrayElements.begin(), m_arrayElements.end()); + d << ']'; + } +} + +QDebug operator<<(QDebug d, const TypeInfo &t) +{ + QDebugStateSaver s(d); +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) + const int verbosity = d.verbosity(); +#else + const int verbosity = 0; +#endif + d.noquote(); + d.nospace(); + d << "TypeInfo("; + if (verbosity > 2) + t.formatDebug(d); + else + d << t.toString(); + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM + +// --------------------------------------------------------------------------- +_CodeModelItem::_CodeModelItem(CodeModel *model, int kind) + : m_model(model), + m_kind(kind), + m_startLine(0), + m_startColumn(0), + m_endLine(0), + m_endColumn(0) +{ +} + +_CodeModelItem::_CodeModelItem(CodeModel *model, const QString &name, int kind) + : m_model(model), + m_kind(kind), + m_startLine(0), + m_startColumn(0), + m_endLine(0), + m_endColumn(0), + m_name(name) +{ +} + +_CodeModelItem::~_CodeModelItem() +{ +} + +int _CodeModelItem::kind() const +{ + return m_kind; +} + +QStringList _CodeModelItem::qualifiedName() const +{ + QStringList q = scope(); + + if (!name().isEmpty()) + q += name(); + + return q; +} + +QString _CodeModelItem::name() const +{ + return m_name; +} + +void _CodeModelItem::setName(const QString &name) +{ + m_name = name; +} + +QStringList _CodeModelItem::scope() const +{ + return m_scope; +} + +void _CodeModelItem::setScope(const QStringList &scope) +{ + m_scope = scope; +} + +QString _CodeModelItem::fileName() const +{ + return m_fileName; +} + +void _CodeModelItem::setFileName(const QString &fileName) +{ + m_fileName = fileName; +} + +FileModelItem _CodeModelItem::file() const +{ + return model()->findFile(fileName()); +} + +void _CodeModelItem::getStartPosition(int *line, int *column) +{ + *line = m_startLine; + *column = m_startColumn; +} + +void _CodeModelItem::setStartPosition(int line, int column) +{ + m_startLine = line; + m_startColumn = column; +} + +void _CodeModelItem::getEndPosition(int *line, int *column) +{ + *line = m_endLine; + *column = m_endColumn; +} + +void _CodeModelItem::setEndPosition(int line, int column) +{ + m_endLine = line; + m_endColumn = column; +} + +#ifndef QT_NO_DEBUG_STREAM +template +static void formatPtrSequence(QDebug &d, It i1, It i2, const char *separator=", ") +{ + for (It i = i1; i != i2; ++i) { + if (i != i1) + d << separator; + d << i->data(); + } +} + +void _CodeModelItem::formatKind(QDebug &d, int k) +{ + switch (k) { + case Kind_Argument: + d << "ArgumentModelItem"; + break; + case Kind_Class: + d << "ClassModelItem"; + break; + case Kind_Enum: + d << "EnumModelItem"; + break; + case Kind_Enumerator: + d << "EnumeratorModelItem"; + break; + case Kind_File: + d << "FileModelItem"; + break; + case Kind_Function: + d << "FunctionModelItem"; + break; + case Kind_Member: + d << "MemberModelItem"; + break; + case Kind_Namespace: + d << "NamespaceModelItem"; + break; + case Kind_Variable: + d << "VariableModelItem"; + break; + case Kind_Scope: + d << "ScopeModelItem"; + break; + case Kind_TemplateParameter: + d << "TemplateParameter"; + break; + case Kind_TypeDef: + d << "TypeDefModelItem"; + break; + default: + d << "CodeModelItem"; + break; + } +} + +void _CodeModelItem::formatDebug(QDebug &d) const +{ + d << "(\"" << name() << '"'; + if (!m_scope.isEmpty()) { + d << ", scope="; + formatSequence(d, m_scope.cbegin(), m_scope.cend(), "::"); + } + if (!m_fileName.isEmpty()) { + d << ", file=\"" << QDir::toNativeSeparators(m_fileName); + if (m_startLine > 0) + d << ':' << m_startLine; + d << '"'; + } +} + +QDebug operator<<(QDebug d, const _CodeModelItem *t) +{ + QDebugStateSaver s(d); + d.noquote(); + d.nospace(); + if (!t) { + d << "CodeModelItem(0)"; + return d; + } + _CodeModelItem::formatKind(d, t->kind()); + t->formatDebug(d); + switch (t->kind()) { + case _CodeModelItem::Kind_Class: + d << " /* class " << t->name() << " */"; + break; + case _CodeModelItem::Kind_Namespace: + d << " /* namespace " << t->name() << " */"; + break; + } + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM + +// --------------------------------------------------------------------------- +_ClassModelItem::~_ClassModelItem() +{ +} + +TemplateParameterList _ClassModelItem::templateParameters() const +{ + return m_templateParameters; +} + +void _ClassModelItem::setTemplateParameters(const TemplateParameterList &templateParameters) +{ + m_templateParameters = templateParameters; +} + +void _ClassModelItem::addBaseClass(const QString &name, CodeModel::AccessPolicy accessPolicy) +{ + _ClassModelItem::BaseClass baseClass; + baseClass.name = name; + baseClass.accessPolicy = accessPolicy; + m_baseClasses.append(baseClass); +} + +bool _ClassModelItem::extendsClass(const QString &name) const +{ + for (const BaseClass &bc : m_baseClasses) { + if (bc.name == name) + return true; + } + return false; +} + +void _ClassModelItem::setClassType(CodeModel::ClassType type) +{ + m_classType = type; +} + +CodeModel::ClassType _ClassModelItem::classType() const +{ + return m_classType; +} + +void _ClassModelItem::addPropertyDeclaration(const QString &propertyDeclaration) +{ + m_propertyDeclarations << propertyDeclaration; +} + +#ifndef QT_NO_DEBUG_STREAM +template +static void formatModelItemList(QDebug &d, const char *prefix, const List &l, + const char *separator = ", ") +{ + if (const int size = l.size()) { + d << prefix << '[' << size << "]("; + for (int i = 0; i < size; ++i) { + if (i) + d << separator; + l.at(i)->formatDebug(d); + } + d << ')'; + } +} + +void _ClassModelItem::formatDebug(QDebug &d) const +{ + _CodeModelItem::formatDebug(d); + if (!m_baseClasses.isEmpty()) { + if (m_final) + d << " [final]"; + d << ", inherits="; + d << ", inherits="; + for (int i = 0, size = m_baseClasses.size(); i < size; ++i) { + if (i) + d << ", "; + d << m_baseClasses.at(i).name << " (" << m_baseClasses.at(i).accessPolicy << ')'; + } + } + formatModelItemList(d, ", templateParameters=", m_templateParameters); + formatScopeItemsDebug(d); +} +#endif // !QT_NO_DEBUG_STREAM + +// --------------------------------------------------------------------------- +FunctionModelItem _ScopeModelItem::declaredFunction(FunctionModelItem item) +{ + for (const FunctionModelItem &fun : qAsConst(m_functions)) { + if (fun->name() == item->name() && fun->isSimilar(item)) + return fun; + + } + return FunctionModelItem(); +} + +_ScopeModelItem::~_ScopeModelItem() +{ +} + +void _ScopeModelItem::addEnumsDeclaration(const QString &enumsDeclaration) +{ + m_enumsDeclarations << enumsDeclaration; +} + +void _ScopeModelItem::addClass(ClassModelItem item) +{ + m_classes.append(item); +} + +void _ScopeModelItem::addFunction(FunctionModelItem item) +{ + m_functions.append(item); +} + +void _ScopeModelItem::addVariable(VariableModelItem item) +{ + m_variables.append(item); +} + +void _ScopeModelItem::addTypeDef(TypeDefModelItem item) +{ + m_typeDefs.append(item); +} + +void _ScopeModelItem::addEnum(EnumModelItem item) +{ + m_enums.append(item); +} + +#ifndef QT_NO_DEBUG_STREAM +template +static void formatScopeHash(QDebug &d, const char *prefix, const Hash &h, + const char *separator = ", ", + bool trailingNewLine = false) +{ + typedef typename Hash::ConstIterator HashIterator; + if (!h.isEmpty()) { + d << prefix << '[' << h.size() << "]("; + const HashIterator begin = h.begin(); + const HashIterator end = h.end(); + for (HashIterator it = begin; it != end; ++it) { // Omit the names as they are repeated + if (it != begin) + d << separator; + d << it.value().data(); + } + d << ')'; + if (trailingNewLine) + d << '\n'; + } +} + +template +static void formatScopeList(QDebug &d, const char *prefix, const List &l, + const char *separator = ", ", + bool trailingNewLine = false) +{ + if (!l.isEmpty()) { + d << prefix << '[' << l.size() << "]("; + formatPtrSequence(d, l.begin(), l.end(), separator); + d << ')'; + if (trailingNewLine) + d << '\n'; + } +} + +void _ScopeModelItem::formatScopeItemsDebug(QDebug &d) const +{ + formatScopeList(d, ", classes=", m_classes, "\n", true); + formatScopeList(d, ", enums=", m_enums, "\n", true); + formatScopeList(d, ", aliases=", m_typeDefs, "\n", true); + formatScopeList(d, ", functions=", m_functions, "\n", true); + formatScopeList(d, ", variables=", m_variables); +} + +void _ScopeModelItem::formatDebug(QDebug &d) const +{ + _CodeModelItem::formatDebug(d); + formatScopeItemsDebug(d); +} +#endif // !QT_NO_DEBUG_STREAM + +namespace { +// Predicate to match a non-template class name against the class list. +// "Vector" should match "Vector" as well as "Vector" (as seen for methods +// from within the class "Vector"). +class ClassNamePredicate : public std::unary_function +{ +public: + explicit ClassNamePredicate(const QString &name) : m_name(name) {} + bool operator()(const ClassModelItem &item) const + { + const QString &itemName = item->name(); + if (!itemName.startsWith(m_name)) + return false; + return itemName.size() == m_name.size() || itemName.at(m_name.size()) == QLatin1Char('<'); + } + +private: + const QString m_name; +}; +} // namespace + +ClassModelItem _ScopeModelItem::findClass(const QString &name) const +{ + // A fully qualified template is matched by name only + const ClassList::const_iterator it = name.contains(QLatin1Char('<')) + ? std::find_if(m_classes.begin(), m_classes.end(), ModelItemNamePredicate<_ClassModelItem>(name)) + : std::find_if(m_classes.begin(), m_classes.end(), ClassNamePredicate(name)); + return it != m_classes.end() ? *it : ClassModelItem(); +} + +VariableModelItem _ScopeModelItem::findVariable(const QString &name) const +{ + return findModelItem(m_variables, name); +} + +TypeDefModelItem _ScopeModelItem::findTypeDef(const QString &name) const +{ + return findModelItem(m_typeDefs, name); +} + +EnumModelItem _ScopeModelItem::findEnum(const QString &name) const +{ + return findModelItem(m_enums, name); +} + +FunctionList _ScopeModelItem::findFunctions(const QString &name) const +{ + FunctionList result; + for (const FunctionModelItem &func : m_functions) { + if (func->name() == name) + result.append(func); + } + return result; +} + +// --------------------------------------------------------------------------- +_NamespaceModelItem::~_NamespaceModelItem() +{ +} + +QSet _NamespaceModelItem::uniqueNamespaces() const +{ + QSet result; + for (const NamespaceModelItem &n : m_namespaces) + result.insert(n); + return result; +} + +void _NamespaceModelItem::addNamespace(NamespaceModelItem item) +{ + m_namespaces.append(item); +} + +NamespaceModelItem _NamespaceModelItem::findNamespace(const QString &name) const +{ + return findModelItem(m_namespaces, name); +} + +_FileModelItem::~_FileModelItem() +{ +} + +#ifndef QT_NO_DEBUG_STREAM +void _NamespaceModelItem::formatDebug(QDebug &d) const +{ + _ScopeModelItem::formatDebug(d); + formatScopeList(d, ", namespaces=", m_namespaces); +} +#endif // !QT_NO_DEBUG_STREAM + +// --------------------------------------------------------------------------- +_ArgumentModelItem::~_ArgumentModelItem() +{ +} + +TypeInfo _ArgumentModelItem::type() const +{ + return m_type; +} + +void _ArgumentModelItem::setType(const TypeInfo &type) +{ + m_type = type; +} + +bool _ArgumentModelItem::defaultValue() const +{ + return m_defaultValue; +} + +void _ArgumentModelItem::setDefaultValue(bool defaultValue) +{ + m_defaultValue = defaultValue; +} + +#ifndef QT_NO_DEBUG_STREAM +void _ArgumentModelItem::formatDebug(QDebug &d) const +{ + _CodeModelItem::formatDebug(d); + d << ", type=" << m_type; + if (m_defaultValue) + d << ", defaultValue=\"" << m_defaultValueExpression << '"'; +} +#endif // !QT_NO_DEBUG_STREAM +// --------------------------------------------------------------------------- +_FunctionModelItem::~_FunctionModelItem() +{ +} + +bool _FunctionModelItem::isSimilar(FunctionModelItem other) const +{ + if (name() != other->name()) + return false; + + if (isConstant() != other->isConstant()) + return false; + + if (isVariadics() != other->isVariadics()) + return false; + + if (arguments().count() != other->arguments().count()) + return false; + + // ### check the template parameters + + for (int i = 0; i < arguments().count(); ++i) { + ArgumentModelItem arg1 = arguments().at(i); + ArgumentModelItem arg2 = other->arguments().at(i); + + if (arg1->type() != arg2->type()) + return false; + } + + return true; +} + +ArgumentList _FunctionModelItem::arguments() const +{ + return m_arguments; +} + +void _FunctionModelItem::addArgument(ArgumentModelItem item) +{ + m_arguments.append(item); +} + +CodeModel::FunctionType _FunctionModelItem::functionType() const +{ + return m_functionType; +} + +void _FunctionModelItem::setFunctionType(CodeModel::FunctionType functionType) +{ + m_functionType = functionType; +} + +bool _FunctionModelItem::isVariadics() const +{ + return m_isVariadics; +} + +void _FunctionModelItem::setVariadics(bool isVariadics) +{ + m_isVariadics = isVariadics; +} + +bool _FunctionModelItem::isDeleted() const +{ + return m_isDeleted; +} + +void _FunctionModelItem::setDeleted(bool d) +{ + m_isDeleted = d; +} + +bool _FunctionModelItem::isDeprecated() const +{ + return m_isDeprecated; +} + +void _FunctionModelItem::setDeprecated(bool d) +{ + m_isDeprecated = d; +} + +bool _FunctionModelItem::isVirtual() const +{ + return m_isVirtual; +} + +void _FunctionModelItem::setVirtual(bool isVirtual) +{ + m_isVirtual = isVirtual; +} + +bool _FunctionModelItem::isInline() const +{ + return m_isInline; +} + +bool _FunctionModelItem::isOverride() const +{ + return m_isOverride; +} + +void _FunctionModelItem::setOverride(bool o) +{ + m_isOverride = o; +} + +bool _FunctionModelItem::isFinal() const +{ + return m_isFinal; +} + +void _FunctionModelItem::setFinal(bool f) +{ + m_isFinal = f; +} + +void _FunctionModelItem::setInline(bool isInline) +{ + m_isInline = isInline; +} + +bool _FunctionModelItem::isExplicit() const +{ + return m_isExplicit; +} + +void _FunctionModelItem::setExplicit(bool isExplicit) +{ + m_isExplicit = isExplicit; +} + +bool _FunctionModelItem::isAbstract() const +{ + return m_isAbstract; +} + +void _FunctionModelItem::setAbstract(bool isAbstract) +{ + m_isAbstract = isAbstract; +} + +// Qt +bool _FunctionModelItem::isInvokable() const +{ + return m_isInvokable; +} + +void _FunctionModelItem::setInvokable(bool isInvokable) +{ + m_isInvokable = isInvokable; +} + +#ifndef QT_NO_DEBUG_STREAM +void _FunctionModelItem::formatDebug(QDebug &d) const +{ + _MemberModelItem::formatDebug(d); + d << ", type=" << m_functionType; + if (m_isDeleted) + d << " [deleted!]"; + if (m_isInline) + d << " [inline]"; + if (m_isVirtual) + d << " [virtual]"; + if (m_isOverride) + d << " [override]"; + if (m_isDeprecated) + d << " [deprecated]"; + if (m_isFinal) + d << " [final]"; + if (m_isAbstract) + d << " [abstract]"; + if (m_isExplicit) + d << " [explicit]"; + if (m_isInvokable) + d << " [invokable]"; + formatModelItemList(d, ", arguments=", m_arguments); + if (m_isVariadics) + d << ",..."; +} +#endif // !QT_NO_DEBUG_STREAM + +// --------------------------------------------------------------------------- +TypeInfo _TypeDefModelItem::type() const +{ + return m_type; +} + +void _TypeDefModelItem::setType(const TypeInfo &type) +{ + m_type = type; +} + +#ifndef QT_NO_DEBUG_STREAM +void _TypeDefModelItem::formatDebug(QDebug &d) const +{ + _CodeModelItem::formatDebug(d); + d << ", type=" << m_type; +} +#endif // !QT_NO_DEBUG_STREAM + +// --------------------------------------------------------------------------- +CodeModel::AccessPolicy _EnumModelItem::accessPolicy() const +{ + return m_accessPolicy; +} + +_EnumModelItem::~_EnumModelItem() +{ +} + +void _EnumModelItem::setAccessPolicy(CodeModel::AccessPolicy accessPolicy) +{ + m_accessPolicy = accessPolicy; +} + +EnumeratorList _EnumModelItem::enumerators() const +{ + return m_enumerators; +} + +void _EnumModelItem::addEnumerator(EnumeratorModelItem item) +{ + m_enumerators.append(item); +} + +bool _EnumModelItem::isSigned() const +{ + return m_signed; +} + +void _EnumModelItem::setSigned(bool s) +{ + m_signed = s; +} + +#ifndef QT_NO_DEBUG_STREAM +void _EnumModelItem::formatDebug(QDebug &d) const +{ + _CodeModelItem::formatDebug(d); + switch (m_enumKind) { + case CEnum: + break; + case AnonymousEnum: + d << " (anonymous)"; + break; + case EnumClass: + d << " (class)"; + break; + } + if (!m_signed) + d << " (unsigned)"; + formatModelItemList(d, ", enumerators=", m_enumerators); +} +#endif // !QT_NO_DEBUG_STREAM + +// --------------------------------------------------------------------------- +_EnumeratorModelItem::~_EnumeratorModelItem() +{ +} + +QString _EnumeratorModelItem::stringValue() const +{ + return m_stringValue; +} + +void _EnumeratorModelItem::setStringValue(const QString &value) +{ + m_stringValue = value; +} + +#ifndef QT_NO_DEBUG_STREAM +void _EnumeratorModelItem::formatDebug(QDebug &d) const +{ + _CodeModelItem::formatDebug(d); + d << ", value=" << m_value << ", stringValue=\"" << m_stringValue << '"'; +} +#endif // !QT_NO_DEBUG_STREAM + +// --------------------------------------------------------------------------- +_TemplateParameterModelItem::~_TemplateParameterModelItem() +{ +} + +TypeInfo _TemplateParameterModelItem::type() const +{ + return m_type; +} + +void _TemplateParameterModelItem::setType(const TypeInfo &type) +{ + m_type = type; +} + +bool _TemplateParameterModelItem::defaultValue() const +{ + return m_defaultValue; +} + +void _TemplateParameterModelItem::setDefaultValue(bool defaultValue) +{ + m_defaultValue = defaultValue; +} + +#ifndef QT_NO_DEBUG_STREAM +void _TemplateParameterModelItem::formatDebug(QDebug &d) const +{ + _CodeModelItem::formatDebug(d); + d << ", type=" << m_type; + if (m_defaultValue) + d << " [defaultValue]"; +} +#endif // !QT_NO_DEBUG_STREAM + +// --------------------------------------------------------------------------- +TypeInfo _MemberModelItem::type() const +{ + return m_type; +} + +void _MemberModelItem::setType(const TypeInfo &type) +{ + m_type = type; +} + +CodeModel::AccessPolicy _MemberModelItem::accessPolicy() const +{ + return m_accessPolicy; +} + +_MemberModelItem::~_MemberModelItem() +{ +} + +void _MemberModelItem::setAccessPolicy(CodeModel::AccessPolicy accessPolicy) +{ + m_accessPolicy = accessPolicy; +} + +bool _MemberModelItem::isStatic() const +{ + return m_isStatic; +} + +void _MemberModelItem::setStatic(bool isStatic) +{ + m_isStatic = isStatic; +} + +bool _MemberModelItem::isConstant() const +{ + return m_isConstant; +} + +void _MemberModelItem::setConstant(bool isConstant) +{ + m_isConstant = isConstant; +} + +bool _MemberModelItem::isVolatile() const +{ + return m_isVolatile; +} + +void _MemberModelItem::setVolatile(bool isVolatile) +{ + m_isVolatile = isVolatile; +} + +bool _MemberModelItem::isAuto() const +{ + return m_isAuto; +} + +void _MemberModelItem::setAuto(bool isAuto) +{ + m_isAuto = isAuto; +} + +bool _MemberModelItem::isFriend() const +{ + return m_isFriend; +} + +void _MemberModelItem::setFriend(bool isFriend) +{ + m_isFriend = isFriend; +} + +bool _MemberModelItem::isRegister() const +{ + return m_isRegister; +} + +void _MemberModelItem::setRegister(bool isRegister) +{ + m_isRegister = isRegister; +} + +bool _MemberModelItem::isExtern() const +{ + return m_isExtern; +} + +void _MemberModelItem::setExtern(bool isExtern) +{ + m_isExtern = isExtern; +} + +bool _MemberModelItem::isMutable() const +{ + return m_isMutable; +} + +void _MemberModelItem::setMutable(bool isMutable) +{ + m_isMutable = isMutable; +} + +#ifndef QT_NO_DEBUG_STREAM +void _MemberModelItem::formatDebug(QDebug &d) const +{ + _CodeModelItem::formatDebug(d); + switch (m_accessPolicy) { + case CodeModel::Public: + d << ", public"; + break; + case CodeModel::Protected: + d << ", protected"; + break; + case CodeModel::Private: + d << ", private"; + break; + } + d << ", type="; + if (m_isConstant) + d << "const "; + if (m_isVolatile) + d << "volatile "; + if (m_isStatic) + d << "static "; + if (m_isAuto) + d << "auto "; + if (m_isFriend) + d << "friend "; + if (m_isRegister) + d << "register "; + if (m_isExtern) + d << "extern "; + if (m_isMutable) + d << "mutable "; + d << m_type; + formatScopeList(d, ", templateParameters", m_templateParameters); +} +#endif // !QT_NO_DEBUG_STREAM + +// kate: space-indent on; indent-width 2; replace-tabs on; + diff --git a/sources/shiboken2/ApiExtractor/parser/codemodel.h b/sources/shiboken2/ApiExtractor/parser/codemodel.h new file mode 100644 index 0000000..ac1fe26 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/parser/codemodel.h @@ -0,0 +1,732 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2002-2005 Roberto Raggi +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#ifndef CODEMODEL_H +#define CODEMODEL_H + +#include "codemodel_fwd.h" +#include "codemodel_enums.h" +#include "enumvalue.h" + +#include +#include +#include +#include +#include + +QT_FORWARD_DECLARE_CLASS(QDebug) + +#define DECLARE_MODEL_NODE(k) \ + enum { __node_kind = Kind_##k }; + +class CodeModel +{ +public: + enum AccessPolicy { + Public, + Protected, + Private + }; + + enum FunctionType { + Normal, + Constructor, + CopyConstructor, + MoveConstructor, + Destructor, + Signal, + Slot + }; + + enum ClassType { + Class, + Struct, + Union + }; + +public: + CodeModel(); + virtual ~CodeModel(); + + FileList files() const { return m_files; } + NamespaceModelItem globalNamespace() const; + + void addFile(FileModelItem item); + FileModelItem findFile(const QString &name) const; + + CodeModelItem findItem(const QStringList &qualifiedName, CodeModelItem scope) const; + +private: + FileList m_files; + NamespaceModelItem m_globalNamespace; + +private: + CodeModel(const CodeModel &other); + void operator = (const CodeModel &other); +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const CodeModel *m); +#endif + +class TypeInfo +{ + friend class TypeParser; +public: + TypeInfo() : flags(0), m_referenceType(NoReference) {} + + QStringList qualifiedName() const + { + return m_qualifiedName; + } + + void setQualifiedName(const QStringList &qualified_name) + { + m_qualifiedName = qualified_name; + } + + bool isVoid() const; + + bool isConstant() const + { + return m_constant; + } + + void setConstant(bool is) + { + m_constant = is; + } + + bool isVolatile() const + { + return m_volatile; + } + + void setVolatile(bool is) + { + m_volatile = is; + } + + ReferenceType referenceType() const { return m_referenceType; } + void setReferenceType(ReferenceType r) { m_referenceType = r; } + + int indirections() const + { + return m_indirections; + } + + void setIndirections(int indirections) + { + m_indirections = indirections; + } + + bool isFunctionPointer() const + { + return m_functionPointer; + } + void setFunctionPointer(bool is) + { + m_functionPointer = is; + } + + QStringList arrayElements() const + { + return m_arrayElements; + } + void setArrayElements(const QStringList &arrayElements) + { + m_arrayElements = arrayElements; + } + + QVector arguments() const { return m_arguments; } + + void setArguments(const QVector &arguments); + + void addArgument(const TypeInfo &arg) + { + m_arguments.append(arg); + } + + bool operator==(const TypeInfo &other) const; + + bool operator!=(const TypeInfo &other) const + { + return !(*this == other); + } + + // ### arrays and templates?? + + QString toString() const; + + QStringList instantiationName() const; + + static TypeInfo combine(const TypeInfo &__lhs, const TypeInfo &__rhs); + static TypeInfo resolveType(TypeInfo const &__type, CodeModelItem __scope); + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &d) const; +#endif + +private: + static TypeInfo resolveType(CodeModelItem item, TypeInfo const &__type, CodeModelItem __scope); + + QStringList m_qualifiedName; + QStringList m_arrayElements; + QVector m_arguments; + + union { + uint flags; + + struct { + uint m_constant: 1; + uint m_volatile: 1; + uint m_functionPointer: 1; + uint m_indirections: 6; + uint m_padding: 23; + }; + }; + + ReferenceType m_referenceType; +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const TypeInfo &t); +#endif + +class _CodeModelItem +{ + Q_DISABLE_COPY(_CodeModelItem) +public: + enum Kind { + /* These are bit-flags resembling inheritance */ + Kind_Scope = 0x1, + Kind_Namespace = 0x2 | Kind_Scope, + Kind_Member = 0x4, + Kind_Function = 0x8 | Kind_Member, + KindMask = 0xf, + + /* These are for classes that are not inherited from */ + FirstKind = 0x8, + Kind_Argument = 1 << FirstKind, + Kind_Class = 2 << FirstKind | Kind_Scope, + Kind_Enum = 3 << FirstKind, + Kind_Enumerator = 4 << FirstKind, + Kind_File = 5 << FirstKind | Kind_Namespace, + Kind_TemplateParameter = 7 << FirstKind, + Kind_TypeDef = 8 << FirstKind, + Kind_Variable = 9 << FirstKind | Kind_Member + }; + +public: + virtual ~_CodeModelItem(); + + int kind() const; + + QStringList qualifiedName() const; + + QString name() const; + void setName(const QString &name); + + QStringList scope() const; + void setScope(const QStringList &scope); + + QString fileName() const; + void setFileName(const QString &fileName); + + FileModelItem file() const; + + void getStartPosition(int *line, int *column); + void setStartPosition(int line, int column); + + void getEndPosition(int *line, int *column); + void setEndPosition(int line, int column); + + inline CodeModel *model() const { return m_model; } + +#ifndef QT_NO_DEBUG_STREAM + static void formatKind(QDebug &d, int k); + virtual void formatDebug(QDebug &d) const; +#endif + +protected: + explicit _CodeModelItem(CodeModel *model, int kind); + explicit _CodeModelItem(CodeModel *model, const QString &name, int kind); + +private: + CodeModel *m_model; + int m_kind; + int m_startLine; + int m_startColumn; + int m_endLine; + int m_endColumn; + QString m_name; + QString m_fileName; + QStringList m_scope; +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const _CodeModelItem *t); +#endif + +class _ScopeModelItem: public _CodeModelItem +{ +public: + DECLARE_MODEL_NODE(Scope) + + ~_ScopeModelItem(); + + ClassList classes() const { return m_classes; } + EnumList enums() const { return m_enums; } + inline FunctionList functions() const { return m_functions; } + TypeDefList typeDefs() const { return m_typeDefs; } + VariableList variables() const { return m_variables; } + + void addClass(ClassModelItem item); + void addEnum(EnumModelItem item); + void addFunction(FunctionModelItem item); + void addTypeDef(TypeDefModelItem item); + void addVariable(VariableModelItem item); + + ClassModelItem findClass(const QString &name) const; + EnumModelItem findEnum(const QString &name) const; + FunctionList findFunctions(const QString &name) const; + TypeDefModelItem findTypeDef(const QString &name) const; + VariableModelItem findVariable(const QString &name) const; + + void addEnumsDeclaration(const QString &enumsDeclaration); + QStringList enumsDeclarations() const { return m_enumsDeclarations; } + + FunctionModelItem declaredFunction(FunctionModelItem item); + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &d) const override; +#endif + +protected: + explicit _ScopeModelItem(CodeModel *model, int kind = __node_kind) + : _CodeModelItem(model, kind) {} + explicit _ScopeModelItem(CodeModel *model, const QString &name, int kind = __node_kind) + : _CodeModelItem(model, name, kind) {} + +#ifndef QT_NO_DEBUG_STREAM + void formatScopeItemsDebug(QDebug &d) const; +#endif + +private: + ClassList m_classes; + EnumList m_enums; + TypeDefList m_typeDefs; + VariableList m_variables; + FunctionList m_functions; + +private: + QStringList m_enumsDeclarations; +}; + +class _ClassModelItem: public _ScopeModelItem +{ +public: + DECLARE_MODEL_NODE(Class) + + struct BaseClass + { + QString name; + CodeModel::AccessPolicy accessPolicy = CodeModel::Public; + }; + + explicit _ClassModelItem(CodeModel *model, int kind = __node_kind) + : _ScopeModelItem(model, kind), m_classType(CodeModel::Class) {} + explicit _ClassModelItem(CodeModel *model, const QString &name, int kind = __node_kind) + : _ScopeModelItem(model, name, kind), m_classType(CodeModel::Class) {} + ~_ClassModelItem(); + + QVector baseClasses() const { return m_baseClasses; } + + void addBaseClass(const QString &name, CodeModel::AccessPolicy accessPolicy); + + TemplateParameterList templateParameters() const; + void setTemplateParameters(const TemplateParameterList &templateParameters); + + bool extendsClass(const QString &name) const; + + void setClassType(CodeModel::ClassType type); + CodeModel::ClassType classType() const; + + void addPropertyDeclaration(const QString &propertyDeclaration); + QStringList propertyDeclarations() const { return m_propertyDeclarations; } + + bool isFinal() const { return m_final; } + void setFinal(bool f) { m_final = f; } + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &d) const override; +#endif + +private: + QVector m_baseClasses; + TemplateParameterList m_templateParameters; + CodeModel::ClassType m_classType; + + QStringList m_propertyDeclarations; + bool m_final = false; +}; + +class _NamespaceModelItem: public _ScopeModelItem +{ +public: + DECLARE_MODEL_NODE(Namespace) + + explicit _NamespaceModelItem(CodeModel *model, int kind = __node_kind) + : _ScopeModelItem(model, kind) {} + explicit _NamespaceModelItem(CodeModel *model, const QString &name, int kind = __node_kind) + : _ScopeModelItem(model, name, kind) {} + ~_NamespaceModelItem(); + + NamespaceList namespaces() const { return m_namespaces; } + QSet uniqueNamespaces() const; + + void addNamespace(NamespaceModelItem item); + + NamespaceModelItem findNamespace(const QString &name) const; + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &d) const override; +#endif + +private: + NamespaceList m_namespaces; +}; + +class _FileModelItem: public _NamespaceModelItem +{ +public: + DECLARE_MODEL_NODE(File) + + explicit _FileModelItem(CodeModel *model, int kind = __node_kind) + : _NamespaceModelItem(model, kind) {} + explicit _FileModelItem(CodeModel *model, const QString &name, int kind = __node_kind) + : _NamespaceModelItem(model, name, kind) {} + ~_FileModelItem(); +}; + +class _ArgumentModelItem: public _CodeModelItem +{ +public: + DECLARE_MODEL_NODE(Argument) + + explicit _ArgumentModelItem(CodeModel *model, int kind = __node_kind) + : _CodeModelItem(model, kind), m_defaultValue(false) {} + explicit _ArgumentModelItem(CodeModel *model, const QString &name, int kind = __node_kind) + : _CodeModelItem(model, name, kind), m_defaultValue(false) {} + ~_ArgumentModelItem(); + + TypeInfo type() const; + void setType(const TypeInfo &type); + + bool defaultValue() const; + void setDefaultValue(bool defaultValue); + + QString defaultValueExpression() const { return m_defaultValueExpression; } + void setDefaultValueExpression(const QString &expr) { m_defaultValueExpression = expr; } + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &d) const override; +#endif + +private: + TypeInfo m_type; + QString m_defaultValueExpression; + bool m_defaultValue; +}; + +class _MemberModelItem: public _CodeModelItem +{ +public: + DECLARE_MODEL_NODE(Member) + + explicit _MemberModelItem(CodeModel *model, int kind = __node_kind) + : _CodeModelItem(model, kind), m_accessPolicy(CodeModel::Public), m_flags(0) {} + explicit _MemberModelItem(CodeModel *model, const QString &name, int kind = __node_kind) + : _CodeModelItem(model, name, kind), m_accessPolicy(CodeModel::Public), m_flags(0) {} + ~_MemberModelItem(); + + bool isConstant() const; + void setConstant(bool isConstant); + + bool isVolatile() const; + void setVolatile(bool isVolatile); + + bool isStatic() const; + void setStatic(bool isStatic); + + bool isAuto() const; + void setAuto(bool isAuto); + + bool isFriend() const; + void setFriend(bool isFriend); + + bool isRegister() const; + void setRegister(bool isRegister); + + bool isExtern() const; + void setExtern(bool isExtern); + + bool isMutable() const; + void setMutable(bool isMutable); + + CodeModel::AccessPolicy accessPolicy() const; + void setAccessPolicy(CodeModel::AccessPolicy accessPolicy); + + TemplateParameterList templateParameters() const { return m_templateParameters; } + void setTemplateParameters(const TemplateParameterList &templateParameters) { m_templateParameters = templateParameters; } + + TypeInfo type() const; + void setType(const TypeInfo &type); + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &d) const override; +#endif + +private: + TemplateParameterList m_templateParameters; + TypeInfo m_type; + CodeModel::AccessPolicy m_accessPolicy; + union { + struct { + uint m_isConstant: 1; + uint m_isVolatile: 1; + uint m_isStatic: 1; + uint m_isAuto: 1; + uint m_isFriend: 1; + uint m_isRegister: 1; + uint m_isExtern: 1; + uint m_isMutable: 1; + }; + uint m_flags; + }; + +}; + +class _FunctionModelItem: public _MemberModelItem +{ +public: + DECLARE_MODEL_NODE(Function) + + explicit _FunctionModelItem(CodeModel *model, int kind = __node_kind) + : _MemberModelItem(model, kind), m_functionType(CodeModel::Normal), m_flags(0) {} + explicit _FunctionModelItem(CodeModel *model, const QString &name, int kind = __node_kind) + : _MemberModelItem(model, name, kind), m_functionType(CodeModel::Normal), m_flags(0) {} + ~_FunctionModelItem(); + + ArgumentList arguments() const; + + void addArgument(ArgumentModelItem item); + + CodeModel::FunctionType functionType() const; + void setFunctionType(CodeModel::FunctionType functionType); + + bool isDeleted() const; + void setDeleted(bool d); + + bool isDeprecated() const; + void setDeprecated(bool d); + + bool isVirtual() const; + void setVirtual(bool isVirtual); + + bool isOverride() const; + void setOverride(bool o); + + bool isFinal() const; + void setFinal(bool f); + + bool isInline() const; + void setInline(bool isInline); + + bool isExplicit() const; + void setExplicit(bool isExplicit); + + bool isInvokable() const; // Qt + void setInvokable(bool isInvokable); // Qt + + bool isAbstract() const; + void setAbstract(bool isAbstract); + + bool isVariadics() const; + void setVariadics(bool isVariadics); + + bool isSimilar(FunctionModelItem other) const; + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &d) const override; +#endif + +private: + ArgumentList m_arguments; + CodeModel::FunctionType m_functionType; + union { + struct { + uint m_isDeleted: 1; + uint m_isVirtual: 1; + uint m_isOverride: 1; + uint m_isFinal: 1; + uint m_isDeprecated: 1; + uint m_isInline: 1; + uint m_isAbstract: 1; + uint m_isExplicit: 1; + uint m_isVariadics: 1; + uint m_isInvokable : 1; // Qt + }; + uint m_flags; + }; +}; + +class _VariableModelItem: public _MemberModelItem +{ +public: + DECLARE_MODEL_NODE(Variable) + + explicit _VariableModelItem(CodeModel *model, int kind = __node_kind) + : _MemberModelItem(model, kind) {} + explicit _VariableModelItem(CodeModel *model, const QString &name, int kind = __node_kind) + : _MemberModelItem(model, name, kind) {} +}; + +class _TypeDefModelItem: public _CodeModelItem +{ +public: + DECLARE_MODEL_NODE(TypeDef) + + explicit _TypeDefModelItem(CodeModel *model, int kind = __node_kind) + : _CodeModelItem(model, kind) {} + explicit _TypeDefModelItem(CodeModel *model, const QString &name, int kind = __node_kind) + : _CodeModelItem(model, name, kind) {} + + TypeInfo type() const; + void setType(const TypeInfo &type); + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &d) const override; +#endif + +private: + TypeInfo m_type; +}; + +class _EnumModelItem: public _CodeModelItem +{ +public: + DECLARE_MODEL_NODE(Enum) + + explicit _EnumModelItem(CodeModel *model, const QString &name, int kind = __node_kind) + : _CodeModelItem(model, name, kind) {} + explicit _EnumModelItem(CodeModel *model, int kind = __node_kind) + : _CodeModelItem(model, kind) {} + ~_EnumModelItem(); + + CodeModel::AccessPolicy accessPolicy() const; + void setAccessPolicy(CodeModel::AccessPolicy accessPolicy); + + bool hasValues() const { return !m_enumerators.isEmpty(); } + EnumeratorList enumerators() const; + void addEnumerator(EnumeratorModelItem item); + + EnumKind enumKind() const { return m_enumKind; } + void setEnumKind(EnumKind kind) { m_enumKind = kind; } + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &d) const override; +#endif + + bool isSigned() const; + void setSigned(bool s); + +private: + CodeModel::AccessPolicy m_accessPolicy = CodeModel::Public; + EnumeratorList m_enumerators; + EnumKind m_enumKind = CEnum; + bool m_signed = true; +}; + +class _EnumeratorModelItem: public _CodeModelItem +{ +public: + DECLARE_MODEL_NODE(Enumerator) + + explicit _EnumeratorModelItem(CodeModel *model, int kind = __node_kind) + : _CodeModelItem(model, kind) {} + explicit _EnumeratorModelItem(CodeModel *model, const QString &name, int kind = __node_kind) + : _CodeModelItem(model, name, kind) {} + ~_EnumeratorModelItem(); + + QString stringValue() const; + void setStringValue(const QString &stringValue); + + EnumValue value() const { return m_value; } + void setValue(EnumValue v) { m_value = v; } + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &d) const override; +#endif + +private: + QString m_stringValue; + EnumValue m_value; +}; + +class _TemplateParameterModelItem: public _CodeModelItem +{ +public: + DECLARE_MODEL_NODE(TemplateParameter) + + explicit _TemplateParameterModelItem(CodeModel *model, int kind = __node_kind) + : _CodeModelItem(model, kind), m_defaultValue(false) {} + explicit _TemplateParameterModelItem(CodeModel *model, const QString &name, int kind = __node_kind) + : _CodeModelItem(model, name, kind), m_defaultValue(false) {} + ~_TemplateParameterModelItem(); + + TypeInfo type() const; + void setType(const TypeInfo &type); + + bool defaultValue() const; + void setDefaultValue(bool defaultValue); + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &d) const override; +#endif + +private: + TypeInfo m_type; + bool m_defaultValue; +}; + +#endif // CODEMODEL_H + +// kate: space-indent on; indent-width 2; replace-tabs on; diff --git a/sources/shiboken2/ApiExtractor/parser/codemodel_enums.h b/sources/shiboken2/ApiExtractor/parser/codemodel_enums.h new file mode 100644 index 0000000..b8a10ba --- /dev/null +++ b/sources/shiboken2/ApiExtractor/parser/codemodel_enums.h @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CODEMODEL_ENUMS_H +#define CODEMODEL_ENUMS_H + +enum ReferenceType { + NoReference, + LValueReference, + RValueReference +}; + +enum EnumKind { + CEnum, // Standard C: enum Foo { value1, value2 } + AnonymousEnum, // enum { value1, value2 } + EnumClass // C++ 11 : enum class Foo { value1, value2 } +}; + +#endif // CODEMODEL_ENUMS_H diff --git a/sources/shiboken2/ApiExtractor/parser/codemodel_fwd.h b/sources/shiboken2/ApiExtractor/parser/codemodel_fwd.h new file mode 100644 index 0000000..f67c642 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/parser/codemodel_fwd.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2002-2005 Roberto Raggi +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#ifndef CODEMODEL_FWD_H +#define CODEMODEL_FWD_H + +#include +#include + +// forward declarations +class CodeModel; +class _ArgumentModelItem; +class _ClassModelItem; +class _CodeModelItem; +class _EnumModelItem; +class _EnumeratorModelItem; +class _FileModelItem; +class _FunctionModelItem; +class _NamespaceModelItem; +class _ScopeModelItem; +class _TemplateParameterModelItem; +class _TypeDefModelItem; +class _VariableModelItem; +class _MemberModelItem; +class TypeInfo; + +typedef QSharedPointer<_ArgumentModelItem> ArgumentModelItem; +typedef QSharedPointer<_ClassModelItem> ClassModelItem; +typedef QSharedPointer<_CodeModelItem> CodeModelItem; +typedef QSharedPointer<_EnumModelItem> EnumModelItem; +typedef QSharedPointer<_EnumeratorModelItem> EnumeratorModelItem; +typedef QSharedPointer<_FileModelItem> FileModelItem; +typedef QSharedPointer<_FunctionModelItem> FunctionModelItem; +typedef QSharedPointer<_NamespaceModelItem> NamespaceModelItem; +typedef QSharedPointer<_ScopeModelItem> ScopeModelItem; +typedef QSharedPointer<_TemplateParameterModelItem> TemplateParameterModelItem; +typedef QSharedPointer<_TypeDefModelItem> TypeDefModelItem; +typedef QSharedPointer<_VariableModelItem> VariableModelItem; +typedef QSharedPointer<_MemberModelItem> MemberModelItem; + +typedef QVector ArgumentList; +typedef QVector ClassList; +typedef QVector ItemList; +typedef QVector EnumList; +typedef QVector EnumeratorList; +typedef QVector FileList; +typedef QVector FunctionList; +typedef QVector NamespaceList; +typedef QVector ScopeList; +typedef QVector TemplateParameterList; +typedef QVector TypeDefList; +typedef QVector VariableList; +typedef QVector MemberList; + +#endif // CODEMODEL_FWD_H diff --git a/sources/shiboken2/ApiExtractor/parser/enumvalue.cpp b/sources/shiboken2/ApiExtractor/parser/enumvalue.cpp new file mode 100644 index 0000000..513bb35 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/parser/enumvalue.cpp @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "enumvalue.h" + +#include +#include +#include + +QString EnumValue::toString() const +{ + return m_type == EnumValue::Signed + ? QString::number(m_value) : QString::number(m_unsignedValue); +} + +void EnumValue::setValue(qint64 v) +{ + m_value = v; + m_type = Signed; +} + +void EnumValue::setUnsignedValue(quint64 v) +{ + m_unsignedValue = v; + m_type = Unsigned; +} + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d,const EnumValue &v) +{ + QDebugStateSaver saver(d); + d.nospace(); + d.noquote(); + d << "EnumValue("; + if (v.m_type == EnumValue::Signed) + d << v.m_value; + else + d << v.m_unsignedValue << 'u'; + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM + +QTextStream &operator<<(QTextStream &s, const EnumValue &v) +{ + if (v.m_type == EnumValue::Signed) + s << v.m_value; + else + s << v.m_unsignedValue; + return s; +} diff --git a/sources/shiboken2/ApiExtractor/parser/enumvalue.h b/sources/shiboken2/ApiExtractor/parser/enumvalue.h new file mode 100644 index 0000000..4905e89 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/parser/enumvalue.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ENUMVALUE_H +#define ENUMVALUE_H + +#include + +QT_FORWARD_DECLARE_CLASS(QDebug) +QT_FORWARD_DECLARE_CLASS(QString) +QT_FORWARD_DECLARE_CLASS(QTextStream) + +class EnumValue +{ +public: + enum Type + { + Signed, + Unsigned + }; + + QString toString() const; + + Type type() { return m_type; } + qint64 value() const { return m_value; } + quint64 unsignedValue() const { return m_unsignedValue; } + + void setValue(qint64 v); + void setUnsignedValue(quint64 v); + +private: +#ifndef QT_NO_DEBUG_STREAM + friend QDebug operator<<(QDebug, const EnumValue &); +#endif + friend QTextStream &operator<<(QTextStream &, const EnumValue &); + + union + { + qint64 m_value = 0; + quint64 m_unsignedValue; + }; + Type m_type = Signed; +}; + +#endif // ENUMVALUE_H diff --git a/sources/shiboken2/ApiExtractor/qtdocparser.cpp b/sources/shiboken2/ApiExtractor/qtdocparser.cpp new file mode 100644 index 0000000..b0058d6 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/qtdocparser.cpp @@ -0,0 +1,350 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtdocparser.h" +#include "abstractmetalang.h" +#include "reporthandler.h" +#include "typesystem.h" + +#include +#include +#include +#include +#include +#include +#include + +Documentation QtDocParser::retrieveModuleDocumentation() +{ + return retrieveModuleDocumentation(packageName()); +} + +static void formatFunctionArgTypeQuery(QTextStream &str, const AbstractMetaArgument *arg) +{ + const AbstractMetaType *metaType = arg->type(); + if (metaType->isConstant()) + str << "const " ; + switch (metaType->typeUsagePattern()) { + case AbstractMetaType::FlagsPattern: { + // Modify qualified name "QFlags" with name "Alignment" + // to "Qt::Alignment" as seen by qdoc. + const FlagsTypeEntry *flagsEntry = static_cast(metaType->typeEntry()); + QString name = flagsEntry->qualifiedCppName(); + if (name.endsWith(QLatin1Char('>')) && name.startsWith(QLatin1String("QFlags<"))) { + const int lastColon = name.lastIndexOf(QLatin1Char(':')); + if (lastColon != -1) { + name.replace(lastColon + 1, name.size() - lastColon - 1, metaType->name()); + name.remove(0, 7); + } else { + name = metaType->name(); // QFlags<> of enum in global namespace + } + } + str << name; + } + break; + case AbstractMetaType::ContainerPattern: { // QVector + str << metaType->typeEntry()->qualifiedCppName() << '<'; + const auto instantiations = metaType->instantiations(); + for (int i = 0, size = instantiations.size(); i < size; ++i) { + if (i) + str << ", "; + str << instantiations.at(i)->typeEntry()->qualifiedCppName(); + } + str << '>'; + } + break; + default: // Fully qualify enums (Qt::AlignmentFlag), nested classes, etc. + str << metaType->typeEntry()->qualifiedCppName(); + break; + } + + if (metaType->referenceType() == LValueReference) + str << " &"; + else if (metaType->referenceType() == RValueReference) + str << " &&"; + else if (metaType->indirections()) + str << ' ' << QByteArray(metaType->indirections(), '*'); +} + +enum FunctionMatchFlags +{ + MatchArgumentCount = 0x1, + MatchArgumentType = 0x2, + DescriptionOnly = 0x4 +}; + +static QString functionXQuery(const QString &classQuery, + const AbstractMetaFunction *func, + unsigned matchFlags = MatchArgumentCount | MatchArgumentType + | DescriptionOnly) +{ + QString result; + QTextStream str(&result); + const AbstractMetaArgumentList &arguments = func->arguments(); + str << classQuery << "/function[@name=\"" << func->originalName() + << "\" and @const=\"" << (func->isConstant() ? "true" : "false") << '"'; + if (matchFlags & MatchArgumentCount) + str << " and count(parameter)=" << arguments.size(); + str << ']'; + if (!arguments.isEmpty() && (matchFlags & MatchArgumentType)) { + for (int i = 0, size = arguments.size(); i < size; ++i) { + str << "/parameter[" << (i + 1) << "][@type=\""; + // Fixme: Use arguments.at(i)->type()->originalTypeDescription() + // instead to get unresolved typedefs? + formatFunctionArgTypeQuery(str, arguments.at(i)); + str << "\"]/.."; + } + } + if (matchFlags & DescriptionOnly) + str << "/description"; + return result; +} + +static QStringList signaturesFromWebXml(QString w) +{ + QStringList result; + if (w.isEmpty()) + return result; + w.prepend(QLatin1String("")); // Fake root element + w.append(QLatin1String("")); + QXmlStreamReader reader(w); + while (!reader.atEnd()) { + if (reader.readNext() == QXmlStreamReader::StartElement + && reader.name() == QLatin1String("function")) { + result.append(reader.attributes().value(QStringLiteral("signature")).toString()); + } + } + return result; +} + +static QString msgArgumentCountMatch(const AbstractMetaFunction *func, + const QStringList &matches) +{ + QString result; + QTextStream str(&result); + str << "\n Note: Querying for the argument count==" + << func->arguments().size() << " only yields " << matches.size() + << " matches"; + if (!matches.isEmpty()) + str << ": \"" << matches.join(QLatin1String("\", \"")) << '"'; + return result; +} + +QString QtDocParser::queryFunctionDocumentation(const QString &sourceFileName, + const AbstractMetaClass* metaClass, + const QString &classQuery, + const AbstractMetaFunction *func, + const DocModificationList &signedModifs, + QXmlQuery &xquery, + QString *errorMessage) +{ + DocModificationList funcModifs; + for (const DocModification &funcModif : signedModifs) { + if (funcModif.signature() == func->minimalSignature()) + funcModifs.append(funcModif); + } + + // Properties + if (func->isPropertyReader() || func->isPropertyWriter() || func->isPropertyResetter()) { + const QString propertyQuery = classQuery + QLatin1String("/property[@name=\"") + + func->propertySpec()->name() + QLatin1String("\"]/description"); + const QString properyDocumentation = getDocumentation(xquery, propertyQuery, funcModifs); + if (properyDocumentation.isEmpty()) + *errorMessage = msgCannotFindDocumentation(sourceFileName, metaClass, func, propertyQuery); + return properyDocumentation; + } + + // Query with full match of argument types + const QString fullQuery = functionXQuery(classQuery, func); + const QString result = getDocumentation(xquery, fullQuery, funcModifs); + if (!result.isEmpty()) + return result; + *errorMessage = msgCannotFindDocumentation(sourceFileName, metaClass, func, fullQuery); + if (func->arguments().isEmpty()) // No arguments, can't be helped + return result; + // Test whether some mismatch in argument types occurred by checking for + // the argument count only. Include the outer element. + QString countOnlyQuery = functionXQuery(classQuery, func, MatchArgumentCount); + QStringList signatures = + signaturesFromWebXml(getDocumentation(xquery, countOnlyQuery, funcModifs)); + if (signatures.size() == 1) { + // One match was found. Repeat the query restricted to the + // element and use the result with a warning. + countOnlyQuery = functionXQuery(classQuery, func, MatchArgumentCount | DescriptionOnly); + errorMessage->append(QLatin1String("\n Falling back to \"") + signatures.constFirst() + + QLatin1String("\" obtained by matching the argument count only.")); + return getDocumentation(xquery, countOnlyQuery, funcModifs); + } + *errorMessage += msgArgumentCountMatch(func, signatures); + return result; +} + +void QtDocParser::fillDocumentation(AbstractMetaClass* metaClass) +{ + if (!metaClass) + return; + + const AbstractMetaClass* context = metaClass->enclosingClass(); + while(context) { + if (context->enclosingClass() == 0) + break; + context = context->enclosingClass(); + } + + QString sourceFileRoot = documentationDataDirectory() + QLatin1Char('/') + + metaClass->qualifiedCppName().toLower(); + sourceFileRoot.replace(QLatin1String("::"), QLatin1String("-")); + + QFileInfo sourceFile(sourceFileRoot + QStringLiteral(".webxml")); + if (!sourceFile.exists()) + sourceFile.setFile(sourceFileRoot + QStringLiteral(".xml")); + if (!sourceFile.exists()) { + qCWarning(lcShiboken).noquote().nospace() + << "Can't find qdoc file for class " << metaClass->name() << ", tried: " + << QDir::toNativeSeparators(sourceFile.absoluteFilePath()); + return; + } + + QXmlQuery xquery; + const QString sourceFileName = sourceFile.absoluteFilePath(); + xquery.setFocus(QUrl::fromLocalFile(sourceFileName)); + + QString className = metaClass->name(); + + // Class/Namespace documentation + const QString classQuery = QLatin1String("/WebXML/document/") + + (metaClass->isNamespace() ? QLatin1String("namespace") : QLatin1String("class")) + + QLatin1String("[@name=\"") + className + QLatin1String("\"]"); + QString query = classQuery + QLatin1String("/description"); + + DocModificationList signedModifs, classModifs; + const DocModificationList &mods = metaClass->typeEntry()->docModifications(); + for (const DocModification &docModif : mods) { + if (docModif.signature().isEmpty()) + classModifs.append(docModif); + else + signedModifs.append(docModif); + } + + Documentation doc(getDocumentation(xquery, query, classModifs)); + if (doc.isEmpty()) + qCWarning(lcShiboken(), "%s", qPrintable(msgCannotFindDocumentation(sourceFileName, "class", className, query))); + metaClass->setDocumentation(doc); + + //Functions Documentation + QString errorMessage; + const AbstractMetaFunctionList &funcs = DocParser::documentableFunctions(metaClass); + for (AbstractMetaFunction *func : funcs) { + const QString documentation = + queryFunctionDocumentation(sourceFileName, metaClass, classQuery, + func, signedModifs, xquery, &errorMessage); + if (!errorMessage.isEmpty()) + qCWarning(lcShiboken(), "%s", qPrintable(errorMessage)); + func->setDocumentation(Documentation(documentation)); + } +#if 0 + // Fields + const AbstractMetaFieldList &fields = metaClass->fields(); + for (AbstractMetaField *field : fields) { + if (field->isPrivate()) + return; + + QString query = "/doxygen/compounddef/sectiondef/memberdef/name[text()=\"" + field->name() + "\"]/.."; + Documentation doc = getDocumentation(DocModificationList(), xquery, query); + field->setDocumentation(doc); + } +#endif + // Enums + const AbstractMetaEnumList &enums = metaClass->enums(); + for (AbstractMetaEnum *meta_enum : enums) { + query.clear(); + QTextStream(&query) << classQuery << "/enum[@name=\"" + << meta_enum->name() << "\"]/description"; + doc.setValue(getDocumentation(xquery, query, DocModificationList())); + if (doc.isEmpty()) { + qCWarning(lcShiboken(), "%s", + qPrintable(msgCannotFindDocumentation(sourceFileName, metaClass, meta_enum, query))); + } + meta_enum->setDocumentation(doc); + } +} + +static QString qmlReferenceLink(const QFileInfo &qmlModuleFi) +{ + QString result; + QTextStream(&result) << "The module also provides QML types."; + return result; +} + +Documentation QtDocParser::retrieveModuleDocumentation(const QString& name) +{ + // TODO: This method of acquiring the module name supposes that the target language uses + // dots as module separators in package names. Improve this. + QString moduleName = name; + moduleName.remove(0, name.lastIndexOf(QLatin1Char('.')) + 1); + const QString prefix = documentationDataDirectory() + QLatin1Char('/') + + moduleName.toLower(); + QString sourceFile = prefix + QLatin1String(".xml"); + + if (!QFile::exists(sourceFile)) + sourceFile = prefix + QLatin1String("-module.webxml"); + if (!QFile::exists(sourceFile)) { + qCWarning(lcShiboken).noquote().nospace() + << "Can't find qdoc file for module " << name << ", tried: " + << QDir::toNativeSeparators(sourceFile); + return Documentation(); + } + + QXmlQuery xquery; + xquery.setFocus(QUrl(sourceFile)); + + // Module documentation + QString query = QLatin1String("/WebXML/document/module[@name=\"") + + moduleName + QLatin1String("\"]/description"); + Documentation doc = getDocumentation(xquery, query, DocModificationList()); + if (doc.isEmpty()) { + qCWarning(lcShiboken(), "%s", qPrintable(msgCannotFindDocumentation(sourceFile, "module", name, query))); + return doc; + } + + // If a QML module info file exists, insert a link to the Qt docs. + const QFileInfo qmlModuleFi(prefix + QLatin1String("-qmlmodule.webxml")); + if (qmlModuleFi.isFile()) { + QString docString = doc.value(); + const int pos = docString.lastIndexOf(QLatin1String("")); + if (pos != -1) { + docString.insert(pos, qmlReferenceLink(qmlModuleFi)); + doc.setValue(docString); + } + } + + return doc; +} diff --git a/sources/shiboken2/ApiExtractor/qtdocparser.h b/sources/shiboken2/ApiExtractor/qtdocparser.h new file mode 100644 index 0000000..b5f0e51 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/qtdocparser.h @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTDOCPARSER_H +#define QTDOCPARSER_H + +#include "docparser.h" + +class QtDocParser : public DocParser +{ +public: + QtDocParser() {} + void fillDocumentation(AbstractMetaClass* metaClass) override; + Documentation retrieveModuleDocumentation() override; + Documentation retrieveModuleDocumentation(const QString& name) override; + +private: + QString queryFunctionDocumentation(const QString &sourceFileName, + const AbstractMetaClass* metaClass, + const QString &classQuery, + const AbstractMetaFunction *func, + const DocModificationList &signedModifs, + QXmlQuery &xquery, + QString *errorMessage); +}; + +#endif // QTDOCPARSER_H + diff --git a/sources/shiboken2/ApiExtractor/reporthandler.cpp b/sources/shiboken2/ApiExtractor/reporthandler.cpp new file mode 100644 index 0000000..36f725e --- /dev/null +++ b/sources/shiboken2/ApiExtractor/reporthandler.cpp @@ -0,0 +1,159 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "reporthandler.h" +#include "typesystem.h" +#include "typedatabase.h" +#include +#include +#include +#include + +#if _WINDOWS || NOCOLOR + #define COLOR_END "" + #define COLOR_WHITE "" + #define COLOR_YELLOW "" + #define COLOR_GREEN "" +#else + #define COLOR_END "\033[0m" + #define COLOR_WHITE "\033[1;37m" + #define COLOR_YELLOW "\033[1;33m" + #define COLOR_GREEN "\033[0;32m" +#endif + +static bool m_silent = false; +static int m_warningCount = 0; +static int m_suppressedCount = 0; +static ReportHandler::DebugLevel m_debugLevel = ReportHandler::NoDebug; +static QSet m_reportedWarnings; +static QString m_progressBuffer; +static QString m_prefix; +static int m_step_size = 0; +static int m_step = -1; +static int m_step_warning = 0; + +Q_LOGGING_CATEGORY(lcShiboken, "qt.shiboken") + +static void printProgress() +{ + std::printf("%s", m_progressBuffer.toUtf8().data()); + std::fflush(stdout); + m_progressBuffer.clear(); +} + +void ReportHandler::install() +{ + qInstallMessageHandler(ReportHandler::messageOutput); +} + +ReportHandler::DebugLevel ReportHandler::debugLevel() +{ + return m_debugLevel; +} + +void ReportHandler::setDebugLevel(ReportHandler::DebugLevel level) +{ + m_debugLevel = level; +} + +int ReportHandler::suppressedCount() +{ + return m_suppressedCount; +} + +int ReportHandler::warningCount() +{ + return m_warningCount; +} + +void ReportHandler::setProgressReference(int max) +{ + m_step_size = max; + m_step = -1; +} + +bool ReportHandler::isSilent() +{ + return m_silent; +} + +void ReportHandler::setSilent(bool silent) +{ + m_silent = silent; +} + +void ReportHandler::setPrefix(const QString &p) +{ + m_prefix = p; +} + +void ReportHandler::messageOutput(QtMsgType type, const QMessageLogContext &context, const QString &text) +{ + if (type == QtWarningMsg) { + if (m_silent || m_reportedWarnings.contains(text)) + return; + const TypeDatabase *db = TypeDatabase::instance(); + if (db && db->isSuppressedWarning(text)) { + ++m_suppressedCount; + return; + } + ++m_warningCount; + ++m_step_warning; + m_reportedWarnings.insert(text); + } + QString message = m_prefix; + if (!message.isEmpty()) + message.append(QLatin1Char(' ')); + message.append(text); + fprintf(stderr, "%s\n", qPrintable(qFormatLogMessage(type, context, message))); +} + +void ReportHandler::progress(const QString& str, ...) +{ + if (m_silent) + return; + + if (m_step == -1) { + QTextStream buf(&m_progressBuffer); + buf.setFieldWidth(45); + buf.setFieldAlignment(QTextStream::AlignLeft); + buf << str; + printProgress(); + m_step = 0; + } + m_step++; + if (m_step >= m_step_size) { + if (m_step_warning == 0) { + m_progressBuffer = QLatin1String("[" COLOR_GREEN "OK" COLOR_END "]\n"); + } else { + m_progressBuffer = QLatin1String("[" COLOR_YELLOW "WARNING" COLOR_END "]\n"); + } + printProgress(); + m_step_warning = 0; + } +} diff --git a/sources/shiboken2/ApiExtractor/reporthandler.h b/sources/shiboken2/ApiExtractor/reporthandler.h new file mode 100644 index 0000000..c122f00 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/reporthandler.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef REPORTHANDLER_H +#define REPORTHANDLER_H + +#include +#include + +Q_DECLARE_LOGGING_CATEGORY(lcShiboken) + +class ReportHandler +{ +public: + enum DebugLevel { NoDebug, SparseDebug, MediumDebug, FullDebug }; + + static void install(); + + static DebugLevel debugLevel(); + static void setDebugLevel(DebugLevel level); + + static int warningCount(); + + static int suppressedCount(); + + template + static void setProgressReference(T collection) + { + setProgressReference(collection.count()); + } + + static void setProgressReference(int max); + + static void progress(const QString &str, ...); + + static bool isDebug(DebugLevel level) + { return debugLevel() >= level; } + + static bool isSilent(); + static void setSilent(bool silent); + + static void setPrefix(const QString &p); + +private: + static void messageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg); +}; + +#endif // REPORTHANDLER_H diff --git a/sources/shiboken2/ApiExtractor/symbols.filter b/sources/shiboken2/ApiExtractor/symbols.filter new file mode 100644 index 0000000..af6c744 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/symbols.filter @@ -0,0 +1,7 @@ +{ +local: +_ZSt*; +_ZNSt*; +_ZNSs*; +_ZNKSt*; +}; diff --git a/sources/shiboken2/ApiExtractor/tests/CMakeLists.txt b/sources/shiboken2/ApiExtractor/tests/CMakeLists.txt new file mode 100644 index 0000000..860a37d --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/CMakeLists.txt @@ -0,0 +1,74 @@ +find_package(Qt5Core) +find_package(Qt5Gui) +find_package(Qt5Test) +find_package(Qt5Xml) +find_package(Qt5XmlPatterns) + +macro(declare_test testname) + # gone: qt4_automoc("${testname}.cpp") + if (EXISTS "${testname}.h") + add_executable(${testname} "${testname}.h ${testname}.cpp") + else () + add_executable(${testname} "${testname}.cpp") + endif () + include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${apiextractor_SOURCE_DIR} + ${Qt5Test_INCLUDE_DIRS} + ) + link_directories(${APIEXTRACTOR_EXTRA_LINK_DIRECTORIES}) + target_link_libraries(${testname} + ${Qt5XmlPatterns_LIBRARIES} + ${Qt5Test_LIBRARIES} + ${Qt5Core_LIBRARIES} + ${Qt5Gui_LIBRARIES} + apiextractor) + add_test(${testname} ${testname}) + if (INSTALL_TESTS) + install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${testname} + DESTINATION share/apiextractor${apiextractor_SUFFIX}/tests) + endif() +endmacro(declare_test testname) + +declare_test(testabstractmetaclass) +declare_test(testabstractmetatype) +declare_test(testaddfunction) +declare_test(testarrayargument) +declare_test(testcodeinjection) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/utf8code.txt" + "${CMAKE_CURRENT_BINARY_DIR}/utf8code.txt" COPYONLY) +declare_test(testcontainer) +declare_test(testconversionoperator) +declare_test(testconversionruletag) +declare_test(testctorinformation) +declare_test(testdroptypeentries) +declare_test(testdtorinformation) +declare_test(testenum) +declare_test(testextrainclude) +declare_test(testfunctiontag) +declare_test(testimplicitconversions) +declare_test(testinserttemplate) +declare_test(testmodifyfunction) +declare_test(testmultipleinheritance) +declare_test(testnamespace) +declare_test(testnestedtypes) +declare_test(testnumericaltypedef) +declare_test(testprimitivetypetag) +declare_test(testrefcounttag) +declare_test(testreferencetopointer) +declare_test(testremovefield) +declare_test(testremoveimplconv) +declare_test(testremoveoperatormethod) +declare_test(testresolvetype) +declare_test(testreverseoperators) +declare_test(testtemplates) +declare_test(testtoposort) +declare_test(testvaluetypedefaultctortag) +declare_test(testvoidarg) +declare_test(testtyperevision) +if (NOT DISABLE_DOCSTRINGS) + declare_test(testmodifydocumentation) + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/a.xml" + "${CMAKE_CURRENT_BINARY_DIR}/a.xml" COPYONLY) +endif() + diff --git a/sources/shiboken2/ApiExtractor/tests/a.xml b/sources/shiboken2/ApiExtractor/tests/a.xml new file mode 100644 index 0000000..3c09d38 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/a.xml @@ -0,0 +1,14 @@ + + + + + + oi + Brief description + Paragraph number 1 + Paragraph number 2 + Paragraph number 3 + + + + diff --git a/sources/shiboken2/ApiExtractor/tests/testabstractmetaclass.cpp b/sources/shiboken2/ApiExtractor/tests/testabstractmetaclass.cpp new file mode 100644 index 0000000..8a6b592 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testabstractmetaclass.cpp @@ -0,0 +1,560 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testabstractmetaclass.h" +#include "abstractmetabuilder.h" +#include +#include "testutil.h" +#include +#include + +void TestAbstractMetaClass::testClassName() +{ + const char* cppCode ="class ClassName {};"; + const char* xmlCode = ""; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 1); + QCOMPARE(classes[0]->name(), QLatin1String("ClassName")); +} + +void TestAbstractMetaClass::testClassNameUnderNamespace() +{ + const char* cppCode ="namespace Namespace { class ClassName {}; }\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); // 1 namespace + 1 class + if (classes.first()->name() != QLatin1String("ClassName")) + qSwap(classes[0], classes[1]); + + QCOMPARE(classes[0]->name(), QLatin1String("ClassName")); + QCOMPARE(classes[0]->qualifiedCppName(), QLatin1String("Namespace::ClassName")); + QCOMPARE(classes[1]->name(), QLatin1String("Namespace")); + QVERIFY(classes[1]->isNamespace()); + + // Check ctors info + QVERIFY(classes[0]->hasConstructors()); + QCOMPARE(classes[0]->functions().size(), 2); // default ctor + copy ctor + + AbstractMetaFunctionList ctors = classes[0]->queryFunctions(AbstractMetaClass::Constructors); + QCOMPARE(ctors.size(), 2); + if (ctors.first()->minimalSignature() != QLatin1String("ClassName()")) + qSwap(ctors[0], ctors[1]); + + QCOMPARE(ctors[0]->arguments().size(), 0); + QCOMPARE(ctors[0]->minimalSignature(), QLatin1String("ClassName()")); + QCOMPARE(ctors[1]->arguments().size(), 1); + QCOMPARE(ctors[1]->minimalSignature(), QLatin1String("ClassName(Namespace::ClassName)")); + + QVERIFY(!classes[0]->hasPrivateDestructor()); + QVERIFY(classes[0]->hasCloneOperator()); // implicit default copy ctor + QVERIFY(!classes[0]->hasHashFunction()); + + // This method is buggy and nobody wants to fix it or needs it fixed :-/ + // QVERIFY(classes[0]->hasNonPrivateConstructor()); +} + +static AbstractMetaFunctionList virtualFunctions(const AbstractMetaClass *c) +{ + AbstractMetaFunctionList result; + const AbstractMetaFunctionList &functions = c->functions(); + for (AbstractMetaFunction *f : functions) { + if (f->isVirtual()) + result.append(f); + } + return result; +} + +void TestAbstractMetaClass::testVirtualMethods() +{ + const char cppCode[] =R"CPP( +class A { +public: + virtual int pureVirtual() const = 0; +}; +class B : public A {}; +class C : public B { +public: + int pureVirtual() const override { return 0; } +}; +class F final : public C { +public: + int pureVirtual() const final { return 1; } +}; +)CPP"; + + const char xmlCode[] = R"XML( + + + + + + + +)XML"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 4); + AbstractMetaClass* a = AbstractMetaClass::findClass(classes, QLatin1String("A")); + AbstractMetaClass* b = AbstractMetaClass::findClass(classes, QLatin1String("B")); + AbstractMetaClass* c = AbstractMetaClass::findClass(classes, QLatin1String("C")); + const AbstractMetaClass *f = AbstractMetaClass::findClass(classes, QLatin1String("F")); + QVERIFY(f); + + AbstractMetaClass* no_class = 0; + + QCOMPARE(a->baseClass(), no_class); + QCOMPARE(b->baseClass(), a); + QCOMPARE(c->baseClass(), b); + QCOMPARE(f->baseClass(), c); + + QCOMPARE(a->functions().size(), 2); // default ctor + the pure virtual method + QCOMPARE(b->functions().size(), 2); + QCOMPARE(c->functions().size(), 2); + QCOMPARE(f->functions().size(), 2); + QVERIFY(f->attributes() & AbstractMetaAttributes::FinalCppClass); + + // implementing class, ownclass, declaringclass + AbstractMetaFunction* ctorA = a->queryFunctions(AbstractMetaClass::Constructors).first(); + AbstractMetaFunction* ctorB = b->queryFunctions(AbstractMetaClass::Constructors).first(); + AbstractMetaFunction* ctorC = c->queryFunctions(AbstractMetaClass::Constructors).first(); + QVERIFY(ctorA->isConstructor()); + QVERIFY(!ctorA->isVirtual()); + QVERIFY(ctorB->isConstructor()); + QVERIFY(!ctorB->isVirtual()); + QVERIFY(ctorC->isConstructor()); + QVERIFY(!ctorC->isVirtual()); + QCOMPARE(ctorA->implementingClass(), a); + QCOMPARE(ctorA->ownerClass(), a); + QCOMPARE(ctorA->declaringClass(), a); + + const AbstractMetaFunctionList virtualFunctionsA = virtualFunctions(a); + const AbstractMetaFunctionList virtualFunctionsB = virtualFunctions(b); + const AbstractMetaFunctionList virtualFunctionsC = virtualFunctions(c); + const AbstractMetaFunctionList virtualFunctionsF = virtualFunctions(f); + QCOMPARE(virtualFunctionsA.size(), 1); // Add a pureVirtualMethods method !? + QCOMPARE(virtualFunctionsB.size(), 1); + QCOMPARE(virtualFunctionsC.size(), 1); + QCOMPARE(virtualFunctionsF.size(), 1); + + const AbstractMetaFunction* funcA = virtualFunctionsA.constFirst(); + const AbstractMetaFunction* funcB = virtualFunctionsB.constFirst(); + const AbstractMetaFunction* funcC = virtualFunctionsC.constFirst(); + const AbstractMetaFunction* funcF = virtualFunctionsF.constFirst(); + + QCOMPARE(funcA->ownerClass(), a); + QVERIFY(funcC->attributes() & AbstractMetaAttributes::VirtualCppMethod); + QCOMPARE(funcB->ownerClass(), b); + QCOMPARE(funcC->ownerClass(), c); + QVERIFY(funcC->attributes() & AbstractMetaAttributes::OverriddenCppMethod); + QVERIFY(funcF->attributes() & AbstractMetaAttributes::FinalCppMethod); + + QCOMPARE(funcA->declaringClass(), a); + QCOMPARE(funcB->declaringClass(), a); + QCOMPARE(funcC->declaringClass(), a); + + // The next two tests could return null, because it makes more sense. + // But we have too many code written relying on this behaviour where + // implementingClass is equals to declaringClass on pure virtual functions + QCOMPARE(funcA->implementingClass(), a); + QCOMPARE(funcB->implementingClass(), a); + QCOMPARE(funcC->implementingClass(), c); +} + +void TestAbstractMetaClass::testDefaultValues() +{ + const char* cppCode ="\ + struct A {\n\ + class B {};\n\ + void method(B b = B());\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QCOMPARE(classA->queryFunctionsByName(QLatin1String("method")).count(), 1); + AbstractMetaFunction* method = classA->queryFunctionsByName(QLatin1String("method")).first(); + AbstractMetaArgument* arg = method->arguments().first(); + QCOMPARE(arg->defaultValueExpression(), arg->originalDefaultValueExpression()); +} + +void TestAbstractMetaClass::testModifiedDefaultValues() +{ + const char* cppCode ="\ + struct A {\n\ + class B {};\n\ + void method(B b = B());\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QCOMPARE(classA->queryFunctionsByName(QLatin1String("method")).count(), 1); + AbstractMetaFunction* method = classA->queryFunctionsByName(QLatin1String("method")).first(); + AbstractMetaArgument* arg = method->arguments().first(); + QCOMPARE(arg->defaultValueExpression(), QLatin1String("Hello")); + QCOMPARE(arg->originalDefaultValueExpression(), QLatin1String("A::B()")); +} + +void TestAbstractMetaClass::testInnerClassOfAPolymorphicOne() +{ + const char* cppCode ="\ + struct A {\n\ + class B {};\n\ + virtual void method();\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QVERIFY(classA->isPolymorphic()); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("A::B")); + QVERIFY(classB); + QVERIFY(!classB->isPolymorphic()); +} + +void TestAbstractMetaClass::testForwardDeclaredInnerClass() +{ + const char cppCode[] ="\ + class A {\n\ + class B;\n\ + };\n\ + class A::B {\n\ + public:\n\ + void foo();\n\ + };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("A::B")); + QVERIFY(classB); + const AbstractMetaFunction *fooF = classB->findFunction(QLatin1String("foo")); + QVERIFY(fooF); +} + +void TestAbstractMetaClass::testSpecialFunctions() +{ + const char cppCode[] ="\ + struct A {\n\ + A();\n\ + A(const A&);\n\ + A &operator=(const A&);\n\ + };\n\ + struct B {\n\ + B();\n\ + B(const B &);\n\ + B &operator=(B);\n\ + };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + AbstractMetaFunctionList ctors = classA->queryFunctions(AbstractMetaClass::Constructors); + QCOMPARE(ctors.size(), 2); + QCOMPARE(ctors.first()->functionType(), AbstractMetaFunction::ConstructorFunction); + QCOMPARE(ctors.at(1)->functionType(), AbstractMetaFunction::CopyConstructorFunction); + AbstractMetaFunctionList assigmentOps = classA->queryFunctionsByName(QLatin1String("operator=")); + QCOMPARE(assigmentOps.size(), 1); + QCOMPARE(assigmentOps.first()->functionType(), AbstractMetaFunction::AssignmentOperatorFunction); + + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(classB); + ctors = classB->queryFunctions(AbstractMetaClass::Constructors); + QCOMPARE(ctors.size(), 2); + QCOMPARE(ctors.first()->functionType(), AbstractMetaFunction::ConstructorFunction); + QCOMPARE(ctors.at(1)->functionType(), AbstractMetaFunction::CopyConstructorFunction); + assigmentOps = classA->queryFunctionsByName(QLatin1String("operator=")); + QCOMPARE(assigmentOps.size(), 1); + QCOMPARE(assigmentOps.first()->functionType(), AbstractMetaFunction::AssignmentOperatorFunction); +} + +void TestAbstractMetaClass::testClassDefaultConstructors() +{ + const char* cppCode ="\ + struct A {};\n\ + \n\ + struct B {\n\ + B();\n\ + private: \n\ + B(const B&);\n\ + };\n\ + \n\ + struct C {\n\ + C(const C&);\n\ + };\n\ + \n\ + struct D {\n\ + private: \n\ + D(const D&);\n\ + };\n\ + \n\ + struct E {\n\ + private: \n\ + ~E();\n\ + };\n\ + \n\ + struct F {\n\ + F(int, int);\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 6); + + AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QCOMPARE(classA->functions().size(), 2); + + AbstractMetaFunctionList ctors = classA->queryFunctions(AbstractMetaClass::Constructors); + QCOMPARE(ctors.size(), 2); + if (ctors.first()->minimalSignature() != QLatin1String("A()")) + qSwap(ctors[0], ctors[1]); + + QCOMPARE(ctors[0]->arguments().size(), 0); + QCOMPARE(ctors[0]->minimalSignature(), QLatin1String("A()")); + QCOMPARE(ctors[1]->arguments().size(), 1); + QCOMPARE(ctors[1]->minimalSignature(), QLatin1String("A(A)")); + + AbstractMetaClass* classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(classB); + QCOMPARE(classB->functions().size(), 2); + QCOMPARE(classB->functions().first()->minimalSignature(), QLatin1String("B()")); + + AbstractMetaClass* classC = AbstractMetaClass::findClass(classes, QLatin1String("C")); + QVERIFY(classC); + QCOMPARE(classC->functions().size(), 1); + QCOMPARE(classC->functions().first()->minimalSignature(), QLatin1String("C(C)")); + + AbstractMetaClass* classD = AbstractMetaClass::findClass(classes, QLatin1String("D")); + QVERIFY(classD); + QCOMPARE(classD->functions().size(), 1); + QCOMPARE(classD->functions().first()->minimalSignature(), QLatin1String("D(D)")); + QVERIFY(classD->functions().first()->isPrivate()); + + AbstractMetaClass* classE = AbstractMetaClass::findClass(classes, QLatin1String("E")); + QVERIFY(classE); + QVERIFY(classE->hasPrivateDestructor()); + QCOMPARE(classE->functions().size(), 0); + + AbstractMetaClass* classF = AbstractMetaClass::findClass(classes, QLatin1String("F")); + QVERIFY(classF); + + ctors = classF->queryFunctions(AbstractMetaClass::Constructors); + QCOMPARE(ctors.size(), 2); + if (ctors.first()->minimalSignature() != QLatin1String("F(int,int)")) + qSwap(ctors[0], ctors[1]); + + QCOMPARE(ctors[0]->arguments().size(), 2); + QCOMPARE(ctors[0]->minimalSignature(), QLatin1String("F(int,int)")); + QCOMPARE(ctors[1]->arguments().size(), 1); + QCOMPARE(ctors[1]->minimalSignature(), QLatin1String("F(F)")); +} + +void TestAbstractMetaClass::testClassInheritedDefaultConstructors() +{ + const char* cppCode ="\ + struct A {\n\ + A();\n\ + private: \n\ + A(const A&);\n\ + };\n\ + struct B : public A {};\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + + AbstractMetaFunctionList ctors = classA->queryFunctions(AbstractMetaClass::Constructors); + QCOMPARE(ctors.size(), 2); + if (ctors.first()->minimalSignature() != QLatin1String("A()")) + qSwap(ctors[0], ctors[1]); + + QCOMPARE(ctors[0]->arguments().size(), 0); + QCOMPARE(ctors[0]->minimalSignature(), QLatin1String("A()")); + QCOMPARE(ctors[1]->arguments().size(), 1); + QCOMPARE(ctors[1]->minimalSignature(), QLatin1String("A(A)")); + QVERIFY(ctors[1]->isPrivate()); + + AbstractMetaClass* classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(classB); + + ctors = classB->queryFunctions(AbstractMetaClass::Constructors); + QCOMPARE(ctors.size(), 1); + QCOMPARE(ctors.first()->arguments().size(), 0); + QCOMPARE(ctors.first()->minimalSignature(), QLatin1String("B()")); +} + +void TestAbstractMetaClass::testAbstractClassDefaultConstructors() +{ + const char* cppCode ="\ + struct A {\n\ + virtual void method() = 0;\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 1); + AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + + AbstractMetaFunctionList ctors = classA->queryFunctions(AbstractMetaClass::Constructors); + QCOMPARE(ctors.size(), 1); + QCOMPARE(ctors.first()->arguments().size(), 0); + QCOMPARE(ctors.first()->minimalSignature(), QLatin1String("A()")); +} + +void TestAbstractMetaClass::testObjectTypesMustNotHaveCopyConstructors() +{ + const char* cppCode ="struct A {};\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 1); + AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + + AbstractMetaFunctionList ctors = classA->queryFunctions(AbstractMetaClass::Constructors); + QCOMPARE(ctors.size(), 1); + QCOMPARE(ctors.first()->arguments().size(), 0); + QCOMPARE(ctors.first()->minimalSignature(), QLatin1String("A()")); +} + +void TestAbstractMetaClass::testIsPolymorphic() +{ + const char* cppCode = "\ + class A\n\ + {\n\ + public:\n\ + A();\n\ + inline bool abc() const {}\n\ + };\n\ + \n\ + class B : public A\n\ + {\n\ + public:\n\ + B();\n\ + inline bool abc() const {}\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + AbstractMetaClass* b = AbstractMetaClass::findClass(classes, QLatin1String("A")); + + QVERIFY(!b->isPolymorphic()); + AbstractMetaClass* a = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(!a->isPolymorphic()); +} + +QTEST_APPLESS_MAIN(TestAbstractMetaClass) diff --git a/sources/shiboken2/ApiExtractor/tests/testabstractmetaclass.h b/sources/shiboken2/ApiExtractor/tests/testabstractmetaclass.h new file mode 100644 index 0000000..cb0b669 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testabstractmetaclass.h @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTABSTRACTMETACLASS_H +#define TESTABSTRACTMETACLASS_H + +#include + +class AbstractMetaBuilder; + +class TestAbstractMetaClass : public QObject +{ + Q_OBJECT +private slots: + void testClassName(); + void testClassNameUnderNamespace(); + void testVirtualMethods(); + void testDefaultValues(); + void testModifiedDefaultValues(); + void testInnerClassOfAPolymorphicOne(); + void testForwardDeclaredInnerClass(); + void testSpecialFunctions(); + void testClassDefaultConstructors(); + void testClassInheritedDefaultConstructors(); + void testAbstractClassDefaultConstructors(); + void testObjectTypesMustNotHaveCopyConstructors(); + void testIsPolymorphic(); +}; + +#endif // TESTABSTRACTMETACLASS_H diff --git a/sources/shiboken2/ApiExtractor/tests/testabstractmetatype.cpp b/sources/shiboken2/ApiExtractor/tests/testabstractmetatype.cpp new file mode 100644 index 0000000..7f1361a --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testabstractmetatype.cpp @@ -0,0 +1,216 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testabstractmetatype.h" +#include +#include "testutil.h" +#include +#include + +void TestAbstractMetaType::testConstCharPtrType() +{ + const char* cppCode ="const char* justAtest();\n"; + const char* xmlCode = "\n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + QCOMPARE(builder->globalFunctions().size(), 1); + AbstractMetaFunction* func = builder->globalFunctions().first(); + AbstractMetaType* rtype = func->type(); + // Test properties of const char* + QVERIFY(rtype); + QCOMPARE(rtype->package(), QLatin1String("Foo")); + QCOMPARE(rtype->name(), QLatin1String("char")); + QVERIFY(rtype->isConstant()); + QVERIFY(!rtype->isArray()); + QVERIFY(!rtype->isContainer()); + QVERIFY(!rtype->isObject()); + QVERIFY(!rtype->isPrimitive()); // const char* differs from char, so it's not considered a primitive type by apiextractor + QVERIFY(rtype->isNativePointer()); + QVERIFY(!rtype->isQObject()); + QCOMPARE(rtype->referenceType(), NoReference); + QVERIFY(!rtype->isValue()); + QVERIFY(!rtype->isValuePointer()); +} + +void TestAbstractMetaType::testApiVersionSupported() +{ + const char* cppCode ="class foo {}; class foo2 {};\n\ + void justAtest(); void justAtest3();\n"; + const char* xmlCode = "\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false, "1.0")); + QVERIFY(!builder.isNull()); + + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.size(), 2); + + + AbstractMetaFunctionList functions = builder->globalFunctions(); + QCOMPARE(functions.size(), 2); +} + + +void TestAbstractMetaType::testApiVersionNotSupported() +{ + const char* cppCode ="class object {};\n"; + const char* xmlCode = "\n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, true, "0.1")); + QVERIFY(!builder.isNull()); + + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.size(), 1); +} + +void TestAbstractMetaType::testCharType() +{ + const char* cppCode ="char justAtest(); class A {};\n"; + const char* xmlCode = "\n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.size(), 1); + QCOMPARE(classes.first()->package(), QLatin1String("Foo")); + + AbstractMetaFunctionList functions = builder->globalFunctions(); + QCOMPARE(functions.size(), 1); + AbstractMetaFunction* func = functions.first(); + AbstractMetaType* rtype = func->type(); + // Test properties of const char* + QVERIFY(rtype); + QCOMPARE(rtype->package(), QLatin1String("Foo")); + QCOMPARE(rtype->name(), QLatin1String("char")); + QVERIFY(!rtype->isConstant()); + QVERIFY(!rtype->isArray()); + QVERIFY(!rtype->isContainer()); + QVERIFY(!rtype->isObject()); + QVERIFY(rtype->isPrimitive()); + QVERIFY(!rtype->isNativePointer()); + QVERIFY(!rtype->isQObject()); + QCOMPARE(rtype->referenceType(), NoReference); + QVERIFY(!rtype->isValue()); + QVERIFY(!rtype->isValuePointer()); +} + +void TestAbstractMetaType::testTypedef() +{ + const char* cppCode ="\ + struct A {\n\ + void someMethod();\n\ + };\n\ + typedef A B;\n\ + typedef B C;\n"; + const char* xmlCode = "\n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.size(), 1); + const AbstractMetaClass *c = AbstractMetaClass::findClass(classes, QLatin1String("C")); + QVERIFY(c); + QVERIFY(c->isTypeDef()); +} + +void TestAbstractMetaType::testTypedefWithTemplates() +{ + const char* cppCode ="\ + template\n\ + class A {};\n\ + \n\ + class B {};\n\ + typedef A C;\n\ + \n\ + void func(C c);\n"; + const char* xmlCode = "\n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.size(), 1); + AbstractMetaFunctionList functions = builder->globalFunctions(); + QCOMPARE(functions.count(), 1); + AbstractMetaFunction* function = functions.first(); + AbstractMetaArgumentList args = function->arguments(); + QCOMPARE(args.count(), 1); + AbstractMetaArgument* arg = args.first(); + AbstractMetaType* metaType = arg->type(); + QCOMPARE(metaType->cppSignature(), QLatin1String("A")); +} + + +void TestAbstractMetaType::testObjectTypeUsedAsValue() +{ + const char* cppCode ="\ + class A {\n\ + void method(A);\n\ + };\n"; + const char* xmlCode = "\n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.size(), 1); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + AbstractMetaFunctionList overloads = classA->queryFunctionsByName(QLatin1String("method")); + QCOMPARE(overloads.count(), 1); + AbstractMetaFunction* method = overloads.first(); + QVERIFY(method); + AbstractMetaArgumentList args = method->arguments(); + QCOMPARE(args.count(), 1); + AbstractMetaArgument* arg = args.first(); + AbstractMetaType* metaType = arg->type(); + QCOMPARE(metaType->cppSignature(), QLatin1String("A")); + QVERIFY(metaType->isValue()); + QVERIFY(metaType->typeEntry()->isObject()); +} + +QTEST_APPLESS_MAIN(TestAbstractMetaType) diff --git a/sources/shiboken2/ApiExtractor/tests/testabstractmetatype.h b/sources/shiboken2/ApiExtractor/tests/testabstractmetatype.h new file mode 100644 index 0000000..b2aa754 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testabstractmetatype.h @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTABSTRACTMETATYPE_H +#define TESTABSTRACTMETATYPE_H + +#include + +class TestAbstractMetaType : public QObject +{ + Q_OBJECT +private slots: + void testConstCharPtrType(); + void testCharType(); + void testTypedef(); + void testTypedefWithTemplates(); + void testApiVersionSupported(); + void testApiVersionNotSupported(); + void testObjectTypeUsedAsValue(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testaddfunction.cpp b/sources/shiboken2/ApiExtractor/tests/testaddfunction.cpp new file mode 100644 index 0000000..2a95324 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testaddfunction.cpp @@ -0,0 +1,453 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testaddfunction.h" +#include +#include "testutil.h" +#include +#include + +void TestAddFunction::testParsingFuncNameAndConstness() +{ + // generic test... + const char sig1[] = "func(type1, const type2, const type3* const)"; + AddedFunction f1(QLatin1String(sig1), QLatin1String("void")); + QCOMPARE(f1.name(), QLatin1String("func")); + QCOMPARE(f1.arguments().count(), 3); + AddedFunction::TypeInfo retval = f1.returnType(); + QCOMPARE(retval.name, QLatin1String("void")); + QCOMPARE(retval.indirections, 0); + QCOMPARE(retval.isConstant, false); + QCOMPARE(retval.isReference, false); + + // test with a ugly template as argument and other ugly stuff + const char sig2[] = " _fu__nc_ ( type1, const type2, const Abc * > * *, const type3* const ) const "; + AddedFunction f2(QLatin1String(sig2), QLatin1String("const Abc * > * *")); + QCOMPARE(f2.name(), QLatin1String("_fu__nc_")); + QVector< AddedFunction::TypeInfo > args = f2.arguments(); + QCOMPARE(args.count(), 4); + retval = f2.returnType(); + QCOMPARE(retval.name, QLatin1String("Abc * >")); + QCOMPARE(retval.indirections, 2); + QCOMPARE(retval.isConstant, true); + QCOMPARE(retval.isReference, false); + retval = args[2]; + QCOMPARE(retval.name, QLatin1String("Abc * >")); + QCOMPARE(retval.indirections, 2); + QCOMPARE(retval.isConstant, true); + QCOMPARE(retval.isReference, false); + + // function with no args. + const char sig3[] = "func()"; + AddedFunction f3(QLatin1String(sig3), QLatin1String("void")); + QCOMPARE(f3.name(), QLatin1String("func")); + QCOMPARE(f3.arguments().count(), 0); +} + +void TestAddFunction::testAddFunction() +{ + const char cppCode[] = "struct B {}; struct A { void a(int); };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + TypeDatabase* typeDb = TypeDatabase::instance(); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QCOMPARE(classA->functions().count(), 4); // default ctor, default copy ctor, func a() and the added function + + AbstractMetaFunction* addedFunc = classA->functions().last(); + QCOMPARE(addedFunc->visibility(), AbstractMetaFunction::Protected); + QCOMPARE(addedFunc->functionType(), AbstractMetaFunction::NormalFunction); + QVERIFY(addedFunc->isUserAdded()); + QCOMPARE(addedFunc->ownerClass(), classA); + QCOMPARE(addedFunc->implementingClass(), classA); + QCOMPARE(addedFunc->declaringClass(), classA); + QVERIFY(!addedFunc->isVirtual()); + QVERIFY(!addedFunc->isSignal()); + QVERIFY(!addedFunc->isSlot()); + QVERIFY(!addedFunc->isStatic()); + + AbstractMetaType* returnType = addedFunc->type(); + QCOMPARE(returnType->typeEntry(), typeDb->findPrimitiveType(QLatin1String("int"))); + AbstractMetaArgumentList args = addedFunc->arguments(); + QCOMPARE(args.count(), 3); + QCOMPARE(args[0]->type()->typeEntry(), returnType->typeEntry()); + QCOMPARE(args[1]->defaultValueExpression(), QLatin1String("4.6")); + QCOMPARE(args[2]->type()->typeEntry(), typeDb->findType(QLatin1String("B"))); +} + +void TestAddFunction::testAddFunctionConstructor() +{ + const char cppCode[] = "struct A { A() {} };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QCOMPARE(classA->functions().count(), 3); // default and added ctors + AbstractMetaFunction* addedFunc = classA->functions().last(); + QCOMPARE(addedFunc->visibility(), AbstractMetaFunction::Public); + QCOMPARE(addedFunc->functionType(), AbstractMetaFunction::ConstructorFunction); + QCOMPARE(addedFunc->arguments().size(), 1); + QVERIFY(addedFunc->isUserAdded()); + QVERIFY(!addedFunc->type()); +} + +void TestAddFunction::testAddFunctionTagDefaultValues() +{ + const char cppCode[] = "struct A {};\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QCOMPARE(classA->functions().count(), 3); // default ctor, default copy ctor and the added function + AbstractMetaFunction* addedFunc = classA->functions().last(); + QCOMPARE(addedFunc->visibility(), AbstractMetaFunction::Public); + QCOMPARE(addedFunc->functionType(), AbstractMetaFunction::NormalFunction); + QVERIFY(addedFunc->isUserAdded()); + QVERIFY(!addedFunc->type()); +} + +void TestAddFunction::testAddFunctionCodeSnippets() +{ + const char cppCode[] = "struct A {};\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + Hi!, I am the code.\n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + AbstractMetaFunction* addedFunc = classA->functions().last(); + QVERIFY(addedFunc->hasInjectedCode()); +} + +void TestAddFunction::testAddFunctionWithoutParenteses() +{ + const char sig1[] = "func"; + AddedFunction f1(QLatin1String(sig1), QLatin1String("void")); + + QCOMPARE(f1.name(), QLatin1String("func")); + QCOMPARE(f1.arguments().count(), 0); + QCOMPARE(f1.isConstant(), false); + + const char cppCode[] = "struct A {};\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + Hi!, I am the code.\n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("func")); + QVERIFY(addedFunc); + QVERIFY(addedFunc->hasInjectedCode()); + QCOMPARE(addedFunc->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode).count(), 1); +} + +void TestAddFunction::testAddFunctionWithDefaultArgs() +{ + const char sig1[] = "func"; + AddedFunction f1(QLatin1String(sig1), QLatin1String("void")); + + QCOMPARE(f1.name(), QLatin1String("func")); + QCOMPARE(f1.arguments().count(), 0); + QCOMPARE(f1.isConstant(), false); + + const char cppCode[] = "struct A { };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("func")); + QVERIFY(addedFunc); + AbstractMetaArgument *arg = addedFunc->arguments()[1]; + QCOMPARE(arg->defaultValueExpression(), QLatin1String("2")); +} + +void TestAddFunction::testAddFunctionAtModuleLevel() +{ + const char cppCode[] = "struct A { };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + custom_code();\n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + + TypeDatabase* typeDb = TypeDatabase::instance(); + + AddedFunctionList addedFuncs = typeDb->findGlobalUserFunctions(QLatin1String("func")); + + QCOMPARE(addedFuncs.size(), 1); + + FunctionModificationList mods = typeDb->functionModifications(QLatin1String("func(int,int)")); + + QCOMPARE(mods.size(), 1); + QVERIFY(mods.first().isCodeInjection()); + CodeSnip snip = mods.first().snips.first(); + QCOMPARE(snip.code(), QLatin1String("custom_code();")); +} + +void TestAddFunction::testAddFunctionWithVarargs() +{ + const char sig1[] = "func(int,char,...)"; + AddedFunction f1( QLatin1String(sig1), QLatin1String("void")); + + QCOMPARE(f1.name(), QLatin1String("func")); + QCOMPARE(f1.arguments().count(), 3); + QVERIFY(!f1.isConstant()); + + const char cppCode[] = "struct A {};\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("func")); + QVERIFY(addedFunc); + const AbstractMetaArgument* arg = addedFunc->arguments().last(); + QVERIFY(arg->type()->isVarargs()); + QVERIFY(arg->type()->typeEntry()->isVarargs()); +} + +void TestAddFunction::testAddStaticFunction() +{ + const char cppCode[] = "struct A { };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + custom_code();\n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("func")); + QVERIFY(addedFunc); + QVERIFY(addedFunc->isStatic()); +} + +void TestAddFunction::testAddGlobalFunction() +{ + const char cppCode[] = "struct A { };struct B {};\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + custom_code();\n\ + \n\ + \n\ + custom_code();\n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaFunctionList globalFuncs = builder->globalFunctions(); + QCOMPARE(globalFuncs.count(), 2); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(builder->classes(), QLatin1String("B")); + QVERIFY(classB); + QVERIFY(!classB->findFunction(QLatin1String("globalFunc"))); + QVERIFY(!classB->findFunction(QLatin1String("globalFunc2"))); + QVERIFY(!globalFuncs[0]->injectedCodeSnips().isEmpty()); + QVERIFY(!globalFuncs[1]->injectedCodeSnips().isEmpty()); +} + +void TestAddFunction::testAddFunctionWithApiVersion() +{ + const char cppCode[] = ""; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + custom_code();\n\ + \n\ + \n\ + custom_code();\n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, true, "0.1")); + QVERIFY(!builder.isNull()); + AbstractMetaFunctionList globalFuncs = builder->globalFunctions(); + QCOMPARE(globalFuncs.count(), 1); +} + +void TestAddFunction::testModifyAddedFunction() +{ + const char cppCode[] = "class Foo { };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + custom_code();\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + AbstractMetaClass* foo = AbstractMetaClass::findClass(classes, QLatin1String("Foo")); + const AbstractMetaFunction* method = foo->findFunction(QLatin1String("method")); + QCOMPARE(method->arguments().size(), 2); + AbstractMetaArgument* arg = method->arguments().at(1); + QCOMPARE(arg->defaultValueExpression(), QLatin1String("0")); + QCOMPARE(arg->name(), QLatin1String("varName")); + QCOMPARE(method->argumentName(2), QLatin1String("varName")); +} + +void TestAddFunction::testAddFunctionOnTypedef() +{ + const char cppCode[] = "template class Foo { }; typedef Foo FooInt;\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + custom_code();\n\ + \n\ + \n\ + custom_code();\n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + AbstractMetaClass* foo = AbstractMetaClass::findClass(classes, QLatin1String("FooInt")); + QVERIFY(foo); + QVERIFY(foo->hasNonPrivateConstructor()); + const AbstractMetaFunctionList &lst = foo->queryFunctions(AbstractMetaClass::Constructors); + for (const AbstractMetaFunction *f : lst) + QVERIFY(f->signature().startsWith(f->name())); + QCOMPARE(lst.size(), 2); + const AbstractMetaFunction* method = foo->findFunction(QLatin1String("method")); + QVERIFY(method); +} + +void TestAddFunction::testAddFunctionWithTemplateArg() +{ + const char cppCode[] = "template class Foo { };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + QCOMPARE(builder->globalFunctions().size(), 1); + AbstractMetaFunction* func = builder->globalFunctions().first(); + AbstractMetaArgument* arg = func->arguments().first(); + QCOMPARE(arg->type()->instantiations().count(), 1); +} + +QTEST_APPLESS_MAIN(TestAddFunction) + diff --git a/sources/shiboken2/ApiExtractor/tests/testaddfunction.h b/sources/shiboken2/ApiExtractor/tests/testaddfunction.h new file mode 100644 index 0000000..d95f0ec --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testaddfunction.h @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTADDFUNCTION_H +#define TESTADDFUNCTION_H +#include + +class TestAddFunction : public QObject +{ + Q_OBJECT +private slots: + void testParsingFuncNameAndConstness(); + void testAddFunction(); + void testAddFunctionConstructor(); + void testAddFunctionTagDefaultValues(); + void testAddFunctionCodeSnippets(); + void testAddFunctionWithoutParenteses(); + void testAddFunctionWithDefaultArgs(); + void testAddFunctionAtModuleLevel(); + void testAddFunctionWithVarargs(); + void testAddStaticFunction(); + void testAddGlobalFunction(); + void testAddFunctionWithApiVersion(); + void testModifyAddedFunction(); + void testAddFunctionOnTypedef(); + void testAddFunctionWithTemplateArg(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testarrayargument.cpp b/sources/shiboken2/ApiExtractor/tests/testarrayargument.cpp new file mode 100644 index 0000000..a8b9a2e --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testarrayargument.cpp @@ -0,0 +1,171 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testarrayargument.h" +#include +#include "testutil.h" +#include +#include + +void TestArrayArgument::testArrayArgumentWithSizeDefinedByInteger() +{ + const char* cppCode ="\ + struct A {\n\ + enum SomeEnum { Value0, Value1, NValues };\n\ + void method(double[3]);\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(builder->classes(), QLatin1String("A")); + QVERIFY(classA); + + const AbstractMetaArgument* arg = classA->functions().last()->arguments().first(); + QVERIFY(arg->type()->isArray()); + QCOMPARE(arg->type()->arrayElementCount(), 3); + QCOMPARE(arg->type()->arrayElementType()->name(), QLatin1String("double")); +} + +static QString functionMinimalSignature(const AbstractMetaClass *c, const QString &name) +{ + const AbstractMetaFunction *f = c->findFunction(name); + return f ? f->minimalSignature() : QString(); +} + +void TestArrayArgument::testArraySignature() +{ + const char cppCode[] ="\ + struct A {\n\ + void mi1(int arg[5]);\n\ + void mi1c(const int arg[5]);\n\ + void mi1cu(const int arg[]);\n\ + void mc1cu(const char arg[]);\n\ + void mc1cup(const char *arg[]);\n\ + void muc2(unsigned char *arg[2][3]);\n\ + void mc2c(const char *arg[5][6]);\n\ + void mc2cu(const char arg[][2]);\n\ + };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(builder->classes(), QLatin1String("A")); + QCOMPARE(functionMinimalSignature(classA, QLatin1String("mi1")), + QLatin1String("mi1(int[5])")); + QCOMPARE(functionMinimalSignature(classA, QLatin1String("mi1c")), + QLatin1String("mi1c(const int[5])")); + QCOMPARE(functionMinimalSignature(classA, QLatin1String("mi1cu")), + QLatin1String("mi1cu(const int[])")); + QCOMPARE(functionMinimalSignature(classA, QLatin1String("mc1cu")), + QLatin1String("mc1cu(const char*)")); + QCOMPARE(functionMinimalSignature(classA, QLatin1String("mc1cup")), + QLatin1String("mc1cup(const char*[])")); + QCOMPARE(functionMinimalSignature(classA, QLatin1String("muc2")), + QLatin1String("muc2(unsigned char*[2][3])")); + QCOMPARE(functionMinimalSignature(classA, QLatin1String("mc2c")), + QLatin1String("mc2c(const char*[5][6])")); + QCOMPARE(functionMinimalSignature(classA, QLatin1String("mc2cu")), + QLatin1String("mc2cu(const char[][2])")); +} + +void TestArrayArgument::testArrayArgumentWithSizeDefinedByEnumValue() +{ + const char* cppCode ="\ + struct A {\n\ + enum SomeEnum { Value0, Value1, NValues };\n\ + void method(double[NValues]);\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClass *classA = AbstractMetaClass::findClass(builder->classes(), QLatin1String("A")); + QVERIFY(classA); + + AbstractMetaEnum* someEnum = classA->findEnum(QLatin1String("SomeEnum")); + QVERIFY(someEnum); + AbstractMetaEnumValue *nvalues = classA->findEnumValue(QLatin1String("NValues")); + QVERIFY(nvalues); + + const AbstractMetaArgument* arg = classA->functions().last()->arguments().first(); + QVERIFY(arg->type()->isArray()); + QCOMPARE(arg->type()->arrayElementCount(), nvalues->value().value()); + QCOMPARE(arg->type()->arrayElementType()->name(), QLatin1String("double")); +}; + +void TestArrayArgument::testArrayArgumentWithSizeDefinedByEnumValueFromGlobalEnum() +{ + const char* cppCode ="\ + enum SomeEnum { Value0, Value1, NValues };\n\ + struct A {\n\ + void method(double[NValues]);\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(builder->classes(), QLatin1String("A")); + QVERIFY(classA); + + AbstractMetaEnum* someEnum = builder->globalEnums().first(); + QVERIFY(someEnum); + const AbstractMetaEnumValue *nvalues = someEnum->findEnumValue(QLatin1String("NValues")); + QVERIFY(nvalues); + + const AbstractMetaArgument* arg = classA->functions().last()->arguments().first(); + QVERIFY(arg->type()->isArray()); + QCOMPARE(arg->type()->arrayElementCount(), nvalues->value().value()); + QCOMPARE(arg->type()->arrayElementType()->name(), QLatin1String("double")); +}; + +QTEST_APPLESS_MAIN(TestArrayArgument) diff --git a/sources/shiboken2/ApiExtractor/tests/testarrayargument.h b/sources/shiboken2/ApiExtractor/tests/testarrayargument.h new file mode 100644 index 0000000..2e58ae6 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testarrayargument.h @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTARRAYARGUMENT_H +#define TESTARRAYARGUMENT_H +#include + +class TestArrayArgument : public QObject +{ + Q_OBJECT +private slots: + void testArrayArgumentWithSizeDefinedByInteger(); + void testArraySignature(); + void testArrayArgumentWithSizeDefinedByEnumValue(); + void testArrayArgumentWithSizeDefinedByEnumValueFromGlobalEnum(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testcodeinjection.cpp b/sources/shiboken2/ApiExtractor/tests/testcodeinjection.cpp new file mode 100644 index 0000000..7bbde3b --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testcodeinjection.cpp @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testcodeinjection.h" +#include +#include +#include +#include "testutil.h" +#include +#include + +void TestCodeInjections::testReadFileUtf8() +{ + const char* cppCode ="struct A {};\n"; + int argc = 0; + char *argv[] = {NULL}; + QCoreApplication app(argc, argv); + QString filePath = QDir::currentPath(); + QString xmlCode = QLatin1String("\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"); + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode.toLocal8Bit().constData())); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QCOMPARE(classA->typeEntry()->codeSnips().count(), 1); + QString code = classA->typeEntry()->codeSnips().first().code(); + QString utf8Data = QString::fromUtf8("\xC3\xA1\xC3\xA9\xC3\xAD\xC3\xB3\xC3\xBA"); + QVERIFY(code.indexOf(utf8Data) != -1); + code = classA->typeEntry()->conversionRule(); + QVERIFY(code.indexOf(utf8Data) != -1); +} + +void TestCodeInjections::testInjectWithValidApiVersion() +{ + const char* cppCode ="struct A {};\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + test Inject code\n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, true, "1.0")); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QCOMPARE(classA->typeEntry()->codeSnips().count(), 1); +} + +void TestCodeInjections::testInjectWithInvalidApiVersion() +{ + const char* cppCode ="struct A {};\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + test Inject code\n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, true, "0.1")); + QVERIFY(!builder.isNull()); + + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QCOMPARE(classA->typeEntry()->codeSnips().count(), 0); +} + + + +QTEST_APPLESS_MAIN(TestCodeInjections) diff --git a/sources/shiboken2/ApiExtractor/tests/testcodeinjection.h b/sources/shiboken2/ApiExtractor/tests/testcodeinjection.h new file mode 100644 index 0000000..bd5e7ec --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testcodeinjection.h @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTCODEINJECTIONS_H +#define TESTCODEINJECTIONS_H + +#include + +class AbstractMetaBuilder; + +class TestCodeInjections : public QObject +{ + Q_OBJECT +private slots: + void testReadFileUtf8(); + void testInjectWithValidApiVersion(); + void testInjectWithInvalidApiVersion(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testcontainer.cpp b/sources/shiboken2/ApiExtractor/tests/testcontainer.cpp new file mode 100644 index 0000000..2234fb4 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testcontainer.cpp @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testcontainer.h" +#include +#include "testutil.h" +#include +#include + +void TestContainer::testContainerType() +{ + const char* cppCode ="\ + namespace std {\n\ + template\n\ + class list {\n\ + T get(int x) { return 0; }\n\ + };\n\ + }\n\ + class A : public std::list {\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, true)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + //search for class A + AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QVERIFY(classA->typeEntry()->baseContainerType()); + QCOMPARE(reinterpret_cast(classA->typeEntry()->baseContainerType())->type(), ContainerTypeEntry::ListContainer); +} + +void TestContainer::testListOfValueType() +{ + const char* cppCode ="\ + namespace std {\n\ + template\n\ + class list {\n\ + T get(int x) { return 0; }\n\ + };\n\ + }\n\ + class ValueType {};\n\ + class A : public std::list {\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, true)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 3); + + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QCOMPARE(classA->templateBaseClassInstantiations().count(), 1); + const AbstractMetaType* templateInstanceType = classA->templateBaseClassInstantiations().first(); + QVERIFY(templateInstanceType); + + QCOMPARE(templateInstanceType->indirections(), 0); + QVERIFY(!templateInstanceType->typeEntry()->isObject()); + QVERIFY(templateInstanceType->typeEntry()->isValue()); + QCOMPARE(templateInstanceType->referenceType(), NoReference); + QVERIFY(!templateInstanceType->isObject()); + QVERIFY(!templateInstanceType->isValuePointer()); + QVERIFY(templateInstanceType->isValue()); +} + +QTEST_APPLESS_MAIN(TestContainer) + diff --git a/sources/shiboken2/ApiExtractor/tests/testcontainer.h b/sources/shiboken2/ApiExtractor/tests/testcontainer.h new file mode 100644 index 0000000..44e6636 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testcontainer.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTCONTAINER_H +#define TESTCONTAINER_H +#include + +class TestContainer : public QObject +{ + Q_OBJECT +private slots: + void testContainerType(); + void testListOfValueType(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testconversionoperator.cpp b/sources/shiboken2/ApiExtractor/tests/testconversionoperator.cpp new file mode 100644 index 0000000..67865d3 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testconversionoperator.cpp @@ -0,0 +1,188 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testconversionoperator.h" +#include +#include "testutil.h" +#include +#include + +void TestConversionOperator::testConversionOperator() +{ + const char cppCode[] = "\ + struct A {\n\ + };\n\ + struct B {\n\ + operator A() const;\n\ + };\n\ + struct C {\n\ + operator A() const;\n\ + };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + const AbstractMetaClass *classC = AbstractMetaClass::findClass(classes, QLatin1String("C")); + QVERIFY(classA); + QVERIFY(classB); + QVERIFY(classC); + QCOMPARE(classA->functions().count(), 2); + QCOMPARE(classB->functions().count(), 3); + QCOMPARE(classC->functions().count(), 3); + QCOMPARE(classA->externalConversionOperators().count(), 2); + + AbstractMetaFunction* convOp = 0; + for (AbstractMetaFunction *func : classB->functions()) { + if (func->isConversionOperator()) { + convOp = func; + break; + } + } + QVERIFY(convOp); + QVERIFY(classA->externalConversionOperators().contains(convOp)); +} + +void TestConversionOperator::testConversionOperatorOfDiscardedClass() +{ + const char cppCode[] = "\ + struct A {\n\ + };\n\ + struct B {\n\ + operator A() const;\n\ + };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QCOMPARE(classA->externalConversionOperators().count(), 0); +} + +void TestConversionOperator::testRemovedConversionOperator() +{ + const char cppCode[] = "\ + struct A {\n\ + };\n\ + struct B {\n\ + operator A() const;\n\ + };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(classA); + QVERIFY(classB); + QCOMPARE(classA->functions().count(), 2); + QCOMPARE(classB->functions().count(), 3); + QCOMPARE(classA->externalConversionOperators().count(), 0); + QCOMPARE(classA->implicitConversions().count(), 0); +} + +void TestConversionOperator::testConversionOperatorReturningReference() +{ + const char cppCode[] = "\ + struct A {};\n\ + struct B {\n\ + operator A&() const;\n\ + };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(classA); + QVERIFY(classB); + QCOMPARE(classA->functions().count(), 2); + QCOMPARE(classB->functions().count(), 3); + QCOMPARE(classA->externalConversionOperators().count(), 1); + QCOMPARE(classA->externalConversionOperators().first()->type()->cppSignature(), QLatin1String("A")); + QCOMPARE(classA->externalConversionOperators().first()->ownerClass()->name(), QLatin1String("B")); + QCOMPARE(classA->implicitConversions().count(), 1); + QCOMPARE(classA->implicitConversions().first()->type()->cppSignature(), QLatin1String("A")); + QCOMPARE(classA->implicitConversions().first()->ownerClass()->name(), QLatin1String("B")); +} + +void TestConversionOperator::testConversionOperatorReturningConstReference() +{ + const char cppCode[] = "\ + struct A {};\n\ + struct B {\n\ + operator const A&() const;\n\ + };\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(classA); + QVERIFY(classB); + QCOMPARE(classA->functions().count(), 2); + QCOMPARE(classB->functions().count(), 3); + QCOMPARE(classA->externalConversionOperators().count(), 1); + QCOMPARE(classA->externalConversionOperators().first()->type()->cppSignature(), QLatin1String("A")); + QCOMPARE(classA->externalConversionOperators().first()->ownerClass()->name(), QLatin1String("B")); + QCOMPARE(classA->implicitConversions().count(), 1); + QCOMPARE(classA->implicitConversions().first()->type()->cppSignature(), QLatin1String("A")); + QCOMPARE(classA->implicitConversions().first()->ownerClass()->name(), QLatin1String("B")); +} + +QTEST_APPLESS_MAIN(TestConversionOperator) diff --git a/sources/shiboken2/ApiExtractor/tests/testconversionoperator.h b/sources/shiboken2/ApiExtractor/tests/testconversionoperator.h new file mode 100644 index 0000000..b571a57 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testconversionoperator.h @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTCONVERSIONOPERATOR_H +#define TESTCONVERSIONOPERATOR_H +#include + +class TestConversionOperator : public QObject +{ + Q_OBJECT +private slots: + void testConversionOperator(); + void testConversionOperatorOfDiscardedClass(); + void testRemovedConversionOperator(); + void testConversionOperatorReturningReference(); + void testConversionOperatorReturningConstReference(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testconversionruletag.cpp b/sources/shiboken2/ApiExtractor/tests/testconversionruletag.cpp new file mode 100644 index 0000000..8c662d7 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testconversionruletag.cpp @@ -0,0 +1,250 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testconversionruletag.h" +#include +#include "testutil.h" +#include +#include +#include +#include + +void TestConversionRuleTag::testConversionRuleTagWithFile() +{ + // temp file used later + const char conversionData[] = "Hi! I'm a conversion rule."; + QTemporaryFile file; + file.open(); + QCOMPARE(file.write(conversionData), qint64(sizeof(conversionData)-1)); + file.close(); + + const char cppCode[] = "struct A {};\n"; + QString xmlCode = QLatin1String("\ + \n\ + \n\ + \n\ + \n\ + \n"); + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode.toLocal8Bit().data())); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + const ComplexTypeEntry* typeEntry = classA->typeEntry(); + QVERIFY(typeEntry->hasConversionRule()); + QCOMPARE(typeEntry->conversionRule(), QLatin1String(conversionData)); +} + +void TestConversionRuleTag::testConversionRuleTagReplace() +{ + const char cppCode[] = "\ + struct A {\n\ + A();\n\ + A(const char*, int);\n\ + };\n\ + struct B {\n\ + A createA();\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + DoThis();\n\ + return ConvertFromCppToPython(%IN);\n\ + \n\ + \n\ + \n\ + DoThat();\n\ + DoSomething();\n\ + %OUT = A();\n\ + \n\ + \n\ + %OUT = %IN.createA();\n\ + \n\ + \n\ + %OUT = new A(String_AsString(%IN), String_GetSize(%IN));\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + TypeDatabase* typeDb = TypeDatabase::instance(); + PrimitiveTypeEntry* typeA = typeDb->findPrimitiveType(QLatin1String("A")); + QVERIFY(typeA); + + CustomConversion* conversion = typeA->customConversion(); + QVERIFY(conversion); + + QCOMPARE(typeA, conversion->ownerType()); + QCOMPARE(conversion->nativeToTargetConversion().simplified(), + QLatin1String("DoThis(); return ConvertFromCppToPython(%IN);")); + + QVERIFY(conversion->replaceOriginalTargetToNativeConversions()); + QVERIFY(conversion->hasTargetToNativeConversions()); + QCOMPARE(conversion->targetToNativeConversions().size(), 3); + + CustomConversion::TargetToNativeConversion* toNative = conversion->targetToNativeConversions().at(0); + QVERIFY(toNative); + QCOMPARE(toNative->sourceTypeName(), QLatin1String("TargetNone")); + QVERIFY(toNative->isCustomType()); + QCOMPARE(toNative->sourceType(), (const TypeEntry*)0); + QCOMPARE(toNative->sourceTypeCheck(), QLatin1String("%IN == Target_None")); + QCOMPARE(toNative->conversion().simplified(), + QLatin1String("DoThat(); DoSomething(); %OUT = A();")); + + toNative = conversion->targetToNativeConversions().at(1); + QVERIFY(toNative); + QCOMPARE(toNative->sourceTypeName(), QLatin1String("B")); + QVERIFY(!toNative->isCustomType()); + TypeEntry* typeB = typeDb->findType(QLatin1String("B")); + QVERIFY(typeB); + QCOMPARE(toNative->sourceType(), typeB); + QCOMPARE(toNative->sourceTypeCheck(), QLatin1String("CheckIfInputObjectIsB(%IN)")); + QCOMPARE(toNative->conversion().trimmed(), QLatin1String("%OUT = %IN.createA();")); + + toNative = conversion->targetToNativeConversions().at(2); + QVERIFY(toNative); + QCOMPARE(toNative->sourceTypeName(), QLatin1String("String")); + QVERIFY(toNative->isCustomType()); + QCOMPARE(toNative->sourceType(), (const TypeEntry*)0); + QCOMPARE(toNative->sourceTypeCheck(), QLatin1String("String_Check(%IN)")); + QCOMPARE(toNative->conversion().trimmed(), QLatin1String("%OUT = new A(String_AsString(%IN), String_GetSize(%IN));")); +} + +void TestConversionRuleTag::testConversionRuleTagAdd() +{ + const char cppCode[] = "\ + struct Date {\n\ + Date();\n\ + Date(int, int, int);\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ +if (!TargetDateTimeAPI) TargetDateTime_IMPORT;\n\ +%OUT = new Date(TargetDate_Day(%IN), TargetDate_Month(%IN), TargetDate_Year(%IN));\n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(builder->classes(), QLatin1String("Date")); + QVERIFY(classA); + + CustomConversion* conversion = classA->typeEntry()->customConversion(); + QVERIFY(conversion); + + QCOMPARE(conversion->nativeToTargetConversion(), QString()); + + QVERIFY(!conversion->replaceOriginalTargetToNativeConversions()); + QVERIFY(conversion->hasTargetToNativeConversions()); + QCOMPARE(conversion->targetToNativeConversions().size(), 1); + + CustomConversion::TargetToNativeConversion* toNative = conversion->targetToNativeConversions().first(); + QVERIFY(toNative); + QCOMPARE(toNative->sourceTypeName(), QLatin1String("TargetDate")); + QVERIFY(toNative->isCustomType()); + QCOMPARE(toNative->sourceType(), (const TypeEntry*)0); + QCOMPARE(toNative->sourceTypeCheck(), QLatin1String("TargetDate_Check(%IN)")); + QCOMPARE(toNative->conversion().trimmed(), + QLatin1String("if (!TargetDateTimeAPI) TargetDateTime_IMPORT;\n%OUT = new Date(TargetDate_Day(%IN), TargetDate_Month(%IN), TargetDate_Year(%IN));")); +} + +void TestConversionRuleTag::testConversionRuleTagWithInsertTemplate() +{ + const char cppCode[] = "struct A {};"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + const char nativeToTargetExpected[] = + "// TEMPLATE - native_to_target - START\n" + "return ConvertFromCppToPython(%IN);\n" + "// TEMPLATE - native_to_target - END"; + + const char targetToNativeExpected[] = + "// TEMPLATE - target_to_native - START\n" + "%OUT = %IN.createA();\n" + "// TEMPLATE - target_to_native - END"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + TypeDatabase* typeDb = TypeDatabase::instance(); + PrimitiveTypeEntry* typeA = typeDb->findPrimitiveType(QLatin1String("A")); + QVERIFY(typeA); + + CustomConversion* conversion = typeA->customConversion(); + QVERIFY(conversion); + + QCOMPARE(typeA, conversion->ownerType()); + QCOMPARE(conversion->nativeToTargetConversion().trimmed(), + QLatin1String(nativeToTargetExpected)); + + QVERIFY(conversion->hasTargetToNativeConversions()); + QCOMPARE(conversion->targetToNativeConversions().size(), 1); + + CustomConversion::TargetToNativeConversion* toNative = conversion->targetToNativeConversions().first(); + QVERIFY(toNative); + QCOMPARE(toNative->conversion().trimmed(), + QLatin1String(targetToNativeExpected)); +} + +QTEST_APPLESS_MAIN(TestConversionRuleTag) diff --git a/sources/shiboken2/ApiExtractor/tests/testconversionruletag.h b/sources/shiboken2/ApiExtractor/tests/testconversionruletag.h new file mode 100644 index 0000000..894bd3d --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testconversionruletag.h @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTCONVERSIONRULE_H +#define TESTCONVERSIONRULE_H +#include + +class TestConversionRuleTag : public QObject +{ + Q_OBJECT +private slots: + void testConversionRuleTagWithFile(); + void testConversionRuleTagReplace(); + void testConversionRuleTagAdd(); + void testConversionRuleTagWithInsertTemplate(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testctorinformation.cpp b/sources/shiboken2/ApiExtractor/tests/testctorinformation.cpp new file mode 100644 index 0000000..7718d3d --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testctorinformation.cpp @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testctorinformation.h" +#include "abstractmetabuilder.h" +#include +#include "testutil.h" +#include +#include + +void TestCtorInformation::testCtorIsPrivate() +{ + const char* cppCode = "class Control { public: Control() {} };\n\ + class Subject { private: Subject() {} };\n\ + class CtorLess { };\n"; + const char* xmlCode = "\n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 3); + QCOMPARE(AbstractMetaClass::findClass(classes, QLatin1String("Control"))->hasNonPrivateConstructor(), true); + QCOMPARE(AbstractMetaClass::findClass(classes, QLatin1String("Subject"))->hasNonPrivateConstructor(), false); + QCOMPARE(AbstractMetaClass::findClass(classes, QLatin1String("CtorLess"))->hasNonPrivateConstructor(), true); +} + +void TestCtorInformation::testHasNonPrivateCtor() +{ + const char* cppCode = "template\n\ + struct Base { Base(double) {} };\n\ + typedef Base Derived;\n"; + const char* xmlCode = "\n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + const AbstractMetaClass *base = AbstractMetaClass::findClass(classes, QLatin1String("Base")); + QCOMPARE(base->hasNonPrivateConstructor(), true); + const AbstractMetaClass *derived = AbstractMetaClass::findClass(classes, QLatin1String("Derived")); + QCOMPARE(derived->hasNonPrivateConstructor(), true); +} + +QTEST_APPLESS_MAIN(TestCtorInformation) diff --git a/sources/shiboken2/ApiExtractor/tests/testctorinformation.h b/sources/shiboken2/ApiExtractor/tests/testctorinformation.h new file mode 100644 index 0000000..ee655d4 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testctorinformation.h @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTCTORINFORMATION_H +#define TESTCTORINFORMATION_H + +#include + +class AbstractMetaBuilder; + +class TestCtorInformation: public QObject +{ + Q_OBJECT +private slots: + void testCtorIsPrivate(); + void testHasNonPrivateCtor(); +}; + +#endif // TESTCTORINFORMATION_H diff --git a/sources/shiboken2/ApiExtractor/tests/testdroptypeentries.cpp b/sources/shiboken2/ApiExtractor/tests/testdroptypeentries.cpp new file mode 100644 index 0000000..b46c23f --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testdroptypeentries.cpp @@ -0,0 +1,145 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testdroptypeentries.h" +#include +#include "testutil.h" +#include +#include + +static const char* cppCode ="\ + struct ValueA {};\n\ + struct ValueB {};\n\ + struct ObjectA {};\n\ + struct ObjectB {};\n\ + namespace NamespaceA {\n\ + struct InnerClassA {};\n\ + namespace InnerNamespaceA {}\n\ + }\n\ + namespace NamespaceB {}\n\ + enum EnumA { Value0 };\n\ + enum EnumB { Value1 };\n\ + void funcA();\n\ + void funcB();\n"; + +static const char* xmlCode = "\ +\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ +\n"; + +void TestDropTypeEntries::testDropEntries() +{ + QStringList droppedEntries(QLatin1String("Foo.ValueB")); + droppedEntries << QLatin1String("Foo.ObjectB") << QLatin1String("Foo.NamespaceA.InnerClassA"); + droppedEntries << QLatin1String("Foo.NamespaceB") << QLatin1String("Foo.EnumB") << QLatin1String("Foo.funcB()"); + droppedEntries << QLatin1String("Foo.NamespaceA.InnerNamespaceA"); + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false, Q_NULLPTR, droppedEntries)); + QVERIFY(!builder.isNull()); + + AbstractMetaClassList classes = builder->classes(); + QVERIFY(AbstractMetaClass::findClass(classes, QLatin1String("ValueA"))); + QVERIFY(!AbstractMetaClass::findClass(classes, QLatin1String("ValueB"))); + QVERIFY(AbstractMetaClass::findClass(classes, QLatin1String("ObjectA"))); + QVERIFY(!AbstractMetaClass::findClass(classes, QLatin1String("ObjectB"))); + QVERIFY(AbstractMetaClass::findClass(classes, QLatin1String("NamespaceA"))); + QVERIFY(!AbstractMetaClass::findClass(classes, QLatin1String("NamespaceA::InnerClassA"))); + QVERIFY(!AbstractMetaClass::findClass(classes, QLatin1String("NamespaceB"))); + + AbstractMetaEnumList globalEnums = builder->globalEnums(); + QCOMPARE(globalEnums.count(), 1); + QCOMPARE(globalEnums.first()->name(), QLatin1String("EnumA")); + + TypeDatabase* td = TypeDatabase::instance(); + QVERIFY(td->findType(QLatin1String("funcA"))); + QVERIFY(!td->findType(QLatin1String("funcB"))); +} + +void TestDropTypeEntries::testDontDropEntries() +{ + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + AbstractMetaClassList classes = builder->classes(); + QVERIFY(AbstractMetaClass::findClass(classes, QLatin1String("ValueA"))); + QVERIFY(AbstractMetaClass::findClass(classes, QLatin1String("ValueB"))); + QVERIFY(AbstractMetaClass::findClass(classes, QLatin1String("ObjectA"))); + QVERIFY(AbstractMetaClass::findClass(classes, QLatin1String("ObjectB"))); + QVERIFY(AbstractMetaClass::findClass(classes, QLatin1String("NamespaceA"))); + QVERIFY(AbstractMetaClass::findClass(classes, QLatin1String("NamespaceA::InnerClassA"))); + QVERIFY(AbstractMetaClass::findClass(classes, QLatin1String("NamespaceB"))); + + QCOMPARE(builder->globalEnums().size(), 2); + + TypeDatabase* td = TypeDatabase::instance(); + QVERIFY(td->findType(QLatin1String("funcA"))); + QVERIFY(td->findType(QLatin1String("funcB"))); +} + +static const char* cppCode2 ="\ + struct ValueA {\n\ + void func();\n\ + };\n"; + +static const char* xmlCode2 = "\ +\n\ + \n\ + \n\ + \n\ + \n\ + \n\ +\n"; + +void TestDropTypeEntries::testDropEntryWithChildTags() +{ + QStringList droppedEntries(QLatin1String("Foo.ValueA")); + QScopedPointer builder(TestUtil::parse(cppCode2, xmlCode2, false, Q_NULLPTR, droppedEntries)); + QVERIFY(!builder.isNull()); + QVERIFY(!AbstractMetaClass::findClass(builder->classes(), QLatin1String("ValueA"))); +} + + +void TestDropTypeEntries::testDontDropEntryWithChildTags() +{ + QScopedPointer builder(TestUtil::parse(cppCode2, xmlCode2, false)); + QVERIFY(!builder.isNull()); + QVERIFY(AbstractMetaClass::findClass(builder->classes(), QLatin1String("ValueA"))); +} + +QTEST_APPLESS_MAIN(TestDropTypeEntries) diff --git a/sources/shiboken2/ApiExtractor/tests/testdroptypeentries.h b/sources/shiboken2/ApiExtractor/tests/testdroptypeentries.h new file mode 100644 index 0000000..3023a11 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testdroptypeentries.h @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTDROPTYPEENTRIES_H +#define TESTDROPTYPEENTRIES_H + +#include + +class TestDropTypeEntries : public QObject +{ + Q_OBJECT + private slots: + void testDropEntries(); + void testDontDropEntries(); + void testDropEntryWithChildTags(); + void testDontDropEntryWithChildTags(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testdtorinformation.cpp b/sources/shiboken2/ApiExtractor/tests/testdtorinformation.cpp new file mode 100644 index 0000000..f4204e9 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testdtorinformation.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testdtorinformation.h" +#include "abstractmetabuilder.h" +#include +#include "testutil.h" +#include +#include + +void TestDtorInformation::testDtorIsPrivate() +{ + const char* cppCode ="class Control { public: ~Control() {} }; class Subject { private: ~Subject() {} };"; + const char* xmlCode = ""; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + QCOMPARE(AbstractMetaClass::findClass(classes, QLatin1String("Control"))->hasPrivateDestructor(), false); + QCOMPARE(AbstractMetaClass::findClass(classes, QLatin1String("Subject"))->hasPrivateDestructor(), true); +} + +void TestDtorInformation::testDtorIsProtected() +{ + const char* cppCode ="class Control { public: ~Control() {} }; class Subject { protected: ~Subject() {} };"; + const char* xmlCode = ""; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + QCOMPARE(AbstractMetaClass::findClass(classes, QLatin1String("Control"))->hasProtectedDestructor(), false); + QCOMPARE(AbstractMetaClass::findClass(classes, QLatin1String("Subject"))->hasProtectedDestructor(), true); +} + +void TestDtorInformation::testDtorIsVirtual() +{ + const char* cppCode ="class Control { public: ~Control() {} }; class Subject { protected: virtual ~Subject() {} };"; + const char* xmlCode = ""; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + QCOMPARE(AbstractMetaClass::findClass(classes, QLatin1String("Control"))->hasVirtualDestructor(), false); + QCOMPARE(AbstractMetaClass::findClass(classes, QLatin1String("Subject"))->hasVirtualDestructor(), true); +} + +void TestDtorInformation::testClassWithVirtualDtorIsPolymorphic() +{ + const char* cppCode ="class Control { public: virtual ~Control() {} }; class Subject { protected: virtual ~Subject() {} };"; + const char* xmlCode = ""; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + QCOMPARE(AbstractMetaClass::findClass(classes, QLatin1String("Control"))->isPolymorphic(), true); + QCOMPARE(AbstractMetaClass::findClass(classes, QLatin1String("Subject"))->isPolymorphic(), true); +} + +QTEST_APPLESS_MAIN(TestDtorInformation) + + diff --git a/sources/shiboken2/ApiExtractor/tests/testdtorinformation.h b/sources/shiboken2/ApiExtractor/tests/testdtorinformation.h new file mode 100644 index 0000000..068ef49 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testdtorinformation.h @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTDTORINFORMATION_H +#define TESTDTORINFORMATION_H + +#include + +class AbstractMetaBuilder; + +class TestDtorInformation: public QObject +{ + Q_OBJECT +private slots: + void testDtorIsPrivate(); + void testDtorIsProtected(); + void testDtorIsVirtual(); + void testClassWithVirtualDtorIsPolymorphic(); +}; + +#endif // TESTDTORINFORMATION_H diff --git a/sources/shiboken2/ApiExtractor/tests/testenum.cpp b/sources/shiboken2/ApiExtractor/tests/testenum.cpp new file mode 100644 index 0000000..87f2608 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testenum.cpp @@ -0,0 +1,435 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testenum.h" +#include +#include "testutil.h" +#include +#include + +void TestEnum::testEnumCppSignature() +{ + const char* cppCode ="\ + enum GlobalEnum { A, B };\n\ + \n\ + struct A {\n\ + enum ClassEnum { CA, CB };\n\ + void method(ClassEnum);\n\ + };\n\ + void func(A::ClassEnum);\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 1); + + AbstractMetaEnumList globalEnums = builder->globalEnums(); + QCOMPARE(globalEnums.count(), 1); + QCOMPARE(globalEnums.first()->name(), QLatin1String("GlobalEnum")); + + // enum as parameter of a function + AbstractMetaFunctionList functions = builder->globalFunctions(); + QCOMPARE(functions.count(), 1); + QCOMPARE(functions.first()->arguments().count(), 1); + QCOMPARE(functions.first()->arguments().first()->type()->cppSignature(), QLatin1String("A::ClassEnum")); + + // enum as parameter of a method + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QCOMPARE(classA->enums().count(), 1); + AbstractMetaFunctionList funcs = classA->queryFunctionsByName(QLatin1String("method")); + QVERIFY(!funcs.isEmpty()); + AbstractMetaFunction* method = funcs.first(); + QVERIFY(method); + AbstractMetaArgument* arg = method->arguments().first(); + QCOMPARE(arg->type()->name(), QLatin1String("ClassEnum")); + QCOMPARE(arg->type()->cppSignature(), QLatin1String("A::ClassEnum")); + QCOMPARE(functions.first()->arguments().count(), 1); + arg = functions.first()->arguments().first(); + QCOMPARE(arg->type()->name(), QLatin1String("ClassEnum")); + QCOMPARE(arg->type()->cppSignature(), QLatin1String("A::ClassEnum")); + + AbstractMetaEnumList classEnums = classA->enums(); + QCOMPARE(classEnums.first()->name(), QLatin1String("ClassEnum")); + AbstractMetaEnumValue *e = AbstractMetaClass::findEnumValue(classes, QLatin1String("CA")); + QVERIFY(e); + e = AbstractMetaClass::findEnumValue(classes, QLatin1String("ClassEnum::CA")); + QVERIFY(e); +} + +void TestEnum::testEnumWithApiVersion() +{ + const char* cppCode ="\ + struct A {\n\ + enum ClassEnum { EnumA, EnumB };\n\ + enum ClassEnum2 { EnumC, EnumD };\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, true, "0.1")); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 1); + QCOMPARE(classes[0]->enums().count(), 1); +} + +void TestEnum::testAnonymousEnum() +{ + const char* cppCode ="\ + enum { Global0, Global1 };\n\ + struct A {\n\ + enum { A0, A1 };\n\ + enum { isThis = true, isThat = false };\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + AbstractMetaEnumList globalEnums = builder->globalEnums(); + QCOMPARE(globalEnums.count(), 1); + QCOMPARE(globalEnums.first()->typeEntry()->qualifiedCppName(), QLatin1String("Global0")); + QVERIFY(globalEnums.first()->isAnonymous()); + + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 1); + QCOMPARE(classes[0]->enums().count(), 2); + + AbstractMetaEnum* anonEnumA1 = classes[0]->findEnum(QLatin1String("A1")); + QVERIFY(anonEnumA1); + QVERIFY(anonEnumA1->isAnonymous()); + QCOMPARE(anonEnumA1->typeEntry()->qualifiedCppName(), QLatin1String("A::A1")); + + AbstractMetaEnumValue* enumValueA0 = anonEnumA1->values().first(); + QCOMPARE(enumValueA0->name(), QLatin1String("A0")); + QCOMPARE(enumValueA0->value().value(), 0); + QCOMPARE(enumValueA0->stringValue(), QString()); + + AbstractMetaEnumValue* enumValueA1 = anonEnumA1->values().last(); + QCOMPARE(enumValueA1->name(), QLatin1String("A1")); + QCOMPARE(enumValueA1->value().value(), 1); + QCOMPARE(enumValueA1->stringValue(), QString()); + + AbstractMetaEnum* anonEnumIsThis = classes[0]->findEnum(QLatin1String("isThis")); + QVERIFY(anonEnumIsThis); + QVERIFY(anonEnumIsThis->isAnonymous()); + QCOMPARE(anonEnumIsThis->typeEntry()->qualifiedCppName(), QLatin1String("A::isThis")); + + AbstractMetaEnumValue* enumValueIsThis = anonEnumIsThis->values().first(); + QCOMPARE(enumValueIsThis->name(), QLatin1String("isThis")); + QCOMPARE(enumValueIsThis->value().value(), static_cast(true)); + QCOMPARE(enumValueIsThis->stringValue(), QLatin1String("true")); + + AbstractMetaEnumValue* enumValueIsThat = anonEnumIsThis->values().last(); + QCOMPARE(enumValueIsThat->name(), QLatin1String("isThat")); + QCOMPARE(enumValueIsThat->value().value(), static_cast(false)); + QCOMPARE(enumValueIsThat->stringValue(), QLatin1String("false")); +} + +void TestEnum::testGlobalEnums() +{ + const char* cppCode ="\ + enum EnumA { A0, A1 };\n\ + enum EnumB { B0 = 2, B1 = 0x4 };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + AbstractMetaEnumList globalEnums = builder->globalEnums(); + QCOMPARE(globalEnums.count(), 2); + + AbstractMetaEnum* enumA = globalEnums.first(); + QCOMPARE(enumA->typeEntry()->qualifiedCppName(), QLatin1String("EnumA")); + + AbstractMetaEnumValue* enumValueA0 = enumA->values().first(); + QCOMPARE(enumValueA0->name(), QLatin1String("A0")); + QCOMPARE(enumValueA0->value().value(), 0); + QCOMPARE(enumValueA0->stringValue(), QString()); + + AbstractMetaEnumValue* enumValueA1 = enumA->values().last(); + QCOMPARE(enumValueA1->name(), QLatin1String("A1")); + QCOMPARE(enumValueA1->value().value(), 1); + QCOMPARE(enumValueA1->stringValue(), QString()); + + AbstractMetaEnum* enumB = globalEnums.last(); + QCOMPARE(enumB->typeEntry()->qualifiedCppName(), QLatin1String("EnumB")); + + AbstractMetaEnumValue* enumValueB0 = enumB->values().first(); + QCOMPARE(enumValueB0->name(), QLatin1String("B0")); + QCOMPARE(enumValueB0->value().value(), 2); + QCOMPARE(enumValueB0->stringValue(), QLatin1String("2")); + + AbstractMetaEnumValue* enumValueB1 = enumB->values().last(); + QCOMPARE(enumValueB1->name(), QLatin1String("B1")); + QCOMPARE(enumValueB1->value().value(), 4); + QCOMPARE(enumValueB1->stringValue(), QLatin1String("0x4")); +} + +void TestEnum::testEnumValueFromNeighbourEnum() +{ + const char* cppCode ="\ + namespace A {\n\ + enum EnumA { ValueA0, ValueA1 };\n\ + enum EnumB { ValueB0 = A::ValueA1, ValueB1 = ValueA0 };\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 1); + QCOMPARE(classes[0]->enums().count(), 2); + + AbstractMetaEnum* enumA = classes[0]->findEnum(QLatin1String("EnumA")); + QVERIFY(enumA); + QCOMPARE(enumA->typeEntry()->qualifiedCppName(), QLatin1String("A::EnumA")); + + AbstractMetaEnumValue* enumValueA0 = enumA->values().first(); + QCOMPARE(enumValueA0->name(), QLatin1String("ValueA0")); + QCOMPARE(enumValueA0->value().value(), 0); + QCOMPARE(enumValueA0->stringValue(), QString()); + + AbstractMetaEnumValue* enumValueA1 = enumA->values().last(); + QCOMPARE(enumValueA1->name(), QLatin1String("ValueA1")); + QCOMPARE(enumValueA1->value().value(), 1); + QCOMPARE(enumValueA1->stringValue(), QString()); + + AbstractMetaEnum* enumB = classes[0]->findEnum(QLatin1String("EnumB")); + QVERIFY(enumB); + QCOMPARE(enumB->typeEntry()->qualifiedCppName(), QLatin1String("A::EnumB")); + + AbstractMetaEnumValue* enumValueB0 = enumB->values().first(); + QCOMPARE(enumValueB0->name(), QLatin1String("ValueB0")); + QCOMPARE(enumValueB0->value().value(), 1); + QCOMPARE(enumValueB0->stringValue(), QLatin1String("A::ValueA1")); + + AbstractMetaEnumValue* enumValueB1 = enumB->values().last(); + QCOMPARE(enumValueB1->name(), QLatin1String("ValueB1")); + QCOMPARE(enumValueB1->value().value(), 0); + QCOMPARE(enumValueB1->stringValue(), QLatin1String("ValueA0")); +} + +void TestEnum::testEnumValueFromExpression() +{ + const char* cppCode ="\ + struct A {\n\ + enum EnumA : unsigned {\n\ + ValueA0 = 3u,\n\ + ValueA1 = ~3u,\n\ + ValueA2 = 0xffffffff,\n\ + ValueA3 = 0xf0,\n\ + ValueA4 = 8 |ValueA3,\n\ + ValueA5 = ValueA3|32,\n\ + ValueA6 = ValueA3 >> 1,\n\ + ValueA7 = ValueA3 << 1\n\ + };\n\ + enum EnumB : int {\n\ + ValueB0 = ~3,\n\ + };\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + AbstractMetaClass *classA = AbstractMetaClass::findClass(builder->classes(), QLatin1String("A")); + QVERIFY(classA); + + AbstractMetaEnum* enumA = classA->findEnum(QLatin1String("EnumA")); + QVERIFY(enumA); + QVERIFY(!enumA->isSigned()); + QCOMPARE(enumA->typeEntry()->qualifiedCppName(), QLatin1String("A::EnumA")); + + AbstractMetaEnumValue* valueA0 = enumA->values().at(0); + QCOMPARE(valueA0->name(), QLatin1String("ValueA0")); + QCOMPARE(valueA0->stringValue(), QLatin1String("3u")); + QCOMPARE(valueA0->value().unsignedValue(), 3u); + + AbstractMetaEnumValue* valueA1 = enumA->values().at(1); + QCOMPARE(valueA1->name(), QLatin1String("ValueA1")); + QCOMPARE(valueA1->stringValue(), QLatin1String("~3u")); + QCOMPARE(valueA1->value().unsignedValue(), ~3u); + + AbstractMetaEnumValue* valueA2 = enumA->values().at(2); + QCOMPARE(valueA2->name(), QLatin1String("ValueA2")); + QCOMPARE(valueA2->stringValue(), QLatin1String("0xffffffff")); + QCOMPARE(valueA2->value().unsignedValue(), 0xffffffffu); + + AbstractMetaEnumValue* valueA3 = enumA->values().at(3); + QCOMPARE(valueA3->name(), QLatin1String("ValueA3")); + QCOMPARE(valueA3->stringValue(), QLatin1String("0xf0")); + QCOMPARE(valueA3->value().unsignedValue(), 0xf0u); + + AbstractMetaEnumValue* valueA4 = enumA->values().at(4); + QCOMPARE(valueA4->name(), QLatin1String("ValueA4")); + QCOMPARE(valueA4->stringValue(), QLatin1String("8 |ValueA3")); + QCOMPARE(valueA4->value().unsignedValue(), 8|0xf0u); + + AbstractMetaEnumValue* valueA5 = enumA->values().at(5); + QCOMPARE(valueA5->name(), QLatin1String("ValueA5")); + QCOMPARE(valueA5->stringValue(), QLatin1String("ValueA3|32")); + QCOMPARE(valueA5->value().unsignedValue(), 0xf0u|32); + + AbstractMetaEnumValue* valueA6 = enumA->values().at(6); + QCOMPARE(valueA6->name(), QLatin1String("ValueA6")); + QCOMPARE(valueA6->stringValue(), QLatin1String("ValueA3 >> 1")); + QCOMPARE(valueA6->value().unsignedValue(), 0xf0u >> 1); + + AbstractMetaEnumValue* valueA7 = enumA->values().at(7); + QCOMPARE(valueA7->name(), QLatin1String("ValueA7")); + QCOMPARE(valueA7->stringValue(), QLatin1String("ValueA3 << 1")); + QCOMPARE(valueA7->value().unsignedValue(), 0xf0u << 1); + + const AbstractMetaEnum *enumB = classA->findEnum(QLatin1String("EnumB")); + QVERIFY(enumB); + QVERIFY(enumB->isSigned()); + QCOMPARE(enumB->typeEntry()->qualifiedCppName(), QLatin1String("A::EnumB")); + QCOMPARE(enumB->values().size(), 1); + const AbstractMetaEnumValue *valueB0 = enumB->values().at(0); + QCOMPARE(valueB0->name(), QLatin1String("ValueB0")); + QCOMPARE(valueB0->stringValue(), QLatin1String("~3")); + QCOMPARE(valueB0->value().value(), ~3); +} + +void TestEnum::testPrivateEnum() +{ + const char* cppCode ="\ + class A {\n\ + private:\n\ + enum PrivateEnum { Priv0 = 0x0f, Priv1 = 0xf0 };\n\ + public:\n\ + enum PublicEnum { Pub0 = Priv0, Pub1 = A::Priv1 };\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + AbstractMetaClass *classA = AbstractMetaClass::findClass(builder->classes(), QLatin1String("A")); + QVERIFY(classA); + QCOMPARE(classA->enums().count(), 2); + + AbstractMetaEnum* privateEnum = classA->findEnum(QLatin1String("PrivateEnum")); + QVERIFY(privateEnum); + QVERIFY(privateEnum->isPrivate()); + QCOMPARE(privateEnum->typeEntry()->qualifiedCppName(), QLatin1String("A::PrivateEnum")); + + AbstractMetaEnum* publicEnum = classA->findEnum(QLatin1String("PublicEnum")); + QVERIFY(publicEnum); + QCOMPARE(publicEnum->typeEntry()->qualifiedCppName(), QLatin1String("A::PublicEnum")); + + AbstractMetaEnumValue* pub0 = publicEnum->values().first(); + QCOMPARE(pub0->name(), QLatin1String("Pub0")); + QCOMPARE(pub0->value().value(), 0x0f); + QCOMPARE(pub0->stringValue(), QLatin1String("Priv0")); + + AbstractMetaEnumValue* pub1 = publicEnum->values().last(); + QCOMPARE(pub1->name(), QLatin1String("Pub1")); + QCOMPARE(pub1->value().value(), 0xf0); + QCOMPARE(pub1->stringValue(), QLatin1String("A::Priv1")); +} + +void TestEnum::testTypedefEnum() +{ + const char* cppCode ="\ + typedef enum EnumA {\n\ + A0,\n\ + A1,\n\ + } EnumA;\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + AbstractMetaEnumList globalEnums = builder->globalEnums(); + QEXPECT_FAIL("", "APIExtractor does not handle typedef enum correctly yet", Abort); + QCOMPARE(globalEnums.count(), 1); + + AbstractMetaEnum* enumA = globalEnums.first(); + QCOMPARE(enumA->typeEntry()->qualifiedCppName(), QLatin1String("EnumA")); + + AbstractMetaEnumValue* enumValueA0 = enumA->values().first(); + QCOMPARE(enumValueA0->name(), QLatin1String("A0")); + QCOMPARE(enumValueA0->value().value(), 0); + QCOMPARE(enumValueA0->stringValue(), QLatin1String("")); + + AbstractMetaEnumValue* enumValueA1 = enumA->values().last(); + QCOMPARE(enumValueA1->name(), QLatin1String("A1")); + QCOMPARE(enumValueA1->value().value(), 1); + QCOMPARE(enumValueA1->stringValue(), QString()); +} + +QTEST_APPLESS_MAIN(TestEnum) diff --git a/sources/shiboken2/ApiExtractor/tests/testenum.h b/sources/shiboken2/ApiExtractor/tests/testenum.h new file mode 100644 index 0000000..3125517 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testenum.h @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTENUM_H +#define TESTENUM_H +#include + +class TestEnum : public QObject +{ + Q_OBJECT +private slots: + void testEnumCppSignature(); + void testEnumWithApiVersion(); + void testAnonymousEnum(); + void testGlobalEnums(); + void testEnumValueFromNeighbourEnum(); + void testEnumValueFromExpression(); + void testPrivateEnum(); + void testTypedefEnum(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testextrainclude.cpp b/sources/shiboken2/ApiExtractor/tests/testextrainclude.cpp new file mode 100644 index 0000000..2161012 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testextrainclude.cpp @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testextrainclude.h" +#include +#include "testutil.h" +#include +#include + +void TestExtraInclude::testClassExtraInclude() +{ + const char* cppCode ="struct A {};\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + + QVector includes = classA->typeEntry()->extraIncludes(); + QCOMPARE(includes.count(), 1); + QCOMPARE(includes.first().name(), QLatin1String("header.h")); +} + +void TestExtraInclude::testGlobalExtraIncludes() +{ + const char* cppCode ="struct A {};\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QVERIFY(AbstractMetaClass::findClass(classes, QLatin1String("A"))); + + TypeDatabase* td = TypeDatabase::instance(); + TypeEntry* module = td->findType(QLatin1String("Foo")); + QVERIFY(module); + + QVector includes = module->extraIncludes(); + QCOMPARE(includes.count(), 2); + QCOMPARE(includes.first().name(), QLatin1String("header1.h")); + QCOMPARE(includes.last().name(), QLatin1String("header2.h")); +} + +QTEST_APPLESS_MAIN(TestExtraInclude) diff --git a/sources/shiboken2/ApiExtractor/tests/testextrainclude.h b/sources/shiboken2/ApiExtractor/tests/testextrainclude.h new file mode 100644 index 0000000..33c5377 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testextrainclude.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTEXTRAINCLUDE_H +#define TESTEXTRAINCLUDE_H + +#include + +class TestExtraInclude : public QObject +{ + Q_OBJECT + private slots: + void testClassExtraInclude(); + void testGlobalExtraIncludes(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testfunctiontag.cpp b/sources/shiboken2/ApiExtractor/tests/testfunctiontag.cpp new file mode 100644 index 0000000..b9aee58 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testfunctiontag.cpp @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testfunctiontag.h" +#include +#include "testutil.h" +#include +#include + +void TestFunctionTag::testFunctionTagForSpecificSignature() +{ + const char cppCode[] = "void globalFunction(int); void globalFunction(float); void dummy();\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + const TypeEntry *func = TypeDatabase::instance()->findType(QLatin1String("globalFunction")); + QVERIFY(func); + QCOMPARE(builder->globalFunctions().size(), 1); +} + +void TestFunctionTag::testFunctionTagForAllSignatures() +{ + const char cppCode[] = "void globalFunction(int); void globalFunction(float); void dummy();\n"; + const char xmlCode[] = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + const TypeEntry *func = TypeDatabase::instance()->findType(QLatin1String("globalFunction")); + QVERIFY(func); + QCOMPARE(builder->globalFunctions().size(), 2); +} + +void TestFunctionTag::testRenameGlobalFunction() +{ + const char* cppCode ="void global_function_with_ugly_name();\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + const TypeEntry *func = TypeDatabase::instance()->findType(QLatin1String("global_function_with_ugly_name")); + QVERIFY(func); + + QCOMPARE(builder->globalFunctions().size(), 1); + const AbstractMetaFunction* metaFunc = builder->globalFunctions().first(); + + QVERIFY(metaFunc); + QCOMPARE(metaFunc->modifications().size(), 1); + QVERIFY(metaFunc->modifications().first().isRenameModifier()); + QCOMPARE(metaFunc->modifications().first().renamedTo(), QLatin1String("smooth")); + + QCOMPARE(metaFunc->name(), QLatin1String("smooth")); + QCOMPARE(metaFunc->originalName(), QLatin1String("global_function_with_ugly_name")); + QCOMPARE(metaFunc->minimalSignature(), QLatin1String("global_function_with_ugly_name()")); +} + +QTEST_APPLESS_MAIN(TestFunctionTag) + diff --git a/sources/shiboken2/ApiExtractor/tests/testfunctiontag.h b/sources/shiboken2/ApiExtractor/tests/testfunctiontag.h new file mode 100644 index 0000000..d68499c --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testfunctiontag.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTFUNCTIONTAG_H +#define TESTFUNCTIONTAG_H +#include + +class TestFunctionTag : public QObject +{ + Q_OBJECT +private slots: + void testFunctionTagForSpecificSignature(); + void testFunctionTagForAllSignatures(); + void testRenameGlobalFunction(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testimplicitconversions.cpp b/sources/shiboken2/ApiExtractor/tests/testimplicitconversions.cpp new file mode 100644 index 0000000..7b3616d --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testimplicitconversions.cpp @@ -0,0 +1,163 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testimplicitconversions.h" +#include "testutil.h" +#include +#include +#include + +void TestImplicitConversions::testWithPrivateCtors() +{ + const char* cppCode ="\ + class B;\n\ + class C;\n\ + class A {\n\ + A(const B&);\n\ + public:\n\ + A(const C&);\n\ + };\n\ + class B {};\n\ + class C {};\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 3); + + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + const AbstractMetaClass *classC = AbstractMetaClass::findClass(classes, QLatin1String("C")); + AbstractMetaFunctionList implicitConvs = classA->implicitConversions(); + QCOMPARE(implicitConvs.count(), 1); + QCOMPARE(implicitConvs.first()->arguments().first()->type()->typeEntry(), classC->typeEntry()); +} + +void TestImplicitConversions::testWithModifiedVisibility() +{ + const char* cppCode ="\ + class B;\n\ + class A {\n\ + public:\n\ + A(const B&);\n\ + };\n\ + class B {};\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + AbstractMetaFunctionList implicitConvs = classA->implicitConversions(); + QCOMPARE(implicitConvs.count(), 1); + QCOMPARE(implicitConvs.first()->arguments().first()->type()->typeEntry(), classB->typeEntry()); +} + + +void TestImplicitConversions::testWithAddedCtor() +{ + const char* cppCode ="\ + class B;\n\ + class A {\n\ + public:\n\ + A(const B&);\n\ + };\n\ + class B {};\n\ + class C {};\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 3); + + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + AbstractMetaFunctionList implicitConvs = classA->implicitConversions(); + QCOMPARE(implicitConvs.count(), 2); + + // Added constructors with custom types should never result in implicit converters. + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + implicitConvs = classB->implicitConversions(); + QCOMPARE(implicitConvs.count(), 0); +} + +void TestImplicitConversions::testWithExternalConversionOperator() +{ + const char* cppCode ="\ + class A {};\n\ + struct B {\n\ + operator A() const;\n\ + };\n"; + const char* xmlCode = "\n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + AbstractMetaClass* classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + AbstractMetaFunctionList implicitConvs = classA->implicitConversions(); + QCOMPARE(implicitConvs.count(), 1); + AbstractMetaFunctionList externalConvOps = classA->externalConversionOperators(); + QCOMPARE(externalConvOps.count(), 1); + + const AbstractMetaFunction* convOp = 0; + for (const AbstractMetaFunction *func : classB->functions()) { + if (func->isConversionOperator()) + convOp = func; + } + QVERIFY(convOp); + QCOMPARE(implicitConvs.first(), convOp); +} + +QTEST_APPLESS_MAIN(TestImplicitConversions) diff --git a/sources/shiboken2/ApiExtractor/tests/testimplicitconversions.h b/sources/shiboken2/ApiExtractor/tests/testimplicitconversions.h new file mode 100644 index 0000000..da8ae45 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testimplicitconversions.h @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTIMPLICITCONVERSIONS_H +#define TESTIMPLICITCONVERSIONS_H + +#include + +class AbstractMetaBuilder; + +class TestImplicitConversions : public QObject +{ + Q_OBJECT +private slots: + void testWithPrivateCtors(); + void testWithModifiedVisibility(); + void testWithAddedCtor(); + void testWithExternalConversionOperator(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testinserttemplate.cpp b/sources/shiboken2/ApiExtractor/tests/testinserttemplate.cpp new file mode 100644 index 0000000..766265d --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testinserttemplate.cpp @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testinserttemplate.h" +#include +#include "testutil.h" +#include +#include + +void TestInsertTemplate::testInsertTemplateOnClassInjectCode() +{ + const char* cppCode ="struct A{};\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 1); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QCOMPARE(classA->typeEntry()->codeSnips().count(), 1); + QString code = classA->typeEntry()->codeSnips().first().code(); + QVERIFY(code.contains(QLatin1String("code template content"))); +} + +void TestInsertTemplate::testInsertTemplateOnModuleInjectCode() +{ + const char* cppCode =""; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QVERIFY(classes.isEmpty()); + + TypeEntry* module = TypeDatabase::instance()->findType(QLatin1String("Foo")); + QVERIFY(module); + QCOMPARE(module->codeSnips().count(), 1); + QString code = module->codeSnips().first().code().trimmed(); + QVERIFY(code.contains(QLatin1String("code template content"))); +} + +void TestInsertTemplate::testInvalidTypeSystemTemplate() +{ + const char* cppCode =""; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QVERIFY(classes.isEmpty()); + + TypeEntry* module = TypeDatabase::instance()->findType(QLatin1String("Foo")); + QVERIFY(module); + QCOMPARE(module->codeSnips().count(), 1); + QString code = module->codeSnips().first().code().trimmed(); + QVERIFY(code.isEmpty()); +} + +void TestInsertTemplate::testValidAndInvalidTypeSystemTemplate() +{ + const char* cppCode =""; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QVERIFY(classes.isEmpty()); + + TypeEntry* module = TypeDatabase::instance()->findType(QLatin1String("Foo")); + QVERIFY(module); + QCOMPARE(module->codeSnips().count(), 1); + QString code = module->codeSnips().first().code().trimmed(); + QVERIFY(code.contains(QLatin1String("code template content"))); +} + +QTEST_APPLESS_MAIN(TestInsertTemplate) diff --git a/sources/shiboken2/ApiExtractor/tests/testinserttemplate.h b/sources/shiboken2/ApiExtractor/tests/testinserttemplate.h new file mode 100644 index 0000000..45a8549 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testinserttemplate.h @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTINSERTTEMPLATE_H +#define TESTINSERTTEMPLATE_H + +#include + +class TestInsertTemplate : public QObject +{ + Q_OBJECT + private slots: + void testInsertTemplateOnClassInjectCode(); + void testInsertTemplateOnModuleInjectCode(); + void testInvalidTypeSystemTemplate(); + void testValidAndInvalidTypeSystemTemplate(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testmodifydocumentation.cpp b/sources/shiboken2/ApiExtractor/tests/testmodifydocumentation.cpp new file mode 100644 index 0000000..7911a5e --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testmodifydocumentation.cpp @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testmodifydocumentation.h" + +#include +#include +#include "testutil.h" +#include +#include +#include + +void TestModifyDocumentation::testModifyDocumentation() +{ + const char* cppCode ="struct B { void b(); }; class A {};\n"; + const char xmlCode[] = +R"( + + + + + <brief>Modified Brief</brief> + <para>Some changed contents here</para> + + +)"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClass *classA = AbstractMetaClass::findClass(builder->classes(), QLatin1String("A")); + QVERIFY(classA); + DocModificationList docMods = classA->typeEntry()->docModifications(); + QCOMPARE(docMods.count(), 2); + QCOMPARE(docMods[0].code().trimmed(), QLatin1String("Modified Brief")); + QCOMPARE(docMods[0].signature(), QString()); + QCOMPARE(docMods[1].code().trimmed(), QLatin1String("Some changed contents here")); + QCOMPARE(docMods[1].signature(), QString()); + QtDocParser docParser; + docParser.setDocumentationDataDirectory(QDir::currentPath()); + docParser.fillDocumentation(classA); + + const QString actualDocSimplified = classA->documentation().value().simplified(); + QVERIFY(!actualDocSimplified.isEmpty()); + +const char expectedDoc[] = +R"( +oi +Modified Brief +Paragraph number 1 +Paragraph number 2 +Some changed contents here + +)"; + const QString expectedDocSimplified = QString::fromLatin1(expectedDoc).simplified(); + // Check whether the first modification worked. + QVERIFY(actualDocSimplified.contains(QLatin1String("Modified Brief"))); + +#ifndef HAVE_LIBXSLT + // QtXmlPatterns is unable to handle para[3] in style sheets, + // this only works in its XPath search. + QEXPECT_FAIL("", "QtXmlPatterns cannot handle para[3] (QTBUG-66925)", Abort); +#endif + QCOMPARE(actualDocSimplified, expectedDocSimplified); +} + +// We expand QTEST_MAIN macro but using QCoreApplication instead of QApplication +// because this test needs an event loop but can't use QApplication to avoid a crash +// on our ARMEL/FRAMANTLE buildbot +int main(int argc, char** argv) +{ + QCoreApplication app(argc, argv); + TestModifyDocumentation tc; + return QTest::qExec(&tc, argc, argv); +} diff --git a/sources/shiboken2/ApiExtractor/tests/testmodifydocumentation.h b/sources/shiboken2/ApiExtractor/tests/testmodifydocumentation.h new file mode 100644 index 0000000..6428a56 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testmodifydocumentation.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTMODIFYDOCUMENTATION_H +#define TESTMODIFYDOCUMENTATION_H + +#include + +class TestModifyDocumentation : public QObject +{ +Q_OBJECT +private slots: + void testModifyDocumentation(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testmodifyfunction.cpp b/sources/shiboken2/ApiExtractor/tests/testmodifyfunction.cpp new file mode 100644 index 0000000..d0a0c9c --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testmodifyfunction.cpp @@ -0,0 +1,261 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testmodifyfunction.h" +#include +#include "testutil.h" +#include +#include + +void TestModifyFunction::testRenameArgument_data() +{ + QTest::addColumn("pattern"); + QTest::newRow("fixed_string") << QByteArrayLiteral("method(int)"); + QTest::newRow("regular_expression") << QByteArrayLiteral("^method.*"); +} + +void TestModifyFunction::testRenameArgument() +{ + QFETCH(QByteArray, pattern); + + const char* cppCode ="\ + struct A {\n\ + void method(int=0);\n\ + };\n"; + const char xmlCode1[] = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + const QByteArray xmlCode = QByteArray(xmlCode1) + pattern + QByteArray(xmlCode2); + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode.constData(), false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + const AbstractMetaFunction* func = classA->findFunction(QLatin1String("method")); + Q_ASSERT(func); + + QCOMPARE(func->argumentName(1), QLatin1String("otherArg")); +} + +void TestModifyFunction::testOwnershipTransfer() +{ + const char* cppCode ="\ + struct A {};\n\ + struct B {\n\ + virtual A* method();\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + const AbstractMetaFunction* func = classB->findFunction(QLatin1String("method")); + + QCOMPARE(func->ownership(func->ownerClass(), TypeSystem::TargetLangCode, 0), TypeSystem::CppOwnership); +} + + +void TestModifyFunction::invalidateAfterUse() +{ + const char* cppCode ="\ + struct A {\n\ + virtual void call(int *a);\n\ + };\n\ + struct B : A {\n\ + };\n\ + struct C : B {\n\ + virtual void call2(int *a);\n\ + };\n\ + struct D : C {\n\ + virtual void call2(int *a);\n\ + };\n\ + struct E : D {\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false, "0.1")); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + const AbstractMetaFunction* func = classB->findFunction(QLatin1String("call")); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); + + const AbstractMetaClass *classC = AbstractMetaClass::findClass(classes, QLatin1String("C")); + QVERIFY(classC); + func = classC->findFunction(QLatin1String("call")); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); + + func = classC->findFunction(QLatin1String("call2")); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); + + const AbstractMetaClass *classD = AbstractMetaClass::findClass(classes, QLatin1String("D")); + QVERIFY(classD); + func = classD->findFunction(QLatin1String("call")); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); + + func = classD->findFunction(QLatin1String("call2")); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); + + const AbstractMetaClass *classE = AbstractMetaClass::findClass(classes, QLatin1String("E")); + QVERIFY(classE); + func = classE->findFunction(QLatin1String("call")); + QVERIFY(func); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); + + func = classE->findFunction(QLatin1String("call2")); + QVERIFY(func); + QCOMPARE(func->modifications().size(), 1); + QCOMPARE(func->modifications().at(0).argument_mods.size(), 1); + QVERIFY(func->modifications().at(0).argument_mods.at(0).resetAfterUse); +} + +void TestModifyFunction::testWithApiVersion() +{ + const char* cppCode ="\ + struct A {};\n\ + struct B {\n\ + virtual A* method();\n\ + virtual B* methodB();\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false, "0.1")); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + AbstractMetaClass* classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + const AbstractMetaFunction* func = classB->findFunction(QLatin1String("method")); + + QCOMPARE(func->ownership(func->ownerClass(), TypeSystem::TargetLangCode, 0), TypeSystem::CppOwnership); + + func = classB->findFunction(QLatin1String("methodB")); + QVERIFY(func->ownership(func->ownerClass(), TypeSystem::TargetLangCode, 0) != TypeSystem::CppOwnership); +} + +void TestModifyFunction::testGlobalFunctionModification() +{ + const char* cppCode ="\ + struct A {};\n\ + void function(A* a = 0);\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + QCOMPARE(builder->globalFunctions().size(), 1); + + FunctionModificationList mods = TypeDatabase::instance()->functionModifications(QLatin1String("function(A*)")); + QCOMPARE(mods.count(), 1); + QVector argMods = mods.first().argument_mods; + QCOMPARE(argMods.count(), 1); + ArgumentModification argMod = argMods.first(); + QCOMPARE(argMod.replacedDefaultExpression, QLatin1String("A()")); + + const AbstractMetaFunction* func = builder->globalFunctions().first(); + QVERIFY(func); + QCOMPARE(func->arguments().count(), 1); + const AbstractMetaArgument* arg = func->arguments().first(); + QCOMPARE(arg->type()->cppSignature(), QLatin1String("A *")); + QCOMPARE(arg->originalDefaultValueExpression(), QLatin1String("0")); + QCOMPARE(arg->defaultValueExpression(), QLatin1String("A()")); +} + +QTEST_APPLESS_MAIN(TestModifyFunction) diff --git a/sources/shiboken2/ApiExtractor/tests/testmodifyfunction.h b/sources/shiboken2/ApiExtractor/tests/testmodifyfunction.h new file mode 100644 index 0000000..f116b51 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testmodifyfunction.h @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTABSTRACTMETACLASS_H +#define TESTABSTRACTMETACLASS_H + +#include + +class TestModifyFunction : public QObject +{ + Q_OBJECT + private slots: + void testOwnershipTransfer(); + void testWithApiVersion(); + void testRenameArgument_data(); + void testRenameArgument(); + void invalidateAfterUse(); + void testGlobalFunctionModification(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testmultipleinheritance.cpp b/sources/shiboken2/ApiExtractor/tests/testmultipleinheritance.cpp new file mode 100644 index 0000000..a4e506e --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testmultipleinheritance.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testmultipleinheritance.h" +#include +#include "testutil.h" +#include +#include + +void TestMultipleInheritance::testVirtualClass() +{ + const char* cppCode ="\ + struct A {\n\ + virtual ~A();\n\ + virtual void theBug();\n\ + };\n\ + struct B {\n\ + virtual ~B();\n\ + };\n\ + struct C : A, B {\n\ + };\n\ + struct D : C {\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 4); + + const AbstractMetaClass *classD = AbstractMetaClass::findClass(classes, QLatin1String("D")); + bool functionFound = false; + const AbstractMetaFunctionList &functions = classD->functions(); + for (AbstractMetaFunction *f : functions) { + if (f->name() == QLatin1String("theBug")) { + functionFound = true; + break; + } + } + QVERIFY(functionFound); + +} + +QTEST_APPLESS_MAIN(TestMultipleInheritance) diff --git a/sources/shiboken2/ApiExtractor/tests/testmultipleinheritance.h b/sources/shiboken2/ApiExtractor/tests/testmultipleinheritance.h new file mode 100644 index 0000000..5ee8a21 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testmultipleinheritance.h @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTMULTIPLEINHERITANCE_H +#define TESTMULTIPLEINHERITANCE_H + +#include + +class AbstractMetaBuilder; + +class TestMultipleInheritance : public QObject +{ + Q_OBJECT + private slots: + void testVirtualClass(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testnamespace.cpp b/sources/shiboken2/ApiExtractor/tests/testnamespace.cpp new file mode 100644 index 0000000..e3aad6b --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testnamespace.cpp @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testnamespace.h" +#include +#include "testutil.h" +#include +#include + +void NamespaceTest::testNamespaceMembers() +{ + const char* cppCode = "\ + namespace Namespace\n\ + {\n\ + enum Option {\n\ + OpZero,\n\ + OpOne\n\ + };\n\ + void foo(Option opt);\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + AbstractMetaClass *ns = AbstractMetaClass::findClass(classes, QLatin1String("Namespace")); + QVERIFY(ns); + const AbstractMetaEnum* metaEnum = ns->findEnum(QLatin1String("Option")); + QVERIFY(metaEnum); + const AbstractMetaFunction* func = ns->findFunction(QLatin1String("foo")); + QVERIFY(func); +} + +void NamespaceTest::testNamespaceInnerClassMembers() +{ + const char* cppCode = "\ + namespace OuterNamespace\n\ + {\n\ + namespace InnerNamespace {\n\ + struct SomeClass {\n\ + void method();\n\ + };\n\ + };\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *ons = AbstractMetaClass::findClass(classes, QLatin1String("OuterNamespace")); + QVERIFY(ons); + const AbstractMetaClass *ins = AbstractMetaClass::findClass(classes, QLatin1String("OuterNamespace::InnerNamespace")); + QVERIFY(ins); + const AbstractMetaClass *sc = AbstractMetaClass::findClass(classes, QLatin1String("OuterNamespace::InnerNamespace::SomeClass")); + QVERIFY(sc); + const AbstractMetaFunction* meth = sc->findFunction(QLatin1String("method")); + QVERIFY(meth); +} + +QTEST_APPLESS_MAIN(NamespaceTest) + diff --git a/sources/shiboken2/ApiExtractor/tests/testnamespace.h b/sources/shiboken2/ApiExtractor/tests/testnamespace.h new file mode 100644 index 0000000..5153a28 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testnamespace.h @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTNAMESPACE_H +#define TESTNAMESPACE_H + +#include + +// The class is named 'NamespaceTest' to avoid clashes with Qt COIN using +// '-qtnamespace TestNamespace'. +class NamespaceTest : public QObject +{ + Q_OBJECT + private slots: + void testNamespaceMembers(); + void testNamespaceInnerClassMembers(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testnestedtypes.cpp b/sources/shiboken2/ApiExtractor/tests/testnestedtypes.cpp new file mode 100644 index 0000000..10194eb --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testnestedtypes.cpp @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testnestedtypes.h" +#include +#include "testutil.h" +#include +#include + +void TestNestedTypes::testNestedTypesModifications() +{ + const char* cppCode ="\ + namespace OuterNamespace {\n\ + namespace InnerNamespace {\n\ + struct SomeClass {\n\ + void method() {}\n\ + };\n\ + };\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + custom_code1();\n\ + \n\ + custom_code2();\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + + const AbstractMetaClass *ons = AbstractMetaClass::findClass(classes, QLatin1String("OuterNamespace")); + QVERIFY(ons); + + const AbstractMetaClass *ins = AbstractMetaClass::findClass(classes, QLatin1String("OuterNamespace::InnerNamespace")); + QVERIFY(ins); + QCOMPARE(ins->functions().count(), 1); + QCOMPARE(ins->typeEntry()->codeSnips().count(), 1); + CodeSnip snip = ins->typeEntry()->codeSnips().first(); + QCOMPARE(snip.code(), QLatin1String("custom_code1();")); + + AbstractMetaFunction* addedFunc = ins->functions().first(); + QVERIFY(addedFunc->isUserAdded()); + QCOMPARE(addedFunc->visibility(), AbstractMetaFunction::Public); + QCOMPARE(addedFunc->functionType(), AbstractMetaFunction::NormalFunction); + QCOMPARE(addedFunc->type()->minimalSignature(), QLatin1String("OuterNamespace::InnerNamespace::SomeClass")); + + QCOMPARE(addedFunc->modifications().size(), 1); + QVERIFY(addedFunc->modifications().first().isCodeInjection()); + snip = addedFunc->modifications().first().snips.first(); + QCOMPARE(snip.code(), QLatin1String("custom_code2();")); + + const AbstractMetaClass *sc = AbstractMetaClass::findClass(classes, QLatin1String("OuterNamespace::InnerNamespace::SomeClass")); + QVERIFY(ins); + QCOMPARE(sc->functions().count(), 2); // default constructor and removed method + AbstractMetaFunction* removedFunc = sc->functions().last(); + QVERIFY(removedFunc->isModifiedRemoved()); +} + + +void TestNestedTypes::testDuplicationOfNestedTypes() +{ + const char* cppCode ="\ + namespace Namespace {\n\ + class SomeClass {};\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 2); + const AbstractMetaClass *nspace = AbstractMetaClass::findClass(classes, QLatin1String("Namespace")); + QVERIFY(nspace); + const AbstractMetaClass *cls1 = AbstractMetaClass::findClass(classes, QLatin1String("SomeClass")); + QVERIFY(cls1); + const AbstractMetaClass *cls2 = AbstractMetaClass::findClass(classes, QLatin1String("Namespace::SomeClass")); + QVERIFY(cls2); + QCOMPARE(cls1, cls2); + QCOMPARE(cls1->name(), QLatin1String("SomeClass")); + QCOMPARE(cls1->qualifiedCppName(), QLatin1String("Namespace::SomeClass")); + + TypeEntry* t1 = TypeDatabase::instance()->findType(QLatin1String("Namespace::SomeClass")); + QVERIFY(t1); + TypeEntry* t2 = TypeDatabase::instance()->findType(QLatin1String("SomeClass")); + QVERIFY(!t2); +} + +QTEST_APPLESS_MAIN(TestNestedTypes) diff --git a/sources/shiboken2/ApiExtractor/tests/testnestedtypes.h b/sources/shiboken2/ApiExtractor/tests/testnestedtypes.h new file mode 100644 index 0000000..a870511 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testnestedtypes.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTNESTEDTYPES_H +#define TESTNESTEDTYPES_H +#include + +class TestNestedTypes : public QObject +{ + Q_OBJECT +private slots: + void testNestedTypesModifications(); + void testDuplicationOfNestedTypes(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testnumericaltypedef.cpp b/sources/shiboken2/ApiExtractor/tests/testnumericaltypedef.cpp new file mode 100644 index 0000000..4f0b0e1 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testnumericaltypedef.cpp @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testnumericaltypedef.h" +#include +#include "testutil.h" +#include +#include + +void TestNumericalTypedef::testNumericalTypedef() +{ + const char* cppCode ="\ + typedef double real;\n\ + void funcDouble(double);\n\ + void funcReal(real);\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + QCOMPARE(builder->globalFunctions().size(), 2); + const AbstractMetaFunction* funcDouble = builder->globalFunctions().first(); + QVERIFY(funcDouble); + const AbstractMetaFunction* funcReal = builder->globalFunctions().last(); + QVERIFY(funcReal); + + if (funcDouble->name() == QLatin1String("funcReal")) + std::swap(funcDouble, funcReal); + + QCOMPARE(funcDouble->minimalSignature(), QLatin1String("funcDouble(double)")); + QCOMPARE(funcReal->minimalSignature(), QLatin1String("funcReal(real)")); + + const AbstractMetaType* doubleType = funcDouble->arguments().first()->type(); + QVERIFY(doubleType); + QCOMPARE(doubleType->cppSignature(), QLatin1String("double")); + QVERIFY(doubleType->isPrimitive()); + QVERIFY(doubleType->typeEntry()->isCppPrimitive()); + + const AbstractMetaType* realType = funcReal->arguments().first()->type(); + QVERIFY(realType); + QCOMPARE(realType->cppSignature(), QLatin1String("real")); + QVERIFY(realType->isPrimitive()); + QVERIFY(realType->typeEntry()->isCppPrimitive()); +} + +void TestNumericalTypedef::testUnsignedNumericalTypedef() +{ + const char* cppCode ="\ + typedef unsigned short ushort;\n\ + void funcUnsignedShort(unsigned short);\n\ + void funcUShort(ushort);\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + QCOMPARE(builder->globalFunctions().size(), 2); + const AbstractMetaFunction* funcUnsignedShort = builder->globalFunctions().first(); + QVERIFY(funcUnsignedShort); + const AbstractMetaFunction* funcUShort = builder->globalFunctions().last(); + QVERIFY(funcUShort); + + if (funcUnsignedShort->name() == QLatin1String("funcUShort")) + std::swap(funcUnsignedShort, funcUShort); + + QCOMPARE(funcUnsignedShort->minimalSignature(), QLatin1String("funcUnsignedShort(unsigned short)")); + QCOMPARE(funcUShort->minimalSignature(), QLatin1String("funcUShort(ushort)")); + + const AbstractMetaType* unsignedShortType = funcUnsignedShort->arguments().first()->type(); + QVERIFY(unsignedShortType); + QCOMPARE(unsignedShortType->cppSignature(), QLatin1String("unsigned short")); + QVERIFY(unsignedShortType->isPrimitive()); + QVERIFY(unsignedShortType->typeEntry()->isCppPrimitive()); + + const AbstractMetaType* ushortType = funcUShort->arguments().first()->type(); + QVERIFY(ushortType); + QCOMPARE(ushortType->cppSignature(), QLatin1String("ushort")); + QVERIFY(ushortType->isPrimitive()); + QVERIFY(ushortType->typeEntry()->isCppPrimitive()); +} + +QTEST_APPLESS_MAIN(TestNumericalTypedef) + diff --git a/sources/shiboken2/ApiExtractor/tests/testnumericaltypedef.h b/sources/shiboken2/ApiExtractor/tests/testnumericaltypedef.h new file mode 100644 index 0000000..e4e0510 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testnumericaltypedef.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTNUMERICALTYPEDEF_H +#define TESTNUMERICALTYPEDEF_H + +#include + +class TestNumericalTypedef : public QObject +{ + Q_OBJECT + private slots: + void testNumericalTypedef(); + void testUnsignedNumericalTypedef(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testprimitivetypetag.cpp b/sources/shiboken2/ApiExtractor/tests/testprimitivetypetag.cpp new file mode 100644 index 0000000..e78f9f2 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testprimitivetypetag.cpp @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testprimitivetypetag.h" +#include +#include "testutil.h" +#include +#include + +void TestPrimitiveTypeTag::testPrimitiveTypeDefaultConstructor() +{ + const char* cppCode ="\ + struct A {};\n\ + struct B {};\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 1); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(classB); + + PrimitiveTypeEntry* typeEntry = TypeDatabase::instance()->findPrimitiveType(QLatin1String("A")); + QVERIFY(typeEntry); + QVERIFY(typeEntry->hasDefaultConstructor()); + QCOMPARE(typeEntry->defaultConstructor(), QLatin1String("A()")); +} + +QTEST_APPLESS_MAIN(TestPrimitiveTypeTag) + diff --git a/sources/shiboken2/ApiExtractor/tests/testprimitivetypetag.h b/sources/shiboken2/ApiExtractor/tests/testprimitivetypetag.h new file mode 100644 index 0000000..ee5f515 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testprimitivetypetag.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTPRIMITIVETYPETAG_H +#define TESTPRIMITIVETYPETAG_H + +#include + +class TestPrimitiveTypeTag : public QObject +{ + Q_OBJECT + private slots: + void testPrimitiveTypeDefaultConstructor(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testrefcounttag.cpp b/sources/shiboken2/ApiExtractor/tests/testrefcounttag.cpp new file mode 100644 index 0000000..11cda33 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testrefcounttag.cpp @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testrefcounttag.h" +#include +#include "testutil.h" +#include +#include + +void TestRefCountTag::testReferenceCountTag() +{ + const char* cppCode ="\ + struct A {};\n\ + struct B {\n\ + void keepObject(B* b);\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + const AbstractMetaFunction* func = classB->findFunction(QLatin1String("keepObject")); + QVERIFY(func); + ReferenceCount refCount = func->modifications().first().argument_mods.first().referenceCounts.first(); + QCOMPARE(refCount.action, ReferenceCount::Add); +} + +void TestRefCountTag::testWithApiVersion() +{ + const char* cppCode ="\ + struct A {};\n\ + struct B {\n\ + void keepObject(B*, B*);\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false, "0.1")); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + const AbstractMetaFunction* func = classB->findFunction(QLatin1String("keepObject")); + QVERIFY(func); + ReferenceCount refCount = func->modifications().first().argument_mods.first().referenceCounts.first(); + QCOMPARE(refCount.action, ReferenceCount::Add); + + QCOMPARE(func->modifications().size(), 1); +} + + +QTEST_APPLESS_MAIN(TestRefCountTag) + + diff --git a/sources/shiboken2/ApiExtractor/tests/testrefcounttag.h b/sources/shiboken2/ApiExtractor/tests/testrefcounttag.h new file mode 100644 index 0000000..4acbddc --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testrefcounttag.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTREFCOUNTTAG_H +#define TESTREFCOUNTTAG_H + +#include + +class TestRefCountTag : public QObject +{ + Q_OBJECT + private slots: + void testReferenceCountTag(); + void testWithApiVersion(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testreferencetopointer.cpp b/sources/shiboken2/ApiExtractor/tests/testreferencetopointer.cpp new file mode 100644 index 0000000..c7b4abe --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testreferencetopointer.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testreferencetopointer.h" +#include +#include "testutil.h" +#include +#include + +void TestReferenceToPointer::testReferenceToPointerArgument() +{ + const char* cppCode ="\ + struct A {};\n\ + struct B {\n\ + void dummy(A*&);\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(classB); + const AbstractMetaFunction* func = classB->findFunction(QLatin1String("dummy")); + QVERIFY(func); + QCOMPARE(func->arguments().first()->type()->minimalSignature(), QLatin1String("A*&")); +} + +QTEST_APPLESS_MAIN(TestReferenceToPointer) + + diff --git a/sources/shiboken2/ApiExtractor/tests/testreferencetopointer.h b/sources/shiboken2/ApiExtractor/tests/testreferencetopointer.h new file mode 100644 index 0000000..0f717b5 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testreferencetopointer.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTREFERENCETOPOINTER_H +#define TESTREFERENCETOPOINTER_H + +#include + +class TestReferenceToPointer : public QObject +{ + Q_OBJECT + private slots: + void testReferenceToPointerArgument(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testremovefield.cpp b/sources/shiboken2/ApiExtractor/tests/testremovefield.cpp new file mode 100644 index 0000000..b586fd7 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testremovefield.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testremovefield.h" +#include +#include "testutil.h" +#include +#include + +void TestRemoveField::testRemoveField() +{ + const char* cppCode ="\ + struct A {\n\ + int fieldA;\n\ + int fieldB;\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QCOMPARE(classA->fields().size(), 1); + const AbstractMetaField* fieldA = classA->fields().first(); + QVERIFY(fieldA); + QCOMPARE(fieldA->name(), QLatin1String("fieldA")); +} + +QTEST_APPLESS_MAIN(TestRemoveField) + + diff --git a/sources/shiboken2/ApiExtractor/tests/testremovefield.h b/sources/shiboken2/ApiExtractor/tests/testremovefield.h new file mode 100644 index 0000000..8b52cc3 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testremovefield.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTREMOVEFIELD_H +#define TESTREMOVEFIELD_H + +#include + +class TestRemoveField : public QObject +{ + Q_OBJECT + private slots: + void testRemoveField(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testremoveimplconv.cpp b/sources/shiboken2/ApiExtractor/tests/testremoveimplconv.cpp new file mode 100644 index 0000000..96090d1 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testremoveimplconv.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testremoveimplconv.h" +#include "testutil.h" +#include +#include +#include + +// When a constructor able to trigger implicity conversions is removed +// it should not appear in the implicity conversion list. +void TestRemoveImplConv::testRemoveImplConv() +{ + const char* cppCode ="\ + struct A {};\n\ + struct B {};\n\ + struct C {\n\ + C(const A&);\n\ + C(const B&);\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 3); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(classB); + const AbstractMetaClass *classC = AbstractMetaClass::findClass(classes, QLatin1String("C")); + QVERIFY(classC); + AbstractMetaFunctionList implConv = classC->implicitConversions(); + QCOMPARE(implConv.count(), 1); + QCOMPARE(implConv.first()->arguments().first()->type()->typeEntry(), classB->typeEntry()); +} + +QTEST_APPLESS_MAIN(TestRemoveImplConv) diff --git a/sources/shiboken2/ApiExtractor/tests/testremoveimplconv.h b/sources/shiboken2/ApiExtractor/tests/testremoveimplconv.h new file mode 100644 index 0000000..9e96dc2 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testremoveimplconv.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTREMOVEIMPLCONV_H +#define TESTREMOVEIMPLCONV_H + +#include + +class TestRemoveImplConv : public QObject +{ +Q_OBJECT +private slots: + void testRemoveImplConv(); +}; + +#endif // TESTREMOVEIMPLCONV_H diff --git a/sources/shiboken2/ApiExtractor/tests/testremoveoperatormethod.cpp b/sources/shiboken2/ApiExtractor/tests/testremoveoperatormethod.cpp new file mode 100644 index 0000000..a6d28cc --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testremoveoperatormethod.cpp @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testremoveoperatormethod.h" +#include +#include "testutil.h" +#include +#include + +void TestRemoveOperatorMethod::testRemoveOperatorMethod() +{ + const char* cppCode ="\ + #include \n\ + \n\ + struct Char {};\n\ + struct ByteArray {};\n\ + struct String {};\n\ + \n\ + struct A {\n\ + A& operator>>(char&);\n\ + A& operator>>(char*);\n\ + A& operator>>(short&);\n\ + A& operator>>(unsigned short&);\n\ + A& operator>>(int&);\n\ + A& operator>>(unsigned int&);\n\ + A& operator>>(int64_t&);\n\ + A& operator>>(uint64_t&);\n\ + A& operator>>(float&);\n\ + A& operator>>(double&);\n\ + A& operator>>(Char&);\n\ + A& operator>>(ByteArray&);\n\ + A& operator>>(String&);\n\ + };\n"; + const char* xmlCode = "\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n"; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QCOMPARE(classA->functions().size(), 14); + QStringList removedSignatures; + removedSignatures.append(QLatin1String("operator>>(char&)")); + removedSignatures.append(QLatin1String("operator>>(char*)")); + removedSignatures.append(QLatin1String("operator>>(short&)")); + removedSignatures.append(QLatin1String("operator>>(unsigned short&)")); + removedSignatures.append(QLatin1String("operator>>(int&)")); + removedSignatures.append(QLatin1String("operator>>(unsigned int&)")); + removedSignatures.append(QLatin1String("operator>>(int64_t&)")); + removedSignatures.append(QLatin1String("operator>>(uint64_t&)")); + removedSignatures.append(QLatin1String("operator>>(float&)")); + removedSignatures.append(QLatin1String("operator>>(double&)")); + removedSignatures.append(QLatin1String("operator>>(Char&)")); + removedSignatures.append(QLatin1String("operator>>(String&)")); + int notRemoved = classA->functions().size(); + const AbstractMetaFunctionList &functions = classA->functions(); + for (const AbstractMetaFunction *f : functions) { + QCOMPARE(f->isModifiedRemoved(), bool(removedSignatures.contains(f->minimalSignature()))); + notRemoved -= int(f->isModifiedRemoved()); + } + QCOMPARE(notRemoved, 2); +} + +QTEST_APPLESS_MAIN(TestRemoveOperatorMethod) + diff --git a/sources/shiboken2/ApiExtractor/tests/testremoveoperatormethod.h b/sources/shiboken2/ApiExtractor/tests/testremoveoperatormethod.h new file mode 100644 index 0000000..23c3e51 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testremoveoperatormethod.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTREMOVEOPERATORMETHOD_H +#define TESTREMOVEOPERATORMETHOD_H + +#include + +class TestRemoveOperatorMethod : public QObject +{ + Q_OBJECT + private slots: + void testRemoveOperatorMethod(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testresolvetype.cpp b/sources/shiboken2/ApiExtractor/tests/testresolvetype.cpp new file mode 100644 index 0000000..2e5a575 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testresolvetype.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testresolvetype.h" +#include +#include "testutil.h" +#include +#include + +void TestResolveType::testResolveReturnTypeFromParentScope() +{ + const char* cppCode = "\n\ + namespace A {\n\ + struct B {\n\ + struct C {};\n\ + };\n\ + struct D : public B::C {\n\ + C* foo = 0;\n\ + C* method();\n\ + };\n\ + };"; + const char* xmlCode = "\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + "; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classD = AbstractMetaClass::findClass(classes, QLatin1String("A::D")); + QVERIFY(classD); + const AbstractMetaFunction* meth = classD->findFunction(QLatin1String("method")); + QVERIFY(meth); +} + +QTEST_APPLESS_MAIN(TestResolveType) + diff --git a/sources/shiboken2/ApiExtractor/tests/testresolvetype.h b/sources/shiboken2/ApiExtractor/tests/testresolvetype.h new file mode 100644 index 0000000..62c08bc --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testresolvetype.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTRESOLVETYPE_H +#define TESTRESOLVETYPE_H + +#include + +class TestResolveType : public QObject +{ + Q_OBJECT + private slots: + void testResolveReturnTypeFromParentScope(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testreverseoperators.cpp b/sources/shiboken2/ApiExtractor/tests/testreverseoperators.cpp new file mode 100644 index 0000000..2ea9559 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testreverseoperators.cpp @@ -0,0 +1,139 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testreverseoperators.h" +#include +#include "testutil.h" +#include +#include + +void TestReverseOperators::testReverseSum() +{ + const char cppCode[] = "struct A {\n\ + A& operator+(int);\n\ + };\n\ + A& operator+(int, const A&);"; + const char xmlCode[] = "\n\ + \n\ + \n\ + \n\ + "; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QCOMPARE(classA->functions().count(), 4); + + const AbstractMetaFunction* reverseOp = 0; + const AbstractMetaFunction* normalOp = 0; + for (const AbstractMetaFunction *func : classA->functions()) { + if (func->name() == QLatin1String("operator+")) { + if (func->isReverseOperator()) + reverseOp = func; + else + normalOp = func; + } + } + + QVERIFY(normalOp); + QVERIFY(!normalOp->isReverseOperator()); + QCOMPARE(normalOp->arguments().count(), 1); + QVERIFY(reverseOp); + QVERIFY(reverseOp->isReverseOperator()); + QCOMPARE(reverseOp->arguments().count(), 1); +} + +void TestReverseOperators::testReverseSumWithAmbiguity() +{ + const char cppCode[] = "\n\ + struct A { A operator+(int); };\n\ + A operator+(int, const A&);\n\ + struct B {};\n\ + B operator+(const A&, const B&);\n\ + B operator+(const B&, const A&);\n\ + int operator-(int, const A*);\n\ + int operator/(const A*, int);\n\ + "; + const char xmlCode[] = "\n\ + \n\ + \n\ + \n\ + \n\ + "; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QEXPECT_FAIL("", "Clang: Does not compile", Abort); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QCOMPARE(classA->functions().count(), 6); + + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(classB); + QCOMPARE(classB->functions().count(), 4); + + const AbstractMetaFunction* reverseOp = 0; + const AbstractMetaFunction* normalOp = 0; + for (const AbstractMetaFunction *func : classB->functions()) { + if (func->name() == QLatin1String("operator+")) { + if (func->isReverseOperator()) + reverseOp = func; + else + normalOp = func; + } + } + QVERIFY(normalOp); + QVERIFY(!normalOp->isReverseOperator()); + QCOMPARE(normalOp->arguments().count(), 1); + QCOMPARE(normalOp->minimalSignature(), QLatin1String("operator+(B,A)")); + QVERIFY(reverseOp); + QVERIFY(reverseOp->isReverseOperator()); + QCOMPARE(reverseOp->arguments().count(), 1); + QCOMPARE(reverseOp->minimalSignature(), QLatin1String("operator+(A,B)")); + + reverseOp = classA->findFunction(QLatin1String("operator-")); + QVERIFY(reverseOp); + QCOMPARE(reverseOp->arguments().count(), 1); + QVERIFY(reverseOp->isPointerOperator()); + QVERIFY(reverseOp->isReverseOperator()); + + normalOp = classA->findFunction(QLatin1String("operator/")); + QVERIFY(normalOp); + QCOMPARE(normalOp->arguments().count(), 1); + QVERIFY(normalOp->isPointerOperator()); + QVERIFY(!normalOp->isReverseOperator()); + +} + + + +QTEST_APPLESS_MAIN(TestReverseOperators) + diff --git a/sources/shiboken2/ApiExtractor/tests/testreverseoperators.h b/sources/shiboken2/ApiExtractor/tests/testreverseoperators.h new file mode 100644 index 0000000..ba3b43c --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testreverseoperators.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTREVERSEOPERATORS_H +#define TESTREVERSEOPERATORS_H +#include + +class TestReverseOperators : public QObject +{ + Q_OBJECT +private slots: + void testReverseSum(); + void testReverseSumWithAmbiguity(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testtemplates.cpp b/sources/shiboken2/ApiExtractor/tests/testtemplates.cpp new file mode 100644 index 0000000..8d869e3 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testtemplates.cpp @@ -0,0 +1,441 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testtemplates.h" +#include +#include +#include "testutil.h" +#include +#include + +void TestTemplates::testTemplateWithNamespace() +{ + const char cppCode[] = R"CPP( +template struct QList {}; +struct Url { + void name(); +}; +namespace Internet { + struct Url{}; + struct Bookmarks { + QList list(); + }; +}; +)CPP"; + + const char xmlCode0[] = R"XML( + + +)XML"; + + QTemporaryFile file; + QVERIFY(file.open()); + file.write(xmlCode0); + file.close(); + + QString xmlCode1 = QString::fromLatin1(R"XML( + + + + + + +)XML").arg(file.fileName()); + + QScopedPointer builder(TestUtil::parse(cppCode, qPrintable(xmlCode1), false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + + AbstractMetaClass* classB = AbstractMetaClass::findClass(classes, QLatin1String("Bookmarks")); + QVERIFY(classB); + const AbstractMetaFunction* func = classB->findFunction(QLatin1String("list")); + AbstractMetaType* funcType = func->type(); + QVERIFY(funcType); + QCOMPARE(funcType->cppSignature(), QLatin1String("QList")); +} + +void TestTemplates::testTemplateOnContainers() +{ + const char cppCode[] = R"CPP( +struct Base {}; +template struct QList {}; +namespace Namespace { + enum SomeEnum { E1, E2 }; + template struct A { + A foo(const QList >& a); + }; + typedef A B; +} +)CPP"; + + const char xmlCode[] = R"XML( + + + + + + + +)XML"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + + AbstractMetaClass* classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(classB); + QVERIFY(!classB->baseClass()); + QVERIFY(classB->baseClassName().isNull()); + const AbstractMetaFunction* func = classB->findFunction(QLatin1String("foo")); + AbstractMetaType* argType = func->arguments().first()->type(); + QCOMPARE(argType->instantiations().count(), 1); + QCOMPARE(argType->typeEntry()->qualifiedCppName(), QLatin1String("QList")); + + const AbstractMetaType* instance1 = argType->instantiations().first(); + QCOMPARE(instance1->instantiations().count(), 1); + QCOMPARE(instance1->typeEntry()->qualifiedCppName(), QLatin1String("Namespace::A")); + + const AbstractMetaType* instance2 = instance1->instantiations().first(); + QCOMPARE(instance2->instantiations().count(), 0); + QCOMPARE(instance2->typeEntry()->qualifiedCppName(), QLatin1String("Namespace::E1")); +} + +void TestTemplates::testTemplateValueAsArgument() +{ + const char cppCode[] = R"CPP( +template struct List {}; +void func(List arg) {} +)CPP"; + + const char xmlCode[] = R"XML( + + + + +)XML"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaFunctionList globalFuncs = builder->globalFunctions(); + QCOMPARE(globalFuncs.count(), 1); + + AbstractMetaFunction* func = globalFuncs.first(); + QCOMPARE(func->minimalSignature(), QLatin1String("func(List)")); + QCOMPARE(func->arguments().first()->type()->cppSignature(), QLatin1String("List")); +} + +void TestTemplates::testTemplatePointerAsArgument() +{ + const char cppCode[] = R"CPP( +template struct List {}; +void func(List* arg) {} +)CPP"; + + const char xmlCode[] = R"XML( + + + + + )XML"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaFunctionList globalFuncs = builder->globalFunctions(); + QCOMPARE(globalFuncs.count(), 1); + + AbstractMetaFunction* func = globalFuncs.first(); + QCOMPARE(func->minimalSignature(), QLatin1String("func(List*)")); + QCOMPARE(func->arguments().first()->type()->cppSignature(), QLatin1String("List *")); +} + +void TestTemplates::testTemplateReferenceAsArgument() +{ + const char cppCode[] = R"CPP( +template struct List {}; +void func(List& arg) {} + )CPP"; + + const char xmlCode[] = R"XML( + + + + +)XML"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaFunctionList globalFuncs = builder->globalFunctions(); + QCOMPARE(globalFuncs.count(), 1); + + AbstractMetaFunction* func = globalFuncs.first(); + QCOMPARE(func->minimalSignature(), QLatin1String("func(List&)")); + QCOMPARE(func->arguments().first()->type()->cppSignature(), QLatin1String("List &")); +} + +void TestTemplates::testTemplateParameterFixup() +{ + const char cppCode[] = R"CPP( +template +struct List { + struct Iterator {}; + void append(List l); + void erase(List::Iterator it); +}; +)CPP"; + + const char xmlCode[] = R"XML( + + + + )XML"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + const AbstractMetaClassList templates = builder->templates(); + + QCOMPARE(templates.count(), 1); + const AbstractMetaClass *list = templates.first(); + // Verify that the parameter of "void append(List l)" gets fixed to "List" + const AbstractMetaFunction *append = list->findFunction(QStringLiteral("append")); + QVERIFY(append); + QCOMPARE(append->arguments().size(), 1); + QCOMPARE(append->arguments().at(0)->type()->cppSignature(), QLatin1String("List")); + // Verify that the parameter of "void erase(Iterator)" is not modified + const AbstractMetaFunction *erase = list->findFunction(QStringLiteral("erase")); + QVERIFY(erase); + QCOMPARE(erase->arguments().size(), 1); + QEXPECT_FAIL("", "Clang: Some other code changes the parameter type", Abort); + QCOMPARE(erase->arguments().at(0)->type()->cppSignature(), QLatin1String("List::Iterator")); +} + +void TestTemplates::testInheritanceFromContainterTemplate() +{ + const char cppCode[] = R"CPP( +template +struct ListContainer { + inline void push_front(const T& t); + inline T& front(); +}; +struct FooBar {}; +struct FooBars : public ListContainer {}; +)CPP"; + + const char xmlCode[] = R"XML( + + + + + + + +)XML"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + AbstractMetaClassList templates = builder->templates(); + QCOMPARE(classes.count(), 2); + QCOMPARE(templates.count(), 1); + + const AbstractMetaClass* foobars = AbstractMetaClass::findClass(classes, QLatin1String("FooBars")); + QCOMPARE(foobars->functions().count(), 4); + + const AbstractMetaClass* lc = templates.first(); + QCOMPARE(lc->functions().count(), 2); +} + +void TestTemplates::testTemplateInheritanceMixedWithForwardDeclaration() +{ + const char cppCode[] = R"CPP( +enum SomeEnum { E1, E2 }; +template struct Future; +template +struct A { + A(); + void method(); + friend struct Future; +}; +typedef A B; +template struct Future {}; +)CPP"; + + const char xmlCode[] = R"XML( + + + + + +)XML"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + + AbstractMetaClass* classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(classB); + QVERIFY(!classB->baseClass()); + QVERIFY(classB->baseClassName().isNull()); + // 3 functions: simple constructor, copy constructor and "method()". + QCOMPARE(classB->functions().count(), 3); +} + +void TestTemplates::testTemplateInheritanceMixedWithNamespaceAndForwardDeclaration() +{ + const char cppCode[] = R"CPP( +namespace Namespace { +enum SomeEnum { E1, E2 }; +template struct Future; +template +struct A { + A(); + void method(); + friend struct Future; +}; +typedef A B; +template struct Future {}; +}; +)CPP"; + + const char xmlCode[] = R"XML( + + + + + + +)XML"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + + AbstractMetaClass* classB = AbstractMetaClass::findClass(classes, QLatin1String("Namespace::B")); + QVERIFY(classB); + QVERIFY(!classB->baseClass()); + QVERIFY(classB->baseClassName().isNull()); + // 3 functions: simple constructor, copy constructor and "method()". + QCOMPARE(classB->functions().count(), 3); +} + +void TestTemplates::testTypedefOfInstantiationOfTemplateClass() +{ + const char cppCode[] = R"CPP( +namespace NSpace { +enum ClassType { + TypeOne +}; +template +struct BaseTemplateClass { + inline ClassType getClassType() const { CLASS_TYPE; } +}; +typedef BaseTemplateClass TypeOneClass; +} +)CPP"; + + const char xmlCode[] = R"XML( + + + + + + +)XML"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 3); + + const AbstractMetaClass* base = AbstractMetaClass::findClass(classes, QLatin1String("BaseTemplateClass")); + QVERIFY(base); + const AbstractMetaClass* one = AbstractMetaClass::findClass(classes, QLatin1String("TypeOneClass")); + QVERIFY(one); + QCOMPARE(one->templateBaseClass(), base); + QCOMPARE(one->functions().count(), base->functions().count()); + QVERIFY(one->isTypeDef()); + const ComplexTypeEntry* oneType = one->typeEntry(); + const ComplexTypeEntry* baseType = base->typeEntry(); + QCOMPARE(oneType->baseContainerType(), baseType); + QCOMPARE(one->baseClassNames(), QStringList(QLatin1String("BaseTemplateClass"))); + + QVERIFY(one->hasTemplateBaseClassInstantiations()); + AbstractMetaTypeList instantiations = one->templateBaseClassInstantiations(); + QCOMPARE(instantiations.count(), 1); + const AbstractMetaType* inst = instantiations.first(); + QVERIFY(inst); + QVERIFY(!inst->isEnum()); + QVERIFY(!inst->typeEntry()->isEnum()); + QVERIFY(inst->typeEntry()->isEnumValue()); + QCOMPARE(inst->cppSignature(), QLatin1String("NSpace::TypeOne")); +} + +void TestTemplates::testContainerTypeIncompleteArgument() +{ + const char cppCode[] = R"CPP( +template +class Vector { + void method(const Vector& vector); + Vector otherMethod(); +}; +template +void Vector::method(const Vector& vector) {} +template +Vector Vector::otherMethod() { return Vector(); } +typedef Vector IntVector; +)CPP"; + + const char xmlCode[] = R"XML( + + + + +)XML"; + + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, true)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + QCOMPARE(classes.count(), 1); + + AbstractMetaClass* vector = AbstractMetaClass::findClass(classes, QLatin1String("IntVector")); + QVERIFY(vector); + QVERIFY(vector->typeEntry()->baseContainerType()); + QCOMPARE(reinterpret_cast(vector->typeEntry()->baseContainerType())->type(), ContainerTypeEntry::VectorContainer); + QCOMPARE(vector->functions().count(), 4); + + const AbstractMetaFunction* method = vector->findFunction(QLatin1String("method")); + QVERIFY(method); + QCOMPARE(method->signature(), QLatin1String("method(const Vector & vector)")); + + const AbstractMetaFunction* otherMethod = vector->findFunction(QLatin1String("otherMethod")); + QVERIFY(otherMethod); + QCOMPARE(otherMethod->signature(), QLatin1String("otherMethod()")); + QVERIFY(otherMethod->type()); + QCOMPARE(otherMethod->type()->cppSignature(), QLatin1String("Vector")); +} + +QTEST_APPLESS_MAIN(TestTemplates) diff --git a/sources/shiboken2/ApiExtractor/tests/testtemplates.h b/sources/shiboken2/ApiExtractor/tests/testtemplates.h new file mode 100644 index 0000000..3e15659 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testtemplates.h @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTTEMPLATES_H +#define TESTTEMPLATES_H + +#include + +class TestTemplates : public QObject +{ + Q_OBJECT +private slots: + void testTemplateOnContainers(); + void testTemplateWithNamespace(); + void testTemplateValueAsArgument(); + void testTemplatePointerAsArgument(); + void testTemplateReferenceAsArgument(); + void testTemplateParameterFixup(); + void testInheritanceFromContainterTemplate(); + void testTemplateInheritanceMixedWithForwardDeclaration(); + void testTemplateInheritanceMixedWithNamespaceAndForwardDeclaration(); + void testTypedefOfInstantiationOfTemplateClass(); + void testContainerTypeIncompleteArgument(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testtoposort.cpp b/sources/shiboken2/ApiExtractor/tests/testtoposort.cpp new file mode 100644 index 0000000..9d77295 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testtoposort.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testtoposort.h" +#include +#include "graph.h" +#include + +void TestTopoSort::testTopoSort() +{ + QLinkedList result; + { + Graph g(3); + g.addEdge(1, 2); + g.addEdge(0, 1); + result = g.topologicalSort(); + QCOMPARE(result.size(), 3); + QLinkedList::iterator it = result.begin(); + QCOMPARE(*it, 0); + QCOMPARE(*(++it), 1); + QCOMPARE(*(++it), 2); + } + { + Graph g(2); + result = g.topologicalSort(); + QCOMPARE(result.size(), 2); + QLinkedList::iterator it = result.begin(); + QCOMPARE(*it, 1); + QCOMPARE(*(++it), 0); + } +} + +void TestTopoSort::testCiclicGraph() +{ + Graph g(3); + g.addEdge(0, 1); + g.addEdge(1, 2); + g.addEdge(2, 0); + QLinkedList result = g.topologicalSort(); + QVERIFY(result.isEmpty()); +} + +QTEST_APPLESS_MAIN(TestTopoSort) + diff --git a/sources/shiboken2/ApiExtractor/tests/testtoposort.h b/sources/shiboken2/ApiExtractor/tests/testtoposort.h new file mode 100644 index 0000000..0770a8d --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testtoposort.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTTOPOSORT_H +#define TESTTOPOSORT_H + +#include + +class TestTopoSort : public QObject +{ +Q_OBJECT +private slots: + void testTopoSort(); + void testCiclicGraph(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testtyperevision.cpp b/sources/shiboken2/ApiExtractor/tests/testtyperevision.cpp new file mode 100644 index 0000000..1ec7ce0 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testtyperevision.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testtyperevision.h" +#include +#include "testutil.h" +#include +#include + +void TestTypeRevision::testRevisionAttr() +{ + const char* cppCode = "class Rev_0 {};" + "class Rev_1 {};" + "class Rev_2 { public: enum Rev_3 { X }; enum Rev_5 { Y }; };"; + const char* xmlCode = "" + "" + "" + "" + " " + " " + "" + ""; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *rev0 = AbstractMetaClass::findClass(classes, QLatin1String("Rev_0")); + QCOMPARE(getTypeRevision(rev0->typeEntry()), 0); + + const AbstractMetaClass *rev1 = AbstractMetaClass::findClass(classes, QLatin1String("Rev_1")); + QCOMPARE(getTypeRevision(rev1->typeEntry()), 1); + + AbstractMetaClass *rev2 = AbstractMetaClass::findClass(classes, QLatin1String("Rev_2")); + QCOMPARE(getTypeRevision(rev2->typeEntry()), 2); + + AbstractMetaEnum* rev3 = rev2->findEnum(QLatin1String("Rev_3")); + QCOMPARE(getTypeRevision(rev3->typeEntry()), 3); + FlagsTypeEntry* rev4 = rev3->typeEntry()->flags(); + QCOMPARE(getTypeRevision(rev4), 4); + AbstractMetaEnum* rev5 = rev2->findEnum(QLatin1String("Rev_5")); + QCOMPARE(getTypeRevision(rev5->typeEntry()), 5); + QCOMPARE(getTypeRevision(rev5->typeEntry()->flags()), 5); +} + +QTEST_APPLESS_MAIN(TestTypeRevision) + + diff --git a/sources/shiboken2/ApiExtractor/tests/testtyperevision.h b/sources/shiboken2/ApiExtractor/tests/testtyperevision.h new file mode 100644 index 0000000..4dfa241 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testtyperevision.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTTYPEREVISION_H +#define TESTTYPEREVISION_H + +#include + +class TestTypeRevision : public QObject +{ + Q_OBJECT + +private slots: + void testRevisionAttr(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testutil.h b/sources/shiboken2/ApiExtractor/tests/testutil.h new file mode 100644 index 0000000..6152793 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testutil.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTUTIL_H +#define TESTUTIL_H +#include +#include +#include +#include +#include "abstractmetabuilder.h" +#include "reporthandler.h" +#include "typedatabase.h" + +namespace TestUtil +{ + static AbstractMetaBuilder *parse(const char *cppCode, const char *xmlCode, + bool silent = true, + const char *apiVersion = Q_NULLPTR, + const QStringList &dropTypeEntries = QStringList()) + { + ReportHandler::setSilent(silent); + TypeDatabase* td = TypeDatabase::instance(true); + if (apiVersion && !td->setApiVersion(QLatin1String("*"), QLatin1String(apiVersion))) + return Q_NULLPTR; + td->setDropTypeEntries(dropTypeEntries); + QBuffer buffer; + // parse typesystem + buffer.setData(xmlCode); + if (!buffer.open(QIODevice::ReadOnly)) + return Q_NULLPTR; + td->parseFile(&buffer); + buffer.close(); + // parse C++ code + QTemporaryFile tempSource(QDir::tempPath() + QLatin1String("/st_XXXXXX_main.cpp")); + if (!tempSource.open()) { + qWarning().noquote().nospace() << "Creation of temporary file failed: " + << tempSource.errorString(); + return nullptr; + } + QByteArrayList arguments; + arguments.append(QFile::encodeName(tempSource.fileName())); + tempSource.write(cppCode, qint64(strlen(cppCode))); + tempSource.close(); + AbstractMetaBuilder *builder = new AbstractMetaBuilder; + if (!builder->build(arguments)) { + delete builder; + return Q_NULLPTR; + } + return builder; + } +} // namespace TestUtil + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testvaluetypedefaultctortag.cpp b/sources/shiboken2/ApiExtractor/tests/testvaluetypedefaultctortag.cpp new file mode 100644 index 0000000..1850025 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testvaluetypedefaultctortag.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testvaluetypedefaultctortag.h" +#include +#include "testutil.h" +#include +#include + +void TestValueTypeDefaultCtorTag::testValueTypeDefaultCtorTagArgument() +{ + const char* cppCode ="\n\ + struct A {\n\ + A(int,int);\n\ + };\n\ + struct B {};\n\ + "; + const char* xmlCode = "\n\ + \n\ + \n\ + \n\ + \n\ + "; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode, false)); + QVERIFY(!builder.isNull()); + + AbstractMetaClassList classes = builder->classes(); + + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + QVERIFY(classA->typeEntry()->hasDefaultConstructor()); + QCOMPARE(classA->typeEntry()->defaultConstructor(), QLatin1String("A(0, 0)")); + + const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); + QVERIFY(classB); + QVERIFY(!classB->typeEntry()->hasDefaultConstructor()); +} + +QTEST_APPLESS_MAIN(TestValueTypeDefaultCtorTag) diff --git a/sources/shiboken2/ApiExtractor/tests/testvaluetypedefaultctortag.h b/sources/shiboken2/ApiExtractor/tests/testvaluetypedefaultctortag.h new file mode 100644 index 0000000..2441817 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testvaluetypedefaultctortag.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTVALUETYPEDEFAULTCTORTAG_H +#define TESTVALUETYPEDEFAULTCTORTAG_H + +#include + +class TestValueTypeDefaultCtorTag : public QObject +{ + Q_OBJECT + private slots: + void testValueTypeDefaultCtorTagArgument(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/testvoidarg.cpp b/sources/shiboken2/ApiExtractor/tests/testvoidarg.cpp new file mode 100644 index 0000000..6868155 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testvoidarg.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testvoidarg.h" +#include +#include "testutil.h" +#include +#include + +void TestVoidArg::testVoidParsedFunction() +{ + const char cppCode[] = "struct A { void a(void); };"; + const char xmlCode[] = "\n\ + \n\ + \n\ + "; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("a")); + QCOMPARE(addedFunc->arguments().count(), 0); +} + +void TestVoidArg::testVoidAddedFunction() +{ + const char cppCode[] = "struct A { };"; + const char xmlCode[] = "\n\ + \n\ + \n\ + \n\ + \n\ + "; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("a")); + QCOMPARE(addedFunc->arguments().count(), 0); + +} + +void TestVoidArg::testVoidPointerParsedFunction() +{ + const char cppCode[] = "struct A { void a(void*); };"; + const char xmlCode[] = "\n\ + \n\ + \n\ + "; + QScopedPointer builder(TestUtil::parse(cppCode, xmlCode)); + QVERIFY(!builder.isNull()); + AbstractMetaClassList classes = builder->classes(); + const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); + QVERIFY(classA); + const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("a")); + QCOMPARE(addedFunc->arguments().count(), 1); + +} + +QTEST_APPLESS_MAIN(TestVoidArg) diff --git a/sources/shiboken2/ApiExtractor/tests/testvoidarg.h b/sources/shiboken2/ApiExtractor/tests/testvoidarg.h new file mode 100644 index 0000000..44d90d0 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/testvoidarg.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTVOIDARG_H +#define TESTVOIDARG_H +#include + +class TestVoidArg : public QObject +{ + Q_OBJECT +private slots: + void testVoidParsedFunction(); + void testVoidPointerParsedFunction(); + void testVoidAddedFunction(); +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/tests/utf8code.txt b/sources/shiboken2/ApiExtractor/tests/utf8code.txt new file mode 100644 index 0000000..6d5fa9d --- /dev/null +++ b/sources/shiboken2/ApiExtractor/tests/utf8code.txt @@ -0,0 +1 @@ +áéíóú \ No newline at end of file diff --git a/sources/shiboken2/ApiExtractor/typedatabase.cpp b/sources/shiboken2/ApiExtractor/typedatabase.cpp new file mode 100644 index 0000000..9529de4 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/typedatabase.cpp @@ -0,0 +1,781 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "typedatabase.h" +#include "typesystem.h" +#include "typesystem_p.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include "reporthandler.h" +// #include +#include + +// package -> api-version + +static QString wildcardToRegExp(QString w) +{ + w.replace(QLatin1Char('?'), QLatin1Char('.')); + w.replace(QLatin1Char('*'), QStringLiteral(".*")); + return w; +} + +typedef QPair ApiVersion; +typedef QVector ApiVersions; + +Q_GLOBAL_STATIC(ApiVersions, apiVersions) + +TypeDatabase::TypeDatabase() : m_suppressWarnings(true) +{ + addType(new VoidTypeEntry()); + addType(new VarargsTypeEntry()); +} + +TypeDatabase::~TypeDatabase() +{ +} + +TypeDatabase* TypeDatabase::instance(bool newInstance) +{ + static TypeDatabase* db = 0; + if (!db || newInstance) { + if (db) + delete db; + db = new TypeDatabase; + } + return db; +} + +// A list of regex/replacements to fix int types like "ushort" to "unsigned short" +// unless present in TypeDatabase +struct IntTypeNormalizationEntry +{ + QRegularExpression regex; + QString replacement; +}; + +typedef QVector IntTypeNormalizationEntries; + +static const IntTypeNormalizationEntries &intTypeNormalizationEntries() +{ + static IntTypeNormalizationEntries result; + static bool firstTime = true; + if (firstTime) { + firstTime = false; + static const char *intTypes[] = {"char", "short", "int", "long"}; + const size_t size = sizeof(intTypes) / sizeof(intTypes[0]); + for (size_t i = 0; i < size; ++i) { + const QString intType = QLatin1String(intTypes[i]); + if (!TypeDatabase::instance()->findType(QLatin1Char('u') + intType)) { + IntTypeNormalizationEntry entry; + entry.replacement = QStringLiteral("unsigned ") + intType; + entry.regex.setPattern(QStringLiteral("\\bu") + intType + QStringLiteral("\\b")); + Q_ASSERT(entry.regex.isValid()); + result.append(entry); + } + } + } + return result; +} + +QString TypeDatabase::normalizedSignature(const QString &signature) +{ + QString normalized = QLatin1String(QMetaObject::normalizedSignature(signature.toUtf8().constData())); + + if (instance() && signature.contains(QLatin1String("unsigned"))) { + const IntTypeNormalizationEntries &entries = intTypeNormalizationEntries(); + for (int i = 0, size = entries.size(); i < size; ++i) + normalized.replace(entries.at(i).regex, entries.at(i).replacement); + } + + return normalized; +} + +QStringList TypeDatabase::requiredTargetImports() const +{ + return m_requiredTargetImports; +} + +void TypeDatabase::addRequiredTargetImport(const QString& moduleName) +{ + if (!m_requiredTargetImports.contains(moduleName)) + m_requiredTargetImports << moduleName; +} + +void TypeDatabase::addTypesystemPath(const QString& typesystem_paths) +{ + #if defined(Q_OS_WIN32) + const char path_splitter = ';'; + #else + const char path_splitter = ':'; + #endif + m_typesystemPaths += typesystem_paths.split(QLatin1Char(path_splitter)); +} + +IncludeList TypeDatabase::extraIncludes(const QString& className) const +{ + ComplexTypeEntry* typeEntry = findComplexType(className); + if (typeEntry) + return typeEntry->extraIncludes(); + else + return IncludeList(); +} + +ContainerTypeEntry* TypeDatabase::findContainerType(const QString &name) const +{ + QString template_name = name; + + int pos = name.indexOf(QLatin1Char('<')); + if (pos > 0) + template_name = name.left(pos); + + TypeEntry* type_entry = findType(template_name); + if (type_entry && type_entry->isContainer()) + return static_cast(type_entry); + return 0; +} + +FunctionTypeEntry* TypeDatabase::findFunctionType(const QString& name) const +{ + TypeEntry* entry = findType(name); + if (entry && entry->type() == TypeEntry::FunctionType) + return static_cast(entry); + return 0; +} + +TypeEntry* TypeDatabase::findType(const QString& name) const +{ + const TypeEntryList &entries = findTypes(name); + for (TypeEntry *entry : entries) { + if (entry && + (!entry->isPrimitive() || static_cast(entry)->preferredTargetLangType())) { + return entry; + } + } + return 0; +} + +TypeEntryList TypeDatabase::findTypes(const QString &name) const +{ + return m_entries.value(name); +} + +SingleTypeEntryHash TypeDatabase::entries() const +{ + TypeEntryHash entries = allEntries(); + + SingleTypeEntryHash returned; + for (TypeEntryHash::const_iterator it = entries.cbegin(), end = entries.cend(); it != end; ++it) + returned.insert(it.key(), findType(it.key())); + + return returned; +} + +PrimitiveTypeEntryList TypeDatabase::primitiveTypes() const +{ + TypeEntryHash entries = allEntries(); + PrimitiveTypeEntryList returned; + for (TypeEntryHash::const_iterator it = entries.cbegin(), end = entries.cend(); it != end; ++it) { + for (TypeEntry *typeEntry : it.value()) { + if (typeEntry->isPrimitive()) + returned.append(static_cast(typeEntry)); + } + } + return returned; +} + +ContainerTypeEntryList TypeDatabase::containerTypes() const +{ + TypeEntryHash entries = allEntries(); + ContainerTypeEntryList returned; + for (TypeEntryHash::const_iterator it = entries.cbegin(), end = entries.cend(); it != end; ++it) { + for (TypeEntry *typeEntry : it.value()) { + if (typeEntry->isContainer()) + returned.append(static_cast(typeEntry)); + } + } + return returned; +} + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const TypeRejection &r) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "TypeRejection(type=" << r.matchType << ", class=" + << r.className.pattern() << ", pattern=" << r.pattern.pattern() << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM + +void TypeDatabase::addRejection(const TypeRejection &r) +{ + m_rejections << r; +} + +static inline QString msgRejectReason(const TypeRejection &r, const QString &needle = QString()) +{ + QString result; + QTextStream str(&result); + switch (r.matchType) { + case TypeRejection::ExcludeClass: + str << " matches class exclusion \"" << r.className.pattern() << '"'; + break; + case TypeRejection::Function: + case TypeRejection::Field: + case TypeRejection::Enum: + str << " matches class \"" << r.className.pattern() << "\" and \"" << r.pattern.pattern() << '"'; + break; + case TypeRejection::ArgumentType: + case TypeRejection::ReturnType: + str << " matches class \"" << r.className.pattern() << "\" and \"" << needle + << "\" matches \"" << r.pattern.pattern() << '"'; + break; + } + return result; +} + +// Match class name only +bool TypeDatabase::isClassRejected(const QString& className, QString *reason) const +{ + for (const TypeRejection& r : m_rejections) { + if (r.matchType == TypeRejection::ExcludeClass && r.className.match(className).hasMatch()) { + if (reason) + *reason = msgRejectReason(r); + return true; + } + } + return false; +} + +// Match class name and function/enum/field +static bool findRejection(const QVector &rejections, + TypeRejection::MatchType matchType, + const QString& className, const QString& name, + QString *reason = nullptr) +{ + Q_ASSERT(matchType != TypeRejection::ExcludeClass); + for (const TypeRejection& r : rejections) { + if (r.matchType == matchType && r.pattern.match(name).hasMatch() + && r.className.match(className).hasMatch()) { + if (reason) + *reason = msgRejectReason(r, name); + return true; + } + } + return false; +} + +bool TypeDatabase::isEnumRejected(const QString& className, const QString& enumName, QString *reason) const +{ + return findRejection(m_rejections, TypeRejection::Enum, className, enumName, reason); +} + +void TypeDatabase::addType(TypeEntry *e) +{ + m_entries[e->qualifiedCppName()].append(e); +} + +bool TypeDatabase::isFunctionRejected(const QString& className, const QString& functionName, + QString *reason) const +{ + return findRejection(m_rejections, TypeRejection::Function, className, functionName, reason); +} + +bool TypeDatabase::isFieldRejected(const QString& className, const QString& fieldName, + QString *reason) const +{ + return findRejection(m_rejections, TypeRejection::Field, className, fieldName, reason); +} + +bool TypeDatabase::isArgumentTypeRejected(const QString& className, const QString& typeName, + QString *reason) const +{ + return findRejection(m_rejections, TypeRejection::ArgumentType, className, typeName, reason); +} + +bool TypeDatabase::isReturnTypeRejected(const QString& className, const QString& typeName, + QString *reason) const +{ + return findRejection(m_rejections, TypeRejection::ReturnType, className, typeName, reason); +} + +FlagsTypeEntry* TypeDatabase::findFlagsType(const QString &name) const +{ + TypeEntry *fte = findType(name); + if (!fte) { + fte = m_flagsEntries.value(name); + if (!fte) { + //last hope, search for flag without scope inside of flags hash + for (SingleTypeEntryHash::const_iterator it = m_flagsEntries.cbegin(), end = m_flagsEntries.cend(); it != end; ++it) { + if (it.key().endsWith(name)) { + fte = it.value(); + break; + } + } + } + } + return static_cast(fte); +} + +void TypeDatabase::addFlagsType(FlagsTypeEntry *fte) +{ + m_flagsEntries[fte->originalName()] = fte; +} + +void TypeDatabase::addTemplate(TemplateEntry *t) +{ + m_templates[t->name()] = t; +} + +void TypeDatabase::addGlobalUserFunctions(const AddedFunctionList &functions) +{ + m_globalUserFunctions << functions; +} + +AddedFunctionList TypeDatabase::findGlobalUserFunctions(const QString& name) const +{ + AddedFunctionList addedFunctions; + for (const AddedFunction &func : m_globalUserFunctions) { + if (func.name() == name) + addedFunctions.append(func); + } + return addedFunctions; +} + +void TypeDatabase::addGlobalUserFunctionModifications(const FunctionModificationList &functionModifications) +{ + m_functionMods << functionModifications; +} + +QString TypeDatabase::globalNamespaceClassName(const TypeEntry * /*entry*/) +{ + return QLatin1String("Global"); +} + +FunctionModificationList TypeDatabase::functionModifications(const QString& signature) const +{ + FunctionModificationList lst; + for (int i = 0; i < m_functionMods.count(); ++i) { + const FunctionModification& mod = m_functionMods.at(i); + if (mod.matches(signature)) + lst << mod; + } + + return lst; +} + +bool TypeDatabase::addSuppressedWarning(const QString &warning, QString *errorMessage) +{ + QString pattern; + if (warning.startsWith(QLatin1Char('^')) && warning.endsWith(QLatin1Char('$'))) { + pattern = warning; + } else { + // Legacy syntax: Use wildcards '*' (unless escaped by '\') + QVector asteriskPositions; + const int warningSize = warning.size(); + for (int i = 0; i < warningSize; ++i) { + if (warning.at(i) == QLatin1Char('\\')) + ++i; + else if (warning.at(i) == QLatin1Char('*')) + asteriskPositions.append(i); + } + asteriskPositions.append(warningSize); + + pattern.append(QLatin1Char('^')); + int lastPos = 0; + for (int a = 0, aSize = asteriskPositions.size(); a < aSize; ++a) { + if (a) + pattern.append(QStringLiteral(".*")); + const int nextPos = asteriskPositions.at(a); + if (nextPos > lastPos) + pattern.append(QRegularExpression::escape(warning.mid(lastPos, nextPos - lastPos))); + lastPos = nextPos + 1; + } + pattern.append(QLatin1Char('$')); + } + + const QRegularExpression expression(pattern); + if (!expression.isValid()) { + *errorMessage = QLatin1String("Invalid message pattern \"") + warning + + QLatin1String("\": ") + expression.errorString(); + return false; + } + + m_suppressedWarnings.append(expression); + return true; +} + +bool TypeDatabase::isSuppressedWarning(const QString& s) const +{ + if (!m_suppressWarnings) + return false; + + for (const QRegularExpression &warning : m_suppressedWarnings) { + if (warning.match(s).hasMatch()) + return true; + } + + return false; +} + +QString TypeDatabase::modifiedTypesystemFilepath(const QString& tsFile, const QString ¤tPath) const +{ + const QFileInfo tsFi(tsFile); + if (tsFi.isAbsolute()) // No point in further lookups + return tsFi.absoluteFilePath(); + if (tsFi.isFile()) // Make path absolute + return tsFi.absoluteFilePath(); + if (!currentPath.isEmpty()) { + const QFileInfo fi(currentPath + QLatin1Char('/') + tsFile); + if (fi.isFile()) + return fi.absoluteFilePath(); + } + for (const QString &path : m_typesystemPaths) { + const QFileInfo fi(path + QLatin1Char('/') + tsFile); + if (fi.isFile()) + return fi.absoluteFilePath(); + } + return tsFile; +} + +bool TypeDatabase::parseFile(const QString &filename, bool generate) +{ + return parseFile(filename, QString(), generate); +} + +bool TypeDatabase::parseFile(const QString &filename, const QString ¤tPath, bool generate) +{ + + QString filepath = modifiedTypesystemFilepath(filename, currentPath); + if (m_parsedTypesystemFiles.contains(filepath)) + return m_parsedTypesystemFiles[filepath]; + + m_parsedTypesystemFiles[filepath] = true; // Prevent recursion when including self. + + QFile file(filepath); + if (!file.exists()) { + m_parsedTypesystemFiles[filepath] = false; + QString message = QLatin1String("Can't find ") + filename; + if (!currentPath.isEmpty()) + message += QLatin1String(", current path: ") + currentPath; + message += QLatin1String(", typesystem paths: ") + m_typesystemPaths.join(QLatin1String(", ")); + qCWarning(lcShiboken).noquote().nospace() << message; + return false; + } + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + m_parsedTypesystemFiles[filepath] = false; + qCWarning(lcShiboken).noquote().nospace() + << "Can't open " << QDir::toNativeSeparators(filename) << ": " << file.errorString(); + return false; + } + + int count = m_entries.size(); + bool ok = parseFile(&file, generate); + m_parsedTypesystemFiles[filepath] = ok; + int newCount = m_entries.size(); + + if (ReportHandler::isDebug(ReportHandler::SparseDebug)) { + qCDebug(lcShiboken) + << QStringLiteral("Parsed: '%1', %2 new entries").arg(filename).arg(newCount - count); + } + return ok; +} + +bool TypeDatabase::parseFile(QIODevice* device, bool generate) +{ + QXmlStreamReader reader(device); + Handler handler(this, generate); + return handler.parse(reader); +} + +PrimitiveTypeEntry *TypeDatabase::findPrimitiveType(const QString& name) const +{ + const TypeEntryList &entries = findTypes(name); + + for (TypeEntry *entry : entries) { + if (entry && entry->isPrimitive() && static_cast(entry)->preferredTargetLangType()) + return static_cast(entry); + } + + return 0; +} + +ComplexTypeEntry* TypeDatabase::findComplexType(const QString& name) const +{ + const TypeEntryList &entries = findTypes(name); + for (TypeEntry *entry : entries) { + if (entry && entry->isComplex()) + return static_cast(entry); + } + return 0; +} + +ObjectTypeEntry* TypeDatabase::findObjectType(const QString& name) const +{ + const TypeEntryList &entries = findTypes(name); + for (TypeEntry *entry : entries) { + if (entry && entry->isObject()) + return static_cast(entry); + } + return 0; +} + +NamespaceTypeEntry* TypeDatabase::findNamespaceType(const QString& name) const +{ + const TypeEntryList &entries = findTypes(name); + for (TypeEntry *entry : entries) { + if (entry && entry->isNamespace()) + return static_cast(entry); + } + return 0; +} + +bool TypeDatabase::shouldDropTypeEntry(const QString& fullTypeName) const +{ + return m_dropTypeEntries.contains(fullTypeName); +} + +void TypeDatabase::setDropTypeEntries(QStringList dropTypeEntries) +{ + m_dropTypeEntries = dropTypeEntries; + m_dropTypeEntries.sort(); +} + +// Using std::pair to save some memory +// the pair means (revision, typeIndex) +// This global variable exists only because we can't break the ABI +typedef QHash > TypeRevisionMap; +Q_GLOBAL_STATIC(TypeRevisionMap, typeEntryFields); +static bool computeTypeIndexes = true; +static int maxTypeIndex; + +int getTypeRevision(const TypeEntry* typeEntry) +{ + return typeEntryFields()->value(typeEntry).first; +} + +void setTypeRevision(TypeEntry* typeEntry, int revision) +{ + (*typeEntryFields())[typeEntry].first = revision; + computeTypeIndexes = true; +} + +static bool compareTypeEntriesByName(const TypeEntry* t1, const TypeEntry* t2) +{ + return t1->qualifiedCppName() < t2->qualifiedCppName(); +} + +static void _computeTypeIndexes() +{ + TypeDatabase* tdb = TypeDatabase::instance(); + typedef QMap GroupedTypeEntries; + GroupedTypeEntries groupedEntries; + + // Group type entries by revision numbers + const TypeEntryHash &allEntries = tdb->allEntries(); + for (TypeEntryHash::const_iterator tit = allEntries.cbegin(), end = allEntries.cend(); tit != end; ++tit) { + for (TypeEntry *entry : tit.value()) { + if (entry->isPrimitive() + || entry->isContainer() + || entry->isFunction() + || !entry->generateCode() + || entry->isEnumValue() + || entry->isVarargs() + || entry->isTypeSystem() + || entry->isVoid() + || entry->isCustom()) + continue; + groupedEntries[getTypeRevision(entry)] << entry; + } + } + + maxTypeIndex = 0; + GroupedTypeEntries::iterator it = groupedEntries.begin(); + for (; it != groupedEntries.end(); ++it) { + // Remove duplicates + TypeEntryList::iterator newEnd = std::unique(it.value().begin(), it.value().end()); + it.value().erase(newEnd, it.value().end()); + // Sort the type entries by name + qSort(it.value().begin(), newEnd, compareTypeEntriesByName); + + for (TypeEntry *entry : qAsConst(it.value())) { + (*typeEntryFields())[entry].second = maxTypeIndex++; + } + } + computeTypeIndexes = false; +} + +int getTypeIndex(const TypeEntry* typeEntry) +{ + if (computeTypeIndexes) + _computeTypeIndexes(); + return typeEntryFields()->value(typeEntry).second; +} + +int getMaxTypeIndex() +{ + if (computeTypeIndexes) + _computeTypeIndexes(); + return maxTypeIndex; +} + +bool TypeDatabase::setApiVersion(const QString& packageWildcardPattern, const QString &version) +{ + const QString packagePattern = wildcardToRegExp(packageWildcardPattern.trimmed()); + const QVersionNumber versionNumber = QVersionNumber::fromString(version); + if (versionNumber.isNull()) + return false; + ApiVersions &versions = *apiVersions(); + for (int i = 0, size = versions.size(); i < size; ++i) { + if (versions.at(i).first.pattern() == packagePattern) { + versions[i].second = versionNumber; + return true; + } + } + const QRegularExpression packageRegex(packagePattern); + if (!packageRegex.isValid()) + return false; + versions.append(qMakePair(packageRegex, versionNumber)); + return true; +} + +bool TypeDatabase::checkApiVersion(const QString &package, + const QVersionNumber &versionNumber) const +{ + const ApiVersions &versions = *apiVersions(); + for (int i = 0, size = versions.size(); i < size; ++i) { + if (versions.at(i).first.match(package).hasMatch()) + return versions.at(i).second >= versionNumber; + } + return false; +} + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const TypeEntry *te) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "TypeEntry("; + if (te) { + const QString name = te->name(); + const QString cppName = te->qualifiedCppName(); + d << '"' << name << '"'; + if (name != cppName) + d << "\", cppName=\"" << cppName << '"'; + d << ", type=" << te->type(); + if (te->include().isValid()) + d << ", include=" << te->include(); + const IncludeList &extraIncludes = te->extraIncludes(); + if (const int count = extraIncludes.size()) { + d << ", extraIncludes[" << count << "]="; + for (int i = 0; i < count; ++i) { + if (i) + d << ", "; + d << extraIncludes.at(i); + } + } + } else { + d << '0'; + } + d << ')'; + return d; +} + +QDebug operator<<(QDebug d, const TemplateEntry *te) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "TemplateEntry("; + if (te) { + d << '"' << te->name() << '"'; + } else { + d << '0'; + } + d << ')'; + return d; +} + +void TypeDatabase::formatDebug(QDebug &d) const +{ + typedef TypeEntryHash::ConstIterator Eit; + typedef SingleTypeEntryHash::ConstIterator Sit; + typedef TemplateEntryHash::ConstIterator TplIt; + d << "TypeDatabase(" + << "entries[" << m_entries.size() << "]="; + for (Eit it = m_entries.cbegin(), end = m_entries.cend(); it != end; ++it) { + const int count = it.value().size(); + d << '"' << it.key() << "\" [" << count << "]: ("; + for (int t = 0; t < count; ++t) { + if (t) + d << ", "; + d << it.value().at(t); + } + d << ")\n"; + } + if (!m_templates.isEmpty()) { + d << "templates[" << m_templates.size() << "]=("; + const TplIt begin = m_templates.cbegin(); + for (TplIt it = begin, end = m_templates.cend(); it != end; ++it) { + if (it != begin) + d << ", "; + d << it.value(); + } + d << ")\n"; + } + if (!m_flagsEntries.isEmpty()) { + d << "flags[" << m_flagsEntries.size() << "]=("; + const Sit begin = m_flagsEntries.cbegin(); + for (Sit it = begin, end = m_flagsEntries.cend(); it != end; ++it) { + if (it != begin) + d << ", "; + d << it.value(); + } + d << ")\n"; + } + d <<"\nglobalUserFunctions=" << m_globalUserFunctions << ')'; +} + +QDebug operator<<(QDebug d, const TypeDatabase &db) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + db.formatDebug(d); + return d; +} +#endif // !QT_NO_DEBUG_STREAM diff --git a/sources/shiboken2/ApiExtractor/typedatabase.h b/sources/shiboken2/ApiExtractor/typedatabase.h new file mode 100644 index 0000000..2e7b009 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/typedatabase.h @@ -0,0 +1,191 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TYPEDATABASE_H +#define TYPEDATABASE_H + +#include "apiextractormacros.h" +#include "include.h" +#include "typedatabase_typedefs.h" +#include "typesystem_enums.h" +#include "typesystem_typedefs.h" + +#include +#include + +QT_FORWARD_DECLARE_CLASS(QIODevice) +QT_FORWARD_DECLARE_CLASS(QVersionNumber) + +class ComplexTypeEntry; +class ContainerTypeEntry; +class FlagsTypeEntry; +class FunctionTypeEntry; +class NamespaceTypeEntry; +class ObjectTypeEntry; +class TemplateEntry; +class TypeEntry; + +struct TypeRejection; + +QT_FORWARD_DECLARE_CLASS(QDebug) + +void setTypeRevision(TypeEntry* typeEntry, int revision); +int getTypeRevision(const TypeEntry* typeEntry); +int getTypeIndex(const TypeEntry* typeEntry); +int getMaxTypeIndex(); + +class ContainerTypeEntry; +class PrimitiveTypeEntry; +class TypeDatabase +{ + TypeDatabase(); + Q_DISABLE_COPY(TypeDatabase) +public: + ~TypeDatabase(); + + /** + * Return the type system instance. + * \param newInstance This parameter is useful just for unit testing, because singletons causes + * too many side effects on unit testing. + */ + static TypeDatabase* instance(bool newInstance = false); + + static QString normalizedSignature(const QString &signature); + + QStringList requiredTargetImports() const; + + void addRequiredTargetImport(const QString& moduleName); + + void addTypesystemPath(const QString& typesystem_paths); + + IncludeList extraIncludes(const QString& className) const; + + PrimitiveTypeEntry* findPrimitiveType(const QString& name) const; + ComplexTypeEntry* findComplexType(const QString& name) const; + ObjectTypeEntry* findObjectType(const QString& name) const; + NamespaceTypeEntry* findNamespaceType(const QString& name) const; + ContainerTypeEntry* findContainerType(const QString& name) const; + FunctionTypeEntry* findFunctionType(const QString& name) const; + + TypeEntry* findType(const QString& name) const; + + TypeEntryHash allEntries() const { return m_entries; } + + SingleTypeEntryHash entries() const; + + PrimitiveTypeEntryList primitiveTypes() const; + + ContainerTypeEntryList containerTypes() const; + + void addRejection(const TypeRejection &); + bool isClassRejected(const QString& className, QString *reason = nullptr) const; + bool isFunctionRejected(const QString& className, const QString& functionName, + QString *reason = nullptr) const; + bool isFieldRejected(const QString& className, const QString& fieldName, + QString *reason = nullptr) const; + bool isEnumRejected(const QString& className, const QString& enumName, + QString *reason = nullptr) const; + bool isArgumentTypeRejected(const QString& className, const QString& typeName, + QString *reason = nullptr) const; + bool isReturnTypeRejected(const QString& className, const QString& typeName, + QString *reason = nullptr) const; + + void addType(TypeEntry* e); + + FlagsTypeEntry* findFlagsType(const QString& name) const; + void addFlagsType(FlagsTypeEntry* fte); + + TemplateEntry *findTemplate(const QString& name) const { return m_templates[name]; } + + void addTemplate(TemplateEntry* t); + + AddedFunctionList globalUserFunctions() const { return m_globalUserFunctions; } + + void addGlobalUserFunctions(const AddedFunctionList &functions); + + AddedFunctionList findGlobalUserFunctions(const QString& name) const; + + void addGlobalUserFunctionModifications(const FunctionModificationList &functionModifications); + + FunctionModificationList functionModifications(const QString& signature) const; + + void setSuppressWarnings(bool on) { m_suppressWarnings = on; } + + bool addSuppressedWarning(const QString &warning, QString *errorMessage); + + bool isSuppressedWarning(const QString& s) const; + + static QString globalNamespaceClassName(const TypeEntry *te); + + bool parseFile(const QString &filename, bool generate = true); + bool parseFile(const QString &filename, const QString ¤tPath, bool generate); + + bool parseFile(QIODevice* device, bool generate = true); + + bool setApiVersion(const QString& package, const QString& version); + + bool checkApiVersion(const QString &package, const QVersionNumber &version) const; + + bool hasDroppedTypeEntries() const { return !m_dropTypeEntries.isEmpty(); } + + bool shouldDropTypeEntry(const QString& fullTypeName) const; + + void setDropTypeEntries(QStringList dropTypeEntries); + + QString modifiedTypesystemFilepath(const QString &tsFile, const QString ¤tPath = QString()) const; + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &d) const; +#endif +private: + TypeEntryList findTypes(const QString &name) const; + + bool m_suppressWarnings; + TypeEntryHash m_entries; + SingleTypeEntryHash m_flagsEntries; + TemplateEntryHash m_templates; + QVector m_suppressedWarnings; + + AddedFunctionList m_globalUserFunctions; + FunctionModificationList m_functionMods; + + QStringList m_requiredTargetImports; + + QStringList m_typesystemPaths; + QHash m_parsedTypesystemFiles; + + QVector m_rejections; + + QStringList m_dropTypeEntries; +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const TypeEntry *te); +QDebug operator<<(QDebug d, const TypeDatabase &db); +#endif +#endif // TYPEDATABASE_H diff --git a/sources/shiboken2/ApiExtractor/typedatabase_typedefs.h b/sources/shiboken2/ApiExtractor/typedatabase_typedefs.h new file mode 100644 index 0000000..0836023 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/typedatabase_typedefs.h @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TYPEDATABASE_TYPEDEFS_H +#define TYPEDATABASE_TYPEDEFS_H + +#include +#include +#include + +class ContainerTypeEntry; +class PrimitiveTypeEntry; +class TemplateEntry; +class TypeEntry; + +typedef QVector TypeEntryList; +typedef QHash TypeEntryHash; +typedef QHash SingleTypeEntryHash; +typedef QHash TemplateEntryHash; + +typedef QVector ContainerTypeEntryList; +typedef QVector PrimitiveTypeEntryList; + +#endif // TYPEDATABASE_TYPEDEFS_H diff --git a/sources/shiboken2/ApiExtractor/typeparser.cpp b/sources/shiboken2/ApiExtractor/typeparser.cpp new file mode 100644 index 0000000..02c8542 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/typeparser.cpp @@ -0,0 +1,276 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "typeparser.h" +#include + +#include +#include +#include + +class Scanner +{ +public: + enum Token { + StarToken, + AmpersandToken, + LessThanToken, + ColonToken, + CommaToken, + OpenParenToken, + CloseParenToken, + SquareBegin, + SquareEnd, + GreaterThanToken, + + ConstToken, + Identifier, + NoToken, + InvalidToken + }; + + Scanner(const QString &s) + : m_pos(0), m_length(s.length()), m_chars(s.constData()) + { + } + + Token nextToken(QString *errorMessage = Q_NULLPTR); + QString identifier() const; + + QString msgParseError(const QString &why) const; + +private: + int m_pos; + int m_length; + int m_tokenStart; + const QChar *m_chars; +}; + +QString Scanner::identifier() const +{ + return QString(m_chars + m_tokenStart, m_pos - m_tokenStart); +} + +Scanner::Token Scanner::nextToken(QString *errorMessage) +{ + Token tok = NoToken; + + // remove whitespace + while (m_pos < m_length && m_chars[m_pos] == QLatin1Char(' ')) + ++m_pos; + + m_tokenStart = m_pos; + + while (m_pos < m_length) { + + const QChar &c = m_chars[m_pos]; + + if (tok == NoToken) { + switch (c.toLatin1()) { + case '*': tok = StarToken; break; + case '&': tok = AmpersandToken; break; + case '<': tok = LessThanToken; break; + case '>': tok = GreaterThanToken; break; + case ',': tok = CommaToken; break; + case '(': tok = OpenParenToken; break; + case ')': tok = CloseParenToken; break; + case '[': tok = SquareBegin; break; + case ']' : tok = SquareEnd; break; + case ':': + tok = ColonToken; + Q_ASSERT(m_pos + 1 < m_length); + ++m_pos; + break; + default: + if (c.isLetterOrNumber() || c == QLatin1Char('_')) { + tok = Identifier; + } else { + QString message; + QTextStream (&message) << ": Unrecognized character in lexer at " + << m_pos << " : '" << c << '\''; + message = msgParseError(message); + if (errorMessage) + *errorMessage = message; + else + qWarning().noquote().nospace() << message; + return InvalidToken; + } + break; + } + } + + if (tok <= GreaterThanToken) { + ++m_pos; + break; + } + + if (tok == Identifier) { + if (c.isLetterOrNumber() || c == QLatin1Char('_')) + ++m_pos; + else + break; + } + } + + if (tok == Identifier && m_pos - m_tokenStart == 5) { + if (m_chars[m_tokenStart] == QLatin1Char('c') + && m_chars[m_tokenStart + 1] == QLatin1Char('o') + && m_chars[m_tokenStart + 2] == QLatin1Char('n') + && m_chars[m_tokenStart + 3] == QLatin1Char('s') + && m_chars[m_tokenStart + 4] == QLatin1Char('t')) + tok = ConstToken; + } + + return tok; + +} + +QString Scanner::msgParseError(const QString &why) const +{ + return QStringLiteral("TypeParser: Unable to parse \"") + + QString(m_chars, m_length) + QStringLiteral("\": ") + why; +} + +TypeInfo TypeParser::parse(const QString &str, QString *errorMessage) +{ + Scanner scanner(str); + + TypeInfo info; + QStack stack; + stack.push(&info); + + bool colon_prefix = false; + bool in_array = false; + QString array; + + Scanner::Token tok = scanner.nextToken(errorMessage); + while (tok != Scanner::NoToken) { + if (tok == Scanner::InvalidToken) + return TypeInfo(); + +// switch (tok) { +// case Scanner::StarToken: printf(" - *\n"); break; +// case Scanner::AmpersandToken: printf(" - &\n"); break; +// case Scanner::LessThanToken: printf(" - <\n"); break; +// case Scanner::GreaterThanToken: printf(" - >\n"); break; +// case Scanner::ColonToken: printf(" - ::\n"); break; +// case Scanner::CommaToken: printf(" - ,\n"); break; +// case Scanner::ConstToken: printf(" - const\n"); break; +// case Scanner::SquareBegin: printf(" - [\n"); break; +// case Scanner::SquareEnd: printf(" - ]\n"); break; +// case Scanner::Identifier: printf(" - '%s'\n", qPrintable(scanner.identifier())); break; +// default: +// break; +// } + + switch (tok) { + + case Scanner::StarToken: + ++stack.top()->m_indirections; + break; + + case Scanner::AmpersandToken: + switch (stack.top()->referenceType()) { + case NoReference: + stack.top()->setReferenceType(LValueReference); + break; + case LValueReference: + stack.top()->setReferenceType(RValueReference); + break; + case RValueReference: + const QString message = scanner.msgParseError(QStringLiteral("Too many '&' qualifiers")); + if (errorMessage) + *errorMessage = message; + else + qWarning().noquote().nospace() << message; + return TypeInfo(); + } + break; + case Scanner::LessThanToken: + stack.top()->m_arguments << TypeInfo(); + stack.push(&stack.top()->m_arguments.last()); + break; + + case Scanner::CommaToken: + stack.pop(); + stack.top()->m_arguments << TypeInfo(); + stack.push(&stack.top()->m_arguments.last()); + break; + + case Scanner::GreaterThanToken: + stack.pop(); + break; + + case Scanner::ColonToken: + colon_prefix = true; + break; + + case Scanner::ConstToken: + stack.top()->m_constant = true; + break; + + case Scanner::OpenParenToken: // function pointers not supported + case Scanner::CloseParenToken: { + const QString message = scanner.msgParseError(QStringLiteral("Function pointers are not supported")); + if (errorMessage) + *errorMessage = message; + else + qWarning().noquote().nospace() << message; + return TypeInfo(); + } + + case Scanner::Identifier: + if (in_array) { + array = scanner.identifier(); + } else if (colon_prefix || stack.top()->m_qualifiedName.isEmpty()) { + stack.top()->m_qualifiedName << scanner.identifier(); + colon_prefix = false; + } else { + stack.top()->m_qualifiedName.last().append(QLatin1Char(' ') + scanner.identifier()); + } + break; + + case Scanner::SquareBegin: + in_array = true; + break; + + case Scanner::SquareEnd: + in_array = false; + stack.top()->m_arrayElements += array; + break; + + + default: + break; + } + + tok = scanner.nextToken(); + } + + return info; +} diff --git a/sources/shiboken2/ApiExtractor/typeparser.h b/sources/shiboken2/ApiExtractor/typeparser.h new file mode 100644 index 0000000..3b53801 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/typeparser.h @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TYPEPARSER_H +#define TYPEPARSER_H + +#include "parser/codemodel_enums.h" + +#include +#include + +class TypeInfo; + +class TypeParser +{ +public: + static TypeInfo parse(const QString &str, QString *errorMessage = nullptr); +}; + +#endif // TYPEPARSER_H diff --git a/sources/shiboken2/ApiExtractor/typesystem.cpp b/sources/shiboken2/ApiExtractor/typesystem.cpp new file mode 100644 index 0000000..8e0e443 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/typesystem.cpp @@ -0,0 +1,3065 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "typesystem.h" +#include "typesystem_p.h" +#include "typedatabase.h" +#include "reporthandler.h" +#include +#include +#include +#include +#include +#include +#include + +static QString strings_Object = QLatin1String("Object"); +static QString strings_String = QLatin1String("String"); +static QString strings_char = QLatin1String("char"); +static QString strings_jchar = QLatin1String("jchar"); +static QString strings_jobject = QLatin1String("jobject"); + +static inline QString colonColon() { return QStringLiteral("::"); } +static inline QString quoteAfterLineAttribute() { return QStringLiteral("quote-after-line"); } +static inline QString quoteBeforeLineAttribute() { return QStringLiteral("quote-before-line"); } +static inline QString textAttribute() { return QStringLiteral("text"); } +static inline QString nameAttribute() { return QStringLiteral("name"); } +static inline QString sinceAttribute() { return QStringLiteral("since"); } +static inline QString flagsAttribute() { return QStringLiteral("flags"); } +static inline QString classAttribute() { return QStringLiteral("class"); } +static inline QString functionNameAttribute() { return QStringLiteral("function-name"); } +static inline QString fieldNameAttribute() { return QStringLiteral("field-name"); } +static inline QString enumNameAttribute() { return QStringLiteral("enum-name"); } +static inline QString argumentTypeAttribute() { return QStringLiteral("argument-type"); } +static inline QString returnTypeAttribute() { return QStringLiteral("return-type"); } +static inline QString xPathAttribute() { return QStringLiteral("xpath"); } +static inline QString enumIdentifiedByValueAttribute() { return QStringLiteral("identified-by-value"); } + +static inline QString noAttributeValue() { return QStringLiteral("no"); } +static inline QString yesAttributeValue() { return QStringLiteral("yes"); } +static inline QString trueAttributeValue() { return QStringLiteral("true"); } +static inline QString falseAttributeValue() { return QStringLiteral("false"); } + +static QVector customConversionsForReview; + +// Set a regular expression for rejection from text. By legacy, those are fixed +// strings, except for '*' meaning 'match all'. Enclosing in "^..$" +// indicates regular expression. +static bool setRejectionRegularExpression(const QString &patternIn, + QRegularExpression *re, + QString *errorMessage) +{ + QString pattern; + if (patternIn.startsWith(QLatin1Char('^')) && patternIn.endsWith(QLatin1Char('$'))) + pattern = patternIn; + else if (patternIn == QLatin1String("*")) + pattern = QStringLiteral("^.*$"); + else + pattern = QLatin1Char('^') + QRegularExpression::escape(patternIn) + QLatin1Char('$'); + re->setPattern(pattern); + if (!re->isValid()) { + *errorMessage = QLatin1String("Invalid pattern \"") + patternIn + + QLatin1String("\": ") + re->errorString(); + return false; + } + return true; +} + +static bool addRejection(TypeDatabase *database, const QHash &attributes, + QString *errorMessage) +{ + typedef QPair AttributeMatchTypePair; + + TypeRejection rejection; + + const QString className = attributes.value(classAttribute()); + if (!setRejectionRegularExpression(className, &rejection.className, errorMessage)) + return false; + + static const AttributeMatchTypePair attributeMatchTypeMapping[] = + {{functionNameAttribute(), TypeRejection::Function}, + {fieldNameAttribute(), TypeRejection::Field}, + {enumNameAttribute(), TypeRejection::Enum}, + {argumentTypeAttribute(), TypeRejection::ArgumentType}, + {returnTypeAttribute(), TypeRejection::ReturnType} + }; + + // Search for non-empty attribute (function, field, enum) + const auto aend = attributes.cend(); + for (const AttributeMatchTypePair &mapping : attributeMatchTypeMapping) { + const auto it = attributes.constFind(mapping.first); + if (it != aend && !it.value().isEmpty()) { + if (!setRejectionRegularExpression(it.value(), &rejection.pattern, errorMessage)) + return false; + rejection.matchType = mapping.second; + database->addRejection(rejection); + return true; + } + } + + // Special case: When all fields except class are empty, completely exclude class + if (className == QLatin1String("*")) { + *errorMessage = QLatin1String("bad reject entry, neither 'class', 'function-name'" + " nor 'field' specified"); + return false; + } + rejection.matchType = TypeRejection::ExcludeClass; + database->addRejection(rejection); + return true; +} + + +Handler::Handler(TypeDatabase* database, bool generate) + : m_database(database), m_generate(generate ? TypeEntry::GenerateAll : TypeEntry::GenerateForSubclass) +{ + m_currentEnum = 0; + m_current = 0; + m_currentDroppedEntry = 0; + m_currentDroppedEntryDepth = 0; + m_ignoreDepth = 0; + + tagNames.insert(QLatin1String("rejection"), StackElement::Rejection); + tagNames.insert(QLatin1String("custom-type"), StackElement::CustomTypeEntry); + tagNames.insert(QLatin1String("primitive-type"), StackElement::PrimitiveTypeEntry); + tagNames.insert(QLatin1String("container-type"), StackElement::ContainerTypeEntry); + tagNames.insert(QLatin1String("object-type"), StackElement::ObjectTypeEntry); + tagNames.insert(QLatin1String("value-type"), StackElement::ValueTypeEntry); + tagNames.insert(QLatin1String("interface-type"), StackElement::InterfaceTypeEntry); + tagNames.insert(QLatin1String("namespace-type"), StackElement::NamespaceTypeEntry); + tagNames.insert(QLatin1String("enum-type"), StackElement::EnumTypeEntry); + tagNames.insert(QLatin1String("smart-pointer-type"), StackElement::SmartPointerTypeEntry); + tagNames.insert(QLatin1String("function"), StackElement::FunctionTypeEntry); + tagNames.insert(QLatin1String("extra-includes"), StackElement::ExtraIncludes); + tagNames.insert(QLatin1String("include"), StackElement::Include); + tagNames.insert(QLatin1String("inject-code"), StackElement::InjectCode); + tagNames.insert(QLatin1String("modify-function"), StackElement::ModifyFunction); + tagNames.insert(QLatin1String("modify-field"), StackElement::ModifyField); + tagNames.insert(QLatin1String("access"), StackElement::Access); + tagNames.insert(QLatin1String("remove"), StackElement::Removal); + tagNames.insert(QLatin1String("rename"), StackElement::Rename); + tagNames.insert(QLatin1String("typesystem"), StackElement::Root); + tagNames.insert(QLatin1String("custom-constructor"), StackElement::CustomMetaConstructor); + tagNames.insert(QLatin1String("custom-destructor"), StackElement::CustomMetaDestructor); + tagNames.insert(QLatin1String("argument-map"), StackElement::ArgumentMap); + tagNames.insert(QLatin1String("suppress-warning"), StackElement::SuppressedWarning); + tagNames.insert(QLatin1String("load-typesystem"), StackElement::LoadTypesystem); + tagNames.insert(QLatin1String("define-ownership"), StackElement::DefineOwnership); + tagNames.insert(QLatin1String("replace-default-expression"), StackElement::ReplaceDefaultExpression); + tagNames.insert(QLatin1String("reject-enum-value"), StackElement::RejectEnumValue); + tagNames.insert(QLatin1String("replace-type"), StackElement::ReplaceType); + tagNames.insert(QLatin1String("conversion-rule"), StackElement::ConversionRule); + tagNames.insert(QLatin1String("native-to-target"), StackElement::NativeToTarget); + tagNames.insert(QLatin1String("target-to-native"), StackElement::TargetToNative); + tagNames.insert(QLatin1String("add-conversion"), StackElement::AddConversion); + tagNames.insert(QLatin1String("modify-argument"), StackElement::ModifyArgument); + tagNames.insert(QLatin1String("remove-argument"), StackElement::RemoveArgument); + tagNames.insert(QLatin1String("remove-default-expression"), StackElement::RemoveDefaultExpression); + tagNames.insert(QLatin1String("template"), StackElement::Template); + tagNames.insert(QLatin1String("insert-template"), StackElement::TemplateInstanceEnum); + tagNames.insert(QLatin1String("replace"), StackElement::Replace); + tagNames.insert(QLatin1String("no-null-pointer"), StackElement::NoNullPointers); + tagNames.insert(QLatin1String("reference-count"), StackElement::ReferenceCount); + tagNames.insert(QLatin1String("parent"), StackElement::ParentOwner); + tagNames.insert(QLatin1String("array"), StackElement::Array); + tagNames.insert(QLatin1String("inject-documentation"), StackElement::InjectDocumentation); + tagNames.insert(QLatin1String("modify-documentation"), StackElement::ModifyDocumentation); + tagNames.insert(QLatin1String("add-function"), StackElement::AddFunction); +} + +static QString readerFileName(const QXmlStreamReader &reader) +{ + const QFile *file = qobject_cast(reader.device()); + return file != nullptr ? file->fileName() : QString(); +} + +static QString msgReaderError(const QXmlStreamReader &reader, const QString &what) +{ + QString message; + QTextStream str(&message); + str << "Error: "; + const QString fileName = readerFileName(reader); + if (!fileName.isEmpty()) + str << "file=" << QDir::toNativeSeparators(fileName) << ", "; + str << "line=" << reader.lineNumber() << ", column=" << reader.columnNumber() + << ", message=" << what; + return message; +} + +static QString msgReaderError(const QXmlStreamReader &reader) +{ + return msgReaderError(reader, reader.errorString()); +} + +static QString msgInvalidVersion(const QStringRef &version, const QString &package = QString()) +{ + QString result; + QTextStream str(&result); + str << "Invalid version \"" << version << '"'; + if (!package.isEmpty()) + str << "\" specified for package " << package; + str << '.'; + return result; +} + +bool Handler::parse(QXmlStreamReader &reader) +{ + m_error.clear(); + m_currentPath.clear(); + const QString fileName = readerFileName(reader); + if (!fileName.isEmpty()) + m_currentPath = QFileInfo(fileName).absolutePath(); + + while (!reader.atEnd()) { + switch (reader.readNext()) { + case QXmlStreamReader::NoToken: + case QXmlStreamReader::Invalid: + qCWarning(lcShiboken).noquote().nospace() << msgReaderError(reader); + return false; + case QXmlStreamReader::StartElement: + if (!startElement(reader.name(), reader.attributes())) { + m_error = msgReaderError(reader, m_error); + return false; + } + + break; + case QXmlStreamReader::EndElement: + if (!endElement(reader.name())) { + m_error = msgReaderError(reader, m_error); + return false; + } + break; + case QXmlStreamReader::Characters: + if (!characters(reader.text())) { + m_error = msgReaderError(reader, m_error); + return false; + } + break; + case QXmlStreamReader::StartDocument: + case QXmlStreamReader::EndDocument: + case QXmlStreamReader::Comment: + case QXmlStreamReader::DTD: + case QXmlStreamReader::EntityReference: + case QXmlStreamReader::ProcessingInstruction: + break; + } + } + return true; +} + +void Handler::fetchAttributeValues(const QString &name, const QXmlStreamAttributes &atts, + QHash *acceptedAttributes) +{ + Q_ASSERT(acceptedAttributes); + + for (int i = 0; i < atts.length(); ++i) { + const QString key = atts.at(i).name().toString().toLower(); + if (!acceptedAttributes->contains(key)) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("Unknown attribute for '%1': '%2'").arg(name, key); + } else { + acceptedAttributes->insert(key, atts.at(i).value().toString()); + } + } +} + +bool Handler::endElement(const QStringRef &localName) +{ + if (m_ignoreDepth) { + --m_ignoreDepth; + return true; + } + + if (m_currentDroppedEntry) { + if (m_currentDroppedEntryDepth == 1) { + m_current = m_currentDroppedEntry->parent; + delete m_currentDroppedEntry; + m_currentDroppedEntry = 0; + m_currentDroppedEntryDepth = 0; + } else { + --m_currentDroppedEntryDepth; + } + return true; + } + + if (!localName.compare(QLatin1String("import-file"), Qt::CaseInsensitive)) + return true; + + if (!m_current) + return true; + + switch (m_current->type) { + case StackElement::Root: + if (m_generate == TypeEntry::GenerateAll) { + TypeDatabase::instance()->addGlobalUserFunctions(m_contextStack.top()->addedFunctions); + TypeDatabase::instance()->addGlobalUserFunctionModifications(m_contextStack.top()->functionMods); + for (CustomConversion *customConversion : qAsConst(customConversionsForReview)) { + const CustomConversion::TargetToNativeConversions &toNatives = customConversion->targetToNativeConversions(); + for (CustomConversion::TargetToNativeConversion *toNative : toNatives) + toNative->setSourceType(m_database->findType(toNative->sourceTypeName())); + } + } + break; + case StackElement::ObjectTypeEntry: + case StackElement::ValueTypeEntry: + case StackElement::InterfaceTypeEntry: + case StackElement::NamespaceTypeEntry: { + ComplexTypeEntry *centry = static_cast(m_current->entry); + centry->setAddedFunctions(m_contextStack.top()->addedFunctions); + centry->setFunctionModifications(m_contextStack.top()->functionMods); + centry->setFieldModifications(m_contextStack.top()->fieldMods); + centry->setCodeSnips(m_contextStack.top()->codeSnips); + centry->setDocModification(m_contextStack.top()->docModifications); + + if (centry->designatedInterface()) { + centry->designatedInterface()->setCodeSnips(m_contextStack.top()->codeSnips); + centry->designatedInterface()->setFunctionModifications(m_contextStack.top()->functionMods); + } + } + break; + case StackElement::NativeToTarget: + case StackElement::AddConversion: { + CustomConversion* customConversion = static_cast(m_current->entry)->customConversion(); + if (!customConversion) { + m_error = QLatin1String("CustomConversion object is missing."); + return false; + } + + QString code = m_contextStack.top()->codeSnips.takeLast().code(); + if (m_current->type == StackElement::AddConversion) { + if (customConversion->targetToNativeConversions().isEmpty()) { + m_error = QLatin1String("CustomConversion's target to native conversions missing."); + return false; + } + customConversion->targetToNativeConversions().last()->setConversion(code); + } else { + customConversion->setNativeToTargetConversion(code); + } + } + break; + case StackElement::CustomMetaConstructor: { + m_current->entry->setCustomConstructor(*m_current->value.customFunction); + delete m_current->value.customFunction; + } + break; + case StackElement::CustomMetaDestructor: { + m_current->entry->setCustomDestructor(*m_current->value.customFunction); + delete m_current->value.customFunction; + } + break; + case StackElement::EnumTypeEntry: + m_current->entry->setDocModification(m_contextStack.top()->docModifications); + m_contextStack.top()->docModifications = DocModificationList(); + m_currentEnum = 0; + break; + case StackElement::Template: + m_database->addTemplate(m_current->value.templateEntry); + break; + case StackElement::TemplateInstanceEnum: + switch (m_current->parent->type) { + case StackElement::InjectCode: + if (m_current->parent->parent->type == StackElement::Root) { + CodeSnipList snips = m_current->parent->entry->codeSnips(); + CodeSnip snip = snips.takeLast(); + snip.addTemplateInstance(m_current->value.templateInstance); + snips.append(snip); + m_current->parent->entry->setCodeSnips(snips); + break; + } + Q_FALLTHROUGH(); + case StackElement::NativeToTarget: + case StackElement::AddConversion: + m_contextStack.top()->codeSnips.last().addTemplateInstance(m_current->value.templateInstance); + break; + case StackElement::Template: + m_current->parent->value.templateEntry->addTemplateInstance(m_current->value.templateInstance); + break; + case StackElement::CustomMetaConstructor: + case StackElement::CustomMetaDestructor: + m_current->parent->value.customFunction->addTemplateInstance(m_current->value.templateInstance); + break; + case StackElement::ConversionRule: + m_contextStack.top()->functionMods.last().argument_mods.last().conversion_rules.last().addTemplateInstance(m_current->value.templateInstance); + break; + case StackElement::InjectCodeInFunction: + m_contextStack.top()->functionMods.last().snips.last().addTemplateInstance(m_current->value.templateInstance); + break; + default: + break; // nada + }; + break; + default: + break; + } + + if (m_current->type == StackElement::Root + || m_current->type == StackElement::NamespaceTypeEntry + || m_current->type == StackElement::InterfaceTypeEntry + || m_current->type == StackElement::ObjectTypeEntry + || m_current->type == StackElement::ValueTypeEntry + || m_current->type == StackElement::PrimitiveTypeEntry) { + StackElementContext* context = m_contextStack.pop(); + delete context; + } + + StackElement *child = m_current; + m_current = m_current->parent; + delete(child); + + return true; +} + +template // QString/QStringRef +bool Handler::characters(const String &ch) +{ + if (m_currentDroppedEntry || m_ignoreDepth) + return true; + + if (m_current->type == StackElement::Template) { + m_current->value.templateEntry->addCode(ch); + return true; + } + + if (m_current->type == StackElement::CustomMetaConstructor || m_current->type == StackElement::CustomMetaDestructor) { + m_current->value.customFunction->addCode(ch); + return true; + } + + if (m_current->type == StackElement::ConversionRule + && m_current->parent->type == StackElement::ModifyArgument) { + m_contextStack.top()->functionMods.last().argument_mods.last().conversion_rules.last().addCode(ch); + return true; + } + + if (m_current->type == StackElement::NativeToTarget || m_current->type == StackElement::AddConversion) { + m_contextStack.top()->codeSnips.last().addCode(ch); + return true; + } + + if (m_current->parent) { + if ((m_current->type & StackElement::CodeSnipMask)) { + CodeSnipList snips; + switch (m_current->parent->type) { + case StackElement::Root: + snips = m_current->parent->entry->codeSnips(); + snips.last().addCode(ch); + m_current->parent->entry->setCodeSnips(snips); + break; + case StackElement::ModifyFunction: + case StackElement::AddFunction: + m_contextStack.top()->functionMods.last().snips.last().addCode(ch); + m_contextStack.top()->functionMods.last().modifiers |= FunctionModification::CodeInjection; + break; + case StackElement::NamespaceTypeEntry: + case StackElement::ObjectTypeEntry: + case StackElement::ValueTypeEntry: + case StackElement::InterfaceTypeEntry: + m_contextStack.top()->codeSnips.last().addCode(ch); + break; + default: + Q_ASSERT(false); + }; + return true; + } + } + + if (m_current->type & StackElement::DocumentationMask) + m_contextStack.top()->docModifications.last().setCode(ch); + + return true; +} + +bool Handler::importFileElement(const QXmlStreamAttributes &atts) +{ + const QString fileName = atts.value(nameAttribute()).toString(); + if (fileName.isEmpty()) { + m_error = QLatin1String("Required attribute 'name' missing for include-file tag."); + return false; + } + + QFile file(fileName); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + file.setFileName(QLatin1String(":/trolltech/generator/") + fileName); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + m_error = QString::fromLatin1("Could not open file: '%1'").arg(QDir::toNativeSeparators(fileName)); + return false; + } + } + + const QStringRef quoteFrom = atts.value(quoteAfterLineAttribute()); + bool foundFromOk = quoteFrom.isEmpty(); + bool from = quoteFrom.isEmpty(); + + const QStringRef quoteTo = atts.value(quoteBeforeLineAttribute()); + bool foundToOk = quoteTo.isEmpty(); + bool to = true; + + QTextStream in(&file); + while (!in.atEnd()) { + QString line = in.readLine(); + if (from && to && line.contains(quoteTo)) { + to = false; + foundToOk = true; + break; + } + if (from && to) + characters(line + QLatin1Char('\n')); + if (!from && line.contains(quoteFrom)) { + from = true; + foundFromOk = true; + } + } + if (!foundFromOk || !foundToOk) { + QString fromError = QStringLiteral("Could not find quote-after-line='%1' in file '%2'.") + .arg(quoteFrom.toString(), fileName); + QString toError = QStringLiteral("Could not find quote-before-line='%1' in file '%2'.") + .arg(quoteTo.toString(), fileName); + + if (!foundToOk) + m_error = toError; + if (!foundFromOk) + m_error = fromError; + if (!foundFromOk && !foundToOk) + m_error = fromError + QLatin1Char(' ') + toError; + return false; + } + + return true; +} + +static bool convertBoolean(const QString &value, const QString &attributeName, bool defaultValue) +{ + if (value.compare(trueAttributeValue(), Qt::CaseInsensitive) == 0 + || value.compare(yesAttributeValue(), Qt::CaseInsensitive) == 0) { + return true; + } + if (value.compare(falseAttributeValue(), Qt::CaseInsensitive) == 0 + || value.compare(noAttributeValue(), Qt::CaseInsensitive) == 0) { + return false; + } + const QString warn = QStringLiteral("Boolean value '%1' not supported in attribute '%2'. Use 'yes' or 'no'. Defaulting to '%3'.") + .arg(value, attributeName, + defaultValue ? yesAttributeValue() : noAttributeValue()); + + qCWarning(lcShiboken).noquote().nospace() << warn; + return defaultValue; +} + +static bool convertRemovalAttribute(const QString& removalAttribute, Modification& mod, QString& errorMsg) +{ + QString remove = removalAttribute.toLower(); + if (!remove.isEmpty()) { + if (remove == QLatin1String("all")) { + mod.removal = TypeSystem::All; + } else if (remove == QLatin1String("target")) { + mod.removal = TypeSystem::TargetLangAndNativeCode; + } else { + errorMsg = QString::fromLatin1("Bad removal type '%1'").arg(remove); + return false; + } + } + return true; +} + +static void getNamePrefixRecursive(StackElement* element, QStringList& names) +{ + if (!element->parent || !element->parent->entry) + return; + getNamePrefixRecursive(element->parent, names); + names << element->parent->entry->name(); +} + +static QString getNamePrefix(StackElement* element) +{ + QStringList names; + getNamePrefixRecursive(element, names); + return names.join(QLatin1Char('.')); +} + +// Returns empty string if there's no error. +static QString checkSignatureError(const QString& signature, const QString& tag) +{ + QString funcName = signature.left(signature.indexOf(QLatin1Char('('))).trimmed(); + static const QRegularExpression whiteSpace(QStringLiteral("\\s")); + Q_ASSERT(whiteSpace.isValid()); + if (!funcName.startsWith(QLatin1String("operator ")) && funcName.contains(whiteSpace)) { + return QString::fromLatin1("Error in <%1> tag signature attribute '%2'.\n" + "White spaces aren't allowed in function names, " + "and return types should not be part of the signature.") + .arg(tag, signature); + } + return QString(); +} + +void Handler::addFlags(const QString &name, QString flagName, + const QHash &attributes, + const QVersionNumber &since) +{ + FlagsTypeEntry *ftype = new FlagsTypeEntry(QLatin1String("QFlags<") + name + QLatin1Char('>'), since); + ftype->setOriginator(m_currentEnum); + // Try to get the guess the qualified flag name + const int lastSepPos = name.lastIndexOf(colonColon()); + if (lastSepPos >= 0 && !flagName.contains(colonColon())) + flagName.prepend(name.left(lastSepPos + 2)); + + ftype->setOriginalName(flagName); + ftype->setCodeGeneration(m_generate); + QString n = ftype->originalName(); + + QStringList lst = n.split(colonColon()); + if (QStringList(lst.mid(0, lst.size() - 1)).join(colonColon()) != m_currentEnum->targetLangQualifier()) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("enum %1 and flags %2 differ in qualifiers") + .arg(m_currentEnum->targetLangQualifier(), lst.constFirst()); + } + + ftype->setFlagsName(lst.constLast()); + m_currentEnum->setFlags(ftype); + + m_database->addFlagsType(ftype); + m_database->addType(ftype); + + QString revision = attributes.value(QLatin1String("flags-revision")); + if (revision.isEmpty()) + revision = attributes.value(QLatin1String("revision")); + setTypeRevision(ftype, revision.toInt()); +} + +bool Handler::handleSmartPointerEntry(StackElement *element, + QHash &attributes, + const QString &name, + const QVersionNumber &since) +{ + QString smartPointerType = attributes[QLatin1String("type")]; + if (smartPointerType.isEmpty()) { + m_error = QLatin1String("No type specified for the smart pointer. Currently supported types: 'shared',"); + return false; + } + if (smartPointerType != QLatin1String("shared")) { + m_error = QLatin1String("Currently only the 'shared' type is supported."); + return false; + } + + QString getter = attributes[QLatin1String("getter")]; + if (getter.isEmpty()) { + m_error = QLatin1String("No function getter name specified for getting the raw pointer held by the smart pointer."); + return false; + } + + QString refCountMethodName = attributes[QLatin1String("ref-count-method")]; + QString signature = getter + QLatin1String("()"); + + signature = TypeDatabase::normalizedSignature(signature); + if (signature.isEmpty()) { + m_error = QLatin1String("No signature for the smart pointer getter found."); + return false; + } + + QString errorString = checkSignatureError(signature, + QLatin1String("smart-pointer-type")); + if (!errorString.isEmpty()) { + m_error = errorString; + return false; + } + + SmartPointerTypeEntry *type = new SmartPointerTypeEntry(name, + getter, + smartPointerType, + refCountMethodName, + since); + type->setTargetLangPackage(m_defaultPackage); + type->setCodeGeneration(m_generate); + element->entry = type; + return true; +} + +bool Handler::startElement(const QStringRef &n, const QXmlStreamAttributes &atts) +{ + if (m_ignoreDepth) { + ++m_ignoreDepth; + return true; + } + + QVersionNumber since(0, 0); + const QStringRef sinceSpec = atts.value(sinceAttribute()); + if (!sinceSpec.isNull()) { + since = QVersionNumber::fromString(sinceSpec.toString()); + if (since.isNull()) { + m_error = msgInvalidVersion(sinceSpec, m_defaultPackage); + return false; + } + } + + if (!m_defaultPackage.isEmpty() && since > QVersionNumber(0, 0)) { + TypeDatabase* td = TypeDatabase::instance(); + if (!td->checkApiVersion(m_defaultPackage, since)) { + ++m_ignoreDepth; + return true; + } + } + + const QString tagName = n.toString().toLower(); + if (tagName == QLatin1String("import-file")) + return importFileElement(atts); + + const QHash::const_iterator tit = tagNames.constFind(tagName); + if (tit == tagNames.constEnd()) { + m_error = QStringLiteral("Unknown tag name: '%1'").arg(tagName); + return false; + } + + if (m_currentDroppedEntry) { + ++m_currentDroppedEntryDepth; + return true; + } + + StackElement* element = new StackElement(m_current); + element->type = tit.value(); + + if (element->type == StackElement::Root && m_generate == TypeEntry::GenerateAll) + customConversionsForReview.clear(); + + if (element->type == StackElement::Root + || element->type == StackElement::NamespaceTypeEntry + || element->type == StackElement::InterfaceTypeEntry + || element->type == StackElement::ObjectTypeEntry + || element->type == StackElement::ValueTypeEntry + || element->type == StackElement::PrimitiveTypeEntry) { + m_contextStack.push(new StackElementContext()); + } + + if (element->type & StackElement::TypeEntryMask) { + QHash attributes; + attributes.insert(nameAttribute(), QString()); + attributes.insert(QLatin1String("revision"), QLatin1String("0")); + attributes.insert(sinceAttribute(), QString()); // dummy for matching allowed attributes + + switch (element->type) { + case StackElement::PrimitiveTypeEntry: + attributes.insert(QLatin1String("target-lang-name"), QString()); + attributes.insert(QLatin1String("target-lang-api-name"), QString()); + attributes.insert(QLatin1String("preferred-conversion"), yesAttributeValue()); + attributes.insert(QLatin1String("preferred-target-lang-type"), yesAttributeValue()); + attributes.insert(QLatin1String("default-constructor"), QString()); + break; + case StackElement::ContainerTypeEntry: + attributes.insert(QLatin1String("type"), QString()); + break; + case StackElement::SmartPointerTypeEntry: + attributes.insert(QLatin1String("type"), QString()); + attributes.insert(QLatin1String("getter"), QString()); + attributes.insert(QLatin1String("ref-count-method"), QString()); + break; + case StackElement::EnumTypeEntry: + attributes.insert(flagsAttribute(), QString()); + attributes.insert(QLatin1String("flags-revision"), QString()); + attributes.insert(QLatin1String("upper-bound"), QString()); + attributes.insert(QLatin1String("lower-bound"), QString()); + attributes.insert(QLatin1String("force-integer"), noAttributeValue()); + attributes.insert(QLatin1String("extensible"), noAttributeValue()); + attributes.insert(enumIdentifiedByValueAttribute(), QString()); + attributes.insert(classAttribute(), falseAttributeValue()); + break; + case StackElement::ValueTypeEntry: + attributes.insert(QLatin1String("default-constructor"), QString()); + Q_FALLTHROUGH(); + case StackElement::ObjectTypeEntry: + attributes.insert(QLatin1String("force-abstract"), noAttributeValue()); + attributes.insert(QLatin1String("deprecated"), noAttributeValue()); + attributes.insert(QLatin1String("hash-function"), QString()); + attributes.insert(QLatin1String("stream"), noAttributeValue()); + Q_FALLTHROUGH(); + case StackElement::InterfaceTypeEntry: + attributes[QLatin1String("default-superclass")] = m_defaultSuperclass; + attributes.insert(QLatin1String("polymorphic-id-expression"), QString()); + attributes.insert(QLatin1String("delete-in-main-thread"), noAttributeValue()); + attributes.insert(QLatin1String("held-type"), QString()); + attributes.insert(QLatin1String("copyable"), QString()); + Q_FALLTHROUGH(); + case StackElement::NamespaceTypeEntry: + attributes.insert(QLatin1String("target-lang-name"), QString()); + attributes[QLatin1String("package")] = m_defaultPackage; + attributes.insert(QLatin1String("expense-cost"), QLatin1String("1")); + attributes.insert(QLatin1String("expense-limit"), QLatin1String("none")); + attributes.insert(QLatin1String("polymorphic-base"), noAttributeValue()); + attributes.insert(QLatin1String("generate"), yesAttributeValue()); + attributes.insert(QLatin1String("target-type"), QString()); + attributes.insert(QLatin1String("generic-class"), noAttributeValue()); + break; + case StackElement::FunctionTypeEntry: + attributes.insert(QLatin1String("signature"), QString()); + attributes.insert(QLatin1String("rename"), QString()); + break; + default: + { } // nada + }; + + fetchAttributeValues(tagName, atts, &attributes); + QString name = attributes[nameAttribute()]; + + if (m_database->hasDroppedTypeEntries()) { + QString identifier = getNamePrefix(element) + QLatin1Char('.'); + identifier += (element->type == StackElement::FunctionTypeEntry ? attributes[QLatin1String("signature")] : name); + if (m_database->shouldDropTypeEntry(identifier)) { + m_currentDroppedEntry = element; + m_currentDroppedEntryDepth = 1; + if (ReportHandler::isDebug(ReportHandler::SparseDebug)) { + qCDebug(lcShiboken) + << QStringLiteral("Type system entry '%1' was intentionally dropped from generation.").arg(identifier); + } + return true; + } + } + + // The top level tag 'function' has only the 'signature' tag + // and we should extract the 'name' value from it. + if (element->type == StackElement::FunctionTypeEntry) { + QString signature = attributes[QLatin1String("signature")]; + name = signature.left(signature.indexOf(QLatin1Char('('))).trimmed(); + QString errorString = checkSignatureError(signature, QLatin1String("function")); + if (!errorString.isEmpty()) { + m_error = errorString; + return false; + } + QString rename = attributes[QLatin1String("rename")]; + if (!rename.isEmpty()) { + static const QRegularExpression functionNameRegExp(QLatin1String("^[a-zA-Z_][a-zA-Z0-9_]*$")); + Q_ASSERT(functionNameRegExp.isValid()); + if (!functionNameRegExp.match(rename).hasMatch()) { + m_error = QLatin1String("can not rename '") + signature + QLatin1String("', '") + + rename + QLatin1String("' is not a valid function name"); + return false; + } + FunctionModification mod; + if (!mod.setSignature(signature, &m_error)) + return false; + mod.renamedToName = attributes[QLatin1String("rename")]; + mod.modifiers |= Modification::Rename; + m_contextStack.top()->functionMods << mod; + } + } + + // We need to be able to have duplicate primitive type entries, + // or it's not possible to cover all primitive target language + // types (which we need to do in order to support fake meta objects) + if (element->type != StackElement::PrimitiveTypeEntry + && element->type != StackElement::FunctionTypeEntry) { + TypeEntry *tmp = m_database->findType(name); + if (tmp) + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("Duplicate type entry: '%1'").arg(name); + } + + if (element->type == StackElement::EnumTypeEntry) { + const QString identifiedByValue = attributes.value(enumIdentifiedByValueAttribute()); + if (name.isEmpty()) { + name = identifiedByValue; + } else if (!identifiedByValue.isEmpty()) { + m_error = QLatin1String("can't specify both 'name' and 'identified-by-value' attributes"); + return false; + } + } + + // Fix type entry name using nesting information. + if (element->type & StackElement::TypeEntryMask + && element->parent && element->parent->type != StackElement::Root) { + name = element->parent->entry->name() + colonColon() + name; + } + + + if (name.isEmpty()) { + m_error = QLatin1String("no 'name' attribute specified"); + return false; + } + + switch (element->type) { + case StackElement::CustomTypeEntry: + element->entry = new TypeEntry(name, TypeEntry::CustomType, since); + break; + case StackElement::PrimitiveTypeEntry: { + QString targetLangName = attributes[QLatin1String("target-lang-name")]; + QString targetLangApiName = attributes[QLatin1String("target-lang-api-name")]; + QString preferredConversion = attributes[QLatin1String("preferred-conversion")].toLower(); + QString preferredTargetLangType = attributes[QLatin1String("preferred-target-lang-type")].toLower(); + QString defaultConstructor = attributes[QLatin1String("default-constructor")]; + + if (targetLangName.isEmpty()) + targetLangName = name; + if (targetLangApiName.isEmpty()) + targetLangApiName = name; + + PrimitiveTypeEntry *type = new PrimitiveTypeEntry(name, since); + type->setCodeGeneration(m_generate); + type->setTargetLangName(targetLangName); + type->setTargetLangApiName(targetLangApiName); + type->setTargetLangPackage(m_defaultPackage); + type->setDefaultConstructor(defaultConstructor); + + bool preferred; + preferred = convertBoolean(preferredConversion, QLatin1String("preferred-conversion"), true); + type->setPreferredConversion(preferred); + preferred = convertBoolean(preferredTargetLangType, + QLatin1String("preferred-target-lang-type"), true); + type->setPreferredTargetLangType(preferred); + + element->entry = type; + } + break; + + case StackElement::ContainerTypeEntry: { + QString typeName = attributes[QLatin1String("type")]; + ContainerTypeEntry::Type containerType = + ContainerTypeEntry::containerTypeFromString(typeName); + if (typeName.isEmpty()) { + m_error = QLatin1String("no 'type' attribute specified"); + return false; + } else if (containerType == ContainerTypeEntry::NoContainer) { + m_error = QLatin1String("there is no container of type ") + typeName; + return false; + } + + ContainerTypeEntry *type = new ContainerTypeEntry(name, containerType, since); + type->setCodeGeneration(m_generate); + element->entry = type; + } + break; + + case StackElement::SmartPointerTypeEntry: { + bool result = handleSmartPointerEntry(element, attributes, name, since); + if (!result) + return result; + } + break; + + case StackElement::EnumTypeEntry: { + QStringList names = name.split(colonColon()); + if (names.size() == 1) + m_currentEnum = new EnumTypeEntry(QString(), name, since); + else + m_currentEnum = + new EnumTypeEntry(QStringList(names.mid(0, names.size() - 1)).join(colonColon()), + names.constLast(), since); + element->entry = m_currentEnum; + m_currentEnum->setCodeGeneration(m_generate); + m_currentEnum->setTargetLangPackage(m_defaultPackage); + m_currentEnum->setUpperBound(attributes[QLatin1String("upper-bound")]); + m_currentEnum->setLowerBound(attributes[QLatin1String("lower-bound")]); + m_currentEnum->setForceInteger(convertBoolean(attributes[QLatin1String("force-integer")], QLatin1String("force-integer"), false)); + m_currentEnum->setExtensible(convertBoolean(attributes[QLatin1String("extensible")], QLatin1String("extensible"), false)); + + // put in the flags parallel... + const QString flagNames = attributes.value(flagsAttribute()); + if (!flagNames.isEmpty()) { + const QStringList &flagNameList = flagNames.split(QLatin1Char(',')); + for (const QString &flagName : flagNameList) + addFlags(name, flagName.trimmed(), attributes, since); + } + } + break; + + case StackElement::InterfaceTypeEntry: { + ObjectTypeEntry *otype = new ObjectTypeEntry(name, since); + QString targetLangName = attributes[QLatin1String("target-lang-name")]; + if (targetLangName.isEmpty()) + targetLangName = name; + InterfaceTypeEntry *itype = + new InterfaceTypeEntry(InterfaceTypeEntry::interfaceName(targetLangName), since); + + if (!convertBoolean(attributes[QLatin1String("generate")], QLatin1String("generate"), true)) + itype->setCodeGeneration(TypeEntry::GenerateForSubclass); + else + itype->setCodeGeneration(m_generate); + otype->setDesignatedInterface(itype); + itype->setOrigin(otype); + element->entry = otype; + } + Q_FALLTHROUGH(); + case StackElement::ValueTypeEntry: { + if (!element->entry) { + ValueTypeEntry* typeEntry = new ValueTypeEntry(name, since); + QString defaultConstructor = attributes[QLatin1String("default-constructor")]; + if (!defaultConstructor.isEmpty()) + typeEntry->setDefaultConstructor(defaultConstructor); + element->entry = typeEntry; + } + + Q_FALLTHROUGH(); + case StackElement::NamespaceTypeEntry: + if (!element->entry) + element->entry = new NamespaceTypeEntry(name, since); + + Q_FALLTHROUGH(); + case StackElement::ObjectTypeEntry: + if (!element->entry) + element->entry = new ObjectTypeEntry(name, since); + + element->entry->setStream(attributes[QLatin1String("stream")] == yesAttributeValue()); + + ComplexTypeEntry *ctype = static_cast(element->entry); + ctype->setTargetLangPackage(attributes[QLatin1String("package")]); + ctype->setDefaultSuperclass(attributes[QLatin1String("default-superclass")]); + ctype->setGenericClass(convertBoolean(attributes[QLatin1String("generic-class")], QLatin1String("generic-class"), false)); + + if (!convertBoolean(attributes[QLatin1String("generate")], QLatin1String("generate"), true)) + element->entry->setCodeGeneration(TypeEntry::GenerateForSubclass); + else + element->entry->setCodeGeneration(m_generate); + + QString targetLangName = attributes[QLatin1String("target-lang-name")]; + if (!targetLangName.isEmpty()) + ctype->setTargetLangName(targetLangName); + + ctype->setIsPolymorphicBase(convertBoolean(attributes[QLatin1String("polymorphic-base")], QLatin1String("polymorphic-base"), false)); + ctype->setPolymorphicIdValue(attributes[QLatin1String("polymorphic-id-expression")]); + //Copyable + if (attributes[QLatin1String("copyable")].isEmpty()) + ctype->setCopyable(ComplexTypeEntry::Unknown); + else { + if (convertBoolean(attributes[QLatin1String("copyable")], QLatin1String("copyable"), false)) + ctype->setCopyable(ComplexTypeEntry::CopyableSet); + else + ctype->setCopyable(ComplexTypeEntry::NonCopyableSet); + + } + + if (element->type == StackElement::ObjectTypeEntry || element->type == StackElement::ValueTypeEntry) + ctype->setHashFunction(attributes[QLatin1String("hash-function")]); + + + ctype->setHeldType(attributes[QLatin1String("held-type")]); + + if (element->type == StackElement::ObjectTypeEntry + || element->type == StackElement::ValueTypeEntry) { + if (convertBoolean(attributes[QLatin1String("force-abstract")], QLatin1String("force-abstract"), false)) + ctype->setTypeFlags(ctype->typeFlags() | ComplexTypeEntry::ForceAbstract); + if (convertBoolean(attributes[QLatin1String("deprecated")], QLatin1String("deprecated"), false)) + ctype->setTypeFlags(ctype->typeFlags() | ComplexTypeEntry::Deprecated); + } + + if (element->type == StackElement::InterfaceTypeEntry + || element->type == StackElement::ValueTypeEntry + || element->type == StackElement::ObjectTypeEntry) { + if (convertBoolean(attributes[QLatin1String("delete-in-main-thread")], QLatin1String("delete-in-main-thread"), false)) + ctype->setTypeFlags(ctype->typeFlags() | ComplexTypeEntry::DeleteInMainThread); + } + + QString targetType = attributes[QLatin1String("target-type")]; + if (!targetType.isEmpty() && element->entry->isComplex()) + static_cast(element->entry)->setTargetType(targetType); + + // ctype->setInclude(Include(Include::IncludePath, ctype->name())); + ctype = ctype->designatedInterface(); + if (ctype) + ctype->setTargetLangPackage(attributes[QLatin1String("package")]); + + } + break; + case StackElement::FunctionTypeEntry: { + QString signature = attributes[QLatin1String("signature")]; + signature = TypeDatabase::normalizedSignature(signature); + element->entry = m_database->findType(name); + if (element->entry) { + if (element->entry->type() == TypeEntry::FunctionType) { + reinterpret_cast(element->entry)->addSignature(signature); + } else { + m_error = QStringLiteral("%1 expected to be a function, but isn't! Maybe it was already declared as a class or something else.") + .arg(name); + return false; + } + } else { + element->entry = new FunctionTypeEntry(name, signature, since); + element->entry->setCodeGeneration(m_generate); + } + } + break; + default: + Q_ASSERT(false); + }; + + if (element->entry) { + m_database->addType(element->entry); + setTypeRevision(element->entry, attributes[QLatin1String("revision")].toInt()); + } else { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("Type: %1 was rejected by typesystem").arg(name); + } + + } else if (element->type == StackElement::InjectDocumentation) { + // check the XML tag attributes + QHash attributes; + attributes.insert(QLatin1String("mode"), QLatin1String("replace")); + attributes.insert(QLatin1String("format"), QLatin1String("native")); + attributes.insert(sinceAttribute(), QString()); // dummy for matching allowed attributes + + fetchAttributeValues(tagName, atts, &attributes); + + const int validParent = StackElement::TypeEntryMask + | StackElement::ModifyFunction + | StackElement::ModifyField; + if (m_current->parent && m_current->parent->type & validParent) { + QString modeName = attributes[QLatin1String("mode")]; + TypeSystem::DocModificationMode mode; + if (modeName == QLatin1String("append")) { + mode = TypeSystem::DocModificationAppend; + } else if (modeName == QLatin1String("prepend")) { + mode = TypeSystem::DocModificationPrepend; + } else if (modeName == QLatin1String("replace")) { + mode = TypeSystem::DocModificationReplace; + } else { + m_error = QLatin1String("Unknow documentation injection mode: ") + modeName; + return false; + } + + static QHash languageNames; + if (languageNames.isEmpty()) { + languageNames[QLatin1String("target")] = TypeSystem::TargetLangCode; + languageNames[QLatin1String("native")] = TypeSystem::NativeCode; + } + + QString format = attributes[QLatin1String("format")].toLower(); + TypeSystem::Language lang = languageNames.value(format, TypeSystem::NoLanguage); + if (lang == TypeSystem::NoLanguage) { + m_error = QStringLiteral("unsupported class attribute: '%1'").arg(format); + return false; + } + + QString signature = m_current->type & StackElement::TypeEntryMask ? QString() : m_currentSignature; + DocModification mod(mode, signature); + mod.setFormat(lang); + m_contextStack.top()->docModifications << mod; + } else { + m_error = QLatin1String("inject-documentation must be inside modify-function, " + "modify-field or other tags that creates a type"); + return false; + } + } else if (element->type == StackElement::ModifyDocumentation) { + // check the XML tag attributes + QHash attributes; + attributes.insert(xPathAttribute(), QString()); + attributes.insert(sinceAttribute(), QString()); // dummy for matching allowed attributes + fetchAttributeValues(tagName, atts, &attributes); + + const int validParent = StackElement::TypeEntryMask + | StackElement::ModifyFunction + | StackElement::ModifyField; + if (m_current->parent && m_current->parent->type & validParent) { + QString signature = (m_current->type & StackElement::TypeEntryMask) ? QString() : m_currentSignature; + m_contextStack.top()->docModifications + << DocModification(attributes.value(xPathAttribute()), signature); + } else { + m_error = QLatin1String("modify-documentation must be inside modify-function, " + "modify-field or other tags that creates a type"); + return false; + } + } else if (element->type != StackElement::None) { + bool topLevel = element->type == StackElement::Root + || element->type == StackElement::SuppressedWarning + || element->type == StackElement::Rejection + || element->type == StackElement::LoadTypesystem + || element->type == StackElement::InjectCode + || element->type == StackElement::ExtraIncludes + || element->type == StackElement::ConversionRule + || element->type == StackElement::AddFunction + || element->type == StackElement::Template; + + if (!topLevel && m_current->type == StackElement::Root) { + m_error = QStringLiteral("Tag requires parent: '%1'").arg(tagName); + return false; + } + + StackElement topElement = !m_current ? StackElement(0) : *m_current; + element->entry = topElement.entry; + + QHash attributes; + attributes.insert(sinceAttribute(), QString()); // dummy for matching allowed attributes + switch (element->type) { + case StackElement::Root: + attributes.insert(QLatin1String("package"), QString()); + attributes.insert(QLatin1String("default-superclass"), QString()); + break; + case StackElement::LoadTypesystem: + attributes.insert(nameAttribute(), QString()); + attributes.insert(QLatin1String("generate"), yesAttributeValue()); + break; + case StackElement::NoNullPointers: + attributes.insert(QLatin1String("default-value"), QString()); + break; + case StackElement::SuppressedWarning: + attributes.insert(textAttribute(), QString()); + break; + case StackElement::ReplaceDefaultExpression: + attributes.insert(QLatin1String("with"), QString()); + break; + case StackElement::DefineOwnership: + attributes.insert(QLatin1String("class"), QLatin1String("target")); + attributes.insert(QLatin1String("owner"), QString()); + break; + case StackElement::AddFunction: + attributes.insert(QLatin1String("signature"), QString()); + attributes.insert(QLatin1String("return-type"), QLatin1String("void")); + attributes.insert(QLatin1String("access"), QLatin1String("public")); + attributes.insert(QLatin1String("static"), noAttributeValue()); + break; + case StackElement::ModifyFunction: + attributes.insert(QLatin1String("signature"), QString()); + attributes.insert(QLatin1String("access"), QString()); + attributes.insert(QLatin1String("remove"), QString()); + attributes.insert(QLatin1String("rename"), QString()); + attributes.insert(QLatin1String("deprecated"), noAttributeValue()); + attributes.insert(QLatin1String("associated-to"), QString()); + attributes.insert(QLatin1String("virtual-slot"), noAttributeValue()); + attributes.insert(QLatin1String("thread"), noAttributeValue()); + attributes.insert(QLatin1String("allow-thread"), noAttributeValue()); + break; + case StackElement::ModifyArgument: + attributes.insert(QLatin1String("index"), QString()); + attributes.insert(QLatin1String("replace-value"), QString()); + attributes.insert(QLatin1String("invalidate-after-use"), noAttributeValue()); + break; + case StackElement::ModifyField: + attributes.insert(nameAttribute(), QString()); + attributes.insert(QLatin1String("write"), trueAttributeValue()); + attributes.insert(QLatin1String("read"), trueAttributeValue()); + attributes.insert(QLatin1String("remove"), QString()); + break; + case StackElement::Access: + attributes.insert(QLatin1String("modifier"), QString()); + break; + case StackElement::Include: + attributes.insert(QLatin1String("file-name"), QString()); + attributes.insert(QLatin1String("location"), QString()); + break; + case StackElement::CustomMetaConstructor: + attributes[nameAttribute()] = topElement.entry->name().toLower() + QLatin1String("_create"); + attributes.insert(QLatin1String("param-name"), QLatin1String("copy")); + break; + case StackElement::CustomMetaDestructor: + attributes[nameAttribute()] = topElement.entry->name().toLower() + QLatin1String("_delete"); + attributes.insert(QLatin1String("param-name"), QLatin1String("copy")); + break; + case StackElement::ReplaceType: + attributes.insert(QLatin1String("modified-type"), QString()); + break; + case StackElement::InjectCode: + attributes.insert(QLatin1String("class"), QLatin1String("target")); + attributes.insert(QLatin1String("position"), QLatin1String("beginning")); + attributes.insert(QLatin1String("file"), QString()); + break; + case StackElement::ConversionRule: + attributes.insert(QLatin1String("class"), QString()); + attributes.insert(QLatin1String("file"), QString()); + break; + case StackElement::TargetToNative: + attributes.insert(QLatin1String("replace"), yesAttributeValue()); + break; + case StackElement::AddConversion: + attributes.insert(QLatin1String("type"), QString()); + attributes.insert(QLatin1String("check"), QString()); + break; + case StackElement::RejectEnumValue: + attributes.insert(nameAttribute(), QString()); + break; + case StackElement::ArgumentMap: + attributes.insert(QLatin1String("index"), QLatin1String("1")); + attributes.insert(QLatin1String("meta-name"), QString()); + break; + case StackElement::Rename: + attributes.insert(QLatin1String("to"), QString()); + break; + case StackElement::Rejection: + attributes.insert(classAttribute(), QString()); + attributes.insert(functionNameAttribute(), QString()); + attributes.insert(fieldNameAttribute(), QString()); + attributes.insert(enumNameAttribute(), QString()); + attributes.insert(argumentTypeAttribute(), QString()); + attributes.insert(returnTypeAttribute(), QString()); + break; + case StackElement::Removal: + attributes.insert(QLatin1String("class"), QLatin1String("all")); + break; + case StackElement::Template: + attributes.insert(nameAttribute(), QString()); + break; + case StackElement::TemplateInstanceEnum: + attributes.insert(nameAttribute(), QString()); + break; + case StackElement::Replace: + attributes.insert(QLatin1String("from"), QString()); + attributes.insert(QLatin1String("to"), QString()); + break; + case StackElement::ReferenceCount: + attributes.insert(QLatin1String("action"), QString()); + attributes.insert(QLatin1String("variable-name"), QString()); + break; + case StackElement::ParentOwner: + attributes.insert(QLatin1String("index"), QString()); + attributes.insert(QLatin1String("action"), QString()); + break; + case StackElement::Array: + break; + default: + { }; + }; + + if (!attributes.isEmpty()) + fetchAttributeValues(tagName, atts, &attributes); + + switch (element->type) { + case StackElement::Root: + m_defaultPackage = attributes[QLatin1String("package")]; + m_defaultSuperclass = attributes[QLatin1String("default-superclass")]; + element->type = StackElement::Root; + { + TypeSystemTypeEntry* moduleEntry = reinterpret_cast( + m_database->findType(m_defaultPackage)); + element->entry = moduleEntry ? moduleEntry : new TypeSystemTypeEntry(m_defaultPackage, since); + element->entry->setCodeGeneration(m_generate); + } + + if ((m_generate == TypeEntry::GenerateForSubclass || + m_generate == TypeEntry::GenerateNothing) && !m_defaultPackage.isEmpty()) + TypeDatabase::instance()->addRequiredTargetImport(m_defaultPackage); + + if (!element->entry->qualifiedCppName().isEmpty()) + m_database->addType(element->entry); + break; + case StackElement::LoadTypesystem: { + QString name = attributes[nameAttribute()]; + if (name.isEmpty()) { + m_error = QLatin1String("No typesystem name specified"); + return false; + } + bool generateChild = (convertBoolean(attributes[QLatin1String("generate")], QLatin1String("generate"), true) && (m_generate == TypeEntry::GenerateAll)); + if (!m_database->parseFile(name, m_currentPath, generateChild)) { + m_error = QStringLiteral("Failed to parse: '%1'").arg(name); + return false; + } + } + break; + case StackElement::RejectEnumValue: + if (!m_currentEnum) { + m_error = QLatin1String(" node must be used inside a node"); + return false; + } + break; + case StackElement::ReplaceType: { + if (topElement.type != StackElement::ModifyArgument) { + m_error = QLatin1String("Type replacement can only be specified for argument modifications"); + return false; + } + + if (attributes[QLatin1String("modified-type")].isEmpty()) { + m_error = QLatin1String("Type replacement requires 'modified-type' attribute"); + return false; + } + + m_contextStack.top()->functionMods.last().argument_mods.last().modified_type = attributes[QLatin1String("modified-type")]; + } + break; + case StackElement::ConversionRule: { + if (topElement.type != StackElement::ModifyArgument + && topElement.type != StackElement::ValueTypeEntry + && topElement.type != StackElement::PrimitiveTypeEntry + && topElement.type != StackElement::ContainerTypeEntry) { + m_error = QLatin1String("Conversion rules can only be specified for argument modification, " + "value-type, primitive-type or container-type conversion."); + return false; + } + + static QHash languageNames; + if (languageNames.isEmpty()) { + languageNames[QLatin1String("target")] = TypeSystem::TargetLangCode; + languageNames[QLatin1String("native")] = TypeSystem::NativeCode; + } + + QString languageAttribute = attributes[QLatin1String("class")].toLower(); + TypeSystem::Language lang = languageNames.value(languageAttribute, TypeSystem::NoLanguage); + + if (topElement.type == StackElement::ModifyArgument) { + if (lang == TypeSystem::NoLanguage) { + m_error = QStringLiteral("unsupported class attribute: '%1'").arg(lang); + return false; + } + + CodeSnip snip; + snip.language = lang; + m_contextStack.top()->functionMods.last().argument_mods.last().conversion_rules.append(snip); + } else { + if (topElement.entry->hasConversionRule() || topElement.entry->hasCustomConversion()) { + m_error = QLatin1String("Types can have only one conversion rule"); + return false; + } + + // The old conversion rule tag that uses a file containing the conversion + // will be kept temporarily for compatibility reasons. + QString sourceFile = attributes[QLatin1String("file")]; + if (!sourceFile.isEmpty()) { + if (m_generate != TypeEntry::GenerateForSubclass + && m_generate != TypeEntry::GenerateNothing) { + + const char* conversionFlag = NATIVE_CONVERSION_RULE_FLAG; + if (lang == TypeSystem::TargetLangCode) + conversionFlag = TARGET_CONVERSION_RULE_FLAG; + + QFile conversionSource(sourceFile); + if (conversionSource.open(QIODevice::ReadOnly | QIODevice::Text)) { + topElement.entry->setConversionRule(QLatin1String(conversionFlag) + QString::fromUtf8(conversionSource.readAll())); + } else { + qCWarning(lcShiboken).noquote().nospace() + << "File containing conversion code for " + << topElement.entry->name() << " type does not exist or is not readable: " + << sourceFile; + } + } + } + + CustomConversion* customConversion = new CustomConversion(static_cast(m_current->entry)); + customConversionsForReview.append(customConversion); + } + } + break; + case StackElement::NativeToTarget: { + if (topElement.type != StackElement::ConversionRule) { + m_error = QLatin1String("Native to Target conversion code can only be specified for custom conversion rules."); + return false; + } + m_contextStack.top()->codeSnips << CodeSnip(); + } + break; + case StackElement::TargetToNative: { + if (topElement.type != StackElement::ConversionRule) { + m_error = QLatin1String("Target to Native conversions can only be specified for custom conversion rules."); + return false; + } + bool replace = attributes[QLatin1String("replace")] == yesAttributeValue(); + static_cast(m_current->entry)->customConversion()->setReplaceOriginalTargetToNativeConversions(replace); + } + break; + case StackElement::AddConversion: { + if (topElement.type != StackElement::TargetToNative) { + m_error = QLatin1String("Target to Native conversions can only be added inside 'target-to-native' tags."); + return false; + } + QString sourceTypeName = attributes[QLatin1String("type")]; + if (sourceTypeName.isEmpty()) { + m_error = QLatin1String("Target to Native conversions must specify the input type with the 'type' attribute."); + return false; + } + QString typeCheck = attributes[QLatin1String("check")]; + static_cast(m_current->entry)->customConversion()->addTargetToNativeConversion(sourceTypeName, typeCheck); + m_contextStack.top()->codeSnips << CodeSnip(); + } + break; + case StackElement::ModifyArgument: { + if (topElement.type != StackElement::ModifyFunction + && topElement.type != StackElement::AddFunction) { + m_error = QString::fromLatin1("argument modification requires function" + " modification as parent, was %1") + .arg(topElement.type, 0, 16); + return false; + } + + QString index = attributes[QLatin1String("index")]; + if (index == QLatin1String("return")) + index = QLatin1String("0"); + else if (index == QLatin1String("this")) + index = QLatin1String("-1"); + + bool ok = false; + int idx = index.toInt(&ok); + if (!ok) { + m_error = QStringLiteral("Cannot convert '%1' to integer").arg(index); + return false; + } + + QString replace_value = attributes[QLatin1String("replace-value")]; + + if (!replace_value.isEmpty() && idx) { + m_error = QLatin1String("replace-value is only supported for return values (index=0)."); + return false; + } + + ArgumentModification argumentModification = ArgumentModification(idx); + argumentModification.replace_value = replace_value; + argumentModification.resetAfterUse = convertBoolean(attributes[QLatin1String("invalidate-after-use")], QLatin1String("invalidate-after-use"), false); + m_contextStack.top()->functionMods.last().argument_mods.append(argumentModification); + } + break; + case StackElement::NoNullPointers: { + if (topElement.type != StackElement::ModifyArgument) { + m_error = QLatin1String("no-null-pointer requires argument modification as parent"); + return false; + } + + m_contextStack.top()->functionMods.last().argument_mods.last().noNullPointers = true; + if (!m_contextStack.top()->functionMods.last().argument_mods.last().index) + m_contextStack.top()->functionMods.last().argument_mods.last().nullPointerDefaultValue = attributes[QLatin1String("default-value")]; + else if (!attributes[QLatin1String("default-value")].isEmpty()) + qCWarning(lcShiboken) << "default values for null pointer guards are only effective for return values"; + + } + break; + case StackElement::DefineOwnership: { + if (topElement.type != StackElement::ModifyArgument) { + m_error = QLatin1String("define-ownership requires argument modification as parent"); + return false; + } + + static QHash languageNames; + if (languageNames.isEmpty()) { + languageNames[QLatin1String("target")] = TypeSystem::TargetLangCode; + languageNames[QLatin1String("native")] = TypeSystem::NativeCode; + } + + QString classAttribute = attributes[QLatin1String("class")].toLower(); + TypeSystem::Language lang = languageNames.value(classAttribute, TypeSystem::NoLanguage); + if (lang == TypeSystem::NoLanguage) { + m_error = QStringLiteral("unsupported class attribute: '%1'").arg(classAttribute); + return false; + } + + static QHash ownershipNames; + if (ownershipNames.isEmpty()) { + ownershipNames[QLatin1String("target")] = TypeSystem::TargetLangOwnership; + ownershipNames[QLatin1String("c++")] = TypeSystem::CppOwnership; + ownershipNames[QLatin1String("default")] = TypeSystem::DefaultOwnership; + } + + QString ownershipAttribute = attributes[QLatin1String("owner")].toLower(); + TypeSystem::Ownership owner = ownershipNames.value(ownershipAttribute, TypeSystem::InvalidOwnership); + if (owner == TypeSystem::InvalidOwnership) { + m_error = QStringLiteral("unsupported owner attribute: '%1'").arg(ownershipAttribute); + return false; + } + + m_contextStack.top()->functionMods.last().argument_mods.last().ownerships[lang] = owner; + } + break; + case StackElement::SuppressedWarning: { + const QString suppressedWarning = attributes.value(textAttribute()); + if (suppressedWarning.isEmpty()) { + qCWarning(lcShiboken) << "Suppressed warning with no text specified"; + } else { + if (!m_database->addSuppressedWarning(suppressedWarning, &m_error)) + return false; + } + } + break; + case StackElement::ArgumentMap: { + if (!(topElement.type & StackElement::CodeSnipMask)) { + m_error = QLatin1String("Argument maps requires code injection as parent"); + return false; + } + + bool ok; + int pos = attributes[QLatin1String("index")].toInt(&ok); + if (!ok) { + m_error = QStringLiteral("Can't convert position '%1' to integer") + .arg(attributes[QLatin1String("position")]); + return false; + } + + if (pos <= 0) { + m_error = QStringLiteral("Argument position %1 must be a positive number").arg(pos); + return false; + } + + QString meta_name = attributes[QLatin1String("meta-name")]; + if (meta_name.isEmpty()) + qCWarning(lcShiboken) << "Empty meta name in argument map"; + + + if (topElement.type == StackElement::InjectCodeInFunction) + m_contextStack.top()->functionMods.last().snips.last().argumentMap[pos] = meta_name; + else { + qCWarning(lcShiboken) << "Argument maps are only useful for injection of code " + "into functions."; + } + } + break; + case StackElement::Removal: { + if (topElement.type != StackElement::ModifyFunction) { + m_error = QLatin1String("Function modification parent required"); + return false; + } + + static QHash languageNames; + if (languageNames.isEmpty()) { + languageNames.insert(QLatin1String("target"), TypeSystem::TargetLangAndNativeCode); + languageNames.insert(QLatin1String("all"), TypeSystem::All); + } + + QString languageAttribute = attributes[QLatin1String("class")].toLower(); + TypeSystem::Language lang = languageNames.value(languageAttribute, TypeSystem::NoLanguage); + if (lang == TypeSystem::NoLanguage) { + m_error = QStringLiteral("unsupported class attribute: '%1'").arg(languageAttribute); + return false; + } + + m_contextStack.top()->functionMods.last().removal = lang; + } + break; + case StackElement::Rename: + case StackElement::Access: { + if (topElement.type != StackElement::ModifyField + && topElement.type != StackElement::ModifyFunction + && topElement.type != StackElement::ModifyArgument) { + m_error = QLatin1String("Function, field or argument modification parent required"); + return false; + } + + Modification *mod = 0; + if (topElement.type == StackElement::ModifyFunction) + mod = &m_contextStack.top()->functionMods.last(); + else if (topElement.type == StackElement::ModifyField) + mod = &m_contextStack.top()->fieldMods.last(); + + QString modifier; + if (element->type == StackElement::Rename) { + modifier = QLatin1String("rename"); + QString renamed_to = attributes[QLatin1String("to")]; + if (renamed_to.isEmpty()) { + m_error = QLatin1String("Rename modifier requires 'to' attribute"); + return false; + } + + if (topElement.type == StackElement::ModifyFunction) + mod->setRenamedTo(renamed_to); + else if (topElement.type == StackElement::ModifyField) + mod->setRenamedTo(renamed_to); + else + m_contextStack.top()->functionMods.last().argument_mods.last().renamed_to = renamed_to; + } else + modifier = attributes[QLatin1String("modifier")].toLower(); + + + if (modifier.isEmpty()) { + m_error = QLatin1String("No access modification specified"); + return false; + } + + static QHash modifierNames; + if (modifierNames.isEmpty()) { + modifierNames[QLatin1String("private")] = Modification::Private; + modifierNames[QLatin1String("public")] = Modification::Public; + modifierNames[QLatin1String("protected")] = Modification::Protected; + modifierNames[QLatin1String("friendly")] = Modification::Friendly; + modifierNames[QLatin1String("rename")] = Modification::Rename; + modifierNames[QLatin1String("final")] = Modification::Final; + modifierNames[QLatin1String("non-final")] = Modification::NonFinal; + } + + if (!modifierNames.contains(modifier)) { + m_error = QStringLiteral("Unknown access modifier: '%1'").arg(modifier); + return false; + } + + if (mod) + mod->modifiers |= modifierNames[modifier]; + } + break; + case StackElement::RemoveArgument: + if (topElement.type != StackElement::ModifyArgument) { + m_error = QLatin1String("Removing argument requires argument modification as parent"); + return false; + } + + m_contextStack.top()->functionMods.last().argument_mods.last().removed = true; + break; + + case StackElement::ModifyField: { + QString name = attributes[nameAttribute()]; + if (name.isEmpty()) + break; + FieldModification fm; + fm.name = name; + fm.modifiers = 0; + + if (!convertRemovalAttribute(attributes[QLatin1String("remove")], fm, m_error)) + return false; + + QString read = attributes[QLatin1String("read")]; + QString write = attributes[QLatin1String("write")]; + + if (read == trueAttributeValue()) fm.modifiers |= FieldModification::Readable; + if (write == trueAttributeValue()) fm.modifiers |= FieldModification::Writable; + + m_contextStack.top()->fieldMods << fm; + } + break; + case StackElement::AddFunction: { + if (!(topElement.type & (StackElement::ComplexTypeEntryMask | StackElement::Root))) { + m_error = QString::fromLatin1("Add function requires a complex type or a root tag as parent" + ", was=%1").arg(topElement.type, 0, 16); + return false; + } + const QString originalSignature = attributes[QLatin1String("signature")]; + + QString signature = TypeDatabase::normalizedSignature(originalSignature); + if (signature.isEmpty()) { + m_error = QLatin1String("No signature for the added function"); + return false; + } + + QString errorString = checkSignatureError(signature, QLatin1String("add-function")); + if (!errorString.isEmpty()) { + m_error = errorString; + return false; + } + + AddedFunction func(signature, attributes[QLatin1String("return-type")]); + func.setStatic(attributes[QLatin1String("static")] == yesAttributeValue()); + if (!signature.contains(QLatin1Char('('))) + signature += QLatin1String("()"); + m_currentSignature = signature; + + QString access = attributes[QLatin1String("access")].toLower(); + if (!access.isEmpty()) { + if (access == QLatin1String("protected")) { + func.setAccess(AddedFunction::Protected); + } else if (access == QLatin1String("public")) { + func.setAccess(AddedFunction::Public); + } else { + m_error = QString::fromLatin1("Bad access type '%1'").arg(access); + return false; + } + } + + m_contextStack.top()->addedFunctions << func; + + FunctionModification mod; + if (!mod.setSignature(m_currentSignature, &m_error)) + return false; + mod.setOriginalSignature(originalSignature); + m_contextStack.top()->functionMods << mod; + } + break; + case StackElement::ModifyFunction: { + if (!(topElement.type & StackElement::ComplexTypeEntryMask)) { + m_error = QString::fromLatin1("Modify function requires complex type as parent" + ", was=%1").arg(topElement.type, 0, 16); + return false; + } + const QString originalSignature = attributes[QLatin1String("signature")]; + + const QString signature = TypeDatabase::normalizedSignature(originalSignature); + if (signature.isEmpty()) { + m_error = QLatin1String("No signature for modified function"); + return false; + } + + QString errorString = checkSignatureError(signature, QLatin1String("modify-function")); + if (!errorString.isEmpty()) { + m_error = errorString; + return false; + } + + FunctionModification mod; + if (!mod.setSignature(signature, &m_error)) + return false; + mod.setOriginalSignature(originalSignature); + m_currentSignature = signature; + + QString access = attributes[QLatin1String("access")].toLower(); + if (!access.isEmpty()) { + if (access == QLatin1String("private")) + mod.modifiers |= Modification::Private; + else if (access == QLatin1String("protected")) + mod.modifiers |= Modification::Protected; + else if (access == QLatin1String("public")) + mod.modifiers |= Modification::Public; + else if (access == QLatin1String("final")) + mod.modifiers |= Modification::Final; + else if (access == QLatin1String("non-final")) + mod.modifiers |= Modification::NonFinal; + else { + m_error = QString::fromLatin1("Bad access type '%1'").arg(access); + return false; + } + } + + if (convertBoolean(attributes[QLatin1String("deprecated")], QLatin1String("deprecated"), false)) + mod.modifiers |= Modification::Deprecated; + + if (!convertRemovalAttribute(attributes[QLatin1String("remove")], mod, m_error)) + return false; + + QString rename = attributes[QLatin1String("rename")]; + if (!rename.isEmpty()) { + mod.renamedToName = rename; + mod.modifiers |= Modification::Rename; + } + + QString association = attributes[QLatin1String("associated-to")]; + if (!association.isEmpty()) + mod.association = association; + + mod.setIsThread(convertBoolean(attributes[QLatin1String("thread")], QLatin1String("thread"), false)); + mod.setAllowThread(convertBoolean(attributes[QLatin1String("allow-thread")], QLatin1String("allow-thread"), false)); + + mod.modifiers |= (convertBoolean(attributes[QLatin1String("virtual-slot")], QLatin1String("virtual-slot"), false) ? Modification::VirtualSlot : 0); + + m_contextStack.top()->functionMods << mod; + } + break; + case StackElement::ReplaceDefaultExpression: + if (!(topElement.type & StackElement::ModifyArgument)) { + m_error = QLatin1String("Replace default expression only allowed as child of argument modification"); + return false; + } + + if (attributes[QLatin1String("with")].isEmpty()) { + m_error = QLatin1String("Default expression replaced with empty string. Use remove-default-expression instead."); + return false; + } + + m_contextStack.top()->functionMods.last().argument_mods.last().replacedDefaultExpression = attributes[QLatin1String("with")]; + break; + case StackElement::RemoveDefaultExpression: + m_contextStack.top()->functionMods.last().argument_mods.last().removedDefaultExpression = true; + break; + case StackElement::CustomMetaConstructor: + case StackElement::CustomMetaDestructor: { + CustomFunction *func = new CustomFunction(attributes[nameAttribute()]); + func->paramName = attributes[QLatin1String("param-name")]; + element->value.customFunction = func; + } + break; + case StackElement::ReferenceCount: { + if (topElement.type != StackElement::ModifyArgument) { + m_error = QLatin1String("reference-count must be child of modify-argument"); + return false; + } + + ReferenceCount rc; + + static QHash actions; + if (actions.isEmpty()) { + actions[QLatin1String("add")] = ReferenceCount::Add; + actions[QLatin1String("add-all")] = ReferenceCount::AddAll; + actions[QLatin1String("remove")] = ReferenceCount::Remove; + actions[QLatin1String("set")] = ReferenceCount::Set; + actions[QLatin1String("ignore")] = ReferenceCount::Ignore; + } + rc.action = actions.value(attributes[QLatin1String("action")].toLower(), ReferenceCount::Invalid); + rc.varName = attributes[QLatin1String("variable-name")]; + + if (rc.action == ReferenceCount::Invalid) { + m_error = QLatin1String("unrecognized value for action attribute. supported actions:"); + for (QHash::const_iterator it = actions.cbegin(), end = actions.cend(); it != end; ++it) + m_error += QLatin1Char(' ') + it.key(); + } + + m_contextStack.top()->functionMods.last().argument_mods.last().referenceCounts.append(rc); + } + break; + + case StackElement::ParentOwner: { + if (topElement.type != StackElement::ModifyArgument) { + m_error = QLatin1String("parent-policy must be child of modify-argument"); + return false; + } + + ArgumentOwner ao; + + QString index = attributes[QLatin1String("index")]; + if (index == QLatin1String("return")) + index = QLatin1String("0"); + else if (index == QLatin1String("this")) + index = QLatin1String("-1"); + + bool ok = false; + int idx = index.toInt(&ok); + if (!ok) { + m_error = QStringLiteral("Cannot convert '%1' to integer").arg(index); + return false; + } + + static QHash actions; + if (actions.isEmpty()) { + actions[QLatin1String("add")] = ArgumentOwner::Add; + actions[QLatin1String("remove")] = ArgumentOwner::Remove; + } + + ao.action = actions.value(attributes[QLatin1String("action")].toLower(), ArgumentOwner::Invalid); + if (!ao.action) { + m_error = QLatin1String("Invalid parent actionr"); + return false; + } + ao.index = idx; + m_contextStack.top()->functionMods.last().argument_mods.last().owner = ao; + } + break; + case StackElement::Array: + if (topElement.type != StackElement::ModifyArgument) { + m_error = QLatin1String("array must be child of modify-argument"); + return false; + } + m_contextStack.top()->functionMods.last().argument_mods.last().array = true; + break; + case StackElement::InjectCode: { + if (!(topElement.type & StackElement::ComplexTypeEntryMask) + && (topElement.type != StackElement::AddFunction) + && (topElement.type != StackElement::ModifyFunction) + && (topElement.type != StackElement::Root)) { + m_error = QLatin1String("wrong parent type for code injection"); + return false; + } + + static QHash languageNames; + if (languageNames.isEmpty()) { + languageNames[QLatin1String("target")] = TypeSystem::TargetLangCode; // em algum lugar do cpp + languageNames[QLatin1String("native")] = TypeSystem::NativeCode; // em algum lugar do cpp + languageNames[QLatin1String("shell")] = TypeSystem::ShellCode; // coloca no header, mas antes da declaracao da classe + languageNames[QLatin1String("shell-declaration")] = TypeSystem::ShellDeclaration; // coloca no header, dentro da declaracao da classe + languageNames[QLatin1String("library-initializer")] = TypeSystem::PackageInitializer; + languageNames[QLatin1String("destructor-function")] = TypeSystem::DestructorFunction; + languageNames[QLatin1String("constructors")] = TypeSystem::Constructors; + languageNames[QLatin1String("interface")] = TypeSystem::Interface; + } + + QString className = attributes[QLatin1String("class")].toLower(); + if (!languageNames.contains(className)) { + m_error = QStringLiteral("Invalid class specifier: '%1'").arg(className); + return false; + } + + + static QHash positionNames; + if (positionNames.isEmpty()) { + positionNames.insert(QLatin1String("beginning"), TypeSystem::CodeSnipPositionBeginning); + positionNames.insert(QLatin1String("end"), TypeSystem::CodeSnipPositionEnd); + // QtScript + positionNames.insert(QLatin1String("declaration"), TypeSystem::CodeSnipPositionDeclaration); + positionNames.insert(QLatin1String("prototype-initialization"), TypeSystem::CodeSnipPositionPrototypeInitialization); + positionNames.insert(QLatin1String("constructor-initialization"), TypeSystem::CodeSnipPositionConstructorInitialization); + positionNames.insert(QLatin1String("constructor"), TypeSystem::CodeSnipPositionConstructor); + } + + QString position = attributes[QLatin1String("position")].toLower(); + if (!positionNames.contains(position)) { + m_error = QStringLiteral("Invalid position: '%1'").arg(position); + return false; + } + + CodeSnip snip; + snip.language = languageNames[className]; + snip.position = positionNames[position]; + bool in_file = false; + + QString file_name = attributes[QLatin1String("file")]; + + //Handler constructor.... + if (m_generate != TypeEntry::GenerateForSubclass && + m_generate != TypeEntry::GenerateNothing && + !file_name.isEmpty()) { + const QString resolved = m_database->modifiedTypesystemFilepath(file_name, m_currentPath); + if (QFile::exists(resolved)) { + QFile codeFile(resolved); + if (codeFile.open(QIODevice::Text | QIODevice::ReadOnly)) { + QString content = QLatin1String("// ========================================================================\n" + "// START of custom code block [file: "); + content += file_name; + content += QLatin1String("]\n"); + content += QString::fromUtf8(codeFile.readAll()); + content += QLatin1String("\n// END of custom code block [file: "); + content += file_name; + content += QLatin1String("]\n// ========================================================================\n"); + snip.addCode(content); + in_file = true; + } + } else { + qCWarning(lcShiboken).noquote().nospace() + << "File for inject code not exist: " << QDir::toNativeSeparators(file_name); + } + + } + + if (snip.language == TypeSystem::Interface && topElement.type != StackElement::InterfaceTypeEntry) { + m_error = QLatin1String("Interface code injections must be direct child of an interface type entry"); + return false; + } + + if (topElement.type == StackElement::ModifyFunction || topElement.type == StackElement::AddFunction) { + FunctionModification mod = m_contextStack.top()->functionMods.constLast(); + if (snip.language == TypeSystem::ShellDeclaration) { + m_error = QLatin1String("no function implementation in shell declaration in which to inject code"); + return false; + } + + m_contextStack.top()->functionMods.last().snips << snip; + if (in_file) + m_contextStack.top()->functionMods.last().modifiers |= FunctionModification::CodeInjection; + element->type = StackElement::InjectCodeInFunction; + } else if (topElement.type == StackElement::Root) { + element->entry->addCodeSnip(snip); + } else if (topElement.type != StackElement::Root) { + m_contextStack.top()->codeSnips << snip; + } + + } + break; + case StackElement::Include: { + QString location = attributes[QLatin1String("location")].toLower(); + + static QHash locationNames; + if (locationNames.isEmpty()) { + locationNames[QLatin1String("global")] = Include::IncludePath; + locationNames[QLatin1String("local")] = Include::LocalPath; + locationNames[QLatin1String("target")] = Include::TargetLangImport; + } + + if (!locationNames.contains(location)) { + m_error = QStringLiteral("Location not recognized: '%1'").arg(location); + return false; + } + + Include::IncludeType loc = locationNames[location]; + Include inc(loc, attributes[QLatin1String("file-name")]); + + ComplexTypeEntry *ctype = static_cast(element->entry); + if (topElement.type & (StackElement::ComplexTypeEntryMask | StackElement::PrimitiveTypeEntry)) { + element->entry->setInclude(inc); + } else if (topElement.type == StackElement::ExtraIncludes) { + element->entry->addExtraInclude(inc); + } else { + m_error = QLatin1String("Only supported parent tags are primitive-type, complex types or extra-includes"); + return false; + } + + inc = ctype->include(); + IncludeList lst = ctype->extraIncludes(); + ctype = ctype->designatedInterface(); + if (ctype) { + ctype->setExtraIncludes(lst); + ctype->setInclude(inc); + } + } + break; + case StackElement::Rejection: + if (!addRejection(m_database, attributes, &m_error)) + return false; + break; + case StackElement::Template: + element->value.templateEntry = new TemplateEntry(attributes.value(nameAttribute())); + break; + case StackElement::TemplateInstanceEnum: + if (!(topElement.type & StackElement::CodeSnipMask) && + (topElement.type != StackElement::Template) && + (topElement.type != StackElement::CustomMetaConstructor) && + (topElement.type != StackElement::CustomMetaDestructor) && + (topElement.type != StackElement::NativeToTarget) && + (topElement.type != StackElement::AddConversion) && + (topElement.type != StackElement::ConversionRule)) { + m_error = QLatin1String("Can only insert templates into code snippets, templates, custom-constructors, "\ + "custom-destructors, conversion-rule, native-to-target or add-conversion tags."); + return false; + } + element->value.templateInstance = new TemplateInstance(attributes.value(nameAttribute())); + break; + case StackElement::Replace: + if (topElement.type != StackElement::TemplateInstanceEnum) { + m_error = QLatin1String("Can only insert replace rules into insert-template."); + return false; + } + element->parent->value.templateInstance->addReplaceRule(attributes[QLatin1String("from")], attributes[QLatin1String("to")]); + break; + default: + break; // nada + }; + } + + m_current = element; + return true; +} + +PrimitiveTypeEntry::PrimitiveTypeEntry(const QString &name, const QVersionNumber &vr) : + TypeEntry(name, PrimitiveType, vr), + m_preferredConversion(true), + m_preferredTargetLangType(true) +{ +} + +QString PrimitiveTypeEntry::targetLangName() const +{ + return m_targetLangName; +} + +QString PrimitiveTypeEntry::targetLangApiName() const +{ + return m_targetLangApiName; +} + +PrimitiveTypeEntry *PrimitiveTypeEntry::basicReferencedTypeEntry() const +{ + if (!m_referencedTypeEntry) + return 0; + + PrimitiveTypeEntry *baseReferencedTypeEntry = m_referencedTypeEntry->basicReferencedTypeEntry(); + if (baseReferencedTypeEntry) + return baseReferencedTypeEntry; + else + return m_referencedTypeEntry; +} + +bool PrimitiveTypeEntry::preferredConversion() const +{ + return m_preferredConversion; +} + +void PrimitiveTypeEntry::setPreferredConversion(bool b) +{ + m_preferredConversion = b; +} + +typedef QHash PrimitiveTypeEntryTargetLangPackageMap; +Q_GLOBAL_STATIC(PrimitiveTypeEntryTargetLangPackageMap, primitiveTypeEntryTargetLangPackages); + +void PrimitiveTypeEntry::setTargetLangPackage(const QString& package) +{ + primitiveTypeEntryTargetLangPackages()->insert(this, package); +} +QString PrimitiveTypeEntry::targetLangPackage() const +{ + if (!primitiveTypeEntryTargetLangPackages()->contains(this)) + return this->::TypeEntry::targetLangPackage(); + return primitiveTypeEntryTargetLangPackages()->value(this); +} + +CodeSnipList TypeEntry::codeSnips() const +{ + return m_codeSnips; +} + +QString Modification::accessModifierString() const +{ + if (isPrivate()) return QLatin1String("private"); + if (isProtected()) return QLatin1String("protected"); + if (isPublic()) return QLatin1String("public"); + if (isFriendly()) return QLatin1String("friendly"); + return QString(); +} + +FunctionModificationList ComplexTypeEntry::functionModifications(const QString &signature) const +{ + FunctionModificationList lst; + for (int i = 0; i < m_functionMods.count(); ++i) { + const FunctionModification &mod = m_functionMods.at(i); + if (mod.matches(signature)) + lst << mod; + } + return lst; +} + +FieldModification ComplexTypeEntry::fieldModification(const QString &name) const +{ + for (int i = 0; i < m_fieldMods.size(); ++i) + if (m_fieldMods.at(i).name == name) + return m_fieldMods.at(i); + FieldModification mod; + mod.name = name; + mod.modifiers = FieldModification::Readable | FieldModification::Writable; + return mod; +} + +QString ComplexTypeEntry::targetLangPackage() const +{ + return m_package; +} + +QString ComplexTypeEntry::targetLangName() const +{ + return m_targetLangName.isEmpty() ? + TypeEntry::targetLangName() : m_targetLangName; +} + +// The things we do not to break the ABI... +typedef QHash ComplexTypeEntryDefaultConstructorMap; +Q_GLOBAL_STATIC(ComplexTypeEntryDefaultConstructorMap, complexTypeEntryDefaultConstructors); + +void ComplexTypeEntry::setDefaultConstructor(const QString& defaultConstructor) +{ + if (!defaultConstructor.isEmpty()) + complexTypeEntryDefaultConstructors()->insert(this, defaultConstructor); +} +QString ComplexTypeEntry::defaultConstructor() const +{ + if (!complexTypeEntryDefaultConstructors()->contains(this)) + return QString(); + return complexTypeEntryDefaultConstructors()->value(this); +} +bool ComplexTypeEntry::hasDefaultConstructor() const +{ + return complexTypeEntryDefaultConstructors()->contains(this); +} + +QString ContainerTypeEntry::targetLangPackage() const +{ + return QString(); +} + +QString ContainerTypeEntry::targetLangName() const +{ + + switch (m_type) { + case StringListContainer: return QLatin1String("QStringList"); + case ListContainer: return QLatin1String("QList"); + case LinkedListContainer: return QLatin1String("QLinkedList"); + case VectorContainer: return QLatin1String("QVector"); + case StackContainer: return QLatin1String("QStack"); + case QueueContainer: return QLatin1String("QQueue"); + case SetContainer: return QLatin1String("QSet"); + case MapContainer: return QLatin1String("QMap"); + case MultiMapContainer: return QLatin1String("QMultiMap"); + case HashContainer: return QLatin1String("QHash"); + case MultiHashContainer: return QLatin1String("QMultiHash"); + case PairContainer: return QLatin1String("QPair"); + default: + qWarning("bad type... %d", m_type); + break; + } + return QString(); +} + +QString ContainerTypeEntry::qualifiedCppName() const +{ + if (m_type == StringListContainer) + return QLatin1String("QStringList"); + return ComplexTypeEntry::qualifiedCppName(); +} + +QString EnumTypeEntry::targetLangQualifier() const +{ + TypeEntry *te = TypeDatabase::instance()->findType(m_qualifier); + if (te) + return te->targetLangName(); + else + return m_qualifier; +} + +QString EnumTypeEntry::qualifiedTargetLangName() const +{ + QString qualifiedName; + QString pkg = targetLangPackage(); + QString qualifier = targetLangQualifier(); + + if (!pkg.isEmpty()) + qualifiedName += pkg + QLatin1Char('.'); + if (!qualifier.isEmpty()) + qualifiedName += qualifier + QLatin1Char('.'); + qualifiedName += targetLangName(); + + return qualifiedName; +} + +QString EnumTypeEntry::targetLangApiName() const +{ + return QLatin1String("jint"); +} + +bool EnumTypeEntry::preferredConversion() const +{ + return false; +} + +QString FlagsTypeEntry::targetLangApiName() const +{ + return QLatin1String("jint"); +} + +bool FlagsTypeEntry::preferredConversion() const +{ + return false; +} + +QString FlagsTypeEntry::targetLangPackage() const +{ + return m_enum->targetLangPackage(); +} + +QString FlagsTypeEntry::qualifiedTargetLangName() const +{ + return targetLangPackage() + QLatin1Char('.') + m_enum->targetLangQualifier() + + QLatin1Char('.') + targetLangName(); +} + +QString FlagsTypeEntry::targetLangName() const +{ + return m_targetLangName; +} + +/*! + * The Visual Studio 2002 compiler doesn't support these symbols, + * which our typedefs unforntuatly expand to. + */ +QString fixCppTypeName(const QString &name) +{ + if (name == QLatin1String("long long")) + return QLatin1String("qint64"); + else if (name == QLatin1String("unsigned long long")) + return QLatin1String("quint64"); + return name; +} + +QString TemplateInstance::expandCode() const +{ + TemplateEntry *templateEntry = TypeDatabase::instance()->findTemplate(m_name); + if (templateEntry) { + typedef QHash::const_iterator ConstIt; + QString code = templateEntry->code(); + for (ConstIt it = replaceRules.begin(), end = replaceRules.end(); it != end; ++it) + code.replace(it.key(), it.value()); + while (!code.isEmpty() && code.at(code.size() - 1).isSpace()) + code.chop(1); + QString result = QLatin1String("// TEMPLATE - ") + m_name + QLatin1String(" - START"); + if (!code.startsWith(QLatin1Char('\n'))) + result += QLatin1Char('\n'); + result += code; + result += QLatin1String("\n// TEMPLATE - ") + m_name + QLatin1String(" - END"); + return result; + } else { + qCWarning(lcShiboken).noquote().nospace() + << "insert-template referring to non-existing template '" << m_name << '\''; + } + + return QString(); +} + + +QString CodeSnipAbstract::code() const +{ + QString res; + for (const CodeSnipFragment &codeFrag : codeList) + res.append(codeFrag.code()); + + return res; +} + +QString CodeSnipFragment::code() const +{ + if (m_instance) + return m_instance->expandCode(); + else + return m_code; +} + +bool FunctionModification::setSignature(const QString &s, QString *errorMessage) +{ + if (s.startsWith(QLatin1Char('^'))) { + m_signaturePattern.setPattern(s); + if (!m_signaturePattern.isValid()) { + if (errorMessage) { + *errorMessage = QLatin1String("Invalid signature pattern: \"") + + s + QLatin1String("\": ") + m_signaturePattern.errorString(); + } + return false; + } + } else { + m_signature = s; + } + return true; +} + +QString FunctionModification::toString() const +{ + QString str = signature() + QLatin1String("->"); + if (modifiers & AccessModifierMask) { + switch (modifiers & AccessModifierMask) { + case Private: str += QLatin1String("private"); break; + case Protected: str += QLatin1String("protected"); break; + case Public: str += QLatin1String("public"); break; + case Friendly: str += QLatin1String("friendly"); break; + } + } + + if (modifiers & Final) str += QLatin1String("final"); + if (modifiers & NonFinal) str += QLatin1String("non-final"); + + if (modifiers & Readable) str += QLatin1String("readable"); + if (modifiers & Writable) str += QLatin1String("writable"); + + if (modifiers & CodeInjection) { + for (const CodeSnip &s : snips) { + str += QLatin1String("\n//code injection:\n"); + str += s.code(); + } + } + + if (modifiers & Rename) str += QLatin1String("renamed:") + renamedToName; + + if (modifiers & Deprecated) str += QLatin1String("deprecate"); + + if (modifiers & ReplaceExpression) str += QLatin1String("replace-expression"); + + return str; +} + +static AddedFunction::TypeInfo parseType(const QString& signature, int startPos = 0, int* endPos = 0) +{ + AddedFunction::TypeInfo result; + static const QRegularExpression regex(QLatin1String("\\w")); + Q_ASSERT(regex.isValid()); + int length = signature.length(); + int start = signature.indexOf(regex, startPos); + if (start == -1) { + if (signature.midRef(startPos + 1, 3) == QLatin1String("...")) { // varargs + if (endPos) + *endPos = startPos + 4; + result.name = QLatin1String("..."); + } else { // error + if (endPos) + *endPos = length; + } + return result; + } + + int cantStop = 0; + QString paramString; + QChar c; + int i = start; + for (; i < length; ++i) { + c = signature[i]; + if (c == QLatin1Char('<')) + cantStop++; + if (c == QLatin1Char('>')) + cantStop--; + if (cantStop < 0) + break; // FIXME: report error? + if ((c == QLatin1Char(')') || c == QLatin1Char(',')) && !cantStop) + break; + paramString += signature[i]; + } + if (endPos) + *endPos = i; + + // Check default value + if (paramString.contains(QLatin1Char('='))) { + QStringList lst = paramString.split(QLatin1Char('=')); + paramString = lst[0].trimmed(); + result.defaultValue = lst[1].trimmed(); + } + + // check constness + if (paramString.startsWith(QLatin1String("const "))) { + result.isConstant = true; + paramString.remove(0, sizeof("const")/sizeof(char)); + paramString = paramString.trimmed(); + } + // check reference + if (paramString.endsWith(QLatin1Char('&'))) { + result.isReference = true; + paramString.chop(1); + paramString = paramString.trimmed(); + } + // check Indirections + while (paramString.endsWith(QLatin1Char('*'))) { + result.indirections++; + paramString.chop(1); + paramString = paramString.trimmed(); + } + result.name = paramString; + + return result; +} + +AddedFunction::AddedFunction(QString signature, const QString &returnType) : + m_access(Public) +{ + Q_ASSERT(!returnType.isEmpty()); + m_returnType = parseType(returnType); + signature = signature.trimmed(); + int endPos = signature.indexOf(QLatin1Char('(')); + if (endPos < 0) { + m_isConst = false; + m_name = signature; + } else { + m_name = signature.left(endPos).trimmed(); + int signatureLength = signature.length(); + while (endPos < signatureLength) { + TypeInfo arg = parseType(signature, endPos, &endPos); + if (!arg.name.isEmpty()) + m_arguments.append(arg); + // end of parameters... + if (signature[endPos] == QLatin1Char(')')) + break; + } + // is const? + m_isConst = signature.rightRef(signatureLength - endPos).contains(QLatin1String("const")); + } +} + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AddedFunction::TypeInfo &ti) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "TypeInfo("; + if (ti.isConstant) + d << "const"; + if (ti.indirections) + d << QByteArray(ti.indirections, '*'); + if (ti.isReference) + d << " &"; + d << ti.name; + if (!ti.defaultValue.isEmpty()) + d << " = " << ti.defaultValue; + d << ')'; + return d; +} + +QDebug operator<<(QDebug d, const AddedFunction &af) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "AddedFunction("; + if (af.access() == AddedFunction::Protected) + d << "protected"; + if (af.isStatic()) + d << " static"; + d << af.returnType() << ' ' << af.name() << '(' << af.arguments() << ')'; + if (af.isConstant()) + d << " const"; + return d; +} +#endif // !QT_NO_DEBUG_STREAM + +AddedFunction::TypeInfo AddedFunction::TypeInfo::fromSignature(const QString& signature) +{ + return parseType(signature); +} + +ComplexTypeEntry::ComplexTypeEntry(const QString &name, TypeEntry::Type t, + const QVersionNumber &vr) : + TypeEntry(QString(name).replace(QLatin1String(".*::"), QString()), t, vr), + m_qualifiedCppName(name), + m_qobject(false), + m_polymorphicBase(false), + m_genericClass(false) +{ +} + +bool ComplexTypeEntry::isComplex() const +{ + return true; +} + +QString ComplexTypeEntry::lookupName() const +{ + return m_lookupName.isEmpty() ? targetLangName() : m_lookupName; +} + +QString ComplexTypeEntry::targetLangApiName() const +{ + return strings_jobject; +} +QString StringTypeEntry::targetLangApiName() const +{ + return strings_jobject; +} +QString StringTypeEntry::targetLangName() const +{ + return strings_String; +} +QString StringTypeEntry::targetLangPackage() const +{ + return QString(); +} + +bool StringTypeEntry::isNativeIdBased() const +{ + return false; +} + +CharTypeEntry::CharTypeEntry(const QString &name, const QVersionNumber &vr) : + ValueTypeEntry(name, CharType, vr) +{ + setCodeGeneration(GenerateNothing); +} + +QString CharTypeEntry::targetLangApiName() const +{ + return strings_jchar; +} +QString CharTypeEntry::targetLangName() const +{ + return strings_char; +} + +QString CharTypeEntry::targetLangPackage() const +{ + return QString(); +} + +bool CharTypeEntry::isNativeIdBased() const +{ + return false; +} + +VariantTypeEntry::VariantTypeEntry(const QString &name, const QVersionNumber &vr) : + ValueTypeEntry(name, VariantType, vr) +{ +} + +QString VariantTypeEntry::targetLangApiName() const +{ + return strings_jobject; +} +QString VariantTypeEntry::targetLangName() const +{ + return strings_Object; +} +QString VariantTypeEntry::targetLangPackage() const +{ + return QString(); +} + +bool VariantTypeEntry::isNativeIdBased() const +{ + return false; +} + +QString ContainerTypeEntry::typeName() const +{ + switch(m_type) { + case LinkedListContainer: + return QLatin1String("linked-list"); + case ListContainer: + return QLatin1String("list"); + case StringListContainer: + return QLatin1String("string-list"); + case VectorContainer: + return QLatin1String("vector"); + case StackContainer: + return QLatin1String("stack"); + case QueueContainer: + return QLatin1String("queue"); + case SetContainer: + return QLatin1String("set"); + case MapContainer: + return QLatin1String("map"); + case MultiMapContainer: + return QLatin1String("multi-map"); + case HashContainer: + return QLatin1String("hash"); + case MultiHashContainer: + return QLatin1String("multi-hash"); + case PairContainer: + return QLatin1String("pair"); + case NoContainer: + default: + return QLatin1String("?"); + } +} + +static const QSet &primitiveCppTypes() +{ + static QSet result; + if (result.isEmpty()) { + static const char *cppTypes[] = { + "bool", "char", "double", "float", "int", + "long", "long long", "short", + "wchar_t" + }; + for (const char *cppType : cppTypes) + result.insert(QLatin1String(cppType)); + } + return result; +} + +bool TypeEntry::isCppPrimitive() const +{ + if (!isPrimitive()) + return false; + + if (m_type == VoidType) + return true; + + const PrimitiveTypeEntry *referencedType = + static_cast(this)->basicReferencedTypeEntry(); + const QString &typeName = referencedType ? referencedType->name() : m_name; + return typeName.contains(QLatin1Char(' ')) || primitiveCppTypes().contains(typeName); +} + +// Again, stuff to avoid ABI breakage. +typedef QHash TypeEntryCustomConversionMap; +Q_GLOBAL_STATIC(TypeEntryCustomConversionMap, typeEntryCustomConversionMap); + +TypeEntry::TypeEntry(const QString &name, TypeEntry::Type t, const QVersionNumber &vr) : + m_name(name), + m_type(t), + m_version(vr) +{ +} + +TypeEntry::~TypeEntry() +{ + if (typeEntryCustomConversionMap()->contains(this)) { + CustomConversion* customConversion = typeEntryCustomConversionMap()->value(this); + typeEntryCustomConversionMap()->remove(this); + delete customConversion; + } +} + +bool TypeEntry::hasCustomConversion() const +{ + return typeEntryCustomConversionMap()->contains(this); +} +void TypeEntry::setCustomConversion(CustomConversion* customConversion) +{ + if (customConversion) + typeEntryCustomConversionMap()->insert(this, customConversion); + else if (typeEntryCustomConversionMap()->contains(this)) + typeEntryCustomConversionMap()->remove(this); +} +CustomConversion* TypeEntry::customConversion() const +{ + if (typeEntryCustomConversionMap()->contains(this)) + return typeEntryCustomConversionMap()->value(this); + return 0; +} + +TypeSystemTypeEntry::TypeSystemTypeEntry(const QString &name, const QVersionNumber &vr) : + TypeEntry(name, TypeSystemType, vr) +{ +} + +VoidTypeEntry::VoidTypeEntry() : + TypeEntry(QLatin1String("void"), VoidType, QVersionNumber(0, 0)) +{ +} + +VarargsTypeEntry::VarargsTypeEntry() : + TypeEntry(QLatin1String("..."), VarargsType, QVersionNumber(0, 0)) +{ +} + +TemplateArgumentEntry::TemplateArgumentEntry(const QString &name, const QVersionNumber &vr) : + TypeEntry(name, TemplateArgumentType, vr) +{ +} + +ArrayTypeEntry::ArrayTypeEntry(const TypeEntry *nested_type, const QVersionNumber &vr) : + TypeEntry(QLatin1String("Array"), ArrayType, vr), + m_nestedType(nested_type) +{ + Q_ASSERT(m_nestedType); +} + +QString ArrayTypeEntry::targetLangName() const +{ + return m_nestedType->targetLangName() + QLatin1String("[]"); +} + +QString ArrayTypeEntry::targetLangApiName() const +{ + if (m_nestedType->isPrimitive()) + return m_nestedType->targetLangApiName() + QLatin1String("Array"); + else + return QLatin1String("jobjectArray"); +} + +EnumTypeEntry::EnumTypeEntry(const QString &nspace, const QString &enumName, + const QVersionNumber &vr) : + TypeEntry(nspace.isEmpty() ? enumName : nspace + QLatin1String("::") + enumName, + EnumType, vr), + m_qualifier(nspace), + m_targetLangName(enumName) +{ +} + +QString EnumTypeEntry::targetLangPackage() const +{ + return m_packageName; +} + +void EnumTypeEntry::setTargetLangPackage(const QString &package) +{ + m_packageName = package; +} + +QString EnumTypeEntry::targetLangName() const +{ + return m_targetLangName; +} + +EnumValueTypeEntry::EnumValueTypeEntry(const QString &name, const QString &value, + const EnumTypeEntry *enclosingEnum, + const QVersionNumber &vr) : + TypeEntry(name, TypeEntry::EnumValue, vr), + m_value(value), + m_enclosingEnum(enclosingEnum) +{ +} + +FlagsTypeEntry::FlagsTypeEntry(const QString &name, const QVersionNumber &vr) : + TypeEntry(name, FlagsType, vr) +{ +} + +ContainerTypeEntry::ContainerTypeEntry(const QString &name, Type type, + const QVersionNumber &vr) : + ComplexTypeEntry(name, ContainerType, vr), + m_type(type) +{ + setCodeGeneration(GenerateForSubclass); +} + +SmartPointerTypeEntry::SmartPointerTypeEntry(const QString &name, + const QString &getterName, + const QString &smartPointerType, + const QString &refCountMethodName, + const QVersionNumber &vr) : + ComplexTypeEntry(name, SmartPointerType, vr), + m_getterName(getterName), + m_smartPointerType(smartPointerType), + m_refCountMethodName(refCountMethodName) +{ +} + +NamespaceTypeEntry::NamespaceTypeEntry(const QString &name, const QVersionNumber &vr) : + ComplexTypeEntry(name, NamespaceType, vr) +{ +} + +ValueTypeEntry::ValueTypeEntry(const QString &name, const QVersionNumber &vr) : + ComplexTypeEntry(name, BasicValueType, vr) +{ +} + +bool ValueTypeEntry::isValue() const +{ + return true; +} + +bool ValueTypeEntry::isNativeIdBased() const +{ + return true; +} + +ValueTypeEntry::ValueTypeEntry(const QString &name, Type t, const QVersionNumber &vr) : + ComplexTypeEntry(name, t, vr) +{ +} + +StringTypeEntry::StringTypeEntry(const QString &name, const QVersionNumber &vr) : + ValueTypeEntry(name, StringType, vr) +{ + setCodeGeneration(GenerateNothing); +} + +/* +static void injectCode(ComplexTypeEntry *e, + const char *signature, + const QByteArray &code, + const ArgumentMap &args) +{ + CodeSnip snip; + snip.language = TypeSystem::NativeCode; + snip.position = CodeSnip::Beginning; + snip.addCode(QString::fromLatin1(code)); + snip.argumentMap = args; + + FunctionModification mod; + mod.signature = QMetaObject::normalizedSignature(signature); + mod.snips << snip; + mod.modifiers = Modification::CodeInjection; +} +*/ + +struct CustomConversion::CustomConversionPrivate +{ + CustomConversionPrivate(const TypeEntry* ownerType) + : ownerType(ownerType), replaceOriginalTargetToNativeConversions(false) + { + } + const TypeEntry* ownerType; + QString nativeToTargetConversion; + bool replaceOriginalTargetToNativeConversions; + TargetToNativeConversions targetToNativeConversions; +}; + +struct CustomConversion::TargetToNativeConversion::TargetToNativeConversionPrivate +{ + TargetToNativeConversionPrivate() + : sourceType(0) + { + } + const TypeEntry* sourceType; + QString sourceTypeName; + QString sourceTypeCheck; + QString conversion; +}; + +CustomConversion::CustomConversion(TypeEntry* ownerType) +{ + m_d = new CustomConversionPrivate(ownerType); + if (ownerType) + ownerType->setCustomConversion(this); +} + +CustomConversion::~CustomConversion() +{ + qDeleteAll(m_d->targetToNativeConversions); + delete m_d; +} + +const TypeEntry* CustomConversion::ownerType() const +{ + return m_d->ownerType; +} + +QString CustomConversion::nativeToTargetConversion() const +{ + return m_d->nativeToTargetConversion; +} + +void CustomConversion::setNativeToTargetConversion(const QString& nativeToTargetConversion) +{ + m_d->nativeToTargetConversion = nativeToTargetConversion; +} + +bool CustomConversion::replaceOriginalTargetToNativeConversions() const +{ + return m_d->replaceOriginalTargetToNativeConversions; +} + +void CustomConversion::setReplaceOriginalTargetToNativeConversions(bool replaceOriginalTargetToNativeConversions) +{ + m_d->replaceOriginalTargetToNativeConversions = replaceOriginalTargetToNativeConversions; +} + +bool CustomConversion::hasTargetToNativeConversions() const +{ + return !(m_d->targetToNativeConversions.isEmpty()); +} + +CustomConversion::TargetToNativeConversions& CustomConversion::targetToNativeConversions() +{ + return m_d->targetToNativeConversions; +} + +const CustomConversion::TargetToNativeConversions& CustomConversion::targetToNativeConversions() const +{ + return m_d->targetToNativeConversions; +} + +void CustomConversion::addTargetToNativeConversion(const QString& sourceTypeName, + const QString& sourceTypeCheck, + const QString& conversion) +{ + m_d->targetToNativeConversions.append(new TargetToNativeConversion(sourceTypeName, sourceTypeCheck, conversion)); +} + +CustomConversion::TargetToNativeConversion::TargetToNativeConversion(const QString& sourceTypeName, + const QString& sourceTypeCheck, + const QString& conversion) +{ + m_d = new TargetToNativeConversionPrivate; + m_d->sourceTypeName = sourceTypeName; + m_d->sourceTypeCheck = sourceTypeCheck; + m_d->conversion = conversion; +} + +CustomConversion::TargetToNativeConversion::~TargetToNativeConversion() +{ + delete m_d; +} + +const TypeEntry* CustomConversion::TargetToNativeConversion::sourceType() const +{ + return m_d->sourceType; +} + +void CustomConversion::TargetToNativeConversion::setSourceType(const TypeEntry* sourceType) +{ + m_d->sourceType = sourceType; +} + +bool CustomConversion::TargetToNativeConversion::isCustomType() const +{ + return !(m_d->sourceType); +} + +QString CustomConversion::TargetToNativeConversion::sourceTypeName() const +{ + return m_d->sourceTypeName; +} + +QString CustomConversion::TargetToNativeConversion::sourceTypeCheck() const +{ + return m_d->sourceTypeCheck; +} + +QString CustomConversion::TargetToNativeConversion::conversion() const +{ + return m_d->conversion; +} + +void CustomConversion::TargetToNativeConversion::setConversion(const QString& conversion) +{ + m_d->conversion = conversion; +} + +InterfaceTypeEntry::InterfaceTypeEntry(const QString &name, const QVersionNumber &vr) : + ComplexTypeEntry(name, InterfaceType, vr) +{ +} + +bool InterfaceTypeEntry::isNativeIdBased() const +{ + return true; +} + +QString InterfaceTypeEntry::qualifiedCppName() const +{ + const int len = ComplexTypeEntry::qualifiedCppName().length() - interfaceName(QString()).length(); + return ComplexTypeEntry::qualifiedCppName().left(len); +} + +FunctionTypeEntry::FunctionTypeEntry(const QString &name, const QString &signature, + const QVersionNumber &vr) : + TypeEntry(name, FunctionType, vr) +{ + addSignature(signature); +} + +ObjectTypeEntry::ObjectTypeEntry(const QString &name, const QVersionNumber &vr) + : ComplexTypeEntry(name, ObjectType, vr) +{ +} + +InterfaceTypeEntry *ObjectTypeEntry::designatedInterface() const +{ + return m_interface; +} + +bool ObjectTypeEntry::isNativeIdBased() const +{ + return true; +} diff --git a/sources/shiboken2/ApiExtractor/typesystem.h b/sources/shiboken2/ApiExtractor/typesystem.h new file mode 100644 index 0000000..186c4b2 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/typesystem.h @@ -0,0 +1,1708 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TYPESYSTEM_H +#define TYPESYSTEM_H + +#include "typesystem_enums.h" +#include "typesystem_typedefs.h" +#include "include.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +//Used to identify the conversion rule to avoid break API +#define TARGET_CONVERSION_RULE_FLAG "0" +#define NATIVE_CONVERSION_RULE_FLAG "1" + +class Indentor; + +class AbstractMetaType; +QT_BEGIN_NAMESPACE +class QDebug; +class QTextStream; +QT_END_NAMESPACE + +class EnumTypeEntry; +class FlagsTypeEntry; + +typedef QMap ArgumentMap; + +class TemplateInstance; + +struct ReferenceCount +{ + enum Action { // 0x01 - 0xff + Invalid = 0x00, + Add = 0x01, + AddAll = 0x02, + Remove = 0x04, + Set = 0x08, + Ignore = 0x10, + + ActionsMask = 0xff, + + Padding = 0xffffffff + }; + + QString varName; + Action action = Invalid; +}; + +struct ArgumentOwner +{ + enum Action { + Invalid = 0x00, + Add = 0x01, + Remove = 0x02 + }; + enum { + InvalidIndex = -2, + ThisIndex = -1, + ReturnIndex = 0, + FirstArgumentIndex = 1 + }; + + Action action = Invalid; + int index = InvalidIndex; +}; + +class CodeSnipFragment +{ +public: + CodeSnipFragment() = default; + explicit CodeSnipFragment(const QString &code) : m_code(code) {} + explicit CodeSnipFragment(TemplateInstance *instance) : m_instance(instance) {} + + QString code() const; + +private: + QString m_code; + TemplateInstance *m_instance = nullptr; +}; + +class CodeSnipAbstract +{ +public: + QString code() const; + + void addCode(const QString &code) { codeList.append(CodeSnipFragment(code)); } + void addCode(const QStringRef &code) { addCode(code.toString()); } + + void addTemplateInstance(TemplateInstance *ti) + { + codeList.append(CodeSnipFragment(ti)); + } + + QVector codeList; +}; + +class CustomFunction : public CodeSnipAbstract +{ +public: + explicit CustomFunction(const QString &n = QString()) : name(n) {} + + QString name; + QString paramName; +}; + +class TemplateEntry : public CodeSnipAbstract +{ +public: + explicit TemplateEntry(const QString &name) : m_name(name) {} + + QString name() const + { + return m_name; + } + +private: + QString m_name; +}; + +class TemplateInstance +{ +public: + explicit TemplateInstance(const QString &name) : m_name(name) {} + + void addReplaceRule(const QString &name, const QString &value) + { + replaceRules[name] = value; + } + + QString expandCode() const; + + QString name() const + { + return m_name; + } + +private: + const QString m_name; + QHash replaceRules; +}; + + +class CodeSnip : public CodeSnipAbstract +{ +public: + CodeSnip() = default; + explicit CodeSnip(TypeSystem::Language lang) : language(lang) {} + + TypeSystem::Language language = TypeSystem::TargetLangCode; + TypeSystem::CodeSnipPosition position = TypeSystem::CodeSnipPositionAny; + ArgumentMap argumentMap; +}; + +struct ArgumentModification +{ + ArgumentModification() : removedDefaultExpression(false), removed(false), + noNullPointers(false), array(false) {} + explicit ArgumentModification(int idx) : index(idx), removedDefaultExpression(false), removed(false), + noNullPointers(false), array(false) {} + + // Should the default expression be removed? + + + // Reference count flags for this argument + QVector referenceCounts; + + // The text given for the new type of the argument + QString modified_type; + + QString replace_value; + + // The code to be used to construct a return value when noNullPointers is true and + // the returned value is null. If noNullPointers is true and this string is + // empty, then the base class implementation will be used (or a default construction + // if there is no implementation) + QString nullPointerDefaultValue; + + // The text of the new default expression of the argument + QString replacedDefaultExpression; + + // The new definition of ownership for a specific argument + QHash ownerships; + + // Different conversion rules + CodeSnipList conversion_rules; + + //QObject parent(owner) of this argument + ArgumentOwner owner; + + //New name + QString renamed_to; + + // The index of this argument + int index = -1; + + uint removedDefaultExpression : 1; + uint removed : 1; + uint noNullPointers : 1; + uint resetAfterUse : 1; + uint array : 1; // consider "int*" to be "int[]" +}; + +struct Modification +{ + enum Modifiers { + Private = 0x0001, + Protected = 0x0002, + Public = 0x0003, + Friendly = 0x0004, + AccessModifierMask = 0x000f, + + Final = 0x0010, + NonFinal = 0x0020, + FinalMask = Final | NonFinal, + + Readable = 0x0100, + Writable = 0x0200, + + CodeInjection = 0x1000, + Rename = 0x2000, + Deprecated = 0x4000, + ReplaceExpression = 0x8000, + VirtualSlot = 0x10000 | NonFinal + }; + + bool isAccessModifier() const + { + return modifiers & AccessModifierMask; + } + Modifiers accessModifier() const + { + return Modifiers(modifiers & AccessModifierMask); + } + bool isPrivate() const + { + return accessModifier() == Private; + } + bool isProtected() const + { + return accessModifier() == Protected; + } + bool isPublic() const + { + return accessModifier() == Public; + } + bool isFriendly() const + { + return accessModifier() == Friendly; + } + bool isFinal() const + { + return modifiers & Final; + } + bool isNonFinal() const + { + return modifiers & NonFinal; + } + bool isVirtualSlot() const + { + return (modifiers & VirtualSlot) == VirtualSlot; + } + QString accessModifierString() const; + + bool isDeprecated() const + { + return modifiers & Deprecated; + } + + void setRenamedTo(const QString &name) + { + renamedToName = name; + } + QString renamedTo() const + { + return renamedToName; + } + bool isRenameModifier() const + { + return modifiers & Rename; + } + + bool isRemoveModifier() const + { + return removal != TypeSystem::NoLanguage; + } + + QString renamedToName; + uint modifiers = 0; + TypeSystem::Language removal = TypeSystem::NoLanguage; +}; + +struct FunctionModification: public Modification +{ + bool isCodeInjection() const + { + return modifiers & CodeInjection; + } + void setIsThread(bool flag) + { + m_thread = flag; + } + bool isThread() const + { + return m_thread; + } + bool allowThread() const + { + return m_allowThread; + } + void setAllowThread(bool allow) + { + m_allowThread = allow; + } + + bool matches(const QString &functionSignature) const + { + return m_signature.isEmpty() + ? m_signaturePattern.match(functionSignature).hasMatch() + : m_signature == functionSignature; + } + + bool setSignature(const QString &s, QString *errorMessage = nullptr); + QString signature() const { return m_signature.isEmpty() ? m_signaturePattern.pattern() : m_signature; } + + void setOriginalSignature(const QString &s) { m_originalSignature = s; } + QString originalSignature() const { return m_originalSignature; } + + QString toString() const; + + QString association; + CodeSnipList snips; + + QVector argument_mods; + +private: + QString m_signature; + QString m_originalSignature; + QRegularExpression m_signaturePattern; + bool m_thread = false; + bool m_allowThread = false; +}; + +struct FieldModification: public Modification +{ + bool isReadable() const + { + return modifiers & Readable; + } + bool isWritable() const + { + return modifiers & Writable; + } + + QString name; +}; + +/** +* \internal +* Struct used to store information about functions added by the typesystem. +* This info will be used later to create a fake AbstractMetaFunction which +* will be inserted into the right AbstractMetaClass. +*/ +struct AddedFunction +{ + /// Function access types. + enum Access { + Protected = 0x1, + Public = 0x2 + }; + + /** + * \internal + * Internal struct used to store information about arguments and return type of the + * functions added by the type system. This information is later used to create + * AbstractMetaType and AbstractMetaArgument for the AbstractMetaFunctions. + */ + struct TypeInfo { + TypeInfo() = default; + static TypeInfo fromSignature(const QString& signature); + + QString name; + QString defaultValue; + int indirections = 0; + bool isConstant = false; + bool isReference = false; + }; + + /// Creates a new AddedFunction with a signature and a return type. + explicit AddedFunction(QString signature, const QString &returnType); + AddedFunction() = default; + + /// Returns the function name. + QString name() const + { + return m_name; + } + + /// Set the function access type. + void setAccess(Access access) + { + m_access = access; + } + + /// Returns the function access type. + Access access() const + { + return m_access; + } + + /// Returns the function return type. + TypeInfo returnType() const + { + return m_returnType; + } + + /// Returns a list of argument type infos. + QVector arguments() const + { + return m_arguments; + } + + /// Returns true if this is a constant method. + bool isConstant() const + { + return m_isConst; + } + + /// Set this method static. + void setStatic(bool value) + { + m_isStatic = value; + } + + /// Returns true if this is a static method. + bool isStatic() const + { + return m_isStatic; + } + +private: + QString m_name; + QVector m_arguments; + TypeInfo m_returnType; + Access m_access = Protected; + bool m_isConst = false; + bool m_isStatic = false; +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const AddedFunction::TypeInfo &ti); +QDebug operator<<(QDebug d, const AddedFunction &af); +#endif + +class InterfaceTypeEntry; +class ObjectTypeEntry; + +class DocModification +{ +public: + DocModification() = default; + explicit DocModification(const QString& xpath, const QString& signature) : + m_xpath(xpath), m_signature(signature) {} + explicit DocModification(TypeSystem::DocModificationMode mode, const QString& signature) : + m_signature(signature), m_mode(mode) {} + + void setCode(const QString& code) { m_code = code; } + void setCode(const QStringRef& code) { m_code = code.toString(); } + + QString code() const + { + return m_code; + } + QString xpath() const + { + return m_xpath; + } + QString signature() const + { + return m_signature; + } + TypeSystem::DocModificationMode mode() const + { + return m_mode; + } + + TypeSystem::Language format() const { return m_format; } + void setFormat(TypeSystem::Language f) { m_format = f; } + +private: + QString m_code; + QString m_xpath; + QString m_signature; + TypeSystem::DocModificationMode m_mode = TypeSystem::DocModificationXPathReplace; + TypeSystem::Language m_format = TypeSystem::NativeCode; +}; + +class CustomConversion; + +class TypeEntry +{ + Q_DISABLE_COPY(TypeEntry) + Q_GADGET +public: + enum Type { + PrimitiveType, + VoidType, + VarargsType, + FlagsType, + EnumType, + EnumValue, + TemplateArgumentType, + ThreadType, + BasicValueType, + StringType, + ContainerType, + InterfaceType, + ObjectType, + NamespaceType, + VariantType, + JObjectWrapperType, + CharType, + ArrayType, + TypeSystemType, + CustomType, + TargetLangType, + FunctionType, + SmartPointerType + }; + Q_ENUM(Type) + + enum CodeGeneration { + GenerateTargetLang = 0x0001, + GenerateCpp = 0x0002, + GenerateForSubclass = 0x0004, + + GenerateNothing = 0, + GenerateAll = 0xffff, + GenerateCode = GenerateTargetLang | GenerateCpp + }; + Q_ENUM(CodeGeneration) + + explicit TypeEntry(const QString &name, Type t, const QVersionNumber &vr); + + virtual ~TypeEntry(); + + Type type() const + { + return m_type; + } + bool isPrimitive() const + { + return m_type == PrimitiveType; + } + bool isEnum() const + { + return m_type == EnumType; + } + bool isFlags() const + { + return m_type == FlagsType; + } + bool isInterface() const + { + return m_type == InterfaceType; + } + bool isObject() const + { + return m_type == ObjectType; + } + bool isString() const + { + return m_type == StringType; + } + bool isChar() const + { + return m_type == CharType; + } + bool isNamespace() const + { + return m_type == NamespaceType; + } + bool isContainer() const + { + return m_type == ContainerType; + } + bool isSmartPointer() const + { + return m_type == SmartPointerType; + } + bool isVariant() const + { + return m_type == VariantType; + } + bool isJObjectWrapper() const + { + return m_type == JObjectWrapperType; + } + bool isArray() const + { + return m_type == ArrayType; + } + bool isTemplateArgument() const + { + return m_type == TemplateArgumentType; + } + bool isVoid() const + { + return m_type == VoidType; + } + bool isVarargs() const + { + return m_type == VarargsType; + } + bool isThread() const + { + return m_type == ThreadType; + } + bool isCustom() const + { + return m_type == CustomType; + } + bool isBasicValue() const + { + return m_type == BasicValueType; + } + bool isTypeSystem() const + { + return m_type == TypeSystemType; + } + bool isFunction() const + { + return m_type == FunctionType; + } + bool isEnumValue() const + { + return m_type == EnumValue; + } + + virtual bool preferredConversion() const + { + return m_preferredConversion; + } + virtual void setPreferredConversion(bool b) + { + m_preferredConversion = b; + } + + bool stream() const + { + return m_stream; + } + + void setStream(bool b) + { + m_stream = b; + } + + // The type's name in C++, fully qualified + QString name() const + { + return m_name; + } + + uint codeGeneration() const + { + return m_codeGeneration; + } + void setCodeGeneration(uint cg) + { + m_codeGeneration = cg; + } + + // Returns true if code must be generated for this entry, + // it will return false in case of types coming from typesystems + // included for reference only. + // NOTE: 'GenerateForSubclass' means 'generate="no"' + // on 'load-typesystem' tag + inline bool generateCode() const + { + return m_codeGeneration != TypeEntry::GenerateForSubclass + && m_codeGeneration != TypeEntry::GenerateNothing; + } + + virtual QString qualifiedCppName() const + { + return m_name; + } + + /** + * Its type's name in target language API + * The target language API name represents how this type is + * referred on low level code for the target language. + * Examples: for Java this would be a JNI name, for Python + * it should represent the CPython type name. + * /return string representing the target language API name + * for this type entry + */ + virtual QString targetLangApiName() const + { + return m_name; + } + + // The type's name in TargetLang + virtual QString targetLangName() const + { + return m_name; + } + + // The type to lookup when converting to TargetLang + virtual QString lookupName() const + { + return targetLangName(); + } + + // The package + virtual QString targetLangPackage() const + { + return QString(); + } + + virtual QString qualifiedTargetLangName() const + { + QString pkg = targetLangPackage(); + if (pkg.isEmpty()) + return targetLangName(); + return pkg + QLatin1Char('.') + targetLangName(); + } + + virtual InterfaceTypeEntry *designatedInterface() const + { + return 0; + } + + void setCustomConstructor(const CustomFunction &func) + { + m_customConstructor = func; + } + CustomFunction customConstructor() const + { + return m_customConstructor; + } + + void setCustomDestructor(const CustomFunction &func) + { + m_customDestructor = func; + } + CustomFunction customDestructor() const + { + return m_customDestructor; + } + + virtual bool isValue() const + { + return false; + } + virtual bool isComplex() const + { + return false; + } + + virtual bool isNativeIdBased() const + { + return false; + } + + CodeSnipList codeSnips() const; + void setCodeSnips(const CodeSnipList &codeSnips) + { + m_codeSnips = codeSnips; + } + void addCodeSnip(const CodeSnip &codeSnip) + { + m_codeSnips << codeSnip; + } + + void setDocModification(const DocModificationList& docMods) + { + m_docModifications << docMods; + } + DocModificationList docModifications() const + { + return m_docModifications; + } + + IncludeList extraIncludes() const + { + return m_extraIncludes; + } + void setExtraIncludes(const IncludeList &includes) + { + m_extraIncludes = includes; + } + void addExtraInclude(const Include &include) + { + if (!m_includesUsed.value(include.name(), false)) { + m_extraIncludes << include; + m_includesUsed[include.name()] = true; + } + } + + Include include() const + { + return m_include; + } + void setInclude(const Include &inc) + { + // This is a workaround for preventing double inclusion of the QSharedPointer implementation + // header, which does not use header guards. In the previous parser this was not a problem + // because the Q_QDOC define was set, and the implementation header was never included. + if (inc.name() == QLatin1String("qsharedpointer_impl.h")) + m_include = Include(inc.type(), QLatin1String("qsharedpointer.h")); + else + m_include = inc; + } + + // Replace conversionRule arg to CodeSnip in future version + /// Set the type convertion rule + void setConversionRule(const QString& conversionRule) + { + m_conversionRule = conversionRule; + } + + /// Returns the type convertion rule + QString conversionRule() const + { + //skip conversions flag + return m_conversionRule.mid(1); + } + + /// Returns true if there are any conversiton rule for this type, false otherwise. + bool hasConversionRule() const + { + return !m_conversionRule.isEmpty(); + } + + QVersionNumber version() const + { + return m_version; + } + + /// TODO-CONVERTER: mark as deprecated + bool hasNativeConversionRule() const + { + return m_conversionRule.startsWith(QLatin1String(NATIVE_CONVERSION_RULE_FLAG)); + } + + /// TODO-CONVERTER: mark as deprecated + bool hasTargetConversionRule() const + { + return m_conversionRule.startsWith(QLatin1String(TARGET_CONVERSION_RULE_FLAG)); + } + + bool isCppPrimitive() const; + + bool hasCustomConversion() const; + void setCustomConversion(CustomConversion* customConversion); + CustomConversion* customConversion() const; +private: + QString m_name; + Type m_type; + uint m_codeGeneration = GenerateAll; + CustomFunction m_customConstructor; + CustomFunction m_customDestructor; + bool m_preferredConversion = true; + CodeSnipList m_codeSnips; + DocModificationList m_docModifications; + IncludeList m_extraIncludes; + Include m_include; + QHash m_includesUsed; + QString m_conversionRule; + bool m_stream = false; + QVersionNumber m_version; +}; + +class TypeSystemTypeEntry : public TypeEntry +{ +public: + explicit TypeSystemTypeEntry(const QString &name, const QVersionNumber &vr); +}; + +class VoidTypeEntry : public TypeEntry +{ +public: + VoidTypeEntry(); +}; + +class VarargsTypeEntry : public TypeEntry +{ +public: + VarargsTypeEntry(); +}; + +class TemplateArgumentEntry : public TypeEntry +{ +public: + explicit TemplateArgumentEntry(const QString &name, const QVersionNumber &vr); + + int ordinal() const + { + return m_ordinal; + } + void setOrdinal(int o) + { + m_ordinal = o; + } + +private: + int m_ordinal = 0; +}; + +class ArrayTypeEntry : public TypeEntry +{ +public: + explicit ArrayTypeEntry(const TypeEntry *nested_type, const QVersionNumber &vr); + + void setNestedTypeEntry(TypeEntry *nested) + { + m_nestedType = nested; + } + const TypeEntry *nestedTypeEntry() const + { + return m_nestedType; + } + + QString targetLangName() const override; + QString targetLangApiName() const override; + +private: + const TypeEntry *m_nestedType; +}; + + +class PrimitiveTypeEntry : public TypeEntry +{ +public: + explicit PrimitiveTypeEntry(const QString &name, const QVersionNumber &vr); + + QString targetLangName() const override; + void setTargetLangName(const QString &targetLangName) + { + m_targetLangName = targetLangName; + } + + QString targetLangApiName() const override; + void setTargetLangApiName(const QString &targetLangApiName) + { + m_targetLangApiName = targetLangApiName; + } + + QString defaultConstructor() const + { + return m_defaultConstructor; + } + void setDefaultConstructor(const QString& defaultConstructor) + { + m_defaultConstructor = defaultConstructor; + } + bool hasDefaultConstructor() const + { + return !m_defaultConstructor.isEmpty(); + } + + /** + * The PrimitiveTypeEntry pointed by this type entry if it + * represents a typedef). + * /return the type referenced by the typedef, or a null pointer + * if the current object is not an typedef + */ + PrimitiveTypeEntry* referencedTypeEntry() const { return m_referencedTypeEntry; } + + /** + * Defines type referenced by this entry. + * /param referencedTypeEntry type referenced by this entry + */ + void setReferencedTypeEntry(PrimitiveTypeEntry* referencedTypeEntry) + { + m_referencedTypeEntry = referencedTypeEntry; + } + + /** + * Finds the most basic primitive type that the typedef represents, + * i.e. a type that is not an typedef'ed. + * /return the most basic non-typedef'ed primitive type represented + * by this typedef + */ + PrimitiveTypeEntry* basicReferencedTypeEntry() const; + + bool preferredConversion() const override; + void setPreferredConversion(bool b) override; + + bool preferredTargetLangType() const + { + return m_preferredTargetLangType; + } + void setPreferredTargetLangType(bool b) + { + m_preferredTargetLangType = b; + } + + void setTargetLangPackage(const QString& package); + QString targetLangPackage() const override; +private: + QString m_targetLangName; + QString m_targetLangApiName; + QString m_defaultConstructor; + uint m_preferredConversion : 1; + uint m_preferredTargetLangType : 1; + PrimitiveTypeEntry* m_referencedTypeEntry = nullptr; +}; + +class EnumTypeEntry : public TypeEntry +{ +public: + explicit EnumTypeEntry(const QString &nspace, const QString &enumName, + const QVersionNumber &vr); + + QString targetLangPackage() const override; + void setTargetLangPackage(const QString &package); + + QString targetLangName() const override; + QString targetLangQualifier() const; + QString qualifiedTargetLangName() const override; + + QString targetLangApiName() const override; + + QString qualifier() const + { + return m_qualifier; + } + void setQualifier(const QString &q) + { + m_qualifier = q; + } + + bool preferredConversion() const override; + + bool isBoundsChecked() const + { + return m_lowerBound.isEmpty() && m_upperBound.isEmpty(); + } + + QString upperBound() const + { + return m_upperBound; + } + void setUpperBound(const QString &bound) + { + m_upperBound = bound; + } + + QString lowerBound() const + { + return m_lowerBound; + } + void setLowerBound(const QString &bound) + { + m_lowerBound = bound; + } + + void setFlags(FlagsTypeEntry *flags) + { + m_flags = flags; + } + FlagsTypeEntry *flags() const + { + return m_flags; + } + + bool isExtensible() const + { + return m_extensible; + } + void setExtensible(bool is) + { + m_extensible = is; + } + + bool isEnumValueRejected(const QString &name) const + { + return m_rejectedEnums.contains(name); + } + void addEnumValueRejection(const QString &name) + { + m_rejectedEnums << name; + } + QStringList enumValueRejections() const + { + return m_rejectedEnums; + } + + bool forceInteger() const + { + return m_forceInteger; + } + void setForceInteger(bool force) + { + m_forceInteger = force; + } + +private: + QString m_packageName; + QString m_qualifier; + QString m_targetLangName; + + QString m_lowerBound; + QString m_upperBound; + + QStringList m_rejectedEnums; + + FlagsTypeEntry *m_flags = nullptr; + + bool m_extensible = false; + bool m_forceInteger = false; +}; + +// EnumValueTypeEntry is used for resolving integer type templates +// like array. +class EnumValueTypeEntry : public TypeEntry +{ +public: + explicit EnumValueTypeEntry(const QString& name, const QString& value, const EnumTypeEntry* enclosingEnum, const QVersionNumber &vr); + + QString value() const { return m_value; } + const EnumTypeEntry* enclosingEnum() const { return m_enclosingEnum; } +private: + QString m_value; + const EnumTypeEntry* m_enclosingEnum; +}; + +class FlagsTypeEntry : public TypeEntry +{ +public: + explicit FlagsTypeEntry(const QString &name, const QVersionNumber &vr); + + QString qualifiedTargetLangName() const override; + QString targetLangName() const override; + QString targetLangApiName() const override; + bool preferredConversion() const override; + + QString originalName() const + { + return m_originalName; + } + void setOriginalName(const QString &s) + { + m_originalName = s; + } + + QString flagsName() const + { + return m_targetLangName; + } + void setFlagsName(const QString &name) + { + m_targetLangName = name; + } + + bool forceInteger() const + { + return m_enum->forceInteger(); + } + + EnumTypeEntry *originator() const + { + return m_enum; + } + void setOriginator(EnumTypeEntry *e) + { + m_enum = e; + } + + QString targetLangPackage() const override; + +private: + QString m_originalName; + QString m_targetLangName; + EnumTypeEntry *m_enum = nullptr; +}; + + +class ComplexTypeEntry : public TypeEntry +{ +public: + enum TypeFlag { + ForceAbstract = 0x1, + DeleteInMainThread = 0x2, + Deprecated = 0x4 + }; + typedef QFlags TypeFlags; + + enum CopyableFlag { + CopyableSet, + NonCopyableSet, + Unknown + }; + + explicit ComplexTypeEntry(const QString &name, Type t, const QVersionNumber &vr); + + bool isComplex() const override; + + void setLookupName(const QString &name) + { + m_lookupName = name; + } + + QString lookupName() const override; + + QString targetLangApiName() const override; + + void setTypeFlags(TypeFlags flags) + { + m_typeFlags = flags; + } + + TypeFlags typeFlags() const + { + return m_typeFlags; + } + + FunctionModificationList functionModifications() const + { + return m_functionMods; + } + void setFunctionModifications(const FunctionModificationList &functionModifications) + { + m_functionMods = functionModifications; + } + void addFunctionModification(const FunctionModification &functionModification) + { + m_functionMods << functionModification; + } + FunctionModificationList functionModifications(const QString &signature) const; + + AddedFunctionList addedFunctions() const + { + return m_addedFunctions; + } + void setAddedFunctions(const AddedFunctionList &addedFunctions) + { + m_addedFunctions = addedFunctions; + } + void addNewFunction(const AddedFunction &addedFunction) + { + m_addedFunctions << addedFunction; + } + + FieldModification fieldModification(const QString &name) const; + void setFieldModifications(const FieldModificationList &mods) + { + m_fieldMods = mods; + } + FieldModificationList fieldModifications() const + { + return m_fieldMods; + } + + QString targetLangPackage() const override; + void setTargetLangPackage(const QString &package) + { + m_package = package; + } + + bool isQObject() const + { + return m_qobject; + } + void setQObject(bool qobject) + { + m_qobject = qobject; + } + + QString defaultSuperclass() const + { + return m_defaultSuperclass; + } + void setDefaultSuperclass(const QString &sc) + { + m_defaultSuperclass = sc; + } + + QString qualifiedCppName() const override + { + return m_qualifiedCppName; + } + + + void setIsPolymorphicBase(bool on) + { + m_polymorphicBase = on; + } + bool isPolymorphicBase() const + { + return m_polymorphicBase; + } + + void setPolymorphicIdValue(const QString &value) + { + m_polymorphicIdValue = value; + } + QString polymorphicIdValue() const + { + return m_polymorphicIdValue; + } + + void setHeldType(const QString &value) + { + m_heldTypeValue = value; + } + QString heldTypeValue() const + { + return m_heldTypeValue; + } + + QString targetType() const + { + return m_targetType; + } + void setTargetType(const QString &code) + { + m_targetType = code; + } + + QString targetLangName() const override; + void setTargetLangName(const QString &name) + { + m_targetLangName = name; + } + + bool isGenericClass() const + { + return m_genericClass; + } + void setGenericClass(bool isGeneric) + { + m_genericClass = isGeneric; + } + + CopyableFlag copyable() const + { + return m_copyableFlag; + } + void setCopyable(CopyableFlag flag) + { + m_copyableFlag = flag; + } + + QString hashFunction() const + { + return m_hashFunction; + } + void setHashFunction(QString hashFunction) + { + m_hashFunction = hashFunction; + } + + void setBaseContainerType(const ComplexTypeEntry *baseContainer) + { + m_baseContainerType = baseContainer; + } + + const ComplexTypeEntry* baseContainerType() const + { + return m_baseContainerType; + } + + QString defaultConstructor() const; + void setDefaultConstructor(const QString& defaultConstructor); + bool hasDefaultConstructor() const; + +private: + AddedFunctionList m_addedFunctions; + FunctionModificationList m_functionMods; + FieldModificationList m_fieldMods; + QString m_package; + QString m_defaultSuperclass; + QString m_qualifiedCppName; + QString m_targetLangName; + + uint m_qobject : 1; + uint m_polymorphicBase : 1; + uint m_genericClass : 1; + + QString m_polymorphicIdValue; + QString m_heldTypeValue; + QString m_lookupName; + QString m_targetType; + TypeFlags m_typeFlags; + CopyableFlag m_copyableFlag = Unknown; + QString m_hashFunction; + + const ComplexTypeEntry* m_baseContainerType = nullptr; +}; + +class ContainerTypeEntry : public ComplexTypeEntry +{ + Q_GADGET +public: + enum Type { + NoContainer, + ListContainer, + StringListContainer, + LinkedListContainer, + VectorContainer, + StackContainer, + QueueContainer, + SetContainer, + MapContainer, + MultiMapContainer, + HashContainer, + MultiHashContainer, + PairContainer, + }; + Q_ENUM(Type) + + explicit ContainerTypeEntry(const QString &name, Type type, const QVersionNumber &vr); + + Type type() const + { + return m_type; + } + + QString typeName() const; + QString targetLangName() const override; + QString targetLangPackage() const override; + QString qualifiedCppName() const override; + + static Type containerTypeFromString(QString typeName) + { + static QHash m_stringToContainerType; + if (m_stringToContainerType.isEmpty()) { + m_stringToContainerType.insert(QLatin1String("list"), ListContainer); + m_stringToContainerType.insert(QLatin1String("string-list"), StringListContainer); + m_stringToContainerType.insert(QLatin1String("linked-list"), LinkedListContainer); + m_stringToContainerType.insert(QLatin1String("vector"), VectorContainer); + m_stringToContainerType.insert(QLatin1String("stack"), StackContainer); + m_stringToContainerType.insert(QLatin1String("queue"), QueueContainer); + m_stringToContainerType.insert(QLatin1String("set"), SetContainer); + m_stringToContainerType.insert(QLatin1String("map"), MapContainer); + m_stringToContainerType.insert(QLatin1String("multi-map"), MultiMapContainer); + m_stringToContainerType.insert(QLatin1String("hash"), HashContainer); + m_stringToContainerType.insert(QLatin1String("multi-hash"), MultiHashContainer); + m_stringToContainerType.insert(QLatin1String("pair"), PairContainer); + } + return m_stringToContainerType.value(typeName, NoContainer); + } + +private: + Type m_type; +}; + +class SmartPointerTypeEntry : public ComplexTypeEntry +{ +public: + explicit SmartPointerTypeEntry(const QString &name, + const QString &getterName, + const QString &smartPointerType, + const QString &refCountMethodName, + const QVersionNumber &vr); + + QString getter() const + { + return m_getterName; + } + + QString refCountMethodName() const + { + return m_refCountMethodName; + } + +private: + QString m_getterName; + QString m_smartPointerType; + QString m_refCountMethodName; +}; + +class NamespaceTypeEntry : public ComplexTypeEntry +{ +public: + explicit NamespaceTypeEntry(const QString &name, const QVersionNumber &vr); +}; + + +class ValueTypeEntry : public ComplexTypeEntry +{ +public: + explicit ValueTypeEntry(const QString &name, const QVersionNumber &vr); + + bool isValue() const override; + + bool isNativeIdBased() const override; + +protected: + explicit ValueTypeEntry(const QString &name, Type t, const QVersionNumber &vr); +}; + + +class StringTypeEntry : public ValueTypeEntry +{ +public: + explicit StringTypeEntry(const QString &name, const QVersionNumber &vr); + + QString targetLangApiName() const override; + QString targetLangName() const override; + QString targetLangPackage() const override; + + bool isNativeIdBased() const override; +}; + +class CharTypeEntry : public ValueTypeEntry +{ +public: + explicit CharTypeEntry(const QString &name, const QVersionNumber &vr); + + QString targetLangApiName() const override; + QString targetLangName() const override; + QString targetLangPackage() const override; + + bool isNativeIdBased() const override; +}; + +class VariantTypeEntry: public ValueTypeEntry +{ +public: + explicit VariantTypeEntry(const QString &name, const QVersionNumber &vr); + + QString targetLangApiName() const override; + QString targetLangName() const override; + QString targetLangPackage() const override; + + bool isNativeIdBased() const override; +}; + + +class InterfaceTypeEntry : public ComplexTypeEntry +{ +public: + explicit InterfaceTypeEntry(const QString &name, const QVersionNumber &vr); + + static QString interfaceName(const QString &name) + { + return name + QLatin1String("Interface"); + } + + ObjectTypeEntry *origin() const + { + return m_origin; + } + void setOrigin(ObjectTypeEntry *origin) + { + m_origin = origin; + } + + bool isNativeIdBased() const override; + QString qualifiedCppName() const override; + +private: + ObjectTypeEntry *m_origin; +}; + + +class FunctionTypeEntry : public TypeEntry +{ +public: + explicit FunctionTypeEntry(const QString& name, const QString& signature, + const QVersionNumber &vr); + void addSignature(const QString& signature) + { + m_signatures << signature; + } + + QStringList signatures() const + { + return m_signatures; + } + + bool hasSignature(const QString& signature) const + { + return m_signatures.contains(signature); + } +private: + QStringList m_signatures; +}; + +class ObjectTypeEntry : public ComplexTypeEntry +{ +public: + explicit ObjectTypeEntry(const QString &name, const QVersionNumber &vr); + + InterfaceTypeEntry *designatedInterface() const override; + void setDesignatedInterface(InterfaceTypeEntry *entry) + { + m_interface = entry; + } + + bool isNativeIdBased() const override; + +private: + InterfaceTypeEntry *m_interface = nullptr; +}; + +struct TypeRejection +{ + enum MatchType + { + ExcludeClass, // Match className only + Function, // Match className and function name + Field, // Match className and field name + Enum, // Match className and enum name + ArgumentType, // Match className and argument type + ReturnType // Match className and return type + }; + + QRegularExpression className; + QRegularExpression pattern; + MatchType matchType; +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const TypeRejection &r); +#endif + +QString fixCppTypeName(const QString &name); + +class CustomConversion +{ +public: + CustomConversion(TypeEntry* ownerType); + ~CustomConversion(); + + const TypeEntry* ownerType() const; + QString nativeToTargetConversion() const; + void setNativeToTargetConversion(const QString& nativeToTargetConversion); + + class TargetToNativeConversion + { + public: + TargetToNativeConversion(const QString& sourceTypeName, + const QString& sourceTypeCheck, + const QString& conversion = QString()); + ~TargetToNativeConversion(); + + const TypeEntry* sourceType() const; + void setSourceType(const TypeEntry* sourceType); + bool isCustomType() const; + QString sourceTypeName() const; + QString sourceTypeCheck() const; + QString conversion() const; + void setConversion(const QString& conversion); + private: + struct TargetToNativeConversionPrivate; + TargetToNativeConversionPrivate* m_d; + }; + + /** + * Returns true if the target to C++ custom conversions should + * replace the original existing ones, and false if the custom + * conversions should be added to the original. + */ + bool replaceOriginalTargetToNativeConversions() const; + void setReplaceOriginalTargetToNativeConversions(bool replaceOriginalTargetToNativeConversions); + + typedef QVector TargetToNativeConversions; + bool hasTargetToNativeConversions() const; + TargetToNativeConversions& targetToNativeConversions(); + const TargetToNativeConversions& targetToNativeConversions() const; + void addTargetToNativeConversion(const QString& sourceTypeName, + const QString& sourceTypeCheck, + const QString& conversion = QString()); +private: + struct CustomConversionPrivate; + CustomConversionPrivate* m_d; +}; + +#endif // TYPESYSTEM_H diff --git a/sources/shiboken2/ApiExtractor/typesystem_enums.h b/sources/shiboken2/ApiExtractor/typesystem_enums.h new file mode 100644 index 0000000..6bfc943 --- /dev/null +++ b/sources/shiboken2/ApiExtractor/typesystem_enums.h @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TYPESYSTEM_ENUMS_H +#define TYPESYSTEM_ENUMS_H + +namespace TypeSystem +{ +enum Language { + NoLanguage = 0x0000, + TargetLangCode = 0x0001, + NativeCode = 0x0002, + ShellCode = 0x0004, + ShellDeclaration = 0x0008, + PackageInitializer = 0x0010, + DestructorFunction = 0x0020, + Constructors = 0x0040, + Interface = 0x0080, + + // masks + All = TargetLangCode + | NativeCode + | ShellCode + | ShellDeclaration + | PackageInitializer + | Constructors + | Interface + | DestructorFunction, + + TargetLangAndNativeCode = TargetLangCode | NativeCode +}; + +enum Ownership { + InvalidOwnership, + DefaultOwnership, + TargetLangOwnership, + CppOwnership +}; + +enum CodeSnipPosition { + CodeSnipPositionBeginning, + CodeSnipPositionEnd, + CodeSnipPositionAfterThis, + // QtScript + CodeSnipPositionDeclaration, + CodeSnipPositionPrototypeInitialization, + CodeSnipPositionConstructorInitialization, + CodeSnipPositionConstructor, + CodeSnipPositionAny +}; + +enum DocModificationMode { + DocModificationAppend, + DocModificationPrepend, + DocModificationReplace, + DocModificationXPathReplace +}; + +} // namespace TypeSystem + +#endif // TYPESYSTEM_ENUMS_H diff --git a/sources/shiboken2/ApiExtractor/typesystem_p.h b/sources/shiboken2/ApiExtractor/typesystem_p.h new file mode 100644 index 0000000..882cf3f --- /dev/null +++ b/sources/shiboken2/ApiExtractor/typesystem_p.h @@ -0,0 +1,178 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef TYPESYSTEM_P_H +#define TYPESYSTEM_P_H + +#include +#include "typesystem.h" + +QT_FORWARD_DECLARE_CLASS(QXmlStreamAttributes) +QT_FORWARD_DECLARE_CLASS(QXmlStreamReader) + +class TypeDatabase; +class StackElement +{ + public: + enum ElementType { + None = 0x0, + + // Type tags (0x1, ... , 0xff) + ObjectTypeEntry = 0x1, + ValueTypeEntry = 0x2, + InterfaceTypeEntry = 0x3, + NamespaceTypeEntry = 0x4, + ComplexTypeEntryMask = 0x7, + + // Non-complex type tags (0x8, 0x9, ... , 0xf) + PrimitiveTypeEntry = 0x8, + EnumTypeEntry = 0x9, + ContainerTypeEntry = 0xa, + FunctionTypeEntry = 0xb, + CustomTypeEntry = 0xc, + SmartPointerTypeEntry = 0xd, + TypeEntryMask = 0xf, + + // Documentation tags + InjectDocumentation = 0x10, + ModifyDocumentation = 0x20, + DocumentationMask = 0xf0, + + // Simple tags (0x100, 0x200, ... , 0xf00) + ExtraIncludes = 0x0100, + Include = 0x0200, + ModifyFunction = 0x0300, + ModifyField = 0x0400, + Root = 0x0500, + CustomMetaConstructor = 0x0600, + CustomMetaDestructor = 0x0700, + ArgumentMap = 0x0800, + SuppressedWarning = 0x0900, + Rejection = 0x0a00, + LoadTypesystem = 0x0b00, + RejectEnumValue = 0x0c00, + Template = 0x0d00, + TemplateInstanceEnum = 0x0e00, + Replace = 0x0f00, + AddFunction = 0x1000, + NativeToTarget = 0x1100, + TargetToNative = 0x1200, + AddConversion = 0x1300, + SimpleMask = 0x3f00, + + // Code snip tags (0x1000, 0x2000, ... , 0xf000) + InjectCode = 0x4000, + InjectCodeInFunction = 0x8000, + CodeSnipMask = 0xc000, + + // Function modifier tags (0x010000, 0x020000, ... , 0xf00000) + Access = 0x010000, + Removal = 0x020000, + Rename = 0x040000, + ModifyArgument = 0x080000, + Thread = 0x100000, + FunctionModifiers = 0xff0000, + + // Argument modifier tags (0x01000000 ... 0xf0000000) + ConversionRule = 0x01000000, + ReplaceType = 0x02000000, + ReplaceDefaultExpression = 0x04000000, + RemoveArgument = 0x08000000, + DefineOwnership = 0x10000000, + RemoveDefaultExpression = 0x20000000, + NoNullPointers = 0x40000000, + ReferenceCount = 0x80000000, + ParentOwner = 0x90000000, + Array = 0xA0000000, + ArgumentModifiers = 0xff000000 + }; + + StackElement(StackElement *p) : entry(0), type(None), parent(p) { } + + TypeEntry* entry; + ElementType type; + StackElement *parent; + + union { + TemplateInstance* templateInstance; + TemplateEntry* templateEntry; + CustomFunction* customFunction; + } value; +}; + +struct StackElementContext +{ + CodeSnipList codeSnips; + AddedFunctionList addedFunctions; + FunctionModificationList functionMods; + FieldModificationList fieldMods; + DocModificationList docModifications; +}; + +class Handler +{ +public: + Handler(TypeDatabase* database, bool generate); + + bool parse(QXmlStreamReader &reader); + +private: + bool startElement(const QStringRef& localName, const QXmlStreamAttributes& atts); + bool handleSmartPointerEntry(StackElement *element, + QHash &attributes, + const QString &name, + const QVersionNumber &since); + bool endElement(const QStringRef& localName); + template // QString/QStringRef + bool characters(const String &ch); + void fetchAttributeValues(const QString &name, const QXmlStreamAttributes &atts, + QHash *acceptedAttributes); + + bool importFileElement(const QXmlStreamAttributes &atts); + void addFlags(const QString &name, QString flagName, + const QHash &attributes, + const QVersionNumber &since); + + TypeDatabase* m_database; + StackElement* m_current; + StackElement* m_currentDroppedEntry; + int m_currentDroppedEntryDepth; + int m_ignoreDepth; + QString m_defaultPackage; + QString m_defaultSuperclass; + QString m_error; + TypeEntry::CodeGeneration m_generate; + + EnumTypeEntry* m_currentEnum; + QStack m_contextStack; + + QHash tagNames; + QString m_currentSignature; + QString m_currentPath; +}; + +#endif diff --git a/sources/shiboken2/ApiExtractor/typesystem_typedefs.h b/sources/shiboken2/ApiExtractor/typesystem_typedefs.h new file mode 100644 index 0000000..dc6e5cb --- /dev/null +++ b/sources/shiboken2/ApiExtractor/typesystem_typedefs.h @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TYPESYSTEM_TYPEDEFS_H +#define TYPESYSTEM_TYPEDEFS_H + +#include +#include +#include + +class CodeSnip; +class DocModification; + +struct AddedFunction; +struct FieldModification; +struct FunctionModification; + +typedef QVector AddedFunctionList; +typedef QVector CodeSnipList; +typedef QVector DocModificationList; +typedef QVector FieldModificationList; +typedef QVector FunctionModificationList; + +#endif // TYPESYSTEM_TYPEDEFS_H diff --git a/sources/shiboken2/CMakeLists.txt b/sources/shiboken2/CMakeLists.txt new file mode 100644 index 0000000..1af84fc --- /dev/null +++ b/sources/shiboken2/CMakeLists.txt @@ -0,0 +1,467 @@ +Include(icecc.cmake) +project(shiboken2) +include(CheckIncludeFileCXX) + +cmake_minimum_required(VERSION 3.1) +cmake_policy(VERSION 3.1) + +set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules/ + ${CMAKE_MODULE_PATH}) + +find_package(Qt5 5.7 REQUIRED COMPONENTS Core Xml XmlPatterns) + +add_definitions(${Qt5Core_DEFINITIONS}) + +option(BUILD_TESTS "Build tests." TRUE) +option(USE_PYTHON_VERSION "Use specific python version to build shiboken2." "") + +if (USE_PYTHON_VERSION) + find_package(PythonInterp ${USE_PYTHON_VERSION} REQUIRED) + find_package(PythonLibs ${USE_PYTHON_VERSION} REQUIRED) +else() + find_package(PythonInterp 2.7) + find_package(PythonLibs 2.7) +endif() + +macro(get_python_arch) + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "if True: + import sys + print('64' if sys.maxsize > 2**31-1 else '32') + " + OUTPUT_VARIABLE PYTHON_ARCH + OUTPUT_STRIP_TRAILING_WHITESPACE) + message("PYTHON_ARCH: " ${PYTHON_ARCH}) +endmacro() + +if (NOT PYTHON_ARCH) + get_python_arch() +endif() + +macro(get_llvm_config) + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "if True: + import os + import sys + sys.path.append(os.path.realpath(os.path.join('${CMAKE_CURRENT_LIST_DIR}', '..', '..'))) + from build_scripts.utils import find_llvm_config + llvmConfig = find_llvm_config() + if llvmConfig: + print(llvmConfig) + " + OUTPUT_VARIABLE LLVM_CONFIG + OUTPUT_STRIP_TRAILING_WHITESPACE) + message("LLVM_CONFIG: " ${LLVM_CONFIG}) +endmacro() + +set(CLANG_DIR "") +set(CLANG_DIR_SOURCE "") + +set(clang_not_found_message "Unable to detect CLANG location by checking LLVM_INSTALL_DIR, \ + CLANG_INSTALL_DIR or running llvm-config.") + +if (DEFINED ENV{LLVM_INSTALL_DIR}) + set(CLANG_DIR $ENV{LLVM_INSTALL_DIR}) + string(REPLACE "_ARCH_" "${PYTHON_ARCH}" CLANG_DIR "${CLANG_DIR}") + set(CLANG_DIR_SOURCE "LLVM_INSTALL_DIR") +elseif (DEFINED ENV{CLANG_INSTALL_DIR}) + set(CLANG_DIR $ENV{CLANG_INSTALL_DIR}) + string(REPLACE "_ARCH_" "${PYTHON_ARCH}" CLANG_DIR "${CLANG_DIR}") + set(CLANG_DIR_SOURCE "CLANG_INSTALL_DIR") +else () + if (NOT LLVM_CONFIG) + get_llvm_config() + endif() + set(CLANG_DIR_SOURCE "${LLVM_CONFIG}") + if ("${CLANG_DIR_SOURCE}" STREQUAL "") + message(FATAL_ERROR "${clang_not_found_message}") + endif() + + EXEC_PROGRAM("${LLVM_CONFIG}" ARGS "--prefix" OUTPUT_VARIABLE CLANG_DIR) + if (NOT "${CLANG_DIR}" STREQUAL "") + EXEC_PROGRAM("${LLVM_CONFIG}" ARGS "--version" OUTPUT_VARIABLE CLANG_VERSION) + if (CLANG_VERSION VERSION_LESS 3.9) + message(FATAL_ERROR "libclang version 3.9 or higher is required (${LLVM_CONFIG} detected ${CLANG_VERSION} at ${CLANG_DIR}).") + endif() + endif() +endif() + +if ("${CLANG_DIR}" STREQUAL "") + message(FATAL_ERROR "${clang_not_found_message}") +elseif (NOT IS_DIRECTORY ${CLANG_DIR}) + message(FATAL_ERROR "${CLANG_DIR} detected by ${CLANG_DIR_SOURCE} does not exist.") +endif() + +# The non-development Debian / Ubuntu packages (e.g. libclang1-6.0) do not ship a +# libclang.so symlink, but only libclang-6.0.so.1 and libclang.so.1 (adjusted for version number). +# Thus searching for libclang would not succeed. +# The "libclang.so" symlink is shipped as part of the development package (libclang-6.0-dev) which +# we need anyway because of the headers. Thus we will search for libclang.so.1 also, and complain +# about the headers not being found in a check further down. This is more friendly to the user, +# so they don't scratch their head thinking that they have already installed the necessary package. +set(CLANG_LIB_NAMES clang libclang.so libclang.so.1) +if(MSVC) + set(CLANG_LIB_NAMES libclang) +endif() + +find_library(CLANG_LIBRARY NAMES ${CLANG_LIB_NAMES} HINTS ${CLANG_DIR}/lib) +if (NOT EXISTS ${CLANG_LIBRARY}) + string(REPLACE ";" ", " CLANG_LIB_NAMES_STRING "${CLANG_LIB_NAMES}") + message(FATAL_ERROR "Unable to find the Clang library in ${CLANG_DIR}.\ + Names tried: ${CLANG_LIB_NAMES_STRING}.") +endif() + +message(STATUS "CLANG: ${CLANG_DIR}, ${CLANG_LIBRARY} detected by ${CLANG_DIR_SOURCE}") + +set(CLANG_EXTRA_INCLUDES ${CLANG_DIR}/include) +set(CLANG_EXTRA_LIBRARIES ${CLANG_LIBRARY}) + +# Check if one of the required clang headers is found. Error out early at CMake time instead of +# compile time if not found. +# It can happen that a user uses a distro-provided libclang.so, but no development header package +# was installed (e.g. libclang-6.0-dev on Ubuntu). +set(CMAKE_REQUIRED_INCLUDES ${CLANG_EXTRA_INCLUDES}) +set(CLANG_HEADER_FILE_TO_CHECK "clang-c/Index.h") +check_include_file_cxx(${CLANG_HEADER_FILE_TO_CHECK} CLANG_INCLUDE_FOUND) +unset(CMAKE_REQUIRED_INCLUDES) +if (NOT CLANG_INCLUDE_FOUND) + # Need to unset so that when installing the package, CMake doesn't complain that the header + # still isn't found. + unset(CLANG_INCLUDE_FOUND CACHE) + message(FATAL_ERROR "Unable to find required Clang header file ${CLANG_HEADER_FILE_TO_CHECK} \ + in ${CLANG_DIR}/include. Perhaps you forgot to install the clang development header \ + package? (e.g. libclang-6.0-dev)") +endif() + +set(SHIBOKEN_VERSION_FILE_PATH "${CMAKE_SOURCE_DIR}/shiboken_version.py") +set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS + ${SHIBOKEN_VERSION_FILE_PATH} +) +execute_process( + COMMAND ${PYTHON_EXECUTABLE} "${SHIBOKEN_VERSION_FILE_PATH}" + OUTPUT_VARIABLE SHIBOKEN_VERSION_OUTPUT + ERROR_VARIABLE SHIBOKEN_VERSION_OUTPUT_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE) +if (NOT SHIBOKEN_VERSION_OUTPUT) + message(FATAL_ERROR "Could not identify shiboken version. \ + Error: ${SHIBOKEN_VERSION_OUTPUT_ERROR}") +endif() + +list(GET SHIBOKEN_VERSION_OUTPUT 0 shiboken_MAJOR_VERSION) +list(GET SHIBOKEN_VERSION_OUTPUT 1 shiboken_MINOR_VERSION) +list(GET SHIBOKEN_VERSION_OUTPUT 2 shiboken_MICRO_VERSION) +# a - alpha, b - beta, rc - rc +list(GET SHIBOKEN_VERSION_OUTPUT 3 shiboken_PRE_RELEASE_VERSION_TYPE) +# the number of the pre release (alpha1, beta3, rc7, etc.) +list(GET SHIBOKEN_VERSION_OUTPUT 4 shiboken_PRE_RELEASE_VERSION) + +set(shiboken2_VERSION "${shiboken_MAJOR_VERSION}.${shiboken_MINOR_VERSION}.${shiboken_MICRO_VERSION}") +set(shiboken2_library_so_version "${shiboken_MAJOR_VERSION}.${shiboken_MINOR_VERSION}") + +## For debugging the PYTHON* variables +message("PYTHONLIBS_FOUND: " ${PYTHONLIBS_FOUND}) +message("PYTHON_LIBRARIES: " ${PYTHON_LIBRARIES}) +message("PYTHON_INCLUDE_DIRS: " ${PYTHON_INCLUDE_DIRS}) +message("PYTHON_DEBUG_LIBRARIES: " ${PYTHON_DEBUG_LIBRARIES}) +message("PYTHONINTERP_FOUND: " ${PYTHONINTERP_FOUND}) +message("PYTHON_EXECUTABLE: " ${PYTHON_EXECUTABLE}) +message("PYTHON_VERSION: " ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.${PYTHON_VERSION_PATCH}) + +macro(get_python_extension_suffix) + # Result of imp.get_suffixes() depends on the platform, but generally looks something like: + # [('.cpython-34m-x86_64-linux-gnu.so', 'rb', 3), ('.cpython-34m.so', 'rb', 3), + # ('.abi3.so', 'rb', 3), ('.so', 'rb', 3), ('.py', 'r', 1), ('.pyc', 'rb', 2)] + # We pick the first most detailed one, strip of the file extension part. + + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "if True: + import imp, re + first_suffix = imp.get_suffixes()[0][0] + res = re.search(r'^(.+)\\.', first_suffix) + if res: + first_suffix = res.group(1) + else: + first_suffix = '' + print(first_suffix) + " + OUTPUT_VARIABLE PYTHON_EXTENSION_SUFFIX + OUTPUT_STRIP_TRAILING_WHITESPACE) + message("PYTHON_EXTENSION_SUFFIX: " ${PYTHON_EXTENSION_SUFFIX}) +endmacro() + + +if (NOT PYTHON_EXTENSION_SUFFIX) + get_python_extension_suffix() +endif() + +option(FORCE_LIMITED_API "Enable the limited API." "yes") +set(PYTHON_LIMITED_API 0) + +# On Windows, PYTHON_LIBRARIES can be a list. Example: +# optimized;C:/Python36/libs/python36.lib;debug;C:/Python36/libs/python36_d.lib +# On other platforms, this result is not used at all. +execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "if True: + for lib in '${PYTHON_LIBRARIES}'.split(';'): + if '/' in lib: + prefix, py = lib.rsplit('/', 1) + if py.startswith('python3'): + print(prefix + '/python3.lib') + break + " + OUTPUT_VARIABLE PYTHON_LIMITED_LIBRARIES + OUTPUT_STRIP_TRAILING_WHITESPACE) + +if(FORCE_LIMITED_API STREQUAL "yes") + if (${PYTHON_VERSION_MAJOR} EQUAL 3 AND ${PYTHON_VERSION_MINOR} GREATER 4) + # GREATER_EQUAL is available only from cmake 3.7 on. We mean python 3.5 . + add_definitions("-DPy_LIMITED_API=0x03050000") + set(PYTHON_LIMITED_API 1) + endif() + if(WIN32) + if (${PYTHON_VERSION_MAJOR} EQUAL 3 AND ${PYTHON_VERSION_MINOR} GREATER 4) + # PYSIDE-560: XXX maybe add an option to setup.py as override + set(SBK_PYTHON_LIBRARIES ${PYTHON_LIMITED_LIBRARIES}) + endif() + endif() +endif() + +if (PYTHON_LIMITED_API) + if (WIN32 AND NOT EXISTS "${PYTHON_LIMITED_LIBRARIES}") + message(FATAL_ERROR "The Limited API was enabled, but ${PYTHON_LIMITED_LIBRARIES} was not found!") + endif() + message(STATUS "******************************************************") + message(STATUS "** Limited API enabled ${PYTHON_LIMITED_LIBRARIES}") + message(STATUS "******************************************************") +endif() + +if (NOT PYTHON_CONFIG_SUFFIX) + if (PYTHON_VERSION_MAJOR EQUAL 2) + set(PYTHON_CONFIG_SUFFIX "-python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}") + if (PYTHON_EXTENSION_SUFFIX) + set(PYTHON_CONFIG_SUFFIX "${PYTHON_CONFIG_SUFFIX}${PYTHON_EXTENSION_SUFFIX}") + endif() + elseif (PYTHON_VERSION_MAJOR EQUAL 3) + if (PYTHON_LIMITED_API) + if(WIN32) + set(PYTHON_EXTENSION_SUFFIX "") + else() + set(PYTHON_EXTENSION_SUFFIX ".abi3") + endif() + endif() + set(PYTHON_CONFIG_SUFFIX "${PYTHON_EXTENSION_SUFFIX}") + endif() +endif() + +if (NOT PYTHON_SHARED_LIBRARY_SUFFIX) + set(PYTHON_SHARED_LIBRARY_SUFFIX "${PYTHON_CONFIG_SUFFIX}") + + # Append a "v" to disambiguate the python version and the shiboken version in the + # shared library file name. + if (APPLE AND PYTHON_VERSION_MAJOR EQUAL 2) + set(PYTHON_SHARED_LIBRARY_SUFFIX "${PYTHON_SHARED_LIBRARY_SUFFIX}v") + endif() +endif() + + +message(STATUS "PYTHON_EXTENSION_SUFFIX: ${PYTHON_EXTENSION_SUFFIX}") +message(STATUS "PYTHON_CONFIG_SUFFIX: ${PYTHON_CONFIG_SUFFIX}") +message(STATUS "PYTHON_SHARED_LIBRARY_SUFFIX: ${PYTHON_SHARED_LIBRARY_SUFFIX}") + + +if (NOT PYTHON_SITE_PACKAGES) + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "if True: + from distutils import sysconfig + from os.path import sep + print(sysconfig.get_python_lib(1, 0, prefix='${CMAKE_INSTALL_PREFIX}').replace(sep, '/')) + " + OUTPUT_VARIABLE PYTHON_SITE_PACKAGES + OUTPUT_STRIP_TRAILING_WHITESPACE) + if (NOT PYTHON_SITE_PACKAGES) + message(FATAL_ERROR "Could not detect Python module installation directory.") + elseif (APPLE) + message(STATUS "!!! The generated bindings will be installed on ${PYTHON_SITE_PACKAGES}, is it right!?") + endif() +endif() + +if(MSVC) + # Qt5: this flag has changed from /Zc:wchar_t- in Qt4.X + set(CMAKE_CXX_FLAGS "/Zc:wchar_t /GR /EHsc /DWIN32 /D_WINDOWS /D_SCL_SECURE_NO_WARNINGS") +else() + if(CMAKE_HOST_UNIX AND NOT CYGWIN) + add_definitions(-fPIC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fvisibility=hidden -Wno-strict-aliasing") + endif() + set(CMAKE_CXX_FLAGS_DEBUG "-g") + option(ENABLE_GCC_OPTIMIZATION "Enable specific GCC flags to optimization library size and performance. Only available on Release Mode" 0) + if(ENABLE_GCC_OPTIMIZATION) + set(CMAKE_BUILD_TYPE Release) + set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -Os -Wl,-O1") + if(NOT CMAKE_HOST_APPLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--hash-style=gnu") + endif() + endif() +endif() + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D QT_NO_CAST_FROM_ASCII -D QT_NO_CAST_TO_ASCII") + +# Force usage of the C++11 standard, without a silent fallback +# to C++98 if the compiler does not support C++11. +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" ) +set(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is /lib${LIB_SUFFIX})" FORCE) + +if (WIN32) + set(PATH_SEP "\;") +else() + set(PATH_SEP ":") +endif() + +if(CMAKE_HOST_APPLE) + set(OSX_USE_LIBCPP "OFF" CACHE BOOL "Explicitly link the libc++ standard library (useful for osx deployment targets lower than 10.9.") + if(OSX_USE_LIBCPP) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + endif() +endif() + +# Build with Address sanitizer enabled if requested. This may break things, so use at your own risk. +if (SANITIZE_ADDRESS AND NOT MSVC) + # Currently this does not check that the clang / gcc version used supports Address sanitizer, + # so once again, use at your own risk. + add_compile_options("-fsanitize=address" "-g" "-fno-omit-frame-pointer") + # We need to add the sanitize address option to all linked executables / shared libraries + # so that proper sanitizer symbols are linked in. + # + # Note that when running tests, you may need to set an additional environment variable + # in set_tests_properties for shiboken2 / pyside tests, or exported in your shell. Address + # sanitizer will tell you what environment variable needs to be exported. For example: + # export DYLD_INSERT_LIBRARIES=/Applications/Xcode.app/Contents/Developer/Toolchains/ + # ./XcodeDefault.xctoolchain/usr/lib/clang/8.1.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib + set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_STANDARD_LIBRARIES} -fsanitize=address") +endif() + +# Detect if the python libs were compiled in debug mode +# On Linux distros there is no standard way to check that. +execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "if True: + is_py_debug = False + import sys + try: + sys_py_debug = sys.pydebug + if sys_py_debug: + is_py_debug = True + except: + pass + + try: + from distutils import sysconfig + config_py_debug = sysconfig.get_config_var('Py_DEBUG') + if config_py_debug: + is_py_debug = True + except: + pass + + print(bool(is_py_debug)) + " + OUTPUT_VARIABLE PYTHON_WITH_DEBUG + OUTPUT_STRIP_TRAILING_WHITESPACE) + +# Detect if python interpeter was compiled with COUNT_ALLOCS define +# Linux distros are inconsistent in setting the sysconfig.get_config_var('COUNT_ALLOCS') value +execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "if True: + count_allocs = False + import sys + try: + if sys.getcounts: + count_allocs = True + except: + pass + + print(bool(count_allocs)) + " + OUTPUT_VARIABLE PYTHON_WITH_COUNT_ALLOCS + OUTPUT_STRIP_TRAILING_WHITESPACE) + +set(SHIBOKEN_BUILD_TYPE "Release") + +# We do not want to link against the python shared / static library on Linux and macOS. +# The dynamic linker will pick up the python symbols at runtime automatically. +# On Windows we do need to link against the python.lib import library. +if (NOT SBK_PYTHON_LIBRARIES) + set(SBK_PYTHON_LIBRARIES "") +endif() + +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + if(NOT PYTHON_DEBUG_LIBRARIES) + message(WARNING "Python debug shared library not found; assuming python was built with shared library support disabled.") + endif() + + if(NOT PYTHON_WITH_DEBUG) + message(WARNING "Compiling shiboken2 with debug enabled, but the python executable was not compiled with debug support.") + else() + add_definitions("-DPy_DEBUG") + set(SBK_ADD_PY_DEBUG_DEFINITION "add_definitions(\"-DPy_DEBUG\")") + set(SBK_PKG_CONFIG_PY_DEBUG_DEFINITION " -DPy_DEBUG") + endif() + + if (PYTHON_WITH_COUNT_ALLOCS) + add_definitions("-DCOUNT_ALLOCS") + set(SBK_ADD_PY_DEBUG_DEFINITION "${SBK_ADD_PY_DEBUG_DEFINITION} \nadd_definitions(\"-DCOUNT_ALLOCS\")") + set(SBK_PKG_CONFIG_PY_DEBUG_DEFINITION "${SBK_PKG_CONFIG_PY_DEBUG_DEFINITION} -DCOUNT_ALLOCS") + endif() + + if(WIN32 AND NOT SBK_PYTHON_LIBRARIES) + set(SBK_PYTHON_LIBRARIES ${PYTHON_DEBUG_LIBRARIES}) + endif() + set(SHIBOKEN_BUILD_TYPE "Debug") +endif() + +if(CMAKE_BUILD_TYPE STREQUAL "Release") + add_definitions("-DNDEBUG") + if(WIN32 AND NOT SBK_PYTHON_LIBRARIES) + set(SBK_PYTHON_LIBRARIES ${PYTHON_LIBRARIES}) + endif() +endif() + + +if(APPLE) + set(SBK_PYTHON_LIBRARIES "-undefined dynamic_lookup") +endif() +if(CMAKE_VERSION VERSION_LESS 2.8) + set(SBK_PYTHON_INCLUDE_DIR ${PYTHON_INCLUDE_PATH}) +else() + set(SBK_PYTHON_INCLUDE_DIR ${PYTHON_INCLUDE_DIRS}) +endif() + +add_subdirectory(ApiExtractor) + +set(generator_plugin_DIR ${LIB_INSTALL_DIR}/generatorrunner${generator_SUFFIX}) + +# uninstall target +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) +add_custom_target(uninstall "${CMAKE_COMMAND}" + -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") + +add_subdirectory(libshiboken) +add_subdirectory(doc) + +# deps found, compile the generator. +if (Qt5Core_FOUND AND PYTHONINTERP_FOUND) + add_subdirectory(generator) + add_subdirectory(shibokenmodule) + + if (BUILD_TESTS) + enable_testing() + add_subdirectory(tests) + endif() +else() + message(WARNING "Some dependencies were not found, shiboken2 generator compilation disabled!") +endif() + +add_subdirectory(data) diff --git a/sources/shiboken2/COPYING b/sources/shiboken2/COPYING new file mode 100644 index 0000000..4ccd714 --- /dev/null +++ b/sources/shiboken2/COPYING @@ -0,0 +1,342 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +------------------------------------------------------------------------- diff --git a/sources/shiboken2/COPYING.libsample b/sources/shiboken2/COPYING.libsample new file mode 100644 index 0000000..9315102 --- /dev/null +++ b/sources/shiboken2/COPYING.libsample @@ -0,0 +1,501 @@ +GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + diff --git a/sources/shiboken2/COPYING.libshiboken b/sources/shiboken2/COPYING.libshiboken new file mode 100644 index 0000000..9315102 --- /dev/null +++ b/sources/shiboken2/COPYING.libshiboken @@ -0,0 +1,501 @@ +GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + diff --git a/sources/shiboken2/Doxyfile b/sources/shiboken2/Doxyfile new file mode 100644 index 0000000..9be56a0 --- /dev/null +++ b/sources/shiboken2/Doxyfile @@ -0,0 +1,311 @@ +# Doxyfile 1.5.7.1 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "Generator Runner" +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = doc +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = /tmp/src/generatorrunner/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +TYPEDEF_HIDES_STRUCT = NO +SYMBOL_CACHE_SIZE = 0 +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +SHOW_FILES = YES +SHOW_NAMESPACES = YES +FILE_VERSION_FILTER = +LAYOUT_FILE = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = /tmp/src/generatorrunner +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.vhd \ + *.vhdl \ + *.C \ + *.CC \ + *.C++ \ + *.II \ + *.I++ \ + *.H \ + *.HH \ + *.H++ \ + *.CS \ + *.PHP \ + *.PHP3 \ + *.M \ + *.MM \ + *.PY \ + *.F90 \ + *.F \ + *.VHD \ + *.VHDL +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = NO +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 3 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +HTML_DYNAMIC_SECTIONS = NO +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = NO +TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = org.doxygen.Project +QHP_VIRTUAL_FOLDER = doc +QHG_LOCATION = +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NONE +TREEVIEW_WIDTH = 250 +FORMULA_FONTSIZE = 10 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = ../libgenrunner/libgenrunner.tag=../libgenrunner +GENERATE_TAGFILE = generatorrunner.tag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +MSCGEN_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +DOT_FONTNAME = FreeSans +DOT_FONTSIZE = 10 +DOT_FONTPATH = +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = NO +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = NO +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = NO +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/sources/shiboken2/cmake_uninstall.cmake b/sources/shiboken2/cmake_uninstall.cmake new file mode 100644 index 0000000..df95fb9 --- /dev/null +++ b/sources/shiboken2/cmake_uninstall.cmake @@ -0,0 +1,21 @@ +IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") +ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + +FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +STRING(REGEX REPLACE "\n" ";" files "${files}") +FOREACH(file ${files}) + MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") + IF(EXISTS "$ENV{DESTDIR}${file}") + EXEC_PROGRAM( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + IF(NOT "${rm_retval}" STREQUAL 0) + MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") + ENDIF(NOT "${rm_retval}" STREQUAL 0) + ELSE(EXISTS "$ENV{DESTDIR}${file}") + MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") + ENDIF(EXISTS "$ENV{DESTDIR}${file}") +ENDFOREACH(file) diff --git a/sources/shiboken2/data/CMakeLists.txt b/sources/shiboken2/data/CMakeLists.txt new file mode 100644 index 0000000..d248ceb --- /dev/null +++ b/sources/shiboken2/data/CMakeLists.txt @@ -0,0 +1,28 @@ +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(LIBRARY_OUTPUT_SUFFIX ${CMAKE_DEBUG_POSTFIX}) +else() + set(LIBRARY_OUTPUT_SUFFIX ${CMAKE_RELEASE_POSTFIX}) +endif() + +add_custom_target(data) +add_dependencies(data shiboken2) +get_target_property(SHIBOKEN_GENERATOR shiboken2 OUTPUT_NAME) + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Shiboken2Config.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/Shiboken2Config.cmake" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Shiboken2Config-spec.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/Shiboken2Config${PYTHON_CONFIG_SUFFIX}.cmake" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Shiboken2ConfigVersion.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/Shiboken2ConfigVersion.cmake" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/shiboken2.pc.in" + "${CMAKE_CURRENT_BINARY_DIR}/shiboken2${shiboken2_SUFFIX}.pc" @ONLY) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Shiboken2Config.cmake" + DESTINATION "${LIB_INSTALL_DIR}/cmake/Shiboken2-${shiboken2_VERSION}") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Shiboken2Config${PYTHON_CONFIG_SUFFIX}.cmake" + DESTINATION "${LIB_INSTALL_DIR}/cmake/Shiboken2-${shiboken2_VERSION}") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Shiboken2ConfigVersion.cmake" + DESTINATION "${LIB_INSTALL_DIR}/cmake/Shiboken2-${shiboken2_VERSION}") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/shiboken2${shiboken2_SUFFIX}.pc" + DESTINATION "${LIB_INSTALL_DIR}/pkgconfig") + diff --git a/sources/shiboken2/data/GeneratorRunnerConfig.cmake.in b/sources/shiboken2/data/GeneratorRunnerConfig.cmake.in new file mode 100644 index 0000000..cf973e2 --- /dev/null +++ b/sources/shiboken2/data/GeneratorRunnerConfig.cmake.in @@ -0,0 +1,17 @@ +# GENERATORRUNNER_INCLUDE_DIR - Directories to include to use GENERATORRUNNER +# GENERATORRUNNER_LIBRARIES - Files to link against to use GENERATORRUNNER +# GENERATORRUNNER_PLUGIN_DIR - Where to find/put plugins for generator runner +# GENERATORRUNNER_BINARY - Executable name + +SET(GENERATORRUNNER_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include/generatorrunner@generator_SUFFIX@") +if(MSVC) + SET(GENERATORRUNNER_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@genrunner@generator_SUFFIX@.lib") +elseif(CYGWIN) + SET(GENERATORRUNNER_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_IMPORT_LIBRARY_PREFIX@genrunner@generator_SUFFIX@@CMAKE_IMPORT_LIBRARY_SUFFIX@") +elseif(WIN32) + SET(GENERATORRUNNER_LIBRARY "@CMAKE_INSTALL_PREFIX@/bin/@CMAKE_SHARED_LIBRARY_PREFIX@genrunner@generator_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@") +else() + SET(GENERATORRUNNER_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@genrunner@generator_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@") +endif() +SET(GENERATORRUNNER_PLUGIN_DIR "@generator_plugin_DIR@") +SET(GENERATORRUNNER_BINARY "@CMAKE_INSTALL_PREFIX@/bin/generatorrunner@generator_SUFFIX@") diff --git a/sources/shiboken2/data/GeneratorRunnerConfigVersion.cmake.in b/sources/shiboken2/data/GeneratorRunnerConfigVersion.cmake.in new file mode 100644 index 0000000..8eb5ba4 --- /dev/null +++ b/sources/shiboken2/data/GeneratorRunnerConfigVersion.cmake.in @@ -0,0 +1,10 @@ +set(PACKAGE_VERSION @generator_VERSION@) + +if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") +endif("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) diff --git a/sources/shiboken2/data/Shiboken2Config-spec.cmake.in b/sources/shiboken2/data/Shiboken2Config-spec.cmake.in new file mode 100644 index 0000000..576bed0 --- /dev/null +++ b/sources/shiboken2/data/Shiboken2Config-spec.cmake.in @@ -0,0 +1,32 @@ +# SHIBOKEN_INCLUDE_DIR - Directories to include to use SHIBOKEN +# SHIBOKEN_LIBRARY - Files to link against to use SHIBOKEN +# SHIBOKEN_BINARY - Executable name +# SHIBOKEN_BUILD_TYPE - Tells if Shiboken was compiled in Release or Debug mode. +# SHIBOKEN_PYTHON_INTERPRETER - Python interpreter (regular or debug) to be used with the bindings. +# SHIBOKEN_PYTHON_LIBRARIES - Python libraries (regular or debug) Shiboken is linked against. + +SET(SHIBOKEN_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include/shiboken2@shiboken2_SUFFIX@") +if(MSVC) + SET(SHIBOKEN_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@shiboken2@shiboken2_SUFFIX@@PYTHON_SHARED_LIBRARY_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@.lib") +elseif(CYGWIN) + SET(SHIBOKEN_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_IMPORT_LIBRARY_PREFIX@shiboken2@shiboken2_SUFFIX@@PYTHON_SHARED_LIBRARY_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@CMAKE_IMPORT_LIBRARY_SUFFIX@") +elseif(WIN32) + SET(SHIBOKEN_LIBRARY "@CMAKE_INSTALL_PREFIX@/bin/@CMAKE_SHARED_LIBRARY_PREFIX@shiboken2@shiboken2_SUFFIX@@PYTHON_SHARED_LIBRARY_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@") +else() + SET(SHIBOKEN_LIBRARY "@LIB_INSTALL_DIR@/@CMAKE_SHARED_LIBRARY_PREFIX@shiboken2@shiboken2_SUFFIX@@PYTHON_SHARED_LIBRARY_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@") +endif() +SET(SHIBOKEN_PYTHON_INCLUDE_DIR "@SBK_PYTHON_INCLUDE_DIR@") +SET(SHIBOKEN_PYTHON_INCLUDE_DIR "@SBK_PYTHON_INCLUDE_DIR@") +SET(SHIBOKEN_PYTHON_INTERPRETER "@PYTHON_EXECUTABLE@") +SET(SHIBOKEN_PYTHON_VERSION_MAJOR "@PYTHON_VERSION_MAJOR@") +SET(SHIBOKEN_PYTHON_VERSION_MINOR "@PYTHON_VERSION_MINOR@") +SET(SHIBOKEN_PYTHON_VERSION_PATCH "@PYTHON_VERSION_PATCH@") +SET(SHIBOKEN_PYTHON_LIBRARIES "@SBK_PYTHON_LIBRARIES@") +SET(SHIBOKEN_PYTHON_EXTENSION_SUFFIX "@PYTHON_EXTENSION_SUFFIX@") +SET(SHIBOKEN_PYTHON_SHARED_LIBRARY_SUFFIX "@PYTHON_SHARED_LIBRARY_SUFFIX@") +SET(SHIBOKEN_PYTHON_CONFIG_SUFFIX "@PYTHON_CONFIG_SUFFIX@") +SET(SHIBOKEN_SO_VERSION "@shiboken2_library_so_version@") +message(STATUS "libshiboken built for @SHIBOKEN_BUILD_TYPE@") +@SBK_ADD_PY_DEBUG_DEFINITION@ + +set(SHIBOKEN_BINARY "@CMAKE_INSTALL_PREFIX@/bin/@SHIBOKEN_GENERATOR@") diff --git a/sources/shiboken2/data/Shiboken2Config.cmake.in b/sources/shiboken2/data/Shiboken2Config.cmake.in new file mode 100644 index 0000000..7891c5a --- /dev/null +++ b/sources/shiboken2/data/Shiboken2Config.cmake.in @@ -0,0 +1,5 @@ +if (NOT PYTHON_CONFIG_SUFFIX) + message(STATUS "Shiboken2Config: Using default python: @PYTHON_CONFIG_SUFFIX@") + SET(PYTHON_CONFIG_SUFFIX @PYTHON_CONFIG_SUFFIX@) +endif() +include("@LIB_INSTALL_DIR@/cmake/Shiboken2-@shiboken2_VERSION@/Shiboken2Config${PYTHON_CONFIG_SUFFIX}.cmake") diff --git a/sources/shiboken2/data/Shiboken2ConfigVersion.cmake.in b/sources/shiboken2/data/Shiboken2ConfigVersion.cmake.in new file mode 100644 index 0000000..9460099 --- /dev/null +++ b/sources/shiboken2/data/Shiboken2ConfigVersion.cmake.in @@ -0,0 +1,10 @@ +set(PACKAGE_VERSION @shiboken2_VERSION@) + +if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") +endif("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) diff --git a/sources/shiboken2/data/docgenerator.1 b/sources/shiboken2/data/docgenerator.1 new file mode 100644 index 0000000..045b55a --- /dev/null +++ b/sources/shiboken2/data/docgenerator.1 @@ -0,0 +1,76 @@ +.TH GENERATORRUNNER 1 "SEPTEMBER 2009" Linux "User Manuals" +.SH NAME +generatorrunner - plugin-based binding source code generator +.SH SYNOPSIS +.B generatorrunner \-\-generator-set= [options] header-file typesystem-file +.SH DESCRIPTION +.B generatorrunner +is a utility that uses the information taken from APIExtractor +related to the provided C++ headers and typesystem files and execute +generators using this information. Generators are plugins and you need +to specify one using the \-\-generator-set parameter. At the moment there +are two generators available: + +.B qtdoc +\- Generates Sphinx-based documentation for C++ libraries documented using +.B qdoc3 +documentation syntax, using the XML files created by the documentation tool +.B (qdoc3). +Can be called supplying +.B \-\-generator-set=qtdoc +to +.B generatorrunner +or by calling the convenience executable +.B docgenerator. + +Other plugins can be used with +.B generatorrunner, +provided that they follow the generator front-end specifications, +and can be written to generate code or documentation for any target +languague you desire. For more information about the generator front-end +architecture and current limitations, refer to http://www.pyside.org/home-binding. + +.SH OPTIONS +.SS "General options" +.IP \-\-api-version= +Specify the supported api version used to generate the bindings. +.IP \-\-debug-level=[sparse|medium|full] +The amount of messages displayed. +.IP \-\-documentation-only +Only generates the documentation. +.IP \-\-drop-type-entries="[;TypeEntry1;...]" +Semicolon separated list of type system entries (classes, namespaces, global functions and enums) to be dropped from generation. +.IP \-\-help \fR,\fP \-h \fR,\fP -? +Prints the usage message. +.IP \-\-project-file= +Text file containing a description of the binding project. Replaces and overrides command line arguments. +.IP \-\-include\-paths=\fI[:path:..]\fR +The directories where the generator will search for the +headers. Works like gcc's \-I flag. +.IP \-\-license\-file=\fI[licensefile]\fR +Template for copyright headers of generated files. +.IP \-\-no\-supress\-warnings +Show all warnings. +.IP \-\-output\-directory=\fI[dir]\fR +The directory where the generated files will be written. +.IP \-\-silent +Avoid printing any messages. +.IP \-\-typesytem\-paths=\fI[:path:..]\fR +The directories where the generator will search for the +external typesystems referred by the main one. +.IP \-\-version +Displays the current version. +Drops support for named args. +.SS "Specific to qtdoc plugin" +.IP \-\-documentation\-code\-snippets\-dir +Directory used to search code snippets used by the documentation +.IP \-\-documentation\-data\-dir +Directory with XML files generated by documentation tool (qdoc3 or Doxygen) +.IP \-\-documentation\-out\-dir +The directory where the generated documentation files will be written +.IP \-\-library\-source\-dir +Directory where library source code is located + +.SH AUTHORS +Lauro Moura , Bruno Araujo , Hugo Lima + diff --git a/sources/shiboken2/data/generatorrunner.1 b/sources/shiboken2/data/generatorrunner.1 new file mode 100644 index 0000000..045b55a --- /dev/null +++ b/sources/shiboken2/data/generatorrunner.1 @@ -0,0 +1,76 @@ +.TH GENERATORRUNNER 1 "SEPTEMBER 2009" Linux "User Manuals" +.SH NAME +generatorrunner - plugin-based binding source code generator +.SH SYNOPSIS +.B generatorrunner \-\-generator-set= [options] header-file typesystem-file +.SH DESCRIPTION +.B generatorrunner +is a utility that uses the information taken from APIExtractor +related to the provided C++ headers and typesystem files and execute +generators using this information. Generators are plugins and you need +to specify one using the \-\-generator-set parameter. At the moment there +are two generators available: + +.B qtdoc +\- Generates Sphinx-based documentation for C++ libraries documented using +.B qdoc3 +documentation syntax, using the XML files created by the documentation tool +.B (qdoc3). +Can be called supplying +.B \-\-generator-set=qtdoc +to +.B generatorrunner +or by calling the convenience executable +.B docgenerator. + +Other plugins can be used with +.B generatorrunner, +provided that they follow the generator front-end specifications, +and can be written to generate code or documentation for any target +languague you desire. For more information about the generator front-end +architecture and current limitations, refer to http://www.pyside.org/home-binding. + +.SH OPTIONS +.SS "General options" +.IP \-\-api-version= +Specify the supported api version used to generate the bindings. +.IP \-\-debug-level=[sparse|medium|full] +The amount of messages displayed. +.IP \-\-documentation-only +Only generates the documentation. +.IP \-\-drop-type-entries="[;TypeEntry1;...]" +Semicolon separated list of type system entries (classes, namespaces, global functions and enums) to be dropped from generation. +.IP \-\-help \fR,\fP \-h \fR,\fP -? +Prints the usage message. +.IP \-\-project-file= +Text file containing a description of the binding project. Replaces and overrides command line arguments. +.IP \-\-include\-paths=\fI[:path:..]\fR +The directories where the generator will search for the +headers. Works like gcc's \-I flag. +.IP \-\-license\-file=\fI[licensefile]\fR +Template for copyright headers of generated files. +.IP \-\-no\-supress\-warnings +Show all warnings. +.IP \-\-output\-directory=\fI[dir]\fR +The directory where the generated files will be written. +.IP \-\-silent +Avoid printing any messages. +.IP \-\-typesytem\-paths=\fI[:path:..]\fR +The directories where the generator will search for the +external typesystems referred by the main one. +.IP \-\-version +Displays the current version. +Drops support for named args. +.SS "Specific to qtdoc plugin" +.IP \-\-documentation\-code\-snippets\-dir +Directory used to search code snippets used by the documentation +.IP \-\-documentation\-data\-dir +Directory with XML files generated by documentation tool (qdoc3 or Doxygen) +.IP \-\-documentation\-out\-dir +The directory where the generated documentation files will be written +.IP \-\-library\-source\-dir +Directory where library source code is located + +.SH AUTHORS +Lauro Moura , Bruno Araujo , Hugo Lima + diff --git a/sources/shiboken2/data/generatorrunner.pc.in b/sources/shiboken2/data/generatorrunner.pc.in new file mode 100644 index 0000000..a566f43 --- /dev/null +++ b/sources/shiboken2/data/generatorrunner.pc.in @@ -0,0 +1,13 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@LIB_INSTALL_DIR@ +includedir=@CMAKE_INSTALL_PREFIX@/include + + +Name: generatorrunner@generator_SUFFIX@ +Description: Generator Runner loads and calls binding generator front-ends. +Requires: apiextractor +Version: @generatorrunner_VERSION@ +Libs: -L${libdir} -lgenrunner@generator_SUFFIX@ +Cflags: -I${includedir}@generator_SUFFIX@ + diff --git a/sources/shiboken2/data/shiboken2.pc.in b/sources/shiboken2/data/shiboken2.pc.in new file mode 100644 index 0000000..99a2629 --- /dev/null +++ b/sources/shiboken2/data/shiboken2.pc.in @@ -0,0 +1,13 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@LIB_INSTALL_DIR@ +includedir=@CMAKE_INSTALL_PREFIX@/include/shiboken2 +generator_location=@CMAKE_INSTALL_PREFIX@/bin/@SHIBOKEN_GENERATOR@ +python_interpreter=@PYTHON_EXECUTABLE@ +python_include_dir=@SBK_PYTHON_INCLUDE_DIR@ + +Name: shiboken2 +Description: Support library for Python bindings created with the Shiboken2 generator. +Version: @shiboken2_VERSION@ +Libs: @SBK_PYTHON_LIBRARIES@ -L${libdir} -lshiboken2@shiboken2_SUFFIX@@PYTHON_SHARED_LIBRARY_SUFFIX@@LIBRARY_OUTPUT_SUFFIX@ +Cflags: -I@SBK_PYTHON_INCLUDE_DIR@ -I${includedir}/@shiboken2_SUFFIX@@SBK_PKG_CONFIG_PY_DEBUG_DEFINITION@ diff --git a/sources/shiboken2/doc/CMakeLists.txt b/sources/shiboken2/doc/CMakeLists.txt new file mode 100644 index 0000000..bb5ad86 --- /dev/null +++ b/sources/shiboken2/doc/CMakeLists.txt @@ -0,0 +1,24 @@ +find_program(SPHINX sphinx-build DOC "Path to sphinx-build binary.") + +if (SPHINX) + message("-- sphinx-build - found") + configure_file(conf.py.in conf.py @ONLY) + add_custom_target(doc ${SPHINX} -b html -c . ${CMAKE_CURRENT_SOURCE_DIR} html ) + add_dependencies(doc doc_apiextractor) +else() + message("-- sphinx-build - not found! doc target disabled") + if (WIN32) + # if jom is used and we have no sphinx, then jom will crash. + # so for windows, we always create a doc target (until jom gets fixed...) + add_custom_target(doc echo. + COMMAND echo +++ This is a fake build, to make 'jom' happy. + COMMAND echo +++ The documentation was _not_ built! + COMMAND echo. + ) + endif() +endif() + +if (NOT WIN32) + file(GLOB manpages "${CMAKE_CURRENT_SOURCE_DIR}/*.1") + install(FILES ${manpages} DESTINATION share/man/man1) +endif() diff --git a/sources/shiboken2/doc/README.md b/sources/shiboken2/doc/README.md new file mode 100644 index 0000000..2575eaf --- /dev/null +++ b/sources/shiboken2/doc/README.md @@ -0,0 +1,12 @@ +# Shiboken Documentation + +The documentation was written and needs to be generated +with [python-sphinx](http://www.sphinx-doc.org/en/master/) + +### Images + +The SVG diagrams use the Qt color scheme. +The font also follows Qt styling, and it is called `Titillium`. +It can be download from: +* https://fonts.google.com/specimen/Titillium+Web +* https://www.fontsquirrel.com/fonts/Titillium diff --git a/sources/shiboken2/doc/_templates/index.html b/sources/shiboken2/doc/_templates/index.html new file mode 100644 index 0000000..00ac642 --- /dev/null +++ b/sources/shiboken2/doc/_templates/index.html @@ -0,0 +1,35 @@ +{% extends "layout.html" %} +{% set title = 'Overview' %} +{% block body %} +
+

{{ project }} {{ version }}

+ +

{{ project }} is a plugin (front-end) for Generator Runner. It generates bindings for C++ libraries using CPython source code.

+ +

Documentation

+ + + +
+ + + + + + + + + + +
+
+{% endblock %} diff --git a/sources/shiboken2/doc/_templates/layout.html b/sources/shiboken2/doc/_templates/layout.html new file mode 100644 index 0000000..94ff353 --- /dev/null +++ b/sources/shiboken2/doc/_templates/layout.html @@ -0,0 +1,29 @@ +{% extends "!layout.html" %} + +# Invert sidebars +{%- block sidebar1 %}{{ sidebar() }}{%- endblock %} +{%- block sidebar2 %}{%- endblock %} + +{%- block header %} +
+{%- endblock %} + +# No top relbar. +{%- block relbar1 %}{%- endblock %} + +# No bottom relbar. +{%- block relbar2 %}{%- endblock %} diff --git a/sources/shiboken2/doc/_themes/pysidedocs/searchbox.html b/sources/shiboken2/doc/_themes/pysidedocs/searchbox.html new file mode 100644 index 0000000..55a9721 --- /dev/null +++ b/sources/shiboken2/doc/_themes/pysidedocs/searchbox.html @@ -0,0 +1,12 @@ +{%- if pagename != "search" %} + + +{%- endif %} diff --git a/sources/shiboken2/doc/_themes/pysidedocs/static/bg_header.png b/sources/shiboken2/doc/_themes/pysidedocs/static/bg_header.png new file mode 100644 index 0000000000000000000000000000000000000000..843e7e2c5a85f4ced9bc4d4f90dab4a6d82aa3f3 GIT binary patch literal 36012 zcmV)hK%>8jP)$!V}50Lk2Rp1-SuQb=f+680e=0IJ}?0wj{1mSXSg>jeZMtOfrP z@5TTmJm1s%_t*bp5IMLe5H05#(Se0W)}l8x(Me zkfXkFl8|G+@y@R`0sf8xE(ZWdiv7xjqe71Q%Cu8LX21l>#93l%2uL{FXxr7qnm!DS!c_fdWtkT0jpN19M;n?0_@y z06ri9go2HL4dOsD;DIcV3wD75Py|ZBK~N3qKqF`dZQu;(0_VYHa1Go7cflxl4ESIg zyaWs29ax4S2n&%RIwTD#Lh6t%WDKz&8^{^*g8ZRSC<2OwxKIX^3+;xApfac$s)w4P zU!Zf)W#|Sp3_XMbXTScoIygM=Y52oKqg6e1N!1JZ`{AOpxfgpbT4A5a(+ z9i@cQLs_BRP=P2mDiyUIRg9`eokVq_`cd~#lc)vM7c?0yht@?~qTSIU=vZ_Xx&U2) zZbEmUucAlM)97~?42Fr(#F%5;Frk?!O;>vj~GwfNvtHECSE5_5IlxDH|!-lnTmO${otQI9^;s+)+GIe7ks!_&M=$@kJ_~YDD#+CR2;4Ez}#- zSsIq6L35^YX!*2bv@5hJIzm^aJJQ+o-SkHKRr)jo!_Z{7GZGj@jGq}pj0Fjrgo#9u z#1@Gfi3<{ZCc@NUx-*lQCCoF-G3G}}c}aW8Xvw{jZIUCBOH#5@c2dz&g;MQOqf#HG zm86}e6Q%b{cS%2yLCNUI_{n6+9Fe&yGcU`KwUTAa7RsKHeIy6V>B#xZ<;WeA8%1>8_cr*{V6AMb@&_O4Vx6y04AVW@#sCAJ)FB1M8UT#Oc)N+|h+~ z&2-~+59DJKMe4 zeZj-rW1C06C&_c2XSL@uFC8zQSC2RB?csgEdt$BnTJG8|AK>HebHL|`ucmLR?{9t> zKVQEZzvuo&{<;1G>*(t?t!r8LF2Et6B;awNR$xY8Ul1iIJg7NnDcC8vESMi+5V9@g zR;Wy9d}wzVHY_NtDQt1Q^ZJA9r^8Ld3&O`XXl~fD;l@UpjY%6XY@%$6+;lbq9T6PS z67eb0C$b@OG0HuvHfn+G$Uek=$+6>WL))Xa_w7*Kk-uYlr|Zs>y9m1yciql2%qz=#yE}MyPriKq&itt# zTz_aS5G&vnjPJ49Q}-k4$M_$I_O9Mrwf9RQr|@QxVNpfVr($;T&7X{Zs{CnXU(CLt z60?#crI=D~>DYeT{U^()W!Ys@2fPn-mMfJPmcKo?>EMkDlZv`SghLsJ_?2Fj-BoH; zrB$D*RszQ8#Ed!j$w{v9(&#x z)HraQb-cMrrm3ju^9k+={z?Cn{mtgh%`I{*C9QC4M(f%QLRVZDzdN*h_?*YNz8N^B-^?%sxzd`1(=iqvgjtC(sjxPsE>8Je7Oe@VoZ!?R+!- zg-NH$!Ds89J)UAuz5FBXk5AM2&&kg#W)x?dXN_mi&$-OqeX;(<^vjf&%ku?)Qva-d zrS^j&=VF8ST^QsH~)_a{HFJ`8*e{y4Lo z^$Gi_^0W5mo-dwXCRUPHRzxl!asiPGh+IJA0wNa>xq!$8L@pq50g(%cTtMUkA{P+3 z!2hueeBHYd1R`9HjRO#n1Ay0U0II41(1-zm68;ZXcLNq!gFD;+001F+R9JLjb#!QN zasU8$+Vdz)&sPXYEK1EQNmcO4%uNIUHxLFU-d5%3001BWNklW)#{eiGTPmSWupPZUxs0;C4CzlLJ{%Qk;0Ry&w{AV=W zatmr%LzSvTu~o>>OuiOD{1J&R7 zm;~qnG2b@4+fDL~miLN(iUW^N=vfutBNe3Zy9j@3Z`u3pKZU0I?On?K%J46x5C+CR zo}Nn>W9(hh2qEorN@;%$tzjP%MfR6U36&^m|5L(l_Al)3j1t<=!RT0Y5Mj?y(&6nf z?D3%OVd5wmrtP)u^OxS)I^4Hpec^$-A6k*(13hTDY0jKCdyw|6S_N_-wR^u2S*s(y zqNNdu5Iy_Kg}s{gQt+jr%WwZ}=xPgkoPg2v!%W}p))+15XUTUalKwH#df(`Yy~vXW zw?;@Jtk11y>AfG&>v7L6|Mp+oPl$%8$MvW+x*zAGy4)P!+AgcMZm?h4N5m_uPpsS% zOVy!3w|yKoapV6v9gNZfKfR{Yf&vi zq!2~+3xUS&8f}BRrf;`UgtaO`oFh&c9TMt*Ad=%| z^AGUq@8cp5TywxYzi|6f>=n2LTm`NGcDx!hbfx?-doGGEMjD1Y8HT=;M!CjXy*8h6P(B-3LxAH=;u_8r%B{q0L0SGX}otZ;M@S&|&qXInESx1*ZQq#vVb zaB&a2HFio|+$W0g>>3_lma&RDAn3M_9*b}O{*U(E(5>FO)mU7hUT>#gC3&16wK{WiUm|qQ_IQ=v6FU})!%=fs*OeYZbIQxw6 zc6&I*mwy#M`;W1{{=tD)U754MWe7W-904+d<2I#{(w~_d&mx|5NdCzT)6aDni|GpU zl@#Dh8Xn-F-0($H!oMB%?WS3Z!MOJ9_{ajX^f2MrPJy(AV|!x#2&0Bjc)!ASMYwF= z=+Cd<@l_RxjvaT~M~%g|{@};|ViZMvbJM(Y5-)!nuf2{<=8X3P4_dywgq0yO24(uL z#)N$q0VVJBMQu@Q)Gghhue$whO1Nwh*M79J(YHoTf=9P5OY_ImyQ@3M+SulcYnxKWWA`qSikeX^95amO z46LJwVDwUpi-vCO^Ap7Zj-?l8JQj;UoQWelzG>+34w3f)B7bfTKle}Z)nAmu-Ur0p zn#!CZb}TGAUgM|FVNznpj_?w6DmpiJ1w4C4P%MG~HA6e?ALIElV=-$P{_%F)B~?RU zzrf8gvIxhPEhs04_#wA+y|LWfzEhSR@7K7zi@h3mD#GPR;^|d9x)Mb~c5u*bA0-yw z{=@VqKg#ZIeff%h^KE?pFLCBH&DQ%2%Ac{IyoSLd;*7B}B7$tuS;Z_B$Bdzx;JC6o zD;V}yamortMh_s(Ar9!^WD16{i0QV!$FQUjdF?_Y&}YeCL;j~F%aVm>sl2j5tW5;@ zBIXkVJ&_YD94I@{R`dPwFu`th`QPHDe~%k1HS}1rNEnVI{--_dCdDYmtqPa-i78)a zc%9N@<5e6)2QbnOAE zB7Q9)-ymNIPv}`fadNgr zbC5d-XUIr)d?ySCK<+`2EzPc2Et*wFuTY2 z@o&0%YmC2ok`JX@&-w|DOJc`^gtX%*I#f8;rnT(YzB=(&q&@_M)=`ae_IP zGQDFXC?3#WFSh@*6X=A`M~fNI&{Nx=v5GUb`*QX2|A@CHbi9n&@sQzI^FQqg3ybMF zWJ=4Jg~XP|#T$69BsIAWj94=w$H7}7gEN3Ab3_+JGDU4lj0}xx1;ggo{vrOO{~RYy z{KW5C!*G0!;dt3E<&k#Wdi>S!1{V|7@w|Tpel|0kG)z?sb3ne(e&JLyW!7$Gj}N|I zVavjCM%uAbhX%)F?P+ye@boK>aHqtTeN1ZHu5f-Ixx$w>@Y%%#9UOPtM}oyWf0liC zN3R>bw_9D=#M#&I&P#apO#+m=EmKZ$d<6@01j>Yx5h)T5fFcKEktf1cMTkszsu`XV zq;8du`J-fNEE&M0Q!T*vGj=G2R(MUrzgp$>3Wt0SrZqp_{gu7bQec{xE1J5-Ih~bJ ze2-(wt%YNm4wLeH@!G$^D<^3-kTGwaCOj)iDWzBmypEBa^&`G z8(cSd^=-WO9178_A8+&Q$9)G?B<326?&daMkjy&{?GV!H8SI+rtU?B9*!^GnWRS|DI{kmO-}%4E_TbzU3oIWOPJEDvhKzB%a_1d>lE}WDDeo&> zt#D-5G!=5CPS_0I(W60uZ&V&yD+n5I|ptDXmUVatpi3I&yJnwtobo5k3V*pu~=-` z@p2Exm+V6i^K;l*c08&P38WFOkFmK=GY<>Imqu7h@RbeRGoN=%t=kS&quBe4kKi+B zzms*@T)j|#`#C)SbzI#fGu(Z^-HTXVN8a~Kb{1iyj8s?2039j6+-JYhq$ZavZn7WN zJ}hDdgB~EgL)m%99I!eBamun`PsJ2g1borQ6f&F{z>z^GC=<~RHm@jh>NWvUJWNxg zFaBZqoqt0WABquqju-SC!?kd%=4dGosXrxm4wH(O=Ip>zCnTO;zKu(F$TiU(nEg97 zIbyf3;>EPYy?icnEGHOEya4^nKaYR>&+wUtlkCT`S{OUHondSAYJlSujUwN%gJY*N zNI9$Z5CM^$6HGJg&X)BK7?X{eY4HxPEmF6wLqyyeW4ple07n+>NONc(MZ-qeO-LJm)l78Vo;QVW3#V6mz z98N4_I7HTCXIn}*Yj=xi4vQ_e%8YT79m*x+8sTP2Af7nSoFk!;pIpnx!-r%*_nHQR zAS*&et?_ndCr3E%GuTl_rGOFZ3EB(FmZ(Nj#QnIJMmJsPo#uiWQ?QDQH!ghnpJGgcWxArk&C|3tT*>Yrly^^6kWkUv4h!o`8 z-3FEfe(7J}SAG@8PV|1%`e}0aO$rOg<_?$SE%9q$D~P=UO8Vi`k4)nI&Nhe0Q_~y# zkmmmcVe!-PYZ*jj``d)eCr!H`yL_k{gx&l$J!!#eFoWt<%`stE=0mL z)`19DEeX4JZ`hqc_GETnID3Yh^9$)Ko1G%8UA0K;Wl+L6w{WMNChQl@jPQPBr+7y3 zY@Nziln5jPIT)s+wjW8(-03nWBPZC>gzXzI9#__nKfZg_F8YB&)>`NvzN6TuJXkk`++ zU3p04gDkvZ%N4lknV^hd%+S*ckr=V?gqoJ!YWl0W^4 z$N4-&kJzz04HFX!w8V2frW1~s&fAw}UzC0P%@M9_;reY#au|Dd4z6fn5uBA18XF|> zWqUvin$88`|o(reHOF?7dp%|U7`g83Tn zTcAS_D=_s`2*18MwHQzTN^8HWX~(1+BaA8>o5#vrB1C+MaBQk}V&S+?xhV3=zP?jn z(o#v@jRN-!NIPE6`yEnr+lRfW|Ng&9K30o~3&Z5G$C5AqgXn?JH+78nuHp0!uHM3A zAF3tl3a+0fg8_p6*brE>oX4XwBsnss!!56pRV*vJ?>yk;h^dr0t92H>2F?T-)QQfn zeoqT;F;Xd_*Jx{Yq)+Ii9$1WOIB(5@y&FE2v6QV!y^^42a{~*H|=kkd_ZsGtJbjS~SjU0UCAeU#S8wU&PCQ zhCADBf4N>*kWnmuSdT#(V_1t_&OKt=GhGLs3K&LwAN?bPO(NWO_2tfb3>oUDrI&g{ z7`G6{HgVv#Vf`mnC^T*tNTW7SrI7M)Y!!A_N=ng=TO`s9V=8#D?^+&{x7`xtQH|Ap zoySSH(BJJJu8(5!;^1RDP*mESJ3D&!b$s)W@a`M5zV{$-&wW^3p-eauA`(_1oP6Op zGUr;vv0tOJ07nkxil@VhyvZb7WQ?=UO~D0tq+_yZAmxlWJG{^VRvg_UDMM4;pmVBG zMVavCjmYV{gCyFk-ugfB(jWSIxjqZ9DSO={vtu^OGtrFR){VC5BFU(8?o} z3rH#iwkmAy;KC-Z-(k;O7y@V%;ZpL*5LJ)3UfjOwtr0E7-8;Z9|7ZC5U&8U@c^a!9 zmMZRyEITGI$T1cxQnZ|`WWu7H&%-;Y9S4hrd_PT|CA|fA_H-1SuKqbMqu_MSYx~5J z?_R=UKcCsc4}%{!Wm{AlJtggEcX_1u3hXzyu#Z~>9-6~fj;gt&TgvOU4^yKkzBl;z zpXH5P<5ynR-}@F$K1V#|eu;7-){dRmtzv-bEkX|1>&9_GBA6@c2BR_8e}`2*@9kywtuyQ!a$H=vikmmEQ+q@f z@MSMf!z)8fvA;Ml^_ahAO;NsP!xI9rqx zKElZabK5j&b6N{6%nXsG@P;;r=DxlhJm+xo1xw?T8rSxS_208-Cj`B}Bcb?1P%E0E zE^3WI996o#yl?g^g5z_06kGA=BA#832Zx%W(QThHjpBd!uTwvV{21^3e)7PB>9ao@ zJ@8CzXZNSB;N9D}eT_J8Vz{2z*`!+UJo8#4`}rwaAtH23b1H|kpkNW%;<6==tqz$L zaux!Ku;Auo;^`d1MRCpo8G^S2yKL5yN0gDE`80*Wp`zVfV5XUE-HsTrOf?uboyqdDs5a z9<66*44hK*gKy)^+jb1778XsG#ed%gmsAm)HMEYm?*|OYHWD4Ac1(lZrZX&Ypsa(B z<7>)sK(!FF_1e+JI0o=cU6Zc?gkxG^& zr*0;h$6uET7qNWd(uf?++OOHTAk-7Q^p|j|y-S*Rt9dT4&3*5{V4>yANFai6(S}tl z!f++DHWoA`movn3NfzPiA6L)+Ysxk5GY~tkn**}`9O8MHoRg0tw4C0iSd5-DU=6oYd~?XadfPgGrmlAu^2&B9!WxV7!>I;{%Ux z8?R~Xl(@1>Z^!-1=x2k&42UqMp45fCn1eJbn&#?0WzTPy6j)JeJhhC^t)`huIuh4y zAG}6Uy*l>^J@qSBcAx)CeCyxi+DV#5e|8>s--G#O%DAxLOD?h81F_PZIAtOt zjMjomoXd(zU|Y6Nn$J|B62M@SXy!E%q>;JaWM#={4~Ib0{Hnf?BJ31 z=vR#-IpN%OT)d1cSIKMa49;*g)|I-j-J&gNt~~)BSjN|W9l!i5xbLpHzYmW~Y?e63 zM?AvgNrpDR(UfQ(+>9!ACqxhZwCjEqx z`nkFEvB%RVzgpe<2zDi2ejDenque6ZB4#DG;milEecjhI-^a9`pv5tTU8Fgov&EOX zWQTGa%vUk#4iLghy&rAkrW(DBqE}?jS+J3p>*Rj_1-H~(}hsMk-CN; z1)Yq951&)QW3K(DYeiJE`#6fdilTy*ZR!T2+~f>LmT~kr)>diwu@tzdXyiy*US^aW zOx)7((~N|NTVuTPGR~dENR_K=?XVaB?H4%`LoJjRH|?NJa=hT&1`~V~@<82(5VJdj zBEby>!wf8F7a`_f&fLmAqB9gj+9PCqLAH23b1p06=rBK}DvngE>)Nz~ILYF+&@`B3 zisa*~6ZQ-efv# zajo&NMJx3T%G$;87~hS}rPoI(+2CTn5)G@#brTlu;QM{da&SWBm(4%u_J+5hPE|vFcN+2D5mI#IvB>VsjHOeG@lsXf-HTHljrR zZ631N3|eF1c+00B369=xf*c`)XWwFKRzv8OC5-gGG1s@$2;TrUgd>a`=Z-$%o9pc44vd>93XBRw|*GS@gm~Oqg_x%5aH_!Oy+0N@G zd09{OkqjXFRL>Ik=wwXn(Tz}bLZS+lgHKDS*}Ty(D3eM)%?@RSqHJ+{7ZmsO1dZiXp2MhT5U&lZBH9UOp-}*@~dY3v!UEx+Bt915ljQT(yJi`g} zN_xT9vt7Ys8UK&3ieO>g^^|ruLzg^+x;}XSxZ!10JA&Ti61e3)?p;Qt4)wFDbvbSd z>LCzi+eNWCrW%kNW6BS*xcsFxe0FKRi#qPM4^E@_jqImpV2NXS_g&fNzoH)fLf!On z@;u(Vh|wKzr)lmRV!X$|@?|Ge5J7H30w>43TY$D4Ip^#P``fbhrV9ffu!(7?5MvOg z6~MyBUAhO^`ME1lh*whhHZEao$* zT$WJe)8i0Kb*>svF}wFGW12Mag#nJN;m9#8t|a;BjF~jpxsEr!jkiuWZC*ZjU;Z~pp>|F&C`3zeOh-?B zX`*+z9pHyj`S5s$%XBrI$Ss{>EE$yTRZ$GilCG68(*$I5KzepMavsyQwQ#KI6}2=l z9M)$^%1B97wv|1O?p`zNj zl{8k9r*;8e)04dVN55<}&%zxyG@@yB|LE|@6GeL&S1+>ZSaKG#E6i&+7fo^a5lhC- zu&ga;Hqk;9Xl(qlsJ4YKG%pOv(B;$K)Fv(nt{>CLG677Ii6P)Q?j;nXzY*vh;GZplX_h zw4O_|4obTHC&l95{f+#mnD|>(v$~o;_Ehruua)^RynYVvzK7x_Vszdd?VHvSQ8u0^Jl*TtPat)Sh)ZV zpstMZICA}`ov`dQ2ZN?+qcodZ001BWNkl|>0`Cl?I7aA_4S<>l^)jC_!E>a83**4_sK?Ux5}@`JklC-{v0?r-)!B~t*)ZI+kw&pwts_A{kg#2L$xPhq^n%Bk_$ zZ<=p7jx545nhCKuT6>>BlyF6LM&z`vDMg{;vNvI71}|Rd6RvR_n8dXKuqhv-Xp+^z z@n^K$X*b_tI96V)$hd4z^GcmdATq%*ra1+|KCfknqk@Y#90iU%krbT%ZcjrdybkHG zOa%?s=PuJDlN1{(xa$N~H#o_@pm3tfW%oq1VkR}N-oPJ!9dDkmR#uB68$BhxSV8NF z{epz!5v72N#CLQxQ{ym#9wGg590aC{gfEBj5(S)q4DWn%l8={tM969Ka2(UJBz0~c zBah2GJydy3N}AY|ZJDU37bUfQ69k!#?M1s@V87LCJ&{LoH`ng=A5)|Fz2D3~RWCV; zgxyU-j(t%LHL&hArpK!p%2`sDA~&Hn#7PW7 zPn8Ep<2a#>SMXAnl2fjLAa+@ib|Kxv7(^N^v~R)buRI;nvg1h|&G$B*L_8umt~i33 z>Z&!vaZ55t9EF0k&@ZE9zL_QT6lKlX%2PkD@g`s2%1BO2v}akva7>w5cFU6cL9vhTe;?oezNwPQ#+sPxaf_!c6=~snp!R%FoW=pQciNxS z`>)wsB9sV)dcwO`ys+#bTuBu?$2@L{86vy86E0WTt%%Fdr;{W))DLh(an7dDwT0te zBrO~Z;lr0L99M0Iug6sn95rRF1^d}Irlfgp2W8%j603$gq7v$co5&!u# zXIaXbpVv9_S_b7rVrhX?i}hm|_UWldBN7BGWcPE@2QFO2Uw#9xU#hdY$;N7$*-@fr zk62lDY-(o5%KL(+X+f@<<3PJ;?kPxDKzSL%xYbR`_qwtW{wK5JAY+8CdLcf;vSa)A zw@b3MEanrX4)rq}QJh;_HBB$+l}|?}iC2L0yoAp0>EAu#h94i~hhxBwMcRw-_ z=KHj|`0BfO;V*D)uNcgYkE{%$dHW%1aD&DqJD#~P{^^ha5&A>B)jVk&AUjqZRAb{@ z$Hw_9g#T4|jUil99;lWUq-fi7+nQipV?G;4>M%dX(!z10?WCpc$4RVY(Kh6Rjz~PY zHX+`;-lO}wd3U$}2tf3EpJHD8{{BMZ*hc@0U+drh)cB^t`E$5>2E`5&NwT7O`PjH# z9-JRE<;YIH@a{2I2JBzusmxhQws({Tmx^ePZzCut_%Vb`T;?EETQqW*9eE1oPIKj5 z(jNu4d5$zPLCu+3X2&Yza|$uTri9rs^)S`+bdCaR$DKnEnpcwp$5bKpLa>hPQkbX0 zZq1VS;(&@ojvd9IPuzTLQLmxc%;h=iclGV>>pqG5J;pBAV{#dT9x zZ97bQ7Iw?FwqqoTCpC!`sVdg;TuxP?ZtwQLpBMjT*H`htBAdY4djF{}r4N6;*vatf z>)5=Ab`;{|TTXFv)pvZuRorPaO)&8GSk9y;*i94B&xK{L_I^u{#|16%G5!YZGlHu@ zsG=*L&o>@#u%$1bA`Mn>y_sxDJEo_u*)^ej(Ve4*&OPRYk&;v26gMj&Ynk%iXCFnc zeK#o?oNn(c%5d_5>oq03x6j@)NU^$(BPX!3ghXSsPvIDGk3@{CH}S0>;N|O7?p3^Z1FJ`{vW%FU`iYdAD#_sRlR?0d0h9%1EmD{zn=mvv{5DRV@HlN;t>i2s zIn;_+;ImT!`_is+l;xa-L=hckoSRg#(stZ57LKK8OWh{yX}Qyo(QOb_OL;E3?^L({ zF#h7-`>jED8UDsSjpT{r{m*?lzUPU;GOriEhdWm(H_|n=YmKjG6V8~-D|@amL@+wH z@J={ai>xh3#A=wUekNi??LTO7k1{Si`Ev+fTXwwAKk`_OtLD-+L$7Lk%?<7KA?}%*-H6^Geq8w(a5Qn#JCPie~ec6=u#SD^xG0mi5 zI0l6;-z@YnZWfYEba>qDKg8NyhsA%_o+Z)!_YXez6}k3cb?G|ZeiL^taiLnmSj8wRDVun4u>N?}UNM(1 zaArk9YBl+eC2_!};Yz$<Qr{n>V zSMpM!^d>+1nAkPvx&6+?SId&o7ZBA2)D(n*|q1NjK6OUReGzqR&x%~ON0TPHLK zl^rvmAExCV&JD=Qgz-LPzX(WhtPj|?opRwy^2Q9ud0Y&V3?Bs?+wo(NS|==; z-zsstXcrQ*kY?RisoVcPEdK35cOCxTz1NE$d1UbP&zQO6_34W^bqd?p2z(_c<2ZAh z%XDu;&7O7uZM^pCDn7JVGYDgnL}hstQ{DqD$rpts%bFoZwyjQA2Wy|5G#7FCB1s|y z$C}pJ^2oDe7rX5B1m|90f*f&zT2;{VMsWx*lEGihGOpl+4XwO6#F;CIrixhrrgLAY zU~P5@aE2{whE2Z1KIYf3utM!o1UG@*7kK>+e(+sfeG3cooE$x%KW|;J-?Td199YV8 zIYBNw)5*yWf4z1gLT0~b*DNOMfaTsrM-JbJqAYhx>Nqt>CV6_OpK2u|d)Ftdo9d{%x%(xh+bfUK-~ak=VL2lgfUN36$Gf_t)n(9-dTZ zarFwraY_z{h(p5KhWn5*J2o=7#{w60eN-(Rlg6C{z;bnQ#`mdnag;LlJwT_R?47)! zl-czeks%S(!@8WMzt8uuwt}@KIxAJv0rwibc@@w7DTP{WtYLYLPNoUY3ds$kf(b-= z!QAC%3KbfC1Qd2+3MVgNX7rfGE`_XQ-ZF0McZb4yu#kS9rUX<3l zGDh2}iG9ni7Z}y$Y99BZxcd@y``@imblZ=xEiU#x_w3-aUl{im%sXdr=3NR$cFjqh zg4~*5sAzqfrE^yJ7_-)yAP8w%V|P+gr4m^d^|IKaNz^M$HqaZjIzMG%xy@Y9JBbNoCC^3VU@+Ry}jzbWd^!07pNxl75_4 zn$lG*JFZ%Cxs97*Ese9NYg*cEf2)t8!{Q&q&xG~0{?lI>-1pRee-0;4;`Avrdu*+B zD|I25!X+IGISo6KHg z)CRF3k<>M@_fo7nU`$}18>PIISCDobO_%ZlWIKx7w$7Y2E6s3ynA)l7SkC&c`gR*W zp7X#1crb_rdMOqcu)K`H5OW&w9=^MWKX?J-H<7cTG3XO;w_ali7B}B#DfGpgIgWi{ zitrW+;q1B|y=h2scZacrqct;LH{0a;l*QgCR)_iV7Ll~?Ov8Z{cB+$_T?i!J2MW_~Wm4`}(rN1Ca4|6hF z^j2}Khr1`ZTHv`&y!6Ky-Nf7imX46ND}zqr0)i+shy-I-3GKQtxjcTqjOabb0i|__ z5b{hqRPDLwWS1G%f z+yA;oG3-X9pJcON{u3vLPkt%c`0V5c_m11T=4(Kl_04smM(bDb$am4sdTu&{mo{1l zUz>Bw*~6x3l%_J4!u~EhlFw~aJ8$5|E-%)xsW#CZ+S#(O5P5zoS)-6X9geE;0VXu9m6#TAlRiIyNZvx^#ZOFa~nsNr>bsHbEOOco`5BU?GR6-_{9kxwO1g= zsXKV(C7k^MssWC!VlZGMO6!VUyx76MV(Clmgpoc4**DJ%@^LW2(J0ggbB3C-V>_d8 zLhY43`{-&ZPpB=^;nmY~NnS(6o(Lsm^rV?Hw=vkhZx& z^6=xsN1m<+OU=pmD63xI_9<@KrNTG7Pwj3dNEzfO6IEl}YL;;|XZ$bi;D-!qYW0!1 zm1Co=?-LwTF$MR^OISNDYkG`xs=54lfmtM5lo0Aw6W>p7+MYG$|^u?R9WA3MIrfKx-Iwm4aB_YzuEv>tzf=4HN*^%40D#6O1bgq;^O?? z&F|sPn6idj)+iD-sMU2?PgB#zB2y)VW9d1w!WU8>2pIC*mQO|rmNK0F5RO1ga|lUq z4!c_)2P%VkSsuu>aI&?#PX^E)b3d4DE?C0}WHg*0g0~S>M`Ya|`|bn=evFXN#&WC#z-5 zUh9IvG4f6W5jy6X;5)WZTa`h7fEO`j2nllf36*##Z?y1_kv`Ny1PbhqT({n_XF|I_ zw}|H!1D(2%T6P>`ZxO3CmabEb(ds(xS*2K?Yq#*?i}=oWsdQ!a1m*{kqCQSs5yNzx zDe=_C20v;{nY_yvg77Fz?AUPA5Ie`vZeh@3aTNN14C1|Ba;Tqn>N`l8L8U#XUXwN`?@PBiUOeB8NFP?BMH-#BYwq)3jyE2gY;NQH8`!!?_~pt# zs69s$!jXgH&6|-)F)%J0N4mD7#--)4%X#h8FU`0wx#Gj? z7(QB41S7KVFs%&Nl+ZJiFGRaTdxF~q7PGxHKGY99RY*e>O&LYeAkFO%QR^lE zr9fK0Q#4lGF0oZs3voQ3Cf%2%+dE$Tp*xX#d3@jf!)LxCmQIuxujBMdjIME~&NdY0 zxvG%huZW~)#3Wj@h8uwRS+85zYbT9K)!GwTtS47rqx9Y=;&m&{eM>=E#^ADPBRo5H zo$lOfVVV&{lJA&1>=9TR@4@gDcheN+C^QHaejRUSt}wx9EWCE?dH`zSOZZ&3J;DCv zm=AJm05OLnJLug+lS1~eoKS9kZ=S}dE2r?C{|~3nVz^cv-G~*Hc)La=(}lax8pK=k z%z=1hQYw7?jNuAF5xWcKR`gQ#eOox*FR?_X<3n8|QIb;Si@Hc;l*gIYZKIo5iI(Ab zyPPbf(OeRDUzUy+cf9z+Cr45YhuK4q3?BPp6X(sDOE`B5%?>HZt~i*$xABez%^f`e zAJN%30|vK4WrG*d<+g0)AYXqX5qBn6-bNvaY)Wn;Jxn|t3+@jhR1hnSr@gL^vjy&= zAnqK62uk-;N?(EJN|se9!1LZR>BIG%3_WeZ=YlLGW3f*};zu}RGG%o#iQei{uaMRDQReah(V8XINy2)uYC*G_v^t*v$kXjvVu?Vcwg$jYvnp?6%`VN;7!NW z$*H(_!3I zNPpUS@q9NT9n!d`Y`DD{K#XX*{rUeM&-Ib8|vI_;n+fRHD>ruecS}QcZvVHY@j4zL8D;S9Qjfd z8M=Y^d8}|4e`VGkd!eoPG=2*NOa6M1AYKX*8@?kZ&SXWVGxeV7@6r zzNDxob+Xjo_-tLAZ8tBXW)|FX*zqvtYU75pJtMLMyLQpO0~6m)GP+$(=mE|b?Cry1 z)*i`(GGwr=0?fW4XOR@sq)lMfuiBwD^?+b6;XrEQeb-t^9fdNk-x1SP#}FS zk>}jGwNH}8qQI@o`15b!^m|n!_UAUTLDrL!^$%yA6H_64)}z$-0AcNzj3-7*>J$=# zpq$nN(}?z>rIvIG#bTZc86W0bAF0T`!=-NXD2bxD){Q;C#KCciNn5Puy)07QcjQxw z48Ql=9WOp~5t;gg$_MVB|J;}3#e2rruHoz()PK5eX!jZg)48_w?Wi3Xl7j3KF5vxc zbx~)lgN@Hj_TMwtub_=drf{{_IV+I5LXuJewBY+&S9Gm>(q^2{aV$HIoJjz2G{m2ogXjegP_hF(iY38ZtXmWnwF+2uG*Ts7RnUbTp#PIovh_~s$};a z`Ly!lPOSNe_I@vU^wEV!pKha->fN_+{WPVo)itWhSF*7Sio1t|!Vs?66S^fta>7Gf zwfT{SwfpwBU&qZ`Km?r6w@@6nsD@>pq5mMXZlNnBto`7j%I%d$E zUc?J@fgMi^pQ)}yllv`FA-K|nGz^JZe>xEy#~{g~F>EqRQ4FzOQi@xY`an*VlF==S z$oDqP2#&KH#XioT!pnbw%lo6bx$)wBFNq^@powW{mB;MYix#f#PtkP3G!(@t*hj`o zdAXt!7&R1F(U12A=}_QM(;*@$o3?4Sh2u05aiJ?ERU-7bH8&=@(e+xEcYzh3&Mf(b zZbbTMx5cI26Hm|G_wa6$;qBM3b(z-j%97i27$0O&vuZ(kZ$zApZc3#5N?q;Z)-s0UlAsU=QjA^S5Z416>{N4^70yj8nSg6oYZpS` z9QY!%1)23T6+R!%|1`MSqeHE4QQ#aY-5`D0^5U3UCh2yv{M&mK}!XN5RWp{ITEG(A9tT591* z@w7z~MPzVA_3Z%-46ApL*cTO(aBNQ|W`P@Ajcq}*m!LmD)I*%plU{faFMJa>ua4!y zet&MhpT=Zda~bqpj_oWJej(D|t|ENnv>sV6m9>uv8RVL+1mdY+asM9FA?W5X;{p6Wv7askhmT`IM6s}x?saQm= zd1X)gvNzNE5ikGAFrpid2YSWV5-Wx_9B|w_caRJ^O&!& zbc^n6l<%J%u`zY0s{jBX07*naRKP7*!lpVs3!OR1$I8NK20g)hui@+8z@?qNXilj|VST&At+MDv(Q=-4+_=*yy6vMgS^z6c`LkbLxc7;@tsQgjB=&C+s*Wov zh|sMMr}tf`TV}Nc$E|6!Nus6uWIS#zpTb1bf*1i*L%uP)Rh+J=qM-S5Ll75LN!kTB z$}0=PeG!_O%3!Dvp$yqYJ-CHF$9!GLkucM)8{XNgU3mz?VxaO~x2Y4({>cQ`8)B}- z$`0LWsd1^f-Y({pB1Qa~Vuln|4B9`7OnvizkT6Jm@ z!jZYdv~INOrHl79`i8l70TqLq=6a8eS!z>oFDMSIkgQH1@JJ4@C(}h+aX~gWTcSKR z<;koOvkrbfncjE@#k9{f;Pql18ih>b?R~lhA4CPlZ4a{_W7NZPiG>1D4%TDPa$FqQ znYklL%!x(z-1-?4`54h0bb{L#@aos`%A3`m+FhAX=7%}gLz`(cJmKS%olIT1$PE4k zp?1b_JZ^Dq&pyR?sn=r<++mjFDQ!e$Ay}$BPHBvZ-lsyN zSnNimkMowL(Pti6eDq6lxH7qX8JFIr8M?(XOOWf*Yq%~9-j#$H>LJ}k^S$MJtM(GE zT}2ZSmJy_Cn(R}VU&S4uIjUH}%LsyNKrDu32|=DNX}L@#%z0ZfU1+zCCqrlJmQ4}H zFZ8(uM(Oe>LXorx^&s9Jcfem^rdZ4)!G4BvfYk{GRp?G_ybro*eSmVz8g~-$fRV5v zBtbGyr*z>oUimYees?lTcGoxhgDhjoq75Eo>BcreO;SoiTZUuKA|)(NB=#FB$xGGV zLN*98`Jt`cQr8m8juU0sanev1LX*Xo9oH6)x9iDLk`0rtY3Wb#M5WPNmb>p0%D#_{2(OJCozv0wns{7~*^cpOHcx9<6 zny0^lWPy}fmC;U`K+F*q5h=p$gi7*6Mr(i#*UPz9dlnNTKl>*EgjNWZPr7iuqFdwn ztZ`+~W)|A%tNvI)Xq8{YbB4Kw(=#5pjVI30V&iUv9gV_{1U-6uWiX+VZF+DaFln)0 zVSj|{ySTNF-4;9h7+7ap4NlcJ%Ekg;UHIl+ES-K;N7aI3`e9)5NM>v{JL`03Ut{$+O&J~7*oH9Y+_ z-1jg>BfRq#Mt2BP$_C?tED(kXtZP1PZ&WSvH7qP+_f2wcIepe*P0Y56mUU+frY;+k zm~n()1tYYw7)_41lEj2OBjy;f#Ni!vOr^D+rC3D5->E{CiWHti8#Bwcms6S?7V}(% zh{aHg_*;E4;jQeEC~WT{Gd1~3f`2&s$1{i&69ZXIqdHt zUc}-G6<&K=hzV(LA(76BGcMP{4p&Oy&IC6mm`^cC4*jdh9kLq`9NVj1aKv58&}`v& z)Lqtr*^ z_FLGh32iM<)(y91il{9UdDJq7W9fT*U|Pf+k+;m=m=uJ7aYSGda~7~GgKo4hs&?td z)27ib#m7vo7b2w5A87nB>xvzg^;{p(I>v4vd4uIKRjJs+HVp?o$3CB)qBz~NaM%U4 z8O;ch$wH^m??Wx~)wqE-U&dd)h^+}0m#8nb>j>qMH=LWCwl(3ABaevAU!P!WjOCs$ zB0sz-D#LNZSEa``@PdoW?bvDI_y=|d+m?gYbVZmoyoZo?>m72rffs=Yjyaj3;G|<`<1|FbDneMlu*aN4Y^$iSFyXi&MGJ|B zrC}-;j7Uq79D_+V5B~F%vn=cldoqI*bBn-$T*EuparQg-_IGiu#>N_!h92~N^0M*c z!PK-zGXTclYh&ydSm_b#7DmOfjQcX2|l+>ZEKM3Z{O@t$Pl;28UwBiURBYiD0Dfd#w9PHu6}^$>AS zp`@ex<7kfpT5bDqJ+c z++8r+xV_0U-8&_kNN6Gr-K5we%bz=%Pl zy9rUBT6hvFLPu&3&r_Ghw6m!6cSeF}?@o$3!O8@E%?(QQtksBQY1?&gngz_*t255&IpghL)P5j`SxVj0wiq&P3BNRJG+CWIBt9cgYGVbVlWkkcvYJZlt zaX1@IJ_N0=+V^6>0ef}?jkywiuO>O$-mvUA>eAdgEbg|C+t$l)--CGKOITUPwR1Rk zhP2}-CvcqXV?3dMCX1L`M|A^t?l9&`(ljho8P~WpqGwsnamdLKu76*}NuT}5k8>$snY{+LDw>Y0W$3~+J1p+DkKJa! zz4HS+^cWufG9{m#dlMHgGONw#D?Q%BXa~^}<}Dmw!_F>E`30{OiIyO#)l`xfr3Aaw zJwze|)`!?)MUI8CqDQL87fwu<-~_y2s|=Q*>;F+F}h!>|XF zqv%sPxV(e&Kfr%@4rj+Wwo0Jv3dGx~5t*g!l&eejYh2kUn!I@EaIAQ`FkwdAi|B>e zJ>zn7$`2|?PO*bTm*&=CakqUOHw%|*D|qY~JoF@rZJc=nx35vfut-Tk-ra^AkP~@w zo5-?T_-ZHu8ClAW^(yiU`}E&pwnl12M8&9< zlc{>ajy-!aE>th&841U^QRU7`iZ0Eq!{ToHm~Kge<9FfNuVU#qu3fsA7i#x4>OwY+hM85sXbs`V)r)Q{0qGPE^e~yzL3pu%{ibmwvLeLc!b4_ zB9#w&aOK*Wg1fZzB*$1Y9NVAU6)oji%Dj?wANdZ8yY1t;5v}Xtp-1qt?(G&K}dUb&JSxC?s+6MQc3X87B*9??DzO_#Bw_s)m|?OnO)vBX7N;t!w&o$xPYh zU?^vpi!cR}bCg2JV_l?E+d-u`TkJJf2xNwz#}i(N65RgX0d1yX|BB?nt<`-i|u{e}z2yb=p1~oyPms*WfzJOxd zZ`AQ;%_vD?g;R1v17~Xe8Po0pD75j_B09*&K8-#+sbk8Di#T@r6wJ1;hm>mt4R<7I z`PcSTwQH6-J&y3sFu|eBPOq@s+|v1y)tEdbnkf@ZV(cfxzK3I+J&PBf$E__S%UE3Y zbsv_?$BJ%SMt@_B{Ss^akHAl6pRwWIE*6ec&arE_P>|rbqmB znN{iC3sQv|3Nb?j-`zubjGp>=Q{^j7T%r(V6|pzjNew>eSR7~t!tRSZDc!#`p=uS9 zBe*Lo{l=YV#8|A^V!=y`M*8Rs*Wx-(iJ{jGA+mjzxty?!B$u4*%!QyZ`)EwD$j?2G zn`5jV!O|Sjd5gldAQ=%&zBuxgxI6VX!)P<%i` zh?r?MHD?(+>zj)wX5B+F_-gIDI(ZN8R4;~)3Q{fxGxoNDmRn!9+8ZsV-sH&M4@#>T zHW(HpK9EJaX87h%P8$s+3TzA`W$%bMPz<0QlzLd_H zB^0Z!<(RByo}9Ys=MeJXEN(talP$^G=@MoZ6=YmN9ZS`Dg1|eTLj!7I`CfAXsoKL-UTNBzU!e>v*x(4IBcw z)j7_7D@yjUG19dNh1Ao+Vi!-$NFBNOc@w(ch2%^Vl6qp!9ky_VRzv}JG03qKXVKzlwGl(U!!=A@!C>1Tw_Nla0h_LxP2 zy%uFeYh{)ypMMMAdjZ$CQ7q%G4FbDSiOYMmTsC*;renbpd|A=09#^}RoRp*(mv2@? zmRB+w)w-?2;%@uIY*~(n9>kMhMsJ;3V@&o4b7SFiiX{gkPineTvANCFYq&PguH25I z-(21Egh4P4_$z(pj?lqLA$W;Tco#4wX0+b(fP-FU;{^@MS>{4MSNh@d<{M5--tAFf z+wv~5mRx$&v6Ne!c;?Q6iC{`Dm0t|>`iTn0Wcuv;^}|U?ueX;HI!7#GSb}W&7z@I+ zl8w^wEu8)V{`6&%0*k zDh{;2gX?{#XHH}nNzt;o*mc93_T2NmqJF~iaj2Zl_kZmYh2+5m#VMkes0li9Ts=nCuXyd zb@V76eGK&vaC#H13k>34Bq>em%YsA<3aOF4N0Cp6H$m`?2@UIl{ayzgX)OXTg>MMr z4RDN=E(Jm!sET$67p@rO06;4?!=))B4i{B#Wr$lW>~KTsgp~^8qk^bwYDCmnwCwSa zvxe5<03th^vy+dDn)WoNQazF~1l3U3r^A3wdu(tgq1C@$gZ4V!dmeARi%Y=O9@U22 zJ;34H7u-^(9V+Y%d#aRc$|ZR&Kj>yjFKspL;JCx$Zu$Bl3x2C4ucU^*CKy&m~GIqCI)1jn4rqhC__BGdH!{M%wKEP<&kHf>LB*aN95~V1I zSSqP|wB|xV*BcxBhuRhLx%`UYx^p&XcT5?my`z~4_tP5{+*Tta9bEAfS=Joqw4B&d zrVwst#J&dxYXufB;+2#5cQetQ{k#@%$)&5kfy_5}X4@}i44L4Nkh7#? zNN*f=O-psC&GUw3cxZlK+dX(<>q@14>Ty_+vtV2H(Dt!haO!+UcUm~Exf@d}sM|E5 z5C_X)nynE|%(!(z;}Ks9-#%(wa7jf>q*zMd+$77mm5HUC1~(H-Qo22CaJQwO7xAsP z@xoPHYpLL3eegc5{6pOY!!e0SHLW`Kd8DjCx9#h?Q_)hMh2zx@jyo*wwol#`Vd1lg zH*xtCk{b6#m>1Z$2nDJHsY)ic@&Di6mp{pI-`Bmqrsv$*8wUXpAVG=}WF54eSa#)) za8*({DwoQsxRU&u({`LnuRd<QY#3W^Z4$oI3QD-9O-`(+`hnVYJjShYFMj{uI9AH?t@iRlZiWVXbP2Py6*EaTp6 zKI(o^^;TnXy}j$dj8$wuiOKVLZ9+8MEO08r**3Z>xE-)%MmeRY*f3>-$f1&dlR3sS zPL>Pl7<8>=PJ-~N)iX9ZuJlUWw; zczU~NawMQ1B`OAKxV+|2Lxp*4;I-+~dNB=gu!6FwG|L56M(E#Te9u82FHZ5?MZA0w zL*QhOIT8DQueIAZNGfG9d&{6w^Zsu*Y;`>d5lIEm>_|I1gEtx#hcDjVg|mWgIb6 z*YK!(Q$@A6jMMaw8iEkVl_6;`F^x$}<2hv(!_9N8B3iA3{qaJU>cs(xd=NOyHD|ae zU8y00s@GrWx?(pXuF;uM$576wp_F>D{y-hAnz4F?q!<{E+{bK%YkKCD;TZ8fw1zmg zg2pz!F~$FV4X?k>Sk7h#Yn_Mo8&gT%JR>`{>6(cK8w1T|)VY_kZm<_HLa5GjtFgG= z-dlel=s$zzK5o29J6B6^oFCxCD$cLsM1j_Z@^fb>5*8xQ6RH-7l|?BPg3nAz(5z}~ z2x(p=VHQe&v{{@*>1yGuCE2TtZp%@jTnfkDQL3_4d#%yJ3ZcUW9TfdB8Vfc7DGUas z&bLhMA|`4FYM%dR1aZgV!=uZ87VlWv&QR?G`lnOiz*d z2MMw+rmL9Qm^yR9LzFj}?s4Wc&YZw&1N`@w@%$xBCnTrqy@$n)164)SnWuItbD69= z5hpi$3mnYR4Y6Ls@z2_Swf|6S6!rF(|KDz4>q(Ta;mR#K+oZ%Yfxh3zMud|go;iiE zjjIbJ6Zlic35}*iWIrZtG?+C{*=KJu;}qVq)LgP=X}d(*8j#$rq1jMPTNqMS?eFwY z6`))mWmZ_4oO@16wp4m309qZY?yjZCx6DN^)6Sui!g8*FO;vldZ*)XZjsjt^37~aXiq?_Z%FX(au1yUy>$O->V{yH`w>Ezjn~!7q z6mXrOt|67JCc)9L=GlV0IJNDO zBnsOykg`gdfYN+?+kpvAGDelaSuR^WS!qJV+45*x-^@fI#S)F1?3~n@5R!t}A*>Za z*bq-Hh#;pBk?RC})pRfwNPAET1YRpB^%bukX21f%lm|2tMe`kqwg#BaFT^3&c%Hz zZz!eG}^K zZEc$q?lE1S4I#Bjm}PWg-ih2fGj3Az^J zGNF|LFqTQB;_2qwCG-&D2`7o1i&Up`hTn z(6rqXS1k+*CpyA14%9B+RWY8nq|LVGi$#h((PTSj45mDkfn(2GhH?_bS^U+;|NmVX^sto)6LMBDg=x zAOHX$07*naRE&wdo=D|d10USNvu8O^zkI+sd$6DrnR@ZuwFQdhFk{10A+j}=Ssz=j zq70(2FgjQ+;*}KxwJtZW3MMYAMEd&yNZs~E4F=Bj4Q*d=kqy?-tOCD4whD?KGaVpw zx`%5ZqQ`mW5I@u&DM&MlBxQ)6j}kS*ZtCr_g@o!J5~*go43vy)jPjgXIY6R${ z$Zlch3ifB{pTxNhoN41^pRoS?41ahDpL_*(?&4IJk;=Z0cUhbf2#(E2X}-49C~ul^ ztZJ*Dv|-1G3#>+1sT<|}^s)G#)iv*vh494iMaz$%6c4_ej z3O8GL_B0XMOx`aKXhI0)^t~BSHjlHC8JkUoRWi*z;ghLIYbi^z3zc6&Fe+C=RZDHl z@CqTjGrEaBA4LlZ(+4e{SZ~Vlz*9SM`cs`WtS>@i zgViEhO-}Y_3)VxoVxHb2tEvZ8$-zZ7c!tU`5HsSlZbV3@d&$D@cmsxD>!ou z$6~AnIJ<&o7gvF=+{7ne!VA}UwkO)6wBEagV?%_^NZE~8IG(7vb>v~1GhNfnT2{lF z9oHH~y}hS4uY;{K7(9oa8E4{6g}4VPv(*ilPUfshGkC;S_66zQhn~a-&Jx9T4@im) za^(x86ATuZ$r{{JLk$Bpvy|d;npIwl(pk-{1cA~8Y?k+-vyB;Y9j0vR|Gj(1$%dq8t)wfyM;2|rU~De6)x8E zm-+4njweK-c9*M92I&k*w5>V}KTQ^_cKhHK?OdHT8W@rRW04IaCo>Ao^je7CMv-#S zJT7(_L?*J^sEVBEOa(c2l)0>&aJJ;v^_H&8$ad+ku+lJC9-TDNogtS0!QgMITztDQ zSO$vLTqx;SF1JFV>}6hIZs~*(E1_7+o$W7Wg$rNOu(=lM;1R*jYRXMt?Oe5wA{28_ zq%b$D$77l+N@DWs-W=nbxOg425+^p%?+~#g*@3qjIMs*0jyD24e-*#`3U+T(@@AJ4 zeb7(zTMKm+=H3QAx@rY76&wdj;M<+!U`DB=8##5T-XG;2{LXLG15&-clWpx;M3->& zGR6W90}I&*D?PS}n~ash9=oZ!uP*lnky{}?bP|8RZ?HuE0ca+&6GJb6l7fj!b|XaEXsP zZ=%)6z>#t1?(ptQJr@4D=29Zd*7adt&A9L{Q zX)W<5nA7MgW*HY4%}4kJX1Tl~Dg)V@Q#)EWhpn~apAIjsw|aXg8YDI^VE*U0He{8D zUB@dXT*oumG#b;o5Qc7T&6Z=#71p!T#8ap63um#}$Gri$80A{=%F&GGgha)72F_Yd zx(f{68JL^Mm26FKc~z~KS31VB63<|CR>{Go@2qm3oW+wEivax*Z54)`7P3{8HZG&A z;CL>S541>FR0Ldc8CDf>eN22u!wa~Y=|F8v(~QDP7`bTXAaKilq549thIBp8Jg#;c z=6hm|FH7cBQBp~_<|a&c@SRP&|7C+-_-@4yNW+}4g0rw z-*Wky8*k5Y5h}jJz%e^ZX$dqb+-S-^QVaeHC|1;P{HU?`pVl{_-rnh7k7006;oy&P zv(iEhN`?t~tHc+B5uvSB^Q+|};i5rgKf|duE}X^L)2tJj4CptY^C6*vJe;$bVxB4@ z*&~~7DwHQnX$D9ZZb7dsoM>RxgCjv1PP-`KT*o#s*`Ve?*`6yC1ev^OLRc?TTPD@x zu^40_5SOBwsWO{>HC3h*aB8x(McZY*plXI~@H*B?;CQCeYK6KnX|v#cFt3PnQvPX+ zRtnA`a-3X4v&~q}JX0)vKrtuX$F&={G2;r}W{(1Kp?En%X*+M}^ zjgwg4!0qR;QwhiEf+Vi9iX>sXBd+7Ay4RY$pgtP(5~PHHbE~*;oQqVgHp(%h63i?< zo^vtqU_mZSjY7@}1IO&pEW_DMuH?B~Yq{hIF307r0I#yNi8$vjY`*lI{%fZBQHqtJ zrHJybsR)qEdWP5DTOn?1yIci1^tOz3o)Zjr@a?#j zLH{^LJ=`4Q>sRr6mvH+Ac7_;v=r_rx|8h7sV~jPobs~PKxu3B|CT`()G?#Ww1f-E>5a~FHZsu7$GgR7dG(Z zIRe>Wk62(3&`9R$7ZK7xo~#i+{UeC&H!i450*O{!kdf9 z8q^!N(4M0+5T6Zc*I z7uX0~G;^R>Wb=w%a3yuy*%bzh2*kdVhDjkN(r}zlkgNTmguuAh(qs<0U5p)knltF0i~} z%O$na_Minx2Ku;BBljLCWB zN)~3JT7R>doTUw;$XWk3i_sgRov1BdsN#;)89x>g;n>TB)PeGsZM2ZalDu$18A~pV zN<=QJPxO?iX->wRbE+mF2KBtc**2i1&bCKUVia;XIT&FhWYV#D+5S|=ZR*Bm^j#d@ z#;a3oba8r}dPSO2PcWyEX#_F=9p!9FZ8+?SF5(UBw=kXIm0f)D5?;B4H|}zb?1d!1 zZw2K@r#)S8%xDK1;YzY&^ZX=d-_qHF*-xDsjvoOQ|MsuflY@GD*UNZqY`h=IpW=;d zS{|*#pv~tZ~KtsM4<+Qk>ZaFy&C>hoa0?+7ZPHQRacq;bfN3 zc6_XdehXt=AQU{ryP2T4hu8LakY~2>c#mszRw3~Um!V;HbLK5GM*&W@(C=c_>)1I|xk;q1OZPA3d3^gk=Lxseu5@0=RHrPVy@jjFtDO}OU8DG|Pt+q) zy+43G+Q7yc9DD)SE8&<;KqgFyOy&%1iH+LaMMZh&-KBs%F1xHI^={lq}65mk{AA zBxuy+0^|CSK%X@zH5hJQE>!dkIxY-+`wKPxuwLe@(kpD6C^%`t+MkR3h=W_~HV;Bc zL571TvFlK6`AN>+oj^AZ@ejhXFwY;*egU*bX}0F5kh;DO3EPT%~ki zu)80k>r)PjJa=h@)d{`*(3_jX&1JChxx{U@2E{=Tph4nyNEEic|bzag{QxX zyxHd+7|tra!gB<9?>4?UU~S%GtITqvH^X3Yz&;&o4L&ft!FR)vn?4#P8iiUwwJ__D zXb%c}_Yi+{4PUx~Z{HA8_SA|gBntZyd_q;_8Dvj%5c9lwaC?q{mhyUW{b&Brc=2!k z<9bA@_Xo6l=$%FLDz06}fiQ${td2g7HbIvBH*i=LRDnLOm_is9H%LDXtMz0K%jZ-` z&mG6JPvQM1nJ#qm022fH3p6G~#={h&l#}TBj6$mQv9ZQiHn>38YQUPHtcG=^2q1fQ z*oIHQVS{$#wV~$bv0zuZ#=i92x%jyGb|D}xa+i@@6fWrADItC(9K+>T}q1(J*yTiN0 z=#PL<9*fnk1Z+`gD09bWod|7kD)cj>(JWR4c8vW6zH<+MdIMj+fs1!=XUfakYV&T} z@FR0p<`=;-5d9Ku-my8EHNRfUduY7)-~FTdF4X&j+heRg0srfGW6X8DmaT@EVx>)F znJUOF2wefO=T~UuxmBegAgeXJc%k{SfjNT$S<1-sbI0(3XK?;F*5Bh1xEJ5a9B-31P7IDUv& z{15B9Q11`)Pihq#=P>^avmbNuFoPui7^^+av&RHSKd5YNxozltlt*Kw%-NJYmt}iC z-({$u!Mm=HC%5pyC)quuX^?lwa3XT#DXYj1JJb!`B74+Lg@c9%jrDCDmI>-K9eB+R! z#}n(M!>K+rs#<6>B}1_lfnq3{K306XHBN>s-a7`q#oXSa$(|$TQuk)~+AerLhb}DGip6l&I3kDvrXZ37Awl879$ae=gMfKTSUIyn)#3w>BOPLY z$Uux(F>HqA4n5rQ$?xVPl@}{iC=*IrZM3OrxB>d1O0I2^{jhMv7 za$7220dqkG#EG>n7cLVct%5ymEyi+X4|XZfHh-$xo_fkPre-oD5vEv?OURaO&M;y_ zX$L+Pm0rvui@}KJx!&O_+}NjIn1^VI9V<+u*vEGdFw7_)Z^SMD+J?jVR@yGy@MiC! zayV!uUJpobHv()0*bE7*UJDb6N_R4R=K!C%jW1rsS8m{q0R@dD!&*zNqf35!XNGo3 zh5E-im+SoKZV{Hx4w@%@&b4QkamLZ3dUm<>;=B+Tnn*J;J~MrO%pmg9_{e#z=eTm09~2vcIYlv|gLoRTkoRy%^*L8a zMXEAuGxv|>O}3%QQ^gV)_`9tV=dB^_y7Q(&ixL9pT;1VH9U)&xa>=WTkAgCHmN{H5 z#Bgm&hF#yY1t59p((#MJ70#Iv#f%odwU^~iTPRd2-OL$SF znrDu=;;@)^ZOrQD%M+aJ;>3zhMnJrjfI^?6h_4D1&;CeJb4`gDJ)g32+an?$kK`k6 zVb&rj4|7}|;f1^S>sF`%+B@xuCe&<)_0-aAI{#w+F9h!;YLPSY+GDP(GN%oM`LQ8esEMq;c|T3(irJ* zBT|I%LbGh&&9zHmvBer&6lVbC+;RN%3;3lc*c+Q+Q+u&ZrOq) z*SXoiWsAk0IJNC^9Y_W-lsr_L9k0ii7F<#;H&=RKPI4;6wnJ)vIHJ0;(c?{H-=?X= zicrgodZT&qUmOz0Pxnbz=ecup6LwYg=gi%Dd9=(1v938!PPkI&T$1pvha}%^oz*PV zSQ_)5nxXDaf=hdNVQjTUVTBM<37xszZ$-e82Njnyqg z9nr%kwa7sAUY=dt^T`=!Ge(-37c`qhXWz=t!O^0hO(ZgJZ+FBo8^~jt0Y3X>eDy_s zt}5DG)^N7Ys827Wlh^Ra)h_*Z?U;_*FyMMx*}~}sp1nuub~mJR;GQ9{s^M-bRfBEf z6jcGm923z3A*tMdgRV)LUca}aEPnrl=sC~tmrFy-^BYs}!EOAndMDOj5m zK1^_Tiq!=k@A8E2+~bS4yXbVWpW*T$CVQ3ovtPlnx%_pkp2R190Z(nHUVQ0^E-ABk zUZrb$M}eZw5K=f>hk?Q@S2f4Mc;Pwvg2`d6yzL2m%+;~Jd2*WBis0te@ zRU2(9*&6BwG)rU;uoY;_jvl206x*B5>Hyh-Lh55(66BBnA^~@FmC9;nk3A!!qy<7V zZbOg{hV&iJ=R__F8Y%Vy&hfX#=;i2ju<0{=#}N603Cpi%Dfe9L*zB1{W}T_#qO{FY z?eh|sZ8%1jJF&YIex+J=^K|A0#}_je!URg8D?Qf>)wZBE;AqZmA!h{>*K+I+cziQ{ ztVSFUCIem7iUyq0A!9Pa*A5vyai*^_YXRjlwazBeRb!b<&@%tQbHYWac)6%_*%}Rr z6&CZ`CDwh8rc*dGwW@2h#~c`LFYt}Kj3xRn-@^;9{s-AoG{-Y<6|MG9v zccI=N`a0hF)9}BBn=|UR%?d)>3nrC^|xSq^FV-HOp}@gt|ojWc^Pqpx|MIx`uy2(=)gKwP@9p^%QjLOY%DJab|<;FJw> zIZ;GM^JuQdRB~Pu$5Uq88!DOvtYk4KV`yeqaC|uA$E|kg1~GSYG}buNtJ<5|3cV@5 zJ0w1z>2VFv=5knnh3_)*^o;reT7f87-hbUyt5-zg^=6Cp*!-~Tu^UKRi ze$1YSS%+%-jTB$s#V6mu@BaWVUB{IJ`alYeQnq|NsG<3Ojbi72)susIdlcL3BEI~e z@J&5FA*Eu|JO~Mnw6AWljYZH#U?a_9BA^Xox21XpIQI9|JtU@H;WfAb=-8cgyoK^$ z1ZZ_!@Eb8*%0tj1X6=sg<%{^zi+J%Gt_iP>HdO{I7+4sjmL;1#d~|^AeV)wbCYK!Z z00$8rU1s8Mrtp&)&2XvbLNeo!gNgwoKd5ZcRtk??Lz7a55ChZZ#aU&VCVmFw^1~^g z?61*h!f5%D=C;(wNIJ%7f@2;|^_W^W7-IL367#WD7N^{pV&{&or=tNTsfMYD<31QJQ{HI>ucnJtI`=TUNUMtx%)Yyvl>-08=olXeul8Tm>(x45zPoC#NXS zbpPcr5MV3Badme+D5)tYsYHyKxU|n8x(}`3$v&P~<>hR&u@=j;r{3W|&zpDaf7B>Z zZ;xmjei5Jj&$tLiJ024po3EQODWO4b8PDa)GOi48t)_L^#tS>>4h-d%)9J+u*(08ROPnp>SKM zH>-xIfS24kgTMV0KDencw#-G~TO*2v;LvwhoZ8aCimN#txvUUbrog#g;H%NpsKC9P zqeY?z$Q>NNuYpqIl-n7LUC~T7w zGa}q2ZoJ>axf2S_33$LjSj?`V@=oMFnJhE!GlFs^rfERg3?ZS=ITFYBDmREN{Vuf1 zM@_?XH2Gjg_Pw^oI%z|Sd9;Akdz3OeVm!gw29CGYN_C7K3Gka6Jel1DH}}+Jx+{)6 zs-%NZe0dwc_6$C@Mc6e2Ig|2kQ#-O{ZJy`U6-Zjit4<|(>DKpBnXC=$PUI4?_15DO zdnqy3T>eh#KLMyR`Z%9 zzlKy65-SMD4KDtSMr4JZ7NRB!DHWbT)3ePr;5yflJ4<%30hOgxQiFztY8nwGh zOqo&FAo4b%sx4{7=&dYX=sXuGEp!I!S5}yzL1(lwgP34k;C6y^il<{7@6h{fp!wFA zBEYG2UhmxnuIz&=q+J2x2rj`h&{eGCSI^^boMKdv8H&=vDe?|~Jy#fFbD6DVpD)#n z>iJS`>!jkyp^Vbz+q)@2d01d4tEyT&d^E;m5{^=3JekAK)h22tN5@Ew^(MmoatY1L zHP*};67g7@0*m>2ZUrZMoS>X)vqHz*ZG+A$(O(^thSy)|*Z5Fxk8%=>PI~|V0*gsR zK~&3!gYi3hW5rY7LSui-W|#L-$*1Lg$0^?Ai(_rb&(&M?qXvJg4*tLz=ybktWpong{J;CZFz`SQsbzHJ^kqM8>)5d?k_gvzIA_=mIn;vF-| zzxzN@FE|oVoPVUOKrpYaFVy8aV~8EFG~)Q0HnjB2L@YgE6^i@|Q11>g$y8r+@!`-_ zeQ>wLe(~m0>hO*J3cY@rD6vS6v2GqY!<_bVU&l^PoA?a^-sUw!3OjDLv6u8E=+oKGtxLH~*U3d~fh z=H*(|%aGlZ4&3H{!pPLM*eK06zFV~~3%=6xm^&ZF zo&jYuo4$6qxHH|a;Ov2Hensnp3Qc?*1t~94sS>uG2|E{$<( zZ=TZJ|APCW8E-klThaMPLU!dgf75&KzvtzBpYFTSt`V?eM;W6*C&ST)l59S9dNpOr0D*ylh07*qoM6N<$f{F*$e*gdg literal 0 HcmV?d00001 diff --git a/sources/shiboken2/doc/_themes/pysidedocs/static/bg_topo.jpg b/sources/shiboken2/doc/_themes/pysidedocs/static/bg_topo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4229ae8db5242e11c8fc52dd1122735d198a3545 GIT binary patch literal 14237 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 literal 0 HcmV?d00001 diff --git a/sources/shiboken2/doc/_themes/pysidedocs/static/fakebar.png b/sources/shiboken2/doc/_themes/pysidedocs/static/fakebar.png new file mode 100644 index 0000000000000000000000000000000000000000..b45830e000eb123c3efab6bfc3b17809a3a08530 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0y~yVB`m~89A7Mq`$$QwLprqz$3Dlfr0M`2s2LA=92~r xihH^^hG*5B1h}~tn49EFcPMuw|ksYXn!PC{xWt~$(69Du$7_a~U literal 0 HcmV?d00001 diff --git a/sources/shiboken2/doc/_themes/pysidedocs/static/logo_python.jpg b/sources/shiboken2/doc/_themes/pysidedocs/static/logo_python.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd474efbaa633dde7998c09170e4500acc4a13ce GIT binary patch literal 2660 zcmb`IXHe5w7sme~g$OYaK&6YcMRr390r3+A|xavB_t5ih(D1=Af=?GkO)~>IXPKbWhEsg<%53%5*HWWi`XkK zEiJFO54BJ6Z{vSmh+Y9GIDiN0z#tSLh5~_6AW=I|u-mp67z6_CHu@J(m>5JH41(`! zUyXk_5GV{R1`?MBKwz*KL`+-^F7@Y`uPIOvs0{3op{)3MbzG!5y=N&o#g`K~VJ*6)Dq`KvT zk7yJ?fOo@DU=&~t2rnf4Uq}Xr&&_ps5U%Od5m+;`D@y2KU7y?K!B6dR!KI2x1LxVN zThjDpjo~?pE3=`Ze=@Jb4EMm#&Z{c%ktEbwOmjVc58a)c_v7 z^2MlLFz3o;viH}U20@|{zs+hPXm(CKkc{ah^>dxHUMB&Rz}^K5mOOeIT0MSp1h4W| z{KZjc8cj#1DX*cvzU5;{ea_mO#ks(Hwg>7&fPbG|8Lt1F^jAndImrqQ;f70!cj8Lz zf=*zz_gKE{4KUT8y|%vM)PKT{;Mp&@dekLDmofk)#)iE0fA8y%i}m0+U~I3oD$T(1 zA5XhUtWFjOtuwp1a2Ayt8a|EoZeXRPj%U;cpO7`SDT~c2j2PaDsE9ni%yz~{G1-;5 zbKH%~b6gIZdU5Mh-xOBlT*j1n4fS#I59QCk)ILI-#t+ z7_$S3!rDC|;1GE^zmZ69<;l#~X7#=_5TaCLh37`_yoV-QH9zgd+-o*z6DUQtdsYvP zkGK;RuhS0aJac)*>WJ>BEqsxY+skV1?DT$Ki$suO^i_$p<5h5tN`C=MpBmL!?erh0 z2mpADBDK&#)zhSCUh+jh!D3KP8unV&lW@rfm#B8miLFo8X$f$QMJy{M+R8|Y2I&OSoy*3L*Pf`l%ShmbEk&INIUFHoB73zAug?mpSwf~kJ&nRB0763oO#yn zm+u$RspIu*Zm4!MIxRM0^BrWpD{A)WqtG0`!XRk5H6$qg)^RTQ_xw#4M>Dl2QME_t zlzp+@Kd`^}wF#&if|5k1Q8j!&nA+1jwRCg8e@I4G>bPkPb%+omXC|gVj`yF-4b(JE zamB1jOX-H=j2p2Oga0s@%p~5-GI!`XgH-HDD(mPUr8hxrX3sX@yKQ|16``D{0c0^d zr~XHWVI;aR3yfRDS!D6>ceuX@*$USgX;`b6c~|*aDP#BwPRg4)VR5Uc9)W4fv{upo zUWJo+&(%}WKG6MOPUCTeDQ~@p+AFN8%VH8Z-x8z&Igm4g28Q1$xx$4_4t3g(0N>K__+vw>T|k23p)P0^n-=+A3i zY+H*fVf1`O%9E&$-#lDCTJxG9FfS1h-1_Cd@Lel1GbxF3e|-sn4kaf5_V0Db`*qBCX|R@#Ejf zKhjI7!&GMUh8DVM`Po^=Eh`~%sp=$S>kTjL#29|AYS43dCr-Hb!f8Mm^Q^bP(Gsd# z!WTBvI9VeqCj9AxQ@uM2Hi@c6FOqZ)B%TC>cjzYy&9Y9fcnicbJ&^Rq&P_G zrRg(kUMFj2KM0JkMi#k~O156rJV>u2RJ6>LV}7*`Pup9`TbehWH7D{;YrpZbw2#$@ zxp8Lxs#SiVCS4}EIi)Q`|9*BOMIlq+vDP>hpWo#!mrXm~&}1?ha~|Rnf!^>FXut8G znJWjSvIstupS7uj`>k%~Zh<2xZTUz_6LV=qSRI;vngJxvcdWnjN*h1HEdczWqS~ zku}LHT9*4G6hHzJ1wX#8>mK(U>Ui&EJJ@g|OQyrQ;b!L?QeQJnN8QLG+7KI29osqi zE}dBuaq(;!#lBlxZqTXl^{H*?D__4LTmK4e+J5sxWdrw}Gkp(2?G_(d%oaInxK{Z% zb2Ob})}LK8b+)k2n`OO9mT3Rj5!ZWPR(7(synXcyf$!M1G~Vrk>%Sf`#JbfG6Z30@ zY8!cnD92GAdKy_%THEI}C1vWA$7FIm&sFP({eSF&u3fno=skRc?{_0a8;-N|DqjT|?_BFWCv45f9)3Jho Lk^f!7iAMelGjO_W literal 0 HcmV?d00001 diff --git a/sources/shiboken2/doc/_themes/pysidedocs/static/logo_qt.png b/sources/shiboken2/doc/_themes/pysidedocs/static/logo_qt.png new file mode 100644 index 0000000000000000000000000000000000000000..39a4a26f39658d393cbd26485c1aee5c8d8620ea GIT binary patch literal 1032 zcmV+j1o!)iP)Skq@&(`Z`LXj;^1VbyPC)^ldpbZ6IfXxDaY*m!K%d2QKx zZrOWp*?e%>eR0}-aoT=!+JAJ~fOXq}cH4q^+=YAGhkf0Nf8C0J-i(9Zj)mWlhTo8e z-;sykl8E4viQtoq;FXNwmyO|9VZpv#jZ~uIja~>b9`zx3cTFv+KIF>$|q>y}0bZyY0ce?ZUq9#K7;y z!SBby@5jUM$iwf+#PG?;@Xg8b&B^i3%JI+4@zBol($DhL((~5S^Vih$*wyse*Yw)h z_1oC>+}ics+V$Ss_TJp~-`)1$-uB_(_v7LB;{|Ns9+N*zuB000AY zQchCtpU*a4MmTeDvcsw060>hO0!MT0Era< z@{><9(;fg%q5;ML7SF~+L=vMOKxY&{OA*MmmCGT37f}Eg0ER22I|clSM*zG63h|)s z1vn*AwXYh0n*&}e#&&=ab3iM=Rn_?cJU0g%0ywWalR(xSa01}4>O25e{PTgqCiVfO zROb%hxyFD&fL*F{10ZG$7zXH2oofK=jRE}tdsOEZP&8k{8GwVTa~D`L-^618CspSe z@ZB8H4scO*W`K|8fS3o2t40C1Zw`<-;AcZncL5Cf=fnfng#ktYjt2ETfTaJt2y6}m zqyXkNmdpLWfv>J#%mVwu0PYmPv_H)o`<4ODm3ohWOfsI>*{Yj~2mAw<9ltr2Sq9*3 z=>ue-GU~Ns{Yv#zXJKo()0`_=FZCD8KwiyfHwB#@f6ntE3y*R@OCSmj@$3% zKTTXuhX6!mL$W)a?!FB0c}>*2F;L?Sz+mkFNqInihc>@T2k?Ky34LA*X#NFXdR%Q@ z3y}Ud$6fvVLjV%8emj7lcWm>HZQilX*HxF}IL=>M5GNSE0?ASU0000 ul { + padding: 0px; + margin: 0px; +} + +.sphinxsidebar ul li { + margin-left: 10px; + padding: 0px; +} + +.sphinxsidebar h3, .sphinxsidebar h3 a { + font-weight: bold; + color: #333; +} + +.documentwrapper { + margin-left: 270px; + text-align: left; + background-color: #ffffff; + border-left: 1px solid #989898; + font-size:18px; + padding: 10px 50px 15px 50px; + height: 100%; +} + +h1 { + font-size:18px; + padding-left: 50px; + padding-bottom: 15px; + padding-top: 15px; + border-bottom: 1px solid #c2c2c2; + margin-right: -100px; + position: relative; + left: -50px; + top: -10px; +} + +h2 { + font-size:12px; + font-weight:bold; + border-left-width: 1px; + border-right-width: 1px; + border-top-width: 1px; + border-bottom-width: 2px; + border-style: solid; + border-left-color: #b1b1b1; + border-right-color: #b1b1b1; + border-top-color: #b1b1b1; + border-bottom-color: #009491; + background-color: #e0e0e0; + padding:5px; + margin-top: 20px; + -moz-border-radius:5px; + -webkit-border-radius:5px; + -khtml-border-radius:5px; +} + +h3, h4 { + font-weight: bolder; +} + +pre { + border-top: 1px solid #e0e0e0; + border-bottom: 1px solid #e0e0e0; + background-color: #fafafa; + padding: 5px; + font: 100% monospace; + overflow: auto; +} + +pre * { + font: 100% monospace; +} + +.pre { + font: 100% monospace; +} + +.headerlink { + font-size: 100%; + color: inherit; + float: right; + visibility: Hidden +} + +h1 .headerlink { + padding-right: 50px; +} + +h1:hover .headerlink, h2:hover .headerlink, h3:hover .headerlink { + visibility: Visible; +} + +a, a:visited { + color: #009491; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +div.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +div.seealso { + background-color: #ffffcc; + border: 1px solid #ffff66; +} + +div.note { + border: 1px solid #e3e3e3; +} + +table.docutils { + margin-left: auto; + margin-right: auto; + margin-bottom: 10px; + border: none; +} + +table.docutils td { + border: none; +} + +table.docutils th { + border: none; + font-weight: bold; + vertical-align: top; +} + +h2 em { + float: right; + font-size: 10px; + position: relative; + top: -20px; +} + +/* Table of pymaemo components */ + +#development table.docutils td { + border-bottom: 1px solid #EBEBEB; +} + +#development th { + background-color: #EBEBEB; + color: #FC7E00; + padding: 5px; +} + +#development th:first-child { + -moz-border-radius: 20px 0px 0px 0px; + -webkit-border-radius: 20px 0px 0px 0px; + -khtml-border-radius: 20px 0px 0px 0px; + padding-left: 10px; +} +#development th:last-child { + -moz-border-radius: 0px 20px 0px 0px; + -webkit-border-radius: 0px 20px 0px 0px; + -khtml-border-radius: 0px 20px 0px 0px; + padding-right: 10px; + width: 100px; +} + +hr { + border: none; + border-bottom: 1px dashed #EBEBEB; + width: 70% +} + +.oldnews { + text-align: right; +} + +/******************* TOPO *****************************/ +.header { + background-image: url(bg_topo.jpg); + background-repeat: repeat-x; + height: 147px; +} + +.header_container { + background-image: url(bg_header.png); + background-repeat: no-repeat; + background-position: 100px 0px; +} + +.logo { + text-align: left; + margin-bottom: 10px; +} + +#searchbox { + border-top: 1px solid #989898; + padding-top: 10px; + margin-left: -10px; + margin-right: -10px; + padding-left: 10px; + padding-right: 10px; +} + +#search_button { + border: 1px solid #3A393A; + background-color: #3A393A; + color: white; + cursor: pointer; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + -khtml-border-radius: 5px; + +} + +form { + margin: 0px; + padding: 0px; +} + +/* search field */ +form #q { + width: 136px; +/* height: 22px; */ + border: none; + margin: 0px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + -khtml-border-radius: 5px; + margin-top: 2px; + padding: 4px; + line-height: 22px +} + +#search-results h2 { + display: none; +} + +#search-results h2 { + display: none; +} + +#search-results ul.search { + margin: 0px; + padding: 0px; +} + +ul.search div.context { + padding-left: 40px; +} + +#installation td { + text-align: center; + font-weight: bold; +} + +em { + color: inherit; + font-style:italic; +} + +/******** REL bar *********/ + +.related { + display: inline; +} + +.related ul { + padding: 0px 0px 0px 10px; + margin: 0px; + text-align: left; + background-image: url(relbar_bg.png); +} + +.related li { + display: inline; + color: white; + font-weight: bold; +} + +.related li a { + color: inherit; + line-height: 35px; + font-weight: bold; + vertical-align: middle; +} + +.related li.right { + float: right; + margin-right: 5px; +} + +.related h3 { + display: none; +} + +.align-center { + text-align: center; +} + +.contentstable { + width: 100%; +} + +.contentstable td { + padding-left: 30px; + vertical-align: top; +} + +p.biglink a { + font-size: 20px; +} + +dt:target, .highlight { + background-color: #fbe54e; +} + +img { + border: 0px; +} + +.figure .caption { + font-style:italic; +} + +table.footnote { + margin: 0px; +} + +#synopsis table, table.field-list { + margin: 0px; +} + +tt.descname { + font-size: 120%; + font-weight: bold; +} + +#functions ul, #virtual-functions ul, #slots ul, #signals ul, #static-functions ul { + list-style: none; + margin: 0px; + padding: 10px; + border: 1px solid #ddd; + background-color: #f4f4f4; + -moz-border-radius:10px; + -webkit-border-radius:10px; + -khtml-border-radius:10px; +} + +#synopsis span.pre { + color: #009491; + font-weight: bolder; +} + +#detailed-description .class dt, #detailed-description .method dt, #detailed-description .attribute dt, #detailed-description .function dt { + margin: 0px; + padding: 10px; + border: 1px solid #ddd; + background-color: #f4f4f4; + -moz-border-radius:10px; + -webkit-border-radius:10px; + -khtml-border-radius:10px; +} + +.pysidetoc ul { + list-style: none; + padding: 0px; + margin: 0px; +} + +.pysidetoc em { + font-style: normal; +} + +.pysidetoc strong { + display: block; + padding: 5px; + border: 1px solid #ddd; + background-color: #f4f4f4; + -moz-border-radius:6px; + -webkit-border-radius:6px; + -khtml-border-radius:6px; +} + +.hide { + display: none; +} diff --git a/sources/shiboken2/doc/_themes/pysidedocs/static/pysidelogo.png b/sources/shiboken2/doc/_themes/pysidedocs/static/pysidelogo.png new file mode 100644 index 0000000000000000000000000000000000000000..076c1057c094e024bd6cb9cf08f8720c8b686ec9 GIT binary patch literal 12969 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 k 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 literal 0 HcmV?d00001 diff --git a/sources/shiboken2/doc/_themes/pysidedocs/static/relbar_bg.png b/sources/shiboken2/doc/_themes/pysidedocs/static/relbar_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..4036733a7bad6f210ffe961dbc394fce33800be6 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^{6MVC!3HF~cLcBlDNj!q#}JRsx6=-CG8k|$i|$$w zTw?G%WViDYU8g_t)58~aoe=wQ` provides the +:ref:`inject-code ` tag +allowing the user to put custom written code to on specific locations of the generated code. +Yet this is only part of what is needed to generate proper binding code, where the custom code +should be written to depends upon the technology used on the generated binding code. + +This is the ``inject-code`` tag options that matters to |project|. + + .. code-block:: xml + + + // custom code + + + +Conventions +=========== + +**C++ Wrapper** + This term refers to a generated C++ class that extends a class from the + wrapped library. It is used only when a wrapped C++ class is polymorphic, + i.e. it has or inherits any virtual methods. + +**Python Wrapper** + The code that exports the C++ wrapped class to Python. **Python wrapper** + refers to all the code needed to export a C++ class to Python, and + **Python method/function wrapper** means the specific function that calls + the C++ method/function on behalf of Python. + +**Native** + This is a possible value for the ``class`` attribute of the ``inject-code`` + tag, it means things more akin to the C++ side. + +**Target** + Another ``class`` attribute value, it indicates things more close to the + Python side. + +inject-code tag +=============== + +The following table describes the semantics of ``inject-code`` tag as used on +|project|. + + +---------------+------+---------+--------------------------------------------------------------+ + |Parent Tag |Class |Position |Meaning | + +===============+======+=========+==============================================================+ + |value-type, |native|beginning|Write to the beginning of a class wrapper ``.cpp`` file, right| + |object-type | | |after the ``#include`` clauses. A common use would be to write| + | | | |prototypes for custom functions whose definitions are put on a| + | | | |``native/end`` code injection. | + | | +---------+--------------------------------------------------------------+ + | | |end |Write to the end of a class wrapper ``.cpp`` file. Could be | + | | | |used to write custom/helper functions definitions for | + | | | |prototypes declared on ``native/beginning``. | + | +------+---------+--------------------------------------------------------------+ + | |target|beginning|Put custom code on the beginning of the wrapper initializer | + | | | |function (``init_CLASS(PyObject *module)``). This could be | + | | | |used to manipulate the ``PyCLASS_Type`` structure before | + | | | |registering it on Python. | + | | +---------+--------------------------------------------------------------+ + | | |end |Write the given custom code at the end of the class wrapper | + | | | |initializer function (``init_CLASS(PyObject *module)``). The | + | | | |code here will be executed after all the wrapped class | + | | | |components have been initialized. | + +---------------+------+---------+--------------------------------------------------------------+ + |modify-function|native|beginning|Code here is put on the virtual method override of a C++ | + | | | |wrapper class (the one responsible for passing C++ calls to a | + | | | |Python override, if there is any), right after the C++ | + | | | |arguments have been converted but before the Python call. | + | | +---------+--------------------------------------------------------------+ + | | |end |This code injection is put in a virtual method override on the| + | | | |C++ wrapper class, after the call to Python and before | + | | | |dereferencing the Python method and tuple of arguments. | + | +------+---------+--------------------------------------------------------------+ + | |target|beginning|This code is injected on the Python method wrapper | + | | | |(``PyCLASS_METHOD(...)``), right after the decisor have found | + | | | |which signature to call and also after the conversion of the | + | | | |arguments to be used, but before the actual call. | + | | +---------+--------------------------------------------------------------+ + | | |end |This code is injected on the Python method wrapper | + | | | |(``PyCLASS_METHOD(...)``), right after the C++ method call, | + | | | |but still inside the scope created by the overload for each | + | | | |signature. | + | +------+---------+--------------------------------------------------------------+ + | |shell |beginning|Used only for virtual functions. The code is injected when the| + | | | |function does not has a Python implementation, then the code | + | | | |is inserted before c++ call | + | | +---------+--------------------------------------------------------------+ + | | |end |Same as above, but the code is inserted after c++ call | + +---------------+------+---------+--------------------------------------------------------------+ + |typesystem |native|beginning|Write code to the beginning of the module ``.cpp`` file, right| + | | | |after the ``#include`` clauses. This position has a similar | + | | | |purpose as the ``native/beginning`` position on a wrapper | + | | | |class ``.cpp`` file, namely write function prototypes, but not| + | | | |restricted to this use. | + | | +---------+--------------------------------------------------------------+ + | | |end |Write code to the end of the module ``.cpp`` file. Usually | + | | | |implementations for function prototypes inserted at the | + | | | |beginning of the file with a ``native/beginning`` code | + | | | |injection. | + | +------+---------+--------------------------------------------------------------+ + | |target|beginning|Insert code at the start of the module initialization function| + | | | |(``initMODULENAME()``), before the calling ``Py_InitModule``. | + | | +---------+--------------------------------------------------------------+ + | | |end |Insert code at the end of the module initialization function | + | | | |(``initMODULENAME()``), but before the checking that emits a | + | | | |fatal error in case of problems importing the module. | + +---------------+------+---------+--------------------------------------------------------------+ + + +Anatomy of Code Injection +========================= + +To make things clear let's use a simplified example of generated wrapper code +and the places where each kind of code injection goes. + +Below is the example C++ class for whom wrapper code will be generated. + + .. code-block:: c++ + + class InjectCode { + public: + InjectCode(); + double overloadedMethod(int arg); + double overloadedMethod(double arg); + virtual int virtualMethod(int arg); + }; + +From the C++ class, |project| will generate a ``injectcode_wrapper.cpp`` file +with the binding code. The next section will use a simplified version of the +generated wrapper code with the injection spots marked with comments. + +Noteworthy Cases +---------------- + +The type system description system gives the binding developer a lot of +flexibility, which is power, which comes with responsibility. Some modifications +to the wrapped API will not be complete without some code injection. + + +Removing arguments and setting a default values for them +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +A simple case is when a function have one argument removed, as when the C++ +method ``METHOD(ARG)`` is modified to be used from Python as ``METHOD()``; +of course the binding developer must provide some guidelines to the generator +on what to do to call it. The most common solution is to remove the argument and +set a default value for it at the same time, so the original C++ method could be +called without problems. + +Removing arguments and calling the method with your own hands +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If the argument is removed and no default value is provided, the generator will +not write any call to the method and expect the ``modify-function - target/beginning`` +code injection to call the original C++ method on its own terms. If even this +custom code is not provided the generator will put an ``#error`` clause to +prevent compilation of erroneous binding code. + +Calling the method with your own hands always! +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If your custom code to be injected contains a call to the wrapped C++ method, +it surely means that you don't want the generator to write another call to the +same method. As expected |project| will detect the user written call on the code +injection and will not write its own call, but for this to work properly the +binding developer must use the template variable ``%FUNCTION_NAME`` instead +of writing the actual name of the wrapped method/function. + +In other words, use + + .. code-block:: xml + + + %CPPSELF.originalMethodName(); + + + +instead of + + + .. code-block:: xml + + + %CPPSELF.%FUNCTION_NAME(); + + + +Code Injection for Functions/Methods +==================================== + + +.. _codeinjecting_method_native: + +On The Native Side +------------------ + +Notice that this is only used when there is a C++ wrapper, i.e. the wrapped +class is polymorphic. + + .. code-block:: c++ + + int InjectCodeWrapper::virtualMethod(int arg) + { + PyObject* method = BindingManager::instance().getOverride(this, "virtualMethod"); + if (!py_override) + return this->InjectCode::virtualMethod(arg); + + (... here C++ arguments are converted to Python ...) + + // INJECT-CODE: + // Uses: pre method call custom code, modify the argument before the + // Python call. + + (... Python method call goes in here ...) + + // INJECT-CODE: + // Uses: post method call custom code, modify the result before delivering + // it to C++ caller. + + (... Python method and argument tuple are dereferenced here ...) + + return Shiboken::Converter::toCpp(method_result); + } + + +On The Target Side +------------------ + +All the overloads of a method from C++ are gathered together on a single Python +method that uses an overload decisor to call the correct C++ method based on the +arguments passed by the Python call. Each overloaded method signature has its +own ``beginning`` and ``end`` code injections. + + .. code-block:: c++ + + static PyObject* + PyInjectCode_overloadedMethod(PyObject* self, PyObject* arg) + { + PyObject* py_result = 0; + if (PyFloat_Check(arg)) { + double cpp_arg0 = Shiboken::Converter::toCpp(arg); + + // INJECT-CODE: + // Uses: pre method call custom code. + + py_result = Shiboken::Converter::toPython( + PyInjectCode_cptr(self)->InjectCode::overloadedMethod(cpp_arg0) + ); + + // INJECT-CODE: + // Uses: post method call custom code. + + } else if (PyNumber_Check(arg)) { + (... other overload calling code ...) + } else goto PyInjectCode_overloadedMethod_TypeError; + + if (PyErr_Occurred() || !py_result) + return 0; + + return py_result; + + PyInjectCode_overloadedMethod_TypeError: + PyErr_SetString(PyExc_TypeError, "'overloadedMethod()' called with wrong parameters."); + return 0; + } + + +.. _codeinjecting_classes: + +Code Injection for Wrapped Classes +================================== + +.. _codeinjecting_classes_native: + +On The Native Side +------------------ + +Those injections go in the body of the ``CLASSNAME_wrapper.cpp`` file for the +wrapped class. + + .. code-block:: c++ + + // Start of ``CLASSNAME_wrapper.cpp`` + #define protected public + // default includes + #include + (...) + #include "injectcode_wrapper.h" + using namespace Shiboken; + + // INJECT-CODE: + // Uses: prototype declarations + + (... C++ wrapper virtual methods, if any ...) + + (... Python wrapper code ...) + + PyAPI_FUNC(void) + init_injectcode(PyObject *module) + { + (...) + } + + (...) + + // INJECT-CODE: + // Uses: definition of functions prototyped at ``native/beginning``. + + // End of ``CLASSNAME_wrapper.cpp`` + + +.. _codeinjecting_classes_target: + +On The Target Side +------------------ + +Code injections to the class Python initialization function. + + .. code-block:: c++ + + // Start of ``CLASSNAME_wrapper.cpp`` + + (...) + + PyAPI_FUNC(void) + init_injectcode(PyObject *module) + { + // INJECT-CODE: + // Uses: Alter something in the PyInjectCode_Type (tp_flags value for example) + // before registering it. + + if (PyType_Ready(&PyInjectCode_Type) < 0) + return; + + Py_INCREF(&PyInjectCode_Type); + PyModule_AddObject(module, "InjectCode", + ((PyObject*)&PyInjectCode_Type)); + + // INJECT-CODE: + // Uses: do something right after the class is registered, like set some static + // variable injected on this same file elsewhere. + } + + (...) + + // End of ``CLASSNAME_wrapper.cpp`` + +Code Injection for Modules +========================== + +The C++ libraries are wrapped as Python modules, a collection of classes, +functions, enums and namespaces. |project| creates wrapper files for all of +them and also one extra ``MODULENAME_module_wrapper.cpp`` to register the whole +module. Code injection xml tags who have the ``typesystem`` tag as parent will +be put on this file. + +On The Native Side +------------------ + +This works exactly as the class wrapper code injections :ref:`codeinjecting_classes_native`. + +On The Target Side +------------------ + +This is very similar to class wrapper code injections :ref:`codeinjecting_classes_target`. +Notice that the inject code at ``target/end`` is inserted before the check for errors +to prevent bad custom code to pass unnoticed. + + .. code-block:: c++ + + // Start of ``MODULENAME_module_wrapper.cpp`` + + (...) + initMODULENAME() + { + // INJECT-CODE: + // Uses: do something before the module is created. + + PyObject* module = Py_InitModule("MODULENAME", MODULENAME_methods); + + (... initialization of wrapped classes, namespaces, functions and enums ...) + + // INJECT-CODE: + // Uses: do something after the module is registered and initialized. + + if (PyErr_Occurred()) + Py_FatalError("can't initialize module sample"); + } + + (...) + + // Start of ``MODULENAME_module_wrapper.cpp`` diff --git a/sources/shiboken2/doc/commandlineoptions.rst b/sources/shiboken2/doc/commandlineoptions.rst new file mode 100644 index 0000000..d373561 --- /dev/null +++ b/sources/shiboken2/doc/commandlineoptions.rst @@ -0,0 +1,105 @@ +.. _command-line: + +Command line options +******************** + +Usage +----- + +:: + + shiboken [options] header-file typesystem-file + + +Options +------- + +``--disable-verbose-error-messages`` + Disable verbose error messages. Turn the CPython code hard to debug but saves a few kilobytes + in the generated binding. + +.. _parent-heuristic: + +``--enable-parent-ctor-heuristic`` + This flag enable an useful heuristic which can save a lot of work related to object ownership when + writing the typesystem. + For more info, check :ref:`ownership-parent-heuristics`. + +.. _pyside-extensions: + +``--enable-pyside-extensions`` + Enable pyside extensions like support for signal/slots. Use this if you are creating a binding based + on PySide. + +.. _return-heuristic: + +``--enable-return-value-heuristic`` + Enable heuristics to detect parent relationship on return values. + For more info, check :ref:`return-value-heuristics`. + +.. _api-version: + +``--api-version=`` + Specify the supported api version used to generate the bindings. + +.. _debug-level: + +``--debug-level=[sparse|medium|full]`` + Set the debug level. + +.. _documentation-only: + +``--documentation-only`` + Do not generate any code, just the documentation. + +.. _drop-type-entries: + +``--drop-type-entries="[;TypeEntry1;...]"`` + Semicolon separated list of type system entries (classes, namespaces, + global functions and enums) to be dropped from generation. + +.. _generation-set: + +``--generation-set`` + Generator set to be used (e.g. qtdoc). + +.. _help: + +``--help`` + Display this help and exit. + +.. _include-paths: + +``--include-paths=[::...]`` + Include paths used by the C++ parser. + +.. _license-file=[license-file]: + +``--license-file=[license-file]`` + File used for copyright headers of generated files. + +.. _no-suppress-warnings: + +``--no-suppress-warnings`` + Show all warnings. + +.. _output-directory: + +``--output-directory=[dir]`` + The directory where the generated files will be written. + +.. _silent: + +``--silent`` + Avoid printing any message. + +.. _typesystem-paths: + +``--typesystem-paths=[::...]`` + Paths used when searching for type system files. + +.. _version: + +``--version`` + Output version information and exit. + diff --git a/sources/shiboken2/doc/conf.py.in b/sources/shiboken2/doc/conf.py.in new file mode 100644 index 0000000..57c2f94 --- /dev/null +++ b/sources/shiboken2/doc/conf.py.in @@ -0,0 +1,162 @@ +# -*- coding: utf-8 -*- +# +# PyQtB documentation build configuration file, created by +# sphinx-quickstart on Wed Apr 22 15:04:20 2009. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.append(os.path.abspath('.')) + +# -- General configuration ----------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.ifconfig', +'sphinx.ext.coverage', 'sphinx.ext.intersphinx'] + +rst_epilog = """ +.. |project| replace:: Shiboken +""" + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +source_encoding = 'utf-8' + +# The master toctree document. +#master_doc = 'contents' + +# General information about the project. +project = u'Shiboken' +copyright = u'Copyright (C) 2016 The Qt Company Ltd.' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '@shiboken_VERSION@' +# The full version, including alpha/beta/rc tags. +release = '@shiboken_VERSION@' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of documents that shouldn't be included in the build. +#unused_docs = [] + +# List of directories, relative to source directory, that shouldn't be searched +# for source files. +exclude_trees = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. Major themes that come with +# Sphinx are currently 'default' and 'sphinxdoc'. +html_theme = 'pysidedocs' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = { +#} + +# Add any paths that contain custom themes here, relative to this directory. +html_theme_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_themes'] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +#html_static_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = { '' : ''} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +html_additional_pages = { 'index' : 'index.html'} + +# If false, no module index is generated. +html_use_modindex = False + +# If false, no index is generated. +html_use_index = False + +# If true, the index is split into individual pages for each letter. +html_split_index = False + +# If true, links to the reST sources are added to the pages. +html_show_sourcelink = False + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = '' + +intersphinx_mapping = {'apiextractor': ('@CMAKE_BINARY_DIR@/ApiExtractor/doc/html','@CMAKE_BINARY_DIR@/ApiExtractor/doc/html/objects.inv')} diff --git a/sources/shiboken2/doc/contents.rst b/sources/shiboken2/doc/contents.rst new file mode 100644 index 0000000..24adb1c --- /dev/null +++ b/sources/shiboken2/doc/contents.rst @@ -0,0 +1,17 @@ +Table of contents +***************** +.. toctree:: + :numbered: + :maxdepth: 3 + + faq.rst + overview.rst + commandlineoptions.rst + projectfile.rst + typesystemvariables.rst + typeconverters.rst + codeinjectionsemantics.rst + sequenceprotocol.rst + ownership.rst + wordsofadvice.rst + shibokenmodule.rst diff --git a/sources/shiboken2/doc/dependency-pyside.svg b/sources/shiboken2/doc/dependency-pyside.svg new file mode 100644 index 0000000..786bdb8 --- /dev/null +++ b/sources/shiboken2/doc/dependency-pyside.svg @@ -0,0 +1,527 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + boost::python + 1.38.0 + headers and libraries - compile-time and run-time + Boost Software License 1.0 + + + + Qt 4.5 + 4.5 + headers and libraries - compile-time and run-time + GNU General Public License v3 /GNU Lesser General Public Licence v2.1 + + + + libapiextractor + 0.1 + headers and libraries - compile-time and run-time + LGPL version 2.1 + + + + BoostPythonGenerator + 0.1 + Binary executable - compile-time + LGPL version 2.1 + + + + Qt Python bindings + 0.1 + Target + LGPL version 2.1 + + + + boost::graph + 1.38.0 + headers and libraries - compile-time and run-time + Boost Software License 1.0 + + + + + + + + + Boost + Qt Software + INdT/Nokia + + + + + diff --git a/sources/shiboken2/doc/faq.rst b/sources/shiboken2/doc/faq.rst new file mode 100644 index 0000000..3653b86 --- /dev/null +++ b/sources/shiboken2/doc/faq.rst @@ -0,0 +1,71 @@ +************************** +Frequently Asked Questions +************************** + +This is a list of Frequently Asked Questions about |project|. +Feel free to suggest new entries using our `Mailing list`_ or our IRC channel! + +General +======= + +What is Shiboken? +----------------- + +Shiboken is a Generator Runner plugin that outputs C++ code for CPython +extensions. +The first version of PySide had source code based on Boost templates. +It was easier to produce code but a paradigm change was needed, as the next +question explains. + + +Why did you switch from Boost.Python to Shiboken? +------------------------------------------------- + +The main reason was the size reduction. Boost.Python makes excessive use of +templates resulting in a significant increase of the binaries size. +On the other hand, as Shiboken generates CPython code, the resulting binaries +are smaller. + +Creating bindings +================= + +Can I wrap non-Qt libraries? +---------------------------- + +Yes. Check Shiboken source code for an example (libsample). + + +Is there any runtime dependency on the generated binding? +--------------------------------------------------------- + +Yes. Only libshiboken, and the obvious Python interpreter +and the C++ library that is being wrapped. + +What do I have to do to create my bindings? +------------------------------------------- + +Most of the work is already done by the API Extractor. +The developer creates a :std:doc:`typesystem ` +file with any customization wanted in +the generated code, like removing classes or changing method signatures. +The generator will output the *.h* and *.cpp* files with the CPython code that +will wrap the target library for python. + + +Is there any recommended build system? +-------------------------------------- + +Both API Extractor and generator uses and recommends the CMake build system. + +Can I write closed-source bindings with the generator? +------------------------------------------------------ + +Yes, as long as you use a LGPL version of Qt, due to runtime requirements. + +What is 'inject code'? +---------------------- + +That's how we call customized code that will be *injected* into the +generated at specific locations. They are specified inside the typesystem. + +.. _`Mailing list`: http://lists.qt-project.org/mailman/listinfo/pyside diff --git a/sources/shiboken2/doc/images/.directory b/sources/shiboken2/doc/images/.directory new file mode 100644 index 0000000..e65475f --- /dev/null +++ b/sources/shiboken2/doc/images/.directory @@ -0,0 +1,3 @@ +[Dolphin] +ShowPreview=true +Timestamp=2009,5,5,17,43,26 diff --git a/sources/shiboken2/doc/images/bindinggen-development.png b/sources/shiboken2/doc/images/bindinggen-development.png new file mode 100644 index 0000000000000000000000000000000000000000..5931b126a2cf6a05427c61903d5a4525f53ac9b8 GIT binary patch literal 32698 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≦s8P4cyy^WNzoZb7YhQ*Hf>J4!doKW!i*Tdq$3& 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 literal 0 HcmV?d00001 diff --git a/sources/shiboken2/doc/images/bindinggen-development.svg b/sources/shiboken2/doc/images/bindinggen-development.svg new file mode 100644 index 0000000..591e1f2 --- /dev/null +++ b/sources/shiboken2/doc/images/bindinggen-development.svg @@ -0,0 +1,542 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt for Python(generated code) + + generatorfront-end + + API Extractor + + typesystem(handwritten) + + injected code(handwritten) + + + + 1 + + + + 2 + + + + 3 + + + + 4 + + + + diff --git a/sources/shiboken2/doc/images/boostgen.png b/sources/shiboken2/doc/images/boostgen.png new file mode 100644 index 0000000000000000000000000000000000000000..ae9d9fc3d02b406ed20f6dbfa91fdec38ff9f7bf GIT binary patch literal 153473 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 z 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 xi9?69|4C#6u + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + PythonType1 + PythonType2 + PythonType3 + C++Type + ConverterC++ -> Python + ConverterPython -> C++ + + C++Type + + PythonType + + + + + + + + diff --git a/sources/shiboken2/doc/images/genrunnerarch.png b/sources/shiboken2/doc/images/genrunnerarch.png new file mode 100644 index 0000000000000000000000000000000000000000..db1077cd0a521c0539d50c7af25a8aef79dd1413 GIT binary patch literal 68761 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 z zI05d>hLDBVWWdrBE(U`jQ6;D(gek(iBuRHH?d<9yN~tF3E5QIsRCN3xLDD}>O>i-y zg0{9_2Sg(2>@G3n$=KT)$38(}6trIFq(GiPrg1G;@&bPlY2~4N za(hOLBX(s+tzP1!Ia_Ae6k&v<#J`O^5l`?>5b$^<1H>8av+4s(tC-+Kt_@%gGhXQ| z&T0!?Rv$gKtBzo8?Zf6Ct%F*+-|mw^g$-DyyKx7&Me<$b;v?Sb+C3ydFVOfN2KLVh zdHMhNNl=oPk7@lI|GLn&UtK&d&J~uGgN@w?erng$YqevC;SLKfpm(`!_1?;Mwxj1> z7w)|;?{VJ(I`>W2LmO?OVraZ~naD;vBs`T}6rO=Jk@9eJb8|~rMjSh=LknaVDdew) z%G2%$=9$a5CGli03BLLl8Y5$bw9OeS59p4{$oGBDgPZq3PU1_hk3%WmI->QS#@|o9 zeq`2Fn7DmL=4Dq|Gji8fu)aR4<@S881*tK5!+zOW?^oPgq+0}hqNtRV?ew!fsgG-8 zgAQ$3Dq2Dc3ZI+Xmwo0X!%H&=74q=ntvOoAOG`>@0rug9gO3s{o~hg@rj?~!vU9o9 zJ*+uEz+*^;3VC`k9r5rN5=?egat3Mg?gDy)h5Hc|RW&t-6DQXHew*fppduNucg;sI zT<;??VW29tFtB^lIdkE+X+}k5@q+t#{{gysYwqMLCS0B-Ga@{E*Nw;Ic43K5Jr)o= zDmFfcL(X@L#Vx!JDVLO%Hkv<5-X5=lnZ)}>&mYUElfLk2xG%~7qtoBnGV6a!WuC1l zvR3XK*1m(kMP!+1IOIUXSSRHB<#GqVyfU}4VxaY-GYFVJMC(sL++&&JZdQ8V!>Q6udSn`f;hTOrP9 zxC!6-9m0bNPg@3j2k@oPSK4)Vr|!Z_kjbOpYk=M8-vWs8bqtoAe#+f3jZp z_4;~WjGt@UfE)}cVqHD!kXBEZ%B!%R-r2wbg}m1gn#ZRJ?B6f&vV}_1Ea^J$?*)MJ zQe<8X(M8$6JG%>iJi(~sG-Fzm3XgsKzv;0sAaQ;cj%WkXFO8}Hp8J)WM)xLgCP`7m zQ-Pb-%TRQFEv_Y~G(>~eyxs2rIzs#bqTK7T$gWbDxV2jEiM59EQIYO{!)PgO5GOXi z+U5B*Me(~VQ!&NB>koLDszZkB_KS6e;u*ymEjAo;Q|sR?c~i!6ITN;d#|Y-NkJ*c} zR zx&#_*KyCo&8&i*S6u(J5O6E_2suHPQns=WLV<%$;EHuDnDm5wwY;sP6O?7|jU!j|B zyn}w(3t0uwLll>k{%tE9*vIz2VfybFiH=kgyn3H)w_Hbs3MvmFih zdJ|J&Ft?1<>0e7JcY2z2x;til0KLTXa>1xckS_NXQ&_6B3|L$*clT_5i$no<1)PK3 zB0X34OHor}wZwpuMF=D4y`E_GP;YO2wMtz|jnNnY{u?^A2Dv3w2@tS=8-in3vyJ`0 zh)}G>yL|uW(|XDGt<|H`Pu;x!AaB6)dTJo3j|xWJ4yVyY&7&y5$JFwcefh`vORh3- zdr~8-HQ}bbgyL@4Z1v$%3*-k1ii&s3j!ruVMnnGNhJ~zp*jE^3utu~cK~Acer39Eg zQIGM53Fnse?8E1HJu-?ODS<2f%LM48-uNKeD-876cA3|p0y`xd_V*u`$n%kP_XD!4L(zh~RA+vAQ! zEJIu}8gD>(z2``^3zuJ*A3U(9p9L7A2E3-Kw;fg5 zP)x1bV-v?YCF)H@B6{i+oD{%pd49Gxw%;((djc>Hn3@~_me%dxG}k_^;Jp93UjUOzAjC9 zG38Rf=&0E3=2Zn!^?du?mYY}om4`CVBNk~)a0Dld9oq|?K~Q*ZZE3=XDVxr|siZMh zZ)tO7xUInOtzs+u|2_n^`T4ligu!y?I=dmut^ixXX_#JQ#uBf?ajD|6^4%^eV*93j zrWmNtb`FjP7wH;y6_tQjy_#yH`Pp>L`2HOvZHb#ty07JP%QMil^mcNn?Cfkmaq_}* zrV!p~x*(HIye)8^ofixqM|tPvOS+%62Jwl0!azL`iq9h{DBhq@gki0xWUC!rcKbKnAd)6l4Vuh913Z>fA{iQ%dt_o9ZX?DWS+_f2%PXmO8MDGh3@ zs%jb1O40M{O9Aqvja_4WRhtad>T7o|9aU;9Fp&X(G8Sx?5VhySv`uz4h*&u-3i5IOojFp1t?TYDwwq6WN}h0~!{>FQlR2;i`s) z!rHu~JAW@`rs2;Ahu^J>rpYKg(gn@hA=E+7xL0v$pJSlbpCjv*j*he$uvm4SDTAbWT5lenVZv5GX ztj4oOExcOK{u?^yA&pc|jL-ng6>rFzg|NaB7y$8jl3YHib;YdI!UxUJp%$r8Jq$FGQ?gP?S)*sE*@WLhU8qZa>_^Y-bF>rEn z%5t!spL8`e8GDUmR^$^bHwAVdUvF(D{FUWg>^DBw>X_-H5EmhR~)K#6>Ape z=Ctz7pTKccsf3Q9o zFm_O-rT-4t9-nRPGkI5oZwh`g{QOW7SZ9^H}|89^MITlqrE@4J67-G1U z;)RUEj2!w*?BMKOu49!|ACBZwH^uU+g-esy97Ks7;<=>5M7|Jx_q+1i_gsOIW|21I z(EkJ6l>H5Pt(|GWae=MoSk~Hlh0gcHClV%+Ra=}V>{*X`PioQrLyDA}GUFEc_*1=f zJjNd#fEIRku0;2rc$5Zq&o4bI7b!qLK+}8AK55|*8ydfYJ#y-$)jPGz4VXdaBOAuF z&MV0IasiztGoA>@a3HCYVC|?Zm67?j_er@SLa?h9XXkv*)O-6dvwf!oks`@C_xRIE zengF*vbxYnX(r7T>x&7u>(%k$%k^DZ2i2v}R&`-^Hom4h&VFnu1A86Q%+~hSN1Rnn znA)PEV5GJTb5d>OFA7^cvA$69w8`$6b=D@ojdvr;x|~Yt)gM(V<`^vdB>tK)iN%Ki z3eno(AT69)vlCJs=6>CT_6gJA{bZC1ru z7&fB=lOV~`eRHW}1Qq8eEHr<)qCD@59}vJv*VftD_^1&UqV@KKC}Jp_+_*^`2aILGREqpQTeD(ZcDNhw!k>N3W-hR2w zXD5Ckv&12%rP=qCdQww0xW|*!zxsfQ_ns?YJAiCkNqDy;oFW>+iQK*Tpd<((qGxm= zyn@-IH#M_ER6+&ezV}`NhvB*OmXh%cTAd%!IJFl>TQ*d(hA$traJGz%H@ynlRQ z8B3wE=(yf7?=l8n)PK`=-CSMmFM4d(lM)jhXIG|&LyN@@=?hX@I06c#CcS^qL;CXm zV>M^a^n9W_29e6l+;qk);Lz5_MqsvS>)?2kqV;I-J z9M5x{gMx#5hnH~T(?gn@Q}AzdigVu4R9FQ-(^y-RQ&8ACI)0-)YdDnBwn($j3M4X% z%@tT~Y4Jjth?>rVK5Jb(Y{)0mf(8)_gS$RzuM4bgnb_9*oCk~ttEZeX^tn;F@o}c01j`K)~n}rI*2uYkBC8YHo2`zpU7FA`Qg6rvI9h1eYvXv_Ne@l$Y|*Q8Rv zdFLqdBC$p5)7r4Xj={#(TF+5%O_feMZz`89GZSLnUnVv4ajM2^YlT_GsT|9la%^YF zFEs-$TQ|Z1^)WdyQDXTfOSPO1m;7B*g+RKQFX$janac9qa|aviKk=(v@ojxQLB0C` zi>N=t@+u5mjqH-so}M^4+gc%kC1@{@#lXP8Fs5LH3CU+7X=uMGXk@i~y?uCqx=TRN znFexacQ+;`MTnOdUv_d9J?U?)1Jco|uz&%YS>0z~JYxV?f{KAdFn)8a?xrCvFRwoy z0m-x5l zr@4*nZJF!>&7u;0_sn4YSEyefEFDm=EoRm(ZH~RnLt(?w_0}HvEGr7M<7Rkac}9cf zzbo=RVW{9uQn$3**xBgW#4z>c94;=WEn~6km{i=fm(Da9w+Xhk`~TfT0rq}DZ#+U*bTHY;=K@AOkkJ6eL@!us(^K!f}3 z^X=tT_xQB*e1ZruGo3eZ`HQ>Dh@m0G0{c(sN4ate86 zGuoSbW%oQ3c9IvhDJO|Z7vo#}HwkRE?b6{ELPBrilEh=lb|)jZ(|~({a*-(*!zgYt zKczAZcNlkFq1`4-?N1iK`+kz9h{vcV_!ff-&8W$${hGORr+A%QzZws#dcO)G2J{l$m1=g#;$OT^q5mEZp8EHNhDem&QVDw7Z*diP4(XoU~&3~ zb@IDuj4$7gU|N9xD&65?X8zFdcxP#831lQ&b|oAa+|4>(Y8prU!p_}%JZB*&@b;lrB5^dbd6@)j1OI+bzYYJfpXl{L z{-G6XkD~ikZ#!qS4-EwcrAcEi6JN;zthl$U_{wgA`Qdv^C^M?k))c?rdnT#l4y*5W zUw>0uA8~{VgRjlQq;B~(_PdenxI$giW#p5%d_exc!AyurQH=Y{N*&#BgLtd@quCsI zE{y1vB690bPy~WrEXT*k7Eiidu1#!Yiei7wNXyebo=>O#GA2t{EVKrXbO!kAL{5`0yh*@g#^pQ{&kROVW=~A_Q<7KAZJyA-qv9-bv04=_xW#c&sSmcEC48mW z*{{a2&;3SMhUo_GfzX@tZEc2@z&kJ7(~ON#D<~^Z0)qd7MV|pZVYJAk*&Bolw+nJ+ zvUu{(I5;-Wr_|}Sy3c9{hlh>VH1_8==bbvVQLcAclHSMcc%O;{M9{#}Ns>?+9j|A` zqo%IsQ5VWZ@pNyA`l3^%0(@2nw&~5x&Ck!zdkyGim6bya3ll$%R7}>|Jk6tkJIan4 z4$x~$Nx;CJiQpsoJ!sISSEa+8I$>7J{GSJnF*OHFSyR=0OwhYHqK1FpT3BxRBKhB5 z;MPWddwW7!nni}&jq4Fd4R#A7?eOr>-9rhDY_Y=p(o(iUaii%N6*wSYE-%Dg9`DxH z)_kN2Hw)NUHrLkvoM>`18NWPt9i;+Ugg_4!2K;K-O9IdVvR}FJ@$okqZJAWpRL|Et zGSDaECM$%r6q3pps@8mMuvigLHT@1|On_{nV6-v%*Ml4P{T)Bxy`NoN=^cdO+->C| zpI=?%wAUwii9(5t4}7_t`1<((=T3L|GhuEHs9p4XFATx*XQcWJ%mMhs%svMqy>x-m z6ku2M^pn!+ZT*HnBOc=cFO~$nGP|m;7{%!KZGRQ!KBD1LvKkx9X={&9kGJ_~P#bTD zY@=afe8T-4A~f9vc4PnWQtI(iz1@`v2_2m+*oyDo`9YNYGMp@W2k|QsOH@|&D}8d@ zg1r@FX-WcrAR^3doe}tQ1x3Z2C<+sk-@E(9 zm{|&Hm~|(u=J-N>(FHp~N|f3{ZbI+(v9Zz6(djMw!Xa?EVuC>;6?UKg8ctTjg5!3*t+BW7h*;Pc#Lwc+?T~c)c$BOx1E}RU;ef|_aAGl z+h>ftJvH&{T%BuWwXA?WZiGa-7ZlieK#|_5SM?=vm<~Jqr>2e!tzta-)nTGRILow| zt^FkgT+|><@LoPo-0&DLN9C>$#Se`RRyrNE|J^$=LLhtJEM1_~zQNAc)qV5LNK73D zJPV))7A{h#@>no-adDB8lN<3DjfFH1c(HER616e;@K!L5QF%k^JcKjcU*$%!dfa`n zwLNEKVcOi-_@zMdm6|()tHt?Zx!C&r^0qLqG3gwY^qP%XnuZ2<#!RVPMao2lm1#zi z_*%Mea&oe7tbZ<&sYJQT{?Q4T?p2;DAlum4^%*eN=svT9tpbKM8tey(|9NM)osWQ< zL_WZr9s!nlPQ&U(W+czO@bXS*47feiw}X2AqyB`z3uaEP{@o+dYffoxTm%vqR1D0< z&W@C;DmEk}BoF{Z10_|TWD;|JX@hgpC<)T9Zns>(Bt;HTO+XQvrBni(MEb$Ny}W+VEV8w4P>M))oE|k%QzN6~ z?Dg65g@%5wOP|u{bm923t)ztFa%WW-xWzs{jQ=Q^`9SA*%XRiK9vvOz8{mLmOXSKrTRRf&Yyuz2WZ+)#)BA_d=uNWzq1|7pQ|pl=ThEAByY(2G38z%&=I6}) z;d!Skv+q+iB#>CUSosi-2pk(@<9i^0;$n;pL?0FmSq)%+#Zz?7?kAe!5X!wjA|E3p z>;MA*q=h0*_J0E;(dZxR;k&TCrwK))ExX+u=ZO^47;h5|&MT{74`F97e%t193i{Wg z?oTL9CMG$-w^X73^wDg29z>t6G2J-90k{hTBuYZ8 z62p9?s^!jil4Hq11L#2%#0PU_g4EFMkmcc+ZV2Ez5-~8J5!5)2?U)WS zdbPnOfX1~IkbV>d`oH`Q)HRZXR}{!n?4ZLrFKJOxI`VutXJq8^RC;vd-OG{(WtRiA z_kP*qjrBFr$*w_`>dgA|DN%#@{=x$Ewo{Hj{ip8@HjxjpS#&pCPj5ZGcx8wF?;FEi z(8hwpZJXHq*i;EpyM*=*{~j+O!S=TeP|fTT+`0UszRjvL4!R0Ro~be zCY|)J2x+PIdYwP~8v54koHDGZOJ-iKCKk};G3T6nke~26gxEEsLKUh zjS>s?Fl_1~l zQ>`&IH`iZZvfkL=50)$9E19vm<+_X(GsNX_it~d((lIW~X=_WzF9rPEI<5qH|SlpFe~0pEh+A9JO?| zQw9J!xZAjtmMv1ayL+I2{*}CY82u_8gtW+3$zjhD?-=j@5D*m;<(3^tWQPPaiOeU9 zAO3(c-Nw;w8(=}e49wQvN#EdMfO}lC&XozI_i>GAd{BJj(?KA=rDicJHV=x3*jKFn zPRfCUiOKS|l>M^(Ufa(<7ZvS8BmwKIWp^F`1kP!B23Kv8zP*z^f?2vRYysei1UZ10 z*UMA2Hw`auCjve@Ld`5&Co(=|L6YZxD#h zG6wR*3BZ|F)}{s?3=^QnIc$HGnz*pAGAsC98Fi1$`QcBF^NYBB4O4TLc#T4KqXQbO z0L(FChT0Wc3xhKhEu|~g_`k=n(et{cx$4(>uRa9qOCC0p3hxJYp!k99CW-o#dC`Gz zpXPE|!(w7-tq-85ybR`-#KiWIg0@tMAlOjdN&QfN{rg_m5%+a`-N%l|m&Bfdp4GpZ z1&ZD3+O7Znv7B2K%937V3wM4Ay^WTSqq11~etc$gts^t_Wk)JKG=1uXrC}z|)aYC} z6mpLs-oGT4!ad?hce^iMAV45FHF5`H53TpIwGJJZo?lQ z9{xtyRm@T(LuTusAg^pblZ|ltk0x3K1c?V&@VN&?f||`UEMFSfyJ%~mxaZ--s(9S zhzLRBhEXj%Yjh#|G^@VgJq?Yuhv&1uni+nE*56sB&EHOW*;T&r+Eg%q4CptGkC)i2 zu)k(!^L6l)Y71LRqDzfYgWOFlBs5sM@|kLAeEb`6>0??{lnm%q!NS3juo7>@*o}ev zgifg&J>sd?o?mgdprI4;Reo(MzoL*J%ZosAAvnEbB5+^8HeV!(6b z^7Z8fiE+$dZwR9r?C^sBoROVFLg3wJI-#+WQu@~YU|3U<2V3uNp#ZxmM63ve_X+$P zO|y48R7xc?X8y-(Q6K5wBY&&4AFQjm)YH>v^Ex5}liOI?*rs`0zrY~l?^zIG3B&Z` zFQ$R{xgvR7#)w>;oHhOLeGgc{5hKdO-q(7zCo5dV_J&Yf>`C+fG0oSc~YpaS$o1`2&9F*&hrSEv|RefF1`P|e0OQW@;u zabJz5S%9e#xRF0IMaoc>ZkJ{NsP^|HslhIjf>%j|f9SGczC13lW=nC71B^y1EO-72 zC%`;8t@jev62*T&;#!B)1(>;}&7OF%m}<+hI|M*GyHluEqc!73f2w1wZO_(hG=S=1 zJ2EsBUcO*-?fA7_3Jf^J$Imb@&fID~EJVqS8UWxAR8~%D+SZmY-

;f`sUL_-iYl ziiW6$)y0DL1`6ZN{rrlzHyT1ZfP=`(&_s5fK)egqB4op}b&;@1DNu$)blz|(#XzjM3Oqs5+gcR&UYn76&tqh((` zJN*qFuVH|N|DeCqn0&-q>j(bu)-83F#0Go2^Ept5_VeA|Qa&pi>-xcw7_gqk`-L=X zq1hc%xI)@PgH@?nd=z3!Rz#_5^V-S$j6cZM6`e-pe;2sOY9iY?S!ghTnFo}w^*7A3$13CCCcm?)YStbs4zR}yO7bHb&diDi z`3FI--z7Y&4^oeSsjnY)t#}&KbDM+%Jk`>b8e#Mq`mXkg+ny$eEmj&-8v{9ztojYA z9rqY5KkszVW`bEzTXt+WV(w1HCq~CNb(CHgT)@BNcTok#14oK`960zO93F189??O) zL@y#LNkq<`a&bXVX#@{E7BQ;vPT#7LboSo0PW}Lk(WE359K50L(?&Yh){cDumU;sR zrKFY@BBjR0Mp|yY06zfeXLOES%wa=bo@3W*MJYkneByrg^?#WI&VQDd{aSWMcNKWw z9I&^1XGH_eg(CU}2Sr)OK`q>}vn&pf6yV{+%Fa%&w`Bqt&k*v3t3OJV#6kNGHu(7i z5>lrHGrX-H1eCm7^l;hOuA*|J&cs?L;Ek?tA4{4fG3{8~P%YQkytOv)HGTl3z3TjY zz|ii9oq?@zJPCMaQn|I&3Edt${}VJc{7MJ2wahwfXuGR20cLvw}pr109;Fm2O~C`qQ3Sf5gEkA~T>ZoeLbtVBuC>)W!chzrr(7 zV;V_kPdw-Ezui+N^gRUHkI4|h(uL+<;VsNyba0Zxbsj#_V&JNWh$KH%XFD&YhX)FM za2SlXXB2qt31!b|t}G*)ZKN3R=jP+9ubgyW>3*|MXAv|VqvY`AfL;jLds_E<=*-8< zJqM#D?yM%Ry-ojKr=GiJb@*#@c7gx-gk|H)LsvT zf#{k52GZaJvsEiHG%be}||6owj{<*J4nAL?d7XnZTI}|vEg}2ES5q_Oy&Y)yvy+XkGW@`(3 z)tAhk=Vd%H{~c`z{~NeY5JtHDiSFe zBL-T?FpRK;HZ-PK&cO{2YBL7%Fl-VW5X6F{bOwJu(mxo3qt?dR7ISt3?-= z%eXx-RNSwrFG|QSNtBb-^sSc+?KIHjD=RHInoR6S~!&3C87t23TLhdd!}H0(HU<21?y&V%)DQ3J>VM+gc2$4n#;;L{_)Fpa|f-# zpQu+;3&KR^neFi12Dl;+x4w;|pJpYG8hNeUGC+X9zQfIg>BFpv1Ce@Txp7luZ#k87 ztgyV`cT?!e{5jkoM(}I{il+Mb5AzMd()f+v(t?)_2R{tL_QL)6O95Sa^0y|V!_OGr zby&biu}2s6?E1p^@?{h)A-&6l{@sLbW%*!9964I`YG%=f&hDSaulfO7K1D=@S7vj% zwKvA~D*o+lT&?FfXD>57A+d#07e^b$RVtJS*tGs&#GDjbn$Bz0Ggdg4{&Fina37Cj$LSlp{Pqd9cx>N|BfdB=JsYTB z5>6gZ)(?CGOJKwTsslYe1Wv6z36+r)wd&`r09 zm}C5FM@$+ESvAYB#q*UFHw2W7t z&U0VkxhaUDTS=9J9S?k9Z`lhNYE`Q%<8gE3 zh@8A)G(aq>cz$O3IxR9?oDHZefu72x0RSTb3(9&s#Cd|*iQ4-8;`Txcxp4u&cPIBx6csjH`ePlOqnQnpTieQ;Cch5R%lk-lSXT*7NT*+Gk=-TVb`LL6V7LU0I9sZN)&g(kibbw}T z^IBTl_`Z1?^gHt8z7udhb3>R0n*#dTf%Jrog2?EYIpidl5YG+A*8P?KrntgQI zt>s{ga}0Xg;IwkPBH8HL0F+YF2I9m+Aq`;*72F$g_fLeVtTFcfyNR6RfHpJMntX{x zuk#^Pi4w&1v$YcBsdDSW_9|y%^ioko)RT0dNt2$bWc6j90-hJGSyn&Lj;*wMWRKV- zFn;*CZ?eb;nyM4CD^9cKtg(4}#Cm-CgWrdC>ZG;w7jB0^9R!cw+R|t_WO>9^9SFut z7;({u-UYdUL}d_oXc#<**!D>XY<>CxY#?c_ums8x7CFM^zi&U-bDf4bO@N%gtXT9R_$Aq)orhzBe|AQI_M zzhs)4&d}~Irkc*woe!Ts``@cWacOCVA$~W z7OK_tt%-ChG`vsWD4E`oZNYJBaEXM887M50>CRGr;|}<*fl}xA#*xgx&PXb05bOzH z>x??#N}~vuZ-eNRjxFP*9s`hrGsI`Cc@Pw3)w6>D{(fYf4kCMYk26cD%w5`jmXK&LB8R zd`O)Qa5knQSg^7{N)&ncov{$SV8Ba$sG4>mme(voa|x?>t?4732ZK?QSEN1ANYJLi zmpW#2`@Hg+l+jjxl+17&>EUol8aakNZ*059?^>6U`5eb`c;NfB{ANhJq^orxpI^LW zrTWsu_F10=@#*i}GVfgCat9C3Uh6T>9H+}eJB8bOAS>GXNA`Q3Ag3}h5893RY9!<1 zer!+_Jl9Wg~gHO8L?8_9M9}@fG_plBt%h0<_Iq(}S@+&qu+A=ahduhQ>`vZCO#B#%# zY8gG#y;9z%j=?Q2Biz)a8I8Bewzj6-q1H+4B%l?!Ew)xFjs_wCVWEB}Vf+_r^^i0I z;=(zWPfcq8@y(Mf!cuq3_=v{{S`^?Dt=+3v1xV?BPAiRDc(s|gFCJ1iY=R4*c!rua zdo@0w{HaJ((_X{8n8}sVZenV={wEm9TSVO(<1z9W6?(wE+khVSbJ{MSB!5|!f(;1= z@-bRS_l+R%u=%Fw+4mkE99uP3{cgMhFCJ4XlVc|%%e!sbZ$G>$zBn;?FMB@NaoR7t zmDU7)JyOZrLFy)8TafR#dVJ1{TA_z0o#6IK#MN=Z+U&F!Su0O;`l+RV8q*Q64rH1; zrOXs8u(mP$>DJ8B_(#^ z&=opex}Jbu*t%A!egpcd%QLArHk~ET7b?1Cp`+&N@)(c@-{6Caq=sYvc?z;*WTLaw zFYjC4`u^;)79g#|NZ|thB@_tEZn=#)N&j**0NFOc6EN)pYmlaASNftL`E8sW3KZvt z0ILc>CwsI`03qZHEeIfD6P6*5Hy}3r5MV1!T1bW?txSVth}Q+!bbtL7K;1xAQN9ME z5Ofh?Xm8ic=A*5X0|_;!6zi%EZRPWt6Bt_IR;#I^C1R@ho&P-oFZJPLhtg~jCEpXj zO{M*sK_@IYf6mX(s+4w>7uUB>B)yBm5@s=~rP6y07_&^LqY|RttDygPgSP|*-XUZ| zW^*k@!UgkvZ73KuHZuOSLD1E%{}==xN(7ktz^QW9;yFWSRYxODL#9XpieH`O6%WoNjvQT>*$^sQ;0kU7vkr zv-%ox{~`5M5H*lZ-ql}QDTO9 zqy_dxfm?Aqb(KeT`UZHVxw*>+NutCb`1Yp+TJR^x)f1hfVk650d< zJO7}j6B40j3IecWyAVl2^$swBNn&Ah2Sq?{ z+^8lQN)_gZUc7trY5wDXyw}tBcF%BH_jl;E%}U&lFZNo`cZvWE5filhFS6}9>AG2h zX!|!X(z@Jwchu0j z`gU&x|Ja(NGTcuU1`^!T#@H(XUhB=iIWDX1pJD>D+7$-BNszQ`o$T(~7GI&^I9Y8i z^eT=1?W&gNtlRs}e6;A3o{k4FzU_VIOp-#@$nJ$e*O%wr`>Ph|$^E6K*ZjwT{HbN( zTNOoOu?yF&QDI2h6bYr{u?VCvA*j(sj0CS1g}q(hL;`{7g7q>(YuJq=b?=3tw`Z;E zisDXxdp29$@X%VA_)geK@p3OLldXFAfh9WXMDQUA;vG@?AlKB7&htKa&aPEqQ7d?N z<~UoI{-)v3XRUhAIjZkU+WDJ3Ugx)RTTfp|VAFW0@39$U2L~+Wt%wN8e*QRx@LG9f zc-DW&l*b{xh(!JTkx=20Cq}>QdLhsBU9dmIDMSu`uKS1^!vrYjIu4-d+eDM_<(Zc(@_5u8;PjPOB;VeLqyK>cam-JP7*bHu>K`%Bqq2nkWbQbEGZ zn4n(Xh7DHsUzoy+8FTIR9H;Extx=n<{i2d0+Xd$}12lvDtJ%WSi+qNf=#$x#^F>FE zB+JFsGSd^!e$Cs7WfBBj;kNvx5qj`f+)+wD#}XI!(>7%eV^ zQMw*{G>ZK%Q-?{~gBGpA=Op>)LjJQuS-s)Un-`U_==2%JnYvB9wLeVL{IKDU=n>vG zL$Z{A&JKTmA2i)LyCElhXrj|oBa@5zXaQI&nA*Yh@k zxz5}J{g&PL*j=HjlWC8T>Xf@jb!^;K<>B??_`k{x`bV^zJC?#jGwpfdNIwXDk5|#{ z4GL%0Ez0LE_bFz#@6Kz8&S32XDj3c;l?%x@CxhCT{k?-ys#pTx=gKYV&PF#V*VFve zDcIU8623bNp>qAnopVoiuJs+_LxkX!9eX=wJtbj-u~&Xd?u?m592NKV^7m#7Oc<1_ z*!2-t^;~mnk<-@>;>Z=3%S)E%;jNy){>?n6oV@C|Y$&%y$LnM8Z4;)|auH4uCQIsU zicTSarne%2_273(n!L)=sI0MkNx*XGXmAVz1)#|iW9f1;21LF_aQamFxO*H{{6G#m zJS;qdv5p6vWQx%Z!K$=?&6f4UCNg5Bm|Rn_rpe!@hf+{Ks}#1C%y;L6|Ni4gtCp>f zv&@c4`!c4uY){a;e{Jb*orcI z#2=o9IFaLveDZDh@ofl23SBRf=oa_&Nr@f!!G5tnt342TJTf9RzHXmIkPls`L(pQ6 zT4-vHtXsx6KF;S(W3e{3_*s^OCfi!$GMt2OPTZJXM5=Dm){Wvlow;&D?B_n)+9_UC zB&+|Xu8NQ(jJKJv(A^A?=X^N%_-U$bqT#c@eYICnF4@w<>t#xjr*i%BOS&ToPjx1a zzR|CmyI{Yg$D*Gc8H_pArw;6q%xB%Z_rKH8OP^UImBJxI7v3&cA<-oHxj_KJ>!mrW zz>O=gUQt%QIA2`FXt$YOONIMq7TNCVoxfl?8nIk5tDjRw<5nUo6$XQ_T^WN`@gzFOhRA{~hSyj~*h0t$OKjI7_s| z0#r74+7aG|!+C7V(ROc(_oQW?8=!|d1=%~L`s_IS!KS!_C#?h|M6QBOSD{D3VjghG zsgsF!RS#q8t~Sss^Z8%H9BHg#v>5eSHQgBfB0s8z#_M0e)ZBJdv%vzl&c-t_7RBPV^BhC257XqjKi37jESRk=-pr zeGgwhcf)Xy&^uMe)w6{-7~Bm32Yc~f>RUm+|r{J3AV1--$zp<{`U7Z z^zzM4f#-^#2oU#rFIgmWv6+#1ceASq_)Pdomk%B=SQRIzngH+*(|l@Iy|OXVG9{Z0CT5r&f?0iYM{@>CIdyU>3;w>mau zoe1P^6Z=d11hK>)N}cK4H!NOSjygbOvz1wJzNK@ae7(QpVO``{D?Rbb#rx;|A+%j% zV2q#R?y=01Efq6EKI$*2wetY!kJwma*F=SIkHUGHz>Royy{dtr--O;~xUS)8e9oat*LW`d zZe~*V{htXdgYjP{7W;ohjCY=L37P^AAY^_Ul&Zxb{z&a(cb`|7lX5hrX#cwWZjPT6 z`qRQVVolMK?J&=*PhkfX8%&vHUEOEb&9CMIKJB9i#Kr{Wr*vcL_$R^wdJXn@)(jW3 z-H+c#=YYw4zfR@N@9tx0Q>8>8go9pe`>+?y*>iux@UJkaMRJQ2o6R&%M>lN zzqID~|K7 zP=sfC6`?9NihY$~m$X}-0?u4FDucUr8_!sQd@#ADKK^6!AN9x^1ZV;_6JjEm@S`do z@b;83S_v&Oy(~R#AFu$d=z4KN8gSh3dR>2ZU%_y4U|TLgxSp+!e^9qv#otHoG%%0< zn8^L8OEXLB-X%GbVS@_s)vMFuK_}LRl8P?8R=~W^NI=Gal!@BSBKnMto;bw#WWPOw zx>;`!;%hrn>G;~YO$jQO{t-f|{m!zBbfi5bdvM1g{ zd~J~@7bNSKEaEp2wDp z(G+?9{mvcpjI;HZr!7u7bIC!H=LUCMUy6qp{l5Xb29H_ulYg2w=J0}o7mUPk)IjTAm9?0?V3pEq@z6(+}jJ;c0$eeBHbUJb>46ib8 zHC_w~!kw@Cz6j=lVy4D9DM7kN^ZXKDc_Xkk-33cH5Rnh2x8@>xv=GB&eqkz_yUUgt zWM#fBi5yyPV zw6u;&hB98%LQF9(bLzv`+VZ$c|K!qCUQLT5o7(ie@1%}Uc@*57Y}~ZOEKQwBDo3R< z1#4x~lv_k99E-L40YwWxhQURRa2n&xVSqn$umYc^tFw!rz&nhZ06cT?Bs=4<$_`2W zFZRYvgWaABHB}mwh@3<_H1@{m(8qst9Z%Xn}vzW7<;hJIz0J9z(6Z=t0s4I~t|;R`;wp>j3@%|EZk1JcdK zX_F}jw&XCZ(@kQF7ULDFJj2WU3Tk7|7ops3FY8e^F64wCHuq0;rkynNBOd!K{_x$} zU4UGF%ry)EfZn({Z*+Y-tq&iZH%9C9RUSq07XlB8$o_s&7CA?@C#35R%|qdjcGNq zL!R5*DAMbxl>x(um+a1KiMVG_1BU8zzeC5GlB+i$yNPENjjrlTE3DS@7O=&%on51gUh5?+ld7De4;chmDLC0H;8537p4b zGlqEXbCZ?LTm9xfhyupAGZ-(zM?XE8ewHip{|#+iFlKg&8{tivlu}I+aYWWLGaMs3 z4HXpT+@8Y)9{4L|Lz|zHlIpLbqVEYt3CgEW+A^y0!O2An=)+=9ETAQ^He2wwFT4OW zyLd@!<$sV>kP91T)02JF$f<9~2v)dAJZ<^%;mv43@08C|pGz$rgCf+trAJOqHYB}{ zioR&Xrrdmx$ME*pe@bG^zn^23bE-Wsf;Ve)bNMLPdNFFaLdvyF9dAhlE9`>a=Vr|`|8P}eZ z>2D21f4aq8?LKw)emxC8_7Bje%B!u8`&ICM<;msc)x8}|FK0f!A3gIr4Q{hod|pBq zdTY@AYlaqdps{nhwPM9*_X;q3gH%UpFx!a%yVj8pO55^&t<;OoP<2n#$qLy)GP{;Gs7OHsOuQ zt0AUgT7^NEH%M@C=Kzwo!rU&qqHkh}@xhv#Od<%9O-) zVcu;5n;Ag3sWtCNn;MeKbrrtF8$Da;hHMjv1Mf8+Gkfy$93(2VZ&x*;KXcKBpBsYS zlh3)2R<7JfXt5#j#bx1VmFH)(M>Z`fQP*JEXF7NWc#KiC-yNi%5vi!C-iA?w3)_=d zQk`Ajm64MbbB%BJ;FDEF36#dq0a!HP8NcsC+yV-Ot4v9IbFG=}8`z&ZNx4)&Kr6%y zIQtFIz4Ht^oj-_Xd?K*iA_?^I5qel!H=E4~2`v|z&szp+3L_RY+X@Hj*6KAko}4xt z;*{df?vXPYEUy@iC|y4BL_&;=jx;*|W%OEV3x;pPoY;r{+4|1)ZY&V=|F%b^SN@DG zA|)&Qk|6IMo{9ZA#RsUtuG`T~E}ErBD+!V<%;$&Y+C{&Mbh`e)A{?!(LQa)sv=pU6 z3;y$#_AUrd5t3VkReHH#f{2EUMmS+g`nF2>b)F+=s+b->S5@y9EeuFWBi#r{N_R_3gCHOs z(%l_`bPGs>G)Q-Yba!`mcf)=7eD6EP{R7_fivxkfK6|fc#awgE<<*DCwZMxLivHUluj*Dwzaf#5z@{9_zVJD`x#xp*)5%w-L5m0R!taFD&heX%x zt^en~(h`{*LuXc<1h|bYUI*snjlfbb1d}6GvT^`FG>NA<>)VRjNM&f+#)PV%-as3@ zg9gP9~G0g38zK*fnPiB0>=>MTUWC1_?teus+XleKgoYuqidH z2}$5(&EBo&GPme&*!ey}KsV~zRu1FET+;{ym)AB|>(O1fDzT@(C0uR!!7Rg|%#eu+ z=S3;pi@$Km>Ya0X&(auC>K}4irjWKXzn5p!=Ad3NGB(!yMKy?%wyeA(o-X zV}B2zNfCP-3Au@1ZLaZ>=uM=p%*I!>iok*WCE-0({BpLg%%Lg_M!F+E4&~<~0}H8Q z0^~%|pn+M2pug=1MhGFJr49iq1;56B%{HB&KJpuvUG&Pm(|?D{tNU@Uevj|!S_vX$ zNJ^wwgLuphFrbh3vaWguY4Cd09SDkYBP| zja52EN86&6zC6~9H);UU7_$etiCncN*c$Ml~=7Lx~FGIE_Kc(8t^7) zo%Cw`6}*{4O=ls~gVqvh1nLTH?ki1Tmpu}Jv*mY}6TQpOBV$~uxX%UV`K*s&TI#6iyOC3SYGH%u4cT4rU2sPdHx!{rcd}oG!!}VlFNx^P&f= z7IY**<4%K6C@b!BO#^umZ zle2i=3*1u}I!ka4XXiO_IXjeTr!37aC$@iSUhHq%^i!VsYA>L{NM>CS@zeJY>e6 zUi5$~%__nJ1%E1R%^0xQik;Gq;Ik0aF0hH^9Iku`T zqE_z2joNY#;kOZJv$M(@{ydB5`_Fd-2Z(By)t2XFHl+Ltc}MXXeBytLlZ!T~^LQ(uzFywCBGqC~D|P$21gZrAtFyALGCrLH-({yqJv5V;Ek!i}7$M z6X2d7noC^_9jK?lkpq752?9XwPFxH$^uebP&6c?cN==MrcG_|>Hs_COTSf!HO%cWB7~k4z%U z84Y|M(y_KNnPvmph?*meF>6O?$S;wxHPQ`my;6l_2QutWC4YqORH+%wzQ3H*hb1ka zjdTu4$;RQ+5p+%Qh6F8sf(9H5FvsDz?%gdEBb8G;9N>($us~5}j16Y?M?Q-PX4!hb zPoayhlHWqSKowca+%9?Vj91O5)0o10zbNG4!1oYyZOWs5X^x4RZ@;U7pgtD>4 zaSz)x8?$|Lm;1Ct@e4v;PfY)&E5xPc`G{990;2eDkLI6#RH(nuVsyFE>;z!yHHT9I zcSeh>i~#3*7aB5A)K}R|Qyb#nz*MO3_%vVBVta}c)Jc4A?+674-*4~^GMkh{$0p5> zEl?l=#Arpm`d4mCHoBMoS%np}VdHdi@N;2u96!LRvSE-uAvLd7KMy_UIi!lO?dS2o z_h&BafdI!W>>jX2>=_P4|RT@f^AGIC*NVsg|~p^E<}UOdLjI$fzmIVaiY#^!Pw%QZJv< z)r-^UzPUP=eNl?yMCtO4kS1BH~?t89ws<%oNzbXYM$ME*;{BqrEi$A?MHRu@D z>7^h3aA#4G;oW-t3Gt{qQp0=GZ%X>?24U4=``a-dclFYp z*Wx`nelfPa5-aG{!C$gPkOK8*+xth;*Kbgbq;-xz_HQu)t}AmJbJJa4GKgj|Y4KwP zel>!oBxa7RR3qtZTn*m-dd-354p)JlJ)JRj$D31dReGZB@V|?-x}US3V!y_b$Jf3n zMj%ISJq)dYfT_N<%G8pFzk8doE`q{?a+>}U zT60<-7Flq+oTCAd8`xf0nj-(pbaNe6(D6Y(>cAK7^1Pr`t84M$xvkwQs2*o5I|pNQ ze%N~S)YULi+V@u`cqI@g7P#1Lgjw1OmTKqS#(Gy zY_0%FU;2u1lv5KSf%^w%eysTtfux|`>hHUC1vJm^$1(>e9ECZom-(^+Fn>|G9(Y*e zqt}SEd%?k_W`)vwTWP493+?NBikv6p6j^azGoG2oIf?BmY`vCLZnn)$)L>tY* zr^mI#D4qb6Zo&9P`{H2ArxA!0q7>i=5)zZpcd>lJ`(eR#ylbS)1apIWqtIk;E^pew z;&>8HYq0(A^yajqYZ<0qCSrVZ-Pp`B(69K->*t?p!y<9EPD)DN#WOveP3V=yjpl+% zm6KkX^}0Noh69%xODW~s>{nh}-ZMN8-i+kq;MI(wwZX`!izkK1d(I5+#ZNMExm@!+ zEJZg=lk{fb2Ekvy1&+d2BAvI4sj_ppA4OhOzG+El@Rx6Gs)_2X>86C zjBW(}@4V$*m%0XMScX-$RGh0XzQ?D)SCrQ{9#flnd~kY9@XrbVgxL|+^|8#N zGFvs_tAwo;KXWjHg{Es-B~?EjKYx_q^mhfV>7U*|iP*7*M5(wia1BTPcIClGl=qCQ zxBV5PVVgF^ghNYA=m(m>OQqIYLOc@sLxn_$0%X zX#DqfB(Px77L2vOZL(dlf|Wh*;+;)0WF*d5aj}*{Byc^M6S>4al&keBDN3*p`{8^~ z8YAg)kkS15*JF0uajYrPmpk6FB61@F>?0-_CW{1K)G+H$fsn|{*)sLeR*`0uXshiq zS6x!2xd@7U(-d;#C-X^Jb?x+)z;aYL$aezC&M9peo_#z@UFY!;znI4Te)95hH&y$b zXNn(taUgLrN)LklGX2+Mry7a<`{S@AdB;5^lRKKrUK!q__PmVNFK*`3vp+x26j}@6 z+zot8dzeLoGpzZly-$)=yl zS;>lP>T&f5ajxc=?c#>A9u5zik2O_C8{b#(O;61Y(hL1;&!z`X#)A2vCf-hR4Cw;+5ajo=Y}HxqGna zc*g2eP7}NP!F2>sJ$cW+x8RgczB}MS;b5udB`)6hVQL|~ zEygn%;%iR$;*$lJy5)}P$H145y4&kqgiAw-rzU7REpdaRG+taz<*T>XP{Zj(f5eJ6 zPOpWuw`7* z{9l9=etPa(V*&Eq`}Z-@iKn9QlnBit<{P@*5hRt=b-Pi&w>ei=%>tBZ+q#9)@ypyr zI6zRr>zsJeOcq)b3#Ms>=XHymq+?K-<`Fgj9K@~Li)APzguow#&S`klTj08e3dEJj*UBzPk6J+TVS@t=E#*0G5k0- z`)hxFBGY>`cn>ffDOp!mU%5|N)9+h%A!r8G)4^;>aPA4N{Pj!pi22R&`gw&DPdG}V zrgfkwRJ_BudEsP&dV=neZb-Es4S6oiD&C(+llU!4QQ9Gs6@e8m@MY3k7XY+ByLrk^W(d_Md9I)5)gcny5(`(GqlOPE%K;c5VjeB>jBaKu9^qKsj}pS? zN}r^Dqw@)K>i*)MQa|B}53W~rZUvU!H<>jzNE+NO%aPV(kTG`t3{#J zfMH0x$MogRg)1|(gnjYy5M1LY!gGihAkrNlWKwDJz{K#6?Nm(b-Mrr!kdzNR8^AH1 zdy+<3x^GleDq#$-*h{|H%$w2AWzpNLg80ZN{RcJFJ{uf>WPh5U4q!ils((QuQm}G6 z`GvmPiz$8%3^Mi5=Hkm2Od}%}5enpgQw!rvI}?Z-vv*3^=F9v!I@2C}&~)xfkL2p{ zqe~uNU*VsZjAkwXlVlaBi))!z7|oM znmb5gHB?OVElUZ(^8WbRktx$j8hgiu`wAu=-Mro0q0U3_mNRhkp~cP=Eyo0Ae%ATn zYo4uV%a;Tvp8j-zqFKYo;@&2Qn*Pa_{)y*3gKY=^z2wQ@p#(h~0=xxnefC3)a)+@m zaK%JRIs>iwIVrYgTdw69$X?(%J)w&Wv)%WI`$~*-+T>lcEJ51-jk`PgH?`@EoU}zy zl>}w{`D82abUYYWL$4oOyhKsYtkSuo-0N;PY{-ca5{~+!KWje4%#-Tn+LX0_0Zf7b z%GXB7uH;)3d>m^|r5K#-W)1mULyY;;7Ok^ z$*i!p`7SFyFIhOS;0e`XUcr$47dmx#*E%-PT0u)sJGWlEnBzWcbG)lDqoG1(Oijnw z!4hToIDAMJxnh1_Dl1#koHx)YQJFzG77I_ZT1{=PDnTQkEyurJ-2a)Ukt1!yb|&K?+x-OOP?%kTWgLer3?pR z80qKEpPTTGvK6&Gy|3=Y?1_mST^~YEJe~*E>mws4P1(g^_K4k%hv>}(b;cV@a{GG~ z@!9Xzo+NH8ujmGc*cxgCM0(Pxdxy%Jqmnk4YWSNpPV9}gvFRnQE#8_h9An`AJ|MtU zY_i-?&-&RjTrxDcSYdiUIOA00@^H82eKkK{qoF>x{BDK4_RYJsiuF&0{-xfBd3Y`Z zUJxr@_r<*bnj;sJy{lV5dqH~hbLA0A|8?{IM@B-6h382#NeBJgNh(jRMjdvj+JnjX ztY$tBGTw3P=67?ZQ!dbI<=ab2VP4c|sVYo%0naEPpPGHqAif!FaN;)Tal)){*%s2) zmg=~dZybg!1%*X7w+-5Ady1Us_pK=!Jf%fPpHcYVxhXH35CA=tuz~^$ zqpM#^ujSF)P2v&ZTOpsYiMSN`l7GuxVI@zR$Xymnk+GRm@S>OFg*qwR>fQb^ScFU3 zKH!4X!+pjzBbr0K{C75=^~p9;!JFk~X1{gJ3IKWAI&7n}I;nHd{l{(r%+BHTN@Ns# zAL}~$O2J)!(tm?%$#^_l{r&j-fexlSTt+!x^)gu6#+IOjsBFLhxDc~b3a_G^>^BVj z>ffhna^KU7yFo*R22Sb}v9@bcb9k>KCxJTK;b14Ey=sc4q~MGFcXP;TCj|ZbI-7eN zny-dKvyBOBIC_D_Sv1vCX1|)3U1M+Af04X$Kw}qcNg*Eg&wV3k2g1vs{ z%HLqijwaNYIJ;cCBa$S~_E;3}GlfYt6n^nD4>V-U3u)XIBT>%TI*V!lvp&TB-^syd zW2&KWbqJ6EY&IvtF*8R;#VbmCrox7ce{#2Ffc}Be7G_`bF|FV+sN!?paL-z5ML6yHW(SK0^wV0wb4V;A6rrFip zg*3-mMnFURsHPd2@HFhr3)g8QV<2(kMWzUVY{Dggw z*D`TO1Jk+oOW`svz-0+S|C76U+^DwO+l(|$bOTd%6)5wY&l7?`f;CMW z7wk-s3b8)`*%A_jhj0^hilbs$`U7IUS32L1_^l)uf39mF=bZBJ(w9M>rQTQGXbd z%uS2`kXHWwZA8!h)r@?nh`eIt>&AALs*%lA6~&Hb^;&{_kgRbBFmfw0t43VsPoF<& zefsR9wg+Z{D6=bxQV?=tqi^n6UmBkik_Nc#i^A%DSoO+YLLJ0EyWSR-RVd;*&_Omq z6(bD|3qmzs5+AnX}Sw)u&1T=7Zzi7mxogXvURTcJ?mn7Z>PiIRT-2ifIU{)EQpOt zg-CV!)__C+cjcp023IX{PC;1iJ$Cy#VRZ86v$xe-M-n#~6<-xpW_y)hBD$s|{Do;Y zQh|27t}kbFbLyReEG#HoL;d5RLOF!DtXgQ7>%2Kx>M>hwG!{L>r3H^3X+pgWnom(G zII6Djj{1&~=K^HkdIxF=8rz?LDqjOq$?g@dvarmaT0xQy-P4MF74Z=)CkFx!2M7KA z&cC=TihU$jcIT~1enu02botJ>Z$vbGU94k{kp{ojgH-_N2LRSgsHcb+RfBuhOdjTq zJTiFPc#o8}IZzv_G+W6G=hMe376%Rb0^u)z2gU0ZjL2;45#~>BJ@fcKy{tX;TUXK7 z;%~pRPvyo=EqWikxWCxTLg4M+kOc5&$;Jvy-#;rbW`+~$p+)5Q2khbo@A`*zZlJGj{R-`8r({Fl>Nhkh>kJSCO1390cu7fo8JB}&WYhH z8I#`=x1R)teJf!s4bC_*{4QUL&F_x8=WP+k!_*Dvs%2Z{pLOTMYs5CaBO~l4KDGLd z&mZsqI2+y%m!w$yHH_y|;JV|ap-#uc?-Z;t$Blu0r?X@2Y5tV|5V=CVgbPPkRJ#0a z^Y{1WvSAD`MHQ`)213Bko5zQNSWp6xalY}UyQo&ruRu$!Tp$Q0J>m*`|N8&H9+v8k zoL#im#sjztp;E2+Qz$=r@*o8rmfN9-_wmM8eJ7cLOF0bu`<@#!9O@yx}yo8@=G5#~96t!8y=1rAU`;(NEu9H6eRL zUb%^#vr)p0|jAL?{7qrRjl zN!;(zHr!ZGA z%<5?Rod??vu6p=Cs#3y@S(K-aS@#j*%!;bF8gL&#LOHLcA#R3+XiNw&wbJUlgP9#j zu5?Wy%N+ay&HnbDn;3gJ9T`r5w_oHQWtQan-_K)**k6j-ju0~%%-nzcJCN++xIc_? zvaz0rYUg46-W9L<@uBYxVFNDYA}C^YS`vTC(Vey(cEDPWvrEgJ?V0zOnoXW>`F@YE zVq}^4=zgpsXX@FJ&$RrPA zH2>-bWwj@A;?_+MVQOn=Ftx(3UB;7nd1OUq{en~O&jbQ|LvkfsOi=GoKYRF}tBAeu zO1~C;M=L!B^A|P5e@h)y6J1?z97FL*oJrKx)tQ)0hs3N+%sx@=GO;s@QN}2)WWTgm zFjarb8jI3O2v3e7*v>sFjN&Xv2GiXVdYS(%bS>Jj+yb2tLI4i;*JGlj@cjdA-#&(3 zqplRJ0A?VOh4~w6d{h~%L_)xEH;zSky7mH{5(5MCXBiPCaON-#?3VU(vLt+h-Sz#k)ZHvJwv36}RZb%D*`jwI_Q!@iHJVcP3-1Y5~TtK^uaf@S^onIB#I|zK3-b!5zom z&ugp3F;ONBFQ8vM*Z>F7>*X2>ARb>7$AhwxxzU@!k;a^@76=u>@H|DX{!mx==JhY~ z9wUCYIM)jmLBMTiE5TH=hnkImHFhTx^Xr`a|)#L8!q;Z{VTe8;n$#A5=syxh9(#xsCM zG67-L>?s#;&#pV6&T0*2G|gG=7xyuxZxp_240X;qXH4v=U7rV1%f|9O-jhS{aXr6R zd1(j%EE%BnPIcn-OVLvT(v506^eX*gqULJX;hxbQ@MK10JOh4~ygjlwm}zE2sX>t; zVq!?Uf$)oG_bwVs@>T$C62y_kiF#*7&;Aq zp$OUwnXiFvsg{8|7Tw`0aK#j@kP6O}R6>>(9aHSQ))!H#_k#0?4&1x)^Kg?P=@DPF3xX=$j zqY`KCL!0ksz9I#a2>1Idecv`bZQDl;LJH~xx&d(nD(4;Pg8Eq%dVup2s~UH)F-?;A zGUp-SdBh63VLa6a7B9>mcM~{(NM=XL9~T`=9wljrbi$uPnobJZ2mcXgyjcfYG{k2{ ztw0}`mDCDi0o59gwA`Ewtl9kux7%vs*>KC0KSK)oQZ%KsJAw2ETxo78rJNo^N=j)g zJTD`>9HYFsoM~3tfTS~${_q0&i$UdYy2*ruUuK^{8(y!3jf(yP>7e#yP*u=dY$mGY z=WRfl?Tq-B3HjH)mB>cmmlb7sGjZB4!OwdFfK>r_fq>>iiIn66x@_j&Is-{7tsTqL zKbW6-G!G(GL^m1760waJNjaS?djWKQ)hZuP_!j_uDvXkAaf}#uZbB@jC5Iv|@>J7J z-bumofp|ZAU{XO1JdkuFKan|&C)U8{SJc<6;FnsNsJDmuZ(Ll`Gj+K>>N6?rn18+~ zj&LI{?lvZLv+lh}Y4_-2zTWk$xFVh|d3iF(v)@^L%T|z#`*5ko zrjE=TdHfyhF@LPM!1;7SEe0(LQ3m?`{)S=}bG3htfJVE9EY<$r0_t8ZH%#o1Y)VZq5Nso z$!n=u5{Ob-@dz6bahDecITJ4g`d9m&x5H|y5s!d`$grPP5403m?lVXQyso%LnrHmR zP@yYay1fRAF_q)lneW?30a%24@re|XcsaBt)lk)&%@UusRC)K?7yUsKN|Im-2yU#hg zMyBl>7md}eHMZKXSP7;S4XsAbdns(*+0^Qjbp4%si!^o29xYbkTa#mE%v_d_MKZXq z-v7Rqf_(v-{hH2CF=uajqLaLmR&E}$hgj;_13yhEub%g&E5{xVF$ry&qwR%$~md z1Ok9<5z_X^@`S_781CGjYixOpDX?JgeIym7fSiL(mEIm3IcI9#GDpPn7WOtNyl>qg zjh)i_=zo(t5Wv~TYu44Pqsv%eadw%t4xl$dnS%gtp_ z=2oZv>e+G5%J~NLU5CqlCffv3@dr3S3NeijRM~TE?D>};4P)R=CFNap`W_Q4=Ou_5 zH(c3+1pT9n1Bv31_$4bHY)ysdQ?9}z=4OotYC*)sjj(^_b4KSI}U4_M|@ z7$C58j~iZDp-`QC@NQ_|=y!>FhsrrnOq;5}i>i2D9eSQ7*kofqGiLQ9m8IRroA_AVOjN&(mj%U^3aRMubQ@QMH zg~@x^^MH8j4x{8x6JsRLviS?Lj<>$j?pX?CAl$#*QnVzT?I<^pK=KVZjcgG$5g_aV zf?;o#v%viEW2QZ&T_stxR9QuH!}0cqA`2b{M*{=$r7dmU zqI24HO24cx>6;xqKY9COmt0?U`k?6-?!#8ld^#D~ zOvJ(QpT6%b;x`0CKniX1U*8)DBx#G*rnjd{x$N*z6gjDXB#Rj>@Cb-QWhk?p9ju** zmbx-x0)ya#{w)k81DORUk_A~n%@EM?2;Ww3xPLQ=&%VcvgM?l##1Ds#gAV7@-;N-K zm~U-CT1y?6?rgyXG-q`l2E`3Uz(&eKj$%q4u8`x5rLvkys|Jlq0KUN z+0Ty#?(TZ#D?ATT&qTxBjFd8&- zv9#!>_YZI{Aj1w>e|>E&5njsd9-fb=E2~3!@P`vWUFJNgiI67LvtcljOO=%MM5Y=} z(S6RlK=!0~_ZAS9kG6TDnpRHd!3Nlep2d;T+l+vkV3CvcBgW-za1|(dgqh&x6@4rM z@{r6)4-o?7-)?qL2|q87{MdXNY_P`mb4Tu;=<-X+)YN`nHB{cF%@oO;bN8?goWUZ% zA7~hQ$;gn@sp(ju^JxrNg!%WgZG$__DP{6kOc>)78ckR*?DW5;P#(8*ZcDC*YBRp zQ8zl(&85vj2G8wwPwnT9a$My!x2fmMYT8RNUNH{XL}Z<{?0ZxF?IB_#^y?ni+!cuS z3g(j_mBZL42-#nMXAG!^0>}46st6b`94a-l-{$c5e^=*N-?TU&@Aa?6c5uz{qHp7f zt8e3}v*9l;iZfXIj#Zvqgw5EA^-!mPxlAdyuh=Zvw-broqgJ^toy-z@=Snd zbRKe%Z(h_`m(13lpEghKEYP0tY`~RnpVprwRYYHWc5%wufc>f$1aRi$81F%$NU(F=DVGA!y8A(;kAvlLvQ6e3G_6v9Y zOM8QSBJ$MEbC}1ZSj9^j{W+*kroF#!cx?A+%K+pNqic`bx!aeK=JYjqyOtiF;30iF z`R8;LzhQ9_R@r=k_3%0Z0$z(Anl~SYb%4spr*p5A!&H~UlAba}M@_X?>7?xrQ6rU^ zOvNnaprjD87e1a;Ir}V2H1v8!O=q~HAv|l%vpRVkof@y2E1qxUWMt>g@MpX3o4x)d z?N3d@#WI^jCx1XQ89VkX=HEEG!jwXQ8`bmIzfXpKMXO~k=$FhIA7pR$9foUM!fWac zzCnNtOwc!3>$B9%=+8?6OCTc`E(}r;QPF2?C)%6&&N9#A38OjgU9s;byD#GP*6 zGQon&`AfEuQ}K(UUDgoV|88*o4^36LVlYx7ghoxvC|o#!PgGb`ke%Pun_pa?17v@t zfmZ-g7h;lgIwmoFt|Z6;=*aM-mMq=9K3Ov>Gh=CSZCF4X1$1wbtTEi|EQYbs+0o(c zfgL#NLR!{d9<9vca9>i~{ZuW1n-7il2==3U4klIjD5-p+dZzCkksZYir0Ar1Q^;E> zR!CvK&M3^3^;SoG1dM9V-sNSXr#PHN{|n{*UAGgpne0}e5JqV z1Zua>k0$}Q|Jl&-1BA$Wpn|fBD4_mp5^0%QSbe|ttbDB>Vn_spDB~0rwO*6JJ*=rv zARk(B(kZ~F$(R4PKp#w`g;~tmy1>P;$9X(Y>>wTS$2tpm2V&W)0!E(@$UjOMyyN7x zpMK)}Zt|(_$IlU#1Xm<4=k*J)($A&O@Ah{}6%wea3qNk8Mc)9o*5%ylDFKR$;p^di zjY&S%E4;LX7igfO7m!o`;RDu(riw!>0oN-G>{3k`FkS)%a4eKLE<=vRjD#o;YD;^> z4Lb(ijqFx8A)jX-;J`S?B>N=uLCd$>p*XHzk!_J?ppxw4zudMng`yarSl97@6uD$KROJhm_2k!MgKFA#!basW@ zfU=LzZU^81%r9@XJs-bn9%><7ST46F{!DQvSaLubhpi>ZpI6?=kj>CLThZ z!a=yICmA+$XdMHiXMVtPsw%mAd4nb|l_5|lNwSM7!hp>|;r{+iLU==ZA&?a4UjP#m zD4(lg!YNJ>p$lf*kn9=LD+%jmhBwz@T=$RiPHnDNmlbbnlr*Vn=`#Oh`-suuK>iss z+g+c80s7Qt3Mw}CcC472j^)l7`GYP6YX3d?{~kTBN#b4Nt#Z4uv#Hgki?^=^_GB+KA4|lA$)W_Jj({-c0S;*N+wkVhaZ2DaTC2lGeFqoVd zbtz!~j7<+vib9HNNgDVObXZdAU}EXUY1*ldr{R1mpfm_6th0Tvz1Ij(MuC$@`U|V~ ztcP^KAJ#iC`9{CPAQ(AvYT@=cw8+E!!|QKx*Pnskf=7kt9Q35IO8`&$gASu!*CLj< z6ZZnIL2<>l{~jZ*r1%f*`cLEHvGQaHm#@2EfIH@R^{kPe-U^!9gBh_RVFXMlqY@J; zPYnnXyb^NRsQ~mW?kEpcWuWZj{P}mD7PtZC=wv2fs3)Ee#CUgj-~jawg3XDOi66C^ zF;^H`*f`kr4NVOVlIe zW(!J+1ia!AuiLO$ASW*~M9sjsJ=REUxTcEu_5v~MZw&$<^=`5}(GvsH1m#DBAtU3P z%j7pL&s*lcp1$DRQcW^q`Xof*wtx(GOlV97pCcH+B(6_cGkfTBe)IS0heb!YX-tpv zp0C@>USFIUTm>Ns3|ZY)y%r4DFLwNOdCc!cc%$pggVo3oR=$I~*WDmx~Tfn$5U^HXe=eF(7PG zm3p=Nry#27#3tKS*;994PO{0NJBs%)<}v9DO1!k#e-`__7w3DR%3C0 zOEr?3-BP~%C)IT(sVe#k8ZjyghjCh-n2We*p?WQJg!x5 z909&yESS#+0;j^>}QmZtdS|c}Kkq}u=<{fdt5d_NpKNq43cQh6piJxi2Nx*=@@OaSXy>`55HTm4RNu`ij z_^e~kyTE$^6o6}zHU4)hMYG9E3jMIx?JvZg7$V)Y*40I`c>bSnJ{#wx{okJywNkM{ zfGY+ws;+d~PdP0hD5VVXJ&fQ_27tp`DQNnF^`JbZa@O5r&18O7o7OPh|4i?E#D2(bRK-$V_I!>48uFdK8>`blHHd9b zwn(%U1yG0tH^%USVE7I|#K5^1J-U9F^XGOz4&JjF26}=mw|j_Y1ZLn#H?eQfPg`rq zI|*@I2&Rsl{#*n5UMj3Ecp}odBjS^BVgh8_hsMHzS5^XpyJxID!Eb~0zNhov?v0Re zCwro-FbK%t*`jjLnm^Cpz=65nPlXfjj&ZsH>O?SCc5_SIq{+XBJ)O!;GWec_IwV!X zX?<_MEv%0f%(ECi)ubyVC4Bj+(ItXGygswkT5-|KpuGKik^5Gz{juY-l=Ql8zYxgL z%b6qHmy5zE={&+f9R4*Y?P9#mOO1)pjZ7#p10=@;SmLcRmS(+N zUf04m-L$)R26UZ+!5K&eMJ>7W`tR6-n*XX4C)BFXH1vh_)%eWOA=4l&7OO#GsP^!n zzMOW)5o%0t)ZgnqKL>tA$Wnv|g4>^)S{BoT%^9ZTn&D7-ULxO`+Oy$G&*4Rpk8SNe z%LU6UNT#fZ5=J_l1qK^eK0^L!DM$kopUe*}Kz;B#0~UK6MXKy}ao)22c5I&OS~Jcr z&O#&>Bje8Qoy-cm4+vCv2a>{v5iwyCNE5t%8c7kVOqD_!&{ftwXtM;U z(D^gs2?oZy4lvb&f80}mn5TAoD4dpZ3BB_4yi|R+`oGPWq9xojgF?LVt`RWl^t!`= z_P}Yco9rugl)uOEZ|r#L;C5H^zEIn@z3;vjBa0p_bzec*IYgg}k@tQKd(AJsB(($W z#9vb;-AG8#X;{zN;C6h*R4>N%0T_mEE}KZ+L^;4V0g`PD0s*(jJ`)&eBai;P3xX_I zxriiaaR(W$Vn202_)ZXd^<}>C=1=}#E|k?3`*_bky#{Z!QoiSQGGig&bZ)MF;$oMR ziVP8_rYkHiAcqYocS)VX$H|vO8C(l9V7-F;9l+1F>0u{w=(YPY~3Zk@MV= z`@8#_-5DY8 z6CBtURIImLVWrV_#@@2QzmH-Qcx#B$PddN?LFy<>3pRI=k(1e8-A}<0)4h5k@m9_C zSVO#(ZL5y%Fh;ah5+CFR&VSRU_E!%FNDvL!x4+{`%Fvj&Ac&?>cB^=*s;b=xIjuAa zTOuCusfJVkNoZ7_&i$&6`UzdXpm7oYM^T(@`U*F>8wuh_0wv%4*q%je$|1;Hs>DUT>9c9k^ew;{g&eU zj#1X*__srv*$vxda&MBhD~&05R78o@)lcw{VPUwz7plWqhr)P3z?zwx1CRISCFoq* zIQq$+<6SqE8zCLL0M=anTz->cusOS`qFpXDb}|fHC~Et089A8;bd`E>kLLr~drHVa zDU`L_xsBPU9xJ4C5+sADvyATZ36oL1>Q%d`51Y?vfl0|TTAtmcy7Y zW6BL)yBa`BLW3&YDecS{_kc!y+udKQ+HT`MZQ-`>VDi{t zR26_1SP#{)SYWSU*8nXck4^Tp<)A#R(hy!av0rww>xJt8JDAQ+lB<9Lp*xp6px{)F z1e*$ZHim(2L>S_00P{IQHo!Fu4?>q1!+pd~vQj50JjDFv&#D?ErkMCIZanpHY@jYb z>!^z(o@v#+oo8$LpahS0|n6;7GXOy=noyBYtSuDNX-YK zl>auJ@f#upu3m_bw!8E1!#TyVQFF(V3r_N*yI8hd?nMW)#&_1&0Pnn=Gq0r`*Y9jA-+d+<3nGM-O&n0 z@&r@h`I-c-o{la5x}f5}2Kc2eA8`;kvRRN!UgHOC$Nzs{PUQJel75Hj|1>2``{&ad zsthP94LlJ{FmitOlVQ%o{lz_}C$K1kmrgD{06D7L;@y?uM&B1HkwzVjGXX>E+fP`c zEm=R(J|08}^3Yw|nLHm@2qpFjvs``kp--6qEwuIc>;n?}&yI^wNl;yTp~68X zy4<>|5NiAm-%=|?TpEcppGOz`WQF0M>9ZsPpl+y`mY|Z5r}5zk@lRq!MVIZACi@}e z+;{()m=qsh9HEG|OphxH_8yn1xbGi0aA`DYp^kN!)z0#|)zrhVg_b>kc@K(PIZ4q? zWRBS?%gkb18kQv^teR}P2o&>}Ask2aCz2^g<942+A+fZ3^?6>r(cS2=Su^vax$SG6 z3$l-Q_Q{u15y@YU%%4L9PZY`BI{Tu;Vod&8pbrhWFXWaViEDe!IbS?FiV!Xrh41Ro zgnYDO*Wqt + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + API Extractor + + + ApiExtractorcommands the parsing andbuilding of the data modeland calls the user generators + + + front-end + + Generator Runner + + + Generatorbase class for front-endoutput classes + + + + SpecificGeneratorgenerators written for anydesired output, e.g.: HppGenerator,CppGenerator,ConverterGenerator + + + + + + Generator App* loads generators* setup API Extractor* executes each generator + + + + + + + AbstractMetaBuilderbuilds the data model with informationfrom headers and binding directives + + + + TypeDatabaseparses typesystemand stores information + + + + Parserparses thelib headers + + + + + diff --git a/sources/shiboken2/doc/images/shibokenqtarch.png b/sources/shiboken2/doc/images/shibokenqtarch.png new file mode 100644 index 0000000000000000000000000000000000000000..35941337395952bf91c5201fe62bf47fde0e41e0 GIT binary patch literal 17602 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

~c;jDn~emYq^4lt&0-@fX0`ab1aE06lfx> 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 iSTLImY3&m}2I? + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + Qt for Python + Qt classes and functions exported to Python + + Shiboken + Generator that exposes C++ classes to Python + CPython API + Qt 5 Libraries + + diff --git a/sources/shiboken2/doc/overview.rst b/sources/shiboken2/doc/overview.rst new file mode 100644 index 0000000..97ef2c1 --- /dev/null +++ b/sources/shiboken2/doc/overview.rst @@ -0,0 +1,46 @@ +.. _gen-overview: + +****************** +Generator Overview +****************** + +In a few words, the Generator is a utility that parses a collection of header and +typesystem files, generating other files (code, documentation, etc.) as result. + +Creating new bindings +===================== + +.. figure:: images/bindinggen-development.png + :scale: 80 + :align: center + + Creating new bindings + +Each module of the generator system has an specific role. + +1. Provide enough data about the classes and functions. +2. Generate valid code, with modifications from typesystems and injected codes. +3. Modify the API to expose the objects in a way that fits you target language best. +4. Insert customizations where handwritten code is needed. + +.. figure:: images/shibokenqtarch.png + :scale: 80 + :align: center + + Runtime architecture + +The newly created binding will run on top of Shiboken which takes +care of interfacing Python and the underlying C++ library. + +Handwritten inputs +================== + +Creating new bindings involves creating two pieces of "code": the typesystem and +the inject code. + +:typesystem: XML files that provides the developer with a tool to customize the + way that the generators will see the classes and functions. For + example, functions can be renamed, have its signature changed and + many other actions. +:inject code: allows the developer to insert handwritten code where the generated + code is not suitable or needs some customization. diff --git a/sources/shiboken2/doc/ownership.rst b/sources/shiboken2/doc/ownership.rst new file mode 100644 index 0000000..f3744a5 --- /dev/null +++ b/sources/shiboken2/doc/ownership.rst @@ -0,0 +1,153 @@ +**************** +Object ownership +**************** + +One of the main things a binding developer should have in mind is +how the C++ instances lives will cope with Python's reference count. +The last thing you want is to crash a program due to a segfault +when your C++ instance was deleted and the +wrapper object tries to access the invalid memory there. + +In this section we'll show how |project| deals with object ownership +and parentship, taking advantage of the information provided by the +APIExtractor. + +Ownership basics +================ + +As any python binding, |project|-based bindings uses reference counting +to handle the life of the wrapper object (the Python object that contains the +C++ object, do not confuse with the *wrapped* C++ object). +When a reference count reaches zero, the wrapper is deleted by Python garbage +collector and tries to delete the wrapped instance, but sometimes the wrapped +C++ object is already deleted, or maybe the C++ object should not be freed after +the Python wrapper go out of scope and die, because C++ is already taking care of +the wrapped instance. + +In order to handle this, you should tell the +generator whether the instance's ownership belongs to the binding or +to the C++ Library. When belonging to the binding, we are sure that the C++ object +won't be deleted by C++ code and we can call the C++ destructor when the refcount +reaches 0. Otherwise, instances owned by C++ code can be destroyed arbitrarily, +without notifying the Python wrapper of its destruction. + +Invalidating objects +==================== + +To prevent segfaults and double frees, the wrapper objects are invalidated. +An invalidated can't be passed as argument or have an attribute or method accessed. +Trying to do this will raise RuntimeError. + +The following situations can invalidate an object: + +C++ taking ownership +-------------------- + + When an object is passed to a function or method that takes ownership of it, the wrapper + is invalidated as we can't be sure of when the object is destroyed, unless it has a + :ref:`virtual destructor ` or the transfer is due to the special case + of :ref:`parent ownership `. + + Besides being passed as argument, the called object can have its ownership changed, like + the `setParent` method in Qt's `QObject`. + +Invalidate after use +-------------------- + + Objects marked with *invalidate-after-use* in the type system description always are + virtual method arguments provided by a C++ originated call. They should be + invalidated right after the Python function returns. + +.. _ownership-virt-method: + +Objects with virtual methods +---------------------------- + + A little bit of implementation details: + virtual methods are supported by creating a C++ class, the **shell**, that inherits + from the class with virtual methods, the native one, and override those methods to check if + any derived class in Python also override it. + + If the class has a virtual destructor (and C++ classes with virtual methods should have), this + C++ instance invalidates the wrapper only when the overridden destructor is called. + + One exception to this rule is when the object is created in C++, like in a + factory method. This way the wrapped object is a C++ instance of the native + class, not the shell one, and we cannot know when it is destroyed. + +.. _ownership-parent: + +Parent-child relationship +========================= + +One special type of ownership is the parent-child relationship. +Being a child of an object means that when the object's parent dies, +the C++ instance also dies, so the Python references will be invalidated. +Qt's QObject system, for example, implements this behavior, but this is valid +for any C++ library with similar behavior. + +.. _ownership-parent-heuristics: + +Parentship heuristics +--------------------- + + As the parent-child relationship is very common, |project| tries to automatically + infer what methods falls into the parent-child scheme, adding the extra + directives related to ownership. + + This heuristic will be triggered when generating code for a method and: + + * The function is a constructor. + * The argument name is `parent`. + * The argument type is a pointer to an object. + + When triggered, the heuristic will set the argument named "parent" + as the parent of the object being created by the constructor. + + The main focus of this process was to remove a lot of hand written code from + type system when binding Qt libraries. For Qt, this heuristic works in all cases, + but be aware that it might not when binding your own libraries. + + To activate this heuristic, use the :ref:`--enable-parent-ctor-heuristic ` + command line switch. + +.. _return-value-heuristics: + +Return value heuristics +----------------------- + + When enabled, object returned as pointer in C++ will become child of the object on which the method + was called. + + To activate this heuristic, use the :ref:`--enable-return-value-heuristic ` + +Common pitfalls +=============== + +Not saving unowned objects references +------------------------------------- + + Sometimes when you pass an instance as argument to a method and the receiving + instance will need that object to live indefinitely, but will not take ownership + of the argument instance. In this case, you should hold a reference to the argument + instance. + + For example, let's say that you have a renderer class that will use a source class + in a setSource method but will not take ownership of it. The following code is wrong, + because when `render` is called the `Source` object created during the call to `setSource` + is already destroyed. + + .. code-block:: python + + renderer.setModel(Source()) + renderer.render() + + To solve this, you should hold a reference to the source object, like in + + .. code-block:: python + + source = Source() + renderer.setSource(source) + renderer.render() + + diff --git a/sources/shiboken2/doc/projectfile.rst b/sources/shiboken2/doc/projectfile.rst new file mode 100644 index 0000000..aa703d9 --- /dev/null +++ b/sources/shiboken2/doc/projectfile.rst @@ -0,0 +1,67 @@ +.. _project-file: + +******************** +Binding Project File +******************** + +Instead of directing the Generator behavior via command line, the binding +developer can write a text project file describing the same information, and +avoid the hassle of a long stream of command line arguments. + +.. _project-file-structure: + +The project file structure +========================== + +Here follows a comprehensive example of a generator project file. + + .. code-block:: ini + + [generator-project] + generator-set = path/to/generator/CHOICE_GENERATOR + header-file = DIR/global.h" /> + typesystem-file = DIR/typesystem_for_your_binding.xml + output-directory location="OUTPUTDIR" /> + include-path = path/to/library/being/wrapped/headers/1 + include-path = path/to/library/being/wrapped/headers/2 + typesystem-path = path/to/directory/containing/type/system/files/1 + typesystem-path = path/to/directory/containing/type/system/files/2 + enable-parent-ctor-heuristic + + +Project file tags +================= + +The generator project file tags are in direct relation to the +:ref:`command line arguments `. All of the current command line +options provided by |project| were already seen on the +:ref:`project-file-structure`, for new command line options provided by +additional generator modules (e.g.: qtdoc, Shiboken) could also be used in the +generator project file following simple conversion rules. + +For tags without options, just write as an empty tag without any attributes. +Example: + + .. code-block:: bash + + --BOOLEAN-ARGUMENT + +becomes + + .. code-block:: ini + + BOOLEAN-ARGUMENT + +and + + .. code-block:: bash + + --VALUE-ARGUMENT=VALUE + +becomes + + .. code-block:: ini + + VALUE-ARGUMENT = VALUE + + diff --git a/sources/shiboken2/doc/sequenceprotocol.rst b/sources/shiboken2/doc/sequenceprotocol.rst new file mode 100644 index 0000000..26ae3b2 --- /dev/null +++ b/sources/shiboken2/doc/sequenceprotocol.rst @@ -0,0 +1,29 @@ +Sequence Protocol +----------------- + +Support for the sequence protocol is achieved adding functions with special +names, this is done using the add-function tag. + +The special function names are: + + ============= =============================================== ==================== =================== + Function name Parameters Return type CPython equivalent + ============= =============================================== ==================== =================== + __len__ PyObject* self Py_ssize_t PySequence_Size + __getitem__ PyObject* self, Py_ssize_t _i PyObject* PySequence_GetItem + __setitem__ PyObject* self, Py_ssize_t _i, PyObject* _value int PySequence_SetItem + __contains__ PyObject* self, PyObject* _value int PySequence_Contains + __concat__ PyObject* self, PyObject* _other PyObject* PySequence_Concat + ============= =============================================== ==================== =================== + +You just need to inform the function name to the add-function tag, without any +parameter or return type information, when you do it, |project| will create a C +function with parameters and return type defined by the table above. + +The function needs to follow the same semantics of the *CPython equivalent* +function, the only way to do it is using the +:doc:`inject-code ` tag. + +A concrete example how to add sequence protocol support to a class can be found +on shiboken tests, more precisely in the definition of the Str class in +``tests/samplebinding/typesystem_sample.xml``. diff --git a/sources/shiboken2/doc/shiboken2.1 b/sources/shiboken2/doc/shiboken2.1 new file mode 100644 index 0000000..e017bd9 --- /dev/null +++ b/sources/shiboken2/doc/shiboken2.1 @@ -0,0 +1,73 @@ +.TH SHIBOKEN "1" "March 2010" "shiboken v0.2.0" "User Commands" +.SH NAME +shiboken \- CPython bindings generator for C++ libraries +.SH DESCRIPTION +.SS "Usage:" +.IP +shiboken [options] header\-file typesystem\-file +.SS "General options:" +.TP +\fB\-\-debug\-level\fR=\fI[sparse\fR|medium|full] +Set the debug level +.TP +\fB\-\-documentation\-only\fR +Do not generates any code, just the documentation +.TP +\fB\-\-generatorSet\fR +generatorSet to be used. e.g. qtdoc +.TP +\fB\-\-help\fR +Display this help and exit +.TP +\fB\-\-include\-paths=\fR[::...] +Include paths used by the C++ parser +.TP +\fB\-\-license\-file\fR=\fI[licensefile]\fR +File used for copyright headers of generated files +.TP +\fB\-\-no\-suppress\-warnings\fR +Show all warnings +.TP +\fB\-\-output\-directory\fR=\fI[dir]\fR +The directory where the generated files will be written +.TP +\fB\-\-silent\fR +Avoid printing any message +.TP +\fB\-\-typesystem\-paths=\fR[::...] +Paths used when searching for typesystems +.TP +\fB\-\-version\fR +Output version information and exit +.SS "Shiboken options:" +.TP +\fB\-\-disable\-verbose\-error\-messages\fR +Disable verbose error messages. Turn the python code hard to debug but safe few kB on the generated bindings. +.TP +\fB\-\-enable\-parent\-ctor\-heuristic\fR +Enable heuristics to detect parent relationship on constructors. +.TP +\fB\-\-enable\-pyside\-extensions\fR +Enable PySide extensions, such as support for signal/slots, use this if you are creating a binding for a Qt\-based library. +.TP +\fB\-\-enable\-return\-value\-heuristic\fR +Enable heuristics to detect parent relationship on return values (USE WITH CAUTION!) +.SS "Shiboken options:" +.TP +\fB\-\-disable\-verbose\-error\-messages\fR +Disable verbose error messages. Turn the python code hard to debug but safe few kB on the generated bindings. +.TP +\fB\-\-enable\-parent\-ctor\-heuristic\fR +Enable heuristics to detect parent relationship on constructors. +.TP +\fB\-\-enable\-pyside\-extensions\fR +Enable PySide extensions, such as support for signal/slots, use this if you are creating a binding for a Qt\-based library. +.TP +\fB\-\-enable\-return\-value\-heuristic\fR +Enable heuristics to detect parent relationship on return values (USE WITH CAUTION!) +.SH COPYRIGHT +Copyright \(co 2016 The Qt Company Ltd. +.SH AUTHOR +.PP +This manpage was written for Debian, starting with a help2man output, by +Didier Raboud , on the 26. March 2010. diff --git a/sources/shiboken2/doc/shibokenmodule.rst b/sources/shiboken2/doc/shibokenmodule.rst new file mode 100644 index 0000000..150998c --- /dev/null +++ b/sources/shiboken2/doc/shibokenmodule.rst @@ -0,0 +1,79 @@ +.. module:: shiboken + +.. |maya| unicode:: Maya U+2122 + +Shiboken module +*************** + +Functions +^^^^^^^^^ + +.. container:: function_list + + * def :meth:`isValid` (obj) + * def :meth:`wrapInstance` (address, type) + * def :meth:`getCppPointer` (obj) + * def :meth:`delete` (obj) + * def :meth:`isOwnedByPython` (obj) + * def :meth:`wasCreatedByPython` (obj) + * def :meth:`dump` (obj) + +Detailed description +^^^^^^^^^^^^^^^^^^^^ + +This Python module can be used to access internal information related to our +binding technology. Access to this internal information is required to e.g.: +integrate PySide with Qt based programs that offer Python scripting like |maya| +or just for debug purposes. + +Some function description refer to "Shiboken based objects", wich means +Python objects instances of any Python Type created using Shiboken. + + +.. function:: isValid(obj) + + Given a Python object, returns True if the object methods can be called + without an exception being thrown. A Python wrapper becomes invalid when + the underlying C++ object is destroyed or unreachable. + +.. function:: wrapInstance(address, type) + + Creates a Python wrapper for a C++ object instantiated at a given memory + address - the returned object type will be the same given by the user. + + The type must be a Shiboken type, the C++ object will not be + destroyed when the returned Python object reach zero references. + + If the address is invalid or doesn't point to a C++ object of given type + the behavior is undefined. + +.. function:: getCppPointer(obj) + + Returns a tuple of longs that contain the memory addresses of the + C++ instances wrapped by the given object. + +.. function:: delete(obj) + + Deletes the C++ object wrapped by the given Python object. + +.. function:: isOwnedByPython(obj) + + Given a Python object, returns True if Python is responsible for deleting + the underlying C++ object, False otherwise. + + If the object was not a Shiboken based object, a TypeError is + thrown. + +.. function:: wasCreatedByPython(obj) + + Returns true if the given Python object was created by Python. + +.. function:: dump(obj) + + Returns a string with implementation-defined information about the + object. + This method should be used **only** for debug purposes by developers + creating their own bindings as no guarantee is provided that + the string format will be the same across different versions. + + If the object is not a Shiboken based object, a TypeError is thrown. diff --git a/sources/shiboken2/doc/typeconverters.rst b/sources/shiboken2/doc/typeconverters.rst new file mode 100644 index 0000000..6b29bdb --- /dev/null +++ b/sources/shiboken2/doc/typeconverters.rst @@ -0,0 +1,291 @@ +**************************** +User Defined Type Conversion +**************************** + +In the process of creating Python bindings of a C++ library, most of the C++ +classes will have wrappers representing them in Python land. +But there may be other classes that are very simple and/or have a Python type +as a direct counter part. (Example: a "Complex" class, that represents complex +numbers, has a Python equivalent in the "complex" type.) Such classes, instead +of getting a Python wrapper, normally have conversions rules, from Python to +C++ and vice-versa. + + .. code-block:: c++ + + // C++ class + struct Complex { + Complex(double real, double imag); + double real() const; + double imag() const; + }; + + // Converting from C++ to Python using the CPython API: + PyObject* pyCpxObj = PyComplex_FromDoubles(complex.real(), complex.imag()); + + // Converting from Python to C++: + double real = PyComplex_RealAsDouble(pyCpxObj); + double imag = PyComplex_ImagAsDouble(pyCpxObj); + Complex cpx(real, imag); + + +For the user defined conversion code to be inserted in the proper places, +the "" tag must be used. + + .. code-block:: xml + + + + + + + + return PyComplex_FromDoubles(%in.real(), %in.imag()); + + + + + + double real = PyComplex_RealAsDouble(%in); + double imag = PyComplex_ImagAsDouble(%in); + %out = %OUTTYPE(real, imag); + + + + + + + + +The details will be given later, but the gist of it are the tags +:ref:`native-to-target `, which has only one conversion from C++ to Python, and +:ref:`native-to-native `, that may define the conversion of multiple Python types +to C++'s "Complex" type. + +.. image:: images/converter.png + :height: 240px + :align: center + +|project| expects the code for :ref:`native-to-target `, to directly return the +Python result of the conversion, and the added conversions inside the +:ref:`target-to-native ` must attribute the Python to C++ conversion result to +the :ref:`%out ` variable. + +Expanding on the last example, if the binding developer want a Python 2-tuple +of numbers to be accepted by wrapped C++ functions with "Complex" arguments, +an :ref:`add-conversion ` tag and a custom check must be added. +Here's how to do it: + + .. code-block:: xml + + + + static bool Check2TupleOfNumbers(PyObject* pyIn) { + if (!PySequence_Check(pyIn) || !(PySequence_Size(pyIn) == 2)) + return false; + Shiboken::AutoDecRef pyReal(PySequence_GetItem(pyIn, 0)); + if (!SbkNumber_Check(pyReal)) + return false; + Shiboken::AutoDecRef pyImag(PySequence_GetItem(pyIn, 1)); + if (!SbkNumber_Check(pyImag)) + return false; + return true; + } + + + + + + + + + return PyComplex_FromDoubles(%in.real(), %in.imag()); + + + + + + double real = PyComplex_RealAsDouble(%in); + double imag = PyComplex_ImagAsDouble(%in); + %out = %OUTTYPE(real, imag); + + + + Shiboken::AutoDecRef pyReal(PySequence_GetItem(%in, 0)); + Shiboken::AutoDecRef pyImag(PySequence_GetItem(%in, 1)); + double real = %CONVERTTOCPP[double](pyReal); + double imag = %CONVERTTOCPP[double](pyImag); + %out = %OUTTYPE(real, imag); + + + + + + + + + +.. _container_conversions: + +Container Conversions +===================== + +Converters for :ref:`container-type ` are pretty much the same as for other type, +except that they make use of the type system variables +:ref:`%INTYPE_# ` and :ref:`%OUTTYPE_# `. +|project| combines the conversion code for containers with the conversion +defined (or automatically generated) for the containers. + + .. code-block:: xml + + + + + + + + PyObject* %out = PyDict_New(); + %INTYPE::const_iterator it = %in.begin(); + for (; it != %in.end(); ++it) { + %INTYPE_0 key = it->first; + %INTYPE_1 value = it->second; + PyDict_SetItem(%out, + %CONVERTTOPYTHON[%INTYPE_0](key), + %CONVERTTOPYTHON[%INTYPE_1](value)); + } + return %out; + + + + + + PyObject* key; + PyObject* value; + Py_ssize_t pos = 0; + while (PyDict_Next(%in, &pos, &key, &value)) { + %OUTTYPE_0 cppKey = %CONVERTTOCPP[%OUTTYPE_0](key); + %OUTTYPE_1 cppValue = %CONVERTTOCPP[%OUTTYPE_1](value); + %out.insert(%OUTTYPE::value_type(cppKey, cppValue)); + } + + + + + + + +.. _variables_and_functions: + +Variables & Functions +===================== + + +.. _in: + +**%in** + + Variable replaced by the C++ input variable. + + +.. _out: + +**%out** + + Variable replaced by the C++ output variable. Needed to convey the + result of a Python to C++ conversion. + + +.. _intype: + +**%INTYPE** + + Used in Python to C++ conversions. It is replaced by the name of type for + which the conversion is being defined. Don't use the type's name directly. + + +.. _intype_n: + +**%INTYPE_#** + + Replaced by the name of the #th type used in a container. + + +.. _outtype: + +**%OUTTYPE** + + Used in Python to C++ conversions. It is replaced by the name of type for + which the conversion is being defined. Don't use the type's name directly. + + +.. _outtype_n: + +**%OUTTYPE_#** + + Replaced by the name of the #th type used in a container. + + +.. _checktype: + +**%CHECKTYPE[CPPTYPE]** + + Replaced by a |project| type checking function for a Python variable. + The C++ type is indicated by ``CPPTYPE``. + + +.. _oldconverters: + +Converting The Old Converters +============================= + +If you use |project| for your bindings, and has defined some type conversions +using the ``Shiboken::Converter`` template, then you must update your converters +to the new scheme. + +Previously your conversion rules were declared in one line, like this: + + + .. code-block:: xml + + + + + + + +And implemented in a separate C++ file, like this: + + + .. code-block:: c++ + + namespace Shiboken { + template<> struct Converter + { + static inline bool checkType(PyObject* pyObj) { + return PyComplex_Check(pyObj); + } + static inline bool isConvertible(PyObject* pyObj) { + return PyComplex_Check(pyObj); + } + static inline PyObject* toPython(void* cppobj) { + return toPython(*reinterpret_cast(cppobj)); + } + static inline PyObject* toPython(const Complex& cpx) { + return PyComplex_FromDoubles(cpx.real(), cpx.imag()); + } + static inline Complex toCpp(PyObject* pyobj) { + double real = PyComplex_RealAsDouble(pyobj); + double imag = PyComplex_ImagAsDouble(pyobj); + return Complex(real, imag); + } + }; + } + + +In this case, the parts of the implementation that will be used in the new +conversion-rule are the ones in the two last method +``static inline PyObject* toPython(const Complex& cpx)`` and +``static inline Complex toCpp(PyObject* pyobj)``. The ``isConvertible`` method +is gone, and the ``checkType`` is now an attribute of the :ref:`add-conversion ` +tag. Refer back to the first example in this page and you will be able to +correlate the above template with the new scheme of conversion rule definition. diff --git a/sources/shiboken2/doc/typesystemvariables.rst b/sources/shiboken2/doc/typesystemvariables.rst new file mode 100644 index 0000000..e595f7d --- /dev/null +++ b/sources/shiboken2/doc/typesystemvariables.rst @@ -0,0 +1,334 @@ +********************* +Type System Variables +********************* + +User written code can be placed in arbitrary places using the +:ref:`inject-code ` tag. To ease the binding developer +work, the injected code can make use of special variables that will be replaced +by the correct values. This also shields the developer from some |project| +implementation specifics. + + +.. _variables: + +Variables +========= + + +.. _cpp_return_argument: + +**%0** + + Replaced by the C++ return variable of the Python method/function wrapper. + + +.. _arg_number: + +**%#** + + Replaced by the name of a C++ argument in the position indicated by ``#``. + The argument counting starts with ``%1``, since ``%0`` represents the return + variable name. If the number indicates a variable that was removed in the + type system description, but there is a default value for it, this value will + be used. Consider this example: + + .. code-block:: c++ + + void argRemoval(int a0, int a1 = 123); + + + .. code-block:: xml + + + + + + + + The ``%1`` will be replaced by the C++ argument name, and ``%2`` will get the + value ``123``. + + +.. _argument_names: + +**%ARGUMENT_NAMES** + + Replaced by a comma separated list with the names of all C++ arguments that + were not removed on the type system description for the method/function. When + the removed argument has a default value (original or provided in the type + system), this value will be inserted in the argument list. If you want to remove + the argument so completely that it doesn't appear in any form on the + ``%ARGUMENT_NAMES`` replacement, don't forget to remove also its default value + with the :ref:`remove-default-expression ` type system tag. + + + Take the following method and related type system description as an example: + + .. code-block:: c++ + + void argRemoval(int a0, Point a1 = Point(1, 2), bool a2 = true, Point a3 = Point(3, 4), int a4 = 56); + + + .. code-block:: xml + + + + + + + + + + + + As seen on the XML description, the function's ``a1`` and ``a3`` arguments + were removed. If any ``inject-code`` for this function uses ``%ARGUMENT_NAMES`` + the resulting list will be the equivalent of using individual argument type + system variables this way: + + .. code-block:: c++ + + %1, Point(6, 9), %3, Point(3, 4), %5 + + +.. _arg_type: + +**%ARG#_TYPE** + + Replaced by the type of a C++ argument in the position indicated by ``#``. + The argument counting starts with ``%1``, since ``%0`` represents the return + variable in other contexts, but ``%ARG0_TYPE`` will not translate to the + return type, as this is already done by the + :ref:`%RETURN_TYPE ` variable. + Example: + + .. code-block:: c++ + + void argRemoval(int a0, int a1 = 123); + + + .. code-block:: xml + + + + + + + + The ``%1`` will be replaced by the C++ argument name, and ``%2`` will get the + value ``123``. + + +.. _converttocpp: + +**%CONVERTTOCPP[CPPTYPE]** + + Replaced by a |project| conversion call that converts a Python variable + to a C++ variable of the type indicated by ``CPPTYPE``. + + +.. _converttopython: + +**%CONVERTTOPYTHON[CPPTYPE]** + + Replaced by a |project| conversion call that converts a C++ variable of the + type indicated by ``CPPTYPE`` to the proper Python object. + + +.. _isconvertible: + +**%ISCONVERTIBLE[CPPTYPE]** + + Replaced by a |project| "isConvertible" call that checks if a Python + variable is convertible (via an implicit conversion or cast operator call) + to a C++ variable of the type indicated by ``CPPTYPE``. + + +.. _checktype: + +**%CHECKTYPE[CPPTYPE]** + + Replaced by a |project| "checkType" call that verifies if a Python + if of the type indicated by ``CPPTYPE``. + + +.. _cppself: + +**%CPPSELF** + + Replaced by the wrapped C++ object instance that owns the method in which the + code with this variable was inserted. + +.. _cpptype: + +**%CPPTYPE** + + Replaced by the original name of the C++ class, without any namespace prefix, + that owns the method in which the code with this variable was inserted. It will + work on class level code injections also. Notice that ``CPPTYPE`` differs from + the :ref:`%TYPE ` variable, for this latter may be translated to the original + C++ class name or to the C++ wrapper class name. + + Namespaces will are treated as classes, so ``CPPTYPE`` will work for them and their + enclosed functions as well. + +.. _function_name: + +**%FUNCTION_NAME** + + Replaced by the name of a function or method. + + + +.. _py_return_argument: + +**%PYARG_0** + + Replaced by the name of the Python return variable of the Python method/function wrapper. + + +.. _pyarg: + +**%PYARG_#** + + Similar to ``%#``, but is replaced by the Python arguments (PyObjects) + received by the Python wrapper method. + + If used in the context of a native code injection, i.e. in a virtual method + override, ``%PYARG_#`` will be translated to one item of the Python tuple + holding the arguments that should be passed to the Python override for this + virtual method. + + The example + + .. code-block:: c++ + + long a = PyInt_AS_LONG(%PYARG_1); + + + is equivalent of + + .. code-block:: c++ + + long a = PyInt_AS_LONG(PyTuple_GET_ITEM(%PYTHON_ARGUMENTS, 0)); + + + The generator tries to be smart with attributions, but it will work for the + only simplest cases. + + This example + + .. code-block:: c++ + + Py_DECREF(%PYARG_1); + %PYARG_1 = PyInt_FromLong(10); + + + is equivalent of + + .. code-block:: c++ + + Py_DECREF(PyTuple_GET_ITEM(%PYTHON_ARGUMENTS, 0)); + PyTuple_SET_ITEM(%PYTHON_ARGUMENTS, 0, PyInt_FromLong(10)); + + +.. _pyself: + +**%PYSELF** + + Replaced by the Python wrapper variable (a PyObject) representing the instance + bounded to the Python wrapper method which receives the custom code. + + +.. _python_arguments: + +**%PYTHON_ARGUMENTS** + + Replaced by the pointer to the Python tuple with Python objects converted from + the C++ arguments received on the binding override of a virtual method. + This tuple is the same passed as arguments to the Python method overriding the + C++ parent's one. + + +.. _python_method_override: + +**%PYTHON_METHOD_OVERRIDE** + + This variable is used only on :ref:`native method code injections + `, i.e. on the binding overrides for C++ virtual + methods. It is replaced by a pointer to the Python method override. + + +.. _pythontypeobject: + +**%PYTHONTYPEOBJECT** + + Replaced by the Python type object for the context in which it is inserted: + method or class modification. + + +.. _beginallowthreads: + +**%BEGIN_ALLOW_THREADS** + + Replaced by a thread state saving procedure. + Must match with a :ref:`%END_ALLOW_THREADS ` variable. + + +.. _endallowthreads: + +**%END_ALLOW_THREADS** + + Replaced by a thread state restoring procedure. + Must match with a :ref:`%BEGIN_ALLOW_THREADS ` variable. + + +.. _return_type: + +**%RETURN_TYPE** + + Replaced by the type returned by a function or method. + + +.. _type: + +**%TYPE** + + Replaced by the name of the class to which a function belongs. May be used + in code injected at method or class level. + + +.. _example: + +Example +======= + +Just to illustrate the usage of the variables described in the previous +sections, below is an excerpt from the type system description of a |project| +test. It changes a method that received ``argc/argv`` arguments into something +that expects a Python sequence instead. + + .. code-block:: xml + + + + + + + + + + int argc; + char** argv; + if (!PySequence_to_argc_argv(%PYARG_1, &argc, &argv)) { + PyErr_SetString(PyExc_TypeError, "error"); + return 0; + } + %RETURN_TYPE foo = %CPPSELF.%FUNCTION_NAME(argc, argv); + %0 = %CONVERTTOPYTHON[%RETURN_TYPE](foo); + + for (int i = 0; i < argc; ++i) + delete[] argv[i]; + delete[] argv; + + diff --git a/sources/shiboken2/doc/wordsofadvice.rst b/sources/shiboken2/doc/wordsofadvice.rst new file mode 100644 index 0000000..9aebf1f --- /dev/null +++ b/sources/shiboken2/doc/wordsofadvice.rst @@ -0,0 +1,112 @@ +.. _words-of-advice: + +*************** +Words of Advice +*************** + +When writing or using Python bindings there is some things you must keep in mind. + + +.. _duck-punching-and-virtual-methods: + +Duck punching and virtual methods +================================= + +The combination of duck punching, the practice of altering class characteristics +of already instantiated objects, and virtual methods of wrapped C++ classes, can +be tricky. That was an optimistic statement. + +Let's see duck punching in action for educational purposes. + + .. code-block:: python + + import types + import Binding + + obj = Binding.CppClass() + + # CppClass has a virtual method called 'virtualMethod', + # but we don't like it anymore. + def myVirtualMethod(self_obj, arg): + pass + + obj.virtualMethod = types.MethodType(myVirtualMethod, obj, Binding.CppClass) + + +If some C++ code happens to call `CppClass::virtualMethod(...)` on the C++ object +held by "obj" Python object, the new duck punched "virtualMethod" method will be +properly called. That happens because the underlying C++ object is in fact an instance +of a generated C++ class that inherits from `CppClass`, let's call it `CppClassWrapper`, +responsible for receiving the C++ virtual method calls and finding out the proper Python +override to which handle such a call. + +Now that you know this, consider the case when C++ has a factory method that gives you +new C++ objects originated somewhere in C++-land, in opposition to the ones generated in +Python-land by the usage of class constructors, like in the example above. + +Brief interruption to show what I was saying: + + .. code-block:: python + + import types + import Binding + + obj = Binding.createCppClass() + def myVirtualMethod(self_obj, arg): + pass + + # Punching a dead duck... + obj.virtualMethod = types.MethodType(myVirtualMethod, obj, Binding.CppClass) + + +The `Binding.createCppClass()` factory method is just an example, C++ created objects +can pop out for a number of other reasons. Objects created this way have a Python wrapper +holding them as usual, but the object held is not a `CppClassWrapper`, but a regular +`CppClass`. All virtual method calls originated in C++ will stay in C++ and never reach +a Python virtual method overridden via duck punching. + +Although duck punching is an interesting Python feature, it don't mix well with wrapped +C++ virtual methods, specially when you can't tell the origin of every single wrapped +C++ object. In summary: don't do it! + + +.. _pyside-old-style-class: + +Python old style classes and PySide +=================================== + +Because of some architectural decisions and deprecated Python types. +Since PySide 1.1 old style classes are not supported with multiple inheritance. + +Below you can check the examples: + +Example with old style class: + + .. code-block:: python + + from PySide2 import QtCore + + class MyOldStyleObject: + pass + + class MyObject(QtCore, MyOldStyleObject): + pass + + +this example will raise a 'TypeError' due to the limitation on PySide, to fix +this you will need use the new style class: + + + .. code-block:: python + + from PySide2 import QtCore + + class MyOldStyleObject(object): + pass + + class MyObject(QtCore, MyOldStyleObject): + pass + + +All classes used for multiple inheritance with other PySide types need to have +'object' as base class. diff --git a/sources/shiboken2/generator/CMakeLists.txt b/sources/shiboken2/generator/CMakeLists.txt new file mode 100644 index 0000000..0321186 --- /dev/null +++ b/sources/shiboken2/generator/CMakeLists.txt @@ -0,0 +1,40 @@ +project(shibokengenerator) + +find_package(Qt5Xml) +find_package(Qt5XmlPatterns) + +set(shiboken2_SRC +generator.cpp +shiboken2/cppgenerator.cpp +shiboken2/headergenerator.cpp +shiboken2/overloaddata.cpp +shiboken2/shibokengenerator.cpp +main.cpp +) + +if (NOT DISABLE_DOCSTRINGS) + set(shiboken2_SRC ${shiboken2_SRC} qtdoc/qtdocgenerator.cpp) + add_definitions(-DDOCSTRINGS_ENABLED) +endif() + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/shiboken2 + ${CMAKE_CURRENT_SOURCE_DIR}/qtdoc + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${apiextractor_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${Qt5XmlPatterns_INCLUDE_DIRS} + ) + +add_executable(shiboken2 ${shiboken2_SRC}) +add_dependencies(shiboken2 apiextractor) +set_target_properties(shiboken2 PROPERTIES OUTPUT_NAME shiboken2${shiboken2_SUFFIX}) +target_link_libraries(shiboken2 + apiextractor + ${Qt5Core_LIBRARIES} + ${Qt5XmlPatterns_LIBRARIES} + ) + +configure_file(shibokenconfig.h.in "${CMAKE_CURRENT_BINARY_DIR}/shibokenconfig.h" @ONLY) + +install(TARGETS shiboken2 DESTINATION bin) diff --git a/sources/shiboken2/generator/generator.cpp b/sources/shiboken2/generator/generator.cpp new file mode 100644 index 0000000..1e2f039 --- /dev/null +++ b/sources/shiboken2/generator/generator.cpp @@ -0,0 +1,854 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "generator.h" +#include "abstractmetalang.h" +#include "reporthandler.h" +#include "fileout.h" +#include "apiextractor.h" +#include "typesystem.h" + +#include +#include +#include +#include +#include +#include + +struct Generator::GeneratorPrivate { + const ApiExtractor* apiextractor; + QString outDir; + // License comment + QString licenseComment; + QString packageName; + QStringList instantiatedContainersNames; + QStringList instantiatedSmartPointerNames; + QVector instantiatedContainers; + QVector instantiatedSmartPointers; + +}; + +Generator::Generator() : m_d(new GeneratorPrivate) +{ +} + +Generator::~Generator() +{ + delete m_d; +} + +bool Generator::setup(const ApiExtractor& extractor, const QMap< QString, QString > args) +{ + m_d->apiextractor = &extractor; + TypeEntryHash allEntries = TypeDatabase::instance()->allEntries(); + TypeEntry* entryFound = 0; + for (TypeEntryHash::const_iterator it = allEntries.cbegin(), end = allEntries.cend(); it != end; ++it) { + for (TypeEntry *entry : it.value()) { + if (entry->type() == TypeEntry::TypeSystemType && entry->generateCode()) { + entryFound = entry; + break; + } + } + if (entryFound) + break; + } + if (entryFound) + m_d->packageName = entryFound->name(); + else + qCWarning(lcShiboken) << "Couldn't find the package name!!"; + + collectInstantiatedContainersAndSmartPointers(); + + return doSetup(args); +} + +QString Generator::getSimplifiedContainerTypeName(const AbstractMetaType* type) +{ + const QString signature = type->cppSignature(); + if (!type->typeEntry()->isContainer() && !type->typeEntry()->isSmartPointer()) + return signature; + QString typeName = signature; + if (type->isConstant()) + typeName.remove(0, sizeof("const ") / sizeof(char) - 1); + switch (type->referenceType()) { + case NoReference: + break; + case LValueReference: + typeName.chop(1); + break; + case RValueReference: + typeName.chop(2); + break; + } + while (typeName.endsWith(QLatin1Char('*')) || typeName.endsWith(QLatin1Char(' '))) + typeName.chop(1); + return typeName; +} + +void Generator::addInstantiatedContainersAndSmartPointers(const AbstractMetaType *type, + const QString &context) +{ + if (!type) + return; + const AbstractMetaTypeList &instantiations = type->instantiations(); + for (const AbstractMetaType* t : instantiations) + addInstantiatedContainersAndSmartPointers(t, context); + if (!type->typeEntry()->isContainer() && !type->typeEntry()->isSmartPointer()) + return; + bool isContainer = type->typeEntry()->isContainer(); + if (type->hasTemplateChildren()) { + QString piece = isContainer ? QStringLiteral("container") : QStringLiteral("smart pointer"); + QString warning = + QString::fromLatin1("Skipping instantiation of %1 '%2' because it has template" + " arguments.").arg(piece, type->originalTypeDescription()); + if (!context.isEmpty()) + warning.append(QStringLiteral(" Calling context: %1").arg(context)); + + qCWarning(lcShiboken).noquote().nospace() << warning; + return; + + } + QString typeName = getSimplifiedContainerTypeName(type); + if (isContainer) { + if (!m_d->instantiatedContainersNames.contains(typeName)) { + m_d->instantiatedContainersNames.append(typeName); + m_d->instantiatedContainers.append(type); + } + } else { + // Is smart pointer. + if (!m_d->instantiatedSmartPointerNames.contains(typeName)) { + m_d->instantiatedSmartPointerNames.append(typeName); + m_d->instantiatedSmartPointers.append(type); + } + } + +} + +void Generator::collectInstantiatedContainersAndSmartPointers(const AbstractMetaFunction *func) +{ + addInstantiatedContainersAndSmartPointers(func->type(), func->signature()); + const AbstractMetaArgumentList &arguments = func->arguments(); + for (const AbstractMetaArgument *arg : arguments) + addInstantiatedContainersAndSmartPointers(arg->type(), func->signature()); +} + +void Generator::collectInstantiatedContainersAndSmartPointers(const AbstractMetaClass *metaClass) +{ + if (!metaClass->typeEntry()->generateCode()) + return; + const AbstractMetaFunctionList &funcs = metaClass->functions(); + for (const AbstractMetaFunction *func : funcs) + collectInstantiatedContainersAndSmartPointers(func); + const AbstractMetaFieldList &fields = metaClass->fields(); + for (const AbstractMetaField *field : fields) + addInstantiatedContainersAndSmartPointers(field->type(), field->name()); + const AbstractMetaClassList &innerClasses = metaClass->innerClasses(); + for (AbstractMetaClass *innerClass : innerClasses) + collectInstantiatedContainersAndSmartPointers(innerClass); +} + +void Generator::collectInstantiatedContainersAndSmartPointers() +{ + const AbstractMetaFunctionList &funcs = globalFunctions(); + for (const AbstractMetaFunction *func : funcs) + collectInstantiatedContainersAndSmartPointers(func); + const AbstractMetaClassList &classList = classes(); + for (const AbstractMetaClass *metaClass : classList) + collectInstantiatedContainersAndSmartPointers(metaClass); +} + +QVector Generator::instantiatedContainers() const +{ + return m_d->instantiatedContainers; +} + +QVector Generator::instantiatedSmartPointers() const +{ + return m_d->instantiatedSmartPointers; +} + +Generator::OptionDescriptions Generator::options() const +{ + return OptionDescriptions(); +} + +AbstractMetaClassList Generator::classes() const +{ + return m_d->apiextractor->classes(); +} + +AbstractMetaClassList Generator::classesTopologicalSorted(const Dependencies &additionalDependencies) const +{ + return m_d->apiextractor->classesTopologicalSorted(additionalDependencies); +} + +AbstractMetaFunctionList Generator::globalFunctions() const +{ + return m_d->apiextractor->globalFunctions(); +} + +AbstractMetaEnumList Generator::globalEnums() const +{ + return m_d->apiextractor->globalEnums(); +} + +PrimitiveTypeEntryList Generator::primitiveTypes() const +{ + return m_d->apiextractor->primitiveTypes(); +} + +ContainerTypeEntryList Generator::containerTypes() const +{ + return m_d->apiextractor->containerTypes(); +} + +const AbstractMetaEnum* Generator::findAbstractMetaEnum(const EnumTypeEntry* typeEntry) const +{ + return m_d->apiextractor->findAbstractMetaEnum(typeEntry); +} + +const AbstractMetaEnum* Generator::findAbstractMetaEnum(const TypeEntry* typeEntry) const +{ + return m_d->apiextractor->findAbstractMetaEnum(typeEntry); +} + +const AbstractMetaEnum* Generator::findAbstractMetaEnum(const FlagsTypeEntry* typeEntry) const +{ + return m_d->apiextractor->findAbstractMetaEnum(typeEntry); +} + +const AbstractMetaEnum* Generator::findAbstractMetaEnum(const AbstractMetaType* metaType) const +{ + return m_d->apiextractor->findAbstractMetaEnum(metaType); +} + +QString Generator::licenseComment() const +{ + return m_d->licenseComment; +} + +void Generator::setLicenseComment(const QString& licenseComment) +{ + m_d->licenseComment = licenseComment; +} + +QString Generator::packageName() const +{ + return m_d->packageName; +} + +QString Generator::moduleName() const +{ + QString& pkgName = m_d->packageName; + return QString(pkgName).remove(0, pkgName.lastIndexOf(QLatin1Char('.')) + 1); +} + +QString Generator::outputDirectory() const +{ + return m_d->outDir; +} + +void Generator::setOutputDirectory(const QString &outDir) +{ + m_d->outDir = outDir; +} + +inline void touchFile(const QString &filePath) +{ + QFile toucher(filePath); + qint64 size = toucher.size(); + if (!toucher.open(QIODevice::ReadWrite)) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("Failed to touch file '%1'") + .arg(QDir::toNativeSeparators(filePath)); + return; + } + toucher.resize(size+1); + toucher.resize(size); + toucher.close(); +} + +bool Generator::generateFileForContext(GeneratorContext &context) +{ + AbstractMetaClass *cls = context.metaClass(); + + if (!shouldGenerate(cls)) + return true; + + const QString fileName = fileNameForContext(context); + if (fileName.isEmpty()) + return true; + if (ReportHandler::isDebug(ReportHandler::SparseDebug)) + qCDebug(lcShiboken) << "generating: " << fileName; + + QString filePath = outputDirectory() + QLatin1Char('/') + subDirectoryForClass(cls) + + QLatin1Char('/') + fileName; + FileOut fileOut(filePath); + + generateClass(fileOut.stream, context); + + FileOut::State state = fileOut.done(); + switch (state) { + case FileOut::Failure: + return false; + case FileOut::Unchanged: + // Even if contents is unchanged, the last file modification time should be updated, + // so that the build system can rely on the fact the generated file is up-to-date. + touchFile(filePath); + break; + case FileOut::Success: + break; + } + + return true; +} + +QString Generator::getFileNameBaseForSmartPointer(const AbstractMetaType *smartPointerType, + const AbstractMetaClass *smartPointerClass) const +{ + const AbstractMetaType *innerType = smartPointerType->getSmartPointerInnerType(); + QString fileName = smartPointerClass->qualifiedCppName().toLower(); + fileName.replace(QLatin1String("::"), QLatin1String("_")); + fileName.append(QLatin1String("_")); + fileName.append(innerType->name().toLower()); + + return fileName; +} + +bool Generator::generate() +{ + const AbstractMetaClassList &classList = m_d->apiextractor->classes(); + for (AbstractMetaClass *cls : classList) { + GeneratorContext context(cls); + if (!generateFileForContext(context)) + return false; + } + + for (const AbstractMetaType *type : qAsConst(m_d->instantiatedSmartPointers)) { + AbstractMetaClass *smartPointerClass = + AbstractMetaClass::findClass(m_d->apiextractor->smartPointers(), type->name()); + GeneratorContext context(smartPointerClass, type, true); + if (!generateFileForContext(context)) + return false; + } + return finishGeneration(); +} + +bool Generator::shouldGenerateTypeEntry(const TypeEntry* type) const +{ + return type->codeGeneration() & TypeEntry::GenerateTargetLang; +} + +bool Generator::shouldGenerate(const AbstractMetaClass* metaClass) const +{ + return shouldGenerateTypeEntry(metaClass->typeEntry()); +} + +void verifyDirectoryFor(const QFile &file) +{ + QDir dir = QFileInfo(file).dir(); + if (!dir.exists()) { + if (!dir.mkpath(dir.absolutePath())) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("unable to create directory '%1'").arg(dir.absolutePath()); + } + } +} + +void Generator::replaceTemplateVariables(QString &code, const AbstractMetaFunction *func) +{ + const AbstractMetaClass *cpp_class = func->ownerClass(); + if (cpp_class) + code.replace(QLatin1String("%TYPE"), cpp_class->name()); + + const AbstractMetaArgumentList &argument = func->arguments(); + for (AbstractMetaArgument *arg : argument) + code.replace(QLatin1Char('%') + QString::number(arg->argumentIndex() + 1), arg->name()); + + //template values + code.replace(QLatin1String("%RETURN_TYPE"), translateType(func->type(), cpp_class)); + code.replace(QLatin1String("%FUNCTION_NAME"), func->originalName()); + + if (code.contains(QLatin1String("%ARGUMENT_NAMES"))) { + QString str; + QTextStream aux_stream(&str); + writeArgumentNames(aux_stream, func, Generator::SkipRemovedArguments); + code.replace(QLatin1String("%ARGUMENT_NAMES"), str); + } + + if (code.contains(QLatin1String("%ARGUMENTS"))) { + QString str; + QTextStream aux_stream(&str); + writeFunctionArguments(aux_stream, func, Options(SkipDefaultValues) | SkipRemovedArguments); + code.replace(QLatin1String("%ARGUMENTS"), str); + } +} + +QTextStream& formatCode(QTextStream &s, const QString& code, Indentor &indentor) +{ + // detect number of spaces before the first character + const QStringList lst(code.split(QLatin1Char('\n'))); + static const QRegularExpression nonSpaceRegex(QStringLiteral("[^\\s]")); + Q_ASSERT(nonSpaceRegex.isValid()); + int spacesToRemove = 0; + for (const QString &line : lst) { + if (!line.trimmed().isEmpty()) { + spacesToRemove = line.indexOf(nonSpaceRegex); + if (spacesToRemove == -1) + spacesToRemove = 0; + break; + } + } + + static const QRegularExpression emptyLine(QStringLiteral("^\\s*[\\r]?[\\n]?\\s*$")); + Q_ASSERT(emptyLine.isValid()); + + for (QString line : lst) { + if (!line.isEmpty() && !emptyLine.match(line).hasMatch()) { + while (line.constEnd()->isSpace()) + line.chop(1); + int limit = 0; + for(int i = 0; i < spacesToRemove; ++i) { + if (!line[i].isSpace()) + break; + limit++; + } + + s << indentor << line.remove(0, limit); + } + s << endl; + } + return s; +} + +AbstractMetaFunctionList Generator::implicitConversions(const TypeEntry* type) const +{ + if (type->isValue()) { + if (const AbstractMetaClass *metaClass = AbstractMetaClass::findClass(classes(), type)) + return metaClass->implicitConversions(); + } + return AbstractMetaFunctionList(); +} + +AbstractMetaFunctionList Generator::implicitConversions(const AbstractMetaType* metaType) const +{ + return implicitConversions(metaType->typeEntry()); +} + +bool Generator::isObjectType(const TypeEntry* type) +{ + if (type->isComplex()) + return Generator::isObjectType((const ComplexTypeEntry*)type); + return type->isObject(); +} +bool Generator::isObjectType(const ComplexTypeEntry* type) +{ + return type->isObject() || type->isQObject(); +} +bool Generator::isObjectType(const AbstractMetaClass* metaClass) +{ + return Generator::isObjectType(metaClass->typeEntry()); +} +bool Generator::isObjectType(const AbstractMetaType* metaType) +{ + return isObjectType(metaType->typeEntry()); +} + +bool Generator::isPointer(const AbstractMetaType* type) +{ + return type->indirections() > 0 + || type->isNativePointer() + || type->isValuePointer(); +} + +bool Generator::isCString(const AbstractMetaType* type) +{ + return type->isNativePointer() + && type->indirections() == 1 + && type->name() == QLatin1String("char"); +} + +bool Generator::isVoidPointer(const AbstractMetaType* type) +{ + return type->isNativePointer() + && type->indirections() == 1 + && type->name() == QLatin1String("void"); +} + +QString Generator::getFullTypeName(const TypeEntry* type) const +{ + QString result = type->qualifiedCppName(); + if (type->isArray()) + type = static_cast(type)->nestedTypeEntry(); + if (!type->isCppPrimitive()) + result.prepend(QLatin1String("::")); + return result; +} + +QString Generator::getFullTypeName(const AbstractMetaType* type) const +{ + if (isCString(type)) + return QLatin1String("const char*"); + if (isVoidPointer(type)) + return QLatin1String("void*"); + if (type->typeEntry()->isContainer()) + return QLatin1String("::") + type->cppSignature(); + QString typeName; + if (type->typeEntry()->isComplex() && type->hasInstantiations()) + typeName = getFullTypeNameWithoutModifiers(type); + else + typeName = getFullTypeName(type->typeEntry()); + return typeName + QString::fromLatin1("*").repeated(type->indirections()); +} + +QString Generator::getFullTypeName(const AbstractMetaClass* metaClass) const +{ + return QLatin1String("::") + metaClass->qualifiedCppName(); +} + +QString Generator::getFullTypeNameWithoutModifiers(const AbstractMetaType* type) const +{ + if (isCString(type)) + return QLatin1String("const char*"); + if (isVoidPointer(type)) + return QLatin1String("void*"); + if (!type->hasInstantiations()) + return getFullTypeName(type->typeEntry()); + QString typeName = type->cppSignature(); + if (type->isConstant()) + typeName.remove(0, sizeof("const ") / sizeof(char) - 1); + switch (type->referenceType()) { + case NoReference: + break; + case LValueReference: + typeName.chop(1); + break; + case RValueReference: + typeName.chop(2); + break; + } + while (typeName.endsWith(QLatin1Char('*')) || typeName.endsWith(QLatin1Char(' '))) + typeName.chop(1); + return QLatin1String("::") + typeName; +} + +QString Generator::minimalConstructor(const AbstractMetaType* type) const +{ + if (!type || (type->referenceType() == LValueReference && Generator::isObjectType(type))) + return QString(); + + if (type->isContainer()) { + QString ctor = type->cppSignature(); + if (ctor.endsWith(QLatin1Char('*'))) + return QLatin1String("0"); + if (ctor.startsWith(QLatin1String("const "))) + ctor.remove(0, sizeof("const ") / sizeof(char) - 1); + if (ctor.endsWith(QLatin1Char('&'))) { + ctor.chop(1); + ctor = ctor.trimmed(); + } + return QLatin1String("::") + ctor + QLatin1String("()"); + } + + if (type->isNativePointer()) + return QLatin1String("static_cast<") + type->typeEntry()->qualifiedCppName() + QLatin1String(" *>(0)"); + if (Generator::isPointer(type)) + return QLatin1String("static_cast< ::") + type->typeEntry()->qualifiedCppName() + QLatin1String(" *>(0)"); + + if (type->typeEntry()->isComplex()) { + const ComplexTypeEntry* cType = reinterpret_cast(type->typeEntry()); + QString ctor = cType->defaultConstructor(); + if (!ctor.isEmpty()) + return ctor; + ctor = minimalConstructor(AbstractMetaClass::findClass(classes(), cType)); + if (type->hasInstantiations()) + ctor = ctor.replace(getFullTypeName(cType), getFullTypeNameWithoutModifiers(type)); + return ctor; + } + + return minimalConstructor(type->typeEntry()); +} + +QString Generator::minimalConstructor(const TypeEntry* type) const +{ + if (!type) + return QString(); + + if (type->isCppPrimitive()) { + const QString &name = type->qualifiedCppName(); + return name == QLatin1String("bool") + ? QLatin1String("false") : name + QLatin1String("(0)"); + } + + if (type->isEnum()) + return QLatin1String("static_cast< ::") + type->qualifiedCppName() + QLatin1String(">(0)"); + + if (type->isFlags()) + return type->qualifiedCppName() + QLatin1String("(0)"); + + if (type->isPrimitive()) { + QString ctor = reinterpret_cast(type)->defaultConstructor(); + // If a non-C++ (i.e. defined by the user) primitive type does not have + // a default constructor defined by the user, the empty constructor is + // heuristically returned. If this is wrong the build of the generated + // bindings will tell. + return ctor.isEmpty() + ? (QLatin1String("::") + type->qualifiedCppName() + QLatin1String("()")) + : ctor; + } + + if (type->isComplex()) + return minimalConstructor(AbstractMetaClass::findClass(classes(), type)); + + return QString(); +} + +QString Generator::minimalConstructor(const AbstractMetaClass* metaClass) const +{ + if (!metaClass) + return QString(); + + const ComplexTypeEntry* cType = reinterpret_cast(metaClass->typeEntry()); + if (cType->hasDefaultConstructor()) + return cType->defaultConstructor(); + + const AbstractMetaFunctionList &constructors = metaClass->queryFunctions(AbstractMetaClass::Constructors); + int maxArgs = 0; + for (const AbstractMetaFunction *ctor : constructors) { + if (ctor->isUserAdded() || ctor->isPrivate() || ctor->functionType() != AbstractMetaFunction::ConstructorFunction) + continue; + + int numArgs = ctor->arguments().size(); + if (numArgs == 0) { + maxArgs = 0; + break; + } + if (numArgs > maxArgs) + maxArgs = numArgs; + } + + QString qualifiedCppName = metaClass->typeEntry()->qualifiedCppName(); + QStringList templateTypes; + const QVector &templateArguments = metaClass->templateArguments(); + for (TypeEntry *templateType : templateArguments) + templateTypes << templateType->qualifiedCppName(); + + // Empty constructor. + if (maxArgs == 0) + return QLatin1String("::") + qualifiedCppName + QLatin1String("()"); + + QVector candidates; + + // Constructors with C++ primitive types, enums or pointers only. + // Start with the ones with fewer arguments. + for (int i = 1; i <= maxArgs; ++i) { + for (const AbstractMetaFunction *ctor : constructors) { + if (ctor->isUserAdded() || ctor->isPrivate() || ctor->functionType() != AbstractMetaFunction::ConstructorFunction) + continue; + + const AbstractMetaArgumentList &arguments = ctor->arguments(); + if (arguments.size() != i) + continue; + + QStringList args; + for (const AbstractMetaArgument *arg : arguments) { + const TypeEntry* type = arg->type()->typeEntry(); + if (type == metaClass->typeEntry()) { + args.clear(); + break; + } + + if (!arg->originalDefaultValueExpression().isEmpty()) { + if (!arg->defaultValueExpression().isEmpty() + && arg->defaultValueExpression() != arg->originalDefaultValueExpression()) { + args << arg->defaultValueExpression(); + } + break; + } + + if (type->isCppPrimitive() || type->isEnum() || isPointer(arg->type())) { + QString argValue = minimalConstructor(arg->type()); + if (argValue.isEmpty()) { + args.clear(); + break; + } + args << argValue; + } else { + args.clear(); + break; + } + } + + if (!args.isEmpty()) + return QString::fromLatin1("::%1(%2)").arg(qualifiedCppName, args.join(QLatin1String(", "))); + + candidates << ctor; + } + } + + // Constructors with C++ primitive types, enums, pointers, value types, + // and user defined primitive types. + // Builds the minimal constructor recursively. + for (const AbstractMetaFunction *ctor : qAsConst(candidates)) { + QStringList args; + const AbstractMetaArgumentList &arguments = ctor->arguments(); + for (const AbstractMetaArgument *arg : arguments) { + if (arg->type()->typeEntry() == metaClass->typeEntry()) { + args.clear(); + break; + } + QString argValue = minimalConstructor(arg->type()); + if (argValue.isEmpty()) { + args.clear(); + break; + } + args << argValue; + } + if (!args.isEmpty()) { + return QString::fromLatin1("::%1(%2)").arg(qualifiedCppName, args.join(QLatin1String(", "))); + } + } + + return QString(); +} + +QString Generator::translateType(const AbstractMetaType *cType, + const AbstractMetaClass *context, + Options options) const +{ + QString s; + static int constLen = strlen("const"); + + if (context && cType && + context->typeEntry()->isGenericClass() && + cType->originalTemplateType()) { + cType = cType->originalTemplateType(); + } + + if (!cType) { + s = QLatin1String("void"); + } else if (cType->isArray()) { + s = translateType(cType->arrayElementType(), context, options) + QLatin1String("[]"); + } else if (options & Generator::EnumAsInts && (cType->isEnum() || cType->isFlags())) { + s = QLatin1String("int"); + } else { + if (options & Generator::OriginalName) { + s = cType->originalTypeDescription().trimmed(); + if ((options & Generator::ExcludeReference) && s.endsWith(QLatin1Char('&'))) + s.chop(1); + + // remove only the last const (avoid remove template const) + if (options & Generator::ExcludeConst) { + int index = s.lastIndexOf(QLatin1String("const")); + + if (index >= (s.size() - (constLen + 1))) // (VarType const) or (VarType const[*|&]) + s = s.remove(index, constLen); + } + } else if (options & Generator::ExcludeConst || options & Generator::ExcludeReference) { + AbstractMetaType* copyType = cType->copy(); + + if (options & Generator::ExcludeConst) + copyType->setConstant(false); + + if (options & Generator::ExcludeReference) + copyType->setReferenceType(NoReference); + + s = copyType->cppSignature(); + if (!copyType->typeEntry()->isVoid() && !copyType->typeEntry()->isCppPrimitive()) + s.prepend(QLatin1String("::")); + delete copyType; + } else { + s = cType->cppSignature(); + } + } + + return s; +} + + +QString Generator::subDirectoryForClass(const AbstractMetaClass* clazz) const +{ + return subDirectoryForPackage(clazz->package()); +} + +QString Generator::subDirectoryForPackage(QString packageName) const +{ + if (packageName.isEmpty()) + packageName = m_d->packageName; + return QString(packageName).replace(QLatin1Char('.'), QDir::separator()); +} + +template +static QString getClassTargetFullName_(const T* t, bool includePackageName) +{ + QString name = t->name(); + const AbstractMetaClass* context = t->enclosingClass(); + while (context) { + name.prepend(QLatin1Char('.')); + name.prepend(context->name()); + context = context->enclosingClass(); + } + if (includePackageName) { + name.prepend(QLatin1Char('.')); + name.prepend(t->package()); + } + return name; +} + +QString getClassTargetFullName(const AbstractMetaClass* metaClass, bool includePackageName) +{ + return getClassTargetFullName_(metaClass, includePackageName); +} + +QString getClassTargetFullName(const AbstractMetaEnum* metaEnum, bool includePackageName) +{ + return getClassTargetFullName_(metaEnum, includePackageName); +} + +QString getClassTargetFullName(const AbstractMetaType *metaType, bool includePackageName) +{ + QString name = metaType->cppSignature(); + name.replace(QLatin1String("::"), QLatin1String("_")); + name.replace(QLatin1Char('<'), QLatin1Char('_')); + name.remove(QLatin1Char('>')); + name.remove(QLatin1Char(' ')); + if (includePackageName) { + name.prepend(QLatin1Char('.')); + name.prepend(metaType->package()); + } + return name; +} + +QString getFilteredCppSignatureString(QString signature) +{ + signature.replace(QLatin1String("::"), QLatin1String("_")); + signature.replace(QLatin1Char('<'), QLatin1Char('_')); + signature.replace(QLatin1Char('>'), QLatin1Char('_')); + signature.replace(QLatin1Char(' '), QLatin1Char('_')); + return signature; +} diff --git a/sources/shiboken2/generator/generator.h b/sources/shiboken2/generator/generator.h new file mode 100644 index 0000000..010ed86 --- /dev/null +++ b/sources/shiboken2/generator/generator.h @@ -0,0 +1,429 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef GENERATOR_H +#define GENERATOR_H + +#include +#include +#include +#include +#include +#include +#include + +class ApiExtractor; +class AbstractMetaBuilder; +class AbstractMetaFunction; +class AbstractMetaClass; +class AbstractMetaEnum; +class TypeEntry; +class ComplexTypeEntry; +class AbstractMetaType; +class EnumTypeEntry; +class FlagsTypeEntry; + +QT_BEGIN_NAMESPACE +class QFile; +QT_END_NAMESPACE + +class PrimitiveTypeEntry; +class ContainerTypeEntry; +class Indentor; + +QTextStream& formatCode(QTextStream &s, const QString& code, Indentor &indentor); +void verifyDirectoryFor(const QFile &file); + +QString getClassTargetFullName(const AbstractMetaClass* metaClass, bool includePackageName = true); +QString getClassTargetFullName(const AbstractMetaEnum* metaEnum, bool includePackageName = true); +QString getClassTargetFullName(const AbstractMetaType *metaType, bool includePackageName = true); +QString getFilteredCppSignatureString(QString signature); + +/** + * PYSIDE-504: Handling the "protected hack" + * + * The problem: Creating wrappers when the class has private destructors. + * You can see an example on Windows in qclipboard_wrapper.h and others. + * Simply search for the text "// C++11: need to declare (unimplemented) destructor". + * + * The protected hack is the definition "#define protected public". + * For most compilers, this "hack" is enabled, because the problem of private + * destructors simply vanishes. + * + * If one does not want to use this hack, then a new problem arises: + * C++11 requires that a destructor is declared in a wrapper class when it is + * private in the base class. There is no implementation allowed! + * + * Unfortunately, MSVC in recent versions supports C++11, and due to restrictive + * rules, it is impossible to use the hack with this compiler. + * More unfortunate: Clang, when C++11 is enabled, also enforces a declaration + * of a private destructor, but it falsely then creates a linker error! + * + * Originally, we wanted to remove the protected hack. But due to the Clang + * problem, we gave up on removal of the protected hack and use it always + * when we can. This might change again when the Clang problem is solved. + */ + +#ifdef Q_CC_MSVC +const int alwaysGenerateDestructor = 1; +#else +const int alwaysGenerateDestructor = 0; +#endif + +/** + * A GeneratorContext object contains a pointer to an AbstractMetaClass and/or a specialized + * AbstractMetaType, for which code is currently being generated. + * + * The main case is when the context contains only an AbstractMetaClass pointer, which is used + * by different methods to generate appropriate expressions, functions, type names, etc. + * + * The second case is for generation of code for smart pointers. In this case the m_metaClass member + * contains the generic template class of the smart pointer, and the m_preciseClassType member + * contains the instantiated template type, e.g. a concrete shared_ptr. To + * distinguish this case, the member m_forSmartPointer is set to true. + * + * In the future the second case might be generalized for all template type instantiations. + */ +class GeneratorContext { +public: + GeneratorContext() : m_metaClass(0), m_preciseClassType(0), m_forSmartPointer(false) {} + GeneratorContext(AbstractMetaClass *metaClass, + const AbstractMetaType *preciseType = 0, + bool forSmartPointer = false) + : m_metaClass(metaClass), + m_preciseClassType(preciseType), + m_forSmartPointer(forSmartPointer) {} + + + AbstractMetaClass *metaClass() const { return m_metaClass; } + bool forSmartPointer() const { return m_forSmartPointer; } + const AbstractMetaType *preciseType() const { return m_preciseClassType; } + +private: + AbstractMetaClass *m_metaClass; + const AbstractMetaType *m_preciseClassType; + bool m_forSmartPointer; +}; + +/** + * Base class for all generators. The default implementations does nothing, + * you must subclass this to create your own generators. + */ +class Generator +{ +public: + typedef QPair OptionDescription; + typedef QVector OptionDescriptions; + + /// Optiosn used around the generator code + enum Option { + NoOption = 0x00000000, + ExcludeConst = 0x00000001, + ExcludeReference = 0x00000002, + + EnumAsInts = 0x00000004, + SkipName = 0x00000008, + SkipReturnType = 0x00000010, + OriginalName = 0x00000020, + VirtualCall = 0x00000040, + OriginalTypeDescription = 0x00000080, + SkipRemovedArguments = 0x00000100, + + SkipDefaultValues = 0x00000200, + + WriteSelf = 0x00000400, + ExcludeMethodConst = 0x00000800, + + ForceValueType = ExcludeReference | ExcludeConst + }; + Q_DECLARE_FLAGS(Options, Option) + + Generator(); + virtual ~Generator(); + + bool setup(const ApiExtractor& extractor, const QMap args); + + virtual OptionDescriptions options() const; + + /// Returns the classes used to generate the binding code. + AbstractMetaClassList classes() const; + + /// Returns the classes, topologically ordered, used to generate the binding code. + /// + /// The classes are ordered such that derived classes appear later in the list than + /// their parent classes. + AbstractMetaClassList classesTopologicalSorted(const Dependencies &additionalDependencies = Dependencies()) const; + + /// Returns all global functions found by APIExtractor + AbstractMetaFunctionList globalFunctions() const; + + /// Returns all global enums found by APIExtractor + AbstractMetaEnumList globalEnums() const; + + /// Returns all primitive types found by APIExtractor + PrimitiveTypeEntryList primitiveTypes() const; + + /// Returns all container types found by APIExtractor + ContainerTypeEntryList containerTypes() const; + + /// Returns an AbstractMetaEnum for a given EnumTypeEntry, or NULL if not found. + const AbstractMetaEnum* findAbstractMetaEnum(const EnumTypeEntry* typeEntry) const; + + /// Returns an AbstractMetaEnum for a given TypeEntry that is an EnumTypeEntry, or NULL if not found. + const AbstractMetaEnum* findAbstractMetaEnum(const TypeEntry* typeEntry) const; + + /// Returns an AbstractMetaEnum for the enum related to a given FlagsTypeEntry, or NULL if not found. + const AbstractMetaEnum* findAbstractMetaEnum(const FlagsTypeEntry* typeEntry) const; + + /// Returns an AbstractMetaEnum for a given AbstractMetaType that holds an EnumTypeEntry, or NULL if not found. + const AbstractMetaEnum* findAbstractMetaEnum(const AbstractMetaType* metaType) const; + + /// Returns the output directory + QString outputDirectory() const; + + /// Set the output directory + void setOutputDirectory(const QString &outDir); + + /** + * Start the code generation, be sure to call setClasses before callign this method. + * For each class it creates a QTextStream, call the write method with the current + * class and the associated text stream, then write the text stream contents if needed. + * \see #write + */ + bool generate(); + + + /// Generates a file for given AbstractMetaClass or AbstractMetaType (smart pointer case). + bool generateFileForContext(GeneratorContext &context); + + /// Returns the file base name for a smart pointer. + QString getFileNameBaseForSmartPointer(const AbstractMetaType *smartPointerType, + const AbstractMetaClass *smartPointerClass) const; + + /// Returns the generator's name. Used for cosmetic purposes. + virtual const char* name() const = 0; + + /// Returns true if the generator should generate any code for the TypeEntry. + bool shouldGenerateTypeEntry(const TypeEntry*) const; + + /// Returns true if the generator should generate any code for the AbstractMetaClass. + virtual bool shouldGenerate(const AbstractMetaClass *) const; + + /// Returns the subdirectory used to write the binding code of an AbstractMetaClass. + virtual QString subDirectoryForClass(const AbstractMetaClass* clazz) const; + + /** + * Translate metatypes to binding source format. + * \param metatype a pointer to metatype + * \param context the current meta class + * \param option some extra options + * \return the metatype translated to binding source format + */ + QString translateType(const AbstractMetaType *metatype, + const AbstractMetaClass *context, + Options options = NoOption) const; + + /** + * Function used to write the fucntion arguments on the class buffer. + * \param s the class output buffer + * \param metafunction the pointer to metafunction information + * \param count the number of function arguments + * \param options some extra options used during the parser + */ + virtual void writeFunctionArguments(QTextStream &s, + const AbstractMetaFunction *metafunction, + Options options = NoOption) const = 0; + + virtual void writeArgumentNames(QTextStream &s, + const AbstractMetaFunction *metafunction, + Options options = NoOption) const = 0; + + void replaceTemplateVariables(QString &code, const AbstractMetaFunction *func); + + /** + * Returns the license comment to be prepended to each source file generated. + */ + QString licenseComment() const; + + /** + * Sets the license comment to be prepended to each source file generated. + */ + void setLicenseComment(const QString &licenseComment); + + /** + * Returns the package name. + */ + QString packageName() const; + + /** + * Retrieves the name of the currently processed module. + * While package name is a complete package idetification, e.g. 'PySide.QtCore', + * a module name represents the last part of the package, e.g. 'QtCore'. + * If the target language separates the modules with characters other than + * dots ('.') the generator subclass must overload this method. + * \return a string representing the last part of a package name + */ + virtual QString moduleName() const; + + /** + * Retrieves a list of constructors used in implicit conversions + * available on the given type. The TypeEntry must be a value-type + * or else it will return an empty list. + * \param type a TypeEntry that is expected to be a value-type + * \return a list of constructors that could be used as implicit converters + */ + AbstractMetaFunctionList implicitConversions(const TypeEntry* type) const; + + /// Convenience function for implicitConversions(const TypeEntry* type). + AbstractMetaFunctionList implicitConversions(const AbstractMetaType* metaType) const; + + /// Check if type is a pointer. + static bool isPointer(const AbstractMetaType* type); + + /// Tells if the type or class is an Object (or QObject) Type. + static bool isObjectType(const TypeEntry* type); + static bool isObjectType(const ComplexTypeEntry* type); + static bool isObjectType(const AbstractMetaType* metaType); + static bool isObjectType(const AbstractMetaClass* metaClass); + + /// Returns true if the type is a C string (const char*). + static bool isCString(const AbstractMetaType* type); + /// Returns true if the type is a void pointer. + static bool isVoidPointer(const AbstractMetaType* type); + + // Returns the full name of the type. + QString getFullTypeName(const TypeEntry* type) const; + QString getFullTypeName(const AbstractMetaType* type) const; + QString getFullTypeName(const AbstractMetaClass* metaClass) const; + + /** + * Returns the full qualified C++ name for an AbstractMetaType, but removing modifiers + * as 'const', '&', and '*' (except if the class is not derived from a template). + * This is useful for instantiated templates. + */ + QString getFullTypeNameWithoutModifiers(const AbstractMetaType* type) const; + + /** + * Tries to build a minimal constructor for the type. + * It will check first for a user defined default constructor. + * Returns a null string if it fails. + */ + QString minimalConstructor(const TypeEntry* type) const; + QString minimalConstructor(const AbstractMetaType* type) const; + QString minimalConstructor(const AbstractMetaClass* metaClass) const; + +protected: + /** + * Returns the file name used to write the binding code of an AbstractMetaClass/Type. + * \param context the GeneratorContext which contains an AbstractMetaClass or AbstractMetaType + * for which the file name must be returned + * \return the file name used to write the binding code for the class + */ + virtual QString fileNameSuffix() const = 0; + virtual QString fileNameForContext(GeneratorContext &context) const = 0; + + + virtual bool doSetup(const QMap& args) = 0; + + /** + * Write the bindding code for an AbstractMetaClass. + * This is called by generate method. + * \param s text stream to write the generated output + * \param metaClass the class that should be generated + */ + virtual void generateClass(QTextStream& s, GeneratorContext &classContext) = 0; + virtual bool finishGeneration() = 0; + + /** + * Returns the subdirectory path for a given package + * (aka module, aka library) name. + * If the target language separates the package modules with characters other + * than dots ('.') the generator subclass must overload this method. + * /param packageName complete package name for which to return the subdirectory path + * or nothing the use the name of the currently processed package + * /return a string representing the subdirectory path for the given package + */ + virtual QString subDirectoryForPackage(QString packageName = QString()) const; + + QVector instantiatedContainers() const; + QVector instantiatedSmartPointers() const; + + static QString getSimplifiedContainerTypeName(const AbstractMetaType *type); + void addInstantiatedContainersAndSmartPointers(const AbstractMetaType *type, + const QString &context); + +private: + struct GeneratorPrivate; + GeneratorPrivate* m_d; + void collectInstantiatedContainersAndSmartPointers(const AbstractMetaFunction* func); + void collectInstantiatedContainersAndSmartPointers(const AbstractMetaClass *metaClass); + void collectInstantiatedContainersAndSmartPointers(); +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(Generator::Options) +typedef QSharedPointer GeneratorPtr; +typedef QVector Generators; + +/** +* Utility class to store the identation level, use it in a QTextStream. +*/ +class Indentor +{ +public: + Indentor() : indent(0) {} + int indent; +}; + +/** +* Class that use the RAII idiom to set and unset the identation level. +*/ +class Indentation +{ +public: + Indentation(Indentor &indentor) : indentor(indentor) + { + indentor.indent++; + } + ~Indentation() + { + indentor.indent--; + } + +private: + Indentor &indentor; +}; + +inline QTextStream &operator <<(QTextStream &s, const Indentor &indentor) +{ + for (int i = 0; i < indentor.indent; ++i) + s << " "; + return s; +} + +#endif // GENERATOR_H + diff --git a/sources/shiboken2/generator/main.cpp b/sources/shiboken2/generator/main.cpp new file mode 100644 index 0000000..0b7c152 --- /dev/null +++ b/sources/shiboken2/generator/main.cpp @@ -0,0 +1,668 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "generator.h" +#include "shibokenconfig.h" +#include "cppgenerator.h" +#include "headergenerator.h" +#include "qtdocgenerator.h" + +#ifdef _WINDOWS + #define PATH_SPLITTER ";" +#else + #define PATH_SPLITTER ":" +#endif + +static inline QString languageLevelOption() { return QStringLiteral("language-level"); } +static inline QString includePathOption() { return QStringLiteral("include-paths"); } +static inline QString frameworkIncludePathOption() { return QStringLiteral("framework-include-paths"); } +static inline QString systemIncludePathOption() { return QStringLiteral("system-include-paths"); } +static inline QString typesystemPathOption() { return QStringLiteral("typesystem-paths"); } +static inline QString helpOption() { return QStringLiteral("help"); } +static const char helpHint[] = "Note: use --help or -h for more information.\n"; + +namespace { + +class ArgsHandler +{ +public: + explicit ArgsHandler(const QMap& other); + virtual ~ArgsHandler(); + + inline QMap& args() const + { + return *m_args; + } + + inline bool argExists(const QString& s) const + { + return m_args->contains(s); + } + + QString removeArg(const QString& s); + bool argExistsRemove(const QString& s); + + inline QString argValue(const QString& s) const + { + return m_args->value(s); + } + + inline bool noArgs() const + { + return m_args->isEmpty(); + } + + QString errorMessage() const; + +private: + QMap* m_args; +}; + +ArgsHandler::ArgsHandler(const QMap& other) + : m_args(new QMap(other)) +{ +} + +ArgsHandler::~ArgsHandler() +{ + delete m_args; +} + +QString ArgsHandler::removeArg(const QString& s) +{ + QString retval; + + if (argExists(s)) { + retval = argValue(s); + m_args->remove(s); + } + + return retval; +} + +bool ArgsHandler::argExistsRemove(const QString& s) +{ + bool retval = false; + + if (argExists(s)) { + retval = true; + m_args->remove(s); + } + + return retval; +} + +QString ArgsHandler::errorMessage() const +{ + typedef QMap::ConstIterator StringMapConstIt; + + QString message; + QTextStream str(&message); + str << "shiboken: Called with wrong arguments:"; + for (StringMapConstIt it = m_args->cbegin(), end = m_args->cend(); it != end; ++it) { + str << ' ' << it.key(); + if (!it.value().isEmpty()) + str << ' ' << it.value(); + } + str << "\nCommand line: " << QCoreApplication::arguments().join(QLatin1Char(' ')); + return message; +} +} + +typedef Generator::OptionDescriptions OptionDescriptions; + +static void printOptions(QTextStream& s, const OptionDescriptions& options) +{ + s.setFieldAlignment(QTextStream::AlignLeft); + for (const auto &od : options) { + if (!od.first.startsWith(QLatin1Char('-'))) + s << "--"; + s << od.first; + if (od.second.isEmpty()) { + s << ", "; + } else { + s << endl; + const auto lines = od.second.splitRef(QLatin1Char('\n')); + for (const auto &line : lines) + s << " " << line << endl; + s << endl; + } + } +} + +typedef void (*getGeneratorsFunc)(QLinkedList*); + +static bool processProjectFile(QFile& projectFile, QMap& args) +{ + QByteArray line = projectFile.readLine().trimmed(); + if (line.isEmpty() || line != "[generator-project]") + return false; + + QStringList includePaths; + QStringList frameworkIncludePaths; + QStringList systemIncludePaths; + QStringList typesystemPaths; + QStringList apiVersions; + QString languageLevel; + + while (!projectFile.atEnd()) { + line = projectFile.readLine().trimmed(); + if (line.isEmpty()) + continue; + + int split = line.indexOf('='); + QByteArray key; + QString value; + if (split > 0) { + key = line.left(split - 1).trimmed(); + value = QString::fromUtf8(line.mid(split + 1).trimmed()); + } else { + key = line; + } + + if (key == "include-path") + includePaths << QDir::toNativeSeparators(value); + else if (key == "framework-include-path") + frameworkIncludePaths << QDir::toNativeSeparators(value); + else if (key == "system-include-paths") + systemIncludePaths << QDir::toNativeSeparators(value); + else if (key == "typesystem-path") + typesystemPaths << QDir::toNativeSeparators(value); + else if (key == "language-level") + languageLevel = value; + else if (key == "api-version") + apiVersions << value; + else if (key == "header-file") + args.insert(QLatin1String("arg-1"), value); + else if (key == "typesystem-file") + args.insert(QLatin1String("arg-2"), value); + else + args.insert(QString::fromUtf8(key), value); + } + + if (!includePaths.isEmpty()) + args.insert(includePathOption(), includePaths.join(QLatin1String(PATH_SPLITTER))); + + if (!frameworkIncludePaths.isEmpty()) + args.insert(frameworkIncludePathOption(), + frameworkIncludePaths.join(QLatin1String(PATH_SPLITTER))); + if (!systemIncludePaths.isEmpty()) { + args.insert(systemIncludePathOption(), + systemIncludePaths.join(QLatin1String(PATH_SPLITTER))); + } + + if (!typesystemPaths.isEmpty()) + args.insert(typesystemPathOption(), typesystemPaths.join(QLatin1String(PATH_SPLITTER))); + if (!apiVersions.isEmpty()) + args.insert(QLatin1String("api-version"), apiVersions.join(QLatin1Char('|'))); + if (!languageLevel.isEmpty()) + args.insert(languageLevelOption(), languageLevel); + return true; +} + +static QMap getInitializedArguments() +{ + QMap args; + QStringList arguments = QCoreApplication::arguments(); + QString appName = arguments.constFirst(); + arguments.removeFirst(); + + QString projectFileName; + for (const QString &arg : qAsConst(arguments)) { + if (arg.startsWith(QLatin1String("--project-file"))) { + int split = arg.indexOf(QLatin1Char('=')); + if (split > 0) + projectFileName = arg.mid(split + 1).trimmed(); + break; + } + } + + if (projectFileName.isNull()) + return args; + + if (!QFile::exists(projectFileName)) { + std::cerr << qPrintable(appName) << ": Project file \""; + std::cerr << qPrintable(projectFileName) << "\" not found."; + std::cerr << std::endl; + return args; + } + + QFile projectFile(projectFileName); + if (!projectFile.open(QIODevice::ReadOnly)) + return args; + + if (!processProjectFile(projectFile, args)) { + std::cerr << qPrintable(appName) << ": first line of project file \""; + std::cerr << qPrintable(projectFileName) << "\" must be the string \"[generator-project]\""; + std::cerr << std::endl; + return args; + } + + return args; +} + +// Concatenate values of path arguments that can occur multiple times on the +// command line. +static void addPathOptionValue(const QString &option, const QString &value, + QMap &args) +{ + const QMap::iterator it = args.find(option); + if (it != args.end()) + it.value().append(QLatin1String(PATH_SPLITTER) + value); + else + args.insert(option, value); +} + +static void getCommandLineArg(QString arg, int &argNum, QMap &args) +{ + if (arg.startsWith(QLatin1String("--"))) { + arg.remove(0, 2); + const int split = arg.indexOf(QLatin1Char('=')); + if (split < 0) { + args.insert(arg, QString()); + return; + } + const QString option = arg.left(split); + const QString value = arg.mid(split + 1).trimmed(); + if (option == includePathOption() || option == frameworkIncludePathOption() + || option == systemIncludePathOption() || option == typesystemPathOption()) { + addPathOptionValue(option, value, args); + } else { + args.insert(option, value); + } + return; + } + if (arg.startsWith(QLatin1Char('-'))) { + arg.remove(0, 1); + if (arg.startsWith(QLatin1Char('I'))) // Shorthand path arguments -I/usr/include... + addPathOptionValue(includePathOption(), arg.mid(1), args); + else if (arg.startsWith(QLatin1Char('F'))) + addPathOptionValue(frameworkIncludePathOption(), arg.mid(1), args); + else if (arg.startsWith(QLatin1String("isystem"))) + addPathOptionValue(systemIncludePathOption(), arg.mid(7), args); + else if (arg.startsWith(QLatin1Char('T'))) + addPathOptionValue(typesystemPathOption(), arg.mid(1), args); + else if (arg == QLatin1String("h")) + args.insert(helpOption(), QString()); + else if (arg.startsWith(QLatin1String("std="))) + args.insert(languageLevelOption(), arg.mid(4)); + else + args.insert(arg, QString()); + return; + } + argNum++; + args.insert(QStringLiteral("arg-") + QString::number(argNum), arg); +} + +static QMap getCommandLineArgs() +{ + QMap args = getInitializedArguments(); + QStringList arguments = QCoreApplication::arguments(); + arguments.removeFirst(); + + int argNum = 0; + for (const QString &carg : qAsConst(arguments)) + getCommandLineArg(carg.trimmed(), argNum, args); + + return args; +} + +static inline Generators docGenerators() +{ + Generators result; +#ifdef DOCSTRINGS_ENABLED + result.append(GeneratorPtr(new QtDocGenerator)); +#endif + return result; +} + +static inline Generators shibokenGenerators() +{ + Generators result; + result << GeneratorPtr(new CppGenerator) << GeneratorPtr(new HeaderGenerator); + return result; +} + +static inline QString languageLevelDescription() +{ + return QLatin1String("C++ Language level (c++11..c++17, default=") + + QLatin1String(clang::languageLevelOption(clang::emulatedCompilerLanguageLevel())) + + QLatin1Char(')'); +} + +void printUsage() +{ + QTextStream s(stdout); + s << "Usage:\n " + << "shiboken [options] header-file typesystem-file\n\n" + << "General options:\n"; + const QString pathSyntax = QLatin1String("[" PATH_SPLITTER "" PATH_SPLITTER "...]"); + OptionDescriptions generalOptions = OptionDescriptions() + << qMakePair(QLatin1String("api-version=<\"package mask\">,<\"version\">"), + QLatin1String("Specify the supported api version used to generate the bindings")) + << qMakePair(QLatin1String("debug-level=[sparse|medium|full]"), + QLatin1String("Set the debug level")) + << qMakePair(QLatin1String("documentation-only"), + QLatin1String("Do not generates any code, just the documentation")) + << qMakePair(QLatin1String("drop-type-entries=\"[;TypeEntry1;...]\""), + QLatin1String("Semicolon separated list of type system entries (classes, namespaces,\n" + "global functions and enums) to be dropped from generation.")) + << qMakePair(QLatin1String("-F") + pathSyntax, QString()) + << qMakePair(QLatin1String("framework-include-paths=") + pathSyntax, + QLatin1String("Framework include paths used by the C++ parser")) + << qMakePair(QLatin1String("-isystem") + pathSyntax, QString()) + << qMakePair(QLatin1String("system-include-paths=") + pathSyntax, + QLatin1String("System include paths used by the C++ parser")) + << qMakePair(QLatin1String("generator-set=<\"generator module\">"), + QLatin1String("generator-set to be used. e.g. qtdoc")) + << qMakePair(QLatin1String("-h"), QString()) + << qMakePair(helpOption(), + QLatin1String("Display this help and exit")) + << qMakePair(QLatin1String("-I") + pathSyntax, QString()) + << qMakePair(QLatin1String("include-paths=") + pathSyntax, + QLatin1String("Include paths used by the C++ parser")) + << qMakePair(languageLevelOption() + QLatin1String("=, -std="), + languageLevelDescription()) + << qMakePair(QLatin1String("license-file="), + QLatin1String("File used for copyright headers of generated files")) + << qMakePair(QLatin1String("no-suppress-warnings"), + QLatin1String("Show all warnings")) + << qMakePair(QLatin1String("output-directory="), + QLatin1String("The directory where the generated files will be written")) + << qMakePair(QLatin1String("project-file="), + QLatin1String("text file containing a description of the binding project.\n" + "Replaces and overrides command line arguments")) + << qMakePair(QLatin1String("silent"), + QLatin1String("Avoid printing any message")) + << qMakePair(QLatin1String("-T") + pathSyntax, QString()) + << qMakePair(QLatin1String("typesystem-paths=") + pathSyntax, + QLatin1String("Paths used when searching for typesystems")) + << qMakePair(QLatin1String("version"), + QLatin1String("Output version information and exit")); + printOptions(s, generalOptions); + + const Generators generators = shibokenGenerators() + docGenerators(); + for (const GeneratorPtr &generator : generators) { + const OptionDescriptions options = generator->options(); + if (!options.isEmpty()) { + s << endl << generator->name() << " options:\n\n"; + printOptions(s, generator->options()); + } + } +} + +static inline void printVerAndBanner() +{ + std::cout << "shiboken v" SHIBOKEN_VERSION << std::endl; + std::cout << "Copyright (C) 2016 The Qt Company Ltd." << std::endl; +} + +static inline void errorPrint(const QString& s) +{ + QStringList arguments = QCoreApplication::arguments(); + arguments.pop_front(); + std::cerr << "shiboken: " << qPrintable(s) + << "\nCommand line: " << qPrintable(arguments.join(QLatin1Char(' '))) << '\n'; +} + +static QString msgInvalidVersion(const QString &package, const QString &version) +{ + return QLatin1String("Invalid version \"") + version + + QLatin1String("\" specified for package ") + package + QLatin1Char('.'); +} + +static void parseIncludePathOption(const QString &option, HeaderType headerType, + ArgsHandler &args, + ApiExtractor &extractor) +{ + const QString path = args.removeArg(option); + if (!path.isEmpty()) { + const QStringList includePathListList = path.split(QLatin1String(PATH_SPLITTER)); + for (const QString &s : includePathListList) + extractor.addIncludePath(HeaderPath{QFile::encodeName(s), headerType}); + } +} + +int main(int argc, char *argv[]) +{ + // PYSIDE-757: Request a deterministic ordering of QHash in the code model + // and type system. + qSetGlobalQHashSeed(0); + QElapsedTimer timer; + timer.start(); + // needed by qxmlpatterns + QCoreApplication app(argc, argv); + ReportHandler::install(); + qCDebug(lcShiboken()).noquote().nospace() << QCoreApplication::arguments().join(QLatin1Char(' ')); + + // Store command arguments in a map + QMap args = getCommandLineArgs(); + ArgsHandler argsHandler(args); + Generators generators; + + if (argsHandler.argExistsRemove(QLatin1String("version"))) { + printVerAndBanner(); + return EXIT_SUCCESS; + } + + QString generatorSet = argsHandler.removeArg(QLatin1String("generator-set")); + // Also check QLatin1String("generatorSet") command line argument for backward compatibility. + if (generatorSet.isEmpty()) + generatorSet = argsHandler.removeArg(QLatin1String("generatorSet")); + + // Pre-defined generator sets. + if (generatorSet == QLatin1String("qtdoc")) { + generators = docGenerators(); + if (generators.isEmpty()) { + errorPrint(QLatin1String("Doc strings extractions was not enabled in this shiboken build.")); + return EXIT_FAILURE; + } + } else if (generatorSet.isEmpty() || generatorSet == QLatin1String("shiboken")) { + generators = shibokenGenerators(); + } else { + errorPrint(QLatin1String("Unknown generator set, try \"shiboken\" or \"qtdoc\".")); + return EXIT_FAILURE; + } + + if (argsHandler.argExistsRemove(QLatin1String("help"))) { + printUsage(); + return EXIT_SUCCESS; + } + + QString licenseComment; + QString licenseFileName = argsHandler.removeArg(QLatin1String("license-file")); + if (!licenseFileName.isEmpty()) { + if (QFile::exists(licenseFileName)) { + QFile licenseFile(licenseFileName); + if (licenseFile.open(QIODevice::ReadOnly)) + licenseComment = QString::fromUtf8(licenseFile.readAll()); + } else { + errorPrint(QStringLiteral("Couldn't find the file containing the license heading: %1"). + arg(licenseFileName)); + return EXIT_FAILURE; + } + } + + QString outputDirectory = argsHandler.removeArg(QLatin1String("output-directory")); + if (outputDirectory.isEmpty()) + outputDirectory = QLatin1String("out"); + + if (!QDir(outputDirectory).exists()) { + if (!QDir().mkpath(outputDirectory)) { + qCWarning(lcShiboken).noquote().nospace() + << "Can't create output directory: " << QDir::toNativeSeparators(outputDirectory); + return EXIT_FAILURE; + } + } + + // Create and set-up API Extractor + ApiExtractor extractor; + extractor.setLogDirectory(outputDirectory); + + if (argsHandler.argExistsRemove(QLatin1String("silent"))) { + extractor.setSilent(true); + } else { + QString level = argsHandler.removeArg(QLatin1String("debug-level")); + if (!level.isEmpty()) { + if (level == QLatin1String("sparse")) + extractor.setDebugLevel(ReportHandler::SparseDebug); + else if (level == QLatin1String("medium")) + extractor.setDebugLevel(ReportHandler::MediumDebug); + else if (level == QLatin1String("full")) + extractor.setDebugLevel(ReportHandler::FullDebug); + } + } + if (argsHandler.argExistsRemove(QLatin1String("no-suppress-warnings"))) + extractor.setSuppressWarnings(false); + + if (argsHandler.argExists(QLatin1String("api-version"))) { + const QStringList &versions = argsHandler.removeArg(QLatin1String("api-version")).split(QLatin1Char('|')); + for (const QString &fullVersion : versions) { + QStringList parts = fullVersion.split(QLatin1Char(',')); + QString package; + QString version; + package = parts.count() == 1 ? QLatin1String("*") : parts.constFirst(); + version = parts.constLast(); + if (!extractor.setApiVersion(package, version)) { + errorPrint(msgInvalidVersion(package, version)); + return EXIT_FAILURE; + } + } + } + + if (argsHandler.argExists(QLatin1String("drop-type-entries"))) + extractor.setDropTypeEntries(argsHandler.removeArg(QLatin1String("drop-type-entries"))); + + QString path = argsHandler.removeArg(QLatin1String("typesystem-paths")); + if (!path.isEmpty()) + extractor.addTypesystemSearchPath(path.split(QLatin1String(PATH_SPLITTER))); + + parseIncludePathOption(includePathOption(), HeaderType::Standard, + argsHandler, extractor); + parseIncludePathOption(frameworkIncludePathOption(), HeaderType::Framework, + argsHandler, extractor); + parseIncludePathOption(systemIncludePathOption(), HeaderType::System, + argsHandler, extractor); + + QString cppFileName = argsHandler.removeArg(QLatin1String("arg-1")); + const QFileInfo cppFileNameFi(cppFileName); + if (!cppFileNameFi.isFile() && !cppFileNameFi.isSymLink()) { + errorPrint(QLatin1Char('"') + cppFileName + QLatin1String("\" does not exist.")); + return EXIT_FAILURE; + } + + QString typeSystemFileName = argsHandler.removeArg(QLatin1String("arg-2")); + QString messagePrefix = QFileInfo(typeSystemFileName).baseName(); + if (messagePrefix.startsWith(QLatin1String("typesystem_"))) + messagePrefix.remove(0, 11); + ReportHandler::setPrefix(QLatin1Char('(') + messagePrefix + QLatin1Char(')')); + + /* Make sure to remove the project file's arguments (if any) and + * --project-file, also the arguments of each generator before + * checking if there isn't any existing arguments in argsHandler. + */ + argsHandler.removeArg(QLatin1String("project-file")); + QMap projectFileArgs = getInitializedArguments(); + if (!projectFileArgs.isEmpty()) { + QMap::const_iterator it = + projectFileArgs.constBegin(); + for ( ; it != projectFileArgs.constEnd(); ++it) + argsHandler.removeArg(it.key()); + } + for (const GeneratorPtr &generator : qAsConst(generators)) { + const OptionDescriptions &options = generator->options(); + for (const auto &od : options) + argsHandler.removeArg(od.first); + } + + const QString languageLevel = argsHandler.removeArg(languageLevelOption()); + if (!languageLevel.isEmpty()) { + const QByteArray languageLevelBA = languageLevel.toLatin1(); + const LanguageLevel level = clang::languageLevelFromOption(languageLevelBA.constData()); + if (level == LanguageLevel::Default) { + std::cout << "Invalid argument for language level: \"" + << languageLevelBA.constData() << "\"\n" << helpHint; + return EXIT_FAILURE; + } + extractor.setLanguageLevel(level); + } + + if (!argsHandler.noArgs()) { + errorPrint(argsHandler.errorMessage()); + std::cout << helpHint; + return EXIT_FAILURE; + } + + if (typeSystemFileName.isEmpty()) { + std::cout << "You must specify a Type System file." << std::endl << helpHint; + return EXIT_FAILURE; + } + + extractor.setCppFileName(cppFileNameFi.absoluteFilePath()); + extractor.setTypeSystem(typeSystemFileName); + + if (!extractor.run()) { + errorPrint(QLatin1String("Error running ApiExtractor.")); + return EXIT_FAILURE; + } + + if (!extractor.classCount()) + qCWarning(lcShiboken) << "No C++ classes found!"; + + qCDebug(lcShiboken) << extractor; + + for (const GeneratorPtr &g : qAsConst(generators)) { + g->setOutputDirectory(outputDirectory); + g->setLicenseComment(licenseComment); + if (g->setup(extractor, args)) { + if (!g->generate()) { + errorPrint(QLatin1String("Error running generator: ") + + QLatin1String(g->name()) + QLatin1Char('.')); + return EXIT_FAILURE; + } + } + } + + QByteArray doneMessage = "Done, " + QByteArray::number(timer.elapsed()) + "ms"; + if (const int w = ReportHandler::warningCount()) + doneMessage += ", " + QByteArray::number(w) + " warnings"; + if (const int sw = ReportHandler::suppressedCount()) + doneMessage += " (" + QByteArray::number(sw) + " known issues)"; + qCDebug(lcShiboken()).noquote().nospace() << doneMessage; + std::cout << doneMessage.constData() << std::endl; + + return EXIT_SUCCESS; +} diff --git a/sources/shiboken2/generator/qtdoc/CMakeLists.txt b/sources/shiboken2/generator/qtdoc/CMakeLists.txt new file mode 100644 index 0000000..1361ba8 --- /dev/null +++ b/sources/shiboken2/generator/qtdoc/CMakeLists.txt @@ -0,0 +1,21 @@ +project(qtdoc_generator) + +set(qtdoc_generator_SRC +qtdocgenerator.cpp +) + +include_directories(${generators_SOURCE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ${APIEXTRACTOR_INCLUDE_DIR}) +add_executable(docgenerator main.cpp) +set_target_properties(docgenerator PROPERTIES OUTPUT_NAME docgenerator${generator_SUFFIX}) + +target_link_libraries(docgenerator ${Qt5Core_LIBRARES}) + +add_library(qtdoc_generator SHARED ${qtdoc_generator_SRC}) +target_link_libraries(qtdoc_generator ${APIEXTRACTOR_LIBRARY} ${Qt5Core_LIBRARES} genrunner) +set_property(TARGET qtdoc_generator PROPERTY PREFIX "") + +install(TARGETS qtdoc_generator DESTINATION ${generator_plugin_DIR}) +install(TARGETS docgenerator DESTINATION bin) + diff --git a/sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp b/sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp new file mode 100644 index 0000000..d47ba8b --- /dev/null +++ b/sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp @@ -0,0 +1,2312 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtdocgenerator.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static Indentor INDENT; + +static inline QString additionalDocumentationOption() { return QStringLiteral("additional-documentation"); } + +static inline QString nameAttribute() { return QStringLiteral("name"); } +static inline QString titleAttribute() { return QStringLiteral("title"); } +static inline QString fullTitleAttribute() { return QStringLiteral("fulltitle"); } +static inline QString briefAttribute() { return QStringLiteral("brief"); } + +static bool shouldSkip(const AbstractMetaFunction* func) +{ + // Constructors go to separate section + if (DocParser::skipForQuery(func) || func->isConstructor()) + return true; + + // Search a const clone (QImage::bits() vs QImage::bits() const) + if (func->isConstant()) + return false; + + const AbstractMetaArgumentList funcArgs = func->arguments(); + const AbstractMetaFunctionList &ownerFunctions = func->ownerClass()->functions(); + for (AbstractMetaFunction *f : ownerFunctions) { + if (f != func + && f->isConstant() + && f->name() == func->name() + && f->arguments().count() == funcArgs.count()) { + // Compare each argument + bool cloneFound = true; + + const AbstractMetaArgumentList fargs = f->arguments(); + for (int i = 0, max = funcArgs.count(); i < max; ++i) { + if (funcArgs.at(i)->type()->typeEntry() != fargs.at(i)->type()->typeEntry()) { + cloneFound = false; + break; + } + } + if (cloneFound) + return true; + } + } + return false; +} + +static bool functionSort(const AbstractMetaFunction* func1, const AbstractMetaFunction* func2) +{ + return func1->name() < func2->name(); +} + +class Pad +{ +public: + explicit Pad(char c, int count) : m_char(c), m_count(count) {} + + void write(QTextStream &str) const + { + for (int i = 0; i < m_count; ++i) + str << m_char; + } + +private: + const char m_char; + const int m_count; +}; + +inline QTextStream &operator<<(QTextStream &str, const Pad &pad) +{ + pad.write(str); + return str; +} + +template +static int writeEscapedRstText(QTextStream &str, const String &s) +{ + int escaped = 0; + for (const QChar &c : s) { + switch (c.unicode()) { + case '*': + case '`': + case '_': + case '\\': + str << '\\'; + ++escaped; + break; + } + str << c; + } + return s.size() + escaped; +} + +class escape +{ +public: + explicit escape(const QStringRef &s) : m_string(s) {} + + void write(QTextStream &str) const { writeEscapedRstText(str, m_string); } + +private: + const QStringRef m_string; +}; + +inline QTextStream &operator<<(QTextStream &str, const escape &e) +{ + e.write(str); + return str; +} + +// Return last character of a QString-buffered stream. +static QChar lastChar(const QTextStream &str) +{ + const QString *string = str.string(); + Q_ASSERT(string); + return string->isEmpty() ? QChar() : *(string->crbegin()); +} + +static QTextStream &ensureEndl(QTextStream &s) +{ + if (lastChar(s) != QLatin1Char('\n')) + s << endl; + return s; +} + +static void formatSince(QTextStream &s, const char *what, const TypeEntry *te) +{ + if (te && te->version() > QVersionNumber(0, 0)) { + s << ".. note:: This " << what << " was introduced in Qt " + << te->version().toString() << '.' << endl; + } +} + +// RST anchor string: Anything else but letters, numbers, '_' or '.' replaced by '-' +static inline bool isValidRstLabelChar(QChar c) +{ + return c.isLetterOrNumber() || c == QLatin1Char('_') || c == QLatin1Char('.'); +} + +static QString toRstLabel(QString s) +{ + for (int i = 0, size = s.size(); i < size; ++i) { + if (!isValidRstLabelChar(s.at(i))) + s[i] = QLatin1Char('-'); + } + return s; +} + +class rstLabel +{ +public: + explicit rstLabel(const QString &l) : m_label(l) {} + + friend QTextStream &operator<<(QTextStream &str, const rstLabel &a) + { + str << ".. _" << toRstLabel(a.m_label) << ':' << endl << endl; + return str; + } + +private: + const QString &m_label; +}; + +static QString msgTagWarning(const QXmlStreamReader &reader, const QString &context, + const QString &tag, const QString &message) +{ + QString result; + QTextStream str(&result); + str << "While handling <"; + const QStringRef currentTag = reader.name(); + if (currentTag.isEmpty()) + str << tag; + else + str << currentTag; + str << "> in " << context << ", line "<< reader.lineNumber() + << ": " << message; + return result; +} + +static QString msgFallbackWarning(const QXmlStreamReader &reader, const QString &context, + const QString &tag, const QString &location, const QString &identifier, + const QString &fallback) +{ + QString message = QLatin1String("Falling back to \"") + + QDir::toNativeSeparators(fallback) + QLatin1String("\" for \"") + location + + QLatin1Char('"'); + if (!identifier.isEmpty()) + message += QLatin1String(" [") + identifier + QLatin1Char(']'); + return msgTagWarning(reader, context, tag, message); +} + +struct QtXmlToSphinx::LinkContext +{ + enum Type + { + Method = 0x1, Function = 0x2, + FunctionMask = Method | Function, + Class = 0x4, Attribute = 0x8, Module = 0x10, + Reference = 0x20, External= 0x40 + }; + + enum Flags { InsideBold = 0x1, InsideItalic = 0x2 }; + + explicit LinkContext(const QString &ref) : linkRef(ref) {} + + QString linkRef; + QString linkText; + Type type = Reference; + int flags = 0; +}; + +static const char *linkKeyWord(QtXmlToSphinx::LinkContext::Type type) +{ + switch (type) { + case QtXmlToSphinx::LinkContext::Method: + return ":meth:"; + case QtXmlToSphinx::LinkContext::Function: + return ":func:"; + case QtXmlToSphinx::LinkContext::Class: + return ":class:"; + case QtXmlToSphinx::LinkContext::Attribute: + return ":attr:"; + case QtXmlToSphinx::LinkContext::Module: + return ":mod:"; + case QtXmlToSphinx::LinkContext::Reference: + return ":ref:"; + case QtXmlToSphinx::LinkContext::External: + break; + case QtXmlToSphinx::LinkContext::FunctionMask: + break; + } + return ""; +} + +QTextStream &operator<<(QTextStream &str, const QtXmlToSphinx::LinkContext &linkContext) +{ + // Temporarily turn off bold/italic since links do not work within + if (linkContext.flags & QtXmlToSphinx::LinkContext::InsideBold) + str << "**"; + else if (linkContext.flags & QtXmlToSphinx::LinkContext::InsideItalic) + str << '*'; + str << ' ' << linkKeyWord(linkContext.type) << '`'; + const bool isExternal = linkContext.type == QtXmlToSphinx::LinkContext::External; + if (!linkContext.linkText.isEmpty()) { + writeEscapedRstText(str, linkContext.linkText); + if (isExternal && !linkContext.linkText.endsWith(QLatin1Char(' '))) + str << ' '; + str << '<'; + } + // Convert page titles to RST labels + str << (linkContext.type == QtXmlToSphinx::LinkContext::Reference + ? toRstLabel(linkContext.linkRef) : linkContext.linkRef); + if (!linkContext.linkText.isEmpty()) + str << '>'; + str << '`'; + if (isExternal) + str << '_'; + str << ' '; + if (linkContext.flags & QtXmlToSphinx::LinkContext::InsideBold) + str << "**"; + else if (linkContext.flags & QtXmlToSphinx::LinkContext::InsideItalic) + str << '*'; + return str; +} + +QtXmlToSphinx::QtXmlToSphinx(QtDocGenerator* generator, const QString& doc, const QString& context) + : m_context(context), m_generator(generator), m_insideBold(false), m_insideItalic(false) +{ + m_handlerMap.insert(QLatin1String("heading"), &QtXmlToSphinx::handleHeadingTag); + m_handlerMap.insert(QLatin1String("brief"), &QtXmlToSphinx::handleParaTag); + m_handlerMap.insert(QLatin1String("para"), &QtXmlToSphinx::handleParaTag); + m_handlerMap.insert(QLatin1String("italic"), &QtXmlToSphinx::handleItalicTag); + m_handlerMap.insert(QLatin1String("bold"), &QtXmlToSphinx::handleBoldTag); + m_handlerMap.insert(QLatin1String("see-also"), &QtXmlToSphinx::handleSeeAlsoTag); + m_handlerMap.insert(QLatin1String("snippet"), &QtXmlToSphinx::handleSnippetTag); + m_handlerMap.insert(QLatin1String("dots"), &QtXmlToSphinx::handleDotsTag); + m_handlerMap.insert(QLatin1String("codeline"), &QtXmlToSphinx::handleDotsTag); + m_handlerMap.insert(QLatin1String("table"), &QtXmlToSphinx::handleTableTag); + m_handlerMap.insert(QLatin1String("header"), &QtXmlToSphinx::handleRowTag); + m_handlerMap.insert(QLatin1String("row"), &QtXmlToSphinx::handleRowTag); + m_handlerMap.insert(QLatin1String("item"), &QtXmlToSphinx::handleItemTag); + m_handlerMap.insert(QLatin1String("argument"), &QtXmlToSphinx::handleArgumentTag); + m_handlerMap.insert(QLatin1String("teletype"), &QtXmlToSphinx::handleArgumentTag); + m_handlerMap.insert(QLatin1String("link"), &QtXmlToSphinx::handleLinkTag); + m_handlerMap.insert(QLatin1String("inlineimage"), &QtXmlToSphinx::handleInlineImageTag); + m_handlerMap.insert(QLatin1String("image"), &QtXmlToSphinx::handleImageTag); + m_handlerMap.insert(QLatin1String("list"), &QtXmlToSphinx::handleListTag); + m_handlerMap.insert(QLatin1String("term"), &QtXmlToSphinx::handleTermTag); + m_handlerMap.insert(QLatin1String("raw"), &QtXmlToSphinx::handleRawTag); + m_handlerMap.insert(QLatin1String("underline"), &QtXmlToSphinx::handleItalicTag); + m_handlerMap.insert(QLatin1String("superscript"), &QtXmlToSphinx::handleSuperScriptTag); + m_handlerMap.insert(QLatin1String("code"), &QtXmlToSphinx::handleCodeTag); + m_handlerMap.insert(QLatin1String("badcode"), &QtXmlToSphinx::handleCodeTag); + m_handlerMap.insert(QLatin1String("legalese"), &QtXmlToSphinx::handleCodeTag); + m_handlerMap.insert(QLatin1String("section"), &QtXmlToSphinx::handleAnchorTag); + m_handlerMap.insert(QLatin1String("quotefile"), &QtXmlToSphinx::handleQuoteFileTag); + + // ignored tags + m_handlerMap.insert(QLatin1String("generatedlist"), &QtXmlToSphinx::handleIgnoredTag); + m_handlerMap.insert(QLatin1String("tableofcontents"), &QtXmlToSphinx::handleIgnoredTag); + m_handlerMap.insert(QLatin1String("quotefromfile"), &QtXmlToSphinx::handleIgnoredTag); + m_handlerMap.insert(QLatin1String("skipto"), &QtXmlToSphinx::handleIgnoredTag); + m_handlerMap.insert(QLatin1String("target"), &QtXmlToSphinx::handleTargetTag); + m_handlerMap.insert(QLatin1String("page"), &QtXmlToSphinx::handlePageTag); + + // useless tags + m_handlerMap.insert(QLatin1String("description"), &QtXmlToSphinx::handleUselessTag); + m_handlerMap.insert(QLatin1String("definition"), &QtXmlToSphinx::handleUselessTag); + m_handlerMap.insert(QLatin1String("printuntil"), &QtXmlToSphinx::handleUselessTag); + m_handlerMap.insert(QLatin1String("relation"), &QtXmlToSphinx::handleUselessTag); + + // Doxygen tags + m_handlerMap.insert(QLatin1String("title"), &QtXmlToSphinx::handleHeadingTag); + m_handlerMap.insert(QLatin1String("ref"), &QtXmlToSphinx::handleParaTag); + m_handlerMap.insert(QLatin1String("computeroutput"), &QtXmlToSphinx::handleParaTag); + m_handlerMap.insert(QLatin1String("detaileddescription"), &QtXmlToSphinx::handleParaTag); + m_handlerMap.insert(QLatin1String("name"), &QtXmlToSphinx::handleParaTag); + m_handlerMap.insert(QLatin1String("listitem"), &QtXmlToSphinx::handleItemTag); + m_handlerMap.insert(QLatin1String("parametername"), &QtXmlToSphinx::handleItemTag); + m_handlerMap.insert(QLatin1String("parameteritem"), &QtXmlToSphinx::handleItemTag); + m_handlerMap.insert(QLatin1String("ulink"), &QtXmlToSphinx::handleLinkTag); + m_handlerMap.insert(QLatin1String("itemizedlist"), &QtXmlToSphinx::handleListTag); + m_handlerMap.insert(QLatin1String("parameternamelist"), &QtXmlToSphinx::handleListTag); + m_handlerMap.insert(QLatin1String("parameterlist"), &QtXmlToSphinx::handleListTag); + + // Doxygen ignored tags + m_handlerMap.insert(QLatin1String("highlight"), &QtXmlToSphinx::handleIgnoredTag); + m_handlerMap.insert(QLatin1String("linebreak"), &QtXmlToSphinx::handleIgnoredTag); + m_handlerMap.insert(QLatin1String("programlisting"), &QtXmlToSphinx::handleIgnoredTag); + m_handlerMap.insert(QLatin1String("xreftitle"), &QtXmlToSphinx::handleIgnoredTag); + m_handlerMap.insert(QLatin1String("sp"), &QtXmlToSphinx::handleIgnoredTag); + m_handlerMap.insert(QLatin1String("entry"), &QtXmlToSphinx::handleIgnoredTag); + m_handlerMap.insert(QLatin1String("simplesect"), &QtXmlToSphinx::handleIgnoredTag); + m_handlerMap.insert(QLatin1String("verbatim"), &QtXmlToSphinx::handleIgnoredTag); + m_handlerMap.insert(QLatin1String("xrefsect"), &QtXmlToSphinx::handleIgnoredTag); + m_handlerMap.insert(QLatin1String("xrefdescription"), &QtXmlToSphinx::handleIgnoredTag); + + m_result = transform(doc); +} + +void QtXmlToSphinx::pushOutputBuffer() +{ + QString* buffer = new QString(); + m_buffers << buffer; + m_output.setString(buffer); +} + +QString QtXmlToSphinx::popOutputBuffer() +{ + Q_ASSERT(!m_buffers.isEmpty()); + QString* str = m_buffers.pop(); + QString strcpy(*str); + delete str; + m_output.setString(m_buffers.isEmpty() ? 0 : m_buffers.top()); + return strcpy; +} + +QString QtXmlToSphinx::expandFunction(const QString& function) const +{ + const int firstDot = function.indexOf(QLatin1Char('.')); + const AbstractMetaClass *metaClass = nullptr; + if (firstDot != -1) { + const QStringRef className = function.leftRef(firstDot); + const AbstractMetaClassList &classes = m_generator->classes(); + for (const AbstractMetaClass *cls : classes) { + if (cls->name() == className) { + metaClass = cls; + break; + } + } + } + + return metaClass + ? metaClass->typeEntry()->qualifiedTargetLangName() + + function.right(function.size() - firstDot) + : function; +} + +QString QtXmlToSphinx::resolveContextForMethod(const QString& methodName) const +{ + const QStringRef currentClass = m_context.splitRef(QLatin1Char('.')).constLast(); + + const AbstractMetaClass* metaClass = 0; + const AbstractMetaClassList &classes = m_generator->classes(); + for (const AbstractMetaClass *cls : classes) { + if (cls->name() == currentClass) { + metaClass = cls; + break; + } + } + + if (metaClass) { + QList funcList; + const AbstractMetaFunctionList &methods = metaClass->queryFunctionsByName(methodName); + for (const AbstractMetaFunction *func : methods) { + if (methodName == func->name()) + funcList.append(func); + } + + const AbstractMetaClass* implementingClass = 0; + for (const AbstractMetaFunction *func : qAsConst(funcList)) { + implementingClass = func->implementingClass(); + if (implementingClass->name() == currentClass) + break; + } + + if (implementingClass) + return implementingClass->typeEntry()->qualifiedTargetLangName(); + } + + return QLatin1Char('~') + m_context; +} + +QString QtXmlToSphinx::transform(const QString& doc) +{ + Q_ASSERT(m_buffers.isEmpty()); + Indentation indentation(INDENT); + if (doc.trimmed().isEmpty()) + return doc; + + pushOutputBuffer(); + + QXmlStreamReader reader(doc); + + while (!reader.atEnd()) { + QXmlStreamReader::TokenType token = reader.readNext(); + if (reader.hasError()) { + QString message; + QTextStream(&message) << "XML Error " + << reader.errorString() << " at " << reader.lineNumber() + << ':' << reader.columnNumber() << '\n' << doc; + m_output << INDENT << message; + qCWarning(lcShiboken).noquote().nospace() << message; + break; + } + + if (token == QXmlStreamReader::StartElement) { + QStringRef tagName = reader.name(); + TagHandler handler = m_handlerMap.value(tagName.toString(), &QtXmlToSphinx::handleUnknownTag); + if (!m_handlers.isEmpty() && ( (m_handlers.top() == &QtXmlToSphinx::handleIgnoredTag) || + (m_handlers.top() == &QtXmlToSphinx::handleRawTag)) ) + handler = &QtXmlToSphinx::handleIgnoredTag; + + m_handlers.push(handler); + } + if (!m_handlers.isEmpty()) + (this->*(m_handlers.top()))(reader); + + if (token == QXmlStreamReader::EndElement) { + m_handlers.pop(); + m_lastTagName = reader.name().toString(); + } + } + + if (!m_inlineImages.isEmpty()) { + // Write out inline image definitions stored in handleInlineImageTag(). + m_output << endl; + for (const InlineImage &img : qAsConst(m_inlineImages)) + m_output << ".. |" << img.tag << "| image:: " << img.href << endl; + m_output << endl; + m_inlineImages.clear(); + } + + m_output.flush(); + QString retval = popOutputBuffer(); + Q_ASSERT(m_buffers.isEmpty()); + return retval; +} + +static QString resolveFile(const QStringList &locations, const QString &path) +{ + for (QString location : locations) { + location.append(QLatin1Char('/')); + location.append(path); + if (QFileInfo::exists(location)) + return location; + } + return QString(); +} + +QString QtXmlToSphinx::readFromLocations(const QStringList &locations, const QString &path, + const QString &identifier, QString *errorMessage) +{ + QString result; + QString resolvedPath; + if (path.endsWith(QLatin1String(".cpp"))) { + const QString pySnippet = path.left(path.size() - 3) + QLatin1String("py"); + resolvedPath = resolveFile(locations, pySnippet); + } + if (resolvedPath.isEmpty()) + resolvedPath = resolveFile(locations, path); + if (resolvedPath.isEmpty()) { + QTextStream(errorMessage) << "Could not resolve \"" << path << "\" in \"" + << locations.join(QLatin1String("\", \"")); + return QString(); // null + } + qCDebug(lcShiboken).noquote().nospace() << "snippet file " << path + << " [" << identifier << ']' << " resolved to " << resolvedPath; + return readFromLocation(resolvedPath, identifier, errorMessage); +} + +QString QtXmlToSphinx::readFromLocation(const QString &location, const QString &identifier, + QString *errorMessage) +{ + QFile inputFile; + inputFile.setFileName(location); + if (!inputFile.open(QIODevice::ReadOnly)) { + QTextStream(errorMessage) << "Could not read code snippet file: " + << QDir::toNativeSeparators(inputFile.fileName()) + << ": " << inputFile.errorString(); + return QString(); // null + } + + QString code = QLatin1String(""); // non-null + if (identifier.isEmpty()) { + while (!inputFile.atEnd()) + code += QString::fromUtf8(inputFile.readLine()); + return code; + } + + const QRegularExpression searchString(QLatin1String("//!\\s*\\[") + + identifier + QLatin1String("\\]")); + Q_ASSERT(searchString.isValid()); + static const QRegularExpression codeSnippetCode(QLatin1String("//!\\s*\\[[\\w\\d\\s]+\\]")); + Q_ASSERT(codeSnippetCode.isValid()); + + bool getCode = false; + + while (!inputFile.atEnd()) { + QString line = QString::fromUtf8(inputFile.readLine()); + if (getCode && !line.contains(searchString)) { + line.remove(codeSnippetCode); + code += line; + } else if (line.contains(searchString)) { + if (getCode) + break; + getCode = true; + } + } + + if (!getCode) { + QTextStream(errorMessage) << "Code snippet file found (" + << QDir::toNativeSeparators(location) << "), but snippet [" + << identifier << "] not found."; + return QString(); // null + } + + return code; +} + +void QtXmlToSphinx::handleHeadingTag(QXmlStreamReader& reader) +{ + static int headingSize = 0; + static char type; + static char types[] = { '-', '^' }; + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) { + uint typeIdx = reader.attributes().value(QLatin1String("level")).toUInt(); + if (typeIdx >= sizeof(types)) + type = types[sizeof(types)-1]; + else + type = types[typeIdx]; + } else if (token == QXmlStreamReader::EndElement) { + m_output << Pad(type, headingSize) << endl << endl; + } else if (token == QXmlStreamReader::Characters) { + m_output << endl << endl; + headingSize = writeEscapedRstText(m_output, reader.text().trimmed()); + m_output << endl; + } +} + +void QtXmlToSphinx::handleParaTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) { + pushOutputBuffer(); + } else if (token == QXmlStreamReader::EndElement) { + QString result = popOutputBuffer().simplified(); + if (result.startsWith(QLatin1String("**Warning:**"))) + result.replace(0, 12, QLatin1String(".. warning:: ")); + else if (result.startsWith(QLatin1String("**Note:**"))) + result.replace(0, 9, QLatin1String(".. note:: ")); + + m_output << INDENT << result << endl << endl; + } else if (token == QXmlStreamReader::Characters) { + const QStringRef text = reader.text(); + const QChar end = lastChar(m_output); + if (!text.isEmpty() && INDENT.indent == 0 && !end.isNull()) { + QChar start = text[0]; + if ((end == QLatin1Char('*') || end == QLatin1Char('`')) && start != QLatin1Char(' ') && !start.isPunct()) + m_output << '\\'; + } + m_output << INDENT << escape(text); + } +} + +void QtXmlToSphinx::handleItalicTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement || token == QXmlStreamReader::EndElement) { + m_insideItalic = !m_insideItalic; + m_output << '*'; + } else if (token == QXmlStreamReader::Characters) { + m_output << escape(reader.text().trimmed()); + } +} + +void QtXmlToSphinx::handleBoldTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement || token == QXmlStreamReader::EndElement) { + m_insideBold = !m_insideBold; + m_output << "**"; + } else if (token == QXmlStreamReader::Characters) { + m_output << escape(reader.text().trimmed()); + } +} + +void QtXmlToSphinx::handleArgumentTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement || token == QXmlStreamReader::EndElement) + m_output << "``"; + else if (token == QXmlStreamReader::Characters) + m_output << reader.text().trimmed(); +} + +static inline QString functionLinkType() { return QStringLiteral("function"); } +static inline QString classLinkType() { return QStringLiteral("class"); } + +static inline QString fixLinkType(const QStringRef &type) +{ + // TODO: create a flag PROPERTY-AS-FUNCTION to ask if the properties + // are recognized as such or not in the binding + if (type == QLatin1String("property")) + return functionLinkType(); + if (type == QLatin1String("typedef")) + return classLinkType(); + return type.toString(); +} + +static inline QString linkSourceAttribute(const QString &type) +{ + if (type == functionLinkType() || type == classLinkType()) + return QLatin1String("raw"); + return type == QLatin1String("enum") || type == QLatin1String("page") + ? type : QLatin1String("href"); +} + +// "See also" links may appear as nested links: +// QAbstractXmlReceiverisValid() +// which is handled in handleLinkTag +// or direct text: +// rootIsDecorated() +// which is handled here. + +void QtXmlToSphinx::handleSeeAlsoTag(QXmlStreamReader& reader) +{ + switch (reader.tokenType()) { + case QXmlStreamReader::StartElement: + m_output << INDENT << ".. seealso:: "; + break; + case QXmlStreamReader::Characters: { + // Direct embedded link: rootIsDecorated() + const QStringRef textR = reader.text().trimmed(); + if (!textR.isEmpty()) { + const QString text = textR.toString(); + if (m_seeAlsoContext.isNull()) { + const QString type = text.endsWith(QLatin1String("()")) + ? functionLinkType() : classLinkType(); + m_seeAlsoContext.reset(handleLinkStart(type, text)); + } + handleLinkText(m_seeAlsoContext.data(), text); + } + } + break; + case QXmlStreamReader::EndElement: + if (!m_seeAlsoContext.isNull()) { // direct, no nested seen + handleLinkEnd(m_seeAlsoContext.data()); + m_seeAlsoContext.reset(); + } + m_output << endl << endl; + break; + default: + break; + } +} + +static inline QString fallbackPathAttribute() { return QStringLiteral("path"); } + +static inline bool snippetComparison() +{ + return ReportHandler::debugLevel() >= ReportHandler::FullDebug; +} + +template // const char*/class Indentor +void formatSnippet(QTextStream &str, Indent indent, const QString &snippet) +{ + const QVector lines = snippet.splitRef(QLatin1Char('\n')); + for (const QStringRef &line : lines) { + if (!line.trimmed().isEmpty()) + str << indent << line; + str << endl; + } +} + +static QString msgSnippetComparison(const QString &location, const QString &identifier, + const QString &pythonCode, const QString &fallbackCode) +{ + QString result; + QTextStream str(&result); + str << "Python snippet " << location; + if (!identifier.isEmpty()) + str << " [" << identifier << ']'; + str << ":\n"; + formatSnippet(str, " ", pythonCode); + str << "Corresponding fallback snippet:\n"; + formatSnippet(str, " ", fallbackCode); + str << "-- end --\n"; + return result; +} + +void QtXmlToSphinx::handleSnippetTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) { + const bool consecutiveSnippet = m_lastTagName == QLatin1String("snippet") + || m_lastTagName == QLatin1String("dots") || m_lastTagName == QLatin1String("codeline"); + if (consecutiveSnippet) { + m_output.flush(); + m_output.string()->chop(2); + } + QString location = reader.attributes().value(QLatin1String("location")).toString(); + QString identifier = reader.attributes().value(QLatin1String("identifier")).toString(); + QString errorMessage; + const QString pythonCode = + readFromLocations(m_generator->codeSnippetDirs(), location, identifier, &errorMessage); + if (!errorMessage.isEmpty()) + qCWarning(lcShiboken, "%s", qPrintable(msgTagWarning(reader, m_context, m_lastTagName, errorMessage))); + // Fall back to C++ snippet when "path" attribute is present. + // Also read fallback snippet when comparison is desired. + QString fallbackCode; + if ((pythonCode.isNull() || snippetComparison()) + && reader.attributes().hasAttribute(fallbackPathAttribute())) { + const QString fallback = reader.attributes().value(fallbackPathAttribute()).toString(); + if (QFileInfo::exists(fallback)) { + if (pythonCode.isNull()) + qCWarning(lcShiboken, "%s", qPrintable(msgFallbackWarning(reader, m_context, m_lastTagName, location, identifier, fallback))); + fallbackCode = readFromLocation(fallback, identifier, &errorMessage); + if (!errorMessage.isEmpty()) + qCWarning(lcShiboken, "%s", qPrintable(msgTagWarning(reader, m_context, m_lastTagName, errorMessage))); + } + } + + if (!pythonCode.isEmpty() && !fallbackCode.isEmpty() && snippetComparison()) + qCDebug(lcShiboken, "%s", qPrintable(msgSnippetComparison(location, identifier, pythonCode, fallbackCode))); + + if (!consecutiveSnippet) + m_output << INDENT << "::\n\n"; + + Indentation indentation(INDENT); + const QString code = pythonCode.isNull() ? fallbackCode : pythonCode; + if (code.isEmpty()) + m_output << INDENT << "" << endl; + else + formatSnippet(m_output, INDENT, code); + m_output << endl; + } +} +void QtXmlToSphinx::handleDotsTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) { + const bool consecutiveSnippet = m_lastTagName == QLatin1String("snippet") + || m_lastTagName == QLatin1String("dots") || m_lastTagName == QLatin1String("codeline"); + if (consecutiveSnippet) { + m_output.flush(); + m_output.string()->chop(2); + } else { + m_output << INDENT << "::\n\n"; + } + Indentation indentation(INDENT); + pushOutputBuffer(); + m_output << INDENT; + int indent = reader.attributes().value(QLatin1String("indent")).toInt(); + for (int i = 0; i < indent; ++i) + m_output << ' '; + } else if (token == QXmlStreamReader::Characters) { + m_output << reader.text().toString(); + } else if (token == QXmlStreamReader::EndElement) { + m_output << popOutputBuffer() << "\n\n\n"; + } +} + +void QtXmlToSphinx::handleTableTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) { + m_currentTable.clear(); + m_tableHasHeader = false; + } else if (token == QXmlStreamReader::EndElement) { + // write the table on m_output + m_currentTable.enableHeader(m_tableHasHeader); + m_currentTable.normalize(); + m_output << ensureEndl << m_currentTable; + m_currentTable.clear(); + } +} + +void QtXmlToSphinx::handleTermTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) { + pushOutputBuffer(); + } else if (token == QXmlStreamReader::Characters) { + m_output << reader.text().toString().replace(QLatin1String("::"), QLatin1String(".")); + } else if (token == QXmlStreamReader::EndElement) { + TableCell cell; + cell.data = popOutputBuffer().trimmed(); + m_currentTable << (TableRow() << cell); + } +} + + +void QtXmlToSphinx::handleItemTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) { + if (m_currentTable.isEmpty()) + m_currentTable << TableRow(); + TableRow& row = m_currentTable.last(); + TableCell cell; + cell.colSpan = reader.attributes().value(QLatin1String("colspan")).toShort(); + cell.rowSpan = reader.attributes().value(QLatin1String("rowspan")).toShort(); + row << cell; + pushOutputBuffer(); + } else if (token == QXmlStreamReader::EndElement) { + QString data = popOutputBuffer().trimmed(); + if (!m_currentTable.isEmpty()) { + TableRow& row = m_currentTable.last(); + if (!row.isEmpty()) + row.last().data = data; + } + } +} + +void QtXmlToSphinx::handleRowTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) { + m_tableHasHeader = reader.name() == QLatin1String("header"); + m_currentTable << TableRow(); + } +} + +enum ListType { BulletList, OrderedList, EnumeratedList }; + +static inline ListType webXmlListType(const QStringRef &t) +{ + if (t == QLatin1String("enum")) + return EnumeratedList; + if (t == QLatin1String("ordered")) + return OrderedList; + return BulletList; +} + +void QtXmlToSphinx::handleListTag(QXmlStreamReader& reader) +{ + // BUG We do not support a list inside a table cell + static ListType listType = BulletList; + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) { + listType = webXmlListType(reader.attributes().value(QLatin1String("type"))); + if (listType == EnumeratedList) { + m_currentTable << (TableRow() << "Constant" << "Description"); + m_tableHasHeader = true; + } + INDENT.indent--; + } else if (token == QXmlStreamReader::EndElement) { + INDENT.indent++; + if (!m_currentTable.isEmpty()) { + switch (listType) { + case BulletList: + case OrderedList: { + m_output << endl; + const char *separator = listType == BulletList ? "* " : "#. "; + const char *indent = listType == BulletList ? " " : " "; + for (const TableCell &cell : m_currentTable.constFirst()) { + const QVector itemLines = cell.data.splitRef(QLatin1Char('\n')); + m_output << INDENT << separator << itemLines.constFirst() << endl; + for (int i = 1, max = itemLines.count(); i < max; ++i) + m_output << INDENT << indent << itemLines[i] << endl; + } + m_output << endl; + } + break; + case EnumeratedList: + m_currentTable.enableHeader(m_tableHasHeader); + m_currentTable.normalize(); + m_output << ensureEndl << m_currentTable; + break; + } + } + m_currentTable.clear(); + } +} + +void QtXmlToSphinx::handleLinkTag(QXmlStreamReader& reader) +{ + switch (reader.tokenType()) { + case QXmlStreamReader::StartElement: { + // embedded in means the characters of are no link. + m_seeAlsoContext.reset(); + const QString type = fixLinkType(reader.attributes().value(QLatin1String("type"))); + const QString ref = reader.attributes().value(linkSourceAttribute(type)).toString(); + m_linkContext.reset(handleLinkStart(type, ref)); + } + break; + case QXmlStreamReader::Characters: + Q_ASSERT(!m_linkContext.isNull()); + handleLinkText(m_linkContext.data(), reader.text().toString()); + break; + case QXmlStreamReader::EndElement: + Q_ASSERT(!m_linkContext.isNull()); + handleLinkEnd(m_linkContext.data()); + m_linkContext.reset(); + break; + default: + break; + } +} + +QtXmlToSphinx::LinkContext *QtXmlToSphinx::handleLinkStart(const QString &type, QString ref) const +{ + ref.replace(QLatin1String("::"), QLatin1String(".")); + ref.remove(QLatin1String("()")); + LinkContext *result = new LinkContext(ref); + + if (m_insideBold) + result->flags |= LinkContext::InsideBold; + else if (m_insideItalic) + result->flags |= LinkContext::InsideItalic; + + if (type == functionLinkType() && !m_context.isEmpty()) { + result->type = LinkContext::Method; + const QVector rawlinklist = result->linkRef.splitRef(QLatin1Char('.')); + if (rawlinklist.size() == 1 || rawlinklist.constFirst() == m_context) { + QString context = resolveContextForMethod(rawlinklist.constLast().toString()); + if (!result->linkRef.startsWith(context)) + result->linkRef.prepend(context + QLatin1Char('.')); + } else { + result->linkRef = expandFunction(result->linkRef); + } + } else if (type == functionLinkType() && m_context.isEmpty()) { + result->type = LinkContext::Function; + } else if (type == classLinkType()) { + result->type = LinkContext::Class; + if (const TypeEntry *type = TypeDatabase::instance()->findType(result->linkRef)) { + result->linkRef = type->qualifiedTargetLangName(); + } else { // fall back to the old heuristic if the type wasn't found. + const QVector rawlinklist = result->linkRef.splitRef(QLatin1Char('.')); + QStringList splittedContext = m_context.split(QLatin1Char('.')); + if (rawlinklist.size() == 1 || rawlinklist.constFirst() == splittedContext.constLast()) { + splittedContext.removeLast(); + result->linkRef.prepend(QLatin1Char('~') + splittedContext.join(QLatin1Char('.')) + + QLatin1Char('.')); + } + } + } else if (type == QLatin1String("enum")) { + result->type = LinkContext::Attribute; + } else if (type == QLatin1String("page")) { + // Module, external web page or reference + if (result->linkRef == m_generator->moduleName()) + result->type = LinkContext::Module; + else if (result->linkRef.startsWith(QLatin1String("http"))) + result->type = LinkContext::External; + else + result->type = LinkContext::Reference; + } else { + result->type = LinkContext::Reference; + } + return result; +} + +// Model/View Classes +// QML types +// Qt Quick +// QObject +// Qt::Window +// QNetworkSession::reject() + +static QString fixLinkText(const QtXmlToSphinx::LinkContext *linkContext, + QString linktext) +{ + if (linkContext->type == QtXmlToSphinx::LinkContext::External + || linkContext->type == QtXmlToSphinx::LinkContext::Reference) { + return linktext; + } + // For the language reference documentation, clear the link text if it matches + // the function/class/enumeration name. + linktext.replace(QLatin1String("::"), QLatin1String(".")); + if (linkContext->linkRef == linktext) + return QString(); + if ((linkContext->type & QtXmlToSphinx::LinkContext::FunctionMask) != 0 + && (linkContext->linkRef + QLatin1String("()")) == linktext) { + return QString(); + } + const QStringRef item = linkContext->linkRef.splitRef(QLatin1Char('.')).constLast(); + if (item == linktext) + return QString(); + if ((linkContext->type & QtXmlToSphinx::LinkContext::FunctionMask) != 0 + && (item + QLatin1String("()")) == linktext) { + return QString(); + } + return linktext; +} + +void QtXmlToSphinx::handleLinkText(LinkContext *linkContext, const QString &linktext) const +{ + linkContext->linkText = fixLinkText(linkContext, linktext); +} + +void QtXmlToSphinx::handleLinkEnd(LinkContext *linkContext) +{ + m_output << *linkContext; +} + +// Copy images that are placed in a subdirectory "images" under the webxml files +// by qdoc to a matching subdirectory under the "rst/PySide2/" directory +static bool copyImage(const QString &href, const QString &docDataDir, + const QString &context, const QString &outputDir, + QString *errorMessage) +{ + const QChar slash = QLatin1Char('/'); + const int lastSlash = href.lastIndexOf(slash); + const QString imagePath = lastSlash != -1 ? href.left(lastSlash) : QString(); + const QString imageFileName = lastSlash != -1 ? href.right(href.size() - lastSlash - 1) : href; + QFileInfo imageSource(docDataDir + slash + href); + if (!imageSource.exists()) { + QTextStream(errorMessage) << "Image " << href << " does not exist in " + << QDir::toNativeSeparators(docDataDir); + return false; + } + // Determine directory from context, "Pyside2.QtGui.QPainter" ->"Pyside2/QtGui". + // FIXME: Not perfect yet, should have knowledge about namespaces (DataVis3D) or + // nested classes "Pyside2.QtGui.QTouchEvent.QTouchPoint". + QString relativeTargetDir = context; + const int lastDot = relativeTargetDir.lastIndexOf(QLatin1Char('.')); + if (lastDot != -1) + relativeTargetDir.truncate(lastDot); + relativeTargetDir.replace(QLatin1Char('.'), slash); + if (!imagePath.isEmpty()) + relativeTargetDir += slash + imagePath; + + const QString targetDir = outputDir + slash + relativeTargetDir; + const QString targetFileName = targetDir + slash + imageFileName; + if (QFileInfo::exists(targetFileName)) + return true; + if (!QFileInfo::exists(targetDir)) { + const QDir outDir(outputDir); + if (!outDir.mkpath(relativeTargetDir)) { + QTextStream(errorMessage) << "Cannot create " << QDir::toNativeSeparators(relativeTargetDir) + << " under " << QDir::toNativeSeparators(outputDir); + return false; + } + } + + QFile source(imageSource.absoluteFilePath()); + if (!source.copy(targetFileName)) { + QTextStream(errorMessage) << "Cannot copy " << QDir::toNativeSeparators(source.fileName()) + << " to " << QDir::toNativeSeparators(targetFileName) << ": " + << source.errorString(); + return false; + } + qCDebug(lcShiboken()).noquote().nospace() << __FUNCTION__ << " href=\"" + << href << "\", context=\"" << context << "\", docDataDir=\"" + << docDataDir << "\", outputDir=\"" << outputDir << "\", copied \"" + << source.fileName() << "\"->\"" << targetFileName << '"'; + return true; +} + +bool QtXmlToSphinx::copyImage(const QString &href) const +{ + QString errorMessage; + const bool result = + ::copyImage(href, m_generator->docDataDir(), m_context, + m_generator->outputDirectory(), &errorMessage); + if (!result) + qCWarning(lcShiboken, "%s", qPrintable(errorMessage)); + return result; +} + +void QtXmlToSphinx::handleImageTag(QXmlStreamReader& reader) +{ + if (reader.tokenType() != QXmlStreamReader::StartElement) + return; + const QString href = reader.attributes().value(QLatin1String("href")).toString(); + if (copyImage(href)) + m_output << INDENT << ".. image:: " << href << endl << endl; +} + +void QtXmlToSphinx::handleInlineImageTag(QXmlStreamReader& reader) +{ + if (reader.tokenType() != QXmlStreamReader::StartElement) + return; + const QString href = reader.attributes().value(QLatin1String("href")).toString(); + if (!copyImage(href)) + return; + // Handle inline images by substitution references. Insert a unique tag + // enclosed by '|' and define it further down. Determine tag from the base + //file name with number. + QString tag = href; + int pos = tag.lastIndexOf(QLatin1Char('/')); + if (pos != -1) + tag.remove(0, pos + 1); + pos = tag.indexOf(QLatin1Char('.')); + if (pos != -1) + tag.truncate(pos); + tag += QString::number(m_inlineImages.size() + 1); + m_inlineImages.append(InlineImage{tag, href}); + m_output << '|' << tag << '|' << ' '; +} + +void QtXmlToSphinx::handleRawTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) { + QString format = reader.attributes().value(QLatin1String("format")).toString(); + m_output << INDENT << ".. raw:: " << format.toLower() << endl << endl; + } else if (token == QXmlStreamReader::Characters) { + const QVector lst(reader.text().split(QLatin1Char('\n'))); + for (const QStringRef &row : lst) + m_output << INDENT << INDENT << row << endl; + } else if (token == QXmlStreamReader::EndElement) { + m_output << endl << endl; + } +} + +void QtXmlToSphinx::handleCodeTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) { + m_output << INDENT << "::" << endl << endl; + INDENT.indent++; + } else if (token == QXmlStreamReader::Characters) { + const QVector lst(reader.text().split(QLatin1Char('\n'))); + for (const QStringRef &row : lst) + m_output << INDENT << INDENT << row << endl; + } else if (token == QXmlStreamReader::EndElement) { + m_output << endl << endl; + INDENT.indent--; + } +} + +void QtXmlToSphinx::handleUnknownTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) + qCDebug(lcShiboken).noquote().nospace() << "Unknown QtDoc tag: \"" << reader.name().toString() << "\"."; +} + +void QtXmlToSphinx::handleSuperScriptTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) { + m_output << " :sup:`"; + pushOutputBuffer(); + } else if (token == QXmlStreamReader::Characters) { + m_output << reader.text().toString(); + } else if (token == QXmlStreamReader::EndElement) { + m_output << popOutputBuffer(); + m_output << '`'; + } +} + +void QtXmlToSphinx::handlePageTag(QXmlStreamReader &reader) +{ + if (reader.tokenType() != QXmlStreamReader::StartElement) + return; + + const QStringRef title = reader.attributes().value(titleAttribute()); + if (!title.isEmpty()) + m_output << rstLabel(title.toString()); + + const QStringRef fullTitle = reader.attributes().value(fullTitleAttribute()); + if (!fullTitle.isEmpty()) { + const int size = writeEscapedRstText(m_output, fullTitle); + m_output << endl << Pad('*', size) << endl << endl; + } + + const QStringRef brief = reader.attributes().value(briefAttribute()); + if (!brief.isEmpty()) + m_output << escape(brief) << endl << endl; +} + +void QtXmlToSphinx::handleTargetTag(QXmlStreamReader &reader) +{ + if (reader.tokenType() != QXmlStreamReader::StartElement) + return; + const QStringRef name = reader.attributes().value(nameAttribute()); + if (!name.isEmpty()) + m_output << INDENT << rstLabel(name.toString()); +} + +void QtXmlToSphinx::handleIgnoredTag(QXmlStreamReader&) +{ +} + +void QtXmlToSphinx::handleUselessTag(QXmlStreamReader&) +{ + // Tag "description" just marks the init of "Detailed description" title. + // Tag "definition" just marks enums. We have a different way to process them. +} + +void QtXmlToSphinx::handleAnchorTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::StartElement) { + QString anchor; + if (reader.attributes().hasAttribute(QLatin1String("id"))) + anchor = reader.attributes().value(QLatin1String("id")).toString(); + else if (reader.attributes().hasAttribute(QLatin1String("name"))) + anchor = reader.attributes().value(QLatin1String("name")).toString(); + if (!anchor.isEmpty() && m_opened_anchor != anchor) { + m_opened_anchor = anchor; + if (!m_context.isEmpty()) + anchor.prepend(m_context + QLatin1Char('_')); + m_output << INDENT << rstLabel(anchor); + } + } else if (token == QXmlStreamReader::EndElement) { + m_opened_anchor.clear(); + } +} + +void QtXmlToSphinx::handleQuoteFileTag(QXmlStreamReader& reader) +{ + QXmlStreamReader::TokenType token = reader.tokenType(); + if (token == QXmlStreamReader::Characters) { + QString location = reader.text().toString(); + location.prepend(m_generator->libSourceDir() + QLatin1Char('/')); + QString errorMessage; + QString code = readFromLocation(location, QString(), &errorMessage); + if (!errorMessage.isEmpty()) + qCWarning(lcShiboken(), "%s", qPrintable(msgTagWarning(reader, m_context, m_lastTagName, errorMessage))); + m_output << INDENT << "::\n\n"; + Indentation indentation(INDENT); + if (code.isEmpty()) + m_output << INDENT << "" << endl; + else + formatCode(m_output, code, INDENT); + m_output << endl; + } +} + +bool QtXmlToSphinx::convertToRst(QtDocGenerator *generator, + const QString &sourceFileName, + const QString &targetFileName, + const QString &context, QString *errorMessage) +{ + QFile sourceFile(sourceFileName); + if (!sourceFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + if (errorMessage) + *errorMessage = FileOut::msgCannotOpenForReading(sourceFile); + return false; + } + const QString doc = QString::fromUtf8(sourceFile.readAll()); + sourceFile.close(); + + FileOut targetFile(targetFileName); + QtXmlToSphinx x(generator, doc, context); + targetFile.stream << x; + return targetFile.done(errorMessage) != FileOut::Failure; +} + +void QtXmlToSphinx::Table::normalize() +{ + if (m_normalized || isEmpty()) + return; + + int row; + int col; + QtXmlToSphinx::Table& self = *this; + + //QDoc3 generates tables with wrong number of columns. We have to + //check and if necessary, merge the last columns. + int maxCols = self.at(0).count(); + // add col spans + for (row = 0; row < count(); ++row) { + for (col = 0; col < at(row).count(); ++col) { + QtXmlToSphinx::TableCell& cell = self[row][col]; + bool mergeCols = (col >= maxCols); + if (cell.colSpan > 0) { + QtXmlToSphinx::TableCell newCell; + newCell.colSpan = -1; + for (int i = 0, max = cell.colSpan-1; i < max; ++i) { + self[row].insert(col+1, newCell); + } + cell.colSpan = 0; + col++; + } else if (mergeCols) { + self[row][maxCols - 1].data += QLatin1Char(' ') + cell.data; + } + } + } + + // row spans + const int numCols = first().count(); + for (col = 0; col < numCols; ++col) { + for (row = 0; row < count(); ++row) { + if (col < self[row].count()) { + QtXmlToSphinx::TableCell& cell = self[row][col]; + if (cell.rowSpan > 0) { + QtXmlToSphinx::TableCell newCell; + newCell.rowSpan = -1; + int targetRow = row + 1; + const int targetEndRow = + std::min(targetRow + cell.rowSpan - 1, count()); + cell.rowSpan = 0; + for ( ; targetRow < targetEndRow; ++targetRow) + self[targetRow].insert(col, newCell); + row++; + } + } + } + } + m_normalized = true; +} + +QTextStream& operator<<(QTextStream& s, const QtXmlToSphinx::Table &table) +{ + if (table.isEmpty()) + return s; + + if (!table.isNormalized()) { + qCDebug(lcShiboken) << "Attempt to print an unnormalized table!"; + return s; + } + + // calc width and height of each column and row + const int headerColumnCount = table.constFirst().count(); + QVector colWidths(headerColumnCount); + QVector rowHeights(table.count()); + for (int i = 0, maxI = table.count(); i < maxI; ++i) { + const QtXmlToSphinx::TableRow& row = table[i]; + for (int j = 0, maxJ = std::min(row.count(), colWidths.size()); j < maxJ; ++j) { + const QVector rowLines = row[j].data.splitRef(QLatin1Char('\n')); // cache this would be a good idea + for (const QStringRef &str : rowLines) + colWidths[j] = std::max(colWidths[j], str.count()); + rowHeights[i] = std::max(rowHeights[i], row[j].data.count(QLatin1Char('\n')) + 1); + } + } + + if (!*std::max_element(colWidths.begin(), colWidths.end())) + return s; // empty table (table with empty cells) + + // create a horizontal line to be used later. + QString horizontalLine = QLatin1String("+"); + for (int i = 0, max = colWidths.count(); i < max; ++i) { + horizontalLine += QString(colWidths.at(i), QLatin1Char('-')); + horizontalLine += QLatin1Char('+'); + } + + // write table rows + for (int i = 0, maxI = table.count(); i < maxI; ++i) { // for each row + const QtXmlToSphinx::TableRow& row = table[i]; + + // print line + s << INDENT << '+'; + for (int col = 0; col < headerColumnCount; ++col) { + char c; + if (col >= row.length() || row[col].rowSpan == -1) + c = ' '; + else if (i == 1 && table.hasHeader()) + c = '='; + else + c = '-'; + s << Pad(c, colWidths.at(col)) << '+'; + } + s << endl; + + + // Print the table cells + for (int rowLine = 0; rowLine < rowHeights[i]; ++rowLine) { // for each line in a row + int j = 0; + for (int maxJ = std::min(row.count(), headerColumnCount); j < maxJ; ++j) { // for each column + const QtXmlToSphinx::TableCell& cell = row[j]; + const QVector rowLines = cell.data.splitRef(QLatin1Char('\n')); // FIXME: Cache this!!! + if (!j) // First column, so we need print the identation + s << INDENT; + + if (!j || !cell.colSpan) + s << '|'; + else + s << ' '; + if (rowLine < rowLines.count()) + s << qSetFieldWidth(colWidths[j]) << left << rowLines.at(rowLine) << qSetFieldWidth(0); + else + s << Pad(' ', colWidths.at(j)); + } + for ( ; j < headerColumnCount; ++j) // pad + s << '|' << Pad(' ', colWidths.at(j)); + s << '|' << endl; + } + } + s << INDENT << horizontalLine << endl; + s << endl; + return s; +} + +static QString getFuncName(const AbstractMetaFunction* cppFunc) { + static bool hashInitialized = false; + static QHash operatorsHash; + if (!hashInitialized) { + operatorsHash.insert(QLatin1String("operator+"), QLatin1String("__add__")); + operatorsHash.insert(QLatin1String("operator+="), QLatin1String("__iadd__")); + operatorsHash.insert(QLatin1String("operator-"), QLatin1String("__sub__")); + operatorsHash.insert(QLatin1String("operator-="), QLatin1String("__isub__")); + operatorsHash.insert(QLatin1String("operator*"), QLatin1String("__mul__")); + operatorsHash.insert(QLatin1String("operator*="), QLatin1String("__imul__")); + operatorsHash.insert(QLatin1String("operator/"), QLatin1String("__div__")); + operatorsHash.insert(QLatin1String("operator/="), QLatin1String("__idiv__")); + operatorsHash.insert(QLatin1String("operator%"), QLatin1String("__mod__")); + operatorsHash.insert(QLatin1String("operator%="), QLatin1String("__imod__")); + operatorsHash.insert(QLatin1String("operator<<"), QLatin1String("__lshift__")); + operatorsHash.insert(QLatin1String("operator<<="), QLatin1String("__ilshift__")); + operatorsHash.insert(QLatin1String("operator>>"), QLatin1String("__rshift__")); + operatorsHash.insert(QLatin1String("operator>>="), QLatin1String("__irshift__")); + operatorsHash.insert(QLatin1String("operator&"), QLatin1String("__and__")); + operatorsHash.insert(QLatin1String("operator&="), QLatin1String("__iand__")); + operatorsHash.insert(QLatin1String("operator|"), QLatin1String("__or__")); + operatorsHash.insert(QLatin1String("operator|="), QLatin1String("__ior__")); + operatorsHash.insert(QLatin1String("operator^"), QLatin1String("__xor__")); + operatorsHash.insert(QLatin1String("operator^="), QLatin1String("__ixor__")); + operatorsHash.insert(QLatin1String("operator=="), QLatin1String("__eq__")); + operatorsHash.insert(QLatin1String("operator!="), QLatin1String("__ne__")); + operatorsHash.insert(QLatin1String("operator<"), QLatin1String("__lt__")); + operatorsHash.insert(QLatin1String("operator<="), QLatin1String("__le__")); + operatorsHash.insert(QLatin1String("operator>"), QLatin1String("__gt__")); + operatorsHash.insert(QLatin1String("operator>="), QLatin1String("__ge__")); + hashInitialized = true; + } + + QHash::const_iterator it = operatorsHash.constFind(cppFunc->name()); + QString result = it != operatorsHash.cend() ? it.value() : cppFunc->name(); + result.replace(QLatin1String("::"), QLatin1String(".")); + return result; +} + +QtDocGenerator::QtDocGenerator() : m_docParser(0) +{ +} + +QtDocGenerator::~QtDocGenerator() +{ + delete m_docParser; +} + +QString QtDocGenerator::fileNameSuffix() const +{ + return QLatin1String(".rst"); +} + +bool QtDocGenerator::shouldGenerate(const AbstractMetaClass *cls) const +{ + return Generator::shouldGenerate(cls) + && cls->typeEntry()->type() != TypeEntry::SmartPointerType; +} + +QString QtDocGenerator::fileNameForContext(GeneratorContext &context) const +{ + const AbstractMetaClass *metaClass = context.metaClass(); + if (!context.forSmartPointer()) { + return getClassTargetFullName(metaClass, false) + fileNameSuffix(); + } else { + const AbstractMetaType *smartPointerType = context.preciseType(); + QString fileNameBase = getFileNameBaseForSmartPointer(smartPointerType, metaClass); + return fileNameBase + fileNameSuffix(); + } +} + +void QtDocGenerator::writeFormattedText(QTextStream &s, const Documentation &doc, + const AbstractMetaClass *metaClass) +{ + QString metaClassName; + + if (metaClass) + metaClassName = getClassTargetFullName(metaClass); + + if (doc.format() == Documentation::Native) { + QtXmlToSphinx x(this, doc.value(), metaClassName); + s << x; + } else { + const QString &value = doc.value(); + const QVector lines = value.splitRef(QLatin1Char('\n')); + int typesystemIndentation = std::numeric_limits().max(); + // check how many spaces must be removed from the beginning of each line + for (const QStringRef &line : lines) { + const auto it = std::find_if(line.cbegin(), line.cend(), + [] (QChar c) { return !c.isSpace(); }); + if (it != line.cend()) + typesystemIndentation = qMin(typesystemIndentation, int(it - line.cbegin())); + } + if (typesystemIndentation == std::numeric_limits().max()) + typesystemIndentation = 0; + for (const QStringRef &line : lines) { + s << INDENT + << (typesystemIndentation > 0 && typesystemIndentation < line.size() + ? line.right(line.size() - typesystemIndentation) : line) + << endl; + } + } + + s << endl; +} + +static void writeInheritedByList(QTextStream& s, const AbstractMetaClass* metaClass, const AbstractMetaClassList& allClasses) +{ + AbstractMetaClassList res; + for (AbstractMetaClass *c : allClasses) { + if (c != metaClass && c->inheritsFrom(metaClass)) + res << c; + } + + if (res.isEmpty()) + return; + + s << "**Inherited by:** "; + QStringList classes; + for (AbstractMetaClass *c : qAsConst(res)) + classes << QLatin1String(":ref:`") + getClassTargetFullName(c, false) + QLatin1Char('`'); + s << classes.join(QLatin1String(", ")) << endl << endl; +} + +void QtDocGenerator::generateClass(QTextStream &s, GeneratorContext &classContext) +{ + AbstractMetaClass *metaClass = classContext.metaClass(); + qCDebug(lcShiboken).noquote().nospace() << "Generating Documentation for " << metaClass->fullName(); + + m_packages[metaClass->package()] << fileNameForContext(classContext); + + m_docParser->setPackageName(metaClass->package()); + m_docParser->fillDocumentation(const_cast(metaClass)); + + s << ".. module:: " << metaClass->package() << endl; + QString className = getClassTargetFullName(metaClass, false); + s << ".. _" << className << ":" << endl << endl; + + s << className << endl; + s << Pad('*', className.count()) << endl << endl; + + s << ".. inheritance-diagram:: " << getClassTargetFullName(metaClass, true) << endl + << " :parts: 2" << endl << endl; // TODO: This would be a parameter in the future... + + + writeInheritedByList(s, metaClass, classes()); + + formatSince(s, "class", metaClass->typeEntry()); + + writeFunctionList(s, metaClass); + + //Function list + AbstractMetaFunctionList functionList = metaClass->functions(); + qSort(functionList.begin(), functionList.end(), functionSort); + + s << endl + << "Detailed Description\n" + "--------------------\n\n"; + + writeInjectDocumentation(s, TypeSystem::DocModificationPrepend, metaClass, 0); + if (!writeInjectDocumentation(s, TypeSystem::DocModificationReplace, metaClass, 0)) + writeFormattedText(s, metaClass->documentation(), metaClass); + + if (!metaClass->isNamespace()) + writeConstructors(s, metaClass); + writeEnums(s, metaClass); + if (!metaClass->isNamespace()) + writeFields(s, metaClass); + + + for (AbstractMetaFunction *func : qAsConst(functionList)) { + if (shouldSkip(func)) + continue; + + if (func->isStatic()) + s << ".. staticmethod:: "; + else + s << ".. method:: "; + + writeFunction(s, true, metaClass, func); + } + + writeInjectDocumentation(s, TypeSystem::DocModificationAppend, metaClass, 0); +} + +void QtDocGenerator::writeFunctionList(QTextStream& s, const AbstractMetaClass* cppClass) +{ + QStringList functionList; + QStringList virtualList; + QStringList signalList; + QStringList slotList; + QStringList staticFunctionList; + + const AbstractMetaFunctionList &classFunctions = cppClass->functions(); + for (AbstractMetaFunction *func : classFunctions) { + if (shouldSkip(func)) + continue; + + QString className; + if (!func->isConstructor()) + className = getClassTargetFullName(cppClass) + QLatin1Char('.'); + else if (func->implementingClass() && func->implementingClass()->enclosingClass()) + className = getClassTargetFullName(func->implementingClass()->enclosingClass()) + QLatin1Char('.'); + QString funcName = getFuncName(func); + + QString str = QLatin1String("def :meth:`"); + + str += funcName; + str += QLatin1Char('<'); + if (!funcName.startsWith(className)) + str += className; + str += funcName; + str += QLatin1String(">` ("); + str += parseArgDocStyle(cppClass, func); + str += QLatin1Char(')'); + + if (func->isStatic()) + staticFunctionList << str; + else if (func->isVirtual()) + virtualList << str; + else if (func->isSignal()) + signalList << str; + else if (func->isSlot()) + slotList << str; + else + functionList << str; + } + + if ((functionList.size() > 0) || (staticFunctionList.size() > 0)) { + QtXmlToSphinx::Table functionTable; + + s << endl + << "Synopsis" << endl + << "--------" << endl << endl; + + writeFunctionBlock(s, QLatin1String("Functions"), functionList); + writeFunctionBlock(s, QLatin1String("Virtual functions"), virtualList); + writeFunctionBlock(s, QLatin1String("Slots"), slotList); + writeFunctionBlock(s, QLatin1String("Signals"), signalList); + writeFunctionBlock(s, QLatin1String("Static functions"), staticFunctionList); + } +} + +void QtDocGenerator::writeFunctionBlock(QTextStream& s, const QString& title, QStringList& functions) +{ + if (functions.size() > 0) { + s << title << endl + << QString(title.size(), QLatin1Char('^')) << endl; + + qSort(functions); + + s << ".. container:: function_list" << endl << endl; + Indentation indentation(INDENT); + for (const QString &func : qAsConst(functions)) + s << INDENT << '*' << ' ' << func << endl; + + s << endl << endl; + } +} + +void QtDocGenerator::writeEnums(QTextStream& s, const AbstractMetaClass* cppClass) +{ + static const QString section_title = QLatin1String(".. attribute:: "); + + const AbstractMetaEnumList &enums = cppClass->enums(); + for (AbstractMetaEnum *en : enums) { + s << section_title << getClassTargetFullName(cppClass) << '.' << en->name() << endl << endl; + writeFormattedText(s, en->documentation(), cppClass); + formatSince(s, "enum", en->typeEntry()); + } + +} + +void QtDocGenerator::writeFields(QTextStream& s, const AbstractMetaClass* cppClass) +{ + static const QString section_title = QLatin1String(".. attribute:: "); + + const AbstractMetaFieldList &fields = cppClass->fields(); + for (AbstractMetaField *field : fields) { + s << section_title << getClassTargetFullName(cppClass) << "." << field->name() << endl << endl; + //TODO: request for member ‘documentation’ is ambiguous + writeFormattedText(s, field->AbstractMetaAttributes::documentation(), cppClass); + } +} + +void QtDocGenerator::writeConstructors(QTextStream& s, const AbstractMetaClass* cppClass) +{ + static const QString sectionTitle = QLatin1String(".. class:: "); + static const QString sectionTitleSpace = QString(sectionTitle.size(), QLatin1Char(' ')); + + AbstractMetaFunctionList lst = cppClass->queryFunctions(AbstractMetaClass::Constructors | AbstractMetaClass::Visible); + for (int i = lst.size() - 1; i >= 0; --i) { + if (lst.at(i)->isModifiedRemoved() || lst.at(i)->functionType() == AbstractMetaFunction::MoveConstructorFunction) + lst.removeAt(i); + } + + bool first = true; + QHash arg_map; + + for (AbstractMetaFunction *func : qAsConst(lst)) { + if (first) { + first = false; + s << sectionTitle; + } else { + s << sectionTitleSpace; + } + writeFunction(s, false, cppClass, func); + const AbstractMetaArgumentList &arguments = func->arguments(); + for (AbstractMetaArgument *arg : arguments) { + if (!arg_map.contains(arg->name())) { + arg_map.insert(arg->name(), arg); + } + } + } + + s << endl; + + for (QHash::const_iterator it = arg_map.cbegin(), end = arg_map.cend(); it != end; ++it) { + Indentation indentation(INDENT); + writeParameterType(s, cppClass, it.value()); + } + + s << endl; + + for (AbstractMetaFunction *func : qAsConst(lst)) + writeFormattedText(s, func->documentation(), cppClass); +} + +QString QtDocGenerator::parseArgDocStyle(const AbstractMetaClass* cppClass, const AbstractMetaFunction* func) +{ + QString ret; + int optArgs = 0; + + const AbstractMetaArgumentList &arguments = func->arguments(); + for (AbstractMetaArgument *arg : arguments) { + + if (func->argumentRemoved(arg->argumentIndex() + 1)) + continue; + + bool thisIsoptional = !arg->defaultValueExpression().isEmpty(); + if (optArgs || thisIsoptional) { + ret += QLatin1Char('['); + optArgs++; + } + + if (arg->argumentIndex() > 0) + ret += QLatin1String(", "); + + ret += arg->name(); + + if (thisIsoptional) { + QString defValue = arg->defaultValueExpression(); + if (defValue == QLatin1String("QString()")) { + defValue = QLatin1String("\"\""); + } else if (defValue == QLatin1String("QStringList()") + || defValue.startsWith(QLatin1String("QVector")) + || defValue.startsWith(QLatin1String("QList"))) { + defValue = QLatin1String("list()"); + } else if (defValue == QLatin1String("QVariant()")) { + defValue = QLatin1String("None"); + } else { + defValue.replace(QLatin1String("::"), QLatin1String(".")); + if (defValue == QLatin1String("0") && (arg->type()->isQObject() || arg->type()->isObject())) + defValue = QLatin1String("None"); + } + ret += QLatin1Char('=') + defValue; + } + } + + ret += QString(optArgs, QLatin1Char(']')); + return ret; +} + +void QtDocGenerator::writeDocSnips(QTextStream &s, + const CodeSnipList &codeSnips, + TypeSystem::CodeSnipPosition position, + TypeSystem::Language language) +{ + Indentation indentation(INDENT); + QStringList invalidStrings; + const static QString startMarkup = QLatin1String("[sphinx-begin]"); + const static QString endMarkup = QLatin1String("[sphinx-end]"); + + invalidStrings << QLatin1String("*") << QLatin1String("//") << QLatin1String("/*") << QLatin1String("*/"); + + for (const CodeSnip &snip : codeSnips) { + if ((snip.position != position) || + !(snip.language & language)) + continue; + + QString code = snip.code(); + while (code.contains(startMarkup) && code.contains(endMarkup)) { + int startBlock = code.indexOf(startMarkup) + startMarkup.size(); + int endBlock = code.indexOf(endMarkup); + + if ((startBlock == -1) || (endBlock == -1)) + break; + + QString codeBlock = code.mid(startBlock, endBlock - startBlock); + const QStringList rows = codeBlock.split(QLatin1Char('\n')); + int currenRow = 0; + int offset = 0; + + for (QString row : rows) { + for (const QString &invalidString : qAsConst(invalidStrings)) + row.remove(invalidString); + + if (row.trimmed().size() == 0) { + if (currenRow == 0) + continue; + else + s << endl; + } + + if (currenRow == 0) { + //find offset + for (int i=0, i_max = row.size(); i < i_max; i++) { + if (row[i] == QLatin1Char(' ')) + offset++; + else if (row[i] == QLatin1Char('\n')) + offset = 0; + else + break; + } + } + row = row.mid(offset); + s << row << endl; + currenRow++; + } + + code = code.mid(endBlock+endMarkup.size()); + } + } +} + +bool QtDocGenerator::writeInjectDocumentation(QTextStream& s, + TypeSystem::DocModificationMode mode, + const AbstractMetaClass* cppClass, + const AbstractMetaFunction* func) +{ + Indentation indentation(INDENT); + bool didSomething = false; + + const DocModificationList &mods = cppClass->typeEntry()->docModifications(); + for (const DocModification &mod : mods) { + if (mod.mode() == mode) { + bool modOk = func ? mod.signature() == func->minimalSignature() : mod.signature().isEmpty(); + + if (modOk) { + Documentation doc; + Documentation::Format fmt; + + if (mod.format() == TypeSystem::NativeCode) + fmt = Documentation::Native; + else if (mod.format() == TypeSystem::TargetLangCode) + fmt = Documentation::Target; + else + continue; + + doc.setValue(mod.code() , fmt); + writeFormattedText(s, doc, cppClass); + didSomething = true; + } + } + } + + s << endl; + + // TODO: Deprecate the use of doc string on glue code. + // This is pre "add-function" and "inject-documentation" tags. + const TypeSystem::CodeSnipPosition pos = mode == TypeSystem::DocModificationPrepend + ? TypeSystem::CodeSnipPositionBeginning : TypeSystem::CodeSnipPositionEnd; + if (func) + writeDocSnips(s, func->injectedCodeSnips(), pos, TypeSystem::TargetLangCode); + else + writeDocSnips(s, cppClass->typeEntry()->codeSnips(), pos, TypeSystem::TargetLangCode); + return didSomething; +} + +void QtDocGenerator::writeFunctionSignature(QTextStream& s, const AbstractMetaClass* cppClass, const AbstractMetaFunction* func) +{ + QString className; + if (!func->isConstructor()) + className = getClassTargetFullName(cppClass) + QLatin1Char('.'); + else if (func->implementingClass() && func->implementingClass()->enclosingClass()) + className = getClassTargetFullName(func->implementingClass()->enclosingClass()) + QLatin1Char('.'); + + QString funcName = getFuncName(func); + if (!funcName.startsWith(className)) + funcName = className + funcName; + + s << funcName << "(" << parseArgDocStyle(cppClass, func) << ")"; +} + +QString QtDocGenerator::translateToPythonType(const AbstractMetaType* type, const AbstractMetaClass* cppClass) +{ + QString strType; + if (type->name() == QLatin1String("QString")) { + strType = QLatin1String("unicode"); + } else if (type->name() == QLatin1String("QVariant")) { + strType = QLatin1String("object"); + } else if (type->name() == QLatin1String("QStringList")) { + strType = QLatin1String("list of strings"); + } else if (type->isConstant() && type->name() == QLatin1String("char") && type->indirections() == 1) { + strType = QLatin1String("str"); + } else if (type->name().startsWith(QLatin1String("unsigned short"))) { + strType = QLatin1String("int"); + } else if (type->name().startsWith(QLatin1String("unsigned "))) { // uint and ulong + strType = QLatin1String("long"); + } else if (type->isContainer()) { + QString strType = translateType(type, cppClass, Options(ExcludeConst) | ExcludeReference); + strType.remove(QLatin1Char('*')); + strType.remove(QLatin1Char('>')); + strType.remove(QLatin1Char('<')); + strType.replace(QLatin1String("::"), QLatin1String(".")); + if (strType.contains(QLatin1String("QList")) || strType.contains(QLatin1String("QVector"))) { + strType.replace(QLatin1String("QList"), QLatin1String("list of ")); + strType.replace(QLatin1String("QVector"), QLatin1String("list of ")); + } else if (strType.contains(QLatin1String("QHash")) || strType.contains(QLatin1String("QMap"))) { + strType.remove(QLatin1String("QHash")); + strType.remove(QLatin1String("QMap")); + QStringList types = strType.split(QLatin1Char(',')); + strType = QString::fromLatin1("Dictionary with keys of type %1 and values of type %2.") + .arg(types[0], types[1]); + } + } else { + QString refTag; + if (type->isEnum()) + refTag = QLatin1String("attr"); + else + refTag = QLatin1String("class"); + strType = QLatin1Char(':') + refTag + QLatin1String(":`") + type->fullName() + QLatin1Char('`'); + } + return strType; +} + +void QtDocGenerator::writeParameterType(QTextStream& s, const AbstractMetaClass* cppClass, const AbstractMetaArgument* arg) +{ + s << INDENT << ":param " << arg->name() << ": " + << translateToPythonType(arg->type(), cppClass) << endl; +} + +void QtDocGenerator::writeFunctionParametersType(QTextStream &s, const AbstractMetaClass *cppClass, + const AbstractMetaFunction *func) +{ + Indentation indentation(INDENT); + + s << endl; + const AbstractMetaArgumentList &funcArgs = func->arguments(); + for (AbstractMetaArgument *arg : funcArgs) { + + if (func->argumentRemoved(arg->argumentIndex() + 1)) + continue; + + writeParameterType(s, cppClass, arg); + } + + if (!func->isConstructor() && func->type()) { + + QString retType; + // check if the return type was modified + const FunctionModificationList &mods = func->modifications(); + for (const FunctionModification &mod : mods) { + for (const ArgumentModification &argMod : mod.argument_mods) { + if (argMod.index == 0) { + retType = argMod.modified_type; + break; + } + } + } + + if (retType.isEmpty()) + retType = translateToPythonType(func->type(), cppClass); + s << INDENT << ":rtype: " << retType << endl; + } + s << endl; +} + +void QtDocGenerator::writeFunction(QTextStream& s, bool writeDoc, const AbstractMetaClass* cppClass, const AbstractMetaFunction* func) +{ + writeFunctionSignature(s, cppClass, func); + s << endl; + + formatSince(s, "method", func->typeEntry()); + + if (writeDoc) { + s << endl; + writeFunctionParametersType(s, cppClass, func); + s << endl; + writeInjectDocumentation(s, TypeSystem::DocModificationPrepend, cppClass, func); + if (!writeInjectDocumentation(s, TypeSystem::DocModificationReplace, cppClass, func)) + writeFormattedText(s, func->documentation(), cppClass); + writeInjectDocumentation(s, TypeSystem::DocModificationAppend, cppClass, func); + } +} + +static void writeFancyToc(QTextStream& s, const QStringList& items, int cols = 4) +{ + typedef QMap TocMap; + TocMap tocMap; + QChar Q = QLatin1Char('Q'); + QChar idx; + for (QString item : items) { + if (item.isEmpty()) + continue; + if (item.startsWith(Q) && item.length() > 1) + idx = item[1]; + item.chop(4); // Remove the .rst extension + tocMap[idx] << item; + } + QtXmlToSphinx::Table table; + QtXmlToSphinx::TableRow row; + + int itemsPerCol = (items.size() + tocMap.size()*2) / cols; + QString currentColData; + int i = 0; + QTextStream ss(¤tColData); + QMutableMapIterator it(tocMap); + while (it.hasNext()) { + it.next(); + qSort(it.value()); + + if (i) + ss << endl; + + ss << "**" << it.key() << "**" << endl << endl; + i += 2; // a letter title is equivalent to two entries in space + for (const QString &item : qAsConst(it.value())) { + ss << "* :doc:`" << item << "`" << endl; + ++i; + + // end of column detected! + if (i > itemsPerCol) { + ss.flush(); + QtXmlToSphinx::TableCell cell(currentColData); + row << cell; + currentColData.clear(); + i = 0; + } + } + } + if (i) { + ss.flush(); + QtXmlToSphinx::TableCell cell(currentColData); + row << cell; + currentColData.clear(); + i = 0; + } + table << row; + table.normalize(); + s << ".. container:: pysidetoc" << endl << endl; + s << table; +} + +bool QtDocGenerator::finishGeneration() +{ + if (!classes().isEmpty()) + writeModuleDocumentation(); + if (!m_additionalDocumentationList.isEmpty()) + writeAdditionalDocumentation(); + return true; +} + +void QtDocGenerator::writeModuleDocumentation() +{ + QMap::iterator it = m_packages.begin(); + for (; it != m_packages.end(); ++it) { + QString key = it.key(); + key.replace(QLatin1Char('.'), QLatin1Char('/')); + QString outputDir = outputDirectory() + QLatin1Char('/') + key; + FileOut output(outputDir + QLatin1String("/index.rst")); + QTextStream& s = output.stream; + + s << ".. module:: " << it.key() << endl << endl; + + QString title = it.key(); + s << title << endl; + s << Pad('*', title.length()) << endl << endl; + + /* Avoid showing "Detailed Description for *every* class in toc tree */ + Indentation indentation(INDENT); + + // Search for extra-sections + if (!m_extraSectionDir.isEmpty()) { + QDir extraSectionDir(m_extraSectionDir); + QStringList fileList = extraSectionDir.entryList(QStringList() << (it.key() + QLatin1String("?*.rst")), QDir::Files); + QStringList::iterator it2 = fileList.begin(); + for (; it2 != fileList.end(); ++it2) { + QString origFileName(*it2); + it2->remove(0, it.key().count() + 1); + QString newFilePath = outputDir + QLatin1Char('/') + *it2; + if (QFile::exists(newFilePath)) + QFile::remove(newFilePath); + if (!QFile::copy(m_extraSectionDir + QLatin1Char('/') + origFileName, newFilePath)) { + qCDebug(lcShiboken).noquote().nospace() << "Error copying extra doc " + << QDir::toNativeSeparators(m_extraSectionDir + QLatin1Char('/') + origFileName) + << " to " << QDir::toNativeSeparators(newFilePath); + } + } + it.value().append(fileList); + } + + writeFancyToc(s, it.value()); + + s << INDENT << ".. container:: hide" << endl << endl; + { + Indentation indentation(INDENT); + s << INDENT << ".. toctree::" << endl; + Indentation deeperIndentation(INDENT); + s << INDENT << ":maxdepth: 1" << endl << endl; + for (const QString &className : qAsConst(it.value())) + s << INDENT << className << endl; + s << endl << endl; + } + + s << "Detailed Description" << endl; + s << "--------------------" << endl << endl; + + // module doc is always wrong and C++istic, so go straight to the extra directory! + QFile moduleDoc(m_extraSectionDir + QLatin1Char('/') + it.key() + QLatin1String(".rst")); + if (moduleDoc.open(QIODevice::ReadOnly | QIODevice::Text)) { + s << moduleDoc.readAll(); + moduleDoc.close(); + } else { + // try the normal way + Documentation moduleDoc = m_docParser->retrieveModuleDocumentation(it.key()); + if (moduleDoc.format() == Documentation::Native) { + QString context = it.key(); + context.remove(0, context.lastIndexOf(QLatin1Char('.')) + 1); + QtXmlToSphinx x(this, moduleDoc.value(), context); + s << x; + } else { + s << moduleDoc.value(); + } + } + } +} + +static inline QString msgNonExistentAdditionalDocFile(const QString &dir, + const QString &fileName) +{ + const QString result = QLatin1Char('"') + fileName + + QLatin1String("\" does not exist in ") + + QDir::toNativeSeparators(dir) + QLatin1Char('.'); + return result; +} + +void QtDocGenerator::writeAdditionalDocumentation() +{ + QFile additionalDocumentationFile(m_additionalDocumentationList); + if (!additionalDocumentationFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + qCWarning(lcShiboken, "%s", + qPrintable(FileOut::msgCannotOpenForReading(additionalDocumentationFile))); + return; + } + + QDir outDir(outputDirectory()); + const QString rstSuffix = fileNameSuffix(); + + QString errorMessage; + int successCount = 0; + int count = 0; + + QString targetDir = outDir.absolutePath(); + + while (!additionalDocumentationFile.atEnd()) { + const QByteArray lineBA = additionalDocumentationFile.readLine().trimmed(); + if (lineBA.isEmpty() || lineBA.startsWith('#')) + continue; + const QString line = QFile::decodeName(lineBA); + // Parse "[directory]" specification + if (line.size() > 2 && line.startsWith(QLatin1Char('[')) && line.endsWith(QLatin1Char(']'))) { + const QString dir = line.mid(1, line.size() - 2); + if (dir.isEmpty() || dir == QLatin1String(".")) { + targetDir = outDir.absolutePath(); + } else { + if (!outDir.exists(dir) && !outDir.mkdir(dir)) { + qCWarning(lcShiboken, "Cannot create directory %s under %s", + qPrintable(dir), + qPrintable(QDir::toNativeSeparators(outputDirectory()))); + break; + } + targetDir = outDir.absoluteFilePath(dir); + } + } else { + // Normal file entry + QFileInfo fi(m_docDataDir + QLatin1Char('/') + line); + if (fi.isFile()) { + const QString rstFileName = fi.baseName() + rstSuffix; + const QString rstFile = targetDir + QLatin1Char('/') + rstFileName; + if (QtXmlToSphinx::convertToRst(this, fi.absoluteFilePath(), + rstFile, QString(), &errorMessage)) { + ++successCount; + qCDebug(lcShiboken).nospace().noquote() << __FUNCTION__ + << " converted " << fi.fileName() + << ' ' << rstFileName; + } else { + qCWarning(lcShiboken, "%s", qPrintable(errorMessage)); + } + } else { + qCWarning(lcShiboken, "%s", + qPrintable(msgNonExistentAdditionalDocFile(m_docDataDir, line))); + } + ++count; + } + } + additionalDocumentationFile.close(); + + qCInfo(lcShiboken, "Created %d/%d additional documentation files.", + successCount, count); +} + +bool QtDocGenerator::doSetup(const QMap& args) +{ + m_libSourceDir = args.value(QLatin1String("library-source-dir")); + m_docDataDir = args.value(QLatin1String("documentation-data-dir")); +#ifdef __WIN32__ +# define PATH_SEP ';' +#else +# define PATH_SEP ':' +#endif + m_codeSnippetDirs = args.value(QLatin1String("documentation-code-snippets-dir"), m_libSourceDir).split(QLatin1Char(PATH_SEP)); + m_extraSectionDir = args.value(QLatin1String("documentation-extra-sections-dir")); + + m_docParser = args.value(QLatin1String("doc-parser")) == QLatin1String("doxygen") + ? static_cast(new DoxygenParser) + : static_cast(new QtDocParser); + qCDebug(lcShiboken).noquote().nospace() << "doc-parser: " << args.value(QLatin1String("doc-parser")); + + if (m_libSourceDir.isEmpty() || m_docDataDir.isEmpty()) { + qCWarning(lcShiboken) << "Documentation data dir and/or Qt source dir not informed, " + "documentation will not be extracted from Qt sources."; + return false; + } else { + m_docParser->setDocumentationDataDirectory(m_docDataDir); + m_docParser->setLibrarySourceDirectory(m_libSourceDir); + } + m_additionalDocumentationList = args.value(additionalDocumentationOption()); + return true; +} + + +Generator::OptionDescriptions QtDocGenerator::options() const +{ + return OptionDescriptions() + << qMakePair(QLatin1String("doc-parser"), + QLatin1String("The documentation parser used to interpret the documentation\n" + "input files (qdoc|doxygen)")) + << qMakePair(QLatin1String("documentation-code-snippets-dir"), + QLatin1String("Directory used to search code snippets used by the documentation")) + << qMakePair(QLatin1String("documentation-data-dir"), + QLatin1String("Directory with XML files generated by documentation tool")) + << qMakePair(QLatin1String("documentation-extra-sections-dir"), + QLatin1String("Directory used to search for extra documentation sections")) + << qMakePair(QLatin1String("library-source-dir"), + QLatin1String("Directory where library source code is located")) + << qMakePair(additionalDocumentationOption(), + QLatin1String("List of additional XML files to be converted to .rst files\n" + "(for example, tutorials).")); +} + diff --git a/sources/shiboken2/generator/qtdoc/qtdocgenerator.h b/sources/shiboken2/generator/qtdoc/qtdocgenerator.h new file mode 100644 index 0000000..e467abe --- /dev/null +++ b/sources/shiboken2/generator/qtdoc/qtdocgenerator.h @@ -0,0 +1,272 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef DOCGENERATOR_H +#define DOCGENERATOR_H + +#include +#include +#include +#include +#include +#include "generator.h" +#include "docparser.h" +#include "typesystem_enums.h" +#include "typesystem_typedefs.h" + +class QtDocParser; +class AbstractMetaFunction; +class AbstractMetaClass; +QT_BEGIN_NAMESPACE +class QXmlStreamReader; +QT_END_NAMESPACE +class QtDocGenerator; + +class QtXmlToSphinx +{ +public: + struct LinkContext; + + struct InlineImage + { + QString tag; + QString href; + }; + + struct TableCell + { + short rowSpan; + short colSpan; + QString data; + + TableCell(const QString& text = QString()) : rowSpan(0), colSpan(0), data(text) {} + TableCell(const char* text) : rowSpan(0), colSpan(0), data(QLatin1String(text)) {} + }; + + typedef QList TableRow; + class Table : public QList + { + public: + Table() : m_hasHeader(false), m_normalized(false) + { + } + + void enableHeader(bool enable) + { + m_hasHeader = enable; + } + + bool hasHeader() const + { + return m_hasHeader; + } + + void normalize(); + + bool isNormalized() const + { + return m_normalized; + } + + void clear() { + m_normalized = false; + QList::clear(); + } + + private: + bool m_hasHeader; + bool m_normalized; + }; + + QtXmlToSphinx(QtDocGenerator* generator, const QString& doc, const QString& context = QString()); + + static bool convertToRst(QtDocGenerator *generator, + const QString &sourceFileName, + const QString &targetFileName, + const QString &context = QString(), + QString *errorMessage = nullptr); + + QString result() const + { + return m_result; + } + +private: + QString resolveContextForMethod(const QString& methodName) const; + QString expandFunction(const QString& function) const; + QString transform(const QString& doc); + + void handleHeadingTag(QXmlStreamReader& reader); + void handleParaTag(QXmlStreamReader& reader); + void handleItalicTag(QXmlStreamReader& reader); + void handleBoldTag(QXmlStreamReader& reader); + void handleArgumentTag(QXmlStreamReader& reader); + void handleSeeAlsoTag(QXmlStreamReader& reader); + void handleSnippetTag(QXmlStreamReader& reader); + void handleDotsTag(QXmlStreamReader& reader); + void handleLinkTag(QXmlStreamReader& reader); + void handleImageTag(QXmlStreamReader& reader); + void handleInlineImageTag(QXmlStreamReader& reader); + void handleListTag(QXmlStreamReader& reader); + void handleTermTag(QXmlStreamReader& reader); + void handleSuperScriptTag(QXmlStreamReader& reader); + void handleQuoteFileTag(QXmlStreamReader& reader); + + // table tagsvoid QtXmlToSphinx::handleValueTag(QXmlStreamReader& reader) + + void handleTableTag(QXmlStreamReader& reader); + void handleRowTag(QXmlStreamReader& reader); + void handleItemTag(QXmlStreamReader& reader); + void handleRawTag(QXmlStreamReader& reader); + void handleCodeTag(QXmlStreamReader& reader); + void handlePageTag(QXmlStreamReader&); + void handleTargetTag(QXmlStreamReader&); + + void handleIgnoredTag(QXmlStreamReader& reader); + void handleUnknownTag(QXmlStreamReader& reader); + void handleUselessTag(QXmlStreamReader& reader); + void handleAnchorTag(QXmlStreamReader& reader); + + LinkContext *handleLinkStart(const QString &type, QString ref) const; + void handleLinkText(LinkContext *linkContext, const QString &linktext) const; + void handleLinkEnd(LinkContext *linkContext); + + typedef void (QtXmlToSphinx::*TagHandler)(QXmlStreamReader&); + QHash m_handlerMap; + QStack m_handlers; + QTextStream m_output; + QString m_result; + + QStack m_buffers; + + + Table m_currentTable; + QScopedPointer m_linkContext; // for + QScopedPointer m_seeAlsoContext; // for foo() + bool m_tableHasHeader; + QString m_context; + QtDocGenerator* m_generator; + bool m_insideBold; + bool m_insideItalic; + QString m_lastTagName; + QString m_opened_anchor; + QVector m_inlineImages; + + QString readFromLocations(const QStringList &locations, const QString &path, + const QString &identifier, QString *errorMessage); + QString readFromLocation(const QString &location, const QString &identifier, + QString *errorMessage); + void pushOutputBuffer(); + QString popOutputBuffer(); + void writeTable(Table& table); + bool copyImage(const QString &href) const; +}; + +inline QTextStream& operator<<(QTextStream& s, const QtXmlToSphinx& xmlToSphinx) +{ + return s << xmlToSphinx.result(); +} + +QTextStream& operator<<(QTextStream& s, const QtXmlToSphinx::Table &table); + +/** +* The DocGenerator generates documentation from library being binded. +*/ +class QtDocGenerator : public Generator +{ +public: + QtDocGenerator(); + ~QtDocGenerator(); + + QString libSourceDir() const + { + return m_libSourceDir; + } + + QString docDataDir() const { return m_docDataDir; } + + bool doSetup(const QMap& args) override; + + const char* name() const override + { + return "QtDocGenerator"; + } + + OptionDescriptions options() const override; + + QStringList codeSnippetDirs() const + { + return m_codeSnippetDirs; + } + + bool shouldGenerate(const AbstractMetaClass *) const override; + +protected: + QString fileNameSuffix() const override; + QString fileNameForContext(GeneratorContext &context) const override; + void generateClass(QTextStream &s, GeneratorContext &classContext) override; + bool finishGeneration() override; + + void writeFunctionArguments(QTextStream&, const AbstractMetaFunction*, Options) const override {} + void writeArgumentNames(QTextStream&, const AbstractMetaFunction*, Options) const override {} + +private: + void writeEnums(QTextStream& s, const AbstractMetaClass* cppClass); + + void writeFields(QTextStream &s, const AbstractMetaClass *cppClass); + void writeArguments(QTextStream &s, const AbstractMetaClass *cppClass, const AbstractMetaFunction *func); + void writeFunctionSignature(QTextStream& s, const AbstractMetaClass* cppClass, const AbstractMetaFunction* func); + void writeFunction(QTextStream& s, bool writeDoc, const AbstractMetaClass* cppClass, const AbstractMetaFunction* func); + void writeFunctionParametersType(QTextStream &s, const AbstractMetaClass *cppClass, + const AbstractMetaFunction* func); + void writeFunctionList(QTextStream& s, const AbstractMetaClass* cppClass); + void writeFunctionBlock(QTextStream& s, const QString& title, QStringList& functions); + void writeParameterType(QTextStream &s, const AbstractMetaClass *cppClass, const AbstractMetaArgument *arg); + + void writeConstructors(QTextStream &s, const AbstractMetaClass *cppClass); + void writeFormattedText(QTextStream &s, const Documentation &doc, + const AbstractMetaClass *metaclass = nullptr); + bool writeInjectDocumentation(QTextStream& s, TypeSystem::DocModificationMode mode, const AbstractMetaClass* cppClass, const AbstractMetaFunction* func); + void writeDocSnips(QTextStream &s, const CodeSnipList &codeSnips, TypeSystem::CodeSnipPosition position, TypeSystem::Language language); + + void writeModuleDocumentation(); + void writeAdditionalDocumentation(); + + QString parseArgDocStyle(const AbstractMetaClass *cppClass, const AbstractMetaFunction *func); + QString translateToPythonType(const AbstractMetaType *type, const AbstractMetaClass *cppClass); + + QString m_docDataDir; + QString m_libSourceDir; + QStringList m_codeSnippetDirs; + QString m_extraSectionDir; + QStringList m_functionList; + QMap m_packages; + DocParser* m_docParser; + QString m_additionalDocumentationList; +}; + +#endif // DOCGENERATOR_H diff --git a/sources/shiboken2/generator/shiboken2/CMakeLists.txt b/sources/shiboken2/generator/shiboken2/CMakeLists.txt new file mode 100644 index 0000000..5c1b612 --- /dev/null +++ b/sources/shiboken2/generator/shiboken2/CMakeLists.txt @@ -0,0 +1,28 @@ +project(shibokengenerator) + +set(shiboken_SRC +../generator.cpp +cppgenerator.cpp +headergenerator.cpp +overloaddata.cpp +shibokengenerator.cpp +main.cpp +) + +include_directories(${generators_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${APIEXTRACTOR_INCLUDE_DIR} + ${Qt5Core_INCLUDE_DIRS} + ) + +add_executable(shiboken2 ${shiboken_SRC}) +set_target_properties(shiboken2 PROPERTIES OUTPUT_NAME shiboken2${shiboken_SUFFIX}) +target_link_libraries(shiboken2 + ${APIEXTRACTOR_LIBRARY} + ${Qt5Core_LIBRARIES} + ) + +configure_file(shibokenconfig.h.in "${CMAKE_CURRENT_BINARY_DIR}/shibokenconfig.h" @ONLY) + +install(TARGETS shiboken2 DESTINATION bin) diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp new file mode 100644 index 0000000..b0d7782 --- /dev/null +++ b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp @@ -0,0 +1,5836 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "cppgenerator.h" +#include "overloaddata.h" +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +QHash CppGenerator::m_nbFuncs = QHash(); +QHash CppGenerator::m_sqFuncs = QHash(); +QHash CppGenerator::m_mpFuncs = QHash(); +QString CppGenerator::m_currentErrorCode(QLatin1String("0")); + +// utility functions +inline AbstractMetaType* getTypeWithoutContainer(AbstractMetaType* arg) +{ + if (arg && arg->typeEntry()->isContainer()) { + AbstractMetaTypeList lst = arg->instantiations(); + // only support containers with 1 type + if (lst.size() == 1) + return lst[0]; + } + return arg; +} + +CppGenerator::CppGenerator() +{ + // Number protocol structure members names + m_nbFuncs.insert(QLatin1String("__add__"), QLatin1String("nb_add")); + m_nbFuncs.insert(QLatin1String("__sub__"), QLatin1String("nb_subtract")); + m_nbFuncs.insert(QLatin1String("__mul__"), QLatin1String("nb_multiply")); + m_nbFuncs.insert(QLatin1String("__div__"), QLatin1String("nb_divide")); + m_nbFuncs.insert(QLatin1String("__mod__"), QLatin1String("nb_remainder")); + m_nbFuncs.insert(QLatin1String("__neg__"), QLatin1String("nb_negative")); + m_nbFuncs.insert(QLatin1String("__pos__"), QLatin1String("nb_positive")); + m_nbFuncs.insert(QLatin1String("__invert__"), QLatin1String("nb_invert")); + m_nbFuncs.insert(QLatin1String("__lshift__"), QLatin1String("nb_lshift")); + m_nbFuncs.insert(QLatin1String("__rshift__"), QLatin1String("nb_rshift")); + m_nbFuncs.insert(QLatin1String("__and__"), QLatin1String("nb_and")); + m_nbFuncs.insert(QLatin1String("__xor__"), QLatin1String("nb_xor")); + m_nbFuncs.insert(QLatin1String("__or__"), QLatin1String("nb_or")); + m_nbFuncs.insert(QLatin1String("__iadd__"), QLatin1String("nb_inplace_add")); + m_nbFuncs.insert(QLatin1String("__isub__"), QLatin1String("nb_inplace_subtract")); + m_nbFuncs.insert(QLatin1String("__imul__"), QLatin1String("nb_inplace_multiply")); + m_nbFuncs.insert(QLatin1String("__idiv__"), QLatin1String("nb_inplace_divide")); + m_nbFuncs.insert(QLatin1String("__imod__"), QLatin1String("nb_inplace_remainder")); + m_nbFuncs.insert(QLatin1String("__ilshift__"), QLatin1String("nb_inplace_lshift")); + m_nbFuncs.insert(QLatin1String("__irshift__"), QLatin1String("nb_inplace_rshift")); + m_nbFuncs.insert(QLatin1String("__iand__"), QLatin1String("nb_inplace_and")); + m_nbFuncs.insert(QLatin1String("__ixor__"), QLatin1String("nb_inplace_xor")); + m_nbFuncs.insert(QLatin1String("__ior__"), QLatin1String("nb_inplace_or")); + m_nbFuncs.insert(QLatin1String("bool"), QLatin1String("nb_nonzero")); + + // sequence protocol functions + typedef QPair StrPair; + m_sequenceProtocol.insert(QLatin1String("__len__"), + StrPair(QLatin1String("PyObject* " PYTHON_SELF_VAR), QLatin1String("Py_ssize_t"))); + m_sequenceProtocol.insert(QLatin1String("__getitem__"), + StrPair(QLatin1String("PyObject* " PYTHON_SELF_VAR ", Py_ssize_t _i"), + QLatin1String("PyObject*"))); + m_sequenceProtocol.insert(QLatin1String("__setitem__"), + StrPair(QLatin1String("PyObject* " PYTHON_SELF_VAR ", Py_ssize_t _i, PyObject* _value"), + QLatin1String("int"))); + m_sequenceProtocol.insert(QLatin1String("__getslice__"), + StrPair(QLatin1String("PyObject* " PYTHON_SELF_VAR ", Py_ssize_t _i1, Py_ssize_t _i2"), + QLatin1String("PyObject*"))); + m_sequenceProtocol.insert(QLatin1String("__setslice__"), + StrPair(QLatin1String("PyObject* " PYTHON_SELF_VAR ", Py_ssize_t _i1, Py_ssize_t _i2, PyObject* _value"), + QLatin1String("int"))); + m_sequenceProtocol.insert(QLatin1String("__contains__"), + StrPair(QLatin1String("PyObject* " PYTHON_SELF_VAR ", PyObject* _value"), + QLatin1String("int"))); + m_sequenceProtocol.insert(QLatin1String("__concat__"), + StrPair(QLatin1String("PyObject* " PYTHON_SELF_VAR ", PyObject* _other"), + QLatin1String("PyObject*"))); + + // Sequence protocol structure members names + m_sqFuncs.insert(QLatin1String("__concat__"), QLatin1String("sq_concat")); + m_sqFuncs.insert(QLatin1String("__contains__"), QLatin1String("sq_contains")); + m_sqFuncs.insert(QLatin1String("__getitem__"), QLatin1String("sq_item")); + m_sqFuncs.insert(QLatin1String("__getslice__"), QLatin1String("sq_slice")); + m_sqFuncs.insert(QLatin1String("__len__"), QLatin1String("sq_length")); + m_sqFuncs.insert(QLatin1String("__setitem__"), QLatin1String("sq_ass_item")); + m_sqFuncs.insert(QLatin1String("__setslice__"), QLatin1String("sq_ass_slice")); + + // mapping protocol function + m_mappingProtocol.insert(QLatin1String("__mlen__"), + StrPair(QLatin1String("PyObject* " PYTHON_SELF_VAR), + QLatin1String("Py_ssize_t"))); + m_mappingProtocol.insert(QLatin1String("__mgetitem__"), + StrPair(QLatin1String("PyObject* " PYTHON_SELF_VAR ", PyObject* _key"), + QLatin1String("PyObject*"))); + m_mappingProtocol.insert(QLatin1String("__msetitem__"), + StrPair(QLatin1String("PyObject* " PYTHON_SELF_VAR ", PyObject* _key, PyObject* _value"), + QLatin1String("int"))); + + // Sequence protocol structure members names + m_mpFuncs.insert(QLatin1String("__mlen__"), QLatin1String("mp_length")); + m_mpFuncs.insert(QLatin1String("__mgetitem__"), QLatin1String("mp_subscript")); + m_mpFuncs.insert(QLatin1String("__msetitem__"), QLatin1String("mp_ass_subscript")); +} + +QString CppGenerator::fileNameSuffix() const +{ + return QLatin1String("_wrapper.cpp"); +} + +QString CppGenerator::fileNameForContext(GeneratorContext &context) const +{ + const AbstractMetaClass *metaClass = context.metaClass(); + if (!context.forSmartPointer()) { + QString fileNameBase = metaClass->qualifiedCppName().toLower(); + fileNameBase.replace(QLatin1String("::"), QLatin1String("_")); + return fileNameBase + fileNameSuffix(); + } else { + const AbstractMetaType *smartPointerType = context.preciseType(); + QString fileNameBase = getFileNameBaseForSmartPointer(smartPointerType, metaClass); + return fileNameBase + fileNameSuffix(); + } +} + +QVector CppGenerator::filterGroupedOperatorFunctions(const AbstractMetaClass* metaClass, + uint queryIn) +{ + // ( func_name, num_args ) => func_list + typedef QMap, AbstractMetaFunctionList> ResultMap; + ResultMap results; + const AbstractMetaClass::OperatorQueryOptions query(queryIn); + const AbstractMetaFunctionList &funcs = metaClass->operatorOverloads(query); + for (AbstractMetaFunction *func : funcs) { + if (func->isModifiedRemoved() + || func->usesRValueReferences() + || func->name() == QLatin1String("operator[]") + || func->name() == QLatin1String("operator->") + || func->name() == QLatin1String("operator!")) { + continue; + } + int args; + if (func->isComparisonOperator()) { + args = -1; + } else { + args = func->arguments().size(); + } + QPair op(func->name(), args); + results[op].append(func); + } + QVector result; + result.reserve(results.size()); + for (ResultMap::const_iterator it = results.cbegin(), end = results.cend(); it != end; ++it) + result.append(it.value()); + return result; +} + +bool CppGenerator::hasBoolCast(const AbstractMetaClass* metaClass) const +{ + if (!useIsNullAsNbNonZero()) + return false; + // TODO: This could be configurable someday + const AbstractMetaFunction* func = metaClass->findFunction(QLatin1String("isNull")); + if (!func || !func->type() || !func->type()->typeEntry()->isPrimitive() || !func->isPublic()) + return false; + const PrimitiveTypeEntry* pte = static_cast(func->type()->typeEntry()); + while (pte->referencedTypeEntry()) + pte = pte->referencedTypeEntry(); + return func && func->isConstant() && pte->name() == QLatin1String("bool") && func->arguments().isEmpty(); +} + +typedef QMap FunctionGroupMap; +typedef FunctionGroupMap::const_iterator FunctionGroupMapIt; + +// Prevent ELF symbol qt_version_tag from being generated into the source +static const char includeQDebug[] = +"#ifndef QT_NO_VERSION_TAGGING\n" +"# define QT_NO_VERSION_TAGGING\n" +"#endif\n" +"#include \n"; + +static QString chopType(QString s) +{ + if (s.endsWith(QLatin1String("_Type"))) + s.chop(5); + else if (s.endsWith(QLatin1String("_TypeF()"))) + s.chop(8); + return s; +} + +/*! + Function used to write the class generated binding code on the buffer + \param s the output buffer + \param metaClass the pointer to metaclass information +*/ +void CppGenerator::generateClass(QTextStream &s, GeneratorContext &classContext) +{ + AbstractMetaClass *metaClass = classContext.metaClass(); + if (ReportHandler::isDebug(ReportHandler::SparseDebug)) + qCDebug(lcShiboken) << "Generating wrapper implementation for " << metaClass->fullName(); + + // write license comment + s << licenseComment() << endl; + + if (!avoidProtectedHack() && !metaClass->isNamespace() && !metaClass->hasPrivateDestructor()) { + s << "//workaround to access protected functions" << endl; + s << "#define protected public" << endl << endl; + } + + // headers + s << "// default includes" << endl; + s << "#include " << endl; + if (usePySideExtensions()) { + s << includeQDebug; + s << "#include " << endl; + s << "#include " << endl; + s << "#include " << endl; + s << "#include " << endl; + s << "#include " << endl; + } + + s << "#include " << endl; + if (usePySideExtensions() && metaClass->isQObject()) { + s << "#include " << endl; + s << "#include " << endl; + } + + // The multiple inheritance initialization function + // needs the 'set' class from C++ STL. + if (hasMultipleInheritanceInAncestry(metaClass)) + s << "#include " << endl; + + s << endl << "// module include" << endl << "#include \"" << getModuleHeaderFileName() << '"' << endl; + + QString headerfile = fileNameForContext(classContext); + headerfile.replace(QLatin1String(".cpp"), QLatin1String(".h")); + s << endl << "// main header" << endl << "#include \"" << headerfile << '"' << endl; + + s << endl << "// inner classes" << endl; + const AbstractMetaClassList &innerClasses = metaClass->innerClasses(); + for (AbstractMetaClass *innerClass : innerClasses) { + GeneratorContext innerClassContext(innerClass); + if (shouldGenerate(innerClass)) { + QString headerfile = fileNameForContext(innerClassContext); + headerfile.replace(QLatin1String(".cpp"), QLatin1String(".h")); + s << "#include \"" << headerfile << '"' << endl; + } + } + + AbstractMetaEnumList classEnums = metaClass->enums(); + for (AbstractMetaClass *innerClass : innerClasses) + lookForEnumsInClassesNotToBeGenerated(classEnums, innerClass); + + //Extra includes + s << endl << "// Extra includes" << endl; + QVector includes = metaClass->typeEntry()->extraIncludes(); + for (AbstractMetaEnum *cppEnum : qAsConst(classEnums)) + includes.append(cppEnum->typeEntry()->extraIncludes()); + qSort(includes.begin(), includes.end()); + for (const Include &inc : qAsConst(includes)) + s << inc.toString() << endl; + s << endl; + + if (metaClass->typeEntry()->typeFlags() & ComplexTypeEntry::Deprecated) + s << "#Deprecated" << endl; + + // Use class base namespace + { + const AbstractMetaClass *context = metaClass->enclosingClass(); + while (context) { + if (context->isNamespace() && !context->enclosingClass()) { + s << "using namespace " << context->qualifiedCppName() << ";" << endl; + break; + } + context = context->enclosingClass(); + } + } + + s << endl; + + // Create string literal for smart pointer getter method. + if (classContext.forSmartPointer()) { + const SmartPointerTypeEntry *typeEntry = + static_cast(classContext.preciseType() + ->typeEntry()); + QString rawGetter = typeEntry->getter(); + s << "static const char * " SMART_POINTER_GETTER " = \"" << rawGetter << "\";"; + } + + // class inject-code native/beginning + if (!metaClass->typeEntry()->codeSnips().isEmpty()) { + writeCodeSnips(s, metaClass->typeEntry()->codeSnips(), TypeSystem::CodeSnipPositionBeginning, TypeSystem::NativeCode, metaClass); + s << endl; + } + + // python conversion rules + if (metaClass->typeEntry()->hasTargetConversionRule()) { + s << "// Python Conversion" << endl; + s << metaClass->typeEntry()->conversionRule() << endl; + } + + if (shouldGenerateCppWrapper(metaClass)) { + s << "// Native ---------------------------------------------------------" << endl; + s << endl; + + if (avoidProtectedHack() && usePySideExtensions()) { + s << "void " << wrapperName(metaClass) << "::pysideInitQtMetaTypes()\n{\n"; + Indentation indent(INDENT); + writeInitQtMetaTypeFunctionBody(s, classContext); + s << "}\n\n"; + } + + const AbstractMetaFunctionList &funcs = filterFunctions(metaClass); + for (const AbstractMetaFunction *func : funcs) { + const bool notAbstract = !func->isAbstract(); + if ((func->isPrivate() && notAbstract && !visibilityModifiedToPrivate(func)) + || (func->isModifiedRemoved() && notAbstract)) + continue; + if (func->functionType() == AbstractMetaFunction::ConstructorFunction && !func->isUserAdded()) { + writeConstructorNative(s, func); + } else if ((!avoidProtectedHack() || !metaClass->hasPrivateDestructor()) + && ((func->isVirtual() || func->isAbstract()) + && (func->attributes() & AbstractMetaAttributes::FinalCppMethod) == 0)) { + writeVirtualMethodNative(s, func); + } + } + + if (!avoidProtectedHack() || !metaClass->hasPrivateDestructor()) { + if (usePySideExtensions() && metaClass->isQObject()) + writeMetaObjectMethod(s, metaClass); + writeDestructorNative(s, metaClass); + } + } + + Indentation indentation(INDENT); + + QString methodsDefinitions; + QTextStream md(&methodsDefinitions); + QString singleMethodDefinitions; + QTextStream smd(&singleMethodDefinitions); + QString signaturesString; + QTextStream signatureStream(&signaturesString); + + s << endl << "// Target ---------------------------------------------------------" << endl << endl; + s << "extern \"C\" {" << endl; + const FunctionGroupMap &functionGroups = getFunctionGroups(metaClass); + for (FunctionGroupMapIt it = functionGroups.cbegin(), end = functionGroups.cend(); it != end; ++it) { + AbstractMetaFunctionList overloads; + QSet seenSignatures; + for (AbstractMetaFunction *func : it.value()) { + if (!func->isAssignmentOperator() + && !func->usesRValueReferences() + && !func->isCastOperator() + && !func->isModifiedRemoved() + && (!func->isPrivate() || func->functionType() == AbstractMetaFunction::EmptyFunction) + && func->ownerClass() == func->implementingClass() + && (func->name() != QLatin1String("qt_metacall"))) { + // PYSIDE-331: Inheritance works correctly when there are disjoint functions. + // But when a function is both in a class and inherited in a subclass, + // then we need to search through all subclasses and collect the new signatures. + overloads << getFunctionAndInheritedOverloads(func, &seenSignatures); + } + } + + if (overloads.isEmpty()) + continue; + + const AbstractMetaFunction* rfunc = overloads.constFirst(); + if (m_sequenceProtocol.contains(rfunc->name()) || m_mappingProtocol.contains(rfunc->name())) + continue; + + if (rfunc->isConstructor()) { + // @TODO: Implement constructor support for smart pointers, so that they can be + // instantiated in python code. + if (classContext.forSmartPointer()) + continue; + writeConstructorWrapper(s, overloads, classContext); + writeSignatureInfo(signatureStream, overloads); + } + // call operators + else if (rfunc->name() == QLatin1String("operator()")) { + writeMethodWrapper(s, overloads, classContext); + writeSignatureInfo(signatureStream, overloads); + } + else if (!rfunc->isOperatorOverload()) { + + if (classContext.forSmartPointer()) { + const SmartPointerTypeEntry *smartPointerTypeEntry = + static_cast( + classContext.preciseType()->typeEntry()); + + if (smartPointerTypeEntry->getter() == rfunc->name()) { + // Replace the return type of the raw pointer getter method with the actual + // return type. + QString innerTypeName = + classContext.preciseType()->getSmartPointerInnerType()->name(); + QString pointerToInnerTypeName = innerTypeName + QLatin1Char('*'); + // @TODO: This possibly leaks, but there are a bunch of other places where this + // is done, so this will be fixed in bulk with all the other cases, because the + // ownership of the pointers is not clear at the moment. + AbstractMetaType *pointerToInnerType = + buildAbstractMetaTypeFromString(pointerToInnerTypeName); + + AbstractMetaFunction *mutableRfunc = overloads.constFirst(); + mutableRfunc->replaceType(pointerToInnerType); + } else if (smartPointerTypeEntry->refCountMethodName().isEmpty() + || smartPointerTypeEntry->refCountMethodName() != rfunc->name()) { + // Skip all public methods of the smart pointer except for the raw getter and + // the ref count method. + continue; + } + } + + writeMethodWrapper(s, overloads, classContext); + writeSignatureInfo(signatureStream, overloads); + if (OverloadData::hasStaticAndInstanceFunctions(overloads)) { + QString methDefName = cpythonMethodDefinitionName(rfunc); + smd << "static PyMethodDef " << methDefName << " = {" << endl; + smd << INDENT; + writeMethodDefinitionEntry(smd, overloads); + smd << endl << "};" << endl << endl; + } + writeMethodDefinition(md, overloads); + } + } + + const QString className = chopType(cpythonTypeName(metaClass)); + + if (metaClass->typeEntry()->isValue() || metaClass->typeEntry()->isSmartPointer()) { + writeCopyFunction(s, classContext); + signatureStream << metaClass->fullName() << ".__copy__()" << endl; + } + + // Write single method definitions + s << singleMethodDefinitions; + + // Write methods definition + s << "static PyMethodDef " << className << "_methods[] = {" << endl; + s << methodsDefinitions << endl; + if (metaClass->typeEntry()->isValue() || metaClass->typeEntry()->isSmartPointer()) + s << INDENT << "{\"__copy__\", (PyCFunction)" << className << "___copy__" << ", METH_NOARGS}," << endl; + s << INDENT << "{0} // Sentinel" << endl; + s << "};" << endl << endl; + + // Write tp_getattro function + if ((usePySideExtensions() && metaClass->qualifiedCppName() == QLatin1String("QObject"))) { + writeGetattroFunction(s, classContext); + s << endl; + writeSetattroFunction(s, classContext); + s << endl; + } else { + if (classNeedsGetattroFunction(metaClass)) { + writeGetattroFunction(s, classContext); + s << endl; + } + if (classNeedsSetattroFunction(metaClass)) { + writeSetattroFunction(s, classContext); + s << endl; + } + } + + if (hasBoolCast(metaClass)) { + ErrorCode errorCode(-1); + s << "static int " << cpythonBaseName(metaClass) << "___nb_bool(PyObject* " PYTHON_SELF_VAR ")" << endl; + s << '{' << endl; + writeCppSelfDefinition(s, classContext); + s << INDENT << "int result;" << endl; + s << INDENT << BEGIN_ALLOW_THREADS << endl; + s << INDENT << "result = !" CPP_SELF_VAR "->isNull();" << endl; + s << INDENT << END_ALLOW_THREADS << endl; + s << INDENT << "return result;" << endl; + s << '}' << endl << endl; + } + + if (supportsNumberProtocol(metaClass) && !metaClass->typeEntry()->isSmartPointer()) { + const QVector opOverloads = filterGroupedOperatorFunctions( + metaClass, + AbstractMetaClass::ArithmeticOp + | AbstractMetaClass::LogicalOp + | AbstractMetaClass::BitwiseOp); + + for (const AbstractMetaFunctionList &allOverloads : opOverloads) { + AbstractMetaFunctionList overloads; + for (AbstractMetaFunction *func : allOverloads) { + if (!func->isModifiedRemoved() + && !func->isPrivate() + && (func->ownerClass() == func->implementingClass() || func->isAbstract())) + overloads.append(func); + } + + if (overloads.isEmpty()) + continue; + + writeMethodWrapper(s, overloads, classContext); + writeSignatureInfo(signatureStream, overloads); + } + } + + if (supportsSequenceProtocol(metaClass)) { + writeSequenceMethods(s, metaClass, classContext); + } + + if (supportsMappingProtocol(metaClass)) { + writeMappingMethods(s, metaClass, classContext); + } + + if (!metaClass->isNamespace() && metaClass->hasComparisonOperatorOverload()) { + s << "// Rich comparison" << endl; + writeRichCompareFunction(s, classContext); + } + + if (shouldGenerateGetSetList(metaClass) && !classContext.forSmartPointer()) { + const AbstractMetaFieldList &fields = metaClass->fields(); + for (const AbstractMetaField *metaField : fields) { + if (metaField->isStatic()) + continue; + writeGetterFunction(s, metaField, classContext); + if (!metaField->type()->isConstant()) + writeSetterFunction(s, metaField, classContext); + s << endl; + } + + s << "// Getters and Setters for " << metaClass->name() << endl; + s << "static PyGetSetDef " << cpythonGettersSettersDefinitionName(metaClass) << "[] = {" << endl; + for (const AbstractMetaField *metaField : fields) { + if (metaField->isStatic()) + continue; + + bool hasSetter = !metaField->type()->isConstant(); + s << INDENT << "{const_cast(\"" << metaField->name() << "\"), "; + s << cpythonGetterFunctionName(metaField); + s << ", " << (hasSetter ? cpythonSetterFunctionName(metaField) : QLatin1String("0")); + s << "}," << endl; + } + s << INDENT << "{0} // Sentinel" << endl; + s << "};" << endl << endl; + } + + s << "} // extern \"C\"" << endl << endl; + + if (!metaClass->typeEntry()->hashFunction().isEmpty()) + writeHashFunction(s, classContext); + + // Write tp_traverse and tp_clear functions. + writeTpTraverseFunction(s, metaClass); + writeTpClearFunction(s, metaClass); + + writeClassDefinition(s, metaClass, classContext); + s << endl; + + if (metaClass->isPolymorphic() && metaClass->baseClass()) + writeTypeDiscoveryFunction(s, metaClass); + + + for (AbstractMetaEnum *cppEnum : qAsConst(classEnums)) { + if (cppEnum->isAnonymous() || cppEnum->isPrivate()) + continue; + + bool hasFlags = cppEnum->typeEntry()->flags(); + if (hasFlags) { + writeFlagsMethods(s, cppEnum); + writeFlagsNumberMethodsDefinition(s, cppEnum); + s << endl; + } + } + s << endl; + + writeConverterFunctions(s, metaClass, classContext); + writeClassRegister(s, metaClass, classContext, signatureStream); + + // class inject-code native/end + if (!metaClass->typeEntry()->codeSnips().isEmpty()) { + writeCodeSnips(s, metaClass->typeEntry()->codeSnips(), TypeSystem::CodeSnipPositionEnd, TypeSystem::NativeCode, metaClass); + s << endl; + } +} + +void CppGenerator::writeConstructorNative(QTextStream& s, const AbstractMetaFunction* func) +{ + Indentation indentation(INDENT); + s << functionSignature(func, wrapperName(func->ownerClass()) + QLatin1String("::"), QString(), + OriginalTypeDescription | SkipDefaultValues); + s << " : "; + writeFunctionCall(s, func); + s << " {" << endl; + const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().constLast(); + writeCodeSnips(s, func->injectedCodeSnips(), TypeSystem::CodeSnipPositionBeginning, TypeSystem::NativeCode, func, lastArg); + s << INDENT << "// ... middle" << endl; + writeCodeSnips(s, func->injectedCodeSnips(), TypeSystem::CodeSnipPositionEnd, TypeSystem::NativeCode, func, lastArg); + s << '}' << endl << endl; +} + +void CppGenerator::writeDestructorNative(QTextStream &s, const AbstractMetaClass *metaClass) +{ + Indentation indentation(INDENT); + s << wrapperName(metaClass) << "::~" << wrapperName(metaClass) << "()" << endl << '{' << endl; + // kill pyobject + s << INDENT << "SbkObject* wrapper = Shiboken::BindingManager::instance().retrieveWrapper(this);" << endl; + s << INDENT << "Shiboken::Object::destroy(wrapper, this);" << endl; + s << '}' << endl; +} + +static bool allArgumentsRemoved(const AbstractMetaFunction* func) +{ + if (func->arguments().isEmpty()) + return false; + const AbstractMetaArgumentList &arguments = func->arguments(); + for (const AbstractMetaArgument *arg : arguments) { + if (!func->argumentRemoved(arg->argumentIndex() + 1)) + return false; + } + return true; +} + +QString CppGenerator::getVirtualFunctionReturnTypeName(const AbstractMetaFunction* func) +{ + if (!func->type()) + return QLatin1String("\"\""); + + if (!func->typeReplaced(0).isEmpty()) + return QLatin1Char('"') + func->typeReplaced(0) + QLatin1Char('"'); + + // SbkType would return null when the type is a container. + if (func->type()->typeEntry()->isContainer()) { + return QLatin1Char('"') + + reinterpret_cast(func->type()->typeEntry())->typeName() + + QLatin1Char('"'); + } + + if (avoidProtectedHack()) { + const AbstractMetaEnum* metaEnum = findAbstractMetaEnum(func->type()); + if (metaEnum && metaEnum->isProtected()) + return QLatin1Char('"') + protectedEnumSurrogateName(metaEnum) + QLatin1Char('"'); + } + + if (func->type()->isPrimitive()) + return QLatin1Char('"') + func->type()->name() + QLatin1Char('"'); + + return QString::fromLatin1("reinterpret_cast(Shiboken::SbkType< %1 >())->tp_name").arg(func->type()->typeEntry()->qualifiedCppName()); +} + +void CppGenerator::writeVirtualMethodNative(QTextStream&s, const AbstractMetaFunction* func) +{ + //skip metaObject function, this will be written manually ahead + if (usePySideExtensions() && func->ownerClass() && func->ownerClass()->isQObject() && + ((func->name() == QLatin1String("metaObject")) || (func->name() == QLatin1String("qt_metacall")))) + return; + + const TypeEntry* retType = func->type() ? func->type()->typeEntry() : 0; + const QString funcName = func->isOperatorOverload() ? pythonOperatorFunctionName(func) : func->name(); + + QString prefix = wrapperName(func->ownerClass()) + QLatin1String("::"); + s << functionSignature(func, prefix, QString(), Generator::SkipDefaultValues|Generator::OriginalTypeDescription) + << endl << '{' << endl; + + Indentation indentation(INDENT); + + QString defaultReturnExpr; + if (retType) { + const FunctionModificationList &mods = func->modifications(); + for (const FunctionModification &mod : mods) { + for (const ArgumentModification &argMod : mod.argument_mods) { + if (argMod.index == 0 && !argMod.replacedDefaultExpression.isEmpty()) { + static const QRegularExpression regex(QStringLiteral("%(\\d+)")); + Q_ASSERT(regex.isValid()); + defaultReturnExpr = argMod.replacedDefaultExpression; + for (int offset = 0; ; ) { + const QRegularExpressionMatch match = regex.match(defaultReturnExpr, offset); + if (!match.hasMatch()) + break; + const int argId = match.capturedRef(1).toInt() - 1; + if (argId < 0 || argId > func->arguments().count()) { + qCWarning(lcShiboken) << "The expression used in return value contains an invalid index."; + break; + } + defaultReturnExpr.replace(match.captured(0), func->arguments().at(argId)->name()); + offset = match.capturedStart(1); + } + } + } + } + if (defaultReturnExpr.isEmpty()) + defaultReturnExpr = minimalConstructor(func->type()); + if (defaultReturnExpr.isEmpty()) { + QString errorMsg = QLatin1String(__FUNCTION__) + QLatin1String(": "); + if (const AbstractMetaClass *c = func->implementingClass()) + errorMsg += c->qualifiedCppName() + QLatin1String("::"); + errorMsg += func->signature(); + errorMsg = ShibokenGenerator::msgCouldNotFindMinimalConstructor(errorMsg, func->type()->cppSignature()); + qCWarning(lcShiboken).noquote().nospace() << errorMsg; + s << endl << INDENT << "#error " << errorMsg << endl; + } + } + + if (func->isAbstract() && func->isModifiedRemoved()) { + qCWarning(lcShiboken).noquote().nospace() + << QString::fromLatin1("Pure virtual method '%1::%2' must be implement but was "\ + "completely removed on type system.") + .arg(func->ownerClass()->name(), func->minimalSignature()); + s << INDENT << "return " << defaultReturnExpr << ';' << endl; + s << '}' << endl << endl; + return; + } + + //Write declaration/native injected code + if (func->hasInjectedCode()) { + CodeSnipList snips = func->injectedCodeSnips(); + const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().constLast(); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionDeclaration, TypeSystem::NativeCode, func, lastArg); + s << endl; + } + + s << INDENT << "Shiboken::GilState gil;" << endl; + + // Get out of virtual method call if someone already threw an error. + s << INDENT << "if (PyErr_Occurred())" << endl; + { + Indentation indentation(INDENT); + s << INDENT << "return " << defaultReturnExpr << ';' << endl; + } + + s << INDENT << "Shiboken::AutoDecRef " PYTHON_OVERRIDE_VAR "(Shiboken::BindingManager::instance().getOverride(this, \""; + s << funcName << "\"));" << endl; + + s << INDENT << "if (" PYTHON_OVERRIDE_VAR ".isNull()) {" << endl; + { + Indentation indentation(INDENT); + CodeSnipList snips; + if (func->hasInjectedCode()) { + snips = func->injectedCodeSnips(); + const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().constLast(); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionBeginning, TypeSystem::ShellCode, func, lastArg); + s << endl; + } + + if (func->isAbstract()) { + s << INDENT << "PyErr_SetString(PyExc_NotImplementedError, \"pure virtual method '"; + s << func->ownerClass()->name() << '.' << funcName; + s << "()' not implemented.\");" << endl; + s << INDENT << "return " << (retType ? defaultReturnExpr : QString()); + } else { + s << INDENT << "gil.release();" << endl; + s << INDENT; + if (retType) + s << "return "; + s << "this->::" << func->implementingClass()->qualifiedCppName() << "::"; + writeFunctionCall(s, func, Generator::VirtualCall); + if (!retType) + s << ";\n" << INDENT << "return"; + } + } + s << ';' << endl; + s << INDENT << '}' << endl << endl; + + writeConversionRule(s, func, TypeSystem::TargetLangCode); + + s << INDENT << "Shiboken::AutoDecRef " PYTHON_ARGS "("; + + if (func->arguments().isEmpty() || allArgumentsRemoved(func)) { + s << "PyTuple_New(0));" << endl; + } else { + QStringList argConversions; + const AbstractMetaArgumentList &arguments = func->arguments(); + for (const AbstractMetaArgument *arg : arguments) { + if (func->argumentRemoved(arg->argumentIndex() + 1)) + continue; + + QString argConv; + QTextStream ac(&argConv); + const PrimitiveTypeEntry* argType = (const PrimitiveTypeEntry*) arg->type()->typeEntry(); + bool convert = argType->isObject() + || arg->type()->isQObject() + || argType->isValue() + || arg->type()->isValuePointer() + || arg->type()->isNativePointer() + || argType->isFlags() + || argType->isEnum() + || argType->isContainer() + || arg->type()->referenceType() == LValueReference; + + if (!convert && argType->isPrimitive()) { + if (argType->basicReferencedTypeEntry()) + argType = argType->basicReferencedTypeEntry(); + convert = !m_formatUnits.contains(argType->name()); + } + + Indentation indentation(INDENT); + ac << INDENT; + if (!func->conversionRule(TypeSystem::TargetLangCode, arg->argumentIndex() + 1).isEmpty()) { + // Has conversion rule. + ac << arg->name() + QLatin1String(CONV_RULE_OUT_VAR_SUFFIX); + } else { + QString argName = arg->name(); + if (convert) + writeToPythonConversion(ac, arg->type(), func->ownerClass(), argName); + else + ac << argName; + } + + argConversions << argConv; + } + + s << "Py_BuildValue(\"(" << getFormatUnitString(func, false) << ")\"," << endl; + s << argConversions.join(QLatin1String(",\n")) << endl; + s << INDENT << "));" << endl; + } + + bool invalidateReturn = false; + QSet invalidateArgs; + const FunctionModificationList &mods = func->modifications(); + for (const FunctionModification &funcMod : mods) { + for (const ArgumentModification &argMod : funcMod.argument_mods) { + if (argMod.resetAfterUse && !invalidateArgs.contains(argMod.index)) { + invalidateArgs.insert(argMod.index); + s << INDENT << "bool invalidateArg" << argMod.index; + s << " = PyTuple_GET_ITEM(" PYTHON_ARGS ", " << argMod.index - 1 << ")->ob_refcnt == 1;" << endl; + } else if (argMod.index == 0 && argMod.ownerships[TypeSystem::TargetLangCode] == TypeSystem::CppOwnership) { + invalidateReturn = true; + } + } + } + s << endl; + + CodeSnipList snips; + if (func->hasInjectedCode()) { + snips = func->injectedCodeSnips(); + + if (injectedCodeUsesPySelf(func)) + s << INDENT << "PyObject* pySelf = BindingManager::instance().retrieveWrapper(this);" << endl; + + const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().constLast(); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionBeginning, TypeSystem::NativeCode, func, lastArg); + s << endl; + } + + if (!injectedCodeCallsPythonOverride(func)) { + s << INDENT; + s << "Shiboken::AutoDecRef " PYTHON_RETURN_VAR "(PyObject_Call(" PYTHON_OVERRIDE_VAR ", " PYTHON_ARGS ", NULL));" << endl; + + s << INDENT << "// An error happened in python code!" << endl; + s << INDENT << "if (" PYTHON_RETURN_VAR ".isNull()) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyErr_Print();" << endl; + s << INDENT << "return " << defaultReturnExpr << ';' << endl; + } + s << INDENT << '}' << endl; + + if (retType) { + if (invalidateReturn) + s << INDENT << "bool invalidateArg0 = " PYTHON_RETURN_VAR "->ob_refcnt == 1;" << endl; + + if (func->typeReplaced(0) != QLatin1String("PyObject")) { + + s << INDENT << "// Check return type" << endl; + s << INDENT; + if (func->typeReplaced(0).isEmpty()) { + s << "PythonToCppFunc " PYTHON_TO_CPP_VAR " = " << cpythonIsConvertibleFunction(func->type()); + s << PYTHON_RETURN_VAR ");" << endl; + s << INDENT << "if (!" PYTHON_TO_CPP_VAR ") {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "Shiboken::warning(PyExc_RuntimeWarning, 2, "\ + "\"Invalid return value in function %s, expected %s, got %s.\", \""; + s << func->ownerClass()->name() << '.' << funcName << "\", " << getVirtualFunctionReturnTypeName(func); + s << ", Py_TYPE(" PYTHON_RETURN_VAR ")->tp_name);" << endl; + s << INDENT << "return " << defaultReturnExpr << ';' << endl; + } + s << INDENT << '}' << endl; + + } else { + + s << INDENT << "// Check return type" << endl; + s << INDENT << "bool typeIsValid = "; + writeTypeCheck(s, func->type(), QLatin1String(PYTHON_RETURN_VAR), + isNumber(func->type()->typeEntry()), func->typeReplaced(0)); + s << ';' << endl; + s << INDENT << "if (!typeIsValid"; + s << (isPointerToWrapperType(func->type()) ? " && " PYTHON_RETURN_VAR " != Py_None" : ""); + s << ") {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "Shiboken::warning(PyExc_RuntimeWarning, 2, "\ + "\"Invalid return value in function %s, expected %s, got %s.\", \""; + s << func->ownerClass()->name() << '.' << funcName << "\", " << getVirtualFunctionReturnTypeName(func); + s << ", Py_TYPE(" PYTHON_RETURN_VAR ")->tp_name);" << endl; + s << INDENT << "return " << defaultReturnExpr << ';' << endl; + } + s << INDENT << '}' << endl; + + } + } + + if (!func->conversionRule(TypeSystem::NativeCode, 0).isEmpty()) { + // Has conversion rule. + writeConversionRule(s, func, TypeSystem::NativeCode, QLatin1String(CPP_RETURN_VAR)); + } else if (!injectedCodeHasReturnValueAttribution(func, TypeSystem::NativeCode)) { + writePythonToCppTypeConversion(s, func->type(), QLatin1String(PYTHON_RETURN_VAR), + QLatin1String(CPP_RETURN_VAR), func->implementingClass()); + } + } + } + + if (invalidateReturn) { + s << INDENT << "if (invalidateArg0)" << endl; + Indentation indentation(INDENT); + s << INDENT << "Shiboken::Object::releaseOwnership(" << PYTHON_RETURN_VAR ".object());" << endl; + } + for (int argIndex : qAsConst(invalidateArgs)) { + s << INDENT << "if (invalidateArg" << argIndex << ')' << endl; + Indentation indentation(INDENT); + s << INDENT << "Shiboken::Object::invalidate(PyTuple_GET_ITEM(" PYTHON_ARGS ", "; + s << (argIndex - 1) << "));" << endl; + } + + + const FunctionModificationList &funcMods = func->modifications(); + for (const FunctionModification &funcMod : funcMods) { + for (const ArgumentModification &argMod : funcMod.argument_mods) { + if (argMod.ownerships.contains(TypeSystem::NativeCode) + && argMod.index == 0 && argMod.ownerships[TypeSystem::NativeCode] == TypeSystem::CppOwnership) { + s << INDENT << "if (Shiboken::Object::checkType(" PYTHON_RETURN_VAR "))" << endl; + Indentation indent(INDENT); + s << INDENT << "Shiboken::Object::releaseOwnership(" PYTHON_RETURN_VAR ");" << endl; + } + } + } + + if (func->hasInjectedCode()) { + s << endl; + const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().constLast(); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionEnd, TypeSystem::NativeCode, func, lastArg); + } + + if (retType) { + s << INDENT << "return "; + if (avoidProtectedHack() && retType->isEnum()) { + const AbstractMetaEnum* metaEnum = findAbstractMetaEnum(retType); + bool isProtectedEnum = metaEnum && metaEnum->isProtected(); + if (isProtectedEnum) { + QString typeCast; + if (metaEnum->enclosingClass()) + typeCast += QLatin1String("::") + metaEnum->enclosingClass()->qualifiedCppName(); + typeCast += QLatin1String("::") + metaEnum->name(); + s << '(' << typeCast << ')'; + } + } + if (func->type()->referenceType() == LValueReference && !isPointer(func->type())) + s << '*'; + s << CPP_RETURN_VAR ";" << endl; + } + + s << '}' << endl << endl; +} + +void CppGenerator::writeMetaObjectMethod(QTextStream& s, const AbstractMetaClass* metaClass) +{ + Indentation indentation(INDENT); + QString wrapperClassName = wrapperName(metaClass); + s << "const QMetaObject* " << wrapperClassName << "::metaObject() const" << endl; + s << '{' << endl; + s << INDENT << "if (QObject::d_ptr->metaObject)" << endl + << INDENT << INDENT << "return QObject::d_ptr->dynamicMetaObject();" << endl; + s << INDENT << "SbkObject* pySelf = Shiboken::BindingManager::instance().retrieveWrapper(this);" << endl; + s << INDENT << "if (pySelf == NULL)" << endl; + s << INDENT << INDENT << "return " << metaClass->qualifiedCppName() << "::metaObject();" << endl; + s << INDENT << "return PySide::SignalManager::retriveMetaObject(reinterpret_cast(pySelf));" << endl; + s << '}' << endl << endl; + + // qt_metacall function + s << "int " << wrapperClassName << "::qt_metacall(QMetaObject::Call call, int id, void** args)" << endl; + s << "{" << endl; + + AbstractMetaFunction *func = NULL; + AbstractMetaFunctionList list = metaClass->queryFunctionsByName(QLatin1String("qt_metacall")); + if (list.size() == 1) + func = list[0]; + + CodeSnipList snips; + if (func) { + snips = func->injectedCodeSnips(); + if (func->isUserAdded()) { + CodeSnipList snips = func->injectedCodeSnips(); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionAny, TypeSystem::NativeCode, func); + } + } + + s << INDENT << "int result = " << metaClass->qualifiedCppName() << "::qt_metacall(call, id, args);" << endl; + s << INDENT << "return result < 0 ? result : PySide::SignalManager::qt_metacall(this, call, id, args);" << endl; + s << "}" << endl << endl; + + // qt_metacast function + writeMetaCast(s, metaClass); +} + +void CppGenerator::writeMetaCast(QTextStream& s, const AbstractMetaClass* metaClass) +{ + Indentation indentation(INDENT); + QString wrapperClassName = wrapperName(metaClass); + s << "void* " << wrapperClassName << "::qt_metacast(const char* _clname)" << endl; + s << '{' << endl; + s << INDENT << "if (!_clname) return 0;" << endl; + s << INDENT << "SbkObject* pySelf = Shiboken::BindingManager::instance().retrieveWrapper(this);" << endl; + s << INDENT << "if (pySelf && PySide::inherits(Py_TYPE(pySelf), _clname))" << endl; + s << INDENT << INDENT << "return static_cast(const_cast< " << wrapperClassName << "* >(this));" << endl; + s << INDENT << "return " << metaClass->qualifiedCppName() << "::qt_metacast(_clname);" << endl; + s << "}" << endl << endl; +} + +void CppGenerator::writeEnumConverterFunctions(QTextStream& s, const AbstractMetaEnum* metaEnum) +{ + if (metaEnum->isPrivate() || metaEnum->isAnonymous()) + return; + writeEnumConverterFunctions(s, metaEnum->typeEntry()); +} + +void CppGenerator::writeEnumConverterFunctions(QTextStream& s, const TypeEntry* enumType) +{ + if (!enumType) + return; + QString typeName = fixedCppTypeName(enumType); + QString enumPythonType = cpythonTypeNameExt(enumType); + QString cppTypeName = getFullTypeName(enumType).trimmed(); + if (avoidProtectedHack()) { + const AbstractMetaEnum* metaEnum = findAbstractMetaEnum(enumType); + if (metaEnum && metaEnum->isProtected()) + cppTypeName = protectedEnumSurrogateName(metaEnum); + } + QString code; + QTextStream c(&code); + c << INDENT << "*((" << cppTypeName << "*)cppOut) = "; + if (enumType->isFlags()) + c << cppTypeName << "(QFlag((int)PySide::QFlags::getValue(reinterpret_cast(pyIn))))"; + else + c << "(" << cppTypeName << ") Shiboken::Enum::getValue(pyIn)"; + c << ';' << endl; + writePythonToCppFunction(s, code, typeName, typeName); + + QString pyTypeCheck = QStringLiteral("PyObject_TypeCheck(pyIn, %1)").arg(enumPythonType); + writeIsPythonConvertibleToCppFunction(s, typeName, typeName, pyTypeCheck); + + code.clear(); + + c << INDENT << "const int castCppIn = int(*reinterpret_cast(cppIn));" << endl; + c << INDENT; + c << "return "; + if (enumType->isFlags()) + c << "reinterpret_cast(PySide::QFlags::newObject(castCppIn, " << enumPythonType << "))"; + + else + c << "Shiboken::Enum::newItem(" << enumPythonType << ", castCppIn)"; + c << ';' << endl; + writeCppToPythonFunction(s, code, typeName, typeName); + s << endl; + + if (enumType->isFlags()) + return; + + const FlagsTypeEntry* flags = reinterpret_cast(enumType)->flags(); + if (!flags) + return; + + // QFlags part. + + writeEnumConverterFunctions(s, flags); + + code.clear(); + cppTypeName = getFullTypeName(flags).trimmed(); + c << INDENT << "*((" << cppTypeName << "*)cppOut) = " << cppTypeName; + c << "(QFlag((int)Shiboken::Enum::getValue(pyIn)));" << endl; + + QString flagsTypeName = fixedCppTypeName(flags); + writePythonToCppFunction(s, code, typeName, flagsTypeName); + writeIsPythonConvertibleToCppFunction(s, typeName, flagsTypeName, pyTypeCheck); + + code.clear(); + c << INDENT << "Shiboken::AutoDecRef pyLong(PyNumber_Long(pyIn));" << endl; + c << INDENT << "*((" << cppTypeName << "*)cppOut) = " << cppTypeName; + c << "(QFlag((int)PyLong_AsLong(pyLong.object())));" << endl; + writePythonToCppFunction(s, code, QLatin1String("number"), flagsTypeName); + writeIsPythonConvertibleToCppFunction(s, QLatin1String("number"), flagsTypeName, + QLatin1String("PyNumber_Check(pyIn)")); +} + +void CppGenerator::writeConverterFunctions(QTextStream &s, const AbstractMetaClass *metaClass, + GeneratorContext &classContext) +{ + s << "// Type conversion functions." << endl << endl; + + AbstractMetaEnumList classEnums = metaClass->enums(); + const AbstractMetaClassList &innerClasses = metaClass->innerClasses(); + for (AbstractMetaClass *innerClass : innerClasses) + lookForEnumsInClassesNotToBeGenerated(classEnums, innerClass); + if (!classEnums.isEmpty()) + s << "// Python to C++ enum conversion." << endl; + for (const AbstractMetaEnum *metaEnum : qAsConst(classEnums)) + writeEnumConverterFunctions(s, metaEnum); + + if (metaClass->isNamespace()) + return; + + QString typeName; + if (!classContext.forSmartPointer()) + typeName = getFullTypeName(metaClass); + else + typeName = getFullTypeName(classContext.preciseType()); + + QString cpythonType = cpythonTypeName(metaClass); + + // Returns the C++ pointer of the Python wrapper. + s << "// Python to C++ pointer conversion - returns the C++ object of the Python wrapper (keeps object identity)." << endl; + + QString sourceTypeName = metaClass->name(); + QString targetTypeName = metaClass->name() + QLatin1String("_PTR"); + QString code; + QTextStream c(&code); + c << INDENT << "Shiboken::Conversions::pythonToCppPointer(" << cpythonType << ", pyIn, cppOut);"; + writePythonToCppFunction(s, code, sourceTypeName, targetTypeName); + + // "Is convertible" function for the Python object to C++ pointer conversion. + QString pyTypeCheck = QStringLiteral("PyObject_TypeCheck(pyIn, (PyTypeObject*)%1)").arg(cpythonType); + writeIsPythonConvertibleToCppFunction(s, sourceTypeName, targetTypeName, pyTypeCheck, QString(), true); + s << endl; + + // C++ pointer to a Python wrapper, keeping identity. + s << "// C++ to Python pointer conversion - tries to find the Python wrapper for the C++ object (keeps object identity)." << endl; + code.clear(); + if (usePySideExtensions() && metaClass->isQObject()) + { + c << INDENT << "return PySide::getWrapperForQObject((" << typeName << "*)cppIn, " << cpythonType << ");" << endl; + } else { + c << INDENT << "PyObject* pyOut = (PyObject*)Shiboken::BindingManager::instance().retrieveWrapper(cppIn);" << endl; + c << INDENT << "if (pyOut) {" << endl; + { + Indentation indent(INDENT); + c << INDENT << "Py_INCREF(pyOut);" << endl; + c << INDENT << "return pyOut;" << endl; + } + c << INDENT << '}' << endl; + c << INDENT << "const char* typeName = typeid(*((" << typeName << "*)cppIn)).name();" << endl; + c << INDENT << "return Shiboken::Object::newObject(" << cpythonType; + c << ", const_cast(cppIn), false, false, typeName);"; + } + std::swap(targetTypeName, sourceTypeName); + writeCppToPythonFunction(s, code, sourceTypeName, targetTypeName); + + // The conversions for an Object Type end here. + if (!metaClass->typeEntry()->isValue() && !metaClass->typeEntry()->isSmartPointer()) { + s << endl; + return; + } + + // Always copies C++ value (not pointer, and not reference) to a new Python wrapper. + s << endl << "// C++ to Python copy conversion." << endl; + if (!classContext.forSmartPointer()) + targetTypeName = metaClass->name(); + else + targetTypeName = classContext.preciseType()->name(); + + sourceTypeName = targetTypeName + QLatin1String("_COPY"); + + code.clear(); + + QString computedWrapperName; + if (!classContext.forSmartPointer()) + computedWrapperName = wrapperName(metaClass); + else + computedWrapperName = wrapperName(classContext.preciseType()); + + c << INDENT << "return Shiboken::Object::newObject(" << cpythonType << ", new ::" << computedWrapperName; + c << "(*((" << typeName << "*)cppIn)), true, true);"; + writeCppToPythonFunction(s, code, sourceTypeName, targetTypeName); + s << endl; + + // Python to C++ copy conversion. + s << "// Python to C++ copy conversion." << endl; + if (!classContext.forSmartPointer()) + sourceTypeName = metaClass->name(); + else + sourceTypeName = classContext.preciseType()->name(); + + targetTypeName = QStringLiteral("%1_COPY").arg(sourceTypeName); + code.clear(); + + QString pyInVariable = QLatin1String("pyIn"); + QString wrappedCPtrExpression; + if (!classContext.forSmartPointer()) + wrappedCPtrExpression = cpythonWrapperCPtr(metaClass->typeEntry(), pyInVariable); + else + wrappedCPtrExpression = cpythonWrapperCPtr(classContext.preciseType(), pyInVariable); + + c << INDENT << "*((" << typeName << "*)cppOut) = *" + << wrappedCPtrExpression << ';'; + writePythonToCppFunction(s, code, sourceTypeName, targetTypeName); + + // "Is convertible" function for the Python object to C++ value copy conversion. + writeIsPythonConvertibleToCppFunction(s, sourceTypeName, targetTypeName, pyTypeCheck); + s << endl; + + // User provided implicit conversions. + CustomConversion* customConversion = metaClass->typeEntry()->customConversion(); + + // Implicit conversions. + AbstractMetaFunctionList implicitConvs; + if (!customConversion || !customConversion->replaceOriginalTargetToNativeConversions()) { + const AbstractMetaFunctionList &allImplicitConvs = implicitConversions(metaClass->typeEntry()); + for (AbstractMetaFunction *func : allImplicitConvs) { + if (!func->isUserAdded()) + implicitConvs << func; + } + } + + if (!implicitConvs.isEmpty()) + s << "// Implicit conversions." << endl; + + AbstractMetaType* targetType = buildAbstractMetaTypeFromAbstractMetaClass(metaClass); + for (const AbstractMetaFunction* conv : qAsConst(implicitConvs)) { + if (conv->isModifiedRemoved()) + continue; + + QString typeCheck; + QString toCppConv; + QString toCppPreConv; + if (conv->isConversionOperator()) { + const AbstractMetaClass* sourceClass = conv->ownerClass(); + typeCheck = QStringLiteral("PyObject_TypeCheck(pyIn, %1)").arg(cpythonTypeNameExt(sourceClass->typeEntry())); + toCppConv = QLatin1Char('*') + cpythonWrapperCPtr(sourceClass->typeEntry(), QLatin1String("pyIn")); + } else { + // Constructor that does implicit conversion. + if (!conv->typeReplaced(1).isEmpty()) + continue; + const AbstractMetaType* sourceType = conv->arguments().constFirst()->type(); + typeCheck = cpythonCheckFunction(sourceType); + bool isUserPrimitiveWithoutTargetLangName = isUserPrimitive(sourceType) + && sourceType->typeEntry()->targetLangApiName() == sourceType->typeEntry()->name(); + if (!isWrapperType(sourceType) + && !isUserPrimitiveWithoutTargetLangName + && !sourceType->typeEntry()->isEnum() + && !sourceType->typeEntry()->isFlags() + && !sourceType->typeEntry()->isContainer()) { + typeCheck += QLatin1Char('('); + } + if (isWrapperType(sourceType)) { + typeCheck += QLatin1String("pyIn)"); + toCppConv = (sourceType->referenceType() == LValueReference || !isPointerToWrapperType(sourceType)) + ? QLatin1String("*") : QString(); + toCppConv += cpythonWrapperCPtr(sourceType->typeEntry(), QLatin1String("pyIn")); + } else if (typeCheck.contains(QLatin1String("%in"))) { + typeCheck.replace(QLatin1String("%in"), QLatin1String("pyIn")); + typeCheck.append(QLatin1Char(')')); + } else { + typeCheck += QLatin1String("pyIn)"); + } + + if (isUserPrimitive(sourceType) + || isCppPrimitive(sourceType) + || sourceType->typeEntry()->isContainer() + || sourceType->typeEntry()->isEnum() + || sourceType->typeEntry()->isFlags()) { + QTextStream pc(&toCppPreConv); + pc << INDENT << getFullTypeNameWithoutModifiers(sourceType) << " cppIn"; + writeMinimalConstructorExpression(pc, sourceType); + pc << ';' << endl; + writeToCppConversion(pc, sourceType, 0, QLatin1String("pyIn"), QLatin1String("cppIn")); + pc << ';'; + toCppConv.append(QLatin1String("cppIn")); + } else if (!isWrapperType(sourceType)) { + QTextStream tcc(&toCppConv); + writeToCppConversion(tcc, sourceType, metaClass, QLatin1String("pyIn"), QLatin1String("/*BOZO-1061*/")); + } + + + } + const AbstractMetaType* sourceType = conv->isConversionOperator() + ? buildAbstractMetaTypeFromAbstractMetaClass(conv->ownerClass()) + : conv->arguments().constFirst()->type(); + writePythonToCppConversionFunctions(s, sourceType, targetType, typeCheck, toCppConv, toCppPreConv); + } + + writeCustomConverterFunctions(s, customConversion); +} + +void CppGenerator::writeCustomConverterFunctions(QTextStream& s, const CustomConversion* customConversion) +{ + if (!customConversion) + return; + const CustomConversion::TargetToNativeConversions& toCppConversions = customConversion->targetToNativeConversions(); + if (toCppConversions.isEmpty()) + return; + s << "// Python to C++ conversions for type '" << customConversion->ownerType()->qualifiedCppName() << "'." << endl; + for (CustomConversion::TargetToNativeConversion *toNative : toCppConversions) + writePythonToCppConversionFunctions(s, toNative, customConversion->ownerType()); + s << endl; +} + +void CppGenerator::writeConverterRegister(QTextStream &s, const AbstractMetaClass *metaClass, + GeneratorContext &classContext) +{ + if (metaClass->isNamespace()) + return; + s << INDENT << "// Register Converter" << endl; + s << INDENT << "SbkConverter* converter = Shiboken::Conversions::createConverter("; + s << cpythonTypeName(metaClass) << ',' << endl; + { + Indentation indent(INDENT); + QString sourceTypeName = metaClass->name(); + QString targetTypeName = sourceTypeName + QLatin1String("_PTR"); + s << INDENT << pythonToCppFunctionName(sourceTypeName, targetTypeName) << ',' << endl; + s << INDENT << convertibleToCppFunctionName(sourceTypeName, targetTypeName) << ',' << endl; + std::swap(targetTypeName, sourceTypeName); + s << INDENT << cppToPythonFunctionName(sourceTypeName, targetTypeName); + if (metaClass->typeEntry()->isValue() || metaClass->typeEntry()->isSmartPointer()) { + s << ',' << endl; + sourceTypeName = metaClass->name() + QLatin1String("_COPY"); + s << INDENT << cppToPythonFunctionName(sourceTypeName, targetTypeName); + } + } + s << ");" << endl; + + s << endl; + + QStringList cppSignature; + if (!classContext.forSmartPointer()) { + cppSignature = metaClass->qualifiedCppName().split(QLatin1String("::"), + QString::SkipEmptyParts); + } else { + cppSignature = classContext.preciseType()->cppSignature().split(QLatin1String("::"), + QString::SkipEmptyParts); + } + while (!cppSignature.isEmpty()) { + QString signature = cppSignature.join(QLatin1String("::")); + s << INDENT << "Shiboken::Conversions::registerConverterName(converter, \"" << signature << "\");" << endl; + s << INDENT << "Shiboken::Conversions::registerConverterName(converter, \"" << signature << "*\");" << endl; + s << INDENT << "Shiboken::Conversions::registerConverterName(converter, \"" << signature << "&\");" << endl; + cppSignature.removeFirst(); + } + + s << INDENT << "Shiboken::Conversions::registerConverterName(converter, typeid(::"; + QString qualifiedCppNameInvocation; + if (!classContext.forSmartPointer()) + qualifiedCppNameInvocation = metaClass->qualifiedCppName(); + else + qualifiedCppNameInvocation = classContext.preciseType()->cppSignature(); + + s << qualifiedCppNameInvocation << ").name());" << endl; + + if (shouldGenerateCppWrapper(metaClass)) { + s << INDENT << "Shiboken::Conversions::registerConverterName(converter, typeid(::"; + s << wrapperName(metaClass) << ").name());" << endl; + } + + s << endl; + + if (!metaClass->typeEntry()->isValue() && !metaClass->typeEntry()->isSmartPointer()) + return; + + // Python to C++ copy (value, not pointer neither reference) conversion. + s << INDENT << "// Add Python to C++ copy (value, not pointer neither reference) conversion to type converter." << endl; + QString sourceTypeName = metaClass->name(); + QString targetTypeName = sourceTypeName + QLatin1String("_COPY"); + QString toCpp = pythonToCppFunctionName(sourceTypeName, targetTypeName); + QString isConv = convertibleToCppFunctionName(sourceTypeName, targetTypeName); + writeAddPythonToCppConversion(s, QLatin1String("converter"), toCpp, isConv); + + // User provided implicit conversions. + CustomConversion* customConversion = metaClass->typeEntry()->customConversion(); + + // Add implicit conversions. + AbstractMetaFunctionList implicitConvs; + if (!customConversion || !customConversion->replaceOriginalTargetToNativeConversions()) { + const AbstractMetaFunctionList &allImplicitConvs = implicitConversions(metaClass->typeEntry()); + for (AbstractMetaFunction *func : allImplicitConvs) { + if (!func->isUserAdded()) + implicitConvs << func; + } + } + + if (!implicitConvs.isEmpty()) + s << INDENT << "// Add implicit conversions to type converter." << endl; + + AbstractMetaType* targetType = buildAbstractMetaTypeFromAbstractMetaClass(metaClass); + for (const AbstractMetaFunction *conv : qAsConst(implicitConvs)) { + if (conv->isModifiedRemoved()) + continue; + const AbstractMetaType* sourceType; + if (conv->isConversionOperator()) { + sourceType = buildAbstractMetaTypeFromAbstractMetaClass(conv->ownerClass()); + } else { + // Constructor that does implicit conversion. + if (!conv->typeReplaced(1).isEmpty()) + continue; + sourceType = conv->arguments().constFirst()->type(); + } + QString toCpp = pythonToCppFunctionName(sourceType, targetType); + QString isConv = convertibleToCppFunctionName(sourceType, targetType); + writeAddPythonToCppConversion(s, QLatin1String("converter"), toCpp, isConv); + } + + writeCustomConverterRegister(s, customConversion, QLatin1String("converter")); +} + +void CppGenerator::writeCustomConverterRegister(QTextStream& s, const CustomConversion* customConversion, const QString& converterVar) +{ + if (!customConversion) + return; + const CustomConversion::TargetToNativeConversions& toCppConversions = customConversion->targetToNativeConversions(); + if (toCppConversions.isEmpty()) + return; + s << INDENT << "// Add user defined implicit conversions to type converter." << endl; + for (CustomConversion::TargetToNativeConversion *toNative : toCppConversions) { + QString toCpp = pythonToCppFunctionName(toNative, customConversion->ownerType()); + QString isConv = convertibleToCppFunctionName(toNative, customConversion->ownerType()); + writeAddPythonToCppConversion(s, converterVar, toCpp, isConv); + } +} + +void CppGenerator::writeContainerConverterFunctions(QTextStream& s, const AbstractMetaType* containerType) +{ + writeCppToPythonFunction(s, containerType); + writePythonToCppConversionFunctions(s, containerType); +} + +void CppGenerator::writeMethodWrapperPreamble(QTextStream &s, OverloadData &overloadData, + GeneratorContext &context) +{ + const AbstractMetaFunction* rfunc = overloadData.referenceFunction(); + const AbstractMetaClass* ownerClass = rfunc->ownerClass(); + int minArgs = overloadData.minArgs(); + int maxArgs = overloadData.maxArgs(); + bool initPythonArguments; + bool usesNamedArguments; + + // If method is a constructor... + if (rfunc->isConstructor()) { + // Check if the right constructor was called. + if (!ownerClass->hasPrivateDestructor()) { + s << INDENT; + s << "if (Shiboken::Object::isUserType(" PYTHON_SELF_VAR ") && !Shiboken::ObjectType::canCallConstructor(" PYTHON_SELF_VAR "->ob_type, Shiboken::SbkType< ::"; + QString qualifiedCppName; + if (!context.forSmartPointer()) + qualifiedCppName = ownerClass->qualifiedCppName(); + else + qualifiedCppName = context.preciseType()->cppSignature(); + + s << qualifiedCppName << " >()))" << endl; + Indentation indent(INDENT); + s << INDENT << "return " << m_currentErrorCode << ';' << endl << endl; + } + // Declare pointer for the underlying C++ object. + s << INDENT << "::"; + if (!context.forSmartPointer()) { + s << (shouldGenerateCppWrapper(ownerClass) ? wrapperName(ownerClass) + : ownerClass->qualifiedCppName()); + } else { + s << context.preciseType()->cppSignature(); + } + s << "* cptr = 0;" << endl; + + initPythonArguments = maxArgs > 0; + usesNamedArguments = !ownerClass->isQObject() && overloadData.hasArgumentWithDefaultValue(); + + } else { + if (rfunc->implementingClass() && + (!rfunc->implementingClass()->isNamespace() && overloadData.hasInstanceFunction())) { + writeCppSelfDefinition(s, rfunc, context, overloadData.hasStaticFunction()); + } + if (!rfunc->isInplaceOperator() && overloadData.hasNonVoidReturnType()) + s << INDENT << "PyObject* " PYTHON_RETURN_VAR " = 0;" << endl; + + initPythonArguments = minArgs != maxArgs || maxArgs > 1; + usesNamedArguments = rfunc->isCallOperator() || overloadData.hasArgumentWithDefaultValue(); + } + + if (maxArgs > 0) { + s << INDENT << "int overloadId = -1;" << endl; + s << INDENT << "PythonToCppFunc " PYTHON_TO_CPP_VAR; + if (pythonFunctionWrapperUsesListOfArguments(overloadData)) + s << "[] = { 0" << QString::fromLatin1(", 0").repeated(maxArgs-1) << " }"; + s << ';' << endl; + writeUnusedVariableCast(s, QLatin1String(PYTHON_TO_CPP_VAR)); + } + + if (usesNamedArguments && !rfunc->isCallOperator()) + s << INDENT << "int numNamedArgs = (kwds ? PyDict_Size(kwds) : 0);" << endl; + + if (initPythonArguments) { + s << INDENT << "int numArgs = "; + if (minArgs == 0 && maxArgs == 1 && !rfunc->isConstructor() && !pythonFunctionWrapperUsesListOfArguments(overloadData)) + s << "(" PYTHON_ARG " == 0 ? 0 : 1);" << endl; + else + writeArgumentsInitializer(s, overloadData); + } +} + +void CppGenerator::writeConstructorWrapper(QTextStream &s, const AbstractMetaFunctionList overloads, + GeneratorContext &classContext) +{ + ErrorCode errorCode(-1); + OverloadData overloadData(overloads, this); + + const AbstractMetaFunction* rfunc = overloadData.referenceFunction(); + const AbstractMetaClass* metaClass = rfunc->ownerClass(); + + s << "static int" << endl; + s << cpythonFunctionName(rfunc) << "(PyObject* " PYTHON_SELF_VAR ", PyObject* args, PyObject* kwds)" << endl; + s << '{' << endl; + + QSet argNamesSet; + if (usePySideExtensions() && metaClass->isQObject()) { + // Write argNames variable with all known argument names. + const OverloadData::MetaFunctionList &overloads = overloadData.overloads(); + for (const AbstractMetaFunction *func : overloads) { + const AbstractMetaArgumentList &arguments = func->arguments(); + for (const AbstractMetaArgument *arg : arguments) { + if (arg->defaultValueExpression().isEmpty() || func->argumentRemoved(arg->argumentIndex() + 1)) + continue; + argNamesSet << arg->name(); + } + } + QStringList argNamesList = argNamesSet.toList(); + qSort(argNamesList.begin(), argNamesList.end()); + if (argNamesList.isEmpty()) { + s << INDENT << "const char** argNames = 0;" << endl; + } else { + s << INDENT << "const char* argNames[] = {\"" + << argNamesList.join(QLatin1String("\", \"")) << "\"};" << endl; + } + s << INDENT << "const QMetaObject* metaObject;" << endl; + } + + s << INDENT << "SbkObject* sbkSelf = reinterpret_cast(" PYTHON_SELF_VAR ");" << endl; + + if (metaClass->isAbstract() || metaClass->baseClassNames().size() > 1) { + s << INDENT << "SbkObjectType* type = reinterpret_cast(" PYTHON_SELF_VAR "->ob_type);" << endl; + s << INDENT << "SbkObjectType* myType = reinterpret_cast(" << cpythonTypeNameExt(metaClass->typeEntry()) << ");" << endl; + } + + if (metaClass->isAbstract()) { + s << INDENT << "if (type == myType) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyErr_SetString(PyExc_NotImplementedError," << endl; + { + Indentation indentation(INDENT); + s << INDENT << "\"'" << metaClass->qualifiedCppName(); + } + s << "' represents a C++ abstract class and cannot be instantiated\");" << endl; + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + s << INDENT << '}' << endl << endl; + } + + if (metaClass->baseClassNames().size() > 1) { + if (!metaClass->isAbstract()) { + s << INDENT << "if (type != myType) {" << endl; + } + { + Indentation indentation(INDENT); + s << INDENT << "Shiboken::ObjectType::copyMultimpleheritance(type, myType);" << endl; + } + if (!metaClass->isAbstract()) + s << INDENT << '}' << endl << endl; + } + + writeMethodWrapperPreamble(s, overloadData, classContext); + + s << endl; + + if (overloadData.maxArgs() > 0) + writeOverloadedFunctionDecisor(s, overloadData); + + writeFunctionCalls(s, overloadData, classContext); + s << endl; + + s << INDENT << "if (PyErr_Occurred() || !Shiboken::Object::setCppPointer(sbkSelf, Shiboken::SbkType< ::" << metaClass->qualifiedCppName() << " >(), cptr)) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "delete cptr;" << endl; + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + s << INDENT << '}' << endl; + if (overloadData.maxArgs() > 0) { + s << INDENT << "if (!cptr) goto " << cpythonFunctionName(rfunc) << "_TypeError;" << endl; + s << endl; + } + + s << INDENT << "Shiboken::Object::setValidCpp(sbkSelf, true);" << endl; + // If the created C++ object has a C++ wrapper the ownership is assigned to Python + // (first "1") and the flag indicating that the Python wrapper holds an C++ wrapper + // is marked as true (the second "1"). Otherwise the default values apply: + // Python owns it and C++ wrapper is false. + if (shouldGenerateCppWrapper(overloads.constFirst()->ownerClass())) + s << INDENT << "Shiboken::Object::setHasCppWrapper(sbkSelf, true);" << endl; + // Need to check if a wrapper for same pointer is already registered + // Caused by bug PYSIDE-217, where deleted objects' wrappers are not released + s << INDENT << "if (Shiboken::BindingManager::instance().hasWrapper(cptr)) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "Shiboken::BindingManager::instance().releaseWrapper(Shiboken::BindingManager::instance().retrieveWrapper(cptr));" << endl; + } + s << INDENT << "}" << endl; + s << INDENT << "Shiboken::BindingManager::instance().registerWrapper(sbkSelf, cptr);" << endl; + + // Create metaObject and register signal/slot + if (metaClass->isQObject() && usePySideExtensions()) { + s << endl << INDENT << "// QObject setup" << endl; + s << INDENT << "PySide::Signal::updateSourceObject(" PYTHON_SELF_VAR ");" << endl; + s << INDENT << "metaObject = cptr->metaObject(); // <- init python qt properties" << endl; + s << INDENT << "if (kwds && !PySide::fillQtProperties(" PYTHON_SELF_VAR ", metaObject, kwds, argNames, " << argNamesSet.count() << "))" << endl; + { + Indentation indentation(INDENT); + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + } + + // Constructor code injections, position=end + bool hasCodeInjectionsAtEnd = false; + for (AbstractMetaFunction *func : overloads) { + const CodeSnipList &injectedCodeSnips = func->injectedCodeSnips(); + for (const CodeSnip &cs : injectedCodeSnips) { + if (cs.position == TypeSystem::CodeSnipPositionEnd) { + hasCodeInjectionsAtEnd = true; + break; + } + } + } + if (hasCodeInjectionsAtEnd) { + // FIXME: C++ arguments are not available in code injection on constructor when position = end. + s << INDENT << "switch(overloadId) {" << endl; + for (AbstractMetaFunction *func : overloads) { + Indentation indent(INDENT); + const CodeSnipList &injectedCodeSnips = func->injectedCodeSnips(); + for (const CodeSnip &cs : injectedCodeSnips) { + if (cs.position == TypeSystem::CodeSnipPositionEnd) { + s << INDENT << "case " << metaClass->functions().indexOf(func) << ':' << endl; + s << INDENT << '{' << endl; + { + Indentation indent(INDENT); + writeCodeSnips(s, func->injectedCodeSnips(), TypeSystem::CodeSnipPositionEnd, TypeSystem::TargetLangCode, func); + } + s << INDENT << '}' << endl; + break; + } + } + } + s << '}' << endl; + } + + s << endl; + s << endl << INDENT << "return 1;" << endl; + if (overloadData.maxArgs() > 0) + writeErrorSection(s, overloadData); + s << '}' << endl << endl; +} + +void CppGenerator::writeMethodWrapper(QTextStream &s, const AbstractMetaFunctionList overloads, + GeneratorContext &classContext) +{ + OverloadData overloadData(overloads, this); + const AbstractMetaFunction* rfunc = overloadData.referenceFunction(); + + int maxArgs = overloadData.maxArgs(); + + s << "static PyObject* "; + s << cpythonFunctionName(rfunc) << "(PyObject* " PYTHON_SELF_VAR; + if (maxArgs > 0) { + s << ", PyObject* " << (pythonFunctionWrapperUsesListOfArguments(overloadData) ? "args" : PYTHON_ARG); + if (overloadData.hasArgumentWithDefaultValue() || rfunc->isCallOperator()) + s << ", PyObject* kwds"; + } + s << ')' << endl << '{' << endl; + + writeMethodWrapperPreamble(s, overloadData, classContext); + + s << endl; + + /* + * Make sure reverse <> operators defined in other classes (specially from other modules) + * are called. A proper and generic solution would require an reengineering in the operator + * system like the extended converters. + * + * Solves #119 - QDataStream <> operators not working for QPixmap + * http://bugs.openbossa.org/show_bug.cgi?id=119 + */ + bool hasReturnValue = overloadData.hasNonVoidReturnType(); + bool callExtendedReverseOperator = hasReturnValue + && !rfunc->isInplaceOperator() + && !rfunc->isCallOperator() + && rfunc->isOperatorOverload(); + if (callExtendedReverseOperator) { + QString revOpName = ShibokenGenerator::pythonOperatorFunctionName(rfunc).insert(2, QLatin1Char('r')); + if (rfunc->isBinaryOperator()) { + s << INDENT << "if (!isReverse" << endl; + { + Indentation indent(INDENT); + s << INDENT << "&& Shiboken::Object::checkType(" PYTHON_ARG ")" << endl; + s << INDENT << "&& !PyObject_TypeCheck(" PYTHON_ARG ", " PYTHON_SELF_VAR "->ob_type)" << endl; + s << INDENT << "&& PyObject_HasAttrString(" PYTHON_ARG ", const_cast(\"" << revOpName << "\"))) {" << endl; + + // This PyObject_CallMethod call will emit lots of warnings like + // "deprecated conversion from string constant to char *" during compilation + // due to the method name argument being declared as "char*" instead of "const char*" + // issue 6952 http://bugs.python.org/issue6952 + s << INDENT << "PyObject* revOpMethod = PyObject_GetAttrString(" PYTHON_ARG ", const_cast(\"" << revOpName << "\"));" << endl; + s << INDENT << "if (revOpMethod && PyCallable_Check(revOpMethod)) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << PYTHON_RETURN_VAR " = PyObject_CallFunction(revOpMethod, const_cast(\"O\"), " PYTHON_SELF_VAR ");" << endl; + s << INDENT << "if (PyErr_Occurred() && (PyErr_ExceptionMatches(PyExc_NotImplementedError)"; + s << " || PyErr_ExceptionMatches(PyExc_AttributeError))) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyErr_Clear();" << endl; + s << INDENT << "Py_XDECREF(" PYTHON_RETURN_VAR ");" << endl; + s << INDENT << PYTHON_RETURN_VAR " = 0;" << endl; + } + s << INDENT << '}' << endl; + } + s << INDENT << "}" << endl; + s << INDENT << "Py_XDECREF(revOpMethod);" << endl << endl; + } + s << INDENT << "}" << endl; + } + s << INDENT << "// Do not enter here if other object has implemented a reverse operator." << endl; + s << INDENT << "if (!" PYTHON_RETURN_VAR ") {" << endl << endl; + } + + if (maxArgs > 0) + writeOverloadedFunctionDecisor(s, overloadData); + + writeFunctionCalls(s, overloadData, classContext); + + if (callExtendedReverseOperator) + s << endl << INDENT << "} // End of \"if (!" PYTHON_RETURN_VAR ")\"" << endl; + + s << endl; + + writeFunctionReturnErrorCheckSection(s, hasReturnValue && !rfunc->isInplaceOperator()); + + if (hasReturnValue) { + if (rfunc->isInplaceOperator()) { + s << INDENT << "Py_INCREF(" PYTHON_SELF_VAR ");\n"; + s << INDENT << "return " PYTHON_SELF_VAR ";\n"; + } else { + s << INDENT << "return " PYTHON_RETURN_VAR ";\n"; + } + } else { + s << INDENT << "Py_RETURN_NONE;" << endl; + } + + if (maxArgs > 0) + writeErrorSection(s, overloadData); + + s << '}' << endl << endl; +} + +void CppGenerator::writeArgumentsInitializer(QTextStream& s, OverloadData& overloadData) +{ + const AbstractMetaFunction* rfunc = overloadData.referenceFunction(); + s << "PyTuple_GET_SIZE(args);" << endl; + + int minArgs = overloadData.minArgs(); + int maxArgs = overloadData.maxArgs(); + + s << INDENT << "PyObject* "; + s << PYTHON_ARGS "[] = {" + << QString(maxArgs, QLatin1Char('0')).split(QLatin1String(""), QString::SkipEmptyParts).join(QLatin1String(", ")) + << "};" << endl; + s << endl; + + if (overloadData.hasVarargs()) { + maxArgs--; + if (minArgs > maxArgs) + minArgs = maxArgs; + + s << INDENT << "PyObject* nonvarargs = PyTuple_GetSlice(args, 0, " << maxArgs << ");" << endl; + s << INDENT << "Shiboken::AutoDecRef auto_nonvarargs(nonvarargs);" << endl; + s << INDENT << PYTHON_ARGS "[" << maxArgs << "] = PyTuple_GetSlice(args, " << maxArgs << ", numArgs);" << endl; + s << INDENT << "Shiboken::AutoDecRef auto_varargs(" PYTHON_ARGS "[" << maxArgs << "]);" << endl; + s << endl; + } + + bool usesNamedArguments = overloadData.hasArgumentWithDefaultValue(); + + s << INDENT << "// invalid argument lengths" << endl; + bool ownerClassIsQObject = rfunc->ownerClass() && rfunc->ownerClass()->isQObject() && rfunc->isConstructor(); + if (usesNamedArguments) { + if (!ownerClassIsQObject) { + s << INDENT << "if (numArgs" << (overloadData.hasArgumentWithDefaultValue() ? " + numNamedArgs" : "") << " > " << maxArgs << ") {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyErr_SetString(PyExc_TypeError, \"" << fullPythonFunctionName(rfunc) << "(): too many arguments\");" << endl; + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + s << INDENT << '}'; + } + if (minArgs > 0) { + if (ownerClassIsQObject) + s << INDENT; + else + s << " else "; + s << "if (numArgs < " << minArgs << ") {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyErr_SetString(PyExc_TypeError, \"" << fullPythonFunctionName(rfunc) << "(): not enough arguments\");" << endl; + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + s << INDENT << '}'; + } + } + const QVector invalidArgsLength = overloadData.invalidArgumentLengths(); + if (!invalidArgsLength.isEmpty()) { + QStringList invArgsLen; + for (int i : qAsConst(invalidArgsLength)) + invArgsLen << QStringLiteral("numArgs == %1").arg(i); + if (usesNamedArguments && (!ownerClassIsQObject || minArgs > 0)) + s << " else "; + else + s << INDENT; + s << "if (" << invArgsLen.join(QLatin1String(" || ")) << ")" << endl; + Indentation indent(INDENT); + s << INDENT << "goto " << cpythonFunctionName(rfunc) << "_TypeError;"; + } + s << endl << endl; + + QString funcName; + if (rfunc->isOperatorOverload()) + funcName = ShibokenGenerator::pythonOperatorFunctionName(rfunc); + else + funcName = rfunc->name(); + + QString argsVar = overloadData.hasVarargs() ? QLatin1String("nonvarargs") : QLatin1String("args"); + s << INDENT << "if (!"; + if (usesNamedArguments) + s << "PyArg_ParseTuple(" << argsVar << ", \"|" << QByteArray(maxArgs, 'O') << ':' << funcName << '"'; + else + s << "PyArg_UnpackTuple(" << argsVar << ", \"" << funcName << "\", " << minArgs << ", " << maxArgs; + QStringList palist; + for (int i = 0; i < maxArgs; i++) + palist << QString::fromLatin1("&(" PYTHON_ARGS "[%1])").arg(i); + s << ", " << palist.join(QLatin1String(", ")) << "))" << endl; + { + Indentation indent(INDENT); + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + s << endl; +} + +void CppGenerator::writeCppSelfDefinition(QTextStream &s, + GeneratorContext &context, + bool hasStaticOverload, + bool cppSelfAsReference) +{ + const AbstractMetaClass *metaClass = context.metaClass(); + bool useWrapperClass = avoidProtectedHack() && metaClass->hasProtectedMembers(); + QString className; + if (!context.forSmartPointer()) { + className = useWrapperClass + ? wrapperName(metaClass) + : (QLatin1String("::") + metaClass->qualifiedCppName()); + } else { + className = context.preciseType()->cppSignature(); + } + + QString cppSelfAttribution; + QString pythonSelfVar = QLatin1String(PYTHON_SELF_VAR); + QString cpythonWrapperCPtrResult; + if (!context.forSmartPointer()) + cpythonWrapperCPtrResult = cpythonWrapperCPtr(metaClass, pythonSelfVar); + else + cpythonWrapperCPtrResult = cpythonWrapperCPtr(context.preciseType(), pythonSelfVar); + + if (cppSelfAsReference) { + QString cast = useWrapperClass ? QString::fromLatin1("(%1*)").arg(className) : QString(); + cppSelfAttribution = QString::fromLatin1("%1& %2 = *(%3%4)") + .arg(className, QLatin1String(CPP_SELF_VAR), cast, + cpythonWrapperCPtrResult); + } else { + s << INDENT << className << "* " CPP_SELF_VAR " = 0;" << endl; + writeUnusedVariableCast(s, QLatin1String(CPP_SELF_VAR)); + cppSelfAttribution = QString::fromLatin1("%1 = %2%3") + .arg(QLatin1String(CPP_SELF_VAR), + (useWrapperClass ? QString::fromLatin1("(%1*)").arg(className) : QString()), + cpythonWrapperCPtrResult); + } + + // Checks if the underlying C++ object is valid. + if (hasStaticOverload && !cppSelfAsReference) { + s << INDENT << "if (" PYTHON_SELF_VAR ") {" << endl; + { + Indentation indent(INDENT); + writeInvalidPyObjectCheck(s, QLatin1String(PYTHON_SELF_VAR)); + s << INDENT << cppSelfAttribution << ';' << endl; + } + s << INDENT << '}' << endl; + return; + } + + writeInvalidPyObjectCheck(s, QLatin1String(PYTHON_SELF_VAR)); + s << INDENT << cppSelfAttribution << ';' << endl; +} + +void CppGenerator::writeCppSelfDefinition(QTextStream &s, + const AbstractMetaFunction *func, + GeneratorContext &context, + bool hasStaticOverload) +{ + if (!func->ownerClass() || func->isConstructor()) + return; + + if (func->isOperatorOverload() && func->isBinaryOperator()) { + QString checkFunc = cpythonCheckFunction(func->ownerClass()->typeEntry()); + s << INDENT << "bool isReverse = " << checkFunc << PYTHON_ARG ")" << endl; + { + Indentation indent1(INDENT); + Indentation indent2(INDENT); + Indentation indent3(INDENT); + Indentation indent4(INDENT); + s << INDENT << "&& !" << checkFunc << PYTHON_SELF_VAR ");" << endl; + } + s << INDENT << "if (isReverse)" << endl; + Indentation indent(INDENT); + s << INDENT << "std::swap(" PYTHON_SELF_VAR ", " PYTHON_ARG ");" << endl; + } + + writeCppSelfDefinition(s, context, hasStaticOverload); +} + +void CppGenerator::writeErrorSection(QTextStream& s, OverloadData& overloadData) +{ + const AbstractMetaFunction* rfunc = overloadData.referenceFunction(); + s << endl << INDENT << cpythonFunctionName(rfunc) << "_TypeError:" << endl; + Indentation indentation(INDENT); + QString funcName = fullPythonFunctionName(rfunc); + + QString argsVar = pythonFunctionWrapperUsesListOfArguments(overloadData) + ? QLatin1String("args") : QLatin1String(PYTHON_ARG); + if (verboseErrorMessagesDisabled()) { + s << INDENT << "Shiboken::setErrorAboutWrongArguments(" << argsVar << ", \"" << funcName << "\", 0);" << endl; + } else { + QStringList overloadSignatures; + const OverloadData::MetaFunctionList &overloads = overloadData.overloads(); + for (const AbstractMetaFunction *f : overloads) { + QStringList args; + const AbstractMetaArgumentList &arguments = f->arguments(); + for (AbstractMetaArgument *arg : arguments) { + QString strArg; + AbstractMetaType* argType = arg->type(); + if (isCString(argType)) { + strArg = QLatin1String("\" SBK_BYTES_NAME \""); + } else if (argType->isPrimitive()) { + const PrimitiveTypeEntry* ptp = reinterpret_cast(argType->typeEntry()); + while (ptp->referencedTypeEntry()) + ptp = ptp->referencedTypeEntry(); + strArg = ptp->name(); + if (strArg == QLatin1String("QString")) { + strArg = QLatin1String("unicode"); + } else if (strArg == QLatin1String("QChar")) { + strArg = QLatin1String("1-unicode"); + } else { + strArg = ptp->name(); + static const QRegularExpression regex(QStringLiteral("^signed\\s+")); + Q_ASSERT(regex.isValid()); + strArg.remove(regex); + if (strArg == QLatin1String("double")) + strArg = QLatin1String("float"); + } + } else if (argType->typeEntry()->isContainer()) { + strArg = argType->fullName(); + if (strArg == QLatin1String("QList") || strArg == QLatin1String("QVector") + || strArg == QLatin1String("QLinkedList") || strArg == QLatin1String("QStack") + || strArg == QLatin1String("QQueue")) { + strArg = QLatin1String("list"); + } else if (strArg == QLatin1String("QMap") || strArg == QLatin1String("QHash") + || strArg == QLatin1String("QMultiMap") || strArg == QLatin1String("QMultiHash")) { + strArg = QLatin1String("dict"); + } else if (strArg == QLatin1String("QPair")) { + strArg = QLatin1String("2-tuple"); + } + } else { + strArg = argType->fullName(); + if (strArg == QLatin1String("PyUnicode")) + strArg = QLatin1String("unicode"); + else if (strArg == QLatin1String("PyString")) + strArg = QLatin1String("str"); + else if (strArg == QLatin1String("PyBytes")) + strArg = QLatin1String("\" SBK_BYTES_NAME \""); + else if (strArg == QLatin1String("PyByteArray")) + strArg = QLatin1String("bytearray"); + else if (strArg == QLatin1String("PySequence")) + strArg = QLatin1String("list"); + else if (strArg == QLatin1String("PyTuple")) + strArg = QLatin1String("tuple"); + else if (strArg == QLatin1String("PyDict")) + strArg = QLatin1String("dict"); + else if (strArg == QLatin1String("PyObject")) + strArg = QLatin1String("object"); + else if (strArg == QLatin1String("PyCallable")) + strArg = QLatin1String("callable"); + else if (strArg == QLatin1String("uchar")) + strArg = QLatin1String("buffer"); // This depends on an inject code to be true, but if it's not true + // the function wont work at all, so it must be true. + } + if (!arg->defaultValueExpression().isEmpty()) { + strArg += QLatin1String(" = "); + if ((isCString(argType) || isPointerToWrapperType(argType)) + && arg->defaultValueExpression() == QLatin1String("0")) { + strArg += QLatin1String("None"); + } else { + QString e = arg->defaultValueExpression(); + e.replace(QLatin1String("::"), QLatin1String(".")); + e.replace(QLatin1String("\""), QLatin1String("\\\"")); + strArg += e; + } + } + args << strArg; + } + overloadSignatures << QLatin1Char('"') + args.join(QLatin1String(", ")) + QLatin1Char('"'); + } + s << INDENT << "const char* overloads[] = {" << overloadSignatures.join(QLatin1String(", ")) + << ", 0};" << endl; + s << INDENT << "Shiboken::setErrorAboutWrongArguments(" << argsVar << ", \"" << funcName << "\", overloads);" << endl; + } + s << INDENT << "return " << m_currentErrorCode << ';' << endl; +} + +void CppGenerator::writeFunctionReturnErrorCheckSection(QTextStream& s, bool hasReturnValue) +{ + s << INDENT << "if (PyErr_Occurred()" << (hasReturnValue ? " || !" PYTHON_RETURN_VAR : "") << ") {" << endl; + { + Indentation indent(INDENT); + if (hasReturnValue) + s << INDENT << "Py_XDECREF(" PYTHON_RETURN_VAR ");" << endl; + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + s << INDENT << '}' << endl; +} + +void CppGenerator::writeInvalidPyObjectCheck(QTextStream& s, const QString& pyObj) +{ + s << INDENT << "if (!Shiboken::Object::isValid(" << pyObj << "))" << endl; + Indentation indent(INDENT); + s << INDENT << "return " << m_currentErrorCode << ';' << endl; +} + +static QString pythonToCppConverterForArgumentName(const QString& argumentName) +{ + static const QRegularExpression pyArgsRegex(QLatin1String(PYTHON_ARGS"(\\[\\d+[-]?\\d*\\])")); + Q_ASSERT(pyArgsRegex.isValid()); + const QRegularExpressionMatch match = pyArgsRegex.match(argumentName); + QString result = QLatin1String(PYTHON_TO_CPP_VAR); + if (match.hasMatch()) + result += match.captured(1); + return result; +} + +void CppGenerator::writeTypeCheck(QTextStream& s, const AbstractMetaType* argType, QString argumentName, bool isNumber, QString customType, bool rejectNull) +{ + QString customCheck; + if (!customType.isEmpty()) { + AbstractMetaType* metaType; + customCheck = guessCPythonCheckFunction(customType, &metaType); + if (metaType) + argType = metaType; + } + + // TODO-CONVERTER: merge this with the code below. + QString typeCheck; + if (customCheck.isEmpty()) + typeCheck = cpythonIsConvertibleFunction(argType, argType->isEnum() ? false : isNumber); + else + typeCheck = customCheck; + typeCheck.append(QString::fromLatin1("(%1)").arg(argumentName)); + + // TODO-CONVERTER ----------------------------------------------------------------------- + if (customCheck.isEmpty() && !argType->typeEntry()->isCustom()) { + typeCheck = QString::fromLatin1("(%1 = %2))").arg(pythonToCppConverterForArgumentName(argumentName), typeCheck); + if (!isNumber && argType->typeEntry()->isCppPrimitive()) + typeCheck.prepend(QString::fromLatin1("%1(%2) && ").arg(cpythonCheckFunction(argType), argumentName)); + } + // TODO-CONVERTER ----------------------------------------------------------------------- + + if (rejectNull) + typeCheck = QString::fromLatin1("(%1 != Py_None && %2)").arg(argumentName, typeCheck); + + s << typeCheck; +} + +static void checkTypeViability(const AbstractMetaFunction* func, const AbstractMetaType* type, int argIdx) +{ + if (!type + || !type->typeEntry()->isPrimitive() + || type->indirections() == 0 + || (type->indirections() == 1 && type->typeUsagePattern() == AbstractMetaType::NativePointerAsArrayPattern) + || ShibokenGenerator::isCString(type) + || func->argumentRemoved(argIdx) + || !func->typeReplaced(argIdx).isEmpty() + || !func->conversionRule(TypeSystem::All, argIdx).isEmpty() + || func->hasInjectedCode()) + return; + QString message; + QTextStream str(&message); + str << "There's no user provided way (conversion rule, argument" + " removal, custom code, etc) to handle the primitive "; + if (argIdx == 0) + str << "return type '" << type->cppSignature() << '\''; + else + str << "type '" << type->cppSignature() << "' of argument " << argIdx; + str << " in function '"; + if (func->ownerClass()) + str << func->ownerClass()->qualifiedCppName() << "::"; + str << func->signature() << "'."; + qCWarning(lcShiboken).noquote().nospace() << message; +} + +static void checkTypeViability(const AbstractMetaFunction* func) +{ + if (func->isUserAdded()) + return; + const AbstractMetaType* type = func->type(); + checkTypeViability(func, type, 0); + for (int i = 0; i < func->arguments().count(); ++i) + checkTypeViability(func, func->arguments().at(i)->type(), i + 1); +} + +void CppGenerator::writeTypeCheck(QTextStream& s, const OverloadData* overloadData, QString argumentName) +{ + QSet numericTypes; + const OverloadDataList &overloads = overloadData->previousOverloadData()->nextOverloadData(); + for (OverloadData *od : overloads) { + const OverloadData::MetaFunctionList &odOverloads = od->overloads(); + for (const AbstractMetaFunction *func : odOverloads) { + checkTypeViability(func); + const AbstractMetaType* argType = od->argument(func)->type(); + if (!argType->isPrimitive()) + continue; + if (ShibokenGenerator::isNumber(argType->typeEntry())) + numericTypes << argType->typeEntry(); + } + } + + // This condition trusts that the OverloadData object will arrange for + // PyInt type to come after the more precise numeric types (e.g. float and bool) + const AbstractMetaType* argType = overloadData->argType(); + bool numberType = numericTypes.count() == 1 || ShibokenGenerator::isPyInt(argType); + QString customType = (overloadData->hasArgumentTypeReplace() ? overloadData->argumentTypeReplaced() : QString()); + bool rejectNull = shouldRejectNullPointerArgument(overloadData->referenceFunction(), overloadData->argPos()); + writeTypeCheck(s, argType, argumentName, numberType, customType, rejectNull); +} + +void CppGenerator::writeArgumentConversion(QTextStream& s, + const AbstractMetaType* argType, + const QString& argName, const QString& pyArgName, + const AbstractMetaClass* context, + const QString& defaultValue, + bool castArgumentAsUnused) +{ + if (argType->typeEntry()->isCustom() || argType->typeEntry()->isVarargs()) + return; + if (isWrapperType(argType)) + writeInvalidPyObjectCheck(s, pyArgName); + writePythonToCppTypeConversion(s, argType, pyArgName, argName, context, defaultValue); + if (castArgumentAsUnused) + writeUnusedVariableCast(s, argName); +} + +const AbstractMetaType* CppGenerator::getArgumentType(const AbstractMetaFunction* func, int argPos) +{ + if (argPos < 0 || argPos > func->arguments().size()) { + qCWarning(lcShiboken).noquote().nospace() + << QStringLiteral("Argument index for function '%1' out of range.").arg(func->signature()); + return 0; + } + + const AbstractMetaType* argType = 0; + QString typeReplaced = func->typeReplaced(argPos); + if (typeReplaced.isEmpty()) + argType = (argPos == 0) ? func->type() : func->arguments().at(argPos-1)->type(); + else + argType = buildAbstractMetaTypeFromString(typeReplaced); + if (!argType && !m_knownPythonTypes.contains(typeReplaced)) { + qCWarning(lcShiboken).noquote().nospace() + << QString::fromLatin1("Unknown type '%1' used as argument type replacement "\ + "in function '%2', the generated code may be broken.") + .arg(typeReplaced, func->signature()); + } + return argType; +} + +static inline QString arrayHandleType(const AbstractMetaTypeCList &nestedArrayTypes) +{ + switch (nestedArrayTypes.size()) { + case 1: + return QStringLiteral("Shiboken::Conversions::ArrayHandle<") + + nestedArrayTypes.constLast()->minimalSignature() + + QLatin1Char('>'); + case 2: + return QStringLiteral("Shiboken::Conversions::Array2Handle<") + + nestedArrayTypes.constLast()->minimalSignature() + + QStringLiteral(", ") + + QString::number(nestedArrayTypes.constFirst()->arrayElementCount()) + + QLatin1Char('>'); + } + return QString(); +} + +void CppGenerator::writePythonToCppTypeConversion(QTextStream& s, + const AbstractMetaType* type, + const QString& pyIn, + const QString& cppOut, + const AbstractMetaClass* /* context */, + const QString& defaultValue) +{ + const TypeEntry* typeEntry = type->typeEntry(); + if (typeEntry->isCustom() || typeEntry->isVarargs()) + return; + + QString cppOutAux = cppOut + QLatin1String("_local"); + + bool treatAsPointer = isValueTypeWithCopyConstructorOnly(type); + bool isPointerOrObjectType = (isObjectType(type) || isPointer(type)) && !isUserPrimitive(type) && !isCppPrimitive(type); + bool isNotContainerEnumOrFlags = !typeEntry->isContainer() && !typeEntry->isEnum() && !typeEntry->isFlags(); + bool mayHaveImplicitConversion = type->referenceType() == LValueReference + && !isUserPrimitive(type) + && !isCppPrimitive(type) + && isNotContainerEnumOrFlags + && !(treatAsPointer || isPointerOrObjectType); + + const AbstractMetaTypeCList nestedArrayTypes = type->nestedArrayTypes(); + const bool isCppPrimitiveArray = !nestedArrayTypes.isEmpty() + && nestedArrayTypes.constLast()->isCppPrimitive(); + QString typeName = isCppPrimitiveArray + ? arrayHandleType(nestedArrayTypes) + : getFullTypeNameWithoutModifiers(type); + + bool isProtectedEnum = false; + + if (mayHaveImplicitConversion) { + s << INDENT << typeName << ' ' << cppOutAux; + writeMinimalConstructorExpression(s, type, defaultValue); + s << ';' << endl; + } else if (avoidProtectedHack() && type->typeEntry()->isEnum()) { + const AbstractMetaEnum* metaEnum = findAbstractMetaEnum(type); + if (metaEnum && metaEnum->isProtected()) { + typeName = QLatin1String("long"); + isProtectedEnum = true; + } + } + + s << INDENT << typeName; + if (isCppPrimitiveArray) { + s << ' ' << cppOut; + } else if (treatAsPointer || isPointerOrObjectType) { + s << "* " << cppOut; + if (!defaultValue.isEmpty()) + s << " = " << defaultValue; + } else if (type->referenceType() == LValueReference && !typeEntry->isPrimitive() && isNotContainerEnumOrFlags) { + s << "* " << cppOut << " = &" << cppOutAux; + } else { + s << ' ' << cppOut; + if (isProtectedEnum && avoidProtectedHack()) { + s << " = "; + if (defaultValue.isEmpty()) + s << "0"; + else + s << "(long)" << defaultValue; + } else if (isUserPrimitive(type) || typeEntry->isEnum() || typeEntry->isFlags()) { + writeMinimalConstructorExpression(s, typeEntry, defaultValue); + } else if (!type->isContainer() && !type->isSmartPointer()) { + writeMinimalConstructorExpression(s, type, defaultValue); + } + } + s << ';' << endl; + + QString pythonToCppFunc = pythonToCppConverterForArgumentName(pyIn); + + s << INDENT; + if (!defaultValue.isEmpty()) + s << "if (" << pythonToCppFunc << ") "; + + QString pythonToCppCall = QString::fromLatin1("%1(%2, &%3)").arg(pythonToCppFunc, pyIn, cppOut); + if (!mayHaveImplicitConversion) { + s << pythonToCppCall << ';' << endl; + return; + } + + if (!defaultValue.isEmpty()) + s << '{' << endl << INDENT; + + s << "if (Shiboken::Conversions::isImplicitConversion(reinterpret_cast(" + << cpythonTypeNameExt(type) << "), " << pythonToCppFunc << "))" << endl; + { + Indentation indent(INDENT); + s << INDENT << pythonToCppFunc << '(' << pyIn << ", &" << cppOutAux << ");" << endl; + } + s << INDENT << "else" << endl; + { + Indentation indent(INDENT); + s << INDENT << pythonToCppCall << ';' << endl; + } + + if (!defaultValue.isEmpty()) + s << INDENT << '}'; + s << endl; +} + +static void addConversionRuleCodeSnippet(CodeSnipList& snippetList, QString& rule, + TypeSystem::Language /* conversionLanguage */, + TypeSystem::Language snippetLanguage, + QString outputName = QString(), + QString inputName = QString()) +{ + if (rule.isEmpty()) + return; + if (snippetLanguage == TypeSystem::TargetLangCode) { + rule.replace(QLatin1String("%in"), inputName); + rule.replace(QLatin1String("%out"), outputName + QLatin1String("_out")); + } else { + rule.replace(QLatin1String("%out"), outputName); + } + CodeSnip snip(snippetLanguage); + snip.position = (snippetLanguage == TypeSystem::NativeCode) ? TypeSystem::CodeSnipPositionAny : TypeSystem::CodeSnipPositionBeginning; + snip.addCode(rule); + snippetList << snip; +} + +void CppGenerator::writeConversionRule(QTextStream& s, const AbstractMetaFunction* func, TypeSystem::Language language) +{ + CodeSnipList snippets; + const AbstractMetaArgumentList &arguments = func->arguments(); + for (AbstractMetaArgument *arg : arguments) { + QString rule = func->conversionRule(language, arg->argumentIndex() + 1); + addConversionRuleCodeSnippet(snippets, rule, language, TypeSystem::TargetLangCode, + arg->name(), arg->name()); + } + writeCodeSnips(s, snippets, TypeSystem::CodeSnipPositionBeginning, TypeSystem::TargetLangCode, func); +} + +void CppGenerator::writeConversionRule(QTextStream& s, const AbstractMetaFunction* func, TypeSystem::Language language, const QString& outputVar) +{ + CodeSnipList snippets; + QString rule = func->conversionRule(language, 0); + addConversionRuleCodeSnippet(snippets, rule, language, language, outputVar); + writeCodeSnips(s, snippets, TypeSystem::CodeSnipPositionAny, language, func); +} + +void CppGenerator::writeNoneReturn(QTextStream& s, const AbstractMetaFunction* func, bool thereIsReturnValue) +{ + if (thereIsReturnValue && (!func->type() || func->argumentRemoved(0)) && !injectedCodeHasReturnValueAttribution(func)) { + s << INDENT << PYTHON_RETURN_VAR " = Py_None;" << endl; + s << INDENT << "Py_INCREF(Py_None);" << endl; + } +} + +void CppGenerator::writeOverloadedFunctionDecisor(QTextStream& s, const OverloadData& overloadData) +{ + s << INDENT << "// Overloaded function decisor" << endl; + const AbstractMetaFunction* rfunc = overloadData.referenceFunction(); + const OverloadData::MetaFunctionList &functionOverloads = overloadData.overloadsWithoutRepetition(); + for (int i = 0; i < functionOverloads.count(); i++) + s << INDENT << "// " << i << ": " << functionOverloads.at(i)->minimalSignature() << endl; + writeOverloadedFunctionDecisorEngine(s, &overloadData); + s << endl; + + // Ensure that the direct overload that called this reverse + // is called. + if (rfunc->isOperatorOverload() && !rfunc->isCallOperator()) { + s << INDENT << "if (isReverse && overloadId == -1) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyErr_SetString(PyExc_NotImplementedError, \"reverse operator not implemented.\");" << endl; + s << INDENT << "return 0;" << endl; + } + s << INDENT << "}" << endl << endl; + } + + s << INDENT << "// Function signature not found." << endl; + s << INDENT << "if (overloadId == -1) goto " << cpythonFunctionName(overloadData.referenceFunction()) << "_TypeError;" << endl; + s << endl; +} + +void CppGenerator::writeOverloadedFunctionDecisorEngine(QTextStream& s, const OverloadData* parentOverloadData) +{ + bool hasDefaultCall = parentOverloadData->nextArgumentHasDefaultValue(); + const AbstractMetaFunction* referenceFunction = parentOverloadData->referenceFunction(); + + // If the next argument has not an argument with a default value, it is still possible + // that one of the overloads for the current overload data has its final occurrence here. + // If found, the final occurrence of a method is attributed to the referenceFunction + // variable to be used further on this method on the conditional that identifies default + // method calls. + if (!hasDefaultCall) { + const OverloadData::MetaFunctionList &overloads = parentOverloadData->overloads(); + for (const AbstractMetaFunction *func : overloads) { + if (parentOverloadData->isFinalOccurrence(func)) { + referenceFunction = func; + hasDefaultCall = true; + break; + } + } + } + + int maxArgs = parentOverloadData->maxArgs(); + // Python constructors always receive multiple arguments. + bool usePyArgs = pythonFunctionWrapperUsesListOfArguments(*parentOverloadData); + + // Functions without arguments are identified right away. + if (maxArgs == 0) { + s << INDENT << "overloadId = " << parentOverloadData->headOverloadData()->overloads().indexOf(referenceFunction); + s << "; // " << referenceFunction->minimalSignature() << endl; + return; + + // To decide if a method call is possible at this point the current overload + // data object cannot be the head, since it is just an entry point, or a root, + // for the tree of arguments and it does not represent a valid method call. + } else if (!parentOverloadData->isHeadOverloadData()) { + bool isLastArgument = parentOverloadData->nextOverloadData().isEmpty(); + bool signatureFound = parentOverloadData->overloads().size() == 1; + + // The current overload data describes the last argument of a signature, + // so the method can be identified right now. + if (isLastArgument || (signatureFound && !hasDefaultCall)) { + const AbstractMetaFunction* func = parentOverloadData->referenceFunction(); + s << INDENT << "overloadId = " << parentOverloadData->headOverloadData()->overloads().indexOf(func); + s << "; // " << func->minimalSignature() << endl; + return; + } + } + + bool isFirst = true; + + // If the next argument has a default value the decisor can perform a method call; + // it just need to check if the number of arguments received from Python are equal + // to the number of parameters preceding the argument with the default value. + const OverloadDataList &overloads = parentOverloadData->nextOverloadData(); + if (hasDefaultCall) { + isFirst = false; + int numArgs = parentOverloadData->argPos() + 1; + s << INDENT << "if (numArgs == " << numArgs << ") {" << endl; + { + Indentation indent(INDENT); + const AbstractMetaFunction* func = referenceFunction; + for (OverloadData *overloadData : overloads) { + const AbstractMetaFunction* defValFunc = overloadData->getFunctionWithDefaultValue(); + if (defValFunc) { + func = defValFunc; + break; + } + } + s << INDENT << "overloadId = " << parentOverloadData->headOverloadData()->overloads().indexOf(func); + s << "; // " << func->minimalSignature() << endl; + } + s << INDENT << '}'; + } + + for (OverloadData *overloadData : overloads) { + bool signatureFound = overloadData->overloads().size() == 1 + && !overloadData->getFunctionWithDefaultValue() + && !overloadData->findNextArgWithDefault(); + + const AbstractMetaFunction* refFunc = overloadData->referenceFunction(); + + QStringList typeChecks; + QString pyArgName = (usePyArgs && maxArgs > 1) + ? QString::fromLatin1(PYTHON_ARGS "[%1]").arg(overloadData->argPos()) + : QLatin1String(PYTHON_ARG); + OverloadData* od = overloadData; + int startArg = od->argPos(); + int sequenceArgCount = 0; + while (od && !od->argType()->isVarargs()) { + bool typeReplacedByPyObject = od->argumentTypeReplaced() == QLatin1String("PyObject"); + if (!typeReplacedByPyObject) { + if (usePyArgs) + pyArgName = QString::fromLatin1(PYTHON_ARGS "[%1]").arg(od->argPos()); + QString typeCheck; + QTextStream tck(&typeCheck); + const AbstractMetaFunction* func = od->referenceFunction(); + + if (func->isConstructor() && func->arguments().count() == 1) { + const AbstractMetaClass* ownerClass = func->ownerClass(); + const ComplexTypeEntry* baseContainerType = ownerClass->typeEntry()->baseContainerType(); + if (baseContainerType && baseContainerType == func->arguments().constFirst()->type()->typeEntry() && isCopyable(ownerClass)) { + tck << '!' << cpythonCheckFunction(ownerClass->typeEntry()) << pyArgName << ')' << endl; + Indentation indent(INDENT); + tck << INDENT << "&& "; + } + } + writeTypeCheck(tck, od, pyArgName); + typeChecks << typeCheck; + } + + sequenceArgCount++; + + if (od->nextOverloadData().isEmpty() + || od->nextArgumentHasDefaultValue() + || od->nextOverloadData().size() != 1 + || od->overloads().size() != od->nextOverloadData().constFirst()->overloads().size()) { + overloadData = od; + od = 0; + } else { + od = od->nextOverloadData().constFirst(); + } + } + + if (usePyArgs && signatureFound) { + AbstractMetaArgumentList args = refFunc->arguments(); + int lastArgIsVarargs = (int) (args.size() > 1 && args.constLast()->type()->isVarargs()); + int numArgs = args.size() - OverloadData::numberOfRemovedArguments(refFunc) - lastArgIsVarargs; + typeChecks.prepend(QString::fromLatin1("numArgs %1 %2").arg(lastArgIsVarargs ? QLatin1String(">=") : QLatin1String("==")).arg(numArgs)); + } else if (sequenceArgCount > 1) { + typeChecks.prepend(QString::fromLatin1("numArgs >= %1").arg(startArg + sequenceArgCount)); + } else if (refFunc->isOperatorOverload() && !refFunc->isCallOperator()) { + typeChecks.prepend(QString::fromLatin1("%1isReverse").arg(refFunc->isReverseOperator() ? QString() : QLatin1String("!"))); + } + + if (isFirst) { + isFirst = false; + s << INDENT; + } else { + s << " else "; + } + s << "if ("; + if (typeChecks.isEmpty()) { + s << "true"; + } else { + Indentation indent(INDENT); + QString separator; + QTextStream sep(&separator); + sep << endl << INDENT << "&& "; + s << typeChecks.join(separator); + } + s << ") {" << endl; + { + Indentation indent(INDENT); + writeOverloadedFunctionDecisorEngine(s, overloadData); + } + s << INDENT << "}"; + } + s << endl; +} + +void CppGenerator::writeFunctionCalls(QTextStream &s, const OverloadData &overloadData, + GeneratorContext &context) +{ + const OverloadData::MetaFunctionList &overloads = overloadData.overloadsWithoutRepetition(); + s << INDENT << "// Call function/method" << endl; + s << INDENT << (overloads.count() > 1 ? "switch (overloadId) " : "") << '{' << endl; + { + Indentation indent(INDENT); + if (overloads.count() == 1) { + writeSingleFunctionCall(s, overloadData, overloads.constFirst(), context); + } else { + for (int i = 0; i < overloads.count(); i++) { + const AbstractMetaFunction* func = overloads.at(i); + s << INDENT << "case " << i << ": // " << func->signature() << endl; + s << INDENT << '{' << endl; + { + Indentation indent(INDENT); + writeSingleFunctionCall(s, overloadData, func, context); + s << INDENT << "break;" << endl; + } + s << INDENT << '}' << endl; + } + } + } + s << INDENT << '}' << endl; +} + +void CppGenerator::writeSingleFunctionCall(QTextStream &s, + const OverloadData &overloadData, + const AbstractMetaFunction *func, + GeneratorContext &context) +{ + if (func->isDeprecated()) { + s << INDENT << "Shiboken::warning(PyExc_DeprecationWarning, 1, \"Function: '" + << func->signature().replace(QLatin1String("::"), QLatin1String(".")) + << "' is marked as deprecated, please check the documentation for more information.\");" << endl; + } + + if (func->functionType() == AbstractMetaFunction::EmptyFunction) { + s << INDENT << "PyErr_Format(PyExc_TypeError, \"%s is a private method.\", \"" + << func->signature().replace(QLatin1String("::"), QLatin1String(".")) + << "\");" << endl; + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + return; + } + + bool usePyArgs = pythonFunctionWrapperUsesListOfArguments(overloadData); + + // Handle named arguments. + writeNamedArgumentResolution(s, func, usePyArgs); + + bool injectCodeCallsFunc = injectedCodeCallsCppFunction(func); + bool mayHaveUnunsedArguments = !func->isUserAdded() && func->hasInjectedCode() && injectCodeCallsFunc; + int removedArgs = 0; + for (int argIdx = 0; argIdx < func->arguments().count(); ++argIdx) { + bool hasConversionRule = !func->conversionRule(TypeSystem::NativeCode, argIdx + 1).isEmpty(); + const AbstractMetaArgument* arg = func->arguments().at(argIdx); + if (func->argumentRemoved(argIdx + 1)) { + if (!arg->defaultValueExpression().isEmpty()) { + QString cppArgRemoved = QString::fromLatin1(CPP_ARG_REMOVED "%1").arg(argIdx); + s << INDENT << getFullTypeName(arg->type()) << ' ' << cppArgRemoved; + s << " = " << guessScopeForDefaultValue(func, arg) << ';' << endl; + writeUnusedVariableCast(s, cppArgRemoved); + } else if (!injectCodeCallsFunc && !func->isUserAdded() && !hasConversionRule) { + // When an argument is removed from a method signature and no other means of calling + // the method are provided (as with code injection) the generator must abort. + qFatal(qPrintable(QString::fromLatin1("No way to call '%1::%2' with the modifications described in the type system.") + .arg(func->ownerClass()->name(), func->signature())), NULL); + } + removedArgs++; + continue; + } + if (hasConversionRule) + continue; + const AbstractMetaType* argType = getArgumentType(func, argIdx + 1); + if (!argType || (mayHaveUnunsedArguments && !injectedCodeUsesArgument(func, argIdx))) + continue; + int argPos = argIdx - removedArgs; + QString argName = QString::fromLatin1(CPP_ARG"%1").arg(argPos); + QString pyArgName = usePyArgs ? QString::fromLatin1(PYTHON_ARGS "[%1]").arg(argPos) : QLatin1String(PYTHON_ARG); + QString defaultValue = guessScopeForDefaultValue(func, arg); + writeArgumentConversion(s, argType, argName, pyArgName, func->implementingClass(), defaultValue, func->isUserAdded()); + } + + s << endl; + + int numRemovedArgs = OverloadData::numberOfRemovedArguments(func); + + s << INDENT << "if (!PyErr_Occurred()) {" << endl; + { + Indentation indentation(INDENT); + writeMethodCall(s, func, context, func->arguments().size() - numRemovedArgs); + if (!func->isConstructor()) + writeNoneReturn(s, func, overloadData.hasNonVoidReturnType()); + } + s << INDENT << '}' << endl; +} + +QString CppGenerator::cppToPythonFunctionName(const QString& sourceTypeName, QString targetTypeName) +{ + if (targetTypeName.isEmpty()) + targetTypeName = sourceTypeName; + return QString::fromLatin1("%1_CppToPython_%2").arg(sourceTypeName, targetTypeName); +} + +QString CppGenerator::pythonToCppFunctionName(const QString& sourceTypeName, const QString& targetTypeName) +{ + return QString::fromLatin1("%1_PythonToCpp_%2").arg(sourceTypeName, targetTypeName); +} +QString CppGenerator::pythonToCppFunctionName(const AbstractMetaType* sourceType, const AbstractMetaType* targetType) +{ + return pythonToCppFunctionName(fixedCppTypeName(sourceType), fixedCppTypeName(targetType)); +} +QString CppGenerator::pythonToCppFunctionName(const CustomConversion::TargetToNativeConversion* toNative, + const TypeEntry* targetType) +{ + return pythonToCppFunctionName(fixedCppTypeName(toNative), fixedCppTypeName(targetType)); +} + +QString CppGenerator::convertibleToCppFunctionName(const QString& sourceTypeName, const QString& targetTypeName) +{ + return QString::fromLatin1("is_%1_PythonToCpp_%2_Convertible").arg(sourceTypeName, targetTypeName); +} +QString CppGenerator::convertibleToCppFunctionName(const AbstractMetaType* sourceType, const AbstractMetaType* targetType) +{ + return convertibleToCppFunctionName(fixedCppTypeName(sourceType), fixedCppTypeName(targetType)); +} +QString CppGenerator::convertibleToCppFunctionName(const CustomConversion::TargetToNativeConversion* toNative, + const TypeEntry* targetType) +{ + return convertibleToCppFunctionName(fixedCppTypeName(toNative), fixedCppTypeName(targetType)); +} + +void CppGenerator::writeCppToPythonFunction(QTextStream& s, const QString& code, const QString& sourceTypeName, QString targetTypeName) +{ + QString prettyCode; + QTextStream c(&prettyCode); + formatCode(c, code, INDENT); + processCodeSnip(prettyCode); + + s << "static PyObject* " << cppToPythonFunctionName(sourceTypeName, targetTypeName); + s << "(const void* cppIn) {" << endl; + s << prettyCode; + s << '}' << endl; +} + +static void replaceCppToPythonVariables(QString& code, const QString& typeName) +{ + code.prepend(QString::fromLatin1("%1& cppInRef = *((%1*)cppIn);\n").arg(typeName)); + code.replace(QLatin1String("%INTYPE"), typeName); + code.replace(QLatin1String("%OUTTYPE"), QLatin1String("PyObject*")); + code.replace(QLatin1String("%in"), QLatin1String("cppInRef")); + code.replace(QLatin1String("%out"), QLatin1String("pyOut")); +} +void CppGenerator::writeCppToPythonFunction(QTextStream& s, const CustomConversion* customConversion) +{ + QString code = customConversion->nativeToTargetConversion(); + replaceCppToPythonVariables(code, getFullTypeName(customConversion->ownerType())); + writeCppToPythonFunction(s, code, fixedCppTypeName(customConversion->ownerType())); +} +void CppGenerator::writeCppToPythonFunction(QTextStream& s, const AbstractMetaType* containerType) +{ + const CustomConversion* customConversion = containerType->typeEntry()->customConversion(); + if (!customConversion) { + qFatal(qPrintable(QString::fromLatin1("Can't write the C++ to Python conversion function for container type '%1' - "\ + "no conversion rule was defined for it in the type system.") + .arg(containerType->typeEntry()->qualifiedCppName())), NULL); + } + if (!containerType->typeEntry()->isContainer()) { + writeCppToPythonFunction(s, customConversion); + return; + } + QString code = customConversion->nativeToTargetConversion(); + for (int i = 0; i < containerType->instantiations().count(); ++i) { + AbstractMetaType* type = containerType->instantiations().at(i); + QString typeName = getFullTypeName(type); + if (type->isConstant()) + typeName = QLatin1String("const ") + typeName; + code.replace(QString::fromLatin1("%INTYPE_%1").arg(i), typeName); + } + replaceCppToPythonVariables(code, getFullTypeNameWithoutModifiers(containerType)); + processCodeSnip(code); + writeCppToPythonFunction(s, code, fixedCppTypeName(containerType)); +} + +void CppGenerator::writePythonToCppFunction(QTextStream& s, const QString& code, const QString& sourceTypeName, const QString& targetTypeName) +{ + QString prettyCode; + QTextStream c(&prettyCode); + formatCode(c, code, INDENT); + processCodeSnip(prettyCode); + s << "static void " << pythonToCppFunctionName(sourceTypeName, targetTypeName); + s << "(PyObject* pyIn, void* cppOut) {" << endl; + s << prettyCode; + s << '}' << endl; +} + +void CppGenerator::writeIsPythonConvertibleToCppFunction(QTextStream& s, + const QString& sourceTypeName, + const QString& targetTypeName, + const QString& condition, + QString pythonToCppFuncName, + bool acceptNoneAsCppNull) +{ + if (pythonToCppFuncName.isEmpty()) + pythonToCppFuncName = pythonToCppFunctionName(sourceTypeName, targetTypeName); + + s << "static PythonToCppFunc " << convertibleToCppFunctionName(sourceTypeName, targetTypeName); + s << "(PyObject* pyIn) {" << endl; + if (acceptNoneAsCppNull) { + s << INDENT << "if (pyIn == Py_None)" << endl; + Indentation indent(INDENT); + s << INDENT << "return Shiboken::Conversions::nonePythonToCppNullPtr;" << endl; + } + s << INDENT << "if (" << condition << ')' << endl; + { + Indentation indent(INDENT); + s << INDENT << "return " << pythonToCppFuncName << ';' << endl; + } + s << INDENT << "return 0;" << endl; + s << '}' << endl; +} + +void CppGenerator::writePythonToCppConversionFunctions(QTextStream& s, + const AbstractMetaType* sourceType, + const AbstractMetaType* targetType, + QString typeCheck, + QString conversion, + QString preConversion) +{ + QString sourcePyType = cpythonTypeNameExt(sourceType); + + // Python to C++ conversion function. + QString code; + QTextStream c(&code); + if (conversion.isEmpty()) + conversion = QLatin1Char('*') + cpythonWrapperCPtr(sourceType->typeEntry(), QLatin1String("pyIn")); + if (!preConversion.isEmpty()) + c << INDENT << preConversion << endl; + c << INDENT << QString::fromLatin1("*((%1*)cppOut) = %1(%2);") + .arg(getFullTypeName(targetType->typeEntry()), conversion); + QString sourceTypeName = fixedCppTypeName(sourceType); + QString targetTypeName = fixedCppTypeName(targetType); + writePythonToCppFunction(s, code, sourceTypeName, targetTypeName); + + // Python to C++ convertible check function. + if (typeCheck.isEmpty()) + typeCheck = QString::fromLatin1("PyObject_TypeCheck(pyIn, %1)").arg(sourcePyType); + writeIsPythonConvertibleToCppFunction(s, sourceTypeName, targetTypeName, typeCheck); + s << endl; +} + +void CppGenerator::writePythonToCppConversionFunctions(QTextStream& s, + const CustomConversion::TargetToNativeConversion* toNative, + const TypeEntry* targetType) +{ + // Python to C++ conversion function. + QString code = toNative->conversion(); + QString inType; + if (toNative->sourceType()) + inType = cpythonTypeNameExt(toNative->sourceType()); + else + inType = QString::fromLatin1("(%1_TypeF())").arg(toNative->sourceTypeName()); + code.replace(QLatin1String("%INTYPE"), inType); + code.replace(QLatin1String("%OUTTYPE"), targetType->qualifiedCppName()); + code.replace(QLatin1String("%in"), QLatin1String("pyIn")); + code.replace(QLatin1String("%out"), QString::fromLatin1("*((%1*)cppOut)").arg(getFullTypeName(targetType))); + + QString sourceTypeName = fixedCppTypeName(toNative); + QString targetTypeName = fixedCppTypeName(targetType); + writePythonToCppFunction(s, code, sourceTypeName, targetTypeName); + + // Python to C++ convertible check function. + QString typeCheck = toNative->sourceTypeCheck(); + if (typeCheck.isEmpty()) { + QString pyTypeName = toNative->sourceTypeName(); + if (pyTypeName == QLatin1String("Py_None") || pyTypeName == QLatin1String("PyNone")) + typeCheck = QLatin1String("%in == Py_None"); + else if (pyTypeName == QLatin1String("SbkEnumType")) + typeCheck = QLatin1String("Shiboken::isShibokenEnum(%in)"); + else if (pyTypeName == QLatin1String("SbkObject")) + typeCheck = QLatin1String("Shiboken::Object::checkType(%in)"); + else if (pyTypeName == QLatin1String("PyTypeObject")) + typeCheck = QLatin1String("PyType_Check(%in)"); + else if (pyTypeName == QLatin1String("PyObject")) + typeCheck = QLatin1String("PyObject_TypeCheck(%in, &PyBaseObject_Type)"); + else if (pyTypeName.startsWith(QLatin1String("Py"))) + typeCheck = pyTypeName + QLatin1String("_Check(%in)"); + } + if (typeCheck.isEmpty()) { + if (!toNative->sourceType() || toNative->sourceType()->isPrimitive()) { + qFatal(qPrintable(QString::fromLatin1("User added implicit conversion for C++ type '%1' must provide either an input "\ + "type check function or a non primitive type entry.") + .arg(targetType->qualifiedCppName())), NULL); + + } + typeCheck = QString::fromLatin1("PyObject_TypeCheck(%in, %1)").arg(cpythonTypeNameExt(toNative->sourceType())); + } + typeCheck.replace(QLatin1String("%in"), QLatin1String("pyIn")); + processCodeSnip(typeCheck); + writeIsPythonConvertibleToCppFunction(s, sourceTypeName, targetTypeName, typeCheck); +} + +void CppGenerator::writePythonToCppConversionFunctions(QTextStream& s, const AbstractMetaType* containerType) +{ + const CustomConversion* customConversion = containerType->typeEntry()->customConversion(); + if (!customConversion) { + //qFatal + return; + } + const CustomConversion::TargetToNativeConversions& toCppConversions = customConversion->targetToNativeConversions(); + if (toCppConversions.isEmpty()) { + //qFatal + return; + } + // Python to C++ conversion function. + QString cppTypeName = getFullTypeNameWithoutModifiers(containerType); + QString code; + QTextStream c(&code); + c << INDENT << QString::fromLatin1("%1& cppOutRef = *((%1*)cppOut);").arg(cppTypeName) << endl; + code.append(toCppConversions.constFirst()->conversion()); + for (int i = 0; i < containerType->instantiations().count(); ++i) { + const AbstractMetaType* type = containerType->instantiations().at(i); + QString typeName = getFullTypeName(type); + if (type->isValue() && isValueTypeWithCopyConstructorOnly(type)) { + static const QRegularExpression regex(QLatin1String(CONVERTTOCPP_REGEX)); + Q_ASSERT(regex.isValid()); + for (int pos = 0; ; ) { + const QRegularExpressionMatch match = regex.match(code, pos); + if (!match.hasMatch()) + break; + pos = match.capturedEnd(); + const QString varName = match.captured(1); + QString rightCode = code.mid(pos); + rightCode.replace(varName, QLatin1Char('*') + varName); + code.replace(pos, code.size() - pos, rightCode); + } + typeName.append(QLatin1Char('*')); + } + code.replace(QString::fromLatin1("%OUTTYPE_%1").arg(i), typeName); + } + code.replace(QLatin1String("%OUTTYPE"), cppTypeName); + code.replace(QLatin1String("%in"), QLatin1String("pyIn")); + code.replace(QLatin1String("%out"), QLatin1String("cppOutRef")); + QString typeName = fixedCppTypeName(containerType); + writePythonToCppFunction(s, code, typeName, typeName); + + // Python to C++ convertible check function. + QString typeCheck = cpythonCheckFunction(containerType); + if (typeCheck.isEmpty()) + typeCheck = QLatin1String("false"); + else + typeCheck = QString::fromLatin1("%1pyIn)").arg(typeCheck); + writeIsPythonConvertibleToCppFunction(s, typeName, typeName, typeCheck); + s << endl; +} + +void CppGenerator::writeAddPythonToCppConversion(QTextStream& s, const QString& converterVar, const QString& pythonToCppFunc, const QString& isConvertibleFunc) +{ + s << INDENT << "Shiboken::Conversions::addPythonToCppValueConversion(" << converterVar << ',' << endl; + { + Indentation indent(INDENT); + s << INDENT << pythonToCppFunc << ',' << endl; + s << INDENT << isConvertibleFunc; + } + s << ");" << endl; +} + +void CppGenerator::writeNamedArgumentResolution(QTextStream& s, const AbstractMetaFunction* func, bool usePyArgs) +{ + const AbstractMetaArgumentList &args = OverloadData::getArgumentsWithDefaultValues(func); + if (args.isEmpty()) + return; + + QString pyErrString(QLatin1String("PyErr_SetString(PyExc_TypeError, \"") + fullPythonFunctionName(func) + + QLatin1String("(): got multiple values for keyword argument '%1'.\");")); + + s << INDENT << "if (kwds) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyObject* "; + for (const AbstractMetaArgument *arg : args) { + int pyArgIndex = arg->argumentIndex() - OverloadData::numberOfRemovedArguments(func, arg->argumentIndex()); + QString pyArgName = usePyArgs + ? QString::fromLatin1(PYTHON_ARGS "[%1]").arg(pyArgIndex) + : QLatin1String(PYTHON_ARG); + s << "value = PyDict_GetItemString(kwds, \"" << arg->name() << "\");" << endl; + s << INDENT << "if (value && " << pyArgName << ") {" << endl; + { + Indentation indent(INDENT); + s << INDENT << pyErrString.arg(arg->name()) << endl; + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + s << INDENT << "} else if (value) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << pyArgName << " = value;" << endl; + s << INDENT << "if (!"; + writeTypeCheck(s, arg->type(), pyArgName, isNumber(arg->type()->typeEntry()), func->typeReplaced(arg->argumentIndex() + 1)); + s << ')' << endl; + { + Indentation indent(INDENT); + s << INDENT << "goto " << cpythonFunctionName(func) << "_TypeError;" << endl; + } + } + s << INDENT << '}' << endl; + if (arg != args.constLast()) + s << INDENT; + } + } + s << INDENT << '}' << endl; +} + +QString CppGenerator::argumentNameFromIndex(const AbstractMetaFunction* func, int argIndex, const AbstractMetaClass** wrappedClass) +{ + *wrappedClass = 0; + QString pyArgName; + if (argIndex == -1) { + pyArgName = QLatin1String(PYTHON_SELF_VAR); + *wrappedClass = func->implementingClass(); + } else if (argIndex == 0) { + AbstractMetaType *funcType = func->type(); + AbstractMetaType *returnType = getTypeWithoutContainer(funcType); + if (returnType) { + pyArgName = QLatin1String(PYTHON_RETURN_VAR); + *wrappedClass = AbstractMetaClass::findClass(classes(), returnType->typeEntry()->name()); + } else { + QString message = QLatin1String("Invalid Argument index (0, return value) on function modification: ") + + (funcType ? funcType->name() : QLatin1String("void")) + QLatin1Char(' '); + if (const AbstractMetaClass *declaringClass = func->declaringClass()) + message += declaringClass->name() + QLatin1String("::"); + message += func->name() + QLatin1String("()"); + qCWarning(lcShiboken).noquote().nospace() << message; + } + } else { + int realIndex = argIndex - 1 - OverloadData::numberOfRemovedArguments(func, argIndex - 1); + AbstractMetaType* argType = getTypeWithoutContainer(func->arguments().at(realIndex)->type()); + + if (argType) { + *wrappedClass = AbstractMetaClass::findClass(classes(), argType->typeEntry()->name()); + if (argIndex == 1 + && !func->isConstructor() + && OverloadData::isSingleArgument(getFunctionGroups(func->implementingClass())[func->name()])) + pyArgName = QLatin1String(PYTHON_ARG); + else + pyArgName = QString::fromLatin1(PYTHON_ARGS "[%1]").arg(argIndex - 1); + } + } + return pyArgName; +} + +void CppGenerator::writeMethodCall(QTextStream &s, const AbstractMetaFunction *func, + GeneratorContext &context, int maxArgs) +{ + s << INDENT << "// " << func->minimalSignature() << (func->isReverseOperator() ? " [reverse operator]": "") << endl; + if (func->isConstructor()) { + const CodeSnipList &snips = func->injectedCodeSnips(); + for (const CodeSnip &cs : snips) { + if (cs.position == TypeSystem::CodeSnipPositionEnd) { + s << INDENT << "overloadId = " << func->ownerClass()->functions().indexOf(const_cast(func)) << ';' << endl; + break; + } + } + } + + if (func->isAbstract()) { + s << INDENT << "if (Shiboken::Object::hasCppWrapper(reinterpret_cast(" PYTHON_SELF_VAR "))) {\n"; + { + Indentation indent(INDENT); + s << INDENT << "PyErr_SetString(PyExc_NotImplementedError, \"pure virtual method '"; + s << func->ownerClass()->name() << '.' << func->name() << "()' not implemented.\");" << endl; + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + s << INDENT << "}\n"; + } + + // Used to provide contextual information to custom code writer function. + const AbstractMetaArgument* lastArg = 0; + + CodeSnipList snips; + if (func->hasInjectedCode()) { + snips = func->injectedCodeSnips(); + + // Find the last argument available in the method call to provide + // the injected code writer with information to avoid invalid replacements + // on the %# variable. + if (maxArgs > 0 && maxArgs < func->arguments().size() - OverloadData::numberOfRemovedArguments(func)) { + int removedArgs = 0; + for (int i = 0; i < maxArgs + removedArgs; i++) { + lastArg = func->arguments().at(i); + if (func->argumentRemoved(i + 1)) + removedArgs++; + } + } else if (maxArgs != 0 && !func->arguments().isEmpty()) { + lastArg = func->arguments().constLast(); + } + + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionBeginning, TypeSystem::TargetLangCode, func, lastArg); + s << endl; + } + + writeConversionRule(s, func, TypeSystem::NativeCode); + + if (!func->isUserAdded()) { + QStringList userArgs; + if (func->functionType() != AbstractMetaFunction::CopyConstructorFunction) { + int removedArgs = 0; + for (int i = 0; i < maxArgs + removedArgs; i++) { + const AbstractMetaArgument* arg = func->arguments().at(i); + bool hasConversionRule = !func->conversionRule(TypeSystem::NativeCode, arg->argumentIndex() + 1).isEmpty(); + if (func->argumentRemoved(i + 1)) { + // If some argument with default value is removed from a + // method signature, the said value must be explicitly + // added to the method call. + removedArgs++; + + // If have conversion rules I will use this for removed args + if (hasConversionRule) + userArgs << arg->name() + QLatin1String(CONV_RULE_OUT_VAR_SUFFIX); + else if (!arg->defaultValueExpression().isEmpty()) + userArgs << QString::fromLatin1(CPP_ARG_REMOVED "%1").arg(i); + } else { + int idx = arg->argumentIndex() - removedArgs; + bool deRef = isValueTypeWithCopyConstructorOnly(arg->type()) + || isObjectTypeUsedAsValueType(arg->type()) + || (arg->type()->referenceType() == LValueReference && isWrapperType(arg->type()) && !isPointer(arg->type())); + QString argName = hasConversionRule + ? arg->name() + QLatin1String(CONV_RULE_OUT_VAR_SUFFIX) + : QString::fromLatin1("%1" CPP_ARG "%2").arg(deRef ? QLatin1String("*") : QString()).arg(idx); + userArgs << argName; + } + } + + // If any argument's default value was modified the method must be called + // with this new value whenever the user doesn't pass an explicit value to it. + // Also, any unmodified default value coming after the last user specified + // argument and before the modified argument must be explicitly stated. + QStringList otherArgs; + bool otherArgsModified = false; + bool argsClear = true; + for (int i = func->arguments().size() - 1; i >= maxArgs + removedArgs; i--) { + const AbstractMetaArgument* arg = func->arguments().at(i); + bool defValModified = arg->defaultValueExpression() != arg->originalDefaultValueExpression(); + bool hasConversionRule = !func->conversionRule(TypeSystem::NativeCode, arg->argumentIndex() + 1).isEmpty(); + if (argsClear && !defValModified && !hasConversionRule) + continue; + else + argsClear = false; + otherArgsModified |= defValModified || hasConversionRule || func->argumentRemoved(i + 1); + if (hasConversionRule) + otherArgs.prepend(arg->name() + QLatin1String(CONV_RULE_OUT_VAR_SUFFIX)); + else + otherArgs.prepend(QString::fromLatin1(CPP_ARG_REMOVED "%1").arg(i)); + } + if (otherArgsModified) + userArgs << otherArgs; + } + + bool isCtor = false; + QString methodCall; + QTextStream mc(&methodCall); + QString useVAddr; + QTextStream uva(&useVAddr); + if (func->isOperatorOverload() && !func->isCallOperator()) { + QString firstArg = QLatin1String("(*" CPP_SELF_VAR ")"); + if (func->isPointerOperator()) + firstArg.remove(1, 1); // remove the de-reference operator + + QString secondArg = QLatin1String(CPP_ARG0); + if (!func->isUnaryOperator() && shouldDereferenceArgumentPointer(func->arguments().constFirst())) { + secondArg.prepend(QLatin1String("(*")); + secondArg.append(QLatin1Char(')')); + } + + if (func->isUnaryOperator()) + std::swap(firstArg, secondArg); + + QString op = func->originalName(); + op = op.right(op.size() - (sizeof("operator")/sizeof(char)-1)); + + if (func->isBinaryOperator()) { + if (func->isReverseOperator()) + std::swap(firstArg, secondArg); + + if (((op == QLatin1String("++")) || (op == QLatin1String("--"))) && !func->isReverseOperator()) { + s << endl << INDENT << "for(int i=0; i < " << secondArg << "; i++, " << firstArg << op << ");" << endl; + mc << firstArg; + } else { + mc << firstArg << ' ' << op << ' ' << secondArg; + } + } else { + mc << op << ' ' << secondArg; + } + } else if (!injectedCodeCallsCppFunction(func)) { + if (func->isConstructor()) { + isCtor = true; + QString className = wrapperName(func->ownerClass()); + + if (func->functionType() == AbstractMetaFunction::CopyConstructorFunction && maxArgs == 1) { + mc << "new ::" << className << "(*" << CPP_ARG0 << ')'; + } else { + QString ctorCall = className + QLatin1Char('(') + userArgs.join(QLatin1String(", ")) + QLatin1Char(')'); + if (usePySideExtensions() && func->ownerClass()->isQObject()) { + s << INDENT << "void* addr = PySide::nextQObjectMemoryAddr();" << endl; + uva << "if (addr) {" << endl; + { + Indentation indent(INDENT); + + uva << INDENT << "cptr = " << "new (addr) ::" + << ctorCall << ';' << endl + << INDENT + << "PySide::setNextQObjectMemoryAddr(0);" + << endl; + } + uva << INDENT << "} else {" << endl; + { + Indentation indent(INDENT); + + uva << INDENT << "cptr = " << "new ::" + << ctorCall << ';' << endl; + } + uva << INDENT << "}" << endl; + } else { + mc << "new ::" << ctorCall; + } + } + } else { + QString methodCallClassName; + if (context.forSmartPointer()) + methodCallClassName = context.preciseType()->cppSignature(); + else if (func->ownerClass()) + methodCallClassName = func->ownerClass()->qualifiedCppName(); + + if (func->ownerClass()) { + if (!avoidProtectedHack() || !func->isProtected()) { + if (func->isStatic()) { + mc << "::" << methodCallClassName << "::"; + } else { + const QString selfVarCast = func->ownerClass() == func->implementingClass() + ? QLatin1String(CPP_SELF_VAR) + : QLatin1String("reinterpret_cast<") + methodCallClassName + QLatin1String(" *>(" CPP_SELF_VAR ")"); + if (func->isConstant()) { + if (avoidProtectedHack()) { + mc << "const_castownerClass()->hasProtectedMembers()) { + // PYSIDE-500: Need a special wrapper cast when inherited + const QString selfWrapCast = func->ownerClass() == func->implementingClass() + ? QLatin1String(CPP_SELF_VAR) + : QLatin1String("reinterpret_cast<") + wrapperName(func->ownerClass()) + QLatin1String(" *>(" CPP_SELF_VAR ")"); + mc << wrapperName(func->ownerClass()); + mc << "*>(" << selfWrapCast << ")->"; + } + else { + mc << methodCallClassName; + mc << "*>(" << selfVarCast << ")->"; + } + } else { + mc << "const_cast(" << selfVarCast << ")->"; + } + } else { + mc << selfVarCast << "->"; + } + } + + if (!func->isAbstract() && func->isVirtual()) + mc << "::%CLASS_NAME::"; + + mc << func->originalName(); + } else { + if (!func->isStatic()) + mc << "((::" << wrapperName(func->ownerClass()) << "*) " << CPP_SELF_VAR << ")->"; + + if (!func->isAbstract()) + mc << (func->isProtected() ? wrapperName(func->ownerClass()) : + QLatin1String("::") + + methodCallClassName) << "::"; + mc << func->originalName() << "_protected"; + } + } else { + mc << func->originalName(); + } + mc << '(' << userArgs.join(QLatin1String(", ")) << ')'; + if (!func->isAbstract() && func->isVirtual()) { + mc.flush(); + if (!avoidProtectedHack() || !func->isProtected()) { + QString virtualCall(methodCall); + QString normalCall(methodCall); + virtualCall = virtualCall.replace(QLatin1String("%CLASS_NAME"), + methodCallClassName); + normalCall.remove(QLatin1String("::%CLASS_NAME::")); + methodCall.clear(); + mc << "Shiboken::Object::hasCppWrapper(reinterpret_cast(" PYTHON_SELF_VAR ")) ? "; + mc << virtualCall << " : " << normalCall; + } + } + } + } + + if (!injectedCodeCallsCppFunction(func)) { + s << INDENT << BEGIN_ALLOW_THREADS << endl << INDENT; + if (isCtor) { + s << (useVAddr.isEmpty() ? + QString::fromLatin1("cptr = %1;").arg(methodCall) : useVAddr) << endl; + } else if (func->type() && !func->isInplaceOperator()) { + bool writeReturnType = true; + if (avoidProtectedHack()) { + const AbstractMetaEnum* metaEnum = findAbstractMetaEnum(func->type()); + if (metaEnum) { + QString enumName; + if (metaEnum->isProtected()) + enumName = protectedEnumSurrogateName(metaEnum); + else + enumName = func->type()->cppSignature(); + methodCall.prepend(enumName + QLatin1Char('(')); + methodCall.append(QLatin1Char(')')); + s << enumName; + writeReturnType = false; + } + } + if (writeReturnType) { + s << func->type()->cppSignature(); + if (isObjectTypeUsedAsValueType(func->type())) { + s << '*'; + methodCall.prepend(QString::fromLatin1("new %1(").arg(func->type()->typeEntry()->qualifiedCppName())); + methodCall.append(QLatin1Char(')')); + } + } + s << " " CPP_RETURN_VAR " = "; + s << methodCall << ';' << endl; + } else { + s << methodCall << ';' << endl; + } + s << INDENT << END_ALLOW_THREADS << endl; + + if (!func->conversionRule(TypeSystem::TargetLangCode, 0).isEmpty()) { + writeConversionRule(s, func, TypeSystem::TargetLangCode, QLatin1String(PYTHON_RETURN_VAR)); + } else if (!isCtor && !func->isInplaceOperator() && func->type() + && !injectedCodeHasReturnValueAttribution(func, TypeSystem::TargetLangCode)) { + s << INDENT << PYTHON_RETURN_VAR " = "; + if (isObjectTypeUsedAsValueType(func->type())) { + s << "Shiboken::Object::newObject(reinterpret_cast(" << cpythonTypeNameExt(func->type()->typeEntry()) + << "), " << CPP_RETURN_VAR << ", true, true)"; + } else { + writeToPythonConversion(s, func->type(), func->ownerClass(), QLatin1String(CPP_RETURN_VAR)); + } + s << ';' << endl; + } + } + } + + if (func->hasInjectedCode() && !func->isConstructor()) { + s << endl; + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionEnd, TypeSystem::TargetLangCode, func, lastArg); + } + + bool hasReturnPolicy = false; + + // Ownership transference between C++ and Python. + QVector ownership_mods; + // Python object reference management. + QVector refcount_mods; + const FunctionModificationList &funcMods = func->modifications(); + for (const FunctionModification &func_mod : funcMods) { + for (const ArgumentModification &arg_mod : func_mod.argument_mods) { + if (!arg_mod.ownerships.isEmpty() && arg_mod.ownerships.contains(TypeSystem::TargetLangCode)) + ownership_mods.append(arg_mod); + else if (!arg_mod.referenceCounts.isEmpty()) + refcount_mods.append(arg_mod); + } + } + + // If there's already a setParent(return, me), don't use the return heuristic! + if (func->argumentOwner(func->ownerClass(), -1).index == 0) + hasReturnPolicy = true; + + if (!ownership_mods.isEmpty()) { + s << endl << INDENT << "// Ownership transferences." << endl; + for (const ArgumentModification &arg_mod : qAsConst(ownership_mods)) { + const AbstractMetaClass* wrappedClass = 0; + QString pyArgName = argumentNameFromIndex(func, arg_mod.index, &wrappedClass); + if (!wrappedClass) { + s << "#error Invalid ownership modification for argument " << arg_mod.index << '(' << pyArgName << ')' << endl << endl; + break; + } + + if (arg_mod.index == 0 || arg_mod.owner.index == 0) + hasReturnPolicy = true; + + // The default ownership does nothing. This is useful to avoid automatic heuristically + // based generation of code defining parenting. + if (arg_mod.ownerships[TypeSystem::TargetLangCode] == TypeSystem::DefaultOwnership) + continue; + + s << INDENT << "Shiboken::Object::"; + if (arg_mod.ownerships[TypeSystem::TargetLangCode] == TypeSystem::TargetLangOwnership) { + s << "getOwnership(" << pyArgName << ");"; + } else if (wrappedClass->hasVirtualDestructor()) { + if (arg_mod.index == 0) + s << "releaseOwnership(" PYTHON_RETURN_VAR ");"; + else + s << "releaseOwnership(" << pyArgName << ");"; + } else { + s << "invalidate(" << pyArgName << ");"; + } + s << endl; + } + + } else if (!refcount_mods.isEmpty()) { + for (const ArgumentModification &arg_mod : qAsConst(refcount_mods)) { + ReferenceCount refCount = arg_mod.referenceCounts.constFirst(); + if (refCount.action != ReferenceCount::Set + && refCount.action != ReferenceCount::Remove + && refCount.action != ReferenceCount::Add) { + qCWarning(lcShiboken) << "\"set\", \"add\" and \"remove\" are the only values supported by Shiboken for action attribute of reference-count tag."; + continue; + } + const AbstractMetaClass* wrappedClass = 0; + + QString pyArgName; + if (refCount.action == ReferenceCount::Remove) { + pyArgName = QLatin1String("Py_None"); + } else { + pyArgName = argumentNameFromIndex(func, arg_mod.index, &wrappedClass); + if (pyArgName.isEmpty()) { + s << "#error Invalid reference count modification for argument " << arg_mod.index << endl << endl; + break; + } + } + + if (refCount.action == ReferenceCount::Add || refCount.action == ReferenceCount::Set) + s << INDENT << "Shiboken::Object::keepReference("; + else + s << INDENT << "Shiboken::Object::removeReference("; + + s << "reinterpret_cast(" PYTHON_SELF_VAR "), \""; + QString varName = arg_mod.referenceCounts.constFirst().varName; + if (varName.isEmpty()) + varName = func->minimalSignature() + QString().number(arg_mod.index); + + s << varName << "\", " << pyArgName + << (refCount.action == ReferenceCount::Add ? ", true" : "") + << ");" << endl; + + if (arg_mod.index == 0) + hasReturnPolicy = true; + } + } + writeParentChildManagement(s, func, !hasReturnPolicy); +} + +QStringList CppGenerator::getAncestorMultipleInheritance(const AbstractMetaClass* metaClass) +{ + QStringList result; + const AbstractMetaClassList &baseClases = getBaseClasses(metaClass); + if (!baseClases.isEmpty()) { + for (const AbstractMetaClass *baseClass : baseClases) { + result.append(QString::fromLatin1("((size_t) static_cast(class_ptr)) - base") + .arg(baseClass->qualifiedCppName())); + result.append(QString::fromLatin1("((size_t) static_cast((%2*)((void*)class_ptr))) - base") + .arg(baseClass->qualifiedCppName(), metaClass->qualifiedCppName())); + } + for (const AbstractMetaClass *baseClass : baseClases) + result.append(getAncestorMultipleInheritance(baseClass)); + } + return result; +} + +void CppGenerator::writeMultipleInheritanceInitializerFunction(QTextStream& s, const AbstractMetaClass* metaClass) +{ + QString className = metaClass->qualifiedCppName(); + const QStringList ancestors = getAncestorMultipleInheritance(metaClass); + s << "static int mi_offsets[] = { "; + for (int i = 0; i < ancestors.size(); i++) + s << "-1, "; + s << "-1 };" << endl; + s << "int*" << endl; + s << multipleInheritanceInitializerFunctionName(metaClass) << "(const void* cptr)" << endl; + s << '{' << endl; + s << INDENT << "if (mi_offsets[0] == -1) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "std::set offsets;" << endl; + s << INDENT << "std::set::iterator it;" << endl; + s << INDENT << "const " << className << "* class_ptr = reinterpret_cast(cptr);" << endl; + s << INDENT << "size_t base = (size_t) class_ptr;" << endl; + + for (const QString &ancestor : ancestors) + s << INDENT << "offsets.insert(" << ancestor << ");" << endl; + + s << endl; + s << INDENT << "offsets.erase(0);" << endl; + s << endl; + + s << INDENT << "int i = 0;" << endl; + s << INDENT << "for (it = offsets.begin(); it != offsets.end(); it++) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "mi_offsets[i] = *it;" << endl; + s << INDENT << "i++;" << endl; + } + s << INDENT << '}' << endl; + } + s << INDENT << '}' << endl; + s << INDENT << "return mi_offsets;" << endl; + s << '}' << endl; +} + +void CppGenerator::writeSpecialCastFunction(QTextStream& s, const AbstractMetaClass* metaClass) +{ + QString className = metaClass->qualifiedCppName(); + s << "static void* " << cpythonSpecialCastFunctionName(metaClass) << "(void* obj, SbkObjectType* desiredType)\n"; + s << "{\n"; + s << INDENT << className << "* me = reinterpret_cast< ::" << className << "*>(obj);\n"; + bool firstClass = true; + const AbstractMetaClassList &allAncestors = getAllAncestors(metaClass); + for (const AbstractMetaClass *baseClass : allAncestors) { + s << INDENT << (!firstClass ? "else " : "") << "if (desiredType == reinterpret_cast(" << cpythonTypeNameExt(baseClass->typeEntry()) << "))\n"; + Indentation indent(INDENT); + s << INDENT << "return static_cast< ::" << baseClass->qualifiedCppName() << "*>(me);\n"; + firstClass = false; + } + s << INDENT << "return me;\n"; + s << "}\n\n"; +} + +void CppGenerator::writePrimitiveConverterInitialization(QTextStream& s, const CustomConversion* customConversion) +{ + const TypeEntry* type = customConversion->ownerType(); + QString converter = converterObject(type); + s << INDENT << "// Register converter for type '" << type->qualifiedTargetLangName() << "'." << endl; + s << INDENT << converter << " = Shiboken::Conversions::createConverter("; + if (type->targetLangApiName() == type->name()) + s << '0'; + else if (type->targetLangApiName() == QLatin1String("PyObject")) + s << "&PyBaseObject_Type"; + else + s << '&' << type->targetLangApiName() << "_Type"; + QString typeName = fixedCppTypeName(type); + s << ", " << cppToPythonFunctionName(typeName, typeName) << ");" << endl; + s << INDENT << "Shiboken::Conversions::registerConverterName(" << converter << ", \"" << type->qualifiedCppName() << "\");" << endl; + writeCustomConverterRegister(s, customConversion, converter); +} + +void CppGenerator::writeEnumConverterInitialization(QTextStream& s, const AbstractMetaEnum* metaEnum) +{ + if (metaEnum->isPrivate() || metaEnum->isAnonymous()) + return; + writeEnumConverterInitialization(s, metaEnum->typeEntry()); +} + +void CppGenerator::writeEnumConverterInitialization(QTextStream& s, const TypeEntry* enumType) +{ + if (!enumType) + return; + QString enumFlagName = enumType->isFlags() ? QLatin1String("flag") : QLatin1String("enum"); + QString enumPythonType = cpythonTypeNameExt(enumType); + + const FlagsTypeEntry* flags = 0; + if (enumType->isFlags()) + flags = reinterpret_cast(enumType); + + s << INDENT << "// Register converter for " << enumFlagName << " '" << enumType->qualifiedCppName() << "'." << endl; + s << INDENT << '{' << endl; + { + Indentation indent(INDENT); + QString typeName = fixedCppTypeName(enumType); + s << INDENT << "SbkConverter* converter = Shiboken::Conversions::createConverter(" << enumPythonType << ',' << endl; + { + Indentation indent(INDENT); + s << INDENT << cppToPythonFunctionName(typeName, typeName) << ");" << endl; + } + + if (flags) { + QString enumTypeName = fixedCppTypeName(flags->originator()); + QString toCpp = pythonToCppFunctionName(enumTypeName, typeName); + QString isConv = convertibleToCppFunctionName(enumTypeName, typeName); + writeAddPythonToCppConversion(s, QLatin1String("converter"), toCpp, isConv); + } + + QString toCpp = pythonToCppFunctionName(typeName, typeName); + QString isConv = convertibleToCppFunctionName(typeName, typeName); + writeAddPythonToCppConversion(s, QLatin1String("converter"), toCpp, isConv); + + if (flags) { + QString toCpp = pythonToCppFunctionName(QLatin1String("number"), typeName); + QString isConv = convertibleToCppFunctionName(QLatin1String("number"), typeName); + writeAddPythonToCppConversion(s, QLatin1String("converter"), toCpp, isConv); + } + + s << INDENT << "Shiboken::Enum::setTypeConverter(" << enumPythonType << ", converter);" << endl; + QStringList cppSignature = enumType->qualifiedCppName().split(QLatin1String("::"), QString::SkipEmptyParts); + while (!cppSignature.isEmpty()) { + QString signature = cppSignature.join(QLatin1String("::")); + s << INDENT << "Shiboken::Conversions::registerConverterName(converter, \""; + if (flags) + s << "QFlags<"; + s << signature << "\");" << endl; + cppSignature.removeFirst(); + } + } + s << INDENT << '}' << endl; + + if (!flags) + writeEnumConverterInitialization(s, reinterpret_cast(enumType)->flags()); +} + +void CppGenerator::writeContainerConverterInitialization(QTextStream& s, const AbstractMetaType* type) +{ + QByteArray cppSignature = QMetaObject::normalizedSignature(type->cppSignature().toUtf8()); + s << INDENT << "// Register converter for type '" << cppSignature << "'." << endl; + QString converter = converterObject(type); + s << INDENT << converter << " = Shiboken::Conversions::createConverter("; + if (type->typeEntry()->targetLangApiName() == QLatin1String("PyObject")) { + s << "&PyBaseObject_Type"; + } else { + QString baseName = cpythonBaseName(type->typeEntry()); + if (baseName == QLatin1String("PySequence")) + baseName = QLatin1String("PyList"); + s << '&' << baseName << "_Type"; + } + QString typeName = fixedCppTypeName(type); + s << ", " << cppToPythonFunctionName(typeName, typeName) << ");" << endl; + QString toCpp = pythonToCppFunctionName(typeName, typeName); + QString isConv = convertibleToCppFunctionName(typeName, typeName); + s << INDENT << "Shiboken::Conversions::registerConverterName(" << converter << ", \"" << cppSignature << "\");" << endl; + if (usePySideExtensions() && cppSignature.startsWith("const ") && cppSignature.endsWith("&")) { + cppSignature.chop(1); + cppSignature.remove(0, sizeof("const ") / sizeof(char) - 1); + s << INDENT << "Shiboken::Conversions::registerConverterName(" << converter << ", \"" << cppSignature << "\");" << endl; + } + writeAddPythonToCppConversion(s, converterObject(type), toCpp, isConv); +} + +void CppGenerator::writeExtendedConverterInitialization(QTextStream& s, const TypeEntry* externalType, + const QVector& conversions) +{ + s << INDENT << "// Extended implicit conversions for " << externalType->qualifiedTargetLangName() << '.' << endl; + for (const AbstractMetaClass *sourceClass : conversions) { + const QString converterVar = QLatin1String("reinterpret_cast(") + + cppApiVariableName(externalType->targetLangPackage()) + QLatin1Char('[') + + getTypeIndexVariableName(externalType) + QLatin1String("])"); + QString sourceTypeName = fixedCppTypeName(sourceClass->typeEntry()); + QString targetTypeName = fixedCppTypeName(externalType); + QString toCpp = pythonToCppFunctionName(sourceTypeName, targetTypeName); + QString isConv = convertibleToCppFunctionName(sourceTypeName, targetTypeName); + writeAddPythonToCppConversion(s, converterVar, toCpp, isConv); + } +} + +QString CppGenerator::multipleInheritanceInitializerFunctionName(const AbstractMetaClass* metaClass) +{ + if (!hasMultipleInheritanceInAncestry(metaClass)) + return QString(); + return cpythonBaseName(metaClass->typeEntry()) + QLatin1String("_mi_init"); +} + +typedef QHash >::const_iterator ProtocolIt; + +bool CppGenerator::supportsMappingProtocol(const AbstractMetaClass* metaClass) +{ + for (ProtocolIt it = m_mappingProtocol.cbegin(), end = m_mappingProtocol.cend(); it != end; ++it) { + if (metaClass->hasFunction(it.key())) + return true; + } + + return false; +} + +bool CppGenerator::supportsNumberProtocol(const AbstractMetaClass* metaClass) +{ + return metaClass->hasArithmeticOperatorOverload() + || metaClass->hasLogicalOperatorOverload() + || metaClass->hasBitwiseOperatorOverload() + || hasBoolCast(metaClass); +} + +bool CppGenerator::supportsSequenceProtocol(const AbstractMetaClass* metaClass) +{ + for (ProtocolIt it = m_sequenceProtocol.cbegin(), end = m_sequenceProtocol.cend(); it != end; ++it) { + if (metaClass->hasFunction(it.key())) + return true; + } + + const ComplexTypeEntry* baseType = metaClass->typeEntry()->baseContainerType(); + if (baseType && baseType->isContainer()) + return true; + + return false; +} + +bool CppGenerator::shouldGenerateGetSetList(const AbstractMetaClass* metaClass) +{ + const AbstractMetaFieldList &fields = metaClass->fields(); + for (const AbstractMetaField *f : fields) { + if (!f->isStatic()) + return true; + } + return false; +} + +void CppGenerator::writeClassDefinition(QTextStream &s, + const AbstractMetaClass *metaClass, + GeneratorContext &classContext) +{ + QString tp_flags; + QString tp_init; + QString tp_new; + QString tp_dealloc; + QString tp_hash(QLatin1Char('0')); + QString tp_call = tp_hash; + QString cppClassName = metaClass->qualifiedCppName(); + const QString className = chopType(cpythonTypeName(metaClass)); + QString baseClassName(QLatin1Char('0')); + AbstractMetaFunctionList ctors; + const AbstractMetaFunctionList &allCtors = metaClass->queryFunctions(AbstractMetaClass::Constructors); + for (AbstractMetaFunction *f : allCtors) { + if (!f->isPrivate() && !f->isModifiedRemoved() && !classContext.forSmartPointer()) + ctors.append(f); + } + + if (!metaClass->baseClass()) + baseClassName = QLatin1String("reinterpret_cast(SbkObject_TypeF())"); + + bool onlyPrivCtor = !metaClass->hasNonPrivateConstructor(); + + const AbstractMetaClass *qCoreApp = AbstractMetaClass::findClass(classes(), QLatin1String("QCoreApplication")); + const bool isQApp = qCoreApp != Q_NULLPTR && metaClass->inheritsFrom(qCoreApp); + + tp_flags = QLatin1String("Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_CHECKTYPES"); + if (metaClass->isNamespace() || metaClass->hasPrivateDestructor()) { + tp_dealloc = metaClass->hasPrivateDestructor() ? + QLatin1String("SbkDeallocWrapperWithPrivateDtor") : + QLatin1String("SbkDummyDealloc /* PYSIDE-595: Prevent replacement of \"0\" with subtype_dealloc. */"); + tp_init = QLatin1String("0"); + } else { + QString deallocClassName; + if (shouldGenerateCppWrapper(metaClass)) + deallocClassName = wrapperName(metaClass); + else + deallocClassName = cppClassName; + if (isQApp) + tp_dealloc = QLatin1String("&SbkDeallocQAppWrapper"); + else + tp_dealloc = QLatin1String("&SbkDeallocWrapper"); + tp_init = (onlyPrivCtor || ctors.isEmpty()) ? QLatin1String("0") : cpythonFunctionName(ctors.constFirst()); + } + + QString tp_getattro(QLatin1Char('0')); + QString tp_setattro = tp_getattro; + if (usePySideExtensions() && (metaClass->qualifiedCppName() == QLatin1String("QObject"))) { + tp_getattro = cpythonGetattroFunctionName(metaClass); + tp_setattro = cpythonSetattroFunctionName(metaClass); + } else { + if (classNeedsGetattroFunction(metaClass)) + tp_getattro = cpythonGetattroFunctionName(metaClass); + if (classNeedsSetattroFunction(metaClass)) + tp_setattro = cpythonSetattroFunctionName(metaClass); + } + + if (metaClass->hasPrivateDestructor() || onlyPrivCtor) { + // tp_flags = QLatin1String("Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES"); + // This is not generally possible, because PySide does not care about + // privacy the same way. This worked before the heap types were used, + // because inheritance is not really checked for static types. + // Instead, we check this at runtime, see SbkObjectTypeTpNew. + if (metaClass->fullName().startsWith(QLatin1String("PySide2.Qt"))) { + // PYSIDE-595: No idea how to do non-inheritance correctly. + // Since that is only relevant in shiboken, I used a shortcut for + // PySide. + tp_new = QLatin1String("SbkObjectTpNew"); + } + else { + tp_new = QLatin1String("SbkDummyNew /* PYSIDE-595: Prevent replacement " + "of \"0\" with base->tp_new. */"); + } + tp_flags.append(QLatin1String("|Py_TPFLAGS_HAVE_GC")); + } + else if (isQApp) { + tp_new = QLatin1String("SbkQAppTpNew"); // PYSIDE-571: need singleton app + } + else { + tp_new = QLatin1String("SbkObjectTpNew"); + tp_flags.append(QLatin1String("|Py_TPFLAGS_HAVE_GC")); + } + + QString tp_richcompare = QString(QLatin1Char('0')); + if (!metaClass->isNamespace() && metaClass->hasComparisonOperatorOverload()) + tp_richcompare = cpythonBaseName(metaClass) + QLatin1String("_richcompare"); + + QString tp_getset = QString(QLatin1Char('0')); + if (shouldGenerateGetSetList(metaClass) && !classContext.forSmartPointer()) + tp_getset = cpythonGettersSettersDefinitionName(metaClass); + + // search for special functions + ShibokenGenerator::clearTpFuncs(); + const AbstractMetaFunctionList &funcs = metaClass->functions(); + for (AbstractMetaFunction *func : funcs) { + if (m_tpFuncs.contains(func->name())) + m_tpFuncs[func->name()] = cpythonFunctionName(func); + } + if (m_tpFuncs[QLatin1String("__repr__")] == QLatin1String("0") + && !metaClass->isQObject() + && metaClass->hasToStringCapability()) { + m_tpFuncs[QLatin1String("__repr__")] = writeReprFunction(s, classContext); + } + + // class or some ancestor has multiple inheritance + const AbstractMetaClass* miClass = getMultipleInheritingClass(metaClass); + if (miClass) { + if (metaClass == miClass) + writeMultipleInheritanceInitializerFunction(s, metaClass); + writeSpecialCastFunction(s, metaClass); + s << endl; + } + + s << "// Class Definition -----------------------------------------------" << endl; + s << "extern \"C\" {" << endl; + + if (!metaClass->typeEntry()->hashFunction().isEmpty()) + tp_hash = QLatin1Char('&') + cpythonBaseName(metaClass) + QLatin1String("_HashFunc"); + + const AbstractMetaFunction* callOp = metaClass->findFunction(QLatin1String("operator()")); + if (callOp && !callOp->isModifiedRemoved()) + tp_call = QLatin1Char('&') + cpythonFunctionName(callOp); + + QString computedClassTargetFullName; + if (!classContext.forSmartPointer()) + computedClassTargetFullName = getClassTargetFullName(metaClass); + else + computedClassTargetFullName = getClassTargetFullName(classContext.preciseType()); + + QString suffix; + if (isObjectType(metaClass)) + suffix = QLatin1String("*"); + const QString typePtr = QLatin1String("_") + className + + QLatin1String("_Type"); + s << "static SbkObjectType *" << typePtr << " = nullptr;" << endl; + s << "static SbkObjectType *" << className << "_TypeF(void)" << endl; + s << "{" << endl; + s << INDENT << "return " << typePtr << ";" << endl; + s << "}" << endl; + s << endl; + s << "static PyType_Slot " << className << "_slots[] = {" << endl; + s << INDENT << "{Py_tp_base, (void *)0}, // inserted by introduceWrapperType" << endl; + s << INDENT << "{Py_tp_dealloc, (void *)" << tp_dealloc << "}," << endl; + s << INDENT << "{Py_tp_repr, (void *)" << m_tpFuncs[QLatin1String("__repr__")] << "}," << endl; + s << INDENT << "{Py_tp_hash, (void *)" << tp_hash << "}," << endl; + s << INDENT << "{Py_tp_call, (void *)" << tp_call << "}," << endl; + s << INDENT << "{Py_tp_str, (void *)" << m_tpFuncs[QLatin1String("__str__")] << "}," << endl; + s << INDENT << "{Py_tp_getattro, (void *)" << tp_getattro << "}," << endl; + s << INDENT << "{Py_tp_setattro, (void *)" << tp_setattro << "}," << endl; + s << INDENT << "{Py_tp_traverse, (void *)" << className << "_traverse}," << endl; + s << INDENT << "{Py_tp_clear, (void *)" << className << "_clear}," << endl; + s << INDENT << "{Py_tp_richcompare, (void *)" << tp_richcompare << "}," << endl; + s << INDENT << "{Py_tp_iter, (void *)" << m_tpFuncs[QLatin1String("__iter__")] << "}," << endl; + s << INDENT << "{Py_tp_iternext, (void *)" << m_tpFuncs[QLatin1String("__next__")] << "}," << endl; + s << INDENT << "{Py_tp_methods, (void *)" << className << "_methods}," << endl; + s << INDENT << "{Py_tp_getset, (void *)" << tp_getset << "}," << endl; + s << INDENT << "{Py_tp_init, (void *)" << tp_init << "}," << endl; + s << INDENT << "{Py_tp_new, (void *)" << tp_new << "}," << endl; + if (supportsSequenceProtocol(metaClass)) { + s << INDENT << "// type supports sequence protocol" << endl; + writeTypeAsSequenceDefinition(s, metaClass); + } + if (supportsMappingProtocol(metaClass)) { + s << INDENT << "// type supports mapping protocol" << endl; + writeTypeAsMappingDefinition(s, metaClass); + } + if (supportsNumberProtocol(metaClass)) { + // This one must come last. See the function itself. + s << INDENT << "// type supports number protocol" << endl; + writeTypeAsNumberDefinition(s, metaClass); + } + s << INDENT << "{0, 0}" << endl; + s << "};" << endl; + s << "static PyType_Spec " << className << "_spec = {" << endl; + s << INDENT << "\"" << computedClassTargetFullName << "\"," << endl; + s << INDENT << "sizeof(SbkObject)," << endl; + s << INDENT << "0," << endl; + s << INDENT << tp_flags << "," << endl; + s << INDENT << className << "_slots" << endl; + s << "};" << endl; + s << endl; + s << "} //extern \"C\"" << endl; +} + +void CppGenerator::writeMappingMethods(QTextStream &s, + const AbstractMetaClass *metaClass, + GeneratorContext &context) +{ + for (auto it = m_mappingProtocol.cbegin(), end = m_mappingProtocol.cend(); it != end; ++it) { + const AbstractMetaFunction* func = metaClass->findFunction(it.key()); + if (!func) + continue; + QString funcName = cpythonFunctionName(func); + QString funcArgs = it.value().first; + QString funcRetVal = it.value().second; + + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode); + s << funcRetVal << ' ' << funcName << '(' << funcArgs << ')' << endl << '{' << endl; + writeInvalidPyObjectCheck(s, QLatin1String(PYTHON_SELF_VAR)); + + writeCppSelfDefinition(s, func, context); + + const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().constLast(); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode, func, lastArg); + s << '}' << endl << endl; + } +} + +void CppGenerator::writeSequenceMethods(QTextStream &s, + const AbstractMetaClass *metaClass, + GeneratorContext &context) +{ + bool injectedCode = false; + + for (auto it = m_sequenceProtocol.cbegin(), end = m_sequenceProtocol.cend(); it != end; ++it) { + const AbstractMetaFunction* func = metaClass->findFunction(it.key()); + if (!func) + continue; + injectedCode = true; + QString funcName = cpythonFunctionName(func); + QString funcArgs = it.value().first; + QString funcRetVal = it.value().second; + + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode); + s << funcRetVal << ' ' << funcName << '(' << funcArgs << ')' << endl << '{' << endl; + writeInvalidPyObjectCheck(s, QLatin1String(PYTHON_SELF_VAR)); + + writeCppSelfDefinition(s, func, context); + + const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().constLast(); + writeCodeSnips(s, snips,TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode, func, lastArg); + s << '}' << endl << endl; + } + + if (!injectedCode) + writeStdListWrapperMethods(s, context); +} + +void CppGenerator::writeTypeAsSequenceDefinition(QTextStream& s, const AbstractMetaClass* metaClass) +{ + bool hasFunctions = false; + QMap funcs; + for (ProtocolIt it = m_sequenceProtocol.cbegin(), end = m_sequenceProtocol.cend(); it != end; ++it) { + const QString &funcName = it.key(); + const AbstractMetaFunction* func = metaClass->findFunction(funcName); + funcs[funcName] = func ? cpythonFunctionName(func).prepend(QLatin1Char('&')) : QString(); + if (!hasFunctions && func) + hasFunctions = true; + } + + QString baseName = cpythonBaseName(metaClass); + + //use default implementation + if (!hasFunctions) { + funcs[QLatin1String("__len__")] = baseName + QLatin1String("__len__"); + funcs[QLatin1String("__getitem__")] = baseName + QLatin1String("__getitem__"); + funcs[QLatin1String("__setitem__")] = baseName + QLatin1String("__setitem__"); + } + + for (QHash::const_iterator it = m_sqFuncs.cbegin(), end = m_sqFuncs.cend(); it != end; ++it) { + const QString& sqName = it.key(); + if (funcs[sqName].isEmpty()) + continue; + if (it.value() == QLatin1String("sq_slice")) + s << "#ifndef IS_PY3K" << endl; + s << INDENT << "{Py_" << it.value() << ", (void *)" << funcs[sqName] << "}," << endl; + if (it.value() == QLatin1String("sq_slice")) + s << "#endif" << endl; + } +} + +void CppGenerator::writeTypeAsMappingDefinition(QTextStream& s, const AbstractMetaClass* metaClass) +{ + bool hasFunctions = false; + QMap funcs; + for (ProtocolIt it = m_mappingProtocol.cbegin(), end = m_mappingProtocol.cend(); it != end; ++it) { + const QString &funcName = it.key(); + const AbstractMetaFunction* func = metaClass->findFunction(funcName); + funcs[funcName] = func ? cpythonFunctionName(func).prepend(QLatin1Char('&')) : QLatin1String("0"); + if (!hasFunctions && func) + hasFunctions = true; + } + + //use default implementation + if (!hasFunctions) { + funcs.insert(QLatin1String("__mlen__"), QString()); + funcs.insert(QLatin1String("__mgetitem__"), QString()); + funcs.insert(QLatin1String("__msetitem__"), QString()); + } + + QString baseName = cpythonBaseName(metaClass); + for (auto it = m_mpFuncs.cbegin(), end = m_mpFuncs.cend(); it != end; ++it) { + const QString &mpName = it.key(); + if (funcs[mpName].isEmpty()) + continue; + s << INDENT << "{Py_" << it.value() << ", (void *)" << funcs[mpName] << "}," << endl; + } +} + +void CppGenerator::writeTypeAsNumberDefinition(QTextStream& s, const AbstractMetaClass* metaClass) +{ + QMap nb; + + nb.insert(QLatin1String("__add__"), QString()); + nb.insert(QLatin1String("__sub__"), QString()); + nb.insert(QLatin1String("__mul__"), QString()); + nb.insert(QLatin1String("__div__"), QString()); + nb.insert(QLatin1String("__mod__"), QString()); + nb.insert(QLatin1String("__neg__"), QString()); + nb.insert(QLatin1String("__pos__"), QString()); + nb.insert(QLatin1String("__invert__"), QString()); + nb.insert(QLatin1String("__lshift__"), QString()); + nb.insert(QLatin1String("__rshift__"), QString()); + nb.insert(QLatin1String("__and__"), QString()); + nb.insert(QLatin1String("__xor__"), QString()); + nb.insert(QLatin1String("__or__"), QString()); + nb.insert(QLatin1String("__iadd__"), QString()); + nb.insert(QLatin1String("__isub__"), QString()); + nb.insert(QLatin1String("__imul__"), QString()); + nb.insert(QLatin1String("__idiv__"), QString()); + nb.insert(QLatin1String("__imod__"), QString()); + nb.insert(QLatin1String("__ilshift__"), QString()); + nb.insert(QLatin1String("__irshift__"), QString()); + nb.insert(QLatin1String("__iand__"), QString()); + nb.insert(QLatin1String("__ixor__"), QString()); + nb.insert(QLatin1String("__ior__"), QString()); + + const QVector opOverloads = + filterGroupedOperatorFunctions(metaClass, + AbstractMetaClass::ArithmeticOp + | AbstractMetaClass::LogicalOp + | AbstractMetaClass::BitwiseOp); + + for (const AbstractMetaFunctionList &opOverload : opOverloads) { + const AbstractMetaFunction* rfunc = opOverload[0]; + QString opName = ShibokenGenerator::pythonOperatorFunctionName(rfunc); + nb[opName] = cpythonFunctionName(rfunc); + } + + QString baseName = cpythonBaseName(metaClass); + + nb[QLatin1String("bool")] = hasBoolCast(metaClass) ? baseName + QLatin1String("___nb_bool") : QString(); + + for (QHash::const_iterator it = m_nbFuncs.cbegin(), end = m_nbFuncs.cend(); it != end; ++it) { + const QString &nbName = it.key(); + if (nb[nbName].isEmpty()) + continue; + + // bool is special because the field name differs on Python 2 and 3 (nb_nonzero vs nb_bool) + // so a shiboken macro is used. + if (nbName == QLatin1String("bool")) { + s << "#ifdef IS_PY3K" << endl; + s << INDENT << "{Py_nb_bool, (void *)" << nb[nbName] << "}," << endl; + s << "#else" << endl; + s << INDENT << "{Py_nb_nonzero, (void *)" << nb[nbName] << "}," << endl; + s << "#endif" << endl; + } else { + bool excludeFromPy3K = nbName == QLatin1String("__div__") || nbName == QLatin1String("__idiv__"); + if (!excludeFromPy3K) + s << INDENT << "{Py_" << it.value() << ", (void *)" << nb[nbName] << "}," << endl; + } + } + if (!nb[QLatin1String("__div__")].isEmpty()) { + s << INDENT << "{Py_nb_true_divide, (void *)" << nb[QLatin1String("__div__")] << "}," << endl; + s << "#ifndef IS_PY3K" << endl; + s << INDENT << "{Py_nb_divide, (void *)" << nb[QLatin1String("__div__")] << "}," << endl; + s << "#endif" << endl; + } + if (!nb[QLatin1String("__idiv__")].isEmpty()) { + s << INDENT << "// This function is unused in Python 3. We reference it here." << endl; + s << INDENT << "{0, (void *)" << nb[QLatin1String("__idiv__")] << "}," << endl; + s << INDENT << "// This list is ending at the first 0 entry." << endl; + s << INDENT << "// Therefore, we need to put the unused functions at the very end." << endl; + } +} + +void CppGenerator::writeTpTraverseFunction(QTextStream& s, const AbstractMetaClass* metaClass) +{ + QString baseName = cpythonBaseName(metaClass); + s << "static int "; + s << baseName << "_traverse(PyObject* " PYTHON_SELF_VAR ", visitproc visit, void* arg)" << endl; + s << '{' << endl; + s << INDENT << "return reinterpret_cast(SbkObject_TypeF())->tp_traverse(" PYTHON_SELF_VAR ", visit, arg);" << endl; + s << '}' << endl; +} + +void CppGenerator::writeTpClearFunction(QTextStream& s, const AbstractMetaClass* metaClass) +{ + QString baseName = cpythonBaseName(metaClass); + s << "static int "; + s << baseName << "_clear(PyObject* " PYTHON_SELF_VAR ")" << endl; + s << '{' << endl; + s << INDENT << "return reinterpret_cast(SbkObject_TypeF())->tp_clear(" PYTHON_SELF_VAR ");" << endl; + s << '}' << endl; +} + +void CppGenerator::writeCopyFunction(QTextStream &s, GeneratorContext &context) +{ + const AbstractMetaClass *metaClass = context.metaClass(); + const QString className = chopType(cpythonTypeName(metaClass)); + s << "static PyObject* " << className << "___copy__(PyObject* " PYTHON_SELF_VAR ")" << endl; + s << "{" << endl; + writeCppSelfDefinition(s, context, false, true); + QString conversionCode; + if (!context.forSmartPointer()) + conversionCode = cpythonToPythonConversionFunction(metaClass); + else + conversionCode = cpythonToPythonConversionFunction(context.preciseType()); + + s << INDENT << "PyObject* " << PYTHON_RETURN_VAR << " = " << conversionCode; + s << CPP_SELF_VAR ");" << endl; + writeFunctionReturnErrorCheckSection(s); + s << INDENT << "return " PYTHON_RETURN_VAR ";" << endl; + s << "}" << endl; + s << endl; +} + +void CppGenerator::writeGetterFunction(QTextStream &s, + const AbstractMetaField *metaField, + GeneratorContext &context) +{ + ErrorCode errorCode(0); + s << "static PyObject* " << cpythonGetterFunctionName(metaField) << "(PyObject* " PYTHON_SELF_VAR ", void*)" << endl; + s << '{' << endl; + + writeCppSelfDefinition(s, context); + + AbstractMetaType* fieldType = metaField->type(); + // Force use of pointer to return internal variable memory + bool newWrapperSameObject = !fieldType->isConstant() && isWrapperType(fieldType) && !isPointer(fieldType); + + QString cppField; + if (avoidProtectedHack() && metaField->isProtected()) { + cppField = QString::fromLatin1("((%1*)%2)->%3()") + .arg(wrapperName(metaField->enclosingClass()), QLatin1String(CPP_SELF_VAR), + protectedFieldGetterName(metaField)); + } else { + cppField = QLatin1String(CPP_SELF_VAR) + QLatin1String("->") + metaField->name(); + if (newWrapperSameObject) { + cppField.prepend(QLatin1String("&(")); + cppField.append(QLatin1Char(')')); + } + } + if (isCppIntegralPrimitive(fieldType) || fieldType->isEnum()) { + s << INDENT << getFullTypeNameWithoutModifiers(fieldType) << " cppOut_local = " << cppField << ';' << endl; + cppField = QLatin1String("cppOut_local"); + } else if (avoidProtectedHack() && metaField->isProtected()) { + s << INDENT << getFullTypeNameWithoutModifiers(fieldType); + if (fieldType->isContainer() || fieldType->isFlags() || fieldType->isSmartPointer()) { + s << '&'; + cppField.prepend(QLatin1Char('*')); + } else if ((!fieldType->isConstant() && !fieldType->isEnum() && !fieldType->isPrimitive()) || fieldType->indirections() == 1) { + s << '*'; + } + s << " fieldValue = " << cppField << ';' << endl; + cppField = QLatin1String("fieldValue"); + } + + s << INDENT << "PyObject* pyOut = 0;\n"; + if (newWrapperSameObject) { + // Special case colocated field with same address (first field in a struct) + s << INDENT << "if (reinterpret_cast(" + << cppField + << ") == reinterpret_cast(" + << CPP_SELF_VAR << ")) {\n"; + { + Indentation indent(INDENT); + s << INDENT << "pyOut = reinterpret_cast(Shiboken::Object::findColocatedChild(" + << "reinterpret_cast(self), reinterpret_cast(" + << cpythonTypeNameExt(fieldType) + << ")));\n"; + s << INDENT << "if (pyOut) {Py_IncRef(pyOut); return pyOut;}\n"; + } + s << INDENT << "}\n"; + // Check if field wrapper has already been created. + s << INDENT << "else if (Shiboken::BindingManager::instance().hasWrapper(" << cppField << ")) {" << "\n"; + { + Indentation indent(INDENT); + s << INDENT << "pyOut = (PyObject*)Shiboken::BindingManager::instance().retrieveWrapper(" << cppField << ");" << "\n"; + s << INDENT << "Py_IncRef(pyOut);" << "\n"; + s << INDENT << "return pyOut;" << "\n"; + } + s << INDENT << "}\n"; + // Create and register new wrapper + s << INDENT << "pyOut = "; + s << "Shiboken::Object::newObject(reinterpret_cast(" << cpythonTypeNameExt(fieldType) + << "), " << cppField << ", false, true);" << endl; + s << INDENT << "Shiboken::Object::setParent(" PYTHON_SELF_VAR ", pyOut)"; + } else { + s << INDENT << "pyOut = "; + writeToPythonConversion(s, fieldType, metaField->enclosingClass(), cppField); + } + s << ';' << endl; + + s << INDENT << "return pyOut;" << endl; + s << '}' << endl; +} + +void CppGenerator::writeSetterFunction(QTextStream &s, + const AbstractMetaField *metaField, + GeneratorContext &context) +{ + ErrorCode errorCode(0); + s << "static int " << cpythonSetterFunctionName(metaField) << "(PyObject* " PYTHON_SELF_VAR ", PyObject* pyIn, void*)" << endl; + s << '{' << endl; + + writeCppSelfDefinition(s, context); + + s << INDENT << "if (pyIn == 0) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyErr_SetString(PyExc_TypeError, \"'"; + s << metaField->name() << "' may not be deleted\");" << endl; + s << INDENT << "return -1;" << endl; + } + s << INDENT << '}' << endl; + + AbstractMetaType* fieldType = metaField->type(); + + s << INDENT << "PythonToCppFunc " << PYTHON_TO_CPP_VAR << ';' << endl; + s << INDENT << "if (!"; + writeTypeCheck(s, fieldType, QLatin1String("pyIn"), isNumber(fieldType->typeEntry())); + s << ") {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyErr_SetString(PyExc_TypeError, \"wrong type attributed to '"; + s << metaField->name() << "', '" << fieldType->name() << "' or convertible type expected\");" << endl; + s << INDENT << "return -1;" << endl; + } + s << INDENT << '}' << endl << endl; + + QString cppField = QString::fromLatin1("%1->%2").arg(QLatin1String(CPP_SELF_VAR), metaField->name()); + s << INDENT; + if (avoidProtectedHack() && metaField->isProtected()) { + s << getFullTypeNameWithoutModifiers(fieldType); + s << (fieldType->indirections() == 1 ? "*" : "") << " cppOut;" << endl; + s << INDENT << PYTHON_TO_CPP_VAR << "(pyIn, &cppOut);" << endl; + s << INDENT << QString::fromLatin1("((%1*)%2)->%3(cppOut)") + .arg(wrapperName(metaField->enclosingClass()), + QLatin1String(CPP_SELF_VAR), protectedFieldSetterName(metaField)); + } else if (isCppIntegralPrimitive(fieldType) || fieldType->typeEntry()->isEnum() || fieldType->typeEntry()->isFlags()) { + s << getFullTypeNameWithoutModifiers(fieldType) << " cppOut_local = " << cppField << ';' << endl; + s << INDENT << PYTHON_TO_CPP_VAR << "(pyIn, &cppOut_local);" << endl; + s << INDENT << cppField << " = cppOut_local"; + } else { + s << getFullTypeNameWithoutModifiers(fieldType); + s << QString::fromLatin1("*").repeated(fieldType->indirections()) << "& cppOut_ptr = "; + s << cppField << ';' << endl; + s << INDENT << PYTHON_TO_CPP_VAR << "(pyIn, &cppOut_ptr)"; + } + s << ';' << endl << endl; + + if (isPointerToWrapperType(fieldType)) { + s << INDENT << "Shiboken::Object::keepReference(reinterpret_cast(" PYTHON_SELF_VAR "), \""; + s << metaField->name() << "\", pyIn);" << endl; + } + + s << INDENT << "return 0;" << endl; + s << '}' << endl; +} + +void CppGenerator::writeRichCompareFunction(QTextStream &s, GeneratorContext &context) +{ + const AbstractMetaClass *metaClass = context.metaClass(); + QString baseName = cpythonBaseName(metaClass); + s << "static PyObject* "; + s << baseName << "_richcompare(PyObject* " PYTHON_SELF_VAR ", PyObject* " PYTHON_ARG ", int op)" << endl; + s << '{' << endl; + writeCppSelfDefinition(s, context, false, true); + writeUnusedVariableCast(s, QLatin1String(CPP_SELF_VAR)); + s << INDENT << "PyObject* " PYTHON_RETURN_VAR " = 0;" << endl; + s << INDENT << "PythonToCppFunc " PYTHON_TO_CPP_VAR << ';' << endl; + writeUnusedVariableCast(s, QLatin1String(PYTHON_TO_CPP_VAR)); + s << endl; + + s << INDENT << "switch (op) {" << endl; + { + Indentation indent(INDENT); + const QVector &groupedFuncs = filterGroupedOperatorFunctions(metaClass, AbstractMetaClass::ComparisonOp); + for (const AbstractMetaFunctionList &overloads : groupedFuncs) { + const AbstractMetaFunction* rfunc = overloads[0]; + + QString operatorId = ShibokenGenerator::pythonRichCompareOperatorId(rfunc); + s << INDENT << "case " << operatorId << ':' << endl; + + Indentation indent(INDENT); + + QString op = rfunc->originalName(); + op = op.right(op.size() - QLatin1String("operator").size()); + + int alternativeNumericTypes = 0; + for (const AbstractMetaFunction *func : overloads) { + if (!func->isStatic() && + ShibokenGenerator::isNumber(func->arguments().at(0)->type()->typeEntry())) + alternativeNumericTypes++; + } + + bool first = true; + OverloadData overloadData(overloads, this); + const OverloadDataList &nextOverloads = overloadData.nextOverloadData(); + for (OverloadData *od : nextOverloads) { + const AbstractMetaFunction* func = od->referenceFunction(); + if (func->isStatic()) + continue; + const AbstractMetaType* argType = getArgumentType(func, 1); + if (!argType) + continue; + if (!first) { + s << " else "; + } else { + first = false; + s << INDENT; + } + s << "if ("; + writeTypeCheck(s, argType, QLatin1String(PYTHON_ARG), alternativeNumericTypes == 1 || isPyInt(argType)); + s << ") {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "// " << func->signature() << endl; + writeArgumentConversion(s, argType, QLatin1String(CPP_ARG0), + QLatin1String(PYTHON_ARG), metaClass, + QString(), func->isUserAdded()); + + // If the function is user added, use the inject code + if (func->isUserAdded()) { + CodeSnipList snips = func->injectedCodeSnips(); + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode, func, func->arguments().constLast()); + } else { + QString expression = QString::fromLatin1("%1%2 %3 (%4" CPP_ARG0 ")") + .arg(func->isPointerOperator() ? QLatin1String("&") : QString(), + QLatin1String(CPP_SELF_VAR), op, + shouldDereferenceAbstractMetaTypePointer(argType) ? QLatin1String("*") : QString()); + s << INDENT; + if (func->type()) + s << func->type()->cppSignature() << " " CPP_RETURN_VAR " = "; + s << expression << ';' << endl; + s << INDENT << PYTHON_RETURN_VAR " = "; + if (func->type()) + writeToPythonConversion(s, func->type(), metaClass, QLatin1String(CPP_RETURN_VAR)); + else + s << "Py_None;" << endl << INDENT << "Py_INCREF(Py_None)"; + s << ';' << endl; + } + } + s << INDENT << '}'; + } + + s << " else {" << endl; + if (operatorId == QLatin1String("Py_EQ") || operatorId == QLatin1String("Py_NE")) { + Indentation indent(INDENT); + s << INDENT << PYTHON_RETURN_VAR " = " + << (operatorId == QLatin1String("Py_EQ") ? "Py_False" : "Py_True") << ';' << endl; + s << INDENT << "Py_INCREF(" PYTHON_RETURN_VAR ");" << endl; + } else { + Indentation indent(INDENT); + s << INDENT << "goto " << baseName << "_RichComparison_TypeError;" << endl; + } + s << INDENT << '}' << endl << endl; + + s << INDENT << "break;" << endl; + } + s << INDENT << "default:" << endl; + { + Indentation indent(INDENT); + s << INDENT << "goto " << baseName << "_RichComparison_TypeError;" << endl; + } + } + s << INDENT << '}' << endl << endl; + + s << INDENT << "if (" PYTHON_RETURN_VAR " && !PyErr_Occurred())" << endl; + { + Indentation indent(INDENT); + s << INDENT << "return " PYTHON_RETURN_VAR ";" << endl; + } + s << INDENT << baseName << "_RichComparison_TypeError:" << endl; + s << INDENT << "PyErr_SetString(PyExc_NotImplementedError, \"operator not implemented.\");" << endl; + s << INDENT << "return " << m_currentErrorCode << ';' << endl << endl; + s << '}' << endl << endl; +} + +void CppGenerator::writeMethodDefinitionEntry(QTextStream& s, const AbstractMetaFunctionList overloads) +{ + Q_ASSERT(!overloads.isEmpty()); + OverloadData overloadData(overloads, this); + bool usePyArgs = pythonFunctionWrapperUsesListOfArguments(overloadData); + const AbstractMetaFunction* func = overloadData.referenceFunction(); + int min = overloadData.minArgs(); + int max = overloadData.maxArgs(); + + s << '"' << func->name() << "\", (PyCFunction)" << cpythonFunctionName(func) << ", "; + if ((min == max) && (max < 2) && !usePyArgs) { + if (max == 0) + s << "METH_NOARGS"; + else + s << "METH_O"; + } else { + s << "METH_VARARGS"; + if (overloadData.hasArgumentWithDefaultValue()) + s << "|METH_KEYWORDS"; + } + if (func->ownerClass() && overloadData.hasStaticFunction()) + s << "|METH_STATIC"; +} + +void CppGenerator::writeMethodDefinition(QTextStream& s, const AbstractMetaFunctionList overloads) +{ + Q_ASSERT(!overloads.isEmpty()); + const AbstractMetaFunction* func = overloads.constFirst(); + if (m_tpFuncs.contains(func->name())) + return; + + s << INDENT; + if (OverloadData::hasStaticAndInstanceFunctions(overloads)) { + s << cpythonMethodDefinitionName(func); + } else { + s << '{'; + writeMethodDefinitionEntry(s, overloads); + s << '}'; + } + s << ',' << endl; +} + +static QString resolveRetOrArgType(const AbstractMetaType *someType) +{ + QString strRetArg; + if (CppGenerator::isCString(someType)) { + strRetArg = QLatin1String("str"); + } else if (someType->isPrimitive()) { + const PrimitiveTypeEntry* ptp = static_cast(someType->typeEntry()); + while (ptp->referencedTypeEntry()) + ptp = ptp->referencedTypeEntry(); + strRetArg = ptp->name(); + } else { + strRetArg = someType->fullName(); + } + strRetArg.replace(QLatin1String("::"), QLatin1String(".")); + return strRetArg; +} + +void CppGenerator::writeSignatureInfo(QTextStream &s, const AbstractMetaFunctionList &overloads) +{ + OverloadData overloadData(overloads, this); + const AbstractMetaFunction* rfunc = overloadData.referenceFunction(); + QString funcName = fullPythonFunctionName(rfunc); + + int idx = overloads.length() - 1; + bool multiple = idx > 0; + + for (const AbstractMetaFunction *f : overloads) { + QStringList args; + const AbstractMetaArgumentList &arguments = f->arguments(); + for (const AbstractMetaArgument *arg : arguments) { + QString strArg = resolveRetOrArgType(arg->type()); + if (!arg->defaultValueExpression().isEmpty()) { + strArg += QLatin1Char('='); + QString e = arg->defaultValueExpression(); + e.replace(QLatin1String("::"), QLatin1String(".")); + // the tests insert stuff like Str(""): + e.replace(QLatin1Char('"'), QLatin1String("\\\"")); + strArg += e; + } + args << arg->name() + QLatin1Char(':') + strArg; + } + // mark the multiple signatures as such, to make it easier to generate different code + if (multiple) + s << idx-- << ':'; + // now calculate the return type. + s << funcName << '(' << args.join(QLatin1Char(',')) << ')'; + AbstractMetaType *returnType = getTypeWithoutContainer(f->type()); + if (returnType) + s << "->" << resolveRetOrArgType(returnType); + s << endl; + } +} + +void CppGenerator::writeEnumsInitialization(QTextStream& s, AbstractMetaEnumList& enums) +{ + if (enums.isEmpty()) + return; + s << INDENT << "// Initialization of enums." << endl << endl; + for (const AbstractMetaEnum *cppEnum : qAsConst(enums)) { + if (cppEnum->isPrivate()) + continue; + writeEnumInitialization(s, cppEnum); + } +} + +void CppGenerator::writeEnumInitialization(QTextStream& s, const AbstractMetaEnum* cppEnum) +{ + const AbstractMetaClass* enclosingClass = getProperEnclosingClassForEnum(cppEnum); + const AbstractMetaClass* upper = enclosingClass ? enclosingClass->enclosingClass() : 0; + bool hasUpperEnclosingClass = upper && upper->typeEntry()->codeGeneration() != TypeEntry::GenerateForSubclass; + const EnumTypeEntry *enumTypeEntry = cppEnum->typeEntry(); + QString enclosingObjectVariable; + if (enclosingClass) + enclosingObjectVariable = cpythonTypeName(enclosingClass); + else if (hasUpperEnclosingClass) + enclosingObjectVariable = QLatin1String("enclosingClass"); + else + enclosingObjectVariable = QLatin1String("module"); + + s << INDENT << "// Initialization of "; + s << (cppEnum->isAnonymous() ? "anonymous enum identified by enum value" : "enum"); + s << " '" << cppEnum->name() << "'." << endl; + + QString enumVarTypeObj; + if (!cppEnum->isAnonymous()) { + FlagsTypeEntry* flags = enumTypeEntry->flags(); + if (flags) { + // The following could probably be made nicer: + // We need 'flags->flagsName()' with the full module/class path. + QString fullPath = getClassTargetFullName(cppEnum); + fullPath.truncate(fullPath.lastIndexOf(QLatin1Char('.')) + 1); + s << INDENT << cpythonTypeNameExt(flags) << " = PySide::QFlags::create(\"" + << fullPath << flags->flagsName() << "\", " + << cpythonEnumName(cppEnum) << "_number_slots);" << endl; + } + + enumVarTypeObj = cpythonTypeNameExt(enumTypeEntry); + + s << INDENT << enumVarTypeObj << " = Shiboken::Enum::"; + s << ((enclosingClass || hasUpperEnclosingClass) ? "createScopedEnum" : "createGlobalEnum"); + s << '(' << enclosingObjectVariable << ',' << endl; + { + Indentation indent(INDENT); + s << INDENT << '"' << cppEnum->name() << "\"," << endl; + s << INDENT << '"' << getClassTargetFullName(cppEnum) << "\"," << endl; + s << INDENT << '"' << (cppEnum->enclosingClass() ? (cppEnum->enclosingClass()->qualifiedCppName() + QLatin1String("::")) : QString()); + s << cppEnum->name() << '"'; + if (flags) + s << ',' << endl << INDENT << cpythonTypeNameExt(flags); + s << ");" << endl; + } + s << INDENT << "if (!" << cpythonTypeNameExt(cppEnum->typeEntry()) << ')' << endl; + { + Indentation indent(INDENT); + s << INDENT << "return " << m_currentErrorCode << ';' << endl << endl; + } + } + + const AbstractMetaEnumValueList &enumValues = cppEnum->values(); + for (const AbstractMetaEnumValue *enumValue : enumValues) { + if (enumTypeEntry->isEnumValueRejected(enumValue->name())) + continue; + + QString enumValueText; + if (!avoidProtectedHack() || !cppEnum->isProtected()) { + enumValueText = QLatin1String("(long) "); + if (cppEnum->enclosingClass()) + enumValueText += cppEnum->enclosingClass()->qualifiedCppName() + QLatin1String("::"); + // Fully qualify the value which is required for C++ 11 enum classes. + if (!cppEnum->isAnonymous()) + enumValueText += cppEnum->name() + QLatin1String("::"); + enumValueText += enumValue->name(); + } else { + enumValueText += enumValue->value().toString(); + } + + switch (cppEnum->enumKind()) { + case AnonymousEnum: + if (enclosingClass || hasUpperEnclosingClass) { + s << INDENT << '{' << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyObject* anonEnumItem = PyInt_FromLong(" << enumValueText << ");" << endl; + s << INDENT << "if (PyDict_SetItemString(reinterpret_cast(reinterpret_cast(" << enclosingObjectVariable + << "))->tp_dict, \"" << enumValue->name() << "\", anonEnumItem) < 0)" << endl; + { + Indentation indent(INDENT); + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + s << INDENT << "Py_DECREF(anonEnumItem);" << endl; + } + s << INDENT << '}' << endl; + } else { + s << INDENT << "if (PyModule_AddIntConstant(module, \"" << enumValue->name() << "\", "; + s << enumValueText << ") < 0)" << endl; + { + Indentation indent(INDENT); + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + } + break; + case CEnum: { + s << INDENT << "if (!Shiboken::Enum::"; + s << ((enclosingClass || hasUpperEnclosingClass) ? "createScopedEnumItem" : "createGlobalEnumItem"); + s << '(' << enumVarTypeObj << ',' << endl; + Indentation indent(INDENT); + s << INDENT << enclosingObjectVariable << ", \"" << enumValue->name() << "\", "; + s << enumValueText << "))" << endl; + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + break; + case EnumClass: { + s << INDENT << "if (!Shiboken::Enum::createScopedEnumItem(" + << enumVarTypeObj << ',' << endl; + Indentation indent(INDENT); + s << INDENT << enumVarTypeObj<< ", \"" << enumValue->name() << "\", " + << enumValueText << "))" << endl + << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + break; + } + } + + writeEnumConverterInitialization(s, cppEnum); + + s << INDENT << "// End of '" << cppEnum->name() << "' enum"; + if (cppEnum->typeEntry()->flags()) + s << "/flags"; + s << '.' << endl << endl; +} + +void CppGenerator::writeSignalInitialization(QTextStream& s, const AbstractMetaClass* metaClass) +{ + // Try to check something and print some warnings + const AbstractMetaFunctionList &signalFuncs = metaClass->cppSignalFunctions(); + for (const AbstractMetaFunction *cppSignal : signalFuncs) { + if (cppSignal->declaringClass() != metaClass) + continue; + const AbstractMetaArgumentList &arguments = cppSignal->arguments(); + for (AbstractMetaArgument *arg : arguments) { + AbstractMetaType* metaType = arg->type(); + const QByteArray origType = + QMetaObject::normalizedType(qPrintable(metaType->originalTypeDescription())); + const QByteArray cppSig = + QMetaObject::normalizedType(qPrintable(metaType->cppSignature())); + if ((origType != cppSig) && (!metaType->isFlags())) { + qCWarning(lcShiboken).noquote().nospace() + << "Typedef used on signal " << metaClass->qualifiedCppName() << "::" + << cppSignal->signature(); + } + } + } + + s << INDENT << "PySide::Signal::registerSignals(" << cpythonTypeName(metaClass) << ", &::" + << metaClass->qualifiedCppName() << "::staticMetaObject);" << endl; +} + +void CppGenerator::writeFlagsToLong(QTextStream& s, const AbstractMetaEnum* cppEnum) +{ + FlagsTypeEntry* flagsEntry = cppEnum->typeEntry()->flags(); + if (!flagsEntry) + return; + s << "static PyObject* " << cpythonEnumName(cppEnum) << "_long(PyObject* " PYTHON_SELF_VAR ")" << endl; + s << "{" << endl; + s << INDENT << "int val;" << endl; + AbstractMetaType* flagsType = buildAbstractMetaTypeFromTypeEntry(flagsEntry); + s << INDENT << cpythonToCppConversionFunction(flagsType) << PYTHON_SELF_VAR << ", &val);" << endl; + s << INDENT << "return Shiboken::Conversions::copyToPython(Shiboken::Conversions::PrimitiveTypeConverter(), &val);" << endl; + s << "}" << endl; +} + +void CppGenerator::writeFlagsNonZero(QTextStream& s, const AbstractMetaEnum* cppEnum) +{ + FlagsTypeEntry* flagsEntry = cppEnum->typeEntry()->flags(); + if (!flagsEntry) + return; + s << "static int " << cpythonEnumName(cppEnum) << "__nonzero(PyObject* " PYTHON_SELF_VAR ")" << endl; + s << "{" << endl; + + s << INDENT << "int val;" << endl; + AbstractMetaType* flagsType = buildAbstractMetaTypeFromTypeEntry(flagsEntry); + s << INDENT << cpythonToCppConversionFunction(flagsType) << PYTHON_SELF_VAR << ", &val);" << endl; + s << INDENT << "return val != 0;" << endl; + s << "}" << endl; +} + +void CppGenerator::writeFlagsMethods(QTextStream& s, const AbstractMetaEnum* cppEnum) +{ + writeFlagsBinaryOperator(s, cppEnum, QLatin1String("and"), QLatin1String("&")); + writeFlagsBinaryOperator(s, cppEnum, QLatin1String("or"), QLatin1String("|")); + writeFlagsBinaryOperator(s, cppEnum, QLatin1String("xor"), QLatin1String("^")); + + writeFlagsUnaryOperator(s, cppEnum, QLatin1String("invert"), QLatin1String("~")); + writeFlagsToLong(s, cppEnum); + writeFlagsNonZero(s, cppEnum); + + s << endl; +} + +void CppGenerator::writeFlagsNumberMethodsDefinition(QTextStream& s, const AbstractMetaEnum* cppEnum) +{ + QString cpythonName = cpythonEnumName(cppEnum); + + s << "static PyType_Slot " << cpythonName << "_number_slots[] = {" << endl; + s << "#ifdef IS_PY3K" << endl; + s << INDENT << "{Py_nb_bool, (void *)" << cpythonName << "__nonzero}," << endl; + s << "#else" << endl; + s << INDENT << "{Py_nb_nonzero, (void *)" << cpythonName << "__nonzero}," << endl; + s << INDENT << "{Py_nb_long, (void *)" << cpythonName << "_long}," << endl; + s << "#endif" << endl; + s << INDENT << "{Py_nb_invert, (void *)" << cpythonName << "___invert__}," << endl; + s << INDENT << "{Py_nb_and, (void *)" << cpythonName << "___and__}," << endl; + s << INDENT << "{Py_nb_xor, (void *)" << cpythonName << "___xor__}," << endl; + s << INDENT << "{Py_nb_or, (void *)" << cpythonName << "___or__}," << endl; + s << INDENT << "{Py_nb_int, (void *)" << cpythonName << "_long}," << endl; + s << "#ifndef IS_PY3K" << endl; + s << INDENT << "{Py_nb_long, (void *)" << cpythonName << "_long}," << endl; + s << "#endif" << endl; + s << INDENT << "{0, 0} // sentinel" << endl; + s << "};" << endl << endl; +} + +void CppGenerator::writeFlagsBinaryOperator(QTextStream& s, const AbstractMetaEnum* cppEnum, + QString pyOpName, QString cppOpName) +{ + FlagsTypeEntry* flagsEntry = cppEnum->typeEntry()->flags(); + Q_ASSERT(flagsEntry); + + s << "PyObject* " << cpythonEnumName(cppEnum) << "___" << pyOpName << "__(PyObject* " PYTHON_SELF_VAR ", PyObject* " PYTHON_ARG ")" << endl; + s << '{' << endl; + + AbstractMetaType* flagsType = buildAbstractMetaTypeFromTypeEntry(flagsEntry); + s << INDENT << "::" << flagsEntry->originalName() << " cppResult, " CPP_SELF_VAR ", cppArg;" << endl; + s << "#ifdef IS_PY3K" << endl; + s << INDENT << CPP_SELF_VAR " = (::" << flagsEntry->originalName() << ")(int)PyLong_AsLong(" PYTHON_SELF_VAR ");" << endl; + s << INDENT << "cppArg = (" << flagsEntry->originalName() << ")(int)PyLong_AsLong(" PYTHON_ARG ");" << endl; + s << "#else" << endl; + s << INDENT << CPP_SELF_VAR " = (::" << flagsEntry->originalName() << ")(int)PyInt_AsLong(" PYTHON_SELF_VAR ");" << endl; + s << INDENT << "cppArg = (" << flagsEntry->originalName() << ")(int)PyInt_AsLong(" PYTHON_ARG ");" << endl; + s << "#endif" << endl << endl; + s << INDENT << "cppResult = " CPP_SELF_VAR " " << cppOpName << " cppArg;" << endl; + s << INDENT << "return "; + writeToPythonConversion(s, flagsType, 0, QLatin1String("cppResult")); + s << ';' << endl; + s << '}' << endl << endl; +} + +void CppGenerator::writeFlagsUnaryOperator(QTextStream& s, const AbstractMetaEnum* cppEnum, + QString pyOpName, QString cppOpName, bool boolResult) +{ + FlagsTypeEntry* flagsEntry = cppEnum->typeEntry()->flags(); + Q_ASSERT(flagsEntry); + + s << "PyObject* " << cpythonEnumName(cppEnum) << "___" << pyOpName << "__(PyObject* " PYTHON_SELF_VAR ", PyObject* " PYTHON_ARG ")" << endl; + s << '{' << endl; + + AbstractMetaType* flagsType = buildAbstractMetaTypeFromTypeEntry(flagsEntry); + s << INDENT << "::" << flagsEntry->originalName() << " " CPP_SELF_VAR ";" << endl; + s << INDENT << cpythonToCppConversionFunction(flagsType) << PYTHON_SELF_VAR << ", &" CPP_SELF_VAR ");" << endl; + s << INDENT; + if (boolResult) + s << "bool"; + else + s << "::" << flagsEntry->originalName(); + s << " cppResult = " << cppOpName << CPP_SELF_VAR ";" << endl; + s << INDENT << "return "; + if (boolResult) + s << "PyBool_FromLong(cppResult)"; + else + writeToPythonConversion(s, flagsType, 0, QLatin1String("cppResult")); + s << ';' << endl; + s << '}' << endl << endl; +} + +QString CppGenerator::getInitFunctionName(GeneratorContext &context) const +{ + QString initFunctionName; + if (!context.forSmartPointer()) { + initFunctionName = context.metaClass()->qualifiedCppName(); + initFunctionName.replace(QLatin1String("::"), QLatin1String("_")); + } else { + initFunctionName = getFilteredCppSignatureString(context.preciseType()->cppSignature()); + } + return initFunctionName; +} + +void CppGenerator::writeClassRegister(QTextStream &s, + const AbstractMetaClass *metaClass, + GeneratorContext &classContext, + QTextStream &signatureStream) +{ + const ComplexTypeEntry* classTypeEntry = metaClass->typeEntry(); + + const AbstractMetaClass* enc = metaClass->enclosingClass(); + bool hasEnclosingClass = enc && enc->typeEntry()->codeGeneration() != TypeEntry::GenerateForSubclass; + QString enclosingObjectVariable = hasEnclosingClass ? QLatin1String("enclosingClass") : QLatin1String("module"); + + QString pyTypeName = cpythonTypeName(metaClass); + QString initFunctionName = getInitFunctionName(classContext); + + // PYSIDE-510: Create a signatures string for the introspection feature. + s << "// The signatures string for the functions." << endl; + s << "// Multiple signatures have their index \"n:\" in front." << endl; + s << "const char " << initFunctionName << "_SignaturesString[] = \"\"" << endl; + QString line; + while (signatureStream.readLineInto(&line)) + s << INDENT << '"' << line << "\\n\"" << endl; + s << ';' << endl << endl; + s << "void init_" << initFunctionName; + s << "(PyObject* " << enclosingObjectVariable << ")" << endl; + s << '{' << endl; + + // Multiple inheritance + QString pyTypeBasesVariable = chopType(pyTypeName) + QLatin1String("_Type_bases"); + const AbstractMetaClassList baseClasses = getBaseClasses(metaClass); + if (metaClass->baseClassNames().size() > 1) { + s << INDENT << "PyObject* " << pyTypeBasesVariable << " = PyTuple_Pack(" << baseClasses.size() << ',' << endl; + QStringList bases; + for (const AbstractMetaClass *base : baseClasses) + bases << QLatin1String("(PyObject*)") + cpythonTypeNameExt(base->typeEntry()); + Indentation indent(INDENT); + QString separator; + QTextStream sep(&separator); + sep << "," << endl << INDENT; + s << INDENT << bases.join(separator) << ");" << endl << endl; + } + + // Create type and insert it in the module or enclosing class. + const QString typePtr = QLatin1String("_") + chopType(pyTypeName) + + QLatin1String("_Type"); + + s << INDENT << typePtr << " = Shiboken::ObjectType::introduceWrapperType(" << endl; + { + Indentation indent(INDENT); + // 1:enclosingObject + s << INDENT << enclosingObjectVariable << "," << endl; + QString typeName; + if (!classContext.forSmartPointer()) + typeName = metaClass->name(); + else + typeName = classContext.preciseType()->cppSignature(); + + // 2:typeName + s << INDENT << "\"" << typeName << "\"," << endl; + + // 3:originalName + s << INDENT << "\""; + if (!classContext.forSmartPointer()) { + s << metaClass->qualifiedCppName(); + if (isObjectType(classTypeEntry)) + s << '*'; + } else { + s << classContext.preciseType()->cppSignature(); + } + + s << "\"," << endl; + // 4:typeSpec + s << INDENT << '&' << chopType(pyTypeName) << "_spec," << endl; + + // 5:signaturesString + s << INDENT << initFunctionName << "_SignaturesString," << endl; + + // 6:cppObjDtor + s << INDENT; + if (!metaClass->isNamespace() && !metaClass->hasPrivateDestructor()) { + QString dtorClassName = metaClass->qualifiedCppName(); + if ((avoidProtectedHack() && metaClass->hasProtectedDestructor()) || classTypeEntry->isValue()) + dtorClassName = wrapperName(metaClass); + if (classContext.forSmartPointer()) + dtorClassName = wrapperName(classContext.preciseType()); + + s << "&Shiboken::callCppDestructor< ::" << dtorClassName << " >," << endl; + } else { + s << "0," << endl; + } + + // 7:baseType + if (metaClass->baseClass()) { + s << INDENT << "reinterpret_cast(" + << cpythonTypeNameExt(metaClass->baseClass()->typeEntry()) << ")," << endl; + } else { + s << INDENT << "0," << endl; + } + + // 8:baseTypes + if (metaClass->baseClassNames().size() > 1) + s << INDENT << pyTypeBasesVariable << ',' << endl; + else + s << INDENT << "0," << endl; + + // 9:isInnerClass + s << INDENT << (hasEnclosingClass ? "true" : "false") << endl; + } + s << INDENT << ");" << endl; + s << INDENT << endl; + + if (!classContext.forSmartPointer()) + s << INDENT << cpythonTypeNameExt(classTypeEntry) << endl; + else + s << INDENT << cpythonTypeNameExt(classContext.preciseType()) << endl; + s << INDENT << " = reinterpret_cast(" << pyTypeName << ");" << endl; + s << endl; + + // Register conversions for the type. + writeConverterRegister(s, metaClass, classContext); + s << endl; + + // class inject-code target/beginning + if (!classTypeEntry->codeSnips().isEmpty()) { + writeCodeSnips(s, classTypeEntry->codeSnips(), TypeSystem::CodeSnipPositionBeginning, TypeSystem::TargetLangCode, metaClass); + s << endl; + } + + // Fill multiple inheritance data, if needed. + const AbstractMetaClass* miClass = getMultipleInheritingClass(metaClass); + if (miClass) { + s << INDENT << "MultipleInheritanceInitFunction func = "; + if (miClass == metaClass) { + s << multipleInheritanceInitializerFunctionName(miClass) << ";" << endl; + } else { + s << "Shiboken::ObjectType::getMultipleIheritanceFunction(reinterpret_cast("; + s << cpythonTypeNameExt(miClass->typeEntry()) << "));" << endl; + } + s << INDENT << "Shiboken::ObjectType::setMultipleInheritanceFunction("; + s << cpythonTypeName(metaClass) << ", func);" << endl; + s << INDENT << "Shiboken::ObjectType::setCastFunction(" << cpythonTypeName(metaClass); + s << ", &" << cpythonSpecialCastFunctionName(metaClass) << ");" << endl; + } + + // Set typediscovery struct or fill the struct of another one + if (metaClass->isPolymorphic() && metaClass->baseClass()) { + s << INDENT << "Shiboken::ObjectType::setTypeDiscoveryFunctionV2(" << cpythonTypeName(metaClass); + s << ", &" << cpythonBaseName(metaClass) << "_typeDiscovery);" << endl << endl; + } + + AbstractMetaEnumList classEnums = metaClass->enums(); + const AbstractMetaClassList &innerClasses = metaClass->innerClasses(); + for (AbstractMetaClass *innerClass : innerClasses) + lookForEnumsInClassesNotToBeGenerated(classEnums, innerClass); + + ErrorCode errorCode(QString::null); + writeEnumsInitialization(s, classEnums); + + if (metaClass->hasSignals()) + writeSignalInitialization(s, metaClass); + + // Write static fields + const AbstractMetaFieldList &fields = metaClass->fields(); + for (const AbstractMetaField *field : fields) { + if (!field->isStatic()) + continue; + s << INDENT << QLatin1String("PyDict_SetItemString(reinterpret_cast(") + cpythonTypeName(metaClass) + QLatin1String(")->tp_dict, \""); + s << field->name() << "\", "; + writeToPythonConversion(s, field->type(), metaClass, metaClass->qualifiedCppName() + QLatin1String("::") + field->name()); + s << ");" << endl; + } + s << endl; + + // class inject-code target/end + if (!classTypeEntry->codeSnips().isEmpty()) { + s << endl; + writeCodeSnips(s, classTypeEntry->codeSnips(), TypeSystem::CodeSnipPositionEnd, TypeSystem::TargetLangCode, metaClass); + } + + if (usePySideExtensions()) { + if (avoidProtectedHack() && shouldGenerateCppWrapper(metaClass)) + s << INDENT << wrapperName(metaClass) << "::pysideInitQtMetaTypes();\n"; + else + writeInitQtMetaTypeFunctionBody(s, classContext); + } + + if (usePySideExtensions() && metaClass->isQObject()) { + s << INDENT << "Shiboken::ObjectType::setSubTypeInitHook(" << pyTypeName << ", &PySide::initQObjectSubType);" << endl; + s << INDENT << "PySide::initDynamicMetaObject(" << pyTypeName << ", &::" << metaClass->qualifiedCppName() + << "::staticMetaObject, sizeof(::" << metaClass->qualifiedCppName() << "));" << endl; + } + + s << '}' << endl; +} + +void CppGenerator::writeInitQtMetaTypeFunctionBody(QTextStream &s, GeneratorContext &context) const +{ + const AbstractMetaClass* metaClass = context.metaClass(); + // Gets all class name variants used on different possible scopes + QStringList nameVariants; + if (!context.forSmartPointer()) + nameVariants << metaClass->name(); + else + nameVariants << context.preciseType()->cppSignature(); + + const AbstractMetaClass* enclosingClass = metaClass->enclosingClass(); + while (enclosingClass) { + if (enclosingClass->typeEntry()->generateCode()) + nameVariants << (enclosingClass->name() + QLatin1String("::") + nameVariants.constLast()); + enclosingClass = enclosingClass->enclosingClass(); + } + + QString className; + if (!context.forSmartPointer()) + className = metaClass->qualifiedCppName(); + else + className = context.preciseType()->cppSignature(); + + if (!metaClass->isNamespace() && !metaClass->isAbstract()) { + // Qt metatypes are registered only on their first use, so we do this now. + bool canBeValue = false; + if (!isObjectType(metaClass)) { + // check if there's a empty ctor + const AbstractMetaFunctionList &funcs = metaClass->functions(); + for (AbstractMetaFunction *func : funcs) { + if (func->isConstructor() && !func->arguments().count()) { + canBeValue = true; + break; + } + } + } + + if (canBeValue) { + for (const QString &name : qAsConst(nameVariants)) { + if (name == QLatin1String("iterator")) { + qCWarning(lcShiboken).noquote().nospace() + << QString::fromLatin1("%1:%2 FIXME:\n" + " The code tried to qRegisterMetaType the unqualified name " + "'iterator'. This is currently fixed by a hack(ct) and needs improvement!") + .arg(QFile::decodeName(__FILE__)).arg(__LINE__); + continue; + } + s << INDENT << "qRegisterMetaType< ::" << className << " >(\"" << name << "\");" << endl; + } + } + } + + const AbstractMetaEnumList &enums = metaClass->enums(); + for (AbstractMetaEnum *metaEnum : enums) { + if (!metaEnum->isPrivate() && !metaEnum->isAnonymous()) { + for (const QString &name : qAsConst(nameVariants)) + s << INDENT << "qRegisterMetaType< ::" << metaEnum->typeEntry()->qualifiedCppName() << " >(\"" << name << "::" << metaEnum->name() << "\");" << endl; + + if (metaEnum->typeEntry()->flags()) { + QString n = metaEnum->typeEntry()->flags()->originalName(); + s << INDENT << "qRegisterMetaType< ::" << n << " >(\"" << n << "\");" << endl; + } + } + } +} + +void CppGenerator::writeTypeDiscoveryFunction(QTextStream& s, const AbstractMetaClass* metaClass) +{ + QString polymorphicExpr = metaClass->typeEntry()->polymorphicIdValue(); + + s << "static void* " << cpythonBaseName(metaClass) << "_typeDiscovery(void* cptr, SbkObjectType* instanceType)\n{" << endl; + + if (!polymorphicExpr.isEmpty()) { + polymorphicExpr = polymorphicExpr.replace(QLatin1String("%1"), + QLatin1String(" reinterpret_cast< ::") + + metaClass->qualifiedCppName() + + QLatin1String("*>(cptr)")); + s << INDENT << " if (" << polymorphicExpr << ")" << endl; + { + Indentation indent(INDENT); + s << INDENT << "return cptr;" << endl; + } + } else if (metaClass->isPolymorphic()) { + const AbstractMetaClassList &ancestors = getAllAncestors(metaClass); + for (AbstractMetaClass *ancestor : ancestors) { + if (ancestor->baseClass()) + continue; + if (ancestor->isPolymorphic()) { + s << INDENT << "if (instanceType == reinterpret_cast(Shiboken::SbkType< ::" + << ancestor->qualifiedCppName() << " >()))" << endl; + Indentation indent(INDENT); + s << INDENT << "return dynamic_cast< ::" << metaClass->qualifiedCppName() + << "*>(reinterpret_cast< ::"<< ancestor->qualifiedCppName() << "*>(cptr));" << endl; + } else { + qCWarning(lcShiboken).noquote().nospace() + << metaClass->qualifiedCppName() << " inherits from a non polymorphic type (" + << ancestor->qualifiedCppName() << "), type discovery based on RTTI is " + "impossible, write a polymorphic-id-expression for this type."; + } + + } + } + s << INDENT << "return 0;" << endl; + s << "}\n\n"; +} + +QString CppGenerator::writeSmartPointerGetterCast() { + return QLatin1String("const_cast(" SMART_POINTER_GETTER ")"); +} + +void CppGenerator::writeSetattroFunction(QTextStream &s, GeneratorContext &context) +{ + const AbstractMetaClass* metaClass = context.metaClass(); + s << "static int " << cpythonSetattroFunctionName(metaClass) << "(PyObject* " PYTHON_SELF_VAR ", PyObject* name, PyObject* value)" << endl; + s << '{' << endl; + if (usePySideExtensions()) { + s << INDENT << "Shiboken::AutoDecRef pp(reinterpret_cast(PySide::Property::getObject(" PYTHON_SELF_VAR ", name)));" << endl; + s << INDENT << "if (!pp.isNull())" << endl; + Indentation indent(INDENT); + s << INDENT << "return PySide::Property::setValue(reinterpret_cast(pp.object()), " PYTHON_SELF_VAR ", value);" << endl; + } + + if (context.forSmartPointer()) { + s << INDENT << "// Try to find the 'name' attribute, by retrieving the PyObject for the corresponding C++ object held by the smart pointer." << endl; + s << INDENT << "PyObject *rawObj = PyObject_CallMethod(" PYTHON_SELF_VAR ", " + << writeSmartPointerGetterCast() << ", 0);" << endl; + s << INDENT << "if (rawObj) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "int hasAttribute = PyObject_HasAttr(rawObj, name);" << endl; + s << INDENT << "if (hasAttribute) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "return PyObject_GenericSetAttr(rawObj, name, value);" << endl; + } + s << INDENT << '}' << endl; + s << INDENT << "Py_DECREF(rawObj);" << endl; + } + s << INDENT << '}' << endl; + + } + + s << INDENT << "return PyObject_GenericSetAttr(" PYTHON_SELF_VAR ", name, value);" << endl; + s << '}' << endl; +} + +static inline QString qObjectClassName() { return QStringLiteral("QObject"); } +static inline QString qMetaObjectClassName() { return QStringLiteral("QMetaObject"); } + +void CppGenerator::writeGetattroFunction(QTextStream& s, GeneratorContext &context) +{ + const AbstractMetaClass* metaClass = context.metaClass(); + s << "static PyObject* " << cpythonGetattroFunctionName(metaClass) << "(PyObject* " PYTHON_SELF_VAR ", PyObject* name)" << endl; + s << '{' << endl; + + QString getattrFunc; + if (usePySideExtensions() && metaClass->isQObject()) { + AbstractMetaClass *qobjectClass = AbstractMetaClass::findClass(classes(), qObjectClassName()); + getattrFunc = QString::fromLatin1("PySide::getMetaDataFromQObject(%1, " PYTHON_SELF_VAR ", name)") + .arg(cpythonWrapperCPtr(qobjectClass, QLatin1String(PYTHON_SELF_VAR))); + } else { + getattrFunc = QLatin1String("PyObject_GenericGetAttr(" PYTHON_SELF_VAR ", name)"); + } + + if (classNeedsGetattroFunction(metaClass)) { + s << INDENT << "if (" PYTHON_SELF_VAR ") {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "// Search the method in the instance dict" << endl; + s << INDENT << "if (reinterpret_cast(" PYTHON_SELF_VAR ")->ob_dict) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyObject* meth = PyDict_GetItem(reinterpret_cast(" PYTHON_SELF_VAR ")->ob_dict, name);" << endl; + s << INDENT << "if (meth) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "Py_INCREF(meth);" << endl; + s << INDENT << "return meth;" << endl; + } + s << INDENT << '}' << endl; + } + s << INDENT << '}' << endl; + s << INDENT << "// Search the method in the type dict" << endl; + s << INDENT << "if (Shiboken::Object::isUserType(" PYTHON_SELF_VAR ")) {" << endl; + { + Indentation indent(INDENT); + // PYSIDE-772: Perform optimized name mangling. + s << INDENT << "Shiboken::AutoDecRef tmp(_Pep_PrivateMangle(" PYTHON_SELF_VAR ", name));" << endl; + s << INDENT << "PyObject *meth = PyDict_GetItem(Py_TYPE(" PYTHON_SELF_VAR ")->tp_dict, tmp);" << endl; + s << INDENT << "if (meth)" << endl; + { + Indentation indent(INDENT); + s << INDENT << "return PyFunction_Check(meth) ? SBK_PyMethod_New(meth, " PYTHON_SELF_VAR ") : " << getattrFunc << ';' << endl; + } + } + s << INDENT << '}' << endl; + + const AbstractMetaFunctionList &funcs = getMethodsWithBothStaticAndNonStaticMethods(metaClass); + for (const AbstractMetaFunction *func : funcs) { + QString defName = cpythonMethodDefinitionName(func); + s << INDENT << "static PyMethodDef non_static_" << defName << " = {" << endl; + { + Indentation indent(INDENT); + s << INDENT << defName << ".ml_name," << endl; + s << INDENT << defName << ".ml_meth," << endl; + s << INDENT << defName << ".ml_flags & (~METH_STATIC)," << endl; + s << INDENT << defName << ".ml_doc," << endl; + } + s << INDENT << "};" << endl; + s << INDENT << "if (Shiboken::String::compare(name, \"" << func->name() << "\") == 0)" << endl; + Indentation indent(INDENT); + s << INDENT << "return PyCFunction_NewEx(&non_static_" << defName << ", " PYTHON_SELF_VAR ", 0);" << endl; + } + } + s << INDENT << '}' << endl; + } + + if (context.forSmartPointer()) { + s << INDENT << "PyObject *tmp = " << getattrFunc << ';' << endl; + s << INDENT << "if (tmp) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "return tmp;" << endl; + } + s << INDENT << "} else {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "if (!PyErr_ExceptionMatches(PyExc_AttributeError)) return NULL;" << endl; + s << INDENT << "PyErr_Clear();" << endl; + + s << INDENT << "// Try to find the 'name' attribute, by retrieving the PyObject for " + "the corresponding C++ object held by the smart pointer." << endl; + s << INDENT << "PyObject *rawObj = PyObject_CallMethod(" PYTHON_SELF_VAR ", " + << writeSmartPointerGetterCast() << ", 0);" << endl; + s << INDENT << "if (rawObj) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyObject *attribute = PyObject_GetAttr(rawObj, name);" << endl; + s << INDENT << "if (attribute) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "tmp = attribute;" << endl; + } + s << INDENT << '}' << endl; + s << INDENT << "Py_DECREF(rawObj);" << endl; + } + s << INDENT << '}' << endl; + s << INDENT << "if (!tmp) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyTypeObject *tp = Py_TYPE(self);" << endl; + s << INDENT << "PyErr_Format(PyExc_AttributeError," << endl; + s << INDENT << " \"'%.50s' object has no attribute '%.400s'\"," << endl; + s << INDENT << " tp->tp_name, PyBytes_AS_STRING(name));" << endl; + s << INDENT << "return NULL;" << endl; + } + s << INDENT << "} else {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "return tmp;" << endl; + } + s << INDENT << '}' << endl; + + } + s << INDENT << '}' << endl; + + } else { + s << INDENT << "return " << getattrFunc << ';' << endl; + } + s << '}' << endl; +} + +bool CppGenerator::finishGeneration() +{ + //Generate CPython wrapper file + QString classInitDecl; + QTextStream s_classInitDecl(&classInitDecl); + QString classPythonDefines; + QTextStream s_classPythonDefines(&classPythonDefines); + + QSet includes; + QString globalFunctionImpl; + QTextStream s_globalFunctionImpl(&globalFunctionImpl); + QString globalFunctionDecl; + QTextStream s_globalFunctionDef(&globalFunctionDecl); + QString signaturesString; + QTextStream signatureStream(&signaturesString); + + Indentation indent(INDENT); + + const FunctionGroupMap &functionGroups = getFunctionGroups(); + for (FunctionGroupMapIt it = functionGroups.cbegin(), end = functionGroups.cend(); it != end; ++it) { + AbstractMetaFunctionList overloads; + for (AbstractMetaFunction *func : it.value()) { + if (!func->isModifiedRemoved()) { + overloads.append(func); + if (func->typeEntry()) + includes << func->typeEntry()->include(); + } + } + + if (overloads.isEmpty()) + continue; + + // Dummy context to satisfy the API. + GeneratorContext classContext; + writeMethodWrapper(s_globalFunctionImpl, overloads, classContext); + writeSignatureInfo(signatureStream, overloads); + writeMethodDefinition(s_globalFunctionDef, overloads); + } + + //this is a temporary solution before new type revison implementation + //We need move QMetaObject register before QObject + Dependencies additionalDependencies; + const AbstractMetaClassList &allClasses = classes(); + if (AbstractMetaClass::findClass(allClasses, qObjectClassName()) != Q_NULLPTR + && AbstractMetaClass::findClass(allClasses, qMetaObjectClassName()) != Q_NULLPTR) { + Dependency dependency; + dependency.parent = qMetaObjectClassName(); + dependency.child = qObjectClassName(); + additionalDependencies.append(dependency); + } + const AbstractMetaClassList lst = classesTopologicalSorted(additionalDependencies); + + for (const AbstractMetaClass *cls : lst){ + if (!shouldGenerate(cls)) + continue; + + s_classInitDecl << "void init_" << cls->qualifiedCppName().replace(QLatin1String("::"), QLatin1String("_")) << "(PyObject* module);" << endl; + + QString defineStr = QLatin1String("init_") + cls->qualifiedCppName().replace(QLatin1String("::"), QLatin1String("_")); + + if (cls->enclosingClass() && (cls->enclosingClass()->typeEntry()->codeGeneration() != TypeEntry::GenerateForSubclass)) + defineStr += QLatin1String("(reinterpret_cast(") + cpythonTypeNameExt(cls->enclosingClass()->typeEntry()) + QLatin1String(")->tp_dict);"); + else + defineStr += QLatin1String("(module);"); + s_classPythonDefines << INDENT << defineStr << endl; + } + + // Initialize smart pointer types. + const QVector &smartPtrs = instantiatedSmartPointers(); + for (const AbstractMetaType *metaType : smartPtrs) { + GeneratorContext context(0, metaType, true); + QString initFunctionName = getInitFunctionName(context); + s_classInitDecl << "void init_" << initFunctionName << "(PyObject* module);" << endl; + QString defineStr = QLatin1String("init_") + initFunctionName; + defineStr += QLatin1String("(module);"); + s_classPythonDefines << INDENT << defineStr << endl; + } + + QString moduleFileName(outputDirectory() + QLatin1Char('/') + subDirectoryForPackage(packageName())); + moduleFileName += QLatin1Char('/') + moduleName().toLower() + QLatin1String("_module_wrapper.cpp"); + + QFile file(moduleFileName); + verifyDirectoryFor(file); + if (!file.open(QFile::WriteOnly)) { + qCWarning(lcShiboken).noquote().nospace() + << "Error writing file: " << QDir::toNativeSeparators(moduleFileName); + return false; + } + + QTextStream s(&file); + + // write license comment + s << licenseComment() << endl; + + s << "#include " << endl; + s << "#include " << endl; + s << "#include " << endl; + if (usePySideExtensions()) { + s << includeQDebug; + s << "#include " << endl; + s << "#include " << endl; + s << "#include " << endl; + } + + s << "#include \"" << getModuleHeaderFileName() << '"' << endl << endl; + for (const Include &include : qAsConst(includes)) + s << include; + s << endl; + + // Global enums + AbstractMetaEnumList globalEnums = this->globalEnums(); + const AbstractMetaClassList &classList = classes(); + for (const AbstractMetaClass *metaClass : classList) { + const AbstractMetaClass* encClass = metaClass->enclosingClass(); + if (encClass && encClass->typeEntry()->codeGeneration() != TypeEntry::GenerateForSubclass) + continue; + lookForEnumsInClassesNotToBeGenerated(globalEnums, metaClass); + } + + TypeDatabase* typeDb = TypeDatabase::instance(); + TypeSystemTypeEntry* moduleEntry = reinterpret_cast(typeDb->findType(packageName())); + + //Extra includes + s << endl << "// Extra includes" << endl; + QVector extraIncludes; + if (moduleEntry) + extraIncludes = moduleEntry->extraIncludes(); + for (AbstractMetaEnum *cppEnum : qAsConst(globalEnums)) + extraIncludes.append(cppEnum->typeEntry()->extraIncludes()); + qSort(extraIncludes.begin(), extraIncludes.end()); + for (const Include &inc : qAsConst(extraIncludes)) + s << inc; + s << endl; + + s << "// Current module's type array." << endl; + s << "PyTypeObject** " << cppApiVariableName() << ';' << endl; + + s << "// Current module's converter array." << endl; + s << "SbkConverter** " << convertersVariableName() << ';' << endl; + + CodeSnipList snips; + if (moduleEntry) + snips = moduleEntry->codeSnips(); + + // module inject-code native/beginning + if (!snips.isEmpty()) { + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionBeginning, TypeSystem::NativeCode); + s << endl; + } + + // cleanup staticMetaObject attribute + if (usePySideExtensions()) { + s << "void cleanTypesAttributes(void) {" << endl; + s << INDENT << "for (int i = 0, imax = SBK_" << moduleName() << "_IDX_COUNT; i < imax; i++) {" << endl; + { + Indentation indentation(INDENT); + s << INDENT << "PyObject *pyType = reinterpret_cast(" << cppApiVariableName() << "[i]);" << endl; + s << INDENT << "if (pyType && PyObject_HasAttrString(pyType, \"staticMetaObject\"))"<< endl; + { + Indentation indentation(INDENT); + s << INDENT << "PyObject_SetAttrString(pyType, \"staticMetaObject\", Py_None);" << endl; + } + } + s << INDENT << "}" << endl; + s << "}" << endl; + } + + s << "// Global functions "; + s << "------------------------------------------------------------" << endl; + s << globalFunctionImpl << endl; + + s << "static PyMethodDef " << moduleName() << "_methods[] = {" << endl; + s << globalFunctionDecl; + s << INDENT << "{0} // Sentinel" << endl << "};" << endl << endl; + + s << "// Classes initialization functions "; + s << "------------------------------------------------------------" << endl; + s << classInitDecl << endl; + + if (!globalEnums.isEmpty()) { + QString converterImpl; + QTextStream convImpl(&converterImpl); + + s << "// Enum definitions "; + s << "------------------------------------------------------------" << endl; + for (const AbstractMetaEnum *cppEnum : qAsConst(globalEnums)) { + if (cppEnum->isAnonymous() || cppEnum->isPrivate()) + continue; + writeEnumConverterFunctions(s, cppEnum); + s << endl; + } + + if (!converterImpl.isEmpty()) { + s << "// Enum converters "; + s << "------------------------------------------------------------" << endl; + s << "namespace Shiboken" << endl << '{' << endl; + s << converterImpl << endl; + s << "} // namespace Shiboken" << endl << endl; + } + } + + const QStringList &requiredModules = typeDb->requiredTargetImports(); + if (!requiredModules.isEmpty()) + s << "// Required modules' type and converter arrays." << endl; + for (const QString &requiredModule : requiredModules) { + s << "PyTypeObject** " << cppApiVariableName(requiredModule) << ';' << endl; + s << "SbkConverter** " << convertersVariableName(requiredModule) << ';' << endl; + } + s << endl; + + s << "// Module initialization "; + s << "------------------------------------------------------------" << endl; + ExtendedConverterData extendedConverters = getExtendedConverters(); + if (!extendedConverters.isEmpty()) { + s << endl << "// Extended Converters." << endl << endl; + for (ExtendedConverterData::const_iterator it = extendedConverters.cbegin(), end = extendedConverters.cend(); it != end; ++it) { + const TypeEntry *externalType = it.key(); + s << "// Extended implicit conversions for " << externalType->qualifiedTargetLangName() << '.' << endl; + for (const AbstractMetaClass *sourceClass : it.value()) { + AbstractMetaType* sourceType = buildAbstractMetaTypeFromAbstractMetaClass(sourceClass); + AbstractMetaType* targetType = buildAbstractMetaTypeFromTypeEntry(externalType); + writePythonToCppConversionFunctions(s, sourceType, targetType); + } + } + } + + const QVector &typeConversions = getPrimitiveCustomConversions(); + if (!typeConversions.isEmpty()) { + s << endl << "// Primitive Type converters." << endl << endl; + for (const CustomConversion *conversion : typeConversions) { + s << "// C++ to Python conversion for type '" << conversion->ownerType()->qualifiedCppName() << "'." << endl; + writeCppToPythonFunction(s, conversion); + writeCustomConverterFunctions(s, conversion); + } + s << endl; + } + + const QVector &containers = instantiatedContainers(); + if (!containers.isEmpty()) { + s << "// Container Type converters." << endl << endl; + for (const AbstractMetaType *container : containers) { + s << "// C++ to Python conversion for type '" << container->cppSignature() << "'." << endl; + writeContainerConverterFunctions(s, container); + } + s << endl; + } + + s << "#if defined _WIN32 || defined __CYGWIN__" << endl; + s << " #define SBK_EXPORT_MODULE __declspec(dllexport)" << endl; + s << "#elif __GNUC__ >= 4" << endl; + s << " #define SBK_EXPORT_MODULE __attribute__ ((visibility(\"default\")))" << endl; + s << "#else" << endl; + s << " #define SBK_EXPORT_MODULE" << endl; + s << "#endif" << endl << endl; + + s << "#ifdef IS_PY3K" << endl; + s << "static struct PyModuleDef moduledef = {" << endl; + s << " /* m_base */ PyModuleDef_HEAD_INIT," << endl; + s << " /* m_name */ \"" << moduleName() << "\"," << endl; + s << " /* m_doc */ 0," << endl; + s << " /* m_size */ -1," << endl; + s << " /* m_methods */ " << moduleName() << "_methods," << endl; + s << " /* m_reload */ 0," << endl; + s << " /* m_traverse */ 0," << endl; + s << " /* m_clear */ 0," << endl; + s << " /* m_free */ 0" << endl; + s << "};" << endl << endl; + s << "#endif" << endl; + s << "SBK_MODULE_INIT_FUNCTION_BEGIN(" << moduleName() << ")" << endl; + + ErrorCode errorCode(QLatin1String("SBK_MODULE_INIT_ERROR")); + // module inject-code target/beginning + if (!snips.isEmpty()) { + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionBeginning, TypeSystem::TargetLangCode); + s << endl; + } + + for (const QString& requiredModule : requiredModules) { + s << INDENT << "{" << endl; + { + Indentation indentation(INDENT); + s << INDENT << "Shiboken::AutoDecRef requiredModule(Shiboken::Module::import(\"" << requiredModule << "\"));" << endl; + s << INDENT << "if (requiredModule.isNull())" << endl; + { + Indentation indentation(INDENT); + s << INDENT << "return SBK_MODULE_INIT_ERROR;" << endl; + } + s << INDENT << cppApiVariableName(requiredModule) << " = Shiboken::Module::getTypes(requiredModule);" << endl; + s << INDENT << convertersVariableName(requiredModule) << " = Shiboken::Module::getTypeConverters(requiredModule);" << endl; + } + s << INDENT << "}" << endl << endl; + } + + int maxTypeIndex = getMaxTypeIndex() + instantiatedSmartPointers().size(); + if (maxTypeIndex) { + s << INDENT << "// Create an array of wrapper types for the current module." << endl; + s << INDENT << "static PyTypeObject* cppApi[SBK_" << moduleName() << "_IDX_COUNT];" << endl; + s << INDENT << cppApiVariableName() << " = cppApi;" << endl << endl; + } + + s << INDENT << "// Create an array of primitive type converters for the current module." << endl; + s << INDENT << "static SbkConverter* sbkConverters[SBK_" << moduleName() << "_CONVERTERS_IDX_COUNT" << "];" << endl; + s << INDENT << convertersVariableName() << " = sbkConverters;" << endl << endl; + + s << "#ifdef IS_PY3K" << endl; + s << INDENT << "PyObject* module = Shiboken::Module::create(\"" << moduleName() << "\", &moduledef);" << endl; + s << "#else" << endl; + s << INDENT << "PyObject* module = Shiboken::Module::create(\"" << moduleName() << "\", "; + s << moduleName() << "_methods);" << endl; + s << "#endif" << endl << endl; + + //s << INDENT << "// Initialize converters for primitive types." << endl; + //s << INDENT << "initConverters();" << endl << endl; + + s << INDENT << "// Initialize classes in the type system" << endl; + s << classPythonDefines; + + if (!typeConversions.isEmpty()) { + s << endl; + for (const CustomConversion *conversion : typeConversions) { + writePrimitiveConverterInitialization(s, conversion); + s << endl; + } + } + + if (!containers.isEmpty()) { + s << endl; + for (const AbstractMetaType *container : containers) { + writeContainerConverterInitialization(s, container); + s << endl; + } + } + + if (!extendedConverters.isEmpty()) { + s << endl; + for (ExtendedConverterData::const_iterator it = extendedConverters.cbegin(), end = extendedConverters.cend(); it != end; ++it) { + writeExtendedConverterInitialization(s, it.key(), it.value()); + s << endl; + } + } + + writeEnumsInitialization(s, globalEnums); + + s << INDENT << "// Register primitive types converters." << endl; + const PrimitiveTypeEntryList &primitiveTypeList = primitiveTypes(); + for (const PrimitiveTypeEntry *pte : primitiveTypeList) { + if (!pte->generateCode() || !pte->isCppPrimitive()) + continue; + const TypeEntry *referencedType = pte->basicReferencedTypeEntry(); + if (!referencedType) + continue; + QString converter = converterObject(referencedType); + QStringList cppSignature = pte->qualifiedCppName().split(QLatin1String("::"), QString::SkipEmptyParts); + while (!cppSignature.isEmpty()) { + QString signature = cppSignature.join(QLatin1String("::")); + s << INDENT << "Shiboken::Conversions::registerConverterName(" << converter << ", \"" << signature << "\");" << endl; + cppSignature.removeFirst(); + } + } + + s << endl; + if (maxTypeIndex) + s << INDENT << "Shiboken::Module::registerTypes(module, " << cppApiVariableName() << ");" << endl; + s << INDENT << "Shiboken::Module::registerTypeConverters(module, " << convertersVariableName() << ");" << endl; + + s << endl << INDENT << "if (PyErr_Occurred()) {" << endl; + { + Indentation indentation(INDENT); + s << INDENT << "PyErr_Print();" << endl; + s << INDENT << "Py_FatalError(\"can't initialize module " << moduleName() << "\");" << endl; + } + s << INDENT << '}' << endl; + + // module inject-code target/end + if (!snips.isEmpty()) { + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionEnd, TypeSystem::TargetLangCode); + s << endl; + } + + // module inject-code native/end + if (!snips.isEmpty()) { + writeCodeSnips(s, snips, TypeSystem::CodeSnipPositionEnd, TypeSystem::NativeCode); + s << endl; + } + + if (usePySideExtensions()) { + for (AbstractMetaEnum *metaEnum : qAsConst(globalEnums)) + if (!metaEnum->isAnonymous()) { + s << INDENT << "qRegisterMetaType< ::" << metaEnum->typeEntry()->qualifiedCppName() << " >(\"" << metaEnum->name() << "\");" << endl; + } + + // cleanup staticMetaObject attribute + s << INDENT << "PySide::registerCleanupFunction(cleanTypesAttributes);" << endl << endl; + + // PYSIDE-510: Create a signatures string for the introspection feature. + s << "// The signatures string for the global functions." << endl; + s << "// Multiple signatures have their index \"n:\" in front." << endl; + s << "const char " << moduleName() << "_SignaturesString[] = \"\"" << endl; + QString line; + while (signatureStream.readLineInto(&line)) + s << INDENT << '"' << line << "\\n\"" << endl; + s << ';' << endl; + // finish the rest of __signature__ initialization. + s << INDENT << "FinishSignatureInitialization(module, " << moduleName() + << "_SignaturesString);" << endl; + // initialize the qApp module. + s << INDENT << "NotifyModuleForQApp(module);" << endl << endl; + } + + s << "SBK_MODULE_INIT_FUNCTION_END" << endl; + + return true; +} + +static ArgumentOwner getArgumentOwner(const AbstractMetaFunction* func, int argIndex) +{ + ArgumentOwner argOwner = func->argumentOwner(func->ownerClass(), argIndex); + if (argOwner.index == ArgumentOwner::InvalidIndex) + argOwner = func->argumentOwner(func->declaringClass(), argIndex); + return argOwner; +} + +bool CppGenerator::writeParentChildManagement(QTextStream& s, const AbstractMetaFunction* func, int argIndex, bool useHeuristicPolicy) +{ + const int numArgs = func->arguments().count(); + bool ctorHeuristicEnabled = func->isConstructor() && useCtorHeuristic() && useHeuristicPolicy; + + bool usePyArgs = pythonFunctionWrapperUsesListOfArguments(OverloadData(getFunctionGroups(func->implementingClass())[func->name()], this)); + + ArgumentOwner argOwner = getArgumentOwner(func, argIndex); + ArgumentOwner::Action action = argOwner.action; + int parentIndex = argOwner.index; + int childIndex = argIndex; + if (ctorHeuristicEnabled && argIndex > 0 && numArgs) { + AbstractMetaArgument* arg = func->arguments().at(argIndex-1); + if (arg->name() == QLatin1String("parent") && isObjectType(arg->type())) { + action = ArgumentOwner::Add; + parentIndex = argIndex; + childIndex = -1; + } + } + + QString parentVariable; + QString childVariable; + if (action != ArgumentOwner::Invalid) { + if (!usePyArgs && argIndex > 1) + qCWarning(lcShiboken).noquote().nospace() + << "Argument index for parent tag out of bounds: " << func->signature(); + + if (action == ArgumentOwner::Remove) { + parentVariable = QLatin1String("Py_None"); + } else { + if (parentIndex == 0) { + parentVariable = QLatin1String(PYTHON_RETURN_VAR); + } else if (parentIndex == -1) { + parentVariable = QLatin1String(PYTHON_SELF_VAR); + } else { + parentVariable = usePyArgs + ? QString::fromLatin1(PYTHON_ARGS "[%1]").arg(parentIndex - 1) + : QLatin1String(PYTHON_ARG); + } + } + + if (childIndex == 0) { + childVariable = QLatin1String(PYTHON_RETURN_VAR); + } else if (childIndex == -1) { + childVariable = QLatin1String(PYTHON_SELF_VAR); + } else { + childVariable = usePyArgs + ? QString::fromLatin1(PYTHON_ARGS "[%1]").arg(childIndex - 1) + : QLatin1String(PYTHON_ARG); + } + + s << INDENT << "Shiboken::Object::setParent(" << parentVariable << ", " << childVariable << ");\n"; + return true; + } + + return false; +} + +void CppGenerator::writeParentChildManagement(QTextStream& s, const AbstractMetaFunction* func, bool useHeuristicForReturn) +{ + const int numArgs = func->arguments().count(); + + // -1 = return value + // 0 = self + // 1..n = func. args. + for (int i = -1; i <= numArgs; ++i) + writeParentChildManagement(s, func, i, useHeuristicForReturn); + + if (useHeuristicForReturn) + writeReturnValueHeuristics(s, func); +} + +void CppGenerator::writeReturnValueHeuristics(QTextStream& s, const AbstractMetaFunction* func, const QString& self) +{ + AbstractMetaType *type = func->type(); + if (!useReturnValueHeuristic() + || !func->ownerClass() + || !type + || func->isStatic() + || func->isConstructor() + || !func->typeReplaced(0).isEmpty()) { + return; + } + + ArgumentOwner argOwner = getArgumentOwner(func, ArgumentOwner::ReturnIndex); + if (argOwner.action == ArgumentOwner::Invalid || argOwner.index != ArgumentOwner::ThisIndex) { + if (isPointerToWrapperType(type)) + s << INDENT << "Shiboken::Object::setParent(" << self << ", " PYTHON_RETURN_VAR ");" << endl; + } +} + +void CppGenerator::writeHashFunction(QTextStream &s, GeneratorContext &context) +{ + const AbstractMetaClass *metaClass = context.metaClass(); + s << "static Py_hash_t " << cpythonBaseName(metaClass) << "_HashFunc(PyObject* self) {" << endl; + writeCppSelfDefinition(s, context); + s << INDENT << "return " << metaClass->typeEntry()->hashFunction() << '('; + s << (isObjectType(metaClass) ? "" : "*") << CPP_SELF_VAR << ");" << endl; + s << '}' << endl << endl; +} + +void CppGenerator::writeStdListWrapperMethods(QTextStream &s, GeneratorContext &context) +{ + const AbstractMetaClass *metaClass = context.metaClass(); + ErrorCode errorCode(0); + + // __len__ + s << "Py_ssize_t " << cpythonBaseName(metaClass->typeEntry()) << "__len__(PyObject* " PYTHON_SELF_VAR ")" << endl; + s << '{' << endl; + writeCppSelfDefinition(s, context); + s << INDENT << "return " CPP_SELF_VAR "->size();" << endl; + s << '}' << endl; + + // __getitem__ + s << "PyObject* " << cpythonBaseName(metaClass->typeEntry()) << "__getitem__(PyObject* " PYTHON_SELF_VAR ", Py_ssize_t _i)" << endl; + s << '{' << endl; + writeCppSelfDefinition(s, context); + writeIndexError(s, QLatin1String("index out of bounds")); + + s << INDENT << metaClass->qualifiedCppName() << "::iterator _item = " CPP_SELF_VAR "->begin();" << endl; + s << INDENT << "for (Py_ssize_t pos = 0; pos < _i; pos++) _item++;" << endl; + + const AbstractMetaType* itemType = metaClass->templateBaseClassInstantiations().constFirst(); + + s << INDENT << "return "; + writeToPythonConversion(s, itemType, metaClass, QLatin1String("*_item")); + s << ';' << endl; + s << '}' << endl; + + // __setitem__ + ErrorCode errorCode2(-1); + s << "int " << cpythonBaseName(metaClass->typeEntry()) << "__setitem__(PyObject* " PYTHON_SELF_VAR ", Py_ssize_t _i, PyObject* pyArg)" << endl; + s << '{' << endl; + writeCppSelfDefinition(s, context); + writeIndexError(s, QLatin1String("list assignment index out of range")); + + s << INDENT << "PythonToCppFunc " << PYTHON_TO_CPP_VAR << ';' << endl; + s << INDENT << "if (!"; + writeTypeCheck(s, itemType, QLatin1String("pyArg"), isNumber(itemType->typeEntry())); + s << ") {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyErr_SetString(PyExc_TypeError, \"attributed value with wrong type, '"; + s << itemType->name() << "' or other convertible type expected\");" << endl; + s << INDENT << "return -1;" << endl; + } + s << INDENT << '}' << endl; + writeArgumentConversion(s, itemType, QLatin1String("cppValue"), QLatin1String("pyArg"), metaClass); + + s << INDENT << metaClass->qualifiedCppName() << "::iterator _item = " CPP_SELF_VAR "->begin();" << endl; + s << INDENT << "for (Py_ssize_t pos = 0; pos < _i; pos++) _item++;" << endl; + s << INDENT << "*_item = cppValue;" << endl; + s << INDENT << "return 0;" << endl; + s << '}' << endl; +} +void CppGenerator::writeIndexError(QTextStream& s, const QString& errorMsg) +{ + s << INDENT << "if (_i < 0 || _i >= (Py_ssize_t) " CPP_SELF_VAR "->size()) {" << endl; + { + Indentation indent(INDENT); + s << INDENT << "PyErr_SetString(PyExc_IndexError, \"" << errorMsg << "\");" << endl; + s << INDENT << "return " << m_currentErrorCode << ';' << endl; + } + s << INDENT << '}' << endl; +} + +QString CppGenerator::writeReprFunction(QTextStream &s, GeneratorContext &context) +{ + const AbstractMetaClass *metaClass = context.metaClass(); + QString funcName = cpythonBaseName(metaClass) + QLatin1String("__repr__"); + s << "extern \"C\"" << endl; + s << '{' << endl; + s << "static PyObject* " << funcName << "(PyObject* self)" << endl; + s << '{' << endl; + writeCppSelfDefinition(s, context); + s << INDENT << "QBuffer buffer;" << endl; + s << INDENT << "buffer.open(QBuffer::ReadWrite);" << endl; + s << INDENT << "QDebug dbg(&buffer);" << endl; + s << INDENT << "dbg << " << (metaClass->typeEntry()->isValue() ? "*" : "") << CPP_SELF_VAR ";" << endl; + s << INDENT << "buffer.close();" << endl; + s << INDENT << "QByteArray str = buffer.data();" << endl; + s << INDENT << "int idx = str.indexOf('(');" << endl; + s << INDENT << "if (idx >= 0)" << endl; + { + Indentation indent(INDENT); + s << INDENT << "str.replace(0, idx, Py_TYPE(self)->tp_name);" << endl; + } + s << INDENT << "PyObject* mod = PyDict_GetItemString(Py_TYPE(self)->tp_dict, \"__module__\");" << endl; + // PYSIDE-595: The introduction of heap types has the side effect that the module name + // is always prepended to the type name. Therefore the strchr check: + s << INDENT << "if (mod && !strchr(str, '.'))" << endl; + { + Indentation indent(INDENT); + s << INDENT << "return Shiboken::String::fromFormat(\"<%s.%s at %p>\", Shiboken::String::toCString(mod), str.constData(), self);" << endl; + } + s << INDENT << "else" << endl; + { + Indentation indent(INDENT); + s << INDENT << "return Shiboken::String::fromFormat(\"<%s at %p>\", str.constData(), self);" << endl; + } + s << '}' << endl; + s << "} // extern C" << endl << endl;; + return funcName; +} diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.h b/sources/shiboken2/generator/shiboken2/cppgenerator.h new file mode 100644 index 0000000..1b59bcd --- /dev/null +++ b/sources/shiboken2/generator/shiboken2/cppgenerator.h @@ -0,0 +1,368 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CPPGENERATOR_H +#define CPPGENERATOR_H + +#include "shibokengenerator.h" + +/** + * The CppGenerator generate the implementations of C++ bindings classes. + */ +class CppGenerator : public ShibokenGenerator +{ +public: + CppGenerator(); +protected: + QString fileNameSuffix() const override; + QString fileNameForContext(GeneratorContext &context) const override; + QVector filterGroupedOperatorFunctions(const AbstractMetaClass* metaClass, + uint query); + void generateClass(QTextStream& s, GeneratorContext &classContext) override; + bool finishGeneration() override; + +private: + void writeConstructorNative(QTextStream& s, const AbstractMetaFunction* func); + void writeDestructorNative(QTextStream& s, const AbstractMetaClass* metaClass); + + QString getVirtualFunctionReturnTypeName(const AbstractMetaFunction* func); + void writeVirtualMethodNative(QTextStream& s, const AbstractMetaFunction* func); + + void writeMetaObjectMethod(QTextStream& s, const AbstractMetaClass* metaClass); + void writeMetaCast(QTextStream& s, const AbstractMetaClass* metaClass); + + void writeEnumConverterFunctions(QTextStream& s, const TypeEntry* enumType); + void writeEnumConverterFunctions(QTextStream& s, const AbstractMetaEnum* metaEnum); + void writeConverterFunctions(QTextStream &s, const AbstractMetaClass *metaClass, + GeneratorContext &classContext); + void writeCustomConverterFunctions(QTextStream& s, const CustomConversion* customConversion); + void writeConverterRegister(QTextStream &s, const AbstractMetaClass *metaClass, + GeneratorContext &classContext); + void writeCustomConverterRegister(QTextStream& s, const CustomConversion* customConversion, const QString& converterVar); + + void writeContainerConverterFunctions(QTextStream& s, const AbstractMetaType* containerType); + + void writeMethodWrapperPreamble(QTextStream &s, OverloadData &overloadData, + GeneratorContext &context); + void writeConstructorWrapper(QTextStream &s, const AbstractMetaFunctionList overloads, GeneratorContext &classContext); + void writeMethodWrapper(QTextStream &s, const AbstractMetaFunctionList overloads, + GeneratorContext &classContext); + void writeArgumentsInitializer(QTextStream& s, OverloadData& overloadData); + void writeCppSelfDefinition(QTextStream &s, + const AbstractMetaFunction *func, + GeneratorContext &context, + bool hasStaticOverload = false); + void writeCppSelfDefinition(QTextStream &s, + GeneratorContext &context, + bool hasStaticOverload = false, + bool cppSelfAsReference = false); + + void writeErrorSection(QTextStream& s, OverloadData& overloadData); + void writeFunctionReturnErrorCheckSection(QTextStream& s, bool hasReturnValue = true); + + /// Writes the check section for the validity of wrapped C++ objects. + void writeInvalidPyObjectCheck(QTextStream& s, const QString& pyObj); + + void writeTypeCheck(QTextStream& s, const AbstractMetaType* argType, QString argumentName, bool isNumber = false, QString customType = QString(), bool rejectNull = false); + void writeTypeCheck(QTextStream& s, const OverloadData* overloadData, QString argumentName); + + void writeTypeDiscoveryFunction(QTextStream& s, const AbstractMetaClass* metaClass); + + void writeSetattroFunction(QTextStream &s, GeneratorContext &context); + void writeGetattroFunction(QTextStream &s, GeneratorContext &context); + QString writeSmartPointerGetterCast(); + + /** + * Writes Python to C++ conversions for arguments on Python wrappers. + * If implicit conversions, and thus new object allocation, are needed, + * code to deallocate a possible new instance is also generated. + * \param s text stream to write + * \param argType a pointer to the argument type to be converted + * \param argName C++ argument name + * \param pyArgName Python argument name + * \param context the current meta class + * \param defaultValue an optional default value to be used instead of the conversion result + * \param castArgumentAsUnused if true the converted argument is cast as unused to avoid compiler warnings + */ + void writeArgumentConversion(QTextStream& s, const AbstractMetaType* argType, + const QString& argName, const QString& pyArgName, + const AbstractMetaClass* context = 0, + const QString& defaultValue = QString(), + bool castArgumentAsUnused = false); + + /** + * Returns the AbstractMetaType for a function argument. + * If the argument type was modified in the type system, this method will + * try to build a new type based on the type name defined in the type system. + * \param func The function which owns the argument. + * \param argPos Argument position in the function signature. + * Note that the position 0 represents the return value, and the function + * parameters start counting on 1. + * \param newType It is set to true if the type returned is a new object that must be deallocated. + * \return The type of the argument indicated by \p argPos. + */ + const AbstractMetaType* getArgumentType(const AbstractMetaFunction* func, int argPos); + + void writePythonToCppTypeConversion(QTextStream& s, + const AbstractMetaType* type, + const QString& pyIn, + const QString& cppOut, + const AbstractMetaClass* context = 0, + const QString& defaultValue = QString()); + + /// Writes the conversion rule for arguments of regular and virtual methods. + void writeConversionRule(QTextStream& s, const AbstractMetaFunction* func, TypeSystem::Language language); + /// Writes the conversion rule for the return value of a method. + void writeConversionRule(QTextStream& s, const AbstractMetaFunction* func, TypeSystem::Language language, const QString& outputVar); + + /** + * Set the Python method wrapper return value variable to Py_None if + * there are return types different from void in any of the other overloads + * for the function passed as parameter. + * \param s text stream to write + * \param func a pointer to the function that will possibly return Py_None + * \param thereIsReturnValue indicates if the return type of any of the other overloads + * for this function is different from 'void' + */ + void writeNoneReturn(QTextStream& s, const AbstractMetaFunction* func, bool thereIsReturnValue); + + /** + * Writes the Python function wrapper overload decisor that selects which C++ + * method/function to call with the received Python arguments. + * \param s text stream to write + * \param overloadData the overload data describing all the possible overloads for the function/method + */ + void writeOverloadedFunctionDecisor(QTextStream& s, const OverloadData& overloadData); + /// Recursive auxiliar method to the other writeOverloadedFunctionDecisor. + void writeOverloadedFunctionDecisorEngine(QTextStream& s, const OverloadData* parentOverloadData); + + /// Writes calls to all the possible method/function overloads. + void writeFunctionCalls(QTextStream &s, + const OverloadData &overloadData, + GeneratorContext &context); + + /// Writes the call to a single function usually from a collection of overloads. + void writeSingleFunctionCall(QTextStream &s, + const OverloadData &overloadData, + const AbstractMetaFunction *func, + GeneratorContext &context); + + /// Returns the name of a C++ to Python conversion function. + static QString cppToPythonFunctionName(const QString& sourceTypeName, QString targetTypeName = QString()); + + /// Returns the name of a Python to C++ conversion function. + static QString pythonToCppFunctionName(const QString& sourceTypeName, const QString& targetTypeName); + static QString pythonToCppFunctionName(const AbstractMetaType* sourceType, const AbstractMetaType* targetType); + static QString pythonToCppFunctionName(const CustomConversion::TargetToNativeConversion* toNative, const TypeEntry* targetType); + + /// Returns the name of a Python to C++ convertible check function. + static QString convertibleToCppFunctionName(const QString& sourceTypeName, const QString& targetTypeName); + static QString convertibleToCppFunctionName(const AbstractMetaType* sourceType, const AbstractMetaType* targetType); + static QString convertibleToCppFunctionName(const CustomConversion::TargetToNativeConversion* toNative, const TypeEntry* targetType); + + /// Writes a C++ to Python conversion function. + void writeCppToPythonFunction(QTextStream& s, const QString& code, const QString& sourceTypeName, QString targetTypeName = QString()); + void writeCppToPythonFunction(QTextStream& s, const CustomConversion* customConversion); + void writeCppToPythonFunction(QTextStream& s, const AbstractMetaType* containerType); + + /// Writes a Python to C++ conversion function. + void writePythonToCppFunction(QTextStream& s, const QString& code, const QString& sourceTypeName, const QString& targetTypeName); + + /// Writes a Python to C++ convertible check function. + void writeIsPythonConvertibleToCppFunction(QTextStream& s, + const QString& sourceTypeName, + const QString& targetTypeName, + const QString& condition, + QString pythonToCppFuncName = QString(), + bool acceptNoneAsCppNull = false); + + /// Writes a pair of Python to C++ conversion and check functions. + void writePythonToCppConversionFunctions(QTextStream& s, + const AbstractMetaType* sourceType, + const AbstractMetaType* targetType, + QString typeCheck = QString(), + QString conversion = QString(), + QString preConversion = QString()); + /// Writes a pair of Python to C++ conversion and check functions for implicit conversions. + void writePythonToCppConversionFunctions(QTextStream& s, + const CustomConversion::TargetToNativeConversion* toNative, + const TypeEntry* targetType); + + /// Writes a pair of Python to C++ conversion and check functions for instantiated container types. + void writePythonToCppConversionFunctions(QTextStream& s, const AbstractMetaType* containerType); + + void writeAddPythonToCppConversion(QTextStream& s, const QString& converterVar, const QString& pythonToCppFunc, const QString& isConvertibleFunc); + + void writeNamedArgumentResolution(QTextStream& s, const AbstractMetaFunction* func, bool usePyArgs); + + /// Returns a string containing the name of an argument for the given function and argument index. + QString argumentNameFromIndex(const AbstractMetaFunction* func, int argIndex, const AbstractMetaClass** wrappedClass); + void writeMethodCall(QTextStream &s, const AbstractMetaFunction *func, + GeneratorContext &context, int maxArgs = 0); + + QString getInitFunctionName(GeneratorContext &context) const; + + void writeClassRegister(QTextStream &s, + const AbstractMetaClass *metaClass, + GeneratorContext &classContext, + QTextStream &signatureStream); + void writeClassDefinition(QTextStream &s, + const AbstractMetaClass *metaClass, + GeneratorContext &classContext); + void writeMethodDefinitionEntry(QTextStream& s, const AbstractMetaFunctionList overloads); + void writeMethodDefinition(QTextStream& s, const AbstractMetaFunctionList overloads); + void writeSignatureInfo(QTextStream &s, const AbstractMetaFunctionList &overloads); + /// Writes the implementation of all methods part of python sequence protocol + void writeSequenceMethods(QTextStream &s, + const AbstractMetaClass *metaClass, + GeneratorContext &context); + void writeTypeAsSequenceDefinition(QTextStream& s, const AbstractMetaClass* metaClass); + + /// Writes the PyMappingMethods structure for types that supports the python mapping protocol. + void writeTypeAsMappingDefinition(QTextStream& s, const AbstractMetaClass* metaClass); + void writeMappingMethods(QTextStream &s, + const AbstractMetaClass *metaClass, + GeneratorContext &context); + + void writeTypeAsNumberDefinition(QTextStream& s, const AbstractMetaClass* metaClass); + + void writeTpTraverseFunction(QTextStream& s, const AbstractMetaClass* metaClass); + void writeTpClearFunction(QTextStream& s, const AbstractMetaClass* metaClass); + + void writeCopyFunction(QTextStream &s, GeneratorContext &context); + + void writeGetterFunction(QTextStream &s, + const AbstractMetaField *metaField, + GeneratorContext &context); + void writeSetterFunction(QTextStream &s, + const AbstractMetaField *metaField, + GeneratorContext &context); + + void writeRichCompareFunction(QTextStream &s, GeneratorContext &context); + + void writeEnumsInitialization(QTextStream& s, AbstractMetaEnumList& enums); + void writeEnumInitialization(QTextStream& s, const AbstractMetaEnum* metaEnum); + + void writeSignalInitialization(QTextStream& s, const AbstractMetaClass* metaClass); + + void writeFlagsMethods(QTextStream& s, const AbstractMetaEnum* cppEnum); + void writeFlagsToLong(QTextStream& s, const AbstractMetaEnum* cppEnum); + void writeFlagsNonZero(QTextStream& s, const AbstractMetaEnum* cppEnum); + void writeFlagsNumberMethodsDefinition(QTextStream& s, const AbstractMetaEnum* cppEnum); + void writeFlagsBinaryOperator(QTextStream& s, const AbstractMetaEnum* cppEnum, + QString pyOpName, QString cppOpName); + void writeFlagsUnaryOperator(QTextStream& s, const AbstractMetaEnum* cppEnum, + QString pyOpName, QString cppOpName, bool boolResult = false); + + /// Writes the function that registers the multiple inheritance information for the classes that need it. + void writeMultipleInheritanceInitializerFunction(QTextStream& s, const AbstractMetaClass* metaClass); + /// Writes the implementation of special cast functions, used when we need to cast a class with multiple inheritance. + void writeSpecialCastFunction(QTextStream& s, const AbstractMetaClass* metaClass); + + void writePrimitiveConverterInitialization(QTextStream& s, const CustomConversion* customConversion); + void writeEnumConverterInitialization(QTextStream& s, const TypeEntry* enumType); + void writeEnumConverterInitialization(QTextStream& s, const AbstractMetaEnum* metaEnum); + void writeContainerConverterInitialization(QTextStream& s, const AbstractMetaType* type); + void writeExtendedConverterInitialization(QTextStream& s, const TypeEntry* externalType, const QVector& conversions); + + void writeParentChildManagement(QTextStream& s, const AbstractMetaFunction* func, bool userHeuristicForReturn); + bool writeParentChildManagement(QTextStream& s, const AbstractMetaFunction* func, int argIndex, bool userHeuristicPolicy); + void writeReturnValueHeuristics(QTextStream& s, const AbstractMetaFunction* func, const QString& self = QLatin1String(PYTHON_SELF_VAR)); + void writeInitQtMetaTypeFunctionBody(QTextStream &s, GeneratorContext &context) const; + + /** + * Returns the multiple inheritance initializer function for the given class. + * \param metaClass the class for whom the function name must be generated. + * \return name of the multiple inheritance information initializer function or + * an empty string if there is no multiple inheritance in its ancestry. + */ + QString multipleInheritanceInitializerFunctionName(const AbstractMetaClass* metaClass); + + /// Returns a list of all classes to which the given class could be cast. + QStringList getAncestorMultipleInheritance(const AbstractMetaClass* metaClass); + + /// Returns true if the given class supports the python number protocol + bool supportsNumberProtocol(const AbstractMetaClass* metaClass); + + /// Returns true if the given class supports the python sequence protocol + bool supportsSequenceProtocol(const AbstractMetaClass* metaClass); + + /// Returns true if the given class supports the python mapping protocol + bool supportsMappingProtocol(const AbstractMetaClass* metaClass); + + /// Returns true if generator should produce getters and setters for the given class. + bool shouldGenerateGetSetList(const AbstractMetaClass* metaClass); + + void writeHashFunction(QTextStream &s, GeneratorContext &context); + + /// Write default implementations for sequence protocol + void writeStdListWrapperMethods(QTextStream &s, GeneratorContext &context); + /// Helper function for writeStdListWrapperMethods. + void writeIndexError(QTextStream& s, const QString& errorMsg); + + QString writeReprFunction(QTextStream &s, GeneratorContext &context); + + bool hasBoolCast(const AbstractMetaClass* metaClass) const; + + // Number protocol structure members names. + static QHash m_nbFuncs; + + // Maps special function names to function parameters and return types + // used by CPython API in the sequence protocol. + QHash > m_sequenceProtocol; + // Sequence protocol structure members names. + static QHash m_sqFuncs; + + // Maps special function names to function parameters and return types + // used by CPython API in the mapping protocol. + QHash > m_mappingProtocol; + // Mapping protocol structure members names. + static QHash m_mpFuncs; + + static QString m_currentErrorCode; + + /// Helper class to set and restore the current error code. + class ErrorCode { + public: + explicit ErrorCode(QString errorCode) { + m_savedErrorCode = CppGenerator::m_currentErrorCode; + CppGenerator::m_currentErrorCode = errorCode; + } + explicit ErrorCode(int errorCode) { + m_savedErrorCode = CppGenerator::m_currentErrorCode; + CppGenerator::m_currentErrorCode = QString::number(errorCode); + } + ~ErrorCode() { + CppGenerator::m_currentErrorCode = m_savedErrorCode; + } + private: + QString m_savedErrorCode; + }; +}; + +#endif // CPPGENERATOR_H diff --git a/sources/shiboken2/generator/shiboken2/headergenerator.cpp b/sources/shiboken2/generator/shiboken2/headergenerator.cpp new file mode 100644 index 0000000..8fde3cd --- /dev/null +++ b/sources/shiboken2/generator/shiboken2/headergenerator.cpp @@ -0,0 +1,593 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "headergenerator.h" +#include +#include +#include +#include + +#include +#include +#include +#include + +QString HeaderGenerator::fileNameSuffix() const +{ + return QLatin1String("_wrapper.h"); +} + +QString HeaderGenerator::fileNameForContext(GeneratorContext &context) const +{ + const AbstractMetaClass *metaClass = context.metaClass(); + if (!context.forSmartPointer()) { + QString fileNameBase = metaClass->qualifiedCppName().toLower(); + fileNameBase.replace(QLatin1String("::"), QLatin1String("_")); + return fileNameBase + fileNameSuffix(); + } else { + const AbstractMetaType *smartPointerType = context.preciseType(); + QString fileNameBase = getFileNameBaseForSmartPointer(smartPointerType, metaClass); + return fileNameBase + fileNameSuffix(); + } +} + +void HeaderGenerator::writeCopyCtor(QTextStream& s, const AbstractMetaClass* metaClass) const +{ + s << INDENT << wrapperName(metaClass) << "(const " << metaClass->qualifiedCppName() << "& self)"; + s << " : " << metaClass->qualifiedCppName() << "(self)" << endl; + s << INDENT << "{" << endl; + s << INDENT << "}" << endl << endl; +} + +void HeaderGenerator::writeProtectedFieldAccessors(QTextStream& s, const AbstractMetaField* field) const +{ + AbstractMetaType *metaType = field->type(); + QString fieldType = metaType->cppSignature(); + QString fieldName = field->enclosingClass()->qualifiedCppName() + QLatin1String("::") + field->name(); + + // Force use of pointer to return internal variable memory + bool useReference = (!metaType->isConstant() && + !metaType->isEnum() && + !metaType->isPrimitive() && + metaType->indirections() == 0); + + + // Get function + s << INDENT << "inline " << fieldType + << (useReference ? '*' : ' ') + << ' ' << protectedFieldGetterName(field) << "()" + << " { return " + << (useReference ? '&' : ' ') << "this->" << fieldName << "; }" << endl; + + // Set function + s << INDENT << "inline void " << protectedFieldSetterName(field) << '(' << fieldType << " value)" + << " { " << fieldName << " = value; }" << endl; +} + +void HeaderGenerator::generateClass(QTextStream &s, GeneratorContext &classContext) +{ + AbstractMetaClass *metaClass = classContext.metaClass(); + if (ReportHandler::isDebug(ReportHandler::SparseDebug)) + qCDebug(lcShiboken) << "Generating header for " << metaClass->fullName(); + m_inheritedOverloads.clear(); + Indentation indent(INDENT); + + // write license comment + s << licenseComment(); + + QString wrapperName; + if (!classContext.forSmartPointer()) { + wrapperName = HeaderGenerator::wrapperName(metaClass); + } else { + wrapperName = HeaderGenerator::wrapperName(classContext.preciseType()); + } + QString outerHeaderGuard = getFilteredCppSignatureString(wrapperName).toUpper(); + QString innerHeaderGuard; + + // Header + s << "#ifndef SBK_" << outerHeaderGuard << "_H" << endl; + s << "#define SBK_" << outerHeaderGuard << "_H" << endl << endl; + + if (!avoidProtectedHack()) + s << "#define protected public" << endl << endl; + + s << "#include " << endl << endl; + + //Includes + s << metaClass->typeEntry()->include() << endl; + + if (shouldGenerateCppWrapper(metaClass) && + usePySideExtensions() && metaClass->isQObject()) + s << "namespace PySide { class DynamicQMetaObject; }\n\n"; + + while (shouldGenerateCppWrapper(metaClass)) { + if (!innerHeaderGuard.isEmpty()) { + s << "# ifndef SBK_" << innerHeaderGuard << "_H" << endl; + s << "# define SBK_" << innerHeaderGuard << "_H" << endl << endl; + s << "// Inherited base class:" << endl; + } + + // Class + s << "class " << wrapperName; + s << " : public " << metaClass->qualifiedCppName(); + + s << endl << '{' << endl << "public:" << endl; + + const AbstractMetaFunctionList &funcs = filterFunctions(metaClass); + for (AbstractMetaFunction *func : funcs) { + if ((func->attributes() & AbstractMetaAttributes::FinalCppMethod) == 0) + writeFunction(s, func); + } + + if (avoidProtectedHack() && metaClass->hasProtectedFields()) { + const AbstractMetaFieldList &fields = metaClass->fields(); + for (AbstractMetaField *field : fields) { + if (!field->isProtected()) + continue; + writeProtectedFieldAccessors(s, field); + } + } + + //destructor + // PYSIDE-504: When C++ 11 is used, then the destructor must always be written. + // See generator.h for further reference. + if (!avoidProtectedHack() || !metaClass->hasPrivateDestructor() || alwaysGenerateDestructor) { + s << INDENT; + if (avoidProtectedHack() && metaClass->hasPrivateDestructor()) + s << "// C++11: need to declare (unimplemented) destructor because " + "the base class destructor is private." << endl; + s << '~' << wrapperName << "();" << endl; + } + + writeCodeSnips(s, metaClass->typeEntry()->codeSnips(), TypeSystem::CodeSnipPositionDeclaration, TypeSystem::NativeCode); + + if ((!avoidProtectedHack() || !metaClass->hasPrivateDestructor()) + && usePySideExtensions() && metaClass->isQObject()) { + s << "public:\n"; + s << INDENT << "int qt_metacall(QMetaObject::Call call, int id, void** args) override;" << endl; + s << INDENT << "void* qt_metacast(const char* _clname) override;" << endl; + } + + if (m_inheritedOverloads.size()) { + s << INDENT << "// Inherited overloads, because the using keyword sux" << endl; + writeInheritedOverloads(s); + m_inheritedOverloads.clear(); + } + + if (usePySideExtensions()) + s << INDENT << "static void pysideInitQtMetaTypes();" << endl; + + s << "};" << endl << endl; + if (!innerHeaderGuard.isEmpty()) + s << "# endif // SBK_" << innerHeaderGuard << "_H" << endl << endl; + + // PYSIDE-500: Use also includes for inherited wrapper classes, because + // without the protected hack, we sometimes need to cast inherited wrappers. + // But we don't use multiple include files. Instead, they are inserted as recursive + // headers. This keeps the file structure as simple as before the enhanced inheritance. + metaClass = metaClass->baseClass(); + if (!metaClass || !avoidProtectedHack()) + break; + classContext = GeneratorContext(metaClass); + if (!classContext.forSmartPointer()) { + wrapperName = HeaderGenerator::wrapperName(metaClass); + } else { + wrapperName = HeaderGenerator::wrapperName(classContext.preciseType()); + } + innerHeaderGuard = getFilteredCppSignatureString(wrapperName).toUpper(); + } + + s << "#endif // SBK_" << outerHeaderGuard << "_H" << endl << endl; +} + +void HeaderGenerator::writeFunction(QTextStream& s, const AbstractMetaFunction* func) +{ + + // do not write copy ctors here. + if (!func->isPrivate() && func->functionType() == AbstractMetaFunction::CopyConstructorFunction) { + writeCopyCtor(s, func->ownerClass()); + return; + } + if (func->isUserAdded()) + return; + + if (avoidProtectedHack() && func->isProtected() && !func->isConstructor() && !func->isOperatorOverload()) { + s << INDENT << "inline " << (func->isStatic() ? "static " : ""); + s << functionSignature(func, QString(), QLatin1String("_protected"), Generator::EnumAsInts|Generator::OriginalTypeDescription) + << " { "; + s << (func->type() ? "return " : ""); + if (!func->isAbstract()) + s << func->ownerClass()->qualifiedCppName() << "::"; + s << func->originalName() << '('; + QStringList args; + const AbstractMetaArgumentList &arguments = func->arguments(); + for (const AbstractMetaArgument *arg : arguments) { + QString argName = arg->name(); + const TypeEntry* enumTypeEntry = 0; + if (arg->type()->isFlags()) + enumTypeEntry = reinterpret_cast(arg->type()->typeEntry())->originator(); + else if (arg->type()->isEnum()) + enumTypeEntry = arg->type()->typeEntry(); + if (enumTypeEntry) + argName = QString::fromLatin1("%1(%2)").arg(arg->type()->cppSignature(), argName); + args << argName; + } + s << args.join(QLatin1String(", ")) << ')'; + s << "; }" << endl; + } + + // pure virtual functions need a default implementation + const bool notAbstract = !func->isAbstract(); + if ((func->isPrivate() && notAbstract && !visibilityModifiedToPrivate(func)) + || (func->isModifiedRemoved() && notAbstract)) + return; + + if (avoidProtectedHack() && func->ownerClass()->hasPrivateDestructor() + && (func->isAbstract() || func->isVirtual())) + return; + + if (func->isConstructor() || func->isAbstract() || func->isVirtual()) { + s << INDENT; + Options virtualOption = Generator::OriginalTypeDescription; + + const bool virtualFunc = func->isVirtual() || func->isAbstract(); + if (!virtualFunc && !func->hasSignatureModifications()) + virtualOption = Generator::NoOption; + + s << functionSignature(func, QString(), QString(), virtualOption); + + if (virtualFunc) + s << " override"; + s << ';' << endl; + // Check if this method hide other methods in base classes + const AbstractMetaFunctionList &ownerFuncs = func->ownerClass()->functions(); + for (const AbstractMetaFunction *f : ownerFuncs) { + if (f != func + && !f->isConstructor() + && !f->isPrivate() + && !f->isVirtual() + && !f->isAbstract() + && !f->isStatic() + && f->name() == func->name()) { + m_inheritedOverloads << f; + } + } + + // TODO: when modified an abstract method ceases to be virtual but stays abstract + //if (func->isModifiedRemoved() && func->isAbstract()) { + //} + } +} + +static void _writeTypeIndexDefineLine(QTextStream& s, const QString& variableName, int typeIndex) +{ + s << "#define "; + s.setFieldWidth(60); + s << variableName; + s.setFieldWidth(0); + s << ' ' << typeIndex << endl; +} +void HeaderGenerator::writeTypeIndexDefineLine(QTextStream& s, const TypeEntry* typeEntry) +{ + if (!typeEntry || !typeEntry->generateCode()) + return; + s.setFieldAlignment(QTextStream::AlignLeft); + int typeIndex = getTypeIndex(typeEntry); + _writeTypeIndexDefineLine(s, getTypeIndexVariableName(typeEntry), typeIndex); + if (typeEntry->isComplex()) { + const ComplexTypeEntry* cType = reinterpret_cast(typeEntry); + if (cType->baseContainerType()) { + const AbstractMetaClass *metaClass = AbstractMetaClass::findClass(classes(), cType); + if (metaClass->templateBaseClass()) + _writeTypeIndexDefineLine(s, getTypeIndexVariableName(metaClass, true), typeIndex); + } + } + if (typeEntry->isEnum()) { + const EnumTypeEntry* ete = reinterpret_cast(typeEntry); + if (ete->flags()) + writeTypeIndexDefineLine(s, ete->flags()); + } +} + +void HeaderGenerator::writeTypeIndexDefine(QTextStream& s, const AbstractMetaClass* metaClass) +{ + if (!metaClass->typeEntry()->generateCode()) + return; + writeTypeIndexDefineLine(s, metaClass->typeEntry()); + const AbstractMetaEnumList &enums = metaClass->enums(); + for (const AbstractMetaEnum *metaEnum : enums) { + if (metaEnum->isPrivate()) + continue; + writeTypeIndexDefineLine(s, metaEnum->typeEntry()); + } +} + +bool HeaderGenerator::finishGeneration() +{ + // Generate the main header for this module. + // This header should be included by binding modules + // extendind on top of this one. + QSet includes; + QString macros; + QTextStream macrosStream(¯os); + QString sbkTypeFunctions; + QTextStream typeFunctions(&sbkTypeFunctions); + QString protectedEnumSurrogates; + QTextStream protEnumsSurrogates(&protectedEnumSurrogates); + + Indentation indent(INDENT); + + macrosStream << "// Type indices" << endl; + AbstractMetaEnumList globalEnums = this->globalEnums(); + const AbstractMetaClassList &classList = classes(); + for (const AbstractMetaClass *metaClass : classList) { + writeTypeIndexDefine(macrosStream, metaClass); + lookForEnumsInClassesNotToBeGenerated(globalEnums, metaClass); + } + + for (const AbstractMetaEnum *metaEnum : qAsConst(globalEnums)) + writeTypeIndexDefineLine(macrosStream, metaEnum->typeEntry()); + + // Write the smart pointer define indexes. + int smartPointerCountIndex = getMaxTypeIndex(); + int smartPointerCount = 0; + const QVector &instantiatedSmartPtrs = instantiatedSmartPointers(); + for (const AbstractMetaType *metaType : instantiatedSmartPtrs) { + QString variableName = getTypeIndexVariableName(metaType); + macrosStream << "#define "; + macrosStream.setFieldWidth(60); + macrosStream << variableName; + macrosStream.setFieldWidth(0); + macrosStream << ' ' << smartPointerCountIndex << " // " << metaType->cppSignature() + << endl; + ++smartPointerCountIndex; + ++smartPointerCount; + } + + + macrosStream << "#define "; + macrosStream.setFieldWidth(60); + macrosStream << QLatin1String("SBK_") + moduleName() + QLatin1String("_IDX_COUNT"); + macrosStream.setFieldWidth(0); + macrosStream << ' ' << getMaxTypeIndex() + smartPointerCount << endl << endl; + macrosStream << "// This variable stores all Python types exported by this module." << endl; + macrosStream << "extern PyTypeObject** " << cppApiVariableName() << ';' << endl << endl; + macrosStream << "// This variable stores all type converters exported by this module." << endl; + macrosStream << "extern SbkConverter** " << convertersVariableName() << ';' << endl << endl; + + // TODO-CONVERTER ------------------------------------------------------------------------------ + // Using a counter would not do, a fix must be made to APIExtractor's getTypeIndex(). + macrosStream << "// Converter indices" << endl; + const PrimitiveTypeEntryList &primitives = primitiveTypes(); + int pCount = 0; + for (const PrimitiveTypeEntry *ptype : primitives) { + /* Note: do not generate indices for typedef'd primitive types + * as they'll use the primitive type converters instead, so we + * don't need to create any other. + */ + if (!ptype->generateCode() || !ptype->customConversion()) + continue; + + _writeTypeIndexDefineLine(macrosStream, getTypeIndexVariableName(ptype), pCount++); + } + + const QVector &containers = instantiatedContainers(); + for (const AbstractMetaType *container : containers) { + //_writeTypeIndexDefineLine(macrosStream, getTypeIndexVariableName(container), pCount); + // DEBUG + QString variableName = getTypeIndexVariableName(container); + macrosStream << "#define "; + macrosStream.setFieldWidth(60); + macrosStream << variableName; + macrosStream.setFieldWidth(0); + macrosStream << ' ' << pCount << " // " << container->cppSignature() << endl; + // DEBUG + pCount++; + } + + // Because on win32 the compiler will not accept a zero length array. + if (pCount == 0) + pCount++; + _writeTypeIndexDefineLine(macrosStream, QStringLiteral("SBK_%1_CONVERTERS_IDX_COUNT").arg(moduleName()), pCount); + macrosStream << endl; + // TODO-CONVERTER ------------------------------------------------------------------------------ + + macrosStream << "// Macros for type check" << endl; + for (const AbstractMetaEnum *cppEnum : qAsConst(globalEnums)) { + if (cppEnum->isAnonymous() || cppEnum->isPrivate()) + continue; + includes << cppEnum->typeEntry()->include(); + writeProtectedEnumSurrogate(protEnumsSurrogates, cppEnum); + writeSbkTypeFunction(typeFunctions, cppEnum); + } + + for (AbstractMetaClass *metaClass : classList) { + if (!shouldGenerate(metaClass)) + continue; + + //Includes + const TypeEntry* classType = metaClass->typeEntry(); + includes << classType->include(); + + const AbstractMetaEnumList &enums = metaClass->enums(); + for (const AbstractMetaEnum *cppEnum : enums) { + if (cppEnum->isAnonymous() || cppEnum->isPrivate()) + continue; + EnumTypeEntry* enumType = cppEnum->typeEntry(); + includes << enumType->include(); + writeProtectedEnumSurrogate(protEnumsSurrogates, cppEnum); + writeSbkTypeFunction(typeFunctions, cppEnum); + } + + if (!metaClass->isNamespace()) + writeSbkTypeFunction(typeFunctions, metaClass); + } + + for (const AbstractMetaType *metaType : instantiatedSmartPtrs) { + const TypeEntry *classType = metaType->typeEntry(); + includes << classType->include(); + writeSbkTypeFunction(typeFunctions, metaType); + } + + QString moduleHeaderFileName(outputDirectory() + + QDir::separator() + subDirectoryForPackage(packageName()) + + QDir::separator() + getModuleHeaderFileName()); + + QString includeShield(QLatin1String("SBK_") + moduleName().toUpper() + QLatin1String("_PYTHON_H")); + + FileOut file(moduleHeaderFileName); + QTextStream& s = file.stream; + // write license comment + s << licenseComment() << endl << endl; + + s << "#ifndef " << includeShield << endl; + s << "#define " << includeShield << endl<< endl; + if (!avoidProtectedHack()) { + s << "//workaround to access protected functions" << endl; + s << "#define protected public" << endl << endl; + } + + s << "#include " << endl; + s << "#include " << endl; + s << "#include " << endl; + s << "#include " << endl; + s << "#include " << endl; + s << "#include " << endl << endl; + if (usePySideExtensions()) + s << "#include " << endl; + + QStringList requiredTargetImports = TypeDatabase::instance()->requiredTargetImports(); + if (!requiredTargetImports.isEmpty()) { + s << "// Module Includes" << endl; + for (const QString &requiredModule : qAsConst(requiredTargetImports)) + s << "#include <" << getModuleHeaderFileName(requiredModule) << ">" << endl; + s << endl; + } + + s << "// Binded library includes" << endl; + for (const Include &include : qAsConst(includes)) + s << include; + + if (!primitiveTypes().isEmpty()) { + s << "// Conversion Includes - Primitive Types" << endl; + const PrimitiveTypeEntryList &primitiveTypeList = primitiveTypes(); + for (const PrimitiveTypeEntry *ptype : primitiveTypeList) + s << ptype->include(); + s << endl; + } + + if (!containerTypes().isEmpty()) { + s << "// Conversion Includes - Container Types" << endl; + const ContainerTypeEntryList &containerTypeList = containerTypes(); + for (const ContainerTypeEntry *ctype : containerTypeList) + s << ctype->include(); + s << endl; + } + + s << macros << endl; + + if (!protectedEnumSurrogates.isEmpty()) { + s << "// Protected enum surrogates" << endl; + s << protectedEnumSurrogates << endl; + } + + s << "namespace Shiboken" << endl << '{' << endl << endl; + + s << "// PyType functions, to get the PyObjectType for a type T\n"; + s << sbkTypeFunctions << endl; + + s << "} // namespace Shiboken" << endl << endl; + + s << "#endif // " << includeShield << endl << endl; + + return file.done() != FileOut::Failure; +} + +void HeaderGenerator::writeProtectedEnumSurrogate(QTextStream& s, const AbstractMetaEnum* cppEnum) +{ + if (avoidProtectedHack() && cppEnum->isProtected()) + s << "enum " << protectedEnumSurrogateName(cppEnum) << " {};" << endl; +} + +void HeaderGenerator::writeSbkTypeFunction(QTextStream& s, const AbstractMetaEnum* cppEnum) +{ + QString enumName; + if (avoidProtectedHack() && cppEnum->isProtected()) { + enumName = protectedEnumSurrogateName(cppEnum); + } else { + enumName = cppEnum->name(); + if (cppEnum->enclosingClass()) + enumName = cppEnum->enclosingClass()->qualifiedCppName() + QLatin1String("::") + enumName; + } + + s << "template<> inline PyTypeObject* SbkType< ::" << enumName << " >() "; + s << "{ return " << cpythonTypeNameExt(cppEnum->typeEntry()) << "; }\n"; + + FlagsTypeEntry* flag = cppEnum->typeEntry()->flags(); + if (flag) { + s << "template<> inline PyTypeObject* SbkType< ::" << flag->name() << " >() " + << "{ return " << cpythonTypeNameExt(flag) << "; }\n"; + } +} + +void HeaderGenerator::writeSbkTypeFunction(QTextStream& s, const AbstractMetaClass* cppClass) +{ + s << "template<> inline PyTypeObject* SbkType< ::" << cppClass->qualifiedCppName() << " >() " + << "{ return reinterpret_cast(" << cpythonTypeNameExt(cppClass->typeEntry()) << "); }\n"; +} + +void HeaderGenerator::writeSbkTypeFunction(QTextStream &s, const AbstractMetaType *metaType) +{ + s << "template<> inline PyTypeObject* SbkType< ::" << metaType->cppSignature() << " >() " + << "{ return reinterpret_cast(" << cpythonTypeNameExt(metaType) << "); }\n"; +} + +void HeaderGenerator::writeInheritedOverloads(QTextStream& s) +{ + for (const AbstractMetaFunction *func : qAsConst(m_inheritedOverloads)) { + s << INDENT << "inline "; + s << functionSignature(func, QString(), QString(), Generator::EnumAsInts|Generator::OriginalTypeDescription) << " { "; + s << (func->type() ? "return " : ""); + s << func->ownerClass()->qualifiedCppName() << "::" << func->originalName() << '('; + QStringList args; + const AbstractMetaArgumentList &arguments = func->arguments(); + for (const AbstractMetaArgument *arg : arguments) { + QString argName = arg->name(); + const TypeEntry* enumTypeEntry = 0; + if (arg->type()->isFlags()) + enumTypeEntry = reinterpret_cast(arg->type()->typeEntry())->originator(); + else if (arg->type()->isEnum()) + enumTypeEntry = arg->type()->typeEntry(); + if (enumTypeEntry) + argName = arg->type()->cppSignature() + QLatin1Char('(') + argName + QLatin1Char(')'); + args << argName; + } + s << args.join(QLatin1String(", ")) << ')'; + s << "; }" << endl; + } +} diff --git a/sources/shiboken2/generator/shiboken2/headergenerator.h b/sources/shiboken2/generator/shiboken2/headergenerator.h new file mode 100644 index 0000000..acf0448 --- /dev/null +++ b/sources/shiboken2/generator/shiboken2/headergenerator.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef HEADERGENERATOR_H +#define HEADERGENERATOR_H + +#include "shibokengenerator.h" + +#include + +class AbstractMetaFunction; + +/** + * The HeaderGenerator generate the declarations of C++ bindings classes. + */ +class HeaderGenerator : public ShibokenGenerator +{ +public: + OptionDescriptions options() const override { return OptionDescriptions(); } +protected: + QString fileNameSuffix() const override; + QString fileNameForContext(GeneratorContext &context) const override; + void generateClass(QTextStream& s, GeneratorContext &classContext) override; + bool finishGeneration() override; + +private: + void writeCopyCtor(QTextStream &s, const AbstractMetaClass* metaClass) const; + void writeProtectedFieldAccessors(QTextStream& s, const AbstractMetaField* field) const; + void writeFunction(QTextStream& s, const AbstractMetaFunction* func); + void writeSbkTypeFunction(QTextStream& s, const AbstractMetaEnum* cppEnum); + void writeSbkTypeFunction(QTextStream& s, const AbstractMetaClass* cppClass); + void writeSbkTypeFunction(QTextStream &s, const AbstractMetaType *metaType); + void writeTypeIndexDefineLine(QTextStream& s, const TypeEntry* typeEntry); + void writeTypeIndexDefine(QTextStream& s, const AbstractMetaClass* metaClass); + void writeProtectedEnumSurrogate(QTextStream& s, const AbstractMetaEnum* cppEnum); + void writeInheritedOverloads(QTextStream& s); + + QSet m_inheritedOverloads; +}; + +#endif // HEADERGENERATOR_H + diff --git a/sources/shiboken2/generator/shiboken2/overloaddata.cpp b/sources/shiboken2/generator/shiboken2/overloaddata.cpp new file mode 100644 index 0000000..73198ba --- /dev/null +++ b/sources/shiboken2/generator/shiboken2/overloaddata.cpp @@ -0,0 +1,1091 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include "overloaddata.h" +#include "shibokengenerator.h" + +#include +#include +#include + +static const TypeEntry *getReferencedTypeEntry(const TypeEntry *typeEntry) +{ + if (typeEntry->isPrimitive()) { + const PrimitiveTypeEntry* pte = dynamic_cast(typeEntry); + while (pte->referencedTypeEntry()) + pte = pte->referencedTypeEntry(); + typeEntry = pte; + } + return typeEntry; +} + +static QString getTypeName(const AbstractMetaType* type) +{ + const TypeEntry* typeEntry = getReferencedTypeEntry(type->typeEntry()); + QString typeName = typeEntry->name(); + if (typeEntry->isContainer()) { + QStringList types; + const AbstractMetaTypeList &instantiations = type->instantiations(); + for (const AbstractMetaType *cType : instantiations) { + const TypeEntry *typeEntry = getReferencedTypeEntry(cType->typeEntry()); + types << typeEntry->name(); + } + typeName += QLatin1Char('<') + types.join(QLatin1Char(',')) + QLatin1String(" >"); + } + return typeName; +} + +static QString getTypeName(const OverloadData* ov) +{ + return ov->hasArgumentTypeReplace() ? ov->argumentTypeReplaced() : getTypeName(ov->argType()); +} + +static bool typesAreEqual(const AbstractMetaType* typeA, const AbstractMetaType* typeB) +{ + if (typeA->typeEntry() == typeB->typeEntry()) { + if (typeA->isContainer() || typeA->isSmartPointer()) { + if (typeA->instantiations().size() != typeB->instantiations().size()) + return false; + + for (int i = 0; i < typeA->instantiations().size(); ++i) { + if (!typesAreEqual(typeA->instantiations().at(i), typeB->instantiations().at(i))) + return false; + } + return true; + } + + return !(ShibokenGenerator::isCString(typeA) ^ ShibokenGenerator::isCString(typeB)); + } + return false; +} + + +/** + * OverloadSortData just helps writing clearer code in the + * OverloadData::sortNextOverloads method. + */ +struct OverloadSortData +{ + OverloadSortData() : counter(0) {} + + /** + * Adds a typeName into the type map without associating it with + * a OverloadData. This is done to express type dependencies that could + * or could not appear in overloaded signatures not processed yet. + */ + void mapType(const QString& typeName) + { + if (map.contains(typeName)) + return; + map[typeName] = counter; + if (!reverseMap.contains(counter)) + reverseMap[counter] = 0; + counter++; + } + + void mapType(OverloadData* overloadData) + { + QString typeName = getTypeName(overloadData); + map[typeName] = counter; + reverseMap[counter] = overloadData; + counter++; + } + + int lastProcessedItemId() { return counter - 1; } + + int counter; + QHash map; // typeName -> id + QHash reverseMap; // id -> OverloadData; +}; + +/** + * Helper function that returns the name of a container get from containerType argument and + * an instantiation taken either from an implicit conversion expressed by the function argument, + * or from the string argument implicitConvTypeName. + */ +static QString getImplicitConversionTypeName(const AbstractMetaType* containerType, + const AbstractMetaType* instantiation, + const AbstractMetaFunction* function, + const QString& implicitConvTypeName = QString()) +{ + QString impConv; + if (!implicitConvTypeName.isEmpty()) + impConv = implicitConvTypeName; + else if (function->isConversionOperator()) + impConv = function->ownerClass()->typeEntry()->name(); + else + impConv = getTypeName(function->arguments().constFirst()->type()); + + QStringList types; + const AbstractMetaTypeList &instantiations = containerType->instantiations(); + for (const AbstractMetaType *otherType : instantiations) + types << (otherType == instantiation ? impConv : getTypeName(otherType)); + + const ContainerTypeEntry* containerTypeEntry = dynamic_cast(containerType->typeEntry()); + return containerTypeEntry->qualifiedCppName() + QLatin1Char('<') + + types.join(QLatin1String(", ")) + QLatin1String(" >"); +} + +static QString msgCyclicDependency(const QString &funcName, const QString &graphName, + const OverloadData::MetaFunctionList &involvedConversions) +{ + QString result; + QTextStream str(&result); + str << "Cyclic dependency found on overloaddata for \"" << funcName + << "\" method! The graph boy saved the graph at \"" << QDir::toNativeSeparators(graphName) + << "\"."; + if (const int count = involvedConversions.size()) { + str << " Implicit conversions (" << count << "): "; + for (int i = 0; i < count; ++i) { + if (i) + str << ", \""; + str << involvedConversions.at(i)->signature() << '"'; + if (const AbstractMetaClass *c = involvedConversions.at(i)->implementingClass()) + str << '(' << c->name() << ')'; + } + } + return result; +} + +/** + * Topologically sort the overloads by implicit convertion order + * + * This avoids using an implicit conversion if there's an explicit + * overload for the convertible type. So, if there's an implicit convert + * like TargetType(ConvertibleType foo) and both are in the overload list, + * ConvertibleType is checked before TargetType. + * + * Side effects: Modifies m_nextOverloadData + */ +void OverloadData::sortNextOverloads() +{ + OverloadSortData sortData; + bool checkPyObject = false; + int pyobjectIndex = 0; + bool checkPySequence = false; + int pySeqIndex = 0; + bool checkQString = false; + int qstringIndex = 0; + bool checkQVariant = false; + int qvariantIndex = 0; + bool checkPyBuffer = false; + int pyBufferIndex = 0; + + // Primitive types that are not int, long, short, + // char and their respective unsigned counterparts. + QStringList nonIntegerPrimitives; + nonIntegerPrimitives << QLatin1String("float") << QLatin1String("double") + << QLatin1String("bool"); + + // Signed integer primitive types. + QStringList signedIntegerPrimitives; + signedIntegerPrimitives << QLatin1String("int") << QLatin1String("short") + << QLatin1String("long"); + + // sort the children overloads + for (OverloadData *ov : qAsConst(m_nextOverloadData)) + ov->sortNextOverloads(); + + if (m_nextOverloadData.size() <= 1) + return; + + // Populates the OverloadSortData object containing map and reverseMap, to map type names to ids, + // these ids will be used by the topological sort algorithm, because is easier and faster to work + // with graph sorting using integers. + for (OverloadData *ov : qAsConst(m_nextOverloadData)) { + sortData.mapType(ov); + + const QString typeName(getTypeName(ov)); + + if (!checkPyObject && typeName.contains(QLatin1String("PyObject"))) { + checkPyObject = true; + pyobjectIndex = sortData.lastProcessedItemId(); + } else if (!checkPySequence && typeName == QLatin1String("PySequence")) { + checkPySequence = true; + pySeqIndex = sortData.lastProcessedItemId(); + } else if (!checkPyBuffer && typeName == QLatin1String("PyBuffer")) { + checkPyBuffer = true; + pyBufferIndex = sortData.lastProcessedItemId(); + } else if (!checkQVariant && typeName == QLatin1String("QVariant")) { + checkQVariant = true; + qvariantIndex = sortData.lastProcessedItemId(); + } else if (!checkQString && typeName == QLatin1String("QString")) { + checkQString = true; + qstringIndex = sortData.lastProcessedItemId(); + } + + const AbstractMetaTypeList &instantiations = ov->argType()->instantiations(); + for (const AbstractMetaType *instantiation : instantiations) { + // Add dependencies for type instantiation of container. + QString typeName = getTypeName(instantiation); + sortData.mapType(typeName); + + // Build dependency for implicit conversion types instantiations for base container. + // For example, considering signatures "method(list)" and "method(list)", + // and being PointF implicitly convertible from Point, an list instantiation with T + // as Point must come before the PointF instantiation, or else list will never + // be called. In the case of primitive types, list must come before list. + if (instantiation->isPrimitive() && (signedIntegerPrimitives.contains(instantiation->name()))) { + for (const QString &primitive : qAsConst(nonIntegerPrimitives)) + sortData.mapType(getImplicitConversionTypeName(ov->argType(), instantiation, 0, primitive)); + } else { + const AbstractMetaFunctionList &funcs = m_generator->implicitConversions(instantiation); + for (const AbstractMetaFunction *function : funcs) + sortData.mapType(getImplicitConversionTypeName(ov->argType(), instantiation, function)); + } + } + } + + + // Create the graph of type dependencies based on implicit conversions. + Graph graph(sortData.reverseMap.count()); + // All C++ primitive types, add any forgotten type AT THE END OF THIS LIST! + const char* primitiveTypes[] = {"int", + "unsigned int", + "long", + "unsigned long", + "short", + "unsigned short", + "bool", + "unsigned char", + "char", + "float", + "double", + "const char*" + }; + const int numPrimitives = sizeof(primitiveTypes)/sizeof(const char*); + bool hasPrimitive[numPrimitives]; + for (int i = 0; i < numPrimitives; ++i) + hasPrimitive[i] = sortData.map.contains(QLatin1String(primitiveTypes[i])); + + if (checkPySequence && checkPyObject) + graph.addEdge(pySeqIndex, pyobjectIndex); + + QStringList classesWithIntegerImplicitConversion; + + MetaFunctionList involvedConversions; + + for (OverloadData *ov : qAsConst(m_nextOverloadData)) { + const AbstractMetaType* targetType = ov->argType(); + const QString targetTypeEntryName(getTypeName(ov)); + int targetTypeId = sortData.map[targetTypeEntryName]; + + // Process implicit conversions + const AbstractMetaFunctionList &functions = m_generator->implicitConversions(targetType); + for (AbstractMetaFunction *function : functions) { + QString convertibleType; + if (function->isConversionOperator()) + convertibleType = function->ownerClass()->typeEntry()->name(); + else + convertibleType = getTypeName(function->arguments().constFirst()->type()); + + if (convertibleType == QLatin1String("int") || convertibleType == QLatin1String("unsigned int")) + classesWithIntegerImplicitConversion << targetTypeEntryName; + + if (!sortData.map.contains(convertibleType)) + continue; + + int convertibleTypeId = sortData.map[convertibleType]; + + // If a reverse pair already exists, remove it. Probably due to the + // container check (This happened to QVariant and QHash) + graph.removeEdge(targetTypeId, convertibleTypeId); + graph.addEdge(convertibleTypeId, targetTypeId); + involvedConversions.append(function); + } + + // Process inheritance relationships + if (targetType->isValue() || targetType->isObject() || targetType->isQObject()) { + const AbstractMetaClass *metaClass = AbstractMetaClass::findClass(m_generator->classes(), targetType->typeEntry()); + const AbstractMetaClassList &ancestors = m_generator->getAllAncestors(metaClass); + for (const AbstractMetaClass *ancestor : ancestors) { + QString ancestorTypeName = ancestor->typeEntry()->name(); + if (!sortData.map.contains(ancestorTypeName)) + continue; + int ancestorTypeId = sortData.map[ancestorTypeName]; + graph.removeEdge(ancestorTypeId, targetTypeId); + graph.addEdge(targetTypeId, ancestorTypeId); + } + } + + // Process template instantiations + const AbstractMetaTypeList &instantiations = targetType->instantiations(); + for (const AbstractMetaType *instantiation : instantiations) { + if (sortData.map.contains(getTypeName(instantiation))) { + int convertible = sortData.map[getTypeName(instantiation)]; + + if (!graph.containsEdge(targetTypeId, convertible)) // Avoid cyclic dependency. + graph.addEdge(convertible, targetTypeId); + + if (instantiation->isPrimitive() && (signedIntegerPrimitives.contains(instantiation->name()))) { + for (const QString &primitive : qAsConst(nonIntegerPrimitives)) { + QString convertibleTypeName = getImplicitConversionTypeName(ov->argType(), instantiation, 0, primitive); + if (!graph.containsEdge(targetTypeId, sortData.map[convertibleTypeName])) // Avoid cyclic dependency. + graph.addEdge(sortData.map[convertibleTypeName], targetTypeId); + } + + } else { + const AbstractMetaFunctionList &funcs = m_generator->implicitConversions(instantiation); + for (const AbstractMetaFunction *function : funcs) { + QString convertibleTypeName = getImplicitConversionTypeName(ov->argType(), instantiation, function); + if (!graph.containsEdge(targetTypeId, sortData.map[convertibleTypeName])) { // Avoid cyclic dependency. + graph.addEdge(sortData.map[convertibleTypeName], targetTypeId); + involvedConversions.append(function); + } + } + } + } + } + + + if ((checkPySequence || checkPyObject || checkPyBuffer) + && !targetTypeEntryName.contains(QLatin1String("PyObject")) + && !targetTypeEntryName.contains(QLatin1String("PyBuffer")) + && !targetTypeEntryName.contains(QLatin1String("PySequence"))) { + if (checkPySequence) { + // PySequence will be checked after all more specific types, but before PyObject. + graph.addEdge(targetTypeId, pySeqIndex); + } else if (checkPyBuffer) { + // PySequence will be checked after all more specific types, but before PyObject. + graph.addEdge(targetTypeId, pyBufferIndex); + } else { + // Add dependency on PyObject, so its check is the last one (too generic). + graph.addEdge(targetTypeId, pyobjectIndex); + } + } else if (checkQVariant && targetTypeEntryName != QLatin1String("QVariant")) { + if (!graph.containsEdge(qvariantIndex, targetTypeId)) // Avoid cyclic dependency. + graph.addEdge(targetTypeId, qvariantIndex); + } else if (checkQString && ShibokenGenerator::isPointer(ov->argType()) + && targetTypeEntryName != QLatin1String("QString") + && targetTypeEntryName != QLatin1String("QByteArray") + && (!checkPyObject || targetTypeId != pyobjectIndex)) { + if (!graph.containsEdge(qstringIndex, targetTypeId)) // Avoid cyclic dependency. + graph.addEdge(targetTypeId, qstringIndex); + } + + if (targetType->isEnum()) { + // Enum values must precede primitive types. + for (int i = 0; i < numPrimitives; ++i) { + if (hasPrimitive[i]) + graph.addEdge(targetTypeId, sortData.map[QLatin1String(primitiveTypes[i])]); + } + } + } + + // QByteArray args need to be checked after QString args + if (sortData.map.contains(QLatin1String("QString")) && sortData.map.contains(QLatin1String("QByteArray"))) + graph.addEdge(sortData.map[QLatin1String("QString")], sortData.map[QLatin1String("QByteArray")]); + + for (OverloadData *ov : qAsConst(m_nextOverloadData)) { + const AbstractMetaType* targetType = ov->argType(); + if (!targetType->isEnum()) + continue; + + QString targetTypeEntryName = getTypeName(targetType); + // Enum values must precede types implicitly convertible from "int" or "unsigned int". + for (const QString &implicitFromInt : qAsConst(classesWithIntegerImplicitConversion)) + graph.addEdge(sortData.map[targetTypeEntryName], sortData.map[implicitFromInt]); + } + + + // Special case for double(int i) (not tracked by m_generator->implicitConversions + for (const QString &signedIntegerName : qAsConst(signedIntegerPrimitives)) { + if (sortData.map.contains(signedIntegerName)) { + for (const QString &nonIntegerName : qAsConst(nonIntegerPrimitives)) { + if (sortData.map.contains(nonIntegerName)) + graph.addEdge(sortData.map[nonIntegerName], sortData.map[signedIntegerName]); + } + } + } + + // sort the overloads topologically based on the dependency graph. + const QLinkedList unmappedResult = graph.topologicalSort(); + if (unmappedResult.isEmpty()) { + QString funcName = referenceFunction()->name(); + if (referenceFunction()->ownerClass()) + funcName.prepend(referenceFunction()->ownerClass()->name() + QLatin1Char('.')); + + // Dump overload graph + QString graphName = QDir::tempPath() + QLatin1Char('/') + funcName + QLatin1String(".dot"); + QHash nodeNames; + for (auto it = sortData.map.cbegin(), end = sortData.map.cend(); it != end; ++it) + nodeNames.insert(it.value(), it.key()); + graph.dumpDot(nodeNames, graphName); + qCWarning(lcShiboken).noquote() << qPrintable(msgCyclicDependency(funcName, graphName, involvedConversions)); + } + + m_nextOverloadData.clear(); + for (int i : unmappedResult) { + if (!sortData.reverseMap[i]) + continue; + m_nextOverloadData << sortData.reverseMap[i]; + } +} + +/** + * Root constructor for OverloadData + * + * This constructor receives the list of overloads for a given function and iterates generating + * the graph of OverloadData instances. Each OverloadData instance references an argument/type + * combination. + * + * Example: + * addStuff(double, PyObject *) + * addStuff(double, int) + * + * Given these two overloads, there will be the following graph: + * + * addStuff - double - PyObject* + * \- int + * + */ +OverloadData::OverloadData(const AbstractMetaFunctionList& overloads, const ShibokenGenerator* generator) + : m_minArgs(256), m_maxArgs(0), m_argPos(-1), m_argType(0), + m_headOverloadData(this), m_previousOverloadData(0), m_generator(generator) +{ + for (const AbstractMetaFunction *func : overloads) { + m_overloads.append(func); + int argSize = func->arguments().size() - numberOfRemovedArguments(func); + if (m_minArgs > argSize) + m_minArgs = argSize; + else if (m_maxArgs < argSize) + m_maxArgs = argSize; + OverloadData* currentOverloadData = this; + const AbstractMetaArgumentList &arguments = func->arguments(); + for (const AbstractMetaArgument *arg : arguments) { + if (func->argumentRemoved(arg->argumentIndex() + 1)) + continue; + currentOverloadData = currentOverloadData->addOverloadData(func, arg); + } + } + + // Sort the overload possibilities so that the overload decisor code goes for the most + // important cases first, based on the topological order of the implicit conversions + sortNextOverloads(); + + // Fix minArgs + if (minArgs() > maxArgs()) + m_headOverloadData->m_minArgs = maxArgs(); +} + +OverloadData::OverloadData(OverloadData* headOverloadData, const AbstractMetaFunction* func, + const AbstractMetaType* argType, int argPos) + : m_minArgs(256), m_maxArgs(0), m_argPos(argPos), m_argType(argType), + m_headOverloadData(headOverloadData), m_previousOverloadData(0) +{ + if (func) + this->addOverload(func); +} + +void OverloadData::addOverload(const AbstractMetaFunction* func) +{ + int origNumArgs = func->arguments().size(); + int removed = numberOfRemovedArguments(func); + int numArgs = origNumArgs - removed; + + if (numArgs > m_headOverloadData->m_maxArgs) + m_headOverloadData->m_maxArgs = numArgs; + + if (numArgs < m_headOverloadData->m_minArgs) + m_headOverloadData->m_minArgs = numArgs; + + for (int i = 0; m_headOverloadData->m_minArgs > 0 && i < origNumArgs; i++) { + if (func->argumentRemoved(i + 1)) + continue; + if (!ShibokenGenerator::getDefaultValue(func, func->arguments().at(i)).isEmpty()) { + int fixedArgIndex = i - removed; + if (fixedArgIndex < m_headOverloadData->m_minArgs) + m_headOverloadData->m_minArgs = fixedArgIndex; + } + } + + m_overloads.append(func); +} + +OverloadData* OverloadData::addOverloadData(const AbstractMetaFunction* func, + const AbstractMetaArgument* arg) +{ + const AbstractMetaType* argType = arg->type(); + OverloadData* overloadData = 0; + if (!func->isOperatorOverload()) { + for (OverloadData *tmp : qAsConst(m_nextOverloadData)) { + // TODO: 'const char *', 'char *' and 'char' will have the same TypeEntry? + + // If an argument have a type replacement, then we should create a new overloaddata + // for it, unless the next argument also have a identical type replacement. + QString replacedArg = func->typeReplaced(tmp->m_argPos + 1); + bool argsReplaced = !replacedArg.isEmpty() || !tmp->m_argTypeReplaced.isEmpty(); + if ((!argsReplaced && typesAreEqual(tmp->m_argType, argType)) + || (argsReplaced && replacedArg == tmp->argumentTypeReplaced())) { + tmp->addOverload(func); + overloadData = tmp; + } + } + } + + if (!overloadData) { + overloadData = new OverloadData(m_headOverloadData, func, argType, m_argPos + 1); + overloadData->m_previousOverloadData = this; + overloadData->m_generator = this->m_generator; + QString typeReplaced = func->typeReplaced(arg->argumentIndex() + 1); + + if (!typeReplaced.isEmpty()) + overloadData->m_argTypeReplaced = typeReplaced; + m_nextOverloadData.append(overloadData); + } + + return overloadData; +} + +QStringList OverloadData::returnTypes() const +{ + QSet retTypes; + for (const AbstractMetaFunction *func : m_overloads) { + if (!func->typeReplaced(0).isEmpty()) + retTypes << func->typeReplaced(0); + else if (func->type() && !func->argumentRemoved(0)) + retTypes << func->type()->cppSignature(); + else + retTypes << QLatin1String("void"); + } + return QStringList(retTypes.toList()); +} + +bool OverloadData::hasNonVoidReturnType() const +{ + QStringList retTypes = returnTypes(); + return !retTypes.contains(QLatin1String("void")) || retTypes.size() > 1; +} + +bool OverloadData::hasVarargs() const +{ + for (const AbstractMetaFunction *func : m_overloads) { + AbstractMetaArgumentList args = func->arguments(); + if (args.size() > 1 && args.constLast()->type()->isVarargs()) + return true; + } + return false; +} + +bool OverloadData::hasAllowThread() const +{ + for (const AbstractMetaFunction *func : m_overloads) { + if (func->allowThread()) + return true; + } + return false; +} + +bool OverloadData::hasStaticFunction(const AbstractMetaFunctionList& overloads) +{ + for (const AbstractMetaFunction *func : qAsConst(overloads)) { + if (func->isStatic()) + return true; + } + return false; +} + +bool OverloadData::hasStaticFunction() const +{ + for (const AbstractMetaFunction *func : m_overloads) { + if (func->isStatic()) + return true; + } + return false; +} + +bool OverloadData::hasInstanceFunction(const AbstractMetaFunctionList& overloads) +{ + for (const AbstractMetaFunction *func : qAsConst(overloads)) { + if (!func->isStatic()) + return true; + } + return false; +} + +bool OverloadData::hasInstanceFunction() const +{ + for (const AbstractMetaFunction *func : m_overloads) { + if (!func->isStatic()) + return true; + } + return false; +} + +bool OverloadData::hasStaticAndInstanceFunctions(const AbstractMetaFunctionList& overloads) +{ + return OverloadData::hasStaticFunction(overloads) && OverloadData::hasInstanceFunction(overloads); +} + +bool OverloadData::hasStaticAndInstanceFunctions() const +{ + return OverloadData::hasStaticFunction() && OverloadData::hasInstanceFunction(); +} + +const AbstractMetaFunction* OverloadData::referenceFunction() const +{ + return m_overloads.constFirst(); +} + +const AbstractMetaArgument* OverloadData::argument(const AbstractMetaFunction* func) const +{ + if (isHeadOverloadData() || !m_overloads.contains(func)) + return 0; + + int argPos = 0; + int removed = 0; + for (int i = 0; argPos <= m_argPos; i++) { + if (func->argumentRemoved(i + 1)) + removed++; + else + argPos++; + } + + return func->arguments().at(m_argPos + removed); +} + +OverloadDataList OverloadData::overloadDataOnPosition(OverloadData* overloadData, int argPos) const +{ + OverloadDataList overloadDataList; + if (overloadData->argPos() == argPos) { + overloadDataList.append(overloadData); + } else if (overloadData->argPos() < argPos) { + const OverloadDataList &data = overloadData->nextOverloadData(); + for (OverloadData *pd : data) + overloadDataList += overloadDataOnPosition(pd, argPos); + } + return overloadDataList; +} + +OverloadDataList OverloadData::overloadDataOnPosition(int argPos) const +{ + OverloadDataList overloadDataList; + overloadDataList += overloadDataOnPosition(m_headOverloadData, argPos); + return overloadDataList; +} + +bool OverloadData::nextArgumentHasDefaultValue() const +{ + for (OverloadData *overloadData : m_nextOverloadData) { + if (overloadData->getFunctionWithDefaultValue()) + return true; + } + return false; +} + +static OverloadData* _findNextArgWithDefault(OverloadData* overloadData) +{ + if (overloadData->getFunctionWithDefaultValue()) + return overloadData; + + OverloadData* result = 0; + const OverloadDataList &data = overloadData->nextOverloadData(); + for (OverloadData *odata : data) { + OverloadData* tmp = _findNextArgWithDefault(odata); + if (!result || (tmp && result->argPos() > tmp->argPos())) + result = tmp; + } + return result; +} + +OverloadData* OverloadData::findNextArgWithDefault() +{ + return _findNextArgWithDefault(this); +} + +bool OverloadData::isFinalOccurrence(const AbstractMetaFunction* func) const +{ + for (const OverloadData *pd : m_nextOverloadData) { + if (pd->overloads().contains(func)) + return false; + } + return true; +} + +OverloadData::MetaFunctionList OverloadData::overloadsWithoutRepetition() const +{ + MetaFunctionList overloads = m_overloads; + for (const AbstractMetaFunction *func : m_overloads) { + if (func->minimalSignature().endsWith(QLatin1String("const"))) + continue; + for (const AbstractMetaFunction *f : qAsConst(overloads)) { + if ((func->minimalSignature() + QLatin1String("const")) == f->minimalSignature()) { + overloads.removeOne(f); + break; + } + } + } + return overloads; +} + +const AbstractMetaFunction* OverloadData::getFunctionWithDefaultValue() const +{ + for (const AbstractMetaFunction *func : m_overloads) { + int removedArgs = 0; + for (int i = 0; i <= m_argPos + removedArgs; i++) { + if (func->argumentRemoved(i + 1)) + removedArgs++; + } + if (!ShibokenGenerator::getDefaultValue(func, func->arguments().at(m_argPos + removedArgs)).isEmpty()) + return func; + } + return 0; +} + +QVector OverloadData::invalidArgumentLengths() const +{ + QSet validArgLengths; + + for (const AbstractMetaFunction *func : qAsConst(m_headOverloadData->m_overloads)) { + const AbstractMetaArgumentList args = func->arguments(); + int offset = 0; + for (int i = 0; i < args.size(); ++i) { + if (func->argumentRemoved(i+1)) { + offset++; + } else { + if (!ShibokenGenerator::getDefaultValue(func, args[i]).isEmpty()) + validArgLengths << i-offset; + } + } + validArgLengths << args.size() - offset; + } + + QVector invalidArgLengths; + for (int i = minArgs() + 1; i < maxArgs(); i++) { + if (!validArgLengths.contains(i)) + invalidArgLengths.append(i); + } + + return invalidArgLengths; +} + +int OverloadData::numberOfRemovedArguments(const AbstractMetaFunction* func, int finalArgPos) +{ + int removed = 0; + if (finalArgPos < 0) { + for (int i = 0; i < func->arguments().size(); i++) { + if (func->argumentRemoved(i + 1)) + removed++; + } + } else { + for (int i = 0; i < finalArgPos + removed; i++) { + if (func->argumentRemoved(i + 1)) + removed++; + } + } + return removed; +} + +QPair OverloadData::getMinMaxArguments(const AbstractMetaFunctionList& overloads) +{ + int minArgs = 10000; + int maxArgs = 0; + for (int i = 0; i < overloads.size(); i++) { + const AbstractMetaFunction* func = overloads[i]; + int origNumArgs = func->arguments().size(); + int removed = numberOfRemovedArguments(func); + int numArgs = origNumArgs - removed; + if (maxArgs < numArgs) + maxArgs = numArgs; + if (minArgs > numArgs) + minArgs = numArgs; + for (int j = 0; j < origNumArgs; j++) { + if (func->argumentRemoved(j + 1)) + continue; + int fixedArgIndex = j - removed; + if (fixedArgIndex < minArgs && !ShibokenGenerator::getDefaultValue(func, func->arguments().at(j)).isEmpty()) + minArgs = fixedArgIndex; + } + } + return QPair(minArgs, maxArgs); +} + +bool OverloadData::isSingleArgument(const AbstractMetaFunctionList& overloads) +{ + bool singleArgument = true; + for (const AbstractMetaFunction *func : overloads) { + if (func->arguments().size() - numberOfRemovedArguments(func) != 1) { + singleArgument = false; + break; + } + } + return singleArgument; +} + +void OverloadData::dumpGraph(QString filename) const +{ + QFile file(filename); + if (file.open(QFile::WriteOnly)) { + QTextStream s(&file); + s << m_headOverloadData->dumpGraph(); + } +} + +static inline QString toHtml(QString s) +{ + s.replace(QLatin1Char('<'), QLatin1String("<")); + s.replace(QLatin1Char('>'), QLatin1String(">")); + s.replace(QLatin1Char('&'), QLatin1String("&")); + return s; +} + +QString OverloadData::dumpGraph() const +{ + QString indent(4, QLatin1Char(' ')); + QString result; + QTextStream s(&result); + if (m_argPos == -1) { + const AbstractMetaFunction* rfunc = referenceFunction(); + s << "digraph OverloadedFunction {" << endl; + s << indent << "graph [fontsize=12 fontname=freemono labelloc=t splines=true overlap=false rankdir=LR];" << endl; + + // Shows all function signatures + s << "legend [fontsize=9 fontname=freemono shape=rect label=\""; + for (const AbstractMetaFunction *func : m_overloads) { + s << "f" << functionNumber(func) << " : "; + if (func->type()) + s << toHtml(func->type()->cppSignature()); + else + s << "void"; + s << ' ' << toHtml(func->minimalSignature()) << "\\l"; + } + s << "\"];" << endl; + + // Function box title + s << indent << '"' << rfunc->name() << "\" [shape=plaintext style=\"filled,bold\" margin=0 fontname=freemono fillcolor=white penwidth=1 "; + s << "label=<"; + s << ""; + + // Function return type + s << ""; + + // Shows type changes for all function signatures + for (const AbstractMetaFunction *func : m_overloads) { + if (func->typeReplaced(0).isEmpty()) + continue; + s << ""; + } + + // Minimum and maximum number of arguments + s << ""; + s << ""; + + if (rfunc->ownerClass()) { + if (rfunc->implementingClass() != rfunc->ownerClass()) + s << ""; + if (rfunc->declaringClass() != rfunc->ownerClass() && rfunc->declaringClass() != rfunc->implementingClass()) + s << ""; + } + + // Overloads for the signature to present point + s << ""; + + s << "
"; + if (rfunc->ownerClass()) + s << rfunc->ownerClass()->name() << "::"; + s << toHtml(rfunc->name()) << ""; + if (rfunc->isVirtual()) { + s << "
<<"; + if (rfunc->isAbstract()) + s << "pure "; + s << "virtual>>"; + } + s << "
original type"; + if (rfunc->type()) + s << toHtml(rfunc->type()->cppSignature()); + else + s << "void"; + s << "
f" << functionNumber(func); + s << "-type"; + s << toHtml(func->typeReplaced(0)) << "
minArgs"; + s << minArgs() << "
maxArgs"; + s << maxArgs() << "
implementor" << rfunc->implementingClass()->name() << "
declarator" << rfunc->declaringClass()->name() << "
overloads"; + for (const AbstractMetaFunction *func : m_overloads) + s << 'f' << functionNumber(func) << ' '; + s << "
> ];" << endl; + + for (const OverloadData *pd : m_nextOverloadData) + s << indent << '"' << rfunc->name() << "\" -> " << pd->dumpGraph(); + + s << "}" << endl; + } else { + QString argId = QLatin1String("arg_") + QString::number(quintptr(this)); + s << argId << ';' << endl; + + s << indent << '"' << argId << "\" [shape=\"plaintext\" style=\"filled,bold\" margin=\"0\" fontname=\"freemono\" fillcolor=\"white\" penwidth=1 "; + s << "label=<"; + + // Argument box title + s << ""; + + // Argument type information + QString type = hasArgumentTypeReplace() ? argumentTypeReplaced() : argType()->cppSignature(); + s << ""; + if (hasArgumentTypeReplace()) { + s << ""; + } + + // Overloads for the signature to present point + s << ""; + + // Show default values (original and modified) for various functions + for (const AbstractMetaFunction *func : m_overloads) { + const AbstractMetaArgument* arg = argument(func); + if (!arg) + continue; + QString argDefault = ShibokenGenerator::getDefaultValue(func, arg); + if (!argDefault.isEmpty() || + argDefault != arg->originalDefaultValueExpression()) { + s << ""; + } + if (argDefault != arg->originalDefaultValueExpression()) { + s << ""; + } + } + + s << "
"; + s << "arg #" << argPos() << "
type"; + s << toHtml(type) << "
orig. type"; + s << toHtml(argType()->cppSignature()) << "
overloads"; + for (const AbstractMetaFunction *func : m_overloads) + s << 'f' << functionNumber(func) << ' '; + s << "
f" << functionNumber(func); + s << "-default"; + s << argDefault << "
f" << functionNumber(func); + s << "-orig-default"; + s << arg->originalDefaultValueExpression() << "
>];" << endl; + + for (const OverloadData *pd : m_nextOverloadData) + s << indent << argId << " -> " << pd->dumpGraph(); + } + return result; +} + +int OverloadData::functionNumber(const AbstractMetaFunction* func) const +{ + return m_headOverloadData->m_overloads.indexOf(func); +} + +OverloadData::~OverloadData() +{ + while (!m_nextOverloadData.isEmpty()) + delete m_nextOverloadData.takeLast(); +} + +bool OverloadData::hasArgumentTypeReplace() const +{ + return !m_argTypeReplaced.isEmpty(); +} + +QString OverloadData::argumentTypeReplaced() const +{ + return m_argTypeReplaced; +} + +bool OverloadData::hasArgumentWithDefaultValue(const AbstractMetaFunctionList& overloads) +{ + if (OverloadData::getMinMaxArguments(overloads).second == 0) + return false; + for (const AbstractMetaFunction *func : overloads) { + if (hasArgumentWithDefaultValue(func)) + return true; + } + return false; +} + +bool OverloadData::hasArgumentWithDefaultValue() const +{ + if (maxArgs() == 0) + return false; + for (const AbstractMetaFunction *func : m_overloads) { + if (hasArgumentWithDefaultValue(func)) + return true; + } + return false; +} + +bool OverloadData::hasArgumentWithDefaultValue(const AbstractMetaFunction* func) +{ + const AbstractMetaArgumentList &arguments = func->arguments(); + for (const AbstractMetaArgument *arg : arguments) { + if (func->argumentRemoved(arg->argumentIndex() + 1)) + continue; + if (!ShibokenGenerator::getDefaultValue(func, arg).isEmpty()) + return true; + } + return false; +} + +AbstractMetaArgumentList OverloadData::getArgumentsWithDefaultValues(const AbstractMetaFunction* func) +{ + AbstractMetaArgumentList args; + const AbstractMetaArgumentList &arguments = func->arguments(); + for (AbstractMetaArgument *arg : arguments) { + if (ShibokenGenerator::getDefaultValue(func, arg).isEmpty() + || func->argumentRemoved(arg->argumentIndex() + 1)) + continue; + args << arg; + } + return args; +} + +#ifndef QT_NO_DEBUG_STREAM +void OverloadData::formatDebug(QDebug &d) const +{ + const int count = m_overloads.size(); + d << "argType=" << m_argType << ", minArgs=" << m_minArgs << ", maxArgs=" << m_maxArgs + << ", argPos=" << m_argPos << ", argTypeReplaced=\"" << m_argTypeReplaced + << "\", overloads[" << count << "]=("; + const int oldVerbosity = d.verbosity(); + d.setVerbosity(3); + for (int i = 0; i < count; ++i) { + if (i) + d << '\n'; + d << m_overloads.at(i); + } + d << ')'; + d.setVerbosity(oldVerbosity); +} + +QDebug operator<<(QDebug d, const OverloadData *od) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "OverloadData("; + if (od) + od->formatDebug(d); + else + d << '0'; + d << ')'; + return d; +} +#endif // !QT_NO_DEBUG_STREAM diff --git a/sources/shiboken2/generator/shiboken2/overloaddata.h b/sources/shiboken2/generator/shiboken2/overloaddata.h new file mode 100644 index 0000000..435c19a --- /dev/null +++ b/sources/shiboken2/generator/shiboken2/overloaddata.h @@ -0,0 +1,163 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OVERLOADDATA_H +#define OVERLOADDATA_H + +#include +#include +#include + +QT_FORWARD_DECLARE_CLASS(QDebug) + +class ShibokenGenerator; + +class OverloadData; +typedef QVector OverloadDataList; + +class OverloadData +{ +public: + typedef QVector MetaFunctionList; + + OverloadData(const AbstractMetaFunctionList& overloads, const ShibokenGenerator* generator); + ~OverloadData(); + + int minArgs() const { return m_headOverloadData->m_minArgs; } + int maxArgs() const { return m_headOverloadData->m_maxArgs; } + int argPos() const { return m_argPos; } + + const AbstractMetaType* argType() const { return m_argType; } + + /// Returns a string list containing all the possible return types (including void) for the current OverloadData. + QStringList returnTypes() const; + + /// Returns true if any of the overloads for the current OverloadData has a return type different from void. + bool hasNonVoidReturnType() const; + + /// Returns true if any of the overloads for the current OverloadData has a varargs argument. + bool hasVarargs() const; + + /// Returns true if any of the overloads for the current OverloadData allows threads when called. + bool hasAllowThread() const; + + /// Returns true if any of the overloads for the current OverloadData is static. + bool hasStaticFunction() const; + + /// Returns true if any of the overloads passed as argument is static. + static bool hasStaticFunction(const AbstractMetaFunctionList& overloads); + + /// Returns true if any of the overloads for the current OverloadData is not static. + bool hasInstanceFunction() const; + + /// Returns true if any of the overloads passed as argument is not static. + static bool hasInstanceFunction(const AbstractMetaFunctionList& overloads); + + /// Returns true if among the overloads for the current OverloadData there are static and non-static methods altogether. + bool hasStaticAndInstanceFunctions() const; + + /// Returns true if among the overloads passed as argument there are static and non-static methods altogether. + static bool hasStaticAndInstanceFunctions(const AbstractMetaFunctionList& overloads); + + const AbstractMetaFunction* referenceFunction() const; + const AbstractMetaArgument* argument(const AbstractMetaFunction* func) const; + OverloadDataList overloadDataOnPosition(int argPos) const; + + bool isHeadOverloadData() const { return this == m_headOverloadData; } + + /// Returns the root OverloadData object that represents all the overloads. + OverloadData* headOverloadData() const { return m_headOverloadData; } + + /// Returns the function that has a default value at the current OverloadData argument position, otherwise returns null. + const AbstractMetaFunction* getFunctionWithDefaultValue() const; + + bool nextArgumentHasDefaultValue() const; + /// Returns the nearest occurrence, including this instance, of an argument with a default value. + OverloadData* findNextArgWithDefault(); + bool isFinalOccurrence(const AbstractMetaFunction* func) const; + + /// Returns the list of overloads removing repeated constant functions (ex.: "foo()" and "foo()const", the second is removed). + MetaFunctionList overloadsWithoutRepetition() const; + const MetaFunctionList& overloads() const { return m_overloads; } + OverloadDataList nextOverloadData() const { return m_nextOverloadData; } + OverloadData* previousOverloadData() const { return m_previousOverloadData; } + + QVector invalidArgumentLengths() const; + + static int numberOfRemovedArguments(const AbstractMetaFunction* func, int finalArgPos = -1); + static QPair getMinMaxArguments(const AbstractMetaFunctionList& overloads); + /// Returns true if all overloads have no more than one argument. + static bool isSingleArgument(const AbstractMetaFunctionList& overloads); + + void dumpGraph(QString filename) const; + QString dumpGraph() const; + + bool hasArgumentTypeReplace() const; + QString argumentTypeReplaced() const; + + bool hasArgumentWithDefaultValue() const; + static bool hasArgumentWithDefaultValue(const AbstractMetaFunctionList& overloads); + static bool hasArgumentWithDefaultValue(const AbstractMetaFunction* func); + + /// Returns a list of function arguments which have default values and were not removed. + static AbstractMetaArgumentList getArgumentsWithDefaultValues(const AbstractMetaFunction* func); + +#ifndef QT_NO_DEBUG_STREAM + void formatDebug(QDebug &) const; +#endif + +private: + OverloadData(OverloadData* headOverloadData, const AbstractMetaFunction* func, + const AbstractMetaType* argType, int argPos); + + void addOverload(const AbstractMetaFunction* func); + OverloadData* addOverloadData(const AbstractMetaFunction* func, const AbstractMetaArgument* arg); + + void sortNextOverloads(); + + int functionNumber(const AbstractMetaFunction* func) const; + OverloadDataList overloadDataOnPosition(OverloadData* overloadData, int argPos) const; + + int m_minArgs; + int m_maxArgs; + int m_argPos; + const AbstractMetaType* m_argType; + QString m_argTypeReplaced; + MetaFunctionList m_overloads; + + OverloadData* m_headOverloadData; + OverloadDataList m_nextOverloadData; + OverloadData* m_previousOverloadData; + const ShibokenGenerator* m_generator; +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug, const OverloadData *); +#endif + +#endif // OVERLOADDATA_H diff --git a/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp b/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp new file mode 100644 index 0000000..80096cb --- /dev/null +++ b/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp @@ -0,0 +1,2758 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "shibokengenerator.h" +#include +#include "overloaddata.h" +#include +#include +#include + +#include +#include +#include +#include +#include + +#define NULL_VALUE "NULL" +#define AVOID_PROTECTED_HACK "avoid-protected-hack" +#define PARENT_CTOR_HEURISTIC "enable-parent-ctor-heuristic" +#define RETURN_VALUE_HEURISTIC "enable-return-value-heuristic" +#define ENABLE_PYSIDE_EXTENSIONS "enable-pyside-extensions" +#define DISABLE_VERBOSE_ERROR_MESSAGES "disable-verbose-error-messages" +#define USE_ISNULL_AS_NB_NONZERO "use-isnull-as-nb_nonzero" + +//static void dumpFunction(AbstractMetaFunctionList lst); + +QHash ShibokenGenerator::m_pythonPrimitiveTypeName = QHash(); +QHash ShibokenGenerator::m_pythonOperators = QHash(); +QHash ShibokenGenerator::m_formatUnits = QHash(); +QHash ShibokenGenerator::m_tpFuncs = QHash(); +QStringList ShibokenGenerator::m_knownPythonTypes = QStringList(); + +static QRegularExpression placeHolderRegex(int index) +{ + return QRegularExpression(QLatin1Char('%') + QString::number(index) + QStringLiteral("\\b")); +} + +// Return a prefix to fully qualify value, eg: +// resolveScopePrefix("Class::NestedClass::Enum::Value1", "Enum::Value1") +// -> "Class::NestedClass::") +static QString resolveScopePrefix(const QStringList &scopeList, const QString &value) +{ + QString name; + for (int i = scopeList.size() - 1 ; i >= 0; --i) { + const QString prefix = scopeList.at(i) + QLatin1String("::"); + if (value.startsWith(prefix)) + name.clear(); + else + name.prepend(prefix); + } + return name; +} + +static inline QStringList splitClassScope(const AbstractMetaClass *scope) +{ + return scope->qualifiedCppName().split(QLatin1String("::"), QString::SkipEmptyParts); +} + +static QString resolveScopePrefix(const AbstractMetaClass *scope, const QString &value) +{ + return scope + ? resolveScopePrefix(splitClassScope(scope), value) + : QString(); +} + +static QString resolveScopePrefix(const AbstractMetaEnum *metaEnum, + const QString &value) +{ + QStringList parts; + if (const AbstractMetaClass *scope = metaEnum->enclosingClass()) + parts.append(splitClassScope(scope)); + // Fully qualify the value which is required for C++ 11 enum classes. + if (!metaEnum->isAnonymous()) + parts.append(metaEnum->name()); + return resolveScopePrefix(parts, value); +} + +ShibokenGenerator::ShibokenGenerator() : Generator() +{ + if (m_pythonPrimitiveTypeName.isEmpty()) + ShibokenGenerator::initPrimitiveTypesCorrespondences(); + + if (m_tpFuncs.isEmpty()) + ShibokenGenerator::clearTpFuncs(); + + if (m_knownPythonTypes.isEmpty()) + ShibokenGenerator::initKnownPythonTypes(); + + m_metaTypeFromStringCache = AbstractMetaTypeCache(); + + m_typeSystemConvName[TypeSystemCheckFunction] = QLatin1String("checkType"); + m_typeSystemConvName[TypeSystemIsConvertibleFunction] = QLatin1String("isConvertible"); + m_typeSystemConvName[TypeSystemToCppFunction] = QLatin1String("toCpp"); + m_typeSystemConvName[TypeSystemToPythonFunction] = QLatin1String("toPython"); + m_typeSystemConvRegEx[TypeSystemCheckFunction] = QRegularExpression(QLatin1String(CHECKTYPE_REGEX)); + m_typeSystemConvRegEx[TypeSystemIsConvertibleFunction] = QRegularExpression(QLatin1String(ISCONVERTIBLE_REGEX)); + m_typeSystemConvRegEx[TypeSystemToPythonFunction] = QRegularExpression(QLatin1String(CONVERTTOPYTHON_REGEX)); + m_typeSystemConvRegEx[TypeSystemToCppFunction] = QRegularExpression(QLatin1String(CONVERTTOCPP_REGEX)); +} + +ShibokenGenerator::~ShibokenGenerator() +{ + // TODO-CONVERTER: it must be caching types that were not created here. + //qDeleteAll(m_metaTypeFromStringCache.values()); +} + +void ShibokenGenerator::clearTpFuncs() +{ + m_tpFuncs.insert(QLatin1String("__str__"), QLatin1String("0")); + m_tpFuncs.insert(QLatin1String("__repr__"), QLatin1String("0")); + m_tpFuncs.insert(QLatin1String("__iter__"), QLatin1String("0")); + m_tpFuncs.insert(QLatin1String("__next__"), QLatin1String("0")); +} + +void ShibokenGenerator::initPrimitiveTypesCorrespondences() +{ + // Python primitive types names + m_pythonPrimitiveTypeName.clear(); + + // PyBool + m_pythonPrimitiveTypeName.insert(QLatin1String("bool"), QLatin1String("PyBool")); + + const char *charTypes[] = { + "char", "signed char", "unsigned char" + }; + for (const char *charType : charTypes) + m_pythonPrimitiveTypeName.insert(QLatin1String(charType), QStringLiteral("SbkChar")); + + // PyInt + const char *intTypes[] = { + "int", "signed int", "uint", "unsigned int", + "short", "ushort", "signed short", "signed short int", + "unsigned short", "unsigned short", "unsigned short int", + "long" + }; + for (const char *intType : intTypes) + m_pythonPrimitiveTypeName.insert(QLatin1String(intType), QStringLiteral("PyInt")); + + // PyFloat + m_pythonPrimitiveTypeName.insert(QLatin1String("double"), QLatin1String("PyFloat")); + m_pythonPrimitiveTypeName.insert(QLatin1String("float"), QLatin1String("PyFloat")); + + // PyLong + const char *longTypes[] = { + "unsigned long", "signed long", "ulong", "unsigned long int", + "long long", "__int64", + "unsigned long long", "unsigned __int64", "size_t" + }; + for (const char *longType : longTypes) + m_pythonPrimitiveTypeName.insert(QLatin1String(longType), QStringLiteral("PyLong")); + + // Python operators + m_pythonOperators.clear(); + + // call operator + m_pythonOperators.insert(QLatin1String("operator()"), QLatin1String("call")); + + // Arithmetic operators + m_pythonOperators.insert(QLatin1String("operator+"), QLatin1String("add")); + m_pythonOperators.insert(QLatin1String("operator-"), QLatin1String("sub")); + m_pythonOperators.insert(QLatin1String("operator*"), QLatin1String("mul")); + m_pythonOperators.insert(QLatin1String("operator/"), QLatin1String("div")); + m_pythonOperators.insert(QLatin1String("operator%"), QLatin1String("mod")); + + // Inplace arithmetic operators + m_pythonOperators.insert(QLatin1String("operator+="), QLatin1String("iadd")); + m_pythonOperators.insert(QLatin1String("operator-="), QLatin1String("isub")); + m_pythonOperators.insert(QLatin1String("operator++"), QLatin1String("iadd")); + m_pythonOperators.insert(QLatin1String("operator--"), QLatin1String("isub")); + m_pythonOperators.insert(QLatin1String("operator*="), QLatin1String("imul")); + m_pythonOperators.insert(QLatin1String("operator/="), QLatin1String("idiv")); + m_pythonOperators.insert(QLatin1String("operator%="), QLatin1String("imod")); + + // Bitwise operators + m_pythonOperators.insert(QLatin1String("operator&"), QLatin1String("and")); + m_pythonOperators.insert(QLatin1String("operator^"), QLatin1String("xor")); + m_pythonOperators.insert(QLatin1String("operator|"), QLatin1String("or")); + m_pythonOperators.insert(QLatin1String("operator<<"), QLatin1String("lshift")); + m_pythonOperators.insert(QLatin1String("operator>>"), QLatin1String("rshift")); + m_pythonOperators.insert(QLatin1String("operator~"), QLatin1String("invert")); + + // Inplace bitwise operators + m_pythonOperators.insert(QLatin1String("operator&="), QLatin1String("iand")); + m_pythonOperators.insert(QLatin1String("operator^="), QLatin1String("ixor")); + m_pythonOperators.insert(QLatin1String("operator|="), QLatin1String("ior")); + m_pythonOperators.insert(QLatin1String("operator<<="), QLatin1String("ilshift")); + m_pythonOperators.insert(QLatin1String("operator>>="), QLatin1String("irshift")); + + // Comparison operators + m_pythonOperators.insert(QLatin1String("operator=="), QLatin1String("eq")); + m_pythonOperators.insert(QLatin1String("operator!="), QLatin1String("ne")); + m_pythonOperators.insert(QLatin1String("operator<"), QLatin1String("lt")); + m_pythonOperators.insert(QLatin1String("operator>"), QLatin1String("gt")); + m_pythonOperators.insert(QLatin1String("operator<="), QLatin1String("le")); + m_pythonOperators.insert(QLatin1String("operator>="), QLatin1String("ge")); + + // Initialize format units for C++->Python->C++ conversion + m_formatUnits.clear(); + m_formatUnits.insert(QLatin1String("char"), QLatin1String("b")); + m_formatUnits.insert(QLatin1String("unsigned char"), QLatin1String("B")); + m_formatUnits.insert(QLatin1String("int"), QLatin1String("i")); + m_formatUnits.insert(QLatin1String("unsigned int"), QLatin1String("I")); + m_formatUnits.insert(QLatin1String("short"), QLatin1String("h")); + m_formatUnits.insert(QLatin1String("unsigned short"), QLatin1String("H")); + m_formatUnits.insert(QLatin1String("long"), QLatin1String("l")); + m_formatUnits.insert(QLatin1String("unsigned long"), QLatin1String("k")); + m_formatUnits.insert(QLatin1String("long long"), QLatin1String("L")); + m_formatUnits.insert(QLatin1String("__int64"), QLatin1String("L")); + m_formatUnits.insert(QLatin1String("unsigned long long"), QLatin1String("K")); + m_formatUnits.insert(QLatin1String("unsigned __int64"), QLatin1String("K")); + m_formatUnits.insert(QLatin1String("double"), QLatin1String("d")); + m_formatUnits.insert(QLatin1String("float"), QLatin1String("f")); +} + +void ShibokenGenerator::initKnownPythonTypes() +{ + m_knownPythonTypes.clear(); + m_knownPythonTypes << QLatin1String("PyBool") << QLatin1String("PyInt") + << QLatin1String("PyFloat") << QLatin1String("PyLong") << QLatin1String("PyObject") + << QLatin1String("PyString") << QLatin1String("PyBuffer") << QLatin1String("PySequence") + << QLatin1String("PyTuple") << QLatin1String("PyList") << QLatin1String("PyDict") + << QLatin1String("PyObject*") << QLatin1String("PyObject *") << QLatin1String("PyTupleObject*"); +} + +QString ShibokenGenerator::translateTypeForWrapperMethod(const AbstractMetaType* cType, + const AbstractMetaClass* context, + Options options) const +{ + if (cType->isArray()) + return translateTypeForWrapperMethod(cType->arrayElementType(), context, options) + QLatin1String("[]"); + + if (avoidProtectedHack() && cType->isEnum()) { + const AbstractMetaEnum* metaEnum = findAbstractMetaEnum(cType); + if (metaEnum && metaEnum->isProtected()) + return protectedEnumSurrogateName(metaEnum); + } + + return translateType(cType, context, options); +} + +bool ShibokenGenerator::shouldGenerateCppWrapper(const AbstractMetaClass* metaClass) const +{ + if (metaClass->isNamespace() || (metaClass->attributes() & AbstractMetaAttributes::FinalCppClass)) + return false; + bool result = metaClass->isPolymorphic() || metaClass->hasVirtualDestructor(); + if (avoidProtectedHack()) { + result = result || metaClass->hasProtectedFields() || metaClass->hasProtectedDestructor(); + if (!result && metaClass->hasProtectedFunctions()) { + int protectedFunctions = 0; + int protectedOperators = 0; + const AbstractMetaFunctionList &funcs = metaClass->functions(); + for (const AbstractMetaFunction *func : funcs) { + if (!func->isProtected() || func->isSignal() || func->isModifiedRemoved()) + continue; + else if (func->isOperatorOverload()) + protectedOperators++; + else + protectedFunctions++; + } + result = result || (protectedFunctions > protectedOperators); + } + } else { + result = result && !metaClass->hasPrivateDestructor(); + } + return result; +} + +void ShibokenGenerator::lookForEnumsInClassesNotToBeGenerated(AbstractMetaEnumList& enumList, const AbstractMetaClass* metaClass) +{ + if (!metaClass) + return; + + if (metaClass->typeEntry()->codeGeneration() == TypeEntry::GenerateForSubclass) { + const AbstractMetaEnumList &enums = metaClass->enums(); + for (const AbstractMetaEnum *metaEnum : enums) { + if (metaEnum->isPrivate() || metaEnum->typeEntry()->codeGeneration() == TypeEntry::GenerateForSubclass) + continue; + if (!enumList.contains(const_cast(metaEnum))) + enumList.append(const_cast(metaEnum)); + } + lookForEnumsInClassesNotToBeGenerated(enumList, metaClass->enclosingClass()); + } +} + +static const AbstractMetaClass* getProperEnclosingClass(const AbstractMetaClass* metaClass) +{ + if (!metaClass) + return 0; + + if (metaClass->typeEntry()->codeGeneration() != TypeEntry::GenerateForSubclass) + return metaClass; + + return getProperEnclosingClass(metaClass->enclosingClass()); +} + +const AbstractMetaClass* ShibokenGenerator::getProperEnclosingClassForEnum(const AbstractMetaEnum* metaEnum) +{ + return getProperEnclosingClass(metaEnum->enclosingClass()); +} + +QString ShibokenGenerator::wrapperName(const AbstractMetaClass* metaClass) const +{ + if (shouldGenerateCppWrapper(metaClass)) { + QString result = metaClass->name(); + if (metaClass->enclosingClass()) // is a inner class + result.replace(QLatin1String("::"), QLatin1String("_")); + + result += QLatin1String("Wrapper"); + return result; + } else { + return metaClass->qualifiedCppName(); + } +} + +QString ShibokenGenerator::wrapperName(const AbstractMetaType *metaType) const +{ + return metaType->cppSignature(); +} + +QString ShibokenGenerator::fullPythonFunctionName(const AbstractMetaFunction* func) +{ + QString funcName; + if (func->isOperatorOverload()) + funcName = ShibokenGenerator::pythonOperatorFunctionName(func); + else + funcName = func->name(); + if (func->ownerClass()) { + QString fullName = func->ownerClass()->fullName(); + if (func->isConstructor()) + funcName = fullName; + else + funcName.prepend(fullName + QLatin1Char('.')); + } + else { + funcName = packageName() + QLatin1Char('.') + func->name(); + } + return funcName; +} + +QString ShibokenGenerator::protectedEnumSurrogateName(const AbstractMetaEnum* metaEnum) +{ + return metaEnum->fullName().replace(QLatin1Char('.'), QLatin1Char('_')).replace(QLatin1String("::"), QLatin1String("_")) + QLatin1String("_Surrogate"); +} + +QString ShibokenGenerator::protectedFieldGetterName(const AbstractMetaField* field) +{ + return QStringLiteral("protected_%1_getter").arg(field->name()); +} + +QString ShibokenGenerator::protectedFieldSetterName(const AbstractMetaField* field) +{ + return QStringLiteral("protected_%1_setter").arg(field->name()); +} + +QString ShibokenGenerator::cpythonFunctionName(const AbstractMetaFunction* func) +{ + QString result; + + // PYSIDE-331: For inherited functions, we need to find the same labels. + // Therefore we use the implementing class. + if (func->implementingClass()) { + result = cpythonBaseName(func->implementingClass()->typeEntry()); + if (func->isConstructor()) { + result += QLatin1String("_Init"); + } else { + result += QLatin1String("Func_"); + if (func->isOperatorOverload()) + result += ShibokenGenerator::pythonOperatorFunctionName(func); + else + result += func->name(); + } + } else { + result = QLatin1String("Sbk") + moduleName() + QLatin1String("Module_") + func->name(); + } + + return result; +} + +QString ShibokenGenerator::cpythonMethodDefinitionName(const AbstractMetaFunction* func) +{ + if (!func->ownerClass()) + return QString(); + return QStringLiteral("%1Method_%2").arg(cpythonBaseName(func->ownerClass()->typeEntry()), func->name()); +} + +QString ShibokenGenerator::cpythonGettersSettersDefinitionName(const AbstractMetaClass* metaClass) +{ + return cpythonBaseName(metaClass) + QLatin1String("_getsetlist"); +} + +QString ShibokenGenerator::cpythonSetattroFunctionName(const AbstractMetaClass* metaClass) +{ + return cpythonBaseName(metaClass) + QLatin1String("_setattro"); +} + + +QString ShibokenGenerator::cpythonGetattroFunctionName(const AbstractMetaClass* metaClass) +{ + return cpythonBaseName(metaClass) + QLatin1String("_getattro"); +} + +QString ShibokenGenerator::cpythonGetterFunctionName(const AbstractMetaField* metaField) +{ + return QStringLiteral("%1_get_%2").arg(cpythonBaseName(metaField->enclosingClass()), metaField->name()); +} + +QString ShibokenGenerator::cpythonSetterFunctionName(const AbstractMetaField* metaField) +{ + return QStringLiteral("%1_set_%2").arg(cpythonBaseName(metaField->enclosingClass()), metaField->name()); +} + +static QString cpythonEnumFlagsName(QString moduleName, QString qualifiedCppName) +{ + QString result = QStringLiteral("Sbk%1_%2").arg(moduleName, qualifiedCppName); + result.replace(QLatin1String("::"), QLatin1String("_")); + return result; +} + +// Return the scope for fully qualifying the enumeration including trailing "::". +static QString searchForEnumScope(const AbstractMetaClass* metaClass, const QString& value) +{ + if (!metaClass) + return QString(); + const AbstractMetaEnumList &enums = metaClass->enums(); + for (const AbstractMetaEnum *metaEnum : enums) { + if (metaEnum->findEnumValue(value)) + return resolveScopePrefix(metaEnum, value); + } + // PYSIDE-331: We need to also search the base classes. + QString ret = searchForEnumScope(metaClass->enclosingClass(), value); + if (ret.isEmpty()) + ret = searchForEnumScope(metaClass->baseClass(), value); + return ret; +} + +// Handle QFlags<> for guessScopeForDefaultValue() +QString ShibokenGenerator::guessScopeForDefaultFlagsValue(const AbstractMetaFunction *func, + const AbstractMetaArgument *arg, + const QString &value) const +{ + // Numeric values -> "Options(42)" + static const QRegularExpression numberRegEx(QStringLiteral("^\\d+$")); // Numbers to flags + Q_ASSERT(numberRegEx.isValid()); + if (numberRegEx.match(value).hasMatch()) { + QString typeName = translateTypeForWrapperMethod(arg->type(), func->implementingClass()); + if (arg->type()->isConstant()) + typeName.remove(0, sizeof("const ") / sizeof(char) - 1); + switch (arg->type()->referenceType()) { + case NoReference: + break; + case LValueReference: + typeName.chop(1); + break; + case RValueReference: + typeName.chop(2); + break; + } + return typeName + QLatin1Char('(') + value + QLatin1Char(')'); + } + + // "Options(Option1 | Option2)" -> "Options(Class::Enum::Option1 | Class::Enum::Option2)" + static const QRegularExpression enumCombinationRegEx(QStringLiteral("^([A-Za-z_][\\w:]*)\\(([^,\\(\\)]*)\\)$")); // FlagName(EnumItem|EnumItem|...) + Q_ASSERT(enumCombinationRegEx.isValid()); + const QRegularExpressionMatch match = enumCombinationRegEx.match(value); + if (match.hasMatch()) { + const QString expression = match.captured(2).trimmed(); + if (expression.isEmpty()) + return value; + const QStringList enumItems = expression.split(QLatin1Char('|')); + const QString scope = searchForEnumScope(func->implementingClass(), + enumItems.constFirst().trimmed()); + if (scope.isEmpty()) + return value; + QString result; + QTextStream str(&result); + str << match.captured(1) << '('; // Flag name + for (int i = 0, size = enumItems.size(); i < size; ++i) { + if (i) + str << '|'; + str << scope << enumItems.at(i).trimmed(); + } + str << ')'; + return result; + } + // A single flag "Option1" -> "Class::Enum::Option1" + return searchForEnumScope(func->implementingClass(), value) + value; +} + +/* + * This function uses some heuristics to find out the scope for a given + * argument default value since they must be fully qualified when used outside the class: + * class A { + * enum Enum { e1, e1 }; + * void foo(Enum e = e1); + * } + * should be qualified to: + * A::Enum cppArg0 = A::Enum::e1; + * + * New situations may arise in the future and + * this method should be updated, do it with care. + */ +QString ShibokenGenerator::guessScopeForDefaultValue(const AbstractMetaFunction *func, + const AbstractMetaArgument *arg) const +{ + QString value = getDefaultValue(func, arg); + + if (value.isEmpty()) + return QString(); + + if (isPointer(arg->type())) + return value; + + static const QRegularExpression enumValueRegEx(QStringLiteral("^([A-Za-z_]\\w*)?$")); + Q_ASSERT(enumValueRegEx.isValid()); + // Do not qualify macros by class name, eg QSGGeometry(..., int t = GL_UNSIGNED_SHORT); + static const QRegularExpression macroRegEx(QStringLiteral("^[A-Z_][A-Z0-9_]*$")); + Q_ASSERT(macroRegEx.isValid()); + if (arg->type()->isPrimitive() && macroRegEx.match(value).hasMatch()) + return value; + + QString prefix; + if (arg->type()->isEnum()) { + if (const AbstractMetaEnum* metaEnum = findAbstractMetaEnum(arg->type())) + prefix = resolveScopePrefix(metaEnum, value); + } else if (arg->type()->isFlags()) { + value = guessScopeForDefaultFlagsValue(func, arg, value); + } else if (arg->type()->typeEntry()->isValue()) { + const AbstractMetaClass *metaClass = AbstractMetaClass::findClass(classes(), arg->type()->typeEntry()); + if (enumValueRegEx.match(value).hasMatch() && value != QLatin1String("NULL")) + prefix = resolveScopePrefix(metaClass, value); + } else if (arg->type()->isPrimitive() && arg->type()->name() == QLatin1String("int")) { + if (enumValueRegEx.match(value).hasMatch() && func->implementingClass()) + prefix = resolveScopePrefix(func->implementingClass(), value); + } else if(arg->type()->isPrimitive()) { + static const QRegularExpression unknowArgumentRegEx(QStringLiteral("^(?:[A-Za-z_][\\w:]*\\()?([A-Za-z_]\\w*)(?:\\))?$")); // [PrimitiveType(] DESIREDNAME [)] + Q_ASSERT(unknowArgumentRegEx.isValid()); + const QRegularExpressionMatch match = unknowArgumentRegEx.match(value); + if (match.hasMatch() && func->implementingClass()) { + const AbstractMetaFieldList &fields = func->implementingClass()->fields(); + for (const AbstractMetaField *field : fields) { + if (match.captured(1).trimmed() == field->name()) { + QString fieldName = field->name(); + if (field->isStatic()) { + prefix = resolveScopePrefix(func->implementingClass(), value); + fieldName.prepend(prefix); + prefix.clear(); + } else { + fieldName.prepend(QLatin1String(CPP_SELF_VAR "->")); + } + value.replace(match.captured(1), fieldName); + break; + } + } + } + } + + if (!prefix.isEmpty()) + value.prepend(prefix); + return value; +} + +QString ShibokenGenerator::cpythonEnumName(const EnumTypeEntry* enumEntry) +{ + QString p = enumEntry->targetLangPackage(); + p.replace(QLatin1Char('.'), QLatin1Char('_')); + return cpythonEnumFlagsName(p, enumEntry->qualifiedCppName()); +} + +QString ShibokenGenerator::cpythonEnumName(const AbstractMetaEnum *metaEnum) +{ + return cpythonEnumName(metaEnum->typeEntry()); +} + +QString ShibokenGenerator::cpythonFlagsName(const FlagsTypeEntry* flagsEntry) +{ + QString p = flagsEntry->targetLangPackage(); + p.replace(QLatin1Char('.'), QLatin1Char('_')); + return cpythonEnumFlagsName(p, flagsEntry->originalName()); +} + +QString ShibokenGenerator::cpythonFlagsName(const AbstractMetaEnum *metaEnum) +{ + const FlagsTypeEntry *flags = metaEnum->typeEntry()->flags(); + if (!flags) + return QString(); + return cpythonFlagsName(flags); +} + +QString ShibokenGenerator::cpythonSpecialCastFunctionName(const AbstractMetaClass* metaClass) +{ + return cpythonBaseName(metaClass->typeEntry()) + QLatin1String("SpecialCastFunction"); +} + +QString ShibokenGenerator::cpythonWrapperCPtr(const AbstractMetaClass* metaClass, QString argName) +{ + return cpythonWrapperCPtr(metaClass->typeEntry(), argName); +} + +QString ShibokenGenerator::cpythonWrapperCPtr(const AbstractMetaType *metaType, QString argName) +{ + if (!ShibokenGenerator::isWrapperType(metaType->typeEntry())) + return QString(); + return QLatin1String("reinterpret_cast< ::") + metaType->cppSignature() + + QLatin1String(" *>(Shiboken::Conversions::cppPointer(") + cpythonTypeNameExt(metaType) + + QLatin1String(", reinterpret_cast(") + argName + QLatin1String(")))"); +} + +QString ShibokenGenerator::cpythonWrapperCPtr(const TypeEntry* type, QString argName) +{ + if (!ShibokenGenerator::isWrapperType(type)) + return QString(); + return QLatin1String("reinterpret_cast< ::") + type->qualifiedCppName() + + QLatin1String(" *>(Shiboken::Conversions::cppPointer(") + cpythonTypeNameExt(type) + + QLatin1String(", reinterpret_cast(") + argName + QLatin1String(")))"); +} + +void ShibokenGenerator::writeToPythonConversion(QTextStream & s, const AbstractMetaType* type, + const AbstractMetaClass * /* context */, + const QString& argumentName) +{ + s << cpythonToPythonConversionFunction(type) << argumentName << ')'; +} + +void ShibokenGenerator::writeToCppConversion(QTextStream& s, const AbstractMetaClass* metaClass, + const QString& inArgName, const QString& outArgName) +{ + s << cpythonToCppConversionFunction(metaClass) << inArgName << ", &" << outArgName << ')'; +} + +void ShibokenGenerator::writeToCppConversion(QTextStream& s, const AbstractMetaType* type, const AbstractMetaClass* context, + const QString& inArgName, const QString& outArgName) +{ + s << cpythonToCppConversionFunction(type, context) << inArgName << ", &" << outArgName << ')'; +} + +bool ShibokenGenerator::shouldRejectNullPointerArgument(const AbstractMetaFunction* func, int argIndex) +{ + if (argIndex < 0 || argIndex >= func->arguments().count()) + return false; + + const AbstractMetaArgument* arg = func->arguments().at(argIndex); + if (isValueTypeWithCopyConstructorOnly(arg->type())) + return true; + + // Argument type is not a pointer, a None rejection should not be + // necessary because the type checking would handle that already. + if (!isPointer(arg->type())) + return false; + if (func->argumentRemoved(argIndex + 1)) + return false; + const FunctionModificationList &mods = func->modifications(); + for (const FunctionModification &funcMod : mods) { + for (const ArgumentModification &argMod : funcMod.argument_mods) { + if (argMod.index == argIndex + 1 && argMod.noNullPointers) + return true; + } + } + return false; +} + +QString ShibokenGenerator::getFormatUnitString(const AbstractMetaFunction* func, bool incRef) const +{ + QString result; + const char objType = (incRef ? 'O' : 'N'); + const AbstractMetaArgumentList &arguments = func->arguments(); + for (const AbstractMetaArgument *arg : arguments) { + if (func->argumentRemoved(arg->argumentIndex() + 1)) + continue; + + if (!func->typeReplaced(arg->argumentIndex() + 1).isEmpty()) { + result += QLatin1Char(objType); + } else if (arg->type()->isQObject() + || arg->type()->isObject() + || arg->type()->isValue() + || arg->type()->isValuePointer() + || arg->type()->isNativePointer() + || arg->type()->isEnum() + || arg->type()->isFlags() + || arg->type()->isContainer() + || arg->type()->isSmartPointer() + || arg->type()->referenceType() == LValueReference) { + result += QLatin1Char(objType); + } else if (arg->type()->isPrimitive()) { + const PrimitiveTypeEntry* ptype = (const PrimitiveTypeEntry*) arg->type()->typeEntry(); + if (ptype->basicReferencedTypeEntry()) + ptype = ptype->basicReferencedTypeEntry(); + if (m_formatUnits.contains(ptype->name())) + result += m_formatUnits[ptype->name()]; + else + result += QLatin1Char(objType); + } else if (isCString(arg->type())) { + result += QLatin1Char('z'); + } else { + qCWarning(lcShiboken).noquote().nospace() + << "Method: " << func->ownerClass()->qualifiedCppName() + << "::" << func->signature() << " => Arg:" + << arg->name() << "index: " << arg->argumentIndex() + << " - cannot be handled properly. Use an inject-code to fix it!"; + result += QLatin1Char('?'); + } + } + return result; +} + +QString ShibokenGenerator::cpythonBaseName(const AbstractMetaType* type) +{ + if (isCString(type)) + return QLatin1String("PyString"); + return cpythonBaseName(type->typeEntry()); +} + +QString ShibokenGenerator::cpythonBaseName(const AbstractMetaClass* metaClass) +{ + return cpythonBaseName(metaClass->typeEntry()); +} + +QString ShibokenGenerator::cpythonBaseName(const TypeEntry* type) +{ + QString baseName; + if (ShibokenGenerator::isWrapperType(type) || type->isNamespace()) { // && type->referenceType() == NoReference) { + baseName = QLatin1String("Sbk_") + type->name(); + } else if (type->isPrimitive()) { + const PrimitiveTypeEntry* ptype = (const PrimitiveTypeEntry*) type; + while (ptype->basicReferencedTypeEntry()) + ptype = ptype->basicReferencedTypeEntry(); + if (ptype->targetLangApiName() == ptype->name()) + baseName = pythonPrimitiveTypeName(ptype->name()); + else + baseName = ptype->targetLangApiName(); + } else if (type->isEnum()) { + baseName = cpythonEnumName((const EnumTypeEntry*) type); + } else if (type->isFlags()) { + baseName = cpythonFlagsName((const FlagsTypeEntry*) type); + } else if (type->isContainer()) { + const ContainerTypeEntry* ctype = (const ContainerTypeEntry*) type; + switch (ctype->type()) { + case ContainerTypeEntry::ListContainer: + case ContainerTypeEntry::StringListContainer: + case ContainerTypeEntry::LinkedListContainer: + case ContainerTypeEntry::VectorContainer: + case ContainerTypeEntry::StackContainer: + case ContainerTypeEntry::QueueContainer: + //baseName = "PyList"; + //break; + case ContainerTypeEntry::PairContainer: + //baseName = "PyTuple"; + baseName = QLatin1String("PySequence"); + break; + case ContainerTypeEntry::SetContainer: + baseName = QLatin1String("PySet"); + break; + case ContainerTypeEntry::MapContainer: + case ContainerTypeEntry::MultiMapContainer: + case ContainerTypeEntry::HashContainer: + case ContainerTypeEntry::MultiHashContainer: + baseName = QLatin1String("PyDict"); + break; + default: + Q_ASSERT(false); + } + } else { + baseName = QLatin1String("PyObject"); + } + return baseName.replace(QLatin1String("::"), QLatin1String("_")); +} + +QString ShibokenGenerator::cpythonTypeName(const AbstractMetaClass* metaClass) +{ + return cpythonTypeName(metaClass->typeEntry()); +} + +QString ShibokenGenerator::cpythonTypeName(const TypeEntry* type) +{ + return cpythonBaseName(type) + QLatin1String("_TypeF()"); +} + +QString ShibokenGenerator::cpythonTypeNameExt(const TypeEntry* type) +{ + return cppApiVariableName(type->targetLangPackage()) + QLatin1Char('[') + + getTypeIndexVariableName(type) + QLatin1Char(']'); +} + +QString ShibokenGenerator::converterObject(const AbstractMetaType* type) +{ + if (isCString(type)) + return QLatin1String("Shiboken::Conversions::PrimitiveTypeConverter()"); + if (isVoidPointer(type)) + return QLatin1String("Shiboken::Conversions::PrimitiveTypeConverter()"); + const AbstractMetaTypeCList nestedArrayTypes = type->nestedArrayTypes(); + if (!nestedArrayTypes.isEmpty() && nestedArrayTypes.constLast()->isCppPrimitive()) { + return QStringLiteral("Shiboken::Conversions::ArrayTypeConverter<") + + nestedArrayTypes.constLast()->minimalSignature() + + QLatin1String(">(") + QString::number(nestedArrayTypes.size()) + + QLatin1Char(')'); + } + if (type->typeEntry()->isContainer()) { + return convertersVariableName(type->typeEntry()->targetLangPackage()) + + QLatin1Char('[') + getTypeIndexVariableName(type) + QLatin1Char(']'); + } + return converterObject(type->typeEntry()); +} + +QString ShibokenGenerator::converterObject(const TypeEntry* type) +{ + if (isCppPrimitive(type)) + return QString::fromLatin1("Shiboken::Conversions::PrimitiveTypeConverter<%1>()").arg(type->qualifiedCppName()); + if (isWrapperType(type) || type->isEnum() || type->isFlags()) + return QString::fromLatin1("*PepType_SGTP(%1)->converter").arg(cpythonTypeNameExt(type)); + + if (type->isArray()) { + qDebug() << "Warning: no idea how to handle the Qt5 type " << type->qualifiedCppName(); + return QString::null; + } + + /* the typedef'd primitive types case */ + const PrimitiveTypeEntry* pte = dynamic_cast(type); + if (!pte) { + qDebug() << "Warning: the Qt5 primitive type is unknown" << type->qualifiedCppName(); + return QString::null; + } + if (pte->basicReferencedTypeEntry()) + pte = pte->basicReferencedTypeEntry(); + if (pte->isPrimitive() && !pte->isCppPrimitive() && !pte->customConversion()) + return QString::fromLatin1("Shiboken::Conversions::PrimitiveTypeConverter<%1>()").arg(pte->qualifiedCppName()); + + return convertersVariableName(type->targetLangPackage()) + + QLatin1Char('[') + getTypeIndexVariableName(type) + QLatin1Char(']'); +} + +QString ShibokenGenerator::cpythonTypeNameExt(const AbstractMetaType* type) +{ + return cppApiVariableName(type->typeEntry()->targetLangPackage()) + QLatin1Char('[') + + getTypeIndexVariableName(type) + QLatin1Char(']'); +} + +static QString msgUnknownOperator(const AbstractMetaFunction* func) +{ + QString result = QLatin1String("Unknown operator: \"") + func->originalName() + QLatin1Char('"'); + if (const AbstractMetaClass *c = func->implementingClass()) + result += QLatin1String(" in class: ") + c->name(); + return result; +} + +static inline QString unknownOperator() { return QStringLiteral("__UNKNOWN_OPERATOR__"); } + +QString ShibokenGenerator::fixedCppTypeName(const CustomConversion::TargetToNativeConversion* toNative) +{ + if (toNative->sourceType()) + return fixedCppTypeName(toNative->sourceType()); + return toNative->sourceTypeName(); +} +QString ShibokenGenerator::fixedCppTypeName(const AbstractMetaType* type) +{ + return fixedCppTypeName(type->typeEntry(), type->cppSignature()); +} + +static QString _fixedCppTypeName(QString typeName) +{ + typeName.remove(QLatin1Char(' ')); + typeName.replace(QLatin1Char('.'), QLatin1Char('_')); + typeName.replace(QLatin1Char(','), QLatin1Char('_')); + typeName.replace(QLatin1Char('<'), QLatin1Char('_')); + typeName.replace(QLatin1Char('>'), QLatin1Char('_')); + typeName.replace(QLatin1String("::"), QLatin1String("_")); + typeName.replace(QLatin1String("*"), QLatin1String("PTR")); + typeName.replace(QLatin1String("&"), QLatin1String("REF")); + return typeName; +} +QString ShibokenGenerator::fixedCppTypeName(const TypeEntry* type, QString typeName) +{ + if (typeName.isEmpty()) + typeName = type->qualifiedCppName(); + if (!(type->codeGeneration() & TypeEntry::GenerateTargetLang)) { + typeName.prepend(QLatin1Char('_')); + typeName.prepend(type->targetLangPackage()); + } + return _fixedCppTypeName(typeName); +} + +QString ShibokenGenerator::pythonPrimitiveTypeName(const QString& cppTypeName) +{ + QString rv = ShibokenGenerator::m_pythonPrimitiveTypeName.value(cppTypeName, QString()); + if (rv.isEmpty()) { + // activate this when some primitive types are missing, + // i.e. when shiboken itself fails to build. + // In general, this is valid while just called by isNumeric() + // used on Qt5, 2015-09-20 + if (false) { + std::cerr << "primitive type not found: " << qPrintable(cppTypeName) << std::endl; + abort(); + } + } + return rv; +} + +QString ShibokenGenerator::pythonPrimitiveTypeName(const PrimitiveTypeEntry* type) +{ + while (type->basicReferencedTypeEntry()) + type = type->basicReferencedTypeEntry(); + return pythonPrimitiveTypeName(type->name()); +} + +QString ShibokenGenerator::pythonOperatorFunctionName(QString cppOpFuncName) +{ + QString value = m_pythonOperators.value(cppOpFuncName); + if (value.isEmpty()) + return unknownOperator(); + value.prepend(QLatin1String("__")); + value.append(QLatin1String("__")); + return value; +} + +QString ShibokenGenerator::pythonOperatorFunctionName(const AbstractMetaFunction* func) +{ + QString op = pythonOperatorFunctionName(func->originalName()); + if (op == unknownOperator()) + qCWarning(lcShiboken).noquote().nospace() << msgUnknownOperator(func); + if (func->arguments().isEmpty()) { + if (op == QLatin1String("__sub__")) + op = QLatin1String("__neg__"); + else if (op == QLatin1String("__add__")) + op = QLatin1String("__pos__"); + } else if (func->isStatic() && func->arguments().size() == 2) { + // If a operator overload function has 2 arguments and + // is static we assume that it is a reverse operator. + op = op.insert(2, QLatin1Char('r')); + } + return op; +} + +QString ShibokenGenerator::pythonRichCompareOperatorId(QString cppOpFuncName) +{ + return QLatin1String("Py_") + m_pythonOperators.value(cppOpFuncName).toUpper(); +} + +QString ShibokenGenerator::pythonRichCompareOperatorId(const AbstractMetaFunction* func) +{ + return pythonRichCompareOperatorId(func->originalName()); +} + +bool ShibokenGenerator::isNumber(QString cpythonApiName) +{ + return cpythonApiName == QLatin1String("PyInt") + || cpythonApiName == QLatin1String("PyFloat") + || cpythonApiName == QLatin1String("PyLong") + || cpythonApiName == QLatin1String("PyBool"); +} + +bool ShibokenGenerator::isNumber(const TypeEntry* type) +{ + if (!type->isPrimitive()) + return false; + return isNumber(pythonPrimitiveTypeName((const PrimitiveTypeEntry*) type)); +} + +bool ShibokenGenerator::isNumber(const AbstractMetaType* type) +{ + return isNumber(type->typeEntry()); +} + +bool ShibokenGenerator::isPyInt(const TypeEntry* type) +{ + if (!type->isPrimitive()) + return false; + return pythonPrimitiveTypeName((const PrimitiveTypeEntry*) type) == QLatin1String("PyInt"); +} + +bool ShibokenGenerator::isPyInt(const AbstractMetaType* type) +{ + return isPyInt(type->typeEntry()); +} + +bool ShibokenGenerator::isWrapperType(const TypeEntry* type) +{ + if (type->isComplex()) + return ShibokenGenerator::isWrapperType((const ComplexTypeEntry*)type); + return type->isObject() || type->isValue() || type->isSmartPointer(); +} +bool ShibokenGenerator::isWrapperType(const ComplexTypeEntry* type) +{ + return isObjectType(type) || type->isValue() || type->isSmartPointer(); +} +bool ShibokenGenerator::isWrapperType(const AbstractMetaType* metaType) +{ + return isObjectType(metaType) + || metaType->typeEntry()->isValue() + || metaType->typeEntry()->isSmartPointer(); +} + +bool ShibokenGenerator::isPointerToWrapperType(const AbstractMetaType* type) +{ + return (isObjectType(type) && type->indirections() == 1) || type->isValuePointer(); +} + +bool ShibokenGenerator::isObjectTypeUsedAsValueType(const AbstractMetaType* type) +{ + return type->typeEntry()->isObject() && type->referenceType() == NoReference && type->indirections() == 0; +} + +bool ShibokenGenerator::isValueTypeWithCopyConstructorOnly(const AbstractMetaClass* metaClass) +{ + if (!metaClass || !metaClass->typeEntry()->isValue()) + return false; + if ((metaClass->attributes() & AbstractMetaAttributes::HasRejectedConstructor) != 0) + return false; + AbstractMetaFunctionList ctors = metaClass->queryFunctions(AbstractMetaClass::Constructors); + if (ctors.count() != 1) + return false; + return ctors.constFirst()->functionType() == AbstractMetaFunction::CopyConstructorFunction; +} + +bool ShibokenGenerator::isValueTypeWithCopyConstructorOnly(const TypeEntry* type) const +{ + if (!type || !type->isValue()) + return false; + return isValueTypeWithCopyConstructorOnly(AbstractMetaClass::findClass(classes(), type)); +} + +bool ShibokenGenerator::isValueTypeWithCopyConstructorOnly(const AbstractMetaType* type) const +{ + if (!type || !type->typeEntry()->isValue()) + return false; + return isValueTypeWithCopyConstructorOnly(type->typeEntry()); +} + +bool ShibokenGenerator::isUserPrimitive(const TypeEntry* type) +{ + if (!type->isPrimitive()) + return false; + const PrimitiveTypeEntry* trueType = (const PrimitiveTypeEntry*) type; + if (trueType->basicReferencedTypeEntry()) + trueType = trueType->basicReferencedTypeEntry(); + return trueType->isPrimitive() && !trueType->isCppPrimitive() + && trueType->qualifiedCppName() != QLatin1String("std::string"); +} + +bool ShibokenGenerator::isUserPrimitive(const AbstractMetaType* type) +{ + if (type->indirections() != 0) + return false; + return isUserPrimitive(type->typeEntry()); +} + +bool ShibokenGenerator::isCppPrimitive(const TypeEntry* type) +{ + if (type->isCppPrimitive()) + return true; + if (!type->isPrimitive()) + return false; + const PrimitiveTypeEntry* trueType = (const PrimitiveTypeEntry*) type; + if (trueType->basicReferencedTypeEntry()) + trueType = trueType->basicReferencedTypeEntry(); + return trueType->qualifiedCppName() == QLatin1String("std::string"); +} + +bool ShibokenGenerator::isCppPrimitive(const AbstractMetaType* type) +{ + if (isCString(type) || isVoidPointer(type)) + return true; + if (type->indirections() != 0) + return false; + return isCppPrimitive(type->typeEntry()); +} + +bool ShibokenGenerator::shouldDereferenceArgumentPointer(const AbstractMetaArgument* arg) +{ + return shouldDereferenceAbstractMetaTypePointer(arg->type()); +} + +bool ShibokenGenerator::shouldDereferenceAbstractMetaTypePointer(const AbstractMetaType* metaType) +{ + return metaType->referenceType() == LValueReference && isWrapperType(metaType) && !isPointer(metaType); +} + +bool ShibokenGenerator::visibilityModifiedToPrivate(const AbstractMetaFunction* func) +{ + const FunctionModificationList &mods = func->modifications(); + for (const FunctionModification &mod : mods) { + if (mod.modifiers & Modification::Private) + return true; + } + return false; +} + +QString ShibokenGenerator::cpythonCheckFunction(const AbstractMetaType* metaType, bool genericNumberType) +{ + QString customCheck; + if (metaType->typeEntry()->isCustom()) { + AbstractMetaType* type; + customCheck = guessCPythonCheckFunction(metaType->typeEntry()->name(), &type); + if (type) + metaType = type; + if (!customCheck.isEmpty()) + return customCheck; + } + + if (isCppPrimitive(metaType)) { + if (isCString(metaType)) + return QLatin1String("Shiboken::String::check"); + if (isVoidPointer(metaType)) + return QLatin1String("PyObject_Check"); + return cpythonCheckFunction(metaType->typeEntry(), genericNumberType); + } else if (metaType->typeEntry()->isContainer()) { + QString typeCheck = QLatin1String("Shiboken::Conversions::"); + ContainerTypeEntry::Type type = ((const ContainerTypeEntry*)metaType->typeEntry())->type(); + if (type == ContainerTypeEntry::ListContainer + || type == ContainerTypeEntry::StringListContainer + || type == ContainerTypeEntry::LinkedListContainer + || type == ContainerTypeEntry::VectorContainer + || type == ContainerTypeEntry::StackContainer + || type == ContainerTypeEntry::SetContainer + || type == ContainerTypeEntry::QueueContainer) { + const AbstractMetaType* type = metaType->instantiations().constFirst(); + if (isPointerToWrapperType(type)) { + typeCheck += QString::fromLatin1("checkSequenceTypes(%1, ").arg(cpythonTypeNameExt(type)); + } else if (isWrapperType(type)) { + typeCheck += QLatin1String("convertibleSequenceTypes(reinterpret_cast("); + typeCheck += cpythonTypeNameExt(type); + typeCheck += QLatin1String("), "); + } else { + typeCheck += QString::fromLatin1("convertibleSequenceTypes(%1, ").arg(converterObject(type)); + } + } else if (type == ContainerTypeEntry::MapContainer + || type == ContainerTypeEntry::MultiMapContainer + || type == ContainerTypeEntry::HashContainer + || type == ContainerTypeEntry::MultiHashContainer + || type == ContainerTypeEntry::PairContainer) { + QString pyType = (type == ContainerTypeEntry::PairContainer) ? QLatin1String("Pair") : QLatin1String("Dict"); + const AbstractMetaType* firstType = metaType->instantiations().constFirst(); + const AbstractMetaType* secondType = metaType->instantiations().constLast(); + if (isPointerToWrapperType(firstType) && isPointerToWrapperType(secondType)) { + typeCheck += QString::fromLatin1("check%1Types(%2, %3, ").arg(pyType) + .arg(cpythonTypeNameExt(firstType), cpythonTypeNameExt(secondType)); + } else { + typeCheck += QString::fromLatin1("convertible%1Types(%2, %3, %4, %5, ") + .arg(pyType, converterObject(firstType), + isPointerToWrapperType(firstType) ? QLatin1String("true") : QLatin1String("false"), + converterObject(secondType), + isPointerToWrapperType(secondType) ? QLatin1String("true") : QLatin1String("false")); + } + } + return typeCheck; + } + return cpythonCheckFunction(metaType->typeEntry(), genericNumberType); +} + +QString ShibokenGenerator::cpythonCheckFunction(const TypeEntry* type, bool genericNumberType) +{ + QString customCheck; + if (type->isCustom()) { + AbstractMetaType* metaType; + customCheck = guessCPythonCheckFunction(type->name(), &metaType); + if (metaType) + return cpythonCheckFunction(metaType, genericNumberType); + return customCheck; + } + + if (type->isEnum() || type->isFlags() || isWrapperType(type)) + return QString::fromLatin1("SbkObject_TypeCheck(%1, ").arg(cpythonTypeNameExt(type)); + else if (isCppPrimitive(type)) + return pythonPrimitiveTypeName((const PrimitiveTypeEntry*)type) + QLatin1String("_Check"); + QString typeCheck; + if (type->targetLangApiName() == type->name()) + typeCheck = cpythonIsConvertibleFunction(type); + else if (type->targetLangApiName() == QLatin1String("PyUnicode")) + typeCheck = QLatin1String("Shiboken::String::check"); + else + typeCheck = type->targetLangApiName() + QLatin1String("_Check"); + return typeCheck; +} + +QString ShibokenGenerator::guessCPythonCheckFunction(const QString& type, AbstractMetaType** metaType) +{ + *metaType = 0; + if (type == QLatin1String("PyTypeObject")) + return QLatin1String("PyType_Check"); + + if (type == QLatin1String("PyBuffer")) + return QLatin1String("Shiboken::Buffer::checkType"); + + if (type == QLatin1String("str")) + return QLatin1String("Shiboken::String::check"); + + *metaType = buildAbstractMetaTypeFromString(type); + if (*metaType && !(*metaType)->typeEntry()->isCustom()) + return QString(); + + return type + QLatin1String("_Check"); +} + +QString ShibokenGenerator::cpythonIsConvertibleFunction(const TypeEntry* type, + bool /* genericNumberType */, + bool /* checkExact */) +{ + if (isWrapperType(type)) { + QString result = QLatin1String("Shiboken::Conversions::"); + result += (type->isValue() && !isValueTypeWithCopyConstructorOnly(type)) + ? QLatin1String("isPythonToCppValueConvertible") + : QLatin1String("isPythonToCppPointerConvertible"); + result += QLatin1String("(reinterpret_cast(") + + cpythonTypeNameExt(type) + QLatin1String("), "); + return result; + } + return QString::fromLatin1("Shiboken::Conversions::isPythonToCppConvertible(%1, ") + .arg(converterObject(type)); +} +QString ShibokenGenerator::cpythonIsConvertibleFunction(const AbstractMetaType* metaType, + bool /* genericNumberType */) +{ + QString customCheck; + if (metaType->typeEntry()->isCustom()) { + AbstractMetaType* type; + customCheck = guessCPythonCheckFunction(metaType->typeEntry()->name(), &type); + if (type) + metaType = type; + if (!customCheck.isEmpty()) + return customCheck; + } + + QString result = QLatin1String("Shiboken::Conversions::"); + if (isWrapperType(metaType)) { + if (isPointer(metaType) || isValueTypeWithCopyConstructorOnly(metaType)) + result += QLatin1String("isPythonToCppPointerConvertible"); + else if (metaType->referenceType() == LValueReference) + result += QLatin1String("isPythonToCppReferenceConvertible"); + else + result += QLatin1String("isPythonToCppValueConvertible"); + result += QLatin1String("(reinterpret_cast(") + + cpythonTypeNameExt(metaType) + QLatin1String("), "); + return result; + } + result += QLatin1String("isPythonToCppConvertible(") + converterObject(metaType); + // Write out array sizes if known + const AbstractMetaTypeCList nestedArrayTypes = metaType->nestedArrayTypes(); + if (!nestedArrayTypes.isEmpty() && nestedArrayTypes.constLast()->isCppPrimitive()) { + const int dim1 = metaType->arrayElementCount(); + const int dim2 = nestedArrayTypes.constFirst()->isArray() + ? nestedArrayTypes.constFirst()->arrayElementCount() : -1; + result += QLatin1String(", ") + QString::number(dim1) + + QLatin1String(", ") + QString::number(dim2); + } + result += QLatin1String(", "); + return result; +} + +QString ShibokenGenerator::cpythonIsConvertibleFunction(const AbstractMetaArgument *metaArg, bool genericNumberType) +{ + return cpythonIsConvertibleFunction(metaArg->type(), genericNumberType); +} + +QString ShibokenGenerator::cpythonToCppConversionFunction(const AbstractMetaClass* metaClass) +{ + return QLatin1String("Shiboken::Conversions::pythonToCppPointer(reinterpret_cast(") + + cpythonTypeNameExt(metaClass->typeEntry()) + QLatin1String("), "); +} + +QString ShibokenGenerator::cpythonToCppConversionFunction(const AbstractMetaType *type, + const AbstractMetaClass * /* context */) +{ + if (isWrapperType(type)) { + return QLatin1String("Shiboken::Conversions::pythonToCpp") + + (isPointer(type) ? QLatin1String("Pointer") : QLatin1String("Copy")) + + QLatin1String("(reinterpret_cast(") + + cpythonTypeNameExt(type) + QLatin1String("), "); + } + return QStringLiteral("Shiboken::Conversions::pythonToCppCopy(%1, ") + .arg(converterObject(type)); +} + +QString ShibokenGenerator::cpythonToPythonConversionFunction(const AbstractMetaType *type, + const AbstractMetaClass * /* context */) +{ + if (isWrapperType(type)) { + QString conversion; + if (type->referenceType() == LValueReference && !(type->isValue() && type->isConstant()) && !isPointer(type)) + conversion = QLatin1String("reference"); + else if (type->isValue() || type->isSmartPointer()) + conversion = QLatin1String("copy"); + else + conversion = QLatin1String("pointer"); + QString result = QLatin1String("Shiboken::Conversions::") + conversion + + QLatin1String("ToPython(reinterpret_cast(") + + cpythonTypeNameExt(type) + QLatin1String("), "); + if (conversion != QLatin1String("pointer")) + result += QLatin1Char('&'); + return result; + } + return QStringLiteral("Shiboken::Conversions::copyToPython(%1, %2") + .arg(converterObject(type), + (isCString(type) || isVoidPointer(type)) ? QString() : QLatin1String("&")); +} + +QString ShibokenGenerator::cpythonToPythonConversionFunction(const AbstractMetaClass* metaClass) +{ + return cpythonToPythonConversionFunction(metaClass->typeEntry()); +} + +QString ShibokenGenerator::cpythonToPythonConversionFunction(const TypeEntry* type) +{ + if (isWrapperType(type)) { + const QString conversion = type->isValue() ? QLatin1String("copy") : QLatin1String("pointer"); + QString result = QLatin1String("Shiboken::Conversions::") + conversion + + QLatin1String("ToPython(reinterpret_cast(") + cpythonTypeNameExt(type) + + QLatin1String("), "); + if (conversion != QLatin1String("pointer")) + result += QLatin1Char('&'); + return result; + } + + return QStringLiteral("Shiboken::Conversions::copyToPython(%1, &").arg(converterObject(type)); +} + +QString ShibokenGenerator::argumentString(const AbstractMetaFunction *func, + const AbstractMetaArgument *argument, + Options options) const +{ + QString modified_type; + if (!(options & OriginalTypeDescription)) + modified_type = func->typeReplaced(argument->argumentIndex() + 1); + QString arg; + + if (modified_type.isEmpty()) + arg = translateType(argument->type(), func->implementingClass(), options); + else + arg = modified_type.replace(QLatin1Char('$'), QLatin1Char('.')); + + if (!(options & Generator::SkipName)) { + // "int a", "int a[]" + const int arrayPos = arg.indexOf(QLatin1Char('[')); + if (arrayPos != -1) + arg.insert(arrayPos, QLatin1Char(' ') + argument->name()); + else + arg.append(QLatin1Char(' ') + argument->name()); + } + + if ((options & Generator::SkipDefaultValues) != Generator::SkipDefaultValues && + !argument->originalDefaultValueExpression().isEmpty()) + { + QString default_value = argument->originalDefaultValueExpression(); + if (default_value == QLatin1String("NULL")) + default_value = QLatin1String(NULL_VALUE); + + //WORKAROUND: fix this please + if (default_value.startsWith(QLatin1String("new "))) + default_value.remove(0, 4); + + arg += QLatin1String(" = ") + default_value; + } + + return arg; +} + +void ShibokenGenerator::writeArgument(QTextStream &s, + const AbstractMetaFunction *func, + const AbstractMetaArgument *argument, + Options options) const +{ + s << argumentString(func, argument, options); +} + +void ShibokenGenerator::writeFunctionArguments(QTextStream &s, + const AbstractMetaFunction *func, + Options options) const +{ + AbstractMetaArgumentList arguments = func->arguments(); + + if (options & Generator::WriteSelf) { + s << func->implementingClass()->name() << '&'; + if (!(options & SkipName)) + s << " " PYTHON_SELF_VAR; + } + + int argUsed = 0; + for (int i = 0; i < arguments.size(); ++i) { + if ((options & Generator::SkipRemovedArguments) && func->argumentRemoved(i+1)) + continue; + + if ((options & Generator::WriteSelf) || argUsed != 0) + s << ", "; + writeArgument(s, func, arguments[i], options); + argUsed++; + } +} + +QString ShibokenGenerator::functionReturnType(const AbstractMetaFunction* func, Options options) const +{ + QString modifiedReturnType = QString(func->typeReplaced(0)); + if (!modifiedReturnType.isNull() && !(options & OriginalTypeDescription)) + return modifiedReturnType; + else + return translateType(func->type(), func->implementingClass(), options); +} + +QString ShibokenGenerator::functionSignature(const AbstractMetaFunction *func, + QString prepend, + QString append, + Options options, + int /* argCount */) const +{ + QString result; + QTextStream s(&result); + // The actual function + if (!(func->isEmptyFunction() || + func->isNormal() || + func->isSignal())) { + options |= Generator::SkipReturnType; + } else { + s << functionReturnType(func, options) << ' '; + } + + // name + QString name(func->originalName()); + if (func->isConstructor()) + name = wrapperName(func->ownerClass()); + + s << prepend << name << append << '('; + writeFunctionArguments(s, func, options); + s << ')'; + + if (func->isConstant() && !(options & Generator::ExcludeMethodConst)) + s << " const"; + + return result; +} + +void ShibokenGenerator::writeArgumentNames(QTextStream &s, + const AbstractMetaFunction *func, + Options options) const +{ + AbstractMetaArgumentList arguments = func->arguments(); + int argCount = 0; + for (int j = 0, max = arguments.size(); j < max; j++) { + + if ((options & Generator::SkipRemovedArguments) && (func->argumentRemoved(arguments.at(j)->argumentIndex()+1))) + continue; + + s << ((argCount > 0) ? ", " : "") << arguments.at(j)->name(); + + if (((options & Generator::VirtualCall) == 0) + && (!func->conversionRule(TypeSystem::NativeCode, arguments.at(j)->argumentIndex() + 1).isEmpty() + || !func->conversionRule(TypeSystem::TargetLangCode, arguments.at(j)->argumentIndex() + 1).isEmpty()) + && !func->isConstructor()) { + s << CONV_RULE_OUT_VAR_SUFFIX; + } + + argCount++; + } +} + +void ShibokenGenerator::writeFunctionCall(QTextStream& s, + const AbstractMetaFunction* func, + Options options) const +{ + if (!(options & Generator::SkipName)) + s << (func->isConstructor() ? func->ownerClass()->qualifiedCppName() : func->originalName()); + s << '('; + writeArgumentNames(s, func, options); + s << ')'; +} + +void ShibokenGenerator::writeUnusedVariableCast(QTextStream& s, const QString& variableName) +{ + s << INDENT << "SBK_UNUSED(" << variableName<< ')' << endl; +} + +AbstractMetaFunctionList ShibokenGenerator::filterFunctions(const AbstractMetaClass* metaClass) +{ + AbstractMetaFunctionList result; + const AbstractMetaFunctionList &funcs = metaClass->functions(); + for (AbstractMetaFunction *func : funcs) { + if (func->isSignal() || func->isDestructor() || func->usesRValueReferences() + || (func->isModifiedRemoved() && !func->isAbstract() + && (!avoidProtectedHack() || !func->isProtected()))) + continue; + result << func; + } + return result; +} + +ShibokenGenerator::ExtendedConverterData ShibokenGenerator::getExtendedConverters() const +{ + ExtendedConverterData extConvs; + const AbstractMetaClassList &classList = classes(); + for (const AbstractMetaClass *metaClass : classList) { + // Use only the classes for the current module. + if (!shouldGenerate(metaClass)) + continue; + const AbstractMetaFunctionList &overloads = metaClass->operatorOverloads(AbstractMetaClass::ConversionOp); + for (AbstractMetaFunction *convOp : overloads) { + // Get only the conversion operators that return a type from another module, + // that are value-types and were not removed in the type system. + const TypeEntry* convType = convOp->type()->typeEntry(); + if ((convType->codeGeneration() & TypeEntry::GenerateTargetLang) + || !convType->isValue() + || convOp->isModifiedRemoved()) + continue; + extConvs[convType].append(convOp->ownerClass()); + } + } + return extConvs; +} + +QVector ShibokenGenerator::getPrimitiveCustomConversions() +{ + QVector conversions; + const PrimitiveTypeEntryList &primitiveTypeList = primitiveTypes(); + for (const PrimitiveTypeEntry *type : primitiveTypeList) { + if (!shouldGenerateTypeEntry(type) || !isUserPrimitive(type) || !type->customConversion()) + continue; + + conversions << type->customConversion(); + } + return conversions; +} + +static QString getArgumentsFromMethodCall(const QString& str) +{ + // It would be way nicer to be able to use a Perl like + // regular expression that accepts temporary variables + // to count the parenthesis. + // For more information check this: + // http://perl.plover.com/yak/regex/samples/slide083.html + static QLatin1String funcCall("%CPPSELF.%FUNCTION_NAME"); + int pos = str.indexOf(funcCall); + if (pos == -1) + return QString(); + pos = pos + funcCall.size(); + while (str.at(pos) == QLatin1Char(' ') || str.at(pos) == QLatin1Char('\t')) + ++pos; + if (str.at(pos) == QLatin1Char('(')) + ++pos; + int begin = pos; + int counter = 1; + while (counter != 0) { + if (str.at(pos) == QLatin1Char('(')) + ++counter; + else if (str.at(pos) == QLatin1Char(')')) + --counter; + ++pos; + } + return str.mid(begin, pos-begin-1); +} + +QString ShibokenGenerator::getCodeSnippets(const CodeSnipList& codeSnips, + TypeSystem::CodeSnipPosition position, + TypeSystem::Language language) +{ + QString code; + QTextStream c(&code); + for (const CodeSnip &snip : codeSnips) { + if ((position != TypeSystem::CodeSnipPositionAny && snip.position != position) || !(snip.language & language)) + continue; + QString snipCode; + QTextStream sc(&snipCode); + formatCode(sc, snip.code(), INDENT); + c << snipCode; + } + return code; +} +void ShibokenGenerator::processCodeSnip(QString& code, const AbstractMetaClass* context) +{ + if (context) { + // Replace template variable by the Python Type object + // for the class context in which the variable is used. + code.replace(QLatin1String("%PYTHONTYPEOBJECT"), + cpythonTypeName(context) + QLatin1String("->type")); + code.replace(QLatin1String("%TYPE"), wrapperName(context)); + code.replace(QLatin1String("%CPPTYPE"), context->name()); + } + + // replace "toPython" converters + replaceConvertToPythonTypeSystemVariable(code); + + // replace "toCpp" converters + replaceConvertToCppTypeSystemVariable(code); + + // replace "isConvertible" check + replaceIsConvertibleToCppTypeSystemVariable(code); + + // replace "checkType" check + replaceTypeCheckTypeSystemVariable(code); +} + +ShibokenGenerator::ArgumentVarReplacementList ShibokenGenerator::getArgumentReplacement(const AbstractMetaFunction* func, + bool usePyArgs, TypeSystem::Language language, + const AbstractMetaArgument* lastArg) +{ + ArgumentVarReplacementList argReplacements; + TypeSystem::Language convLang = (language == TypeSystem::TargetLangCode) + ? TypeSystem::NativeCode : TypeSystem::TargetLangCode; + int removed = 0; + for (int i = 0; i < func->arguments().size(); ++i) { + const AbstractMetaArgument* arg = func->arguments().at(i); + QString argValue; + if (language == TypeSystem::TargetLangCode) { + bool hasConversionRule = !func->conversionRule(convLang, i+1).isEmpty(); + bool argRemoved = func->argumentRemoved(i+1); + removed = removed + (int) argRemoved; + if (argRemoved && hasConversionRule) + argValue = arg->name() + QLatin1String(CONV_RULE_OUT_VAR_SUFFIX); + else if (argRemoved || (lastArg && arg->argumentIndex() > lastArg->argumentIndex())) + argValue = QLatin1String(CPP_ARG_REMOVED) + QString::number(i); + if (!argRemoved && argValue.isEmpty()) { + int argPos = i - removed; + const AbstractMetaType* type = arg->type(); + QString typeReplaced = func->typeReplaced(arg->argumentIndex() + 1); + if (!typeReplaced.isEmpty()) { + AbstractMetaType* builtType = buildAbstractMetaTypeFromString(typeReplaced); + if (builtType) + type = builtType; + } + if (type->typeEntry()->isCustom()) { + argValue = usePyArgs + ? QString::fromLatin1(PYTHON_ARGS "[%1]").arg(argPos) + : QLatin1String(PYTHON_ARG); + } else { + argValue = hasConversionRule + ? arg->name() + QLatin1String(CONV_RULE_OUT_VAR_SUFFIX) + : QLatin1String(CPP_ARG) + QString::number(argPos); + if (isWrapperType(type)) { + if (type->referenceType() == LValueReference && !isPointer(type)) + argValue.prepend(QLatin1Char('*')); + } + } + } + } else { + argValue = arg->name(); + } + if (!argValue.isEmpty()) + argReplacements << ArgumentVarReplacementPair(arg, argValue); + + } + return argReplacements; +} + +void ShibokenGenerator::writeCodeSnips(QTextStream& s, + const CodeSnipList& codeSnips, + TypeSystem::CodeSnipPosition position, + TypeSystem::Language language, + const AbstractMetaClass* context) +{ + QString code = getCodeSnippets(codeSnips, position, language); + if (code.isEmpty()) + return; + processCodeSnip(code, context); + s << INDENT << "// Begin code injection" << endl; + s << code; + s << INDENT << "// End of code injection" << endl; +} + +static QString msgWrongIndex(const char *varName, const QString &capture, const AbstractMetaFunction *func) +{ + QString result; + QTextStream str(&result); + str << "Wrong index for " << varName << " variable (" << capture << ") on "; + if (const AbstractMetaClass *c = func->implementingClass()) + str << c->name() << "::"; + str << func->signature(); + return result; +} + +void ShibokenGenerator::writeCodeSnips(QTextStream& s, + const CodeSnipList& codeSnips, + TypeSystem::CodeSnipPosition position, + TypeSystem::Language language, + const AbstractMetaFunction* func, + const AbstractMetaArgument* lastArg) +{ + QString code = getCodeSnippets(codeSnips, position, language); + if (code.isEmpty()) + return; + + // Calculate the real number of arguments. + int argsRemoved = 0; + for (int i = 0; i < func->arguments().size(); i++) { + if (func->argumentRemoved(i+1)) + argsRemoved++; + } + + OverloadData od(getFunctionGroups(func->implementingClass())[func->name()], this); + bool usePyArgs = pythonFunctionWrapperUsesListOfArguments(od); + + // Replace %PYARG_# variables. + code.replace(QLatin1String("%PYARG_0"), QLatin1String(PYTHON_RETURN_VAR)); + + static const QRegularExpression pyArgsRegex(QStringLiteral("%PYARG_(\\d+)")); + Q_ASSERT(pyArgsRegex.isValid()); + if (language == TypeSystem::TargetLangCode) { + if (usePyArgs) { + code.replace(pyArgsRegex, QLatin1String(PYTHON_ARGS"[\\1-1]")); + } else { + static const QRegularExpression pyArgsRegexCheck(QStringLiteral("%PYARG_([2-9]+)")); + Q_ASSERT(pyArgsRegexCheck.isValid()); + const QRegularExpressionMatch match = pyArgsRegexCheck.match(code); + if (match.hasMatch()) { + qCWarning(lcShiboken).noquote().nospace() + << msgWrongIndex("%PYARG", match.captured(1), func); + return; + } + code.replace(QLatin1String("%PYARG_1"), QLatin1String(PYTHON_ARG)); + } + } else { + // Replaces the simplest case of attribution to a + // Python argument on the binding virtual method. + static const QRegularExpression pyArgsAttributionRegex(QStringLiteral("%PYARG_(\\d+)\\s*=[^=]\\s*([^;]+)")); + Q_ASSERT(pyArgsAttributionRegex.isValid()); + code.replace(pyArgsAttributionRegex, QLatin1String("PyTuple_SET_ITEM(" PYTHON_ARGS ", \\1-1, \\2)")); + code.replace(pyArgsRegex, QLatin1String("PyTuple_GET_ITEM(" PYTHON_ARGS ", \\1-1)")); + } + + // Replace %ARG#_TYPE variables. + const AbstractMetaArgumentList &arguments = func->arguments(); + for (const AbstractMetaArgument *arg : arguments) { + QString argTypeVar = QStringLiteral("%ARG%1_TYPE").arg(arg->argumentIndex() + 1); + QString argTypeVal = arg->type()->cppSignature(); + code.replace(argTypeVar, argTypeVal); + } + + static const QRegularExpression cppArgTypeRegexCheck(QStringLiteral("%ARG(\\d+)_TYPE")); + Q_ASSERT(cppArgTypeRegexCheck.isValid()); + QRegularExpressionMatchIterator rit = cppArgTypeRegexCheck.globalMatch(code); + while (rit.hasNext()) { + QRegularExpressionMatch match = rit.next(); + qCWarning(lcShiboken).noquote().nospace() + << msgWrongIndex("%ARG#_TYPE", match.captured(1), func); + } + + // Replace template variable for return variable name. + if (func->isConstructor()) { + code.replace(QLatin1String("%0."), QLatin1String("cptr->")); + code.replace(QLatin1String("%0"), QLatin1String("cptr")); + } else if (func->type()) { + QString returnValueOp = isPointerToWrapperType(func->type()) + ? QLatin1String("%1->") : QLatin1String("%1."); + if (ShibokenGenerator::isWrapperType(func->type())) + code.replace(QLatin1String("%0."), returnValueOp.arg(QLatin1String(CPP_RETURN_VAR))); + code.replace(QLatin1String("%0"), QLatin1String(CPP_RETURN_VAR)); + } + + // Replace template variable for self Python object. + QString pySelf = (language == TypeSystem::NativeCode) ? QLatin1String("pySelf") : QLatin1String(PYTHON_SELF_VAR); + code.replace(QLatin1String("%PYSELF"), pySelf); + + // Replace template variable for a pointer to C++ of this object. + if (func->implementingClass()) { + QString replacement = func->isStatic() ? QLatin1String("%1::") : QLatin1String("%1->"); + QString cppSelf; + if (func->isStatic()) + cppSelf = func->ownerClass()->qualifiedCppName(); + else if (language == TypeSystem::NativeCode) + cppSelf = QLatin1String("this"); + else + cppSelf = QLatin1String(CPP_SELF_VAR); + + // On comparison operator CPP_SELF_VAR is always a reference. + if (func->isComparisonOperator()) + replacement = QLatin1String("%1."); + + if (func->isVirtual() && !func->isAbstract() && (!avoidProtectedHack() || !func->isProtected())) { + QString methodCallArgs = getArgumentsFromMethodCall(code); + if (!methodCallArgs.isNull()) { + const QString pattern = QStringLiteral("%CPPSELF.%FUNCTION_NAME(%1)").arg(methodCallArgs); + if (func->name() == QLatin1String("metaObject")) { + QString wrapperClassName = wrapperName(func->ownerClass()); + QString cppSelfVar = avoidProtectedHack() + ? QLatin1String("%CPPSELF") + : QStringLiteral("reinterpret_cast<%1*>(%CPPSELF)").arg(wrapperClassName); + code.replace(pattern, + QString::fromLatin1("(Shiboken::Object::hasCppWrapper(reinterpret_cast(%1))" + " ? %2->::%3::%FUNCTION_NAME(%4)" + " : %CPPSELF.%FUNCTION_NAME(%4))").arg(pySelf, cppSelfVar, wrapperClassName, methodCallArgs)); + } else { + code.replace(pattern, + QString::fromLatin1("(Shiboken::Object::hasCppWrapper(reinterpret_cast(%1))" + " ? %CPPSELF->::%TYPE::%FUNCTION_NAME(%2)" + " : %CPPSELF.%FUNCTION_NAME(%2))").arg(pySelf, methodCallArgs)); + } + } + } + + code.replace(QLatin1String("%CPPSELF."), replacement.arg(cppSelf)); + code.replace(QLatin1String("%CPPSELF"), cppSelf); + + if (code.indexOf(QLatin1String("%BEGIN_ALLOW_THREADS")) > -1) { + if (code.count(QLatin1String("%BEGIN_ALLOW_THREADS")) == code.count(QLatin1String("%END_ALLOW_THREADS"))) { + code.replace(QLatin1String("%BEGIN_ALLOW_THREADS"), QLatin1String(BEGIN_ALLOW_THREADS)); + code.replace(QLatin1String("%END_ALLOW_THREADS"), QLatin1String(END_ALLOW_THREADS)); + } else { + qCWarning(lcShiboken) << "%BEGIN_ALLOW_THREADS and %END_ALLOW_THREADS mismatch"; + } + } + + // replace template variable for the Python Type object for the + // class implementing the method in which the code snip is written + if (func->isStatic()) { + code.replace(QLatin1String("%PYTHONTYPEOBJECT"), + cpythonTypeName(func->implementingClass()) + QLatin1String("->type")); + } else { + code.replace(QLatin1String("%PYTHONTYPEOBJECT."), pySelf + QLatin1String("->ob_type->")); + code.replace(QLatin1String("%PYTHONTYPEOBJECT"), pySelf + QLatin1String("->ob_type")); + } + } + + // Replaces template %ARGUMENT_NAMES and %# variables by argument variables and values. + // Replaces template variables %# for individual arguments. + const ArgumentVarReplacementList &argReplacements = getArgumentReplacement(func, usePyArgs, language, lastArg); + + QStringList args; + for (const ArgumentVarReplacementPair &pair : argReplacements) { + if (pair.second.startsWith(QLatin1String(CPP_ARG_REMOVED))) + continue; + args << pair.second; + } + code.replace(QLatin1String("%ARGUMENT_NAMES"), args.join(QLatin1String(", "))); + + for (const ArgumentVarReplacementPair &pair : argReplacements) { + const AbstractMetaArgument* arg = pair.first; + int idx = arg->argumentIndex() + 1; + AbstractMetaType* type = arg->type(); + QString typeReplaced = func->typeReplaced(arg->argumentIndex() + 1); + if (!typeReplaced.isEmpty()) { + AbstractMetaType* builtType = buildAbstractMetaTypeFromString(typeReplaced); + if (builtType) + type = builtType; + } + if (isWrapperType(type)) { + QString replacement = pair.second; + if (type->referenceType() == LValueReference && !isPointer(type)) + replacement.remove(0, 1); + if (type->referenceType() == LValueReference || isPointer(type)) + code.replace(QString::fromLatin1("%%1.").arg(idx), replacement + QLatin1String("->")); + } + code.replace(placeHolderRegex(idx), pair.second); + } + + if (language == TypeSystem::NativeCode) { + // Replaces template %PYTHON_ARGUMENTS variable with a pointer to the Python tuple + // containing the converted virtual method arguments received from C++ to be passed + // to the Python override. + code.replace(QLatin1String("%PYTHON_ARGUMENTS"), QLatin1String(PYTHON_ARGS)); + + // replace variable %PYTHON_METHOD_OVERRIDE for a pointer to the Python method + // override for the C++ virtual method in which this piece of code was inserted + code.replace(QLatin1String("%PYTHON_METHOD_OVERRIDE"), QLatin1String(PYTHON_OVERRIDE_VAR)); + } + + if (avoidProtectedHack()) { + // If the function being processed was added by the user via type system, + // Shiboken needs to find out if there are other overloads for the same method + // name and if any of them is of the protected visibility. This is used to replace + // calls to %FUNCTION_NAME on user written custom code for calls to the protected + // dispatcher. + bool hasProtectedOverload = false; + if (func->isUserAdded()) { + const AbstractMetaFunctionList &funcs = getFunctionOverloads(func->ownerClass(), func->name()); + for (const AbstractMetaFunction *f : funcs) + hasProtectedOverload |= f->isProtected(); + } + + if (func->isProtected() || hasProtectedOverload) { + code.replace(QLatin1String("%TYPE::%FUNCTION_NAME"), + QStringLiteral("%1::%2_protected") + .arg(wrapperName(func->ownerClass()), func->originalName())); + code.replace(QLatin1String("%FUNCTION_NAME"), + func->originalName() + QLatin1String("_protected")); + } + } + + if (func->isConstructor() && shouldGenerateCppWrapper(func->ownerClass())) + code.replace(QLatin1String("%TYPE"), wrapperName(func->ownerClass())); + + if (func->ownerClass()) + code.replace(QLatin1String("%CPPTYPE"), func->ownerClass()->name()); + + replaceTemplateVariables(code, func); + + processCodeSnip(code); + s << INDENT << "// Begin code injection" << endl; + s << code; + s << INDENT << "// End of code injection" << endl; +} + +// Returns true if the string is an expression, +// and false if it is a variable. +static bool isVariable(const QString& code) +{ + static const QRegularExpression expr(QStringLiteral("^\\s*\\*?\\s*[A-Za-z_][A-Za-z_0-9.]*\\s*(?:\\[[^\\[]+\\])*$")); + Q_ASSERT(expr.isValid()); + return expr.match(code.trimmed()).hasMatch(); +} + +// A miniature normalizer that puts a type string into a format +// suitable for comparison with AbstractMetaType::cppSignature() +// result. +static QString miniNormalizer(const QString& varType) +{ + QString normalized = varType.trimmed(); + if (normalized.isEmpty()) + return normalized; + if (normalized.startsWith(QLatin1String("::"))) + normalized.remove(0, 2); + QString suffix; + while (normalized.endsWith(QLatin1Char('*')) || normalized.endsWith(QLatin1Char('&'))) { + suffix.prepend(normalized.at(normalized.count() - 1)); + normalized.chop(1); + normalized = normalized.trimmed(); + } + const QString result = normalized + QLatin1Char(' ') + suffix; + return result.trimmed(); +} +// The position must indicate the first character after the opening '('. +// ATTENTION: do not modify this function to trim any resulting string! +// This must be done elsewhere. +static QString getConverterTypeSystemVariableArgument(const QString& code, int pos) +{ + QString arg; + int parenthesisDepth = 0; + int count = 0; + while (pos + count < code.count()) { + char c = code.at(pos+count).toLatin1(); // toAscii is gone + if (c == '(') { + ++parenthesisDepth; + } else if (c == ')') { + if (parenthesisDepth == 0) { + arg = code.mid(pos, count).trimmed(); + break; + } + --parenthesisDepth; + } + ++count; + } + if (parenthesisDepth != 0) + qFatal("Unbalanced parenthesis on type system converter variable call."); + return arg; +} +typedef QPair StringPair; + +static QString msgCannotFindType(const QString &type, const QString &variable, + const QString &why) +{ + QString result; + QTextStream(&result) << "Could not find type '" + << type << "' for use in '" << variable << "' conversion: " << why + << "\nMake sure to use the full C++ name, e.g. 'Namespace::Class'."; + return result; +} + +void ShibokenGenerator::replaceConverterTypeSystemVariable(TypeSystemConverterVariable converterVariable, QString& code) +{ + QVector replacements; + QRegularExpressionMatchIterator rit = m_typeSystemConvRegEx[converterVariable].globalMatch(code); + while (rit.hasNext()) { + const QRegularExpressionMatch match = rit.next(); + const QStringList list = match.capturedTexts(); + QString conversionString = list.constFirst(); + QString conversionTypeName = list.constLast(); + QString message; + const AbstractMetaType *conversionType = buildAbstractMetaTypeFromString(conversionTypeName, &message); + if (!conversionType) { + qFatal("%s", qPrintable(msgCannotFindType(conversionTypeName, + m_typeSystemConvName[converterVariable], + message))); + } + QString conversion; + QTextStream c(&conversion); + switch (converterVariable) { + case TypeSystemToCppFunction: { + int end = match.capturedStart(); + int start = end; + while (start > 0 && code.at(start) != QLatin1Char('\n')) + --start; + while (code.at(start).isSpace()) + ++start; + QString varType = code.mid(start, end - start); + conversionString = varType + list.constFirst(); + varType = miniNormalizer(varType); + QString varName = list.at(1).trimmed(); + if (!varType.isEmpty()) { + if (varType != conversionType->cppSignature()) { + qFatal(qPrintable(QString::fromLatin1("Types of receiver variable ('%1') and %CONVERTTOCPP type system variable ('%2') differ.") + .arg(varType, conversionType->cppSignature())), NULL); + } + c << getFullTypeName(conversionType) << ' ' << varName; + writeMinimalConstructorExpression(c, conversionType); + c << ';' << endl; + Indentation indent(INDENT); + c << INDENT; + } + c << cpythonToCppConversionFunction(conversionType); + QString prefix; + if (varName.startsWith(QLatin1Char('*'))) { + varName.remove(0, 1); + varName = varName.trimmed(); + } else { + prefix = QLatin1Char('&'); + } + QString arg = getConverterTypeSystemVariableArgument(code, match.capturedEnd()); + conversionString += arg; + c << arg << ", " << prefix << '(' << varName << ')'; + break; + } + case TypeSystemCheckFunction: + conversion = cpythonCheckFunction(conversionType); + if (conversionType->typeEntry()->isPrimitive() + && (conversionType->typeEntry()->name() == QLatin1String("PyObject") + || !conversion.endsWith(QLatin1Char(' ')))) { + c << '('; + break; + } + case TypeSystemIsConvertibleFunction: + if (conversion.isEmpty()) + conversion = cpythonIsConvertibleFunction(conversionType); + case TypeSystemToPythonFunction: + if (conversion.isEmpty()) + conversion = cpythonToPythonConversionFunction(conversionType); + default: { + QString arg = getConverterTypeSystemVariableArgument(code, match.capturedEnd()); + conversionString += arg; + if (converterVariable == TypeSystemToPythonFunction && !isVariable(arg)) { + qFatal(qPrintable(QString::fromLatin1("Only variables are acceptable as argument to %%CONVERTTOPYTHON type system variable on code snippet: '%1'") + .arg(code)), NULL); + } + if (conversion.contains(QLatin1String("%in"))) { + conversion.prepend(QLatin1Char('(')); + conversion.replace(QLatin1String("%in"), arg); + } else { + c << arg; + } + } + } + replacements.append(qMakePair(conversionString, conversion)); + } + for (const StringPair &rep : qAsConst(replacements)) + code.replace(rep.first, rep.second); +} + +bool ShibokenGenerator::injectedCodeUsesPySelf(const AbstractMetaFunction* func) +{ + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::NativeCode); + for (const CodeSnip &snip : qAsConst(snips)) { + if (snip.code().contains(QLatin1String("%PYSELF"))) + return true; + } + return false; +} + +bool ShibokenGenerator::injectedCodeCallsCppFunction(const AbstractMetaFunction* func) +{ + QString funcCall = func->originalName() + QLatin1Char('('); + QString wrappedCtorCall; + if (func->isConstructor()) { + funcCall.prepend(QLatin1String("new ")); + wrappedCtorCall = QStringLiteral("new %1(").arg(wrapperName(func->ownerClass())); + } + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode); + for (const CodeSnip &snip : qAsConst(snips)) { + if (snip.code().contains(QLatin1String("%FUNCTION_NAME(")) || snip.code().contains(funcCall) + || (func->isConstructor() + && ((func->ownerClass()->isPolymorphic() && snip.code().contains(wrappedCtorCall)) + || snip.code().contains(QLatin1String("new %TYPE(")))) + ) + return true; + } + return false; +} + +bool ShibokenGenerator::injectedCodeCallsPythonOverride(const AbstractMetaFunction* func) +{ + static const QRegularExpression overrideCallRegexCheck(QStringLiteral("PyObject_Call\\s*\\(\\s*%PYTHON_METHOD_OVERRIDE\\s*,")); + Q_ASSERT(overrideCallRegexCheck.isValid()); + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::NativeCode); + for (const CodeSnip &snip : qAsConst(snips)) { + if (snip.code().contains(overrideCallRegexCheck)) + return true; + } + return false; +} + +bool ShibokenGenerator::injectedCodeHasReturnValueAttribution(const AbstractMetaFunction* func, TypeSystem::Language language) +{ + static const QRegularExpression retValAttributionRegexCheck_native(QStringLiteral("%0\\s*=[^=]\\s*.+")); + Q_ASSERT(retValAttributionRegexCheck_native.isValid()); + static const QRegularExpression retValAttributionRegexCheck_target(QStringLiteral("%PYARG_0\\s*=[^=]\\s*.+")); + Q_ASSERT(retValAttributionRegexCheck_target.isValid()); + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, language); + for (const CodeSnip &snip : qAsConst(snips)) { + if (language == TypeSystem::TargetLangCode) { + if (snip.code().contains(retValAttributionRegexCheck_target)) + return true; + } else { + if (snip.code().contains(retValAttributionRegexCheck_native)) + return true; + } + } + return false; +} + +bool ShibokenGenerator::injectedCodeUsesArgument(const AbstractMetaFunction* func, int argumentIndex) +{ + CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny); + const QRegularExpression argRegEx = placeHolderRegex(argumentIndex + 1); + for (const CodeSnip &snip : qAsConst(snips)) { + QString code = snip.code(); + if (code.contains(QLatin1String("%ARGUMENT_NAMES")) || code.contains(argRegEx)) + return true; + } + return false; +} + +bool ShibokenGenerator::hasMultipleInheritanceInAncestry(const AbstractMetaClass* metaClass) +{ + if (!metaClass || metaClass->baseClassNames().isEmpty()) + return false; + if (metaClass->baseClassNames().size() > 1) + return true; + return hasMultipleInheritanceInAncestry(metaClass->baseClass()); +} + +typedef QMap FunctionGroupMap; +typedef FunctionGroupMap::const_iterator FunctionGroupMapIt; + +bool ShibokenGenerator::classNeedsGetattroFunction(const AbstractMetaClass* metaClass) +{ + if (!metaClass) + return false; + if (metaClass->typeEntry()->isSmartPointer()) + return true; + const FunctionGroupMap &functionGroup = getFunctionGroups(metaClass); + for (FunctionGroupMapIt it = functionGroup.cbegin(), end = functionGroup.cend(); it != end; ++it) { + AbstractMetaFunctionList overloads; + for (AbstractMetaFunction *func : qAsConst(it.value())) { + if (func->isAssignmentOperator() || func->isCastOperator() || func->isModifiedRemoved() + || func->isPrivate() || func->ownerClass() != func->implementingClass() + || func->isConstructor() || func->isOperatorOverload()) + continue; + overloads.append(func); + } + if (overloads.isEmpty()) + continue; + if (OverloadData::hasStaticAndInstanceFunctions(overloads)) + return true; + } + return false; +} + +bool ShibokenGenerator::classNeedsSetattroFunction(const AbstractMetaClass *metaClass) +{ + if (!metaClass) + return false; + if (metaClass->typeEntry()->isSmartPointer()) + return true; + return false; +} + +AbstractMetaFunctionList ShibokenGenerator::getMethodsWithBothStaticAndNonStaticMethods(const AbstractMetaClass* metaClass) +{ + AbstractMetaFunctionList methods; + if (metaClass) { + const FunctionGroupMap &functionGroups = getFunctionGroups(metaClass); + for (FunctionGroupMapIt it = functionGroups.cbegin(), end = functionGroups.cend(); it != end; ++it) { + AbstractMetaFunctionList overloads; + for (AbstractMetaFunction *func : qAsConst(it.value())) { + if (func->isAssignmentOperator() || func->isCastOperator() || func->isModifiedRemoved() + || func->isPrivate() || func->ownerClass() != func->implementingClass() + || func->isConstructor() || func->isOperatorOverload()) + continue; + overloads.append(func); + } + if (overloads.isEmpty()) + continue; + if (OverloadData::hasStaticAndInstanceFunctions(overloads)) + methods.append(overloads.constFirst()); + } + } + return methods; +} + +AbstractMetaClassList ShibokenGenerator::getBaseClasses(const AbstractMetaClass* metaClass) const +{ + AbstractMetaClassList baseClasses; + if (metaClass) { + QStringList baseClassNames(metaClass->baseClassNames()); + const QString defaultSuperclass = metaClass->typeEntry()->defaultSuperclass(); + if (!defaultSuperclass.isEmpty()) { + int index = baseClassNames.indexOf(defaultSuperclass); + if (index >= 0) + baseClassNames.move(index, 0); + } + for (const QString &parent : baseClassNames) { + AbstractMetaClass *clazz = AbstractMetaClass::findClass(classes(), parent); + if (clazz) + baseClasses << clazz; + } + } + return baseClasses; +} + +const AbstractMetaClass* ShibokenGenerator::getMultipleInheritingClass(const AbstractMetaClass* metaClass) +{ + if (!metaClass || metaClass->baseClassNames().isEmpty()) + return 0; + if (metaClass->baseClassNames().size() > 1) + return metaClass; + return getMultipleInheritingClass(metaClass->baseClass()); +} + +AbstractMetaClassList ShibokenGenerator::getAllAncestors(const AbstractMetaClass* metaClass) const +{ + AbstractMetaClassList result; + if (metaClass) { + AbstractMetaClassList baseClasses = getBaseClasses(metaClass); + for (AbstractMetaClass *base : qAsConst(baseClasses)) { + result.append(base); + result.append(getAllAncestors(base)); + } + } + return result; +} + +QString ShibokenGenerator::getModuleHeaderFileName(const QString& moduleName) const +{ + QString result = moduleName.isEmpty() ? packageName() : moduleName; + result.replace(QLatin1Char('.'), QLatin1Char('_')); + return result.toLower() + QLatin1String("_python.h"); +} + +bool ShibokenGenerator::isCopyable(const AbstractMetaClass *metaClass) + +{ + if (metaClass->isNamespace() || isObjectType(metaClass)) + return false; + else if (metaClass->typeEntry()->copyable() == ComplexTypeEntry::Unknown) + return metaClass->hasCloneOperator(); + else + return (metaClass->typeEntry()->copyable() == ComplexTypeEntry::CopyableSet); + + return false; +} + +AbstractMetaType *ShibokenGenerator::buildAbstractMetaTypeFromString(QString typeSignature, + QString *errorMessage) +{ + typeSignature = typeSignature.trimmed(); + if (typeSignature.startsWith(QLatin1String("::"))) + typeSignature.remove(0, 2); + + if (m_metaTypeFromStringCache.contains(typeSignature)) + return m_metaTypeFromStringCache.value(typeSignature); + + QString typeString = typeSignature; + bool isConst = typeString.startsWith(QLatin1String("const ")); + if (isConst) + typeString.remove(0, sizeof("const ") / sizeof(char) - 1); + + ReferenceType refType = NoReference; + if (typeString.endsWith(QLatin1String("&&"))) { + refType = RValueReference; + typeString.chop(2); + typeString = typeString.trimmed(); + } else if (typeString.endsWith(QLatin1Char('&'))) { + refType = LValueReference; + typeString.chop(1); + typeString = typeString.trimmed(); + } + + int indirections = 0; + while (typeString.endsWith(QLatin1Char('*'))) { + ++indirections; + typeString.chop(1); + typeString = typeString.trimmed(); + } + + if (typeString.startsWith(QLatin1String("::"))) + typeString.remove(0, 2); + + QString adjustedTypeName = typeString; + AbstractMetaTypeList instantiations; + int lpos = typeString.indexOf(QLatin1Char('<')); + if (lpos > -1) { + QStringList instantiatedTypes; + int rpos = typeString.lastIndexOf(QLatin1Char('>')); + if ((lpos != -1) && (rpos != -1)) { + QString type = typeString.mid(lpos + 1, rpos - lpos - 1); + int depth = 0; + int start = 0; + for (int i = 0; i < type.count(); ++i) { + if (type.at(i) == QLatin1Char('<')) { + ++depth; + } else if (type.at(i) == QLatin1Char('>')) { + --depth; + } else if (type.at(i) == QLatin1Char(',') && depth == 0) { + instantiatedTypes << type.mid(start, i - start).trimmed(); + start = i + 1; + } + } + instantiatedTypes << type.mid(start).trimmed(); + adjustedTypeName.truncate(lpos); + } + for (const QString &instantiatedType : qAsConst(instantiatedTypes)) { + AbstractMetaType *tmplArgType = buildAbstractMetaTypeFromString(instantiatedType); + if (!tmplArgType) { + if (errorMessage) { + QTextStream(errorMessage) << "Cannot find template type \"" + << instantiatedType << "\" for \"" << typeSignature << "\"."; + } + return nullptr; + } + instantiations.append(tmplArgType); + } + } + + TypeEntry *typeEntry = nullptr; + AbstractMetaType::TypeUsagePattern pattern = AbstractMetaType::InvalidPattern; + + if (instantiations.size() == 1 + && instantiations.at(0)->typeUsagePattern() == AbstractMetaType::EnumPattern + && adjustedTypeName == QLatin1String("QFlags")) { + pattern = AbstractMetaType::FlagsPattern; + typeEntry = TypeDatabase::instance()->findType(typeSignature); + } else { + typeEntry = TypeDatabase::instance()->findType(adjustedTypeName); + } + + if (!typeEntry) { + if (errorMessage) { + QTextStream(errorMessage) << "Cannot find type \"" << adjustedTypeName + << "\" for \"" << typeSignature << "\"."; + } + return nullptr; + } + + AbstractMetaType *metaType = new AbstractMetaType(); + metaType->setTypeEntry(typeEntry); + metaType->setIndirections(indirections); + metaType->setReferenceType(refType); + metaType->setConstant(isConst); + metaType->setTypeUsagePattern(AbstractMetaType::ContainerPattern); + switch (pattern) { + case AbstractMetaType::FlagsPattern: + metaType->setTypeUsagePattern(pattern); + break; + default: + metaType->setInstantiations(instantiations); + metaType->setTypeUsagePattern(AbstractMetaType::ContainerPattern); + metaType->decideUsagePattern(); + break; + } + + m_metaTypeFromStringCache.insert(typeSignature, metaType); + return metaType; +} + +AbstractMetaType* ShibokenGenerator::buildAbstractMetaTypeFromTypeEntry(const TypeEntry* typeEntry) +{ + QString typeName = typeEntry->qualifiedCppName(); + if (typeName.startsWith(QLatin1String("::"))) + typeName.remove(0, 2); + if (m_metaTypeFromStringCache.contains(typeName)) + return m_metaTypeFromStringCache.value(typeName); + AbstractMetaType* metaType = new AbstractMetaType; + metaType->setTypeEntry(typeEntry); + metaType->setIndirections(0); + metaType->setReferenceType(NoReference); + metaType->setConstant(false); + metaType->decideUsagePattern(); + m_metaTypeFromStringCache.insert(typeName, metaType); + return metaType; +} +AbstractMetaType* ShibokenGenerator::buildAbstractMetaTypeFromAbstractMetaClass(const AbstractMetaClass* metaClass) +{ + return ShibokenGenerator::buildAbstractMetaTypeFromTypeEntry(metaClass->typeEntry()); +} + +/* +static void dumpFunction(AbstractMetaFunctionList lst) +{ + qDebug() << "DUMP FUNCTIONS: "; + for (AbstractMetaFunction *func : qAsConst(lst)) + qDebug() << "*" << func->ownerClass()->name() + << func->signature() + << "Private: " << func->isPrivate() + << "Empty: " << func->isEmptyFunction() + << "Static:" << func->isStatic() + << "Signal:" << func->isSignal() + << "ClassImplements: " << (func->ownerClass() != func->implementingClass()) + << "is operator:" << func->isOperatorOverload() + << "is global:" << func->isInGlobalScope(); +} +*/ + +static bool isGroupable(const AbstractMetaFunction* func) +{ + if (func->isSignal() || func->isDestructor() || (func->isModifiedRemoved() && !func->isAbstract())) + return false; + // weird operator overloads + if (func->name() == QLatin1String("operator[]") || func->name() == QLatin1String("operator->")) // FIXME: what about cast operators? + return false;; + return true; +} + +QMap< QString, AbstractMetaFunctionList > ShibokenGenerator::getFunctionGroups(const AbstractMetaClass* scope) +{ + AbstractMetaFunctionList lst = scope ? scope->functions() : globalFunctions(); + + QMap results; + for (AbstractMetaFunction *func : qAsConst(lst)) { + if (isGroupable(func)) { + AbstractMetaFunctionList &list = results[func->name()]; + // If there are virtuals methods in the mix (PYSIDE-570, + // QFileSystemModel::index(QString,int) and + // QFileSystemModel::index(int,int,QModelIndex)) override, make sure + // the overriding method of the most-derived class is seen first + // and inserted into the "seenSignatures" set. + if (func->isVirtual()) + list.prepend(func); + else + list.append(func); + } + } + return results; +} + +AbstractMetaFunctionList ShibokenGenerator::getInheritedOverloads(const AbstractMetaFunction *func, QSet *seen) +{ + AbstractMetaFunctionList results; + AbstractMetaClass* basis; + if (func->ownerClass() && (basis = func->ownerClass()->baseClass(), basis)) { + for (; basis; basis = basis->baseClass()) { + const AbstractMetaFunction* inFunc = basis->findFunction(func->name()); + if (inFunc && !seen->contains(inFunc->minimalSignature())) { + seen->insert(inFunc->minimalSignature()); + AbstractMetaFunction* newFunc = inFunc->copy(); + newFunc->setImplementingClass(func->implementingClass()); + results << newFunc; + } + } + } + return results; +} + +AbstractMetaFunctionList ShibokenGenerator::getFunctionAndInheritedOverloads(const AbstractMetaFunction *func, QSet *seen) +{ + AbstractMetaFunctionList results; + seen->insert(func->minimalSignature()); + results << const_cast(func) << getInheritedOverloads(func, seen); + return results; +} + +AbstractMetaFunctionList ShibokenGenerator::getFunctionOverloads(const AbstractMetaClass* scope, const QString& functionName) +{ + AbstractMetaFunctionList lst = scope ? scope->functions() : globalFunctions(); + + AbstractMetaFunctionList results; + QSet seenSignatures; + for (AbstractMetaFunction *func : qAsConst(lst)) { + if (func->name() != functionName) + continue; + if (isGroupable(func)) { + // PYSIDE-331: look also into base classes. + results << getFunctionAndInheritedOverloads(func, &seenSignatures); + } + } + return results; +} + +Generator::OptionDescriptions ShibokenGenerator::options() const +{ + return OptionDescriptions() + << qMakePair(QLatin1String(AVOID_PROTECTED_HACK), + QLatin1String("Avoid the use of the '#define protected public' hack.")) + << qMakePair(QLatin1String(DISABLE_VERBOSE_ERROR_MESSAGES), + QLatin1String("Disable verbose error messages. Turn the python code hard to debug\n" + "but safe few kB on the generated bindings.")) + << qMakePair(QLatin1String(PARENT_CTOR_HEURISTIC), + QLatin1String("Enable heuristics to detect parent relationship on constructors.")) + << qMakePair(QLatin1String(ENABLE_PYSIDE_EXTENSIONS), + QLatin1String("Enable PySide extensions, such as support for signal/slots,\n" + "use this if you are creating a binding for a Qt-based library.")) + << qMakePair(QLatin1String(RETURN_VALUE_HEURISTIC), + QLatin1String("Enable heuristics to detect parent relationship on return values\n" + "(USE WITH CAUTION!)")) + << qMakePair(QLatin1String(USE_ISNULL_AS_NB_NONZERO), + QLatin1String("If a class have an isNull() const method, it will be used to compute\n" + "the value of boolean casts")); +} + +static void getCode(QStringList& code, const CodeSnipList& codeSnips) +{ + for (const CodeSnip &snip : qAsConst(codeSnips)) + code.append(snip.code()); +} + +static void getCode(QStringList& code, const TypeEntry* type) +{ + getCode(code, type->codeSnips()); + + CustomConversion* customConversion = type->customConversion(); + if (!customConversion) + return; + + if (!customConversion->nativeToTargetConversion().isEmpty()) + code.append(customConversion->nativeToTargetConversion()); + + const CustomConversion::TargetToNativeConversions& toCppConversions = customConversion->targetToNativeConversions(); + if (toCppConversions.isEmpty()) + return; + + for (CustomConversion::TargetToNativeConversion *toNative : qAsConst(toCppConversions)) + code.append(toNative->conversion()); +} + +bool ShibokenGenerator::doSetup(const QMap& args) +{ + m_useCtorHeuristic = args.contains(QLatin1String(PARENT_CTOR_HEURISTIC)); + m_usePySideExtensions = args.contains(QLatin1String(ENABLE_PYSIDE_EXTENSIONS)); + m_userReturnValueHeuristic = args.contains(QLatin1String(RETURN_VALUE_HEURISTIC)); + m_verboseErrorMessagesDisabled = args.contains(QLatin1String(DISABLE_VERBOSE_ERROR_MESSAGES)); + m_useIsNullAsNbNonZero = args.contains(QLatin1String(USE_ISNULL_AS_NB_NONZERO)); + m_avoidProtectedHack = args.contains(QLatin1String(AVOID_PROTECTED_HACK)); + + TypeDatabase* td = TypeDatabase::instance(); + QStringList snips; + const PrimitiveTypeEntryList &primitiveTypeList = primitiveTypes(); + for (const PrimitiveTypeEntry *type : primitiveTypeList) + getCode(snips, type); + const ContainerTypeEntryList &containerTypeList = containerTypes(); + for (const ContainerTypeEntry *type : containerTypeList) + getCode(snips, type); + const AbstractMetaClassList &classList = classes(); + for (const AbstractMetaClass *metaClass : classList) + getCode(snips, metaClass->typeEntry()); + getCode(snips, td->findType(packageName())); + const FunctionGroupMap &functionGroups = getFunctionGroups(); + for (FunctionGroupMapIt it = functionGroups.cbegin(), end = functionGroups.cend(); it != end; ++it) { + for (AbstractMetaFunction *func : it.value()) + getCode(snips, func->injectedCodeSnips()); + } + + for (const QString &code : qAsConst(snips)) { + collectContainerTypesFromConverterMacros(code, true); + collectContainerTypesFromConverterMacros(code, false); + } + + return true; +} + +void ShibokenGenerator::collectContainerTypesFromConverterMacros(const QString& code, bool toPythonMacro) +{ + QString convMacro = toPythonMacro ? QLatin1String("%CONVERTTOPYTHON[") : QLatin1String("%CONVERTTOCPP["); + int offset = toPythonMacro ? sizeof("%CONVERTTOPYTHON") : sizeof("%CONVERTTOCPP"); + int start = 0; + while ((start = code.indexOf(convMacro, start)) != -1) { + int end = code.indexOf(QLatin1Char(']'), start); + start += offset; + if (code.at(start) != QLatin1Char('%')) { + QString typeString = code.mid(start, end - start); + AbstractMetaType* type = buildAbstractMetaTypeFromString(typeString); + addInstantiatedContainersAndSmartPointers(type, type->originalTypeDescription()); + } + start = end; + } +} + +bool ShibokenGenerator::useCtorHeuristic() const +{ + return m_useCtorHeuristic; +} + +bool ShibokenGenerator::useReturnValueHeuristic() const +{ + return m_userReturnValueHeuristic; +} + +bool ShibokenGenerator::usePySideExtensions() const +{ + return m_usePySideExtensions; +} + +bool ShibokenGenerator::useIsNullAsNbNonZero() const +{ + return m_useIsNullAsNbNonZero; +} + +bool ShibokenGenerator::avoidProtectedHack() const +{ + return m_avoidProtectedHack; +} + +QString ShibokenGenerator::cppApiVariableName(const QString& moduleName) const +{ + QString result = moduleName.isEmpty() ? ShibokenGenerator::packageName() : moduleName; + result.replace(QLatin1Char('.'), QLatin1Char('_')); + result.prepend(QLatin1String("Sbk")); + result.append(QLatin1String("Types")); + return result; +} + +QString ShibokenGenerator::convertersVariableName(const QString& moduleName) const +{ + QString result = cppApiVariableName(moduleName); + result.chop(1); + result.append(QLatin1String("Converters")); + return result; +} + +static QString processInstantiationsVariableName(const AbstractMetaType* type) +{ + QString res = QLatin1Char('_') + _fixedCppTypeName(type->typeEntry()->qualifiedCppName()).toUpper(); + const AbstractMetaTypeList &instantiations = type->instantiations(); + for (const AbstractMetaType *instantiation : instantiations) { + res += instantiation->isContainer() + ? processInstantiationsVariableName(instantiation) + : QLatin1Char('_') + _fixedCppTypeName(instantiation->cppSignature()).toUpper(); + } + return res; +} +QString ShibokenGenerator::getTypeIndexVariableName(const AbstractMetaClass* metaClass, bool alternativeTemplateName) +{ + if (alternativeTemplateName) { + const AbstractMetaClass* templateBaseClass = metaClass->templateBaseClass(); + if (!templateBaseClass) + return QString(); + QString base = _fixedCppTypeName(templateBaseClass->typeEntry()->qualifiedCppName()).toUpper(); + QString instantiations; + const AbstractMetaTypeList &templateBaseClassInstantiations = metaClass->templateBaseClassInstantiations(); + for (const AbstractMetaType *instantiation : templateBaseClassInstantiations) + instantiations += processInstantiationsVariableName(instantiation); + return QString::fromLatin1("SBK_%1%2_IDX").arg(base, instantiations); + } + return getTypeIndexVariableName(metaClass->typeEntry()); +} +QString ShibokenGenerator::getTypeIndexVariableName(const TypeEntry* type) +{ + if (type->isCppPrimitive()) { + const PrimitiveTypeEntry* trueType = (const PrimitiveTypeEntry*) type; + if (trueType->basicReferencedTypeEntry()) + type = trueType->basicReferencedTypeEntry(); + } + return QString::fromLatin1("SBK_%1_IDX").arg(_fixedCppTypeName(type->qualifiedCppName()).toUpper()); +} +QString ShibokenGenerator::getTypeIndexVariableName(const AbstractMetaType* type) +{ + return QString::fromLatin1("SBK%1%2_IDX") + .arg(type->typeEntry()->isContainer() ? QLatin1Char('_') + moduleName().toUpper() : QString(), + processInstantiationsVariableName(type)); +} + +bool ShibokenGenerator::verboseErrorMessagesDisabled() const +{ + return m_verboseErrorMessagesDisabled; +} + +bool ShibokenGenerator::pythonFunctionWrapperUsesListOfArguments(const OverloadData& overloadData) +{ + if (overloadData.referenceFunction()->isCallOperator()) + return true; + if (overloadData.referenceFunction()->isOperatorOverload()) + return false; + int maxArgs = overloadData.maxArgs(); + int minArgs = overloadData.minArgs(); + return (minArgs != maxArgs) + || (maxArgs > 1) + || overloadData.referenceFunction()->isConstructor() + || overloadData.hasArgumentWithDefaultValue(); +} + +QString ShibokenGenerator::getDefaultValue(const AbstractMetaFunction* func, const AbstractMetaArgument* arg) +{ + if (!arg->defaultValueExpression().isEmpty()) + return arg->defaultValueExpression(); + + //Check modifications + const FunctionModificationList &mods = func->modifications(); + for (const FunctionModification &m : mods) { + for (const ArgumentModification &am : m.argument_mods) { + if (am.index == (arg->argumentIndex() + 1)) + return am.replacedDefaultExpression; + } + } + return QString(); +} + +void ShibokenGenerator::writeMinimalConstructorExpression(QTextStream& s, const AbstractMetaType* type, const QString& defaultCtor) +{ + if (defaultCtor.isEmpty() && isCppPrimitive(type)) + return; + QString ctor = defaultCtor.isEmpty() ? minimalConstructor(type) : defaultCtor; + if (ctor.isEmpty()) { + const QString message = msgCouldNotFindMinimalConstructor(QLatin1String(__FUNCTION__), type->cppSignature()); + qCWarning(lcShiboken()).noquote() << message; + s << ";\n#error " << message << '\n'; + } else { + s << " = " << ctor; + } +} + +void ShibokenGenerator::writeMinimalConstructorExpression(QTextStream& s, const TypeEntry* type, const QString& defaultCtor) +{ + if (defaultCtor.isEmpty() && isCppPrimitive(type)) + return; + QString ctor = defaultCtor.isEmpty() ? minimalConstructor(type) : defaultCtor; + + if (ctor.isEmpty()) { + const QString message = msgCouldNotFindMinimalConstructor(QLatin1String(__FUNCTION__), type->qualifiedCppName()); + qCWarning(lcShiboken()).noquote() << message; + s << ";\n#error " << message << endl; + } else { + s << " = " << ctor; + } +} + +bool ShibokenGenerator::isCppIntegralPrimitive(const TypeEntry* type) +{ + if (!type->isCppPrimitive()) + return false; + const PrimitiveTypeEntry* trueType = (const PrimitiveTypeEntry*) type; + if (trueType->basicReferencedTypeEntry()) + trueType = trueType->basicReferencedTypeEntry(); + QString typeName = trueType->qualifiedCppName(); + return !typeName.contains(QLatin1String("double")) + && !typeName.contains(QLatin1String("float")) + && !typeName.contains(QLatin1String("wchar")); +} +bool ShibokenGenerator::isCppIntegralPrimitive(const AbstractMetaType* type) +{ + return isCppIntegralPrimitive(type->typeEntry()); +} + +QString ShibokenGenerator::msgCouldNotFindMinimalConstructor(const QString &where, const QString &type) +{ + return where + QLatin1String(": Could not find a minimal constructor for type '") + type + + QLatin1String("'. This will result in a compilation error."); +} diff --git a/sources/shiboken2/generator/shiboken2/shibokengenerator.h b/sources/shiboken2/generator/shiboken2/shibokengenerator.h new file mode 100644 index 0000000..cb1bdd1 --- /dev/null +++ b/sources/shiboken2/generator/shiboken2/shibokengenerator.h @@ -0,0 +1,535 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SHIBOKENGENERATOR_H +#define SHIBOKENGENERATOR_H + +#define CONV_RULE_OUT_VAR_SUFFIX "_out" +#define CPP_ARG "cppArg" +#define CPP_ARG0 CPP_ARG"0" +#define CPP_ARG_REMOVED "removed_" CPP_ARG +#define CPP_RETURN_VAR "cppResult" +#define CPP_SELF_VAR "cppSelf" +#define PYTHON_ARG "pyArg" +#define PYTHON_ARGS PYTHON_ARG "s" +#define PYTHON_OVERRIDE_VAR "pyOverride" +#define PYTHON_RETURN_VAR "pyResult" +#define PYTHON_SELF_VAR "self" +#define THREAD_STATE_SAVER_VAR "threadStateSaver" +#define BEGIN_ALLOW_THREADS "PyThreadState* _save = PyEval_SaveThread(); // Py_BEGIN_ALLOW_THREADS" +#define END_ALLOW_THREADS "PyEval_RestoreThread(_save); // Py_END_ALLOW_THREADS" +#define PYTHON_TO_CPP_VAR "pythonToCpp" +#define SMART_POINTER_GETTER "kSmartPointerGetter" + +#define CHECKTYPE_REGEX "%CHECKTYPE\\[([^\\[]*)\\]\\(" +#define ISCONVERTIBLE_REGEX "%ISCONVERTIBLE\\[([^\\[]*)\\]\\(" +#define CONVERTTOPYTHON_REGEX "%CONVERTTOPYTHON\\[([^\\[]*)\\]\\(" +#define CONVERTTOCPP_REGEX "(\\*?%?[a-zA-Z_][\\w\\.]*(?:\\[[^\\[^<^>]+\\])*)"\ + "(?:\\s+)=(?:\\s+)%CONVERTTOCPP\\[([^\\[]*)\\]\\(" + +#include + +#include "typesystem.h" + +#include + +class DocParser; +class CodeSnip; +class OverloadData; + +QT_FORWARD_DECLARE_CLASS(QTextStream) + +/** + * Abstract generator that contains common methods used in CppGenerator and HeaderGenerator. + */ +class ShibokenGenerator : public Generator +{ +public: + ShibokenGenerator(); + virtual ~ShibokenGenerator(); + + QString translateTypeForWrapperMethod(const AbstractMetaType* cType, + const AbstractMetaClass* context, Options opt = NoOption) const; + + /** + * Returns a map with all functions grouped, the function name is used as key. + * Example of return value: { "foo" -> ["foo(int)", "foo(int, long)], "bar" -> "bar(double)"} + * \param scope Where to search for functions, null means all global functions. + */ + QMap getFunctionGroups(const AbstractMetaClass* scope = 0); + + /** + * Returns all different inherited overloads of func. + * The function can be called multiple times without duplication. + * \param func the metafunction to be searched in subclasses. + * \param seen the function's minimal signatures already seen. + */ + AbstractMetaFunctionList getInheritedOverloads(const AbstractMetaFunction *func, QSet *seen); + + /** + * Returns all different inherited overloads of func, and includes func as well. + * The function can be called multiple times without duplication. + * \param func the metafunction to be searched in subclasses. + * \param seen the function's minimal signatures already seen. + */ + AbstractMetaFunctionList getFunctionAndInheritedOverloads(const AbstractMetaFunction *func, QSet *seen); + + /** + * Returns all overloads for a function named \p functionName. + * \param scope scope used to search for overloads. + * \param functionName the function name. + */ + AbstractMetaFunctionList getFunctionOverloads(const AbstractMetaClass* scope, const QString& functionName); + /** + * Write a function argument in the C++ in the text stream \p s. + * This function just call \code s << argumentString(); \endcode + * \param s text stream used to write the output. + * \param func the current metafunction. + * \param argument metaargument information to be parsed. + * \param options some extra options. + */ + void writeArgument(QTextStream &s, + const AbstractMetaFunction* func, + const AbstractMetaArgument* argument, + Options options = NoOption) const; + /** + * Create a QString in the C++ format to an function argument. + * \param func the current metafunction. + * \param argument metaargument information to be parsed. + * \param options some extra options. + */ + QString argumentString(const AbstractMetaFunction* func, + const AbstractMetaArgument* argument, + Options options = NoOption) const; + + void writeArgumentNames(QTextStream &s, + const AbstractMetaFunction* func, + Options options = NoOption) const override; + + /** + * Function used to write the fucntion arguments on the class buffer. + * \param s the class output buffer + * \param func the pointer to metafunction information + * \param count the number of function arguments + * \param options some extra options used during the parser + */ + void writeFunctionArguments(QTextStream &s, + const AbstractMetaFunction* func, + Options options = NoOption) const override; + QString functionReturnType(const AbstractMetaFunction* func, Options options = NoOption) const; + + /// Utility function for writeCodeSnips. + typedef QPair ArgumentVarReplacementPair; + typedef QVector ArgumentVarReplacementList; + ArgumentVarReplacementList getArgumentReplacement(const AbstractMetaFunction* func, + bool usePyArgs, TypeSystem::Language language, + const AbstractMetaArgument* lastArg); + + /// Write user's custom code snippets at class or module level. + void writeCodeSnips(QTextStream& s, + const QVector & codeSnips, + TypeSystem::CodeSnipPosition position, + TypeSystem::Language language, + const AbstractMetaClass* context = 0); + /// Write user's custom code snippets at function level. + void writeCodeSnips(QTextStream& s, + const QVector & codeSnips, + TypeSystem::CodeSnipPosition position, + TypeSystem::Language language, + const AbstractMetaFunction* func, + const AbstractMetaArgument* lastArg = 0); + + /// Returns a string with the user's custom code snippets that comply with \p position and \p language. + QString getCodeSnippets(const QVector & codeSnips, TypeSystem::CodeSnipPosition position, TypeSystem::Language language); + + /// Replaces variables for the user's custom code at global or class level. + void processCodeSnip(QString& code, const AbstractMetaClass* context = 0); + + /// Replaces the %CONVERTTOPYTHON type system variable. + inline void replaceConvertToPythonTypeSystemVariable(QString& code) + { + replaceConverterTypeSystemVariable(TypeSystemToPythonFunction, code); + } + /// Replaces the %CONVERTTOCPP type system variable. + inline void replaceConvertToCppTypeSystemVariable(QString& code) + { + replaceConverterTypeSystemVariable(TypeSystemToCppFunction, code); + } + /// Replaces the %ISCONVERTIBLE type system variable. + inline void replaceIsConvertibleToCppTypeSystemVariable(QString& code) + { + replaceConverterTypeSystemVariable(TypeSystemIsConvertibleFunction, code); + } + /// Replaces the %CHECKTYPE type system variable. + inline void replaceTypeCheckTypeSystemVariable(QString& code) + { + replaceConverterTypeSystemVariable(TypeSystemCheckFunction, code); + } + + /** + * Verifies if any of the function's code injections of the "native" + * type needs the type system variable "%PYSELF". + * \param func the function to check + * \return true if the function's native code snippets use "%PYSELF" + */ + bool injectedCodeUsesPySelf(const AbstractMetaFunction* func); + + /** + * Verifies if any of the function's code injections makes a call + * to the C++ method. This is used by the generator to avoid writing calls + * to C++ when the user custom code already does this. + * \param func the function to check + * \return true if the function's code snippets call the wrapped C++ function + */ + bool injectedCodeCallsCppFunction(const AbstractMetaFunction* func); + + /** + * Verifies if any of the function's code injections of the "native" class makes a + * call to the C++ method. This is used by the generator to avoid writing calls to + * Python overrides of C++ virtual methods when the user custom code already does this. + * \param func the function to check + * \return true if the function's code snippets call the Python override for a C++ virtual method + */ + bool injectedCodeCallsPythonOverride(const AbstractMetaFunction* func); + + /** + * Verifies if any of the function's code injections attributes values to + * the return variable (%0 or %PYARG_0). + * \param func the function to check + * \param language the kind of code snip + * \return true if the function's code attributes values to "%0" or "%PYARG_0" + */ + bool injectedCodeHasReturnValueAttribution(const AbstractMetaFunction* func, TypeSystem::Language language = TypeSystem::TargetLangCode); + + /** + * Verifies if any of the function's code injections uses the type system variable + * for function arguments of a given index. + */ + bool injectedCodeUsesArgument(const AbstractMetaFunction* func, int argumentIndex); + + /** + * Function which parse the metafunction information + * \param func the function witch will be parserd + * \param option some extra options + * \param arg_count the number of function arguments + */ + QString functionSignature(const AbstractMetaFunction* func, + QString prepend = QString(), + QString append = QString(), + Options options = NoOption, + int arg_count = -1) const; + + /// Returns true if there are cases of multiple inheritance in any of its ancestors. + bool hasMultipleInheritanceInAncestry(const AbstractMetaClass* metaClass); + + /// Returns true if the class needs to have a getattro function. + bool classNeedsGetattroFunction(const AbstractMetaClass* metaClass); + + /// Returns true if the class needs to have a setattro function. + bool classNeedsSetattroFunction(const AbstractMetaClass *metaClass); + + /// Returns a list of methods of the given class where each one is part of a different overload with both static and non-static method. + AbstractMetaFunctionList getMethodsWithBothStaticAndNonStaticMethods(const AbstractMetaClass* metaClass); + + /// Returns a list of parent classes for a given class. + AbstractMetaClassList getBaseClasses(const AbstractMetaClass* metaClass) const; + + /// Returns a list of all ancestor classes for the given class. + AbstractMetaClassList getAllAncestors(const AbstractMetaClass* metaClass) const; + + const AbstractMetaClass* getMultipleInheritingClass(const AbstractMetaClass* metaClass); + + void writeToPythonConversion(QTextStream& s, const AbstractMetaType* type, + const AbstractMetaClass* context, const QString& argumentName); + void writeToCppConversion(QTextStream& s, const AbstractMetaType* type, const AbstractMetaClass* context, const QString& inArgName, const QString& outArgName); + void writeToCppConversion(QTextStream& s, const AbstractMetaClass* metaClass, const QString& inArgName, const QString& outArgName); + + /// Returns true if the argument is a pointer that rejects NULL values. + bool shouldRejectNullPointerArgument(const AbstractMetaFunction* func, int argIndex); + + /// Verifies if the class should have a C++ wrapper generated for it, instead of only a Python wrapper. + bool shouldGenerateCppWrapper(const AbstractMetaClass* metaClass) const; + + /// Adds enums eligible for generation from classes/namespaces marked not to be generated. + static void lookForEnumsInClassesNotToBeGenerated(AbstractMetaEnumList& enumList, const AbstractMetaClass* metaClass); + /// Returns the enclosing class for an enum, or NULL if it should be global. + const AbstractMetaClass* getProperEnclosingClassForEnum(const AbstractMetaEnum* metaEnum); + + QString wrapperName(const AbstractMetaClass* metaClass) const; + QString wrapperName(const AbstractMetaType *metaType) const; + + QString fullPythonFunctionName(const AbstractMetaFunction* func); + + static QString protectedEnumSurrogateName(const AbstractMetaEnum* metaEnum); + static QString protectedFieldGetterName(const AbstractMetaField* field); + static QString protectedFieldSetterName(const AbstractMetaField* field); + + static QString pythonPrimitiveTypeName(const QString& cppTypeName); + static QString pythonPrimitiveTypeName(const PrimitiveTypeEntry* type); + + static QString pythonOperatorFunctionName(QString cppOpFuncName); + static QString pythonOperatorFunctionName(const AbstractMetaFunction* func); + static QString pythonRichCompareOperatorId(QString cppOpFuncName); + static QString pythonRichCompareOperatorId(const AbstractMetaFunction* func); + + static QString fixedCppTypeName(const CustomConversion::TargetToNativeConversion* toNative); + static QString fixedCppTypeName(const AbstractMetaType* type); + static QString fixedCppTypeName(const TypeEntry* type, QString typeName = QString()); + + static bool isNumber(QString cpythonApiName); + static bool isNumber(const TypeEntry* type); + static bool isNumber(const AbstractMetaType* type); + static bool isPyInt(const TypeEntry* type); + static bool isPyInt(const AbstractMetaType* type); + + /** + * Returns true if the type passed has a Python wrapper for it. + * Although namespace has a Python wrapper, it's not considered a type. + */ + static bool isWrapperType(const TypeEntry* type); + static bool isWrapperType(const ComplexTypeEntry* type); + static bool isWrapperType(const AbstractMetaType* metaType); + + /** + * Checks if the type is an Object/QObject or pointer to Value Type. + * In other words, tells if the type is "T*" and T has a Python wrapper. + */ + static bool isPointerToWrapperType(const AbstractMetaType* type); + + /** + * Returns true if \p type is an Object Type used as a value. + */ + static bool isObjectTypeUsedAsValueType(const AbstractMetaType* type); + + static bool isValueTypeWithCopyConstructorOnly(const AbstractMetaClass* metaClass); + bool isValueTypeWithCopyConstructorOnly(const TypeEntry* type) const; + bool isValueTypeWithCopyConstructorOnly(const AbstractMetaType* type) const; + + /// Returns true if the type is a primitive but not a C++ primitive. + static bool isUserPrimitive(const TypeEntry* type); + static bool isUserPrimitive(const AbstractMetaType* type); + + /// Returns true if the type is a C++ primitive, a void*, a const char*, or a std::string. + static bool isCppPrimitive(const TypeEntry* type); + static bool isCppPrimitive(const AbstractMetaType* type); + + /// Returns true if the type is a C++ integral primitive, i.e. bool, char, int, long, and their unsigned counterparts. + static bool isCppIntegralPrimitive(const TypeEntry* type); + static bool isCppIntegralPrimitive(const AbstractMetaType* type); + + /// Checks if an argument type should be dereferenced by the Python method wrapper before calling the C++ method. + static bool shouldDereferenceArgumentPointer(const AbstractMetaArgument* arg); + /// Checks if a meta type should be dereferenced by the Python method wrapper passing it to C++. + static bool shouldDereferenceAbstractMetaTypePointer(const AbstractMetaType* metaType); + + static bool visibilityModifiedToPrivate(const AbstractMetaFunction* func); + + QString converterObject(const AbstractMetaType* type); + QString converterObject(const TypeEntry* type); + + QString cpythonBaseName(const AbstractMetaClass* metaClass); + QString cpythonBaseName(const TypeEntry* type); + QString cpythonBaseName(const AbstractMetaType* type); + QString cpythonTypeName(const AbstractMetaClass* metaClass); + QString cpythonTypeName(const TypeEntry* type); + QString cpythonTypeNameExt(const TypeEntry* type); + QString cpythonTypeNameExt(const AbstractMetaType* type); + QString cpythonCheckFunction(const TypeEntry* type, bool genericNumberType = false); + QString cpythonCheckFunction(const AbstractMetaType* metaType, bool genericNumberType = false); + /** + * Receives the argument \p type and tries to find the appropriate AbstractMetaType for it + * or a custom type check. + * \param type A string representing the type to be discovered. + * \param metaType A pointer to an AbstractMetaType pointer, to where write a new meta type object + * if one is produced from the \p type string. This object must be deallocated by + * the caller. It will set the target variable to NULL, is \p type is a Python type. + * \return A custom check if \p type is a custom type, or an empty string if \p metaType + * receives an existing type object. + */ + QString guessCPythonCheckFunction(const QString& type, AbstractMetaType** metaType); + QString cpythonIsConvertibleFunction(const TypeEntry* type, bool genericNumberType = false, bool checkExact = false); + QString cpythonIsConvertibleFunction(const AbstractMetaType* metaType, bool genericNumberType = false); + QString cpythonIsConvertibleFunction(const AbstractMetaArgument* metaArg, bool genericNumberType = false); + + QString cpythonToCppConversionFunction(const AbstractMetaClass* metaClass); + QString cpythonToCppConversionFunction(const AbstractMetaType* type, const AbstractMetaClass* context = 0); + QString cpythonToPythonConversionFunction(const AbstractMetaType* type, const AbstractMetaClass* context = 0); + QString cpythonToPythonConversionFunction(const AbstractMetaClass* metaClass); + QString cpythonToPythonConversionFunction(const TypeEntry* type); + + QString cpythonFunctionName(const AbstractMetaFunction* func); + QString cpythonMethodDefinitionName(const AbstractMetaFunction* func); + QString cpythonGettersSettersDefinitionName(const AbstractMetaClass* metaClass); + QString cpythonGetattroFunctionName(const AbstractMetaClass* metaClass); + QString cpythonSetattroFunctionName(const AbstractMetaClass* metaClass); + QString cpythonGetterFunctionName(const AbstractMetaField* metaField); + QString cpythonSetterFunctionName(const AbstractMetaField* metaField); + QString cpythonWrapperCPtr(const AbstractMetaClass* metaClass, QString argName = QLatin1String(PYTHON_SELF_VAR)); + QString cpythonWrapperCPtr(const AbstractMetaType *metaType, QString argName); + QString cpythonWrapperCPtr(const TypeEntry* type, QString argName); + + /// Guesses the scope to where belongs an argument's default value. + QString guessScopeForDefaultValue(const AbstractMetaFunction *func, + const AbstractMetaArgument *arg) const; + QString guessScopeForDefaultFlagsValue(const AbstractMetaFunction *func, + const AbstractMetaArgument *arg, + const QString &value) const; + + QString cpythonEnumName(const EnumTypeEntry* enumEntry); + QString cpythonEnumName(const AbstractMetaEnum* metaEnum); + + QString cpythonFlagsName(const FlagsTypeEntry* flagsEntry); + QString cpythonFlagsName(const AbstractMetaEnum* metaEnum); + /// Returns the special cast function name, the function used to proper cast class with multiple inheritance. + QString cpythonSpecialCastFunctionName(const AbstractMetaClass* metaClass); + + QString getFormatUnitString(const AbstractMetaFunction* func, bool incRef = false) const; + + /// Returns the file name for the module global header. If no module name is provided the current will be used. + QString getModuleHeaderFileName(const QString& moduleName = QString()) const; + + OptionDescriptions options() const override; + + /// Returns true if the user enabled the so called "parent constructor heuristic". + bool useCtorHeuristic() const; + /// Returns true if the user enabled the so called "return value heuristic". + bool useReturnValueHeuristic() const; + /// Returns true if the user enabled PySide extensions. + bool usePySideExtensions() const; + /// Returns true if the generator should use the result of isNull()const to compute boolean casts. + bool useIsNullAsNbNonZero() const; + /// Returns true if the generated code should use the "#define protected public" hack. + bool avoidProtectedHack() const; + QString cppApiVariableName(const QString& moduleName = QString()) const; + QString convertersVariableName(const QString& moduleName = QString()) const; + /** + * Returns the type index variable name for a given class. If \p alternativeTemplateName is true + * and the class is a typedef for a template class instantiation, it will return an alternative name + * made of the template class and the instantiation values, or an empty string if the class isn't + * derived from a template class at all. + */ + QString getTypeIndexVariableName(const AbstractMetaClass* metaClass, bool alternativeTemplateName = false); + QString getTypeIndexVariableName(const TypeEntry* type); + QString getTypeIndexVariableName(const AbstractMetaType* type); + + /// Returns true if the user don't want verbose error messages on the generated bindings. + bool verboseErrorMessagesDisabled() const; + + /** + * Builds an AbstractMetaType object from a QString. + * Returns NULL if no type could be built from the string. + * \param typeSignature The string describing the type to be built. + * \return A new AbstractMetaType object that must be deleted by the caller, or a NULL pointer in case of failure. + */ + AbstractMetaType *buildAbstractMetaTypeFromString(QString typeSignature, + QString *errorMessage = nullptr); + + /// Creates an AbstractMetaType object from a TypeEntry. + AbstractMetaType* buildAbstractMetaTypeFromTypeEntry(const TypeEntry* typeEntry); + /// Creates an AbstractMetaType object from an AbstractMetaClass. + AbstractMetaType* buildAbstractMetaTypeFromAbstractMetaClass(const AbstractMetaClass* metaClass); + + void writeMinimalConstructorExpression(QTextStream& s, const AbstractMetaType* type, const QString& defaultCtor = QString()); + void writeMinimalConstructorExpression(QTextStream& s, const TypeEntry* type, const QString& defaultCtor = QString()); + + /** + * Helper function to find for argument default value + */ + static QString getDefaultValue(const AbstractMetaFunction* func, const AbstractMetaArgument* arg); +protected: + bool doSetup(const QMap& args); + void collectContainerTypesFromConverterMacros(const QString& code, bool toPythonMacro); + // verify whether the class is copyable + bool isCopyable(const AbstractMetaClass* metaClass); + + bool m_native_jump_table; + static QHash m_pythonPrimitiveTypeName; + static QHash m_pythonOperators; + static QHash m_formatUnits; + static QHash m_tpFuncs; + static QStringList m_knownPythonTypes; + + void clearTpFuncs(); + + const char* name() const { return "Shiboken"; } + + /// Initializes correspondences between primitive and Python types. + static void initPrimitiveTypesCorrespondences(); + /// Initializes a list of Python known type names. + static void initKnownPythonTypes(); + + void writeFunctionCall(QTextStream& s, + const AbstractMetaFunction* metaFunc, + Options options = NoOption) const; + + void writeUnusedVariableCast(QTextStream& s, const QString& variableName); + + AbstractMetaFunctionList filterFunctions(const AbstractMetaClass* metaClass); + + // All data about extended converters: the type entries of the target type, and a + // list of AbstractMetaClasses accepted as argument for the conversion. + typedef QHash > ExtendedConverterData; + /// Returns all extended conversions for the current module. + ExtendedConverterData getExtendedConverters() const; + + /// Returns a list of converters for the non wrapper types of the current module. + QVector getPrimitiveCustomConversions(); + + /// Returns true if the Python wrapper for the received OverloadData must accept a list of arguments. + static bool pythonFunctionWrapperUsesListOfArguments(const OverloadData& overloadData); + + Indentor INDENT; + + enum TypeSystemConverterVariable { + TypeSystemCheckFunction = 0, + TypeSystemIsConvertibleFunction, + TypeSystemToCppFunction, + TypeSystemToPythonFunction, + TypeSystemConverterVariables + }; + void replaceConverterTypeSystemVariable(TypeSystemConverterVariable converterVariable, QString& code); + + static QString msgCouldNotFindMinimalConstructor(const QString &where, const QString &type); + +private: + bool m_useCtorHeuristic; + bool m_userReturnValueHeuristic; + bool m_usePySideExtensions; + bool m_verboseErrorMessagesDisabled; + bool m_useIsNullAsNbNonZero; + bool m_avoidProtectedHack; + + typedef QHash AbstractMetaTypeCache; + AbstractMetaTypeCache m_metaTypeFromStringCache; + + /// Type system converter variable replacement names and regular expressions. + QString m_typeSystemConvName[TypeSystemConverterVariables]; + QRegularExpression m_typeSystemConvRegEx[TypeSystemConverterVariables]; +}; + +#endif // SHIBOKENGENERATOR_H diff --git a/sources/shiboken2/generator/shibokenconfig.h.in b/sources/shiboken2/generator/shibokenconfig.h.in new file mode 100644 index 0000000..2c86a4a --- /dev/null +++ b/sources/shiboken2/generator/shibokenconfig.h.in @@ -0,0 +1,6 @@ +#ifndef SHIBOKENCONFIG_H +#define SHIBOKENCONFIG_H + +#define SHIBOKEN_VERSION "@shiboken2_VERSION@" + +#endif diff --git a/sources/shiboken2/generatorrunnerconfig.h.in b/sources/shiboken2/generatorrunnerconfig.h.in new file mode 100644 index 0000000..d291fcc --- /dev/null +++ b/sources/shiboken2/generatorrunnerconfig.h.in @@ -0,0 +1,13 @@ +#ifndef GENERATORRUNNERCONFIG_H +#define GENERATORRUNNERCONFIG_H + +// generatorrunner version +#define GENERATORRUNNER_VERSION "@generator_VERSION@" + +// generatorrunner plugin dir +#define GENERATORRUNNER_PLUGIN_DIR "@generator_plugin_DIR@" + +// module extension +#define MODULE_EXTENSION "@CMAKE_SHARED_LIBRARY_SUFFIX@" + +#endif diff --git a/sources/shiboken2/generatorrunnermacros.h b/sources/shiboken2/generatorrunnermacros.h new file mode 100644 index 0000000..1f1119d --- /dev/null +++ b/sources/shiboken2/generatorrunnermacros.h @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef GENERATORRUNNERMACROS_H +#define GENERATORRUNNERMACROS_H + +// GENRUNNER_API is used for the public API symbols. +#if defined _WIN32 + #define GENRUNNER_EXPORT __declspec(dllexport) + #if GENRUNNER_EXPORTS + #define GENRUNNER_API GENRUNNER_EXPORT + #endif +#elif __GNUC__ >= 4 + #define GENRUNNER_EXPORT __attribute__ ((visibility("default"))) + #define GENRUNNER_API GENRUNNER_EXPORT +#elif __GNUC__ < 4 + #define GENRUNNER_EXPORT +#endif + +#ifndef GENRUNNER_API + #define GENRUNNER_API +#endif +#endif diff --git a/sources/shiboken2/generators/shiboken/shiboken.cpp b/sources/shiboken2/generators/shiboken/shiboken.cpp new file mode 100644 index 0000000..a047c15 --- /dev/null +++ b/sources/shiboken2/generators/shiboken/shiboken.cpp @@ -0,0 +1,32 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "cppgenerator.h" +#include "headergenerator.h" + +EXPORT_GENERATOR_PLUGIN(new CppGenerator << new HeaderGenerator) diff --git a/sources/shiboken2/icecc.cmake b/sources/shiboken2/icecc.cmake new file mode 100644 index 0000000..b2bf071 --- /dev/null +++ b/sources/shiboken2/icecc.cmake @@ -0,0 +1,11 @@ +include (CMakeForceCompiler) +option(ENABLE_ICECC "Enable icecc checking, for distributed compilation") +if (ENABLE_ICECC) + find_program(ICECC icecc) + if (ICECC) + message(STATUS "icecc found! Distributed compilation for all!! huhuhu.") + cmake_force_cxx_compiler(${ICECC} icecc) + else(ICECC) + message(FATAL_ERROR "icecc NOT found! re-run cmake without -DENABLE_ICECC") + endif(ICECC) +endif(ENABLE_ICECC) diff --git a/sources/shiboken2/libshiboken/CMakeLists.txt b/sources/shiboken2/libshiboken/CMakeLists.txt new file mode 100644 index 0000000..dd304bd --- /dev/null +++ b/sources/shiboken2/libshiboken/CMakeLists.txt @@ -0,0 +1,106 @@ +project(libshiboken) + +macro(get_numpy_location) + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "if True: + import sys + import os + numpy = '' + for p in sys.path: + if 'site-' in p: + numpy = os.path.join(p, 'numpy') + if os.path.exists(numpy): + print(os.path.realpath(numpy)) + break" + OUTPUT_VARIABLE PYTHON_NUMPY_LOCATION + OUTPUT_STRIP_TRAILING_WHITESPACE) + message("PYTHON_NUMPY_LOCATION: " ${PYTHON_NUMPY_LOCATION}) +endmacro() + +option(ENABLE_VERSION_SUFFIX "Used to use current version in suffix to generated files. This is used to allow multiples versions installed simultaneous." FALSE) +if(ENABLE_VERSION_SUFFIX) + set(shiboken2_SUFFIX "-${shiboken_MAJOR_VERSION}.${shiboken_MINOR_VERSION}") +else() + set(shiboken2_SUFFIX "") +endif() + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/sbkversion.h.in" + "${CMAKE_CURRENT_BINARY_DIR}/sbkversion.h" @ONLY) + +set(libshiboken_MAJOR_VERSION ${shiboken_MAJOR_VERSION}) +set(libshiboken_MINOR_VERSION ${shiboken_MINOR_VERSION}) +set(libshiboken_MICRO_VERSION ${shiboken_MICRO_VERSION}) +set(libshiboken_VERSION "${libshiboken_MAJOR_VERSION}.${libshiboken_MINOR_VERSION}.${libshiboken_MICRO_VERSION}") +set(libshiboken_SOVERSION "${shiboken2_library_so_version}") + +set(libshiboken_SRC +basewrapper.cpp +debugfreehook.cpp +gilstate.cpp +helper.cpp +sbkarrayconverter.cpp +sbkconverter.cpp +sbkenum.cpp +sbkmodule.cpp +sbkstring.cpp +bindingmanager.cpp +threadstatesaver.cpp +shibokenbuffer.cpp +signature.cpp +qapp_macro.cpp +pep384impl.cpp +voidptr.cpp +typespec.cpp +bufferprocs_py37.cpp +) + +get_numpy_location() + +set(libshiboken_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${SBK_PYTHON_INCLUDE_DIR}) + +if (NOT "${PYTHON_NUMPY_LOCATION}" STREQUAL "") + set(libshiboken_INCLUDES ${libshiboken_INCLUDES} ${PYTHON_NUMPY_LOCATION}/core/include) + set(libshiboken_SRC ${libshiboken_SRC} sbknumpyarrayconverter.cpp) + add_definitions(-DHAVE_NUMPY -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION) +endif() + +set(APIEXTRACTOR_EXTRA_INCLUDES ${APIEXTRACTOR_EXTRA_INCLUDES} ${LIBXSLT_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR}) + +include_directories(${libshiboken_INCLUDES}) +add_library(libshiboken SHARED ${libshiboken_SRC}) +target_link_libraries(libshiboken ${SBK_PYTHON_LIBRARIES}) +set_target_properties(libshiboken PROPERTIES OUTPUT_NAME "shiboken2${shiboken2_SUFFIX}${PYTHON_SHARED_LIBRARY_SUFFIX}" + VERSION ${libshiboken_VERSION} + SOVERSION ${libshiboken_SOVERSION} + DEFINE_SYMBOL LIBSHIBOKEN_EXPORTS) + +install(FILES + autodecref.h + basewrapper.h + bindingmanager.h + gilstate.h + helper.h + sbkarrayconverter.h + sbkconverter.h + sbkenum.h + sbkmodule.h + python25compat.h + sbkdbg.h + sbkstring.h + shiboken.h + shibokenmacros.h + threadstatesaver.h + shibokenbuffer.h + sbkpython.h + pep384impl.h + signature.h + qapp_macro.h + voidptr.h + typespec.h + bufferprocs_py37.h + "${CMAKE_CURRENT_BINARY_DIR}/sbkversion.h" + DESTINATION include/shiboken2${shiboken2_SUFFIX}) +install(TARGETS libshiboken EXPORT shiboken2 + LIBRARY DESTINATION "${LIB_INSTALL_DIR}" + ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" + RUNTIME DESTINATION bin) diff --git a/sources/shiboken2/libshiboken/autodecref.h b/sources/shiboken2/libshiboken/autodecref.h new file mode 100644 index 0000000..7b6aa47 --- /dev/null +++ b/sources/shiboken2/libshiboken/autodecref.h @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef AUTODECREF_H +#define AUTODECREF_H + +#include "sbkpython.h" +#include "basewrapper.h" + +#ifdef _MSC_VER +__pragma(warning(push)) +__pragma(warning(disable:4522)) // warning: C4522: 'Shiboken::AutoDecRef': multiple assignment operators specified +#endif + +struct SbkObject; +namespace Shiboken +{ + +/** + * AutoDecRef holds a PyObject pointer and decrement its reference counter when destroyed. + */ +struct LIBSHIBOKEN_API AutoDecRef +{ +public: + /** + * AutoDecRef constructor. + * \param pyobj A borrowed reference to a Python object + */ + explicit AutoDecRef(PyObject* pyObj) : m_pyObj(pyObj) {} + /** + * AutoDecRef constructor. + * \param pyobj A borrowed reference to a Python object + */ + explicit AutoDecRef(SbkObject* pyObj) : m_pyObj(reinterpret_cast(pyObj)) {} + + /// Decref the borrowed python reference + ~AutoDecRef() + { + Py_XDECREF(m_pyObj); + } + + inline bool isNull() const { return m_pyObj == 0; } + /// Returns the pointer of the Python object being held. + inline PyObject* object() { return m_pyObj; } + inline operator PyObject*() { return m_pyObj; } +#ifndef Py_LIMITED_API + inline operator PyTupleObject*() { return reinterpret_cast(m_pyObj); } +#endif + inline operator bool() const { return m_pyObj != 0; } + inline PyObject* operator->() { return m_pyObj; } + + template + T cast() + { + return reinterpret_cast(m_pyObj); + } + + /** + * Decref the current borrowed python reference and take the reference + * borrowed by \p other, so other.isNull() will return true. + */ + void operator=(AutoDecRef& other) + { + Py_XDECREF(m_pyObj); + m_pyObj = other.m_pyObj; + other.m_pyObj = 0; + } + + /** + * Decref the current borrowed python reference and borrow \p other. + */ + void operator=(PyObject* other) + { + Py_XDECREF(m_pyObj); + m_pyObj = other; + } +private: + PyObject* m_pyObj; + AutoDecRef(const AutoDecRef&); + AutoDecRef& operator=(const AutoDecRef&); +}; + +} // namespace Shiboken + +#ifdef _MSC_VER +__pragma(warning(pop)) +#endif + +#endif // AUTODECREF_H + diff --git a/sources/shiboken2/libshiboken/basewrapper.cpp b/sources/shiboken2/libshiboken/basewrapper.cpp new file mode 100644 index 0000000..0aba266 --- /dev/null +++ b/sources/shiboken2/libshiboken/basewrapper.cpp @@ -0,0 +1,1566 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "basewrapper.h" +#include "basewrapper_p.h" +#include "bindingmanager.h" +#include "sbkconverter.h" +#include "sbkenum.h" +#include "sbkstring.h" +#include "autodecref.h" +#include "gilstate.h" +#include +#include +#include +#include +#include +#include +#include "threadstatesaver.h" +#include "signature.h" +#include "qapp_macro.h" +#include "voidptr.h" + +namespace { + void _destroyParentInfo(SbkObject* obj, bool keepReference); +} + +extern "C" +{ + +static void SbkObjectTypeDealloc(PyObject* pyObj); +static PyObject* SbkObjectTypeTpNew(PyTypeObject* metatype, PyObject* args, PyObject* kwds); + +static PyType_Slot SbkObjectType_Type_slots[] = { + {Py_tp_dealloc, (void *)SbkObjectTypeDealloc}, + {Py_tp_setattro, (void *)PyObject_GenericSetAttr}, + {Py_tp_base, (void *)&PyType_Type}, + {Py_tp_alloc, (void *)PyType_GenericAlloc}, + {Py_tp_new, (void *)SbkObjectTypeTpNew}, + {Py_tp_free, (void *)PyObject_GC_Del}, + {0, 0} +}; +static PyType_Spec SbkObjectType_Type_spec = { + "Shiboken.ObjectType", + 0, // basicsize (inserted later) + sizeof(PyMemberDef), + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, + SbkObjectType_Type_slots, +}; + + +PyTypeObject *SbkObjectType_TypeF(void) +{ + static PyTypeObject *type = nullptr; + if (!type) { + SbkObjectType_Type_spec.basicsize = + PepHeapType_SIZE + sizeof(SbkObjectTypePrivate); + type = reinterpret_cast(PyType_FromSpec(&SbkObjectType_Type_spec)); + } + return type; +} + +static PyObject *SbkObjectGetDict(PyObject* pObj, void *) +{ + SbkObject *obj = reinterpret_cast(pObj); + if (!obj->ob_dict) + obj->ob_dict = PyDict_New(); + if (!obj->ob_dict) + return 0; + Py_INCREF(obj->ob_dict); + return obj->ob_dict; +} + +static PyGetSetDef SbkObjectGetSetList[] = { + {const_cast("__dict__"), SbkObjectGetDict, 0, 0, 0}, + {0, 0, 0, 0, 0} // Sentinel +}; + +static int SbkObject_traverse(PyObject* self, visitproc visit, void* arg) +{ + SbkObject* sbkSelf = reinterpret_cast(self); + + //Visit children + Shiboken::ParentInfo* pInfo = sbkSelf->d->parentInfo; + if (pInfo) { + std::set::const_iterator it = pInfo->children.begin(); + for(; it != pInfo->children.end(); ++it) + Py_VISIT(*it); + } + + //Visit refs + Shiboken::RefCountMap* rInfo = sbkSelf->d->referredObjects; + if (rInfo) { + Shiboken::RefCountMap::const_iterator it = rInfo->begin(); + for (; it != rInfo->end(); ++it) { + std::list::const_iterator ref = it->second.begin(); + for(; ref != it->second.end(); ++ref) + Py_VISIT(*ref); + } + } + + if (sbkSelf->ob_dict) + Py_VISIT(sbkSelf->ob_dict); + return 0; +} + +static int SbkObject_clear(PyObject* self) +{ + SbkObject* sbkSelf = reinterpret_cast(self); + + Shiboken::Object::removeParent(sbkSelf); + + if (sbkSelf->d->parentInfo) + _destroyParentInfo(sbkSelf, true); + + Shiboken::Object::clearReferences(sbkSelf); + + if (sbkSelf->ob_dict) + Py_CLEAR(sbkSelf->ob_dict); + return 0; +} + +static PyType_Slot SbkObject_Type_slots[] = { + {Py_tp_dealloc, (void *)SbkDeallocWrapperWithPrivateDtor}, + {Py_tp_traverse, (void *)SbkObject_traverse}, + {Py_tp_clear, (void *)SbkObject_clear}, + // unsupported: {Py_tp_weaklistoffset, (void *)offsetof(SbkObject, weakreflist)}, + {Py_tp_getset, (void *)SbkObjectGetSetList}, + // unsupported: {Py_tp_dictoffset, (void *)offsetof(SbkObject, ob_dict)}, + {0, 0} +}; +static PyType_Spec SbkObject_Type_spec = { + "Shiboken.Object", + sizeof(SbkObject), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + SbkObject_Type_slots, +}; + + +SbkObjectType *SbkObject_TypeF(void) +{ + static PyTypeObject *type = nullptr; + if (!type) { + type = reinterpret_cast(PyType_FromSpec(&SbkObject_Type_spec)); + Py_TYPE(type) = SbkObjectType_TypeF(); + Py_INCREF(Py_TYPE(type)); + type->tp_weaklistoffset = offsetof(SbkObject, weakreflist); + type->tp_dictoffset = offsetof(SbkObject, ob_dict); + } + return reinterpret_cast(type); +} + + +static void SbkDeallocWrapperCommon(PyObject* pyObj, bool canDelete) +{ + SbkObject* sbkObj = reinterpret_cast(pyObj); + PyTypeObject* pyType = Py_TYPE(pyObj); + + // Need to decref the type if this is the dealloc func; if type + // is subclassed, that dealloc func will decref (see subtype_dealloc + // in typeobject.c in the python sources) + bool needTypeDecref = (PyType_GetSlot(pyType, Py_tp_dealloc) == SbkDeallocWrapper + || PyType_GetSlot(pyType, Py_tp_dealloc) == SbkDeallocWrapperWithPrivateDtor); + + // Ensure that the GC is no longer tracking this object to avoid a + // possible reentrancy problem. Since there are multiple steps involved + // in deallocating a SbkObject it is possible for the garbage collector to + // be invoked and it trying to delete this object while it is still in + // progress from the first time around, resulting in a double delete and a + // crash. + // PYSIDE-571: Some objects do not use GC, so check this! + if (PyObject_IS_GC(pyObj)) + PyObject_GC_UnTrack(pyObj); + + // Check that Python is still initialized as sometimes this is called by a static destructor + // after Python interpeter is shutdown. + if (sbkObj->weakreflist && Py_IsInitialized()) + PyObject_ClearWeakRefs(pyObj); + + // If I have ownership and is valid delete C++ pointer + if (canDelete && sbkObj->d->hasOwnership && sbkObj->d->validCppObject) { + SbkObjectTypePrivate *sotp = PepType_SOTP(pyType); + if (sotp->is_multicpp) { + Shiboken::DeallocVisitor visitor(sbkObj); + Shiboken::walkThroughClassHierarchy(Py_TYPE(pyObj), &visitor); + } else { + void* cptr = sbkObj->d->cptr[0]; + Shiboken::Object::deallocData(sbkObj, true); + + Shiboken::ThreadStateSaver threadSaver; + if (Py_IsInitialized()) + threadSaver.save(); + sotp->cpp_dtor(cptr); + } + } else { + Shiboken::Object::deallocData(sbkObj, true); + } + + if (needTypeDecref) + Py_DECREF(pyType); +} + +void SbkDeallocWrapper(PyObject* pyObj) +{ + SbkDeallocWrapperCommon(pyObj, true); +} + +void SbkDeallocQAppWrapper(PyObject* pyObj) +{ + SbkDeallocWrapper(pyObj); + // PYSIDE-571: make sure to create a singleton deleted qApp. + MakeSingletonQAppWrapper(NULL); +} + +void SbkDeallocWrapperWithPrivateDtor(PyObject* self) +{ + SbkDeallocWrapperCommon(self, false); +} + +void SbkObjectTypeDealloc(PyObject* pyObj) +{ + SbkObjectTypePrivate *sotp = PepType_SOTP(pyObj); + PyTypeObject *type = reinterpret_cast(pyObj); + + PyObject_GC_UnTrack(pyObj); +#ifndef Py_LIMITED_API + Py_TRASHCAN_SAFE_BEGIN(pyObj); +#endif + if (sotp) { + if (sotp->user_data && sotp->d_func) { + sotp->d_func(sotp->user_data); + sotp->user_data = nullptr; + } + free(sotp->original_name); + sotp->original_name = nullptr; + if (!Shiboken::ObjectType::isUserType(type)) + Shiboken::Conversions::deleteConverter(sotp->converter); + delete sotp; + sotp = nullptr; + } +#ifndef Py_LIMITED_API + Py_TRASHCAN_SAFE_END(pyObj); +#endif +} + +PyObject* SbkObjectTypeTpNew(PyTypeObject* metatype, PyObject* args, PyObject* kwds) +{ + // Check if all bases are new style before calling type.tp_new + // Was causing gc assert errors in test_bug704.py when + // this check happened after creating the type object. + // Argument parsing take from type.tp_new code. + + // PYSIDE-595: Also check if all bases allow inheritance. + // Before we changed to heap types, it was sufficient to remove the + // Py_TPFLAGS_BASETYPE flag. That does not work, because PySide does + // not respect this flag itself! + PyObject* name; + PyObject* pyBases; + PyObject* dict; + static const char* kwlist[] = { "name", "bases", "dict", 0}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "sO!O!:sbktype", (char**)kwlist, + &name, + &PyTuple_Type, &pyBases, + &PyDict_Type, &dict)) + return NULL; + + for (int i=0, i_max=PyTuple_GET_SIZE(pyBases); i < i_max; i++) { + PyObject* baseType = PyTuple_GET_ITEM(pyBases, i); +#ifndef IS_PY3K + if (PyClass_Check(baseType)) { + PyErr_Format(PyExc_TypeError, "Invalid base class used in type %s. " + "PySide only support multiple inheritance from python new style class.", metatype->tp_name); + return 0; + } +#endif + if (reinterpret_cast(baseType)->tp_new == SbkDummyNew) { + // PYSIDE-595: A base class does not allow inheritance. + return SbkDummyNew(metatype, args, kwds); + } + } + + // The meta type creates a new type when the Python programmer extends a wrapped C++ class. + newfunc type_new = reinterpret_cast(PyType_Type.tp_new); + SbkObjectType *newType = reinterpret_cast(type_new(metatype, args, kwds)); + if (!newType) + return 0; + + Shiboken::ObjectType::initPrivateData(newType); + SbkObjectTypePrivate *sotp = PepType_SOTP(newType); + + std::list bases = Shiboken::getCppBaseClasses(reinterpret_cast(newType)); + if (bases.size() == 1) { + SbkObjectTypePrivate *parentType = PepType_SOTP(bases.front()); + sotp->mi_offsets = parentType->mi_offsets; + sotp->mi_init = parentType->mi_init; + sotp->mi_specialcast = parentType->mi_specialcast; + sotp->type_discovery = parentType->type_discovery; + sotp->cpp_dtor = parentType->cpp_dtor; + sotp->is_multicpp = 0; + sotp->converter = parentType->converter; + } else { + sotp->mi_offsets = nullptr; + sotp->mi_init = nullptr; + sotp->mi_specialcast = nullptr; + sotp->type_discovery = nullptr; + sotp->cpp_dtor = nullptr; + sotp->is_multicpp = 1; + sotp->converter = nullptr; + } + if (bases.size() == 1) + sotp->original_name = strdup(PepType_SOTP(bases.front())->original_name); + else + sotp->original_name = strdup("object"); + sotp->user_data = nullptr; + sotp->d_func = nullptr; + sotp->is_user_type = 1; + + std::list::const_iterator it = bases.begin(); + for (; it != bases.end(); ++it) { + if (PepType_SOTP(*it)->subtype_init) + PepType_SOTP(*it)->subtype_init(newType, args, kwds); + } + + return reinterpret_cast(newType); +} + +static PyObject *_setupNew(SbkObject *self, PyTypeObject *subtype) +{ + Py_INCREF(reinterpret_cast(subtype)); + SbkObjectPrivate* d = new SbkObjectPrivate; + + SbkObjectTypePrivate * sotp = PepType_SOTP(subtype); + int numBases = ((sotp && sotp->is_multicpp) ? + Shiboken::getNumberOfCppBaseClasses(subtype) : 1); + d->cptr = new void*[numBases]; + std::memset(d->cptr, 0, sizeof(void*) * size_t(numBases)); + d->hasOwnership = 1; + d->containsCppWrapper = 0; + d->validCppObject = 0; + d->parentInfo = nullptr; + d->referredObjects = nullptr; + d->cppObjectCreated = 0; + self->ob_dict = nullptr; + self->weakreflist = nullptr; + self->d = d; + return reinterpret_cast(self); +} + +PyObject* SbkObjectTpNew(PyTypeObject *subtype, PyObject *, PyObject *) +{ + SbkObject *self = PyObject_GC_New(SbkObject, subtype); + PyObject *res = _setupNew(self, subtype); + PyObject_GC_Track(reinterpret_cast(self)); + return res; +} + +PyObject* SbkQAppTpNew(PyTypeObject* subtype, PyObject *, PyObject *) +{ + // PYSIDE-571: + // For qApp, we need to create a singleton Python object. + // We cannot track this with the GC, because it is a static variable! + + // Python 2 has a weird handling of flags in derived classes that Python 3 + // does not have. Observed with bug_307.py. + // But it could theoretically also happen with Python3. + // Therefore we enforce that there is no GC flag, ever! + + // PYSIDE-560: + // We avoid to use this in Python 3, because we have a hard time to get + // write access to these flags +#ifndef IS_PY3K + if (PyType_HasFeature(subtype, Py_TPFLAGS_HAVE_GC)) { + subtype->tp_flags &= ~Py_TPFLAGS_HAVE_GC; + subtype->tp_free = PyObject_Del; + } +#endif + SbkObject* self = reinterpret_cast(MakeSingletonQAppWrapper(subtype)); + return self == 0 ? 0 : _setupNew(self, subtype); +} + +void +SbkDummyDealloc(PyObject *) +{} + +PyObject * +SbkDummyNew(PyTypeObject *type, PyObject*, PyObject*) +{ + // PYSIDE-595: Give the same error as type_call does when tp_new is NULL. + PyErr_Format(PyExc_TypeError, + "cannot create '%.100s' instances ¯\\_(ツ)_/¯", + type->tp_name); + return nullptr; +} + +} //extern "C" + + +namespace +{ + +void _destroyParentInfo(SbkObject* obj, bool keepReference) +{ + Shiboken::ParentInfo* pInfo = obj->d->parentInfo; + if (pInfo) { + while(!pInfo->children.empty()) { + SbkObject* first = *pInfo->children.begin(); + // Mark child as invalid + Shiboken::Object::invalidate(first); + Shiboken::Object::removeParent(first, false, keepReference); + } + Shiboken::Object::removeParent(obj, false); + } +} + +} + +namespace Shiboken +{ + +static void decRefPyObjectList(const std::list &pyObj, PyObject* skip = 0); + +static void _walkThroughClassHierarchy(PyTypeObject* currentType, HierarchyVisitor* visitor) +{ + PyObject* bases = currentType->tp_bases; + Py_ssize_t numBases = PyTuple_GET_SIZE(bases); + for (int i = 0; i < numBases; ++i) { + PyTypeObject* type = reinterpret_cast(PyTuple_GET_ITEM(bases, i)); + + if (!PyType_IsSubtype(type, reinterpret_cast(SbkObject_TypeF()))) { + continue; + } else { + SbkObjectType* sbkType = reinterpret_cast(type); + if (PepType_SOTP(sbkType)->is_user_type) + _walkThroughClassHierarchy(type, visitor); + else + visitor->visit(sbkType); + } + if (visitor->wasFinished()) + break; + } +} + +void walkThroughClassHierarchy(PyTypeObject* currentType, HierarchyVisitor* visitor) +{ + _walkThroughClassHierarchy(currentType, visitor); + visitor->done(); +} + + +bool importModule(const char* moduleName, PyTypeObject*** cppApiPtr) +{ + PyObject* sysModules = PyImport_GetModuleDict(); + PyObject* module = PyDict_GetItemString(sysModules, moduleName); + if (!module) { + module = PyImport_ImportModule(moduleName); + if (!module) + return false; + } else { + Py_INCREF(module); + } + + Shiboken::AutoDecRef cppApi(PyObject_GetAttrString(module, "_Cpp_Api")); + Py_DECREF(module); + + if (cppApi.isNull()) + return false; + +#ifdef IS_PY3K + if (PyCapsule_CheckExact(cppApi)) + *cppApiPtr = reinterpret_cast(PyCapsule_GetPointer(cppApi, 0)); +#else + // Python 2.6 doesn't have PyCapsule API, so let's keep usign PyCObject on all Python 2.x + if (PyCObject_Check(cppApi)) + *cppApiPtr = reinterpret_cast(PyCObject_AsVoidPtr(cppApi)); +#endif + return true; +} + +// Wrapper metatype and base type ---------------------------------------------------------- + +void DtorCallerVisitor::visit(SbkObjectType* node) +{ + m_ptrs.push_back(std::make_pair(m_pyObj->d->cptr[m_ptrs.size()], node)); +} + +void DtorCallerVisitor::done() +{ + std::list >::const_iterator it = m_ptrs.begin(); + for (; it != m_ptrs.end(); ++it) { + Shiboken::ThreadStateSaver threadSaver; + threadSaver.save(); + PepType_SOTP(it->second)->cpp_dtor(it->first); + } +} + +void DeallocVisitor::done() +{ + Shiboken::Object::deallocData(m_pyObj, true); + DtorCallerVisitor::done(); +} + +namespace Conversions { void init(); } + +void init() +{ + static bool shibokenAlreadInitialised = false; + if (shibokenAlreadInitialised) + return; + + Conversions::init(); + + PyEval_InitThreads(); + + //Init private data + Pep384_Init(); + + Shiboken::ObjectType::initPrivateData(SbkObject_TypeF()); + + if (PyType_Ready(SbkEnumType_TypeF()) < 0) + Py_FatalError("[libshiboken] Failed to initialise Shiboken.SbkEnumType metatype."); + + if (PyType_Ready(SbkObjectType_TypeF()) < 0) + Py_FatalError("[libshiboken] Failed to initialise Shiboken.BaseWrapperType metatype."); + + if (PyType_Ready(reinterpret_cast(SbkObject_TypeF())) < 0) + Py_FatalError("[libshiboken] Failed to initialise Shiboken.BaseWrapper type."); + + VoidPtr::init(); + + shibokenAlreadInitialised = true; +} + +void setErrorAboutWrongArguments(PyObject* args, const char* funcName, const char** cppOverloads) +{ + std::string msg; + std::string params; + if (args) { + if (PyTuple_Check(args)) { + for (Py_ssize_t i = 0, max = PyTuple_GET_SIZE(args); i < max; ++i) { + if (i) + params += ", "; + PyObject* arg = PyTuple_GET_ITEM(args, i); + params += Py_TYPE(arg)->tp_name; + } + } else { + params = Py_TYPE(args)->tp_name; + } + } + + if (!cppOverloads) { + msg = "'" + std::string(funcName) + "' called with wrong argument types: " + params; + } else { + msg = "'" + std::string(funcName) + "' called with wrong argument types:\n "; + msg += funcName; + msg += '('; + msg += params; + msg += ")\n"; + msg += "Supported signatures:"; + for (int i = 0; cppOverloads[i]; ++i) { + msg += "\n "; + msg += funcName; + msg += '('; + msg += cppOverloads[i]; + msg += ')'; + } + } + PyErr_SetString(PyExc_TypeError, msg.c_str()); + +} + +class FindBaseTypeVisitor : public HierarchyVisitor +{ + public: + FindBaseTypeVisitor(PyTypeObject* typeToFind) : m_found(false), m_typeToFind(typeToFind) {} + virtual void visit(SbkObjectType* node) + { + if (reinterpret_cast(node) == m_typeToFind) { + m_found = true; + finish(); + } + } + bool found() const { return m_found; } + + private: + bool m_found; + PyTypeObject* m_typeToFind; +}; + +std::list splitPyObject(PyObject* pyObj) +{ + std::list result; + if (PySequence_Check(pyObj)) { + AutoDecRef lst(PySequence_Fast(pyObj, "Invalid keep reference object.")); + if (!lst.isNull()) { + for (Py_ssize_t i = 0, i_max = PySequence_Fast_GET_SIZE(lst.object()); i < i_max; ++i) { + PyObject* item = PySequence_Fast_GET_ITEM(lst.object(), i); + if (Object::checkType(item)) + result.push_back(reinterpret_cast(item)); + } + } + } else { + result.push_back(reinterpret_cast(pyObj)); + } + return result; +} + +static void decRefPyObjectList(const std::list& lst, PyObject *skip) +{ + std::list::const_iterator iter = lst.begin(); + while(iter != lst.end()) { + if (*iter != skip) + Py_DECREF(*iter); + ++iter; + } +} + +namespace ObjectType +{ + +bool checkType(PyTypeObject* type) +{ + return PyType_IsSubtype(type, reinterpret_cast(SbkObject_TypeF())) != 0; +} + +bool isUserType(PyTypeObject* type) +{ + return checkType(type) && PepType_SOTP(type)->is_user_type; +} + +bool canCallConstructor(PyTypeObject* myType, PyTypeObject* ctorType) +{ + FindBaseTypeVisitor visitor(ctorType); + walkThroughClassHierarchy(myType, &visitor); + if (!visitor.found()) { + PyErr_Format(PyExc_TypeError, "%s isn't a direct base class of %s", ctorType->tp_name, myType->tp_name); + return false; + } + return true; +} + +bool hasCast(SbkObjectType* type) +{ + return PepType_SOTP(type)->mi_specialcast != 0; +} + +void* cast(SbkObjectType* sourceType, SbkObject* obj, PyTypeObject* targetType) +{ + return PepType_SOTP(sourceType)->mi_specialcast(Object::cppPointer(obj, targetType), + reinterpret_cast(targetType)); +} + +void setCastFunction(SbkObjectType* type, SpecialCastFunction func) +{ + PepType_SOTP(type)->mi_specialcast = func; +} + +void setOriginalName(SbkObjectType* type, const char* name) +{ + SbkObjectTypePrivate *sotp = PepType_SOTP(type); + if (sotp->original_name) + free(sotp->original_name); + sotp->original_name = strdup(name); +} + +const char* getOriginalName(SbkObjectType* type) +{ + return PepType_SOTP(type)->original_name; +} + +void setTypeDiscoveryFunctionV2(SbkObjectType* type, TypeDiscoveryFuncV2 func) +{ + PepType_SOTP(type)->type_discovery = func; +} + +void copyMultimpleheritance(SbkObjectType* type, SbkObjectType* other) +{ + PepType_SOTP(type)->mi_init = PepType_SOTP(other)->mi_init; + PepType_SOTP(type)->mi_offsets = PepType_SOTP(other)->mi_offsets; + PepType_SOTP(type)->mi_specialcast = PepType_SOTP(other)->mi_specialcast; +} + +void setMultipleInheritanceFunction(SbkObjectType* type, MultipleInheritanceInitFunction function) +{ + PepType_SOTP(type)->mi_init = function; +} + +MultipleInheritanceInitFunction getMultipleIheritanceFunction(SbkObjectType* type) +{ + return PepType_SOTP(type)->mi_init; +} + +void setDestructorFunction(SbkObjectType* type, ObjectDestructor func) +{ + PepType_SOTP(type)->cpp_dtor = func; +} + +void initPrivateData(SbkObjectType* type) +{ + PepType_SOTP(type) = new SbkObjectTypePrivate; + memset(PepType_SOTP(type), 0, sizeof(SbkObjectTypePrivate)); +} + +SbkObjectType * +introduceWrapperType(PyObject *enclosingObject, + const char *typeName, + const char *originalName, + PyType_Spec *typeSpec, + const char *signaturesString, + ObjectDestructor cppObjDtor, + SbkObjectType *baseType, + PyObject *baseTypes, + bool isInnerClass) +{ + if (baseType) { + typeSpec->slots[0].pfunc = reinterpret_cast(baseType); + } + else { + typeSpec->slots[0].pfunc = reinterpret_cast(SbkObject_TypeF()); + } + PyObject *heaptype = PyType_FromSpecWithBases(typeSpec, baseTypes); + Py_TYPE(heaptype) = SbkObjectType_TypeF(); + Py_INCREF(Py_TYPE(heaptype)); + SbkObjectType *type = reinterpret_cast(heaptype); + if (baseType) { + if (baseTypes) { + for (int i = 0; i < PySequence_Fast_GET_SIZE(baseTypes); ++i) + BindingManager::instance().addClassInheritance(reinterpret_cast(PySequence_Fast_GET_ITEM(baseTypes, i)), type); + } else { + BindingManager::instance().addClassInheritance(baseType, type); + } + } + // PYSIDE-510: Here is the single change to support signatures. + if (SbkSpecial_Type_Ready(enclosingObject, reinterpret_cast(type), signaturesString) < 0) + return nullptr; + + initPrivateData(type); + setOriginalName(type, originalName); + setDestructorFunction(type, cppObjDtor); + + if (isInnerClass) { + if (PyDict_SetItemString(enclosingObject, typeName, reinterpret_cast(type)) == 0) + return type; + else + return nullptr; + } + + //PyModule_AddObject steals type's reference. + Py_INCREF(reinterpret_cast(type)); + if (PyModule_AddObject(enclosingObject, typeName, reinterpret_cast(type)) == 0) { + return type; + } + return nullptr; +} + +void setSubTypeInitHook(SbkObjectType* type, SubTypeInitHook func) +{ + PepType_SOTP(type)->subtype_init = func; +} + +void* getTypeUserData(SbkObjectType* type) +{ + return PepType_SOTP(type)->user_data; +} + +void setTypeUserData(SbkObjectType* type, void* userData, DeleteUserDataFunc d_func) +{ + SbkObjectTypePrivate *sotp = PepType_SOTP(type); + sotp->user_data = userData; + sotp->d_func = d_func; +} + +} // namespace ObjectType + + +namespace Object +{ + +static void recursive_invalidate(SbkObject* self, std::set& seen); + +bool checkType(PyObject* pyObj) +{ + return ObjectType::checkType(Py_TYPE(pyObj)); +} + +bool isUserType(PyObject* pyObj) +{ + return ObjectType::isUserType(Py_TYPE(pyObj)); +} + +Py_hash_t hash(PyObject* pyObj) +{ + assert(Shiboken::Object::checkType(pyObj)); + return reinterpret_cast(pyObj); +} + +static void setSequenceOwnership(PyObject* pyObj, bool owner) +{ + + bool has_length = true; + if (PySequence_Size(pyObj) < 0) { + PyErr_Clear(); + has_length = false; + } + + if (PySequence_Check(pyObj) && has_length) { + Py_ssize_t size = PySequence_Size(pyObj); + if (size > 0) { + std::list objs = splitPyObject(pyObj); + for (auto it = objs.begin(), end = objs.end(); it != end; ++it) { + if (owner) + getOwnership(*it); + else + releaseOwnership(*it); + } + } + } else if (Object::checkType(pyObj)) { + if (owner) + getOwnership(reinterpret_cast(pyObj)); + else + releaseOwnership(reinterpret_cast(pyObj)); + } +} + +void setValidCpp(SbkObject* pyObj, bool value) +{ + pyObj->d->validCppObject = value; +} + +void setHasCppWrapper(SbkObject* pyObj, bool value) +{ + pyObj->d->containsCppWrapper = value; +} + +bool hasCppWrapper(SbkObject* pyObj) +{ + return pyObj->d->containsCppWrapper; +} + +bool wasCreatedByPython(SbkObject* pyObj) +{ + return pyObj->d->cppObjectCreated; +} + +void callCppDestructors(SbkObject* pyObj) +{ + PyTypeObject *type = Py_TYPE(pyObj); + SbkObjectTypePrivate * sotp = PepType_SOTP(type); + if (sotp->is_multicpp) { + Shiboken::DtorCallerVisitor visitor(pyObj); + Shiboken::walkThroughClassHierarchy(type, &visitor); + } else { + Shiboken::ThreadStateSaver threadSaver; + threadSaver.save(); + sotp->cpp_dtor(pyObj->d->cptr[0]); + } + + /* invalidate needs to be called before deleting pointer array because + it needs to delete entries for them from the BindingManager hash table; + also release wrapper explicitly if object contains C++ wrapper because + invalidate doesn't */ + invalidate(pyObj); + if (pyObj->d->validCppObject && pyObj->d->containsCppWrapper) { + BindingManager::instance().releaseWrapper(pyObj); + } + + delete[] pyObj->d->cptr; + pyObj->d->cptr = 0; + pyObj->d->validCppObject = false; +} + +bool hasOwnership(SbkObject* pyObj) +{ + return pyObj->d->hasOwnership; +} + +void getOwnership(SbkObject* self) +{ + // skip if already have the ownership + if (self->d->hasOwnership) + return; + + // skip if this object has parent + if (self->d->parentInfo && self->d->parentInfo->parent) + return; + + // Get back the ownership + self->d->hasOwnership = true; + + if (self->d->containsCppWrapper) + Py_DECREF(reinterpret_cast(self)); // Remove extra ref + else + makeValid(self); // Make the object valid again +} + +void getOwnership(PyObject* pyObj) +{ + if (pyObj) + setSequenceOwnership(pyObj, true); +} + +void releaseOwnership(SbkObject* self) +{ + // skip if the ownership have already moved to c++ + SbkObjectType* selfType = reinterpret_cast(Py_TYPE(self)); + if (!self->d->hasOwnership || Shiboken::Conversions::pythonTypeIsValueType(PepType_SOTP(selfType)->converter)) + return; + + // remove object ownership + self->d->hasOwnership = false; + + // If We have control over object life + if (self->d->containsCppWrapper) + Py_INCREF(reinterpret_cast(self)); // keep the python object alive until the wrapper destructor call + else + invalidate(self); // If I do not know when this object will die We need to invalidate this to avoid use after +} + +void releaseOwnership(PyObject* self) +{ + setSequenceOwnership(self, false); +} + +/* Needed forward declarations */ +static void recursive_invalidate(PyObject* pyobj, std::set& seen); +static void recursive_invalidate(SbkObject* self, std::set& seen); + +void invalidate(PyObject* pyobj) +{ + std::set seen; + recursive_invalidate(pyobj, seen); +} + +void invalidate(SbkObject* self) +{ + std::set seen; + recursive_invalidate(self, seen); +} + +static void recursive_invalidate(PyObject* pyobj, std::set& seen) +{ + std::list objs = splitPyObject(pyobj); + std::list::const_iterator it = objs.begin(); + for (; it != objs.end(); it++) + recursive_invalidate(*it, seen); +} + +static void recursive_invalidate(SbkObject* self, std::set& seen) +{ + // Skip if this object not is a valid object or if it's already been seen + if (!self || reinterpret_cast(self) == Py_None || seen.find(self) != seen.end()) + return; + seen.insert(self); + + if (!self->d->containsCppWrapper) { + self->d->validCppObject = false; // Mark object as invalid only if this is not a wrapper class + BindingManager::instance().releaseWrapper(self); + } + + // If it is a parent invalidate all children. + if (self->d->parentInfo) { + // Create a copy because this list can be changed during the process + ChildrenList copy = self->d->parentInfo->children; + ChildrenList::iterator it = copy.begin(); + + for (; it != copy.end(); ++it) { + // invalidate the child + recursive_invalidate(*it, seen); + + // if the parent not is a wrapper class, then remove children from him, because We do not know when this object will be destroyed + if (!self->d->validCppObject) + removeParent(*it, true, true); + } + } + + // If has ref to other objects invalidate all + if (self->d->referredObjects) { + RefCountMap& refCountMap = *(self->d->referredObjects); + RefCountMap::iterator iter; + for (iter = refCountMap.begin(); iter != refCountMap.end(); ++iter) { + const std::list lst = iter->second; + std::list::const_iterator it = lst.begin(); + while(it != lst.end()) { + recursive_invalidate(*it, seen); + ++it; + } + } + } +} + +void makeValid(SbkObject* self) +{ + // Skip if this object not is a valid object + if (!self || reinterpret_cast(self) == Py_None || self->d->validCppObject) + return; + + // Mark object as invalid only if this is not a wrapper class + self->d->validCppObject = true; + + // If it is a parent make all children valid + if (self->d->parentInfo) { + ChildrenList::iterator it = self->d->parentInfo->children.begin(); + for (; it != self->d->parentInfo->children.end(); ++it) + makeValid(*it); + } + + // If has ref to other objects make all valid again + if (self->d->referredObjects) { + RefCountMap& refCountMap = *(self->d->referredObjects); + RefCountMap::iterator iter; + for (iter = refCountMap.begin(); iter != refCountMap.end(); ++iter) { + const std::list lst = iter->second; + std::list::const_iterator it = lst.begin(); + while(it != lst.end()) { + if (Shiboken::Object::checkType(*it)) + makeValid(reinterpret_cast(*it)); + ++it; + } + } + } +} + +void* cppPointer(SbkObject* pyObj, PyTypeObject* desiredType) +{ + PyTypeObject* type = Py_TYPE(pyObj); + int idx = 0; + if (PepType_SOTP(reinterpret_cast(type))->is_multicpp) + idx = getTypeIndexOnHierarchy(type, desiredType); + if (pyObj->d->cptr) + return pyObj->d->cptr[idx]; + return 0; +} + +std::vector cppPointers(SbkObject* pyObj) +{ + int n = getNumberOfCppBaseClasses(Py_TYPE(pyObj)); + std::vector ptrs(n); + for (int i = 0; i < n; ++i) + ptrs[i] = pyObj->d->cptr[i]; + return ptrs; +} + + +bool setCppPointer(SbkObject* sbkObj, PyTypeObject* desiredType, void* cptr) +{ + int idx = 0; + PyTypeObject *type = Py_TYPE(sbkObj); + if (PepType_SOTP(type)->is_multicpp) + idx = getTypeIndexOnHierarchy(type, desiredType); + + const bool alreadyInitialized = sbkObj->d->cptr[idx] != 0; + if (alreadyInitialized) + PyErr_SetString(PyExc_RuntimeError, "You can't initialize an object twice!"); + else + sbkObj->d->cptr[idx] = cptr; + + sbkObj->d->cppObjectCreated = true; + return !alreadyInitialized; +} + +bool isValid(PyObject* pyObj) +{ + if (!pyObj || pyObj == Py_None + || Py_TYPE(Py_TYPE(pyObj)) != SbkObjectType_TypeF()) { + return true; + } + + SbkObjectPrivate* priv = reinterpret_cast(pyObj)->d; + + if (!priv->cppObjectCreated && isUserType(pyObj)) { + PyErr_Format(PyExc_RuntimeError, "'__init__' method of object's base class (%s) not called.", + Py_TYPE(pyObj)->tp_name); + return false; + } + + if (!priv->validCppObject) { + PyErr_Format(PyExc_RuntimeError, "Internal C++ object (%s) already deleted.", + Py_TYPE(pyObj)->tp_name); + return false; + } + + return true; +} + +bool isValid(SbkObject* pyObj, bool throwPyError) +{ + if (!pyObj) + return false; + + SbkObjectPrivate* priv = pyObj->d; + if (!priv->cppObjectCreated && isUserType(reinterpret_cast(pyObj))) { + if (throwPyError) + PyErr_Format(PyExc_RuntimeError, "Base constructor of the object (%s) not called.", + Py_TYPE(pyObj)->tp_name); + return false; + } + + if (!priv->validCppObject) { + if (throwPyError) + PyErr_Format(PyExc_RuntimeError, "Internal C++ object (%s) already deleted.", + (Py_TYPE(pyObj))->tp_name); + return false; + } + + return true; +} + +bool isValid(PyObject* pyObj, bool throwPyError) +{ + if (!pyObj || pyObj == Py_None || + !PyType_IsSubtype(Py_TYPE(pyObj), reinterpret_cast(SbkObject_TypeF()))) { + return true; + } + return isValid(reinterpret_cast(pyObj), throwPyError); +} + +SbkObject *findColocatedChild(SbkObject *wrapper, + const SbkObjectType *instanceType) +{ + // Degenerate case, wrapper is the correct wrapper. + if (reinterpret_cast(Py_TYPE(wrapper)) == reinterpret_cast(instanceType)) + return wrapper; + + if (!(wrapper->d && wrapper->d->cptr)) + return 0; + + ParentInfo* pInfo = wrapper->d->parentInfo; + if (!pInfo) + return 0; + + ChildrenList& children = pInfo->children; + + ChildrenList::iterator childrenEnd = children.end(); + for (ChildrenList::iterator iChild = children.begin(); iChild != childrenEnd; ++iChild) { + if (!((*iChild)->d && (*iChild)->d->cptr)) + continue; + if ((*iChild)->d->cptr[0] == wrapper->d->cptr[0]) { + if (reinterpret_cast(Py_TYPE(*iChild)) == reinterpret_cast(instanceType)) + return const_cast((*iChild)); + else + return findColocatedChild(const_cast(*iChild), instanceType); + } + } + return 0; +} + + +PyObject *newObject(SbkObjectType* instanceType, + void* cptr, + bool hasOwnership, + bool isExactType, + const char* typeName) +{ + // Try to find the exact type of cptr. + if (!isExactType) { + PyTypeObject* exactType = 0; + if (typeName) { + exactType = Shiboken::Conversions::getPythonTypeObject(typeName); + if (exactType) + instanceType = reinterpret_cast(exactType); + } + if (!exactType) + instanceType = BindingManager::instance().resolveType(&cptr, instanceType); + } + + bool shouldCreate = true; + bool shouldRegister = true; + SbkObject* self = 0; + + // Some logic to ensure that colocated child field does not overwrite the parent + if (BindingManager::instance().hasWrapper(cptr)) { + SbkObject* existingWrapper = BindingManager::instance().retrieveWrapper(cptr); + + self = findColocatedChild(existingWrapper, instanceType); + if (self) { + // Wrapper already registered for cptr. + // This should not ideally happen, binding code should know when a wrapper + // already exists and retrieve it instead. + shouldRegister = shouldCreate = false; + } else if (hasOwnership && + (!(Shiboken::Object::hasCppWrapper(existingWrapper) || + Shiboken::Object::hasOwnership(existingWrapper)))) { + // Old wrapper is likely junk, since we have ownership and it doesn't. + BindingManager::instance().releaseWrapper(existingWrapper); + } else { + // Old wrapper may be junk caused by some bug in identifying object deletion + // but it may not be junk when a colocated field is accessed for an + // object which was not created by python (returned from c++ factory function). + // Hence we cannot release the wrapper confidently so we do not register. + shouldRegister = false; + } + } + + if (shouldCreate) { + self = reinterpret_cast(SbkObjectTpNew(reinterpret_cast(instanceType), 0, 0)); + self->d->cptr[0] = cptr; + self->d->hasOwnership = hasOwnership; + self->d->validCppObject = 1; + if (shouldRegister) { + BindingManager::instance().registerWrapper(self, cptr); + } + } else { + Py_IncRef(reinterpret_cast(self)); + } + return reinterpret_cast(self); +} + +void destroy(SbkObject* self) +{ + destroy(self, 0); +} + +void destroy(SbkObject* self, void* cppData) +{ + // Skip if this is called with NULL pointer this can happen in derived classes + if (!self) + return; + + // This can be called in c++ side + Shiboken::GilState gil; + + // Remove all references attached to this object + clearReferences(self); + + // Remove the object from parent control + + // Verify if this object has parent + bool hasParent = (self->d->parentInfo && self->d->parentInfo->parent); + + if (self->d->parentInfo) { + // Check for children information and make all invalid if they exists + _destroyParentInfo(self, true); + // If this object has parent then the pyobject can be invalid now, because we remove the last ref after remove from parent + } + + //if !hasParent this object could still alive + if (!hasParent && self->d->containsCppWrapper && !self->d->hasOwnership) { + // Remove extra ref used by c++ object this will case the pyobject destruction + // This can cause the object death + Py_DECREF(reinterpret_cast(self)); + } + + //Python Object is not destroyed yet + if (cppData && Shiboken::BindingManager::instance().hasWrapper(cppData)) { + // Remove from BindingManager + Shiboken::BindingManager::instance().releaseWrapper(self); + self->d->hasOwnership = false; + + // the cpp object instance was deleted + delete[] self->d->cptr; + self->d->cptr = 0; + } + + // After this point the object can be death do not use the self pointer bellow +} + +void removeParent(SbkObject* child, bool giveOwnershipBack, bool keepReference) +{ + ParentInfo* pInfo = child->d->parentInfo; + if (!pInfo || !pInfo->parent) { + if (pInfo && pInfo->hasWrapperRef) { + pInfo->hasWrapperRef = false; + } + return; + } + + ChildrenList& oldBrothers = pInfo->parent->d->parentInfo->children; + // Verify if this child is part of parent list + auto iChild = oldBrothers.find(child); + if (iChild == oldBrothers.end()) + return; + + oldBrothers.erase(iChild); + + pInfo->parent = 0; + + // This will keep the wrapper reference, will wait for wrapper destruction to remove that + if (keepReference && + child->d->containsCppWrapper) { + //If have already a extra ref remove this one + if (pInfo->hasWrapperRef) + Py_DECREF(child); + else + pInfo->hasWrapperRef = true; + return; + } + + // Transfer ownership back to Python + child->d->hasOwnership = giveOwnershipBack; + + // Remove parent ref + Py_DECREF(child); +} + +void setParent(PyObject* parent, PyObject* child) +{ + if (!child || child == Py_None || child == parent) + return; + + /* + * setParent is recursive when the child is a native Python sequence, i.e. objects not binded by Shiboken + * like tuple and list. + * + * This "limitation" exists to fix the following problem: A class multiple inherits QObject and QString, + * so if you pass this class to someone that takes the ownership, we CAN'T enter in this if, but hey! QString + * follows the sequence protocol. + */ + if (PySequence_Check(child) && !Object::checkType(child)) { + Shiboken::AutoDecRef seq(PySequence_Fast(child, 0)); + for (Py_ssize_t i = 0, max = PySequence_Size(seq); i < max; ++i) + setParent(parent, PySequence_Fast_GET_ITEM(seq.object(), i)); + return; + } + + bool parentIsNull = !parent || parent == Py_None; + SbkObject* parent_ = reinterpret_cast(parent); + SbkObject* child_ = reinterpret_cast(child); + + if (!parentIsNull) { + if (!parent_->d->parentInfo) + parent_->d->parentInfo = new ParentInfo; + + // do not re-add a child + if (child_->d->parentInfo && (child_->d->parentInfo->parent == parent_)) + return; + } + + ParentInfo* pInfo = child_->d->parentInfo; + bool hasAnotherParent = pInfo && pInfo->parent && pInfo->parent != parent_; + + //Avoid destroy child during reparent operation + Py_INCREF(child); + + // check if we need to remove this child from the old parent + if (parentIsNull || hasAnotherParent) + removeParent(child_); + + // Add the child to the new parent + pInfo = child_->d->parentInfo; + if (!parentIsNull) { + if (!pInfo) + pInfo = child_->d->parentInfo = new ParentInfo; + + pInfo->parent = parent_; + parent_->d->parentInfo->children.insert(child_); + + // Add Parent ref + Py_INCREF(child_); + + // Remove ownership + child_->d->hasOwnership = false; + } + + // Remove previous safe ref + Py_DECREF(child); +} + +void deallocData(SbkObject* self, bool cleanup) +{ + // Make cleanup if this is not a wrapper otherwise this will be done on wrapper destructor + if(cleanup) { + removeParent(self); + + if (self->d->parentInfo) + _destroyParentInfo(self, true); + + clearReferences(self); + } + + if (self->d->cptr) { + // Remove from BindingManager + Shiboken::BindingManager::instance().releaseWrapper(self); + delete[] self->d->cptr; + self->d->cptr = 0; + // delete self->d; PYSIDE-205: wrong! + } + delete self->d; // PYSIDE-205: always delete d. + Py_XDECREF(self->ob_dict); + + // PYSIDE-571: qApp is no longer allocated. + if (PyObject_IS_GC(reinterpret_cast(self))) + Py_TYPE(self)->tp_free(self); +} + +void setTypeUserData(SbkObject* wrapper, void* userData, DeleteUserDataFunc d_func) +{ + SbkObjectTypePrivate *sotp = PepType_SOTP(Py_TYPE(wrapper)); + if (sotp->user_data) + sotp->d_func(sotp->user_data); + + sotp->d_func = d_func; + sotp->user_data = userData; +} + +void* getTypeUserData(SbkObject* wrapper) +{ + return PepType_SOTP(Py_TYPE(wrapper))->user_data; +} + +void keepReference(SbkObject* self, const char* key, PyObject* referredObject, bool append) +{ + bool isNone = (!referredObject || (referredObject == Py_None)); + + if (!self->d->referredObjects) + self->d->referredObjects = new Shiboken::RefCountMap; + + RefCountMap& refCountMap = *(self->d->referredObjects); + RefCountMap::iterator iter = refCountMap.find(key); + std::list objects; + if (iter != refCountMap.end()) { + objects = (*iter).second; + std::list::const_iterator found = std::find(objects.begin(), objects.end(), referredObject); + + // skip if objects already exists + if (found != objects.end()) + return; + } + + if (append && !isNone) { + refCountMap[key].push_back(referredObject); + Py_INCREF(referredObject); + } else if (!append) { + if (objects.size() > 0) + decRefPyObjectList(objects, isNone ? 0 : referredObject); + if (isNone) { + if (iter != refCountMap.end()) + refCountMap.erase(iter); + } else { + objects.clear(); + objects.push_back(referredObject); + refCountMap[key] = objects; + Py_INCREF(referredObject); + } + } +} + +void removeReference(SbkObject* self, const char* key, PyObject* referredObject) +{ + if (!referredObject || (referredObject == Py_None)) + return; + + if (!self->d->referredObjects) + return; + + RefCountMap& refCountMap = *(self->d->referredObjects); + RefCountMap::iterator iter = refCountMap.find(key); + if (iter != refCountMap.end()) { + decRefPyObjectList(iter->second); + refCountMap.erase(iter); + } +} + +void clearReferences(SbkObject* self) +{ + if (!self->d->referredObjects) + return; + + RefCountMap& refCountMap = *(self->d->referredObjects); + RefCountMap::iterator iter; + for (iter = refCountMap.begin(); iter != refCountMap.end(); ++iter) + decRefPyObjectList(iter->second); + self->d->referredObjects->clear(); +} + +std::string info(SbkObject* self) +{ + std::ostringstream s; + std::list bases; + + if (self->d && self->d->cptr) { + if (ObjectType::isUserType(Py_TYPE(self))) + bases = getCppBaseClasses(Py_TYPE(self)); + else + bases.push_back(reinterpret_cast(Py_TYPE(self))); + + s << "C++ address....... "; + std::list::const_iterator it = bases.begin(); + for (int i = 0; it != bases.end(); ++it, ++i) + s << reinterpret_cast(*it)->tp_name << '/' << self->d->cptr[i] << ' '; + s << "\n"; + } + else { + s << "C++ address....... <>\n"; + } + + s << "hasOwnership...... " << bool(self->d->hasOwnership) << "\n" + "containsCppWrapper " << self->d->containsCppWrapper << "\n" + "validCppObject.... " << self->d->validCppObject << "\n" + "wasCreatedByPython " << self->d->cppObjectCreated << "\n"; + + + if (self->d->parentInfo && self->d->parentInfo->parent) { + s << "parent............ "; + Shiboken::AutoDecRef parent(PyObject_Str(reinterpret_cast(self->d->parentInfo->parent))); + s << String::toCString(parent) << "\n"; + } + + if (self->d->parentInfo && !self->d->parentInfo->children.empty()) { + s << "children.......... "; + ChildrenList& children = self->d->parentInfo->children; + for (ChildrenList::const_iterator it = children.begin(); it != children.end(); ++it) { + Shiboken::AutoDecRef child(PyObject_Str(reinterpret_cast(*it))); + s << String::toCString(child) << ' '; + } + s << '\n'; + } + + if (self->d->referredObjects && !self->d->referredObjects->empty()) { + Shiboken::RefCountMap& map = *self->d->referredObjects; + s << "referred objects.. "; + Shiboken::RefCountMap::const_iterator it = map.begin(); + for (; it != map.end(); ++it) { + if (it != map.begin()) + s << " "; + s << '"' << it->first << "\" => "; + std::list::const_iterator j = it->second.begin(); + for (; j != it->second.end(); ++j) { + Shiboken::AutoDecRef obj(PyObject_Str(*j)); + s << String::toCString(obj) << ' '; + } + s << ' '; + } + s << '\n'; + } + return s.str(); +} + +} // namespace Object + +} // namespace Shiboken diff --git a/sources/shiboken2/libshiboken/basewrapper.h b/sources/shiboken2/libshiboken/basewrapper.h new file mode 100644 index 0000000..06b17a1 --- /dev/null +++ b/sources/shiboken2/libshiboken/basewrapper.h @@ -0,0 +1,448 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef BASEWRAPPER_H +#define BASEWRAPPER_H + +#include "sbkpython.h" +#include "shibokenmacros.h" + +#include +#include + +extern "C" +{ + +struct SbkConverter; +struct SbkObjectPrivate; + +/// Base Python object for all the wrapped C++ classes. +struct LIBSHIBOKEN_API SbkObject +{ + PyObject_HEAD + /// Instance dictionary. + PyObject* ob_dict; + /// List of weak references + PyObject* weakreflist; + SbkObjectPrivate* d; +}; + + +/// Dealloc the python object \p pyObj and the C++ object represented by it. +LIBSHIBOKEN_API void SbkDeallocWrapper(PyObject* pyObj); +LIBSHIBOKEN_API void SbkDeallocQAppWrapper(PyObject* pyObj); +LIBSHIBOKEN_API void SbkDeallocWrapperWithPrivateDtor(PyObject* self); + +struct SbkObjectType; + +/// Function signature for the multiple inheritance information initializers that should be provided by classes with multiple inheritance. +typedef int* (*MultipleInheritanceInitFunction)(const void*); + +/** + * Special cast function is used to correctly cast an object when it's + * part of a multiple inheritance hierarchy. + * The implementation of this function is auto generated by the generator and you don't need to care about it. + */ +typedef void* (*SpecialCastFunction)(void*, SbkObjectType*); +typedef SbkObjectType* (*TypeDiscoveryFunc)(void*, SbkObjectType*); +typedef void* (*TypeDiscoveryFuncV2)(void*, SbkObjectType*); + +typedef void* (*ExtendedToCppFunc)(PyObject*); // DEPRECATED. +typedef bool (*ExtendedIsConvertibleFunc)(PyObject*); // DEPRECATED. + +// Used in userdata dealloc function +typedef void (*DeleteUserDataFunc)(void*); + +typedef void (*ObjectDestructor)(void*); + +typedef void (*SubTypeInitHook)(SbkObjectType*, PyObject*, PyObject*); + +extern LIBSHIBOKEN_API PyTypeObject *SbkObjectType_TypeF(void); +extern LIBSHIBOKEN_API SbkObjectType *SbkObject_TypeF(void); + + +struct SbkObjectTypePrivate; +/// PyTypeObject extended with C++ multiple inheritance information. +struct LIBSHIBOKEN_API SbkObjectType +{ + PyTypeObject type; +}; + +LIBSHIBOKEN_API PyObject* SbkObjectTpNew(PyTypeObject* subtype, PyObject*, PyObject*); +// the special case of a switchable singleton +LIBSHIBOKEN_API PyObject* SbkQAppTpNew(PyTypeObject *subtype, PyObject *args, PyObject *kwds); + +/** + * PYSIDE-595: Use a null deallocator instead of nullptr. + * + * When moving to heaptypes, we were struck by a special default behavior of + * PyType_FromSpecWithBases that inserts subtype_dealloc when tp_dealloc is + * nullptr. To prevent inserting this, we use a null deallocator that is there + * as a placeholder. + * + * The same holds for a null tp_new. We use one that raises the right error. + */ +LIBSHIBOKEN_API void SbkDummyDealloc(PyObject*); +LIBSHIBOKEN_API PyObject *SbkDummyNew(PyTypeObject *type, PyObject*, PyObject*); + +} // extern "C" + +namespace Shiboken +{ + +/** +* Init shiboken library. +*/ +LIBSHIBOKEN_API void init(); + + +/// Delete the class T allocated on \p cptr. +template +void callCppDestructor(void* cptr) +{ + delete reinterpret_cast(cptr); +} + +/** + * Shiboken::importModule is DEPRECATED. Use Shiboken::Module::import() instead. + */ +SBK_DEPRECATED(LIBSHIBOKEN_API bool importModule(const char* moduleName, PyTypeObject*** cppApiPtr)); +LIBSHIBOKEN_API void setErrorAboutWrongArguments(PyObject* args, const char* funcName, const char** cppOverloads); + +namespace ObjectType { + +/** +* Returns true if the object is an instance of a type created by the Shiboken generator. +*/ +LIBSHIBOKEN_API bool checkType(PyTypeObject* pyObj); + +/** +* Returns true if this object is an instance of an user defined type derived from an Shiboken type. +*/ +LIBSHIBOKEN_API bool isUserType(PyTypeObject* pyObj); + +/** +* Returns true if the constructor of \p ctorType can be called for a instance of type \p myType. +* \note This function set a python error when returning false. +*/ +LIBSHIBOKEN_API bool canCallConstructor(PyTypeObject* myType, PyTypeObject* ctorType); + +/** + * Tells if the \p type represents an object of a class with multiple inheritance in C++. + * When this occurs, the C++ pointer held by the Python wrapper will need to be cast when + * passed as a parameter that expects a type of its ancestry. + * \returns true if a call to ObjectType::cast() is needed to obtain the correct + * C++ pointer for Python objects of type \p type. + */ +LIBSHIBOKEN_API bool hasCast(SbkObjectType* type); +/** + * Cast the C++ pointer held by a Python object \p obj of type \p sourceType, + * to a C++ pointer of a C++ class indicated by type \p targetType. + * \returns The cast C++ pointer. + */ +LIBSHIBOKEN_API void* cast(SbkObjectType* sourceType, SbkObject* obj, PyTypeObject* targetType); +/// Set the C++ cast function for \p type. +LIBSHIBOKEN_API void setCastFunction(SbkObjectType* type, SpecialCastFunction func); + +LIBSHIBOKEN_API void setOriginalName(SbkObjectType* self, const char* name); +LIBSHIBOKEN_API const char* getOriginalName(SbkObjectType* self); + +LIBSHIBOKEN_API void setTypeDiscoveryFunctionV2(SbkObjectType* self, TypeDiscoveryFuncV2 func); +LIBSHIBOKEN_API void copyMultimpleheritance(SbkObjectType* self, SbkObjectType* other); +LIBSHIBOKEN_API void setMultipleInheritanceFunction(SbkObjectType* self, MultipleInheritanceInitFunction func); +LIBSHIBOKEN_API MultipleInheritanceInitFunction getMultipleIheritanceFunction(SbkObjectType* self); + +LIBSHIBOKEN_API void setDestructorFunction(SbkObjectType* self, ObjectDestructor func); + +LIBSHIBOKEN_API void initPrivateData(SbkObjectType* self); + +/** + * Initializes a Shiboken wrapper type and adds it to the module, + * or to the enclosing class if the type is an inner class. + * This function also calls initPrivateData and setDestructorFunction. + * \param enclosingObject The module or enclosing class to where the new \p type will be added. + * \param typeName Name by which the type will be known in Python. + * \param originalName Original C++ name of the type. + * \param type The new type to be initialized and added to the module. + * \param cppObjDtor Memory deallocation function for the C++ object held by \p type. + * Should not be used if the underlying C++ class has a private destructor. + * \param baseType Base type from whom the new \p type inherits. + * \param baseTypes Other base types from whom the new \p type inherits. + * \param isInnerClass Tells if the new \p type is an inner class (the default is that it isn't). + * If false then the \p enclosingObject is a module, otherwise it is another + * wrapper type. + * \returns true if the initialization went fine, false otherwise. + */ +LIBSHIBOKEN_API SbkObjectType *introduceWrapperType(PyObject *enclosingObject, + const char *typeName, + const char *originalName, + PyType_Spec *typeSpec, + const char *signaturesString, + ObjectDestructor cppObjDtor, + SbkObjectType *baseType, + PyObject *baseTypes, + bool isInnerClass); + +/** + * Set the subtype init hook for a type. + * + * This hook will be invoked every time the user creates a sub-type inherited from a Shiboken based type. + * The hook gets 3 params, they are: The new type being created, args and kwds. The last two are the very + * same got from tp_new. + */ +LIBSHIBOKEN_API void setSubTypeInitHook(SbkObjectType* self, SubTypeInitHook func); + +/** + * Get the user data previously set by Shiboken::Object::setTypeUserData + */ +LIBSHIBOKEN_API void* getTypeUserData(SbkObjectType* self); +LIBSHIBOKEN_API void setTypeUserData(SbkObjectType* self, void* userData, DeleteUserDataFunc d_func); + +} + +namespace Object { + +/** + * Returns a string with information about the internal state of the instance object, useful for debug purposes. + */ +LIBSHIBOKEN_API std::string info(SbkObject* self); + +/** +* Returns true if the object is an instance of a type created by the Shiboken generator. +*/ +LIBSHIBOKEN_API bool checkType(PyObject* pyObj); + +/** + * Returns true if this object type is an instance of an user defined type derived from an Shiboken type. + * \see Shiboken::ObjectType::isUserType + */ +LIBSHIBOKEN_API bool isUserType(PyObject* pyObj); + +/** + * Generic function used to make ObjectType hashable, the C++ pointer is used as hash value. + */ +LIBSHIBOKEN_API Py_hash_t hash(PyObject* pyObj); + +/** + * Find a child of given wrapper having same address having the specified type. + */ +LIBSHIBOKEN_API SbkObject *findColocatedChild(SbkObject *wrapper, + const SbkObjectType *instanceType); + +/** + * Bind a C++ object to Python. + * \param instanceType equivalent Python type for the C++ object. + * \param hasOwnership if true, Python will try to delete the underlying C++ object when there's no more refs. + * \param isExactType if false, Shiboken will use some heuristics to detect the correct Python type of this C++ + * object, in any case you must provide \p instanceType, it'll be used as search starting point + * and as fallback. + * \param typeName If non-null, this will be used as helper to find the correct Python type for this object. + */ +LIBSHIBOKEN_API PyObject* newObject(SbkObjectType* instanceType, + void* cptr, + bool hasOwnership = true, + bool isExactType = false, + const char* typeName = 0); + +/** + * Changes the valid flag of a PyObject, invalid objects will raise an exception when someone tries to access it. + */ +LIBSHIBOKEN_API void setValidCpp(SbkObject* pyObj, bool value); +/** + * Tells shiboken the Python object \p pyObj has a C++ wrapper used to intercept virtual method calls. + */ +LIBSHIBOKEN_API void setHasCppWrapper(SbkObject* pyObj, bool value); +/** + * Return true if the Python object \p pyObj has a C++ wrapper used to intercept virtual method calls. + */ +LIBSHIBOKEN_API bool hasCppWrapper(SbkObject* pyObj); + +/** + * Return true if the Python object was created by Python, false otherwise. + * \note This function was added to libshiboken only to be used by shiboken.wasCreatedByPython() + */ +LIBSHIBOKEN_API bool wasCreatedByPython(SbkObject* pyObj); + +/** + * Call the C++ object destructor and invalidates the Python object. + * \note This function was added to libshiboken only to be used by shiboken.delete() + */ +LIBSHIBOKEN_API void callCppDestructors(SbkObject* pyObj); + +/** + * Return true if the Python is responsible for deleting the underlying C++ object. + */ +LIBSHIBOKEN_API bool hasOwnership(SbkObject* pyObj); + +/** + * Sets python as responsible to delete the underlying C++ object. + * \note You this overload only when the PyObject can be a sequence and you want to + * call this function for every item in the sequence. + * \see getOwnership(SbkObject*) + */ +LIBSHIBOKEN_API void getOwnership(PyObject* pyObj); + +/** + * Sets python as responsible to delete the underlying C++ object. + */ +LIBSHIBOKEN_API void getOwnership(SbkObject* pyObj); + +/** + * Release the ownership, so Python will not delete the underlying C++ object. + * \note You this overload only when the PyObject can be a sequence and you want to + * call this function for every item in the sequence. + * \see releaseOwnership(SbkObject*) + */ +LIBSHIBOKEN_API void releaseOwnership(PyObject* pyObj); +/** + * Release the ownership, so Python will not delete the underlying C++ object. + */ +LIBSHIBOKEN_API void releaseOwnership(SbkObject* pyObj); + +/** + * Get the C++ pointer of type \p desiredType from a Python object. + */ +LIBSHIBOKEN_API void* cppPointer(SbkObject* pyObj, PyTypeObject* desiredType); + +/** + * Return a list with all C++ pointers held from a Python object. + * \note This function was added to libshiboken only to be used by shiboken.getCppPointer() + */ +LIBSHIBOKEN_API std::vector cppPointers(SbkObject* pyObj); + +/** + * Set the C++ pointer of type \p desiredType of a Python object. + */ +LIBSHIBOKEN_API bool setCppPointer(SbkObject* sbkObj, PyTypeObject* desiredType, void* cptr); + +/** + * Returns false and sets a Python RuntimeError if the Python wrapper is not marked as valid. + */ +LIBSHIBOKEN_API bool isValid(PyObject* pyObj); + +/** + * Returns false if the Python wrapper is not marked as valid. + * \param pyObj the object. + * \param throwPyError sets a Python RuntimeError when the object isn't valid. + */ +LIBSHIBOKEN_API bool isValid(SbkObject* pyObj, bool throwPyError = true); + +/** + * Returns false if the Python wrapper is not marked as valid. + * \param pyObj the object. + * \param throwPyError sets a Python RuntimeError when the object isn't valid. + */ +LIBSHIBOKEN_API bool isValid(PyObject* pyObj, bool throwPyError); + +/** +* Set the parent of \p child to \p parent. +* When an object dies, all their children, grandchildren, etc, are tagged as invalid. +* \param parent the parent object, if null, the child will have no parents. +* \param child the child. +*/ +LIBSHIBOKEN_API void setParent(PyObject* parent, PyObject* child); + +/** +* Remove this child from their parent, if any. +* \param child the child. +*/ +LIBSHIBOKEN_API void removeParent(SbkObject* child, bool giveOwnershipBack = true, bool keepReferenc = false); + +/** + * Mark the object as invalid + */ +LIBSHIBOKEN_API void invalidate(SbkObject* self); + +/** + * Help function can be used to invalidate a sequence of object + **/ +LIBSHIBOKEN_API void invalidate(PyObject* pyobj); + +/** + * Make the object valid again + */ +LIBSHIBOKEN_API void makeValid(SbkObject* self); + +/// \deprecated Use destroy(SbkObject*, void*) +SBK_DEPRECATED(LIBSHIBOKEN_API void destroy(SbkObject* self)); + +/** + * Destroy any data in Shiboken structure and c++ pointer if the pyboject has the ownership + */ +LIBSHIBOKEN_API void destroy(SbkObject* self, void* cppData); + +/** + * Set user data on type of \p wrapper. + * \param wrapper instance object, the user data will be set on his type + * \param userData the user data + * \param d_func a function used to delete the user data + */ +LIBSHIBOKEN_API void setTypeUserData(SbkObject* wrapper, void* userData, DeleteUserDataFunc d_func); +/** + * Get the user data previously set by Shiboken::Object::setTypeUserData + */ +LIBSHIBOKEN_API void* getTypeUserData(SbkObject* wrapper); + +/** + * Increments the reference count of the referred Python object. + * A previous Python object in the same position identified by the 'key' parameter + * will have its reference counter decremented automatically when replaced. + * All the kept references should be decremented when the Python wrapper indicated by + * 'self' dies. + * No checking is done for any of the passed arguments, since it is meant to be used + * by generated code it is supposed that the generator is correct. + * \param self the wrapper instance that keeps references to other objects. + * \param key a key that identifies the C++ method signature and argument where the referred Object came from. + * \param referredObject the object whose reference is used by the self object. + */ +LIBSHIBOKEN_API void keepReference(SbkObject* self, const char* key, PyObject* referredObject, bool append = false); + +/** + * Removes any reference previously added by keepReference function + * \param self the wrapper instance that keeps references to other objects. + * \param key a key that identifies the C++ method signature and argument from where the referred Object came. + * \param referredObject the object whose reference is used by the self object. + */ +LIBSHIBOKEN_API void removeReference(SbkObject* self, const char* key, PyObject* referredObject); + +} // namespace Object + +} // namespace Shiboken + +#endif // BASEWRAPPER_H diff --git a/sources/shiboken2/libshiboken/basewrapper_p.h b/sources/shiboken2/libshiboken/basewrapper_p.h new file mode 100644 index 0000000..ebd2648 --- /dev/null +++ b/sources/shiboken2/libshiboken/basewrapper_p.h @@ -0,0 +1,287 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef BASEWRAPPER_P_H +#define BASEWRAPPER_P_H + +#include "sbkpython.h" +#include "basewrapper.h" + +#include +#include +#include +#include + +struct SbkObject; +struct SbkObjectType; +struct SbkConverter; + +namespace Shiboken +{ +/** + * This mapping associates a method and argument of an wrapper object with the wrapper of + * said argument when it needs the binding to help manage its reference count. + */ +typedef std::map > RefCountMap; + +/// Linked list of SbkBaseWrapper pointers +typedef std::set ChildrenList; + +/// Structure used to store information about object parent and children. +struct ParentInfo +{ + /// Default ctor. + ParentInfo() : parent(0), hasWrapperRef(false) {} + /// Pointer to parent object. + SbkObject* parent; + /// List of object children. + ChildrenList children; + /// has internal ref + bool hasWrapperRef; +}; + +} // namespace Shiboken + +extern "C" +{ + +/** + * \internal + * Private data for SbkBaseWrapper + */ +struct SbkObjectPrivate +{ + /// Pointer to the C++ class. + void** cptr; + /// True when Python is responsible for freeing the used memory. + unsigned int hasOwnership : 1; + /// This is true when the C++ class of the wrapped object has a virtual destructor AND was created by Python. + unsigned int containsCppWrapper : 1; + /// Marked as false when the object is lost to C++ and the binding can not know if it was deleted or not. + unsigned int validCppObject : 1; + /// Marked as true when the object constructor was called + unsigned int cppObjectCreated : 1; + /// Information about the object parents and children, may be null. + Shiboken::ParentInfo* parentInfo; + /// Manage reference count of objects that are referred to but not owned from. + Shiboken::RefCountMap* referredObjects; + + ~SbkObjectPrivate() + { + delete parentInfo; + parentInfo = 0; + delete referredObjects; + referredObjects = 0; + } +}; + +// TODO-CONVERTERS: to be deprecated/removed +/// The type behaviour was not defined yet +#define BEHAVIOUR_UNDEFINED 0 +/// The type is a value type +#define BEHAVIOUR_VALUETYPE 1 +/// The type is an object type +#define BEHAVIOUR_OBJECTTYPE 2 + +struct SbkObjectTypePrivate +{ + SbkConverter* converter; + int* mi_offsets; + MultipleInheritanceInitFunction mi_init; + + /// Special cast function, null if this class doesn't have multiple inheritance. + SpecialCastFunction mi_specialcast; + TypeDiscoveryFuncV2 type_discovery; + /// Pointer to a function responsible for deletion of the C++ instance calling the proper destructor. + ObjectDestructor cpp_dtor; + /// True if this type holds two or more C++ instances, e.g.: a Python class which inherits from two C++ classes. + int is_multicpp : 1; + /// True if this type was defined by the user. + int is_user_type : 1; + /// Tells is the type is a value type or an object-type, see BEHAVIOUR_* constants. + // TODO-CONVERTERS: to be deprecated/removed + int type_behaviour : 2; + /// C++ name + char* original_name; + /// Type user data + void* user_data; + DeleteUserDataFunc d_func; + void (*subtype_init)(SbkObjectType*, PyObject*, PyObject*); +}; + + +} // extern "C" + +namespace Shiboken +{ +/** + * Utility function used to transform a PyObject that implements sequence protocol into a std::list. + **/ +std::list splitPyObject(PyObject* pyObj); + +/** +* Visitor class used by walkOnClassHierarchy function. +*/ +class HierarchyVisitor +{ +public: + HierarchyVisitor() : m_wasFinished(false) {} + virtual ~HierarchyVisitor() {} + virtual void visit(SbkObjectType* node) = 0; + virtual void done() {} + void finish() { m_wasFinished = true; }; + bool wasFinished() const { return m_wasFinished; } +private: + bool m_wasFinished; +}; + +class BaseCountVisitor : public HierarchyVisitor +{ +public: + BaseCountVisitor() : m_count(0) {} + + void visit(SbkObjectType*) + { + m_count++; + } + + int count() const { return m_count; } +private: + int m_count; +}; + +class BaseAccumulatorVisitor : public HierarchyVisitor +{ +public: + BaseAccumulatorVisitor() {} + + void visit(SbkObjectType* node) + { + m_bases.push_back(node); + } + + std::list bases() const { return m_bases; } +private: + std::list m_bases; +}; + +class GetIndexVisitor : public HierarchyVisitor +{ +public: + GetIndexVisitor(PyTypeObject* desiredType) : m_index(-1), m_desiredType(desiredType) {} + virtual void visit(SbkObjectType* node) + { + m_index++; + if (PyType_IsSubtype(reinterpret_cast(node), m_desiredType)) + finish(); + } + int index() const { return m_index; } + +private: + int m_index; + PyTypeObject* m_desiredType; +}; + +/// Call the destructor of each C++ object held by a Python object +class DtorCallerVisitor : public HierarchyVisitor +{ +public: + DtorCallerVisitor(SbkObject* pyObj) : m_pyObj(pyObj) {} + void visit(SbkObjectType* node); + void done(); +protected: + std::list > m_ptrs; + SbkObject* m_pyObj; +}; + +/// Dealloc of each C++ object held by a Python object, this implies a call to the C++ object destructor +class DeallocVisitor : public DtorCallerVisitor +{ +public: + DeallocVisitor(SbkObject* pyObj) : DtorCallerVisitor(pyObj) {} + void done(); +}; + +/// \internal Internal function used to walk on classes inheritance trees. +/** +* Walk on class hierarchy using a DFS algorithm. +* For each pure Shiboken type found, HiearchyVisitor::visit is called and the algorithm consider +* all children of this type as visited. +*/ +void walkThroughClassHierarchy(PyTypeObject* currentType, HierarchyVisitor* visitor); + +inline int getTypeIndexOnHierarchy(PyTypeObject* baseType, PyTypeObject* desiredType) +{ + GetIndexVisitor visitor(desiredType); + walkThroughClassHierarchy(baseType, &visitor); + return visitor.index(); +} + +inline int getNumberOfCppBaseClasses(PyTypeObject* baseType) +{ + BaseCountVisitor visitor; + walkThroughClassHierarchy(baseType, &visitor); + return visitor.count(); +} + +inline std::list getCppBaseClasses(PyTypeObject* baseType) +{ + BaseAccumulatorVisitor visitor; + walkThroughClassHierarchy(baseType, &visitor); + return visitor.bases(); +} + +namespace Object +{ +/** +* Decrements the reference counters of every object referred by self. +* \param self the wrapper instance that keeps references to other objects. +*/ +void clearReferences(SbkObject* self); + +/** + * Destroy internal data + **/ +void deallocData(SbkObject* self, bool doCleanup); + +} // namespace Object + +} // namespace Shiboken + +#endif diff --git a/sources/shiboken2/libshiboken/bindingmanager.cpp b/sources/shiboken2/libshiboken/bindingmanager.cpp new file mode 100644 index 0000000..0aa520b --- /dev/null +++ b/sources/shiboken2/libshiboken/bindingmanager.cpp @@ -0,0 +1,346 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "basewrapper.h" +#include "basewrapper_p.h" +#include "bindingmanager.h" +#include "sbkdbg.h" +#include "gilstate.h" +#include "sbkstring.h" +#include "debugfreehook.h" + +#include +#include +#include + +namespace Shiboken +{ + +typedef std::unordered_map WrapperMap; + +class Graph +{ +public: + typedef std::list NodeList; + typedef std::unordered_map Edges; + + Edges m_edges; + + Graph() + { + } + + void addEdge(SbkObjectType* from, SbkObjectType* to) + { + m_edges[from].push_back(to); + } + +#ifndef NDEBUG + void dumpDotGraph() + { + std::ofstream file("/tmp/shiboken_graph.dot"); + + file << "digraph D {\n"; + + Edges::const_iterator i = m_edges.begin(); + for (; i != m_edges.end(); ++i) { + SbkObjectType* node1 = i->first; + const NodeList& nodeList = i->second; + NodeList::const_iterator j = nodeList.begin(); + for (; j != nodeList.end(); ++j) { + file << '"' << reinterpret_cast(*j)->tp_name << "\" -> \"" + << reinterpret_cast(node1)->tp_name << "\"\n"; + } + } + file << "}\n"; + } +#endif + + SbkObjectType* identifyType(void** cptr, SbkObjectType* type, SbkObjectType* baseType) const + { + Edges::const_iterator edgesIt = m_edges.find(type); + if (edgesIt != m_edges.end()) { + const NodeList& adjNodes = m_edges.find(type)->second; + NodeList::const_iterator i = adjNodes.begin(); + for (; i != adjNodes.end(); ++i) { + SbkObjectType* newType = identifyType(cptr, *i, baseType); + if (newType) + return newType; + } + } + void *typeFound = nullptr; + if (PepType_SOTP(type) && PepType_SOTP(type)->type_discovery) { + typeFound = PepType_SOTP(type)->type_discovery(*cptr, baseType); + } + if (typeFound) { + // This "typeFound != type" is needed for backwards compatibility with old modules using a newer version of + // libshiboken because old versions of type_discovery function used to return a SbkObjectType* instead of + // a possible variation of the C++ instance pointer (*cptr). + if (typeFound != type) + *cptr = typeFound; + return type; + } else { + return nullptr; + } + } +}; + + +#ifndef NDEBUG +static void showWrapperMap(const WrapperMap& wrapperMap) +{ + if (Py_VerboseFlag > 0) { + fprintf(stderr, "-------------------------------\n"); + fprintf(stderr, "WrapperMap: %p (size: %d)\n", &wrapperMap, (int) wrapperMap.size()); + WrapperMap::const_iterator iter; + for (iter = wrapperMap.begin(); iter != wrapperMap.end(); ++iter) { + const SbkObject *sbkObj = iter->second; + fprintf(stderr, "key: %p, value: %p (%s, refcnt: %d)\n", iter->first, + static_cast(sbkObj), + (Py_TYPE(sbkObj))->tp_name, + int(reinterpret_cast(sbkObj)->ob_refcnt)); + } + fprintf(stderr, "-------------------------------\n"); + } +} +#endif + +struct BindingManager::BindingManagerPrivate { + WrapperMap wrapperMapper; + Graph classHierarchy; + bool destroying; + + BindingManagerPrivate() : destroying(false) {} + bool releaseWrapper(void* cptr, SbkObject* wrapper); + void assignWrapper(SbkObject* wrapper, const void* cptr); + +}; + +bool BindingManager::BindingManagerPrivate::releaseWrapper(void* cptr, SbkObject* wrapper) +{ + // The wrapper argument is checked to ensure that the correct wrapper is released. + // Returns true if the correct wrapper is found and released. + // If wrapper argument is NULL, no such check is performed. + WrapperMap::iterator iter = wrapperMapper.find(cptr); + if (iter != wrapperMapper.end() && (wrapper == 0 || iter->second == wrapper)) { + wrapperMapper.erase(iter); + return true; + } + return false; +} + +void BindingManager::BindingManagerPrivate::assignWrapper(SbkObject* wrapper, const void* cptr) +{ + assert(cptr); + WrapperMap::iterator iter = wrapperMapper.find(cptr); + if (iter == wrapperMapper.end()) + wrapperMapper.insert(std::make_pair(cptr, wrapper)); +} + +BindingManager::BindingManager() +{ + m_d = new BindingManager::BindingManagerPrivate; + +#ifdef SHIBOKEN_INSTALL_FREE_DEBUG_HOOK + debugInstallFreeHook(); +#endif +} + +BindingManager::~BindingManager() +{ +#ifdef SHIBOKEN_INSTALL_FREE_DEBUG_HOOK + debugRemoveFreeHook(); +#endif +#ifndef NDEBUG + showWrapperMap(m_d->wrapperMapper); +#endif + /* Cleanup hanging references. We just invalidate them as when + * the BindingManager is being destroyed the interpreter is alredy + * shutting down. */ + if (Py_IsInitialized()) { // ensure the interpreter is still valid + while (!m_d->wrapperMapper.empty()) { + Object::destroy(m_d->wrapperMapper.begin()->second, const_cast(m_d->wrapperMapper.begin()->first)); + } + assert(m_d->wrapperMapper.empty()); + } + delete m_d; +} + +BindingManager& BindingManager::instance() { + static BindingManager singleton; + return singleton; +} + +bool BindingManager::hasWrapper(const void* cptr) +{ + return m_d->wrapperMapper.find(cptr) != m_d->wrapperMapper.end(); +} + +void BindingManager::registerWrapper(SbkObject* pyObj, void* cptr) +{ + SbkObjectType* instanceType = reinterpret_cast(Py_TYPE(pyObj)); + SbkObjectTypePrivate* d = PepType_SOTP(instanceType); + + if (!d) + return; + + if (d->mi_init && !d->mi_offsets) + d->mi_offsets = d->mi_init(cptr); + m_d->assignWrapper(pyObj, cptr); + if (d->mi_offsets) { + int* offset = d->mi_offsets; + while (*offset != -1) { + if (*offset > 0) + m_d->assignWrapper(pyObj, reinterpret_cast((std::size_t) cptr + (*offset))); + offset++; + } + } +} + +void BindingManager::releaseWrapper(SbkObject* sbkObj) +{ + SbkObjectType* sbkType = reinterpret_cast(Py_TYPE(sbkObj)); + SbkObjectTypePrivate* d = PepType_SOTP(sbkType); + int numBases = ((d && d->is_multicpp) ? getNumberOfCppBaseClasses(Py_TYPE(sbkObj)) : 1); + + void** cptrs = reinterpret_cast(sbkObj)->d->cptr; + for (int i = 0; i < numBases; ++i) { + unsigned char *cptr = reinterpret_cast(cptrs[i]); + m_d->releaseWrapper(cptr, sbkObj); + if (d && d->mi_offsets) { + int* offset = d->mi_offsets; + while (*offset != -1) { + if (*offset > 0) + m_d->releaseWrapper(reinterpret_cast((std::size_t) cptr + (*offset)), sbkObj); + offset++; + } + } + } + sbkObj->d->validCppObject = false; +} + +SbkObject* BindingManager::retrieveWrapper(const void* cptr) +{ + WrapperMap::iterator iter = m_d->wrapperMapper.find(cptr); + if (iter == m_d->wrapperMapper.end()) + return 0; + return iter->second; +} + +PyObject* BindingManager::getOverride(const void* cptr, const char* methodName) +{ + SbkObject* wrapper = retrieveWrapper(cptr); + // The refcount can be 0 if the object is dieing and someone called + // a virtual method from the destructor + if (!wrapper || reinterpret_cast(wrapper)->ob_refcnt == 0) + return 0; + + if (wrapper->ob_dict) { + PyObject* method = PyDict_GetItemString(wrapper->ob_dict, methodName); + if (method) { + Py_INCREF(reinterpret_cast(method)); + return method; + } + } + + PyObject* pyMethodName = Shiboken::String::fromCString(methodName); + PyObject *method = PyObject_GetAttr(reinterpret_cast(wrapper), pyMethodName); + + if (method && PyMethod_Check(method) + && PyMethod_GET_SELF(method) == reinterpret_cast(wrapper)) { + PyObject* defaultMethod; + PyObject* mro = Py_TYPE(wrapper)->tp_mro; + + // The first class in the mro (index 0) is the class being checked and it should not be tested. + // The last class in the mro (size - 1) is the base Python object class which should not be tested also. + for (int i = 1; i < PyTuple_GET_SIZE(mro) - 1; i++) { + PyTypeObject* parent = reinterpret_cast(PyTuple_GET_ITEM(mro, i)); + if (parent->tp_dict) { + defaultMethod = PyDict_GetItem(parent->tp_dict, pyMethodName); + if (defaultMethod && PyMethod_GET_FUNCTION(method) != defaultMethod) { + Py_DECREF(pyMethodName); + return method; + } + } + } + } + + Py_XDECREF(method); + Py_DECREF(pyMethodName); + return 0; +} + +void BindingManager::addClassInheritance(SbkObjectType* parent, SbkObjectType* child) +{ + m_d->classHierarchy.addEdge(parent, child); +} + +SbkObjectType* BindingManager::resolveType(void* cptr, SbkObjectType* type) +{ + return resolveType(&cptr, type); +} + +SbkObjectType* BindingManager::resolveType(void** cptr, SbkObjectType* type) +{ + SbkObjectType* identifiedType = m_d->classHierarchy.identifyType(cptr, type, type); + return identifiedType ? identifiedType : type; +} + +std::set BindingManager::getAllPyObjects() +{ + std::set pyObjects; + const WrapperMap& wrappersMap = m_d->wrapperMapper; + WrapperMap::const_iterator it = wrappersMap.begin(); + for (; it != wrappersMap.end(); ++it) + pyObjects.insert(reinterpret_cast(it->second)); + + return pyObjects; +} + +void BindingManager::visitAllPyObjects(ObjectVisitor visitor, void* data) +{ + WrapperMap copy = m_d->wrapperMapper; + for (WrapperMap::iterator it = copy.begin(); it != copy.end(); ++it) { + if (hasWrapper(it->first)) + visitor(it->second, data); + } +} + +} // namespace Shiboken + diff --git a/sources/shiboken2/libshiboken/bindingmanager.h b/sources/shiboken2/libshiboken/bindingmanager.h new file mode 100644 index 0000000..13a4d3a --- /dev/null +++ b/sources/shiboken2/libshiboken/bindingmanager.h @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef BINDINGMANAGER_H +#define BINDINGMANAGER_H + +#include "sbkpython.h" +#include +#include "shibokenmacros.h" + +struct SbkObject; +struct SbkObjectType; + +namespace Shiboken +{ + +typedef void (*ObjectVisitor)(SbkObject*, void*); + +class LIBSHIBOKEN_API BindingManager +{ +public: + static BindingManager& instance(); + + bool hasWrapper(const void *cptr); + + void registerWrapper(SbkObject* pyObj, void* cptr); + void releaseWrapper(SbkObject* wrapper); + + SbkObject* retrieveWrapper(const void* cptr); + PyObject* getOverride(const void* cptr, const char* methodName); + + void addClassInheritance(SbkObjectType* parent, SbkObjectType* child); + /** + * \deprecated Use \fn resolveType(void**, SbkObjectType*), this version is broken when used with multiple inheritance + * because the \p cptr pointer of the discovered type may be different of the given \p cptr in case + * of multiple inheritance + */ + SBK_DEPRECATED(SbkObjectType* resolveType(void* cptr, SbkObjectType* type)); + /** + * Try to find the correct type of *cptr knowing that it's at least of type \p type. + * In case of multiple inheritance this function may change the contents of cptr. + * \param cptr a pointer to a pointer to the instance of type \p type + * \param type type of *cptr + * \warning This function is slow, use it only as last resort. + */ + SbkObjectType* resolveType(void** cptr, SbkObjectType* type); + + std::set getAllPyObjects(); + + /** + * Calls the function \p visitor for each object registered on binding manager. + * \note As various C++ pointers can point to the same PyObject due to multiple inheritance + * a PyObject can be called more than one time for each PyObject. + * \param visitor function called for each object. + * \param data user data passed as second argument to the visitor function. + */ + void visitAllPyObjects(ObjectVisitor visitor, void* data); + +private: + ~BindingManager(); + // disable copy + BindingManager(); + BindingManager(const BindingManager&); + BindingManager& operator=(const BindingManager&); + + struct BindingManagerPrivate; + BindingManagerPrivate* m_d; +}; + +} // namespace Shiboken + +#endif // BINDINGMANAGER_H + diff --git a/sources/shiboken2/libshiboken/bufferprocs_py37.cpp b/sources/shiboken2/libshiboken/bufferprocs_py37.cpp new file mode 100644 index 0000000..84d670d --- /dev/null +++ b/sources/shiboken2/libshiboken/bufferprocs_py37.cpp @@ -0,0 +1,397 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/***************************************************************************** + * + * Copied from abstract.c + * + * Py_buffer has been replaced by Pep_buffer + * + */ + +#ifdef Py_LIMITED_API + +#include "pep384impl.h" +/* Buffer C-API for Python 3.0 */ + +int +PyObject_GetBuffer(PyObject *obj, Pep_buffer *view, int flags) +{ + PyBufferProcs *pb = PepType_AS_BUFFER(Py_TYPE(obj)); + + if (pb == NULL || pb->bf_getbuffer == NULL) { + PyErr_Format(PyExc_TypeError, + "a bytes-like object is required, not '%.100s'", + Py_TYPE(obj)->tp_name); + return -1; + } + return (*pb->bf_getbuffer)(obj, view, flags); +} + +static int +_IsFortranContiguous(const Pep_buffer *view) +{ + Py_ssize_t sd, dim; + int i; + + /* 1) len = product(shape) * itemsize + 2) itemsize > 0 + 3) len = 0 <==> exists i: shape[i] = 0 */ + if (view->len == 0) return 1; + if (view->strides == NULL) { /* C-contiguous by definition */ + /* Trivially F-contiguous */ + if (view->ndim <= 1) return 1; + + /* ndim > 1 implies shape != NULL */ + assert(view->shape != NULL); + + /* Effectively 1-d */ + sd = 0; + for (i=0; indim; i++) { + if (view->shape[i] > 1) sd += 1; + } + return sd <= 1; + } + + /* strides != NULL implies both of these */ + assert(view->ndim > 0); + assert(view->shape != NULL); + + sd = view->itemsize; + for (i=0; indim; i++) { + dim = view->shape[i]; + if (dim > 1 && view->strides[i] != sd) { + return 0; + } + sd *= dim; + } + return 1; +} + +static int +_IsCContiguous(const Pep_buffer *view) +{ + Py_ssize_t sd, dim; + int i; + + /* 1) len = product(shape) * itemsize + 2) itemsize > 0 + 3) len = 0 <==> exists i: shape[i] = 0 */ + if (view->len == 0) return 1; + if (view->strides == NULL) return 1; /* C-contiguous by definition */ + + /* strides != NULL implies both of these */ + assert(view->ndim > 0); + assert(view->shape != NULL); + + sd = view->itemsize; + for (i=view->ndim-1; i>=0; i--) { + dim = view->shape[i]; + if (dim > 1 && view->strides[i] != sd) { + return 0; + } + sd *= dim; + } + return 1; +} + +int +PyBuffer_IsContiguous(const Pep_buffer *view, char order) +{ + + if (view->suboffsets != NULL) return 0; + + if (order == 'C') + return _IsCContiguous(view); + else if (order == 'F') + return _IsFortranContiguous(view); + else if (order == 'A') + return (_IsCContiguous(view) || _IsFortranContiguous(view)); + return 0; +} + + +void* +PyBuffer_GetPointer(Pep_buffer *view, Py_ssize_t *indices) +{ + char* pointer; + int i; + pointer = (char *)view->buf; + for (i = 0; i < view->ndim; i++) { + pointer += view->strides[i]*indices[i]; + if ((view->suboffsets != NULL) && (view->suboffsets[i] >= 0)) { + pointer = *((char**)pointer) + view->suboffsets[i]; + } + } + return (void*)pointer; +} + + +void +_Py_add_one_to_index_F(int nd, Py_ssize_t *index, const Py_ssize_t *shape) +{ + int k; + + for (k=0; k=0; k--) { + if (index[k] < shape[k]-1) { + index[k]++; + break; + } + else { + index[k] = 0; + } + } +} + +int +PyBuffer_FromContiguous(Pep_buffer *view, void *buf, Py_ssize_t len, char fort) +{ + int k; + void (*addone)(int, Py_ssize_t *, const Py_ssize_t *); + Py_ssize_t *indices, elements; + char *src, *ptr; + + if (len > view->len) { + len = view->len; + } + + if (PyBuffer_IsContiguous(view, fort)) { + /* simplest copy is all that is needed */ + memcpy(view->buf, buf, len); + return 0; + } + + /* Otherwise a more elaborate scheme is needed */ + + /* view->ndim <= 64 */ + indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*(view->ndim)); + if (indices == NULL) { + PyErr_NoMemory(); + return -1; + } + for (k=0; kndim;k++) { + indices[k] = 0; + } + + if (fort == 'F') { + addone = _Py_add_one_to_index_F; + } + else { + addone = _Py_add_one_to_index_C; + } + src = (char *)buf; // patched by CT + /* XXX : This is not going to be the fastest code in the world + several optimizations are possible. + */ + elements = len / view->itemsize; + while (elements--) { + ptr = (char *)PyBuffer_GetPointer(view, indices); // patched by CT + memcpy(ptr, src, view->itemsize); + src += view->itemsize; + addone(view->ndim, indices, view->shape); + } + + PyMem_Free(indices); + return 0; +} + +int PyObject_CopyData(PyObject *dest, PyObject *src) +{ + Pep_buffer view_dest, view_src; + int k; + Py_ssize_t *indices, elements; + char *dptr, *sptr; + + if (!PyObject_CheckBuffer(dest) || + !PyObject_CheckBuffer(src)) { + PyErr_SetString(PyExc_TypeError, + "both destination and source must be "\ + "bytes-like objects"); + return -1; + } + + if (PyObject_GetBuffer(dest, &view_dest, PyBUF_FULL) != 0) return -1; + if (PyObject_GetBuffer(src, &view_src, PyBUF_FULL_RO) != 0) { + PyBuffer_Release(&view_dest); + return -1; + } + + if (view_dest.len < view_src.len) { + PyErr_SetString(PyExc_BufferError, + "destination is too small to receive data from source"); + PyBuffer_Release(&view_dest); + PyBuffer_Release(&view_src); + return -1; + } + + if ((PyBuffer_IsContiguous(&view_dest, 'C') && + PyBuffer_IsContiguous(&view_src, 'C')) || + (PyBuffer_IsContiguous(&view_dest, 'F') && + PyBuffer_IsContiguous(&view_src, 'F'))) { + /* simplest copy is all that is needed */ + memcpy(view_dest.buf, view_src.buf, view_src.len); + PyBuffer_Release(&view_dest); + PyBuffer_Release(&view_src); + return 0; + } + + /* Otherwise a more elaborate copy scheme is needed */ + + /* XXX(nnorwitz): need to check for overflow! */ + indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*view_src.ndim); + if (indices == NULL) { + PyErr_NoMemory(); + PyBuffer_Release(&view_dest); + PyBuffer_Release(&view_src); + return -1; + } + for (k=0; k=0; k--) { + strides[k] = sd; + sd *= shape[k]; + } + } + return; +} + +int +PyBuffer_FillInfo(Pep_buffer *view, PyObject *obj, void *buf, Py_ssize_t len, + int readonly, int flags) +{ + if (view == NULL) { + PyErr_SetString(PyExc_BufferError, + "PyBuffer_FillInfo: view==NULL argument is obsolete"); + return -1; + } + + if (((flags & PyBUF_WRITABLE) == PyBUF_WRITABLE) && + (readonly == 1)) { + PyErr_SetString(PyExc_BufferError, + "Object is not writable."); + return -1; + } + + view->obj = obj; + if (obj) + Py_INCREF(obj); + view->buf = buf; + view->len = len; + view->readonly = readonly; + view->itemsize = 1; + view->format = NULL; + if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT) + view->format = (char *)"B"; // patched by CT + view->ndim = 1; + view->shape = NULL; + if ((flags & PyBUF_ND) == PyBUF_ND) + view->shape = &(view->len); + view->strides = NULL; + if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES) + view->strides = &(view->itemsize); + view->suboffsets = NULL; + view->internal = NULL; + return 0; +} + +void +PyBuffer_Release(Pep_buffer *view) +{ + PyObject *obj = view->obj; + PyBufferProcs *pb; + if (obj == NULL) + return; + pb = PepType_AS_BUFFER(Py_TYPE(obj)); + if (pb && pb->bf_releasebuffer) + pb->bf_releasebuffer(obj, view); + view->obj = NULL; + Py_DECREF(obj); +} + +#endif // Py_LIMITED_API diff --git a/sources/shiboken2/libshiboken/bufferprocs_py37.h b/sources/shiboken2/libshiboken/bufferprocs_py37.h new file mode 100644 index 0000000..6fc7a3e --- /dev/null +++ b/sources/shiboken2/libshiboken/bufferprocs_py37.h @@ -0,0 +1,145 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* +PSF LICENSE AGREEMENT FOR PYTHON 3.7.0 + +1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and + the Individual or Organization ("Licensee") accessing and otherwise using Python + 3.7.0 software in source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby + grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, + analyze, test, perform and/or display publicly, prepare derivative works, + distribute, and otherwise use Python 3.7.0 alone or in any derivative + version, provided, however, that PSF's License Agreement and PSF's notice of + copyright, i.e., "Copyright © 2001-2018 Python Software Foundation; All Rights + Reserved" are retained in Python 3.7.0 alone or in any derivative version + prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on or + incorporates Python 3.7.0 or any part thereof, and wants to make the + derivative work available to others as provided herein, then Licensee hereby + agrees to include in any such work a brief summary of the changes made to Python + 3.7.0. + +4. PSF is making Python 3.7.0 available to Licensee on an "AS IS" basis. + PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF + EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR + WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE + USE OF PYTHON 3.7.0 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 3.7.0 + FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF + MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 3.7.0, OR ANY DERIVATIVE + THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material breach of + its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any relationship + of agency, partnership, or joint venture between PSF and Licensee. This License + Agreement does not grant permission to use PSF trademarks or trade name in a + trademark sense to endorse or promote products or services of Licensee, or any + third party. + +8. By copying, installing or otherwise using Python 3.7.0, Licensee agrees + to be bound by the terms and conditions of this License Agreement. +*/ + +#ifndef BUFFER_REENABLE_H +#define BUFFER_REENABLE_H + +/* buffer interface */ +// This has been renamed to Pep_buffer and will be used. +typedef struct bufferinfo { + void *buf; + PyObject *obj; /* owned reference */ + Py_ssize_t len; + Py_ssize_t itemsize; /* This is Py_ssize_t so it can be + pointed to by strides in simple case.*/ + int readonly; + int ndim; + char *format; + Py_ssize_t *shape; + Py_ssize_t *strides; + Py_ssize_t *suboffsets; + void *internal; +} Pep_buffer; + +typedef int (*getbufferproc)(PyObject *, Pep_buffer *, int); +typedef void (*releasebufferproc)(PyObject *, Pep_buffer *); + +/* Maximum number of dimensions */ +#define PyBUF_MAX_NDIM 64 + +/* Flags for getting buffers */ +#define PyBUF_SIMPLE 0 +#define PyBUF_WRITABLE 0x0001 +/* we used to include an E, backwards compatible alias */ +#define PyBUF_WRITEABLE PyBUF_WRITABLE +#define PyBUF_FORMAT 0x0004 +#define PyBUF_ND 0x0008 +#define PyBUF_STRIDES (0x0010 | PyBUF_ND) +#define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) +#define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) +#define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) +#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) + +#define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE) +#define PyBUF_CONTIG_RO (PyBUF_ND) + +#define PyBUF_STRIDED (PyBUF_STRIDES | PyBUF_WRITABLE) +#define PyBUF_STRIDED_RO (PyBUF_STRIDES) + +#define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_WRITABLE | PyBUF_FORMAT) +#define PyBUF_RECORDS_RO (PyBUF_STRIDES | PyBUF_FORMAT) + +#define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_WRITABLE | PyBUF_FORMAT) +#define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT) + + +#define PyBUF_READ 0x100 +#define PyBUF_WRITE 0x200 + +/* End buffer interface */ +LIBSHIBOKEN_API PyObject *PyMemoryView_FromBuffer(Pep_buffer *info); +#define Py_buffer Pep_buffer + +#endif // BUFFER_REENABLE_H diff --git a/sources/shiboken2/libshiboken/debugfreehook.cpp b/sources/shiboken2/libshiboken/debugfreehook.cpp new file mode 100644 index 0000000..c66866c --- /dev/null +++ b/sources/shiboken2/libshiboken/debugfreehook.cpp @@ -0,0 +1,194 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "debugfreehook.h" +#include "bindingmanager.h" +#include "gilstate.h" + +#if defined(_WIN32) && defined(_DEBUG) +#include +#include +#endif + +#ifdef __GLIBC__ +#include +#endif + +#ifdef __APPLE__ +#include +#include +#include +#endif + +#ifdef SHIBOKEN_INSTALL_FREE_DEBUG_HOOK +extern "C" { + +static int testPointerBeingFreed(void *ptr) +{ + // It is an error for a deleted pointer address to still be registered + // in the BindingManager + if (Shiboken::BindingManager::instance().hasWrapper(ptr)) { + Shiboken::GilState state; + + SbkObject *wrapper = Shiboken::BindingManager::instance().retrieveWrapper(ptr); + + fprintf(stderr, "SbkObject still in binding map when deleted: "); + PyObject_Print(reinterpret_cast(wrapper), stderr, 0); + fprintf(stderr, "\n"); + +#ifdef _WIN32 + DebugBreak(); +#else + assert(0); +#endif + return FALSE; + } + + return TRUE; +} + +#if defined(_WIN32) && defined(_DEBUG) +static _CRT_ALLOC_HOOK lastCrtAllocHook; +static int DebugAllocHook(int nAllocType, void *pvData, + size_t nSize, int nBlockUse, long lRequest, + const unsigned char * szFileName, int nLine) +{ + // It is an error for a deleted pointer address to still be registered + // in the BindingManager + if ( nAllocType == _HOOK_FREE) { + if ( !testPointerBeingFreed(pvData) ) { + return 0; + } + } + + if ( lastCrtAllocHook != NULL ) { + return lastCrtAllocHook(nAllocType, pvData, nSize, nBlockUse, lRequest, + szFileName, nLine); + } + + return 1; +} +#endif // _WIN32 && _DEBUG + +#ifdef __GLIBC__ +static void (*lastFreeHook)(void* ptr, const void* caller); +static void DebugFreeHook(void* ptr, const void* caller) +{ + testPointerBeingFreed(ptr); + + if ( lastFreeHook != NULL ) + lastFreeHook(ptr, caller); +} +#endif // __GLIBC__ + +#ifdef __APPLE__ +static malloc_zone_t lastMallocZone; +static void DebugFreeHook(malloc_zone_t *zone, void *ptr) +{ + testPointerBeingFreed(ptr); + + if ( lastMallocZone.free != NULL ) + lastMallocZone.free(zone, ptr); +} +static void DebugFreeDefiniteSizeHook(malloc_zone_t *zone, void *ptr, size_t size) +{ + testPointerBeingFreed(ptr); + + if ( lastMallocZone.free_definite_size != NULL ) + lastMallocZone.free_definite_size(zone, ptr, size); +} +#endif __APPLE__ + +void debugInstallFreeHook(void) +{ +#if defined(_WIN32) && defined(_DEBUG) + lastCrtAllocHook = _CrtSetAllocHook(DebugAllocHook); +#endif + +#ifdef __GLIBC__ + // __free_hook is not thread safe so it marked as deprecated. Use here + // is hopefully safe and should catch errors in a single threaded program + // and only miss some in a multithreaded program + lastFreeHook = __free_hook; + __free_hook = DebugFreeHook; +#endif + +#ifdef __APPLE__ + malloc_zone_t* zone = malloc_default_zone(); + assert(zone != NULL); + //remove the write protection from the zone struct + if (zone->version >= 8) { + vm_protect(mach_task_self(), (uintptr_t)zone, sizeof(*zone), 0, VM_PROT_READ | VM_PROT_WRITE); + } + lastMallocZone = *zone; + zone->free = DebugFreeHook; + zone->free_definite_size = DebugFreeDefiniteSizeHook; + if (zone->version >= 8) { + vm_protect(mach_task_self(), (uintptr_t)zone, sizeof(*zone), 0, VM_PROT_READ); + } +#endif +} + +void debugRemoveFreeHook(void) +{ +#if defined(_WIN32) && defined(_DEBUG) + _CrtSetAllocHook(lastCrtAllocHook); +#endif + +#ifdef __GLIBC__ + __free_hook = lastFreeHook; +#endif + +#ifdef __APPLE__ + malloc_zone_t* zone = malloc_default_zone(); + assert(zone != NULL); + //remove the write protection from the zone struct + if (zone->version >= 8) { + vm_protect(mach_task_self(), (uintptr_t)zone, sizeof(*zone), 0, VM_PROT_READ | VM_PROT_WRITE); + } + zone->free = lastMallocZone.free; + zone->free_definite_size = lastMallocZone.free_definite_size; + if (zone->version >= 8) { + vm_protect(mach_task_self(), (uintptr_t)zone, sizeof(*zone), 0, VM_PROT_READ); + } +#endif +} + +} // extern "C" +#endif // SHIBOKEN_INSTALL_DEBUG_FREE_HOOK diff --git a/sources/shiboken2/libshiboken/debugfreehook.h b/sources/shiboken2/libshiboken/debugfreehook.h new file mode 100644 index 0000000..fdf98d5 --- /dev/null +++ b/sources/shiboken2/libshiboken/debugfreehook.h @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DEBUGFREEHOOK_H +#define DEBUGFREEHOOK_H + +// These functions enable C library runtime hooks to try to catch cases where +// C++ object addresses remain in hash table of valid wrappers when the address +// is passed to free. The hooks are probably not thread safe and thus +// should only be enabled in single threaded environments + +// To enable the hook, uncomment the following define. +//#define SHIBOKEN_INSTALL_FREE_DEBUG_HOOK + +#ifdef SHIBOKEN_INSTALL_FREE_DEBUG_HOOK +extern "C" { + +void debugInstallFreeHook(void); +void debugRemoveFreeHook(void); + +} // extern "C" + +#endif // SHIBOKEN_INSTALL_FREE_DEBUG_HOOK + +#endif // DEBUGFREEHOOK_H diff --git a/sources/shiboken2/libshiboken/gilstate.cpp b/sources/shiboken2/libshiboken/gilstate.cpp new file mode 100644 index 0000000..64a0b60 --- /dev/null +++ b/sources/shiboken2/libshiboken/gilstate.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "gilstate.h" + +namespace Shiboken +{ + +GilState::GilState() + : m_locked(false) +{ + if (Py_IsInitialized()) { + m_gstate = PyGILState_Ensure(); + m_locked = true; + } +} + +GilState::~GilState() +{ + release(); +} + +void GilState::release() +{ + if (m_locked && Py_IsInitialized()) { + PyGILState_Release(m_gstate); + m_locked = false; + } +} + +} // namespace Shiboken + diff --git a/sources/shiboken2/libshiboken/gilstate.h b/sources/shiboken2/libshiboken/gilstate.h new file mode 100644 index 0000000..00b0498 --- /dev/null +++ b/sources/shiboken2/libshiboken/gilstate.h @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef GILSTATE_H +#define GILSTATE_H + +#include +#include "sbkpython.h" + +namespace Shiboken +{ + +class LIBSHIBOKEN_API GilState +{ +public: + GilState(); + ~GilState(); + void release(); +private: + PyGILState_STATE m_gstate; + bool m_locked; +}; + +} // namespace Shiboken + +#endif // GILSTATE_H + diff --git a/sources/shiboken2/libshiboken/helper.cpp b/sources/shiboken2/libshiboken/helper.cpp new file mode 100644 index 0000000..4729247 --- /dev/null +++ b/sources/shiboken2/libshiboken/helper.cpp @@ -0,0 +1,144 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "helper.h" +#include "sbkstring.h" +#include + +namespace Shiboken +{ + +// PySide-510: Changed from PySequence to PyList, which is correct. +bool listToArgcArgv(PyObject* argList, int* argc, char*** argv, const char* defaultAppName) +{ + if (!PyList_Check(argList)) + return false; + + if (!defaultAppName) + defaultAppName = "PySideApplication"; + + // Check all items + Shiboken::AutoDecRef args(PySequence_Fast(argList, 0)); + int numArgs = int(PySequence_Fast_GET_SIZE(argList)); + for (int i = 0; i < numArgs; ++i) { + PyObject* item = PyList_GET_ITEM(args.object(), i); + if (!PyBytes_Check(item) && !PyUnicode_Check(item)) + return false; + } + + bool hasEmptyArgList = numArgs == 0; + if (hasEmptyArgList) + numArgs = 1; + + *argc = numArgs; + *argv = new char*[*argc]; + + if (hasEmptyArgList) { + // Try to get the script name + PyObject* globals = PyEval_GetGlobals(); + PyObject* appName = PyDict_GetItemString(globals, "__file__"); + (*argv)[0] = strdup(appName ? Shiboken::String::toCString(appName) : defaultAppName); + } else { + for (int i = 0; i < numArgs; ++i) { + PyObject* item = PyList_GET_ITEM(args.object(), i); + char* string = 0; + if (Shiboken::String::check(item)) { + string = strdup(Shiboken::String::toCString(item)); + } + (*argv)[i] = string; + } + } + + return true; +} + +int* sequenceToIntArray(PyObject* obj, bool zeroTerminated) +{ + AutoDecRef seq(PySequence_Fast(obj, "Sequence of ints expected")); + if (seq.isNull()) + return 0; + + Py_ssize_t size = PySequence_Fast_GET_SIZE(seq.object()); + int* array = new int[size + (zeroTerminated ? 1 : 0)]; + + for (int i = 0; i < size; i++) { + PyObject* item = PySequence_Fast_GET_ITEM(seq.object(), i); + if (!PyInt_Check(item)) { + PyErr_SetString(PyExc_TypeError, "Sequence of ints expected"); + delete[] array; + return 0; + } else { + array[i] = PyInt_AsLong(item); + } + } + + if (zeroTerminated) + array[size] = 0; + + return array; +} + + +int warning(PyObject* category, int stacklevel, const char* format, ...) +{ + va_list args; + va_start(args, format); +#if _WIN32 + va_list args2 = args; +#else + va_list args2; + va_copy(args2, args); +#endif + + // check the necessary memory + int size = vsnprintf(NULL, 0, format, args) + 1; + char* message = new char[size]; + int result = 0; + if (message) { + // format the message + vsnprintf(message, size, format, args2); + result = PyErr_WarnEx(category, message, stacklevel); + delete [] message; + } + va_end(args2); + va_end(args); + return result; +} + +} // namespace Shiboken diff --git a/sources/shiboken2/libshiboken/helper.h b/sources/shiboken2/libshiboken/helper.h new file mode 100644 index 0000000..b215142 --- /dev/null +++ b/sources/shiboken2/libshiboken/helper.h @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef HELPER_H +#define HELPER_H + +#include "sbkpython.h" +#include "shibokenmacros.h" +#include "autodecref.h" + +#define SBK_UNUSED(x) (void)x; + +namespace Shiboken +{ + +/** +* It transforms a python sequence into two C variables, argc and argv. +* This function tries to find the application (script) name and put it into argv[0], if +* the application name can't be guessed, defaultAppName will be used. +* +* No memory is allocated is an error occur. +* +* \note argc must be a valid address. +* \note The argv array is allocated using new operator and each item is allocated using malloc. +* \returns True on sucess, false otherwise. +*/ +LIBSHIBOKEN_API bool listToArgcArgv(PyObject* argList, int* argc, char*** argv, const char* defaultAppName = 0); + +/** + * Convert a python sequence into a heap-allocated array of ints. + * + * \returns The newly allocated array or NULL in case of error or empty sequence. Check with PyErr_Occurred + * if it was successfull. + */ +LIBSHIBOKEN_API int* sequenceToIntArray(PyObject* obj, bool zeroTerminated = false); + +/** + * Creates and automatically deallocates C++ arrays. + */ +template +class AutoArrayPointer +{ + public: + AutoArrayPointer(int size) { data = new T[size]; } + T& operator[](int pos) { return data[pos]; } + operator T*() const { return data; } + ~AutoArrayPointer() { delete[] data; } + private: + T* data; +}; + +/** + * An utility function used to call PyErr_WarnEx with a formatted message. + */ +LIBSHIBOKEN_API int warning(PyObject* category, int stacklevel, const char* format, ...); + +} // namespace Shiboken + +#endif // HELPER_H diff --git a/sources/shiboken2/libshiboken/pep384_issue33738.cpp b/sources/shiboken2/libshiboken/pep384_issue33738.cpp new file mode 100644 index 0000000..ee08543 --- /dev/null +++ b/sources/shiboken2/libshiboken/pep384_issue33738.cpp @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// There is a bug in Python 3.6 that turned the Index_Check function +// into a macro without taking care of the limited API. +// This leads to the single problem that we don't have +// access to PyLong_Type's nb_index field which is no heap type. +// We cannot easily create this function by inheritance since it is +// not inherited. +// +// Simple solution: Create the structure and write such a function. +// Long term: Submit a patch to python.org . + +// Update: I did the long-term solution for python 3.7 in issue 33738. + +typedef struct { + /* Number implementations must check *both* + arguments for proper type and implement the necessary conversions + in the slot functions themselves. */ + + binaryfunc nb_add; + binaryfunc nb_subtract; + binaryfunc nb_multiply; + binaryfunc nb_remainder; + binaryfunc nb_divmod; + ternaryfunc nb_power; + unaryfunc nb_negative; + unaryfunc nb_positive; + unaryfunc nb_absolute; + inquiry nb_bool; + unaryfunc nb_invert; + binaryfunc nb_lshift; + binaryfunc nb_rshift; + binaryfunc nb_and; + binaryfunc nb_xor; + binaryfunc nb_or; + unaryfunc nb_int; + void *nb_reserved; /* the slot formerly known as nb_long */ + unaryfunc nb_float; + + binaryfunc nb_inplace_add; + binaryfunc nb_inplace_subtract; + binaryfunc nb_inplace_multiply; + binaryfunc nb_inplace_remainder; + ternaryfunc nb_inplace_power; + binaryfunc nb_inplace_lshift; + binaryfunc nb_inplace_rshift; + binaryfunc nb_inplace_and; + binaryfunc nb_inplace_xor; + binaryfunc nb_inplace_or; + + binaryfunc nb_floor_divide; + binaryfunc nb_true_divide; + binaryfunc nb_inplace_floor_divide; + binaryfunc nb_inplace_true_divide; + + unaryfunc nb_index; + + binaryfunc nb_matrix_multiply; + binaryfunc nb_inplace_matrix_multiply; +} PyNumberMethods; + +// temporary structure until we have a generator for the offsets +typedef struct _oldtypeobject { + PyVarObject ob_base; + void *X01; // const char *tp_name; + void *X02; // Py_ssize_t tp_basicsize; + void *X03; // Py_ssize_t tp_itemsize; + void *X04; // destructor tp_dealloc; + void *X05; // printfunc tp_print; + void *X06; // getattrfunc tp_getattr; + void *X07; // setattrfunc tp_setattr; + void *X08; // PyAsyncMethods *tp_as_async; + void *X09; // reprfunc tp_repr; + PyNumberMethods *tp_as_number; + +} PyOldTypeObject; + +int PyIndex_Check(PyObject *obj) +{ + PyOldTypeObject *type = reinterpret_cast(Py_TYPE(obj)); + return type->tp_as_number != NULL && + type->tp_as_number->nb_index != NULL; +} + diff --git a/sources/shiboken2/libshiboken/pep384impl.cpp b/sources/shiboken2/libshiboken/pep384impl.cpp new file mode 100644 index 0000000..25a3b62 --- /dev/null +++ b/sources/shiboken2/libshiboken/pep384impl.cpp @@ -0,0 +1,635 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "pep384impl.h" +#include + +extern "C" +{ + +/* + * The documentation is located in pep384impl_doc.rst + */ + +/***************************************************************************** + * + * Support for object.h + * + */ + +/* + * Here is the verification code for PyTypeObject. + * We create a type object and check if its fields + * appear at the right offsets. + */ + +#define make_dummy_int(x) (x * sizeof(void*)) +#define make_dummy(x) (reinterpret_cast(make_dummy_int(x))) + +#ifdef Py_LIMITED_API +datetime_struc *PyDateTimeAPI = NULL; +#endif + +static PyObject * +dummy_func(PyObject *self, PyObject *args) +{ + Py_RETURN_NONE; +} + +static struct PyMethodDef probe_methoddef[] = { + {"dummy", dummy_func, METH_NOARGS}, + {0} +}; + +#define probe_tp_call make_dummy(1) +#define probe_tp_str make_dummy(2) +#define probe_tp_traverse make_dummy(3) +#define probe_tp_clear make_dummy(4) +#define probe_tp_methods probe_methoddef +#define probe_tp_descr_get make_dummy(6) +#define probe_tp_init make_dummy(7) +#define probe_tp_alloc make_dummy(8) +#define probe_tp_new make_dummy(9) +#define probe_tp_free make_dummy(10) +#define probe_tp_is_gc make_dummy(11) + +#define probe_tp_name "type.probe" +#define probe_tp_basicsize make_dummy_int(42) + +static PyType_Slot typeprobe_slots[] = { + {Py_tp_call, probe_tp_call}, + {Py_tp_str, probe_tp_str}, + {Py_tp_traverse, probe_tp_traverse}, + {Py_tp_clear, probe_tp_clear}, + {Py_tp_methods, probe_tp_methods}, + {Py_tp_descr_get, probe_tp_descr_get}, + {Py_tp_init, probe_tp_init}, + {Py_tp_alloc, probe_tp_alloc}, + {Py_tp_new, probe_tp_new}, + {Py_tp_free, probe_tp_free}, + {Py_tp_is_gc, probe_tp_is_gc}, + {0, 0} +}; +static PyType_Spec typeprobe_spec = { + probe_tp_name, + probe_tp_basicsize, + 0, + Py_TPFLAGS_DEFAULT, + typeprobe_slots, +}; + +static void +check_PyTypeObject_valid(void) +{ + PyObject *obtype = reinterpret_cast(&PyType_Type); + PyTypeObject *probe_tp_base = reinterpret_cast( + PyObject_GetAttrString(obtype, "__base__")); + PyObject *probe_tp_bases = PyObject_GetAttrString(obtype, "__bases__"); + PyTypeObject *check = reinterpret_cast( + PyType_FromSpecWithBases(&typeprobe_spec, probe_tp_bases)); + PyTypeObject *typetype = reinterpret_cast(obtype); + PyObject *w = PyObject_GetAttrString(obtype, "__weakrefoffset__"); + long probe_tp_weakrefoffset = PyLong_AsLong(w); + PyObject *d = PyObject_GetAttrString(obtype, "__dictoffset__"); + long probe_tp_dictoffset = PyLong_AsLong(d); + PyObject *probe_tp_mro = PyObject_GetAttrString(obtype, "__mro__"); + if (false + || probe_tp_name != check->tp_name + || probe_tp_basicsize != check->tp_basicsize + || probe_tp_call != check->tp_call + || probe_tp_str != check->tp_str + || probe_tp_traverse != check->tp_traverse + || probe_tp_clear != check->tp_clear + || probe_tp_weakrefoffset != typetype->tp_weaklistoffset + || probe_tp_methods != check->tp_methods + || probe_tp_base != typetype->tp_base + || !PyDict_Check(check->tp_dict) + || !PyDict_GetItemString(check->tp_dict, "dummy") + || probe_tp_descr_get != check->tp_descr_get + || probe_tp_dictoffset != typetype->tp_dictoffset + || probe_tp_init != check->tp_init + || probe_tp_alloc != check->tp_alloc + || probe_tp_new != check->tp_new + || probe_tp_free != check->tp_free + || probe_tp_is_gc != check->tp_is_gc + || probe_tp_bases != typetype->tp_bases + || probe_tp_mro != typetype->tp_mro) + Py_FatalError("The structure of type objects has changed!"); + Py_DECREF(check); + Py_DECREF(probe_tp_base); + Py_DECREF(w); + Py_DECREF(d); + Py_DECREF(probe_tp_bases); + Py_DECREF(probe_tp_mro); +} + + +#ifdef Py_LIMITED_API + +#if PY_VERSION_HEX < PY_ISSUE33738_SOLVED +#include "pep384_issue33738.cpp" +#endif + +/***************************************************************************** + * + * Support for unicodeobject.h + * + */ + +char * +_PepUnicode_AsString(PyObject *str) +{ + /* + * We need to keep the string alive but cannot borrow the Python object. + * Ugly easy way out: We re-code as an interned bytes string. This + * produces a pseudo-leak as long as there are new strings. + * Typically, this function is used for name strings, and the dict size + * will not grow so much. + */ +#define STRINGIFY(x) #x +#define TOSTRING(x) STRINGIFY(x) +#define AT __FILE__ ":" TOSTRING(__LINE__) + + static PyObject *cstring_dict = NULL; + if (cstring_dict == NULL) { + cstring_dict = PyDict_New(); + if (cstring_dict == NULL) + Py_FatalError("Error in " AT); + } + PyObject *bytesStr = PyUnicode_AsEncodedString(str, "utf8", NULL); + PyObject *entry = PyDict_GetItem(cstring_dict, bytesStr); + if (entry == NULL) { + int e = PyDict_SetItem(cstring_dict, bytesStr, bytesStr); + if (e != 0) + Py_FatalError("Error in " AT); + entry = bytesStr; + } + else + Py_DECREF(bytesStr); + return PyBytes_AsString(entry); +} + +/***************************************************************************** + * + * Support for longobject.h + * + */ + +/* + * This is the original Python function _PyLong_AsInt() from longobject.c . + * We define it here because we are not allowed to use the function + * from Python with an underscore. + */ + +/* Get a C int from an int object or any object that has an __int__ + method. Return -1 and set an error if overflow occurs. */ + +int +_PepLong_AsInt(PyObject *obj) +{ + int overflow; + long result = PyLong_AsLongAndOverflow(obj, &overflow); + if (overflow || result > INT_MAX || result < INT_MIN) { + /* XXX: could be cute and give a different + message for overflow == -1 */ + PyErr_SetString(PyExc_OverflowError, + "Python int too large to convert to C int"); + return -1; + } + return (int)result; +} + +/***************************************************************************** + * + * Support for pydebug.h + * + */ +static PyObject *sys_flags = NULL; + +int +Pep_GetFlag(const char *name) +{ + static int initialized = 0; + int ret = -1; + + if (!initialized) { + sys_flags = PySys_GetObject("flags"); + // func gives no error if NULL is returned and does not incref. + Py_XINCREF(sys_flags); + initialized = 1; + } + if (sys_flags != NULL) { + PyObject *ob_ret = PyObject_GetAttrString(sys_flags, name); + if (ob_ret != NULL) { + long long_ret = PyLong_AsLong(ob_ret); + Py_DECREF(ob_ret); + ret = (int) long_ret; + } + } + return ret; +} + +int +Pep_GetVerboseFlag() +{ + static int initialized = 0; + static int verbose_flag = -1; + + if (!initialized) { + verbose_flag = Pep_GetFlag("verbose"); + if (verbose_flag != -1) + initialized = 1; + } + return verbose_flag; +} + +/***************************************************************************** + * + * Support for code.h + * + */ + +int +PepCode_Get(PyCodeObject *co, const char *name) +{ + PyObject *ob = (PyObject *)co; + PyObject *ob_ret; + int ret = -1; + + ob_ret = PyObject_GetAttrString(ob, name); + if (ob_ret != NULL) { + long long_ret = PyLong_AsLong(ob_ret); + Py_DECREF(ob_ret); + ret = (int) long_ret; + } + return ret; +} + +/***************************************************************************** + * + * Support for datetime.h + * + */ + +static PyTypeObject *dt_getCheck(const char *name) +{ + PyObject *op = PyObject_GetAttrString(PyDateTimeAPI->module, name); + if (op == NULL) { + fprintf(stderr, "datetime.%s not found\n", name); + Py_FatalError("aborting"); + } + return (PyTypeObject *)op; +} + +// init_DateTime is called earlier than our module init. +// We use the provided PyDateTime_IMPORT machinery. +datetime_struc * +init_DateTime(void) +{ + static int initialized = 0; + if (!initialized) { + PyDateTimeAPI = (datetime_struc *)malloc(sizeof(datetime_struc)); + if (PyDateTimeAPI == NULL) + Py_FatalError("PyDateTimeAPI malloc error, aborting"); + PyDateTimeAPI->module = PyImport_ImportModule("datetime"); + if (PyDateTimeAPI->module == NULL) + Py_FatalError("datetime module not found, aborting"); + PyDateTimeAPI->DateType = dt_getCheck("date"); + PyDateTimeAPI->DateTimeType = dt_getCheck("datetime"); + PyDateTimeAPI->TimeType = dt_getCheck("time"); + PyDateTimeAPI->DeltaType = dt_getCheck("timedelta"); + PyDateTimeAPI->TZInfoType = dt_getCheck("tzinfo"); + initialized = 1; + } + return PyDateTimeAPI; +} + +int +PyDateTime_Get(PyObject *ob, const char *name) +{ + PyObject *ob_ret; + int ret = -1; + + ob_ret = PyObject_GetAttrString(ob, name); + if (ob_ret != NULL) { + long long_ret = PyLong_AsLong(ob_ret); + Py_DECREF(ob_ret); + ret = (int) long_ret; + } + return ret; +} + +PyObject * +PyDate_FromDate(int year, int month, int day) +{ + return PyObject_CallFunction((PyObject *)PyDateTimeAPI->DateType, + (char *)"(iii)", year, month, day); +} + +PyObject * +PyDateTime_FromDateAndTime(int year, int month, int day, + int hour, int min, int sec, int usec) +{ + return PyObject_CallFunction((PyObject *)PyDateTimeAPI->DateTimeType, + (char *)"(iiiiiii)", year, month, day, + hour, min, sec, usec); +} + +PyObject * +PyTime_FromTime(int hour, int min, int sec, int usec) +{ + return PyObject_CallFunction((PyObject *)PyDateTimeAPI->TimeType, + (char *)"(iiii)", hour, min, sec, usec); +} + +/***************************************************************************** + * + * Support for pythonrun.h + * + */ + +// Flags are ignored in these simple helpers. +PyObject * +PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals) +{ + PyObject *code = Py_CompileString(str, "pyscript", start); + PyObject *ret = NULL; + + if (code != NULL) { + ret = PyEval_EvalCode(code, globals, locals); + } + Py_XDECREF(code); + return ret; +} + +// This is only a simple local helper that returns a computed variable. +static PyObject * +PepRun_GetResult(const char *command, const char *resvar) +{ + PyObject *d, *v, *res; + + d = PyDict_New(); + if (d == NULL || PyDict_SetItemString(d, "__builtins__", + PyEval_GetBuiltins()) < 0) + return NULL; + v = PyRun_String(command, Py_file_input, d, d); + res = v ? PyDict_GetItemString(d, resvar) : NULL; + Py_XDECREF(v); + Py_DECREF(d); + return res; +} + +/***************************************************************************** + * + * Support for classobject.h + * + */ + +PyTypeObject *PepMethod_TypePtr = NULL; + +static PyTypeObject *getMethodType(void) +{ + static const char prog[] = + "class _C:\n" + " def _m(self): pass\n" + "MethodType = type(_C()._m)\n"; + return (PyTypeObject *) PepRun_GetResult(prog, "MethodType"); +} + +// We have no access to PyMethod_New and must call types.MethodType, instead. +PyObject * +PyMethod_New(PyObject *func, PyObject *self) +{ + return PyObject_CallFunction((PyObject *)PepMethod_TypePtr, + (char *)"(OO)", func, self); +} + +PyObject * +PyMethod_Function(PyObject *im) +{ + PyObject *ret = PyObject_GetAttrString(im, "__func__"); + + // We have to return a borrowed reference. + Py_DECREF(ret); + return ret; +} + +PyObject * +PyMethod_Self(PyObject *im) +{ + PyObject *ret = PyObject_GetAttrString(im, "__self__"); + + // We have to return a borrowed reference. + // If we don't obey that here, then we get a test error! + Py_DECREF(ret); + return ret; +} + +/***************************************************************************** + * + * Support for funcobject.h + * + */ + +PyObject * +PepFunction_Get(PyObject *ob, const char *name) +{ + PyObject *ret; + + // We have to return a borrowed reference. + ret = PyObject_GetAttrString(ob, name); + Py_XDECREF(ret); + return ret; +} + +// This became necessary after Windows was activated. + +PyTypeObject *PepFunction_TypePtr = NULL; + +static PyTypeObject *getFunctionType(void) +{ + static const char prog[] = + "from types import FunctionType\n"; + return (PyTypeObject *) PepRun_GetResult(prog, "FunctionType"); +} + +/***************************************************************************** + * + * Extra support for signature.cpp + * + */ + +PyTypeObject *PepStaticMethod_TypePtr = NULL; + +static PyTypeObject *getStaticMethodType(void) +{ + static const char prog[] = + "StaticMethodType = type(str.__dict__['maketrans'])\n"; + return (PyTypeObject *) PepRun_GetResult(prog, "StaticMethodType"); +} + +#endif // Py_LIMITED_API + +/***************************************************************************** + * + * Common newly needed functions + * + */ + +// The introduction of heaptypes converted many type names to the +// dotted form, since PyType_FromSpec uses it to compute the module +// name. This function reverts this effect. +const char * +PepType_GetNameStr(PyTypeObject *type) +{ + const char *ret = type->tp_name; + const char *nodots = strrchr(ret, '.'); + if (nodots) + ret = nodots + 1; + return ret; +} + +/***************************************************************************** + * + * Extra support for name mangling + * + */ + +#ifdef Py_LIMITED_API +// We keep these definitions local, because they don't work in Python 2. +#define PyUnicode_GET_LENGTH(op) PyUnicode_GetLength((PyObject *)(op)) +#define PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar((PyObject *)(u), (i)) +#endif + +PyObject * +_Pep_PrivateMangle(PyObject *self, PyObject *name) +{ + /* + * Name mangling: __private becomes _classname__private. + * This function is modelled after _Py_Mangle, but is optimized + * a little for our purpose. + */ +#if PY_VERSION_HEX < 0X03000000 + const char *namestr = PyString_AsString(name); + if (namestr == NULL || namestr[0] != '_' || namestr[1] != '_') { + Py_INCREF(name); + return name; + } + size_t nlen = strlen(namestr); + /* Don't mangle __id__ or names with dots. */ + if ((namestr[nlen-1] == '_' && namestr[nlen-2] == '_') + || strchr(namestr, '.')) { + Py_INCREF(name); + return name; + } +#else + if (PyUnicode_READ_CHAR(name, 0) != '_' || + PyUnicode_READ_CHAR(name, 1) != '_') { + Py_INCREF(name); + return name; + } + size_t nlen = PyUnicode_GET_LENGTH(name); + /* Don't mangle __id__ or names with dots. */ + if ((PyUnicode_READ_CHAR(name, nlen-1) == '_' && + PyUnicode_READ_CHAR(name, nlen-2) == '_') || + PyUnicode_FindChar(name, '.', 0, nlen, 1) != -1) { + Py_INCREF(name); + return name; + } +#endif + Shiboken::AutoDecRef privateobj(PyObject_GetAttrString( + reinterpret_cast(Py_TYPE(self)), "__name__")); +#ifndef Py_LIMITED_API + return _Py_Mangle(privateobj, name); +#else + // For some reason, _Py_Mangle is not in the Limited API. Why? + size_t plen = PyUnicode_GET_LENGTH(privateobj); + /* Strip leading underscores from class name */ + size_t ipriv = 0; + while (PyUnicode_READ_CHAR(privateobj, ipriv) == '_') + ipriv++; + if (ipriv == plen) { + Py_INCREF(name); + return name; /* Don't mangle if class is just underscores */ + } + plen -= ipriv; + + if (plen + nlen >= PY_SSIZE_T_MAX - 1) { + PyErr_SetString(PyExc_OverflowError, + "private identifier too large to be mangled"); + return NULL; + } + size_t const amount = ipriv + 1 + plen + nlen; + size_t const big_stack = 1000; + wchar_t bigbuf[big_stack]; + wchar_t *resbuf = amount <= big_stack ? bigbuf : (wchar_t *)malloc(sizeof(wchar_t) * amount); + if (!resbuf) + return 0; + /* ident = "_" + priv[ipriv:] + ident # i.e. 1+plen+nlen bytes */ + resbuf[0] = '_'; + if (PyUnicode_AsWideChar(privateobj, resbuf + 1, ipriv + plen) < 0) + return 0; + if (PyUnicode_AsWideChar(name, resbuf + ipriv + plen + 1, nlen) < 0) + return 0; + PyObject *result = PyUnicode_FromWideChar(resbuf + ipriv, 1 + plen + nlen); + if (amount > big_stack) + free(resbuf); + return result; +#endif // Py_LIMITED_API +} + +/***************************************************************************** + * + * Module Initialization + * + */ + +void +Pep384_Init() +{ + check_PyTypeObject_valid(); +#ifdef Py_LIMITED_API + Pep_GetVerboseFlag(); + PepMethod_TypePtr = getMethodType(); + PepFunction_TypePtr = getFunctionType(); + PepStaticMethod_TypePtr = getStaticMethodType(); +#endif +} + +} // extern "C" diff --git a/sources/shiboken2/libshiboken/pep384impl.h b/sources/shiboken2/libshiboken/pep384impl.h new file mode 100644 index 0000000..b566a62 --- /dev/null +++ b/sources/shiboken2/libshiboken/pep384impl.h @@ -0,0 +1,484 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PEP384IMPL_H +#define PEP384IMPL_H + +#include "sbkpython.h" + +extern "C" +{ + +/***************************************************************************** + * + * RESOLVED: memoryobject.h + * + */ + +// Extracted into bufferprocs27.h +#ifdef Py_LIMITED_API +#include "bufferprocs_py37.h" +#endif + +/***************************************************************************** + * + * RESOLVED: object.h + * + */ +#ifdef Py_LIMITED_API +// Why the hell is this useful debugging function not allowed? +LIBSHIBOKEN_API void _PyObject_Dump(PyObject *); +#endif + +/* + * There are a few structures that are needed, but cannot be used without + * breaking the API. We use some heuristics to get those fields anyway + * and validate that we really found them, see pep384impl.cpp . + */ + +#ifdef Py_LIMITED_API + +/* + * These are the type object fields that we use. + * We will verify that they never change. + * The unused fields are intentionally named as "void *Xnn" because + * the chance is smaller to forget to validate a field. + * When we need more fields, we replace it back and add it to the + * validation. + */ +typedef struct _typeobject { + PyVarObject ob_base; + const char *tp_name; + Py_ssize_t tp_basicsize; + void *X03; // Py_ssize_t tp_itemsize; + void *X04; // destructor tp_dealloc; + void *X05; // printfunc tp_print; + void *X06; // getattrfunc tp_getattr; + void *X07; // setattrfunc tp_setattr; + void *X08; // PyAsyncMethods *tp_as_async; + void *X09; // reprfunc tp_repr; + void *X10; // PyNumberMethods *tp_as_number; + void *X11; // PySequenceMethods *tp_as_sequence; + void *X12; // PyMappingMethods *tp_as_mapping; + void *X13; // hashfunc tp_hash; + ternaryfunc tp_call; + reprfunc tp_str; + void *X16; // getattrofunc tp_getattro; + void *X17; // setattrofunc tp_setattro; + void *X18; // PyBufferProcs *tp_as_buffer; + void *X19; // unsigned long tp_flags; + void *X20; // const char *tp_doc; + traverseproc tp_traverse; + inquiry tp_clear; + void *X23; // richcmpfunc tp_richcompare; + Py_ssize_t tp_weaklistoffset; + void *X25; // getiterfunc tp_iter; + void *X26; // iternextfunc tp_iternext; + struct PyMethodDef *tp_methods; + void *X28; // struct PyMemberDef *tp_members; + void *X29; // struct PyGetSetDef *tp_getset; + struct _typeobject *tp_base; + PyObject *tp_dict; + descrgetfunc tp_descr_get; + void *X33; // descrsetfunc tp_descr_set; + Py_ssize_t tp_dictoffset; + initproc tp_init; + allocfunc tp_alloc; + newfunc tp_new; + freefunc tp_free; + inquiry tp_is_gc; /* For PyObject_IS_GC */ + PyObject *tp_bases; + PyObject *tp_mro; /* method resolution order */ + +} PyTypeObject; + +// This was a macro error in the limited API from the beginning. +// It was fixed in Python master, but did make it only in Python 3.8 . +#define PY_ISSUE33738_SOLVED 0x03080000 +#if PY_VERSION_HEX < PY_ISSUE33738_SOLVED +#undef PyIndex_Check +LIBSHIBOKEN_API int PyIndex_Check(PyObject *obj); +#endif + +#endif // Py_LIMITED_API + +struct SbkObjectTypePrivate; +struct PySideQFlagsTypePrivate; +struct _SbkGenericTypePrivate; + +#define PepHeapType_SIZE \ + (reinterpret_cast(&PyType_Type)->tp_basicsize) + +#define _genericTypeExtender(etype) \ + (reinterpret_cast(etype) + PepHeapType_SIZE) + +#define PepType_SOTP(etype) \ + (*reinterpret_cast(_genericTypeExtender(etype))) + +#define PepType_SETP(etype) \ + (reinterpret_cast(_genericTypeExtender(etype))) + +#define PepType_PFTP(etype) \ + (reinterpret_cast(_genericTypeExtender(etype))) + +#define PepType_SGTP(etype) \ + (reinterpret_cast<_SbkGenericTypePrivate *>(_genericTypeExtender(etype))) + +// functions used everywhere +LIBSHIBOKEN_API const char *PepType_GetNameStr(PyTypeObject *type); + +/***************************************************************************** + * + * RESOLVED: longobject.h + * + */ +#ifdef Py_LIMITED_API +LIBSHIBOKEN_API int _PepLong_AsInt(PyObject *); +#else +#define _PepLong_AsInt _PyLong_AsInt +#endif + +/***************************************************************************** + * + * RESOLVED: pydebug.h + * + */ +#ifdef Py_LIMITED_API +/* + * We have no direct access to Py_VerboseFlag because debugging is not + * supported. The python developers are partially a bit too rigorous. + * Instead, we compute the value and use a function call macro. + * Was before: extern LIBSHIBOKEN_API int Py_VerboseFlag; + */ +LIBSHIBOKEN_API int Pep_GetFlag(const char *name); +LIBSHIBOKEN_API int Pep_GetVerboseFlag(void); +#define Py_VerboseFlag Pep_GetVerboseFlag() +#endif + +/***************************************************************************** + * + * RESOLVED: unicodeobject.h + * + */ +#ifdef Py_LIMITED_API + +LIBSHIBOKEN_API char *_PepUnicode_AsString(PyObject *); + +#define PyUnicode_GET_SIZE(op) PyUnicode_GetSize((PyObject *)(op)) + +#else +#define _PepUnicode_AsString PyUnicode_AsUTF8 +#endif + +/***************************************************************************** + * + * RESOLVED: bytesobject.h + * + */ +#ifdef Py_LIMITED_API +#define PyBytes_AS_STRING(op) PyBytes_AsString(op) +#define PyBytes_GET_SIZE(op) PyBytes_Size(op) +#endif + +/***************************************************************************** + * + * RESOLVED: floatobject.h + * + */ +#ifdef Py_LIMITED_API +#define PyFloat_AS_DOUBLE(op) PyFloat_AsDouble(op) +#endif + +/***************************************************************************** + * + * RESOLVED: tupleobject.h + * + */ +#ifdef Py_LIMITED_API +#define PyTuple_GET_ITEM(op, i) PyTuple_GetItem((PyObject *)op, i) +#define PyTuple_SET_ITEM(op, i, v) PyTuple_SetItem(op, i, v) +#define PyTuple_GET_SIZE(op) PyTuple_Size((PyObject *)op) +#endif + +/***************************************************************************** + * + * RESOLVED: listobject.h + * + */ +#ifdef Py_LIMITED_API +#define PyList_GET_ITEM(op, i) PyList_GetItem(op, i) +#define PyList_SET_ITEM(op, i, v) PyList_SetItem(op, i, v) +#define PyList_GET_SIZE(op) PyList_Size(op) +#endif + +/***************************************************************************** + * + * RESOLVED: methodobject.h + * + */ + +#ifdef Py_LIMITED_API + +typedef struct _pycfunc PyCFunctionObject; +#define PyCFunction_GET_FUNCTION(func) PyCFunction_GetFunction((PyObject *)func) +#define PyCFunction_GET_SELF(func) PyCFunction_GetSelf((PyObject *)func) +#define PyCFunction_GET_FLAGS(func) PyCFunction_GetFlags((PyObject *)func) +#define PepCFunction_GET_NAMESTR(func) \ + _PepUnicode_AsString(PyObject_GetAttrString((PyObject *)func, "__name__")) +#else +#define PepCFunction_GET_NAMESTR(func) ((func)->m_ml->ml_name) +#endif + +/***************************************************************************** + * + * RESOLVED: pythonrun.h + * + */ +#ifdef Py_LIMITED_API +LIBSHIBOKEN_API PyObject *PyRun_String(const char *, int, PyObject *, PyObject *); +#endif + +/***************************************************************************** + * + * RESOLVED: abstract.h + * + */ +#ifdef Py_LIMITED_API + +// This definition breaks the limited API a little, because it re-enables the +// buffer functions. +// But this is no problem as we check it's validity for every version. + +#define PYTHON_BUFFER_VERSION_COMPATIBLE (PY_VERSION_HEX >= 0x03030000 && \ + PY_VERSION_HEX < 0X0307FFFF) +#if !PYTHON_BUFFER_VERSION_COMPATIBLE +# error Please check the buffer compatibility for this python version! +#endif + +typedef struct { + getbufferproc bf_getbuffer; + releasebufferproc bf_releasebuffer; +} PyBufferProcs; + +typedef struct _Pepbuffertype { + PyVarObject ob_base; + void *skip[17]; + PyBufferProcs *tp_as_buffer; +} PepBufferType; + +#define PepType_AS_BUFFER(type) \ + reinterpret_cast(type)->tp_as_buffer + +#define PyObject_CheckBuffer(obj) \ + ((PepType_AS_BUFFER(Py_TYPE(obj)) != NULL) && \ + (PepType_AS_BUFFER(Py_TYPE(obj))->bf_getbuffer != NULL)) + +LIBSHIBOKEN_API int PyObject_GetBuffer(PyObject *ob, Pep_buffer *view, int flags); +LIBSHIBOKEN_API void PyBuffer_Release(Pep_buffer *view); + +#else + +#define Pep_buffer Py_buffer + +#endif /* Py_LIMITED_API */ + +/***************************************************************************** + * + * RESOLVED: funcobject.h + * + */ +#ifdef Py_LIMITED_API +typedef struct _func PyFunctionObject; + +extern LIBSHIBOKEN_API PyTypeObject *PepFunction_TypePtr; +LIBSHIBOKEN_API PyObject *PepFunction_Get(PyObject *, const char *); + +#define PyFunction_Check(op) (Py_TYPE(op) == PepFunction_TypePtr) +#define PyFunction_GET_CODE(func) PyFunction_GetCode(func) + +#define PyFunction_GetCode(func) PepFunction_Get((PyObject *)func, "__code__") +#define PepFunction_GetName(func) PepFunction_Get((PyObject *)func, "__name__") +#else +#define PepFunction_GetName(func) (((PyFunctionObject *)func)->func_name) +#endif + +/***************************************************************************** + * + * RESOLVED: classobject.h + * + */ +#ifdef Py_LIMITED_API + +typedef struct _meth PyMethodObject; + +extern LIBSHIBOKEN_API PyTypeObject *PepMethod_TypePtr; + +LIBSHIBOKEN_API PyObject *PyMethod_New(PyObject *, PyObject *); +LIBSHIBOKEN_API PyObject *PyMethod_Function(PyObject *); +LIBSHIBOKEN_API PyObject *PyMethod_Self(PyObject *); + +#define PyMethod_Check(op) ((op)->ob_type == PepMethod_TypePtr) + +#define PyMethod_GET_SELF(op) PyMethod_Self(op) +#define PyMethod_GET_FUNCTION(op) PyMethod_Function(op) +#endif + +/***************************************************************************** + * + * RESOLVED: code.h + * + */ +#ifdef Py_LIMITED_API +/* Bytecode object */ + +// we have to grab the code object from python +typedef struct _code PyCodeObject; + +LIBSHIBOKEN_API int PepCode_Get(PyCodeObject *co, const char *name); + +#define PepCode_GET_FLAGS(o) PepCode_Get(o, "co_flags") +#define PepCode_GET_ARGCOUNT(o) PepCode_Get(o, "co_argcount") + +/* Masks for co_flags above */ +#define CO_OPTIMIZED 0x0001 +#define CO_NEWLOCALS 0x0002 +#define CO_VARARGS 0x0004 +#define CO_VARKEYWORDS 0x0008 +#define CO_NESTED 0x0010 +#define CO_GENERATOR 0x0020 +#else +#define PepCode_GET_FLAGS(o) ((o)->co_flags) +#define PepCode_GET_ARGCOUNT(o) ((o)->co_argcount) +#endif + +/***************************************************************************** + * + * RESOLVED: datetime.h + * + */ +#ifdef Py_LIMITED_API + +LIBSHIBOKEN_API int PyDateTime_Get(PyObject *ob, const char *name); + +#define PyDateTime_GetYear(o) PyDateTime_Get(o, "year") +#define PyDateTime_GetMonth(o) PyDateTime_Get(o, "month") +#define PyDateTime_GetDay(o) PyDateTime_Get(o, "day") +#define PyDateTime_GetHour(o) PyDateTime_Get(o, "hour") +#define PyDateTime_GetMinute(o) PyDateTime_Get(o, "minute") +#define PyDateTime_GetSecond(o) PyDateTime_Get(o, "second") +#define PyDateTime_GetMicrosecond(o) PyDateTime_Get(o, "microsecond") +#define PyDateTime_GetFold(o) PyDateTime_Get(o, "fold") + +#define PyDateTime_GET_YEAR(o) PyDateTime_GetYear(o) +#define PyDateTime_GET_MONTH(o) PyDateTime_GetMonth(o) +#define PyDateTime_GET_DAY(o) PyDateTime_GetDay(o) + +#define PyDateTime_DATE_GET_HOUR(o) PyDateTime_GetHour(o) +#define PyDateTime_DATE_GET_MINUTE(o) PyDateTime_GetMinute(o) +#define PyDateTime_DATE_GET_SECOND(o) PyDateTime_GetSecond(o) +#define PyDateTime_DATE_GET_MICROSECOND(o) PyDateTime_GetMicrosecond(o) +#define PyDateTime_DATE_GET_FOLD(o) PyDateTime_GetFold(o) + +#define PyDateTime_TIME_GET_HOUR(o) PyDateTime_GetHour(o) +#define PyDateTime_TIME_GET_MINUTE(o) PyDateTime_GetMinute(o) +#define PyDateTime_TIME_GET_SECOND(o) PyDateTime_GetSecond(o) +#define PyDateTime_TIME_GET_MICROSECOND(o) PyDateTime_GetMicrosecond(o) +#define PyDateTime_TIME_GET_FOLD(o) PyDateTime_GetFold(o) + +/* Define structure slightly similar to C API. */ +typedef struct { + PyObject *module; + /* type objects */ + PyTypeObject *DateType; + PyTypeObject *DateTimeType; + PyTypeObject *TimeType; + PyTypeObject *DeltaType; + PyTypeObject *TZInfoType; +} datetime_struc; + +LIBSHIBOKEN_API datetime_struc *init_DateTime(void); + +#define PyDateTime_IMPORT PyDateTimeAPI = init_DateTime() + +extern LIBSHIBOKEN_API datetime_struc *PyDateTimeAPI; + +#define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType) +#define PyDateTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateTimeType) +#define PyTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TimeType) + +LIBSHIBOKEN_API PyObject *PyDate_FromDate(int year, int month, int day); +LIBSHIBOKEN_API PyObject *PyDateTime_FromDateAndTime( + int year, int month, int day, int hour, int min, int sec, int usec); +LIBSHIBOKEN_API PyObject *PyTime_FromTime( + int hour, int minute, int second, int usecond); + +#endif /* Py_LIMITED_API */ + +/***************************************************************************** + * + * Extra support for name mangling + * + */ + +// PYSIDE-772: This function supports the fix, but is not meant as public. +LIBSHIBOKEN_API PyObject *_Pep_PrivateMangle(PyObject *self, PyObject *name); + +/***************************************************************************** + * + * Extra support for signature.cpp + * + */ + +#ifdef Py_LIMITED_API +extern LIBSHIBOKEN_API PyTypeObject *PepStaticMethod_TypePtr; +#else +#define PepStaticMethod_TypePtr &PyStaticMethod_Type +#endif + +/***************************************************************************** + * + * Module Initialization + * + */ + +LIBSHIBOKEN_API void Pep384_Init(void); + +} // extern "C" + +#endif // PEP384IMPL_H diff --git a/sources/shiboken2/libshiboken/pep384impl_doc.rst b/sources/shiboken2/libshiboken/pep384impl_doc.rst new file mode 100644 index 0000000..9974f73 --- /dev/null +++ b/sources/shiboken2/libshiboken/pep384impl_doc.rst @@ -0,0 +1,701 @@ +**************************************** +The Transition To The Limited Python API +**************************************** + + +Foreword +======== + +Python supports a limited API that restricts access to certain structures. +Besides eliminating whole modules and all functions and macros which names +start with an +underscore, the most drastic restriction is the removal of normal type object +declarations. + +For details about the eliminated modules and functions, please see the +`PEP 384`_ page for reference. + + +.. _`PEP 384`: https://www.python.org/dev/peps/pep-0384/ + + + +Changed Modules +=============== + +All changed module's include files are listed with the changed functions here. +As a general rule, it was tried to keep the changes to a minimum diff. +Macros which are not available were changed to functions with the same name +if possible. Completely removed names ``Py{name}`` were re-implemented as ``Pep{name}``. + + +memoryobject.h +-------------- + +The buffer protocol was completely removed. We redefined all the structures +and methods, because PySide uses that. This is an exception to the limited API +that we have to check ourselves. The code is extracted in bufferprocs_py37.h . +This is related to the following: + + +abstract.h +---------- + +This belongs to the buffer protocol like memoryobject.h . +As replacement for ``Py_buffer`` we defined ``Pep_buffer`` and several other +internal macros. + +The version is checked by hand, and the version number must be updated only +if the implementation does not change. Otherwise, we need to write version +dependent code paths. + +It is questionable if it is worthwhile to continue using the buffer protocol +or if we should try to get rid of ``Pep_buffer``, completely. + + +longobject.h +------------ + +``_PyLong_AsInt`` is not available. We defined a ``_PepLong_AsInt`` function, instead. +Maybe this should be replaced by ``PyLong_AsLong``. + + +pydebug.h +--------- + +We have no direct access to ``Py_VerboseFlag`` because debugging is not +supported. We redefined it as macro ``Py_VerboseFlag`` which calls ``Pep_VerboseFlag``. + + +unicodeobject.h +--------------- + +The macro ``PyUnicode_GET_SIZE`` was redefined to call into ``PyUnicode_GetSize``. +Function ``_PyUnicode_AsString`` is unavailable and was replaced by a macro +that calls ``_PepUnicode_AsString``. The implementation was a bit involved, +and it would be better to change the code and replace this function. + + +bytesobject.h +------------- + +The macros ``PyBytes_AS_STRING`` and ``PyBytes_GET_SIZE`` were redefined to call +the according functions. + + +floatobject.h +------------- + +``PyFloat_AS_DOUBLE`` now calls ``PyFloat_AsDouble``. + + +tupleobject.h +------------- + +``PyTuple_GET_ITEM``, ``PyTuple_SET_ITEM`` and ``PyTuple_GET_SIZE`` were redefined as +function calls. + + +listobject.h +------------ + +``PyList_GET_ITEM``, ``PyList_SET_ITEM`` and ``PyList_GET_SIZE`` were redefined as +function calls. + + +methodobject.h +-------------- + +``PyCFunction_GET_FUNCTION``, ``PyCFunction_GET_SELF`` and ``PyCFunction_GET_FLAGS`` +were redefined as function calls. + +Direct access to the methoddef structure is not available, and we defined +``PepCFunction_GET_NAMESTR`` as accessor for name strings. + + +pythonrun.h +----------- + +The simple function ``PyRun_String`` is not available. It was re-implemented +in a simplified version for the signature module. + + +funcobject.h +------------ + +The definitions of funcobject.h are completely missing, although there +are extra ``#ifdef`` conditional defines inside, too. This suggests that the exclusion +was unintended. + +We therefore redefined ``PyFunctionObject`` as an opaque type. + +The missing macro ``PyFunction_Check`` was defined, and the macro +``PyFunction_GET_CODE`` calls the according function. + +There is no equivalent for function name access, therefore we introduced +``PepFunction_GetName`` either as a function or as a macro. + +*TODO: We should fix funcobject.h* + + +classobject.h +------------- + +Classobject is also completely not imported, instead of defining an opaque type. + +We defined the missing functions ``PyMethod_New``, ``PyMethod_Function`` and +``PyMethod_Self`` and also redefined ``PyMethod_GET_SELF`` and +``PyMethod_GET_FUNCTION`` as calls to these functions. + +*TODO: We should fix classobject.h* + + +code.h +------ + +The whole code.c code is gone, although it may make sense to +define some minimum accessibility. This will be clarified on +`Python-Dev`_. We needed access to code objects and defined the missing +PepCode_GET_FLAGS and PepCode_GET_ARGCOUNT either as function or macro. +We further added the missing flags, although few are used: + +``CO_OPTIMIZED`` ``CO_NEWLOCALS`` ``CO_VARARGS`` ``CO_VARKEYWORDS`` ``CO_NESTED`` +``CO_GENERATOR`` + +*TODO: We should maybe fix code.h* + +.. _`Python-Dev`: https://mail.python.org/mailman/listinfo/python-dev + +datetime.h +---------- + +The DateTime module is explicitly not included in the limited API. +We defined all the needed functions but called them via Python instead +of direct call macros. This has a slight performance impact. + +The performance could be easily improved by providing an interface +that fetches all attributes at once, instead of going through the object +protocol every time. + +The re-defined macros and methods are:: + + PyDateTime_GET_YEAR + PyDateTime_GET_MONTH + PyDateTime_GET_DAY + PyDateTime_DATE_GET_HOUR + PyDateTime_DATE_GET_MINUTE + PyDateTime_DATE_GET_SECOND + PyDateTime_DATE_GET_MICROSECOND + PyDateTime_DATE_GET_FOLD + PyDateTime_TIME_GET_HOUR + PyDateTime_TIME_GET_MINUTE + PyDateTime_TIME_GET_SECOND + PyDateTime_TIME_GET_MICROSECOND + PyDateTime_TIME_GET_FOLD + + PyDate_Check + PyDateTime_Check + PyTime_Check + + PyDate_FromDate + PyDateTime_FromDateAndTime + PyTime_FromTime + +*XXX: We should maybe provide an optimized interface to datetime* + + +object.h +-------- + +The file object.h contains the ``PyTypeObject`` structure, which is supposed +to be completely opaque. All access to types should be done through +``PyType_GetSlot`` calls. Due to bugs and deficiencies in the limited API +implementation, it was not possible to do that. Instead, we have defined +a simplified structure for ``PyTypeObject`` that has only the fields that +are used in PySide. + +We will explain later why and how this was done. Here is the reduced +structure:: + + typedef struct _typeobject { + PyVarObject ob_base; + const char *tp_name; + Py_ssize_t tp_basicsize; + void *X03; // Py_ssize_t tp_itemsize; + void *X04; // destructor tp_dealloc; + void *X05; // printfunc tp_print; + void *X06; // getattrfunc tp_getattr; + void *X07; // setattrfunc tp_setattr; + void *X08; // PyAsyncMethods *tp_as_async; + void *X09; // reprfunc tp_repr; + void *X10; // PyNumberMethods *tp_as_number; + void *X11; // PySequenceMethods *tp_as_sequence; + void *X12; // PyMappingMethods *tp_as_mapping; + void *X13; // hashfunc tp_hash; + ternaryfunc tp_call; + reprfunc tp_str; + void *X16; // getattrofunc tp_getattro; + void *X17; // setattrofunc tp_setattro; + void *X18; // PyBufferProcs *tp_as_buffer; + void *X19; // unsigned long tp_flags; + void *X20; // const char *tp_doc; + traverseproc tp_traverse; + inquiry tp_clear; + void *X23; // richcmpfunc tp_richcompare; + Py_ssize_t tp_weaklistoffset; + void *X25; // getiterfunc tp_iter; + void *X26; // iternextfunc tp_iternext; + struct PyMethodDef *tp_methods; + void *X28; // struct PyMemberDef *tp_members; + void *X29; // struct PyGetSetDef *tp_getset; + struct _typeobject *tp_base; + PyObject *tp_dict; + descrgetfunc tp_descr_get; + void *X33; // descrsetfunc tp_descr_set; + Py_ssize_t tp_dictoffset; + initproc tp_init; + allocfunc tp_alloc; + newfunc tp_new; + freefunc tp_free; + inquiry tp_is_gc; /* For PyObject_IS_GC */ + PyObject *tp_bases; + PyObject *tp_mro; /* method resolution order */ + } PyTypeObject; + +Function ``PyIndex_Check`` had to be defined in an unwanted way due to +a Python issue. See file pep384_issue33738.cpp . + +There are extension structures which have been isolated as special macros that +dynamically compute the right offsets of the extended type structures: + +* ``PepType_SOTP`` for ``SbkObjectTypePrivate`` +* ``PepType_SETP`` for ``SbkEnumTypePrivate`` +* ``PepType_PFTP`` for ``PySideQFlagsTypePrivate`` +* ``PepType_SGTP`` for ``_SbkGenericTypePrivate`` + +How these extension structures are used can best be seen by searching +``PepType_{four}`` in the source. + +Due to the new heaptype interface, the names of certain types contain +now the module name in the ``tp_name`` field. To have a compatible way +to access simple type names as C string, ``PepType_GetNameStr`` has been +written that skips over dotted name parts. + +Finally, the function ``_PyObject_Dump`` was excluded from the limited API. +This is a useful debugging aid that we always want to have available, +so it is added back, again. + + +Using The New Type API +====================== + +After converting everything but the object.h file, we were a little +bit shocked: it suddenly was clear that we would have no more +access to type objects, and even more scary that all types which we +use have to be heap types, only! + +For PySide with its intense use of heap type extensions in various +flavors, the situation looked quite unsolvable. In the end, it was +nicely solved, but it took almost 3.5 months to get that right. + +Before we see how this is done, we will explain the differences +between the APIs and their consequences. + + +The Interface +------------- + +The old type API of Python knows static types and heap types. +Static types are written down as a declaration of a ``PyTypeObject`` +structure with all its fields filled in. Here is for example +the definition of the Python type ``object`` (Python 3.6):: + + PyTypeObject PyBaseObject_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "object", /* tp_name */ + sizeof(PyObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + object_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + object_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)_Py_HashPointer, /* tp_hash */ + 0, /* tp_call */ + object_str, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ + PyDoc_STR("object()\n--\n\nThe most base type"), /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + object_richcompare, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + object_methods, /* tp_methods */ + 0, /* tp_members */ + object_getsets, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + object_init, /* tp_init */ + PyType_GenericAlloc, /* tp_alloc */ + object_new, /* tp_new */ + PyObject_Del, /* tp_free */ + }; + +We can write the same structure in form of a ``PyType_Spec`` structure, +and there is even an incomplete tool *abitype.py* that does this conversion +for us. With a few corrections, the result looks like this:: + + static PyType_Slot PyBaseObject_Type_slots[] = { + {Py_tp_dealloc, (void *)object_dealloc}, + {Py_tp_repr, (void *)object_repr}, + {Py_tp_hash, (void *)_Py_HashPointer}, + {Py_tp_str, (void *)object_str}, + {Py_tp_getattro, (void *)PyObject_GenericGetAttr}, + {Py_tp_setattro, (void *)PyObject_GenericSetAttr}, + {Py_tp_richcompare, (void *)object_richcompare}, + {Py_tp_methods, (void *)object_methods}, + {Py_tp_getset, (void *)object_getsets}, + {Py_tp_init, (void *)object_init}, + {Py_tp_alloc, (void *)PyType_GenericAlloc}, + {Py_tp_new, (void *)object_new}, + {Py_tp_free, (void *)PyObject_Del}, + {0, 0}, + }; + static PyType_Spec PyBaseObject_Type_spec = { + "object", + sizeof(PyObject), + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + PyBaseObject_Type_slots, + }; + +This new structure is almost compatible with the old one, but there +are some subtle differences. + +* The new types are generated in one step + +This seems to be no problem, but it was very much, due to the way the +types were built in PySide. Types were assembled piece by piece, and +finally the ``PyType_Ready`` function was called. + +With the new API, ``PyType_Ready`` is called already at the end of +``PyType_FromSpec``, and that meant that the logic of type creation became +completely turned upside down. + +* The new types are always heaptypes + +With the new type creation functions, it is no longer possible to +create "normal" types. Instead, they all have to be allocated on the +heap and garbage collected. The user should normally not recognize this. +But type creation is more constrained, and you cannot create a subtype +if the ``Py_TPFLAGS_BASETYPE`` is not set. This constraint was already +violated by PySide and needed a quite profound fix. + +* The new types always need a module + +While this is not a problem per se, the above new type spec will not create +a usable new type, but complain with:: + + DeprecationWarning: builtin type object has no __module__ attribute + +But there are more problems: + +* The new types have unexpected defaults + +When fields are empty, you would usually assume that they stay empty. +There are just a few corrections that ``PyType_Ready`` will do to a type. + +But there is the following clause in ``PyType_FromSpec`` that can give you +many headaches:: + + if (type->tp_dealloc == NULL) { + /* It's a heap type, so needs the heap types' dealloc. + subtype_dealloc will call the base type's tp_dealloc, if + necessary. */ + type->tp_dealloc = subtype_dealloc; + } + +So, if you think you have no ``tp_dealloc`` field set, you will unwantedly +get ``subtype_dealloc``, which in the case of PySide always was wrong! + +The way out was to use a dummy function that has no effect other than +being something not NULL. + +* The new types are only partially allocated + +The structures used in ``PyType_FromSpec`` are almost all allocated, +only the name field is static. This is no problem for types which are +statically created once. But if you want to parameterize things and +create multiple types with a single slots and spec definition, the name +field that is used for tp_name must be allocated dynamically. +This is misleading, since all the slots already are copies. + +* The new types don't support special offsets + +The special fields ``tp_weaklistoffset`` and ``tp_dictoffset`` are not supported +by ``PyType_FromSpec``. Unfortunately the documentation does not tell you +if you are allowed to set these fields manually after creating the type or not. +We finally did it and it worked, but we are not sure about correctness. + +See basewrapper.cpp function ``SbkObject_TypeF()`` as the only reference to +these fields in PySide. This single reference is absolutely necessary and +very important, since all derived types invisibly inherit these two fields. + + +Future Versions Of The Limited API +================================== + +As we have seen, the current version of the limited API does a bit of +cheating, because it uses parts of the data structure that should be +an opaque type. At the moment, this works fine because the data is +still way more compatible as it could be. + +But what if this is changed in the future? + +We know that the data structures are stable until Python 3.8 comes out. +Until then, the small bugs and omissions will hopefully all be solved. +Then it will be possible to replace the current small tricks by calls +to ``PyType_GetSlot`` in the way things should be. + +At the very moment when the current assumptions about the data structure +are no longer true, we will rewrite the direct attribute access with +calls to ``PyType_GetSlot``. After that, no more changes will be necessary. + + +Appendix A: The Transition To Simpler Types +=========================================== + +After all code had been converted to the limited API, there was a +remaining problem with the ``PyHeapTypeObject``. + +Why a problem? Well, all the type structures in shiboken use +special extra fields at the end of the heap type object. This +currently enforces extra knowledge at compile time about how large the +heap type object is. In a clean implementation, we would only use +the ``PyTypeObject`` itself and access the fields *behind* the type +by a pointer that is computed at runtime. + + +Restricted PyTypeObject +----------------------- + +Before we are going into details, let us motivate the existence of +the restricted ``PyTypeObject``: + +Originally, we wanted to use ``PyTypeObject`` as an opaque type and +restrict ourselves to only use the access function ``PyType_GetSlot``. +This function allows access to all fields which are supported by +the limited API. + +But this is a restriction, because we get no access to ``tp_dict``, +which we need to support the signature extension. But we can work +around that. + +The real restriction is that ``PyType_GetSlot`` only works for heap +types. This makes the function quite useless, because we have +no access to ``PyType_Type``, which is the most important type ``type`` +in Python. We need that for instance to compute the size of +``PyHeapTypeObject`` dynamically. + +With much effort, it is possible to clone ``PyType_Type`` as a heap +type. But due to a bug in the Pep 384 support, we need +access to the ``nb_index`` field of a normal type. Cloning does not +help because ``PyNumberMethods`` fields are *not* inherited. + +After we realized this dead end, we changed concept and did not +use ``PyType_GetSlot`` at all (except in function ``copyNumberMethods``), +but created a restricted ``PyTypeObject`` with only those fields +defined that are needed in PySide. + +Is this breakage of the limited API? I don't think so. A special +function runs on program startup that checks the correct position +of the fields of ``PyTypeObject``, although a change in those fields is +more than unlikely. +The really crucial thing is to no longer use ``PyHeapTypeObject`` +explicitly because that *does* change its layout over time. + + +Diversification +--------------- + +There were multiple ``Sbk{something}`` structures which all used a "d" field +for their private data. This made it not easy to find the right +fields when switching between objects and types:: + + struct LIBSHIBOKEN_API SbkObject + { + PyObject_HEAD + PyObject *ob_dict; + PyObject *weakreflist; + SbkObjectPrivate *d; + }; + + struct LIBSHIBOKEN_API SbkObjectType + { + PyHeapTypeObject super; + SbkObjectTypePrivate *d; + }; + +The first step was to rename the SbkObjectTypePrivate part from "d" to +"sotp". It was chosen to be short but easy to remember as abbreviation +of "SbkObjectTypePrivate", leading to:: + + struct LIBSHIBOKEN_API SbkObjectType + { + PyHeapTypeObject super; + SbkObjectTypePrivate *sotp; + }; + +After renaming, it was easier to do the following transformations. + + +Abstraction +----------- + +After renaming the type extension pointers to ``sotp``, I replaced +them by function-like macros which did the special access *behind* +the types, instead of those explicit fields. For instance, the +expression:: + + type->sotp->converter + +became:: + + PepType_SOTP(type)->converter + +The macro expansion can be seen here:: + + #define PepHeapType_SIZE \ + (reinterpret_cast(&PyType_Type)->tp_basicsize) + + #define _genericTypeExtender(etype) \ + (reinterpret_cast(etype) + PepHeapType_SIZE) + + #define PepType_SOTP(etype) \ + (*reinterpret_cast(_genericTypeExtender(etype))) + +This looks complicated, but in the end there is only a single new +indirection via ``PyType_Type``, which happens at runtime. This is the +key to fulfil what Pep 384 wants to achieve: *No more version-dependent fields*. + + +Simplification +-------------- + +After all type extension fields were replaced by macro calls, we +could remove the following version dependent re-definition of ``PyHeapTypeObject`` +:: + + typedef struct _pyheaptypeobject { + union { + PyTypeObject ht_type; + void *opaque[PY_HEAPTYPE_SIZE]; + }; + } PyHeapTypeObject; + +, and the version dependent structure:: + + struct LIBSHIBOKEN_API SbkObjectType + { + PyHeapTypeObject super; + SbkObjectTypePrivate *sotp; + }; + +could be replaced by the simplified:: + + struct LIBSHIBOKEN_API SbkObjectType + { + PyTypeObject type; + }; + +which is no longer version-dependent. +Note that we tried to replace the above struct directly by ``PyTypeObject``, +but that was too much. The distinction between ``SbkObjectType`` and +``PyTypeObject`` is still needed. + + +Appendix B: Verification Of PyTypeObject +======================================== + +We have introduced a limited PyTypeObject in the same place +as the original PyTypeObject, and now we need to prove that +we are allowed to do so. + +When using the limited API as intended, then types are completely +opaque, and access is only through ``PyType_FromSpec`` and (from +version 3.5 upwards) through ``PyType_GetSlot``. + +Python then uses all the slot definitions in the type description +and produces a regular heap type object. + + +Unused Information +------------------ + +We know many things about types that are not explicitly said, +but they are inherently clear: + +(a) The basic structure of a type is always the same, regardless + if it is a static type or a heap type. + +(b) types are evolving very slowly, and a field is never replaced + by another field with different semantics. + +Inherent rule (a) gives us the following information: If we calculate +the offsets of the basic fields, then this info is also usable for non-heap +types. + +The validation checks if rule (b) is still valid. + + +How it Works +------------ + +The basic idea of the validation is to produce a new type using +``PyType_FromSpec`` and to see where in the type structure these fields +show up. So we build a ``PyType_Slot`` structure with all the fields we +are using and make sure that these values are all unique in the +type. + +Most fields are not interrogated by ``PyType_FromSpec``, and so we +simply used some numeric value. Some fields are interpreted, like +``tp_members``. This field must really be a ``PyMemberDef``. And there are +``tp_base`` and ``tp_bases`` which have to be type objects and lists +thereof. It was easiest to not produce these fields from scratch +but use them from the ``type`` object ``PyType_Type``. + +Then one would think to write a function that searches the known +values in the opaque type structure. + +But we can do better and use optimistically the observation (b): +We simply use the restricted ``PyTypeObject`` structure and assume that +every field lands exactly where we are awaiting it. + +And that is the whole proof: If we find all the disjoint values at +the places where we expect them, then verification is done. + + +About ``tp_dict`` +----------------- + +One word about the ``tp_dict`` field: This field is a bit special in +the proof, since it does not appear in the spec and cannot easily +be checked by ``type.__dict__`` because that creates a *dictproxy* +object. So how do we prove that is really the right dict? + +We have to create that ``PyMethodDef`` structure anyway, and instead of +leaving it empty, we insert a dummy function. Then we ask the +``tp_dict`` field if it has the awaited object in it, and that's it! + +#EOT diff --git a/sources/shiboken2/libshiboken/python25compat.h b/sources/shiboken2/libshiboken/python25compat.h new file mode 100644 index 0000000..fc25aa3 --- /dev/null +++ b/sources/shiboken2/libshiboken/python25compat.h @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PYTHON25COMPAT_H +#define PYTHON25COMPAT_H +#include "sbkpython.h" +#include + +/* + *The #defines below were taken from Cython-generated code to allow shiboken to be used with python2.5. + * Maybe not all of these defines are useful to us, time will tell which ones are really needed or not. + */ + +#if PY_VERSION_HEX < 0x02060000 +#define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) +#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) +#define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) +#define PyVarObject_HEAD_INIT(type, size) \ + PyObject_HEAD_INIT(type) size, +#define PyType_Modified(t) + +typedef struct { + void *buf; + PyObject *obj; + Py_ssize_t len; + Py_ssize_t itemsize; + int readonly; + int ndim; + char *format; + Py_ssize_t *shape; + Py_ssize_t *strides; + Py_ssize_t *suboffsets; + void *internal; +} Py_buffer; + +#define PyBUF_SIMPLE 0 +#define PyBUF_WRITABLE 0x0001 +#define PyBUF_LOCK 0x0002 +#define PyBUF_FORMAT 0x0004 +#define PyBUF_ND 0x0008 +#define PyBUF_STRIDES (0x0010 | PyBUF_ND) +#define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) +#define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) +#define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) +#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) + +#define PyBytes_Check PyString_Check +#define PyBytes_FromString PyString_FromString +#define PyBytes_FromFormat PyString_FromFormat +#define PyBytes_FromStringAndSize PyString_FromStringAndSize +#define PyBytes_GET_SIZE PyString_GET_SIZE +#define PyBytes_AS_STRING PyString_AS_STRING +#define PyBytes_AsString PyString_AsString +#define PyBytes_Concat PyString_Concat +#define PyBytes_Size PyString_Size + +inline PyObject* PyUnicode_FromString(const char* s) +{ + std::size_t len = std::strlen(s); + return PyUnicode_DecodeUTF8(s, len, 0); +} + +#define PyLong_FromSize_t _PyLong_FromSize_t +#define PyLong_AsSsize_t _PyLong_AsSsize_t + +#endif + +#endif diff --git a/sources/shiboken2/libshiboken/qapp_macro.cpp b/sources/shiboken2/libshiboken/qapp_macro.cpp new file mode 100644 index 0000000..f69d0f9 --- /dev/null +++ b/sources/shiboken2/libshiboken/qapp_macro.cpp @@ -0,0 +1,197 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "basewrapper.h" + +extern "C" +{ + +#include "qapp_macro.h" + +//////////////////////////////////////////////////////////////////////////// +// +// Support for the qApp macro. +// +// qApp is a macro in Qt5. In Python, we simulate that a little by a +// variable that monitors Q*Application.instance(). +// This variable is also able to destroy the app by deleting qApp. +// +static int +qApp_module_index(PyObject *module) +{ + const char *name = PyModule_GetName(module); + int ret = 0; + + if (strcmp(name, "PySide2.QtCore") == 0) + ret = 1; + else if (strcmp(name, "PySide2.QtGui") == 0) + ret = 2; + else if (strcmp(name, "PySide2.QtWidgets") == 0) + ret = 3; + return ret; +} + +#define Py_NONE_TYPE Py_TYPE(Py_None) + +#if PYTHON_IS_PYTHON3 +# define BRACE_OPEN { +# define BRACE_CLOSE } +#else +# define BRACE_OPEN +# define BRACE_CLOSE +#endif + +static SbkObject _Py_ChameleonQAppWrapper_Struct = { + BRACE_OPEN + _PyObject_EXTRA_INIT + 1, Py_NONE_TYPE + BRACE_CLOSE +}; + +static PyObject *qApp_var = NULL; +static PyObject *qApp_content = (PyObject *)&_Py_ChameleonQAppWrapper_Struct; +static PyObject *qApp_moduledicts[5] = {0, 0, 0, 0, 0}; +static int qApp_var_ref = 0; +static int qApp_content_ref = 0; + +static int +reset_qApp_var() +{ + PyObject **mod_ptr; + + for (mod_ptr = qApp_moduledicts; *mod_ptr != NULL; mod_ptr++) { + // We respect whatever the user may have set. + if (PyDict_GetItem(*mod_ptr, qApp_var) == NULL) { + if (PyDict_SetItem(*mod_ptr, qApp_var, qApp_content) < 0) + return -1; + } + } + return 0; +} + +/* + * Note: + * The PYSIDE-585 problem was that shutdown is called one more often + * than Q*Application is created. We could special-case that last + * shutdown or add a refcount, initially, but actually it was easier + * and more intuitive in that context to make the refcount of + * qApp_content equal to the refcount of Py_None. + */ +PyObject * +MakeSingletonQAppWrapper(PyTypeObject *type) +{ + if (type == NULL) + type = Py_NONE_TYPE; + if (!(type == Py_NONE_TYPE || Py_TYPE(qApp_content) == Py_NONE_TYPE)) { + const char *res_name = PepType_GetNameStr(Py_TYPE(qApp_content)); + const char *type_name = PepType_GetNameStr(type); + PyErr_Format(PyExc_RuntimeError, "Please destroy the %s singleton before" + " creating a new %s instance.", res_name, type_name); + return NULL; + } + if (reset_qApp_var() < 0) + return NULL; + // always know the max of the refs + if (Py_REFCNT(qApp_var) > qApp_var_ref) + qApp_var_ref = Py_REFCNT(qApp_var); + if (Py_REFCNT(qApp_content) > qApp_content_ref) + qApp_content_ref = Py_REFCNT(qApp_content); + + if (Py_TYPE(qApp_content) != Py_NONE_TYPE) + Py_REFCNT(qApp_var) = 1; // fuse is armed... + if (type == Py_NONE_TYPE) { + // Debug mode showed that we need to do more than just remove the + // reference. To keep everything in the right order, it is easiest + // to do a full shutdown, using QtCore.__moduleShutdown(). + // restore the "None-state" + PyObject *__moduleShutdown = PyDict_GetItemString(qApp_moduledicts[1], + "__moduleShutdown"); + // PYSIDE-585: It was crucial to update the refcounts *before* + // calling the shutdown. + Py_TYPE(qApp_content) = Py_NONE_TYPE; + Py_REFCNT(qApp_var) = qApp_var_ref; + Py_REFCNT(qApp_content) = Py_REFCNT(Py_None); + if (__moduleShutdown != NULL) + Py_DECREF(PyObject_CallFunction(__moduleShutdown, (char *)"()")); + } + else + (void)PyObject_INIT(qApp_content, type); + Py_INCREF(qApp_content); + return qApp_content; +} + +static int +setup_qApp_var(PyObject *module) +{ + int module_index; + static int init_done = 0; + + if (!init_done) { + qApp_var = Py_BuildValue("s", "qApp"); + if (qApp_var == NULL) + return -1; + // This is a borrowed reference + qApp_moduledicts[0] = PyEval_GetBuiltins(); + Py_INCREF(qApp_moduledicts[0]); + init_done = 1; + } + + // Initialize qApp. We insert it into __dict__ for "import *" and also + // into __builtins__, to let it appear like a real macro. + module_index = qApp_module_index(module); + if (module_index) { + // This line gets a borrowed reference + qApp_moduledicts[module_index] = PyModule_GetDict(module); + Py_INCREF(qApp_moduledicts[module_index]); + if (reset_qApp_var() < 0) + return -1; + } + return 0; +} + +void +NotifyModuleForQApp(PyObject *module) +{ + setup_qApp_var(module); +} + + +} //extern "C" + +// end of module diff --git a/sources/shiboken2/libshiboken/qapp_macro.h b/sources/shiboken2/libshiboken/qapp_macro.h new file mode 100644 index 0000000..ded8923 --- /dev/null +++ b/sources/shiboken2/libshiboken/qapp_macro.h @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QAPP_MACRO_H +#define QAPP_MACRO_H + +#include "sbkpython.h" + +extern "C" +{ + +LIBSHIBOKEN_API PyObject *MakeSingletonQAppWrapper(PyTypeObject *type); +LIBSHIBOKEN_API void NotifyModuleForQApp(PyObject *module); + +} // extern "C" + +#endif // QAPP_MACRO_H diff --git a/sources/shiboken2/libshiboken/qt_attribution.json b/sources/shiboken2/libshiboken/qt_attribution.json new file mode 100644 index 0000000..12a0952 --- /dev/null +++ b/sources/shiboken2/libshiboken/qt_attribution.json @@ -0,0 +1,12 @@ +{ + "Id": "python", + "Name": "Python", + "QDocModule": "QtForPython", + "QtUsage": "Used for Qt for Python in the signature extension.", + "Description": "Qt for Python is an add-on for Python. The libshiboken packages of PySide uses certain parts of the source files (typespec.cpp, typespec.h, bufferprocs_py37.cpp, bufferprocs_py37.h). See the folder sources/shiboken2/libshiboken .", + "Homepage": "http://www.python.org/", + "Version": "3.7.0", + "License": "PSF LICENSE AGREEMENT FOR PYTHON 3.7.0", + "LicenseFile": "bufferprocs27.h", + "Copyright": "© Copyright 2001-2018, Python Software Foundation." +} diff --git a/sources/shiboken2/libshiboken/sbkarrayconverter.cpp b/sources/shiboken2/libshiboken/sbkarrayconverter.cpp new file mode 100644 index 0000000..58e0b18 --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkarrayconverter.cpp @@ -0,0 +1,289 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "sbkarrayconverter.h" +#include "sbkarrayconverter_p.h" +#include "helper.h" +#include "sbkconverter.h" +#include "sbkconverter_p.h" + +#include +#include + +#include + +static SbkArrayConverter *ArrayTypeConverters[Shiboken::Conversions::SBK_ARRAY_IDX_SIZE] [2] = {}; + +namespace Shiboken { +namespace Conversions { + +// Check whether Predicate is true for all elements of a sequence +template +static bool sequenceAllOf(PyObject *pyIn, Predicate p) +{ + const Py_ssize_t size = PySequence_Size(pyIn); + for (Py_ssize_t i = 0; i < size; ++i) { + PyObject *item = PySequence_GetItem(pyIn, i); + const bool ok = p(item); + Py_XDECREF(item); + if (!ok) + return false; + } + return true; +} + +// Convert a sequence to output iterator +template +inline void convertPySequence(PyObject *pyIn, Converter c, T *out) +{ + const Py_ssize_t size = PySequence_Size(pyIn); + for (Py_ssize_t i = 0; i < size; ++i) { + PyObject *item = PySequence_GetItem(pyIn, i); + *out++ = c(item); + Py_XDECREF(item); + } +} + +// Internal, for usage by numpy +SbkArrayConverter *createArrayConverter(IsArrayConvertibleToCppFunc toCppCheckFunc) +{ + SbkArrayConverter *result = new SbkArrayConverter; + result->toCppConversions.push_back(toCppCheckFunc); + return result; +} + +static PythonToCppFunc unimplementedArrayCheck(PyObject *, int, int) +{ + warning(PyExc_RuntimeWarning, 0, "SbkConverter: Unimplemented C++ array type."); + return nullptr; +} + +SbkArrayConverter *unimplementedArrayConverter() +{ + static SbkArrayConverter *result = createArrayConverter(unimplementedArrayCheck); + return result; +} + +// Integers + +static inline bool intCheck(PyObject *pyIn) +{ +#ifdef IS_PY3K + return PyLong_Check(pyIn); +#else + return PyInt_Check(pyIn); +#endif +} + +static short toShort(PyObject *pyIn) { return short(PyLong_AsLong(pyIn)); } + +static void sequenceToCppShortArray(PyObject *pyIn, void *cppOut) +{ + ArrayHandle *handle = reinterpret_cast *>(cppOut); + handle->allocate(PySequence_Size(pyIn)); + convertPySequence(pyIn, toShort, handle->data()); +} + +static inline bool sequenceSizeCheck(PyObject *pyIn, int expectedSize = -1) +{ + if (expectedSize >= 0) { + const int size = int(PySequence_Size(pyIn)); + if (size < expectedSize) { + warning(PyExc_RuntimeWarning, 0, "A sequence of size %d was passed to a function that expects %d.", + size, expectedSize); + return false; + } + } + return true; +} + +static inline bool intArrayCheck(PyObject *pyIn, int expectedSize = -1) +{ + return PySequence_Check(pyIn) && sequenceAllOf(pyIn, intCheck) + && sequenceSizeCheck(pyIn, expectedSize); +} + +static PythonToCppFunc sequenceToCppShortArrayCheck(PyObject *pyIn, int dim1, int /* dim2 */) +{ + return intArrayCheck(pyIn, dim1) ? sequenceToCppShortArray : nullptr; +} + +static short toUnsignedShort(PyObject *pyIn) { return static_cast(PyLong_AsUnsignedLong(pyIn)); } + +static void sequenceToCppUnsignedShortArray(PyObject *pyIn, void *cppOut) +{ + ArrayHandle *handle = reinterpret_cast *>(cppOut); + handle->allocate(PySequence_Size(pyIn)); + convertPySequence(pyIn, toUnsignedShort, handle->data()); +} + +static PythonToCppFunc sequenceToCppUnsignedShortArrayCheck(PyObject *pyIn, int dim1, int /* dim2 */) +{ + return intArrayCheck(pyIn, dim1) ? sequenceToCppUnsignedShortArray : nullptr; +} + +static void sequenceToCppIntArray(PyObject *pyIn, void *cppOut) +{ + ArrayHandle *handle = reinterpret_cast *>(cppOut); + handle->allocate(PySequence_Size(pyIn)); + convertPySequence(pyIn, _PepLong_AsInt, handle->data()); +} + +static PythonToCppFunc sequenceToCppIntArrayCheck(PyObject *pyIn, int dim1, int /* dim2 */) +{ + return intArrayCheck(pyIn, dim1) ? sequenceToCppIntArray : nullptr; +} + +static void sequenceToCppUnsignedArray(PyObject *pyIn, void *cppOut) +{ + ArrayHandle *handle = reinterpret_cast *>(cppOut); + handle->allocate(PySequence_Size(pyIn)); + convertPySequence(pyIn, PyLong_AsUnsignedLong, handle->data()); +} + +static PythonToCppFunc sequenceToCppUnsignedArrayCheck(PyObject *pyIn, int dim1, int /* dim2 */) +{ + return intArrayCheck(pyIn, dim1) ? sequenceToCppUnsignedArray : nullptr; +} + +static void sequenceToCppLongLongArray(PyObject *pyIn, void *cppOut) +{ + ArrayHandle *handle = reinterpret_cast *>(cppOut); + handle->allocate(PySequence_Size(pyIn)); + convertPySequence(pyIn, PyLong_AsLongLong, handle->data()); +} + +static PythonToCppFunc sequenceToCppLongLongArrayCheck(PyObject *pyIn, int dim1, int /* dim2 */) +{ + return intArrayCheck(pyIn, dim1) ? sequenceToCppLongLongArray : nullptr; +} + +static void sequenceToCppUnsignedLongLongArray(PyObject *pyIn, void *cppOut) +{ + ArrayHandle *handle = reinterpret_cast *>(cppOut); + handle->allocate(PySequence_Size(pyIn)); + convertPySequence(pyIn, PyLong_AsUnsignedLongLong, handle->data()); +} + +static PythonToCppFunc sequenceToCppUnsignedLongLongArrayCheck(PyObject *pyIn, int dim1, int /* dim2 */) +{ + return intArrayCheck(pyIn, dim1) ? sequenceToCppUnsignedLongLongArray : nullptr; +} + +// Float + +static inline bool floatCheck(PyObject *pyIn) { return PyFloat_Check(pyIn); } + +static inline bool floatArrayCheck(PyObject *pyIn, int expectedSize = -1) +{ + return PySequence_Check(pyIn) && sequenceAllOf(pyIn, floatCheck) + && sequenceSizeCheck(pyIn, expectedSize); +} + +static void sequenceToCppDoubleArray(PyObject *pyIn, void *cppOut) +{ + ArrayHandle *handle = reinterpret_cast *>(cppOut); + handle->allocate(PySequence_Size(pyIn)); + convertPySequence(pyIn, PyFloat_AsDouble, handle->data()); +} + +static inline float pyToFloat(PyObject *pyIn) { return float(PyFloat_AsDouble(pyIn)); } + +static void sequenceToCppFloatArray(PyObject *pyIn, void *cppOut) +{ + ArrayHandle *handle = reinterpret_cast *>(cppOut); + handle->allocate(PySequence_Size(pyIn)); + convertPySequence(pyIn, pyToFloat, handle->data()); +} + +static PythonToCppFunc sequenceToCppFloatArrayCheck(PyObject *pyIn, int dim1, int /* dim2 */) +{ + return floatArrayCheck(pyIn, dim1) ? sequenceToCppFloatArray : nullptr; +} + +static PythonToCppFunc sequenceToCppDoubleArrayCheck(PyObject *pyIn, int dim1, int /* dim2 */) +{ + return floatArrayCheck(pyIn, dim1) ? sequenceToCppDoubleArray : nullptr; +} + +#ifdef HAVE_NUMPY +void initNumPyArrayConverters(); +#endif + +void initArrayConverters() +{ + SbkArrayConverter **start = &ArrayTypeConverters[0][0]; + std::fill(start, start + sizeof(ArrayTypeConverters) / sizeof(ArrayTypeConverters[0][0]), nullptr); + // Populate 1-dimensional sequence converters + ArrayTypeConverters[SBK_DOUBLE_ARRAY_IDX][0] = + createArrayConverter(sequenceToCppDoubleArrayCheck); + ArrayTypeConverters[SBK_FLOAT_ARRAY_IDX][0] = + createArrayConverter(sequenceToCppFloatArrayCheck); + ArrayTypeConverters[SBK_SHORT_ARRAY_IDX][0] = + createArrayConverter(sequenceToCppShortArrayCheck); + ArrayTypeConverters[SBK_UNSIGNEDSHORT_ARRAY_IDX][0] = + createArrayConverter(sequenceToCppUnsignedShortArrayCheck); + ArrayTypeConverters[SBK_INT_ARRAY_IDX][0] = + createArrayConverter(sequenceToCppIntArrayCheck); + ArrayTypeConverters[SBK_UNSIGNEDINT_ARRAY_IDX][0] = + createArrayConverter(sequenceToCppUnsignedArrayCheck); + ArrayTypeConverters[SBK_LONGLONG_ARRAY_IDX][0] = + createArrayConverter(sequenceToCppLongLongArrayCheck); + ArrayTypeConverters[SBK_UNSIGNEDLONGLONG_ARRAY_IDX][0] = + createArrayConverter(sequenceToCppUnsignedLongLongArrayCheck); + +#ifdef HAVE_NUMPY + initNumPyArrayConverters(); +#endif +} + +SbkArrayConverter *arrayTypeConverter(int index, int dimension) +{ + SbkArrayConverter *c = ArrayTypeConverters[index][dimension - 1]; + return c ? c : unimplementedArrayConverter(); +} + +// Internal, for usage by numpy +void setArrayTypeConverter(int index, int dimension, SbkArrayConverter *c) +{ + ArrayTypeConverters[index][dimension - 1] = c; +} + +} // namespace Conversions +} // namespace Shiboken diff --git a/sources/shiboken2/libshiboken/sbkarrayconverter.h b/sources/shiboken2/libshiboken/sbkarrayconverter.h new file mode 100644 index 0000000..2b82b25 --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkarrayconverter.h @@ -0,0 +1,171 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SBKARRAYCONVERTERS_H +#define SBKARRAYCONVERTERS_H + +#include "sbkpython.h" +#include "shibokenmacros.h" + +extern "C" { +struct SbkArrayConverter; +} + +namespace Shiboken { +namespace Conversions { + +enum : int { + SBK_UNIMPLEMENTED_ARRAY_IDX, + SBK_DOUBLE_ARRAY_IDX, + SBK_FLOAT_ARRAY_IDX, + SBK_SHORT_ARRAY_IDX, + SBK_UNSIGNEDSHORT_ARRAY_IDX, + SBK_INT_ARRAY_IDX, + SBK_UNSIGNEDINT_ARRAY_IDX, + SBK_LONGLONG_ARRAY_IDX, + SBK_UNSIGNEDLONGLONG_ARRAY_IDX, + SBK_ARRAY_IDX_SIZE +}; + +/** + * ArrayHandle is the type expected by shiboken2's array converter + * functions. It provides access to array data which it may own + * (in the case of conversions from PySequence) or a flat pointer + * to internal data (in the case of array modules like numpy). + */ + +template +class ArrayHandle +{ + ArrayHandle(const ArrayHandle &) = delete; + ArrayHandle& operator=(const ArrayHandle &) = delete; +public: + ArrayHandle() {} + ~ArrayHandle() { destroy(); } + + void allocate(Py_ssize_t size); + void setData(T *d, size_t size); + + size_t size() const { return m_size; } + T *data() const { return m_data; } + operator T*() const { return m_data; } + +private: + void destroy(); + + T *m_data = nullptr; + Py_ssize_t m_size = 0; + bool m_owned = false; +}; + +/** + * Similar to ArrayHandle for fixed size 2 dimensional arrays. + * columns is the size of the last dimension + * It only has a setData() methods since it will be used for numpy only. + */ + +template +class Array2Handle +{ +public: + typedef T RowType[columns]; + + Array2Handle() {} + + operator RowType*() const { return m_rows; } + + void setData(RowType *d) { m_rows = d; } + +private: + RowType *m_rows = nullptr; +}; + +/// Returns the converter for an array type. +LIBSHIBOKEN_API SbkArrayConverter *arrayTypeConverter(int index, int dimension = 1); + +template +struct ArrayTypeIndex{ + enum : int { index = SBK_UNIMPLEMENTED_ARRAY_IDX }; +}; + +template <> struct ArrayTypeIndex { enum : int { index = SBK_DOUBLE_ARRAY_IDX }; }; +template <> struct ArrayTypeIndex { enum : int { index = SBK_FLOAT_ARRAY_IDX };}; +template <> struct ArrayTypeIndex { enum : int { index = SBK_SHORT_ARRAY_IDX };}; +template <> struct ArrayTypeIndex { enum : int { index = SBK_UNSIGNEDSHORT_ARRAY_IDX };}; +template <> struct ArrayTypeIndex { enum : int { index = SBK_INT_ARRAY_IDX };}; +template <> struct ArrayTypeIndex { enum : int { index = SBK_UNSIGNEDINT_ARRAY_IDX };}; +template <> struct ArrayTypeIndex { enum : int { index = SBK_LONGLONG_ARRAY_IDX };}; +template <> struct ArrayTypeIndex { enum : int { index = SBK_UNSIGNEDLONGLONG_ARRAY_IDX };}; + +template SbkArrayConverter *ArrayTypeConverter(int dimension) +{ return arrayTypeConverter(ArrayTypeIndex::index, dimension); } + +// ArrayHandle methods +template +void ArrayHandle::allocate(Py_ssize_t size) +{ + destroy(); + m_data = new T[size]; + m_size = size; + m_owned = true; +} + +template +void ArrayHandle::setData(T *d, size_t size) +{ + destroy(); + m_data = d; + m_size = size; + m_owned = false; +} + +template +void ArrayHandle::destroy() +{ + if (m_owned) + delete [] m_data; + m_data = nullptr; + m_size = 0; + m_owned = false; +} + +} // namespace Conversions +} // namespace Shiboken + +#endif // SBKARRAYCONVERTERS_H diff --git a/sources/shiboken2/libshiboken/sbkarrayconverter_p.h b/sources/shiboken2/libshiboken/sbkarrayconverter_p.h new file mode 100644 index 0000000..a5e003e --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkarrayconverter_p.h @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SBKARRAYCONVERTER_P_H +#define SBKARRAYCONVERTER_P_H + +#include "sbkconverter_p.h" +#include + +extern "C" +{ + +typedef PythonToCppFunc (*IsArrayConvertibleToCppFunc)(PyObject*, int dim1, int dim2); +/** + * \internal + * Private structure of SbkArrayConverter. + */ + +struct SbkArrayConverter +{ + std::vector toCppConversions; +}; + +} // extern "C" + +#endif // SBKARRAYCONVERTER_P_H diff --git a/sources/shiboken2/libshiboken/sbkconverter.cpp b/sources/shiboken2/libshiboken/sbkconverter.cpp new file mode 100644 index 0000000..a13222d --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkconverter.cpp @@ -0,0 +1,597 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "sbkconverter.h" +#include "sbkconverter_p.h" +#include "sbkarrayconverter_p.h" +#include "basewrapper_p.h" +#include "bindingmanager.h" +#include "autodecref.h" +#include "sbkdbg.h" +#include "helper.h" +#include "voidptr.h" + +#include + +static SbkConverter** PrimitiveTypeConverters; + +typedef std::unordered_map ConvertersMap; +static ConvertersMap converters; + +namespace Shiboken { +namespace Conversions { + +void initArrayConverters(); + +void init() +{ + static SbkConverter* primitiveTypeConverters[] = { + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + Primitive::createConverter(), + VoidPtr::createConverter() + }; + PrimitiveTypeConverters = primitiveTypeConverters; + + assert(converters.empty()); + converters["PY_LONG_LONG"] = primitiveTypeConverters[SBK_PY_LONG_LONG_IDX]; + converters["bool"] = primitiveTypeConverters[SBK_BOOL_IDX_1]; + converters["char"] = primitiveTypeConverters[SBK_CHAR_IDX]; + converters["const char *"] = primitiveTypeConverters[SBK_CONSTCHARPTR_IDX]; + converters["double"] = primitiveTypeConverters[SBK_DOUBLE_IDX]; + converters["float"] = primitiveTypeConverters[SBK_FLOAT_IDX]; + converters["int"] = primitiveTypeConverters[SBK_INT_IDX]; + converters["long"] = primitiveTypeConverters[SBK_LONG_IDX]; + converters["short"] = primitiveTypeConverters[SBK_SHORT_IDX]; + converters["signed char"] = primitiveTypeConverters[SBK_SIGNEDCHAR_IDX]; + converters["std::string"] = primitiveTypeConverters[SBK_STD_STRING_IDX]; + converters["unsigned PY_LONG_LONG"] = primitiveTypeConverters[SBK_UNSIGNEDPY_LONG_LONG_IDX]; + converters["unsigned char"] = primitiveTypeConverters[SBK_UNSIGNEDCHAR_IDX]; + converters["unsigned int"] = primitiveTypeConverters[SBK_UNSIGNEDINT_IDX]; + converters["unsigned long"] = primitiveTypeConverters[SBK_UNSIGNEDLONG_IDX]; + converters["unsigned short"] = primitiveTypeConverters[SBK_UNSIGNEDSHORT_IDX]; + converters["void*"] = primitiveTypeConverters[SBK_VOIDPTR_IDX]; + + initArrayConverters(); +} + +SbkConverter *createConverterObject(PyTypeObject *type, + PythonToCppFunc toCppPointerConvFunc, + IsConvertibleToCppFunc toCppPointerCheckFunc, + CppToPythonFunc pointerToPythonFunc, + CppToPythonFunc copyToPythonFunc) +{ + SbkConverter* converter = new SbkConverter; + converter->pythonType = type; + // PYSIDE-595: All types are heaptypes now, so provide reference. + Py_XINCREF(type); + + converter->pointerToPython = pointerToPythonFunc; + converter->copyToPython = copyToPythonFunc; + + if (toCppPointerCheckFunc && toCppPointerConvFunc) + converter->toCppPointerConversion = std::make_pair(toCppPointerCheckFunc, toCppPointerConvFunc); + converter->toCppConversions.clear(); + + return converter; +} + +SbkConverter* createConverter(SbkObjectType* type, + PythonToCppFunc toCppPointerConvFunc, + IsConvertibleToCppFunc toCppPointerCheckFunc, + CppToPythonFunc pointerToPythonFunc, + CppToPythonFunc copyToPythonFunc) +{ + SbkConverter *converter = + createConverterObject(reinterpret_cast(type), + toCppPointerConvFunc, toCppPointerCheckFunc, + pointerToPythonFunc, copyToPythonFunc); + PepType_SOTP(type)->converter = converter; + return converter; +} + +SbkConverter* createConverter(PyTypeObject* type, CppToPythonFunc toPythonFunc) +{ + return createConverterObject(type, 0, 0, 0, toPythonFunc); +} + +void deleteConverter(SbkConverter* converter) +{ + if (converter) { + converter->toCppConversions.clear(); + delete converter; + } +} + +void setCppPointerToPythonFunction(SbkConverter* converter, CppToPythonFunc pointerToPythonFunc) +{ + converter->pointerToPython = pointerToPythonFunc; +} + +void setPythonToCppPointerFunctions(SbkConverter* converter, + PythonToCppFunc toCppPointerConvFunc, + IsConvertibleToCppFunc toCppPointerCheckFunc) +{ + converter->toCppPointerConversion = std::make_pair(toCppPointerCheckFunc, toCppPointerConvFunc); +} + +void addPythonToCppValueConversion(SbkConverter* converter, + PythonToCppFunc pythonToCppFunc, + IsConvertibleToCppFunc isConvertibleToCppFunc) +{ + converter->toCppConversions.push_back(std::make_pair(isConvertibleToCppFunc, pythonToCppFunc)); +} +void addPythonToCppValueConversion(SbkObjectType* type, + PythonToCppFunc pythonToCppFunc, + IsConvertibleToCppFunc isConvertibleToCppFunc) +{ + addPythonToCppValueConversion(PepType_SOTP(type)->converter, pythonToCppFunc, isConvertibleToCppFunc); +} + +PyObject* pointerToPython(SbkObjectType *type, const void *cppIn) +{ + return pointerToPython(PepType_SOTP(type)->converter, cppIn); +} + +PyObject* pointerToPython(const SbkConverter *converter, const void *cppIn) +{ + assert(converter); + if (!cppIn) + Py_RETURN_NONE; + if (!converter->pointerToPython) { + warning(PyExc_RuntimeWarning, 0, "pointerToPython(): SbkConverter::pointerToPython is null for \"%s\".", + converter->pythonType->tp_name); + Py_RETURN_NONE; + } + return converter->pointerToPython(cppIn); +} + +PyObject* referenceToPython(SbkObjectType *type, const void *cppIn) +{ + return referenceToPython(PepType_SOTP(type)->converter, cppIn); +} + +PyObject* referenceToPython(const SbkConverter *converter, const void *cppIn) +{ + assert(cppIn); + + PyObject *pyOut = reinterpret_cast(BindingManager::instance().retrieveWrapper(cppIn)); + if (pyOut) { + Py_INCREF(pyOut); + return pyOut; + } + if (!converter->pointerToPython) { + warning(PyExc_RuntimeWarning, 0, "referenceToPython(): SbkConverter::pointerToPython is null for \"%s\".", + converter->pythonType->tp_name); + Py_RETURN_NONE; + } + return converter->pointerToPython(cppIn); +} + +static inline PyObject* CopyCppToPython(const SbkConverter *converter, const void *cppIn) +{ + if (!cppIn) + Py_RETURN_NONE; + if (!converter->copyToPython) { + warning(PyExc_RuntimeWarning, 0, "CopyCppToPython(): SbkConverter::copyToPython is null for \"%s\".", + converter->pythonType->tp_name); + Py_RETURN_NONE; + } + return converter->copyToPython(cppIn); +} +PyObject* copyToPython(SbkObjectType *type, const void *cppIn) +{ + return CopyCppToPython(PepType_SOTP(type)->converter, cppIn); +} +PyObject* copyToPython(const SbkConverter *converter, const void *cppIn) +{ + return CopyCppToPython(converter, cppIn); +} + +PythonToCppFunc isPythonToCppPointerConvertible(SbkObjectType *type, PyObject *pyIn) +{ + assert(pyIn); + return PepType_SOTP(type)->converter->toCppPointerConversion.first(pyIn); +} + +static inline PythonToCppFunc IsPythonToCppConvertible(const SbkConverter *converter, PyObject *pyIn) +{ + assert(pyIn); + const ToCppConversionList& convs = converter->toCppConversions; + for (ToCppConversionList::const_iterator conv = convs.begin(), end = convs.end(); conv != end; ++conv) { + PythonToCppFunc toCppFunc = 0; + if ((toCppFunc = (*conv).first(pyIn))) + return toCppFunc; + } + return 0; +} +PythonToCppFunc isPythonToCppValueConvertible(SbkObjectType *type, PyObject *pyIn) +{ + return IsPythonToCppConvertible(PepType_SOTP(type)->converter, pyIn); +} +PythonToCppFunc isPythonToCppConvertible(const SbkConverter *converter, PyObject *pyIn) +{ + return IsPythonToCppConvertible(converter, pyIn); +} + +PythonToCppFunc isPythonToCppConvertible(const SbkArrayConverter *converter, + int dim1, int dim2, PyObject *pyIn) +{ + assert(pyIn); + for (IsArrayConvertibleToCppFunc f : converter->toCppConversions) { + if (PythonToCppFunc c = f(pyIn, dim1, dim2)) + return c; + } + return nullptr; +} + +PythonToCppFunc isPythonToCppReferenceConvertible(SbkObjectType *type, PyObject *pyIn) +{ + if (pyIn != Py_None) { + PythonToCppFunc toCpp = isPythonToCppPointerConvertible(type, pyIn); + if (toCpp) + return toCpp; + } + return isPythonToCppValueConvertible(type, pyIn); +} + +void nonePythonToCppNullPtr(PyObject*, void* cppOut) +{ + assert(cppOut); + *((void**)cppOut) = 0; +} + +void* cppPointer(PyTypeObject* desiredType, SbkObject* pyIn) +{ + assert(pyIn); + if (!ObjectType::checkType(desiredType)) + return pyIn; + SbkObjectType *inType = reinterpret_cast(Py_TYPE(pyIn)); + if (ObjectType::hasCast(inType)) + return ObjectType::cast(inType, pyIn, desiredType); + return Object::cppPointer(pyIn, desiredType); +} + +void pythonToCppPointer(SbkObjectType* type, PyObject* pyIn, void* cppOut) +{ + assert(type); + assert(pyIn); + assert(cppOut); + *reinterpret_cast(cppOut) = pyIn == Py_None + ? 0 + : cppPointer(reinterpret_cast(type), reinterpret_cast(pyIn)); +} + +void pythonToCppPointer(const SbkConverter *converter, PyObject *pyIn, void *cppOut) +{ + assert(converter); + assert(pyIn); + assert(cppOut); + *reinterpret_cast(cppOut) = pyIn == Py_None + ? 0 + : cppPointer(reinterpret_cast(converter->pythonType), reinterpret_cast(pyIn)); +} + +static void _pythonToCppCopy(const SbkConverter *converter, PyObject *pyIn, void *cppOut) +{ + assert(converter); + assert(pyIn); + assert(cppOut); + PythonToCppFunc toCpp = IsPythonToCppConvertible(converter, pyIn); + if (toCpp) + toCpp(pyIn, cppOut); +} + +void pythonToCppCopy(SbkObjectType *type, PyObject *pyIn, void *cppOut) +{ + assert(type); + _pythonToCppCopy(PepType_SOTP(type)->converter, pyIn, cppOut); +} + +void pythonToCppCopy(const SbkConverter *converter, PyObject *pyIn, void *cppOut) +{ + _pythonToCppCopy(converter, pyIn, cppOut); +} + +bool isImplicitConversion(SbkObjectType *type, PythonToCppFunc toCppFunc) +{ + // This is the Object Type or Value Type conversion that only + // retrieves the C++ pointer held in the Python wrapper. + if (toCppFunc == PepType_SOTP(type)->converter->toCppPointerConversion.second) + return false; + + // Object Types doesn't have any kind of value conversion, + // only C++ pointer retrieval. + if (PepType_SOTP(type)->converter->toCppConversions.empty()) + return false; + + // The first conversion of the non-pointer conversion list is + // a Value Type's copy to C++ function, which is not an implicit + // conversion. + // Otherwise it must be one of the implicit conversions. + // Note that we don't check if the Python to C++ conversion is in + // the list of the type's conversions, for it is expected that the + // caller knows what he's doing. + ToCppConversionList::iterator conv = PepType_SOTP(type)->converter->toCppConversions.begin(); + return toCppFunc != (*conv).second; +} + +void registerConverterName(SbkConverter* converter , const char* typeName) +{ + ConvertersMap::iterator iter = converters.find(typeName); + if (iter == converters.end()) + converters.insert(std::make_pair(typeName, converter)); +} + +SbkConverter* getConverter(const char* typeName) +{ + ConvertersMap::const_iterator it = converters.find(typeName); + if (it != converters.end()) + return it->second; + if (Py_VerboseFlag > 0) + SbkDbg() << "Can't find type resolver for type '" << typeName << "'."; + return 0; +} + +SbkConverter* primitiveTypeConverter(int index) +{ + return PrimitiveTypeConverters[index]; +} + +bool checkSequenceTypes(PyTypeObject* type, PyObject* pyIn) +{ + assert(type); + assert(pyIn); + if (PySequence_Size(pyIn) < 0) { + // clear the error if < 0 which means no length at all + PyErr_Clear(); + return false; + } + const Py_ssize_t size = PySequence_Size(pyIn); + for (Py_ssize_t i = 0; i < size; ++i) { + if (!PyObject_TypeCheck(AutoDecRef(PySequence_GetItem(pyIn, i)), type)) + return false; + } + return true; +} +bool convertibleSequenceTypes(const SbkConverter *converter, PyObject *pyIn) +{ + assert(converter); + assert(pyIn); + if (!PySequence_Check(pyIn)) + return false; + const Py_ssize_t size = PySequence_Size(pyIn); + for (Py_ssize_t i = 0; i < size; ++i) { + if (!isPythonToCppConvertible(converter, AutoDecRef(PySequence_GetItem(pyIn, i)))) + return false; + } + return true; +} +bool convertibleSequenceTypes(SbkObjectType *type, PyObject *pyIn) +{ + assert(type); + return convertibleSequenceTypes(PepType_SOTP(type)->converter, pyIn); +} + +bool checkPairTypes(PyTypeObject* firstType, PyTypeObject* secondType, PyObject* pyIn) +{ + assert(firstType); + assert(secondType); + assert(pyIn); + if (!PySequence_Check(pyIn)) + return false; + if (PySequence_Size(pyIn) != 2) + return false; + if (!PyObject_TypeCheck(AutoDecRef(PySequence_GetItem(pyIn, 0)), firstType)) + return false; + if (!PyObject_TypeCheck(AutoDecRef(PySequence_GetItem(pyIn, 1)), secondType)) + return false; + return true; +} +bool convertiblePairTypes(const SbkConverter *firstConverter, bool firstCheckExact, + const SbkConverter *secondConverter, bool secondCheckExact, + PyObject *pyIn) +{ + assert(firstConverter); + assert(secondConverter); + assert(pyIn); + if (!PySequence_Check(pyIn)) + return false; + if (PySequence_Size(pyIn) != 2) + return false; + AutoDecRef firstItem(PySequence_GetItem(pyIn, 0)); + if (firstCheckExact) { + if (!PyObject_TypeCheck(firstItem, firstConverter->pythonType)) + return false; + } else if (!isPythonToCppConvertible(firstConverter, firstItem)) { + return false; + } + AutoDecRef secondItem(PySequence_GetItem(pyIn, 1)); + if (secondCheckExact) { + if (!PyObject_TypeCheck(secondItem, secondConverter->pythonType)) + return false; + } else if (!isPythonToCppConvertible(secondConverter, secondItem)) { + return false; + } + + return true; +} + +bool checkDictTypes(PyTypeObject* keyType, PyTypeObject* valueType, PyObject* pyIn) +{ + assert(keyType); + assert(valueType); + assert(pyIn); + if (!PyDict_Check(pyIn)) + return false; + + PyObject* key; + PyObject* value; + Py_ssize_t pos = 0; + while (PyDict_Next(pyIn, &pos, &key, &value)) { + if (!PyObject_TypeCheck(key, keyType)) + return false; + if (!PyObject_TypeCheck(value, valueType)) + return false; + } + return true; +} + +bool convertibleDictTypes(const SbkConverter * keyConverter, bool keyCheckExact, const SbkConverter *valueConverter, + bool valueCheckExact, PyObject *pyIn) +{ + assert(keyConverter); + assert(valueConverter); + assert(pyIn); + if (!PyDict_Check(pyIn)) + return false; + PyObject* key; + PyObject* value; + Py_ssize_t pos = 0; + while (PyDict_Next(pyIn, &pos, &key, &value)) { + if (keyCheckExact) { + if (!PyObject_TypeCheck(key, keyConverter->pythonType)) + return false; + } else if (!isPythonToCppConvertible(keyConverter, key)) { + return false; + } + if (valueCheckExact) { + if (!PyObject_TypeCheck(value, valueConverter->pythonType)) + return false; + } else if (!isPythonToCppConvertible(valueConverter, value)) { + return false; + } + } + return true; +} + +PyTypeObject* getPythonTypeObject(const SbkConverter *converter) +{ + if (converter) + return converter->pythonType; + return 0; +} + +PyTypeObject* getPythonTypeObject(const char* typeName) +{ + return getPythonTypeObject(getConverter(typeName)); +} + +bool pythonTypeIsValueType(const SbkConverter *converter) +{ + // Unlikely to happen but for multi-inheritance SbkObjs + // the converter is not defined, hence we need a default return. + if (!converter) + return false; + return converter->pointerToPython && converter->copyToPython; +} + +bool pythonTypeIsObjectType(const SbkConverter *converter) +{ + return converter->pointerToPython && !converter->copyToPython; +} + +bool pythonTypeIsWrapperType(const SbkConverter *converter) +{ + return converter->pointerToPython != 0; +} + +SpecificConverter::SpecificConverter(const char* typeName) + : m_type(InvalidConversion) +{ + m_converter = getConverter(typeName); + if (!m_converter) + return; + const Py_ssize_t len = strlen(typeName); + char lastChar = typeName[len -1]; + if (lastChar == '&') { + m_type = ReferenceConversion; + } else if (lastChar == '*' || pythonTypeIsObjectType(m_converter)) { + m_type = PointerConversion; + } else { + m_type = CopyConversion; + } +} + +PyObject* SpecificConverter::toPython(const void* cppIn) +{ + switch (m_type) { + case CopyConversion: + return copyToPython(m_converter, cppIn); + case PointerConversion: + return pointerToPython(m_converter, *((const void**)cppIn)); + case ReferenceConversion: + return referenceToPython(m_converter, cppIn); + default: + PyErr_SetString(PyExc_RuntimeError, "tried to use invalid converter in 'C++ to Python' conversion"); + } + return 0; +} + +void SpecificConverter::toCpp(PyObject* pyIn, void* cppOut) +{ + switch (m_type) { + case CopyConversion: + pythonToCppCopy(m_converter, pyIn, cppOut); + break; + case PointerConversion: + pythonToCppPointer(m_converter, pyIn, cppOut); + break; + case ReferenceConversion: + pythonToCppPointer(m_converter, pyIn, &cppOut); + break; + default: + PyErr_SetString(PyExc_RuntimeError, "tried to use invalid converter in 'Python to C++' conversion"); + } +} + +} } // namespace Shiboken::Conversions diff --git a/sources/shiboken2/libshiboken/sbkconverter.h b/sources/shiboken2/libshiboken/sbkconverter.h new file mode 100644 index 0000000..0effebf --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkconverter.h @@ -0,0 +1,402 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SBK_CONVERTER_H +#define SBK_CONVERTER_H + +#include "sbkpython.h" +#include "shibokenmacros.h" + +#include +#include + +struct SbkObject; +struct SbkObjectType; + +/** + * This is a convenience macro identical to Python's PyObject_TypeCheck, + * except that the arguments have swapped places, for the great convenience + * of generator. + */ +#define SbkObject_TypeCheck(tp, ob) \ + (Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp))) + +extern "C" +{ + +/** + * SbkConverter is used to perform type conversions from C++ + * to Python and vice-versa;.and it is also used for type checking. + * SbkConverter is a private structure that must be accessed + * using the functions provided by the converter API. + */ +struct SbkConverter; +struct SbkArrayConverter; + +/** + * Given a void pointer to a C++ object, this function must return + * the proper Python object. It may be either an existing wrapper + * for the C++ object, or a newly create one. Or even the Python + * equivalent of the C++ value passed in the argument. + * + * C++ -> Python + */ +typedef PyObject* (*CppToPythonFunc)(const void*); + +/** + * This function converts a Python object to a C++ value, it may be + * a pointer, value, class, container or primitive type, passed via + * a void pointer, that will be cast properly inside the function. + * This function is usually returned by an IsConvertibleToCppFunc + * function, or obtained knowing the type of the Python object input, + * thus it will not check the Python object type, and will expect + * the void pointer to be pointing to a proper variable. + * + * Python -> C++ + */ +typedef void (*PythonToCppFunc)(PyObject*,void*); + +/** + * Checks if the Python object passed in the argument is convertible to a + * C++ type defined inside the function, it returns the converter function + * that will transform a Python argument into a C++ value. + * It returns NULL if the Python object is not convertible to the C++ type + * that the function represents. + * + * Python -> C++ ? + */ +typedef PythonToCppFunc (*IsConvertibleToCppFunc)(PyObject*); + +} // extern "C" + +namespace Shiboken { +namespace Conversions { + + +class LIBSHIBOKEN_API SpecificConverter +{ +public: + enum Type + { + InvalidConversion, + CopyConversion, + PointerConversion, + ReferenceConversion + }; + + explicit SpecificConverter(const char* typeName); + + inline SbkConverter* converter() { return m_converter; } + inline operator SbkConverter*() const { return m_converter; } + + inline bool isValid() { return m_type != InvalidConversion; } + inline operator bool() const { return m_type != InvalidConversion; } + + inline Type conversionType() { return m_type; } + + PyObject* toPython(const void* cppIn); + void toCpp(PyObject* pyIn, void* cppOut); +private: + SbkConverter* m_converter; + Type m_type; +}; + + +/** + * Creates a converter for a wrapper type. + * \param type A Shiboken.ObjectType that will receive the new converter. + * \param toCppPointerConvFunc Function to retrieve the C++ pointer held by a Python wrapper. + * \param toCppPointerCheckFunc Check and return the retriever function of the C++ pointer held by a Python wrapper. + * \param pointerToPythonFunc Function to convert a C++ object to a Python \p type wrapper, keeping their identity. + * \param copyToPythonFunc Function to convert a C++ object to a Python \p type, copying the object. + * \returns The new converter referred by the wrapper \p type. + */ +LIBSHIBOKEN_API SbkConverter* createConverter(SbkObjectType* type, + PythonToCppFunc toCppPointerConvFunc, + IsConvertibleToCppFunc toCppPointerCheckFunc, + CppToPythonFunc pointerToPythonFunc, + CppToPythonFunc copyToPythonFunc = 0); + +/** + * Creates a converter for a non wrapper type (primitive or container type). + * \param type Python type representing to the new converter. + * \param toPythonFunc Function to convert a C++ object to a Python \p type. + * \returns A new type converter. + */ +LIBSHIBOKEN_API SbkConverter* createConverter(PyTypeObject* type, CppToPythonFunc toPythonFunc); + +LIBSHIBOKEN_API void deleteConverter(SbkConverter* converter); + +/// Sets the Python object to C++ pointer conversion function. +LIBSHIBOKEN_API void setCppPointerToPythonFunction(SbkConverter* converter, CppToPythonFunc pointerToPythonFunc); + +/// Sets the C++ pointer to Python object conversion functions. +LIBSHIBOKEN_API void setPythonToCppPointerFunctions(SbkConverter* converter, + PythonToCppFunc toCppPointerConvFunc, + IsConvertibleToCppFunc toCppPointerCheckFunc); + +/** + * Adds a new conversion of a Python object to a C++ value. + * This is used in copy and implicit conversions. + */ +LIBSHIBOKEN_API void addPythonToCppValueConversion(SbkConverter* converter, + PythonToCppFunc pythonToCppFunc, + IsConvertibleToCppFunc isConvertibleToCppFunc); +LIBSHIBOKEN_API void addPythonToCppValueConversion(SbkObjectType* type, + PythonToCppFunc pythonToCppFunc, + IsConvertibleToCppFunc isConvertibleToCppFunc); + +// C++ -> Python --------------------------------------------------------------------------- + +/** + * Retrieves the Python wrapper object for the given \p cppIn C++ pointer object. + * This function is used only for Value and Object Types. + * Example usage: + * TYPE* var; + * PyObject* pyVar = pointerToPython(SBKTYPE, &var); + */ +LIBSHIBOKEN_API PyObject* pointerToPython(SbkObjectType *type, const void *cppIn); +LIBSHIBOKEN_API PyObject* pointerToPython(const SbkConverter *converter, const void *cppIn); + +/** + * For the given \p cppIn C++ reference it returns the Python wrapper object, + * always for Object Types, and when they already exist for reference types; + * for when the latter doesn't have an existing wrapper type, the C++ object + * is copied to Python. + * Example usage: + * TYPE& var = SOMETHING; + * PyObject* pyVar = referenceToPython(SBKTYPE, &var); + */ +LIBSHIBOKEN_API PyObject* referenceToPython(SbkObjectType *type, const void *cppIn); +LIBSHIBOKEN_API PyObject* referenceToPython(const SbkConverter *converter, const void *cppIn); + +/** + * Retrieves the Python wrapper object for the given C++ value pointed by \p cppIn. + * This function is used only for Value Types. + * Example usage: + * TYPE var; + * PyObject* pyVar = copyToPython(SBKTYPE, &var); + */ +LIBSHIBOKEN_API PyObject* copyToPython(SbkObjectType *type, const void *cppIn); +LIBSHIBOKEN_API PyObject* copyToPython(const SbkConverter *converter, const void *cppIn); + +// Python -> C++ --------------------------------------------------------------------------- + +/** + * Returns a Python to C++ conversion function if the Python object is convertible to a C++ pointer. + * It returns NULL if the Python object is not convertible to \p type. + */ +LIBSHIBOKEN_API PythonToCppFunc isPythonToCppPointerConvertible(SbkObjectType *type, PyObject *pyIn); + +/** + * Returns a Python to C++ conversion function if the Python object is convertible to a C++ value. + * The resulting converter function will create a copy of the Python object in C++, or implicitly + * convert the object to the expected \p type. + * It returns NULL if the Python object is not convertible to \p type. + */ +LIBSHIBOKEN_API PythonToCppFunc isPythonToCppValueConvertible(SbkObjectType *type, PyObject *pyIn); + +/** + * Returns a Python to C++ conversion function if the Python object is convertible to a C++ reference. + * The resulting converter function will return the underlying C++ object held by the Python wrapper, + * or a new C++ value if it must be a implicit conversion. + * It returns NULL if the Python object is not convertible to \p type. + */ +LIBSHIBOKEN_API PythonToCppFunc isPythonToCppReferenceConvertible(SbkObjectType *type, PyObject *pyIn); + +/// This is the same as isPythonToCppValueConvertible function. +LIBSHIBOKEN_API PythonToCppFunc isPythonToCppConvertible(const SbkConverter *converter, PyObject *pyIn); +LIBSHIBOKEN_API PythonToCppFunc isPythonToCppConvertible(const SbkArrayConverter *converter, + int dim1, int dim2, PyObject *pyIn); + +/** + * Returns the C++ pointer for the \p pyIn object cast to the type passed via \p desiredType. + * It differs from Shiboken::Object::cppPointer because it casts the pointer to a proper + * memory offset depending on the desired type. + */ +LIBSHIBOKEN_API void* cppPointer(PyTypeObject* desiredType, SbkObject* pyIn); + +/// Converts a Python object \p pyIn to C++ and stores the result in the C++ pointer passed in \p cppOut. +LIBSHIBOKEN_API void pythonToCppPointer(SbkObjectType* type, PyObject* pyIn, void* cppOut); +LIBSHIBOKEN_API void pythonToCppPointer(const SbkConverter *converter, PyObject *pyIn, void *cppOut); + +/// Converts a Python object \p pyIn to C++, and copies the result in the C++ variable passed in \p cppOut. +LIBSHIBOKEN_API void pythonToCppCopy(SbkObjectType *type, PyObject *pyIn, void *cppOut); +LIBSHIBOKEN_API void pythonToCppCopy(const SbkConverter *converter, PyObject *pyIn, void *cppOut); + +/** + * Helper function returned by generated convertible checking functions + * that returns a C++ NULL when the input Python object is None. + */ +LIBSHIBOKEN_API void nonePythonToCppNullPtr(PyObject*, void* cppOut); + +/** + * Returns true if the \p toCpp function passed is an implicit conversion of Python \p type. + * It is used when C++ expects a reference argument, so it may be the same object received + * from Python, or another created through implicit conversion. + */ +LIBSHIBOKEN_API bool isImplicitConversion(SbkObjectType *type, PythonToCppFunc toCpp); + +/// Registers a converter with a type name that may be used to retrieve the converter. +LIBSHIBOKEN_API void registerConverterName(SbkConverter* converter, const char* typeName); + +/// Returns the converter for a given type name, or NULL if it wasn't registered before. +LIBSHIBOKEN_API SbkConverter* getConverter(const char* typeName); + +/// Returns the converter for a primitive type. +LIBSHIBOKEN_API SbkConverter* primitiveTypeConverter(int index); + +/// Returns true if a Python sequence is comprised of objects of the given \p type. +LIBSHIBOKEN_API bool checkSequenceTypes(PyTypeObject* type, PyObject* pyIn); + +/// Returns true if a Python sequence is comprised of objects of a type convertible to the one represented by the given \p converter. +LIBSHIBOKEN_API bool convertibleSequenceTypes(const SbkConverter *converter, PyObject *pyIn); + +/// Returns true if a Python sequence is comprised of objects of a type convertible to \p type. +LIBSHIBOKEN_API bool convertibleSequenceTypes(SbkObjectType *type, PyObject *pyIn); + +/// Returns true if a Python sequence can be converted to a C++ pair. +LIBSHIBOKEN_API bool checkPairTypes(PyTypeObject* firstType, PyTypeObject* secondType, PyObject* pyIn); + +/// Returns true if a Python sequence can be converted to a C++ pair. +LIBSHIBOKEN_API bool convertiblePairTypes(const SbkConverter *firstConverter, bool firstCheckExact, + const SbkConverter *secondConverter, bool secondCheckExact, + PyObject *pyIn); + +/// Returns true if a Python dictionary can be converted to a C++ hash or map. +LIBSHIBOKEN_API bool checkDictTypes(PyTypeObject* keyType, PyTypeObject* valueType, PyObject* pyIn); + +/// Returns true if a Python dictionary can be converted to a C++ hash or map. +LIBSHIBOKEN_API bool convertibleDictTypes(const SbkConverter *keyConverter, bool keyCheckExact, + const SbkConverter *valueConverter, bool valueCheckExact, + PyObject *pyIn); + +/// Returns the Python type object associated with the given \p converter. +LIBSHIBOKEN_API PyTypeObject* getPythonTypeObject(const SbkConverter *converter); + +/// Returns the Python type object for the given \p typeName. +LIBSHIBOKEN_API PyTypeObject* getPythonTypeObject(const char* typeName); + +/// Returns true if the Python type associated with the converter is a value type. +LIBSHIBOKEN_API bool pythonTypeIsValueType(const SbkConverter *converter); + +/// Returns true if the Python type associated with the converter is an object type. +LIBSHIBOKEN_API bool pythonTypeIsObjectType(const SbkConverter *converter); + +/// Returns true if the Python type associated with the converter is a wrapper type. +LIBSHIBOKEN_API bool pythonTypeIsWrapperType(const SbkConverter *converter); + +#define SBK_PY_LONG_LONG_IDX 0 +// Qt5: name collision in QtCore after QBool is replaced by bool +#define SBK_BOOL_IDX_1 1 +#define SBK_CHAR_IDX 2 +#define SBK_CONSTCHARPTR_IDX 3 +#define SBK_DOUBLE_IDX 4 +#define SBK_FLOAT_IDX 5 +#define SBK_INT_IDX 6 +#define SBK_SIGNEDINT_IDX 6 +#define SBK_LONG_IDX 7 +#define SBK_SHORT_IDX 8 +#define SBK_SIGNEDCHAR_IDX 9 +#define SBK_STD_STRING_IDX 10 +#define SBK_UNSIGNEDPY_LONG_LONG_IDX 11 +#define SBK_UNSIGNEDCHAR_IDX 12 +#define SBK_UNSIGNEDINT_IDX 13 +#define SBK_UNSIGNEDLONG_IDX 14 +#define SBK_UNSIGNEDSHORT_IDX 15 +#define SBK_VOIDPTR_IDX 16 + +template SbkConverter* PrimitiveTypeConverter() { return 0; } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_PY_LONG_LONG_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_BOOL_IDX_1); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_CHAR_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_CONSTCHARPTR_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_DOUBLE_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_FLOAT_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_INT_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_LONG_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_SHORT_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_SIGNEDCHAR_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_STD_STRING_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_UNSIGNEDPY_LONG_LONG_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_UNSIGNEDCHAR_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_UNSIGNEDINT_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_UNSIGNEDLONG_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_UNSIGNEDSHORT_IDX); } +template<> inline SbkConverter* PrimitiveTypeConverter() { return primitiveTypeConverter(SBK_VOIDPTR_IDX); } + +} // namespace Shiboken::Conversions + +/** +* This function template is used to get the PyTypeObject of a C++ type T. +* All implementations should be provided by template specializations generated by the generator when +* T isn't a C++ primitive type. +* \see SpecialCastFunction +*/ +template PyTypeObject* SbkType() { return 0; } + +// Below are the template specializations for C++ primitive types. +template<> inline PyTypeObject* SbkType() { return &PyLong_Type; } +template<> inline PyTypeObject* SbkType() { return &PyBool_Type; } +template<> inline PyTypeObject* SbkType() { return &PyInt_Type; } +template<> inline PyTypeObject* SbkType() { return &PyFloat_Type; } +template<> inline PyTypeObject* SbkType() { return &PyFloat_Type; } +template<> inline PyTypeObject* SbkType() { return &PyInt_Type; } +template<> inline PyTypeObject* SbkType() { return &PyLong_Type; } +template<> inline PyTypeObject* SbkType() { return &PyInt_Type; } +template<> inline PyTypeObject* SbkType() { return &PyInt_Type; } +template<> inline PyTypeObject* SbkType() { return &PyLong_Type; } +template<> inline PyTypeObject* SbkType() { return &PyInt_Type; } +template<> inline PyTypeObject* SbkType() { return &PyLong_Type; } +template<> inline PyTypeObject* SbkType() { return &PyLong_Type; } +template<> inline PyTypeObject* SbkType() { return &PyInt_Type; } + +} // namespace Shiboken + +// When the user adds a function with an argument unknown for the typesystem, the generator writes type checks as +// TYPENAME_Check, so this macro allows users to add PyObject arguments to their added functions. +#define PyObject_Check(X) true +#define SbkChar_Check(X) (SbkNumber_Check(X) || Shiboken::String::checkChar(X)) + +struct _SbkGenericTypePrivate { + SbkConverter** converter; +}; + + +#endif // SBK_CONVERTER_H diff --git a/sources/shiboken2/libshiboken/sbkconverter_p.h b/sources/shiboken2/libshiboken/sbkconverter_p.h new file mode 100644 index 0000000..f396086 --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkconverter_p.h @@ -0,0 +1,545 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SBK_CONVERTER_P_H +#define SBK_CONVERTER_P_H + +#include "sbkpython.h" +#include "sbkconverter.h" +#include "sbkstring.h" +#include +#include +#include +#include +#include + +#include "sbkdbg.h" + +extern "C" +{ + +typedef std::pair ToCppConversion; +typedef std::list ToCppConversionList; + +/** + * \internal + * Private structure of SbkConverter. + */ +struct SbkConverter +{ + /** + * Python type associated with this converter. If the type is a Shiboken + * wrapper, then it must be a SbkObjectType; otherwise it will be the + * Python type to which the C++ value will be converted (note that the + * C++ type could be produced from various Python types). + */ + PyTypeObject* pythonType; + /** + * This function converts a C++ object to a Python object of the type + * indicated in pythonType. The identity of the C++ object is kept, + * because it looks for an already existing Python wrapper associated + * with the C++ instance. + * It is used to convert C++ pointers and references to Python objects. + */ + CppToPythonFunc pointerToPython; + /** + * This function converts a C++ object to a Python object of the type + * indicated in pythonType. The identity of the object is not kept, + * because a new instance of the C++ object is created. + * It is used to convert objects passed by value, or reference, if said + * reference can't be traced to an object that already has a Python + * wrapper assigned for it. + */ + CppToPythonFunc copyToPython; + /** + * This is a special case of a Python to C++ conversion. It returns + * the underlying C++ pointer of a Python wrapper passed as parameter + * or NULL if the Python object is a None value. + * It comes separated from the other toCppConversions because if you + * have a Python object representing a Value Type the type checking + * for both ValueType and ValueType* would be the same, thus the first + * check would be true and the second would never be reached. + */ + ToCppConversion toCppPointerConversion; + /** + * This is a list of type checking functions that return the + * proper Python to C++ conversion function, for the given Python + * object. + * For Object Types, that never have implicit conversions, this + * list is always empty. + */ + ToCppConversionList toCppConversions; +}; + +} // extern "C" + +template +struct OverFlowCheckerBase { + static void formatOverFlowMessage(const MaxLimitType& value, + const std::string *valueAsString = 0) + { + std::ostringstream str; + str << "libshiboken: Overflow: Value "; + if (valueAsString != 0 && !valueAsString->empty()) + str << *valueAsString; + else + str << value; + str << " exceeds limits of type " + << " [" << (isSigned ? "signed" : "unsigned") + << "] \"" << typeid(T).name() + << "\" (" << sizeof(T) << "bytes)."; + const std::string message = str.str(); + PyErr_WarnEx(PyExc_RuntimeWarning, message.c_str(), 0); + } + + // Checks if an overflow occurred inside Python code. + // Precondition: use after calls like PyLong_AsLongLong or PyLong_AsUnsignedLongLong. + // Postcondition: if error ocurred, sets the string reference to the string representation of + // the passed value. + static bool checkForInternalPyOverflow(PyObject *pyIn, std::string &valueAsString) + { + if (PyErr_Occurred()) { + PyErr_Print(); + PyObject *stringRepresentation = PyObject_Str(pyIn); + const char *cString = Shiboken::String::toCString(stringRepresentation); + valueAsString.assign(cString); + Py_DECREF(stringRepresentation); + return true; + } + return false; + } +}; + +// Helper template for checking if a value overflows when cast to type T. +// The MaxLimitType size is usually >= than type T size, so that it can still represent values that +// can't be stored in T (unless the types are of course the same). +// TLDR: MaxLimitType is either long long or unsigned long long. +template::is_signed > +struct OverFlowChecker; + +template +struct OverFlowChecker : + public OverFlowCheckerBase { + static bool check(const MaxLimitType& value, PyObject *pyIn) + { + std::string valueAsString; + const bool isOverflow = + OverFlowChecker::checkForInternalPyOverflow(pyIn, valueAsString) + || value < std::numeric_limits::min() + || value > std::numeric_limits::max(); + if (isOverflow) + OverFlowChecker::formatOverFlowMessage(value, &valueAsString); + return isOverflow; + } +}; + +template +struct OverFlowChecker + : public OverFlowCheckerBase { + static bool check(const MaxLimitType& value, PyObject *pyIn) + { + std::string valueAsString; + const bool isOverflow = + OverFlowChecker::checkForInternalPyOverflow(pyIn, valueAsString) + || value < 0 + || static_cast(value) > std::numeric_limits::max(); + if (isOverflow) + OverFlowChecker::formatOverFlowMessage(value, &valueAsString); + return isOverflow; + } +}; +template<> +struct OverFlowChecker : + public OverFlowCheckerBase { + static bool check(const PY_LONG_LONG &value, PyObject *pyIn) { + std::string valueAsString; + const bool isOverflow = checkForInternalPyOverflow(pyIn, valueAsString); + if (isOverflow) + OverFlowChecker::formatOverFlowMessage(value, &valueAsString); + return isOverflow; + + } +}; +template<> +struct OverFlowChecker { + static bool check(const double &, PyObject *) { return false; } +}; +template<> +struct OverFlowChecker : + public OverFlowCheckerBase { + static bool check(const double& value, PyObject *) + { + const bool result = value < std::numeric_limits::min() + || value > std::numeric_limits::max(); + if (result) + formatOverFlowMessage(value); + return result; + } +}; + +// Basic primitive type converters --------------------------------------------------------- + +template struct Primitive {}; + +template +struct OnePrimitive +{ + static PyObject* toPython(const void*) { return 0; } + static PythonToCppFunc isConvertible(PyObject*) { return 0; } + static void toCpp(PyObject*, void*) {} + static SbkConverter* createConverter() + { + SbkConverter* converter = Shiboken::Conversions::createConverter(Shiboken::SbkType(), + Primitive::toPython); + Shiboken::Conversions::addPythonToCppValueConversion(converter, + Primitive::toCpp, + Primitive::isConvertible); + return converter; + } +}; +template +struct TwoPrimitive : OnePrimitive +{ + static PythonToCppFunc isOtherConvertible(PyObject*) { return 0; } + static void otherToCpp(PyObject*, void*) {} + static SbkConverter* createConverter() + { + SbkConverter* converter = OnePrimitive::createConverter(); + Shiboken::Conversions::addPythonToCppValueConversion(converter, Primitive::otherToCpp, Primitive::isOtherConvertible); + return converter; + } +}; + +// Integers -------------------------------------------------------------------------------- + +template +struct IntPrimitive : TwoPrimitive +{ + static PyObject* toPython(const void* cppIn) + { + return PyInt_FromLong(*reinterpret_cast(cppIn)); + } + static void toCpp(PyObject* pyIn, void* cppOut) + { + double result = PyFloat_AS_DOUBLE(pyIn); + // If cast to long directly it could overflow silently. + if (OverFlowChecker::check(result, pyIn)) + PyErr_SetObject(PyExc_OverflowError, 0); + *reinterpret_cast(cppOut) = static_cast(result); + } + static PythonToCppFunc isConvertible(PyObject* pyIn) + { + if (PyFloat_Check(pyIn)) + return toCpp; + return 0; + } + static void otherToCpp(PyObject* pyIn, void* cppOut) + { + PY_LONG_LONG result = PyLong_AsLongLong(pyIn); + if (OverFlowChecker::check(result, pyIn)) + PyErr_SetObject(PyExc_OverflowError, 0); + *reinterpret_cast(cppOut) = static_cast(result); + } + static PythonToCppFunc isOtherConvertible(PyObject* pyIn) + { + if (SbkNumber_Check(pyIn)) + return otherToCpp; + return 0; + } +}; +template <> struct Primitive : IntPrimitive {}; +template <> struct Primitive : IntPrimitive {}; +template <> struct Primitive : IntPrimitive {}; +template <> struct Primitive : IntPrimitive {}; + +// Unsigned Long Integers ------------------------------------------------------------------ + +template +struct UnsignedLongPrimitive : IntPrimitive +{ + static PyObject* toPython(const void* cppIn) + { + return PyLong_FromUnsignedLong(*reinterpret_cast(cppIn)); + } +}; +template <> struct Primitive : UnsignedLongPrimitive {}; +template <> struct Primitive : UnsignedLongPrimitive {}; + +// Big integers ---------------------------------------------------------------------------- + +template <> +struct Primitive : OnePrimitive +{ + static PyObject* toPython(const void* cppIn) + { + return PyLong_FromLongLong(*((PY_LONG_LONG*)cppIn)); + } + static void toCpp(PyObject* pyIn, void* cppOut) + { + PY_LONG_LONG result = PyLong_AsLongLong(pyIn); + if (OverFlowChecker::check(result, pyIn)) + PyErr_SetObject(PyExc_OverflowError, 0); + *reinterpret_cast(cppOut) = result; + } + static PythonToCppFunc isConvertible(PyObject* pyIn) + { + if (SbkNumber_Check(pyIn)) + return toCpp; + return 0; + } +}; + +template <> +struct Primitive : OnePrimitive +{ + static PyObject* toPython(const void* cppIn) + { + return PyLong_FromUnsignedLongLong(*((unsigned PY_LONG_LONG*)cppIn)); + } + static void toCpp(PyObject* pyIn, void* cppOut) + { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(pyIn)) { + unsigned PY_LONG_LONG result = PyLong_AsUnsignedLongLong(pyIn); + if (OverFlowChecker::check(result, pyIn)) + PyErr_SetObject(PyExc_OverflowError, 0); + *reinterpret_cast(cppOut) = result; + } + else { + PyErr_SetString(PyExc_TypeError, "Invalid type for unsigned long long conversion"); + } +#else + if (PyInt_Check(pyIn)) { + long result = PyInt_AsLong(pyIn); + if (OverFlowChecker::check(result, pyIn)) + PyErr_SetObject(PyExc_OverflowError, 0); + *reinterpret_cast(cppOut) = + static_cast(result); + } else if (PyLong_Check(pyIn)) { + unsigned PY_LONG_LONG result = PyLong_AsUnsignedLongLong(pyIn); + if (OverFlowChecker::check(result, pyIn)) + PyErr_SetObject(PyExc_OverflowError, 0); + *reinterpret_cast(cppOut) = result; + } else { + PyErr_SetString(PyExc_TypeError, "Invalid type for unsigned long long conversion"); + } +#endif // Python 2 + } + static PythonToCppFunc isConvertible(PyObject* pyIn) + { + if (SbkNumber_Check(pyIn)) + return toCpp; + return 0; + } +}; + +// Floating point -------------------------------------------------------------------------- + +template +struct FloatPrimitive : TwoPrimitive +{ + static PyObject* toPython(const void* cppIn) + { + return PyFloat_FromDouble(*reinterpret_cast(cppIn)); + } + static void toCpp(PyObject* pyIn, void* cppOut) + { + *reinterpret_cast(cppOut) = FLOAT(PyLong_AsLong(pyIn)); + } + static PythonToCppFunc isConvertible(PyObject* pyIn) + { + if (PyInt_Check(pyIn) || PyLong_Check(pyIn)) + return toCpp; + return 0; + } + static void otherToCpp(PyObject* pyIn, void* cppOut) + { + *reinterpret_cast(cppOut) = FLOAT(PyFloat_AsDouble(pyIn)); + } + static PythonToCppFunc isOtherConvertible(PyObject* pyIn) + { + if (SbkNumber_Check(pyIn)) + return otherToCpp; + return 0; + } +}; +template <> struct Primitive : FloatPrimitive {}; +template <> struct Primitive : FloatPrimitive {}; + +// Boolean --------------------------------------------------------------------------------- + +template <> +struct Primitive : OnePrimitive +{ + static PyObject* toPython(const void* cppIn) + { + return PyBool_FromLong(*reinterpret_cast(cppIn)); + } + static PythonToCppFunc isConvertible(PyObject* pyIn) + { + if (SbkNumber_Check(pyIn)) + return toCpp; + return 0; + } + static void toCpp(PyObject* pyIn, void* cppOut) + { + *reinterpret_cast(cppOut) = PyInt_AS_LONG(pyIn) != 0; + } +}; + +// Characters ------------------------------------------------------------------------------ + +template +struct CharPrimitive : IntPrimitive +{ + static void toCpp(PyObject* pyIn, void* cppOut) + { + *reinterpret_cast(cppOut) = CHAR(Shiboken::String::toCString(pyIn)[0]); + } + static PythonToCppFunc isConvertible(PyObject* pyIn) + { + if (Shiboken::String::checkChar(pyIn)) + return toCpp; + return 0; + } + static void otherToCpp(PyObject* pyIn, void* cppOut) + { + PY_LONG_LONG result = PyLong_AsLongLong(pyIn); + if (OverFlowChecker::check(result, pyIn)) + PyErr_SetObject(PyExc_OverflowError, 0); + *reinterpret_cast(cppOut) = CHAR(result); + } + static PythonToCppFunc isOtherConvertible(PyObject* pyIn) + { + if (SbkNumber_Check(pyIn)) + return otherToCpp; + return 0; + } + static SbkConverter* createConverter() + { + SbkConverter* converter = IntPrimitive::createConverter(); + Shiboken::Conversions::addPythonToCppValueConversion(converter, CharPrimitive::otherToCpp, CharPrimitive::isOtherConvertible); + return converter; + } + +}; +template <> struct Primitive : CharPrimitive {}; +template <> struct Primitive : CharPrimitive {}; +template <> struct Primitive : CharPrimitive { + using CharPrimitive::toPython; + static PyObject* toPython(const void* cppIn) { + return Shiboken::String::fromCString((const char*)cppIn, 1); + } +}; + + + +// Strings --------------------------------------------------------------------------------- + +template <> +struct Primitive : TwoPrimitive +{ + static PyObject* toPython(const void* cppIn) + { + if (!cppIn) + Py_RETURN_NONE; + return Shiboken::String::fromCString((const char*)cppIn); + } + static void toCpp(PyObject *, void *cppOut) + { + *((const char**)cppOut) = 0; + } + static PythonToCppFunc isConvertible(PyObject* pyIn) + { + if (pyIn == Py_None) + return toCpp; + return 0; + } + static void otherToCpp(PyObject* pyIn, void* cppOut) + { + *((const char**)cppOut) = (const char*) Shiboken::String::toCString(pyIn); + } + static PythonToCppFunc isOtherConvertible(PyObject* pyIn) + { + if (Shiboken::String::check(pyIn)) + return otherToCpp; + return 0; + } +}; + +template <> +struct Primitive : TwoPrimitive +{ + static PyObject* toPython(const void* cppIn) + { + return Shiboken::String::fromCString(((std::string*)cppIn)->c_str()); + } + static void toCpp(PyObject *, void *cppOut) + { + *((std::string*)cppOut) = std::string(); + } + static PythonToCppFunc isConvertible(PyObject* pyIn) + { + if (pyIn == Py_None) + return toCpp; + return 0; + } + static void otherToCpp(PyObject* pyIn, void* cppOut) + { + *((std::string*)cppOut) = Shiboken::String::toCString(pyIn); + } + static PythonToCppFunc isOtherConvertible(PyObject* pyIn) + { + if (Shiboken::String::check(pyIn)) + return otherToCpp; + return 0; + } +}; + +namespace Shiboken { +namespace Conversions { +SbkConverter *createConverterObject(PyTypeObject *type, + PythonToCppFunc toCppPointerConvFunc, + IsConvertibleToCppFunc toCppPointerCheckFunc, + CppToPythonFunc pointerToPythonFunc, + CppToPythonFunc copyToPythonFunc); +} // namespace Conversions +} // namespace Shiboken +#endif // SBK_CONVERTER_P_H diff --git a/sources/shiboken2/libshiboken/sbkdbg.h b/sources/shiboken2/libshiboken/sbkdbg.h new file mode 100644 index 0000000..c26816b --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkdbg.h @@ -0,0 +1,124 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SBKDBG_H +#define SBKDBG_H + +#include "sbkpython.h" +#include "basewrapper.h" +#include + +#ifndef NOCOLOR + #define COLOR_END "\033[0m" + #define COLOR_WHITE "\033[1;37m" + #define COLOR_YELLOW "\033[1;33m" + #define COLOR_GREEN "\033[0;32m" + #define COLOR_RED "\033[0;31m" +#else + #define COLOR_END "" + #define COLOR_WHITE "" + #define COLOR_YELLOW "" + #define COLOR_GREEN "" + #define COLOR_RED "" +#endif + +#ifndef NDEBUG + +class BaseLogger +{ +public: + BaseLogger(std::ostream& output, const char* function, const char* context) + : m_stream(output), m_function(function), m_context(context) {} + ~BaseLogger() + { + m_stream << std::endl; + } + std::ostream& operator()() { return m_stream; }; + template + std::ostream& operator<<(const T& t) + { + m_stream << '['; + if (m_context[0]) + m_stream << COLOR_GREEN << m_context << COLOR_END << "|"; + return m_stream << COLOR_WHITE << m_function << COLOR_END << "] " << t; + } +private: + std::ostream& m_stream; + const char* m_function; + const char* m_context; +}; + +inline std::ostream& operator<<(std::ostream& out, PyObject* obj) +{ + PyObject* repr = Shiboken::Object::isValid(obj, false) ? PyObject_Repr(obj) : 0; + if (repr) { +#ifdef IS_PY3K + PyObject* str = PyUnicode_AsUTF8String(repr); + Py_DECREF(repr); + repr = str; +#endif + out << PyBytes_AS_STRING(repr); + Py_DECREF(repr); + } else { + out << reinterpret_cast(obj); + } + return out; +} + +class _SbkDbg : public BaseLogger +{ +public: + _SbkDbg(const char* function, const char* context = "") : BaseLogger(std::cout, function, context) {} +}; + +#ifdef __GNUG__ +#define SbkDbg(X) _SbkDbg(__PRETTY_FUNCTION__, X"") +#else +#define SbkDbg(X) _SbkDbg(__FUNCTION__, X"") +#endif + +#else + +struct SbkDbg { + template + SbkDbg& operator<<(const T&) { return *this; } +}; + +#endif +#endif // LOGGER_H diff --git a/sources/shiboken2/libshiboken/sbkenum.cpp b/sources/shiboken2/libshiboken/sbkenum.cpp new file mode 100644 index 0000000..bd007f0 --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkenum.cpp @@ -0,0 +1,673 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "sbkenum.h" +#include "sbkstring.h" +#include "sbkconverter.h" +#include "basewrapper.h" +#include "sbkdbg.h" +#include "autodecref.h" +#include "sbkpython.h" + +#include +#include +#include + +#define SBK_ENUM(ENUM) reinterpret_cast(ENUM) + +extern "C" +{ + +struct SbkEnumTypePrivate +{ + SbkConverter** converterPtr; + SbkConverter* converter; + const char* cppName; +}; + +struct SbkEnumType +{ + PyTypeObject type; +}; + +struct SbkEnumObject +{ + PyObject_HEAD + long ob_value; + PyObject* ob_name; +}; + +static PyObject* SbkEnumObject_repr(PyObject* self) +{ + const SbkEnumObject *enumObj = reinterpret_cast(self); + if (enumObj->ob_name) + return Shiboken::String::fromFormat("%s.%s", (Py_TYPE(self))->tp_name, PyBytes_AS_STRING(enumObj->ob_name)); + else + return Shiboken::String::fromFormat("%s(%ld)", (Py_TYPE(self))->tp_name, enumObj->ob_value); +} + +static PyObject* SbkEnumObject_name(PyObject* self, void*) +{ + SbkEnumObject *enum_self = reinterpret_cast(self); + + if (enum_self->ob_name == NULL) + Py_RETURN_NONE; + + Py_INCREF(enum_self->ob_name); + return enum_self->ob_name; +} + +static PyObject* SbkEnum_tp_new(PyTypeObject *type, PyObject *args, PyObject *) +{ + long itemValue = 0; + if (!PyArg_ParseTuple(args, "|l:__new__", &itemValue)) + return 0; + + SbkEnumObject* self = PyObject_New(SbkEnumObject, type); + if (!self) + return 0; + self->ob_value = itemValue; + PyObject* item = Shiboken::Enum::getEnumItemFromValue(type, itemValue); + if (item) { + self->ob_name = SbkEnumObject_name(item, 0); + Py_XDECREF(item); + } else { + self->ob_name = 0; + } + return reinterpret_cast(self); +} + +/* Notes: + * On Py3k land we use long type when using integer numbers. However, on older + * versions of Python (version 2) we need to convert it to int type, + * respectively. + * + * Thus calling PyInt_FromLong() will result in calling PyLong_FromLong in + * Py3k. + */ +static PyObject* enum_int(PyObject* v) +{ + return PyInt_FromLong(SBK_ENUM(v)->ob_value); +} + +static long getNumberValue(PyObject* v) +{ + PyObject* number = PyNumber_Long(v); + long result = PyLong_AsLong(number); + Py_XDECREF(number); + return result; +} + +static PyObject* enum_and(PyObject* self, PyObject* b) +{ + if (!PyNumber_Check(b)) { + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } + + long valA = SBK_ENUM(self)->ob_value; + long valB = getNumberValue(b); + return PyInt_FromLong(valA & valB); +} + +static PyObject* enum_or(PyObject* self, PyObject* b) +{ + if (!PyNumber_Check(b)) { + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } + + long valA = SBK_ENUM(self)->ob_value; + long valB = getNumberValue(b); + return PyInt_FromLong(valA | valB); +} + +static PyObject* enum_xor(PyObject* self, PyObject* b) +{ + if (!PyNumber_Check(b)) { + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } + + long valA = SBK_ENUM(self)->ob_value; + long valB = getNumberValue(b); + return PyInt_FromLong(valA ^ valB); +} + +static int enum_bool(PyObject* v) +{ + return (SBK_ENUM(v)->ob_value > 0); +} + +static PyObject* enum_add(PyObject* self, PyObject* v) +{ + long valA = SBK_ENUM(self)->ob_value; + long valB = getNumberValue(v); + return PyInt_FromLong(valA + valB); +} + +static PyObject* enum_subtract(PyObject* self, PyObject* v) +{ + long valA = SBK_ENUM(self)->ob_value; + long valB = getNumberValue(v); + return PyInt_FromLong(valA - valB); +} + +static PyObject* enum_multiply(PyObject* self, PyObject* v) +{ + long valA = SBK_ENUM(self)->ob_value; + long valB = getNumberValue(v); + return PyInt_FromLong(valA * valB); +} + +#ifndef IS_PY3K +static PyObject* enum_divide(PyObject* self, PyObject* v) +{ + long valA = SBK_ENUM(self)->ob_value; + long valB = getNumberValue(v); + return PyLong_FromLong(valA / valB); +} +#endif + +static PyObject* enum_richcompare(PyObject* self, PyObject* other, int op) +{ + int result = 0; + if (!PyNumber_Check(other)) { + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } + + long valA = SBK_ENUM(self)->ob_value; + long valB = getNumberValue(other); + + switch (op) { + case Py_EQ: + result = (valA == valB); + break; + case Py_NE: + result = (valA != valB); + break; + case Py_LE: + result = (valA <= valB); + break; + case Py_GE: + result = (valA >= valB); + break; + case Py_LT: + result = (valA < valB); + break; + case Py_GT: + result = (valA > valB); + break; + default: + PyErr_BadArgument(); + return NULL; + } + if (result) + Py_RETURN_TRUE; + else + Py_RETURN_FALSE; +} + +static Py_hash_t enum_hash(PyObject* pyObj) +{ + Py_hash_t val = reinterpret_cast(pyObj)->ob_value; + if (val == -1) + val = -2; + return val; +} + +static PyGetSetDef SbkEnumGetSetList[] = { + {const_cast("name"), &SbkEnumObject_name, 0, 0, 0}, + {0, 0, 0, 0, 0} // Sentinel +}; + +static void SbkEnumTypeDealloc(PyObject* pyObj); +static PyObject* SbkEnumTypeTpNew(PyTypeObject* metatype, PyObject* args, PyObject* kwds); + +static PyType_Slot SbkEnumType_Type_slots[] = { + {Py_tp_dealloc, (void *)SbkEnumTypeDealloc}, + {Py_nb_add, (void *)enum_add}, + {Py_nb_subtract, (void *)enum_subtract}, + {Py_nb_multiply, (void *)enum_multiply}, +#ifndef IS_PY3K + {Py_nb_divide, (void *)enum_divide}, +#endif + {Py_nb_positive, (void *)enum_int}, +#ifdef IS_PY3K + {Py_nb_bool, (void *)enum_bool}, +#else + {Py_nb_nonzero, (void *)enum_bool}, + {Py_nb_long, (void *)enum_int}, +#endif + {Py_nb_and, (void *)enum_and}, + {Py_nb_xor, (void *)enum_xor}, + {Py_nb_or, (void *)enum_or}, + {Py_nb_int, (void *)enum_int}, + {Py_nb_index, (void *)enum_int}, + {Py_tp_base, (void *)&PyType_Type}, + {Py_tp_alloc, (void *)PyType_GenericAlloc}, + {Py_tp_new, (void *)SbkEnumTypeTpNew}, + {Py_tp_free, (void *)PyObject_GC_Del}, + {0, 0} +}; +static PyType_Spec SbkEnumType_Type_spec = { + "Shiboken.EnumType", + 0, // filled in later + sizeof(PyMemberDef), + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_CHECKTYPES, + SbkEnumType_Type_slots, +}; + + +PyTypeObject *SbkEnumType_TypeF(void) +{ + static PyTypeObject *type = nullptr; + if (!type) { + SbkEnumType_Type_spec.basicsize = + PepHeapType_SIZE + sizeof(SbkEnumTypePrivate); + type = (PyTypeObject *)PyType_FromSpec(&SbkEnumType_Type_spec); + } + return type; +} + +void SbkEnumTypeDealloc(PyObject* pyObj) +{ + SbkEnumType* sbkType = reinterpret_cast(pyObj); + + PyObject_GC_UnTrack(pyObj); +#ifndef Py_LIMITED_API + Py_TRASHCAN_SAFE_BEGIN(pyObj); +#endif + if (PepType_SETP(sbkType)->converter) { + Shiboken::Conversions::deleteConverter(PepType_SETP(sbkType)->converter); + } +#ifndef Py_LIMITED_API + Py_TRASHCAN_SAFE_END(pyObj); +#endif +} + +PyObject* SbkEnumTypeTpNew(PyTypeObject* metatype, PyObject* args, PyObject* kwds) +{ + newfunc type_new = reinterpret_cast(PyType_GetSlot(&PyType_Type, Py_tp_new)); + SbkEnumType *newType = reinterpret_cast(type_new(metatype, args, kwds)); + if (!newType) + return 0; + return reinterpret_cast(newType); +} + +} // extern "C" + +namespace Shiboken { + +class DeclaredEnumTypes +{ +public: + DeclaredEnumTypes(); + ~DeclaredEnumTypes(); + static DeclaredEnumTypes& instance(); + void addEnumType(PyTypeObject* type); + +private: + DeclaredEnumTypes(const DeclaredEnumTypes&); + DeclaredEnumTypes& operator=(const DeclaredEnumTypes&); + std::list m_enumTypes; +}; + +namespace Enum { + +bool check(PyObject* pyObj) +{ + return Py_TYPE(Py_TYPE(pyObj)) == SbkEnumType_TypeF(); +} + +PyObject* getEnumItemFromValue(PyTypeObject* enumType, long itemValue) +{ + PyObject *key, *value; + Py_ssize_t pos = 0; + PyObject *values = PyDict_GetItemString(enumType->tp_dict, const_cast("values")); + + while (PyDict_Next(values, &pos, &key, &value)) { + SbkEnumObject *obj = reinterpret_cast(value); + if (obj->ob_value == itemValue) { + Py_INCREF(obj); + return value; + } + } + return 0; +} + +static PyTypeObject* createEnum(const char* fullName, const char* cppName, const char* shortName, PyTypeObject* flagsType) +{ + PyTypeObject* enumType = newTypeWithName(fullName, cppName, flagsType); + if (PyType_Ready(enumType) < 0) + return 0; + return enumType; +} + +PyTypeObject* createGlobalEnum(PyObject* module, const char* name, const char* fullName, const char* cppName, PyTypeObject* flagsType) +{ + PyTypeObject* enumType = createEnum(fullName, cppName, name, flagsType); + if (enumType && PyModule_AddObject(module, name, reinterpret_cast(enumType)) < 0) + return 0; + if (flagsType && PyModule_AddObject(module, PepType_GetNameStr(flagsType), + reinterpret_cast(flagsType)) < 0) + return 0; + return enumType; +} + +PyTypeObject* createScopedEnum(SbkObjectType* scope, const char* name, const char* fullName, const char* cppName, PyTypeObject* flagsType) +{ + PyTypeObject* enumType = createEnum(fullName, cppName, name, flagsType); + if (enumType && PyDict_SetItemString(reinterpret_cast(scope)->tp_dict, name, + reinterpret_cast(enumType)) < 0) + return nullptr; + if (flagsType && PyDict_SetItemString(reinterpret_cast(scope)->tp_dict, + PepType_GetNameStr(flagsType), + reinterpret_cast(flagsType)) < 0) + return nullptr; + return enumType; +} + +static PyObject* createEnumItem(PyTypeObject* enumType, const char* itemName, long itemValue) +{ + PyObject* enumItem = newItem(enumType, itemValue, itemName); + if (PyDict_SetItemString(enumType->tp_dict, itemName, enumItem) < 0) + return 0; + Py_DECREF(enumItem); + return enumItem; +} + +bool createGlobalEnumItem(PyTypeObject* enumType, PyObject* module, const char* itemName, long itemValue) +{ + PyObject* enumItem = createEnumItem(enumType, itemName, itemValue); + if (enumItem) { + if (PyModule_AddObject(module, itemName, enumItem) < 0) + return false; + // @TODO This Py_DECREF causes crashes on exit with a debug Python interpreter, essentially + // causing a use-after-free in the GC. This is now commented out to cause a memory leak + // instead of a crash. Proper memory management of Enum types and items should be + // implemented. See PYSIDE-488. This will require proper allocation and deallocation of + // the underlying Enum PyHeapType, which is currently just deallocated at application exit. + // Py_DECREF(enumItem); + return true; + } + return false; +} + +bool createScopedEnumItem(PyTypeObject *enumType, PyTypeObject *scope, + const char *itemName, long itemValue) +{ + if (PyObject *enumItem = createEnumItem(enumType, itemName, itemValue)) { + if (PyDict_SetItemString(reinterpret_cast(scope)->tp_dict, itemName, enumItem) < 0) + return false; + Py_DECREF(enumItem); + return true; + } + return false; +} + +bool createScopedEnumItem(PyTypeObject* enumType, SbkObjectType* scope, const char* itemName, long itemValue) +{ + return createScopedEnumItem(enumType, reinterpret_cast(scope), itemName, itemValue); +} + +PyObject * +newItem(PyTypeObject *enumType, long itemValue, const char *itemName) +{ + bool newValue = true; + SbkEnumObject* enumObj; + if (!itemName) { + enumObj = reinterpret_cast( + getEnumItemFromValue(enumType, itemValue)); + if (enumObj) + return reinterpret_cast(enumObj); + + newValue = false; + } + + enumObj = PyObject_New(SbkEnumObject, enumType); + if (!enumObj) + return 0; + + enumObj->ob_name = itemName ? PyBytes_FromString(itemName) : 0; + enumObj->ob_value = itemValue; + + if (newValue) { + PyObject* values = PyDict_GetItemString(enumType->tp_dict, const_cast("values")); + if (!values) { + values = PyDict_New(); + PyDict_SetItemString(enumType->tp_dict, const_cast("values"), values); + Py_DECREF(values); // ^ values still alive, because setitemstring incref it + } + PyDict_SetItemString(values, itemName, reinterpret_cast(enumObj)); + } + + return reinterpret_cast(enumObj); +} + +static PyType_Slot SbkNewType_slots[] = { + {Py_tp_repr, (void *)SbkEnumObject_repr}, + {Py_tp_str, (void *)SbkEnumObject_repr}, + {Py_tp_getset, (void *)SbkEnumGetSetList}, + {Py_tp_new, (void *)SbkEnum_tp_new}, + {Py_nb_add, (void *)enum_add}, + {Py_nb_subtract, (void *)enum_subtract}, + {Py_nb_multiply, (void *)enum_multiply}, +#ifndef IS_PY3K + {Py_nb_divide, (void *)enum_divide}, +#endif + {Py_nb_positive, (void *)enum_int}, +#ifdef IS_PY3K + {Py_nb_bool, (void *)enum_bool}, +#else + {Py_nb_nonzero, (void *)enum_bool}, + {Py_nb_long, (void *)enum_int}, +#endif + {Py_nb_and, (void *)enum_and}, + {Py_nb_xor, (void *)enum_xor}, + {Py_nb_or, (void *)enum_or}, + {Py_nb_int, (void *)enum_int}, + {Py_nb_index, (void *)enum_int}, + {Py_tp_richcompare, (void *)enum_richcompare}, + {Py_tp_hash, (void *)enum_hash}, + {Py_tp_dealloc, (void *)SbkDummyDealloc}, + {0, 0} +}; +static PyType_Spec SbkNewType_spec = { + "missing Enum name", // to be inserted later + sizeof(SbkEnumObject), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES, + SbkNewType_slots, +}; + +static void +copyNumberMethods(PyTypeObject *flagsType, + PyType_Slot number_slots[], + int *pidx) +{ + int idx = *pidx; +#ifdef IS_PY3K +# define SLOT slot +#else +# define SLOT slot_ +#endif +#define PUT_SLOT(name) \ + number_slots[idx].SLOT = (name); \ + number_slots[idx].pfunc = PyType_GetSlot(flagsType, (name)); \ + ++idx; + + PUT_SLOT(Py_nb_absolute); + PUT_SLOT(Py_nb_add); + PUT_SLOT(Py_nb_and); +#ifdef IS_PY3K + PUT_SLOT(Py_nb_bool); +#else + PUT_SLOT(Py_nb_nonzero); +#endif + PUT_SLOT(Py_nb_divmod); + PUT_SLOT(Py_nb_float); + PUT_SLOT(Py_nb_floor_divide); + PUT_SLOT(Py_nb_index); + PUT_SLOT(Py_nb_inplace_add); + PUT_SLOT(Py_nb_inplace_and); + PUT_SLOT(Py_nb_inplace_floor_divide); + PUT_SLOT(Py_nb_inplace_lshift); + PUT_SLOT(Py_nb_inplace_multiply); + PUT_SLOT(Py_nb_inplace_or); + PUT_SLOT(Py_nb_inplace_power); + PUT_SLOT(Py_nb_inplace_remainder); + PUT_SLOT(Py_nb_inplace_rshift); + PUT_SLOT(Py_nb_inplace_subtract); + PUT_SLOT(Py_nb_inplace_true_divide); + PUT_SLOT(Py_nb_inplace_xor); + PUT_SLOT(Py_nb_int); + PUT_SLOT(Py_nb_invert); + PUT_SLOT(Py_nb_lshift); + PUT_SLOT(Py_nb_multiply); + PUT_SLOT(Py_nb_negative); + PUT_SLOT(Py_nb_or); + PUT_SLOT(Py_nb_positive); + PUT_SLOT(Py_nb_power); + PUT_SLOT(Py_nb_remainder); + PUT_SLOT(Py_nb_rshift); + PUT_SLOT(Py_nb_subtract); + PUT_SLOT(Py_nb_true_divide); + PUT_SLOT(Py_nb_xor); +#ifndef IS_PY3K + PUT_SLOT(Py_nb_long); + PUT_SLOT(Py_nb_divide); +#endif +#undef PUT_SLOT + *pidx = idx; +} + +PyTypeObject * +newTypeWithName(const char* name, + const char* cppName, + PyTypeObject *numbers_fromFlag) +{ + // Careful: PyType_FromSpec does not allocate the string. + PyType_Slot newslots[99] = {}; // enough but not too big for the stack + PyType_Spec *newspec = new PyType_Spec; + newspec->name = strdup(name); + newspec->basicsize = SbkNewType_spec.basicsize; + newspec->itemsize = SbkNewType_spec.itemsize; + newspec->flags = SbkNewType_spec.flags; + // we must append all the number methods, so rebuild everything: + int idx = 0; + while (SbkNewType_slots[idx].SLOT) { + newslots[idx].SLOT = SbkNewType_slots[idx].SLOT; + newslots[idx].pfunc = SbkNewType_slots[idx].pfunc; + ++idx; + } + if (numbers_fromFlag) + copyNumberMethods(numbers_fromFlag, newslots, &idx); + newspec->slots = newslots; + PyTypeObject *type = reinterpret_cast(PyType_FromSpec(newspec)); + Py_TYPE(type) = SbkEnumType_TypeF(); + Py_INCREF(Py_TYPE(type)); + + SbkEnumType* enumType = reinterpret_cast(type); + PepType_SETP(enumType)->cppName = cppName; + PepType_SETP(enumType)->converterPtr = &PepType_SETP(enumType)->converter; + DeclaredEnumTypes::instance().addEnumType(type); + return type; +} + +const char* getCppName(PyTypeObject* enumType) +{ + assert(Py_TYPE(enumType) == SbkEnumType_TypeF()); + return PepType_SETP(reinterpret_cast(enumType))->cppName; +} + +long int getValue(PyObject* enumItem) +{ + assert(Shiboken::Enum::check(enumItem)); + return reinterpret_cast(enumItem)->ob_value; +} + +void setTypeConverter(PyTypeObject* enumType, SbkConverter* converter) +{ + //reinterpret_cast(enumType)->converter = converter; + *PepType_SGTP(enumType)->converter = converter; +} + +SbkConverter* getTypeConverter(PyTypeObject* enumType) +{ + //return reinterpret_cast(enumType)->converter; + return *PepType_SGTP(enumType)->converter; +} + +} // namespace Enum + +DeclaredEnumTypes& DeclaredEnumTypes::instance() +{ + static DeclaredEnumTypes me; + return me; +} + +DeclaredEnumTypes::DeclaredEnumTypes() +{ +} + +DeclaredEnumTypes::~DeclaredEnumTypes() +{ + std::list::const_iterator it = m_enumTypes.begin(); + for (; it != m_enumTypes.end(); ++it) { + /* + * PYSIDE-595: This was "delete *it;" before introducing 'PyType_FromSpec'. + * XXX what should I do now? + * Refcounts in tests are 30 or 0 at end. + * When I add the default tp_dealloc, we get negative refcounts! + * So right now I am doing nothing. Surely wrong but no crash. + * See also the comment in function 'createGlobalEnumItem'. + */ + //fprintf(stderr, "ttt %d %s\n", Py_REFCNT(*it), *it->tp_name); + } + m_enumTypes.clear(); +} + +void DeclaredEnumTypes::addEnumType(PyTypeObject* type) +{ + m_enumTypes.push_back(type); +} + +} diff --git a/sources/shiboken2/libshiboken/sbkenum.h b/sources/shiboken2/libshiboken/sbkenum.h new file mode 100644 index 0000000..c1ec7c4 --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkenum.h @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SBKENUM_H +#define SBKENUM_H + +#include "sbkpython.h" +#include "shibokenmacros.h" + +extern "C" +{ + +extern LIBSHIBOKEN_API PyTypeObject *SbkEnumType_TypeF(void); +struct SbkObjectType; +struct SbkConverter; +struct SbkEnumType; +struct SbkEnumTypePrivate; + +} // extern "C" + +namespace Shiboken +{ + +inline bool isShibokenEnum(PyObject* pyObj) +{ + return Py_TYPE(Py_TYPE(pyObj)) == SbkEnumType_TypeF(); +} + +namespace Enum +{ + LIBSHIBOKEN_API bool check(PyObject* obj); + /** + * Creates a new enum type (and its flags type, if any is given) + * and registers it to Python and adds it to \p module. + * \param module Module to where the new enum type will be added. + * \param name Name of the enum. + * \param fullName Name of the enum that includes all scope information (e.g.: "module.Enum"). + * \param cppName Full qualified C++ name of the enum. + * \param flagsType Optional Python type for the flags associated with the enum. + * \return The new enum type or NULL if it fails. + */ + LIBSHIBOKEN_API PyTypeObject* createGlobalEnum(PyObject* module, + const char* name, + const char* fullName, + const char* cppName, + PyTypeObject* flagsType = 0); + /// This function does the same as createGlobalEnum, but adds the enum to a Shiboken type or namespace. + LIBSHIBOKEN_API PyTypeObject* createScopedEnum(SbkObjectType* scope, + const char* name, + const char* fullName, + const char* cppName, + PyTypeObject* flagsType = 0); + + /** + * Creates a new enum item for a given enum type and adds it to \p module. + * \param enumType Enum type to where the new enum item will be added. + * \param module Module to where the enum type of the new enum item belongs. + * \param itemName Name of the enum item. + * \param itemValue Numerical value of the enum item. + * \return true if everything goes fine, false if it fails. + */ + LIBSHIBOKEN_API bool createGlobalEnumItem(PyTypeObject* enumType, PyObject* module, const char* itemName, long itemValue); + /// This function does the same as createGlobalEnumItem, but adds the enum to a Shiboken type or namespace. + LIBSHIBOKEN_API bool createScopedEnumItem(PyTypeObject *enumType, PyTypeObject *scope, + const char *itemName, long itemValue); + LIBSHIBOKEN_API bool createScopedEnumItem(PyTypeObject* enumType, SbkObjectType* scope, const char* itemName, long itemValue); + + LIBSHIBOKEN_API PyObject* newItem(PyTypeObject* enumType, long itemValue, const char* itemName = 0); + + LIBSHIBOKEN_API PyTypeObject* newTypeWithName(const char* name, const char* cppName, + PyTypeObject *numbers_fromFlag=nullptr); + LIBSHIBOKEN_API const char* getCppName(PyTypeObject* type); + + LIBSHIBOKEN_API long getValue(PyObject* enumItem); + LIBSHIBOKEN_API PyObject* getEnumItemFromValue(PyTypeObject* enumType, long itemValue); + + /// Sets the enum's type converter. + LIBSHIBOKEN_API void setTypeConverter(PyTypeObject* enumType, SbkConverter* converter); + /// Returns the converter assigned to the enum \p type. + LIBSHIBOKEN_API SbkConverter* getTypeConverter(PyTypeObject* enumType); +} + +} // namespace Shiboken + +#endif // SKB_PYENUM_H diff --git a/sources/shiboken2/libshiboken/sbkmodule.cpp b/sources/shiboken2/libshiboken/sbkmodule.cpp new file mode 100644 index 0000000..a29ec38 --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkmodule.cpp @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "sbkmodule.h" +#include "basewrapper.h" +#include "bindingmanager.h" +#include + +/// This hash maps module objects to arrays of Python types. +typedef std::unordered_map ModuleTypesMap; + +/// This hash maps module objects to arrays of converters. +typedef std::unordered_map ModuleConvertersMap; + +/// All types produced in imported modules are mapped here. +static ModuleTypesMap moduleTypes; +static ModuleConvertersMap moduleConverters; + +namespace Shiboken +{ +namespace Module +{ + +PyObject* import(const char* moduleName) +{ + PyObject* sysModules = PyImport_GetModuleDict(); + PyObject* module = PyDict_GetItemString(sysModules, moduleName); + if (module) + Py_INCREF(module); + else + module = PyImport_ImportModule(moduleName); + + if (!module) + PyErr_Format(PyExc_ImportError,"could not import module '%s'", moduleName); + + return module; +} + +PyObject* create(const char* moduleName, void* moduleData) +{ + Shiboken::init(); +#ifndef IS_PY3K + return Py_InitModule(moduleName, reinterpret_cast(moduleData)); +#else + return PyModule_Create(reinterpret_cast(moduleData)); +#endif +} + +void registerTypes(PyObject* module, PyTypeObject** types) +{ + ModuleTypesMap::iterator iter = moduleTypes.find(module); + if (iter == moduleTypes.end()) + moduleTypes.insert(std::make_pair(module, types)); +} + +PyTypeObject** getTypes(PyObject* module) +{ + ModuleTypesMap::iterator iter = moduleTypes.find(module); + return (iter == moduleTypes.end()) ? 0 : iter->second; +} + +void registerTypeConverters(PyObject* module, SbkConverter** converters) +{ + ModuleConvertersMap::iterator iter = moduleConverters.find(module); + if (iter == moduleConverters.end()) + moduleConverters.insert(std::make_pair(module, converters)); +} + +SbkConverter** getTypeConverters(PyObject* module) +{ + ModuleConvertersMap::iterator iter = moduleConverters.find(module); + return (iter == moduleConverters.end()) ? 0 : iter->second; +} + +} } // namespace Shiboken::Module diff --git a/sources/shiboken2/libshiboken/sbkmodule.h b/sources/shiboken2/libshiboken/sbkmodule.h new file mode 100644 index 0000000..659c41c --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkmodule.h @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SBK_MODULE_H +#define SBK_MODULE_H + +#include "sbkpython.h" +#include "shibokenmacros.h" + +#if PY_MAJOR_VERSION >= 3 + #define SBK_MODULE_INIT_ERROR 0 + #define SBK_MODULE_INIT_FUNCTION_BEGIN(ModuleName) \ + extern "C" SBK_EXPORT_MODULE PyObject* PyInit_##ModuleName() { + + #define SBK_MODULE_INIT_FUNCTION_END \ + return module; } +#else + #define SBK_MODULE_INIT_ERROR + #define SBK_MODULE_INIT_FUNCTION_BEGIN(ModuleName) \ + extern "C" SBK_EXPORT_MODULE void init##ModuleName() { + + #define SBK_MODULE_INIT_FUNCTION_END \ + } +#endif + +extern "C" +{ +struct SbkConverter; +} + +namespace Shiboken { +namespace Module { + +/** + * Imports and returns the module named \p moduleName, or a NULL pointer in case of failure. + * If the module is already imported, it increments its reference count before returning it. + * \returns the module specified in \p moduleName or NULL if an error occurs. + */ +LIBSHIBOKEN_API PyObject* import(const char* moduleName); + +/** + * Creates a new Python module named \p moduleName using the information passed in \p moduleData. + * In fact, \p moduleData expects a "PyMethodDef*" object, but that's for Python 2. A void* + * was preferred to make this work with future Python 3 support. + * \returns a newly created module. + */ +LIBSHIBOKEN_API PyObject* create(const char* moduleName, void* moduleData); + +/** + * Registers the list of types created by \p module. + * \param module Module where the types were created. + * \param types Array of PyTypeObject* objects representing the types created on \p module. + */ +LIBSHIBOKEN_API void registerTypes(PyObject* module, PyTypeObject** types); + +/** + * Retrieves the array of types. + * \param module Module where the types were created. + * \returns A pointer to the PyTypeObject* array of types. + */ +LIBSHIBOKEN_API PyTypeObject** getTypes(PyObject* module); + +/** + * Registers the list of converters created by \p module for non-wrapper types. + * \param module Module where the converters were created. + * \param converters Array of SbkConverter* objects representing the converters created on \p module. + */ +LIBSHIBOKEN_API void registerTypeConverters(PyObject* module, SbkConverter** converters); + +/** + * Retrieves the array of converters. + * \param module Module where the converters were created. + * \returns A pointer to the SbkConverter* array of converters. + */ +LIBSHIBOKEN_API SbkConverter** getTypeConverters(PyObject* module); + +} } // namespace Shiboken::Module + +#endif // SBK_MODULE_H diff --git a/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp b/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp new file mode 100644 index 0000000..8bc6807 --- /dev/null +++ b/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp @@ -0,0 +1,308 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "sbkarrayconverter.h" +#include "helper.h" +#include "sbkconverter.h" +#include "sbkconverter_p.h" +#include "sbkarrayconverter_p.h" + +#include + +#include +#include +#include + +enum { debugNumPy = 0 }; + +struct TypeCharMapping +{ + NPY_TYPES type; + const char *name; +}; + +static const TypeCharMapping typeCharMappings[] = { +{NPY_BYTE, "NPY_BYTE"}, +{NPY_UBYTE, "NPY_UBYTE"}, +{NPY_SHORT, "NPY_SHORT"}, +{NPY_USHORT, "NPY_USHORT"}, +{NPY_INT, "NPY_INT"}, +{NPY_UINT, "NPY_UINT"}, +{NPY_LONG, "NPY_LONG"}, +{NPY_ULONG, "NPY_ULONG"}, +{NPY_LONGLONG, "NPY_LONGLONG"}, +{NPY_ULONGLONG, "NPY_ULONGLONG"}, +{NPY_FLOAT, "NPY_FLOAT"}, +{NPY_DOUBLE, "NPY_DOUBLE"} +}; + +const char *npTypeName(npy_intp t) +{ + const TypeCharMapping *end = typeCharMappings + sizeof(typeCharMappings) / sizeof(typeCharMappings[0]); + const TypeCharMapping *result = + std::find_if(typeCharMappings, end, + [t] (const TypeCharMapping &m) { return m.type == t; }); + return result != end ? result->name : nullptr; +} + +std::ostream &operator<<(std::ostream &str, PyArrayObject *o) +{ + str << "PyArrayObject("; + if (o) { + const npy_intp npType = PyArray_TYPE(o); + if (const char *name = npTypeName(npType)) + str << name; + else + str << "type=" << npType; + const int nDim = PyArray_NDIM(o); + const npy_intp *dims = PyArray_DIMS(o); + for (int d = 0; d < nDim; ++d) + str << '[' << dims[d] << ']'; + str << ", "; + const int flags = PyArray_FLAGS(o); + if ((flags & NPY_ARRAY_C_CONTIGUOUS) != 0) + str << " NPY_ARRAY_C_CONTIGUOUS"; + if ((flags & NPY_ARRAY_F_CONTIGUOUS) != 0) + str << " NPY_ARRAY_F_CONTIGUOUS"; + if ((flags & NPY_ARRAY_OWNDATA) != 0) + str << " NPY_ARRAY_OWNDATA"; + if ((flags & NPY_ARRAY_FORCECAST) != 0) + str << " NPY_ARRAY_FORCECAST"; + if ((flags & NPY_ARRAY_ENSURECOPY) != 0) + str << " NPY_ARRAY_ENSURECOPY"; + if ((flags & NPY_ARRAY_ENSUREARRAY) != 0) + str << " NPY_ARRAY_ENSUREARRAY"; + if ((flags & NPY_ARRAY_ELEMENTSTRIDES) != 0) + str << " NPY_ARRAY_ELEMENTSTRIDES"; + if ((flags & NPY_ARRAY_ALIGNED) != 0) + str << " NPY_ARRAY_ALIGNED"; + if ((flags & NPY_ARRAY_NOTSWAPPED) != 0) + str << " NPY_ARRAY_NOTSWAPPED"; + if ((flags & NPY_ARRAY_WRITEABLE) != 0) + str << " NPY_ARRAY_WRITEABLE"; + if ((flags & NPY_ARRAY_UPDATEIFCOPY) != 0) + str << " NPY_ARRAY_UPDATEIFCOPY"; + } else { + str << '0'; + } + str << ')'; + return str; +} + +namespace Shiboken { +namespace Conversions { + +// Internals from sbkarrayconverter.cpp +SbkArrayConverter *createArrayConverter(IsArrayConvertibleToCppFunc toCppCheckFunc); +void setArrayTypeConverter(int index, int dimension, SbkArrayConverter *c); +SbkArrayConverter *unimplementedArrayConverter(); + +template +static bool isPrimitiveArray(PyObject *pyIn, int expectedNpType) +{ + if (!PyArray_Check(pyIn)) + return false; + PyArrayObject *pya = reinterpret_cast(pyIn); + if (debugNumPy) { + std::cerr << __FUNCTION__ << "(expectedNpType=" << expectedNpType; + if (const char *name = npTypeName(expectedNpType)) + std::cerr << " (" << name << ')'; + std::cerr << ' ' << pya << '\n'; + } + + const int dim = PyArray_NDIM(pya); + if (dim != dimension) { + warning(PyExc_RuntimeWarning, 0, + "%d dimensional numpy array passed to a function expecting a %d dimensional array.", + dim, dimension); + return false; + } + if ((PyArray_FLAGS(pya) & NPY_ARRAY_C_CONTIGUOUS) == 0) { + warning(PyExc_RuntimeWarning, 0, + "Cannot handle numpy arrays that do not have NPY_ARRAY_C_CONTIGUOUS set."); + return false; + } + const int actualNpType = PyArray_TYPE(pya); + if (actualNpType != expectedNpType) { + const char *actualName = npTypeName(actualNpType); + const char *expectedName = npTypeName(expectedNpType); + warning(PyExc_RuntimeWarning, 0, + "A numpy array of type %d (%s) was passed to a function expecting type %d (%s).", + actualNpType, actualName ? actualName : "", + expectedNpType, expectedName ? expectedName : ""); + return false; + } + return true; +} + +static inline bool primitiveArrayCheck1(PyObject *pyIn, int expectedNpType, int expectedSize) +{ + if (!isPrimitiveArray<1>(pyIn, expectedNpType)) + return false; + if (expectedSize >= 0) { + PyArrayObject *pya = reinterpret_cast(pyIn); + const int size = int(PyArray_DIMS(pya)[0]); + if (size < expectedSize) { + warning(PyExc_RuntimeWarning, 0, "A numpy array of size %d was passed to a function expects %d.", + size, expectedSize); + return false; + } + } + return true; +} + +// Convert one-dimensional array +template +static void convertArray1(PyObject *pyIn, void *cppOut) +{ + ArrayHandle *handle = reinterpret_cast *>(cppOut); + PyArrayObject *pya = reinterpret_cast(pyIn); + const npy_intp size = PyArray_DIMS(pya)[0]; + if (debugNumPy) + std::cerr << __FUNCTION__ << ' ' << size << '\n'; + handle->setData(reinterpret_cast(PyArray_DATA(pya)), size_t(size)); +} + +// Convert 2 dimensional array +template +static void convertArray2(PyObject *pyIn, void *cppOut) +{ + typedef typename Array2Handle::RowType RowType; + Array2Handle *handle = reinterpret_cast *>(cppOut); + PyArrayObject *pya = reinterpret_cast(pyIn); + handle->setData(reinterpret_cast(PyArray_DATA(pya))); +} + +template +static PythonToCppFunc checkArray1(PyObject *pyIn, int dim1, int /* dim2 */) +{ + return primitiveArrayCheck1(pyIn, NumPyType, dim1) ? convertArray1 : nullptr; +} + +static inline bool primitiveArrayCheck2(PyObject *pyIn, int expectedNpType, int expectedDim1, int expectedDim2) +{ + if (!isPrimitiveArray<2>(pyIn, expectedNpType)) + return false; + if (expectedDim2 >= 0) { + PyArrayObject *pya = reinterpret_cast(pyIn); + const int dim1 = int(PyArray_DIMS(pya)[0]); + const int dim2 = int(PyArray_DIMS(pya)[1]); + if (dim1 != expectedDim1 || dim2 != expectedDim2) { + warning(PyExc_RuntimeWarning, 0, "A numpy array of size %dx%d was passed to a function that expects %dx%d.", + dim1, dim2, expectedDim1, expectedDim2); + return false; + } + } + return true; +} + +template +static PythonToCppFunc checkArray2(PyObject *pyIn, int dim1, int dim2) +{ + return primitiveArrayCheck2(pyIn, NumPyType, dim1, dim2) ? convertArray2 : nullptr; +} + +template +static void setOrExtendArrayConverter(int dimension, IsArrayConvertibleToCppFunc toCppCheckFunc) +{ + SbkArrayConverter *arrayConverter = ArrayTypeConverter(dimension); + if (arrayConverter == unimplementedArrayConverter()) { + arrayConverter = createArrayConverter(toCppCheckFunc); + setArrayTypeConverter(ArrayTypeIndex::index, dimension, arrayConverter); + } else { + arrayConverter->toCppConversions.push_back(toCppCheckFunc); + } +} + +// Extend the converters for primitive type one-dimensional arrays by NumPy ones. +template +static inline void extendArrayConverter1() +{ + setOrExtendArrayConverter(1, checkArray1); +} + +// Extend the converters for primitive type one-dimensional arrays by NumPy ones. +template +static inline void extendArrayConverter2() +{ + setOrExtendArrayConverter(2, checkArray2); +} + +void initNumPyArrayConverters() +{ + // Expanded from macro "import_array" in __multiarray_api.h + // Make sure to read about the magic defines PY_ARRAY_UNIQUE_SYMBOL etc., + // when changing this or spreading the code over several source files. + if (_import_array() < 0) { + if (debugNumPy) + PyErr_Print(); + PyErr_Clear(); + return; + } + // Extend the converters for primitive types by NumPy ones. + extendArrayConverter1(); + extendArrayConverter2(); + extendArrayConverter1(); + extendArrayConverter2(); + extendArrayConverter1(); + extendArrayConverter2(); + extendArrayConverter1(); + extendArrayConverter2(); + extendArrayConverter1(); + extendArrayConverter2(); + extendArrayConverter1(); + if (sizeof(long) == 8) { // UNIX/LP64: ints typically come as long + extendArrayConverter1(); + extendArrayConverter2(); + extendArrayConverter1(); + extendArrayConverter2(); + } else if (sizeof(long) == sizeof(int)) { + extendArrayConverter1(); + extendArrayConverter1(); + extendArrayConverter2(); + extendArrayConverter2(); + } + extendArrayConverter1(); + extendArrayConverter2(); + extendArrayConverter1(); + extendArrayConverter2(); +} + +} // namespace Conversions +} // namespace Shiboken diff --git a/sources/shiboken2/libshiboken/sbkpython.h b/sources/shiboken2/libshiboken/sbkpython.h new file mode 100644 index 0000000..29e2560 --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkpython.h @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SBKPYTHON_H +#define SBKPYTHON_H + +#include "sbkversion.h" + +/* + * Python 2 has function _Py_Mangle directly in Python.h . + * This creates wrong language binding unless we define 'extern "C"' here. + */ +extern "C" { +#include +} +#include +// Now we have the usual variables from Python.h . +#include "python25compat.h" +#include "shibokenmacros.h" +#include "pep384impl.h" +#include "typespec.h" + +#if PY_MAJOR_VERSION >= 3 + #define IS_PY3K + + #define PyInt_Type PyLong_Type + #define PyInt_Check PyLong_Check + #define PyInt_CheckExact PyLong_CheckExact + #define PyInt_FromString PyLong_FromString + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsUnsignedLongLongMask PyLong_AsLongLong + #define PyInt_FromLong PyLong_FromLong + #define PyInt_AsLong PyLong_AsLong + #define SbkNumber_Check PyNumber_Check + #define Py_TPFLAGS_CHECKTYPES 0 + + #define SBK_NB_BOOL(x) (x).nb_bool + #define SBK_PyMethod_New PyMethod_New + #define PyInt_AsSsize_t(x) PyLong_AsSsize_t(x) + #define PyString_Type PyUnicode_Type + + // In Python 3, Py_TPFLAGS_DEFAULT contains Py_TPFLAGS_HAVE_VERSION_TAG, + // which will trigger the attribute cache, which is not intended in Qt for Python. + // Use a customized Py_TPFLAGS_DEFAULT by defining Py_TPFLAGS_HAVE_VERSION_TAG = 0. + #undef Py_TPFLAGS_HAVE_VERSION_TAG + #define Py_TPFLAGS_HAVE_VERSION_TAG (0) + +#else + // Note: if there wasn't for the old-style classes, only a PyNumber_Check would suffice. + #define SbkNumber_Check(X) \ + (PyNumber_Check(X) && (!PyInstance_Check(X) || PyObject_HasAttrString(X, "__trunc__"))) + #define SBK_NB_BOOL(x) (x).nb_nonzero + #define SBK_PyMethod_New(X, Y) PyMethod_New(X, Y, reinterpret_cast(Py_TYPE(Y))) + + #define Py_hash_t long +#endif + +#endif diff --git a/sources/shiboken2/libshiboken/sbkstring.cpp b/sources/shiboken2/libshiboken/sbkstring.cpp new file mode 100644 index 0000000..6ca35f1 --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkstring.cpp @@ -0,0 +1,208 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "sbkstring.h" +#include "autodecref.h" + +namespace Shiboken +{ + +namespace String +{ + +bool checkType(PyTypeObject* type) +{ + return type == &PyUnicode_Type +#if PY_MAJOR_VERSION < 3 + || type == &PyString_Type +#endif + ; +} + +bool check(PyObject* obj) +{ + return obj == Py_None || +#if PY_MAJOR_VERSION < 3 + PyString_Check(obj) || +#endif + PyUnicode_Check(obj); +} + +bool checkChar(PyObject* pyobj) +{ + if (check(pyobj) && (len(pyobj) == 1)) + return true; + + return false; +} + +bool isConvertible(PyObject* obj) +{ + return check(obj); +} + +PyObject* fromCString(const char* value) +{ +#ifdef IS_PY3K + return PyUnicode_FromString(value); +#else + return PyBytes_FromString(value); +#endif +} + +PyObject* fromCString(const char* value, int len) +{ +#ifdef IS_PY3K + return PyUnicode_FromStringAndSize(value, len); +#else + return PyBytes_FromStringAndSize(value, len); +#endif +} + +const char* toCString(PyObject* str, Py_ssize_t* len) +{ + if (str == Py_None) + return NULL; + if (PyUnicode_Check(str)) { + if (len) { + // We need to encode the unicode string into utf8 to know the size of returned char*. + Shiboken::AutoDecRef uniStr(PyUnicode_AsUTF8String(str)); + *len = PyBytes_GET_SIZE(uniStr.object()); + } +#ifdef IS_PY3K + // Return unicode from str instead of uniStr, because the lifetime of the returned pointer + // depends on the lifetime of str. + return _PepUnicode_AsString(str); +#else + str = PyUnicode_AsUTF8String(str); + if (str == NULL) { + return NULL; + } + return PyString_AsString(str); +#endif + } + if (PyBytes_Check(str)) { + if (len) + *len = PyBytes_GET_SIZE(str); + return PyBytes_AS_STRING(str); + } + return 0; +} + +bool concat(PyObject** val1, PyObject* val2) +{ + if (PyUnicode_Check(*val1) && PyUnicode_Check(val2)) { + PyObject* result = PyUnicode_Concat(*val1, val2); + Py_DECREF(*val1); + *val1 = result; + return true; + } + + if (PyBytes_Check(*val1) && PyBytes_Check(val2)) { + PyBytes_Concat(val1, val2); + return true; + } + +#if PY_MAJOR_VERSION < 3 + if (PyString_Check(*val1) && PyString_Check(val2)) { + PyString_Concat(val1, val2); + return true; + } +#endif + return false; +} + +PyObject* fromFormat(const char* format, ...) +{ + va_list argp; + va_start(argp, format); + PyObject* result = 0; +#ifdef IS_PY3K + result = PyUnicode_FromFormatV(format, argp); +#else + result = PyString_FromFormatV(format, argp); +#endif + va_end(argp); + return result; +} + +PyObject* fromStringAndSize(const char* str, Py_ssize_t size) +{ +#ifdef IS_PY3K + return PyUnicode_FromStringAndSize(str, size); +#else + return PyString_FromStringAndSize(str, size); +#endif +} + +int compare(PyObject* val1, const char* val2) +{ + if (PyUnicode_Check(val1)) +#ifdef IS_PY3K + return PyUnicode_CompareWithASCIIString(val1, val2); +#else + { + PyObject* uVal2 = PyUnicode_FromString(val2); + bool result = PyUnicode_Compare(val1, uVal2); + Py_XDECREF(uVal2); + return result; + } + if (PyString_Check(val1)) + return strcmp(PyString_AS_STRING(val1), val2); +#endif + return 0; + +} + +Py_ssize_t len(PyObject* str) +{ + if (str == Py_None) + return 0; + + if (PyUnicode_Check(str)) + return PyUnicode_GET_SIZE(str); + + if (PyBytes_Check(str)) + return PyBytes_GET_SIZE(str); + return 0; +} + +} // namespace String + +} // namespace Shiboken diff --git a/sources/shiboken2/libshiboken/sbkstring.h b/sources/shiboken2/libshiboken/sbkstring.h new file mode 100644 index 0000000..a6b5fbe --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkstring.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SBKSTRING_H +#define SBKSTRING_H + +#include "sbkpython.h" +#include "shibokenmacros.h" + +#if PY_MAJOR_VERSION >= 3 + #define SBK_BYTES_NAME "bytes" +#else + #define SBK_BYTES_NAME "str" +#endif + +namespace Shiboken +{ +namespace String +{ + LIBSHIBOKEN_API bool check(PyObject* obj); + LIBSHIBOKEN_API bool checkType(PyTypeObject* obj); + LIBSHIBOKEN_API bool checkChar(PyObject* obj); + LIBSHIBOKEN_API bool isConvertible(PyObject* obj); + LIBSHIBOKEN_API PyObject* fromCString(const char* value); + LIBSHIBOKEN_API PyObject* fromCString(const char* value, int len); + LIBSHIBOKEN_API const char* toCString(PyObject* str, Py_ssize_t* len = 0); + LIBSHIBOKEN_API bool concat(PyObject** val1, PyObject* val2); + LIBSHIBOKEN_API PyObject* fromFormat(const char* format, ...); + LIBSHIBOKEN_API PyObject* fromStringAndSize(const char* str, Py_ssize_t size); + LIBSHIBOKEN_API int compare(PyObject* val1, const char* val2); + LIBSHIBOKEN_API Py_ssize_t len(PyObject* str); + +} // namespace String +} // namespace Shiboken + + +#endif + + diff --git a/sources/shiboken2/libshiboken/sbkversion.h.in b/sources/shiboken2/libshiboken/sbkversion.h.in new file mode 100644 index 0000000..99ee7f9 --- /dev/null +++ b/sources/shiboken2/libshiboken/sbkversion.h.in @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SBKVERSION_H +#define SBKVERSION_H + +#define SHIBOKEN_VERSION "@shiboken_MAJOR_VERSION@.@shiboken_MINOR_VERSION@.@shiboken_MICRO_VERSION@" +#define SHIBOKEN_MAJOR_VERSION @shiboken_MAJOR_VERSION@ +#define SHIBOKEN_MINOR_VERSION @shiboken_MINOR_VERSION@ +#define SHIBOKEN_MICRO_VERSION @shiboken_MICRO_VERSION@ +#define SHIBOKEN_RELEASE_LEVEL "final" +#define SHIBOKEN_SERIAL 0 +#define PYTHON_VERSION_MAJOR @PYTHON_VERSION_MAJOR@ +#define PYTHON_VERSION_MINOR @PYTHON_VERSION_MINOR@ +#define PYTHON_VERSION_PATCH @PYTHON_VERSION_PATCH@ + +#endif diff --git a/sources/shiboken2/libshiboken/shiboken.h b/sources/shiboken2/libshiboken/shiboken.h new file mode 100644 index 0000000..1356670 --- /dev/null +++ b/sources/shiboken2/libshiboken/shiboken.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SHIBOKEN_H +#define SHIBOKEN_H + +#include "sbkpython.h" +#include "autodecref.h" +#include "basewrapper.h" +#include "bindingmanager.h" +#include "gilstate.h" +#include "threadstatesaver.h" +#include "helper.h" +#include "sbkarrayconverter.h" +#include "sbkconverter.h" +#include "sbkenum.h" +#include "sbkmodule.h" +#include "sbkstring.h" +#include "shibokenmacros.h" +#include "shibokenbuffer.h" + +#endif // SHIBOKEN_H + diff --git a/sources/shiboken2/libshiboken/shibokenbuffer.cpp b/sources/shiboken2/libshiboken/shibokenbuffer.cpp new file mode 100644 index 0000000..05b68da --- /dev/null +++ b/sources/shiboken2/libshiboken/shibokenbuffer.cpp @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "shibokenbuffer.h" +#include +#include + +bool Shiboken::Buffer::checkType(PyObject* pyObj) +{ + return PyObject_CheckReadBuffer(pyObj) != 0; +} + +void* Shiboken::Buffer::getPointer(PyObject* pyObj, Py_ssize_t* size) +{ + +#ifdef IS_PY3K + Py_buffer view; + if (PyObject_GetBuffer(pyObj, &view, PyBUF_ND) == 0) { + if (size) + *size = view.len; + return view.buf; + } else { + return 0; + } +#else + const void* buffer = 0; + Py_ssize_t bufferSize = 0; + + PyObject_AsReadBuffer(pyObj, &buffer, &bufferSize); + + if (size) + *size = bufferSize; + return const_cast(buffer); +#endif +} + +PyObject* Shiboken::Buffer::newObject(void* memory, Py_ssize_t size, Type type) +{ + if (size == 0) + Py_RETURN_NONE; +#ifdef IS_PY3K + Py_buffer view; + memset(&view, 0, sizeof(Py_buffer)); + view.buf = memory; + view.len = size; + view.readonly = type == Shiboken::Buffer::ReadOnly; + view.ndim = 1; + view.itemsize = sizeof(char); + Py_ssize_t shape[] = { size }; + view.shape = shape; + // Pep384: This is way too complicated and impossible with the limited api: + //return PyMemoryView_FromBuffer(&view); + return PyMemoryView_FromMemory((char *)view.buf, size, type == ReadOnly ? PyBUF_READ : PyBUF_WRITE); +#else + return type == ReadOnly ? PyBuffer_FromMemory(memory, size) : PyBuffer_FromReadWriteMemory(memory, size); +#endif +} + +PyObject* Shiboken::Buffer::newObject(const void* memory, Py_ssize_t size) +{ + return newObject(const_cast(memory), size, ReadOnly); +} diff --git a/sources/shiboken2/libshiboken/shibokenbuffer.h b/sources/shiboken2/libshiboken/shibokenbuffer.h new file mode 100644 index 0000000..04a5b6d --- /dev/null +++ b/sources/shiboken2/libshiboken/shibokenbuffer.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SHIBOKEN_BUFFER_H +#define SHIBOKEN_BUFFER_H + +#include "sbkpython.h" +#include "shibokenmacros.h" + +namespace Shiboken +{ + +namespace Buffer +{ + enum Type { + ReadOnly, + WriteOnly, + ReadWrite + }; + + /** + * Creates a new Python buffer pointing to a contiguous memory block at + * \p memory of size \p size. + */ + LIBSHIBOKEN_API PyObject* newObject(void* memory, Py_ssize_t size, Type type); + + /** + * Creates a new read only Python buffer pointing to a contiguous memory block at + * \p memory of size \p size. + */ + LIBSHIBOKEN_API PyObject* newObject(const void* memory, Py_ssize_t size); + + /** + * Check if is ok to use \p pyObj as argument in all function under Shiboken::Buffer namespace. + */ + LIBSHIBOKEN_API bool checkType(PyObject* pyObj); + + /** + * Returns a pointer to the memory pointed by the buffer \p pyObj, \p size is filled with the buffer + * size if not null. + * + * If the \p pyObj is a non-contiguous buffer a Python error is set. + */ + LIBSHIBOKEN_API void* getPointer(PyObject* pyObj, Py_ssize_t* size = 0); + +} // namespace Buffer +} // namespace Shiboken + +#endif diff --git a/sources/shiboken2/libshiboken/shibokenmacros.h b/sources/shiboken2/libshiboken/shibokenmacros.h new file mode 100644 index 0000000..7bebd85 --- /dev/null +++ b/sources/shiboken2/libshiboken/shibokenmacros.h @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SHIBOKENMACROS_H +#define SHIBOKENMACROS_H + +// LIBSHIBOKEN_API macro is used for the public API symbols. +#if defined _WIN32 + #if LIBSHIBOKEN_EXPORTS + #define LIBSHIBOKEN_API __declspec(dllexport) + #else + #ifdef _MSC_VER + #define LIBSHIBOKEN_API __declspec(dllimport) + #endif + #endif + #define SBK_DEPRECATED(func) __declspec(deprecated) func +#elif __GNUC__ >= 4 + #define LIBSHIBOKEN_API __attribute__ ((visibility("default"))) + #define SBK_DEPRECATED(func) func __attribute__ ((deprecated)) +#endif + +#ifndef LIBSHIBOKEN_API + #define LIBSHIBOKEN_API + #define SBK_DEPRECATED(func) func +#endif + +#endif diff --git a/sources/shiboken2/libshiboken/signature.cpp b/sources/shiboken2/libshiboken/signature.cpp new file mode 100644 index 0000000..f0bb8e6 --- /dev/null +++ b/sources/shiboken2/libshiboken/signature.cpp @@ -0,0 +1,707 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "basewrapper.h" + +extern "C" +{ + +/* + * The documentation is located in file signature_doc.rst + */ + +#include "signature.h" +#include + +// These constants were needed in former versions of the module: +#define PYTHON_HAS_QUALNAME (PY_VERSION_HEX >= 0x03030000) +#define PYTHON_HAS_UNICODE (PY_VERSION_HEX >= 0x03000000) +#define PYTHON_HAS_WEAKREF_PYCFUNCTION (PY_VERSION_HEX >= 0x030500A0) +#define PYTHON_IS_PYTHON3 (PY_VERSION_HEX >= 0x03000000) +#define PYTHON_HAS_KEYWORDONLY (PYTHON_IS_PYTHON3) +#define PYTHON_USES_PERCENT_V_FORMAT (PYTHON_IS_PYTHON3) +#define PYTHON_HAS_DESCR_REDUCE (PY_VERSION_HEX >= 0x03040000) +#define PYTHON_HAS_METH_REDUCE (PYTHON_HAS_DESCR_REDUCE) +#define PYTHON_NEEDS_ITERATOR_FLAG (!PYTHON_IS_PYTHON3) +#define PYTHON_EXPOSES_METHODDESCR (PYTHON_IS_PYTHON3) +#define PYTHON_NO_TYPE_IN_FUNCTIONS (!PYTHON_IS_PYTHON3 || Py_LIMITED_API) + +// These constants are still in use: +#define PYTHON_USES_D_COMMON (PY_VERSION_HEX >= 0x03020000) + +typedef struct safe_globals_struc { + // init part 1: get arg_dict + PyObject *helper_module; + PyObject *arg_dict; + PyObject *map_dict; + // init part 2: run module + PyObject *sigparse_func; + PyObject *createsig_func; +} safe_globals_struc, *safe_globals; + +static safe_globals pyside_globals = 0; + +static PyObject *GetSignature_Function(PyCFunctionObject *); +static PyObject *GetSignature_TypeMod(PyObject *); + +static PyObject *PySide_BuildSignatureProps(PyObject *class_mod); + +const char helper_module_name[] = "signature_loader"; +const char bootstrap_name[] = "bootstrap"; +const char arg_name[] = "pyside_arg_dict"; +const char func_name[] = "pyside_type_init"; + +static PyObject * +CreateSignature(PyObject *props, const char *sig_kind) +{ + /* + * Here is the new function to create all signatures. It simply calls + * into Python and creates a signature object for a dummy-function. + * This is so much simpler than using all the attributes explicitly + * to support '_signature_is_functionlike()'. + */ + return PyObject_CallFunction(pyside_globals->createsig_func, + (char *)"(Os)", props, sig_kind); +} + +static PyObject * +pyside_cf_get___signature__(PyObject *func) +{ + return GetSignature_Function((PyCFunctionObject *)func); +} + +static PyObject * +pyside_sm_get___signature__(PyObject *sm) +{ + PyObject *func, *ret; + + func = PyObject_GetAttrString(sm, "__func__"); + ret = GetSignature_Function((PyCFunctionObject *)func); + Py_XDECREF(func); + return ret; +} + +#ifdef Py_LIMITED_API + +static int +build_qualname_to_func(PyObject *obtype) +{ + PyTypeObject *type = (PyTypeObject *)obtype; + PyMethodDef *meth = type->tp_methods; + + if (meth == 0) + return 0; + + for (; meth->ml_name != NULL; meth++) { + PyObject *func = PyCFunction_NewEx(meth, obtype, NULL); + PyObject *qualname = PyObject_GetAttrString(func, "__qualname__"); + if (func == NULL || qualname == NULL) { + return -1; + } + if (PyDict_SetItem(pyside_globals->map_dict, qualname, func) < 0) { + return -1; + } + Py_DECREF(func); + Py_DECREF(qualname); + } + return 0; +} + +static PyObject * +qualname_to_typename(PyObject *qualname) +{ + PyObject *func = PyObject_GetAttrString(qualname, "split"); + PyObject *list = func ? PyObject_CallFunction(func, (char *)"(s)", ".") + : NULL; + PyObject *res = list ? PyList_GetItem(list, 0) : NULL; + Py_XINCREF(res); + Py_XDECREF(func); + Py_XDECREF(list); + return res; +} + +static PyObject * +qualname_to_func(PyObject *ob) +{ + /* + * If we have __qualname__, then we can easily build a mapping + * from __qualname__ to PyCFunction. This is necessary when + * the limited API does not let us go easily from descriptor + * to PyMethodDef. + */ + PyObject *ret; + PyObject *qualname = PyObject_GetAttrString((PyObject *)ob, + "__qualname__"); + if (qualname != NULL) { + ret = PyDict_GetItem(pyside_globals->map_dict, qualname); + if (ret == NULL) { + // do a lazy initialization + PyObject *type_name = qualname_to_typename(qualname); + PyObject *type = PyDict_GetItem(pyside_globals->map_dict, + type_name); + Py_XDECREF(type_name); + if (type == NULL) + Py_RETURN_NONE; + if (build_qualname_to_func(type) < 0) + return NULL; + ret = PyDict_GetItem(pyside_globals->map_dict, qualname); + } + Py_XINCREF(ret); + Py_DECREF(qualname); + } + else + Py_RETURN_NONE; + return ret; +} +#endif + +static PyObject * +pyside_md_get___signature__(PyObject *ob) +{ + PyObject *func; + PyObject *result; +#ifndef Py_LIMITED_API + PyMethodDescrObject *descr = (PyMethodDescrObject *)ob; + +# if PYTHON_USES_D_COMMON + func = PyCFunction_NewEx(descr->d_method, + (PyObject *)descr->d_common.d_type, NULL); +# else + func = PyCFunction_NewEx(descr->d_method, + (PyObject *)descr->d_type, NULL); +# endif +#else + /* + * With limited access, we cannot use the fields of a method descriptor, + * but in Python 3 we have the __qualname__ field which allows us to + * grab the method object from our registry. + */ + func = qualname_to_func(ob); +#endif + if (func == Py_None) + return Py_None; + if (func == NULL) + Py_FatalError("missing mapping in MethodDescriptor"); + result = pyside_cf_get___signature__(func); + Py_DECREF(func); + return result; +} + +static PyObject * +pyside_tp_get___signature__(PyObject *typemod) +{ + return GetSignature_TypeMod(typemod); +} + +static PyObject * +GetSignature_Function(PyCFunctionObject *func) +{ + PyObject *typemod, *type_name, *dict, *props, *value, *selftype; + PyObject *func_name = PyObject_GetAttrString((PyObject *)func, "__name__"); + const char *sig_kind; + int flags; + + selftype = PyCFunction_GET_SELF((PyObject *)func); + if (selftype == NULL) + selftype = PyDict_GetItem(pyside_globals->map_dict, (PyObject *)func); + if (selftype == NULL) { + if (!PyErr_Occurred()) { + PyErr_Format(PyExc_SystemError, + "the signature for \"%s\" should exist", + PepCFunction_GET_NAMESTR(func) + ); + } + return NULL; + } + if ((PyType_Check(selftype) || PyModule_Check(selftype))) + typemod = selftype; + else + typemod = (PyObject *)Py_TYPE(selftype); + type_name = PyObject_GetAttrString(typemod, "__name__"); + if (type_name == NULL) + Py_RETURN_NONE; + dict = PyDict_GetItem(pyside_globals->arg_dict, type_name); + Py_DECREF(type_name); + if (dict == NULL) + Py_RETURN_NONE; + if (PyTuple_Check(dict)) { + /* + * We do the initialization lazily. + * This has also the advantage that we can freely import PySide. + */ + dict = PySide_BuildSignatureProps(typemod); + if (dict == NULL) + Py_RETURN_NONE; + } + props = PyDict_GetItem(dict, func_name); + if (props == NULL) + Py_RETURN_NONE; + flags = PyCFunction_GET_FLAGS((PyObject *)func); + if (flags & METH_CLASS) + sig_kind = "classmethod"; + else if (flags & METH_STATIC) + sig_kind = "staticmethod"; + else + sig_kind = "method"; + value = PyDict_GetItemString(props, sig_kind); + if (value == NULL) { + // we need to compute a signature object + value = CreateSignature(props, sig_kind); + if (value != NULL) { + if (PyDict_SetItemString(props, sig_kind, value) < 0) + return NULL; + } + else + Py_RETURN_NONE; + } + return Py_INCREF(value), value; +} + +static PyObject * +GetSignature_TypeMod(PyObject *ob) +{ + PyObject *ob_name, *dict, *props, *value; + const char *sig_kind; + + ob_name = PyObject_GetAttrString(ob, "__name__"); + dict = PyDict_GetItem(pyside_globals->arg_dict, ob_name); + if (dict == NULL) + Py_RETURN_NONE; + if (PyTuple_Check(dict)) { + dict = PySide_BuildSignatureProps(ob); + if (dict == NULL) { + Py_RETURN_NONE; + } + } + props = PyDict_GetItem(dict, ob_name); + Py_DECREF(ob_name); + if (props == NULL) + Py_RETURN_NONE; + sig_kind = "method"; + value = PyDict_GetItemString(props, sig_kind); + if (value == NULL) { + // we need to compute a signature object + value = CreateSignature(props, sig_kind); + if (value != NULL) { + if (PyDict_SetItemString(props, sig_kind, value) < 0) + return NULL; + } + else + Py_RETURN_NONE; + } + return Py_INCREF(value), value; +} + + +static const char PySide_PythonCode[] = + "from __future__ import print_function, absolute_import\n" + "import sys, os, traceback\n" + + "pyside_package_dir = os.environ.get('PYSIDE_PACKAGE_DIR', '.')\n" + "__file__ = os.path.join(pyside_package_dir, 'support', 'signature', 'loader.py')\n" + + "def bootstrap():\n" + " try:\n" + " with open(__file__) as _f:\n" + " exec(compile(_f.read(), __file__, 'exec'))\n" + " except Exception as e:\n" + " print('Exception:', e)\n" + " traceback.print_exc(file=sys.stdout)\n" + " globals().update(locals())\n" + ; + +static safe_globals_struc * +init_phase_1(void) +{ + safe_globals_struc *p; + PyObject *d, *v; + + p = (safe_globals_struc *)malloc(sizeof(safe_globals_struc)); + if (p == NULL) + goto error; + p->helper_module = PyImport_AddModule((char *) helper_module_name); + if (p->helper_module == NULL) + goto error; + + // Initialize the module + d = PyModule_GetDict(p->helper_module); + if (PyDict_SetItemString(d, "__builtins__", PyEval_GetBuiltins()) < 0) + goto error; + v = PyRun_String(PySide_PythonCode, Py_file_input, d, d); + if (v == NULL) + goto error; + Py_DECREF(v); + + // build a dict for diverse mappings + p->map_dict = PyDict_New(); + if (p->map_dict == NULL) + goto error; + + // Build a dict for the prepared arguments + p->arg_dict = PyDict_New(); + if (p->arg_dict == NULL) + goto error; + if (PyObject_SetAttrString(p->helper_module, arg_name, p->arg_dict) < 0) + goto error; + return p; + +error: + PyErr_SetString(PyExc_SystemError, "could not initialize part 1"); + return NULL; +} + +static int +init_phase_2(safe_globals_struc *p) +{ + PyObject *bootstrap_func; + + bootstrap_func = PyObject_GetAttrString(p->helper_module, bootstrap_name); + if (bootstrap_func == NULL) + goto error; + if (PyObject_CallFunction(bootstrap_func, (char *)"()") == NULL) + goto error; + // now the loader is initialized + p->sigparse_func = PyObject_GetAttrString(p->helper_module, func_name); + if (p->sigparse_func == NULL) + goto error; + p->createsig_func = PyObject_GetAttrString(p->helper_module, "create_signature"); + if (p->createsig_func == NULL) + goto error; + return 0; + +error: + PyErr_SetString(PyExc_SystemError, "could not initialize part 2"); + return -1; +} + +static int +add_more_getsets(PyTypeObject *type, PyGetSetDef *gsp) +{ + PyObject *dict = type->tp_dict; + + for (; gsp->name != NULL; gsp++) { + PyObject *descr; + if (PyDict_GetItemString(dict, gsp->name)) + continue; + descr = PyDescr_NewGetSet(type, gsp); + if (descr == NULL) + return -1; + if (PyDict_SetItemString(dict, gsp->name, descr) < 0) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + } + return 0; +} + +//////////////////////////////////////////////////////////////////////////// +// +// Augmenting builtin types with a __signature__ attribute. +// +// This is a harmless change to Python, similar like __text_signature__. +// We could avoid it, but then we would need to copy quite some module +// initialization functions which are pretty version- and word size +// dependent. I think this little patch is the lesser of the two evils. +// +// Please note that in fact we are modifying 'type', the metaclass of all +// objects, because we add new functionality. +// +static PyGetSetDef new_PyCFunction_getsets[] = { + {(char *) "__signature__", (getter)pyside_cf_get___signature__}, + {0} +}; + +static PyGetSetDef new_PyStaticMethod_getsets[] = { + {(char *) "__signature__", (getter)pyside_sm_get___signature__}, + {0} +}; + +static PyGetSetDef new_PyMethodDescr_getsets[] = { + {(char *) "__signature__", (getter)pyside_md_get___signature__}, + {0} +}; + +static PyGetSetDef new_PyType_getsets[] = { + {(char *) "__signature__", (getter)pyside_tp_get___signature__}, + {0} +}; + +//////////////////////////////////////////////////////////////////////////// +// +// This special Type_Ready does certain initializations earlier with +// our new version. +// + +#ifndef _WIN32 +//////////////////////////////////////////////////////////////////////////// +// a stack trace for linux-like platforms +#include +#include +#include +#include +#include + +void handler(int sig) { + void *array[30]; + size_t size; + + // get void*'s for all entries on the stack + size = backtrace(array, 30); + + // print out all the frames to stderr + fprintf(stderr, "Error: signal %d:\n", sig); + backtrace_symbols_fd(array, size, STDERR_FILENO); + exit(1); +} + +//////////////////////////////////////////////////////////////////////////// +#endif // _WIN32 + +static int +PySideType_Ready(PyTypeObject *type) +{ + PyObject *md; + static int init_done = 0; + + if (!init_done) { + // Python2 does not expose certain types. We look them up: + // PyMethodDescr_Type 'type(str.__dict__["split"])' + // PyClassMethodDescr_Type. 'type(dict.__dict__["fromkeys"])' + // The latter is not needed until we use class methods in PySide. + md = PyObject_GetAttrString((PyObject *)&PyString_Type, "split"); + if (md == NULL + || PyType_Ready(Py_TYPE(md)) < 0 + || add_more_getsets(Py_TYPE(md), new_PyMethodDescr_getsets) < 0 + || add_more_getsets(&PyCFunction_Type, new_PyCFunction_getsets) < 0 + || add_more_getsets(PepStaticMethod_TypePtr, new_PyStaticMethod_getsets) < 0 + || add_more_getsets(&PyType_Type, new_PyType_getsets) < 0) + return -1; + Py_DECREF(md); +#ifndef _WIN32 + // We enable the stack trace in CI, only. + const char *testEnv = getenv("QTEST_ENVIRONMENT"); + if (testEnv && strstr(testEnv, "ci")) + signal(SIGSEGV, handler); // install our handler +#endif // _WIN32 + init_done = 1; + } + return PyType_Ready(type); +} + +static int +build_func_to_type(PyObject *obtype) +{ + PyTypeObject *type = (PyTypeObject *)obtype; + PyObject *dict = type->tp_dict; + PyMethodDef *meth = type->tp_methods; + + if (meth == 0) + return 0; + + for (; meth->ml_name != NULL; meth++) { + if (meth->ml_flags & METH_STATIC) { + PyObject *descr = PyDict_GetItemString(dict, meth->ml_name); + if (descr == NULL) + return -1; + PyObject *func = PyObject_GetAttrString(descr, "__func__"); + if (func == NULL || + PyDict_SetItem(pyside_globals->map_dict, func, obtype) < 0) + return -1; + Py_DECREF(func); + } + } + return 0; +} + +static int +PySide_BuildSignatureArgs(PyObject *module, PyObject *type, + const char *signatures) +{ + PyObject *type_name, *arg_tup; + const char *name = NULL; + static int init_done = 0; + + if (!init_done) { + pyside_globals = init_phase_1(); + if (pyside_globals == NULL) + return -1; + init_done = 1; + } + arg_tup = Py_BuildValue("(Os)", type, signatures); + if (arg_tup == NULL) + return -1; + if (!PyModule_Check(module)) + return 0; + name = PyModule_GetName(module); + if (name == NULL) + return -1; + if (strncmp(name, "PySide2.Qt", 10) != 0) + return 0; + /* + * Normally, we would now just call the Python function with the + * arguments and then continue processing. + * But it is much better to delay the second part until it is + * really needed. Why? + * + * - by doing it late, we save initialization time when no signatures + * are requested, + * - by calling the python function late, we can freely import PySide + * without recursion problems. + */ + type_name = PyObject_GetAttrString(type, "__name__"); + if (type_name == NULL) + return -1; + if (PyDict_SetItem(pyside_globals->arg_dict, type_name, arg_tup) < 0) + return -1; + /* + * We record also a mapping from type name to type. This helps to lazily + * initialize the Py_LIMITED_API in qualname_to_func(). + */ + if (PyDict_SetItem(pyside_globals->map_dict, type_name, type) < 0) + return -1; + return 0; +} + +static PyObject * +PySide_BuildSignatureProps(PyObject *classmod) +{ + PyObject *arg_tup, *dict, *type_name; + static int init_done = 0; + + if (!init_done) { + if (init_phase_2(pyside_globals) < 0) + return NULL; + init_done = 1; + } + /* + * Here is the second part of the function. + * This part will be called on-demand when needed by some attribute. + * We simply pick up the arguments that we stored here and replace + * them by the function result. + */ + type_name = PyObject_GetAttrString(classmod, "__name__"); + if (type_name == NULL) + return NULL; + arg_tup = PyDict_GetItem(pyside_globals->arg_dict, type_name); + if (arg_tup == NULL) + return NULL; + dict = PyObject_CallObject(pyside_globals->sigparse_func, arg_tup); + if (dict == NULL) + return NULL; + + // We replace the arguments by the result dict. + if (PyDict_SetItem(pyside_globals->arg_dict, type_name, dict) < 0) + return NULL; + Py_DECREF(type_name); + return dict; +} + +int +SbkSpecial_Type_Ready(PyObject *module, PyTypeObject *type, + const char *signatures) +{ + int ret; + if (PySideType_Ready(type) < 0) + return -1; + ret = PySide_BuildSignatureArgs(module, (PyObject *)type, signatures); + if (ret < 0) { + PyErr_Print(); + PyErr_SetNone(PyExc_ImportError); + } + return ret; +} + +static int +PySide_FinishSignatures(PyObject *module, const char *signatures) +{ + const char *name = NULL; + + // CRUCIAL: Do not call this on "testbinding": + // The module is different and should not get signatures, anyway. + name = PyModule_GetName(module); + if (name == NULL) + return -1; + if (strncmp(name, "PySide2.Qt", 10) != 0) + return 0; + + // we abuse the call for types, since they both have a __name__ attribute. + if (PySide_BuildSignatureArgs(module, module, signatures) < 0) + return -1; + + /* + * Python2 does not abuse the 'm_self' field for the type. So we need to + * supply this for all static methods. + * + * Note: This function crashed when called from PySide_BuildSignatureArgs. + * Probably this was too early. + * + * Pep384: We need to switch this always on since we have no access + * to the PyCFunction attributes. Therefore I simplified things + * and always use our own mapping. + */ + { + PyObject *key, *value; + Py_ssize_t pos = 0; + PyObject *dict = PyModule_GetDict(module); + + if (dict == NULL) + return -1; + + while (PyDict_Next(dict, &pos, &key, &value)) { + if (PyType_Check(value)) { + PyObject *type = value; + if (build_func_to_type(type) < 0) + return -1; + } + } + } + return 0; +} + +void +FinishSignatureInitialization(PyObject *module, const char *signatures) +{ + if (PySide_FinishSignatures(module, signatures) < 0) { + PyErr_Print(); + PyErr_SetNone(PyExc_ImportError); + } +} + +} //extern "C" diff --git a/sources/shiboken2/libshiboken/signature.h b/sources/shiboken2/libshiboken/signature.h new file mode 100644 index 0000000..3a229cb --- /dev/null +++ b/sources/shiboken2/libshiboken/signature.h @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SIGNATURE_H +#define SIGNATURE_H + +#include "sbkpython.h" + +extern "C" +{ + +LIBSHIBOKEN_API int SbkSpecial_Type_Ready(PyObject *, PyTypeObject *, const char*); +LIBSHIBOKEN_API void FinishSignatureInitialization(PyObject *, const char*); + +} // extern "C" + +#endif // SIGNATURE_H diff --git a/sources/shiboken2/libshiboken/signature_doc.rst b/sources/shiboken2/libshiboken/signature_doc.rst new file mode 100644 index 0000000..5ad2ebd --- /dev/null +++ b/sources/shiboken2/libshiboken/signature_doc.rst @@ -0,0 +1,278 @@ +************************* +The signature C extension +************************* + +This module is a C extension for CPython 3.5 and up, and CPython 2.7. +Its purpose is to provide support for the ``__signature__`` attribute +of builtin PyCFunction objects. + + +Short Introduction to the Topic +=============================== + +Beginning with CPython 3.5, Python functions began to grow a ``__signature__`` +attribute for normal Python functions. This is totally optional and just +a nice-to-have feature in Python. + +PySide, on the other hand, could use ``__signature__`` very much, because the +typing info for the 15000+ PySide functions is really missing, and it +would be nice to have this info directly available. + + +The Idea to Support Signatures +============================== + +We want to have an additional ``__signature__`` attribute in all PySide +methods, without changing lots of generated code. +Therefore, we did not change any of the existing data structures, +but supported the new attribute by a global dictionary. + +When the ``__signature__`` property is requested, a method is called that +does a lookup in the global dict. This is a flexible approach with little impact +to the rest of the project. It has very limited overhead compared to direct +attribute access, but for the need of a signature access from time to time, +this is an adequate compromise. + + +How this Code Works +------------------- + +Signatures are supported for regular Python functions, only. Creating signatures +for ``PyCFunction`` objects would require quite some extra effort in Python. + +Fortunately, we found this special *stealth* technique, that saves us most of the +needed effort: + +The basic idea is to create a dummy Python function with **varnames**, **defaults** +and **annotations** properties, and then to use the inspect +module to create a signature object. This object is returned as the computed +result of the ``__signature__`` attribute of the real ``PyCFunction`` object. + +There is one thing that really changes Python a bit: + +* I added the ``__signature__`` attribute to every function. + +That is a little change to Python that does not harm, but it saves us +tons of code, that was needed in the early versions of the module. + +The internal work is done in two steps: + +* All functions of a class get the *signature text* when the module is imported. + This is only a very small overhead added to the startup time. It is a single + string for the whole class. +* The actual signature object is created later, when the attribute is really + accessed. Signatures are cached and only created on first access. + +Example: + +The ``PyCFunction`` ``QtWidgets.QApplication.palette`` is interrogated for its +signature. That means ``pyside_sm_get___signature__()`` is called. +It calls ``GetSignature_Function`` which returns the signature if it is found. + + +Why this Code is Fast +--------------------- + +It costs a little time (maybe 4 seconds) to run througs every single signature +object, since these are more than 15000 Python objects. But all the signature +objects will be rarely accessed but in special applications. +The normal case are only a few accesses, and these work pretty fast. + +The key to make this signature module fast is to avoid computation as much as +possible. When no signature objects are used, then no time is lost in initialization. +When it comes to signature usage, then late initialization is used and cached. +This technique is also known as *full laziness* in haskell. + +There are actually two locations where late initialization occurs: + +* ``dict`` can be no dict but a tuple. That is the initial argument tuple that + was saved by ``PySide_BuildSignatureArgs`` at module load time. + If so, then ``pyside_type_init`` in parser.py will be called, + which parses the string and creates the dict. +* ``props`` can be empty. Then ``create_signature`` in loader.py + is called, which uses a dummy function to produce a signature instance + with the inspect module. + +The initialization that is always done is just two dictionary writes +per class, and we have about 1000 classes. +To measure the additional overhead, we have simulated what happens +when ``from PySide2 import *`` is performed. +It turned out that the overhead is below 0.5 ms. + + +The Signature Package Structure +------------------------------- + +The C++ code involved with the signature module is completely in the file +shiboken2/libshiboken/signature.cpp . All other functionality is implemented in +the ``signature`` Python package. It has the following structure:: + + pyside2/PySide2/support/signature/__init__.py + loader.py + parser.py + mapping.py + typing27.py + backport_inspect.py + +Really important are the **parser**, **mapping** and **loader** modules. The rest is +needed to create Python 2 compatibility. + + +loader.py +~~~~~~~~~ + +This module assembles and imports the ``inspect`` module, and then exports the +``create_signature`` function. This function takes a fake function and some +attributes and builds a ``__signature__`` object with the inspect module. + + +parser.py +~~~~~~~~~ + +This module takes a class signatures string from C++ and parses it into the +needed properties for the ``create_signature`` function. Its entry point is the +``pyside_type_init`` function, which is called from the C module via ``loader.py``. + + +mapping.py +~~~~~~~~~~ + +The purpose of the mapping module is maintaining a list of replacement strings +that map from the *signature text* in C to the property strings that Python +needs. A lot of mappings are resolved by rather complex expressions in ``parser.py``, +but a few hundred cases are better to spell explicitly, here. + + +*typing27.py* +~~~~~~~~~~~~~ + +Python 2 has no typing module at all. This is a backport of the minimum that is needed. + + +*backport_inspect.py* +~~~~~~~~~~~~~~~~~~~~~ + +Python 2 has an inspect module, but lacks the signature functions, completely. +This module adds the missing functionality, which is merged at runtime into +the inspect module. + + +Multiple Arities +---------------- + +One aspect that was ignored so far was *multiple arities*: How to handle it when +a function has more than one signature? + +I did not find any note on how multiple signatures should be treated in Python, +but this simple rules seem to work well: + +* If there is a list, then it is a multi-signature. +* Otherwise, it is a simple signature. + + +Impacts of The Signature Module +=============================== + +The signature module has a number of impacts to other PySide modules, which were +created as a consequence of its existence, and there will be a few more in the +future: + + +existence_test.py +----------------- + +The file ``pyside2/tests/registry/existence_test.py`` was written using the +signatures from the signatures module. The idea is that there are some 15000 +functions with a certain signature. + +These functions should not get lost by some bad check-in. Therefore, a list +of all existing signatures is kept as a module that assembles a +dictionary. The function existence is checked, and also the exact arity. + +This module exists for every PySide release and every platform. The initial +module is generated once and saved as ``exists_{plat}_{version}.py``. + +An error is normally only reported as a warning, but: + + +Interaction With The Coin Module +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When this test program is run in COIN, then the warnings are turned into +errors. The reason is that only in COIN, we have a stable configuration +of PySide modules that can reliably be compared. + +These modules have the name ``exists_{plat}_{version}_ci.py``, and as a big +exception for generated code, these files are *intentionally* checked in. + + +What Happens When a List is Missing? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When a new version of PySide gets created, then the existence test files +initially do not exist. + +When a COIN test is run, then it will complain about the error and create +the missing module on standard output. +But since COIN tests are run multiple times, the output that was generated +by the first test will still exist at the subsequent runs. +(If COIN was properly implemented, we could not take that advantage and +would need to implement that as an extra exception.) + +As a result, a missing module will be reported as a test which partially +succeeded (called "FLAKY"). To avoid further flaky tests and to activate as a real test, +we can now capture the error output of COIN and check the generated module +in. + + +init_platform.py +~~~~~~~~~~~~~~~~ + +For generating the ``exists_{plat}_{version}.py`` modules, the module +``pyside2/tests/registry/init_platform.py`` was written. It can be used +standalone from the commandline, to check the compatibility of some +changes, directly. + + +generate_pyi.py +--------------- + +``pyside2/PySide2/support/generate_pyi.py`` is still under development. +This module generates so-called hinting stubs for integration of PySide +with diverse *Python IDEs*. + +Although this module creates the stubs as an add-on, the +impact on the quality of the signature module is considerable: + +The module must create syntactically correct ``.pyi`` files which contain +not only signatures but also constants and enums of all PySide modules. +This serves as an extra challenge that has a very positive effect on +the completeness and correctness of signatures. + + +Future Extension +---------------- + +Before the signature module was written, there already existed the concept of +signatures, but in a more C++ - centric way. From that time, there still exist +the error messages, which are created when a function gets wrong argument types. + +These error messages should be replaced by text generated on demand by +the signature module, in order to be more consistent and correct. + +Additionally, the ``__doc__`` attribute of PySide methods is not set, yet. +It would be easy to get a nice ``help()`` feature by creating signatures +as default content for docstrings. + + +Literature +========== + + `PEP 362 – Function Signature Object `__ + + `PEP 484 – Type Hints `__ + + `PEP 3107 – Function Annotations `__ + + +*Personal Remark: This module is dedicated to our lovebird "Püppi", who died on 2017-09-15.* diff --git a/sources/shiboken2/libshiboken/threadstatesaver.cpp b/sources/shiboken2/libshiboken/threadstatesaver.cpp new file mode 100644 index 0000000..5173416 --- /dev/null +++ b/sources/shiboken2/libshiboken/threadstatesaver.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "threadstatesaver.h" + +namespace Shiboken +{ + +ThreadStateSaver::ThreadStateSaver() + : m_threadState(0) + {} + +ThreadStateSaver::~ThreadStateSaver() +{ + restore(); +} + +void ThreadStateSaver::save() +{ + if (PyEval_ThreadsInitialized()) + m_threadState = PyEval_SaveThread(); +} + +void ThreadStateSaver::restore() +{ + if (m_threadState) { + PyEval_RestoreThread(m_threadState); + m_threadState = 0; + } +} + +} // namespace Shiboken + diff --git a/sources/shiboken2/libshiboken/threadstatesaver.h b/sources/shiboken2/libshiboken/threadstatesaver.h new file mode 100644 index 0000000..e9f97f3 --- /dev/null +++ b/sources/shiboken2/libshiboken/threadstatesaver.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef THREADSTATESAVER_H +#define THREADSTATESAVER_H + +#include "sbkpython.h" +#include + +namespace Shiboken +{ + +class LIBSHIBOKEN_API ThreadStateSaver +{ +public: + ThreadStateSaver(); + ~ThreadStateSaver(); + void save(); + void restore(); +private: + PyThreadState* m_threadState; + + ThreadStateSaver(const ThreadStateSaver&); + ThreadStateSaver& operator=(const ThreadStateSaver&); +}; + +} // namespace Shiboken + +#endif // THREADSTATESAVER_H + diff --git a/sources/shiboken2/libshiboken/tmp-referencetopython/sbkconverter.cpp b/sources/shiboken2/libshiboken/tmp-referencetopython/sbkconverter.cpp new file mode 100644 index 0000000..8e351ce --- /dev/null +++ b/sources/shiboken2/libshiboken/tmp-referencetopython/sbkconverter.cpp @@ -0,0 +1,213 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "sbkconverter.h" +#include "sbkconverter_p.h" +#include "basewrapper_p.h" + +#include "sbkdbg.h" + +namespace Shiboken { +namespace Conversions { + +static SbkConverter* createConverterObject(PyTypeObject* type, + PythonToCppFunc toCppPointerConvFunc, + IsConvertibleToCppFunc toCppPointerCheckFunc, + CppToPythonFunc pointerToPythonFunc, + CppToPythonFunc copyToPythonFunc) +{ + SbkConverter* converter = new SbkConverter; + converter->pythonType = type; + + converter->pointerToPython = pointerToPythonFunc; + converter->copyToPython = copyToPythonFunc; + + converter->toCppPointerConversion = std::make_pair(toCppPointerCheckFunc, toCppPointerConvFunc); + converter->toCppConversions.clear(); + + return converter; +} + +SbkConverter* createConverter(SbkObjectType* type, + PythonToCppFunc toCppPointerConvFunc, + IsConvertibleToCppFunc toCppPointerCheckFunc, + CppToPythonFunc pointerToPythonFunc, + CppToPythonFunc copyToPythonFunc) +{ + SbkConverter* converter = createConverterObject((PyTypeObject*)type, + toCppPointerConvFunc, toCppPointerCheckFunc, + pointerToPythonFunc, copyToPythonFunc); + type->d->converter = converter; + return converter; +} + +void deleteConverter(SbkConverter* converter) +{ + if (converter) { + converter->toCppConversions.clear(); + delete converter; + } +} + +void addPythonToCppValueConversion(SbkConverter* converter, + PythonToCppFunc pythonToCppFunc, + IsConvertibleToCppFunc isConvertibleToCppFunc) +{ + converter->toCppConversions.push_back(std::make_pair(isConvertibleToCppFunc, pythonToCppFunc)); +} +void addPythonToCppValueConversion(SbkObjectType* type, + PythonToCppFunc pythonToCppFunc, + IsConvertibleToCppFunc isConvertibleToCppFunc) +{ + addPythonToCppValueConversion(type->d->converter, pythonToCppFunc, isConvertibleToCppFunc); +} + +PyObject* pointerToPython(SbkObjectType* type, const void* cppIn) +{ + if (!cppIn) + Py_RETURN_NONE; + return type->d->converter->pointerToPython(cppIn); +} + +static inline PyObject* CopyCppToPython(SbkConverter* converter, const void* cppIn) +{ + assert(cppIn); + return converter->copyToPython(cppIn); +} +PyObject* copyToPython(SbkObjectType* type, const void* cppIn) +{ + return CopyCppToPython(type->d->converter, cppIn); +} +PyObject* toPython(SbkConverter* converter, const void* cppIn) +{ + return CopyCppToPython(converter, cppIn); +} + +PyObject* referenceToPython(SbkObjectType* type, const void* cppIn) +{ + assert(cppIn); + PyObject* pyOut = (PyObject*)BindingManager::instance().retrieveWrapper(cppIn); + if (pyOut) { + Py_INCREF(pyOut); + return pyOut; + } + // If it is Value Type, return a copy of the C++ object. + if (type->d->converter->copyToPython) + return type->d->converter->copyToPython(cppIn); + // If it is an Object Type, return a copy of the C++ object. + return type->d->converter->pointerToPython(cppIn); +} + +PythonToCppFunc isPythonToCppPointerConvertible(SbkObjectType* type, PyObject* pyIn) +{ + assert(pyIn); + return type->d->converter->toCppPointerConversion.first(pyIn); +} + +static inline PythonToCppFunc IsPythonToCppConvertible(SbkConverter* converter, PyObject* pyIn) +{ + assert(pyIn); + ToCppConversionList& convs = converter->toCppConversions; + for (ToCppConversionList::iterator conv = convs.begin(); conv != convs.end(); ++conv) { + PythonToCppFunc toCppFunc = 0; + if ((toCppFunc = (*conv).first(pyIn))) + return toCppFunc; + } + return 0; +} +PythonToCppFunc isPythonToCppValueConvertible(SbkObjectType* type, PyObject* pyIn) +{ + return IsPythonToCppConvertible(type->d->converter, pyIn); +} +PythonToCppFunc isPythonToCppConvertible(SbkConverter* converter, PyObject* pyIn) +{ + return IsPythonToCppConvertible(converter, pyIn); +} + +PythonToCppFunc isPythonToCppReferenceConvertible(SbkObjectType* type, PyObject* pyIn) +{ + if (pyIn != Py_None) { + PythonToCppFunc toCpp = isPythonToCppPointerConvertible(type, pyIn); + if (toCpp) + return toCpp; + } + return isPythonToCppValueConvertible(type, pyIn); +} + +void nonePythonToCppNullPtr(PyObject*, void* cppOut) +{ + assert(cppOut); + *((void**)cppOut) = 0; +} + +void pythonToCppPointer(SbkObjectType* type, PyObject* pyIn, void* cppOut) +{ + assert(pyIn); + assert(cppOut); + SbkObjectType* inType = (SbkObjectType*)Py_TYPE(pyIn); + if (ObjectType::hasCast(inType)) + *((void**)cppOut) = ObjectType::cast(inType, (SbkObject*)pyIn, (PyTypeObject*)type); + else + *((void**)cppOut) = Object::cppPointer((SbkObject*)pyIn, (PyTypeObject*)type); +} + +bool isImplicitConversion(SbkObjectType* type, PythonToCppFunc toCppFunc) +{ + // This is the Object Type or Value Type conversion that only + // retrieves the C++ pointer held in the Python wrapper. + if (toCppFunc == type->d->converter->toCppPointerConversion.second) + return false; + + // Object Types doesn't have any kind of value conversion, + // only C++ pointer retrieval. + if (type->d->converter->toCppConversions.empty()) + return false; + + // The first conversion of the non-pointer conversion list is + // a Value Type's copy to C++ function, which is not an implicit + // conversion. + // Otherwise it must be one of the implicit conversions. + // Note that we don't check if the Python to C++ conversion is in + // the list of the type's conversions, for it is expected that the + // caller knows what he's doing. + ToCppConversionList::iterator conv = type->d->converter->toCppConversions.begin(); + return toCppFunc != (*conv).second; +} + +} } // namespace Shiboken::Conversions diff --git a/sources/shiboken2/libshiboken/tmp-referencetopython/sbkconverter.h b/sources/shiboken2/libshiboken/tmp-referencetopython/sbkconverter.h new file mode 100644 index 0000000..cc9ea7a --- /dev/null +++ b/sources/shiboken2/libshiboken/tmp-referencetopython/sbkconverter.h @@ -0,0 +1,191 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SBK_CONVERTER_H +#define SBK_CONVERTER_H + +#include +#include "sbkpython.h" +#include "shibokenmacros.h" +#include "basewrapper.h" + +extern "C" +{ + +/** + * SbkConverter is used to perform type conversions from C++ + * to Python and vice-versa;.and it is also used for type checking. + * SbkConverter is a private structure that must be accessed + * using the functions provided by the converter API. + */ +struct SbkConverter; + +/** + * Given a void pointer to a C++ object, this function must return + * the proper Python object. It may be either an existing wrapper + * for the C++ object, or a newly create one. Or even the Python + * equivalent of the C++ value passed in the argument. + * + * C++ -> Python + */ +typedef PyObject* (*CppToPythonFunc)(const void*); + +/** + * This function converts a Python object to a C++ value, it may be + * a pointer, value, class, container or primitive type, passed via + * a void pointer, that will be cast properly inside the function. + * This function is usually returned by an IsConvertibleToCppFunc + * function, or obtained knowing the type of the Python object input, + * thus it will not check the Python object type, and will expect + * the void pointer to be pointing to a proper variable. + * + * Python -> C++ + */ +typedef void (*PythonToCppFunc)(PyObject*,void*); + +/** + * Checks if the Python object passed in the argument is convertible to a + * C++ type defined inside the function, it returns the converter function + * that will transform a Python argument into a C++ value. + * It returns NULL if the Python object is not convertible to the C++ type + * that the function represents. + * + * Python -> C++ ? + */ +typedef PythonToCppFunc (*IsConvertibleToCppFunc)(PyObject*); + +} // extern "C" + + +namespace Shiboken { +namespace Conversions { + +/** + * Creates a converter for a wrapper type. + * \param type A Shiboken.ObjectType that will receive the new converter. + * \param toCppPointerConvFunc Function to retrieve the C++ pointer held by a Python wrapper. + * \param toCppPointerCheckFunc Check and return the retriever function of the C++ pointer held by a Python wrapper. + * \param pointerToPythonFunc Function to convert a C++ object to a Python \p type wrapper, keeping their identity. + * \param copyToPythonFunc Function to convert a C++ object to a Python \p type, copying the object. + * \returns The new converter referred by the wrapper \p type. + */ +LIBSHIBOKEN_API SbkConverter* createConverter(SbkObjectType* type, + PythonToCppFunc toCppPointerConvFunc, + IsConvertibleToCppFunc toCppPointerCheckFunc, + CppToPythonFunc pointerToPythonFunc, + CppToPythonFunc copyToPythonFunc = 0); + +LIBSHIBOKEN_API void deleteConverter(SbkConverter* converter); + +/** + * Adds a new conversion of a Python object to a C++ value. + * This is used in copy and implicit conversions. + */ +LIBSHIBOKEN_API void addPythonToCppValueConversion(SbkConverter* converter, + PythonToCppFunc pythonToCppFunc, + IsConvertibleToCppFunc isConvertibleToCppFunc); +LIBSHIBOKEN_API void addPythonToCppValueConversion(SbkObjectType* type, + PythonToCppFunc pythonToCppFunc, + IsConvertibleToCppFunc isConvertibleToCppFunc); + +// C++ -> Python --------------------------------------------------------------------------- + +/** + * Retrieves the Python wrapper object for the given \p cppIn C++ pointer object. + * This function is used only for Value and Object Types. + * Example usage: + * TYPE* var; + * PyObject* pyVar = pointerToPython(SBKTYPE, &var); + */ +LIBSHIBOKEN_API PyObject* pointerToPython(SbkObjectType* type, const void* cppIn); + +/** + * Retrieves the Python wrapper object for the given C++ value pointed by \p cppIn. + * This function is used only for Value Types. + * Example usage: + * TYPE var; + * PyObject* pyVar = copyToPython(SBKTYPE, &var); + */ +LIBSHIBOKEN_API PyObject* copyToPython(SbkObjectType* type, const void* cppIn); + +// TODO:WRITEDOCSTRING - used only for Value Types - cppIn must point to a value +/** + * Retrieves the Python wrapper object for the given C++ reference pointed by \p cppIn. + * This function is used only for Value and Object Types. + * It differs from pointerToPython() for not checking for a NULL pointer. + * Example usage: + * TYPE& var = SOMETHING; + * PyObject* pyVar = copyToPython(SBKTYPE, &var); + */ +LIBSHIBOKEN_API PyObject* referenceToPython(SbkObjectType* type, const void* cppIn); + +// TODO:WRITEDOCSTRING - used only for Primitives and Containers (and Value Types) - cppIn must point to a primitive, container or value type +/// This is the same as copyToPython function. +LIBSHIBOKEN_API PyObject* toPython(SbkConverter* converter, const void* cppIn); + +// Python -> C++ convertibility checks ----------------------------------------------------- + +// TODO:WRITEDOCSTRING +LIBSHIBOKEN_API PythonToCppFunc isPythonToCppPointerConvertible(SbkObjectType* type, PyObject* pyIn); + +// TODO:WRITEDOCSTRING- Returns a Python to C++ conversion function if true, or NULL if false. +LIBSHIBOKEN_API PythonToCppFunc isPythonToCppValueConvertible(SbkObjectType* type, PyObject* pyIn); + +// TODO:WRITEDOCSTRING- Returns a Python to C++ conversion function if true, or NULL if false. +LIBSHIBOKEN_API PythonToCppFunc isPythonToCppReferenceConvertible(SbkObjectType* type, PyObject* pyIn); + +/// This is the same as isPythonToCppValueConvertible function. +LIBSHIBOKEN_API PythonToCppFunc isPythonToCppConvertible(SbkConverter* converter, PyObject* pyIn); + +// Python -> C++ --------------------------------------------------------------------------- + +// TODO:WRITEDOCSTRING - function used by the generated [TYPE]_PythonToCpp_[TYPE]_PTR +LIBSHIBOKEN_API void pythonToCppPointer(SbkObjectType* type, PyObject* pyIn, void* cppOut); + +// TODO:WRITEDOCSTRING - function used by the generated isConvertible when the PyObject is None, +// making a C++ NULL pointer the result of the toCpp function call. +// DRAFT: When the Python object is a Py_None, it's C++ conversion is always a NULL pointer. +LIBSHIBOKEN_API void nonePythonToCppNullPtr(PyObject*, void* cppOut); + +// TODO:WRITEDOCSTRING - tells if \p toCpp is an implicit conversion. +LIBSHIBOKEN_API bool isImplicitConversion(SbkObjectType* type, PythonToCppFunc toCpp); + +} } // namespace Shiboken::Conversions + +#endif // SBK_CONVERTER_H diff --git a/sources/shiboken2/libshiboken/typespec.cpp b/sources/shiboken2/libshiboken/typespec.cpp new file mode 100644 index 0000000..d532c97 --- /dev/null +++ b/sources/shiboken2/libshiboken/typespec.cpp @@ -0,0 +1,776 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "typespec.h" +#include + +#if PY_MAJOR_VERSION < 3 + +extern "C" +{ + +// for some reason python 2.7 needs this on Windows +#ifdef WIN32 +static PyGC_Head *_PyGC_generation0; +#endif + +// from pymacro.h +#ifndef Py_PYMACRO_H +#define Py_PYMACRO_H + +/* Minimum value between x and y */ +#define Py_MIN(x, y) (((x) > (y)) ? (y) : (x)) + +/* Maximum value between x and y */ +#define Py_MAX(x, y) (((x) > (y)) ? (x) : (y)) + +/* Absolute value of the number x */ +#define Py_ABS(x) ((x) < 0 ? -(x) : (x)) + +#define _Py_XSTRINGIFY(x) #x + +/* Convert the argument to a string. For example, Py_STRINGIFY(123) is replaced + with "123" by the preprocessor. Defines are also replaced by their value. + For example Py_STRINGIFY(__LINE__) is replaced by the line number, not + by "__LINE__". */ +#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x) + +/* Get the size of a structure member in bytes */ +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) + +/* Argument must be a char or an int in [-128, 127] or [0, 255]. */ +#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff)) + +/* Assert a build-time dependency, as an expression. + + Your compile will fail if the condition isn't true, or can't be evaluated + by the compiler. This can be used in an expression: its value is 0. + + Example: + + #define foo_to_char(foo) \ + ((char *)(foo) \ + + Py_BUILD_ASSERT_EXPR(offsetof(struct foo, string) == 0)) + + Written by Rusty Russell, public domain, http://ccodearchive.net/ */ +#define Py_BUILD_ASSERT_EXPR(cond) \ + (sizeof(char [1 - 2*!(cond)]) - 1) + +#define Py_BUILD_ASSERT(cond) do { \ + (void)Py_BUILD_ASSERT_EXPR(cond); \ + } while (0) + +/* Get the number of elements in a visible array + + This does not work on pointers, or arrays declared as [], or function + parameters. With correct compiler support, such usage will cause a build + error (see Py_BUILD_ASSERT_EXPR). + + Written by Rusty Russell, public domain, http://ccodearchive.net/ + + Requires at GCC 3.1+ */ +// Simplified by "0 &&" +#if 0 && (defined(__GNUC__) && !defined(__STRICT_ANSI__) && \ + (((__GNUC__ == 3) && (__GNU_MINOR__ >= 1)) || (__GNUC__ >= 4))) +/* Two gcc extensions. + &a[0] degrades to a pointer: a different type from an array */ +#define Py_ARRAY_LENGTH(array) \ + (sizeof(array) / sizeof((array)[0]) \ + + Py_BUILD_ASSERT_EXPR(!__builtin_types_compatible_p(typeof(array), \ + typeof(&(array)[0])))) +#else +#define Py_ARRAY_LENGTH(array) \ + (sizeof(array) / sizeof((array)[0])) +#endif + + +/* Define macros for inline documentation. */ +#define PyDoc_VAR(name) static char name[] +#define PyDoc_STRVAR(name,str) PyDoc_VAR(name) = PyDoc_STR(str) +#ifdef WITH_DOC_STRINGS +#define PyDoc_STR(str) str +#else +#define PyDoc_STR(str) "" +#endif + +/* Below "a" is a power of 2. */ +/* Round down size "n" to be a multiple of "a". */ +#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1)) +/* Round up size "n" to be a multiple of "a". */ +#define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \ + (size_t)((a) - 1)) & ~(size_t)((a) - 1)) +/* Round pointer "p" down to the closest "a"-aligned address <= "p". */ +#define _Py_ALIGN_DOWN(p, a) ((void *)((uintptr_t)(p) & ~(uintptr_t)((a) - 1))) +/* Round pointer "p" up to the closest "a"-aligned address >= "p". */ +#define _Py_ALIGN_UP(p, a) ((void *)(((uintptr_t)(p) + \ + (uintptr_t)((a) - 1)) & ~(uintptr_t)((a) - 1))) +/* Check if pointer "p" is aligned to "a"-bytes boundary. */ +#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1))) + +#ifdef __GNUC__ +#define Py_UNUSED(name) _unused_ ## name __attribute__((unused)) +#else +#define Py_UNUSED(name) _unused_ ## name +#endif + +#endif /* Py_PYMACRO_H */ + +// from typeobject.c +static int +extra_ivars(PyTypeObject *type, PyTypeObject *base) +{ + size_t t_size = type->tp_basicsize; + size_t b_size = base->tp_basicsize; + + assert(t_size >= b_size); /* Else type smaller than base! */ + if (type->tp_itemsize || base->tp_itemsize) { + /* If itemsize is involved, stricter rules */ + return t_size != b_size || + type->tp_itemsize != base->tp_itemsize; + } + if (type->tp_weaklistoffset && base->tp_weaklistoffset == 0 && + type->tp_weaklistoffset + sizeof(PyObject *) == t_size && + type->tp_flags & Py_TPFLAGS_HEAPTYPE) + t_size -= sizeof(PyObject *); + if (type->tp_dictoffset && base->tp_dictoffset == 0 && + type->tp_dictoffset + sizeof(PyObject *) == t_size && + type->tp_flags & Py_TPFLAGS_HEAPTYPE) + t_size -= sizeof(PyObject *); + + return t_size != b_size; +} + +static void +clear_slots(PyTypeObject *type, PyObject *self) +{ + Py_ssize_t i, n; + PyMemberDef *mp; + + n = Py_SIZE(type); + mp = PyHeapType_GET_MEMBERS((PyHeapTypeObject *)type); + for (i = 0; i < n; i++, mp++) { + if (mp->type == T_OBJECT_EX && !(mp->flags & READONLY)) { + char *addr = (char *)self + mp->offset; + PyObject *obj = *(PyObject **)addr; + if (obj != NULL) { + *(PyObject **)addr = NULL; + Py_DECREF(obj); + } + } + } +} + +static void +subtype_dealloc(PyObject *self) +{ + PyTypeObject *type, *base; + destructor basedealloc; + PyThreadState *tstate = PyThreadState_GET(); + + /* Extract the type; we expect it to be a heap type */ + type = Py_TYPE(self); + assert(type->tp_flags & Py_TPFLAGS_HEAPTYPE); + + /* Test whether the type has GC exactly once */ + + if (!PyType_IS_GC(type)) { + /* It's really rare to find a dynamic type that doesn't have + GC; it can only happen when deriving from 'object' and not + adding any slots or instance variables. This allows + certain simplifications: there's no need to call + clear_slots(), or DECREF the dict, or clear weakrefs. */ + + /* Maybe call finalizer; exit early if resurrected */ + if (type->tp_del) { + type->tp_del(self); + if (self->ob_refcnt > 0) + return; + } + + /* Find the nearest base with a different tp_dealloc */ + base = type; + while ((basedealloc = base->tp_dealloc) == subtype_dealloc) { + assert(Py_SIZE(base) == 0); + base = base->tp_base; + assert(base); + } + + /* Extract the type again; tp_del may have changed it */ + type = Py_TYPE(self); + + /* Call the base tp_dealloc() */ + assert(basedealloc); + basedealloc(self); + + /* Can't reference self beyond this point */ + Py_DECREF(type); + + /* Done */ + return; + } + + /* We get here only if the type has GC */ + + /* UnTrack and re-Track around the trashcan macro, alas */ + /* See explanation at end of function for full disclosure */ + PyObject_GC_UnTrack(self); + ++_PyTrash_delete_nesting; + ++ tstate->trash_delete_nesting; + Py_TRASHCAN_SAFE_BEGIN(self); + --_PyTrash_delete_nesting; + -- tstate->trash_delete_nesting; + /* DO NOT restore GC tracking at this point. weakref callbacks + * (if any, and whether directly here or indirectly in something we + * call) may trigger GC, and if self is tracked at that point, it + * will look like trash to GC and GC will try to delete self again. + */ + + /* Find the nearest base with a different tp_dealloc */ + base = type; + while ((basedealloc = base->tp_dealloc) == subtype_dealloc) { + base = base->tp_base; + assert(base); + } + + /* If we added a weaklist, we clear it. Do this *before* calling + the finalizer (__del__), clearing slots, or clearing the instance + dict. */ + + if (type->tp_weaklistoffset && !base->tp_weaklistoffset) + PyObject_ClearWeakRefs(self); + + /* Maybe call finalizer; exit early if resurrected */ + if (type->tp_del) { + _PyObject_GC_TRACK(self); + type->tp_del(self); + if (self->ob_refcnt > 0) + goto endlabel; /* resurrected */ + else + _PyObject_GC_UNTRACK(self); + /* New weakrefs could be created during the finalizer call. + If this occurs, clear them out without calling their + finalizers since they might rely on part of the object + being finalized that has already been destroyed. */ + if (type->tp_weaklistoffset && !base->tp_weaklistoffset) { + /* Modeled after GET_WEAKREFS_LISTPTR() */ + PyWeakReference **list = (PyWeakReference **) \ + PyObject_GET_WEAKREFS_LISTPTR(self); + while (*list) + _PyWeakref_ClearRef(*list); + } + } + + /* Clear slots up to the nearest base with a different tp_dealloc */ + base = type; + while (base->tp_dealloc == subtype_dealloc) { + if (Py_SIZE(base)) + clear_slots(base, self); + base = base->tp_base; + assert(base); + } + + /* If we added a dict, DECREF it */ + if (type->tp_dictoffset && !base->tp_dictoffset) { + PyObject **dictptr = _PyObject_GetDictPtr(self); + if (dictptr != NULL) { + PyObject *dict = *dictptr; + if (dict != NULL) { + Py_DECREF(dict); + *dictptr = NULL; + } + } + } + + /* Extract the type again; tp_del may have changed it */ + type = Py_TYPE(self); + + /* Call the base tp_dealloc(); first retrack self if + * basedealloc knows about gc. + */ + if (PyType_IS_GC(base)) + _PyObject_GC_TRACK(self); + assert(basedealloc); + basedealloc(self); + + /* Can't reference self beyond this point */ + Py_DECREF(type); + + endlabel: + ++_PyTrash_delete_nesting; + ++ tstate->trash_delete_nesting; + Py_TRASHCAN_SAFE_END(self); + --_PyTrash_delete_nesting; + -- tstate->trash_delete_nesting; + + /* Explanation of the weirdness around the trashcan macros: + + Q. What do the trashcan macros do? + + A. Read the comment titled "Trashcan mechanism" in object.h. + For one, this explains why there must be a call to GC-untrack + before the trashcan begin macro. Without understanding the + trashcan code, the answers to the following questions don't make + sense. + + Q. Why do we GC-untrack before the trashcan and then immediately + GC-track again afterward? + + A. In the case that the base class is GC-aware, the base class + probably GC-untracks the object. If it does that using the + UNTRACK macro, this will crash when the object is already + untracked. Because we don't know what the base class does, the + only safe thing is to make sure the object is tracked when we + call the base class dealloc. But... The trashcan begin macro + requires that the object is *untracked* before it is called. So + the dance becomes: + + GC untrack + trashcan begin + GC track + + Q. Why did the last question say "immediately GC-track again"? + It's nowhere near immediately. + + A. Because the code *used* to re-track immediately. Bad Idea. + self has a refcount of 0, and if gc ever gets its hands on it + (which can happen if any weakref callback gets invoked), it + looks like trash to gc too, and gc also tries to delete self + then. But we're already deleting self. Double deallocation is + a subtle disaster. + + Q. Why the bizarre (net-zero) manipulation of + _PyTrash_delete_nesting around the trashcan macros? + + A. Some base classes (e.g. list) also use the trashcan mechanism. + The following scenario used to be possible: + + - suppose the trashcan level is one below the trashcan limit + + - subtype_dealloc() is called + + - the trashcan limit is not yet reached, so the trashcan level + is incremented and the code between trashcan begin and end is + executed + + - this destroys much of the object's contents, including its + slots and __dict__ + + - basedealloc() is called; this is really list_dealloc(), or + some other type which also uses the trashcan macros + + - the trashcan limit is now reached, so the object is put on the + trashcan's to-be-deleted-later list + + - basedealloc() returns + + - subtype_dealloc() decrefs the object's type + + - subtype_dealloc() returns + + - later, the trashcan code starts deleting the objects from its + to-be-deleted-later list + + - subtype_dealloc() is called *AGAIN* for the same object + + - at the very least (if the destroyed slots and __dict__ don't + cause problems) the object's type gets decref'ed a second + time, which is *BAD*!!! + + The remedy is to make sure that if the code between trashcan + begin and end in subtype_dealloc() is called, the code between + trashcan begin and end in basedealloc() will also be called. + This is done by decrementing the level after passing into the + trashcan block, and incrementing it just before leaving the + block. + + But now it's possible that a chain of objects consisting solely + of objects whose deallocator is subtype_dealloc() will defeat + the trashcan mechanism completely: the decremented level means + that the effective level never reaches the limit. Therefore, we + *increment* the level *before* entering the trashcan block, and + matchingly decrement it after leaving. This means the trashcan + code will trigger a little early, but that's no big deal. + + Q. Are there any live examples of code in need of all this + complexity? + + A. Yes. See SF bug 668433 for code that crashed (when Python was + compiled in debug mode) before the trashcan level manipulations + were added. For more discussion, see SF patches 581742, 575073 + and bug 574207. + */ +} + +static PyTypeObject * +solid_base(PyTypeObject *type) +{ + PyTypeObject *base; + + if (type->tp_base) + base = solid_base(type->tp_base); + else + base = &PyBaseObject_Type; + if (extra_ivars(type, base)) + return type; + else + return base; +} + +/* Calculate the best base amongst multiple base classes. + This is the first one that's on the path to the "solid base". */ + +static PyTypeObject * +best_base(PyObject *bases) +{ + Py_ssize_t i, n; + PyTypeObject *base, *winner, *candidate, *base_i; + PyObject *base_proto; + + assert(PyTuple_Check(bases)); + n = PyTuple_GET_SIZE(bases); + assert(n > 0); + base = NULL; + winner = NULL; + for (i = 0; i < n; i++) { + base_proto = PyTuple_GET_ITEM(bases, i); + if (PyClass_Check(base_proto)) + continue; + if (!PyType_Check(base_proto)) { + PyErr_SetString( + PyExc_TypeError, + "bases must be types"); + return NULL; + } + base_i = (PyTypeObject *)base_proto; + if (base_i->tp_dict == NULL) { + if (PyType_Ready(base_i) < 0) + return NULL; + } + if (!PyType_HasFeature(base_i, Py_TPFLAGS_BASETYPE)) { + PyErr_Format(PyExc_TypeError, + "type '%.100s' is not an acceptable base type", + base_i->tp_name); + return NULL; + } + candidate = solid_base(base_i); + if (winner == NULL) { + winner = candidate; + base = base_i; + } + else if (PyType_IsSubtype(winner, candidate)) + ; + else if (PyType_IsSubtype(candidate, winner)) { + winner = candidate; + base = base_i; + } + else { + PyErr_SetString( + PyExc_TypeError, + "multiple bases have " + "instance lay-out conflict"); + return NULL; + } + } + if (base == NULL) + PyErr_SetString(PyExc_TypeError, + "a new-style class can't have only classic bases"); + return base; +} + +static const short slotoffsets[] = { + -1, /* invalid slot_ */ +/* Generated by typeslots.py */ +0, +0, +offsetof(PyHeapTypeObject, as_mapping.mp_ass_subscript), +offsetof(PyHeapTypeObject, as_mapping.mp_length), +offsetof(PyHeapTypeObject, as_mapping.mp_subscript), +offsetof(PyHeapTypeObject, as_number.nb_absolute), +offsetof(PyHeapTypeObject, as_number.nb_add), +offsetof(PyHeapTypeObject, as_number.nb_and), +offsetof(PyHeapTypeObject, as_number.nb_nonzero), +offsetof(PyHeapTypeObject, as_number.nb_divmod), +offsetof(PyHeapTypeObject, as_number.nb_float), +offsetof(PyHeapTypeObject, as_number.nb_floor_divide), +offsetof(PyHeapTypeObject, as_number.nb_index), +offsetof(PyHeapTypeObject, as_number.nb_inplace_add), +offsetof(PyHeapTypeObject, as_number.nb_inplace_and), +offsetof(PyHeapTypeObject, as_number.nb_inplace_floor_divide), +offsetof(PyHeapTypeObject, as_number.nb_inplace_lshift), +offsetof(PyHeapTypeObject, as_number.nb_inplace_multiply), +offsetof(PyHeapTypeObject, as_number.nb_inplace_or), +offsetof(PyHeapTypeObject, as_number.nb_inplace_power), +offsetof(PyHeapTypeObject, as_number.nb_inplace_remainder), +offsetof(PyHeapTypeObject, as_number.nb_inplace_rshift), +offsetof(PyHeapTypeObject, as_number.nb_inplace_subtract), +offsetof(PyHeapTypeObject, as_number.nb_inplace_true_divide), +offsetof(PyHeapTypeObject, as_number.nb_inplace_xor), +offsetof(PyHeapTypeObject, as_number.nb_int), +offsetof(PyHeapTypeObject, as_number.nb_invert), +offsetof(PyHeapTypeObject, as_number.nb_lshift), +offsetof(PyHeapTypeObject, as_number.nb_multiply), +offsetof(PyHeapTypeObject, as_number.nb_negative), +offsetof(PyHeapTypeObject, as_number.nb_or), +offsetof(PyHeapTypeObject, as_number.nb_positive), +offsetof(PyHeapTypeObject, as_number.nb_power), +offsetof(PyHeapTypeObject, as_number.nb_remainder), +offsetof(PyHeapTypeObject, as_number.nb_rshift), +offsetof(PyHeapTypeObject, as_number.nb_subtract), +offsetof(PyHeapTypeObject, as_number.nb_true_divide), +offsetof(PyHeapTypeObject, as_number.nb_xor), +offsetof(PyHeapTypeObject, as_sequence.sq_ass_item), +offsetof(PyHeapTypeObject, as_sequence.sq_concat), +offsetof(PyHeapTypeObject, as_sequence.sq_contains), +offsetof(PyHeapTypeObject, as_sequence.sq_inplace_concat), +offsetof(PyHeapTypeObject, as_sequence.sq_inplace_repeat), +offsetof(PyHeapTypeObject, as_sequence.sq_item), +offsetof(PyHeapTypeObject, as_sequence.sq_length), +offsetof(PyHeapTypeObject, as_sequence.sq_repeat), +offsetof(PyHeapTypeObject, ht_type.tp_alloc), +offsetof(PyHeapTypeObject, ht_type.tp_base), +offsetof(PyHeapTypeObject, ht_type.tp_bases), +offsetof(PyHeapTypeObject, ht_type.tp_call), +offsetof(PyHeapTypeObject, ht_type.tp_clear), +offsetof(PyHeapTypeObject, ht_type.tp_dealloc), +offsetof(PyHeapTypeObject, ht_type.tp_del), +offsetof(PyHeapTypeObject, ht_type.tp_descr_get), +offsetof(PyHeapTypeObject, ht_type.tp_descr_set), +offsetof(PyHeapTypeObject, ht_type.tp_doc), +offsetof(PyHeapTypeObject, ht_type.tp_getattr), +offsetof(PyHeapTypeObject, ht_type.tp_getattro), +offsetof(PyHeapTypeObject, ht_type.tp_hash), +offsetof(PyHeapTypeObject, ht_type.tp_init), +offsetof(PyHeapTypeObject, ht_type.tp_is_gc), +offsetof(PyHeapTypeObject, ht_type.tp_iter), +offsetof(PyHeapTypeObject, ht_type.tp_iternext), +offsetof(PyHeapTypeObject, ht_type.tp_methods), +offsetof(PyHeapTypeObject, ht_type.tp_new), +offsetof(PyHeapTypeObject, ht_type.tp_repr), +offsetof(PyHeapTypeObject, ht_type.tp_richcompare), +offsetof(PyHeapTypeObject, ht_type.tp_setattr), +offsetof(PyHeapTypeObject, ht_type.tp_setattro), +offsetof(PyHeapTypeObject, ht_type.tp_str), +offsetof(PyHeapTypeObject, ht_type.tp_traverse), +offsetof(PyHeapTypeObject, ht_type.tp_members), +offsetof(PyHeapTypeObject, ht_type.tp_getset), +offsetof(PyHeapTypeObject, ht_type.tp_free), +offsetof(PyHeapTypeObject, as_number.nb_long), +offsetof(PyHeapTypeObject, as_number.nb_divide), +offsetof(PyHeapTypeObject, as_sequence.sq_slice), +}; + +PyObject * +PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases) +{ + PyHeapTypeObject *res = (PyHeapTypeObject*)PyType_GenericAlloc(&PyType_Type, 0); + PyTypeObject *type, *base; + PyObject *modname; + char *s; + char *res_start = (char*)res; + PyType_Slot *slot_; + + /* Set the type name and qualname */ + s = (char *)strrchr(spec->name, '.'); // C++11 + if (s == NULL) + s = (char*)spec->name; + else + s++; + + if (res == NULL) + return NULL; + type = &res->ht_type; + /* The flags must be initialized early, before the GC traverses us */ + type->tp_flags = spec->flags | Py_TPFLAGS_HEAPTYPE; + // was PyUnicode_FromString in Python 3 + res->ht_name = PyString_FromString(s); + if (!res->ht_name) + goto fail; + // no ht_qualname in Python 2 + // res->ht_qualname = res->ht_name; + // Py_INCREF(res->ht_qualname); + type->tp_name = spec->name; + if (!type->tp_name) + goto fail; + + /* Adjust for empty tuple bases */ + if (!bases) { + base = &PyBaseObject_Type; + /* See whether Py_tp_base(s) was specified */ + for (slot_ = spec->slots; slot_->slot_; slot_++) { + if (slot_->slot_ == Py_tp_base) + base = (PyTypeObject *)slot_->pfunc; // C++11 + else if (slot_->slot_ == Py_tp_bases) { + bases = (PyObject *)slot_->pfunc; // C++11 + Py_INCREF(bases); + } + } + if (!bases) + bases = PyTuple_Pack(1, base); + if (!bases) + goto fail; + } + else + Py_INCREF(bases); + + /* Calculate best base, and check that all bases are type objects */ + base = best_base(bases); + if (base == NULL) { + goto fail; + } + if (!PyType_HasFeature(base, Py_TPFLAGS_BASETYPE)) { + PyErr_Format(PyExc_TypeError, + "type '%.100s' is not an acceptable base type", + base->tp_name); + goto fail; + } + + /* Initialize essential fields */ + // no async in Python 2 + // type->tp_as_async = &res->as_async; + type->tp_as_number = &res->as_number; + type->tp_as_sequence = &res->as_sequence; + type->tp_as_mapping = &res->as_mapping; + type->tp_as_buffer = &res->as_buffer; + /* Set tp_base and tp_bases */ + type->tp_bases = bases; + bases = NULL; + Py_INCREF(base); + type->tp_base = base; + + type->tp_basicsize = spec->basicsize; + type->tp_itemsize = spec->itemsize; + + for (slot_ = spec->slots; slot_->slot_; slot_++) { + if (slot_->slot_ < 0 + || (size_t)slot_->slot_ >= Py_ARRAY_LENGTH(slotoffsets)) { + PyErr_SetString(PyExc_RuntimeError, "invalid slot_ offset"); + goto fail; + } + if (slot_->slot_ == Py_tp_base || slot_->slot_ == Py_tp_bases) + /* Processed above */ + continue; + *(void**)(res_start + slotoffsets[slot_->slot_]) = slot_->pfunc; + + /* need to make a copy of the docstring slot_, which usually + points to a static string literal */ + if (slot_->slot_ == Py_tp_doc) { + // No signature in Python 2 + // const char *old_doc = _PyType_DocWithoutSignature(type->tp_name, slot_->pfunc); + const char *old_doc = (const char *)slot_->pfunc; + size_t len = strlen(old_doc)+1; + char *tp_doc = (char *)PyObject_MALLOC(len); // C++11 + if (tp_doc == NULL) { + PyErr_NoMemory(); + goto fail; + } + memcpy(tp_doc, old_doc, len); + type->tp_doc = tp_doc; + } + } + if (type->tp_dealloc == NULL) { + /* It's a heap type, so needs the heap types' dealloc. + subtype_dealloc will call the base type's tp_dealloc, if + necessary. */ + type->tp_dealloc = subtype_dealloc; + } + + if (PyType_Ready(type) < 0) + goto fail; + + // no ht_hached_keys in Python 2 + // if (type->tp_dictoffset) { + // res->ht_cached_keys = _PyDict_NewKeysForClass(); + // } + + /* Set type.__module__ */ + s = (char *)strrchr(spec->name, '.'); // c++11 + if (s != NULL) { + int err; + // was PyUnicode_FromStringAndSize in Python 3 + modname = PyString_FromStringAndSize( + spec->name, (Py_ssize_t)(s - spec->name)); + if (modname == NULL) { + goto fail; + } + // no PyId_ things in Python 2 + // err = _PyDict_SetItemId(type->tp_dict, &PyId___module__, modname); + err = PyDict_SetItemString(type->tp_dict, "__module__", modname); + Py_DECREF(modname); + if (err != 0) + goto fail; + } else { + // no PyErr_WarnFormat in Python 2 + // if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + // "builtin type %.200s has no __module__ attribute", + // spec->name)) + char msg[250]; + sprintf(msg, "builtin type %.200s has no __module__ attribute", spec->name); + if (PyErr_WarnEx(PyExc_DeprecationWarning, msg, 1)) + goto fail; + } + + return (PyObject*)res; + + fail: + Py_DECREF(res); + return NULL; +} + +PyObject * +PyType_FromSpec(PyType_Spec *spec) +{ + return PyType_FromSpecWithBases(spec, NULL); +} + +void * +PyType_GetSlot(PyTypeObject *type, int slot_) +{ + if (!PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE) || slot_ < 0) { + PyErr_BadInternalCall(); + return NULL; + } + if ((size_t)slot_ >= Py_ARRAY_LENGTH(slotoffsets)) { + /* Extension module requesting slot_ from a future version */ + return NULL; + } + return *(void**)(((char*)type) + slotoffsets[slot_]); +} + +} // extern "C" +#endif // PY_MAJOR_VERSION < 3 diff --git a/sources/shiboken2/libshiboken/typespec.h b/sources/shiboken2/libshiboken/typespec.h new file mode 100644 index 0000000..799fcb1 --- /dev/null +++ b/sources/shiboken2/libshiboken/typespec.h @@ -0,0 +1,153 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TYPESPEC_H +#define TYPESPEC_H + +#include +#include "shibokenmacros.h" + +#if PY_MAJOR_VERSION < 3 +extern "C" +{ + +typedef struct{ + int slot_; // slot is somehow reserved in Qt /* slot id, see below */ + void *pfunc; /* function pointer */ +} PyType_Slot; + +typedef struct{ + const char* name; + int basicsize; + int itemsize; + unsigned int flags; + PyType_Slot *slots; /* terminated by slot==0. */ +} PyType_Spec; + +LIBSHIBOKEN_API PyObject *PyType_FromSpec(PyType_Spec*); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +LIBSHIBOKEN_API PyObject *PyType_FromSpecWithBases(PyType_Spec*, PyObject*); +#endif +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000 +LIBSHIBOKEN_API void* PyType_GetSlot(PyTypeObject*, int); +#endif + +// from typeslots.h +/* Do not renumber the file; these numbers are part of the stable ABI. */ +/* Disabled, see #10181 */ +#undef Py_bf_getbuffer +#undef Py_bf_releasebuffer +#define Py_mp_ass_subscript 3 +#define Py_mp_length 4 +#define Py_mp_subscript 5 +#define Py_nb_absolute 6 +#define Py_nb_add 7 +#define Py_nb_and 8 +#define Py_nb_nonzero 9 +#define Py_nb_divmod 10 +#define Py_nb_float 11 +#define Py_nb_floor_divide 12 +#define Py_nb_index 13 +#define Py_nb_inplace_add 14 +#define Py_nb_inplace_and 15 +#define Py_nb_inplace_floor_divide 16 +#define Py_nb_inplace_lshift 17 +#define Py_nb_inplace_multiply 18 +#define Py_nb_inplace_or 19 +#define Py_nb_inplace_power 20 +#define Py_nb_inplace_remainder 21 +#define Py_nb_inplace_rshift 22 +#define Py_nb_inplace_subtract 23 +#define Py_nb_inplace_true_divide 24 +#define Py_nb_inplace_xor 25 +#define Py_nb_int 26 +#define Py_nb_invert 27 +#define Py_nb_lshift 28 +#define Py_nb_multiply 29 +#define Py_nb_negative 30 +#define Py_nb_or 31 +#define Py_nb_positive 32 +#define Py_nb_power 33 +#define Py_nb_remainder 34 +#define Py_nb_rshift 35 +#define Py_nb_subtract 36 +#define Py_nb_true_divide 37 +#define Py_nb_xor 38 +#define Py_sq_ass_item 39 +#define Py_sq_concat 40 +#define Py_sq_contains 41 +#define Py_sq_inplace_concat 42 +#define Py_sq_inplace_repeat 43 +#define Py_sq_item 44 +#define Py_sq_length 45 +#define Py_sq_repeat 46 +#define Py_tp_alloc 47 +#define Py_tp_base 48 +#define Py_tp_bases 49 +#define Py_tp_call 50 +#define Py_tp_clear 51 +#define Py_tp_dealloc 52 +#define Py_tp_del 53 +#define Py_tp_descr_get 54 +#define Py_tp_descr_set 55 +#define Py_tp_doc 56 +#define Py_tp_getattr 57 +#define Py_tp_getattro 58 +#define Py_tp_hash 59 +#define Py_tp_init 60 +#define Py_tp_is_gc 61 +#define Py_tp_iter 62 +#define Py_tp_iternext 63 +#define Py_tp_methods 64 +#define Py_tp_new 65 +#define Py_tp_repr 66 +#define Py_tp_richcompare 67 +#define Py_tp_setattr 68 +#define Py_tp_setattro 69 +#define Py_tp_str 70 +#define Py_tp_traverse 71 +#define Py_tp_members 72 +#define Py_tp_getset 73 +#define Py_tp_free 74 +#define Py_nb_long 75 +#define Py_nb_divide 76 +#define Py_sq_slice 77 +} // extern "C" +#endif // PY_MAJOR_VERSION < 3 +#endif // TYPESPEC_H diff --git a/sources/shiboken2/libshiboken/voidptr.cpp b/sources/shiboken2/libshiboken/voidptr.cpp new file mode 100644 index 0000000..3a0dbb4 --- /dev/null +++ b/sources/shiboken2/libshiboken/voidptr.cpp @@ -0,0 +1,363 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "voidptr.h" +#include "sbkconverter.h" +#include "basewrapper.h" +#include "basewrapper_p.h" + +extern "C" +{ + +// Void pointer object definition. +typedef struct { + PyObject_HEAD + void *cptr; + Py_ssize_t size; + bool isWritable; +} SbkVoidPtrObject; + +PyObject *SbkVoidPtrObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + // PYSIDE-560: It is much safer to first call a function and then do a + // type cast than to do everything in one line. The bad construct looked + // like this, actual call forgotten: + // SbkVoidPtrObject *self = + // reinterpret_cast(type->tp_alloc); + PyObject *ob = type->tp_alloc(type, 0); + SbkVoidPtrObject *self = reinterpret_cast(ob); + + if (self != 0) { + self->cptr = 0; + self->size = -1; + self->isWritable = false; + } + + return reinterpret_cast(self); +} + +#define SbkVoidPtr_Check(op) (Py_TYPE(op) == SbkVoidPtrTypeF()) + + +int SbkVoidPtrObject_init(PyObject *self, PyObject *args, PyObject *kwds) +{ + PyObject *addressObject; + Py_ssize_t size = -1; + int isWritable = 0; + SbkVoidPtrObject *sbkSelf = reinterpret_cast(self); + + static const char *kwlist[] = {"address", "size", "writeable", 0}; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|ni", const_cast(kwlist), + &addressObject, &size, &isWritable)) + return -1; + + // Void pointer. + if (SbkVoidPtr_Check(addressObject)) { + SbkVoidPtrObject *sbkOther = reinterpret_cast(addressObject); + sbkSelf->cptr = sbkOther->cptr; + sbkSelf->size = sbkOther->size; + sbkSelf->isWritable = sbkOther->isWritable; + } + // Shiboken::Object wrapper. + else if (Shiboken::Object::checkType(addressObject)) { + SbkObject *sbkOther = reinterpret_cast(addressObject); + sbkSelf->cptr = sbkOther->d->cptr[0]; + sbkSelf->size = size; + sbkSelf->isWritable = isWritable > 0 ? true : false; + } + // Python buffer interface. + else if (PyObject_CheckBuffer(addressObject)) { + Py_buffer bufferView; + + // Bail out if the object can't provide a simple contiguous buffer. + if (PyObject_GetBuffer(addressObject, &bufferView, PyBUF_SIMPLE) < 0) + return 0; + + sbkSelf->cptr = bufferView.buf; + sbkSelf->size = bufferView.len; + sbkSelf->isWritable = bufferView.readonly > 0 ? false : true; + + // Release the buffer. + PyBuffer_Release(&bufferView); + } + // An integer representing an address. + else { + void *cptr = PyLong_AsVoidPtr(addressObject); + if (PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "Creating a VoidPtr object requires an address of a C++ object, " + "a wrapped Shiboken Object type, " + "an object implementing the Python Buffer interface, " + "or another VoidPtr object."); + return -1; + } + sbkSelf->cptr = cptr; + sbkSelf->size = size; + sbkSelf->isWritable = isWritable > 0 ? true : false; + } + + return 0; +} + +PyObject *SbkVoidPtrObject_richcmp(PyObject *obj1, PyObject *obj2, int op) +{ + PyObject *result = Py_False; + void *cptr1 = 0; + void *cptr2 = 0; + bool validObjects = true; + + if (SbkVoidPtr_Check(obj1)) + cptr1 = reinterpret_cast(obj1)->cptr; + else + validObjects = false; + + if (SbkVoidPtr_Check(obj2)) + cptr2 = reinterpret_cast(obj2)->cptr; + else + validObjects = false; + + if (validObjects) { + switch (op) { + case Py_EQ: if (cptr1 == cptr2) result = Py_True; break; + case Py_NE: if (cptr1 != cptr2) result = Py_True; break; + case Py_LT: break; + case Py_LE: break; + case Py_GT: break; + case Py_GE: break; + } + } + + Py_INCREF(result); + return result; +} + +PyObject *SbkVoidPtrObject_int(PyObject *v) +{ + SbkVoidPtrObject *sbkObject = reinterpret_cast(v); + return PyLong_FromVoidPtr(sbkObject->cptr); +} + +static Py_ssize_t SbkVoidPtrObject_length(PyObject *v) +{ + SbkVoidPtrObject *sbkObject = reinterpret_cast(v); + if (sbkObject->size < 0) { + PyErr_SetString(PyExc_IndexError, "VoidPtr does not have a size set."); + return -1; + } + + return sbkObject->size; +} + +static const char trueString[] = "True" ; +static const char falseString[] = "False" ; + +PyObject *SbkVoidPtrObject_repr(PyObject *v) +{ + + + SbkVoidPtrObject *sbkObject = reinterpret_cast(v); + PyObject *s = PyBytes_FromFormat("%s(%p, %zd, %s)", + Py_TYPE(sbkObject)->tp_name, + sbkObject->cptr, + sbkObject->size, + sbkObject->isWritable ? trueString : falseString); + Py_XINCREF(s); + return s; +} + +PyObject *SbkVoidPtrObject_str(PyObject *v) +{ + SbkVoidPtrObject *sbkObject = reinterpret_cast(v); + PyObject *s = PyBytes_FromFormat("%s(Address %p, Size %zd, isWritable %s)", + Py_TYPE(sbkObject)->tp_name, + sbkObject->cptr, + sbkObject->size, + sbkObject->isWritable ? trueString : falseString); + Py_XINCREF(s); + return s; +} + + +// Void pointer type definition. +static PyType_Slot SbkVoidPtrType_slots[] = { + {Py_tp_repr, (void *)SbkVoidPtrObject_repr}, + {Py_nb_int, (void *)SbkVoidPtrObject_int}, + {Py_sq_length, (void *)SbkVoidPtrObject_length}, + {Py_tp_str, (void *)SbkVoidPtrObject_str}, + {Py_tp_richcompare, (void *)SbkVoidPtrObject_richcmp}, + {Py_tp_init, (void *)SbkVoidPtrObject_init}, + {Py_tp_new, (void *)SbkVoidPtrObject_new}, + {Py_tp_dealloc, (void *)SbkDummyDealloc}, + {0, 0} +}; +static PyType_Spec SbkVoidPtrType_spec = { + "shiboken2.libshiboken.VoidPtr", + sizeof(SbkVoidPtrObject), + 0, + Py_TPFLAGS_DEFAULT, + SbkVoidPtrType_slots, +}; + + +} + +PyTypeObject *SbkVoidPtrTypeF(void) +{ + static PyTypeObject *type = nullptr; + if (!type) + type = (PyTypeObject *)PyType_FromSpec(&SbkVoidPtrType_spec); + return type; +} + +namespace VoidPtr { + +static int voidPointerInitialized = false; + +void init() +{ + if (PyType_Ready(reinterpret_cast(SbkVoidPtrTypeF())) < 0) + Py_FatalError("[libshiboken] Failed to initialize Shiboken.VoidPtr type."); + else + voidPointerInitialized = true; +} + +void addVoidPtrToModule(PyObject *module) +{ + if (voidPointerInitialized) { + Py_INCREF(SbkVoidPtrTypeF()); + PyModule_AddObject(module, PepType_GetNameStr(SbkVoidPtrTypeF()), + reinterpret_cast(SbkVoidPtrTypeF())); + } +} + +static PyObject *createVoidPtr(void *cppIn, Py_ssize_t size = 0, bool isWritable = false) +{ + if (!cppIn) + Py_RETURN_NONE; + + SbkVoidPtrObject *result = PyObject_New(SbkVoidPtrObject, SbkVoidPtrTypeF()); + if (!result) + Py_RETURN_NONE; + + result->cptr = cppIn; + result->size = size; + result->isWritable = isWritable; + + return reinterpret_cast(result); +} + +static PyObject *toPython(const void *cppIn) +{ + return createVoidPtr(const_cast(cppIn)); +} + +static void VoidPtrToCpp(PyObject *pyIn, void *cppOut) +{ + SbkVoidPtrObject *sbkIn = reinterpret_cast(pyIn); + *reinterpret_cast(cppOut) = sbkIn->cptr; +} + +static PythonToCppFunc VoidPtrToCppIsConvertible(PyObject *pyIn) +{ + return SbkVoidPtr_Check(pyIn) ? VoidPtrToCpp : 0; +} + +static void SbkObjectToCpp(PyObject *pyIn, void *cppOut) +{ + SbkObject *sbkIn = reinterpret_cast(pyIn); + *reinterpret_cast(cppOut) = sbkIn->d->cptr[0]; +} + +static PythonToCppFunc SbkObjectToCppIsConvertible(PyObject *pyIn) +{ + return Shiboken::Object::checkType(pyIn) ? SbkObjectToCpp : 0; +} + +static void PythonBufferToCpp(PyObject *pyIn, void *cppOut) +{ + if (PyObject_CheckBuffer(pyIn)) { + Py_buffer bufferView; + + // Bail out if the object can't provide a simple contiguous buffer. + if (PyObject_GetBuffer(pyIn, &bufferView, PyBUF_SIMPLE) < 0) + return; + + *reinterpret_cast(cppOut) = bufferView.buf; + + // Release the buffer. + PyBuffer_Release(&bufferView); + } +} + +static PythonToCppFunc PythonBufferToCppIsConvertible(PyObject *pyIn) +{ + if (PyObject_CheckBuffer(pyIn)) { + Py_buffer bufferView; + + // Bail out if the object can't provide a simple contiguous buffer. + if (PyObject_GetBuffer(pyIn, &bufferView, PyBUF_SIMPLE) < 0) + return 0; + + // Release the buffer. + PyBuffer_Release(&bufferView); + + return PythonBufferToCpp; + } + return 0; +} + +SbkConverter *createConverter() +{ + SbkConverter *converter = Shiboken::Conversions::createConverter(SbkVoidPtrTypeF(), toPython); + Shiboken::Conversions::addPythonToCppValueConversion(converter, + VoidPtrToCpp, + VoidPtrToCppIsConvertible); + Shiboken::Conversions::addPythonToCppValueConversion(converter, + SbkObjectToCpp, + SbkObjectToCppIsConvertible); + Shiboken::Conversions::addPythonToCppValueConversion(converter, + PythonBufferToCpp, + PythonBufferToCppIsConvertible); + return converter; +} + +} // namespace VoidPtr + + diff --git a/sources/shiboken2/libshiboken/voidptr.h b/sources/shiboken2/libshiboken/voidptr.h new file mode 100644 index 0000000..e74c104 --- /dev/null +++ b/sources/shiboken2/libshiboken/voidptr.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef VOIDPTR_H +#define VOIDPTR_H + +#include "sbkpython.h" +#include "shibokenmacros.h" +#include "sbkconverter.h" + +extern "C" +{ + +// Void pointer type declaration. +extern LIBSHIBOKEN_API PyTypeObject *SbkVoidPtrTypeF(void); + +} // extern "C" + +namespace VoidPtr +{ + +void init(); +SbkConverter *createConverter(); +LIBSHIBOKEN_API void addVoidPtrToModule(PyObject *module); + +} + + +#endif // VOIDPTR_H diff --git a/sources/shiboken2/shiboken_version.py b/sources/shiboken2/shiboken_version.py new file mode 100644 index 0000000..08429ac --- /dev/null +++ b/sources/shiboken2/shiboken_version.py @@ -0,0 +1,55 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +major_version = "5" +minor_version = "11" +patch_version = "2" + +# For example: "a", "b", "rc" +# (which means "alpha", "beta", "release candidate"). +# An empty string means the generated package will be an official release. +pre_release_version_type = "" + +# For example: "1", "2" (which means "beta1", "beta2", if type is "b"). +pre_release_version = "" + +if __name__ == '__main__': + # Used by CMake. + print('{0};{1};{2};{3};{4}'.format(major_version, minor_version, patch_version, + pre_release_version_type, pre_release_version)) diff --git a/sources/shiboken2/shibokenmodule/CMakeLists.txt b/sources/shiboken2/shibokenmodule/CMakeLists.txt new file mode 100644 index 0000000..f2d7b30 --- /dev/null +++ b/sources/shiboken2/shibokenmodule/CMakeLists.txt @@ -0,0 +1,43 @@ +project(shibokenmodule) + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/shibokenmodule.txt.in" + "${CMAKE_CURRENT_BINARY_DIR}/shibokenmodule.txt" @ONLY) + + +set(sample_SRC +${CMAKE_CURRENT_BINARY_DIR}/shiboken2/shiboken2_module_wrapper.cpp +) + +set(shibokenmodule_TYPESYSTEM +${CMAKE_CURRENT_SOURCE_DIR}/typesystem_shiboken.xml +) + +add_custom_command(OUTPUT ${sample_SRC} +# Note: shiboken2 is an executable target. By not specifying its explicit +# path, CMAKE figures it out, itself! +# This fixes an issue with Visual Studio, see https://github.com/PySide/shiboken2/pull/11 +COMMAND shiboken2 --project-file=${CMAKE_CURRENT_BINARY_DIR}/shibokenmodule.txt ${GENERATOR_EXTRA_FLAGS} +DEPENDS ${shibokenmodule_TYPESYSTEM} +WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +COMMENT "Running generator for 'shiboken2'..." +) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR} + ${SBK_PYTHON_INCLUDE_DIR} + ${libshiboken_SOURCE_DIR} + ${libshiboken_BINARY_DIR}) +add_library(shibokenmodule MODULE ${sample_SRC}) +set_property(TARGET shibokenmodule PROPERTY PREFIX "") +set_property(TARGET shibokenmodule PROPERTY OUTPUT_NAME "shiboken2${PYTHON_EXTENSION_SUFFIX}") + +if(WIN32) + set_property(TARGET shibokenmodule PROPERTY SUFFIX ".pyd") +endif() +target_link_libraries(shibokenmodule + ${SBK_PYTHON_LIBRARIES} + libshiboken) + +add_dependencies(shibokenmodule shiboken2) + +install(TARGETS shibokenmodule DESTINATION ${PYTHON_SITE_PACKAGES}) diff --git a/sources/shiboken2/shibokenmodule/nothing.h b/sources/shiboken2/shibokenmodule/nothing.h new file mode 100644 index 0000000..e69de29 diff --git a/sources/shiboken2/shibokenmodule/shibokenmodule.txt.in b/sources/shiboken2/shibokenmodule/shibokenmodule.txt.in new file mode 100644 index 0000000..c5adc60 --- /dev/null +++ b/sources/shiboken2/shibokenmodule/shibokenmodule.txt.in @@ -0,0 +1,16 @@ +[generator-project] + +generator-set = shiboken + +header-file = @CMAKE_CURRENT_SOURCE_DIR@/nothing.h +typesystem-file = @CMAKE_CURRENT_SOURCE_DIR@/typesystem_shiboken.xml + +output-directory = @CMAKE_CURRENT_BINARY_DIR@ + +# include-path = @libsample_SOURCE_DIR@ + +typesystem-path = @CMAKE_CURRENT_SOURCE_DIR@ + +avoid-protected-hack +#enable-parent-ctor-heuristic +#use-isnull-as-nb_nonzero diff --git a/sources/shiboken2/shibokenmodule/typesystem_shiboken.xml b/sources/shiboken2/shibokenmodule/typesystem_shiboken.xml new file mode 100644 index 0000000..bdb0c93 --- /dev/null +++ b/sources/shiboken2/shibokenmodule/typesystem_shiboken.xml @@ -0,0 +1,123 @@ + + + + + + + + + + bool isValid = Shiboken::Object::isValid(%1, false); + %PYARG_0 = %CONVERTTOPYTHON[bool](isValid); + + + + + + Shiboken::Object::invalidate(%1); + + + + + + if (Shiboken::ObjectType::checkType((PyTypeObject*)%2)) + %PYARG_0 = Shiboken::Object::newObject((SbkObjectType*)%2, (void*)%1, false, true); + else + PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); + + + + + + if (Shiboken::Object::checkType(%1)) { + std::vector<void*> ptrs = Shiboken::Object::cppPointers((SbkObject*)%1); + %PYARG_0 = PyTuple_New(ptrs.size()); + for (std::size_t i = 0; i < ptrs.size(); ++i) + PyTuple_SET_ITEM(%PYARG_0, i, PyLong_FromVoidPtr(ptrs[i])); + } else { + PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); + } + + + + + + if (Shiboken::Object::checkType(%1)) { + Shiboken::Object::callCppDestructors((SbkObject*)%1); + } else { + PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); + } + + + + + + if (Shiboken::Object::checkType(%1)) { + bool hasOwnership = Shiboken::Object::hasOwnership((SbkObject*)%1); + %PYARG_0 = %CONVERTTOPYTHON[bool](hasOwnership); + } else { + PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); + } + + + + + + if (Shiboken::Object::checkType(%1)) { + bool wasCreatedByPython = Shiboken::Object::wasCreatedByPython((SbkObject*)%1); + %PYARG_0 = %CONVERTTOPYTHON[bool](wasCreatedByPython); + } else { + PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); + } + + + + + + if (!Shiboken::Object::checkType(%1)) { + %PYARG_0 = Shiboken::String::fromCString("Ordinary Python type."); + } else { + std::string str = Shiboken::Object::info((SbkObject*)%1); + %PYARG_0 = Shiboken::String::fromCString(str.c_str()); + } + + + + + + std::set<PyObject*> setAll = Shiboken::BindingManager::instance().getAllPyObjects(); + PyObject* listAll = PyList_New(0); + if (listAll == NULL) + return NULL; + + const std::set<PyObject*>::iterator end = setAll.end(); + for (std::set<PyObject*>::iterator iter = setAll.begin(); iter != end; ++iter) { + if (*iter != NULL) { + if (PyList_Append(listAll, *iter) != 0) { + Py_DECREF(listAll); + return NULL; + } + } + } + return listAll; + + + + + + + + + // Add __version__ and __version_info__ attributes to the module + PyObject* version = PyTuple_New(5); + PyTuple_SET_ITEM(version, 0, PyInt_FromLong(SHIBOKEN_MAJOR_VERSION)); + PyTuple_SET_ITEM(version, 1, PyInt_FromLong(SHIBOKEN_MINOR_VERSION)); + PyTuple_SET_ITEM(version, 2, PyInt_FromLong(SHIBOKEN_MICRO_VERSION)); + PyTuple_SET_ITEM(version, 3, Shiboken::String::fromCString(SHIBOKEN_RELEASE_LEVEL)); + PyTuple_SET_ITEM(version, 4, PyInt_FromLong(SHIBOKEN_SERIAL)); + PyModule_AddObject(module, "__version_info__", version); + PyModule_AddStringConstant(module, "__version__", SHIBOKEN_VERSION); + + VoidPtr::addVoidPtrToModule(module); + + diff --git a/sources/shiboken2/tests/CMakeLists.txt b/sources/shiboken2/tests/CMakeLists.txt new file mode 100644 index 0000000..c06c56f --- /dev/null +++ b/sources/shiboken2/tests/CMakeLists.txt @@ -0,0 +1,102 @@ +find_package(Qt5 REQUIRED COMPONENTS Core) +include_directories(${Qt5Core_INCLUDE_DIRS}) + +add_subdirectory(libminimal) +if(NOT DEFINED MINIMAL_TESTS) + add_subdirectory(libsample) + add_subdirectory(libsmart) + add_subdirectory(libother) +endif() + +if(WIN32 OR DEFINED AVOID_PROTECTED_HACK) + message(STATUS "Tests will be generated avoiding the protected hack!") + set(GENERATOR_EXTRA_FLAGS --avoid-protected-hack) +else() + message(STATUS "Tests will be generated using the protected hack!") + set(GENERATOR_EXTRA_FLAGS ) +endif() + +add_subdirectory(minimalbinding) +if(NOT DEFINED MINIMAL_TESTS) + add_subdirectory(samplebinding) + add_subdirectory(smartbinding) + add_subdirectory(otherbinding) +endif() + +if(DEFINED MINIMAL_TESTS) + file(GLOB TEST_FILES minimalbinding/*_test.py) +else() + file(GLOB TEST_FILES minimalbinding/*_test.py + samplebinding/*_test.py + otherbinding/*_test.py + smartbinding/*_test.py + shibokenmodule/*_test.py) +endif() +list(SORT TEST_FILES) + +set(test_blacklist "") + +find_package(PythonInterp REQUIRED) +if(NOT CTEST_TESTING_TIMEOUT) + set(CTEST_TESTING_TIMEOUT 60) +endif() + +if(CMAKE_VERSION VERSION_LESS 2.8) + message("CMake version greater than 2.8 necessary to run tests") +else() + if(WIN32) + set(TEST_PYTHONPATH "${smart_BINARY_DIR};${minimal_BINARY_DIR};${sample_BINARY_DIR};${other_BINARY_DIR};${shibokenmodule_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}") + set(TEST_LIBRARY_PATH "$ENV{PATH};${libminimal_BINARY_DIR};${libsample_BINARY_DIR};${libother_BINARY_DIR};${libsmart_BINARY_DIR};${libshiboken_BINARY_DIR}") + set(LIBRARY_PATH_VAR "PATH") + string(REPLACE "\\" "/" TEST_PYTHONPATH "${TEST_PYTHONPATH}") + string(REPLACE "\\" "/" TEST_LIBRARY_PATH "${TEST_LIBRARY_PATH}") + string(REPLACE ";" "\\;" TEST_PYTHONPATH "${TEST_PYTHONPATH}") + string(REPLACE ";" "\\;" TEST_LIBRARY_PATH "${TEST_LIBRARY_PATH}") + else() + set(TEST_PYTHONPATH "${smart_BINARY_DIR}:${minimal_BINARY_DIR}:${sample_BINARY_DIR}:${other_BINARY_DIR}:${shibokenmodule_BINARY_DIR}:${CMAKE_CURRENT_SOURCE_DIR}") + set(TEST_LIBRARY_PATH "$ENV{LD_LIBRARY_PATH}:${libminimal_BINARY_DIR}:${libsample_BINARY_DIR}:${libother_BINARY_DIR}:${libsmart_BINARY_DIR}:${libshiboken_BINARY_DIR}") + set(LIBRARY_PATH_VAR "LD_LIBRARY_PATH") + endif() + foreach(test_file ${TEST_FILES}) + string(REGEX MATCH "/([^/]+)(binding|module)/([^/]+)_test.py" tmp ${test_file}) + set(test_name "${CMAKE_MATCH_1}_${CMAKE_MATCH_3}") + list(FIND test_blacklist ${test_name} expect_fail) + add_test(${test_name} ${PYTHON_EXECUTABLE} ${test_file}) + set_tests_properties(${test_name} PROPERTIES ENVIRONMENT "PYTHONPATH=${TEST_PYTHONPATH};${LIBRARY_PATH_VAR}=${TEST_LIBRARY_PATH}") + set_tests_properties(${test_name} PROPERTIES TIMEOUT ${CTEST_TESTING_TIMEOUT}) + if (${expect_fail} GREATER -1) + set_tests_properties(${test_name} PROPERTIES WILL_FAIL TRUE) + endif() + endforeach() +endif() + +add_subdirectory(dumpcodemodel) + +# FIXME Skipped until add an option to choose the generator +# add_subdirectory(test_generator) + +if (NOT APIEXTRACTOR_DOCSTRINGS_DISABLED) +# project(sphinxtabletest) +# +# # TODO +# set(sphinxtabletest_SRC sphinxtabletest.cpp) +# qt4_automoc(${sphinxtabletest_SRC}) +# +# include_directories(${QT_INCLUDE_DIR} +# ${QT_QTCORE_INCLUDE_DIR} +# ${CMAKE_CURRENT_BINARY_DIR} +# ${qtdoc_generator_SOURCE_DIR}) +# +# add_executable(sphinxtabletest ${sphinxtabletest_SRC}) +# +# target_link_libraries(sphinxtabletest +# ${QT_QTTEST_LIBRARY} +# ${APIEXTRACTOR_LIBRARY} +# qtdoc_generator +# genrunner) +# +# add_test("sphinxtable" sphinxtabletest) +# if (INSTALL_TESTS) +# install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/sphinxtabletest DESTINATION ${TEST_INSTALL_DIR}) +# endif() +endif() diff --git a/sources/shiboken2/tests/dumpcodemodel/CMakeLists.txt b/sources/shiboken2/tests/dumpcodemodel/CMakeLists.txt new file mode 100644 index 0000000..af18cb3 --- /dev/null +++ b/sources/shiboken2/tests/dumpcodemodel/CMakeLists.txt @@ -0,0 +1,5 @@ +add_executable(dumpcodemodel main.cpp) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${apiextractor_SOURCE_DIR} ${Qt5Core_INCLUDE_DIRS}) + +target_link_libraries(dumpcodemodel apiextractor ${Qt5Core_LIBRARIES}) diff --git a/sources/shiboken2/tests/dumpcodemodel/main.cpp b/sources/shiboken2/tests/dumpcodemodel/main.cpp new file mode 100644 index 0000000..e132c97 --- /dev/null +++ b/sources/shiboken2/tests/dumpcodemodel/main.cpp @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +static inline QString languageLevelDescription() +{ + return QLatin1String("C++ Language level (c++11..c++17, default=") + + QLatin1String(clang::languageLevelOption(clang::emulatedCompilerLanguageLevel())) + + QLatin1Char(')'); +} + +int main(int argc, char **argv) +{ + QCoreApplication app(argc, argv); + + QCommandLineParser parser; + parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions); + parser.setApplicationDescription(QStringLiteral("Code model tester")); + parser.addHelpOption(); + parser.addVersionOption(); + QCommandLineOption verboseOption(QStringLiteral("d"), + QStringLiteral("Display verbose output about types")); + parser.addOption(verboseOption); + QCommandLineOption languageLevelOption(QStringLiteral("std"), + languageLevelDescription(), + QStringLiteral("level")); + parser.addOption(languageLevelOption); + parser.addPositionalArgument(QStringLiteral("file"), QStringLiteral("C++ source file")); + + parser.process(app); + const QStringList &positionalArguments = parser.positionalArguments(); + if (positionalArguments.isEmpty()) + parser.showHelp(1); + + QByteArrayList arguments; + std::transform(positionalArguments.cbegin(), positionalArguments.cend(), + std::back_inserter(arguments), QFile::encodeName); + + LanguageLevel level = LanguageLevel::Default; + if (parser.isSet(languageLevelOption)) { + const QByteArray value = parser.value(languageLevelOption).toLatin1(); + level = clang::languageLevelFromOption(value.constData()); + if (level == LanguageLevel::Default) { + std::cerr << "Invalid value \"" << value.constData() + << "\" for language level option.\n"; + return -2; + } + } + + const FileModelItem dom = AbstractMetaBuilderPrivate::buildDom(arguments, level, 0); + if (dom.isNull()) { + QString message = QLatin1String("Unable to parse ") + positionalArguments.join(QLatin1Char(' ')); + std::cerr << qPrintable(message) << '\n'; + return -2; + } + + QString output; + { + QDebug debug(&output); + if (parser.isSet(verboseOption)) + debug.setVerbosity(3); + debug << dom.data(); + } + std::cout << qPrintable(output) << '\n'; + + return 0; +} diff --git a/sources/shiboken2/tests/libminimal/CMakeLists.txt b/sources/shiboken2/tests/libminimal/CMakeLists.txt new file mode 100644 index 0000000..a258925 --- /dev/null +++ b/sources/shiboken2/tests/libminimal/CMakeLists.txt @@ -0,0 +1,13 @@ +project(libminimal) + +set(libminimal_SRC +obj.cpp +listuser.cpp +typedef.cpp +) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +add_definitions("-DLIBMINIMAL_BUILD") +add_library(libminimal SHARED ${libminimal_SRC}) +set_property(TARGET libminimal PROPERTY PREFIX "") + diff --git a/sources/shiboken2/tests/libminimal/libminimalmacros.h b/sources/shiboken2/tests/libminimal/libminimalmacros.h new file mode 100644 index 0000000..a9c4176 --- /dev/null +++ b/sources/shiboken2/tests/libminimal/libminimalmacros.h @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef LIBMINIMALMACROS_H +#define LIBMINIMALMACROS_H + +#if defined _WIN32 || defined __CYGWIN__ + #if LIBMINIMAL_BUILD + #define LIBMINIMAL_API __declspec(dllexport) + #else + #define LIBMINIMAL_API __declspec(dllimport) + #endif +#else +#if __GNUC__ >= 4 + #define LIBMINIMAL_API __attribute__ ((visibility("default"))) +#else + #define LIBMINIMAL_API +#endif +#endif + +#endif diff --git a/sources/shiboken2/tests/libminimal/listuser.cpp b/sources/shiboken2/tests/libminimal/listuser.cpp new file mode 100644 index 0000000..4ce00f3 --- /dev/null +++ b/sources/shiboken2/tests/libminimal/listuser.cpp @@ -0,0 +1,124 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include "listuser.h" + +std::list +ListUser::createIntList(int num) +{ + std::list retval; + for (int i = 0; i < num; ++i) + retval.push_back(i); + return retval; +} + +int +ListUser::sumIntList(std::list intList) +{ + int total = 0; + for (std::list::iterator iter = intList.begin(); iter != intList.end(); iter++) + total += *iter; + return total; +} + +std::list +ListUser::createMinBoolList(MinBool mb1, MinBool mb2) +{ + std::list retval; + retval.push_back(mb1); + retval.push_back(mb2); + return retval; +} + +MinBool +ListUser::oredMinBoolList(std::list minBoolList) +{ + MinBool result(false); + for (std::list::iterator iter = minBoolList.begin(); iter != minBoolList.end(); iter++) + result |= *iter; + return result; +} + +std::list +ListUser::createValList(int num) +{ + std::list retval; + for (int i = 0; i < num; ++i) + retval.push_back(Val(i)); + return retval; +} + +int +ListUser::sumValList(std::list valList) +{ + int total = 0; + for (std::list::iterator iter = valList.begin(); iter != valList.end(); iter++) + total += iter->valId(); + return total; +} + +std::list +ListUser::createObjList(Obj* o1, Obj* o2) +{ + std::list retval; + retval.push_back(o1); + retval.push_back(o2); + return retval; +} + +int +ListUser::sumObjList(std::list objList) +{ + int total = 0; + for (std::list::iterator iter = objList.begin(); iter != objList.end(); iter++) + total += (*iter)->objId(); + return total; +} + +std::list > +ListUser::createListOfIntLists(int num) +{ + std::list > retval; + for (int i = 0; i < num; ++i) + retval.push_back(createIntList(num)); + return retval; +} + +int +ListUser::sumListOfIntLists(std::list > intListList) +{ + int total = 0; + for (std::list >::iterator it0 = intListList.begin(); it0 != intListList.end(); it0++) { + for (std::list::iterator it1 = (*it0).begin(); it1 != (*it0).end(); it1++) + total += *it1; + } + return total; +} + diff --git a/sources/shiboken2/tests/libminimal/listuser.h b/sources/shiboken2/tests/libminimal/listuser.h new file mode 100644 index 0000000..6c7e6ae --- /dev/null +++ b/sources/shiboken2/tests/libminimal/listuser.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef LISTUSER_H +#define LISTUSER_H + +#include +#include "obj.h" +#include "val.h" +#include "minbool.h" + +#include "libminimalmacros.h" + +struct LIBMINIMAL_API ListUser +{ + virtual ~ListUser() {} + + // List of C++ primitive type items + virtual std::list createIntList(int num); + std::list callCreateIntList(int num) { return createIntList(num); } + virtual int sumIntList(std::list intList); + int callSumIntList(std::list intList) { return sumIntList(intList); } + + // List of C++ MinBool objects used as primitives in Python + virtual std::list createMinBoolList(MinBool mb1, MinBool mb2); + std::list callCreateMinBoolList(MinBool mb1, MinBool mb2) { return createMinBoolList(mb1, mb2); } + virtual MinBool oredMinBoolList(std::list minBoolList); + MinBool callOredMinBoolList(std::list minBoolList) { return oredMinBoolList(minBoolList); } + + // List of C++ value types + virtual std::list createValList(int num); + std::list callCreateValList(int num) { return createValList(num); } + virtual int sumValList(std::list valList); + int callSumValList(std::list valList) { return sumValList(valList); } + + // List of C++ object types + virtual std::list createObjList(Obj* o1, Obj* o2); + std::list callCreateObjList(Obj* o1, Obj* o2) { return createObjList(o1, o2); } + virtual int sumObjList(std::list objList); + int callSumObjList(std::list objList) { return sumObjList(objList); } + + // List of lists of C++ primitive type items + virtual std::list > createListOfIntLists(int num); + std::list > callCreateListOfIntLists(int num) { return createListOfIntLists(num); } + virtual int sumListOfIntLists(std::list > intListList); + int callSumListOfIntLists(std::list > intListList) { return sumListOfIntLists(intListList); } +}; + +#endif // LISTUSER_H + diff --git a/sources/shiboken2/tests/libminimal/minbool.h b/sources/shiboken2/tests/libminimal/minbool.h new file mode 100644 index 0000000..72a2cba --- /dev/null +++ b/sources/shiboken2/tests/libminimal/minbool.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MINBOOL_H +#define MINBOOL_H + +#include "libminimalmacros.h" + +class LIBMINIMAL_API MinBool +{ +public: + inline explicit MinBool(bool b) : m_value(b) {} + bool value() const { return m_value; } + inline MinBool operator!() const { return MinBool(!m_value); } + inline MinBool& operator|=(const MinBool& other) { + m_value = m_value | other.m_value; + return *this; + } +private: + bool m_value; +}; + +inline bool operator==(MinBool b1, bool b2) { return (!b1).value() == !b2; } +inline bool operator==(bool b1, MinBool b2) { return (!b1) == (!b2).value(); } +inline bool operator==(MinBool b1, MinBool b2) { return (!b1).value() == (!b2).value(); } +inline bool operator!=(MinBool b1, bool b2) { return (!b1).value() != !b2; } +inline bool operator!=(bool b1, MinBool b2) { return (!b1) != (!b2).value(); } +inline bool operator!=(MinBool b1, MinBool b2) { return (!b1).value() != (!b2).value(); } + +class LIBMINIMAL_API MinBoolUser +{ +public: + MinBoolUser() : m_minbool(MinBool(false)) {} + virtual ~MinBoolUser() {} + inline MinBool minBool() { return m_minbool; } + inline void setMinBool(MinBool minBool) { m_minbool = minBool; } + virtual MinBool invertedMinBool() { return !m_minbool; } + inline MinBool callInvertedMinBool() { return invertedMinBool(); } +private: + MinBool m_minbool; +}; + +#endif diff --git a/sources/shiboken2/tests/libminimal/obj.cpp b/sources/shiboken2/tests/libminimal/obj.cpp new file mode 100644 index 0000000..fd6e9f7 --- /dev/null +++ b/sources/shiboken2/tests/libminimal/obj.cpp @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "obj.h" + +Obj::Obj(int objId) : m_objId(objId) +{ +} + +Obj::~Obj() +{ +} + +bool +Obj::virtualMethod(int val) +{ + return !bool(val%2); +} + diff --git a/sources/shiboken2/tests/libminimal/obj.h b/sources/shiboken2/tests/libminimal/obj.h new file mode 100644 index 0000000..a5e20d4 --- /dev/null +++ b/sources/shiboken2/tests/libminimal/obj.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OBJ_H +#define OBJ_H + +#include "libminimalmacros.h" + +class LIBMINIMAL_API Obj +{ +public: + explicit Obj(int objId); + virtual ~Obj(); + + int objId() { return m_objId; } + void setObjId(int objId) { m_objId = objId; } + + virtual bool virtualMethod(int val); + bool callVirtualMethod(int val) { return virtualMethod(val); } + + virtual Obj* passObjectType(Obj* obj) { return obj; } + Obj* callPassObjectType(Obj* obj) { return passObjectType(obj); } + + virtual Obj* passObjectTypeReference(Obj& obj) { return &obj; } + Obj* callPassObjectTypeReference(Obj& obj) { return passObjectTypeReference(obj); } + +private: + Obj(const Obj&); + Obj& operator=(const Obj&); + int m_objId; +}; + +#endif // OBJ_H + diff --git a/sources/shiboken2/tests/libminimal/typedef.cpp b/sources/shiboken2/tests/libminimal/typedef.cpp new file mode 100644 index 0000000..e0886d9 --- /dev/null +++ b/sources/shiboken2/tests/libminimal/typedef.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "typedef.h" + +// +// Test wrapping of a typedef +// +bool arrayFuncInt(std::vector a) +{ + return a.empty(); +} + +bool arrayFuncIntTypedef(MyArray a) +{ + return arrayFuncInt(a); +} + +std::vector arrayFuncIntReturn(int size) +{ + return std::vector(size); +} + +MyArray arrayFuncIntReturnTypedef(int size) +{ + return arrayFuncIntReturn(size); +} + +// +// Test wrapping of a typedef of a typedef +// +bool arrayFunc(std::vector a) +{ + return a.empty(); +} + +bool arrayFuncTypedef(MyArray a) +{ + return arrayFunc(a); +} + +std::vector arrayFuncReturn(int size) +{ + return std::vector(size); +} + +MyArray arrayFuncReturnTypedef(int size) +{ + return arrayFuncReturn(size); +} diff --git a/sources/shiboken2/tests/libminimal/typedef.h b/sources/shiboken2/tests/libminimal/typedef.h new file mode 100644 index 0000000..8e34556 --- /dev/null +++ b/sources/shiboken2/tests/libminimal/typedef.h @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TYPEDEF_H +#define TYPEDEF_H + +#include "libminimalmacros.h" + +#include + +// Test wrapping of a typedef +typedef std::vector MyArrayInt; + +LIBMINIMAL_API bool arrayFuncInt(std::vector a); +LIBMINIMAL_API bool arrayFuncIntTypedef(MyArrayInt a); + +LIBMINIMAL_API std::vector arrayFuncIntReturn(int size); +LIBMINIMAL_API MyArrayInt arrayFuncIntReturnTypedef(int size); + +// Test wrapping of a typedef of a typedef +typedef MyArrayInt MyArray; + +LIBMINIMAL_API bool arrayFunc(std::vector a); +LIBMINIMAL_API bool arrayFuncTypedef(MyArray a); + +LIBMINIMAL_API std::vector arrayFuncReturn(int size); +LIBMINIMAL_API MyArray arrayFuncReturnTypedef(int size); + +#endif diff --git a/sources/shiboken2/tests/libminimal/val.h b/sources/shiboken2/tests/libminimal/val.h new file mode 100644 index 0000000..9af7ab7 --- /dev/null +++ b/sources/shiboken2/tests/libminimal/val.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef VAL_H +#define VAL_H + +#include "libminimalmacros.h" + +class LIBMINIMAL_API Val +{ +public: + explicit Val(int valId) : m_valId(valId) {} + virtual ~Val() {} + + int valId() { return m_valId; } + void setValId(int valId) { m_valId = valId; } + + virtual Val passValueType(Val val) { return val; } + Val callPassValueType(Val val) { return passValueType(val); } + + virtual Val* passValueTypePointer(Val* val) { return val; } + Val* callPassValueTypePointer(Val* val) { return passValueTypePointer(val); } + + virtual Val* passValueTypeReference(Val& val) { return &val; } + Val* callPassValueTypeReference(Val& val) { return passValueTypeReference(val); } + + enum ValEnum { One, Other }; + ValEnum oneOrTheOtherEnumValue(ValEnum enumValue) { return enumValue == One ? Other : One; } +private: + int m_valId; +}; + +#endif // VAL_H + diff --git a/sources/shiboken2/tests/libother/CMakeLists.txt b/sources/shiboken2/tests/libother/CMakeLists.txt new file mode 100644 index 0000000..9b3cf55 --- /dev/null +++ b/sources/shiboken2/tests/libother/CMakeLists.txt @@ -0,0 +1,18 @@ +project(libother) + +set(libother_SRC +number.cpp +otherderived.cpp +otherobjecttype.cpp +othermultiplederived.cpp +) + +add_definitions("-DLIBOTHER_BUILD") +add_library(libother SHARED ${libother_SRC}) +set_property(TARGET libother PROPERTY PREFIX "") + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${libsample_SOURCE_DIR} + ${libsample_SOURCE_DIR}/..) +target_link_libraries(libother libsample) + diff --git a/sources/shiboken2/tests/libother/extendsnoimplicitconversion.h b/sources/shiboken2/tests/libother/extendsnoimplicitconversion.h new file mode 100644 index 0000000..e1bcf09 --- /dev/null +++ b/sources/shiboken2/tests/libother/extendsnoimplicitconversion.h @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef EXTENDSNOIMPLICITCONVERSION_H +#define EXTENDSNOIMPLICITCONVERSION_H + +#include "libothermacros.h" +#include "noimplicitconversion.h" + +class ExtendsNoImplicitConversion +{ +public: + explicit ExtendsNoImplicitConversion(int objId) : m_objId(objId) {}; + inline int objId() const { return m_objId; } + inline operator NoImplicitConversion() const { return NoImplicitConversion(m_objId); } +private: + int m_objId; +}; +#endif // EXTENDSNOIMPLICITCONVERSION_H + diff --git a/sources/shiboken2/tests/libother/libothermacros.h b/sources/shiboken2/tests/libother/libothermacros.h new file mode 100644 index 0000000..757e9a3 --- /dev/null +++ b/sources/shiboken2/tests/libother/libothermacros.h @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef LIBOTHERMACROS_H +#define LIBOTHERMACROS_H + +#if defined _WIN32 || defined __CYGWIN__ + #if LIBOTHER_BUILD + #define LIBOTHER_API __declspec(dllexport) + #else + #define LIBOTHER_API __declspec(dllimport) + #endif +#else +#if __GNUC__ >= 4 + #define LIBOTHER_API __attribute__ ((visibility("default"))) +#else + #define LIBOTHER_API +#endif +#endif + +#endif diff --git a/sources/shiboken2/tests/libother/number.cpp b/sources/shiboken2/tests/libother/number.cpp new file mode 100644 index 0000000..bc97de6 --- /dev/null +++ b/sources/shiboken2/tests/libother/number.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "number.h" +#include +#include + +using namespace std; + +Str +Number::toStr() const +{ + ostringstream in; + in << m_value; + return in.str().c_str(); +} + +Point +operator*(const Point& p, const Number& n) +{ + return Point(p.x() * n.value(), p.y() * n.value()); +} + +Complex +Number::toComplex() const +{ + return Complex(m_value); +} + +Number +Number::fromComplex(Complex cpx) +{ + return Number(cpx.real()); +} diff --git a/sources/shiboken2/tests/libother/number.h b/sources/shiboken2/tests/libother/number.h new file mode 100644 index 0000000..222c6e1 --- /dev/null +++ b/sources/shiboken2/tests/libother/number.h @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef NUMBER_H +#define NUMBER_H + +#include "libothermacros.h" +#include "str.h" +#include "point.h" +#include "complex.h" + +class LIBOTHER_API Number +{ +public: + explicit Number(int value) : m_value(value) {}; + inline int value() const { return m_value; } + + Str toStr() const; + inline operator Str() const { return toStr(); } + + friend LIBOTHER_API Point operator*(const Point&, const Number&); + + Complex toComplex() const; + static Number fromComplex(Complex cpx); + +private: + int m_value; +}; + +LIBOTHER_API Point operator*(const Point&, const Number&); + +#endif // NUMBER_H diff --git a/sources/shiboken2/tests/libother/otherderived.cpp b/sources/shiboken2/tests/libother/otherderived.cpp new file mode 100644 index 0000000..5b1714f --- /dev/null +++ b/sources/shiboken2/tests/libother/otherderived.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "otherderived.h" + +OtherDerived::OtherDerived(int id) : Abstract(id) +{ +} + +OtherDerived::~OtherDerived() +{ +} + +Abstract* +OtherDerived::createObject() +{ + static int id = 100; + return new OtherDerived(id++); +} + +void +OtherDerived::pureVirtual() +{ +} + +void* +OtherDerived::pureVirtualReturningVoidPtr() +{ + return 0; +} + +void +OtherDerived::unpureVirtual() +{ +} + +void OtherDerived::pureVirtualPrivate() +{ +} diff --git a/sources/shiboken2/tests/libother/otherderived.h b/sources/shiboken2/tests/libother/otherderived.h new file mode 100644 index 0000000..72e1e23 --- /dev/null +++ b/sources/shiboken2/tests/libother/otherderived.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OTHERDERIVED_H +#define OTHERDERIVED_H + +#include "libothermacros.h" +#include "abstract.h" +#include "derived.h" +#include "objecttype.h" +#include "complex.h" + +class ObjectType; + +class LIBOTHER_API OtherDerived : public Abstract +{ +public: + OtherDerived(int id = -1); + ~OtherDerived() override; + void pureVirtual() override; + void* pureVirtualReturningVoidPtr() override; + void unpureVirtual() override; + PrintFormat returnAnEnum() override { return Short; } + + inline void useObjectTypeFromOtherModule(ObjectType*) {} + inline Event useValueTypeFromOtherModule(const Event& e) { return e; } + inline Complex useValueTypeFromOtherModule(const Complex& c) { return c; } + inline void useEnumTypeFromOtherModule(OverloadedFuncEnum) {} + + // factory method + static Abstract* createObject(); + + void hideFunction(HideType*) override {} + +protected: + inline const char* getClassName() { return className(); } + virtual const char* className() override { return "OtherDerived"; } + +private: + void pureVirtualPrivate() override; +}; +#endif // OTHERDERIVED_H + diff --git a/sources/shiboken2/tests/libother/othermultiplederived.cpp b/sources/shiboken2/tests/libother/othermultiplederived.cpp new file mode 100644 index 0000000..554df3c --- /dev/null +++ b/sources/shiboken2/tests/libother/othermultiplederived.cpp @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "othermultiplederived.h" + +VirtualMethods OtherMultipleDerived::returnUselessClass() +{ + return VirtualMethods(); +} + +Base1* OtherMultipleDerived::createObject(const std::string& objName) +{ + if (objName == "Base1") + return new Base1; + else if (objName == "MDerived1") + return new MDerived1; + else if (objName == "SonOfMDerived1") + return new SonOfMDerived1; + else if (objName == "MDerived3") + return new MDerived3; + else if (objName == "OtherMultipleDerived") + return new OtherMultipleDerived; + return 0; +} + diff --git a/sources/shiboken2/tests/libother/othermultiplederived.h b/sources/shiboken2/tests/libother/othermultiplederived.h new file mode 100644 index 0000000..84a426a --- /dev/null +++ b/sources/shiboken2/tests/libother/othermultiplederived.h @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OTHERMULTIPLEDERIVED_H +#define OTHERMULTIPLEDERIVED_H + +#include "libothermacros.h" +#include "multiple_derived.h" +#include "virtualmethods.h" + +class ObjectType; + +class LIBOTHER_API OtherMultipleDerived : public MDerived1 +{ +public: + // this will use CppCopier from other module (bug#142) + VirtualMethods returnUselessClass(); + static Base1* createObject(const std::string& objName); +}; + +#endif diff --git a/sources/shiboken2/tests/libother/otherobjecttype.cpp b/sources/shiboken2/tests/libother/otherobjecttype.cpp new file mode 100644 index 0000000..ca356ce --- /dev/null +++ b/sources/shiboken2/tests/libother/otherobjecttype.cpp @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "otherobjecttype.h" + +Collector& +operator<<(Collector& collector, const OtherObjectType& obj) +{ + collector << obj.identifier()*2; + return collector; +} diff --git a/sources/shiboken2/tests/libother/otherobjecttype.h b/sources/shiboken2/tests/libother/otherobjecttype.h new file mode 100644 index 0000000..22687c8 --- /dev/null +++ b/sources/shiboken2/tests/libother/otherobjecttype.h @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OTHEROBJECTTYPE_H +#define OTHEROBJECTTYPE_H + +#include +#include "str.h" + +#include "libothermacros.h" +#include "objecttype.h" +#include "collector.h" + +class OtherObjectType : public ObjectType +{ +public: + +}; + + +LIBOTHER_API Collector& operator<<(Collector&, const OtherObjectType&); + +#endif // OTHEROBJECTTYPE_H + diff --git a/sources/shiboken2/tests/libsample/CMakeLists.txt b/sources/shiboken2/tests/libsample/CMakeLists.txt new file mode 100644 index 0000000..7bbc0c3 --- /dev/null +++ b/sources/shiboken2/tests/libsample/CMakeLists.txt @@ -0,0 +1,57 @@ +project(libsample) + +set(libsample_SRC +abstract.cpp +blackbox.cpp +bytearray.cpp +bucket.cpp +collector.cpp +complex.cpp +onlycopy.cpp +derived.cpp +echo.cpp +functions.cpp +handle.cpp +implicitconv.cpp +injectcode.cpp +listuser.cpp +modifications.cpp +mapuser.cpp +modified_constructor.cpp +multiple_derived.cpp +objectmodel.cpp +objecttype.cpp +objecttypeholder.cpp +objecttypelayout.cpp +objecttypeoperators.cpp +objectview.cpp +overload.cpp +overloadsort.cpp +pairuser.cpp +pen.cpp +photon.cpp +point.cpp +pointf.cpp +polygon.cpp +protected.cpp +reference.cpp +sample.cpp +samplenamespace.cpp +sbkdate.cpp +simplefile.cpp +size.cpp +sometime.cpp +str.cpp +strlist.cpp +templateptr.cpp +transform.cpp +virtualmethods.cpp +expression.cpp +filter.cpp +) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +add_definitions("-DLIBSAMPLE_BUILD") +add_library(libsample SHARED ${libsample_SRC}) +set_property(TARGET libsample PROPERTY PREFIX "") + diff --git a/sources/shiboken2/tests/libsample/abstract.cpp b/sources/shiboken2/tests/libsample/abstract.cpp new file mode 100644 index 0000000..c4900d0 --- /dev/null +++ b/sources/shiboken2/tests/libsample/abstract.cpp @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "abstract.h" +#include "objecttype.h" + +using namespace std; + +const int Abstract::staticPrimitiveField = 0; + +Abstract::Abstract(int id) : m_id(id) +{ + primitiveField = 123; + valueTypeField = Point(12, 34); + objectTypeField = 0; + bitField = 0; +} + +Abstract::~Abstract() +{ +} + +void +Abstract::unpureVirtual() +{ +} + +void +Abstract::callUnpureVirtual() +{ + this->unpureVirtual(); +} + + +void +Abstract::callPureVirtual() +{ + this->pureVirtual(); +} + +void +Abstract::show(PrintFormat format) +{ + cout << '<'; + switch(format) { + case Short: + cout << this; + break; + case Verbose: + cout << "class " << className() << " | cptr: " << this; + cout << ", id: " << m_id; + break; + case OnlyId: + cout << "id: " << m_id; + break; + case ClassNameAndId: + cout << className() << " - id: " << m_id; + break; + } + cout << '>'; +} + +void Abstract::callVirtualGettingEnum(PrintFormat p) +{ + virtualGettingAEnum(p); +} + +void Abstract::virtualGettingAEnum(Abstract::PrintFormat p) +{ +} + diff --git a/sources/shiboken2/tests/libsample/abstract.h b/sources/shiboken2/tests/libsample/abstract.h new file mode 100644 index 0000000..9e7cf5a --- /dev/null +++ b/sources/shiboken2/tests/libsample/abstract.h @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ABSTRACT_H +#define ABSTRACT_H + +#include "libsamplemacros.h" +#include "point.h" +#include "complex.h" + +class ObjectType; + +// this class is not exported to python +class HideType +{ +}; + +class LIBSAMPLE_API Abstract +{ +private: + enum PrivateEnum { + PrivValue0, + PrivValue1, + PrivValue2 = PrivValue1 + 2 + }; +public: + enum PrintFormat { + Short, + Verbose, + OnlyId, + ClassNameAndId, + DummyItemToTestPrivateEnum1 = Abstract::PrivValue1, + DummyItemToTestPrivateEnum2 = PrivValue2, + }; + + enum Type { + TpAbstract, TpDerived + }; + + static const int staticPrimitiveField; + int primitiveField; + Complex userPrimitiveField; + Point valueTypeField; + ObjectType* objectTypeField; + + Abstract(int id = -1); + virtual ~Abstract(); + + inline int id() { return m_id; } + + // factory method + inline static Abstract* createObject() { return 0; } + + // method that receives an Object Type + inline static int getObjectId(Abstract* obj) { return obj->id(); } + + virtual void pureVirtual() = 0; + virtual void* pureVirtualReturningVoidPtr() = 0; + virtual void unpureVirtual(); + + virtual PrintFormat returnAnEnum() = 0; + void callVirtualGettingEnum(PrintFormat p); + virtual void virtualGettingAEnum(PrintFormat p); + + void callPureVirtual(); + void callUnpureVirtual(); + + void show(PrintFormat format = Verbose); + virtual Type type() const { return TpAbstract; } + + virtual void hideFunction(HideType* arg) = 0; + +protected: + virtual const char* className() { return "Abstract"; } + + // Protected bit-field structure member. + unsigned int bitField: 1; + +private: + virtual void pureVirtualPrivate() = 0; + int m_id; +}; +#endif // ABSTRACT_H diff --git a/sources/shiboken2/tests/libsample/blackbox.cpp b/sources/shiboken2/tests/libsample/blackbox.cpp new file mode 100644 index 0000000..f3dd57e --- /dev/null +++ b/sources/shiboken2/tests/libsample/blackbox.cpp @@ -0,0 +1,131 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "blackbox.h" + +using namespace std; + +BlackBox::~BlackBox() +{ + // Free all maps. + while (!m_objects.empty()) { + delete (*m_objects.begin()).second; + m_objects.erase(m_objects.begin()); + } + while (!m_points.empty()) { + delete (*m_points.begin()).second; + m_points.erase(m_points.begin()); + } +} + +int +BlackBox::keepObjectType(ObjectType* object) +{ + m_ticket++; + std::pair item(m_ticket, object); + m_objects.insert(item); + object->setParent(0); + + return m_ticket; +} + +ObjectType* +BlackBox::retrieveObjectType(int ticket) +{ + map::iterator it = m_objects.find(ticket); + if (it != m_objects.end()) { + ObjectType* second = it->second; + m_objects.erase(it); + return second; + } + return 0; +} + +void +BlackBox::disposeObjectType(int ticket) +{ + ObjectType* object = retrieveObjectType(ticket); + if (object) + delete object; +} + +int +BlackBox::keepPoint(Point* point) +{ + m_ticket++; + std::pair item(m_ticket, point); + m_points.insert(item); + + return m_ticket; +} + +Point* +BlackBox::retrievePoint(int ticket) +{ + map::iterator it = m_points.find(ticket); + if (it != m_points.end()) { + Point* second = it->second; + m_points.erase(it); + return second; + } + return 0; +} + +void +BlackBox::disposePoint(int ticket) +{ + Point* point = retrievePoint(ticket); + if (point) + delete point; +} + + +std::list +BlackBox::objects() +{ + std::list l; + map::iterator it; + + for ( it = m_objects.begin() ; it != m_objects.end(); it++ ) + l.push_back((*it).second); + + return l; +} + +std::list +BlackBox::points() +{ + std::list l; + map::iterator it; + + for ( it = m_points.begin() ; it != m_points.end(); it++ ) + l.push_back((*it).second); + + return l; +} + diff --git a/sources/shiboken2/tests/libsample/blackbox.h b/sources/shiboken2/tests/libsample/blackbox.h new file mode 100644 index 0000000..629a217 --- /dev/null +++ b/sources/shiboken2/tests/libsample/blackbox.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef BLACKBOX_H +#define BLACKBOX_H + +#include "libsamplemacros.h" +#include +#include "objecttype.h" +#include "point.h" + +class LIBSAMPLE_API BlackBox +{ +public: + typedef std::map ObjectTypeMap; + typedef std::map PointMap; + + BlackBox() { m_ticket = -1;} + ~BlackBox(); + + int keepObjectType(ObjectType* object); + ObjectType* retrieveObjectType(int ticket); + void disposeObjectType(int ticket); + + int keepPoint(Point* point); + Point* retrievePoint(int ticket); + void disposePoint(int ticket); + + std::list objects(); + std::list points(); + + inline void referenceToValuePointer(Point*&) {} + inline void referenceToObjectPointer(ObjectType*&) {} + +private: + ObjectTypeMap m_objects; + PointMap m_points; + int m_ticket; +}; + +#endif // BLACKBOX_H + diff --git a/sources/shiboken2/tests/libsample/bucket.cpp b/sources/shiboken2/tests/libsample/bucket.cpp new file mode 100644 index 0000000..91e546d --- /dev/null +++ b/sources/shiboken2/tests/libsample/bucket.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "bucket.h" +#include + +#ifdef _WIN32 // _WIN32 is defined by all Windows 32 and 64 bit compilers, but not by others. +#include +#define SLEEP(x) Sleep(x) +#else +#include +#define SLEEP(x) usleep(x) +#endif + + +using namespace std; + +Bucket::Bucket() : m_locked(false) +{ +} + +void Bucket::push(int x) +{ + m_data.push_back(x); +} + +int Bucket::pop(void) +{ + int x = 0; + + if (m_data.size() > 0) { + x = m_data.front(); + m_data.pop_front(); + } + + return x; +} + +bool Bucket::empty() +{ + return m_data.empty(); +} + +void Bucket::lock() +{ + m_locked = true; + while (m_locked) { SLEEP(300); } +} + +void Bucket::unlock() +{ + m_locked = false; +} + +bool Bucket::virtualBlockerMethod() +{ + lock(); + // The return value was added just for diversity sake. + return true; +} + diff --git a/sources/shiboken2/tests/libsample/bucket.h b/sources/shiboken2/tests/libsample/bucket.h new file mode 100644 index 0000000..09f9338 --- /dev/null +++ b/sources/shiboken2/tests/libsample/bucket.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef BUCKET_H +#define BUCKET_H + +#include "libsamplemacros.h" +#include "objecttype.h" +#include + +class ObjectType; + +class LIBSAMPLE_API Bucket : public ObjectType +{ +public: + Bucket(); + void push(int); + int pop(); + bool empty(); + void lock(); + inline bool locked() { return m_locked; } + void unlock(); + + virtual bool virtualBlockerMethod(); + inline bool callVirtualBlockerMethodButYouDontKnowThis() { return virtualBlockerMethod(); } + +private: + std::list m_data; + + volatile bool m_locked; +}; + +#endif // BUCKET_H + diff --git a/sources/shiboken2/tests/libsample/bytearray.cpp b/sources/shiboken2/tests/libsample/bytearray.cpp new file mode 100644 index 0000000..021d2a0 --- /dev/null +++ b/sources/shiboken2/tests/libsample/bytearray.cpp @@ -0,0 +1,214 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "bytearray.h" + +ByteArray::ByteArray() +{ + m_data = std::vector(1); + m_data[0] = '\0'; +} + +ByteArray::ByteArray(char c) +{ + m_data = std::vector(2); + m_data[0] = c; + m_data[1] = '\0'; +} + +ByteArray::ByteArray(const char* data) +{ + size_t len = strlen(data); + m_data = std::vector(len + 1); + memcpy(&m_data[0], data, len); + m_data[len] = '\0'; +} + +ByteArray::ByteArray(const char* data, int len) +{ + m_data = std::vector(len + 1); + memcpy(&m_data[0], data, len); + m_data[len] = '\0'; +} + +ByteArray::ByteArray(const ByteArray& other) +{ + m_data = std::vector(other.size() + 1); + memcpy(&m_data[0], &other.m_data[0], other.size()); + m_data[other.size()] = '\0'; +} + +int +ByteArray::size() const +{ + return m_data.size() - 1; +} + +char +ByteArray::at(int pos) const +{ + return m_data[pos]; +} + +const char* +ByteArray::data() const +{ + return &(m_data[0]); +} + +ByteArray& +ByteArray::append(char c) +{ + m_data.pop_back(); + m_data.push_back(c); + m_data.push_back('\0'); + return *this; +} + +ByteArray& +ByteArray::append(const char* data) +{ + m_data.pop_back(); + for (int i = 0; i < (int)strlen(data); ++i) + m_data.push_back(data[i]); + m_data.push_back('\0'); + return *this; +} + +ByteArray& +ByteArray::append(const char* data, int len) +{ + m_data.pop_back(); + for (int i = 0; i < len; ++i) + m_data.push_back(data[i]); + m_data.push_back('\0'); + return *this; +} + +ByteArray& +ByteArray::append(const ByteArray& other) +{ + m_data.pop_back(); + for (int i = 0; i < (int)other.m_data.size(); ++i) + m_data.push_back(other.m_data[i]); + m_data.push_back('\0'); + return *this; +} + +static bool compare(const std::vector& mine, const char* other) +{ + for (int i = 0; i < (int)mine.size() - 1; ++i) { + if (mine[i] != other[i]) + return false; + } + return true; +} + +bool +ByteArray::operator==(const ByteArray& other) const +{ + return compare(m_data, &other.m_data[0]); +} +bool +operator==(const ByteArray& ba1, const char* ba2) +{ + return compare(ba1.m_data, ba2); +} +bool +operator==(const char* ba1, const ByteArray& ba2) +{ + return compare(ba2.m_data, ba1); +} + +bool +ByteArray::operator!=(const ByteArray& other) const +{ + return !(m_data == other.m_data); +} +bool +operator!=(const ByteArray& ba1, const char* ba2) +{ + return !(ba1 == ba2); +} +bool +operator!=(const char* ba1, const ByteArray& ba2) +{ + return !(ba1 == ba2); +} + +ByteArray& +ByteArray::operator+=(char c) +{ + return append(c); +} +ByteArray& +ByteArray::operator+=(const char* data) +{ + return append(data); +} +ByteArray& +ByteArray::operator+=(const ByteArray& other) +{ + return append(other); +} + +ByteArray +operator+(const ByteArray& ba1, const ByteArray& ba2) +{ + return ByteArray(ba1) += ba2; +} +ByteArray +operator+(const ByteArray& ba1, const char* ba2) +{ + return ByteArray(ba1) += ByteArray(ba2); +} +ByteArray +operator+(const char* ba1, const ByteArray& ba2) +{ + return ByteArray(ba1) += ba2; +} +ByteArray +operator+(const ByteArray& ba1, char ba2) +{ + return ByteArray(ba1) += ByteArray(ba2); +} +ByteArray +operator+(char ba1, const ByteArray& ba2) +{ + return ByteArray(ba1) += ba2; +} + +unsigned int +ByteArray::hash(const ByteArray& byteArray) +{ + unsigned int result = 0; + for (int i = 0; i < (int)byteArray.m_data.size(); ++i) + result = 5 * result + byteArray.m_data[i]; + return result; +} diff --git a/sources/shiboken2/tests/libsample/bytearray.h b/sources/shiboken2/tests/libsample/bytearray.h new file mode 100644 index 0000000..5dfb63f --- /dev/null +++ b/sources/shiboken2/tests/libsample/bytearray.h @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef BYTEARRAY_H +#define BYTEARRAY_H + +#include "str.h" +#include "libsamplemacros.h" +#include + +class LIBSAMPLE_API ByteArray +{ +public: + ByteArray(); + ByteArray(char data); + ByteArray(const char* data); + ByteArray(const char* data, int len); + ByteArray(const ByteArray& other); + + int size() const; + char at(int i) const; + char operator[](int i) const; + + const char* data() const; + + ByteArray& append(char c); + ByteArray& append(const char* data); + ByteArray& append(const char* data, int len); + ByteArray& append(const ByteArray& other); + + bool operator==(const ByteArray& other) const; + bool operator!=(const ByteArray& other) const; + + ByteArray& operator+=(char c); + ByteArray& operator+=(const char* data); + ByteArray& operator+=(const ByteArray& other); + + static unsigned int hash(const ByteArray& byteArray); +private: + std::vector m_data; + friend LIBSAMPLE_API bool operator==(const ByteArray& ba1, const char* ba2); + friend LIBSAMPLE_API bool operator==(const char* ba1, const ByteArray& ba2); + friend LIBSAMPLE_API bool operator!=(const ByteArray& ba1, const char* ba2); + friend LIBSAMPLE_API bool operator!=(const char* ba1, const ByteArray& ba2); + + friend LIBSAMPLE_API ByteArray operator+(const ByteArray& ba1, const ByteArray& ba2); + friend LIBSAMPLE_API ByteArray operator+(const ByteArray& ba1, const char* ba2); + friend LIBSAMPLE_API ByteArray operator+(const char* ba1, const ByteArray& ba2); + friend LIBSAMPLE_API ByteArray operator+(const ByteArray& ba1, char ba2); + friend LIBSAMPLE_API ByteArray operator+(char ba1, const ByteArray& ba2); +}; + +LIBSAMPLE_API bool operator==(const ByteArray& ba1, const char* ba2); +LIBSAMPLE_API bool operator==(const char* ba1, const ByteArray& ba2); +LIBSAMPLE_API bool operator!=(const ByteArray& ba1, const char* ba2); +LIBSAMPLE_API bool operator!=(const char* ba1, const ByteArray& ba2); + +LIBSAMPLE_API ByteArray operator+(const ByteArray& ba1, const ByteArray& ba2); +LIBSAMPLE_API ByteArray operator+(const ByteArray& ba1, const char* ba2); +LIBSAMPLE_API ByteArray operator+(const char* ba1, const ByteArray& ba2); +LIBSAMPLE_API ByteArray operator+(const ByteArray& ba1, char ba2); +LIBSAMPLE_API ByteArray operator+(char ba1, const ByteArray& ba2); + +#endif // BYTEARRAY_H diff --git a/sources/shiboken2/tests/libsample/collector.cpp b/sources/shiboken2/tests/libsample/collector.cpp new file mode 100644 index 0000000..398f799 --- /dev/null +++ b/sources/shiboken2/tests/libsample/collector.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "collector.h" + +void Collector::clear() +{ + m_items.clear(); +} + +Collector& Collector::operator<<(ObjectType::Identifier item) +{ + m_items.push_back(item); + return *this; +} + +Collector& Collector::operator<<(const ObjectType *obj) +{ + m_items.push_back(obj->identifier()); + return *this; +} + +std::list Collector::items() +{ + return m_items; +} + +int Collector::size() +{ + return (int) m_items.size(); +} + +Collector &operator<<(Collector &s, const IntWrapper &w) +{ + s << w.value; + return s; +} diff --git a/sources/shiboken2/tests/libsample/collector.h b/sources/shiboken2/tests/libsample/collector.h new file mode 100644 index 0000000..6d51c62 --- /dev/null +++ b/sources/shiboken2/tests/libsample/collector.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef COLLECTOR_H +#define COLLECTOR_H + +#include +#include "libsamplemacros.h" + +#include "objecttype.h" + +class LIBSAMPLE_API Collector +{ +public: + Collector() {} + virtual ~Collector() {} + + void clear(); + + Collector& operator<<(ObjectType::Identifier item); + + Collector& operator<<(const ObjectType *); + + std::list items(); + int size(); + +private: + std::list m_items; + + Collector(const Collector&); + Collector& operator=(const Collector&); +}; + +/* Helper for testing external operators */ +class IntWrapper +{ +public: + IntWrapper(int x=0):value(x){} + + int value; +}; + +LIBSAMPLE_API Collector &operator<<(Collector&, const IntWrapper&); + +#endif // COLLECTOR_H + diff --git a/sources/shiboken2/tests/libsample/complex.cpp b/sources/shiboken2/tests/libsample/complex.cpp new file mode 100644 index 0000000..a9b7f03 --- /dev/null +++ b/sources/shiboken2/tests/libsample/complex.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "complex.h" + +using namespace std; + +Complex::Complex(double real, double imag) + : m_real(real), m_imag(imag) +{ +} + +Complex +Complex::operator+(Complex& other) +{ + Complex result; + result.setReal(m_real + other.real()); + result.setImaginary(m_imag + other.imag()); + return result; +} + +void +Complex::show() +{ + cout << "(real: " << m_real << ", imag: " << m_imag << ")"; +} + + diff --git a/sources/shiboken2/tests/libsample/complex.h b/sources/shiboken2/tests/libsample/complex.h new file mode 100644 index 0000000..d0f6c14 --- /dev/null +++ b/sources/shiboken2/tests/libsample/complex.h @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef COMPLEX_H +#define COMPLEX_H + +#include "libsamplemacros.h" + +class LIBSAMPLE_API Complex +{ +public: + Complex(double real = 0.0, double imag = 0.0); + ~Complex() {} + + inline double real() const { return m_real; } + inline void setReal(double real) { m_real = real; } + inline double imag() const { return m_imag; } + inline void setImaginary(double imag) { m_imag = imag; } + + Complex operator+(Complex& other); + + void show(); + +private: + double m_real; + double m_imag; +}; + +#endif // COMPLEX_H + diff --git a/sources/shiboken2/tests/libsample/ctorconvrule.h b/sources/shiboken2/tests/libsample/ctorconvrule.h new file mode 100644 index 0000000..ceab8d6 --- /dev/null +++ b/sources/shiboken2/tests/libsample/ctorconvrule.h @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CTORCONVRULE_H +#define CTORCONVRULE_H + +#include "libsamplemacros.h" + +class CtorConvRule +{ +public: + explicit CtorConvRule(long value) : m_value(value) {} + virtual ~CtorConvRule() {} + virtual void dummyVirtualMethod() {} + long value() { return m_value; } +private: + long m_value; +}; + +#endif diff --git a/sources/shiboken2/tests/libsample/cvlist.h b/sources/shiboken2/tests/libsample/cvlist.h new file mode 100644 index 0000000..50ad8bf --- /dev/null +++ b/sources/shiboken2/tests/libsample/cvlist.h @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CONSTVALUELIST_H +#define CONSTVALUELIST_H + +#include +#include "libsamplemacros.h" + +class CVValueType +{ + CVValueType(); +}; + +typedef std::list const_ptr_value_list; + +// This tests binding generation for a container of a const value type. The +// class doesn't need to do anything; this is just to verify that the generated +// binding code (the container conversion in particular) is const-valid. + +class CVListUser +{ +public: + static const_ptr_value_list produce() { return const_ptr_value_list(); } + static void consume(const const_ptr_value_list& l) { (void)l; } +}; + +#endif // LIST_H diff --git a/sources/shiboken2/tests/libsample/derived.cpp b/sources/shiboken2/tests/libsample/derived.cpp new file mode 100644 index 0000000..4fa3e40 --- /dev/null +++ b/sources/shiboken2/tests/libsample/derived.cpp @@ -0,0 +1,125 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "derived.h" + +using namespace std; + +Derived::Derived(int id) : Abstract(id) +{ +} + +Derived::~Derived() +{ +} + +Abstract* +Derived::createObject() +{ + static int id = 100; + return new Derived(id++); +} + +void +Derived::pureVirtual() +{ +} + +void* +Derived::pureVirtualReturningVoidPtr() +{ + return 0; +} + +void +Derived::unpureVirtual() +{ +} + +bool +Derived::singleArgument(bool b) +{ + return !b; +} + +double +Derived::defaultValue(int n) +{ + return ((double) n) + 0.1; +} + +OverloadedFuncEnum +Derived::overloaded(int i, int d) +{ + return OverloadedFunc_ii; +} + +OverloadedFuncEnum +Derived::overloaded(double n) +{ + return OverloadedFunc_d; +} + +Derived::OtherOverloadedFuncEnum +Derived::otherOverloaded(int a, int b, bool c, double d) +{ + return OtherOverloadedFunc_iibd; +} + +Derived::OtherOverloadedFuncEnum +Derived::otherOverloaded(int a, double b) +{ + return OtherOverloadedFunc_id; +} + +struct SecretClass : public Abstract { + virtual void pureVirtual() {} + virtual void* pureVirtualReturningVoidPtr() { return 0; } + virtual PrintFormat returnAnEnum() { return Short; } + void hideFunction(HideType*){}; +private: + virtual void pureVirtualPrivate() {} +}; + +Abstract* Derived::triggerImpossibleTypeDiscovery() +{ + return new SecretClass; +} + +struct AnotherSecretClass : public Derived { +}; + +Abstract* Derived::triggerAnotherImpossibleTypeDiscovery() +{ + return new AnotherSecretClass; +} + +void Derived::pureVirtualPrivate() +{ +} diff --git a/sources/shiboken2/tests/libsample/derived.h b/sources/shiboken2/tests/libsample/derived.h new file mode 100644 index 0000000..783a6dc --- /dev/null +++ b/sources/shiboken2/tests/libsample/derived.h @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DERIVED_H +#define DERIVED_H + +#include "libsamplemacros.h" +#include "abstract.h" + +enum OverloadedFuncEnum { + OverloadedFunc_ii, + OverloadedFunc_d +}; + +class LIBSAMPLE_API Derived : public Abstract +{ +public: + enum OtherOverloadedFuncEnum { + OtherOverloadedFunc_iibd, + OtherOverloadedFunc_id + }; + + class SomeInnerClass { + public: + void uselessMethod() {} + SomeInnerClass operator+(const SomeInnerClass& other) { return other; } + bool operator==(const SomeInnerClass& other) { return true; } + }; + + Derived(int id = -1); + ~Derived() override; + void pureVirtual() override; + void* pureVirtualReturningVoidPtr() override; + void unpureVirtual() override; + + PrintFormat returnAnEnum() override { return Short; } + Type type() const override { return TpDerived; } + + // factory method + static Abstract* createObject(); + + // single argument + bool singleArgument(bool b); + + // method with default value + double defaultValue(int n = 0); + + // overloads + OverloadedFuncEnum overloaded(int i = 0, int d = 0); + OverloadedFuncEnum overloaded(double n); + + // more overloads + OtherOverloadedFuncEnum otherOverloaded(int a, int b, bool c, double d); + OtherOverloadedFuncEnum otherOverloaded(int a, double b); + + inline SomeInnerClass returnMyParameter(const SomeInnerClass& s) { return s; } + + static Abstract* triggerImpossibleTypeDiscovery(); + static Abstract* triggerAnotherImpossibleTypeDiscovery(); + + void hideFunction(HideType*) override {} +protected: + const char* getClassName() { return className(); } + virtual const char* className() override { return "Derived"; } + +private: + void pureVirtualPrivate() override; +}; +#endif // DERIVED_H + diff --git a/sources/shiboken2/tests/libsample/echo.cpp b/sources/shiboken2/tests/libsample/echo.cpp new file mode 100644 index 0000000..55e2a46 --- /dev/null +++ b/sources/shiboken2/tests/libsample/echo.cpp @@ -0,0 +1,29 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "echo.h" diff --git a/sources/shiboken2/tests/libsample/echo.h b/sources/shiboken2/tests/libsample/echo.h new file mode 100644 index 0000000..3f64569 --- /dev/null +++ b/sources/shiboken2/tests/libsample/echo.h @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ECHO_H +#define ECHO_H + +#include "libsamplemacros.h" +#include "str.h" + +class ObjectType; + +class Echo +{ +public: + Echo(){} + ~Echo(){} + + void doNothingWithConstBool(const bool hi) {} + void methodWithNamedArg(const Str& string = Str("")) {} + + Str operator()(const Str& s, const int i) { return s + i; } + + // These method are here just for compilation test purposes + Echo& operator<<(unsigned int item) { return *this; } + Echo& operator<<(signed int item) { return *this; } + Echo& operator<<(const ObjectType* item) { return *this; } + Echo& operator<<(Str str) { return *this; } +}; + +#endif diff --git a/sources/shiboken2/tests/libsample/expression.cpp b/sources/shiboken2/tests/libsample/expression.cpp new file mode 100644 index 0000000..a605130 --- /dev/null +++ b/sources/shiboken2/tests/libsample/expression.cpp @@ -0,0 +1,137 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include "expression.h" +#include + +Expression::Expression() : m_value(0), m_operation(None), m_operand1(0), m_operand2(0) +{ +} + +Expression::Expression(int number) : m_value(number), m_operation(None), m_operand1(0), m_operand2(0) +{ +} + +Expression::Expression(const Expression& other) +{ + m_operand1 = other.m_operand1 ? new Expression(*other.m_operand1) : 0; + m_operand2 = other.m_operand2 ? new Expression(*other.m_operand2) : 0; + m_value = other.m_value; + m_operation = other.m_operation; +} + +Expression& Expression::operator=(const Expression& other) +{ + delete m_operand1; + delete m_operand2; + m_operand1 = other.m_operand1 ? new Expression(*other.m_operand1) : 0; + m_operand2 = other.m_operand2 ? new Expression(*other.m_operand2) : 0; + m_operation = other.m_operation; + m_value = other.m_value; + return *this; +} + +Expression::~Expression() +{ + delete m_operand1; + delete m_operand2; +} + +Expression Expression::operator+(const Expression& other) +{ + Expression expr; + expr.m_operation = Add; + expr.m_operand1 = new Expression(*this); + expr.m_operand2 = new Expression(other); + return expr; +} + +Expression Expression::operator-(const Expression& other) +{ + Expression expr; + expr.m_operation = Add; + expr.m_operand1 = new Expression(*this); + expr.m_operand2 = new Expression(other); + return expr; +} + +Expression Expression::operator<(const Expression& other) +{ + Expression expr; + expr.m_operation = LessThan; + expr.m_operand1 = new Expression(*this); + expr.m_operand2 = new Expression(other); + return expr; +} + +Expression Expression::operator>(const Expression& other) +{ + Expression expr; + expr.m_operation = GreaterThan; + expr.m_operand1 = new Expression(*this); + expr.m_operand2 = new Expression(other); + return expr; +} + +std::string Expression::toString() const +{ + if (m_operation == None) { + std::ostringstream s; + s << m_value; + return s.str(); + } + + std::string result; + result += '('; + result += m_operand1->toString(); + char op; + switch (m_operation) { + case Add: + op = '+'; + break; + case Sub: + op = '-'; + break; + case LessThan: + op = '<'; + break; + case GreaterThan: + op = '<'; + break; + case None: // just to avoid the compiler warning + default: + op = '?'; + break; + } + result += op; + result += m_operand2->toString(); + result += ')'; + return result; +} + diff --git a/sources/shiboken2/tests/libsample/expression.h b/sources/shiboken2/tests/libsample/expression.h new file mode 100644 index 0000000..3add557 --- /dev/null +++ b/sources/shiboken2/tests/libsample/expression.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#ifndef EXPRESSION_H +#define EXPRESSION_H + +#include "libsamplemacros.h" +#include + +class LIBSAMPLE_API Expression +{ +public: + enum Operation { + None, Add, Sub, LessThan, GreaterThan + }; + + Expression(int number); + Expression(const Expression& other); + Expression& operator=(const Expression& other); + + ~Expression(); + + Expression operator>(const Expression& other); + Expression operator<(const Expression& other); + Expression operator+(const Expression& other); + Expression operator-(const Expression& other); + + std::string toString() const; +private: + int m_value; + Operation m_operation; + Expression* m_operand1; + Expression* m_operand2; + + Expression(); +}; + +#endif // EXPRESSION_H diff --git a/sources/shiboken2/tests/libsample/filter.cpp b/sources/shiboken2/tests/libsample/filter.cpp new file mode 100644 index 0000000..f862bab --- /dev/null +++ b/sources/shiboken2/tests/libsample/filter.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "filter.h" +Data::Data(Field field, std::string value) + : m_field(field), m_value(value) +{ +} + +Union::Union(const Data& filter) +{ + m_filters.push_back(filter); +} + +Union::Union(const Intersection& filter) +{ + m_filters.push_back(filter); +} + +Union::Union(const Union& filter) +{ + m_filters = filter.filters(); +} + +Intersection::Intersection(const Data& filter) +{ + m_filters.push_back(filter); +} + +Intersection::Intersection(const Union& filter) +{ + m_filters.push_back(filter); +} + +Intersection::Intersection(const Intersection& filter) +{ + m_filters = filter.filters(); +} + +Intersection operator&(const Intersection& a, const Intersection& b) +{ + Intersection filter; + filter.addFilter(a); + filter.addFilter(b); + + return filter; +} diff --git a/sources/shiboken2/tests/libsample/filter.h b/sources/shiboken2/tests/libsample/filter.h new file mode 100644 index 0000000..e318cba --- /dev/null +++ b/sources/shiboken2/tests/libsample/filter.h @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef FILTER_H +#define FILTER_H + +#include +#include + +#include "libsamplemacros.h" + +class Intersection; + +class LIBSAMPLE_API Filter +{ +}; + +class LIBSAMPLE_API Data : public Filter +{ + +public: + enum Field { + Name, + Album, + Year + }; + + Data(Field field, std::string value); + + Field field() const { return m_field; } + std::string value() const { return m_value; } + +private: + Field m_field; + std::string m_value; +}; + +class LIBSAMPLE_API Union : public Filter +{ +public: + + Union(const Data&); + Union(const Intersection&); + Union() {}; + Union(const Union&); + + std::list filters() const { return m_filters; } + void addFilter(const Filter& data) { m_filters.push_back(data); } + +private: + std::list m_filters; +}; + +class LIBSAMPLE_API Intersection : public Filter +{ +public: + + Intersection(const Data&); + Intersection(const Union&); + Intersection() {}; + Intersection(const Intersection&); + + std::list filters() const { return m_filters; } + void addFilter(const Filter& data) { m_filters.push_back(data); } + +private: + std::list m_filters; +}; + +LIBSAMPLE_API Intersection operator&(const Intersection& a, const Intersection& b); + +#endif // FILTER_H + + diff --git a/sources/shiboken2/tests/libsample/functions.cpp b/sources/shiboken2/tests/libsample/functions.cpp new file mode 100644 index 0000000..5cc9a1c --- /dev/null +++ b/sources/shiboken2/tests/libsample/functions.cpp @@ -0,0 +1,255 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "functions.h" +#include +#include +#include +#include + +using namespace std; + +void +printSomething() +{ + cout << __FUNCTION__ << endl; +} + +int +gimmeInt() +{ + static int val = 2; + val = val * 1.3; + return val; +} + +double +gimmeDouble() +{ + static double val = 7.77; + val = val * 1.3; + return val; +} + +std::list +gimmeComplexList() +{ + std::list lst; + lst.push_back(Complex()); + lst.push_back(Complex(1.1, 2.2)); + lst.push_back(Complex(1.3, 2.4)); + return lst; +} + +Complex +sumComplexPair(std::pair cpx_pair) +{ + return cpx_pair.first + cpx_pair.second; +} + +double +multiplyPair(std::pair pair) +{ + return pair.first * pair.second; +} + +int +countCharacters(const char* text) +{ + if (!text) + return -1; + int count; + for(count = 0; text[count] != '\0'; count++) + ; + return count; +} + +char* +makeCString() +{ + char* string = new char[strlen(__FUNCTION__) + 1]; + strcpy(string, __FUNCTION__); + return string; +} + +const char* +returnCString() +{ + return __FUNCTION__; +} + +GlobalOverloadFuncEnum +overloadedFunc(int val) +{ + return GlobalOverloadFunc_i; +} + +GlobalOverloadFuncEnum +overloadedFunc(double val) +{ + return GlobalOverloadFunc_d; +} + +char* +returnNullPrimitivePointer() +{ + return 0; +} + +ObjectType* +returnNullObjectTypePointer() +{ + return 0; +} + +Event* +returnNullValueTypePointer() +{ + return 0; +} + +unsigned int +doubleUnsignedInt(unsigned int value) +{ + return value * 2; +} + +long long +doubleLongLong(long long value) +{ + return value * 2; +} + +unsigned long long +doubleUnsignedLongLong(unsigned long long value) +{ + return value * 2; +} + +short +doubleShort(short value) +{ + return value * 2; +} + +int +acceptInt(int x) +{ + return x; +} + +unsigned int +acceptUInt(unsigned int x) +{ + return x; +} + +long +acceptLong(long x) +{ + return x; +} + +unsigned long +acceptULong(unsigned long x) +{ + return x; +} + +double +acceptDouble(double x) +{ + return x; +} + +int +acceptIntReference(int& x) +{ + return x; +} + +OddBool +acceptOddBoolReference(OddBool& x) +{ + return x; +} + +int sumIntArray(int array[4]) +{ + return std::accumulate(array, array + 4, 0); +} + +double sumDoubleArray(double array[4]) +{ + return std::accumulate(array, array + 4, double(0)); +} + +int sumIntMatrix(int m[2][3]) +{ + int result = 0; + for (int r = 0; r < 2; ++r) { + for (int c = 0; c < 3; ++c) + result += m[r][c]; + } + return result; +} + +double sumDoubleMatrix(double m[2][3]) +{ + double result = 0; + for (int r = 0; r < 2; ++r) { + for (int c = 0; c < 3; ++c) + result += m[r][c]; + } + return result; +} + +ArrayModifyTest::ArrayModifyTest() +{ +} + +int ArrayModifyTest::sumIntArray(int n, int *array) +{ + return std::accumulate(array, array + n, 0); +} + +ClassWithFunctionPointer::ClassWithFunctionPointer() +{ + callFunctionPointer(0, &ClassWithFunctionPointer::doNothing); +} + +void ClassWithFunctionPointer::callFunctionPointer(int dummy, void (*fp)(void *)) +{ + size_t a = dummy; + fp(reinterpret_cast(a)); +} + +void ClassWithFunctionPointer::doNothing(void *operand) +{ + (void) operand; +} diff --git a/sources/shiboken2/tests/libsample/functions.h b/sources/shiboken2/tests/libsample/functions.h new file mode 100644 index 0000000..cad8b2a --- /dev/null +++ b/sources/shiboken2/tests/libsample/functions.h @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef FUNCTIONS_H +#define FUNCTIONS_H + +#include "libsamplemacros.h" +#include +#include +#include "oddbool.h" +#include "complex.h" +#include "objecttype.h" + +enum GlobalEnum { + NoThing, + FirstThing, + SecondThing, + ThirdThing +}; + +enum GlobalOverloadFuncEnum { + GlobalOverloadFunc_i, + GlobalOverloadFunc_d +}; + +LIBSAMPLE_API void printSomething(); +LIBSAMPLE_API int gimmeInt(); +LIBSAMPLE_API double gimmeDouble(); +LIBSAMPLE_API double multiplyPair(std::pair pair); +LIBSAMPLE_API std::list gimmeComplexList(); +LIBSAMPLE_API Complex sumComplexPair(std::pair cpx_pair); + +LIBSAMPLE_API int countCharacters(const char* text); +LIBSAMPLE_API char* makeCString(); +LIBSAMPLE_API const char* returnCString(); + +LIBSAMPLE_API char* returnNullPrimitivePointer(); +LIBSAMPLE_API ObjectType* returnNullObjectTypePointer(); +LIBSAMPLE_API Event* returnNullValueTypePointer(); + +// Tests overloading on functions (!methods) +LIBSAMPLE_API GlobalOverloadFuncEnum overloadedFunc(int val); +LIBSAMPLE_API GlobalOverloadFuncEnum overloadedFunc(double val); + +LIBSAMPLE_API unsigned int doubleUnsignedInt(unsigned int value); +LIBSAMPLE_API long long doubleLongLong(long long value); +LIBSAMPLE_API unsigned long long doubleUnsignedLongLong(unsigned long long value); +LIBSAMPLE_API short doubleShort(short value); + +LIBSAMPLE_API int acceptInt(int x); +LIBSAMPLE_API unsigned int acceptUInt(unsigned int x); +LIBSAMPLE_API long acceptLong(long x); +LIBSAMPLE_API unsigned long acceptULong(unsigned long x); +LIBSAMPLE_API double acceptDouble(double x); + +LIBSAMPLE_API int acceptIntReference(int& x); +LIBSAMPLE_API OddBool acceptOddBoolReference(OddBool& x); + +LIBSAMPLE_API int sumIntArray(int array[4]); +LIBSAMPLE_API double sumDoubleArray(double array[4]); +LIBSAMPLE_API int sumIntMatrix(int m[2][3]); +LIBSAMPLE_API double sumDoubleMatrix(double m[2][3]); + +class LIBSAMPLE_API ArrayModifyTest +{ +public: + ArrayModifyTest(); + int sumIntArray(int n, int *array); +}; + +class LIBSAMPLE_API ClassWithFunctionPointer +{ +public: + explicit ClassWithFunctionPointer(); + void callFunctionPointer(int dummy, void (*fp)(void *)); + static void doNothing(void *operand); +}; + +#endif // FUNCTIONS_H diff --git a/sources/shiboken2/tests/libsample/handle.cpp b/sources/shiboken2/tests/libsample/handle.cpp new file mode 100644 index 0000000..643eac4 --- /dev/null +++ b/sources/shiboken2/tests/libsample/handle.cpp @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "handle.h" + +HANDLE HandleHolder::createHandle() +{ + return (HANDLE) new OBJ; +} + +bool HandleHolder::compare(HandleHolder* other) +{ + return other->m_handle == m_handle; +} + +bool HandleHolder::compare2(HandleHolder* other) +{ + return other->m_handle2 == m_handle2; +} diff --git a/sources/shiboken2/tests/libsample/handle.h b/sources/shiboken2/tests/libsample/handle.h new file mode 100644 index 0000000..400a0a3 --- /dev/null +++ b/sources/shiboken2/tests/libsample/handle.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef HANDLE_H +#define HANDLE_H + +#include "libsamplemacros.h" + +/* See http://bugs.pyside.org/show_bug.cgi?id=1105. */ +namespace Foo { + typedef unsigned long HANDLE; +} + +class LIBSAMPLE_API OBJ +{ +}; + +typedef OBJ* HANDLE; + +class LIBSAMPLE_API HandleHolder +{ +public: + explicit HandleHolder(HANDLE ptr = 0) : m_handle(ptr) {} + explicit HandleHolder(Foo::HANDLE val): m_handle2(val) {} + + inline void set(HANDLE ptr) { HANDLE tmp; tmp = m_handle; m_handle = tmp; } + inline void set(const Foo::HANDLE& val) { m_handle2 = val; } + inline HANDLE handle() { return m_handle; } + inline Foo::HANDLE handle2() { return m_handle2; } + + static HANDLE createHandle(); + bool compare(HandleHolder* other); + bool compare2(HandleHolder* other); + +private: + HANDLE m_handle; + Foo::HANDLE m_handle2; +}; + +struct LIBSAMPLE_API PrimitiveStruct {}; +typedef struct PrimitiveStruct* PrimitiveStructPtr; +struct LIBSAMPLE_API PrimitiveStructPointerHolder +{ + PrimitiveStructPtr primitiveStructPtr; +}; + +#endif // HANDLE_H diff --git a/sources/shiboken2/tests/libsample/implicitconv.cpp b/sources/shiboken2/tests/libsample/implicitconv.cpp new file mode 100644 index 0000000..88af0d9 --- /dev/null +++ b/sources/shiboken2/tests/libsample/implicitconv.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "implicitconv.h" + +ImplicitConv +ImplicitConv::implicitConvCommon(ImplicitConv implicit) +{ + return implicit; +} + +ImplicitConv +ImplicitConv::implicitConvDefault(ImplicitConv implicit) +{ + return implicit; +} + +ImplicitConv::ICOverloadedFuncEnum +ImplicitConv::implicitConvOverloading(ImplicitConv implicit, int dummyArg) +{ + return ImplicitConv::OverFunc_Ii; +} + +ImplicitConv::ICOverloadedFuncEnum +ImplicitConv::implicitConvOverloading(ImplicitConv implicit, bool dummyArg) +{ + return ImplicitConv::OverFunc_Ib; +} + +ImplicitConv::ICOverloadedFuncEnum +ImplicitConv::implicitConvOverloading(int dummyArg) +{ + return ImplicitConv::OverFunc_i; +} + +ImplicitConv::ICOverloadedFuncEnum +ImplicitConv::implicitConvOverloading(CtorEnum dummyArg) +{ + return ImplicitConv::OverFunc_C; +} + diff --git a/sources/shiboken2/tests/libsample/implicitconv.h b/sources/shiboken2/tests/libsample/implicitconv.h new file mode 100644 index 0000000..ea859a1 --- /dev/null +++ b/sources/shiboken2/tests/libsample/implicitconv.h @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef IMPLICITCONV_H +#define IMPLICITCONV_H + +#include "libsamplemacros.h" +#include "null.h" + +class ObjectType; + +class LIBSAMPLE_API ImplicitConv +{ +public: + enum CtorEnum { + CtorNone, + CtorOne, + CtorTwo, + CtorThree, + CtorObjectTypeReference, + CtorPrimitiveType + }; + + enum ICOverloadedFuncEnum { + OverFunc_Ii, + OverFunc_Ib, + OverFunc_i, + OverFunc_C + }; + + ImplicitConv() : m_ctorEnum(CtorNone), m_objId(-1), m_value(-1.0) {} + ImplicitConv(int objId) : m_ctorEnum(CtorOne), m_objId(objId), m_value(-1.0) {} + ImplicitConv(CtorEnum ctorEnum) : m_ctorEnum(ctorEnum), m_objId(-1), m_value(-1.0) {} + ImplicitConv(ObjectType&) : m_ctorEnum(CtorObjectTypeReference), m_objId(-1), m_value(-1.0) {} + ImplicitConv(double value, bool=true) : m_ctorEnum(CtorNone), m_value(value) {} + ImplicitConv(const Null& null) : m_ctorEnum(CtorPrimitiveType) {} + ~ImplicitConv() {} + + inline CtorEnum ctorEnum() { return m_ctorEnum; } + inline int objId() { return m_objId; } + inline double value() { return m_value; } + + static ImplicitConv implicitConvCommon(ImplicitConv implicit); + + static ImplicitConv implicitConvDefault(ImplicitConv implicit = CtorTwo); + + static ICOverloadedFuncEnum implicitConvOverloading(ImplicitConv implicit, int dummyArg); + static ICOverloadedFuncEnum implicitConvOverloading(ImplicitConv implicit, bool dummyArg); + static ICOverloadedFuncEnum implicitConvOverloading(int dummyArg); + static ICOverloadedFuncEnum implicitConvOverloading(CtorEnum dummyArg); + +private: + CtorEnum m_ctorEnum; + int m_objId; + double m_value; +}; + +#endif // IMPLICITCONV_H diff --git a/sources/shiboken2/tests/libsample/injectcode.cpp b/sources/shiboken2/tests/libsample/injectcode.cpp new file mode 100644 index 0000000..b1cf2d2 --- /dev/null +++ b/sources/shiboken2/tests/libsample/injectcode.cpp @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "injectcode.h" +#include + +using namespace std; + +InjectCode::InjectCode() +{ +} + +InjectCode::~InjectCode() +{ +} + +template +const char* InjectCode::toStr(const T& value) +{ + std::ostringstream s; + s << value; + m_valueHolder = s.str(); + return m_valueHolder.c_str(); +} + +const char* InjectCode::simpleMethod1(int arg0, int arg1) +{ + return toStr(arg0 + arg1); +} + +const char* InjectCode::simpleMethod2() +{ + return "_"; +} + +const char* InjectCode::simpleMethod3(int argc, char** argv) +{ + for (int i = 0; i < argc; ++i) + m_valueHolder += argv[i]; + return m_valueHolder.c_str(); +} + +const char* InjectCode::overloadedMethod(int arg0, bool arg1) +{ + toStr(arg0); + m_valueHolder += arg1 ? "true" : "false"; + return m_valueHolder.c_str(); +} + +const char* InjectCode::overloadedMethod(int arg0, double arg1) +{ + return toStr(arg0 + arg1); +} + +const char* InjectCode::overloadedMethod(int argc, char** argv) +{ + return simpleMethod3(argc, argv); +} + +const char* InjectCode::virtualMethod(int arg) +{ + return toStr(arg); +} + +int InjectCode::arrayMethod(int count, int *values) const +{ + int ret = 0; + for (int i=0; i < count; i++) + ret += values[i]; + return ret; +} + +int InjectCode::sumArrayAndLength(int* values) const +{ + int sum = 0; + + while(*values) { + sum = sum + *values + 1; + values++; + } + + return sum; +} diff --git a/sources/shiboken2/tests/libsample/injectcode.h b/sources/shiboken2/tests/libsample/injectcode.h new file mode 100644 index 0000000..927721f --- /dev/null +++ b/sources/shiboken2/tests/libsample/injectcode.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef INJECTCODE_H +#define INJECTCODE_H + +#include "libsamplemacros.h" +#include +#include + +class LIBSAMPLE_API InjectCode +{ +public: + InjectCode(); + virtual ~InjectCode(); + + const char* simpleMethod1(int arg0, int arg1); + const char* simpleMethod2(); + const char* simpleMethod3(int argc, char** argv); + + const char* overloadedMethod(int argc, char** argv); + const char* overloadedMethod(int arg0, double arg1); + const char* overloadedMethod(int arg0, bool arg1); + + virtual int arrayMethod(int count, int* values) const; + inline int callArrayMethod(int count, int *values) const { return arrayMethod(count, values); } + virtual const char* virtualMethod(int arg); + int sumArrayAndLength(int* values) const; +private: + // This attr is just to retain the memory pointed by all return values, + // So, the memory returned by all methods will be valid until someone call + // another method of this class. + std::string m_valueHolder; + + template + const char* toStr(const T& value); +}; + +#endif // INJECTCODE_H + diff --git a/sources/shiboken2/tests/libsample/libsamplemacros.h b/sources/shiboken2/tests/libsample/libsamplemacros.h new file mode 100644 index 0000000..cda029a --- /dev/null +++ b/sources/shiboken2/tests/libsample/libsamplemacros.h @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef LIBSAMPLEMACROS_H +#define LIBSAMPLEMACROS_H + +#if defined _WIN32 || defined __CYGWIN__ + #if LIBSAMPLE_BUILD + #define LIBSAMPLE_API __declspec(dllexport) + #else + #define LIBSAMPLE_API __declspec(dllimport) + #endif +#else +#if __GNUC__ >= 4 + #define LIBSAMPLE_API __attribute__ ((visibility("default"))) +#else + #define LIBSAMPLE_API +#endif +#endif + +#endif diff --git a/sources/shiboken2/tests/libsample/list.h b/sources/shiboken2/tests/libsample/list.h new file mode 100644 index 0000000..f4970d9 --- /dev/null +++ b/sources/shiboken2/tests/libsample/list.h @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef LIST_H +#define LIST_H + +#include +#include "libsamplemacros.h" +#include "point.h" + +class ObjectType; + +template +class List : public std::list +{ +}; + +class IntList : public List +{ +public: + enum CtorEnum { + NoParamsCtor, + IntCtor, + CopyCtor, + ListOfIntCtor + }; + + inline IntList() : m_ctorUsed(NoParamsCtor) {} + inline explicit IntList(int val) : m_ctorUsed(IntCtor) { push_back(val); } + inline IntList(const IntList& lst) : List(lst), m_ctorUsed(CopyCtor) {} + inline IntList(const List& lst) : List(lst), m_ctorUsed(ListOfIntCtor) {} + + inline void append(int v) { insert(end(), v); } + CtorEnum constructorUsed() { return m_ctorUsed; } +private: + CtorEnum m_ctorUsed; +}; + +class PointValueList : public List +{ +public: + enum CtorEnum { + NoParamsCtor, + PointCtor, + CopyCtor, + ListOfPointValuesCtor + }; + + inline PointValueList() : m_ctorUsed(NoParamsCtor) {} + inline explicit PointValueList(Point val) : m_ctorUsed(PointCtor) { push_back(val); } + inline PointValueList(const PointValueList& lst) : List(lst), m_ctorUsed(CopyCtor) {} + inline PointValueList(const List& lst) : List(lst), m_ctorUsed(ListOfPointValuesCtor) {} + + inline void append(Point v) { insert(end(), v); } + CtorEnum constructorUsed() { return m_ctorUsed; } +private: + CtorEnum m_ctorUsed; +}; + +class ObjectTypePtrList : public List +{ +public: + enum CtorEnum { + NoParamsCtor, + ObjectTypeCtor, + CopyCtor, + ListOfObjectTypePtrCtor + }; + + inline ObjectTypePtrList() : m_ctorUsed(NoParamsCtor) {} + inline explicit ObjectTypePtrList(ObjectType* val) : m_ctorUsed(ObjectTypeCtor) { push_back(val); } + inline ObjectTypePtrList(const ObjectTypePtrList& lst) : List(lst), m_ctorUsed(CopyCtor) {} + inline ObjectTypePtrList(const List& lst) : List(lst), m_ctorUsed(ListOfObjectTypePtrCtor) {} + + inline void append(ObjectType* v) { insert(end(), v); } + CtorEnum constructorUsed() { return m_ctorUsed; } +private: + CtorEnum m_ctorUsed; +}; + +#endif // LIST_H diff --git a/sources/shiboken2/tests/libsample/listuser.cpp b/sources/shiboken2/tests/libsample/listuser.cpp new file mode 100644 index 0000000..b50ce1e --- /dev/null +++ b/sources/shiboken2/tests/libsample/listuser.cpp @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include "listuser.h" + +using namespace std; + +std::list +ListUser::callCreateList() +{ + return createList(); +} + +std::list +ListUser::createList() +{ + std::list retval; + for (int i = 0; i < 4; i++) + retval.push_front(rand()); + return retval; +} + +std::list +ListUser::createComplexList(Complex cpx0, Complex cpx1) +{ + std::list retval; + retval.push_back(cpx0); + retval.push_back(cpx1); + return retval; +} + +double +ListUser::sumList(std::list vallist) +{ + return std::accumulate(vallist.begin(), vallist.end(), 0.0); +} + +double +ListUser::sumList(std::list vallist) +{ + return std::accumulate(vallist.begin(), vallist.end(), 0.0); +} + +ListUser::ListOfSomething +ListUser::listOfPoints(const std::list& pointlist) +{ + return ListOfPoint; +} + +ListUser::ListOfSomething +ListUser::listOfPoints(const std::list& pointlist) +{ + return ListOfPointF; +} + +void +ListUser::multiplyPointList(PointList& points, double multiplier) +{ + for(PointList::iterator piter = points.begin(); piter != points.end(); piter++) { + (*piter)->setX((*piter)->x() * multiplier); + (*piter)->setY((*piter)->y() * multiplier); + } +} + diff --git a/sources/shiboken2/tests/libsample/listuser.h b/sources/shiboken2/tests/libsample/listuser.h new file mode 100644 index 0000000..9236088 --- /dev/null +++ b/sources/shiboken2/tests/libsample/listuser.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef LISTUSER_H +#define LISTUSER_H + +#include +#include "complex.h" +#include "point.h" +#include "pointf.h" + +#include "libsamplemacros.h" + +class LIBSAMPLE_API ListUser +{ +public: + typedef std::list PointList; + + enum ListOfSomething { + ListOfPoint, + ListOfPointF + }; + + ListUser() {} + ListUser(const ListUser& other) : m_lst(other.m_lst) {} + virtual ~ListUser() {} + + virtual std::list createList(); + std::list callCreateList(); + + static std::list createComplexList(Complex cpx0, Complex cpx1); + + double sumList(std::list vallist); + double sumList(std::list vallist); + + static ListOfSomething listOfPoints(const std::list& pointlist); + static ListOfSomething listOfPoints(const std::list& pointlist); + + static void multiplyPointList(PointList& points, double multiplier); + + inline void setList(std::list lst) { m_lst = lst; } + inline std::list getList() { return m_lst; } + +private: + std::list m_lst; +}; + +#endif // LISTUSER_H + diff --git a/sources/shiboken2/tests/libsample/main.cpp b/sources/shiboken2/tests/libsample/main.cpp new file mode 100644 index 0000000..336551e --- /dev/null +++ b/sources/shiboken2/tests/libsample/main.cpp @@ -0,0 +1,244 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include "abstract.h" +#include "derived.h" +#include "kindergarten.h" +#include "complex.h" +#include "point.h" +#include "size.h" +#include "listuser.h" +#include "samplenamespace.h" + +using namespace std; + +int +main(int argv, char **argc) +{ + cout << endl; + + Derived derived; + + cout << endl; + + derived.unpureVirtual(); + derived.pureVirtual(); + derived.callPureVirtual(); + + cout << endl; + Abstract* abs; + abs = Abstract::createObject(); + cout << "Abstract::createObject(): " << abs << endl << endl; + delete abs; + + abs = Derived::createObject(); + cout << "Derived::createObject() : "; + abs->show(); + cout << endl; + delete abs; + cout << endl; + + abs = Derived::createObject(); + cout << "Derived::createObject() : "; + abs->show(); + cout << endl; + delete abs; + cout << endl; + + cout << endl << "-----------------------------------------" << endl; + + KinderGarten kg; + Derived* d[] = { 0, 0, 0 }; + + for (int i = 0; i < 3; i++) { + d[i] = new Derived(i); + d[i]->show(); + cout << endl; + kg.addChild(d[i]); + } + + kg.show(); + cout << endl; + + cout << endl << "* kill child "; + d[2]->show(); + cout << " ----------------" << endl; + kg.killChild(d[2]); + kg.show(); + cout << endl; + + cout << endl << "* release child "; + d[1]->show(); + cout << " -------------" << endl; + Abstract* released = kg.releaseChild(d[1]); + cout << "released: "; + released->show(); + cout << endl; + kg.show(); + cout << endl; + + cout << endl << "* kill children ------------------------------------" << endl; + kg.killChildren(); + kg.show(); + cout << endl << endl; + + cout << "-----------------------------------------" << endl; + ListUser lu; + cout << "ListUser::createList()" << endl; + std::list intlist = lu.createList(); + for (std::list::iterator it = intlist.begin(); it != intlist.end(); it++) { + cout << "* " << *it << endl; + } + + cout << "ListUser::createComplexList" << endl; + std::list cpxlist = ListUser::createComplexList(Complex(1.1, 2.2), Complex(3.3, 4.4)); + for (std::list::iterator it = cpxlist.begin(); it != cpxlist.end(); it++) { + cout << "* "; + (*it).show(); + cout << endl; + } + cout << endl; + + cout << "-----------------------------------------" << endl; + cout << "SampleNamespace" << endl; + + cout << "SampleNamespace::RandomNumber: "; + cout << SampleNamespace::getNumber(SampleNamespace::RandomNumber); + cout << endl; + cout << "SampleNamespace::UnixTime: "; + cout << SampleNamespace::getNumber(SampleNamespace::UnixTime); + cout << endl; + double val_d = 1.3; + cout << "SampleNamespace::powerOfTwo(" << val_d << "): "; + cout << SampleNamespace::powerOfTwo(val_d) << endl; + int val_i = 7; + cout << "SampleNamespace::powerOfTwo(" << val_i << "): "; + cout << SampleNamespace::powerOfTwo(val_i) << endl; + cout << endl; + + cout << "-----------------------------------------" << endl; + cout << "Point" << endl; + + Point p1(1.1, 2.2); + cout << "p1: "; + p1.show(); + cout << endl; + + Point p2(3.4, 5.6); + cout << "p2: "; + p2.show(); + cout << endl; + + cout << "p1 + p2 == "; + (p1 + p2).show(); + cout << endl; + + cout << "p1 * 2.0 == "; + (p1 * 2.0).show(); + cout << endl; + + cout << "1.5 * p2 == "; + (1.5 * p2).show(); + cout << endl; + + cout << "p1: "; + p1.show(); + cout << endl << "p2: "; + p2.show(); + cout << endl << "p1 += p2" << endl; + p1 += p2; + cout << "p1: "; + p1.show(); + cout << endl; + + cout << "p1 == p2 ? " << ((p1 == p2) ? "true" : "false") << endl; + cout << "p1 == p1 ? " << ((p1 == p1) ? "true" : "false") << endl; + cout << "p2 == p2 ? " << ((p2 == p2) ? "true" : "false") << endl; + + cout << "-----------------------------------------" << endl; + cout << "Size" << endl; + + Size s1(2, 2); + cout << "s1: "; + s1.show(); + cout << ", area: " << s1.calculateArea(); + cout << endl; + + Size s2(3, 5); + cout << "s2: "; + s2.show(); + cout << ", area: " << s2.calculateArea(); + cout << endl; + + cout << endl; + + cout << "s1 == s2 ? " << ((s1 == s2) ? "true" : "false") << endl; + cout << "s1 != s2 ? " << ((s1 != s2) ? "true" : "false") << endl; + + cout << "s1 < s2 ? " << ((s1 < s2) ? "true" : "false") << endl; + cout << "s1 <= s2 ? " << ((s1 <= s2) ? "true" : "false") << endl; + cout << "s1 > s2 ? " << ((s1 > s2) ? "true" : "false") << endl; + cout << "s1 >= s2 ? " << ((s1 >= s2) ? "true" : "false") << endl; + + cout << "s1 < 10 ? " << ((s1 < 10) ? "true" : "false") << endl; + cout << "s1 <= 10 ? " << ((s1 <= 10) ? "true" : "false") << endl; + cout << "s1 > 10 ? " << ((s1 > 10) ? "true" : "false") << endl; + cout << "s1 >= 10 ? " << ((s1 >= 10) ? "true" : "false") << endl; + cout << "s2 < 10 ? " << ((s2 < 10) ? "true" : "false") << endl; + cout << "s2 <= 10 ? " << ((s2 <= 10) ? "true" : "false") << endl; + cout << "s2 > 10 ? " << ((s2 > 10) ? "true" : "false") << endl; + cout << "s2 >= 10 ? " << ((s2 >= 10) ? "true" : "false") << endl; + cout << endl; + + cout << "s1: "; + s1.show(); + cout << endl << "s2: "; + s2.show(); + cout << endl << "s1 += s2" << endl; + s1 += s2; + cout << "s1: "; + s1.show(); + cout << endl; + + cout << endl; + + cout << "s1: "; + s1.show(); + cout << endl << "s1 *= 2.0" << endl; + s1 *= 2.0; + cout << "s1: "; + s1.show(); + cout << endl; + + cout << endl; + + return 0; +} + diff --git a/sources/shiboken2/tests/libsample/mapuser.cpp b/sources/shiboken2/tests/libsample/mapuser.cpp new file mode 100644 index 0000000..1dbd02d --- /dev/null +++ b/sources/shiboken2/tests/libsample/mapuser.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "mapuser.h" + +using namespace std; + +std::map > +MapUser::callCreateMap() +{ + return createMap(); +} + + +std::map > +MapUser::createMap() +{ + std::map > retval; + + std::pair > + item0("zero", std::pair(Complex(1.2, 3.4), 2)); + retval.insert(item0); + + std::pair > + item1("one", std::pair(Complex(5.6, 7.8), 3)); + retval.insert(item1); + + std::pair > + item2("two", std::pair(Complex(9.1, 2.3), 5)); + retval.insert(item2); + + return retval; +} + +void +MapUser::showMap(std::map mapping) +{ + std::map::iterator it; + cout << __FUNCTION__ << endl; + for (it = mapping.begin() ; it != mapping.end(); it++) + cout << (*it).first << " => " << (*it).second << endl; +} + diff --git a/sources/shiboken2/tests/libsample/mapuser.h b/sources/shiboken2/tests/libsample/mapuser.h new file mode 100644 index 0000000..9677d2d --- /dev/null +++ b/sources/shiboken2/tests/libsample/mapuser.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAPUSER_H +#define MAPUSER_H + +#include +#include +#include +#include +#include "complex.h" +#include "bytearray.h" + +#include "libsamplemacros.h" + +class LIBSAMPLE_API MapUser +{ +public: + MapUser() {} + virtual ~MapUser() {} + + virtual std::map > createMap(); + std::map > callCreateMap(); + + void showMap(std::map mapping); + + inline void setMap(std::map > map) { m_map = map; } + inline std::map > getMap() { return m_map; } + + // Compile test + static void pointerToMap(std::map* arg) {} + static void referenceToMap(std::map& arg) {} + + inline const std::map& passMapIntValueType(const std::map& arg) { return arg; } + +private: + std::map > m_map; +}; + +#endif // MAPUSER_H diff --git a/sources/shiboken2/tests/libsample/modelindex.h b/sources/shiboken2/tests/libsample/modelindex.h new file mode 100644 index 0000000..dd3ddc0 --- /dev/null +++ b/sources/shiboken2/tests/libsample/modelindex.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODELINDEX_H +#define MODELINDEX_H + +#include "libsamplemacros.h" + +class ModelIndex +{ +public: + ModelIndex() : m_value(0) {} + ModelIndex(const ModelIndex& other) { m_value = other.m_value; } + inline void setValue(int value) { m_value = value; } + inline int value() const { return m_value; } + static int getValue(const ModelIndex& index) { return index.value(); } +private: + int m_value; +}; + +class ReferentModelIndex +{ +public: + ReferentModelIndex() {} + ReferentModelIndex(const ModelIndex& index) : m_index(index) {} + ReferentModelIndex(const ReferentModelIndex& other) { m_index = other.m_index; } + inline void setValue(int value) { m_index.setValue(value); } + inline int value() const { return m_index.value(); } + operator const ModelIndex&() const { return m_index; } +private: + ModelIndex m_index; +}; + +class PersistentModelIndex +{ +public: + PersistentModelIndex() {} + PersistentModelIndex(const ModelIndex& index) : m_index(index) {} + PersistentModelIndex(const PersistentModelIndex& other) { m_index = other.m_index; } + inline void setValue(int value) { m_index.setValue(value); } + inline int value() const { return m_index.value(); } + operator ModelIndex() const { return m_index; } +private: + ModelIndex m_index; +}; + +#endif diff --git a/sources/shiboken2/tests/libsample/modifications.cpp b/sources/shiboken2/tests/libsample/modifications.cpp new file mode 100644 index 0000000..98b22f0 --- /dev/null +++ b/sources/shiboken2/tests/libsample/modifications.cpp @@ -0,0 +1,151 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "modifications.h" +#include "objecttype.h" + +using namespace std; + +Modifications::Modifications() +{ + m_object = new ObjectType(); + m_object->setObjectName("MyObject"); +} + +Modifications::~Modifications() +{ + delete m_object; +} + +std::pair +Modifications::pointToPair(Point pt, bool* ok) +{ + std::pair retval(pt.x(), pt.y()); + *ok = true; + return retval; +} + +double +Modifications::multiplyPointCoordsPlusValue(bool* ok, Point pt, double value) +{ + double retval = (pt.x() * pt.y()) + value; + *ok = true; + return retval; +} + +int +Modifications::doublePlus(int value, int plus) +{ + return (2 * value) + plus; +} + +int +Modifications::power(int base, int exponent) +{ + if (exponent == 0) + return 1; + int retval = base; + for (int i = 1; i < exponent; i++) + retval = retval * base; + return retval; +} + +int +Modifications::timesTen(int number) +{ + return number * 10; +} + +int +Modifications::increment(int number) +{ + return ++number; +} + +void +Modifications::exclusiveCppStuff() +{ + cout << __FUNCTION__ << endl; +} + +int +Modifications::cppMultiply(int a, int b) +{ + return a * b; +} + +const char* +Modifications::className() +{ + return "Modifications"; +} + +Point +Modifications::sumPointArray(int arraySize, const Point pointArray[]) +{ + Point point; + for (int i = 0; i < arraySize; ++i) + point = point + pointArray[i]; + return point; +} + +int +Modifications::getSize(const void* data, int size) +{ + (void)data; + return size; +} + +int +Modifications::sumPointCoordinates(const Point* point) +{ + return point->x() + point->y(); +} + +double +Modifications::differenceOfPointCoordinates(const Point* pt, bool* ok) +{ + if (!pt) { + *ok = false; + return 0.0; + } + *ok = true; + double result = pt->x() - pt->y(); + if (result < 0) + result = result * -1.0; + return result; +} + +bool +Modifications::nonConversionRuleForArgumentWithDefaultValue(ObjectType** object) +{ + if (object) + *object = m_object; + return true; +} diff --git a/sources/shiboken2/tests/libsample/modifications.h b/sources/shiboken2/tests/libsample/modifications.h new file mode 100644 index 0000000..035ec84 --- /dev/null +++ b/sources/shiboken2/tests/libsample/modifications.h @@ -0,0 +1,142 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODIFICATIONS_H +#define MODIFICATIONS_H + +#include "libsamplemacros.h" +#include +#include "point.h" +#include "oddbool.h" + +class ObjectType; + +class LIBSAMPLE_API Modifications +{ +public: + Modifications(); + virtual ~Modifications(); + + enum OverloadedModFunc { + OverloadedNone, + Overloaded_ibid, + Overloaded_ibib, + Overloaded_ibiP, + Overloaded_ibii, + Overloaded_ibPP + }; + + // those overloaded methods should be heavily modified + // to push the overload decisor to its limits + inline OverloadedModFunc overloaded(int a0, bool b0, int c0, double d0) { return Overloaded_ibid; } + inline OverloadedModFunc overloaded(int a1, bool b1, int c1, bool d1) { return Overloaded_ibib; } + inline OverloadedModFunc overloaded(int a2, bool b2, int c2, Point d2) { return Overloaded_ibiP; } + inline OverloadedModFunc overloaded(int a3, bool b3, int c3 = 123, int d3 = 456) { return Overloaded_ibii; } + inline OverloadedModFunc overloaded(int a4, bool b4, Point c4, Point d4) { return Overloaded_ibPP; } + + inline void argRemoval0(int a0, bool a1, int a2 = 123, int a3 = 456) {} + inline void argRemoval0(int a0, bool a1, int a2, bool a3) {} + + inline void argRemoval1(int a0, bool a1, Point a2 = Point(1, 2), Point a3 = Point(3, 4), int a4 = 333) {} + inline void argRemoval1(int a0, bool a1, int a2, bool a3) {} + + inline void argRemoval2(int a0, bool a1, Point a2 = Point(1, 2), Point a3 = Point(3, 4), int a4 = 333) {} + + inline void argRemoval3(int a0, Point a1 = Point(1, 2), bool a2 = true, Point a3 = Point(3, 4), int a4 = 333) {} + + inline void argRemoval4(int a0, Point a1, bool a2, Point a3 = Point(3, 4), int a4 = 333) {} + + inline void argRemoval5(int a0, bool a1, Point a2 = Point(1, 2), Point a3 = Point(3, 4), int a4 = 333) {} + inline void argRemoval5(int a0, bool a1, int a2, bool a3) {} + + // 'ok' must be removed and the return value will be changed + // to a tuple (PyObject*) containing the expected result plus + // the 'ok' value as a Python boolean + std::pair pointToPair(Point pt, bool* ok); + + // same as 'pointToPair' except that this time 'ok' is the first argument + double multiplyPointCoordsPlusValue(bool* ok, Point pt, double value); + + // completely remove 'plus' from the Python side + int doublePlus(int value, int plus = 0); + + // the default value for both arguments must be changed in Python + int power(int base = 1, int exponent = 0); + + // in Python set argument default value to 10 + int timesTen(int number); + + // in Python remove the argument default value + int increment(int number = 0); + + // don't export this method to Python + void exclusiveCppStuff(); + + // change the name of this regular method + int cppMultiply(int a, int b); + + // change the name of this virtual method + virtual const char* className(); + + Point sumPointArray(int arraySize, const Point pointArray[]); + + // Replace 'const void*' by 'ByteArray&'. + int getSize(const void* data, int size); + + // Mark the argument with a tag; + // the test implementation must expect point never to be null. + int sumPointCoordinates(const Point* point); + + // Modify the return value of a virtual method. + virtual double differenceOfPointCoordinates(const Point* pt, bool* ok); + double callDifferenceOfPointCoordinates(const Point* pt, bool* ok) { return differenceOfPointCoordinates(pt, ok); } + + // Sets an ObjectType in the argument and returns true. + bool nonConversionRuleForArgumentWithDefaultValue(ObjectType** object = 0); + ObjectType* getObject() const { return m_object; } + + // Inject code with a %CONVERTTOPYTHON that receives an user's primitive type. + static inline OddBool passOddBool(OddBool ob) { return ob; } + +private: + ObjectType* m_object; +}; + +class LIBSAMPLE_API AbstractModifications : public Modifications +{ +public: + AbstractModifications() {} + virtual ~AbstractModifications() {} + + inline bool invert(bool value) { return !value; } + + // completely remove this method in Python + virtual void pointlessPureVirtualMethod() = 0; +}; + +#endif // MODIFICATIONS_H diff --git a/sources/shiboken2/tests/libsample/modified_constructor.cpp b/sources/shiboken2/tests/libsample/modified_constructor.cpp new file mode 100644 index 0000000..015cf4e --- /dev/null +++ b/sources/shiboken2/tests/libsample/modified_constructor.cpp @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "modified_constructor.h" + +ModifiedConstructor::ModifiedConstructor(int first_arg) +{ + m_stored_value = first_arg; +} + +int +ModifiedConstructor::retrieveValue() +{ + return m_stored_value; +} + + diff --git a/sources/shiboken2/tests/libsample/modified_constructor.h b/sources/shiboken2/tests/libsample/modified_constructor.h new file mode 100644 index 0000000..ccf23a1 --- /dev/null +++ b/sources/shiboken2/tests/libsample/modified_constructor.h @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODIFIEDCONSTRUCTOR_H +#define MODIFIEDCONSTRUCTOR_H + +#include "libsamplemacros.h" + +class LIBSAMPLE_API ModifiedConstructor +{ +public: + + ModifiedConstructor(int first_arg); + int retrieveValue(); + +private: + int m_stored_value; +}; + +#endif // MODIFIEDCONSTRUCTOR_H + diff --git a/sources/shiboken2/tests/libsample/multiple_derived.cpp b/sources/shiboken2/tests/libsample/multiple_derived.cpp new file mode 100644 index 0000000..2c6a0b8 --- /dev/null +++ b/sources/shiboken2/tests/libsample/multiple_derived.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "multiple_derived.h" + +MDerived1::MDerived1() : m_value(100) +{ +} + +MDerived2::MDerived2() : m_value(200) +{ +} + +MDerived3::MDerived3() : m_value(3000) +{ +} + +MDerived4::MDerived4() +{ +} + +MDerived5::MDerived5() +{ +} + +MDerived1* +MDerived1::transformFromBase1(Base1* self) +{ + MDerived1* ptr = dynamic_cast(self); + return ptr; +} + +MDerived1* +MDerived1::transformFromBase2(Base2* self) +{ + MDerived1* ptr = dynamic_cast(self); + return ptr; +} + diff --git a/sources/shiboken2/tests/libsample/multiple_derived.h b/sources/shiboken2/tests/libsample/multiple_derived.h new file mode 100644 index 0000000..b551eda --- /dev/null +++ b/sources/shiboken2/tests/libsample/multiple_derived.h @@ -0,0 +1,195 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MDERIVED_H +#define MDERIVED_H + +#include "libsamplemacros.h" +#include + +class Base1 +{ +public: + Base1() : m_value(1) {} + virtual ~Base1() {} + virtual int base1Method() { return m_value; } + + virtual void publicMethod() {}; +private: + int m_value; +}; + +class Base2 +{ +public: + Base2() : m_value(2) {} + virtual ~Base2() {} + virtual int base2Method() { return m_value; } +private: + int m_value; +}; + +class LIBSAMPLE_API MDerived1 : public Base1, public Base2 +{ +public: + MDerived1(); + ~MDerived1() override {} + + int mderived1Method() { return m_value; } + int base1Method () override { return Base1::base1Method() * 10; } + int base2Method() override { return Base2::base2Method() * 10; } + + inline Base1* castToBase1() { return (Base1*) this; } + inline Base2* castToBase2() { return (Base2*) this; } + + static MDerived1* transformFromBase1(Base1 *self); + static MDerived1* transformFromBase2(Base2 *self); + +private: + void publicMethod() override {} + int m_value; +}; + +class SonOfMDerived1 : public MDerived1 +{ +public: + SonOfMDerived1() : m_value(0) {} + ~SonOfMDerived1() {} + + inline MDerived1* castToMDerived1() { return (MDerived1*) this; } + + int sonOfMDerived1Method() { return m_value; } +private: + int m_value; +}; + +class Base3 +{ +public: + explicit Base3(int val = 3) : m_value(val) {} + virtual ~Base3() {} + int base3Method() { return m_value; } +private: + int m_value; +}; + +class Base4 +{ +public: + Base4() : m_value(4) {} + virtual ~Base4() {} + int base4Method() { return m_value; } +private: + int m_value; +}; + +class Base5 +{ +public: + Base5() : m_value(5) {} + virtual ~Base5() {} + virtual int base5Method() { return m_value; } +private: + int m_value; +}; + +class Base6 +{ +public: + Base6() : m_value(6) {} + virtual ~Base6() {} + virtual int base6Method() { return m_value; } +private: + int m_value; +}; + + +class LIBSAMPLE_API MDerived2 : public Base3, public Base4, public Base5, public Base6 +{ +public: + MDerived2(); + virtual ~MDerived2() {} + + inline int base4Method() { return Base3::base3Method() * 10; } + inline int mderived2Method() { return m_value; } + + inline Base3* castToBase3() { return (Base3*) this; } + inline Base4* castToBase4() { return (Base4*) this; } + inline Base5* castToBase5() { return (Base5*) this; } + inline Base6* castToBase6() { return (Base6*) this; } + +private: + int m_value; +}; + +class LIBSAMPLE_API MDerived3 : public MDerived1, public MDerived2 +{ +public: + MDerived3(); + virtual ~MDerived3() {} + + inline virtual int mderived3Method() { return m_value; } + + inline MDerived1* castToMDerived1() { return (MDerived1*) this; } + inline MDerived2* castToMDerived2() { return (MDerived2*) this; } + + inline Base3* castToBase3() { return (Base3*) this; } + +private: + int m_value; +}; + +class LIBSAMPLE_API MDerived4 : public Base3, public Base4 +{ +public: + MDerived4(); + ~MDerived4() {} + + inline int mderived4Method() { return 0; } + inline int justDummyMethod() { return m_value; } + + inline Base3* castToBase3() { return (Base3*) this; } + inline Base4* castToBase4() { return (Base4*) this; } +private: + int m_value; +}; + +class LIBSAMPLE_API MDerived5 : public Base3, public Base4 +{ +public: + MDerived5(); + virtual ~MDerived5() {} + + virtual int mderived5Method() { return 0; } + + inline Base3* castToBase3() { return (Base3*) this; } + inline Base4* castToBase4() { return (Base4*) this; } +}; + +#endif // MDERIVED_H + diff --git a/sources/shiboken2/tests/libsample/noimplicitconversion.h b/sources/shiboken2/tests/libsample/noimplicitconversion.h new file mode 100644 index 0000000..3173f46 --- /dev/null +++ b/sources/shiboken2/tests/libsample/noimplicitconversion.h @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef NOIMPLICITCONVERSION_H +#define NOIMPLICITCONVERSION_H + +#include "libsamplemacros.h" + +// This class must not have implicit conversions AND +// no conversion operators should be defined in its own module. +class NoImplicitConversion +{ +public: + explicit NoImplicitConversion(int objId) : m_objId(objId) {} + inline int objId() const { return m_objId; } + inline static int receivesNoImplicitConversionByValue(NoImplicitConversion arg) { return arg.m_objId; } + inline static int receivesNoImplicitConversionByPointer(NoImplicitConversion* arg) { return arg->m_objId; } + inline static int receivesNoImplicitConversionByReference(NoImplicitConversion& arg) { return arg.m_objId; } +private: + int m_objId; +}; + +#endif // NOIMPLICITCONVERSION_H + diff --git a/sources/shiboken2/tests/libsample/nondefaultctor.h b/sources/shiboken2/tests/libsample/nondefaultctor.h new file mode 100644 index 0000000..bfdcbcf --- /dev/null +++ b/sources/shiboken2/tests/libsample/nondefaultctor.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef NONDEFAULTCTOR_H +#define NONDEFAULTCTOR_H + +#include "libsamplemacros.h" + +class NonDefaultCtor +{ + int m_value; +public: + NonDefaultCtor(int value) : m_value(value) + { + } + + inline int value() + { + return m_value; + } + + inline NonDefaultCtor returnMyself() + { + return *this; + } + + inline NonDefaultCtor returnMyself(int) + { + return *this; + } + + inline NonDefaultCtor returnMyself(int, NonDefaultCtor) + { + return *this; + } + + virtual NonDefaultCtor returnMyselfVirtual() + { + return *this; + } + + inline NonDefaultCtor callReturnMyselfVirtual() + { + return returnMyselfVirtual(); + } + + virtual ~NonDefaultCtor() {} +}; + +#endif diff --git a/sources/shiboken2/tests/libsample/null.h b/sources/shiboken2/tests/libsample/null.h new file mode 100644 index 0000000..ea34ff5 --- /dev/null +++ b/sources/shiboken2/tests/libsample/null.h @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef NULL_H +#define NULL_H + +class Null +{ +public: + Null(bool value) : m_isNull(value) {} + Null() : m_isNull(false) {} + void setIsNull(bool flag) { m_isNull = flag; } + +private: + bool m_isNull; +}; + +#endif // STR_H + diff --git a/sources/shiboken2/tests/libsample/objectmodel.cpp b/sources/shiboken2/tests/libsample/objectmodel.cpp new file mode 100644 index 0000000..c92fb2e --- /dev/null +++ b/sources/shiboken2/tests/libsample/objectmodel.cpp @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "objectmodel.h" + +void +ObjectModel::setData(ObjectType* data) +{ + m_data = data; +} + +ObjectType* +ObjectModel::data() const +{ + return m_data; +} + diff --git a/sources/shiboken2/tests/libsample/objectmodel.h b/sources/shiboken2/tests/libsample/objectmodel.h new file mode 100644 index 0000000..e15ce06 --- /dev/null +++ b/sources/shiboken2/tests/libsample/objectmodel.h @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OBJECTMODEL_H +#define OBJECTMODEL_H + +#include "objecttype.h" +#include "libsamplemacros.h" + +class LIBSAMPLE_API ObjectModel : public ObjectType +{ +public: + explicit ObjectModel(ObjectType* parent = 0) + : ObjectType(parent), m_data(0) + {} + + void setData(ObjectType* data); + virtual ObjectType* data() const; + + // The MethodCalled enum and related static methods were created to + // test bug #630 [http://bugs.openbossa.org/show_bug.cgi?id=630] + enum MethodCalled { ObjectTypeCalled, ObjectModelCalled }; + static MethodCalled receivesObjectTypeFamily(const ObjectType& object) { return ObjectModel::ObjectTypeCalled; } + static MethodCalled receivesObjectTypeFamily(const ObjectModel& object) { return ObjectModel::ObjectModelCalled; } + +private: + // The model holds only one piece of data. + // (This is just a test after all.) + ObjectType* m_data; +}; + +#endif // OBJECTMODEL_H + diff --git a/sources/shiboken2/tests/libsample/objecttype.cpp b/sources/shiboken2/tests/libsample/objecttype.cpp new file mode 100644 index 0000000..e09a92f --- /dev/null +++ b/sources/shiboken2/tests/libsample/objecttype.cpp @@ -0,0 +1,311 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "objecttype.h" +#include "objecttypelayout.h" +#include +#include +#include +#include + +using namespace std; + +ObjectType::ObjectType(ObjectType* parent) : m_parent(0), m_layout(0), m_call_id(-1) +{ + setParent(parent); +} + +ObjectType::~ObjectType() +{ + for (ObjectTypeList::iterator child_iter = m_children.begin(); + child_iter != m_children.end(); ++child_iter) + delete *child_iter; +} + +ObjectType* +ObjectType::createWithChild() +{ + ObjectType* parent = create(); + ObjectType* child = create(); + child->setObjectName("child"); + child->setParent(parent); + return parent; +} + +void +ObjectType::removeChild(ObjectType* child) +{ + if (!child) + return; + + ObjectTypeList::iterator child_iter = std::find(m_children.begin(), m_children.end(), child); + if (child_iter != m_children.end()) { + m_children.erase(child_iter); + child->m_parent = 0; + } +} + +ObjectType* +ObjectType::takeChild(ObjectType* child) +{ + if (!child) + return 0; + + ObjectTypeList::iterator child_iter = std::find(m_children.begin(), m_children.end(), child); + if (child_iter != m_children.end()) { + m_children.erase(child_iter); + child->m_parent = 0; + return child; + } + return 0; +} + +ObjectType* +ObjectType::takeChild(const Str& name) +{ + return takeChild(findChild(name)); + +} + +ObjectType* +ObjectType::findChild(const Str& name) +{ + for (ObjectTypeList::iterator child_iter = m_children.begin(); + child_iter != m_children.end(); ++child_iter) { + + if ((*child_iter)->objectName() == name) + return *child_iter; + } + return 0; +} + +void +ObjectType::killChild(const Str& name) +{ + for (ObjectTypeList::iterator child_iter = m_children.begin(); + child_iter != m_children.end(); ++child_iter) { + + if ((*child_iter)->objectName() == name) { + ObjectType* child = *child_iter; + removeChild(child); + delete child; + break; + } + } +} + +void +ObjectType::setParent(ObjectType* parent) +{ + if (m_parent == parent) + return; + + if (m_parent) + m_parent->removeChild(this); + + m_parent = parent; + if (m_parent) + m_parent->m_children.push_back(this); +} + +void +ObjectType::setObjectName(const Str& name) +{ + m_objectName = name; +} + +Str +ObjectType::objectName() const +{ + return m_objectName; +} + +bool +ObjectType::causeEvent(Event::EventType eventType) +{ + Event e(eventType); + return event(&e); +} + +bool +ObjectType::event(Event* event) +{ + return true; +} + +int +ObjectType::processEvent(ObjectTypeList objects, Event *event) +{ + int evaluated = 0; + + for (ObjectTypeList::iterator obj_iter = objects.begin(); + obj_iter != objects.end(); ++obj_iter) { + if((*obj_iter)->event(event)) + evaluated++; + } + + return evaluated; + +} + +void +ObjectType::callInvalidateEvent(Event* event) +{ + invalidateEvent(event); +} + +void +ObjectType::setLayout(ObjectTypeLayout* l) +{ + if (!l) { + cerr << "[WARNING] ObjectType::setLayout: Cannot set layout to 0." << endl; + return; + } + + if (layout()) { + if (layout() != l) { + cerr << "[WARNING] ObjectType::setLayout: Attempting to set ObjectTypeLayout '" << l->objectName().cstring(); + cerr << "' on ObjectType '" << objectName().cstring() << "', which already has a layout." << endl; + } + return; + } + + ObjectType* oldParent = l->parent(); + if (oldParent && oldParent != this) { + if (oldParent->isLayoutType()) { + cerr << "[WARNING] ObjectType::setLayout: Attempting to set ObjectTypeLayout '" << l->objectName().cstring(); + cerr << "' on ObjectType '" << objectName().cstring() << "', when the ObjectTypeLayout already has a parent layout." << endl; + return; + } else { + // Steal the layout from an ObjectType parent. + oldParent->takeLayout(); + } + } + + m_layout = l; + if (oldParent != this) { + l->setParent(this); + l->reparentChildren(this); + } +} + +ObjectTypeLayout* ObjectType::takeLayout() +{ + ObjectTypeLayout* l = layout(); + if (!l) + return 0; + m_layout = 0; + l->setParent(0); + return l; +} + +unsigned int +objectTypeHash(const ObjectType* objectType) +{ + return reinterpret_cast(objectType); +} + +unsigned char +ObjectType::callWithEnum(const Str& prefix, Event::EventType type, unsigned char value){ + return value*value; +} + +unsigned char +ObjectType::callWithEnum(const Str& prefix, unsigned char value) { + return value; +} + +void +ObjectType::setObjectSplittedName(const char*, const Str& prefix, const Str& suffix) +{ + std::string result(prefix.cstring()); + result += suffix.cstring(); + m_objectName = result.c_str(); +} + +void +ObjectType::setObjectNameWithSize(const char*, int size, const Str& name) +{ + std::string result(name.cstring(), size); + m_objectName = result.c_str(); +} + +void +ObjectType::setObjectNameWithSize(const Str& name, int size) +{ + setObjectNameWithSize("", size, name); +} + +void ObjectType::setObject(ObjectType *) +{ + m_call_id = 0; +} + +void ObjectType::setObject(const Null&) +{ + m_call_id = 1; +} + +int ObjectType::callId() const +{ + return m_call_id; +} + + +void ObjectType::callVirtualCreateChild() +{ + ObjectType* fake_parent = new ObjectType(); + ObjectType* fake_child = createChild(fake_parent); + assert(fake_child->isPython()); + delete fake_parent; +} + +ObjectType* ObjectType::createChild(ObjectType* parent) +{ + return new ObjectType(parent); +} + +std::size_t ObjectType::createObjectType() +{ + void* addr = new ObjectType(); + return (std::size_t) addr; +} + +OtherBase::~OtherBase() +{ +} + +ObjectTypeDerived::~ObjectTypeDerived() +{ +} + +bool +ObjectTypeDerived::event(Event* event) +{ + return true; +} diff --git a/sources/shiboken2/tests/libsample/objecttype.h b/sources/shiboken2/tests/libsample/objecttype.h new file mode 100644 index 0000000..bcb4f33 --- /dev/null +++ b/sources/shiboken2/tests/libsample/objecttype.h @@ -0,0 +1,185 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OBJECTTYPE_H +#define OBJECTTYPE_H + +#include +#include "str.h" +#include "null.h" + +#include "libsamplemacros.h" + +#include + +struct Event +{ + enum EventType { + NO_EVENT, + BASIC_EVENT, + SOME_EVENT, + ANY_EVENT + }; + + enum class EventTypeClass { + Value1, + Value2 + }; + + Event(EventType eventType) : m_eventType(eventType) {} + EventType eventType() { return m_eventType; } + + void setEventType(EventType et) { m_eventType = et; } + void setEventTypeByConstRef(const EventType &et) { m_eventType = et; } + +private: + EventType m_eventType; +}; + +class ObjectTypeLayout; +class ObjectType; +typedef std::list ObjectTypeList; + +class LIBSAMPLE_API ObjectType +{ +public: + // ### Fixme: Use uintptr_t in C++ 11 + typedef size_t Identifier; + + explicit ObjectType(ObjectType* parent = 0); + virtual ~ObjectType(); + + // factory method + inline static ObjectType* create() { return new ObjectType(); } + static ObjectType* createWithChild(); + + void setParent(ObjectType* parent); + inline ObjectType* parent() const { return m_parent; } + inline const ObjectTypeList& children() const { return m_children; } + void killChild(const Str& name); + void removeChild(ObjectType* child); + ObjectType* takeChild(ObjectType* child); + virtual ObjectType* takeChild(const Str& name); + ObjectType* findChild(const Str& name); + + Str objectName() const; + void setObjectName(const Str& name); + + inline Identifier identifier() const { return reinterpret_cast(this); } + + bool causeEvent(Event::EventType eventType); + + // Returns true if the event is processed. + virtual bool event(Event* event); + static int processEvent(ObjectTypeList objects, Event *event); + + void callInvalidateEvent(Event* event); + virtual void invalidateEvent(Event* event) {} + + // This nonsense method emulate QWidget.setLayout method + // All layout objects will became children of this object. + void setLayout(ObjectTypeLayout* layout); + inline ObjectTypeLayout* layout() const { return m_layout; } + + // This method should be reimplemented by ObjectTypeLayout. + virtual bool isLayoutType() { return false; } + + unsigned char callWithEnum(const Str& prefix, Event::EventType type, unsigned char value=80); + unsigned char callWithEnum(const Str& prefix, unsigned char value=0); + + //Functions used in test with named arguments + void setObjectSplittedName(const char*, const Str& prefix = Str("")); + void setObjectNameWithSize(const char*, int size=9, const Str& name = Str("")); + void setObjectNameWithSize(const Str& name = Str(""), int size=9); + + //Function used to confuse the generator when two values accept Null as arg + void setObject(ObjectType *); + void setObject(const Null&); + int callId() const; + + //Function used to create a parent from C++ + virtual bool isPython() { return false; } + void callVirtualCreateChild(); + virtual ObjectType* createChild(ObjectType* parent); + static std::size_t createObjectType(); + + //return a parent from C++ + ObjectType* getCppParent() { + if (!m_parent) { + ObjectType* parent = new ObjectType(); + setParent(parent); + } + return m_parent; + } + + void destroyCppParent() { + delete m_parent; + } + + //Deprecated test + bool deprecatedFunction() { return true; } + + // nextInFocusChain simply returns the parent to test object cycles; the parent + // may be returned by the QWidget's implementation but isn't always returned + ObjectType* nextInFocusChain() { return m_parent; } + +private: + ObjectType(const ObjectType&); + ObjectType& operator=(const ObjectType&); + + ObjectTypeLayout* takeLayout(); + + Str m_objectName; + ObjectType* m_parent; + ObjectTypeList m_children; + + ObjectTypeLayout* m_layout; + + + //used on overload null test + int m_call_id; +}; + +LIBSAMPLE_API unsigned int objectTypeHash(const ObjectType* objectType); + +class LIBSAMPLE_API OtherBase { +public: + OtherBase() {}; + virtual ~OtherBase(); +}; + +class LIBSAMPLE_API ObjectTypeDerived: public ObjectType, public OtherBase { +public: + ObjectTypeDerived(): ObjectType(), OtherBase() {}; + + bool event(Event* event) override; + ~ObjectTypeDerived() override; +}; + +#endif // OBJECTTYPE_H + diff --git a/sources/shiboken2/tests/libsample/objecttypebyvalue.h b/sources/shiboken2/tests/libsample/objecttypebyvalue.h new file mode 100644 index 0000000..64fa78c --- /dev/null +++ b/sources/shiboken2/tests/libsample/objecttypebyvalue.h @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OBJECTTYPEBYVALUE_H +#define OBJECTTYPEBYVALUE_H +#include +#include "protected.h" + +class ObjectTypeByValue +{ +public: + ObjectTypeByValue returnSomeKindOfMe() { return ObjectTypeByValue(); } + void acceptKindOfMeAsValue(ObjectTypeByValue kindOfMe) {} + + void acceptListOfObjectTypeByValue(std::list listOfMe) {} + + // prop used to check for segfaults + ProtectedProperty prop; +}; + +#endif diff --git a/sources/shiboken2/tests/libsample/objecttypeholder.cpp b/sources/shiboken2/tests/libsample/objecttypeholder.cpp new file mode 100644 index 0000000..ff2f14f --- /dev/null +++ b/sources/shiboken2/tests/libsample/objecttypeholder.cpp @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "objecttypeholder.h" + +ObjectTypeHolder::ObjectTypeHolder(const char* objectName) +{ + m_objectType = new ObjectType(); + m_objectType->setObjectName(objectName); +} + +ObjectTypeHolder::~ObjectTypeHolder() +{ + delete m_objectType; +} + +Str +ObjectTypeHolder::passObjectTypeAsReference(const ObjectType& objectType) +{ + return objectType.objectName(); +} + +Str +ObjectTypeHolder::callPassObjectTypeAsReference() +{ + return passObjectTypeAsReference(*m_objectType); +} diff --git a/sources/shiboken2/tests/libsample/objecttypeholder.h b/sources/shiboken2/tests/libsample/objecttypeholder.h new file mode 100644 index 0000000..ce13de7 --- /dev/null +++ b/sources/shiboken2/tests/libsample/objecttypeholder.h @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OBJECTTYPEHOLDER_H +#define OBJECTTYPEHOLDER_H + +#include "libsamplemacros.h" +#include "objecttype.h" +#include "str.h" + +class LIBSAMPLE_API ObjectTypeHolder +{ +public: + explicit ObjectTypeHolder(const char* objectName); + virtual ~ObjectTypeHolder(); + + ObjectType* getObjecType() { return m_objectType; } + + virtual Str passObjectTypeAsReference(const ObjectType& objectType); + Str callPassObjectTypeAsReference(); + +private: + ObjectType* m_objectType; +}; + +#endif diff --git a/sources/shiboken2/tests/libsample/objecttypelayout.cpp b/sources/shiboken2/tests/libsample/objecttypelayout.cpp new file mode 100644 index 0000000..6f3d0eb --- /dev/null +++ b/sources/shiboken2/tests/libsample/objecttypelayout.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "objecttypelayout.h" +#include + +using namespace std; + +void ObjectTypeLayout::addObject(ObjectType* obj) +{ + if (obj->isLayoutType()) { + ObjectTypeLayout* l = reinterpret_cast(obj); + if (l->parent()) { + cerr << "[WARNING] ObjectTypeLayout::addObject: layout '" << l->objectName().cstring(); + cerr << "' already has a parent." << endl; + return; + } + + l->setParent(this); + + if (parent() && !parent()->isLayoutType()) + l->reparentChildren(parent()); + } + + m_objects.push_back(obj); +} + +std::list< ObjectType* > ObjectTypeLayout::objects() const +{ + return m_objects; +} + +void ObjectTypeLayout::reparentChildren(ObjectType* parent) +{ + std::list::const_iterator it = m_objects.begin(); + for (; it != m_objects.end(); ++it) { + if ((*it)->isLayoutType()) + reinterpret_cast(*it)->reparentChildren(parent); + else + (*it)->setParent(parent); + } +} + diff --git a/sources/shiboken2/tests/libsample/objecttypelayout.h b/sources/shiboken2/tests/libsample/objecttypelayout.h new file mode 100644 index 0000000..eb09931 --- /dev/null +++ b/sources/shiboken2/tests/libsample/objecttypelayout.h @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OBJECTTYPELAYOUT_H +#define OBJECTTYPELAYOUT_H + +#include "libsamplemacros.h" +#include "objecttype.h" +#include + +class ObjectType; + +class LIBSAMPLE_API ObjectTypeLayout : public ObjectType +{ +public: + void addObject(ObjectType* obj); + std::list objects() const; + + bool isLayoutType() override { return true; } + inline static ObjectTypeLayout* create() { return new ObjectTypeLayout(); } + + ObjectType* takeChild(const Str& name) override { return ObjectType::takeChild(name); } +private: + std::list m_objects; + + void reparentChildren(ObjectType* parent); + friend LIBSAMPLE_API void ObjectType::setLayout(ObjectTypeLayout* l); +}; + +#endif // OBJECTTYPELAYOUT_H + diff --git a/sources/shiboken2/tests/libsample/objecttypeoperators.cpp b/sources/shiboken2/tests/libsample/objecttypeoperators.cpp new file mode 100644 index 0000000..dc5243f --- /dev/null +++ b/sources/shiboken2/tests/libsample/objecttypeoperators.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "objecttypeoperators.h" + +ObjectTypeOperators::ObjectTypeOperators(const std::string key) : m_key(key) +{ +} + +bool ObjectTypeOperators::operator==(const ObjectTypeOperators& other) const +{ + return m_key == other.m_key; +} + +const ObjectTypeOperators& ObjectTypeOperators::operator<(const ObjectTypeOperators& other) const +{ + return m_key < other.m_key ? *this : other; +} + +bool operator==(const ObjectTypeOperators* obj, const std::string& str) +{ + return obj->key() == str; +} + +bool operator==(const std::string& str, const ObjectTypeOperators* obj) +{ + return str == obj->key(); +} + +std::string operator+(const ObjectTypeOperators* obj, const std::string& str) +{ + return obj->key() + str; +} + +std::string operator+(const std::string& str, const ObjectTypeOperators* obj) +{ + return str + obj->key(); +} diff --git a/sources/shiboken2/tests/libsample/objecttypeoperators.h b/sources/shiboken2/tests/libsample/objecttypeoperators.h new file mode 100644 index 0000000..6bb54d6 --- /dev/null +++ b/sources/shiboken2/tests/libsample/objecttypeoperators.h @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OBJECTTYPEOPERATORS_H +#define OBJECTTYPEOPERATORS_H + +#include "libsamplemacros.h" +#include + +class LIBSAMPLE_API ObjectTypeOperators +{ +public: + explicit ObjectTypeOperators(const std::string key); + virtual ~ObjectTypeOperators() {} + + bool operator==(const ObjectTypeOperators& other) const; + const ObjectTypeOperators& operator<(const ObjectTypeOperators& other) const; + + // chaos! + virtual void operator>(const ObjectTypeOperators&) { m_key.append("operator>"); } + + std::string key() const { return m_key; } + +private: + std::string m_key; + + ObjectTypeOperators(ObjectTypeOperators&); + ObjectTypeOperators& operator=(ObjectTypeOperators&); +}; + +LIBSAMPLE_API bool operator==(const ObjectTypeOperators* obj, const std::string& str); +LIBSAMPLE_API bool operator==(const std::string& str, const ObjectTypeOperators* obj); +LIBSAMPLE_API std::string operator+(const ObjectTypeOperators* obj, const std::string& str); +LIBSAMPLE_API std::string operator+(const std::string& str, const ObjectTypeOperators* obj); + +#endif // OBJECTTYPEOPERATORS_H diff --git a/sources/shiboken2/tests/libsample/objectview.cpp b/sources/shiboken2/tests/libsample/objectview.cpp new file mode 100644 index 0000000..d640c40 --- /dev/null +++ b/sources/shiboken2/tests/libsample/objectview.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "objectview.h" +#include "objectmodel.h" +#include "str.h" + +Str +ObjectView::displayModelData() +{ + if (!m_model) + return Str("(NULL)"); + return Str("Name: %VAR").arg(m_model->objectName()); +} + +void +ObjectView::modifyModelData(Str& data) +{ + if (m_model) + m_model->setObjectName(data); +} + + +ObjectType* +ObjectView::getRawModelData() +{ + return m_model->data(); +} + diff --git a/sources/shiboken2/tests/libsample/objectview.h b/sources/shiboken2/tests/libsample/objectview.h new file mode 100644 index 0000000..6a54057 --- /dev/null +++ b/sources/shiboken2/tests/libsample/objectview.h @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OBJECTVIEW_H +#define OBJECTVIEW_H + +#include "objecttype.h" +#include "libsamplemacros.h" + +class Str; +class ObjectModel; + +class LIBSAMPLE_API ObjectView : public ObjectType +{ +public: + ObjectView(ObjectModel* model = 0, ObjectType* parent = 0) + : ObjectType(parent), m_model(model) + {} + + inline void setModel(ObjectModel* model) { m_model = model; } + inline ObjectModel* model() const { return m_model; } + + Str displayModelData(); + void modifyModelData(Str& data); + + ObjectType* getRawModelData(); + +private: + ObjectModel* m_model; +}; + +#endif // OBJECTVIEW_H + diff --git a/sources/shiboken2/tests/libsample/oddbool.h b/sources/shiboken2/tests/libsample/oddbool.h new file mode 100644 index 0000000..454c841 --- /dev/null +++ b/sources/shiboken2/tests/libsample/oddbool.h @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ODDBOOL_H +#define ODDBOOL_H + +#include "libsamplemacros.h" + +class OddBool +{ + +public: + inline explicit OddBool(bool b) : m_value(b) {} + bool value() const { return m_value; } + + inline OddBool operator!() const { return OddBool(!m_value); } + +private: + bool m_value; +}; + +inline bool operator==(OddBool b1, bool b2) { return (!b1).value() == !b2; } +inline bool operator==(bool b1, OddBool b2) { return (!b1) == (!b2).value(); } +inline bool operator==(OddBool b1, OddBool b2) { return (!b1).value() == (!b2).value(); } +inline bool operator!=(OddBool b1, bool b2) { return (!b1).value() != !b2; } +inline bool operator!=(bool b1, OddBool b2) { return (!b1) != (!b2).value(); } +inline bool operator!=(OddBool b1, OddBool b2) { return (!b1).value() != (!b2).value(); } + +class OddBoolUser +{ +public: + OddBoolUser() : m_oddbool(OddBool(false)) {} + OddBoolUser(const OddBool& oddBool) : m_oddbool(oddBool) {} + virtual ~OddBoolUser() {} + + inline OddBool oddBool() { return m_oddbool; } + inline void setOddBool(OddBool oddBool) { m_oddbool = oddBool; } + + virtual OddBool invertedOddBool() + { + return !m_oddbool; + } + + inline OddBool callInvertedOddBool() + { + return invertedOddBool(); + } + + static inline OddBool getOddBool(const OddBoolUser& oddBoolUser) + { + return oddBoolUser.m_oddbool; + } + +private: + OddBool m_oddbool; +}; + +#endif diff --git a/sources/shiboken2/tests/libsample/onlycopy.cpp b/sources/shiboken2/tests/libsample/onlycopy.cpp new file mode 100644 index 0000000..75bf23b --- /dev/null +++ b/sources/shiboken2/tests/libsample/onlycopy.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "onlycopy.h" + +OnlyCopy::OnlyCopy(const OnlyCopy& other) +{ + m_value = other.m_value; +} + +OnlyCopy& +OnlyCopy::operator=(const OnlyCopy& other) +{ + m_value = other.m_value; + return *this; +} + +OnlyCopy +FriendOfOnlyCopy::createOnlyCopy(int value) +{ + + return OnlyCopy(value); +} + +std::list +FriendOfOnlyCopy::createListOfOnlyCopy(int quantity) +{ + std::list list; + for (int i = 0; i < quantity; ++i) + list.push_back(createOnlyCopy(i)); + return list; +} diff --git a/sources/shiboken2/tests/libsample/onlycopy.h b/sources/shiboken2/tests/libsample/onlycopy.h new file mode 100644 index 0000000..2c1b255 --- /dev/null +++ b/sources/shiboken2/tests/libsample/onlycopy.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef ONLYCOPYCLASS_H +#define ONLYCOPYCLASS_H + +#include "libsamplemacros.h" +#include + +// These classes simulate a situation found in +// QtWebKit's QWebDatabase and QWebSecurityOrigin. + +class LIBSAMPLE_API OnlyCopy +{ +public: + OnlyCopy(const OnlyCopy& other); + OnlyCopy& operator=(const OnlyCopy& other); + int value() const { return m_value; } + static int getValue(OnlyCopy onlyCopy) { return onlyCopy.m_value; } + static int getValueFromReference(const OnlyCopy& onlyCopy) { return onlyCopy.m_value; } +private: + int m_value; + OnlyCopy(int value) : m_value(value) {}; + friend class FriendOfOnlyCopy; +}; + +class LIBSAMPLE_API FriendOfOnlyCopy +{ +public: + static OnlyCopy createOnlyCopy(int value); + static std::list createListOfOnlyCopy(int quantity); +}; + +#endif diff --git a/sources/shiboken2/tests/libsample/overload.cpp b/sources/shiboken2/tests/libsample/overload.cpp new file mode 100644 index 0000000..ebf1958 --- /dev/null +++ b/sources/shiboken2/tests/libsample/overload.cpp @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "overload.h" + +Overload::FunctionEnum Overload::overloaded() +{ + return Function0; +} + +Overload::FunctionEnum Overload::overloaded(Size* size) +{ + return Function1; +} + +Overload::FunctionEnum Overload::overloaded(Point* point, ParamEnum param) +{ + return Function2; +} + +Overload::FunctionEnum Overload::overloaded(const Point& point) +{ + return Function3; +} + diff --git a/sources/shiboken2/tests/libsample/overload.h b/sources/shiboken2/tests/libsample/overload.h new file mode 100644 index 0000000..6d01656 --- /dev/null +++ b/sources/shiboken2/tests/libsample/overload.h @@ -0,0 +1,143 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OVERLOAD_H +#define OVERLOAD_H + +#include "echo.h" +#include "str.h" +#include "size.h" +#include "point.h" +#include "pointf.h" +#include "polygon.h" +#include "rect.h" + +#include "libsamplemacros.h" + +class LIBSAMPLE_API Overload +{ +public: + enum FunctionEnum { + Function0, + Function1, + Function2, + Function3, + Function4, + Function5, + Function6 + }; + + enum ParamEnum { + Param0, + Param1 + }; + + Overload() {} + virtual ~Overload() {} + + FunctionEnum overloaded(); + FunctionEnum overloaded(Size* size); + FunctionEnum overloaded(Point* point, ParamEnum param); + FunctionEnum overloaded(const Point& point); + + inline void differentReturnTypes(ParamEnum param = Param0) {} + inline int differentReturnTypes(ParamEnum param, int val) { return val; } + + inline int intOverloads(const Point& p, double d) { return 1; } + inline int intOverloads(int i, int i2) { return 2; } + inline int intOverloads(int i, int removedArg, double d) { return 3; } + + inline FunctionEnum intDoubleOverloads(int a0, int a1) const { return Function0; } + inline FunctionEnum intDoubleOverloads(double a0, double a1) const { return Function1; } + + void singleOverload(Point* x) {} + Point* singleOverload() {return new Point();} + + // Similar to QImage::trueMatrix(QMatrix,int,int) and QImage::trueMatrix(QTransform,int,int) + FunctionEnum wrapperIntIntOverloads(const Point& arg0, int arg1, int arg2) { return Function0; } + FunctionEnum wrapperIntIntOverloads(const Polygon& arg0, int arg1, int arg2) { return Function1; } + + // Similar to QImage constructor + FunctionEnum strBufferOverloads(const Str& arg0, const char* arg1 = 0, bool arg2 = true) { return Function0; } + FunctionEnum strBufferOverloads(unsigned char* arg0, int arg1) { return Function1; } + FunctionEnum strBufferOverloads() { return Function2; } + + // Similar to QPainter::drawText(...) + FunctionEnum drawText(const Point& a0, const Str& a1) { return Function0; } + FunctionEnum drawText(const PointF& a0, const Str& a1) { return Function1; } + FunctionEnum drawText(const Rect& a0, int a1, const Str& a2) { return Function2; } + FunctionEnum drawText(const RectF& a0, int a1, const Str& a2) { return Function3; } + FunctionEnum drawText(const RectF& a0, const Str& a1, const Echo& a2 = Echo()) { return Function4; } + FunctionEnum drawText(int a0, int a1, const Str& a2) { return Function5; } + FunctionEnum drawText(int a0, int a1, int a2, int a3, int a4, const Str& a5) { return Function6; } + + // A variant of the one similar to QPainter::drawText(...) + FunctionEnum drawText2(const Point& a0, const Str& a1) { return Function0; } + FunctionEnum drawText2(const PointF& a0, const Str& a1) { return Function1; } + FunctionEnum drawText2(const Rect& a0, int a1, const Str& a2) { return Function2; } + FunctionEnum drawText2(const RectF& a0, int a1, const Str& a2) { return Function3; } + FunctionEnum drawText2(const RectF& a0, const Str& a1, const Echo& a2 = Echo()) { return Function4; } + FunctionEnum drawText2(int a0, int a1, const Str& a2) { return Function5; } + FunctionEnum drawText2(int a0, int a1, int a2, int a3 = 0, int a4 = 0, const Str& a5 = Str()) { return Function6; } + + // A simpler variant of the one similar to QPainter::drawText(...) + FunctionEnum drawText3(const Str& a0, const Str& a1, const Str& a2) { return Function0; } + FunctionEnum drawText3(int a0, int a1, int a2, int a3, int a4) { return Function1; } + + // Another simpler variant of the one similar to QPainter::drawText(...) + FunctionEnum drawText4(int a0, int a1, int a2) { return Function0; } + FunctionEnum drawText4(int a0, int a1, int a2, int a3, int a4) { return Function1; } + + FunctionEnum acceptSequence() { return Function0; } + FunctionEnum acceptSequence(int a0, int a1) { return Function1; } + FunctionEnum acceptSequence(const Str& a0, ParamEnum a1 = Param0) { return Function2; } + FunctionEnum acceptSequence(const Size& a0) { return Function3; } + // The type must be changed to PySequence. + FunctionEnum acceptSequence(const char* const a0[]) { return Function4; } + FunctionEnum acceptSequence(void* a0) { return Function5; } +}; + +class LIBSAMPLE_API Overload2 : public Overload +{ +public: + // test bug#616, public and private method differ only by const + void doNothingInPublic() const {} + void doNothingInPublic(int) {} + virtual void doNothingInPublic3() const {} + void doNothingInPublic3(int) const {} +protected: + void doNothingInPublic2() const {} + void doNothingInPublic2(int) {} +private: + void doNothingInPublic() {} + void doNothingInPublic2() {} + void doNothingInPublic3() {} +}; + +#endif // OVERLOAD_H + diff --git a/sources/shiboken2/tests/libsample/overloadsort.cpp b/sources/shiboken2/tests/libsample/overloadsort.cpp new file mode 100644 index 0000000..bad0cdf --- /dev/null +++ b/sources/shiboken2/tests/libsample/overloadsort.cpp @@ -0,0 +1,30 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "overloadsort.h" + diff --git a/sources/shiboken2/tests/libsample/overloadsort.h b/sources/shiboken2/tests/libsample/overloadsort.h new file mode 100644 index 0000000..024f229 --- /dev/null +++ b/sources/shiboken2/tests/libsample/overloadsort.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OVERLOADSORT_H +#define OVERLOADSORT_H + +#include "libsamplemacros.h" + +#include + +class ImplicitTarget +{ +public: + ImplicitTarget(){} +}; + +class ImplicitBase +{ +public: + ImplicitBase(){} + ImplicitBase(const ImplicitTarget &b){} +}; + +class SortedOverload +{ +public: + + inline const char *overload(int x) { + return "int"; + } + + inline const char *overload(double x) { + return "double"; + } + + inline const char *overload(ImplicitBase x) { + return "ImplicitBase"; + } + + inline const char *overload(ImplicitTarget x) { + return "ImplicitTarget"; + } + + inline const char *overload(const std::list &x) { + return "list(ImplicitBase)"; + } + + inline int implicit_overload(const ImplicitBase &x) { + return 1; + } + + inline const char *overloadDeep(int x, ImplicitBase &y) { + return "ImplicitBase"; + } + + + inline const char* pyObjOverload(int, int) { return "int,int"; } + inline const char* pyObjOverload(unsigned char*, int) { return "PyObject,int"; } + +}; + +#endif // OVERLOADSORT_H + diff --git a/sources/shiboken2/tests/libsample/pairuser.cpp b/sources/shiboken2/tests/libsample/pairuser.cpp new file mode 100644 index 0000000..6619884 --- /dev/null +++ b/sources/shiboken2/tests/libsample/pairuser.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "pairuser.h" + +using namespace std; + +std::pair +PairUser::callCreatePair() +{ + return createPair(); +} + +std::pair +PairUser::createPair() +{ + return std::pair(10, 20); +} + +std::pair +PairUser::createComplexPair(Complex cpx0, Complex cpx1) +{ + return std::pair(cpx0, cpx1); +} + +double +PairUser::sumPair(std::pair pair) +{ + return ((double) pair.first) + pair.second; +} + diff --git a/sources/shiboken2/tests/libsample/pairuser.h b/sources/shiboken2/tests/libsample/pairuser.h new file mode 100644 index 0000000..37219f7 --- /dev/null +++ b/sources/shiboken2/tests/libsample/pairuser.h @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PAIRUSER_H +#define PAIRUSER_H + +#include +#include "complex.h" + +#include "libsamplemacros.h" + +class LIBSAMPLE_API PairUser +{ +public: + PairUser() {} + virtual ~PairUser() {} + + virtual std::pair createPair(); + std::pair callCreatePair(); + static std::pair createComplexPair(Complex cpx0, Complex cpx1); + double sumPair(std::pair pair); + + inline void setPair(std::pair pair) { m_pair = pair; } + inline std::pair getPair() { return m_pair; } + +private: + std::pair m_pair; +}; +#endif // PAIRUSER_H + diff --git a/sources/shiboken2/tests/libsample/pen.cpp b/sources/shiboken2/tests/libsample/pen.cpp new file mode 100644 index 0000000..d30071f --- /dev/null +++ b/sources/shiboken2/tests/libsample/pen.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "pen.h" + +Color::Color() : m_null(true) +{ +} + +Color::Color(SampleNamespace::InValue arg) : m_null(false) +{ +} + +Color::Color(unsigned int arg) : m_null(false) +{ +} + +bool Color::isNull() const +{ + return m_null; +} + +Pen::Pen() : m_ctor(EmptyCtor) +{ +} + +Pen::Pen(SampleNamespace::Option option) : m_ctor(EnumCtor) +{ +} + +Pen::Pen(const Color& color) : m_ctor(ColorCtor) +{ +} + +Pen::Pen(const Pen& pen) : m_ctor(CopyCtor) +{ +} + +int Pen::ctorType() +{ + return m_ctor; +} diff --git a/sources/shiboken2/tests/libsample/pen.h b/sources/shiboken2/tests/libsample/pen.h new file mode 100644 index 0000000..ca07919 --- /dev/null +++ b/sources/shiboken2/tests/libsample/pen.h @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PEN_H +#define PEN_H + +#include "libsamplemacros.h" +#include "samplenamespace.h" + +class LIBSAMPLE_API Color +{ +public: + Color(); + Color(SampleNamespace::InValue arg); + Color(unsigned int arg); + + bool isNull() const; +private: + bool m_null; +}; + +class LIBSAMPLE_API Pen +{ +public: + enum { EmptyCtor, EnumCtor, ColorCtor, CopyCtor }; + + Pen(); + Pen(SampleNamespace::Option option); + Pen(const Color& color); + Pen(const Pen& pen); + + int ctorType(); +private: + int m_ctor; +}; + +#endif diff --git a/sources/shiboken2/tests/libsample/photon.cpp b/sources/shiboken2/tests/libsample/photon.cpp new file mode 100644 index 0000000..e61fd59 --- /dev/null +++ b/sources/shiboken2/tests/libsample/photon.cpp @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "photon.h" + +namespace Photon +{ +const ClassType Base::staticType; +int callCalculateForValueDuplicatorPointer(ValueDuplicator* value) +{ + return value->calculate(); +} +int callCalculateForValueDuplicatorReference(ValueDuplicator& value) +{ + return value.calculate(); +} +int countValueIdentities(const std::list& values) +{ + return values.size(); +} +int countValueDuplicators(const std::list >& values) +{ + return values.size(); +} +} // namespace Photon diff --git a/sources/shiboken2/tests/libsample/photon.h b/sources/shiboken2/tests/libsample/photon.h new file mode 100644 index 0000000..2a32d51 --- /dev/null +++ b/sources/shiboken2/tests/libsample/photon.h @@ -0,0 +1,140 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PHOTON_H +#define PHOTON_H + +#include +#include "libsamplemacros.h" + +// This namespace and classes simulate +// situations found in Qt's phonon module. + +namespace Photon +{ + +enum ClassType { + BaseType = 0, + IdentityType = 1, + DuplicatorType = 2 +}; + +class LIBSAMPLE_API Base +{ +public: + explicit Base(int value) : m_value(value) {} + virtual ~Base() {} + inline void setValue(int value) { m_value = value; } + inline int value() const { return m_value; } + + template bool isType() { return type() == T::staticType; } + bool isType(ClassType t) { return type() == t; } + + virtual ClassType type() const { return BaseType; }; + static const ClassType staticType = BaseType; + +protected: + int m_value; +}; + +template +class LIBSAMPLE_API TemplateBase : public Base +{ +public: + explicit TemplateBase(int value) : Base(value) {} + inline int multiplicator() const { return (int)CLASS_TYPE; } + inline int calculate() const { return m_value * ((int)CLASS_TYPE); } + static inline ClassType classType() { return CLASS_TYPE; } + + inline int sumValueUsingPointer(TemplateBase* other) const { return m_value + other->m_value; } + inline int sumValueUsingReference(TemplateBase& other) const { return m_value + other.m_value; } + + inline std::list > getListOfThisTemplateBase() + { + std::list > objs; + objs.push_back(*this); + objs.push_back(*this); + return objs; + } + + static inline TemplateBase* passPointerThrough(TemplateBase* obj) { return obj; } + + ClassType type() const override { return CLASS_TYPE; } + static const ClassType staticType = CLASS_TYPE; +}; + +#if defined _WIN32 || defined __CYGWIN__ +template class LIBSAMPLE_API TemplateBase; +template class LIBSAMPLE_API TemplateBase; +#endif + +typedef TemplateBase ValueIdentity; +typedef TemplateBase ValueDuplicator; + +LIBSAMPLE_API int callCalculateForValueDuplicatorPointer(ValueDuplicator* value); +LIBSAMPLE_API int callCalculateForValueDuplicatorReference(ValueDuplicator& value); +LIBSAMPLE_API int countValueIdentities(const std::list& values); +LIBSAMPLE_API int countValueDuplicators(const std::list >& values); + +// This simulates an internal error (SEGV) caused by 'noexcept' in +// boost::intrusive_ptr before support for 'noexcept' was added. The ENTIRE +// code below is needed to trigger the exception; it isn't seen with just a +// 'noexcept' following a declaration. +// +// NOTE: For reasons that should be fairly obvious, this test unfortunately can +// only be "run" when building in C++11 mode. +#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900) +# define PHOTON_NOEXCEPT noexcept +#else +# define PHOTON_NOEXCEPT +#endif +class Pointer +{ +public: + Pointer() PHOTON_NOEXCEPT : px(0) {} + Pointer(int* p) : px(p) {} + + void reset() PHOTON_NOEXCEPT { Pointer().swap(*this); } + + int* get() const PHOTON_NOEXCEPT { return px; } + int& operator*() const { return *px; } + + void swap(Pointer& rhs) PHOTON_NOEXCEPT + { + int* tmp = px; + px = rhs.px; + rhs.px = tmp; + } + +private: + int* px; +}; + +} // namespace Photon + +#endif // PHOTON_H diff --git a/sources/shiboken2/tests/libsample/point.cpp b/sources/shiboken2/tests/libsample/point.cpp new file mode 100644 index 0000000..75e015e --- /dev/null +++ b/sources/shiboken2/tests/libsample/point.cpp @@ -0,0 +1,155 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "point.h" + +using namespace std; + +Point::Point(int x, int y) : m_x(x), m_y(y) +{ +} + +Point::Point(double x, double y) : m_x(x), m_y(y) +{ +} + +void +Point::midpoint(const Point& other, Point* midpoint) const +{ + if (!midpoint) + return; + midpoint->setX((m_x + other.m_x) / 2.0); + midpoint->setY((m_y + other.m_y) / 2.0); +} + +Point* +Point::copy() const +{ + Point* pt = new Point(); + pt->m_x = m_x; + pt->m_y = m_y; + return pt; +} + +void +Point::show() +{ + cout << "(x: " << m_x << ", y: " << m_y << ")"; +} + +bool +Point::operator==(const Point& other) +{ + return m_x == other.m_x && m_y == other.m_y; +} + +Point +Point::operator+(const Point& other) +{ + return Point(m_x + other.m_x, m_y + other.m_y); +} + +Point +Point::operator-(const Point& other) +{ + return Point(m_x - other.m_x, m_y - other.m_y); +} + +Point& +Point::operator+=(Point &other) +{ + m_x += other.m_x; + m_y += other.m_y; + return *this; +} + +Point& +Point::operator-=(Point &other) +{ + m_x -= other.m_x; + m_y -= other.m_y; + return *this; +} + +Point +operator*(const Point& pt, double mult) +{ + return Point(pt.m_x * mult, pt.m_y * mult); +} + +Point +operator*(const Point& pt, int mult) +{ + return Point(((int) pt.m_x) * mult, ((int) pt.m_y) * mult); +} + +Point +operator*(double mult, const Point& pt) +{ + return Point(pt.m_x * mult, pt.m_y * mult); +} + +Point +operator*(int mult, const Point& pt) +{ + return Point(((int) pt.m_x) * mult, ((int) pt.m_y) * mult); +} + +Point +operator-(const Point& pt) +{ + return Point(-pt.m_x, -pt.m_y); +} + +bool +operator!(const Point& pt) +{ + return (pt.m_x == 0.0 && pt.m_y == 0.0); +} + +Point +Point::operator/(int operand) +{ + return Point(m_x/operand, m_y/operand); +} + +Complex +transmutePointIntoComplex(const Point& point) +{ + Complex cpx(point.x(), point.y()); + return cpx; +} + +Point +transmuteComplexIntoPoint(const Complex& cpx) +{ + Point pt(cpx.real(), cpx.imag()); + return pt; +} + diff --git a/sources/shiboken2/tests/libsample/point.h b/sources/shiboken2/tests/libsample/point.h new file mode 100644 index 0000000..579bcd5 --- /dev/null +++ b/sources/shiboken2/tests/libsample/point.h @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef POINT_H +#define POINT_H + +#include "complex.h" +#include + +#include "libsamplemacros.h" + +class LIBSAMPLE_API Point +{ +public: + Point(int x = 0, int y = 0); + Point(double x, double y); + ~Point() {} + + inline double x() const { return m_x; } + inline double y() const { return m_y; } + + inline void setX(double x) { m_x = x; } + inline void setY(double y) { m_y = y; } + inline void setXAsUint(unsigned int x) { m_x = x; } + inline void setYAsUint(unsigned int y) { m_y = y; } + + // This method could simply return the midpoint, + // but the interesting part of the test is to set the + // result in the pointer argument. + void midpoint(const Point& other, Point* midpoint) const; + + Point* copy() const; + + inline const Point& getConstReferenceToSelf() const { return *this; } + inline const Point* getSelf() const { return this; } + + // The != operator is not implemented for the purpose of testing + // for the absense of the __ne__ method in the Python binding. + bool operator==(const Point& other); + + Point operator+(const Point& other); + Point operator-(const Point& other); + Point operator/(int operand); + + friend LIBSAMPLE_API Point operator*(const Point& pt, double mult); + friend LIBSAMPLE_API Point operator*(const Point& pt, int mult); + friend LIBSAMPLE_API Point operator*(double mult, const Point& pt); + friend LIBSAMPLE_API Point operator*(int mult, const Point& pt); + friend LIBSAMPLE_API Point operator-(const Point& pt); + friend LIBSAMPLE_API bool operator!(const Point& pt); + + Point& operator+=(Point &other); + Point& operator-=(Point &other); + + void show(); + +private: + double m_x; + double m_y; +}; + +LIBSAMPLE_API Point operator*(const Point& pt, double mult); +LIBSAMPLE_API Point operator*(const Point& pt, int mult); +LIBSAMPLE_API Point operator*(double mult, const Point& pt); +LIBSAMPLE_API Point operator*(int mult, const Point& pt); +LIBSAMPLE_API Point operator-(const Point& pt); +LIBSAMPLE_API bool operator!(const Point& pt); + +LIBSAMPLE_API Complex transmutePointIntoComplex(const Point& point); +LIBSAMPLE_API Point transmuteComplexIntoPoint(const Complex& cpx); + +LIBSAMPLE_API Point operator*(const Point& pt, double multiplier); + +#endif // POINT_H diff --git a/sources/shiboken2/tests/libsample/pointerholder.h b/sources/shiboken2/tests/libsample/pointerholder.h new file mode 100644 index 0000000..b872ceb --- /dev/null +++ b/sources/shiboken2/tests/libsample/pointerholder.h @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef POINTERHOLDER_H +#define POINTERHOLDER_H + +#include "libsamplemacros.h" + +class PointerHolder +{ +public: + explicit PointerHolder(void* ptr) : m_pointer(ptr) {} + ~PointerHolder() {} + inline void* pointer() const { return m_pointer; } +private: + void* m_pointer; +}; + +#endif // POINTERHOLDER_H + diff --git a/sources/shiboken2/tests/libsample/pointf.cpp b/sources/shiboken2/tests/libsample/pointf.cpp new file mode 100644 index 0000000..fadf3e5 --- /dev/null +++ b/sources/shiboken2/tests/libsample/pointf.cpp @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "pointf.h" + +using namespace std; + +PointF::PointF(const Point& point) : m_x(point.x()), m_y(point.y()) +{ +} + +PointF::PointF(double x, double y) : m_x(x), m_y(y) +{ +} + +void +PointF::midpoint(const PointF& other, PointF* midpoint) const +{ + if (!midpoint) + return; + midpoint->setX((m_x + other.m_x) / 2.0); + midpoint->setY((m_y + other.m_y) / 2.0); +} + +void +PointF::show() +{ + cout << "(x: " << m_x << ", y: " << m_y << ")"; +} + +bool +PointF::operator==(const PointF& other) +{ + return m_x == other.m_x && m_y == other.m_y; +} + +PointF +PointF::operator+(const PointF& other) +{ + return PointF(m_x + other.m_x, m_y + other.m_y); +} + +PointF +PointF::operator-(const PointF& other) +{ + return PointF(m_x - other.m_x, m_y - other.m_y); +} + +PointF& +PointF::operator+=(PointF &other) +{ + m_x += other.m_x; + m_y += other.m_y; + return *this; +} + +PointF& +PointF::operator-=(PointF &other) +{ + m_x -= other.m_x; + m_y -= other.m_y; + return *this; +} + +PointF +operator*(const PointF& pt, double mult) +{ + return PointF(pt.m_x * mult, pt.m_y * mult); +} + +PointF +operator*(const PointF& pt, int mult) +{ + return PointF(((int) pt.m_x) * mult, ((int) pt.m_y) * mult); +} + +PointF +operator*(double mult, const PointF& pt) +{ + return PointF(pt.m_x * mult, pt.m_y * mult); +} + +PointF +operator*(int mult, const PointF& pt) +{ + return PointF(((int) pt.m_x) * mult, ((int) pt.m_y) * mult); +} + +PointF +operator-(const PointF& pt) +{ + return PointF(-pt.m_x, -pt.m_y); +} + +bool +operator!(const PointF& pt) +{ + return (pt.m_x == 0.0 && pt.m_y == 0.0); +} + diff --git a/sources/shiboken2/tests/libsample/pointf.h b/sources/shiboken2/tests/libsample/pointf.h new file mode 100644 index 0000000..f90125c --- /dev/null +++ b/sources/shiboken2/tests/libsample/pointf.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef POINTF_H +#define POINTF_H + +#include "point.h" +#include + +#include "libsamplemacros.h" + +class LIBSAMPLE_API PointF +{ +public: + PointF(const Point& point); + PointF(double x = 0.0, double y = 0.0); + ~PointF() {} + + inline double x() const { return m_x; } + inline double y() const { return m_y; } + + inline void setX(double x) { m_x = x; } + inline void setY(double y) { m_y = y; } + + // This method could simply return the midpoint, + // but the interesting part of the test is to set the + // result in the pointer argument. + void midpoint(const PointF& other, PointF* midpoint) const; + + // The != operator is not implemented for the purpose of testing + // for the absence of the __ne__ method in the Python binding. + bool operator==(const PointF& other); + + PointF operator+(const PointF& other); + PointF operator-(const PointF& other); + + friend LIBSAMPLE_API PointF operator*(const PointF& pt, double mult); + friend LIBSAMPLE_API PointF operator*(const PointF& pt, int mult); + friend LIBSAMPLE_API PointF operator*(double mult, const PointF& pt); + friend LIBSAMPLE_API PointF operator*(int mult, const PointF& pt); + friend LIBSAMPLE_API PointF operator-(const PointF& pt); + friend LIBSAMPLE_API bool operator!(const PointF& pt); + + PointF& operator+=(PointF &other); + PointF& operator-=(PointF &other); + + void show(); + +private: + double m_x; + double m_y; +}; + +LIBSAMPLE_API PointF operator*(const PointF& pt, double mult); +LIBSAMPLE_API PointF operator*(const PointF& pt, int mult); +LIBSAMPLE_API PointF operator*(double mult, const PointF& pt); +LIBSAMPLE_API PointF operator*(int mult, const PointF& pt); +LIBSAMPLE_API PointF operator-(const PointF& pt); +LIBSAMPLE_API bool operator!(const PointF& pt); + +LIBSAMPLE_API PointF operator*(const PointF& pt, double multiplier); + +#endif // POINTF_H diff --git a/sources/shiboken2/tests/libsample/polygon.cpp b/sources/shiboken2/tests/libsample/polygon.cpp new file mode 100644 index 0000000..fc0526d --- /dev/null +++ b/sources/shiboken2/tests/libsample/polygon.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "polygon.h" + +using namespace std; + +Polygon::Polygon(double x, double y) +{ + m_points.push_back(Point(x, y)); +} + +Polygon::Polygon(Point point) +{ + m_points.push_back(point); +} + +Polygon::Polygon(PointList points) +{ + m_points = points; +} + +void +Polygon::addPoint(Point point) +{ + m_points.push_back(point); +} + +Polygon +Polygon::doublePolygonScale(Polygon polygon) +{ + Polygon result; + for(PointList::const_iterator piter = result.points().begin(); piter != result.points().end(); piter++) + result.addPoint((*piter) * 2.0); + return result; +} + +void +Polygon::stealOwnershipFromPython(Point* point) +{ + delete point; +} + +void +Polygon::stealOwnershipFromPython(Polygon* polygon) +{ + delete polygon; +} + diff --git a/sources/shiboken2/tests/libsample/polygon.h b/sources/shiboken2/tests/libsample/polygon.h new file mode 100644 index 0000000..3eafa30 --- /dev/null +++ b/sources/shiboken2/tests/libsample/polygon.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef POLYGON_H +#define POLYGON_H + +#include +#include "point.h" + +#include "libsamplemacros.h" + +class LIBSAMPLE_API Polygon +{ +public: + typedef std::list PointList; + + Polygon() {} + Polygon(double x, double y); + Polygon(Point point); + Polygon(PointList points); + ~Polygon() {} + + void addPoint(Point point); + + inline const PointList& points() const { return m_points; } + + // This method intentionally receives and returns copies of a Polygon object. + static Polygon doublePolygonScale(Polygon polygon); + + // This method invalidates the argument to be used for Polygon(Point) implicit conversion. + static void stealOwnershipFromPython(Point* point); + + // This method invalidates the argument to be used in a call to doublePolygonScale(Polygon). + static void stealOwnershipFromPython(Polygon* polygon); + +private: + PointList m_points; +}; + +#endif // POLYGON_H + diff --git a/sources/shiboken2/tests/libsample/privatector.h b/sources/shiboken2/tests/libsample/privatector.h new file mode 100644 index 0000000..f168fda --- /dev/null +++ b/sources/shiboken2/tests/libsample/privatector.h @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PRIVATECTOR_H +#define PRIVATECTOR_H + +#include "libsamplemacros.h" + +class PrivateCtor +{ +public: + inline static PrivateCtor* instance() + { + static PrivateCtor self; + self.m_instanciations++; + return &self; + } + + inline int instanceCalls() + { + return m_instanciations; + } + +private: + int m_instanciations; + + PrivateCtor() : m_instanciations(0) {} +}; + +#endif diff --git a/sources/shiboken2/tests/libsample/privatedtor.h b/sources/shiboken2/tests/libsample/privatedtor.h new file mode 100644 index 0000000..64b8652 --- /dev/null +++ b/sources/shiboken2/tests/libsample/privatedtor.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PRIVATEDTOR_H +#define PRIVATEDTOR_H + +#include "libsamplemacros.h" + +class PrivateDtor +{ +public: + inline static PrivateDtor* instance() + { + static PrivateDtor self; + self.m_instanciations++; + return &self; + } + + inline int instanceCalls() + { + return m_instanciations; + } + +protected: + inline int protectedInstanceCalls() { return m_instanciations; } + +private: + int m_instanciations; + + PrivateDtor() : m_instanciations(0) {} + PrivateDtor(const PrivateDtor&) {} + ~PrivateDtor() {} +}; + +#endif diff --git a/sources/shiboken2/tests/libsample/protected.cpp b/sources/shiboken2/tests/libsample/protected.cpp new file mode 100644 index 0000000..b0f3f1c --- /dev/null +++ b/sources/shiboken2/tests/libsample/protected.cpp @@ -0,0 +1,32 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "protected.h" + +int ProtectedVirtualDestructor::dtor_called = 0; + diff --git a/sources/shiboken2/tests/libsample/protected.h b/sources/shiboken2/tests/libsample/protected.h new file mode 100644 index 0000000..6cdc66e --- /dev/null +++ b/sources/shiboken2/tests/libsample/protected.h @@ -0,0 +1,151 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef PROTECTED_H +#define PROTECTED_H + +#include "libsamplemacros.h" +#include "objecttype.h" +#include "point.h" +#include +#include + +class LIBSAMPLE_API ProtectedNonPolymorphic +{ +public: + explicit ProtectedNonPolymorphic(const char *name) : m_name(name) {} + ~ProtectedNonPolymorphic() {} + + inline const char* publicName() { return m_name.c_str(); } + + inline static ProtectedNonPolymorphic* create() { return new ProtectedNonPolymorphic("created"); } + +protected: + inline const char* protectedName() { return m_name.c_str(); } + inline int protectedSum(int a0, int a1) { return a0 + a1; } + inline int modifiedProtectedSum(int a0, int a1) { return a0 + a1; } + inline static const char* protectedStatic() { return "protectedStatic"; } + inline const char* dataTypeName(void *data = 0) const { return "pointer"; } + inline const char* dataTypeName(int data) const { return "integer"; } + +private: + std::string m_name; +}; + +class LIBSAMPLE_API ProtectedPolymorphic +{ +public: + explicit ProtectedPolymorphic(const char *name) : m_name(name) {} + virtual ~ProtectedPolymorphic() {} + + inline static ProtectedPolymorphic* create() { return new ProtectedPolymorphic("created"); } + inline const char* publicName() { return m_name.c_str(); } + inline const char* callProtectedName() { return protectedName(); } + +protected: + virtual const char* protectedName() { return m_name.c_str(); } + +private: + std::string m_name; +}; + +class LIBSAMPLE_API ProtectedPolymorphicDaughter : public ProtectedPolymorphic +{ +public: + explicit ProtectedPolymorphicDaughter(const char *name) : ProtectedPolymorphic(name) {} + inline static ProtectedPolymorphicDaughter* create() { return new ProtectedPolymorphicDaughter("created"); } +}; + +class LIBSAMPLE_API ProtectedPolymorphicGrandDaughter: public ProtectedPolymorphicDaughter +{ +public: + explicit ProtectedPolymorphicGrandDaughter(const char *name) : ProtectedPolymorphicDaughter(name) {} + inline static ProtectedPolymorphicGrandDaughter* create() { return new ProtectedPolymorphicGrandDaughter("created"); } +}; + +class LIBSAMPLE_API ProtectedVirtualDestructor +{ +public: + ProtectedVirtualDestructor() {} + inline static ProtectedVirtualDestructor* create() { return new ProtectedVirtualDestructor(); } + inline static int dtorCalled() { return dtor_called; } + inline static void resetDtorCounter() { dtor_called = 0; } +protected: + virtual ~ProtectedVirtualDestructor() { dtor_called++; } +private: + static int dtor_called; +}; + +class LIBSAMPLE_API ProtectedEnumClass +{ +public: + ProtectedEnumClass() {} + virtual ~ProtectedEnumClass() {} + enum PublicEnum { + PublicItem0, + PublicItem1 + }; +protected: + enum ProtectedEnum { + ProtectedItem0, + ProtectedItem1 + }; + ProtectedEnum callProtectedEnumMethod(ProtectedEnum in) { return protectedEnumMethod(in); } + inline PublicEnum callPublicEnumMethod(PublicEnum in) { return publicEnumMethod(in); } + + virtual ProtectedEnum protectedEnumMethod(ProtectedEnum in) { return in; } + virtual PublicEnum publicEnumMethod(PublicEnum in) { return in; } +}; + + +class LIBSAMPLE_API ProtectedProperty +{ +public: + ProtectedProperty() + : protectedValueTypeProperty(Point(0, 0)), + protectedProperty(0), + protectedEnumProperty(Event::NO_EVENT), + protectedValueTypePointerProperty(0), + protectedObjectTypeProperty(0) + {} +protected: + // This is deliberately the first member to test wrapper registration + // for value type members sharing the same memory address. + Point protectedValueTypeProperty; + int protectedProperty; + std::list protectedContainerProperty; + Event::EventType protectedEnumProperty; + Point* protectedValueTypePointerProperty; + ObjectType* protectedObjectTypeProperty; +}; + +LIBSAMPLE_API inline ProtectedProperty* createProtectedProperty() { + return new ProtectedProperty; +} + +#endif // PROTECTED_H diff --git a/sources/shiboken2/tests/libsample/rect.h b/sources/shiboken2/tests/libsample/rect.h new file mode 100644 index 0000000..1897a8d --- /dev/null +++ b/sources/shiboken2/tests/libsample/rect.h @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef RECT_H +#define RECT_H + +#include "libsamplemacros.h" + +class LIBSAMPLE_API Rect +{ +public: + Rect() + { + m_left = m_top = 0; + m_right = m_bottom = -1; + } + Rect(int left, int top, int right, int bottom) + : m_left(left), m_top(top), m_right(right), m_bottom(bottom) { } + ~Rect() {} + inline int left() const { return m_left; } + inline int top() const { return m_top; } + inline int right() const { return m_right; } + inline int bottom() const { return m_bottom; } +private: + int m_left; + int m_top; + int m_right; + int m_bottom; +}; + +class LIBSAMPLE_API RectF +{ +public: + RectF() + { + m_left = m_top = 0; + m_right = m_bottom = -1; + } + RectF(int left, int top, int right, int bottom) + : m_left(left), m_top(top), m_right(right), m_bottom(bottom) { } + RectF(const Rect& other) + { + m_left = other.left(); + m_top = other.top(); + m_right = other.right(); + m_bottom = other.bottom(); + } + ~RectF() {} + inline double left() const { return m_left; } + inline double top() const { return m_top; } + inline double right() const { return m_right; } + inline double bottom() const { return m_bottom; } +private: + double m_left; + double m_top; + double m_right; + double m_bottom; +}; + +#endif // RECT_H + diff --git a/sources/shiboken2/tests/libsample/reference.cpp b/sources/shiboken2/tests/libsample/reference.cpp new file mode 100644 index 0000000..37ce1a5 --- /dev/null +++ b/sources/shiboken2/tests/libsample/reference.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "reference.h" + +using namespace std; + +void +Reference::show() const +{ + cout << "Reference.objId: " << m_objId << ", address: " << this; +} + +int +Reference::usesReferenceVirtual(Reference& r, int inc) +{ + return r.m_objId + inc; +} + +int +Reference::usesConstReferenceVirtual(const Reference& r, int inc) +{ + return r.m_objId + inc; +} + +int +Reference::callUsesReferenceVirtual(Reference& r, int inc) +{ + return usesReferenceVirtual(r, inc); +} + +int +Reference::callUsesConstReferenceVirtual(const Reference& r, int inc) +{ + return usesConstReferenceVirtual(r, inc); +} + +void +Reference::alterReferenceIdVirtual(Reference& r) +{ + r.setObjId(r.objId() * Reference::multiplier()); +} + +void +Reference::callAlterReferenceIdVirtual(Reference& r) +{ + alterReferenceIdVirtual(r); +} + +ObjTypeReference::~ObjTypeReference() +{ +} diff --git a/sources/shiboken2/tests/libsample/reference.h b/sources/shiboken2/tests/libsample/reference.h new file mode 100644 index 0000000..2c0498c --- /dev/null +++ b/sources/shiboken2/tests/libsample/reference.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef REFERENCE_H +#define REFERENCE_H + +#include "libsamplemacros.h" + +class LIBSAMPLE_API Reference +{ +public: + explicit Reference(int objId = -1) + : m_objId(objId) {} + virtual ~Reference() {} + + inline int objId() { return m_objId; } + inline void setObjId(int objId) { m_objId = objId; } + + inline static int usesReference(Reference& r) { return r.m_objId; } + inline static int usesConstReference(const Reference& r) { return r.m_objId; } + + virtual int usesReferenceVirtual(Reference& r, int inc); + virtual int usesConstReferenceVirtual(const Reference& r, int inc); + + int callUsesReferenceVirtual(Reference& r, int inc); + int callUsesConstReferenceVirtual(const Reference& r, int inc); + + virtual void alterReferenceIdVirtual(Reference& r); + void callAlterReferenceIdVirtual(Reference& r); + + void show() const; + + inline static int multiplier() { return 10; } + + virtual Reference& returnMyFirstArg(Reference& ref) { return ref; } + virtual Reference& returnMySecondArg(int a, Reference& ref) { return ref; } + + // nonsense operator to test if Shiboken is ignoring dereference operators. + int operator*() { return m_objId; } +private: + int m_objId; +}; + +class LIBSAMPLE_API ObjTypeReference +{ +public: + ObjTypeReference() {} + ObjTypeReference(const ObjTypeReference&) {} + virtual ~ObjTypeReference(); + virtual ObjTypeReference& returnMyFirstArg(ObjTypeReference& ref) { return ref; } + virtual ObjTypeReference& returnMySecondArg(int a, ObjTypeReference& ref) { return ref; } + virtual ObjTypeReference& justAPureVirtualFunc(ObjTypeReference& ref) = 0; +}; + +#endif // REFERENCE_H + diff --git a/sources/shiboken2/tests/libsample/removednamespaces.h b/sources/shiboken2/tests/libsample/removednamespaces.h new file mode 100644 index 0000000..1de028d --- /dev/null +++ b/sources/shiboken2/tests/libsample/removednamespaces.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef REMOVEDNAMESPACE_H +#define REMOVEDNAMESPACE_H + +#include "libsamplemacros.h" + +namespace RemovedNamespace1 +{ + +enum RemovedNamespace1_Enum { + RemovedNamespace1_Enum_Value0 +}; + +enum { + RemovedNamespace1_AnonymousEnum_Value0 +}; + +namespace RemovedNamespace2 { + enum RemovedNamespace2_Enum { + RemovedNamespace2_Enum_Value0 + }; +} + +} + +namespace UnremovedNamespace +{ +namespace RemovedNamespace3 +{ + enum RemovedNamespace3_Enum { + RemovedNamespace3_Enum_Value0 + }; + + enum { + RemovedNamespace3_AnonymousEnum_Value0 + }; +} +} + +#endif // REMOVEDNAMESPACE_H + diff --git a/sources/shiboken2/tests/libsample/sample.cpp b/sources/shiboken2/tests/libsample/sample.cpp new file mode 100644 index 0000000..638413f --- /dev/null +++ b/sources/shiboken2/tests/libsample/sample.cpp @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "sample.h" + +namespace sample +{ + +sample::sample(int value) : m_value(value) +{ +} + +int sample::value() const +{ + return m_value; +} + +bool operator==(const sample&s1, const sample&s2) +{ + return s1.value() == s2.value(); +} +} // namespace sample diff --git a/sources/shiboken2/tests/libsample/sample.h b/sources/shiboken2/tests/libsample/sample.h new file mode 100644 index 0000000..fe76a53 --- /dev/null +++ b/sources/shiboken2/tests/libsample/sample.h @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SAMPLE_H +#define SAMPLE_H + +#include "libsamplemacros.h" + +// namespace with the same name of the current package to try to mess up with the generator +namespace sample +{ + // to increase the mess we add a class with the same name of the package/namespace + class LIBSAMPLE_API sample + { + public: + sample(int value = 0); + int value() const; + private: + int m_value; + }; + + // shiboken must not generate richcompare for namespace sample + LIBSAMPLE_API bool operator==(const sample&s1, const sample&s2); +} + +#endif diff --git a/sources/shiboken2/tests/libsample/samplenamespace.cpp b/sources/shiboken2/tests/libsample/samplenamespace.cpp new file mode 100644 index 0000000..ec3da3d --- /dev/null +++ b/sources/shiboken2/tests/libsample/samplenamespace.cpp @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include "samplenamespace.h" + +using namespace std; + +namespace SampleNamespace +{ + +OutValue +enumInEnumOut(InValue in) +{ + OutValue retval; + switch(in) { + case ZeroIn: + retval = ZeroOut; + break; + case OneIn: + retval = OneOut; + break; + case TwoIn: + retval = TwoOut; + break; + default: + retval = (OutValue) -1; + } + return retval; +} + +Option +enumArgumentWithDefaultValue(Option opt) +{ + return opt; +} + +int +getNumber(Option opt) +{ + int retval; + switch(opt) { + case RandomNumber: + retval = rand() % 100; + break; + case UnixTime: + retval = (int) time(0); + break; + default: + retval = 0; + } + return retval; +} + +void +doSomethingWithArray(const unsigned char* data, unsigned int size, const char* format) +{ + // This function does nothing in fact. + // It is here as a dummy copy of QPixmap.loadFromData method + // to check compilation issues, i.e. if it compiles, it's ok. +} + +int +enumItemAsDefaultValueToIntArgument(int value) +{ + return value; +} + +void +forceDecisorSideA(ObjectType* object) +{ +} + +void +forceDecisorSideA(const Point& pt, const Str& text, ObjectType* object) +{ +} + +void +forceDecisorSideB(int a, ObjectType* object) +{ +} + +void +forceDecisorSideB(int a, const Point& pt, const Str& text, ObjectType* object) +{ +} + +double +passReferenceToValueType(const Point& point, double multiplier) +{ + return (point.x() + point.y()) * multiplier; +} + +int +passReferenceToObjectType(const ObjectType& obj, int multiplier) +{ + return obj.objectName().size() * multiplier; +} + +} // namespace SampleNamespace diff --git a/sources/shiboken2/tests/libsample/samplenamespace.h b/sources/shiboken2/tests/libsample/samplenamespace.h new file mode 100644 index 0000000..37a445e --- /dev/null +++ b/sources/shiboken2/tests/libsample/samplenamespace.h @@ -0,0 +1,166 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SAMPLENAMESPACE_H +#define SAMPLENAMESPACE_H + +#include +#include "libsamplemacros.h" +#include "str.h" +#include "point.h" +#include "objecttype.h" + +// Anonymous global enum +enum { + AnonymousGlobalEnum_Value0, + AnonymousGlobalEnum_Value1 +}; + +// Invisible namespace +namespace Invisible +{ + +enum EnumOnNamespace { + Option1 = 1, + Option2 = 2, + Option3 = 3 +}; + +}; + +namespace SampleNamespace +{ + +enum Option { + None_, + RandomNumber, + UnixTime +}; + +enum InValue { + ZeroIn, + OneIn, + TwoIn +}; + +enum OutValue { + ZeroOut, + OneOut, + TwoOut +}; + +// Anonymous non-global enum. +// This counts as a class enum, since C++ namespaces +// are represented as classes in Python. +enum { + AnonymousClassEnum_Value0, + AnonymousClassEnum_Value1 +}; + +LIBSAMPLE_API OutValue enumInEnumOut(InValue in); + +LIBSAMPLE_API Option enumArgumentWithDefaultValue(Option opt = UnixTime); + +LIBSAMPLE_API int getNumber(Option opt); + +inline double powerOfTwo(double num) { + return num * num; +} + +LIBSAMPLE_API void doSomethingWithArray(const unsigned char* data, unsigned int size, const char* format = 0); + +LIBSAMPLE_API int enumItemAsDefaultValueToIntArgument(int value = ZeroIn); + +class SomeClass +{ +public: + class SomeInnerClass + { + public: + class OkThisIsRecursiveEnough + { + public: + virtual ~OkThisIsRecursiveEnough() {} + enum NiceEnum { + NiceValue1, NiceValue2 + }; + + enum class NiceEnumClass { + NiceClassValue1, NiceClassValue2 + }; + + inline int someMethod(SomeInnerClass*) { return 0; } + virtual OkThisIsRecursiveEnough* someVirtualMethod(OkThisIsRecursiveEnough* arg) { return arg; } + }; + protected: + enum ProtectedEnum { + ProtectedItem0, + ProtectedItem1 + }; + }; + struct SomeOtherInnerClass { + std::list someInnerClasses; + }; +protected: + enum ProtectedEnum { + ProtectedItem0, + ProtectedItem1 + }; +}; + +class DerivedFromNamespace : public SomeClass::SomeInnerClass::OkThisIsRecursiveEnough +{ +public: + // FIXME Uncomment this when the fix for MSVC is available + // only to cause namespace confusion +// enum SampleNamespace { +// }; + virtual OkThisIsRecursiveEnough* someVirtualMethod(OkThisIsRecursiveEnough* arg) { return arg; } + inline OkThisIsRecursiveEnough* methodReturningTypeFromParentScope() { return 0; } +}; + +// The combination of the following two overloaded methods could trigger a +// problematic behaviour on the overload decisor, if it isn't working properly. +LIBSAMPLE_API void forceDecisorSideA(ObjectType* object = 0); +LIBSAMPLE_API void forceDecisorSideA(const Point& pt, const Str& text, ObjectType* object = 0); + +// The combination of the following two overloaded methods could trigger a +// problematic behaviour on the overload decisor, if it isn't working properly. +// This is a variation of forceDecisorSideB. +LIBSAMPLE_API void forceDecisorSideB(int a, ObjectType* object = 0); +LIBSAMPLE_API void forceDecisorSideB(int a, const Point& pt, const Str& text, ObjectType* object = 0); + +// Add a new signature on type system with only a Point value as parameter. +LIBSAMPLE_API double passReferenceToValueType(const Point& point, double multiplier); +// Add a new signature on type system with only a ObjectType pointer as parameter. +LIBSAMPLE_API int passReferenceToObjectType(const ObjectType& obj, int multiplier); + +} // namespace SampleNamespace + +#endif // SAMPLENAMESPACE_H + diff --git a/sources/shiboken2/tests/libsample/sbkdate.cpp b/sources/shiboken2/tests/libsample/sbkdate.cpp new file mode 100644 index 0000000..8ba18af --- /dev/null +++ b/sources/shiboken2/tests/libsample/sbkdate.cpp @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "sbkdate.h" + +SbkDate::SbkDate(int d, int m, int y) : m_d(d), m_m(m), m_y(y) +{ +} + +int SbkDate::day() const +{ + return m_d; +} + +int SbkDate::month() const +{ + return m_m; +} + +int SbkDate::year() const +{ + return m_y; +} diff --git a/sources/shiboken2/tests/libsample/sbkdate.h b/sources/shiboken2/tests/libsample/sbkdate.h new file mode 100644 index 0000000..bbe3d3c --- /dev/null +++ b/sources/shiboken2/tests/libsample/sbkdate.h @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SBKDATE_H +#define SBKDATE_H + +#include "libsamplemacros.h" + +class LIBSAMPLE_API SbkDate +{ +public: + SbkDate(int d, int m, int y); + + int day() const; + int month() const; + int year() const; + +private: + int m_d; + int m_m; + int m_y; +}; + +#endif // SBKDATE_H + diff --git a/sources/shiboken2/tests/libsample/simplefile.cpp b/sources/shiboken2/tests/libsample/simplefile.cpp new file mode 100644 index 0000000..a47571a --- /dev/null +++ b/sources/shiboken2/tests/libsample/simplefile.cpp @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include "simplefile.h" + +class SimpleFile_p +{ +public: + SimpleFile_p(const char* filename) : m_descriptor(0), m_size(0) + { + m_filename = strdup(filename); + } + + ~SimpleFile_p() + { + free(m_filename); + } + + char* m_filename; + FILE* m_descriptor; + long m_size; +}; + +SimpleFile::SimpleFile(const char* filename) +{ + p = new SimpleFile_p(filename); +} + +SimpleFile::~SimpleFile() +{ + close(); + delete p; +} + +const char* SimpleFile::filename() +{ + return p->m_filename; +} + +long SimpleFile::size() +{ + return p->m_size; +} + +bool +SimpleFile::open() +{ + if ((p->m_descriptor = fopen(p->m_filename, "rb")) == 0) + return false; + + fseek(p->m_descriptor, 0, SEEK_END); + p->m_size = ftell(p->m_descriptor); + rewind(p->m_descriptor); + + return true; +} + +void +SimpleFile::close() +{ + if (p->m_descriptor) { + fclose(p->m_descriptor); + p->m_descriptor = 0; + } +} + +bool +SimpleFile::exists() const +{ + std::ifstream ifile(p->m_filename); + return !ifile.fail(); +} + +bool +SimpleFile::exists(const char* filename) +{ + std::ifstream ifile(filename); + return !ifile.fail(); +} + diff --git a/sources/shiboken2/tests/libsample/simplefile.h b/sources/shiboken2/tests/libsample/simplefile.h new file mode 100644 index 0000000..7a437a9 --- /dev/null +++ b/sources/shiboken2/tests/libsample/simplefile.h @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SIMPLEFILE_H +#define SIMPLEFILE_H + +#include "libsamplemacros.h" +#include + +class SimpleFile_p; + +class LIBSAMPLE_API SimpleFile +{ +public: + explicit SimpleFile(const char* filename); + ~SimpleFile(); + + const char* filename(); + long size(); + bool open(); + void close(); + + bool exists() const; + static bool exists(const char* filename); + +private: + SimpleFile_p *p; +}; + +#endif // SIMPLEFILE_H + diff --git a/sources/shiboken2/tests/libsample/size.cpp b/sources/shiboken2/tests/libsample/size.cpp new file mode 100644 index 0000000..4c19516 --- /dev/null +++ b/sources/shiboken2/tests/libsample/size.cpp @@ -0,0 +1,39 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "size.h" + +using namespace std; + +void +Size::show() const +{ + cout << "(width: " << m_width << ", height: " << m_height << ")"; +} + diff --git a/sources/shiboken2/tests/libsample/size.h b/sources/shiboken2/tests/libsample/size.h new file mode 100644 index 0000000..c720212 --- /dev/null +++ b/sources/shiboken2/tests/libsample/size.h @@ -0,0 +1,206 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SIZE_H +#define SIZE_H + +#include "libsamplemacros.h" + +class LIBSAMPLE_API Size +{ +public: + Size(double width = 0.0, double height = 0.0) : m_width(width), m_height(height) {} + ~Size() {} + + inline double width() { return m_width; } + inline void setWidth(double width) { m_width = width; } + inline double height() { return m_height; } + inline void setHeight(double height) { m_height = height; } + + inline double calculateArea() const { return m_width * m_height; } + + // Comparison Operators + inline bool operator==(const Size& other) + { + return m_width == other.m_width && m_height == other.m_height; + } + + inline bool operator<(const Size& other) + { + return calculateArea() < other.calculateArea(); + } + + inline bool operator>(const Size& other) + { + // On some x86 hardware and compiler combinations, floating point + // comparisons may fail due to a hardware bug. One workaround is to + // simplify comparison expressions by putting partial results in + // variables. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323#c109 + // for details. + double a = calculateArea(); + double b = other.calculateArea(); + return a > b; + } + + inline bool operator<=(const Size& other) + { + // See comments for operator>() + double a = calculateArea(); + double b = other.calculateArea(); + return a <= b; + } + + inline bool operator>=(const Size& other) + { + return calculateArea() >= other.calculateArea(); + } + + inline bool operator<(double area) { return calculateArea() < area; } + inline bool operator>(double area) { return calculateArea() > area; } + inline bool operator<=(double area) { return calculateArea() <= area; } + inline bool operator>=(double area) { return calculateArea() >= area; } + + // Arithmetic Operators + inline Size& operator+=(const Size& s) + { + m_width += s.m_width; + m_height += s.m_height; + return *this; + } + + inline Size& operator-=(const Size& s) + { + m_width -= s.m_width; + m_height -= s.m_height; + return *this; + } + + inline Size& operator*=(double mult) + { + m_width *= mult; + m_height *= mult; + return *this; + } + + inline Size& operator/=(double div) + { + m_width /= div; + m_height /= div; + return *this; + } + + // TODO: add ++size, size++, --size, size-- + + // External operators + friend inline bool operator!=(const Size&, const Size&); + friend inline const Size operator+(const Size&, const Size&); + friend inline const Size operator-(const Size&, const Size&); + friend inline const Size operator*(const Size&, double); + friend inline const Size operator*(double, const Size&); + friend inline const Size operator/(const Size&, double); + + friend inline bool operator<(double, const Size&); + friend inline bool operator>(double, const Size&); + friend inline bool operator<=(double, const Size&); + friend inline bool operator>=(double, const Size&); + + void show() const; + +private: + double m_width; + double m_height; +}; + +// Comparison Operators +inline bool operator!=(const Size& s1, const Size& s2) +{ + return s1.m_width != s2.m_width || s1.m_height != s2.m_height; +} + +inline bool operator<(double area, const Size& s) +{ + return area < s.calculateArea(); +} + +inline bool operator>(double area, const Size& s) +{ + return area > s.calculateArea(); +} + +inline bool operator<=(double area, const Size& s) +{ + return area <= s.calculateArea(); +} + +inline bool operator>=(double area, const Size& s) +{ + return area >= s.calculateArea(); +} + +// Arithmetic Operators +inline const Size operator+(const Size& s1, const Size& s2) +{ + return Size(s1.m_width + s2.m_width, s1.m_height + s2.m_height); +} + +inline const Size operator-(const Size& s1, const Size& s2) +{ + return Size(s1.m_width - s2.m_width, s1.m_height - s2.m_height); +} + +inline const Size operator*(const Size& s, double mult) +{ + return Size(s.m_width * mult, s.m_height * mult); +} + +inline const Size operator*(double mult, const Size& s) +{ + return Size(s.m_width * mult, s.m_height * mult); +} + +inline const Size operator/(const Size& s, double div) +{ + return Size(s.m_width / div, s.m_height / div); +} + +typedef double real; +typedef unsigned short ushort; +class LIBSAMPLE_API SizeF +{ +public: + SizeF(real width, real height) : m_width(width), m_height(height) {} + real width() { return m_width; } + real height() { return m_height; } + static inline ushort passTypedefOfUnsignedShort(ushort value) { return value; } +private: + real m_width; + real m_height; +}; + +#endif // SIZE_H + diff --git a/sources/shiboken2/tests/libsample/sometime.cpp b/sources/shiboken2/tests/libsample/sometime.cpp new file mode 100644 index 0000000..851b3b9 --- /dev/null +++ b/sources/shiboken2/tests/libsample/sometime.cpp @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "sometime.h" +#include + +void +Time::setTime() +{ + m_hour = 0; + m_minute = 0; + m_second = 0; + m_msec = 0; + m_is_null = true; +} + +void +Time::setTime(int h, int m, int s, int ms) +{ + m_hour = h; + m_minute = m; + m_second = s; + m_msec = ms; + m_is_null = false; +} + + +Time::NumArgs +Time::somethingCompletelyDifferent() +{ + return ZeroArgs; +} + +Time::NumArgs +Time::somethingCompletelyDifferent(int h, int m, ImplicitConv ic, ObjectType* type) +{ + if (type) + return FourArgs; + if (ic.ctorEnum() == ImplicitConv::CtorThree && ic.objId() == -1) + return TwoArgs; + return ThreeArgs; +} + +Str +Time::toString() const +{ + if (m_is_null) + return Str(); + char buffer[13]; + sprintf(buffer, "%02d:%02d:%02d.%03d", m_hour, m_minute, m_second, m_msec); + return Str(buffer); +} + +bool +Time::operator==(const Time& other) const +{ + return m_hour == other.m_hour + && m_minute == other.m_minute + && m_second == other.m_second + && m_msec == other.m_msec + && m_is_null == other.m_is_null; +} + +bool +Time::operator!=(const Time& other) const +{ + return !operator==(other); +} + +Time::operator Str() const +{ + return Time::toString(); +} + diff --git a/sources/shiboken2/tests/libsample/sometime.h b/sources/shiboken2/tests/libsample/sometime.h new file mode 100644 index 0000000..319cd7f --- /dev/null +++ b/sources/shiboken2/tests/libsample/sometime.h @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SOMETIME_H +#define SOMETIME_H + +#include "libsamplemacros.h" +#include "str.h" +#include "implicitconv.h" +#include "objecttype.h" + +class LIBSAMPLE_API Time +{ +public: + enum NumArgs { + ZeroArgs, + TwoArgs, + ThreeArgs, + FourArgs + }; + + Time() + : m_hour(0), m_minute(0), m_second(0), m_msec(0), m_is_null(true) + {} + Time(int h, int m, int s = 0, int ms = 0) + : m_hour(h), m_minute(m), m_second(s), m_msec(ms), m_is_null(false) + {} + + ~Time() {} + + inline bool isNull() const { return m_is_null; } + + inline int hour() const { return m_hour; } + inline int minute() const { return m_minute; } + inline int second() const { return m_second; } + inline int msec() const { return m_msec; } + + void setTime(); + void setTime(int h, int m, int s = 0, int ms = 0); + + // This one is completely different from the other methods in this class, + // it was added to give the overload decisor a really hard time with + // an value-type with implicit conversion and a default argument, and also + // an object-type, just because I feel like it. + NumArgs somethingCompletelyDifferent(); + NumArgs somethingCompletelyDifferent(int h, int m, + ImplicitConv ic = ImplicitConv::CtorThree, + ObjectType* type = 0); + + Str toString() const; + bool operator==(const Time& other) const; + bool operator!=(const Time& other) const; + + // This cast operator must become an implicit conversion of Str. + operator Str() const; + +private: + int m_hour; + int m_minute; + int m_second; + int m_msec; + + bool m_is_null; +}; + +#endif // SOMETIME_H + diff --git a/sources/shiboken2/tests/libsample/str.cpp b/sources/shiboken2/tests/libsample/str.cpp new file mode 100644 index 0000000..634bd4a --- /dev/null +++ b/sources/shiboken2/tests/libsample/str.cpp @@ -0,0 +1,185 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "str.h" +#include +#include +#include +#include + +using namespace std; + +Str::Str(const Str& s) +{ + init(s.cstring()); +} + +Str::Str(char c) +{ + char str[2] = { c, 0 }; + init(str); +} + +Str::Str(const char* cstr) +{ + init(cstr); +} + +void +Str::init(const char* cstr) +{ + if (cstr) + m_str = cstr; +} + +Str::~Str() +{ +} + +Str +Str::arg(const Str& s) const +{ + size_t idx = m_str.find_first_of("%VAR"); + if (idx == std::string::npos) { + return *this; + } else { + std::string result = m_str; + result.replace(idx, 4, s.m_str); + return result.c_str(); + } +} + +Str& +Str::append(const Str& s) +{ + m_str += s.m_str; + return *this; +} + +Str& +Str::prepend(const Str& s) +{ + m_str = s.m_str + m_str; + return *this; +} + +const char* +Str::cstring() const +{ + return m_str.c_str(); +} + +int +Str::toInt(bool* ok, int base) const +{ + bool my_ok; + int result = 0; + istringstream conv(m_str); + switch (base) { + case 8: + conv >> std::oct >> result; + break; + case 10: + conv >> std::dec >> result; + break; + case 16: + conv >> std::hex >> result; + break; + } + my_ok = istringstream::eofbit & conv.rdstate(); + if (!my_ok) + result = 0; + if (ok) + *ok = my_ok; + return result; +} + +void +Str::show() const +{ + printf("%s", cstring()); +} + +char +Str::get_char(int pos) const +{ + return m_str[pos]; +} + +bool +Str::set_char(int pos, char ch) +{ + m_str[pos] = ch; + return true; +} + +Str Str::operator+(int number) const +{ + ostringstream in; + in << m_str << number; + return in.str().c_str(); +} + +bool Str::operator==(const Str& other) const +{ + return m_str == other.m_str; +} + +Str operator+(int number, const Str& str) +{ + ostringstream in; + in << number << str.m_str; + return in.str().c_str(); +} + +bool Str::operator<(const Str& other) const +{ + return m_str < other.m_str; +} + +unsigned int strHash(const Str& str) +{ + unsigned int result = 0; + const std::string& cppStr = str.m_str; + std::string::const_iterator it = cppStr.begin(); + for (; it != cppStr.end(); ++it) + result = 5 * result + *it; + return result; +} + +void changePStr(PStr* pstr, const char* suffix) +{ + pstr->append(suffix); +} + +void duplicatePStr(PStr* pstr) +{ + if (!pstr) + return; + pstr->append(*pstr); +} diff --git a/sources/shiboken2/tests/libsample/str.h b/sources/shiboken2/tests/libsample/str.h new file mode 100644 index 0000000..d3bcbaa --- /dev/null +++ b/sources/shiboken2/tests/libsample/str.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef STR_H +#define STR_H +#include + +#include "libsamplemacros.h" + +class LIBSAMPLE_API Str +{ +public: + Str(const Str& s); + Str(char c); + Str(const char* cstr = ""); + ~Str(); + + Str arg(const Str& s) const; + + Str& append(const Str& s); + Str& prepend(const Str& s); + + const char* cstring() const; + char get_char(int pos) const; + bool set_char(int pos, char ch); + + int toInt(bool* ok = 0, int base = 10) const; + + void show() const; + + inline int size() const { return m_str.size(); } + + // nonsense operator just to test reverse operators + Str operator+(int number) const; + bool operator==(const Str& other) const; + bool operator<(const Str& other) const; + +private: + void init(const char* cstr); + std::string m_str; + + friend LIBSAMPLE_API Str operator+(int number, const Str& str); + friend LIBSAMPLE_API unsigned int strHash(const Str& str); +}; + +LIBSAMPLE_API Str operator+(int number, const Str& str); +LIBSAMPLE_API unsigned int strHash(const Str& str); + +typedef Str PStr; +LIBSAMPLE_API void changePStr(PStr* pstr, const char* suffix); +LIBSAMPLE_API void duplicatePStr(PStr* pstr = 0); + +#endif // STR_H diff --git a/sources/shiboken2/tests/libsample/strlist.cpp b/sources/shiboken2/tests/libsample/strlist.cpp new file mode 100644 index 0000000..e523522 --- /dev/null +++ b/sources/shiboken2/tests/libsample/strlist.cpp @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "strlist.h" + +bool +StrList::operator==(const std::list& other) const +{ + if (size() != other.size()) + return false; + StrList::const_iterator this_it = begin(); + StrList::const_iterator other_it = begin(); + while (this_it != end()) { + if (!((*this_it) == (*other_it))) + return false; + ++this_it; + ++other_it; + } + return true; +} + +Str +StrList::join(const Str& sep) const +{ + Str result; + for (StrList::const_iterator it = begin(); it != end(); ++it) { + if (it != begin()) + result.append(sep); + result.append(*it); + } + return result; +} diff --git a/sources/shiboken2/tests/libsample/strlist.h b/sources/shiboken2/tests/libsample/strlist.h new file mode 100644 index 0000000..27fc05e --- /dev/null +++ b/sources/shiboken2/tests/libsample/strlist.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef STRLIST_H +#define STRLIST_H + +#include +#include "str.h" + +#include "libsamplemacros.h" + +class LIBSAMPLE_API StrList : public std::list +{ +public: + enum CtorEnum { + NoParamsCtor, + StrCtor, + CopyCtor, + ListOfStrCtor + }; + + inline StrList() : m_ctorUsed(NoParamsCtor) {} + inline explicit StrList(const Str& str) : m_ctorUsed(StrCtor) { push_back(str); } + inline StrList(const StrList& lst) : std::list(lst), m_ctorUsed(CopyCtor) {} + inline StrList(const std::list& lst) : std::list(lst), m_ctorUsed(ListOfStrCtor) {} + + inline void append(Str str) { push_back(str); } + Str join(const Str& sep) const; + + bool operator==(const std::list& other) const; + inline bool operator!=(const std::list& other) const { return !(*this == other); } + + CtorEnum constructorUsed() { return m_ctorUsed; } +private: + CtorEnum m_ctorUsed; +}; + +typedef StrList PStrList; + +#endif // STRLIST_H diff --git a/sources/shiboken2/tests/libsample/templateptr.cpp b/sources/shiboken2/tests/libsample/templateptr.cpp new file mode 100644 index 0000000..fa5bb82 --- /dev/null +++ b/sources/shiboken2/tests/libsample/templateptr.cpp @@ -0,0 +1,33 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "templateptr.h" + +void TemplatePtr::dummy(std::list > & items) +{ +} \ No newline at end of file diff --git a/sources/shiboken2/tests/libsample/templateptr.h b/sources/shiboken2/tests/libsample/templateptr.h new file mode 100644 index 0000000..584b641 --- /dev/null +++ b/sources/shiboken2/tests/libsample/templateptr.h @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TEMPLATEPTR_H +#define TEMPLATEPTR_H + +#include +#include +#include "libsamplemacros.h" +#include "blackbox.h" + +class LIBSAMPLE_API TemplatePtr +{ +public: + void dummy(std::list > & items); +}; + +#endif diff --git a/sources/shiboken2/tests/libsample/transform.cpp b/sources/shiboken2/tests/libsample/transform.cpp new file mode 100644 index 0000000..840f1fe --- /dev/null +++ b/sources/shiboken2/tests/libsample/transform.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2013 Kitware, Inc. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "transform.h" + +#ifdef _WIN32 +#include +#include +static inline bool isfinite(double a) { return _finite(a); } +#else +#include +#endif + +using namespace std; + +Point applyHomogeneousTransform( + const Point& in, + double m11, double m12, double m13, + double m21, double m22, double m23, + double m31, double m32, double m33, + bool* okay) +{ + double x = m11 * in.x() + m12 * in.y() + m13; + double y = m21 * in.x() + m22 * in.y() + m23; + double w = m31 * in.x() + m32 * in.y() + m33; + + if (isfinite(w) && fabs(w) > 1e-10) + { + if (okay) + *okay = true; + return Point(x / w, y / w); + } + else + { + if (okay) + *okay = false; + return Point(); + } +} diff --git a/sources/shiboken2/tests/libsample/transform.h b/sources/shiboken2/tests/libsample/transform.h new file mode 100644 index 0000000..d9ec98d --- /dev/null +++ b/sources/shiboken2/tests/libsample/transform.h @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2013 Kitware, Inc. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TRANSFORM_H +#define TRANSFORM_H + +#include "point.h" + +#include "libsamplemacros.h" + +LIBSAMPLE_API Point +applyHomogeneousTransform( + const Point& in, + double m11, double m12, double m13, + double m21, double m22, double m23, + double m31, double m32, double m33, + bool* okay); + +#endif // TRANSFORM_H diff --git a/sources/shiboken2/tests/libsample/valueandvirtual.h b/sources/shiboken2/tests/libsample/valueandvirtual.h new file mode 100644 index 0000000..34a6788 --- /dev/null +++ b/sources/shiboken2/tests/libsample/valueandvirtual.h @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef VALUEANDVIRTUAL_H +#define VALUEANDVIRTUAL_H + +class ValueAndVirtual +{ +public: + ValueAndVirtual(int id) : m_id(id) {} + ValueAndVirtual(const ValueAndVirtual &other) { m_id = other.m_id; } + + bool operator()(int id, int id2) { return id == id2; } + + inline int id() { return m_id; } + virtual ~ValueAndVirtual() {}; +private: + int m_id; +}; + +#endif // VALUEANDVIRTUAL_H + diff --git a/sources/shiboken2/tests/libsample/virtualmethods.cpp b/sources/shiboken2/tests/libsample/virtualmethods.cpp new file mode 100644 index 0000000..2d26bd7 --- /dev/null +++ b/sources/shiboken2/tests/libsample/virtualmethods.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "virtualmethods.h" + +int VirtualDtor::dtor_called = 0; + +double +VirtualMethods::virtualMethod0(Point pt, int val, Complex cpx, bool b) +{ + return (pt.x() * pt.y() * val) + cpx.imag() + ((int) b); +} + +bool +VirtualMethods::createStr(const char* text, Str*& ret) +{ + if (!text) { + ret = 0; + return false; + } + + ret = new Str(text); + return true; +} + +void +VirtualMethods::getMargins(int* left, int* top, int* right, int* bottom) const +{ + *left = m_left; + *top = m_top; + *right = m_right; + *bottom = m_bottom; +} + +double VirtualDaughter2::virtualMethod0(Point pt, int val, Complex cpx, bool b) +{ + return 42 + VirtualMethods::virtualMethod0(pt, val, cpx, b); +} + +int VirtualDaughter2::sum0(int a0, int a1, int a2) +{ + return 42 + VirtualMethods::sum0(a0, a1, a2); +} + +double VirtualFinalDaughter::virtualMethod0(Point pt, int val, Complex cpx, bool b) +{ + return 42 + VirtualMethods::virtualMethod0(pt, val, cpx, b); +} + +int VirtualFinalDaughter::sum0(int a0, int a1, int a2) +{ + return 42 + VirtualMethods::sum0(a0, a1, a2); +} diff --git a/sources/shiboken2/tests/libsample/virtualmethods.h b/sources/shiboken2/tests/libsample/virtualmethods.h new file mode 100644 index 0000000..3e4c8c5 --- /dev/null +++ b/sources/shiboken2/tests/libsample/virtualmethods.h @@ -0,0 +1,157 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef VIRTUALMETHODS_H +#define VIRTUALMETHODS_H + +#include "point.h" +#include "complex.h" +#include "str.h" + +#include "libsamplemacros.h" +#include "strlist.h" + +class LIBSAMPLE_API VirtualMethods +{ +public: + VirtualMethods(Str name = "VirtualMethods") : m_name(name) + { + m_left = m_top = m_right = m_bottom = 0; + } + virtual ~VirtualMethods() {} + + virtual double virtualMethod0(Point pt, int val, Complex cpx, bool b); + double callVirtualMethod0(Point pt, int val, Complex cpx, bool b) + { + return virtualMethod0(pt, val, cpx, b); + } + + // Binding modification: rename. + virtual int sum0(int a0, int a1, int a2) { return a0 + a1 + a2; } + int callSum0(int a0, int a1, int a2) { return sum0(a0, a1, a2); } + + // Binding modification: set default value for the last argument. + virtual int sum1(int a0, int a1, int a2) { return a0 + a1 + a2; } + int callSum1(int a0, int a1, int a2) { return sum1(a0, a1, a2); } + + // Binding modification: remove the last argument and set a default value for it. + virtual int sum2(int a0, int a1, int a2) { return a0 + a1 + a2; } + int callSum2(int a0, int a1, int a2) { return sum2(a0, a1, a2); } + + // Binding modification: remove the second argument. + virtual int sum3(int a0, int a1, int a2) { return a0 + a1 + a2; } + int callSum3(int a0, int a1, int a2) { return sum3(a0, a1, a2); } + + // Binding modification: remove the second argument and set its default + // value, then inject code on the binding reimplementation of the virtual + // (with a native inject-code) to sum the value of the removed + // argument to the first argument before the method is called. + virtual int sum4(int a0, int a1, int a2) { return a0 + a1 + a2; } + int callSum4(int a0, int a1, int a2) { return sum4(a0, a1, a2); } + + // Binding modification: prepend a string to the results of a Python override. + virtual Str name() { return m_name; } + Str callName() { return name(); } + + // Binding modification: code injection that calls the Python override by itself. + virtual void callMe() {} + void callCallMe() { callMe(); } + + // Passing reference to pointers. + virtual bool createStr(const char* text, Str*& ret); + bool callCreateStr(const char* text, Str*& ret) { return createStr(text, ret); } + + // Return a non-binded method + std::list callStrListToStdList(const StrList& strList) { return strListToStdList(strList); } + virtual std::list strListToStdList(const StrList& strList ) { return strList; } + + void setMargins(int left, int top, int right, int bottom) + { + m_left = left; + m_top = top; + m_right = right; + m_bottom = bottom; + } + virtual void getMargins(int* left, int* top, int* right, int* bottom) const; + void callGetMargins(int* left, int* top, int* right, int* bottom) const + { + getMargins(left, top, right, bottom); + } + + virtual int recursionOnModifiedVirtual(Str arg) const { return 0; } + int callRecursionOnModifiedVirtual(Str arg) const { return recursionOnModifiedVirtual(arg); } + +private: + Str m_name; + int m_left; + int m_top; + int m_right; + int m_bottom; +}; + +class LIBSAMPLE_API VirtualDaughter : public VirtualMethods +{ +public: + VirtualDaughter() : VirtualMethods() {} + VirtualDaughter(Str name) : VirtualMethods(name) {} +}; + +class LIBSAMPLE_API VirtualDaughter2 : public VirtualMethods +{ +public: + VirtualDaughter2() : VirtualMethods("VirtualDaughter2") {} + + double virtualMethod0(Point pt, int val, Complex cpx, bool b) override; + int sum0(int a0, int a1, int a2) final; +}; + +class LIBSAMPLE_API VirtualFinalDaughter final : public VirtualMethods +{ +public: + VirtualFinalDaughter() : VirtualMethods("VirtualFinalDaughter") {} + + double virtualMethod0(Point pt, int val, Complex cpx, bool b) override; + int sum0(int a0, int a1, int a2) override; +}; + +class LIBSAMPLE_API VirtualDtor +{ +public: + VirtualDtor() {} + virtual ~VirtualDtor() { dtor_called++; } + + static VirtualDtor* create() { return new VirtualDtor(); } + static int dtorCalled() { return dtor_called; } + static void resetDtorCounter() { dtor_called = 0; } + +private: + static int dtor_called; +}; + +#endif // VIRTUALMETHODS_H + diff --git a/sources/shiboken2/tests/libsample/voidholder.h b/sources/shiboken2/tests/libsample/voidholder.h new file mode 100644 index 0000000..23408fa --- /dev/null +++ b/sources/shiboken2/tests/libsample/voidholder.h @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef VOIDHOLDER_H +#define VOIDHOLDER_H + +#include "libsamplemacros.h" + +class VoidHolder +{ +public: + explicit VoidHolder(void* ptr = 0) : m_ptr(ptr) {} + ~VoidHolder() {} + inline void* voidPointer() { return m_ptr; } + inline static void* gimmeMeSomeVoidPointer() + { + static void* pointerToSomething = new VoidHolder(); + return pointerToSomething; + } + void *takeVoidPointer(void *item) + { + return item; + } +private: + void* m_ptr; +}; + +#endif // VOIDHOLDER_H + diff --git a/sources/shiboken2/tests/libsmart/CMakeLists.txt b/sources/shiboken2/tests/libsmart/CMakeLists.txt new file mode 100644 index 0000000..66c27cd --- /dev/null +++ b/sources/shiboken2/tests/libsmart/CMakeLists.txt @@ -0,0 +1,11 @@ +project(libsmart) + +set(libsmart_SRC +smart.cpp +) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +add_definitions("-DLIBSMART_BUILD") +add_library(libsmart SHARED ${libsmart_SRC}) +set_property(TARGET libsmart PROPERTY PREFIX "") + diff --git a/sources/shiboken2/tests/libsmart/libsmartmacros.h b/sources/shiboken2/tests/libsmart/libsmartmacros.h new file mode 100644 index 0000000..d85e219 --- /dev/null +++ b/sources/shiboken2/tests/libsmart/libsmartmacros.h @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef LIB_SMART_MACROS_H +#define LIB_SMART_MACROS_H + +#if defined _WIN32 || defined __CYGWIN__ + #if LIBSMART_BUILD + #define LIB_SMART_API __declspec(dllexport) + #else + #define LIB_SMART_API __declspec(dllimport) + #endif +#else +#if __GNUC__ >= 4 + #define LIB_SMART_API __attribute__ ((visibility("default"))) +#else + #define LIB_SMART_API +#endif +#endif + +#endif diff --git a/sources/shiboken2/tests/libsmart/smart.cpp b/sources/shiboken2/tests/libsmart/smart.cpp new file mode 100644 index 0000000..dbe8efa --- /dev/null +++ b/sources/shiboken2/tests/libsmart/smart.cpp @@ -0,0 +1,174 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "smart.h" + +bool shouldPrint() { + return Registry::getInstance()->shouldPrint(); +} + +Obj::Obj() : m_integer(123), m_internalInteger(new Integer) +{ + Registry::getInstance()->add(this); + if (shouldPrint()) + std::cout << "Object constructor " << this << '\n'; +} + +Obj::~Obj() +{ + Registry::getInstance()->remove(this); + delete m_internalInteger; + if (shouldPrint()) + std::cout << "Object destructor " << this << '\n'; +} + + +void Obj::printObj() { + if (shouldPrint()) { + std::cout << "integer value: " << m_integer + << " internal integer value: " << m_internalInteger->m_int << '\n'; + } +} + + +SharedPtr Obj::giveSharedPtrToObj() +{ + SharedPtr o(new Obj); + return o; +} + +SharedPtr Obj::giveSharedPtrToInteger() +{ + SharedPtr o(new Integer); + return o; +} + +int Obj::takeSharedPtrToObj(SharedPtr pObj) +{ + pObj->printObj(); + return pObj->m_integer; +} + +int Obj::takeSharedPtrToInteger(SharedPtr pInt) +{ + pInt->printInteger(); + return pInt->m_int; +} + +Integer Obj::takeInteger(Integer val) +{ + return val; +} + +Integer::Integer() : m_int(456) +{ + Registry::getInstance()->add(this); + if (shouldPrint()) + std::cout << "Integer constructor " << this << '\n'; +} + +Integer::Integer(const Integer &other) +{ + Registry::getInstance()->add(this); + if (shouldPrint()) + std::cout << "Integer copy constructor " << this << '\n'; + m_int = other.m_int; +} + +Integer &Integer::operator=(const Integer &other) +{ + Registry::getInstance()->add(this); + if (shouldPrint()) + std::cout << "Integer operator= " << this << '\n'; + m_int = other.m_int; + return *this; +} + +Integer::~Integer() +{ + Registry::getInstance()->remove(this); + if (shouldPrint()) + std::cout << "Integer destructor " << this << '\n'; +} + +void Integer::printInteger() +{ + if (shouldPrint()) + std::cout << "Integer value for object " << this << " is " << m_int << '\n'; +} + +Registry *Registry::getInstance() +{ + static Registry registry; + return ®istry; +} + +Registry::Registry() : m_printStuff(false) +{ + +} + +void Registry::add(Obj *p) +{ + m_objects.push_back(p); +} + +void Registry::add(Integer *p) +{ + m_integers.push_back(p); +} + +void Registry::remove(Obj *p) +{ + m_objects.erase(std::remove(m_objects.begin(), m_objects.end(), p), m_objects.end()); +} + +void Registry::remove(Integer *p) +{ + m_integers.erase(std::remove(m_integers.begin(), m_integers.end(), p), m_integers.end()); +} + +int Registry::countObjects() const +{ + return static_cast(m_objects.size()); +} + +int Registry::countIntegers() const +{ + return static_cast(m_integers.size()); +} + +bool Registry::shouldPrint() const +{ + return m_printStuff; +} + +void Registry::setShouldPrint(bool flag) +{ + m_printStuff = flag; +} diff --git a/sources/shiboken2/tests/libsmart/smart.h b/sources/shiboken2/tests/libsmart/smart.h new file mode 100644 index 0000000..ea64b44 --- /dev/null +++ b/sources/shiboken2/tests/libsmart/smart.h @@ -0,0 +1,210 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SMART_H +#define SMART_H + +#include +#include +#include + +#include "libsmartmacros.h" + +// Forward declarations. +template +class SharedPtr; +class Integer; +class Obj; + +LIB_SMART_API bool shouldPrint(); + +// Used to track which C++ objects are alive. +class LIB_SMART_API Registry { +public: + static Registry *getInstance(); + + void add(Obj *p); + void add(Integer *p); + void remove(Obj *p); + void remove(Integer *p); + int countObjects() const; + int countIntegers() const; + bool shouldPrint() const; + void setShouldPrint(bool flag); + +protected: + Registry(); + +private: + bool m_printStuff; + std::vector m_objects; + std::vector m_integers; +}; + +template +class RefData { +public: + RefData(T *ptr) : m_refCount(1), m_heldPtr(ptr) {} + ~RefData() { delete m_heldPtr; } + int inc() { return ++m_refCount; } + int dec() { return --m_refCount; } + int useCount() { return m_refCount; } + int m_refCount; + T *m_heldPtr; +}; + +template +class SharedPtr { +public: + SharedPtr() : m_refData(0) { + if (shouldPrint()) + std::cout << "shared_ptr default constructor " << this << "\n"; + } + + SharedPtr(T *v) + { + if (shouldPrint()) + std::cout << "shared_ptr constructor " << this << " with pointer " << v << "\n"; + if (v) + m_refData = new RefData(v); + } + + SharedPtr(const SharedPtr &other) : m_refData(other.m_refData) + { + if (shouldPrint()) + std::cout << "shared_ptr copy constructor " << this << " with pointer " + << other.m_refData << "\n"; + if (m_refData) + m_refData->inc(); + } + + SharedPtr &operator=(const SharedPtr& other) + { + if (this != &other) { + if (shouldPrint()) + std::cout << "shared_ptr assignment operator " << this << " with pointer " + << other.m_refData << "\n"; + if (m_refData && m_refData->dec() == 0) + delete m_refData; + m_refData = other.m_refData; + if (m_refData) + m_refData->inc(); + } + return *this; + } + + T *data() const + { + if (m_refData) + return m_refData->m_heldPtr; + return 0; + } + + int useCount() const + { + if (m_refData) + return m_refData->useCount(); + return 0; + } + + void dummyMethod1() + { + + } + + T& operator*() const + { + // Crashes if smart pointer is empty (just like std::shared_ptr). + return *(m_refData->m_heldPtr); + } + + T *operator->() const + { + if (m_refData) + return m_refData->m_heldPtr; + return 0; + } + + bool operator!() const + { + return !m_refData || !m_refData->m_heldPtr; + } + + bool isNull() const + { + return !m_refData || !m_refData->m_heldPtr; + } + + operator bool() const + { + return m_refData && m_refData->m_heldPtr; + } + + ~SharedPtr() + { + if (m_refData) { + if (shouldPrint()) + std::cout << "shared_ptr destructor " << this << " remaining refcount " + << m_refData->useCount() - 1 << "\n"; + } + if (m_refData && m_refData->dec() == 0) + delete m_refData; + } + + RefData *m_refData; +}; + +class LIB_SMART_API Integer { +public: + Integer(); + Integer(const Integer &other); + Integer &operator=(const Integer &other); + ~Integer(); + void printInteger(); + int m_int; +}; + +// Couldn't name it Object because it caused some namespace clashes. +class LIB_SMART_API Obj { +public: + Obj(); + virtual ~Obj(); + + void printObj(); + Integer takeInteger(Integer val); + SharedPtr giveSharedPtrToObj(); + SharedPtr giveSharedPtrToInteger(); + int takeSharedPtrToObj(SharedPtr pObj); + int takeSharedPtrToInteger(SharedPtr pInt); + + int m_integer; + Integer *m_internalInteger; +}; + +#endif // SMART_H + diff --git a/sources/shiboken2/tests/minimalbinding/CMakeLists.txt b/sources/shiboken2/tests/minimalbinding/CMakeLists.txt new file mode 100644 index 0000000..b8b6417 --- /dev/null +++ b/sources/shiboken2/tests/minimalbinding/CMakeLists.txt @@ -0,0 +1,40 @@ +project(minimal) + +set(minimal_TYPESYSTEM +${CMAKE_CURRENT_SOURCE_DIR}/typesystem_minimal.xml +) + +set(minimal_SRC +${CMAKE_CURRENT_BINARY_DIR}/minimal/minimal_module_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/minimal/obj_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/minimal/val_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/minimal/listuser_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/minimal/minbooluser_wrapper.cpp +) + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/minimal-binding.txt.in" + "${CMAKE_CURRENT_BINARY_DIR}/minimal-binding.txt" @ONLY) + +add_custom_command(OUTPUT ${minimal_SRC} +COMMAND shiboken2 --project-file=${CMAKE_CURRENT_BINARY_DIR}/minimal-binding.txt ${GENERATOR_EXTRA_FLAGS} +DEPENDS ${minimal_TYPESYSTEM} ${CMAKE_CURRENT_SOURCE_DIR}/global.h shiboken2 +WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +COMMENT "Running generator for 'minimal' test binding..." +) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR} + ${SBK_PYTHON_INCLUDE_DIR} + ${libminimal_SOURCE_DIR} + ${libshiboken_SOURCE_DIR} + ${libshiboken_BINARY_DIR}) +add_library(minimal MODULE ${minimal_SRC}) +set_property(TARGET minimal PROPERTY PREFIX "") +set_property(TARGET minimal PROPERTY OUTPUT_NAME "minimal${PYTHON_EXTENSION_SUFFIX}") +if(WIN32) + set_property(TARGET minimal PROPERTY SUFFIX ".pyd") +endif() +target_link_libraries(minimal + libminimal + ${SBK_PYTHON_LIBRARIES} + libshiboken) diff --git a/sources/shiboken2/tests/minimalbinding/global.h b/sources/shiboken2/tests/minimalbinding/global.h new file mode 100644 index 0000000..1b06245 --- /dev/null +++ b/sources/shiboken2/tests/minimalbinding/global.h @@ -0,0 +1,33 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "obj.h" +#include "val.h" +#include "minbool.h" +#include "listuser.h" +#include "typedef.h" diff --git a/sources/shiboken2/tests/minimalbinding/listuser_test.py b/sources/shiboken2/tests/minimalbinding/listuser_test.py new file mode 100644 index 0000000..52ba978 --- /dev/null +++ b/sources/shiboken2/tests/minimalbinding/listuser_test.py @@ -0,0 +1,323 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from minimal import ListUser, Val, Obj +from py3kcompat import IS_PY3K + +if IS_PY3K: + import functools + reduce = functools.reduce + + +class ExtListUser(ListUser): + def __init__(self): + ListUser.__init__(self) + + def createIntList(self, num): + return list(range(0, num * 2, 2)) + + def sumIntList(self, intList): + return sum(intList) * 2 + + def createMinBoolList(self, mb1, mb2): + return [not mb1, not mb2] + + def oredMinBoolList(self, minBoolList): + return not reduce(lambda a, b: a|b, minBoolList) + + def createValList(self, num): + return [Val(i) for i in range(0, num * 2, 2)] + + def sumValList(self, valList): + return sum([val.valId() for val in valList]) * 2 + + def createObjList(self, o1, o2): + o1.setObjId(o1.objId() * 2) + o2.setObjId(o2.objId() * 2) + return [o1, o2] + + def sumObjList(self, objList): + return sum([obj.objId() for obj in objList]) * 2 + + def createListOfIntLists(self, num): + return [self.createIntList(num)] * 4 + + def sumListOfIntLists(self, intListList): + return sum([sum(line) for line in intListList]) * 2 + + +class IntListConversionTest(unittest.TestCase): + + def testCreateIntList(self): + num = 4 + lu = ListUser() + lst = lu.createIntList(num) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), num) + for i in lst: + self.assertEqual(type(i), int) + self.assertEqual(lst, list(range(num))) + lst = lu.callCreateIntList(num) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), num) + for i in lst: + self.assertEqual(type(i), int) + self.assertEqual(lst, list(range(num))) + + def testCreateIntListFromExtendedClass(self): + lu = ExtListUser() + num = 4 + lst = lu.createIntList(num) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), num) + for i in lst: + self.assertEqual(type(i), int) + self.assertEqual(lst, list(range(0, num * 2, 2))) + lst = lu.callCreateIntList(num) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), num) + for i in lst: + self.assertEqual(type(i), int) + self.assertEqual(lst, list(range(0, num * 2, 2))) + + def testSumIntList(self): + lu = ListUser() + lst = range(4) + self.assertEqual(lu.sumIntList(lst), sum(lst)) + self.assertEqual(lu.callSumIntList(lst), sum(lst)) + + def testSumIntListFromExtendedClass(self): + lu = ExtListUser() + lst = range(4) + self.assertEqual(lu.sumIntList(lst), sum(lst) * 2) + self.assertEqual(lu.callSumIntList(lst), sum(lst) * 2) + + +class MinBoolListConversionTest(unittest.TestCase): + + def testCreateMinBoolList(self): + lu = ListUser() + lst = lu.createMinBoolList(True, False) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), 2) + for i in lst: + self.assertEqual(type(i), bool) + self.assertEqual(lst, [True, False]) + + lst = lu.callCreateMinBoolList(False, True) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), 2) + for i in lst: + self.assertEqual(type(i), bool) + self.assertEqual(lst, [False, True]) + + def testCreateMinBoolListFromExtendedClass(self): + lu = ExtListUser() + lst = lu.createMinBoolList(True, False) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), 2) + for i in lst: + self.assertEqual(type(i), bool) + self.assertEqual(lst, [False, True]) + + lst = lu.callCreateMinBoolList(False, True) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), 2) + for i in lst: + self.assertEqual(type(i), bool) + self.assertEqual(lst, [True, False]) + + def testOredMinBoolList(self): + lu = ListUser() + lst = [False, False, True] + self.assertTrue(lu.oredMinBoolList(lst)) + self.assertTrue(lu.callOredMinBoolList(lst)) + lst = [False, False, False] + self.assertFalse(lu.oredMinBoolList(lst)) + self.assertFalse(lu.callOredMinBoolList(lst)) + + def testOredMinBoolListFromExtendedClass(self): + lu = ExtListUser() + lst = [False, False, True] + self.assertFalse(lu.oredMinBoolList(lst)) + self.assertFalse(lu.callOredMinBoolList(lst)) + lst = [False, False, False] + self.assertTrue(lu.oredMinBoolList(lst)) + self.assertTrue(lu.callOredMinBoolList(lst)) + + +class ValListConversionTest(unittest.TestCase): + + def testCreateValList(self): + num = 4 + lu = ListUser() + lst = lu.createValList(num) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), num) + for i in lst: + self.assertEqual(type(i), Val) + self.assertEqual([val.valId() for val in lst], list(range(num))) + lst = lu.callCreateValList(num) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), num) + for i in lst: + self.assertEqual(type(i), Val) + self.assertEqual([val.valId() for val in lst], list(range(num))) + + def testCreateValListFromExtendedClass(self): + lu = ExtListUser() + num = 4 + lst = lu.createValList(num) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), num) + for i in lst: + self.assertEqual(type(i), Val) + self.assertEqual([val.valId() for val in lst], list(range(0, num * 2, 2))) + lst = lu.callCreateValList(num) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), num) + for i in lst: + self.assertEqual(type(i), Val) + self.assertEqual([val.valId() for val in lst], list(range(0, num * 2, 2))) + + def testSumValList(self): + lu = ListUser() + lst = [Val(i) for i in range(4)] + self.assertEqual(lu.sumValList(lst), sum([val.valId() for val in lst])) + self.assertEqual(lu.callSumValList(lst), sum([val.valId() for val in lst])) + + def testSumValListFromExtendedClass(self): + lu = ExtListUser() + lst = [Val(i) for i in range(4)] + self.assertEqual(lu.sumValList(lst), sum([val.valId() for val in lst]) * 2) + self.assertEqual(lu.callSumValList(lst), sum([val.valId() for val in lst]) * 2) + + +class ObjListConversionTest(unittest.TestCase): + + def testCreateObjList(self): + o1 = Obj(1) + o2 = Obj(2) + lu = ListUser() + lst = lu.createObjList(o1, o2) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), 2) + for i in lst: + self.assertEqual(type(i), Obj) + self.assertEqual(lst, [o1, o2]) + self.assertEqual([obj.objId() for obj in lst], [1, 2]) + + lst = lu.callCreateObjList(o1, o2) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), 2) + for i in lst: + self.assertEqual(type(i), Obj) + self.assertEqual(lst, [o1, o2]) + self.assertEqual([obj.objId() for obj in lst], [1, 2]) + + def testCreateObjListFromExtendedClass(self): + o1 = Obj(1) + o2 = Obj(2) + lu = ExtListUser() + lst = lu.createObjList(o1, o2) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), 2) + for i in lst: + self.assertEqual(type(i), Obj) + self.assertEqual(lst, [o1, o2]) + self.assertEqual([obj.objId() for obj in lst], [2, 4]) + + lst = lu.callCreateObjList(o1, o2) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), 2) + for i in lst: + self.assertEqual(type(i), Obj) + self.assertEqual(lst, [o1, o2]) + self.assertEqual([obj.objId() for obj in lst], [4, 8]) + + def testSumObjList(self): + lu = ListUser() + lst = [Obj(i) for i in list(range(4))] + self.assertEqual(lu.sumObjList(lst), sum([obj.objId() for obj in lst])) + self.assertEqual(lu.callSumObjList(lst), sum([obj.objId() for obj in lst])) + + def testSumObjListFromExtendedClass(self): + lu = ExtListUser() + lst = [Obj(i) for i in list(range(4))] + self.assertEqual(lu.sumObjList(lst), sum([obj.objId() for obj in lst]) * 2) + self.assertEqual(lu.callSumObjList(lst), sum([obj.objId() for obj in lst]) * 2) + + +class ListOfIntListConversionTest(unittest.TestCase): + + def testCreateListOfIntLists(self): + num = 4 + lu = ListUser() + lst = lu.createListOfIntLists(num) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), num) + for i in lst: + self.assertEqual(type(i), list) + self.assertEqual(i, list(range(num))) + for j in i: + self.assertEqual(type(j), int) + self.assertEqual(lst, [list(range(num))] * 4) + + def testCreateListOfIntListsFromExtendedClass(self): + num = 4 + lu = ExtListUser() + lst = lu.createListOfIntLists(num) + self.assertEqual(type(lst), list) + self.assertEqual(len(lst), num) + for i in lst: + self.assertEqual(type(i), list) + self.assertEqual(i, list(range(0, num * 2, 2))) + for j in i: + self.assertEqual(type(j), int) + self.assertEqual(lst, [list(range(0, num * 2, 2))] * 4) + + def testSumListIntLists(self): + lu = ListUser() + lst = [range(4)] * 4 + self.assertEqual(lu.sumListOfIntLists(lst), sum([sum(line) for line in [range(4)] * 4])) + self.assertEqual(lu.callSumListOfIntLists(lst), sum([sum(line) for line in [range(4)] * 4])) + + def testSumListOfIntListsFromExtendedClass(self): + lu = ExtListUser() + lst = [range(4)] * 4 + self.assertEqual(lu.sumListOfIntLists(lst), sum([sum(line) for line in [range(4)] * 4]) * 2) + self.assertEqual(lu.callSumListOfIntLists(lst), sum([sum(line) for line in [range(4)] * 4]) * 2) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/minimalbinding/minbool_test.py b/sources/shiboken2/tests/minimalbinding/minbool_test.py new file mode 100644 index 0000000..020e9a4 --- /dev/null +++ b/sources/shiboken2/tests/minimalbinding/minbool_test.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from minimal import MinBoolUser + +class DerivedMinBoolUser (MinBoolUser): + def returnMyselfVirtual(self): + return MinBoolUser() + +class MinBoolTest(unittest.TestCase): + + def testMinBoolUser(self): + mbuTrue = MinBoolUser() + mbuFalse = MinBoolUser() + mbuTrue.setMinBool(True) + self.assertEqual(mbuFalse.minBool(), False) + self.assertEqual(mbuTrue.minBool(), True) + self.assertEqual(mbuTrue.callInvertedMinBool(), False) + + self.assertEqual(mbuTrue.minBool() == True, True) + self.assertEqual(False == mbuFalse.minBool(), True) + self.assertEqual(mbuTrue.minBool() == mbuFalse.minBool(), False) + + self.assertEqual(mbuFalse.minBool() != True, True) + self.assertEqual(True != mbuFalse.minBool(), True) + self.assertEqual(mbuTrue.minBool() != mbuFalse.minBool(), True) + + def testVirtuals(self): + dmbu = DerivedMinBoolUser() + self.assertEqual(dmbu.invertedMinBool(), True) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/minimalbinding/minimal-binding.txt.in b/sources/shiboken2/tests/minimalbinding/minimal-binding.txt.in new file mode 100644 index 0000000..85b1396 --- /dev/null +++ b/sources/shiboken2/tests/minimalbinding/minimal-binding.txt.in @@ -0,0 +1,15 @@ +[generator-project] + +generator-set = shiboken + +header-file = @CMAKE_CURRENT_SOURCE_DIR@/global.h +typesystem-file = @minimal_TYPESYSTEM@ + +output-directory = @CMAKE_CURRENT_BINARY_DIR@ + +include-path = @libminimal_SOURCE_DIR@ + +typesystem-path = @CMAKE_CURRENT_SOURCE_DIR@ + +enable-parent-ctor-heuristic +use-isnull-as-nb_nonzero diff --git a/sources/shiboken2/tests/minimalbinding/obj_test.py b/sources/shiboken2/tests/minimalbinding/obj_test.py new file mode 100644 index 0000000..b97f8b1 --- /dev/null +++ b/sources/shiboken2/tests/minimalbinding/obj_test.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from minimal import Obj + +class ExtObj(Obj): + def __init__(self, objId): + Obj.__init__(self, objId) + self.virtual_method_called = False + + def virtualMethod(self, val): + self.virtual_method_called = True + return not Obj.virtualMethod(self, val) + + def passObjectType(self, obj): + obj.setObjId(obj.objId() + 1) + return obj + + def passObjectTypeReference(self, obj): + obj.setObjId(obj.objId() + 1) + return obj + + +class ObjTest(unittest.TestCase): + + def testNormalMethod(self): + objId = 123 + obj = Obj(objId) + self.assertEqual(obj.objId(), objId) + + def testNormalMethodFromExtendedClass(self): + objId = 123 + obj = ExtObj(objId) + self.assertEqual(obj.objId(), objId) + + def testVirtualMethod(self): + obj = Obj(0) + even_number = 8 + self.assertEqual(obj.virtualMethod(even_number), obj.callVirtualMethod(even_number)) + + def testVirtualMethodFromExtendedClass(self): + obj = ExtObj(0) + even_number = 8 + self.assertEqual(obj.virtualMethod(even_number), obj.callVirtualMethod(even_number)) + self.assertTrue(obj.virtual_method_called) + + def testPassObjectType(self): + obj = Obj(0) + self.assertEqual(obj, obj.passObjectType(obj)) + self.assertEqual(obj, obj.callPassObjectType(obj)) + + def testPassObjectTypeNone(self): + obj = Obj(0) + self.assertEqual(None, obj.passObjectType(None)) + self.assertEqual(None, obj.callPassObjectType(None)) + + def testPassObjectTypeReference(self): + obj = Obj(0) + self.assertEqual(obj, obj.passObjectTypeReference(obj)) + self.assertEqual(obj, obj.callPassObjectTypeReference(obj)) + + def testPassObjectTypeFromExtendedClass(self): + obj = ExtObj(0) + self.assertEqual(obj.objId(), 0) + sameObj = obj.passObjectType(obj) + self.assertEqual(obj, sameObj) + self.assertEqual(sameObj.objId(), 1) + sameObj = obj.callPassObjectType(obj) + self.assertEqual(obj, sameObj) + self.assertEqual(sameObj.objId(), 2) + + def testPassObjectTypeReferenceFromExtendedClass(self): + obj = ExtObj(0) + self.assertEqual(obj.objId(), 0) + sameObj = obj.passObjectTypeReference(obj) + self.assertEqual(obj, sameObj) + self.assertEqual(sameObj.objId(), 1) + sameObj = obj.callPassObjectTypeReference(obj) + self.assertEqual(obj, sameObj) + self.assertEqual(sameObj.objId(), 2) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/minimalbinding/typedef_test.py b/sources/shiboken2/tests/minimalbinding/typedef_test.py new file mode 100644 index 0000000..e583370 --- /dev/null +++ b/sources/shiboken2/tests/minimalbinding/typedef_test.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from minimal import * +from py3kcompat import IS_PY3K + +try: + import numpy as np +except ImportError as e: + print(e) + np = None + + +if IS_PY3K: + import functools + reduce = functools.reduce + + +class TypedefTest(unittest.TestCase): + + def setUp(self): + self.the_size = 8 + + def test_arrayFuncInt(self): + none = () + full = range(self.the_size) + self.assertTrue(arrayFuncInt(none), "None is empty, arrayFuncInt should return true") + self.assertFalse(arrayFuncInt(full), "Full is NOT empty, arrayFuncInt should return false") + + self.assertTrue(arrayFuncInt(np.array(none)), "None is empty, arrayFuncInt should return true") + self.assertFalse(arrayFuncInt(np.array(full)), "Full is NOT empty, arrayFuncInt should return false") + + def test_arrayFuncIntTypedef(self): + none = () + full = (1, 2, 3) + self.assertTrue(arrayFuncIntTypedef(none), "None is empty, arrayFuncIntTypedef should return true") + self.assertFalse(arrayFuncIntTypedef(full), "Full is NOT empty, arrayFuncIntTypedef should return false") + + self.assertTrue(arrayFuncIntTypedef(np.array(none)), "None is empty, arrayFuncIntTypedef should return true") + self.assertFalse(arrayFuncIntTypedef(np.array(full)), "Full is NOT empty, arrayFuncIntTypedef should return false") + + def test_arrayFuncIntReturn(self): + none = arrayFuncIntReturn(0) + full = arrayFuncIntReturn(self.the_size) + self.assertTrue((len(none) == 0), "none should be empty") + self.assertTrue((len(full) == self.the_size), "full should have " + str(self.the_size) + " elements") + + def test_arrayFuncIntReturnTypedef(self): + none = arrayFuncIntReturnTypedef(0) + full = arrayFuncIntReturnTypedef(self.the_size) + self.assertTrue((len(none) == 0), "none should be empty") + self.assertTrue((len(full) == self.the_size), "full should have " + str(self.the_size) + " elements") + + def test_arrayFunc(self): + none = () + full = range(self.the_size) + self.assertTrue(arrayFunc(none), "None is empty, arrayFunc should return true") + self.assertFalse(arrayFunc(full), "Full is NOT empty, arrayFunc should return false") + + self.assertTrue(arrayFunc(np.array(none)), "None is empty, arrayFunc should return true") + self.assertFalse(arrayFunc(np.array(full)), "Full is NOT empty, arrayFunc should return false") + + def test_arrayFuncTypedef(self): + none = () + full = (1, 2, 3) + self.assertTrue(arrayFuncTypedef(none), "None is empty, arrayFuncTypedef should return true") + self.assertFalse(arrayFuncTypedef(full), "Full is NOT empty, arrayFuncTypedef should return false") + + self.assertTrue(arrayFuncTypedef(np.array(none)), "None is empty, arrayFuncTypedef should return true") + self.assertFalse(arrayFuncTypedef(np.array(full)), "Full is NOT empty, arrayFuncTypedef should return false") + + def test_arrayFuncReturn(self): + none = arrayFuncReturn(0) + full = arrayFuncReturn(self.the_size) + self.assertTrue((len(none) == 0), "none should be empty") + self.assertTrue((len(full) == self.the_size), "full should have " + str(self.the_size) + " elements") + + def test_arrayFuncReturnTypedef(self): + none = arrayFuncReturnTypedef(0) + full = arrayFuncReturnTypedef(self.the_size) + self.assertTrue((len(none) == 0), "none should be empty") + self.assertTrue((len(full) == self.the_size), "full should have " + str(self.the_size) + " elements") + + +if __name__ == '__main__': + if np != None: + unittest.main() diff --git a/sources/shiboken2/tests/minimalbinding/typesystem_minimal.xml b/sources/shiboken2/tests/minimalbinding/typesystem_minimal.xml new file mode 100644 index 0000000..968b27c --- /dev/null +++ b/sources/shiboken2/tests/minimalbinding/typesystem_minimal.xml @@ -0,0 +1,93 @@ + + + + + + + + + + return PyBool_FromLong(%in.value()); + + + + %out = %OUTTYPE(%in == Py_True); + + + + + + + + + + PyObject* %out = PyList_New((int) %in.size()); + %INTYPE::const_iterator it = %in.begin(); + for (int idx = 0; it != %in.end(); ++it, ++idx) { + %INTYPE_0 cppItem(*it); + PyList_SET_ITEM(%out, idx, %CONVERTTOPYTHON[%INTYPE_0](cppItem)); + } + return %out; + + + + Shiboken::AutoDecRef seq(PySequence_Fast(%in, 0)); + for (int i = 0; i < PySequence_Fast_GET_SIZE(seq.object()); i++) { + PyObject* pyItem = PySequence_Fast_GET_ITEM(seq.object(), i); + %OUTTYPE_0 cppItem = %CONVERTTOCPP[%OUTTYPE_0](pyItem); + %out.push_back(cppItem); + } + + + + + + + + + + + + + + + + + %INTYPE::size_type vectorSize = %in.size(); + PyObject* %out = PyList_New((int) vectorSize); + for (%INTYPE::size_type idx = 0; idx < vectorSize; ++idx) { + %INTYPE_0 cppItem(%in[idx]); + PyList_SET_ITEM(%out, idx, %CONVERTTOPYTHON[%INTYPE_0](cppItem)); + } + return %out; + + + + Shiboken::AutoDecRef seq(PySequence_Fast(%in, 0)); + int vectorSize = PySequence_Fast_GET_SIZE(seq.object()); + %out.reserve(vectorSize); + for (int idx = 0; idx < vectorSize; ++idx ) { + PyObject* pyItem = PySequence_Fast_GET_ITEM(seq.object(), idx); + %OUTTYPE_0 cppItem = %CONVERTTOCPP[%OUTTYPE_0](pyItem); + %out.push_back(cppItem); + } + + + + + + + + + + + + + + + + + + + + diff --git a/sources/shiboken2/tests/minimalbinding/val_test.py b/sources/shiboken2/tests/minimalbinding/val_test.py new file mode 100644 index 0000000..7a10f29 --- /dev/null +++ b/sources/shiboken2/tests/minimalbinding/val_test.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from minimal import Val + + +class ExtVal(Val): + def __init__(self, valId): + Val.__init__(self, valId) + + def passValueType(self, val): + return ExtVal(val.valId() + 1) + + def passValueTypePointer(self, val): + val.setValId(val.valId() + 1) + return val + + def passValueTypeReference(self, val): + val.setValId(val.valId() + 1) + return val + + +class ValTest(unittest.TestCase): + + def testNormalMethod(self): + valId = 123 + val = Val(valId) + self.assertEqual(val.valId(), valId) + + def testPassValueType(self): + val = Val(123) + val1 = val.passValueType(val) + self.assertNotEqual(val, val1) + self.assertEqual(val1.valId(), 123) + val2 = val.callPassValueType(val) + self.assertNotEqual(val, val2) + self.assertEqual(val2.valId(), 123) + + def testPassValueTypePointer(self): + val = Val(0) + self.assertEqual(val, val.passValueTypePointer(val)) + self.assertEqual(val, val.callPassValueTypePointer(val)) + + def testPassValueTypeReference(self): + val = Val(0) + self.assertEqual(val, val.passValueTypeReference(val)) + self.assertEqual(val, val.callPassValueTypeReference(val)) + + def testPassAndReceiveEnumValue(self): + val = Val(0) + self.assertEqual(val.oneOrTheOtherEnumValue(Val.One), Val.Other) + self.assertEqual(val.oneOrTheOtherEnumValue(Val.Other), Val.One) + + def testPassValueTypeFromExtendedClass(self): + val = ExtVal(0) + val1 = val.passValueType(val) + self.assertNotEqual(val, val1) + self.assertEqual(val1.valId(), val.valId() + 1) + val2 = val.callPassValueType(val) + self.assertNotEqual(val, val2) + self.assertEqual(val2.valId(), val.valId() + 1) + + def testPassValueTypePointerFromExtendedClass(self): + val = ExtVal(0) + self.assertEqual(val.valId(), 0) + sameVal = val.passValueTypePointer(val) + self.assertEqual(val, sameVal) + self.assertEqual(sameVal.valId(), 1) + sameVal = val.callPassValueTypePointer(val) + self.assertEqual(val, sameVal) + self.assertEqual(sameVal.valId(), 2) + + def testPassValueTypeReferenceFromExtendedClass(self): + val = ExtVal(0) + self.assertEqual(val.valId(), 0) + sameVal = val.passValueTypeReference(val) + self.assertEqual(val, sameVal) + self.assertEqual(sameVal.valId(), 1) + sameVal = val.callPassValueTypeReference(val) + self.assertEqual(val, sameVal) + self.assertEqual(sameVal.valId(), 2) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/otherbinding/CMakeLists.txt b/sources/shiboken2/tests/otherbinding/CMakeLists.txt new file mode 100644 index 0000000..186766b --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/CMakeLists.txt @@ -0,0 +1,51 @@ +project(other) + +set(other_TYPESYSTEM +${CMAKE_CURRENT_SOURCE_DIR}/typesystem_other.xml +) + +set(other_SRC +${CMAKE_CURRENT_BINARY_DIR}/other/extendsnoimplicitconversion_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/other/number_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/other/otherderived_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/other/othermultiplederived_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/other/otherobjecttype_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/other/other_module_wrapper.cpp +) + + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/other-binding.txt.in" + "${CMAKE_CURRENT_BINARY_DIR}/other-binding.txt" @ONLY) + +add_custom_command(OUTPUT ${other_SRC} +COMMAND shiboken2 --project-file=${CMAKE_CURRENT_BINARY_DIR}/other-binding.txt ${GENERATOR_EXTRA_FLAGS} +DEPENDS ${other_TYPESYSTEM} ${CMAKE_CURRENT_SOURCE_DIR}/global.h shiboken2 +WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +COMMENT "Running generator for 'other' test binding..." +) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR} + ${SBK_PYTHON_INCLUDE_DIR} + ${libother_SOURCE_DIR} + ${libsample_SOURCE_DIR} + ${libsample_SOURCE_DIR}/.. + ${sample_BINARY_DIR} + ${sample_BINARY_DIR}/sample + ${libshiboken_SOURCE_DIR} + ${libshiboken_BINARY_DIR}) +add_library(other MODULE ${other_SRC}) +set_property(TARGET other PROPERTY PREFIX "") +set_property(TARGET other PROPERTY OUTPUT_NAME "other${PYTHON_EXTENSION_SUFFIX}") + +if(WIN32) + set_property(TARGET other PROPERTY SUFFIX ".pyd") +endif() +target_link_libraries(other + libother + libsample + ${SBK_PYTHON_LIBRARIES} + libshiboken) + +add_dependencies(other sample) + diff --git a/sources/shiboken2/tests/otherbinding/collector_external_operator_test.py b/sources/shiboken2/tests/otherbinding/collector_external_operator_test.py new file mode 100644 index 0000000..b65663f --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/collector_external_operator_test.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for Collector shift operators defined in other modules.''' + +import unittest + +from sample import Collector, ObjectType +from other import OtherObjectType + +class CollectorOtherObjectType(unittest.TestCase): + '''Test cases for Collector << OtherObjectType''' + + def testLShiftWithExpectedType(self): + '''Collector << ObjectType # libsample << operator''' + collector = Collector() + obj = ObjectType() + collector << obj + self.assertEqual(collector.items()[0], obj.identifier()) + + def testOtherReversal(self): + '''Collector << OtherObjectType # libother << operator''' + collector = Collector() + obj = OtherObjectType() + collector << obj + self.assertEqual(collector.items()[0], obj.identifier() * 2) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/otherbinding/conversion_operator_for_class_without_implicit_conversions_test.py b/sources/shiboken2/tests/otherbinding/conversion_operator_for_class_without_implicit_conversions_test.py new file mode 100755 index 0000000..2aba4bd --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/conversion_operator_for_class_without_implicit_conversions_test.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests calling NoImplicitConversion using a ExtendsNoImplicitConversion parameter, + being that the latter defines a new conversion operator for the former, and this one + has no implicit conversions.''' + +import unittest + +from sample import NoImplicitConversion +from other import ExtendsNoImplicitConversion + +class ConversionOperatorForClassWithoutImplicitConversionsTest(unittest.TestCase): + '''Tests calling NoImplicitConversion constructor using a ExtendsNoImplicitConversion parameter.''' + + def testNoImplicitConversion(self): + '''Basic test to see if the NoImplicitConversion is Ok.''' + obj = NoImplicitConversion(123) + # NoImplicitConversion.receivesNoImplicitConversionByValue(NoImplicitConversion) + self.assertEqual(obj.objId(), NoImplicitConversion.receivesNoImplicitConversionByValue(obj)) + # NoImplicitConversion.receivesNoImplicitConversionByPointer(NoImplicitConversion*) + self.assertEqual(obj.objId(), NoImplicitConversion.receivesNoImplicitConversionByPointer(obj)) + # NoImplicitConversion.receivesNoImplicitConversionByReference(NoImplicitConversion&) + self.assertEqual(obj.objId(), NoImplicitConversion.receivesNoImplicitConversionByReference(obj)) + + def testPassingExtendsNoImplicitConversionAsNoImplicitConversionByValue(self): + '''Gives an ExtendsNoImplicitConversion object to a function expecting a NoImplicitConversion, passing by value.''' + obj = ExtendsNoImplicitConversion(123) + self.assertEqual(obj.objId(), NoImplicitConversion.receivesNoImplicitConversionByValue(obj)) + + def testPassingExtendsNoImplicitConversionAsNoImplicitConversionByReference(self): + '''Gives an ExtendsNoImplicitConversion object to a function expecting a NoImplicitConversion, passing by reference.''' + obj = ExtendsNoImplicitConversion(123) + self.assertEqual(obj.objId(), NoImplicitConversion.receivesNoImplicitConversionByReference(obj)) + + def testPassingExtendsNoImplicitConversionAsNoImplicitConversionByPointer(self): + '''Gives an ExtendsNoImplicitConversion object to a function expecting a NoImplicitConversion, passing by pointer. + This should not be accepted, since pointers should not be converted.''' + obj = ExtendsNoImplicitConversion(123) + self.assertRaises(TypeError, NoImplicitConversion.receivesNoImplicitConversionByPointer, obj) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/otherbinding/extended_multiply_operator_test.py b/sources/shiboken2/tests/otherbinding/extended_multiply_operator_test.py new file mode 100755 index 0000000..08541a1 --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/extended_multiply_operator_test.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for libsample's Point multiply operator defined in libother module.''' + +import unittest + +from sample import Point +from other import Number + +class PointOperationsWithNumber(unittest.TestCase): + '''Test cases for libsample's Point multiply operator defined in libother module.''' + + def testPointTimesInt(self): + '''sample.Point * int''' + pt1 = Point(2, 7) + num = 3 + pt2 = Point(pt1.x() * num, pt1.y() * num) + self.assertEqual(pt1 * num, pt2) + + def testIntTimesPoint(self): + '''int * sample.Point''' + pt1 = Point(2, 7) + num = 3 + pt2 = Point(pt1.x() * num, pt1.y() * num) + self.assertEqual(num * pt1, pt2) + + def testPointTimesNumber(self): + '''sample.Point * other.Number''' + pt = Point(2, 7) + num = Number(11) + self.assertEqual(pt * num, pt * 11) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/otherbinding/global.h b/sources/shiboken2/tests/otherbinding/global.h new file mode 100644 index 0000000..0fccabb --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/global.h @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "../samplebinding/global.h" +#include "extendsnoimplicitconversion.h" +#include "number.h" +#include "otherderived.h" +#include "otherobjecttype.h" +#include "othermultiplederived.h" + diff --git a/sources/shiboken2/tests/otherbinding/module_reload_test.py b/sources/shiboken2/tests/otherbinding/module_reload_test.py new file mode 100644 index 0000000..0010130 --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/module_reload_test.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import os +import sys +import shutil +import unittest + +from py3kcompat import IS_PY3K + +if IS_PY3K: + from imp import reload + +orig_path = os.path.join(os.path.dirname(__file__)) +workdir = os.getcwd() +src = os.path.join(orig_path, 'test_module_template.py') +dst = os.path.join(workdir, 'test_module.py') +shutil.copyfile(src, dst) +sys.path.append(workdir) + +class TestModuleReloading(unittest.TestCase): + + def testModuleReloading(self): + '''Test module reloading with on-the-fly modifications.''' + import test_module + for i in range(3): + oldObject = test_module.obj + self.assertTrue(oldObject is test_module.obj) + reload(test_module) + self.assertFalse(oldObject is test_module.obj) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/shiboken2/tests/otherbinding/new_ctor_operator_test.py b/sources/shiboken2/tests/otherbinding/new_ctor_operator_test.py new file mode 100755 index 0000000..0998849 --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/new_ctor_operator_test.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests calling Str constructor using a Number parameter, being that number defines a cast operator to Str.''' + +import unittest + +from sample import Str +from other import Number + +class NewCtorOperatorTest(unittest.TestCase): + '''Tests calling Str constructor using a Number parameter, being that number defines a cast operator to Str.''' + + def testNumber(self): + '''Basic test to see if the Number class is Ok.''' + value = 123 + num = Number(value) + self.assertEqual(num.value(), value) + + def testStrCtorWithNumberArgument(self): + '''Try to build a Str from 'sample' module with a Number argument from 'other' module.''' + value = 123 + num = Number(value) + string = Str(num) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/otherbinding/objtypehashes_test.py b/sources/shiboken2/tests/otherbinding/objtypehashes_test.py new file mode 100644 index 0000000..a529574 --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/objtypehashes_test.py @@ -0,0 +1,53 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from sample import * +from other import * +import shiboken2 as shiboken + +class TestHashFuncs (unittest.TestCase): + + def testIt(self): + obj1 = HandleHolder() + obj2 = HandleHolder() + + hash1 = hash(obj1) + hash2 = hash(obj2) + self.assertNotEqual(hash1, hash2) + + # Now invalidate the object and test its hash. It shouldn't segfault. + shiboken.invalidate(obj1) + + hash1_2 = hash(obj1) + self.assertEqual(hash1_2, hash1) + + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/otherbinding/other-binding.txt.in b/sources/shiboken2/tests/otherbinding/other-binding.txt.in new file mode 100644 index 0000000..a17b70f --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/other-binding.txt.in @@ -0,0 +1,18 @@ +[generator-project] + +generator-set = shiboken + +header-file = @CMAKE_CURRENT_SOURCE_DIR@/global.h +typesystem-file = @other_TYPESYSTEM@ + +output-directory = @CMAKE_CURRENT_BINARY_DIR@ + +include-path = @libother_SOURCE_DIR@ +include-path = @libsample_SOURCE_DIR@ +include-path = @libsample_SOURCE_DIR@/.. + +typesystem-path = @CMAKE_CURRENT_SOURCE_DIR@ +typesystem-path = @sample_SOURCE_DIR@ + +enable-parent-ctor-heuristic + diff --git a/sources/shiboken2/tests/otherbinding/otherderived_test.py b/sources/shiboken2/tests/otherbinding/otherderived_test.py new file mode 100644 index 0000000..e6ed761 --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/otherderived_test.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for OtherDerived class''' + +import sys +import unittest + +from sample import Abstract, Derived +from other import OtherDerived, Number + +class Multiple(Derived, Number): + def __init__(self): + Derived.__init__(self, 42) + Number.__init__(self, 42) + + def testCall(self): + return True + +class OtherDeviant(OtherDerived): + def __init__(self): + OtherDerived.__init__(self) + self.pure_virtual_called = False + self.unpure_virtual_called = False + + def pureVirtual(self): + self.pure_virtual_called = True + + def unpureVirtual(self): + self.unpure_virtual_called = True + + def className(self): + return 'OtherDeviant' + +class MultipleTest(unittest.TestCase): + '''Test case for Multiple derived class''' + + def testConstructor(self): + o = Multiple() + self.assertTrue(isinstance(o, Multiple)) + self.assertTrue(isinstance(o, Number)) + self.assertTrue(isinstance(o, Derived)) + del o + + def testMethodCall(self): + o = Multiple() + self.assertTrue(o.id_(), 42) + self.assertTrue(o.value(), 42) + self.assertTrue(o.testCall()) + +class OtherDerivedTest(unittest.TestCase): + '''Test case for OtherDerived class''' + + def testParentClassMethodsAvailability(self): + '''Test if OtherDerived class really inherits its methods from parent.''' + inherited_methods = set(['callPureVirtual', 'callUnpureVirtual', + 'id_', 'pureVirtual', 'unpureVirtual']) + self.assertTrue(inherited_methods.issubset(dir(OtherDerived))) + + def testReimplementedPureVirtualMethodCall(self): + '''Test if a Python override of a implemented pure virtual method is correctly called from C++.''' + d = OtherDeviant() + d.callPureVirtual() + self.assertTrue(d.pure_virtual_called) + + def testReimplementedVirtualMethodCall(self): + '''Test if a Python override of a reimplemented virtual method is correctly called from C++.''' + d = OtherDeviant() + d.callUnpureVirtual() + self.assertTrue(d.unpure_virtual_called) + + def testVirtualMethodCallString(self): + '''Test virtual method call returning string.''' + d = OtherDerived() + self.assertEqual(d.className(), 'OtherDerived') + self.assertEqual(d.getClassName(), 'OtherDerived') + + def testReimplementedVirtualMethodCallReturningString(self): + '''Test if a Python override of a reimplemented virtual method is correctly called from C++.''' + d = OtherDeviant() + self.assertEqual(d.className(), 'OtherDeviant') + self.assertEqual(d.getClassName(), 'OtherDeviant') + + def testCallToMethodWithAbstractArgument(self): + '''Call to method that expects an Abstract argument.''' + objId = 123 + d = OtherDerived(objId) + self.assertEqual(Abstract.getObjectId(d), objId) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/otherbinding/test_module_template.py b/sources/shiboken2/tests/otherbinding/test_module_template.py new file mode 100644 index 0000000..5d08944 --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/test_module_template.py @@ -0,0 +1,40 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from other import * +from sample import * + + +class MyObjectType(ObjectType): + pass + +class MyOtherObjectType(OtherObjectType): + value = 10 + + +obj = MyObjectType() diff --git a/sources/shiboken2/tests/otherbinding/typediscovery_test.py b/sources/shiboken2/tests/otherbinding/typediscovery_test.py new file mode 100644 index 0000000..6816b15 --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/typediscovery_test.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for type discovery''' + +import unittest + +from sample import Abstract, Base1, Derived, MDerived1, MDerived3, SonOfMDerived1 +from other import OtherMultipleDerived + +class TypeDiscoveryTest(unittest.TestCase): + + def testPureVirtualsOfImpossibleTypeDiscovery(self): + a = Derived.triggerImpossibleTypeDiscovery() + self.assertEqual(type(a), Abstract) + # call some pure virtual method + a.pureVirtual() + + def testAnotherImpossibleTypeDiscovery(self): + a = Derived.triggerAnotherImpossibleTypeDiscovery() + self.assertEqual(type(a), Derived) + + def testMultipleInheritance(self): + obj = OtherMultipleDerived.createObject("Base1"); + self.assertEqual(type(obj), Base1) + obj = OtherMultipleDerived.createObject("MDerived1"); + self.assertEqual(type(obj), MDerived1) + obj = OtherMultipleDerived.createObject("SonOfMDerived1"); + self.assertEqual(type(obj), SonOfMDerived1) + obj = OtherMultipleDerived.createObject("MDerived3"); + self.assertEqual(type(obj), MDerived3) + obj = OtherMultipleDerived.createObject("OtherMultipleDerived"); + self.assertEqual(type(obj), OtherMultipleDerived) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/otherbinding/typesystem_other.xml b/sources/shiboken2/tests/otherbinding/typesystem_other.xml new file mode 100644 index 0000000..63ccdd5 --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/typesystem_other.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/sources/shiboken2/tests/otherbinding/usersprimitivefromothermodule_test.py b/sources/shiboken2/tests/otherbinding/usersprimitivefromothermodule_test.py new file mode 100755 index 0000000..fe13cf6 --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/usersprimitivefromothermodule_test.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests user defined primitive type from a required module.''' + +import unittest +from other import Number + +class UserDefinedPrimitiveTypeFromRequiredModuleTest(unittest.TestCase): + + def testUsersPrimitiveFromRequiredModuleAsArgument(self): + '''static Number Number::fromComplex(Complex)''' + cpx = complex(3.0, 1.2) + number = Number.fromComplex(cpx) + self.assertEqual(number.value(), int(cpx.real)) + + def testUsersPrimitiveFromRequiredModuleAsReturnValue(self): + '''Complex Number::toComplex()''' + number = Number(12) + cpx = number.toComplex() + self.assertEqual(number.value(), int(cpx.real)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/otherbinding/wrongctor_test.py b/sources/shiboken2/tests/otherbinding/wrongctor_test.py new file mode 100644 index 0000000..15f43d0 --- /dev/null +++ b/sources/shiboken2/tests/otherbinding/wrongctor_test.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from sample import * +from other import * + +class Foo(OtherDerived): + def __init__(self): + Abstract.__init__(self, 2) # this should raise an exception + +class Foo2(ObjectType, OtherDerived): + def __init__(self): + ObjectType.__init__(self) + Abstract.__init__(self, 2) # this should raise an exception + + +class WrongCtorTest(unittest.TestCase): + def testIt(self): + self.assertRaises(TypeError, Foo) + self.assertRaises(TypeError, Foo2) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/py3k.py b/sources/shiboken2/tests/py3k.py new file mode 100644 index 0000000..5f2961a --- /dev/null +++ b/sources/shiboken2/tests/py3k.py @@ -0,0 +1,2 @@ +def printToFile(f, str): + print(str, file=f) diff --git a/sources/shiboken2/tests/py3kcompat.py b/sources/shiboken2/tests/py3kcompat.py new file mode 100644 index 0000000..0652089 --- /dev/null +++ b/sources/shiboken2/tests/py3kcompat.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys + +IS_PY3K = sys.version_info[0] == 3 + +if IS_PY3K: + def unicode(s): + return s + + def b(s): + return bytes(s, "UTF8") + + def l(n): + return n + + long = int +else: + def b(s): + return s + + def l(n): + return long(n) + + unicode = unicode + long = long diff --git a/sources/shiboken2/tests/samplebinding/CMakeLists.txt b/sources/shiboken2/tests/samplebinding/CMakeLists.txt new file mode 100644 index 0000000..32117e4 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/CMakeLists.txt @@ -0,0 +1,151 @@ +project(sample) + +set(sample_TYPESYSTEM +${CMAKE_CURRENT_SOURCE_DIR}/typesystem_sample.xml +) + +set(sample_SRC +${CMAKE_CURRENT_BINARY_DIR}/sample/abstractmodifications_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/abstract_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/arraymodifytest_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/base1_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/base2_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/base3_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/base4_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/base5_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/base6_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/blackbox_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/bytearray_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/bucket_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/classwithfunctionpointer_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/collector_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/color_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/ctorconvrule_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/cvlistuser_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/cvvaluetype_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/sbkdate_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/derived_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/derived_someinnerclass_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/echo_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/event_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/expression_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/friendofonlycopy_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/handleholder_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/implicitconv_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/implicitbase_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/implicittarget_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/intlist_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/sortedoverload_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/intwrapper_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/injectcode_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/listuser_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/mapuser_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/mderived1_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/mderived2_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/mderived3_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/mderived4_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/mderived5_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/modelindex_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/modifications_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/modifiedconstructor_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/noimplicitconversion_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/nondefaultctor_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/objectmodel_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/objecttype_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/objecttypebyvalue_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/objecttypeholder_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/objecttypederived_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/objecttypelayout_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/objecttypeptrlist_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/objecttypeoperators_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/objectview_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/objtypereference_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/oddbooluser_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/onlycopy_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/otherbase_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/overload_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/overload2_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/pairuser_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/pen_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/persistentmodelindex_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/photon_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/photon_base_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/photon_valueidentity_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/photon_valueduplicator_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/point_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/pointerholder_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/pointf_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/pointvaluelist_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/polygon_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/primitivestructpointerholder_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/privatector_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/privatedtor_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/protectedenumclass_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/protectednonpolymorphic_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/protectedpolymorphic_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/protectedpolymorphicdaughter_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/protectedpolymorphicgranddaughter_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/protectedproperty_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/protectedvirtualdestructor_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/rect_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/rectf_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/reference_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/referentmodelindex_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/sample_module_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/sample_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/sample_sample_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/samplenamespace_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/samplenamespace_someclass_someinnerclass_okthisisrecursiveenough_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/samplenamespace_someclass_someinnerclass_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/samplenamespace_someclass_someotherinnerclass_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/samplenamespace_someclass_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/samplenamespace_derivedfromnamespace_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/simplefile_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/size_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/sizef_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/sonofmderived1_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/str_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/strlist_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/time_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/templateptr_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/unremovednamespace_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/virtualdaughter_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/virtualdaughter2_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/virtualfinaldaughter_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/virtualdtor_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/virtualmethods_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/voidholder_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/valueandvirtual_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/filter_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/data_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/intersection_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/sample/union_wrapper.cpp +) + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/sample-binding.txt.in" + "${CMAKE_CURRENT_BINARY_DIR}/sample-binding.txt" @ONLY) + +add_custom_command(OUTPUT ${sample_SRC} +COMMAND shiboken2 --project-file=${CMAKE_CURRENT_BINARY_DIR}/sample-binding.txt ${GENERATOR_EXTRA_FLAGS} +DEPENDS ${sample_TYPESYSTEM} ${CMAKE_CURRENT_SOURCE_DIR}/global.h shiboken2 +WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +COMMENT "Running generator for 'sample' test binding..." +) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR} + ${SBK_PYTHON_INCLUDE_DIR} + ${libsample_SOURCE_DIR} + ${libshiboken_SOURCE_DIR} + ${libshiboken_BINARY_DIR}) +add_library(sample MODULE ${sample_SRC}) +set_property(TARGET sample PROPERTY PREFIX "") +set_property(TARGET sample PROPERTY OUTPUT_NAME "sample${PYTHON_EXTENSION_SUFFIX}") + +if(WIN32) + set_property(TARGET sample PROPERTY SUFFIX ".pyd") +endif() +target_link_libraries(sample + libsample + ${SBK_PYTHON_LIBRARIES} + libshiboken) diff --git a/sources/shiboken2/tests/samplebinding/__del___test.py b/sources/shiboken2/tests/samplebinding/__del___test.py new file mode 100644 index 0000000..0f34ebb --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/__del___test.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sample + +delCalled = False + +class MyObject(sample.ObjectType): + def __del__(self): + global delCalled + delCalled = True + +class TestDel(unittest.TestCase): + def testIt(self): + a = MyObject() + del a + self.assertTrue(delCalled) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/abstract_test.py b/sources/shiboken2/tests/samplebinding/abstract_test.py new file mode 100644 index 0000000..33358ad --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/abstract_test.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for Abstract class''' + +import sys +import unittest + +from sample import Abstract + +class Incomplete(Abstract): + def __init__(self): + Abstract.__init__(self) + +class Concrete(Abstract): + def __init__(self): + Abstract.__init__(self) + self.pure_virtual_called = False + self.unpure_virtual_called = False + + def pureVirtual(self): + self.pure_virtual_called = True + + def pureVirtualReturningVoidPtr(self): + return 42 + + def unpureVirtual(self): + self.unpure_virtual_called = True + + def virtualGettingAEnum(self, enum): + self.virtual_getting_enum = True + + +class AbstractTest(unittest.TestCase): + '''Test case for Abstract class''' + + def testAbstractPureVirtualMethodAvailability(self): + '''Test if Abstract class pure virtual method was properly wrapped.''' + self.assertTrue('pureVirtual' in dir(Abstract)) + + def testAbstractInstanciation(self): + '''Test if instanciation of an abstract class raises the correct exception.''' + self.assertRaises(NotImplementedError, Abstract) + + def testUnimplementedPureVirtualMethodCall(self): + '''Test if calling a pure virtual method raises the correct exception.''' + i = Incomplete() + self.assertRaises(NotImplementedError, i.pureVirtual) + + def testPureVirtualReturningVoidPtrReturnValue(self): + '''Test if a pure virtual method returning void ptr can be properly reimplemented''' + # Note that the semantics of reimplementing the pure virtual method in + # Python and calling it from C++ is undefined until it's decided how to + # cast the Python data types to void pointers + c = Concrete() + self.assertEqual(c.pureVirtualReturningVoidPtr(),42) + + def testReimplementedVirtualMethodCall(self): + '''Test if instanciation of an abstract class raises the correct exception.''' + i = Concrete() + self.assertRaises(NotImplementedError, i.callPureVirtual) + + def testReimplementedVirtualMethodCall(self): + '''Test if a Python override of a virtual method is correctly called from C++.''' + c = Concrete() + c.callUnpureVirtual() + self.assertTrue(c.unpure_virtual_called) + + def testImplementedPureVirtualMethodCall(self): + '''Test if a Python override of a pure virtual method is correctly called from C++.''' + c = Concrete() + c.callPureVirtual() + self.assertTrue(c.pure_virtual_called) + + def testEnumParameterOnVirtualMethodCall(self): + '''testEnumParameterOnVirtualMethodCall''' + c = Concrete() + c.callVirtualGettingEnum(Abstract.Short) + self.assertTrue(c.virtual_getting_enum) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/addedfunction_test.py b/sources/shiboken2/tests/samplebinding/addedfunction_test.py new file mode 100644 index 0000000..57cebbb --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/addedfunction_test.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for added functions.''' + +import unittest +from sample import SampleNamespace, ObjectType, Point + +class TestAddedFunctionsWithSimilarTypes(unittest.TestCase): + '''Adds new signatures very similar to already existing ones.''' + + def testValueTypeReferenceAndValue(self): + '''In C++ we have "function(const ValueType&, double)", + in Python we add "function(ValueType)".''' + point = Point(10, 20) + multiplier = 4.0 + control = (point.x() + point.y()) * multiplier + self.assertEqual(SampleNamespace.passReferenceToValueType(point, multiplier), control) + control = point.x() + point.y() + self.assertEqual(SampleNamespace.passReferenceToValueType(point), control) + + def testObjectTypeReferenceAndPointer(self): + '''In C++ we have "function(const ObjectType&, int)", + in Python we add "function(ValueType)".''' + obj = ObjectType() + obj.setObjectName('sbrubbles') + multiplier = 3.0 + control = len(obj.objectName()) * multiplier + self.assertEqual(SampleNamespace.passReferenceToObjectType(obj, multiplier), control) + control = len(obj.objectName()) + self.assertEqual(SampleNamespace.passReferenceToObjectType(obj), control) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/addedfunction_with_container_args_test.py b/sources/shiboken2/tests/samplebinding/addedfunction_with_container_args_test.py new file mode 100644 index 0000000..0954ba4 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/addedfunction_with_container_args_test.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for added functions with nested and multi-argument container types.''' + +import unittest +from sample import sum2d, sumproduct + +class TestAddedFunctionsWithContainerArgs(unittest.TestCase): + '''Tests added functions with nested and multi-argument container types.''' + + def testNestedContainerType(self): + '''Test added function with single-argument containers.''' + values = [[1,2],[3,4,5],[6]] + self.assertEqual(sum2d(values), 21) + + def testMultiArgContainerType(self): + '''Test added function with a two-argument container.''' + values = [(1,2),(3,4),(5,6)] + self.assertEqual(sumproduct(values), 44) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/argumentmodifications_test.py b/sources/shiboken2/tests/samplebinding/argumentmodifications_test.py new file mode 100644 index 0000000..aa27de3 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/argumentmodifications_test.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for method arguments modifications performed as described on typesystem.''' + +import sys +import unittest + +from sample import Modifications, Point + +class ArgumentModificationsTest(unittest.TestCase): + '''Test cases for method arguments modifications performed as described on typesystem.''' + + def setUp(self): + self.mods = Modifications() + + def tearDown(self): + del self.mods + + def testArgRemoval0(self): + '''Tests argument removal modifications on Modifications.argRemoval0.''' + # void [-> PyObject*] argRemoval0(int, bool, int = 123 [removed, new val = 321], int = 456) + # code-injection: returns tuple with received parameters plus removed ones + a0, a1, a2 = 1, True, 2 + self.assertEqual(self.mods.argRemoval0(a0, a1), (a0, a1, 321, 456)) + self.assertEqual(self.mods.argRemoval0(a0, a1, a2), (a0, a1, 321, a2)) + # the other wasn't modified + # void argRemoval0(int, bool, int, bool) + self.assertEqual(self.mods.argRemoval0(0, False, 0, False), None) + + def testArgRemoval1(self): + '''Tests argument removal modifications on Modifications.argRemoval1.''' + # void [-> PyObject*] argRemoval1(int, bool, Point = Point(1, 2) [removed], Point = Point(3, 4) [removed], int = 333) + # code-injection: returns tuple with received parameters plus removed ones + a0, a1, a2 = 1, True, 2 + self.assertEqual(self.mods.argRemoval1(a0, a1), (a0, a1, Point(1, 2), Point(3, 4), 333)) + self.assertEqual(self.mods.argRemoval1(a0, a1, a2), (a0, a1, Point(1, 2), Point(3, 4), a2)) + # the other wasn't modified + # void argRemoval1(int, bool, int, bool) + self.assertEqual(self.mods.argRemoval1(0, False, 0, False), None) + + def testArgRemoval2(self): + '''Tests argument removal modifications on Modifications.argRemoval2.''' + # void [-> PyObject*] argRemoval2(int, bool, Point = Point(1, 2) [removed], Point = Point(3, 4) [removed], int = 333) + # code-injection: returns tuple with received parameters plus removed ones + a0, a1, a2 = 1, True, 2 + self.assertEqual(self.mods.argRemoval2(a0, a1), (a0, a1, Point(1, 2), Point(3, 4), 333)) + self.assertEqual(self.mods.argRemoval2(a0, a1, a2), (a0, a1, Point(1, 2), Point(3, 4), a2)) + + def testArgRemoval3(self): + '''Tests argument removal modifications on Modifications.argRemoval3.''' + # void [-> PyObject*] argRemoval3(int, Point = Point(1, 2) [removed], bool = true, Point = Point(3, 4) [removed], int = 333) + # code-injection: returns tuple with received parameters plus removed ones + a0, a1, a2 = 1, True, 2 + self.assertEqual(self.mods.argRemoval3(a0), (a0, Point(1, 2), True, Point(3, 4), 333)) + self.assertEqual(self.mods.argRemoval3(a0, a1), (a0, Point(1, 2), a1, Point(3, 4), 333)) + self.assertEqual(self.mods.argRemoval3(a0, a1, a2), (a0, Point(1, 2), a1, Point(3, 4), a2)) + + def testArgRemoval4(self): + '''Tests argument removal modifications on Modifications.argRemoval4.''' + # void [-> PyObject*] argRemoval4(int, Point [removed, new val = Point(6, 9)], bool, Point = Point(3, 4) [removed], int = 333) + # code-injection: returns tuple with received parameters plus removed ones + a0, a1, a2 = 1, True, 2 + self.assertRaises(TypeError, self.mods.argRemoval4, a0) + self.assertEqual(self.mods.argRemoval4(a0, a1), (a0, Point(6, 9), a1, Point(3, 4), 333)) + self.assertEqual(self.mods.argRemoval4(a0, a1, a2), (a0, Point(6, 9), a1, Point(3, 4), a2)) + + def testArgRemoval5(self): + '''Tests argument removal modifications on Modifications.argRemoval5.''' + # void [-> PyObject*] argRemoval5(int [removed, new val = 100], bool, + # Point = Point(1, 2) [removed], + # Point = Point(3, 4) [removed], int = 333) + # code-injection: returns tuple with received parameters plus removed ones + a0, a1, a2 = True, 2, True + self.assertEqual(self.mods.argRemoval5(a0), (100, a0, Point(1, 2), Point(3, 4), 333)) + self.assertEqual(self.mods.argRemoval5(a0, a1), (100, a0, Point(1, 2), Point(3, 4), a1)) + # void [-> PyObject*] argRemoval5(int [removed, new val = 200], bool, int, bool) + # code-injection: returns tuple with received parameters plus removed ones + self.assertEqual(self.mods.argRemoval5(a0, a1, a2), (200, a0, a1, a2)) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/array_numpy_test.py b/sources/shiboken2/tests/samplebinding/array_numpy_test.py new file mode 100644 index 0000000..3753693 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/array_numpy_test.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for NumPy Array types.''' + +import unittest +import sample + +hasNumPy = False + +try: + import numpy + hasNumPy = True +except ImportError: + pass + +class ArrayTester(unittest.TestCase): + '''Test case for NumPy arrays.''' + + def testIntArray(self): + intList = numpy.array([1, 2, 3, 4], dtype = 'int32') + self.assertEqual(sample.sumIntArray(intList), 10) + + def testDoubleArray(self): + doubleList = numpy.array([1, 2, 3, 4], dtype = 'double') + self.assertEqual(sample.sumDoubleArray(doubleList), 10) + + def testIntMatrix(self): + intMatrix = numpy.array([[1, 2, 3], [4, 5, 6]], dtype = 'int32') + self.assertEqual(sample.sumIntMatrix(intMatrix), 21) + + def testDoubleMatrix(self): + doubleMatrix = numpy.array([[1, 2, 3], [4, 5, 6]], dtype = 'double') + self.assertEqual(sample.sumDoubleMatrix(doubleMatrix), 21) + +if __name__ == '__main__' and hasNumPy: + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/array_sequence_test.py b/sources/shiboken2/tests/samplebinding/array_sequence_test.py new file mode 100644 index 0000000..ac82170 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/array_sequence_test.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for Array types (PySequence).''' + +import unittest +import sample + +class ArrayTester(unittest.TestCase): + '''Test case for arrays.''' + + def testIntArray(self): + intList = [1, 2, 3, 4] + self.assertEqual(sample.sumIntArray(intList), 10) + + def testIntArrayModified(self): + intList = [1, 2, 3, 4] + tester = sample.ArrayModifyTest() + self.assertEqual(tester.sumIntArray(4, intList), 10) + + def testDoubleArray(self): + doubleList = [1.2, 2.3, 3.4, 4.5] + self.assertEqual(sample.sumDoubleArray(doubleList), 11.4) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/bug_554_test.py b/sources/shiboken2/tests/samplebinding/bug_554_test.py new file mode 100644 index 0000000..85848fc --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/bug_554_test.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Unit test for bug#554''' + +from sample import * + +class Bug554: + def crash(self): + class Crasher(ObjectType): + pass + +if __name__ == '__main__': + bug = Bug554() + bug.crash() + + diff --git a/sources/shiboken2/tests/samplebinding/bug_704_test.py b/sources/shiboken2/tests/samplebinding/bug_704_test.py new file mode 100644 index 0000000..9aa8653 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/bug_704_test.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from py3kcompat import IS_PY3K + +from sample import ObjectType + + +class NewStyle(object): + def name(self): + return "NewStyle" + +class OldStyle: + def name(self): + return "OldStyle" + +def defineNewStyle(): + class MyObjectNew(ObjectType, NewStyle): + pass + +def defineOldStyle(): + class MyObjectOld(ObjectType, OldStyle): + pass + +class ObjectTypeTest(unittest.TestCase): + '''Test cases to avoid declaring Shiboken classes with multiple inheritance from old style classes.''' + + def testObjectTypeNewStype(self): + defineNewStyle() + + def testObjectTypeOldStype(self): + # Py 3k doesn't have old style classes + if not IS_PY3K: + self.assertRaises(TypeError, defineOldStyle) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/bytearray_bufferprotocol.cpp b/sources/shiboken2/tests/samplebinding/bytearray_bufferprotocol.cpp new file mode 100644 index 0000000..3223870 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/bytearray_bufferprotocol.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#if PY_VERSION_HEX < 0x03000000 +// ByteArray buffer protocol functions +// See: http://www.python.org/dev/peps/pep-3118/ +extern "C" { +static Py_ssize_t SbkByteArray_segcountproc(PyObject* self, Py_ssize_t* lenp) +{ + if (lenp) + *lenp = Py_TYPE(self)->tp_as_sequence->sq_length(self); + return 1; +} +static Py_ssize_t SbkByteArray_readbufferproc(PyObject* self, Py_ssize_t segment, void** ptrptr) +{ + if (segment || !Shiboken::Object::isValid(self)) + return -1; + + ByteArray* cppSelf = %CONVERTTOCPP[ByteArray*](self); + *ptrptr = reinterpret_cast(const_cast(cppSelf->data())); + return cppSelf->size(); +} +PyBufferProcs SbkByteArrayBufferProc = { + /*bf_getreadbuffer*/ &SbkByteArray_readbufferproc, + /*bf_getwritebuffer*/ (writebufferproc)&SbkByteArray_readbufferproc, + /*bf_getsegcount*/ &SbkByteArray_segcountproc, + /*bf_getcharbuffer*/ (charbufferproc)&SbkByteArray_readbufferproc +}; +} +#endif diff --git a/sources/shiboken2/tests/samplebinding/bytearray_test.py b/sources/shiboken2/tests/samplebinding/bytearray_test.py new file mode 100644 index 0000000..e19271c --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/bytearray_test.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from os.path import isdir +from sample import ByteArray +from py3kcompat import b + + +class ByteArrayBufferProtocolTest(unittest.TestCase): + '''Tests ByteArray implementation of Python buffer protocol.''' + + def testByteArrayBufferProtocol(self): + # Tests ByteArray implementation of Python buffer protocol using the os.path.isdir + # function which an unicode object or other object implementing the Python buffer protocol. + isdir(str(ByteArray('/tmp'))) + + +class ByteArrayConcatenationOperatorTest(unittest.TestCase): + '''Test cases for ByteArray concatenation with '+' operator.''' + + def testConcatByteArrayAndPythonString(self): + # Test concatenation of a ByteArray with a Python string, in this order. + ba = ByteArray('foo') + result = ba + '\x00bar' + self.assertEqual(type(result), ByteArray) + self.assertEqual(result, 'foo\x00bar') + + def testConcatPythonStringAndByteArray(self): + # Test concatenation of a Python string with a ByteArray, in this order. + concat_python_string_add_qbytearray_worked = True + ba = ByteArray('foo') + result = 'bar\x00' + ba + self.assertEqual(type(result), ByteArray) + self.assertEqual(result, 'bar\x00foo') + + +class ByteArrayOperatorEqual(unittest.TestCase): + '''TestCase for operator ByteArray == ByteArray.''' + + def testDefault(self): + # ByteArray() == ByteArray() + obj1 = ByteArray() + obj2 = ByteArray() + self.assertEqual(obj1, obj2) + + def testSimple(self): + # ByteArray(some_string) == ByteArray(some_string) + string = 'egg snakes' + self.assertEqual(ByteArray(string), ByteArray(string)) + + def testPyString(self): + # ByteArray(string) == string + string = 'my test string' + self.assertEqual(ByteArray(string), string) + + def testQString(self): + # ByteArray(string) == string + string = 'another test string' + self.assertEqual(ByteArray(string), string) + + +class ByteArrayOperatorAt(unittest.TestCase): + '''TestCase for operator ByteArray[]''' + + def testInRange(self): + # ByteArray[x] where x is a valid index. + string = 'abcdefgh' + obj = ByteArray(string) + for i in range(len(string)): + self.assertEqual(obj[i], b(string[i])) + + def testInRangeReverse(self): + # ByteArray[x] where x is a valid index (reverse order). + string = 'abcdefgh' + obj = ByteArray(string) + for i in range(len(string)-1, 0, -1): + self.assertEqual(obj[i], b(string[i])) + + def testOutOfRange(self): + # ByteArray[x] where x is out of index. + string = '1234567' + obj = ByteArray(string) + self.assertRaises(IndexError, lambda :obj[len(string)]) + + def testNullStrings(self): + ba = ByteArray('\x00') + self.assertEqual(ba.at(0), '\x00') + self.assertEqual(ba[0], b('\x00')) + + +class ByteArrayOperatorLen(unittest.TestCase): + '''Test case for __len__ operator of ByteArray''' + + def testBasic(self): + '''ByteArray __len__''' + self.assertEqual(len(ByteArray()), 0) + self.assertEqual(len(ByteArray('')), 0) + self.assertEqual(len(ByteArray(' ')), 1) + self.assertEqual(len(ByteArray('yabadaba')), 8) + + +class ByteArrayAndPythonStr(unittest.TestCase): + '''Test case for __str__ operator of ByteArray''' + + def testStrOperator(self): + '''ByteArray __str__''' + self.assertEqual(ByteArray().__str__(), '') + self.assertEqual(ByteArray('').__str__(), '') + self.assertEqual(ByteArray('aaa').__str__(), 'aaa') + + def testPythonStrAndNull(self): + s1 = b('123\000321') + ba = ByteArray(s1) + s2 = ba.data() + self.assertEqual(s1, s2) + self.assertEqual(type(s1), type(s2)) + self.assertEqual(s1, ba) + self.assertNotEqual(type(s1), type(ba)) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/child_return_test.py b/sources/shiboken2/tests/samplebinding/child_return_test.py new file mode 100644 index 0000000..49c8431 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/child_return_test.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''The BlackBox class has cases of ownership transference between C++ and Python.''' + +import sys +import unittest + +from sample import * + +class ReturnOfChildTest(unittest.TestCase): + '''The BlackBox class has cases of ownership transference between C++ and Python.''' + + def testKillParentKeepingChild(self): + '''Ownership transference from Python to C++ and back again.''' + o1 = ObjectType.createWithChild() + child = o1.children()[0] + del o1 + self.assertRaises(RuntimeError, child.objectName) + + def testKillParentKeepingChild2(self): + '''Ownership transference from Python to C++ and back again.''' + o1 = ObjectType.createWithChild() + child = o1.findChild("child") + del o1 + self.assertRaises(RuntimeError, child.objectName) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/class_fields_test.py b/sources/shiboken2/tests/samplebinding/class_fields_test.py new file mode 100644 index 0000000..6dbacbd --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/class_fields_test.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Simple test case for accessing the exposed C++ class fields.''' + +from sys import getrefcount +import unittest + +from sample import Derived, Point, ObjectType + +class TestAccessingCppFields(unittest.TestCase): + '''Simple test case for accessing the exposed C++ class fields.''' + + def testAccessingPrimitiveTypeField(self): + '''Reads and writes a primitive type (in this case an 'int') field.''' + d = Derived() + self.assertEqual(type(d.primitiveField), int) + + # attribution + old_value = d.primitiveField + new_value = 2255 + d.primitiveField = new_value + self.assertEqual(d.primitiveField, new_value) + self.assertNotEqual(d.primitiveField, old_value) + + # attribution with a convertible type + value = 1.2 + d.primitiveField = value + self.assertEqual(d.primitiveField, int(value)) + + # attribution with invalid type + self.assertRaises(TypeError, lambda : setattr(d, 'primitiveField', None)) + + def testAccessingUsersPrimitiveTypeField(self): + '''Reads and writes an user's primitive type (in this case an 'Complex') field.''' + d = Derived() + self.assertEqual(type(d.userPrimitiveField), complex) + + # attribution + old_value = d.userPrimitiveField + new_value = complex(1.1, 2.2) + d.userPrimitiveField = new_value + self.assertEqual(d.userPrimitiveField, new_value) + self.assertNotEqual(d.userPrimitiveField, old_value) + + # attribution with invalid type + self.assertRaises(TypeError, lambda : setattr(d, 'userPrimitiveField', None)) + + def testAccessingValueTypeField(self): + '''Reads and writes a value type (in this case a 'Point') field.''' + d = Derived() + self.assertEqual(type(d.valueTypeField), Point) + + # attribution + old_value = d.valueTypeField + new_value = Point(-10, 537) + d.valueTypeField = new_value + self.assertEqual(d.valueTypeField, new_value) + + #object modify + d.valueTypeField.setX(10) + d.valueTypeField.setY(20) + self.assertEqual(d.valueTypeField.x(), 10) + self.assertEqual(d.valueTypeField.y(), 20) + + # attribution with invalid type + self.assertRaises(TypeError, lambda : setattr(d, 'valueTypeField', 123)) + + def testAccessingObjectTypeField(self): + '''Reads and writes a object type (in this case an 'ObjectType') field.''' + d = Derived() + + # attribution + old_value = d.objectTypeField + new_value = ObjectType() + d.objectTypeField = new_value + self.assertEqual(d.objectTypeField, new_value) + self.assertNotEqual(d.objectTypeField, old_value) + + # attribution with a convertible type + value = None + d.objectTypeField = value + self.assertEqual(d.objectTypeField, value) + + # attribution with invalid type + self.assertRaises(TypeError, lambda : setattr(d, 'objectTypeField', 123)) + + def testRefCountingAccessingObjectTypeField(self): + '''Accessing a object type field should respect the reference counting rules.''' + d = Derived() + + # attributing object to instance's field should increase its reference count + o1 = ObjectType() + refcount1 = getrefcount(o1) + d.objectTypeField = o1 + self.assertEqual(d.objectTypeField, o1) + self.assertEqual(getrefcount(d.objectTypeField), refcount1 + 1) + + # attributing a new object to instance's field should decrease the previous object's reference count + o2 = ObjectType() + refcount2 = getrefcount(o2) + d.objectTypeField = o2 + self.assertEqual(d.objectTypeField, o2) + self.assertEqual(getrefcount(o1), refcount1) + self.assertEqual(getrefcount(d.objectTypeField), refcount2 + 1) + + def testRefCountingOfReferredObjectAfterDeletingReferrer(self): + '''Deleting the object referring to other object should decrease the reference count of the referee.''' + d = Derived() + o = ObjectType() + refcount = getrefcount(o) + d.objectTypeField = o + self.assertEqual(getrefcount(o), refcount + 1) + del d + self.assertEqual(getrefcount(o), refcount) + + def testStaticField(self): + self.assertEqual(Derived.staticPrimitiveField, 0) + + def testAccessingUnsignedIntBitField(self): + d = Derived() + + # attribution + old_value = d.bitField + new_value = 1 + d.bitField= new_value + self.assertEqual(d.bitField, new_value) + self.assertNotEqual(d.bitField, old_value) + + # attribution with a convertible type + value = 1.2 + d.bitField = value + self.assertEqual(d.bitField, int(value)) + + # attribution with invalid type + self.assertRaises(TypeError, lambda : setattr(d, 'bitField', None)) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/collector_test.py b/sources/shiboken2/tests/samplebinding/collector_test.py new file mode 100644 index 0000000..f0b184a --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/collector_test.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for Collector class' shift operators.''' + +import sys +import unittest + +from sample import Collector, IntWrapper, ObjectType + + +class CollectorTest(unittest.TestCase): + '''Test cases for Collector class' shift operators.''' + + def testLShiftOperatorSingleUse(self): + '''Test case for using the Collector.__lshift__ operator just one time.''' + collector = Collector() + collector << 13 + self.assertEqual(collector.size(), 1) + self.assertEqual(collector.items(), [13]) + + def testLShiftOperatorMultipleUses(self): + '''Test case for using the Collector.__lshift__ operator many times in the same line.''' + collector = Collector() + collector << 2 << 3 << 5 << 7 << 11 + self.assertEqual(collector.size(), 5) + self.assertEqual(collector.items(), [2, 3, 5, 7, 11]) + +class CollectorExternalOperator(unittest.TestCase): + '''Test cases for external operators of Collector''' + + def testLShiftExternal(self): + '''Collector external operator''' + collector = Collector() + collector << IntWrapper(5) + self.assertEqual(collector.size(), 1) + self.assertEqual(collector.items(), [5]) + + +class CollectorObjectType(unittest.TestCase): + '''Test cases for Collector ObjectType''' + + def testBasic(self): + '''Collector << ObjectType # greedy collector''' + collector = Collector() + obj = ObjectType() + collector << obj + self.assertEqual(collector.items()[0], obj.identifier()) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/complex_test.py b/sources/shiboken2/tests/samplebinding/complex_test.py new file mode 100644 index 0000000..e14b07b --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/complex_test.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for Complex class''' + +import sys +import unittest + +import sample +from sample import Point + +class ComplexTest(unittest.TestCase): + '''Test case for conversions between C++ Complex class to Python complex class''' + + def testFunctionReturningComplexObject(self): + '''Test function returning a C++ Complex object.''' + cpx = sample.transmutePointIntoComplex(Point(5.0, 2.3)) + self.assertEqual(cpx, complex(5.0, 2.3)) + + def testFunctionReceivingComplexObjectAsArgument(self): + '''Test function returning a C++ Complex object.''' + pt = sample.transmuteComplexIntoPoint(complex(1.2, 3.4)) + # these assertions intentionally avoids to test the == operator, + # it should have its own test cases. + self.assertEqual(pt.x(), 1.2) + self.assertEqual(pt.y(), 3.4) + + def testComplexList(self): + '''Test list of C++ Complex objects conversion to a list of Python complex objects.''' + # the global function gimmeComplexList() is expected to return a list + # containing the following Complex values: [0j, 1.1+2.2j, 1.3+2.4j] + cpxlist = sample.gimmeComplexList() + self.assertEqual(cpxlist, [complex(), complex(1.1, 2.2), complex(1.3, 2.4)]) + + def testSumComplexPair(self): + '''Test sum of a tuple containing two complex objects.''' + cpx1 = complex(1.2, 3.4) + cpx2 = complex(5.6, 7.8) + self.assertEqual(sample.sumComplexPair((cpx1, cpx2)), cpx1 + cpx2) + + def testUsingTuples(self): + cpx1, cpx2 = (1.2, 3.4), (5.6, 7.8) + self.assertEqual(sample.sumComplexPair((cpx1, cpx2)), sample.sumComplexPair((complex(*cpx1), complex(*cpx2)))) + cpx1, cpx2 = (1, 3), (5, 7) + self.assertEqual(sample.sumComplexPair((cpx1, cpx2)), sample.sumComplexPair((complex(*cpx1), complex(*cpx2)))) + cpx1, cpx2 = (1.2, 3), (5.6, 7) + self.assertEqual(sample.sumComplexPair((cpx1, cpx2)), sample.sumComplexPair((complex(*cpx1), complex(*cpx2)))) + cpx1, cpx2 = (1, 2, 3), (4, 5, 7) + self.assertRaises(TypeError, sample.sumComplexPair, (cpx1, cpx2)) + cpx1, cpx2 = ('1', '2'), ('4', '5') + self.assertRaises(TypeError, sample.sumComplexPair, (cpx1, cpx2)) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/conversion_operator_test.py b/sources/shiboken2/tests/samplebinding/conversion_operator_test.py new file mode 100644 index 0000000..5faaaa4 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/conversion_operator_test.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for implicit conversion generated by conversion operator.''' + +import unittest + +from sample import Time, StrList + +class ConversionOperatorTest(unittest.TestCase): + '''Test cases for implicit conversion generated by conversion operator.''' + + def testConversionOperator(self): + '''Time defined an conversion operator for Str, so passing a Time object to a method expecting a Str should work.''' + t = Time(1, 2, 3) + t_str = t.toString() + sl = StrList() + + # StrList.append expects a Str object. + sl.append(t) + + self.assertEqual(len(sl), 1) + self.assertEqual(sl[0], t_str) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/copy_test.py b/sources/shiboken2/tests/samplebinding/copy_test.py new file mode 100644 index 0000000..7505454 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/copy_test.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for deep copy of objects''' + +import copy +import unittest + +try: + import cPickle as pickle +except ImportError: + import pickle + + +from sample import Point + + +class SimpleCopy(unittest.TestCase): + '''Simple copy of objects''' + + def testCopy(self): + point = Point(0.1, 2.4) + new_point = copy.copy(point) + + self.assertTrue(point is not new_point) + self.assertEqual(point, new_point) + + +class DeepCopy(unittest.TestCase): + '''Deep copy with shiboken objects''' + + def testDeepCopy(self): + '''Deep copy of value types''' + point = Point(3.1, 4.2) + new_point = copy.deepcopy([point])[0] + + self.assertTrue(point is not new_point) + self.assertEqual(point, new_point) + + +class PicklingTest(unittest.TestCase): + '''Support pickling''' + + def testSimple(self): + '''Simple pickling and unpickling''' + + point = Point(10.2, 43.5) + + data = pickle.dumps(point) + new_point = pickle.loads(data) + + self.assertEqual(point, new_point) + self.assertTrue(point is not new_point) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/ctorconvrule_test.py b/sources/shiboken2/tests/samplebinding/ctorconvrule_test.py new file mode 100644 index 0000000..b7efead --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/ctorconvrule_test.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for proper generation of constructor altered by conversion-rule tag.''' + +import unittest + +from sample import CtorConvRule + +class TestCtorConvRule(unittest.TestCase): + '''Simple test case for CtorConvRule''' + + def testCtorConvRule(self): + '''Test CtorConvRule argument modification through conversion-rule tag.''' + value = 123 + obj = CtorConvRule(value) + self.assertEqual(obj.value(), value + 1) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/cyclic_test.py b/sources/shiboken2/tests/samplebinding/cyclic_test.py new file mode 100644 index 0000000..1940c8d --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/cyclic_test.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from sample import ObjectType +from sample import ObjectView +from sample import ObjectModel + + + +class ObjTest(unittest.TestCase): + + def test_cyclic_dependency_withParent(self): + """Create 2 objects with a cyclic dependency, so that they can + only be removed by the garbage collector, and then invoke the + garbage collector in a different thread. + """ + import gc + + class CyclicChildObject(ObjectType): + def __init__(self, parent): + super(CyclicChildObject, self).__init__(parent) + self._parent = parent + + class CyclicObject(ObjectType): + def __init__(self): + super(CyclicObject, self).__init__() + CyclicChildObject(self) + + # turn off automatic garbage collection, to be able to trigger it + # at the 'right' time + gc.disable() + alive = lambda :sum(isinstance(o, CyclicObject) for o in gc.get_objects() ) + + # + # first proof that the wizard is only destructed by the garbage + # collector + # + cycle = CyclicObject() + self.assertTrue(alive()) + del cycle + self.assertTrue(alive()) + gc.collect() + self.assertFalse(alive()) + + def test_cyclic_dependency_withKeepRef(self): + """Create 2 objects with a cyclic dependency, so that they can + only be removed by the garbage collector, and then invoke the + garbage collector in a different thread. + """ + import gc + + class CyclicChildObject(ObjectView): + def __init__(self, model): + super(CyclicChildObject, self).__init__(None) + self.setModel(model) + + class CyclicObject(ObjectModel): + def __init__(self): + super(CyclicObject, self).__init__() + self._view = CyclicChildObject(self) + + # turn off automatic garbage collection, to be able to trigger it + # at the 'right' time + gc.disable() + alive = lambda :sum(isinstance(o, CyclicObject) for o in gc.get_objects() ) + + # + # first proof that the wizard is only destructed by the garbage + # collector + # + cycle = CyclicObject() + self.assertTrue(alive()) + del cycle + self.assertTrue(alive()) + gc.collect() + self.assertFalse(alive()) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/date_test.py b/sources/shiboken2/tests/samplebinding/date_test.py new file mode 100644 index 0000000..fe7b9ac --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/date_test.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for python conversions types ''' + +import sys +import unittest +from datetime import date + +from sample import SbkDate + +class DateConversionTest(unittest.TestCase): + + def testConstructorWithDateObject(self): + pyDate = date(2010, 12, 12) + cDate = SbkDate(pyDate) + self.assertTrue(cDate.day(), pyDate.day) + self.assertTrue(cDate.month(), pyDate.month) + self.assertTrue(cDate.year(), pyDate.year) + + def testToPythonFunction(self): + cDate = SbkDate(2010, 12, 12) + pyDate = cDate.toPython() + self.assertTrue(cDate.day(), pyDate.day) + self.assertTrue(cDate.month(), pyDate.month) + self.assertTrue(cDate.year(), pyDate.year) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/decisor_test.py b/sources/shiboken2/tests/samplebinding/decisor_test.py new file mode 100644 index 0000000..9102e2d --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/decisor_test.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for the method overload decisor.''' + +import unittest + +from sample import SampleNamespace, Point, ObjectType, ObjectModel + +class DecisorTest(unittest.TestCase): + '''Test cases for the method overload decisor.''' + + def testCallWithInvalidParametersSideA(self): + '''Call a method missing with the last argument missing. + This can trigger the bug #262, which means using an argument + not provided by the user.''' + pt = Point() + self.assertRaises(TypeError, SampleNamespace.forceDecisorSideA, pt) + + def testCallWithInvalidParametersSideB(self): + '''Same as the previous test, but with an integer as first argument, + just to complicate things for the overload method decisor.''' + pt = Point() + self.assertRaises(TypeError, SampleNamespace.forceDecisorSideB, 1, pt) + + def testDecideCallWithInheritance(self): + '''Call methods overloads that receive parent and inheritor classes' instances.''' + objecttype = ObjectType() + objectmodel = ObjectModel() + self.assertEqual(ObjectModel.receivesObjectTypeFamily(objecttype), ObjectModel.ObjectTypeCalled) + self.assertNotEqual(ObjectModel.receivesObjectTypeFamily(objecttype), ObjectModel.ObjectModelCalled) + self.assertEqual(ObjectModel.receivesObjectTypeFamily(objectmodel), ObjectModel.ObjectModelCalled) + self.assertNotEqual(ObjectModel.receivesObjectTypeFamily(objectmodel), ObjectModel.ObjectTypeCalled) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/delete_test.py b/sources/shiboken2/tests/samplebinding/delete_test.py new file mode 100644 index 0000000..780da41 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/delete_test.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sample +import shiboken2 as shiboken + +class DeleteTest(unittest.TestCase): + def testNonCppWrapperClassDelete(self): + """Would segfault when shiboken.delete called on obj not created from + Python """ + obj = sample.ObjectType() + child = obj.createChild(None) + shiboken.delete(child) + assert not shiboken.isValid(child) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/deprecated_test.py b/sources/shiboken2/tests/samplebinding/deprecated_test.py new file mode 100644 index 0000000..b08f652 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/deprecated_test.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import warnings +import unittest + +from sample import ObjectType + +class TestDeprecatedCall(unittest.TestCase): + def testCallWithError(self): + o = ObjectType() + warnings.simplefilter('error') + self.assertRaises(DeprecationWarning, o.deprecatedFunction) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/derived_test.py b/sources/shiboken2/tests/samplebinding/derived_test.py new file mode 100644 index 0000000..05cd648 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/derived_test.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for Derived class''' + +import sys +import unittest + +import sample +from sample import Abstract, Derived, OverloadedFuncEnum + +class Deviant(Derived): + def __init__(self): + Derived.__init__(self) + self.pure_virtual_called = False + self.unpure_virtual_called = False + + def pureVirtual(self): + self.pure_virtual_called = True + + def unpureVirtual(self): + self.unpure_virtual_called = True + + def className(self): + return 'Deviant' + +class DerivedTest(unittest.TestCase): + '''Test case for Derived class''' + + def testParentClassMethodsAvailability(self): + '''Test if Derived class really inherits its methods from parent.''' + inherited_methods = set(['callPureVirtual', 'callUnpureVirtual', + 'id_', 'pureVirtual', 'unpureVirtual']) + self.assertTrue(inherited_methods.issubset(dir(Derived))) + + def testOverloadedMethodCall(self): + '''Test if the correct overloaded method is being called.''' + derived = Derived() + + result = derived.overloaded(1, 2) + self.assertEqual(type(result), OverloadedFuncEnum) + self.assertEqual(result, sample.OverloadedFunc_ii) + + result = derived.overloaded(3) + self.assertEqual(type(result), OverloadedFuncEnum) + self.assertEqual(result, sample.OverloadedFunc_ii) + + result = derived.overloaded(4.4) + self.assertEqual(type(result), OverloadedFuncEnum) + self.assertEqual(result, sample.OverloadedFunc_d) + + def testOtherOverloadedMethodCall(self): + '''Another test to check overloaded method calling, just to double check.''' + derived = Derived() + + result = derived.otherOverloaded(1, 2, True, 3.3) + self.assertEqual(type(result), Derived.OtherOverloadedFuncEnum) + self.assertEqual(result, sample.Derived.OtherOverloadedFunc_iibd) + + result = derived.otherOverloaded(1, 2.2) + self.assertEqual(type(result), Derived.OtherOverloadedFuncEnum) + self.assertEqual(result, Derived.OtherOverloadedFunc_id) + + def testOverloadedMethodCallWithDifferentNumericTypes(self): + '''Test if the correct overloaded method accepts a different numeric type as argument.''' + derived = Derived() + result = derived.overloaded(1.1, 2.2) + self.assertEqual(type(result), OverloadedFuncEnum) + self.assertEqual(result, sample.OverloadedFunc_ii) + + def testOverloadedMethodCallWithWrongNumberOfArguments(self): + '''Test if a call to an overloaded method with the wrong number of arguments raises an exception.''' + derived = Derived() + self.assertRaises(TypeError, derived.otherOverloaded, 1, 2, True) + + def testReimplementedPureVirtualMethodCall(self): + '''Test if a Python override of a implemented pure virtual method is correctly called from C++.''' + d = Deviant() + d.callPureVirtual() + self.assertTrue(d.pure_virtual_called) + + def testReimplementedVirtualMethodCall(self): + '''Test if a Python override of a reimplemented virtual method is correctly called from C++.''' + d = Deviant() + d.callUnpureVirtual() + self.assertTrue(d.unpure_virtual_called) + + def testVirtualMethodCallString(self): + '''Test virtual method call returning string.''' + d = Derived() + self.assertEqual(d.className(), 'Derived') + self.assertEqual(d.getClassName(), 'Derived') + + def testReimplementedVirtualMethodCallReturningString(self): + '''Test if a Python override of a reimplemented virtual method is correctly called from C++.''' + d = Deviant() + self.assertEqual(d.className(), 'Deviant') + self.assertEqual(d.getClassName(), 'Deviant') + + def testSingleArgument(self): + '''Test singleArgument call.''' + d = Derived() + self.assertTrue(d.singleArgument(False)) + self.assertTrue(not d.singleArgument(True)) + + def testMethodCallWithDefaultValue(self): + '''Test method call with default value.''' + d = Derived() + self.assertEqual(d.defaultValue(3), 3.1) + self.assertEqual(d.defaultValue(), 0.1) + + def testCallToMethodWithAbstractArgument(self): + '''Call to method that expects an Abstract argument.''' + objId = 123 + d = Derived(objId) + self.assertEqual(Abstract.getObjectId(d), objId) + + def testObjectCreationWithParentType(self): + '''Derived class creates an instance of itself in C++ and returns it as a pointer to its ancestor Abstract.''' + obj = Derived.createObject() + self.assertEqual(type(obj), Derived) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/duck_punching_test.py b/sources/shiboken2/tests/samplebinding/duck_punching_test.py new file mode 100644 index 0000000..efc8f34 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/duck_punching_test.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for virtual methods.''' + +import types +import unittest +from py3kcompat import IS_PY3K + +from sample import VirtualMethods, SimpleFile, Point + +def MethodTypeCompat(func, instance): + if IS_PY3K: + return types.MethodType(func, instance) + else: + return types.MethodType(func, instance, type(instance)) + +class Duck(VirtualMethods): + def __init__(self): + VirtualMethods.__init__(self) + +class Monkey(SimpleFile): + def __init__(self, filename): + SimpleFile.__init__(self, filename) + +class DuckPunchingTest(unittest.TestCase): + '''Test case for duck punching (aka "monkey patching").''' + + def setUp(self): + self.multiplier = 2.0 + self.duck_method_called = False + self.call_counter = 0 + + def testMonkeyPatchOnVirtualMethod(self): + '''Injects new 'virtualMethod0' on a VirtualMethods instance and makes C++ call it.''' + vm = VirtualMethods() + pt, val, cpx, b = Point(1.1, 2.2), 4, complex(3.3, 4.4), True + + result1 = vm.virtualMethod0(pt, val, cpx, b) + result2 = vm.callVirtualMethod0(pt, val, cpx, b) + self.assertEqual(result1, result2) + self.assertEqual(result1, VirtualMethods.virtualMethod0(vm, pt, val, cpx, b)) + + def myVirtualMethod0(obj, pt, val, cpx, b): + self.duck_method_called = True + return VirtualMethods.virtualMethod0(obj, pt, val, cpx, b) * self.multiplier + vm.virtualMethod0 = MethodTypeCompat(myVirtualMethod0, vm) + + result1 = vm.callVirtualMethod0(pt, val, cpx, b) + self.assertTrue(self.duck_method_called) + + result2 = vm.virtualMethod0(pt, val, cpx, b) + self.assertEqual(result1, result2) + self.assertEqual(result1, VirtualMethods.virtualMethod0(vm, pt, val, cpx, b) * self.multiplier) + + # This is done to decrease the refcount of the vm object + # allowing the object wrapper to be deleted before the + # BindingManager. This is useful when compiling Shiboken + # for debug, since the BindingManager destructor has an + # assert that checks if the wrapper mapper is empty. + vm.virtualMethod0 = None + + def testMonkeyPatchOnVirtualMethodWithInheritance(self): + '''Injects new 'virtualMethod0' on an object that inherits from VirtualMethods and makes C++ call it.''' + duck = Duck() + pt, val, cpx, b = Point(1.1, 2.2), 4, complex(3.3, 4.4), True + + result1 = duck.virtualMethod0(pt, val, cpx, b) + result2 = duck.callVirtualMethod0(pt, val, cpx, b) + self.assertEqual(result1, result2) + self.assertEqual(result1, VirtualMethods.virtualMethod0(duck, pt, val, cpx, b)) + + def myVirtualMethod0(obj, pt, val, cpx, b): + self.duck_method_called = True + return VirtualMethods.virtualMethod0(obj, pt, val, cpx, b) * self.multiplier + duck.virtualMethod0 = MethodTypeCompat(myVirtualMethod0, duck) + + result1 = duck.callVirtualMethod0(pt, val, cpx, b) + self.assertTrue(self.duck_method_called) + + result2 = duck.virtualMethod0(pt, val, cpx, b) + self.assertEqual(result1, result2) + self.assertEqual(result1, VirtualMethods.virtualMethod0(duck, pt, val, cpx, b) * self.multiplier) + + duck.virtualMethod0 = None + + def testMonkeyPatchOnMethodWithStaticAndNonStaticOverloads(self): + '''Injects new 'exists' on a SimpleFile instance and makes C++ call it.''' + simplefile = SimpleFile('foobar') + + # Static 'exists' + simplefile.exists('sbrubbles') + self.assertFalse(self.duck_method_called) + # Non-static 'exists' + simplefile.exists() + self.assertFalse(self.duck_method_called) + + def myExists(obj): + self.duck_method_called = True + return False + simplefile.exists = MethodTypeCompat(myExists, simplefile) + + # Static 'exists' was overridden by the monkey patch, which accepts 0 arguments + self.assertRaises(TypeError, simplefile.exists, 'sbrubbles') + # Monkey patched exists + simplefile.exists() + self.assertTrue(self.duck_method_called) + + simplefile.exists = None + + def testMonkeyPatchOnMethodWithStaticAndNonStaticOverloadsWithInheritance(self): + '''Injects new 'exists' on an object that inherits from SimpleFile and makes C++ call it.''' + monkey = Monkey('foobar') + + # Static 'exists' + monkey.exists('sbrubbles') + self.assertFalse(self.duck_method_called) + # Non-static 'exists' + monkey.exists() + self.assertFalse(self.duck_method_called) + + def myExists(obj): + self.duck_method_called = True + return False + monkey.exists = MethodTypeCompat(myExists, monkey) + + # Static 'exists' was overridden by the monkey patch, which accepts 0 arguments + self.assertRaises(TypeError, monkey.exists, 'sbrubbles') + # Monkey patched exists + monkey.exists() + self.assertTrue(self.duck_method_called) + + monkey.exists = None + + def testForInfiniteRecursion(self): + def myVirtualMethod0(obj, pt, val, cpx, b): + self.call_counter += 1 + return VirtualMethods.virtualMethod0(obj, pt, val, cpx, b) + vm = VirtualMethods() + vm.virtualMethod0 = MethodTypeCompat(myVirtualMethod0, vm) + pt, val, cpx, b = Point(1.1, 2.2), 4, complex(3.3, 4.4), True + vm.virtualMethod0(pt, val, cpx, b) + self.assertEqual(self.call_counter, 1) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/echo_test.py b/sources/shiboken2/tests/samplebinding/echo_test.py new file mode 100644 index 0000000..b91394b --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/echo_test.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for with const char* as argument''' + +import unittest + +from sample import Echo + +class TestEcho(unittest.TestCase): + '''Simple test case for Echo.echo''' + + def testEcho(self): + '''Test function added with const char * as arg''' + x = 'Foobar' + y = Echo().echo(x) + self.assertEqual(x, y) + + def testCallOperator(self): + e = Echo() + self.assertEqual(e("Hello", 3), "Hello3"); +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/enum_test.py b/sources/shiboken2/tests/samplebinding/enum_test.py new file mode 100644 index 0000000..7e1cac8 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/enum_test.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for Python representation of C++ enums.''' + +import os +import sys +import unittest + +import sample +from sample import SampleNamespace, ObjectType, Event +from py3kcompat import IS_PY3K, b + +def createTempFile(): + if sys.version_info >= (2, 6): + import tempfile + return tempfile.SpooledTemporaryFile(mode='rw') + else: + return os.tmpfile() + +class EnumTest(unittest.TestCase): + '''Test case for Python representation of C++ enums.''' + + def testEnumRepr(self): + enum = SampleNamespace.Option(1) + self.assertEqual(eval(repr(enum)), enum) + + enum = SampleNamespace.Option(999) + self.assertEqual(eval(repr(enum)), enum) + + def testHashability(self): + self.assertEqual(hash(SampleNamespace.TwoIn), hash(SampleNamespace.TwoOut)) + self.assertNotEqual(hash(SampleNamespace.TwoIn), hash(SampleNamespace.OneIn)) + + def testEnumValuesInsideEnum(self): + '''Enum values should be accessible inside the enum as well as outside.''' + for value_name in SampleNamespace.Option.values: + enum_item1 = getattr(SampleNamespace.Option, value_name) + enum_item2 = getattr(SampleNamespace, value_name) + self.assertEqual(enum_item1, enum_item2) + + def testPassingIntegerOnEnumArgument(self): + '''Tries to use an integer in place of an enum argument.''' + self.assertRaises(TypeError, SampleNamespace.getNumber, 1) + + def testBuildingEnumFromIntegerValue(self): + '''Tries to build the proper enum using an integer.''' + SampleNamespace.getNumber(SampleNamespace.Option(1)) + + def testBuildingEnumWithDefaultValue(self): + '''Enum constructor with default value''' + enum = SampleNamespace.Option() + self.assertEqual(enum, SampleNamespace.None_) + + def testEnumConversionToAndFromPython(self): + '''Conversion of enum objects from Python to C++ back again.''' + enumout = SampleNamespace.enumInEnumOut(SampleNamespace.TwoIn) + self.assertTrue(enumout, SampleNamespace.TwoOut) + self.assertEqual(repr(enumout), repr(SampleNamespace.TwoOut)) + + def testEnumConstructorWithTooManyParameters(self): + '''Calling the constructor of non-extensible enum with the wrong number of parameters.''' + self.assertRaises(TypeError, SampleNamespace.InValue, 13, 14) + + def testEnumConstructorWithNonNumberParameter(self): + '''Calling the constructor of non-extensible enum with a string.''' + self.assertRaises(TypeError, SampleNamespace.InValue, '1') + + def testEnumItemAsDefaultValueToIntArgument(self): + '''Calls function with an enum item as default value to an int argument.''' + self.assertEqual(SampleNamespace.enumItemAsDefaultValueToIntArgument(), SampleNamespace.ZeroIn) + self.assertEqual(SampleNamespace.enumItemAsDefaultValueToIntArgument(SampleNamespace.ZeroOut), SampleNamespace.ZeroOut) + self.assertEqual(SampleNamespace.enumItemAsDefaultValueToIntArgument(123), 123) + + def testAnonymousGlobalEnums(self): + '''Checks availability of anonymous global enum items.''' + self.assertEqual(sample.AnonymousGlobalEnum_Value0, 0) + self.assertEqual(sample.AnonymousGlobalEnum_Value1, 1) + + def testAnonymousClassEnums(self): + '''Checks availability of anonymous class enum items.''' + self.assertEqual(SampleNamespace.AnonymousClassEnum_Value0, 0) + self.assertEqual(SampleNamespace.AnonymousClassEnum_Value1, 1) + + def testEnumClasses(self): + # C++ 11: values of enum classes need to be fully qualified to match C++ + sum = Event.EventTypeClass.Value1 + Event.EventTypeClass.Value2 + self.assertEqual(sum, 1) + + def testSetEnum(self): + event = Event(Event.ANY_EVENT) + self.assertEqual(event.eventType(), Event.ANY_EVENT) + event.setEventType(Event.BASIC_EVENT) + self.assertEqual(event.eventType(), Event.BASIC_EVENT) + event.setEventTypeByConstRef(Event.SOME_EVENT) + self.assertEqual(event.eventType(), Event.SOME_EVENT) + + def testEnumTpPrintImplementation(self): + '''Without SbkEnum.tp_print 'print' returns the enum represented as an int.''' + tmpfile = createTempFile() + if IS_PY3K: + from py3k import printToFile + printToFile(tmpfile, Event.ANY_EVENT) + else: + sys.stdout = tmpfile + print(Event.ANY_EVENT) + sys.stdout = sys.__stdout__ + tmpfile.seek(0) + text = tmpfile.read().strip() + tmpfile.close() + self.assertEqual(text, str(Event.ANY_EVENT)) + self.assertEqual(text, repr(Event.ANY_EVENT)) + + def testEnumArgumentWithDefaultValue(self): + '''Option enumArgumentWithDefaultValue(Option opt = UnixTime);''' + self.assertEqual(SampleNamespace.enumArgumentWithDefaultValue(), SampleNamespace.UnixTime) + self.assertEqual(SampleNamespace.enumArgumentWithDefaultValue(SampleNamespace.RandomNumber), SampleNamespace.RandomNumber) + + +class MyEvent(Event): + def __init__(self): + Event.__init__(self, Event.EventType(999)) + +class OutOfBoundsTest(unittest.TestCase): + def testValue(self): + e = MyEvent() + self.assertEqual(repr(e.eventType()), 'sample.Event.EventType(999)') + + def testNoneName(self): + e = MyEvent() + t = e.eventType() + self.assertEqual(t.name, None) + +class EnumOverloadTest(unittest.TestCase): + '''Test case for overloads involving enums''' + + def testWithInt(self): + '''Overload with Enums and ints with default value''' + o = ObjectType() + + self.assertEqual(o.callWithEnum('', Event.ANY_EVENT, 9), 81) + self.assertEqual(o.callWithEnum('', 9), 9) + +class EnumOperators(unittest.TestCase): + '''Test case for operations on enums''' + + def testInequalitySameObject(self): + self.assertFalse(Event.ANY_EVENT != Event.ANY_EVENT) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/enumfromremovednamespace_test.py b/sources/shiboken2/tests/samplebinding/enumfromremovednamespace_test.py new file mode 100644 index 0000000..5803a99 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/enumfromremovednamespace_test.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +import sample + +class TestEnumFromRemovedNamespace(unittest.TestCase): + def testEnumPromotedToGlobal(self): + sample.RemovedNamespace1_Enum + sample.RemovedNamespace1_Enum_Value0 + sample.RemovedNamespace1_AnonymousEnum_Value0 + sample.RemovedNamespace2_Enum + sample.RemovedNamespace2_Enum_Value0 + + def testEnumPromotedToUpperNamespace(self): + sample.UnremovedNamespace + sample.UnremovedNamespace.RemovedNamespace3_Enum + sample.UnremovedNamespace.RemovedNamespace3_Enum_Value0 + sample.UnremovedNamespace.RemovedNamespace3_AnonymousEnum_Value0 + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/event_loop_call_virtual_test.py b/sources/shiboken2/tests/samplebinding/event_loop_call_virtual_test.py new file mode 100644 index 0000000..63a5a8a --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/event_loop_call_virtual_test.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Simple event loop dispatcher test.''' + +import time +import unittest +from random import random + +from sample import ObjectType, Event + + +class NoOverride(ObjectType): + + pass + + +class Override(ObjectType): + + def __init__(self): + ObjectType.__init__(self) + self.called = False + + def event(self, event): + self.called = True + return True + + +class TestEventLoop(unittest.TestCase): + + def testEventLoop(self): + '''Calling virtuals in a event loop''' + objs = [ObjectType(), NoOverride(), Override()] + + evaluated = ObjectType.processEvent(objs, + Event(Event.BASIC_EVENT)) + + self.assertEqual(evaluated, 3) + self.assertTrue(objs[2].called) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/event_loop_thread_test.py b/sources/shiboken2/tests/samplebinding/event_loop_thread_test.py new file mode 100644 index 0000000..1a1fe84 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/event_loop_thread_test.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import time +import threading +import unittest +from random import random + +from sample import ObjectType, Event + + +class Producer(ObjectType): + + def __init__(self): + ObjectType.__init__(self) + self.data = None + self.read = False + + def event(self, event): + self.data = random() + + while not self.read: + time.sleep(0.01) + + return True + + +class Collector(threading.Thread): + + def __init__(self, objects): + threading.Thread.__init__(self) + self.max_runs = len(objects) + self.objects = objects + self.data = [] + + def run(self): + i = 0 + while i < self.max_runs: + if self.objects[i].data is not None: + self.data.append(self.objects[i].data) + self.objects[i].read = True + i += 1 + time.sleep(0.01) + + +class TestEventLoopWithThread(unittest.TestCase): + '''Communication between a python thread and an simple + event loop in C++''' + + def testBasic(self): + '''Allowing threads and calling virtuals from C++''' + number = 10 + objs = [Producer() for x in range(number)] + thread = Collector(objs) + + thread.start() + + evaluated = ObjectType.processEvent(objs, + Event(Event.BASIC_EVENT)) + + thread.join() + + producer_data = [x.data for x in objs] + self.assertEqual(evaluated, number) + self.assertEqual(producer_data, thread.data) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/filter_test.py b/sources/shiboken2/tests/samplebinding/filter_test.py new file mode 100644 index 0000000..577a15b --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/filter_test.py @@ -0,0 +1,45 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from sample import Data, Intersection, Union + +class TestFilters(unittest.TestCase): + + def testAnd(self): + + f1 = Data(Data.Name, "joe") + f2 = Union() + + inter = f1 & f2 + + self.assertEqual(type(inter), Intersection) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/global.h b/sources/shiboken2/tests/samplebinding/global.h new file mode 100644 index 0000000..f2add93 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/global.h @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "abstract.h" +#include "blackbox.h" +#include "bytearray.h" +#include "bucket.h" +#include "collector.h" +#include "complex.h" +#include "ctorconvrule.h" +#include "cvlist.h" +#include "sbkdate.h" +#include "derived.h" +#include "echo.h" +#include "functions.h" +#include "implicitconv.h" +#include "overloadsort.h" +#include "handle.h" +#include "injectcode.h" +#include "list.h" +#include "listuser.h" +#include "mapuser.h" +#include "modelindex.h" +#include "modifications.h" +#include "modified_constructor.h" +#include "multiple_derived.h" +#include "noimplicitconversion.h" +#include "nondefaultctor.h" +#include "objectmodel.h" +#include "objecttype.h" +#include "objecttypebyvalue.h" +#include "objecttypeholder.h" +#include "objecttypelayout.h" +#include "objecttypeoperators.h" +#include "objectview.h" +#include "oddbool.h" +#include "onlycopy.h" +#include "overload.h" +#include "pairuser.h" +#include "pen.h" +#include "photon.h" +#include "point.h" +#include "pointf.h" +#include "pointerholder.h" +#include "polygon.h" +#include "privatector.h" +#include "privatedtor.h" +#include "protected.h" +#include "rect.h" +#include "reference.h" +#include "removednamespaces.h" +#include "sample.h" +#include "samplenamespace.h" +#include "simplefile.h" +#include "size.h" +#include "str.h" +#include "strlist.h" +#include "sometime.h" +#include "templateptr.h" +#include "transform.h" +#include "virtualmethods.h" +#include "voidholder.h" +#include "valueandvirtual.h" +#include "expression.h" +#include "filter.h" diff --git a/sources/shiboken2/tests/samplebinding/handleholder_test.py b/sources/shiboken2/tests/samplebinding/handleholder_test.py new file mode 100644 index 0000000..c2504f4 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/handleholder_test.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +''' Test case for a class that holds a unknown handle object. + Test case for BUG #1105. +''' + +import unittest + +from sample import HandleHolder + +class HandleHolderTest(unittest.TestCase): + def testCreation(self): + holder = HandleHolder(HandleHolder.createHandle()) + holder2 = HandleHolder(HandleHolder.createHandle()) + self.assertEqual(holder.compare(holder2), False) + + def testTransfer(self): + holder = HandleHolder() + holder2 = HandleHolder(holder.handle()) + self.assertTrue(holder.compare(holder2)) + + def testUseDefinedType(self): + holder = HandleHolder(8) + holder2 = HandleHolder(holder.handle2()) + self.assertTrue(holder.compare2(holder2)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/hashabletype_test.py b/sources/shiboken2/tests/samplebinding/hashabletype_test.py new file mode 100644 index 0000000..c628c17 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/hashabletype_test.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for __hash__''' + +import unittest + +from sample import * + +class HashableTest(unittest.TestCase): + + def testStrHash(self): + h = {} + s = Str("Hi") + h[s] = 2 + self.assertTrue(h.get(s), 2) + + def testObjectTypeHash(self): + h = {} + o = ObjectType() + h[o] = 2 + self.assertTrue(h.get(o), 2) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/ignorederefop_test.py b/sources/shiboken2/tests/samplebinding/ignorederefop_test.py new file mode 100644 index 0000000..c5f53a9 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/ignorederefop_test.py @@ -0,0 +1,38 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from sample import * + +class TestLackOfDereferenceOperators (unittest.TestCase): + def testIf(self): + r = Reference() + self.assertFalse(hasattr(r, "__mul__")) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/implicitconv_numerical_test.py b/sources/shiboken2/tests/samplebinding/implicitconv_numerical_test.py new file mode 100644 index 0000000..6ebca79 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/implicitconv_numerical_test.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for inplicit converting C++ numeric types.''' + +import unittest +import sys +import sample +from py3kcompat import IS_PY3K, l, long + +# Hardcode the limits of the underlying C-types depending on architecture and memory +# model (taking MSVC using LLP64 into account). +cIntMin = -2147483648 +cIntMax = 2147483647 +cLongMin = cIntMin +cLongMax = cIntMax +maxRepresentableInt = sys.maxsize if IS_PY3K else sys.maxint +is64bitArchitecture = maxRepresentableInt > 2**32 +if is64bitArchitecture and sys.platform != 'win32': + cLongMin = -9223372036854775808 + cLongMax = 9223372036854775807 + +class NumericTester(unittest.TestCase): + '''Helper class for numeric comparison testing''' + + def check_value(self, source, expected, callback, desired_type=None): + result = callback(source) + self.assertEqual(result, expected) + + if desired_type: + self.assertEqual(type(result), desired_type) + + +class FloatImplicitConvert(NumericTester): + '''Test case for implicit converting C++ numeric types.''' + + def testFloatAsInt(self): + '''Float as Int''' + self.check_value(3.14, 3, sample.acceptInt, int) + self.assertRaises(OverflowError, sample.acceptInt, cIntMax + 400) + + def testFloatAsLong(self): + '''Float as Long''' + #C++ longs are python ints for us + self.check_value(3.14, 3, sample.acceptLong, int) + self.assertRaises(OverflowError, sample.acceptLong, cLongMax + 400) + + def testFloatAsUInt(self): + '''Float as unsigned Int''' + self.check_value(3.14, 3, sample.acceptUInt, long) + self.assertRaises(OverflowError, sample.acceptUInt, -3.14) + + def testFloatAsULong(self): + '''Float as unsigned Long''' + #FIXME Breaking with SystemError "bad argument to internal function" + self.check_value(3.14, 3, sample.acceptULong, long) + self.assertRaises(OverflowError, sample.acceptULong, -3.14) + + def testFloatAsDouble(self): + '''Float as double''' + self.check_value(3.14, 3.14, sample.acceptDouble, float) + + +class IntImplicitConvert(NumericTester): + '''Test case for implicit converting C++ numeric types.''' + + def testIntAsInt(self): + '''Int as Int''' + self.check_value(3, 3, sample.acceptInt, int) + + def testIntAsLong(self): + '''Int as Long''' + self.check_value(3, 3, sample.acceptLong, int) + + # cLongMax goes here as CPython implements int as a C long + self.check_value(cLongMax, cLongMax, sample.acceptLong, int) + self.check_value(cLongMin, cLongMin, sample.acceptLong, int) + + def testIntAsUInt(self): + '''Int as unsigned Int''' + self.check_value(3, 3, sample.acceptUInt, long) + self.assertRaises(OverflowError, sample.acceptUInt, -3) + + def testIntAsULong(self): + '''Int as unsigned Long''' + self.check_value(3, 3, sample.acceptULong, long) + self.assertRaises(OverflowError, sample.acceptULong, -3) + + def testFloatAsDouble(self): + '''Float as double''' + self.check_value(3.14, 3.14, sample.acceptDouble, float) + + +class LongImplicitConvert(NumericTester): + '''Test case for implicit converting C++ numeric types.''' + + def testLongAsInt(self): + '''Long as Int''' + self.check_value(l(24224), 24224, sample.acceptInt, int) + self.assertRaises(OverflowError, sample.acceptInt, cIntMax + 20) + + def testLongAsLong(self): + '''Long as Long''' + self.check_value(l(2405), 2405, sample.acceptLong, int) + self.assertRaises(OverflowError, sample.acceptLong, cLongMax + 20) + + def testLongAsUInt(self): + '''Long as unsigned Int''' + self.check_value(l(260), 260, sample.acceptUInt, long) + self.assertRaises(OverflowError, sample.acceptUInt, -42) + + def testLongAsULong(self): + '''Long as unsigned Long''' + self.check_value(l(128), 128, sample.acceptULong, long) + self.assertRaises(OverflowError, sample.acceptULong, l(-334)) + + def testLongAsDouble(self): + '''Float as double''' + self.check_value(l(42), 42, sample.acceptDouble, float) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/implicitconv_test.py b/sources/shiboken2/tests/samplebinding/implicitconv_test.py new file mode 100644 index 0000000..30986d5 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/implicitconv_test.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for implicit conversions''' + +import unittest + +from sample import ImplicitConv, ObjectType + +class ImplicitConvTest(unittest.TestCase): + '''Test case for implicit conversions''' + + def testImplicitConversions(self): + '''Test if overloaded function call decisor takes implicit conversions into account.''' + ic = ImplicitConv.implicitConvCommon(ImplicitConv()) + self.assertEqual(ic.ctorEnum(), ImplicitConv.CtorNone) + + ic = ImplicitConv.implicitConvCommon(3) + self.assertEqual(ic.ctorEnum(), ImplicitConv.CtorOne) + self.assertEqual(ic.objId(), 3) + + ic = ImplicitConv.implicitConvCommon(ImplicitConv.CtorThree) + self.assertEqual(ic.ctorEnum(), ImplicitConv.CtorThree) + + obj = ObjectType() + ic = ImplicitConv.implicitConvCommon(obj) + self.assertEqual(ic.ctorEnum(), ImplicitConv.CtorObjectTypeReference) + + ic = ImplicitConv.implicitConvCommon(42.42) + self.assertEqual(ic.value(), 42.42) + + ic = ImplicitConv(None) + self.assertEqual(ic.ctorEnum(), ImplicitConv.CtorPrimitiveType) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/inheritanceandscope_test.py b/sources/shiboken2/tests/samplebinding/inheritanceandscope_test.py new file mode 100755 index 0000000..892a2bc --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/inheritanceandscope_test.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for finding scope in cases involving inheritance.''' + +import unittest + +from sample import SampleNamespace + +class ScopeAndInheritanceTest(unittest.TestCase): + '''Test cases for finding scope in cases involving inheritance.''' + + def testMethodCorrectlyWrapper(self): + '''A method returning a type declared in the scope of the method's + class parent must be found and the method correctly exported.''' + meth = getattr(SampleNamespace.DerivedFromNamespace, 'methodReturningTypeFromParentScope') + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/injectcode_test.py b/sources/shiboken2/tests/samplebinding/injectcode_test.py new file mode 100644 index 0000000..d6b1d06 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/injectcode_test.py @@ -0,0 +1,132 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for std::list container conversions''' + +import unittest +from sample import InjectCode + +class MyInjectCode(InjectCode): + def __init__(self): + InjectCode.__init__(self) + self.multiplier = 2 + + def arrayMethod(self, values): + return self.multiplier * sum(values) + +class InjectCodeTest(unittest.TestCase): + + def testTypeNativeBeginning_TypeTargetBeginning(self): + ic = InjectCode() + self.assertEqual(str(ic), "Hi! I'm the inject code dummy class.") + + def testFunctionTargetBeginning_FunctionTargetEnd(self): + ic = InjectCode() + ret = ic.simpleMethod1(2, 1) + self.assertEqual(ret, "4end") + ret = ic.simpleMethod1(4, 2) + self.assertEqual(ret, "7end") + + def testFunctionTargetBeginning(self): + ic = InjectCode() + ret = ic.simpleMethod2() + self.assertEqual(ret, "_end") + + def testArgsModification(self): + ic = InjectCode() + ret = ic.overloadedMethod(["1", "2", "3", "4"]) + self.assertEqual(ret, "1234") + ret = ic.overloadedMethod(2, 0.5) + self.assertEqual(ret, "2.5") + ret = ic.overloadedMethod(6, True) + self.assertEqual(ret, "6true") + + def testArgsModification2(self): + ic = InjectCode() + ret = ic.simpleMethod3(["1", "2", "3", "4"]) + self.assertEqual(ret, "1234") + + def testArgumentRemovalAndArgumentTypeModification(self): + '''A method has its first argument removed and the second modified.''' + ic = InjectCode() + values = (1, 2, 3, 4, 5) + result = ic.arrayMethod(values) + self.assertEqual(result, sum(values)) + + def testCallVirtualMethodWithArgumentRemovalAndArgumentTypeModification(self): + '''A virtual method has its first argument removed and the second modified.''' + ic = InjectCode() + values = (1, 2, 3, 4, 5) + result = ic.callArrayMethod(values) + self.assertEqual(result, sum(values)) + + def testCallReimplementedVirtualMethodWithArgumentRemovalAndArgumentTypeModification(self): + '''Calls a reimplemented virtual method that had its first argument removed and the second modified.''' + ic = MyInjectCode() + values = (1, 2, 3, 4, 5) + result = ic.callArrayMethod(values) + self.assertEqual(result, ic.multiplier * sum(values)) + + def testUsageOfTypeSystemCheckVariableOnPrimitiveType(self): + '''When the sequence item is convertible to an integer -1 is returned, or -2 if its not convertible.''' + ic = InjectCode() + values = (1, 2, 3, 4, '5', 6.7) + result = ic.arrayMethod(values) + + fixedValues = [v for v in values if isinstance(v, int)]\ + + [-1 for v in values if isinstance(v, float)]\ + + [-2 for v in values if not isinstance(v, int) and not isinstance(v, float)] + self.assertEqual(result, sum(fixedValues)) + + +class IntArrayTest(unittest.TestCase): + '''Test case for converting python sequence to int array''' + + def testBasic(self): + '''Shiboken::sequenceToIntArray - basic case''' + args = [1, 2, 3, 4] + ic = InjectCode() + self.assertEqual(sum(args) + len(args), ic.sumArrayAndLength(args)) + + def testEmpty(self): + '''Shiboken::sequenceToIntArray - empty sequence''' + args = [] + ic = InjectCode() + self.assertEqual(sum(args) + len(args), ic.sumArrayAndLength(args)) + + def testWithZero(self): + '''Shiboken::sequenceToIntArray - count only up to zero''' + args = [1, 2, 0, 3] + ic = InjectCode() + self.assertEqual(sum([1, 2]) + len([1, 2]), ic.sumArrayAndLength(args)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/innerclass_test.py b/sources/shiboken2/tests/samplebinding/innerclass_test.py new file mode 100644 index 0000000..d76840f --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/innerclass_test.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from sample import Derived + +class TestInnerClass(unittest.TestCase): + def testInstaciate(self): + d = Derived.SomeInnerClass() + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/intlist_test.py b/sources/shiboken2/tests/samplebinding/intlist_test.py new file mode 100644 index 0000000..3bf8fb0 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/intlist_test.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from sample import IntList + +class IntListTest(unittest.TestCase): + + def testAutoFunctionsToBaseList(self): + lst = IntList() + self.assertEqual(len(lst), 0) + lst.append(10) + self.assertEqual(lst[0], 10) + lst.append(20) + self.assertEqual(lst[1], 20) + lst.append(30) + self.assertEqual(lst[2], 30) + lst[1] = 25 + self.assertEqual(lst[0], 10) + self.assertEqual(lst[1], 25) + self.assertEqual(lst[2], 30) + self.assertEqual(len(lst), 3) + + def testIntListCtor_NoParams(self): + '''IntList constructor receives no parameter.''' + il = IntList() + self.assertEqual(len(il), 0) + self.assertEqual(il.constructorUsed(), IntList.NoParamsCtor) + + def testIntListCtor_int(self): + '''IntList constructor receives an integer.''' + value = 123 + il = IntList(value) + self.assertEqual(len(il), 1) + self.assertEqual(il[0], value) + self.assertEqual(il.constructorUsed(), IntList.IntCtor) + + def testIntListCtor_IntList(self): + '''IntList constructor receives an IntList object.''' + il1 = IntList(123) + il2 = IntList(il1) + self.assertEqual(len(il1), len(il2)) + for i in range(len(il1)): + self.assertEqual(il1[i], il2[i]) + self.assertEqual(il2.constructorUsed(), IntList.CopyCtor) + + def testIntListCtor_ListOfInts(self): + '''IntList constructor receives an integer list.''' + ints = [123, 456] + il = IntList(ints) + self.assertEqual(len(il), len(ints)) + for i in range(len(il)): + self.assertEqual(il[i], ints[i]) + self.assertEqual(il.constructorUsed(), IntList.ListOfIntCtor) + + def testIntListAttributeTypeCheck(self): + '''Attribute values to IntList.''' + il = IntList([0, 1, 2]) + self.assertEqual(len(il), 3) + il[0] = 123 + self.assertEqual(len(il), 3) + self.assertEqual(il[0], 123) + il[1] = 432.1 + self.assertEqual(len(il), 3) + self.assertEqual(il[1], int(432.1)) + self.assertRaises(TypeError, il.__setitem__, 2, '78') + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/invalid_virtual_return_test.py b/sources/shiboken2/tests/samplebinding/invalid_virtual_return_test.py new file mode 100644 index 0000000..63384e7 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/invalid_virtual_return_test.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for returning invalid types in a virtual function''' + +import unittest +from sample import ObjectModel, ObjectType, ObjectView + +import warnings + + +class MyObject(ObjectType): + pass + + +class ListModelWrong(ObjectModel): + + def __init__(self, parent=None): + ObjectModel.__init__(self, parent) + self.obj = 0 + + def data(self): + warnings.simplefilter('error') + # Shouldn't segfault. Must set TypeError + return self.obj + + +class ModelWrongReturnTest(unittest.TestCase): + + def testWrongTypeReturn(self): + model = ListModelWrong() + view = ObjectView(model) + self.assertRaises(RuntimeWarning, view.getRawModelData) # calls model.data() + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/keep_reference_test.py b/sources/shiboken2/tests/samplebinding/keep_reference_test.py new file mode 100644 index 0000000..bcfc0db --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/keep_reference_test.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for objects that keep references to other object without owning them (e.g. model/view relationships).''' + +import unittest +from sys import getrefcount + +from sample import ObjectModel, ObjectView + +class TestKeepReference(unittest.TestCase): + '''Test case for objects that keep references to other object without owning them (e.g. model/view relationships).''' + + def testReferenceCounting(self): + '''Tests reference count of model-like object referred by view-like objects.''' + model1 = ObjectModel() + refcount1 = getrefcount(model1) + view1 = ObjectView() + view1.setModel(model1) + self.assertEqual(getrefcount(view1.model()), refcount1 + 1) + + view2 = ObjectView() + view2.setModel(model1) + self.assertEqual(getrefcount(view2.model()), refcount1 + 2) + + model2 = ObjectModel() + view2.setModel(model2) + self.assertEqual(getrefcount(view1.model()), refcount1 + 1) + + def testReferenceCountingWhenDeletingReferrer(self): + '''Tests reference count of model-like object referred by deceased view-like object.''' + model = ObjectModel() + refcount1 = getrefcount(model) + view = ObjectView() + view.setModel(model) + self.assertEqual(getrefcount(view.model()), refcount1 + 1) + + del view + self.assertEqual(getrefcount(model), refcount1) + + def testReferreedObjectSurvivalAfterContextEnd(self): + '''Model-like object assigned to a view-like object must survive after get out of context.''' + def createModelAndSetToView(view): + model = ObjectModel() + model.setObjectName('created model') + view.setModel(model) + view = ObjectView() + createModelAndSetToView(view) + model = view.model() + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/list_test.py b/sources/shiboken2/tests/samplebinding/list_test.py new file mode 100644 index 0000000..a2761be --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/list_test.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for std::list container conversions''' + +import unittest + +from sample import ListUser, Point, PointF + +class ExtendedListUser(ListUser): + def __init__(self): + ListUser.__init__(self) + self.create_list_called = False + + def createList(self): + self.create_list_called = True + return [2, 3, 5, 7, 13] + +class ListConversionTest(unittest.TestCase): + '''Test case for std::list container conversions''' + + def testReimplementedVirtualMethodCall(self): + '''Test if a Python override of a virtual method is correctly called from C++.''' + lu = ExtendedListUser() + lst = lu.callCreateList() + self.assertTrue(lu.create_list_called) + self.assertEqual(type(lst), list) + for item in lst: + self.assertEqual(type(item), int) + + def testPrimitiveConversionInsideContainer(self): + '''Test primitive type conversion inside conversible std::list container.''' + cpx0 = complex(1.2, 3.4) + cpx1 = complex(5.6, 7.8) + lst = ListUser.createComplexList(cpx0, cpx1) + self.assertEqual(type(lst), list) + for item in lst: + self.assertEqual(type(item), complex) + self.assertEqual(lst, [cpx0, cpx1]) + + def testSumListIntegers(self): + '''Test method that sums a list of integer values.''' + lu = ListUser() + lst = [3, 5, 7] + result = lu.sumList(lst) + self.assertEqual(result, sum(lst)) + + def testSumListFloats(self): + '''Test method that sums a list of float values.''' + lu = ListUser() + lst = [3.3, 4.4, 5.5] + result = lu.sumList(lst) + self.assertEqual(result, sum(lst)) + + def testConversionInBothDirections(self): + '''Test converting a list from Python to C++ and back again.''' + lu = ListUser() + lst = [3, 5, 7] + lu.setList(lst) + result = lu.getList() + self.assertEqual(result, lst) + + def testConversionInBothDirectionsWithSimilarContainer(self): + '''Test converting a tuple, instead of the expected list, from Python to C++ and back again.''' + lu = ListUser() + lst = (3, 5, 7) + lu.setList(lst) + result = lu.getList() + self.assertNotEqual(result, lst) + self.assertEqual(result, list(lst)) + + def testConversionOfListOfObjectsPassedAsArgument(self): + '''Calls method with a Python list of wrapped objects to be converted to a C++ list.''' + mult = 3 + pts0 = (Point(1.0, 2.0), Point(3.3, 4.4), Point(5, 6)) + pts1 = (Point(1.0, 2.0), Point(3.3, 4.4), Point(5, 6)) + ListUser.multiplyPointList(pts1, mult) + for pt0, pt1 in zip(pts0, pts1): + self.assertEqual(pt0.x() * mult, pt1.x()) + self.assertEqual(pt0.y() * mult, pt1.y()) + + def testConversionOfInvalidLists(self): + mult = 3 + pts = (Point(1.0, 2.0), 3, Point(5, 6)) + self.assertRaises(TypeError, ListUser.multiplyPointList, pts, mult) + + def testOverloadMethodReceivingRelatedContainerTypes(self): + self.assertEqual(ListUser.ListOfPointF, ListUser.listOfPoints([PointF()])) + self.assertEqual(ListUser.ListOfPoint, ListUser.listOfPoints([Point()])) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/lock_test.py b/sources/shiboken2/tests/samplebinding/lock_test.py new file mode 100644 index 0000000..9bb1f87 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/lock_test.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Simple test with a blocking C++ method that should allow python + threads to run.''' + +import unittest +import threading + +from sample import Bucket + + +class Unlocker(threading.Thread): + + def __init__(self, bucket): + threading.Thread.__init__(self) + self.bucket = bucket + + def run(self): + while not self.bucket.locked(): + pass + + self.bucket.unlock() + + +class MyBucket(Bucket): + + def __init__(self): + Bucket.__init__(self) + + def virtualBlockerMethod(self): + self.lock() + return True + + +class TestLockUnlock(unittest.TestCase): + + def testBasic(self): + '''Locking in C++ and releasing in a python thread''' + bucket = Bucket() + unlocker = Unlocker(bucket) + + unlocker.start() + bucket.lock() + unlocker.join() + + def testVirtualBlocker(self): + '''Same as the basic case but blocker method is a C++ virtual called from C++.''' + bucket = Bucket() + unlocker = Unlocker(bucket) + + unlocker.start() + result = bucket.callVirtualBlockerMethodButYouDontKnowThis() + unlocker.join() + self.assertTrue(result) + + def testReimplementedVirtualBlocker(self): + '''Same as the basic case but blocker method is a C++ virtual reimplemented in Python and called from C++.''' + mybucket = MyBucket() + unlocker = Unlocker(mybucket) + + unlocker.start() + result = mybucket.callVirtualBlockerMethodButYouDontKnowThis() + unlocker.join() + self.assertTrue(result) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/map_test.py b/sources/shiboken2/tests/samplebinding/map_test.py new file mode 100644 index 0000000..1d8d758 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/map_test.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for std::map container conversions''' + +import unittest + +from sample import MapUser + +class ExtendedMapUser(MapUser): + def __init__(self): + MapUser.__init__(self) + self.create_map_called = False + + def createMap(self): + self.create_map_called = True + return {'two' : (complex(2.2, 2.2), 2), + 'three' : (complex(3.3, 3.3), 3), + 'five' : (complex(5.5, 5.5), 5), + 'seven' : (complex(7.7, 7.7), 7)} + +class MapConversionTest(unittest.TestCase): + '''Test case for std::map container conversions''' + + def testReimplementedVirtualMethodCall(self): + '''Test if a Python override of a virtual method is correctly called from C++.''' + mu = ExtendedMapUser() + map_ = mu.callCreateMap() + self.assertTrue(mu.create_map_called) + self.assertEqual(type(map_), dict) + for key, value in map_.items(): + self.assertEqual(type(key), str) + self.assertEqual(type(value[0]), complex) + self.assertEqual(type(value[1]), int) + + def testConversionInBothDirections(self): + '''Test converting a map from Python to C++ and back again.''' + mu = MapUser() + map_ = {'odds' : [2, 4, 6], 'evens' : [3, 5, 7], 'primes' : [3, 4, 6]} + mu.setMap(map_) + result = mu.getMap() + self.assertEqual(result, map_) + + def testConversionMapIntKeyValueTypeValue(self): + '''C++ signature: MapUser::passMapIntValueType(const std::map&)''' + mu = MapUser() + map_ = {0 : 'string'} + result = mu.passMapIntValueType(map_) + self.assertEqual(map_, result) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/metaclass_test.py b/sources/shiboken2/tests/samplebinding/metaclass_test.py new file mode 100644 index 0000000..e5da496 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/metaclass_test.py @@ -0,0 +1,61 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from sample import * +import unittest + +class MetaA(type): + pass + +class A(object): + __metaclass__ = MetaA + +MetaB = type(Point) +B = Point + +class MetaC(MetaA, MetaB): + pass +class C(A, B): + __metaclass__ = MetaC + +class D(C): + pass + +class TestMetaClass(unittest.TestCase): + def testIt(self): + w1 = C() # works + w1.setX(1) + w1.setY(2) + + w2 = D() # should work! + w2.setX(3) + w2.setY(4) + + w3 = w1 + w2 + self.assertEqual(w3.x(), 4) + self.assertEqual(w3.y(), 6) diff --git a/sources/shiboken2/tests/samplebinding/mi_virtual_methods_test.py b/sources/shiboken2/tests/samplebinding/mi_virtual_methods_test.py new file mode 100644 index 0000000..585a1a2 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/mi_virtual_methods_test.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for virtual methods in multiple inheritance scenarios''' + +import unittest + +from sample import VirtualMethods, ObjectType, Event + + +class ImplementsNone(ObjectType, VirtualMethods): + '''Implements no virtual methods''' + + def __init__(self): + ObjectType.__init__(self) + VirtualMethods.__init__(self) + + +class ImplementsBoth(ObjectType, VirtualMethods): + '''Implements ObjectType.event and VirtualMethods.sum1''' + + def __init__(self): + ObjectType.__init__(self) + VirtualMethods.__init__(self) + self.event_processed = False + + def event(self, event): + self.event_processed = True + return True + + def sum1(self, arg0, arg1, arg2): + return (arg0 + arg1 + arg2) * 2 + + +class CppVirtualTest(unittest.TestCase): + '''Virtual method defined in c++ called from C++''' + + def testCpp(self): + '''C++ calling C++ virtual method in multiple inheritance scenario''' + obj = ImplementsNone() + self.assertTrue(ObjectType.processEvent([obj], Event(Event.BASIC_EVENT))) + self.assertRaises(AttributeError, getattr, obj, 'event_processed') + + self.assertEqual(obj.callSum0(1, 2, 3), 6) + + +class PyVirtualTest(unittest.TestCase): + '''Virtual method reimplemented in python called from C++''' + + def testEvent(self): + '''C++ calling Python reimplementation of virtual in multiple inheritance''' + obj = ImplementsBoth() + self.assertTrue(ObjectType.processEvent([obj], Event(Event.BASIC_EVENT))) + self.assertTrue(obj.event_processed) + + self.assertEqual(obj.callSum1(1, 2, 3), 12) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/mixed_mi_test.py b/sources/shiboken2/tests/samplebinding/mixed_mi_test.py new file mode 100644 index 0000000..dd557d4 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/mixed_mi_test.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for multiple inheritance in mixed Python/C++ scenarios''' + +import unittest + +from sample import ObjectType + + +class Base(object): + '''Base Python class''' + + def __init__(self): + self.name = '' + + def pythonName(self): + return self.name + + def setPythonName(self, name): + self.name = name + + +class Child(Base, ObjectType): + '''Dummy class with mixed parents''' + + def __init__(self): + Base.__init__(self) + ObjectType.__init__(self) + + +class MixedInheritanceTest(unittest.TestCase): + + def testMixed(self): + '''Mixed Python/C++ multiple inheritance''' + obj = Child() + + obj.setObjectName('aaa') + self.assertEqual(obj.objectName(), 'aaa') + + obj.setPythonName('python') + self.assertEqual(obj.pythonName(), 'python') + + +if __name__ == '__main__': + unittest.main() + + diff --git a/sources/shiboken2/tests/samplebinding/modelindex_test.py b/sources/shiboken2/tests/samplebinding/modelindex_test.py new file mode 100644 index 0000000..251ee71 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/modelindex_test.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from sample import ModelIndex, ReferentModelIndex, PersistentModelIndex + +class TestCastOperator(unittest.TestCase): + + def testCastOperatorReturningValue(self): + index = PersistentModelIndex() + index.setValue(123) + self.assertEqual(index.value(), 123) + self.assertEqual(index.value(), ModelIndex.getValue(index)) + + def testCastOperatorReturningReference(self): + index = ReferentModelIndex() + index.setValue(123) + self.assertEqual(index.value(), 123) + self.assertEqual(index.value(), ModelIndex.getValue(index)) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/modelview_test.py b/sources/shiboken2/tests/samplebinding/modelview_test.py new file mode 100644 index 0000000..3f86fe4 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/modelview_test.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for objects that keep references to other object without owning them (e.g. model/view relationships).''' + +import unittest +from sample import ObjectModel, ObjectType, ObjectView + + +object_name = 'test object' + +class MyObject(ObjectType): + pass + +class ListModelKeepsReference(ObjectModel): + def __init__(self, parent=None): + ObjectModel.__init__(self, parent) + self.obj = MyObject() + self.obj.setObjectName(object_name) + + def data(self): + return self.obj + +class ListModelDoesntKeepsReference(ObjectModel): + def data(self): + obj = MyObject() + obj.setObjectName(object_name) + return obj + + +class ModelViewTest(unittest.TestCase): + + def testListModelDoesntKeepsReference(self): + model = ListModelDoesntKeepsReference() + view = ObjectView(model) + obj = view.getRawModelData() + self.assertEqual(type(obj), MyObject) + self.assertEqual(obj.objectName(), object_name) + + def testListModelKeepsReference(self): + model = ListModelKeepsReference() + view = ObjectView(model) + obj = view.getRawModelData() + self.assertEqual(type(obj), MyObject) + self.assertEqual(obj.objectName(), object_name) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/modifications_test.py b/sources/shiboken2/tests/samplebinding/modifications_test.py new file mode 100644 index 0000000..1dcd503 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/modifications_test.py @@ -0,0 +1,224 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for method modifications performed as described on type system. ''' + +import unittest + +from sample import Modifications, Point, ByteArray + +class ExtModifications(Modifications): + def __init__(self): + Modifications.__init__(self) + self.multiplier = 3.0 + self.increment = 10.0 + + def name(self): + return 'ExtModifications' + + def differenceOfPointCoordinates(self, point): + ok, res = Modifications.differenceOfPointCoordinates(self, point) + return ok, res * self.multiplier + self.increment + + +class ModificationsTest(unittest.TestCase): + '''Test cases for method modifications performed as described on type system. ''' + + def setUp(self): + self.mods = Modifications() + + def tearDown(self): + del self.mods + + def testClassMembersAvailability(self): + '''Test if Modified class really have the expected members.''' + expected_members = set(['OverloadedModFunc', 'OverloadedNone', + 'Overloaded_ibiP', 'Overloaded_ibib', + 'Overloaded_ibid', 'Overloaded_ibii', + 'calculateArea', 'doublePlus', 'increment', + 'multiplyPointCoordsPlusValue', 'name', + 'pointToPair', 'overloaded', 'power', + 'timesTen']) + self.assertTrue(expected_members.issubset(dir(Modifications))) + + def testRenamedMethodAvailability(self): + '''Test if Modification class really have renamed the 'className' virtual method to 'name'.''' + self.assertTrue('className' not in dir(Modifications)) + self.assertTrue('name' in dir(Modifications)) + + def testReimplementationOfRenamedVirtualMethod(self): + '''Test if class inheriting from Modification class have the reimplementation of renamed virtual method called.''' + em = ExtModifications() + self.assertEqual(self.mods.name(), 'Modifications') + self.assertEqual(em.name(), 'ExtModifications') + + def testRegularMethodRenaming(self): + '''Test if Modifications::cppMultiply was correctly renamed to calculateArea.''' + self.assertTrue('cppMultiply' not in dir(Modifications)) + self.assertTrue('calculateArea' in dir(Modifications)) + self.assertEqual(self.mods.calculateArea(3, 6), 3 * 6) + + def testRegularMethodRemoval(self): + '''Test if 'Modifications::exclusiveCppStuff' was removed from Python bindings.''' + self.assertTrue('exclusiveCppStuff' not in dir(Modifications)) + + def testArgumentRemoval(self): + '''Test if second argument of Modifications::doublePlus(int, int) was removed.''' + self.assertRaises(TypeError, self.mods.doublePlus, 3, 7) + self.assertEqual(self.mods.doublePlus(7), 14) + + def testDefaultValueRemoval(self): + '''Test if default value was removed from first argument of Modifications::increment(int).''' + self.assertRaises(TypeError, self.mods.increment) + self.assertEqual(self.mods.increment(7), 8) + + def testDefaultValueReplacement(self): + '''Test if default values for both arguments of Modifications::power(int, int) were modified.''' + # original default values: int power(int base = 1, int exponent = 0); + self.assertNotEqual(self.mods.power(4), 1) + # modified default values: int power(int base = 2, int exponent = 1); + self.assertEqual(self.mods.power(), 2) + self.assertEqual(self.mods.power(3), 3) + self.assertEqual(self.mods.power(5, 3), 5**3) + + def testSetNewDefaultValue(self): + '''Test if default value was correctly set to 10 for first argument of Modifications::timesTen(int).''' + self.assertEqual(self.mods.timesTen(7), 70) + self.assertEqual(self.mods.timesTen(), 100) + + def testArgumentRemovalAndReturnTypeModificationWithTypesystemTemplates1(self): + '''Test modifications to method signature and return value using type system templates (case 1).''' + result, ok = self.mods.pointToPair(Point(2, 5)) + self.assertEqual(type(ok), bool) + self.assertEqual(type(result), tuple) + self.assertEqual(len(result), 2) + self.assertEqual(type(result[0]), float) + self.assertEqual(type(result[1]), float) + self.assertEqual(result[0], 2.0) + self.assertEqual(result[1], 5.0) + + def testArgumentRemovalAndReturnTypeModificationWithTypesystemTemplates2(self): + '''Test modifications to method signature and return value using type system templates (case 2).''' + result, ok = self.mods.multiplyPointCoordsPlusValue(Point(2, 5), 4.1) + self.assertEqual(type(ok), bool) + self.assertEqual(type(result), float) + self.assertEqual(result, 14.1) + + def testOverloadedMethodModifications(self): + '''Tests modifications to an overloaded method''' + # overloaded(int, bool[removed], int, double) + self.assertEqual(self.mods.overloaded(1, 2, 3.1), Modifications.Overloaded_ibid) + # overloaded(int, bool, int[removed,default=321], int) + self.assertEqual(self.mods.overloaded(1, True, 2), Modifications.Overloaded_ibii) + # the others weren't modified + self.assertEqual(self.mods.overloaded(1, True, 2, False), Modifications.Overloaded_ibib) + self.assertEqual(self.mods.overloaded(1, False, 2, Point(3, 4)), Modifications.Overloaded_ibiP) + self.assertRaises(TypeError, self.mods.overloaded, 1, True, Point(2, 3), Point(4, 5)) + self.assertEqual(self.mods.over(1, True, Point(2, 3), Point(4, 5)), Modifications.Overloaded_ibPP) + + def testPointArrayModification(self): + points = (Point(1, 1), Point(2, 2)) + summedPoint = Point(1, 1) + Point(2, 2) + self.assertEqual(self.mods.sumPointArray(points), summedPoint) + + def testTypeSystemVariableReplacementInFunctionModification(self): + ba = ByteArray('12345') + self.assertEqual(self.mods.getSize(ba), len(ba)) + self.assertEqual(self.mods.getSize(ba, 20), 20) + + def testNoNulPointerTag(self): + point = Point(12, 34) + self.assertEqual(self.mods.sumPointCoordinates(point), 12 + 34) + self.assertRaises(TypeError, self.mods.sumPointCoordinates, None) + + def testNonConversionRuleForArgumentWithDefaultValue(self): + status, obj = self.mods.nonConversionRuleForArgumentWithDefaultValue() + self.assertTrue(status) + self.assertEqual(obj, self.mods.getObject()) + self.assertEqual(obj.objectName(), 'MyObject') + + def testInjectCodeWithConversionVariableForUserPrimitive(self): + self.assertTrue(Modifications.invertBoolean(False)) + self.assertFalse(Modifications.invertBoolean(True)) + + def testConversionRuleForReturnType(self): + x, y = 11, 2 + diff = float(abs(x - y)) + point = Point(x, y) + + ok, res = self.mods.differenceOfPointCoordinates(point) + self.assertTrue(isinstance(ok, bool)) + self.assertTrue(isinstance(res, float)) + self.assertEqual(res, diff) + + ok, res = self.mods.callDifferenceOfPointCoordinates(point) + self.assertTrue(isinstance(ok, bool)) + self.assertTrue(isinstance(res, float)) + self.assertEqual(res, diff) + + ok, res = self.mods.differenceOfPointCoordinates(None) + self.assertTrue(isinstance(ok, bool)) + self.assertTrue(isinstance(res, float)) + self.assertEqual(res, 0.0) + + ok, res = self.mods.callDifferenceOfPointCoordinates(None) + self.assertTrue(isinstance(ok, bool)) + self.assertTrue(isinstance(res, float)) + self.assertEqual(res, 0.0) + + def testConversionRuleForReturnTypeOnExtendedClass(self): + x, y = 11, 2 + diff = float(abs(x - y)) + point = Point(x, y) + em = ExtModifications() + + ok, res = em.differenceOfPointCoordinates(point) + self.assertTrue(isinstance(ok, bool)) + self.assertTrue(isinstance(res, float)) + self.assertEqual(res, diff * em.multiplier + em.increment) + + ok, res = em.callDifferenceOfPointCoordinates(point) + self.assertTrue(isinstance(ok, bool)) + self.assertTrue(isinstance(res, float)) + self.assertEqual(res, diff * em.multiplier + em.increment) + + ok, res = em.differenceOfPointCoordinates(None) + self.assertTrue(isinstance(ok, bool)) + self.assertTrue(isinstance(res, float)) + self.assertEqual(res, em.increment) + + ok, res = em.callDifferenceOfPointCoordinates(None) + self.assertTrue(isinstance(ok, bool)) + self.assertTrue(isinstance(res, float)) + self.assertEqual(res, em.increment) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/modified_constructor_test.py b/sources/shiboken2/tests/samplebinding/modified_constructor_test.py new file mode 100644 index 0000000..3352cd2 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/modified_constructor_test.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests cases for ConstructorWithModifiedArgument class.''' + +import sys +import unittest + +from sample import * + + +class ConstructorWithModifiedArgumentTest(unittest.TestCase): + '''Test cases for ConstructorWithModifiedArgument class.''' + + def testConstructorWithModifiedArgument(self): + sampleClass = ModifiedConstructor("10") + self.assertTrue(sampleClass.retrieveValue(), 10) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/modifiedvirtualmethods_test.py b/sources/shiboken2/tests/samplebinding/modifiedvirtualmethods_test.py new file mode 100644 index 0000000..53b8545 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/modifiedvirtualmethods_test.py @@ -0,0 +1,248 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for modified virtual methods.''' + +import unittest + +from sample import VirtualMethods, Str + +class ExtendedVirtualMethods(VirtualMethods): + def __init__(self): + VirtualMethods.__init__(self) + self.name_called = False + self.sum0_called = False + self.sum1_called = False + self.sum2_called = False + self.sum3_called = False + self.sum4_called = False + self.sumThree_called = False + self.callMe_called = 0 + self.multiplier = 12345 + + def sum0(self, a0, a1, a2): + self.sum0_called = True + return VirtualMethods.sumThree(self, a0, a1, a2) * self.multiplier + + def sumThree(self, a0, a1, a2): + self.sumThree_called = True + return VirtualMethods.sumThree(self, a0, a1, a2) * self.multiplier + + def sum1(self, a0, a1, a2): + self.sum1_called = True + return VirtualMethods.sum1(self, a0, a1, a2) * self.multiplier + + def sum2(self, a0, a1): + self.sum2_called = True + return VirtualMethods.sum2(self, a0, a1) * self.multiplier + + def sum3(self, a0, a1): + self.sum3_called = True + return VirtualMethods.sum3(self, a0, a1) * self.multiplier + + def sum4(self, a0, a1): + self.sum4_called = True + return VirtualMethods.sum4(self, a0, a1) * self.multiplier + + def name(self): + self.name_called = True + return Str('ExtendedVirtualMethods') + + def callMe(self): + self.callMe_called += 1 + + def getMargins(self): + return tuple([m*2 for m in VirtualMethods.getMargins(self)]) + + +class VirtualMethodsTest(unittest.TestCase): + '''Test case for modified virtual methods.''' + + def setUp(self): + self.vm = VirtualMethods() + self.evm = ExtendedVirtualMethods() + + def tearDown(self): + del self.vm + del self.evm + + def testModifiedVirtualMethod0(self): + '''Renamed virtual method.''' + a0, a1, a2 = 2, 3, 5 + result0 = self.vm.callSum0(a0, a1, a2) + result1 = self.vm.sumThree(a0, a1, a2) + self.assertEqual(result0, a0 + a1 + a2) + self.assertEqual(result0, result1) + self.assertRaises(AttributeError, getattr, self.vm, 'sum0') + + def testReimplementedModifiedVirtualMethod0(self): + '''Override of a renamed virtual method.''' + a0, a1, a2 = 2, 3, 5 + result0 = self.vm.callSum0(a0, a1, a2) + result1 = self.vm.sumThree(a0, a1, a2) + result2 = self.evm.callSum0(a0, a1, a2) + self.assertEqual(result0, result1) + self.assertEqual(result0 * self.evm.multiplier, result2) + self.assertTrue(self.evm.sumThree_called) + self.assertFalse(self.evm.sum0_called) + + def testModifiedVirtualMethod1(self): + '''Virtual method with three arguments and the last one + changed to have the default value set to 1000.''' + a0, a1, a2 = 2, 3, 5 + result0 = self.vm.sum1(a0, a1) + self.assertEqual(result0, a0 + a1 + 1000) + result1 = self.vm.sum1(a0, a1, a2) + result2 = self.vm.callSum1(a0, a1, a2) + self.assertEqual(result1, result2) + + def testReimplementedModifiedVirtualMethod1(self): + '''Override of the virtual method with three arguments and + the last one changed to have the default value set to 1000.''' + a0, a1 = 2, 3 + result0 = self.vm.sum1(a0, a1) + result1 = self.evm.callSum1(a0, a1, 1000) + self.assertEqual(result0 * self.evm.multiplier, result1) + self.assertTrue(self.evm.sum1_called) + + def testModifiedVirtualMethod2(self): + '''Virtual method originally with three arguments, the last + one was removed and the default value set to 2000.''' + a0, a1 = 1, 2 + result0 = self.vm.sum2(a0, a1) + self.assertEqual(result0, a0 + a1 + 2000) + result1 = self.vm.sum2(a0, a1) + result2 = self.vm.callSum2(a0, a1, 2000) + self.assertEqual(result1, result2) + self.assertRaises(TypeError, self.vm.sum2, 1, 2, 3) + + def testReimplementedModifiedVirtualMethod2(self): + '''Override of the virtual method originally with three arguments, + the last one was removed and the default value set to 2000.''' + a0, a1 = 1, 2 + ignored = 54321 + result0 = self.vm.sum2(a0, a1) + result1 = self.evm.callSum2(a0, a1, ignored) + self.assertEqual(result0 * self.evm.multiplier, result1) + self.assertTrue(self.evm.sum2_called) + + def testModifiedVirtualMethod3(self): + '''Virtual method originally with three arguments have the second + one removed and replaced by custom code that replaces it by the sum + of the first and the last arguments.''' + a0, a1 = 1, 2 + result0 = self.vm.sum3(a0, a1) + self.assertEqual(result0, a0 + (a0 + a1) + a1) + result1 = self.vm.callSum3(a0, 10, a1) + self.assertNotEqual(result0, result1) + result2 = self.vm.callSum3(a0, a0 + a1, a1) + self.assertEqual(result0, result2) + self.assertRaises(TypeError, self.vm.sum3, 1, 2, 3) + + def testReimplementedModifiedVirtualMethod3(self): + '''Override of the virtual method originally with three arguments + have the second one removed and replaced by custom code that + replaces it by the sum of the first and the last arguments.''' + a0, a1 = 1, 2 + ignored = 54321 + result0 = self.vm.sum3(a0, a1) + result1 = self.evm.callSum3(a0, ignored, a1) + self.assertEqual(result0 * self.evm.multiplier, result1) + self.assertTrue(self.evm.sum3_called) + + def testModifiedVirtualMethod4(self): + '''Virtual method originally with three arguments, the + last one was removed and the default value set to 3000.''' + a0, a1 = 1, 2 + default_value = 3000 + result0 = self.vm.sum4(a0, a1) + self.assertEqual(result0, a0 + default_value + a1) + removed_arg_value = 100 + result1 = self.vm.callSum4(a0, removed_arg_value, a1) + self.assertEqual(result1, a0 + removed_arg_value + a1) + self.assertRaises(TypeError, self.vm.sum4, 1, 2, 3) + + def testReimplementedModifiedVirtualMethod4(self): + '''Override of the virtual method originally with three arguments, + the last one was removed and the default value set to 3000. + The method was modified with code injection on the binding override + (the one that receives calls from C++ with the original signature + and forwards it to Python overrides) that subtracts the value of the + second argument (removed in Python) from the value of the first + before sending them to Python.''' + a0, a1 = 1, 2 + removed_arg_value = 2011 + default_value = 3000 + result = self.evm.callSum4(a0, removed_arg_value, a1) + self.assertEqual(result, (a0 - removed_arg_value + a1 + default_value) * self.evm.multiplier) + self.assertTrue(self.evm.sum4_called) + + def testOverridenMethodResultModification(self): + '''Injected code modifies the result of a call to a virtual + method overridden in Python.''' + orig_name = self.vm.callName() + self.assertEqual(orig_name, 'VirtualMethods') + name = self.evm.callName() + self.assertEqual(name, 'PimpedExtendedVirtualMethods') + self.assertEqual(name, Str('PimpedExtendedVirtualMethods')) + self.assertTrue(self.evm.name_called) + + def testInjectCodeCallsPythonVirtualMethodOverride(self): + '''When injected code calls the Python override by itself + no code for the method call should be generated.''' + self.evm.callCallMe() + self.assertEqual(self.evm.callMe_called, 1) + + def testAllArgumentsRemoved(self): + values = (10, 20, 30, 40) + self.vm.setMargins(*values) + self.assertEqual(self.vm.getMargins(), values) + + def testAllArgumentsRemovedCallVirtual(self): + values = (10, 20, 30, 40) + self.vm.setMargins(*values) + self.assertEqual(self.vm.callGetMargins(), values) + + def testExtendedAllArgumentsRemoved(self): + values = (10, 20, 30, 40) + self.evm.setMargins(*values) + double = tuple([m*2 for m in values]) + self.assertEqual(self.evm.getMargins(), double) + + def testExtendedAllArgumentsRemovedCallVirtual(self): + values = (10, 20, 30, 40) + self.evm.setMargins(*values) + double = tuple([m*2 for m in values]) + self.assertEqual(self.evm.callGetMargins(), double) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/multi_cpp_inheritance_test.py b/sources/shiboken2/tests/samplebinding/multi_cpp_inheritance_test.py new file mode 100644 index 0000000..5223f31 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/multi_cpp_inheritance_test.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for multiple inheritance''' + +import sys +import unittest + +from sample import * + +class SimpleUseCase(ObjectType, Str): + def __init__(self, name): + ObjectType.__init__(self) + Str.__init__(self, name) + +class SimpleUseCaseReverse(Str, ObjectType): + def __init__(self, name): + ObjectType.__init__(self) + Str.__init__(self, name) + +class SimpleUseCase2(SimpleUseCase): + def __init__(self, name): + SimpleUseCase.__init__(self, name) + +class ComplexUseCase(SimpleUseCase2, Point): + def __init__(self, name): + SimpleUseCase2.__init__(self, name) + Point.__init__(self) + +class ComplexUseCaseReverse(Point, SimpleUseCase2): + def __init__(self, name): + SimpleUseCase2.__init__(self, name) + Point.__init__(self) + +class MultipleCppDerivedTest(unittest.TestCase): + def testInstanciation(self): + s = SimpleUseCase("Hi") + self.assertEqual(s, "Hi") + s.setObjectName(s) + self.assertEqual(s.objectName(), "Hi") + + def testInstanciation2(self): + s = SimpleUseCase2("Hi") + self.assertEqual(s, "Hi") + s.setObjectName(s) + self.assertEqual(s.objectName(), "Hi") + + def testComplexInstanciation(self): + c = ComplexUseCase("Hi") + self.assertEqual(c, "Hi") + c.setObjectName(c) + self.assertEqual(c.objectName(), "Hi") + c.setX(2); + self.assertEqual(c.x(), 2) + +class MultipleCppDerivedReverseTest(unittest.TestCase): + def testInstanciation(self): + s = SimpleUseCaseReverse("Hi") + self.assertEqual(s, "Hi") + s.setObjectName(s) + self.assertEqual(s.objectName(), "Hi") + + def testInstanciation2(self): + s = SimpleUseCase2("Hi") + self.assertEqual(s, "Hi") + s.setObjectName(s) + self.assertEqual(s.objectName(), "Hi") + + def testComplexInstanciation(self): + c = ComplexUseCaseReverse("Hi") + c.setObjectName(c) + self.assertEqual(c.objectName(), "Hi") + c.setX(2); + self.assertEqual(c, Point(2, 0)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/multiple_derived_test.py b/sources/shiboken2/tests/samplebinding/multiple_derived_test.py new file mode 100644 index 0000000..9ac206d --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/multiple_derived_test.py @@ -0,0 +1,221 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for multiple inheritance''' + +import sys +import unittest + +from sample import Base1, Base2, Base3, Base4, Base5, Base6 +from sample import MDerived1, MDerived2, MDerived3, MDerived4, MDerived5, SonOfMDerived1 + +class ExtMDerived1(MDerived1): + def __init__(self): + MDerived1.__init__(self) + self.multiplier = 20 + self.base2Method_called = False + def base2Method(self): + return Base2.base2Method(self) * self.multiplier + +class MultipleDerivedTest(unittest.TestCase): + '''Test cases for multiple inheritance''' + + def testIsInstance(self): + '''MDerived1 is instance of its parents Base1 and Base2.''' + a = MDerived1() + self.assertTrue(isinstance(a, MDerived1)) + self.assertTrue(isinstance(a, Base1)) + self.assertTrue(isinstance(a, Base2)) + + def testIsSubclass(self): + '''MDerived1 is subclass of its parents Base1 and Base2.''' + self.assertTrue(issubclass(MDerived1, Base1)) + self.assertTrue(issubclass(MDerived1, Base2)) + + def testCallToFunctionWithBase1ArgumentThatCastsBackToMDerived1(self): + '''MDerived1 is passed as an Base1 argument to a method that returns it casted back to MDerived1.''' + a = MDerived1() + b = MDerived1.transformFromBase1(a) + self.assertEqual(a, b) + + def testCallToFunctionWithBase2ArgumentThatCastsBackToMDerived1(self): + '''MDerived1 is passed as an Base2 argument to a method that returns it casted back to MDerived1.''' + a = MDerived1() + b = MDerived1.transformFromBase2(a) + self.assertEqual(a, b) + + def testPythonClassIsInstance(self): + '''Python defined class ExtMDerived1 is instance of its parents MDerived1, Base1 and Base2.''' + a = ExtMDerived1() + self.assertTrue(isinstance(a, ExtMDerived1)) + self.assertTrue(isinstance(a, MDerived1)) + self.assertTrue(isinstance(a, Base1)) + self.assertTrue(isinstance(a, Base2)) + + def testPythonClassIsSubclass(self): + '''Python defined class ExtMDerived1 is subclass of its parents MDerived1, Base1 and Base2.''' + self.assertTrue(issubclass(ExtMDerived1, MDerived1)) + self.assertTrue(issubclass(ExtMDerived1, Base1)) + self.assertTrue(issubclass(ExtMDerived1, Base2)) + + def testCastFromMDerived1ToBases(self): + '''MDerived1 is casted by C++ to its parents and the binding must return the MDerived1 wrapper.''' + a = MDerived1() + refcnt = sys.getrefcount(a) + b1 = a.castToBase1() + b2 = a.castToBase2() + self.assertTrue(isinstance(b1, MDerived1)) + self.assertTrue(isinstance(b2, MDerived1)) + self.assertEqual(a, b1) + self.assertEqual(a, b2) + self.assertEqual(sys.getrefcount(a), refcnt + 2) + + def testCastFromExtMDerived1ToMDerived1Bases(self): + '''Python defined class ExtMDerived1 is casted by C++ to MDerived1 parents and the binding must return the correct ExtMDerived1 instance.''' + a = ExtMDerived1() + refcnt = sys.getrefcount(a) + b1 = a.castToBase1() + self.assertTrue(isinstance(b1, MDerived1)) + self.assertTrue(isinstance(b1, ExtMDerived1)) + b2 = a.castToBase2() + self.assertTrue(isinstance(b2, MDerived1)) + self.assertTrue(isinstance(b2, ExtMDerived1)) + self.assertEqual(a, b1) + self.assertEqual(a, b2) + self.assertEqual(sys.getrefcount(a), refcnt + 2) + + def testCastFromSonOfMDerived1ToBases(self): + '''SonOfMDerived1 is casted by C++ to its parents and the binding must return the SonOfMDerived1 wrapper.''' + a = SonOfMDerived1() + refcnt = sys.getrefcount(a) + md1 = a.castToMDerived1() + b1 = a.castToBase1() + b2 = a.castToBase2() + self.assertTrue(isinstance(md1, SonOfMDerived1)) + self.assertTrue(isinstance(b2, SonOfMDerived1)) + self.assertTrue(isinstance(b2, SonOfMDerived1)) + self.assertEqual(a, md1) + self.assertEqual(a, b1) + self.assertEqual(a, b2) + self.assertEqual(sys.getrefcount(a), refcnt + 3) + + def testReimplementedBase2VirtualMethodOnClassInheritingFromMDerived1(self): + a = ExtMDerived1() + value = a.base2Method() + self.assertTrue(value, Base2.base2Method(a) * a.multiplier) + + def testCastFromMDerived2ToBases(self): + '''MDerived2 is casted by C++ to its parents and the binding must return the MDerived2 wrapper.''' + a = MDerived2() + refcnt = sys.getrefcount(a) + b3 = a.castToBase3() + b4 = a.castToBase4() + b5 = a.castToBase5() + b6 = a.castToBase6() + self.assertTrue(isinstance(b3, MDerived2)) + self.assertTrue(isinstance(b4, MDerived2)) + self.assertTrue(isinstance(b5, MDerived2)) + self.assertTrue(isinstance(b6, MDerived2)) + self.assertEqual(a, b3) + self.assertEqual(a, b4) + self.assertEqual(a, b5) + self.assertEqual(a, b6) + self.assertEqual(sys.getrefcount(a), refcnt + 4) + + def testCastFromMDerived3ToBases(self): + '''MDerived3 is casted by C++ to its parents and the binding must return the MDerived3 wrapper.''' + a = MDerived3() + refcnt = sys.getrefcount(a) + md1 = a.castToMDerived1() + md2 = a.castToMDerived2() + b1 = a.castToBase1() + b2 = a.castToBase2() + b3 = a.castToBase3() + b4 = a.castToBase4() + b5 = a.castToBase5() + b6 = a.castToBase6() + self.assertTrue(isinstance(md1, MDerived3)) + self.assertTrue(isinstance(md2, MDerived3)) + self.assertTrue(isinstance(b1, MDerived3)) + self.assertTrue(isinstance(b2, MDerived3)) + self.assertTrue(isinstance(b3, MDerived3)) + self.assertTrue(isinstance(b4, MDerived3)) + self.assertTrue(isinstance(b5, MDerived3)) + self.assertTrue(isinstance(b6, MDerived3)) + self.assertEqual(a, md1) + self.assertEqual(a, md2) + self.assertEqual(a, b1) + self.assertEqual(a, b2) + self.assertEqual(a, b3) + self.assertEqual(a, b4) + self.assertEqual(a, b5) + self.assertEqual(a, b6) + self.assertEqual(sys.getrefcount(a), refcnt + 8) + + def testCastFromMDerived4ToBases(self): + '''MDerived4 is casted by C++ to its parents and the binding must return the MDerived4 wrapper.''' + a = MDerived4() + refcnt = sys.getrefcount(a) + b3 = a.castToBase3() + b4 = a.castToBase4() + self.assertTrue(isinstance(b3, MDerived4)) + self.assertTrue(isinstance(b4, MDerived4)) + self.assertEqual(a, b3) + self.assertEqual(a, b4) + self.assertEqual(sys.getrefcount(a), refcnt + 2) + + def testCastFromMDerived5ToBases(self): + '''MDerived5 is casted by C++ to its parents and the binding must return the MDerived5 wrapper.''' + a = MDerived5() + refcnt = sys.getrefcount(a) + b3 = a.castToBase3() + b4 = a.castToBase4() + self.assertTrue(isinstance(b3, MDerived5)) + self.assertTrue(isinstance(b4, MDerived5)) + self.assertEqual(a, b3) + self.assertEqual(a, b4) + self.assertEqual(sys.getrefcount(a), refcnt + 2) + + def testCastFromMDerived3ToBase3(self): + '''MDerived3 is casted by C++ to Base3 grandparent using both the inherited and reimplement castToBase3 methods.''' + a = MDerived3() + refcnt = sys.getrefcount(a) + b3_reimplemented = a.castToBase3() + b3_inherited = MDerived2.castToBase3(a) + self.assertTrue(isinstance(b3_reimplemented, MDerived3)) + self.assertTrue(isinstance(b3_inherited, MDerived3)) + self.assertEqual(a, b3_reimplemented) + self.assertEqual(a, b3_inherited) + self.assertEqual(sys.getrefcount(a), refcnt + 2) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/namespace_test.py b/sources/shiboken2/tests/samplebinding/namespace_test.py new file mode 100644 index 0000000..5fcdab9 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/namespace_test.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for std::map container conversions''' + +import unittest +from sample import * + + +class TestEnumUnderNamespace(unittest.TestCase): + def testInvisibleNamespace(self): + o1 = EnumOnNamespace.Option1 + self.assertEqual(o1, 1) + +class TestClassesUnderNamespace(unittest.TestCase): + def testIt(self): + c1 = SampleNamespace.SomeClass() + e1 = SampleNamespace.SomeClass.ProtectedEnum() + c2 = SampleNamespace.SomeClass.SomeInnerClass() + e2 = SampleNamespace.SomeClass.SomeInnerClass.ProtectedEnum() + c3 = SampleNamespace.SomeClass.SomeInnerClass.OkThisIsRecursiveEnough() + e3 = SampleNamespace.SomeClass.SomeInnerClass.OkThisIsRecursiveEnough.NiceEnum() + + def testFunctionAddedOnNamespace(self): + res = SampleNamespace.ImInsideANamespace(2, 2) + self.assertEqual(res, 4) + + def testTpNames(self): + self.assertEqual(str(SampleNamespace.SomeClass), + "") + self.assertEqual(str(SampleNamespace.SomeClass.ProtectedEnum), + "") + self.assertEqual(str(SampleNamespace.SomeClass.SomeInnerClass.ProtectedEnum), + "") + self.assertEqual(str(SampleNamespace.SomeClass.SomeInnerClass.OkThisIsRecursiveEnough), + "") + self.assertEqual(str(SampleNamespace.SomeClass.SomeInnerClass.OkThisIsRecursiveEnough.NiceEnum), + "") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/newdivision_test.py b/sources/shiboken2/tests/samplebinding/newdivision_test.py new file mode 100644 index 0000000..331d7b3 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/newdivision_test.py @@ -0,0 +1,42 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import division +from sample import * +import unittest + +class TestNewDivision(unittest.TestCase): + + def testIt(self): + p = Point(4, 4) + p2 = p/2 + self.assertEqual(p2, Point(2, 2)) + +if __name__ == "__main__": + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/nondefaultctor_test.py b/sources/shiboken2/tests/samplebinding/nondefaultctor_test.py new file mode 100644 index 0000000..86a05fd --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/nondefaultctor_test.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for ...''' + +import sys +import unittest + +from sample import NonDefaultCtor + +class DerivedNonDefaultCtor (NonDefaultCtor): + def returnMyselfVirtual(self): + return NonDefaultCtor(self.value()+1) + +class AnotherDerivedNonDefaultCtor (NonDefaultCtor): + def __init__(self, some_string): + pass + +class NonDefaultCtorTest(unittest.TestCase): + + def testNonDefaultCtor(self): + c = NonDefaultCtor(2) + # these functions returns NonDefaultCtor by value, so a PyObjecy is created every time + self.assertNotEqual(c.returnMyself(), c) + self.assertEqual(c.returnMyself().value(), 2) + self.assertNotEqual(c.returnMyself(3), c) + self.assertEqual(c.returnMyself(3).value(), 2) + self.assertNotEqual(c.returnMyself(4, c), c) + self.assertEqual(c.returnMyself(4, c).value(), 2) + + def testVirtuals(self): + c = DerivedNonDefaultCtor(3) + # these functions returns NonDefaultCtor by value, so a PyObjecy is created every time + self.assertNotEqual(c.returnMyselfVirtual(), c) + self.assertEqual(c.returnMyselfVirtual().value(), 4) + self.assertEqual(c.callReturnMyselfVirtual().value(), 4) + + def testCtorOverload(self): + c = AnotherDerivedNonDefaultCtor("testing") + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/nonzero_test.py b/sources/shiboken2/tests/samplebinding/nonzero_test.py new file mode 100644 index 0000000..138a922 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/nonzero_test.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from sample import * + +class TestNonZeroOperator(unittest.TestCase): + def testIt(self): + c = Color() + self.assertFalse(c) + c = Color(2) + self.assertTrue(c) + +if __name__ == "__main__": + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/numericaltypedef_test.py b/sources/shiboken2/tests/samplebinding/numericaltypedef_test.py new file mode 100644 index 0000000..f82e234 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/numericaltypedef_test.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from sample import SizeF + +class NumericalTypedefTest(unittest.TestCase): + + def testNumericalTypedefExact(self): + width, height = (1.1, 2.2) + size = SizeF(width, height) + self.assertEqual(size.width(), width) + self.assertEqual(size.height(), height) + + def testNumericalTypedefConvertible(self): + width, height = (1, 2) + size = SizeF(width, height) + self.assertEqual(size.width(), float(width)) + self.assertEqual(size.height(), float(height)) + + def testNumericalTypedefOfUnsignedShort(self): + self.assertEqual(SizeF.passTypedefOfUnsignedShort(123), 123) + self.assertEqual(SizeF.passTypedefOfUnsignedShort(321), 321) + self.assertNotEqual(SizeF.passTypedefOfUnsignedShort(123), 0) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/numpy_test.py b/sources/shiboken2/tests/samplebinding/numpy_test.py new file mode 100644 index 0000000..90b9799 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/numpy_test.py @@ -0,0 +1,58 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import sys + +try: + from distutils import sysconfig + if bool(sysconfig.get_config_var('Py_DEBUG')): + sys.exit(0) + import numpy +except: + sys.exit(0) + +import unittest +from sample import PointF + +class TestNumpyTypes(unittest.TestCase): + + def testNumpyConverted(self): + x, y = (0.1, 0.2) + p = PointF(float(numpy.float32(x)), float(numpy.float32(y))) + self.assertAlmostEqual(p.x(), x) + self.assertAlmostEqual(p.y(), y) + + def testNumpyAsIs(self): + x, y = (0.1, 0.2) + p = PointF(numpy.float32(x), numpy.float32(y)) + self.assertAlmostEqual(p.x(), x) + self.assertAlmostEqual(p.y(), y) + +if __name__ == "__main__": + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/objecttype_test.py b/sources/shiboken2/tests/samplebinding/objecttype_test.py new file mode 100644 index 0000000..bda14c6 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/objecttype_test.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests ObjectType class of object-type with privates copy constructor and = operator.''' + +import unittest +import sys + +from sample import ObjectType, Str +import shiboken2 as shiboken + + +class ObjectTypeTest(unittest.TestCase): + '''Test cases ObjectType class of object-type with privates copy constructor and = operator.''' + + def testObjectTypeSetObjectNameWithStrVariable(self): + '''ObjectType.setObjectName with Str variable as argument.''' + s = Str('object name') + o = ObjectType() + o.setObjectName(s) + self.assertEqual(str(o.objectName()), str(s)) + + def testObjectTypeSetObjectNameWithStrInstantiation(self): + '''ObjectType.setObjectName with Str instantiation as argument.''' + s = 'object name' + o = ObjectType() + o.setObjectName(Str(s)) + self.assertEqual(str(o.objectName()), s) + + def testObjectTypeSetObjectNameWithPythonString(self): + '''ObjectType.setObjectName with Python string as argument.''' + o = ObjectType() + o.setObjectName('object name') + self.assertEqual(str(o.objectName()), 'object name') + + def testNullOverload(self): + o = ObjectType() + o.setObject(None) + self.assertEqual(o.callId(), 0) + o.setNullObject(None) + self.assertEqual(o.callId(), 1) + + def testParentFromCpp(self): + o = ObjectType() + self.assertEqual(sys.getrefcount(o), 2) + o.getCppParent().setObjectName('parent') + self.assertEqual(sys.getrefcount(o), 3) + o.getCppParent().setObjectName('parent') + self.assertEqual(sys.getrefcount(o), 3) + o.getCppParent().setObjectName('parent') + self.assertEqual(sys.getrefcount(o), 3) + o.getCppParent().setObjectName('parent') + self.assertEqual(sys.getrefcount(o), 3) + o.getCppParent().setObjectName('parent') + self.assertEqual(sys.getrefcount(o), 3) + o.destroyCppParent() + self.assertEqual(sys.getrefcount(o), 2) + + def testNextInFocusChainCycle(self): + parent = ObjectType() + child = ObjectType(parent) + next_focus = child.nextInFocusChain() + + shiboken.invalidate(parent) + + def testNextInFocusChainCycleList(self): + '''As above but in for a list of objects''' + parents = [] + children = [] + focus_chains = [] + for i in range(10): + parent = ObjectType() + child = ObjectType(parent) + next_focus = child.nextInFocusChain() + parents.append(parent) + children.append(child) + focus_chains.append(next_focus) + + shiboken.invalidate(parents) + + def testClassDecref(self): + # Bug was that class PyTypeObject wasn't decrefed when instance died + before = sys.getrefcount(ObjectType) + + for i in range(1000): + obj = ObjectType() + shiboken.delete(obj) + + after = sys.getrefcount(ObjectType) + + self.assertLess(abs(before - after), 5) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/objecttype_with_named_args_test.py b/sources/shiboken2/tests/samplebinding/objecttype_with_named_args_test.py new file mode 100755 index 0000000..846ae51 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/objecttype_with_named_args_test.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from sample import ObjectType + +class NamedArgsTest(unittest.TestCase): + + def testOneArgument(self): + p = ObjectType() + o = ObjectType(parent=p) + self.assertEqual(o.parent(), p) + + def testMoreArguments(self): + o = ObjectType() + + o.setObjectSplittedName("", prefix="pys", suffix="ide") + self.assertEqual(o.objectName(), "pyside") + + o.setObjectSplittedName("", suffix="ide", prefix="pys") + self.assertEqual(o.objectName(), "pyside") + + o.setObjectNameWithSize(name="pyside", size=6) + self.assertEqual(o.objectName(), "pyside") + + o.setObjectNameWithSize(size=6, name="pyside") + self.assertEqual(o.objectName(), "pyside") + + + def testUseDefaultValues(self): + o = ObjectType() + + o.setObjectNameWithSize(size=3) + self.assertEqual(o.objectName(), "") # user prefix=' b) + self.assertEqual(a.key(), "aoperator>") + + def testPointerOpeators(self): + a = ObjectTypeOperators("a") + b = ObjectTypeOperators("b") + self.assertEqual(a + "bc", "abc") + self.assertEqual("bc" + a, "bca") + self.assertEqual("a", a) + self.assertEqual(a, "a") + + def testOperatorInjection(self): + a = ObjectTypeOperators("a") + self.assertNotEqual(a, "b") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/objecttypereferenceasvirtualmethodargument_test.py b/sources/shiboken2/tests/samplebinding/objecttypereferenceasvirtualmethodargument_test.py new file mode 100644 index 0000000..b9ab554 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/objecttypereferenceasvirtualmethodargument_test.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from sample import ObjectTypeHolder + +class TestObjectTypeReferenceAsVirtualMethodArgument(unittest.TestCase): + + def testBasic(self): + holder = ObjectTypeHolder('TheObjectFromC++') + self.assertEqual(holder.callPassObjectTypeAsReference(), 'TheObjectFromC++') + + def testExtended(self): + class Holder(ObjectTypeHolder): + def passObjectTypeAsReference(self, objectType): + return objectType.objectName().prepend(('ThisIs')) + holder = Holder('TheObjectFromC++') + self.assertEqual(holder.callPassObjectTypeAsReference(), 'ThisIsTheObjectFromC++') + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/oddbool_test.py b/sources/shiboken2/tests/samplebinding/oddbool_test.py new file mode 100644 index 0000000..f99645b --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/oddbool_test.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for OddBool user's primitive type conversion.''' + +import unittest + +from sample import OddBoolUser + +class DerivedOddBoolUser (OddBoolUser): + def returnMyselfVirtual(self): + return OddBoolUser() + pass + +class OddBoolTest(unittest.TestCase): + + def testOddBoolUser(self): + obuTrue = OddBoolUser() + obuFalse = OddBoolUser() + obuTrue.setOddBool(True) + self.assertEqual(obuFalse.oddBool(), False) + self.assertEqual(obuTrue.oddBool(), True) + self.assertEqual(obuTrue.callInvertedOddBool(), False) + + self.assertEqual(obuTrue.oddBool() == True, True) + self.assertEqual(False == obuFalse.oddBool(), True) + self.assertEqual(obuTrue.oddBool() == obuFalse.oddBool(), False) + + self.assertEqual(obuFalse.oddBool() != True, True) + self.assertEqual(True != obuFalse.oddBool(), True) + self.assertEqual(obuTrue.oddBool() != obuFalse.oddBool(), True) + + def testVirtuals(self): + dobu = DerivedOddBoolUser() + self.assertEqual(dobu.invertedOddBool(), True) + + def testImplicitConversionWithUsersPrimitiveType(self): + obu = OddBoolUser(True) + self.assertTrue(obu.oddBool()) + obu = OddBoolUser(False) + self.assertFalse(obu.oddBool()) + cpx = complex(1.0, 0.0) + obu = OddBoolUser(cpx) + self.assertTrue(obu.oddBool()) + cpx = complex(0.0, 0.0) + obu = OddBoolUser(cpx) + self.assertFalse(obu.oddBool()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/oldstyleclass_as_number_test.py b/sources/shiboken2/tests/samplebinding/oldstyleclass_as_number_test.py new file mode 100644 index 0000000..8852e15 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/oldstyleclass_as_number_test.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sample +from py3kcompat import IS_PY3K + +class OldStyle: + pass + +class NewStyle(object): + pass + +class OldStyleNumber: + def __init__(self, value): + self.value = value + def __trunc__(self): + return self.value + +class NewStyleNumber(object): + def __init__(self, value): + self.value = value + def __int__(self): + return int(self.value) + def __trunc__(self): + return self.value + +class TestOldStyleClassAsNumber(unittest.TestCase): + + def testBasic(self): + '''For the sake of calibration...''' + self.assertEqual(sample.acceptInt(123), 123) + + def testOldStyleClassPassedAsInteger(self): + '''Old-style classes aren't numbers and shouldn't be accepted.''' + obj = OldStyle() + self.assertRaises(TypeError, sample.acceptInt, obj) + + def testNewStyleClassPassedAsInteger(self): + '''New-style classes aren't numbers and shouldn't be accepted.''' + obj = NewStyle() + self.assertRaises(TypeError, sample.acceptInt, obj) + + def testOldStyleClassWithNumberProtocol(self): + obj = OldStyleNumber(123) + self.assertEqual(sample.acceptInt(obj), obj.value) + + def testNewStyleClassWithNumberProtocol(self): + obj = NewStyleNumber(123) + self.assertEqual(sample.acceptInt(obj), obj.value) + +if __name__ == "__main__" and not IS_PY3K: + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/onlycopyclass_test.py b/sources/shiboken2/tests/samplebinding/onlycopyclass_test.py new file mode 100644 index 0000000..43a0951 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/onlycopyclass_test.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from sample import OnlyCopy, FriendOfOnlyCopy + +class ClassWithOnlyCopyCtorTest(unittest.TestCase): + def testGetOne(self): + obj = FriendOfOnlyCopy.createOnlyCopy(123) + self.assertEqual(type(obj), OnlyCopy) + self.assertEqual(obj.value(), 123) + + def testGetMany(self): + objs = FriendOfOnlyCopy.createListOfOnlyCopy(3) + self.assertEqual(type(objs), list) + self.assertEqual(len(objs), 3) + for value, obj in enumerate(objs): + self.assertEqual(obj.value(), value) + + def testPassAsValue(self): + obj = FriendOfOnlyCopy.createOnlyCopy(123) + self.assertEqual(obj.value(), OnlyCopy.getValue(obj)) + + def testPassAsReference(self): + obj = FriendOfOnlyCopy.createOnlyCopy(123) + self.assertEqual(obj.value(), OnlyCopy.getValueFromReference(obj)) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/overflow_test.py b/sources/shiboken2/tests/samplebinding/overflow_test.py new file mode 100644 index 0000000..b7a1006 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/overflow_test.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for overflowing C++ numeric types.''' + +import sys +import unittest + +from sample import * +from py3kcompat import IS_PY3K, long + +class OverflowTest(unittest.TestCase): + '''Test case for overflowing C++ numeric types.''' + + def testUnsignedInt(self): + '''C++ function receives an unsigned int argument and raise OverflowError if the value is negative.''' + val = 100 + self.assertEqual(doubleUnsignedInt(val), 2 * val) + val *= -1 + self.assertRaises(OverflowError, doubleUnsignedInt, val) + + def testLongLong(self): + '''C++ function receives an long long argument and raise OverflowError if the value is negative.''' + val = 100 + self.assertEqual(doubleLongLong(val), 2 * val) + val = long(100) + self.assertEqual(doubleLongLong(val), 2 * val) + val = (2 << 64) + 1 + self.assertRaises(OverflowError, doubleLongLong, val) + + def testUnsignedLongLong(self): + '''C++ function receives an unsigned long long argument and raise OverflowError if the value is negative.''' + val = 100 + self.assertEqual(doubleUnsignedLongLong(val), 2 * val) + val = long(100) + self.assertEqual(doubleUnsignedLongLong(val), 2 * val) + val = -100 + self.assertRaises(OverflowError, doubleUnsignedLongLong, val) + val = long(-200) + self.assertRaises(OverflowError, doubleUnsignedLongLong, val) + + def testOverflow(self): + '''Calls function with unsigned int parameter using an overflowing value.''' + self.assertRaises(OverflowError, doubleUnsignedInt, 42415335332353253) + doubleUnsignedInt(0xdeadbeef) + + def testShortOverflow(self): + '''Calls function with short parameter using an overflowing value.''' + doubleShort(-3) + self.assertRaises(OverflowError, doubleShort, 0xFFFF*-1) + self.assertRaises(OverflowError, doubleShort, 0xFFFF + 1) + + def testOverflowOnCtor(self): + '''Calls object ctor with int parameter using overflowing values.''' + self.assertRaises(OverflowError, Point, 42415335332353253, 42415335332353253) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/overload_sorting_test.py b/sources/shiboken2/tests/samplebinding/overload_sorting_test.py new file mode 100644 index 0000000..b3b0f7c --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/overload_sorting_test.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for overload sorting''' + +import unittest + +from sample import * + +class Dummy(object): + pass + +class SimpleOverloadSorting(unittest.TestCase): + + def setUp(self): + self.obj = SortedOverload() + + def testIntDouble(self): + '''Overloads with int and double''' + self.assertEqual(self.obj.overload(3), "int") + self.assertEqual(self.obj.overload(3.14), "double") + + def testImplicitConvert(self): + '''Overloads with implicit convertible types''' + self.assertEqual(self.obj.overload(ImplicitTarget()), "ImplicitTarget") + self.assertEqual(self.obj.overload(ImplicitBase()), "ImplicitBase") + + def testContainer(self): + '''Overloads with containers arguments''' + self.assertEqual(self.obj.overload([ImplicitBase()]), "list(ImplicitBase)") + + def testPyObject(self): + '''Overloads with PyObject args''' + self.assertEqual(self.obj.overload(Dummy()), "PyObject") + + def testImplicitOnly(self): + '''Passing an implicit convertible object to an overload''' + self.assertTrue(self.obj.implicit_overload(ImplicitTarget())) + + def testPyObjectSort(self): + self.assertEqual(self.obj.pyObjOverload(1, 2), "int,int") + self.assertEqual(self.obj.pyObjOverload(object(), 2), "PyObject,int") + + +class DeepOverloadSorting(unittest.TestCase): + + def setUp(self): + self.obj = SortedOverload() + + def testPyObject(self): + '''Deep Overload - (int, PyObject *)''' + self.assertEqual(self.obj.overloadDeep(1, Dummy()), "PyObject") + + def testImplicit(self): + '''Deep Overload - (int, ImplicitBase *)''' + self.assertEqual(self.obj.overloadDeep(1, ImplicitBase()), "ImplicitBase") + +class EnumOverIntSorting(unittest.TestCase): + def testEnumOverInt(self): + ic = ImplicitConv(ImplicitConv.CtorTwo) + self.assertEqual(ic.ctorEnum(), ImplicitConv.CtorTwo) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/overload_test.py b/sources/shiboken2/tests/samplebinding/overload_test.py new file mode 100644 index 0000000..0cc9e42 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/overload_test.py @@ -0,0 +1,209 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for Overload class''' + +import unittest +from sample import Echo, Overload, Point, PointF, Polygon, Rect, RectF, Size, Str + + +def raisesWithErrorMessage(func, arguments, errorType, errorMsg): + '''NOTE: Using 'try' because assertRaisesRegexp is not available + to check the error message.''' + try: + func(*arguments) + return False + except Exception as err: + if type(err) != TypeError: + return False + if not errorMsg in str(err): + return False + return True + + +class OverloadTest(unittest.TestCase): + '''Test case for Overload class''' + + def testOverloadMethod0(self): + '''Check overloaded method call for signature "overloaded()".''' + overload = Overload() + self.assertEqual(overload.overloaded(), Overload.Function0) + + def testOverloadMethod1(self): + '''Check overloaded method call for signature "overloaded(Size*)".''' + overload = Overload() + size = Size() + self.assertEqual(overload.overloaded(size), Overload.Function1) + + def testOverloadMethod2(self): + '''Check overloaded method call for signature "overloaded(Point*, ParamEnum)".''' + overload = Overload() + point = Point() + self.assertEqual(overload.overloaded(point, Overload.Param1), Overload.Function2) + + def testOverloadMethod3(self): + '''Check overloaded method call for signature "overloaded(const Point&)".''' + overload = Overload() + point = Point() + self.assertEqual(overload.overloaded(point), Overload.Function3) + + def testDifferentReturnTypes(self): + '''Check method calls for overloads with different return types.''' + overload = Overload() + self.assertEqual(overload.differentReturnTypes(), None) + self.assertEqual(overload.differentReturnTypes(Overload.Param1), None) + self.assertEqual(overload.differentReturnTypes(Overload.Param0, 13), 13) + + def testIntOverloads(self): + overload = Overload() + self.assertEqual(overload.intOverloads(2, 3), 2) + self.assertEqual(overload.intOverloads(2, 4.5), 3) + self.assertEqual(overload.intOverloads(Point(0, 0), 3), 1) + + def testIntDoubleOverloads(self): + overload = Overload() + self.assertEqual(overload.intDoubleOverloads(1, 2), Overload.Function0) + self.assertEqual(overload.intDoubleOverloads(1, 2.0), Overload.Function0) + self.assertEqual(overload.intDoubleOverloads(1.0, 2), Overload.Function1) + self.assertEqual(overload.intDoubleOverloads(1.0, 2.0), Overload.Function1) + + def testWrapperIntIntOverloads(self): + overload = Overload() + self.assertEqual(overload.wrapperIntIntOverloads(Point(), 1, 2), Overload.Function0) + self.assertEqual(overload.wrapperIntIntOverloads(Polygon(), 1, 2), Overload.Function1) + + def testDrawTextPointAndStr(self): + overload = Overload() + self.assertEqual(overload.drawText(Point(), Str()), Overload.Function0) + self.assertEqual(overload.drawText(Point(), ''), Overload.Function0) + self.assertEqual(overload.drawText(PointF(), Str()), Overload.Function1) + self.assertEqual(overload.drawText(PointF(), ''), Overload.Function1) + + def testDrawTextRectIntStr(self): + overload = Overload() + self.assertEqual(overload.drawText(Rect(), 1, Str()), Overload.Function2) + self.assertEqual(overload.drawText(Rect(), 1, ''), Overload.Function2) + self.assertEqual(overload.drawText(RectF(), 1, Str()), Overload.Function3) + self.assertEqual(overload.drawText(RectF(), 1, ''), Overload.Function3) + + def testDrawTextRectFStrEcho(self): + overload = Overload() + self.assertEqual(overload.drawText(RectF(), Str()), Overload.Function4) + self.assertEqual(overload.drawText(RectF(), ''), Overload.Function4) + self.assertEqual(overload.drawText(RectF(), Str(), Echo()), Overload.Function4) + self.assertEqual(overload.drawText(RectF(), '', Echo()), Overload.Function4) + self.assertEqual(overload.drawText(Rect(), Str()), Overload.Function4) + self.assertEqual(overload.drawText(Rect(), ''), Overload.Function4) + self.assertEqual(overload.drawText(Rect(), Str(), Echo()), Overload.Function4) + self.assertEqual(overload.drawText(Rect(), '', Echo()), Overload.Function4) + + def testDrawTextIntIntStr(self): + overload = Overload() + self.assertEqual(overload.drawText(1, 2, Str()), Overload.Function5) + self.assertEqual(overload.drawText(1, 2, ''), Overload.Function5) + + def testDrawTextIntIntIntIntStr(self): + overload = Overload() + self.assertEqual(overload.drawText(1, 2, 3, 4, 5, Str()), Overload.Function6) + self.assertEqual(overload.drawText(1, 2, 3, 4, 5, ''), Overload.Function6) + + def testDrawText2IntIntIntIntStr(self): + overload = Overload() + self.assertEqual(overload.drawText2(1, 2, 3, 4, 5, Str()), Overload.Function6) + self.assertEqual(overload.drawText2(1, 2, 3, 4, 5, ''), Overload.Function6) + self.assertEqual(overload.drawText2(1, 2, 3, 4, 5), Overload.Function6) + self.assertEqual(overload.drawText2(1, 2, 3, 4), Overload.Function6) + self.assertEqual(overload.drawText2(1, 2, 3), Overload.Function6) + + def testDrawText3(self): + overload = Overload() + self.assertEqual(overload.drawText3(Str(), Str(), Str()), Overload.Function0) + self.assertEqual(overload.drawText3('', '', ''), Overload.Function0) + self.assertEqual(overload.drawText3(1, 2, 3, 4, 5), Overload.Function1) + self.assertEqual(overload.drawText3(1, 2, 3, 4, 5), Overload.Function1) + + def testDrawText3Exception(self): + overload = Overload() + args = (Str(), Str(), Str(), 4, 5) + result = raisesWithErrorMessage(overload.drawText3, args, + TypeError, 'called with wrong argument types:') + self.assertTrue(result) + + def testDrawText4(self): + overload = Overload() + self.assertEqual(overload.drawText4(1, 2, 3), Overload.Function0) + self.assertEqual(overload.drawText4(1, 2, 3, 4, 5), Overload.Function1) + + def testAcceptSequence(self): + # Overload.acceptSequence() + overload = Overload() + self.assertEqual(overload.acceptSequence(), Overload.Function0) + + def testAcceptSequenceIntInt(self): + # Overload.acceptSequence(int,int) + overload = Overload() + self.assertEqual(overload.acceptSequence(1, 2), Overload.Function1) + + def testAcceptSequenceStrParamEnum(self): + # Overload.acceptSequence(Str,Overload::ParamEnum) + overload = Overload() + self.assertEqual(overload.acceptSequence(''), Overload.Function2) + self.assertEqual(overload.acceptSequence('', Overload.Param0), Overload.Function2) + self.assertEqual(overload.acceptSequence(Str('')), Overload.Function2) + self.assertEqual(overload.acceptSequence(Str(''), Overload.Param0), Overload.Function2) + + def testAcceptSequenceSize(self): + # Overload.acceptSequence(Size) + overload = Overload() + self.assertEqual(overload.acceptSequence(Size()), Overload.Function3) + + def testAcceptSequenceStringList(self): + # Overload.acceptSequence(const char**) + overload = Overload() + strings = ['line 1', 'line 2'] + self.assertEqual(overload.acceptSequence(strings), Overload.Function4) + args = (['line 1', 2], ) + result = raisesWithErrorMessage(overload.acceptSequence, args, + TypeError, 'The argument must be a sequence of strings.') + self.assertTrue(result) + + def testAcceptSequencePyObject(self): + # Overload.acceptSequence(void*) + overload = Overload() + class Foo(object): + pass + foo = Foo() + self.assertEqual(overload.acceptSequence(foo), Overload.Function5) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/overloadwithdefault_test.py b/sources/shiboken2/tests/samplebinding/overloadwithdefault_test.py new file mode 100644 index 0000000..8db9726 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/overloadwithdefault_test.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from sample import Overload, Str +from py3kcompat import b + +class OverloadTest(unittest.TestCase): + + def testNoArgument(self): + overload = Overload() + self.assertEqual(overload.strBufferOverloads(), Overload.Function2) + + def testStrArgument(self): + overload = Overload() + self.assertEqual(overload.strBufferOverloads(Str('')), Overload.Function0) + self.assertEqual(overload.strBufferOverloads(Str(''), ''), Overload.Function0) + self.assertEqual(overload.strBufferOverloads(Str(''), '', False), Overload.Function0) + + def testStringArgumentAsStr(self): + overload = Overload() + self.assertEqual(overload.strBufferOverloads('', ''), Overload.Function0) + self.assertEqual(overload.strBufferOverloads('', '', False), Overload.Function0) + + def testStringArgumentAsBuffer(self): + overload = Overload() + self.assertEqual(overload.strBufferOverloads(b'', 0), Overload.Function1) + + def testBufferArgument(self): + overload = Overload() + self.assertEqual(overload.strBufferOverloads(b(''), 0), Overload.Function1) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/ownership_argument_invalidation_test.py b/sources/shiboken2/tests/samplebinding/ownership_argument_invalidation_test.py new file mode 100644 index 0000000..e0b79da --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/ownership_argument_invalidation_test.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Wrapper validity tests for arguments.''' + +import sys +import unittest + +from sample import Polygon, Point + +class WrapperValidityOfArgumentsTest(unittest.TestCase): + '''Wrapper validity tests for arguments.''' + + def testInvalidArgumentToMethod(self): + '''Call to method using invalidated Python wrapper as argument should raise RuntimeError.''' + poly = Polygon() + Polygon.stealOwnershipFromPython(poly) + self.assertRaises(RuntimeError, Polygon.doublePolygonScale, poly) + + def testInvalidArgumentToConstructor(self): + '''Call to constructor using invalidated Python wrapper as argument should raise RuntimeError.''' + pt = Point(1, 2) + Polygon.stealOwnershipFromPython(pt) + self.assertRaises(RuntimeError, Polygon, pt) + + def testInvalidArgumentWithImplicitConversion(self): + '''Call to method using invalidated Python wrapper to be implicitly converted should raise RuntimeError.''' + pt = Point(1, 2) + Polygon.stealOwnershipFromPython(pt) + self.assertRaises(RuntimeError, Polygon.doublePolygonScale, pt) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/ownership_delete_child_in_cpp_test.py b/sources/shiboken2/tests/samplebinding/ownership_delete_child_in_cpp_test.py new file mode 100644 index 0000000..f008138 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/ownership_delete_child_in_cpp_test.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests for destroy a child object in C++''' + +import unittest + +from sample import ObjectType + + +class DeleteChildInCpp(unittest.TestCase): + '''Test case for destroying a child in c++''' + + def testDeleteChild(self): + '''Delete child in C++ should invalidate child - using C++ wrapper''' + parent = ObjectType() + parent.setObjectName('parent') + child = ObjectType(parent) + child.setObjectName('child') + + parent.killChild('child') + self.assertRaises(RuntimeError, child.objectName) + self.assertEqual(parent.objectName(), 'parent') + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/ownership_delete_child_in_python_test.py b/sources/shiboken2/tests/samplebinding/ownership_delete_child_in_python_test.py new file mode 100644 index 0000000..cac5211 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/ownership_delete_child_in_python_test.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests for deleting a child object in python''' + +import unittest +import random +import string + +from sample import ObjectType +from py3kcompat import IS_PY3K + +if IS_PY3K: + string.letters = string.ascii_letters + + +class DeleteChildInPython(unittest.TestCase): + '''Test case for deleting (unref) a child in python''' + + def testDeleteChild(self): + '''Delete child in python should not invalidate child''' + parent = ObjectType() + child = ObjectType(parent) + name = ''.join(random.sample(string.letters, 5)) + child.setObjectName(name) + + del child + new_child = parent.children()[0] + self.assertEqual(new_child.objectName(), name) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/ownership_delete_parent_test.py b/sources/shiboken2/tests/samplebinding/ownership_delete_parent_test.py new file mode 100644 index 0000000..cc317df --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/ownership_delete_parent_test.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests for destroying the parent''' + +import sys +import unittest + +from sample import ObjectType + + +class DeleteParentTest(unittest.TestCase): + '''Test case for deleting a parent object''' + + def testParentDestructor(self): + '''Delete parent object should invalidate child''' + parent = ObjectType() + child = ObjectType() + child.setParent(parent) + + refcount_before = sys.getrefcount(child) + + del parent + self.assertRaises(RuntimeError, child.objectName) + self.assertEqual(sys.getrefcount(child), refcount_before-1) + + def testParentDestructorMultipleChildren(self): + '''Delete parent object should invalidate all children''' + parent = ObjectType() + children = [ObjectType() for _ in range(10)] + + for child in children: + child.setParent(parent) + + del parent + for i, child in enumerate(children): + self.assertRaises(RuntimeError, child.objectName) + self.assertEqual(sys.getrefcount(child), 4) + + def testRecursiveParentDelete(self): + '''Delete parent should invalidate grandchildren''' + parent = ObjectType() + child = ObjectType(parent) + grandchild = ObjectType(child) + + del parent + self.assertRaises(RuntimeError, child.objectName) + self.assertEqual(sys.getrefcount(child), 2) + self.assertRaises(RuntimeError, grandchild.objectName) + self.assertEqual(sys.getrefcount(grandchild), 2) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/ownership_invalidate_after_use_test.py b/sources/shiboken2/tests/samplebinding/ownership_invalidate_after_use_test.py new file mode 100644 index 0000000..e73b5a8 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/ownership_invalidate_after_use_test.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Ownership tests for cases of invalidation of Python wrapper after use.''' + +import sys +import unittest + +from sample import ObjectType, ObjectTypeDerived, Event + + +class ExtObjectType(ObjectType): + def __init__(self): + ObjectType.__init__(self) + self.type_of_last_event = None + self.last_event = None + def event(self, event): + self.last_event = event + self.type_of_last_event = event.eventType() + return True + +class MyObjectType (ObjectType): + def __init__(self): + super(MyObjectType, self).__init__() + self.fail = False + + def event(self, ev): + self.callInvalidateEvent(ev) + try: + ev.eventType() + except: + self.fail = True + raise + return True + + def invalidateEvent(self, ev): + pass + +class ExtObjectTypeDerived(ObjectTypeDerived): + def __init__(self): + ObjectTypeDerived.__init__(self) + self.type_of_last_event = None + self.last_event = None + def event(self, event): + self.last_event = event + self.type_of_last_event = event.eventType() + return True + +class OwnershipInvalidateAfterUseTest(unittest.TestCase): + '''Ownership tests for cases of invalidation of Python wrapper after use.''' + + def testInvalidateAfterUse(self): + '''In ObjectType.event(Event*) the wrapper object created for Event must me marked as invalid after the method is called.''' + eot = ExtObjectType() + eot.causeEvent(Event.SOME_EVENT) + self.assertEqual(eot.type_of_last_event, Event.SOME_EVENT) + self.assertRaises(RuntimeError, eot.last_event.eventType) + + def testObjectInvalidatedAfterUseAsParameter(self): + '''Tries to use wrapper invalidated after use as a parameter to another method.''' + eot = ExtObjectType() + ot = ObjectType() + eot.causeEvent(Event.ANY_EVENT) + self.assertEqual(eot.type_of_last_event, Event.ANY_EVENT) + self.assertRaises(RuntimeError, ot.event, eot.last_event) + + def testit(self): + obj = MyObjectType() + obj.causeEvent(Event.BASIC_EVENT) + self.assertFalse(obj.fail) + + def testInvalidateAfterUseInDerived(self): + '''Invalidate was failing in a derived C++ class that also inherited + other base classes''' + eot = ExtObjectTypeDerived() + eot.causeEvent(Event.SOME_EVENT) + self.assertEqual(eot.type_of_last_event, Event.SOME_EVENT) + self.assertRaises(RuntimeError, eot.last_event.eventType) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/ownership_invalidate_child_test.py b/sources/shiboken2/tests/samplebinding/ownership_invalidate_child_test.py new file mode 100644 index 0000000..59bf3f3 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/ownership_invalidate_child_test.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests for invalidating a C++ created child that was already on the care of a parent.''' + +import unittest + +from sample import ObjectType, BlackBox + + +class InvalidateChildTest(unittest.TestCase): + '''Tests for invalidating a C++ created child that was already on the care of a parent.''' + + def testInvalidateChild(self): + '''Invalidating method call should remove child from the care of a parent if it has one.''' + parent = ObjectType() + child1 = ObjectType(parent) + child1.setObjectName('child1') + child2 = ObjectType.create() + child2.setParent(parent) + child2.setObjectName('child2') + + self.assertEqual(parent.children(), [child1, child2]) + + bbox = BlackBox() + + # This method steals ownership from Python to C++. + bbox.keepObjectType(child1) + self.assertEqual(parent.children(), [child2]) + + bbox.keepObjectType(child2) + self.assertEqual(parent.children(), []) + + del parent + + self.assertEqual(child1.objectName(), 'child1') + self.assertRaises(RuntimeError, child2.objectName) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/ownership_invalidate_nonpolymorphic_test.py b/sources/shiboken2/tests/samplebinding/ownership_invalidate_nonpolymorphic_test.py new file mode 100644 index 0000000..d64a212 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/ownership_invalidate_nonpolymorphic_test.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''The BlackBox class has cases of ownership transference between Python and C++.''' + +import sys +import unittest + +from sample import Point, BlackBox + +class OwnershipInvalidateNonPolymorphicTest(unittest.TestCase): + '''The BlackBox class has cases of ownership transference between Python and C++.''' + + def testOwnershipTransference(self): + '''Ownership transference from Python to C++ and back again.''' + p1 = Point(10, 20) + bb = BlackBox() + p1_ticket = bb.keepPoint(p1) + self.assertRaises(RuntimeError, p1.x) + p1_ret = bb.retrievePoint(p1_ticket) + self.assertEqual(p1_ret, Point(10, 20)) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/ownership_invalidate_parent_test.py b/sources/shiboken2/tests/samplebinding/ownership_invalidate_parent_test.py new file mode 100644 index 0000000..42b516f --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/ownership_invalidate_parent_test.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests for invalidating a parent of other objects.''' + +import unittest + +from sample import ObjectType, BlackBox + + +class InvalidateParentTest(unittest.TestCase): + '''Tests for invalidating a parent of other objects.''' + + def testInvalidateParent(self): + '''Invalidate parent should invalidate children''' + parent = ObjectType.create() + child1 = ObjectType(parent) + child1.setObjectName("child1") + child2 = ObjectType.create() + child2.setObjectName("child2") + child2.setParent(parent) + grandchild1 = ObjectType(child1) + grandchild1.setObjectName("grandchild1") + grandchild2 = ObjectType.create() + grandchild2.setObjectName("grandchild2") + grandchild2.setParent(child2) + bbox = BlackBox() + + bbox.keepObjectType(parent) # Should invalidate the parent + + self.assertRaises(RuntimeError, parent.objectName) + # some children still valid they are wrapper classes + self.assertEqual(child1.objectName(), "child1") + self.assertRaises(RuntimeError, child2.objectName) + self.assertEqual(grandchild1.objectName(), "grandchild1") + self.assertRaises(RuntimeError, grandchild2.objectName) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/ownership_reparenting_test.py b/sources/shiboken2/tests/samplebinding/ownership_reparenting_test.py new file mode 100644 index 0000000..1a7ea23 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/ownership_reparenting_test.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests for object reparenting.''' + +import unittest +import sys + +from sample import ObjectType + +class ExtObjectType(ObjectType): + def __init__(self): + ObjectType.__init__(self) + + +class ReparentingTest(unittest.TestCase): + '''Tests for object reparenting.''' + + def testReparentedObjectTypeIdentity(self): + '''Reparent children from one parent to another.''' + object_list = [] + old_parent = ObjectType() + new_parent = ObjectType() + for i in range(3): + obj = ObjectType() + object_list.append(obj) + obj.setParent(old_parent) + for obj in object_list: + obj.setParent(new_parent) + for child in new_parent.children(): + self.assertTrue(child in object_list) + + def testReparentWithTheSameParent(self): + '''Set the same parent twice to check if the ref continue the same''' + obj = ObjectType() + parent = ObjectType() + self.assertEqual(sys.getrefcount(obj), 2) + obj.setParent(parent) + self.assertEqual(sys.getrefcount(obj), 3) + obj.setParent(parent) + self.assertEqual(sys.getrefcount(obj), 3) + + def testReparentedExtObjectType(self): + '''Reparent children from one extended parent to another.''' + object_list = [] + old_parent = ExtObjectType() + new_parent = ExtObjectType() + for i in range(3): + obj = ExtObjectType() + object_list.append(obj) + obj.setParent(old_parent) + for obj in object_list: + obj.setParent(new_parent) + for orig, child in zip(object_list, new_parent.children()): + self.assertEqual(type(orig), type(child)) + + def testReparentedObjectTypeIdentityWithParentsCreatedInCpp(self): + '''Reparent children from one parent to another, both created in C++.''' + object_list = [] + old_parent = ObjectType.create() + new_parent = ObjectType.create() + for i in range(3): + obj = ObjectType() + object_list.append(obj) + obj.setParent(old_parent) + for obj in object_list: + obj.setParent(new_parent) + for child in new_parent.children(): + self.assertTrue(child in object_list) + + def testReparentedObjectTypeIdentityWithChildrenCreatedInCpp(self): + '''Reparent children created in C++ from one parent to another.''' + object_list = [] + old_parent = ObjectType() + new_parent = ObjectType() + for i in range(3): + obj = ObjectType.create() + object_list.append(obj) + obj.setParent(old_parent) + for obj in object_list: + obj.setParent(new_parent) + for child in new_parent.children(): + self.assertTrue(child in object_list) + + def testReparentedObjectTypeIdentityWithParentsAndChildrenCreatedInCpp(self): + '''Reparent children from one parent to another. Parents and children are created in C++.''' + object_list = [] + old_parent = ObjectType.create() + new_parent = ObjectType.create() + for i in range(3): + obj = ObjectType.create() + object_list.append(obj) + obj.setParent(old_parent) + for obj in object_list: + obj.setParent(new_parent) + for child in new_parent.children(): + self.assertTrue(child in object_list) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/ownership_transference_test.py b/sources/shiboken2/tests/samplebinding/ownership_transference_test.py new file mode 100644 index 0000000..42b576a --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/ownership_transference_test.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''The BlackBox class has cases of ownership transference between C++ and Python.''' + +import sys +import unittest + +from sample import ObjectType, BlackBox + +class BlackBoxTest(unittest.TestCase): + '''The BlackBox class has cases of ownership transference between C++ and Python.''' + + def testOwnershipTransference(self): + '''Ownership transference from Python to C++ and back again.''' + o1 = ObjectType() + o1.setObjectName('object1') + o1_refcnt = sys.getrefcount(o1) + o2 = ObjectType() + o2.setObjectName('object2') + o2_refcnt = sys.getrefcount(o2) + bb = BlackBox() + o1_ticket = bb.keepObjectType(o1) + o2_ticket = bb.keepObjectType(o2) + self.assertEqual(set(bb.objects()), set([o1, o2])) + self.assertEqual(str(o1.objectName()), 'object1') + self.assertEqual(str(o2.objectName()), 'object2') + self.assertEqual(sys.getrefcount(o1), o1_refcnt + 1) # PySide give +1 ref to object with c++ ownership + self.assertEqual(sys.getrefcount(o2), o2_refcnt + 1) + o2 = bb.retrieveObjectType(o2_ticket) + self.assertEqual(sys.getrefcount(o2), o2_refcnt) + del bb + self.assertRaises(RuntimeError, o1.objectName) + self.assertEqual(str(o2.objectName()), 'object2') + self.assertEqual(sys.getrefcount(o2), o2_refcnt) + + def testBlackBoxReleasingUnknownObjectType(self): + '''Asks BlackBox to release an unknown ObjectType.''' + o1 = ObjectType() + o2 = ObjectType() + bb = BlackBox() + o1_ticket = bb.keepObjectType(o1) + o3 = bb.retrieveObjectType(-5) + self.assertEqual(o3, None) + + def testOwnershipTransferenceCppCreated(self): + '''Ownership transference using a C++ created object.''' + o1 = ObjectType.create() + o1.setObjectName('object1') + o1_refcnt = sys.getrefcount(o1) + bb = BlackBox() + o1_ticket = bb.keepObjectType(o1) + self.assertRaises(RuntimeError, o1.objectName) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/pair_test.py b/sources/shiboken2/tests/samplebinding/pair_test.py new file mode 100644 index 0000000..ac0653d --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/pair_test.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for std::pair container conversions''' + +import sys +import unittest + +from sample import PairUser + +class ExtendedPairUser(PairUser): + def __init__(self): + PairUser.__init__(self) + self.create_pair_called = False + + def createPair(self): + self.create_pair_called = True + return (7, 13) + +class PairConversionTest(unittest.TestCase): + '''Test case for std::pair container conversions''' + + def testReimplementedVirtualMethodCall(self): + '''Test if a Python override of a virtual method is correctly called from C++.''' + pu = ExtendedPairUser() + pair = pu.callCreatePair() + self.assertTrue(pu.create_pair_called) + self.assertEqual(type(pair), tuple) + self.assertEqual(type(pair[0]), int) + self.assertEqual(type(pair[1]), int) + self.assertEqual(pair, (7, 13)) + + def testPrimitiveConversionInsideContainer(self): + '''Test primitive type conversion inside conversible std::pair container.''' + cpx0 = complex(1.2, 3.4) + cpx1 = complex(5.6, 7.8) + cp = PairUser.createComplexPair(cpx0, cpx1) + self.assertEqual(type(cp), tuple) + self.assertEqual(type(cp[0]), complex) + self.assertEqual(type(cp[1]), complex) + self.assertEqual(cp, (cpx0, cpx1)) + + def testSumPair(self): + '''Test method that sums the items of a pair using values of the types expected by C++ (int and double)''' + pu = PairUser() + pair = (3, 7.13) + result = pu.sumPair(pair) + self.assertEqual(result, sum(pair)) + + def testSumPairDifferentTypes(self): + '''Test method that sums the items of a pair using values of types different from the ones expected by C++ (int and double)''' + pu = PairUser() + pair = (3.3, 7) + result = pu.sumPair(pair) + self.assertNotEqual(result, sum(pair)) + self.assertEqual(result, int(pair[0]) + pair[1]) + + def testConversionInBothDirections(self): + '''Test converting a pair from Python to C++ and the other way around.''' + pu = PairUser() + pair = (3, 5) + pu.setPair(pair) + result = pu.getPair() + self.assertEqual(result, pair) + + def testConversionInBothDirectionsWithSimilarContainer(self): + '''Test converting a list, instead of the expected tuple, from Python to C++ and the other way around.''' + pu = PairUser() + pair = [3, 5] + pu.setPair(pair) + result = pu.getPair() + self.assertNotEqual(result, pair) + self.assertEqual(result, tuple(pair)) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/pen_test.py b/sources/shiboken2/tests/samplebinding/pen_test.py new file mode 100644 index 0000000..2a61ae3 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/pen_test.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for with const char* as argument''' + +import unittest + +from sample import Color, Pen, SampleNamespace + +class TestPen(unittest.TestCase): + '''Simple test case for Pen.''' + + def testPenWithEmptyConstructor(self): + pen = Pen() + self.assertEqual(pen.ctorType(), Pen.EmptyCtor) + + def testPenWithEnumConstructor(self): + pen = Pen(SampleNamespace.RandomNumber) + self.assertEqual(pen.ctorType(), Pen.EnumCtor) + + def testPenWithColorConstructor(self): + pen = Pen(Color()) + self.assertEqual(pen.ctorType(), Pen.ColorCtor) + + def testPenWithCopyConstructor(self): + pen = Pen(Pen()) + self.assertEqual(pen.ctorType(), Pen.CopyCtor) + + def testPenWithIntConvertedToColor(self): + pen = Pen(1) + self.assertEqual(pen.ctorType(), Pen.ColorCtor) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/point_test.py b/sources/shiboken2/tests/samplebinding/point_test.py new file mode 100644 index 0000000..d6498d4 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/point_test.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for Point class''' + +import sys +import unittest + +from sample import Point +from py3kcompat import unicode + +class PointTest(unittest.TestCase): + '''Test case for Point class, including operator overloads.''' + + def testConstructor(self): + '''Test Point class constructor.''' + pt = Point(5.0, 2.3) + self.assertEqual(pt.x(), 5.0) + self.assertEqual(pt.y(), 2.3) + + def testPlusOperator(self): + '''Test Point class + operator.''' + pt1 = Point(5.0, 2.3) + pt2 = Point(0.5, 3.2) + self.assertEqual(pt1 + pt2, Point(5.0 + 0.5, 2.3 + 3.2)) + + def testEqualOperator(self): + '''Test Point class == operator.''' + pt1 = Point(5.0, 2.3) + pt2 = Point(5.0, 2.3) + pt3 = Point(0.5, 3.2) + self.assertTrue(pt1 == pt1) + self.assertTrue(pt1 == pt2) + self.assertFalse(pt1 == pt3) + self.assertFalse(pt1 == object()) + + def testNotEqualOperator(self): + '''Test Point class != operator.''' + pt1 = Point(5.0, 2.3) + pt2 = Point(5.0, 2.3) + self.assertRaises(NotImplementedError, pt1.__ne__, pt2) + + def testReturnNewCopy(self): + '''Point returns a copy of itself.''' + pt1 = Point(1.1, 2.3) + pt2 = pt1.copy() + self.assertEqual(pt1, pt2) + pt2 += pt1 + self.assertFalse(pt1 == pt2) + + def testReturnConstPointer(self): + '''Point returns a const pointer for itself.''' + pt1 = Point(5.0, 2.3) + refcount1 = sys.getrefcount(pt1) + pt2 = pt1.getSelf() + self.assertEqual(pt1, pt2) + self.assertEqual(sys.getrefcount(pt1), refcount1 + 1) + self.assertEqual(sys.getrefcount(pt1), sys.getrefcount(pt2)) + + def testUintOverflow(self): + pt1 = Point(0.0, 0.0) + self.assertRaises(OverflowError, pt1.setXAsUint, 840835495615213080) + self.assertEqual(pt1.x(), 0.0) + + def testAddedOperator(self): + p = Point(0.0, 0.0) + r = p - unicode('Hi') + self.assertEqual(r, unicode('Hi')) + + # now the reverse op. + r = unicode('Hi') - p + self.assertEqual(r, unicode('Hi')) + + def testModifiedMethod(self): + pt1 = Point(0.0, 0.0) + pt2 = Point(10.0, 10.0) + expected = Point((pt1.x() + pt2.x()) / 2.0, (pt1.y() + pt2.y()) / 2.0) + self.assertEqual(pt1.midpoint(pt2), expected) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/pointerholder_test.py b/sources/shiboken2/tests/samplebinding/pointerholder_test.py new file mode 100644 index 0000000..e427e04 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/pointerholder_test.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for a class that holds an arbitraty pointer and is modified to hold an PyObject.''' + +import sys +import unittest + +from sample import PointerHolder + +class TestPointerHolder(unittest.TestCase): + '''Test cases for a class that holds an arbitraty pointer and is modified to hold an PyObject.''' + + def testStoringAndRetrievingPointer(self): + ph = PointerHolder('Hello') + self.assertEqual(ph.pointer(), 'Hello') + a = (1, 2, 3) + ph = PointerHolder(a) + self.assertEqual(ph.pointer(), a) + + def testReferenceCounting(self): + '''Test reference counting when retrieving data with PointerHolder.pointer().''' + a = (1, 2, 3) + refcnt = sys.getrefcount(a) + ph = PointerHolder(a) + ptr = ph.pointer() + self.assertEqual(sys.getrefcount(a), refcnt + 1) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/pointf_test.py b/sources/shiboken2/tests/samplebinding/pointf_test.py new file mode 100644 index 0000000..8d8b471 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/pointf_test.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for PointF class''' + +import unittest + +from sample import PointF + +class PointFTest(unittest.TestCase): + '''Test case for PointF class, including operator overloads.''' + + def testConstructor(self): + '''Test PointF class constructor.''' + pt = PointF(5.0, 2.3) + self.assertEqual(pt.x(), 5.0) + self.assertEqual(pt.y(), 2.3) + + def testPlusOperator(self): + '''Test PointF class + operator.''' + pt1 = PointF(5.0, 2.3) + pt2 = PointF(0.5, 3.2) + self.assertEqual(pt1 + pt2, PointF(5.0 + 0.5, 2.3 + 3.2)) + + def testEqualOperator(self): + '''Test PointF class == operator.''' + pt1 = PointF(5.0, 2.3) + pt2 = PointF(5.0, 2.3) + pt3 = PointF(0.5, 3.2) + self.assertTrue(pt1 == pt1) + self.assertTrue(pt1 == pt2) + self.assertFalse(pt1 == pt3) + + def testModifiedMethod(self): + pt1 = PointF(0.0, 0.0) + pt2 = PointF(10.0, 10.0) + expected = PointF((pt1.x() + pt2.x()) / 2.0, (pt1.y() + pt2.y()) / 2.0) + self.assertEqual(pt1.midpoint(pt2), expected) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/primitivereferenceargument_test.py b/sources/shiboken2/tests/samplebinding/primitivereferenceargument_test.py new file mode 100644 index 0000000..ef0e153 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/primitivereferenceargument_test.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sample + +class PrimitiveReferenceArgumentTest(unittest.TestCase): + + def testIntReferenceArgument(self): + '''C++ signature: int acceptIntReference(int&)''' + self.assertEqual(sample.acceptIntReference(123), 123) + + def testOddBoolReferenceArgument(self): + '''C++ signature: OddBool acceptOddBoolReference(OddBool&)''' + self.assertEqual(sample.acceptOddBoolReference(True), True) + self.assertEqual(sample.acceptOddBoolReference(False), False) + self.assertNotEqual(sample.acceptOddBoolReference(True), False) + self.assertNotEqual(sample.acceptOddBoolReference(False), True) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/privatector_test.py b/sources/shiboken2/tests/samplebinding/privatector_test.py new file mode 100644 index 0000000..e972512 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/privatector_test.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for a class with only a private constructor.''' + +import gc +import sys +import unittest + +from sample import PrivateCtor + + +class PrivateCtorTest(unittest.TestCase): + '''Test case for PrivateCtor class''' + + def testPrivateCtorInstanciation(self): + '''Test if instanciation of class with a private constructor raises an exception.''' + self.assertRaises(TypeError, PrivateCtor) + + def testPrivateCtorInheritance(self): + '''Test if inheriting from PrivateCtor raises an exception.''' + def inherit(): + class Foo(PrivateCtor): + pass + self.assertRaises(TypeError, inherit) + + def testPrivateCtorInstanceMethod(self): + '''Test if PrivateCtor.instance() method return the proper singleton.''' + pd1 = PrivateCtor.instance() + calls = pd1.instanceCalls() + self.assertEqual(type(pd1), PrivateCtor) + pd2 = PrivateCtor.instance() + self.assertEqual(pd2, pd1) + self.assertEqual(pd2.instanceCalls(), calls + 1) + + def testPrivateCtorRefCounting(self): + '''Test refcounting of the singleton returned by PrivateCtor.instance().''' + pd1 = PrivateCtor.instance() + calls = pd1.instanceCalls() + refcnt = sys.getrefcount(pd1) + pd2 = PrivateCtor.instance() + self.assertEqual(pd2.instanceCalls(), calls + 1) + self.assertEqual(sys.getrefcount(pd2), sys.getrefcount(pd1)) + self.assertEqual(sys.getrefcount(pd2), refcnt + 1) + del pd1 + self.assertEqual(sys.getrefcount(pd2), refcnt) + del pd2 + gc.collect() + pd3 = PrivateCtor.instance() + self.assertEqual(type(pd3), PrivateCtor) + self.assertEqual(pd3.instanceCalls(), calls + 2) + self.assertEqual(sys.getrefcount(pd3), refcnt) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/privatedtor_test.py b/sources/shiboken2/tests/samplebinding/privatedtor_test.py new file mode 100644 index 0000000..4785067 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/privatedtor_test.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for a class with a private destructor.''' + +import gc +import sys +import unittest + +import shiboken2 as shiboken +from sample import PrivateDtor + + +class PrivateDtorTest(unittest.TestCase): + '''Test case for PrivateDtor class''' + + def testPrivateDtorInstanciation(self): + '''Test if instanciation of class with a private destructor raises an exception.''' + self.assertRaises(TypeError, PrivateDtor) + + def testPrivateDtorInheritance(self): + '''Test if inheriting from PrivateDtor raises an exception.''' + def inherit(): + class Foo(PrivateDtor): + pass + self.assertRaises(TypeError, inherit) + + def testPrivateDtorInstanceMethod(self): + '''Test if PrivateDtor.instance() method return the proper singleton.''' + pd1 = PrivateDtor.instance() + calls = pd1.instanceCalls() + self.assertEqual(type(pd1), PrivateDtor) + pd2 = PrivateDtor.instance() + self.assertEqual(pd2, pd1) + self.assertEqual(pd2.instanceCalls(), calls + 1) + + def testPrivateDtorRefCounting(self): + '''Test refcounting of the singleton returned by PrivateDtor.instance().''' + pd1 = PrivateDtor.instance() + calls = pd1.instanceCalls() + refcnt = sys.getrefcount(pd1) + pd2 = PrivateDtor.instance() + self.assertEqual(pd2.instanceCalls(), calls + 1) + self.assertEqual(sys.getrefcount(pd2), sys.getrefcount(pd1)) + self.assertEqual(sys.getrefcount(pd2), refcnt + 1) + del pd1 + self.assertEqual(sys.getrefcount(pd2), refcnt) + del pd2 + gc.collect() + pd3 = PrivateDtor.instance() + self.assertEqual(type(pd3), PrivateDtor) + self.assertEqual(pd3.instanceCalls(), calls + 2) + self.assertEqual(sys.getrefcount(pd3), refcnt) + + def testClassDecref(self): + # Bug was that class PyTypeObject wasn't decrefed when instance + # was invalidated + + before = sys.getrefcount(PrivateDtor) + + for i in range(1000): + obj = PrivateDtor.instance() + shiboken.invalidate(obj) + + after = sys.getrefcount(PrivateDtor) + + self.assertLess(abs(before - after), 5) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/protected_test.py b/sources/shiboken2/tests/samplebinding/protected_test.py new file mode 100644 index 0000000..d343405 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/protected_test.py @@ -0,0 +1,357 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for protected methods.''' + +import unittest + +from sample import cacheSize +from sample import ProtectedNonPolymorphic, ProtectedVirtualDestructor +from sample import ProtectedPolymorphic, ProtectedPolymorphicDaughter, ProtectedPolymorphicGrandDaughter +from sample import createProtectedProperty, ProtectedProperty, ProtectedEnumClass +from sample import PrivateDtor +from sample import Event, ObjectType, Point + +class ExtendedProtectedPolymorphic(ProtectedPolymorphic): + def __init__(self, name): + ProtectedPolymorphic.__init__(self, name) + self.protectedName_called = False + def protectedName(self): + self.protectedName_called = True + self._name = 'Extended' + ProtectedPolymorphic.protectedName(self) + return self._name + +class ExtendedProtectedPolymorphicDaughter(ProtectedPolymorphicDaughter): + def __init__(self, name): + self.protectedName_called = False + ProtectedPolymorphicDaughter.__init__(self, name) + def protectedName(self): + self.protectedName_called = True + self._name = 'ExtendedDaughter' + ProtectedPolymorphicDaughter.protectedName(self) + return self._name + +class ExtendedProtectedPolymorphicGrandDaughter(ProtectedPolymorphicGrandDaughter): + def __init__(self, name): + self.protectedName_called = False + ProtectedPolymorphicGrandDaughter.__init__(self, name) + def protectedName(self): + self.protectedName_called = True + self._name = 'ExtendedGrandDaughter' + ProtectedPolymorphicGrandDaughter.protectedName(self) + return self._name + +class ExtendedProtectedVirtualDestructor(ProtectedVirtualDestructor): + def __init__(self): + ProtectedVirtualDestructor.__init__(self) + +class ProtectedNonPolymorphicTest(unittest.TestCase): + '''Test cases for protected method in a class without virtual methods.''' + + def tearDown(self): + self.assertEqual(cacheSize(), 0) + + def testProtectedCall(self): + '''Calls a non-virtual protected method.''' + p = ProtectedNonPolymorphic('NonPoly') + self.assertEqual(p.publicName(), p.protectedName()) + a0, a1 = 1, 2 + self.assertEqual(p.protectedSum(a0, a1), a0 + a1) + + def testProtectedCallWithInstanceCreatedOnCpp(self): + '''Calls a non-virtual protected method on an instance created in C++.''' + p = ProtectedNonPolymorphic.create() + self.assertEqual(p.publicName(), p.protectedName()) + a0, a1 = 1, 2 + self.assertEqual(p.protectedSum(a0, a1), a0 + a1) + + def testModifiedProtectedCall(self): + '''Calls a non-virtual protected method modified with code injection.''' + p = ProtectedNonPolymorphic('NonPoly') + self.assertEqual(p.dataTypeName(), 'integer') + self.assertEqual(p.dataTypeName(1), 'integer') + self.assertEqual(p.dataTypeName(Point(1, 2)), 'pointer') + +class ProtectedPolymorphicTest(unittest.TestCase): + '''Test cases for protected method in a class with virtual methods.''' + + def tearDown(self): + self.assertEqual(cacheSize(), 0) + + def testProtectedCall(self): + '''Calls a virtual protected method.''' + p = ProtectedNonPolymorphic('Poly') + self.assertEqual(p.publicName(), p.protectedName()) + a0, a1 = 1, 2 + self.assertEqual(p.protectedSum(a0, a1), a0 + a1) + + def testProtectedCallWithInstanceCreatedOnCpp(self): + '''Calls a virtual protected method on an instance created in C++.''' + p = ProtectedPolymorphic.create() + self.assertEqual(p.publicName(), p.protectedName()) + self.assertEqual(p.callProtectedName(), p.protectedName()) + + def testReimplementedProtectedCall(self): + '''Calls a reimplemented virtual protected method.''' + original_name = 'Poly' + p = ExtendedProtectedPolymorphic(original_name) + name = p.callProtectedName() + self.assertTrue(p.protectedName_called) + self.assertEqual(p.protectedName(), name) + self.assertEqual(ProtectedPolymorphic.protectedName(p), original_name) +class ProtectedPolymorphicDaugherTest(unittest.TestCase): + '''Test cases for protected method in a class inheriting for a class with virtual methods.''' + + def testProtectedCallWithInstanceCreatedOnCpp(self): + '''Calls a virtual protected method from parent class on an instance created in C++.''' + p = ProtectedPolymorphicDaughter.create() + self.assertEqual(p.publicName(), p.protectedName()) + self.assertEqual(p.callProtectedName(), p.protectedName()) + + def testReimplementedProtectedCall(self): + '''Calls a reimplemented virtual protected method from parent class.''' + original_name = 'Poly' + p = ExtendedProtectedPolymorphicDaughter(original_name) + name = p.callProtectedName() + self.assertTrue(p.protectedName_called) + self.assertEqual(p.protectedName(), name) + self.assertEqual(ProtectedPolymorphicDaughter.protectedName(p), original_name) + + +class ProtectedPolymorphicGrandDaugherTest(unittest.TestCase): + '''Test cases for protected method in a class inheriting for a class that inherits from + another with protected virtual methods.''' + + def tearDown(self): + self.assertEqual(cacheSize(), 0) + + def testProtectedCallWithInstanceCreatedOnCpp(self): + '''Calls a virtual protected method from parent class on an instance created in C++.''' + p = ProtectedPolymorphicGrandDaughter.create() + self.assertEqual(p.publicName(), p.protectedName()) + self.assertEqual(p.callProtectedName(), p.protectedName()) + + def testReimplementedProtectedCall(self): + '''Calls a reimplemented virtual protected method from parent class.''' + original_name = 'Poly' + p = ExtendedProtectedPolymorphicGrandDaughter(original_name) + name = p.callProtectedName() + self.assertTrue(p.protectedName_called) + self.assertEqual(p.protectedName(), name) + self.assertEqual(ProtectedPolymorphicGrandDaughter.protectedName(p), original_name) + +class ProtectedVirtualDtorTest(unittest.TestCase): + '''Test cases for protected virtual destructor.''' + + def setUp(self): + ProtectedVirtualDestructor.resetDtorCounter() + + def tearDown(self): + self.assertEqual(cacheSize(), 0) + + def testVirtualProtectedDtor(self): + '''Original protected virtual destructor is being called.''' + dtor_called = ProtectedVirtualDestructor.dtorCalled() + for i in range(1, 10): + pvd = ProtectedVirtualDestructor() + del pvd + self.assertEqual(ProtectedVirtualDestructor.dtorCalled(), dtor_called + i) + + def testVirtualProtectedDtorOnCppCreatedObject(self): + '''Original protected virtual destructor is being called for a C++ created object.''' + dtor_called = ProtectedVirtualDestructor.dtorCalled() + for i in range(1, 10): + pvd = ProtectedVirtualDestructor.create() + del pvd + self.assertEqual(ProtectedVirtualDestructor.dtorCalled(), dtor_called + i) + + def testProtectedDtorOnDerivedClass(self): + '''Original protected virtual destructor is being called for a derived class.''' + dtor_called = ExtendedProtectedVirtualDestructor.dtorCalled() + for i in range(1, 10): + pvd = ExtendedProtectedVirtualDestructor() + del pvd + self.assertEqual(ExtendedProtectedVirtualDestructor.dtorCalled(), dtor_called + i) + + +class ExtendedProtectedEnumClass(ProtectedEnumClass): + def __init__(self): + ProtectedEnumClass.__init__(self) + def protectedEnumMethod(self, value): + if value == ProtectedEnumClass.ProtectedItem0: + return ProtectedEnumClass.ProtectedItem1 + return ProtectedEnumClass.ProtectedItem0 + def publicEnumMethod(self, value): + if value == ProtectedEnumClass.PublicItem0: + return ProtectedEnumClass.PublicItem1 + return ProtectedEnumClass.PublicItem0 + +class ProtectedEnumTest(unittest.TestCase): + '''Test cases for protected enum.''' + + def tearDown(self): + self.assertEqual(cacheSize(), 0) + + def testProtectedMethodWithProtectedEnumArgument(self): + '''Calls protected method with protected enum argument.''' + obj = ProtectedEnumClass() + + self.assertEqual(type(ProtectedEnumClass.ProtectedItem0), ProtectedEnumClass.ProtectedEnum) + + self.assertEqual(obj.protectedEnumMethod(ProtectedEnumClass.ProtectedItem0), ProtectedEnumClass.ProtectedItem0) + self.assertEqual(obj.protectedEnumMethod(ProtectedEnumClass.ProtectedItem1), ProtectedEnumClass.ProtectedItem1) + + self.assertEqual(obj.callProtectedEnumMethod(ProtectedEnumClass.ProtectedItem0), ProtectedEnumClass.ProtectedItem0) + self.assertEqual(obj.callProtectedEnumMethod(ProtectedEnumClass.ProtectedItem1), ProtectedEnumClass.ProtectedItem1) + + def testProtectedMethodWithPublicEnumArgument(self): + '''Calls protected method with public enum argument.''' + obj = ProtectedEnumClass() + + self.assertEqual(obj.publicEnumMethod(ProtectedEnumClass.PublicItem0), ProtectedEnumClass.PublicItem0) + self.assertEqual(obj.publicEnumMethod(ProtectedEnumClass.PublicItem1), ProtectedEnumClass.PublicItem1) + + self.assertEqual(obj.callPublicEnumMethod(ProtectedEnumClass.PublicItem0), ProtectedEnumClass.PublicItem0) + self.assertEqual(obj.callPublicEnumMethod(ProtectedEnumClass.PublicItem1), ProtectedEnumClass.PublicItem1) + + def testOverriddenProtectedMethodWithProtectedEnumArgument(self): + '''Calls overridden protected method with protected enum argument.''' + obj = ExtendedProtectedEnumClass() + + self.assertEqual(obj.protectedEnumMethod(ProtectedEnumClass.ProtectedItem0), ProtectedEnumClass.ProtectedItem1) + self.assertEqual(obj.protectedEnumMethod(ProtectedEnumClass.ProtectedItem1), ProtectedEnumClass.ProtectedItem0) + + self.assertEqual(ProtectedEnumClass.protectedEnumMethod(obj, ProtectedEnumClass.ProtectedItem0), ProtectedEnumClass.ProtectedItem0) + self.assertEqual(ProtectedEnumClass.protectedEnumMethod(obj, ProtectedEnumClass.ProtectedItem1), ProtectedEnumClass.ProtectedItem1) + + self.assertEqual(obj.callProtectedEnumMethod(ProtectedEnumClass.ProtectedItem0), ProtectedEnumClass.ProtectedItem1) + self.assertEqual(obj.callProtectedEnumMethod(ProtectedEnumClass.ProtectedItem1), ProtectedEnumClass.ProtectedItem0) + + def testOverriddenProtectedMethodWithPublicEnumArgument(self): + '''Calls overridden protected method with public enum argument.''' + obj = ExtendedProtectedEnumClass() + + self.assertEqual(obj.publicEnumMethod(ProtectedEnumClass.PublicItem0), ProtectedEnumClass.PublicItem1) + self.assertEqual(obj.publicEnumMethod(ProtectedEnumClass.PublicItem1), ProtectedEnumClass.PublicItem0) + + self.assertEqual(ProtectedEnumClass.publicEnumMethod(obj, ProtectedEnumClass.PublicItem0), ProtectedEnumClass.PublicItem0) + self.assertEqual(ProtectedEnumClass.publicEnumMethod(obj, ProtectedEnumClass.PublicItem1), ProtectedEnumClass.PublicItem1) + + self.assertEqual(obj.callPublicEnumMethod(ProtectedEnumClass.PublicItem0), ProtectedEnumClass.PublicItem1) + self.assertEqual(obj.callPublicEnumMethod(ProtectedEnumClass.PublicItem1), ProtectedEnumClass.PublicItem0) + + +class ProtectedPropertyTest(unittest.TestCase): + '''Test cases for a class with a protected property (or field in C++).''' + + def setUp(self): + self.obj = ProtectedProperty() + + def tearDown(self): + del self.obj + self.assertEqual(cacheSize(), 0) + + def testProtectedProperty(self): + '''Writes and reads a protected integer property.''' + self.obj.protectedProperty = 3 + self.assertEqual(self.obj.protectedProperty, 3) + + def testProtectedContainerProperty(self): + '''Writes and reads a protected list of integers property.''' + lst = [1, 2, 3, 4] + self.obj.protectedContainerProperty = lst + self.assertEqual(self.obj.protectedContainerProperty, lst) + + def testProtectedEnumProperty(self): + '''Writes and reads a protected enum property.''' + self.obj.protectedEnumProperty = Event.SOME_EVENT + self.assertEqual(self.obj.protectedEnumProperty, Event.SOME_EVENT) + + def testProtectedValueTypeProperty(self): + '''Writes and reads a protected value type property.''' + point = Point(12, 34) + self.obj.protectedValueTypeProperty = point + self.assertEqual(self.obj.protectedValueTypeProperty, point) + self.assertFalse(self.obj.protectedValueTypeProperty is point) + pointProperty = self.obj.protectedValueTypeProperty + self.assertTrue(self.obj.protectedValueTypeProperty is pointProperty) + + def testProtectedValueTypePropertyWrapperRegistration(self): + '''Access colocated protected value type property.''' + cache_size = cacheSize() + point = Point(12, 34) + obj = createProtectedProperty() + obj.protectedValueTypeProperty + self.assertEqual(obj.protectedValueTypeProperty.copy(), + obj.protectedValueTypeProperty) + obj.protectedValueTypeProperty = point + self.assertEqual(obj.protectedValueTypeProperty, point) + self.assertFalse(obj.protectedValueTypeProperty is point) + pointProperty = obj.protectedValueTypeProperty + self.assertTrue(obj.protectedValueTypeProperty is pointProperty) + del obj, point, pointProperty + self.assertEqual(cacheSize(), cache_size) + + def testProtectedValueTypePointerProperty(self): + '''Writes and reads a protected value type pointer property.''' + pt1 = Point(12, 34) + pt2 = Point(12, 34) + self.obj.protectedValueTypePointerProperty = pt1 + self.assertEqual(self.obj.protectedValueTypePointerProperty, pt1) + self.assertEqual(self.obj.protectedValueTypePointerProperty, pt2) + self.assertTrue(self.obj.protectedValueTypePointerProperty is pt1) + self.assertFalse(self.obj.protectedValueTypePointerProperty is pt2) + + def testProtectedObjectTypeProperty(self): + '''Writes and reads a protected object type property.''' + obj = ObjectType() + self.obj.protectedObjectTypeProperty = obj + self.assertEqual(self.obj.protectedObjectTypeProperty, obj) + + +class PrivateDtorProtectedMethodTest(unittest.TestCase): + '''Test cases for classes with private destructors and protected methods.''' + + def tearDown(self): + self.assertEqual(cacheSize(), 0) + + def testProtectedMethod(self): + '''Calls protected method of a class with a private destructor.''' + obj = PrivateDtor.instance() + + self.assertEqual(type(obj), PrivateDtor) + self.assertEqual(obj.instanceCalls(), 1) + self.assertEqual(obj.instanceCalls(), obj.protectedInstanceCalls()) + obj = PrivateDtor.instance() + self.assertEqual(obj.instanceCalls(), 2) + self.assertEqual(obj.instanceCalls(), obj.protectedInstanceCalls()) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/pstrlist_test.py b/sources/shiboken2/tests/samplebinding/pstrlist_test.py new file mode 100644 index 0000000..5ecccd0 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/pstrlist_test.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +import sample + +class PStrListTest(unittest.TestCase): + + def testPStrList(self): + a = 'str0' + b = 'str1' + lst = sample.createPStrList(a, b) + self.assertEqual(lst, [a, b]) + + def testListOfPStr(self): + a = 'str0' + b = 'str1' + lst = sample.createListOfPStr(a, b) + self.assertEqual(lst, [a, b]) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/pystr_test.py b/sources/shiboken2/tests/samplebinding/pystr_test.py new file mode 100644 index 0000000..2aa4da4 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/pystr_test.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for definition of __str__ method.''' + +import sys +import unittest + +from sample import Point + +class PyStrTest(unittest.TestCase): + '''Test case for definition of __str__ method.''' + + def testPyStr(self): + '''Test case for defined __str__ method.''' + pt = Point(5, 2) + self.assertEqual(str(pt), 'Point(5.0, 2.0)') + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/python_thread_test.py b/sources/shiboken2/tests/samplebinding/python_thread_test.py new file mode 100644 index 0000000..2015c8e --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/python_thread_test.py @@ -0,0 +1,116 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +#!/usr/bin/env python + +'''Tests for using Shiboken-based bindings with python threads''' + +import unittest +import threading +import sample +import time + +import logging + +#logging.basicConfig(level=logging.DEBUG) + +from random import random + +class Producer(threading.Thread): + '''Producer thread''' + + def __init__(self, bucket, max_runs, *args): + #Constructor. Receives the bucket + super(Producer, self).__init__(*args) + self.runs = 0 + self.bucket = bucket + self.max_runs = max_runs + self.production_list = [] + + def run(self): + while self.runs < self.max_runs: + value = int(random()*10) % 10 + self.bucket.push(value) + self.production_list.append(value) + logging.debug('PRODUCER - pushed %d' % value) + self.runs += 1 + #self.msleep(5) + time.sleep(0.01) + + +class Consumer(threading.Thread): + '''Consumer thread''' + def __init__(self, bucket, max_runs, *args): + #Constructor. Receives the bucket + super(Consumer, self).__init__(*args) + self.runs = 0 + self.bucket = bucket + self.max_runs = max_runs + self.consumption_list = [] + + def run(self): + while self.runs < self.max_runs: + if not self.bucket.empty(): + value = self.bucket.pop() + self.consumption_list.append(value) + logging.debug('CONSUMER - got %d' % value) + self.runs += 1 + else: + logging.debug('CONSUMER - empty bucket') + time.sleep(0.01) + +class ProducerConsumer(unittest.TestCase): + '''Basic test case for producer-consumer QThread''' + + def finishCb(self): + #Quits the application + self.app.exit(0) + + def testProdCon(self): + #QThread producer-consumer example + bucket = sample.Bucket() + prod = Producer(bucket, 10) + cons = Consumer(bucket, 10) + + prod.start() + cons.start() + + #QObject.connect(prod, SIGNAL('finished()'), self.finishCb) + #QObject.connect(cons, SIGNAL('finished()'), self.finishCb) + + prod.join() + cons.join() + + self.assertEqual(prod.production_list, cons.consumption_list) + + + + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/receive_null_cstring_test.py b/sources/shiboken2/tests/samplebinding/receive_null_cstring_test.py new file mode 100644 index 0000000..68de493 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/receive_null_cstring_test.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for a function that could receive a NULL pointer in a '[const] char*' parameter.''' + +import unittest + +from sample import countCharacters + +class ReceiveNullCStringTest(unittest.TestCase): + '''Test case for a function that could receive a NULL pointer in a '[const] char*' parameter.''' + + def testBasic(self): + '''The test function should be working for the basic cases.''' + a = '' + b = 'abc' + self.assertEqual(countCharacters(a), len(a)) + self.assertEqual(countCharacters(b), len(b)) + + def testReceiveNull(self): + '''The test function returns '-1' when receives a None value instead of a string.''' + self.assertEqual(countCharacters(None), -1) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/reference_test.py b/sources/shiboken2/tests/samplebinding/reference_test.py new file mode 100644 index 0000000..152730f --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/reference_test.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for methods that receive references to objects.''' + +import sys +import unittest + +from sample import * + +class ExtendedReference(Reference): + def __init__(self): + Reference.__init__(self) + self.uses_reference_virtual_called = False + self.uses_const_reference_virtual_called = False + self.reference_inc = 1 + self.const_reference_inc = 2 + self.multiplier = 333 + + def usesReferenceVirtual(self, ref, inc): + self.uses_reference_virtual_called = True + return ref.objId() + inc + self.reference_inc + + def usesConstReferenceVirtual(self, ref, inc): + self.uses_const_reference_virtual_called = True + return ref.objId() + inc + self.const_reference_inc + + def alterReferenceIdVirtual(self, ref): + ref.setObjId(ref.objId() * self.multiplier) + + +class ReferenceTest(unittest.TestCase): + '''Test case for methods that receive references to objects.''' + + def testMethodThatReceivesReference(self): + '''Test a method that receives a reference to an object as argument.''' + objId = 123 + r = Reference(objId) + self.assertEqual(Reference.usesReference(r), objId) + + def testCantSegFaultWhenReceiveNone(self): + '''do not segfault when receiving None as argument.''' + s = Str() + self.assertTrue(None == s) + + def testMethodThatReceivesConstReference(self): + '''Test a method that receives a const reference to an object as argument.''' + objId = 123 + r = Reference(objId) + self.assertEqual(Reference.usesConstReference(r), objId) + + def testModificationOfReference(self): + '''Tests if the identity of a reference argument is preserved when passing it to be altered in C++.''' + objId = 123 + r1 = Reference(objId) + r1.alterReferenceIdVirtual(r1) + self.assertEqual(r1.objId(), objId * Reference.multiplier()) + + def testModificationOfReferenceCallingAVirtualIndirectly(self): + '''Tests if the identity of a reference argument is preserved when passing it to be altered in C++ through a method that calls a virtual method.''' + objId = 123 + r1 = Reference(objId) + r1.callAlterReferenceIdVirtual(r1) + self.assertEqual(r1.objId(), objId * Reference.multiplier()) + + def testModificationOfReferenceCallingAReimplementedVirtualIndirectly(self): + '''Test if a Python override of a virtual method with a reference parameter called from C++ alters the argument properly.''' + objId = 123 + r = Reference(objId) + er = ExtendedReference() + result = er.callAlterReferenceIdVirtual(r) + self.assertEqual(r.objId(), objId * er.multiplier) + + def testReimplementedVirtualMethodCallWithReferenceParameter(self): + '''Test if a Python override of a virtual method with a reference parameter is correctly called from C++.''' + inc = 9 + objId = 123 + r = Reference(objId) + er = ExtendedReference() + result = er.callUsesReferenceVirtual(r, inc) + self.assertEqual(result, objId + inc + er.reference_inc) + + def testReimplementedVirtualMethodCallWithConstReferenceParameter(self): + '''Test if a Python override of a virtual method with a const reference parameter is correctly called from C++.''' + inc = 9 + objId = 123 + r = Reference(objId) + er = ExtendedReference() + result = er.callUsesConstReferenceVirtual(r, inc) + self.assertEqual(result, objId + inc + er.const_reference_inc) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/referencetopointer_test.py b/sources/shiboken2/tests/samplebinding/referencetopointer_test.py new file mode 100644 index 0000000..5a02c59 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/referencetopointer_test.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for a reference to pointer argument type.''' + +import unittest + +from sample import VirtualMethods, Str + +class ExtendedVirtualMethods(VirtualMethods): + def __init__(self): + VirtualMethods.__init__(self) + self.prefix = 'Ext' + + def createStr(self, text): + ext_text = text + if text is not None: + ext_text = self.prefix + text + return VirtualMethods.createStr(self, ext_text) + + +class ReferenceToPointerTest(unittest.TestCase): + '''Test cases for a reference to pointer argument type.''' + + def testSimpleCallWithNone(self): + '''Simple call to createStr method with a None argument.''' + obj = VirtualMethods() + ok, string = obj.createStr(None) + self.assertFalse(ok) + self.assertEqual(string, None) + + def testSimpleCallWithString(self): + '''Simple call to createStr method with a Python string argument.''' + obj = VirtualMethods() + ok, string = obj.createStr('foo') + self.assertTrue(ok) + self.assertEqual(string, Str('foo')) + + def testCallNonReimplementedMethodWithNone(self): + '''Calls createStr method from C++ with a None argument.''' + obj = VirtualMethods() + ok, string = obj.callCreateStr(None) + self.assertFalse(ok) + self.assertEqual(string, None) + + def testCallNonReimplementedMethodWithString(self): + '''Calls createStr method from C++ with a Python string argument.''' + obj = VirtualMethods() + ok, string = obj.callCreateStr('foo') + self.assertTrue(ok) + self.assertEqual(string, Str('foo')) + + def testCallReimplementedMethodWithNone(self): + '''Calls reimplemented createStr method from C++ with a None argument.''' + obj = ExtendedVirtualMethods() + ok, string = obj.callCreateStr(None) + self.assertFalse(ok) + self.assertEqual(string, None) + + def testCallReimplementedMethodWithString(self): + '''Calls reimplemented createStr method from C++ with a Python string argument.''' + obj = ExtendedVirtualMethods() + ok, string = obj.callCreateStr('foo') + self.assertTrue(ok) + self.assertEqual(string, Str(obj.prefix + 'foo')) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/return_null_test.py b/sources/shiboken2/tests/samplebinding/return_null_test.py new file mode 100644 index 0000000..15abb8b --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/return_null_test.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for functions that could return a NULL pointer.''' + +import sys +import unittest + +from sample import returnNullPrimitivePointer, returnNullValueTypePointer, returnNullObjectTypePointer + +class ReturnNullTest(unittest.TestCase): + '''Test case for functions that could return a NULL pointer.''' + + def testReturnNull(self): + '''Function returns a NULL pointer to a primitive type.''' + o = returnNullPrimitivePointer() + self.assertEqual(o, None) + + def testReturnNullObjectType(self): + '''Function returns a NULL pointer to an object-type.''' + o = returnNullObjectTypePointer() + self.assertEqual(o, None) + + def testReturnNullValueType(self): + '''Function returns a NULL pointer to a value-type.''' + o = returnNullValueTypePointer() + self.assertEqual(o, None) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/richcompare_test.py b/sources/shiboken2/tests/samplebinding/richcompare_test.py new file mode 100644 index 0000000..b219add --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/richcompare_test.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from sample import * + +class TestRichCompare(unittest.TestCase): + + def testIt(self): + a = Expression(2) + b = Expression(3) + c = a + b + d = a + c < b + a + self.assertEqual(d.toString(), "((2+(2+3))<(3+2))") + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/sample-binding.txt.in b/sources/shiboken2/tests/samplebinding/sample-binding.txt.in new file mode 100644 index 0000000..317f76f --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/sample-binding.txt.in @@ -0,0 +1,15 @@ +[generator-project] + +generator-set = shiboken + +header-file = @CMAKE_CURRENT_SOURCE_DIR@/global.h +typesystem-file = @sample_TYPESYSTEM@ + +output-directory = @CMAKE_CURRENT_BINARY_DIR@ + +include-path = @libsample_SOURCE_DIR@ + +typesystem-path = @CMAKE_CURRENT_SOURCE_DIR@ + +enable-parent-ctor-heuristic +use-isnull-as-nb_nonzero diff --git a/sources/shiboken2/tests/samplebinding/sample_test.py b/sources/shiboken2/tests/samplebinding/sample_test.py new file mode 100644 index 0000000..94cf4f5 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/sample_test.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for libsample bindings module''' + +import unittest + +import sample + +class ModuleTest(unittest.TestCase): + '''Test case for module and global functions''' + + def testModuleMembers(self): + '''Test availability of classes, global functions and other members on binding''' + expected_members = set(['Abstract', 'Derived', 'Point', + 'ListUser', 'PairUser', 'MapUser', + 'gimmeComplexList', 'gimmeDouble', 'gimmeInt', + 'makeCString', 'multiplyPair', 'returnCString', + 'SampleNamespace', 'transmuteComplexIntoPoint', + 'transmutePointIntoComplex', 'sumComplexPair', + 'FirstThing', 'SecondThing', 'ThirdThing', + 'GlobalEnum', 'NoThing']) + self.assertTrue(expected_members.issubset(dir(sample))) + + def testAbstractPrintFormatEnum(self): + '''Test availability of PrintFormat enum from Abstract class''' + enum_members = set(['PrintFormat', 'Short', 'Verbose', + 'OnlyId', 'ClassNameAndId']) + self.assertTrue(enum_members.issubset(dir(sample.Abstract))) + + def testSampleNamespaceOptionEnum(self): + '''Test availability of Option enum from SampleNamespace namespace''' + enum_members = set(['Option', 'None_', 'RandomNumber', 'UnixTime']) + self.assertTrue(enum_members.issubset(dir(sample.SampleNamespace))) + + def testAddedFunctionAtModuleLevel(self): + '''Calls function added to module from type system description.''' + str1 = 'Foo' + self.assertEqual(sample.multiplyString(str1, 3), str1 * 3) + self.assertEqual(sample.multiplyString(str1, 0), str1 * 0) + + def testAddedFunctionWithVarargs(self): + '''Calls function that receives varargs added to module from type system description.''' + self.assertEqual(sample.countVarargs(1), 0) + self.assertEqual(sample.countVarargs(1, 2), 1) + self.assertEqual(sample.countVarargs(1, 2, 3, 'a', 'b', 4, (5, 6)), 6) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/simplefile_glue.cpp b/sources/shiboken2/tests/samplebinding/simplefile_glue.cpp new file mode 100644 index 0000000..bccd515 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/simplefile_glue.cpp @@ -0,0 +1,34 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +if (!%CPPSELF.%FUNCTION_NAME()) { + PyObject* error_msg = PyBytes_FromFormat( + "Could not open file: \"%s\"", %CPPSELF->filename()); + PyErr_SetObject(PyExc_IOError, error_msg); + return 0; +} diff --git a/sources/shiboken2/tests/samplebinding/simplefile_test.py b/sources/shiboken2/tests/samplebinding/simplefile_test.py new file mode 100644 index 0000000..2a42942 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/simplefile_test.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for SimpleFile class''' + +import os +import unittest + +from sample import SimpleFile + +class SimpleFileTest(unittest.TestCase): + '''Test cases for SimpleFile class.''' + + def setUp(self): + filename = 'simplefile%d.txt' % os.getpid() + self.existing_filename = os.path.join(os.path.curdir, filename) + self.delete_file = False + if not os.path.exists(self.existing_filename): + f = open(self.existing_filename, 'w') + for line in range(10): + f.write('sbrubbles\n') + f.close() + self.delete_file = True + + self.non_existing_filename = os.path.join(os.path.curdir, 'inexistingfile.txt') + i = 0 + while os.path.exists(self.non_existing_filename): + i += 1 + filename = 'inexistingfile-%d.txt' % i + self.non_existing_filename = os.path.join(os.path.curdir, filename) + + def tearDown(self): + if self.delete_file: + os.remove(self.existing_filename) + + def testExistingFile(self): + '''Test SimpleFile class with existing file.''' + f = SimpleFile(self.existing_filename) + self.assertEqual(f.filename(), self.existing_filename) + f.open() + self.assertNotEqual(f.size(), 0) + f.close() + + def testNonExistingFile(self): + '''Test SimpleFile class with non-existing file.''' + f = SimpleFile(self.non_existing_filename) + self.assertEqual(f.filename(), self.non_existing_filename) + self.assertRaises(IOError, f.open) + self.assertEqual(f.size(), 0) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/size_test.py b/sources/shiboken2/tests/samplebinding/size_test.py new file mode 100644 index 0000000..b7547d5 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/size_test.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for operator overloads on Size class''' + +import unittest + +from sample import Size + +class PointTest(unittest.TestCase): + '''Test case for Size class, including operator overloads.''' + + def testConstructor(self): + '''Test Size class constructor.''' + width, height = (5.0, 2.3) + size = Size(width, height) + self.assertEqual(size.width(), width) + self.assertEqual(size.height(), height) + self.assertEqual(size.calculateArea(), width * height) + + def testCopyConstructor(self): + '''Test Size class copy constructor.''' + width, height = (5.0, 2.3) + s1 = Size(width, height) + s2 = Size(s1) + self.assertFalse(s1 is s2) + self.assertEqual(s1, s2) + + def testPlusOperator(self): + '''Test Size class + operator.''' + s1 = Size(5.0, 2.3) + s2 = Size(0.5, 3.2) + self.assertEqual(s1 + s2, Size(5.0 + 0.5, 2.3 + 3.2)) + + def testEqualOperator(self): + '''Test Size class == operator.''' + s1 = Size(5.0, 2.3) + s2 = Size(5.0, 2.3) + s3 = Size(0.5, 3.2) + self.assertTrue(s1 == s1) + self.assertTrue(s1 == s2) + self.assertFalse(s1 == s3) + + def testNotEqualOperator(self): + '''Test Size class != operator.''' + s1 = Size(5.0, 2.3) + s2 = Size(5.0, 2.3) + s3 = Size(0.5, 3.2) + self.assertFalse(s1 != s1) + self.assertFalse(s1 != s2) + self.assertTrue(s1 != s3) + + def testMinorEqualOperator(self): + '''Test Size class <= operator.''' + s1 = Size(5.0, 2.3) + s2 = Size(5.0, 2.3) + s3 = Size(0.5, 3.2) + self.assertTrue(s1 <= s1) + self.assertTrue(s1 <= s2) + self.assertTrue(s3 <= s1) + self.assertFalse(s1 <= s3) + + def testMinorOperator(self): + '''Test Size class < operator.''' + s1 = Size(5.0, 2.3) + s2 = Size(0.5, 3.2) + self.assertFalse(s1 < s1) + self.assertFalse(s1 < s2) + self.assertTrue(s2 < s1) + + def testMajorEqualOperator(self): + '''Test Size class >= operator.''' + s1 = Size(5.0, 2.3) + s2 = Size(5.0, 2.3) + s3 = Size(0.5, 3.2) + self.assertTrue(s1 >= s1) + self.assertTrue(s1 >= s2) + self.assertTrue(s1 >= s3) + self.assertFalse(s3 >= s1) + + def testMajorOperator(self): + '''Test Size class > operator.''' + s1 = Size(5.0, 2.3) + s2 = Size(0.5, 3.2) + self.assertFalse(s1 > s1) + self.assertTrue(s1 > s2) + self.assertFalse(s2 > s1) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/static_nonstatic_methods_test.py b/sources/shiboken2/tests/samplebinding/static_nonstatic_methods_test.py new file mode 100644 index 0000000..9b5c1e0 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/static_nonstatic_methods_test.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for overloads involving static and non-static versions of a method.''' + +import os +import unittest + +from sample import SimpleFile + +class SimpleFile2 (SimpleFile): + def exists(self): + return "Mooo" + +class SimpleFile3 (SimpleFile): + pass + +class SimpleFile4 (SimpleFile): + exists = 5 + +class StaticNonStaticMethodsTest(unittest.TestCase): + '''Test cases for overloads involving static and non-static versions of a method.''' + + def setUp(self): + filename = 'simplefile%d.txt' % os.getpid() + self.existing_filename = os.path.join(os.path.curdir, filename) + self.delete_file = False + if not os.path.exists(self.existing_filename): + f = open(self.existing_filename, 'w') + for line in range(10): + f.write('sbrubbles\n') + f.close() + self.delete_file = True + + self.non_existing_filename = os.path.join(os.path.curdir, 'inexistingfile.txt') + i = 0 + while os.path.exists(self.non_existing_filename): + i += 1 + filename = 'inexistingfile-%d.txt' % i + self.non_existing_filename = os.path.join(os.path.curdir, filename) + + def tearDown(self): + if self.delete_file: + os.remove(self.existing_filename) + + def testCallingStaticMethodWithClass(self): + '''Call static method using class.''' + self.assertTrue(SimpleFile.exists(self.existing_filename)) + self.assertFalse(SimpleFile.exists(self.non_existing_filename)) + + def testCallingStaticMethodWithInstance(self): + '''Call static method using instance of class.''' + f = SimpleFile(self.non_existing_filename) + self.assertTrue(f.exists(self.existing_filename)) + self.assertFalse(f.exists(self.non_existing_filename)) + + def testCallingInstanceMethod(self): + '''Call instance method.''' + f1 = SimpleFile(self.non_existing_filename) + self.assertFalse(f1.exists()) + f2 = SimpleFile(self.existing_filename) + self.assertTrue(f2.exists()) + + def testOverridingStaticNonStaticMethod(self): + f = SimpleFile2(self.existing_filename) + self.assertEqual(f.exists(), "Mooo") + + f = SimpleFile3(self.existing_filename) + self.assertTrue(f.exists()) + + f = SimpleFile4(self.existing_filename) + self.assertEqual(f.exists, 5) + + def testDuckPunchingStaticNonStaticMethod(self): + f = SimpleFile(self.existing_filename) + f.exists = lambda : "Meee" + self.assertEqual(f.exists(), "Meee") + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/str_test.py b/sources/shiboken2/tests/samplebinding/str_test.py new file mode 100644 index 0000000..a5ead47 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/str_test.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for a method that receives a reference to class that is implicitly convertible from a Python native type.''' + +import unittest + +from sample import Str + +class StrTest(unittest.TestCase): + '''Test cases for thr Str class.''' + + def test__str__Method(self): + '''Test if the binding correcly implements the Python __str__ method.''' + s1 = 'original string' + s2 = Str(s1) + self.assertEqual(s1, s2) + self.assertEqual(s1, str(s2)) + + def testPassExactClassAsReferenceToArgument(self): + '''Test passing the expected class as an argument to a method that expects a reference.''' + s1 = Str('This is %VAR!').arg(Str('Sparta')) + self.assertEqual(str(s1), 'This is Sparta!') + + def testPassPythonTypeImplictlyConvertibleToAClassUsedAsReference(self): + '''Test passing a Python class implicitly convertible to a wrapped class that is expected to be passed as reference.''' + s1 = Str('This is %VAR!').arg('Athens') + self.assertEqual(str(s1), 'This is Athens!') + + def testSequenceOperators(self): + s1 = Str("abcdef") + self.assertEqual(len(s1), 6); + self.assertEqual(len(Str()), 0); + + # getitem + self.assertEqual(s1[0], "a"); + self.assertEqual(s1[1], "b"); + self.assertEqual(s1[2], "c"); + self.assertEqual(s1[3], "d"); + self.assertEqual(s1[4], "e"); + self.assertEqual(s1[5], "f"); + self.assertEqual(s1[-1], "f"); + self.assertEqual(s1[-2], "e"); + + self.assertRaises(TypeError, s1.__getitem__, 6) + + # setitem + s1[0] = 'A' + s1[1] = 'B' + self.assertEqual(s1[0], 'A'); + self.assertEqual(s1[1], 'B'); + self.assertRaises(TypeError, s1.__setitem__(6, 67)) + + def testReverseOperator(self): + s1 = Str("hello") + n1 = 2 + self.assertEqual(s1+2, "hello2") + self.assertEqual(2+s1, "2hello") + + def testToIntError(self): + self.assertEqual(Str('Z').toInt(), (0, False)) + + def testToIntWithDecimal(self): + decimal = Str('37') + val, ok = decimal.toInt() + self.assertEqual(type(val), int) + self.assertEqual(type(ok), bool) + self.assertEqual(val, int(str(decimal))) + + def testToIntWithOctal(self): + octal = Str('52') + val, ok = octal.toInt(8) + self.assertEqual(type(val), int) + self.assertEqual(type(ok), bool) + self.assertEqual(val, int(str(octal), 8)) + + def testToIntWithHexadecimal(self): + hexa = Str('2A') + val, ok = hexa.toInt(16) + self.assertEqual(type(val), int) + self.assertEqual(type(ok), bool) + self.assertEqual(val, int(str(hexa), 16)) + self.assertEqual(hexa.toInt(), (0, False)) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/strlist_test.py b/sources/shiboken2/tests/samplebinding/strlist_test.py new file mode 100644 index 0000000..787374b --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/strlist_test.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for StrList class that inherits from std::list.''' + +import unittest + +from sample import Str, StrList + +class StrListTest(unittest.TestCase): + '''Test cases for StrList class that inherits from std::list.''' + + def testStrListCtor_NoParams(self): + '''StrList constructor receives no parameter.''' + sl = StrList() + self.assertEqual(len(sl), 0) + self.assertEqual(sl.constructorUsed(), StrList.NoParamsCtor) + + def testStrListCtor_Str(self): + '''StrList constructor receives a Str object.''' + s = Str('Foo') + sl = StrList(s) + self.assertEqual(len(sl), 1) + self.assertEqual(sl[0], s) + self.assertEqual(sl.constructorUsed(), StrList.StrCtor) + + def testStrListCtor_PythonString(self): + '''StrList constructor receives a Python string.''' + s = 'Foo' + sl = StrList(s) + self.assertEqual(len(sl), 1) + self.assertEqual(sl[0], s) + self.assertEqual(sl.constructorUsed(), StrList.StrCtor) + + def testStrListCtor_StrList(self): + '''StrList constructor receives a StrList object.''' + sl1 = StrList(Str('Foo')) + sl2 = StrList(sl1) + #self.assertEqual(len(sl1), len(sl2)) + #self.assertEqual(sl1, sl2) + self.assertEqual(sl2.constructorUsed(), StrList.CopyCtor) + + def testStrListCtor_ListOfStrs(self): + '''StrList constructor receives a Python list of Str objects.''' + strs = [Str('Foo'), Str('Bar')] + sl = StrList(strs) + self.assertEqual(len(sl), len(strs)) + self.assertEqual(sl, strs) + self.assertEqual(sl.constructorUsed(), StrList.ListOfStrCtor) + + def testStrListCtor_MixedListOfStrsAndPythonStrings(self): + '''StrList constructor receives a Python list of mixed Str objects and Python strings.''' + strs = [Str('Foo'), 'Bar'] + sl = StrList(strs) + self.assertEqual(len(sl), len(strs)) + self.assertEqual(sl, strs) + self.assertEqual(sl.constructorUsed(), StrList.ListOfStrCtor) + + def testCompareStrListWithTupleOfStrs(self): + '''Compares StrList with a Python tuple of Str objects.''' + sl = StrList() + sl.append(Str('Foo')) + sl.append(Str('Bar')) + self.assertEqual(len(sl), 2) + self.assertEqual(sl, (Str('Foo'), Str('Bar'))) + + def testCompareStrListWithTupleOfPythonStrings(self): + '''Compares StrList with a Python tuple of Python strings.''' + sl = StrList() + sl.append(Str('Foo')) + sl.append(Str('Bar')) + self.assertEqual(len(sl), 2) + self.assertEqual(sl, ('Foo', 'Bar')) + + def testCompareStrListWithTupleOfStrAndPythonString(self): + '''Compares StrList with a Python tuple of mixed Str objects and Python strings.''' + sl = StrList() + sl.append(Str('Foo')) + sl.append(Str('Bar')) + self.assertEqual(len(sl), 2) + self.assertEqual(sl, (Str('Foo'), 'Bar')) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/templateinheritingclass_test.py b/sources/shiboken2/tests/samplebinding/templateinheritingclass_test.py new file mode 100644 index 0000000..914a3e2 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/templateinheritingclass_test.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from sample import Photon + +'''This tests classes that inherit from template classes, +simulating a situation found in Qt's phonon module.''' + +class TemplateInheritingClassTest(unittest.TestCase): + def testClassBasics(self): + self.assertEqual(Photon.ValueIdentity.classType(), Photon.IdentityType) + self.assertEqual(Photon.ValueDuplicator.classType(), Photon.DuplicatorType) + + def testInstanceBasics(self): + value = 123 + samer = Photon.ValueIdentity(value) + self.assertEqual(samer.multiplicator(), 1) + doubler = Photon.ValueDuplicator(value) + self.assertEqual(doubler.multiplicator(), 2) + self.assertEqual(samer.value(), doubler.value()) + self.assertEqual(samer.calculate() * 2, doubler.calculate()) + + def testPassToFunctionAsPointer(self): + obj = Photon.ValueDuplicator(123) + self.assertEqual(Photon.callCalculateForValueDuplicatorPointer(obj), obj.calculate()) + + def testPassToFunctionAsReference(self): + obj = Photon.ValueDuplicator(321) + self.assertEqual(Photon.callCalculateForValueDuplicatorReference(obj), obj.calculate()) + + def testPassToMethodAsValue(self): + value1, value2 = 123, 321 + one = Photon.ValueIdentity(value1) + other = Photon.ValueIdentity(value2) + self.assertEqual(one.sumValueUsingPointer(other), value1 + value2) + + def testPassToMethodAsReference(self): + value1, value2 = 123, 321 + one = Photon.ValueDuplicator(value1) + other = Photon.ValueDuplicator(value2) + self.assertEqual(one.sumValueUsingReference(other), value1 + value2) + + def testPassPointerThrough(self): + obj1 = Photon.ValueIdentity(123) + self.assertEqual(obj1, obj1.passPointerThrough(obj1)) + obj2 = Photon.ValueDuplicator(321) + self.assertEqual(obj2, obj2.passPointerThrough(obj2)) + self.assertRaises(TypeError, obj1.passPointerThrough, obj2) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/time_test.py b/sources/shiboken2/tests/samplebinding/time_test.py new file mode 100644 index 0000000..1882ffc --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/time_test.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for constructor and method signature decisor on Time class.''' + +import sys +import unittest +import datetime + +from sample import Time, ImplicitConv, ObjectType + +class TimeTest(unittest.TestCase): + '''Test cases for constructor and method signature decisor on Time class. + The constructor and one method have these signatures: CTORMETHOD() and + CTORMETHOD(int h, int m, int s = 0, int ms = 0); there another method + with a more complex signature METH(int, int, ImplicitConv=DEFVALUE, ObjectType=0), + to produce an even worse scenario. + ''' + + def testConstructorWithoutParamers(self): + '''Constructor without parameters: Time()''' + time = Time() + self.assertTrue(time.isNull()) + + def testConstructorWithAllParamers(self): + '''Constructor with all parameters: Time(int h, int m, int s = 0, int ms = 0)''' + time = Time(1, 2, 3, 4) + self.assertTrue(time.toString(), '01:02:03.004') + + def testConstructorWithThreeParamers(self): + '''Constructor with 3 parameters: Time(int h, int m, int s = 0, int ms = 0)''' + time = Time(1, 2, 3) + self.assertTrue(time.toString(), '01:02:03.000') + + def testConstructorWithTwoParamers(self): + '''Constructor with 2 parameters: Time(int h, int m, int s = 0, int ms = 0)''' + time = Time(1, 2) + self.assertTrue(time.toString(), '01:02:00.000') + + def testSimpleMethodWithoutParamers(self): + '''Constructor without parameters: Time.setTime()''' + time = Time(1, 2, 3, 4) + time.setTime() + self.assertTrue(time.isNull()) + + def testSimpleMethodWithAllParamers(self): + '''Simple method with all parameters: Time.setTime(int h, int m, int s = 0, int ms = 0)''' + time = Time() + time.setTime(1, 2, 3, 4) + self.assertTrue(time.toString(), '01:02:03.004') + + def testSimpleMethodWithThreeParamers(self): + '''Simple method with 3 parameters: Time.setTime(int h, int m, int s = 0, int ms = 0)''' + time = Time() + time.setTime(1, 2, 3) + self.assertTrue(time.toString(), '01:02:03.000') + + def testSimpleMethodWithTwoParamers(self): + '''Simple method with 2 parameters: Time.setTime(int h, int m, int s = 0, int ms = 0)''' + time = Time() + time.setTime(1, 2) + self.assertTrue(time.toString(), '01:02:00.000') + + def testMethodWithoutParamers(self): + '''Method without parameters: Time.somethingCompletelyDifferent()''' + time = Time() + result = time.somethingCompletelyDifferent() + self.assertEqual(result, Time.ZeroArgs) + + def testMethodWithAllParamers(self): + '''Method with all parameters: + Time.somethingCompletelyDifferent( + int h, int m, ImplicitConv ic = ImplicitConv::CtorThree, ObjectType* type = 0 + ); + ''' + time = Time() + obj = ObjectType() + result = time.somethingCompletelyDifferent(1, 2, ImplicitConv(2), obj) + self.assertEqual(result, Time.FourArgs) + + def testMethodWithThreeParamers(self): + '''Method with 3 parameters: Time.somethingCompletelyDifferent(...)''' + time = Time() + result = time.somethingCompletelyDifferent(1, 2, ImplicitConv(ImplicitConv.CtorOne)) + self.assertEqual(result, Time.ThreeArgs) + + def testMethodWithTwoParamers(self): + '''Method with 2 parameters: Time.somethingCompletelyDifferent(...)''' + time = Time() + result = time.somethingCompletelyDifferent(1, 2) + self.assertEqual(result, Time.TwoArgs) + + def testMethodWithThreeParamersAndImplicitConversion(self): + '''Method with 3 parameters, the last one triggers an implicit conversion.''' + time = Time() + result = time.somethingCompletelyDifferent(1, 2, ImplicitConv.CtorOne) + self.assertEqual(result, Time.ThreeArgs) + + def testCompareWithPythonTime(self): + time = Time(12, 32, 5) + py = datetime.time(12, 32, 5) + self.assertEqual(time, py) + + def testNotEqual(self): + time = Time(12, 32, 6) + py = datetime.time(12, 32, 5) + self.assertNotEqual(time, py) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/transform_test.py b/sources/shiboken2/tests/samplebinding/transform_test.py new file mode 100644 index 0000000..51839db --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/transform_test.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for argument modification with more than nine arguments.''' + +import unittest + +from sample import Point, applyHomogeneousTransform + +class TransformTest(unittest.TestCase): + '''Test cases for modifying a function with > 9 arguments.''' + + def testTransform_ValidMatrix(self): + '''Transform applies successfully.''' + p = Point(3, 4) + r = applyHomogeneousTransform(p, 0, 1, 0, -1, 0, 0, 0, 0, 1) + self.assertTrue(type(r) is Point) + self.assertEqual(r.x(), 4) + self.assertEqual(r.y(), -3) + + def testTransform_InvalidMatrix(self): + '''Transform does not apply successfully.''' + p = Point(3, 4) + r = applyHomogeneousTransform(p, 1, 0, 0, 0, 1, 0, 0, 0, 0) + self.assertTrue(r is None) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/typeconverters_test.py b/sources/shiboken2/tests/samplebinding/typeconverters_test.py new file mode 100644 index 0000000..46e2dd5 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/typeconverters_test.py @@ -0,0 +1,189 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Tests various usages of the type converters.''' + +import unittest +import sample + +class GetPythonTypeByNameTest(unittest.TestCase): + + '''Uses an added function with inject code that uses the libshiboken + function "Shiboken::Conversions::getPythonTypeObject(typeName)".''' + + def testGetObjectType(self): + pyType1 = sample.getPythonType('ObjectType') + self.assertEqual(pyType1, sample.ObjectType) + pyType2 = sample.getPythonType('ObjectType*') + self.assertEqual(pyType2, sample.ObjectType) + self.assertEqual(pyType1, pyType2) + + def testGetValueType(self): + pyType1 = sample.getPythonType('Point') + self.assertEqual(pyType1, sample.Point) + pyType2 = sample.getPythonType('Point*') + self.assertEqual(pyType2, sample.Point) + self.assertEqual(pyType1, pyType2) + + def testGetUsersPrimitiveType(self): + pyType = sample.getPythonType('OddBool') + self.assertEqual(pyType, bool) + + def testGetUsersPrimitiveTypeWithoutTargetLangApiName(self): + '''If the primitive type attribute "target-lang-api-name" is not set + there'll be no Python type associated with the C++ type.''' + pyType = sample.getPythonType('PStr') + self.assertEqual(pyType, None) + + def testPrimitiveTypeAndTypedef(self): + pyType = sample.getPythonType('double') + self.assertEqual(pyType, float) + pyTypedef = sample.getPythonType('real') + self.assertEqual(pyType, pyTypedef) + + def testPairContainerType(self): + pyType = sample.getPythonType('std::pair') + self.assertEqual(pyType, list) + + def testListContainerType(self): + pyType = sample.getPythonType('std::list') + self.assertEqual(pyType, list) + + def testMapContainerType(self): + pyType = sample.getPythonType('std::map') + self.assertEqual(pyType, dict) + + def testGlobalEnumType(self): + pyType = sample.getPythonType('GlobalEnum') + self.assertEqual(pyType, sample.GlobalEnum) + + def testScopedEnumType(self): + pyType = sample.getPythonType('Abstract::Type') + self.assertEqual(pyType, sample.Abstract.Type) + + +class CheckValueAndObjectTypeByNameTest(unittest.TestCase): + + '''Uses an added function with inject code that uses the libshiboken + functions that check if a type is Object or Value, based on its converter.''' + + def testErrors(self): + '''not existent type''' + self.assertRaises(ValueError, sample.cppTypeIsValueType, 'NotExistentType') + self.assertRaises(ValueError, sample.cppTypeIsObjectType, 'NotExistentType') + + def testObjectType1(self): + self.assertTrue(sample.cppTypeIsObjectType('ObjectType')) + self.assertFalse(sample.cppTypeIsValueType('ObjectType')) + + def testObjectType2(self): + self.assertTrue(sample.cppTypeIsObjectType('ObjectType*')) + self.assertFalse(sample.cppTypeIsValueType('ObjectType*')) + + def testValueType1(self): + self.assertTrue(sample.cppTypeIsValueType('Point')) + self.assertFalse(sample.cppTypeIsObjectType('Point')) + + def testValueType2(self): + self.assertTrue(sample.cppTypeIsValueType('Point*')) + self.assertFalse(sample.cppTypeIsObjectType('Point*')) + + def testUsersPrimitiveType(self): + self.assertFalse(sample.cppTypeIsValueType('Complex')) + self.assertFalse(sample.cppTypeIsObjectType('Complex')) + + def testContainerType(self): + self.assertFalse(sample.cppTypeIsValueType('std::list')) + self.assertFalse(sample.cppTypeIsObjectType('std::list')) + + +class SpecificConverterTest(unittest.TestCase): + + '''Uses an added function with inject code that uses the libshiboken + adapter class "Shiboken::Conversions::SpecificConverter".''' + + def testNotExistentType(self): + conversion = sample.getConversionTypeString('NotExistentType') + self.assertEqual(conversion, 'Invalid conversion') + + def testObjectType(self): + conversion = sample.getConversionTypeString('ObjectType') + self.assertEqual(conversion, 'Pointer conversion') + conversion = sample.getConversionTypeString('ObjectType*') + self.assertEqual(conversion, 'Pointer conversion') + conversion = sample.getConversionTypeString('ObjectType&') + self.assertEqual(conversion, 'Reference conversion') + + def testValueType(self): + conversion = sample.getConversionTypeString('Point') + self.assertEqual(conversion, 'Copy conversion') + conversion = sample.getConversionTypeString('Point*') + self.assertEqual(conversion, 'Pointer conversion') + conversion = sample.getConversionTypeString('Point&') + self.assertEqual(conversion, 'Reference conversion') + + +class StringBasedConversionTest(unittest.TestCase): + + def testValueType(self): + pts = (sample.Point(1, 1), sample.Point(2, 2), sample.Point(3, 3)) + result = sample.convertValueTypeToCppAndThenToPython(pts[0], pts[1], pts[2]) + for orig, new in zip(pts, result): + self.assertEqual(orig, new) + self.assertFalse(pts[0] is result[0]) + self.assertTrue(pts[1] is result[1]) + self.assertTrue(pts[2] is result[2]) + + def testObjectType(self): + objs = (sample.ObjectType(), sample.ObjectType()) + objs[0].setObjectName('obj0') + objs[1].setObjectName('obj1') + result = sample.convertObjectTypeToCppAndThenToPython(objs[0], objs[1]) + for orig, new in zip(objs, result): + self.assertEqual(orig, new) + self.assertEqual(orig.objectName(), new.objectName()) + self.assertTrue(orig is new) + + def testContainerType(self): + lst = range(4) + result = sample.convertListOfIntegersToCppAndThenToPython(lst) + self.assertTrue(len(result), 1) + self.assertTrue(lst, result[0]) + + def testCppPrimitiveType(self): + integers = (12, 34) + result = sample.convertIntegersToCppAndThenToPython(integers[0], integers[1]) + for orig, new in zip(integers, result): + self.assertEqual(orig, new) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/typedealloc_test.py b/sources/shiboken2/tests/samplebinding/typedealloc_test.py new file mode 100644 index 0000000..8f0371d --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/typedealloc_test.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test deallocation of type extended in Python.''' + +import gc +import weakref +import unittest + +from sample import Point + + +class TypeDeallocTest(unittest.TestCase): + + def setUp(self): + self.called = False + + def tearDown(self): + del self.called + + def callback(self, *args): + self.called = True + + def testScopeEnd(self): + ref = None + def scope(): + class Ext(Point): + pass + o = Ext() + global ref + ref = weakref.ref(Ext, self.callback) + scope() + gc.collect() + self.assertTrue(self.called) + + def testDeleteType(self): + class Ext(Point): + pass + ref = weakref.ref(Ext, self.callback) + del Ext + gc.collect() + self.assertTrue(self.called) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/typedtordoublefree_test.py b/sources/shiboken2/tests/samplebinding/typedtordoublefree_test.py new file mode 100644 index 0000000..e1fbc44 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/typedtordoublefree_test.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from sample import ObjectType + +class TestTypeDestructorDoubleFree(unittest.TestCase): + def testTypeDestructorDoubleFree(self): + '''Causes the type destructors of two derived classes to be called.''' + def scope(): + class ExtObj1(ObjectType): + def __init__(self): + ObjectType.__init__(self) + obj = ExtObj1() + child = ObjectType(parent=obj) + self.assertEqual(obj.takeChild(child), child) + class ExtObj2(ObjectType): + def __init__(self): + ObjectType.__init__(self) + obj = ExtObj2() + child = ObjectType(parent=obj) + self.assertEqual(obj.takeChild(child), child) + scope() + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/typesystem_sample.xml b/sources/shiboken2/tests/samplebinding/typesystem_sample.xml new file mode 100644 index 0000000..00052e8 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/typesystem_sample.xml @@ -0,0 +1,2430 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + return PyLong_FromSize_t(%in); + + + + %out = %OUTTYPE(PyLong_AsSsize_t(%in)); + + + + + + + static bool Check2TupleOfNumbers(PyObject* pyIn) { + if (!PySequence_Check(pyIn) || !(PySequence_Size(pyIn) == 2)) + return false; + Shiboken::AutoDecRef pyReal(PySequence_GetItem(pyIn, 0)); + if (!SbkNumber_Check(pyReal)) + return false; + Shiboken::AutoDecRef pyImag(PySequence_GetItem(pyIn, 1)); + if (!SbkNumber_Check(pyImag)) + return false; + return true; + } + + + + + + return PyComplex_FromDoubles(%in.real(), %in.imag()); + + + + + double real = PyComplex_RealAsDouble(%in); + double imag = PyComplex_ImagAsDouble(%in); + %out = %OUTTYPE(real, imag); + + + Shiboken::AutoDecRef pyReal(PySequence_GetItem(%in, 0)); + Shiboken::AutoDecRef pyImag(PySequence_GetItem(%in, 1)); + double real = %CONVERTTOCPP[double](pyReal); + double imag = %CONVERTTOCPP[double](pyImag); + %out = %OUTTYPE(real, imag); + + + + + + + + + + SBK_UNUSED(%in); + Py_RETURN_NONE; + + + + %out = %OUTTYPE(%in == 0); + + + + + + + + + + if (!%in) + Py_RETURN_NONE; + #ifdef IS_PY3K + return PyCapsule_New(%in, 0, 0); + #else + return PyCObject_FromVoidPtr(%in, 0); + #endif + + + + %out = 0; + + + void* ptr; + #ifdef IS_PY3K + ptr = PyCapsule_GetPointer(%in, 0); + #else + ptr = PyCObject_AsVoidPtr(%in); + #endif + %out = (%OUTTYPE)ptr; + + + + + + + static bool checkPyCapsuleOrPyCObject(PyObject* pyObj) + { + #ifdef IS_PY3K + return PyCapsule_CheckExact(pyObj); + #else + return PyCObject_Check(pyObj); + #endif + } + + + + + + + #ifdef IS_PY3K + return PyCapsule_New(&%in, 0, 0); + #else + return PyCObject_FromVoidPtr(&%in, 0); + #endif + + + + void* ptr; + #ifdef IS_PY3K + ptr = PyCapsule_GetPointer(%in, 0); + #else + ptr = PyCObject_AsVoidPtr(%in); + #endif + %out = *((%OUTTYPE*)ptr); + + + + + + + + + + + return PyBool_FromLong(%in.value()); + + + + // Tests CONVERTTOCPP macro with C++ primitive type. + bool b = %CONVERTTOCPP[bool](%in); + %out = %OUTTYPE(b); + + + // Tests CONVERTTOCPP macro with user's primitive type. + Complex cpx = %CONVERTTOCPP[Complex](%in); + %out = %OUTTYPE(cpx.real() != 0.0 || cpx.imag() != 0.0); + + + + + + + + + + return Shiboken::String::fromCString(%in.cstring(), %in.size()); + + + + const char* str = %CONVERTTOCPP[const char*](%in); + %out = %OUTTYPE(str); + + + %out = %OUTTYPE(); + + + + + + + + + + + + + + + + %FUNCTION_NAME(&%1, %2); + %PYARG_0 = %CONVERTTOPYTHON[PStr](%1); + + + + + + + + + + + + + + + + %FUNCTION_NAME(&%1); + %PYARG_0 = %CONVERTTOPYTHON[PStr](%1); + + + + + + + + + PyObject* %out = PyList_New((int) %in.size()); + PStrList::const_iterator it = %in.begin(); + for (int idx = 0; it != %in.end(); ++it, ++idx) { + PStr cppItem(*it); + PyList_SET_ITEM(%out, idx, %CONVERTTOPYTHON[PStr](cppItem)); + } + return %out; + + + + %OUTTYPE& list = %out; + Shiboken::AutoDecRef seq(PySequence_Fast(%in, 0)); + for (int i = 0; i < PySequence_Fast_GET_SIZE(seq.object()); i++) { + PyObject* pyItem = PySequence_Fast_GET_ITEM(seq.object(), i); + PStr cppItem = %CONVERTTOCPP[PStr](pyItem); + list.push_back(cppItem); + } + + + + + + + + PStrList %0; + %0.push_back(%1); + %0.push_back(%2); + %PYARG_0 = %CONVERTTOPYTHON[PStrList](%0); + + + + + std::list<PStr> %0; + %0.push_back(%1); + %0.push_back(%2); + %PYARG_0 = %CONVERTTOPYTHON[std::list<PStr>](%0); + + + + + + %PYARG_0 = (PyObject*) Shiboken::Conversions::getPythonTypeObject(%1); + if (!%PYARG_0) + %PYARG_0 = Py_None; + Py_INCREF(%PYARG_0); + + + + + + + + + + + + + + + + + + + + + + Shiboken::Conversions::SpecificConverter converter(%1); + const char* %0 = 0; + switch (converter.conversionType()) { + case Shiboken::Conversions::SpecificConverter::CopyConversion: + %0 = "Copy conversion"; + break; + case Shiboken::Conversions::SpecificConverter::PointerConversion: + %0 = "Pointer conversion"; + break; + case Shiboken::Conversions::SpecificConverter::ReferenceConversion: + %0 = "Reference conversion"; + break; + default: + %0 = "Invalid conversion"; + } + %PYARG_0 = %CONVERTTOPYTHON[const char*](%0); + + + + + static PyObject* __convertCppValuesToPython(const char** typeName, void** values, int size) + { + PyObject* result = PyTuple_New(size); + for (int i = 0; i < size; ++i) { + Shiboken::Conversions::SpecificConverter converter(typeName[i]); + PyTuple_SET_ITEM(result, i, converter.toPython(values[i])); + } + return result; + } + + + + const char* typeNames[] = { "Point", "Point*", "Point&" }; + void* values[] = { &%1, &%2, &(%3) }; + %PYARG_0 = __convertCppValuesToPython(typeNames, values, 3); + + + + + const char* typeNames[] = { "ObjectType*", "ObjectType&" }; + void* values[] = { &%1, &(%2) }; + %PYARG_0 = __convertCppValuesToPython(typeNames, values, 2); + + + + + const char* typeNames[] = { "std::list<int>" }; + void* values[] = { &%1 }; + %PYARG_0 = __convertCppValuesToPython(typeNames, values, 1); + + + + + const char* typeNames[] = { "int", "int" }; + void* values[] = { &%1, &%2 }; + %PYARG_0 = __convertCppValuesToPython(typeNames, values, 2); + + + + + + + + PyObject* %out = PyTuple_New(2); + PyTuple_SET_ITEM(%out, 0, %CONVERTTOPYTHON[%INTYPE_0](%in.first)); + PyTuple_SET_ITEM(%out, 1, %CONVERTTOPYTHON[%INTYPE_1](%in.second)); + return %out; + + + + %out.first = %CONVERTTOCPP[%OUTTYPE_0](PySequence_Fast_GET_ITEM(%in, 0)); + %out.second = %CONVERTTOCPP[%OUTTYPE_1](PySequence_Fast_GET_ITEM(%in, 1)); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PyObject* %out = PyDict_New(); + %INTYPE::const_iterator it = %in.begin(); + for (; it != %in.end(); ++it) { + %INTYPE_0 key = it->first; + %INTYPE_1 value = it->second; + PyDict_SetItem(%out, + %CONVERTTOPYTHON[%INTYPE_0](key), + %CONVERTTOPYTHON[%INTYPE_1](value)); + } + return %out; + + + + PyObject* key; + PyObject* value; + Py_ssize_t pos = 0; + while (PyDict_Next(%in, &pos, &key, &value)) { + %OUTTYPE_0 cppKey = %CONVERTTOCPP[%OUTTYPE_0](key); + %OUTTYPE_1 cppValue = %CONVERTTOCPP[%OUTTYPE_1](value); + %out.insert(%OUTTYPE::value_type(cppKey, cppValue)); + } + + + + + + + + %RETURN_TYPE %0 = Shiboken::BindingManager::instance().getAllPyObjects().size(); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + const unsigned char* %out = reinterpret_cast<const unsigned char*>(Shiboken::String::toCString(%PYARG_1)); + + + + + + unsigned int %out = static_cast<unsigned int>(Shiboken::String::len(%PYARG_1)); + + + + + + %RETURN_TYPE %0 = %1 + %2; + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + %RETURN_TYPE %0 = %1.x() + %1.y(); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + // The dot in "%1." must be replaced with a "->" by the generator. + %RETURN_TYPE %0 = %1.objectName().size(); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + const char* tmpArg = %CONVERTTOCPP[const char*](%PYARG_1); + %0 = new %FUNCTION_NAME(atoi(tmpArg)); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + static void reparent_layout_items(PyObject* parent, PyObject* layout) + { + // CHECKTYPE and ISCONVERTIBLE are used here for test purposes, don't change them. + if (!%CHECKTYPE[ObjectTypeLayout*](layout) && !%ISCONVERTIBLE[ObjectTypeLayout*](layout)) + return; + // %CHECKTYPE[ObjectTypeLayout*](layout) + // %ISCONVERTIBLE[ObjectTypeLayout*](layout) + ObjectTypeLayout* var; + var = %CONVERTTOCPP[ObjectTypeLayout*](layout); + // TODO-CONVERTER: erase this + /* + ObjectTypeLayout* var2 = %CONVERTTOCPP[ObjectTypeLayout*](layout); + */ + const ObjectTypeList& objChildren = var->objects(); + ObjectTypeList::const_iterator it = objChildren.begin(); + for (; it != objChildren.end(); ++it) { + if ((*it)->isLayoutType()) { + ObjectTypeLayout* l = reinterpret_cast<ObjectTypeLayout*>(*it); + reparent_layout_items(parent, %CONVERTTOPYTHON[ObjectTypeLayout*](l)); + Shiboken::Object::setParent(layout, %CONVERTTOPYTHON[ObjectTypeLayout*](l)); + } else { + Shiboken::Object::setParent(parent, %CONVERTTOPYTHON[ObjectType*](*it)); + } + } + } + + + + + + + if (%PYARG_1 != Py_None) + reparent_layout_items(%PYSELF, %PYARG_1); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %RETURN_TYPE %0 = %CPPSELF.%TYPE::%FUNCTION_NAME(%1, %2) * 10; + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%PYARG_1); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %RETURN_TYPE %0 = %CPPSELF.%TYPE::%FUNCTION_NAME(%1, true, %3, %4); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + int %out = PySequence_Size(%PYARG_1); + + + + + + Shiboken::AutoArrayPointer<Point> %out(%1); + for (int i = 0; i < %1; ++i) + %out[i] = %CONVERTTOCPP[Point](PySequence_Fast_GET_ITEM(%PYARG_1, i)); + + + + + + + + + + + + int size = (%2 < 0) ? %1.size() : %2; + %BEGIN_ALLOW_THREADS + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME((const void*) %1.data(), size); + %END_ALLOW_THREADS + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + + + + + + + + + + Shiboken::AutoDecRef _py_ok_(PySequence_GetItem(%PYARG_0, 0)); + Shiboken::AutoDecRef _py_ret_(PySequence_GetItem(%PYARG_0, 1)); + *%2 = %CONVERTTOCPP[bool](_py_ok_); + %RETURN_TYPE %out = %CONVERTTOCPP[%RETURN_TYPE](_py_ret_); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ObjectType* tmpObject = 0; + %BEGIN_ALLOW_THREADS + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(&tmpObject); + %END_ALLOW_THREADS + %PYARG_0 = PyTuple_New(2); + PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](%0)); + PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[ObjectType*](tmpObject)); + + + + + %RETURN_TYPE %0 = !%CPPSELF.%FUNCTION_NAME(%1); + %PYARG_0 = %CONVERTTOPYTHON[OddBool](%0); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %RETURN_TYPE %0 = %CPPSELF.%TYPE::%FUNCTION_NAME(%1, %1+%3, %3); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + PyObject* new_arg0 = PyInt_FromLong(PyInt_AS_LONG(%PYARG_1) - %2); + Py_DECREF(%PYARG_1); + %PYARG_1 = new_arg0; + + + + + %0.prepend(Str("Pimped")); + + + + + PyObject_Call(%PYTHON_METHOD_OVERRIDE, %PYTHON_ARGUMENTS, NULL); + + + + + + + + + + Shiboken::AutoDecRef _py_ok_(PySequence_GetItem(%PYARG_0, 0)); + Shiboken::AutoDecRef _py_ret_(PySequence_GetItem(%PYARG_0, 1)); + %RETURN_TYPE %out = %CONVERTTOCPP[%RETURN_TYPE](_py_ok_); + %2 = %CONVERTTOCPP[Str*](_py_ret_); + + + + Str* _str_arg_ = 0; + %RETURN_TYPE %0 = %CPPSELF.%TYPE::%FUNCTION_NAME(%1, _str_arg_); + + + %PYARG_0 = PyTuple_New(2); + PyObject* _item_ = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + PyTuple_SET_ITEM(%PYARG_0, 0, _item_); + _item_ = %CONVERTTOPYTHON[Str*](_str_arg_); + PyTuple_SET_ITEM(%PYARG_0, 1, _item_); + + + + + + + + + + + Str* _str_arg_ = 0; + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%1, _str_arg_); + + + %PYARG_0 = PyTuple_New(2); + PyObject* _item_ = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + PyTuple_SET_ITEM(%PYARG_0, 0, _item_); + _item_ = %CONVERTTOPYTHON[Str*](_str_arg_); + PyTuple_SET_ITEM(%PYARG_0, 1, _item_); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %BEGIN_ALLOW_THREADS + // It's important for test purposes to use a constructor with parenthesis as argument. + %RETURN_TYPE %0 = %RETURN_TYPE(%CPPSELF.%FUNCTION_NAME(Str(%1))); + %END_ALLOW_THREADS + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + + + + + + + + + + %0 = new %TYPE(%PYARG_1); + + + + + %PYARG_0 = reinterpret_cast<PyObject*>(%CPPSELF.%FUNCTION_NAME()); + if (!%PYARG_0) + %PYARG_0 = Py_None; + Py_INCREF(%PYARG_0); + + + + + + + + + + + + bool ok_; + %RETURN_TYPE retval_ = + %FUNCTION_NAME(%1, %2, %3, %4, %5, %6, %7, %8, %9, %10, &ok_); + if (!ok_) + %PYARG_0 = Py_None; + else + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](retval_); + + + + + + + + typedef std::list<int> Inner; + typedef std::list<Inner> Outer; + + int result = 0; + + Outer::const_iterator oiter, oend = %1.end(); + for (oiter = %1.begin(); oiter != oend; ++oiter) { + const Inner& inner = *oiter; + Inner::const_iterator iiter, iend = inner.end(); + for (iiter = inner.begin(); iiter != iend; ++iiter) + result += *iiter; + } + + %PYARG_0 = %CONVERTTOPYTHON[int](result); + + + + + + + typedef std::pair<int, int> Pair; + typedef std::list<Pair> List; + + int result = 0; + + List::const_iterator iter, end = %1.end(); + for (iter = %1.begin(); iter != end; ++iter) + result += iter->first * iter->second; + + %PYARG_0 = %CONVERTTOPYTHON[int](result); + + + + + + + + + + + + + int* array = NULL; + bool errorOccurred = false; + + if (PySequence_Check(%PYARG_1)) { + if((array = Shiboken::sequenceToIntArray(%PYARG_1, true)) == NULL && PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, "Should be a sequence of ints"); + errorOccurred = true; + } + } else { + PyErr_SetString(PyExc_TypeError, "Should be a sequence of ints"); + errorOccurred = true; + } + + if (!errorOccurred) { + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(array); + if (array) + delete[] array; + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + } + + + + + + + + int %out = PySequence_Size(%PYARG_1); + + + + + + int numItems = PySequence_Size(%PYARG_1); + Shiboken::AutoArrayPointer<int> %out(numItems); + for (int i = 0; i < numItems; ++i) { + if (%CHECKTYPE[int](PySequence_Fast_GET_ITEM(%PYARG_1, i))) + %out[i] = %CONVERTTOCPP[int](PySequence_Fast_GET_ITEM(%PYARG_1, i)); + else if (%ISCONVERTIBLE[int](PySequence_Fast_GET_ITEM(%PYARG_1, i))) + %out[i] = -1; + else + %out[i] = -2; + } + + + PyObject* %out = PyList_New(count); + for (int i = 0; i < count; ++i) + PyList_SET_ITEM(%out, i, %CONVERTTOPYTHON[int](%in[i])); + + + + + + + + + + + + + int numItems = PySequence_Size(%PYARG_1); + int *cppItems = new int[numItems]; + for (int i = 0; i < numItems; i++) + cppItems[i] = %CONVERTTOCPP[int](PySequence_GetItem(%PYARG_1, i)); + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(numItems, cppItems); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + delete[] cppItems; + + + + + + PyObject* InjectCode_tpstr(PyObject*) { return Shiboken::String::fromCString("Hi! I'm the inject code dummy class."); } + + + + %PYTHONTYPEOBJECT.tp_str = InjectCode_tpstr; + + + + + + %1 += 1; + + + PyObject* tmp = Shiboken::String::fromCString("end"); + Shiboken::String::concat(&%PYARG_0, tmp); + Py_DECREF(tmp); + + + + + + + PyObject* tmp = Shiboken::String::fromCString("end"); + Shiboken::String::concat(&%PYARG_0, tmp); + Py_DECREF(tmp); + + + + + + + + + + + + + int argc; + char** argv; + if (!Shiboken::listToArgcArgv(%PYARG_1, &argc, &argv)) { + PyErr_SetString(PyExc_TypeError, "error"); + return 0; + } + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(argc, argv); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + for (int i = 0; i < argc; ++i) + free(argv[i]); + delete[] argv; + + + + + + + + + + + + + int argc; + char** argv; + if (!Shiboken::listToArgcArgv(%PYARG_1, &argc, &argv)) { + PyErr_SetString(PyExc_TypeError, "error"); + return 0; + } + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(argc, argv); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + for (int i = 0; i < argc; ++i) + free(argv[i]); + delete[] argv; + + + + + + + + + return Shiboken::String::fromCString("PyObject"); + + + + + + return Shiboken::String::fromCString("PyObject"); + + + + + + + unsigned char* %out = 0; + + + + + + + + + + int x1 = (int) %CPPSELF.x(); + int x2 = ((int) (%CPPSELF.x() * 100)) - (x1 * 100); + int y1 = (int) %CPPSELF.y(); + int y2 = ((int) (%CPPSELF.y() * 100)) - (y1 * 100); + %PYARG_0 = Shiboken::String::fromFormat("Point(%d.%d, %d.%d)", x1, x2, y1, y2); + + + + + int x1 = (int) %CPPSELF.x(); + int x2 = ((int) (%CPPSELF.x() * 10)) - (x1 * 10); + int y1 = (int) %CPPSELF.y(); + int y2 = ((int) (%CPPSELF.y() * 10)) - (y1 * 10); + %PYARG_0 = Shiboken::String::fromFormat("<Point object at %p: (%d.%d, %d.%d)>", %CPPSELF, x1, x2, y1, y2); + + + + + + PyObject* type = PyObject_Type(%PYSELF); + PyObject* args = NULL; + + args = Py_BuildValue("(dd)", %CPPSELF.x(), %CPPSELF.y()); + + %PYARG_0 = Py_BuildValue("(OO)", type, args); + + + + + + + + + + + + Point _midpoint; + // The test consists in *NOT* using the ARGUMENT_NAMES type system variable. + %CPPSELF.%FUNCTION_NAME(%1, &_midpoint); + %PYARG_0 = %CONVERTTOPYTHON[Point](_midpoint); + + + + + + + + + + + + + + + + + + + + + int x1 = (int) %CPPSELF.x(); + int x2 = ((int) (%CPPSELF.x() * 100)) - (x1 * 100); + int y1 = (int) %CPPSELF.y(); + int y2 = ((int) (%CPPSELF.y() * 100)) - (y1 * 100); + %PYARG_0 = Shiboken::String::fromFormat("PointF(%d.%d, %d.%d)", x1, x2, y1, y2); + + + + + int x1 = (int) %CPPSELF.x(); + int x2 = ((int) (%CPPSELF.x() * 10)) - (x1 * 10); + int y1 = (int) %CPPSELF.y(); + int y2 = ((int) (%CPPSELF.y() * 10)) - (y1 * 10); + %PYARG_0 = Shiboken::String::fromFormat("<PointF object at %p: (%d.%d, %d.%d)>", %CPPSELF, x1, x2, y1, y2); + + + + + + PyObject *type = PyObject_Type(%PYSELF); + PyObject *args = NULL; + + args = Py_BuildValue("(dd)", %CPPSELF.x(), %CPPSELF.y()); + + %PYARG_0 = Py_BuildValue("(OO)", type, args); + + + + + + + + + + + + PointF _midpoint; + // The test consists in using the ARGUMENT_NAMES type system variable. + %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &_midpoint); + %PYARG_0 = %CONVERTTOPYTHON[PointF](_midpoint); + + + + + + + + + + + + + + + + + + + + + + + + + + + + if (!PyDateTimeAPI) + PyDateTime_IMPORT; + if (PyTime_Check(%1)) { + int pyH = PyDateTime_TIME_GET_HOUR(%1); + int pyM = PyDateTime_TIME_GET_MINUTE(%1); + int pyS = PyDateTime_TIME_GET_SECOND(%1); + if ((pyH == %CPPSELF.hour()) && + (pyM == %CPPSELF.minute()) && + (pyS == %CPPSELF.second())) + %PYARG_0 = Py_False; + else + %PYARG_0 = Py_True; + } + + + + + if (!PyDateTimeAPI) + PyDateTime_IMPORT; + if (PyTime_Check(%1)) { + int pyH = PyDateTime_TIME_GET_HOUR(%1); + int pyM = PyDateTime_TIME_GET_MINUTE(%1); + int pyS = PyDateTime_TIME_GET_SECOND(%1); + if ((pyH == %CPPSELF.hour()) && + (pyM == %CPPSELF.minute()) && + (pyS == %CPPSELF.second())) + %PYARG_0 = Py_True; + else + %PYARG_0 = Py_False; + } + + + + + + + + %0 = new %TYPE(); + + + Shiboken::AutoDecRef result(PyObject_CallMethod(%PYSELF, const_cast<char*>("setHeight"), const_cast<char*>("i"), 2)); + + + + + + + + + + + + + + + + + + + + + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%1, 2, %3); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + + { + Shiboken::AutoDecRef strList(PySequence_Fast(%PYARG_1, "The argument must be a sequence.")); + int lineCount = PySequence_Fast_GET_SIZE(strList.object()); + for (int line = 0; line < lineCount; ++line) { + if (!Shiboken::String::check(PySequence_Fast_GET_ITEM(strList.object(), line))) { + PyErr_SetString(PyExc_TypeError, "The argument must be a sequence of strings."); + break; + } + } + } + const char** %out = 0; + + + + + + + + void* %out = 0; + + + + + + + + + + + + + + + + + + + + + %BEGIN_ALLOW_THREADS + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(argOut, %2); + %END_ALLOW_THREADS + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + + + %PYARG_0 = Shiboken::String::fromCString(%CPPSELF.cstring()); + + + + + return %CPPSELF.size(); + + + + + if (_i < 0 || _i >= %CPPSELF.size()) { + PyErr_BadArgument(); + return 0; + } else { + char res[2]; + res[0] = %CPPSELF.get_char(_i); + res[1] = 0; + return Shiboken::String::fromCString(res); + } + + + + + PyObject* args = Py_BuildValue("(iO)", _i, _value); + PyObject* result = Sbk_StrFunc_set_char(self, args); + Py_DECREF(args); + int ok = result == Py_True; + if (result) { + Py_DECREF(result); + } + return !ok ? -1 : 0; + + + + + + + + + + + + + + + + + + + + + + + %out = %OUTTYPE(); + + + Py_ssize_t len; + const char* str = Shiboken::String::toCString(%in, &len); + %out = %OUTTYPE(str, len); + + + + + + + + + + + + PyObject* data = 0; + if (PyUnicode_CheckExact(%PYARG_1)) { + data = PyUnicode_AsASCIIString(%PYARG_1); + } else { + data = %PYARG_1; + Py_INCREF(data); + } + + %0 = new %TYPE(PyBytes_AsString(data), PyBytes_GET_SIZE(data)); + Py_DECREF(data); + + + + + + + #if PY_VERSION_HEX < 0x03000000 + Shiboken::SbkType<ByteArray>()->tp_as_buffer = &SbkByteArrayBufferProc; + Shiboken::SbkType<ByteArray>()->tp_flags |= Py_TPFLAGS_HAVE_GETCHARBUFFER; + #endif + + + + + %PYARG_0 = PyBytes_FromStringAndSize(%CPPSELF.%FUNCTION_NAME(), %CPPSELF.size()); + + + + + + + + + + + + + + + + + + + Shiboken::AutoDecRef data(PyUnicode_AsASCIIString(%PYARG_1)); + if (!data.isNull()) { + ByteArray ba(*%CPPSELF); + ba.append(PyBytes_AsString(data.object()), PyBytes_GET_SIZE(data.object())); + %PYARG_0 = %CONVERTTOPYTHON[ByteArray](ba); + } + + + + + Shiboken::AutoDecRef data(PyUnicode_AsASCIIString(%PYARG_1)); + if (!data.isNull()) { + ByteArray ba(PyBytes_AsString(data.object()), PyBytes_GET_SIZE(data.object())); + ba.append(*%CPPSELF); + %PYARG_0 = %CONVERTTOPYTHON[ByteArray](ba); + } + + + + + ByteArray ba(PyBytes_AsString(%PYARG_1), PyBytes_GET_SIZE(%PYARG_1)); + ba = ba + *%CPPSELF; + %PYARG_0 = %CONVERTTOPYTHON[ByteArray](ba); + + + + + ByteArray ba(PyBytes_AsString(%PYARG_1), PyBytes_GET_SIZE(%PYARG_1)); + ba.append(*%CPPSELF); + %PYARG_0 = %CONVERTTOPYTHON[ByteArray](ba); + + + + + ByteArray b(Py_TYPE(%PYSELF)->tp_name); + PyObject* aux = Shiboken::String::fromStringAndSize(%CPPSELF.data(), %CPPSELF.size()); + if (PyUnicode_CheckExact(aux)) { + PyObject* tmp = PyUnicode_AsASCIIString(aux); + Py_DECREF(aux); + aux = tmp; + } + b += "('"; + b += ByteArray(PyBytes_AS_STRING(aux), PyBytes_GET_SIZE(aux)); + b += "')"; + %PYARG_0 = Shiboken::String::fromStringAndSize(b.data(), b.size()); + + + + + + %PYARG_0 = Shiboken::String::fromStringAndSize(%CPPSELF.data(), %CPPSELF.size()); + + + + + + return %CPPSELF.size(); + + + + + if (_i < 0 || _i >= %CPPSELF.size()) { + PyErr_SetString(PyExc_IndexError, "index out of bounds"); + return 0; + } else { + char res[2]; + res[0] = %CPPSELF.at(_i); + res[1] = 0; + return PyBytes_FromStringAndSize(res, 1); + } + + + + + + + + + return %CPPSELF.size(); + + + + + if (_i < 0 || _i >= static_cast<Py_ssize_t>(%CPPSELF.size())) { + PyErr_BadArgument(); + return 0; + } else { + %TYPE::const_iterator it = %CPPSELF.begin(); + for (Py_ssize_t i = 1; i <= _i; i++) + ++it; + return %CONVERTTOPYTHON[Str](*it); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %PYARG_0 = Shiboken::String::fromCString(%1); + + + + + // This should test if code injections works inside rich comparison operators + Py_INCREF(Py_True); + %PYARG_0 = Py_True; + + + + + + + + + + + + + + + // Does nothing really, just test the code generation + // of constructors whose arguments where + long %out = PyInt_AS_LONG(%PYARG_1) + 1; + + + + + + + + %PYARG_0 = Shiboken::String::fromCString(""); + for (unsigned int i = 0; i < %2; ++i) + Shiboken::String::concat(&%PYARG_0, %PYARG_1); + + + + + + %RETURN_TYPE %0 = PyTuple_GET_SIZE(%PYARG_2); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + static bool PyDate_ImportAndCheck(PyObject* pyIn) { + if (!PyDateTimeAPI) + PyDateTime_IMPORT; + return PyDate_Check(pyIn); + } + + + + + int day = PyDateTime_GET_DAY(%in); + int month = PyDateTime_GET_MONTH(%in); + int year = PyDateTime_GET_YEAR(%in); + %out = %OUTTYPE(day, month, year); + + + + + + if (!PyDateTimeAPI) + PyDateTime_IMPORT; + %PYARG_0 = PyDate_FromDate(%CPPSELF.day(), %CPPSELF.month(), %CPPSELF.year()); + + + + + + + + + + + %RETURN_TYPE %0 = %CPPSELF.key() != %1; + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + %RETURN_TYPE %0 = *%CPPSELF & %1; + return %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + %RETURN_TYPE %0 = *%CPPSELF & %1; + return %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/shiboken2/tests/samplebinding/unsafe_parent_test.py b/sources/shiboken2/tests/samplebinding/unsafe_parent_test.py new file mode 100644 index 0000000..9e50dab --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/unsafe_parent_test.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for ...''' + +import sys +import unittest + +from sample import ObjectType + +class DerivedObjectType(ObjectType): + def isPython(self): + return True + + def createChild(self, parent): + return DerivedObjectType(parent) + +class ParentTest(unittest.TestCase): + + def testUunsafeParent(self): + o = DerivedObjectType() + o.callVirtualCreateChild() + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/useraddedctor_test.py b/sources/shiboken2/tests/samplebinding/useraddedctor_test.py new file mode 100644 index 0000000..1763525 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/useraddedctor_test.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for user added constructors''' + +import unittest +from sample import * + +class PointTest(unittest.TestCase): + def testUsingSelfOnCtor(self): + # This is a user added ctor and no errors should happen! + s = Size("oi") + self.assertEqual(s.height(), 2) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/virtualdtor_test.py b/sources/shiboken2/tests/samplebinding/virtualdtor_test.py new file mode 100644 index 0000000..388dc29 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/virtualdtor_test.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for virtual destructor.''' + +import sys +import unittest + +from sample import VirtualDtor + +class ExtendedVirtualDtor(VirtualDtor): + def __init__(self): + VirtualDtor.__init__(self) + +class VirtualDtorTest(unittest.TestCase): + '''Test case for virtual destructor.''' + + def setUp(self): + VirtualDtor.resetDtorCounter() + + def testVirtualDtor(self): + '''Original virtual destructor is being called.''' + dtor_called = VirtualDtor.dtorCalled() + for i in range(1, 10): + vd = VirtualDtor() + del vd + self.assertEqual(VirtualDtor.dtorCalled(), dtor_called + i) + + def testVirtualDtorOnCppCreatedObject(self): + '''Original virtual destructor is being called for a C++ created object.''' + dtor_called = VirtualDtor.dtorCalled() + for i in range(1, 10): + vd = VirtualDtor.create() + del vd + self.assertEqual(VirtualDtor.dtorCalled(), dtor_called + i) + + def testDtorOnDerivedClass(self): + '''Original virtual destructor is being called for a derived class.''' + dtor_called = ExtendedVirtualDtor.dtorCalled() + for i in range(1, 10): + evd = ExtendedVirtualDtor() + del evd + self.assertEqual(ExtendedVirtualDtor.dtorCalled(), dtor_called + i) + + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/virtualmethods_test.py b/sources/shiboken2/tests/samplebinding/virtualmethods_test.py new file mode 100644 index 0000000..a52ce6b --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/virtualmethods_test.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test cases for virtual methods.''' + +import sys +import unittest + +from sample import * + +import warnings + +class ExtendedVirtualMethods(VirtualMethods): + def __init__(self): + VirtualMethods.__init__(self) + self.virtual_method0_called = False + + def virtualMethod0(self, pt, val, cpx, b): + self.virtual_method0_called = True + return VirtualMethods.virtualMethod0(self, pt, val, cpx, b) * -1.0 + + def strListToStdList(self, arg): + warnings.simplefilter('error') + # returning wrong type for test purposes. + return True + + def recursionOnModifiedVirtual(self, arg): + # check if recursion is caused by injected code that calls C++. + return VirtualMethods.recursionOnModifiedVirtual(self, arg) + 10 + +class ExtendedVirtualDaughter(VirtualDaughter): + def __init__(self, name): + VirtualDaughter.__init__(self, name) + self.grand_daughter_name_called = False + + def name(self): + self.grand_daughter_name_called = True + return VirtualDaughter.name(self).prepend('Extended') + +class ExtendedExtendedVirtualDaughter(ExtendedVirtualDaughter): + def __init__(self, name): + ExtendedVirtualDaughter.__init__(self, name) + self.grand_grand_daughter_name_called = False + + def name(self): + self.grand_grand_daughter_name_called = True + return ExtendedVirtualDaughter.name(self).prepend('Extended') + +class VirtualMethodsTest(unittest.TestCase): + '''Test case for virtual methods''' + + def setUp(self): + self.prefix_from_codeinjection = Str('Pimped') + + def tearDown(self): + del self.prefix_from_codeinjection + + def testReimplementedVirtualMethod0(self): + '''Test Python override of a virtual method with various different parameters is correctly called from C++.''' + vm = VirtualMethods() + evm = ExtendedVirtualMethods() + pt = Point(1.1, 2.2) + val = 4 + cpx = complex(3.3, 4.4) + b = True + result0 = vm.callVirtualMethod0(pt, val, cpx, b) + result1 = evm.callVirtualMethod0(pt, val, cpx, b) + self.assertEqual(result0 * -1.0, result1) + + def testRecursionOnModifiedVirtual(self): + evm = ExtendedVirtualMethods() + self.assertEqual(evm.recursionOnModifiedVirtual(''), 10) + self.assertEqual(evm.callRecursionOnModifiedVirtual(''), 10) + + def testReimplementedVirtualMethodInheritedFromGrandParent(self): + '''Test Python override of a virtual method inherited from a grand parent.''' + original_name = 'Foo' + evd = ExtendedVirtualDaughter(original_name) + + self.assertEqual(VirtualDaughter.name(evd), original_name) + self.assertEqual(VirtualMethods.name(evd), original_name) + self.assertFalse(evd.grand_daughter_name_called) + + name = evd.callName() + self.assertTrue(evd.grand_daughter_name_called) + self.assertEqual(evd.name().prepend(self.prefix_from_codeinjection), name) + + def testReimplementedVirtualMethodInheritedFromGrandGrandParent(self): + '''Test Python override of a virtual method inherited from a grand grand parent.''' + original_name = 'Foo' + eevd = ExtendedExtendedVirtualDaughter(original_name) + + self.assertEqual(VirtualDaughter.name(eevd), original_name) + self.assertEqual(VirtualMethods.name(eevd), original_name) + self.assertFalse(eevd.grand_daughter_name_called) + self.assertFalse(eevd.grand_grand_daughter_name_called) + + name = eevd.callName() + self.assertTrue(eevd.grand_daughter_name_called) + self.assertTrue(eevd.grand_grand_daughter_name_called) + self.assertEqual(eevd.name().prepend(self.prefix_from_codeinjection), name) + +class PrettyErrorMessageTest(unittest.TestCase): + def testIt(self): + obj = ExtendedVirtualMethods() + self.assertRaises(RuntimeWarning, obj.callStrListToStdList, StrList()) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/visibilitychange_test.py b/sources/shiboken2/tests/samplebinding/visibilitychange_test.py new file mode 100644 index 0000000..a0ead1f --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/visibilitychange_test.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest + +from sample import * + +class VisibilityChangeTest(unittest.TestCase): + + def testVisibilityChange(self): + b1 = Base1() + b1.publicMethod() # ok... + d1 = MDerived1() + self.assertRaises(TypeError, d1.publicMethod); + +if __name__ == '__main__': + unittest.main() + + diff --git a/sources/shiboken2/tests/samplebinding/voidholder_test.py b/sources/shiboken2/tests/samplebinding/voidholder_test.py new file mode 100644 index 0000000..361a3bc --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/voidholder_test.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test case for a class that holds a void pointer.''' + +import unittest + +from sample import VoidHolder, Point +import shiboken2 as shiboken + +class VoidHolderTest(unittest.TestCase): + '''Test case for void pointer manipulation.''' + + def testGetVoidPointerFromCppAndPutsOnVoidHolder(self): + '''Passes a void pointer created in C++ to be kept by VoidHolder.''' + voidptr = VoidHolder.gimmeMeSomeVoidPointer() + voidholder = VoidHolder(voidptr) + self.assertEqual(voidptr, voidholder.voidPointer()) + + def testPassVoidPointerAsArgument(self): + '''Passes a void pointer created in C++ as an argument to a function.''' + voidptr = VoidHolder.gimmeMeSomeVoidPointer() + voidHolder = VoidHolder() + returnValue = voidHolder.takeVoidPointer(voidptr) + self.assertEqual(returnValue, voidptr) + + def testPutRandomObjectInsideVoidHolder(self): + '''Passes a C++ pointer for an object created in Python to be kept by VoidHolder.''' + obj = Point(1, 2) + voidholder = VoidHolder(obj) + self.assertEqual(shiboken.getCppPointer(obj)[0], int(voidholder.voidPointer())) + + def testGetNoneObjectFromVoidHolder(self): + '''A VoidHolder created without parameters returns a NULL pointer + that should be converted to a Python None.''' + voidholder = VoidHolder() + self.assertEqual(voidholder.voidPointer(), None) + +if __name__ == '__main__': + unittest.main() + diff --git a/sources/shiboken2/tests/samplebinding/weakref_test.py b/sources/shiboken2/tests/samplebinding/weakref_test.py new file mode 100644 index 0000000..5379169 --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/weakref_test.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +'''Test weakref support''' + +import weakref +import unittest + +from sample import ObjectType, PrivateDtor + + +class WeakrefBasicTest(unittest.TestCase): + '''Simple test case of using a weakref''' + + def setUp(self): + self.called = False + + def cb(self, *args): + self.called = True + + def testBasic(self): + '''ObjectType weakref''' + obj = ObjectType() + ref = weakref.ref(obj, self.cb) + del obj + self.assertTrue(self.called) + + def testPrivateDtor(self): + '''PrivateDtor weakref''' + obj = PrivateDtor.instance() + ref = weakref.ref(obj, self.cb) + del obj + self.assertTrue(self.called) + + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/samplebinding/writableclassdict_test.py b/sources/shiboken2/tests/samplebinding/writableclassdict_test.py new file mode 100644 index 0000000..003e35e --- /dev/null +++ b/sources/shiboken2/tests/samplebinding/writableclassdict_test.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from sample import Point + +class ExtPoint(Point): pass + +class TestWritableClassDict(unittest.TestCase): + def testSetattrOnClass(self): + setattr(Point, 'foo', 123) + self.assertEqual(Point.foo, 123) + pt = Point() + self.assertEqual(pt.foo, 123) + + def testSetattrOnInheritingClass(self): + setattr(Point, 'bar', 321) + self.assertEqual(Point.bar, 321) + self.assertEqual(ExtPoint.bar, 321) + pt = ExtPoint() + self.assertEqual(pt.bar, 321) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/shibokenmodule/module_test.py b/sources/shiboken2/tests/shibokenmodule/module_test.py new file mode 100644 index 0000000..54a1755 --- /dev/null +++ b/sources/shiboken2/tests/shibokenmodule/module_test.py @@ -0,0 +1,116 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import shiboken2 as shiboken +import unittest +from sample import * + +class MultipleInherited (ObjectType, Point): + def __init__(self): + ObjectType.__init__(self) + Point.__init__(self) + +class TestShiboken(unittest.TestCase): + def testIsValid(self): + self.assertTrue(shiboken.isValid(object())) + self.assertTrue(shiboken.isValid(None)) + + bb = BlackBox() + item = ObjectType() + ticket = bb.keepObjectType(item) + bb.disposeObjectType(ticket) + self.assertFalse(shiboken.isValid(item)) + + def testWrapInstance(self): + addr = ObjectType.createObjectType() + obj = shiboken.wrapInstance(addr, ObjectType) + self.assertFalse(shiboken.createdByPython(obj)) + obj.setObjectName("obj") + self.assertEqual(obj.objectName(), "obj") + self.assertEqual(addr, obj.identifier()) + self.assertFalse(shiboken.createdByPython(obj)) + + # avoid mem leak =] + bb = BlackBox() + self.assertTrue(shiboken.createdByPython(bb)) + bb.disposeObjectType(bb.keepObjectType(obj)) + + def testIsOwnedByPython(self): + obj = ObjectType() + self.assertTrue(shiboken.ownedByPython(obj)) + p = ObjectType() + obj.setParent(p) + self.assertFalse(shiboken.ownedByPython(obj)) + + def testDump(self): + """Just check if dump doesn't crash on certain use cases""" + p = ObjectType() + obj = ObjectType(p) + obj2 = ObjectType(obj) + obj3 = ObjectType(obj) + self.assertEqual(shiboken.dump(None), "Ordinary Python type.") + shiboken.dump(obj) + + model = ObjectModel(p) + v = ObjectView(model, p) + shiboken.dump(v) + + m = MultipleInherited() + shiboken.dump(m) + self.assertEqual(len(shiboken.getCppPointer(m)), 2) + + # Don't crash even after deleting an object + shiboken.invalidate(obj) + shiboken.dump(obj) # deleted + shiboken.dump(p) # child deleted + shiboken.dump(obj2) # parent deleted + + def testDelete(self): + obj = ObjectType() + child = ObjectType(obj) + self.assertTrue(shiboken.isValid(obj)) + self.assertTrue(shiboken.isValid(child)) + # Note: this test doesn't assure that the object dtor was really called + shiboken.delete(obj) + self.assertFalse(shiboken.isValid(obj)) + self.assertFalse(shiboken.isValid(child)) + + def testVersionAttr(self): + self.assertEqual(type(shiboken.__version__), str) + self.assertTrue(len(shiboken.__version__) >= 5) + self.assertEqual(type(shiboken.__version_info__), tuple) + self.assertEqual(len(shiboken.__version_info__), 5) + + def testAllWrappers(self): + obj = ObjectType() + self.assertTrue(obj in shiboken.getAllValidWrappers()) + shiboken.delete(obj) + self.assertFalse(obj in shiboken.getAllValidWrappers()) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/smartbinding/CMakeLists.txt b/sources/shiboken2/tests/smartbinding/CMakeLists.txt new file mode 100644 index 0000000..faaa797 --- /dev/null +++ b/sources/shiboken2/tests/smartbinding/CMakeLists.txt @@ -0,0 +1,42 @@ +project(smart) + +set(smart_TYPESYSTEM +${CMAKE_CURRENT_SOURCE_DIR}/typesystem_smart.xml +) + +set(smart_SRC +${CMAKE_CURRENT_BINARY_DIR}/smart/smart_module_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/smart/obj_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/smart/integer_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/smart/sharedptr_obj_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/smart/sharedptr_integer_wrapper.cpp +${CMAKE_CURRENT_BINARY_DIR}/smart/registry_wrapper.cpp +) + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/smart-binding.txt.in" + "${CMAKE_CURRENT_BINARY_DIR}/smart-binding.txt" @ONLY) + +add_custom_command(OUTPUT ${smart_SRC} +COMMAND shiboken2 --project-file=${CMAKE_CURRENT_BINARY_DIR}/smart-binding.txt ${GENERATOR_EXTRA_FLAGS} +DEPENDS ${smart_TYPESYSTEM} ${CMAKE_CURRENT_SOURCE_DIR}/global.h shiboken2 +WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +COMMENT "Running generator for 'smart' test binding..." +) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR} + ${SBK_PYTHON_INCLUDE_DIR} + ${libsmart_SOURCE_DIR} + ${libshiboken_SOURCE_DIR} + ${libshiboken_BINARY_DIR}) +add_library(smart MODULE ${smart_SRC}) +set_property(TARGET smart PROPERTY PREFIX "") +set_property(TARGET smart PROPERTY OUTPUT_NAME "smart${PYTHON_EXTENSION_SUFFIX}") + +if(WIN32) + set_property(TARGET smart PROPERTY SUFFIX ".pyd") +endif() +target_link_libraries(smart + libsmart + ${SBK_PYTHON_LIBRARIES} + libshiboken) diff --git a/sources/shiboken2/tests/smartbinding/global.h b/sources/shiboken2/tests/smartbinding/global.h new file mode 100644 index 0000000..959859b --- /dev/null +++ b/sources/shiboken2/tests/smartbinding/global.h @@ -0,0 +1,29 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "smart.h" diff --git a/sources/shiboken2/tests/smartbinding/smart-binding.txt.in b/sources/shiboken2/tests/smartbinding/smart-binding.txt.in new file mode 100644 index 0000000..699f0bf --- /dev/null +++ b/sources/shiboken2/tests/smartbinding/smart-binding.txt.in @@ -0,0 +1,15 @@ +[generator-project] + +generator-set = shiboken + +header-file = @CMAKE_CURRENT_SOURCE_DIR@/global.h +typesystem-file = @smart_TYPESYSTEM@ + +output-directory = @CMAKE_CURRENT_BINARY_DIR@ + +include-path = @libsmart_SOURCE_DIR@ + +typesystem-path = @CMAKE_CURRENT_SOURCE_DIR@ + +enable-parent-ctor-heuristic +use-isnull-as-nb_nonzero diff --git a/sources/shiboken2/tests/smartbinding/smart_pointer_test.py b/sources/shiboken2/tests/smartbinding/smart_pointer_test.py new file mode 100644 index 0000000..730b4a0 --- /dev/null +++ b/sources/shiboken2/tests/smartbinding/smart_pointer_test.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the test suite of Qt for Python. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import unittest +from copy import copy +from smart import Obj, Registry, Integer + +def objCount(): + return Registry.getInstance().countObjects() + +def integerCount(): + return Registry.getInstance().countIntegers() + +class SmartPointerTests(unittest.TestCase): + def testObjSmartPointer(self): + # Uncomment to see more debug info about creation of objects and ref counts. + # Registry.getInstance().setShouldPrint(True) + + # Create Obj. + o = Obj() + self.assertEqual(objCount(), 1) + + # Create a shared pointer to an Obj together with an Obj. + ptrToObj = o.giveSharedPtrToObj() + self.assertEqual(objCount(), 2) + + # Delete the old Obj. + o = None + self.assertEqual(objCount(), 1) + + # Get a wrapper to the Obj inside of the shared pointer, object count should not change. + obj = ptrToObj.data() + self.assertEqual(objCount(), 1) + obj.m_integer = 50 + self.assertEqual(obj.m_integer, 50) + + # Set and get a member value via shared pointer (like operator->). + ptrToObj.m_integer = 100 + self.assertEqual(ptrToObj.m_integer, 100) + + # Get inner PyObject via shared pointer (like operator->) and set value in it. + ptrToObj.m_internalInteger.m_int = 200 + self.assertEqual(ptrToObj.m_internalInteger.m_int, 200) + + # Pass smart pointer as argument to a method, return value is the value of m_integer of + # passed Obj inside the smart pointer. + result = ptrToObj.takeSharedPtrToObj(ptrToObj) + self.assertEqual(result, 100) + + # Pass an Integer as an argument that returns itself. + result = ptrToObj.takeInteger(ptrToObj.m_internalInteger) + self.assertEqual(integerCount(), 2) + result = None + self.assertEqual(integerCount(), 1) + + # Make a copy of the shared pointer, object count should not change. + ptrToObj2 = copy(ptrToObj) + self.assertEqual(objCount(), 1) + + # Delete the first shared pointer, object count should not change because the second + # one still has a reference. + del ptrToObj + self.assertEqual(objCount(), 1) + + # Delete the second smart pointer, object should be deleted. + del ptrToObj2 + self.assertEqual(objCount(), 0) + self.assertEqual(integerCount(), 0) + + def testIntegerSmartPointer(self): + # Uncomment to see more debug info about creation of objects and ref counts. + # Registry.getInstance().setShouldPrint(True) + + # Create Obj. + o = Obj() + self.assertEqual(objCount(), 1) + + # Create a shared pointer to an Integer together with an Integer. + ptrToInteger = o.giveSharedPtrToInteger() + self.assertEqual(objCount(), 1) + self.assertEqual(integerCount(), 2) + + # Get a wrapper to the Integer inside of the shared pointer, integer count should not + # change. + integer = ptrToInteger.data() + self.assertEqual(integerCount(), 2) + integer.m_int = 50 + self.assertEqual(integer.m_int, 50) + + # Set and get a member value via shared pointer (like operator->). + ptrToInteger.m_int = 100 + self.assertEqual(ptrToInteger.m_int, 100) + + # Pass smart pointer as argument to a method, return value is the value of m_int of + # passed Integer inside the smart pointer. + result = o.takeSharedPtrToInteger(ptrToInteger) + self.assertEqual(result, 100) + + # Make a copy of the shared pointer, integer count should not change. + ptrToInteger2 = copy(ptrToInteger) + self.assertEqual(integerCount(), 2) + + # Delete the first shared pointer, integer count should not change because the second + # one still has a reference. + del ptrToInteger + self.assertEqual(integerCount(), 2) + + # Delete the second smart pointer, integer should be deleted. + del ptrToInteger2 + self.assertEqual(objCount(), 1) + self.assertEqual(integerCount(), 1) + + # Delete the original object which was used to create the integer. + del o + self.assertEqual(objCount(), 0) + self.assertEqual(integerCount(), 0) + +if __name__ == '__main__': + unittest.main() diff --git a/sources/shiboken2/tests/smartbinding/typesystem_smart.xml b/sources/shiboken2/tests/smartbinding/typesystem_smart.xml new file mode 100644 index 0000000..a265473 --- /dev/null +++ b/sources/shiboken2/tests/smartbinding/typesystem_smart.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + diff --git a/sources/shiboken2/tests/sphinxtabletest.cpp b/sources/shiboken2/tests/sphinxtabletest.cpp new file mode 100644 index 0000000..5ad56fb --- /dev/null +++ b/sources/shiboken2/tests/sphinxtabletest.cpp @@ -0,0 +1,332 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "sphinxtabletest.h" +#include "qtdocgenerator.h" +#include +#include + +QString SphinxTableTest::transformXml(const char* xml) +{ + return QtXmlToSphinx(m_generator, xml).result(); +} + +void SphinxTableTest::setUp() +{ + m_generator = new QtDocGenerator; +} + +void SphinxTableTest::tearDown() +{ + delete m_generator; +} + +void SphinxTableTest::testEmptyString() +{ + const char* xml = ""; + QCOMPARE(transformXml(xml), QString()); +} + +void SphinxTableTest::testSimpleTable() +{ + const char* xml = "\ +\ +
\ + \ + Header 1\ + \ + \ + Header 2\ + \ +
\ + \ + \ + 1 1\ + \ + \ + 1 2\ + \ + \ + \ + \ + 2 1\ + \ + \ + 2 2\ + \ + \ +
"; + QCOMPARE(transformXml(xml), QString("\ + +--------+--------+\n\ + |Header 1|Header 2|\n\ + +--------+--------+\n\ + |1 1 |1 2 |\n\ + +--------+--------+\n\ + |2 1 |2 2 |\n\ + +--------+--------+\n\ +\n")); +} + +void SphinxTableTest::testColSpan() +{ + const char* xml = "\ +\ +
\ + \ + Header 1\ + \ + \ + Header 2\ + \ +
\ + \ + \ + I'm a big text!\ + \ + \ + \ + \ + 2 1\ + \ + \ + 2 2\ + \ + \ +
"; + QCOMPARE(transformXml(xml), QString("\ + +---------------+--------+\n\ + |Header 1 |Header 2|\n\ + +---------------+--------+\n\ + |I'm a big text! |\n\ + +---------------+--------+\n\ + |2 1 |2 2 |\n\ + +---------------+--------+\n\ +\n")); +} + + +void SphinxTableTest::testRowSpan() +{ + const char* xml = "\ +\ +
\ + \ + Header 1\ + \ + \ + Header 2\ + \ +
\ + \ + \ + 1.1\ + \ + \ + 1.2\ + \ + \ + \ + \ + 2 2\ + \ + \ +
"; + QCOMPARE(transformXml(xml), QString("\ + +--------+--------+\n\ + |Header 1|Header 2|\n\ + +--------+--------+\n\ + |1.1 |1.2 |\n\ + + +--------+\n\ + | |2 2 |\n\ + +--------+--------+\n\ +\n")); +} + + +void SphinxTableTest::testComplexTable() +{ + const char* xml = "\ +\ +
\ + \ + Header 1\ + \ + \ + Header 2\ + \ + \ + Header 3\ + \ +
\ + \ + \ + 1.1\ + \ + \ + 1.2\ + \ + \ + \ + \ + 2 2\ + \ + \ + 2 3\ + \ + \ +
"; + QCOMPARE(transformXml(xml), QString("\ + +--------+--------+--------+\n\ + |Header 1|Header 2|Header 3|\n\ + +--------+--------+--------+\n\ + |1.1 |1.2 |\n\ + + +--------+--------+\n\ + | |2 2 |2 3 |\n\ + +--------+--------+--------+\n\ +\n")); +} + +void SphinxTableTest::testRowSpan2() +{ + const char* xml = "\ +\ +
\ + h1\ + h2\ + h3\ + h4\ +
\ + \ + A\ + B\ + C\ + D\ + \ + \ + E\ + F\ + \ + \ + E\ + F\ + \ + \ + E\ + F\ + \ + \ + E\ + F\ + \ + \ + E\ + F\ + \ +
"; + QCOMPARE(transformXml(xml), QString("\ + +--+--+--+--+\n\ + |h1|h2|h3|h4|\n\ + +--+--+--+--+\n\ + |A |B |C |D |\n\ + + + +--+--+\n\ + | | |E |F |\n\ + + + +--+--+\n\ + | | |E |F |\n\ + + + +--+--+\n\ + | | |E |F |\n\ + + + +--+--+\n\ + | | |E |F |\n\ + + + +--+--+\n\ + | | |E |F |\n\ + +--+--+--+--+\n\ +\n")); +} + +void SphinxTableTest::testBrokenTable() +{ + const char* xml = "\ +\ +
\ + \ + Header 1\ + \ + \ + Header 2\ + \ +
\ + \ + \ + 1.1\ + \ + \ + 1.2\ + \ + \ + \ + \ + 2 2\ + \ + \ + 2 3\ + \ + \ + 2 4\ + \ + \ + 2 5\ + \ + \ + \ + \ + 3 1\ + \ + \ + 3 2\ + \ + \ + 3 3\ + \ + \ +
"; + QCOMPARE(transformXml(xml), QString("\ + +--------+------------+\n\ + |Header 1|Header 2 |\n\ + +--------+------------+\n\ + |1.1 |1.2 |\n\ + +--------+------------+\n\ + |2 2 2 3 2 4 2 5|\n\ + +--------+------------+\n\ + |3 1 |3 2 3 3 |\n\ + +--------+------------+\n\ +\n")); +} + + +QTEST_APPLESS_MAIN( SphinxTableTest ) + +#include "sphinxtabletest.moc" diff --git a/sources/shiboken2/tests/sphinxtabletest.h b/sources/shiboken2/tests/sphinxtabletest.h new file mode 100644 index 0000000..bba0202 --- /dev/null +++ b/sources/shiboken2/tests/sphinxtabletest.h @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SPHINXTABLETEST_H +#define SPHINXTABLETEST_H + +#include + +class QtDocGenerator; +class SphinxTableTest : public QObject { + Q_OBJECT + +private slots: + void setUp(); + void tearDown(); + void testEmptyString(); + void testSimpleTable(); + void testRowSpan(); + void testColSpan(); + void testComplexTable(); + void testRowSpan2(); + void testBrokenTable(); +private: + QtDocGenerator* m_generator; + + QString transformXml(const char* xml); +}; + +#endif diff --git a/sources/shiboken2/tests/test_generator/CMakeLists.txt b/sources/shiboken2/tests/test_generator/CMakeLists.txt new file mode 100644 index 0000000..5f50998 --- /dev/null +++ b/sources/shiboken2/tests/test_generator/CMakeLists.txt @@ -0,0 +1,68 @@ +project(test_generator) + +set(dummy_generator_SRC dummygenerator.cpp) +add_library(dummy_generator SHARED ${dummy_generator_SRC}) +target_link_libraries(dummy_generator ${APIEXTRACTOR_LIBRARY} ${QT_QTCORE_LIBRARY} genrunner) +set_property(TARGET dummy_generator PROPERTY PREFIX "") + +add_executable(dummygenerator main.cpp) +set(DUMMYGENERATOR_EXECUTABLE dummygenerator${generator_SUFFIX}) +set_target_properties(dummygenerator PROPERTIES OUTPUT_NAME ${DUMMYGENERATOR_EXECUTABLE}) +target_link_libraries(dummygenerator ${Qt5Core_LIBRARIES}) + +configure_file(dummygentestconfig.h.in "${CMAKE_CURRENT_BINARY_DIR}/dummygentestconfig.h" @ONLY) + +get_filename_component(APIEXTRACTOR_LIBRARY_DIRS ${APIEXTRACTOR_LIBRARY} PATH) +if(WIN32) + set(PATH_SEP ";") + find_program(APIEXTRACTOR_BINARY apiextractor.dll HINTS ${APIEXTRACTOR_LIBRARY_DIRS}) + get_filename_component(APIEXTRACTOR_BINARY_DIR ${APIEXTRACTOR_BINARY} PATH) + set(APIEXTRACTOR_LIBRARY_DIRS "${APIEXTRACTOR_LIBRARY_DIRS}${PATH_SEP}${APIEXTRACTOR_BINARY_DIR}") +else() + set(PATH_SEP ":") +endif() + +set(ENV_PATH "${generatorrunner_BINARY_DIR}${PATH_SEP}${CMAKE_CURRENT_BINARY_DIR}${PATH_SEP}$ENV{PATH}${PATH_SEP}${APIEXTRACTOR_LIBRARY_DIRS}") +set(ENV_QT_PLUGIN_PATH "${CMAKE_CURRENT_BINARY_DIR}${PATH_SEP}$ENV{QT_PLUGIN_PATH}") +if(WIN32) + string(REPLACE "\\;" ";" ENV_PATH "${ENV_PATH}") + string(REPLACE ";" "\\;" ENV_PATH "${ENV_PATH}") + string(REPLACE "\\;" ";" ENV_QT_PLUGIN_PATH "${ENV_QT_PLUGIN_PATH}") + string(REPLACE ";" "\\;" ENV_QT_PLUGIN_PATH "${ENV_QT_PLUGIN_PATH}") +endif() + +macro(m_add_test testname) + if(CMAKE_VERSION VERSION_LESS 2.8) + add_test(${testname} ${CMAKE_COMMAND} -DTEST=${testname} + -DWORKDIR=${CMAKE_CURRENT_BINARY_DIR} + -DENV_PATH=${ENV_PATH} -DENV_QT_PLUGIN_PATH=${ENV_QT_PLUGIN_PATH} + -P ${CMAKE_CURRENT_SOURCE_DIR}/run_test.cmake) + else() + add_test(${testname} ${testname}) + set_property(TEST ${testname} PROPERTY ENVIRONMENT "PATH=${ENV_PATH}" "QT_PLUGIN_PATH=${ENV_QT_PLUGIN_PATH}") + endif() +endmacro() + +macro(declare_test testname) + qt4_automoc("${testname}.cpp") + add_executable(${testname} "${testname}.cpp") + include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) + target_link_libraries(${testname} + ${QT_QTTEST_LIBRARY} + ${QT_QTCORE_LIBRARY} + ${Qt5Test_LIBRARIES} + ${Qt5Core_LIBRARIES} + ) + m_add_test(${testname}) +endmacro(declare_test testname) + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/test_global.h" + "${CMAKE_CURRENT_BINARY_DIR}/test_global.h" COPYONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/test_typesystem.xml" + "${CMAKE_CURRENT_BINARY_DIR}/test_typesystem.xml" COPYONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/dummygentest-project.txt.in" + "${CMAKE_CURRENT_BINARY_DIR}/dummygentest-project.txt" @ONLY) +declare_test(dummygentest) + +add_dependencies(dummygenerator generatorrunner) + diff --git a/sources/shiboken2/tests/test_generator/dummygenerator.cpp b/sources/shiboken2/tests/test_generator/dummygenerator.cpp new file mode 100644 index 0000000..ef82c11 --- /dev/null +++ b/sources/shiboken2/tests/test_generator/dummygenerator.cpp @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "dummygenerator.h" + +EXPORT_GENERATOR_PLUGIN(new DummyGenerator) + +using namespace std; + +QString +DummyGenerator::fileNameForClass(const AbstractMetaClass* metaClass) const +{ + return QString("%1_generated.txt").arg(metaClass->name().toLower()); +} + +void +DummyGenerator::generateClass(QTextStream& s, const AbstractMetaClass* metaClass) +{ + s << "// Generated code for class: " << qPrintable(metaClass->name()) << endl; +} + +bool +DummyGenerator::doSetup(const QMap& args) +{ + if (args.contains("dump-arguments") && !args["dump-arguments"].isEmpty()) { + QFile logFile(args["dump-arguments"]); + logFile.open(QIODevice::WriteOnly | QIODevice::Text); + QTextStream out(&logFile); + for (QMap::const_iterator it = args.cbegin(), end = args.cend(); it != end; ++it) { + const QString& key = it.key(); + if (key == "arg-1") + out << "header-file"; + else if (key == "arg-2") + out << "typesystem-file"; + else + out << key; + if (!args[key].isEmpty()) + out << " = " << args[key]; + out << endl; + } + } + return true; +} + diff --git a/sources/shiboken2/tests/test_generator/dummygenerator.h b/sources/shiboken2/tests/test_generator/dummygenerator.h new file mode 100644 index 0000000..e768e76 --- /dev/null +++ b/sources/shiboken2/tests/test_generator/dummygenerator.h @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef DUMMYGENERATOR_H +#define DUMMYGENERATOR_H + +#include "generator.h" + +class GENRUNNER_API DummyGenerator : public Generator +{ +public: + DummyGenerator() {} + ~DummyGenerator() {} + bool doSetup(const QMap& args); + const char* name() const { return "DummyGenerator"; } + +protected: + void writeFunctionArguments(QTextStream&, const AbstractMetaFunction*, Options) const {} + void writeArgumentNames(QTextStream&, const AbstractMetaFunction*, Options) const {} + QString fileNameForClass(const AbstractMetaClass* metaClass) const; + void generateClass(QTextStream& s, const AbstractMetaClass* metaClass); + void finishGeneration() {} +}; + +#endif // DUMMYGENERATOR_H diff --git a/sources/shiboken2/tests/test_generator/dummygentest-project.txt.in b/sources/shiboken2/tests/test_generator/dummygentest-project.txt.in new file mode 100644 index 0000000..0a076d8 --- /dev/null +++ b/sources/shiboken2/tests/test_generator/dummygentest-project.txt.in @@ -0,0 +1,20 @@ +[generator-project] + +generator-set = dummy +header-file = @CMAKE_CURRENT_BINARY_DIR@/test_global.h +typesystem-file = @CMAKE_CURRENT_BINARY_DIR@/test_typesystem.xml +output-directory = /tmp/output + +dump-arguments = @CMAKE_CURRENT_BINARY_DIR@/dummygen-args.log + +include-path = /include/path/location1 +include-path = /include/path/location2 + +typesystem-path = /typesystem/path/location1 +typesystem-path = /typesystem/path/location2 + +api-version = 1.2.3 +debug = sparse + +no-suppress-warnings + diff --git a/sources/shiboken2/tests/test_generator/dummygentest.cpp b/sources/shiboken2/tests/test_generator/dummygentest.cpp new file mode 100644 index 0000000..c09cdfb --- /dev/null +++ b/sources/shiboken2/tests/test_generator/dummygentest.cpp @@ -0,0 +1,138 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "dummygentest.h" +#include "dummygenerator.h" +#include "dummygentestconfig.h" +#include +#include +#include + +#define GENERATED_CONTENTS "// Generated code for class: Dummy" + +void DummyGenTest::initTestCase() +{ + int argc = 0; + char* argv[] = {NULL}; + QCoreApplication app(argc, argv); + workDir = QDir::currentPath(); + + headerFilePath = workDir + "/test_global.h"; + typesystemFilePath = workDir + "/test_typesystem.xml"; + projectFilePath = workDir + "/dummygentest-project.txt"; + generatedFilePath = QString("%1/dummy/dummy_generated.txt").arg(QDir::tempPath()); +} + +void DummyGenTest::testCallGenRunnerWithFullPathToDummyGenModule() +{ + QStringList args; + args.append("--generator-set=" DUMMYGENERATOR_BINARY_DIR "/dummy_generator" MODULE_EXTENSION); + args.append(QString("--output-directory=%1").arg(QDir::tempPath())); + args.append(headerFilePath); + args.append(typesystemFilePath); + int result = QProcess::execute("generatorrunner", args); + QCOMPARE(result, 0); + + QFile generatedFile(generatedFilePath); + generatedFile.open(QIODevice::ReadOnly); + QCOMPARE(generatedFile.readAll().trimmed(), QByteArray(GENERATED_CONTENTS).trimmed()); + generatedFile.close(); + + QVERIFY(generatedFile.remove()); +} + +void DummyGenTest::testCallGenRunnerWithNameOfDummyGenModule() +{ + QStringList args; + args.append("--generator-set=dummy"); + args.append(QString("--output-directory=%1").arg(QDir::tempPath())); + args.append(headerFilePath); + args.append(typesystemFilePath); + int result = QProcess::execute("generatorrunner", args); + QCOMPARE(result, 0); + + QFile generatedFile(generatedFilePath); + generatedFile.open(QIODevice::ReadOnly); + QCOMPARE(generatedFile.readAll().trimmed(), QByteArray(GENERATED_CONTENTS).trimmed()); + generatedFile.close(); + + QVERIFY(generatedFile.remove()); +} + +void DummyGenTest::testCallDummyGeneratorExecutable() +{ + QStringList args; + args.append(QString("--output-directory=%1").arg(QDir::tempPath())); + args.append(headerFilePath); + args.append(typesystemFilePath); + int result = QProcess::execute(DUMMYGENERATOR_BINARY, args); + QCOMPARE(result, 0); + + QFile generatedFile(generatedFilePath); + generatedFile.open(QIODevice::ReadOnly); + QCOMPARE(generatedFile.readAll().trimmed(), QByteArray(GENERATED_CONTENTS).trimmed()); + generatedFile.close(); + + QVERIFY(generatedFile.remove()); +} + +void DummyGenTest::testProjectFileArgumentsReading() +{ + QStringList args(QString("--project-file=%1/dummygentest-project.txt").arg(workDir)); + int result = QProcess::execute("generatorrunner", args); + QCOMPARE(result, 0); + + QFile logFile(workDir + "/dummygen-args.log"); + logFile.open(QIODevice::ReadOnly); + QStringList logContents; + while (!logFile.atEnd()) + logContents << logFile.readLine().trimmed(); + logContents.sort(); + QCOMPARE(logContents[0], QString("api-version = 1.2.3")); + QCOMPARE(logContents[1], QString("debug = sparse")); + QVERIFY(logContents[2].startsWith("dump-arguments = ")); + QVERIFY(logContents[2].endsWith("dummygen-args.log")); + QCOMPARE(logContents[3], QString("generator-set = dummy")); + QVERIFY(logContents[4].startsWith("header-file = ")); + QVERIFY(logContents[4].endsWith("test_global.h")); + QCOMPARE(logContents[5], + QDir::toNativeSeparators(QString("include-paths = /include/path/location1%1/include/path/location2").arg(PATH_SPLITTER))); + QCOMPARE(logContents[6], QString("no-suppress-warnings")); + QCOMPARE(logContents[7], QString("output-directory = /tmp/output")); + QVERIFY(logContents[8].startsWith("project-file = ")); + QVERIFY(logContents[8].endsWith("dummygentest-project.txt")); + QVERIFY(logContents[9].startsWith("typesystem-file = ")); + QVERIFY(logContents[9].endsWith("test_typesystem.xml")); + QCOMPARE(logContents[10], + QDir::toNativeSeparators(QString("typesystem-paths = /typesystem/path/location1%1/typesystem/path/location2").arg(PATH_SPLITTER))); +} + +QTEST_APPLESS_MAIN(DummyGenTest) + +#include "dummygentest.moc" + diff --git a/sources/shiboken2/tests/test_generator/dummygentest.h b/sources/shiboken2/tests/test_generator/dummygentest.h new file mode 100644 index 0000000..78bae1d --- /dev/null +++ b/sources/shiboken2/tests/test_generator/dummygentest.h @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef DUMMYGENTABLETEST_H +#define DUMMYGENTABLETEST_H + +#include + +class DummyGenerator; + +class DummyGenTest : public QObject +{ + Q_OBJECT + +private: + QString workDir; + QString headerFilePath; + QString typesystemFilePath; + QString generatedFilePath; + QString projectFilePath; + +private slots: + void initTestCase(); + void testCallGenRunnerWithFullPathToDummyGenModule(); + void testCallGenRunnerWithNameOfDummyGenModule(); + void testCallDummyGeneratorExecutable(); + void testProjectFileArgumentsReading(); +}; + +#endif + diff --git a/sources/shiboken2/tests/test_generator/dummygentestconfig.h.in b/sources/shiboken2/tests/test_generator/dummygentestconfig.h.in new file mode 100644 index 0000000..9da17dc --- /dev/null +++ b/sources/shiboken2/tests/test_generator/dummygentestconfig.h.in @@ -0,0 +1,15 @@ +#ifndef DUMMYGENTESTCONFIG_H +#define DUMMYGENTESTCONFIG_H + +#define MODULE_EXTENSION "@CMAKE_SHARED_LIBRARY_SUFFIX@" +#define DUMMYGENERATOR_BINARY "@DUMMYGENERATOR_EXECUTABLE@" +#define DUMMYGENERATOR_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@" + +#ifdef _WINDOWS + #define PATH_SPLITTER ";" +#else + #define PATH_SPLITTER ":" +#endif + +#endif // DUMMYGENTESTCONFIG_H + diff --git a/sources/shiboken2/tests/test_generator/main.cpp b/sources/shiboken2/tests/test_generator/main.cpp new file mode 100644 index 0000000..f928b4d --- /dev/null +++ b/sources/shiboken2/tests/test_generator/main.cpp @@ -0,0 +1,39 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of Qt for Python. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + QStringList args; + args.append("--generator-set=dummy"); + for (int i = 1; i < argc; i++) + args.append(argv[i]); + return QProcess::execute("generatorrunner", args); +} + diff --git a/sources/shiboken2/tests/test_generator/run_test.cmake b/sources/shiboken2/tests/test_generator/run_test.cmake new file mode 100644 index 0000000..34a821d --- /dev/null +++ b/sources/shiboken2/tests/test_generator/run_test.cmake @@ -0,0 +1,11 @@ +# The tests are run through this script due to a limitation +# on versions of CMake lesser than 2.8, that prevent setting +# environment variables for tests from working. + +set(ENV{PATH} "${ENV_PATH}") +set(ENV{QT_PLUGIN_PATH} "${ENV_QT_PLUGIN_PATH}") +execute_process(COMMAND ${TEST} WORKING_DIRECTORY "${WORKDIR}" RESULT_VARIABLE OK) + +if(NOT OK EQUAL 0) + message(SEND_ERROR "${TEST} failed!") +endif() diff --git a/sources/shiboken2/tests/test_generator/test_global.h b/sources/shiboken2/tests/test_generator/test_global.h new file mode 100644 index 0000000..6a95200 --- /dev/null +++ b/sources/shiboken2/tests/test_generator/test_global.h @@ -0,0 +1 @@ +struct Dummy {}; diff --git a/sources/shiboken2/tests/test_generator/test_typesystem.xml b/sources/shiboken2/tests/test_generator/test_typesystem.xml new file mode 100644 index 0000000..c19a4e9 --- /dev/null +++ b/sources/shiboken2/tests/test_generator/test_typesystem.xml @@ -0,0 +1,3 @@ + + + diff --git a/testing/__init__.py b/testing/__init__.py new file mode 100644 index 0000000..1098f47 --- /dev/null +++ b/testing/__init__.py @@ -0,0 +1,61 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import sys +from . import command + +main = command.main + +# modify print so that it always flushes +__builtins__["orig_print"] = __builtins__["print"] + +def print_flushed(*args, **kw): + orig_print(*args, **kw) + sys.stdout.flush() + +__builtins__["print"] = print_flushed + +print = print_flushed + +# We also could use "python -u" to get unbuffered output. +# This method is better since it needs no change of the interface. + +# eof diff --git a/testing/blacklist.py b/testing/blacklist.py new file mode 100644 index 0000000..c0a5e23 --- /dev/null +++ b/testing/blacklist.py @@ -0,0 +1,125 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +from .helper import decorate, StringIO +from .buildlog import builds + + +class BlackList(object): + def __init__(self, blname): + if blname == None: + f = StringIO() + self.raw_data = [] + else: + with open(blname) as f: + self.raw_data = f.readlines() + # keep all lines, but see what is not relevant + lines = self.raw_data[:] + + def filtered_line(line): + if '#' in line: + line = line[0:line.index('#')] + return line.split() + + # now put every bracketed line in a test + # and use subsequent identifiers for a match + def is_test(fline): + return fline and fline[0].startswith("[") + + self.tests = {} + + if not lines: + # nothing supplied + return + + self.index = {} + for idx, line in enumerate(lines): + fline = filtered_line(line) + if not fline: + continue + if is_test(fline): + break + # we have a global section + name = '' + self.tests[name] = [] + for idx, line in enumerate(lines): + fline = filtered_line(line) + if is_test(fline): + # a new name + name = decorate(fline[0][1:-1]) + self.tests[name] = [] + self.index[name] = idx + elif fline: + # a known name with a new entry + self.tests[name].append(fline) + + def find_matching_line(self, test): + """ + Take a test result. + Find a line in the according blacklist file where all keys of the line are found. + If line not found, do nothing. + if line found and test passed, it is a BPASS. + If line found and test failed, it is a BFAIL. + """ + passed = test.passed + classifiers = set(builds.classifiers) + + if "" in self.tests: + # this is a global section + for line in self.tests[""]: + keys = set(line) + if keys <= classifiers: + # found a match! + return line + mod_name = test.mod_name + if mod_name not in self.tests and decorate(mod_name) not in self.tests: + return None + if mod_name in self.tests: + thing = mod_name + else: + thing = decorate(mod_name) + for line in self.tests[thing]: + keys = set(line) + if keys <= classifiers: + # found a match! + return line + else: + return None # nothing found diff --git a/testing/buildlog.py b/testing/buildlog.py new file mode 100644 index 0000000..7559e4f --- /dev/null +++ b/testing/buildlog.py @@ -0,0 +1,121 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import os +import sys +from collections import namedtuple + +from .helper import script_dir + +LogEntry = namedtuple("LogEntry", ["log_dir", "build_dir"]) + + +class BuildLog(object): + """ + This class is a convenience wrapper around a list of log entries. + + The list of entries is sorted by date and checked for consistency. + For simplicity and readability, the log entries are named tuples. + + """ + def __init__(self): + history_dir = os.path.join(script_dir, 'build_history') + build_history = [] + for timestamp in os.listdir(history_dir): + log_dir = os.path.join(history_dir, timestamp) + if not os.path.isdir(log_dir): + continue + fpath = os.path.join(log_dir, 'build_dir.txt') + if not os.path.exists(fpath): + print("Warning: %s not found, skipped" % fpath) + continue + with open(fpath) as f: + build_dir = f.read().strip() + if not os.path.exists(build_dir): + rel_dir, low_part = os.path.split(build_dir) + rel_dir, two_part = os.path.split(rel_dir) + if two_part.startswith("pyside") and two_part.endswith("build"): + build_dir = os.path.abspath(os.path.join(two_part, low_part)) + if os.path.exists(build_dir): + print("Note: build_dir was probably moved.") + else: + print("Warning: missing build dir %s" % build_dir) + continue + entry = LogEntry(log_dir, build_dir) + build_history.append(entry) + # we take the latest build for now. + build_history.sort() + self.history = build_history + self._buildno = None + + def set_buildno(self, buildno): + self.history[buildno] # test + self._buildno = buildno + + @property + def selected(self): + if self._buildno is None: + return None + if self.history is None: + return None + return self.history[self._buildno] + + @property + def classifiers(self): + if not self.selected: + raise ValueError('+++ No build with the configuration found!') + # Python2 legacy: Correct 'linux2' to 'linux', recommended way. + platform = 'linux' if sys.platform.startswith('linux') else sys.platform + res = [platform] + # the rest must be guessed from the given filename + path = self.selected.build_dir + base = os.path.basename(path) + res.extend(base.split('-')) + # add all the python and qt subkeys + for entry in res: + parts = entry.split(".") + for idx in range(len(parts)): + key = ".".join(parts[:idx]) + if key not in res: + res.append(key) + return res + +builds = BuildLog() diff --git a/testing/command.py b/testing/command.py new file mode 100644 index 0000000..dd71eab --- /dev/null +++ b/testing/command.py @@ -0,0 +1,340 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +""" +testrunner +========== + +Provide an interface to the pyside tests. +----------------------------------------- + +This program can only be run if PySide was build with tests enabled. +All tests are run in a single pass, and if not blacklisted, an error +is raised at the end of the run. + +Recommended build process: +There is no need to install the project. +Building the project with something like + + python setup.py build --build-tests --qmake= --ignore-git --debug + +is sufficient. The tests are run by changing into the latest build dir and there +into pyside2, then 'make test'. + + +New testing policy: +------------------- + +The tests are now run 5 times, and errors are reported +when they appear at least 3 times. With the variable COIN_RERUN_FAILED_ONLY it is +possible to configure if all tests should be rerun or the failed ones, only. + +The full mode can be tested locally by setting + + export COIN_RERUN_FAILED_ONLY=0 +""" + +import os +import sys +import argparse +from textwrap import dedent +from collections import OrderedDict +from timeit import default_timer as timer + +from .helper import script_dir, decorate +from .buildlog import builds +from .blacklist import BlackList +from .runner import TestRunner +from .parser import TestParser + +# Should we repeat only failed tests? +COIN_RERUN_FAILED_ONLY = True +COIN_THRESHOLD = 3 # report error if >= +COIN_TESTING = 5 # number of runs + +if (os.environ.get("COIN_RERUN_FAILED_ONLY", "1").lower() in + "0 f false n no".split()): + COIN_RERUN_FAILED_ONLY = False + +def test_project(project, args, blacklist, runs): + ret = [] + + # remove files from a former run + for idx in range(runs): + index = idx + 1 + runner = TestRunner(builds.selected, project, index) + if os.path.exists(runner.logfile) and not args.skip: + os.unlink(runner.logfile) + # now start the real run + for idx in range(runs): + index = idx + 1 + runner = TestRunner(builds.selected, project, index) + print() + print("********* Start testing of %s *********" % project) + print("Config: Using", " ".join(builds.classifiers)) + print() + if os.path.exists(runner.logfile) and args.skip: + print("Parsing existing log file:", runner.logfile) + else: + if index > 1 and COIN_RERUN_FAILED_ONLY: + rerun = rerun_list + if not rerun: + print("--- no re-runs found, stopping before test {} ---" + .format(index)) + break + else: + rerun = None + runner.run("RUN {}:".format(idx + 1), rerun, 10 * 60) + result = TestParser(runner.logfile) + r = 5 * [0] + rerun_list = [] + print() + for test, res in result.iter_blacklist(blacklist): + print("RES {}:".format(index), end=" ") + print("%-6s" % res, decorate(test) + "()") + r[0] += 1 if res == "PASS" else 0 + r[1] += 1 if res == "FAIL!" else 0 + r[2] += 1 if res == "SKIPPED" else 0 # not yet supported + r[3] += 1 if res == "BFAIL" else 0 + r[4] += 1 if res == "BPASS" else 0 + if res not in ("PASS", "BPASS"): + rerun_list.append(test) + print() + print("Totals:", sum(r), "tests.", + "{} passed, {} failed, {} skipped, {} blacklisted, {} bpassed." + .format(*r)) + print() + print("********* Finished testing of %s *********" % project) + print() + ret.append(r) + + return ret + +def main(): + # create the top-level command parser + start_time = timer() + all_projects = "shiboken2 pyside2 pyside2-tools".split() + tested_projects = "shiboken2 pyside2".split() + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + description=dedent("""\ + Run the tests for some projects, default = '{}'. + + Testing is now repeated up to {rep} times, and errors are + only reported if they occur {thr} or more times. + The environment variable COIN_RERUN_FAILED_ONLY controls if errors + are only repeated if there are errors. The default is "1". + """.format("' '".join(tested_projects), thr=COIN_THRESHOLD, rep=COIN_TESTING))) + subparsers = parser.add_subparsers(dest="subparser_name") + + # create the parser for the "test" command + parser_test = subparsers.add_parser("test") + group = parser_test.add_mutually_exclusive_group(required=False) + blacklist_default = os.path.join(script_dir, 'build_history', 'blacklist.txt') + group.add_argument("--blacklist", "-b", type=argparse.FileType('r'), + default=blacklist_default, + help='a Qt blacklist file (default: {})'.format(blacklist_default)) + parser_test.add_argument("--skip", action='store_true', + help="skip the tests if they were run before") + parser_test.add_argument("--environ", nargs='+', + help="use name=value ... to set environment variables") + parser_test.add_argument("--buildno", default=-1, type=int, + help="use build number n (0-based), latest = -1 (default)") + parser_test.add_argument("--projects", nargs='+', type=str, + default=tested_projects, + choices=all_projects, + help="use '{}'' (default) or other projects" + .format("' '".join(tested_projects))) + parser_getcwd = subparsers.add_parser("getcwd") + parser_getcwd.add_argument("filename", type=argparse.FileType('w'), + help="write the build dir name into a file") + parser_getcwd.add_argument("--buildno", default=-1, type=int, + help="use build number n (0-based), latest = -1 (default)") + parser_list = subparsers.add_parser("list") + args = parser.parse_args() + + if hasattr(args, "buildno"): + try: + builds.set_buildno(args.buildno) + except IndexError: + print("history out of range. Try '%s list'" % __file__) + sys.exit(1) + + if args.subparser_name == "getcwd": + print(builds.selected.build_dir, file=args.filename) + print(builds.selected.build_dir, "written to file", args.filename.name) + sys.exit(0) + elif args.subparser_name == "test": + pass # we do it afterwards + elif args.subparser_name == "list": + rp = os.path.relpath + print() + print("History") + print("-------") + for idx, build in enumerate(builds.history): + print(idx, rp(build.log_dir), rp(build.build_dir)) + print() + print("Note: only the last history entry of a folder is valid!") + sys.exit(0) + else: + parser.print_help() + sys.exit(1) + + if args.blacklist: + args.blacklist.close() + bl = BlackList(args.blacklist.name) + else: + bl = BlackList(None) + if args.environ: + for line in args.environ: + things = line.split("=") + if len(things) != 2: + raise ValueError("you need to pass one or more name=value pairs.") + key, value = things + os.environ[key] = value + + print(dedent("""\ + System: + Platform={platform} + Executable={executable} + Version={version_lf} + API version={api_version} + + Environment:""") + .format(version_lf=sys.version.replace("\n", " "), **sys.__dict__)) + for key, value in sorted(os.environ.items()): + print(" {}={}".format(key, value)) + print() + + q = 5 * [0] + + runs = COIN_TESTING + fail_crit = COIN_THRESHOLD + # now loop over the projects and accumulate + for project in args.projects: + res = test_project(project, args, bl, runs) + for idx, r in enumerate(res): + q = list(map(lambda x, y: x+y, r, q)) + + if len(args.projects) > 1: + print("All above projects:", sum(q), "tests.", + "{} passed, {} failed, {} skipped, {} blacklisted, {} bpassed." + .format(*q)) + print() + + tot_res = OrderedDict() + for project in args.projects: + for idx in range(runs): + index = idx + 1 + runner = TestRunner(builds.selected, project, index) + result = TestParser(runner.logfile) + for test, res in result.iter_blacklist(bl): + key = project + ":" + test + tot_res.setdefault(key, []) + tot_res[key].append(res) + tot_flaky = 0 + print("*" * 79) + print("**") + print("* Summary Of All Tests") + print("*") + empty = True + for test, res in tot_res.items(): + pass__c = res.count("PASS") + bpass_c = res.count("BPASS") + fail__c = res.count("FAIL!") + bfail_c = res.count("BFAIL") + fail2_c = fail__c + bfail_c + if pass__c == len(res): + continue + elif bpass_c == runs and runs > 1: + msg = "Remove blacklisting; test passes" + elif fail__c == runs: + msg = "Newly detected Real test failure!" + elif bfail_c == runs: + msg = "Keep blacklisting ;-(" + elif fail2_c > 0 and fail2_c < len(res): + msg = "Flaky test" + tot_flaky += 1 + else: + continue + empty = False + padding = 6 * runs + txt = " ".join(("{:<{width}}".format(piece, width=5) for piece in res)) + txt = (txt + padding * " ")[:padding] + testpad = 36 + if len(test) < testpad: + test += (testpad - len(test)) * " " + print(txt, decorate(test), msg) + if empty: + print("* (empty)") + print("*") + print("**") + print("*" * 79) + print() + if runs > 1: + print("Total flaky tests: errors but not always = {}".format(tot_flaky)) + print() + else: + print("For info about flaky tests, we need to perform more than one run.") + print("Please activate the COIN mode: 'export QTEST_ENVIRONMENT=ci'") + print() + # nag us about unsupported projects + ap, tp = set(all_projects), set(tested_projects) + if ap != tp: + print("+++++ Note: please support", " ".join(ap-tp), "+++++") + print() + + stop_time = timer() + used_time = stop_time - start_time + # Now create an error if the criterion is met: + try: + err_crit = "'FAIL! >= {}'".format(fail_crit) + for res in tot_res.values(): + if res.count("FAIL!") >= fail_crit: + raise ValueError("At least one failure was not blacklisted " + "and met the criterion {}" + .format(err_crit)) + print("No test met the error criterion {}".format(err_crit)) + finally: + print() + print("Total time of whole Python script = {:0.2f} sec".format(used_time)) + print() +# eof diff --git a/testing/helper.py b/testing/helper.py new file mode 100644 index 0000000..0d7b31a --- /dev/null +++ b/testing/helper.py @@ -0,0 +1,73 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import os +import sys +from collections import namedtuple + +PY3 = sys.version_info[0] == 3 # from the six module +from subprocess import PIPE +if PY3: + from subprocess import TimeoutExpired + from io import StringIO +else: + class SubprocessError(Exception): pass + # this is a fake, just to keep the source compatible. + # timeout support is in python 3.3 and above. + class TimeoutExpired(SubprocessError): pass + from StringIO import StringIO + + +script_dir = os.path.dirname(os.path.dirname(__file__)) + +def decorate(mod_name): + """ + Write the combination of "modulename_funcname" + in the Qt-like form "modulename::funcname" + """ + if "_" not in mod_name: + return mod_name + if "::" in mod_name: + return mod_name + name, rest = mod_name.split("_", 1) + return name + "::" + rest + +#eof diff --git a/testing/parser.py b/testing/parser.py new file mode 100644 index 0000000..035aab0 --- /dev/null +++ b/testing/parser.py @@ -0,0 +1,150 @@ +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import os +import re +from collections import namedtuple +from .helper import StringIO + +_EXAMPLE = """ +Example output: + +ip1 n sharp mod_name code tim +----------------------------------------------------------------------------------------- +114/391 Test #114: QtCore_qfileinfo_test-42 ........................ Passed 0.10 sec + Start 115: QtCore_qfile_test +115/391 Test #115: QtCore_qfile_test ...............................***Failed 0.11 sec + Start 116: QtCore_qflags_test + +We will only look for the dotted lines and calculate everything from that. +The summary statistics at the end will be ignored. That allows us to test +this functionality with short timeout values. + +Note the field "mod_name". I had split this before, but it is necessary +to use the combination as the key, because the test names are not unique. +""" + +# validation of our pattern: + +_TEST_PAT = r""" + ^ # start + \s* # any whitespace ==: WS + ([0-9]+)/([0-9]+) # ip1 "/" n + \s+ # some WS + Test # "Test" + \s+ # some WS + \# # sharp symbol "#" + ([0-9]+) # sharp + : # colon symbol ':' + \s+ # some WS + ([\w-]+) # mod_name + .*? # whatever (non greedy) + ( # + (Passed) # either "Passed", None + | # + \*\*\*(\w+.*?) # or None, "Something" + ) # code + \s+ # some WS + ([0-9]+\.[0-9]+) # tim + \s+ # some WS + sec # "sec" + \s* # any WS + $ # end + """ +assert re.match(_TEST_PAT, _EXAMPLE.splitlines()[5], re.VERBOSE) +assert len(re.match(_TEST_PAT, _EXAMPLE.splitlines()[5], re.VERBOSE).groups()) == 8 +assert len(re.match(_TEST_PAT, _EXAMPLE.splitlines()[7], re.VERBOSE).groups()) == 8 + +TestResult = namedtuple("TestResult", ["idx", "mod_name", "passed", + "code", "time"]) +def _parse_tests(test_log): + """ + Create a TestResult object for every entry. + """ + result = [] + if isinstance(test_log, StringIO): + lines = test_log.readlines() + elif test_log is not None and os.path.exists(test_log): + with open(test_log) as f: + lines = f.readlines() + else: + lines = [] + pat = _TEST_PAT + for line in lines: + match = re.match(pat, line, re.VERBOSE) + if match: + idx, n, sharp, mod_name, much_stuff, code1, code2, tim = tup = match.groups() + # either code1 or code2 is None + code = code1 or code2 + idx, n, code, tim = int(idx), int(n), code.lower(), float(tim) + res = TestResult(idx, mod_name, code == "passed", code, tim) + result.append(res) + return result + + +class TestParser(object): + def __init__(self, test_log): + self._result = _parse_tests(test_log) + + @property + def result(self): + return self._result + + def __len__(self): + return len(self._result) + + def iter_blacklist(self, blacklist): + bl = blacklist + for line in self._result: + mod_name = line.mod_name + passed = line.passed + match = bl.find_matching_line(line) + if not passed: + if match: + res = "BFAIL" + else: + res = "FAIL!" + else: + if match: + res = "BPASS" + else: + res = "PASS" + yield mod_name, res diff --git a/testing/runner.py b/testing/runner.py new file mode 100644 index 0000000..3c99df7 --- /dev/null +++ b/testing/runner.py @@ -0,0 +1,228 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the Qt for Python project. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function + +import os +import sys +import re +import subprocess +import inspect + +from collections import namedtuple +from textwrap import dedent + +from .buildlog import builds +from .helper import decorate, PY3, TimeoutExpired + +# Get the dir path to the utils module +try: + this_file = __file__ +except NameError: + this_file = sys.argv[0] +this_file = os.path.abspath(this_file) +this_dir = os.path.dirname(this_file) +build_scripts_dir = os.path.abspath(os.path.join(this_dir, '../build_scripts')) + +sys.path.append(build_scripts_dir) +from utils import detect_clang + +class TestRunner(object): + def __init__(self, log_entry, project, index): + self.log_entry = log_entry + built_path = log_entry.build_dir + self.test_dir = os.path.join(built_path, project) + log_dir = log_entry.log_dir + if index is not None: + self.logfile = os.path.join(log_dir, project + ".{}.log".format(index)) + else: + self.logfile = os.path.join(log_dir, project + ".log") + os.environ['CTEST_OUTPUT_ON_FAILURE'] = '1' + self._setup_clang() + self._setup() + + def _setup_clang(self): + if sys.platform != "win32": + return + clang_dir = detect_clang() + if clang_dir[0]: + clang_bin_dir = os.path.join(clang_dir[0], 'bin') + path = os.environ.get('PATH') + if not clang_bin_dir in path: + os.environ['PATH'] = clang_bin_dir + os.pathsep + path + print("Adding %s as detected by %s to PATH" % (clang_bin_dir, clang_dir[1])) + + def _find_ctest(self): + """ + Find ctest in the Makefile + + We no longer use make, but the ctest command directly. + It is convenient to look for the ctest program using the Makefile. + This serves us two purposes: + + - there is no dependency of the PATH variable, + - each project is checked whether ctest was configured. + """ + make_path = os.path.join(self.test_dir, "Makefile") + look_for = "--force-new-ctest-process" + line = None + with open(make_path) as makefile: + for line in makefile: + if look_for in line: + break + else: + # We have probably forgotten to build the tests. + # Give a nice error message with a shortened but exact path. + rel_path = os.path.relpath(make_path) + msg = dedent("""\n + {line} + ** ctest is not in '{}'. + * Did you forget to build the tests with '--build-tests' in setup.py? + """).format(rel_path, line=79 * "*") + raise RuntimeError(msg) + # the ctest program is on the left to look_for + assert line, "Did not find {}".format(look_for) + ctest = re.search(r'(\S+|"([^"]+)")\s+' + look_for, line).groups() + return ctest[1] or ctest[0] + + def _setup(self): + self.ctestCommand = self._find_ctest() + + def _run(self, cmd_tuple, label, timeout): + """ + Perform a test run in a given build + + The build can be stopped by a keyboard interrupt for testing + this script. Also, a timeout can be used. + + After the change to directly using ctest, we no longer use + "--force-new-ctest-process". Until now this has no drawbacks + but was a little faster. + """ + + self.cmd = cmd_tuple + # We no longer use the shell option. It introduces wrong handling + # of certain characters which are not yet correctly escaped: + # Especially the "^" caret char is treated as an escape, and pipe symbols + # without a caret are interpreted as such which leads to weirdness. + # Since we have all commands with explicit paths and don't use shell + # commands, this should work fine. + print(dedent("""\ + running {cmd} + in {test_dir} + """).format(**self.__dict__)) + ctest_process = subprocess.Popen(self.cmd, + cwd=self.test_dir, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + def py_tee(input, output, label): + ''' + A simple (incomplete) tee command in Python + + This script simply logs everything from input to output + while the output gets some decoration. The specific reason + to have this script at all is: + + - it is necessary to have some decoration as prefix, since + we run commands several times + + - collecting all output and then decorating is not nice if + you have to wait for a long time + + The special escape is for the case of an embedded file in + the output. + ''' + def xprint(*args, **kw): + print(*args, file=output, **kw) + + # 'for line in input:' would read into too large chunks + labelled = True + while True: + line = input.readline() + if not line: + break + if line.startswith('BEGIN_FILE'): + labelled = False + txt = line.rstrip() + xprint(label, txt) if label and labelled else xprint(txt) + if line.startswith('END_FILE'): + labelled = True + + tee_src = dedent("""\ + from __future__ import print_function + import sys + {} + py_tee(sys.stdin, sys.stdout, '{label}') + """).format(dedent(inspect.getsource(py_tee)), label=label) + tee_cmd = (sys.executable, "-E", "-u", "-c", tee_src) + tee_process = subprocess.Popen(tee_cmd, + cwd=self.test_dir, + stdin=ctest_process.stdout) + try: + comm = tee_process.communicate + output = (comm(timeout=timeout) if PY3 else comm())[0] + except (TimeoutExpired, KeyboardInterrupt): + print() + print("aborted, partial result") + ctest_process.kill() + outs, errs = ctest_process.communicate() + # ctest lists to a temp file. Move it to the log + tmp_name = self.logfile + ".tmp" + if os.path.exists(tmp_name): + if os.path.exists(self.logfile): + os.unlink(self.logfile) + os.rename(tmp_name, self.logfile) + self.partial = True + else: + self.partial = False + finally: + print("End of the test run") + print() + tee_process.wait() + + def run(self, label, rerun, timeout): + cmd = self.ctestCommand, "--output-log", self.logfile + if rerun is not None: + # cmd += ("--rerun-failed",) + # For some reason, this worked never in the script file. + # We pass instead the test names as a regex: + words = "^(" + "|".join(rerun) + ")$" + cmd += ("--tests-regex", words) + self._run(cmd, label, timeout) +# eof diff --git a/testrunner.py b/testrunner.py new file mode 100644 index 0000000..a16a07a --- /dev/null +++ b/testrunner.py @@ -0,0 +1,46 @@ +############################################################################# +## +## Copyright (C) 2016 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from __future__ import print_function, absolute_import + +import sys +import testing +import testing.blacklist # just to be sure it's us... + +testing.main() -- 2.30.2
+
+
+ + {{ relbar() }} +
+
+{%- endblock -%} + +{%- block footer %} + +